function zPad(val){
	if ( val < 10 ){
		return '0'+val;
	}
	return val;
}

function processBookingForm(ele){
	var bookForm=jQuery(ele).parents('form');
	var arrivalMonth = zPad(bookForm.find('.arrivalMonth').val());
	var arrivalDate = zPad(bookForm.find('.arrivalDay').val())+'_0000';
	var arrival=bookForm.find('.arrivalYear').val()+ arrivalMonth + arrivalDate;
	
	var departureMonth = zPad(bookForm.find('.departureMonth').val());
	var departureDate = zPad(bookForm.find('.departureDay').val())+'_0000';
	var departure = bookForm.find('.departureYear').val() + departureMonth + departureDate;

	var persons = bookForm.find('.adults').val() + "_" + bookForm.find('.children').val() + "_" + bookForm.find('.infants').val();
	
	return "http://booking.koldingfjord.dk/default.aspx?"+bookForm.serialize()+"&p_arr=" + arrival + "&p_dep=" + departure + "&p_pax=" + persons;

}

function updateArrivalSelects(ele,date){
	var bookForm=jQuery(ele).parents('form');
	if ( date == undefined ){
		var date=new Date(jQuery(ele).dpGetSelected()[0]);
	}else{
		var date=new Date(date);
	}
	bookForm.find('.arrivalDay option[value=' + (date.getDate()) + ']').attr('selected', 'selected');
	bookForm.find('.arrivalMonth option[value=' + (date.getMonth()+1) + ']').attr('selected', 'selected');
	bookForm.find('.arrivalYear option[value=' + (date.getFullYear()) + ']').attr('selected', 'selected');
	bookForm.find('.arrivalDay').trigger('change');
}

function updateDepartureSelects(ele,date){
	var bookForm=jQuery(ele).parents('form');
	if ( date == undefined ){
		var date=new Date(jQuery(ele).dpGetSelected()[0]);
	}else{
		var date=new Date(date);
	}
	bookForm.find('.departureDay option[value=' + (date.getDate()) + ']').attr('selected', 'selected');
	bookForm.find('.departureMonth option[value=' + (date.getMonth()+1) + ']').attr('selected', 'selected');
	bookForm.find('.departureYear option[value=' + (date.getFullYear()) + ']').attr('selected', 'selected');		
}

(function($){
	$(document).ready(function(){
		// Configure arrival date picker
		$('.arrivalDatePicker').datePicker({
				createButton: false
		}).bind('click', function() {
			updateArrivalSelects(this);
			$(this).dpSetPosition($.dpConst.POS_TOP, $.dpConst.POS_RIGHT);
			$(this).dpDisplay();
			$('#dp-popup').clampToElement(window);		
			return false;
		}).bind('dateSelected', function(e, selectedArrivalDate, td, state) {
			updateArrivalSelects(this);
		}).bind('dpClosed', function(e, selected) {
			updateArrivalSelects(this);
		});
		
		$('.arrivalDay, .arrivalMonth, .arrivalYear').bind('change',function(){
			var bookForm=jQuery(this).parents('form');
			var d = new Date(
				bookForm.find('.arrivalYear').val(),
				bookForm.find('.arrivalMonth').val()-1,
				bookForm.find('.arrivalDay').val()
			);
			bookForm.find('.arrivalDatePicker').dpSetSelected(d.asString());
			bookForm.find('.departureDatePicker').dpSetSelected(d.addDays(bookForm.find('.departureDatePicker').attr('rel')).asString());
		});
		
		

		$('.departureDatePicker').datePicker({
			createButton: false
		}).bind('click', function() {
			updateDepartureSelects(this);
			$(this).dpSetPosition($.dpConst.POS_TOP, $.dpConst.POS_RIGHT);
			$(this).dpDisplay();
			$('#dp-popup').clampToElement(window);		
			return false;
		}).bind('dateSelected', function(e, selectedDepartureDate, $td, state) {
			updateDepartureSelects(this);
		}).bind('dpClosed', function(e, selected) {
			updateDepartureSelects(this);
		});

		//Configure departure date picker

		$('.departureDay, .departureMonth, .departureYear').bind('change', function() {
			var bookForm=jQuery(this).parents('form');
			var d = new Date(
				bookForm.find('.departureYear').val(),
				bookForm.find('.departureMonth').val()-1,
				bookForm.find('.departureDay').val()
			);
			bookForm.find('.departureDatePicker').dpSetSelected(d.asString());
		});


		//Set dates and trigger an update

		
		$('.arrivalDatePicker').each(function(){	
			var today = new Date();			
			updateArrivalSelects(this,today.addDays($(this).attr('rel')).getTime());
		});

		$('.arrivalDay').trigger('change');
		
	});
})(jQuery);

(function($){
/* (c) Morten Olesen, IdeFA ApS 2010 
 *
 * TODO: cant handle elements larger than the boundsElement, will attempt to display ULC in those cases
 */


 $.coordsFromElement = function(element){
	return {
        'top': jQuery(element).offset().top,
        'left': jQuery(element).offset().left,
        'height': jQuery(element).outerHeight(),
        'width': jQuery(element).outerWidth(false)
    };
 }

 $.clampCoords = function(params){
	 var defaults={
		'top':0,
		'left':0,
		'height':0,
		'width':0,
		'padding':0,
		'bounds':window
	 };
	 var e=$.extend(defaults,params);
	 
	 var result={
		'top':e.top,
		'left':e.left		 
	 };
	 
	 
	 
	 if ( 
			($(e.bounds).height() + $(e.bounds).scrollTop())
			<
			(e.top + e.height)
		){
		//Clamp: Bottom
		result.top=$(e.bounds).height() + $(e.bounds).scrollTop() -e.height -e.padding;
	}
	 
	 
	 if(
		($(e.bounds).width() + $(e.bounds).scrollLeft())
		<
		(e.left + e.width)
		){
		//Clamp: Right;
		result.left=$(e.bounds).width() + $(e.bounds).scrollLeft() -e.width -e.padding;
	 }
	 
	 if ( $(e.bounds).scrollTop() > e.top  ){
		 //Clamp:Top
		 result.top=$(e.bounds).scrollTop() + e.padding;
	 }
	 
	 if ($(e.bounds).scrollLeft() > e.left  ){
		//Clamp:Left
		result.left=$(e.bounds).scrollLeft()+ e.padding;
	 }
	 
	 return result;
 }

 $.fn.clampToElement = function(boundsElement) {
	var bounds=boundsElement||window;
		
    return this.each(function() {
		var r=$.coordsFromElement(this);
		r.bounds=bounds;
		r=$.clampCoords(r);
		$(this).css({'top':(r.top-parseInt(jQuery(this).css("margin-top")))+'px','left':(r.left-parseInt(jQuery(this).css("margin-left")))+'px'});
    });
 };
})(jQuery);

