/*
 * Smoothbox v20080623 by Boris Popoff (http://gueschla.com)
 * To be used with mootools 1.2
 *
 * Based on Cody Lindley's Thickbox, MIT License
 *
 * Licensed under the MIT License:
 *   http://www.opensource.org/licenses/mit-license.php
 */

// on page load call TB_init
window.addEvent('domready', TB_init);

// prevent javascript error before the content has loaded
TB_WIDTH = 0;
TB_HEIGHT = 0;
var TB_doneOnce = 0;

// add smoothbox to href elements that have a class of .smoothbox
function TB_init(){
    $$("a.smoothbox").each(function(el){
        el.onclick = TB_bind
    });
}

function TB_bind(event){
    var event = new Event(event);
    // stop default behaviour
    event.preventDefault();
    // remove click border
    this.blur();
    // get caption: either title or name attribute
    var caption = this.title || this.name || "";
    // get rel attribute for image groups
    var group = this.rel || false;
    // display the box for the elements href
    TB_show(caption, this.href, group);
    this.onclick = TB_bind;
    return false;
}

// called when the user clicks on a smoothbox link
function TB_show(caption, url, rel){
	$$("form").each(function(form_el){
        form_el.setOpacity(0);
    });   
    // create iframe, overlay and box if non-existent 
    if (!$("TB_overlay")) {
        new Element('iframe').setProperty('id', 'TB_HideSelect').injectInside(document.body);
        $('TB_HideSelect').setOpacity(0);
        new Element('div').setProperty('id', 'TB_overlay').injectInside(document.body);
        $('TB_overlay').setOpacity(0);
        TB_overlaySize();
        new Element('div').setProperty('id', 'TB_load').injectInside(document.body);
        $('TB_load').innerHTML = "<img src='/web/ac/js/loading.gif' />";
        TB_load_position();
        
		var TB_ani = new Fx.Morph($('TB_overlay'), {
                duration: 300
      	 });
		 
		TB_ani.start.delay(0, TB_ani, {
			'opacity': 0.5
		});
		
	  /*	
		active_ani.start.delay(2000, active_ani, {
					'margin-top': 20
				});
		
      $('TB_overlay').set('tween', {
            duration: 700
        });
        $('TB_overlay').tween('opacity', 0, 0.8);
        */
    }
    
    if (!$("TB_load")) {
        new Element('div').setProperty('id', 'TB_load').injectInside(document.body);
        $('TB_load').innerHTML = "<img src='/web/ac/js/loading.gif' />";
        TB_load_position();
    }
    
    if (!$("TB_window")) {
        new Element('div').setProperty('id', 'TB_window').injectInside(document.body);
        $('TB_window').setOpacity(0);
    }
    
    $("TB_overlay").onclick = TB_remove;
    window.onscroll = TB_position;
    
    // check if a query string is involved
    var baseURL = url.match(/(.+)?/)[1] || url;
    
    // regex to check if a href refers to an image
    var imageURL = /\.(jpe?g|png|gif|bmp)/gi;
    
    // check for images
    if (baseURL.match(imageURL)) {
		var dummy = {
			caption: "",
			url: "",
			html: ""
		};
		
		var prev = dummy, next = dummy, imageCount = "";
		
		// if an image group is given
		if (rel) {
			function getInfo(image, id, label){
				return {
					caption: image.title,
					url: image.href,
					html: "<span id='TB_" + id + "'>&nbsp;&nbsp;<a href='#'>" + label + "</a></span>"
				}
			}
			
			// find the anchors that point to the group
			var imageGroup = [];
			$$("a.smoothbox").each(function(el){
				if (el.rel == rel) {
					imageGroup[imageGroup.length] = el;
				}
			})
			
			var foundSelf = false;
			
			// loop through the anchors, looking for ourself, saving information about previous and next image
			for (var i = 0; i < imageGroup.length; i++) {
				var image = imageGroup[i];
				var urlTypeTemp = image.href.match(imageURL);
				
				// look for ourself
				if (image.href == url) {
					foundSelf = true;
					imageCount = "Image " + (i + 1) + " of " + (imageGroup.length);
				}
				else {
					// when we found ourself, the current is the next image
					if (foundSelf) {
						next = getInfo(image, "next", "Next &gt;");
						// stop searching
						break;
					}
					else {
						// didn't find ourself yet, so this may be the one before ourself
						prev = getInfo(image, "prev", "&lt; Prev");
					}
				}
			}
		}
		
		imgPreloader = new Image();
		imgPreloader.onload = function(){
			imgPreloader.onload = null;
			
			// Resizing large images
			var x = window.getWidth() - 150;
			var y = window.getHeight() - 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
			
			// TODO don't use globals
			TB_WIDTH = imageWidth + 30;
			TB_HEIGHT = imageHeight + 60;
			
			// TODO empty window content instead
			$("TB_window").innerHTML += "<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'>" + imageCount + prev.html + next.html + "</div></div><div id='TB_closeWindow'><a href='#' id='TB_closeWindowButton' title='Close'>&nbsp;</a></div>";
			
			$("TB_closeWindowButton").onclick = TB_remove;
			
			function buildClickHandler(image){
				return function(){
					$("TB_window").dispose();
					new Element('div').setProperty('id', 'TB_window').injectInside(document.body);
					
					TB_show(image.caption, image.url, rel);
					return false;
				};
			}
			var goPrev = buildClickHandler(prev);
			var goNext = buildClickHandler(next);
			if ($('TB_prev')) {
				$("TB_prev").onclick = goPrev;
			}
			
			if ($('TB_next')) {
				$("TB_next").onclick = goNext;
			}
			
			document.onkeydown = function(event){
				var event = new Event(event);
				switch (event.code) {
					case 27:
						TB_remove();
						break;
					case 190:
						if ($('TB_next')) {
							document.onkeydown = null;
							goNext();
						}
						break;
					case 188:
						if ($('TB_prev')) {
							document.onkeydown = null;
							goPrev();
						}
						break;
				}
			}
			
			// TODO don't remove loader etc., just hide and show later
			$("TB_ImageOff").onclick = TB_remove;
			TB_position();
			TB_showWindow();
		}
		imgPreloader.src = url;
		
	}
	else { //code to show html pages
	
	
		if (baseURL != url) {
			var queryString = url.match(/\?(.+)/)[1];
			var params = TB_parseQuery(queryString);
		}
		
		if (!$defined(params)) {
			TB_WIDTH = 893;
			TB_HEIGHT = 480;
			TB_START = 0;
		}
		else {
		TB_WIDTH = (params['width'] * 1) + 30;
		TB_HEIGHT = (params['height'] * 1) + 40;
		TB_START = params['start'];
		}
		
        var ajaxContentW = TB_WIDTH - 30, ajaxContentH = TB_HEIGHT - 45;
        
        if (url.indexOf('TB_iframe') != -1) {
            urlNoQuery = url.split('TB_');
            $("TB_window").innerHTML += "<div id='TB_title'><div id='TB_ajaxWindowTitle'>" + caption + "</div><div id='TB_closeAjaxWindow'><a href='#' id='TB_closeWindowButton' title='Close'>&nbsp;</a></div></div><iframe frameborder='0' scrolling='no' hspace='0' src='" + urlNoQuery[0] + "' id='TB_iframeContent' name='TB_iframeContent' style='width:" + (ajaxContentW + 30) + "px;height:" + (ajaxContentH + 17) + "px;' onload='TB_showWindow()'> </iframe>";
        }
        else {
            $("TB_window").innerHTML += "<div id='TB_title'><div id='TB_ajaxWindowTitle'>" + caption + "</div><div id='TB_closeAjaxWindow'><a href='#' id='TB_closeWindowButton'>&nbsp;</a></div></div><div id='TB_ajaxContent' style='width:" + ajaxContentW + "px;height:" + ajaxContentH + "px;'></div>";
        }
        
        $("TB_closeWindowButton").onclick = TB_remove;
        
        if (url.indexOf('TB_inline') != -1) {
            $("TB_ajaxContent").innerHTML = ($(params['inlineId']).innerHTML);
            TB_position();
            TB_showWindow();
        }
        else 
            if (url.indexOf('TB_iframe') != -1) {
                TB_position();
                if (frames['TB_iframeContent'] == undefined) {//be nice to safari
                    $(document).keyup(function(e){
                        var key = e.keyCode;
                        if (key == 27) {
                            TB_remove()
                        }
                    });
                    TB_showWindow();
                }
            }
            else {
                var handlerFunc = function(){
                    TB_position();
                    TB_showWindow();
                };

				new Request.HTML({
                    method: 'get',
                    update: $("TB_ajaxContent"),
                    onComplete: handlerFunc
                }).get(url);
            }
    }
    
    window.onresize = function(){
        TB_position();
        TB_load_position();
        TB_overlaySize();
    }
    
    document.onkeyup = function(event){
        var event = new Event(event);
        if (event.code == 27) { // close
            TB_remove();
        }
    }
    
}

//helper functions below

function TB_showWindow(){
    //$("TB_load").dispose();
    //$("TB_window").setStyles({display:"block",opacity:'0'});
        $('TB_window').set('tween', {
            duration: 600,
            onComplete: function(){
                if ($('TB_load')) {
                    $('TB_load').dispose();
                }
            }
        });
        $('TB_window').tween('opacity', 0, 1);
		/*
		if(document.all&&!window.opera) {
	     var a=$('TB_iframeContent');
	     TB_iframeContent.document.body.scroll='no';
	   } else {
	     var a=$('TB_iframeContent');
	     a.setStyle('scrolling', 'no');
	   }
	   var a=document.getElementsByName('TB_iframeContent')[0];
	   TB_iframeContent.document.getElementsByTagName('body')[0].style.overflow='hidden';
	   var b=TB_iframeContent.document.getElementById('formular');
	   if(a.style.height != eval(b.offsetHeight+35)+'px') {
	      a.style.height=eval(b.offsetHeight+35)+'px';
	   }
	   */
	  
}

function TB_remove(){
	var bodyElement = $$('body')[0]; 
	var htmlElement = $$('html')[0];
	$('wrapper_extra').erase('style');
	htmlElement.erase('style');
	//$('wrapper_extra').setStyle('height','auto').setStyle('overflow','auto');
	//htmlElement.setStyle('overflow-y','scroll');
	// bodyElement.setStyle('overflow-y','visible');
    $("TB_overlay").onclick = null;
    document.onkeyup = null;
    document.onkeydown = null;
    
    if ($('TB_imageOff')) 
        $("TB_imageOff").onclick = null;
    if ($('TB_closeWindowButton')) 
        $("TB_closeWindowButton").onclick = null;
    if ($('TB_prev')) {
        $("TB_prev").onclick = null;
    }
    if ($('TB_next')) {
        $("TB_next").onclick = null;
    }
    
    
    $('TB_window').set('tween', {
        duration: 200,
        onComplete: function(){
            $('TB_window').dispose();
        }
    });
    $('TB_window').tween('opacity', 1, 0);
    
    
    
    $('TB_overlay').set('tween', {
        duration: 300,
        onComplete: function(){
            $('TB_overlay').dispose();
        }
    });
    $('TB_overlay').tween('opacity', 0.5, 0);
    
    window.onscroll = null;
    window.onresize = null;
    
    $('TB_HideSelect').dispose();
    TB_init();
    TB_doneOnce = 0;

	$$("form").each(function(form_el){
        form_el.setOpacity.delay(600,form_el,1);
    });
    return false;
}

function TB_position(){
    $('TB_window').set('morph', {
        duration: 75
    });
	if ($("flashcontent1")) {
		$('TB_window').morph({
			width: TB_WIDTH + 'px',
			left: ((window.getScrollLeft() + (window.getWidth() - TB_WIDTH) / 2) +1) + 'px',
			top: 75 + 'px'
		});
	}
	else {
		$('TB_window').morph({
			width: TB_WIDTH + 'px',
			left: ((window.getScrollLeft() + (window.getWidth() - TB_WIDTH) / 2) - 14) + 'px',
			top: 73 + 'px'
		});
	}
}

function TB_overlaySize(){  
	if (window.getHeight() > 550) {
		var bodyElement = $$('body')[0];
		var htmlElement = $$('html')[0];
		$('wrapper_extra').setStyle('height', window.getHeight() + 'px').setStyle('overflow', 'hidden'); // crop wrapper
		// bodyElement.setStyle('overflow-y','hidden');
		htmlElement.setStyle('overflow-y', 'hidden');
		window.scrollTo(0, 0);
	}
    // we have to set this to 0px before so we can reduce the size / width of the overflow onresize 
    $("TB_overlay").setStyles({
        "height": '0px',
        "width": '0px'
    });
    $("TB_HideSelect").setStyles({
        "height": '0px',
        "width": '0px'
    });
	if (window.getHeight() > 550) {
		$("TB_overlay").setStyles({
			"height": window.getHeight() + 'px',
			"width": window.getWidth() + 'px'
		});
		$("TB_HideSelect").setStyles({
			"height": window.getHeight() + 'px',
			"width": window.getWidth() + 'px'
		});
	} else {
    $("TB_overlay").setStyles({
        "height": window.getScrollHeight() + 'px',
        "width": window.getScrollWidth() + 'px'
    });
    $("TB_HideSelect").setStyles({
        "height": window.getScrollHeight() + 'px',
        "width": window.getScrollWidth() + 'px'
    });
	}
}

function TB_load_position(){
    if ($("TB_load")) {
        $("TB_load").setStyles({
            left: (window.getScrollLeft() + (window.getWidth() - 56) / 2) + 'px',
            top: (window.getScrollTop() + ((window.getHeight() - 80) / 2)) + 'px',
            display: "block"
        });
    }
}

function TB_parseQuery(query){
    // return empty object
    if (!query) 
        return {};
    var params = {};
    
    // parse query
    var pairs = query.split(/[;&]/);
    for (var i = 0; i < pairs.length; i++) {
        var pair = pairs[i].split('=');
        if (!pair || pair.length != 2) 
            continue;
        // unescape both key and value, replace "+" with spaces in value
        params[unescape(pair[0])] = unescape(pair[1]).replace(/\+/g, ' ');
    }
    return params;
}
