/*
 * =~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=
 * MapQuest Helpsite Global JavaScript
 * =~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=
 * common js for the help site
 * =~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=
 *
 */


/**
 * =DEFAULT VARIABLES
 */
document.cookie = "JSEnabled=1"; //needed to make sure browser has JS on

/**
 * =GET ELEMENT BY ID
 */
function getElementById(fId)
{
    if(fId && document.getElementById(fId))
    {
        return document.getElementById(fId);
    }
    return null;
} //getElementById(fId)

/**
 * =ADD EVENT
 * @attach event listener
 */
function addEvent(fObj, fEvent, fn)
{
    if(window.opera && getBrowserInfo().version < 8)
    {   // opera has bad dynamic event handling
        //eval("fObj.on" + fEvent + " = fn");
        var r = fObj.attachEvent("on"+fEvent, fn);
        return r;
    }
    else if (fObj.addEventListener)
    {   // moz, w3c
        ((window.opera) && (getBrowserInfo().version >= 8))?fObj.addEventListener(fEvent, fn, false):fObj.addEventListener(fEvent, fn, true);
        return true;
    }
    else if (fObj.attachEvent)
    {   // IE
        var r = fObj.attachEvent("on"+fEvent, fn);
        return r;
    }
    else
    {   //other
        fObj["on" + fEvent] = fn;
    }
}//addEvent()

/**
 * =REMOVE EVENT
 * @detach event listener
 */
function removeEvent(fObj, fEvent, fn)
{
    if(window.opera)
    {   // opera has bad dynamic event handling
        eval("fObj.on" + fEvent + " = null");
    }
    if(fObj.removeEventListener)
    {   //w3c
        ((window.opera) && (getBrowserInfo().version >= 8))?fObj.removeEventListener(fEvent, fn, false):fObj.removeEventListener(fEvent, fn, true);
    }
    else if(fObj.detachEvent)
    {   //ie
        fObj.detachEvent("on" + fEvent, fn);
    }
    else
    {   //opera and other
        fObj["on" + fEvent] = null;
    }
} //removeEvent()

/**
 * =SET COOKIE
 * @set fValue of cookie
 */
function setCookie(fName, fValue, fTime)
{
    var fExp        = "";
    var fDomain     = (mqDomain) ? mqDomain : "";
    if (fTime)
    {
        var fDate   = new Date();
        fDate.setTime((fTime * 60 * 60 * 24 * 1000) + fDate.getTime());// # of days
        fExp        = fDate.toGMTString();

    }
    document.cookie = fName + "=" + fValue + ";domain="  + fDomain + ";path=/;expires=" + fExp;
}

/**
 * =READ COOKIE
 * @read value of cookie
 */
function readCookie(fName)
{
    var cookieName      = fName + "=";
    var cookieArray     = document.cookie.split(';');
    for(var i = 0, n = cookieArray.length; i < n; i++)
    {
        var cookie = cookieArray[i];
        while (cookie.charAt(0) == ' ')
        {
            cookie = cookie.substring(1, cookie.length);
        }
        if (cookie.indexOf(cookieName) == 0)
        {
            return cookie.substring(cookieName.length, cookie.length);
        }
    }
    return null;
} //readCookie()

/**
 * =DELETE COOKIE
 * @remove value of cookie
 */
function deleteCookie(fName)
{
    setCookie(fName, "", -1)
} //deleteCookie()

function showCookieMsg()
{
    if(readCookie("JSEnabled") == null)
    {
    	  getElementById("nocookiemsg").style.display = "block";
    }
}

/**
 * =NEW WINDOW POP-UP
 * @usage: URL is only required param
 * @url, window name, width, height, scrollbars (yes,no), center (true,false)
 * @<a href="http://mapquest.com" onclick="newWin(this.href,'name','400','400','no', true);return false;">link</a>
 * @<a href="javascript: newWin('http://mapquest.com','name','400','400','no', true);">link</a>
 */
function newWin(fPage, fName, fWidth, fHeight, fScroll, fCenter)
{
    if(paramExists(fPage) == false)
    {   // no url to open
        return;
    }
    if(paramExists(fName) == false)
    {   // if no name, create one
        var fName = "newWin"+ Math.random();
    }
    if(paramExists(fScroll) == false)
    {   // scrollbar defaults to 'yes'
        var fScroll = "yes";
    }
    if((paramExists(fCenter) == false) || (fCenter == false))
    {   // auto-center defaults to "false"
        var winl = wint = 10;
    }
    else if (fCenter == true)
    {
        var winl = (screen.width - fWidth) / 2;
        var wint = (screen.height - fHeight) / 2;
    }
    if(paramExists(fWidth) == false)
    {   // default width
        var fWidth = 250;
    }
    if(paramExists(fHeight) == false)
    {   // default height
        var fHeight = 600;
    }
    var winprops = 'height='+fHeight+',width='+fWidth+',top='+wint+',left='+winl+',scrollbars='+fScroll+',directories=no,resizable=yes';
    win = window.open(fPage, fName, winprops);
    if (parseInt(navigator.appVersion) >= 4)
    {
        win.window.focus();
    }
}// newWin()

/**
 * =PARAM EXISTS
 * @validate variables
 */
function paramExists(varname)
{
    if (typeof varname != 'undefined')
    {
        return true;
    }
    return false;
}// paramExists()

/**
 * =GET XY
 * @get the XY coordinates
 * @returns an array containing the event target id, and xy data for page and target
 */
function getXY(evt)
{
    xyData = new Object();
    if(!document.createElement || !document.getElementsByTagName) return;
    if(!document.createElementNS)
    {   // to work in html and xml namespaces
        document.createElementNS = function(ns,elt)
        {
            return document.createElement(elt);
        }
    }
    if(document.addEventListener && typeof evt.pageX == "number")
    {   // Moz and Opera
        var Element                     = evt.target;
        var CalculatedTotalOffsetLeft   = CalculatedTotalOffsetTop = 0;
        while(Element.offsetParent)
        {
            CalculatedTotalOffsetLeft   += Element.offsetLeft;
            CalculatedTotalOffsetTop    += Element.offsetTop;
            Element                      = Element.offsetParent;
        }
        var OffsetXForNS6   = evt.pageX - CalculatedTotalOffsetLeft;
        var OffsetYForNS6   = evt.pageY - CalculatedTotalOffsetTop;
        xyData.elementId    = evt.target.id;
        xyData.elementX     = OffsetXForNS6;
        xyData.elementY     = OffsetYForNS6;
        xyData.pageX        = evt.pageX;
        xyData.pageY        = evt.pageY;
    }
    else if(window.event && typeof window.event.offsetX == "number")
    {   //ie
        xyData.elementId    = window.event.srcElement.id;
        xyData.elementX     = event.offsetX;
        xyData.elementY     = event.offsetY;
        xyData.pageX        = 0;
        xyData.pageY        = 0;
        var element         = getElementById(xyData.elementId);
        while(element)
        {
            xyData.pageX += element.offsetLeft;
            xyData.pageY += element.offsetTop;
            element = element.offsetParent;
        }
        xyData.pageX += xyData.elementX;
        xyData.pageY += xyData.elementY;
    }
    return xyData;
}//getXY()

/**
 * =GET BROWSER INFO
 */
function getBrowserInfo()
{
    browser                 = new Object();
    browser.name            = browser.version = browser.os = "unknown";
    var userAgent           = navigator.userAgent.toLowerCase();
    var browserListArray    = new Array("firefox", "msie", "netscape", "opera", "safari");
    var osListArray         = new Array("linux", "mac", "windows", "x11");
    for(var i = 0, n = browserListArray.length; i < n; i++)
    {   // get browser name and version
        var strPosition = userAgent.indexOf(browserListArray[i]) + 1;
        if(strPosition > 0)
        {
            browser.name = browserListArray[i]; // browser name

            var versionPosition = strPosition + browser.name.length;
            var incr = ((browser.name == "safari") || (userAgent.charAt(versionPosition + 4) > 0 && userAgent.charAt(versionPosition + 4) < 9)) ? 5 : 3;

            browser.version     = userAgent.substring(versionPosition, versionPosition + incr); // browser version
        }
    }
    for(var i = 0, n = osListArray.length; i < n; i++)
    {
        var strPosition = userAgent.indexOf(osListArray[i]) + 1;
        if(strPosition > 0)
        {
            browser.os  = osListArray[i];
        }
    }

    return browser;

} //getBrowserInfo()

/**
 * =GET BROWSER SIZE
 * @get height and width of browser canvas
 */
function getBrowserSize()
{
    size = new Object();
    if (document.body.scrollHeight > document.body.offsetHeight)
    {
        size.width  = document.body.scrollWidth;
        size.height = document.body.scrollHeight;
    }
    else
    {
        size.width  = document.body.offsetWidth;
        size.height = document.body.offsetHeight;
    }
    if (document.body.clientWidth)
    {
        size.width  = document.body.clientWidth;
        size.height = document.body.clientHeight;
    }
    else
    {
        size.width  = document.body.offsetWidth;
        size.height = document.body.offsetHeight;
    }
    if (document.documentElement.clientWidth)
    {   // IE6, safari, opera
        size.width  = document.documentElement.clientWidth;
        size.height = document.documentElement.clientHeight;
    }
    if(self.innerWidth)
    {
        size.width  = self.innerWidth;
        size.height = self.innerHeight;
    }
    return size;
} //getBrowserSize()

/**
 * =GET BROWSER VERSION
 * @old browser version detection used throughout the site
 */
function getBrowserVersion()
{
    var browserVer;
    var offset, offset2;

    var retData = new Array();

    retData.mozillaVersion = parseInt(navigator.appVersion);
    retData.browserName = navigator.appName;
    retData.ua = navigator.userAgent;
    if(retData.browserName == "Microsoft Internet Explorer")
    {
        offset = retData.ua.indexOf("MSIE ");
        retData.browserName2 = retData.ua.substring(offset, retData.ua.indexOf(" ", offset));
        retData.browserVer = parseFloat(retData.ua.substring(offset + 5, retData.ua.indexOf(";", offset)));
        browserVer = parseFloat(retData.ua.substring(offset + 5, retData.ua.indexOf(";", offset)));
    }
    else if(retData.browserName == "Netscape")
    {
        browserVer = parseInt(navigator.appVersion);
        offset = retData.ua.indexOf("Netscape");
        if(offset < 0)
            offset = retData.ua.indexOf("Firefox");
        if(offset < 0)
            offset = retData.ua.indexOf("Safari");
        retData.browserName2 = retData.ua.substring(offset, retData.ua.indexOf("/", offset));
        offset = retData.ua.indexOf("/",offset);
        offset2 = retData.ua.indexOf(" ", offset);
        if(offset2 >= 0)
            retData.browserVer = parseFloat(retData.ua.substring(offset + 1, retData.ua.indexOf(" ", offset)));
        else
            retData.browserVer = parseFloat(retData.ua.substring(offset + 1));
    }
    else
    {
        retData.browserName2 = "unknown";
        retData.browserVer = 0;
        browserVer = parseInt(navigator.appVersion);
    }
    if(retData.ua.indexOf("Windows") >= 0)
        retData.platform = "Windows";
    else if(retData.ua.indexOf("Macintosh") >= 0)
        retData.platform = "Macintosh";
    else if(retData.ua.indexOf("Linux") >= 0)
        retData.platform = "Linux";
    else
        retData.platform = "Unknown";
    return retData;
} //getBrowserVersion()

/**
 * TRIM A STRING - Trim the leading & trailing whitespaces
 */
function trimString(str) {
	if(str == null) {
		return str;
	}
	while (str.substring(0,1) == ' ') {
		str = str.substring(1, str.length);
	}
	while (str.substring(str.length-1, str.length) == ' ') {
		str = str.substring(0, str.length-1);
	}
	return str;
}

/**
 * Returns the value of the given radio
 */
function getRadioVal(radio) {
	for (var i=0; i < radio.length; i++) {
		if (radio[i].checked) {
			return radio[i].value;
		}
	}
}
