function Modal()
{
	var me = this;
	var closeHandler  = false;
	
	function bgClickHandler(e)
	{
		if (!e) e = window.event;
		if ((e.target || e.srcElement) != me.element) return;
		
		me.closeModal();
	}
	
	this.closeModal = function(resetHash)
	{
		if (typeof resetHash == "undefined") {
			resetHash = true;
		}
		if (closeHandler) {
			closeHandler.call();
		}
		me.element.onclick = null;
		me.setHTML('');
		document.body.removeChild(me.element);
		if (resetHash) {
			window.location.hash = "";
		}
	}
	
	
	this.openModal = function(element, _closeHandler)
	{
		closeHandler = _closeHandler;
		document.body.insertBefore(this.element, document.body.firstChild);
		this.element.onclick =  bgClickHandler;
		this.element.appendChild(element);
		if( g.isHTML5 ){
			$('#modalWrapper').css( 'height', $('#mainWrapper').css( 'height' ) );
			$('#videoComponent').css( 'top', '40%' );
		}
	}
	
	this.setHTML = function(html)
	{
		this.element.innerHTML = html;
	}
	
	
	this.element = document.getElementById('modalWrapper');
	document.getElementById('classRef').removeChild(this.element);
	
}


function VideoComponent(isHTML5, loadHandler, videoCompleteHandler)
{
	if (typeof isHTML5 == 'undefined') {
		isHTML5 = false;
	}
	
	var BLOCKTYPE_STORIES = "stories";
	var BLOCKTYPE_STEPS = "steps";
	var BLOCKTYPE_COMMERCIALS = "commercials";
	
	var TYPE_BUYING = "buying";
	var TYPE_SELLING = "selling";
	var TYPE_STORY = "story";
	var TYPE_COMMERCIAL = "commercial";
	
	var me = this;
	var videoPlayer = false;;
	var isVisible = false;
	var isLoaded = false;
	var videoFile = "";
	var videoDescription = "";
	var openedNavBlock = false;
	var openedCategory = false;
	var currentCategory = false;
	var currentNavItem = false;
	
	var playerType = "";
	
	var navBlocks = Array();
	var navItems = Array();
	var navBlockTyp = BLOCKTYPE_STEPS;
	var navBlockRef = Array();
	navBlockRef[BLOCKTYPE_STEPS] = document.getElementById('videoNavBlock-steps');
	navBlockRef[BLOCKTYPE_STORIES] = document.getElementById('videoNavBlock-stories');
	navBlockRef[BLOCKTYPE_COMMERCIALS] = document.getElementById('videoNavBlock-commercials');
	
	var navItemRef = document.getElementById('videoNavItem');
	
	this.element =document.getElementById('videoComponent');
	this.currentVideo = "";
	this.elements = Array();
	
	function categoryClickHandler(e)
	{
		
		if (playerType != TYPE_COMMERCIAL) {
			for (var i=0, len=navBlocks.length; i<len; i++)
			{
				if (navBlocks[i].block == this.parentNode) {
					g.trackEvent('Videos', 'VideoMenuExpand', $(".videoCategoryText", navBlocks[i].block).html());
					openCategory(i);
					return;
				}
			}
		} else {
			for (var i=0, len=navBlocks.length; i<len; i++)
			{
				if (navBlocks[i].block == this.parentNode) {
					window.location.hash = navBlocks[i].block.id;
				}
			}
		}
	}
	
	function closeCategory()
	{
		$("#" + openedNavBlock.block.id).animate({
									 height: $(".videoNavCategory", openedNavBlock.block).height()
									 }, 
									 500);
		
		openedNavBlock = false;
	}
	
	function openCategory(i) {
		
		if (openedNavBlock == navBlocks[i] ) {
			closeCategory();
			openCategory(currentCategory);
			return;
		}
		
		if (openedNavBlock) {
			closeCategory();
		}

		openedCategory = i;
		openedNavBlock= navBlocks[i];
		
		if (typeof openedNavBlock == 'undefined') {
			return;
		}
		
		$("#" + openedNavBlock.block.id).animate({
									 height: openedNavBlock.height
									 }, 
									 500);
		$("#" + me.elements["navList"].id).delay(600).animate({
								 scrollTop: openedCategory * $(".videoNavCategory", openedNavBlock.block).height()
								 }, 
								 500
								  );
		
	}
	
	function itemClickHandler()
	{
		var hash = this.getAttribute('href');
        hash = hash.substr(hash.indexOf("#") + 1);
		
		$('#'+currentNavItem.id).removeClass('selected');
		currentNavItem = this.parentNode;
		$('#'+currentNavItem.id).addClass('selected');
		
		currentCategory = openedCategory;
	}
	
	this.getVideo = function(hash)
	{
		$.ajax({
		  	url: "php/getVideo.php",
		  	type: "POST",
      		data: ({ hash: hash }),
      		dataType: "json",
		  	success: getVideoHandler
		});
		
	}
	
	function getVideoHandler(data)
	{

		loadVideo(data.currentVideo);
	}
	
	this.closeVideo = function()
	{
		document.getElementById('videoNavList').innerHTML = "";
		navBlocks = Array();
	}
	
	this.loadVideoPlayer = function()
	{
		//sort of dumb.  But it gets around an IE issue and visibility and bullcrap.
		if (isHTML5) {
			videoPlayer = document.getElementById('videoElement');
			videoPlayer.addEventListener('error', this.errorHandler, false);
			videoPlayer.addEventListener('loadstart', this.loadStartHandler, false);
			videoPlayer.addEventListener('ended', videoCompleteHandler, false);
			isLoaded = true;
		} else {
			
			var flashvars = {
				jsObject: 'g.videoComponent',
				loadHandler: loadHandler,
				rtmp: g.VIDEO_SERVER,
				videoCompleteHandler: videoCompleteHandler
			}
		
			var params = {
				allowScriptAccess: "always",
				allowFullScreen: "true",
				menu: "false",
				wmode: "opaque"
			}
		
			var attributes = {
				id: 'flashContent',
				name: 'flashContent'
			}
			swfobject.embedSWF('CREAVideoPlayer.swf', 'flashContent', '470', '303', '10', 'js/swfobject/expressinstall.swf', flashvars, params, attributes);
			videoPlayer = document.getElementById('flashContent');
			
		}
		
	}
	
	this.init = function(data)
	{

		if (data.currentVideo.name == "") {
			invalidVideo();
			return;
		}
		
		var blockType = '';
		this.currentVideo = data.currentVideo.hash;
		this.elements['navList'].innerHTML = "";
		navBlocks = Array();
		navItems = Array();
		playerType = data.playerType;
		switch (data.playerType)
		{
			case TYPE_BUYING:
				document.getElementById('videoNavTitle').innerHTML ="Buying Steps";
				document.getElementById('videoNavList').className = "steps";
				blockType = BLOCKTYPE_STEPS;
				break;
				
			case TYPE_SELLING:
				document.getElementById('videoNavTitle').innerHTML ="Selling Steps";
				document.getElementById('videoNavList').className = "steps";
				blockType = BLOCKTYPE_STEPS;
				break;
				
			case TYPE_STORY:
				document.getElementById('videoNavTitle').innerHTML ="Stories";
				document.getElementById('videoNavList').className = "stories";
				blockType = BLOCKTYPE_STORIES;
				break;
				
			case TYPE_COMMERCIAL:
				document.getElementById('videoNavTitle').innerHTML ="Campaign stories";
				document.getElementById('videoNavList').className = "stories";
				blockType = BLOCKTYPE_COMMERCIALS;
				break;
		}
		
		var navBlock;

		for (var i=0, len=data.categories.length; i<len; i++)
		{
			if (blockType != BLOCKTYPE_COMMERCIALS) {
				navBlock = navBlockRef[blockType].cloneNode(true);
				navBlock.id = navBlock.id + "_" + i;
				
				navItems[i] = Array();
				switch (blockType)
				{
					case BLOCKTYPE_STEPS:
						break;
						
					case BLOCKTYPE_STORIES:
						$(".smallThumb", navBlock).attr('src', 'images/video/' + data.categories[i].items[0].thumb);
						break;
				}
				
				$(".videoCategoryText", navBlock).html(data.categories[i].category);
				$(".videoNavCategory", navBlock).bind('click', categoryClickHandler);
				
				for (var j=0, jlen=data.categories[i].items.length; j<jlen; j++)
				{
					navItem = navItemRef.cloneNode(true);
					navItem.id = data.categories[i].items[j].prefix;
					$(".videoNavLinkText", navItem).html(data.categories[i].items[j].title);
					$(".videoNavLink", navItem).attr('href', "#" + data.categories[i].items[j].hash);
					if (data.currentVideo.prefix == data.categories[i].items[j].prefix) {
						currentNavItem = navItem;
						navItem.className = "videoNavItem selected";
					}
					
					$(".videoItemList", navBlock).append(navItem);
					navItems[i].push(navItem);
				}

				this.elements['navList'].appendChild(navBlock);
							
				navBlocks.push({ block: navBlock, height:$("#" + navBlock.id).height(), index:i });
				navBlock.style.height = $(".videoNavCategory", navBlock).height() + "px";
			
			} else {
				
				for (var j=0, jlen=data.categories[i].items.length; j<jlen; j++)
				{
					navBlock = navBlockRef[blockType].cloneNode(true);
					navBlock.id = data.categories[i].items[j].hash;
					
					$(".videoNavCategory", navBlock).bind('click', categoryClickHandler);
					
					$("a", $(".videoNavCategory", navBlock)).attr('href', 'video.php?v=' + data.categories[i].items[j].hash);
					$("a", $(".videoNavCategory", navBlock)).attr('title', data.categories[i].items[j].title);
					$("a", $(".videoNavCategory", navBlock)).html(data.categories[i].items[j].title);
					$(".thumbImage", $(".videoNavCategory", navBlock)).css('background-image', 'url(images/video/' + data.categories[i].items[j].thumb + ')');
					
					//$(".smallThumb", navBlock).attr('src', 'images/video/' + data.categories[i].items[0].thumb);
					
					if (data.currentVideo.hash == data.categories[i].items[j].hash) {
						currentNavItem = navBlock;
						$(".videoNavCategory", navBlock).addClass("selected");
					}
					
					this.elements['navList'].appendChild(navBlock);
				
					navBlocks.push({ block: navBlock, height:$("#" + navBlock.id).height(), index:j });
					navBlock.style.height = $(".videoNavCategory", navBlock).height() + "px";	

				}
			}
		}
		
		if (playerType != TYPE_COMMERCIAL) {
			currentCategory = data.currentVideo.category;
			openCategory(currentCategory);
		}
		loadVideo(data.currentVideo);
	}
	
	function loadVideo(videoData)
	{
		if (videoData.name == "") {
			invalidVideo();
			return;
		}
		
		if (videoData.playerType != playerType) {
			changePlayer(videoData.hash);
		}
		me.currentVideo = videoData.hash;
		document.getElementById('videoName').innerHTML = videoData.name;
		document.getElementById('videoDescription').innerHTML = videoData.description;
		document.getElementById('videoReadMoreLink').setAttribute('href', videoData.readMore);
		
		if (videoData.realtorCredit != '' ) {
			document.getElementById('realtorCredit').innerHTML = videoData.realtorCredit;
			document.getElementById('realtorCredit').style.display = 'inline-block';
		} else {
			document.getElementById('realtorCredit').innerHTML = '';
			document.getElementById('realtorCredit').style.display = 'none';
		}
		
		window.location.hash = "#" + videoData.hash;

		switch (playerType)
		{
			case TYPE_BUYING:
			case TYPE_SELLING:
				document.getElementById('videoStoryTout').style.display = 'block';
				//document.getElementById('videoStoryThumbImage').style.backgroundImage = 'url(images/video/' + videoData.hash + '-thumb.jpg)';
				$('.thumbImage', document.getElementById('videoStoryThumb')).css('background-image', 'url(images/video/' + videoData.hash + '-thumb.jpg)');
				document.getElementById('videoStoryLink').innerHTML = "See more of " + videoData.name + "'s story";
				document.getElementById('videoStoryLink').setAttribute('href', '#' + videoData.storyLink);
				document.getElementById('videoStoryThumb').onclick = function() { changePlayer(videoData.storyLink); return false;};
				break;
			
			case TYPE_STORY:
				document.getElementById('videoStoryTout').style.display = 'none';
				break;
				
			case TYPE_COMMERCIAL:
				document.getElementById('videoStoryTout').style.display = 'block';
				document.getElementById('videoStoryTout').style.paddingTop = 0;
				$('.thumbImage', document.getElementById('videoStoryThumb')).css('display', 'none');
				document.getElementById('videoStoryLink').innerHTML = "See other stories";
				document.getElementById('videoStoryLink').setAttribute('href', '#video-amy-thom-1');
				break;
		}
		
		if (playerType != TYPE_COMMERCIAL) {
			if (openedCategory != videoData.category) {
				openCategory(videoData.category);
			}
			currentCategory = videoData.category;

			currentNavItem.className = "videoNavItem";	
			for (var i=0, len=navItems[currentCategory].length; i<len; i++)
			{
				if (videoData.prefix == navItems[currentCategory][i].id) {
					currentNavItem = navItems[currentCategory][i];
					currentNavItem.className = "videoNavItem selected";
				}
			}
			
			
			document.getElementById('videoReadMoreLink').style.display = "block";
			
		} else {
			$(".videoNavCategory", currentNavItem).removeClass("selected");
			for (var i=0, len=navBlocks.length; i<len; i++)
			{
				if (videoData.hash == navBlocks[i].block.id) {
					currentNavItem = navBlocks[i].block;
					$(".videoNavCategory", currentNavItem).addClass("selected");
				}
			}
			document.getElementById('videoReadMoreLink').style.display = "none";
		}
		
		if (isHTML5) {
			
			videoPlayer.setAttribute('src', 'video/' + videoData.prefix + '.mp4');
		
		} else {
			
			var v = g.VIDEO_LOCATION + videoData.prefix +'.f4v';
			if (isLoaded) {
				videoPlayer.loadVideo(v, videoData.title);
			} else {
				videoFile = v;
				videoDescription = videoData.title;
			}
		}
	}
	
	function changePlayer(hash)
	{
		$.ajax({
		  	url: "php/initVideoPlayer.php",
		  	type: "POST",
      		data: ({ hash: hash }),
      		dataType: "json",
		  	success: changePlayerHandler
		});
	}
	
	function changePlayerHandler(data)
	{
		me.init(data);
	}
	
	function invalidVideo()
	{
		g.modal.closeModal();
	}
	
	function readMoreClickHandler()
	{
		//g.modal.closeModal();
		//window.location = document.getElementById('videoReadMoreLink').getAttribute('href');
	}
	
	this.addToModal = function(modal)
	{
		modal.appendChild(this.element);
	}

	this.setFormat = function(format)
	{
		switch (format)
		{
			case BLOCKTYPE_STEPS:
				break;
		}
	}
	
	this.swfLoadHandler = function()
	{
		
		if (isLoaded) return;
		
		//console.log("HANDLER " + videoPlayer.loadVideo);
		isLoaded = true;
		if (videoFile != "") {
			videoPlayer.loadVideo(videoFile, videoDescription);
			videoFile = "";
			videoDescription = "";
		}
	}

	this.errorHandler = function()
	{
		
	}
	
	this.loadStartHandler = function()
	{
		
	}
	
	this.videoCompleteHandler = function()
	{
		
	}
	
	this.elements['nav'] = document.getElementById('videoNav');
	this.elements['navList'] = document.getElementById('videoNavList');
	document.getElementById('videoClose').onclick = g.modal.closeModal;
	
	document.getElementById('classRef').removeChild(this.element);

}

function Rotator(_items)
{

	var me=this;
	var currentIndex = 0;
	var selectors = Array();
	var items = _items;
	var t;
	var isPlaying = true;
	
	var blockRef = false;
	var blocks = Array();
	
	this.element = document.getElementById('homeRotator');
	this.elements = Array();
	var blockWidth;
	
	function showItem(index)
	{
		selectors[currentIndex].className = "rotatorSelector";
		
		if (typeof index=="undefined") {
			currentIndex = (currentIndex < (items.length - 1)) ? currentIndex + 1 : 0;
		} else {
			currentIndex = index;
		}

		selectors[currentIndex].className = "rotatorSelectorSel";
		$("#rotatorBlockWrapper").animate({
									 left: -(currentIndex * blockWidth) 
									 }, 
									 500
									 );
		
		if (isPlaying) {
			clearTimeout(t);
			t = setTimeout(function(){ showItem(); }, 10000);
		}
	}
	
	function selectorClickHandler(e)
	{
		//strip the index
		if (!e) e = window.event;
		var index = (e.target || e.srcElement).getAttribute('id').replace('selector_','');
		showItem(parseInt(index));
		
	}
	
	function videoClickHandler()
	{
		window.location.hash = items[currentIndex].video;
	}
	
	function imageClickHandler()
	{
		window.location = items[currentIndex].url;
	}
	
	function controlClickHandler()
	{
		if (isPlaying) {
			isPlaying = false;
			me.elements['control'].src = "images/rotator-play.png";
			clearTimeout(t);
		} else {
			isPlaying = true;
			me.elements['control'].src = "images/rotator-pause.png";
			t = setTimeout(function(){ showItem(); }, 10000);
		}
	}
	
	selector = document.createElement('DIV');
	selector.className = "rotatorSelector";
	
	this.elements['image'] = document.getElementById('rotatorImage');
	this.elements['selectors'] = document.getElementById('rotatorSelectors');
	this.elements['control'] = document.getElementById('rotatorControl');
	
	blockRef = $(".rotatorBlock", this.elements['blockWrapper']);
	blockWidth = blockRef.width();
	blockRef.remove();
	
	this.elements['control'].onclick= controlClickHandler;
	this.elements['control'].src = "images/rotator-pause.png";
	
	var block;
	var sel;
	for (i=0, len=_items.length; i<len; i++)
	{
		block = blockRef.clone();
		
		$(".rotatorNames", block).html(_items[i].names);
		$(".rotatorImage", block).attr('src', "images/" + _items[i].image);
		$(".rotatorDescription", block).html(_items[i].description);
		$(".rotatorRead", block).attr('href', _items[i].read);
		$(".rotatorVideo", block).attr('href', _items[i].video);
		block.css('left', i * blockWidth);
		
		$(".rotatorImage", block).bind('click', videoClickHandler);
		
		$("#rotatorBlockWrapper").append(block);
		
		sel = selector.cloneNode(true);
		sel.setAttribute('id', 'selector_' + i);
		sel.onclick = selectorClickHandler;
		this.elements['selectors'].appendChild(sel);
		selectors.push(sel);
	}
	
	$("#rotatorBlockWrapper").width(blockWidth * items.length);

	showItem(0);

}

function FAQRotator(_faqPage, _faqs, _isAnswers)
{
	var me = this;
	var faqs = _faqs;
	var currentId = 0;
	var blockRef = document.getElementById('blockRef');
	var faqBlocks = Array();
	var blockWidth;
	var t;
	var faqPage = _faqPage;
	var delay = 15000;
	
	var isAnswers = _isAnswers;
	var isAnimate = false;

	this.element = document.getElementById('faqRotator');
	this.elements = Array();
	
	
	function addFaqBlock(faqId, pos)
	{

		var block = document.getElementById('faqRotatorBlock').cloneNode(true);
		block.id = block.id + faqId;

		if (isAnswers) {
			
			$(".faqQuestionOnly", block).remove();
			
			$(".faqRotatorQuestion", block).html(faqs[faqId].question);
			$(".faqRotatorAnswer", block).html(faqs[faqId].summary);
		
		} else {
			$(".faqSummary", block).remove();
			$(".linkIcon", block).html(faqs[faqId].question + $(".linkIcon", block).html());
		}
		
		$(".linkIcon", block).attr('href', faqPage + "#" + faqs[faqId].link);

		block.style.left = (blockWidth * pos) + "px";
		if (pos >= 0) {
			me.elements['mover'].appendChild(block);
		} else {
			me.elements['mover'].insertBefore(block, me.elements['mover'].firstChild);
		}
	}
	
	function contentClickHandler()
	{

		window.location = faqPage + "#" + faqs[currentId].link;
	}
	
	function nextFaq()
	{
		if (isAnimate) return;
		isAnimate = true;
		var nextId = currentId + 2;
		if (nextId > (faqBlocks.length - 1)) {
			nextId = nextId - faqBlocks.length;
		}
		
		currentId = (currentId < faqBlocks.length - 1) ? currentId + 1 : 0;
		
		for (i=0; i< 3; i++)
		{
			me.elements['mover'].childNodes[i].style.left = (i * blockWidth) - (blockWidth * 2) + "px";
		}
		me.elements['mover'].style.left = blockWidth + "px";
		
		addFaqBlock(nextId, 1);
		$("#"+me.elements['mover'].id).animate({
									 left: 0
									 }, 
									 500, 
									 function() {
										me.elements['mover'].removeChild(me.elements['mover'].childNodes[0]);
										isAnimate = false;
									  });
		
		if (isAnswers) {
			clearTimeout(t);
			t = setTimeout(function(){ nextFaq(); }, delay);
		}
	}
	
	function prevFaq()
	{
		if (isAnimate) return;
		isAnimate = true;
		var prevId = currentId - 2;
		if (prevId < 0) {
			prevId = faqBlocks.length + prevId;
		}
		
		currentId = (currentId > 0) ? currentId - 1 : faqBlocks.length - 1;
		
		for (i=0; i< 3; i++)
		{
			me.elements['mover'].childNodes[i].style.left = (i * blockWidth) + "px";
		}
		me.elements['mover'].style.left = (-blockWidth) + "px";
		
		addFaqBlock(prevId, -1);
		$("#"+me.elements['mover'].id).animate({
									 left: 0
									 }, 
									 500, 
									 function() {
										me.elements['mover'].removeChild(me.elements['mover'].childNodes[3]);
										isAnimate = false;
									  });
		
		if (isAnswers) {
			clearTimeout(t);
			t = setTimeout(function(){ nextFaq(); }, delay);
		}
	}
	
	this.elements['content'] = document.getElementById('faqContent');
	
	this.elements['mover'] = document.getElementById('faqMover');
	
	document.getElementById('faqPrev').onclick = prevFaq;
	document.getElementById('faqNext').onclick = nextFaq;
	 
	var tmpAnswer;
	for (i=0, len=faqs.length; i<len; i++)
	{
		tmpAnswer = (isAnswers) ? faqs[i].summary : "" ;
		faqBlocks.push({ id: i,
					   	question: faqs[i].question,
						summary: tmpAnswer
					   });
	}
	
	blockWidth = $("#faqRotatorBlock").width() + 20;
	
	//initialize
	addFaqBlock(faqs.length - 1, -1);
	addFaqBlock(0, 0);
	addFaqBlock(1, 1);
	currentId = 0;
	me.elements['mover'].style.left = 0;
	
	if (isAnswers) {
		t = setTimeout(function(){ nextFaq(); }, delay);
	}
}

function TextExpander(element)
{
	var me = this;
	
	var textExpand;
	var readMore;
	var readMoreLinkText;
	var readMoreLink;
	var readMoreArrow;
	
	var arrowMore = "images/down-arrow-small.png";
	var arrowLess = "images/up-arrow-small.png";
	var textMore = "Read More";
	var textLess = "Less";
	var finalHeight;
	
	var isExpanded = false;
	var isWide = false;
	
	this.element = element;
	this.elements = Array();
	
	function clickHandler()
	{
		isExpanded = !isExpanded;
		
		if (isExpanded) {
			textExpand.animate({
								 height: finalHeight
								 }, 
								 500
								  );
			readMoreLinkText.html(textLess);
			readMoreArrow.attr('src', arrowLess);
			if(!isWide) {
				$(this.parentNode).delay(500).animate( { 'margin-left': '410px'}, 400, 'linear' );
			}
			g.trackEvent('Step', 'ReadMore', window.location.hash);
		} else {
			if( !isWide) {
				$(this.parentNode).animate( { 'margin-left': '250px'} );
			}
			textExpand.delay(500).animate({
								 height: 0
								 }, 
								 500
								  );
			readMoreLinkText.html(textMore);
			readMoreArrow.attr('src', arrowMore);
			g.trackEvent('Step', 'ReadLess', window.location.hash );
			return false;
		}
	}
	
	textExpand = $(".stepExpand", this.element);
	readMore = $(".readMore", this.element);
	isWide = (readMore.hasClass('expanded'));
	
	readMoreLinkText = $(".underline", readMore);
	readMoreArrow = $("img", readMore);
	readMoreLink = $("a", readMore);
	
	readMoreLink.bind('click', clickHandler);
	readMoreLinkText.html(textMore);
	
	readMoreArrow.attr('src', arrowMore);
	
	finalHeight = textExpand.height();
	textExpand.height(0);
	
}

var VideoThumb = (function()
{
	return {
		over: function(element) {
			var img = element.getElementsByTagName('img')[0];
			img.src = 'images/video-thumb-over.png';
			img.style.display = "inline";
		},
		
		out: function(element) {
			var img = element.getElementsByTagName('img')[0];
			img.style.display = "none";
		},
		
		down: function(element) {
			var img = element.getElementsByTagName('img')[0];
			img.src= 'images/video-thumb-down.png';
			img.style.display = "inline";
		}
	}
})();

var StoryThumb = (function()
{
	return {
		over: function(element) {
			var img = element.getElementsByTagName('img')[0];
			img.src = 'images/story-over.png';
			img.style.display = "inline";
		},

		out: function(element) {
			var img = element.getElementsByTagName('img')[0];
			img.style.display = "none";
		},
		
		down: function(element) {
			var img = element.getElementsByTagName('img')[0];
			img.src= 'images/story-down.png';
			img.style.display = "inline";
		}
	}
})();

var LinkIcon = (function()
{
	return {
		over: function(element) {
			var img = element.getElementsByTagName('img')[0];
			if (typeof img == 'undefined') return;
			var newSrc = img.src.replace('-over.', '.');
			newSrc = newSrc.replace('.jpg', '-over.jpg');
			newSrc = newSrc.replace('.png', '-over.png');
			newSrc = newSrc.replace('.gif', '-over.gif');
			img.src = newSrc;
		},
		
		out: function(element) {
			var img = element.getElementsByTagName('img')[0];
			if (typeof img == 'undefined') return;
			var newSrc = img.src.replace('-over.', '.');
			newSrc = newSrc.replace('-down.', '.');
			img.src = newSrc;
		},
		
		down: function(element) {
			var img = element.getElementsByTagName('img')[0];
			if (typeof img == 'undefined') return;
			var newSrc = img.src.replace('-over.', '-down.');
			img.src = newSrc;
		},
		
		up: function(element) {
			var img = element.getElementsByTagName('img')[0];
			if (typeof img == 'undefined') return;
			var newSrc =  img.src.replace('-down.', '-over.');
			img.src = newSrc;
		}
	}
})();

var StorySubmitForm = (function()
{
	var STORY_FORM = "frmStorySubmit";
	
	var NAME_FIELD = "txtName";
	var EMAIL_FIELD = "txtEmail";
	var STORY_FIELD = "txtStory";
	var CONTACT_FIELD = "isContact";
	
	var NAME_ERROR = "errorName";
	var EMAIL_ERROR = "errorEmail";
	var STORY_ERROR = "errorStory";
	var CONTACT_ERROR = "errorContact";
	
	var formHeight = 300;
	var isOpen = true;
	
	
	return {
		hide: function()
		{
			formHeight = $("#storySubmitWrapper").height();
			$("#storySubmitWrapper").height(0);
			isOpen = false;
		},
		
		open: function()
		{
			if (isOpen) return;
			isOpen = true;
			document.getElementById('storySubmitConfirm').style.display = "none";
			$("#storySubmitWrapper").animate({
									 height: formHeight
									 }, 
									 500,
									 function()
									 {
										window.location.hash = "#storySubmit";
									 }
									 );
			g.trackEvent('Forms', 'Open', 'Submit your story');
		},
		
		close: function()
		{
			if (!isOpen) return;
			isOpen = false;
			formHeight = $("#storySubmitWrapper").height();
			$("#storySubmitWrapper").animate({
									 height: 0
									 }, 
									 500
									 );
		},
		
		
		submitForm: function()
		{
			var error = Array();
			
			document.getElementById(NAME_ERROR).style.display = "none";
			document.getElementById(EMAIL_ERROR).style.display = "none";
			document.getElementById(STORY_ERROR).style.display = "none";
			document.getElementById(CONTACT_ERROR).style.display = "none";
			
			if (jQuery.trim( document.getElementById(NAME_FIELD).value) == "") {
				error.push(NAME_ERROR);
			}
			if (jQuery.trim( document.getElementById(EMAIL_FIELD).value) == "") {
				error.push(EMAIL_ERROR);
			}
			if (!document.getElementById(EMAIL_FIELD).value.match(/^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-z]{2,6}$/)){
				error.push(EMAIL_ERROR);
			}
			if (jQuery.trim( document.getElementById(STORY_FIELD).value) == "") {
				error.push(STORY_ERROR);
			}
			if (!document.getElementById(CONTACT_FIELD).checked) {
				error.push(CONTACT_ERROR);
			}
			
			for (var i=0, len=error.length; i<len; i++)
			{
				document.getElementById(error[i]).style.display = "inline";
			}
			
			if (error.length == 0) {
				document.getElementById(STORY_FORM).submit();
				g.trackEvent('Forms', 'Submit', 'Submit your story');
			}
			
		},
		
		saveForm: function()
		{
			$.post('php/saveForm.php', 
			{ 	txtName: document.getElementById(NAME_FIELD).value, 
				txtEmail: document.getElementById(EMAIL_FIELD).value,
				txtStory: document.getElementById(STORY_FIELD).value,
				isContact: (document.getElementById(CONTACT_FIELD).checked)? 1 : 0
				}
			);
		},
		
		confirm: function()
		{
			var element = document.getElementById('storySubmitConfirm');
			document.getElementById('storySubmit').removeChild(element);
			element.style.display = "block";
			g.showModal(element);
		}
	};
	
	
})();


var g = (function (me) {
	
	me.VIDEO_SERVER = "";
	me.VIDEO_LOCATION = "";
	
	me.videoComponent = false;
	me.isHTML5 = false;
	me.modal = false;
	me.loadFunctions = Array();
	
	me.loadHandler = function() {
        var hash = window.location.hash;
        hash = hash.substr(hash.indexOf("#") + 1);

        if (hash != "") {
            if (hash.substr(0, 5) == 'video') {
				me.showVideo(hash);
				g.trackEvent('Videos', 'AutoPlay-PageLoad', window.location.hash);
			}
		}
		
		for (var i=0, len=me.loadFunctions.length; i<len; i++)
		{
			me.loadFunctions[i].call();
		}
		
		$(window).hashchange(me.hashChangeHandler);
		
	},
	
	me.hashChangeHandler = function()
	{

		var hash = window.location.hash;
        hash = hash.substr(hash.indexOf("#") + 1);

        if (hash != "") {
            if (hash.substr(0, 5) == 'video') {
				if (!me.videoComponent) {
					me.showVideo(hash);
				} else {
					if (hash != me.videoComponent.currentVideo) {
						me.videoComponent.getVideo(hash);
					}
				}
				g.trackEvent('Videos', 'AutoPlay-InPage', window.location.hash );
			} else {
				if (me.videoComponent) {
					me.modal.closeModal(false);
				}
			}
		} else {
			if (me.videoComponent) {
				me.modal.closeModal();
			}
		}
	},
	
	me.showModal = function(element)
	{
		if (!me.modal) {
			me.modal = new Modal();
		}
		me.modal.openModal(element);
	},
	
	me.showVideo = function(hash)
    {
	
		if (!me.modal) {
			me.modal = new Modal();
		}

		if (!me.videoComponent) {
			me.videoComponent = new VideoComponent(me.isHTML5, 'g.swfLoadHandler', 'g.videoCompleteHandler');
		} 
		
		me.modal.openModal(me.videoComponent.element, me.closeVideo);
		me.videoComponent.loadVideoPlayer();

		$.ajax({
		  	url: "php/initVideoPlayer.php",
		  	type: "POST",
      		data: ({ hash: hash }),
      		dataType: "json",
		  	success: me.getVideoHandler
		});
		
    }
	
	me.swfLoadHandler = function()
	{
		setTimeout("g.videoComponent.swfLoadHandler();", 200);
	}
	
	me.videoCompleteHandler = function()
	{
		g.trackEvent('Videos', 'Complete', window.location.hash);
	}
	
	me.trackShareEvent = function(sharer)
	{
		g.trackEvent('Share', 'Clicked', sharer + "/" + window.location);
	}
	
	me.getVideoHandler = function(data) {
	   me.videoComponent.init(data);
    }
	
	me.closeVideo = function()
	{
		me.videoComponent.closeVideo();
		document.getElementById('classRef').appendChild(me.videoComponent.element);
		me.videoComponent = false;
	}
	
	me.imageOver = function(element)
	{
		var newSrc = element.src.replace('-over.', '.');
		newSrc = newSrc.replace('.jpg', '-over.jpg');
		newSrc = newSrc.replace('.png', '-over.png');
		newSrc = newSrc.replace('.gif', '-over.gif');
		element.src = newSrc;
	}
	
	me.imageOut = function(element)
	{
		var newSrc = element.src.replace('-over.', '.');
		newSrc = newSrc.replace('-down.', '.');
		element.src = newSrc;
	}
	
	me.imageDown = function(element)
	{
		var newSrc = element.src.replace('-over.', '.');
		newSrc = newSrc.replace('-down.', '.');
		newSrc = newSrc.replace('.jpg', '-down.jpg');
		newSrc = newSrc.replace('.png', '-down.png');
		newSrc = newSrc.replace('.gif', '-down.gif');
		element.src = newSrc;
	}
	
	me.imageUp = function(element)
	{
		var newSrc =  element.src.replace('-down.', '.');
		newSrc = newSrc.replace('-over.', '.');
		newSrc = newSrc.replace('.jpg', '-over.jpg');
		newSrc = newSrc.replace('.png', '-over.png');
		newSrc = newSrc.replace('.gif', '-over.gif');
		element.src = newSrc;
	}
	
	me.hasClassName = function(element, name)
	{
		return new RegExp("(?:^|\\s+)" + name + "(?:\\s+|$)").test(element.className);
	}
		
	me.addClassName = function(element, name)
	{
		 if (!g.hasClassName(element, name)) {
			element.className = element.className ? [element.className, name].join(' ') : name;
		  }
	}
		
	me.removeClassName = function(element, name)
	{
		if (g.hasClassName(element, name)) {
			var c = element.className;
			element.className = c.replace(new RegExp("(?:^|\\s+)" + name + "(?:\\s+|$)", "g"), "");
		}
	}
		
	me.removeElementById = function(id)
	{
		var element = document.getElementById(id);
		if (typeof element != 'undefined') {
			element.parentNode.removeChild(element);
		}
	}
	
	me.trackEvent = function(category, action, label)
	{
		_gaq.push(['_trackEvent', category, action, label ]);
	}
	
	me.empty = function()
	{
	}

	return me;
	
})(g || {});


function flashcall(message)
{
	//alert(message);
	//alert(g.videoComponent);
	if (typeof console != "undefined") {
		//console.log(message);
	}
}
