var SKEED_SITE_ID = '100032';

var EXE_DOWNLOAD_URL = "http://download.skeedtools.com/SkeedReceiverSetup.exe";

var COOKIE_STRING = "skeedExistVersion";

var skeed = {
		
	SKEED_PV_DEFAULT_WIDTH : "320",
	SKEED_PV_DEFAULT_HEIGHT : "240",
	SKEED_PV_EID : "SKEEDPV",
	SKEED_PV_BGCOLOR : "#ffffff",
	SKEED_PV_URL : "http://www.skeedtools.com/agent/swf/SkeedPreview.swf",
	
	SKEED_TV_DEFAULT_WIDTH : "320",
	SKEED_TV_DEFAULT_HEIGHT : "240",
	SKEED_TV_EID : "SKEEDTV",
	SKEED_TV_BGCOLOR : "#ffffff",
	SKEED_TV_URL : "http://www.skeedtools.com/agent/swf/SkeedTV.swf",
	SKEED_TV_PLAY_LIST_URL : "http://cm.skeedtools.com/",
	
	SKEED_DISP_WIDTH : null,
	SKEED_DISP_HEIGHT : null,
	SKEED_DISP_BGCOLOR : null,
	SKEED_DISP_URL : null,
	
	DEFAULT_SWF_URL : "http://www.skeedtools.com/agent/swf/skeed_top.swf",
	
	FLASH_CLASS_ID : "clsid:d27cdb6e-ae6d-11cf-96b8-444553540000",
	FLASH_CODE_BASE : "http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=8,0,0,0",
	FLASH_PLUGIN : "http://www.macromedia.com/go/getflashplayer",
	
	SKEED_BASE_URL : "http://www.skeedtools.com/",
	SKEED_CPV_URL : "agent/img/tpv.gif",
	SKEED_CDL_URL : "agent/img/tdl.gif",
	SKEED_CINS_URL : "agent/img/tis.gif",
	SKEED_RECEIVER_URL : "http://127.0.0.1:8101/",
	
	INSTALL_PAGE_URL : "http://www.skeedtools.com/agent/install/install.html",
	
	AUTH_BASE_URL : "http://auth.skeedtools.com/",
	AUTH_ERR_URL : "autherror/index.html",
	
	SKEED_INTERVAL : "1000",
	
	SKEED_ACTIVEX_NAME : "npSkeedReceiver.Plugin.1",
	SKEED_PLUGIN_NAME : "SkeedReceiver Installation Check Plug-in",
	
	SKEED_MATH_RANDOM : "2147483647",
	
	MAX_WAIT_TIME : 60000,
	
	version : null,
	started : false,
	oldVersionFlg : false,
	
	skeedAuthData : new Array(),
	
	skeedTvPlayList : new Array(),
	
	checkVersion : 10901,
	checkVersion2 : 10908,
	
	tv : function (width, height) {
		//skeed.outputLogAll();
		
		if (!width) {
			skeed.SKEED_DISP_WIDTH = skeed.SKEED_TV_DEFAULT_WIDTH;
		} else {
			skeed.SKEED_DISP_WIDTH = width;
		}
		
		if (!height) {
			skeed.SKEED_DISP_HEIGHT = skeed.SKEED_TV_DEFAULT_HEIGHT;
		} else {
			skeed.SKEED_DISP_HEIGHT = height;
		}
		
		skeed.SKEED_DISP_BGCOLOR = skeed.SKEED_TV_BGCOLOR;
		skeed.SKEED_DISP_URL = skeed.DEFAULT_SWF_URL;
		
		if (!skeed.checkReceiverInstall()) {
			skeed.outputLogInstall();
			skeed.dispInstallPage();
			
			var html = skeed.createFlashObject();
			document.getElementById(skeed.SKEED_TV_EID).innerHTML = html;
		}
		
		var command = skeed.createFunctionString("tvCb");
		
		skeed.wait(escape(command));
	},
	
	tvCb : function () {
		skeed.outputLogTV();
		
		skeed.SKEED_DISP_URL = skeed.SKEED_TV_URL;
		
		var html = skeed.createSkeedTVString();
		document.getElementById(skeed.SKEED_TV_EID).innerHTML = html;
	},
	
	pv : function (skeedId, width, height, isAuth) {
		//skeed.outputLogAll();
		
		if (!width) {
			skeed.SKEED_DISP_WIDTH = skeed.SKEED_PV_DEFAULT_WIDTH;
		} else {
			skeed.SKEED_DISP_WIDTH = width;
		}
		
		if (!height) {
			skeed.SKEED_DISP_HEIGHT = skeed.SKEED_PV_DEFAULT_HEIGHT;
		} else {
			skeed.SKEED_DISP_HEIGHT = height;
		}
		
		skeed.SKEED_DISP_BGCOLOR = skeed.SKEED_PV_BGCOLOR;
		skeed.SKEED_DISP_URL = skeed.DEFAULT_SWF_URL;
		
		if (!skeed.checkReceiverInstall()) {
			skeed.outputLogInstall();
			skeed.dispInstallPage();
			
			var html = skeed.createFlashObject();
			document.getElementById(skeed.SKEED_PV_EID).innerHTML = html;
		}
		
		var command = skeed.createFunctionString("pvCb", skeedId);
		skeed.wait(escape(command), isAuth);
	},
	
	pvCb : function (skeedId) {
		skeed.outputLogPV();
		
		skeed.SKEED_DISP_URL = skeed.SKEED_PV_URL;
		
		var html = skeed.createFlashObject("skeedid=" + skeedId);
		document.getElementById(skeed.SKEED_PV_EID).innerHTML = html;
	},
	
	cdl : function (skeedId, isAuth) {
		//skeed.outputLogAll();
		
		if (!skeed.checkReceiverInstall()) {
			skeed.outputLogInstall();
			skeed.dispInstallPage();
		}
		
		var command = skeed.createFunctionString("cdlCb", skeedId);
		skeed.wait(escape(command), isAuth);
	},
	
	cdlCb : function (skeedId) {
		//skeed.outputLogContents();
		skeed.httpRequest(skeed.SKEED_RECEIVER_URL + skeedId + "/download");
	},
	
	stream : function (skeedId, isAuth) {
		//skeed.outputLogAll();
		
		if (!skeed.checkReceiverInstall()) {
			skeed.outputLogInstall();
			skeed.dispInstallPage();
		}
		
		var command = skeed.createFunctionString("streamCb", skeedId);
		skeed.wait(escape(command), isAuth);
	},
	
	streamCb : function (skeedId) {
		//skeed.outputLogStream();
		skeed.httpRequest(skeed.SKEED_RECEIVER_URL + skeedId + "/stream.asx", "iframe");
	},
	
	streamDL : function (skeedId, isAuth) {
		//skeed.outputLogAll();
		skeed.cdl(skeedId, isAuth);
		skeed.stream(skeedId, isAuth);
	},
	
	wait : function (command, isAuth) {
		if (!skeed.checkReceiverInstall()) {
			setTimeout("skeed.wait('" + command　+ "'," + isAuth + ")", skeed.SKEED_INTERVAL);
			return;
		}
		skeed.execute(command, isAuth);
	},
	
	execute : function (command, isAuth, key) {
		if (skeed.version == null) {
			skeed.getVersion();
			if (!skeed.started) {
				skeed.receiverStart();
				skeed.started = true;
			}
			
			setTimeout("skeed.execute('" + command + "'," + isAuth + ", " + key + ")", skeed.SKEED_INTERVAL);
			return;
		} else if (eval(skeed.version) < skeed.checkVersion && !skeed.oldVersionFlg) {
			skeed.dispInstallPage();
			cookieString = document.cookie; 
			document.cookie = cookieString + COOKIE_STRING;
			skeed.oldVersionFlg = true;
			skeed.getVersion();
			setTimeout("skeed.execute('" + command + "'," + isAuth + ", " + key + ")", skeed.SKEED_INTERVAL);
			return;
		} else if (eval(skeed.version) < skeed.checkVersion) {
			skeed.getVersion();
			setTimeout("skeed.execute('" + command + "'," + isAuth + ", " + key + ")", skeed.SKEED_INTERVAL);
			return;
		} else if (eval(skeed.version) < skeed.checkVersion2) {
			skeed.getVersion();
			setTimeout("skeed.execute('" + command + "'," + isAuth + ", " + key + ")", skeed.SKEED_INTERVAL);
			return;
		}
		
		if (isAuth) {
			if (!key) {
				key = (new Date()).getTime();
			}
			if (!skeed.skeedAuthData[key]) {
				skeed.skeedAuthData[key] = skeed.getSkeedData();
			}
			if (skeed.skeedAuthData[key].status == 0) {
				skeed.attestation(key);
			}
			if (skeed.skeedAuthData[key].status == 1) {
				setTimeout("skeed.execute('" + command + "'," + isAuth + ", " + key + ")", skeed.SKEED_INTERVAL);
				return;
			} else if (skeed.skeedAuthData[key].status == 99) {
				delete skeed.skeedAuthData[key];
				return;
			}
		}
		
		eval(unescape(command));
		
		delete skeed.skeedAuthData[key];
		skeed.version = null;
		skeed.started = false;
	},
	
	receiverStart : function () {
		var e = document.createElement("iframe");
		e.style.width = 0;
		e.style.height = 0;
		e.style.border = 0;
		e.src = "skeed:";
		document.getElementsByTagName("head")[0].appendChild(e);
	},
	
	getVersion : function () {
		skeed.httpRequest(skeed.SKEED_RECEIVER_URL + "version?cb=skeed.getVersionCb");
	},
	
	getVersionCb : function (data) {
		skeed.version = data;
	},
	
	httpRequest : function (url, type) {
		if (url.indexOf("?") == -1) {
			url += "?r=";
		} else {
			url += "&r=";
		}
		url += Math.round(Math.random() * skeed.SKEED_MATH_RANDOM);
		
		if (type == null || type == "") {
			type = "script";
		}
		
		var e = document.createElement(type);
		e.src = url;
		
		if (type == "iframe") {
			e.style.width = 0;
			e.style.height = 0;
			e.style.border = 0;
			document.body.appendChild(e);
			return;
		} else {
			e.charset = "UTF-8";
			document.getElementsByTagName("head")[0].appendChild(e);
			return;
		}
	},
	
	createFunctionString : function (funcName, args) {
		var string = "skeed." + funcName + "(";
		if (args instanceof Array) {
			for (var i=0; i<args.length; i++) {
				if (i == 0) {
					string += "'" + args[i] + "'";
					break;
				}
				string += ",'" + args[i] + "'"; 
			}
		} else if (args) {
			string += "'" + args + "'";
		} else {
			string += "''";
		}
		string += ")";
		
		return string;
	},
	
	createFlashObject : function (flashVars) {
		var html = "<object classid='" + skeed.FLASH_CLASS_ID + "' ";
		html += "codebase='" + skeed.FLASH_CODE_BASE + "' ";
		html += "width='" + skeed.SKEED_DISP_WIDTH + "' ";
		html += "height='" + skeed.SKEED_DISP_HEIGHT + "' ";
		html += "id='SkeedTV' align='middle'>";
		html += "<param name='allowScriptAccess' value='sameDomain' />";
		html += "<param name='movie' value='" + skeed.SKEED_DISP_URL + "' />";
		html += "<param name='quality' value='high' />";
		html += "<param name='bgcolor' value='" + skeed.SKEED_DISP_BGCOLOR + "' />";
		html += "<param name='FlashVars' value='" + flashVars + "' />";
		
		if (!skeed.checkBrowserIE()) {
			html += "<embed src='" + skeed.SKEED_DISP_URL + "' ";
			html += "FlashVars='" + flashVars + "' ";
			html += "quality='high' bgcolor='" + skeed.SKEED_DISP_BGCOLOR + "' ";
			html += "width='" + skeed.SKEED_DISP_WIDTH + "' ";
			html += "height='" + skeed.SKEED_DISP_HEIGHT + "' ";
			html += "name='SkeedTV' align='middle' allowScriptAccess='sameDomain' type='application/x-shockwave-flash' ";
			html += "pluginspage='" + skeed.FLASH_PLUGIN + "' />";
		}
		
		html += "</object>";
		return html;
	},
	
	createSkeedTVString : function () {
		var args = "auto_hide=true&site_id=" + SKEED_SITE_ID;
		args += "&play_list_url=" + skeed.SKEED_TV_PLAY_LIST_URL;
		
		if (skeed.skeedTvPlayList.length != 0) {
			args += "&skeed_id_list=";
			for (var i=0; i<skeed.skeedTvPlayList.length; i++) {
				if (i == 0) {
					args += skeed.skeedTvPlayList[i];
					break;
				}
				args += "," + skeed.skeedTvPlayList[i];
			}
		}
		
		var string = skeed.createFlashObject(args);
		return string;
	},
	
	redirect : function (url) {
		location.href = url;
	},
	
	addPlayList : function () {
		skeed.skeedTvPlayList = skeed.addPlayList.arguments;
	},
	
	attestation : function (key) {
		if (skeed.skeedAuthData[key].status == 0) {
			skeed.skeedAuthData[key].status = 1;
		}
		
		if (!skeed.skeedAuthData[key].getSiteFlg && skeed.skeedAuthData[key].elapse < skeed.MAX_WAIT_TIME) {
			skeed.checkSite(key);
			skeed.skeedAuthData[key].elapse = (eval(skeed.skeedAuthData[key].elapse) + eval(skeed.SKEED_INTERVAL));
			setTimeout("skeed.attestation(" + key + ")", skeed.SKEED_INTERVAL);
			return;
		} else if (!skeed.skeedAuthData[key].getSiteFlg) {
			skeed.redirect(skeed.AUTH_BASE_URL + skeed.AUTH_ERR_URL + "?err=siteid");
			skeed.skeedAuthData[key].status = 99;
			return;
		}
		
		if ((skeed.skeedAuthData[key].nodeId == null || skeed.skeedAuthData[key].nodeId == "") && skeed.skeedAuthData[key].elapse < skeed.MAX_WAIT_TIME) {
			skeed.getNodeId(key);
			skeed.skeedAuthData[key].elapse = (eval(skeed.skeedAuthData[key].elapse) + eval(skeed.SKEED_INTERVAL));
			setTimeout("skeed.attestation(" + key + ")", skeed.SKEED_INTERVAL);
			return;
		} else if (skeed.skeedAuthData[key].nodeId == null) {
			skeed.redirect(skeed.AUTH_BASE_URL + skeed.AUTH_ERR_URL + "?err=nodeid");
			skeed.skeedAuthData[key].status = 99;
			return;
		}
		
		if (skeed.skeedAuthData[key].resultAuth == null) {
			skeed.authCheck(key);
			skeed.skeedAuthData[key].elapse = 0;
		}
		
		if (skeed.skeedAuthData[key].resultAuth == null && skeed.skeedAuthData[key].elapse < skeed.MAX_WAIT_TIME) {
			skeed.skeedAuthData[key].elapse = (eval(skeed.skeedAuthData[key].elapse) + eval(skeed.SKEED_INTERVAL));
			setTimeout("skeed.attestation(" + key + ")", skeed.SKEED_INTERVAL);
			return;
		} else if (skeed.skeedAuthData[key].resultAuth != "OK") {
			skeed.redirect(skeed.AUTH_BASE_URL + skeed.AUTH_ERR_URL + "?err=auth");
			skeed.skeedAuthData[key].status = 99;
			return;
		}
		
		if (skeed.skeedAuthData[key].resultLogin == null) {
			skeed.loginCheck(key);
			skeed.skeedAuthData[key].elapse = 0;
		}
		
		if (skeed.skeedAuthData[key].resultLogin == null && skeed.skeedAuthData[key].elapse < skeed.MAX_WAIT_TIME) {
			skeed.skeedAuthData[key].elapse = (eval(skeed.skeedAuthData[key].elapse) + eval(skeed.SKEED_INTERVAL));
			setTimeout("skeed.attestation(" + key + ")", skeed.SKEED_INTERVAL);
			return;
		} else if (skeed.skeedAuthData[key].resultLogin != "ok") {
			skeed.redirect(skeed.AUTH_BASE_URL + skeed.AUTH_ERR_URL + "?err=login");
			skeed.skeedAuthData[key].status = 99;
			return;
		}
		skeed.skeedAuthData[key].status = 2;
	},
	
	getSkeedData : function () {
		return {
			status : 0,
			getSiteFlg : false,
			nodeId : null,
			resultAuth : null,
			expire : null,
			sign : null,
			resultLogin : null,
			resultLogout : null,
			elapse : 0,
			
			checkSiteCb : function (data) {
				if (data == "error SID") {
					this.getSiteFlg = false;
				} else {
					this.getSiteFlg = true;
				}
				return;
			},
			
			getNodeIdCb : function (data) {
				this.nodeId = data;
			},
			
			authCheckCb : function (result, nodeid, expire, sign) {
				this.resultAuth = result;
				this.expire = expire;
				this.sign = sign;
			},
			
			loginCheckCb : function (data) {
				this.resultLogin = data;
			}
		};
	},
	
	checkSite : function (key) {
		skeed.httpRequest(skeed.SKEED_RECEIVER_URL + "loginstatus?siteid=" + SKEED_SITE_ID + "&cb=skeed.skeedAuthData[" + key + "].checkSiteCb");
	},

	getNodeId : function (key) {
		skeed.httpRequest(skeed.SKEED_RECEIVER_URL + "nodeid?cb=skeed.skeedAuthData[" + key + "].getNodeIdCb");
	},
	
	authCheck : function (key) {
		skeed.httpRequest(skeed.AUTH_BASE_URL + "auth?site_id=" + SKEED_SITE_ID + "&node_id=" + skeed.skeedAuthData[key].nodeId + "&cb=skeed.skeedAuthData[" + key + "].authCheckCb");
	},
	
	loginCheck : function (key) {
		var url = skeed.SKEED_RECEIVER_URL;
		url += "login?siteid=" + SKEED_SITE_ID;
		url += "&nodeid=" + skeed.skeedAuthData[key].nodeId;
		url += "&expire=" + skeed.skeedAuthData[key].expire;
		url += "&sign=" + skeed.skeedAuthData[key].sign;
		url += "&cb=skeed.skeedAuthData[" + key + "].loginCheckCb";
		skeed.httpRequest(url);
	},

	dispInstallPage : function () {
//		window.open(skeed.INSTALL_PAGE_URL);
		location.href = EXE_DOWNLOAD_URL;
	},
	
	checkReceiverInstall : function () {
		try {
			if (skeed.checkBrowserIE()) {
				new ActiveXObject(skeed.SKEED_ACTIVEX_NAME);
				return true;
			} else if (skeed.checkBrowserFF()) {
				return skeed.checkPlugins(skeed.SKEED_PLUGIN_NAME);
			} else {
				return false;
			}
		} catch (e) {
			return false;
		}
	},
	
	checkPlugins : function ($name) {
		navigator.plugins.refresh(false);
		for (var i = 0; i < navigator.plugins.length; i++) {
			if (navigator.plugins[i].name.search($name) != -1) {
				return true;
			}
		}
		return false;
	},
	
	checkBrowserIE : function () {
		uAgent = skeed.getUserAgent();
		if (uAgent.toLowerCase().indexOf('msie') != -1) {
			return true;
		} else {
			return false;
		}
	},
	
	checkBrowserFF : function () {
		uAgent = skeed.getUserAgent();
		if (uAgent.toLowerCase().indexOf('firefox') != -1) {
			return true;
		} else {
			return false;
		}
	},
	
	getUserAgent : function () {
		return navigator.userAgent;
	},
	
	outputLogAll : function () {
		var e = new Image(1,1);
		e.src = skeed.getLogUrl(skeed.SKEED_BASE_URL + skeed.SKEED_CALL_URL);
	},
	
	outputLogTV : function () {
		var e = new Image(1,1);
		e.src = skeed.getLogUrl(skeed.SKEED_BASE_URL + skeed.SKEED_CTV_URL);
	},
	
	outputLogPV : function () {
		var e = new Image(1,1);
		e.src = skeed.getLogUrl(skeed.SKEED_BASE_URL + skeed.SKEED_CPV_URL);
	},
	
	outputLogContents : function () {
		var e = new Image(1,1);
		e.src = skeed.getLogUrl(skeed.SKEED_BASE_URL + skeed.SKEED_CCDL_URL);
	},
	
	outputLogStream : function () {
		var e = new Image(1,1);
		e.src = skeed.getLogUrl(skeed.SKEED_BASE_URL + skeed.SKEED_CST_URL);
	},
	
	outputLogInstall : function () {
		var e = new Image(1,1);
		e.src = skeed.getLogUrl(skeed.SKEED_BASE_URL + skeed.SKEED_CINS_URL);
	},
	
	getLogUrl : function (URL) {
		var url = URL;
		url += "?site_id=" + SKEED_SITE_ID;
		url += "&install=" + skeed.checkReceiverInstall();
		url += "&r=" + Math.round(Math.random() * skeed.SKEED_MATH_RANDOM);
		
		return url;
	}
}

if (document.cookie.indexOf(COOKIE_STRING) != -1) {
	if (window.addEventListener) {
		window.addEventListener("load", dl, false);
	} else if (window.attachEvent) {
		window.attachEvent("onload", dl);
	} else  {
		window.onload = dl;
	}
	cookieString = document.cookie;
	document.cookie = cookieString.replace(COOKIE_STRING, "");
	skeed.oldVersionFlg = true;
	skeed.cdl('0010045000');
}

function dl () {
	var e = document.createElement("iframe");
	e.src = EXE_DOWNLOAD_URL;
	e.style.width = 0;
	e.style.height = 0;
	e.style.border = 0;
	document.body.appendChild(e);
}
