/* -------------------------------------------------------------
 * @Project: Frankfurt Airport City
 * triplesense popUp
 * Based on Thickbox 3.1 (2007-08-08) by Cody Lindley  (http://www.codylindley.com) and FancyBox 1.0.0 (2008-04-29) by Janis Skarnelis http://fancy.klade.lv/
 * Licensed under the MIT License: http://www.opensource.org/licenses/mit-license.php
 * Requires: jQuery v1.2.1 or later
 *
 * Last modified by Felix Toth on 2008-12-08
 *
 * Usage: in html put:
 *
 * for one image
 * <a href="example.jpg" class="popup"><img scr="thumb.jpg" /></a>
 *
 * group images in a navigatable gallery with the same identifier in rel tag
 * <a href="example.jpg" class="popup" rel="gallery1"><img scr="thumb.jpg" /></a>
 *
 * Video-Content (mov, width, height - QuickTime)
 * <a class="popup" rel="galerie" href="movie.mov?width=300&amp;height=400"><img scr="thumb.jpg" /></a>
 *
 * Flash-Content (swf, width, height)
 * <a class="popup" rel="galerie" href="flash.swf?width=400&amp;height=250"><img scr="thumb.jpg" /></a>
 *
 * Iframe-Content (html, width, height)
 * <a class="popup" href="_v_forms.html?width=700&amp;height=600">Linktext</a>
 *
 */

$(document).ready(function(){
    $('.popup').popup({
        'frameWidth': 600, // Defines default width for iframed and inline content
        'frameHeight': 500, // Defines default height for iframed and inline content
        'overlayShow': true, // If true, shows the overlay
        'overlayOpacity': 0.4, // Opacity of overlay (from 0 to 1)
        'hideOnContentClick': false // Hides Popup when cliked on zoomed item
    });
});

(function($){

    var opts = {}, imgPreloader = new Image, imgTypes = ['png', 'jpg', 'jpeg', 'gif'], loadingTimer, loadingFrame = 1;
    
    $.fn.popup = function(settings){
    
        opts.settings = settings;
        
        $.fn.popup.init();
        
        return this.each(function(){
            var $this = $(this);
            var o = $.metadata ? $.extend({}, opts.settings, $this.metadata()) : opts.settings;
            
            $this.mouseover(function(){
                opts.savedTitle = this.title;
                this.title = "";
                return false;
            });
            
            $this.mouseout(function(){
                this.title = opts.savedTitle;
                opts.savedTitle = "";
                return false;
            });
            
            $this.unbind('click').click(function(){
                this.title = opts.savedTitle;
                opts.savedTitle = "";
                $.fn.popup.start(this, o);
                return false;
            });
            
        });
    };
    
    $.fn.popup.init = function(){
    
        // build popup dom if it not already exists
        
        if (!$('#popup').length) {
            $('<div id="overlay"></div><div id="popup"></div>').appendTo('body');
            $('<div id="popup_close"></div>').appendTo('#popup');
            $('<div id="popup_navigation"><a id="popup_back" href="javascript:;"></a><a id="popup_forward" href="javascript:;"></a></div>').appendTo('#popup');
            $('<div id="popup_frame"></div>').appendTo("#popup");
            $('<div id="popup_resizeHandle"></div>').appendTo('#popup');
            
            $('<div id="popup_title"></div>').appendTo('#popup_frame');
            $('<div id="popup_content"></div>').appendTo('#popup_frame');
            $('<div id="popup_caption"></div>').appendTo('#popup_frame');
            $('<div id="popup_statusBar"><p>&nbsp;</p></div>').appendTo('#popup');
        }
        
        $("#popup_close").click($.fn.popup.close);
        
        if (document.all && !window.opera && !window.XMLHttpRequest && $.browser.msie) {
            var isIE6 = true;
        }
        else {
            var isIE6 = false;
        };
        $.browser.msie6 = isIE6;
        
        if ($.browser.msie6) {
            $("#popup_frame").bgiframe();
            $("#overlay").bgiframe();
            $('#popup_close').ifixpng();
            $('#popup_resizeHandle').ifixpng();
            $('#popup_forward').ifixpng();
            $("#popup_back").ifixpng();
        }
    };
    
    $.fn.popup.start = function(el, o){
    
        if (opts.animating) 
            return false;
        
        if (o.overlayShow) {
        
            var contentWidth = ($('#main-content').height() + $('#header').height());
            
            $("#overlay").css({
                'opacity': o.overlayOpacity,
                'height': $(window).height() > contentWidth ? $(window).height() : (contentWidth + 100)
            }).fadeIn("normal");
            
            $("#overlay").click($.fn.popup.close);
        }
        
        opts.itemArray = [];
        opts.itemNum = 0;
        
        
        if (!el.rel || el.rel == '') {
            var item = {
                url: el.href,
                title: (!opts.savedTitle || opts.savedTitle == '') ? el.title : opts.savedTitle,
                o: o
            };
            opts.itemArray.push(item);
            
        }
        else {
            var arr = $("a[@rel=" + el.rel + "]").get();
            
            for (var i = 0; i < arr.length; i++) {
                var tmp = $.metadata ? $.extend({}, o, $(arr[i]).metadata()) : o;
                var item = {
                    url: arr[i].href,
                    title: (!opts.savedTitle || opts.savedTitle == '') ? arr[i].title : opts.savedTitle,
                    o: tmp
                };
                
                if (arr[i].href == el.href) 
                    opts.itemNum = i;
                
                opts.itemArray.push(item);
            }
        }
        
        $.fn.popup.changeItem(opts.itemNum);
    };
    
    $.fn.popup.changeItem = function(n){
    
        opts.itemNum = n;
        
        $("#popup").stop();
        $("#popup_caption > h3").hide();
        $("#popup_caption > p").hide();
        $(document).unbind("keydown");
        
        imgRegExp = imgTypes.join('|');
        imgRegExp = new RegExp('\.' + imgRegExp + '$', 'i');
        
        var mediaTypes = ['.aif', '.aiff', '.aac', '.au', '.bmp', '.gsm', '.mov', '.mid', '.midi', '.mpg', '.mpeg', '.mp4', '.m4a', '.psd', '.qt', '.qtif', '.qti', '.snd', '.tif', '.tiff', '.wav', '.flv', '.mp3', '.swf', '.asf', '.avi', '.wma', '.wmv', '.ra', '.ram', '.rm', '.rpm', '.rv', '.smi', '.smil', '.pdf']
        
        mediaRegExp = mediaTypes.join('|');
        mediaRegExp = new RegExp('\.' + mediaRegExp + '$', 'i');
        
        var url = opts.itemArray[n].url;
        
        if (url.indexOf("?") !== -1) {
            var widthFromUrl = url.split('width=')[1].split('&')[0];
            var heightFromUrl = url.split('height=')[1];
        }
        
        if (url.match(/#/)) {
            var target = window.location.href.split('#')[0];
            target = url.replace(target, '');
            
            $.fn.popup.showItem('<div id="fancy_div">' + $(target).html() + '</div>');
            
        }
        else 
            if (url.match(imgRegExp)) {
                $(imgPreloader).unbind('load').bind('load', function(){
                
                    opts.itemArray[n].o.frameWidth = imgPreloader.width;
                    opts.itemArray[n].o.frameHeight = imgPreloader.height;
                    
                    $.fn.popup.showItem('<img src="' + imgPreloader.src + '" />');
                    
                }).attr('src', url + '?rand=' + Math.floor(Math.random() * 999999999));
            }
            else 
                if ((url.indexOf(".mov") !== -1) || (url.indexOf(".swf") !== -1)) {
                    opts.itemArray[n].o.isMedia = true;
                    
                    opts.itemArray[n].o.frameWidth = widthFromUrl;
                    opts.itemArray[n].o.frameHeight = heightFromUrl;
                    
                    $.fn.popup.showItem('<a id="showme" href="' + url.split('?')[0] + '" class="media" />');
                }
                else {
                
                    opts.itemArray[n].o.frameWidth = widthFromUrl;
                    opts.itemArray[n].o.frameHeight = heightFromUrl;
                    
                    $.fn.popup.showItem('<iframe id="popup_iframe" onload="$.fn.popup.showIframe()" name="popup_iframe' + Math.round(Math.random() * 1000) + '" frameborder="0" hspace="0" src="' + url.split('?')[0] + '" width="' + widthFromUrl + '" height="' + heightFromUrl + '"></iframe>');
                }
    };
    
    $.fn.popup.showIframe = function(){
        $("#popup_iframe").show();
    };
    
    $.fn.popup.showItem = function(val){
    
        $.fn.popup.preloadNeighborImages();
        
        var newContentDimensions = {
            'width': parseFloat(opts.itemArray[opts.itemNum].o.frameWidth),
            'height': parseFloat(opts.itemArray[opts.itemNum].o.frameHeight)
        }
        
        var newPopupWidth = parseFloat(opts.itemArray[opts.itemNum].o.frameWidth) + parseFloat($('#popup_frame').css('margin-left')) + parseFloat($('#popup_content').css('margin-left'));
        var newPopupHeight = parseFloat(opts.itemArray[opts.itemNum].o.frameHeight) + parseFloat($('#popup_frame').css('margin-left')) + parseFloat($('#popup_content').css('margin-left'));
        
        var newPopupPosition = {
            'left': ($(window).width() / 2) - (newPopupWidth / 2),
            'top': ($(window).height() / 2) - (newPopupHeight / 2) < 10 ? $(window).scrollTop() : ($(window).height() / 2) - (newPopupHeight / 2) + $(window).scrollTop()
        }
        
        if (opts.active) {
        
            $("#popup").animate(newPopupPosition, "normal")
            
            $("#popup_content").contents().fadeOut("fast", function(){
                $("#popup_content").empty();
                $("#popup_content").append($(val))
                $("#popup_content").contents().fadeIn("normal", function(){
                    $('.media').media({
                        width: parseFloat(opts.itemArray[opts.itemNum].o.frameWidth),
                        height: parseFloat(opts.itemArray[opts.itemNum].o.frameHeight),
                        autoplay: true
                    });
                });
            })
            
            $("#popup_content").animate(newContentDimensions, "normal", function(){
            
                $.fn.popup.updateDetails();
            });
            
        }
        else {
            opts.active = true;
            
            $("#popup_content").empty();
            
            if ($.browser.msie6 || opts.itemArray[opts.itemNum].o.isMedia) {
                $("#popup").css(newPopupPosition).show();
                $("#popup_content").css(newContentDimensions).append($(val)).show();
            }
            else {
                $("#popup").css(newPopupPosition).fadeIn();
                $("#popup_content").css(newContentDimensions).append($(val)).fadeIn();
            }
            
            $('.media').media({
                width: parseFloat(opts.itemArray[opts.itemNum].o.frameWidth),
                height: parseFloat(opts.itemArray[opts.itemNum].o.frameHeight),
                autoplay: true
            });
            
            $.fn.popup.updateDetails();
        }
        
        
    };
    
    $.fn.popup.updateDetails = function(){
    
        $('#popup_close').show();
        
        $('#popup_caption').empty();
        
        if (opts.itemArray[opts.itemNum].title !== undefined && opts.itemArray[opts.itemNum].title !== '') {
        
            // splitting title into parts using the doublepipe || divider
            
            if (opts.itemArray[opts.itemNum].title.indexOf("||") != -1) {
            
                $('<h3>' + opts.itemArray[opts.itemNum].title.split('||')[0] + '</h3>').appendTo('#popup_caption').show('normal');
                $('<p>' + opts.itemArray[opts.itemNum].title.split('||')[1] + '</p>').appendTo('#popup_caption').show('normal');
                
                if (opts.itemArray[opts.itemNum].title.split('||')[2]) {
                    $('<p id="indexer">' + opts.itemArray[opts.itemNum].title.split('||')[2] + ' ' + opts.itemNum + '/' + opts.itemArray.length + ' </p>').appendTo('#popup_caption').show('normal');
                }
            }
            else {
                $('<p>' + opts.itemArray[opts.itemNum].title + '</p>').appendTo('#popup_caption').show('normal');
            }
            
        }
        
        if (opts.itemArray[opts.itemNum].o.hideOnContentClick) {
            $("#popup_content").click($.fn.popup.close);
        }
        else {
            $("#popup_content").unbind('click');
        }
        
        $('#popup_forward').unbind('click');
        $('#popup_back').unbind('click');
        
        if (opts.itemNum != 0) {
            $('#popup_back').show()
            $('#popup_back').click(function(){
                $.fn.popup.changeItem(opts.itemNum - 1);
                return false;
            });
        }
        else {
            $('#popup_back').hide()
        }
        
        if (opts.itemNum != (opts.itemArray.length - 1)) {
            $('#popup_forward').show()
            $('#popup_forward').click(function(){
                $.fn.popup.changeItem(opts.itemNum + 1);
                return false;
            });
        }
        else {
            $('#popup_forward').hide()
        }
        
        $(document).keydown(function(event){
            if (event.keyCode == 27) {
                $.fn.popup.close();
                
            }
            else 
                if (event.keyCode == 37 && opts.itemNum != 0) {
                    $.fn.popup.changeItem(opts.itemNum - 1);
                }
                else 
                    if (event.keyCode == 39 && opts.itemNum != (opts.itemArray.length - 1)) {
                        $.fn.popup.changeItem(opts.itemNum + 1);
                    }
        });
    };
    
    $.fn.popup.preloadNeighborImages = function(){
        if ((opts.itemArray.length - 1) > opts.itemNum) {
            preloadNextImage = new Image();
            preloadNextImage.src = opts.itemArray[opts.itemNum + 1].url;
        }
        
        if (opts.itemNum > 0) {
            preloadPrevImage = new Image();
            preloadPrevImage.src = opts.itemArray[opts.itemNum - 1].url;
        }
    };
    
    $.fn.popup.close = function(){
        if (opts.animating) 
            return false;
        
        $(imgPreloader).unbind('load');
        $(document).unbind("keydown");
        
        $('#popup_close').hide();
        
        opts.active = false;
        
        $("#popup").hide();
        $("#popup_content").fadeOut('normal').empty();
        $("#overlay").fadeOut("fast");
    };
    
    $.fn.popup.num = function(el, prop){
        return parseInt($.curCSS(el.jquery ? el[0] : el, prop, true)) || 0;
    };
    
})(jQuery);
