var isDOM=document.getElementById?1:0;
var isIE=document.all?1:0;
var isNS4=navigator.appName=='Netscape'&&!isDOM?1:0;

function getRef(i, p) {
	p = !p ? document : p.navigator ? p.document:p;
	return isIE ? p.all[i]:isDOM ? (p.getElementById ? p : p.ownerDocument ).getElementById(i) : isNS4 ? 	p.layers[i] : null;
}

function goBack() {
	window.history.back();
}

var passminlen = 1;
var datesep = '/';
var timesep = ':';

function validate(field, type, name) {
		switch (type) {
				case 'string':
					if (field.value == '') {
						alert('Please enter a valid '+name);
						field.focus();
						return false;
					}
					break;
					
				case 'email':
					if ((field.value.indexOf('@') == -1 
							|| field.value.indexOf('.') == -1 
							|| field.value.indexOf('.', field.value.indexOf('@')) <= field.value.indexOf('@')+1
							|| field.value.length < 6)
							&& field.value != 'admin' ) {
						
						alert('Please enter a valid '+name);
						field.focus();
						return false;
					}
					break;
					
				case 'password':
					if (field.value == ''
							|| (field.value.length < passminlen && field.value != 'admin')) {
						alert('Please enter a valid '+name);
						field.focus();
						return false;
					}
					break;
					
				case 'number':
					for (var x=0; x<field.value.length; x++) {
						var ch = field.value.charAt(x);
						
						if (( ch < '0' || ch > '9' ) && ch != '.') {
							alert('Please enter a valid '+name);
							field.focus();
							return false; 
						}
					}
					break;
					
					case 'integer':
					for (var x=0; x<field.value.length; x++) {
						var ch = field.value.charAt(x);
						
						if (( ch < '0' || ch > '9' ) ) {
							alert('Please enter a valid '+name);
							field.focus();
							return false; 
						}
					}
					break;
					
					case 'percent':
					for (var x=0; x<field.value.length; x++) {
						var ch = field.value.charAt(x);
						
						if (( ch < '0' || ch > '9' ) || (field.value>100) || (field.value=='')) {
							alert('Please enter a valid '+name);
							field.focus();
							return false; 
						}
						
					}
					break;
					
				case 'non0number':
					if (field.value == '' || Number(field.value) == 0) {
						alert('Please enter a valid '+name);
						field.focus();
						return false;
					}
					
					for (var x=0; x<field.value.length; x++) {
						var ch = field.value.charAt(x);
						
						if (( ch < '0' || ch > '9' ) && ch != '.') {
							alert('Please enter a valid '+name);
							field.focus();
							return false; 
						}
					}
					break;
					
				case 'date_mdy':
					var d = new Date(field.value.substr(6, 4)
														, Number(field.value.substr(0, 2))-1
														, field.value.substr(3, 2));
					
					var d2 = ((d.getMonth() < 9)?'0':'')+Number(d.getMonth()+1).toString()+datesep
										+((d.getDate() < 10)?'0':'')+Number(d.getDate()).toString()+datesep
										+Number(d.getFullYear()).toString();
					
					if ((field.value != d2 
							|| field.value.charAt(2) != datesep
							|| field.value.charAt(5) != datesep
							|| field.value.length != 10) && field.value != '') {
						alert('Please enter a valid '+name);
						field.focus();
						return false; 
					}
					break;
					
				case 'date_mdy_future':
					var today = new Date();
					var d = new Date(field.value.substr(6, 4)
														, Number(field.value.substr(0, 2))-1
														, field.value.substr(3, 2)
														, 23, 59, 59);
					
					var d2 = ((d.getMonth() < 9)?'0':'')+Number(d.getMonth()+1).toString()+datesep
										+((d.getDate() < 10)?'0':'')+Number(d.getDate()).toString()+datesep
										+Number(d.getFullYear()).toString();
					
					if ((field.value != d2 
							|| field.value.charAt(2) != datesep
							|| field.value.charAt(5) != datesep
							|| field.value.length != 10) && field.value != ''
							|| d.getTime() < today.getTime())
					{
						alert('Please enter a valid '+name);
						field.focus();
						return false; 
					}
					break;
					
				case 'date_dmy':
					var d = new Date(field.value.substr(6, 4)
														, Number(field.value.substr(3, 2))-1
														, field.value.substr(0, 2));
					
					var d2 = ((d.getDate() < 10)?'0':'')+Number(d.getDate()).toString()+datesep
										+((d.getMonth() < 9)?'0':'')+Number(d.getMonth()+1).toString()+datesep
										+Number(d.getFullYear()).toString();
					
					if ((field.value != d2 
							|| field.value.charAt(2) != datesep
							|| field.value.charAt(5) != datesep
							|| field.value.length != 10) && field.value != '') {
						alert('Please enter a valid '+name);
						field.focus();
						return false; 
					}
					break;
					
				case 'date_dmy_future':
					var today = new Date();
					var d = new Date(field.value.substr(6, 4)
														, Number(field.value.substr(3, 2))-1
														, field.value.substr(0, 2)
														, 23, 59, 59);
					
					var d2 = ((d.getDate() < 10)?'0':'')+Number(d.getDate()).toString()+datesep
										+((d.getMonth() < 9)?'0':'')+Number(d.getMonth()+1).toString()+datesep
										+Number(d.getFullYear()).toString();
					
					if ((field.value != d2 
							|| field.value.charAt(2) != datesep
							|| field.value.charAt(5) != datesep
							|| field.value.length != 10) && field.value != ''
							|| d.getTime() < today.getTime())
						{
						alert('Please enter a valid '+name+' from today onwards');
						field.focus();
						return false; 
					}
					break;
				
				case 'time24':
					if (field.value.charAt(2) != timesep
							|| field.value.length != 5
							|| Number(field.value.substr(0, 2)) > 23
							|| Number(field.value.substr(3, 2)) > 59) {
						alert('Please enter a valid '+name);
						field.focus();
						return false; 
					}
					break;
					
				case 'radio':
					if (field.value == null) {
						alert('Please select a valid '+name);
						return false; 
					}
					break;
					
				case 'url':
					if (field.value.substr(0, 7) != 'http://' 
							|| field.value.indexOf('.') == -1 
							|| field.value.indexOf(' ') != -1 
							|| field.value.length < 11) {
						
						alert('Please enter a valid '+name);
						field.focus();
						return false;
					}
					break;
			
		}
		
		return true;
}

function valPassword(pass, confirm) {
		if (pass.value != confirm.value) {
			alert('The password confirmation does not match');
			pass.focus();
			return false;
		}
			
		return true;
}

function valDateGreater(start, end, lxdf) {
		if (lxdf == 'date_dmy') {
			var s = new Date(start.value.substr(6, 4)
												, Number(start.value.substr(3, 2))-1
												, start.value.substr(0, 2));
	
			var e = new Date(end.value.substr(6, 4)
												, Number(end.value.substr(3, 2))-1
												, end.value.substr(0, 2));
		} 
		else {
			var s = new Date(start.value.substr(6, 4)
												, Number(start.value.substr(0, 2))-1
												, start.value.substr(3, 2));
	
			var e = new Date(end.value.substr(6, 4)
												, Number(end.value.substr(0, 2))-1
												, end.value.substr(3, 2));
		}
		
		if (e < s) {
			alert('End date must be same or posterior to start date');
			end.focus();
			return false;
		}
			
		return true;
}

function ConfirmDel(url, name) {
		if (confirm('Are you sure you want to delete this '+name))
			window.location.href = url;
}

function valClient() {
	f = window.document.editform;
	ret = validate(f.lx_name, 'string', 'client name')
				&& validate(f.lx_email, 'email', 'email')
				&& validate(f.lx_username, 'string', 'username')
				&& validate(f.lx_pass, 'password', 'password')
				&& validate(f.confirm, 'password', 'password confirmation')
				&& valPassword(f.lx_pass, f.confirm)
				&& validate(f.lx_contactname, 'string', 'contact name')
				&& validate(f.lx_contactemail, 'email', 'contact email')
				;
				
	return ret;
}

function valPayment() {
	f = window.document.editform;
	ret = validate(f.lx_name, 'string', 'payment name')
				;
				
	return ret;
}

function valTemplate() {
	f = window.document.editform;
	ret = validate(f.lx_name, 'string', 'Name')
				&& validate(f.lx_lang, 'string', 'Language')
				&& validate(f.lx_tpl, 'string', '.tpl')
				&& validate(f.lx_cal, 'string', '.cal')
				;
				
	return ret;
}


function valProperty() {
	f = window.document.editform;
	ret = validate(f.lx_name, 'string', 'property name');
	return ret;
}

function valReview() {
	f = window.document.review;
	ret = validate(f.lx_details, 'string', 'details');
	return ret;
}

function valCost(lxdf) {
	f = window.document.editform;
	
	ret = validate(f.lx_name, 'string', 'name');
	
	if (!f.lx_default[0].checked)
		ret = ret 
				&& validate(f.lx_period_start, 'string', 'period start date')
				&& validate(f.lx_period_start, lxdf, 'period start date')
				&& validate(f.lx_period_end, 'string', 'period end date')
				&& validate(f.lx_period_end, lxdf+'_future', 'period end date');
			
	ret = ret
	  	&& valDateGreater(f.lx_period_start, f.lx_period_end, lxdf)
			&& validate(f.lx_cost, 'non0number', 'cost');
			
	return ret;
}

function validate_cost_percent(cost, percent) {
	if (cost.value!=0 && percent.value!=0  ) {
		alert('You must define only one value, and the other must to be zero');
				cost.focus();
				return false; 
		} else if (cost.value=='' && percent.value=='') {
			alert('You must define one value');
				cost.focus();
				return false; 
			
			} else if ((cost.value=='0' && percent.value=='') ||((cost.value=='' && percent.value=='0')) ){
					alert('You must define one value diferent of 0');
					cost.focus();
					return false;
					
					}
}

function valExtracost() {
	f = window.document.editform;
	ret = validate(f.lx_description, 'string', 'description')
	     &&validate(f.lx_cost,'number','cost')
	     && validate(f.lx_percentage,'percentage','percentage')
	     && validate_cost_percent(f.lx_cost, f.lx_percentage)
	  	;
				
	return ret;
}

function valDatefilter(lxdf) {
	f = window.document.editform;
	ret = validate(f.start_date, lxdf, 'Start Date Filter')
			  && validate(f.end_date, lxdf, 'End Date Filter')
			 ;
	return ret;
}

function valBooking(lxdf) {
	f = window.document.editform;
	
	ret =  validate(f.lx_start_date, 'string', 'start date')
				&& validate(f.lx_start_date, lxdf, 'start date')
				&& validate(f.lx_end_date, 'string', 'end date')
				&& validate(f.lx_end_date, lxdf+'_future', 'end date')
				&& valDateGreater(f.lx_start_date, f.lx_end_date, lxdf)
				;
				
	return ret;
}

function valBooking_user(lxdf) {
	f = window.document.editform;
	ret =  validate(f.start_date, 'string', 'start date')
		&& validate(f.start_date, lxdf, 'start date')
		&& validate(f.end_date, 'string', 'end date')
		&& validate(f.start_date, lxdf+'_future', 'start date')
		&& validate(f.end_date, lxdf+'_future', 'end date')
  	&& valDateGreater(f.start_date, f.end_date, lxdf);
				
	return ret;
}

function valCustomer() {
	f = window.document.editform;
	ret =  validate(f.lx_name, 'string', 'name')
			&& validate(f.lx_address, 'string', 'address')
			&& validate(f.lx_city, 'string', 'city')
			&& validate(f.lx_state, 'string', 'state/province')
			&& validate(f.lx_zip, 'string', 'zip/post code')
			;

	if (ret && f.lx_country.options[f.lx_country.selectedIndex].value == '0') {
		ret = false;
		alert('Please select a valid country');
	}

	ret = ret 
			&& validate(f.lx_phone, 'string', 'home phone')
			&& validate(f.lx_email, 'email', 'email')
			;
	
	if (ret && f.terms != null && !f.terms.checked) {
		ret = false;
		alert('You must agree to the terms and conditions before continuing');
	}

	f.total_cost.value = f.total.value;
//	valUpdatetotalonload();			
	return ret;
}

function lxSelectMove(source, destine) {

	var src = getRef(source);
	var dst = getRef(destine);
	var temp = new Array();
	
	for (var x=0; x<src.length; x++)
		if (src.options[x].selected) {
			dst.options[dst.length] = new Option(src.options[x].text, src.options[x].value, false, false);
			temp.push(src.options[x].value);
		}
		
	for (x=0; x<temp.length; x++)
		for (y=0; y<src.length; y++)
			if (Number(src.options[y].value) == temp[x]) {
				src.remove(y);
				break;
			}
}

function lxSelectList(listname) {

	var lname = getRef(listname);
	
	for (var x=0; x<lname.length; x++)
		lname.options[x].selected = true;
}


function lxSelectMove(source, destine) {

	var src = getRef(source);
	var dst = getRef(destine);
	var temp = new Array();
	
	for (var x=0; x<src.length; x++)
		if (src.options[x].selected) {
			dst.options[dst.length] = new Option(src.options[x].text, src.options[x].value, false, false);
			temp.push(src.options[x].value);
		}
		
	for (x=0; x<temp.length; x++)
		for (y=0; y<src.length; y++)
			if (Number(src.options[y].value) == temp[x]) {
				src.remove(y);
				break;
			}
}

function lxSelectList(listname) {

	var lname = getRef(listname);
	
	for (var x=0; x<lname.length; x++)
		lname.options[x].selected = true;
}

function valUpdatetotal(chkbox_name, textbox_name, cost) {
	var field = getRef(chkbox_name);
	var txtbox = getRef(textbox_name);
	var f = window.document.editform;

	if (field.checked){
		var total = parseFloat(f.total.value) + parseFloat(cost);	
		txtbox.value = cost;
	}
	else {
		var total = parseFloat(f.total.value) - parseFloat(cost);	
		txtbox.value = '';
	}
	
	f.total.value = total.toFixed(2);
	//alert(f.total.value);
}

function valUpdatetotalonload(chkbox_name,textbox_name,cost) {
	var field = getRef(chkbox_name);
	var txtbox = getRef(textbox_name);
	var f = window.document.editform;

	if (field.checked) {
		var total = parseFloat(f.total.value) + parseFloat(cost);	
		txtbox.value = cost.toFixed(2);
	}
	else {
		var total = parseFloat(f.total.value) - parseFloat(cost);	
		txtbox.value = '';
	}
	
	f.total.value = total.toFixed(2);
	//return false;
}