/*
    Created By: Chris Campbell
    Website: http://particletree.com
    Date: 2/1/2006
    Inspired by the lightbox implementation found at http://www.huddletogether.com/projects/lightbox/
    Modified by: Critical Mass
    Date: 2/10/2007
*/
/*---------------------------------------GLOBAL VARIABLES----------------------------------------*/
var detect = navigator.userAgent.toLowerCase();
var OS,browser,version,total,thestring;
/*-----------------------------------------------------------------------------------------------*/
function getBrowserInfo() { // Browser detect script origionally created by Peter Paul Koch at http://www.quirksmode.org/
    if (checkIt('konqueror')) {
        browser = "Konqueror";
        OS = "Linux";
    }
    else if (checkIt('safari')) browser     = "Safari"
    else if (checkIt('omniweb')) browser     = "OmniWeb"
    else if (checkIt('opera')) browser         = "Opera"
    else if (checkIt('webtv')) browser         = "WebTV";
    else if (checkIt('icab')) browser         = "iCab"
    else if (checkIt('msie')) browser         = "Internet Explorer"
    else if (!checkIt('compatible')) {
        browser = "Netscape Navigator"
        version = detect.charAt(8);
    }
    else browser = "An unknown browser";
    if (!version) version = detect.charAt(place + thestring.length);
    if (!OS) {
        if (checkIt('linux')) OS         = "Linux";
        else if (checkIt('x11')) OS     = "Unix";
        else if (checkIt('mac')) OS     = "Mac"
        else if (checkIt('win')) OS     = "Windows"
        else OS                         = "an unknown operating system";
    }
}
function checkIt(string) {
    place = detect.indexOf(string) + 1;
    thestring = string;
    return place;
}
//####################################### Ajax Pop Up ##############################################
var lightboxAjax = Class.create();
lightboxAjax.prototype = {
    lightbox : 'lightbox', // Lightbox container div
    overlay : 'overlay', // Overlay container div
    lbContent : 'lbContent', // Lightbox content wrapper container div
    yPos : 0,
    xPos : 0,
    
    initialize: function(ctrl, ajaxLink) { //Go through pop up links and asign onclick events
        this.language = ctrl.hreflang;
        this.content = ajaxLink || ctrl.href;

        //Convert the SEO version of the page to the Ajax version
        if(ajaxLink == null) {
            this.regexp = /\/en\//g;
            this.content = this.content.replace(this.regexp,'/en/includes/');
        }
        Event.observe(ctrl, 'click', this.activate.bindAsEventListener(this), false);
        ctrl.onclick = function(){return false;};
    },
    
    activate: function(){ // Turn everything on - mainly the IE fixes
        if (browser == 'Internet Explorer'){
            this.getScroll();
            this.prepareIE('100%', 'hidden');
            this.setScroll(0,0);
            this.hideSelects('hidden');
        }
        this.displayLightbox("block");
    },
    
    prepareIE: function(height, overflow){ // Ie requires height to 100% and overflow hidden or else you can scroll down past the lightbox
        bod = document.getElementsByTagName('body')[0];
        bod.style.height = height;
        bod.style.overflow = overflow;
  
        htm = document.getElementsByTagName('html')[0];
        htm.style.height = height;
        htm.style.overflow = overflow;
    },
    
    hideSelects: function(visibility){ // In IE, select elements hover on top of the lightbox
        selects = document.getElementsByTagName('select');
        for(i = 0; i < selects.length; i++) {
            selects[i].style.visibility = visibility;
        }
    },
    
    hideEmbeds: function(visibility) {
        //Toggle Flash Elements
        var objectList = $('container').getElementsBySelector('object');
        var embedList = $('container').getElementsBySelector('embed');
        if(visibility == 'hidden') {
            if(objectList.length != 0) for (var i=0;i<objectList.length;i++) objectList[i].setStyle({display: 'none', visibility: 'hidden'});
            if(embedList.length != 0) for (var i=0;i<embedList.length;i++) embedList[i].setStyle({display: 'none', visibility: 'hidden'});
        }else {
            if(objectList.length != 0) for (var i=0;i<objectList.length;i++) objectList[i].setStyle({display: '', visibility: ''});
            if(embedList.length != 0) for (var i=0;i<embedList.length;i++) embedList[i].setStyle({display: '', visibility: ''});
        }
    },
   
    getScroll: function(){ // Taken from lightbox implementation found at http://www.huddletogether.com/projects/lightbox/
        if (self.pageYOffset) {
            this.yPos = self.pageYOffset;
        } else if (document.documentElement && document.documentElement.scrollTop){
            this.yPos = document.documentElement.scrollTop;
        } else if (document.body) {
            this.yPos = document.body.scrollTop;
        }
    },
    
    setScroll: function(x, y){
        window.scrollTo(x, y);
    },
    // Display Lightbox ----------------------------------------------------------------------------
    displayLightbox: function(display){ // Display Lightbox
        $(this.overlay).style.display = display;
        $(this.lightbox).style.display = display;
        if(display != 'none') {
            this.loadInfo();
            this.hideEmbeds('hidden');
        }
    },
    
    loadInfo: function() { // Begin Ajax request based off of the href of the clicked linked
        var myAjax = new Ajax.Request(this.content, {method: 'post', parameters: "", onComplete: this.processInfo.bindAsEventListener(this)});
    },
    
    processInfo: function(response){ // Display Ajax response
        info = response.responseText;
        contentCon = document.createElement('div');
        contentCon.id = this.lbContent;
        $(this.lightbox).appendChild(contentCon);
        $(this.lbContent).update(info);
        this.actions();
    },
    
    actions: function(){ // Search through new links within the lightbox, and attach click event
        lbActions = document.getElementsByClassName('close-lightbox');
        for(i = 0; i < lbActions.length; i++) {
            Event.observe(lbActions[i], 'click', this.deactivate.bindAsEventListener(this), false);
            lbActions[i].onclick = function(){return false;};
        }
    },
    deactivate: function(){ // Hide Lightbox, remove previous content and enable scrollbar for IE
        if($(this.lbContent)){
            $(this.lbContent).remove();
        }
        if (browser == "Internet Explorer"){
            this.setScroll(0,this.yPos);
            this.prepareIE("auto", "");
            this.hideSelects("visible");
        }
        this.displayLightbox("none");
        this.hideEmbeds('visible');
    }
}
//------------------------------------ Initiate Ajax Lightbox Pop Up  -----------------------------------
function initializeAjaxPopUp(){ // Onload, make all links that need to trigger a lightbox active
    addLightboxAjaxMarkup();
    lbox = document.getElementsByClassName('ajax-pop-up');
    for(i = 0; i < lbox.length; i++) {
        valid = new lightboxAjax(lbox[i]);
    }
}
function addLightboxAjaxMarkup() { // Add in markup necessary to make this work. Basically two divs
    bod        = $('pop-up-container');
    overlay    = document.createElement('div');
    overlay.id = 'overlay';
    lb         = document.createElement('div');
    lb.id      = 'lightbox';
    bod.appendChild(overlay);
    bod.appendChild(lb);
}
//####################################### Inline Pop Up #############################################
var lightboxInline = Class.create();
lightboxInline.prototype = {
    lightbox : 'lightbox', // Lightbox container div
    overlay : 'overlay', // Overlay container div
    yPos : 0,
    xPos : 0,
    
    initialize: function(ctrl) { //Go through pop up links and asign onclick events
        this.content = ctrl.href;
        Event.observe(ctrl, 'click', this.activate.bindAsEventListener(this), false);
        ctrl.onclick = function(){return false;};
    },
    
    activate: function(){ // Turn everything on - mainly the IE fixes
        if (browser == 'Internet Explorer'){
            this.getScroll();
            this.prepareIE('100%', 'hidden');
            this.setScroll(0,0);
            this.hideSelects('hidden');
        }
        this.displayLightbox("block");
    },
    
    prepareIE: function(height, overflow){ // Ie requires height to 100% and overflow hidden or else you can scroll down past the lightbox
        bod = document.getElementsByTagName('body')[0];
        bod.style.height = height;
        bod.style.overflow = overflow;
  
        htm = document.getElementsByTagName('html')[0];
        htm.style.height = height;
        htm.style.overflow = overflow;
    },
   
    hideSelects: function(visibility){ // In IE, select elements hover on top of the lightbox
        selects = document.getElementsByTagName('select');
        for(i = 0; i < selects.length; i++) {
            selects[i].style.visibility = visibility;
        }
    },
    
    getScroll: function(){ // Taken from lightbox implementation found at http://www.huddletogether.com/projects/lightbox/
        if (self.pageYOffset) {
            this.yPos = self.pageYOffset;
        } else if (document.documentElement && document.documentElement.scrollTop){
            this.yPos = document.documentElement.scrollTop;
        } else if (document.body) {
            this.yPos = document.body.scrollTop;
        }
    },
    
    setScroll: function(x, y){
        window.scrollTo(x, y);
    },
    
    // Display Lightbox ----------------------------------------------------------------------------
    displayLightbox: function(display){
        $(this.overlay).style.display = display;
        $(this.lightbox).style.display = display;
        qparts = this.content.split("#"); //Split url of the pop up link after #
        linkValue = qparts[1] + "-pop-up";
        $(linkValue).style.display = display;
        this.actions();
    },
    
    //Loop through the elements with 'close-lightbox' class name and create onclick event on them
    actions: function(){
        lbActions = document.getElementsByClassName('close-lightbox');
        for(i = 0; i < lbActions.length; i++) {
            Event.observe(lbActions[i], 'click', this[lbActions[i].rel].bindAsEventListener(this), false);
            lbActions[i].onclick = function(){return false;};
        }
    },
    // Hide Lightbox and enable scrollbar for IE
    deactivate: function(){
        if (browser == "Internet Explorer"){
            this.setScroll(0,this.yPos);
            this.prepareIE("auto", "");
            this.hideSelects("visible");
        }
        this.displayLightbox("none");
    }
}
//------------------------------------ Initiate Inline Lightbox Pop Up  -----------------------------------
function initializeInlinePopUp(){ // Onload, make all links that need to trigger a lightbox active
    addLightboxInlineMarkup();
    lbox = document.getElementsByClassName('inline-pop-up');
    for(i = 0; i < lbox.length; i++) {
        valid = new lightboxInline(lbox[i]);
        qparts = this.lbox[i].href.split("#"); //Split url of the pop up link after #
        linkName = qparts[1] + "-pop-up";
        $('lightbox').appendChild($(linkName));
        $(linkName).style.display = 'none';
    }
}
function addLightboxInlineMarkup() { // Add in markup necessary to make this work. Basically two divs:
    bod        = $('pop-up-container');
    overlay    = document.createElement('div');
    overlay.id = 'overlay';
    lb         = document.createElement('div');
    lb.id      = 'lightbox';
    bod.appendChild(overlay);
    bod.appendChild(lb);
    var closeButtons = document.getElementsByClassName("close-lightbox");
    for (var i = 0; i < closeButtons.length; i++) {
        closeButtons[i].style.display = 'block';
    }
}

/* Language info popups */
function initializeLanguagePopups() {
    lbox = document.getElementsByClassName('ajax-lang-pop-up');
    for(i = 0; i < lbox.length; i++) {
        if(lbox[i].href.indexOf('/es/') != -1) {
            new lightboxAjax(lbox[i], '/en/spanish-message.jsp?proceedURL='+lbox[i].href);
        } else if(lbox[i].href.indexOf('/fr/') != -1) {
            new lightboxAjax(lbox[i], '/en/french-message.jsp?proceedURL='+lbox[i].href);
        }
    }
}

Event.observe(window, 'load', initializeAjaxPopUp, false);
Event.observe(window, 'load', initializeLanguagePopups, false);
Event.observe(window, 'load', initializeInlinePopUp, false);
Event.observe(window, 'load', getBrowserInfo, false);
Event.observe(window, 'unload', Event.unloadCache, false);
