var ABCPro = ABCPro || {};

ABCPro.Front = {

	getAbsX: function (elt) { 

		return (elt.x) ? elt.x : this.getAbsPos(elt,"Left"); 

	},

	getAbsY: function (elt) { 

		return (elt.y) ? elt.y : this.getAbsPos(elt,"Top"); 

	},

	getAbsPos: function (elt, which) {

		var iPos = 0;

		while (elt != null) {

			iPos += elt["offset" + which];

			elt = elt.offsetParent;

		}

		return iPos;

	},

	uclick: function (evnt, calObj, el) {

		var o_id = null;

		if (typeof el == 'object') {

			o_id = parseInt(el.getAttributeNode('axis').value);

		}

			

		calObj.first = 1;

		calObj.s_id = o_id;

		calObj.cur_id = o_id;			

			

		if (calObj.first == 1) {

			var tdays = 0;

			switch (calObj.price_based_on) {

				case 'days':

					tdays = Math.abs(eval(o_id - calObj.s_id)) / (60 * 60 * 24) + 1;

					break;

				case 'nights':

					tdays = Math.abs(eval(o_id - calObj.s_id)) / (60 * 60 * 24);

					var thestyle = window.document.getElementById("d" + calObj.calendar_id + "_" + calObj.cur_id);

					calObj.sum = parseFloat(calObj.sum) - parseFloat(thestyle.abbr);

					break;

			}		

			if (tdays < calObj.min_bl) {

				window.document.getElementById(calObj.container_messages).innerHTML = calObj.message_1;

			} else {

				if (calObj.s_id > calObj.cur_id) {

					var sdate = new Date(calObj.cur_id * 1000);

					var edate = new Date(calObj.s_id * 1000);

				} else {

					var sdate = new Date(calObj.s_id * 1000);

					var edate = new Date(calObj.cur_id * 1000);

				}

				if (calObj.s_id != calObj.cur_id) {

					calObj.half_day=0;

				}

				var params = '?view=' + calObj.view + '&half_day=' + calObj.half_day + '&start_date=' + calObj.s_id + '&end_date=' + calObj.cur_id + '&sMonth=' + calObj.s_month + '&sYear=' + calObj.s_year + '&cid=' + calObj.calendar_id;

				ABCPro.Front.triggerLoading(calObj, 'message_2',calObj.container_form);
				window.location.href = calObj.booking_form_page+params;
				//window.open(calObj.booking_form_page+params,"booking form");
				/*ABCPro.Ajax.sendRequest(calObj.booking_form_url + params, function (req) {

					if (window.document.getElementById(calObj.container_form)) {

						window.document.getElementById(calObj.container_form).innerHTML = req.responseText;

						document.getElementById(calObj.container_form).style.visibility = 'visible';

						

						if (window.document.forms[calObj.booking_form_name]) {

							ABCPro.Front.bindBookingForm(calObj);

							

						}

					}

				});			*/

	        }

			calObj.first = 0;

			calObj.res_ids = [];

		} else {

			if (calObj.s_id > 0) {

				if (calObj.s_id > calObj.cur_id) {

					var tmp_id = calObj.s_id;

					calObj.s_id = calObj.cur_id;

					calObj.cur_id = tmp_id;

				}

				ABCPro.Front.updatePaint(evnt, -1, calObj);

	        }

			calObj.first = 1;

			calObj.s_id = o_id;

			calObj.cur_id = o_id;

			window.document.getElementById(calObj.container_dates).innerHTML = '';       

			ABCPro.Front.updatePaint(evnt, o_id, calObj);

		}

	},

	_color: function (calObj, i) {

		try {

			var thestyle= window.document.getElementById('d' + calObj.calendar_id + "_" + i);

			thestyle.style.backgroundImage = "";

			thestyle.style.backgroundPosition = "center";

			thestyle.style.backgroundColor = "";

			switch (parseInt(thestyle.scope, 10)) {

			case 2:

				thestyle.style.backgroundImage = "url(" + calObj.image_url + "?color1=" + calObj.booked_days_bg_color + "&color2=" + calObj.available_days_bg_color + ")";

				break;

			case 4:

				thestyle.style.backgroundImage = "url(" + calObj.image_url + "?color1=" + calObj.pending_reservations_color + "&color2=" + calObj.available_days_bg_color + ")";

				break; 

			case 3:

				thestyle.style.backgroundImage = "url(" + calObj.image_url + "?color1=" + calObj.available_days_bg_color + "&color2=" + calObj.booked_days_bg_color + ")";

				break;

			case 5:

				thestyle.style.backgroundImage = "url(" + calObj.image_url + "?color1=" + calObj.available_days_bg_color + "&color2=" + calObj.pending_reservations_color + ")";

				break;

			case 1:

				thestyle.style.backgroundColor = "#" + calObj.available_days_bg_color;

				break;

			}

		} catch (error) {

	

		}

	},

	updateRes: function (calObj) {

		var cal_id_len = 0, temp_cal_id = calObj.calendar_id;

		while (temp_cal_id >= 1) {

			cal_id_len++;

			temp_cal_id = temp_cal_id / 10;

		}

	

		var all_date = window.document.getElementsByTagName("td");

		if (all_date) {

			for (var i = 0, len = all_date.length; i < len; i++) {

				if (all_date[i].scope == -1 || all_date[i].scope == -2) {

					calObj.res_ids.push(all_date[i].id.substr(parseInt(1) + parseInt(cal_id_len)));

				}

			}

		}

	},

	updatePaint: function (evnt, o_id, calObj, el) {

		if (o_id == null && typeof el == 'object') {

			o_id = parseInt(el.getAttributeNode('axis').value);

		}

		

		if (calObj.first == 1) {

			calObj.half_day = 0;

			calObj.sum = 0;

			calObj.last = 0;

			for (var i = 0; i < calObj.res_ids.length; i++) {

				if ((calObj.s_id < calObj.res_ids[i] && calObj.res_ids[i] < o_id) || (calObj.s_id > calObj.res_ids[i] && calObj.res_ids[i] > o_id)) {

					return;

				}

			}

	        switch (calObj.price_based_on) {

	        case 'days':

	        	var tdays = Math.abs(eval(o_id - calObj.s_id)) / (60 * 60 * 24) + 1;

	        	break;

	        case 'nights':

	        	var tdays = Math.abs(eval(o_id - calObj.s_id)) / (60 * 60 * 24);

	        	break;

	        }

	

			window.document.getElementById(calObj.container_messages).innerHTML = '';

			if (tdays > calObj.max_bl) {

				window.document.getElementById(calObj.container_messages).innerHTML = calObj.message_3;

				return;

			}       



			if (o_id > calObj.s_id) {



				for (i = calObj.s_id; i <= o_id; i = i + (60 * 60 * 24)) {

					try {

						if (calObj.last) {

							calObj.cur_id = i - (60 * 60 * 24);

							return;

						}

						var thestyle= window.document.getElementById('d' + calObj.calendar_id + "_" + i);

						thestyle.style.backgroundImage = "";

						thestyle.style.backgroundPosition = "center";

						thestyle.style.backgroundColor = "";

						if (thestyle.scope == 2 || thestyle.scope == 4) {

							if (i == calObj.s_id) {

								if (thestyle.scope == 2) {

									thestyle.style.backgroundImage = "url(" + calObj.image_url + "?color1=" + calObj.booked_days_bg_color + "&color2=" + calObj.select_color + ")";

								} else if (thestyle.scope == 4) {

									thestyle.style.backgroundImage = "url(" + calObj.image_url + "?color1=" + calObj.pending_reservations_color + "&color2=" + calObj.select_color + ")";

								}

							} else {

								if (thestyle.scope == 2) {

									thestyle.style.backgroundImage = "url(" + calObj.image_url + "?color1=" + calObj.booked_days_bg_color + "&color2=" + calObj.available_days_bg_color + ")";

								} else if (thestyle.scope == 4) {

									thestyle.style.backgroundImage = "url(" + calObj.image_url + "?color1=" + calObj.pending_reservations_color + "&color2=" + calObj.available_days_bg_color + ")";

								}

								calObj.cur_id = i - (60 * 60 * 24);

								return;

							}

						} else if (thestyle.scope==3) {

							thestyle.style.backgroundImage="url("+calObj.image_url+"?color1="+calObj.select_color+"&color2="+calObj.booked_days_bg_color+")";

							calObj.last=1;

						} else if (thestyle.scope==5) {

							thestyle.style.backgroundImage="url("+calObj.image_url+"?color1="+calObj.select_color+"&color2="+calObj.pending_reservations_color+")";

							calObj.last=1;

						} else if (thestyle.scope==1) {

							switch (calObj.reserve_dates_as_half_booked) {

			              	case 'true':

								if (calObj.s_id == i) {

									thestyle.style.backgroundImage = "url("+calObj.image_url+"?color1="+calObj.available_days_bg_color+"&color2="+calObj.select_color+")";

								} else if (i == o_id) {

									thestyle.style.backgroundImage="url("+calObj.image_url+"?color1="+calObj.select_color+"&color2="+calObj.available_days_bg_color+")";

								} else {

									thestyle.style.backgroundColor="#"+calObj.select_color;

								}

			              		break;

			              	default:

			              		thestyle.style.backgroundColor = "#" + calObj.select_color;

			              	}

						} else {

							return;

						}

						calObj.sum = parseFloat(calObj.sum) + parseFloat(thestyle.abbr);

					} catch (error) {

	

					}

				}

			} else {

	

				for (var i = calObj.s_id; i >= o_id; i = i - (60 * 60 * 24)) {

					try {

						if (calObj.last) {

							calObj.cur_id = i + (60 * 60 * 24);

							return;

						}

						var thestyle= window.document.getElementById('d' + calObj.calendar_id + "_" + i);

						thestyle.style.backgroundImage="";

						thestyle.style.backgroundPosition="center";

						thestyle.style.backgroundColor="";

						if (thestyle.scope == 2) {

							thestyle.style.backgroundImage="url("+calObj.image_url+"?color1="+calObj.booked_days_bg_color+"&color2="+calObj.select_color+")";

							calObj.last = 1;

							if (i == calObj.s_id) {

								calObj.half_day=2;

							}

						} else if (thestyle.scope==4) {

							thestyle.style.backgroundImage="url("+calObj.image_url+"?color1="+calObj.pending_reservations_color+"&color2="+calObj.select_color+")";

							calObj.last=1;

							if (i == calObj.s_id) {

								calObj.half_day = 2;

							}

						} else if (thestyle.scope == 3 || thestyle.scope == 5) {

							if (i == calObj.s_id) {

								if (thestyle.scope==3) {

									thestyle.style.backgroundImage="url("+calObj.image_url+"?color1="+calObj.select_color+"&color2="+calObj.booked_days_bg_color+")";

									calObj.half_day=1;

								} else if (thestyle.scope==5) {

									thestyle.style.backgroundImage="url("+calObj.image_url+"?color1="+calObj.select_color+"&color2="+calObj.pending_reservations_color+")";

									calObj.half_day=1;

								}

							} else {

								if (thestyle.scope==3) {

									thestyle.style.backgroundImage="url("+calObj.image_url+"?color1="+calObj.available_days_bg_color+"&color2="+calObj.booked_days_bg_color+")";

								} else if (thestyle.scope==5) {

									thestyle.style.backgroundImage="url("+calObj.image_url+"?color1="+calObj.available_days_bg_color+"&color2="+calObj.pending_reservations_color+")";

								}

								calObj.cur_id=i+(60*60*24);

								return;

							}

						} else if (thestyle.scope==1) {

							switch (calObj.reserve_dates_as_half_booked) {

		              		case 'true':

								if (calObj.s_id==i) {

									if (calObj.s_id==o_id) {

										var e = (window.event) ? window.event : evnt;

										var half=thestyle.offsetWidth/2;

										var half_sum=parseInt(half)+parseInt(ABCPro.Front.getAbsX(thestyle));

										if (half_sum>e.clientX) {

											calObj.half_day=1;

											thestyle.style.backgroundImage="url("+calObj.image_url+"?color1="+calObj.select_color+"&color2="+calObj.available_days_bg_color+")";

										} else {

											calObj.half_day=2;

											thestyle.style.backgroundImage="url("+calObj.image_url+"?color1="+calObj.available_days_bg_color+"&color2="+calObj.select_color+")";

										}

									} else {

										thestyle.style.backgroundImage="url("+calObj.image_url+"?color1="+calObj.select_color+"&color2="+calObj.available_days_bg_color+")";

									}

								} else if (i==o_id) {

									thestyle.style.backgroundImage="url("+calObj.image_url+"?color1="+calObj.available_days_bg_color+"&color2="+calObj.select_color+")";

								} else {

									thestyle.style.backgroundColor="#"+calObj.select_color;

								}

			              		break;

			              	default:

			              		thestyle.style.backgroundColor="#"+calObj.select_color;

			              	}

						} else {

							return;

						}

						calObj.sum= parseFloat(calObj.sum) + parseFloat(thestyle.abbr);

					} catch (error) {

	

					}

				}

			}

	          

			if (calObj.cur_id > o_id && o_id >= calObj.s_id) {

				var i = o_id;

	

				for (i = i + (60 * 60 * 24); i <= calObj.cur_id; i = i + (60 * 60 * 24)) {

					ABCPro.Front._color(calObj, i);

				}

			} else if (calObj.cur_id < calObj.s_id && o_id >= calObj.s_id) {

				var i = calObj.cur_id;

	   

				for (i; i < calObj.s_id; i = i + (60 * 60 * 24)) {

					ABCPro.Front._color(calObj, i);

				}

			} else if (calObj.cur_id < o_id && o_id <= calObj.s_id) {

				var i = calObj.cur_id;

	

				for (i; i < o_id; i = i + (60 * 60 * 24)) {

					ABCPro.Front._color(calObj, i);

				}

			} else if (calObj.cur_id > calObj.s_id && o_id <= calObj.s_id) {

				var i = calObj.s_id;

	

				for (i = i + (60 * 60 * 24); i <= calObj.cur_id; i = i + (60 * 60 * 24)) {

					ABCPro.Front._color(calObj, i);

				} 

			}

			calObj.cur_id = o_id;

		}

	      

		if (o_id == -1) {

			var i = calObj.s_id;

	            

			for (i; i <= calObj.cur_id; i = i + (60 * 60 * 24)) {

				ABCPro.Front._color(calObj, i);

			}

		}

	},

	errorHandler: function (calObj, message) {

		var err = ABCPro.Utils.getElementsByClass("ABCPro_Error", window.document.forms[calObj.booking_form_name], "P");

		if (err[0]) {

			err[0].innerHTML = calObj.validation.error_title + message.replace(/\n/g, "<br />");

			err[0].style.display = '';

		} else {

			alert(calObj.validation.error_title + message);

		}

	},

	triggerLoading: function (calObj, message, container) {

		window.document.getElementById(container).innerHTML = "<div style=\"width: " + calObj.calendarWidth + "px; height: " + calObj.calendarHeight + "px;\">" + calObj[message] + "</div>";

		window.document.getElementById(calObj.container_messages).innerHTML = '';

	},

	validateBookingForm: function (btn, calObj) {

		var re = /^([0-9a-zA-Z\.\-\_]+)@([0-9a-zA-Z\.\-\_]+)\.([0-9a-zA-Z\.\-\_]+)+$/,

			message = "";

		

		var frm = window.document.forms[calObj.booking_form_name];

		for (var i = 0, len = frm.elements.length; i < len; i++) {

			var cls = frm.elements[i].getAttributeNode("class");

			if (cls && cls.value.indexOf("ABCPro_Required") !== -1) {

				switch (frm.elements[i].nodeName) {

				case "INPUT":

					switch (frm.elements[i].type) {

					case "checkbox":

					case "radio":

						if (!frm.elements[i].checked && frm.elements[i].getAttribute("rev")) {

							message += "\n - " + frm.elements[i].getAttribute("rev"); 

						}

						break;

					default:

						if (frm.elements[i].value.length === 0 && frm.elements[i].getAttribute("rev")) {

							message += "\n - " + frm.elements[i].getAttribute("rev");

						}

						break;

					}

					break;

				case "TEXTAREA":

					if (frm.elements[i].value.length === 0 && frm.elements[i].getAttribute("rev")) {						

						message += "\n - " + frm.elements[i].getAttribute("rev");

					}

					break;

				case "SELECT":

					switch (frm.elements[i].type) {

					case 'select-one':

						if (frm.elements[i].value.length === 0 && frm.elements[i].getAttribute("rev")) {

							message += "\n - " + frm.elements[i].getAttribute("rev"); 

						}

						break;

					case 'select-multiple':

						var has = false;

						for (j = frm.elements[i].options.length - 1; j >= 0; j = j - 1) {

							if (frm.elements[i].options[j].selected) {

								has = true;

								break;

							}

						}

						if (!has && frm.elements[i].getAttribute("rev")) {

							message += "\n - " + frm.elements[i].getAttribute("rev");

						}

						break;

					}

					break;

				default:

					break;

				}

			}

		}

		

		if (frm.email && frm.email.value.length !== 0 && frm.email.value.match(re) == null) {

			message += "\n - " + calObj.validation.invalid_email;

		}

		

		if (message.length === 0) {

			return true;

		} else {

			this.errorHandler(calObj, message);		

			btn.disabled = false;

			return false;

		}

	},

	validateSummaryForm: function (btn, calObj) {

		btn.value='Please wait...';

		var pass = true,

			message = "\n" + calObj.validation.payment,

			i;

		

		if (pass) {

			return true;

		} else {

			this.errorHandler(calObj, message);		

			btn.disabled = false;

			return false;

		}

	},

	setPaymentsPrice: function(calObj, json) {

		var form = window.document.forms[calObj.payment[json.payment]];

		

		if (typeof form != 'undefined') {

			switch (json.payment) {

				case 'authorize':

					//form.x_amount.value = json.price;

					form.x_description.value = json.calendar_name + ', Reservation ID: ' + json.reservation_refid;

					form.x_custom_reservation_id.value = json.reservation_id;

					break;

				default:

					//form.amount.value = json.price;

					form.item_name.value = json.calendar_name + ', Reservation ID: ' + json.reservation_refid;

					form.item_number.value = json.reservation_refid;

					break;

			}

		} else return false;

		

		return true;

	},

	bindBookingForm: function (calObj) {

		// bind onchange event for payment type select

		ABCPro.Utils.addEvent(window.document.forms[calObj.booking_form_name][calObj.booking_form_payment_method], "change", function () {

			// if there will be any credit card option...

			if (calObj.cc_data_flag) {

				var $this = this;

				var $ccData = document.getElementById(calObj.cc_data_wrapper);

				var $value = $this.options[$this.selectedIndex].value.split('::');

				

				

				if ($value[0] == 'credit_card') {

					// show the credit cards fields

					$ccData.style.display = "block";

					

					// for each field add a requered class name

					for (i = 0; i < calObj.cc_data_ids.length; i++) {

						ABCPro.Utils.addClassName(document.getElementById(calObj.cc_data_ids[i]), 'ABCPro_Required', true);

					}

				} else {

					// hide the credit cards fields

					$ccData.style.display = "none";

					

					// for each field remove the requered class name

					for (i = 0; i < calObj.cc_data_ids.length; i++) {

						ABCPro.Utils.removeClassName(document.getElementById(calObj.cc_data_ids[i]), 'ABCPro_Required');

					}

				}

			}

		});

		

		// bind form submit ...

		ABCPro.Utils.addEvent(window.document.forms[calObj.booking_form_name][calObj.booking_form_submit_name], "click", function () {

			var $this = this;

			$this.disabled = true;

			if (!ABCPro.Front.validateBookingForm($this, calObj)) {

				return;

			}

			var postData = ABCPro.Utils.serialize(window.document.forms[calObj.booking_form_name]);

			if ($this.form.captcha) {

				ABCPro.Ajax.getJSON(calObj.booking_captcha_url + "&captcha=" + $this.form.captcha.value, function (json) {

					switch (json.code) {

					case 100:

						ABCPro.Front.errorHandler(calObj, '\n' + json.text);

						$this.disabled = false;

						break;

					case 200:

						ABCPro.Front.triggerLoading(calObj, 'message_4',calObj.container_form);

						ABCPro.Ajax.sendRequest(calObj.booking_summary_url, function (req) {

							window.document.getElementById(calObj.container_form).innerHTML = req.responseText;

							ABCPro.Front.bindBookingSummary(calObj, postData);

						}, postData);

						break;

					}

				});

			} else {

				ABCPro.Front.triggerLoading(calObj, 'message_4',calObj.container_form);

				ABCPro.Ajax.sendRequest(calObj.booking_summary_url, function (req) {

					window.document.getElementById(calObj.container_form).innerHTML = req.responseText;

					ABCPro.Front.bindBookingSummary(calObj, postData);

				}, postData);

			}								

		});

	

		ABCPro.Utils.addEvent(window.document.forms[calObj.booking_form_name][calObj.booking_form_cancel_name], "click", function () {

			this.disabled = true;

			/*var qs = "&cid=" + calObj.calendar_id + "&view=" + calObj.view + "&month=" + window.document.forms[calObj.booking_form_name].sMonth.value + "&year=" + window.document.forms[calObj.booking_form_name].sYear.value;

			ABCPro.Front.triggerLoading(calObj, 'message_5',calObj.container_availability);

			ABCPro.Ajax.sendRequest(calObj.prev_next_url + qs, function (req) {

				window.document.getElementById(calObj.container_availability).innerHTML = req.responseText;

				ABCPro.Front.bind(calObj);

			});*/

			document.getElementById(calObj.container_form).style.visibility = 'hidden';

		});

	},

	bindBookingSummary: function (calObj, postData) {

		if (typeof window.document.forms[calObj.booking_form_name] != "undefined" && typeof window.document.forms[calObj.booking_form_name][calObj.booking_form_submit_name] != 'undefined') {

			ABCPro.Utils.addEvent(window.document.forms[calObj.booking_form_name][calObj.booking_form_submit_name], "click", function () {

				var $this = this;

				$this.disabled = true;

				if (!ABCPro.Front.validateSummaryForm($this, calObj)) {

					return;

				}

				ABCPro.Ajax.postJSON(calObj.booking_save_url, function (json) {

					switch (json.code) {

					case 100:

						ABCPro.Front.errorHandler(calObj, '\n' + json.text);

						$this.disabled = false;

						break;

					case 200:

						if (typeof window.document.forms[calObj.payment[json.payment]] != 'undefined') {

							if (json.payment != '' && json.payment != 'book') {

								ABCPro.Front.setPaymentsPrice(calObj, json);

								window.document.forms[calObj.payment[json.payment]].submit();

							} else {

								ABCPro.Front.errorHandler(calObj, '\n' + json.text);

							}

						}

						break;

					}																								

				}, postData + ABCPro.Utils.serialize(window.document.forms[calObj.booking_form_name]));

			});

		}

		

		if (typeof window.document.forms[calObj.booking_form_name] != 'undefined' && typeof window.document.forms[calObj.booking_form_name][calObj.booking_form_confirm_name] != 'undefined') {

			ABCPro.Utils.addEvent(window.document.forms[calObj.booking_form_name][calObj.booking_form_confirm_name], "click", function () {

				var $this = this;

				$this.disabled = true;

				ABCPro.Front.triggerLoading(calObj, 'message_6',calObj.container_form);

				ABCPro.Ajax.postJSON(calObj.booking_save_url, function (json) {

					window.document.getElementById(calObj.container_form).innerHTML = json.text;

				}, postData);

			});

		}

		

		if (typeof window.document.forms[calObj.booking_form_name] != 'undefined' && typeof window.document.forms[calObj.booking_form_name][calObj.booking_form_cancel_name] != 'undefined') {

			ABCPro.Utils.addEvent(window.document.forms[calObj.booking_form_name][calObj.booking_form_cancel_name], "click", function () {

				this.disabled = true;

				ABCPro.Front.triggerLoading(calObj, 'message_2',calObj.container_form);

				ABCPro.Ajax.sendRequest(calObj.booking_form_url, function (req) {

					window.document.getElementById(calObj.container_form).innerHTML = req.responseText;

					ABCPro.Front.bindBookingForm(calObj);

				}, postData);

			});

		}

	},

	bind: function (calObj) {

		var i, p, len;

		calObj.data = calObj.data || [];

		calObj.data = calObj.data.concat(ABCPro.Utils.getElementsByClass(calObj.class_name_dates, window.document.getElementById(calObj.container_availability), "td"));

		

		if (calObj.price_based_on == 'nights') {

			calObj.data = calObj.data.concat(ABCPro.Utils.getElementsByClass(calObj.class_name_pending_nights_start, window.document.getElementById(calObj.container_availability), "td"));

			calObj.data = calObj.data.concat(ABCPro.Utils.getElementsByClass(calObj.class_name_pending_nights_end, window.document.getElementById(calObj.container_availability), "td"));

			calObj.data = calObj.data.concat(ABCPro.Utils.getElementsByClass(calObj.class_name_booked_nights_start, window.document.getElementById(calObj.container_availability), "td"));

			calObj.data = calObj.data.concat(ABCPro.Utils.getElementsByClass(calObj.class_name_booked_nights_end, window.document.getElementById(calObj.container_availability), "td"));

		}

		

		for (i = 0, len = calObj.data.length; i < len; i++) {

			if (calObj.accept_booking) {

				ABCPro.Utils.addEvent(calObj.data[i], "click", function (event) {

					ABCPro.Front.uclick(event, calObj, this);

				});

			}

			

			ABCPro.Utils.addEvent(calObj.data[i], "mouseover", function (event) {

				if (calObj.accept_booking) {

					ABCPro.Front.updatePaint(event, null, calObj, this);

				}

				

				if (calObj.show_prices) {

					p = ABCPro.Utils.getElementsByClass(calObj.class_name_prices, this, "span");

					p[0].style.display = "block";

				}

			});

			

			if (calObj.show_prices) {

				ABCPro.Utils.addEvent(calObj.data[i], "mouseout", function (event) {

					p = ABCPro.Utils.getElementsByClass(calObj.class_name_prices, this, "span");

					p[0].style.display = "none";

				});

			}

		}



		var a1 = [], a2 = [];

		if (window.document.getElementById(calObj.container_availability)) {

			a1 = ABCPro.Utils.getElementsByClass(calObj.class_name_month, window.document.getElementById(calObj.container_availability), "a");

		}		

		if (window.document.getElementById(calObj.container_navigation)) {

			a2 = ABCPro.Utils.getElementsByClass(calObj.class_name_month, window.document.getElementById(calObj.container_navigation), "a");

		}

		var a = a1.concat(a2);

		for (var m, y, rel, j = 0, alen  = a.length; j < alen; j++) {

			ABCPro.Utils.addEvent(a[j], "click", function (event) {

				rel = this.getAttributeNode("rel").value;

				switch (rel.split("-")[0]) {

				case 'next':

					m = parseInt(calObj.s_month, 10) + parseInt(calObj.view, 10) > 12 ? parseInt(calObj.s_month) + parseInt(calObj.view, 10) - 12 : parseInt(calObj.s_month) + parseInt(calObj.view, 10);

					y = parseInt(calObj.s_month, 10) + parseInt(calObj.view, 10) > 12 ? parseInt(calObj.s_year) + 1 : parseInt(calObj.s_year);

					break;

				case 'prev':

					m = parseInt(calObj.s_month, 10) - parseInt(calObj.view, 10) < 1 ? parseInt(calObj.s_month) - parseInt(calObj.view, 10) + 12 : parseInt(calObj.s_month) - parseInt(calObj.view, 10);

					y = parseInt(calObj.s_month, 10) - parseInt(calObj.view, 10) < 1 ? parseInt(calObj.s_year) - 1 : parseInt(calObj.s_year);

					break;

				}

				var queryStr = "&cid=" + calObj.calendar_id + "&view=" + calObj.view + "&month=" + m + "&year=" + y;

				/*ABCPro.Ajax.onStart = function () {

					window.document.getElementById(calObj.container_availability).innerHTML = '<img src="' + calObj.indicator_path + '" alt="" />';

				};

				ABCPro.Ajax.onStop = function () {

					window.document.getElementById(calObj.container_availability).innerHTML = "";

				};*/

				ABCPro.Front.triggerLoading(calObj, 'message_5',calObj.container_availability);

				ABCPro.Ajax.sendRequest(calObj.prev_next_url + queryStr, function (req) {

					window.document.getElementById(calObj.container_availability).innerHTML = req.responseText;

					calObj.s_month = m;

					calObj.s_year = y;

					ABCPro.Front.bind(calObj);

				});

				if (event.preventDefault) {

					event.preventDefault();

				}

				return false;

			});

		}

		

		ABCPro.Utils.addEvent(window, "unload", ABCPro.Utils.eventCache.flush);

	},

	

	updatePrice: function (tax, deposit, total) {

		document.getElementById('front_tax').innerHTML = tax;

		document.getElementById('front_deposit').innerHTML = deposit;

		document.getElementById('front_total').innerHTML = total;

	}

};
