/*  Copyright Mihai Bazon, 2002, 2003  

 *

 * The DHTML Calendar

 *

 * http://dynarch.com/mishoo/calendar.epl

 *

 * This script is distributed under the GNU Lesser General Public License.

 * Read the entire license text here: http://www.gnu.org/licenses/lgpl.html

 *

 * This file defines helper functions for setting up the calendar.  They are

 * intended to help non-programmers get a working calendar on their site

 * quickly.  This script should not be seen as part of the calendar.  It just

 * shows you what one can do with the calendar, while in the same time

 * providing a quick and simple method for setting it up.  If you need

 * exhaustive customization of the calendar creation process feel free to

 * modify this code to suit your needs (this is recommended and much better

 * than modifying calendar.js itself).

 */

 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("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.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();};

 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.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();

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(dateEl)params.date=Date.parseDate(dateEl.value||dateEl.innerHTML,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;

};