//''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
//''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
//''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
var validXmlDocJS;

function onSendForm(formname)
{
	var oFields = document.all["__field__"];
	try
	{
		for(var i=0; i<oFields.length; i++)
		{
			var oInput = null;
			
			if(oInput = oFields[i].firstChild)
			{
				var dv = new dataValidator(oInput);
				
				dataValidatorPrototypeGetValue(dv);
				dataValidatorPrototypeCheckField(dv);

				if(dv.error)	break;
			}
		}
	}
	catch(e){alert("catch " + e.description); window.status=".onSendForm()"+e.description}	

	return dv.error;
}
//''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
function msgBox(current, code, noCol)
{
	try
	{
		var labelid		= current.id+"_";
		var message		= "";
		var label		= "";
		
		try
		{
			if(document.all[labelid])
			{
				label	= document.all[labelid].innerText.replace(/:/gim,"");
			}
			else
			{
				label = current.id
			}
		}
		catch (ex)
		{
			label = current.id;
		}
		
		//if(code)		message	= validXmlDocJS.get(code);
		
		message = code + label + ".";
		
		//if(noCol)		alert(message);
		//else			alert(message+": "+label);
		alert(message);
		
		try{	current.focus();	} catch(e){}
		try{	current.select();	} catch(e){}
	}
	catch(e)
	{
		throw new Error(".msgBox() "+e.description);
	}
}
//''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
//''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
//''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
function dataValidator(current)
{
	this.current	= current;
	this.error		= false;
}
//''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
function dataValidatorPrototypeGetValue(dv)
{
	try
	{
		if(!dv.current.datatype)
		{
			this.data	= "";
			return dv;
		}
		switch(dv.current.datatype.toLowerCase())
		{
			case "text":
				dv.data	= dv.current.innerText;	
			break;
			
			case "string":
			case "select":
			default:
				dv.data	= dv.current.value;	
			break;
		}
	}
	catch(e){throw new Error(".getValue()"+e.description)};
}
//''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
function dataValidatorPrototypeCheckField(dv)
{
	try
	{
		var isReq = dv.current.getAttribute('required');
		if(isReq == "true")
		{
			if(dataValidatorPrototypeIsEmpty(dv))
			{
				msgBox(dv.current, "Please enter a value for ");
				
				dv.error = true;
			}
		}
		
		if(dv.current.datatype && dv.current.datatype.toLowerCase()=="number")
		{
			if(!dataValidatorPrototypeIsNumber(dv))
			{
				msgBox(dv.current, "noNumberField");
				dv.error		= true;
			}
		}
		if(dv.current.datatype && dv.current.datatype.toLowerCase()=="datetime")
		{
			if(!dataValidatorPrototypeIsNumber(dv))
			{
				msgBox(dv.current, "noDateTimeField");
				dv.error		= true;
			}
		}
	
		modf = dv.current.getAttribute('modifier')
		//dv.current.datatype && dv.current.datatype.toLowerCase()=="string" && 
		if(modf=="email")
		{
			switch(modf.toLowerCase())
			{
				case "email":
				
					if(!dataValidatorPrototypeIsEMail(dv))
					{
						msgBox(dv.current, "Please enter a valid Email ", true);
						//msgBox(this.current, "", true );
						dv.error		= true;
					}
				
				break;
			}
		}
	}
	catch(e){throw new Error(".checkField()"+e.description)};
}
//''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
function dataValidatorPrototypeIsEmpty(dv)
{
	var dt		= dv.current.value;
    var vle		= trim(dt);
    
	return (vle=="");
}
//''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
function dataValidatorPrototypeIsInt(dv)// +,-, 0-9
{
	var dt		= dv.current.value;
    var vle		= trim(dt);
    if(vle=="")								return true;
    
    return (vle.match(/^[ ]*[+-]?\d+[ ]*$/)!=null); // integer||null
}
//''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
function dataValidatorPrototypeIsNumber(dv)// +,-, 0-9.0-9
{
	var dt		= dv.current.value;
    var vle		= trim(dt);
    if(vle=="")								return true;
    
    return(vle.match(/^[ ]*[+-]?\d+[ ]*[\.]?([0-9]*)?$/)!=null); // number||null
}
//''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
function dataValidatorPrototypeIsDate(dv)// xx/xx/xxxx
{
	var dt		= dv.current.value;
    var vle		= trim(dt);
    if(vle=="")								return true;
    
	var arr		= vle.split("/");
		
	if(arr.length!=3)						return false;	
	
	var	dd		= CInt(arr[0]);
	var	mm		= CInt(arr[1]);
	var	yyyy	= CInt(arr[2]);
		
    if(dd   <1    || dd > 31)				return false;
    if(mm   <1    || mm   > 12)				return false;
    if(yyyy <1900 || yyyy > 2100)			return false;
    if(yyyy%4==0 & mm==2 & dd>29)			return false;
    if(yyyy%4!=0 & mm==2 & dd>28)			return false;
    if((mm==4||mm==6||mm==9||mm==11)&dd>30)	return false;
    
    try{var d	= new Date(vle);}catch(e){	return false;}

                                            return true;
}   
//''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
function dataValidatorPrototypeIsEMail(dv)// simple check
{
	var dt		= dv.current.value;
    var vle		= trim(dt);
	if(vle=="")	return true;

	return (vle.match(/^[\w-]+@[\w-]+\.([a-zA-Z]+|[a-zA-Z]+\.[a-zA-Z]+)$/)!=null);
}
//''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
function dataValidatorPrototypeIsZipCode(dv)
{
	var dt		= dv.value;
    var vle		= trim(dt);
    
    if(vle=="")							return true;

	return (vle.match(/^\d{5}$/)!=null);
}
//''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
function dataValidatorPrototypeIsPhone(dv)
{
	var dt		= dv.current.value;
    var vle		= trim(dt);
   
    if(vle=="")							return true;
	
	if(vle.replace(/[0-9 -]*/g,"")=="") return true;
	//if(vle.replace(/[0-9 ]*/g,"")=="")return true;
	                                    return false;
}
//''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
function dataValidatorPrototypeIsId(dv)
{
	var dt		= dv.current.value;
    var vle		= trim(dt);
    if(vle=="")							return true;

	return (vle.match(/^\d{9}$/)!=null);
}
//''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
function dataValidatorPrototypeIsAlphabet(dv)
{
	var dt		= dv.current.value;
    var vle		= trim(dt);
	if(vle=="")							return true;

	var newvle	= vle.replace(/[0-9]*/g,"");
		newvle	= newvle.replace(/[@#\$%\^&\*-\+]*/g,"");
	
	return	(vle.length==newvle.length);
}
//''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
function dataValidatorPrototypeGetKSFormat(dv)
{
	try
	{
		var dt			= dv.current.value;
		
		if(trim(dt)=="")		return dt;
		if(dt.indexOf("-")>0)	return dt;
		
		var arr			= dt.split("/");
		
		if(arr.length!=3)		return dt;
		
		var dd			= arr[0];
		var mm			= arr[1];
		var yyyy		= arr[2];
			
		var ddmmyyyy	= yyyy + "-"+ mm + "-" + dd;
		
				return ddmmyyyy;
	}
	catch(e){	return dv.current.value;}		
}
//''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
function dataValidatorPrototypeGetILFormat(dv)
{
	try
	{
		var dt			= dv.current.value;
		
		if(trim(dt)=="")		return dt;
		if(dt.indexOf("T")>0)	return dt;	// if meta date
		
			dt			= dt.replace(/-/,"/");	

		var d			= new Date(dt);	
		var dd			= d.getDate();       if (dd<10) dd = "0" + dd;
		var mm			= d.getMonth() + 1;  if (mm<10) mm = "0" + mm;
		var yyyy		= d.getFullYear();
			
		var ddmmyyyy	= dd + "/"+ mm + "/" + yyyy;
		
				return ddmmyyyy;
	}
	catch(e){	return dv.current.value;}		
}
//''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
function dataValidatorPrototypeGetUSAFormat(dv)
{
	try
	{
		var dt			= dv.current.value;
		
		if(trim(dt)=="")		return dt;
		if(dt.indexOf("T")>0)	return dt;	// if meta date
		
			dt			= dt.replace(/-/,"/");	

		var d			= new Date(dt);	
		var dd			= d.getDate();       if (dd<10) dd = "0" + dd;
		var mm			= d.getMonth() + 1;  if (mm<10) mm = "0" + mm;
		var yyyy		= d.getFullYear();
			
		var ddmmyyyy	= yyyy + "/"+ mm + "/" + dd;
		
				return ddmmyyyy;
	}
	catch(e){	return dv.current.value;}		
}
//''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
//''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
//''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
function SiteDictionary()
{
	try
	{
		var xmlCurrDoc;
		if (window.ActiveXObject)
		{
			xmlCurrDoc = new ActiveXObject("Microsoft.XMLDOM");
			xmlCurrDoc.async = false;
			while (xmlCurrDoc.readyState != 4) { }
			xmlCurrDoc.load(xmlPath);
			validXmlDocJS = xmlCurrDoc;
		}
		else
		{
			if (document.implementation && document.implementation.createDocument)
			{
				xmlCurrDoc = document.implementation.createDocument("", "", null);
				xmlCurrDoc.async = false; 
			
				var isLoaded = xmlCurrDoc.load(xmlPath);
				if (isLoaded == true) { validXmlDocJS = xmlCurrDoc; }
			}
		}

		//if(!xmlCurrDoc.load(path))
		//{
		//	var err = xmlCurrDoc.parseError;
		//	throw new Error(" reason="+err.reason+" line="+err.line+" srcText="+trim(err.srcText));		
		//}
		//validXmlDocJS = xmlCurrDoc;
	}
	catch(e){  }
}
//''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
function SiteDictionaryPrototypeGet(word)
{
	var xpath = "/SITE/KEY[@ID='"+word+"']";
	
	try
	{	
		return validXmlDocJS.selectSingleNode(xpath).text;
	}
	catch(e)
	{
		alert("SiteDictionary.get("+xpath+") \n error="+e.description);
	}
	return word;
}
//''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
//''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

