window.onload = attachFormHandlers;
var gShow; //variable holding the id where feedback will be sent to.
var emailGShow;
var sUrl = "_functions/AjaxFieldValidate.php";//url is the page which will be processing all of the information

function attachFormHandlers()
{
	var form = document.getElementById('hshcForm') 
	if (form){
		
		if (document.getElementsByTagName)//make sure were on a newer browser
		{
			var elements = document.getElementsByTagName("input");
		    for (i=0; i < elements.length; i++) {
		        if (elements[i].type != "button" && elements[i].type != "submit" && elements[i].type != "reset") {
		            elements[i].onfocus=function() {addClassName(this,'active',false);};
		            elements[i].onblur=function() {removeClassName(this,'active');};
		        }
			}

			var elements = document.getElementsByTagName("textarea");
		    for (i=0; i < elements.length; i++) {
	            elements[i].onfocus=function() {addClassName(this,'active',false);};
	            elements[i].onblur=function() {removeClassName(this,'active');};
			}
			
			var objInput = getElementsByClassName(document, 'input', 'validate');
			for (var iCounter=0; iCounter<objInput.length; iCounter++){
				objInput[iCounter].onblur = function(){
					removeClassName(this,'active');
					validateMe(this);
				} //attach the onchange to each input field
			}
	
			var objTextarea = getElementsByClassName(document, 'textarea', 'validate');
			for (var iCounter=0; iCounter<objTextarea.length; iCounter++){
				objTextarea[iCounter].onblur = function(){
					removeClassName(this,'active');
					validateMe(this);
				} //attach the onchange to each textarea field
			}
		}
		
	}//no form - do nothing
}




/*validateMe is the function called with onblur each time the user leaves the input box
passed into it is the value entered, the rules (which you could create your own), and the id of the area the results will show in*/
function validateMe(objInput) {
		sVal = encodeURIComponent(objInput.value); //get value inside of input field
		sRules = objInput.className.split(' '); // get all the rules from the input box classname
		sRequired = sRules[1]; // determines if field is required or not
		sTypeCheck = sRules[2]; //typecheck are additional validation rules (ie. email, phone, date)
			
	if (sTypeCheck!='email'){
		gShow = sRules[3]; //gShow is the span id where feedback is sent to.
		AjaxRequest.get({
			'url':sUrl + '?val=' + (sVal) + "&sRequired=" + (sRequired) + "&sTypeCheck=" + sTypeCheck,
			'onSuccess':function(http){
				sResults = http.responseText.split("|"); //results is now whatever the feedback from the php page was
				ruleSpan = document.getElementById(gShow);
				ruleSpan.innerHTML = sResults[0];
			}
		  });
		
	}else{
		emailGShow = sRules[3]; //gShow is the span id where feedback is sent to.
		ruleSpan = document.getElementById(emailGShow);
    	ruleSpan.innerHTML = '<span class="processing">processing..</span>';
		AjaxRequest.get({
			'url':sUrl + '?val=' + (sVal) + "&sRequired=" + (sRequired) + "&sTypeCheck=" + sTypeCheck,
			'onSuccess':function(http){
				sResults = http.responseText.split("|"); //results is now whatever the feedback from the php page was
				ruleSpan = document.getElementById(emailGShow);
				ruleSpan.innerHTML = sResults[0];
			}
		  });
	}
	
}

//-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
function disableEnterKey(e)
{
var key = (window.event) ? event.keyCode : e.which;
return (key != 13);
}
 
//http://www.robertnyman.com/2005/11/07/the-ultimate-getelementsbyclassname/
function getElementsByClassName(oElm, strTagName, strClassName){
	var arrElements = (strTagName == "*" && oElm.all)? oElm.all : oElm.getElementsByTagName(strTagName);
	var arrReturnElements = new Array();
	strClassName = strClassName.replace(/\-/g, "\\-");
	var oRegExp = new RegExp("(^|\\s)" + strClassName + "(\\s|$)");
	var oElement;
	for(var i=0; i<arrElements.length; i++){
		oElement = arrElements[i];		
		if(oRegExp.test(oElement.className)){
			arrReturnElements.push(oElement);
		}	
	}
	return (arrReturnElements)
}

//http://www.bigbold.com/snippets/posts/show/2630
function addClassName(objElement, strClass, blnMayAlreadyExist){
   if ( objElement.className ){
      var arrList = objElement.className.split(' ');
      if ( blnMayAlreadyExist ){
         var strClassUpper = strClass.toUpperCase();
         for ( var i = 0; i < arrList.length; i++ ){
            if ( arrList[i].toUpperCase() == strClassUpper ){
               arrList.splice(i, 1);
               i--;
             }
           }
      }
      arrList[arrList.length] = strClass;
      objElement.className = arrList.join(' ');
   }
   else{  
      objElement.className = strClass;
      }
}

//http://www.bigbold.com/snippets/posts/show/2630
function removeClassName(objElement, strClass){
   if ( objElement.className ){
      var arrList = objElement.className.split(' ');
      var strClassUpper = strClass.toUpperCase();
      for ( var i = 0; i < arrList.length; i++ ){
         if ( arrList[i].toUpperCase() == strClassUpper ){
            arrList.splice(i, 1);
            i--;
         }
      }
      objElement.className = arrList.join(' ');
   }
}

function AjaxRequest(){var req=new Object();req.timeout=null;req.generateUniqueUrl=true;req.url=window.location.href;req.method="GET";req.async=true;req.username=null;req.password=null;req.parameters=new Object();req.requestIndex=AjaxRequest.numAjaxRequests++;req.responseReceived=false;req.groupName=null;req.queryString="";req.responseText=null;req.responseXML=null;req.status=null;req.statusText=null;req.aborted=false;req.xmlHttpRequest=null;req.onTimeout=null;req.onLoading=null;req.onLoaded=null;req.onInteractive=null;req.onComplete=null;req.onSuccess=null;req.onError=null;req.onGroupBegin=null;req.onGroupEnd=null;req.xmlHttpRequest=AjaxRequest.getXmlHttpRequest();if(req.xmlHttpRequest==null){return null}req.xmlHttpRequest.onreadystatechange=function(){if(req==null||req.xmlHttpRequest==null){return}if(req.xmlHttpRequest.readyState==1){req.onLoadingInternal(req)}if(req.xmlHttpRequest.readyState==2){req.onLoadedInternal(req)}if(req.xmlHttpRequest.readyState==3){req.onInteractiveInternal(req)}if(req.xmlHttpRequest.readyState==4){req.onCompleteInternal(req)}};req.onLoadingInternalHandled=false;req.onLoadedInternalHandled=false;req.onInteractiveInternalHandled=false;req.onCompleteInternalHandled=false;req.onLoadingInternal=function(){if(req.onLoadingInternalHandled){return}AjaxRequest.numActiveAjaxRequests++;if(AjaxRequest.numActiveAjaxRequests==1&&typeof(window['AjaxRequestBegin'])=="function"){AjaxRequestBegin()}if(req.groupName!=null){if(typeof(AjaxRequest.numActiveAjaxGroupRequests[req.groupName])=="undefined"){AjaxRequest.numActiveAjaxGroupRequests[req.groupName]=0}AjaxRequest.numActiveAjaxGroupRequests[req.groupName]++;if(AjaxRequest.numActiveAjaxGroupRequests[req.groupName]==1&&typeof(req.onGroupBegin)=="function"){req.onGroupBegin(req.groupName)}}if(typeof(req.onLoading)=="function"){req.onLoading(req)}req.onLoadingInternalHandled=true};req.onLoadedInternal=function(){if(req.onLoadedInternalHandled){return}if(typeof(req.onLoaded)=="function"){req.onLoaded(req)}req.onLoadedInternalHandled=true};req.onInteractiveInternal=function(){if(req.onInteractiveInternalHandled){return}if(typeof(req.onInteractive)=="function"){req.onInteractive(req)}req.onInteractiveInternalHandled=true};req.onCompleteInternal=function(){if(req.onCompleteInternalHandled||req.aborted){return}req.onCompleteInternalHandled=true;AjaxRequest.numActiveAjaxRequests--;if(AjaxRequest.numActiveAjaxRequests==0&&typeof(window['AjaxRequestEnd'])=="function"){AjaxRequestEnd(req.groupName)}if(req.groupName!=null){AjaxRequest.numActiveAjaxGroupRequests[req.groupName]--;if(AjaxRequest.numActiveAjaxGroupRequests[req.groupName]==0&&typeof(req.onGroupEnd)=="function"){req.onGroupEnd(req.groupName)}}req.responseReceived=true;req.status=req.xmlHttpRequest.status;req.statusText=req.xmlHttpRequest.statusText;req.responseText=req.xmlHttpRequest.responseText;req.responseXML=req.xmlHttpRequest.responseXML;if(typeof(req.onComplete)=="function"){req.onComplete(req)}if(req.xmlHttpRequest.status==200&&typeof(req.onSuccess)=="function"){req.onSuccess(req)}else if(typeof(req.onError)=="function"){req.onError(req)}delete req.xmlHttpRequest['onreadystatechange'];req.xmlHttpRequest=null};req.onTimeoutInternal=function(){if(req!=null&&req.xmlHttpRequest!=null&&!req.onCompleteInternalHandled){req.aborted=true;req.xmlHttpRequest.abort();AjaxRequest.numActiveAjaxRequests--;if(AjaxRequest.numActiveAjaxRequests==0&&typeof(window['AjaxRequestEnd'])=="function"){AjaxRequestEnd(req.groupName)}if(req.groupName!=null){AjaxRequest.numActiveAjaxGroupRequests[req.groupName]--;if(AjaxRequest.numActiveAjaxGroupRequests[req.groupName]==0&&typeof(req.onGroupEnd)=="function"){req.onGroupEnd(req.groupName)}}if(typeof(req.onTimeout)=="function"){req.onTimeout(req)}delete req.xmlHttpRequest['onreadystatechange'];req.xmlHttpRequest=null}};req.process=function(){if(req.xmlHttpRequest!=null){if(req.generateUniqueUrl&&req.method=="GET"){req.parameters["AjaxRequestUniqueId"]=new Date().getTime()+""+req.requestIndex}var content=null;for(var i in req.parameters){if(req.queryString.length>0){req.queryString+="&"}req.queryString+=encodeURIComponent(i)+"="+encodeURIComponent(req.parameters[i])}if(req.method=="GET"){if(req.queryString.length>0){req.url+=((req.url.indexOf("?")>-1)?"&":"?")+req.queryString}}req.xmlHttpRequest.open(req.method,req.url,req.async,req.username,req.password);if(req.method=="POST"){if(typeof(req.xmlHttpRequest.setRequestHeader)!="undefined"){req.xmlHttpRequest.setRequestHeader('Content-type','application/x-www-form-urlencoded')}content=req.queryString}if(req.timeout>0){setTimeout(req.onTimeoutInternal,req.timeout)}req.xmlHttpRequest.send(content)}};req.handleArguments=function(args){for(var i in args){if(typeof(req[i])=="undefined"){req.parameters[i]=args[i]}else{req[i]=args[i]}}};req.getAllResponseHeaders=function(){if(req.xmlHttpRequest!=null){if(req.responseReceived){return req.xmlHttpRequest.getAllResponseHeaders()}alert("Cannot getAllResponseHeaders because a response has not yet been received")}};req.getResponseHeader=function(headerName){if(req.xmlHttpRequest!=null){if(req.responseReceived){return req.xmlHttpRequest.getResponseHeader(headerName)}alert("Cannot getResponseHeader because a response has not yet been received")}};return req}AjaxRequest.getXmlHttpRequest=function(){if(window.XMLHttpRequest){return new XMLHttpRequest()}else if(window.ActiveXObject){/*@cc_on@*//*@if(@_jscript_version>=5)try{return new ActiveXObject("Msxml2.XMLHTTP")}catch(e){try{return new ActiveXObject("Microsoft.XMLHTTP")}catch(E){return null}}@end@*/}else{return null}};AjaxRequest.isActive=function(){return(AjaxRequest.numActiveAjaxRequests>0)};AjaxRequest.get=function(args){AjaxRequest.doRequest("GET",args)};AjaxRequest.post=function(args){AjaxRequest.doRequest("POST",args)};AjaxRequest.doRequest=function(method,args){if(typeof(args)!="undefined"&&args!=null){var myRequest=new AjaxRequest();myRequest.method=method;myRequest.handleArguments(args);myRequest.process()}};AjaxRequest.submit=function(theform,args){var myRequest=new AjaxRequest();if(myRequest==null){return false}var serializedForm=AjaxRequest.serializeForm(theform);myRequest.method=theform.method.toUpperCase();myRequest.url=theform.action;myRequest.handleArguments(args);myRequest.queryString=serializedForm;myRequest.process();return true};AjaxRequest.serializeForm=function(theform){var els=theform.elements;var len=els.length;var queryString="";this.addField=function(name,value){if(queryString.length>0){queryString+="&"}queryString+=encodeURIComponent(name)+"="+encodeURIComponent(value)};for(var i=0;i<len;i++){var el=els[i];if(!el.disabled){switch(el.type){case'text':case'password':case'hidden':case'textarea':this.addField(el.name,el.value);break;case'select-one':if(el.selectedIndex>=0){this.addField(el.name,el.options[el.selectedIndex].value)}break;case'select-multiple':for(var j=0;j<el.options.length;j++){if(el.options[j].selected){this.addField(el.name,el.options[j].value)}}break;case'checkbox':case'radio':if(el.checked){this.addField(el.name,el.value)}break}}}return queryString};AjaxRequest.numActiveAjaxRequests=0;AjaxRequest.numActiveAjaxGroupRequests=new Object();AjaxRequest.numAjaxRequests=0;