//''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
//''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
//''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
function onChangeKSFormField(formname, current, value)
{
	//alert(formname+": \n onchange() "+current.id+"="+current.datatype+","+current.modifier+" value="+value);
}
//''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
function onBlurKSFormField(formname, current, value)
{
	//alert(formname+": \n onblur() "+current.id+"="+current.datatype+","+current.modifier+" value="+value);
}
//''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
function onSaveKSForm(formname)
{
	//alert(formname+": \n onsave() \n" + xmldom.xml);
	
	var oFields = document.all["__field__"];
	
	try
	{
		if (formname!="OrderForm")
		{	// Standard check functions
			for(var i=0; i<oFields.length; i++)
			{
				var oInput = null;
				
				if(oInput = oFields[i].firstChild)
				{
					var dv		= new dataValidator(oInput);
						dv.getValue();
						dv.checkField();

						if(dv.error)	break;
				}
			}
		}
		else
		{	// If it is one of the Order forms
			
			var sFieldsNoNeed	= ",_form_KSForm_field_credit_type,_form_KSForm_field_credit_number,_form_KSForm_field_credit_year,_form_KSForm_field_credit_month,_form_KSForm_field_credit_owner,_form_KSForm_field_credit_passport,";
			
			for(var i=0; i<oFields.length; i++)
			{
				var oInput = null;
				
				if(oInput = oFields[i].firstChild)
				{
					if (sFieldsNoNeed.indexOf(","+oInput.id+",")==-1)
					{
						var dv		= new dataValidator(oInput);
							dv.getValue();
							dv.checkField();

							if(dv.error)	break;
					}
				}
			}
		}
		if (!dv.error && formname=="OrderForm")
		{
			var oForm	= document.forms[formname];
			// check credit fields
			if (oForm.radioNewClient.value=="radioNewClient")
			{
				oForm.order_details.value	= document.all['basketTD'].innerHTML;
				oForm.client_type.value		= oForm.radioNewClient.value_label;
				oForm.date1.value		= oForm.currentdate.value_label;
			}
			else
			{
				if (!CheckCardNumber(oForm))
					dv.error	= true;
				else
				{
					var iCheckId	= IDCheck(oForm._form_KSForm_field_credit_passport.value)
					if (iCheckId==1)
					{
						msgBox(oForm._form_KSForm_field_credit_passport, 'creditInvalidPassport', true);
						dv.error	= true;
					}
					else
					{
						oForm.order_details.value	= document.all['basketTD'].innerHTML;
						oForm.client_type.value		= oForm.radioNewClient.value_label;
						oForm.date1.value		= oForm.currentdate.value_label;
					}
				}
			}
		}
	}
	catch(e){window.status=".onSaveKSForm()"+e.description}	
	
	return dv.error;
}
//''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
function msgBox(current, code, noCol)
{
	try
	{
		var labelid	= current.id.replace(/_field_/gim,"_label_");
		var message	= "";
		var label	= "";
		
		if(document.all[labelid])
		{
			label	= document.all[labelid].innerText;
		}
		else	window.status = labelid;
		
		if(code)		message	= loadForm.sd.get(code);
		
		if(noCol)		alert(message);
		else			alert(message+": "+label);
		
		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 dataValidator.prototype.getValue()
{
	try
	{
		if(!this.current.datatype)
		{
			this.data	= "";
			return;
		}
		switch(this.current.datatype.toLowerCase())
		{
			case "boolean":
			break;
			case "text":
						this.data	= this.current.innerText;	
			break;
			case "codes":
			break;
			case "code":
			
				switch(this.current.modifier.toLowerCase())
				{
					case "radio":
					
						this.data				= "";
						var radioName			= this.current.name;
						var radioCollection		= this.current.childNodes;
						
						for(var j=0; j<radioCollection.length; j++)
						{
							if(radioCollection[j].tagName && radioCollection[j].tagName.toUpperCase()=="INPUT")
							{
								if(radioCollection[j].checked)
								{
									this.data	= radioCollection[j].value;
								}
							}
						}
					break;
					default:
					
						this.data	= this.current.value;	
					break;	
				}
			
			break;
			default:
			
						this.data	= this.current.value;	
			break;
		}
	}
	catch(e){throw new Error(".getValue()"+e.description)};
}
//''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
function dataValidator.prototype.checkField()
{
	try
	{
		if(this.current.required && this.current.required.toLowerCase()=="true")
		{
			if(this.isEmpty())
			{
				msgBox(this.current, "emptyField");
				this.error		= true;
			}
		}
		if(this.current.datatype && this.current.datatype.toLowerCase()=="number")
		{
			if(!this.isNumber())
			{
				msgBox(this.current, "noNumberField");
				this.error		= true;
			}
		}
		if(this.current.datatype && (this.current.datatype.toLowerCase()=="datetime"|| this.current.datatype.toLowerCase()=="date"))
		{
			if(!this.isDate())
			{
				msgBox(this.current, "noDateTimeField");
				this.error		= true;
			}
		}
		if(this.current.datatype && this.current.datatype.toLowerCase()=="string" && this.current.modifier)
		{
			
			switch(this.current.modifier.toLowerCase())
			{
				case "email":
					
					if(!this.isEMail())
					{
						msgBox(this.current, "noEmailField", true);
						//msgBox(this.current, "", true );
						this.error		= true;
					}
				
				break;
			}
		}
	}
	catch(e){throw new Error(".checkField()"+e.description)};
}
//''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
function dataValidator.prototype.isEmpty()
{
	var dt		= this.data;
    var vle		= trim(dt);
    
	return (vle=="");
}
//''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
function dataValidator.prototype.isInt()// +,-, 0-9
{
	var dt		= this.data;
    var vle		= trim(dt);
    if(vle=="")								return true;
    
    return (vle.match(/^[ ]*[+-]?\d+[ ]*$/)!=null); // integer||null
}
//''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
function dataValidator.prototype.isNumber()// +,-, 0-9.0-9
{
	var dt		= this.data;
    var vle		= trim(dt);
    if(vle=="")								return true;
    
    return(vle.match(/^[ ]*[+-]?\d+[ ]*[\.]?([0-9]*)?$/)!=null); // number||null
}
//''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
function dataValidator.prototype.isDate()// xx/xx/xxxx
{
	var dt		= this.data;
    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 dataValidator.prototype.isEMail()// simple check
{
	var dt		= this.data;
    var vle		= trim(dt);
	
	if(vle=="")	return true;
	
	return (vle.match(/^([a-zA-Z0-9_\-\.]+)@[\w-]+\.([a-zA-Z]+|[a-zA-Z]+\.[a-zA-Z]+)$/)!=null);
	//return (vle.match(/^[\w-]+@[\w-]+\.([a-zA-Z]+|[a-zA-Z]+\.[a-zA-Z]+)$/)!=null);
}
//''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
function dataValidator.prototype.isZipCode()
{
	var dt		= this.data;
    var vle		= trim(dt);
    
    if(vle=="")							return true;

	return (vle.match(/^\d{5}$/)!=null);
}
//''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
function dataValidator.prototype.isPhone()
{
	var dt		= this.data;
    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 dataValidator.prototype.isId()
{
	var dt		= this.data;
    var vle		= trim(dt);
    if(vle=="")							return true;

	return (vle.match(/^\d{9}$/)!=null);
}
//''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
function dataValidator.prototype.isAlphabet()
{
	var dt		= this.data;
    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 dataValidator.prototype.getKSFormat()
{
	try
	{
		var dt			= this.data;
		
		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 this.data;}		
}
//''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
function dataValidator.prototype.getILFormat()
{
	try
	{
		var dt			= this.data;
		
		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 this.data;}		
}
//''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
function dataValidator.prototype.getUSAFormat()
{
	try
	{
		var dt			= this.data;
		
		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 this.data;}		
}
//''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
//''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
//''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
function SiteDictionary(path)
{
	try
	{
		this.dom       = new ActiveXObject("Microsoft.XMLDOM");
		this.dom.async = false;
		if(!this.dom.load(path))
		{
			var err		= this.dom.parseError;
			throw new Error(" reason="+err.reason+" line="+err.line+" srcText="+trim(err.srcText));		
		}
	}
	catch(e){ alert("SiteDictionary() error="+e.description);}
}
//''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
function SiteDictionary.prototype.get(word)
{
	var xpath	= "/SITE/KEY[@ID='"+word+"']";
	
	try
	{
		return this.dom.selectSingleNode(xpath).text;
	}
	catch(e)
	{
		alert("SiteDictionary.get("+xpath+") \n error="+e.description);
	}
	return word;
}
//''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
//''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
//''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
function transformData2Save()
{
	var dt;
	
	//getObj(oType);
	
	for(var o in oType)
	{
		dt	= new dataValidator(oData[o]);
		
		switch (oType[o].toLowerCase())
		{
			case "datetime":

						if(oData[o].indexOf("T")>0)			break;	//break $metadate
						if(oData[o].split("-").length==3)	break;	//break ks format
						
						if(dt.isDate())		oData[o] = dt.getKSFormat();
						else
						{
							alert("datetime:"+oData[o]);
							return false;
						}			
			break;
			case "boolean":
			break;
			case "code":
			break;
			case "number":
			
						if(!dt.isNumber())
						{
							alert("number:"+oData[o]);
							return false;
						}			
			break;
			case "string":
			default:
			break;
		}
	}
	return true;
}
//''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
function transformData2Show()
{
	var dt;
	
	for(var o in oType)
	{
		dt	= new dataValidator(oData[o]);
		
		switch (oType[o].toLowerCase())
		{
			case "datetime":
			
						oData[o]	= dt.getILFormat();
			break;
			case "boolean":
			break;
			case "code":
			break;
			case "number":
			break;
			case "string":
			default:
			break;
		}
	}
}
//''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
