/* Multicalendar script, found on web, modified by Kevin Alford kalford@beardendesigns.com */

/* Holds all the calendar objects created at load */
var yui_page_calendars = [];
var yui_calendar_opts = [];

/* The global calender object */
var calMulti;
var over_cal = false;


function yui_create_all_page_calendars()
{
    /* Create the Div Element the calendar will be stored in */
    var cal_div = document.createElement( "div" );
    cal_div.id = "calMultiContainer";
    cal_div.style.display = "none"

    /* Hide the div with CSS then add to body */
    cal_div.className = "yui_cal";
    document.body.appendChild( cal_div );

    /* Create the Yahoo calendar object */
    calMulti = new YAHOO.widget.Calendar( "calMulti", "calMultiContainer", {title: 'Pick a date', close:true});

    calMulti.cfg.setProperty("MDY_YEAR_POSITION", 1);
    calMulti.cfg.setProperty("MDY_MONTH_POSITION", 2);
    calMulti.cfg.setProperty("MDY_DAY_POSITION", 3);

    /* Setup listeners for calendar events */
    calMulti.selectEvent.subscribe(        getDate, calMulti, true );
    calMulti.renderEvent.subscribe( setupListeners, calMulti, true );

    /* Add focus/blur events to all the text fields */
    YAHOO.util.Event.addListener( yui_page_calendars, 'focus', showMultiCal );
    YAHOO.util.Event.addListener( yui_page_calendars, 'blur' , hideMultiCal );

    calMulti.render();
}


/* Called every render */
function setupListeners()
{
    YAHOO.util.Event.addListener( 'calMultiContainer', 'mouseover', overCal );
    YAHOO.util.Event.addListener( 'calMultiContainer', 'mouseout' , outCal  );
}


/* Fired when a date is selected */
function getDate()
{
    var calDate = this.getSelectedDates()[0];
    calDate =  calDate.getFullYear() + '/' + (calDate.getMonth() + 1) + '/' + calDate.getDate();
    cur_field.value = calDate;
    over_cal = false;
    hideMultiCal();
}


/* Fired when you click a text area */
function showMultiCal(ev)
{
    var target = YAHOO.util.Event.getTarget(ev);
    showMultiCalObject(target);
}

/* can pop up a calendar on any input field with a value */
function showMultiCalObject(object)
{
    cur_field = object;
    var xy = YAHOO.util.Dom.getXY(object);
    var date = YAHOO.util.Dom.get(object).value;
    
    /* Allow options to be passed in for each calendar */
    /* This 'could' be a for each, so as not to limit to 'min and max' date */
    var min_value, max_value;
    if(yui_calendar_opts[object.id])
    {
        var opts = yui_calendar_opts[object.id]
       
        min_value = opts["mindate"];
        max_value = opts["maxdate"];    
    }
    else
    {
        min_value = null;
        max_value = null;        
    }

    calMulti.cfg.setProperty('mindate', min_value);
    calMulti.cfg.setProperty('maxdate', max_value);
    
    
    if (date)
    {
      var date_obj = new Date(date)
      
      if(date_obj.toString() == "Invalid Date")
      {
          calMulti.cfg.setProperty('selected', '');
          calMulti.cfg.setProperty('pagedate', new Date(), true);
      }      
      else
      {
          calMulti.cfg.setProperty('selected', date);
          calMulti.cfg.setProperty('pagedate', new Date(date), true);
      }
      calMulti.render();
    }
    else
    {
      calMulti.cfg.setProperty('selected', '');
      calMulti.cfg.setProperty('pagedate', new Date(), true);
      calMulti.render();
    }
    
    YAHOO.util.Dom.setStyle('calMultiContainer', 'display', 'block');
    xy[1] = xy[1] + 20;
    YAHOO.util.Dom.setXY('calMultiContainer', xy);
}


/* Hides the calendar after selection */
function hideMultiCal()
{
      if (!over_cal) {
          YAHOO.util.Dom.setStyle('calMultiContainer', 'display', 'none');
      }
}


/* variables to let the functions know when mouse is over calendar */
function overCal()
{
      over_cal = true;
}

function outCal()
{
      over_cal = false;
}


/* User function: once per 'input' to build an array of text boxes */
function yui_calendar_for(a_element_id_str, a_options)
{
     yui_page_calendars.push(a_element_id_str);
     yui_calendar_opts[a_element_id_str] = a_options;
}


/* Not sure if this or onDOMready is better */
if(YAHOO.widget.Calendar != undefined)
    YAHOO.util.Event.addListener( window, 'load', yui_create_all_page_calendars );

