var dmsHhCardForm = new Class({

    cardRows : Array(),

    init : function(cardRows){
	if(cardRows){
	    this.cardRows = cardRows;

	    this.cardRows.each(function(row){

		var productSelector = row.getElement('select.dms_hh-card_select');
		var productNumber = row.getElement('input.dms_hh-card_number');
		var productDate = row.getElement('input.datepicker');
		var productForm = row.getElement('form');
		row.numberOfResults = true;

		if(productSelector){
		    productSelector.addEvent('change', this.productSelectorChange.bindWithEvent(this, row));
		    this.productSelectorChange(null, row);
		}

		if(productNumber){
		    productNumber.addEvent('keyup', this.numberSelectorChange.bindWithEvent(this, row));
		}

		if(productDate){
		    productDate.addEvent('change', this.refreshPrice.bindWithEvent(this, row));
		    productDate.addEvent('change', this.dateChange.bindWithEvent(this, row));
		    productDate.addEvent('change', this.validBookingLeadTime.bindWithEvent(this, row));
		}

		if(productForm){
		    productForm.addEvent('submit', this.validateForm.bindWithEvent(this, row));
		}

	    },this);

	}
    },

    productSelectorChange : function(event, row){

	var detailLink = row.getElement('a.detail_link');
	var productSelector = row.getElement('select.dms_hh-card_select');
	var productNumber = row.getElement('input.dms_hh-card_number');
	var productPrice = row.getElement('td.col_price p');

	if(detailLink && productSelector && productNumber && productPrice){
	    if(productSelector.selectedIndex > 0){

		var newProductPrice = new Element(productSelector.options[productSelector.selectedIndex]).getProperty('workflow:price');
		var newNumberOfProducts = productNumber.value;
		productPrice.setText((newProductPrice*newNumberOfProducts).toFixed(2) + ' €');

		var newDetailLink = new Element(productSelector.options[productSelector.selectedIndex]).getProperty('workflow:detail');
		detailLink.setProperty('href',newDetailLink);

	    }else if(productSelector.length > 1){
		productPrice.setText('0,00 €');
	    }

	    this.dateChange(event, row);
	}
    },

    numberSelectorChange : function(event, row){
	
	var productSelector = row.getElement('select.dms_hh-card_select');
	var productNumber = row.getElement('input.dms_hh-card_number');
	var productPrice = row.getElement('td.col_price p');

	if(productSelector && productNumber && productPrice){
	    if(productSelector.selectedIndex > 0 &&  !isNaN(productNumber.value)){

		var newProductPrice = new Element(productSelector.options[productSelector.selectedIndex]).getProperty('workflow:price');
		var newNumberOfProducts = productNumber.value;
		productPrice.setText((newProductPrice*newNumberOfProducts).toFixed(2) + ' €');
	    }
	}
    },

    dateChange : function(event, row){

	var productSelector = row.getElement('select.dms_hh-card_select');
	var productDate = row.getElement('input.datepicker');

	if(productSelector){
	    if(productSelector.selectedIndex > 0){

		var fromDateElement = row.getNext().getElement('strong.from');
		var toDateElement = row.getNext().getElement('strong.to');

		var days = new Element(productSelector.options[productSelector.selectedIndex]).getProperty('workflow:days');

		var dateDe = productDate.value.split('.');
		var dateEn = productDate.value.split('/');
		var dateFrom;
		var dateTo;

		if(dateDe.length != 3 && dateEn.length != 3) {
		    return false;
		}else if(dateDe.length == 3) {
		    dateDe = new Date(dateDe[2], dateDe[1]-1, dateDe[0]);

		    if(parseInt(days) == 1) {
			dateDe.setDate(parseInt(dateDe.getDate())-1);
			dateFrom = dateDe.getDate() + '.' + (dateDe.getMonth()+1) + '.' + dateDe.getFullYear() + ' 18:00 Uhr'
		    
		    }else if(parseInt(days) > 1) {
			dateFrom = dateDe.getDate() + '.' + (dateDe.getMonth()+1) + '.' + dateDe.getFullYear() + ' 00:01 Uhr'
		    }

		    if(parseInt(days) == 1) {
			dateDe.setDate(parseInt(dateDe.getDate())+parseInt(days)+1);

		    }else if(parseInt(days) > 1) {
			dateDe.setDate(parseInt(dateDe.getDate())+parseInt(days));
		    }

		    dateTo = dateDe.getDate() + '.' + (dateDe.getMonth()+1) + '.' + dateDe.getFullYear() + ' 6:00 Uhr';
		    
		}else if(dateEn.length == 3) {
		    dateEn = new Date(dateEn[2], dateEn[0]-1, dateEn[1]);

		    if(parseInt(days) == 1) {
			dateEn.setDate(parseInt(dateEn.getDate())-1);
			dateFrom = (dateEn.getMonth()+1) + '/' + dateEn.getDate() + '/' + dateEn.getFullYear() + ' 6:00 PM'

		    }else if(parseInt(days) > 1) {
			dateFrom = (dateEn.getMonth()+1) + '/' + dateEn.getDate() + '/' + dateEn.getFullYear() + ' 12:01 PM'
		    }

		    if(parseInt(days) == 1) {
			dateEn.setDate(parseInt(dateEn.getDate())+parseInt(days)+1);

		    }else if(parseInt(days) > 1) {
			dateEn.setDate(parseInt(dateEn.getDate())+parseInt(days));
		    }

		    dateTo = (dateEn.getMonth()+1) + '/' + dateEn.getDate() + '/' + dateEn.getFullYear() + ' 6:00 AM';
		}

		row.getNext().getElement('strong.from').setText(dateFrom);
		row.getNext().getElement('strong.to').setText(dateTo);
		row.getNext().getElement('div.text_red').setStyle('display','');

	    }else if(productSelector.selectedIndex == 0){
		row.getNext().getElement('div.text_red').setStyle('display','none');
	    }
	}
    },

    validBookingLeadTime : function(event, row){

	var bookingDate = row.getElement('input.datepicker');
	var todayDate = new Date();
	todayDate.setHours(0, 0, 0, 0);

	var dateDe = bookingDate.value.split('.');
	var dateEn = bookingDate.value.split('/');

	if(dateDe.length != 3 && dateEn.length != 3) {
	    return false;
	}else if(dateDe.length == 3) {
	    bookingDate = new Date(dateDe[2], dateDe[1]-1, dateDe[0]);
	}else if(dateEn.length == 3) {
	    bookingDate = new Date(dateEn[2], dateEn[0]-1, dateEn[1]);
	}

	var diffDays = bookingDate.getTime() - todayDate.getTime();
	diffDays = (((diffDays / 1000) / 60) / 60) / 24;

	if(diffDays < 5){
	    row.getNext().getElement('div.infotext_red').setStyle('display','');
	}else {
	    row.getNext().getElement('div.infotext_red').setStyle('display','none');
	}
    },

    validateForm : function(event, row){
	event = new Event(event);

	var productSelector = row.getElement('select.dms_hh-card_select');
	var productNumber = row.getElement('input.dms_hh-card_number');
	var productDate = row.getElement('input.datepicker');
	var shownAlert = false;

	if(productSelector.selectedIndex == 0 && !shownAlert){
	    alert(document.hhCardLanguage.errorCardType);
	    event.stop();
	    shownAlert = true;
	}

	if((productNumber.value == 0 || isNaN(productNumber.value)) && !shownAlert){
	    alert(document.hhCardLanguage.errorCardNumber);
	    event.stop();
	    shownAlert = true;
	}

	if(!productDate.value && !shownAlert){
	    alert(document.hhCardLanguage.errorDate);
	    event.stop();
	    shownAlert = true;
	}

	if(!row.numberOfResults && !shownAlert){
	    alert(document.hhCardLanguage.errorAvailable);
	    event.stop();
	    shownAlert = true;
	}
    },

    refreshPrice : function(event, row) {

	var curRow = row;
	var productSelector = curRow.getElement('select.dms_hh-card_select');
	var productDate = curRow.getElement('input.datepicker');
	
	if(productSelector && productDate){

	    if(productDate.value){
		var cardId = '';
		    
		productSelector.getElements('option').each(function(item, index){
		    if(!index == 0){
			cardId += item.getProperty('value')+',';
		    }
		});

		var date = row.getElement('input.datepicker').value

		var priceRequest = new Json.Remote("/index.php?eID=nawork_workflow_ajax&action=refreshCardPrice",{
		    method: 'get',
		    onSuccess: function(responseJSON, responseText){
			var hhcards =  Json.evaluate(responseJSON);

			if(hhcards.numberOfResults > 0) {

			    curRow.numberOfResults = true;

			    curRow.getElement('select.dms_hh-card_select').getElements('option').each(function(item, index){

				hhcards.cards.each(function(card, cardIndex){

				    if(item.getProperty('value') == card.id){

					if(item.getProperty('workflow:price') != card.price){
					    row.getNext().getElement('div.pricechanged_red').setStyle('display','');
					}

					item.setProperty('workflow:price', card.price);
					item.setText(document.hhCardLanguage.labelTicketDay[item.getProperty('workflow:days')] +' '+ card.price.toFixed(2) + ' €');
				    }
				});


			    });
			    curRow.getElement('span.smallest_price').setText(hhcards.smallestPrice);
			    document.dmsHhCardForm.numberSelectorChange(event, curRow);
			}else {
			    curRow.numberOfResults = false;
			}
		    }
		}).send({
		    'date' : date,
		    'cardId' : cardId,
		    'lang' : document.hhCardLanguage.lang
		});
		
	    }
	}
    }
});


window.addEvent('domready', function()	{

    document.dmsHhCardForm = new dmsHhCardForm();
    document.dmsHhCardForm.init($$('table.dms_stl_table tr.row_card'));
});