var Teaser = {
	image: null,
	buttons: {
		previous: null,
		next: null
	},
	state: 0,
	max: 0,
	
	init: function() {
		Teaser.buttons.previous = $('<a></a>')
			.attr({href: '#', title: 'Zurück', id: 'start-teaser-previous'})
			.html('<span>Zurück</span>')
			.click(Teaser.previous).hide().appendTo('#start-teaser');
		Teaser.buttons.next = $('<a></a>')
			.attr({href: '#', title: 'Weiter', id: 'start-teaser-next'})
			.html('<span>Weiter</span>')
			.click(Teaser.next).hide().appendTo('#start-teaser');
		
		Teaser.image = document.createElement('img');
		$(Teaser.image).load(function() {
			Teaser.max = (Teaser.image.width / 892) - 1;
			
      $('#start-teaser-image').css('background-image', 'url(images/teaser_images.jpg)');
			
			if ($.browser.msie && $.browser.version == 7) {
			  Teaser.buttons.previous.show();
  			Teaser.buttons.next.show();
			} else {
			  Teaser.buttons.previous.fadeIn(700);
  			Teaser.buttons.next.fadeIn(700);
			}
		});
    Teaser.image.src = "images/teaser_images.jpg";
		
		$('#start-teaser-image').delay(4000).queue(function() {
			Teaser.move(Math.floor(Math.random() * (Teaser.max - 1)) + 1); // 1 - Teaser.max
			$(this).dequeue();
		});
		
		$('div.start-teaser-description span.background').css('opacity', 0.65);
	},
	
	next: function(event) {
		$('#start-teaser-image').clearQueue();
		Teaser.move(1);
		event.preventDefault();
	},
	
	previous: function(event) {
		$('#start-teaser-image').clearQueue();
		Teaser.move(-1);
		event.preventDefault();
	},
	
	move: function(value) {
		$('.start-teaser-description').fadeOut(500);
		
		if (Teaser.state == Teaser.max) {
			Teaser.state = 0;
			$('#start-teaser-image').css('background-position', '0px 0');
		}
		
		Teaser.state += value;
		
		if (Teaser.state == -1) {
			$('#start-teaser-image').css('background-position', (Teaser.max * -892) + 'px 0');
			Teaser.state = Teaser.max - 1;
		}
		
    $('#start-teaser-image').animate({backgroundPosition: (Teaser.state * -892) + 'px 0'}, 700 * Math.abs(value));
		$('.start-teaser-description-' + Teaser.state).fadeIn(500);
	}
};

var Images = {
	base: null,
	current: null,
	link: null,
	direction: 1,
	prefetchInProgress: 0,
		
	data: {},
	
	init: function() {
		var link = {
			previous: $('#images-image-previous').click(Images.previous).attr('href'),
			next: $('#images-image-next').click(Images.next).attr('href')
		}
		
		Images.base = $('base').attr('href');
		Images.link = link.previous || link.next || null;
		
		if (Images.link) {
			Images.link = Images.link.substring(0, Images.link.lastIndexOf('/') + 1);
		}
		
		// TODO: first image has no state
		window.onpopstate = function(event) {
		  if (event.state && event.state.album_image_id) {
		    if (Images.current != event.state.album_image_id) {
		      Images.goto(event.state.album_image_id);
		    }
		  }
		}
		
		if (!link.previous) {
			$('<a></a>').attr({title: 'Voheriges Bild', id: 'images-image-previous'}).text('‹').click(Images.previous).hide().prependTo('#images-image');
			
			if (link.next) {
				Images.prefetch(Images.getIdByUrl(link.next));
			}
		}
		
		
		if (!link.next) {
			$('<a></a>').attr({title: 'Nächstes Bild', id: 'images-image-next'}).text('›').click(Images.next).hide().prependTo('#images-image');
			
			if (link.previous) {
				Images.prefetch(Images.getIdByUrl(link.previous));
				Images.direction = -1;
			}
		}
		
		if (link.next && link.previous){
		  Images.prefetch(Images.getIdByUrl(link.next));
		}
	},
	
	previous: function(event) {
		Images.goto(Images.getIdByUrl(event.target.href));
		
		if (Images.direction > -1) {
		  Images.direction -= 1;
		}
		
		event.preventDefault();
	},
	
	next: function(event) {
		Images.goto(Images.getIdByUrl(event.target.href));
		
		if (Images.direction < 1) {
		  Images.direction += 1;
		}
		
		event.preventDefault();
	},
	
	goto: function(id) {
		if (Images.data[id]) {
			Images.load(Images.data[id]);
		} else {
			$.ajax({
				type: 'GET',
				url: Images.link + id + '.json',
				dataType: 'json',
				success: function(result) {
				  Images.data[result.image.id] = result;
				  Images.load.apply(this,  arguments);
				},
				error: function(xhr, status, msg) {
					window.location = Images.link + id;
				}
		    });
		}
	},
	
	load: function(result) {
		$('#images-image img').attr('src', Images.base + 'thumbnails/full/' + result.image.hash + '.jpg');
		
		if (result.image.title) {
		  $('#images-image h4 a').text(result.image.title).attr('href', Images.link + result.image.id).parent().show();
		} else {
		  $('#images-image h4').hide();
		}
		
		if (result.image.description) {
		  $('#images-image p').text(result.image.description).show();
		} else {
		  $('#images-image p').hide();
		}
		
		if (result.neighbours.previous) {
			$('#images-image-previous').show().attr('href', Images.link + result.neighbours.previous.image_id);
		} else {
			$('#images-image-previous').hide();
		}
			
		if (result.neighbours.next) {
			$('#images-image-next').show().attr('href', Images.link + result.neighbours.next.image_id);
		} else {
			$('#images-image-next').hide();
		}
		
		Images.current = result.image.id;
		
		if (window.history && window.history.pushState) {
		  // TODO: construct better title
		  window.history.pushState({'album_image_id': result.image.id}, 'Impressionen - MISSIO-CAMP', Images.link + result.image.id);
		}
		
		if (Images.prefetchInProgress == 0) {		  
  		Images.prefetchNeighbours(result.neighbours);
		}
	},
	
	prefetch: function(id, depth) {
	  depth = depth || 0;
	  
	  if (depth > 2) {
	    return;
	  }
	  
		if (!Images.data[id]) {
		  Images.prefetchInProgress ++;
		  
			$.ajax({
				type: 'GET',
				url: Images.link + id + '.json',
				dataType: 'json',
				success: function(result) {
					Images.data[id] = result;
					
					Images.data[id].element = document.createElement('img');
					Images.data[id].element.src = Images.base + 'thumbnails/full/' + result.image.hash + '.jpg'
					
					Images.prefetchInProgress--;
					Images.prefetchNeighbours(Images.data[id].neighbours, depth);
				}
		    });
		} else {
		  Images.prefetchNeighbours(Images.data[id].neighbours, depth);
		}
	},
	
	prefetchNeighbours: function(neighbours, depth) {
	  depth = depth || 0;
	  
	  if (Images.direction == 1 && neighbours.next) {
		  Images.prefetch(neighbours.next.image_id, depth + 1);
		} else if (Images.direction == -1 && neighbours.previous) {
		  Images.prefetch(neighbours.previous.image_id, depth + 1);
		}
	},
	
	getIdByUrl: function(url) {
		return url.substr(url.lastIndexOf('/') + 1);
	}
};

var Webcam = {
  init: function() {
    setInterval('Webcam.reload()', 120000);
  },
  
  reload: function() {
    $.ajax({
			type: 'GET',
			url: 'http://missio-camp.de/webcam.json',
			dataType: 'json',
			success: function(result) {
			  var image = document.createElement('img');
    		$(image).load(function() {
    		  $('#webcam-image').attr('src', 'http://missio-camp.de/webcam/images/' + result.files[0]);
    		  $('#webcam-current-time').text(result.dates[0].time);
    		  $('#webcam-current-date').text(result.dates[0].date);
    		});
        image.src = 'http://missio-camp.de/webcam/images/' + result.files[0];
			}
    });
  }
};

var MC = {Booking: null};

(function() {
  var form = $('#booking-form'),
      booking = {
        fields: {
          adults: $('#booking-form-adults'),
          kidsFromThree: $('#booking-form-kids-from-three'),
          kidsFromSeven: $('#booking-form-kids-from-seven'),
          kidsFromEleven: $('#booking-form-kids-from-eleven'),
          singleRooms: $('#booking-form-single-room'),
          doubleRooms: $('#booking-form-double-room'),
          maisonettes: $('#booking-form-maisonette'),
          singleRoomsWC: $('#booking-form-single-room-wc'),
          doubleRoomsWC: $('#booking-form-double-room-wc'),
          maisonettesWC: $('#booking-form-maisonette-wc')
        },
        fieldsets: {
          guesthouse: $('#booking-form-guesthouse'),
          tent: $('#booking-form-tent')
        },
        price: {
          description: $('#booking-form-total-price .item'),
          field: $('#booking-form-total-price .price'),
          input: $('#booking-form-price')[0],
          tent: {
            adults: 22, // ab 15 Jahre
            kidsFromEleven: 19, // 11-14 Jahre
            kidsFromSeven: 14, // 7-10 Jahre
            kidsFromThree: 8 // 3-6 Jahre
          },
          guesthouse: {
            // with and without bathroom
            singleRooms: [52, 46],
            doubleRooms: [42, 36],
            maisonettes: [38, 32],
            // own room and parents room
            kidsFromEleven: [22, 20], // 11-14 Jahre
            kidsFromSeven: [20, 15], // 7-10 Jahre
            kidsFromThree: [15, 10], // 3-6 Jahre
          },
          type: 'empty'
        },
        tabs: {
          guesthouse: $('#booking-form-tab-guesthouse'),
          tent: $('#booking-form-tab-tent')
        },
        time: {},
        type: {
          tent: $('#booking-form-type-tent')[0]
        }
      },
      slider = {
        handles: {
          left: null,
          right: null
        },
        ui: null
      },
      sliderHandles = {
        left: null,
        right: null
      };
  
  booking.calculate = function() {
    var nights = booking.time.getNights(),
        price = 0,
        pricePerNight = 0;
    
    if (booking.type.isInTent()) {
      if (booking.time.isWeekend()) {
        // TODO: Wochenendbuchungen
      } else {
        pricePerNight += booking.price.getPriceForTent('adults'); 
        
        pricePerNight += booking.price.getPriceForTent('kidsFromEleven'); 
        pricePerNight += booking.price.getPriceForTent('kidsFromSeven'); 
        pricePerNight += booking.price.getPriceForTent('kidsFromThree'); 
      }
    } else {
      if (booking.kidsInParentsRoom()) {
        pricePerNight += booking.price.getPriceForAdults('singleRooms');
        pricePerNight += booking.price.getPriceForAdults('doubleRooms');
        pricePerNight += booking.price.getPriceForAdults('maisonettes');
      } else {
        var adults = booking.numberOf('adults');
        
        if (adults > 0) {
          if (adults <= booking.numberOf('singleRooms')) {
            pricePerNight += booking.price.getPriceForAdults('singleRooms', adults);
          } else {
            pricePerNight += booking.price.getPriceForAdults('singleRooms');
            adults -= booking.numberOf('singleRooms');

            if (adults <= (booking.numberOf('doubleRooms') * 2)) {
              pricePerNight += booking.price.getPriceForAdults('doubleRooms', adults);
            } else {
              pricePerNight += booking.price.getPriceForAdults('doubleRooms');
              adults -= booking.numberOf('doubleRooms') * 2;

              pricePerNight += booking.price.getPriceForAdults('maisonettes', adults);
            }
          }
        }
      }
      
      pricePerNight += booking.price.getPriceForKids('kidsFromEleven');
      pricePerNight += booking.price.getPriceForKids('kidsFromSeven');
      pricePerNight += booking.price.getPriceForKids('kidsFromThree');
      
      if (nights < 3) {
	      // Kurzaufenthaltszuschlag
	      price += 10 * booking.numberOfPersons();
	    }
    }
    
    price += pricePerNight * nights;
    
    if (booking.type.qualifiesForDiscount()) {
      // 10% Frühbucherrabatt
      price *= 0.9;
    }
    
    if (!booking.type.isInTent()) {
      // Kurtaxe nur im Haus (0,50€)
      price += 0.5 * booking.numberOf('adults') * nights;
    }
    
    if (price > 5000 || booking.numberOf('adults') > 10) {
      booking.price.setDescription('group', 'Kontaktieren Sie uns bitte für ein individuelles Angebot für Ihre Gruppe.');
    } else if (booking.numberOfKids() > 4) {
      booking.price.setDescription('family', 'Kontaktieren Sie uns bitte für ein individuelles Angebot für große Familien.');
    } else {
      booking.price.setDescription();
    }
    
    booking.price.field.text(price.toFixed(2).toString() + ' €');
    booking.price.input.value = price.toFixed(2).toString() + ' €';
  };
  
  booking.numberOf = function(field) {
    return parseInt(booking.fields[field].val());
  };
  
  booking.numberOfPersons = function() {
    return booking.numberOf('adults') + booking.numberOfKids();
  };
  
  booking.numberOfKids = function() {
    return booking.numberOf('kidsFromEleven') + booking.numberOf('kidsFromSeven') + booking.numberOf('kidsFromThree');
  };
  
  booking.numberOfAccommodatedPersons = function() {
    return booking.numberOf('singleRooms') + (2 * booking.numberOf('doubleRooms')) + (booking.sizeOfMaisonettes() * booking.numberOf('maisonettes'));
  };
  
  booking.hasWC = function(field) {
    return booking.fields[field + 'WC'][0].checked;
  };
  
  booking.sizeOfMaisonettes = function() {
    return (booking.fields.maisonettesWC[0].checked)? 6 : 4;
  };
  
  booking.kidsInParentsRoom = function() {
    return $('#booking-form-kids-room-parents')[0].checked;
  };
  
  booking.price.setDescription = function(type, text) {
    if (!type || !text) {
      type = null;
      text = 'Unverbindliche<br />Preisberechnung';
    }
    
    if (booking.price.type == type) {
      return;
    }
    
    booking.price.type = type;
    
    if (type !== null) {
      booking.price.field.animate({opacity: '0.15'}, 400);
    } else {
      booking.price.field.animate({opacity: '1'});
    }
    
    booking.price.description.fadeOut(100).queue(function(next) {
      booking.price.description.html(text);
      next();
    }).fadeIn();
  }
  
  booking.price.getPriceForTent = function(field) {
    return booking.price.tent[field] * booking.numberOf(field);
  };
  
  booking.price.getPriceForKids = function(field) {
    return booking.price.guesthouse[field][(booking.kidsInParentsRoom())? 1 : 0] * booking.numberOf(field);
  };
  
  booking.price.getPriceForAdults = function(field, adults) {
    var price = booking.price.guesthouse[field][(booking.hasWC(field))? 0 : 1];
    
    if (adults) {
      return price * adults;
    } else {
      if (field == 'doubleRooms') {
        price *= 2;
      }
      
      if (field == 'maisonettes') {
        price *= booking.sizeOfMaisonettes();
      }
      
      return price * booking.numberOf(field);
    }
  }
  
  booking.fields.addTo = function(field, persons) {
    var numberOf = booking.numberOf(field),
        toAdd = persons,
        difference;
    
    if (field == 'doubleRooms') {
      toAdd = Math.floor(persons / 2)
    } else if (field == 'maisonettes') {
      toAdd = Math.floor(persons / booking.sizeOfMaisonettes());
    }
    
    if ((numberOf + toAdd) < 0) {
      toAdd = -numberOf;
    }
    
    numberOf += (toAdd);
    
    if (field == 'singleRooms' && numberOf > 1) {
      booking.fields[field][0].options[Math.floor(numberOf / 2)].selected = true;
    } else {
      booking.fields[field][0].options[numberOf].selected = true;
    }
    
    if (field == 'doubleRooms') {
      return toAdd * 2;
    } else if (field == 'maisonettes') {
      return toAdd * booking.sizeOfMaisonettes();
    }
    
    return toAdd;
  };
  
  booking.fields.updateOptions = function() {
    var numberOfPersons,
        maxima,
        values = {
          singleRooms: booking.numberOf('singleRooms') - 1, // try to decrase single rooms
          doubleRooms: booking.numberOf('doubleRooms'),
          maisonettes: booking.numberOf('maisonettes')
        },
        room, i;
    
    if (booking.kidsInParentsRoom()) {
      numberOfPersons = booking.numberOf('adults');
    } else {
      numberOfPersons = booking.numberOfPersons();
    }
    
    maxima = {
      singleRooms: numberOfPersons,
      doubleRooms: Math.floor(numberOfPersons / 2),
      maisonettes: Math.floor(numberOfPersons / booking.sizeOfMaisonettes())
    };
    
    // try to decrease maisonettes
    if (values.maisonettes > maxima.maisonettes) {
      values.maisonettes = maxima.maisonettes;
    }
    
    for (room in maxima) {
      booking.fields[room][0].options.length = 0;
      booking.fields[room][0].options[booking.fields[room][0].options.length] = new Option('kein', '0', true, 0 == values[room]);
      
      // exclude 'kein' option for single rooms
      if (room == 'singleRooms' && (numberOfPersons % 2) == 1) {
        booking.fields[room][0].options[booking.fields[room][0].options.length - 1].disabled = true;
      }
	    
	    for (i = 1; i <= maxima[room]; i++) {
	      if (room != 'singleRooms' || numberOfPersons % 2 == i % 2) {	        
  	      booking.fields[room][0].options[booking.fields[room][0].options.length] = new Option(i, i, false, i == values[room]);
	      }
	    }
    }
    
    booking.fields.distribute();
  };
  
  booking.fields.distribute = function(fixedField) {
    var difference =  -booking.numberOfAccommodatedPersons();
    
    if (booking.kidsInParentsRoom()) {
      difference += booking.numberOf('adults');
    } else {
      difference += booking.numberOfPersons();
    }
    
    if (!fixedField || fixedField == 'maisonettes') {
      difference -= booking.fields.addTo('doubleRooms', difference);
      difference -= booking.fields.addTo('singleRooms', difference);
    } else {
      if (difference < 0) {
        difference -= booking.fields.addTo('maisonettes', difference);
      }

      if (fixedField == 'singleRooms') {
        difference -= booking.fields.addTo('doubleRooms', difference);
      } else {
        difference -= booking.fields.addTo('singleRooms', difference);
      }
    }
    
    if (difference != 0) {
      throw new Error('Difference is ' + difference + ', should be 0.');
    }
    
    booking.calculate();
  };
  
  booking.fields.kidsChange = function() {
    // TODO: disable Dusche/WC if no adults
    
    if (booking.numberOfKids() == 0 || booking.numberOf('adults') == 0) {
      $('#booking-form-kids-room-parents').attr('disabled', true);
      $('#booking-form-kids-room-own').attr('disabled', true);
      $('label[for="booking-form-kids-room-parents"]').addClass('disabled');
      $('label[for="booking-form-kids-room-own"]').addClass('disabled');
    } else {
      $('#booking-form-kids-room-parents').removeAttr('disabled');
      $('#booking-form-kids-room-own').removeAttr('disabled');
      $('label[for="booking-form-kids-room-parents"]').removeClass('disabled');
      $('label[for="booking-form-kids-room-own"]').removeClass('disabled');
    }
    
    if (booking.numberOfKids() == 0) {
      $('#booking-form-kids-room-parents')[0].checked = true;
    } else if (booking.numberOfKids() > 2 || booking.numberOf('adults') == 0) {
      $('#booking-form-kids-room-own')[0].checked = true;
    }
    
	  booking.fields.updateOptions();
	  booking.calculate();
  };
  
  booking.time.getNights = function() {
    var range = slider.ui.slider('values');
    return range[1] - range[0];
  };
  
  booking.time.isWeekend = function() {
    // TODO
    return false;
  };
  
  booking.type.update = function(event) {
		if (booking.type.isInTent()) {
		  booking.tabs.tent.addClass('checked');
	    booking.fieldsets.tent.show();
	    
	    booking.tabs.guesthouse.removeClass('checked');
	    booking.fieldsets.guesthouse.hide();
		} else {
		  booking.tabs.guesthouse.addClass('checked');
	    booking.fieldsets.guesthouse.show();
	    
	    booking.tabs.tent.removeClass('checked');
	    booking.fieldsets.tent.hide();
		}
		
		if (booking.type.qualifiesForDiscount()) {
      $('#booking-form-total-discount').show();
    } else {
      $('#booking-form-total-discount').hide();
    }
    
		if (event) {		  
  		booking.calculate();
		}
  };
  
  booking.type.isInTent = function() {
    return booking.type.tent.checked;
  };
  
  booking.type.qualifiesForDiscount = function() {
    return booking.type.isInTent() && (new Date() < new Date(2011, 3, 1));
  };
  
  slider.updatePeriod = function(event, ui) {
	  var period = ui.values[1] - ui.values[0];

		if (period > 2) {
		  $(event.target).find('.ui-slider-range').text(period + ' Übernachtungen');
		} else {
		  $(event.target).find('.ui-slider-range').text('');
		}
	};
  
  MC.Booking = {
    init: function() {
  		form.find('#booking-form-from').parent().hide();
  		form.find('#booking-form-to').parent().hide();
  		
      booking.type.update();
  		
  		slider.ui = $('<div></div>').attr({id: 'booking-form-timeframe-slider'})
  		  .appendTo($('<li></li>').appendTo('.booking-form-timeframe > ul')).slider({
    			range: true,
    			min: 1,
    			max: 15,
    			values: [1, 15],
    			slide: function(event, ui) {
    				if (ui.values[0] == ui.values[1]) {
    				  if (ui.values[0] == 1 || ui.values[1] == 15) {
    				    return false;
    				  } else if (ui.handle == $(event.target).find('.ui-slider-handle:nth-child(2)')[0]) {
    						$(event.target).slider('values', 1, ui.values[1]+1);
    					} else {
    						$(event.target).slider('values', 0, ui.values[0]-1);						
    					}
    				}
    				
    				slider.updatePeriod(event, ui);
    			},
    			change: function(event, ui) {
    			  slider.updatePeriod(event, ui);
            booking.calculate();
            
            $('#booking-form-from').val($('#booking-form-timeframe-day-' + ui.values[0]).attr('title'));
            $('#booking-form-to').val($('#booking-form-timeframe-day-' + ui.values[1]).attr('title'));
    			}
    		});
    	
    	$('.booking-form-timeframe-day').each(function(i, day) {
    	  $(day).click(function() {
    	    var values = slider.ui.slider('values'),
    	        value = i + 1,
    	        mean = Math.floor((values[0] + values[1])/2);
    	    
    	    if (i > values[1]) {
    	      slider.ui.slider('values', 1, value);
    	    } else if (value < values[0]) {
    	      slider.ui.slider('values', 0, value);
    	    } else if (value > mean) {
    	      slider.ui.slider('values', 1, value);
    	    } else {
    	      slider.ui.slider('values', 0, value);
    	    }
    	  });
    	});
      
      // trigger update period
  		slider.ui.slider('values', 0, 1);

  		slider.ui.slider('widget').find('.ui-slider-handle').each(function(i, handle) {
  		  if (i == 0) {
  		    slider.handles.left = handle;
  		    $(handle).addClass('ui-slider-handle-left');
  		  } else {
  		    slider.handles.right = handle;
  		    $(handle).addClass('ui-slider-handle-right');
  		  }
  		});
  		
  		booking.fields.kidsChange();
  		
  		$('#booking-form-type-guesthouse').change(booking.type.update);
  		$('#booking-form-type-tent').change(booking.type.update);
  		
  		booking.fields.adults.change(booking.fields.kidsChange);
  		
  		booking.fields.kidsFromThree.change(booking.fields.kidsChange);
  		booking.fields.kidsFromSeven.change(booking.fields.kidsChange);
  		booking.fields.kidsFromEleven.change(booking.fields.kidsChange);
  		
  		booking.fields.singleRooms.change(function() {
  		  booking.fields.distribute('singleRooms');
  		});
  		booking.fields.doubleRooms.change(function() {
  		  booking.fields.distribute('doubleRooms');
  		});
  		booking.fields.maisonettes.change(function() {
  		  booking.fields.distribute('maisonettes');
  		});
  		
  		booking.fields.singleRoomsWC.change(booking.calculate);
  		booking.fields.doubleRoomsWC.change(booking.calculate);
  		booking.fields.maisonettesWC.change(booking.fields.updateOptions);
  		
      $('#booking-form-kids-room-parents').change(booking.fields.updateOptions);
      $('#booking-form-kids-room-own').change(booking.fields.updateOptions);
    }
  };
})();

$(function() {
	if ($('#start-teaser')[0] && !($.browser.msie && $.browser.version == 6)) {
    Teaser.init();
	}
	
	if ($('#images-image')[0]) {
		Images.init();
	}
	
	if ($('#webcam-image')[0]) {
    Webcam.init();
	}
	
	if ($('#booking-form')[0]) {
	  MC.Booking.init();
	}
	
	$('#form-calendar-select-day').change(function(event) {
	  event.target.form.submit();
	});
	
	if ($('#newsletter-email')[0]) {
		$('#newsletter-email').click(function(event) {
			if (event.target.value == 'E-Mail Adresse') {
				this.select();
			}
		});
	}
	
	$('div.adjustable-input input').each(function(i, input) {
	  $('<a></a>').addClass('increase').attr('href', '#').insertAfter(input).click(function(event) {
	    event.preventDefault();
	    
	    var value = parseInt(input.value);
	    
	    if (value === NaN) {
	      input.value = 0;
	    } else if (value < 25) {
	      input.value = value + 1;
	    }
	    
	    $(input).change();
	  });
	  $('<a></a>').addClass('decrease').attr('href', '#').insertAfter(input).click(function(event) {
	    event.preventDefault();
	    
	    var value = parseInt(input.value);
	    
	    if (value === NaN) {
	      input.value = 0;
	    } else if (value > 0) {
	      input.value = value - 1;
	    }
	    
	    $(input).change();
	  });
	});
	
	if ($('#form-calendar-edit-repeat')[0]) {
	  $('#form-calendar-edit-repeat').change(function(event){
	    if (event.target.checked) {
	      $('#form-calendar-edit-startdate')[0].disabled = true;
	      $('#form-calendar-edit-enddate')[0].disabled = true;
	    } else {
	      $('#form-calendar-edit-startdate')[0].disabled = false;
	      $('#form-calendar-edit-enddate')[0].disabled = false;
	    }
	  });
	}
	
	if ($('#form-calendar-edit-unlink')[0]) {
	  $('#form-calendar-edit-unlink').change(function(event) {
	    if (event.target.checked) {
	      $('#form-calendar-edit-startdate')[0].disabled = false;
	      $('#form-calendar-edit-enddate')[0].disabled = false;
	    } else {
	      $('#form-calendar-edit-startdate')[0].disabled = true;
	      $('#form-calendar-edit-enddate')[0].disabled = true;
	    }
	  });
	  
	  $('#form-calendar-edit-startdate')[0].disabled = true;
    $('#form-calendar-edit-enddate')[0].disabled = true;
	}
});
