
	/********************************************************************************************
	*																							*
	*                                        SELECT CALENDAR 									*
	*																							*
	********************************************************************************************/

	$(document).ready(
		
		function(){
		
			JSInterface.MultiLanguage.onLoad(//WAIT FOR MULILANGUAGE TO FINISH PARSING THE .CSV FILE
	
				function(){
					
					// **************** ATTACH DOCUMENT CLICK HANDLER ******************* //
					
					$(document).click(f_tcalHideAll);
					
					// ****************************************************************** //
					
					// STOP BUBBLING
					var calendarContainers = $("div[name=calendar_container]");
					var noCalendarContainers = calendarContainers.length;

					
					for(var i=0; i<noCalendarContainers; i++){

						calendarContainers[i].onclick = function(eventObject){
							
							// ******************************* STOP EVENT BUBBLIG ******************************* //
							
							if(typeof(window.event) != 'undefined'){
								
								//FOR IE - DOM Level 1
								window.event.cancelBubble = true;
								
							}else{
								
								//FOR BROWSERS - DOM Level 2
								eventObject.stopPropagation();
							}
							
							// >>>>>>>>>>>>>>>>>>>> FORCE IRAME GENERATED CALENDAR TO STOP BUBBILNG <<<<<<<<<<<<<<<<<<< //
							
							var tcalObject = document.getElementById('tcal');
							
							if(tcalObject != null){

								tcalObject.onclick = function(eventObject){
								
									// ************* STOP EVENT BUBBLIG ************** //
									
									if(typeof(window.event) != 'undefined'){
										
										//FOR IE - DOM Level 1
										window.event.cancelBubble = true;
										
									}else{
										
										//FOR BROWSERS - DOM Level 2
										eventObject.stopPropagation();
									}
									
									// *********************************************** //
								}
								
							}
							
							// >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>><<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< //
							
							// ********************************************************************************** //
						}
						
					}
					
					// Tigra Calendar v4.0.2 (12-01-2009) European (dd-mm-yyyy)
					// http://www.softcomplex.com/products/tigra_calendar/
					// Public Domain Software... You're welcome.(!!! MODIFIED!!!)
												
					var aMonths = [
									JSInterface.MultiLanguage.translate("January"),
									JSInterface.MultiLanguage.translate("February"),
									JSInterface.MultiLanguage.translate("March"),
									JSInterface.MultiLanguage.translate("April"),
									JSInterface.MultiLanguage.translate("May"),
									JSInterface.MultiLanguage.translate("June"),
									JSInterface.MultiLanguage.translate("July"),
									JSInterface.MultiLanguage.translate("August"),
									JSInterface.MultiLanguage.translate("September"),
									JSInterface.MultiLanguage.translate("October"),
									JSInterface.MultiLanguage.translate("November"),
									JSInterface.MultiLanguage.translate("December")
								  ];
								  
								  
				    var aWeekDays = [
					  					JSInterface.MultiLanguage.translate("Su"),
					  					JSInterface.MultiLanguage.translate("Mo"),
					  					JSInterface.MultiLanguage.translate("Tu"),
					  					JSInterface.MultiLanguage.translate("We"),
					  					JSInterface.MultiLanguage.translate("Th"),
					  					JSInterface.MultiLanguage.translate("Fr"),
					  					JSInterface.MultiLanguage.translate("Sa")
					  				];
					
					
					// default settings
					var A_TCALDEF = {
						'months' : aMonths,
						'weekdays' : aWeekDays,
						'yearscroll': true, // show year scroller
						'weekstart': 1, // first day of week: 0-Su or 1-Mo
						'centyear'  : 70, // 2 digit years less than 'centyear' are in 20xx, othewise in 19xx.
						'imgpath' : JSInterface.localpath+'includes/images/availability_calendar/' // directory with calendar images
					}
				
					// date parsing function
					function f_tcalParseDate (s_date) {
					
						var re_date = /^\s*(\d{1,2})\/(\d{1,2})\/(\d{2,4})\s*$/;
						if (!re_date.exec(s_date))
							return alert ("Invalid date: '" + s_date + "'.\nAccepted format is dd-mm-yyyy.")
						var n_day = Number(RegExp.$1),
							n_month = Number(RegExp.$2),
							n_year = Number(RegExp.$3);
					
						if (n_year < 100)
							n_year += (n_year < this.a_tpl.centyear ? 2000 : 1900);
						if (n_month < 1 || n_month > 12)
							return alert ("Invalid month value: '" + n_month + "'.\nAllowed range is 01-12.");
						var d_numdays = new Date(n_year, n_month, 0);
						if (n_day > d_numdays.getDate())
							return alert("Invalid day of month value: '" + n_day + "'.\nAllowed range for selected month is 01 - " + d_numdays.getDate() + ".");
					
						return new Date (n_year, n_month - 1, n_day);
					}
					// date generating function
					function f_tcalGenerDate (d_date) {
						return (
							(d_date.getDate() < 10 ? '0' : '') + d_date.getDate() + "/"
							+ (d_date.getMonth() < 9 ? '0' : '') + (d_date.getMonth() + 1) + "/"
							+ d_date.getFullYear()
						);
					}
					
					// implementation
					function tcal (a_cfg, a_tpl) {
					
						// apply default template if not specified
						if (!a_tpl)
							a_tpl = A_TCALDEF;
					
						// register in global collections
						if (!window.A_TCALS)
							window.A_TCALS = [];
						if (!window.A_TCALSIDX)
							window.A_TCALSIDX = [];
						
						this.s_id = a_cfg.id ? a_cfg.id : A_TCALS.length;
						window.A_TCALS[this.s_id] = this;
						window.A_TCALSIDX[window.A_TCALSIDX.length] = this;
						
						// assign methods
						this.f_show = f_tcalShow;
						this.f_hide = f_tcalHide;
						this.f_toggle = f_tcalToggle;
						this.f_update = f_tcalUpdate;
						this.f_relDate = f_tcalRelDate;
						this.f_parseDate = f_tcalParseDate;
						this.f_generDate = f_tcalGenerDate;
						
						// create calendar icon
						this.s_iconId = 'tcalico_' + this.s_id;
						this.e_icon = f_getElement(this.s_iconId);
						if (!this.e_icon) {
	
							//GET PARENT
							var inputParent = $("#"+a_cfg.controlname).get(0).parentNode.parentNode;
							
							//APPEND TOGGLE IMAGE
							$(inputParent).append('<div style="float:left; padding-left:10px;"><img src="' + a_tpl.imgpath + 'cal.png" id="' + this.s_iconId + '" onclick="A_TCALS[\'' + this.s_id + '\'].f_toggle()" class="tcalIcon" alt="'+JSInterface.MultiLanguage.translate("Open Calendar")+'" style="float:right;"  /></div>');
							this.e_icon = f_getElement(this.s_iconId);
						}
						// save received parameters
						this.a_cfg = a_cfg;
						this.a_tpl = a_tpl;
				
					}
	
					function f_tcalShow (d_date) {
	
						// find input field
						if (!this.a_cfg.controlname)
							throw("TC: control name is not specified");
						if (this.a_cfg.formname) {
							var e_form = document.forms[this.a_cfg.formname];
							if (!e_form)
								throw("TC: form '" + this.a_cfg.formname + "' can not be found");
							this.e_input = e_form.elements[this.a_cfg.controlname];
						}
						else
							this.e_input = f_getElement(this.a_cfg.controlname);
					
						if (!this.e_input || !this.e_input.tagName || this.e_input.tagName != 'INPUT')
							throw("TC: element '" + this.a_cfg.controlname + "' does not exist in "
								+ (this.a_cfg.formname ? "form '" + this.a_cfg.controlname + "'" : 'this document'));
					
						// dynamically create HTML elements if needed
						this.e_div = f_getElement('tcal');
						if (!this.e_div) {
							this.e_div = document.createElement("DIV");
							this.e_div.id = 'tcal';
							document.body.appendChild(this.e_div);
						}
						this.e_shade = f_getElement('tcalShade');
						if (!this.e_shade) {
							this.e_shade = document.createElement("DIV");
							this.e_shade.id = 'tcalShade';
							document.body.appendChild(this.e_shade);
						}
						this.e_iframe =  f_getElement('tcalIF')
						if (b_ieFix && !this.e_iframe) {
							this.e_iframe = document.createElement("IFRAME");
							this.e_iframe.style.filter = 'alpha(opacity=0)';
							this.e_iframe.id = 'tcalIF';
							this.e_iframe.src = this.a_tpl.imgpath + 'pixel.gif';
							document.body.appendChild(this.e_iframe);
						}
						
						// hide all calendars
						f_tcalHideAll();
					
						// generate HTML and show calendar
						this.e_icon = f_getElement(this.s_iconId);
						if (!this.f_update()){
							return;
						}
							
						this.e_div.style.visibility = 'visible';
						this.e_shade.style.visibility = 'visible';
						if (this.e_iframe)
							this.e_iframe.style.visibility = 'visible';
					
						// change icon and status
						this.e_icon.src = this.a_tpl.imgpath + 'no_cal.png';
						this.e_icon.title = JSInterface.MultiLanguage.translate("Close Calendar");
						this.b_visible = true;
						
						// ************************ SET 'td' ONMOUSEOVER ACTIONS ******************** //
						// (!) hover bg color effect
						var daysContainers = $("td[name=day_container]");
						
						for(var i=0; i<daysContainers.length; i++){
							
							mouseOverActions(daysContainers[i]);
						}
						// ************************************************************************** //
		
					}
										
					function f_tcalHide (n_date) {
						if (n_date)
							this.e_input.value = this.f_generDate(new Date(n_date));
					
						// no action if not visible
						if (!this.b_visible)
							return;
					
						// hide elements
						if (this.e_iframe)
							this.e_iframe.style.visibility = 'hidden';
						if (this.e_shade)
							this.e_shade.style.visibility = 'hidden';
						this.e_div.style.visibility = 'hidden';
						
						// change icon and status
						this.e_icon = f_getElement(this.s_iconId);
						this.e_icon.src = this.a_tpl.imgpath + 'cal.png';
						this.e_icon.title = JSInterface.MultiLanguage.translate("Open Calendar");
						this.b_visible = false;
					}
					
					function f_tcalToggle () {
						
						return this.b_visible ? this.f_hide() : this.f_show();
					}
					
					function f_tcalUpdate (d_date) {
	
						var d_today = this.a_cfg.today ? this.f_parseDate(this.a_cfg.today) : f_tcalResetTime(new Date());
						var d_selected = this.e_input.value == ''
							? (this.a_cfg.selected ? this.f_parseDate(this.a_cfg.selected) : d_today)
							: this.f_parseDate(this.e_input.value);
					
						// figure out date to display
						if (!d_date)
							// selected by default
							d_date = d_selected;
						else if (typeof(d_date) == 'number')
							// get from number
							d_date = f_tcalResetTime(new Date(d_date));
						else if (typeof(d_date) == 'string')
							// parse from string
							this.f_parseDate(d_date);
							
						if (!d_date) return false;
					
						// first date to display
						var d_firstday = new Date(d_date);
						d_firstday.setDate(1);
						d_firstday.setDate(1 - (7 + d_firstday.getDay() - this.a_tpl.weekstart) % 7);
						
						var a_class, s_html = '<table class="ctrl"><tbody><tr>'
							+ (this.a_tpl.yearscroll ? '<td id="previousYear"  ' + this.f_relDate(d_date, -1, 'y') + ' title="'+JSInterface.MultiLanguage.translate("Previous Year")+'"><img src="' + this.a_tpl.imgpath + 'prev_year.gif" /></td>' : '')
							+ '<td id="previousMonth"' + this.f_relDate(d_date, -1) + ' title="'+JSInterface.MultiLanguage.translate("Previous Month")+'"><img src="' + this.a_tpl.imgpath + 'prev_mon.gif" /></td><th>'
							+ this.a_tpl.months[d_date.getMonth()] + ' ' + d_date.getFullYear()
								+ '</th><td id="nextMonth"' + this.f_relDate(d_date, 1) + ' title="'+JSInterface.MultiLanguage.translate("Next Month")+'"><img src="' + this.a_tpl.imgpath + 'next_mon.gif" /></td>'
							+ (this.a_tpl.yearscroll ? '<td id="nextYear"' + this.f_relDate(d_date, 1, 'y') + ' title="'+JSInterface.MultiLanguage.translate("Next Year")+'"><img src="' + this.a_tpl.imgpath + 'next_year.gif" /></td></td>' : '')
							+ '</tr></tbody></table><table><tbody><tr class="wd">';
					
						// print weekdays titles
						for (var i = 0; i < 7; i++)
							s_html += '<th>' + this.a_tpl.weekdays[(this.a_tpl.weekstart + i) % 7] + '</th>';
						s_html += '</tr>' ;
					
						// print calendar table
						var n_date, n_month, d_current = new Date(d_firstday);
						while (d_current.getMonth() == d_date.getMonth() ||
							d_current.getMonth() == d_firstday.getMonth()) {
						
							// print row heder
							s_html +='<tr>';
							for (var n_wday = 0; n_wday < 7; n_wday++) {
					
								a_class = [];
								n_date = d_current.getDate();
								n_month = d_current.getMonth();
					
								// other month
								if (d_current.getMonth() != d_date.getMonth())
									a_class[a_class.length] = 'othermonth';
								// weekend
								if (d_current.getDay() == 0 || d_current.getDay() == 6)
									a_class[a_class.length] = 'weekend';
								// today
								if (d_current.valueOf() == d_today.valueOf())
									a_class[a_class.length] = 'today';
								// selected
								if (d_current.valueOf() == d_selected.valueOf())
									a_class[a_class.length] = 'selected';
					
								s_html += '<td name="day_container" onclick="A_TCALS[\'' + this.s_id + '\'].f_hide(' + d_current.valueOf() + ')"' + (a_class.length ? ' class="' + a_class.join(' ') + '">' : '>') + n_date + '</td>'
					
								d_current.setDate(++n_date);
								while (d_current.getDate() != n_date && d_current.getMonth() == n_month) {
									d_current.setHours(d_current.getHours + 1);
									d_current = f_tcalResetTime(d_current);
								}
							}
							// print row footer
							s_html +='</tr>';
						}
						s_html +='</tbody></table>';
						
						// update HTML, positions and sizes
						this.e_div.innerHTML = s_html;
					
						var n_width  = this.e_div.offsetWidth;
						var n_height = this.e_div.offsetHeight;
						var n_top  = f_getPosition (this.e_icon, 'Top') + this.e_icon.offsetHeight;
						var n_left = f_getPosition (this.e_icon, 'Left') - n_width + this.e_icon.offsetWidth;
						if (n_left < 0) n_left = 0;
						
						this.e_div.style.left = n_left + 'px';
						this.e_div.style.top  = n_top + 'px';
					
						this.e_shade.style.width = (n_width + 8) + 'px';
						this.e_shade.style.left = (n_left - 1) + 'px';
						this.e_shade.style.top = (n_top - 1) + 'px';
						this.e_shade.innerHTML = b_ieFix
							? '<table><tbody><tr><td rowspan="2" colspan="2" width="6"><img src="' + this.a_tpl.imgpath + 'pixel.gif"></td><td width="7" height="7" style="filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src=\'' + this.a_tpl.imgpath + 'shade_tr.png\', sizingMethod=\'scale\');"><img src="' + this.a_tpl.imgpath + 'pixel.gif"></td></tr><tr><td height="' + (n_height - 7) + '" style="filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src=\'' + this.a_tpl.imgpath + 'shade_mr.png\', sizingMethod=\'scale\');"><img src="' + this.a_tpl.imgpath + 'pixel.gif"></td></tr><tr><td width="7" style="filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src=\'' + this.a_tpl.imgpath + 'shade_bl.png\', sizingMethod=\'scale\');"><img src="' + this.a_tpl.imgpath + 'pixel.gif"></td><td style="filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src=\'' + this.a_tpl.imgpath + 'shade_bm.png\', sizingMethod=\'scale\');" height="7" align="left"><img src="' + this.a_tpl.imgpath + 'pixel.gif"></td><td style="filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src=\'' + this.a_tpl.imgpath + 'shade_br.png\', sizingMethod=\'scale\');"><img src="' + this.a_tpl.imgpath + 'pixel.gif"></td></tr><tbody></table>'
							: '<table><tbody><tr><td rowspan="2" width="6"><img src="' + this.a_tpl.imgpath + 'pixel.gif"></td><td rowspan="2"><img src="' + this.a_tpl.imgpath + 'pixel.gif"></td><td width="7" height="7"><img src="' + this.a_tpl.imgpath + 'shade_tr.png"></td></tr><tr><td background="' + this.a_tpl.imgpath + 'shade_mr.png" height="' + (n_height - 7) + '"><img src="' + this.a_tpl.imgpath + 'pixel.gif"></td></tr><tr><td><img src="' + this.a_tpl.imgpath + 'shade_bl.png"></td><td background="' + this.a_tpl.imgpath + 'shade_bm.png" height="7" align="left"><img src="' + this.a_tpl.imgpath + 'pixel.gif"></td><td><img src="' + this.a_tpl.imgpath + 'shade_br.png"></td></tr><tbody></table>';
						
						if (this.e_iframe) {
							this.e_iframe.style.left = n_left + 'px';
							this.e_iframe.style.top  = n_top + 'px';
							this.e_iframe.style.width = (n_width + 6) + 'px';
							this.e_iframe.style.height = (n_height + 6) +'px';
						}
						
						// ************************ SET 'td' ONMOUSEOVER ACTIONS ******************** //
						// (!) hover bg color effect
						var daysContainers = $("td[name=day_container]");
						
						for(var i=0; i<daysContainers.length; i++){
							
							mouseOverActions(daysContainers[i]);
						}
						// ************************************************************************** //
						return true;
					}
			
					function f_getPosition (e_elemRef, s_coord) {
						var n_pos = 0, n_offset,
							e_elem = e_elemRef;
					
						while (e_elem) {
							n_offset = e_elem["offset" + s_coord];
							n_pos += n_offset;
							e_elem = e_elem.offsetParent;
						}
						// margin correction in some browsers
						if (b_ieMac)
							n_pos += parseInt(document.body[s_coord.toLowerCase() + 'Margin']);
						else if (b_safari)
							n_pos -= n_offset;
						
						e_elem = e_elemRef;
						while (e_elem != document.body) {
							n_offset = e_elem["scroll" + s_coord];
							if (n_offset && e_elem.style.overflow == 'scroll')
								n_pos -= n_offset;
							e_elem = e_elem.parentNode;
						}
						return n_pos;
					}
							
					function f_tcalRelDate (d_date, d_diff, s_units) {
						var s_units = (s_units == 'y' ? 'FullYear' : 'Month');
						var d_result = new Date(d_date);
						d_result['set' + s_units](d_date['get' + s_units]() + d_diff);
						if (d_result.getDate() != d_date.getDate())
							d_result.setDate(0);
						return ' onclick="A_TCALS[\'' + this.s_id + '\'].f_update(' + d_result.valueOf() + ')"';
					}
					
					function f_tcalHideAll () {
						for (var i = 0; i < window.A_TCALSIDX.length; i++)
							window.A_TCALSIDX[i].f_hide();
					}	
					
					function f_tcalResetTime (d_date) {
						d_date.setHours(0);
						d_date.setMinutes(0);
						d_date.setSeconds(0);
						d_date.setMilliseconds(0);
						return d_date;
					}
					
					f_getElement = document.all ?
						function (s_id) { return document.all[s_id] } :
						function (s_id) { return document.getElementById(s_id) };
					
					if (document.addEventListener)
						window.addEventListener('scroll', f_tcalHideAll, false);
					if (window.attachEvent)
						window.attachEvent('onscroll', f_tcalHideAll);
						
					// global variables
					var s_userAgent = navigator.userAgent.toLowerCase(),
						re_webkit = /WebKit\/(\d+)/i;
					var b_mac = s_userAgent.indexOf('mac') != -1,
						b_ie5 = s_userAgent.indexOf('msie 5') != -1,
						b_ie6 = s_userAgent.indexOf('msie 6') != -1 && s_userAgent.indexOf('opera') == -1;
					var b_ieFix = b_ie5 || b_ie6,
						b_ieMac  = b_mac && b_ie5,
						b_safari = b_mac && re_webkit.exec(s_userAgent) && Number(RegExp.$1) < 500;
				
						
					// ************************** SET CALENDAR EVENT HANDLERS *************************** //
					// (1) Day Container handlers
					
					function mouseOverActions(object){
	
						//store previous set bg color
						var previousSetBgColor = object.style.backgroundColor;
						
						//onmouse over
						object.onmouseover = function(){
							
							this.style.backgroundColor = "#6597ca";
						}
						
						//onmouse out
						object.onmouseout = function(){
							
							this.style.backgroundColor = previousSetBgColor;
						}
					}	
				
					// ******************************************************************************************** //
	
					//create first calendar
					var calendar_1 = new tcal ({
						// form name
					//	'formname': 'search_apartments',
						// input name
						'controlname': 'search_arrivaldate'
					});
					
					//create second calendar
					var calendar_2 = new tcal ({
						// form name
					//	'formname': 'search_apartments',
						// input name
						'controlname': 'search_departuredate'
					});
	
					// ******************************************************************************************** //	
				}
			
	
			);

		}
			
	);

