function addLoadEvent(func) {
  var oldonload = window.onload;
  if (typeof window.onload != 'function') {
    window.onload = func;
  } else {
    window.onload = function() {
      if (oldonload) {
        oldonload();
      }
      func();
    }
  }
}


// Roll our own function.
document.getElementsByClassName = function(className,tagType) {
	if(!tagType) tagType = '*';
	var retnode = [];
	var myclass = new RegExp('\\b'+className+'\\b');
	var elem = this.getElementsByTagName(tagType);
	for (var i = 0; i < elem.length; i++) {
		var classes = elem[i].className;
		if (myclass.test(classes)) retnode.push(elem[i]);
	}
	return retnode;
}; 


// Basic browser capabilities testing
var Go = false;
if (typeof(document.getElementsByTagName) != 'undefined'){
	if ( (typeof(document.addEventListener) != 'undefined') || (typeof(window.attachEvent) != 'undefined')){
		Go = true;
	}
}

if(Go){
	addLoadEvent(tagLinks);
}

function tagLinks(){

	// Tag promos on right side of page.
	tagRightPromos();

	var uriParts = parseUri(window.location);
	var section = 	uriParts['directory'];

	if (section){
		section = section.replace(/\s+/g,"");
		section = section.replace(/\//g,"");
		if (section.length == 0){
			section = 'home';
		}
	}else{
		section = 'home';
	}


section= 'nowshowing';

	if (section == 'ticketsandshowtimes'){
		tagTickets(uriParts);
	}else if(section == 'nowshowing'){
		tagNowShowing(uriParts);
	}else if(section == 'coming-soon'){
		tagComingSoon(uriParts);
	}else if(section == 'home'){
		tagDefaultPage(uriParts);
	}else if(section == 'theatrelocations'){
		tagLocations(uriParts);
	}else if(section == 'grand-openings'){
		// tagGrandOpenings(uriParts);
	}else if(section == 'imaxandgiantscreen'){
		tagImax(uriParts);
	}else if(section == 'digital3d'){
		tagDigital3D(uriParts);
	}
}


function getPromoArg(){

	var el = new Object();

	// Main Promo block is standard image.
	if (document.getElementById('PromoBlock')){
		var ParentElm = document.getElementById('PromoBlock');
		el = ParentElm.firstChild;

	// Main Promo block is flash.
	}else if(document.getElementsByClassName('FlashPromoBlock')){
		var ParentElm = document.getElementsByClassName('FlashPromoBlock')[0];
		el = ParentElm.firstChild;
	}

	if (el.src){
		var trackerArg = el.src.split('/');
		trackerArg = trackerArg[trackerArg.length - 1];
		return trackerArg;
	}
}



function tagDefaultPage(parts){
	if (Go){

		// Main Promo Tracking
		var trackerArg = getPromoArg();
		trackerArg = '/outbound/mainPromo/impressions/'+trackerArg;
		pageTracker._trackPageview(trackerArg);

		var CSpromoArg = '';	
		var NSpromoArg = '';	
		var SLpromoArg = '';	

		// Coming Soon Taging function.
		function tagThisCS(evt){
			pageTracker._trackPageview(CSpromoArg);
		}

		// Now Showing Taging function.
		function tagThisNS(evt){
			pageTracker._trackPageview(CSpromoArg);
		}

		// Spotlight Taging function.
		function tagThisSL(evt){
			pageTracker._trackPageview(CSpromoArg);
		}

		//Coming Soon Block
		if (document.getElementsByClassName('ComingSoonPromoBlock','div')){
			var element 	= document.getElementsByClassName('ComingSoonPromoBlock','div')[0];
			var link 		= element.getElementsByTagName('a')[0];
			var promoId 	= link.getAttribute('googleScriptId');
			CSpromoArg = '/outbound/ComingSoon/fandango/'+promoId;

			if (link.addEventListener) {
				link.addEventListener ("click",tagThisCS,false);
			}else if (link.attachEvent) {
				link.attachEvent ("onclick",tagThisCS);
			}
		}

		// Now Showing Block.
		if (document.getElementsByClassName('NowShowingPromoBlock','div')){
			var element 	= document.getElementsByClassName('NowShowingPromoBlock','div')[0];
			var link 		= element.getElementsByTagName('a')[0];
			var promoId 	= link.getAttribute('googleScriptId');
			NSpromoArg = '/outbound/NowShowing/fandango/'+promoId;
			if (link.addEventListener) {
				link.addEventListener ("click",tagThisNS,false);
			}else if (link.attachEvent) {
				link.attachEvent ("onclick",tagThisNS);
			}
		}

		// Spotlight Block.
		if (document.getElementsByClassName('SpotlightPromoBlock','div')){
			var element 	= document.getElementsByClassName('SpotlightPromoBlock','div')[0];
			var link 		= element.getElementsByTagName('a')[0];
			var promoId 	= link.getAttribute('googleScriptId');
			SLpromoArg = '/outbound/Spotlight/fandango/'+promoId;
			if (link.addEventListener) {
				link.addEventListener ("click",tagThisSL,false);
			}else if (link.attachEvent) {
				link.attachEvent ("onclick",tagThisSL);
			}
		}
	}
}



// Main promo block elements (flash and html) are hardcoded to call this onclick.
function trackPromoBlock(){
	if (Go){
		var trackerArg = getPromoArg();
		trackerArg = '/outbound/mainPromo/clicks/'+trackerArg;
		pageTracker._trackPageview(trackerArg);
	}
}



function tagRightPromos()
{

        var divs = document.getElementsByTagName("div");
        var rightRail = new Object();
        var className = '';

        for (var i=0; i<divs.length; i++){
//						Home Page Promos are commented out because the tracking is hardcoded in the html.
//                if (divs[i].className == 'rightRailBlock'){
//                        rightRail = divs[i];
//                        className = divs[i].className;
//                        break;
//                }

                if(divs[i].className == 'rightContentBlock'){
                        rightRail = divs[i];
                        className = divs[i].className;
                        break;
                }

        }

        if (rightRail){
					 // Home Page.
                if (className == 'rightRailBlock'){
                        var rightLinks = rightRail.getElementsByTagName("a");
                        for (var i=0; i<rightLinks.length; i++){
                                if (rightLinks[i].className == 'clickHereBtn'){
                                        var thisLink = rightLinks[i];
                                        if (thisLink.addEventListener) {
                                                thisLink.addEventListener ("click",tagThis,false);
                                        }else if (thisLink.attachEvent) {
                                                thisLink.attachEvent ("onclick",tagThis);
                                        }
                                }
                        }
					// All Other Pages.
                }else if (className == 'rightContentBlock'){
                        var rightLinks = rightRail.getElementsByTagName("a");
                        for (var i=0; i<rightLinks.length; i++){
                                var thisLink = rightLinks[i];
                                if (thisLink.addEventListener) {
                                        thisLink.addEventListener ("click",tagThis,false);
                                }else if (thisLink.attachEvent) {
                                        thisLink.attachEvent ("onclick",tagThis);
                                }
                        }
                }
        }

		// Taging function.
		function tagThis(evt){
			var trackerArg = '';
			if (evt.currentTarget){
       		trackerArg = '/outbound/rightPromos/' + evt.currentTarget.parentNode.getElementsByTagName('h1')[0].innerHTML;
				pageTracker._trackPageview(trackerArg);
			}else if (evt.srcElement){
				var elm = evt.srcElement;
				while (elm.nodeName != 'A'){
					elm = elm.parentNode;
				}
       		trackerArg = '/outbound/rightPromos/' + elm.parentNode.getElementsByTagName('h1')[0].innerHTML;
				pageTracker._trackPageview(trackerArg);
			}
		}
}


function tagNowShowing(parts)
{

	var section = parts['directory'];
	section = section.replace(/\//g,"");
	var file = parts['file'];
	var state = parts['queryKey']['state'];


section = 'nowshowing';

	if (state){
		var foundObj = false;
		var contentObj = new Object;
		var tableElms = document.getElementsByTagName("table");
		for (var i=0; i<tableElms.length; i++){
			var thisElm = tableElms[i];
			if (thisElm.className == 'showingContent2'){
				contentObj = thisElm;
				foundObj = true;
				break;
			}
		}

		// Attach event for each element.
		if (foundObj){
			var contentElms = contentObj.getElementsByTagName("td");
			for(var i=0; i<contentElms.length;i++){
				var el = contentElms[i];
				if (el.addEventListener) {
					el.addEventListener ("click",tagThisLocation,false);
				} else if (el.attachEvent) {
					el.attachEvent ("onclick",tagThisLocation);
				}
			}
		}

	}else{

		var foundObj = false;
		var contentObj = new Object;
		var tableElms = document.getElementsByTagName("table");
		for (var i=0; i<tableElms.length; i++){
			var thisElm = tableElms[i];
			if (thisElm.className == 'showingContent'){
				contentObj = thisElm;
				foundObj = true;
				break;
			}
		}

		// Attach event for each element.
		if (foundObj){
			var contentElms = contentObj.getElementsByTagName("td");
			for(var i=0; i<contentElms.length;i++){
				var el = contentElms[i];
				if (el.addEventListener) {
					el.addEventListener ("click",tagThisMovie,false);
				} else if (el.attachEvent) {
					el.attachEvent ("onclick",tagThisMovie);
				}
			}
		}
	}


	// Taging function.
	function tagThisMovie(evt){
		var trackerArg = '';
		var dir = '';
		var movieId = '';

		if (file == 'cinemaart.aspx'){
			dir = '/cinemaart/movies/fandango/';
		}else{
			dir  = '/movies/fandango/';
		}

		// Get Movie Identifier

		if (evt.currentTarget){
			// trackerArg = '/'+section+ dir + evt.currentTarget.innerHTML;
			movieId = evt.currentTarget.getAttribute('googleScriptId');
			trackerArg = '/'+ section + dir + movieId;
		}else if (evt.srcElement){
			// trackerArg = '/'+ section + dir + evt.srcElement.innerHTML;
			movieId = evt.srcElement.getAttribute('googleScriptId');
			trackerArg = '/'+ section + dir + movieId;
		}
		pageTracker._trackPageview(trackerArg);
	}

	// Taging function.
	function tagThisLocation(evt){
		var trackerArg = '';

		if (evt.currentTarget){

			var contentElms = evt.currentTarget.getElementsByTagName("h2");
			for(var i=0; i<contentElms.length;i++){
				var el = contentElms[i];
				if(el.className == 'theatreName'){
					if (state.length){
						trackerArg = '/'+section+'/cinemaart/'+ state + '/fandango/' + el.innerHTML;
					}else{
						trackerArg = '/'+section+'/cinemaart/fandango/'+ el.innerHTML;
					}
					break;	
				}
			}

		}else if (evt.srcElement){

			var elm = evt.srcElement;
			while (elm.nodeName != 'TR'){
				elm = elm.parentNode;
			}

			var contentElms = elm.getElementsByTagName("h2");
			for(var i=0; i<contentElms.length;i++){
				var el = contentElms[i];
				if(el.className == 'theatreName'){
					if (state.length){
						trackerArg = '/'+section+'/cinemaart/'+ state + '/fandango/' + el.innerHTML;
					}else{
						trackerArg = '/'+section+'/cinemaart/fandango/'+ el.innerHTML;
					}
					break;	
				}
			}
		}
		pageTracker._trackPageview(trackerArg);
	}
}

function tagLocations(parts)
{

	var section = parts['directory'];
	section = section.replace(/\//g,"");
	// Get elements to tag.
	var contentObj = new Object;
	var tableElms = document.getElementsByTagName("table");
	for (var i=0; i<tableElms.length; i++){
		var thisElm = tableElms[i];
		if (thisElm.className == 'theatresContent'){
			contentObj = thisElm;
			break;
		}
	}


	// Attach event for each element.
	var contentElms = contentObj.getElementsByTagName("tr");
	for(var i=0; i<contentElms.length;i++){
		var el = contentElms[i];
		if (el.addEventListener) {
			el.addEventListener ('click',tagThis,false);
		} else if (el.attachEvent) {
			el.attachEvent ('onclick',tagThis);
		}
	}


	// Get State
	var state = new String(window.location);
	if (state.indexOf('state=') == -1){
		state = '';
	}else{
		state = state.substring(state.indexOf('state=')+6,state.indexOf('state=')+8);
	}


	// Taging function.
	function tagThis(evt){
		var trackerArg = '';

		if (evt.currentTarget){

			var contentElms = evt.currentTarget.getElementsByTagName("h2");
			for(var i=0; i<contentElms.length;i++){
				var el = contentElms[i];
				if(el.className == 'theatreName'){
					if (state.length){
						trackerArg = '/'+section+'/'+ state + '/fandango/' + el.innerHTML;
					}else{
						trackerArg = '/'+section+'/fandango/'+ el.innerHTML;
					}
					break;	
				}
			}

		}else if (evt.srcElement){

			var elm = evt.srcElement;
			while (elm.nodeName != 'TR'){
				elm = elm.parentNode;
			}

			var contentElms = elm.getElementsByTagName("h2");
			for(var i=0; i<contentElms.length;i++){
				var el = contentElms[i];
				if(el.className == 'theatreName'){
					if (state.length){
						trackerArg = '/'+section+'/'+ state + '/fandango/' + el.innerHTML;
					}else{
						trackerArg = '/'+section+'/fandango/'+ el.innerHTML;
					}
					break;	
				}
			}
		}
		pageTracker._trackPageview(trackerArg);
	}

}

function tagComingSoon(parts)
{

	var section = parts['directory'];
	section = section.replace(/\//g,"");


	// Get elements to tag.
	var contentObj = new Object;
	var tableElms = document.getElementsByTagName("table");
	for (var i=0; i<tableElms.length; i++){
		var thisElm = tableElms[i];
		if (thisElm.className == 'showingContent'){
			contentObj = thisElm;
			break;
		}
	}


	// Attach event for each element.
	var contentElms = contentObj.getElementsByTagName("td");
	for(var i=0; i<contentElms.length;i++){
		var el = contentElms[i];
		if (el.addEventListener) {
			el.addEventListener ("click",tagThis,false);
		} else if (el.attachEvent) {
			el.attachEvent ("onclick",tagThis);
		}
	}

	// Get Movie Identifier
	var movieId = '';

	// Taging function.
	function tagThis(evt){
		var trackerArg = '';
		if (evt.currentTarget){
			// trackerArg = '/'+section+'/movies/fandango/'+ evt.currentTarget.innerHTML;
			movieId = evt.currentTarget.getAttribute('googleScriptId');
			trackerArg = '/'+section+'/movies/fandango/'+ movieId;
		}else if (evt.srcElement){
			// trackerArg = '/'+section+'/movies/fandango/'+ evt.srcElement.innerHTML;
			movieId = evt.srcElement.getAttribute('googleScriptId');
			trackerArg = '/'+section+'/movies/fandango/'+ movieId;
		}
		pageTracker._trackPageview(trackerArg);
	}

}

function tagImax(parts)
{

	var section = parts['directory'];
	section = section.replace(/\//g,"");
	// Get elements to tag.
	var contentObj = new Object;
	var tableElms = document.getElementsByTagName("table");
	for (var i=0; i<tableElms.length; i++){
		var thisElm = tableElms[i];
		if (thisElm.className == 'regalImaxTheatresContent'){
			contentObj = thisElm;
			// break; Don't break after first find, because there are two tables with this class, and we are looking for the the second one.
		}
	}


	// Attach event for each element.
	var contentElms = contentObj.getElementsByTagName("td");
	for(var i=0; i<contentElms.length;i++){
		var el = contentElms[i];
		if (el.addEventListener) {
			el.addEventListener ("click",tagThis,false);
		} else if (el.attachEvent) {
			el.attachEvent ("onclick",tagThis);
		}
	}

	// Taging function.
	function tagThis(evt){
		var trackerArg = '';

		if (evt.currentTarget){

			var contentElms = evt.currentTarget.getElementsByTagName("h3");
			trackerArg = '/'+section+'/theatres/fandango/'+ contentElms[0].innerHTML;

		}else if (evt.srcElement){
			var elm = evt.srcElement;
			while (elm.nodeName != 'TD'){
				elm = elm.parentNode;
			}

			var contentElms = elm.getElementsByTagName("h3");
			trackerArg = '/'+section+'/theatres/fandango/'+ contentElms[0].innerHTML;

		}
		pageTracker._trackPageview(trackerArg);
	}

}

function tagDigital3D(parts)
{

	var section = parts['directory'];
	section = section.replace(/\//g,"");

	// Get elements to tag.
	var contentObj = new Object;
	var formElms = document.getElementsByTagName("form");
	contentObj = formElms[0];

	// Attach event for each element.
	if (contentObj.addEventListener) {
		contentObj.addEventListener ("submit",tagThis,false);
	} else if (contentObj.attachEvent) {
		contentObj.attachEvent ("onsubmit",tagThis);
	}


	function tagThis(){
		var sTerm = document.getElementById('txtCityZip').value;
		// var trackerArg = '/siteSearch/?sTerm='+escape(sTerm.replace(/\s+/g,"+"))+'&sCat='+section;
		var trackerArg = '/siteSearch?sTerm='+ sTerm +'&sCat='+section;
		pageTracker._trackPageview(trackerArg);
	}

}

function tagTickets(parts)
{

	var section = parts['directory'];
	section = section.replace(/\//g,"");

	/************ Zip Code Search ******************/
	// Get elements to tag.
	var contentObj = document.getElementById("btn_zip_search");

	// Attach event for each element.
	if (contentObj.addEventListener) {
		contentObj.addEventListener ("click",tagThiszip,false);
	} else if (contentObj.attachEvent) {
		contentObj.attachEvent ("onclick",tagThiszip);
	}

	function tagThiszip(){
		var sTerm = document.getElementById('txtCityZip').value;
		// var trackerArg = '/siteSearch/?sTerm='+escape(sTerm.replace(/\s+/g,"+"))+'&sCat='+section;
		var trackerArg = '/siteSearch?sTerm='+ sTerm +'&sCat='+section;
		pageTracker._trackPageview(trackerArg);
	}


	/************ Movie or Actor Search ******************/
	// Get elements to tag.
	var contentObj = document.getElementById("btn_movie_search");

	// Attach event for each element.
	if (contentObj.addEventListener) {
		contentObj.addEventListener ("click",tagThismov,false);
	} else if (contentObj.attachEvent) {
		contentObj.attachEvent ("onclick",tagThismov);
	}

	function tagThismov(){
		var sTerm = document.getElementById('txtMovieZip').value;
		// var trackerArg = '/siteSearch/?sTerm='+escape(sTerm.replace(/\s+/g,"+"))+'&sCat='+section;
		var trackerArg = '/siteSearch?sTerm='+ sTerm +'&sCat='+section;
		pageTracker._trackPageview(trackerArg);
	}


	/************ Fandango 5 ******************/
	// Get elements to tag.
	var contentObj = new Object;
	var tableElms = document.getElementsByTagName("div");
	for (var i=0; i<tableElms.length; i++){
		var thisElm = tableElms[i];
		if (thisElm.className == 'fandango5Block'){
			contentObj = thisElm;
			break; 
		}
	}

	// Attach event for each element.
	var contentElms = contentObj.getElementsByTagName("tr");
	for(var i=0; i<contentElms.length;i++){
		var el = contentElms[i];
		if (el.addEventListener) {
			el.addEventListener ("click",tagFan5,false);
		} else if (el.attachEvent) {
			el.attachEvent ("onclick",tagFan5);
		}
	}

	// Taging function.
	function tagFan5(evt){
		var trackerArg = '';

		if (evt.currentTarget){
			var contentElms = evt.currentTarget.getElementsByTagName("a");
			trackerArg = '/'+section+'/fandango5/'+ contentElms[0].innerHTML;
		}else if (evt.srcElement){
			var elm = evt.srcElement;
			while (elm.nodeName != 'TR'){
				elm = elm.parentNode;
			}
			var contentElms = elm.getElementsByTagName("a");
			trackerArg = '/'+section+'/fandango5/'+ contentElms[0].innerHTML;
		}
		pageTracker._trackPageview(trackerArg);
	}
}

function parseUri (str) {
	var	o   = parseUri.options,
		m   = o.parser[o.strictMode ? "strict" : "loose"].exec(str),
		uri = {},
		i   = 14;

	while (i--) uri[o.key[i]] = m[i] || "";

	uri[o.q.name] = {};
	uri[o.key[12]].replace(o.q.parser, function ($0, $1, $2) {
		if ($1) uri[o.q.name][$1] = $2;
	});

	return uri;
};

parseUri.options = {
	strictMode: false,
	key: ["source","protocol","authority","userInfo","user","password","host","port","relative","path","directory","file","query","anchor"],
	q:   {
		name:   "queryKey",
		parser: /(?:^|&)([^&=]*)=?([^&]*)/g
	},
	parser: {
		strict: /^(?:([^:\/?#]+):)?(?:\/\/((?:(([^:@]*):?([^:@]*))?@)?([^:\/?#]*)(?::(\d*))?))?((((?:[^?#\/]*\/)*)([^?#]*))(?:\?([^#]*))?(?:#(.*))?)/,
		loose:  /^(?:(?![^:@]+:[^:@\/]*@)([^:\/?#.]+):)?(?:\/\/)?((?:(([^:@]*):?([^:@]*))?@)?([^:\/?#]*)(?::(\d*))?)(((\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*))(?:\?([^#]*))?(?:#(.*))?)/
	}
};
