﻿(function( $ ){
	
	/* monat 0 basiert wird benötigt, um den slider beim init an die richtige pos zu setzten */
	var curtmpdate 			= new Date()
	var currentmonth 		= curtmpdate.getMonth(); 
	var slidespeed			= 250;

	var $datepicker;
	
	var $controlyearleft;
	var $controlyearright;
	
	var $controlmonthleft;
	var $controlmonthright;

	var sliderstep ;
	var widthslider;
	var maxsliderpos;

	var currentyear;
	var $currentslider;
	var currentsliderpos;
	var nextyear;
	var $inputfield;
	
/* init */	
$.fn.datepicker = function(options) {
	
	$datepickerwrapper 			= this;

	

	var url = options.url;

	if(options.startyear){ url += '&start=' + options.startyear; }
	if(options.endyear){ url += '&end=' + options.endyear; }
	if(options.dateformat){ url += '&format=' + options.dateformat; }
	if(options.dateinpast || !options.dateinpast){ url += '&dip=' + options.dateinpast; }
	if(options.weekdaysonly){ url += '&wdo=' + options.weekdaysonly; }
	

	/* kalender von cf laden */
	$.get(url, function(data) {
		
		$datepickerwrapper.html(data);
		
		$datepicker 			= $('div#datepicker');
		
		$controlyearleft 		= $('a#goleftyear');
		$controlyearright 		= $('a#gorightyear');
		
		$controlmonthleft		= $('a#goleftmonth');
		$controlmonthright		= $('a#gorightmonth');
	
		sliderstep 				= parseInt($('div#datepicker').css('width'));
		widthslider				= sliderstep * 12;
		maxsliderpos			= sliderstep * 11;
		  
		/* setzte die sliderbreite anhand der breite des datepickers */
		$('div.monthslider').css('width',widthslider+'px');
	
		/* datepicker wieder schliessen */
		$(document).mousedown(function(event){
			
			var $target = $(event.target);
			
			/* switch controllers */
			switch ($target[0].id) {
			
				case 'gorightmonth' : 	gonextmonth();
										break;
				case 'goleftmonth'	:	goprevmonth();
										break;
				case 'gorightyear'	:	gonextyear();
										break;
				case 'goleftyear'	:	goprevyear();
										break;	
			}
			
			/* setze das gewählte datum */
			if($target.is('td') && $target.hasClass('withdate')){ setdate($target); }							
			
			/* click elsewhere */
			if($target.parents('#datepicker').length == 0 && $('div#datepicker-wrapper').size()){ $datepickerwrapper.hide(); }
			
			/* target welcher den datepicker öffnen lässt */
			if($target.hasClass('hasdatepicker')){ opendatepicker($target); }
			
		});
		
		/* triggert file not found */
		$('#datepicker-wrapper').ajaxError(function() {
			alert('missing: js/datepicker/datepicker.cfm!');
		});
		
	});	
	
};

	/* wenn der datepicker auf einen link oder img aufpoppen soll */
	function opendatepicker($target){ 
	
		var id 				= $target.attr('id').replace(/[^0-9]/g, '');
		
		if($('input#target_'+id).size()){
			
			var position 	= $target.offset();
			
			/* position muss je nach dem angepasst werden */
			$datepickerwrapper.css({left: (position.left), top: (position.top+25)});
			
			$inputfield 	= $('input#target_'+id);
			$datepickerwrapper.show();
			setdefaultpos();
		}
	}

  	/* zum nächsten monat sliden vor und zurück*/
	function slideTo(slidetopx){
		
		$currentslider.animate({left: slidetopx*-1 +'px'}, (slidespeed), 'swing', function(){
			currentsliderpos = slidetopx;
			controlcontollers();
		});
	}
	
	/* zum nächsten jahr sliden vor und zurück */
	function slideyear(nextslider, nextpos, currentpos){
	
		$currentslider.animate({left: currentpos*-1+'px'}, (slidespeed), 'swing');
		
		$(nextslider).animate({left: nextpos*-1+'px'}, (slidespeed), 'swing', function(){
			
			currentsliderpos 	= nextpos;
			
			$currentslider.css('left', sliderstep);
			$currentslider 		= nextslider;
			controlcontollers();
		});
	}
	
	/* controller ein und ausblenden */
	function controlcontollers(){
		
		if($('div#'+(currentyear + 1)).size()){ $controlyearright.removeClass('hidden');
		}else{ $controlyearright.addClass('hidden'); }
		
		if($('div#'+(currentyear - 1)).size()){ $controlyearleft.removeClass('hidden');
		}else{ $controlyearleft.addClass('hidden'); }
		
		if(currentsliderpos == maxsliderpos && !$('div#'+(currentyear + 1)).size()){$controlmonthright.addClass('hidden');
		}else{$controlmonthright.removeClass('hidden');}
		
		if(currentsliderpos == 0 && !$('div#'+(currentyear - 1)).size()){ $controlmonthleft.addClass('hidden');
		}else{ $controlmonthleft.removeClass('hidden'); }
		
	}
	
	/* controller einen monat vorwärts */
	function gonextmonth(){
		
		if(currentsliderpos == maxsliderpos){
			gonextyear();
		}else{
			var slidetopx = (currentsliderpos + sliderstep);
			slideTo(slidetopx);
		}
	}		
	 
	/* controller einen monat zurück */
	function goprevmonth(){
		
		if(currentsliderpos == 0){
			goprevyear();
		}else{
			var slidetopx = (currentsliderpos - sliderstep);
			slideTo(slidetopx);
		}
	}
		
	/* controller ein jahr vorwärts */
	function gonextyear(){
			
		$currentslider.css('z-index', 0);
		
		nextyear 			= parseInt(currentyear) + 1;
		var $nextslider 	= $('div#'+nextyear);
		
		$nextslider.css('z-index', 1);
		
		var nextslidetopx 	= 0;
		var currslidetopx 	= (currentsliderpos + sliderstep);
		
		slideyear($nextslider, nextslidetopx, currslidetopx);
		
		currentyear 		= nextyear;
	}
		
	/* controller ein jahr zurück */
	function goprevyear(){
			
		$currentslider.css('z-index', 0);
		
		nextyear 			= parseInt(currentyear) - 1;
		var $nextslider 	= $('div#'+nextyear);
		
		$nextslider.css('left', (sliderstep * -12))
		$nextslider.css('z-index', 1);
		
		var nextslidetopx 	= (sliderstep * 11);
		var currslidetopx 	= (currentsliderpos - sliderstep);
		
		slideyear($nextslider, nextslidetopx, currslidetopx);
		
		currentyear 		= nextyear;
	}
		
	/* setzte das gewählte datum in das input field und blendet den picker aus */
	function setdate($target){
		
		if(!$target.hasClass('disabled')){
			
			var date = $target.find('span.date').text();
			$inputfield.val(date);
			$datepickerwrapper.hide();
		}
	}
	
	/* set datepicker zum aktuellen datum  */
	function setdefaultpos(){
		
		currentyear			= parseInt($('div.monthslider.active').attr('id'));
		
		$currentslider		= $('div#'+currentyear);
		currentsliderpos	= currentmonth * sliderstep;
		
		$('div.monthslider').css({left: sliderstep+'px', 'z-index': 0});
		$('div.monthslider.active').css('z-index', 1);
		slideTo(currentsliderpos);
	}
  
})( jQuery );


