var CL = CL || {};
CL.Ajax = {
	XMLHttpFactories: [
		function () {return new XMLHttpRequest()},
		function () {return new ActiveXObject("Msxml2.XMLHTTP")},
		function () {return new ActiveXObject("Msxml3.XMLHTTP")},
		function () {return new ActiveXObject("Microsoft.XMLHTTP")}
	],
	sendRequest: function (url, callback, postData) {
		var req = this.createXMLHTTPObject();
		if (!req) {
			return;
		}
		var method = (postData) ? "POST" : "GET";
		req.open(method, url, true);
		req.setRequestHeader('User-Agent', 'XMLHTTP/1.0');
		req.setRequestHeader('X-Requested-With', 'XMLHttpRequest');
		if (postData) {
			req.setRequestHeader('Content-type','application/x-www-form-urlencoded');
		}
		req.onreadystatechange = function () {
			if (req.readyState != 4) {
				return;
			}
			if (req.status != 200 && req.status != 304) {
	//			alert('HTTP error ' + req.status);
				return;
			}
			callback(req);
		}
		if (req.readyState == 4) {
			return;
		}
		req.send(postData);
	},	
	createXMLHTTPObject: function () {
		var xmlhttp = false;
		for (var i = 0; i < this.XMLHttpFactories.length; i++) {
			try {
				xmlhttp = this.XMLHttpFactories[i]();
			}
			catch (e) {
				continue;
			}
			break;
		}
		return xmlhttp;
	}
};
CL.Utils = {
	calendarCallback: function (r) {
		document.getElementById('property-view-calendars').innerHTML = r.responseText;
	},
	calendarDate: function (get, date) {
		var d = date.split("-");
		var n = new Date(d[0], d[1] - 1, d[2]);
		switch (get) {
			case 'prev':
				var newDate = new Date(new Date(n).setMonth(n.getMonth() - 3));
			break;
			case 'next':
			default:
				var newDate = new Date(new Date(n).setMonth(n.getMonth() + 3));
			break;
		}		
		return newDate.getFullYear() + "-" + (newDate.getMonth() + 1) + "-" + newDate.getDate();
	},
	submitRequest : function (event, formName, containerId) {
		var postData = [],
			re = /([0-9a-zA-Z\.\-\_]+)@([0-9a-zA-Z\.\-\_]+)\.([0-9a-zA-Z\.\-\_]+)/,
			msg = '',
			name = document.forms[formName].name.value,
			email = document.forms[formName].email.value,
			verification = document.forms[formName].verification.value;
			
		if (name == '') {
			msg += '\n Name is required';
		}
		
		if (email == '') {
			msg += '\n E-Mail is required';
		}
		
		if (email != '' && email.match(re) == null) {
			msg += '\n E-Mail is invalid';
		}
		
		if (verification == '') {
			msg += '\n Verification is required';
		}
		
		if (msg != '') {
			alert('Please note that:' + msg);
		} else {
			postData.push('date_from=' + document.forms[formName].from_year.value + '-' + document.forms[formName].from_month.value + '-' + document.forms[formName].from_day.value);
			postData.push('date_to=' + document.forms[formName].to_year.value + '-' + document.forms[formName].to_month.value + '-' + document.forms[formName].to_day.value);
			postData.push('listing_id=' + document.forms[formName].listing_id.value);
			postData.push('name=' + encodeURIComponent(name));
			postData.push('email=' + encodeURIComponent(email));
			postData.push('phone=' + encodeURIComponent(document.forms[formName].phone.value));
			postData.push('notes=' + encodeURIComponent(document.forms[formName].notes.value));
			postData.push('verification=' + encodeURIComponent(document.forms[formName].verification.value));
	
			CL.Ajax.sendRequest(document.forms[formName].booking_url.value, function (result) {
				document.getElementById(containerId).innerHTML = result.responseText
			}, postData.join('&'));
		}
		
		if (event.preventDefault) {
			event.preventDefault();
		}
	},
	resetLoginForm: function(formName) {
		document.forms[formName].login_username.value = '';
		document.forms[formName].login_password.value = '';
	},
	resetRegistrationForm: function(formName) {
		document.forms[formName].username.value = '';
		document.forms[formName].password.value = '';
		document.forms[formName].name.value = '';
		document.forms[formName].email.value = '';
	},
	submitLoginForm : function (formName) {
		var postData = [],
			re = /([0-9a-zA-Z\.\-\_]+)@([0-9a-zA-Z\.\-\_]+)\.([0-9a-zA-Z\.\-\_]+)/,
			msg = '',
			username = document.forms[formName].login_username.value,
			password = document.forms[formName].login_password.value;
					
		if (username == '') {
			msg += '\n Username is required';
		}
		
		if (password == '') {
			msg += '\n Password is required';
		}
		
		if (msg != '') {
			alert('Please note that:' + msg);
			return false;
		} else {
			return true;
		}
	},
	submitRegistrationForm : function (formName) {
		var postData = [],
			re = /([0-9a-zA-Z\.\-\_]+)@([0-9a-zA-Z\.\-\_]+)\.([0-9a-zA-Z\.\-\_]+)/,
			msg = '',
			username = document.forms[formName].register_username.value,
			password = document.forms[formName].register_password.value,
			re_password = document.forms[formName].register_password_repeat.value,
			name = document.forms[formName].name.value,
			email = document.forms[formName].email.value;
					
		if (username == '') {
			msg += '\n Username is required';
		}
		
		if (password == '') {
			msg += '\n Password is required';
		}
		
		if (re_password == '') {
			msg += '\n Repeat password is required';
		}
		
		if (password != '' && re_password != '' && password != re_password) {
			msg += '\n Password and repeat password needs to be the same';
		}
		
		if (name == '') {
			msg += '\n Name is required';
		}
		
		if (email == '') {
			msg += '\n Email is required';
		}
		
		if (email != '' && email.match(re) == null) {
			msg += '\n E-Mail is invalid';
		}
		
		if (msg != '') {
			alert('Please note that:' + msg);
			return false;
		} else {
			return true;
		}
	}
};
