
buildDynamicXml = function(videoId, clientId, locationId){
	//console.log("videoId = " + videoId);
	//console.log("clientId = " + clientId);
	//	For Josh to edit
	//
	// return XML FILE	
	return "http://video.bettervideo.com/videos/player/2.00/xmlwriter.aspx?videoId_clientId_locationId="+videoId+"_"+clientId+"_"+locationId;
}

getSwfLocation = function(){
	//	For Josh to edit - could be simple return
	// 	NOTE: leave off the ".swf". Not sure why I did that.
	//
	return "http://vls2.bettervideo.com/videos/player/2.00/mds_player";
	//return "http://www.mikewilcox.net/MDS/mds_player";
}

getPrefsLocation = function(){
	//	For Josh to edit - could be simple return
	//  
	return "http://vls2.bettervideo.com/videos/player/2.00/xml/idearc/prefs.xml";
	//return "http://www.mikewilcox.net/MDS/xml/prefs.xml";
}

buildPlayer = function(){

	/*  EMBED PLAYER SCRIPT
	 * The player script can be placed anywhere in the page
	 * If the playerNode param is not passed, the player
	 * will be built in the same node as where the script
	 * is placed.
	 * 
	 * EXAMPLE:
	 * <script  
	 *		src="mds_player_include.js"
	 *		config="width=320,height=240,file=xml/playlist_01.xml, clientId:1234,id:5678" 
	 *		id="MDS">
	 * </script>
	 * 
	 * OPTIONS:
	 * 		src: 	The pointer to the player JavaScript file
	 * 		config:	The options with which to build the player
	 * 				width: 			player width
	 * 				height: 		player height
	 * 				playerNode: 	(optional) the node where the player should be placed
	 * 								defaults to the same node where the script is placed
	 * 				file: 			The pointer to an FLV video or an XML file
	 * 					[file] OR:
	 * 				clientid: 		A reference to the owner of the video
	 * 				id: 			A pointer to the video file in the databse
	 * 		id:MDS 	(required) A reference pointer to find this script
	 * 
	 */
	
	//
	// declare DEFAULT vars
	var playerId = "mds_player_node";
	var flashArgs = {
		 width: '640'
		,height: '480'
		,allowFullScreen: true
		,allowNetworking: "all" 		// Needs to be all, and needs a crossdoman.xml
		,allowScriptAccess: "always" 	// Needed for ExternalInterface
		,movie:getSwfLocation()
		,id:"playerId"
		,src:getSwfLocation()
	}
	var flashVars = {
		 prefsfile:getPrefsLocation()
		,file: null
		,playerNode: null
		,isInBrowser: true
		,clientId:null
		,id:null
		,locationId:null
		,phonenumber:null
		,embeddedcode:null
	}
	
	
	var snode;
	var playerdiv;
	//
	// find where this script is attached in the dom
	var scripts = document.getElementsByTagName("script");
	for (var i = 0; i < scripts.length; i++) {
		if (scripts[i].id && scripts[i].id == "MDS") {
			snode = scripts[i];
			break;
		}
	}
 
	//
	// stringify the script. This will be the "get code" used in the player
	var txt = "<script ";
	for (var i = 0; i < snode.attributes.length; i++) {
		var a = snode.attributes[i];
		if (a.specified)
			txt += a.nodeName + "='" + a.nodeValue + "' ";
	}
	txt += "></script>";
	flashVars.embeddedcode = txt;
	
	
	//////console.log("PLR EMBED CODE:", txt)
	//
	// Get the variables from the config attribute in the script
	var configStr = snode.getAttribute("config");
	var pairs = configStr.split(",");
	
	for (var i = 0; i < pairs.length; i++) {
	
		var p = pairs[i].split("=");
		
		if (flashVars[p[0]] !== undefined) {
			flashVars[p[0]] = p[1];
		}
		else {
			flashArgs[p[0]] = p[1];
			
		}
	}
	
	//
	// zCheck the Url for a hash (pound sign) and any possible vars.
	// Hash vars over-ride config vars.
	// looking for possible:
	//		width
	//		height
	//		file
	var hash = document.location.hash.toString();
	//console.log("josh"+document.location.toString());
	if (hash) {
		hash = hash.substring(1, hash.length);
		if (hash.indexOf("&size=") > 0) {
			sizeStr = hash.split("&size=")[1];
			flashArgs.width = sizeStr.split("x")[0];
			flashArgs.height = sizeStr.split("x")[1];
			
			hash = hash.split("&size=")[0];
		}
		if (hash.length && (hash.indexOf(".flv") > 0 || hash.indexOf(".xml") > 0)) {
			flashVars.file = hash;
		}
		
	}
	
	
	//
	// clean up flashvars object for preset nulls
	for (var nm in flashVars) {
		if (flashVars[nm] === null) {
			delete flashVars[nm];
		}
	}
	
	//
	// build our player node container
	if (flashVars.playerNode && document.getElementById(flashVars.playerNode)) {
		playerdiv = document.getElementById(flashVars.playerNode);
		playerId = flashVars.playerNode;
		passthrough("config node: ", flashVars.playerNode)
	}
	else {
		playerdiv = document.createElement("div");
		playerdiv.id = playerId;
		if (snode.parentNode.tagName.toLowerCase() != "head" && snode.parentNode.tagName.toLowerCase() != "html") {
			snode.parentNode.appendChild(playerdiv);
		}else{
			// the script was placed in the head or html - just stick it in the body
			document.body.appendChild(playerdiv);
		}
		passthrough("script sibling", playerId)
	}
	passthrough("DIV", playerdiv)
	playerdiv.style.width = flashArgs.width;
	playerdiv.style.height = flashArgs.height;
	playerdiv.style.border = "#666666 1px solid";
	
	flashVars.file=buildDynamicXml(flashVars.id,flashVars.clientId,flashVars.locationId);
	//console.log(flashVars.file); 
	if(!flashVars.file && flashVars.id){
	    //console.log("blah");
		flashVars.file = buildDynamicXml(flashVars.id, flashVars.clientid)
	}
	//
	// run the modified Adobe Flash embed code
	AC_FL_RunContent(flashArgs, flashVars, playerId);
}

//v1.7
// Flash Player Version Detection
// Detect Client Browser type
// Copyright 2005-2007 Adobe Systems Incorporated.  All rights reserved.
var isIE  = (navigator.appVersion.indexOf("MSIE") != -1) ? true : false;
var isWin = (navigator.appVersion.toLowerCase().indexOf("win") != -1) ? true : false;
var isOpera = (navigator.userAgent.indexOf("Opera") != -1) ? true : false;

function ControlVersion()
{
	var version;
	var axo;
	var e;

	// NOTE : new ActiveXObject(strFoo) throws an exception if strFoo isn't in the registry

	try {
		// version will be set for 7.X or greater players
		axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.7");
		version = axo.GetVariable("$version");
	} catch (e) {
	}

	if (!version)
	{
		try {
			// version will be set for 6.X players only
			axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.6");
			
			// installed player is some revision of 6.0
			// GetVariable("$version") crashes for versions 6.0.22 through 6.0.29,
			// so we have to be careful. 
			
			// default to the first public version
			version = "WIN 6,0,21,0";

			// throws if AllowScripAccess does not exist (introduced in 6.0r47)		
			axo.AllowScriptAccess = "always";

			// safe to call for 6.0r47 or greater
			version = axo.GetVariable("$version");

		} catch (e) {
		}
	}

	if (!version)
	{
		try {
			// version will be set for 4.X or 5.X player
			axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.3");
			version = axo.GetVariable("$version");
		} catch (e) {
		}
	}

	if (!version)
	{
		try {
			// version will be set for 3.X player
			axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.3");
			version = "WIN 3,0,18,0";
		} catch (e) {
		}
	}

	if (!version)
	{
		try {
			// version will be set for 2.X player
			axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash");
			version = "WIN 2,0,0,11";
		} catch (e) {
			version = -1;
		}
	}
	
	return version;
}

// JavaScript helper required to detect Flash Player PlugIn version information
function GetSwfVer(){
	// NS/Opera version >= 3 check for Flash plugin in plugin array
	var flashVer = -1;
	
	if (navigator.plugins != null && navigator.plugins.length > 0) {
		if (navigator.plugins["Shockwave Flash 2.0"] || navigator.plugins["Shockwave Flash"]) {
			var swVer2 = navigator.plugins["Shockwave Flash 2.0"] ? " 2.0" : "";
			var flashDescription = navigator.plugins["Shockwave Flash" + swVer2].description;
			var descArray = flashDescription.split(" ");
			var tempArrayMajor = descArray[2].split(".");			
			var versionMajor = tempArrayMajor[0];
			var versionMinor = tempArrayMajor[1];
			var versionRevision = descArray[3];
			if (versionRevision == "") {
				versionRevision = descArray[4];
			}
			if (versionRevision[0] == "d") {
				versionRevision = versionRevision.substring(1);
			} else if (versionRevision[0] == "r") {
				versionRevision = versionRevision.substring(1);
				if (versionRevision.indexOf("d") > 0) {
					versionRevision = versionRevision.substring(0, versionRevision.indexOf("d"));
				}
			}
			var flashVer = versionMajor + "." + versionMinor + "." + versionRevision;
		}
	}
	// MSN/WebTV 2.6 supports Flash 4
	else if (navigator.userAgent.toLowerCase().indexOf("webtv/2.6") != -1) flashVer = 4;
	// WebTV 2.5 supports Flash 3
	else if (navigator.userAgent.toLowerCase().indexOf("webtv/2.5") != -1) flashVer = 3;
	// older WebTV supports Flash 2
	else if (navigator.userAgent.toLowerCase().indexOf("webtv") != -1) flashVer = 2;
	else if ( isIE && isWin && !isOpera ) {
		flashVer = ControlVersion();
	}	
	return flashVer;
}

// When called with reqMajorVer, reqMinorVer, reqRevision returns true if that version or greater is available
function DetectFlashVer(reqMajorVer, reqMinorVer, reqRevision)
{
	versionStr = GetSwfVer();
	if (versionStr == -1 ) {
		return false;
	} else if (versionStr != 0) {
		if(isIE && isWin && !isOpera) {
			// Given "WIN 2,0,0,11"
			tempArray         = versionStr.split(" "); 	// ["WIN", "2,0,0,11"]
			tempString        = tempArray[1];			// "2,0,0,11"
			versionArray      = tempString.split(",");	// ['2', '0', '0', '11']
		} else {
			versionArray      = versionStr.split(".");
		}
		var versionMajor      = versionArray[0];
		var versionMinor      = versionArray[1];
		var versionRevision   = versionArray[2];

        	// is the major.revision >= requested major.revision AND the minor version >= requested minor
		if (versionMajor > parseFloat(reqMajorVer)) {
			return true;
		} else if (versionMajor == parseFloat(reqMajorVer)) {
			if (versionMinor > parseFloat(reqMinorVer))
				return true;
			else if (versionMinor == parseFloat(reqMinorVer)) {
				if (versionRevision >= parseFloat(reqRevision))
					return true;
			}
		}
		return false;
	}
}

function AC_AddExtension(src, ext)
{
  if (src.indexOf('?') != -1)
    return src.replace(/\?/, ext+'?'); 
  else
    return src + ext;
}

function AC_Generateobj(objAttrs, params, embedAttrs, nodeId) 
{ 
  var str = '';
  if (isIE && isWin && !isOpera)
  {
    str += '<object ';
    for (var i in objAttrs)
    {
      str += i + '="' + objAttrs[i] + '" ';
    }
    str += '>';
    for (var i in params)
    {
      str += '<param name="' + i + '" value="' + params[i] + '" /> ';
    }
    str += '</object>';
  }
  else
  {
    str += '<embed ';
    for (var i in embedAttrs)
    {
      str += i + '="' + embedAttrs[i] + '" ';
    }
    str += '> </embed>';
  }
	
	//document.write(str);
	//return;
	
	if(nodeId){
		document.getElementById(nodeId).innerHTML = str;	
	}else{
		var element = document.createElement("div");
		document.body.appendChild(element);
		element.innerHTML = str;
	}

}

function AC_FL_RunContent(flashArgs, flashVars, nodeId){
	var defaults = {
			codebase: 'http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=8,0,0,0',
			width: '480',
			height: '445',
			src: flashArgs.src,// || 'mds_player',
			quality: 'high',
			pluginspage: 'http://www.macromedia.com/go/getflashplayer',
			align: 'middle',
			play: 'true',
			loop: 'true',
			scale: 'noscale', //showall noborder exactfit noscale
			wmode: 'window',
			devicefont: 'false',
			id: 'mds_player',
			bgcolor: '#ffffff',
			name: 'mds_player',
			menu: 'true',
			allowFullScreen: 'false',
			allowScriptAccess:'sameDomain',
			movie: 'mds_player',
			salign: ''
		};
	
	
	for(var nm in flashArgs){
		defaults[nm] = flashArgs[nm];	
	}
	//console.dir(defaults)
	//console.dir(flashArgs)
	
	query = [];
	for(var nm in flashVars){
		query.push( nm+"="+flashVars[nm] );	
	}
	var ext = ".swf"
	if(query.length){
		ext+="?"+query.join("&");
	}
	
	var ret = 
		AC_GetArgs
		(  defaults, ext, "movie", "clsid:d27cdb6e-ae6d-11cf-96b8-444553540000"
		 , "application/x-shockwave-flash", flashVars.phonenumber
		);
	  AC_Generateobj(ret.objAttrs, ret.params, ret.embedAttrs, nodeId);
}


function AC_GetArgs(args, ext, srcParamName, classid, mimeType, phonenumber){
  var ret = new Object();
  ret.embedAttrs = new Object();
  ret.params = new Object();
  ret.objAttrs = new Object();
  
  for(var nm in args){
	var currArg = nm.toLowerCase();    
	var value = args[nm];
	
    switch (currArg){	
      case "classid":
        break;
      case "pluginspage":
        ret.embedAttrs[nm] = value;
        break;
      case "src":
      case "movie":	
        value = AC_AddExtension(value, ext);
        value = value + "&phoneNumber=" + phonenumber;
        // alert(value);
        ret.embedAttrs["src"] = value;
        ret.params[srcParamName] = value;
        break;
      case "onafterupdate":
      case "onbeforeupdate":
      case "onblur":
      case "oncellchange":
      case "onclick":
      case "ondblClick":
      case "ondrag":
      case "ondragend":
      case "ondragenter":
      case "ondragleave":
      case "ondragover":
      case "ondrop":
      case "onfinish":
      case "onfocus":
      case "onhelp":
      case "onmousedown":
      case "onmouseup":
      case "onmouseover":
      case "onmousemove":
      case "onmouseout":
      case "onkeypress":
      case "onkeydown":
      case "onkeyup":
      case "onload":
      case "onlosecapture":
      case "onpropertychange":
      case "onreadystatechange":
      case "onrowsdelete":
      case "onrowenter":
      case "onrowexit":
      case "onrowsinserted":
      case "onstart":
      case "onscroll":
      case "onbeforeeditfocus":
      case "onactivate":
      case "onbeforedeactivate":
      case "ondeactivate":
      case "type":
      case "codebase":
      case "id":
        ret.objAttrs[nm] = value;
        break;
      case "width":
      case "height":
      case "align":
      case "vspace": 
      case "hspace":
      case "class":
      case "title":
      case "accesskey":
      case "name":
      case "tabindex":
        ret.embedAttrs[nm] = ret.objAttrs[nm] = value;
        break;
      default:
        ret.embedAttrs[nm] = ret.params[nm] = value;
    }
  }
  ret.objAttrs["classid"] = classid;
  if (mimeType) ret.embedAttrs["type"] = mimeType;
  return ret;
}

//
// passthrough catches logs from the Flash player
//	and squelches them if there is no console
window.passthrough = function(){
	//passes messages from the Flash player to Firebug console
	if(window.console && window.console.dir){
		console.log.apply(console, arguments);	
		return "success";
	}
	return "disabled";
}
passthrough("flash passthrough ready");
//console.log("console ready.")

buildPlayer();
