/*
 * RTRBox (for jQuery)
 * Version: 1.0
 * @requires: jQuery v1.2 or later
 */
 
 /* Public Functions */
 // getPageScroll() by quirksmode.com
 function getPageScroll()
 {
    var xScroll, yScroll;
    if (self.pageYOffset)
    {
        yScroll = self.pageYOffset;
        xScroll = self.pageXOffset;
    }
    else if (document.documentElement && document.documentElement.scrollTop)         // Explorer 6 Strict Mode
    {       
        yScroll = document.documentElement.scrollTop;
        xScroll = document.documentElement.scrollLeft;
    }
    else if (document.body)                                                      // All other Explorers
    {
        yScroll = document.body.scrollTop;
        xScroll = document.body.scrollLeft;
    }
        
    return new Array(xScroll, yScroll);
 }
 
 // Adapted from getPageSize() by quirksmode.com
 function getPageHeight()
 {
    var windowHeight;
    if (self.innerHeight)                                                           // All except Explorer
    {
        windowHeight = self.innerHeight;
    }
    else if (document.documentElement && document.documentElement.clientHeight)      // Explorer 6 Strict Mode
    {
        windowHeight = document.documentElement.clientHeight;
    }
    else if (document.body)                                                      // Other Explorers
    {
        windowHeight = document.body.clientHeight;
    }
    
    return windowHeight;
 }
 
 // Figures out what is needed to display
 // Formats are:
 //     div     :   #id
 //     image   :   blah.extension
 //     ajax    :   anything else
 function fillRTRboxFromHref(href, klass, close)
 {
    // div
    if (href.match(/#/))
    {
        var url     =   window.location.href.split('#')[0];
        var target  =   href.replace(url, '');
        RTRBox.reveal($(target).clone().show(), klass, close);
	RTRBox.toggleCloseButton(true);
    }
    // image
    else if (href.match(RTRBox.Settings.imageTypesRegexp))
    {
        fillRTRBoxFromImage(href, klass, close);
    }
    // ajax
    else
    {
        fillRTRBoxFromAjax(href, klass, close);
    }
 }
 
 function fillRTRBoxFromImage(href, klass, close)
 {
    var image = new Image();
    image.onload = function() {
        RTRBox.reveal('<img src="' + image.src + '" />', klass, close);
    }
    image.src = href;
 }
 
 function fillRTRBoxFromAjax(href, klass, close)
 {
    $.get(href, function(data) {
        RTRBox.reveal(data, klass, close);
    });
 }
 
 function skipOverlay()
 {
    return RTRBox.Settings.overlay == false || RTRBox.Settings.opacity === null;
 }
 
 function showOverlay(outsideClickToHide)
 {
    if (skipOverlay())
        return;
        
    if ($('#rtrbox_overlay').length == 0)
        $("body").append('<div id="rtrbox_overlay"></div>');
        
    $('#rtrbox_overlay').hide().addClass("rtrbox_overlayBG").css('opacity', RTRBox.Settings.opacity).fadeIn(200);
    if (outsideClickToHide)
        $('#rtrbox_overlay').click(function() {
            $(document).trigger('close_rtrbox');
        });
        
    return false;
 }
 
 function hideOverlay()
 {
    if (skipOverlay())
        return;
        
    $('#rtrbox_overlay').fadeOut(200, function() {
        $('#rtrbox_overlay').removeClass("rtrbox_overlayBG");
        $('#rtrbox_overlay').addClass("rtrbox_hide");
        $('#rtrbox_overlay').remove();
    });
    
    return false;
 }
 
 // Bindings
 $(document).bind('close.rtrbox', function() {
    $('#rtrbox').fadeOut(function() {
        $('#rtrbox .content').removeClass().addClass('content');
        hideOverlay();
        $('#rtrbox .loading').remove();
    });
 });
 
 $(document).bind('keydown.rtrbox', function(e) {
    if (e.keyCode == 27 && $('#rtrbox .close').is(':visible'))
        RTRBox.close();
    return true;
});
 
 RTRFaceBox = function()
 {
    var settings = { 
                        opacity             :   0.5,
                        overlay             :   true,
                        loadingImage        :   '/common/static/img/loading.gif',
                        loadingImageWidth   :   '32px',
                        closeImage          :   '/common/static/img/icons/close.png',
                        imageTypes          :   [ 'png', 'jpg', 'jpeg', 'gif' ],
                        html                :   '<div id="rtrbox" style="display: none;"> \
                                                    <div class="popup"> \
                                                        <div class="body clearfix"> \
														<div class="boxContainer"> \
															<div class="topLeftCorner"></div> \
															<div class="topRightCorner"></div> \
															<div class="content clearfix"></div> \
																<div class="footer"> \
																	<a href="#" class="close"><img src="images/rtrbox/closelabel.gif" alt="close" class="closeimage" \/></a> \
																</div> \
															<div class="contentWide"></div> \
															<div class="contentHeight"></div> \
															<div class="bottomLeftCorner"></div> \
															<div class="bottomRightCorner"></div> \
														</div> \
                                                        </div> \
                                                    </div>\
                                                </div>',
                        pleaseWaitHtml      :   '<div id="pleasewait"> \
                                                    <img src="images/rtrbox/loading.gif" alt="wait" class="imageLeft" \/> @@HTML@@ \
                                                 </div>'
                    };
    this.init(settings);
 }
 
 $.extend(RTRFaceBox.prototype,
 {
    // Object variables
    Settings: null,
    
    LoadingImageWidth: null,
    
    init: function(settings)
    {
        if (settings)
            this.Settings = settings;
            
        if (this.Settings.inited)
            return true;
        else
            this.Settings.inited = true;
        
        $(document).trigger('init.rtrbox');
        
        var imageTypes = this.Settings.imageTypes.join('|');
        this.Settings.imageTypesRegexp = new RegExp('\.(' + imageTypes + ')$', 'i');
        $('body').append(this.Settings.html);
        
        var preload = [ new Image(), new Image() ];
        preload[0].src = this.Settings.closeImage;
        preload[1].src = this.Settings.loadingImage;
        
        $('#rtrbox').find('.b:first, .bl, .br, .tl, .tr').each(function() {
            preload.push(new Image());
            preload.slice(-1).src = $(this).css('background-image').replace(/url\((.+)\)/, '$1');
        });
        
        $('#rtrbox .close').click(this.close);
        $('#rtrbox .closeimage').attr('src', this.Settings.closeImage);
    },
    
    toggle: function(data, close, klass) {
        this.loading();
        
        if (data.ajax)
            fillRTRBoxFromAjax(data.ajax, klass, close);
        else if (data.image)
            fillRTRBoxFromImage(data.image, klass, close);
        else if (data.div)
            fillRTRboxFromHref(data.div, klass, close);
        else if ($.isFunction(data))
            data.call($);
        else
            this.reveal(data, klass, close);
    },
    
    pleaseWait: function(HTML) {
        this.loading();
        
        var PleaseWaitHTML = this.Settings.pleaseWaitHtml;
        
        if (HTML)
        {
            PleaseWaitHTML = PleaseWaitHTML.replace(/@@HTML@@/g, HTML);
        }
        else
            PleaseWaitHTML = PleaseWaitHTML.replace(/@@HTML@@/g, "<span>Please Wait</span>");
        
        this.toggle(PleaseWaitHTML, false);        
    },
    
    loading: function() {
        this.init();
        
        if ($('#rtrbox .loading').length == 1)
            return true;
            
        showOverlay();
        
        $('#rtrbox .content').empty();
        $('#rtrbox .body').children().hide().end().append('<div class="loading"><img src="' + this.Settings.loadingImage + '" /></div>');
        $('#rtrbox').css({
            top     :   getPageScroll()[1] + (getPageHeight() / 10),
            left    :   $(window).width() / 2 - 205
        }).show();
        
        $(document).trigger('loading.rtrbox');               
    },
    
    reveal: function(data, klass, close) {
        $(document).trigger('beforeReveal.rtrbox');
        
        if (klass)
            $('#rtrbox .content').addClass(klass);
            
        $('#rtrbox .content').children().remove();  
        $('#rtrbox .content').append(data);
        $('#rtrbox .loading').remove();
        $('#rtrbox .body').children().fadeIn('slow');
        
        // If not please wait, make sure close is shown
        if (!close)
            $('#rtrbox .close').hide();
        
        $('#rtrbox').css('left', $(window).width() / 2 - ($('#rtrbox').width() / 2));
        $(document).trigger('reveal.rtrbox').trigger('afterReveal.rtrbox');
    },
    
    appendContent: function(area, data) {
        $('#rtrbox ' + area).append(data);
    },
    
    clearContent: function(area) {
        $('#rtrbox ' + area).empty();
    },
    
    toggleCloseButton: function(show) {
        if (!show)
            $('#rtrbox .close').hide();
        else
            $('#rtrbox .close').show();
    },
    
    close: function() {
        $(document).trigger('close.rtrbox');
        return false;
    }
 });
 
 // Init RTRBox
 var RTRBox;
 $(function() {
    RTRBox = new RTRFaceBox();
    $('a[rel*=rtrbox]').click(function() {
        RTRBox.toggle({ div : $(this).attr('href') }, true);
        return false; 
    });
 });