//header and footer search
function attachHeaderSearchEvent() {
	$ate($ge('tb-weatherLocation'),'click',headerSearch);
	$ate($ge('headerSrchBtnId'),'click',submitHeaderSearch);
	$ate($ge('tb-weatherLocation'),'keypress',submitHeaderSearch);
	$ge('form-SearchHeader').action = glbUtilObj.getServerName()+"/search-results/";
	
	try {
		    $ate($ge('ftrSrchBtnId'),'click',submitFooterSearch);
			$ate($ge('ftrTb-weatherLocation'),'keypress',submitFooterSearch);
		    $ge('form-SearchFtr').action = glbUtilObj.getServerName()+"/search-results/";
    } catch (e) {}
    
    //sns may not be there if user is logged in
    try {
        if($ge('hdrSnsSignInLink') != null) {
            $ge('hdrSnsSignInLink').href = snsPostUrl;
            $ge('hdrCreateProfileId').href = $ge('hdrCreateProfileId').href + siteDomain + '&authLev=1' + currentUrl + '&lang=en&locale=us&createSn=1';
        }
        
        if($ge('snsSignOutLink') != null) {
        	$ge('snsSignOutLink').href = snsLogoutPostUrl;
        }
        
    } catch(e) {$log(e,'notice');}
}
function headerSearch(){
    if($ge('tb-weatherLocation').value == "Get Weather For > Enter Zip, State, City or Country"){
        $ge('tb-weatherLocation').value = "";
        $ge('tb-weatherLocation').focus();
    }
}
function submitHeaderSearch(e) {
 if($ge('tb-weatherLocation').value == "Get Weather For > Enter Zip, State, City or Country"){
        $ge('tb-weatherLocation').value = "";
        $ge('tb-weatherLocation').focus();
    }
    $ge('tb-weatherLocation').className = "dark";
    if (e.type == "click" || e.keyCode == 13) {
            if(($ge('tb-weatherLocation').value!= "") || ($ge('tb-weatherLocation').value!= "Get Weather For > Enter Zip, State, City or Country") ){
                if($ge('tb-weatherLocation').value.trim().length > 0) {
                    var action =$ge('form-SearchHeader').action;
                        
                        if(action.indexOf("search-results") != -1)
                        {
                            window.location=glbUtilObj.getServerName()+"/search-results/"+escape($ge('tb-weatherLocation').value.trim());
                        }
                        else if(action.indexOf("news.aol.com")!=-1){
                            window.location=action+escape($ge('tb-weatherLocation').value.trim());
                        }
                        else{
                            $ge('form-SearchHeader').submit();
                        }
                }
            }
            glbDomObj.cancelDefaultAction(e);
        }
}

try {
  document.execCommand("BackgroundImageCache", false, true);
} catch(err) {}

function rsiAdInit(segmax) { var segQS=""; var segs_beg=document.cookie.indexOf('rsi_segs='); if(segs_beg>=0){ segs_beg=document.cookie.indexOf('=',segs_beg)+1; if(segs_beg>0){ var segs_end=document.cookie.indexOf(';',segs_beg); if(segs_end==-1)segs_end=document.cookie.length; rsi_segs=document.cookie.substring(segs_beg,segs_end).split('|'); for (var i=0;i<Math.min(segmax,rsi_segs.length);i++){ segQS+=rsi_segs[i].replace(/.*_(.*)/,"rsi=$1;"); } adSetOthDclk(segQS); } } }

var glbWtLastAccess = new Date();
var glbCookieExpireTime = new Date();
glbCookieExpireTime.setTime((glbCookieExpireTime.getTime() + 1000*60*60*24*365*2));
glbDebugMode = false;

function flace(id,w,h){
    var o = document.getElementById(id);
    o.style.width = w+'px';
    o.style.height = h+'px';
    o.style.overflow = 'hidden';
}

//library start
function libDebug() {
    
    var init = function() {

        dc = $ge('jsDebugDomNode');
        if(dc == null || dc == undefined) {
            d = document.createElement('div');
            d.id = 'jsDebugDomNode';
            d.style.display = 'none';
            document.body.appendChild(d);
        }
        glbDebugMode = true;
        return glbDebugMode;
    }

    var writeDebugMsg = function(errLevel,msg) {
        if(!glbDebugMode)
            return false;
        
        dc = $ge('jsDebugDomNode');
        
        p = document.createElement('p');
        p.innerHTML = errLevel+ " : " + msg;
        p.className = errLevel;
        dc.appendChild(p);
        return true;
    }

    return {
        debugInit : function() {return init();},
        logMsg : function(errLvl,msg) {return writeDebugMsg(errLvl,msg);}
    };
}

function libUtil() {

    var calcTimezone = function(tzOffset) {
        var local = new Date();

        // get UTC time in msec
        utc = local.getTime() + (local.getTimezoneOffset() * 60000);

        // create new Date object for different city using supplied offset
        nd = new Date(utc + (3600000*tzOffset));
        // return time as a string
        return nd;
    }

    var serverName = function() {
        var testBox = "";
        //filter out the dev & qa boxes
        if(location.port != "") {
            var aLoc = window.location.href.split("/");
            var testBox = "/"+aLoc[3];
        }
        
        var name = location.protocol +"//"+ location.host + testBox;

        return name;
    }
    
    var domain = function() {return location.host;}
    
    //set cookie
    var sCookie = function(name, value, exp_y, exp_m, exp_d, path, domain, secure) {
        var cookieString = name + "=" + escape(value);

        if (exp_y) {
            var expires = new Date ( exp_y, exp_m, exp_d );
            cookieString += "; expires=" + expires.toGMTString();
        } else {
            //default cookie expires after 2 years
            cookieString += "; expires=" + glbCookieExpireTime.toGMTString();
        }

        if (path)
            cookieString += "; path=" + escape ( path );

        if (domain)
            cookieString += "; domain=" + escape ( domain );

        if (secure)
            cookieString += "; secure";

        document.cookie = cookieString;
    }
    
    //get Cookie
    var gCookie = function(name) {
          var results = document.cookie.match ( '(^|;) ?' + name + '=([^;]*)(;|$)' );

          if (results)
            return (unescape(results[2]));
          else
            return null;
    }
    
    var readTime = function(format,sep,date) {
        var d = date;
        var retVal = -1;
        var monthNames = new Array("January", "February", "March","April", "May", "June", "July", "August", "September","October", "November", "December");
        var dayNames = new Array("Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday");
        
        if (format == undefined)
            ft = 'w';
        else
            ft = format;
            
        if (sep == undefined)
            sc = '/';
        else
            sc = sep;
        
        if(d == undefined)
            d = new Date();

        switch(ft) {
            case 'h': //12 hr format in am/pm
                retVal = d.getHours();
                if(retVal>12)
                    retVal = parseInt(retVal-12)+ ' pm'; 
                else{
					if(retVal < 10){
                    retVal = '0'+retVal + ' am';}
					else{
						retVal = retVal + ' am';
					}
				}
                break;
            case 'H': //24 hr format
                retVal = d.getHours();
                break;
            case 'm': //minute
                if(d.getMinutes() < 10) {
                    temp = d.getMinutes();
                    retVal = '0'+temp;
                } else
                    retVal = d.getMinutes();
                break;
            case 's': //seconds
                retVal = d.getSeconds();
                break;
            case 'H:m:s': //24hour:min:sec
                retVal = d.getHours()+sc+d.getMinutes()+sc+d.getSeconds();
                break;
            case 'h:m:s': //12hour:min:sec + am/pm
                if(d.getHours() <= 12)
                    retVal = '0'+d.getHours()+sc+d.getMinutes()+sc+d.getSeconds()+' am';
                else
                    retVal = parseInt(d.getHours()-12)+sc+d.getMinutes()+sc+d.getSeconds()+' pm';
                break;
            case 'h:m': //12hour:min + am/pm
                if(d.getHours() <= 12){
                    if(d.getHours() == 0)
                        retVal = '12'+sc+d.getMinutes()+' am';
                    else if(d.getHours() > 0 && d.getHours() < 10)
                        retVal = '0'+d.getHours()+sc+d.getMinutes()+' am';
					else
					   retVal = d.getHours()+sc+d.getMinutes()+' am';
				}
                else {
                    retVal = parseInt(d.getHours()-12)+sc+$time('m','',d)+' pm';
                }
                break;
            case 'MM': //Month Name
                retVal = monthNames[d.getMonth()];
                break;
            case 'DD': //Date number
                retVal = d.getDate();
                break;
            case 'YYYY': //Date number
                retVal = d.getFullYear();
                break;
            case 'W': //Day of week
                retVal = dayNames[d.getDay()];
                break;
            case 'MM:DD': //Month:Date
                mn = parseInt(d.getMonth()+1);
                dt = d.getDate();
                
                if(mn < 10)
                    mn = '0'+mn;
                if(dt < 10)
                    dt = '0'+dt;
                retVal = mn + sc + dt;
                break;
            case 'MMM:DD': //Month(Name):Date
                retVal = monthNames[d.getMonth()]+ sc + d.getDate();
                break;
            case 'MM:DD:YYYY': //Month:Date:Year in digits
                mn = parseInt(d.getMonth()+1);
                dt = d.getDate();
                
                if(mn < 10)
                    mn = '0'+mn;
                if(dt < 10)
                    dt = '0'+dt;
                
                retVal = mn + sc + dt + sc + d.getFullYear();
                break;
            case 'MMM:DD:YYYY': //Month(Name):Date:Year May/24/2008
                dt = d.getDate();
                
                if(dt < 10)
                    dt = '0'+dt;
                retVal = monthNames[d.getMonth()]+ sc + dt + sc + d.getFullYear();
                break;
            case 'w':
            default:
                retVal = d.toString();
                break;
        }
        return retVal;
    }

    return {
        getServerName : function(id) {
            return serverName();
        },
        
        getDomain : function(id) {
            return domain();
        },
        
        setCookie : function(name, value, exp_y, exp_m, exp_d, path, domain, secure) {
            sCookie(name, value, exp_y, exp_m, exp_d, path, domain, secure);
        },
        
        getCookie : function(name) {
            return gCookie(name);
        },
        
        getTime : function(strFormat,sep,date) {
            return readTime(strFormat,sep,date);
        },
        
        convertTimeZone : function(tzOffset) {
            return calcTimezone(tzOffset);
        }
        
    };
    //end return
}
//end libUtil

function libDom() {
    
    var getEventTarget = function(e) {
        var targetElem = null;

        if (e.target) targetElem = e.target;
            else if (e.srcElement) targetElem = e.srcElement;

        if (targetElem.nodeType == 3) // avoid Safari bug
            targetElem = targetElem.parentNode;

        return targetElem; 
    }
    
    var getElement = function(id) {
        var obj = null;
        try {
            obj = document.getElementById(id);
        } catch(e) {
            $log(e,'error');
        }

        return obj;
    }
    
    var getElementsByClass = function(className,node,tag) {
        var elements = new Array();
        if( node == null )
            node = document;
        if(tag == null)
            tag = '*';
        var els = node.getElementsByTagName(tag);
        var elsLen = els.length;
        var pattern = new RegExp("(^|\\s)" + className + "(\\s|$)");
        var hasAtt = false;
        for(i=0,j=0;i<elsLen;i++) {
            if(els[i].nodeType == 1) {
                
                //IE has no support for hasAttribute
                if(document.all) {
                   if (els[i].className.length > 0)
                       hasAtt = true
                } else
                    hasAtt = els[i].hasAttribute('class');

                if(hasAtt) {
                    if (pattern.test(els[i].className)) {
                        elements[j] = els[i];
                        j++;
                    }
                }
            }
        }
        return elements;
    }
    
    var getElementAttributeValById = function(id,attributeName) {
        var attVal = "";
        if($ge(id).hasAttribute(attributeName)) {
            return $ge(id).getAttribute(attributeName);
        }

        return attVal;
    }

    var nodeValue = function (node) {
        var val = "";

        if (node != undefined || node != null){ 
            if(node.nodeValue == null || node.nodeValue == undefined){
                try {
                    val = node.firstChild.nodeValue;
            } catch (e){
                $log(e,'error');
            }
          }
      }
        return val;
    }

    var glueEvent = function(obj, eventName, eventHandlerFunctionName) {
		if (obj.addEventListener) { // Non-IE browsers
		
                obj.addEventListener(eventName, eventHandlerFunctionName, false);
        } else if (obj.attachEvent) { // IE 6+
                obj.attachEvent('on' + eventName, eventHandlerFunctionName)
				
        } else { // Older browsers
            var currentEventHandler = obj['on' + eventName];
            if (currentEventHandler == null) {
                obj['on' + eventName] = eventHandlerFunctionName;
            } else {
                obj['on' + eventName] = function(e) { currentEventHandler(e); eventHandlerFunctionName(e); }
            }
        }
    }

    var stopDefaultAction = function(e) {
        if (window.event){
            e.returnValue = false;
            e.cancelBubble = true;
        } 
        else {
            e.stopPropagation();
            e.preventDefault();
        }
    }
    
    var getPos = function(obj) {
        var curleft = curtop = 0;
        curleft = $posX(obj);
        curtop = $posY(obj);
        return [curleft,curtop];
    }

    var posY = function(ele) {
        var pY = 0;
        while(ele != null) {
            pY += ele.offsetTop;
            ele = ele.offsetParent;
        }
        return pY;
    }
    
    var posX = function(ele) {
        var pX = 0;
        while(ele != null) {
            pX += ele.offsetLeft;
            ele = ele.offsetParent;
        }
        return pX;
    }

    return {
        
        $ge : function(id) {
            return getElement(id);
        },
        
        getElementsByClassName : function(className,node,tag) {
            return getElementsByClass(className,node,tag);
        },
        
        getElementAttributeVal : function(id,attributeName) {
            return getElementAttributeValById(id,attributeName);
        },
        
        cancelDefaultAction : function(e) {
            stopDefaultAction(e);
        },
        
        attachElementEvent : function(obj, eventName, eventHandlerFunctionName) {
            glueEvent(obj, eventName, eventHandlerFunctionName);
        },
        
        getNodeValue : function(obj) {
            return nodeValue(obj);
        },
        
        eventTarget : function(e) {
            return getEventTarget(e);
        },
        
        findPos : function(obj) {
            return getPos(obj);
        },
        
        getX : function(obj) {
            return posX(obj);
        },

        getY : function(obj) {
            return posY(obj);
        }
    };
    //end return
}
//end libDom

//event funtions
String.prototype.trim = function () { 
    return this.replace(/^\s*/, "").replace(/\s*$/, ""); 
}
String.prototype.stripSpaces = function( ){ return this.replace( /\s/g, "&nbsp;" ); };
String.prototype.stripSpace = function( ){ return this.replace( /\s/g, "" ); };
//instantiate libs
var glbUtilObj = new libUtil();
var glbDomObj = new libDom();
var glbDebugObj = new libDebug();
//export common functions
var $ge = glbDomObj.$ge;
var $geClass = glbDomObj.getElementsByClassName;
var $ate = glbDomObj.attachElementEvent;
var $et = glbDomObj.eventTarget; 
var $pos =  glbDomObj.findPos;
var $posX = glbDomObj.getX;
var $posY = glbDomObj.getY;
var $setCookie = glbUtilObj.setCookie;
var $getCookie = glbUtilObj.getCookie;
var $time = glbUtilObj.getTime;
var $debugStart = glbDebugObj.debugInit;
var $log = glbDebugObj.logMsg;
