/*  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","%m/%d/%Y");
  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",onUpdate);
  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 onUpdate(cal) {
  	var p=cal.params;
  	
  	
  };
  
  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;
};