/*******************************************************************************
*
* © 2008 Copyright A-Vision
*
* File description :       Form verification functions
* 
* Created by       :       Arnold Velzel
* Created on       :       15/12/2008
*
* Last changed by  :       Arnold Velzel
* Last changed on  :       <LastChanged>
* 
*******************************************************************************/

function isDate( inputfield)
{
 // Format is always day/month/year
 // An empty field will be recognized as valid
 success = false;

 if ( !inputfield) return( true);
 value = inputfield.value;
 if ( value == "") return( true);
 aDate = value.split('/');
 if ( aDate.length == 1) aDate = value.split('-');

 if ( aDate.length != 3) {
  if ( value.length == 6) {
 	 // Assume 2 digits for day, month and year
 	 aDate = new Array();
 	 aDate[0] = value.substr(0,2);
 	 aDate[1] = value.substr(2,2);
 	 aDate[2] = value.substr(4,2);
 	}
  if ( value.length == 8) {
 	 // Assume 2 digits for day, month and a 4 digit year
 	 aDate = new Array();
 	 aDate[0] = value.substr(0,2);
 	 aDate[1] = value.substr(2,2);
 	 aDate[2] = value.substr(4,4);
 	}
  if ( value.length == 10) {
 	 // Assume 2 digits for day, month and a 4 digit year (just using an unknown separator
 	 aDate = new Array();
 	 aDate[0] = value.substr(0,2);
 	 aDate[1] = value.substr(3,2);
 	 aDate[2] = value.substr(6,4);
 	}
 }

 if ( aDate.length == 3) {
  _day = aDate[0];
	 _month = aDate[1];
	 _year = aDate[2];
	 if ( isNum( _day) && isNum( _month) && isNum( _year)) {
	  _day = eval( _day);
	  _month = eval( _month);
	  _year = eval( _year);
	  if ( _year < 30) {
	   _year += 2000;
	  } else {
	   if ( _year < 100) {
	    _year += 1900;
	   }
 		}
 	 theDate = new Date( _year, _month-1, _day);
 	 _day = theDate.getDate();
 	 _month = theDate.getMonth()+1;
 	 strDay = _day;
 	 if ( _day < 10) {
 	  strDay = "0"+_day;
 	 }
 	 strMonth = _month;
 	 if ( _month < 10) {
 	  strMonth = "0"+_month;
 	 }
 	 strYear = theDate.getFullYear();
	  strDate = strDay+"/"+strMonth+"/"+strYear;
// 	 strDate = strDay+"-"+strMonth+"-"+strYear;
 	 inputfield.value = strDate;
 
 	 success = true;
 	}
 }
 return( success);
}

function lockField( fld)
{
 if ( !fld.getAttribute("locked")) {
  fld.setAttribute("locked",true)
  fld.readonly = true;
  fld.style.backgroundColor = "rgb(255,191,127)";
 }
}

function releaseField( fld, restore)
{
 db = document.getElementById("debugErrorData")
 if ( db) {
  if(document.all){
   errorText = db.innerText;
  } else{
   errorText = db.textContent;
  }
  if ( errorText.trim() != "") {
   if ( errorText.indexOf("ERROR") >= 0) {
    restore = true;
   }
   if(document.all){
    db.innerText = "";
   } else{
    db.textContent = "";
   }
   alert( errorText);
  }
 }

 if ( restore) {
  if( fld.defaultValue) {
   fld.value = fld.defaultValue;
  }
  fld.focus();
  if ( fld.select) {
   fld.select();
  }
 } else {
  if ( fld.value) {
   fld.defaultValue = fld.value;
  }
  if ( typeof(updateLastChanged)=='function') {
   updateLastChanged();
  }
 }

 if ( fld.getAttribute("locked")) {
  fld.setAttribute("locked",false)
  fld.style.backgroundColor = "";
 }
}

function updateDBField( fld, anyfurther)
{
 lockField(fld);
// fld.blur();

 if ( fld.getAttribute("type").toLowerCase()=="date") {
  if ( !isDate( fld)) {
   alert("Invalid date entered.");
   return( false);
  }
 }

 url = "includes/dbupdate.php?random="+Math.random();
 if ( fld.getAttribute("dbtable")) {
  url += "&dbtable="+encodeURIComponent(fld.getAttribute("dbtable"));
 } else {
  frm = fld.form;
  if ( frm) {
   fldtblname = frm.elements["dbtable"];
   url += "&dbtable="+encodeURIComponent(fldtblname.value);
  }
 }
 if ( fld.getAttribute("name")) {
  url += "&tbfield="+encodeURIComponent(fld.getAttribute("name"));
 }
 if ( fld.value) {
  fldvalue = fld.value;
 } else {
  fldvalue = fld.getAttribute("value");
 }
 if ( fld.getAttribute("type").toLowerCase()=="date") {
  // change to database date format
  var aDate = fldvalue.split( "/");
  fldvalue = aDate[2]+"-"+aDate[1]+"-"+aDate[0];
 }
 url += "&fldvalue="+encodeURIComponent(fldvalue);
 if ( fld.getAttribute("validation")) {
  url += "&validation="+encodeURIComponent(fld.getAttribute("validation"));
 }

 if ( fld.getAttribute("indexname") && fld.getAttribute("indexvalue")) {
  url += "&idxfldname="+encodeURIComponent(fld.getAttribute("indexname"));
  url += "&idxfldvalue="+encodeURIComponent(fld.getAttribute("indexvalue"));
 } else {
  frm = fld.form;
  if ( frm) {
   fldinxname = frm.elements["indexname"];
   if ( fldinxname) {
    inxname = fldinxname.getAttribute("value");
    if ( inxname) {
     url += "&idxfldname="+encodeURIComponent(inxname);
    }
   }
   fldinxvalue = frm.elements["indexvalue"];
   if ( fldinxvalue) {
    inxvalue = fldinxvalue.getAttribute("value");
    if ( inxvalue) {
     url += "&idxfldvalue="+encodeURIComponent(inxvalue);
    }
   }
  }
 }
// alert(url);return(false);
 getServerHtml( url, document.getElementById("debugErrorData"), function() { 
  if ( anyfurther) {
   anyfurther();
  }
  releaseField(fld, false);
 }, function() { releaseField(fld, true); });
 return( true);
}

/*** SPECIAL INPUT HANDLING ***/
function dropdownselection( obj, furtheraction)
{
 /*
 var itemClassName = "";
 var items = obj.parentNode.getElementsByTagName("LI");
 for (var i=0;i<items.length;i++) {
  itemClassName = items[i].className;
  items[i].className = itemClassName.replace("selected","");
 }
 var items = obj.getElementsByTagName("LI");
 for (var i=0;i<items.length;i++) {
  itemClassName = items[i].className;
  items[i].className = itemClassName+" selected";
 }
 */
 var relatedinput = document.getElementById("searchfilter");
 if ( relatedinput) relatedinput.setAttribute("notification","Search filter by <u>"+obj.getAttribute("value")+"</u>.");;

 var varname = obj.name;
 if ( !varname) varname = obj.getAttribute("name");
 var varvalue = obj.value;
 if ( !varvalue) varvalue = obj.getAttribute("value");
 if ( varname) {
  if ( varname.indexOf(".php")>=0) {
   var url = varname;
   if ( url.indexOf('?')>=0) {
    url += "&random="+Math.random();
   } else {
    url += "?random="+Math.random();
   }
   url += "&varvalue="+encodeURIComponent(varvalue);
   getServerHtml( url, obj.parentNode, furtheraction, null);
  } else {
   eval(varname+"='"+varvalue+"';");
   if ( typeof(furtheraction)=="function") furtheraction();
   alert( varname+"="+eval(varname));
  }
 } else {
  if ( typeof(furtheraction)=="function") furtheraction();
 }
}

function validateField( fld, includehidden)
{
 if ( typeof(includehidden)=="undefined") includehidden=false;
 var valid = true;

 if ( typeof(fld.getAttribute("required"))=="string") {
  if ( fld.value.trim() == "") {
   try {
    fld.focus();
    valid = false;
   }
   catch (e) {
    valid = !includehidden;
   }
   return( valid);
  }
 }

 return( valid);
}

function validateForm( frm)
{
 var valid = true;
 if ( frm.nodeName == "FORM") {
  for ( f=0;f<frm.elements.length;f++) {
   elm = frm.elements[f];
   if ( !validateField( elm)) {
    
    var strname = elm.getAttribute("strname");
    if ( !strname) strname = name;
    alert( "The '"+strname+"' is required.");
    return(false);
   }
   valid &= validateField( elm);
  }
 }
 return( valid);
}

function findForm( elm)
{
 // Find a form within the given element
 // If not found, then try to go parenting until a form object has been found
 // If nothing found in the body, return( false)
 var frms = elm.getElementsByTagName("FORM");
 if ( frms && frms.length) {
  return( frms[0]);
 }

 while (( elm.nodeName != "FORM") && ( elm.nodeName != "BODY")) {
  frms = elm.getElementsByTagName("FORM");
  if ( frms && frms.length) {
   return( frms[0]);
  }
  elm = elm.parentNode;
 }

 if ( elm.nodeName == "FORM") {
  return( elm);
 }

 var forms = document.getElementsByTagName("FORM");
 if ( forms && forms.length) {
  return( forms[0]);
 }

 return( false);
}
