var daycollect = new Hash();
function getDates(y,m,d){
	// alert(d);
	$('ldr').show();
	//getEvts(y,m,d);
	if(daycollect.keys().indexOf("p"+y+""+m) != -1){
		// alert("lalala");
		days = daycollect["p"+y+""+m];
		cal.refresh();
		$('ldr').hide();
		//alert(days);
		return;
	}
	// запрос на календарь
	new Ajax.Request(url+"."+y+"."+m+extra+".html", 
		{
			method: 'get',
			onSuccess: function(transport){
				days = transport.responseText.evalJSON();
				daycollect["p"+y+""+m] = days;
				//alert(daycollect.inspect());
				var dt = cal.date;
				if(days.length != 0){
				cal.setDate(new Date(days[0][0], days[0][1], days[0][2]));
				cal.setDate(dt);
				}
				cal.refresh();
				$('ldr').hide();
			},
			onFailure: function(transport){}
		}
	);
}

function getEvts(y,m,d){
	// запрос на события
	$('ldr').show();
	new Ajax.Request(url2+"."+y+"."+m+"."+d+extra+".html", 
		{
			method: 'get',
			onSuccess: function(transport){
				//if(transport.responseText != ''){
					$("ctnt").innerHTML = transport.responseText;
				//}
				$('ldr').hide();
			},
			onFailure: function(transport){
				//alert(transport.responseText);
			}
		}
	);
}

var str = "";
Calendar.setup = function (params) {
	/*function disallowDate(date) {
	  // date is a JS Date object
	  if (  date.getFullYear() == 2007 &&
	        date.getMonth()    == 6 &&
	        date.getDate()     == 5  ) {
	    return true; // disable July 5 2003
	  }
	  return true; // enable other dates
	};*/
	
	//alert(days[0]);
	
	function dateStatusHandler(date, y, m, d){
		// str += m+" ";
		
		for(i=0; i<days.length; i++){
			da = days[i];
			if((da[0] == y) && (da[1] == m) && (da[2] == d)){
				return "aktiv";
			}
		}
		return "dsb";
	}
	
	
	function param_default(pname, def) { if (typeof params[pname] == "undefined") { params[pname] = def; } };
	// alert("sfgsfg");
	param_default("inputField",     null);
	param_default("displayArea",    null);
	param_default("button",         null);
	param_default("eventName",      "click");
	param_default("ifFormat",       "%Y/%m/%d");
	param_default("daFormat",       "%Y/%m/%d");
	param_default("singleClick",    true);
	param_default("disableFunc",    null);
	param_default("dateStatusFunc", params["disableFunc"]);	// takes precedence if both are defined
	param_default("dateText",       false);
	param_default("firstDay",       1);
	param_default("align",          "Br");
	param_default("range",          [1995, 2015]);
	param_default("weekNumbers",    false);
	param_default("flat",           null);
	param_default("flatCallback",   null);
	param_default("onSelect",       null);
	param_default("onClose",        null);
	param_default("onUpdate",       null);
	param_default("date",           new Date());
	param_default("showsTime",      false);
	param_default("timeFormat",     "24");
	param_default("electric",       true);
	param_default("step",           0);
	param_default("position",       null);
	param_default("cache",          false);
	param_default("showOthers",     true);
	param_default("multiple",       null);

	var tmp = ["inputField", "displayArea", "button"];
	for (var i in tmp) {
		if (typeof params[tmp[i]] == "string") {
			params[tmp[i]] = document.getElementById(params[tmp[i]]);
		}
	}
	if (!(params.flat || params.multiple || params.inputField || params.displayArea || params.button)) {
		alert("Calendar.setup:\n  Nothing to setup (no fields found).  Please check your code");
		return false;
	}
	

	
	function onSelect(cal) {
		var p = cal.params;
		var update = (cal.dateClicked || p.electric);
		if (update && p.inputField) {
			p.inputField.value = cal.date.print(p.ifFormat);
			if (typeof p.inputField.onchange == "function")
				p.inputField.onchange();
		}
		if (update && p.displayArea)
			p.displayArea.innerHTML = cal.date.print(p.daFormat);
		if (update && typeof p.onUpdate == "function")
			p.onUpdate(cal);
		if (update && p.flat) {
			if (typeof p.flatCallback == "function")
				p.flatCallback(cal);
		}
		if (update && p.singleClick && cal.dateClicked)
			cal.callCloseHandler();
		// alert(cal);
		// cal._init(1, cal.date);
	};

	if (params.flat != null) {
		if (typeof params.flat == "string")
			params.flat = document.getElementById(params.flat);
		if (!params.flat) {
			alert("Calendar.setup:\n  Flat specified but can't find parent.");
			return false;
		}
		var cal = new Calendar(params.firstDay, params.date, params.onSelect || onSelect);
		cal.setDateStatusHandler(dateStatusHandler);
		cal.showsOtherMonths = params.showOthers;
		cal.showsTime = params.showsTime;
		cal.time24 = (params.timeFormat == "24");
		cal.params = params;
		cal.weekNumbers = params.weekNumbers;
		cal.setRange(params.range[0], params.range[1]);
		//cal.setDateStatusHandler(params.dateStatusFunc);
		cal.getDateText = params.dateText;
		if (params.ifFormat) {
			cal.setDateFormat(params.ifFormat);
		}
		if (params.inputField && typeof params.inputField.value == "string") {
			cal.parseDate(params.inputField.value);
		}
		cal.create(params.flat);
		cal.show();
		// alert(cal.date);
		return cal;
	}
	

	var triggerEl = params.button || params.displayArea || params.inputField;
	
	triggerEl["on" + params.eventName] = function() {
		// alert("dfgsd");
		var dateEl = params.inputField || params.displayArea;
		var dateFmt = params.inputField ? params.ifFormat : params.daFormat;
		var mustCreate = false;
		var cal = window.calendar;
		if (dateEl)
		// alert(params.date);
			params.date = Date.parseDate(dateEl.value || dateEl.innerHTML, dateFmt);
		//alert(dateEl.value || dateEl.innerHTML);
		//alert(dateFmt);
		if (!(cal && params.cache)) {
			window.calendar = cal = new Calendar(params.firstDay,
							     params.date,
							     params.onSelect || onSelect,
							     params.onClose || function(cal) { cal.hide(); });
			cal.showsTime = params.showsTime;
			cal.time24 = (params.timeFormat == "24");
			cal.weekNumbers = params.weekNumbers;
			mustCreate = true;
		} else {
			if (params.date)
				cal.setDate(params.date);
			cal.hide();
		}
		if (params.multiple) {
			cal.multiple = {};
			for (var i = params.multiple.length; --i >= 0;) {
				var d = params.multiple[i];
				var ds = d.print("%Y%m%d");
				cal.multiple[ds] = d;
			}
		}
		cal.showsOtherMonths = params.showOthers;
		cal.yearStep = params.step;
		cal.setRange(params.range[0], params.range[1]);
		cal.params = params;
		cal.setDateStatusHandler(params.dateStatusFunc);
		cal.getDateText = params.dateText;
		cal.setDateFormat(dateFmt);
		if (mustCreate)
			cal.create();
		cal.refresh();
		if (!params.position)
			cal.showAtElement(params.button || params.displayArea || params.inputField, params.align);
		else
			cal.showAt(params.position[0], params.position[1]);
		return false;
	};
	
	
	return cal;
};
