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);
        }
			
        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');
	       ABCPro.Ajax.sendRequest(calObj.booking_form_url + params, function (req) {
		  if (window.document.getElementById(calObj.container_availability)) {
		      window.document.getElementById(calObj.container_availability).innerHTML = req.responseText;
						
		      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);
        }
    },
    bindPopUp: function (calObj,n_id) {
        
        calObj.n_id  = n_id;
        ABCPro.Utils.addEvent(window.document.getElementById(calObj.closes), "click", function () {
	   window.document.getElementById('pop_up').style.display = "none";	       
        });
              
        var pop_up = ABCPro.Utils.getElementsByClass(calObj.pop_up_pice);
	   
	  
        for(i=0;i<pop_up.length;i++){
	     
	 
	   ABCPro.Utils.addEvent(pop_up[i], "click", function () {
	       
	       var axis = this.getAttribute("axis");
	       
	       var params = '&type=' + axis + '&view=' + calObj.view + '&now_date=' + calObj.n_id + '&sMonth=' + calObj.s_month + '&sYear=' + calObj.s_year + '&cid=' + calObj.calendar_id;
	      
	       ABCPro.Front.triggerLoading(calObj, 'message_2');
	       ABCPro.Ajax.sendRequest(calObj.booking_form_url + params, function (req) {
		  if (window.document.getElementById(calObj.container_availability)) {
		      window.document.getElementById(calObj.container_availability).innerHTML = req.responseText;
						
		      if (window.document.forms[calObj.booking_form_name]) {
			 window.document.getElementById('pop_up').style.display = 'none';
			 ABCPro.Front.bindBookingForm(calObj);
							
		      }
		  }
	       });
       
	   });      
        }
        
    },
    pop: function (evnt, calObj, el) {
                       
        var n_id = null;
        if (typeof el == 'object') {
	   n_id = parseInt(el.getAttributeNode('axis').value);
        }
        
        calObj.n_id = n_id;
	
        var params = '&view=' + calObj.view + '&now_date=' + calObj.n_id + '&sMonth=' + calObj.s_month + '&sYear=' + calObj.s_year + '&cid=' + calObj.calendar_id;
	   
        ABCPro.Ajax.sendRequest(calObj.pop_up_url + params, function (req) {
	   if(window.document.getElementById('pop_up')){
	       window.document.getElementById('pop_up').innerHTML = req.responseText;
	       window.document.getElementById('pop_up').style.display = 'block';
	       ABCPro.Front.bindPopUp(calObj,n_id);	
	   }
        });    
       	      	      
    },
    _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) {
        window.document.getElementById(calObj.container_availability).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) {
        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) {
        if (typeof window.document.forms[calObj.booking_form_name] != "undefined" && typeof window.document.forms[calObj.booking_form_name].is_annulation != 'undefined') {
	   ABCPro.Utils.addEvent(window.document.forms[calObj.booking_form_name].is_annulation, "click", function () {
	       var postData = ABCPro.Utils.serialize(window.document.forms[calObj.booking_form_name]);
				
	       ABCPro.Ajax.sendRequest(calObj.booking_form_price_update_url, function (req) {
		  window.document.getElementById("ABCProPriceWrapper").innerHTML = req.responseText;
	       }, postData);
	   });
        }
		
        // 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');
			 ABCPro.Ajax.sendRequest(calObj.booking_summary_url, function (req) {
			     window.document.getElementById(calObj.container_availability).innerHTML = req.responseText;
			     ABCPro.Front.bindBookingSummary(calObj, postData);
			 }, postData);
			 break;
		  }
	       });
	   } else {
	       ABCPro.Front.triggerLoading(calObj, 'message_4');
	       ABCPro.Ajax.sendRequest(calObj.booking_summary_url, function (req) {
		  window.document.getElementById(calObj.container_availability).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');
	   ABCPro.Ajax.sendRequest(calObj.prev_next_url + qs, function (req) {
	       window.document.getElementById(calObj.container_availability).innerHTML = req.responseText;
	       ABCPro.Front.bind(calObj);
	   });
        });
    },
    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');
	       ABCPro.Ajax.postJSON(calObj.booking_save_url, function (json) {
		  window.document.getElementById(calObj.container_availability).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');
	       ABCPro.Ajax.sendRequest(calObj.booking_form_url, function (req) {
		  window.document.getElementById(calObj.container_availability).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.pop(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 a = ABCPro.Utils.getElementsByClass(calObj.class_name_month, window.document.getElementById(calObj.container_navigation), "a");
        for (var m, y, rel, j = 0, alen  = a.length; j < alen; j++) {
	   ABCPro.Utils.addEvent(a[j], "click", function () {
	       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');
	       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);
	       });
	   });
        }
		
        ABCPro.Utils.addEvent(window, "unload", ABCPro.Utils.eventCache.flush);
    }
};
