/*
Author: Anthony Booth
Tea boy: Barry Wardrop
Company: Do Media Ltd
Email: tony@domedia.co.uk
Copyright 2006
*/
addLoadEvent(prepareDefaults);
addLoadEvent(prepareSubmit);
addLoadEvent(prepareBlur);

//------------------------------------------
// form label default values
function prepareDefaults(){
  arraylabels = document.getElementsByTagName("label");
  defaultlabels = new Array();
  for(var i = 0; i<arraylabels.length; i++){
    defaultlabels[i] = arraylabels[i].firstChild.nodeValue;
  }//for
}//function

//------------------------------------------
// delay onblur handler
function delay(blurrequest){
  processForm(blurrequest);
  return clearTimeout(pause);
}

//------------------------------------------
// process message
function processMessage(idname, message){
  parentprocess = document.getElementById("processmessage");
  deleteChildNodes(parentprocess);
  var eem = document.createElement("em");
  eem.setAttribute("id", idname);
  var tnmessage = document.createTextNode(message);	  	  
  eem.appendChild(tnmessage);
  parentprocess.appendChild(eem);
}

//------------------------------------------
// submit handler
var formsubmitted = '';
var submitted = false;
var requiredtotal = 0;
function prepareSubmit(){
  for(var f = 0; f<document.forms.length; f++){
    if(document.forms[f].className.indexOf("formvalidation") != -1){
      var thisform = document.forms[f];
	}else{
	  continue;
	}		
    thisform.onsubmit = function(){
	  var submitrequest = '';
	  formsubmitted = thisform;
	  submitted = true;
      for(var i = 0; i<thisform.elements.length; i++){
        var element = thisform.elements[i];	
	    if(element.className.indexOf("required") != -1){
		  requiredtotal++;
	      var fieldid = encodeURIComponent(element.id);//escape characters for save passage
		  var inputvalue = encodeURIComponent(element.value);
          submitrequest += fieldid + '=' + inputvalue + '&';
	    }//if
	  }//for
	  if(requiredtotal > 0){
	    processForm(submitrequest);
	    return false;
	  }else{
		return true;
	  }
    }//function
  }//for
}//function

//------------------------------------------
// onblur handler
function prepareBlur(){
  for(var f = 0; f<document.forms.length; f++){
    var thisform = document.forms[f];
    for(var i = 0; i<thisform.elements.length; i++){
	  var element = thisform.elements[i];	
	  if(element.className.indexOf("required") != -1){
	    element.onblur = function(){
          var fieldid = encodeURIComponent(this.id);//escape characters for save passage
		  var inputvalue = encodeURIComponent(this.value);
	      if(fieldid){
		    var blurrequest = fieldid + "=" + inputvalue;
			pause = setTimeout('delay("'+blurrequest+'")',250);
	      }//if
	    }//function
	  }//if
    }//for
  }//for
}//function

//------------------------------------------
// send and forward statechange
var cacheformrequests = new Array();//set up array to cache current request in case xmlhttp object is busy
function processForm(therequest){
  if(xmlhttp){
    if(therequest){
	  cacheformrequests.push(therequest);
    }
	try{
	  if((xmlhttp.readyState == 4 || xmlhttp.readyState == 0) && cacheformrequests.length > 0){
	    var sendrequest = 'type=ajax&' + cacheformrequests.shift();
        xmlhttp.open("POST", "includes/validation.php", true);
		xmlhttp.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
        xmlhttp.onreadystatechange = stateFormChange;
        xmlhttp.send(sendrequest);
	  }
    }//try
    catch(e){
      alert("Can't connect to server:\n" + e.toString());
    }// catch(e)
  }//if
}//process

//------------------------------------------
// process statechange
function stateFormChange(){
  if(xmlhttp.readyState == 4){ 
    if(xmlhttp.status == 200){
      try{
        serverFormResponse();
      }//try
      catch(e){
        alert("Error reading the response:\n" + e.toString());
      }//catch(e)
    }else{
      alert('There was a problem retrieving the data:' + xmlhttp.statusText);
	}//else
  }//if
}//function

//------------------------------------------
// DOM and XML response
function serverFormResponse(){
var xmlresponse = xmlhttp.responseXML;
xmlroot = xmlresponse.documentElement;
var ok = 0;
arrayfieldid = xmlroot.getElementsByTagName("fieldid");//xml tags
arrayfieldinput = xmlroot.getElementsByTagName("fieldinput");
arrayfielderror = xmlroot.getElementsByTagName("fielderror");
if(arrayfieldid.length > 0){
  for(var i = 0; i<arrayfieldid.length; i++){
    var thisfieldid = arrayfieldid.item(i).firstChild.data;
    var thisfieldinput = arrayfieldinput.item(i).firstChild.data;
	var thisfielderror = arrayfielderror.item(i).firstChild.data;
	var efield = document.getElementById(thisfieldid);
	if(thisfieldinput != "NULL"){
	  efield.value = thisfieldinput.replace(/\Â/g,'');
	}//if	
	for(var l = 0; l<arraylabels.length; l++){
	  var parentelement = arraylabels[l]
	  var labelfor = parentelement.getAttribute('for')?parentelement.getAttribute('for'):parentelement.getAttribute('htmlFor');
	  var tndefault = document.createTextNode(defaultlabels[l]);	   
	  if(labelfor == thisfieldid){		   
	    if(thisfielderror != "NULL"){
		  processMessage("processalert", "All fields are required. All HTML is stripped.");
		  deleteChildNodes(parentelement);	        
		  var eem = document.createElement("em");
		  var ebr = document.createElement("br");
		  var tnerror = document.createTextNode(thisfielderror);
		  eem.appendChild(tnerror);
		  parentelement.appendChild(tndefault);
          parentelement.appendChild(ebr);
		  parentelement.appendChild(eem);
		}else{//if
	      deleteChildNodes(parentelement);
		  parentelement.appendChild(tndefault);
		  ok++;
	    }//else
	  }//if
	}//for
  }//for
}//if
  if(submitted == true){
    submitform(ok);   
  }else{
    setTimeout("processForm();", 500);//check form request cache
  }
}//function

//------------------------------------------
// submit form if validation passed
function submitform(ok){
  if(ok == requiredtotal){
    var formname = formsubmitted.getAttribute('name');
    var formsend = document.forms[formname];
    formsend.submit();
  }
  requiredtotal = 0;//reset
  formsubmitted = '';
  submitted = false;
}