
var selectedMonth = new Date().getMonth();
var selectedYear = new Date().getFullYear();
var selectedDay = new Date().getDate();


function InitCalendario ( calendarDivId, inputTextId ) {
	
        var targetObj = document.getElementById ( inputTextId );
        
        var moveObj = document.getElementById ( calendarDivId );
		
		setPos( targetObj, moveObj ); // setPos(targetObj,moveObj)
				
        moveObj.style.display = 'block';
        				
        drawCalendario( calendarDivId, inputTextId );
        
        setupLinks( calendarDivId, inputTextId  );
}

function drawCalendario ( calendarDivId, inputTextId ) {
		
		var html = '';
		html = '<a id="closeCalender">Chiudi</a>';
		html += '<table cellpadding="0" cellspacing="0" id="linksTable"><tr>';
    	html += '	<td> <a id="prevMonth"><< Prec</a> </td>';
		html += '	<td> <a id="nextMonth">Pros >></a> </td>';
		html += '</tr></table>';
		
		html += '<table id="calendar" cellpadding="0" cellspacing="0"><tr>';
		html += '	<th colspan="7" class="calendarHeader">' + getMonthName(selectedMonth) + ' ' + selectedYear + '</th>';
		html += '</tr><tr class="weekDaysTitleRow">';
		
        var weekDays = new Array('D','L','M','M','G','V','S');
        
		for ( var j=0; j<weekDays.length; j++ ) {
			html += '<td>' + weekDays[j] + '</td>';
        }
		
        var daysInMonth = getDaysInMonth( selectedYear, selectedMonth );
        var startDay = getFirstDayofMonth( selectedYear, selectedMonth );
        var numRows = 0;
        var printDate = 1;
        if (startDay != 7) {
            numRows = Math.ceil(  ( (startDay+1) + (daysInMonth) ) / 7  ); // calculate the number of rows to generate
        }
		
        // calculate number of days before calendar starts
        if (startDay != 7) {
            var noPrintDays = startDay + 1; 
        } else {
            var noPrintDays = 0; // if sunday print right away	
        }
		
		var today = new Date().getDate();
		var thisMonth = new Date().getMonth();
		var thisYear = new Date().getFullYear();
		
        // create calendar rows
        for (var e=0; e<numRows; e++) {
			html += '<tr class="weekDaysRow">';
            // create calendar days
            for (var f=0; f<7; f++) {
			
				if ( (printDate == today) && ( selectedYear == thisYear ) && ( selectedMonth == thisMonth ) && ( noPrintDays == 0 )) {
					html += '<td id="today" class="weekDaysCell">';
				} else {
                	html += '<td class="weekDaysCell">';
				}
				
                if (noPrintDays == 0) {
					if (printDate <= daysInMonth) {
						html += '<a>'+printDate+'</a>';
					}
                    printDate++;
                }
                html += '</td>';
                if(noPrintDays > 0) noPrintDays--;
            }
            html += '</tr>';
        }
		html += '</table>';
		
        // add calendar to element to calendar Div
        var calendarDiv = document.getElementById( calendarDivId );
        
        //html = "<div>xxxxx<br/>xxxxx<br/>xxxxx<br/>xxxxx<br/></div>";
        
        calendarDiv.innerHTML = html;
		
		
		// close button link
        document.getElementById('closeCalender').onclick = function () {
            calendarDiv.style.display = 'none';
        }
		
		
		// setup next and previous links
		document.getElementById('nextMonth').onclick = function () {
            selectedMonth++;
            if (selectedMonth > 11) {
                selectedMonth = 0;
                selectedYear++;
            }
            drawCalendario( calendarDivId, inputTextId ); 
            setupLinks( calendarDivId, inputTextId );
        }
		
		document.getElementById('prevMonth').onclick = function () {
			selectedMonth--;
			if (selectedMonth < 0) {
					selectedMonth = 11;
					selectedYear--;
			}
			drawCalendario( calendarDivId, inputTextId ); 
			setupLinks( calendarDivId, inputTextId );
		}
		
                
} // end drawCalendar function




function setupLinks ( calendarDivId, inputTextId  ) {

        // set up link events on calendar table
        var y = document.getElementById('calendar');
        var x = y.getElementsByTagName('a');
		
        for (var i=0; i<x.length; i++) {
            x[i].onmouseover = function () {
                this.parentNode.className = 'weekDaysCellOver';
            }
            x[i].onmouseout = function () {
                this.parentNode.className = 'weekDaysCell';
            }
            x[i].onclick = function () {
                document.getElementById( calendarDivId ).style.display = 'none';
                selectedDay = this.innerHTML;
                document.getElementById( inputTextId ).value = formatDate( selectedDay, selectedMonth, selectedYear );		
            }
        }
}



/* Functions Dealing with Dates */
function formatDate(Day, Month, Year) {
    Month++; // adjust javascript month
    if (Month <10) Month = '0'+Month; // add a zero if less than 10
    if (Day < 10) Day = '0'+Day; // add a zero if less than 10
    var dateString = Day+'-'+Month+'-'+Year;
    return dateString;
}

function getMonthName(month) {
    var monthNames = new Array('Gennaio','Febbraio','Marzo','Aprile','Maggio','Giugno','Luglio','Agosto','Settembre','Ottobre','Novembre','Dicembre');
    return monthNames[month];
}

function getDayName(day) {
    var dayNames = new Array('Lunedi','Martedi','Mercoledi','Giovedi','Venerdi','Sabato','Domenica')
    return dayNames[day];
}

function getDaysInMonth(year, month) {
    return 32 - new Date(year, month, 32).getDate();
}



function getFirstDayofMonth(year, month) {
    var day;
    day = new Date(year, month, 0).getDay();
    return day;
}


/* Position Functions */
function setPos( targetObj , moveObj ) {


    var coors = findPos( targetObj );
    
    moveObj.style.position = 'absolute';
    moveObj.style.top = coors[1] + 28 + 'px'; // 3 abbasso 3px
    moveObj.style.left = coors[0] - 35 + 'px'; 
    // 35 mi sposto verso sinistra di 35px x adattarmi alla lunghezza del elemento input
}

function findPos(obj) {

    var curleft = curtop = tmp_left = tmp_top = 0;
    
    if ( obj.offsetParent ) {
    
        while ( obj.offsetParent ) {       
            curleft += obj.offsetLeft;
            tmp_left = obj.offsetLeft;
            
            curtop += obj.offsetTop;
            tmp_top = obj.offsetTop;
            
            obj = obj.offsetParent;
        }
    }
    
    curtop = curtop - tmp_top;
    curleft = curleft - tmp_left; //levo l'ultimo div del body
    
    return [curleft,curtop];
}




function getOBJposition( obj, dim )  {

	//var obj = document.getElementById( id );
	var top = 0 ; var left = 0 ;
	
	if ( obj != null || dim.length > 0 )  {
		dim = dim.toLowerCase();
		while( obj.tagName.length > 0 )  {
			if ( obj.tagName.toUpperCase() == "BODY" ) break ;
			if ( dim == "top" && obj.tagName != "TR" && obj.tagName != "TBODY" )  {
				top += obj.offsetTop ;
				top -= obj.clientTop ;
			}
			else if ( dim == "left" && obj.tagName != "TBODY" )  {
				left += obj.offsetLeft ;
				left -= obj.clientLeft ;
			}
			obj = obj.parentNode ;
		}
	if ( dim == "top" ) return top ;
	else if ( dim == "left" ) return left ;
	}
	else  {
		top = left = width = height = -1 ;
		return false ;
	}
}