//fShowDebug();

var vStateAbbreviations = ',AL,AK,AS,AZ,AR,CA,CO,CT,DE,DC,FL,GA,GU,HI,ID,IL,IN,IA,KS,KY,LA,ME,MD,MH,MA,MI,FM,MN,MS,MO,MT,NE,NV,NH,NJ,NM,NY,NC,ND,MP,OH,OK,OR,PW,PA,PR,RI,SC,SD,TN,TX,UT,VT,VA,VI,WA,WV,WI,WY';



function fAJAXTransport(vDataString, vReturnFunction, vUrl)
{
	fWriteDebug("AJAX Starting Up", "AJAX");
	http_request = false;
 	if (window.XMLHttpRequest) 
	{
		http_request = new XMLHttpRequest();
		if (http_request.overrideMimeType) 
		{
			http_request.overrideMimeType('text/xml');
		}
	} 
	else if (window.ActiveXObject) 
	{
		try 
		{
			http_request = new ActiveXObject("Msxml2.XMLHTTP");
		} 
		catch (e) 
		{
			try
			{
			http_request = new ActiveXObject("Microsoft.XMLHTTP");
			}
			catch (e)
			{
			}
		}
        }
	if (!http_request) 
	{
		fWriteDebug("Unable to create AJAX connection with server.", "AJAX");
		return false;
	}
	try
	{
		http_request.open('POST', vUrl, true);
	}
	catch (e)
	{
		alert(e);
	}
 	try
	{
		http_request.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded; charset=UTF-8'); 
	}
	catch(e)
	{
		alert(e);
	}
 	http_request.onreadystatechange = function() 
	{
		//if (true)
		if (http_request.readyState == 4)
		{
			fWriteDebug(http_request.responseText, "AJAX RECIEVE");
			//eval(vReturnFunction);
		}
	}
	try
	{
		fWriteDebug("Data:<br>" + vDataString, "AJAX SEND" + vUrl);
	}
	catch(e)
	{
		//null
	}
			//this is a dave hack
			eval(vReturnFunction);
	http_request.send(vDataString);
}

function fVerifyEmail(vEmailAddress)
{
	// assume an email address cannot start with an @ or white space, but it
	// must contain the @ character followed by groups of alphanumerics and '-'
	// followed by the dot character '.'
	// It must end with 2 or 3 alphanumerics.
	var alnum="a-zA-Z0-9";
	exp="^[^@\\s]+@(["+alnum+"+\\-]+\\.)+["+alnum+"]["+alnum+"]["+alnum+"]?$";
	emailregexp = new RegExp(exp);

	result = vEmailAddress.match(emailregexp);
	if (result != null)
	{
		return true;
	}
	else
	{
		return false;
	}
}

function fGenTextInput(vID, vRows, vCols, vKeyUp, vValue)
{
	var vReturnData = '<textarea id="'+vID+'" rows="'+vRows+'" cols="'+vCols+'" onKeyUp="'+vKeyUp+'" value="'+vValue+'">'+vValue+'</textarea>';
	return vReturnData;
}

function fGenSelect(vID, vValues, vText, vSelectedValue, vOnChange, vTabIndex)
{
	var vOptions = "";
	vValues = vValues.split(",");
	vText = vText.split(",");
	
	for(var i=0; i < vValues.length; i++)
	{
		 if(vValues[i] == vSelectedValue)
		 {
			vOptions += '<option selected value="'+vValues[i]+'">'+vText[i]+'</option>';
		 }
		else
		{
			vOptions += '<option value="'+vValues[i]+'">'+vText[i]+'</option>';
		}
	}
	var vReturnData = '<select id="'+vID+'" tabindex="'+vTabIndex+'" onChange="'+vOnChange+'">'+vOptions+'</select>';
	//This replace is used in case you actually want a comma in your list.  Yes I know I should have used another seperator from the start but oh well.
	vReturnData = vReturnData.replace(/&/g,",");
	return vReturnData;
}

function fGenCheckBox(vID, vLable, vOnClick, vOnOff)
{
	vTempHTML =  ' <input type="checkbox" id="'+vID+'" onClick="'+vOnClick+'"';
	if(vOnOff)
	{
		vTempHTML += ' checked ';
	}
	vTempHTML += ' >' + vLable;
	return vTempHTML;
}

function fWriteDebug(vDebugInfo, vTitle) 
{
	if(!vTitle)
	{
		vTitle = "";
	}
	if(window.top.debugWindow && ! window.top.debugWindow.closed) 
	{
		//window.top.debugWindow.document.write(text+"\n");
		vTempDebugInfo = window.top.debugWindow.document.getElementById("debug").innerHTML;
		
		vTempLength = vDebugInfo.length;
		vNewDebugInfo = "";
		if(vTempLength > 130 && false)
		{
			vNumberOfBreaks = Math.ceil(vTempLength/130);
			for(i=0; i < vNumberOfBreaks; i++)
			{
				if(i*130 + 130 > vTempLength)
				{
					vNewDebugInfo += vDebugInfo.substring(i*130, vTempLength);
				}
				else
				{
					vNewDebugInfo += vDebugInfo.substring(i*130, (i+1)*130) + "<br>";
				}
			}
		}
		else
		{
			vNewDebugInfo = vDebugInfo;
		}
		window.top.debugWindow.document.getElementById("debug").innerHTML = vTitle + '<br>' + vNewDebugInfo + '<br><br><br>' + vTempDebugInfo;
	}
}

function fShowDebug()
{
	if(window.top.debugWindow && ! window.top.debugWindow.closed)
	{
		window.top.debugWindow.document.getElementById("debug").innerHTML = "";
	}
	else
	{
		window.top.debugWindow =window.open("","Debug","left=0,top=0,width=950,height=600,scrollbars=yes,"+"status=yes,resizable=yes");
		window.top.debugWindow.opener = self;
		window.top.debugWindow.document.open();
		window.top.debugWindow.document.write("<HTML><HEAD><TITLE>Debug Window</TITLE><style type='text/css'>.row{background-color: #DDDDDD;}.row2{background-color: #DDDDFF;}</style></HEAD><BODY><div id='debug'></div></BODY></HTML>");
		window.top.debugWindow.document.close();
	}
}

function fTextOnly(vString)
{
	re = new RegExp("[^a-zA-Z ]", "g");
	if (re.test(vString)) 
	{
		return false;
	}
	return true;
}

function fNumbersOnly(vString)
{
	re = new RegExp("[\D]", "g");
	if (re.test(vString))
	{
		return false;
	}
	return true;
}

function fNumLetOnly(vString)
{
	re = new RegExp("[^a-zA-Z0-9 ]", "g");
	if (re.test(vString)) 
	{
		return false;
	}
	return true;
}

function fVerifyPhone(vString)
{
	re = new RegExp("^[0-9]{3}-[0-9]{3}-[0-9]{4}$|^[0-9]{1}-[0-9]{3}-[0-9]{3}-[0-9]{4}$", "");
	if (re.test(vString)) 
	{
		return true;
	}
	return false;
}

function fVerifyZipCode(vString)
{
	re = new RegExp("^[0-9]{5}$|^[0-9]{5}-[0-9]{4}$", "");
	if (re.test(vString)) 
	{
		return true;
	}
	return false;
}

function fVerifyScreenName(vString)
{
	re = new RegExp("[^a-zA-Z0-9 _.]", "g");
	if (re.test(vString)) 
	{
		return false;
	}
	return true;
}

function fVerifyStreetAddress(vString)
{
	re = new RegExp("[^a-zA-Z0-9 #.@(),]", "g");
	if (re.test(vString)) 
	{
		return false;
	}
	return true;
}

function fBlockLock(vID, vExpression, vMaxLength)
{
	var vTarget = document.getElementById(vID);
	switch(vExpression)
	{
		case "text":
		{
			var vRegEx = new RegExp("[^ a-zA-Z]", "g");
			break;
		}
		case "numbers":
		{
			var vRegEx = new RegExp("[^0-9 ]", "g");
			break;
		}
		case "textnumbers":
		{
			var vRegEx = new RegExp("[^a-zA-Z0-9 ]", "g");
			break;
		}
		case "screenname":
		{
			var vRegEx = new RegExp("[^a-zA-Z0-9 _.]", "g");
			break;
		}
		case "address":
		{
			var vRegEx = new RegExp("[^a-zA-Z0-9 #.@(),-]", "g");
			break;
		}
		case "email":
		{
			var vRegEx = new RegExp("[^a-zA-Z0-9@.-_]", "g");
			break;
		}
		default:
		{
			var vRegEx = new RegExp("[^a-zA-Z0-9]", "g");
			break;
		}
	}
	
	if(vRegEx.test(vTarget.value))
	{
		vTarget.value = vTarget.value.replace(vRegEx, '');
		fErrorFlashOn(vID);
	}
}

function fErrorFlashOn(vID)
{
	var vTarget = document.getElementById(vID);
	vTarget.style.backgroundColor = "#ff0000";
	setTimeout('fErrorFlashOff(\''+vID+'\')', 200);
}

function fErrorFlashOff(vID)
{
	var vTarget = document.getElementById(vID);
	vTarget.style.backgroundColor = "#ffffff";
}

function fCheckRequired(vIDArray)
{
	for(var i=0; i<vIDArray.length; i++)
	{
		var vTarget = document.getElementById(vIDArray[i]);
		if(vTarget.value && vTarget.value == null || vTarget.value == '')
		{
			vTarget.focus();
			fErrorFlashOn(vIDArray[i]);
			return false;
		}
	}
	return true;
}
