//Helper functions for form validations

//These are chars allowed
var strAlphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz "
var strAlphaNumeric = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789_ -.@/"
var strAlphaNumericCode = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789_ -."
var strAlphaNumericSomeChars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789_ -.@/(),:*!?;"
//These are chars not allowed
var strAlphaNumericWithChars = "|%+<>\\\""
var strMaxChars = "\"<>"
var strAlphaNumericHTML = "\""
var strAlphaNumericURL = "*?=#{}[],|'%+&<>\""


function isNumeric(elem, helperMsg)
{

	var numericExpression = /^[0-9]+$/;
	
	if(elem.value.match(numericExpression))
	{
		return true;
	}
	else
	{
		alert(helperMsg);
		elem.focus();
		return false;
	}
}
//Basic functions start here
function isNotEmpty(field,strMsg)//working
{
	var inputStr = trimAll(field.value)
	if (inputStr == "" || inputStr == null)
	{
		alert("Please enter a value for this field");
		setFieldFocus(field);
		return false;
	}
	return true;
}

function checkMinLength(field,len)
{
	var inputStr = field.value
	if (inputStr.length < len)
	{
		sMsg = msgCheckMinLength.replace("[PH_FIELD_MIN_LENGTH]",len);
		alert(sMsg)
		field.focus()
		field.select()
		return false
	}
	return true	
}

function checkMaxLength(field,len,strMsg)
{
	var inputStr = trimAll(field.value);
	if (inputStr.length > len)
	{
		sMsg = msgCheckMaxLength.replace("[PH_FIELD_MAX_LENGTH]",len);
		alert(sMsg)
		field.focus()
		field.select()
		return false
	}
	return true	
}
//Basic functions end here

//Character handling functions start here
function isAlphabet(field,strMsg)
{
	var inputStr = field.value
	if (inputStr != "" || inputStr != null) 
	{		
		for (var i=0;i<inputStr.length;i++)
		{
			var oneChar = inputStr.substring(i,i+1)
			if (strAlphabet.indexOf(oneChar) == -1)
			{
				alert(msgIsAlphabet)
				field.focus()
				field.select()
				return false
			}		
		}		
	}
	return true;
}	
	
function isFirstAlphabet(field) 
{
	var inputStr = field.value
	if (inputStr != "" || inputStr != null) 
	{		
			var oneChar = inputStr.substring(0,1)
			if ("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz".indexOf(oneChar) == -1)
			{
				alert(msgIsFirstAlphabet)
				field.focus()
				field.select()
				return false;
			}						
	}
	return true;
}	

function isAlphaNumeric(field)
{
	if(field.value)
	{
		var inputStr = field.value
	}
	else
	{
		var inputStr = field
	}

	if (inputStr != "" || inputStr != null) 
	{		
		for (var i =0; i< inputStr.length;i++)
		{
			var oneChar = inputStr.substring(i,i+1)
			if (strAlphaNumeric.indexOf(oneChar) == -1)
			{
				sMsg = msgIsAlphaNumeric.replace("[PH_FIELD_CHAR]",oneChar);
				alert(sMsg)
				field.focus()
				return false
			}
		}		
	}
	return true;
}

function isAlphaNumericSomeChars(field)
{
	if(field.value)
	{
		var inputStr = field.value
	}
	else
	{
		var inputStr = field
	}

	if (inputStr != "" || inputStr != null) 
	{		
		for (var i =0; i< inputStr.length;i++)
		{
			var oneChar = inputStr.substring(i,i+1)
			if (strAlphaNumericSomeChars.indexOf(oneChar) == -1)
			{
				sMsg = msgIsAlphaNumeric.replace("[PH_FIELD_CHAR]",oneChar);
				alert(sMsg)
				field.focus()
				return false
			}
		}		
	}
	return true;
}

function isAlphaNumericCode(field)
{
	if(field.value)
	{
		var inputStr = field.value
	}
	else
	{
		var inputStr = field
	}

	if (inputStr != "" || inputStr != null) 
	{		
		for (var i =0; i< inputStr.length;i++)
		{
			var oneChar = inputStr.substring(i,i+1)
			if (strAlphaNumericCode.indexOf(oneChar) == -1)
			{
				sMsg = msgIsAlphaNumeric.replace("[PH_FIELD_CHAR]",oneChar);
				alert(sMsg)
				field.focus()
				return false;
			}
		}		
	}
	return true;
}

function isAlphaNumericWithChars(field) //working
{
	if(field.value)
	{
		var inputStr = field.value
	}
	else
	{
		var inputStr = field
	}

	if (inputStr != "" || inputStr != null) 
	{		
		for (var i =0; i< inputStr.length;i++)
		{
			var oneChar = inputStr.substring(i,i+1)
			if (strAlphaNumericWithChars.indexOf(oneChar) != -1)
			{
				sMsg = msgIsAlphaNumeric.replace("[PH_FIELD_CHAR]",oneChar);
				alert(sMsg)
				field.focus()
				return false
			}
		}		
	}
	return true;
}

function isAlphaNumericHTML(field)
{
	if(field.value)
	{
		var inputStr = field.value
	}
	else
	{
		var inputStr = field
	}

	if (inputStr != "" || inputStr != null) 
	{		
		for (var i =0; i< inputStr.length;i++)
		{
			var oneChar = inputStr.substring(i,i+1)
			if (strAlphaNumericHTML.indexOf(oneChar) != -1)
			{
				sMsg = msgIsAlphaNumeric.replace("[PH_FIELD_CHAR]",oneChar);
				alert(sMsg)
				field.focus()
				return false
			}
		}		
	}
	return true;
}

function isAlphaNumericURL(field)
{
	var inputStr = field.value
	if (inputStr != "" || inputStr != null) 
	{		
		for (var i =0; i< inputStr.length;i++)
		{
			var oneChar = inputStr.substring(i,i+1)
			if (strAlphaNumericURL.indexOf(oneChar) != -1)
			{
				sMsg = msgIsAlphaNumeric.replace("[PH_FIELD_CHAR]",oneChar);
				alert(sMsg)
				field.focus()
				return false
			}
		}		
	}
	return true;
}

function isMaxChars(field)
{
	var inputStr = field.value
	if (inputStr != "" || inputStr != null) 
	{		
		for (var i = 0; i < inputStr.length; i++)
		{
			var oneChar = inputStr.substring(i,i+1)
			if (strMaxChars.indexOf(oneChar) != -1)
			{
				sMsg = msgIsAlphaNumeric.replace("[PH_FIELD_CHAR]",oneChar);
				alert(sMsg)
				field.focus()
				return false
			}
		}		
	}
	return true;
}
//Character handling functions end here

//Password functions start here
function isPassword(field)
{
	return isAlphaNumeric(field)
}	

function comparePasswords(field1,field2)
{
	if (field2.value != field1.value)
	{
		alert(msgComparePasswords);
		field2.focus();
		return false;
	}
	return true
}

function samePasswords(field1,field2)
{
	if (field2.value == field1.value) 
	{
		alert(msgSamePasswords);
		field2.focus();
		return false;
	}
	return true
}
//Password functions end here

//Number functions start here
function isNumber(field)  //working
{
	return isPositiveNumber(field);
}	

function isFloat(field) 
{
	var inputStr = field.value
	var dotcheck = 0
	if (inputStr != "" || inputStr != null) 
	{		
		for (var i =0; i< inputStr.length;i++)
		{
			var oneChar = inputStr.substring(i,i+1)
			if ( oneChar == ".")
				dotcheck = dotcheck + 1
			
			if (((oneChar < "0" || oneChar > "9")&& oneChar != ".") || dotcheck > 1 ) 
			{
				alert(msgIsFloat)
				field.focus()
				field.select()
				return false
			}		
		}		
		return true
	}
	return false
}	

function isPositiveNumber(field)
{
	var inputStr = field.value;
	if (inputStr != "" || inputStr != null) 
	{		
		for (var i = 0; i < inputStr.length; i++)
		{
			var oneChar = inputStr.substring(i,i+1);
			if (oneChar < "0" || oneChar > "9") 
			{
				alert("Please make sure this field contains positive integers only");
				setFieldFocus(field);
				return false;
			}		
		}		
		return true;
	}
	return false;
}

function isFirstValGreater(valA,valB,sType)
{
	var compareA;
	var compareB;
	
	if(sType == "Date")
	{
		compareA = new Date(replaceAll(valA,"-","/"));
		compareB = new Date(replaceAll(valB,"-","/"));
	}
	else if(sType == "No")
	{
		compareA = parseInt(valA);
		compareB = parseInt(valB);
	}
	
	if(compareA > compareB)
	{		
		return true;
	}
	return false;
}
//Number functions end here

//Format functions start here
function isEmail(field) 
{
    field.value = trimAll(field.value);
    if(field.value == "")
    {
        return true;
    }
    if (field.value.search(/^\w+((-\w+)|(\'\w+)|(\.\w+))*\@[A-Za-z0-9]+((\.|-)[A-Za-z0-9]+)*\.[A-Za-z0-9]+$/) != -1)
        return true;
    else
    {
		alert(msgIsEmail)
		field.focus()
		field.select()
		return false
    }
}

function isPhoneNumber(field) 
{
	var inputStr = field.value
	if (inputStr != "" || inputStr != null) 
	{		
		for (var i =0; i< inputStr.length;i++)
		{
			var oneChar = inputStr.substring(i,i+1)
			if ("0123456789 -".indexOf(oneChar) == -1)
			{
				sMsg = msgIsValidChars.replace("[PH_FIELD_CHAR]",oneChar);
				alert(sMsg)
				field.focus()
				return false
			}
		}		
	}
	return true
}

function isFaxNumber(field) 
{
	return isPhoneNumber(field) 
}

function isNIC(field1,field2,field3)
{
	var proceed = true
	proceed = isNotEmpty(field1)
	if (!proceed)  return false
	proceed = isNumber(field1)
	if (!proceed)  return false	
	proceed = checkMinLength(field1,3)
	if (!proceed)  return false	
	proceed = isNotEmpty(field2)
	if (!proceed)  return false
	proceed = isNumber(field2)
	if (!proceed)  return false
	proceed = checkMinLength(field2,2)
	if (!proceed)  return false	
	proceed = isNotEmpty(field3)
	if (!proceed)  return false
	proceed = isNumber(field3)
	if (!proceed)  return false
	proceed = checkMinLength(field3,6)
	if (!proceed)  return false	
	
	return proceed
}
//Format functions end here

//Whole form functions start here
//Browses all radio buttons in a form and ensures at least one option is selected for each set 
function validateRadio(frm)
{
	var e;
	var current = "";
	var selectCount = 0;
	
	for(var count = 0; count < frm.elements.length; count++)
	{
		e = frm.elements[count];
		if(e.type == "radio")
		{
			if(e.name != current)
			{
				if(selectCount <= 0 && current != "")
				{
					return false;
				}
				current = e.name;
				selectCount = 0;
			}
			if(e.checked)
			{
				selectCount++;
			}
		}	
	}
	if(selectCount <= 0 )
	{
		return false;
	}	
	return true;
}

//Browses all text boxes in a form and ensures they are filled 
function validateText(frm,sType,nLen)
{
	var e;
	
	for(var count = 0; count < frm.elements.length; count++)
	{
		e = frm.elements[count];
		if(e.type == sType)
		{
			if(trimAll(e.value) == "")
			{
				return false;
			}
			if(!checkMaxLength(e,nLen,""))
			{
				return false;
			}
		}
	}
	return true;
}

//Whole form functions end here
function setFieldFocus(field)
{
	field.focus();
	field.select();    
}