/* 
	nfa2602-videovault.js
=================================================================	
	Functions for the Video Vault
	
	Created 21.10.2008 by DS
	Last Updated: See SVN
-----------------------------------------------------------------
*/

/*	
   @ init()
   ---------------------------------------------------------------
	 Trigger conditional functions
   _______________________________________________________________
*/	
	
	function init()
	{	
		if (whichbrowser.isHiFi)
		{	
			enhance_text_fields('form-signup');				
			
			var template_id = (document.getElementsByTagName('div')[0].id).substring(2, document.getElementsByTagName('div')[0].id.length);
			var template_classes = document.getElementsByTagName('div')[0].className;			

			create_img_rollovers_v2();	
					
			switch (template_id)
			{
				case ('intro'):
					add_table_row_hovers(document.getElementById('main'));			
					preload_images(
						'/resources/ui/images/videovault/table-current-top-10/star-grey-on-grey.gif'
						,'/resources/ui/images/videovault/table-shared/stars-gold-on-grey/0.gif'
						,'/resources/ui/images/videovault/table-shared/stars-gold-on-grey/1.gif'
						,'/resources/ui/images/videovault/table-shared/stars-gold-on-grey/2.gif'
						,'/resources/ui/images/videovault/table-shared/stars-gold-on-grey/3.gif'
						,'/resources/ui/images/videovault/table-shared/stars-gold-on-grey/4.gif'
						,'/resources/ui/images/videovault/table-shared/stars-gold-on-grey/5.gif'
						,'/resources/ui/images/videovault/table-shared/stars-gold-on-grey/6.gif'
						,'/resources/ui/images/videovault/table-shared/stars-gold-on-grey/7.gif'
						,'/resources/ui/images/videovault/table-shared/stars-gold-on-grey/8.gif'
						,'/resources/ui/images/videovault/table-shared/stars-gold-on-grey/9.gif'
						,'/resources/ui/images/videovault/table-shared/stars-gold-on-grey/10.gif'
					);						
					break;						
				case ('title'):
				case ('artist'):
				case ('label'):
				case ('year'):
				case ('director'):	
				case ('search'):					
					add_table_row_hovers(document.getElementById('main'));
					preload_images(
						'/resources/ui/images/videovault/table-chart/play/play-top-over.gif'
						,'/resources/ui/images/videovault/table-chart/play/play-btm-over.gif'
						,'/resources/ui/images/videovault/table-chart/play/play-arrow-over.gif'
						,'/resources/ui/images/videovault/table-shared/cell-over.gif'		
						,'/resources/ui/images/videovault/table-shared/cell-current-over.gif'								
						,'/resources/ui/images/videovault/table-current-top-10/star-grey-on-grey.gif'
						,'/resources/ui/images/videovault/table-shared/stars-gold-on-grey/0.gif'
						,'/resources/ui/images/videovault/table-shared/stars-gold-on-grey/1.gif'
						,'/resources/ui/images/videovault/table-shared/stars-gold-on-grey/2.gif'
						,'/resources/ui/images/videovault/table-shared/stars-gold-on-grey/3.gif'
						,'/resources/ui/images/videovault/table-shared/stars-gold-on-grey/4.gif'
						,'/resources/ui/images/videovault/table-shared/stars-gold-on-grey/5.gif'
						,'/resources/ui/images/videovault/table-shared/stars-gold-on-grey/6.gif'
						,'/resources/ui/images/videovault/table-shared/stars-gold-on-grey/7.gif'
						,'/resources/ui/images/videovault/table-shared/stars-gold-on-grey/8.gif'
						,'/resources/ui/images/videovault/table-shared/stars-gold-on-grey/9.gif'
						,'/resources/ui/images/videovault/table-shared/stars-gold-on-grey/10.gif'						
					);
					break;					
				case ('chart'):
					add_table_row_hovers(document.getElementById('main'));				
					preload_images(
						'/resources/ui/images/videovault/table-chart/play/play-top-over.gif'
						,'/resources/ui/images/videovault/table-chart/play/play-btm-over.gif'
						,'/resources/ui/images/videovault/table-chart/play/play-arrow-over.gif'
						,'/resources/ui/images/videovault/table-shared/cell-over.gif'		
						,'/resources/ui/images/videovault/table-shared/cell-current-over.gif'												 
						,'/resources/ui/images/videovault/table-chart/star-grey-on-crimson.gif'
						,'/resources/ui/images/videovault/table-chart/stars-gold-on-crimson/0.gif'
						,'/resources/ui/images/videovault/table-chart/stars-gold-on-crimson/1.gif'
						,'/resources/ui/images/videovault/table-chart/stars-gold-on-crimson/2.gif'
						,'/resources/ui/images/videovault/table-chart/stars-gold-on-crimson/3.gif'
						,'/resources/ui/images/videovault/table-chart/stars-gold-on-crimson/4.gif'
						,'/resources/ui/images/videovault/table-chart/stars-gold-on-crimson/5.gif'
						,'/resources/ui/images/videovault/table-chart/stars-gold-on-crimson/6.gif'
						,'/resources/ui/images/videovault/table-chart/stars-gold-on-crimson/7.gif'
						,'/resources/ui/images/videovault/table-chart/stars-gold-on-crimson/8.gif'
						,'/resources/ui/images/videovault/table-chart/stars-gold-on-crimson/9.gif'						
						,'/resources/ui/images/videovault/table-chart/stars-gold-on-crimson/10.gif'
					);
					break;								
				case ('view'):	
				
					// SWFOBJECT Flash [warning, no expressInstall, external interface]
					// was: generate_flash_nfa2602('video-player', 'flashVideoPlayer', '/resources/ui/flash/', 'video-player_492x426.swf', 492, 426, ('videoURL=' + videoURL + '&videoImage=' + videoImage), '', '');													
					var flash_src = '/resources/ui/flash/video-player_492x426.swf'; 						
					var flash_width = '492';				
					var flash_height = '426';					
					var flash_reqdVersion = '9.0.124';			
					var flash_containerId = 'flash-content'; 			
					var flash_expressInstaller = false;											
					var flash_attributes = {};				
							flash_attributes.id = 'flash_video_player';
							flash_attributes.name = 'flash_video_player';
			
					var flash_params = {}; 				
					// flash_params.name = 'value';				
					var flash_vars = {}; 				
							flash_vars.videoURL = videoURL;
							flash_vars.videoImage = videoImage;	
					var flash_custom_args = {};
							flash_custom_args.flash_warningContainerId = 'flash-warning';			
							
							flash_advancedEmbed(flash_src, flash_containerId, flash_width, flash_height, flash_reqdVersion, flash_expressInstaller, flash_vars, flash_params, flash_attributes, flash_custom_args);							
						
					// generate share links
					if ((swfobject.hasFlashPlayerVersion(flash_reqdVersion)) && (flash_browser.supports_basicSwfobjectEmbed))
					{					
						generate_share_links(document.getElementById('video-player')); // to edit links, edit generate_share_links() below 
					}
					
					preload_images(
						'/resources/ui/images/videovault/table-shared/stars-gold-on-white/2.gif'
						,'/resources/ui/images/videovault/table-shared/stars-gold-on-white/4.gif'
						,'/resources/ui/images/videovault/table-shared/stars-gold-on-white/6.gif'
						,'/resources/ui/images/videovault/table-shared/stars-gold-on-white/8.gif'
						,'/resources/ui/images/videovault/table-shared/stars-gold-on-white/10.gif'						
					);														
					break;								
			}

			//inlineJavascriptTest();
			match_mvc_heights();			
			
			// SWFOBJECT Flash [generate placeholder and inject into DOM]
			// was: generateFlash('logo', '/resources/ui/flash/', 'logo_235x40.swf', 235, 40, '', '', document.getElementById('logo').innerHTML);		
			var flash_src = '/resources/ui/flash/logo_235x40.swf'; 						
			var flash_width = '235';				
			var flash_height = '40';					
			var flash_reqdVersion = '9.0.0';			
			var flash_containerId = flash_createContainer('flash-logo', 'before', 'logo', 'a', 0);		
			var flash_expressInstaller = false;											
			var flash_attributes = {};	
			// flash_attributes.name = 'value';							
			var flash_params = {}; 				
			// flash_params.name = 'value';				
			var flash_vars = {}; 		
			// flash_vars.name = 'value';					
			var flash_custom_args = {};
			// flash_custom_args.name = 'value';		
					
					flash_advancedEmbed(flash_src, flash_containerId, flash_width, flash_height, flash_reqdVersion, flash_expressInstaller, flash_vars, flash_params, flash_attributes, flash_custom_args);							
		}
		
		
		
		document.getElementById('signup-form').onsubmit = function(){ return submitSignup();};
	}	
	
	window.onload = init;
	
/*	
   @ preload_images()
   ---------------------------------------------------------------
	 Preload hover overstates, incl those used by the CSS
   _______________________________________________________________
*/

	function preload_images()
	{
		if (arguments.length > 0)
		{					
			for (var a=0; a<arguments.length; a++)
			{				
				var new_img = document.createElement('img');
				var new_src = arguments[a];	
						new_img.setAttribute('src', new_src);
			}	
		}	
	}
	
/*	
   @ create_img_rollovers_v2()
	 @ swap_img_v2()
   ---------------------------------------------------------------
	 Rollovers
	 Mouse and keyboard support
   _______________________________________________________________
*/	
	
	function create_img_rollovers_v2()
	{	
		var images = document.getElementsByTagName('img');	
		
		for (var i=0; i<images.length; i++)
		{
			var img_src = images[i].src;
			var parent = images[i].parentNode;			
									
			if (img_src.match('-off.gif'))
			{				
				var new_src = img_src.replace('-off.gif', '-over.gif');					
				parent.className = (parent.className + ' blur'); // add off-state classname
				// mouse
				addEvent(parent, 'mouseover', swap_img_v2, false);
				addEvent(parent, 'mouseout', swap_img_v2, false);		
				// keyboard
				addEvent(parent, 'focus', swap_img_v2, false);
				addEvent(parent, 'blur', swap_img_v2, false);						
			}
			else if (img_src.match('-on-white.gif'))
			{
				var new_src = img_src.replace('-on-white', '-on-grey');	
			}
			else if (img_src.match('-on-pink.gif'))
			{
				var new_src = img_src.replace('-on-pink', '-on-crimson');	;	
			}			
			
			preload_images(new_src);						
		}
	}	
	
	function swap_img_v2(e)
	{
		// identify 'this'
		
		if (!e) 
		{
			var e = window.event; // http://www.quirksmode.org/js/events_properties.html
		}
		
		// 
		
		if (e.target) 
		{
			targ = e.target;
		}
		else if (e.srcElement) 
		{
			targ = e.srcElement;
		}
		if (targ.nodeType == 3) 
		{	
			// defeat Safari bug
			targ = targ.parentNode;
		}
		
		// IE
		
		if (whichbrowser.isIE5up)	
		{
			_this = targ;
		}
		else
		{
			_this = this;	
		}	
		
		// some more ie checking
		
		while (_this.tagName.toLowerCase() != 'a')
		{		
			_this = _this.parentNode; // prevent ie6 from allowing img hovers to steal the hover focus
		}
	
		// rollover behaviour
		
		var img_src = _this.getElementsByTagName('img')[0].src;		
		
		if ((e.type == 'mouseover') || (e.type == 'focus'))
		{			
			_this.className = _this.className.replace('blur', 'hover');
			_this.getElementsByTagName('img')[0].src = img_src.replace('-off.gif', '-over.gif');
		}
		else if ((e.type == 'mouseout') || (e.type == 'blur'))
		{
			_this.className = _this.className.replace('hover', 'blur');			
			_this.getElementsByTagName('img')[0].src = img_src.replace('-over.gif', '-off.gif');
		}		
	}		
	
/*	
   @ add_table_row_hovers()
	 @ hover_row()
   ---------------------------------------------------------------
	 Row highlighting on hover
	 Mouse and keyboard support	 
   _______________________________________________________________
*/		
	
	function add_table_row_hovers(table_parent_el)
	{
		var rows = table_parent_el.getElementsByTagName('tr'); // this includes tr/th but these are hidden on nfa.2602
				
		for (var r=0; r<rows.length; r++)
		{			
			var row = rows[r];
		
			if (row.className)
			{
				row.className = (row.className + ' blur');
			}
			else
			{
				row.className = 'blur';
			}		
		
			// mouse-only (http://www.quirksmode.org/js/events_pairs.html: we can only define events on links and form fields)
			addEvent(row, 'mouseover', hover_row, false);
			addEvent(row, 'mouseout', hover_row, false);				
			addEvent(row, 'click', hover_row, false);	
			
			// keyboard access is available via the inline play button, so keyboard-based hovers are controlled by this link			
			var row_link = row.getElementsByTagName('a')[0];
			if (row_link) // all except header row
			{
				addEvent(row_link, 'focus', hover_row, false);
				addEvent(row_link, 'blur', hover_row, false);
			}			
		}
	}
	
	function hover_row(e)
	{
		// identify 'this'
		
		if (!e) 
		{
			var e = window.event; // http://www.quirksmode.org/js/events_properties.html
		}
		
		// 
		
		if (e.target) 
		{
			targ = e.target;
		}
		else if (e.srcElement) 
		{
			targ = e.srcElement;
		}
		if (targ.nodeType == 3) 
		{	
			// defeat Safari bug
			targ = targ.parentNode;
		}
		
		// IE
		
		if (whichbrowser.isIE5up)	
		{
			_this = targ;
		}
		else
		{
			_this = this;	
		}	
		
		// some more ie checking
		
		while (_this.tagName.toLowerCase() != 'tr') // this also works when A is triggering the event because we always want to affect the TR
		{		
			_this = _this.parentNode; // prevent ie6 from allowing image/text hovers to steal the hover focus
		}
	
		// rollover behaviour

		if ((e.type == 'mouseover') || (e.type == 'focus'))
		{			
			_this.className = _this.className.replace('blur', 'hover');
			_this.getElementsByTagName('img')[1].src = _this.getElementsByTagName('img')[1].src.replace('-on-white', '-on-grey')
			_this.getElementsByTagName('img')[1].src = _this.getElementsByTagName('img')[1].src.replace('-on-pink', '-on-crimson')			
			window.status = _this.getElementsByTagName('a')[0].href; // (ie only)
		}
		else if ((e.type == 'mouseout') || (e.type == 'blur'))
		{
			_this.className = _this.className.replace('hover', 'blur');		
			_this.getElementsByTagName('img')[1].src = _this.getElementsByTagName('img')[1].src.replace('-on-grey', '-on-white')		
			_this.getElementsByTagName('img')[1].src = _this.getElementsByTagName('img')[1].src.replace('-on-crimson', '-on-pink')					
			window.status = ''; // (ie, safari)
		}		
		else if (e.type == 'click')
		{
			_this.className = _this.className.replace('hover', 'blur');					
			_this.getElementsByTagName('img')[1].src = _this.getElementsByTagName('img')[1].src.replace('-on-grey', '-on-white')			
			_this.getElementsByTagName('img')[1].src = _this.getElementsByTagName('img')[1].src.replace('-on-crimson', '-on-pink')						
			window.location = _this.getElementsByTagName('a')[0].href;	
		}				
	}
	
/*	
   @ match_mvc_heights()
   ---------------------------------------------------------------
	 Match height of 'most viewed' columns 
   _______________________________________________________________
*/			
		
	function match_mvc_heights()
	{
		var mvc_divs = document.getElementById('most-viewed').getElementsByTagName('div');
		
		var mvc_liner_divs = new Array();
		var n=0;
		
		// exclude all except div.liner
		for (var m=0; m<mvc_divs.length; m++)
		{
			if (mvc_divs[m].className == 'liner')
			{
				mvc_liner_divs[n] = mvc_divs[m];
				n++;
			}
		}
		
		// find out what the max height is
		var mvc_max_height = 0;
		
		for (var n=0; n<mvc_liner_divs.length; n++)
		{
			if (mvc_liner_divs[n].offsetHeight > mvc_max_height)
			{
				mvc_max_height = mvc_liner_divs[n].offsetHeight;
			}
		}
		
		// set a min-height equal to the max height
		var mvc_liner_vert_pad = 26;
		var mvc_liner_vert_border = 2;
		
		for (var n=0; n<mvc_liner_divs.length; n++)
		{
			if (mvc_liner_divs[n].offsetHeight < mvc_max_height)
			{
				if ((whichbrowser.isIE) && (!whichbrowser.isIE7up))
				{
					// height for IE6
					mvc_liner_divs[n].style.height = ((mvc_max_height - mvc_liner_vert_pad - mvc_liner_vert_border) + 'px');
				}
				else
				{
					// min-height for everyone else
					mvc_liner_divs[n].style.minHeight = ((mvc_max_height - mvc_liner_vert_pad - mvc_liner_vert_border) + 'px');
				}
			}
		}
	}
	
/*	
   @ enhance_text_fields()
   ---------------------------------------------------------------
	 Auto-clear field contents on focus
	 Mouse and keyboard support	 
   _______________________________________________________________
*/		
	
	function enhance_text_fields(form_id) 
	{		
		// variation on enhanceTextFields() to limit the scope of application
	
		if (document.getElementById(form_id))
		{
			form_inputs = document.getElementById(form_id).getElementsByTagName('input');
			
			for (var i=0; i<form_inputs.length; i++)
			{			
				if (form_inputs[i].type == 'text')
				{
					form_inputs[i].onfocus = function () 
					{
						if (this.value == this.defaultValue) 
						{
							this.value = '';
						}
					}
					form_inputs[i].onblur = function () 
					{
						if (!this.value) 
						{
							this.value = this.defaultValue;	
						}
					}
				}
			}
		}
	}
	
/*	
   @ generate_share_links()
   ---------------------------------------------------------------
	 Share links which display below Flash video (if video output)
	 Mouse and keyboard support	 
   _______________________________________________________________
*/		
	
	function generate_share_links(parent_container)
	{
		// http://archgfx.net/blog/2006/geek/blogging/social-bookmarks-on-wordpresscom
		
		// construct the links that sit below the flash player
		// these are generated by js so that they don't appear if there is no video to share
		
		// The design was not finalised at the time of writing, so this script is editable as shown below
		
		share = new Array();
		
		share[0] = new Array;
		share[1] = new Array;
		share[2] = new Array;
		share[3] = new Array;		
		
		page_title = document.title.split(' | ')[1]; // digg limit is 75 chars, so use the more relevant half of the page title
		page_url = document.location;
		
		// start editable
		
		share_label 			= 'Share via: ';
		
		share[0]['img'] 	= ''; // image url (if image), or empty string (if text)
		share[0]['img_w'] = 0; // image width (if image)
		share[0]['img_h'] = 0; // image height (if image)
		share[0]['text'] 	= 'Email'; // image alt attribute	
		share[0]['title'] 	= ('Email: ' + page_title); // tool tip shown on link hover		
		share[0]['link'] 	= ('mailto:?subject=' + page_title + '&body=' + page_url); // link destination	
		
		share[1]['img'] 	= '';
		share[1]['img_w'] = 0;
		share[1]['img_h'] = 0;
		share[1]['text'] 	= 'Digg';
		share[1]['title'] 	= ('Digg: ' + page_title);		
		share[1]['link'] 	= ('http://digg.com/submit?url=' + page_url + '&title=' + page_title + '&media=video&topic=music'); // worked with test url (must use & not &amp;, also fails if a legitimate domain isn't used, eg .com)
		
		share[2]['img'] 	= '';
		share[2]['img_w'] = 0;
		share[2]['img_h'] = 0;
		share[2]['text'] 	= 'Delicious';
		share[2]['title'] 	= ('del.icio.us: ' + page_title);				
		share[2]['link'] 	= ('http://del.icio.us/post?url=' + page_url + '&amp;title=' + page_title); // worked with test url
		
		share[3]['img'] 	= '';
		share[3]['img_w'] = 0;
		share[3]['img_h'] = 0;
		share[3]['text'] 	= 'Facebook';
		share[3]['title'] 	= ('Facebook: ' + page_title);	
		share[3]['link'] 	= ('http://www.facebook.com/sharer.php?u=' + page_url + '&t=' + page_title); // worked with test url (note that the '&t' var is currently not shown by Facebook - rather FB automatically pulls it from the page)
		
		// end editable
		
		var div = document.createElement('div');
				div.setAttribute('id', 'share');		
		var p = document.createElement('p');
		var p_text = document.createTextNode(share_label);		
		var ul = document.createElement('ul');	
		
		for (var s=0; s<share.length; s++)
		{
			var li = document.createElement('li');	
			
			if (s == 0)
			{
					li.className = 'first'; // hook for css
			}
			
			var	a = document.createElement('a');			
			a.setAttribute('title', share[s]['title']);					
			a.setAttribute('href', share[s]['link']);	
														 
			if (share[s]['img'] == '')
			{
				// output link as text
				var	a_text = document.createTextNode(share[s]['text']);
						a.appendChild(a_text);
			}
			else
			{
				// output link as an image				
				var	a_img = document.createElement('img');
						a_img.setAttribute('src', share[s]['img']);
						a_img.setAttribute('alt', (share[s]['text'] + '. '));
						a_img.setAttribute('width', share[s]['img_w']);
						a_img.setAttribute('height', share[s]['img_h']);	
						a.appendChild(a_img);
			}
			li.appendChild(a);	
			ul.appendChild(li);				
		}

		var p2 = document.createElement('p');
				p2.className = 'contact';
		var p2_text = document.createTextNode('If you have any information to add about this video please ');		
		var p2_link = document.createElement('a');		
				p2_link.setAttribute('href', '/readytoroll/contact.php');
		var p2_link_text = document.createTextNode('contact us');
		
		p2_link.appendChild(p2_link_text);
		p2.appendChild(p2_text);
		p2.appendChild(p2_link);		

		p.appendChild(p_text);
		div.appendChild(p);
		div.appendChild(ul);
		div.appendChild(p2);		
		
		parent_container.appendChild(div);
	}
	
/*	
   @ enable_voting()
	 @ output_vote_phrase()
	 @ processVote()
	 @ confirmVote()
	 @ remove_hot_spots()
	 @ show_vote_phrase()
	 @ show_stars()
	 @ play_vote_phrase()	 
   ---------------------------------------------------------------
	 Voting
	 Mouse and keyboard support.
	 However, note that the Flash interface is not always accessible via the keyboard.	
   _______________________________________________________________
*/		
	
	function enable_voting()
	{	
	    return; 	    /* DI@Chrome 25 May 2009 - disables voting */
	
		// trigger by flash movie on click of play button
	
		// generate 5 button elements, and put them on top of the 5 stars
		
		var stars_parent = document.getElementById('stops');
		var stars_total = 5;
		
		for (var s=0; s<stars_total; s++)
		{
			// if only i could remember which job i used cloneNode on..
			//var vote = document.createElement('span');
			var vote = document.createElement('button');
		
			var hot_spot_img = document.createElement('img'); // ie needs an inline image (rather than nbsp) to get non-flickery interaction (with span - now button), so use an image for all 
					hot_spot_img.setAttribute('src', '/resources/ui/images/videovault/pixel.gif');
					hot_spot_img.setAttribute('width', '1px');
					hot_spot_img.setAttribute('height', '1px');	
					
					var t = (s + 1);
					var alt_str = (t + '/5 (' + get_phrase_text(t) + '). ');				
					hot_spot_img.setAttribute('alt', alt_str);						
					hot_spot_img.setAttribute('title', '');	// suppress alt tooltip in MSIE	
		
					vote.setAttribute('id', ('vote-' + (s + 1)));
					vote.className = 'stop';
					addEvent(vote, 'mouseover', output_vote_phrase, false);
					addEvent(vote, 'focus', output_vote_phrase, false);					
					addEvent(vote, 'mouseout', output_vote_phrase, false);	
					addEvent(vote, 'blur', output_vote_phrase, false);						
					addEvent(vote, 'click', output_vote_phrase, false);			

					vote.appendChild(hot_spot_img);					
					
					stars_parent.appendChild(vote);					
		}
		
		// remove the green background
		document.getElementById('vote').className = 'vote-enabled';		
		
		// remove the 'Play video to activate voting!' text		
		remove_all_children(document.getElementById('vote-warning'));
		var nbsp = document.createTextNode('\u00A0'); // nbsp
		document.getElementById('vote-warning').appendChild(nbsp);
	}
	
	function output_vote_phrase(e)
	{
    	return; 	    /* DI@Chrome 25 May 2009 - disables voting */

		// identify 'this'
		
		if (!e) 
		{
			var e = window.event; // http://www.quirksmode.org/js/events_properties.html
		}
		
		// 
		
		if (e.target) 
		{
			targ = e.target;
		}
		else if (e.srcElement) 
		{
			targ = e.srcElement;
		}
		if (targ.nodeType == 3) 
		{	
			// defeat Safari bug
			targ = targ.parentNode;
		}
		
		// IE
		
		if (whichbrowser.isIE5up)	
		{
			_this = targ;
		}
		else
		{
			_this = this;	
		}	
		
		// some more ie checking
		
		while (_this.tagName.toLowerCase() != 'button')
		{		
			/*
				in this case we actually want IE to allow the img to steal the focus,
				as only the image gives us a reliable hot spot,
				but - we still need to get the vote id from the button
			*/
		
			_this = _this.parentNode;
		}		
		
		var vote_id = _this.id.substring(5,6);		

		if ((e.type == 'mouseover') || (e.type == 'focus'))
		{				
			show_vote_phrase(vote_id);				
			show_stars(vote_id);							
		}
		else if ((e.type == 'mouseout') || (e.type == 'blur'))
		{		
			show_vote_phrase();				
			show_stars();
		}	
		else if (e.type == 'click')
		{
			play_vote_phrase(vote_id);
			
			// send vote to server via ajax
			window.vote_id = vote_id; // save vote so that it can be shown after the server processes the vote
			processVote(videoID, vote_id);	
		}			
	}
	
	function processVote(id, vote)
	{
        return; 	    /* DI@Chrome 25 May 2009 - disables voting */

		// 	TG, from videoVault.js	
				
		try 
		{
			xmlHttp = new ActiveXObject("Msxml2.XMLHTTP");
		} 
		catch (e) 
		{
			try 
			{
				xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
			} 
			catch (e2) 
			{
				xmlHttp = false;
			}
		}
		
		if (!xmlHttp && typeof XMLHttpRequest != "undefined") 
		{
			xmlHttp = new XMLHttpRequest();
		}
		
		this.script = "processVote.php";		
		this.parameters = "id=" + encodeURI( id );
		this.parameters += "&vote=" + encodeURI( vote );
			
		xmlHttp.onreadystatechange = confirmVote;
			
		xmlHttp.open("POST", this.script, true);
			
		xmlHttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); // set up and send the request
		xmlHttp.setRequestHeader("Content-length", this.parameters.length);
		xmlHttp.setRequestHeader("Connection", "close");
		xmlHttp.send(this.parameters);	
	}	
	
	function confirmVote()
	{			
        return; 	    /* DI@Chrome 25 May 2009 - disables voting */

		// 	TG, from videoVault.js	
		//	Modified by DS
	
		if (xmlHttp.readyState == 4)
		{				
			this.resultsString = xmlHttp.responseText; // get the results passed back from the script
			
			if (!document.getElementById('vote-feedback'))
			{
			var vote_feedback = document.createElement('p');
					vote_feedback.setAttribute('id', 'vote-feedback');
			}		
			else
			{
				vote_feedback = document.getElementById('vote-feedback');
			}
			
			if (this.resultsString == "true")
			{				
				vote_feedback.className = 'success';
				var vote_feedback_text = document.createTextNode('You have successfully voted. ');
				
				// show stars and phrase, in case the user moused-out before the server responded					
				show_stars(window.vote_id);		
				show_vote_phrase(window.vote_id);						
				
				// prevent further vote clicks
				remove_hot_spots();	
			}
			else
			{			
				vote_feedback.className = 'warning';
				var vote_feedback_text = document.createTextNode('There was a problem registering your vote. Please try again.');
			}		
			
			remove_all_children(vote_feedback); // remove any existing text
			vote_feedback.appendChild(vote_feedback_text);
			document.getElementById('vote-liner').appendChild(vote_feedback);			
		}				
	}	
	
	function remove_hot_spots()
	{
		/* for some reason this was not removing #vote-2 and #vote-4 ...
		
		var hot_spots = document.getElementById('stops').getElementsByTagName('span');
		for (var h=0; h<hot_spots.length; h++)
		{
			hot_spots[h].parentNode.removeChild(hot_spots[h]);
		}		
		
		*/
		
		document.getElementById('vote-1').parentNode.removeChild(document.getElementById('vote-1'));
		document.getElementById('vote-2').parentNode.removeChild(document.getElementById('vote-2'));
		document.getElementById('vote-3').parentNode.removeChild(document.getElementById('vote-3'));
		document.getElementById('vote-4').parentNode.removeChild(document.getElementById('vote-4'));
		document.getElementById('vote-5').parentNode.removeChild(document.getElementById('vote-5'));		
	}
	
	function get_phrase_text(stars)
	{
		// split into a separate function so it can be used to provide alt attrs for the images nested within the voting buttons
		
		stars = (stars + '');
		
		var txt;
		
		switch (stars)
		{
			case ('5'):
				txt = 'Tumeke';
				break;
			case ('4'):
				txt = 'Tau ke';
				break;
			case ('3'):
				txt = 'Rawe';
				break;
			case ('2'):
				txt = 'Tino pai';
				break;
			case ('1'):
				txt = 'Ka pai';
				break;	
			default:
				txt = '\u00A0'; // nbsp
		}	
		
		return txt;
	}
	
	function show_vote_phrase(stars)
	{	
		var str = get_phrase_text(stars);
		
		remove_all_children(document.getElementById('phrase'));
		var phrase_text = document.createTextNode(str);
		document.getElementById('phrase').appendChild(phrase_text);		
	}
	
	function show_stars(stars)
	{				
		if (stars > 0)
		{
			stars2 = stars * 2;
		}
		else
		{
			stars2 = 0;
		}
	
		// change inline star image
		var stars_img = document.getElementById('stops').getElementsByTagName('img')[0];		
				stars_img.setAttribute('src', ('/resources/ui/images/videovault/table-shared/stars-gold-on-white/' + stars2 + '.gif'));
				
				var alt_stars = (stars ? stars : '0');
				var alt_str = (alt_stars + '/5. ');		
				stars_img.setAttribute('alt', '');				
				stars_img.setAttribute('alt', alt_str);
		
		// change classname
				document.getElementById('stops').className = ('stops stops-' + stars2);		
	}
	
	function play_vote_phrase(stars)
	{				
		document.getElementById('flash_video_player').playVotingSound(stars); //flash_video_player.playVotingSound(stars); failed
	}
	
/*	
   @ remove_all_children()	 
   ---------------------------------------------------------------
	 Remove all nodes within an element -
	 A graceful alternative to el.innerHTML
   _______________________________________________________________
*/			
	
	function remove_all_children(el)
	{
		if (!el)
		{
			return;
		}
		
		if (el.hasChildNodes())
		{
			while (el.childNodes.length >= 1)
			{
				el.removeChild(el.firstChild);
			} 
		}		
	}	
	
	function submitSignup()
	{
		
		// create a feedback container and insert it at the top of the form		
		if (!document.getElementById('signup-feedback'))
		{
			div_feedback = document.createElement('div');
			div_feedback.setAttribute('id', 'signup-feedback');
			div_feedback.className = 'feedback';		
			var first_pair = document.getElementById('signup-form').getElementsByTagName('div')[0];			
			first_pair.parentNode.insertBefore(div_feedback, first_pair);		
		}
		
		feedback = '';
		
		rtrTemp = document.getElementById('rtr-email-updates');
		rtr = rtrTemp.checked;
		
		newsTemp = document.getElementById('fa-email-updates');		
		news = newsTemp.checked;
		email = document.getElementById('email').value; 
		
		if (email == '' || email == 'Enter your email address')
		{
			feedback = "Please enter your <a href=\"#email\">email address</a>.<br />"
		}
		if (rtr == false && news == false)
		{			
			feedback += "Please select the <a href=\"#newsletters\">newsletter</a> you'd like to sign up for. ";
		}	
	
		if (feedback == '')
		{
			try 
			{
				xmlHttp = new ActiveXObject("Msxml2.XMLHTTP");
			} 
			catch (e) 
			{
				try 
				{
					xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
				} 
				catch (e2) 
				{
					xmlHttp = false;
				}
			}
			
			if (!xmlHttp && typeof XMLHttpRequest != "undefined") 
			{
				xmlHttp = new XMLHttpRequest();
			}
			
			this.script = "processSignup.php";		
			this.parameters = "email=" + encodeURI( email );
			this.parameters += "&news=" + encodeURI( news );
			this.parameters += "&rtr=" + encodeURI( rtr );
	
			xmlHttp.onreadystatechange = confirmSignup;
				
			xmlHttp.open("POST", this.script, true);
				
			xmlHttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); // set up and send the request
			xmlHttp.setRequestHeader("Content-length", this.parameters.length);
			xmlHttp.setRequestHeader("Connection", "close");
			xmlHttp.send(this.parameters);	
		}
		else
		{
			// remove any existing feedback
				remove_all_children(document.getElementById('signup-feedback'));			
			
			// create a paragraph element, style it and populate it with the signup feedback
			var p_feedback = document.createElement('p');		
					p_feedback.className = 'warning';			
			//var p_feedback_text = document.createTextNode(feedback);
			//		p_feedback.appendChild(p_feedback_text);
					p_feedback.innerHTML = '<strong>' + feedback + '</strong>';
					
					document.getElementById('signup-feedback').appendChild(p_feedback);
		}
		return false;
	
	}
	function confirmSignup(){
		
			if (xmlHttp.readyState == 4){	
					
				feedback = '';	
				pclass = '';	
				this.resultsString = xmlHttp.responseText; // get the results passed back from the script
			
				if (this.resultsString == "true") // was "true"
				{
					feedback = "Thanks for signing up!";					
					empty_form(document.getElementById('signup-form'));
					pclass = 'success';
				}
				if (this.resultsString == "fail1")
				{
					feedback = "Please enter your <a href=\"#email\">email</a> address.<br />";
					pclass = 'warning';
				}
				if (this.resultsString == "|fail2")
				{
					feedback += "Please select a newsletter to sign up for.<br />";
					pclass = 'warning';
				}
				if (this.resultsString == "fail1|fail2")
				{
					feedback = "Please enter your <a href=\"#email\">email</a> address and select a newsletter to sign up for.<br />";
					pclass = 'warning';
				}
				
			// remove any existing feedback
				remove_all_children(document.getElementById('signup-feedback'));
			
			// create a paragraph element, style it and populate it with the signup feedback
			var p_feedback = document.createElement('p');			
					p_feedback.className = pclass;			
			//var p_feedback_text = document.createTextNode(feedback);
			//		p_feedback.appendChild(p_feedback_text);
					p_feedback.innerHTML = '<strong>' + feedback + '</strong>';
					
					document.getElementById('signup-feedback').appendChild(p_feedback);		
		}
	}
	
	function empty_form(form_el)
	{
		// put removeable els into a new array, otherwise not all are removed as array length changes at removeChild
		var remove = new Array();
		var r = 0;			
	
		var divs = form_el.getElementsByTagName('div');
		
		for (var d=0; d<divs.length; d++)
		{						
			var div = divs[d];
				
			if (div.className.indexOf('pair') != -1)
			{
				remove[r] = div;
				r++;
			}
		}	
		
		var buttons = form_el.getElementsByTagName('button');	
		
		for (var d=0; d<buttons.length; d++)
		{									
			remove[r] = buttons[d];
			r++;
		}			
		
		for (var r=0; r<remove.length; r++)
		{
				remove[r].parentNode.removeChild(remove[r]);
		}
	}

