/***************************************
*** Media Machine - The A Group 2010 ***
***************************************/

/* Dependencies
********************************************/

var escripts=[
	[window.hasH5mp4, '/taglib/javascript/util.js'],
	[window.SWFObject, '/taglib/javascript/swfobject.js'], // force this one to load since v1 has same fn name
	[window.DetectFlashVer, '/taglib/javascript/AC_OETags.js'],
	[window.isMobile, '/taglib/javascript/mobile_detect.js'],
	[window._tag, '/taglib/javascript/audio.js']
];
for(var i=0;i<escripts.length;i++){
	if(!escripts[i][0]){
		document.write('<scr'+'ipt type="text/javascript" src="'+escripts[i][1]+'"></sc'+'ript>');
	}
}


/* Globals
********************************************/

var ajaxObjects=new Array();
panels=['intro','video','audio','share','share_thanks','invite','invite_thanks','wait'];
fields=['from_name','recipient_name','from_email','recipient_email','captcha_code','captcha_md5','copy_sender','message','campus'];
arr_hide_weeks=['invite','invite_thanks','share','share_thanks'];

var pStart, pEnd, pInc;
var videoPlayDo, playerType;
var h5Audio;
var fnFin=new function(){};
expdt=new Date();
expdt.setDate(expdt.getYear()+1);
amatrix=[0,.016,.047,.094,.156,.234,.328,.438,.563,.672,.766,.844,.906,.953,.984,1];
ani_delay=1;

addEvent(window,'load',mediaMachineInit,false);

function mediaMachineInit(){
	
	profile={
		html5: hasH5mp4(),
		h5mp3: hasH5mp3(),
		flash: DetectFlashVer(9,0,128),
		mobile: isMobile(),
		ipad: isIpad()
	};

/*
	profile={
		html5: false,
		flash: false,
		mobile: true,
		ipad: false
	};
*/
	
	if(profile.flash){
		playerType='flash';
	}else if(profile.mobile){
		playerType=(profile.ipad?'html5':'none');
	}else if(profile.html5){
		playerType='html5';
	}else{
		playerType='none';
	}
	//alert('html5:'+profile.html5+' flash:'+profile.flash+' mobile:'+profile.mobile+' ipad:'+profile.ipad);

	switch(playerType){
		case 'flash':
			videoPlayDo=function(which){
				vid=media_params['v'+which];
				hOut=Math.round(vid_player_width*vid.height/480);
				$('video_player').style.height=hOut+'px';
				var fo = new SWFObject("/taglib/swf/player-licensed.swf", "sp", vid_player_width, hOut, "9", "#000000");
				fo.addVariable("provider", "rtmp");
				fo.addVariable("rtmp.prepend", "false");
				fo.addVariable("streamer", "rtmp://r.crosspoint.agroup.netdna-cdn.com/play");
				fo.addVariable("file", "mp4:vod/crosspoint.agroup/video/"+which+".mp4");
				fo.addVariable("skin", "/taglib/swf/jwskins/black_plastic/black_plastic.xml");
				fo.addVariable("autostart", "true");
				fo.addVariable("fullscreen", "true");
				fo.addVariable("controlbar", "over");
				fo.addParam("allowfullscreen", "true");
				fo.write("video_player");
			};
			break;
			
		case 'html5':
			videoPlayDo=function(which){
				vid=media_params['v'+which];
				hOut=Math.round(vid_player_width*vid.height/480);
				var playerdiv=$('video_player');
				playerdiv.style.height=hOut+'px';
				var hplayer=document.createElement('VIDEO');
				playerdiv.innerHTML='';
				playerdiv.appendChild(hplayer);
				with(hplayer){
					width=vid_player_width;
					height=hOut;
					src="/video/"+which+".mp4";
					controls=true;
					style.backgroundColor='#000';
				}
				hplayer.load();
				hplayer.play();
				hplayer.style.zIndex=4000;
			};

			var vdummy=document.createElement('VIDEO');
			with(vdummy){
				width=1;
				height=1;
				controls=false;
				style.position='absolute';
				style.visibility='hidden';
			}
			document.body.appendChild(vdummy);
			
			h5Audio=new Audio({
				container: 'audio_player',
				player_skin: '/taglib/swf/jwskins/black_plastic_transparent/black_plastic_transparent.xml',
				width: 528,
			});

			break;
		
		case 'none':
			videoPlayDo=function(which){
				vid=media_params['v'+which];
				window.location="/video/"+which+".mp4";
				return false;
			};

			break;

	}


	if(mediacur.search(/^([av])(\d+)/)==0){
		mtype=RegExp.$1;
		mId=RegExp.$2;
		if(mtype=='v'){
			videoPlay(mId);
		}else{
			audioPlay(mId);
		}
	}
	c_newcode('invite');
	c_newcode('share');
	if(series_banner>0){
		prel=new Image();
		prel.src='/images/custom/'+series_banner+'/banner_'+series_url+'.jpg';
	}
/*
	if($('series_description_collapse').scrollHeight>desc_maxheight){
		$('series_description_morelink').style.visibility='visible';
	}
*/
}

/* Media navigation
********************************************/

function weekShow(which){
	if(curweek>0){
		$('week'+curweek).style.display='none';
		$('weektab'+curweek).innerHTML='<a href="javascript:weekShow('+curweek+')"><span>'+curweek+'</span></a>';
	}
	curweek=which;
	$('week'+curweek).style.display=document.all?'block':'table-row-group';
	$('weektab'+curweek).innerHTML='<span>'+curweek+'</span>';
}

function mediacurChange(which){
	if(weeknums.length==0){
		if(cross_ref.length>0){
			itemname=cross_ref[0];
			mediacur=itemname;
			return false;
		}
	}
	if(hicell>=0){
		itemname=cross_ref[hicell];
		if(itemname.search(/^([av])/)==0){
			mtype=RegExp.$1;
			oCell=$('mc'+hicell);
			oRow=oCell.parentNode;
			oRow.className='';
			classRem(oCell,'current');
			arrlnk=oCell.getElementsByTagName('A');
			arrlnk[0].innerHTML=(mtype=='v'?'Watch':'Listen');
		}
	}
	hicell=which;
	if(hicell>=0){
		itemname=cross_ref[hicell];
		mediacur=itemname;
		if(mediacur.search(/^([av])/)==0){
			mtype=RegExp.$1;
			nCell=$('mc'+hicell);
			nRow=nCell.parentNode;
			nRow.className='row_current';
			classAdd(nCell,'current');
			arrlnk=nCell.getElementsByTagName('A');
			arrlnk[0].innerHTML=(mtype=='v'?'Watching':'Listening');
		}
	}
}

function mediaPlay(which){
	mediacurChange(which);
	itemname=cross_ref[which];
	if(itemname.search(/^([av])(\d+)/)==0){
		mtype=RegExp.$1;
		mId=RegExp.$2;
		if(mtype=='v'){
			videoPlay(mId);
		}else{
			audioPlay(mId);
		}
	}
}

function videoPlay(which){
	if(profile.mobile && !profile.ipad){
		videoPlayDo(which);
		return false;
	}
	hOut=Math.round(vid_player_width*media_params['v'+which].height/480);
	$('video_player').style.height=hOut+'px';
	vid=media_params['v'+which];
	sdHtml='<p class="series_date">Date: '+vid.date+'</p>';
	if(vid.description>''){
		sdHtml+='<p>'+vid.description+'</p>';
	}
	$('desc_video').innerHTML=sdHtml;
	panelShow('video',function(){videoPlayDo(which);mediaTrack('video',which);});
}

function audioPlay(which){
	aud=media_params['a'+which];
	if(playerType == 'html5'){
		// need here since audioPlayDo is too far detached for iPad to autoplay
		h5Audio.playerDeploy('/audio/custom/'+which+'.mp3');
		var oimg=new Image();
		oimg.src="/images/sized/"+series_graphic+"/320x/audio.jpg";
		oimg.style.marginLeft='104px';
		$('audio_player').insertBefore(oimg,h5Audio.player_shell);
		h5Audio.player_shell.style.marginTop='-28px';
	}
	sdHtml='<p class="series_date">Date: '+aud.date+'</p>';
	if(aud.description>''){
		sdHtml+='<p>'+aud.description+'</p>';
	}
	$('desc_audio').innerHTML=sdHtml;
	panelShow('audio',audioPlayDo);
}

function audioPlayDo(){
	if(mediacur.search(/^a(\d+)/)==0){
		which=RegExp.$1;
		if(playerType == 'html5'){
			//h5Audio.playerDeploy('/audio/custom/'+which+'.mp3');
			var oimg=new Image();
			oimg.src="/images/sized/"+series_graphic+"/320x/audio.jpg";
			oimg.style.marginLeft='104px';
			//$('audio_player').insertBefore(oimg,h5Audio.player_shell);
			//h5Audio.player_shell.style.marginTop='-28px';
		}else if(profile.flash){
			var s1=new SWFObject("/swf/mp3spectrum.swf", "aplayer", "528", "180", "9");
			s1.addVariable("song",'/audio/custom/'+which+'.mp3');
			s1.addVariable("image","/images/sized/"+series_graphic+"/320x/audio.jpg");
			s1.addParam("wmode", "transparent");
			s1.write("audio_player");
		}else{
			window.location='/audio/custom/'+which+'.mp3';
		}
	}

	// tracking
	mediaTrack('audio',which);
}

function mediaTrack(mtype,mid){
	var ajaxIndex=ajaxObjects.length;
	ajaxObjects[ajaxIndex]=new sack();         
	with(ajaxObjects[ajaxIndex]){
		requestFile ="/cgi-bin/media_hits.cgi";
		setVar(mtype+'_id',mid);
		onCompletion=function(){hit_response(ajaxIndex);};
		runAJAX();
	}
}

/* Share
********************************************/

var shareType;
function mediaShare(){
	if(mediacur.search(/^([va])(\d+)/)==0){
		mType=RegExp.$1;
		mId=RegExp.$2;
	}
	
	if(mType=='v'){
		imgId=mId;
		banner_html='<embed type="application/x-shockwave-flash" src="'+url_base+'/swf/player_embed.swf" id="cpvPlayer" name="cpvPlayer" '+
		'bgcolor="#000000" quality="high" allowfullscreen="true" flashvars="'+
		'file='+url_base+'/video/'+mId+'.mp4'+
		'&amp;image='+url_base+'/video/'+mId+'.jpg'+
		'&amp;skin='+url_base+'/swf/snel3.swf'+
		'&amp;autostart=false&amp;fullscreen=true&amp;controlbar=over'+
		'&amp;string='+escape(series_title)+
		'&amp;seriesLink='+url_base+'/media/'+series_url+'/'+
		'" width="480" height="'+(media_params[mediacur].height+60)+'">';
		bVerb='Embed video player';
		mediaName='video';
	}else{
		imgId=series_graphic;
		bVerb='Embed audio player';
		mediaName='audio';
		banner_html='<embed type="application/x-shockwave-flash" src="'+url_base+'/swf/mp3spectrum_embed.swf" id="cpaPlayer" name="cpaPlayer" '+
		'bgcolor="#000000" quality="high" allowfullscreen="true" '+
		'flashvars="song='+url_base+'/audio/'+mId+'/'+series_url+'.mp3'+
		'&amp;image='+url_base+'/images/sized/'+series_graphic+'/280x/'+series_url+'.jpg'+
		'&amp;string='+escape(media_params[mediacur].title)+
		'&amp;seriesLink='+url_base+'/media/'+series_url+'" '+
		'width="320" height="218">';

	}
	shareLink=url_base+'/media/'+series_url+'/'+mediacur;
	$('banner_verb').innerHTML=bVerb;
	$('share_linkto_object').innerHTML='this '+mediaName;
	$('share_title_extra').innerHTML=(mType=='v'?'Video':'Audio');
	$('share_url').value=shareLink;
	$('share_link').value='<a href="'+shareLink+'" target="_blank">'+series_title+' '+mediaName+': '+media_params[mediacur].title+'</a>';
	$('share_banner').value=banner_html;
	//$('banner_preview').innerHTML=banner_html;
	$('banner_container').style.display='block';
	panelShow('share',fnNull());
}

function seriesShare(){
	txt="Check out media from Cross Point's &ldquo;"+series_title+"&rdquo; series.";
	$('share_title_extra').innerHTML='Series';
	shareLink=url_base+'/media/'+series_url+'/';
	if(series_banner>0){
		banner_html='<a href="'+shareLink+'" target="_blank"><img border="0" height="185" src="'+url_base+'/images/custom/'+series_banner+'/banner_'+series_url+'.jpg" alt="'+series_title+'" /></a>';
		disp='block';
	}else{
		banner_html='';
		disp='none';
	}
	$('banner_verb').innerHTML='Banner code';
	$('share_linkto_object').innerHTML='this series';
	$('banner_preview').innerHTML=banner_html;
	$('share_banner').value=banner_html;
	$('banner_container').style.display=disp;
	$('share_url').value=shareLink;
	$('share_link').value='<a href="'+shareLink+'" target="_blank">'+series_title+'</a>';
//	panelShow('share',fnNull());
	panelShow('share',function(){$('media_player').style.overflow='visible';});
}

function share_submit(){
	// field validation
	$('error_message').innerHTML='';
	$('media_player').style.height='auto';
	for(i=0;i<5;i++){
		if(!$(fields[i]+'_share').value){
			$(fields[i]+'_share').focus();
			err_msg('Required information missing','_share');
			return false;
		}
	}
	msg=email_check($('from_email_share').value);
	if(msg>''){
		$('from_email_share').focus();
		err_msg(msg,'_share');
		return false;
	}
	msg=email_check($('recipient_email_share').value);
	if(msg>''){
		$('recipient_email_share').focus();
		err_msg(msg,'_share');
		return false;
	}

	// submit via ajax
	$('btn_submit_share').style.display='none';
	$('submit_wait_share').style.display='block';
	var ajaxIndex=ajaxObjects.length;
	ajaxObjects[ajaxIndex]=new sack();         
	for(i=0;i<fields.length;i++){
		ajaxObjects[ajaxIndex].setVar(fields[i],$(fields[i]+'_share').value);
	}
	with(ajaxObjects[ajaxIndex]){
		requestFile ="/cgi-bin/share.cgi";
		setVar('series_url',series_url);
		setVar('mediacur',mediacur);
		onCompletion=function(){share_response(ajaxIndex);};
		runAJAX();
	}
}

function share_response(index){
	c_newcode('share');
	txt=ajaxObjects[index].response;
	$('submit_wait_share').style.display='none';
	$('btn_submit_share').style.display='inline';
	if(txt=='error'){
		err_msg("Captcha code incorrect. Please try with this new one.",'_share');
		return false;
	}else if(txt=='success'){
		panelShow('share_thanks',fnNull());
	}else{
		alert(txt);
	}
}

/* Invite
********************************************/

function seriesInvite(){
	clearFields=['recipient_name','recipient_email','captcha_code'];
	for(i=0;i<clearFields.length;i++){
		$(clearFields[i]).value='';
	}
	panelShow('invite',fnNull());
}

function invite_submit(){
	// field validation
	$('error_message').innerHTML='';
	$('media_player').style.height='auto';
	if($('campus').selectedIndex==0){
		$('campus').focus();
		err_msg("Please select a campus");
		return false;
	}
	for(i=0;i<5;i++){
		if(!$(fields[i]).value){
			$(fields[i]).focus();
			err_msg("Required information missing");
			return false;
		}
	}
	msg=email_check($('from_email').value);
	if(msg>''){
		$('from_email').focus();
		err_msg(msg);
		return false;
	}
	msg=email_check($('recipient_email').value);
	if(msg>''){
		$('recipient_email').focus();
		err_msg(msg);
		return false;
	}

	// submit via ajax
	$('btn_submit').style.display='none';
	$('submit_wait').style.display='block';
	var ajaxIndex=ajaxObjects.length;
	ajaxObjects[ajaxIndex]=new sack();         
	for(i=0;i<fields.length;i++){
		ajaxObjects[ajaxIndex].setVar(fields[i],$(fields[i]).value);
	}
	with(ajaxObjects[ajaxIndex]){
		requestFile ="/cgi-bin/invite.cgi";
		setVar('series_url',series_url);
		onCompletion=function(){invite_response(ajaxIndex);};
		runAJAX();
	}
}

function invite_response(index){
	txt=ajaxObjects[index].response;
	$('submit_wait').style.display='none';
	$('btn_submit').style.display='inline';
	if(txt=='error'){
		c_newcode();
		err_msg("Captcha code incorrect. Please try with this new one.");
		return false;
	}else if(txt=='success'){
		panelShow('invite_thanks',fnNull());
		c_newcode('invite');
	}else{
		alert(txt);
		return false;
		err_msg(txt);
	}
}

function err_msg(what){
	errdiv_suffix=(arguments.length>1?arguments[1]:'');
	$('error_message'+errdiv_suffix).innerHTML=what;
}

/* Captcha
********************************************/

function c_newcode(which){
	var ident=(which=='share'?'_share':'');
	$('captcha'+ident).style.visibility='hidden';
	$('captcha_wait'+ident).style.visibility='visible';
	var ajaxIndex=ajaxObjects.length;
	ajaxObjects[ajaxIndex]=new sack();
	with(ajaxObjects[ajaxIndex]){
		requestFile ="/cgi-bin/aj_captcha.cgi";
		onCompletion=function(){c_newcode_response(ajaxIndex,which);};
		runAJAX();
	}
}

function c_newcode_response(index,which){
	if(!which) which='invite';
	var ident=(which=='share'?'_share':'');
	txt=ajaxObjects[index].response;
	$('captcha_img'+ident).src='/captcha/images/'+txt+'.png';
	$('captcha_wait'+ident).style.visibility='hidden';
	$('captcha'+ident).style.visibility='visible';
	$('captcha_md5'+ident).value=txt;
	if($('pnl_'+which).style.display=='block'){
		$('captcha_code'+ident).focus();
	}
}

/* Utility
********************************************/

function aniToggle(){
//	use_ani=$('chk_ani').checked;
	setCookie('media_ani',use_ani,expdt,'/');
}

var ani_threshold=100;
var use_ani=true;
var ani_test=true;
var ani_start;
function panelShow(what,fn){
	if(curpanel==what){
		if(fn)fn();
		return false;
	}

	// kill video if playing
	if(curpanel=='video') $('video_player').innerHTML='';

	// kill audio if playing
	if(curpanel=='audio') {
		$('audio_player').innerHTML='';
	}

	// kill banner preview - only needed if we're showing the audio/video player
	// if(curpanel=='share') $('banner_preview').innerHTML='';

	pInc=0;
	// measure start height
	pStart=$('media_player').offsetHeight-2;

	// hide overflow, temporarily display target panel for measurement
	with($('media_player').style){
		height=pStart+'px';
		overflow='hidden';
		visibility='hidden';
	}

	// measure target panel
	$('pnl_'+what).style.display='block';
	pEnd=$('pnl_'+what).offsetHeight;
	$('pnl_'+what).style.display='none';
	with($('media_player').style){
		overflow='visible';
		visibility='visible';
	}

	// hide current panel, assign callback
	$('pnl_'+curpanel).style.display='none';
	fnFin=fn||fnNull;
	if(use_ani){
		$('pnl_wait').style.display='block';
	}else{
		pInc=amatrix.length;
	}

	// show or hide week nav/media
	week_vis=(arr_hide_weeks.inArray(what)?'none':'block');
	if(weeknums.length==0)week_vis='none';
	$('week_nav').style.display=week_vis;
	$('week_media').style.display=week_vis;

	// init transition
	ani_start=new Date().getTime();
	panelInc(what);
}

function panelInc(pnl){
	pInc++;
	if(ani_test==true && (pInc==2)){
		ani_test=false;
		timestamp=new Date().getTime();
		if(timestamp-ani_start>ani_threshold){
			use_ani=false;
			pInc=amatrix.length;
			panelInc(pnl);
			//alert("turning off animation");
			return false;
		}else{
			//alert("looks good: "+(timestamp-ani_start));
		}
	}
	if(pInc<amatrix.length){
		hCur=amatrix[pInc]*(pEnd-pStart)+pStart;
		$('media_player').style.height=hCur+'px';
		setTimeout('panelInc("'+pnl+'")',ani_delay);
	}else{
		$('pnl_wait').style.display='none';
		$('media_player').style.height=pEnd+'px';
		$('pnl_'+pnl).style.display='block';
		curpanel=pnl;
		fnFin();
	}
}

function fnIntro(){
	mediacurChange(-1);
	mediacur='';
}

var desc_expanded=false;
var desc_maxheight=100;
function descriptionExpand(){
	if(desc_expanded){
		$('series_description_collapse').style.paddingBottom='0';
		desc_mh=desc_maxheight;
		desc_txt='show more &raquo;';
		desc_expanded=false;
	}else{
		$('series_description_collapse').style.paddingBottom='1.6em';
		desc_mh=$('series_description_collapse').scrollHeight;
		desc_txt='&laquo; show less';
		desc_expanded=true;
	}
	if(document.all){
		$('series_description_collapse').style.height=desc_mh+'px';
	}else{
		$('series_description_collapse').style.maxHeight=desc_mh+'px';
	}
	$('series_description_morelink').innerHTML=desc_txt;
}

function hit_response(index){
	txt=ajaxObjects[index].response;
}

function fnNull(){}


Array.prototype.inArray=function(value){
	var i;
	for(i=0;i<this.length;i++) {
		if(this[i]===value){
			return true;
		}
	}
	return false;
};

function dbg(what){
	$('debug').innerHTML=what;
}
