// *** COMMON CROSS-BROWSER COMPATIBILITY CODE ***//
var isDOM=document.getElementById?1:0;
var isIE=document.all?1:0;
var isNS4=navigator.appName=='Netscape'&&!isDOM?1:0;
var isOp=window.opera?1:0;
var isWin=navigator.platform.indexOf('Win')!=-1?1:0;
var isDyn=isDOM||isIE||isNS4;
var sectionArry = new Array(1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1);

function FindX(obj){
	var curleft = 0;
	if (obj.offsetParent){
		while (obj.offsetParent)
		{	curleft += obj.offsetLeft;
			obj = obj.offsetParent;
		}
	}
	else if (obj.x)
		curleft += obj.x;
	return curleft;
}
function FindY(obj){
	var curtop = 0;
	if (obj.offsetParent)
	{
		while (obj.offsetParent)
		{
			curtop += obj.offsetTop;
			obj = obj.offsetParent;
		}
	}
	else if (obj.y)
		curtop += obj.y;
	return curtop;
}

function GetElement(id, par)
{
 par=!par?document:(par.navigator?par.document:par);
 return (isIE ? par.all[id] : (isDOM ? (par.getElementById?par:par.ownerDocument).getElementById(id) : (isNS4 ? par.layers[id] : null)));
}

function SelectAll(ctrlName, count)
{
	for (i=0 ; i<count ; i++)
	{
		//get the ctrl by id
		var chkBox = GetElement(ctrlName+"_"+i);
		if(chkBox != null)
		{
			chkBox.checked = true;
		}
	}	
}

function UnselectAll(ctrlName, count)
{
	for (i=0 ; i<count ; i++)
	{
		//get the ctrl by id
		var chkBox = GetElement(ctrlName+"_"+i);
		if(chkBox != null)
		{
			chkBox.checked = false;
		}
	}	
}

function ShowHideElement(elementId, show)
{
	//get the element by id
	var section = GetElement(elementId);
	if(section == null) return;

	//set style value
	var displayFlag = (show) ? "block" : "none" ;

	//get style object and set display
	var styleObject = (section.style) ?  section.style : section ;
	styleObject.display = displayFlag;
}

function ShowHide(index)
{
	//get the div by id
	var divId = 'Sec'+ index;
	var section = GetElement(divId);
	if(section == null) return;

	//get opened/closed status of this section
	var displayStatus = sectionArry[index]; // 1 = Open, 0 = Closed

	//toggle display status and update array
	displayStatus = (displayStatus == 1) ? 0 : 1; 
	sectionArry[index] = displayStatus;
	var displayFlag = (displayStatus == 1) ? "block" : "none" ;

	//get style object and set display
	var styleObject = (section.style) ?  section.style : section ;
	styleObject.display = displayFlag;
}

function ShowAll()
{
	ShowHideAll('block');
}
function HideAll()
{
	ShowHideAll('none');
}
function ShowHideAll(displayFlag)
{
	//Set the opened/closed status of this section
	var displayStatus = (displayFlag == "block") ? 1 : 0;  // 1 = Open, 0 = Closed

	//look for sections by id
	var count = sectionArry.length;
	for (i=0 ; i<count ; i++)
	{
		var divId = "Sec" + i;
		//get the div by id
		var section = GetElement(divId);
		if(section != null)
		{
			//set display status (update array)
			sectionArry[i] = displayStatus;
			//get style object and set display
			var styleObject = (section.style) ?  section.style : section ;
			styleObject.display = displayFlag;
		}
	}
}

function ChangeBtn(img, isOver)
{
	var imgSrc = img.src;

	if(isOver)
	{ // Add Ovr to src
		imgSrc = imgSrc.replace(".gif", "Ovr.gif");
	}
	else
	{ // remove Ovr from src	
		imgSrc = imgSrc.replace("Ovr.gif", ".gif");
	}
	//set new src
	img.src = imgSrc;
}

// Common Helper functions
function IsDefined(strId)
{	//by string id/name
	//return !isDef;
	if( eval("document.forms[0]." + strId ) )
		return true;
	else
		return false;
}

// Fake Anchors
function ChangeColor(color)
{
	if(isIE == 1)
	{
		window.event.srcElement.style.color = color;
	}
}

function Redir(newPg)
{
	if (newPg.indexOf("#") == 0)
	{
		// local ref
		var url = document.URL;
		var idx = url.indexOf("#");
		if (idx > 0)
		{
			url = url.substring(0, idx);
		}
		newPg = url + newPg;
	} 
	
	window.location.href = newPg;

}
function navSub(qs) // Navicagtion submit
{	// parm Query String info
	document.forms[0].txtQStr.value = qs;
	//submit form
	document.forms[0].submit();
}	

//Cancel Wiward
function wizardCancel(qs)
{
	var cancel = true;
	cancel = confirm('Do you want to cancel?');
	if(cancel == true)
	{
		navSub(qs);
	}
}

function ResizeScrollDiv(divId, tblId)
{
	//pgHlp.ResizeScrollDiv('', '');
	
	var div = pgHlp.GetElement(divId);
	if(!div) return;

	var tbl = pgHlp.GetElement(tblId);
	if(!tbl) return;
	
	var divX = pgHlp.FindX(div);
	var tblX = pgHlp.FindX(tbl);
	var w = document.body.clientWidth;

	var divW = 0.9*(w-tblX);
	if(divW < 200) divW = 200;
	
	if(div.style) div = div.style;
	div.width = divW+'px';	
	
}

function ResizeDiv()
{

	return;
	var divHdr = document.all["HdrDiv"];
	var divBdy = document.all["BdyDiv"];
	
	var w = document.body.clientWidth;
	var h = document.body.clientHeight - 88;
	if(h < 0) h = 0;	
	
	divHdr.style.width = w; // Hrd always full wid 
	divBdy.style.width = w;
	divBdy.style.height = h;		
	
}

function selectKeyWords(words, marker)
{
	// words = an Array of key words to fins
	// marker = where to start search - then process to EOF
	var keyWordHits = 0;
	var len = words.length;
	for (i=0 ; i<len ; i++)
	{
		//alert(words[i]);
		//selectKeyWord(el, words[i]); // on ctrl - no worky!
		keyWordHits += selectKeyWord(words[i], marker); // on body
	}
	
	return keyWordHits;

}
function selectKeyWord(word, marker)
{
	var keyWordHits = 0;
	//Supported?
	if(document.body.createTextRange)
	{
		var rng = document.body.createTextRange();
		var rngEx;
		var str = "";
		var chrStart = "";
		var chrEnd = "";
		var chrLast = "";
		// Identify valid chrs
		var validStartChars = " \\/([\n\f\r.-:;," 
		var validEndChars   = " \\/)]\n\f\r.-:;,"

		var i = 0;
		// move to start position
		if (rng.findText(marker)!=false)
		{
			rng.collapse(false);  
			// Start repetitive search
			for (i=0; rng.findText(word)!=false; i++) 
			{
				rngEx = rng.duplicate();
				
				chrLast = rngEx.text.substring(rngEx.text.length -1);
				rngEx.moveStart("character", -1);
				rngEx.moveEnd("character", 1);
				str = rngEx.text;
				
				chrStart = str.substring(0, 1);
				chrEnd = str.substring(str.length -1);

				if (validStartChars.indexOf(chrStart) > -1)
				{
					if (validEndChars.indexOf(chrEnd) > -1 || chrEnd == chrLast)
					{			
						//return 1 if we found at least one occurance.
						keyWordHits = 1; //keyWordHits++

						rng.execCommand("ForeColor","false","darkblue");
						//rng.execCommand("BackColor","false","darkblue");
						rng.execCommand("Bold");
					}	
				
				}
				
				rng.collapse(false);
				if(i>50) break; // Failsafe if 'collapse' is not supported - endless loop
		
			}
		}
	}
	return keyWordHits;
}

//Do Postback on KeyUp Event if KeyCode is Return(Enter)
function processPostbackOnEnter(ctrl, e)
{
	if(!isEnterKey(e)) return;
	//var script = "__doPostBack('"+ctrl+"','');";
	//eval(script);
}

//Auto Advance on Key Event (Ex: phone input)
function processAutoAdvanceEvent(ctrl, e)
{
	if(!isNumericKey(e)) return;
	if(ctrl.value.length < ctrl.maxLength) return;
	var nextCtrlId = getNextCtrl(ctrl.id);
	if(nextCtrlId.length == 0) return;
	var nextCtrl = pgHlp.GetElement(nextCtrlId);
	if(nextCtrl == null) return;
	nextCtrl.focus();
}

function getNextCtrl(ctrlId)
{
	//look in autoAdvanceCtrls array to find this id
	if (!window.autoAdvanceCtrls) return "";

	var nextCtrlId = "";
	for(i=0 ; i<window.autoAdvanceCtrls.length; i++)
	{
		for(j=0 ; j<window.autoAdvanceCtrls[i].length; j++)
		{
			if(window.autoAdvanceCtrls[i][j] == ctrlId)
			{
				if(j+1 < window.autoAdvanceCtrls[i].length)
				{
					nextCtrlId = window.autoAdvanceCtrls[i][j+1];
					break;
				}
			}
			if(nextCtrlId.length > 0) break;
		}
	}
	return nextCtrlId;
}

function isNumericKey(e)
{	
	if(!e){
		if( window.event ) {
			e = window.event; //DOM
		} else {
			return false;
		}
	}

    if( typeof( e.which ) == 'number' ) 
    {
        //NS 4, NS 6+, Mozilla 0.9+, Opera
        e = e.which;
    } 
    else if( typeof( e.keyCode ) == 'number'  ) 
    {
        //IE, NS 6+, Mozilla 0.9+
        e = e.keyCode;
    } 
    else if( typeof( e.charCode ) == 'number'  ) 
    {
        //also NS 6+, Mozilla 0.9+
        e = e.charCode;
    } 
    else
    {
        //TOTAL FAILURE, WE HAVE NO WAY OF OBTAINING THE KEY CODE 
        return false;
    }
    //window.alert('The key pressed has keycode ' + e + ' and is key ' + String.fromCharCode( e ) );
	return ( e >= 48 && e <=57 ) || ( e >= 96 && e <=105 ) ;
}

function isEnterKey(e)
{	
	if(!e){
		if( window.event ) {
			e = window.event; //DOM
		} else {
			return false; //TOTAL FAILURE, WE HAVE NO WAY OF REFERENCING THE EVENT
		}
	}

    if( e.which ) 
    {
        //NS 4, NS 6+, Mozilla 0.9+, Opera
        e = e.which;
    } 
    else if( e.keyCode ) 
    {
        //IE, NS 6+, Mozilla 0.9+
        e = e.keyCode;
    } 
    else if( e.charCode ) 
    {
        //also NS 6+, Mozilla 0.9+
        e = e.charCode;
    } 
    else
    {
        //TOTAL FAILURE, WE HAVE NO WAY OF OBTAINING THE KEY CODE 
        return false;
    }
    //alert('The key pressed has keycode ' + e + ' and is key ' + String.fromCharCode( e ) );
	return ( e == 13 ) ;
}

// Show the value of a list item 
function CopyMacroValue(ctrl, e)
{
	
	var value = ctrl.value;

	if(value.length > 0)
		value = '['+value+']';

	if(window.clipboardData)
		window.clipboardData.setData("Text",value);

}

/* Select the states check based on first check name and an index from a state list */
function SetStateCheck(firstChkName, selectedIndex) 
{ 
//	document.forms[debug].item[debug].value;
	var nIdx;
	var oElem;
	var oForm = document.forms[0]; 
	var nElemCnt = oForm.elements.length; 
	var foundFirst = false;
	var foundIndex = -1;
	for(nIdx = 0; nIdx < nElemCnt; nIdx++)
	{
		oElem = oForm.elements[nIdx];
		if(oElem.type == "checkbox")
		{
			if(!foundFirst)
			{
				if(oElem.id) // do we have an id property
				{
					if(oElem.id == firstChkName)
					{
						foundFirst = true;
					}
				}
			}

			if(foundFirst)
			{
				foundIndex ++;
				if(foundIndex == selectedIndex)
				{
					oElem.checked = true;
					return;
				}
			}
		}
	}//end loop 
}

// Set focus to a specific ctrl
function SetFocus(ctrlName)
{
	//Do we have a name
	if(ctrlName.length == 0) return;
	//get the ctrl
	var ctrl = GetElement(ctrlName);
	if(ctrl != null)
	{
		if(ctrl.focus) ctrl.focus();
	}
}

// function pointers
PgHlpr.prototype.FindX = FindX;
PgHlpr.prototype.FindY = FindY;
PgHlpr.prototype.GetElement = GetElement;
PgHlpr.prototype.SelectAll = SelectAll;
PgHlpr.prototype.UnselectAll = UnselectAll;
PgHlpr.prototype.ShowHideElement = ShowHideElement;
PgHlpr.prototype.ShowHide = ShowHide;
PgHlpr.prototype.ShowAll = ShowAll;
PgHlpr.prototype.HideAll = HideAll;
PgHlpr.prototype.ChangeBtn = ChangeBtn ;
PgHlpr.prototype.IsDefined = IsDefined ;
PgHlpr.prototype.Redir = Redir;
PgHlpr.prototype.ChangeColor = ChangeColor;
PgHlpr.prototype.navSub = navSub;
PgHlpr.prototype.ResizeScrollDiv = ResizeScrollDiv;
PgHlpr.prototype.ResizeDiv = ResizeDiv;
PgHlpr.prototype.selectKeyWords = selectKeyWords;
PgHlpr.prototype.wizardCancel = wizardCancel;
PgHlpr.prototype.processPostbackOnEnter = processPostbackOnEnter;
PgHlpr.prototype.processAutoAdvanceEvent = processAutoAdvanceEvent;
PgHlpr.prototype.CopyMacroValue = CopyMacroValue;
PgHlpr.prototype.SetStateCheck = SetStateCheck;
PgHlpr.prototype.SetFocus = SetFocus;

// Constructor
function PgHlpr(){}
// Create object
var pgHlp = new PgHlpr();
// Global variables
var autoAdvanceCtrls = new Array();

/* RESUME FAX FUNCTIONS */
function initFaxOrder() {
    CountLines(document.getElementById('ctl00_cphMidColumn_txtResume'));
}

function CountLines(this_field) {
    var text = this_field.value.split("\n");
    var line_count = 0;
    
    for (var i=0; i < text.length; i++)
    {
        // Calculate lines based on a max of 70 characters/line
        if (text[i].length > 70) {
            line_count += Math.ceil((text[i].length / 70));
        }
        else {
            line_count++;
        }
    }
        
    if (line_count == 1) {
        lineSuffix = " line";
    }
    else {
        lineSuffix = " lines";
    }
    
    // Calculate pages based on a max of 50 lines/page
    var page_count = Math.ceil((line_count / 50));

    if (page_count == 1) {
        pageSuffix = " page";
    }
    else {
        pageSuffix = " pages";
    }
    document.getElementById('lineCount').innerHTML = "Resume Contains <span class=\"highlight\">" + line_count + "</span> " + lineSuffix +
                                                     " (approx <span id=\"numPages\" class=\"highlight\">" + page_count + "</span> " + pageSuffix + ")";

    // Update cost on every change
    calculateFaxCost();

    return false;
}

function ToggleFillBillingAddress() {
    var chkContact = document.getElementById('chkSameAsContact');

    if (chkContact.checked) {
        var currentElement = document.getElementById('ctl00_cphMidColumn_txtBillingAddress');
        currentElement.value = document.getElementById('ctl00_cphMidColumn_txtLine1').value;
        currentElement.readOnly = true;

        currentElement = document.getElementById('ctl00_cphMidColumn_txtBillingFirstName');
        currentElement.value = document.getElementById('ctl00_cphMidColumn_txtFirstName').value;
        currentElement.readOnly = true;

        currentElement = document.getElementById('ctl00_cphMidColumn_txtBillingLastName');
        currentElement.value = document.getElementById('ctl00_cphMidColumn_txtLastName').value;
        currentElement.readOnly = true;
        
        currentElement = document.getElementById('ctl00_cphMidColumn_txtBillingCity');
        currentElement.value = document.getElementById('ctl00_cphMidColumn_txtCity').value;
        currentElement.readOnly = true;
        
        currentElement = document.getElementById('ctl00_cphMidColumn_txtBillingZip');
        currentElement.value = document.getElementById('ctl00_cphMidColumn_txtZip').value;
        currentElement.readOnly = true;
        
        currentElement = document.getElementById('ctl00_cphMidColumn_drpBillingState');
        currentElement.selectedIndex = document.getElementById('ctl00_cphMidColumn_drpState').selectedIndex;
    }
    else {
        var currentElement = document.getElementById('ctl00_cphMidColumn_txtBillingAddress');
        currentElement.value = "";
        currentElement.readOnly = false;

        currentElement = document.getElementById('ctl00_cphMidColumn_txtBillingFirstName');
        currentElement.value = "";
        currentElement.readOnly = false;

        currentElement = document.getElementById('ctl00_cphMidColumn_txtBillingLastName');
        currentElement.value = "";
        currentElement.readOnly = false;

        currentElement = document.getElementById('ctl00_cphMidColumn_txtBillingCity');
        currentElement.value = "";
        currentElement.readOnly = false;

        currentElement = document.getElementById('ctl00_cphMidColumn_txtBillingZip');
        currentElement.value = "";
        currentElement.readOnly = false;

        currentElement = document.getElementById('ctl00_cphMidColumn_drpBillingState');
        currentElement.selectedIndex = "";
    }
}

function setCompanyCount(this_field) {
    var count = document.getElementById('numExcludeCompanies').value;

    if (this_field.checked) {
        count++;
    }
    else {
        count--;
    }

    document.getElementById('numExcludeCompanies').value = count;

    // Update cost on every change
    calculateFaxCost();
        
    return false;
}

function calculateFaxCost() {
    var estimatedPages = document.getElementById('numPages')
    if (estimatedPages != null) {
        estimatedPages = estimatedPages.innerHTML;
    }
    else {
        estimatedPages = 0;
    }

    var totalCompanies = document.getElementById('numTotalCompanies');
    if (totalCompanies != null) {
        totalCompanies = totalCompanies.innerHTML;
    }
    else {
        totalCompanies = 0;
    }

    var excludeCompanies = document.getElementById('numExcludeCompanies');
    if (excludeCompanies != null) {
        excludeCompanies = excludeCompanies.value;
    }
    else {
        excludeCompanies = 0;
    }
    
    //alert('Fax Cost = ' + estimatedPages + ' * (' + totalCompanies + ' - ' + excludeCompanies + ') * .14');
    
    var faxCost = estimatedPages * (totalCompanies - excludeCompanies) * .14;
    if (faxCost < 29.00) {
        faxCost = 29.00;
    }

    document.getElementById('faxCost').innerHTML = "<b>Your Cost:</b> <span class=\"highlightbold\">$" + faxCost.toFixed(2) + "</span>";
    
    return false;
}

// Remove potentially harmful html brackets from a text input
function sanitizeHtml(name) {
    var content = document.getElementById(name).value
    content = content.replace(/</g,'');
    content = content.replace(/>/g,'');
    document.getElementById(name).value = content;
}
