/**
 * (c) InfoProjects bv. - www.infoprojects.nl
 *
 * $Revision: 1.35 $
 * $Date: 2010/02/12 07:56:20 $
 * $Author: Ad $
 */

var validBefore = true;

function ajaxSubmit(obj,typ) {
  if (typ == "section") {
    openConfigSection($(obj),$(obj).attr("action"));
  }
  else {
    fillBox($(obj).attr("action"),false,$(obj).fastSerialize());
  }
  return false;
}

function checkForm(obj) {
  var form = obj?obj:document.forms[0];
  var name = form.id;
  var valid = true;
  var htmlMsg = formInCompleteMsg+" <br/><ul>";
  var boxMsg = formInCompleteMsg+"\n\r";

  for (var f=0; f<form.elements.length; f++) {
    el = form.elements[f];
    if (el.type == "text") {
      el.value = trim(el.value);
    }
  }

  if (requiredFields[name]) {
    for (var i=0; i<requiredFields[name].length; i++) {
      var reqName = requiredFields[name][i];
      if (reqName.indexOf("id::") == 0) {
        el = $("#"+reqName.split("::")[1]).get(0);
      }
      else {
        el = form.elements[reqName];
      }

      if (el) {
        if (el.type) {
          if (el.type == "select-one" ||
              el.type == "text" ||
              el.type == "hidden" ||
              el.type == "textarea") {
            if (el.value == "") {
              htmlMsg += "<li>"+getLabel(requiredLabels[name][i])+"</li>";
              boxMsg += "- "+getLabel(requiredLabels[name][i])+"\n\r";
              slash=true;
              valid = false;
              swapVerplicht(el.name,false);
            }
            else if (el.name == "MailForm.$to" ||
                     el.name == "MailForm.$cc" ||
                     el.name == "MailForm.$from" ||
                     getLabel(requiredLabels[name][i]).indexOf("mail",0)!=-1) {
              if (!isValidEmailAddress(el.value)) {
                htmlMsg += "<li>" + getLabel(requiredLabels[name][i]) + formInvalidEmailMsg + "</li>";
                boxMsg += "- " + getLabel(requiredLabels[name][i]) + formInvalidEmailMsg+"\n\r";
                valid = false;
                swapVerplicht(reqName,false);
              }
              else swapVerplicht(reqName,true);
            }
            else swapVerplicht(reqName,true);
          }
          else if (el.type == "select-multiple") {
            checkvalid = false;
            for (var j=0; j<el.options.length; j++) {
              if (el.options[j].selected) {
                checkvalid = true;
              }
            }
            if (!checkvalid) {
              htmlMsg += "<li>"+getLabel(requiredLabels[name][i]) + "</li>";
              boxMsg += "- " + getLabel(requiredLabels[name][i]) + "\n\r";
              valid = false;
              swapVerplicht(reqName,false);
            }
            else swapVerplicht(reqName,true);
          }
          else if (el.type == "checkbox" ||
                   el.type == "radio") {
            if (el.name.search(/^UsrItmTab\.\d+_\d+\./) >= 0 ||
                el.name.search(/^EnqueteItmTab\.\d+_\d+\./) >= 0) {
              var Group = el.name.substring(0, 1 + el.name.indexOf("_"));
              var FirstInGroup = "";
              checkvalid = false;
              for (var j=0; j<requiredFields[name].length; j++) {
                var FieldName = requiredFields[name][j];
                if (FieldName.indexOf(Group) == 0) {
                  if (form.elements[FieldName].checked) {
                    checkvalid = true;
                  }
                  if (FirstInGroup == "") {
                    FirstInGroup = FieldName;
                  }
                }
              }
              if (!checkvalid && el.name == FirstInGroup) {
                htmlMsg += "<li>"+getLabel(requiredLabels[name][i]) + "</li>";
                boxMsg += "- " + getLabel(requiredLabels[name][i]) + "\n\r";
                valid = false;
                swapVerplicht(reqName,false);
              }
              else swapVerplicht(reqName,true);
            }
            else if (!el.checked) {
              htmlMsg += "<li>"+getLabel(requiredLabels[name][i]) + "</li>";
              boxMsg += "- " + getLabel(requiredLabels[name][i]) + "\n\r";
              valid = false;
            }
          }
        }
        else if (el.length) {
          checkvalid = false;
          for (var j=0; j<el.length; j++) {
            if (el[j].checked) {
              checkvalid = true;
            }
          }
          if (!checkvalid) {
            htmlMsg += "<li>"+getLabel(requiredLabels[name][i]) + "</li>";
            boxMsg += "- " + getLabel(requiredLabels[name][i]) + "\n\r";
            valid = false;
            swapVerplicht(reqName,false);
          }
          else swapVerplicht(reqName,true);
        }
      }
    }
  }

  var vals = form["values"];
  if (vals) {
    vals.value = "";
    for (i=0; i<form.length; i++) {
      var field = form[i];
      switch (field.type) {
        case "text":
        case "textarea":
          if (trim(field.value) != "") {
            vals.value += field.name + "|" + field.value.replace(/\|/g, "/") + "|";
          }
          break;
        case "radio":
        case "checkbox":
          if (field.checked && trim(field.value) != "") {
            vals.value += field.name + "|" + field.value.replace(/\|/g, "/") + "|";
          }
          break;
        case "select-one":
        case "select-multiple":
          for (var j=0; j<field.options.length; j++) {
            var option = field.options[j];
            if (option.selected && trim(option.value) != "") {
              vals.value += field.name + "|" + option.value.replace(/\|/g, "/") + "|";
            }
          }
          break;
      }
    }
  }

  for (var i=0; maskFields &&
                maskFields[name] &&
                maskFields[name].length>i; i++) {
    var field = form.elements[maskFields[name][i]];
    if (field.value) {
      field.value = trim(field.value);
    }
    if (field.value != "" && !CheckValidation(field.value,maskMasks[name][i])) {
      htmlMsg += "<li>"+getLabel(maskLabels[name][i]) + formInvalidEmailMsg + "</li>";
      boxMsg += "- "+getLabel(maskLabels[name][i]) + formInvalidEmailMsg + "\n\r";
      valid = false;
    }
  }

  if (valid && validBefore) {
    return true;
  }
  else if (valid && !validBefore) {
    if ($("#Msg_"+name)) {
      $("#Msg_"+name).html("").hide();
    }
    return true;
  }
  else if ($("#Msg_"+name)) {
    $("#Msg_"+name).html("<p>"+htmlMsg+"</ul></p>").show();
    validBefore = valid;
    return false;
  }
  else {
    alert(boxMsg);
    validBefore = valid;
    return false;
  }
}

function displayMsg(msgDiv,htmlVal,textVal) {
  if ($("#"+msgDiv)) {
    $("#"+msgDiv).html("<p>"+htmlVal+"</p>").show();
    return false;
  }
  else {
    alert(textVal);
    return false;
  }
}

function getRadioValue(col) {
  for (var i=0; i<col.length; i++) if (col[i].checked) return col[i].value;
  return "";
}

function getSelectValue(sel) {
  if (sel.options.selectedIndex != -1) return sel.options[sel.options.selectedIndex].value;
  return "";
}

function xmlEncode(text) {
  var s = String(text);

  s = s.replace(/\&/g, "&amp;");
  s = s.replace(/</g, "&lt;");
  s = s.replace(/>/g, "&gt;");

  return s;
}

function getLabel(lbl) {
  var validIdRegExp = /^[A-Za-z]*[A-Za-z0-9-_:\.]*$/;
  if (validIdRegExp.test(lbl) && $("#"+lbl).text() != "") {
    return $("#"+lbl).text();
  }
  else {
    return lbl;
  }
}

function swapVerplicht(name,valid) {
  var s = "";
  if (name.indexOf("id::") == 0) {
    s = name.split("::")[1];
  }
  else {
    s = name;
  }
  while (s.indexOf(".",0) != -1) {
    s = s.substring(0,s.indexOf(".",0))+"_"+s.substring(s.indexOf(".",0)+1,s.length);
  }
  while (s.indexOf("$",0) != -1) {
    s = s.substring(0,s.indexOf("$",0))+s.substring(s.indexOf("$",0)+1,s.length);
  }
  var bgTyp = valid?"required":"invalid";
  var bgImg = "url('"+sharedFolder+"images/backgrounds/field_"+bgTyp+".gif')";
  $("#Lbl_"+s).css({backgroundImage:bgImg});
  // else alert("Lbl_"+s);
}

function isValidEmailAddress(strEmailAddress) {
  var objRegExpEmailAddress = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9])+$/;
  return objRegExpEmailAddress.test(strEmailAddress);
}

function trim(s) {
  while(s.substring(0,1)==" ")s=s.substring(1,s.length);
  while(s.substring(s.length-1,s.length)==" ")s=s.substring(0,s.length-1);
  return s;
}

function setOther(from, to) {
  var fromObj=document.getElementById(from);
  var toObj=document.getElementById(to);
  toObj.value=fromObj.value;
  if (toObj.tagName.toLowerCase()=="option") {
    toObj.selected=(fromObj.value!='');
  }
  else {
    toObj.checked=(fromObj.value!='');
  }
}

function resetOther(from, to) {
  var fromObj=document.getElementById(from);
  if (resetOther.arguments.length>1) {
    var toObj=document.getElementById(to);
    if (!toObj.options[toObj.options.length-1].selected) {
      fromObj.value="";
    }
  }
  else {
    fromObj.value="";
  }
}

function printMail(name,mode) {
  var form = $("form#"+name).get(0);
  if (!checkForm(form)) return false;
  form.target="print";
  return true;
}

function sendMail(name,mode) {
  var form = $("form#"+name).get(0);
  if (!checkForm(form)) return false;
  form.target="_self";
  return true;
}

function printForm(obj,mode) {
  var form = obj.form;
  var disabledElts = new Array();
  debug = $("#Msg_"+name);
  if (!checkForm(form)) return false;
  if (mode == "Print_and_Send") {
    form.elements["mode"].value = "print";
    var formEltNum = form.elements.length;
    for (var formEltCnt = 0; formEltCnt<formEltNum; formEltCnt++) {
      var curElt = form.elements[formEltCnt];
      if (curElt.name
            && curElt.name.indexOf("Frm") != -1
            && curElt.name.indexOf("FrmUsrTab") == -1
            && curElt.name.indexOf("Basket") == -1) {
        if (curElt.type == "checkbox") {
          var curEltSpec = curElt.name.substring(curElt.name.indexOf(".")+1,curElt.name.length);
          var curEltFix = curElt.name.substring(curElt.name.indexOf(".")+1,curElt.name.lastIndexOf("."));
          var prtEltName = "AdamBasketAdd."+curEltFix+".$value";
          var prtElt = form.elements[prtEltName];
          if (prtElt) {
            prtElt.value = curElt.checked?"add":"none";
            curElt.disabled = true;
            disabledElts[disabledElts.length] = curElt;
          }
        }
        else if (curElt.type != "radio" || (curElt.type == "radio" && curElt.checked)) {
          var curEltSpec = curElt.name.substring(curElt.name.indexOf(".")+1,curElt.name.length);
          var curEltFix = curElt.name.substring(curElt.name.indexOf(".")+1,curElt.name.lastIndexOf("."));
          var prtEltName;
          var transferValue = true;
          if (curEltSpec.indexOf("PagVldIdt") != -1) {
            prtEltName = "AdamBasketAdd."+curEltFix+".$value"; // Andere selectie- en meerkeuzevragen
          }
          else if (curEltSpec.indexOf("Wrd") != -1) {
            prtEltName = "AdamBasketAdd."+curEltFix+".$value"; // Tekstveld
          }
          else if (curEltSpec.indexOf("Txt") != -1) {
            prtEltName = "AdamBasketAdd."+curEltFix+".$value"; // Tekstvlak
          }
          else if (curEltSpec.indexOf("$action") != -1) {
            transferValue = false;
          }
          else {
            prtEltName = "AdamBasketAdd."+curEltSpec;
          }
          var prtElt = form.elements[prtEltName];
          if (prtElt) {
            if (transferValue) prtElt.value = curElt.value;
            curElt.disabled = true;
            disabledElts[disabledElts.length] = curElt;
          }
        }
      }
      if (curElt.name
            && curElt.name.indexOf(".$action") != -1
            && curElt.name.indexOf("Basket") == -1) {
        curElt.value = "none";
        curElt.disabled = true;
        disabledElts[disabledElts.length] = curElt;
      }
    }
  }

  form.target="_blank";

  var disEltNum = disabledElts.length;
  for (var disEltCnt = 0; disEltCnt<disEltNum; disEltCnt++) {
    disabledElts[disEltCnt].disabled = false;
  }

  return true;
}

function sendForm(obj,mode) {
  var form = obj.form;
  if (!checkForm(form)) return false;
  if (mode == "Print_and_Send") {
    form.elements["AdamBasketAdd.$action"].value = "none";
    form.elements["mode"].value = "send";

    var formEltNum = form.elements.length;
    for (var formEltCnt = 0; formEltCnt<formEltNum; formEltCnt++) {
      var curElt = form.elements[formEltCnt];
      if (curElt.name
            && curElt.name.indexOf("AdamBasketAdd.") != -1) {
        curElt.disabled = true;
      }
      else if (curElt.name
                 && curElt.name.indexOf("FrmUsrTab.") != -1
                 && curElt.name.indexOf(".$action") != -1) {
        curElt.value = "edit";
      }
      else if (curElt.name
                 && curElt.name.indexOf("FrmTab.") != -1
                 && curElt.name.indexOf(".$action") != -1) {
        curElt.value = "add";
      }
      else if (curElt.name
                       && curElt.name.indexOf("FrmItmTab.") != -1
                       && curElt.name.indexOf(".$action") != -1) {
        curElt.value = "add";
      }
    }
  }

  form.target="_self";

  return true;
}

function submitForm() {
  var submitArray = submitForm.arguments;
  var name = submitArray[submitArray.length-2];
  var layername = submitArray[submitArray.length-1];
  var form = getForm(name,$("#"+layername));
  var valid = true;

  for (var i=0; i<submitArray.length-3; i+=2) {
    if (form.elements[submitArray[i]]) form.elements[submitArray[i]].value = submitArray[i+1];
  }
  if (checkForm(form)){
    form.submit();
  }
}

function submitToPopup(name,w,h,url,repop) { // zoek, atlas, opiniepeiling
  var form = $("form#"+name).get(0);
  if (checkForm(form)) {
    var url = url?url:form.action;
    var filledIn = false;
    for (var i=0; i<form.elements.length; i++) {
      var obj = form.elements[i];

      if (obj.type == "submit" || obj.type == "button" || !obj.name || url.indexOf("&"+obj.name+"=") != -1 || url.indexOf("?"+obj.name+"=") != -1) { continue; }
      else if (obj.name && obj.type=="select-one" && obj.options.selectedIndex != -1) {
        url = extendUrl(url,obj.name+"="+obj.options[obj.options.selectedIndex].value);
        filledIn = true;
      }
      else if (obj.name && obj.type=="radio" || obj.type=="checkbox") {
        if (obj.checked) url =extendUrl(url,obj.name+"="+obj.value);
        filledIn = true;
      }
      else if (obj.name && obj.value != "") {
        url = extendUrl(url,obj.name+"="+obj.value);
        filledIn = true;
      }
    }
    var w = w?w:775;
    var h = h?h:475;
    if (repop && filledIn) popup2 = window.open(url,"popup2","height="+h+",width="+w+","+popupAttributes);
    if (filledIn) popup = window.open(url,"popup","height="+h+",width="+w+","+popupAttributes);
  }
  return false;
}

function transferName(name,file_upload_input,file_path_input,target_input,file_action_input) {
  var form = $("form#"+name).get(0);
  var file_name = form.elements[file_upload_input].value;
  var file_path = form.elements[file_path_input].value;

  file_name = file_name.substring(file_name.lastIndexOf("\\")+1,file_name.length);
  file_name = file_name.substring(file_name.lastIndexOf("/")+1,file_name.length);
  file_name = regExReplaceIcase(file_name,"[^a-z0-9_.-]","")+"";

  form.elements[target_input].value = (file_name != "")?(file_path+"/"+file_name):"";
  form.elements[file_action_input].value = (file_name != "")?"add":"none";
  return true;
}

var fixDateFormat = "";
var fixDateSep = "";

function fixDate(formid,eltid,obj) {
  var y = $("#"+eltid+"_y");
  var m = $("#"+eltid+"_m");
  var d = $("#"+eltid+"_d");

  var yVal = y.val();
  var mVal = m.val();
  var dVal = d.val();

  var dateVal = yVal+mVal+dVal;

  var f = fixDateFormat?fixDateFormat:"jmd";
  var s = fixDateSep?fixDateSep:"";

  var dateVal = (f == "jmd")?(yVal+s+mVal+s+dVal):(dVal+s+mVal+s+yVal);
  var dateValid = 8+(fixDateSep.length*2);

  $("#"+eltid).val((dateVal.length == dateValid)?dateVal:"");

  if (eltid.indexOf('SttDtm')>-1 && $("#"+eltid.replace('Stt','End')) && s=="" && f=="jmd") {
    if ($("#"+eltid.replace('Stt','End')).val() < $("#"+eltid).val()) {
      $("#"+eltid.replace('Stt','End')).val($("#"+eltid).val());
      $("#"+eltid.replace('Stt','End')+'_d').val($("#"+eltid+'_d').val());
      $("#"+eltid.replace('Stt','End')+'_m').val($("#"+eltid+'_m').val());
      $("#"+eltid.replace('Stt','End')+'_y').val($("#"+eltid+'_y').val());
    }
  } else if (eltid.indexOf('EndDtm')>-1 && $("#"+eltid.replace('End','Stt')) && s=="" && f=="jmd") {
    if ($("#"+eltid.replace('End','Stt')).val() > $("#"+eltid).val()) {
      $("#"+eltid.replace('End','Stt')).val($("#"+eltid).val());
      $("#"+eltid.replace('End','Stt')+'_d').val($("#"+eltid+'_d').val());
      $("#"+eltid.replace('End','Stt')+'_m').val($("#"+eltid+'_m').val());
      $("#"+eltid.replace('End','Stt')+'_y').val($("#"+eltid+'_y').val());
    }
  }
  fixTime(formid, eltid.replace('Dtm', 'Tyd'), obj);
}

function fixTime(formid,eltid,obj) {
  var h = $("#"+eltid+"_h");
  var m = $("#"+eltid+"_m");

  if (h.size() == 1 && m.size() == 1) {
    var hVal = h.val();
    var mVal = m.val();

    var timeVal = hVal+mVal;

    $("#"+eltid).val((timeVal.length == 4)?timeVal:"");

    if (eltid.indexOf('SttTyd')>-1 && $("#"+eltid.replace('Stt','End'))) {
      if ($("#" + eltid.replace('Stt', 'End')).val() < $("#" + eltid).val() && $("#" + eltid.replace('SttTyd', 'EndDtm')).val() == $("#" + eltid.replace('Tyd', 'Dtm')).val()) {
        $("#"+eltid.replace('Stt','End')).val($("#"+eltid).val());
        $("#"+eltid.replace('Stt','End')+'_h').val($("#"+eltid+'_h').val());
        $("#"+eltid.replace('Stt','End')+'_m').val($("#"+eltid+'_m').val());
      }
    } else if (eltid.indexOf('EndTyd')>-1 && $("#"+eltid.replace('End','Stt'))) {
    if ($("#" + eltid.replace('End', 'Stt')).val() > $("#" + eltid).val() && $("#" + eltid.replace('EndTyd', 'SttDtm')).val() == $("#" + eltid.replace('Tyd', 'Dtm')).val()) {
        $("#"+eltid.replace('End','Stt')).val($("#"+eltid).val());
        $("#"+eltid.replace('End','Stt')+'_h').val($("#"+eltid+'_h').val());
        $("#"+eltid.replace('End','Stt')+'_m').val($("#"+eltid+'_m').val());
      }
    }
  }
}

function fixFormDateFields(formname,nam, namField) {
  var selJ=document.forms[formname].elements[nam+'Y'];
  var selM=document.forms[formname].elements[nam+'M'];
  var selD=document.forms[formname].elements[nam+'D'];
  var valJ=selJ.options[selJ.options.selectedIndex].value;
  var valM=selM.options[selM.options.selectedIndex].value;
  var valD=selD.options[selD.options.selectedIndex].value;
  var val='';
  if (valJ!=''&&valM!=''&&valD!='') {
    var vDate=new Date();
    var ivalJ=parseInt(valJ);
    var ivalM=parseInt(valM);
    var ivalD=parseInt(valD);
    var maxLoopCount = 0;
    vDate.setMonth(ivalM-1); //extra ivm fout in setMonth?
    do {
      vDate.setFullYear(ivalJ);
      vDate.setMonth(ivalM-1);
      vDate.setDate(ivalD);
      if (ivalD > 0) ivalD--;
      maxLoopCount++;
      //status = (vDate.getFullYear()!=ivalJ) + "::" + (vDate.getMonth()!=ivalM-1) + "::" + (vDate.getDate()!=ivalD+1);
    } while ((vDate.getFullYear()!=ivalJ ||
             vDate.getMonth()!=ivalM-1 ||
             vDate.getDate()!=ivalD+1) &&
             maxLoopCount < 31);
    selD.value=++ivalD;
    valD=""+ivalD;
    val='0000'.substr(valJ.length)+valJ+'00'.substr(valM.length)+valM+'00'.substr(valD.length)+valD;
  }
  document.forms[formname].elements[namField].value=val;
}

function fixFormTimeFields(formname, nam, namField) {
  var selH=document.forms[formname].elements[nam+'H'];
  var selM=document.forms[formname].elements[nam+'M'];
  var valH=selH.options[selH.options.selectedIndex].value;
  var valM=selM.options[selM.options.selectedIndex].value;
  var val='';
  if (valH!=''&&valM!='') {
    val='00'.substr(valH.length)+valH+'00'.substr(valM.length)+valM;
  }
  document.forms[formname].elements[namField].value=val;
}

function addRequiredField(formName, fieldName, fieldLabel) {
  if(requiredLabels[formName]) {
    requiredFields[formName][requiredFields[formName].length] = fieldName;
    requiredLabels[formName][requiredLabels[formName].length] = fieldLabel;

    // zet 't vlakje ook even neer
    var s = getLabelId(fieldName);
    $("#Lbl_"+s).addClass('required');
  }
}

function removeRequiredField(formName, fieldName) {
  for(var i=0; i < requiredFields[formName].length; i++) {
    if(requiredFields[formName][i] == fieldName) {
      requiredFields[formName].splice(i, 1);
      requiredLabels[formName].splice(i, 1);
      break;
    }
  }
  // verwijdert 't vlakje
  var s = getLabelId(fieldName);
  $("#Lbl_"+s).removeClass('required');
}

function getLabelId(fieldName) {
  var s = fieldName;
  while (s.indexOf(".",0) != -1) {
    s = s.substring(0,s.indexOf(".",0))+"_"+s.substring(s.indexOf(".",0)+1,s.length);
  }
  while (s.indexOf("$",0) != -1) {
    s = s.substring(0,s.indexOf("$",0))+s.substring(s.indexOf("$",0)+1,s.length);
  }
  return s;
}
