//Constants
var CONSTANTS = {};
	CONSTANTS.MODALOBJ = {};

if (window.attachEvent) {
	window.attachEvent('onload',setup);
} else {
	window.addEventListener('load', setup, false);
}

function setup() {
	writeHeader();
	writeNav();
	writeFooter();
	writeLegal();
	addLike();
}

function addLike() {
	var likebox = $(document.createElement('div'));
	likebox.id='likebox';

	var bgimg = $(document.createElement('img'));
	bgimg.id='likebg';
	bgimg.addClassName('png');
	bgimg.src=CONSTANTS.ROOT+'images/backgrounds/bg_like.png';

	var like = '<iframe id="likeframe" src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fwww.verizonchampionshipracing.com&amp;layout=button_count&amp;show_faces=false&amp;width=270&amp;action=like&amp;font=arial&amp;colorscheme=light&amp;height=20" scrolling="no" frameborder="0" style="border:none; overflow:hidden; width:270px; height:20px;" allowTransparency="true"></iframe>';
	likebox.insert(bgimg).insert(like);

	$('centerizer').insert({'top':likebox});
}

function writeHeader() {
	$('header').insert(new Element('img', {id:'hdr_logo_vzw', src:'/images/graphics/logo_verizon.png', alt:'Verizon'}));
	$('header').insert(new Element('img', {id:'hdr_logo_divider', src:'/images/graphics/logo_divider.png', alt:'|'}));
	$('header').insert(new Element('img', {id:'hdr_logo_indycarseries', src:'/images/graphics/logo_indycarseries.png', alt:'IZOD IndyCar Series'}));
	$('header').insert(new Element('img', {id:'hdr_headertext', src:'/images/graphics/headertext.png', alt:"INDYCAR - The sport that's all about speed. On the network that's redefining it."}));
	$('header').insert(new Element('img', {id:'hdr_logo_4glte', src:'/images/graphics/logo_4glte.png', alt:'4G LTE'}));
}

function writeNav() {
	var NavItems = new Array(
		{uri:'/default.htm', section:'HOME', details:'Verizon IndyCar Racing'},
		{uri:'/app.htm', section:'GET THE APP', details:'IndyCar Mobile on Verizon'},
		{uri:'/drivers/default.htm', section:'DRIVERS', details:'Get to know them'},
		{uri:'/events/default.htm', section:'EVENTS', details:'Keep up with the calendar'},
		{uri:'/gallery/default.htm', section:'GALLERY', details:'Driver photos'},
		{uri:'/extras/wallpapers.htm', section:'EXTRAS', details:'Wallpapers, music &amp; more'}
	);

	var tmplNav = new Template('<div class="leftnav_item"><a href="#{uri}"><p class="section">#{section}</p><p class="details">#{details}</p></a></div>');
	for (var i=0;i<NavItems.length;i++) {
		var navItem = NavItems[i];
		$('leftnav').insert(tmplNav.evaluate(navItem));
	}
}

function writeFooter() {
	var PartnerItems = new Array(
		{uri:'http://www.penskeracing.com', id:'partner_logo_1', src:'logo_penskeracing.png', alt:'Penske Racing'},
		{uri:'http://www.pensketruckrental.com', id:'partner_logo_2', src:'logo_penske.png', alt:'Penske Truck Rental'},
		{uri:'http://www.penskecars.com', id:'partner_logo_3', src:'logo_penskecars.png', alt:'Penske Cars'},
		{uri:'http://www.indycar.com', id:'partner_logo_4', src:'logo_indycar.png', alt:'IndyCar'},
		{uri:'http://www.izod.com', id:'partner_logo_5', src:'logo_izod.png', alt:'IZOD'}
	);

	var tmplPartners = new Template('<a href="#{uri}" target="_blank" name="&lid=partner-#{alt}+clicked"><img id="#{id}" src="/images/graphics/#{src}" alt="#{alt}" /></a>');
	for (var i=0;i<PartnerItems.length;i++) {
		var partnerItem = PartnerItems[i];
		$('partnerholder').insert(tmplPartners.evaluate(partnerItem));
	}
}

function writeLegal() {
	$('legal').insert(
		new Element('p').insert("THE GO DADDY INDYCAR CHALLENGE")
	);
	$('legal').insert(
		new Element('p').insert("NO PURCHASE IS NECESSARY TO ENTER OR WIN.  A PURCHASE WILL NOT IMPROVE YOUR CHANCES OF WINNING. Open only to legal residents of the 48 United States (excluding Florida and New York) and the District of Columbia, who are of legal age of majority in their state of residence as of the last day of the month prior to the date of entry. Sweepstakes starts 12:00:01 AM (ET) on 9/14/11 and ends 11:59:59 PM (ET) on 10/6/11. Void in FL, NY and where prohibited by law. For complete details, see Official Rules at www.IndyCarWorldChampionships.com.")
	);
	$('legal').insert(
		new Element('p').insert("Subject to Customer Agmt. &amp; Calling Plan. V CAST phone & monthly subscription req'd. Add'l charges may apply for premium services. Available on select 3G smartphones. Offers &amp; coverage, varying by service not available everywhere. Ringtones/Ringback Tones/Wallpapers: Charges apply. Network details &amp; coverage maps at vzw.com.")
	);
	$('legal').insert(
		new Element('p').insert("&copy;2011 Verizon &copy;2011 Penske Racing, Inc. IndyCar (and Design) are registered trademarks of Brickyard Trademarks, Inc. used with permission. IZOD is a registered trademark of Phillips-Van Heusen Corporation, used with permission.")
	);
}

function showDDL(ddlName) {
	$(ddlName).show();
}

function hideDDL(ddlName) {
	$(ddlName).hide();
}

function changeBgColor(elm,newColor) {
	$(elm).ancestors()[0].setStyle({'backgroundColor':newColor});
}

function createDriverDDL(defaultText, defaultID, ddlID) {
	var ddlDefault = new Element('div');
		ddlDefault.addClassName('ddldefault');

	var ddlDefaulttext = new Element('span',{'id':defaultID});
		ddlDefaulttext.addClassName('ddldefaulttext');
		ddlDefaulttext.insert(defaultText);

	ddlDefault.insert(ddlDefaulttext);

	var ddlElm = new Element('ul',{'id':ddlID});
		ddlElm.addClassName('customddl');
		ddlElm.setStyle({'display':'none'});

	return {defaulttext:ddlDefault, ddl:ddlElm};
}

//MODALS
function buildModal(modaltype, headerText) {
	var modalOBJ = {}

	var modalBG = new Element('div', {'id':'modal_bg'});
		modalBG.setStyle({'height':($('page').getDimensions().height+$('header').getDimensions().height)+'px'});
		modalBG.setOpacity(.55);

	var modal = new Element('div', {'id':'full_'+modaltype});
		modal.setStyle({'top':(document.viewport.getScrollOffsets().top+230)+'px'});
		modal.addClassName('modal');

	var closebtn = new Element('a', {'id':'modal_closebtn'});
		closebtn.href = 'javascript:closeModal("'+modal.id+'");';
		closebtn.insert('CLOSE X');

	var header = new Element('p', {'id':'modal_header'});
		header.addClassName('podheader');
		header.insert(headerText);

	var container = new Element('div', {'id':'modal_container'});

	var scroller = new Element('div', {'id':'modal_scroller'});
		scroller.addClassName('scroller');
		scroller.insert('<a href="javascript:up(SLIDEROBJ);"><img id="arrow_up" class="arrow_up" src="images/buttons/btn_scroller_up_off.gif" onmouseover="swapImage(this,[\'_off\',\'_on\']);" onmouseout="swapImage(this,[\'_on\',\'_off\']);" alt="up" /></a><div id="handle_holder" class="large_handle_holder"><div id="scroller_handle" class="scroller_handle"></div></div><a href="javascript:down(SLIDEROBJ);"><img id="arrow_down" class="arrow_down" src="images/buttons/btn_scroller_down_off.gif" onmouseover="swapImage(this,[\'_off\',\'_on\']);" onmouseout="swapImage(this,[\'_on\',\'_off\']);" alt="down" /></a>');

	modalOBJ.MODALBG = modalBG;
	modalOBJ.MODAL = modal;
	modalOBJ.CLOSEBTN = closebtn;
	modalOBJ.HEADER = header;
	modalOBJ.CONTAINER = container;
	modalOBJ.SCROLLER = scroller;

	return modalOBJ;
}

function closeModal(modalID) {
	$(modalID).remove();
	$('modal_bg').remove();
}

function scrollit(sliderObj,scrollarea,contentarea,handle_holder,scroller_handle) {
	if ($(scrollarea)) {
		var handle_holder=$(handle_holder);

		sliderObj = new Control.Slider($(scroller_handle),handle_holder,
			{
				axis:'vertical',
				range:$R(0,$(scrollarea).getHeight()-$(contentarea).getHeight()),
				sliderValue:0,
				onSlide: function(val) {
					$(scrollarea).setStyle({'top':-val+'px'});
				},
				onChange: function(val) {
					$(scrollarea).setStyle({'top':-val+'px'});
				}
			}
		);

		return sliderObj;
	}
}

function up(sliderObj) {
	sliderObj.setValue(sliderObj.value-30);
}

function down(sliderObj) {
	sliderObj.setValue(sliderObj.value+30);
}


//HELPERS
function getViewportSize() {
	var bH = document.viewport.getDimensions().height;
	var bW = document.viewport.getDimensions().width;

	var winDims = {
		w: bW,
		h: bH
	};

	return winDims;
}

function swapImage(img,swapAr) {
	var currSrc = img.src;
	var newSrc = currSrc.replace(swapAr[0],swapAr[1]);

	img.src = newSrc;
}

//Handle browser DOM differences with XML reading
function getText(node) {
	if (node.text != undefined) {		//IE
		return node.text.replace(/&amp;/g, '&');
	} else if (node.textContent != undefined) {		//FireFox
		return node.textContent.replace(/&amp;/g, '&');
	}
}

function convertStringToXML(xmlString) {
	var xmldoc;
	if (window.ActiveXObject) {
		if (typeof xmlString == 'string' && xmlString.charAt(0) != "<") {xmlString = xmlString;}
		xmldoc = new ActiveXObject("Microsoft.XMLDOM");
		xmldoc.async = 'false';
		if (xmlString.xml == null) {
			xmldoc.loadXML(xmlString);
		} else {
			xmldoc.loadXML(xmlString.xml);
		}
	} else {
		var xmlparser = new DOMParser();
		xmldoc = xmlparser.parseFromString(xmlString, 'text/xml');
	}

	return xmldoc;
}

function addObserve(elm, overcolor, outcolor) {
	var colorOver = (overcolor!=undefined) ? overcolor : '#770000';
	var colorOut = (outcolor!=undefined) ? outcolor : '#333333';
	elm.observe('mouseover', function(evt) {changeBgColor(this,colorOver);});
	elm.observe('mouseout', function(evt) {changeBgColor(this,colorOut);});
}

function setCookie(cookieName, cookieValue, cookieLengthDays) {
	if (cookieLengthDays != undefined) {
		var expDate = new Date();
		expDate.setTime(expDate.getTime()+(cookieLengthDays*24*60*60*1000));
		var expires = 'expires='+expDate.toGMTString();
	} else {
		var expires = '';
	}

	document.cookie = cookieName+'='+cookieValue+';'+expires;
}

function getCookie(cookieName) {
	cookieName += '=';
	var cookies = document.cookie.split(';');

	for (var i=0;i<=cookies.length-1;i++) {
		var c = cookies[i];
		while (c.charAt(0) == ' ') { c = c.substring(1,c.length); }
		if (c.indexOf(cookieName) == 0) { return c.substring(cookieName.length, c.length); }
	}
	return null;
}

function clearCookie(cookieName) {
	setCookie(cookieName, '', -1);
}

Array.prototype.sortByProp = function(sortProp) {
	if (sortProp != '') {
		function sortfxn(a,b) {
			if (isNaN(a[sortProp]) || isNaN(b[sortProp])) {
				var aProp = a[sortProp].toLowerCase();
				var bProp = b[sortProp].toLowerCase();
				if (aProp < bProp) {return -1;}
				if (aProp > bProp) {return 1;}
				return 0;
			} else {
				var aProp = a[sortProp];
				var bProp = b[sortProp];
				return aProp-bProp;
			}
		}

		this.sort(sortfxn);
	}

	return this;
}
