function validate_empty(value) {
	return value!=null && value.length>0;
}

function validate_number(value) {
	if (value.length <= 0) return false;
	var re = /^\d+(?:\.\d{0,2})?$/;
	return value.match(re)!=null;
}

function validate_posint(value) {
	if (value.length <= 0) return false;
	var re = /^\d{0,}$/;
	return value.match(re)!=null;
}

function validate_email(value) {	
	if (value.length <= 0) return false;
	var re = /^([a-zA-Z0-9_\-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([a-zA-Z0-9\-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$/;
	return value.match(re)!=null;
}

function validate_date(value) {
	if (value.length <= 0) return true;
	var a = new Array();
	var b = new Array(31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);		
	var c
	var j = true;
	var i = 0;
	try {
		a = value.split('.');
		if (a.length!=3) return false;
		while (i<a.length && j) {				
			j = !isNaN(Math.round(a[i]));
			i++;
		}
		if (!j || isNaN(Math.round(a[0])) || isNaN(Math.round(a[1])) || isNaN(Math.round(a[2]))) return false;
		c = (a[1]==2) ? b[a[1]-1]+Math.abs(((a[2]/4)==Math.round(a[2]/4))) : b[a[1]-1];
		return (a[0] <= c);
	} catch (e) { return false; }
}

function validate_time(value) {
	if (value.length <= 0) return true;
	var a = new Array();
	var j = true;
	var i = 0;
	try {
		a = value.split(':');
		if (a.length!=3) return false;
		while (i<a.length && j) {
			j = !isNaN(Math.round(a[i]));
			i++;
		}
		if (!j || isNaN(Math.round(a[0])) || isNaN(Math.round(a[1])) || isNaN(Math.round(a[2]))) return false;
		return (a[0]>=0 && a[0]<24 && a[1]>=0 && a[1]<60 && a[2]>=0 && a[2]<60);
	} catch (e) { return false; }
}

function validate_phone(value) {
	if (value.length <= 0) return false;
	var pat = '0123456789-() ';
	var num = '0123456789';            
	var s, t;
	var j;      // total length        
	var i = 0;  // indexer
	var c = 0;  // counter for characters after (
	var r = 0;  // ) flag
	var l = 0;  // ( flag
	var h = 0;  // counter for blanks/- in a row            
	var b = true;
	try {                
		s = value;
		j = s.length;
		while (i < j && b) {
			t = s.substring(i, i+1);			
			if (t=='(') { l++; };                    
			if (l == 1 && r == 0 && num.indexOf(t)>=0) { c++; };
			if (t==')') { r = 1; };
			if (t==' ' || t=='-') { h++; } else { h = 0; };
			b = (pat.indexOf(t)>=0 || (i == 0 && t=='+')) && (l < 2) && (h < 2) && (c < 6);			
			if (l == 1 && r == 0) { b = b && (h == 0); }
			if (r == 1) { b = b && l == 1 && c > 0; l = 0; r = 0; c = 0; }
			if (i == j-1) { 
				b = b && num.indexOf(t)>=0;
				if (l == 1) { b = b && (r == 1); }
				else { b = b && (r == 0);}
			}
			i++;
		}
		return b;
	} catch (e) {
		return false;
	}
}

function validate(vType, vValue, vMessage, vTarget) {
	var b = false;
	var v = document.getElementById(vTarget);
	
	switch (vType) {
		case 'empty' : b = validate_empty(vValue); break;
		case 'number' : b = validate_number(vValue); break;
		case 'posint' : b = validate_posint(vValue); break;
		case 'phone' : b = validate_phone(vValue); break;
		case 'email' : b = validate_email(vValue); break;
		case 'datetype' : b = validate_date(vValue); break;
		case 'timetype' : b = validate_time(vValue); break;
		case 'client' : b = vValue;		
	}	
	if (!b) {		
		try {
			v.innerHTML = '<br>' + vMessage;
		} catch (e) { 
			v.innerHTML = '<br>' + e; 
		}
		v.style.display='inline';
		return 1;
	} else {
		v.innerHTML = '';
		v.style.display='none';
		return 0
	}	
}