(function($){  
	$.fn.calendar = function(options) {  
		
		// Options
		var d = $.extend({
			use_ajax : true,
			ajax_url : 'http://www.putovanja.info/ajax.php',
			ajax_inputs : ['iz', 'za'],
			ajax_preloader: true,
			condition_value : 'BEG',
			linked : true,
			first : false,
			second : false,
			days : 365
		}, options);
		
		// Registry
		var r = {
			total : 0,
			days : [],
			start : [],
			end : [],
			openned : false,
			prev_time : 0
		};
		var ajax_data = [];
		
		// Callback kalendara
		// označava datume
		var dp_callback = function($td, thisDate) {
			for(var i=0; i< r.total; i++) {
				for(var j=0; j< r.days[i].length; j++) {
					if(r.days[i][j] == 7) r.days[i][j]=0;	// nedelja je 0, a ne 7 :S
					if ($td.is('.current-month') && thisDate.getTime() >= r.start[i] && thisDate.getTime() <= r.end[i] && thisDate.getDay() == r.days[i][j]) {
						$td.addClass('promo');
					}			  				  
				}
			}
			
		};
		var dp_callback_clear = function($td, thisDate) {
			$td.removeClass('promo');
		};
		
		// Ajax response
		// Funkcija koja se poziva kada se izvrsi ajax
		function ajax_response(e, id) {
			//console.log(ajax_data[id]);
			if(ajax_data[id] && ajax_data[id].length > 22) {
				var s = ajax_data[id].split('#');
				for(var i=0; i< s.length; i++) {
					s2 = s[i].split('|');
					r.start[i] = parseInt(s2[0]*1000);
					r.end[i] = parseInt(s2[1]*1000);
					r.days[i] = s2[2].split(',');
				}
				r.total=s.length;//console.log(r.days);
				$(e).dpSetRenderCallback(dp_callback).dpDisplay();
				
			} else {
				$(e).dpSetRenderCallback(dp_callback_clear).dpDisplay();
			}
			
		}
		
		// Glavna metoda, prolazmo kroz svaki nađeni element i radimo svašta :)
		this.each(function() {
			var e = this;
			// Pravimo event za svaki element.
			$(e).bind('focus', function() {
				// označiti da je otvoren
				r.openned = true; 
				// podaci za ajax, pokupimo inpute oznacene id-em
				// koje ćemo slati preko POST-a ajaxom
				// i usput kreiramo kljuc za ajax_data niz
				if(d.use_ajax) {
					var post_data = '', ajaxkey = $(e).attr('id'), filled = true;
					$.each(d.ajax_inputs, function() {
						if($('#'+this).val().length != 3) 
							filled = false;
						post_data += this +'='+ $('#'+this).val() +'&';
						ajaxkey += $('#'+this).val();
					});
				}
				// ako se ne koristi ajax, ili nije ispunjen uslov za ajax
				// prikazujemo samo običan kalendar
				//console.log($('#'+d.ajax_inputs[0]).val());
				if(!filled || !d.use_ajax || (d.use_ajax && $('#'+d.ajax_inputs[0]).val() != d.condition_value && $('#'+d.ajax_inputs[1]).val() != d.condition_value)) {
					//console.log('Nije BEG');
					$(e).dpSetRenderCallback(dp_callback_clear).dpDisplay();
					return;
				}
				
				
				//console.log(ajaxkey);
				
				// Ajax se poziva samo ako do sada nismo već pokupili podatke
				if(!ajax_data[ajaxkey]) {
					// Dodaj ajax preloader ikonicu na input dok se ajax ne izvrši
					if(d.ajax_preloader) $(e).addClass('preloader');
					$.ajax({
						type: "GET",
						url: d.ajax_url,
						data: post_data +'input='+ $(e).attr('name'),
						success: function(msg){
							if(msg == '') {
								ajax_data[ajaxkey] = '0';
								$(e).dpSetRenderCallback(dp_callback_clear).dpDisplay();
								if(d.ajax_preloader) $(e).removeClass('preloader');
								return;	
							}
							ajax_data[ajaxkey] = msg;
							ajax_response(e, ajaxkey);
							if(d.ajax_preloader) $(e).removeClass('preloader');
						}
					});
				} else {
					ajax_response(e, ajaxkey);
				}
			}).click(function() {
				if(!r.openned) {
					$(this).trigger('focus');
				}
				
			});
			
			if(!d.first) d.first = this;
			else d.second = this;
		});
		// Povezi kalendarčiće
		if(d.linked) {
			$(d.first).bind('dpDisplayed', function() { 
				r.prev_time = parseInt($(d.first).dpGetSelected());
				//console.log(r.prev_time);
			});
			$(d.first).bind('dateSelected', function(e, selectedDate) {
				//var sd = new Date(parseInt(selectedDate));
							
				if($(d.second).val() != '') {
					var sec_sd = new Date(parseInt($(d.second).dpGetSelected()));
					$(d.second).dpSetSelected(sec_sd.addDays((selectedDate.getTime()-r.prev_time)/(1000*24*60*60)).asString());
				}
				$(d.second).dpSetStartDate(selectedDate.asString())
					.dpSetEndDate(selectedDate.addDays(d.days).asString());
			});
		}
		
		$(d.first).bind('dpClosed', function() {
			r.openned = false;
		});
		$(d.second).bind('dpClosed', function() {
			r.openned = false;
		});
	};
})(jQuery);