/*
 * Thickbox 3.1 - One Box To Rule Them All.
 * By Cody Lindley (http://www.codylindley.com)
 * Copyright (c) 2007 cody lindley
 * Licensed under the MIT License: http://www.opensource.org/licenses/mit-license.php
*/

(function($) {
	
	function getPageSizeWithScroll(){
	  if (window.innerHeight && window.scrollMaxY) {// Firefox
	    yWithScroll = window.innerHeight + window.scrollMaxY;
	    xWithScroll = window.innerWidth + window.scrollMaxX;
	  } else if (document.body.scrollHeight > document.body.offsetHeight){ // all but Explorer Mac
	    yWithScroll = document.body.scrollHeight;
	    xWithScroll = document.body.scrollWidth;
	  } else { // works in Explorer 6 Strict, Mozilla (not FF) and Safari
	    yWithScroll = document.body.offsetHeight;
	    xWithScroll = document.body.offsetWidth;
	    }
	  arrayPageSizeWithScroll = new Array(xWithScroll,yWithScroll);
	  return arrayPageSizeWithScroll;
	}

	$.thickbox = {
		showDialog: function(dialogId, message) {
			$(document).ready(function() {
				var link = $('#' + dialogId)[0],
				    t = link.title || link.name || null,
		        a = link.href || link.alt,
		        g = link.rel || false;
		        
		    tb_show(t,a,g,dialogId + 'Dialog', {'message':message});
			})
	    return false;
		},	
		submitForm: function(formId, iframe) {
      $(formId).validate({
        'submitHandler': function() {
          tb_show.call(this,'','','','', {'iframe':iframe, 'isSubmit' : true, 'form': $(formId)});	
        }
      }); 
      return true;
		}
	}
	     
	var TB_WIDTH, TB_HEIGHT;
      
	var tb_pathToImage = "/web/images/loadingAnimation.gif";
	var documentIsLoaded = false;
	//on page load call tb_init
	$(document).ready(function() {   
	  tb_init('a.thickbox, area.thickbox, input.thickbox');//pass where to apply thickbox
	  imgLoader = new Image();// preload image
	  imgLoader.src = tb_pathToImage;
	  documentIsLoaded = true;
	});
	
	//add thickbox to href & area elements that have a class of .thickbox
	function tb_init(domChunk){
	  $(domChunk).click(function(){
		  var t = this.title || this.name || null;
		  var a = this.href || this.alt;
		  var g = this.rel || false;
		  var id = this.id + 'Dialog' || null;
		  tb_show(t,a,g,id);
      this.blur();
      return false;
	  });
	}
	
	function tb_show(caption, url, imageGroup, id, addonParams) {//function called when the user clicks on a thickbox link
	  if (!addonParams) { addonParams = {}; }	
	  try {	  	
	  	var baseURL;
      if(url.indexOf("?")!==-1){ //ff there is a query string involved
        baseURL = url.substr(0, url.indexOf("?"));
      } else { 
        baseURL = url;
      }      
      var checkURL = baseURL.toLowerCase();  	
	 
	  	if (/\.(pdf)$/.test(checkURL)) {    
        // PDF in new Window      
        var DivH = 550;  // max. H�he
        var DivW = 900;
        var winObj = null

        var xPos = Math.floor((screen.availWidth  - DivW) / 2)
        var yPos = Math.floor((screen.availHeight - DivH) / 2)
        if (winObj != null && !winObj.closed)
                winObj.close()
        winObj = window.open(url, 'daWin', 'width=' + DivW + ', height=' + DivH
                     + ', location=no, menubar=no, resizable=yes,'
                     + 'status=no, toolbar=no, screenX=' + xPos + ', screenY='
                     + yPos + ', left=' + xPos + ', top=' + yPos)
        winObj.focus()
        return;
	  	}
	  	
	  	if (typeof document.body.style.maxHeight === "undefined") {//if IE 6
        if (document.getElementById("TB_HideSelect") === null) {//iframe to hide select elements in ie6
          $("body").append("<iframe id='TB_HideSelect'></iframe><div id='TB_overlay'></div><div id='TB_window'></div>");
          $("#TB_overlay").click(tb_remove);
        }
      } else {//all others
        if(document.getElementById("TB_overlay") === null){
          $("body").append("<div id='TB_overlay'></div><div id='TB_window'></div>");
          $("#TB_overlay").click(tb_remove);
        }
      }
      
      if (tb_detectMacXFF()) {
        $("#TB_overlay").addClass("TB_overlayMacFFBGHack");//use png overlay so hide flash
      }else{
        $("#TB_overlay").addClass("TB_overlayBG");//use background and opacity
      }
      
      if(caption===null) { caption=""; }
      $("body").append("<div id='TB_load'><img src='"+imgLoader.src+"' /></div>");//add loader to the page
      $('#TB_load').show();//show loader
      
      if ($('#TB_window').is(':visible')) {
        $("#TB_load").css({zIndex:103});
        $("#TB_overlay").css({zIndex:102});
        $("#TB_window").css({zIndex:101});
      }
	  	
	  	if( /\.(jpg|jpeg|png|gif|bmp)$/.test(checkURL) ) {   
	        
	      TB_PrevCaption = "";
	      TB_PrevURL = "";
	      TB_PrevHTML = "";
	      TB_NextCaption = "";
	      TB_NextURL = "";
	      TB_NextHTML = "";
	      TB_imageCount = "";
	      TB_FoundURL = false;
	      
	      var urlString = /\.jpg$|\.jpeg$|\.png$|\.gif$|\.bmp$/;
//        var urlType = baseURL.toLowerCase().match(urlString);
	      
	      if(imageGroup){
	        TB_TempArray = $("a[@rel="+imageGroup+"]").get();
	        for (TB_Counter = 0; ((TB_Counter < TB_TempArray.length) && (TB_NextHTML === "")); TB_Counter++) {
	          var urlTypeTemp = TB_TempArray[TB_Counter].href.toLowerCase().match(urlString);
	            if (!(TB_TempArray[TB_Counter].href == url)) {            
	              if (TB_FoundURL) {
	                TB_NextCaption = TB_TempArray[TB_Counter].title;
	                TB_NextURL = TB_TempArray[TB_Counter].href;
	                TB_NextHTML = "<span id='TB_next'>&nbsp;&nbsp;<a href='#'>Наступна</a></span>";
	              } else {
	                TB_PrevCaption = TB_TempArray[TB_Counter].title;
	                TB_PrevURL = TB_TempArray[TB_Counter].href;
	                TB_PrevHTML = "<span id='TB_prev'>&nbsp;&nbsp;<a href='#'>&lt; Попередня</a></span>";
	              }
	            } else {
	              TB_FoundURL = true;
	              TB_imageCount = "зображення " + (TB_Counter + 1) +" з "+ (TB_TempArray.length);                     
	            }
	        }
	      }
	
	      imgPreloader = new Image();
	      imgPreloader.onload = function() {	
	      	      	   
		      imgPreloader.onload = null;		  
		      var imageWidth = imgPreloader.width;
          var imageHeight = imgPreloader.height;      
		      // Resizing large images - orginal by Christian Montoya edited by me.    
		      var pagesize = tb_getPageSize();
		      var x = pagesize[0] - 150;
		      var y = pagesize[1] - 150;
		      if (imageWidth > x) {
		        imageHeight = imageHeight * (x / imageWidth); 
		        imageWidth = x; 
		        if (imageHeight > y) { 
		          imageWidth = imageWidth * (y / imageHeight); 
		          imageHeight = y; 
		        }
		      } else if (imageHeight > y) { 
		        imageWidth = imageWidth * (y / imageHeight); 
		        imageHeight = y; 
		        if (imageWidth > x) { 
		          imageHeight = imageHeight * (x / imageWidth); 
		          imageWidth = x;
		        }
		      }		      		     
		      // End Resizing		      
		      TB_WIDTH = imageWidth + 30;
		      TB_HEIGHT = imageHeight + 60;
		      $("#TB_window").append("<a href='' id='TB_ImageOff' title='Close'><img id='TB_Image' src='"+url+"' width='"+imageWidth+"' height='"+imageHeight+"' alt='"+caption+"'/></a>" + "<div id='TB_caption'>"+caption+"<div id='TB_secondLine'>" + TB_imageCount + TB_PrevHTML + TB_NextHTML + "</div></div>");    
		      
		      if (!(TB_PrevHTML === "")) {
		        function goPrev(){
		          if($(document).unbind("click",goPrev)){$(document).unbind("click",goPrev);}
		          $("#TB_window").remove();
		          $("body").append("<div id='TB_window'></div>");
		          tb_show(TB_PrevCaption, TB_PrevURL, imageGroup);
		          return false; 
		        }
		        $("#TB_prev").click(goPrev);
		      }
		      
		      if (!(TB_NextHTML === "")) {    
		        function goNext(){
		          $("#TB_window").remove();
		          $("body").append("<div id='TB_window'></div>");
		          tb_show(TB_NextCaption, TB_NextURL, imageGroup);        
		          return false; 
		        }
		        $("#TB_next").click(goNext);
		        
		      }
		
		      document.onkeydown = function(e){   
		        if (e == null) { // ie
		          keycode = event.keyCode;
		        } else { // mozilla
		          keycode = e.which;
		        }
		        if(keycode == 27){ // close
		          tb_remove();
		        } else if(keycode == 190){ // display previous image
		          if(!(TB_NextHTML == "")){
		            document.onkeydown = "";
		            goNext();
		          }
		        } else if(keycode == 188){ // display next image
		          if(!(TB_PrevHTML == "")){
		            document.onkeydown = "";
		            goPrev();
		          }
		        } 
		      };
		      
		      tb_position();
		      $(window).resize(function() {
            tb_position(caption);
          });
		      $("#TB_load").remove();
		      $("#TB_ImageOff").click(tb_remove);
		      $("#TB_window").css({display:"block",background:"#fff"}); //for safari using css instead of show
	      };
	            
	      imgPreloader.src = url;
	    
	  	} else if( /\.(wmv|mov|swf|avi|flv|mp3)$/.test(checkURL) ) {
	  		//TB_WIDTH = 300;	  
	  		//TB_HEIGHT =  400;		
	  		TB_WIDTH = 330; // 
        TB_HEIGHT = 280; //
	  				
		    if(caption == null) { caption = ""; };	  		
	  		if( /\.(wmv|avi)$/.test(checkURL) ) {
				  if($.browser.msie) {
				    $("#TB_window").append("<object id='wmv' type='video/x-ms-wmv' width='' height='' data='"+url+"' ><param name='src' value='"+url+"' /><param name='autostart' value='true' /><param name='showcontrols' value='true' /><param name='stretchtofit' value='false' /><param name='controller' value='true' /></object>");
				  } else {				    
				    $("#TB_window").css({overflow:"hidden"}).append("<object style='margin-top:-1px' id='wmv' type='video/x-ms-wmv' width='"+TB_WIDTH+"' height='"+TB_HEIGHT+"' data='"+url+"' ><param name='src' value='"+url+"' /><param name='autostart' value='true' /><param name='showcontrols' value='true' /><param name='stretchtofit' value='false' /><param name='controller' value='true' /></object>");
				  }				  
        }
        
        if( /\.(mov|flv)$/.test(checkURL) ) {
        	
        	$("#TB_window").append('<embed id="TB_Video" src="/resources/flvplayer.swf" width="320" height="260" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer"' +
                                 'flashvars="file=' + url + '&image=/images/thumbs/movie.gif" />' + 
                                 '<div id="TB_caption" style="display:' + (caption ? '' : 'none') + ';">' + caption + '</div>');      	

			  }
			  
			  if( /\.(mp3)$/.test(checkURL) ) {
          TB_WIDTH = 330; // 
          TB_HEIGHT = 280; //
          
          
          $("#TB_window").append('<object id="TB_Video" classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000"  width="320" height="20" id="mp3player"' + 
					                       ' codebase="http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=8,0,0,0" >' +
					                       ' <param name="movie" value="/resources/mp3player.swf?file=' + url + '" />' +
					                       ' <param nam="allowScriptAccess" value="always">' + 
					                       ' <embed src="/resources/mp3player.swf?file=' + url + '" allowScriptAccess="always" width="320" height="20" name="mp3player"' +
					                       ' type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" /></object>' +
					                       '<div id="TB_caption" style="display:' + (caption ? '' : 'none') + ';">' + caption + '</div>');
        }

        if( /\.(swf)$/.test(checkURL) ) {
				  if($.browser.msie) {
				    $("#TB_window").append("<object id='swf' classid='clsid:D27CDB6E-AE6D-11cf-96B8-444553540000' width='320' height='260'><param name='movie' value='"+url+"'/></object>");
				  } else {
				    $("#TB_window").append("<object id='TB_Video type='application/x-shockwave-flash' data='"+url+"' width='320' height='260'><param name='movie' value='"+url+"'/></object>");
				  }
				}				
				
			  TB_position();		
	      $("#TB_load").remove();
	      $("#TB_window").css({display:"block",top:-1000,background:"#fff"});
	      setTimeout(function() {
          tb_position(caption)
	        $(window).resize(function() {
	          tb_position(caption);
	        });
	      }, 500);

      } else {//code to show html
	      $("#TB_overlay").unbind('click');
	      var queryString = url.replace(/^[^\?]+\??/,'');
	      var params = tb_parseQuery( queryString );

        TB_WIDTH = (params['width']*1) || 'auto'; // 
        TB_HEIGHT = (params['height']*1) + 13 || 'auto'//
        	
      	function onLoadHandler() {
      		
		      $("#TB_load").css({zIndex:100});
		      $("#TB_overlay").css({zIndex:100});
		      $("#TB_window").css({zIndex:100});
      		
      		$("#TB_closeWindowButton").click(tb_remove);
      		$("#TB_load").remove();
          tb_init("#TB_window a.thickbox", "#TB_window form.thickbox");
          if (addonParams.message) { $('#TB_window').find('.message').html(addonParams.message); };
          $("#TB_window").css({display:"block"});
          tb_position(caption);
          $(window).resize(function() {
          	tb_position(caption);
          });            
      	}
      	
      	if (addonParams.isSubmit) {
      		jQuery(addonParams.form).ajaxSubmit({
            target: '#TB_window',
            success: onLoadHandler,
            iframe: addonParams.iframeSubmit 
          });        		
      	} else {
          $("#TB_window").load(url,onLoadHandler);
        }        
	    }
      document.onkeyup = function(e) {   
        if (e == null) { // ie
          keycode = event.keyCode;
        } else { // mozilla
          keycode = e.which;
        }
        if(keycode == 27){ // close
          tb_remove();
        } 
      };
	  } catch(e) {}
	}
	
	//helper functions below
	function tb_showIframe(){
	  $("#TB_load").remove();
	  $("#TB_window").css({display:"block"});
	}
	
	function tb_remove() {
	  $("#TB_imageOff").unbind("click");
	  $("#TB_closeWindowButton").unbind("click");
	  $("#TB_window").fadeOut("fast",function(){
	  	$('#TB_window,#TB_overlay,#TB_HideSelect').trigger("unload").unbind().remove();
	  	$("#TB_load").remove();    
	    document.onkeydown = "";
	    document.onkeyup = "";
	    $(window).unbind('resize');
	  });
	  return false;
	}
	
	function tb_position(caption) {		 
    var tb_centerContentHeight, tb_windowWidth, tb_windowHeight, tb_windowTop, windowHeight, delta = 62, scrollWidth = 0;
    
    windowHeight = $(window).height();    
		if (TB_HEIGHT != 'auto') {
			tb_centerContentHeight = TB_HEIGHT;			
		} 					
    if (TB_WIDTH != 'auto') {
      $("#TB_window").width(TB_WIDTH);
    }
    tb_windowHeight = $("#TB_window").height(); 	  
    tb_windowWidth = $("#TB_window").width();
    
    if (tb_windowHeight > windowHeight) {
    	tb_windowTop = 0;
    } else {
    	var halfHeight = parseInt((tb_windowHeight / 2),10);
      tb_windowTop = parseInt((windowHeight / 2),10) - halfHeight;    
    }
    
    if ( (jQuery.browser.msie && jQuery.browser.version < 7)) { // take IE6
      tb_windowTop += Math.max(document.documentElement.scrollTop, document.body.scrollTop); 
    }
    $("#TB_window").css({top:tb_windowTop + 'px'}).css({marginLeft: '-' + parseInt((tb_windowWidth / 2),10) + 'px',left:'50%'});     
	}
	
	function TB_position() {
	  var pagesize = tb_getPageSize();
	  $("#TB_window").css({width:TB_WIDTH+"px",left: ((pagesize[0] - TB_WIDTH)/2)+"px", 
	                                           top: ((pagesize[1]- TB_HEIGHT)/2)+"px"});
	}
	
	function tb_parseQuery ( query ) {
	   var Params = {};
	   if ( ! query ) {return Params;}// return empty object
	   var Pairs = query.split(/[;&]/);
	   for ( var i = 0; i < Pairs.length; i++ ) {
	      var KeyVal = Pairs[i].split('=');
	      if ( ! KeyVal || KeyVal.length != 2 ) {continue;}
	      var key = unescape( KeyVal[0] );
	      var val = unescape( KeyVal[1] );
	      val = val.replace(/\+/g, ' ');
	      Params[key] = val;
	   }
	   return Params;
	}
	
	function tb_getPageSize(){
	  var de = document.documentElement;
	  var w = window.innerWidth || self.innerWidth || (de&&de.clientWidth) || document.body.clientWidth;
	  var h = window.innerHeight || self.innerHeight || (de&&de.clientHeight) || document.body.clientHeight;
	  arrayPageSize = [w,h];
	  return arrayPageSize;
	}
	
	function tb_detectMacXFF() {
	  var userAgent = navigator.userAgent.toLowerCase();
	  if (userAgent.indexOf('mac') != -1 && userAgent.indexOf('firefox')!=-1) {
	    return true;
	  }
	}

})(jQuery);
