$(document).ready(function(){
  tweakCSS();
  setup_property_details_links();
  setup_picture_gallery();
  setup_tabs();
  setup_form();
  setup_datepicker();
  loadGoogleMap();
});

function setup_datepicker() {
  $('.popup_datepicker').each(function(input){
    var input = $(this);
    input.DatePicker({
    	format:'Y-m-d',
      date: input.val() || new Date(),
      // current: new Date(Date.now() + 1000*60*60*24*30),
    	starts: 1,
    	position: 'r',
      onRender: function(date){
        if(date.valueOf() < Date.now() + 1000*60*60*24*2) return {disabled: true};
        else return {disabled: false};
      },
    	onChange: function(formated, dates){
    		input.val(formated);
  			input.DatePickerHide();
    	}
    });
  })
}

function setup_intab_datepicker() {
  var self = arguments.callee;
  if(!self.called){
    $('#flat_double_datepicker').DatePicker({
      flat: true,
      format: 'Y-m-d',
      date: [],
      current: new Date(Date.now() + 1000*60*60*24*30),
      calendars: 2,
      mode: 'range',
      starts: 0,
      onRender: renderDate,
      onChange: function(dates){
        if(dates[0] != dates[1]) {
          $('input[name="reservation[begins_on]"]').val(dates[0]);
          $('input[name="reservation[ends_on]"]').val(dates[1]);
        }
      }
    });
    self.called = true;
  }
}

function renderDate(date) {
  var self = arguments.callee;
  if(!self.init){
    self.minimumAntecedence = Date.now() + 1000*60*60*24*2;
    self.init = true;
  }
  if(date < self.minimumAntecedence) return {disabled: true};
  else {
    var is_date_of_arrival_or_departure = false;
    for(var status in availabilityCalendar.reservations) {
      var reservations = availabilityCalendar.reservations[status];
      for(var i=0, l=reservations.length; i<l; i++) {
        if(date > reservations[i][0] && date < reservations[i][1]) return {disabled: true};
        else if(date.valueOf() == reservations[i][0].valueOf() || date.valueOf() == reservations[i][1].valueOf()) {
          if(is_date_of_arrival_or_departure) return {disabled: true};
          else is_date_of_arrival_or_departure = true;
        }
      }
    }
  }
  return {disabled: false};
}

function loadGoogleMap() {
  var container = document.getElementById("map");
  if (container && GBrowserIsCompatible()) {
    var map = new GMap2(container);
    var center = new GLatLng(coordinates.lat, coordinates.lng)
    map.addControl(new GLargeMapControl());
    map.setCenter(center, 15);
    map.addOverlay(new GMarker(center));
    $(window).unload(function(e){GUnload()});
  }
}

function tweakCSS() {
  $('#property_box_container .property:nth-child(odd)').each(function(){
    $(this).addClass('clearLeft');
  });
}

function setup_form() {
	$('#reservation input[name=customer_type]').each(function(i){
	  $(this).bind('change', enable_customer);
	  if(this.value == 'returning') enable_customer({target: this});
	})
  // rememberInitialValues();
}

function setup_property_details_links() {
  $('#property_box_container a').click(function(e){
    // alert('clicked');
    // e.preventDefault();
  })
}

var detail_foto;
function setup_picture_gallery(first_argument) {
    detail_foto = $('#detail_foto');
  $('#picture_gallery img').click(function(e){
    $('#detail_foto').attr('src', $(this).attr('src').replace('/thumb/', '/big/'));
    e.preventDefault();
  })
}

var tabs, tab_panes, availabilityCalendar;
function setup_tabs() {
  tabs = $('#apartment_tabs a');
  tab_panes = $('#tab_panes .tab_pane');
  tabs.click(function(e){
    tab_panes.removeClass('current');
    tabs.removeClass('current');
    $($(this).attr('href')).addClass('current');
    $(this).addClass('current');
    if(!availabilityCalendar) availabilityCalendar = new dbOCalendar('calendar',reservations);
    e.preventDefault();
  });
  $('#apartment_tabs a[href=#reservation]').click(function(e){
    setup_intab_datepicker();
  })
}


function enable_customer(e) {
	var map = {'new':'returning','returning':'new'}
	$('#'+map[e.target.value]+'_customer input[type!=radio]').attr('disabled','disabled');
	$('#'+e.target.value+'_customer input[type!=radio]').removeAttr('disabled');
}
function rememberInitialValues() {
	$('#reservation input[name*=_on], #search_panel input[name*=date]').each(function(){
		var initial_value;
		if(initial_value = this.value) {
			if(this.value.search(/^\D+$/) != -1) $(this).addClass('dimmed');
			$(this).bind('focus', function(e){
				if(this.value == initial_value) {
					this.value = '';
					$(this).removeClass('dimmed');
				}
			})
			$(this).bind('blur', function(e){
				if(this.value == '') {
					$(this).addClass('dimmed');
					this.value = initial_value;
				}
			})
		}
	})
}
function placeReservation(form) {
  toggleLoader(form);
  var url = form.action
  var data = {};
  $('#reservation input').each(function(){
    switch(this.type) {
      case 'radio':
      case 'checkbox':
        if($(this).attr('checked') && !$(this).attr('disabled')) data[this.name] = this.value;
        break;
      default:
        if(!$(this).attr('disabled')) data[this.name] = this.value;
    }
  });
  // jQuery.post( url, data, placeReservationCallback );
  jQuery.ajax({
    type: "POST",
    url: url,
    data: data,
    success: function(data, status){
      toggleLoader(form);
      $('#reservation .server_response').get(0).innerHTML = '';
      $('#reservation .form_stack').get(0).innerHTML = data;
      setup_form();
    },
    error: function(request, status, error) {
      toggleLoader(form);
      $('#reservation .server_response').get(0).innerHTML = request.responseText;
    }
  });
  return false;
}

// function placeReservationCallback(data, textStatus) {
//   toggleLoader();
//   $('#reservation .server_response').get(0).innerHTML = data;
// }
function toggleLoader(context) {
  $('#spin_wheel', context).toggleClass('hidden');
}
function placeComment(form) {
  var url = form.action
  var data = {};
  $('#guestbook input, #guestbook textarea').each(function(){
    if(!$(this).attr('disabled')) data[this.name] = this.value;
  });
  jQuery.post( url, data, placeCommentCallback );
  return false;
}
function placeCommentCallback(data, textStatus) {
  $('#guestbook .server_response').get(0).innerHTML = data;
}

if(!Date.now) {
  Date.now = function(){
    return (new Date()).valueOf();
  }
}