/**********************************************************************
 * 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 = '/lib/images/thickbox-loading-animation.gif';

/**********************************************************************
 * This code has been modified (and heavly reformatted).
 * Notable changes are:
 *  - more accurate checking of query string.
 *  - for inlineId, adds id from url as class on TB_window.
 *  - if ajaxId provided in url, adds as class on TB_window.
 *
 * Site specific:
 *  - making the tb_init binding 'live' instead of just on click.
 *  - replace 'close</a> or Esc Key' with 'nbsp;</a>'
 *  - replace 'Next &gt;' and '&lt; Prev' with 'nbsp;'
 *  - replace 'Image X of X' with 'X of X'
**********************************************************************/

// 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).live('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 = '&nbsp;';
    }

    $('body').append('<div id="TB_load"><img src="'+imgLoader.src+'" alt="Loading..." /></div>'); // add loader to the page
    $('#TB_load').show(); // show loader

    var baseURL     = url;
    var queryString = '';
    var queryIdx    = url.indexOf('?');
    // Check for query string.
    if(queryIdx !== -1 ){
      baseURL     = url.substr(0, queryIdx);
      queryString = url.substr(queryIdx+1, url.length);
    }

    var urlString = /\.jpg$|\.jpeg$|\.png$|\.gif$|\.bmp$/;
    var urlType   = baseURL.toLowerCase().match(urlString);

    // Code to show images.
    if(urlType !== null && (urlType == '.jpg' || urlType == '.jpeg' || urlType == '.png' || urlType == '.gif' || urlType == '.bmp'))
    {
      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"><a href="#">&nbsp;</a></span>';
            }
            else{
              TB_PrevCaption = TB_TempArray[TB_Counter].title;
              TB_PrevURL  = TB_TempArray[TB_Counter].href;
              TB_PrevHTML = '<span id="TB_prev"><a href="#">&nbsp;</a></span>';
            }
          }
          else{
            TB_FoundURL   = true;
            TB_imageCount = (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 Cody Lindley.
        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 + 28;
        TB_HEIGHT = imageHeight + 28;
        $('#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">&nbsp;</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 params = tb_parseQuery(queryString);

      TB_WIDTH  = (params['width']*1) || 600;  // defaults to 600 if no paramaters were added to URL
      TB_HEIGHT = (params['height']*1) + 30 || 430; // defaults to 400 if no paramaters were added to URL

      var ajaxContentW = TB_WIDTH;
      var ajaxContentH = TB_HEIGHT - 30;

      // iframe
      if(url.indexOf('TB_iframe') !== -1){
        urlNoQuery = url.split('TB_');
        $('#TB_iframeContent').remove();
        // no modal
        if(params['modal'] !== 'true'){
          $('#TB_window').append('<div id="TB_ajaxHeader">'
           +'<div id="TB_ajaxWindowTitle">'+caption+'</div>'
           +'<div id="TB_closeAjaxWindow"><a href="#" id="TB_closeWindowButton" title="Close">&nbsp;</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+17)+'px;"> </iframe>');
        }
        // modal
        else{
          $('#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>');
        }
      }
      // ajax or inline
      else{
        if($('#TB_window').css('display') !== 'block'){
          // no modal
          if(params['modal'] !== 'true'){
            $('#TB_window').append('<div id="TB_ajaxHeader">'
              +'<div id="TB_ajaxWindowTitle">'+caption+'</div>'
              +'<div id="TB_closeAjaxWindow"><a href="#" id="TB_closeWindowButton" title="Close">&nbsp;</a></div>'
              +'</div>'
              +'<div id="TB_ajaxContent" style="width:'+ajaxContentW+'px;height:'+ajaxContentH+'px"></div>');
          }
          // modal
          else{
            $('#TB_overlay').unbind();
            $('#TB_window').append('<div id="TB_ajaxContent" class="TB_modal" style="width:'+ajaxContentW+'px;height:'+ajaxContentH+'px;"></div>');
          }
        }
        // the window is already up, we are just loading new content via ajax
        else{
          $('#TB_ajaxContent')[0].style.width  = ajaxContentW+'px';
          $('#TB_ajaxContent')[0].style.height = ajaxContentH+'px';
          $('#TB_ajaxContent')[0].scrollTop = 0;
          $('#TB_ajaxWindowTitle').html(caption);
        }
      }

      $('#TB_closeWindowButton').click(tb_remove);

      var addTB_WindowClass = '';
      // inline
      if(url.indexOf('TB_inline') !== -1){
        $('#TB_ajaxContent').append($('#'+params['inlineId']).children());
        tb_position();
        $('#TB_load').remove();
        $('#TB_window').css({display:'block'});
        var length  = (params['inlineId'].lastIndexOf('-') === -1)
          ? params['inlineId'].length
         :params['inlineId'].lastIndexOf('-');
        addTB_WindowClass = params['inlineId'].substr(0, length);

        // move elements back when you're finished
        $('#TB_window').unload(function(){
          $('#'+params['inlineId']).append($('#TB_ajaxContent').children());
        });
      }
      // iframe
      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'});
        }
        addTB_WindowClass = '';
      }
      // ajax
      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'});
        });
        var length  = (params['ajaxId'].lastIndexOf('-') === -1)
          ? params['ajaxId'].length
          :params['ajaxId'].lastIndexOf('-');
        addTB_WindowClass = params['ajaxId'].substr(0, length);
      }

       $('#TB_window').addClass(addTB_WindowClass);
    }

    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;
  }
  return false;
}