/*
  void CFormCheck::CFormCheck(lang);
  void CFormCheck::string(elementId[,minLength[,maxLength]]);
  void CFormCheck::mail(elementId);
  void CFormCheck::number(elementId[,minValue[,maxValue]]);
  void CFormCheck::regExpr(errorText,regularExpression,elementId1[, ...,elementIdN]);
  void CFormCheck::passwords(errorText,elementId1,elementId2[,minLength=4[,maxLength=10]]);
  void CFormCheck::notIn(errorText,elementId,value_1[, ...,value_N]);
  void CFormCheck::multi(errorText,elementId,MinSel,MaxSel,[value_1[, ...,value_N]]);
*/
function CFormCheck(formId,Lang)
{
	
  if(document.msg)
	for(i=0;i<document.msg.length;i++)
		clearInterval(document.msg[i][0]);
	document.msg = new Array();

	this.form = document.getElementById(formId);
	this.errors = 0; this.lang=Lang;
	this.multi=multi; this.notIn=notIn; this.passwords=passwords; this.regExpr=regExpr;
	this.mail=mail; this.string=string; this.number=number; this.getError=getError;
	this.createMsgElement=createMsgElement;
	this.checkRes=checkRes;
	this.showMgs=showMgs;
  this._getValue=_getValue;
}

function showMgs(id)
{
	if(document.msg[id][2].length > document.msg[id][3])
	{
		s=document.msg[id][2].charAt(document.msg[id][3]++);
		document.msg[id][1].innerHTML += s=="\n"?"<br />":s;
	}
	else
	 clearInterval(document.msg[id][0]);
}

function createMsgElement(name)
{
	var msgName=this.form.getAttribute('id')+"_"+name+"Msg";
	var msg = document.getElementById(msgName);
	if(msg) return msg;
	msg = document.createElement("div");
	msg.setAttribute("id", msgName);
	msg.className="errorMessage";
	this.form.elements[name].parentNode.insertBefore(msg,this.form.elements[name]);
	return msg;
}

function getError(name,error_type,A,B,C)
{
	msgObj=this.createMsgElement(name);
	if(!msgObj) return false;
	msgObj.innerHTML= " "; msgObj.style.display="block";
	this.errors++;
	switch(error_type){
		case "empty":
		document.msg[document.msg.length]= new Array(setInterval("this.showMgs('"+document.msg.length+"')",800/this.lang["empty"].length),msgObj,this.lang["empty"],0);
		break;
		case "minLen":
		document.msg[document.msg.length]= new Array(setInterval("this.showMgs('"+document.msg.length+"')",800/this.lang["empty"].length),msgObj,this.lang["minLen"].replace("%d",A),0);
		break;
		case "len":
		msg = this.lang["len"].replace("%d1",A);	msg = msg.replace("%d2",B);
		document.msg[document.msg.length]= new Array(setInterval("this.showMgs('"+document.msg.length+"')",800/this.lang["empty"].length),msgObj,msg.replace("%d3",C),0);
		break;
		case "fill":
		document.msg[document.msg.length]= new Array(setInterval("this.showMgs('"+document.msg.length+"')",800/this.lang["empty"].length),msgObj,this.lang["fillError"],0);
		break;
		case "Msg":
		document.msg[document.msg.length]= new Array(setInterval("this.showMgs('"+document.msg.length+"')",800/this.lang["empty"].length),msgObj,A,0);
		break;
		case "Ok": msgObj.style.display="";this.errors--; break;
	}

}

function checkRes()
{
	if(this.errors==0) return true;
	else return false;
}

function string(name,Min,Max)
{
	var val = this.form.elements[name].value;
	if(val.length == 0){ this.getError(name,"empty"); return ; }
	if(Min) if(val.length < Min){ this.getError(name,"minLen",Min); return;}
	if(Min&&Max) if(val.length > Max) {this.getError(name,"len",Min,Max,val.length); return;}
this.getError(name,"Ok");
}
function mail(name)
{
	var val = this.form.elements[name].value;
	if(val.length == 0){ this.getError(name,"empty"); return ; }
	var test = new RegExp(/^[A-Za-z\d]+(\.[A-Za-z\d]+[A-Za-z\d\-\_]*[A-Za-z\d]+|[A-Za-z\d\-\_]*[A-Za-z\d]+)*@([A-Za-z\d]+[A-Za-z\d\-\_]*[A-Za-z\d]+\.)+[A-Za-z\d\-\_]{2,3}$/);
    if(! test.test(val)) {this.getError(name,"fill"); return;}
this.getError(name,"Ok");
}
function number(name,Min,Max)
{
  var val = this.form.elements[name].value;
	if(val.length == 0){ this.getError(name,"empty"); return ; }
	var test = new RegExp(/^(\-|\+|)\d+([\.\,]*\d+|)$/);
	if(!test.test(val)){ this.getError(name,"fill"); return ; }
	if(Min) if(val < Min) {this.getError(name,"fill"); return;}
	if(Min&&Max) if(val > Max) { this.getError(name,"fill"); return;}
this.getError(name,"Ok");
}
function regExpr(msg,ex)
{
	if(arguments.length<=2) return;
	for(i=2;i<arguments.length;i++)
		if(! ex.test(this.form.elements[arguments[i]].value)) this.getError(arguments[i],"Msg",msg);
	else this.getError(arguments[i],"Ok");
}

function passwords(errorText,name_1,name_2,minLength,maxLength)
{
	var p = this.form.elements[name_1].value;
	var p2 = this.form.elements[name_2].value;
	var test = new RegExp("^[\\da-zA-Z]{"+(minLength?minLength:4)+","+(maxLength?maxLength:10)+"}$");
	if(!test.test(p) || p!==p2) { this.getError(name_1,"Msg",errorText); return;}
this.getError(name_1,"Ok");
}

function notIn(msg,name)
{
	if(arguments.length<=2) return;
	//var val = this.form.elements[name].value;
  var val = this._getValue(this.form.elements[name])
	for(i=2;i<arguments.length;i++)
		if(val===arguments[i]){ this.getError(name,"Msg",msg); return;}
  this.getError(name,"Ok");
}
function multi(msg,name,Min,Max)
{
	if(arguments.length<4) return;
	var sel=this.form.elements[name]; var count=0;
	for(i=0;i<sel.options.length;i++)
	if(sel.options[i].selected)	{
		count++;
		if(arguments.length>4)
			for(x=4;x<arguments.length;x++)
			if(sel.options[i].value==arguments[x]){ this.getError(name,"Msg",msg); return;}
	}
	if(count<Min||count>Max) {this.getError(name,"Msg",msg); return;}
this.getError(name,"Ok");
}

function _getValue(obj)
{
  if (obj.tagName === 'SELECT')
  {
    if (obj.selectedIndex <0)
      return null
    return obj.options[obj.selectedIndex].value
  }
  else
  if(obj.tagName === 'INPUT')
  {
    switch(obj.type)
    {
      case "checkbox":
        if (obj.checked == true)
          return 1
        else
          return 0
        break;
      case "file":
        return obj.value
        break;
      //case "radio":
      //  break;
      case "text":
        return obj.value
    }
  }
}

