  function addEvent(obj, evType, fn)
  {
	//alert("addEvent");
   if (obj.addEventListener){
      obj.addEventListener(evType, fn, true);
      return true;
   } else if (obj.attachEvent){
      var r = obj.attachEvent("on"+evType, fn);
      return r;
   } else {
      return false;
   }
  }


  function getEventSrc(e) {
   /* Cookie-cutter code to find the source of the event */
    if (typeof e == 'undefined') {
      var e = window.event;
    }
    var source;
    if (typeof e.target != 'undefined') {
       source = e.target;
    } else if (typeof e.srcElement != 'undefined') {
       source = e.srcElement;
    }
    return source;
    /* End cookie-cutter code */
  }
  function onInputFocus(eventObj) 
  {
		var inputBox=getEventSrc(eventObj);
		if (inputBox==null) 
		{
				return;
		}
		revertToOriginalStyle(inputBox);
		//alert(inputBox.name);
		//revertToOriginalStyle(getInputLabel(inputBox.name));
		if (inputBox.value == inputBox.getAttribute("title")) 
		{
				inputBox.value="";
		}
  }
  
  function onInputBlur(eventObj) 
  {
	var inputBox=getEventSrc(eventObj);
	if (inputBox==null) {
		return;
	}
	if (inputBox.value == "" && inputBox.getAttribute("title") != "") 
	{
		setEmptyInputClass(inputBox);
		inputBox.value=inputBox.getAttribute("title");
	}
  }

 function onFormSubmit(eventObj) 
 {
	var submittedForm=getEventSrc(eventObj);
	if (submittedForm==null) 
	{
		return; 
	}
	var inputElements = submittedForm.getElementsByTagName("input")+submittedForm.getElementsByTagName("textarea");
	for (var i=0; i<inputElements.length; i++) 
	{
		var inputElement = inputElements[i];
		removeDefaultText(inputElement);
	 }
	return false;
 }
  
function setEmptyInputClass(inputElement) 
{
	changeStyle(inputElement,"EmptyInput");
}


function useDefaultText(inputElement) 
{
	if (inputElement.nodeName.toLowerCase()=="input" && inputElement.getAttribute("type")=="text" && inputElement.getAttribute("title") && inputElement.getAttribute("title").length && ((inputElement.value=="")||(inputElement.value==inputElement.getAttribute("title"))) ) 
	{	
        inputElement.value=inputElement.getAttribute("title");
        return true;
    } 
    else if(inputElement.nodeName.toLowerCase()=="textarea" && inputElement.getAttribute("title") != "")
    {
		inputElement.value=inputElement.getAttribute("title");
		return true;
    }
    else 
    {
        return false;
    }
}

function removeDefaultText(inputElement) 
{
	if(null != inputElement)
	{
		if ((inputElement.nodeName.toLowerCase()=="input" || inputElement.nodeName.toLowerCase()=="textarea") && inputElement.getAttribute("type")=="text" && inputElement.getAttribute("title") && inputElement.value==inputElement.getAttribute("title")) 
		{
			inputElement.value="";
		}
	}
}
  function defaultInputText() {
   if (!document.getElementsByTagName) return;
   var inputElements = document.getElementsByTagName("input");
   for (var i=0; i<inputElements.length; i++) {
    var inputElement = inputElements[i];
    if (useDefaultText(inputElement)) {
        addEvent(inputElement, "focus", onInputFocus);
        addEvent(inputElement, "blur", onInputBlur);
        addEvent(inputElement, "click", onInputFocus);
       // inputElement.setAttribute('autocomplete','off');
	setEmptyInputClass(inputElement);

    }
   }
   for (var i = 0; i < document.forms.length; i++) {
    //addEvent(document.forms[i], "submit", onFormSubmit);
   }

  }
  
  function defaultTextAreaText()
  {
	if (!document.getElementsByTagName) return;
	var textareaElements = document.getElementsByTagName("textarea");
	
	for (var i=0; i<textareaElements.length; i++) 
	{
	//alert("defaultTextAreaText - "+textareaElements[i].getAttribute("title"));
		var textareaElement = textareaElements[i];
		if (useDefaultText(textareaElement)) 
		{
			addEvent(textareaElement, "focus", onInputFocus);
			addEvent(textareaElement, "blur", onInputBlur);
			addEvent(textareaElement, "click", onInputFocus);
			// inputElement.setAttribute('autocomplete','off');
			setEmptyInputClass(textareaElement);
		}
	}  
  }
  
  function setSubmitButtonRollovers() 
  {
  	var buttonElements = document.getElementsByTagName("input");
	for (var i=0; i<buttonElements.length; i++) 
	{
		var buttonElement = buttonElements[i];	
		if ( (buttonElement.getAttribute("type")=="submit") 
			&& (buttonElement.className.indexOf("submit")==0) ) 
		{
			addEvent(buttonElement, "mouseover", onButtonMouseOver);
			addEvent(buttonElement, "mouseout", onButtonMouseOut);
		}
	}
}
function onButtonMouseOver(eventObj) {
	var buttonElement=getEventSrc(eventObj);
	changeStyle(buttonElement,"Hover");
	
}
function onButtonMouseOut(eventObj) {
	var buttonElement=getEventSrc(eventObj);
	revertToOriginalStyle(buttonElement);
}

function changeStyle(element,newStyleSuffix) 
{
	if(null != element)
	{
		if (element.originalClass==null || element.originalClass.length==0) {
			if (element.className.length>0) {
				element.originalClass=element.className;
			} else {
				element.originalClass=" ";
			}
			
		}
		if ((element.originalClass.length>0) && (element.originalClass != " ") ) {
			element.className = element.originalClass+" "+element.originalClass+newStyleSuffix;
		} else {
			element.className = newStyleSuffix;
		}
	}
}

function revertToOriginalStyle(element) {
	if (element != null && null != element.originalClass && element.originalClass.length>0) {
		element.className =element.originalClass;
	}
}

var validationForms={};

function validateForm(parameter) 
{
  var eventObj = getEventSrc(parameter);
  var formObj=parameter;
  if (typeof(parameter)=="string") {
  	formObj=document.forms[parameter];
  }
   if ( (typeof(formObj) != "object") || (!formObj.nodeName) ||  (formObj.nodeName.toLowerCase() != "form" ) ) {
	formObj=eventObj;
   }
   var submittedForm=formObj;
   var formname = submittedForm.name;
   var formfieldlist = validationForms[formname];
   if (formfieldlist == null) {
   	// no fields are there to be validated
   	return true;
   } else {
   	var formvalid = true;
   	var firstErrorField = null;
   	// iterate through each field
	for (var fieldname in formfieldlist) 
	{
		// execute each validation function
		var validationObjectList = formfieldlist[fieldname];
		var inputObject = submittedForm[fieldname];
		if(null != inputObject)
		{
     			removeDefaultText(inputObject);
     			var in22putLabel=null;
			var fieldValid=true;
			for (var i=0;fieldValid && i<validationObjectList.length;i++) {
				// if we get a false result set the style of the input
				if (!validationObjectList[i]["validationFunction"](inputObject)) {
					fieldValid=false;
					inputLabel = validationObjectList[i]["label"]
				} 
			}
			if (!fieldValid) {
				formvalid=false;
				useDefaultText(inputObject);
				if (firstErrorField==null) {
					firstErrorField=inputObject;
					firstErrorField.focus();

				}
				changeStyle(inputObject,"FormFieldError");
				changeStyle(inputLabel,"FormFieldError");
			} else {
				revertToOriginalStyle(inputObject);
			}
		}		
	}
	// return the result
	
	if (!formvalid && typeof parameter.cancelable != 'undefined') {
	    	parameter.preventDefault();
	    	parameter.preventDefault();
	 } 
	return formvalid;
   }
   
}

function requiredField(inputObj) {
	if(null != inputObj)
	{
		return (inputObj.value.length>0);
	}
	return false;
}
function requiredDropDownField(inputObj) {
	if(null != inputObj)
	{
		return (inputObj.selectedIndex>0);
	}
	return false;
}
function emailField(inputObj) {
	var str = inputObj.value;
	var at="@";
	var dot=".";
	var lat=str.indexOf(at);
	var lstr=str.length;
	var ldot=str.indexOf(dot);
	if (str.indexOf(at)==-1){
	   return false;
	}

	if (str.indexOf(at)==-1 || str.indexOf(at)==0 || str.indexOf(at)==lstr){
	   return false;
	}

	if (str.indexOf(dot)==-1 || str.indexOf(dot)==0 || str.indexOf(dot)==lstr){
	    return false;
	}

	 if (str.indexOf(at,(lat+1))!=-1){
	    return false;
	 }

	 if (str.substring(lat-1,lat)==dot || str.substring(lat+1,lat+2)==dot){
	    return false;
	 }

	 if (str.indexOf(dot,(lat+2))==-1){
	    return false;
	 }

	 if (str.indexOf(" ")!=-1){
	    return false;
	 }
 	return true;
}

function getInputLabel(inputname)
{
	if (!document.getElementsByTagName) return null;
  	var labelElements = document.getElementsByTagName("label");
	for (var i=0; i<labelElements.length; i++) 
	{
		var labelElement = labelElements[i];
		if (labelElement.attributes["for"].value ==inputname)
		{
			return labelElement;
		}
	}
	
	return null;
}


function createValidatedInputObj(inputname,validationFunction)
{
	var validatedInputObj = new Object();
	validatedInputObj["inputname"] = inputname;
	validatedInputObj["validationFunction"] = validationFunction;
	validatedInputObj["label"] = getInputLabel(inputname);
	
	return validatedInputObj;
}


function addValidatedInput(formname,inputname,validationFunction) {
	//alert("addValidatedInput "+inputname);
	/*
	Adds a field on a form to the list of fields which must be validated
	formname - the name of the form as specified in the name attribute of the form tag
	inputname - the name of the form element as specified in the name attribute of the input/select/textarea tag
	validationFunction - the function which will be called to check the field this function should be in the form
				function myValidationFunction(eventObj) {
					// eventObj is the object for the input/select/textarea item
					var valid = (SOMETHING WITH eventOBJ)
					if ( valid) {
						return true;
					} else {
						return false;
					}
				}
	
	*/
	if (validationForms[formname]==null) {
		validationForms[formname]={};
  		addEvent(document.forms[formname], "submit", validateForm);
	}
	if (validationForms[formname][inputname]==null) {
		validationForms[formname][inputname]=[];
	}
	var vlInputObj = createValidatedInputObj(inputname,validationFunction);
	//validationForms[formname][inputname][validationForms[formname][inputname].length]=validationFunction;
	validationForms[formname][inputname][validationForms[formname][inputname].length]=vlInputObj;
}
  addEvent(window, "load", defaultInputText);
  addEvent(window, "load", defaultTextAreaText);
  addEvent(window, "load", setSubmitButtonRollovers);
  
