// package default
var defaultStartDate = +42;
var defaultEndDate = +56;
var selectedArea = '';
 
jQuery(document).ready(function() {
	jQuery('.dp .dpFromContainer input[@type=text]:first').click(function() {
		buildDP(jQuery(this).parent(), 0, 'Hinreise')
	});
	jQuery('.dp .dpToContainer input[@type=text]:first').click(function() {
		buildDP(jQuery(this).parent(), 1, 'R\xFCckreise')
	});
});
 

function buildDP(container, section, label) {
	jQuery('.dp .dplayer').hide();
	if(!container.next('.dplayer').length) {
		var selectOptions = '';
		for(var area in vacations) {
			selectOptions += '<option value="' + area + '">' + area + '</option>';
		}
		container.after('<div class="dplayer"><div class="dpclose">Fenster schliessen</div><iframe class="dplayeriframe" frameborder="0"></iframe><div class="dptmp" id="dptmp' + section + '"></div><label style="width:75px; padding:5px 0 2px 5px;">Schulferien:</label><select class="dpvac"><option value="">Kanton w&auml;hlen</option>' + selectOptions + '</select></div>');
	}
	
	jQuery('.dpvac option').each(function() {
		if(jQuery(this).val() == selectedArea) {
			jQuery(this).attr('selected', 'selected');
		}
	});
		
	containerLayer = container.next('.dplayer');
	containerLayer.find('.dptmp').datepicker(getDPConf(container, containerLayer, section));

	if(container.find('input[@type=text]:first').attr('value')) {
		var dpDate = container.find('input[@type=text]:first').attr('value').split('.');
		if(dpDate.length == 3) {
			containerLayer.find('.dptmp').datepicker('setDate', new Date(dpDate[2], dpDate[1]-1, dpDate[0]));
		}
	}
	
	containerLayer.find('.dpvac').change(function(){
		selectedArea = jQuery('.dpvac').find('[@selected]').attr('value').replace('ü', '&uuml;');
		initDP(container, containerLayer, section);
		buildMonthYearCombo('#dptmp' + section, label);
	});

	containerLayer.find('.dpclose').click(function(){containerLayer.hide();});
	initDP(container, containerLayer, section);
	buildMonthYearCombo('#dptmp' + section, label);
	containerLayer.show();
	containerLayer.find('.dplayeriframe').css({'width': containerLayer.width(), 'height': containerLayer.height()});
}

function initDP(container, containerLayer, section) {
	var dp = containerLayer.find('.dptmp').datepicker('getDate');
	containerLayer.find('.dptmp').datepicker('change', getDPConf(container, containerLayer, section));
	if(dp) {
		containerLayer.find('.dptmp').datepicker('setDate', dp);
	}
}

function getDPConf(container, containerLayer, section) {
	if(!section) {
		return {
			beforeShowDay: markVac,
			minDate: new Date(),
			maxDate: new Date(new Date().getFullYear()+1, 11, 31),
			onSelect: submitDP,
			defaultDate: defaultStartDate			
		}
	} else {
		var otherDP = container.prev('.dpFromContainer');
		if(!otherDP.length) {
			var otherDP = container.prev().prev('.dpFromContainer');
		}
		var dpDate = otherDP.find('input[@type=text]:first').attr('value').split('.');
		minDate = (dpDate.length == 3) ? new Date(dpDate[2], dpDate[1]-1, dpDate[0]) : new Date();
		return {
			beforeShowDay: markVac,
			minDate: minDate,
			maxDate: new Date(new Date().getFullYear()+1, 11, 31),
			onSelect: submitDP,
			defaultDate: defaultEndDate
		}
	}
}

function submitDP() {
	jQuery('.dp .dplayer:visible').each(function() {
		var dp = jQuery(this).find('.dptmp').datepicker('getDate');
		jQuery(this).prev('.formseperator').find('input[@type=text]:first').attr('value', jQuery.datepicker.formatDate('dd.mm.yy', dp));
		if(jQuery(this).next('.formseperator').length) {
			var dpTo = jQuery(this).next('.formseperator').find('input[@type=text]:first').attr('value').split('.');
			if(dpTo.length == 3) {
				if(dp.getTime() > new Date(dpTo[2], dpTo[1]-1, dpTo[0]).getTime()) {
					dpToNew = dp.addDays(+1);
					jQuery(this).next('.formseperator').find('input[@type=text]:first').attr('value', jQuery.datepicker.formatDate('dd.mm.yy', dpToNew));
				}
			}
		}
		jQuery(this).hide();
	});
}

function buildMonthYearCombo(preSel, label) {
	var monthYearCombo = '<div class="monthYearComboLabel">' + label + '</div>';
	monthYearCombo += '<select onchange="changeMonthYearCombo(\'' + preSel + '\')">';
	jQuery(preSel).find('.ui-datepicker-new-year option').each(function(j) {
		var yearVal = jQuery(this).val();
		var yearLabel = jQuery(this).text();
		var monthsArr = new Array('Januar', 'Februar', 'M&auml;rz', 'April', 'Mai', 'Juni', 'Juli', 'August', 'September', 'Oktober', 'November', 'Dezember');
		var offset= !j ? monthsArr.length-jQuery(preSel).find('.ui-datepicker-new-month option').length : 0;
		for(var i=offset; i<monthsArr.length; i++) {
			if(new Date(yearVal, i, 31) > new Date()) {
				monthYearCombo += '<option value="' + yearVal + '_' + i + '">' + monthsArr[i] + ' ' + yearLabel + '</label>';
			}
		}
	});
	monthYearCombo += '</select>';
	jQuery(preSel + ' .monthyearcombo').remove();
	jQuery(preSel).prepend('<div class="monthyearcombo">' + monthYearCombo + '</div>');

	jQuery(preSel + ' .monthyearcombo select option[value=' + jQuery(preSel).find('.ui-datepicker-new-year option:selected').val() + '_' + jQuery(preSel).find('.ui-datepicker-new-month option:selected').val() + ']').attr('selected', 'selected');
}

function changeMonthYearCombo(preSel) {
	var monthYear = jQuery(preSel + ' .monthyearcombo option:selected').val().split('_');
	jQuery(preSel + ' .ui-datepicker-new-month option[value=' + monthYear[1] + ']').attr('selected', 'selected');
	jQuery.datepicker._selectMonthYear(preSel, document.getElementById(preSel.split('#')[1]).getElementsByTagName('select')[1], 'M');
	jQuery(preSel + ' .ui-datepicker-new-year option[value=' + monthYear[0] + ']').attr('selected', 'selected');
	jQuery.datepicker._selectMonthYear(preSel, document.getElementById(preSel.split('#')[1]).getElementsByTagName('select')[2], 'Y');
}

function markVac(dateElm) {
	if(selectedArea) {
		if (vacations[selectedArea].length) {
			ret = showDays(vacations[selectedArea]);			
			if (ret) {
				return ret;
			}
		}
	}
	
	if(holidays){
		ret = showDays(holidays['global'], dateElm);
		if(ret){
			return ret;
		}
	}
}

function showDays(markedDays){
	for(i=0; i<markedDays.length; i++) {
		var dpFromParts = markedDays[i][0].split('.');
		var dpFrom = new Date(dpFromParts[2], dpFromParts[1]-1, dpFromParts[0]).getTime();
		if(markedDays[i].length == 2) {
			var dpToParts = markedDays[i][1].split('.');
			var dpTo = new Date(dpToParts[2], dpToParts[1]-1, dpToParts[0]).getTime();
			if(dateElm.getTime() >= dpFrom && dateElm.getTime() <= dpTo) {
				return [true, 'ui-datepicker-vacation'];
			}
		}
		if(dateElm.getTime() == dpFrom) {
			return [true, 'ui-datepicker-vacation'];
		}
	}	
}

