var xmlData;
var noResultsMessage = "";
var monthArray = new Array("January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December");
var monthSort = new Array("Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec");
var lastMonthSelected = 0;
var lastYearSelected = 0;

var myEvents = new Array();
var temp = new Array();

function Event (pDate,pName,pLocation){
    this.date = pDate
    this.name = pName
    this.location = pLocation
}

function validateEvent(event){
	if(temp.length == 0){
		return true;
	}else{
		for ( var i = 0; i < temp.length; i++) {
			var eventTemp = temp[i];
			if(eventTemp.date.contains(event.date) && eventTemp.name.contains(event.name) && eventTemp.location.contains(event.location)){
				return false;
			}
		}
		return true;
	}	
}

window.addEvent('domready', function(){
	
	var req = new Request({
		url: BASE_CONTEXT + "/en/pages/experience/events/events.xml",
		onSuccess: function(objTxt,objXml){				
			xmlData = objXml;
			loadCurrentMonths();
			getEvents();
		}
	});
	req.send();
	
});

var dateRE = /^(\d{2})[\/\- ](\d{2})[\/\- ](\d{4})/;
function dmyOrdA(a, b){
	a = a.date.replace(dateRE,"$3$2$1");
	b = b.date.replace(dateRE,"$3$2$1");
	if (a>b) return 1;
	if (a <b) return -1;
	return 0;
} 

function loadSelectedMonth(month) {
	var year = lastYearSelected;
	month += lastMonthSelected;

	if (12 == month) {
		month = 0;
		year = parseInt(year) + 1;
	} else if (-1 == month) {
		month = 11;
		year = parseInt(year) - 1;
	}

	loadImageMonths(year, month);

	selectOption("month", monthArray[month]);
	selectOption("year", lastYearSelected);
	getEvents();
}

function getNextYear(currentYear, currentMonth){
    var nextYear = currentYear;
    if (currentMonth == 11){ //December
        nextYear = parseInt(currentYear) + 1;
        var selectObject = $('year');
        if (nextYear > selectObject.options[selectObject.options.length-1].value){
            nextYear = selectObject.options[0].value;
        }
        else{
            if (nextYear < selectObject.options[0].value){
                nextYear = selectObject.options[selectObject.options.length-1].value;
            }
        }
    }
    return nextYear;
}

function loadImageMonths(year, month) {
	var nextYear = getNextYear(year,month);
	var nextMonth = month;

	if (12 == (month + 1)) {
		nextMonth = -1;
	}

	$('topImage').src = BASE_CONTEXT + "/assets/en/images/experience/events/calendar/" + year + "/" + monthArray[month].toLowerCase() + ".gif";
	$('bottomImage').src = BASE_CONTEXT + "/assets/en/images/experience/events/calendar/" + nextYear + "/" + monthArray[nextMonth + 1].toLowerCase() + ".gif";
	lastMonthSelected = month;
	lastYearSelected = year;
}

function selectOption(selectId, value) {
	var selectObject = $(selectId);
    var optFound = false;
	for (i=0; i < selectObject.options.length; i++) {
		if (selectObject.options[i].value == value) {
			selectObject.options[i].selected="selected";
            optFound = true;
			return i;
		}
	}
    if (!optFound){
        if (value > selectObject.options[selectObject.options.length-1].value){
            selectObject.options[0].selected="selected";
        }else{
            selectObject.options[selectObject.options.length-1].selected="selected";
        }
    }
}

function loadCurrentMonths() {
	var date = new Date();
	var year = date.getYear();
	var month = date.getMonth();

	if (year < 1000) {
		year += 1900;
	}

	lastMonthSelected = month;
	lastYearSelected = year;

	loadImageMonths(lastYearSelected, lastMonthSelected);

	selectOption("month", monthArray[month]);
	selectOption("year", lastYearSelected);
}

function getEvents() {
	var yearSelected = $('year').get('value');
	var monthSelected = $('month').get('value');
	var regionSelected = $('region').get('value');
	var categorySelected = $('category').get('value');
	var events = "";
	var categories = "";
	var isEvent = false;
	$('eventsContainerDiv').empty();
	temp.empty();
	myEvents.empty();
	loadImageMonths(yearSelected, $('month').selectedIndex);
	if (regionSelected == "" && categorySelected == "") {
		events = xmlData.getElementsByTagName("event");
		for (j=0; j < events.length; j++) {
			if (yearSelected == events[j].getAttribute("year") && monthSelected == events[j].getAttribute("month")) {
				myEvent = new Event(events[j].getElementsByTagName("date").item(0).childNodes.item(0).data,events[j].getElementsByTagName("name").item(0).childNodes.item(0).data,events[j].getElementsByTagName("location").item(0).childNodes.item(0).data);
				if(validateEvent(myEvent)){
					myEvents[myEvents.length++] = myEvent;
					temp.push(myEvent);
				}	
				isEvent = true;
			}
		}
	} 
	else if (regionSelected == "" && categorySelected != "") {
		categories = xmlData.getElementsByTagName(categorySelected);
		for (i=0; i < categories.length; i++) {
			events = categories[i].getElementsByTagName("event");
			for (j=0; j < events.length; j++) {
				if (yearSelected == events[j].getAttribute("year") && monthSelected == events[j].getAttribute("month")) {
					myEvent = new Event(events[j].getElementsByTagName("date").item(0).childNodes.item(0).data,events[j].getElementsByTagName("name").item(0).childNodes.item(0).data,events[j].getElementsByTagName("location").item(0).childNodes.item(0).data);
					if(validateEvent(myEvent)){
						myEvents[myEvents.length++] = myEvent;
						temp.push(myEvent);
					}
					isEvent = true;
				}	
			}
		}
	} 
	else if (regionSelected != "" && categorySelected == "") {
		events = xmlData.getElementsByTagName(regionSelected)[0].getElementsByTagName("event");
		for (j=0; j < events.length; j++) {
			if (yearSelected == events[j].getAttribute("year") && monthSelected == events[j].getAttribute("month")) {
				myEvent = new Event(events[j].getElementsByTagName("date").item(0).childNodes.item(0).data,events[j].getElementsByTagName("name").item(0).childNodes.item(0).data,events[j].getElementsByTagName("location").item(0).childNodes.item(0).data);
				if(validateEvent(myEvent)){
					myEvents[myEvents.length++] = myEvent;
					temp.push(myEvent);
				}
				isEvent = true;
			}
		}
	} 
	else if (regionSelected != "" && categorySelected != "") {
		categories = xmlData.getElementsByTagName(regionSelected)[0].getElementsByTagName(categorySelected);
		for (i=0; i < categories.length; i++) {
			events = categories[i].getElementsByTagName("event");
			for (j=0; j < events.length; j++) {
				if (yearSelected == events[j].getAttribute("year") && monthSelected == events[j].getAttribute("month")) {
					myEvent = new Event(events[j].getElementsByTagName("date").item(0).childNodes.item(0).data,events[j].getElementsByTagName("name").item(0).childNodes.item(0).data,events[j].getElementsByTagName("location").item(0).childNodes.item(0).data);
					if(validateEvent(myEvent)){
						myEvents[myEvents.length++] = myEvent;
						temp.push(myEvent);
					}
					isEvent = true;
				}
			}
		}
	}
	
	myEvents.sort(dmyOrdA);
	var myEventsTemps = new Array();
	for ( var i = 0; i < myEvents.length; i++) {
		var myEvent = myEvents[i];
		addDivEvent(myEvent.date,myEvent.name,myEvent.location);	
	}

	if (!isEvent) {
		var p = document.createElement("p");
		p.innerHTML = noResultsMessage;
		$('eventsContainerDiv').appendChild(p);
	} 
}

function addDivEvent(date, title, description) {
	var eventsContainerLeftDiv = document.createElement("div");
	var span = document.createElement("span");
	var eventsContainerRightDiv = document.createElement("div");
	var h2 = document.createElement("h2");
	var p = document.createElement("p");
	var divContainer = document.getElementById("eventsContainerDiv");

	eventsContainerLeftDiv.className = "eventsContainerLeft";
	span.className = "date";
	span.innerHTML = date;
	eventsContainerLeftDiv.appendChild(span);
	divContainer.appendChild(eventsContainerLeftDiv);

	eventsContainerRightDiv.className = "eventsContainerRight";
	h2.innerHTML = title;
	p.innerHTML = description;
	eventsContainerRightDiv.appendChild(h2);
	eventsContainerRightDiv.appendChild(p);
	divContainer.appendChild(eventsContainerRightDiv);
}
