function _cForm_addForm(formName,pathNr)
{
	if(!this.forms[formName])this.forms[formName]=new _cForm_form(formName,pathNr)
	return cObjPtr.getPtrObj(this.forms[formName].ptrNr);
}

function _cForm_getForm(formName,e)
{
	var _this=this.forms[formName];
	var fobj,x;
	fobj=cObjPath.getTgtObj(this.forms[formName].pathNr).document;
	if(!fobj.forms[formName])
	{
		for(x=0;x<fobj.layers.length;x++)
		{
			if(fobj.layers[x].document.forms[formName])
			{
				fobj=fobj.layers[x].document;
				break;
			}
		}
	}
	
	if(fobj.forms[formName])
	{
		fobj.forms[formName].onsubmit=new Function("e","return "+cObjPath.getSrcStr(this.forms[formName].pathNr)+"."+cObjPtr.getPtrStr(this.forms[formName].ptrNr)+".checkForm(this,'"+cObjPtr.getPtrStr(this.forms[formName].ptrNr)+"')");
		fobj.forms[formName].onreset=new Function("e","return "+cObjPath.getSrcStr(this.forms[formName].pathNr)+"."+cObjPtr.getPtrStr(this.forms[formName].ptrNr)+".resetForm(this,'"+cObjPtr.getPtrStr(this.forms[formName].ptrNr)+"')");
		
	this.forms[formName].parseNames(formName);
	this.forms[formName].setElements(formName);
	
	if(!_this.elementsReady)
	{
		for(x in _this.elementsUndo)
		{
			switch(typeof _this.elementsUndo[x])
			{
				case 'object':
				_this.elements[x]=new Array();
				for(y in _this.elementsUndo[x])
				{
					_this.elements[x][y]=_this.elementsUndo[x][y];
				}
				break;				
				default:
				_this.elements[x]=_this.elementsUndo[x]
				break;
				
			}
		}
		_this.elementsReady=true;
		_this.elementsUndoReady=false;
	}
	
	this.forms[formName].setEvents(formName);
	this.forms[formName].getElements(formName);
	}
}

function _cForm_setElement(obj)
{
	switch(obj.type)
	{
		case "checkbox":
		this.elements[obj.name]=(obj.checked)?((obj.value)?obj.value:"on"):"";
		//this.elements[obj.name]=(obj.checked)?((obj.value)?obj.value:true):false;
		break;
		case "select-one":
		case "select-multiple":
		if(!this.elements[obj.name])this.elements[obj.name]=new Array();
		for(x=0;x<obj.length;x++)
		{
			if(obj[x].selected)this.elements[obj.name][x]=obj[x].value;
			else this.elements[obj.name][x]="";
		}
		break;
		case "radio":
		case "text":
		case "textarea":
		this.elements[obj.name]=obj.value;
		break;
	}
	this.elementsReady=true;
}

function _cForm_parseNames(formName)
{
	var x,y,z;
	
	
	if(cObjPath.getTgtObj(this.pathNr).document.forms[formName])
	{
		var obj=cObjPath.getTgtObj(this.pathNr).document.forms[formName].elements
	}
	else
	{
		for(x=0;x<cObjPath.getTgtObj(this.pathNr).document.layers.length;x++)
		{
			if(cObjPath.getTgtObj(this.pathNr).document.layers[x].document.forms[formName])
			{
				var obj=cObjPath.getTgtObj(this.pathNr).document.layers[x].document.forms[formName].elements;
				break;
			}
		}
	}
	
	for(x=0;x<obj.length;x++)
	{
		var name=obj[x].name;
		var op;
		var c="";
		switch(obj[x].type)
		{
			case "text": 
			case "textarea": 
			case "file":
				if(name.charAt(0)=="$")
				{
					done=false;
					while(!done)
					{
						op="";
						for(z=1;z<name.length;z++)
						{
							c=name.charAt(z)
							if(c=="_"){name=name.substr(z);break;}
							op+=c;
						}
						switch(op)
						{
							case "num":
								obj[x].onkeypress=new Function("e","return "+cObjPath.getSrcStr(this.pathNr)+"."+cObjPtr.getPtrStr(this.ptrNr)+".isNumeric(e)");
							break;
							case "alpha":
								obj[x].onkeypress=new Function("e","return "+cObjPath.getSrcStr(this.pathNr)+"."+cObjPtr.getPtrStr(this.ptrNr)+".isAlpha(e)");
							break;
							case "in":
							op="";
							for(z=1;z<name.length;z++)
							{
								c=name.charAt(z)
								if(c=="_"){name=name.substr(z);break;}
								op+=c;
							}
							this.isin[obj[x].name]=op;
							obj[x].onkeypress=new Function("e","return "+cObjPath.getSrcStr(this.pathNr)+"."+cObjPtr.getPtrStr(this.ptrNr)+".isIn(e)");
							break;
							case "req":
								this.check[obj[x].name]=op;
							break;
							case "email":
								obj[x].onblur=new Function("e",cObjPath.getSrcStr(this.pathNr)+"."+cObjPtr.getPtrStr(this.ptrNr)+".isEMail(e)");
								//this.check[obj[x].name]=op;
							break;
							case "ccard":
								obj[x].onblur=new Function("e",cObjPath.getSrcStr(this.pathNr)+"."+cObjPtr.getPtrStr(this.ptrNr)+".isCCard(e)");
								//this.check[obj[x].name]=op;
							break;
							case "if":
							op="";
							for(z=1;z<name.length;z++)
							{
								if((c=name.charAt(z))=="_"){name=name.substr(z);break}
								op+=c;
							}
							if(!this.ifis[obj[x].name])this.ifis[obj[x].name]=new Array()
							this.ifis[obj[x].name].name=op;
							op="";
							for(z=1;z<name.length;z++)
							{
								if((c=name.charAt(z))=="_"){name=name.substr(z);break};
								op+=c;
							}
							this.ifis[obj[x].name].value=op;
							break;
							default:
							this.newname[obj[x].name]=op;
							done=true;
							break;
						}
					}
					
				}
			break;
		}
	}
}

function _cForm_resetForm(obj,objStr)
{
	var _this=eval(objStr);
	for(x in _this.elements)
	{
		switch(typeof _this.elements[x])
		{
			case 'object':
			_this.elementsUndo[x]=new Array();
			for(y in _this.elements[x])
			{
				_this.elementsUndo[x][y]=_this.elements[x][y];
			}
			break;
			default:
			_this.elementsUndo[x]=_this.elements[x];
			break;
			
		}
		
	}
	_this.elements=new Array();
	_this.elementsReady=false;
	_this.elementsUndoReady=true;
}

function _cForm_checkForm(obj,objStr)
{
	var x,b,s,n;
	var _this=eval(objStr);
	
	var valid=true;
	
	_this.setElements(obj.name);
	
	for(x in _this.elements)
	{
		
		b=true;
		if(_this.ifis[x])
		{
			n=_this.ifis[x].name;
			s=(obj.elements[n].type)?obj.elements[n].type:obj.elements[n][0].type
			switch(s)
			{
				case "text": 
				case "textarea": 
				case "file":
				case "checkbox":
					if(_this.elements[_this.ifis[x].name]!=this.ifis[x].value)b=false;
				break;
				case "radio":
				case "select-one":
				case "select-multiple":
					for(y=0;y<_this.elements[_this.ifis[x].name].length;y++)
					{
						if(_this.elements[_this.ifis[x].name][y]!="")
						{
							if( _this.elements[_this.ifis[x].name][y]!=this.ifis[x].value  )b=false;
						}
					}
				break;
			}
		}
		if(b)
		{
			switch(_this.check[x])
			{
				case "req":
					if(valid)
					{
						if(!(valid=_this.elements[x]))obj.elements[x].focus()	
					}
				break;
				case "email":
					if(_this.elements[x])valid =(/[\w.]*@[\w.]*/).exec(_this.elements[x])
				break;
			}
		}
	}
	if(!valid)
	{
		alert(cWords['notvalid'])
		return false;
	}
	else
	{
		for(x in _this.newname)
		{
			obj.elements[x].name=_this.newname[x];
		}
		return true;
	}
}



function _cForm_isEMail(e)
{
	if(isIE)var o=cObjPath.getTgtObj(this.pathNr).event.srcElement;
	else if(isNN)var o=e.target;
	if(this.oldValue[o.name]!=o.value)
	{
		if(!(/[\w.]+@[\w.]+/).exec(o.value))
		{
			alert(cWords['noemail']);
		}
		this.oldValue[o.name]=o.value;
	}
}

function _cForm_checkCCard(cc)
{
	var x,c=0,csum=0,t;
	for(x=cc.length-1;x>=0;x--)
	{
		if(c%2)
		{
			t=(parseInt(cc.charAt(x))*2).toString()
			for(y=0;y<t.length;y++){csum+=parseInt(t.charAt(y))}
		}
		else csum+=parseInt(cc.charAt(x))
		c++
	}
	return !(csum%10)
}

function _cForm_isCCard(e)
{
	if(isIE)var o=cObjPath.getTgtObj(this.pathNr).event.srcElement;
	else if(isNN)var o=e.target;
	if(this.oldValue[o.name]!=o.value)
	{
		if(!this.checkCCard(o.value))
		{
			alert(cWords['unknowncard']);
		}
		this.oldValue[o.name]=o.value;
	}
}

function _cForm_isAlpha(e)
{
	if(isIE)var c=cObjPath.getTgtObj(this.pathNr).event.keyCode;
	else if(isNN)var c=e.which;
	return (c<=47||(c>=58 && c<=255))
}

function _cForm_isNumeric(e)
{
	if(isIE)var c=cObjPath.getTgtObj(this.pathNr).event.keyCode;
	else if(isNN)var c=e.which;
	return (c<=32||(c>=40 && c<=59))
}

function _cForm_isIn(e)
{
	if(isIE)
	{
		var c=cObjPath.getTgtObj(this.pathNr).event.keyCode;
		var o=cObjPath.getTgtObj(this.pathNr).event.srcElement;
	}
	else if(isNN)
	{
		var c=e.which;
		var o=e.target;
	}
	return (this.isin[o.name].indexOf(String.fromCharCode(c))>=0)
}

function _cForm_setElements(formName)
{
	//var obj=cObjPath.getTgtObj(this.pathNr).document.forms[formName].elements
	
	if(cObjPath.getTgtObj(this.pathNr).document.forms[formName])
	{
		var obj=cObjPath.getTgtObj(this.pathNr).document.forms[formName].elements
	}
	else
	{
		for(x=0;x<cObjPath.getTgtObj(this.pathNr).document.layers.length;x++)
		{
			if(cObjPath.getTgtObj(this.pathNr).document.layers[x].document.forms[formName])
			{
				var obj=cObjPath.getTgtObj(this.pathNr).document.layers[x].document.forms[formName].elements;
				break;
			}
		}
	}
	
	
	for(x=0;x<obj.length;x++)
	{
		if(!this.elements[obj[x].name])
		{
			switch(obj[x].type)
			{
				case "text": 
				case "textarea": 
				case "file":
					this.elements[obj[x].name]=obj[x].value;
				break;
				case "select-one":
				case "select-multiple":
						this.elements[obj[x].name]=new Array();
						for(y=0;y<obj[x].options.length;y++)
						{
							if(obj[x].options[y].selected)this.elements[obj[x].name][y]=obj[x].options[y].value;
							else this.elements[obj[x].name][y]="";
						}
				break;
				case "checkbox":
					if(!this.elements[obj[x].name] && this.elements[obj[x].name]!="")this.elements[obj[x].name]=(obj[x].checked)?((obj[x].value)?obj[x].value:"on"):"";
				break;
				case "radio":
					if(!this.elements[obj[x].name])this.elements[obj[x].name]="";
				break;
			}
		}
	}
}


function _cForm_setEvents(formName)
{
	//var obj=cObjPath.getTgtObj(this.pathNr).document.forms[formName].elements
	
	if(cObjPath.getTgtObj(this.pathNr).document.forms[formName])
	{
		var obj=cObjPath.getTgtObj(this.pathNr).document.forms[formName].elements
	}
	else
	{
		for(x=0;x<cObjPath.getTgtObj(this.pathNr).document.layers.length;x++)
		{
			if(cObjPath.getTgtObj(this.pathNr).document.layers[x].document.forms[formName])
			{
				var obj=cObjPath.getTgtObj(this.pathNr).document.layers[x].document.forms[formName].elements;
				break;
			}
		}
	}

	for(x=0;x<obj.length;x++)
	{
		var func=new Function("dummy",cObjPath.getSrcStr(this.pathNr)+"."+cObjPtr.getPtrStr(this.ptrNr)+".setElement(this)")
		switch(obj[x].type)
		{
			case "text": 
			case "textarea": 
			case "file":
			case "select-one":
			case "select-multiple":
				obj[x].onchange=func
			break;
			case "checkbox":
			case "radio":
				obj[x].onclick=func
			break;
		}
	}
}


function _cForm_getElements(formName)
{
	
	var fobj,x;
	fobj=cObjPath.getTgtObj(this.pathNr).document;
	
	if(!fobj.forms[formName])
	{
		for(x=0;x<fobj.layers.length;x++)
		{
			if(fobj.layers[x].document.forms[formName])
			{
				fobj=fobj.layers[x].document.forms;
				break;
			}
		}
	}

	for(x in this.elements)
	{
		var obj=fobj[formName][x]
			
			switch ((obj.type)?obj.type:obj[0].type)
			{
			case "radio":
				for(y=0;y<obj.length;y++)
				{
					if(obj[y].value==this.elements[x])obj[y].checked=true;
				}
			break;
			case "select-one":
			case "select-multiple":
				for(y=0;y<obj.length;y++)
				{
					if(obj[y].value==this.elements[x][y])obj[y].selected=true;
				}
			break;
			case "checkbox":
				obj.checked=(this.elements[x])?true:false;
			break;
			case "text":
			case "textarea":
			case "file":
				obj.value=this.elements[x]
			break;
			default:
			break;
			}
	}
}

function _cForm_setHidden(hidden,formName)
{
	_this=(formName)?this.forms[formName]:this;
	_this.hidden=(hidden)?hidden:_this.hidden
	
	if(cObjPath.getTgtObj(_this.pathNr).document.forms[_this.formName])
	{
		cObjPath.getTgtObj(_this.pathNr).location.reload();
	}
	else if(isNN)
	{
	var fobj;x;
	fobj=cObjPath.getTgtObj(_this.pathNr).document;
	if(!fobj.forms[_this.formName])
	{
		for(x=0;x<fobj.layers.length;x++)
		{
			if(fobj.layers[x].document.forms[_this.formName])
			{
				fobj=fobj.layers[x].location.reload;
				break;
			}
		}
	}

	}

}

function _cForm_getHidden(formName)
{
	var x,out='';
	var _this=this.forms[formName];
	for(x in _this.hidden)
	{
		out+=_this.hidden[x];
	}
	return out;
}


function _cForm_writeHidden(formName)
{
	cObjPath.getTgtObj(this.forms[formName].pathNr).document.write(this.getHidden(formName))
}

function _cForm_form(formName,pathNr)
{
	this.ptrNr=cObjPtr.setPtr(this);
	this.pathNr=pathNr
	this.hidden=new Array();
	this.oldValue=new Array();
	this.formName=formName;
	
	this.elements=new Array();
	this.elementsUndo=new Array();
	
	this.check=new Array();
	this.isin=new Array();
	this.ifis=new Array();
	this.newname=new Array();
	
	this.checkCCard=_cForm_checkCCard
	this.isCCard=_cForm_isCCard
	this.resetForm=_cForm_resetForm
	this.getElements=_cForm_getElements;
	this.setElement=_cForm_setElement;
	this.setElements=_cForm_setElements;
	this.setEvents=_cForm_setEvents;
	this.isEMail=_cForm_isEMail;
	this.isIn=_cForm_isIn;
	this.isAlpha=_cForm_isAlpha;
	this.isNumeric=_cForm_isNumeric;
	this.checkForm=_cForm_checkForm;
	this.parseNames=_cForm_parseNames;
	this.setHidden=_cForm_setHidden;
	this.writeHidden=_cForm_writeHidden;
	this.getHidden=_cForm_getHidden;
	
}

function _cForm()
{
	this.addForm=_cForm_addForm;
	this.getForm=_cForm_getForm;
	this.writeHidden=_cForm_writeHidden;
	this.setHidden=_cForm_setHidden;
	this.getHidden=_cForm_getHidden;
	this.forms=new Array();
}

cForm = new _cForm;