/**
 * @author gumfi
 */
window.addEvent('domready',function(){
	
	var mailForm = $('vdvPurchaseForm');
	var checkSubmit = $('checkSubmittedFields');
	var vdvSidebarPurchase = $('vdvSidebarPurchase');
	var purchaseForm = null;
	
	var actDateMonth = new Array("Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec");
	
		var langEditButton = 'bearbeiten';
		var langSaveButton = 'speichern';
		if (langID == 'en') {
			langEditButton = 'edit';
			langSaveButton = 'save';
		}
		else if (langID == 'nl') {
			langEditButton = 'bewerk';
			langSaveButton = 'redden';
		}
	function createDateOptions(){
		//Holen der Elemente in denen die Auswahlfelder sind
		var formFieldDate = mailForm.getElements('.formFieldDate');
		
		formFieldDate.each(function(element, index){
			
			//Inputdummyfelder Löschen
			var inputField = element.getElement('input');
			var dateContainerID = inputField.getProperty('id');
			inputField.dispose();
			
			//Anhand des Labels herrausfinden ob es das Ankunftsdatum oder Abreisedatum ist
			var labelField = element.getElement('label');
			labelField = labelField.getProperty('for');
			
			//Erstellen der Selectfelder
			var dateContainer = new Element('div', {
				'id': dateContainerID
			});
			element.grab(dateContainer);
			var fieldDay = new Element('select', {
				'name': labelField + 'Day',
				'id': labelField + 'Day',
				'class': 'required'
			});
			dateContainer.grab(fieldDay);
			var fieldMonth = new Element('select', {
				'name': labelField + 'Month',
				'id': labelField + 'Month',
				'class': 'required'
			});
			dateContainer.grab(fieldMonth);
			var fieldYear = new Element('select', {
				'name': labelField + 'Year',
				'id': labelField + 'Year',
				'class': 'required'
			});
			dateContainer.grab(fieldYear);
			
			//Leeres Datum erstellen und einen Monatsarray erstellen
			var actDate = new Date();
			actDateMonth = new Array("Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec");
			
			//Ein leeres Optionselement erstellen und ein Platzhalter für das Selektierte Feld 
			var optionElement = '';
			var optionSelected = '';
			var optNoneSelect = true;
			var endOfMonth = false;
			var daysInMonth;
			var moduloMonth = actDate.getMonth() % 2;
			if(actDate.getMonth() < 7) {
				if(moduloMonth == 0) {
					daysInMonth = 31;
				} else if(moduloMonth == 1) {
					daysInMonth = 30;
				}
				if(moduloMonth == 1 && actDate.getMonth() == 1) {
					var thisYear = actDate.getFullYear();
					daysInMonth = 28;
					if((thisYear % 4 == 0 && thisYear % 100 != 0) || thisYear % 400 == 0)
					daysInMonth = 29;
				}
			} else {
				if(moduloMonth == 0) {
					daysInMonth = 30;
				} else if(moduloMonth == 1) {
					daysInMonth = 31;
				}
			}
	//		alert(Date.UTC(2008, 9, 31, 00, 00, 00));
			//Die Optionselemente für die Tage erstellen
			for (var i = 01; i <= 31; i++) {
				optionElement = new Element('option', {
					'html': i,
					'value':i
				});
				
				if(actDate.getDate() == daysInMonth - 1 && optNoneSelect == true) {
					if(labelField == 'fieldArrival' && i == daysInMonth) {
						optionElement.setProperty('selected', 'selected');
						optNoneSelect = false;
					} else if(labelField == 'fieldCheckOut' && i == 01) {
						optionElement.setProperty('selected', 'selected');
						optNoneSelect = false;
					}
				} else if(actDate.getDate() == daysInMonth && optNoneSelect == true) {
					if(labelField == 'fieldArrival' && i == 01) {
						optionElement.setProperty('selected', 'selected');
						optNoneSelect = false;
					} else if(labelField == 'fieldCheckOut' && i == 02) {
						optionElement.setProperty('selected', 'selected');
						optNoneSelect = false;
					}
				}
				
				if(labelField == 'fieldArrival' && i == Cookie.read('fieldArrivalDay')) {
					optionElement.setProperty('selected', 'selected');
					optNoneSelect = false;
				} else if(labelField == 'fieldCheckOut' && i == Cookie.read('fieldCheckOutDay')) {
					optionElement.setProperty('selected', 'selected');
					optNoneSelect = false;
				} else if (labelField == 'fieldArrival' && i == actDate.getDate() + 1 && optNoneSelect == true) {
					optionElement.setProperty('selected', 'selected');
				} else if(labelField == 'fieldCheckOut' && i == actDate.getDate() + 2 && optNoneSelect == true) {
					optionElement.setProperty('selected', 'selected');
				}
				
				fieldDay.grab(optionElement);
			}
			
			//Die Optionselemente für die Monate erstellen
			var optionMonth = '';
			optNoneSelect = true;
			for (var i = 0; i <= 11; i++) {
				optionMonth = actDateMonth[i];
				optionElement = new Element('option', {
					'html': optionMonth,
					'value': optionMonth
				});
				
				 if(actDate.getMonth() == 11 && actDate.getDate() == daysInMonth - 1 && optNoneSelect == true) {
					if(labelField == 'fieldArrival' && i == actDate.getMonth()) {
						optionElement.setProperty('selected', 'selected');
						optNoneSelect = false;
					} else if(labelField == 'fieldCheckOut' && i == 0) {
						optionElement.setProperty('selected', 'selected');
						optNoneSelect = false;
					}
				} else if(actDate.getMonth() == 11 && actDate.getDate() == daysInMonth && optNoneSelect == true) {
					if(labelField == 'fieldArrival' && i == 0) {
						optionElement.setProperty('selected', 'selected');
						optNoneSelect = false;
					} else if(labelField == 'fieldCheckOut' && i == 0) {
						optionElement.setProperty('selected', 'selected');
						optNoneSelect = false;
					}
				} else if(actDate.getDate() == daysInMonth - 1 && optNoneSelect == true) {
					if(labelField == 'fieldArrival' && i == actDate.getMonth()) {
						optionElement.setProperty('selected', 'selected');
						optNoneSelect = false;
					} else if(labelField == 'fieldCheckOut' && i == actDate.getMonth() + 1) {
						optionElement.setProperty('selected', 'selected');
						optNoneSelect = false;
					}
				} else if(actDate.getDate() == daysInMonth && optNoneSelect == true) {
					if(labelField == 'fieldArrival' && i == actDate.getMonth() + 1) {
						optionElement.setProperty('selected', 'selected');
						optNoneSelect = false;
					} else if(labelField == 'fieldCheckOut' && i == actDate.getMonth() + 1) {
						optionElement.setProperty('selected', 'selected');
						optNoneSelect = false;
					}
				}
				
				if(labelField == 'fieldArrival' && optionMonth == Cookie.read('fieldArrivalMonth')) {
					optionElement.setProperty('selected', 'selected');
					optNoneSelect = false;
				} else if(labelField == 'fieldCheckOut' && optionMonth == Cookie.read('fieldCheckOutMonth')) {
					optionElement.setProperty('selected', 'selected');
					optNoneSelect = false;
				} else if(i == actDate.getMonth() && optNoneSelect == true) {
					optionElement.setProperty('selected', 'selected');
				}
				
				fieldMonth.grab(optionElement);
			}
			
			//Die Optionselemente für 4 Jahre erstellen
			var actYear = actDate.getFullYear();
			optNoneSelect = true;
			for (var i = actYear; i <= actYear + 3; i++) {
				optionElement = new Element('option', {
					'html': i,
					'value':i
				});
				
				if(actDate.getMonth() == 11 && actDate.getDate() == daysInMonth - 1 && optNoneSelect == true) {
					if(labelField == 'fieldArrival' && i == actYear) {
						optionElement.setProperty('selected', 'selected');
						optNoneSelect = false;
					} else if(labelField == 'fieldCheckOut' && i == actYear + 1) {
						optionElement.setProperty('selected', 'selected');
						optNoneSelect = false;
					}
				} else if(actDate.getMonth() == 11 && actDate.getDate() == daysInMonth && optNoneSelect == true) {
					if(labelField == 'fieldArrival' && i == actYear + 1) {
						optionElement.setProperty('selected', 'selected');
						optNoneSelect = false;
					} else if(labelField == 'fieldCheckOut' && i == actYear + 1) {
						optionElement.setProperty('selected', 'selected');
						optNoneSelect = false;
					}
				}
				
				if(labelField == 'fieldArrival' && i == Cookie.read('fieldArrivalYear')) {
					optionElement.setProperty('selected', 'selected');
					optNoneSelect = false;
				} else if(labelField == 'fieldCheckOut' && i == Cookie.read('fieldCheckOutYear')) {
					optionElement.setProperty('selected', 'selected');
					optNoneSelect = false;
				} else if(i == actYear && optNoneSelect == true) {
					optionElement.setProperty('selected', 'selected');
				}
				fieldYear.grab(optionElement);
			}
		});
	};
	
	function sidebarBox() {
		var purchaseButton = $('vdvSidebarPurchaseButton');
		purchaseForm = mailForm;
		mailForm = vdvSidebarPurchase;
		createDateOptions();
		
		$('fieldArrivalDay').setProperty('name', 'anreise_day');
		$('fieldArrivalMonth').setProperty('name', 'anreise_mon');
		$('fieldArrivalYear').setProperty('name', 'anreise_year');
		$('fieldCheckOutDay').setProperty('name', 'abreise_day');
		$('fieldCheckOutMonth').setProperty('name', 'abreise_mon');
		$('fieldCheckOutYear').setProperty('name', 'abreise_year');
		
		purchaseButton.addEvent('click', function(event) {
			event = new Event(event);
			Cookie.write('fieldArrivalDay', $('fieldArrivalDay').value);
			Cookie.write('fieldArrivalMonth', $('fieldArrivalMonth').value);
			Cookie.write('fieldArrivalYear', $('fieldArrivalYear').value);
			Cookie.write('fieldCheckOutDay', $('fieldCheckOutDay').value);
			Cookie.write('fieldCheckOutMonth', $('fieldCheckOutMonth').value);
			Cookie.write('fieldCheckOutYear', $('fieldCheckOutYear').value);
		});
		
		mailForm = purchaseForm;
		
	};
	
	function stepOne() {
		
		createDateOptions();
		
		var inputFields = mailForm.getElements('input');
		var requiredFields = mailForm.getElements('.required');
		var checkButton = mailForm.getElement('#fieldCheck');
		
		var fieldFill = function(){
			inputFields.each(function(field, index){
			
				var fieldIdent = field.getProperty('id');
				var fieldType = field.getProperty('type');
				
				if (fieldType == 'text') {
				
					var fieldLabel = field.getPrevious('label');
					if (fieldLabel.getProperty('for') == fieldIdent) {
					
						fieldLabel = fieldLabel.firstChild.data;
						
						field.setProperty('value', fieldLabel);
						
						var fieldFocus = function(){
							if (field.getProperty('value') == fieldLabel) {
								field.setProperty('value', '');
							}
						};
						
						field.addEvent('focus', function(){
							fieldFocus();
						});
						
						var fieldBlur = function(){
							if (field.getProperty('value') == '') {
								field.setProperty('value', fieldLabel);
							}
						};
						
						field.addEvent('blur', function(){
							fieldBlur();
						});
					}
				}
			});
		};
		fieldFill();
		
		var checkForm = function(e){
			var arrivalTimeStamp = null;
			var checkOutTimeStamp = null;
			var dateFields = mailForm.getElements('.formFieldDate');
			dateFields.each(function(element, index) {
				var dateField = element.getChildren('div');
				dateFields = element.getElements('select');
				var fieldDateDay = dateFields[0].getProperty('value');
				var fieldDateMonth = dateFields[1].selectedIndex;
				var fieldDateYear = dateFields[2].getProperty('value');
				
				if(dateField.getProperty('id') == 'fieldArrival') {
					arrivalTimeStamp = Date.UTC(fieldDateYear, fieldDateMonth, fieldDateDay, 00, 00, 00);
				} else if(dateField.getProperty('id') == 'fieldCheckOut') {
					checkOutTimeStamp = Date.UTC(fieldDateYear, fieldDateMonth, fieldDateDay, 00, 00, 00);
				}
			});
			
			requiredFields.each(function(element, index){
				
				var fieldIdent = element.getProperty('id');
				var fieldLabel = element.getPrevious('label');
				if (fieldLabel != null) {
					fieldLabel = fieldLabel.firstChild.data;
				} else {
					fieldLabel = '';
				}
				switch (element.get('tag')) {
					case 'input':
						switch (element.getProperty('type')) {
							case 'text': 
								if(element.value == '' || element.value == fieldLabel) {
									element.setStyles({
										'border': '1px solid #ff0000'
									});
									e.stop();
								} else {
									if(element.getProperty('name')== 'fieldEmail' && element.value.indexOf('@') == -1) {
										element.setStyles({
											'border': '1px solid #ff0000'
										});
										e.stop();
									} else {
										element.setStyles({
											'border': '1px solid #00cc00'
										});
									}
								}
								break;
							case 'checkbox':
								if(element.checked != true) {
									alert('Bitte lesen Sie die Datenschutzrichtlinien!');
									e.stop();
								}
								break;
						}
						break;
					case 'select':
						if(element.getParent('div#fieldArrival') || element.getParent('div#fieldCheckOut')) {
							if(arrivalTimeStamp < checkOutTimeStamp) {
								element.setStyles({
									'color': '#00cc00'
								});
							} else {
								element.setStyles({
									'color': '#ff0000'
								});
								e.stop();
							}
						} else if(element.value == '') {
							element.setStyles({
								'color': '#ff0000'
							});
							e.stop();
						} else {
							element.setStyles({
								'color': '#00cc00'
							});
						}
						break;
					
					default:
						
						break;
				}
			});
		};
		checkButton.addEvent('click', function(e){
			e = new Event(e);
			checkForm(e);
			
		});
	};
	
	/*
	 * Here begins the function for the page to check and change the submitted data 
	 */
	
	function stepTwo() {
		
		var checkChangeElement = new function(){
			
			var changeElements = checkSubmit.getElements('p');
			
			changeElements.each(function(element, index){
				var containerP = element;
				var elementID = element.getProperty('id');
				var elementTag = element.getProperty('class');
				var elementValue = element.get('text');
				var changeInputValue;
				
				var changeButton = new Element('span', {
					'html': langEditButton,
					'id': elementID,
					'class':'editField'
				});
				var saveButton = new Element('span', {
					'html': langSaveButton,
					'id': elementID,
					'class':'saveField'
				});
				var changeInput = new Element(elementTag, {
					'name': elementID,
					'value': elementValue
				});
				
				changeButton.inject(element);
				
				changeButton.addEvent('click', function(){
					element.removeProperty('text');
					this.dispose();
					this.set('text', langEditButton);
					element.grab(changeInput);
					if (changeInput.get('tag') == 'select') {
						var changeValue = new Request.JSON({
							'url': 'http://www.vandervalk.de/',
							'method': 'get',
							onComplete: function(jsonObjs){
								var selectFields = jsonObjs.requst;
								selectFields.each(function(element, index){
									if(element.name == elementID) {
										var selectOptions = element.options;
										selectOptions.each(function(element, index){
											var optionTag = new Element('option', {
												'text':element.option,
												'value':element.option
											});
											optionTag.inject(changeInput);
											saveButton.inject(containerP, 'bottom');
										});
									}
								});
							}
						}).send('type=187&task=get&langID=' + langID);
					} else {
						saveButton.inject(containerP, 'bottom');
					}
					
				});
				
				saveButton.addEvent('click', function(){
					changeInputValue = changeInput.value;
					changeInput.empty();
					var changeValue = new Request({
						'url': 'http://www.vandervalk.de/',
						'method': 'get'
					}).send('type=187&task=change&a=' + elementID + ',' + changeInputValue);
					element.set('text', changeInputValue);
					this.set('text', langSaveButton);
					changeButton.inject(element, 'bottom');
				});
			});
			
			var sendFormButtonCon = $('sendFormButtonCon');
			var sendFormButton = $('sendFormButton');
			var sendFormURI = sendFormButton.getProperty('href');
			var sendFormText = sendFormButton.get('text');
			var newSendFormButton = new Element('button', {
				'id':'newSendFormButton',
				'text':sendFormText
			});
			sendFormButton.dispose();
			newSendFormButton.inject(sendFormButtonCon);
			sendFormButtonCon.addEvent('click', function() {
				window.location.href = sendFormURI;
			});
			
		}
		
	};
	
	if($chk(vdvSidebarPurchase))
	sidebarBox();
	if($chk(mailForm))
	stepOne();
	if($chk(checkSubmit))
	stepTwo();
	
});