
$().ready(function(){
	
	var url_roomId   = false;
	var url_objectId = false;	

	var selectedDay = 1;
	

	var buildUrl = function( base, params ) {
		// create new params string
		paramString = "/p";
		for( var key in params ) {
			paramString += '/' + key + '/' + params[key];  
		}

		var url = base + paramString;
		
		return url;
	}

	var parseUrl = function() {
		var location = document.location + '';
		
		// split for params 'p'
		var tokens = location.split('/p/');
		var base   = tokens[0];
		var paramString = tokens[1];
		
		var params = new Object();
		
		if( paramString != undefined ) {
			var tokens = paramString.split('/');
			
			for( var i = 0; i < tokens.length; i+=2 ) {
				var key   = tokens[i];
				var value = tokens[i+1];
				params[key] = value;			
			}
		}
		
		return params;
	}
	
	var updateParams = function(newParams) {
		var location = document.location + '';
		
		// split for params 'p'
		var tokens = location.split('/p/');
		var base   = tokens[0];
		var paramString = tokens[1];
		
		var params = new Object();
		
		if( paramString != undefined ) {
			var tokens = paramString.split('/');
			
			for( var i = 0; i < tokens.length; i+=2 ) {
				var key   = tokens[i];
				var value = tokens[i+1];
				params[key] = value;			
			}
		}
		params = $.extend( params, newParams );
		
		var url = buildUrl( base, params );

		return url;
	}
	
	
	var bindActions = function( target ) {
		
		var bindCalSelect = false;
		var bindLocation  = false;
		var bindRoom      = false;
		var bindReserve   = false;
		var bindCart      = false;
				
		if( target == undefined ) {
			// bind all
			bindCalSelect = true;
			bindLocation  = true;
			bindRoom      = true;
			bindReserve   = true;
			bindCart      = true;
		} else {
			if(target == 'calSelect' ) {
				bindCalSelect = true;
			}
			else if( target == 'location' ) {
				bindLocation = true;
			}
			else if( target == 'room' ) {
				bindRoom = true;
			}
			else if( target == 'reserve' ) {
				bindReserve = true;
			}
			else if( target == 'cart' ) {
				bindCart = true;
			}
		}
		
		
		if( bindCart ) {
			$('.remove-booking').click(function(){
				var primer = "remove-booking-";
				var bookingId = $(this).attr('id');
				    bookingId = parseInt( bookingId.substr( primer.length ));
				    
				var confirmed = confirm( "Sind Sie sicher, dass Sie die Reservierung zurückziehen wollen?" );
				
				if( confirmed == false ) {
					return;
				}
				
				$('.xhr.cart .indicator').fadeIn();
				
				$.get('mod_tocbooking/public/booking-remove/p/id/' + bookingId, function(result){
					// refresh cart
					$.get('mod_tocbooking/public/booking-cart/p/placeholder/no',function(result){
						$('.xhr.cart').html(result);
						
						// trigger calendar refresh
						$('select#room').change();
						
						// rebind cart
						bindActions('cart');
					});
					
					$('.xhr.cart .indicator').fadeOut();
				});
				

			});			
			
		}
		
		// calendar functions
		if( bindCalSelect ) {
			
			$('.dialog.room-available-after').dialog('destroy');
			$('#room-available-after').dialog({
				autoOpen: false,
				modal: true,
				hide: 'puff',
				dragable: true,
				buttons: {
					'Schließen': function() {
						$(this).dialog('close');	
					}
				}
			});
		
			$('.calendar-goto').click(function(){
			
				// parse goto date:
				var gotoDate = $(this).attr('class').split( ' ' ).slice(-1) + "";
				    gotoDate = gotoDate.substring( 'date-'.length );

				gotoDate = gotoDate.split( '-' ); // split date into Y, m and d.

				var roomId = $('select#room').val(); 
				
				var url = buildUrl( 'mod_tocbooking/public/calendar', {
					month: gotoDate[1],
					year:  gotoDate[0],
					roomid: roomId
				});
				
				$.get( url, function(result){
					$('.xhr.calendar').html( result );
					bindActions('calSelect');
					
				});

				$('.dialog.room-available-after').dialog('destroy');
			});



			$('.calendar select').change(function(){
				

				var month = parseInt( $('.booking select#month').val() ) + 1;
				var year  = parseInt( $('.booking select#year').val() );
				
				var roomId = $('select#room').val(); 
				
				var url = buildUrl( 'mod_tocbooking/public/calendar', {
					month: month,
					year:  year,
					roomid: roomId
				});
				
				$.get( url, function(result){
					$('.xhr.calendar').html( result );
					bindActions('calSelect');

				});
			});

			$('.calendar .next').click(function(){
				var roomId = $('select#room').val(); 
				var year  = parseInt( $('.booking select#year').val() );
				var month = parseInt( $('.booking select#month').val() ) + 1;	
				    month++;

				if( month == 13 ) {
					month = 1;
					year++;
				}

				var url = buildUrl( 'mod_tocbooking/public/calendar', {
					month: month,
					year:  year,
					roomid: roomId
				});
				
				$.get( url, function(result){
					$('.xhr.calendar').html( result );
					bindActions('calSelect');
				});
			});
	


			// bind calendar booking prev
			var c_year  =  parseInt( $('.booking select#year').val() );
			var c_month =  parseInt( $('.booking select#month').val() ) + 1;

			var today = new Date();
			var current_month = today.getMonth();
			var current_year  = today.getYear() + 1900;

			if( ( c_month - 1) < current_month + 1 && c_year <= current_year ) {
				$('td.prev').css({cursor:'default'});


			}
			else {

				$('.calendar .prev').click(function(){
					var roomId = $('select#room').val(); 
					var year  = parseInt( $('.booking select#year').val() );
					var month = parseInt( $('.booking select#month').val() ) + 1;	
					    month--;

					if( month == 0 ) {
						month = 12;
						year--;
					}

					var url = buildUrl( 'mod_tocbooking/public/calendar', {
						month: month,
						year:  year,
						roomid: roomId
					});
					
					$.get( url, function(result){
						$('.xhr.calendar').html( result );
						bindActions('calSelect');
					});
				});
			}

			$('.calendar td.day.occupied').each(function(){
				$(this).css({cursor: 'default'});
			});
			$('.calendar td.day.self').each(function(){
				$(this).css({cursor: 'default'});
			});
			
			$('.calendar td.day').click(function(){
				
				if( $(this).is('.inactive') || $(this).is('.occupied') ) {
					return;
				}

				// check if the room is already bookable
				if( $(this).is('.not-yet-available') ) {


					$('.dialog.room-available-after').dialog('open');

					return;
				}

				
				// $('.xhr.room-images').hide();
					

				// extract day
				var day   = $(this).attr('id');
				day       = parseInt( day.substr(4) );
				var month = parseInt( $('.booking select#month').val() ) + 1;
				var year  = parseInt( $('.booking select#year').val() );
				
				var objectId = $('select#location').val();
				var roomId   = $('select#room').val();
				
				selectedDay = day;
				
				// remove placeholder
				$('.booking.placeholder').hide();
				$('.placeholder-day').fadeOut();
				
				// show booking form
				var container = $('.xhr.booking-form');
				
				$('.xhr.cart .indicator').fadeIn(); 
				
				$(container).fadeOut(function(){
					
					var url = buildUrl( 'mod_tocbooking/public/booking-form', {
						objectid: objectId,
						roomid:   roomId,
						day:      day,
						month:    month,
						year:     year
					});
					
					$.get( url, function(result){
						$(container).html(result);
						$(container).fadeIn();
						$('.xhr.cart .indicator').fadeOut();
						
						bindActions('reserve');
					});
				});
				
			});
			
		}
		
		if( bindReserve ) {
		
			// bind reserve button
			$('.button.reserve').click(function(){
				
				// extract day
				var day   = selectedDay;
				var month = parseInt( $('.booking select#month').val() ) + 1;
				var year  = parseInt( $('.booking select#year').val() );
				
				var objectId = $('select#location').val();
				var roomId     = $('select#room').val();
				
				var bookingMode = $('select#booking-mode').val();
				
				var url = buildUrl( 'mod_tocbooking/public/booking-add-to-cart', {
					objectid: objectId,
					roomid:   roomId,
					bookingMode: bookingMode,
					day:      day,
					month:    month,
					year:     year
				});
				
				$('.xhr.cart .indicator').fadeIn();
				$('.xhr.booking-form').fadeOut(function(){
					$('.booking.placeholder').fadeIn();					
				});
				
				// perform a booking via rpc and check response
				$.get(url, function(result){
					var jsonResult = eval( '(' + result + ')' );
					
					if( jsonResult['code'] == 200 ) {
						$.get('mod_tocbooking/public/booking-cart',function(result){
							$('.xhr.cart').html(result);
							$('.xhr.cart .indicator').fadeOut();
							
  							$('.extbookinginfo').hide();

							// trigger calendar refresh
							$('select#room').change();
							
							bindActions('cart');
						});
					}
					else {
						$('.xhr.cart .indicator').fadeOut();
						// trigger calendar refresh
						$('select#room').change();
					}
				});
			});
			
		}
		
		if( bindLocation ) {
			$('select#location').change(function() {
		
				$('.booking.location .indicator').fadeIn();
				
				var container = $('.xhr.rooms');
				var objectId = $(this).val();
				$(container).fadeOut(function(){
					$.get( 'mod_tocbooking/public/booking-select-room/p/objectid/' + objectId, function(result){
						$(container).html( result );
						$(container).fadeIn();
						$('.booking.location .indicator').fadeOut();
						
					
						bindActions( 'room' );
						bindActions( 'calSelect' );
					});	
				});
			});

			if( url_objectId ) {
				$('select#location').val( url_objectId );
			}
						
		}
		
		if( bindRoom ) {
			$('select#room').change(function() {
				$('.booking.room .indicator').fadeIn();
				
				var container = $('.xhr.calendar');
				var roomId = $(this).val();
				var roomImageContainer = $('.xhr.room-images');
	
				var month = parseInt( $('.booking select#month').val() ) + 1;
				var year  = parseInt( $('.booking select#year').val() );
			
				var dateParam = document.location.hash.substring(1).split('|');
				var gotoDay  = false;

				// initial selection		
				if( typeof( $(document).data('initialized') ) == 'undefined' ) {
					gotoDay = dateParam[0];
					month   = dateParam[1];
					year    = dateParam[2];
					$(document).data( 'initialized', true );
				}



				if( isNaN( year ) || isNaN( month ) ) {
					var calendarUrl = buildUrl( 'mod_tocbooking/public/calendar', {
						roomid: roomId
					});
				} 
				else {
					var calendarUrl = buildUrl( 'mod_tocbooking/public/calendar', {
						month: month,
						year:  year,
						roomid: roomId
					});
				}
				
				$('.xhr.booking-form').fadeOut(function(){
					$('.booking.placeholder').fadeIn();
				});
				
			
				if( $(this).val() == '-' ) {
					// hide calendar
					$(container).fadeOut(function(){
						$('.booking.placeholder').fadeIn();
					});
					// hide room images
					$('.booking.room .indicator').fadeOut();
					$(roomImageContainer).fadeOut();
					return;
				}

				//	$('.booking.placeholder').fadeOut();
				var currentRoomId = $.data(document.body, 'currentRoomId');

				$(container).fadeOut(function(){
					$.get( calendarUrl, function(result){
						$(container).html( result );
						$(container).fadeIn();
						$('.booking.room .indicator').fadeOut();
						
						bindActions('calSelect');

						if( gotoDay !== false ) {
							$('.calendar #day-'+gotoDay).click();
						}
					});
				
					if( currentRoomId != roomId ) {
					//	if( $('.booking.cart').is(':visible') == false ) {
							$.get('mod_tocbooking/public/room-images/p/roomid/' + roomId, function(result){
								roomImageContainer.html( result );
								$('.cximages').cximages();
								$(roomImageContainer).fadeIn();
							});
					//	}
					}
				});

				$.data(document.body, 'currentRoomId', roomId );				
			});

			var $selectRoom = $('select#room');
			if( $selectRoom.val() == '-' ) {
				var options = $selectRoom.find('option');
				var firstOptionValue = $(options[1]).attr('value');				

				var selectedObjectId = $('select#location').val();

				if( url_roomId && selectedObjectId == url_objectId ) {
					$selectRoom.val( url_roomId ).change();
				}
				else {
					$selectRoom.val( firstOptionValue ).change();
				}
			}
	
			
		}


 		if( $('.booking.cart').is(':visible') ) {
			  $('.extbookinginfo').hide();
		}
		else {
			  $('.extbookinginfo').show();
		}

	}
	
	// initialize url object and room
	var urlParams = parseUrl();
	url_roomId   = urlParams.roomid;
	url_objectId = urlParams.objectid;	

	bindActions();
	
/*	
	if( ! $('.booking.placeholder').is(':visible') && 
	    ! $('.booking.form').is(':visible') && 
	    ! $('.room-images img').is(':visible')) {
		$('.xhr.cart').prepend('<img src="templates/public/toc/images/booking/placeholder_day.png" class="placeholder-day" />');
	}
	*/
	
	if( $('#contact').is(':visible') ) {
		$('#content_wrapper').hide();
		$('h1').css({marginBottom: '0px'});
	}
	
	$('select#location').change();


	// dialogs
	$.fx.speeds._default = 1000;
	$('#tocRoomsDialog').dialog({
		autoOpen: false,
		modal: true,
		hide: 'puff',
		dragable: true,
		buttons: {
			'Schließen': function() {
				$(this).dialog('close');	
			}
		}
	});

	$('#tocRoomsShow').click(function() {
		$('#tocRoomsDialog').dialog('open');
	});

	$('.book-now').hide().delay(2300).fadeIn();
	$('.book-now').click(function(){
		var roomId = $('select#room').val(); 
		var objectId = $('select#location').val();

	
   		var month = parseInt($('select#month').val());
		var year  = $('select#year').val();

		var dest = buildUrl( '/Konferenzraum-online-buchen', {
			'roomid': roomId,
			'objectid': objectId
		});
		

		dest += '#' + '0|' + month + '|' + year;

		document.location.href = dest;

		return false;
	});


 // bind frontend booking
 $(document).on( 'click', '.front-booking td.day', function() {
   var $day = $(this);
   if( $day.hasClass( 'inactive' ) ) {
       return;
   }   

   var $month = $('select#month');
   var $year  = $('select#year' );

   // extract day
   var day   = parseInt($day.attr('id').replace('day-',''));
   var month = parseInt($month.val())+1;
   var year  = $year.val();
   
   var roomId = $('select#room').val();
   var objectId = $('select#location').val();
 
   var dest = buildUrl( '/Konferenzraum-online-buchen', {
       'roomid': roomId,
       'objectid': objectId
   });

   var date = day + '|' + month + '|' + year;

   dest += '#' + date;
   
   document.location.href = dest;
 
   return false;
 });

	
	
});

