




function isnewfele(ele) {
	if(isempty(ele)) return false;
	else if(!isdefined(ele.eletype)) return false;
	else if(ele.eletype==12) return true;
	return false;
}

function newfele(ele,title) {
	ele=newvele(ele); if(!ele) return false; 
	if(ele.eletype==12) return ele;
	ele.eletype=12;

	ele.istbox=feleistbox;
	ele.ispw=feleispw;
	ele.ista=feleista;
	ele.isbtn=feleisbtn;
	ele.issubmit=feleissubmit;
	ele.isreset=feleisreset;
	ele.isimage=feleisimage;
	ele.iscb=feleiscb;
	ele.isradio=feleisradio;
	ele.isselect=feleisselect;
	ele.isfile=feleisfile;
	ele.ishidden=feleishidden;

	ele.fieldtitle=title;
	
	ele.enable=feleenable;
	ele.disable=feledisable;
	ele.checkfele=felecheckfele;

	ele.vattfilled=0;
	ele.vattnumber=0;
	ele.vattnumrange=0; ele.vattnumrangemin=-1; ele.vattnumrangemax=-1;
	ele.vattlen=0; ele.vattlenmin=-1; ele.vattlenmax=-1;
	ele.vattemail=0;
	ele.vatttel=0;

	ele.vfilled=felevfilled;
	ele.vnumber=felevnumber;
	ele.vnumrange=felevnumrange;
	ele.vlen=felevlen;
	ele.vemail=felevemail;
	ele.vtel=felevtel;

	ele.falseactionfilled=feledefaultfalseactionfilled;
	ele.falseactionnumber=feledefaultfalseactionnumber;
	ele.falseactionnumrange=feledefaultfalseactionnumrange;
	ele.falseactionlen=feledefaultfalseactionlen;
	ele.falseactionemail=feledefaultfalseactionemail;
	ele.falseactiontel=feledefaultfalseactiontel;
	
	ele.verifyfilled=feleverifyfilled;
	ele.verifynumber=feleverifynumber;
	ele.verifynumrange=feleverifynumrange;
	ele.verifylen=feleverifylen;
	ele.verifyemail=feleverifyemail;
	ele.verifytel=feleverifytel;
	
	ele.verified=feleverified;
	
	return ele;
}

function feleistbox() {
	if(this.tagName.toLowerCase()=='input') if(this.type.toLowerCase()=='text') return true;
	return false;
}
function feleispw() {
	if(this.tagName.toLowerCase()=='input') if(this.type.toLowerCase()=='password') return true;
	return false;
}
function feleista() {
	if(this.tagName.toLowerCase()=='textarea') return true;
	return false;
}
function feleisbtn() {
	if(this.tagName.toLowerCase()=='input') if(this.type.toLowerCase()=='button') return true;
	return false;
}
function feleissubmit() {
	if(this.tagName.toLowerCase()=='input') if(this.type.toLowerCase()=='submit') return true;
	return false;
}
function feleisreset() {
	if(this.tagName.toLowerCase()=='input') if(this.type.toLowerCase()=='reset') return true;
	return false;
}
function feleisimage() {
	if(this.tagName.toLowerCase()=='input') if(this.type.toLowerCase()=='image') return true;
	return false;
}
function feleiscb() {
	if(this.tagName.toLowerCase()=='input') if(this.type.toLowerCase()=='checkbox') return true;
	return false;
}
function feleisradio() {
	if(this.tagName.toLowerCase()=='input') if(this.type.toLowerCase()=='radio') return true;
	return false;
}
function feleisselect() {
	if(this.tagName.toLowerCase()=='select') return true;
	return false;
}
function feleisfile() {
	if(this.tagName.toLowerCase()=='input') if(this.type.toLowerCase()=='file') return true;
	return false;
}
function feleishidden() {
	if(this.tagName.toLowerCase()=='input') if(this.type.toLowerCase()=='hidden') return true;
	return false;
}

function feleenable(bgc) {
	if(!bgc) bgc='#ffffff';
	this.disabled=false;
	this.style.backgroundColor=bgc;
}
function feledisable(bgc) {
	if(!bgc) bgc='#eeeeee';
	this.disabled=true;
	this.style.backgroundColor=bgc;
}
function felecheckfele(fele) {
	if(!this.iscb()||!fele) return -1;
	fele=newfele(fele);
	this.checked=false;
	fele.disable();
	this.addevent('mouseup',function(){
		if(this.checked) fele.disable();
		else fele.enable();
	});
}

function felevfilled() {
	this.vattfilled=1;
}
function felevnumber() {
	this.vattnumber=1;
}
function felevnumrange(min,max) {
	this.vattnumrange=1;
	this.vattnumrangemin=min;
	this.vattnumrangemax=max;
}
function felevlen(min,max) {
	this.vattlen=1;
	this.vattlenmin=min;
	this.vattlenmax=max;
}
function felevemail() {
	this.vattemail=1;
}
function felevtel() {
	this.vatttel=1;
}

function feledefaultfalseactionfilled() {
	//alert(this.fieldtitle+": Required field");
	alert(this.fieldtitle+": 必須填寫");
}
function feledefaultfalseactionnumber() {
	//alert(this.fieldtitle+": Must be number");
	alert(this.fieldtitle+": 必須為數字");
}
function feledefaultfalseactionnumrange() {
	//alert(this.fieldtitle+": Value is either too small or too large");
	//alert(this.fieldtitle+": Must be between "+this.vattnumrangemin+" to "+this.vattnumrangemax);
	alert(this.fieldtitle+": 數值過低或過高");
	//alert(this.fieldtitle+": 數值須於 "+this.vattnumrangemin+" 及 "+this.vattnumrangemax+" 之間");
}
function feledefaultfalseactionlen() {
	//alert(this.fieldtitle+": Length is either too short or too long");
	//alert(this.fieldtitle+": Length must be between "+this.vattlenmin+" to "+this.vattlenmax);
	alert(this.fieldtitle+": 長度過短或過長");
	//alert(this.fieldtitle+": 長度須於 "+this.vattlenmin+" 及 "+this.vattlenmax+" 之間");
}
function feledefaultfalseactionemail() {
	//alert(this.fieldtitle+": Invalid Email address");
	alert(this.fieldtitle+": 電郵地址無效");
}
function feledefaultfalseactiontel() {
	//alert(this.fieldtitle+": Invalid Tel. No.");
	alert(this.fieldtitle+": 電話號碼無效");
}

function feleverifyfilled() {
	var ele=this; if(!(ele.istbox()||ele.ispw()||ele.ista()||ele.iscb()||ele.isradio()||ele.isselect()||ele.ishidden())) return -1;
	var vfailed=0; var v=ele.value;
	if(v==null||v==''||v.replace(/ /g,'').length<1) vfailed=1;
	if(vfailed&&typeof(ele.falseactionfilled)=='function') ele.falseactionfilled();
	return !vfailed;
}
function feleverifynumber() {
	var ele=this; if(!(ele.istbox()||ele.ispw()||ele.ista()||ele.iscb()||ele.isradio()||ele.isselect()||ele.ishidden())) return -1;
	var vfailed=0; var v=ele.value;
	if(v==null||v==''||v.replace(/ /g,'').length<1) vfailed=0;
	else if(v!=0&&isNaN(v)) vfailed=1;
	if(vfailed&&typeof(ele.falseactionnumber)=='function') ele.falseactionnumber();
	return !vfailed;
}
function feleverifynumrange() {
	var ele=this; if(!(ele.istbox()||ele.ispw()||ele.ista()||ele.iscb()||ele.isradio()||ele.isselect()||ele.ishidden())) return -1;
	var vfailed=0; var v=ele.value; var resultmin=false; var resultmax=false;
	if(v==null||v==''||v.replace(/ /g,'').length<1) vfailed=0;
	else {
		if(ele.vattnumrangemin<0||v>=ele.vattnumrangemin) resultmin=true; else resultmin=false;
		if(ele.vattnumrangemax<0||v<=ele.vattnumrangemax) resultmax=true; else resultmax=false;
		if(!(resultmin&&resultmax)) vfailed=1;
	}
	if(vfailed&&typeof(ele.falseactionnumrange)=='function') ele.falseactionnumrange();
	return !vfailed;
}
function feleverifylen() {
	var ele=this; if(!(ele.istbox()||ele.ispw()||ele.ista()||ele.iscb()||ele.isradio()||ele.isselect()||ele.ishidden())) return -1;
	var vfailed=0; var v=ele.value; var resultmin=false; var resultmax=false;
	if(v==null||v==''||v.replace(/ /g,'').length<1) vfailed=0;
	else {
		if(ele.vattlenmin<0||v.length>=ele.vattlenmin) resultmin=true; else resultmin=false;
		if(ele.vattlenmax<0||v.length<=ele.vattlenmax) resultmax=true; else resultmax=false;
		if(!(resultmin&&resultmax)) vfailed=1;
	}
	if(vfailed&&typeof(ele.falseactionlen)=='function') ele.falseactionlen();
	return !vfailed;
}
function feleverifyemail() {
	var ele=this; if(!(ele.istbox()||ele.ispw()||ele.ista()||ele.iscb()||ele.isradio()||ele.isselect()||ele.ishidden())) return -1;
	var vfailed=0; var v=ele.value;
	if(v==null||v==''||v.replace(/ /g,'').length<1) vfailed=0;
	else if(v.search('@')==-1||v.search('.')==-1||v.length<5) vfailed=1;
	if(vfailed&&typeof(ele.falseactionemail)=='function') ele.falseactionemail();
	return !vfailed;
}
function feleverifytel() {
	var ele=this; if(!(ele.istbox()||ele.ispw()||ele.ista()||ele.iscb()||ele.isradio()||ele.isselect()||ele.ishidden())) return -1;
	var vfailed=0; var v=ele.value;
	if(v==null||v==''||v.replace(/ /g,'').length<1) vfailed=0;
	else {
		v=v.replace(/ /g,'').replace(/-/g,'').replace(/\(/g,'').replace(/\)/g,'');
		if(v!=0&&isNaN(v)) vfailed=1;
	}
	if(vfailed&&typeof(ele.falseactiontel)=='function') ele.falseactiontel();
	return !vfailed;
}

function feleverified() {
	var allv=1;
	if(this.vattfilled) if(!this.verifyfilled()) allv=0;
	if(this.vattnumber) if(!this.verifynumber()) allv=0;
	if(this.vattnumrange) if(!this.verifynumrange()) allv=0;
	if(this.vattlen) if(!this.verifylen()) allv=0;
	if(this.vattemail) if(!this.verifyemail()) allv=0;
	if(this.vatttel) if(!this.verifytel()) allv=0;
	return allv;
}





function isnewform(ele) {
	if(isempty(ele)) return false;
	else if(!isdefined(ele.eletype)) return false;
	else if(ele.eletype==13) return true;
	return false;
}

function newform(ele) {
	ele=newele(ele); if(!ele) return false; 
	if(ele.eletype==13) return ele;
	ele.eletype=13;
	
	ele.fele=new Object();
	ele.setfele=formsetfele;
	ele.vfilled=formvfilled;
	ele.vnumber=formvnumber;
	ele.vnumrange=formvnumrange;
	ele.vlen=formvlen;
	ele.vemail=formvemail;
	ele.vtel=formvtel;
	
	ele.onsubmit=formverifyfele;

	return ele;
}

function formsetfele(fele,title) {
	if(!fele||!title) return;
	if(typeof(fele)=='string') eval("fele=this."+fele);
	if(typeof(fele)!='object') return;
	if(fele.name&&fele.type.toLowerCase()!='hidden') this.fele[fele.name]=newfele(fele,title);
}

function formvfilled(felename) {
	this.fele[felename].vfilled();
}
function formvnumber(felename) {
	this.fele[felename].vnumber();
}
function formvnumrange(felename,min,max) {
	this.fele[felename].vnumrange(min,max);
}
function formvlen(felename,min,max) {
	this.fele[felename].vlen(min,max);
}
function formvemail(felename) {
	this.fele[felename].vemail();
}
function formvtel(felename) {
	this.fele[felename].vtel();
}

function formverifyfele() {
	var vresult=true;
	for(var k in this.fele) if(!this.fele[k].verified()){ vresult=false; break; }
	return vresult;
}





