/*  Copyright Mihai Bazon, 2002, 2003  |  http://dynarch.com/mishoo/
* ---------------------------------------------------------------------------
*
* The DHTML Calendar
*
* Details and latest version at:
* 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",Calendar._TT["DEF_DATE_FORMAT"]);
    param_default("daFormat",Calendar._TT["TT_DATE_FORMAT"]);
    param_default("singleClick",true);
    param_default("disableFunc",null);
    param_default("dateStatusFunc",params["disableFunc"]);
    param_default("dateText",null);
    param_default("firstDay",Calendar._TT["FIRST_DAY"]);
    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.displayArea||params.button||params.inputField,params.align);
            else cal.showAt(params.position[0],params.position[1]);
            return false;
          }
          ;
          return cal;
        }
        ;

