
function onlyNumbers(e){
  if (e.keyCode)
    keyCode = e.keyCode;
  else // for moz/fb, if keyCode==0 use which
    if (e.which) 
      keyCode = e.which;
  return ((keyCode >=48 && keyCode <= 57 ) || (keyCode >=96 && keyCode <= 105) || keyCode <= 16)
}

function emptystr(string) {
	var x = 0;
	var chr;
	var empty = true;
	if (string.length) {
		do {
			chr = string.substring(x, x + 1);
			x++;
			empty = (chr == ' ' || chr == '\t' || chr == '\n' || chr == '\r');
		} while (empty && x < string.length);
	}
	return empty;
}

function showAlert(item, name){
  if (emptystr(document.form_cms.elements[item].value)){
    alert('U bent ' + name + ' vergeten in te voeren!');
    document.form_cms.elements[item].focus();
    return false;
  }
  else{
    return true;
  }
}

function checkNumber(item, name){
  if (isNaN(document.form_cms.elements[item].value)){
	  alert(name + ' moet een nummer zijn!');
    document.form_cms.elements[item].focus();
    return false;
  }
  else{
    return true;
  }
}

function checkRange(item, name, min, max) {
  var val = parseInt(document.form_cms.elements[item].value);

  if (!isNaN(document.form_cms.elements[item].value) && val >= min && val <= max) {
    return true;
  }
  else {
    alert(name + ' moet een getal zijn tussen ' + min + ' en ' + max + '!');
    document.form_cms.elements[item].focus();
    return false;
  }
}

function setChange(objname) {
  if (document.all) {
    var newContent = editor_getHTML(objname); 
    setGlobalVar("_" + objname + "_initialText", newContent); 
  }
  return true;
}

function showProgress() {
	document.getElementById("progress").style.display='';
	document.getElementById("upload").style.display='none';
}

function showConfirmation(item, action){
  return confirm('Weet u zeker dat u ' + item + ' wilt ' + action + '?')
}

function uploadConfirmation(item, action){
  if (confirm('Weet u zeker dat u ' + item + ' wilt ' + action + '?')) {
  	return true;
  }
  else {
	  document.getElementById("upload").style.display='';
	  document.getElementById("progress").style.display='none';
	  return false;
  }
}


// Like above, but without the focus()
function checkEmptyNoFocus(item, name){
  if (emptystr(document.form_cms.elements[item].value)){
    alert('U bent ' + name + ' vergeten in te voeren!');
    return false;
  }
  else{
    return true;
  }
}

function checkEmptyCheckbox(item, name) {
	var chkd = 0;

  if((typeof document.form_cms.elements[item] == "undefined")){
    alert('Selecteer minimaal één ' + name + '!');
    return false;
  }
  else{
    if((typeof document.form_cms.elements[item].length == "undefined") && (document.form_cms.elements[item].checked)){
      return true;
    }
    else{
      for (var i = 0; i < document.form_cms.elements[item].length; i++)	{
        var obj = document.form_cms.elements[item][i];
        if (obj)
          if (obj.checked == true)
            chkd = 1;
      }

      if (chkd!=1){
        alert('Selecteer minimaal één ' + name + '!');
        return false;
      }
      else{
        return true;
      }
    }
  }
}

function checkEmptyMultiSelect(item, name) {
  if (document.form_cms.elements[item].length == 0) {
    alert('Selecteer minimaal één ' + name + '!');
    return false;
  }

  return true;
}

// Like above, for WYSIWYG
function checkEmptyWYSIWYG(item, name){
  if (document.all && emptystr(editor_getHTML(item))){
    alert('U bent ' + name + ' vergeten in te voeren!');
    editor_focus(document.getElementById('_' + item + '_editor'));
    return false;
  }
  else{
    return true;
  }
}

function checkEmail(item){
  var pattern=/(^[\-_\.a-zA-Z0-9]+)@((([0-9]{1,3}\.){3}([0-9]{1,3})((:[0-9])*))|(([a-zA-Z0-9\-]+)(\.[a-zA-Z]{2,})+(\.[a-zA-Z]{2})?((:[0-9])*)))$/;
  
  if (document.form_cms.elements[item].value.search(pattern) == -1){
    alert('Het e-mailadres is onjuist!');
    document.form_cms.elements[item].focus();
    return false;
  }
  else{
    return true;
  }
}

function checkPassword(item1, item2){
  if (document.form_cms.elements[item1].value != document.form_cms.elements[item2].value){
    alert('Het wachtwoord en de bevestiging van het wachtwoord komen niet overeen!');
    document.form_cms.elements[item1].focus();
    return false;
  }
  else{
    return true;
  }
}

function checkImage(item) {
  if (!document.form_cms.elements[item].value) {
    alert('Selecteer een afbeelding!');
    document.form_cms.elements[item + '_btn'].focus();
    return false;
  }
  else {
    return true;
  }
}

function checkURL(item) {
  var url = document.form_cms.elements[item].value;

  var urlPattern = /^(http:\/\/|ftp:\/\/|https:\/\/|mailto:)([^\s]+)$/i;
  if (!urlPattern.test(url) || url.indexOf('.') == -1) {
    alert('De URL is onjuist!');
    document.form_cms.elements[item].focus();
    return false;
  }
  else {
    return true;
  }
}

function checkDates(eff, exp, name_eff, name_exp, check_eff, check_exp, check_time){
  var EffectiveDays, EffectiveMonth, EffectiveYear, EffectiveHour = 0, EffectiveMin = 0, EffectiveSec = 0, ExpirationDays, ExpirationMonth, ExpirationYear, ExpirationHour = 0, ExpirationMin = 0, ExpirationSec = 0;
  var dateReg;
  var res;

  if (check_time)
    dateReg = /^([0-9]+)-([0-9]+)-([0-9]+) ([0-9]+):([0-9]+):([0-9]+)$/;
  else
    dateReg = /^([0-9]+)-([0-9]+)-([0-9]+)$/;

  if (res = dateReg.exec(document.forms['form_cms'].elements[eff].value)) {
    EffectiveDays = parseInt(res[1], 10);
	  EffectiveMonth = parseInt(res[2], 10);
  	EffectiveYear = parseInt(res[3], 10);
    if (check_time) {
      EffectiveHour = parseInt(res[4], 10);
      EffectiveMin = parseInt(res[5], 10);
      EffectiveSec = parseInt(res[6], 10);
    }
  }
  else if (!emptystr(document.forms['form_cms'].elements[eff].value)) {
    alert('De ' + name_eff + ' heeft het verkeerde formaat!');
    document.forms['form_cms'].elements[eff].focus();
    return false;
  }

  if (res = dateReg.exec(document.forms['form_cms'].elements[exp].value)) {
    ExpirationDays = parseInt(res[1], 10);
    ExpirationMonth = parseInt(res[2], 10);
    ExpirationYear = parseInt(res[3], 10);
    if (check_time) {
      ExpirationHour = parseInt(res[4], 10);
      ExpirationMin = parseInt(res[5], 10);
      ExpirationSec = parseInt(res[6], 10);
    }
  }
  else if (!emptystr(document.forms['form_cms'].elements[exp].value)) {
    alert('De ' + name_exp + ' heeft het verkeerde formaat!');
    document.forms['form_cms'].elements[exp].focus();
    return false;
  }

  Effective = new Date(EffectiveYear, EffectiveMonth-1, EffectiveDays, EffectiveHour, EffectiveMin, EffectiveSec);
  Expiration = new Date(ExpirationYear, ExpirationMonth-1, ExpirationDays, ExpirationHour, ExpirationMin, ExpirationSec);

  if (document.form_cms.elements[check_eff].checked && document.form_cms.elements[check_exp].checked ){
    if(Effective >= Expiration){
      alert('De ' + name_eff + ' kan niet gelijk of groter zijn dan de ' + name_exp + '!');
      return false;
    }
    else {
      return true;
    }
  }
  else 
    return true;
}

function compareDates(fromdate, todate, fromname, toname) {
  var FromDay, FromMonth, FromYear, ToDay, ToMonth, ToYear;
  var dateReg = /^([0-9]+)-([0-9]+)-([0-9]+)$/;
  var res;

  if (res = dateReg.exec(document.forms['form_cms'].elements[fromdate].value)) {
    FromDay = parseInt(res[1], 10);
	  FromMonth = parseInt(res[2], 10);
  	FromYear = parseInt(res[3], 10);
  }
  else if (!emptystr(document.forms['form_cms'].elements[fromdate].value)) {
    alert('De ' + fromname + ' heeft het verkeerde formaat!');
    document.forms['form_cms'].elements[fromdate].focus();
    return false;
  }

  if (res = dateReg.exec(document.forms['form_cms'].elements[todate].value)) {
    ToDay = parseInt(res[1], 10);
    ToMonth = parseInt(res[2], 10);
    ToYear = parseInt(res[3], 10);
  }
  else if (!emptystr(document.forms['form_cms'].elements[todate].value)) {
    alert('De ' + toname + ' heeft het verkeerde formaat!');
    document.forms['form_cms'].elements[todate].focus();
    return false;
  }

  var From = new Date(FromYear, FromMonth, FromDay);
  var To = new Date(ToYear, ToMonth, ToDay);

	if (From > To) {
		alert('De ' + fromname + ' kan niet groter zijn dan de ' + toname + '!');
		return false;
	}
	else {
		return true;
	}
}

function compareActExpDates(active, expiration) {
  var ActDay = Number(document.form_cms.elements[active + "_day"].value);
  var ActMonth = Number(document.form_cms.elements[active + "_month"].value);
  var ActYear = Number(document.form_cms.elements[active + "_year"].value);
  
  var ExpDay = Number(document.form_cms.elements[expiration + "_day"].value);
  var ExpMonth = Number(document.form_cms.elements[expiration + "_month"].value);
  var ExpYear = Number(document.form_cms.elements[expiration + "_year"].value);
 
  var Act = new Date(ActYear, ActMonth, ActDay);
  var Exp = new Date(ExpYear, ExpMonth, ExpDay);

	if (document.form_cms.elements['active_enabled'].checked && document.form_cms.elements['archive_enabled'].checked && (Act > Exp)) {
		alert('De activeerdatum kan niet groter zijn dan de archiefdatum!');
		return false;
	}
	else {
		return true;
	}
}
function dateFormat(year,month,day) {
  var str = "" + year + "";
  while(str.length < 4) str = "0" + str;
  str += month < 10 ? "0" + month : month;
  str += day < 10 ? "0" + day : day;
  return str;
}

function datePast(date,datename) {
  var year, month, day;
  var dateReg = /^([0-9]+)-([0-9]+)-([0-9]+)$/;
  var res;

  if (res = dateReg.exec(document.forms['form_cms'].elements[date].value)) {
    day   = parseInt(res[1], 10);
	 month = parseInt(res[2], 10);
  	 year  = parseInt(res[3], 10);
  }
  	
  d = new Date();
  d1 = dateFormat(year,month,day);
  d2 = dateFormat(d.getFullYear(), d.getMonth()+1, d.getDate());

  if(d1 < d2) {
  	  alert('De ' + datename + ' kan niet in het verleden liggen.');
     return false;
  }
  return true;
}

function checkCalendarActiveDate(active_field, active_check, from_field, to_field, type_field) {
  if (document.forms['form_cms'].elements[active_check].checked) {
    var dateFields = getCalendarDateFields(from_field, to_field, type_field);
    var dateReg = /^([0-9]+)-([0-9]+)-([0-9]+) ([0-9]+):([0-9]+):([0-9]+)$/, res, fromDate, minDate = null;
    var shortDateReg = /^([0-9]+)-([0-9]+)-([0-9]+)$/, dateTime;
    var fromDays = 0, fromMonth = 0, fromYear = 0, fromHour = 0, fromMin = 0, fromSec = 0;
    var activeDay, activeMonth, activeYear, activeDate;

    for (var i = 0; i < dateFields.length; i++) {
      dateTime = (dateFields[i][2].options[dateFields[i][2].selectedIndex].value == 'datetime'); 

      if (dateTime && (res = dateReg.exec(dateFields[i][0].value))) {
        fromDays = parseInt(res[1], 10);
        fromMonth = parseInt(res[2], 10) - 1;
        fromYear = parseInt(res[3], 10);
        fromHour = parseInt(res[4], 10);
        fromMin = parseInt(res[5], 10);
        fromSec = parseInt(res[6], 10);      
      }
      else if (!dateTime && (res = shortDateReg.exec(dateFields[i][0].value))) {
        fromDays = parseInt(res[1], 10);
        fromMonth = parseInt(res[2], 10) - 1;
        fromYear = parseInt(res[3], 10);
        fromHour = 0;
        fromMin = 0;
        fromSec = 0;
      }

      fromDate = new Date(fromYear, fromMonth, fromDays, fromHour, fromMin, fromSec);

      if (minDate == null || fromDate < minDate)
        minDate = fromDate;
    }

    if (res = shortDateReg.exec(document.forms['form_cms'].elements[active_field].value)) {
      activeDay = parseInt(res[1], 10);
      activeMonth = parseInt(res[2], 10) - 1;
      activeYear = parseInt(res[3], 10);
    }
    else {
      alert("De activeerdatum heeft het verkeerde formaat!");
      document.forms['form_cms'].elements[active_field].focus();
      return false;
    }

    activeDate = new Date(activeYear, activeMonth, activeDay);

    if (activeDate.getDate() != activeDay || activeDate.getMonth() != activeMonth || activeDate.getFullYear() != activeYear) {
      alert("De activeerdatum is ongeldig!");
      document.forms['form_cms'].elements[active_field].focus();
      return false;
    }
    else if (activeDate > minDate) {
      alert("De activeerdatum kan niet groter zijn dan de van datum!");
      document.forms['form_cms'].elements[active_field].focus();
      return false;
    }
  }

  return true;
}

function checkCalendarDates(from_field, to_field, type_field) {
  var dateTimeReg = /^([0-9]+)-([0-9]+)-([0-9]+) ([0-9]+):([0-9]+):([0-9]+)$/;
  var dateReg = /^([0-9]+)-([0-9]+)-([0-9]+)$/;
  var dateFields, res, fromDate, toDate, dateTime;
  var fromDays, fromMonth, fromYear, fromHour, fromMin, fromSec;
  var toDays, toMonth, toYear, toHour, toMin, toSec;
  var calDates = new Array(), j;

  dateFields = getCalendarDateFields(from_field, to_field, type_field);

  for (var i = 0; i < dateFields.length; i++) {
    dateTime = (dateFields[i][2].options[dateFields[i][2].selectedIndex].value == 'datetime'); 

    if (dateTime && (res = dateTimeReg.exec(dateFields[i][0].value))) {
      fromDays = parseInt(res[1], 10);
      fromMonth = parseInt(res[2], 10) - 1;
      fromYear = parseInt(res[3], 10);
      fromHour = parseInt(res[4], 10);
      fromMin = parseInt(res[5], 10);
      fromSec = parseInt(res[6], 10);      
    }
    else if (!dateTime && (res = dateReg.exec(dateFields[i][0].value))) {
      fromDays = parseInt(res[1], 10);
      fromMonth = parseInt(res[2], 10) - 1;
      fromYear = parseInt(res[3], 10);
      fromHour = 0;
      fromMin = 0;
      fromSec = 0;
    }
    else {
      alert('De van datum heeft het verkeerde formaat!');
      dateFields[i][0].focus();
      return false;
    }

    if (dateTime && (res = dateTimeReg.exec(dateFields[i][1].value))) {
      toDays = parseInt(res[1], 10);
      toMonth = parseInt(res[2], 10) - 1;
      toYear = parseInt(res[3], 10);
      toHour = parseInt(res[4], 10);
      toMin = parseInt(res[5], 10);
      toSec = parseInt(res[6], 10);      
    }
    else if (!dateTime && (res = dateReg.exec(dateFields[i][1].value))) {
      toDays = parseInt(res[1], 10);
      toMonth = parseInt(res[2], 10) - 1;
      toYear = parseInt(res[3], 10);
      toHour = 0;
      toMin = 0;
      toSec = 0;
    }
    else {
      alert('De tot datum heeft het verkeerde formaat!');
      dateFields[i][1].focus();
      return false;
    }

    fromDate = new Date(fromYear, fromMonth, fromDays, fromHour, fromMin, fromSec);
    toDate = new Date(toYear, toMonth, toDays, toHour, toMin, toSec);
    calDates[i] = new Array(fromDate, toDate);

    if (fromDate.getDate() != fromDays || fromDate.getMonth() != fromMonth || fromDate.getFullYear() != fromYear || fromDate.getHours() != fromHour || fromDate.getMinutes() != fromMin || fromDate.getSeconds() != fromSec) {
      alert('De van datum is ongeldig!');
      dateFields[i][0].focus();
      return false;
    }
    else if (toDate.getDate() != toDays || toDate.getMonth() != toMonth || toDate.getFullYear() != toYear || toDate.getHours() != toHour || toDate.getMinutes() != toMin || toDate.getSeconds() != toSec) {
      alert('De tot datum is ongeldig!');
      dateFields[i][1].focus();
      return false;
    }
    else if (dateTime && fromDate >= toDate) {
      alert('De van datum kan niet gelijk of groter zijn dan de tot datum!');
      dateFields[i][0].focus();
      return false;
    }
    else if (!dateTime && fromDate > toDate) {
      alert('De van datum kan niet groter zijn dan de tot datum!');
      dateFields[i][0].focus();
      return false;
    }
    else {
      for (j = 0; j < i; j++) {
        if (calDates[j][0].getTime() == fromDate.getTime() && calDates[j][1].getTime() == toDate.getTime()) {
          alert('Een van en tot datum mag niet twee keer voorkomen!');
          dateFields[i][0].focus();
          return false;
        }
      }
    }
  }

  return true;
}

function getCalendarDateFields(from_field, to_field, type_field) {
  var field, dateFields = new Array(), nr, pos, j = 0, k1, k2, found1, found2;

  for (var i = 0; i < document.forms['form_cms'].elements.length; i++) {
    field = document.forms['form_cms'].elements[i];
    
    if (typeof field.name != 'undefined' && field.name.substr(0, from_field.length) == from_field) {
      pos = field.name.indexOf('[');
      if (pos != -1) {
        nr = field.name.substr(pos + 1, field.name.length - pos - 2);

        if (!isNaN(nr)) {
          found1 = false;
          for (k1 = 0; k1 < document.forms['form_cms'].elements.length && !found1; k1++) {
            if (typeof document.forms['form_cms'].elements[k1].name != 'undefined' && document.forms['form_cms'].elements[k1].name == to_field + '[' + nr + ']')
              found1 = true;
          }

          found2 = false;
          for (k2 = 0; k2 < document.forms['form_cms'].elements.length && !found2; k2++) {
            if (typeof document.forms['form_cms'].elements[k2].name != 'undefined' && document.forms['form_cms'].elements[k2].name == type_field + '[' + nr + ']')
              found2 = true;
          }

          if (found1 && found2) {
            dateFields[j] = new Array(field, document.forms['form_cms'].elements[k1 - 1], document.forms['form_cms'].elements[k2 - 1]);
            j++;
          }
        }
      }
    }
  }

  return dateFields;
}

function checkFormSaveResults() {
  if (!document.form_cms.elements['mail_enabled'].checked && !document.form_cms.elements['savedb'].checked) {
    alert('Selecteer minstens één optie om de resultaten op te slaan!');
    return false;
  }
  else
    return true;
}

function checkPageMenu(item) {
  if (typeof document.form_cms.elements[item] == 'undefined') {
    return true; // Item not found
  }
  else if (document.form_cms.elements[item].options[document.form_cms.elements[item].selectedIndex].value == '0') {
    alert('Selecteer een niet gebruikt menuitem!');
    document.form_cms.elements[item].focus();
    return false;
  }
  else
    return true;
}

function getRadioValue(form, element) {
  var elmts = document.forms[form].elements;

  for (var i = 0; i < elmts.length; i++)
    if (elmts[i].name == element && elmts[i].checked)
      return elmts[i].value;

  return null;
}

function checkPageSelector(element) {
  if (emptystr(document.forms['form_cms'].elements[element].value)) {
    alert('Selecteer een pagina!');
    return false;
  }

  return true;
}

function checkModuleItemSelector(element) {
  if (emptystr(document.forms['form_cms'].elements[element].value)) {
    alert('Selecteer een item!');
    return false;
  }

  return true;
}

function selectAll(frm, elem) {
  var selBox = document.forms[frm].elements[elem];
  if (typeof selBox != 'undefined') {
    for (var i = 0; i < selBox.options.length; i++) {
      selBox.options[i].selected = true; 
    }
  }

  return true;
}

// Form check function
function checkForm(moduleName, formName, action) { 
  switch (moduleName) {
  	case 'order':
  	switch (action) {
        case 'submit': 
          var valid = (checkEmpty('organisatie', 'de organisatie') && checkEmpty('contactpersoon', 'de organisatie contactpersoon') && checkEmpty('email', 'het organisatie emailadres') && checkEmpty('telefoon', 'het organisatie telefoonnummer') && checkEmpty('datum', 'de aflever datum')&& isDate(document.getElementById('datum').value)&& datePast('datum', 'de aflever datum') && checkEmpty('afl_adres', 'de aflever adres')&& checkEmpty('afl_plaats', 'de aflever plaats')&& checkEmpty('afl_contactpersoon', 'de aflever contactpersoon')&& checkEmpty('fac_adres', 'het factuur adres')&& checkEmpty('fac_plaats', 'de factuur plaats')&& checkEmpty('fac_contactpersoon', 'de factuur contactperson')&& checkEmpty('ordernummer', 'het ordernummer'));

          return valid && showConfirmation('de bestelling','plaatsen');
        break;    		
  	}
  	break;
    case 'member':
      switch (action) {
        case 'login':
          return (checkEmpty('login', 'de gebruikersnaam') && checkEmpty('password', 'het wachtwoord'));
          break;
        case 'delete':
          return (showConfirmation('de gebruiker', 'verwijderen'));
          break;
        case 'shopcar_submit': 
          var valid = (checkEmpty('datum', 'de afleverdatum') && datePast('datum', 'de afleverdatum')&& checkEmpty('afl_straat', 'de afleverstraat') && checkEmpty('afl_huisnummer', 'het aflever huisnummer') && checkEmpty('afl_postcode', 'de aflever postcode') && checkEmpty('afl_plaats', 'de aflever plaats')&& isDate(document.getElementById('datum').value));
          if(document.form_cms.elements['factuuradres'][1].checked && valid) {
          	valid = (checkEmpty('fac_straat', 'de factuurstraat') && checkEmpty('fac_huisnummer', 'het factuur huisnummer') && checkEmpty('fac_postcode', 'de factuur postcode') && checkEmpty('fac_plaats', 'de factuur plaats'));
          }
          return valid && showConfirmation('de bestelling','plaatsen');
        break;  
        
        case 'forgetpassword':
        var ret = (checkEmpty('email', 'het email adres') && checkEmail('email'));
        return ret && showConfirmation('het wachtwoord', 'verzenden');
        break;        
        
        case 'add':
        case 'change':
           var ret = (checkEmpty('firstname', 'de voornaam') && checkEmpty('lastname', 'de achternaam') && checkEmpty('email', 'het e-mailadres') && checkEmail('email') &&   checkPassword('password', 'retypepassword'));
          if (action == 'add')
             return ret && showConfirmation('de gebruiker', 'toevoegen');
          else
             return ret && showConfirmation('de gebruiker', 'wijzigen');
          break;
      }
      break;      
  }
  return false;
}

function callAdminHookFormCheck(moduleName, formName, action) {
  var ret = eval("if (typeof adminHookFormCheck_" + moduleName + " == 'function') adminHookFormCheck_" + moduleName + "('" + formName + "', '" + action + "');");
  if (typeof ret != 'undefined')
    return ret;
  else
    return true;
}

// Function that will swap the display/no display for
// all content within div tags
function Show_Stuff(blok){
	if (blok.style.display == "none")	{
		blok.style.display = "";
	}
	else {
		blok.style.display = "none";
	}
}