CONSTANTS.ROOT = '';
CONSTANTS.HOMEPAGE = '';
CONSTANTS.STANDINGS = new Array();
CONSTANTS.CURRENTSTANDING = 2;
CONSTANTS.STANDINGSCROLLER = new Object();
CONSTANTS.EVENTS = new Array();

var SLIDEROBJ;

document.observe('dom:loaded', function(evt) {hpSetup()});

function hpSetup() {
	loadStandings();
	loadEvents();
}

//Standings
function loadStandings() {
	var request = new Ajax.Request('xml/standings.xml',{
		method: 'get',
		asynchronous: true,
		onFailure: function() {
			//alert('fail');
		},
		onComplete: function() {
			//do something regardless of success/failure
		},
		onSuccess: function(response) {
			//do something on success
			var XMLresponse = response.responseXML;

			var indyNode = XMLresponse.getElementsByTagName('indy')[0];

			CONSTANTS.STANDINGS = makeDriverObj(indyNode.getElementsByTagName('driver'));

			buildStandingsScroller(0);
		}
	});
}

function makeDriverObj(XMLnodes) {
	var driverList = new Array();
	for (var d=0;d<XMLnodes.length;d++) {
		var driverObj = new Object();
		var driver = XMLnodes[d];
		driverObj.rank = d+1;
		driverObj.drivername = driver.getAttribute('drivername');
		driverObj.points = parseInt(driver.getAttribute('points'));
		driverObj.wins = driver.getAttribute('wins');
		driverObj.delta = driver.getAttribute('delta');
			driverObj.delta = (driverObj.delta.indexOf('-') != 0) ? '+'+driverObj.delta : driverObj.delta;
		driverObj.behind = (d==0) ? 0 : driverObj.points-driverList[0].points;

		driverList.push(driverObj);
	}

	return driverList;
}

function buildStandingsScroller(iter) {
	$('standings_holder').update();
	$('standings_holder').setStyle({'left':'0px'});
	$('standings_holder').setStyle({'width':'0px'});
	var standingsTemp = new Template('<p id="standings_#{rank}" class="standings_info"><span>#{rank}</span> <span>#{drivername}</span> <span>#{delta}</span> | </p>');
	for (var d=0;d<CONSTANTS.STANDINGS.length;d++) {
		var curW = parseInt($('standings_holder').getWidth());
		$('standings_holder').insert(standingsTemp.evaluate(CONSTANTS.STANDINGS[d]));
		var addW = parseInt($('standings_'+(d+1)).getWidth());
		$('standings_holder').setStyle({'width':curW+addW+'px'});
	}
	if (iter<3) {
		iterateScroll(iter+1);
	}
}

function iterateScroll(iter) {
	CONSTANTS.STANDINGSCROLLER = new Effect.Move($('standings_holder'), {
		delay:2.5,
		duration:60.0,
		fps:30,
		transition:Effect.Transitions.linear,
		x:-$('standings_holder').getWidth(),
		y:0,
		mode:'relative',
		afterFinish:function(){
			CONSTANTS.STANDINGSCROLLER = new Object();
			buildStandingsScroller(iter);
		}
	});
}

function showFullStandings() {
	var modalOBJ = buildModal('Standings', 'INDYCAR POINT STANDINGS');
	$('centerizer').insert(modalOBJ.MODALBG);

	var modal = modalOBJ.MODAL;

	modal.insert(modalOBJ.CLOSEBTN);
	modal.insert(modalOBJ.HEADER);
	modal.insert(modalOBJ.CONTAINER);
	modal.insert(modalOBJ.SCROLLER);

	var scrollerarea = new Element('div', {'id':'modal_scrollarea'});
	modalOBJ.CONTAINER.insert(scrollerarea);

	modal.insert('<div id="modal_table_header" class="modal_table"><div class="stand_1">RANK</div><div class="stand_2">NAME</div><div class="stand_3">POINTS</div><div class="stand_4">BEHIND</div><div class="stand_5">WINS</div><div class="stand_6">+ / -</div></div>');
	var standingsTemp = new Template('<div class="#{evenodd}"><img class="png rowborder" src="images/backgrounds/bg_stand_row.png" /><div class="rowinner"></div><div class="row_holder"><div class="stand_1">#{rank}</div><div class="stand_2">#{drivername}</div><div class="stand_3">#{points}</div><div class="stand_4">#{behind}</div><div class="stand_5">#{wins}</div><div class="stand_6">#{delta}</div></div></div>');
	var standingsTable = new Element('div', {'id':'standingstable'});
		standingsTable.addClassName('modal_table');
	for (var s=0;s<CONSTANTS.STANDINGS.length;s++) {
		CONSTANTS.STANDINGS[s].evenodd = (s%2) ? 'row_even' : 'row_odd';
		standingsTable.insert(standingsTemp.evaluate(CONSTANTS.STANDINGS[s]));
	}
	scrollerarea.insert(standingsTable);

	$('centerizer').insert(modal);
	$$('.row_even .rowinner').invoke('setOpacity','.08');

	SLIDEROBJ = scrollit(SLIDEROBJ,'modal_scrollarea','modal_container','handle_holder','scroller_handle');
}

//Events
function loadEvents() {
	var request = new Ajax.Request(CONSTANTS.ROOT+'xml/events.xml',{
		method: 'get',
		asynchronous: true,
		onFailure: function() {
			//alert('fail');
		},
		onComplete: function() {
			//do something regardless of success/failure
		},
		onSuccess: function(response) {
			//do something on success
			var XMLresponse = response.responseXML;

			CONSTANTS.EVENTS = makeEventObj(XMLresponse.getElementsByTagName('event'));

			buildEvents();
		}
	});
}

function makeEventObj(XMLnodes) {
	var eventList = new Array();
	for (var i=0;i<XMLnodes.length;i++) {
		var eventObj = new Object();
		var evnt = XMLnodes[i];

		eventObj.styleOvrrd = evnt.getAttribute('style');
		eventObj.eventdate = evnt.getAttribute('eventdate').replace(/\//ig,'.');
		eventObj.eventname = evnt.getAttribute('eventname');
		eventObj.location = evnt.getAttribute('city')+', '+evnt.getAttribute('state');
		eventObj.eventStime = evnt.getAttribute('eventStime').replace(':00 pm', '<span class="smallcaps">PM</span>').replace(':00 am', '<span class="smallcaps">AM</span>');
		eventObj.eventEtime = evnt.getAttribute('eventEtime').replace(':00 pm', '<span class="smallcaps">PM</span>').replace(':00 am', '<span class="smallcaps">AM</span>')
		eventObj.eventtime = eventObj.eventStime+((eventObj.eventEtime !='') ? ' TO '+eventObj.eventEtime : '');

		eventList.push(eventObj);
	}

	eventList.sortByProp('eventdate');

	return eventList;
}

function buildEvents() {
	var today = new Date();
	var day = today.getDate();
	var month = today.getMonth();
	var year = today.getFullYear();
	var shortDate = new Date(year,month,day-1);
	var tmplEvents = new Template('<div class="event"><p class="eventname" style="#{styleOvrrd}">#{eventname}</p><p class="eventdate" style="#{styleOvrrd}">#{eventdate}</p><p class="eventlocation" style="#{styleOvrrd}">#{location}</p><p class="eventtime" style="#{styleOvrrd}">#{eventtime}</p></div>');
	for (var v=0;v<CONSTANTS.EVENTS.length;v++) {
		var ev_Date_Base = CONSTANTS.EVENTS[v].eventdate.split('.');
		var ev_Date = new Date(ev_Date_Base[2],parseInt(ev_Date_Base[0],10)-1,ev_Date_Base[1]);
		if (ev_Date > shortDate) {
			$('eventsholder').insert(tmplEvents.evaluate(CONSTANTS.EVENTS[v]));
		}
		if ($('eventsholder').childElements().length == 4) {
			break;
		}
	}
	if ($('eventsholder').childElements().length == 0) {
		$('eventsholder').insert('<div class="event"><p class="eventname">There are currently no events scheduled.</p></div>');
	}
}

