function defineFieldType( fieldName, fieldType ) {

	addEvent(window, "load", function() {
		var thisTag = document.getElementById( fieldName );
		switch ( fieldType.toLowerCase() ) {
			case 'date':
				thisTag.value = (thisTag.value=='') ? "(mm/dd/yyyy)": fixDate(thisTag.value);
				thisTag.maxLength = 10;
				addEvent(thisTag, "blur", blurDate);
				addEvent(thisTag, "focus", focusDate);
				addEvent(thisTag, "keypress", keypressDate);
			break;
			case 'phone':
				thisTag.maxLength = 14;
				addEvent(thisTag, "change", changePhone);
				addEvent(thisTag, "keypress", keypressPhone);
			break;
			case 'ssn':
				thisTag.maxLength = 11;
				addEvent(thisTag, "change", changeSSN);
				addEvent(thisTag, "keypress", keypressSSN);
			break;
			case 'zipcode':
				thisTag.maxLength = 10;
				addEvent(thisTag, "change", changeZIPCode);
				addEvent(thisTag, "keypress", keypressZIPCode);	
			break;
		}
	});

}


/***** BOF Date Handlers *****/
function blurDate(e) {
	obj = window.event ? window.event.srcElement : e ? e.target : null;
	obj.maxLength = (obj.value=='') ? 12 : 10;
	obj.value = (obj.value=='') ? "(mm/dd/yyyy)": fixDate(obj.value);
}
function focusDate(e) {
	obj = window.event ? window.event.srcElement : e ? e.target : null;
	obj.maxLength = 10;
	if (obj.value=='(mm/dd/yyyy)')
		obj.value = "";
}
function keypressDate(evnt) {
//	alert(evnt.which);

	if( validKeys(evnt, '1234567890/-.', Array(0,8,9,13,27,37,38,39,40)) )
		return true;
	
		if(evnt.preventDefault)
			evnt.preventDefault();
		return false;
}

function fixDate(datevalue) {

	cleandv = datevalue.replace(/\./g,"/");
	cleandv = cleandv.replace(/-?\\/g,"/");

	if(cleandv.indexOf("/") == -1 && cleandv.length >= 6)
		cleandv = cleandv.replace(/(..)(..)(.+)/,"$1/$2/$3");

	var dtmilli = Date.parse(cleandv);
	if(isNaN(dtmilli)) {
		return datevalue;
	}

	var now = new Date();
	var dt = new Date(dtmilli);
	var da=cleandv.split("/");
	if(da[2] <= (now.getYear() % 100))
		dt.setFullYear(2000 + parseInt(da[2]));
		
	return (dt.getMonth()+1) + "/" + dt.getDate() + "/" + dt.getFullYear();
}
/***** EOF Date Handlers *****/

/***** BOF Phone Handlers *****/
function changePhone(e) {
	obj = window.event ? window.event.srcElement : e ? e.target : null;
	phone = obj.value.replace(/-/g,"");
	phone = phone.replace(/1?\D*(...)\D*(...)\D*(....)/,"($1) $2-$3");
	if(phone.length == 14) 
		obj.value = phone;
}
function keypressPhone(evnt) {
	if( validKeys(evnt, '1234567890-() ', Array(0,8,9,13,27,37,38,39,40)) )
		return true;
	
		if(evnt.preventDefault)
			evnt.preventDefault();
		return false;
}
/***** EOF Phone Handlers *****/

/***** BOF SSN Handlers *****/
function changeSSN(e) {
	obj = window.event ? window.event.srcElement : e ? e.target : null;
	ssn = obj.value.replace(/-/g,"");
	ssn = ssn.replace(/(...)(..)(....)/,"$1-$2-$3");
	if(ssn.length == 11) 
		obj.value = ssn;
}
function keypressSSN(evnt) {
	if( validKeys(evnt, '1234567890-', Array(0,8,9,13,27,37,38,39,40)) )
		return true;
	
		if(evnt.preventDefault)
			evnt.preventDefault();
		return false;
}
/***** EOF SSN Handlers *****/

/***** BOF ZIP Code Handlers *****/
function changeZIPCode(e) {
	obj = window.event ? window.event.srcElement : e ? e.target : null;
	zip = obj.value.replace(/-/g,"");
	zip = zip.replace(/(.....)(....)/,"$1-$2");
	if(zip.length == 10) 
		obj.value = zip;
}
function keypressZIPCode(evnt) {
	if( validKeys(evnt, '1234567890-', Array(0,8,9,13,27,37,38,39,40)) )
		return true;
	
		if(evnt.preventDefault)
			evnt.preventDefault();
		return false;
}
/***** EOF ZIP Code Handlers *****/


function addEvent(elm, evType, fn, useCapture)
// addEvent and removeEvent
// cross-browser event handling for IE5+,  NS6 and Mozilla
// By Scott Andrew
{
  if (elm.addEventListener){
    elm.addEventListener(evType, fn, useCapture);
    return true;
  } else if (elm.attachEvent){
    var r = elm.attachEvent("on"+evType, fn);
    return r;
  } else {
    //alert("Handler could not be removed");
  }
}

function validKeys(evt, valid, validCodes) {
//	keycode = evt.charCode? evt.charCode : evt.keyCode;

if(evt && evt.which) 
		keycode = evt.which;
	else
		keycode = evt.keyCode;

//alert(keycode);

	key = String.fromCharCode(keycode)
	
	// Check for vaild keypress
	if (valid.indexOf(key) != -1)
		return true;

	// control keys
	if (keycode==null)
		return true;


	for(i in validCodes) {
		if (keycode == validCodes[i])
			return true;
	}
	// Invalid Key
	return false;
}