////  String: Trim Function
String.prototype.trim = function() 
{
 // skip leading and trailing whitespace
 // and return everything in between
  var x=this;
  x=x.replace(/^\s*(.*)/, "$1");
  x=x.replace(/(.*?)\s*$/, "$1");
  return x;
}

function GetDynamicElement(strControlName, strElementName)
{
	var re = new RegExp(strControlName + ':.+:' + strElementName + '$');
	for(var i = 0; i < document.forms[0].elements.length; i++) 
	{
		var elm = document.forms[0].elements[i];		
		if (re.test(elm.name)) return elm;
	}
	return null;
}

function ConfirmDelete(strAppendMsg)
{
	return window.confirm("Are you sure you want to delete the selected item?" + strAppendMsg);
}

function IsBlank(theField, strFieldName, bShowErrMsg)
{
	theField.value = theField.value.trim();
	if(theField.value == "")
	{
		if(bShowErrMsg){ alert(strFieldName + ": Must be filled in"); theField.focus(); }
		return true;
	}
	return false;
}

/////////////////////////////////////////////////////////////////////  
//  IsNumber
function IsNumber(theField, strFieldName, bShowErrMsg, bPositiveOnly, bDecimalsAllowed)
{	
	var bShowErr = false;
	theField.value = theField.value.replace(/^\s*(\b.*\b|)\s*$/, "$1");	
	if(isNaN(theField.value))  bShowErr = true;
	else if(bPositiveOnly && theField.value < 0) bShowErr = true;
	else if(!bDecimalsAllowed && (theField.value.search("\\.") != -1)) bShowErr = true;
		
	if(bShowErr)
	{	
		if(bShowErrMsg)
		{
			var eMsg = strFieldName + ": Must be a";
			if(bPositiveOnly) eMsg = eMsg + " positive";
			if(!bDecimalsAllowed) eMsg = eMsg + " whole";
			eMsg = eMsg + " number";
			alert(eMsg);
		}
		theField.focus();
		return false;				
	}	
	
	return true;
}

function IsAllDataGridTextBoxesFilledIn(strControlName, strTextBoxName, strFieldName, bShowErrMsg) 
{	
	var re = new RegExp(strControlName + ':.+:' + strTextBoxName + '$');
	for(var i = 0; i < document.forms[0].elements.length; i++) 
	{
		var elm = document.forms[0].elements[i];		
		if (elm.type == 'text') 
			if (re.test(elm.name))
				if(IsBlank(elm, strFieldName, bShowErrMsg)) return false;
	}
	return true;
}

function IsAllDataGridTextBoxesNumbers(strControlName, strTextBoxName, strFieldName, bShowErrMsg, bPositiveOnly, bDecimalsAllowed) 
{	
	var re = new RegExp(strControlName + ':.+:' + strTextBoxName + '$');
	for(var i = 0; i < document.forms[0].elements.length; i++) 
	{
		var elm = document.forms[0].elements[i];		
		if (elm.type == 'text') 
			if (re.test(elm.name))
				if(!IsNumber(elm, strFieldName, bShowErrMsg, bPositiveOnly, bDecimalsAllowed)) return false;
	}
	return true;
}

function IsAllDataGridTextareaBoxesFilledIn(strControlName, strTextareaBoxName, strFieldName, bShowErrMsg) 
{	
	var re = new RegExp(strControlName + ':.+:' + strTextareaBoxName + '$');
	for(var i = 0; i < document.forms[0].elements.length; i++) 
	{
		var elm = document.forms[0].elements[i];		
		if (elm.type == 'textarea') 
			if (re.test(elm.name))
				if(IsBlank(elm, strFieldName, bShowErrMsg)) return false;
	}
	return true;
}

function IsDDLItemSelectedAndNotBlank(theField, strFieldName, bShowErrMsg)
{
	for(var x=0; x < theField.options.length; x++)
		if(theField.options[x].selected == true  && theField.options[x].value != "")
			return true
	
	if(bShowErrMsg) alert(strFieldName + ": Please select at value");
	theField.focus();
	return false;
}

function IsEmailAddress(theField, strFieldName, bShowErrMsg)
{		    
	var re = new RegExp("^([0-9a-zA-Z_]([-.\w]*[0-9a-zA-Z_])*@(([0-9a-zA-Z_])+([-\w]*[0-9a-zA-Z_])*\.)+[a-zA-Z_]{2,9})$");
	if(!re.test(theField.value))
	{
		if(bShowErrMsg) alert(strFieldName + ": Is not a valid email address");
		theField.focus();
		return false;			
	}	
	return true;
}

//////////////////////////////////////////////////////////////////////////////////////////////////////////
function ValidDateLookup(aryFormat, aryDate, strLookupFormat)
{	
	for (var iIdx=0; iIdx < aryFormat.length; iIdx++)
		if(aryFormat[iIdx] == strLookupFormat) return parseInt(aryDate[iIdx], 10);
		
    return -1;
}

function _getYear(d) 
{ 
	return (d < 1000) ? d + 1900 : d;
}
   
function ValidDate(strDate, strFormat, strSeperator)
{	
	var aryFormat = strFormat.toUpperCase().split(strSeperator);
	var aryDate   = strDate.split(strSeperator);
	if(aryFormat.length != aryDate.length) return false;
	
	try
	{				
		var iYear = ValidDateLookup(aryFormat, aryDate, "YYYY");		
		var iMonth = ValidDateLookup(aryFormat, aryDate, "MM");		
		var iDay = ValidDateLookup(aryFormat, aryDate, "DD");				

		if (iYear == -1 && iMonth == -1 && iDay == -1) return false;
		if(iYear == -1)  iYear = 2000;
		if(iMonth == -1) iMonth = 1; else iMonth--;
		if(iDay == -1)   iDay = 1;
		
		if(iYear > 0 && iYear < 1900) return false;
	
		dt = new Date(iYear, iMonth, iDay);						
		if(iYear  != _getYear(dt.getFullYear()))	return false;
		if(iMonth != dt.getMonth())					return false;
		if(iDay != dt.getDate())					return false;
	}
	catch(e)
	{		
		return nothing;
	}	
	return dt;	
}

//  format mm, dd, yyyy in any order seperated by the seperator character
function IsValidDate(theField, strFormat, strSeperator, strFieldName, bShowErrMsg)
{
	var dt = ValidDate(theField.value, strFormat, strSeperator);	
	if (!dt)
	{
		if(bShowErrMsg) alert(strFieldName + ": Is not a valid format of " + strFormat + " and/or the year must be >= 1900");
		theField.focus();
		return false;
	}
	return true;
}

//  format mm, dd, yyyy in any order seperated by the seperator character
function IsDate1LessThenDate2(dateFrom, dateTo, strFormat, strSeperator, strFieldName, bShowErrMsg)
{
	var dt1 = ValidDate(dateFrom.value, strFormat, strSeperator);
	var dt2	= ValidDate(dateTo.value, strFormat, strSeperator);
	if(!dt1 || !dt2)
	{	
		if(bShowErrMsg) alert(strFieldName + ": Is not a valid format of " + strFormat + " and/or the year must be >= 1900");
		dateFrom.focus();
		return false;	
	}		
	if(dt1.getTime() > dt2.getTime())
	{
		if(bShowErrMsg) alert(strFieldName + ": From date must be less than the to date");
		dateFrom.focus();
		return false;		
	}	
	return true;		
}
