/*
 * Thickbox 3 - 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
*/

if ($("/html//meta[@name='content-language']").attr("content")) {
  // host
  var pathToImages = '/img/thickbox/';
  var lang = $("/html//meta[@name='content-language']").attr("content"); // fallback! richtige lang nach dem laden der thickbox.js setzen!
} else {
  // local
  var pathToImages = '/img/thickbox/';
  var lang = "en";
}
var loadingImage = pathToImages+"loadingAnimation.gif";
var closeImage = pathToImages+"close.link.gif";      
var closeImageHover = closeImage.split('link')[0]+"hover"+closeImage.split('link')[1]; 

var translations = {
  'de':{
    'previous':'vorheriges',
    'next':'nächstes',
    'of':'von',
    'image':'Bild',
    'close':'schließen',
    'overview':'zurück zur Übersicht'
  },
  'en':{
    'previous':'previous',
    'next':'next',
    'of':'of',
    'image':'Image',
    'close':'close',
    'overview':'back to overview'
  },
  'fr':{
    'previous':'antérieur',
    'next':'suivant',
    'of':'de',
    'image':'image',
    'close':'fermer',
    'overview':'retour à l’index'
  }
};

// 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 = loadingImage;
});

// add thickbox to href & area elements that have a class of .thickbox
function tb_init(domChunk){
  tbCanClick = true;
  $(domChunk).click(function(){
  var t = $(".TB_title", this).html() || this.title || this.name || null;
    var a = this.href || this.alt;
    var g = this.rel || false;
    var galleryId = $(".TB_gallery", this).html() || false;
    tb_show(t,a,g,galleryId);
    //this.blur();
    return false;
  });
}

// für die gallery-ansicht
function tb_init2(domChunk){
  tbCanClick = true;
  $(domChunk).unbind();
  $(domChunk).click(function(){
    var t = $(".TB_title", this).html() || this.title || this.name || null;
    var a = this.href || this.alt;
    var g = this.rel || false;
    var galleryId = $(".TB_gallery", this).html() || false;
    
    $("#TB_window2").remove();
    $("#TB_window").attr('id', 'TB_window2');
    $("body").append("<div id='TB_window'></div>");
    tb_show(t,a,g,galleryId);
    return false;
  });
  
}

function tb_show(caption, url, imageGroup, galleryId) {
  // 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'>");
        $("#TB_overlay").click(tb_remove);
      }
    }
    
    // CSS ff/mac hack
    if (navigator.platform.indexOf('Mac') != -1 && $.browser.mozilla) {
      // ff mac
      $('#TB_overlay').css("background", "url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAyCAYAAAAeP4ixAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAABISURBVHja7M8xEQAgDACxB/+eag0XDL3EQU41LXBbQkREREREREREREREREREREREREREREREREREREREREREREREROSPJ8AAG5MBI9WX8SAAAAAASUVORK5CYII%3D) repeat");
    } else {
      // others
      $('#TB_overlay').css("background-color", "#000");
      $('#TB_overlay').css("filter", "alpha(opacity=75)");
      $('#TB_overlay').css("-moz-opacity", "0.75");
      $('#TB_overlay').css("opacity", "0.75");
    }    

    if (caption===null) {
      caption="";
    }
    // add loader to the page
    $("body").append("<div id='TB_load'><img src='"+imgLoader.src+"' /></div>"); 
    // show loader
    $('#TB_load').show(); 
    
    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/g;
    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+"]").filter(function(index) {
          return $($("a[@rel="+imageGroup+"]")[index]).parents("#TB_window2").length==0;
        }).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_title", TB_TempArray[TB_Counter]).html();
              TB_NextURL = TB_TempArray[TB_Counter].href;
              TB_NextHTML = "<span id='TB_next'><a href='#'>"+translations[lang]['next']+" &rsaquo;</a></span>";
            } else {
              TB_PrevCaption = $(".TB_title", TB_TempArray[TB_Counter]).html();
              TB_PrevURL = TB_TempArray[TB_Counter].href;
              TB_PrevHTML = "<span id='TB_prev'><a href='#'>&lsaquo; "+translations[lang]['previous']+"</a></span>";
            }
          } else {
            TB_FoundURL = true;
            TB_imageCount = translations[lang]['image']+" " + (TB_Counter + 1) +" "+translations[lang]['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;
          }
        }

        TB_PrevHTMLContainer = "<div id='TB_prevContainer'>"+TB_PrevHTML+"</div>";
        TB_NextHTMLContainer = "<div id='TB_nextContainer'>"+TB_NextHTML+"</div>";
        
        TB_WIDTH = imageWidth + 34;
        TB_HEIGHT = imageHeight + 45 + (TB_imageCount?galleryId?13:0:30);
        
        closeImageHTML = "<a href='#' onclick='return false;'><img id='TB_ImageOff' src='"+closeImage+"' title='"+translations[lang]['close']+"' alt='"+translations[lang]['close']+"'></a>";
        secondLine = TB_imageCount?"<div id='TB_secondLine'>" + TB_PrevHTMLContainer + TB_NextHTMLContainer + TB_imageCount + "</div>":"";
        galleryLine = galleryId?"<div id='TB_galleryLine'><a href='#' onclick='javascript:tb_showGallery(\""+$(".TB_title", $("a[@href*="+galleryId+"]")).html()+"\", \""+$("a[@href*="+galleryId+"]").attr('href')+"\"); return false;'>&lsaquo; "+translations[lang]['overview']+"</a></div>":"";
        $("#TB_window").remove();
        $("body").append("<div id='TB_window'></div>");
        $("#TB_window").append("<div id='TB_head'>"+closeImageHTML+"</div>"+"<img id='TB_Image' src='"+url+"' width='"+imageWidth+"' height='"+imageHeight+"' alt='' title='' /><div id='TB_caption'><div class='text'>"+caption+"</div>"+galleryLine+secondLine+"</div>");
        $("#TB_closeWindowButton").click(tb_remove);
         
        if (!(TB_PrevHTML === "")) {
          function goPrev() {
            if (!tbCanClick) {
              return false;
            }
            tbCanClick = false;
          
            if($(document).unbind("click",goPrev)){$(document).unbind("click",goPrev);}
            $("#TB_window").attr('id', 'TB_window2')
            $("body").append("<div id='TB_window'></div>");
            tb_show(TB_PrevCaption, TB_PrevURL, imageGroup, galleryId);
            return false; 
          }
          $("#TB_prev", "#TB_window").click(goPrev);
        }

        if (!(TB_NextHTML === "")) {    
          function goNext() {
            if (!tbCanClick) {
              return false;
            }
            tbCanClick = false;
            
            $("#TB_window").attr('id', 'TB_window2')
            $("body").append("<div id='TB_window'></div>");
            tb_show(TB_NextCaption, TB_NextURL, imageGroup, galleryId);
            return false; 
          }
          $("#TB_next", "#TB_window").click(goNext);
          $("#TB_Image", "#TB_window").click(goNext);
          $("#TB_Image", "#TB_window").css('cursor', 'pointer');
        }

        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_load").remove();
        $("#TB_window2").remove();
        tb_position();

        $("#TB_ImageOff", "#TB_window").click(tb_remove);
        $("#TB_ImageOff").mouseover(function() {this.src = closeImageHover;});
        $("#TB_ImageOff").mouseout(function() {this.src = closeImage;});
        // for safari using css instead of show
        $("#TB_window").css({display:"block"});
        tbCanClick = true;
        
        // zusätzlich im ff
        $("#TB_load").remove();
      };
      imgPreloader.src = url;
      
    } else {
      // code to show html pages
      var queryString = url.replace(/^[^\?]+\??/,'');
      var params = tb_parseQuery( queryString );

      TB_WIDTH = (params['width']*1) + 34 || 630; //defaults to 630
      TB_HEIGHT = (params['height']*1)+20 || 440; //defaults to 440

      ajaxContentW = TB_WIDTH;
      ajaxContentH = TB_HEIGHT-30;
      
      if (url.indexOf('TB_iframe') != -1){ 
        // iframe
        urlNoQuery = url.split('TB_');    
        $("#TB_window").append("<div id='TB_title'><div id='TB_ajaxWindowTitle'>"+caption+"</div><div id='TB_closeAjaxWindow'><a href='#' id='TB_closeWindowButton' title='Close'>close</a> or Esc Key</div></div><iframe frameborder='0' hspace='0' src='"+urlNoQuery[0]+"' id='TB_iframeContent' name='TB_iframeContent' style='width:"+(ajaxContentW + 29)+"px;height:"+(ajaxContentH + 17)+"px;' onload='tb_showIframe()'> </iframe>");
      } else {
        if ($("#TB_window").css("display") != "block") {
          closeImageHTML = "<a href='#' id='TB_closeWindowButton'><img id='TB_ImageOff' src='"+closeImage+"' title='"+translations[lang]['close']+"' alt='"+translations[lang]['close']+"'></a>";
          if(params['modal'] != "true") {
            $("#TB_window").append("<div id='TB_head'>"+closeImageHTML+"</div><div id='TB_ajaxContent' style='width:"+ajaxContentW+"px;height:"+ajaxContentH+"px'></div>");
            $("#TB_window").append("<div id='TB_caption'><div class='text'>"+caption+"</div></div>");
          } else {
            $("#TB_overlay").unbind();
            $("#TB_window").append("<div id='TB_ajaxContent' class='TB_modal' style='width:"+ajaxContentW+"px;height:"+ajaxContentH+"px;'></div>"); 
          }
        } 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);
      
      if (url.indexOf('TB_inline') != -1){ 
        $("#TB_ajaxContent").html($('#' + params['inlineId']).html());
        tb_init2('#TB_ajaxContent a.thickbox'); //pass where to apply thickbox

        tb_position();
        $("#TB_load").remove();
        $("#TB_window").css({display:"block"}); 
      } else if(url.indexOf('TB_iframe') != -1) {
        tb_position();
        if (frames['TB_iframeContent'] === undefined) {
          // be nice to safari
          $("#TB_load").remove();
          $("#TB_window").css({display:"block"});
          $(document).keyup( function(e){
            var key = e.keyCode; if(key == 27){tb_remove();}
          });
        }
      } 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"});
        });
      }
      $("#TB_ImageOff").mouseover(function() {this.src = closeImageHover;});
      $("#TB_ImageOff").mouseout(function() {this.src = closeImage;});
      
    }

    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_showGallery(caption, url, imageGroup) {
  $("#TB_load").remove();
  $("#TB_window").remove();
  $("#TB_window2").remove();
  $("body").append("<div id='TB_window'></div>");
  tb_show(caption, url, imageGroup);
}

function tb_showIframe(){
  $("#TB_load").remove();
  $("#TB_window").css({display:"block"});
}

function tb_remove() {
  $("#TB_imageOff").unbind("click");
  $("#TB_overlay").unbind("click");
  $("#TB_closeWindowButton").unbind("click");
  $("#TB_ajaxContent").remove(); // removes flash in IE
  $("#TB_window").remove();
  $("#TB_window2").remove();
  $("#TB_overlay").remove();
  $("#TB_HideSelect").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 = "";
  return false;
}

function tb_position() {
$("#TB_window").css({marginLeft: '-' + parseInt((TB_WIDTH / 2),10) + 'px', width: TB_WIDTH + 'px'});
  if ( !(jQuery.browser.msie && typeof XMLHttpRequest == 'function')) { // take away IE6
    $("#TB_window").css({marginTop: '-' + parseInt((TB_HEIGHT / 2),10) + 'px'});
  }
}

function tb_parseQuery ( query ) {
   var Params = {};
   if (!query) {
    // return empty object
    return Params;
   } 
   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;
}
