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","calContainer02");
        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.beforeRenderEvent.subscribe(handleBeforeRender, 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 calendarRendered = false;
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++){
		 //alert(calEventType[i].id);
				if(calEventType[i]._isClicked == true){
				   //alert("Hello" + calEventType.length);
					selectedType = calEventType[i].id;
			//alert(selectedType);
		}	
	}	
	//YAHOO.org.car.calendar.cal1.render();
	var sView = 'dayView';
	var selView = document.getElementById("selView").value;
	if ( selView!=null && selView!=''){
		sView = selView;
	}
	document.getElementById("selType").value = selectedType;
	changeViewLocal(sView);	
}

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);
	
	if (selectedEventDates){
	    for (i = 0; i < selectedEventDates.length; i++){	      
	      if (selectedEventDates[i].date.toString()==dateType.toString()){	      	
	      	var detailLink = "/calendar/?sDay=" + day + "&sYear=" + year + "&sMonth=" + month + "&sType=" + selectedType;	
		window.location.href = detailLink;
	      }else{
	      	//alert('Dates are NOT equal ' + i);
	      }
	    }
	}
	
}

function handleChangePage(type,args,obj){
	
	var month = obj.cfg.getProperty("pagedate").getMonth() + 1;
	var year = obj.cfg.getProperty("pagedate").getFullYear();
	document.getElementById("selMonth").value = month;
	document.getElementById("selYear").value = year;
	changeViewLocal('monthView');
}

var smonth,sday, syear;

function handleBeforeRender(){
    if (calendarRendered){
        smonth='';
        syear='';
        sday='';
        //selectedType = 'noevent';        
    }else{
	smonth = document.getElementById("selMonth").value;
	syear = document.getElementById("selYear").value;
	sday = document.getElementById("selDay").value;
	selectedType = document.getElementById("selType").value;
	var selEvent = document.getElementById(selectedType);
	selEvent._isClicked = true;
	var _class = selEvent.className;
        selEvent.className = _class + "X";
    }
    
	if (smonth!='' && syear!='' && sday!=''){	  
	  if (! isNaN(smonth) && ! isNaN(sday) && ! isNaN(syear)) {
		var date = smonth + "/" + sday + "/" + syear;		
		//YAHOO.org.car.calendar.cal1.select(date);
		YAHOO.org.car.calendar.cal1.cfg.setProperty("pagedate", smonth + "/" + syear);	
	  	}	
	}else{
	 //alert("No Selection");
	}
}

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";
        }
	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);
	calendarRendered = true;
}

var callback = {
	success: processData,
	failure: function(o){}
}


YAHOO.util.Event.onDOMReady(YAHOO.org.car.calendar.init);
