var patPat=/^\/(.*)\/([^/]*)/; // a pattern to match patterns: "/xyz/gi"
var patPatDef=/^=(\w+)\/(.*)\/([^/]*)/; // a pattern for pattern defs: "=pat/xyz/gi"


function patternDict(Name,Pat){
  // patternDict("joe","/[aeiou].+[aeiou]/i") defines and returns a RegExp;
  // so does patternDict("=joe/[aeiou].+[aeiou]/i");
  // thereafter patternDict("joe") returns it
  // Note: patternDict(/[aeiou]/), if x has not been defined, returns RegExp
  // and stores it for future use as its own "name".

  if(Pat){
    var p=patPat.exec(Pat); 
    if(!p)return null;
    return patternDict[Name]=new RegExp(p[1],p[2]);
    }
  var p=patternDict[Name]; 
  if(p)return p;
  p=patPat.exec(Name);
  if(p)return patternDict[Name]=new RegExp(p[1],p[2]);
  p=patPatDef.exec(Name);
  if(p)return patternDict[p[1]]=new RegExp(p[2],p[3]);
}


function isYYMMDD(theFormElt){
        dateStr = theFormElt.value;
	// window.onerror=null // for all other strange errors
	var err=0
	var psj=0;
	if (dateStr.length != 6) err=1
	y = dateStr.substring(0, 2)// year
	m = dateStr.substring(2, 4)// month
	d = dateStr.substring(4, 6)// day

	// basic error checking
	if (m<1 || m>12) err = 1
	if (d<1 || d>31) err = 1
	if (y<0 || y>99) err = 1

	//advanced error checking

	// months with 30 days
	if (m==4 || m==6 || m==9 || m==11){
		if (d==31) err=1
	}

	// february, leap year
	if (m==2){
		// feb
		var g=parseInt(y/4)
		if (isNaN(g)) {
			err=1
		}
	
		if (d>29) err=1
		if (d==29 && ((y/4)!=parseInt(y/4))) err=1
	}
	if (err==1){
		return false;
	}
	return true;
}

function validatorFns(){
  validatorFns["YYMMDD"]=isYYMMDD;
}

function showForm(theForm){
  alert("hi, this is the form "+theForm.id+"\nperforming its Action");
}

function validateForm(theForm){// return true if all is well
  var elArr=theForm.elements;
  for(var i=0;i<elArr.length;i++)
    with(elArr[i]){
      var f=elArr[i].validatorFn;
      if (f){
	if(validatorFns[f](elArr[i],theForm)){
	  continue;
        }else{
	  alert(error_med + ': ' + elArr[i].value);
	  return false;
        }
      }
      var v=elArr[i].validator;
      if(!v){
	continue;
      } 
      var thePat=patternDict(v);
      var gotIt=thePat.exec(value); 
      if(!gotIt){
	alert(error_med + ": " + value); 
	return false;
      }
    }
    
  return true;
}

function hejja()
{
	alert("hej")
}

function initPatternDict(){
  patternDict("email", "/^.+\@[a-zA-Z0-9\-\.]+\.([a-zA-Z]{2,3}|[0-9]{1,3})/");
  patternDict("notempty", "/./");
  validatorFns();
}
