/*function aGetStarted_onclick(oDocumentObj)
{
	var bRes = true;
	var sErrMsg = "";
	var oFocusCtl = null;

	var sZip = oDocumentObj.getElementById("PC").value;
	if (!IsZipcode(sZip) || (Trim(sZip) == ""))
	{
		sErrMsg += "- Zip Code\n";
		if (oFocusCtl == null)
			oFocusCtl = oDocumentObj.getElementById("PC");
	}
	
	var sDebtAmt = oDocumentObj.getElementById("DEBT_UNSECURED").value;
	if (sDebtAmt == "")
	{
		sErrMsg += "- Card Debt\n";
		if (oFocusCtl == null)
			oFocusCtl = oDocumentObj.getElementById("DEBT_UNSECURED");
	}
	
	var sEmail = oDocumentObj.getElementById("EM").value;
	if (!IsEmail(sEmail) || (Trim(sEmail) == ""))
	{
		sErrMsg += "- Email Address\n";
		if (oFocusCtl == null)
			oFocusCtl = oDocumentObj.getElementById("EM");
	}

	if (sErrMsg != "")
	{
		bRes = false;
		alert('You have some incorrect information.\n\nPlease complete the highlighted fields to continue:\n' + sErrMsg);
		oFocusCtl.focus();
	}

	properClickThrough = bRes; //this var is from upsellitcom's javascript include - it suppresses jenny if true
	
	return bRes;
}

function imgTalkLive_onclick(oDocument)
{
	return aGetStarted_onclick(oDocument);
}

function Trim(sStr)
{
	var sRes = "";
	var oTrimExp = new RegExp(/^\s|\s+$/g);
	
	sRes = String(sStr).replace(oTrimExp, "");

	return sRes;
}

function IsZipcode(str)
{
	r1 = new RegExp("^([ ]*)([0-9]{5})([ ]*)$");
	r2 = new RegExp("^([ ]*)([A-Za-z][0-9][A-Za-z][ ]?([0-9][A-Za-z][0-9])?)([ ]*)$");
	if (str.indexOf("-") == 5)
		str = str.substring(0, 5);
	
	return (r1.test(str) || r2.test(str));
}

function IsEmail(str)
{
	r1 = new RegExp("(@.*@)|(\\.\\.)|(@\\.)|(^\\.)");
	r2 = new RegExp("^.+\\@[a-zA-Z0-9\\-\\.]+\\.([a-zA-Z]{2,4}|[0-9]{1,4})([ ]*)$");

	return (!r1.test(str) && r2.test(str));
}
*/

var isNS = (!document.all);
var isIE = (document.all);
var isNS6 = isNS && document.getElementById;

var CheckType = new Object();
CheckType.Required = 1;
CheckType.Numeric = 2;
CheckType.Alpha = 4;
CheckType.MinValue = 8;
CheckType.MaxValue = 16;
CheckType.MinLength = 32;
CheckType.MaxLength = 64;
CheckType.RegEx = 128;
CheckType.Zipcode = 256;
CheckType.Telephone = 512;
CheckType.SSN = 1024;
CheckType.Creditcard = 2048;
CheckType.Email = 4096;


if ( document.captureEvents ) 
{    
    if ( Event.KEYUP ) //non IE
    {        
        document.captureEvents( Event.KEYUP ); 
        document.captureEvents( Event.KEYPRESS ); 
        document.captureEvents( Event.CLICK ); 
    }
}

document.onkeypress = KeyPressHandler;
document.onkeyup = KeyPressHandler;
document.onclick = ClickHandler;

var previousObj = '';
var previousValue = '';
var eventObj;
var intended = /INPUT|TEXTAREA|SELECT|OPTION/; //Regular expression to highlight only form elements
var ErrorMsg = '';
var FirstErrorField = new Object();

var isBackspace = false;
var isTab = false;
var isShiftTab = false;
var isDel = false;
var isShift = false;

function getEvent(e)
{
	var retval = false;
	if ( !e ) 
	{	
		retval = (window.event) ? window.event : false;
    }
    return retval;
}

function getKeyCode(e)
{
	var retval = false;

	isBackspace = false;
	isTab = false;
	isShiftTab = false;
	isDel = false;
	isShift = false;
	
	try
	{
		if ( typeof( e.keyCode ) == 'number'  ) 
		{            
			retval = e.keyCode; //IE, NS 6+, Mozilla 0.9+
		} 
		else if ( typeof( e.which ) == 'number' ) 
		{        
			retval = e.which; //NS 4, NS 6+, Mozilla 0.9+, Opera
		} 
		else if ( typeof( e.charCode ) == 'number'  ) 
		{        
			retval = e.charCode; //also NS 6+, Mozilla 0.9+
		} 
    }
    catch (ex)
    {
    }
    
    return retval;
    
   
}

function KeyUpHandler(e)
{
	var retval = true;
	
	try
	{
		e = getEvent(e);
		if (!e) return retval;
	    
		var keyCode = getKeyCode(e);
		if (!keyCode) return retval;
		var key = String.fromCharCode( keyCode )

//		window.alert('KEYUP keycode ' + keyCode + ' and is key ' + key );	

		eventObj = isNS ? e.target : event.srcElement;	
		previousValue = eventObj.value;
		
		switch (keyCode)
		{
			case 8 : 
				isBackspace = true;
				fieldAdvance(eventObj);
				break;
			case 9 : 
				isTab = true;
				isShift = (isIE) ? window.event.shiftKey : (e.modifiers & Event.SHIFT_MASK)
				break;
			case 46 : 
				isDel = true; 
				break;		
		}
	}
    catch (ex)
    {
    }
}

function KeyPressHandler(e)
{
	var retval = true;
	
	e = getEvent(e);
	if (!e) return retval;
	
	var keyCode = getKeyCode(e);
	if (!keyCode) return retval;
	var key = String.fromCharCode( keyCode )
        
//    window.alert('KEYPRESSED keycode ' + keyCode + ' and is key ' + key );	

	eventObj = isNS ? e.target : event.srcElement;

	previousValue = eventObj.value;
	
	retval = doValidateKey(eventObj,key);	
	if (retval)
	{
		// Advance Field if @ Max Field Length. Good for Tel# & etc.
		if (eventObj.maxLength < 50000) 
		{
			fieldAdvance(eventObj);
		}
		else
		{
			FieldActiveHighlight(eventObj);
		}		
	}
	else
	{
		e.returnValue = false;
		e.cancelBubble = true;
	}	
	
	return retval;

}

function ClickHandler(e)
{
	eventObj = isNS ? e.target : event.srcElement;		
	FieldActiveHighlight(eventObj);
}


function doValidateKey(theField, key)
{
	var retval = true;
	
	try
	{
		if (theField)
		{
			if (theField.validkey != undefined)
			{
				switch (theField.validkey.toLowerCase())
				{
					case 'numeric' :
						retval = ( ! isNaN(key) );
						break;
					case 'alpha' :
						retval = ( isNaN(key) );
						break;
				}
			}
		}
	}
	catch (ex)
	{
	}
	
	return retval;
	
}

function setError(field,description)
{
	if (typeof(description) != 'undefined')
	{
		ErrorMsg += '- ' + description + '\n';
	}
	FieldErrorHighlight(field);
	if (FirstErrorField == null) 
	{
		FirstErrorField = field;
	}
}

function doValidateField(field, validation)
{
	if (typeof(field) == 'undefined') return;

	thetype = field.type.toLowerCase();

	// check standard fields (field.name has a ":", while field.id has a "_")
	// thus
	// use field.id and strRegExp = "regExp = /" + g_strClientID + "\_" + "/gi;" 
	// or 
	// use field.name and strRegExp = "regExp = /" + g_strClientID + "\:" + "/gi;" 

	f = field.id

	//alert(g_strClientID)

	switch (f)
	{
		// panel 1 Email address validation
		case "EMAdd" : 
			isError = !isEmail(field.value);
			description = 'Email Address'; 
			break;
		case "EM" : 
			isError = !isEmail(field.value);
			description = 'Email Address'; 
			break;
		case "FN" : 
			isError = !isName(field.value);
			description = 'First Name'; 
			break;
		case "LN" : 
			isError = !isName(field.value);
			description = 'Last Name'; 
			break;
		case "A1" : 
			isError = !isAddress(field.value);
			description = 'Address'; 
			break;
		// panel 1 zip code validation
		case "DEBT_UNSECURED" : 
			isError = isEmpty(field.value);
			description = 'Card Debt'; 
			break;
		case "PC" : 
			isError = !isZipcode(field.value);
			description = 'Zip Code'; 
			break;
		case "HT1" : 
			isError = !isPhoneAreaCode(field.value);
			description = 'Home Tel Area Code'; 
			break;
		case "HT2" : 
			isError = !isPhonePrefix(field.value);
			description = 'Home Tel Prefix'; 
			break;
		case "HT3" : 
			isError = !isPhoneSuffix(field.value);
			description = 'Home Tel Suffix'; 
			break;			
		case "OT1" : 
			if (!isEmpty(field.value))
				isError = isError = !isPhoneAreaCode(field.value);
			description = 'Other Tel Area Code'; 
			break;
		case "OT2" : 
			if (!isEmpty(field.value))
				isError = !isPhonePrefix(field.value);
			description = 'Other Tel Prefix'; 
			break;
		case "OT3" : 
			if (!isEmpty(field.value))
				isError = !isPhoneSuffix(field.value);
			description = 'Other Tel Suffix'; 
			break;
		default :
			if (typeof(validation) != 'undefined')
			{
				try
				{
					eval("isError = " + validation + "(field.value)");
				}
				catch (ex)
				{
					alert("[doValidateField] bad eval");
				}
			}
			else
			{
				switch(thetype)
				{
					case "select-one" :
					case "select-multiple" :
					case "text" :
					case "textarea" :
						isError = isEmpty(field.value);
						break;
					case "checkbox" :
						isError = !field.checked;
						break;						
					default :
						if (thetype == 'undefined')
						{
							var blnchecked = false;
							for (var j = 0; j < field.length; j++){
								if (field[j].checked){
									blnchecked = true;
								}
							}
							isError = !blnchecked;
						}
				}
			}
			break;
	}
	if (field.title.length > 0)
	{
		description = field.title;
    }
		
	if (isError)
	{
		setError(field,description);
	}
	else
	{
		FieldRemoveHighlight(field);	
	}
}

function doValidateForm(theForm)
{
	//alert(theForm);
	var errors = '';
	var isOK = true;
	var bRes = true;
	
	ErrorMsg = '';
	FirstErrorField = null;
	
	rExp = / /ig;		
	    		
  //alert(document.getElementById("EMAdd").name);
  // HACK: Get around EM Validation for short forms (where EM needs to be passed into the form)
  doValidateField(document.getElementById("PC"));
  doValidateField(document.getElementById("DEBT_UNSECURED"), 'isEmpty');
  
  if(document.getElementById("EM") == undefined)
  {
    eval(document.getElementById("EM").value = document.getElementById("EM").value.replace(rExp,''));
    eval(doValidateField(document.getElementById("EM")));
  }
  else
  {
    document.getElementById("EM").value = document.getElementById("EM").value.replace(rExp,"")
    doValidateField(document.getElementById("EM"));
  }
  
  
		
		
	if (typeof(doProductValidation) == 'function') // product specific validation defined?
		doProductValidation(theForm);
		

	if (ErrorMsg.length > 0) 
	{	
		isOK = false;
		alert('You have some incorrect information.\n\nPlease complete the highlighted fields to continue:\n' + ErrorMsg);
		try
		{
			FirstErrorField.focus();
		}
		catch (ex)
		{
		}
		//ToggleSubmit(theForm, true);
	}
	else
	{
	    properClickThrough = true;
	}
    
    return isOK;
    
    properClickThrough = true;
}

var n = "0123456789";
var a = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
function isValid(parm , val) {if (parm == "") return false; for (var i=0; i < parm.length; i++) { if (val.indexOf(parm.charAt(i),0) == -1) return false; } return true;}
function isAlpha(str){return isValid(str,a)};
function isAlphaNumeric(str){return isValid(str,n+a)};
function isName(str){r1=new RegExp("^[a-zA-Z]+[-a-zA-Z' ]+[ ]*$"); r2=new RegExp("[AaEeIiOoUuYy]+"); return(r1.test(str)&&r2.test(str));}
function isAddress(str){r1=new RegExp("[a-zA-Z]+"); r2=new RegExp("[0-9]+"); return(r1.test(str)&&r2.test(str));}
function isZipcode(str){r1=new RegExp("^([ ]*)([0-9]{5})([ ]*)$");r2=new RegExp("^([ ]*)([A-Za-z][0-9][A-Za-z][ ]?([0-9][A-Za-z][0-9])?)([ ]*)$");if(str.indexOf("-") == 5) str=str.substring(0,5);return(r1.test(str)||r2.test(str));}
function isPhoneAreaCode(str){with(new RegExp("[2-9][0-9]{2}"))return(test(str))}
function isPhonePrefix(str){r1=new RegExp("[0-9]{3}");r2=new RegExp("000|555|800");return(r1.test(str)&&!r2.test(str));}
function isPhoneSuffix(str){with(new RegExp("[0-9]{4}"))return(test(str))}
function isPhoneExtension(str){with(new RegExp("^[0-9]*$"))return(test(str))}
function isValidPhone(str){r=new RegExp("[1]{7}|[2]{7}|[3]{7}|[4]{7}|[5]{7}|[6]{7}|[7]{7}|[8]{7}|[9]{7}");return(!r.test(str));}
function isSSN(str){r1=new RegExp("^([0-7]{1}[0-9]{8})$");r2=new RegExp("[0]{9}|[1]{9}|[2]{9}|[3]{9}|[4]{9}|[5]{9}|[6]{9}|[7]{9}|123456789|111223333|123121234");return(r1.test(str)&&!r2.test(str));}
function isDate(y,m,d){with(new Date(y,m-1,d))return((getDate()==d)&&(getMonth()==m-1))}
function isEmpty(str){strObj = new String(str); r = /(\s+)/g; strObj = strObj.replace(r,""); return (strObj.length == 0);}
function isChecked(str){ alert(str); return true; }
//function isEmail(str){ with(new RegExp("^[A-Za-z0-9](([_\.\-]?[a-zA-Z0-9]+)*)@([A-Za-z0-9]+)(([\.\-]?[a-zA-Z0-9]+)*)\.([A-Za-z]{2,})$")) return(test(str));}
function isEmail(str){
	supported=0;
	if(window.RegExp){
		tempStr="a";
		tempReg=new RegExp(tempStr);
		if(tempReg.test(tempStr))supported=1;
	}
	if(!supported)
		return(str.indexOf(".")>2)&&(str.indexOf("@")>0);
	r1=new RegExp("(@.*@)|(\\.\\.)|(@\\.)|(^\\.)");
	r2=new RegExp("^.+\\@[a-zA-Z0-9\\-\\.]+\\.([a-zA-Z]{2,4}|[0-9]{1,4})([ ]*)$");

	return(!r1.test(str)&&r2.test(str));
}



/**********************************************************************
FormatNumber(num,decimalNum,bolCommas,bolLeadingZero,bolParens)
	parameters:
		num - the number to format
		decimalNum - the number of decimal places to format the number to
		bolCommas - put commas as number separators.
		bolLeadingZero - true / false - display a leading zero for
										numbers between -1 and 1
		bolParens - true / false - use parenthesis around negative numbers
 	return:
		The formatted number!
 **********************************************************************/
function FormatNumber(num,decimalNum,bolCommas,bolLeadingZero,bolParens)
{ 
	if (isNaN(parseInt(num))) return "NaN";

	var tmpNum = num;
	var iSign = num < 0 ? -1 : 1; // Get sign of number
	
	// Adjust number so only the specified number of numbers after the decimal point are shown.
	tmpNum *= Math.pow(10,decimalNum);
	tmpNum = Math.round(Math.abs(tmpNum))
	tmpNum /= Math.pow(10,decimalNum);
	tmpNum *= iSign; // Readjust for sign

	var tmpNumStr = new String(tmpNum);

	// See if we need to strip out the leading zero or not.
	if (!bolLeadingZero && num < 1 && num > -1 && num != 0)
		if (num > 0)
			tmpNumStr = tmpNumStr.substring(1,tmpNumStr.length);
		else
			tmpNumStr = "-" + tmpNumStr.substring(2,tmpNumStr.length);
		
	// See if we need to put in the commas
	if (bolCommas && (num >= 1000 || num <= -1000)) {
		var iStart = tmpNumStr.indexOf(".");
		if (iStart < 0)
			iStart = tmpNumStr.length;

		iStart -= 3;
		while (iStart >= 1) {
			tmpNumStr = tmpNumStr.substring(0,iStart) + "," + tmpNumStr.substring(iStart,tmpNumStr.length)
			iStart -= 3;
		}		
	}

	// See if we need to use parenthesis
	if (bolParens && num < 0)
		tmpNumStr = "(" + tmpNumStr.substring(1,tmpNumStr.length) + ")";

	return tmpNumStr;		// Return our formatted string!
}

function fieldAdvance(obj,dir) 
{
	try
	{
		var maxLen = obj.maxLength;
		var curLen = obj.value.length;
		var parentForm = obj.form;
		var id;
		var nextElement;
		var prevElement;
		
		if (curLen >= maxLen) 
		{
			id = getElementID(obj);
			nextElement = (id + 1) % parentForm.elements.length;
			prevElement = (id - 1) % parentForm.elements.length;				
			parentForm.elements[nextElement].focus();
			FieldActiveHighlight(parentForm.elements[nextElement]);

			//alert('c:' + obj.name);
			//alert('p:' + parentForm.elements[prevElement].name);
			//alert('n:' + parentForm.elements[nextElement].name);
		}
		/*
		if (curLen == 0 && isBackspace && (obj.value == previousValue))
		{
			id = getElementID(obj);
			nextElement = (id + 1) % parentForm.elements.length;
			prevElement = (id - 1) % parentForm.elements.length;				
			parentForm.elements[prevElement].focus();
			FieldActiveHighlight(parentForm.elements[prevElement]);
		}
		*/
	}
	catch (ex)
	{
	}
			
}

function getElementID(obj)
{
	var i;
	var parentForm = obj.form;
	
	for (i = 0; i < parentForm.elements.length; i++)
		if (obj == parentForm.elements[i])
			break;
	return i;	
}

function ToggleSubmit(theForm, IsEnabled)
{
	var tempobj;
	try
	{
		if (document.all || document.getElementById) // IE & NS6
		{
			//screen thru every element in the form, and hunt down "submit" and "reset"
			for (i = 0; i < theForm.length; i++)
			{
				tempobj = theForm.elements[i];
				if ( tempobj.type.toLowerCase() == "submit" || tempobj.type.toLowerCase() == "reset")
					tempobj.disabled = !IsEnabled;
			}
		}
	}
	catch (ex)
	{
	}
}

//Function to check whether element clicked is form element
function checkel(which)
{
	if (which.style && intended.test(which.tagName) )
	{
		if (isNS6 && (eventobj.nodeType == 3) )
			eventobj = eventobj.parentNode.parentNode
		return true
	}
	else
		return false
}

function FieldErrorHighlight(field) {

	var obj = field;
	
	if (field.tagName.toLowerCase() == 'input')
	{
		obj.style.borderColor = 'red';
		obj.style.borderStyle = 'solid';
		obj.style.borderWidth = '1px;';
	}
	else if (field.tagName.toLowerCase() == 'select')
	{
		obj.style.color = 'red';
	}

}

function FieldRemoveHighlight(field) {

	var obj = field;
	
	if (field.tagName.toLowerCase() == 'input')
	{
		obj.style.borderColor = '';
		obj.style.borderStyle = '';
		obj.style.borderWidth = '';
	}
	else if (field.tagName.toLowerCase() == 'select')
	{
		obj.style.color = '';
	}

}

function FieldActiveHighlight(obj)
{

return;

	if (previousObj != '')
	{
		if (previousObj != obj)
		{
			if (checkel(previousObj))
			{
				previousObj.className = '';
			}
			previousObj = obj;
			if (checkel(obj))
			{
				obj.className = 'ActiveElement';
			}
		}
	}
	else
	{
		previousObj = obj
		if (checkel(obj))
		{
			obj.className = 'ActiveElement';
		}
	}
}
