﻿/******************************************************************************
* author: Yellow Pencil
* notes:  Copyright (c) Yellow Pencil. All Rights Reserved. 
*         The code contained within this file is not liscensed for public 
*         usage. Do not reproduce or alter this file complete or in part 
*         without the express written permission of the author. 
* 
******************************************************************************/    
/******************************************************************************
* class: classCommon
* notes: JS object that is loaded on every page.  This object should contain
*        global methods and properties to be used by modules plugged into the
*        site templates.
* 
********/
    
function classCommon() {
    var o = this;
    
    o.version = '20100909';
    
    o.queryString = new Array();
    var a = (location.href.indexOf('?') > -1 ?  location.href.slice(location.href.indexOf('?') + 1).split('&') : new Array()), b = '';
    for(c = 0; c < a.length; c++) {
        b = a[c].split('=');
        o.queryString[b[0]] = b[1];
    };
    
    o.noFlash = o.queryString.noflash == 'true' || o.queryString.noflash == '1';
    o.debug = o.queryString.debug == 'true' || o.queryString.noflash == '1';
    
    var obj = this;
    
    
/******************************************************************************
    * property: viewport info
    * notes:    Viewport information about the client.
    * 
    ***/
    
    o.viewTop = function() {
        return (window.pageYOffset ? window.pageYOffset : (document.documentElement && document.documentElement.scrollTop ? document.documentElement.scrollTop : document.body.scrollTop));
    };
    o.viewLeft = function() {
        return (window.pageXOffset ? window.pageXOffset : (document.documentElement && document.documentElement.scrollLeft ? document.documentElement.scrollLeft : document.body.scrollLeft));
    };
    o.viewWidth = function() {
        return (window.innerWidth ? window.innerWidth : (document.documentElement && document.documentElement.clientWidth ? document.documentElement.clientWidth : document.body.clientWidth));
    };
    o.viewHeight = function() {
        return (window.innerHeight ? window.innerHeight : (document.documentElement && document.documentElement.clientHeight ? document.documentElement.clientHeight : document.body.clientHeight));
    };
    o.docHeight = function() {
        return Math.max(document.body.scrollHeight, document.documentElement.scrollHeight, document.body.offsetHeight, document.documentElement.offsetHeight, document.body.clientHeight, document.documentElement.clientHeight);
    }; 
    
    
/******************************************************************************
    * method: setMenu defaults
    * notes:  opens a new window.
    * 
    ***/
    
    var resizeTimer;
    var initTimer;
    
    var subDone = false;
    var mainDone = false;
    var isRendered=false;
    var isIE = (navigator.appName == "Microsoft Internet Explorer");
    var isOpera = (navigator.appName == "Opera");
    
    jQuery(document).ready(function(){
       if(objYPPage.mode != 1) {
            jkmegamenu.definemenu("translateAnchor", "translateMenu", "mouseover");
            
            if(window.quickLinkData && quickLinkData.length > 0) {
                setMegaMenu();
            } else {
                mainDone = true;
            };
            if(window.mainMenuData && mainMenuData.length > 0) {
                setSubMenus();
            } else {
                subDone = true;
            };
            
            initTimer = setInterval(function(){ initAction(); }, 500);
            obj.loadScript('http://translate.google.com/translate_a/element.js?cb=googleTranslateElementInit', function() {});
        };
        
//        if(objYPPage.template.toLowerCase() == 'home' && window.slideShow) {
            //slideShow.getSlideshowData();
//        };
    });
    
    
/******************************************************************************
    * method: buildSubMenus
    * notes:  Build the sub menus from an array of menu items.
    * 
    ***/
    
    function setMegaMenu(){
        var megamenuDiv = "megamenu1";
        var megamenuAnchor = "megaanchor";
        
        buildMegaMenu(quickLinkData, megamenuDiv, megamenuAnchor);
    }
    
    
/******************************************************************************
    * method: setMenu defaults
    * notes:  opens a new window.
    * 
    ***/
    
    function setSubMenus(){
        buildSubMenus(mainMenuData);
    }
    
    
/******************************************************************************
    * method: setMenu defaults
    * notes:  opens a new window.
    * 
    ***/
    
    window.onresize = function(event) {
        if(resizeTimer != null) { 
            clearInterval(resizeTimer); 
        };
        resizeTimer = setInterval(function() { 
            resizeAction(); 
        }, 200);
    };
    
        
/******************************************************************************
    * method: setMenu defaults
    * notes:  opens a new window.
    * 
    ***/
    
    function resizeAction() {
        clearInterval(resizeTimer);
        jkmegamenu.render(jQuery);
    };
    
    
/******************************************************************************
    * method: setMenu defaults
    * notes:  opens a new window.
    * 
    ***/
    
    function getItems(p_items){
        var items = [];
        var l = p_items.length;
        
        for(var i=0;i<l;i++){
            if(p_items[i].tagName == "item"){
                var obj = new Object();
                obj.url = p_items[i].attributes[0].value;
                
                if(!isIE){ 
                    obj.title = p_items[i].textContent;
                }else{
                    obj.title = p_items[i].text;
                }
                    
                items.push(obj);
                
                /*var str="";
                for(var n in obj) str+= n+":'"+obj[n]+"' <br> ";
                document.write(i+" :::: "+str);
                */
            }
        }
        return items;
    };
    
    function buildMegaMenu(menuNodes, p_div, p_anchor){
        //alert("BUILD MEGA MENU ::: "+menuNodes);
        var l = menuNodes.length;
        jQuery(document.body).append("<div id='megamenu1' class='megamenu'></div>");
    
        for(var i=0;i<l;i++){
            jQuery("#"+p_div).append("<div id='col"+i+"' class='column'><h3>"+menuNodes[i].name+"</h3></div>");
        
            var len = menuNodes[i].items.length;
            for(var n = 0;n<len;n++){
                jQuery("#col"+i).append("<a href='" + menuNodes[i].items[n].url + "'>"+menuNodes[i].items[n].title+"</a>" + (n != len - 1 ? '' : ''));    
            }
        }
        jkmegamenu.definemenu(p_anchor, p_div, "mouseover");
        mainDone=true;
        if(subDone && !isRendered){ jkmegamenu.render(jQuery); isRendered=true;}
    }
        
    function buildSubMenus(menus){
        //alert("BUILD SUB MENUS :: "+menus);
        var l=menus.length;
        for(var i = 0;i<l;i++){
            jQuery(document.body).append("<div id='"+menus[i].div+"' class='"+menus[i].mainClass+ " " + menus[i].style + "'></div>");
            jQuery("#"+menus[i].div).append("<div class='column'><ul id='ul"+i+"'></ul></div>");
            var len = menus[i].items.length;
                
            for(var n = 0;n<len;n++){
                jQuery("#ul"+i).append("<li><a href='" + menus[i].items[n].url + "'>"+menus[i].items[n].title+"</a></li>");    
            }
            jkmegamenu.definemenu(menus[i].anchor, menus[i].div, "mouseover");
        }
        subDone=true;
        if(mainDone && !isRendered){ jkmegamenu.render(jQuery);isRendered=true; } 
    }
    
        
/******************************************************************************
    * method: setMenu defaults
    * notes:  opens a new window.
    * 
    ***/
    
    function initAction(){
        if(subDone && mainDone && isRendered){
            clearInterval(initTimer);
        }else if(subDone && mainDone && !isRendered){
            jkmegamenu.render(jQuery);
            isRendered=true;
        }    
    }
    
    
/******************************************************************************
    * method: openWindow
    * notes:  opens a new window.  the method detects if the window was opened
    *         or blocked by popup blockers.
    * 
    ***/
    
    this.openWindow = function(strUrl, strName, strFeatures, bReplace) {
        var elWindow = window.open((strUrl ? strUrl : ''), (strName ? strName : ''), (strFeatures ? strFeatures : ''), (bReplace ? bReplace : false));
        if(!elWindow) {
            // popup blocked display message or navigate to link directly
        };
        return false;
    };
    
    
/******************************************************************************
    * method: addEvent
    * notes:  Allows for multiple handlers. 
    * 
    ***/
    
    o.addEvent = function(varThis, strEvent, strFunction) {
        var el = varThis.toString().indexOf('[object') != -1 ? varThis : document.getElementById(varThis);
        if(window.attachEvent) {
            el.attachEvent('on' + strEvent, strFunction);
        } else {
            el.addEventListener(strEvent, strFunction, false);
        };
    };
    
    
/******************************************************************************
    * method: removeEvent
    * notes:  Allows for multiple handlers. 
    * 
    ***/
    
   o.removeEvent = function(varThis, strEvent, strFunction) {
        var el = varThis.toString().indexOf('[object') != -1 ? varThis : document.getElementById(varThis);
        if(window.detachEvent) {
            el.detachEvent('on' + strEvent, strFunction);
        } else {
            el.removeEventListener(strEvent, strFunction, false);
        };
    };
    
    
/******************************************************************************
    * method: loadScript
    * notes:  loads an external script object.  this allows us to dynamically
    *         load JS includes as appropriate.
    * 
    ***/
    
    this.loadScript = function(url, callback) {
        var elScript = document.createElement('script');
        elScript.type = 'text/javascript';
        
        if(elScript.readyState) { //ie
            elScript.onreadystatechange = function() {
                if(elScript.readyState == 'loaded' || elScript.readyState == 'complete') {
                    elScript.onreadystatechange = null;
                    callback();
                };
            };
        } else {
            elScript.onload = function() { 
                callback(); 
            };
        };
        elScript.src = url;
        document.getElementsByTagName('head')[0].appendChild(elScript);                
    };
    
    
/******************************************************************************
    * method: addYouTube
    * notes:  this method adds a YouTube video to the page.
    * 
    ***/
    
    this.addYouTube = function(objSettings) {
        if(!obj.noFlash) {
            var elPlayer = document.getElementById(objSettings.id);
            
            var strHtml = '<object class="flash" classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,0,0" width="' + objSettings.width + '" height="' + objSettings.height + '" id="flash" align="middle">';
            strHtml += '    <param name="allowScriptAccess" value="sameDomain" />';
            strHtml += '    <param name="allowFullScreen" value="false" />';
            strHtml += '    <param name="movie" value="' + objSettings.player + '?xml=' + objSettings.data + '" />';
            strHtml += '    <param name="loop" value="false" />';
            strHtml += '    <param name="menu" value="false" />';
            strHtml += '    <param name="quality" value="best" />';
            strHtml += '    <param name="scale" value="noscale" />';
            strHtml += '    <param name="wmode" value="opaque" />';        
            strHtml += '    <embed src="' + objSettings.player + '?xml=' + objSettings.data + '" loop="false" menu="false" wmode="opaque" quality="best" scale="noscale" width="' + objSettings.width + '" height="' + objSettings.height + '" name="main" align="middle" allowScriptAccess="sameDomain" allowFullScreen="false" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" />';
            strHtml += '</object>';
        
            elPlayer.innerHTML = strHtml;
        };
    };
};
var objCommon = new classCommon();
