/*
 This file overrides the open and close methods of ThickBox
 */
// method and var for hiding Flash elements on ThickBox Overlay
var FOholder = new Array();

function FOhide(_bool){
    var a = (_bool) ? 'hidden' : 'visible';
    for (var i = 0; i < FOholder.length; i++) {
        document.getElementById(FOholder[i]).style.visibility = a;
    }
}

jQuery.fn.getScrollbarWidth = function() {
	var scrollbarWidth = 0;
	return this.each(function() {
		if ( !scrollbarWidth ) {
			if ( $.browser.msie ) {
				var $textarea1 = $('<textarea cols="10" rows="2"></textarea>')
						.css({ position: 'absolute', top: -1000, left: -1000 }).appendTo('body'),
					$textarea2 = $('<textarea cols="10" rows="2" style="overflow: hidden;"></textarea>')
						.css({ position: 'absolute', top: -1000, left: -1000 }).appendTo('body');
				scrollbarWidth = $textarea1.width() - $textarea2.width();
				$textarea1.add($textarea2).remove();
			} else {
				var $div = $('<div />')
					.css({ width: 100, height: 100, overflow: 'auto', position: 'absolute', top: -1000, left: -1000 })
					.prependTo('body').append('<div />').find('div')
						.css({ width: '100%', height: 200 });
				scrollbarWidth = 100 - $div.width();
				$div.parent().remove();
			}
		}
		return scrollbarWidth;
	});
};

function TB_position() {
	var pagesize = TB_getPageSize();
	var arrayPageScroll = TB_getPageScrollTop();

	//bug fix  9938 add paddings and scrollbar width in the calculation of the left value
	var paddingLeft = parseInt($("#TB_window").css('padding-left'));
	var paddingRight = parseInt($("#TB_window").css('padding-right'));

	var FIXED_TB_WIDTH = TB_WIDTH + paddingLeft  + paddingRight;
	try {
		if(jQuery.getScrollbarWidth) {
			FIXED_TB_WIDTH = TB_WIDTH + paddingLeft  + paddingRight  + $.getScrollbarWidth();
		}
	} catch(e) {}

	var style = {width: TB_WIDTH, left: (arrayPageScroll[0] + (pagesize[0] - FIXED_TB_WIDTH)/2), top: (arrayPageScroll[1] + (pagesize[1]-TB_HEIGHT)/2)};
	$("#TB_window").css(style);
}

// add thickbox to href elements that have a class of .thickbox
function TB_init_extended(){

    // remove the click event added by the 'original' thickbox.js
    $("a.thickbox").unbind("click");

    // add the click event that works with both video and image thickboxes.
    $("a.thickbox").click(function(event){

        // stop default behaviour
        event.preventDefault();

        // remove click border
        this.blur();

        var caption;
        if (!this.title || this.title == "") {
            caption = unescape(this.search.substring(1));
        } else {
            caption = this.title;
        }

        // get caption: either title or name attribute
        // var caption = unescape(this.search.substring(1)) || 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);
    });
}

$(document).ready(TB_init_extended); // add another TB_init(_extended), to overrule the thickbox's 'original' TB_init

function TB_remove( event ){

	// stop default behaviour
    event.preventDefault();

    $("#TB_imageOff").unbind("click");
    $("#TB_overlay").unbind("click");
    $("#TB_closeWindowButton").unbind("click");
    $("#TB_window").fadeOut("fast", function(){
        $('#TB_window,#TB_overlay,#TB_HideSelect').remove();
        FOhide(false);
    });
    $("#TB_load").remove();

    return false;
}

function TB_show(caption, url, rel){
    FOhide(true);

    if (!$("#TB_HideSelect").length) {
        $("body").append("<iframe id='TB_HideSelect'></iframe><div id='TB_overlay'></div><div id='TB_window'></div>");
        $("#TB_overlay").click(TB_remove);
    }
    $(window).scroll(TB_position);
    TB_overlaySize();
    $("body").append("<div id='TB_load'><img src='./gfx/bigrotation2.gif' /></div>");
    TB_load_position();

    //var baseURL = url.match(/(.+)\?/)[1] || url;
    //var restURL = url.match(/\?(.+)/)[1] || "";

    var ar = url.match(/(.+)\?(.+)/);

    var baseURL = '';
    var restURL = '';
    if (!ar) {
        baseURL = url;
    }
    else {
        baseURL = ar[1];
        restURL = ar[2];
    }

    var imageURL = /\.(jpe?g|png|gif|bmp)$/gi;

    // this regex should match if the url end with "swf";
    var flashURL = /\.(swf)$/gi;

    if (baseURL.match(imageURL)) {

        var dummy = {
            caption: "",
            url: "",
            html: ""
        };
        var prev = dummy, next = dummy, imageCount = "";

        if (rel) {
            function getInfo(image, id, label){
                return {
                    caption: unescape(image.search.substring(1)) || image.title,
                    url: image.href,
                    html: "<div id='TB_" + id + "'><a href='#'><span>" + label + "</span></a></div>"
                }
            }
            var complImgGrp = $("a[@rel=" + rel + "]").get().sort();
            var imageGroup = new Array();
            imageGroup[0] = complImgGrp[0];
            for (var i = 1; i < complImgGrp.length; i++) {
                if (complImgGrp[i].href != imageGroup[imageGroup.length - 1].href)
                    imageGroup[imageGroup.length] = complImgGrp[i];
            }
            var foundSelf = false;
            for (var i = 0; i < imageGroup.length; i++) {
                var image = imageGroup[i];
                var urlTypeTemp = image.href.match(imageURL);
                if (image.href == url) {
                    foundSelf = true;
                    imageCount = "Image " + (i + 1) + " of " + (imageGroup.length);
                }
                else {
                    if (foundSelf) {
                        next = getInfo(image, "next", "Next &gt;");
                        break;
                    }
                    else {
                        prev = getInfo(image, "prev", "&lt; Prev");
                    }
                }
            }
        }
        imgPreloader = new Image();
        imgPreloader.onload = function(){
            imgPreloader.onload = null;
            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_WIDTH = imageWidth + 0;
            TB_HEIGHT = imageHeight + 0;
            $("#TB_window").append("<div id='caption_container'>" + caption + "</div><a href='' id='TB_ImageOff' title='Close'><img id='TB_Image' src='" + url + "' width='" + imageWidth + "' height='" + imageHeight + "' alt='" + caption + "'/></a>" + "<div id='TB_caption'><div id='TB_controls'>" + prev.html + "<span>" + imageCount + "</span>" + next.html + "</div></div><div id='TB_closeWindow'><a href='#' id='TB_closeWindowButton' title='Close'><span>Close</span></a></div>");
            $("#TB_closeWindowButton").click(TB_remove);
            function buildClickHandler(image){
                return function(){
                    $("#TB_window").remove();
                    $("body").append("<div id='TB_window'></div>");
                    TB_show(image.caption, image.url, rel);
                    return false;
                };
            }
            var goPrev = buildClickHandler(prev);
            var goNext = buildClickHandler(next);
            if (prev.html) {
                $("#TB_prev").click(goPrev);
            }
            if (next.html) {
                $("#TB_next").click(goNext);
            }
            document.onkeydown = function(e){
                if (e == null) {
                    keycode = event.keyCode;
                }
                else {
                    keycode = e.which;
                }
                switch (keycode) {
                    case 27:
                        TB_remove(e);
                        break;
                    case 190:
                        if (next.html) {
                            document.onkeydown = null;
                            goNext();
                        }
                        break;
                    case 188:
                        if (prev.html) {
                            document.onkeydown = null;
                            goPrev();
                        }
                        break;
                }
            }
            TB_position();
            $("#TB_load").remove();
            $("#TB_ImageOff").click(TB_remove);
            $("#TB_window").css({
                display: "block"
            });
        }
        imgPreloader.src = url;
    }

    // START the extendTB addition: support for SWF files.
    // 2007/07/05, Erik Hagreis
    else
        if (baseURL.match(flashURL)) {

            $("#TB_load").remove();

            var dummy = {
                caption: "",
                url: "",
                html: ""
            };
            var prev = dummy, next = dummy, imageCount = "";

            if (rel) {

                function getInfo(image, id, label){
                    return {
                        caption: image.title,
                        url: image.href,
                        html: "<div id='TB_" + id + "'><a href='#'><span>" + label + "</span></a></div>"
                    }
                }
                var complImgGrp = $("a[@rel=" + rel + "]").get().sort();
                var imageGroup = new Array();
                imageGroup[0] = complImgGrp[0];
                for (var i = 1; i < complImgGrp.length; i++) {
                    if (complImgGrp[i].href != imageGroup[imageGroup.length - 1].href)
                        imageGroup[imageGroup.length] = complImgGrp[i];
                }
                var foundSelf = false;
                for (var i = 0; i < imageGroup.length; i++) {
                    var image = imageGroup[i];
                    var urlTypeTemp = image.href.match(flashURL);
                    if (image.href == url) {
                        foundSelf = true;
                        imageCount = "Video " + (i + 1) + " of " + (imageGroup.length);
                    }
                    else {
                        if (foundSelf) {
                            next = getInfo(image, "next", "Next &gt;");
                            break;
                        }
                        else {
                            prev = getInfo(image, "prev", "&lt; Prev");
                        }
                    }
                }
            }

            // Figure out which parameters we have...
            var videoUrl = restURL.match(/videoUrl=(.+\.flv)/)[1];
            var videoWidth = parseInt(restURL.match(/width=([0-9]{1,})/)[1]);
            var videoHeight = parseInt(restURL.match(/height=([0-9]{1,})/)[1]);

            var flashCaption;
            if (restURL.match(/caption=-(.+)-/)) {
                flashCaption = unescape(restURL.match(/caption=-(.+)-/)[1]);
            }
            else {
                flashCaption = caption;
            }

            videoHeight += 70; // Add 70 pixels for the video controls.
            TB_WIDTH = videoWidth;
            TB_HEIGHT = videoHeight + 0;

            //	alert("videoUrl -> " + videoUrl + "\nvideoWidth -> " + videoWidth + "\nvideoHeight -> " + videoHeight + "\nTB_WIDTH -> " + TB_WIDTH);

            // write the div
            $("#TB_window").append("<div id='caption_container'>" + flashCaption + "</div><div id='TB_Flash' style='width: " + videoWidth + "px; height: " + videoHeight + "px; padding: 0'>here comes the flash!</div>" + "<div id='TB_caption'><!--div id='TB_controls'>" + prev.html + "<span>" + imageCount + "</span>" + next.html + "</div--></div><div id='TB_closeWindow'><a href='#' id='TB_closeWindowButton' title='Close'><span>Close</span></a></div>");

            // let swfObject do some majic too
            var so = new SWFObject(baseURL + '?'+ new Date().getTime(), 'TB_flash_embed', videoWidth, videoHeight, '8', '#ffffff');
            //so.addVariable('videoWidth', videoWidth);
            //so.addVariable('videoHeight', videoHeight);
            so.addVariable('videoUrl', videoUrl);
            so.write('TB_Flash');

            $("#TB_closeWindowButton").click(TB_remove);
            function buildClickHandler(image){
                return function(){
                    $("#TB_window").remove();
                    $("body").append("<div id='TB_window'></div>");
                    TB_show(image.caption, image.url, rel);
                    return false;
                };
            }
            var goPrev = buildClickHandler(prev);
            var goNext = buildClickHandler(next);
            if (prev.html) {
                $("#TB_prev").click(goPrev);
            }
            if (next.html) {
                $("#TB_next").click(goNext);
            }
            document.onkeydown = function(e){
                if (e == null) {
                    keycode = event.keyCode;
                }
                else {
                    keycode = e.which;
                }
                switch (keycode) {
                    case 27:
                        TB_remove(e);
                        break;
                    case 190:
                        if (next.html) {
                            document.onkeydown = null;
                            goNext();
                        }
                        break;
                    case 188:
                        if (prev.html) {
                            document.onkeydown = null;
                            goPrev();
                        }
                        break;
                }
            }
            TB_position();

            $("#TB_window").css({
                display: "block"
            });

        }
        // END the extendTB addition: support for SWF files.
        else {
            var queryString = url.match(/\?(.+)/)[1];
            var params = TB_parseQuery(queryString);
            TB_WIDTH = (params['width'] * 1) + 0;
            TB_HEIGHT = (params['height'] * 1) + 0;
            var ajaxContentW = TB_WIDTH - 30, ajaxContentH = TB_HEIGHT - 45;
            if (url.indexOf('TB_iframe') != -1) {
                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></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 {
                $("#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>");
            }
            $("#TB_closeWindowButton").click(TB_remove);
            if (url.indexOf('TB_inline') != -1) {
                $("#TB_ajaxContent").html($('#' + params['inlineId']).html());
                TB_position();
                $("#TB_load").remove();
                $("#TB_window").css({
                    display: "block"
                });
            }
            else
                if (url.indexOf('TB_iframe') != -1) {
                    TB_position();
                    if (frames['TB_iframeContent'] == undefined) {
                        $("#TB_load").remove();
                        $("#TB_window").css({
                            display: "block"
                        });
                        $(document).keyup(function(e){
                            var key = e.keyCode;
                            if (key == 27) {
                                TB_remove(e)
                            }
                        });
                    }
                }
                else {
                    $("#TB_ajaxContent").load(url, function(){
                        TB_position();
                        $("#TB_load").remove();
                        $("#TB_window").css({
                            display: "block"
                        });
                    });
                }
        }
    $(window).resize(TB_position);
    document.onkeyup = function(e){
        if (e == null) {
            keycode = event.keyCode;
        }
        else {
            keycode = e.which;
        }
        if (keycode == 27) {
            TB_remove(e);
        }
    }
}
