//<script>     //for interdev coloring

/*
	Paul O'Mahony

	24 March 2001
	
	Adds the following methods to the String object:
	
	isBlank()
	isNumeric()
	isDate()
	isEmail()
	isPostCodeAU()
	
	getDate()
	containsOnly()
			
	lTrim()
	rTrim()
	trim()
	
	left(n)
	right(n)

*/

var whiteSpaces = '\t\r\n \f\v';

function string_isEmail()
{
	var dotPos=this.lastIndexOf('.');
	var atPos=this.lastIndexOf('@');
	var lastCharPos=this.length-1
	return ((dotPos>-1&&atPos>-1)&&(dotPos>atPos)&&(dotPos<lastCharPos));
}

function string_isCreditCardNumber()
{
	var total = 0;

	for (var i = this.length - 2; i >= 0; i -= 2) {
		var c = this.slice(i, i + 1);
		var double_value = parseInt(c) * 2;
		if (double_value > 9) {
			total += 1;
			double_value = double_value % 10
			}
		total += double_value;
		}

	for (var i = this.length - 1; i >= 0; i -= 2) {
		var c = this.slice(i, i + 1);
		total += parseInt(c);
		}

	return ((total % 10) == 0);
} 

function string_isBlank()
{
	for (var i=0; i<this.length;i++) {
		var c = this.charAt(i);
		if(whiteSpaces.indexOf(c)<0)
			return false;
		}
	return true;
}


function string_isPostCodeAU()
{
	// an australian postcode should be a string of 4 digits
	if (this.length == 4) {
		for (var i=0; i<this.length;i++) {
			var c = this.charAt(i);
			if(c < '0' || c > '9')
				return false;
			}
		return true;
	}
	else {
		return false;
	}
}

function string_containsOnly(validChars)
{
	for (var i=0; i<this.length;i++) {
		var c = this.charAt(i);
		if(validChars.indexOf(c)<0)
			return false;
		}
	return true;
}

function string_isNumeric()
{
	var n=parseFloat(this);
	var s=n.toString();
	return (!isNaN(n) && (this==s));
}

function string_isDate(american)
{
	var d = this.getDate(american);
	return (d!=null);
}

function string_getDate(american)
{
	var shortMonths = new Array('','jan','feb','mar','apr','may','jun','jul','aug','sep','oct','nov','dec');
	var longMonths = new Array('','january','february','march','april','may','june','july','august','september','october','november','december');
	var maxDays;
	var s = this.replace(/-/g,':');
	s = s.replace(/\//g,':');
	s = s.replace(/ /g,':');

	var arr = s.split(':');
	var day = parseInt(arr[american?1:0]);
	var month = parseInt(arr[american?0:1]);
	var year = parseInt(arr[2]);

	if (arr[2]&&arr[2].length!=4) return null; // accept only 4-digit years
	if (isNaN(day)||isNaN(year)) return null;
	if (isNaN(month)) {
		month=arr[american?0:1].toLowerCase();
		for (var i=1;i<=12;i++) {
			if (month==shortMonths[i]||month==longMonths[i]) {
				break;
				}
			}
			month=i;
		}
	if (month<1||month>12) return null;

	switch(month) {
			case 4: case 6:
			case 9: case 11:
				maxDays=30; break;

			case 2:
				if (year%4>0||year%400>0){maxDays=28;}
				else{maxDays=29;}
				break;
			
			default:
				maxDays=31;
		}

	if (day<1||day>maxDays) return null;
	
	var d = new Date();
	d.setDate(day);
	d.setMonth(month-1);
	d.setYear(year);
	return d;
}

function string_lTrim()
{
	for (var i=0; i<this.length;i++) {
		var c = this.charAt(i);
		if(whiteSpaces.indexOf(c)<0)
			break;
		}
	return this.slice(i);
}

function string_rTrim()
{
	for (var i=this.length-1; i>=0;i--) {
		var c = this.charAt(i);
		if(whiteSpaces.indexOf(c)<0)
			break;
		}
	return this.slice(0,i+1);
}

function string_trim()
{
	return this.lTrim().rTrim();
}

function string_left(n)
{
	return this.slice(0,n);
}

function string_right(n)
{
	return this.slice(this.length-n);
}

String.prototype.isBlank=string_isBlank;
String.prototype.isDate=string_isDate;
String.prototype.isNumeric=string_isNumeric;
String.prototype.isEmail=string_isEmail;
String.prototype.isPostCodeAU=string_isPostCodeAU;

String.prototype.getDate=string_getDate;
String.prototype.lTrim=string_lTrim;
String.prototype.rTrim=string_rTrim;
String.prototype.trim=string_trim;
String.prototype.right=string_right;
String.prototype.left=string_left;
String.prototype.containsOnly=string_containsOnly;
String.prototype.isCreditCardNumber=string_isCreditCardNumber;
