// Switch Express video player interface module
// All rights reserved

function SMGAddEvent(obj, evType, fn){ 
 if (obj.addEventListener){ 
   obj.addEventListener(evType, fn, false); 
   return true; 
 } else if (obj.attachEvent){ 
   var r = obj.attachEvent("on"+evType, fn); 
   return r; 
 } else { 
   return false; 
 } 
}

var _SMGAjaxQueue = new Array();
function SMGAjax(js)
{
	js = js.replace(/%26/g, "&");
	js = js.replace(/%25/g, "%");
	js = js.replace(/%22/g, '"');
	
	// must use a timeout so that FireBug picks up the errors again.
	_SMGAjaxQueue.push(js);
	
	window.setTimeout("window.eval(_SMGAjaxProcessQueue());",1);
}

function _SMGAjaxProcessQueue()
{
	//alert('queue: '+_SMGAjaxQueue.length );
	while(_SMGAjaxQueue.length > 0)
	{
		var ajax = _SMGAjaxQueue.shift();
		SMGTrace("SMGAjax: shifting ajax from queue ("+ _SMGAjaxQueue.length+") " + ajax.substr(0,32));
		window.eval(ajax);
	}
}

function SMGTrace(msg)
{
	if(!_SMGDebug)
		return;
		
	var ele = document.getElementById("SMGTrace");
	
	if(ele != null)
		ele.innerHTML = ele.innerHTML + '<br />' +msg;
}
var _SMGDebug = false;
function SMGSetDebug(state)
{
	_SMGDebug=state;	
}

/* track a list of functions that are waiting for the proxy object,
when it cann SMGProxyLoaded then each function is run in turn */
var _proxyCallbacks;
var _proxyArgs;
var _proxyCheckInt;
var _proxyLoaded = false;
var _proxyLoading = false;
var _proxy_url = '/plugin/smgproxy.swf'

function SMGProxyURL(url)
{
	_proxy_url = url;
}
function SMGWaitForProxy(func,arg)
{
	if(_proxyLoaded)
		return true;
	
	SMGTrace('PROXY: proxy not loaded yet ');
	if(!_proxyCallbacks || _proxyCallbacks.length == 0)
	{
		_proxyCallbacks = new Array();
		_proxyArgs = new Array();
	}
	
	_proxyCallbacks.push(func);
	_proxyArgs.push(arg);
	
	SMGWriteProxy(); // Add proxy to DOM if it isn't already in progress
	return false;
}

function _isSMGProxyLoaded()
{
	SMGTrace('PROXY loaded, calling pending call backs');
			
	while(!_proxyCallbacks || _proxyCallbacks.length > 0)
	{
		
		funcs = _proxyCallbacks.pop();
		args = _proxyArgs.pop();
		
		SMGTrace('PROXY calling function');
		funcs['callback'](args['arg']);
	}	
}

function SMGProxyLoaded()
{
	SMGTrace('PROXY: proxy loaded running, passing on events');
	_proxyLoaded=true;
	window.setTimeout("_isSMGProxyLoaded();",1);
}


function SMGWriteProxy()
{
	
	if(!document.getElementById('smgproxyholder')!=undefined)
	{
		SMGTrace("PROXY: element smgproxyholder does not exist - adding");
		var newdiv = document.createElement('div');
		newdiv.setAttribute('id','smgproxyholder');
		document.body.appendChild(newdiv);
	}
	
	if(!document.getElementById('smgproxy')!=undefined && !_proxyLoading)
	{
		SMGTrace("PROXY: smgproxy object does not exist - adding");
		var smg_so = new SWFObject(_proxy_url, 'smgproxy', 0, 0, "8", "#000000");
		smg_so.addParam("salign", "m");
		smg_so.write('smgproxyholder');
		_proxyLoading=true;
	}
}

function SMGPlayer(siteID,profileID)
{
	var m_domain = "http://api.switchmedia.asia";
	var m_httpRequest = undefined;
	var m_videoID;
	var m_aspect=169;
	var m_siteID=siteID;
	var m_profileID=profileID;
	
	var m_elementID = 'smg-player';
	var m_width_43 = 500;
	var	m_height_43 = 420;
	var m_width_169 = 500;
	var	m_height_169 = 325;
	
	this.Write = _Write;
	function _Write(vid, wdt, hgt, id)
	{
		if(m_previewOnNext)
			forcePreview = 1;
		else
			forcePreview = 0;
			
		m_previewOnNext = false;
		
		m_videoID = vid;
		m_elementID = id;
		var so = new SWFObject(m_domain + "/xid/"+vid+'s'+m_siteID+'p'+m_profileID+'f'+forcePreview, 'theswitchtv', wdt, hgt, "8", "#000000");
   		so.addParam("salign", "m");
   		so.addParam("allowScriptAccess", "always");
   		
   		so.write(id);
	}
	
	this.WriteFromDetails = _WriteFromDetails;
	function _WriteFromDetails()
	{
		if(m_aspect==43)
		{
			hgt=m_height_43;
			wdt=m_width_43;
		}
		else
		{
			hgt=m_height_169;
			wdt=m_width_169;
		}
		
		if(m_previewOnNext)
			forcePreview = 1;
		else
			forcePreview = 0;
			
		m_previewOnNext = false;
		
		var so = new SWFObject(m_domain + "/xid/"+m_videoID+'s'+m_siteID+'p'+m_profileID+'f'+forcePreview, 'theswitchtv', wdt, hgt, "8", "#000000");
   		so.addParam("salign", "m");
   		so.write(m_elementID);
   		
	}
	
	this.SetDimensions43 = _SetDimensions43
	function _SetDimensions43(wdt,hgt)
	{
		m_width_43 = wdt;
		m_height_43 = hgt;
	}
	
	this.SetDimensions169 = _SetDimensions169
	function _SetDimensions169(wdt,hgt)
	{
		m_width_169 = wdt;
		m_height_169 = hgt;
	}
	
	this.SetDimensions = _SetDimensions
	function _SetDimensions(wdt43,hgt43,wdt169,hgt169)
	{
		_SetDimensions43(wdt43,hgt43);
		_SetDimensions169(wdt169,hgt169);
	}
	
	this.SetMetaData = _SetMetaData
	function _SetMetaData(meta)
	{
		m_aspect = meta.aspect;
	}
	
	this.TestMode = _TestMode;
	function _TestMode()
	{
		m_domain = "http://test.switch.tv";
	}
	
	var m_previewOnNext = false;
	this.PreviewOnNext = _PreviewOnNext;
	function _PreviewOnNext(state)
	{
		m_previewOnNext = state;
	}
	
	this.GetVideoID = _GetVideoID;
	function _GetVideoID()
	{
		return m_videoID;
	}
	
	
	this.Pause = _Pause;
	function _Pause()
	{
		document.getElementById("theswitchtv").Pause();
	}
	

	// set the fields to get
	this.SetFields = _SetFields;
	function _SetFields(fields)
	{
		m_fields = fields;
		
		// check if corresponding nodes exist
		var tmp = m_fields.split(",");
		for(id in tmp)
		{

			if(!document.getElementById('smg-'+tmp[id]))
				_trace('DOM element not found - smg'+tmp[id],'error');
		}
	}
	
	// load the data and run callback onLoadDetails

	this.LoadVideoDetails = __LoadVideoDetails;
	function __LoadVideoDetails(videoID,id)
	{
		m_elementID = id;
		_LoadVideoDetails(videoID);
	}
	function _LoadVideoDetails(videoID)
	{
		if(!SMGWaitForProxy({callback: _LoadVideoDetails},{arg: videoID}))
			return;
		
		_trace('loading details for id '+videoID);
		m_videoID=videoID;
		
		url=m_domain+'/plugin/synopsis.php';
		
		//url='http://www.switch-media-group.com/plugin/synopsis.php';
		var d= new Date();
		
		query='videoID='+m_videoID+'&fields='+m_fields+'&ms='+d.getTime();
		
		_trace(url+'?'+query);
		if(!m_proxy)
		{
			m_httpRequest = getHttpRequestObj();
			m_httpRequest.open('GET', url+'?'+query,true);		
			m_httpRequest.onreadystatechange = function() 
			{
				if (m_httpRequest.readyState==4 && m_httpRequest.status==200)
				{
					//alert('ajax1: '+httpRequest.responseText);
					eval(m_httpRequest.responseText);
				}
				else if (m_httpRequest.readyState==4 )
					Error('Error requesting video list');
			}     
			m_httpRequest.send(null);
		}
		else
		{
			_trace('_sending via proxy');
			_SMGSend('GET',url,query);
		}
	}
	
	this.onLoadDetails = _OnLoadDetails;
	this.SetOnLoadDetailsCallback = _SetOnLoadDetailsCallback;
	function _SetOnLoadDetailsCallback(callback)
	{
		this.onLoadDetails = callback;
	}
	
	function _OnLoadDetails(synopsis,metaData)
	{
		_trace('main: video data updated');
		_SetMetaData(metaData);
		_WriteFromDetails();
	
		for(id in synopsis)
		{
			_trace("inserting content into smg-"+id);
			
			// could go the DOM route later
			smgPlayer.UpdateHTML('smg-'+id,synopsis, id);
		}
	}
	
	var m_proxy = true;
	this.UseProxy = _UseProxy;
	function _UseProxy(_proxy)
	{
		m_proxy = _proxy;
	}
	
	function _SMGProxy(movieName)
	{
		var isIE = navigator.appName.indexOf("Microsoft") != -1;
		return (isIE) ? window[movieName] : document[movieName];
    }
    
    function _SMGSend(mode,url,query) 
    {	
		_SMGProxy("smgproxy").sendHTTP(mode,url,query);
	}
	
	this.Ajax = _Ajax;
	function _Ajax(js)
	{
		eval(js);
	}


// ****************          Functions to control screen elements
	var SMGDebug=false;
	this.SetDebug = _setDebug;
	function _setDebug(mode)
	{
		SMGDebug=mode;
	}
	
	function _trace(msg,state)
	{
		if(!_SMGDebug) return;
		
		var ele = document.getElementById("SMGTrace");
	
		if(ele != null)
		{
			if(state=='error')
				msg = '<p style="font-weight:bold;color:red;">'+msg+'</p>';
			else if(state=='warn')
				msg = '<p style="font-weight:bold;color:orange;">'+msg+'</p>';
			
			ele.innerHTML = ele.innerHTML + '<br />Player: ' +msg;	
		}
	}
		
	this.UpdateHTML = _updateHTML;
	function _updateHTML(id,obj,property)
	{
		
		if(document.getElementById(id)!=undefined)
		{
			document.getElementById(id).innerHTML = obj[property];	
		}
		else if(_SMGDebug)
			_SMGElementPopUp(id);
	}
		
	function _SMGElementPopUp(id)
	{
		alert('Element "'+id+'" was not found in document\n(call SetDebug(false) to disable these popups)');
	}
	
}

	if(typeof deconcept=="undefined"){var deconcept=new Object();}
	if(typeof deconcept.util=="undefined"){deconcept.util=new Object();}
	if(typeof deconcept.SWFObjectUtil=="undefined"){deconcept.SWFObjectUtil=new Object();}
	deconcept.SWFObject=function(_1,id,w,h,_5,c,_7,_8,_9,_a,_b){if(!document.getElementById){return;}
	this.DETECT_KEY=_b?_b:"detectflash";
	this.skipDetect=deconcept.util.getRequestParameter(this.DETECT_KEY);
	this.params=new Object();
	this.variables=new Object();
	this.attributes=new Array();
	if(_1){this.setAttribute("swf",_1);}
	if(id){this.setAttribute("id",id);}
	this.setAttribute("width",w)
	this.setAttribute("height",h)
	if(_5){this.setAttribute("version",new deconcept.PlayerVersion(_5.toString().split(".")));}
	this.installedVer=deconcept.SWFObjectUtil.getPlayerVersion();
	if(c){this.addParam("bgcolor",c);}
	var q=_8?_8:"high";
	this.addParam("quality",q);
	this.setAttribute("useExpressInstall",_7);
	this.setAttribute("doExpressInstall",false);
	var _d=(_9)?_9:window.location;
	this.setAttribute("xiRedirectUrl",_d);
	this.setAttribute("redirectUrl","");
	if(_a){this.setAttribute("redirectUrl",_a);}};
	deconcept.SWFObject.prototype={setAttribute:function(_e,_f){
	this.attributes[_e]=_f;
	},getAttribute:function(_10){
	return this.attributes[_10];
	},addParam:function(_11,_12){
	this.params[_11]=_12;
	},getParams:function(){
	return this.params;
	},addVariable:function(_13,_14){
	this.variables[_13]=_14;
	},getVariable:function(_15){
	return this.variables[_15];
	},getVariables:function(){
	return this.variables;
	},getVariablePairs:function(){
	var _16=new Array();
	var key;
	var _18=this.getVariables();
	for(key in _18){_16.push(key+"="+_18[key]);}
	return _16;},getSWFHTML:function(){var _19="";
	if(navigator.plugins&&navigator.mimeTypes&&navigator.mimeTypes.length){
	if(this.getAttribute("doExpressInstall")){
	this.addVariable("MMplayerType","PlugIn");}
	_19="<embed type=\"application/x-shockwave-flash\" src=\""+this.getAttribute("swf")+"\" width=\""+this.getAttribute("width")+"\" height=\""+this.getAttribute("height")+"\"";
	_19+=" id=\""+this.getAttribute("id")+"\" name=\""+this.getAttribute("id")+"\" ";
	var _1a=this.getParams();
	for(var key in _1a){_19+=[key]+"=\""+_1a[key]+"\" ";}
	var _1c=this.getVariablePairs().join("&");
	if(_1c.length>0){_19+="flashvars=\""+_1c+"\"";}_19+="/>";
	}else{if(this.getAttribute("doExpressInstall")){this.addVariable("MMplayerType","ActiveX");}
	_19="<object id=\""+this.getAttribute("id")+"\" classid=\"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000\" width=\""+this.getAttribute("width")+"\" height=\""+this.getAttribute("height")+"\">";
	_19+="<param name=\"movie\" value=\""+this.getAttribute("swf")+"\" />";
	var _1d=this.getParams();
	for(var key in _1d){_19+="<param name=\""+key+"\" value=\""+_1d[key]+"\" />";}
	var _1f=this.getVariablePairs().join("&");
	if(_1f.length>0){_19+="<param name=\"flashvars\" value=\""+_1f+"\" />";}_19+="</object>";}
	return _19;
	},write:function(_20){
	if(this.getAttribute("useExpressInstall")){
	var _21=new deconcept.PlayerVersion([6,0,65]);
	if(this.installedVer.versionIsValid(_21)&&!this.installedVer.versionIsValid(this.getAttribute("version"))){
	this.setAttribute("doExpressInstall",true);
	this.addVariable("MMredirectURL",escape(this.getAttribute("xiRedirectUrl")));
	document.title=document.title.slice(0,47)+" - Flash Player Installation";
	this.addVariable("MMdoctitle",document.title);}}
	if(this.skipDetect||this.getAttribute("doExpressInstall")||this.installedVer.versionIsValid(this.getAttribute("version"))){
	var n=(typeof _20=="string")?document.getElementById(_20):_20;
	n.innerHTML=this.getSWFHTML();return true;
	}else{if(this.getAttribute("redirectUrl")!=""){document.location.replace(this.getAttribute("redirectUrl"));}}
	return false;}};
	deconcept.SWFObjectUtil.getPlayerVersion=function(){
	var _23=new deconcept.PlayerVersion([0,0,0]);
	if(navigator.plugins&&navigator.mimeTypes.length){
	var x=navigator.plugins["Shockwave Flash"];
	if(x&&x.description){_23=new deconcept.PlayerVersion(x.description.replace(/([a-zA-Z]|\s)+/,"").replace(/(\s+r|\s+b[0-9]+)/,".").split("."));}
	}else{try{var axo=new ActiveXObject("ShockwaveFlash.ShockwaveFlash.7");}
	catch(e){try{var axo=new ActiveXObject("ShockwaveFlash.ShockwaveFlash.6");
	_23=new deconcept.PlayerVersion([6,0,21]);axo.AllowScriptAccess="always";}
	catch(e){if(_23.major==6){return _23;}}try{axo=new ActiveXObject("ShockwaveFlash.ShockwaveFlash");}
	catch(e){}}if(axo!=null){_23=new deconcept.PlayerVersion(axo.GetVariable("$version").split(" ")[1].split(","));}}
	return _23;};
	deconcept.PlayerVersion=function(_27){
	this.major=_27[0]!=null?parseInt(_27[0]):0;
	this.minor=_27[1]!=null?parseInt(_27[1]):0;
	this.rev=_27[2]!=null?parseInt(_27[2]):0;
	};
	deconcept.PlayerVersion.prototype.versionIsValid=function(fv){
	if(this.major<fv.major){return false;}
	if(this.major>fv.major){return true;}
	if(this.minor<fv.minor){return false;}
	if(this.minor>fv.minor){return true;}
	if(this.rev<fv.rev){
	return false;
	}return true;};
	deconcept.util={getRequestParameter:function(_29){
	var q=document.location.search||document.location.hash;
	if(q){var _2b=q.substring(1).split("&");
	for(var i=0;i<_2b.length;i++){
	if(_2b[i].substring(0,_2b[i].indexOf("="))==_29){
	return _2b[i].substring((_2b[i].indexOf("=")+1));}}}
	return "";}};
	deconcept.SWFObjectUtil.cleanupSWFs=function(){if(window.opera||!document.all){return;}
	var _2d=document.getElementsByTagName("OBJECT");
	for(var i=0;i<_2d.length;i++){_2d[i].style.display="none";for(var x in _2d[i]){
	if(typeof _2d[i][x]=="function"){_2d[i][x]=function(){};}}}};
	deconcept.SWFObjectUtil.prepUnload=function(){__flash_unloadHandler=function(){};
	__flash_savedUnloadHandler=function(){};
	if(typeof window.onunload=="function"){
	var _30=window.onunload;
	window.onunload=function(){
	deconcept.SWFObjectUtil.cleanupSWFs();_30();};
	}else{window.onunload=deconcept.SWFObjectUtil.cleanupSWFs;}};
	if(typeof window.onbeforeunload=="function"){
	var oldBeforeUnload=window.onbeforeunload;
	window.onbeforeunload=function(){
	deconcept.SWFObjectUtil.prepUnload();
	//oldBeforeUnload();
	};
	}else{window.onbeforeunload=deconcept.SWFObjectUtil.prepUnload;}
	if(Array.prototype.push==null){
	Array.prototype.push=function(_31){
	this[this.length]=_31;
	return this.length;};}
	var getQueryParamValue=deconcept.util.getRequestParameter;
	var FlashObject=deconcept.SWFObject;
	var SWFObject=deconcept.SWFObject;



var SMGPlayerScriptLoaded = true;
if(typeof smg_callback_expected != "undefined")
{
	if(typeof smg_onload_callback != "undefined")
		smg_onload_callback('player');
}
