
//=========================================================================
// Common Utility Function 
//=========================================================================
function getRegExpResult(szText, szRegExp)
{
	var objRegExp = new RegExp(szRegExp);
	if (szText == null)	return false;
	if (!szText.match(objRegExp)) return false;	
	return true;
}

//=========================================================================
// String class Prototypes
//=========================================================================
String.prototype.trim = function()
{
	var leftPos = -1;
	var rightPos = this.length-1;
	if ( this.toString() == null) return null;
	
	for (i=0; i < this.length; i++)
	{
		get_char = this.charAt(i);
		isWhiteChar = ( (get_char == "\r") || (get_char == "\n") || (get_char == " ") );
		if (!isWhiteChar)
		{
			leftPos = i;
			break;
		}
	}
	
	if (leftPos == -1) return "";
	for (i=this.length-1; i >= leftPos; i--)
	{
		get_char = this.charAt(i);
		isWhiteChar = ( (get_char == "\r") || (get_char == "\n") || (get_char == " ") );
		if (!isWhiteChar)
		{
			rightPos = i;
			break;
		}
	}		
	this.value = this.substring(leftPos, rightPos+1);		
	return this.value;	
}

String.prototype.isAddress = function(max_length) 
{
	if (!max_length) max_length = 1;	
	if (this.toString().length < max_length) 
	{
		return false;
	}
	if (this.toString().trim().isNumber()) 
	{	
		return false;
	}
	return true;
}

String.prototype.isFloat = function()
{
	if (this.toString().length == 0) return false;
	return !isNaN(parseInt(this.toString()));	
	//var szRegExpression = "^([0-9]+)(\.{1}*)([0-9]+)$";
	//return getRegExpResult(this.toString(), szRegExpression);
	//return true;
}


String.prototype.isInteger = function()
{
	if (this.toString().length == 0) return false;
	var szRegExpression = "^[0-9]+$";
	return getRegExpResult(this.toString() ,szRegExpression);

	//return true;
}

String.prototype.isNumber = function()
{	
	if (this.toString().length == 0) return false;	
	return (!isNaN(this.toString()));	
}

String.prototype.isContactNumber = function(minimumLength) 
{
	if (!minimumLength) minimumLength = 7;
	if (this.toString().length < minimumLength) return false;
	var szRegExpression = "^[\+]*[0-9 \-\,]+$";
	return getRegExpResult(this.toString() ,szRegExpression);
	if  (this.toString().length > 3) return true;
	return false;
}

String.prototype.isUserId = function(minimumLength, isSpaceAllow)
{	
	var szRegExpression = null;
	if (minimumLength == null) minimumLength = 6;
	if (this.toString().length < minimumLength) return false;
	if (isSpaceAllow == true)
	{
		szRegExpression = "^[A-Za-z]+[A-Za-z 0-9_]*$";
	}
	else
	{
		szRegExpression = "^[A-Za-z]+[A-Za-z0-9_]*$";
	}
	return getRegExpResult(this.toString() ,szRegExpression);
}

String.prototype.isUserPassword = function(minimumLength)
{	
	var szRegExpression = null;
	if (minimumLength == null) minimumLength = 6;	
	if (this.toString().length < minimumLength) return false;
	//szRegExpression = "^[^ ]+$";
	//return getRegExpResult(this.toString() ,szRegExpression);
	return true;
}

String.prototype.isPersonName = function(minimumLength)
{	
	var szRegExpression = null;
	if (minimumLength == null) minimumLength = 3;	
	if (this.toString().length < minimumLength) return false;
	//szRegExpression = "^([A-Za-z]+[ ]{0,1}[.]{0,1}[-]{0,1}[A-Za-z]+)*$";
	szRegExpression = "^(([A-Za-z]+)|([ ]{0,1}[.]{0,1}[-]{0,1})|([A-Za-z]+))*$";
	return getRegExpResult(this.toString() ,szRegExpression);
}

String.prototype.isEmail = function()
{
	/*
	var email = this.toString();
	if (email == null ) return false;
	if (email.length() == 0 ) return false;
		
	var posOfAt = -1;
	var posOfAt = email.indexOf("@", 0);			if ( posOfAt == -1 ) return false;
	var posOfPeriod1 = email.indexOf(".", posOfAt + 1);	if ( posOfPeriod1 == -1 ) return false;
	var posOfPeriod1 = email.indexOf(".", posOfAt + 1);	if ( posOfPeriod1 == -1 ) return false;
	
	
	

	var expID = "^[a-z_0-9]+(.?_?[a-z0-9]+.?_?)+[a-z0-9_]+$";
	var expDomain = "^[a-z0-9]+[-]*[a-z0-9]+";
	var expDomainType = "^[a-z]+";
	var expCountry = "^[a-z]{1,2}$";
	
	
	
	//if ( this.toString().length == 0 ) return false;
	//var szRegExpression = "^[A-Za-z_0-9]+(.?_?[A-Za-z0-9]+.?_?)+[A-Za-z0-9_]+@{1,1}[A-Za-z0-9]+[-]*[A-Za-z0-9]+[.]{1,1}[A-Za-z]+[.]{0,1}[A-Za-z]{1,2}$";	
	//var szRegExpression = "^[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+(?:[A-Z]{2}|com|org|net|gov|mil|biz|info|mobi|name|aero|jobs|museum)\b$";
	var szRegExpression = "^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}$";
	var tmp = this.toString();
	tmp = tmp.toLowerCase();
	return getRegExpResult(tmp, szRegExpression);
	
	//var szRegExpression = "^[a-z_0-9]+(.?_?[a-z0-9]+.?_?)+[a-z0-9_]+@{1,1}[a-z0-9]+[-]*[a-z0-9]+[.]{1,1}[a-z]+[.]{0,1}[a-z]{1,2}$";
	//var objRegExp = new RegExp("^[a-z_0-9]+(.?_?[a-z0-9]+.?_?)+[a-z0-9_]+@{1,1}[a-z0-9]+[-]*[a-z0-9]+[.]{1,1}[a-z]+[.]{0,1}[a-z]{1,2}$");
	//if ( !this.toString().toLowerCase().match(objRegExp) ) return false;
	//return true;
	*/
	
	var email = this.toString();	
	email = email.toLowerCase();	
	if ( email == null ) return false;
	if ( email.length == 0 ) return false;		
	
	// getting different parts of email address
	var posOfAt = -1;
	var posOfAt = email.indexOf("@", 0);			if ( posOfAt == -1 ) return false;
	var posOfPeriod1 = email.indexOf(".", posOfAt + 1);	if ( posOfPeriod1 == -1 ) return false;
	var posOfPeriod2 = email.indexOf(".", posOfPeriod1 + 1);	

	var type = "";
	var country = "";
	var isCountry = true;
	if ( posOfPeriod2 == -1 ) isCountry = false;	
	var id = email.substring(0, posOfAt); 	
	var domain = email.substring(posOfAt+1, posOfPeriod1); 
	if ( isCountry == false )
	{
		type = email.substring(posOfPeriod1+1, email.length); 
	}
	else
	{
		type = email.substring( posOfPeriod1+1, posOfPeriod2 ); 
		country = email.substring( posOfPeriod2+1, email.length ); 
		
	}	
	// alert ( "ID: " + id + ", Domain: " + domain + ", Type: " + type + ", Country: " + country );		
	
	// initial check
	if (type.length < 2)  return false;	
	if ( isCountry == true ) 
		if ( country.length != 2 )  return false;		

	// validate email parts by applying regular expressions on them
	var expID = "^[a-z_0-9]+(.?_?[a-z0-9]+.?_?)+[a-z0-9_]+$";	
	var expDomain = "^[a-z0-9]+[-]*[a-z0-9]+";
	var expDomainType = "^[a-z]+";
	var expCountry = "^[a-z]{2}$";
	
	if ( !id.match( new RegExp(expID) ) ) return false;
	if ( !domain.match( new RegExp(expDomain) ) ) return false;
	if ( !type.match( new RegExp(expDomainType) ) ) return false;
	if ( isCountry == true ) 
	{
		if ( !country.match( new RegExp(expCountry) ) ) return false;
	}	
	return true;	
}

String.prototype.formatCurrency= function (disable_cents)	
{		
	num = this.toString().replace(/\$|\,/g,'');
	if(isNaN(num)) num = "0";
	sign = ( num == ( num = Math.abs(num)));
	num = Math.floor(num*100+0.50000000001);
	cents = num %100;
	num = Math.floor(num/100).toString();
	if(cents < 10) cents = "0" + cents;
	for (var i = 0; i < Math.floor((num.length-(1+i))/3); i++)
	num = num.substring(0,num.length-(4*i+3))+','+
	num.substring(num.length-(4*i+3));
	if (disable_cents) 
		return (((sign)?'':'-') + num + '.' + cents);			
	else
		return (((sign)?'':'-') + num);
		
	
}


//=========================================================================
// Date class Prototypes
//=========================================================================
String.prototype.isLeapYear = function()
{
	var isTrue = true;
	var txtYear = this.toString();	
	if (!txtYear.isNumber()) return false;
	if ( ((txtYear % 4) == 0) && ((txtYear % 100) > 0))
	{
		 return true;
	}
	if ((txtYear % 400) == 0)
	{
		return true;
	}
	return false;	
}

// return values:
// 0 = Identical
// +ve value = Greater then system time
// -ve value = Less the system time
// * Difference is in number of days
String.prototype.compareWithCurrentDate = function()	
{	
	if (this.toString() == "undefined") return "err";
	
	var objToday = new Date();	
	objToday.setHours(23);
	objToday.setMinutes(59);
	objToday.setSeconds(59);
	
	var crntDate = objToday.getDate();
	var crntMonth = objToday.getMonth() + 1;
	var crntYear = objToday.getFullYear();
	var arrOfDate = this.toString().split("/");

	if (arrOfDate[0] == "NA" || arrOfDate[1] == "NA" || arrOfDate[2] == "NA") return "err";
	
	var nDate = parseInt(arrOfDate[0]);
	var nMonth = parseInt(arrOfDate[1]);
	var nYear = parseInt(arrOfDate[2]);	
	
	var objParaDate = new Date(nYear, nMonth-1, nDate, 23, 59, 59);
	return calculateDaysBetween(objToday, objParaDate);	
}

function getDateByDays(nDays)
{	
	var ONE_DAY = 1000 * 60 * 60 * 24;
	var objCurrentDate = new Date();
	objCurrentDate.setHours(23);
	objCurrentDate.setMinutes(59);
	objCurrentDate.setSeconds(59);	
	var difference_ms = objCurrentDate.getTime() + (ONE_DAY * nDays);
	objCurrentDate.setTime(difference_ms);	
	return objCurrentDate;	
}

function calculateDaysBetween(objDate1, objDate2) 
{
    var ONE_DAY = 1000 * 60 * 60 * 24;
	var date1_ms = objDate1.getTime();
    var date2_ms = objDate2.getTime();    
    var difference_ms = (date1_ms - date2_ms) * -1;
    return Math.round(difference_ms / ONE_DAY);
}


