// JScript File
    
    //The part of the text to compare in order to decide if the referral is trusted or not.
    //Must be in the form of a string array to allow for multiple referrers.
    //On the Spanish site, the value "http://homebuyereducation.bankofamerica.com" must be included in
    //in place of "http://mihogar.bankofamerica.com".
    var trustedURL = ["localhost","homebuyereducation.bankofamerica.com", "mihogar.bankofamerica.com","129.41.28.212","mlo.informationlogix.com","mortgage.bankofamerica.com"];

    
    //The value to return if a querystring name is not passed.
    var defaultNoQueryStringValue = "[no param]";
    //The querystring name used for the eighthundred number
    var eightHundredNumberQueryStringParam = "no";
    
    //The default 800number
    var default800NumberValue = "1.888.446.6390";
    
    //Variable used to store the current 80 number
    var eightHunderdNumber =  "";
    //The div/span used to store the 800Number
    var eightHunderdNumberDivName =  "eightHundredDiv";
    var eightHunderdNumberClassName = "eightHundredClass";
    //Variable representing the current domain. This is done to check if the request is done from the same domain.
    var countrywideDomain = "http://homebuyereducation.bankofamerica.com";
    //The name of the cookie used to represent if the user came from a trusted HLC site.
    var cookieName = "HLCMode"
    
   
    // Displays the referral in an alert. Used for debugging purposes.
    function displayReferrer()
    { 
        alert(document.referrer);       
    }
    
    // Returns the value of the query string param or the value of the defaultNoQueryStringValue variable.
    function getQueryVariable(variable) 
    { 
        var query = window.location.search.substring(1); 
        var vars = query.split("&"); 
        for (var i=0;i<vars.length;i++) 
        { 
            var pair = vars[i].split("="); 
            if (pair[0] == variable) 
            { 
                return pair[1].replace(/\%20/g, " "); 
            } 
        }                
        
        //Param not found. Return empty string
        return defaultNoQueryStringValue;
    } 

    function stripQueryString(path)
    {
        if (path.indexOf("?") >= 0)
	    return path.substring(0,path.indexOf("?"));
        else
            return path;
    }

    function getQueryStringWith800Number()
    {
        if (window.location.search.length > 0)
        {
            var query = window.location.search.substring(1); 
            var vars = query.split("&"); 
            var retVal = "?";
            for (var i=0;i<vars.length;i++) 
            { 
                var pair = vars[i].split("="); 
                if (pair[0] != "no") 
                { 
                    retVal += vars[i]+"&"; 
                } 
            }
            retVal += "no="+eightHunderdNumber;
            return retVal;
        }
	else if (eightHunderdNumber != defaultNoQueryStringValue)
	    return "?no="+eightHunderdNumber;
        else
            return "";
    }
    
    String.prototype.rtrim = function() {
	    return this.replace(/\s+$/,"");
    }   
    
    //Returns the 800Number from the querystring.
    function get800Number()
    {
	
	var phoneNumberRegExp = new RegExp(/(\d{0,1})[^\d]*(\d\d\d)[^\d]*(\d\d\d)[^\d]*(\d\d\d\d)(.*)/);  
        eightHunderdNumber = getQueryVariable(eightHundredNumberQueryStringParam);
        eightHunderdNumber = eightHunderdNumber.rtrim();
        
        if (eightHunderdNumber == defaultNoQueryStringValue )               
            eightHunderdNumber = default800NumberValue;
	else
	{
	    var m = phoneNumberRegExp.exec(eightHunderdNumber);
	    if (m != null)
	    {
		eightHunderdNumber = "1";
	        for (i = 2; i < m.length; i++) 
		{
		    if (i == 5)
		    {
		    	eightHunderdNumber += " "+m[i];	
		    }
		    else
			eightHunderdNumber += "."+m[i];
    	        }
	    }
	}
	    eightHunderdNumber = eightHunderdNumber.rtrim();
        return eightHunderdNumber;
    }
    
 
    
    // Checks if the referral is trusted or not.
    // If the referral contains the value of the global variable 'trustedURL' then it is trusted.
    function isReferrerTrusted(ReferrerUrl)
    {                
        ReferrerUrl = ReferrerUrl.toLowerCase();
        
	for (var i=0;i<trustedURL.length;i++) 
        { 
	    // leave room for http:// or https://, so check that the trusted URLs without protocols start <= 8 characters in
	    var refIndex = ReferrerUrl.indexOf(trustedURL[i].toLowerCase());
	    if ( refIndex >= 0 && refIndex <=8  )
	    {
	        return true;
	    }
	}

            return false;
    }    
     
    // Checks if the referral is from the same domain.
    // If the referral contains the value of the global variable 'countrywideDomain' then it is from the countrywide domain.
    function isFromCountryWideDomain(Url)
    {                
        Url = Url.toLowerCase();
        countrywideDomain =  countrywideDomain.toLowerCase();                
                   
        if ( Url.indexOf(countrywideDomain) >=0 ||  Url == '')
        {
            return true;
        }
		else
		{
			return false;
	    }
    }
    
    //Populates the div with having the name stored in the 'eightHunderdNumberDivName' variable.
    function showEightHundredNumber(number)
    {
        var eightHundredDiv = document.getElementById(eightHunderdNumberDivName);
        if (eightHundredDiv != null)
            eightHundredDiv.innerHTML = number + " ";
        var classInstances = getElementsByClassName(eightHunderdNumberClassName);
        for (var i=0; i<classInstances.length;i++) {
            classInstances[i].innerHTML = number + " ";
        }
    }

/*
	Developed by Robert Nyman, http://www.robertnyman.com
	Code/licensing: http://code.google.com/p/getelementsbyclassname/
*/
var getElementsByClassName = function (className, tag, elm){
	if (document.getElementsByClassName) {
		getElementsByClassName = function (className, tag, elm) {
			elm = elm || document;
			var elements = elm.getElementsByClassName(className),
				nodeName = (tag)? new RegExp("\\b" + tag + "\\b", "i") : null,
				returnElements = [],
				current;
			for(var i=0, il=elements.length; i<il; i+=1){
				current = elements[i];
				if(!nodeName || nodeName.test(current.nodeName)) {
					returnElements.push(current);
				}
			}
			return returnElements;
		};
	}
	else if (document.evaluate) {
		getElementsByClassName = function (className, tag, elm) {
			tag = tag || "*";
			elm = elm || document;
			var classes = className.split(" "),
				classesToCheck = "",
				xhtmlNamespace = "http://www.w3.org/1999/xhtml",
				namespaceResolver = (document.documentElement.namespaceURI === xhtmlNamespace)? xhtmlNamespace : null,
				returnElements = [],
				elements,
				node;
			for(var j=0, jl=classes.length; j<jl; j+=1){
				classesToCheck += "[contains(concat(' ', @class, ' '), ' " + classes[j] + " ')]";
			}
			try	{
				elements = document.evaluate(".//" + tag + classesToCheck, elm, namespaceResolver, 0, null);
			}
			catch (e) {
				elements = document.evaluate(".//" + tag + classesToCheck, elm, null, 0, null);
			}
			while ((node = elements.iterateNext())) {
				returnElements.push(node);
			}
			return returnElements;
		};
	}
	else {
		getElementsByClassName = function (className, tag, elm) {
			tag = tag || "*";
			elm = elm || document;
			var classes = className.split(" "),
				classesToCheck = [],
				elements = (tag === "*" && elm.all)? elm.all : elm.getElementsByTagName(tag),
				current,
				returnElements = [],
				match;
			for(var k=0, kl=classes.length; k<kl; k+=1){
				classesToCheck.push(new RegExp("(^|\\s)" + classes[k] + "(\\s|$)"));
			}
			for(var l=0, ll=elements.length; l<ll; l+=1){
				current = elements[l];
				match = false;
				for(var m=0, ml=classesToCheck.length; m<ml; m+=1){
					match = classesToCheck[m].test(current.className);
					if (!match) {
						break;
					}
				}
				if (match) {
					returnElements.push(current);
				}
			}
			return returnElements;
		};
	}
	return getElementsByClassName(className, tag, elm);
};
    
    //If the call is from the countryWide domain, then check if the cookie exists. If it exists, then cinsider the
    //hlc trusted, or else its untrusted.
    function interDomainCall()
    {
        if ( readCookie(cookieName) != null )
            {
                eightHunderdNumber = readCookie(cookieName);
                eightHunderdNumber = eightHunderdNumber.rtrim();
                if (eightHunderdNumber != default800NumberValue)
                {
                    showTrustedContent();
                    } 
                else
                    showUnTrustedContent();                
            }
            else
                showUnTrustedContent();                   
                   
            showEightHundredNumber(eightHunderdNumber);        
            
    }
    
    // Shows the result of the operation which checks if the referral is trusted or not.
    function process()
    {                
        eightHunderdNumber = default800NumberValue;
        if ( isFromCountryWideDomain(document.referrer) )
	{
            interDomainCall();
	}
        else
        {
            if ( isReferrerTrusted(document.referrer) )
            {
               get800Number();
               createCookie(cookieName,eightHunderdNumber,1);
               if (eightHunderdNumber != default800NumberValue)
                   showTrustedContent();
               else 
                   showUnTrustedContent();
            }
            else
            {
		interDomainCall();
                //eraseCookie(cookieName);
                //showUnTrustedContent();            
            }
            
            showEightHundredNumber(eightHunderdNumber);            
        }
    }
    
    // Shows the trusted header and footer.
    function showTrustedContent()
    {
   
        var header = document.getElementById("bacContactHeaderLink");
        if (header != null)
            header.style.display  = "none";
        
        var footer = document.getElementById("bacContactFooterLink");
        if (footer != null)
            footer.style.display  = "none";
    }
    
    // Shows the untrusted header and footer.
    function showUnTrustedContent()
    {
        var header = document.getElementById("bacContactHeaderLink");
        if (header != null)
            header.style.display  = "";
        
        var footer = document.getElementById("bacContactFooterLink");
        if (footer != null)
            footer.style.display  = "";
    }
    
    // Removes any dangerous tags used for CrossSite Scripting
    function removeHTMLTags(strInputCode)
    {
    	strInputCode = strInputCode.replace(/&(lt|gt);/g, function (strMatch, p1){return (p1 == "lt")? "&lt;" : ">";});
 		var strTagStrippedText = strInputCode.replace(/&lt;\/?[^>]+(>|$)/g, "");
 		return strTagStrippedText;	   
 	}	

    // new prototype defintion
    document.include = function (url) 
    {
        if ('undefined' == typeof(url)) return false;
        var p,rnd;

        if (document.all)
        {
            // For IE, create an ActiveX Object instance 
            p = new ActiveXObject("Microsoft.XMLHTTP");
        } 
        else 
        {
            // For mozilla, create an instance of XMLHttpRequest.
            p = new XMLHttpRequest();
        }
        
        // Prevent browsers from caching the included page by appending a random  number
        rnd = Math.random().toString().substring(2);
        url = url.indexOf('?')>-1 ? url+'&rnd='+rnd : url+'?rnd='+rnd;

        // Open the url and write out the response
        p.open("GET",url,false);
        p.send(null);
        document.write( p.responseText );
    }
    
    //Creates a cookie.
    function createCookie(name,value,days) 
    {
	    if (days) 
	    {
		    var date = new Date();
		    date.setTime(date.getTime()+(days*24*60*60*1000));
		    var expires = "; expires="+date.toGMTString();
	    }
	    else var expires = "";
	    document.cookie = name+"="+value+expires+"; path=/";
    }

    //Returns the value of a cookie.
    function readCookie(name) 
    {
	    var nameEQ = name + "=";
	    var ca = document.cookie.split(';');
	    for(var i=0;i < ca.length;i++) {
		    var c = ca[i];
		    while (c.charAt(0)==' ') c = c.substring(1,c.length);
		    if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
	    }
	    return null;
    }

    //Deletes a cookie.
    function eraseCookie(name) 
    {
	    createCookie(name,"",-1);
    }

 
