﻿var calendarLocalization = new Array();

calendarLocalization['Croatian'] = {
    days: ['Nedjelja', 'Ponedjeljak', 'Utorak', 'Srijeda', 'Četvrtak', 'Petak', 'Subota'],
    daysShort: ['Ned', 'Pon', 'Uto', 'Sri', 'Čet', 'Pet', 'Sub'],
    daysMin: ['Ne', 'Po', 'Ut', 'Sr', 'Če', 'Pe', 'Su'],
    months: ['Siječanj', 'Veljača', 'Ožujak', 'Travanj', 'Svibanj', 'Lipanj', 'Srpanj', 'Kolovoz', 'Rujan', 'Listopad', 'Studeni', 'Prosinac'],
    monthsShort: ['Sij', 'Velj', 'Ožu', 'Tra', 'Svi', 'Lip', 'Srp', 'Kol', 'Ruj', 'Lis', 'Stu', 'Pro'],
    weekMin: 'tj'
}

calendarLocalization['English'] = {
    days: ['Sundy', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'],
    daysShort: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'],
    daysMin: ['Su', 'Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa'],
    months: ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'],
    monthsShort: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'],
    weekMin: 'wk'
}

calendarLocalization['Italian'] = {
    days: ['Domenica', 'Luned&#236', 'Marted&#236', 'Mercoled&#236', 'Gioved&#236', 'Venerd&#236', 'Sabato'],
    daysShort: ['Dom', 'Lun', 'Mar', 'Mer', 'Gio', 'Ven', 'Sab'],
    daysMin: ['Do', 'Lu', 'Ma', 'Me', 'Gio', 'Ve', 'Sa'],
    months: ['Gennaio', 'Febbraio', 'Marzo', 'Aprile', 'Maggio', 'Giugno', 'Luglio', 'Agosto', 'Settembre', 'Ottobre', 'Novembre', 'Dicembre'],
    monthsShort: ['Gen', 'Feb', 'Mar', 'Apr', 'Mag', 'Giu', 'Lug', 'Ago', 'Set', 'Ott', 'Nov', 'Dic'],
    weekMin: 'sm'
}

calendarLocalization['German'] = {
    days: ['Sonntag', 'Montag', 'Dienstag', 'Mittwoch', 'Donnerstag', 'Freitag', 'Samstag'],
    daysShort: ['So', 'Mo', 'Di', 'Mi', 'Do', 'Fr', 'Sa'],
    daysMin: ['So', 'Mo', 'Di', 'Mi', 'Do', 'Fr', 'Sa'],
    months: ['Januar', 'Februar', 'März', 'April', 'Mai', 'Juni', 'Juli', 'August', 'September', 'Oktober', 'November', 'Dezember'],
    monthsShort: ['Jan', 'Feb', 'Mär', 'Apr', 'Mai', 'Jun', 'Jul', 'Aug', 'Sep', 'Okt', 'Nov', 'Dez'],
    weekMin: 'wo'
}

function CompareDates(firstDate, secondDate) {

    if (firstDate.getDate() == secondDate.getDate() && firstDate.getMonth() == secondDate.getMonth() && firstDate.getFullYear() == secondDate.getFullYear()) {
        return 0;
    }
    if (firstDate > secondDate) {
        return 1;
    }
    return -1;
}

function IsSaturdayToSaturdayInterval(dateFrom, dateTo) {
    return (dateFrom.getDay() == 6 && dateTo.getDay() == 6 && (dateTo - dateFrom) > 0)
}

function ShowBookingMessage(message) {
    jQuery("#bookingMessage").html("<ul><li>" + message + "</li></ul>");
}

function ShowBookingMessages(messages) {
    var html = "<ul>";
    for (var i = 0; i < messages.length; i++) {
        html = html + "<li>" + messages[i] + "</li>";
    }
    html = html + "</ul>";
    jQuery("#bookingMessage").html(html);
}

function GetBookingMessagesForDialog(messages) {
    var html = "";
    for (var i = 0; i < messages.length; i++) {
        html = html + messages[i] + "<br/><br/>";
    }
    return html;
}

function Initialize(statusFree) {
    jQuery("td.selected").removeClass("selected").addClass("available").attr("title", statusFree);
    jQuery("#bookingMessage").html("");
}

function ConvertDateToString(date) {
    return (date.getFullYear().toString() + '-' + (date.getMonth() + 1).toString().padLeft(2, '0') + '-' + date.getDate().toString().padLeft(2, '0'));
}

function ClearDatePicker(counter) {
    jQuery("#txtBookingPeriod" + counter.toString()).val("");
}

function UpdateCalendar(counter) {
    Initialize(statusFree);

    var dates = jQuery("#txtBookingPeriod" + counter.toString()).DatePickerGetDate(false);
    var dateFrom = dates[0];
    var dateTo = dates[1];

    if (CompareDates(dateFrom, dateTo) >= 0) {
        ClearDatePicker(counter);
        return;
    }
    jQuery(".datepicker").hide();

    if (isSaturdayBookingSupported && !IsSaturdayToSaturdayInterval(dateFrom, dateTo)) {
        ShowBookingMessage(saturdayBookingErrorMessage);
        ClearDatePicker(counter);
        return;
    }


    var selectedDates = new Array();
    var dateFromCopy = new Date(dateFrom.getFullYear(), dateFrom.getMonth(), dateFrom.getDate());
    while (true) {
        var currentDate = new Date(dateFromCopy.getFullYear(), dateFromCopy.getMonth(), dateFromCopy.getDate());
        selectedDates.push(currentDate);
        if (CompareDates(currentDate, dateTo) == 0) {
            break;
        }
        dateFromCopy.setDate(dateFromCopy.getDate() + 1);
    }

    var intersectionArray = usedDates.intersect(selectedDates);
    var intersectionArrayLength = intersectionArray.length;
    if (intersectionArrayLength > 0) {
        var needToShowNotPossibleReservationMessage = false;
        var firstDay = intersectionArray[0];
        var lastDay = intersectionArray[intersectionArrayLength - 1];
        if (intersectionArrayLength > 2) {
            needToShowNotPossibleReservationMessage = true;
        }
        else if (intersectionArrayLength == 2) {
            if (!(CompareDates(firstDay, dateFrom) == 0 && CompareDates(lastDay, dateTo) == 0)) {
                needToShowNotPossibleReservationMessage = true;
            }
        }
        else if (intersectionArrayLength == 1) {
            if (!(CompareDates(firstDay, dateFrom) == 0 || CompareDates(lastDay, dateTo) == 0)) {
                needToShowNotPossibleReservationMessage = true;
            }
        }

        if (needToShowNotPossibleReservationMessage) {
            ShowBookingMessage(reservationNotPossibleMessage);
            ClearDatePicker(counter);
            return;
        }
    }

    for (var i = 0; i < selectedDates.length; i++) {
        var date = selectedDates[i];
        var dateAsString = ConvertDateToString(date);
        if (i == 0) {
            jQuery("td.available.right:contains('" + dateAsString + "')").removeClass("available").addClass("selected").attr("title", statusSelected);
        }
        else if (i == selectedDates.length - 1) {
            jQuery("td.available.left:contains('" + dateAsString + "')").removeClass("available").addClass("selected").attr("title", statusSelected);
        }
        else {
            jQuery("td.available:contains('" + dateAsString + "')").removeClass("available").addClass("selected").attr("title", statusSelected);
        }
    }
}
function SendAccomodationUnitQuery(idAccomodationUnit, counter) {
    var dates = jQuery("#txtBookingPeriod" + counter.toString()).DatePickerGetDate(false);
    var dateFrom = dates[0];
    var dateTo = dates[1];
    var additionalNotes = jQuery("#txtAdditionalNotes" + counter.toString()).val();
    var numberOfPersons = jQuery("#txtNumberOfPersons" + counter.toString()).val();
    var numberOfChildrenUnder2Years = jQuery("#txtNumberOfChildren" + counter.toString()).val();
    //var numberOfChildrenUnder4Years = jQuery("#txtNumberOfChildrenUnder4Years").val();
    //var guestList = jQuery("#txtGuestList").val();
    jQuery.blockUI({ message: "<br/><h3>" + pleaseWaitMessage + "</h3><br/><img src='" + pathToAjaxLoadingImage + "' /><br/><br/>" });
    FrontEndServices.SendAccomodationUnitQuery(idAccomodationUnit, ConvertDateToString(dateFrom), ConvertDateToString(dateTo), numberOfPersons, numberOfChildrenUnder2Years, numberOfChildrenUnder4Years, additionalNotes, guestList, OnSendQuery);
}



Array.prototype.intersect =

  function() {
      //try {
      if (!arguments.length)
          return [];
      var a1 = this;
      var a = a2 = null;
      var n = 0;
      while (n < arguments.length) {
          a = [];
          a2 = arguments[n];
          var l = 12;   //a1.length;
          var l2 = a2.length;
          for (var i = 0; i < l; i++) {
              for (var j = 0; j < l2; j++) {
                  if (CompareDates(a1[i], a2[j]) == 0)
                      a.push(a1[i]);
              }
          }
          a1 = a;
          n++;
      }
      return a;
      // } catch (ex) { alert(ex); }
  };

//  Array.prototype.unique =
//  function() {
//      var a = [];
//      var l = this.length;
//      for (var i = 0; i < l; i++) {
//          for (var j = i + 1; j < l; j++) {
//              // If this[i] is found later in the array
//              if (this[i] === this[j])
//                  j = ++i;
//          }
//          a.push(this[i]);
//      }
//      return a;
//  };

String.prototype.padLeft = function(totalWidth, paddingChar) {
    var paddedValue = new String(this);
    paddedValue = paddedValue.trim();

    while (paddedValue.length < totalWidth) {
        paddedValue = paddingChar + paddedValue;
    }

    return paddedValue;
}
