/*
 *
 * Copyright (c) 2004-2005 by Zapatec, Inc.
 * http://www.zapatec.com
 * 1700 MLK Way, Berkeley, California,
 * 94709, U.S.A.
 * All rights reserved.
 *
 *
 */
 
function calendar2(obj_target, obj_button) {
	var params = new Array();
	
	function param_default(pname,def) {
		params[pname]=def;
	};
	
	param_default("inputField",obj_target.name);
	param_default("displayArea",null);
	param_default("button",obj_button.id);
	param_default("eventName","click");
    param_default("ifFormat","%d%b%Y");
//    param_default("ifFormat","%Y-%m-%d");
    param_default("daFormat","%d%b%Y");
//    param_default("daFormat","%Y-%m-%d");
    param_default("singleClick",true);
	param_default("disableFunc",dateOutOfRange);
	param_default("dateStatusFunc",params["disableFunc"]);
	param_default("dateText",null);
	param_default("firstDay",null);
	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("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.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 Zapatec.Calendar(params.firstDay,params.date,params.onSelect||onSelect);
		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") {
            alert("params.inputField.value=" + params.inputField.value.toString());
            cal.parseDate(params.inputField.value);
		}
		cal.create(params.flat);
		cal.show();
		return cal;
	}
	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 Zapatec.Calendar(params.firstDay,params.date,params.onSelect||onSelect,params.onClose||function(cal) {
				if(params.cache)
					cal.hide();
				else
					cal.destroy();
				}
			);
			cal.showsTime=params.showsTime;
			cal.time24=(params.timeFormat=="24");
			cal.weekNumbers=params.weekNumbers;
			cal.historyDateFormat=params.ifFormat||params.daFormat;
			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();
		if(dateEl) {
//            alert("init date=" + dateEl.value||dateEl.innerHTML);
            cal.parseDate(dateEl.value||dateEl.innerHTML);
            }
        if(!params.position)
			cal.showAtElement(params.button||params.displayArea||params.inputField,params.align);
		else
			cal.showAt(params.position[0],params.position[1]);
		return false;
	};
	if(params.closeEventName) {
		triggerEl["on"+params.closeEventName]=function() {
			if(window.calendar)
				window.calendar.callCloseHandler();
		};
	}
	return cal;
};