/*
 * 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
*/
        
var tb_pathToImage = "/staticfiles/img/content/loadingAnimation.gif";

/*!!!!!!!!!!!!!!!!! edit below this line at your own risk !!!!!!!!!!!!!!!!!!!!!!!*/

//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;
});

//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;
   tb_show(t,a,g);
   this.blur();
   return false;
   });
}

function tb_show(caption, url, imageGroup) {//function called when the user clicks on a thickbox link

   try {
      if (typeof document.body.style.maxHeight === "undefined") {//if IE 6
         $("body","html").css({height: "100%", width: "100%"});
         $("html").css("overflow","hidden");
         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
      
      var baseURL;
      if(url.indexOf("?")!==-1){ //ff there is a query string involved
         baseURL = url.substr(0, url.indexOf("?"));
      }else{ 
            baseURL = url;
      }
      
      var urlString = /\.jpg$|\.jpeg$|\.png$|\.gif$|\.bmp$/;
      var urlType = baseURL.toLowerCase().match(urlString);

      if(urlType == '.jpg' || urlType == '.jpeg' || urlType == '.png' || urlType == '.gif' || urlType == '.bmp'){//code to show images
            
         TB_PrevCaption = "";
         TB_PrevURL = "";
         TB_PrevHTML = "";
         TB_NextCaption = "";
         TB_NextURL = "";
         TB_NextHTML = "";
         TB_imageCount = "";
         TB_FoundURL = false;
         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='#'>Next &gt;</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; Prev</a></span>";
                     }
                  } else {
                     TB_FoundURL = true;
                     TB_imageCount = "Image " + (TB_Counter + 1) +" of "+ (TB_TempArray.length);                                 
                  }
            }
         }

         imgPreloader = new Image();
         imgPreloader.onload = function(){      
         imgPreloader.onload = null;
            
         // Resizing large images - orginal by Christian Montoya edited by me.
         var pagesize = tb_getPageSize();
         var x = pagesize[0] - 150;
         var y = pagesize[1] - 150;
         var imageWidth = imgPreloader.width;
         var imageHeight = imgPreloader.height;
         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;
         TB_HEIGHT = imageHeight;
         $("#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><div id='TB_closeWindow'><a href='#' id='TB_closeWindowButton' title='Close'>Close</a></div>");
         
         $("#TB_closeWindowButton").click(tb_remove);
         
         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();
         $("#TB_load").remove();
         $("#TB_ImageOff").click(tb_remove);
         $("#TB_window").css({display:"block"}); //for safari using css instead of show
         };
         
         imgPreloader.src = url;
      }else{//code to show html
         
         var queryString = url.replace(/^[^\?]+\??/,'');
         var params = tb_parseQuery( queryString );

         TB_WIDTH = (params['width']*1) + 0 || 670; //defaults to 630 if no paramaters were added to URL
         TB_HEIGHT = (params['height']*1) + 40 || 535; //defaults to 440 if no paramaters were added to URL
         ajaxContentW = TB_WIDTH;
         ajaxContentH = TB_HEIGHT - 45;
         
         if(url.indexOf('TB_iframe') != -1){// either iframe or ajax window      
               urlNoQuery = url.split('TB_');
               $("#TB_iframeContent").remove();
               if(params['modal'] != "true"){//iframe no modal
			   	  $("#TB_title").remove();
                  $("#TB_window").append("<div id='TB_title'><div id='TB_closeAjaxWindow'><a href='#' id='TB_closeWindowButton' title='Close'>Close</a></div></div><iframe frameborder='0' hspace='0' src='"+urlNoQuery[0]+"' id='TB_iframeContent' name='TB_iframeContent"+Math.round(Math.random()*1000)+"' onload='tb_showIframe()' style='width:"+(ajaxContentW + 29)+"px;height:"+(ajaxContentH)+"px;' scrolling='auto' allowautotransparency=true> </iframe>");
               }else{//iframe modal
               $("#TB_overlay").unbind();
                  $("#TB_window").append("<iframe frameborder='0' hspace='0' src='"+urlNoQuery[0]+"' id='TB_iframeContent' name='TB_iframeContent"+Math.round(Math.random()*1000)+"' onload='tb_showIframe()' style='width:"+(ajaxContentW + 29)+"px;height:"+(ajaxContentH + 17)+"px;'> </iframe>");
               }
         }else{// not an iframe, ajax
               if($("#TB_window").css("display") != "block"){
                  if(params['modal'] != "true"){//ajax no modal
                  $("#TB_window").append("<div id='TB_title'><div id='TB_ajaxWindowTitle'>"+caption+"</div><div id='TB_closeAjaxWindow'><a href='#' id='TB_closeWindowButton'>Close</a></div></div><div id='TB_ajaxContent' style='width:"+ (ajaxContentW) +"px;height:"+ajaxContentH+"px'></div>");
                  }else{//ajax modal
                  $("#TB_overlay").unbind();
                  $("#TB_window").append("<div id='TB_ajaxContent' class='TB_modal' style='width:"+ajaxContentW+"px;height:"+ajaxContentH+"px;'></div>");   
                  }
               }else{//this means the window is already up, we are just loading new content via ajax
                  $("#TB_ajaxContent")[0].style.width = ajaxContentW +"px";
                  $("#TB_ajaxContent")[0].style.height = ajaxContentH +"px";
                  $("#TB_ajaxContent")[0].scrollTop = 1;
                  $("#TB_ajaxWindowTitle").html(caption);
               }
         }
               
         $("#TB_closeWindowButton").click(tb_remove);
         
            if(url.indexOf('TB_inline') != -1){ 
               $("#TB_ajaxContent").append($('#' + params['inlineId']).children());
               $("#TB_window").unload(function () {
                  $('#' + params['inlineId']).append( $("#TB_ajaxContent").children() ); // move elements back when you're finished
               });
               tb_position();
               $("#TB_load").remove();
               $("#TB_window").css({display:"block"}); 
            }else if(url.indexOf('TB_iframe') != -1){
               tb_position();
               if($.browser.safari){//safari needs help because it will not fire iframe onload
                  $("#TB_load").remove();
                  $("#TB_window").css({display:"block"});
               }
            }else{
               $("#TB_ajaxContent").load(url += "&random=" + (new Date().getTime()),function(){//to do a post change this load method
                  tb_position();
                  $("#TB_load").remove();
                  tb_init("#TB_ajaxContent a.thickbox");
                  $("#TB_window").css({display:"block"});
               });
            }
         
      }

      if(!params['modal']){
         document.onkeyup = function(e){  
            if (e == null) { // ie
               keycode = event.keyCode;
            } else { // mozilla
               keycode = e.which;
            }
            if(keycode == 27){ // close
               tb_remove();
            }  
         };
      }
      
   } catch(e) {
      //nothing here
   }
}

//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();
   if (typeof document.body.style.maxHeight == "undefined") {//if IE 6
      $("body","html").css({height: "auto", width: "auto"});
      $("html").css("overflow","");
   }
   document.onkeydown = "";
   document.onkeyup = "";
   return false;
}

function tb_position() {
$("#TB_window").css({marginLeft: '-' + parseInt((TB_WIDTH / 2),10) + 'px', width: TB_WIDTH + 'px'});
   if ( !(jQuery.browser.msie && jQuery.browser.version < 7)) { // take away IE6
      $("#TB_window").css({marginTop: '-' + parseInt((TB_HEIGHT / 2),10) + '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;
  }
}

// To close one thickbox and then open another, this is quite handy while you want to open another response modal window on the action of current modal window. 
// Opening more then one thickbox window is not possible on the same page so closing one and opening another could be quite handy and we can change height and width as well for another window.
var jThickboxNewLink;
function tb_remove_open(reloadLink){
	jThickboxReloadLink	=	reloadLink;
	tb_remove();
	setTimeout("jThickboxNewLink();",500);
	return false;
}
// This function will let you open new thickbox window without specifying class="Thickbox" and any href="http://web.com" attribute
// It will be helpful when you are dynamically loading any content and from those content you would like to open Thickbox windows.
// As basically the nature of thickbox is such that it scans all links (<a >..</a>) tags on load using jQuery's $(document).ready function so if your link is loaded using ajex or using any dynamic javascript and was not on page at the time of load then this thickbox setup won't work and you have to use this function.
function tb_open_new(jThickboxNewLink){
	tb_show(null,jThickboxNewLink,null);
}



