YAHOO.namespace("org.car.calendar");	
YAHOO.org.car.calendar.cal1;	     
YAHOO.org.car.calendar.init = function() { 
    YAHOO.org.car.calendar.cal1 = new YAHOO.widget.Calendar("cal1","calContainer");
        YAHOO.org.car.calendar.cal1.selectEvent.subscribe(handleSelect, YAHOO.org.car.calendar.cal1, true);
        YAHOO.org.car.calendar.cal1.changePageEvent.subscribe(handleChangePage, YAHOO.org.car.calendar.cal1, true);
	YAHOO.org.car.calendar.cal1.renderEvent.subscribe(getEventsData, YAHOO.org.car.calendar.cal1, true);
    YAHOO.org.car.calendar.cal1.render();
    YAHOO.util.Event.addListener(["category1","category2","category3"], "click", getSelectedType);
}

function EventDate(dateString, color){	
	this.date = new Date(dateString);
	this.color = color;
}

/* Default type selection hardcoded for test */
var selectedType = 'noevent';
var _isClicked = false;
var selectedEventDates;

function getSelectedType(){

     var selectedEventType = "category1"; 
     var carMeetingId = document.getElementById('category1');
     var calEventType = carMeetingId.parentNode.getElementsByTagName('li');
     var calEventType1 = document.getElementsByName("calType");     
     for(var i = 0; i<calEventType.length; i++){      
		if(calEventType[i]._isClicked == true){
		   //alert("Hello" + calEventType.length);
			selectedType = calEventType[i].id;
			//alert(selectedType);
		}
	}
	//alert("Selected Type" + selectedType);
	YAHOO.org.car.calendar.cal1.render();
	
}

function handleSelect(type,args,obj) {
	var dates = args[0]; 
	var date = dates[0];
	var year = date[0], month = date[1], day = date[2];	
	
	var dateStr = month + "/" + day + "/" + year;
	var dateType = new Date(dateStr);
	//alert(dateType);
	if (selectedEventDates){
		for (i = 0; i < selectedEventDates.length; i++){
			//alert(selectedEventDates[i].date + '\n' + dateType);
		     if (selectedEventDates[i].date.toString()==dateType.toString()){
		        //alert('Dates are equal ' + i);
		     	var homePageUrl = document.getElementById('homePageUrl').value;
			var detailLink = homePageUrl + "/calendar/?sDay=" + day + "&sYear=" + year + "&sMonth=" + month + "&sType=" + selectedType;	
			window.location.href = detailLink;
		     }else{
		     	//alert('Dates are NOT equal ' + i);
		     }
		}
	}
	
	
}

function handleChangePage(){
	var div = document.getElementById('calendarModule');
	div.innerHTML = '';
}

function markEventDates(eventDates){
	if (eventDates){
		for (i = 0; i < eventDates.length; i++){
			var cellIdx = YAHOO.org.car.calendar.cal1.getCellIndex(eventDates[i].date);
			var cell = YAHOO.org.car.calendar.cal1.cells[cellIdx];
			cell.style.backgroundColor = eventDates[i].color;
			cell.style.color = "black";
		}
	}
} 

function getEventsData(type, args, obj){

        if (selectedType == 'noevent'){
            selectedType = 'category1';
            var selEvent = document.getElementById('category1');
            selEvent._isClicked = true;
            var _class = selEvent.className;
            selEvent.className = _class + "X";
        }
        //alert(selectedType);
	var month = obj.cfg.getProperty("pagedate").getMonth() + 1;
	var year = obj.cfg.getProperty("pagedate").getFullYear();
	var url = "getCalendarData?year=" + year + "&month=" + month + "&type=" + selectedType;	
	
	YAHOO.util.Connect.asyncRequest('GET', url, callback, null);
}

function processData(o){
	var color = "";
	var eventDates = null;
	var res = o.responseXML;
	var doc = res.documentElement;
	// This element is always expected
	var eventsNum = doc.getElementsByTagName("numberOfEventDays")[0].childNodes[0].nodeValue;
	var colorElem = doc.getElementsByTagName("eventColor")[0];
	if (colorElem){
		color = colorElem.childNodes[0].nodeValue;
	}
	if (eventsNum > 0) {
		eventDates = new Array(eventsNum);
		var days = doc.getElementsByTagName("eventDay");
		for (i = 0; i < days.length; i++){
			var date = days[i].getElementsByTagName("date")[0].childNodes[0].nodeValue;
			eventDates[i] = new EventDate(date, color);
		}
	}
	selectedEventDates = eventDates;
	markEventDates(eventDates);
}


var callback = {
	success: processData,
	failure: function(o){}
}


YAHOO.util.Event.onDOMReady(YAHOO.org.car.calendar.init);