var date = new Date();    
var monthArray = ["Janurary", "Febuary", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"];
var daysInMonth, firstDayInMonth;
var calendarYear = date.getFullYear();
var calendarMonth = date.getMonth();
var calendarDay = date.getDay();
var calendarDate = date.getDate();
var direction;
var isVisible = false;
var dateBoxId;

function createCalendar(month){
    daysInMonth = getDaysInMonth(month);
    firstDayInMonth = getfirstDayInMonth(month);
    return buildCalendar(month, daysInMonth, firstDayInMonth);        
}

function getDaysInMonth(month){
    var dayCount;
    if (month == 3 || month == 5 || month == 8 || month == 10){
        dayCount = 30;
    }
    else if (month == 1){
        if ((calendarYear % 4) == 0){
            dayCount = 29;
        }
        else{
            dayCount = 28;
        }
    }
    else{ 
        dayCount = 31;
    }
    return dayCount;
}
function getfirstDayInMonth(month){
    var dow = calendarDay;    
    if(direction == 0){
        //get first week day of the previous month
        for(i = daysInMonth; i >= 1; i--){
            if(dow == 0){dow = 6;}
            else{dow--;}
        }        
    }
    else if (direction == 1){
        //get the first week day of month
        for (i = 1; i <= getDaysInMonth(month -1); i++){
            if (dow == 6){dow = 0;}        
            else {dow++;}          
        }       
    }
    else{
        //get first day of week
        for(i = calendarDate; i > 1; i--){
            if(dow == 0){dow = 6;}
            else{dow--;}
        }                
    }
    calendarMonth = month;    
    calendarDay = dow;    
    return dow;    
}

function buildCalendar(newMonth, daysInMonth, firstDayInMonth){
    var calendar;
    calendar = '<table id="calendar"><tr><td colspan="7">' + 
		'<div class="barrow" onclick="changeMonth(getCalendarMonth() - 1)"></div>' + 
		'<div class="month">' + monthArray[newMonth] + '&nbsp;' + calendarYear + '</div>' + 
		'<div class="farrow" onclick="changeMonth(getCalendarMonth() + 1)"></div></td></tr>' + 	 
		'<tr class="daysOfWeek" align="center"><td>Sun</td><td>Mon</td><td>Tue</td><td>Wed</td><td>Thr</td><td>Fri</td><td>Sat</td></tr>';   
    
    var x=0;
    var y = 1;
    var d = new Date();

    while(x < daysInMonth + firstDayInMonth){
        calendar = calendar + '<tr class="dates">';
        for(z = 0; z < 7; z++){
            if(y <= daysInMonth){
                if (x < firstDayInMonth) {
                    calendar = calendar + '<td></td>';
                }
                else if (calendarYear == d.getFullYear()) {
		    if(calendarMonth < d.getMonth() + 6 && calendarMonth >= d.getMonth()){
		        if(calendarMonth == d.getMonth()){
			    if(y > d.getDate() + 2){
  			        calendar += '<td>' + makeDayCell(z, y) + '</td>'; 
				y++;
				//calendar += '<td><a href="javascript:validateDate(' + y + ')">' + y + '</a></td>'; y++;
			    }
			    else{
  			        calendar += '<td>' + y + '</td>'; 
				y++;				
			    }			    
			}
			else {
			    calendar += '<td>' + makeDayCell(z, y) + '</td>'; 
			    y++;
			    //calendar += '<td><a href="javascript:validateDate(' + y + ')">' + y + '</a></td>'; y++;			    
			} 
		    }
		    else{
		        calendar += '<td>' + y + '</td>'; 
			y++;
		    }  				
                }	
		else if (calendarYear == d.getFullYear() + 1){
		    if((d.getMonth() + 5)%11 < 6){
			calendar += '<td>' + makeDayCell(z, y) + '</td>'; 
			//calendar += '<td><a href="javascript:validateDate(' + y + ')">' + y + '</a></td>'; 
			y++;
		    }
		    else {
			calendar += '<td>' + y + '</td>'; 
			y++;
		    }
		}
		else{
		    calendar += '<td>' + y + '</td>'; 
		    y++;
		}	            	
            }	    
            else{
                calendar += '<td></td>';
            }
	    x++;
        }
        calendar += '</tr>';
    }
    calendar += '</table>';
    
    return calendar;
}

function makeDayCell(z, y){
  if((z == 0) || (z == 6) || (z == 3)){
    return y;
  }
  else{
    //return '<a href="appt_req.aspx?date=' + (calendarMonth + 1) + '/' + y + '/' + calendarYear + '">' + y + '</a>';
    return '<a href="#" onClick=\'document.getElementById("'+ dateBoxId +'").setAttribute("value", "' + (calendarMonth + 1) +'/'+ y +'/'+ calendarYear + '");\' >' + y + '</a>';
  }
}

function attachTextBox(elementId){
    dateBoxId = elementId;
}

function getCalendarMonth(){
    return calendarMonth;
}

function getCalendarYear(){
    return calendarYear;        
}

function changeMonth(month){        
    var newMonth;
    if(month < 0){
	newMonth = 11; 
	calendarYear--; 
	direction = 0;
    }
    else if(month > 11){
	newMonth = 0; 
	calendarYear++; 
	direction = 1;
    }
    else{
	newMonth = month; 
	if(month > calendarMonth){
		direction = 1;
	}
	else{
		direction = 0;
	}
  }
    document.getElementById("jsCalendar").innerHTML = createCalendar(newMonth);
}

function validateDate(day){
    var num = (calendarMonth + 1) + "/" + day + "/" + calendarYear;
    var isval = false;
    var thisyear = date.getFullYear();
    
    if((calendarYear == thisyear)||(calendarYear == thisyear+1)){
        if(calendarYear == thisyear){
            if(calendarMonth == date.getMonth()){
                if(day > date.getDate()){
                    isval = true;
                }         
            }
            else if(calendarMonth > date.getMonth()){
                if((calendarMonth - date.getMonth())< 6){
                    isval = true;
                }
            }
        }
        if(calendarYear > thisyear){
            if(date.getMonth() >= 5 ){
                if((date.getMonth() - calendarMonth) >= 5){
                    isval = true;
                } 
            }        
        }        
    }         
    if(!isval){
        alert("Sorry, please choose a different date.");
    }
    else{window.location.href = 'appt_req.aspx?date=' + num;}

}

function showCal(){
    var d = new Date(); 
    document.getElementById("jsCalendar").innerHTML = createCalendar(d.getMonth());
}

function toggleVisibility(elementId) {
    if (isVisible) {
        document.getElementById(elementId).style.visibility = 'hidden';
        isVisible = false;

    }
    else {
        document.getElementById(elementId).style.visibility = 'visible';
        isVisible = true;
    }
}

function setPositionRelativeTo(elementId1, elementId2) {    
    var e1 = document.getElementById(elementId1);
    var e2 = document.getElementById(elementId2);
    var e2pos = getElementPosition(e2);
    e1.style.left = (e2pos[0] + 25) + "px";
    e1.style.top = (e2pos[1] - 5) + "px";
}

function getElementPosition(obj) {
    var curleft = curtop = 0;
    if (obj.offsetParent) {
        curleft = obj.offsetLeft
        curtop = obj.offsetTop
        while (obj = obj.offsetParent) {
            curleft += obj.offsetLeft
            curtop += obj.offsetTop
        }
    }
    return [curleft, curtop];
}