var DOM = {};
var f;
var dp = [];
var _G = {
	date_separator:'-',
	ajx:{contact:'/ws_mail_hotel.php'},
	init:function (){
		_G.msg = $('#msg');
		_G.hideMessage();
		_G.addToDOM('destination','currencies','languages');
		DOM.calendars =  $('input.dates');
		DOM.currencies.find('a').click(_G.changeSettings);
        //console.time("SKIN");
		DOM.selects =  $('select.theme').select_skin();//;
		DOM.main_selects =  $('select.skinned').skinned();//;
		if($.browser.msie && $.browser.version == 7){
		    $('input.input').each(function(i,e){
		        $(e.parentNode).addClass('fix_ie');
		    })
		}
        //console.timeEnd("SKIN");
        //console.time("DP");
		//_G.doCalendars();
		if( !$sys.tags){
			$sys.tags = {};
			$sys.tags.close_calendar = 'close calendar';
		}
		_G.setCalendars();
        //console.timeEnd("DP");
		$('#close_session_button').click(function() {
			location.href = 'logout.php';
		});
		$('.h').removeClass('h').hide();
		$('span.nomail').each(_G.nomail);
		$('span.nm').each(_G.nm);
		DOM.combo = $('.combo').click( function(e){
				e.stopPropagation();
				$(this).addClass('hover');
				M.combo_active=true;
		});
		DOM.body = $('body').click(_G.closeMenus);
		if ($.browser.msie ){
			DOM.r = $('.r:not(img)').addClass('rel');
				DOM.r.append('<em class="ir tl"></em><em class="ir tr"></em><em class="ir bl"></em><em class="ir br"></em>');
		}
		if(typeof(M)!='undefined')$(M.load);
	},
	closeMenus:function(e){
			e.stopPropagation();
			DOM.combo.removeClass('hover');
			return;
	},
	changeSettings:function(e){
		e.preventDefault();
		var _p = this.className.split(' ');
		_G.save(_p[0],_p[1],90);
		window.location.reload();
	},
	eval:function(obj){
		return window["eval"]("(" + obj + ")");
	},
    setDates: function(i,e){
        dp.push( new DateInput(e) );
        $(e).change(function(event){
            if (this.name =="start") {$('#end').val(this.value);};
        });
    },
    hideMessage:function(){
        setTimeout("$('#msg').fadeOut().removeClass('error')",5000);    
    },
    read :function (name,array) {
        var results = document.cookie.match ( '(^|;) ?' + name + '=([^;]*)(;|$)' ); 
        return (results)?   ((!array)? (unescape( results[2] ).split('&')): unescape( results[2] )) :  null;
    },
    save :function (name,value,days) {
	    if (days) {
		    var date = new Date();
		    date.setTime(+date+(days*24*60*60*1000));
		    var expires = "; expires="+date.toGMTString();
	    }
	    else var expires = "";
	    document.cookie = name+"="+value+expires+"; path=/";
    },
	addToDOM:function(){
		$items =  arguments;
		if ( !$items.length ) return;
		for ( var i = 0; i < $items.length ; i ++ )	DOM[$items[i]] = $('#'+$items[i]);
	},
    doCalendars : function (){
        if (DOM.calendars.length == 0 ) {return;}
		if ( $sys.languagecode =='en' ) {$.extend(DateInput.DEFAULT_OPTS, _G.dates.mdy);}
		var $dateToString = _G.dates.ymd.dateToString,
			$stringToDate = _G.dates.ymd.stringToDate,
			now = new Date();
		
        DOM.calendars.each(function(i,e){
            _G[e.name] = dp = new DateInput(this);
            var $name = e.oldname = e.name;
			var $d = dp.stringToDate(this.value);     
			var $input = DOM['app_'+$name] = $('<input type="hidden" name="'+$name +'" value="'+ ($d == null? '' : $dateToString ($d) )  +'"  />').insertAfter(e);
            e.removeAttribute('name');
            now = ($d == null) ?  now : $d ;
            cal = $(e).change(function(event){
                now = dp.stringToDate( this.value );
				$input.val( $dateToString( now ) );			
				if( this.oldname=='cin') {
				    now.setDate( now.getDate()+1 );
					_G.cout.input.val( _G.cout.dateToString( _G.cout.minDate = now ) ).change();
					DOM.app_cout.val( $dateToString( now ) );					
				}
            });
        }); 
		now = $stringToDate( DOM.app_cin.val() );
        if ( now != null ) {
             _G.cout.minDate = now.setDate( now.getDate()+1 );
             _G.cout.input.change();			 
        }
    },
	setCalendars:function(){
        if (DOM.calendars.length == 0 ) {return;}
		if ( $sys.languagecode =='en' ) {$.extend(DateInput.DEFAULT_OPTS, _G.dates.mdy);}
		var $dateToString = _G.dates.ymd.dateToString,
			$stringToDate = _G.dates.ymd.stringToDate,
			now = new Date();
		
        DOM.calendars.each(function(i,e){
			var datename =  '_' + (+new Date());
			if ($sys.languagecode == 'es'){
			    jQuery.extend(DateInput.DEFAULT_OPTS, {
                  month_names: ["Enero", "Febrero", "Marzo", "Abril", "Mayo", "Junio", "Julio", "Agosto", "Septiembre", "Octubre", "Noviembre", "Diciembre"],
                  short_month_names: ["Ene", "Feb", "Mar", "Abr", "May", "Jun", "Jul", "Ago", "Sep", "Oct", "Nov", "Dic"],
                  short_day_names: ["Dom", "Lun", "Mar", "Mié", "Jue", "Vie", "Sab"],
                  tag_close_calendar: $sys.tags.close_calendar  
                });
			}
            _G[ e.name + datename ] = dp = new DateInput(this);
            var $name = e.oldname = e.name;
			var $d = dp.stringToDate(this.value);     
			var el = $(e).attr('readonly','readonly');
			el.cout =  _G[ e.name + datename ].cout = el.parents('form').find('input.cout');
			var $input = DOM['app_'+$name + '_' + (+new Date()) ] = $('<input type="hidden" name="'+$name +'" value="'+ ($d == null? '' : $dateToString ($d) )  +'"  />').insertAfter(e);
            e.removeAttribute('name');
            now = ($d == null) ?  now : $d ;
            cal = el.change(function(event){
                now = dp.stringToDate( this.value );
				$input.val( $dateToString( now ) );			
				if( this.oldname=='cin') {
				    now.setDate( now.getDate()+1 );
					el.cout.val( dp.dateToString( dp.minDate = now ) ).change();
					//DOM.app_cout.val( $dateToString( now ) );					
				}
            });
        }); 
		/*
		now = $stringToDate( DOM.app_cin.val() );
        if ( now != null ) {
             _G.cout.minDate = now.setDate( now.getDate()+1 );
             _G.cout.input.change();			 
        }
		*/

	},
 	dates:{
 	    ymd:{
            stringToDate: function(string) {

                var matches;
				string.replace('/','-').replace('/','-');
                if (matches = string.match(/^(\d{4,4})-(\d{2,2})-(\d{2,2})$/)) {
                  return new Date(matches[1], matches[2] - 1, matches[3]);
                } else {
                  return null;
                };
            },
            dateToString: function(date) {
				var date = date || new Date();
                var month = (date.getMonth() + 1).toString();
                var dom = date.getDate().toString();
                if (month.length == 1) month = "0" + month;
                if (dom.length == 1) dom = "0" + dom;
                return date.getFullYear() + "-" + month + "-" + dom;
            }
 	    },
		mdy:{
			stringToDate: function(string) {
				var matches;
				var sep = _G.date_separator;
				if (matches = string.match( new RegExp( "^(\\d{2,2})"+sep+"(\\d{2,2})"+sep+"(\\d{4,4})$" ) ) ){
					return new Date(matches[3],  matches[1] -1 , matches[2] );
				} else {
					return null;
				};
			},
			dateToString: function(date) {
				var month = (date.getMonth() + 1).toString();
				var dom = date.getDate().toString();
				var sep = _G.date_separator;
				if (month.length == 1) month = "0" + month;
				if (dom.length == 1) dom = "0" + dom;
				return month + sep + dom + sep +  date.getFullYear() ;
			}
		}
 	},
	nomail:function(i,e){
		var coded = "eT37@fwkwIwyw.k7y";
		var key = "TqvjLFkhGuNMaiyC8SH6E51pAKbtPweZDsU0zJYVfQdornBRlWXcxO2g439m7I"; // pacarama
		var shift=coded.length;
		var html = e.innerHTML;
		var link=""
		for (var t = coded.length,i=0; i < t; i++) {
			if (key.indexOf(coded.charAt(i))==-1) {
				ltr = coded.charAt(i)
				link += (ltr)
			} else {     
				ltr = (key.indexOf(coded.charAt(i))-shift+key.length) % key.length
				link += (key.charAt(ltr))
			}
		}
		$(e).html("<a href='mailto:"+link+"'>"+link+"</a>");
	},
	nm:function(i,e){
		var m = e.innerHTML + '@' + document.domain.replace(/\www./,'');
		e.innerHTML = '<a href="mailto:'+m+'">'+m+'</a>';
	},
	rules:{
		mail:/^([\w\d_\.\-])+\@(([\w\dáéíóúñ\-])+\.)+([\w\d]{2,4})+$/,
		no_empty:/^(\s|.){2,}$/
	}
};

$(_G.init);


(function ($) {
    $.fn.select_skin = function (w) {
			if ($.browser.msie && parseInt($.browser.version) < 7 ){ return false}
		return $(this).each(function(i,e) {
			var params = e.className,
				cls = ( /error/.test( params ) )? 'skin-error' :'' ;
			cls += ( /disabled/.test( params ) )? ' skin-disabled' :' ' ;
			s = $(this);
			s.wrap('<span class="skin-select '+ cls +'"></span>');
            e.c = c = s.parent();
            c.children().before('<span class="skin-select-text">&nbsp;</span>').each(function() {
                if (this.selectedIndex >= 0) $(this).prev().html(this.options[this.selectedIndex].innerHTML)
            });
            c.width(s.outerWidth()-2);
            c.height(s.outerHeight()-2);

            c.css('background', s.css('background'));
            c.css('position', 'relative');

            s.css( { 'opacity': '0',  'position': 'relative', 'z-index': 100 } );

            var t = e.t = c.children().prev();
            t.height(c.outerHeight()-s.css('padding-top').replace(/px,*\)*/g,"")-s.css('padding-bottom').replace(/px,*\)*/g,"")-t.css('padding-top').replace(/px,*\)*/g,"")-t.css('padding-bottom').replace(/px,*\)*/g,"")-2);
            t.css('color', s.css('color'));
            t.css('font-size', s.css('font-size'));
            t.css('font-family', s.css('font-family'));
            t.css('font-style', s.css('font-style'));
            t.css( { 'opacity': 100, 'overflow': 'hidden', 'position': 'absolute', 'text-indent': '0px', 'z-index': 1, 'top': 0, 'left': 0 } );
			s.after('<span class="skin-arrow"></span>');
			s.after('<span class="skin-loading"></span>');
            // add events
            c.children().click(function() {
               // t.html(this.options[this.selectedIndex].innerHTML);
            });
            c.children().change(function() {
                t.html(this.options[this.selectedIndex].innerHTML);
            });
        });
    }
}(jQuery));


(function ($) {
    $.fn.skinned = function (w) {
			if ($.browser.msie && parseInt($.browser.version) < 7 ){ return false}
		return $(this).each(function(i,e) {
			var params = e.className,
				cls = ( /error/.test( params ) )? 'skin-error' :'' ;
			cls += ( /disabled/.test( params ) )? ' skin-disabled' :' ' ;
			s = $(this);

            s.css( { 'opacity': '0',  'position': 'relative', 'z-index': 100 } );

            var t = e.t = s.prev();
            // add events
            c.children().click(function() {
               // t.html(this.options[this.selectedIndex].innerHTML);
            });
            s.change(function() {
                t.html(this.options[this.selectedIndex].innerHTML);
            });
        });
    }
}(jQuery));

/*
Date Input 1.2.0
*/

DateInput = (function($) { 

function DateInput(el, opts) {
  if (typeof(opts) != "object") opts = {};
  $.extend(this, DateInput.DEFAULT_OPTS, opts);
  
  this.input = $(el);
  this.bindMethodsToObj("show", "hide", "hideIfClickOutside", "keydownHandler", "selectDate","moveMonthBy");
  
  this.build();
  this.selectDate();
  this.hide();
};
DateInput.DEFAULT_OPTS = {
  month_names: 'January,February,March,April,May,June,July,August,September,October,November,December'.split(','),
  short_month_names: ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"],
  short_day_names: ["Su", "Mo", "Tu", "We", "Th", "Fr", "Sa"],
  start_of_week: 1,
  date_separator:'-',
  tag_close_calendar:'close calendar',
  minDate: new Date( new Date().getFullYear(),new Date().getMonth(), new Date().getDate()  ),
  maxDate: new Date( new Date().getFullYear() + 1,new Date().getMonth(), new Date().getDate()  ),
  date: new Date()
};
DateInput.prototype = {
  build: function() {
    var monthNav = $('<p class="month_nav">' +
      '<span class="button prev"></span>' +
      ' <span class="month_name"></span> ' +
      '<span class="button next""></span>' +
      '</p>');
    this.monthNameSpan = $("span.month_name", monthNav);
    this.prevMonthButton = $("span.prev", monthNav).click(this.bindToObj(function() { this.moveMonthBy(-1); }));
    this.nextMonthButton =  $("span.next", monthNav).click(this.bindToObj(function() { this.moveMonthBy(1); }));
    
    var yearNav = $('<p class="year_nav h">' +
      '<span class="button prev" ></span>' +
      ' <span class="year_name "></span> ' +
      '<span class="button next" ></span>' +
      '</p>');
	var foot =$('<div class="foot"><span class="close">'+ this.tag_close_calendar+ '<em></em></span></div>');
    this.close =  $("span.close", foot).click(this.bindToObj(function() { this.hide(); }));
	
    this.yearNameSpan = $(".year_name", yearNav);
    $(".prev", yearNav).click(this.bindToObj(function() { this.moveMonthBy(-12); }));
    $(".next", yearNav).click(this.bindToObj(function() { this.moveMonthBy(12); }));
    
    var nav = $('<div class="nav rt"></div>').append(monthNav, yearNav);
    
    var tableShell = "<table><thead><tr>";
    $(this.adjustDays(this.short_day_names)).each(function() {
      tableShell += "<th>" + this + "</th>";
    });
    tableShell += "</tr></thead></table><div class='dates'><table><tbody></tbody></table></div>";
    this.dateSelector = this.rootLayers = $('<div class="dp"></div>').append(nav, tableShell,foot).appendTo(document.body);
    
    if ($.browser.msie && $.browser.version < 7) {
      this.ieframe = $('<iframe class="dp_ieframe" frameborder="0" src="#"></iframe>').insertBefore(this.dateSelector);
      this.rootLayers = this.rootLayers.add(this.ieframe);
      $(".button", nav).mouseover(function() { $(this).addClass("hover") });
      $(".button", nav).mouseout(function() { $(this).removeClass("hover") });
    };
    
    this.tbody = $("div.dates tbody", this.dateSelector);
    
    this.input.change(this.bindToObj(function() { this.selectDate(); }));
    this.selectDate();
  },

  selectMonth: function(date) {
		var newMonth = new Date(date.getFullYear(), date.getMonth(), 1);
	   
		this.currentMonth = newMonth;

		var rangeStart = this.rangeStart(date), rangeEnd = this.rangeEnd(date);
		var numDays = this.daysBetween(rangeStart, rangeEnd);
		var dayCells = "";

		for (var i = 0; i <= numDays; i++) {
			var currentDay = new Date(rangeStart.getFullYear(), rangeStart.getMonth(), rangeStart.getDate() + i, 12, 00);
			var stringCurrentDay = this.dateToString(currentDay);
			if (this.isFirstDayOfWeek(currentDay)) {dayCells += "<tr>"};
			if (currentDay.getMonth() == date.getMonth() && currentDay > this.minDate && currentDay < this.maxDate) {
				dayCells += '<td class="selectable_day" date="' + stringCurrentDay + '">' + currentDay.getDate() + '</td>';
			} else if (currentDay.getMonth() != date.getMonth()) {
				dayCells += '<td class="unselected_month" date="' + stringCurrentDay + '">' + /*currentDay.getDate() */  '&nbsp;'+ '</td>';
			} else {
				dayCells += '<td class="unselected_month" date="' + stringCurrentDay + '">' + currentDay.getDate() + '</td>';
			};
			if (this.isLastDayOfWeek(currentDay)){ dayCells += "</tr>";}
		};

		this.tbody.empty().append(dayCells);
		this.monthNameSpan.empty().append(this.monthName(date) + ' ' +this.currentMonth.getFullYear() );
		this.yearNameSpan.empty().append(this.currentMonth.getFullYear());

		$(".selectable_day", this.tbody).click(this.bindToObj(function(event) {
			this.changeInput($(event.target).attr("date"));
		}));

		$("td[date=" + this.dateToString(new Date()) + "]", this.tbody).addClass("today");

		$("td.selectable_day", this.tbody).mouseover(function() { $(this).addClass("hover") });
		$("td.selectable_day", this.tbody).mouseout(function() { $(this).removeClass("hover") });
				
		if ( date.getMonth() <= this.date.getMonth() && date.getFullYear() <= this.date.getFullYear() ) this.prevMonthButton.hide() ;
		else this.prevMonthButton.show() 
		if ( this.maxDate.getMonth() <= date.getMonth() && this.maxDate.getFullYear() <= date.getFullYear() ) this.nextMonthButton.hide() ;
		else this.nextMonthButton.show() 
		$('.selected', this.tbody).removeClass("selected");
		$('td[date=' + this.selectedDateString + ']', this.tbody).addClass("selected");
  },
  
  selectDate: function(date) {
    if (typeof(date) == "undefined") {
      date = this.stringToDate(this.input.val());
    };
    if (!date) date = new Date();
    this.selectedDate = date;
    this.selectedDateString = this.dateToString(this.selectedDate);
    this.selectMonth(this.selectedDate);
  },
  
  changeInput: function(dateString) {
    this.input.val(dateString).change();
    this.hide();
  },
  
  show: function() {
    this.rootLayers.css("display", "block");
	$('select').css({'visibility':'hidden'});
    $([window, document.body]).click(this.hideIfClickOutside);
    this.input.unbind("focus", this.show);
    $(document.body).keydown(this.keydownHandler);
    this.setPosition();
  },
  
  hide: function() {
	$('select').css({'visibility':'visible'});
    this.rootLayers.css("display", "none");
    $([window, document.body]).unbind("click", this.hideIfClickOutside);
    this.input.focus(this.show);
    $(document.body).unbind("keydown", this.keydownHandler);
  },
  
  hideIfClickOutside: function(event) {
    if (event.target != this.input[0] && !this.insideSelector(event)) {
      this.hide();
    };
  },
  
  insideSelector: function(event) {
    var offset = this.dateSelector.position();
    offset.right = offset.left + this.dateSelector.outerWidth();
    offset.bottom = offset.top + this.dateSelector.outerHeight();
    
    return event.pageY < offset.bottom &&
           event.pageY > offset.top &&
           event.pageX < offset.right &&
           event.pageX > offset.left;
  },
  
  keydownHandler: function(event) {
    switch (event.keyCode)
    {
      case 9: 
      case 27: 
        this.hide();
        return;
      break;
      case 13: 
        this.changeInput(this.selectedDateString);
      break;
      case 33: 
        this.moveDateMonthBy(event.ctrlKey ? -12 : -1);
      break;
      case 34: 
        this.moveDateMonthBy(event.ctrlKey ? 12 : 1);
      break;
      case 38: 
        this.moveDateBy(-7);
      break;
      case 40: 
        this.moveDateBy(7);
      break;
      case 37: 
        this.moveDateBy(-1);
      break;
      case 39: 
        this.moveDateBy(1);
      break;
      default:
        return;
    }
    event.preventDefault();
  },

    stringToDate: function(string) {
        var matches;
        var sep = this.date_separator;
        if (matches = string.match( new RegExp( "^(\\d{2,2})"+sep+"(\\d{2,2})"+sep+"(\\d{4,4})$" ) ) ){
          return new Date(matches[3], matches[2] - 1, matches[1]);
        } else {
          return null;
        };
    },
    dateToString: function(date) {
        var month = (date.getMonth() + 1).toString();
        var dom = date.getDate().toString();
        if (month.length == 1) month = "0" + month;
        if (dom.length == 1) dom = "0" + dom;
        return dom + this.date_separator + month + this.date_separator + date.getFullYear() ;
		},
	setPosition: function() {
		var offset = this.input.offset();
		this.rootLayers.css({
			top: offset.top + this.input.outerHeight(),
			left: offset.left
		});

		if (this.ieframe) {
			this.ieframe.css({
				width: this.dateSelector.outerWidth(),
				height: this.dateSelector.outerHeight()
			});
		};
	},

	moveDateBy: function(amount) {
		var newDate = new Date(this.selectedDate.getFullYear(), this.selectedDate.getMonth(), this.selectedDate.getDate() + amount);
		if ( +this.minDate >= +newDate ) {return;}
		this.selectDate(newDate);
	},

	moveDateMonthBy: function(amount) {
		var newDate = new Date(this.selectedDate.getFullYear(), this.selectedDate.getMonth() + amount, this.selectedDate.getDate());
		if (newDate.getMonth() == this.selectedDate.getMonth() + amount + 1) {
		  newDate.setDate(0);
		};
		this.selectDate(newDate);
	},

	moveMonthBy: function(amount) {
		var newMonth = new Date(this.currentMonth.getFullYear(), this.currentMonth.getMonth() + amount, this.currentMonth.getDate());
		this.selectMonth(newMonth);
	},

	monthName: function(date) {
		return this.month_names[date.getMonth()];
	},

	bindToObj: function(fn) {
		var self = this;
		return function() { return fn.apply(self, arguments) };
	},

	bindMethodsToObj: function() {
		for (var i = 0; i < arguments.length; i++) {
		  this[arguments[i]] = this.bindToObj(this[arguments[i]]);
		};
	},

	indexFor: function(array, value) {
		for (var i = 0; i < array.length; i++) { if (value == array[i]) return i; };
	},

	monthNum: function(month_name) {
		return this.indexFor(this.month_names, month_name);
	},

	shortMonthNum: function(month_name) {
		return this.indexFor(this.short_month_names, month_name);
	},

	shortDayNum: function(day_name) {
		return this.indexFor(this.short_day_names, day_name);
	},

	daysBetween: function(start, end) {
		start = Date.UTC(start.getFullYear(), start.getMonth(), start.getDate());
		end = Date.UTC(end.getFullYear(), end.getMonth(), end.getDate());
		return (end - start) / 86400000;
	},
	  
	changeDayTo: function(dayOfWeek, date, direction) {
		var difference = direction * (Math.abs(date.getDay() - dayOfWeek - (direction * 7)) % 7);
		return new Date(date.getFullYear(), date.getMonth(), date.getDate() + difference);
	},

	rangeStart: function(date) {
		return this.changeDayTo(this.start_of_week, new Date(date.getFullYear(), date.getMonth()), -1);
	},

	rangeEnd: function(date) {
		return this.changeDayTo((this.start_of_week - 1) % 7, new Date(date.getFullYear(), date.getMonth() + 1, 0), 1);
	},

	isFirstDayOfWeek: function(date) {
		return date.getDay() == this.start_of_week;
	},

	isLastDayOfWeek: function(date) {
		return date.getDay() == (this.start_of_week - 1) % 7;
	},
	adjustDays: function(days) {
		var newDays = [];
		for (var i = 0; i < days.length; i++) { newDays[i] = days[(i + this.start_of_week) % 7]; };
		return newDays;
	}
};

$.fn.date_input = function(opts) {
  return this.each(function() { new DateInput(this, opts); });
};
$.date_input = { initialize: function(opts) {
  $("input.date_input").date_input(opts);
} };

return DateInput;
})(jQuery); 

try { document.execCommand("BackgroundImageCache", false, true);} catch(err) {}

