/*
 ARGUMENTS:
  - form-name or -number
  - 'field:title:type:minimum length'[, ...]  (type = number / mail / url / date(format) / [none])
 Example:
 checkForm('frm1', 'name:::2', 'age::number:1', 'eMail:e-mail:mail:1', 'homepage::url:0',
           'birthday::date(dmy):1');
*/

//--------------------------------------------------------------------------------------------------------
// Language settings	(english)
//--------------------------------------------------------------------------------------------------------
/*
var msgNumber  = "must be a number";
var msgEMail   = "must be an e-mail address";
var msgURL     = "must be a web address";
var msgDate    = "must be a date";
var msgFillOut = "Please fill out";
var msgNoForm  = "Form does not exist";
var msgNoField = "Field does not exist";
*/
//--------------------------------------------------------------------------------------------------------
// Language settings	(francais)
//--------------------------------------------------------------------------------------------------------

var msgNumber;
var msgEMail;
var msgURL;
var msgDate;
var msgFillOut;
var msgNoForm;
var msgNoField;

function getMessages(flang) {
	if(flang==1) { 		// de
		msgNumber  = "muss eine Zahl sein.";
		msgEMail   = "Ihre angegebene E-mail Adresse ist ungültig.";
		msgURL     = "ist keine Webseite.";
		msgDate    = "ist kein Datum.";
		msgFillOut = "Bitte füllen sie folgendes Feld aus:";
		msgNoForm  = "Das formular existiert nicht.";
		msgNoField = "Das Feld existiert nicht.";
	} else if(flang==2) { // fr
		msgNumber  = "doit être un nombre.";
		msgEMail   = "Votre adresse E-mail n'est pas valide.";
		msgURL     = "n'est pas une adresse web.";
		msgDate    = "n'est pas une date.";
		msgFillOut = "Veuillez remplir la case";
		msgNoForm  = "Le formulaire n'existe pas.";
		msgNoField = "La case n'existe pas.";
	} else if(flang==3) {  //en
		msgNumber  = "must be a number.";
		msgEMail   = "Your E-mail adress is not valid.";
		msgURL     = "must be a webpage.";
		msgDate    = "must be a date.";
		msgFillOut = "Please fill the field";
		msgNoForm  = "This form doesn't exist.";
		msgNoField = "This field doesn't exist.";
	}
	
}

//--------------------------------------------------------------------------------------------------------
// Functions
//--------------------------------------------------------------------------------------------------------

function _trim(str) {
  if(str) {
    str = str.replace(/^\s+/, "");
    str = str.replace(/\s+$/, "");
  }
  return str;
}

function _isDate(year, month, day) {
  month--;
  if(year < 100) year += 2000;
  var d = new Date(year, month, day);
  return ((day == d.getDate()) && (month == d.getMonth()) && (year == d.getFullYear()));
}

function checkForm() {
  var args = checkForm.arguments;
  var flang = args[0];
  getMessages(flang);
  var f = args[1];
  var msg = "";
  var arr, field, title, type, minLength, elem, val, cnt, nr, i, j;
  var format, d, day, month, year;

  var valid_url = /^(https?|ftp):\/\/([a-z0-9._-]+:[a-z0-9._-]+@)?[a-z0-9������#._\/~% -]+(\?([a-z0-9_-]+(=[a-zA-Z0-99�������+%?_-]+&?)?)*)?$/i;
  var valid_mail = /^[a-z0-9._-]+@[a-z0-9������.-]+\.[a-z]{2,4}$/i;

  if(document.forms[f]) {
    for(i = 2; i < args.length; i++) {
      arr = args[i].split(":");
      field = _trim(arr[0]);
      title = _trim(arr[1]);
      if(!title) title = field;
      type = _trim(arr[2].toLowerCase());
      minLength = _trim(arr[3]);
      elem = document.forms[f].elements[field];

      if(elem) {
        val = _trim(elem.value);

        if(val != "") {
          if(type == "number") {
            val = val.replace(",", ".");
            if(isNaN(val)) msg += '"' + title + '" ' + msgNumber + "\n";
          }
          else if(type == "mail" && val.search(valid_mail) == -1) msg += msgEMail + "\n";
          else if(type == "url" && val.search(valid_url) == -1) msg += '"' + title + '" ' + msgURL + "\n";
          else if(type.indexOf("date") != -1) {
            if(type.indexOf("(") != -1) format = type.substr(type.indexOf("("));
            else format = "(dmy)";
            d = val;

            for(j = 1; j < format.length - 1; j++) {
              cnt = d.search(/[^0-9]/);
              if(cnt == -1) cnt = d.length;

              nr = d.substr(0, cnt);
              nr = parseInt(nr.replace(/^0/, ''));

              switch(format.charAt(j)) {
                case "d": day = nr; d = d.substr(cnt + 1); break;
                case "m": month = nr; d = d.substr(cnt + 1); break;
                case "y": year = nr; d = d.substr(cnt + 1); break;
              }
            }
            if(!_isDate(year, month, day)) msg += '"' + title + '" ' + msgDate + "\n";
          }
        }

        if(minLength) {
          if(elem.length) {
            if(elem.options) {
              for(j = cnt = 0; j < elem.options.length; j++) {
                if(elem.options[j].selected && elem.options[j].value != "") cnt++;
              }
            }
            else for(j = cnt = 0; j < elem.length; j++) {
              if(elem[j].checked) cnt++;
            }
          }
          else if(elem.type == "checkbox") cnt = elem.checked ? 1 : 0;
          else cnt = val.length;
          if(cnt < minLength) msg += msgFillOut + ' "' + title + '".\n';
        }
      }
      else msg += msgNoField + ': "' + field + '"\n';
    }

    if(msg) alert(msg);
    else document.forms[f].submit();
  }
  else alert(msgNoForm + ': "' + f + '"');
}

//--------------------------------------------------------------------------------------------------------


