/**
*	Init Method
*/
    function attachRTCheck(strFormID, strID,strType,bRequired,aParams)
    {
        var oForm = document.getElementById(strFormID);
        if (oForm == null) return;
        
		if(!aParams)aParams =[];
		aParams['required'] = bRequired;
		
		
        var aFormFields = oForm.vtfields;
        var aFormTypes = oForm.vttypes;
        var aFormParams = oForm.vtparams;
                    	    
        if (aFormFields==null) 
        {
            aFormFields = new Array();
            oForm.vtfields = aFormFields;
            
            aFormTypes = new Array();
            oForm.vttypes = aFormTypes;
            
            aFormParams = new Array();
            oForm.vtparams = aFormParams;
        }
                    	    
        var oField = document.getElementById(strID);
        if (oField == null) return;
                    	       
        var oBlurCall = function(e)
        {
			return doRTDynamicValidate(oForm,oField,strType,aParams,true);
        };
                    	        
        var oCall = function(e)
        {
            var oResult = doRTDynamicValidate(oForm,oField,strType,aParams,true);
			return oResult;
        };
        
		if (strType=="submit" || strType=="validate")
        {
            oField.onclick = oCall;
        }
        else
        {
            aFormFields[aFormFields.length] = oField;
            aFormTypes[aFormTypes.length] = strType;
            aFormParams[aFormParams.length] = aParams;
            
            //oField.onblur = oBlurCall; 
			//oField.onfocus  = oCall;
			oField.onchange = oBlurCall;
            oField.onkeyup = oBlurCall;
        }
        
        //Add  Type to Map[strID,strType]
        //Add Param to Map[strID,aParam]           	    
    }

/**
*	Field Validate Method
*/
    function doRTDynamicValidate(oForm,oField,strType,aParams,bBlur)
    {
    	
        if (strType == "submit" || strType == "validate")
        {
            //Loop through all fields and validate by type
            var aFormFields = oForm.vtfields;
            var aFormTypes = oForm.vttypes;
            var aFormParams = oForm.vtparams;
            var bValid = true;
			var iSize = aFormFields.length;
            for (var iLoop=0; iLoop < iSize; iLoop++)
            {
				var oElement = aFormFields[iLoop];
				var iType = aFormTypes[iLoop];
				var aParams = aFormParams[iLoop];
                try
				{
				if((!doRTDynamicValidateField(oForm,oElement,iType,aParams,true,bBlur)) && aParams['required'] == true)bValid = false;
				} catch (error)
				{
					
				}
            }
            if(bValid)
            {				
				if (strType == "submit")
            	{
					oForm.submit();
					return false;
				} 
				return true;
            }
            return false;    	        
        }
		return doRTDynamicValidateField(oForm,oField,strType,aParams,false,bBlur);
    }
                    	
    function doRTDynamicValidateField(oForm,oDomField,strType,aParams,bHardCheck,bBlur)
    {
		if (oDomField == null) return true;
    	if (strType=="postcode") return doRTFieldPostCodeCheck(oForm,oDomField,aParams,bHardCheck,bBlur);
        if (strType=="tel") return doRTFieldTelCheck(oForm,oDomField,aParams,bHardCheck,bBlur);
        if (strType=="email") return doRTFieldEmailCheck(oForm,oDomField,aParams,bHardCheck,bBlur);
        //Catch All
        return doRTFieldCheck(oForm,oDomField,aParams,bHardCheck,bBlur);
    }
 
/**
*	Field Check Status Method
*/
    function doRTFieldCheck(oForm, oField,aParams,bHardCheck,bBlur)
    {		
		if (!oField) return true;

    	var bHasData=false;
    	var bError=false;
		var strFieldValue = RTValidate_trim(oField.value);
		var strError = null;
    	var strErrorType ="valid";
		if (strFieldValue.length > 0) bHasData=true;
		
		//Required field check.
		if (!bHasData)
		{
			strErrorType ="neutral";
			if (aParams['required'])
			{
				strErrorType ="invalid";
				strError = RTGetDynamicAttribute(oForm, oField,aParams,"requiredtext","Required Field");
			}
		}
		
		//Min Field Length Check
		var iMinFieldLength = +RTGetDynamicAttribute(oForm, oField,aParams,"minfieldlength","1");
	 	if (strError == null  && strFieldValue.length < iMinFieldLength ) 
		{
			strErrorType ="invalid";
			strError = RTGetDynamicAttribute(oForm, oField,aParams,"minfieldlengtherrormsg","Field Too Small");
		}
		
		doRTFieldTickShow(oForm,oField,aParams,strError,strErrorType);     			
		return strErrorType=="valid";
    }
    
    function doRTFieldEmailCheck(oForm, oField,aParams,bHardCheck,bBlur)
    {
		if (!oField) return true;
		var bHasData=false;
    	var bError=false;
		var strFieldValue = RTValidate_trim(oField.value);
		var strError = null;
    	var strErrorType ="valid";
    	
		//Required field check.
		if (strFieldValue.length > 0) bHasData=true;
		if (!bHasData)
		{
			strErrorType ="neutral";
			if (aParams['required'])
			{
				strErrorType ="invalid";
				strError = RTGetDynamicAttribute(oForm, oField,aParams,"requiredtext","Required Field");
			}
		}
		
		if (bHasData && strError == null)
		{
			var filter = /^\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$/;
			if (!filter.test(strFieldValue))
			{
				strError = RTGetDynamicAttribute(oForm, oField,aParams,"invalidtext","Invalid Entry");
				strErrorType = "invalid";
    		}
		}
		
		doRTFieldTickShow(oForm,oField,aParams,strError,strErrorType);     			
		return strErrorType=="valid";
	}
    
	function doRTFieldPostCodeCheck(oForm, oField,aParams,bHardCheck,bBlur)
    {
	  	var bHasData=false;
    	var bError=false;
		var strFieldValue = RTValidate_trim(oField.value);
		var strError = null;
    	var strErrorType ="valid";
    
		//Required field check.
		if (strFieldValue.length > 0) bHasData=true;
		if (!bHasData)
		{
			strErrorType ="neutral";
			if (aParams['required'])
			{
				strErrorType ="invalid";
				strError = RTGetDynamicAttribute(oForm, oField,aParams,"requiredtext","Required Field");
			}
		}
		
		if (bHasData && strError == null)
		{
			var filter = /[A-Z]{1,2}[0-9]{1,2} ?[0-9][A-Z]{2}/i;
			if (!filter.test(strFieldValue))
			{
				strErrorType ="invalid";
				strError = RTGetDynamicAttribute(oForm, oField,aParams,"invalidtext","Invalid Entry");
    		}
		}
	
		if(strErrorType=="valid")
		{
            doRTFieldTickShow(oForm,oField,aParams,"","valid");     			
            return true;
		}

		doRTFieldTickShow(oForm,oField,aParams,strError,strErrorType);     			
		return strErrorType=="valid";
	}
	
    
    function doRTFieldTelCheck(oForm, oField,aParams,bHardCheck,bBlur)
    {
       	var bHasData=false;
    	var bError=false;
		var strFieldValue = RTValidate_trim(oField.value);
		var strError = null;
    	var strErrorType ="valid";
    
		//Required field check.
		if (strFieldValue.length > 0) bHasData=true;
		if (!bHasData)
		{
			strErrorType ="neutral";
			if (aParams['required'])
			{
				strErrorType ="invalid";
				strError = RTGetDynamicAttribute(oForm, oField,aParams,"requiredtext","Required Field");
			}
		}
		
		//Min Field Length Check
		if (bHasData && strError==null && !RTValidate_telephoneCheck(strFieldValue))
		{
			strError = RTGetDynamicAttribute(oForm, oField,aParams,"invalidtext","Invalid Entry");
			strErrorType ="invalid";
		}
		
		doRTFieldTickShow(oForm,oField,aParams,strError,strErrorType);     			
		return strErrorType=="valid";
	}
       
	function RTGetDynamicAttribute(oForm,oField,aParams,strAttr,oDefault)
	{
		var oValue = null;
		if(aParams)oValue = aParams[strAttr];
		
		if (!oValue && oField && oField.getAttribute)oValue = oField.getAttribute(strAttr);
		if (!oValue && oForm && oForm.getAttribute)oValue = oForm.getAttribute(strAttr);
		//if (!oValue) oForm.Attribute(strAttr);
		 
		if (!oValue && oField)
		{
			var oElement = document.getElementById(oField.id+'_'+strAttr);
			if (!oValue && oElement) oValue = oElement.value;
			if (!oValue && oElement) oValue = oElement.nodeValue;
		}
		
		if (!oValue)oValue = oDefault;
		
		return oValue;
	}
	
/**
*	Show Field Display Status Method : TODO blank
*/                   	
    function doRTFieldTickShow(oForm,oField,aParams,strInvalidText,strValid)
    {
        var strFieldID = oField.id;
        var strTickValid = oField.id+"_validimage";
        var strTickInValid = oField.id+"_invalidimage";
        var strTickInValidText = oField.id+"_validtext";
        var bDynamicImage = false;

        //Attempt 1 - See if we have Elements to show ticks...
        var oTickValid = document.getElementById(strTickValid);
        var oTickInvalid = document.getElementById(strTickInValid);
        var oTickInvalidText = document.getElementById(strTickInValidText);
        if(oTickInvalidText)
        {
        	oTickInvalidText.style.color = RTGetDynamicAttribute(oForm, oField,aParams,"invalidtextcolor","red");
        }
        
        var srcvalid=null;
        var srcinvalid=null;
        var oDynamicNode=null;
        
        
        //Attempt 2 - if we have one image hook, see if we have scr defined in the param fields
        if (oTickValid && !oTickInvalid)
        {
        	oDynamicNode = oTickValid;
        	if (!aParams["srcvalid"]) aParams["srcvalid"] = oTickValid.src;
        }
        
       
        if (oTickInvalid && !oTickValid)
        {
        	oDynamicNode = oTickInvalid;
        	if (!aParams["srcinvalid"]) aParams["srcinvalid"] = oTickInvalid.src;
        }
        
        if(oDynamicNode)
        {
            srcvalid = aParams["srcvalid"];
            if(!srcvalid)srcvalid = oDynamicNode.src;
            srcinvalid = aParams["srcinvalid"];
        }
        
        //Attempt 3 - if we have one image hook, see if we have scr defined in the form as a global
        //todo
        
        //apply image
        if (oDynamicNode)
        {
        	 
        	srcvalid = aParams["srcvalid"];
            srcinvalid = aParams["srcinvalid"];
            
        	//Assuming oTickValid is an <img> tag
			if (oDynamicNode) 
			{
				if(strValid == "neutral")
				{					
					oDynamicNode.style.display="none";
				}
				else
				{
					oDynamicNode.src = (strValid == "valid")?srcvalid:srcinvalid;
					oDynamicNode.style.display="inline";
				}
			}
        }
        else
        {
        	if(strValid == "neutral")
			{
				oTickValid.style.display="none";
				oTickInvalid.style.display="none";
			}
			else
			{
            	if (oTickInvalid) oTickInvalid.style.display=strValid=="invalid"?"inline":"none";
            	if (oTickValid) oTickValid.style.display=strValid=="valid"?"inline":"none";     
        	}
        }
        
        // Set Text
        if (oTickInvalidText) 
		{
			if(strInvalidText || strInvalidText == "")
			{
				while( oTickInvalidText.firstChild ) 
					oTickInvalidText.removeChild( oTickInvalidText.firstChild );
					
				oTickInvalidText.appendChild( document.createTextNode(strInvalidText) );
			}
			oTickInvalidText.style.display=strValid=="valid"?"none":"inline";
        }
    }


function RTValidate_telephoneCheck(strTel)
{
	if(!strTel)return false;
	
	strTel = strTel.replace('(',' ');
	strTel = strTel.replace('-',' ');
	strTel = strTel.replace(')',' ');
	strTel = strTel.replace('+','0');
	strTel = RTValidate_trim(strTel);
	
	var iLength = strTel.length;
	if(iLength == 0)return false;
	var iDigitCount = 0;
	for(var i=0; i<iLength; i++)
	{
		var TmpChar = strTel.charAt(i);
		if(i == 0 && TmpChar != '0')return false;
		if(RTValidate_isDigit(TmpChar))
		{
			iDigitCount++;
		}
		else
		{
			if (TmpChar != ' ') return false;			
		}
	}
	if(iDigitCount<11)return false;
	if(iDigitCount>16)return false;
	return true;
}

function RTValidate_isDigit(num) {
	if (num.length>1){return false;}
	var string="1234567890";
	if (string.indexOf(num)!=-1){return true;}
	return false;
}

function RTValidate_trim(strVal)
{
	var iLength = strVal.length;
	for(var i=0; i<iLength; i++)
	{
		var c = strVal.charAt(0);
		
		if(c == ' ')strVal = strVal.substring(i);
		else return strVal;
	}
	return strVal;
}

