/**
 * File Upload functions
 *
 * [2007-10-01 mb] created
 *
 * $Rev: 480 $ Revision of last commit
 * $Author: martin $ Author of last commit
 * $Date: 2008-09-26 08:30:09 +0200 (Fr, 26 Sep 2008) $ Date of last commit
 */

/**
 * The php script returns a js-include into the iframedialog and starts this method, when the request is finished
 *
 * [2009-11-09 mb] created
 * @param {Object} res
 */
function stopUpload(res) {
  var text = "";

	// show the result-message
	switch(res) {
		case '-2':
		  pluginConfig.lang == 'de' ? text = "Dies ist leider kein JPEG" : text = "This is not a JPEG";
		  break;
		case '-1':
		  pluginConfig.lang == 'de' ? text = "Zugelassene Dateigröße überschritten" : text = "Allowed file size exceeded";
		  break;
		case '0':
		  pluginConfig.lang == 'de' ? text = "Upps, da ist wohl was schiefgegangen. Bitte versuch's doch später nochmal." : text = "Ooops, an unknown error has occured. Please try again later.";
		  break;
		case '1':
		  pluginConfig.lang == 'de' ? text = "Upload erfolgreich" : text = "Upload successful";
		  break;
		default:
		  text = res;
		  break;
	}

	// stop ajax-loader
  $('#fileupload-ajax').css({
	   width: '100%',
    'background-image': 'none'
	});

  $('#fileupload-ajax').text(text);

	// reload gallery
	if (res == 1) {
		$('#gallery-left-box, #gallery-right-box').css("display", "inline");
    $('#gallery-no-images').css("display", "none");
  	galleryData.image_id = 0;
  	loadGallery(galleries[0], galleryData);

    $('#fileupload-main-frame').css('display', 'none');
    $('#dialog-overlay').fadeOut(function() {
       $('#dialog-overlay').remove();
    });
    $('#fileupload-content, #fileupload-agb-text').css('display', 'none');
    $('#dialog-artist .menu-all, #dialog-concert .menu-all').remove();
  }
}

/**
 * is started before the submit, checks if all input-dialogs are set and show the ajax-loader
 * [2009-11-09 mb] created
 */
function startUpload() {
	if ($('#hidden-product').val()) {

		if ($('#fileupload-input').val()) {

			$('#fileupload-ajax').text("");
			$('#fileupload-ajax').css({
				width: 32,
				'background-image': 'url(' + path.img_root + 'concert_images/lightbox/lightbox-ico-loading.gif)'
			});
			$('#fileuploadform').submit(); // submit the form if everything is correct
	  } else {
			if (pluginConfig.lang == 'de')
			 $('#fileupload-ajax').text("Du hast keine Datei ausgewählt");
			else
			 $('#fileupload-ajax').text("No file chosen");
		}
  } else {
		if (pluginConfig.lang == 'de')
  	 $('#fileupload-ajax').text("Bitte wähle VOR dem Upload Artist und Konzert aus um Dein Bild zuordnen zu können.");
		else
		 $('#fileupload-ajax').text("Please choose the artist and concert you wish to submit your picture to BEFORE uploading your picture.");
  }
}

/**
 * class to display a warning-, fileupload-dialog
 * @param {Object} lang
 */
function Dialog() {
  this.lang = 'de';
	this.add_sid = '';
	this.insert_sid = '';
  this.artists = new Object();  // all artists
	this.concerts = new Object();
	var self = this;
	this.band = 0;
  this.concert = 0;
  this.index = '#'; // the choosen alphabetical first letter in the file menu


	this.setLang = function(lang) {
		this.lang = lang;
	}

	this.setAddSid = function(add_sid) {
		this.add_sid = add_sid;
	}

	this.setInsertSid = function(insert_sid) {
    this.insert_sid = insert_sid;
  }

  /**
   * init the dialog-overlay
   */
	function init() {

		$('#dialog-overlay, #dialog-close, #fileupload-close').unbind().click(function() {
      close();
		});

	  // Get page sizes
    var arrPageSizes = ___getPageSize();
    // Style overlay and show it
    $('#dialog-overlay').css({
        backgroundColor: '#000',
        opacity: 0.8,
        width: arrPageSizes[0],
        height: arrPageSizes[1]
    }).fadeIn();

		var arrPageScroll = ___getPageScroll();
    // Calculate top and left offset for the jquery-lightbox div object and show it
    $('#dialog-main-frame, #fileupload-main-frame').css({
        top: 50,
        left: arrPageScroll[0]
    }).show();
    $.scrollTo(0,0);
	}

  /**
   / THIRD FUNCTION
   * getPageSize() by quirksmode.com
   *
   * @return Array Return an array with page width, height and window width, height
   */
  function ___getPageSize(){
      var xScroll, yScroll;
      if (window.innerHeight && window.scrollMaxY) {
          xScroll = window.innerWidth + window.scrollMaxX;
          yScroll = window.innerHeight + window.scrollMaxY;
      }
      else
          if (document.body.scrollHeight > document.body.offsetHeight) { // all but Explorer Mac
              xScroll = document.body.scrollWidth;
              yScroll = document.body.scrollHeight;
          }
          else { // Explorer Mac...would also work in Explorer 6 Strict, Mozilla and Safari
              xScroll = document.body.offsetWidth;
              yScroll = document.body.offsetHeight;
          }
      var windowWidth, windowHeight;
      if (self.innerHeight) { // all except Explorer
          if (document.documentElement.clientWidth) {
              windowWidth = document.documentElement.clientWidth;
          }
          else {
              windowWidth = self.innerWidth;
          }
          windowHeight = self.innerHeight;
      }
      else
          if (document.documentElement && document.documentElement.clientHeight) { // Explorer 6 Strict Mode
              windowWidth = document.documentElement.clientWidth;
              windowHeight = document.documentElement.clientHeight;
          }
          else
              if (document.body) { // other Explorers
                  windowWidth = document.body.clientWidth;
                  windowHeight = document.body.clientHeight;
              }
      // for small pages with total height less then height of the viewport
      if (yScroll < windowHeight) {
          pageHeight = windowHeight;
      }
      else {
          pageHeight = yScroll;
      }
      // for small pages with total width less then width of the viewport
      if (xScroll < windowWidth) {
          pageWidth = xScroll;
      }
      else {
          pageWidth = windowWidth;
      }
      arrayPageSize = new Array(pageWidth, pageHeight, windowWidth, windowHeight);
      return arrayPageSize;
  };


  /**
   / THIRD FUNCTION
   * getPageScroll() by quirksmode.com
   *
   * @return Array Return an array with x,y page scroll values.
   */
  function ___getPageScroll(){
      var xScroll, yScroll;
      if (self.pageYOffset) {
          yScroll = self.pageYOffset;
          xScroll = self.pageXOffset;
      }
      else
          if (document.documentElement && document.documentElement.scrollTop) { // Explorer 6 Strict
              yScroll = document.documentElement.scrollTop;
              xScroll = document.documentElement.scrollLeft;
          }
          else
              if (document.body) {// all other Explorers
                  yScroll = document.body.scrollTop;
                  xScroll = document.body.scrollLeft;
              }
      arrayPageScroll = new Array(xScroll, yScroll);
      return arrayPageScroll;
  };


	function close() {
		$('#dialog-main-frame').remove();
		$('#dialog-artist .menu-all, #dialog-concert .menu-all').remove();
		$('#fileupload-main-frame').css('display', 'none');
    $('#dialog-overlay').fadeOut(function() {
       $('#dialog-overlay').remove();
    });
		$('#fileupload-content, #fileupload-agb-text').css('display', 'none');

	}

	this.getButton = function(text, link) {
	 var button =
	 '<a href="' + link + '" style="float: right; text-decoration: none;display:block;margin-bottom: 10px;">' +
		'<div class="button btn-anthrazit-large clearfix" style="width: 221px; text-align: center;">'+
		  '<div class="left-cnr"/>' +
		  '<div class="button-content">' +
		  '<div style="float: left; width: 206px;">' + text +'</div>'+
		'</div>' +
		'<div class="right-cnr"/>'+
		'</div>'+
	 '</a>';

		return button;
	}

	this.encoreDialog = function(encore_info) {
		var info = JSON.parse(encore_info);

		if (info.special_id && info.special_id == 49) // dth-xmas
			var text_1 = this.lang == 'de' ? 'Jetzt Konzert downloaden' : 'Download concert now';
		else
    	var text_1 = this.lang == 'de' ? 'Jetzt Zugaben downloaden' : 'Download encores now';

		var text_2 = this.lang == 'de' ? 'Fotos anschauen / hochladen' : 'View / upload photos';
		var text_3 = this.lang == 'de' ? 'Bewertung abgeben' : 'Leave a comment';

		var html =

		'<div style="width: 574px;padding-bottom:5px;height:270px;background-color: #fff;margin-top: 0px;padding-left:10px">'+
		  '<div style="position:relative;font-size:18px;max-height:30px;font-weight:normal;margin-bottom:15px;color:#666">' + info.band_title + '-' + info.concert + '</div>' +
      '<div style="float:left; width: 320px; height: 235px;background: url(' + path.img_root + 'editorial/' + info.image + ')"></div>' +
		  '<div style="float:left; width: 250px;">' +
				this.getButton(text_1, info.download) +  // Download Encores
				this.getButton(text_2, info.photo_link) +    // Upload Photos
				this.getButton(text_3, info.comment_link + '#comments') +   // Submit a Comment
			'</div>' +
		'</div>';

		var headline = this.lang == 'de' ? 'Was möchtest Du jetzt tun?' : 'Here\'s what you can do next';
    this.warningDialog(headline, html);

		$('#dialog-main-frame').css('top', '50px');
    $('#dialog-dialog').css('width', '593px');
    $('#dialog-all').css('width', '680px');
    $('#dialog-box, #dialog-header, #dialog-footer, #dialog-headline').css('width', '617px');
    $('#dialog-header .ct, #dialog-footer .ct').css('width', '609px');

	}

	this.dthxmasDialog = function() {

		$('#dialog-overlay').remove();
    $('#dialog-main-frame').remove();

    var dialog =
    '<div id="dialog-overlay"></div>' +
    '<div id="dialog-main-frame">' +
		' <div id="dialog-all">' +
		'   <div id="dialog-dialog" style="background:none;height:700px">' +
		'     <div style="position:absolute;width:780px;z-index:100003;">' +
		'      <div id="dialog-close" style="float:right">' +
		'   	   <div class="close-class" style="width:110px;height:37px;"></div>' +
		'      </div>'+
		'     </div>' +
		'     <a href="' + path.rel2root + this.lang + '/artist/3976/live-recordings/2856/4259/Die-Toten-Hosen-Weihnachten-in-Duesseldorf---Concert-Stick-Sonderedition.html">' +
    '       <img width="800" height="600" src="' + path.img_root + 'editorial/' + 'DTH-overlay.gif' + '"></img>' +
		'     </a>' +
		'   </div>' +
		' </div>' +
    '</div>';

    $('body').append(dialog);
    $('#dialog-main-frame').css('width', '100%');
    $('#dialog-all').hide();
    $('#dialog-all').slideDown();

		$('#dialog-dialog').css(
		{'width' : '800px',
		 'position' : 'static'
		});
		$('#dialog-all').css('width', '62%');
		$('#dialog-box').css('width', '800px');

    $('#dialog-main-frame').css('top', '50px');
     //$('#dialog-dialog a').children('img').attr('src', path.img_root + 'editorial/' + 'DTH-overlay.gif');
    init();
	}


  this.loginDialog = function(link) {

		var notice = '';
		var text = '';
		if (this.lang == 'de') {
		  notice = 'Hinweis';
		  text = 'Bevor Du diese Funktion nutzen kannst musst Du eingeloggt sein: ' + '<a href="' + link + '">Login</a>';
	  } else {
			notice = 'Notice';
      text = 'You have to be logged in, before you can use this feature: ' + '<a href="' + link + '">Login</a>';
		}
		this.warningDialog(notice, text);
    $('#dialog-all').css('width', '470px');
	}
	/**
	 * show a warning dialog with the headline in the param header and the text in the param text
	 * @param {Object} header
	 * @param {Object} text
	 */
	this.warningDialog = function(header, text) {

		$('#dialog-overlay').remove();
    $('#dialog-main-frame').remove();

		var dialog =
		'<div id="dialog-overlay"></div>' +
    '<div id="dialog-main-frame">' +
		' <div id="dialog-all">' +
		'  <div id="dialog-box">' +
    '   <div id="dialog-dialog" >' +
		     text
		'   </div>' +
		'  </div>' +
		' </div>' +
    '</div>';

		$('body').append(dialog);
    $('#dialog-main-frame').css('width', '100%');
    $('#dialog-dialog').hide();
    $('#dialog-dialog').slideDown();

    $('#dialog-box').prepend('<div id="dialog-header" class="box-header white clearfix"><div class="lt"></div><div class="ct" style="width: 416px;"></div><div class="rt"></div></div>');
		$('#dialog-box').prepend('<div id="dialog-headline"><h1>' + header + '</h1><div id="dialog-close">close x</div></div>');
    $('#dialog-box').append('<div id="dialog-footer" class="box-footer white clearfix"><div class="lb"></div><div class="ct" style="width: 416px"></div><div class="rb"></div></div>');

    init();

	}

	/**
	 * sends an ajax request to get all artists and a menu-template, displayed at the right side of the fileupload-dialog
	 */
	function getFileMenu() {
    $('#dialog-artist, #dialog-concert').css('display', 'none');
	  $('#dialog-select-ajax').css({
      width: 32,
			height: 32,
			margin: '0 auto',
      'background-image': 'url(' + path.img_root + 'concert_images/lightbox/lightbox-ico-loading.gif)'
    });
		$.ajax(
		  { type: "POST", url: (shop == false ? path.rel2root : path.rel2root_cps) + "_inc/json/concert_images.php" + self.add_sid,
			  data: {
              dataString: JSON.stringify($.extend( { mode: "upload_menu"}, galleryData)), shop: pluginConfig.shop_id
				},
        dataType: "json",
        success: function(data) {
					//$('#fileupload-all').append(data.select);

	        self.artists = data.artist;
					self.concerts = data.concert;
					self.setFileMenuEvents();

	      },
		  error: function(data) {
		    alert(data.responseText);
		  }
    });
		$('#dialog-artist, #dialog-concert').css('display', 'block');
    $('#dialog-select-ajax').css({'height': 0, 'background-image': 'none'});
	}

	/**
	 * show all artists with the given index in the artists array
	 * @param {Object} index
	 * @param {Object} entries_from
	 */
	this.getFileMenuArtists = function(index, page) {
    var i = 0;
		--page;
		var artist_list = '<div id="artist-list"><span style="font-weight:bold;">' + index + '</span><br /><ul style="margin-left:15px">';

		for (var band_id in this.artists[index]) {
			++i;
      if (i > (page*10) &&  i <= ((page*10)+10))
				artist_list += '<li><a id=' + band_id + ' style="cursor:pointer;">' + this.artists[index][band_id] + '</a></li>';
		}
		artist_list += '</ul></div>';

		return artist_list;
	}

	this.getPagingArtist = function() {
		var len = 0;
    var page = 1;
    var paging = '<div id="artist-list-paging"><br/>';

    for ( var i in this.artists[this.index]) {
      ++len;
      if(len % 10 == 0) {
				if (page == 1)
				  paging += '<a style="cursor:pointer;">' + (page++) + '</a> ';

        paging += '<a style="cursor:pointer;">' + (page++) + '</a> ';
      }
    }
    paging += '</div>';

    return paging;
	}

	this.getPagingConcert = function() {
		var len = 0;
		var page = 1;
		var paging = '<div id="concert-list-paging"><br/>';
		for ( var i in this.concerts[this.band]) {
			++len;
			if(len % 10 == 0) {
				if (page == 1)
          paging += '<a style="cursor:pointer;">' + (page++) + '</a> ';

				paging += '<a style="cursor:pointer;">' + (page++) + '</a> ';
			}
		}
		paging += '</div>';

	 	return paging;
	}

	this.getFileMenuConcerts = function(band, page) {
    var i = 0;
		--page;
		var concert_list = '<div id="concert-list"><ul style="margin-left:15px">';
		for (var product_id in this.concerts[band]) {
			++i;
			if (i > (page*10) &&  i <= ((page*10)+10))
			 concert_list += '<li><a id=' + product_id + ' style="cursor:pointer">' + this.concerts[band][product_id] + '</a></li>';

		}
		concert_list += '</ul></div>';
		return concert_list;
	}

	/**
	 * set the mouse event for the artist menu
	 */
	this.setArtistEvent = function() {

		// show the alphabetical letters
    var indizes = "<div id='dialog-index'>";
    for (var i in this.artists) {
      indizes += '<a style="text-decoration:none;font-weight:bold; cursor:pointer">' + i + '</a> ';
    }
    indizes += "</div>";

		$('#dialog-artist .select').after('<div class="menu-all"><div class="menu"></div></div>'); //append select menu
    $('#dialog-artist .menu-all').prepend('<div class="frame-header grey clearfix"><div class="lt"></div><div class="ct grey" style="width: 165px;background-color: #fff"></div><div class="rt"></div></div>');
    $('#dialog-artist .menu-all').append('<div class="frame-footer grey"><div class="lb"></div><div class="ct grey" style="width: 165px;background-color: #fff"></div><div class="rb"></div></div>');
    $('#dialog-artist .menu').prepend(indizes); // append alphabetical filters

		$('#dialog-artist .select').unbind().click(
      function() {
				 if ($('#dialog-artist .menu-all').css('visibility') == 'hidden') {
			  	$('#dialog-artist .menu-all').css('visibility', 'visible');
					$('#dialog-concert .menu-all').css('visibility', 'hidden');
          self.index = '#';
          $('#artist-list, #artist-list-paging').remove();
					$('#dialog-index').after(self.getFileMenuArtists('#', 1)); //append artists
					$('#dialog-artist .menu-all .menu').append(self.getPagingArtist());

					$('#artist-list-paging a').unbind().click(function() {  // get page of selected artists
            $('#artist-list').replaceWith(self.getFileMenuArtists(self.index, $(this).text()));
            self.bandSelect();  // assign events again
          });

					self.bandSelect();

					$('#dialog-index a').unbind().click(function() { // get all artists beginning with the unbind().clicked letter
						self.index = $(this).text();
						$('#artist-list-paging').replaceWith(self.getPagingArtist());
						$('#artist-list').remove();
						$('#dialog-index').after(self.getFileMenuArtists(self.index, 1));
						$('#artist-list-paging a').unbind().click(function() { // assign paging again
	            $('#artist-list').remove();
	            $('#dialog-index').after(self.getFileMenuArtists(self.index, $(this).text()));
							self.bandSelect();
	          });
						self.bandSelect(); // event has to be re-assigned
					});
				} else {
					$('#dialog-artist .menu-all').css('visibility', 'hidden');
				}
      }
    );
	}

	/**
	 * unselect the concert when a new artist is checked and mark him
	 */
	this.bandSelect = function() {
		$('#artist-list ul li a').unbind().click(function() {
		  // unset the concert if new artist is selected
		  if (self.band != $(this).attr('id')) {
		  	self.band = $(this).attr('id');
		  	self.concert = 0;
		  	$('#hidden-product').val('');
		  	$('#dialog-concert-selected').css("color", "#CECECE");
				if (self.lang == 'de')
		  	   $('#dialog-concert-selected').text("kein Konzert ausgewählt");
        else
				  $('#dialog-concert-selected').text("no concert selected");

		  	$('#dialog-artist-selected').css("color", "");
		  	$('#dialog-artist-selected').text(self.artists[self.index][self.band]);
	     }
			 $('#dialog-artist .menu-all').css('visibility', 'hidden');
    });
	}

	/**
	 *
	 */
	this.concertSelect = function() {
	  $('#concert-list ul li a').unbind().click(function(){ // set the id of the band into the hidden field dialog-band
      self.concert = $(this).attr('id');
      $('#hidden-product').val(self.concert);
      $('#dialog-concert-selected').css("color", "");
      $('#dialog-concert-selected').text(self.concerts[self.band][self.concert]);
      $('#dialog-concert .menu-all').css('visibility', 'hidden');
    });
	}

	/**
   * set the mouse event for the concert menu
   */
	this.setConcertEvent = function() {

		$('#dialog-concert .select').after('<div class="menu-all"><div class="menu"></div></div>'); //append select menu

    $('#dialog-concert .menu-all').prepend('<div class="frame-header grey clearfix"><div class="lt"></div><div class="ct grey" style="width: 165px;background-color: #fff"></div><div class="rt"></div></div>');
    $('#dialog-concert .menu-all').append('<div class="frame-footer grey"><div class="lb"></div><div class="ct grey" style="width: 165px;background-color: #fff"></div><div class="rb"></div></div>');

		$('#dialog-concert .select').unbind().click(
       function() {
        if ($('#dialog-concert .menu-all').css('visibility') == 'hidden') {
					$('#dialog-concert .menu-all').css('visibility', 'visible');
					$('#dialog-artist .menu-all').css('visibility', 'hidden');
					$('#concert-list, #concert-list-paging').remove();
					if (self.band) { // if band is selected get all
						$('#dialog-concert .menu').html(self.getFileMenuConcerts(self.band, 1));
						$('#dialog-concert .menu').append(self.getPagingConcert());
						$('#concert-list-paging a').unbind().click(function() {
							$('#concert-list').remove();
							$('#dialog-concert .menu').prepend(self.getFileMenuConcerts(self.band, $(this).text()));
							self.concertSelect();
						});
						self.concertSelect();
					}
					else {
						if (pluginConfig.lang == 'de')
						  $('#dialog-concert .menu').text("Du musst erst einen Artist auswählen bevor Du ein Konzert auswählen kannst.");
						else
						  $('#dialog-concert .menu').text("You have to choose an artist first before you can choose a concert.");
					}
				} else {
					$('#dialog-concert .menu-all').css('visibility', 'hidden');
				}
      }
    );
  }




	/**
	 * sets the mouse-events for the fileupload-dialog
	 */
	this.setFileMenuEvents = function() {
		if (!this.artists.artist_filter) {
		  delete this.artists.artist_filter;
			delete this.concerts.concert_filter;
	  } else { // artist is already selected on artist pages, preselect it
	     this.band = this.artists.artist_filter[0];
	     $('#dialog-artist-selected').css("color", "");
       $('#dialog-artist-selected').text(this.artists.artist_filter[1]);
			 delete this.artists.artist_filter;
			 if (!this.concerts.concert_filter) {
		      delete this.concerts.concert_filter;
		    } else { // concert is already selected on artist pages, preselect it
		       this.concert = this.concerts.concert_filter[0];
		       $('#hidden-product').val(this.concert);
		       $('#dialog-concert-selected').css("color", "");
		       $('#dialog-concert-selected').text(this.concerts.concert_filter[1]);
		       delete this.concerts.concert_filter;
		}
		}


	 // artist and concert events
		this.setArtistEvent();
	  this.setConcertEvent();
	}


  /**
   * show a fileupload-dialog
   */
	this.fileuploadDialog = function() {

    $('#fileupload-input, #fileupload-text').val('');
		$('#fileupload-ajax').text('');
    var overlay = '<div id="dialog-overlay"></div>';

    $('body').append(overlay);
    $('#fileupload-main-frame').css('display', 'inline-block');
	  $('#fileupload-agb').unbind().click(
		  function() {
				if($('#fileupload-agb-text').css('display') == 'none')
			   $('#fileupload-agb-text').css('display', 'inline-block');
				else
				 $('#fileupload-agb-text').css('display', 'none');
		  }
		);

		// reset vars
    this.band = 0;
    this.concert = 0;
    this.index = '#';
		$('#dialog-concert-selected').css("color", "#CECECE");
		$('#dialog-artist-selected').css("color", "#CECECE");
    if (self.lang == 'de') {
		  $('#dialog-concert-selected').text("kein Konzert ausgewählt");
		  $('#dialog-artist-selected').text("kein Artist ausgewählt");
		}
		else {
			$('#dialog-concert-selected').text("no concert selected");
			$('#dialog-artist-selected').text("no artist selected");
		}
    $('#hidden-product').val('');
		getFileMenu();

    $('#fileupload-table .charcounter').remove();
		if (pluginConfig.lang == 'de')
	   	$("#fileupload-text").charCounter(60, {format: "noch %1 Zeichen übrig"});
		else
		  $('#fileupload-text').charCounter(60, {format: "%1 characters remaining"});

    //$('#dialog-content').css('display', 'inline');
    $('#fileupload-content').slideDown();

    init();

	}

}