﻿// JScript File
    var monthList = ['January','February','March','April','May','June','July','August','September','October','November','December'];
    var curDate = new Date(); curDate.setDate(1); curDate.getTheYear = curDate.getFullYear ? curDate.getFullYear : curDate.getYear;
    var selectedDate = new Date(); selectedDate.getTheYear = selectedDate.getFullYear ? selectedDate.getFullYear : selectedDate.getYear;
    var todayDay = new Date(); todayDay.getTheYear = todayDay.getFullYear ? todayDay.getFullYear : todayDay.getYear;
    var tblCalMainID = '';
    var ElemToFill = '';
    var DateFormat = "MM/DD/YYYY";
    function otherMonthDaysStyle(Elem){};
    function WeekendDaysStyle (Elem){};
    function SelectedDayStyle (Elem){};
    function todayDayStyle (Elem){};
    function DaysStyle (Elem){};
        

    function PS_dropYear() { curDate.setYear( curDate.getTheYear() - 1 ); doReDraw(); }
    function PS_raiseYear() { curDate.setYear( curDate.getTheYear() + 1 ); doReDraw(); }
    function PS_dropMonth() { if( curDate.getMonth() ) { curDate.setMonth( curDate.getMonth() - 1 ); } else { curDate.setMonth(11); curDate.setYear( curDate.getTheYear() - 1 ); } doReDraw(); }
    function PS_raiseMonth() { if( curDate.getMonth() < 11 ) { curDate.setMonth( curDate.getMonth() + 1 ); } else { curDate.setMonth(0); curDate.setYear( curDate.getTheYear() + 1 ); } doReDraw(); }
    function resetDate() { curDate.setTime((new Date()).getTime()); }

    
    function convertStringToDate(value) 
    {
        re = /^(\d+)\/(\d+)\/(\d+)$/
        
        if (DateFormat =="YYYY-MM-DD")
        {
            re = /^(\d+)-(\d+)-(\d+)$/
        }
        
        var dt = new Date();
        if (re.test(value)) {
            myArray = re.exec(value);
            if (DateFormat=="YYYY-MM-DD")
            {
                dt.setFullYear(myArray[1],myArray[2]-1,myArray[3]);
            }
            if (DateFormat=="DD/MM/YYYY")
            {
                dt.setFullYear(myArray[3],myArray[2]-1,myArray[1]);
            }
            if (DateFormat=="MM/DD/YYYY")
            {
                dt.setFullYear(myArray[3],myArray[1]-1,myArray[2]);
            }
            
            return dt;
        } else {
            alert("The input is not a date. "+ item.value);
            return new Date();
        }
    }

    function doReDraw(txtElemToFill)
    {
                
        if (txtElemToFill && txtElemToFill.value != "" )
        {
            curDate = new Date(); curDate = convertStringToDate(txtElemToFill.value); curDate.setDate(1); curDate.getTheYear = curDate.getFullYear ? curDate.getFullYear : curDate.getYear;
            selectedDate = new Date(); selectedDate = convertStringToDate(txtElemToFill.value); selectedDate.getTheYear = selectedDate.getFullYear ? selectedDate.getFullYear : selectedDate.getYear;
            
        }
        if (txtElemToFill)
        {
            ElemToFill = txtElemToFill.id;
        }
        
        
        
        var tblElem = document.getElementById(tblCalMainID);
        
        var h_tdMonth = document.getElementById(tblCalMainID + "_tdMonth");
        var h_tdYear = document.getElementById(tblCalMainID + "_tdYear");
        
        h_tdMonth.innerText = monthList[curDate.getMonth()];
        h_tdYear.innerText = curDate.getTheYear();
        
        
        var row;
        var cell;
        var dayOfWeek;
        
        
                
        for (var i=tblElem.rows.length - 1;i>1; i--)
        {
            tblElem.deleteRow(i);
        }
        
        
        for( var x = 1; x <= getMaxMonthDays(curDate.getMonth()); x++ ) 
        {
		    curDate.setDate(x);
		    dayOfWeek = curDate.getDay();
		    
		    if (dayOfWeek == 0) 
		        dayOfWeek = 7;
		    
		    		    
		    if( x == 1 && dayOfWeek != 1 ) 
		    { 
		        row = document.createElement("tr");
		        var m = 11; 
		        
		        if( curDate.getMonth() ) { m = curDate.getMonth() - 1 ; } 
		        
		        for (var i = getMaxMonthDays(m) - (dayOfWeek - 2); i <= getMaxMonthDays(m); i++)
                    {
                        cell = document.createElement("td");
                        cell.setAttribute("algin","center");
		                otherMonthDaysStyle(cell);
		                cell.innerText = i;
		                row.appendChild(cell);
		                
                    }
		    }
		    
		    if ( dayOfWeek == 1 )
		    {
		        if (x>1)
		        {
		            tblElem.tBodies[0].appendChild(row);
		        }
		        row = document.createElement("tr");
		    }
		    
		    
		    cell = document.createElement("td");
		    DaysStyle(cell);
		        
		    if (dayOfWeek == 6 || dayOfWeek == 7)
            {
                WeekendDaysStyle(cell);
            }
            
            
            if (curDate.getMonth()==(new Date()).getMonth()&&curDate.getYear()==(new Date()).getYear()&&x==(new Date()).getDate())
            {
                todayDayStyle(cell);
            }

            if (curDate.getTheYear() == selectedDate.getTheYear() && curDate.getMonth() == selectedDate.getMonth() && x == selectedDate.getDate())
            {
                SelectedDayStyle(cell);
            }
	    
		    
		    cell.setAttribute("align","center");
		    //alert("<a href='javascript: selectedDate=selectedDate.setFullYear("+curDate.getTheYear()+","+curDate.getMonth() + "," + x + "); alert(selectedDate);>"x+"</a>");
		    //alert("<a href='javascript: selectedDate=selectedDate.setFullYear("+curDate.getTheYear()+","+curDate.getMonth() + "," + x + "); alert(selectedDate);'>"+x+"</a>");
		    cell.innerHTML = "<a style='text-decoration:none' href='javascript: SelectDate(&quot;"+ElemToFill + "&quot;,"+x+","+ curDate.getMonth() + "," +curDate.getTheYear()+");'>"+x+"</a>";
		    
		    row.appendChild(cell);
	    } 
	    if (dayOfWeek < 7)
        {
            for (var i = 1; i <= (7 - dayOfWeek); i++)
            {
                cell = document.createElement("td");
		        cell.setAttribute("algin","center");
		        otherMonthDaysStyle(cell);
		        cell.innerText = i;
		        row.appendChild(cell);
            }
        }
	    tblElem.tBodies[0].appendChild(row);
	    curDate.setDate(1);
        
    }
    
    function getMaxMonthDays(iMonth)
    {
        return [31,((!( curDate.getTheYear() % 4 ) && ( ( curDate.getTheYear() % 100 ) || !( curDate.getTheYear() % 400 ) ))?29:28),31,30,31,30,31,31,30,31,30,31][iMonth]
    }
    
    function openCalendar(txtElemIDToFill, sDateFormat)
    {
        
        var txtElemToFill = PS_findObj(txtElemIDToFill);
        var arrPosXY = PS_getPosition(txtElemToFill);
        
        DateFormat = sDateFormat;
        doReDraw(txtElemToFill);
        PS_changeVisibility(tblCalMainID,true);
        PS_changePosition(tblCalMainID,arrPosXY[0],arrPosXY[1]+22,true,false);
        
    
    }
    
    function SelectDate(txtElemIDToFill,Day, Month, Year)
    {
        //alert(txtElemIDToFill +","+ Day+","+ Month+","+ Year);
        var txtElemToFill = PS_findObj(txtElemIDToFill);
                
        txtElemToFill.value = DateFormat.replace("DD",Day).replace("MM",(Month + 1).toString()).replace("YYYY",Year);
        
        curDate = new Date(); curDate.setFullYear(Year,Month,Day); curDate.setDate(1); curDate.getTheYear = curDate.getFullYear ? curDate.getFullYear : curDate.getYear;
        selectedDate = new Date(); selectedDate.setFullYear(Year,Month,Day);selectedDate.getTheYear = selectedDate.getFullYear ? selectedDate.getFullYear : selectedDate.getYear;
        closeCalendar();
        //doReDraw();
        
    }
    function closeCalendar()
    {
        PS_changeVisibility(tblCalMainID,false);
    }
    
   

