// Validate.js
function simpleValidate(frm, exceptions)
{
	var frm
	var elem
	//Need to write exception code....
	for(x=0;x<frm.elements.length;x++)
	{
		if(frm.elements[x].id)
		{
			elem = document.getElementById(frm.elements[x].id)
		
			switch(elem.VRule)/*VRule = Validation Rule*/
			{
				//Case Text --- Validation Rule is only that Text is present  
				case "Text": 
				{
					if(elem.value == "")
					{
						alert(elem.ErrMessage)
						elem.focus()
						return false;
					}
					break;
				}
				//End Case Text
				
				//Case TextOrNull --- Validation Rule is only that Text is present  
				case "TextOrNull":
				{
					break;
				}
				
				case "EmailOrNull":
				{
					if(!checkEmail(elem.value))
					{
						alert(elem.ErrMessage)
						elem.focus()
						return false;
					}
					break;
				}
				
				case "EmailNotNull":
				{
					if(elem.value != "")
					{
						if(!checkEmail(elem.value))
						{
							alert(elem.ErrMessage)
							elem.focus()
							return false;
						}
					}
					else
					{
						alert(elem.ErrMessage)
						elem.focus()
						return false;
					}
					break;
				}
				
				case "Date":
				{
					//No need for validation of valid date as it is PICKED from a cal...
					break;
				}
				
				case "OneSelected":
				{
					if(elem.type == "radio")
					{
						//Use This for Radio Buttons...
						if(!optionSelected(elem.name))
						{
							alert(elem.ErrMessage)
							elem.focus()
							return false;
						}
						break;
					}
					else
					{
						//Either Select or Select-Multiple
						if(!ddValueSelected(elem.id))
						{
							alert(elem.ErrMessage)
							elem.focus()
							return false;
						}
						break;
						
					}
					
				}
				
				case "Number":
				{
					if(isNaN(elem.value))
					{
						alert(elem.ErrMessage)
						elem.focus()
						return false;
					}
					break;
				}
				
				case "NumberOrNull":
				{
					if(elem.value != "")
					{
						if(isNaN(elem.value))
						{
							alert(elem.ErrMessage)
							elem.focus()
							return false;
						}
					}
					break;
				}
				
				case "NumberNotNull":
				{
					if(elem.value != "")
					{
						if(isNaN(elem.value))
						{
							alert(elem.ErrMessage)
							elem.focus()
							return false;
						}
					}
					else
					{
						alert(elem.ErrMessage)
						elem.focus()
						return false;
					}
					break;
				}
				
				case "Not-1":
				{
					if(elem.value == "-1")
					{
						alert(elem.ErrMessage)
						elem.focus()
						return false;
					}
					break;
				}
				
				case "Phone":
				{
					if(!chkPhone(elem.id, 'You must enter phone numbers in the correct format...'))
					{
						return false;
					}
					break;
				}

				case "PhoneNotNull":
				{
					if(elem.value != "")
					{
						if(!chkPhone(elem.id, 'You must enter phone numbers in the correct format...'))
						{
							return false;
						}
						break;
					}
					else
					{
						alert(elem.ErrMessage)
						elem.focus()
						return false;
					}
					break;
				}
				
			}//End Switch
		}//End ID Check
	}//End FOR Loop
	return true;
}

function ddValueSelected(selectID)
{
//CANNOT USE 'x' AS A VAR AS THE MAIN LOOP (simpleValidate) USES IT TO LOOP THROUGH ELEMENTS...
	//Function will loop through a select list and returnn tru if at least one val is selected
	dd = document.getElementById(selectID)
	
	for(s=0;s<dd.options.length;s++)
	{
		
		if(dd[s].selected)
		{
			return true;
		}
	}
	return false;
}

function checkEmail(strEmail)
{
	reReq = /^\s{0,}$/  				//regular expression - checks for white space
	reEmail = /^\w+((-\w+)|(\.\w+))*\@\w+((\.|-)\w+)*\.\w+$/;

	if (!reReq.test(strEmail))
	{
		if (!reEmail.test(strEmail))
		{
			return false;
		}
	}// JScript source code
	return true;
}

function optionSelected(optionID)
//This function will loop through a collection of options and return TRUE if one is selected
//Used For Radio Buttons
{
	var optGroup = document.getElementsByName(optionID)
	if(optGroup.length > 0)
	{
		for(y=0;y<optGroup.length;y++)
		{
			if(optGroup[y].checked == true)
			{
				return true;
			}
		}
	}
	else
	{
		if(optGroup[0].checked == true)
		{
			return true;
		}
	}
	return false;		
}


function checkDateInAdvance(dateSelected, daysInAdvance)
{
	if (Date.parse(dateSelected) <= new Date(new Date().getYear(), new Date().getMonth(), new Date().getDate()+daysInAdvance))
	{
		//Changed alert from displaying days to displaying weeks
		//alert("Date must be greater than " + daysInAdvance + " days in advance");	
		weeksInAdvance = daysInAdvance/7
		alert("Date must be greater than " + weeksInAdvance + " weeks in advance");	
		return false;
	}
	return true;
}

function compareDates(startDate, endDate)
{
	if (Date.parse(startDate) >= Date.parse(endDate))
	{
		alert("End dates for requests must be after the start date...")
		return false;
	}
	return true;
}

function getSelectedOption(OptionName)
{
	var optGroup = document.getElementsByName(OptionName)
	if(optGroup.length > 0)
	{
		for(y=0;y<optGroup.length;y++)
		{
			if(optGroup[y].checked == true)
			{
				return optGroup[y].value;
			}
		}
	}
	return "";
			
}

function chkZipCode(id, msg)
{
  	cntrl = document.getElementById(id);	

	re = /^\d{5}$|^\d{5}\-\d{4}$|^$/ //regular expression - checks for #####-#### or #####

	if (!(re.test(cntrl.value)))
	{
		alert(msg);
	   	cntrl.focus();
	   	cntrl.select();
 		return false;
 	}
	
	return true;
}

function chkCanadianZipCode(id, msg)
{
  	cntrl = document.getElementById(id);	

	//re = /^\d{5}$|^\d{5}\-\d{4}$|^$/ //regular expression - checks for #####-#### or #####
	//re = /\b[ABCEGHJKLMNPRSTVXY][0-9][A-Z] ?[0-9][A-Z][0-9]\b/im/
	
	if (cntrl.value.match(/\b[ABCEGHJKLMNPRSTVXY][0-9][A-Z] ?[0-9][A-Z][0-9]\b/im)) 
	{
		return true;
	} 
	else 
	{
		alert(msg);
	   	cntrl.focus();
	   	cntrl.select();
 		return false;
	}

	

	
	
}

function chkPhone(id, msg)
{
  	cntrl =  document.getElementById(id);	

	re = /^\d{3}\-\d{3}\-\d{4}$|^$/ //regular expression - checks for ###-###-####

	if (!(re.test(cntrl.value)))
	{
		alert(msg);
	   	cntrl.focus();
	   	cntrl.select();
		return false;
	}
	
	return true;
}

function chkDate(id, msg)
{
  	cntrl = document.getElementById(id);	

	re = /^\d{1,2}\/\d{1,2}\/\d{4}$|^$/ //regular expression - checks for MM/DD/YYYY or M/DD/YYYY or MM/D/YYYY

	//This part validates the date format
	if (!(re.test(cntrl.value)))
	{
		alert(msg);
	   	cntrl.focus();
	   	cntrl.select();
		return false;
	}
	
	//This part validates the date value
	if (cntrl.value != '')
	{
		first_slash = cntrl.value.indexOf("/", 0);
		second_slash = cntrl.value.indexOf("/", first_slash+1);
		
		mon = cntrl.value.substr(0, first_slash);
		dy = cntrl.value.substr(first_slash+1, second_slash-first_slash-1);
		yr = cntrl.value.substr(second_slash+1);

		if (!(isDate(yr, mon, dy)))
		{
			alert('The date entered is invalid.');
		   	cntrl.focus();
		   	cntrl.select();
			return false;
		}
	}

	return true;
}
