Calendar.setup=function(params)
{
function param_default(pname,def)
		{
			if(typeof params[pname]=="undefined")
				{params[pname]=def;}
		};
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"]);
param_default("firstDay",1);
param_default("align","Br");
param_default("range",[1900,2999]);
param_default("weekNumbers",true);
param_default("flat",null);
param_default("flatCallback",null);
param_default("onSelect",null);
param_default("onClose",null);
param_default("onUpdate",null);
param_default("date",null);
param_default("showsTime",false);
param_default("timeFormat","24");
param_default("electric",true);
param_default("step",2);
param_default("position",null);
param_default("cache",false);
param_default("showOthers",false);
param_default("input_sira",null);
var tmp=["inputField","displayArea","button"];
	for(var i in tmp)
	{
		if(typeof params[tmp[i]]=="string")
			{
				if(params.input_sira)
					{
					my_sira_ = params.input_sira;
					params[tmp[i]] = document.getElementById(params[tmp[i]][my_sira_]);
					}
				else
					{
					params[tmp[i]]=document.getElementById(params[tmp[i]]);
					}
			}
	}

if(!(params.flat||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.flat)
				{
					if(typeof p.flatCallback=="function")
						p.flatCallback(cal);
					else 
						alert("No flatCallback given -- doing nothing.");
					return false;
				}
			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&&p.singleClick&&cal.dateClicked)
				cal.callCloseHandler();
			if(update&&typeof p.onUpdate=="function")
				p.onUpdate(cal);
	};
	
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.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.create(params.flat);
		cal.show();
		return false;
	}
	
	var triggerEl=params.button||params.displayArea||params.inputField;triggerEl["on"+params.eventName]=function(){var dateEl=params.inputField||params.displayArea;var dateFmt=params.inputField?params.ifFormat:params.daFormat;var mustCreate=false;var cal=window.calendar;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();}cal.showsOtherMonths=params.showOthers;cal.yearStep=params.step;cal.setRange(params.range[0],params.range[1]);cal.params=params;cal.setDateStatusHandler(params.dateStatusFunc);cal.setDateFormat(dateFmt);if(mustCreate)cal.create();cal.parseDate(dateEl.value||dateEl.innerHTML);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;};};