function onloadProcessing(){}
var BrowserDetect = {
    init: function () {
        this.browser = this.searchString(this.dataBrowser) || "An unknown browser";
        this.version = this.searchVersion(navigator.userAgent)
            || this.searchVersion(navigator.appVersion)
            || "an unknown version";
        this.OS = this.searchString(this.dataOS) || "an unknown OS";
    },
    searchString: function (data) {
        for (var i=0;i<data.length;i++) {
            var dataString = data[i].string;
            var dataProp = data[i].prop;
            this.versionSearchString = data[i].versionSearch || data[i].identity;
            if (dataString) {
                if (dataString.indexOf(data[i].subString) != -1)
                    return data[i].identity;
            }
            else if (dataProp)
                return data[i].identity;
        }
    },
    searchVersion: function (dataString) {
        var index = dataString.indexOf(this.versionSearchString);
        if (index == -1) return;
        return parseFloat(dataString.substring(index+this.versionSearchString.length+1));
    },
    dataBrowser: [
        {   string: navigator.userAgent,
            subString: "OmniWeb",
            versionSearch: "OmniWeb/",
            identity: "OmniWeb"
        },
        {
            string: navigator.vendor,
            subString: "Apple",
            identity: "Safari"
        },
        {
            prop: window.opera,
            identity: "Opera"
        },
        {
            string: navigator.vendor,
            subString: "iCab",
            identity: "iCab"
        },
        {
            string: navigator.vendor,
            subString: "KDE",
            identity: "Konqueror"
        },
        {
            string: navigator.userAgent,
            subString: "Firefox",
            identity: "Firefox"
        },
        {
            string: navigator.vendor,
            subString: "Camino",
            identity: "Camino"
        },
        {       // for newer Netscapes (6+)
            string: navigator.userAgent,
            subString: "Netscape",
            identity: "Netscape"
        },
        {
            string: navigator.userAgent,
            subString: "MSIE",
            identity: "Explorer",
            versionSearch: "MSIE"
        },
        {
            string: navigator.userAgent,
            subString: "Gecko",
            identity: "Mozilla",
            versionSearch: "rv"
        },
        {       // for older Netscapes (4-)
            string: navigator.userAgent,
            subString: "Mozilla",
            identity: "Netscape",
            versionSearch: "Mozilla"
        }
    ],
    dataOS : [
        {
            string: navigator.platform,
            subString: "Win",
            identity: "Windows"
        },
        {
            string: navigator.platform,
            subString: "Mac",
            identity: "Mac"
        },
        {
            string: navigator.platform,
            subString: "Linux",
            identity: "Linux"
        }
    ]

};
BrowserDetect.init();


function omnitureOnClick()
{
    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, "");
        }    
    }
        
    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);  
    }
}        





// when calling this function, value stringSpecialCharsAllowed like this "%+-@" in the call
function isNumeric(stringToCheck,  stringSpecialCharsAllowed)
{
   var strValidChars = "0123456789"+stringSpecialCharsAllowed;
   var strChar;
   var bIsValid = true;

   if (stringToCheck.length == 0) return false;

   stringToCheck = stringToCheck.toLowerCase();

    for (i = 0; i < stringToCheck.length; i++)
    {
        strChar = stringToCheck.charAt(i);
        if (strValidChars.indexOf(strChar) == -1)
        {
            bIsValid = false;
            break;
        }
    }

   return bIsValid;
}

function isString(valueToCheck)
{
}

// when calling this function, value stringSpecialCharsAllowed like this "%+-+@" in the call
function isAlpha(stringToCheck, stringSpecialCharsAllowed)
{
   var strValidChars = " abcdefghijklmnopqrstuvwxyz"+stringSpecialCharsAllowed;

   var strChar;
   var bIsValid = true;

   if (stringToCheck.length == 0) return false;

   stringToCheck = stringToCheck.toLowerCase();

    for (i = 0; i < stringToCheck.length; i++)
    {
        strChar = stringToCheck.charAt(i);
        if (strValidChars.indexOf(strChar) == -1)
        {
            bIsValid = false;
            break;
        }
    }

   return bIsValid;
}

// when calling this function, value stringSpecialCharsAllowed like this "=-+@" in the call
function isAlphaNumeric(stringToCheck, stringSpecialCharsAllowed)
{
   var strValidChars = " abcdefghijklmnopqrstuvwxyz0123456789"+stringSpecialCharsAllowed;
   var strChar;
   var bIsValid = true;

   if (stringToCheck.length == 0) return false;

   stringToCheck = stringToCheck.toLowerCase();

    for (i = 0; i < stringToCheck.length; i++)
    {
        strChar = stringToCheck.charAt(i);
        if (strValidChars.indexOf(strChar) == -1)
        {
            bIsValid = false;
            break;
        }
    }

   return bIsValid;
}

function isNumber(field) 
{
    var re = /^[0-9-'.'-',']*$/;
    if (!re.test(field.value)) 
    { 
        field.value = field.value.replace(/[^0-9-'.'-',']/g,"");
    }
}

function findOfficeByZip(a_element,zipcode)
 {
	if (validateZipCode(zipcode))
	{
	a_element.href='http://www.hrblock.com/universal/office_locator.html?zip='+zipcode
	return true;
	}

	return false;
}



function validateZipCode()
{
    var strZip      = "";
    var ValidChars  = "0123456789.";
    var returnCode  = true;
    var Char;

    try
    {
        strZip = document.getElementById('tfZipCode').value
    }
    catch (e)
    {
        // if no zip code field calls tfZipCode on form, then assume first parameter received is the zip code
        if (arguments.length == 0)
        {
            // no parameters received
            alert("Please provide a zip code.");
            return false;
        }
        else
        {
            strZip  = arguments[0];
        }
    }

    if (strZip == '')
    {
        alert("Please enter a zip code.");
        return false;
    }

    for (i = 0; i < strZip.length; i++)
    {
        Char = strZip.charAt(i);
        if (ValidChars.indexOf(Char) == -1)
        {
            alert("Please enter a valid zip code.");
            return false;
        }
    }

    if (strZip.length != 5)
    {
        alert("Please enter a 5 digit zip code.");
        return false;
    }

 

    return true;
}



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 zipwidget(zipOnly)
	{

		this.text='Find a Tax Office';
		this.lnkTarget='';
		this.lnkArgs='';
		this.elemID='zipwidget'+parseInt(Math.random()*100);
		
		var str=''
		if(!zipOnly){
			str+='<table border=0 cellpadding="2"><tr>';
			str+='<td><span class="form_title">'+this.text+'<span></td>';
			str+='<td>';}
		str+='<input value="Enter Zip" maxlength="5" size="10" style="height:15px;font-size:10px;border: 1px solid #888888;" type="text" id="txt_'+this.elemID+'" >';
		str+='</td>';
		if(!zipOnly){
			str+='<td><a href="#" title="Find an Office" alt="Find an Office" id="link_'+this.elemID+'" ><img valign="middle" src="/images/btn_form_entry.png" border="0" alt="Find an Office"></a></td>';
			str+='</tr></table>';}
		document.write(str);
		this.zipFld=document.getElementById('txt_'+this.elemID);
		this.zipFld.onclick=function(){
		this.value='';
		}
		this.zipFld.onkeypress=function(clickevent){
			var numcheck=/^\d{0,5}$/;
			var keynum = window.event?event.keyCode : clickevent.which;
			keychar =String.fromCharCode(keynum);
			return numcheck.test(keychar);
		}

		this.action=function(obj){
		
		if (self.zipFld.value==''  ||self.zipFld.value.length<5 || self.zipFld.value.indexOf("Enter")!=-1)
		{
		    alert('Enter valid zip code');
			self.zipFld.focus();
			return false;
		}
		if(self.lnkTarget!='')
		{
			obj.target=self.lnkTarget;
		}
		obj.href="http://www.hrblock.com/universal/office_locator.html?zip="+self.zipFld.value;
		}
		
		if(!zipOnly){
		this.img_link=document.getElementById('link_'+this.elemID);
		this.img_link.onclick=function(){
			self.action(this);		
			}
		}
		var self=this;
	}
function showpdf(_dt)
	{
	
	var TaxNews='/tax_research_center/newsletters/TaxNews_'+_dt+'.pdf';
	//alert(TaxNews);
	window.open(TaxNews);
	}



/*
 Pixels to be triggered is defined as a JSON object
 The identification of page is either based on a 
 token passed or based on the current URL
*/
function processPixelTracking(_token){
	var _url_or_token=null;
	if (typeof _token != 'undefined' && _token!=null && _token!=''){
		_url_or_token=_token;
	}else if (typeof location.pathname != 'undefined' || location.pathname!=null){
		_url_or_token=location.pathname;
		
		}
	
	var pixel_obj = {
	 _pixelobj: [
		{pagetoken:'EMAIL_DISCOUNT',pixel:['001.html']}

	 ],

	 getPixels:function(_url_or_token){
		 for (var i=0;i< this._pixelobj.length;i++ ){
			if (this._pixelobj[i].pagetoken==_url_or_token){
					if(typeof (this._pixelobj[i].env) == 'undefined' ){
						 return this._pixelobj[i].pixel;
						}
					else{
						var _env=g_sys.checkEnv();
						var _envpx =new Array();
						for (var k=0;k< this._pixelobj[i].env.length;k++ ){
							if(_env==this._pixelobj[i].env[k]|| this._pixelobj[i].env[k]=='ALL'){
								_envpx[_envpx.length]=this._pixelobj[i].pixel[k];
							}
						}
						return _envpx;
					}
				}
			}
			return null;
		}
	}
	
	// create a empty div
	var pixDiv = document.createElement("div");
	pixDiv.setAttribute("id", "hrb_pixel_tracker_div");
	//pixDiv.style.display='none';
	pixDiv.style.width='0px';
	pixDiv.style.height='0px';

	document.body.appendChild(pixDiv);

	var pixel_arr = pixel_obj.getPixels(_url_or_token)
	

	if (pixel_arr!=null){
		for (var i=0;i<pixel_arr.length ;i++ ){
			if (pixel_arr[i]!=null)	{
				var _ifobj= createIframe(pixel_arr[i]);
				pixDiv.appendChild(_ifobj);
			}

		}
	}
}
function createIframe(_frameURL){
	var rand_frameid = 'pixel_frame_'+parseInt(Math.random()*100)
   	var iframe = document.createElement("IFRAME");
	iframe.style.width='30px';
	iframe.style.height='0px';
	iframe.style.border='0px';

	iframe.width='30px';
	iframe.height='0px';

	iframe.id = rand_frameid;
	iframe.src='/includes/pixel/pix_'+_frameURL
	return iframe;
}

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;
}
