function validate(o, method) {
	var s, bln;

	switch (method) {
		case "D":
			s = o.value;
			bln = isDateFormat(s);
			if (s)
				o.value = convertDateFormat(s);
			return bln;
			break;
		case "P":
			return isPhoneFormat(o.value);
			break;
		case "E":
			return isEmail(o.value);
			break;
		case "I":
			return isIntegerFormat(o.value);
			break;
		case "F":
			return isFloatFormat(o.value);
			break;
	}
	return false;
}

function validate_string(str, method) {
	var s;

	switch (method) {
		case "D":
			return isDateFormat(str, s);
			break;
		case "P":
			return isPhoneFormat(str);
			break;
		case "E":
			return isEmail(str);
			break;
		case "I":
			return isIntegerFormat(str);
			break;
		case "F":
			return isFloatFormat(str);
			break;
	}
	return false;
}

function isPhoneFormat(str) {
	var re = /^[0-9]{3}\-[0-9]{3}\-[0-9]{4}$/;

	if (str != "" && str.search(re) == -1)
		return false;
	else
		return true;
}

function convertDateFormat(str) {
	var ary, y, m, d, s, re = /^((1[0-2])|(0?[1-9]))\/((3[01])|([12][0-9])|(0?[1-9]))\/((19)|(20))?[0-9]{2}$/;

	s = str;

	if (str.search(re) == -1) {
		return s;
	}

	ary = str.split("/");
	y = parseInt(ary[2], 10);
	m = parseInt(ary[0], 10);
	d = parseInt(ary[1], 10);

	s = ""
	if (m < 10)
		s += "0";
	s += m;
	s += "/";
	if (d < 10)
		s += "0";
	s += d;
	s += "/";
	if (y < 100)
		y += 2000;
	s += y;

	return s;
}

function isDateFormat(str) {
	var re = /^((1[0-2])|(0?[1-9]))\/((3[01])|([12][0-9])|(0?[1-9]))\/((19)|(20))?[0-9]{2}$/, ary, y, m, d;

	if (str == "") {
		return true;
	}

	if (str.search(re) == -1) {
		return false;
	}

	ary = str.split("/");
	y = parseInt(ary[2], 10);
	m = parseInt(ary[0], 10);
	d = parseInt(ary[1], 10);

	switch (m) {
		case 4:
		case 6:
		case 9:
		case 11:
			if (d > 30) {
				return false;
			}
			break;
		case 2:
			if (leapYear(y) && d > 29) {
				return false;
			}
			else if (d > 28) {
				return false;
			}
			break;
	}

	return true;
}

function leapYear(y) {
	if (y % 400 == 0) {
		return true;
	}
	if (y % 4 == 0 && y % 100 != 0) {
		return true;
	}
	return false
}
		 
function isEmail(str) {
	var strValidCharRE = '[^\\/<>()[\\]\\\\.,;:?\\s@\\"]';
	var strEmailAddressRE = '((' + strValidCharRE + '+(\\.' + strValidCharRE + '+)*)|(\\".+\\"))@' + strValidCharRE + '+(\\.' + strValidCharRE + '+)+';
	var strSingleEmailRE = '(((\\"[^\\"]*\\")|([^\\" ]+))[ \\t]*\\<' + strEmailAddressRE + '\\>)|(' + strEmailAddressRE + ')';
	var finalVAR = '[ \\t]*' + strSingleEmailRE + '([ \\t]*(,[ \\t]*)+' + strSingleEmailRE + ')*' + '[ \\t]*(,[ \\t]*)*';
	//var finalVAR = '[ \\t]*(((\\"[^\\"]*\\")|([^\\" ]+))[ \\t]*\\<(([^\\/<>()[\\]\\\\.,;:?\\s@\\"]+(\\.[^\\/<>()[\\]\\\\.,;:?\\s@\\"]+)*)|(\\".+\\"))@[^\\/<>()[\\]\\\\.,;:?\\s@\\"]+(\\.[^\\/<>()[\\]\\\\.,;:?\\s@\\"]+)+'; + '\\>)|((([^\\/<>()[\\]\\\\.,;:?\\s@\\"]+(\\.[^\\/<>()[\\]\\\\.,;:?\\s@\\"]+)*)|(\\".+\\"))@[^\\/<>()[\\]\\\\.,;:?\\s@\\"]+(\\.[^\\/<>()[\\]\\\\.,;:?\\s@\\"]+)+'; + ')'; + '([ \\t]*(,[ \\t]*)+(((\\"[^\\"]*\\")|([^\\" ]+))[ \\t]*\\<(([^\\/<>()[\\]\\\\.,;:?\\s@\\"]+(\\.[^\\/<>()[\\]\\\\.,;:?\\s@\\"]+)*)|(\\".+\\"))@[^\\/<>()[\\]\\\\.,;:?\\s@\\"]+(\\.[^\\/<>()[\\]\\\\.,;:?\\s@\\"]+)+'; + '\\>)|((([^\\/<>()[\\]\\\\.,;:?\\s@\\"]+(\\.[^\\/<>()[\\]\\\\.,;:?\\s@\\"]+)*)|(\\".+\\"))@[^\\/<>()[\\]\\\\.,;:?\\s@\\"]+(\\.[^\\/<>()[\\]\\\\.,;:?\\s@\\"]+)+'; + ')'; + ')*[ \\t]*(,[ \\t]*)*';
	var re = new RegExp("^" + finalVAR + "$");

	if (str != "" && str.search(re) == -1)
		return false;
	else
		return true;
}

function isIntegerFormat(str) {
	var re = /^\-?[0-9]*$/;

	if (str != "" && str.search(re) == -1)
		return false;
	else
		return true;
}

function isFloatFormat(str) {
//at least one leading digit followed by optional decimal and more digits,
//or a decimal followed by at least one digit
	var re = /^(([0-9]+\.?[0-9]*)|(\.?[0-9]+))$/;

	if (str != "" && str.search(re) == -1)
		return false;
	else
		return true;
}
