function addLoadEvent(func) {
	var oldonload = window.onload;
	window.onload = (typeof window.onload != 'function') ? func : function() {
		oldonload();
		func();
	};
};
var getElementsByClassName = function(className, tag, elm) {
	if (document.getElementsByClassName) {
		getElementsByClassName = function(className, tag, elm) {
			elm = elm || document;
			var elements = elm.getElementsByClassName(className), nodeName = (tag) ? new RegExp(
					"\\b" + tag + "\\b", "i")
					: null, returnElements = [], current;
			for ( var i = 0, il = elements.length; i < il; i += 1) {
				current = elements[i];
				if (!nodeName || nodeName.test(current.nodeName)) {
					returnElements.push(current);
				}
			}
			return returnElements;
		};
	} else if (document.evaluate) {
		getElementsByClassName = function(className, tag, elm) {
			tag = tag || "*";
			elm = elm || document;
			var classes = className.split(" "), classesToCheck = "", xhtmlNamespace = "http://www.w3.org/1999/xhtml", namespaceResolver = (document.documentElement.namespaceURI === xhtmlNamespace) ? xhtmlNamespace
					: null, returnElements = [], elements, node;
			for ( var j = 0, jl = classes.length; j < jl; j += 1) {
				classesToCheck += "[contains(concat(' ', @class, ' '), ' "
						+ classes[j] + " ')]";
			}
			try {
				elements = document.evaluate(".//" + tag + classesToCheck, elm,
						namespaceResolver, 0, null);
			} catch (e) {
				elements = document.evaluate(".//" + tag + classesToCheck, elm,
						null, 0, null);
			}
			while ((node = elements.iterateNext())) {
				returnElements.push(node);
			}
			return returnElements;
		};
	} else {
		getElementsByClassName = function(className, tag, elm) {
			tag = tag || "*";
			elm = elm || document;
			var classes = className.split(" "), classesToCheck = [], elements = (tag === "*" && elm.all) ? elm.all
					: elm.getElementsByTagName(tag), current, returnElements = [], match;
			for ( var k = 0, kl = classes.length; k < kl; k += 1) {
				classesToCheck.push(new RegExp("(^|\\s)" + classes[k]
						+ "(\\s|$)"));
			}
			for ( var l = 0, ll = elements.length; l < ll; l += 1) {
				current = elements[l];
				match = false;
				for ( var m = 0, ml = classesToCheck.length; m < ml; m += 1) {
					match = classesToCheck[m].test(current.className);
					if (!match) {
						break;
					}
				}
				if (match) {
					returnElements.push(current);
				}
			}
			return returnElements;
		};
	}
	return getElementsByClassName(className, tag, elm);
};
var ajax_http_mode = "GET";
var ajax_asynchronous = true;
var ajax_loading = 1;
var ajax_loaded = 2;
var ajax_interactive = 3;
var ajax_complete = 4;
var OK = 200;
function req(url) {
	this._url = url;
	this._ie = window.XMLHttpRequest ? false : true;
	this._xmlhttp = this._ie ? new ActiveXObject("Microsoft.XMLHTTP")
			: new XMLHttpRequest();
	this._xmlhttp.open(ajax_http_mode, this._url, ajax_asynchronous);
	var __this = this;
	var __xmlhttp = this._xmlhttp;
	this.send = function(parms) {
		this._xmlhttp.send(parms);
		return OK;
	};
	this._xmlhttp.onreadystatechange = function() {
		this._xmlhttp = __xmlhttp;
		if (this._xmlhttp.readyState != ajax_complete) {
			return;
		}
		if (__this.ondata) {
			__this.ondata(this._xmlhttp.responseXML);
		}
		if (__this.ontext) {
			__this.ontext(this._xmlhttp.responseText);
		}
	}
}

if (!Array.prototype.indexOf) {
	Array.prototype.indexOf = function(elt /* , from */) {
		var len = this.length;

		var from = Number(arguments[1]) || 0;
		from = (from < 0) ? Math.ceil(from) : Math.floor(from);
		if (from < 0)
			from += len;

		for (; from < len; from++) {
			if (from in this && this[from] === elt)
				return from;
		}
		return -1;
	};
}

function imageSlide() {
	var imageContainer = getElementsByClassName('featured-episode-image', 'div');
	var images = imageContainer[0].getElementsByTagName('img');
	var imageArray = new Array();
	imageArray = images;
	if (images.length > 1) {
		var nextSlide = document.createElement('span');
		nextSlide.className = 'next-image';

		for (i = 0; i < images.length; i++) {
			images[i].className = 'show';
			if (i != 0) {
				images[i].className = 'hide';
			}
			images[i].onclick = function() {
				if (this.className = 'show') {
					if (this.nextSibling == null) {
						images[0].className = 'show';
						this.className = 'hide';
					} else {
						this.nextSibling.className = 'show';
						this.className = 'hide';
					}
				}
			}
		}
	}
}

function tabContent() {
	if (typeof window.episodeRecap == 'undefined') {
		var header = document.getElementsByTagName('head');
		headerTag = header[0];
		var linkElem = document.createElement('link');
		linkElem.href = 'http://static.amctv.com/css/originals/mad-men/mad-men-episode.css';
		linkElem.type = 'text/css';
		linkElem.rel = 'stylesheet';
		headerTag.appendChild(linkElem);
		var episodeReview = getElementsByClassName('episode-review');
		var episodeRecap = getElementsByClassName('episode-recap');
		var episodeContainer = getElementsByClassName('featured-episode-content');
		var headers = episodeContainer[0].getElementsByTagName('h3');
		var newDiv = document.createElement('div');
		newDiv.className = 'spanHeaderContainer';
		var spanOne = document.createElement('span');
		var spanTwo = document.createElement('span');
		spanOne.innerHTML = headers[1].innerHTML;
		spanTwo.innerHTML = headers[0].innerHTML;
		headers[0].innerHTML = '';
		newDiv.appendChild(spanOne);
		newDiv.appendChild(spanTwo);
		headers[0].appendChild(newDiv);
		episodeContainer[0].style.paddingTop = '0';
		spanOne.className = 'tab-one';
		spanTwo.className = 'tab-two';
		episodeReview[0].style.display = 'none';
		headers[1].style.display = 'none';
		spanOne.onclick = function() {
			episodeReview[0].style.display = 'none';
			episodeRecap[0].style.display = 'block';
			this.className = 'tab-one';
			spanTwo.className = 'tab-two';
		};
		spanTwo.onclick = function() {
			episodeRecap[0].style.display = 'none';
			episodeReview[0].style.display = 'block';
			this.className = 'tab-two border-bottom-white';
			spanOne.className = 'tab-one border-bottom-black';
		}
	}
}

function injectEpisodeList() {
	if (typeof window.episodeRecap == 'undefined') {
		var newLI = document.createElement('li');
		var newIMG = document.createElement('img');
		newIMG.src = 'http://www.workofcesar.com/AMC-TV/the-prisoner/1960-minisite/episode-guide/img/ajax-loader.gif';
		newIMG.style.marginLeft = '40%';
		newLI.style.textAlign = 'center';
		newLI.appendChild(newIMG);
		var episodeContainer = getElementsByClassName('episode-guide-sidebar');
		var episodeUL = episodeContainer[0].getElementsByTagName('ul');
		episodeUL[0].appendChild(newLI);
		var listItems = episodeUL[0].getElementsByTagName('li');
		var timeStamp = new Date().getTime();
		var xhr = new req(
				'/2351143/2638645/mad-men-episode-list.html?timestap=' + timeStamp);
		xhr.send(null);
		xhr.ontext = function(data) {
			var newDiv = document.createElement('div');
			
			var seasonOneUL = document.createElement('ul');
			seasonOneUL.id = "seasonOneList";
			seasonOneUL.className = 'season-one-list clearFix';
			
			var seasonTwoUL = document.createElement('ul');
			seasonTwoUL.id = "seasonTwoList";
			seasonTwoUL.className = 'season-two-list clearFix';
			
			var seasonThreeUL = document.createElement('ul');
			seasonThreeUL.id = "seasonThreeList";
			seasonThreeUL.className = 'season-three-list clearFix';
			
			var theData = data;
			newDiv.innerHTML = theData;
			
			// append season 1 data
			var seasonOneListItems = newDiv.getElementsByTagName('ul')[0].innerHTML;
			episodeUL[0].parentNode.removeChild(episodeUL[0]);
			seasonOneUL.innerHTML = seasonOneListItems;
			episodeContainer[0].appendChild(seasonOneUL);
			
			// append season 2 data
			var seasonTwoListItems = newDiv.getElementsByTagName('ul')[1].innerHTML;
			seasonTwoUL.innerHTML = seasonTwoListItems;			
			episodeContainer[0].appendChild(seasonTwoUL);
			
			// append season 3 data
			var seasonThreeListItems = newDiv.getElementsByTagName('ul')[2].innerHTML;
			seasonThreeUL.innerHTML = seasonThreeListItems;			
			episodeContainer[0].appendChild(seasonThreeUL);
			
			showListAnimate();
		}
	}
}

function showListAnimate() {
	var seasonListContainer = getElementsByClassName('episode-guide-sidebar',
	'div')[0];

	var seasonLiArray = new Array();
	seasonLiArray[0] = getElementsByClassName('season-one', 'li')[0];
	seasonLiArray[1] = getElementsByClassName('season-two', 'li')[0];
	seasonLiArray[2] = getElementsByClassName('season-three', 'li')[0];
	
	var seasonListArray = new Array();
	seasonListArray[0] = seasonListContainer.getElementsByTagName('ul')[0];
	seasonListArray[1] = seasonListContainer.getElementsByTagName('ul')[1];
	seasonListArray[2] = seasonListContainer.getElementsByTagName('ul')[2];

	
	seasonLiArray[0].getElementsByTagName('a')[0].onclick = function(evt) { return expandAndCompress(0, seasonLiArray, seasonListArray); };
	seasonLiArray[1].getElementsByTagName('a')[0].onclick = function(evt) { return expandAndCompress(1, seasonLiArray, seasonListArray); };
	seasonLiArray[2].getElementsByTagName('a')[0].onclick = function(evt) { return expandAndCompress(2, seasonLiArray, seasonListArray); };
	
	
	for(var i=0;i<seasonLiArray.length;i++) {
		seasonLiArray[i].getElementsByTagName('a')[0].href = "javascript:void(0);";
		// compress
		if(i>1) {
			seasonListArray[i].height = "24px";
			seasonListArray[i].paddingTop = "0";
		}
	};

	// Bandaid fix for season display 	
	var rx = /episode(\d+)/;
	var season = rx.exec(window.location.href);
	
	if (season[1].length == 1 || season[1].length == 2) {
		// season 1
		expandAndCompress(0, seasonLiArray, seasonListArray);
	} else if (beginsWith(season[1], '2')) {
		expandAndCompress(1, seasonLiArray, seasonListArray);
	
	} else if (beginsWith(season[1], '3')) {		
		expandAndCompress(2, seasonLiArray, seasonListArray);
	}
	

}
function expandAndCompress(pos, seasonLiArray, seasonListArray) {
	for(var i=0;i<seasonLiArray.length;i++) {
		if(pos==i) {
			seasonLiArray[i].getElementsByTagName('a')[0].className = 'active';
			seasonListArray[i].style.height = 'auto';
			seasonListArray[i].style.paddingTop = '35px';	
		}
		else {
			seasonLiArray[i].getElementsByTagName('a')[0].className = 'in-active';
			seasonListArray[i].style.height = '24px';
			seasonListArray[i].style.paddingTop = '0';
		}
	};
	return false;
}



function episodeRecapType() {
	var recapTargetElem = document.getElementById('contentNavArea');
	if (typeof window.episodeRecap != 'undefined' && window.episodeRecap == '1') {
		var timeStamp = new Date().getTime();
		var xhr = new req(
				'/2351143/2638645/mad-men-episode-list.html?timestap=' + timeStamp);
		xhr.send(null);
		xhr.ontext = function(data) {
			var newDiv = document.createElement('div');
			
			var seasonOneUL = document.createElement('ul');
			seasonOneUL.className = 'season-one-list clearFix';
			
			var seasonTwoUL = document.createElement('ul');
			seasonTwoUL.className = 'season-two-list clearFix';
			
			var seasonThreeUL = document.createElement('ul');
			seasonThreeUL.className = 'season-three-list clearFix';
			
			var theData = data;
			newDiv.innerHTML = theData;
			recapTargetElem.innerHTML = '<h4>episode guide</h4>' + newDiv.innerHTML;
			recapTargetElem.className = 'episode-guide-sidebar';
			
			var seasonOneListItems = recapTargetElem.getElementsByTagName('ul')[0];
			seasonOneListItems.className = 'season-one-list clearFix';
			
			var seasonTwoListItems = recapTargetElem.getElementsByTagName('ul')[1];
			seasonTwoListItems.className = 'season-two-list clearFix';
			
			var seasonThreeListItems = recapTargetElem.getElementsByTagName('ul')[2];
			seasonThreeListItems.className = 'season-three-list clearFix';
		}
	}
}

function beginsWith(str, chr) {
	return str.charAt(0) === chr ? true : false;
}

function init() {
	//imageSlide();
	injectEpisodeList();
	episodeRecapType();
}

addLoadEvent(init);
tabContent();
