/**
 *
 * Date picker
 * Author: Stefan Petre www.eyecon.ro
 * 
 * Dual licensed under the MIT and GPL licenses
 * 
 */
var weekday=new Array(7);
weekday[0]="Domingo";
weekday[1]="Segunda-feira";
weekday[2]="Terça-feira";
weekday[3]="Quarta-feira";
weekday[4]="Quinta-feira";
weekday[5]="Sexta-feira";
weekday[6]="Sábado";

(function ($) {
  var DatePicker = function () {
    var ids = {},
      views = {
        years: 'datepickerViewYears',
        months: 'datepickerViewMonths',
        days: 'datepickerViewDays'
      },
      tpl = {
        wrapper: '<div class="datepicker"><div class="datepickerContainer"><table cellspacing="0" cellpadding="0"><tbody><tr></tr><tr><th class="datepickerNights">0 Noites</th><th colspan="2" class="datepickerClose"><a href="#" class="ui-button ui-corner-all">Fechar</a></th></tr></tbody></table></div></div>',
        head: [
          '<td>',
          '<table cellspacing="0" cellpadding="0">',
            '<thead>',
              '<tr>',
                '<%=prev%>',
                '<th colspan="5" class="monthsNames"><span></span></th>',
                '<%=next%>',
              '</tr>',
              '<tr class="datepickerDoW">',
                '<th><span><%=day1%></span></th>',
                '<th><span><%=day2%></span></th>',
                '<th><span><%=day3%></span></th>',
                '<th><span><%=day4%></span></th>',
                '<th><span><%=day5%></span></th>',
                '<th><span><%=day6%></span></th>',
                '<th><span><%=day7%></span></th>',
              '</tr>',
            '</thead>',
          '</table></td>'
        ],
        space : '<td class="datepickerSpace"><div></div></td>',
        days: [
          '<tbody class="datepickerDays">',
            '<tr>',
              '<td class="<%=weeks[0].days[0].classname%>"><a href="#"><span><%=weeks[0].days[0].text%></span></a></td>',
              '<td class="<%=weeks[0].days[1].classname%>"><a href="#"><span><%=weeks[0].days[1].text%></span></a></td>',
              '<td class="<%=weeks[0].days[2].classname%>"><a href="#"><span><%=weeks[0].days[2].text%></span></a></td>',
              '<td class="<%=weeks[0].days[3].classname%>"><a href="#"><span><%=weeks[0].days[3].text%></span></a></td>',
              '<td class="<%=weeks[0].days[4].classname%>"><a href="#"><span><%=weeks[0].days[4].text%></span></a></td>',
              '<td class="<%=weeks[0].days[5].classname%>"><a href="#"><span><%=weeks[0].days[5].text%></span></a></td>',
              '<td class="<%=weeks[0].days[6].classname%>"><a href="#"><span><%=weeks[0].days[6].text%></span></a></td>',
            '</tr>',
            '<tr>',
              '<td class="<%=weeks[1].days[0].classname%>"><a href="#"><span><%=weeks[1].days[0].text%></span></a></td>',
              '<td class="<%=weeks[1].days[1].classname%>"><a href="#"><span><%=weeks[1].days[1].text%></span></a></td>',
              '<td class="<%=weeks[1].days[2].classname%>"><a href="#"><span><%=weeks[1].days[2].text%></span></a></td>',
              '<td class="<%=weeks[1].days[3].classname%>"><a href="#"><span><%=weeks[1].days[3].text%></span></a></td>',
              '<td class="<%=weeks[1].days[4].classname%>"><a href="#"><span><%=weeks[1].days[4].text%></span></a></td>',
              '<td class="<%=weeks[1].days[5].classname%>"><a href="#"><span><%=weeks[1].days[5].text%></span></a></td>',
              '<td class="<%=weeks[1].days[6].classname%>"><a href="#"><span><%=weeks[1].days[6].text%></span></a></td>',
            '</tr>',
            '<tr>',
              '<td class="<%=weeks[2].days[0].classname%>"><a href="#"><span><%=weeks[2].days[0].text%></span></a></td>',
              '<td class="<%=weeks[2].days[1].classname%>"><a href="#"><span><%=weeks[2].days[1].text%></span></a></td>',
              '<td class="<%=weeks[2].days[2].classname%>"><a href="#"><span><%=weeks[2].days[2].text%></span></a></td>',
              '<td class="<%=weeks[2].days[3].classname%>"><a href="#"><span><%=weeks[2].days[3].text%></span></a></td>',
              '<td class="<%=weeks[2].days[4].classname%>"><a href="#"><span><%=weeks[2].days[4].text%></span></a></td>',
              '<td class="<%=weeks[2].days[5].classname%>"><a href="#"><span><%=weeks[2].days[5].text%></span></a></td>',
              '<td class="<%=weeks[2].days[6].classname%>"><a href="#"><span><%=weeks[2].days[6].text%></span></a></td>',
            '</tr>',
            '<tr>',
              '<td class="<%=weeks[3].days[0].classname%>"><a href="#"><span><%=weeks[3].days[0].text%></span></a></td>',
              '<td class="<%=weeks[3].days[1].classname%>"><a href="#"><span><%=weeks[3].days[1].text%></span></a></td>',
              '<td class="<%=weeks[3].days[2].classname%>"><a href="#"><span><%=weeks[3].days[2].text%></span></a></td>',
              '<td class="<%=weeks[3].days[3].classname%>"><a href="#"><span><%=weeks[3].days[3].text%></span></a></td>',
              '<td class="<%=weeks[3].days[4].classname%>"><a href="#"><span><%=weeks[3].days[4].text%></span></a></td>',
              '<td class="<%=weeks[3].days[5].classname%>"><a href="#"><span><%=weeks[3].days[5].text%></span></a></td>',
              '<td class="<%=weeks[3].days[6].classname%>"><a href="#"><span><%=weeks[3].days[6].text%></span></a></td>',
            '</tr>',
            '<tr>',
              '<td class="<%=weeks[4].days[0].classname%>"><a href="#"><span><%=weeks[4].days[0].text%></span></a></td>',
              '<td class="<%=weeks[4].days[1].classname%>"><a href="#"><span><%=weeks[4].days[1].text%></span></a></td>',
              '<td class="<%=weeks[4].days[2].classname%>"><a href="#"><span><%=weeks[4].days[2].text%></span></a></td>',
              '<td class="<%=weeks[4].days[3].classname%>"><a href="#"><span><%=weeks[4].days[3].text%></span></a></td>',
              '<td class="<%=weeks[4].days[4].classname%>"><a href="#"><span><%=weeks[4].days[4].text%></span></a></td>',
              '<td class="<%=weeks[4].days[5].classname%>"><a href="#"><span><%=weeks[4].days[5].text%></span></a></td>',
              '<td class="<%=weeks[4].days[6].classname%>"><a href="#"><span><%=weeks[4].days[6].text%></span></a></td>',
            '</tr>',
            '<tr>',
              '<td class="<%=weeks[5].days[0].classname%>"><a href="#"><span><%=weeks[5].days[0].text%></span></a></td>',
              '<td class="<%=weeks[5].days[1].classname%>"><a href="#"><span><%=weeks[5].days[1].text%></span></a></td>',
              '<td class="<%=weeks[5].days[2].classname%>"><a href="#"><span><%=weeks[5].days[2].text%></span></a></td>',
              '<td class="<%=weeks[5].days[3].classname%>"><a href="#"><span><%=weeks[5].days[3].text%></span></a></td>',
              '<td class="<%=weeks[5].days[4].classname%>"><a href="#"><span><%=weeks[5].days[4].text%></span></a></td>',
              '<td class="<%=weeks[5].days[5].classname%>"><a href="#"><span><%=weeks[5].days[5].text%></span></a></td>',
              '<td class="<%=weeks[5].days[6].classname%>"><a href="#"><span><%=weeks[5].days[6].text%></span></a></td>',
            '</tr>',
          '</tbody>'
        ],
        months: [
          '<tbody class="<%=className%>">',
            '<tr>',
              '<td colspan="2"><a href="#"><span><%=data[0]%></span></a></td>',
              '<td colspan="2"><a href="#"><span><%=data[1]%></span></a></td>',
              '<td colspan="2"><a href="#"><span><%=data[2]%></span></a></td>',
              '<td colspan="2"><a href="#"><span><%=data[3]%></span></a></td>',
            '</tr>',
            '<tr>',
              '<td colspan="2"><a href="#"><span><%=data[4]%></span></a></td>',
              '<td colspan="2"><a href="#"><span><%=data[5]%></span></a></td>',
              '<td colspan="2"><a href="#"><span><%=data[6]%></span></a></td>',
              '<td colspan="2"><a href="#"><span><%=data[7]%></span></a></td>',
            '</tr>',
            '<tr>',
              '<td colspan="2"><a href="#"><span><%=data[8]%></span></a></td>',
              '<td colspan="2"><a href="#"><span><%=data[9]%></span></a></td>',
              '<td colspan="2"><a href="#"><span><%=data[10]%></span></a></td>',
              '<td colspan="2"><a href="#"><span><%=data[11]%></span></a></td>',
            '</tr>',
          '</tbody>'
        ]
      },
      defaults = {
        flat: false,
        starts: 1,
        prev: '&#9664;',
        next: '&#9654;',
        lastSel: false,
        setInFuture: false,
        input_in_id: '',
        input_out_id: '',
        mode: 'single',
        view: 'days',
        calendars: 1,
        format: 'Y-m-d',
        position: 'bottom',
        eventName: 'click',
        onRender: function(){return {};},
        onChange: function(){return true;},
        onShow: function(){return true;},
        onBeforeShow: function(){return true;},
        onHide: function(){return true;},
        locale: {
          days: ["Domingo", "Segunda", "Terça", "Quarta", "Quinta", "Sexta", "Sábado", "Domingo"],
          daysShort: ["D", "S", "T", "Q", "Q", "S", "S", "D"],
          daysMin: ["Do", "Se", "Te", "Qu", "Qu", "Se", "Sa", "Do"],
          months: ["Janeiro", "Fevereiro", "Março", "Abril", "Maio", "Junho", "Julho", "Agosto", "Setembro", "Outubro", "Novembro", "Dezembro"],
          monthsShort: ["Jan", "Fev", "Mar", "Abr", "Mai", "Jun", "Jul", "Ago", "Set", "Out", "Nov", "Dez"],
          weekMin: 'wk'
        }        
      },
      fill = function(el) {        
        var options = $(el).data('datepicker');
        var cal = $(el);
        var currentCal = Math.floor(options.calendars/2), date, data, dow, month, cnt = 0, week, days, indic, indic2, html, tblCal;
        cal.find('td>table tbody').remove();
        for (var i = 0; i < options.calendars; i++) {
          date = new Date(options.current);
          date.addMonths(-currentCal + i);
          tblCal = cal.find('table').eq(i+1);
          switch (tblCal[0].className) {
            case 'datepickerViewDays':
              dow = formatDate(date, 'B, Y');
              break;
            case 'datepickerViewMonths':
              dow = date.getFullYear();
              break;
            case 'datepickerViewYears':
              dow = (date.getFullYear()-6) + ' - ' + (date.getFullYear()+5);
              break;
          } 
          tblCal.find('thead tr:first th:eq(1) span').text(dow);
          dow = date.getFullYear()-6;
          data = {
            data: [],
            className: 'datepickerYears'
          }
          for ( var j = 0; j < 12; j++) {
            data.data.push(dow + j);
          }
          html = tmpl(tpl.months.join(''), data);
          date.setDate(1);
          data = {weeks:[]};
          month = date.getMonth();
          var dow = (date.getDay() - options.starts) % 7;
          date.addDays(-(dow + (dow < 0 ? 7 : 0)));
          week = -1;
          cnt = 0;
          
          while (cnt < 42) {
            indic = parseInt(cnt/7,10);
            indic2 = cnt%7;
            date.daylightSavingAdjust();
            if (!data.weeks[indic]) {
              week = date.getWeekNumber();
              data.weeks[indic] = {
                week: week,
                days: []
              };
            }
            data.weeks[indic].days[indic2] = {
              text: date.getDate(),
              classname: []
            };
            if (month != date.getMonth()) {
              data.weeks[indic].days[indic2] = { 
                text: '',
                classname: ['datepickerNotInMonth']
                };
            }
            if (indic2 == 0) {
              data.weeks[indic].days[indic2].classname.push('datepickerSunday');
            }
            if (indic2 == 6) {
              data.weeks[indic].days[indic2].classname.push('datepickerSaturday');
            }
            
            var fromUser = options.onRender(date);
            var val = date.valueOf();
                       
            if (fromUser.selected || options.date == val || $.inArray(val, options.date) > -1 || (options.mode == 'range' && val >= options.date[0] && val <= options.date[1])) {              
              
              data.weeks[indic].days[indic2].classname.push('datepickerSelected');                  
            }
            if (fromUser.disabled) {
              data.weeks[indic].days[indic2].classname.push('datepickerDisabled');
            }
            if (fromUser.className) {
              data.weeks[indic].days[indic2].classname.push(fromUser.className);
            }
            
            if(options.check_in != ''){
              if ((val > options.check_in.valueOf() && val < options.date && options.date != '') || (val == options.check_in.valueOf())) {
                if(data.weeks[indic].days[indic2].classname[0] != 'datepickerNotInMonth'){
                  data.weeks[indic].days[indic2].classname.push('datepickerCheckIn');
                } 
              }
            }  
             
            if(options.check_out != ''){                            
              if ((val < options.check_out.valueOf() && val > options.date && options.date != '') || (val == options.check_out.valueOf())) {                                        
                if(data.weeks[indic].days[indic2].classname[0] != 'datepickerNotInMonth'){
                  data.weeks[indic].days[indic2].classname.push('datepickerCheckIn');
                }                
              }
            }
            
            data.weeks[indic].days[indic2].classname = data.weeks[indic].days[indic2].classname.join(' ');
            cnt++;
            
            date.addDays(1);
          }
          html = tmpl(tpl.days.join(''), data) + html;
          tblCal.append(html);
        }
      },
      parseDate = function (date, format) {
        if (date.constructor == Date) {
          return new Date(date);
        }
        var parts = date.split(/\W+/);
        var against = format.split(/\W+/), d, m, y, h, min, now = new Date();
        for (var i = 0; i < parts.length; i++) {
          switch (against[i]) {
            case 'd':
            case 'e':
              d = parseInt(parts[i],10);
              break;
            case 'm':
              m = parseInt(parts[i], 10)-1;
              break;
            case 'Y':
            case 'y':
              y = parseInt(parts[i], 10);
              y += y > 100 ? 0 : (y < 29 ? 2000 : 1900);
              break;
            case 'H':
            case 'I':
            case 'k':
            case 'l':
              h = parseInt(parts[i], 10);
              break;
            case 'P':
            case 'p':
              if (/pm/i.test(parts[i]) && h < 12) {
                h += 12;
              } else if (/am/i.test(parts[i]) && h >= 12) {
                h -= 12;
              }
              break;
            case 'M':
              min = parseInt(parts[i], 10);
              break;
          }
        }
        return new Date(
          y === undefined ? now.getFullYear() : y,
          m === undefined ? now.getMonth() : m,
          d === undefined ? now.getDate() : d,
          h === undefined ? now.getHours() : h,
          min === undefined ? now.getMinutes() : min,
          0
        );
      },
      diferenceBetweenDates = function(el, date){      
        var options = $(el).data('datepicker');
        var nr_noites = 0;
        if(options.check_in.valueOf() > 0)
          nr_noites = (((date.getTime())-(options.check_in.getTime()))/(24*60*60*1000)).toFixed(0);
        else if(options.check_out.valueOf() > 0)
          nr_noites = (((options.check_out.getTime())-(date.getTime()))/(24*60*60*1000)).toFixed(0);
        
        if(nr_noites < 0)
          nr_noites = 0;
        
        if(nr_noites > 0){
          if(nr_noites == 1)
            $('.datepickerNights').html(nr_noites+' Noite');
          else
            $('.datepickerNights').html(nr_noites+' Noites');
        }else
          $('.datepickerNights').html('0 Noites');
        
        $('.datepickerNights').append('<input type="hidden" id="nr_noites_input" name="nr_noites_input" value="'+nr_noites+'" />');
      },
      formatDate = function(date, format) {
        var m = date.getMonth();
        var d = date.getDate();
        var y = date.getFullYear();
        var wn = date.getWeekNumber();
        var w = date.getDay();
        var s = {};
        var hr = date.getHours();
        var pm = (hr >= 12);
        var ir = (pm) ? (hr - 12) : hr;
        var dy = date.getDayOfYear();
        if (ir == 0) {
          ir = 12;
        }
        var min = date.getMinutes();
        var sec = date.getSeconds();
        var parts = format.split(''), part;
        for ( var i = 0; i < parts.length; i++ ) {
          part = parts[i];
          switch (parts[i]) {
            case 'a':
              part = date.getDayName();
              break;
            case 'A':
              part = date.getDayName(true);
              break;
            case 'b':
              part = date.getMonthName();
              break;
            case 'B':
              part = date.getMonthName(true);
              break;
            case 'C':
              part = 1 + Math.floor(y / 100);
              break;
            case 'd':
              part = (d < 10) ? ("0" + d) : d;
              break;
            case 'e':
              part = d;
              break;
            case 'H':
              part = (hr < 10) ? ("0" + hr) : hr;
              break;
            case 'I':
              part = (ir < 10) ? ("0" + ir) : ir;
              break;
            case 'j':
              part = (dy < 100) ? ((dy < 10) ? ("00" + dy) : ("0" + dy)) : dy;
              break;
            case 'k':
              part = hr;
              break;
            case 'l':
              part = ir;
              break;
            case 'm':
              part = (m < 9) ? ("0" + (1+m)) : (1+m);
              break;
            case 'M':
              part = (min < 10) ? ("0" + min) : min;
              break;
            case 'p':
            case 'P':
              part = pm ? "PM" : "AM";
              break;
            case 's':
              part = Math.floor(date.getTime() / 1000);
              break;
            case 'S':
              part = (sec < 10) ? ("0" + sec) : sec;
              break;
            case 'u':
              part = w + 1;
              break;
            case 'w':
              part = w;
              break;
            case 'y':
              part = ('' + y).substr(2, 2);
              break;
            case 'Y':
              part = y;
              break;
          }
          parts[i] = part;
        }
        return parts.join('');
      },
      extendDate = function(options) {
        if (Date.prototype.tempDate) {
          return;
        }
        Date.prototype.tempDate = null;
        Date.prototype.months = options.months;
        Date.prototype.monthsShort = options.monthsShort;
        Date.prototype.days = options.days;
        Date.prototype.daysShort = options.daysShort;
        Date.prototype.getMonthName = function(fullName) {
          return this[fullName ? 'months' : 'monthsShort'][this.getMonth()];
        };
        Date.prototype.getDayName = function(fullName) {
          return this[fullName ? 'days' : 'daysShort'][this.getDay()];
        };
        Date.prototype.addDays = function (n) {
          this.setDate(this.getDate() + n);
          this.tempDate = this.getDate();
        };
        Date.prototype.daylightSavingAdjust = function () {
          if(this.getHours() == 23){
            var aux = new Date(this);
            aux.setHours(0);
            aux.setDate(aux.getDate() + 1);
            if(this.getDate() == aux.getDate())
              this.setHours(this.getHours() + 2,0,0,0);
            else
              this.setHours(0,0,0,0);
          }else
            this.setHours(0,0,0,0);
          this.tempDate = this.getDate();
        };
        Date.prototype.addMonths = function (n) {
          if (this.tempDate == null) {
            this.tempDate = this.getDate();
          }
          this.setDate(1);
          this.setMonth(this.getMonth() + n);
          this.setDate(Math.min(this.tempDate, this.getMaxDays()));
        };
        Date.prototype.addYears = function (n) {
          if (this.tempDate == null) {
            this.tempDate = this.getDate();
          }
          this.setDate(1);
          this.setFullYear(this.getFullYear() + n);
          this.setDate(Math.min(this.tempDate, this.getMaxDays()));
        };
        Date.prototype.getMaxDays = function() {
          var tmpDate = new Date(Date.parse(this)),
            d = 28, m;
          m = tmpDate.getMonth();
          d = 28;
          while (tmpDate.getMonth() == m) {
            d ++;
            tmpDate.setDate(d);
          }
          return d - 1;
        };
        Date.prototype.getFirstDay = function() {
          var tmpDate = new Date(Date.parse(this));
          tmpDate.setDate(1);
          return tmpDate.getDay();
        };
        Date.prototype.getWeekNumber = function() {
          var tempDate = new Date(this);
          tempDate.setDate(tempDate.getDate() - (tempDate.getDay() + 6) % 7 + 3);
          var dms = tempDate.valueOf();
          tempDate.setMonth(0);
          tempDate.setDate(4);
          return Math.round((dms - tempDate.valueOf()) / (604800000)) + 1;
        };
        Date.prototype.getDayOfYear = function() {
          var now = new Date(this.getFullYear(), this.getMonth(), this.getDate(), 0, 0, 0);
          var then = new Date(this.getFullYear(), 0, 0, 0, 0, 0);
          var time = now - then;
          return Math.floor(time / 24*60*60*1000);
        };
      },
      layout = function (el) {
        var options = $(el).data('datepicker');
        var cal = $('#' + options.id);
        if (!options.extraHeight) {
          options.extraHeight = 0;
          options.extraWidth = 0;
        }
        var tbl = cal.find('table:first').get(0);
        var width = tbl.offsetWidth;
        var height = tbl.offsetHeight;
        cal.css({
          width: width + options.extraWidth + 'px',
          height: height + options.extraHeight + 'px'
        }).find('div.datepickerContainer').css({
          width: width + 'px',
          height: height + 'px'
        });
      },
      click = function(ev) {        
        if ($(ev.target).is('span')) {
          ev.target = ev.target.parentNode;
        }
        var el = $(ev.target);
        if (el.is('a')) {
          ev.target.blur();
          if (el.hasClass('datepickerDisabled') || el.hasClass('datepickerNotInMonth')) {
            return false;
          }
          var options = $(this).data('datepicker');
          var parentEl = el.parent();
          var tblEl = parentEl.parent().parent().parent();
          var tblIndex = $('table', this).index(tblEl.get(0)) - 1;
          options.current.daylightSavingAdjust();
          var tmp = new Date(options.current);
          var changed = false;
          var fillIt = false;
          if (parentEl.is('th')) {
            if (parentEl.hasClass('datepickerClose') ){
              $(this).hide();
            } else if (parentEl.hasClass('datepickerWeek') && options.mode == 'range' && !parentEl.next().hasClass('datepickerDisabled') && !parentEl.next().hasClass('datepickerNotInMonth')) {
              var val = parseInt(parentEl.next().text(), 10);
              tmp.addMonths(tblIndex - Math.floor(options.calendars/2));
              if (parentEl.next().hasClass('datepickerNotInMonth')) {
                tmp.addMonths(val > 15 ? -1 : 1);
              }
              tmp.setDate(val);              
              options.date[0] = (tmp.setHours(0,0,0,0)).valueOf();
              tmp.setHours(23,59,59,0);
              tmp.addDays(6);
              options.date[1] = tmp.valueOf();
              fillIt = true;
              changed = true;
              options.lastSel = false;
            } else if (parentEl.hasClass('datepickerMonth')) {
              tmp.addMonths(tblIndex - Math.floor(options.calendars/2));
              switch (tblEl.get(0).className) {
                case 'datepickerViewDays':
                  tblEl.get(0).className = 'datepickerViewMonths';
                  el.find('span').text(tmp.getFullYear());
                  break;
                case 'datepickerViewMonths':
                  tblEl.get(0).className = 'datepickerViewYears';
                  el.find('span').text((tmp.getFullYear()-6) + ' - ' + (tmp.getFullYear()+5));
                  break;
                case 'datepickerViewYears':
                  tblEl.get(0).className = 'datepickerViewDays';
                  el.find('span').text(formatDate(tmp, 'B, Y'));
                  break;
              }
            } else if (parentEl.parent().parent().is('thead')) {
              switch (tblEl.get(0).className) {
                case 'datepickerViewDays':
                  options.date_begin.addMonths(2);
                  options.date_end.addMonths(-1);
                  
                  if((options.current.valueOf() <= options.date_end.valueOf())&&
                     (parentEl.hasClass('datepickerGoNext')))
                    options.current.addMonths(1);

                  if((options.current.valueOf() >= options.date_begin.valueOf())&&
                     (parentEl.hasClass('datepickerGoPrev')))
                    options.current.addMonths(-1);
                  
                  options.date_begin.addMonths(-2);
                  options.date_end.addMonths(1);
                  break;
                case 'datepickerViewMonths':
                  options.current.addYears(parentEl.hasClass('datepickerGoPrev') ? -1 : 1);
                  break;
                case 'datepickerViewYears':
                  options.current.addYears(parentEl.hasClass('datepickerGoPrev') ? -12 : 12);
                  break;
              }
              fillIt = true;
            }
          } else if (parentEl.is('td') && !parentEl.hasClass('datepickerDisabled') && !parentEl.hasClass('datepickerNotInMonth')) {
            switch (tblEl.get(0).className) {
              case 'datepickerViewMonths':
                options.current.setMonth(tblEl.find('tbody.datepickerMonths td').index(parentEl));
                options.current.setFullYear(parseInt(tblEl.find('thead th.datepickerMonth span').text(), 10));
                options.current.addMonths(Math.floor(options.calendars/2) - tblIndex);
                tblEl.get(0).className = 'datepickerViewDays';
                break;
              case 'datepickerViewYears':
                options.current.setFullYear(parseInt(el.text(), 10));
                tblEl.get(0).className = 'datepickerViewMonths';
                break;
              default:
                var val = parseInt(el.text(), 10);
                tmp.addMonths(tblIndex - Math.floor(options.calendars/2));
                if (parentEl.hasClass('datepickerNotInMonth')) {
                  tmp.addMonths(val > 15 ? -1 : 1);
                }
                tmp.setDate(val);
                switch (options.mode) {
                  case 'multiple':
                    val = (tmp.setHours(0,0,0,0)).valueOf();
                    if ($.inArray(val, options.date) > -1) {
                      $.each(options.date, function(nr, dat){
                        if (dat == val) {
                          options.date.splice(nr,1);
                          return false;
                        }
                      });
                    } else {
                      options.date.push(val);
                    }
                    break;
                  case 'range':
                    if (!options.lastSel) {
                      options.date[0] = (tmp.setHours(0,0,0,0)).valueOf();
                    }
                    val = (tmp.setHours(23,59,59,0)).valueOf();
                    if (val < options.date[0]) {
                      options.date[1] = options.date[0] + 86399000;
                      options.date[0] = val - 86399000;
                    } else {
                      options.date[1] = val;
                    }
                    options.lastSel = !options.lastSel;
                    break;
                  default:
                    tmp.daylightSavingAdjust();
                    diferenceBetweenDates(this, tmp);     
                    options.date = tmp.valueOf();                                   
                    break;
                }
                break;
            }
            fillIt = true;
            changed = true;
          }
          if (fillIt) {                
            fill(this);
          }
          if (changed) {
            options.onChange.apply(this, prepareDate(options));
          }
        }
        return false;
      },
      prepareDate = function (options) {
        var tmp;
        if (options.mode == 'single') {
          tmp = new Date(options.date);
          return [formatDate(tmp, options.format), tmp, options.el];
        } else {
          tmp = [[],[], options.el];
          $.each(options.date, function(nr, val){
            var date = new Date(val);
            tmp[0].push(formatDate(date, options.format));
            tmp[1].push(date);
          });
          return tmp;
        }
      },
      getViewport = function () {
        var m = document.compatMode == 'CSS1Compat';
        return {
          l : window.pageXOffset || (m ? document.documentElement.scrollLeft : document.body.scrollLeft),
          t : window.pageYOffset || (m ? document.documentElement.scrollTop : document.body.scrollTop),
          w : window.innerWidth || (m ? document.documentElement.clientWidth : document.body.clientWidth),
          h : window.innerHeight || (m ? document.documentElement.clientHeight : document.body.clientHeight)
        };
      },
      isChildOf = function(parentEl, el, container) {
        if (parentEl == el) {
          return true;
        }
        if (parentEl.contains) {
          return parentEl.contains(el);
        }
        if ( parentEl.compareDocumentPosition ) {
          return !!(parentEl.compareDocumentPosition(el) & 16);
        }
        var prEl = el.parentNode;
        while(prEl && prEl != container) {
          if (prEl == parentEl)
            return true;
          prEl = prEl.parentNode;
        }
        return false;
      },
      show = function (ev) {
        var cal = $('#' + $(this).data('datepickerId'));
        if (!cal.is(':visible')) {
          var calEl = cal.get(0);
          fill(calEl);
          var options = cal.data('datepicker');
          options.onBeforeShow.apply(this, [cal.get(0)]);
          var pos = $(this).offset();
          var viewPort = getViewport();
          var top = pos.top;
          var left = pos.left;
          var oldDisplay = $.curCSS(calEl, 'display');
          cal.css({
            visibility: 'hidden',
            display: 'block'
          });
          layout(calEl);
          switch (options.position){
            case 'top':
              top -= calEl.offsetHeight;
              break;
            case 'left':
              left -= calEl.offsetWidth;
              break;
            case 'right':
              left += this.offsetWidth;
              break;
            case 'bottom':
              top += this.offsetHeight;
              break;
          }
          if (top + calEl.offsetHeight > viewPort.t + viewPort.h) {
            top = pos.top  - calEl.offsetHeight;
          }
          if (top < viewPort.t) {
            top = pos.top + this.offsetHeight + calEl.offsetHeight;
          }
          if (left + calEl.offsetWidth > viewPort.l + viewPort.w) {
            left = pos.left - calEl.offsetWidth;
          }
          if (left < viewPort.l) {
            left = pos.left + this.offsetWidth
          }
          cal.css({
            visibility: 'visible',
            display: 'block',
            top: top + 'px',
            left: left + 'px'
          });
          if (options.onShow.apply(this, [cal.get(0)]) != false) {
            cal.show();
          }
          $(document).bind('mousedown', {cal: cal, trigger: this}, hide);
        }
        return false;
      },
      hide = function (ev) {
        if (ev.target != ev.data.trigger && !isChildOf(ev.data.cal.get(0), ev.target, ev.data.cal.get(0))) {
          if (ev.data.cal.data('datepicker').onHide.apply(this, [ev.data.cal.get(0)]) != false) {
            ev.data.cal.hide();
          }
          $(document).unbind('mousedown', hide);
        }
      };
    return {
      init: function(options){
        options = $.extend({}, defaults, options||{});
        extendDate(options.locale);
        options.calendars = Math.max(1, parseInt(options.calendars,10)||1);
        options.mode = /single|multiple|range/.test(options.mode) ? options.mode : 'single';
        return this.each(function(){
          if (!$(this).data('datepicker')) {
            options.el = this;
            if (options.date.constructor == String) {
              options.date = parseDate(options.date, options.format);
              options.date.setHours(0,0,0,0);
            }
            if (options.mode != 'single') {
              if (options.date.constructor != Array) {
                options.date = [options.date.valueOf()];
                if (options.mode == 'range') {
                  options.date.push(((new Date(options.date[0])).setHours(23,59,59,0)).valueOf());
                }
              } else {
                for (var i = 0; i < options.date.length; i++) {
                  options.date[i] = (parseDate(options.date[i], options.format).setHours(0,0,0,0)).valueOf();
                }
                if (options.mode == 'range') {
                  options.date[1] = ((new Date(options.date[1])).setHours(23,59,59,0)).valueOf();
                }
              }
            } else {
              options.date.daylightSavingAdjust();
              options.date = options.date.valueOf();
            }

            if (!options.current) {
              options.current = new Date();
            } else {
              options.current = parseDate(options.current, options.format);
            }
            options.current.setDate(1);
            options.current.daylightSavingAdjust();
            
            if (!options.date_begin) {
              options.date_begin = new Date();
            } else {
              options.date_begin = parseDate(options.date_begin, options.format);
            }
            options.date_begin.setDate(1);
            options.date_begin.daylightSavingAdjust();
            
            if (!options.date_end) {
              options.date_end = new Date();
              options.date_end.setDate(options.date_end.getDate()+365);
            } else {
              options.date_end = parseDate(options.date_end, options.format);
            }
            options.date_end.setDate(1);
            options.date_end.daylightSavingAdjust();
            
            if (!options.check_in) {
              options.check_in = '';
            } else {
              options.check_in = parseDate(options.check_in, options.format);
              options.check_in.daylightSavingAdjust();
            }

            if (!options.check_out) {
              options.check_out = '';
            } else {
              options.check_out = parseDate(options.check_out, options.format);
              options.check_out.daylightSavingAdjust();
            } 

            var id = 'datepicker_' + parseInt(Math.random() * 1000), cnt;
            options.id = id;
            $(this).data('datepickerId', options.id);
            var cal = $(tpl.wrapper).attr('id', id).bind('click', click).data('datepicker', options);
            if (options.className) {
              cal.addClass(options.className);
            }
            var html = '';
            for (var i = 0; i < options.calendars; i++) {
              cnt = options.starts;
              if (i > 0) {
                html += tpl.space;
              }
              if (i == (options.calendars-1))
                html_next = '<th class="datepickerGoNext"><a href="#"><span class="ui-icon ui-icon-circle-triangle-e">'+options.next+'</span></a></th>';
              else
                html_next = '<th></th>';
              
              if (i == 0)
                html_prev = '<th class="datepickerGoPrev"><a href="#"><span class="ui-icon ui-icon-circle-triangle-w">'+options.prev+'</span></a></th>';
              else
                html_prev = '<th></th>';
              
              html += tmpl(tpl.head.join(''), {
                  week: options.locale.weekMin,
                  prev: html_prev,
                  next: html_next,
                  day1: options.locale.daysShort[(cnt++)%7],
                  day2: options.locale.daysShort[(cnt++)%7],
                  day3: options.locale.daysShort[(cnt++)%7],
                  day4: options.locale.daysShort[(cnt++)%7],
                  day5: options.locale.daysShort[(cnt++)%7],
                  day6: options.locale.daysShort[(cnt++)%7],
                  day7: options.locale.daysShort[(cnt++)%7]
                });
            }
            cal
              .find('tr:first').append(html)
                .find('table').addClass(views[options.view]);
            fill(cal.get(0));
            if (options.flat) {
              cal.appendTo(this).show().css('position', 'relative');
              layout(cal.get(0));
            } else {
              cal.appendTo(document.body);
              $(this).bind(options.eventName, show);
            }
          }
        });
      },
      showPicker: function() {
        return this.each( function () {
          if ($(this).data('datepickerId')) {
            show.apply(this);
          }
        });
      },
      hidePicker: function() {
        return this.each( function () {
          if ($(this).data('datepickerId')) {
            $('#' + $(this).data('datepickerId')).hide();
          }
        });
      },
      setDate: function(date, shiftTo){
        return this.each(function(){
          if ($(this).data('datepickerId')) {
            var cal = $('#' + $(this).data('datepickerId'));
            var options = cal.data('datepicker');
            
            if(date != ''){
              options.date = date;
              if (options.date.constructor == String) {
                options.date = parseDate(options.date, options.format);
                options.date.setHours(0,0,0,0);
              }
              if (options.mode != 'single') {
                if (options.date.constructor != Array) {
                  options.date = [options.date.valueOf()];
                  if (options.mode == 'range') {
                    options.date.push(((new Date(options.date[0])).setHours(23,59,59,0)).valueOf());
                  }
                } else {
                  for (var i = 0; i < options.date.length; i++) {
                    options.date[i] = (parseDate(options.date[i], options.format).setHours(0,0,0,0)).valueOf();
                  }
                  if (options.mode == 'range') {
                    options.date[1] = ((new Date(options.date[1])).setHours(23,59,59,0)).valueOf();
                  }
                }
              } else {
                options.date.daylightSavingAdjust();
                options.date = options.date.valueOf();
              }
              fill(cal.get(0));
            }
            if (shiftTo) {
                options.current = new Date (options.mode != 'single' ? options.date[0] : options.date);
                options.current.addMonths(1);
              }
          }
        });
      },
      setCheckIn: function(check_in_date, shiftTo){               
        return this.each(function(){
          if ($(this).data('datepickerId')) {
            var cal = $('#' + $(this).data('datepickerId'));
            var options = cal.data('datepicker');
            if(check_in_date){
              options.check_in = check_in_date;
              options.check_in = parseDate(options.check_in, options.format);
              options.check_in.setHours(0,0,0,0);
              options.check_in.daylightSavingAdjust();
              if($("#checkin_weekday").length > 0)
                $("#checkin_weekday").html(weekday[options.check_in.getDay()]);						

            }
            else
            {
              options.check_in = [];
              $("#checkin_weekday").html("");
						}
            if (shiftTo) {              
              options.current = parseDate(shiftTo, options.format);
              options.current.setHours(0,0,0,0);
              options.current.addMonths(1);
            }  
          }          
        });
      },
      setCheckOut: function(check_out_date, shiftTo){         
        return this.each(function(){          
          if ($(this).data('datepickerId')) {            
            var cal = $('#' + $(this).data('datepickerId'));
            var options = cal.data('datepicker');
            if(check_out_date){              
              options.check_out = check_out_date;
              options.check_out = parseDate(options.check_out, options.format);
              options.check_out.setHours(0,0,0,0);
              options.check_out.daylightSavingAdjust();
              if($("#checkout_weekday").length > 0)
                $("#checkout_weekday").html(weekday[options.check_out.getDay()]);
                
            }else
            {       
              if(options.setInFuture){      
                DatePicker.oneDayFuture(options, cal);              
              }else{
                options.check_out = [];
                $("#checkout_weekday").html("");
              }              
						}
            
            if (shiftTo) {                       
              options.current = parseDate(shiftTo, options.format);              
              options.current.setHours(0,0,0,0);
              options.current.addMonths(1);
            }                      
          }
        });
      },
      oneDayFuture: function(options, cal){                         
        if($('#'+options.input_in_id).val().length > 0){
          var dataCheckin = parseDate($('#'+options.input_in_id).val(), options.format);
          var dateOneDayFuture = new Date(parseInt(dataCheckin.setDate(dataCheckin.getDate() + 1)) );                
          var oneDayFuture = ((dateOneDayFuture.getDate() * 1) < 10) ? "0"+dateOneDayFuture.getDate() : dateOneDayFuture.getDate();
          
          oneDayFuture += "/";
          oneDayFuture += (((dateOneDayFuture.getMonth() * 1) + 1) < 10) ? "0"+((dateOneDayFuture.getMonth() * 1) + 1) : ((dateOneDayFuture.getMonth() * 1) + 1);  
          oneDayFuture += "/";
          oneDayFuture += dateOneDayFuture.getFullYear();   
          
          date_out_reloadFuture(oneDayFuture, options.input_out_id, options.input_in_id, false);          
          $('#'+options.input_out_id).DatePickerSetDate(oneDayFuture, true);          
          diferenceDates($('#'+options.input_in_id).val(), oneDayFuture);               
          
        } else {
          var dataCheckout = parseDate($('#'+options.input_out_id).val(), options.format);
          var dateOneDayPast = new Date(parseInt(dataCheckout.setDate(dataCheckout.getDate() - 1)) );                
          var oneDayPast = ((dateOneDayPast.getDate() * 1) < 10) ? "0"+dateOneDayPast.getDate() : dateOneDayPast.getDate();
                  
          oneDayPast += "/";
          oneDayPast += (((dateOneDayPast.getMonth() * 1) + 1) < 10) ? "0"+((dateOneDayPast.getMonth() * 1) + 1) : ((dateOneDayPast.getMonth() * 1) + 1);  
          oneDayPast += "/";
          oneDayPast += dateOneDayPast.getFullYear();            
          
          date_in_reload(oneDayPast, options.input_in_id, options.input_out_id, true);
          $('#'+options.input_in_id).DatePickerSetDate(oneDayPast, true);                                  
          diferenceDates(oneDayPast, $('#'+options.input_out_id).val());
        }         
      },
      getDate: function(formated) {
        if (this.size() > 0) {
          return prepareDate($('#' + $(this).data('datepickerId')).data('datepicker'))[formated ? 0 : 1];
        }
      },
      clear: function(){
        return this.each(function(){
          if ($(this).data('datepickerId')) {
            var cal = $('#' + $(this).data('datepickerId'));
            var options = cal.data('datepicker');
            
            options.date = [];
            fill(cal.get(0));           
            
          }
        });
      },
      clearCheckout: function(){
        return this.each(function(){
          if ($(this).data('datepickerId')) {
            var cal = $('#' + $(this).data('datepickerId'));
            var options = cal.data('datepicker');
            
            options.check_out = [];
            fill(cal.get(0));          
            
          }
        });
      },
      fixLayout: function(){
        return this.each(function(){
          if ($(this).data('datepickerId')) {
            var cal = $('#' + $(this).data('datepickerId'));
            var options = cal.data('datepicker');
            if (options.flat) {
              layout(cal.get(0));
            }
          }
        });
      }
    };
  }();
  $.fn.extend({
    DatePicker: DatePicker.init,
    DatePickerHide: DatePicker.hidePicker,
    DatePickerShow: DatePicker.showPicker,
    DatePickerSetDate: DatePicker.setDate,
    DatePickerSetCheckIn: DatePicker.setCheckIn,
    DatePickerSetCheckOut: DatePicker.setCheckOut,
    DatePickerGetDate: DatePicker.getDate,
    DatePickerClear: DatePicker.clear,
    DatePickerClearCheckout: DatePicker.clearCheckout,
    DatePickerLayout: DatePicker.fixLayout
  });
})(jQuery);

(function(){
  var cache = {};
 
  this.tmpl = function tmpl(str, data){
    // Figure out if we're getting a template, or if we need to
    // load the template - and be sure to cache the result.
    var fn = !/\W/.test(str) ?
      cache[str] = cache[str] ||
        tmpl(document.getElementById(str).innerHTML) :
     
      // Generate a reusable function that will serve as a template
      // generator (and which will be cached).
      new Function("obj",
        "var p=[],print=function(){p.push.apply(p,arguments);};" +
       
        // Introduce the data as local variables using with(){}
        "with(obj){p.push('" +
       
        // Convert the template into pure JavaScript
        str
          .replace(/[\r\t\n]/g, " ")
          .split("<%").join("\t")
          .replace(/((^|%>)[^\t]*)'/g, "$1\r")
          .replace(/\t=(.*?)%>/g, "',$1,'")
          .split("\t").join("');")
          .split("%>").join("p.push('")
          .split("\r").join("\\'")
      + "');}return p.join('');");
   
    // Provide some basic currying to the user
    return data ? fn( data ) : fn;
  };
})();

var $j = jQuery.noConflict();

function daylightSavingAdjust(date) {
  if(date.getHours() == 23){
    var aux = new Date(date);
    aux.setHours(0,0,0,0);
    aux.setDate(aux.getDate() + 1);
    if(date.getDate() == aux.getDate())
      date.setHours(date.getHours() + 2,0,0,0);
    else
      date.setHours(0,0,0,0);
  }else
    date.setHours(0,0,0,0);
  return date;
};

function diferenceBetweenDates(date_in , date_out){  
  var nr_noites = 0;
  if(date_in != "" && date_out != ""){
    var aux_in = date_in.split('/');
    var aux_out = date_out.split('/');
    var date_in = new Date(aux_in[1]+'/'+aux_in[0]+'/'+aux_in[2]);
    var date_out = new Date(aux_out[1]+'/'+aux_out[0]+'/'+aux_out[2]);
    
    nr_noites = (((date_out.getTime())-(date_in.getTime()))/(24*60*60*1000)).toFixed(0);
  }
  
  if(nr_noites < 0)
    nr_noites = 0;
  
  if(nr_noites > 0){
    if(nr_noites == 1)
      jQuery('.datepickerNights').html(nr_noites+' Noite');
    else
      jQuery('.datepickerNights').html(nr_noites+' Noites');
  }else
    jQuery('.datepickerNights').html('0 Noites');
  
  jQuery('.datepickerNights').append('<input type="hidden" id="nr_noites_input" name="nr_noites_input" value="'+nr_noites+'" />');
  
  jQuery('#nr_noites').html(jQuery('#nr_noites_input').val());
}

function diferenceDates(date_in , date_out){  
  var nr_noites = 0;
  if(date_in != "" && date_out != ""){
    var aux_in = date_in.split('/');
    var aux_out = date_out.split('/');
    var date_in = new Date(aux_in[1]+'/'+aux_in[0]+'/'+aux_in[2]);
    var date_out = new Date(aux_out[1]+'/'+aux_out[0]+'/'+aux_out[2]);
    
    nr_noites = (((date_out.getTime())-(date_in.getTime()))/(24*60*60*1000)).toFixed(0);
  }
  
  if(nr_noites < 0)
    nr_noites = 0;
  
  if(nr_noites > 0){
    if(nr_noites == 1)
      jQuery('.datepickerNights').html(nr_noites+' Noite');
    else
      jQuery('.datepickerNights').html(nr_noites+' Noites');
  }else
    jQuery('.datepickerNights').html('0 Noites');
  
  jQuery('.datepickerNights').append('<input type="hidden" id="nr_noites_input" name="nr_noites_input" value="'+nr_noites+'" />');
  
  jQuery('#nr_noites').html(jQuery('#nr_noites_input').val());
  
  return nr_noites;
}

/**
 * Função que interage com o calendário de check in
 * define as datas na combo box de check in
 * @param object calendar
 *  Objeto do calendário com as suas informações
 */
function date_out_reload(calendar, check_out, check_in, same_dates)
{ 
  jQuery('#'+check_out).val(calendar);
  
  var date_in = jQuery('#'+check_in).DatePickerGetDate();
  
  if(!isNaN(date_in.valueOf())){
    var d_in = jQuery('#'+check_in).DatePickerGetDate();
    var d_out = jQuery('#'+check_out).DatePickerGetDate();
    if((d_in.valueOf() >= d_out.valueOf() && !same_dates) || (d_in.valueOf() > d_out.valueOf() && same_dates)){      
      jQuery('#'+check_in).val('');      
      jQuery('#'+check_in).DatePickerClear();       
      jQuery('#'+check_out).DatePickerSetDate(calendar, true);
      jQuery('#'+check_out).DatePickerHide();
      jQuery('#'+check_out).DatePickerSetCheckIn('', calendar);
      jQuery('#'+check_in).DatePickerSetCheckOut('', calendar);
    }
  }else{
    jQuery('#'+check_in).val('');
    jQuery('#'+check_in).DatePickerClear();
    jQuery('#'+check_out).DatePickerSetDate(calendar, true);
    jQuery('#'+check_out).DatePickerHide();
    jQuery('#'+check_out).DatePickerSetCheckIn('', calendar);
    jQuery('#'+check_in).DatePickerSetCheckOut('', calendar);
  }
  jQuery('#'+check_out).DatePickerHide();//Linha adicionada para sempre fechar o datepicker
  jQuery('#'+check_in).DatePickerSetCheckOut(calendar);
  jQuery('#nr_noites').html(jQuery('#nr_noites_input').val());
}

function date_out_reloadFuture(calendar, check_out, check_in, same_dates)
{
  jQuery('#'+check_out).val(calendar);
  
  var date_in = jQuery('#'+check_in).DatePickerGetDate();
   
  if(!isNaN(date_in.valueOf())){    
    var d_in = jQuery('#'+check_in).DatePickerGetDate();
    var d_out = jQuery('#'+check_out).DatePickerGetDate();
    if((d_in.valueOf() >= d_out.valueOf() && !same_dates) || (d_in.valueOf() > d_out.valueOf() && same_dates)){
      jQuery('#'+check_in).val('');
      jQuery('#'+check_out).DatePickerSetDate(calendar, true);
      jQuery('#'+check_out).DatePickerHide();
      jQuery('#'+check_out).DatePickerSetCheckIn('', calendar);
      jQuery('#'+check_in).DatePickerSetCheckOut('', calendar);
    }
  }else{
    jQuery('#'+check_in).val('');
    jQuery('#'+check_in).DatePickerClear();
    jQuery('#'+check_out).DatePickerSetDate(calendar, true);
    jQuery('#'+check_out).DatePickerHide();
    jQuery('#'+check_out).DatePickerSetCheckIn('', calendar);
    jQuery('#'+check_in).DatePickerSetCheckOut('', calendar);
  }
  jQuery('#'+check_out).DatePickerHide();//Linha adicionada para sempre fechar o datepicker
  jQuery('#'+check_in).DatePickerSetCheckOut(calendar);
  jQuery('#nr_noites').html(jQuery('#nr_noites_input').val());  
}

function clearCheckout(check_out, check_in){    
    jQuery('#'+check_out).DatePickerClear(); 
    jQuery('#'+check_in).DatePickerClearCheckout();   
    jQuery('#'+check_out).val('');
    jQuery("#checkout_weekday").html('');  
    jQuery('.datepickerNights').html('');    
}

function date_in_reload(calendar, check_in, check_out, same_dates)
{  
  jQuery('#'+check_in).val(calendar);  
    
  var date_out = jQuery('#'+check_out).DatePickerGetDate();
  if(!isNaN(date_out.valueOf())){
    
    var d_in = jQuery('#'+check_in).DatePickerGetDate();
    var d_out = jQuery('#'+check_out).DatePickerGetDate();
    
    if((d_in.valueOf() >= d_out.valueOf() && !same_dates) || (d_in.valueOf() > d_out.valueOf() && same_dates)){      
      jQuery('#'+check_out).val('');
      jQuery('#'+check_out).DatePickerClear();
      jQuery('#'+check_in).DatePickerSetDate(calendar, true);
      jQuery('#'+check_in).DatePickerHide();
      jQuery('#'+check_out).DatePickerSetCheckIn('', calendar);
      jQuery('#'+check_in).DatePickerSetCheckOut('', calendar);
    }
  }else{
    jQuery('#'+check_out).val('');
    jQuery('#'+check_out).DatePickerClear();
    jQuery('#'+check_in).DatePickerSetDate(calendar, true);
    jQuery('#'+check_in).DatePickerHide();
    jQuery('#'+check_out).DatePickerSetCheckIn('', calendar);
    jQuery('#'+check_in).DatePickerSetCheckOut('', calendar);
  }
  jQuery('#'+check_in).DatePickerHide();//Linha adicionada para sempre fechar o datepicker
  jQuery('#'+check_out).DatePickerSetCheckIn(calendar);
  jQuery('#nr_noites').html(jQuery('#nr_noites_input').val());
}

/*
	Masked Input plugin for jQuery
	Copyright (c) 2007-2011 Josh Bush (digitalbush.com)
	Licensed under the MIT license (http://digitalbush.com/projects/masked-input-plugin/#license) 
	Version: 1.3
*/
(function($) {
	var pasteEventName = ($.browser.msie ? 'paste' : 'input') + ".mask";
	var iPhone = (window.orientation != undefined);

	$.mask = {
		//Predefined character definitions
		definitions: {
			'9': "[0-9]",
			'a': "[A-Za-z]",
			'*': "[A-Za-z0-9]"
		},
		dataName:"rawMaskFn"
	};

	$.fn.extend({
		//Helper Function for Caret positioning
		caret: function(begin, end) {
			if (this.length == 0) return;
			if (typeof begin == 'number') {
				end = (typeof end == 'number') ? end : begin;
				return this.each(function() {
					if (this.setSelectionRange) {
						this.setSelectionRange(begin, end);
					} else if (this.createTextRange) {
						var range = this.createTextRange();
						range.collapse(true);
						range.moveEnd('character', end);
						range.moveStart('character', begin);
						range.select();
					}
				});
			} else {
				if (this[0].setSelectionRange) {
					begin = this[0].selectionStart;
					end = this[0].selectionEnd;
				} else if (document.selection && document.selection.createRange) {
					var range = document.selection.createRange();
					begin = 0 - range.duplicate().moveStart('character', -100000);
					end = begin + range.text.length;
				}
				return { begin: begin, end: end };
			}
		},
		unmask: function() { return this.trigger("unmask"); },
		mask: function(mask, settings) {
			if (!mask && this.length > 0) {
				var input = $(this[0]);
				return input.data($.mask.dataName)();
			}
			settings = $.extend({
				placeholder: "_",
				completed: null
			}, settings);

			var defs = $.mask.definitions;
			var tests = [];
			var partialPosition = mask.length;
			var firstNonMaskPos = null;
			var len = mask.length;

			$.each(mask.split(""), function(i, c) {
				if (c == '?') {
					len--;
					partialPosition = i;
				} else if (defs[c]) {
					tests.push(new RegExp(defs[c]));
					if(firstNonMaskPos==null)
						firstNonMaskPos =  tests.length - 1;
				} else {
					tests.push(null);
				}
			});

			return this.trigger("unmask").each(function() {
				var input = $(this);
				var buffer = $.map(mask.split(""), function(c, i) { if (c != '?') return defs[c] ? settings.placeholder : c });
				var focusText = input.val();

				function seekNext(pos) {
					while (++pos <= len && !tests[pos]);
					return pos;
				};
				function seekPrev(pos) {
					while (--pos >= 0 && !tests[pos]);
					return pos;
				};

				function shiftL(begin,end) {
					if(begin<0)
					   return;
					for (var i = begin,j = seekNext(end); i < len; i++) {
						if (tests[i]) {
							if (j < len && tests[i].test(buffer[j])) {
								buffer[i] = buffer[j];
								buffer[j] = settings.placeholder;
							} else
								break;
							j = seekNext(j);
						}
					}
					writeBuffer();
					input.caret(Math.max(firstNonMaskPos, begin));
				};

				function shiftR(pos) {
					for (var i = pos, c = settings.placeholder; i < len; i++) {
						if (tests[i]) {
							var j = seekNext(i);
							var t = buffer[i];
							buffer[i] = c;
							if (j < len && tests[j].test(t))
								c = t;
							else
								break;
						}
					}
				};

				function keydownEvent(e) {
					var k=e.which;

					//backspace, delete, and escape get special treatment
					if(k == 8 || k == 46 || (iPhone && k == 127)){
						var pos = input.caret(),
							begin = pos.begin,
							end = pos.end;
						
						if(end-begin==0){
							begin=k!=46?seekPrev(begin):(end=seekNext(begin-1));
							end=k==46?seekNext(end):end;
						}
						clearBuffer(begin, end);
						shiftL(begin,end-1);

						return false;
					} else if (k == 27) {//escape
						input.val(focusText);
						input.caret(0, checkVal());
						return false;
					}
				};

				function keypressEvent(e) {
					var k = e.which,
						pos = input.caret();
					if (e.ctrlKey || e.altKey || e.metaKey || k<32) {//Ignore
						return true;
					} else if (k) {
						if(pos.end-pos.begin!=0){
							clearBuffer(pos.begin, pos.end);
							shiftL(pos.begin, pos.end-1);
						}

						var p = seekNext(pos.begin - 1);
						if (p < len) {
							var c = String.fromCharCode(k);
							if (tests[p].test(c)) {
								shiftR(p);
								buffer[p] = c;
								writeBuffer();
								var next = seekNext(p);
								input.caret(next);
								if (settings.completed && next >= len)
									settings.completed.call(input);
							}
						}
						return false;
					}
				};

				function clearBuffer(start, end) {
					for (var i = start; i < end && i < len; i++) {
						if (tests[i])
							buffer[i] = settings.placeholder;
					}
				};

				function writeBuffer() { return input.val(buffer.join('')).val(); };

				function checkVal(allow) {
					//try to place characters where they belong
					var test = input.val();
					var lastMatch = -1;
					for (var i = 0, pos = 0; i < len; i++) {
						if (tests[i]) {
							buffer[i] = settings.placeholder;
							while (pos++ < test.length) {
								var c = test.charAt(pos - 1);
								if (tests[i].test(c)) {
									buffer[i] = c;
									lastMatch = i;
									break;
								}
							}
							if (pos > test.length)
								break;
						} else if (buffer[i] == test.charAt(pos) && i!=partialPosition) {
							pos++;
							lastMatch = i;
						}
					}
					if (!allow && lastMatch + 1 < partialPosition) {
						input.val("");
						clearBuffer(0, len);
					} else if (allow || lastMatch + 1 >= partialPosition) {
						writeBuffer();
						if (!allow) input.val(input.val().substring(0, lastMatch + 1));
					}
					return (partialPosition ? i : firstNonMaskPos);
				};

				input.data($.mask.dataName,function(){
					return $.map(buffer, function(c, i) {
						return tests[i]&&c!=settings.placeholder ? c : null;
					}).join('');
				})

				if (!input.attr("readonly"))
					input
					.one("unmask", function() {
						input
							.unbind(".mask")
							.removeData($.mask.dataName);
					})
					.bind("focus.mask", function() {
						focusText = input.val();
						var pos = checkVal();
						writeBuffer();
						var moveCaret=function(){
							if (pos == mask.length)
								input.caret(0, pos);
							else
								input.caret(pos);
						};
						($.browser.msie ? moveCaret:function(){setTimeout(moveCaret,0)})();
					})
					.bind("blur.mask", function() {
						checkVal();
						if (input.val() != focusText)
							input.change();
					})
					.bind("keydown.mask", keydownEvent)
					.bind("keypress.mask", keypressEvent)
					.bind(pasteEventName, function() {
						setTimeout(function() { input.caret(checkVal(true)); }, 0);
					});

				checkVal(); //Perform initial check for existing values
			});
		}
	});
})(jQuery);

