// go to hrblock.com immediately for these sites
if (document.location.hostname.indexOf("unitedstates") != -1)
{
    document.location.replace("http://www.hrblock.com/index.html");
}

var g_testing               = false;

var g_partner_id_from_url   = "";               // otpPartnerId in url 
var g_pgm_id_from_url       = "";               // pgm id   in url 

var g_partner_id_from_cookie     = "";               // otpPartnerId in cookie
var g_pgm_id_cooie          = "";               // pgm id       in cookie

var g_partner_id_default    = "";               // otpPartnerId if not in url or cookie
var g_pgm_id_default        = "";               // pgm id       if not in url or cookie

var g_use_this_partner_id   = "";               // otpPartnerId we determine we should use
var g_use_this_pgm_id       = "";               // pgm id       we determine we should use

var g_curr_query_names      = new Array();      // array of names  in the current url
var g_curr_query_values     = new Array();      // array of values in the current url

var secondLevelDomain_browser   = "";
var secondLevelDomain_JSON      = "";

var currentHost             = "";

/* 
Default Partner Id Lookup 
If partner id isn't passed in the url, look up the default id to use for this state.
*/
var stateListStr = '{statelist:'+
'['+
'{"url":"http://californiaincometaxes.com","attr":[{"s":"California","id":"3354","pgm":"48904300"}]},'+
'{"url":"http://newyorkincometaxes.com","attr":[{"s":"New York","id":"3355","pgm":"48904400"}]},'+
'{"url":"http://ohioincometaxes.com","attr":[{"s":"Ohio","id":"3356","pgm":"48904500"}]},'+
'{"url":"http://georgiaincometaxes.com","attr":[{"s":"Georgia","id":"3357","pgm":"48904600"}]},'+
'{"url":"http://illinoisincometaxes.com","attr":[{"s":"Illinois","id":"3358","pgm":"48904700"}]},'+
'{"url":"http://louisianaincometaxes.com","attr":[{"s":"Louisiana","id":"3359","pgm":"48904800"}]},'+
'{"url":"http://newjerseyincometaxes.com","attr":[{"s":"New Jersey","id":"3360","pgm":"48904900"}]},'+
'{"url":"http://coloradoincometaxes.com","attr":[{"s":"Colorado","id":"3361","pgm":"48905000"}]},'+
'{"url":"http://indianaincometaxes.com","attr":[{"s":"Indiana","id":"3362","pgm":"48905100"}]},'+
'{"url":"http://marylandincometaxes.com","attr":[{"s":"Maryland","id":"3363","pgm":"48905200"}]},'+
'{"url":"http://michiganincometaxes.com","attr":[{"s":"Michigan","id":"3364","pgm":"48905300"}]},'+
'{"url":"http://northcarolinaincometaxes.com","attr":[{"s":"North Carolina","id":"3365","pgm":"48905400"}]},'+
'{"url":"http://delawareincometaxes.com","attr":[{"s":"Delaware","id":"3366","pgm":"48905500"}]},'+
'{"url":"http://missouriincometaxes.com","attr":[{"s":"Missouri","id":"3367","pgm":"48905600"}]},'+
'{"url":"http://arizonaincometaxes.com","attr":[{"s":"Arizona","id":"3368","pgm":"48905700"}]},'+
'{"url":"http://pennsylvaniaincometaxes.com","attr":[{"s":"Pennsylvania","id":"3369","pgm":"48905800"}]},'+
'{"url":"http://alabamaincometaxes.com","attr":[{"s":"Alabama","id":"3370","pgm":"48905900"}]},'+
'{"url":"http://wisconsinincometaxes.com","attr":[{"s":"Wisconsin","id":"3371","pgm":"48906000"}]},'+
'{"url":"http://oklahomaincometaxes.com","attr":[{"s":"Oklahoma","id":"3372","pgm":"48906100"}]},'+
'{"url":"http://massachusettsincometaxes.com","attr":[{"s":"Massachusetts","id":"3373","pgm":"48906200"}]},'+
'{"url":"http://minnesotaincometaxes.com","attr":[{"s":"Minnesota","id":"3374","pgm":"48906300"}]},'+
'{"url":"http://tennesseeincometaxes.com","attr":[{"s":"Tennessee","id":"3375","pgm":"48906400"}]},'+
'{"url":"http://oregonincometaxes.com","attr":[{"s":"Oregon","id":"3376","pgm":"48906500"}]},'+
'{"url":"http://kansasincometaxes.com","attr":[{"s":"Kansas","id":"3377","pgm":"48906600"}]},'+
'{"url":"http://arkansasincometaxes.com","attr":[{"s":"Arkansas","id":"3378","pgm":"48906700"}]},'+
'{"url":"http://iowaincometaxes.com","attr":[{"s":"Iowa","id":"3379","pgm":"48906800"}]},'+
'{"url":"http://mississippiincometaxes.com","attr":[{"s":"Mississippi","id":"3380","pgm":"48906900"}]},'+
'{"url":"http://utahincometaxes.com","attr":[{"s":"Utah","id":"3381","pgm":"48907000"}]},'+
'{"url":"http://kentuckyincometaxes.com","attr":[{"s":"Kentucky","id":"3382","pgm":"48907100"}]},'+
'{"url":"http://southcarolinaincometaxes.com","attr":[{"s":"South Carolina","id":"3383","pgm":"48907200"}]},'+
'{"url":"http://hawaiiincometaxes.com","attr":[{"s":"Hawaii","id":"3384","pgm":"48907300"}]},'+
'{"url":"http://newmexicoincometaxes.com","attr":[{"s":"New Mexico","id":"3385","pgm":"48907400"}]},'+
'{"url":"http://connecticutincometaxes.com","attr":[{"s":"Connecticut","id":"3386","pgm":"48907500"}]},'+
'{"url":"http://idahoincometaxes.com","attr":[{"s":"Idaho","id":"3387","pgm":"48907600"}]},'+
'{"url":"http://nebraskaincometaxes.com","attr":[{"s":"Nebraska","id":"3388","pgm":"48907700"}]},'+
'{"url":"http://maineincometaxes.com","attr":[{"s":"Maine","id":"3389","pgm":"48907800"}]},'+
'{"url":"http://unitedstatesincometax.com/","attr":[{"s":"United States 1","id":"0","pgm":""}]},'+
'{"url":"http://unitedstateincometaxes.com","attr":[{"s":"United States 2","id":"0","pgm":""}]},'+
'{"url":"http://montanaincometaxes.com","attr":[{"s":"Montana","id":"3390","pgm":"48907900"}]},'+
'{"url":"http://rhodeislandincometaxes.com","attr":[{"s":"Rhode Island","id":"3391","pgm":"48908000"}]},'+
'{"url":"http://vermontincometaxes.com","attr":[{"s":"Vermont","id":"3392","pgm":"48908100"}]},'+
'{"url":"http://districtofcolumbiaincometaxes.com","attr":[{"s":"Washington DC","id":"3393","pgm":"48908200"}]},'+
'{"url":"http://newhampshireincometaxes.com","attr":[{"s":"New Hampshire","id":"3394","pgm":"48908300"}]},'+
'{"url":"http://northdakotaincometaxes.com","attr":[{"s":"North Dakota","id":"3395","pgm":"48908400"}]},'+
'{"url":"http://westvirginiaincometaxes.com","attr":[{"s":"West Virginia","id":"3396","pgm":"48908500"}]},'+
'{"url":"http://virginiaincometaxes.com","attr":[{"s":"Virgina","id":"3397","pgm":"48908600"}]}'+
']}';

var stateListJson = eval('('+stateListStr+')');

var stateListSize = stateListJson.statelist.length;

function getJsonSecondLevelDomains()
{
    var domainResults = "";

    for (var i=0; i<stateListSize; i++)
    {   
        secondLevelDomain_JSON = stateListJson.statelist[i].url;
        secondLevelDomain_JSON = getSecondLevelDomain(secondLevelDomain_JSON);

        domainResults += secondLevelDomain_JSON + "\r\n";

    }
    return domainResults;
}

function getDefaultInfo(strInfoToGet)
{
    //
    // Information not received in the URL will be retrieved from default values in the JSON structure
    //
    
    var secondLevelDomain_JSON;

    //
    // Find JSON record for the current browser domain
    //
    for (var i=0; i<stateListSize; i++)
    {   
        secondLevelDomain_JSON = getSecondLevelDomain(stateListJson.statelist[i].url);

        if (secondLevelDomain_JSON == secondLevelDomain_browser)
        {   
            if (strInfoToGet == "id")
            {
                return stateListJson.statelist[i].attr[0].id;
            }
            else if (strInfoToGet == "pgm")
            {
                try 
                {
                    return stateListJson.statelist[i].attr[0].pgm;
                }
                catch (e)
                {
                    // noop
                }
            }
            else
            {
                alert("function getDefaultInfo("+strInfoToGet+"): Invalid parm value '"+strInfoToGet+"'.");
            }
        }
    }

    // For the current browser domain, a match was not found in the JSON data.
    if (strInfoToGet == "id")
    {
        return 0;
    }
    else if (strInfoToGet == "pgm")
    {
        return 0;
    }
    else
    {
        return 0;
    }
}

function getSecondLevelDomain(strHost)
{
    var tempVar = strHost;

    // remove subdomain if present
    if (tempVar.indexOf(".") != tempVar.lastIndexOf("."))
    {
        tempVar = tempVar.substr(tempVar.indexOf(".")+1);
    }

    // remove 'http://' if present
    if (tempVar.indexOf("http://") != -1)
    {
        tempVar = tempVar.substr(tempVar.indexOf("http://")+7);
    }

    // remove 'https://' if present
    if (tempVar.indexOf("https://") != -1)
    {
        tempVar = tempVar.substr(tempVar.indexOf("https://")+8);
    }

    return tempVar;
}

// ********************************************
// function splitQueryString(str)
//
// ONLY CALL THIS FUNCTION ONE TIME PER PAGE LOAD!  It values and stores variables that are assumed by other
// code on the page to contain the original values in the search string.  If you need to split any other
// query string, use splitQueryStringLocal() / getQueryValueLocal() instead!
// ********************************************
function splitQueryString(stringToSplit)
{
    // splits stringToSplit query string into array elements

    g_curr_query_names     = new Array();   // array of names  in the current string being split
    g_curr_query_values    = new Array();   // array of values in the current string being split

    if (stringToSplit.substr(0,1)=="?")
    {
        stringToSplit = stringToSplit.substr(1); // remove leading ? if present
    }
    
    if (stringToSplit.substr(0,1)=="&")
    {
        stringToSplit = stringToSplit.substr(1); // remove leading & if present
    }    

    var pairs       = stringToSplit.split("&");
    var argname     = "";
    var value       = "";

    if (pairs[0]==null || pairs[0]=="")
    {
        g_nvpCount      = 0;
    }
    else
    {
        g_nvpCount      = pairs.length;
    }

    for (var i=0; i<g_nvpCount; i++)
    {
        var pos = pairs[i].indexOf('=');

        if (pos >= 0)
        {
            argname = pairs[i].substring(0,pos);
            value   = pairs[i].substring(pos+1);

            g_curr_query_names[g_curr_query_names.length]     = argname;            
            g_curr_query_values[g_curr_query_values.length]   = unescape(value);
        }
    }
    
    nvp_count   = g_nvpCount;   // required for backward compatibility with office locator code only 
}

function getQueryValue(name)
{
    // returns name/value pair value if parsed in splitQueryString() function else returns null
    var value       = null;
    var lowerName   = name.toLowerCase();

    for (var i=0;i<g_curr_query_names.length;i++)
    {
        if (g_curr_query_names[i].toLowerCase()==lowerName)
        {
            value = g_curr_query_values[i];
            break;
        }
    }
    return value;
}

function setCookie(cookieName, cookieValue)
{
    // setCookie(cookiename", "cookievalue", null, "/");
    // cookiename == arg0
    // cookievalue== arg1
    // expdate    == arg2
    // path       == arg3
    // domain     == arg4
    // secure     == arg5

    // always make cookies specific to the TOP level domain (like hrblock.com, not www.hrblock.com)
    var args    = setCookie.arguments;
    var arglen  = setCookie.arguments.length;

    var expires = (arglen > 2) ? args[2] : null;
    var path    = (arglen > 3) ? args[3] : null;
    //var domain  = (arglen > 4) ? args[4] : null;  // commented out. see below.
    var secure  = (arglen > 5) ? args[5] : false; // true or false not null

    // Call getDomain() so the same named cookie isn't created for both hrblock.com and WWW.hrblock.com.
    // That function returns ".hrblock.com" for "www.hrblock.com", and ".hrblock.com" for "hrblock.com" and
    // null for "testserver:8080", allowing browser to make the determination.
    
    //var domain = getDomain();
    
    //document.cookie = cookieName + "=" + escape (cookieValue)+
    document.cookie = cookieName + "=" + cookieValue+
    ((expires == null) ? ""         : ("; expires=" + getexpirydate(expires))) +
    ((path    == null) ? "; path=/"  : ("; path="   + path))   +
    //((domain  == null) ? ""         : ("; domain=" + domain)) +
    ((secure  == true) ? "; secure" : "");
}

function getCookie(name)
{
    var search = name + "=";
    if (document.cookie.length > 0)
    {
        // if there are any cookies
        offset = document.cookie.indexOf(search);
        if (offset != -1)
        {   // cookie exists
            offset += search.length;

            // set index of beginning of value
            end = document.cookie.indexOf(";", offset);

            // set index of end of cookie value
            if (end == -1)
            {   end = document.cookie.length;
            }
            return unescape(document.cookie.substring(offset, end));
        }
        else
        {
            return null;
        }
    }
    else
    {
        return null;
    }
}

function onloadProcessing()
{
    splitQueryString(document.location.search);
    
    g_testing = getQueryValue("testing")==1 ? true : false;
    
    
    if (g_testing)
    {
        alert("Below are the "+stateListSize+" JSON records second level domains.\r\n\r\n"+getJsonSecondLevelDomains());
    }
    
    if (g_testing)
    {
        currentHost                 = window.prompt("Enter domain like \r\n'www.virginiaincometaxes.com' or 'massachusettsincometaxes.com'.","virginiaincometaxes.com");
        secondLevelDomain_browser   = getSecondLevelDomain(currentHost); 
        alert("Your simulated second level domain is '"+secondLevelDomain_browser+"'");
        splitQueryString(window.prompt("Enter search term like '?otpPartnerId=9999&amp;pgm=3333'.","?otpPartnerId=9999&pgm=3333"));    
    }
    else
    {
        currentHost                 = document.location.hostname;
        secondLevelDomain_browser   = getSecondLevelDomain(currentHost);   
        splitQueryString(document.location.search);    
    }   

    // URL parm info
    g_partner_id_from_url   = getQueryValue("otpPartnerId");
    g_pgm_id_from_url       = getQueryValue("pgm");

    // DEFAULT parm info
    g_partner_id_default    = getDefaultInfo("id"); 
    g_pgm_id_default        = getDefaultInfo("pgm"); 

    // COOKIE parm info
    g_partner_id_from_cookie= getCookie("otpPartnerID"); 
    g_pgm_id_from_cookie    = getCookie("pgm"); 

    //
    // DETERMINE WHICH PARTNER ID TO USE - hierarchy is URL, then Cookie, then Default
    //
    if (g_partner_id_from_url != null)
    {
        g_use_this_partner_id = g_partner_id_from_url;
    }
    else if (g_partner_id_from_cookie != null)
    { 
        g_use_this_partner_id = g_partner_id_from_cookie;
    }
    else 
    {  // use default partner id
        g_use_this_partner_id = g_partner_id_default;
    }

    //
    // DETERMINE WHICH PGM ID TO USE - hierarchy is URL, then Cookie, then Default
    //
    if (g_pgm_id_from_url != null)
    {
        g_use_this_pgm_id = g_pgm_id_from_url;
    }
    else if (g_pgm_id_from_cookie != null)
    { 
        g_use_this_pgm_id = g_pgm_id_from_cookie;
    }
    else 
    {   // use default pgm id
        g_use_this_pgm_id = g_pgm_id_default;
    }

    // SET COOKIES
    setCookie("otpPartnerID", g_use_this_partner_id);
    setCookie("pgm",          g_use_this_pgm_id);

    if (g_testing)
    {
        alert(  "PARTNER ID Info:\r\n"+
                "From URL   =="+g_partner_id_from_url+"\r\n"+
                "From Cookie=="+g_partner_id_from_cookie+"\r\n"+
                "Default    =="+g_partner_id_default+"\r\n\r\n"+
                "PGM ID Info:\r\n"+
                "From URL   =="+g_pgm_id_from_url+"\r\n"+
                "From Cookie=="+g_pgm_id_from_cookie+"\r\n"+
                "Default    =="+g_pgm_id_default+"\r\n\r\n"+ 
                "VALUES TO USE:\r\n"+
                "otpPartnerID=="+g_use_this_partner_id+"\r\n"+
                "pgm         =="+g_use_this_pgm_id
                )                
    }
}

function WinOpen_(page,w,h) {
    popupWin=open(page,"popup","status=yes,toolbar=no,directories=no,scrollbars=yes,menubar=no,resizable=yes,width=" + w + ",height=" + h);
    popupWin.focus();
}

function getElementsByAttribute(attr, attrVal)
{   
    var all     = document.all || document.getElementsByTagName('*');
    var arr     = new Array();
    var tempId  = "";

    for(var k=0;k<all.length;k++)
    {
        tempId  = all[k].getAttribute(attr);

        if (tempId != null && tempId.indexOf(attrVal)==0)
        {
            arr[arr.length] = all[k];
        }
    }
    return arr;
}

function setPricesOnPage()
{

    var arrg_pPPriceElements         = new Array();
    var arrg_pPPriceElementsLength   = 0;

    arrg_pPPriceElements         = getElementsByAttribute("id", "prodPrice");
    arrg_pPPriceElementsLength   = arrg_pPPriceElements.length;
    
    // for every prodPriceXX element on the page, find its price in the g_hrb_partner_product._partner_product.prodList object
    for (var x=0; x < arrg_pPPriceElementsLength; x++)
    {
        var span_obj = arrg_pPPriceElements[x];

        // get the number (productId) following 'prodPrice'        
        productId   = span_obj.getAttribute("id").substr(9);
        var price =g_hrb_partner_product.getProductBasePrice(productId);
        if (price=='0.00'){
            span_obj.innerHTML="FREE"
        }
        else{
            span_obj.innerHTML="$"+g_hrb_partner_product.getProductBasePrice(productId);
        }      
    }
}

function updateProductVariation(pid,variation,obj)
{   
    document.getElementById(pid+'_variation').value=variation;
}

function productStartNow(){

    var _pid = null;
    if (typeof arguments[0] != 'undefined' && arguments[0] !=null){
        _pid=arguments[0];
    }

    for (var x=0; x<arguments.length; x++ ) {   
      if ((''+arguments[x]).indexOf("sku:") != -1){
            sku    = arguments[x].substr(4);
        }    
    }

    var prodtype= g_hrb_partner_product.getProductPlatform(_pid);

    if(prodtype=='S'){
        var softwareURL  = "http://shop.taxcut.com/store/taxcut/en_US/AddItemToRequisition/productID."+sku+"?pgm="+getCookie("pgm");
        window.open(softwareURL)
    }
    else if (prodtype=='O') {
        var onlineURL  = g_hrb_partner_product.getProductStartNow(_pid)+"&otpPartnerId="+getCookie("otpPartnerID");
        window.open('http://www.hrblock.com/'+onlineURL);

    }
    
}

function productLearnMore(){
    if (typeof arguments[0] != 'undefined' && arguments[0] !=null){
        window.open('http://www.hrblock.com/taxes/products/'+arguments[0]+'.html?otpPartnerId='+getCookie("otpPartnerID")+"&pgm="+getCookie("pgm"));
    }
}

function getStateSearchTerm()
{
    return "?otppartnerid="+g_use_this_partner_id+"&pgm="+g_use_this_pgm_id;
}

function omnitureOnClick()
{
    var tempPageName= "";
    var origPageName= s_hrb.pageName;
    
    var navLocation = "unknown";
    var navName     = "unknown";
    
    var args        = arguments;
    var argsLen     = arguments.length;    

    for (var x=0; x<argsLen; x++)
    {
        if ((''+arguments[x]).indexOf("navLocation:") != -1)
        {
            navLocation    = arguments[x].substr(12).toLowerCase().replace(/&/g, "^");
        }
        else if ((''+arguments[x]).indexOf("navName:") != -1)
        {
            navName    = arguments[x].substr(8).toLowerCase();
            navName    = navName.replace(/&amp;/g, "and");
            navName    = navName.replace(/&nbsp;/g, " ");
            navName    = navName.replace(/&/g, " and ");
            
            // remove common html markup that may be in the anchor that called this function
            navName    = navName.replace(/<br>/g, "");
            navName    = navName.replace(/<br \/>/g, "");            
            navName    = navName.replace(/<b>/g, "");
            navName    = navName.replace(/<\/b>/g, "");
            navName    = navName.replace(/<sup>/g, "");
            navName    = navName.replace(/<\/sup>/g, "");
        }    
        else if ((''+arguments[x]).indexOf("pageName:") != -1)
        {
            tempPageName = arguments[x].substr(9).toLowerCase().replace(/&/g, "^");
            if (tempPageName != "undefined")
            {   
                s_hrb.pageName = tempPageName;
            }
        }
    }
        
    var newanchor = document.createElement("a");

    newanchor.setAttribute('href',  document.location.href);        

    var bOmniPageNameResolved    = false;

    if ( (typeof omni_pagename)=="undefined" || omni_pagename=="" || omni_pagename==null  || omni_pagename=="undefined")
    {
        // IF you click on a nav item BEFORE the page has finished loading, then omni_pagename will not be defined because
        // it is the omniture_std.html file included at the very bottom of the page that defines this variable.  In those
        // cases, the try/catch blocks below will handle the resulting javascript errors.

        // track the domain of the page that isn't setting omni_pagename
        omni_pagename = document.location.hostname;

        // is this is a page on hrblock.com domain?
        if ( (omni_pagename.indexOf("hrblock.com") != -1) || (omni_pagename.indexOf("handrblock.com") != -1) || (omni_pagename.indexOf("hrbtax.com") != -1) || (omni_pagename.indexOf("hrbtrade.com") != -1)  )
        {
            // is this is a internal search page?
            if (  (omni_pagename.indexOf("search2.") != -1) || (omni_pagename.indexOf("ahp.") != -1) || (omni_pagename.indexOf("taxpro.") != -1) || (omni_pagename.indexOf("jobs.") != -1) )
            {
                // if hrblock.com, and internal search or not ocs owned, just use document.location.hostname for omni_pagename 
                bOmniPageNameResolved = true;
            }
            else if (document.location.pathname.indexOf(".jsp") != -1) 
            {
                // if a jsp page, try to identify the jsp application that is not valuing pagename
                omni_pagename += "/application";
                
                if (document.location.pathname.indexOf("/taxes/fast_facts/") != -1)
                {
                    omni_pagename += "/tax_faq";
                }
                else
                {
                    omni_pagename += "/unknown/"+document.location.pathname;
                }
            }
        }
        else
        {
            bOmniPageNameResolved   = true;
        }

        if (bOmniPageNameResolved)
        {
            // no action needed
        }
        else
        {
            try
            {
                recordExceptionInOmniture("ocs-nopagename","9","using "+omni_pagename+"/nav/"+navLocation+"/"+navName);
            }
            catch (e)
            {
                // alert("omnitureOnClick(): error calling recordExceptionInOmniture:"+e.description);  
            }
            
        }
    }

    try
    {
        webAnalytics(newanchor, "trackvars:eVar48="+omni_pagename+"/nav/"+navLocation+"/"+navName+"&", "trackevents:" ,"linkname:"+"/nav/"+navLocation+"/"+navName, "type:o");                
    }
    catch (e)
    {
        // alert("omnitureOnClick(): error calling webAnalytics:"+e.description);  
    }
    
    //s_hrb.pageName = origPageName;
}       

