
/*  =================================================== 
    Renders a HTML Dynamical calendar.                  
    Preferably used with renderDateControl              
                                                        
                                                        
    dateTypeStr         (Optional) Prefered Date format.
                        Default yyyy-mm-dd              
    
    Show the calendar with this client-side function
    ------------------------------------------------
    w3ss_ShowCalendarTable(isTheRenderDateControl, thew3ss_calendar_objYear,thew3ss_calendar_objYearType,thew3ss_calendar_objMonth,thew3ss_calendar_objMonthType,thew3ss_calendar_objDay,thew3ss_calendar_objDayType,thew3ss_calendar_objFullDate,thew3ss_calendar_objFullDateType,thew3ss_calendar_dateTypeStr,thew3ss_calendar_triggerFunctionString,thew3ss_calendar_triggerFunctionType)
    
    All inparams are optional
    
                                                        
    Following objects can be altered by script          
    ------------------------------------------          
    w3ss_calendar_dateTypeStr         Default yyyy-mm-dd              
    
    w3ss_calendar_objFullDate         (Optional) The eventual obj where full date is to be rendered
    w3ss_calendar_objFullDateType;     The type of how it's to be rendered. 0=value AND 1=innerHtml (value is default)
    
    w3ss_calendar_objYear                   (Optional) The eventual obj where Year is to be rendered
    w3ss_calendar_objYearType               (Optional) The type of how it's to be rendered. 0=value AND 1=innerHtml (value is default)
    
    w3ss_calendar_objMonth                  (Optional) The eventual obj where Month is to be rendered
    w3ss_calendar_objMonthType              (Optional) The type of how it's to be rendered. 0=value AND 1=innerHtml (value is default)
    
    w3ss_calendar_objDay                    (Optional) The eventual obj where full date is to be rendered
    w3ss_calendar_objDayType                (Optional) The type of how it's to be rendered. 0=value AND 1=innerHtml (value is default)
    
    w3ss_calendar_triggerFunctionString     (Optional) The eventual function you want to be triggered
    w3ss_calendar_triggerFunctionType       (Optional) The type of triggering
                                                        0=every time calendar is closed or new Instance of a calendar is opened whilst new date was selected and not set
                                                        1=every time a new date is selected
    
    ===================================================  */

var w3ss_calendar_lastBGFullDate         = "white";
var w3ss_calendar_lastColorFullDate     = "black";
var w3ss_calendar_markedFullBGcolor     = "navy";
var w3ss_calendar_markedFullColor        = "white";
var w3ss_calendar_lastFullObj;

var w3ss_calendar_lastBGYear             = "white";
var w3ss_calendar_lastColorYear             = "black";
var w3ss_calendar_markedYearBGcolor     = "navy";
var w3ss_calendar_markedYearColor        = "white";
var w3ss_calendar_lastYearObj;

var w3ss_calendar_lastBGMonth             = "white";
var w3ss_calendar_lastColorMonth         = "black";
var w3ss_calendar_markedMonthBGcolor     = "navy";
var w3ss_calendar_markedMonthColor        = "white";
var w3ss_calendar_lastMonthObj;

var w3ss_calendar_lastBGDay                 = "white";
var w3ss_calendar_lastColorDay             = "black";
var w3ss_calendar_markedDayBGcolor         = "navy";
var w3ss_calendar_markedDayColor        = "white";
var w3ss_calendar_lastDayObj;

var w3ss_calendar_lastw3ss_calendar_triggerFunctionType;
var w3ss_calendar_lastTriggerFunctionString;
var w3ss_calendar_triggerFunctionString;
var w3ss_calendar_triggerFunctionType = 0;
var w3ss_calendar_changesMade = false;
var w3ss_calendar_OrgDate;

var w3ss_calendar_wasActive = false;

var w3ss_calendar_dateTypeStr = "yyyy-mm-dd";    
var w3ss_calendar_iCellWidth = 18;
var w3ss_calendar_iCellHeight = 14;

var w3ss_calendar_objFullDate;
var w3ss_calendar_objFullDateType;         // 0=value AND 1=innerHtml

var w3ss_calendar_objDay;
var w3ss_calendar_objDayType;            // 0=value AND 1=innerHtml

var w3ss_calendar_objMonth;
var w3ss_calendar_objMonthType;            // 0=value AND 1=innerHtml

var w3ss_calendar_objYear;
var w3ss_calendar_objYearType;            // 0=value AND 1=innerHtml

var w3ss_calendar_isRenderDateControl    // true if it's to be rendered to the renderDateControl

var w3ss_calendar_dDate             = new Date();
var w3ss_calendar_dCurMonth         = w3ss_calendar_dDate.getMonth();
var w3ss_calendar_dCurDayOfMonth     = w3ss_calendar_dDate.getDate();
var w3ss_calendar_dCurYear             = w3ss_calendar_dDate.getFullYear();
var w3ss_calendar_objPrevElement = new Object();

/*
==============================================
Returns true id the year is a leap year
================================================  */  
function leapYear(year)
{   
    return(((year%4==0)&&(year%100!=0))||(year%400==0))?1:0;
}

/*
==============================================
Fires when the Month combo is changed
Updates the Day combo to display the correct
number of days in that particular month
================================================  */  
function w3ss_updateDayElement(yearElId, monthElId, dayElId, hourElId, minutesElId)
{
    // locate the elements
    var yearEl  = document.getElementById(yearElId);
    var monthEl  = document.getElementById(monthElId);
    var dayEl  = document.getElementById(dayElId);
    var hourEl  = document.getElementById(hourElId);
    var minutesEl  = document.getElementById(minutesElId);
    
    var monthLengths = new Array( 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 );
    // check for leapyear
    if(leapYear(yearEl.value))
        monthLengths[1] = 29;
    
    // make sure we have a correct number of days in the combo
    var monthLength = monthLengths[monthEl.selectedIndex];
    var currDays = dayEl.options.length;
    
    // add days if insufficent
    if(monthLength > currDays)
    {
        for(i=currDays; i < monthLength; i++)
        {
            var oOption = document.createElement("OPTION");
            dayEl.options.add(oOption);
            oOption.innerText = i+1;
            oOption.Value = i+1;
        }
    }
    
    // remove surplus days
    while(monthLength < dayEl.options.length)
    {
        dayEl.remove(dayEl.options.length-1);
    }
}

/*
==============================================
Fires when the No Value checkbox is ticked
Disables the date selectors
================================================  */  
function w3ss_toggleEmpty(el, yearElId, monthElId, dayElId, hourElId, minutesElId)
{
    // locate the elements
    var yearEl  = document.getElementById(yearElId);
    var monthEl  = document.getElementById(monthElId);
    var dayEl  = document.getElementById(dayElId);
    var hourEl  = document.getElementById(hourElId);
    var minutesEl  = document.getElementById(minutesElId);
    
    if(el.checked)
    {
        dayEl.disabled = true;
        monthEl.disabled = true;
        yearEl.disabled = true;
        
        if(hourEl)
        {
            hourEl.disabled = true;
        }
        
        if(minutesEl)
        {
            minutesEl.disabled = true;
        }
    }
    else
    {
        dayEl.disabled = false;
        monthEl.disabled = false;
        yearEl.disabled = false;
        
        if(hourEl)
        {
            hourEl.disabled = false;
        }
        
        if(minutesEl)
        {
            minutesEl.disabled = false;
        }
    }
}



/*
==============================================
Fires when the Today link is clicked.
resets the date to todays date
================================================  */  
function w3ss_SetToday(yearElId, monthElId, dayElId, hourElId, minutesElId)
{
    // locate the elements
    var yearEl  = document.getElementById(yearElId);
    var monthEl  = document.getElementById(monthElId);
    var dayEl  = document.getElementById(dayElId);
    var hourEl  = document.getElementById(hourElId);
    var minutesEl  = document.getElementById(minutesElId);
    
    var today = new Date();
    var weekDay = today.getDay();       // 0-6
    var day     = today.getDate();      // 1-31
    var year    = today.getFullYear();  // nnnn
    var month   = today.getMonth();     // 0-11
    var hour    = today.getHours();     // 0-23
    var minutes = today.getMinutes();     // 0-59            

    dayEl.selectedIndex = day - 1;
    monthEl.selectedIndex = month;
    yearEl.value = year;
    
    if(hourEl)
    {
        //hourEl = hourEl;
        hourEl.value = fixNR(hour);
    }
        
    if(minutesEl)
    {
        //minutesEl = minutesEl;
        //minutesEl.disabled = true;
        minutesEl.value = fixNR(minutes);
    }
    
    return;
}


/*
==============================================
Adds a prefixed 0 to a number
================================================  */  
function fixNR(xIn)
{
    var x = new Number(xIn);
    if(x>9)
        return x;
    else
        return "0" + x;
}


function w3ss_ToggleCalendarColor(myElement) 
{
    var toggleColor = "#ff0000";
    if (myElement.id == "calDateText") 
    {
        if (myElement.color == toggleColor) 
            myElement.color = "";
        else 
            myElement.color = toggleColor; 
    } 
    else if (myElement.id == "calCell") 
    {
        for (var i in myElement.children) 
        {
            if (myElement.children[i].id == "calDateText") 
            {
                if (myElement.children[i].color == toggleColor) 
                    myElement.children[i].color = "";
                else 
                    myElement.children[i].color = toggleColor;
            }
        }
    }
}

function w3ss_SetCalendarSelectedDay(myElement)
{
    if(myElement.id.indexOf("calCell")!=-1) 
    {
        if(myElement.children["calDateText"]) 
        {
            myElement.children["calDateText"].style.backgroundColor = "#222222";
            myElement.children["calDateText"].style.color = "white";
            
            try
            {
                if(w3ss_calendar_objPrevElement != myElement.children["calDateText"])
                {
                    w3ss_calendar_objPrevElement.style.backgroundColor = "transparent";
                    w3ss_calendar_objPrevElement.style.color = "black";
                }
            }
            catch(e){}
            
            w3ss_calendar_objPrevElement = myElement.children["calDateText"];
        }
    }
}

/*
==============================================
Calculates the amount of weeks between two dates
================================================  */       
function w3ss_CalendarWeekDiff(theStartTime,theEndTime)
{
                
   var parseStartDate   = Date.parse(theStartTime);
   var parseEnw3ss_calendar_dDate     = Date.parse(theEndTime);
   
   var tempStartDay    = theStartTime.getDay();
   var tempStartDate   = theStartTime.getDate();
   var tempStartMonth  = theStartTime.getMonth()+1;
   var tempDays    = 0;
   var tempWeeks   = 1;
   var tempMonths  = 0;
   var tempYears   = 0;
   
   while(theStartTime<theEndTime)
   {
       theStartTime.setDate(theStartTime.getDate()+1); 
      
       if(theStartTime.getDay()==1)
           tempWeeks++;
       
       if(tempStartDate == theStartTime.getDate())
       {
           tempMonths++;
           tempStartMonth++;
           if((tempMonths % 12)==0)
               tempYears++;    
       }

       tempDays++;
   }
  
   return tempWeeks;
}

function w3ss_GetCalendarDaysInMonth(iMonth, iYear) 
{
    var dPrevDate = new Date(iYear, iMonth, 0);
    return dPrevDate.getDate();
}

function w3ss_BuildCal(iYear, iMonth) 
{
    var aMonth = new Array();
    
    for(var i=0;i<7;i++)
    {
        aMonth[aMonth.length] = new Array(7);
    }
    var dCalDate = new Date(iYear, iMonth-1, 1);
    var iDayOfFirst = dCalDate.getDay();
    var iDaysInMonth = w3ss_GetCalendarDaysInMonth(iMonth, iYear);
    var iVarDate = 1;
    var i, d, w;
    
    aMonth[0][0] = shortMonday;
    aMonth[0][1] = shortTuesday;
    aMonth[0][2] = shortWednesday;
    aMonth[0][3] = shortThursday;
    aMonth[0][4] = shortFriday;
    aMonth[0][5] = shortSaturday;
    aMonth[0][6] = shortSunday;
    
    if(iDayOfFirst==0)
        iDayOfFirst = 6;
    else
        iDayOfFirst--;
    
    for (d = iDayOfFirst; d < 7; d++) 
    {
        aMonth[1][d] = iVarDate;
        iVarDate++;
    }
    
    for (w = 2; w < 7; w++) 
    {
        for (d = 0; d < 7; d++) 
        {
            if (iVarDate <= iDaysInMonth) 
            {
                aMonth[w][d] = iVarDate;
                iVarDate++;
            }
        }
    }

    return aMonth;
}

function w3ss_SetCalendarDate(d)
{
    if(d<10 && !w3ss_calendar_isRenderDateControl)
        d = "0"+d
    
    var m = document.getElementById("w3ss_calendar_tbSelMonth").value;
    if(m.length<2 && !w3ss_calendar_isRenderDateControl)
        m = "0" +m;
        
    var y = document.getElementById("w3ss_calendar_tbSelYear").value;
    
    var calendarDateStr = w3ss_calendar_dateTypeStr.toLowerCase();
    
    var re = /yyyy/g;
    calendarDateStr = calendarDateStr.replace(re,y);
    var re = /yy/g;
    calendarDateStr = calendarDateStr.replace(re,y.substr(2,y.length));
    var re = /mm/g;
    calendarDateStr = calendarDateStr.replace(re,m);
    var re = /dd/g;
    calendarDateStr = calendarDateStr.replace(re,d);
    
    var startDt = new Date();
    startDt.setFullYear(y,0,1);
    startDt.setHours(0,0,0);
    
    var endDt    = new Date();
    endDt.setFullYear(y,m-1,d);
    endDt.setHours(0,0,0);
    
    var week = w3ss_CalendarWeekDiff(startDt,endDt);
    if(w3ss_calendar_objFullDate)
    {
        if(w3ss_calendar_objFullDateType == 1)
            w3ss_calendar_objFullDate.innerHTML = calendarDateStr;
        else
            w3ss_calendar_objFullDate.value = calendarDateStr;
    
    }
    
    if(w3ss_calendar_OrgDate!=endDt)
        w3ss_calendar_changesMade = true;
        
    if(w3ss_calendar_objDay)
    {
        if(w3ss_calendar_isRenderDateControl)
            w3ss_calendar_objDay.selectedIndex = d-1;
        else if(w3ss_calendar_objDayType == 1)
            w3ss_calendar_objDay.innerHTML = d;
        else
            w3ss_calendar_objDay.value = d;
    }
    
    if(w3ss_calendar_objMonth)
    {
        if(w3ss_calendar_isRenderDateControl)
            w3ss_calendar_objMonth.selectedIndex = m-1;
        else if(w3ss_calendar_objMonthType == 1)
            w3ss_calendar_objMonth.innerHTML = m;
        else
            w3ss_calendar_objMonth.value = m;
    }
    
    if(w3ss_calendar_objYear)
    {
        if(w3ss_calendar_objYearType == 1)
            w3ss_calendar_objYear.innerHTML = y;
        else
            w3ss_calendar_objYear.value = y;
    }
    if(w3ss_calendar_triggerFunctionString && w3ss_calendar_triggerFunctionType==1 && w3ss_calendar_changesMade)
        eval(w3ss_calendar_triggerFunctionString);
}

function w3ss_DrawCal(iYear, iMonth) 
{
    var myMonth;
    myMonth = w3ss_BuildCal(iYear, iMonth);
    
    var calendarStr = "<div id='redDiv' style='position:absolute;left:114px;top:2px;width:38px;height:108px;background-color:#ffeeee;z-index:1;'></div>";
    
    calendarStr += "<table id='w3ss_CalandarTableDays' border='0' cellspacing='0' cellpadding='0' style='z-index:444;position:relative;left:0px;top:0px;'>";
    calendarStr += "<tr>";
    calendarStr += "<td style='border-bottom: 1px dashed #2244aa;' align='left' class='calendarFont'>W</td>";
    
    for(var i=0;i<7;i++)
    {
        calendarStr += "<td style='border-bottom: 1px dashed #2244aa;' align='right' class='calendarFont'>" + myMonth[0][i] + "</td>";
    }
    
    calendarStr += "</tr>";
    var y = document.getElementById("w3ss_calendar_tbSelYear").value;
    var m = document.getElementById("w3ss_calendar_tbSelMonth").value;
    
    var startDt = new Date();
    startDt.setFullYear(y,0,1);
    startDt.setHours(0,0,0);
    
    var endDt    = new Date();
    endDt.setFullYear(y,m-1,1);
    endDt.setHours(0,0,0);
    
    //alert(startDt +"\n"+ endDt);
    
    var tempWeek = w3ss_CalendarWeekDiff(startDt,endDt);
    var resetWeek = false;
    
    for (w = 1; w < 7; w++) 
    {
        calendarStr += "<tr>";
        var weekStartDay;
        
        for (d = -1; d < 7; d++) 
        {
            if(d==-1)
            {
                var tempDate = new Number(myMonth[w][d+1]);
                
                var tempCalDate = new Date();
                tempCalDate.setFullYear(y,m-1,tempDate);
                tempCalDate.setHours(0,0,0);
                
                var aheaw3ss_calendar_dDate = new Date();
                aheaw3ss_calendar_dDate.setFullYear(y,m-1,(tempDate+6));
                aheaw3ss_calendar_dDate.setHours(0,0,0);
                
                if(isNaN(tempDate))
                    tempDate = 1;
                    
                if(!isNaN(tempDate)) 
                {
                    if(!isNaN(aheaw3ss_calendar_dDate) && !isNaN(tempCalDate) )
                    {
                        if(tempCalDate.getMonth()==11 && aheaw3ss_calendar_dDate.getMonth()!=tempCalDate.getMonth() && !resetWeek)
                        {
                            tempWeek = 1;
                            resetWeek = true;
                        }
                    }
                }
                if(w>1 && (isNaN(tempDate) || tempDate<2))
                    tempWeek = "";
                
                calendarStr += "<td id='calCell' valign='top' class='calendarFont' onclick='w3ss_SetCalendarDate("+tempDate+");w3ss_SetCalendarSelectedDay(this);' style='background-color:transparent;border-right: 1px dashed #2244aa;width:"+(w3ss_calendar_iCellWidth-8)+";' align='right' class='calendarFont'>";
                calendarStr += "<font id=calDateText class='calendarFont' style='CURSOR:Hand;background-color:transparent;'  onMouseOver='w3ss_ToggleCalendarColor(this)' onMouseOut='w3ss_ToggleCalendarColor(this)' ><i>"
                calendarStr += tempWeek;
                calendarStr += "</i>&nbsp;</font></td>";    
            }
            else
            {
                var tempDate = myMonth[w][d];
                    
                var thisDate = new Date();
                thisDate.setHours(0,0,0);
                
                var tempCalDate = new Date();
                tempCalDate.setFullYear(y,m-1,tempDate);
                tempCalDate.setHours(0,0,0);
                
                tempCalDate = Date.parse(tempCalDate);
                thisDate    = Date.parse(thisDate);
                
                var markAsThisDay = false;
                
                if(tempCalDate == thisDate)
                    markAsThisDay = true;
                
                calendarStr += "<td align='right' valign='top' width='" + w3ss_calendar_iCellWidth + "' height='" + w3ss_calendar_iCellHeight + "' id='calCell" + tempDate + "' style='CURSOR:Hand;";
                calendarStr += "' class='calendarFont' onMouseOver='w3ss_ToggleCalendarColor(this)' onMouseOut='w3ss_ToggleCalendarColor(this)'";
                    
                if(!isNaN(tempDate)) 
                    calendarStr += " onclick='w3ss_SetCalendarDate("+tempDate+");w3ss_SetCalendarSelectedDay(this);'";
                calendarStr += ">";
                
                if(!isNaN(tempDate)) 
                {
                    calendarStr += "<font id=calDateText class='calendarFont' style='background-color:transparent;CURSOR:Hand;width:"+(w3ss_calendar_iCellWidth-8)+";";
                    if(markAsThisDay)
                        calendarStr += "border: 1px solid #008000;position:relative;top:-1;left:2px;z-index:1000;";
                    calendarStr += "'>" + tempDate + "</font>";
                }
                else 
                    calendarStr += "<font id=calDateText></font>";
            }    
            calendarStr += "</td>";
        }
        calendarStr += "</tr>";
        tempWeek++;
    }
    calendarStr += "</table>";
    
    document.getElementById("calendarData").innerHTML = calendarStr;
}

function w3ss_initSetDateFromCalendar()
{
    var dCurDate     = new Date();
    var setTheDate     = false;
    w3ss_calendar_changesMade = false;
    
    try
    {    
        if(w3ss_calendar_objDay && w3ss_calendar_objMonth && w3ss_calendar_objYear)
        {
            var d = Number(w3ss_calendar_objDay.value);
            var m = Number(w3ss_calendar_objMonth.value);
            var y = Number(w3ss_calendar_objYear.value);
            setTheDate = true;
        }
        else if(thew3ss_calendar_objFullDate)    
        {
            var tempSetFullDate = false;
            
            if(w3ss_calendar_dateTypeStr == 0)
                var tempFullDateStr = thew3ss_calendar_objFullDate.value;
            else
                var tempFullDateStr = thew3ss_calendar_objFullDate.innerHTML;
            
            if(String(tempFullDateStr).length == w3ss_calendar_dateTypeStr.length)
            {
                var d;
                var m;
                var y;
                if(w3ss_calendar_dateTypeStr.indexOf("yyyy")!=-1)
                {
                    y = Number(tempFullDateStr.substr(w3ss_calendar_dateTypeStr.indexOf("yyyy"),w3ss_calendar_dateTypeStr.lastindexOf("yyyy")));
                }
                else if(w3ss_calendar_dateTypeStr.indexOf("yy")!=-1)
                {
                    y = Number(tempFullDateStr.substr(w3ss_calendar_dateTypeStr.indexOf("yy"),w3ss_calendar_dateTypeStr.lastindexOf("yy")));
                    
                    if(!isNaN(y))
                    {
                        if(y<50)
                            y = "19" + y;
                        else
                            y = "20" + y;
                    }
                }
                if(w3ss_calendar_dateTypeStr.indexOf("mm")!=-1)
                {
                    m = Number(tempFullDateStr.substr(w3ss_calendar_dateTypeStr.indexOf("mm"),w3ss_calendar_dateTypeStr.lastindexOf("mm")));
                }
                if(w3ss_calendar_dateTypeStr.indexOf("dd")!=-1)
                {
                    d = Number(tempFullDateStr.substr(w3ss_calendar_dateTypeStr.indexOf("dd"),w3ss_calendar_dateTypeStr.lastindexOf("dd")));
                }
                if(y && m && d)
                    setTheDate = true;
            }
        }
        
        if(setTheDate)
        {
            if(!isNaN(d) && !isNaN(m) && !isNaN(y))
            {
                if(w3ss_calendar_isRenderDateControl)
                    m++;
                if(d>0 && d<32 && m>0 && m<13 && String(y).length==4)
                {
                    dCurDate.setFullYear(y,m-1,d);
                    dCurDate.setHours(0,0,0);    
                    w3ss_calendar_OrgDate = dCurDate;
                }
            }
        }
    }
    catch(e){}
    
    document.getElementById("w3ss_calendar_tbSelMonth").options[dCurDate.getMonth()].selected = true;
    for (i = 0; i < document.getElementById("w3ss_calendar_tbSelYear").length; i++)
    if (document.getElementById("w3ss_calendar_tbSelYear").options[i].value == dCurDate.getFullYear())
    document.getElementById("w3ss_calendar_tbSelYear").options[i].selected = true;    
    
    w3ss_DrawCal(dCurDate.getFullYear(), dCurDate.getMonth()+1);
    
    try
    {
        if(setTheDate)
            w3ss_SetCalendarSelectedDay(eval("calCell"+d))
    }
    catch(e){}
        
}
        
function w3ss_ShowCalendarTable(isTheRenderDateControl, yearElId, thew3ss_calendar_objYearType, monthElId, thew3ss_calendar_objMonthType, dayElId, thew3ss_calendar_objDayType, fullDateElId, thew3ss_calendar_objFullDateType, thew3ss_calendar_dateTypeStr, thew3ss_calendar_triggerFunctionString, thew3ss_calendar_triggerFunctionType)
{
    // Triggers a function  Type:0=When done, 1=Every time date is set
    // locate the elements
    var thew3ss_calendar_objYear  = document.getElementById(yearElId);
    var thew3ss_calendar_objMonth  = document.getElementById(monthElId);
    var thew3ss_calendar_objDay  = document.getElementById(dayElId);
    var thew3ss_calendar_objFullDate  = document.getElementById(fullDateElId);

    
    if(thew3ss_calendar_triggerFunctionString)
    {
        if(w3ss_calendar_triggerFunctionString)
            w3ss_calendar_lastTriggerFunctionString = w3ss_calendar_triggerFunctionString;
        w3ss_calendar_triggerFunctionString = thew3ss_calendar_triggerFunctionString; 
    }
    else
    {
        w3ss_calendar_triggerFunctionString         = null;
        w3ss_calendar_lastTriggerFunctionString     = null;
    }
    
    if(thew3ss_calendar_triggerFunctionType)
    {
        w3ss_calendar_lastw3ss_calendar_triggerFunctionType = w3ss_calendar_triggerFunctionType;
        w3ss_calendar_triggerFunctionType     = thew3ss_calendar_triggerFunctionType;
    }
    if(!w3ss_calendar_triggerFunctionType)
            w3ss_calendar_lastw3ss_calendar_triggerFunctionType = 0;
            
    if(w3ss_calendar_wasActive)
    {
        
        if((w3ss_calendar_lastFullObj && thew3ss_calendar_objFullDate) || (thew3ss_calendar_objYear && w3ss_calendar_lastYearObj) || (thew3ss_calendar_objMonth && w3ss_calendar_lastMonthObj) || (thew3ss_calendar_objDay && w3ss_calendar_lastDayObj))
            if(w3ss_calendar_lastTriggerFunctionString && w3ss_calendar_lastw3ss_calendar_triggerFunctionType==0)
                eval(w3ss_calendar_lastTriggerFunctionString);
    }
    
    w3ss_calendar_isRenderDateControl = isTheRenderDateControl;
    // Default yyyy-mm-dd
    if(thew3ss_calendar_dateTypeStr)
        w3ss_calendar_dateTypeStr = thew3ss_calendar_dateTypeStr;
    
    if(thew3ss_calendar_objFullDate)    
        w3ss_calendar_objFullDate = thew3ss_calendar_objFullDate;
    else
        w3ss_calendar_objFullDate = null;
    
    if(thew3ss_calendar_objDay)    
        w3ss_calendar_objDay = thew3ss_calendar_objDay;
    else
        w3ss_calendar_objDay = null;
        
    if(thew3ss_calendar_objMonth)    
        w3ss_calendar_objMonth = thew3ss_calendar_objMonth;
    else
        w3ss_calendar_objMonth = null;
    
    if(thew3ss_calendar_objYear)    
        w3ss_calendar_objYear = thew3ss_calendar_objYear;
    else
        w3ss_calendar_objYear = null;
    
    // 0=value AND 1=innerHtml
    if(thew3ss_calendar_objFullDateType)
        w3ss_calendar_objFullDateType = thew3ss_calendar_objFullDateType;
    if(!w3ss_calendar_objFullDateType)
        w3ss_calendar_objFullDateType = 0;
        
    if(thew3ss_calendar_objDayType)
        w3ss_calendar_objDayType = thew3ss_calendar_objDayType;
    if(!w3ss_calendar_objDayType)
        w3ss_calendar_objDayType = 0;
        
    if(thew3ss_calendar_objMonthType)
        w3ss_calendar_objMonthType = thew3ss_calendar_objMonthType;
    if(!w3ss_calendar_objMonthType)
        w3ss_calendar_objMonthType = 0;
        
    if(thew3ss_calendar_objYearType)
        w3ss_calendar_objYearType = thew3ss_calendar_objYearType;
    if(!w3ss_calendar_objYearType)
        w3ss_calendar_objYearType = 0;
    
    
    try
    {
        if(w3ss_calendar_lastFullObj)
        {
            w3ss_calendar_lastFullObj.style.backgroundColor     = w3ss_calendar_lastBGFullDate;
            w3ss_calendar_lastFullObj.style.color                 = w3ss_calendar_lastColorFullDate;
        }
        
        if(w3ss_calendar_lastYearObj)
        {
            w3ss_calendar_lastYearObj.style.backgroundColor     = w3ss_calendar_lastBGYear;
            w3ss_calendar_lastYearObj.style.color                 = w3ss_calendar_lastColorYear;
        }
        
        if(w3ss_calendar_lastMonthObj)
        {
            w3ss_calendar_lastMonthObj.style.backgroundColor     = w3ss_calendar_lastBGMonth;
            w3ss_calendar_lastMonthObj.style.color                 = w3ss_calendar_lastColorMonth;
        }
        
        if(w3ss_calendar_lastDayObj)
        {
            w3ss_calendar_lastDayObj.style.backgroundColor         = w3ss_calendar_lastBGDay;
            w3ss_calendar_lastDayObj.style.color                 = w3ss_calendar_lastColorDay;
        }
    }
    catch(e){}
    

    var theStyle = document.getElementById('w3ss_DateSelector');
    
    var mouseX = 0;//event.clientX + document.body.scrollLeft;
    var mouseY = 0;//event.clientY + document.body.scrollTop;
    
    try
    {
        mouseX = event.clientX + document.body.scrollLeft;
        mouseY = event.clientY + document.body.scrollTop;
    }
    catch(e){}
    
    try
    {
        if(thew3ss_calendar_objFullDate)
        {
            w3ss_calendar_lastBGFullDate                         = w3ss_calendar_objFullDate.style.backgroundColor;
            w3ss_calendar_lastColorFullDate                     = w3ss_calendar_objFullDate.style.color;
            w3ss_calendar_objFullDate.style.backgroundColor     = w3ss_calendar_markedFullBGcolor;
            w3ss_calendar_objFullDate.style.color                 = w3ss_calendar_markedFullColor;
            w3ss_calendar_lastFullObj                             = w3ss_calendar_objFullDate;
        }
        else
            w3ss_calendar_lastFullObj = null;    
        
        if(thew3ss_calendar_objYear)
        {
            w3ss_calendar_lastBGYear                             = w3ss_calendar_objYear.style.backgroundColor;
            w3ss_calendar_lastColorYear                             = w3ss_calendar_objYear.style.color;
            w3ss_calendar_objYear.style.backgroundColor         = w3ss_calendar_markedYearBGcolor;
            w3ss_calendar_objYear.style.color                     = w3ss_calendar_markedYearColor;
            w3ss_calendar_lastYearObj                             = w3ss_calendar_objYear;
        }
        else
            w3ss_calendar_lastYearObj = null;
        
        if(thew3ss_calendar_objMonth)
        {
            w3ss_calendar_lastBGMonth                             = w3ss_calendar_objMonth.style.backgroundColor;
            w3ss_calendar_lastColorMonth                         = w3ss_calendar_objMonth.style.color;
            w3ss_calendar_objMonth.style.backgroundColor         = w3ss_calendar_markedMonthBGcolor;
            w3ss_calendar_objMonth.style.color                     = w3ss_calendar_markedMonthColor;
            w3ss_calendar_lastMonthObj                             = w3ss_calendar_objMonth;
        }
        else
            w3ss_calendar_lastMonthObj = null;
        
        if(thew3ss_calendar_objDay)
        {
            w3ss_calendar_lastBGDay                                = w3ss_calendar_objDay.style.backgroundColor;
            w3ss_calendar_lastColorDay                             = w3ss_calendar_objDay.style.color;
            w3ss_calendar_objDay.style.backgroundColor             = w3ss_calendar_markedDayBGcolor;
            w3ss_calendar_objDay.style.color                     = w3ss_calendar_markedDayColor;
            w3ss_calendar_lastDayObj                             = w3ss_calendar_objDay;
        }
        else
            w3ss_calendar_lastDayObj = null
    }
    catch(e){}
    
    theStyle.style.display     = "inline";
    theStyle.style.left     = mouseX;
    theStyle.style.top         = mouseY;
    w3ss_calendar_wasActive                = true;
    
    w3ss_initSetDateFromCalendar();
}

function w3ss_HideCalendarTable()
{
    var theStyle = document.getElementById("w3ss_DateSelector");
    theStyle.style.display = "none";
    
    if(w3ss_calendar_triggerFunctionString && w3ss_calendar_triggerFunctionType==0 && w3ss_calendar_changesMade)
        eval(w3ss_calendar_triggerFunctionString);
    
    try
    {
        if(w3ss_calendar_objFullDate)
        {
            w3ss_calendar_objFullDate.style.backgroundColor = w3ss_calendar_lastBGFullDate;
            w3ss_calendar_objFullDate.style.color             = w3ss_calendar_lastColorFullDate;
            w3ss_calendar_lastFullObj                         = null;
        }
        
        if(w3ss_calendar_objYear)
        {
            w3ss_calendar_objYear.style.backgroundColor     = w3ss_calendar_lastBGYear;
            w3ss_calendar_objYear.style.color                 = w3ss_calendar_lastColorYear;
            w3ss_calendar_lastColorYear                     = null;
        }
        
        if(w3ss_calendar_objMonth)
        {
            w3ss_calendar_objMonth.style.backgroundColor     = w3ss_calendar_lastBGMonth;
            w3ss_calendar_objMonth.style.color                 = w3ss_calendar_lastColorMonth;
            w3ss_calendar_lastColorMonth                     = null;
        }
        
        if(w3ss_calendar_objDay)
        {
            w3ss_calendar_objDay.style.backgroundColor         = w3ss_calendar_lastBGDay;
            w3ss_calendar_objDay.style.color                 = w3ss_calendar_lastColorDay;
            w3ss_calendar_lastColorDay                         = null;
        }
    }
    catch(e){}
    
    w3ss_calendar_wasActive = false;
}