﻿

function mvalidate (ftype, val, req, param) {
  /* this is still in progress */
  if ((ftype==null) || (ftype=="")) { return false; }
  if ((req==1) && ((val==null) || (val==""))) { return false; }
  switch(ftype) {
    case "text":
      if (param!="") {
        var minmax = param.split(":");
        var min = minmax[0];
        var max = minmax[1];
        min = parseInt(min);
        if (!(min>-1)) { min=0; }
        if (max!=null&&max!="") {
          max = parseInt(max);
        } else {
          max = val.length;
        }
        if ((val.length<min) || (val.length>max)) { return false; }
      }
      if ((req==1) && (val=="")) { return false; }
      break;
    case "plaintext":
      if (param!="") {
        var minmax = param.split(":");
        var min = minmax[0];
        var max = minmax[1];
        min = parseInt(min);
        if (!(min>-1)) { min=0; }
        if (max!=null&&max!="") {
          max = parseInt(max);
        } else {
          max = val.length;
        }
        if ((val.length<min) || (val.length>max)) { return false; }
      }
      var re = /[^a-zA-Z\-]/g;
      if ((req) && (val=="")) {
        return false;
      } else if (re.test(val)) {
        return false;
      } else {
        return true;
      }
      break;
    case "int":
      if (param!="") {
        var minmax = param.split(":");
        var min = minmax[0];
        var max = minmax[1];
        min = parseInt(min);
        if (!(min>-1)) { min=0; }
        if (max!=null&&max!="") {
          max = parseInt(max);
        } else {
          max = val;
        }
        if ((val<min) || (val>max)) { return false; }
      }
      var re = /[\D]/g;
      if (re.test(val)) { return false; } else { return true; }
      break;
    case "email":
      var re = /^[^\s()<>@,;:\/]+@\w[\w\.-]+\.[a-z]{2,}$/i;
      return re.test(val);
      break;
    case "alpha":
      if (param!="") {
        var minmax = param.split(":");
        var min = minmax[0];
        var max = minmax[1];
        min = parseInt(min);
        if (!(min>-1)) { min=0; }
        if (max!=null&&max!="") {
          max = parseInt(max);
        } else {
          max = val.length;
        }
        if ((val.length<min) || (val.length>max)) { return false; }
      }
      re = /[^a-zA-Z]/g;
      if (re.test(val)) { return false; } else { return true; }
      break;
    case "phone":
      var re = /^\(?[2-9]\d{2}[\)\.-]?\s?\d{3}[\s\.-]?\d{4}[\s\.-]?x?[0-9]*$/;
      var re_1 = /^(\(?\+?[0-9]*\)?)?[0-9_\- \(\)]*$/;
      var re_2 = /^([a-zA-Z,#/ \.\(\)\-\+\*]*[0-9]){7}[0-9a-zA-Z,#/ \.\(\)\-\+\*]*$/;
      return (re.test(val) || re_1.test(val) || re_2.test(val));
      break;
    case "date":
      var re = /^(\d{1,2})[\s\.\/-](\d{1,2})[\s\.\/-](\d{4})$/;
      if (!re.test(val)) return false;
      var result = val.match(re);
      var m = parseInt(result[1]);
      var d = parseInt(result[2]);
      var y = parseInt(result[3]);
      if(m < 1 || m > 12 || y < 1900 || y > 2100) return false;
      if(m == 2) {
        var days = ((y % 4) == 0) ? 29 : 28;
      } else if(m == 4 || m == 6 || m == 9 || m == 11){
        var days = 30;
      } else {
        var days = 31;
      }
      return (d >= 1 && d <= days);
      break;
    case "year":
      if (param!="") {
        var yearsize = parseInt(param);
        if (val.length!=param) { return false; }
      }
      var re;
      re = /([0-9]{4}||[0-9]{2})/g;
      if (re.test(val)) { return true; } else { return false; }
      break;
    case "password":
      if (param=="") { return false; }
      var params = param.split(",");
      if (params[0]=="") { return false; }
      otherval = $("#"+params[0]).val();
      if ((otherval==null) || (otherval=="")) { return false; }
      if (val!=otherval) { return false; }
      if (params[1]!="") {
        var minmax = params[1].split(":");
        var min = minmax[0];
        var max = minmax[1];
        min = parseInt(min);
        if (!(min>-1)) { min=0; }
        if (max!=null&&max!="") {
          max = parseInt(max);
        } else {
          max = val.length;
        }
        if ((val.length<min) || (val.length>max)) { return false; }
      }
      if ((req==1) && (val=="")) { return false; }
      break;
    default:
      return false;
  }
  return true;
}