/*******************************************************************************
*
* © 2008 Copyright A-Vision
*
* File description :       HR Package :: Form handling functions
* 
* Created by       :       Arnold Velzel
* Created on       :       08/07/2008
*
* Last changed by  :       Arnold Velzel
* Last changed on  :       <LastChanged>
* 
*******************************************************************************/

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();

 url = "includes/dbupdate.php?random="+Math.random();
 if ( fld.getAttribute("dbtable")) {
  url += "&dbtable="+encodeURIComponent(fld.getAttribute("dbtable"));
 }
 if ( fld.getAttribute("name")) {
  url += "&tbfield="+encodeURIComponent(fld.getAttribute("name"));
 }
 if ( fld.value) {
  url += "&fldvalue="+encodeURIComponent(fld.value);
 } else {
  url += "&fldvalue="+encodeURIComponent(fld.getAttribute("value"));
 }
 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);
    }
   }
  }
 }
 getServerHtml( url, document.getElementById("debugErrorData"), function() { 
  if ( anyfurther) {
   anyfurther();
  }
  releaseField(fld, false);
 }, function() { releaseField(fld, true); });
 return( true);
}

function sendResetEmail( UID)
{
 url = "includes/sendemail.php?random="+Math.random()+"&type=resetpassword&UID="+UID;
 getServerHtml( url, document.getElementById("debugErrorData"));
}
function resetPassword( fld)
{
 if ( confirm("Reset password?")) {
  updateDBField( fld, function() { sendResetEmail( fld.getAttribute("indexvalue"));});
 }
}

function changePassword( frm)
{
 if ( frm.nodeName=="FORM") {
  lockField( frm.elements["oldpassword"]);
  lockField( frm.elements["newpassword"]);
  lockField( frm.elements["_newpassword"]);
  url = "admin/changepassword.php?random="+Math.random();
  url += "&userid="+encodeURIComponent(frm.elements["userID"].value);
  url += "&oldpassword="+encodeURIComponent(frm.elements["oldpassword"].value);
  url += "&newpassword="+encodeURIComponent(frm.elements["newpassword"].value);
  url += "&newpasswordcheck="+encodeURIComponent(frm.elements["_newpassword"].value);

  getServerHtml( url, document.getElementById("debugErrorData"), function() {
   db = document.getElementById("debugErrorData")
   if ( db) {
    if(document.all){
     errorText = db.innerText;
    } else{
     errorText = db.textContent;
    }
    if ( errorText.trim() == "") {
     alert( "Your password is changed, please login again.");
     document.location = "?action=logout";
    }
   }
   releaseField( frm.elements["oldpassword"]);
   releaseField( frm.elements["newpassword"]);
   releaseField( frm.elements["_newpassword"]);
   });
 }
}

function createUser( frm)
{
 if ( frm.nodeName=="FORM") {
  lockField( frm.elements["firstName"]);
  lockField( frm.elements["lastName"]);
  lockField( frm.elements["username"]);
  url = "admin/addnewuser.php?random="+Math.random();
  url += "&firstName="+encodeURIComponent(frm.elements["firstName"].value);
  url += "&lastName="+encodeURIComponent(frm.elements["lastName"].value);
  url += "&username="+encodeURIComponent(frm.elements["username"].value);

  getServerHtml( url, document.getElementById("debugErrorData"), function() {
   db = document.getElementById("debugErrorData")
   if ( db) {
    if(document.all){
     errorText = db.innerText;
    } else{
     errorText = db.textContent;
    }
    if ( errorText.trim() != "") {
     if ( errorText.indexOf("USERID") >= 0) {
      // Clear the data
      if(document.all){
       db.innerText = "";
      } else{
       db.textContent = "";
      }
      userData = errorText.split(':');
      userID = userData[1];
      document.location = "?action=edituserdetails&userid="+userID;
     }
    }
   }
   releaseField( frm.elements["firstName"]);
   releaseField( frm.elements["lastName"]);
   releaseField( frm.elements["username"]);
   });
 }
}

/**** VALIDATION FUNCTIONS ****/
function isNum( value)
{
 if (value=="") return(false);
 var PNum = new String( value);
 var regex = /[^0-9\-]/;
 return !regex.test(PNum);
}
function isFloat( value)
{
 if (value=="") return(false);
 var PNum = new String( value);
 var regex = /[^0-9\.\-]/;
 return !regex.test(PNum);
}

function isMoney( value)
{
 return( isFloat(value));
}
function dateArray( strDate)
{
 var aDate;
 aDate = strDate.split('/');
 if ( aDate.length != 3) {
  if ( strDate.length == 6) {
 	 // Assume 2 digits for day, month and year
 	 aDate = new Array();
 	 aDate[0] = strDate.substr(0,2);
 	 aDate[1] = strDate.substr(2,2);
 	 aDate[2] = strDate.substr(4,2);
 	}
  if ( strDate.length == 8) {
 	 // Assume 2 digits for day, month and a 4 digit year
 	 aDate = new Array();
 	 aDate[0] = strDate.substr(0,2);
 	 aDate[1] = strDate.substr(2,2);
 	 aDate[2] = strDate.substr(4,4);
 	}
 }
 return( aDate);
}
function isDate( value, minDate, maxDate)
{
 // Format is always day/month/year
 // An empty field will be recognized as valid
 success = false;

 if ( value == "") return( "");
 aDate = dateArray(value);

 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;
   success = true;

   aDate = dateArray( strDate);
   if ( minDate) {
    miDate = dateArray( minDate);
    if ( aDate[2] < miDate[2]) {
     success = false;
    } else {
     if ( aDate[2] == miDate[2]) {
      if ( aDate[1] < miDate[1]) {
       success = false;
      } else {
       if ( aDate[1] == miDate[1]) {
        if ( aDate[0] < miDate[0]) {
         success = false;
        }
       }
      }
     }
    }
   }
   if ( maxDate) {
    maDate = dateArray( maxDate);
    if ( aDate[2] > maDate[2]) {
     success = false;
    } else {
     if ( aDate[2] == maDate[2]) {
      if ( aDate[1] > maDate[1]) {
       success = false;
      } else {
       if ( aDate[1] == maDate[1]) {
        if ( aDate[0] > maDate[0]) {
         success = false;
        }
       }
      }
     }
    }
   }

 	}
 }
 if ( success) {
  return( strDate);
 } else {
  return( false);
 }
}

function isEmailAddress( value) {
 var reg = /^([A-Za-z0-9_\-\.])+\@([A-Za-z0-9_\-\.])+\.([A-Za-z]{2,4})$/;
 return ( reg.test(value));
}

//+ Jonas Raoni Soares Silva
//@ http://jsfromhell.com/number/fmt-money [v1.1]

Number.prototype.formatMoney = function(c, d, t){
	var n = this, c = isNaN(c = Math.abs(c)) ? 2 : c, d = d == undefined ? "," : d, t = t == undefined ? "." : t, s = n < 0 ? "-" : "", i = parseInt(n = Math.abs(+n || 0).toFixed(c)) + "", j = (j = i.length) > 3 ? j % 3 : 0;
	return s + (j ? i.substr(0, j) + t : "") + i.substr(j).replace(/(\d{3})(?=\d)/g, "$1" + t) + (c ? d + Math.abs(n - i).toFixed(c).slice(2) : "");
};

function fieldValidation( fld, minValue, maxValue)
{
 if ( !fld.getAttribute("required") && (fld.value=="")) {
  return( true);
 }
 if ( fld.getAttribute("validation")) {
  validation = fld.getAttribute("validation");
  switch ( validation) {
   case "date":
    if ( !minValue && fld.getAttribute("minvalue")) {
     minValue = fld.getAttribute("minvalue");
    }
    if ( !maxValue && fld.getAttribute("maxvalue")) {
     maxValue = fld.getAttribute("maxvalue");
    }
    formattedDate = isDate(fld.value, minValue, maxValue);
    if ( formattedDate) {
     fld.value = formattedDate;
     return( true);
    } else {
     err = 'Invalid date entered.';
     if ( minValue) {
      err += "\nMinimum value : "+minValue;
     }
     if ( maxValue) {
      err += "\nMaximum value : "+maxValue;
     }
     alert(err);
     fld.focus();fld.select();
     return( false);
    }
    break;
   case "time":
    break;
   default:
    alert('Validation function ('+validation+') not implemented.');
    fld.focus();
    return( false);
    break;
  }
 }
 return( true);
}

function validateForm( frm)
{
 frm.error = false;
	var x = frm.getElementsByTagName('*');
	for (var i=0;i<x.length;i++) {
  fieldtype = x[i].nodeName.toLowerCase();
  if (( fieldtype=="input") || ( fieldtype=="textarea")) {
   if ( x[i].getAttribute('validation')) {
    if ( !fieldValidation( x[i])) {
     frm.error = true;
     break;
    }
   }
   if ( x[i].getAttribute('required')) {
    if ( x[i].value.trim() == "") {
     frm.error = true;
     alert( "Required field is not filled in.");
     break;
    }
   }
  }
 }

 if ( frm.error) {
  x[i].focus();
  if ( x[i].style.backgroundColor != "#fee") {
   x[i].style.backgroundColor = "#fee";
   x[i].style.border = "1px solid #a00";
   x[i].style.padding = "2px";
   if ( x[i].onkeyup) {
    x[i].oldfunc = x[i].onkeyup;
   }
   x[i].onkeyup = function() {
    this.style.backgroundColor = "";
    this.style.border = "1px solid #aaa";
    if ( this.oldfunc) {
     this.oldfunc();
     this.onkeyup = this.oldfunc;
     this.oldfunc = null;
    } else {
     this.onkeyup = null;
    }
   }
  }
 }

 return( !frm.error);
}


/**** SPECIAL SEARCH FUNCTIONS ****/
function selectFields( modeObj)
{
 sf = document.getElementById("searchform");
 if ( !sf) {
  alert("Not possible, function not implemented");
  return;
 }

 newMode = modeObj.innerHTML;
 if ( newMode == "all") {
  searchMode = "none";
 } else {
  searchMode = "all";
 }
 cbs = sf.getElementsByTagName("INPUT");
 for (i=0;i<cbs.length;i++) {
  cb = cbs[i];
  if ( cb.name.indexOf("advancedsearchfields") >= 0) {
   if ( newMode == "all") {
    if ( !cb.checked) cb.click();
   } else {
    if ( cb.checked) cb.click();
   }
  }
 }

 modeObj.innerHTML = searchMode;
}

function selectCategories( modeObj)
{
 sf = document.getElementById("searchform");
 if ( !sf) {
  alert("Not possible, function not implemented");
  return;
 }

 newMode = modeObj.innerHTML;
 if ( newMode == "all") {
  searchMode = "none";
 } else {
  searchMode = "all";
 }
 cbs = sf.getElementsByTagName("INPUT");
 for (i=0;i<cbs.length;i++) {
  cb = cbs[i];
  if ( cb.name.indexOf("advancedsearchcategories") >= 0) {
   if ( newMode == "all") {
    if ( !cb.checked) cb.click();
   } else {
    if ( cb.checked) cb.click();
   }
  }
 }

 modeObj.innerHTML = searchMode;
}

function selectFlags( modeObj)
{
 sf = document.getElementById("searchform");
 if ( !sf) {
  alert("Not possible, function not implemented");
  return;
 }

 newMode = modeObj.innerHTML;
 if ( newMode == "all") {
  searchMode = "none";
 } else {
  searchMode = "all";
 }
 cbs = sf.getElementsByTagName("INPUT");
 for (i=0;i<cbs.length;i++) {
  cb = cbs[i];
  if ( cb.name.indexOf("searchflags") >= 0) {
   if ( newMode == "all") {
    if ( !cb.checked) cb.click();
   } else {
    if ( cb.checked) cb.click();
   }
  }
 }

 modeObj.innerHTML = searchMode;
}

function openAdvancedSearch()
{
 div = document.getElementById("advancedSearchBox");
 if ( !div) {
  div = document.createElement("DIV");
  div.id = "advancedSearchBox";
  div.style.position = "absolute";
  div.style.margin = "0px";
  div.style.padding = "0px";
  if ( !nextZindex) nextZindex = 9000;
  div.style.zIndex = nextZindex++;
  div.initialised = false;
  document.body.insertBefore(div, document.body.firstChild);
 }

 url = "advancedsearch.php?random="+Math.random();
 //getServerHtml( url, targetObject, furtherAction, errorAction)
 getServerHtml( url, document.getElementById("advancedSearchBox"), function() {
  setnotifications();
  div = document.getElementById("advancedSearchBox");
  if ( div) {
   div.style.zIndex = nextZindex++;
   setBlockHeight( div);
   if ( !div.initialised) {
    setBlockCenter( div);
    div.onmousedown = function() { initDragging(this); };
    div.initialised = true;
   }
  }
 });
}

function closeAdvancedSearch()
{
 div = document.getElementById("advancedSearchBox");
 if ( div) {
  document.body.removeChild(div);
 }
}

function switchadvancedsearch()
{
 simplediv = document.getElementById("simplesearch");
 if ( simplediv) {
//  simplediv.style.display="none";
 }
 openAdvancedSearch();
}

function showSearchResults()
{
 errors = document.getElementById("debugErrorData");
 if ( errors.innerHTML.trim() == "") {
  closeAdvancedSearch();
  document.location = "searchresults.php";
 } else {
  errorText = errors.innerHTML;
  errors.innerHTML = "";
  alert(errorText);
 }
}

function cardSearch( frm)
{
 if ( frm.nodeName == "FORM") {
  if ( frm.elements["search[mode]"].value == "simple") {
   // Simple / quick search
   // formSubmit( frm, targetObject, furtherAction)
   formSubmit( frm, document.getElementById("debugErrorData"), showSearchResults);
  }

  if ( frm.elements["search[mode]"].value == "advanced") {
   // Full / advanced search
   if ( frm.elements["search[advanced]"].value==frm.elements["search[advanced]"].defaultValue) {
    frm.elements["search[advanced]"].value='';
    frm.elements["search[advanced]"].style.color='black';
   }
   formSubmit( frm, document.getElementById("debugErrorData"), showSearchResults);
  }
 }
}

