var gAuthToken     = "omn-h | *.omn.org | urn:kid:omn:";
var gAuthSignature = "yQXM+oxHu1bA+OYor7cVaA0lPWIr2vYSsmReLJl3DJbpeB0WHeYTuhczrMIEONb1BKbpBPty2hD2EphWRNKEdcwzrV3NM4YyIdoLtWtzuzjC6Azp4lPQG9upn77MLEeY45xhUNmxH7C7RyZMEOczEoSTHBerTcT8SJF20oiSAgs=";
var gMoid;
var gTstyle = 'class=dialog,width=1034,height=740,position=1,resize=1,name=main,inprogress=1';
var gTemplate = 'cache:kdmx_mainFrame.html';

var urlInstallIndexPage = "http://kdx.omn.org/securedelivery/";
var defaultDMS = "dms-h.omn.org";
var defaultModel = "766f11b9-9c7f-b24e-1fb3-fc834e241d15";

var omn_msi_url = "http://kdx.omn.org/securedelivery/omn/omn.msi";

// DO NOT CHANGE THE SERVER NAME FOR OTHER CONFIGURATION
// IT WILL TAKE PLACE AUTOMATICALLY WITH THE HELP OF build.xml
var gServer = "http://guide-h.omn.org";

var debugMode = false;

var gServerPopupURL = gServer + "/clientsetup/";
var urlDrmChecker = gServer + "/guide/isdrm.jsp?session=none&preferences=0,1,2,3,4&";

//---------------------- companies ---------------------------------------//
var affiliateCompanies =
{
   KQED     : "http://guide-h.omn.org/clientsetup/kqed/settings.xml",
   WGBH     : "http://guide-h.omn.org/clientsetup/wgbh/settings.xml",
   WGBH2    : "http://guide-h.omn.org/clientsetup/wgbh2/settings.xml",
   CQUEST   : "http://guide-h.omn.org/clientsetup/cinequest/settings.xml" ,
   WNET     : "http://guide-h.omn.org/clientsetup/wnet/settings.xml"
   /*add new company here*/
};

var popupURLs =
{
	FREE_NOT_INSTALLED:     gServerPopupURL + "popups/popupA.html",
	PAY_NOT_INSTALLED:	    gServerPopupURL + "popups/popupB.html",
	INSTALL:			    gServerPopupURL + "popups/popupE.html",
	PAY:				    gServerPopupURL + "popups/popupC.html",
	MAC_DRM:			    gServerPopupURL + "popups/popupF.html?close",
	UNSUPPORTED_BROWSER:    gServerPopupURL + "popups/popupG.html?close",
	UNSUPPORTED_VERSION:    gServerPopupURL + "popups/popupH.html?close"
}

//---------------------- contstants --------------------------------------//

var TESTMODE_OMN = "omn";
var TESTMODE_DEMO = "demo";
var TESTMODE_STAGE = "omn_stage";

//-------------------------- gDMSMap --------------------------------------//

var gDMSMap =
{
//    omn         : "dms-h.omn.org",
    omn			: "web-h.omn.org",
    dev         : "web-dev.corp.kontiki.com",
    dl          : "web-dl.corp.kontiki.com",
    kontiki     : "web-g.kontiki.com",
    stage       : "web-stage.kontiki.com",
    winqa       : "web-wqa.kontiki.com",
    ey          : "web-ey.kontiki.com",
    verizontest : "sacs1lrcdd01.ITUTL1.ITCENT.EBIZ.VERIZON.COM"
};

//------------------------ variables --------------------------------------//

var isDrmContent = null;
var isPPVContent = null;
var function_OnPPVContent = null;
var affiliateCompany = null;

var installationMoid = null;
var installationCompany = null;
var installationMode = null;

var popupWindow = null;

//-----------------------installOmnClient----------------------------------//


function installOmnClient(moid,company,mode)
{
	if(navigator.plugins){
		navigator.plugins.refresh();
	}

	if(isPopup()){
		if(!isBrowserOK() || (!isWindowsOS() && !isSupportedMacOS())){
			closePopupWindow();
			return;
		}else{
			parseHtmlArguments();
			processInstallation();
		}
	}else{
		if(isWindowsOS()){
			showPopupWindow();
		}
		if(!isBrowserOK()){
			try{
				if(!isWindowsOS()){
					showPopupWindow();
				}
				popupWindow.location.href = popupURLs["UNSUPPORTED_BROWSER"];
				popupWindow.resizeTo(500, 500);
				popupWindow.focus();
			} catch(e) {
			}
			return;
		}else{
			installationMoid = moid;
			installationCompany = company == null? affiliateCompany : company;
			installationMode = mode;

			if(isMacPlatform() && isSafariBrowser() && getSafariVersion(navigator.appVersion) < 416) {
				processInstallation();
			} else {
				startDrmValidator();
			}
		}
	}
}

function processInstallation(isInstalled){
	if(isInstalled == undefined){
		if(isPopup()){
			checkClientInstallation(htmlArgs["moid"]);
		}else{
			checkClientInstallation();
		}
		return;
	}

	if(isPopup()){
		processInstallationStep2(isInstalled);
	}else{
		processInstallationStep1(isInstalled);
	}
}

//------------------------processInstallationStep1-----------------------------//

function processInstallationStep1(isInstalled) {
    var popupURL = false;

    if(isWindowsOS()){
        //--------------- Windows-specific part ----------------
        if(!isInstalled){
            if(isPPVContent){
                if(function_OnPPVContent) {
                    function_OnPPVContent();
                }
                popupURL = popupURLs["PAY_NOT_INSTALLED"];
            }else{
                popupURL = popupURLs["FREE_NOT_INSTALLED"];
            }
        }else{
            if(isPPVContent){
                if(function_OnPPVContent) {
                    function_OnPPVContent();
                }
                popupURL = popupURLs["PAY"];
            }
        }
    } else if(isSupportedMacOS()){
        //--------------- Mac-specific part --------------------
        if(!isInstalled){
            if(isPPVContent || isDrmContent){
                popupURL = popupURLs["MAC_DRM"];
            }else{
                popupURL = popupURLs["FREE_NOT_INSTALLED"];
            }
        } else {
            if(isPPVContent || isDrmContent){
                popupURL = popupURLs["MAC_DRM"];
            }
        }
    } else {
        // --------------- None of OS supported -----------------
        popupURL = popupURLs["UNSUPPORTED_VERSION"];
    }

    if(popupURL){
		if(!isWindowsOS()){
			showPopupWindow();
		}
		if(popupURL != popupURLs["UNSUPPORTED_VERSION"] && popupURL != popupURLs["MAC_DRM"] ){
			var company = installationCompany == null ? null : affiliateCompanies[installationCompany];

			var params = "";
			params += "&domain="+(getDms() == null ? defaultDMS : getDms());
			params += (installationMoid==null) ? "" : "&moid="+installationMoid;
			params += "&model="+defaultModel;
			if (debugMode){
			   params += "&alerts="+debugMode;
			}
			params += "&s=kdx";//support version 3.x
			params += (company == null)? "" : "&url="+encodeURI(company);
			params += "&ppv=" + isPPVContent;
			params += "&drm=" + isDrmContent;

			var url = installationMode == null ? "omn" : installationMode;
			url = "?installurl=" + urlInstallIndexPage + url;

			popupURL += url + params;
		}

        try{
            popupWindow.location.href = popupURL;
            popupWindow.resizeTo(500, 500);
            popupWindow.focus();
        } catch(e) {
        }
    } else {
		closePopupWindow();
		if(isIEBrowser()){
			try {
				var apiObj = new ActiveXObject("KDX.SecureApi");
				apiObj.authorize(gAuthToken, gAuthSignature);
				//alert("Load1 "+installationMoid);
				if (installationMoid != null && installationMoid.length > 2) {
					apiObj.load(installationMoid);
				}
				apiObj.launchTemplate(gTemplate, gTstyle, "", "main");
				apiObj.fireEvent("commandShowInProgress", null);
			} catch(e) {
				;
			}
		}else{
			checkClientInstallation(installationMoid ? installationMoid : "urn:");
		}
    }
}

//------------------------reportKhostInstalled2----------------------------//

function processInstallationStep2(isInstalled) {
    if(!isInstalled){
        if(isWindowsOS()){
            var node  = "&servleturl=" + htmlArgs["servleturl"];
            var node2  = "&installurl=" + encodeURIComponent(htmlArgs["installurl"] + "/omn.msi");

            var new_loc = omn_msi_url + "?domain=" + htmlArgs["netmanDomain"] +
                                        "&moid=" + htmlArgs["moid"] +
                                        "&model=" + htmlArgs["netmanMoid"] +
                                        "&alerts=" + htmlArgs["debug"] +
                                        "&url=" + htmlArgs["url"] +
                                        "&s=" + htmlArgs["sparam"] +
                          node + node2;
        } else if(isSupportedMacOS()){
            new_loc = htmlArgs["installurl"];
            sd = new_loc.indexOf("securedelivery/");
            sdl = "securedelivery/".length;
            if(sd) {
                new_loc = new_loc.substring(0, sd + sdl) + "mac/" +
                          new_loc.substring(sd + sdl) + "/omn.dmg";
            }
        }
/*
        var newFrame = document.createElement("iframe");
		newFrame.style.display = "none";
        document.body.appendChild(newFrame);
		newFrame.src = new_loc;
*/
		if(isSafariBrowser()) {
			//opener.setTimeout("closePopupWindow()", 10000);
		} else {
			window.setTimeout("closePopupWindow()", 10000);
		}
		window.location.href = new_loc;


    } else {
        if(isIEBrowser()) {
            try {
                var apiObj = new ActiveXObject("KDX.SecureApi");
                apiObj.authorize(gAuthToken, gAuthSignature);
				//alert("Load2 "+gMoid);
                if (gMoid != null && gMoid.length > 2) {
                    apiObj.load(gMoid);
                }
                apiObj.launchTemplate(gTemplate, gTstyle, "", "main");
                apiObj.fireEvent("commandShowInProgress", null);
            } catch(e) {
                ;
            }
        }
        setTimeout("closePopupWindow()", 1000);
    }

}

//------------------------closePopupWindow---------------------------------//
function closePopupWindow() {
	try{
		if(popupWindow) {
			popupWindow.close();
		} else if(window.name == "popup"){
			window.close();
		}
	}catch(e){
	}
}

//------------------------------getDms------------------------------------//

function getDms()
{
   var i_urn = (installationMoid==null) ? "" : installationMoid;
   var index1, index2, index3, tempString = "", domain = defaultDMS;
   if (i_urn.indexOf("urn") != -1)
   {
       index1 = (i_urn.indexOf(":") + 1);
       index2 = (i_urn.indexOf(":", index1) + 1);
       index3 = i_urn.indexOf(":", index2);
       tempString = i_urn.substring(index2, index3);
   }
    if(tempString != "") domain = gDMSMap[tempString];
    return domain;
}

//------------------------checkClientInstallation---------------------------------//

function checkClientInstallation(moid) {
    navigator.plugins.refresh(true);

    gMoid = moid;

    startLoadingMoidBase(moid);
}

function startLoadingMoidBase(moid) {
    gMoid = moid;

    var khostInstalled = false;

    if(isWindowsOS() && isIEBrowser()) {
        try {
            var apiObj = new ActiveXObject("KDX.SecureApi");
            apiObj.authorize(gAuthToken, gAuthSignature);
            khostInstalled = true;
        } catch(e) {
        }
    } else if(isBrowserOK()) {
		
		//alert("Load3 "+gMoid);
		
        var token = 'token="' + gAuthToken + '"';
        var signature = 'signature="' + gAuthSignature + '"';
		if(moid != undefined)
        	var moid = 'moid="' + gMoid + '"';
        var templatestyle = 'templatestyle="' + gTstyle + '"';
        var template = 'template="' + gTemplate + '"';

        var omnp = navigator.mimeTypes["application/omn-plugin"];
        if(omnp) {
            var eDiv = document.getElementById("divomnplugin");
            if(!eDiv) {
                eDiv = document.createElement("div");
                eDiv.id = "divomnplugin";
            }
            eDiv.innerHTML = '<embed id="omnplugin" type="application/omn-plugin" width=10 height=0 ' +
                             token + signature + moid + templatestyle + template + '></embed>';
            document.body.appendChild(eDiv);
			if (moid != undefined) return;
            checkLoadMoidStarted();
            return;
        }
    }
    processInstallation(khostInstalled);
}

function checkLoadMoidStarted() {
    var obj = document.getElementById("omnplugin");
    if(null == obj) {
        setTimeout("checkLoadMoidStarted()", 250);
        return;
    }
    khostInstalled = false;
    try {
        res = obj.isKHostInstalled();
        khostInstalled = res == 1 ? true : false;
    } catch (e) {
        khostInstalled = false;
    }

    var ediv = document.getElementById("divomnplugin");
    if(ediv) {
        ediv.removeChild(obj);
    }

    processInstallation(khostInstalled);
}

//-----------------------------startMacDrmValidator-----------------------------//

var drmValReq;
function startMacDrmValidator()
{
    if(installationMoid) {
		drmValReq = new XMLHttpRequest();
		drmValReq.open("GET", urlDrmChecker+"moid="+installationMoid);
		drmValReq.onreadystatechange = completeMacDrmValidator;
		drmValReq.send(null)
	} else completeDrmValidator();
}

//-----------------------------completeMacDrmValidator-----------------------------//

function completeMacDrmValidator(){
	if(drmValReq.readyState == 4){
		eval(drmValReq.responseText);
//		alert("is_drm: "+is_drm +" is_ppv "+ is_ppv);
	    isDrmContent = is_drm;
	    isPPVContent = is_ppv;
	    if (isMacPlatform() && isDrmContent && isPopup())
	        closePopupWindow();
	    else
	        processInstallation();
	}
}


//-----------------------------startDrmValidator-----------------------------//

var is_drm = null;

function startDrmValidator()
{
    is_drm = null;
    if(installationMoid) {
		var sct = document.createElement("script");
		sct.src = urlDrmChecker+"moid="+installationMoid;
		document.body.appendChild(sct);
		waitDrmValidatorLoaded();
	} else completeDrmValidator();
}

//---------------------------waitDrmValidatorLoaded-------------------------//

function waitDrmValidatorLoaded()
{
  if (is_drm != null)
        completeDrmValidator();
    else
        setTimeout("waitDrmValidatorLoaded()", 100);
}


//-------------------------completeDrmValidator----------------------------//

function completeDrmValidator()
{
//	alert("is_drm: "+is_drm +" is_ppv "+ is_ppv);
    isDrmContent = is_drm;
    isPPVContent = is_ppv;
    if (isMacPlatform() && isDrmContent && isPopup())
        closePopupWindow();
    else
        processInstallation();
}

//---------------------------isPlatformSupported-----------------------------//

var minSysReqIsMeet = -1;

function isPlatformSupported()
{
	if(minSysReqIsMeet == -1){

		var agt = window.navigator.userAgent.toLowerCase();
		var major = parseInt(navigator.appVersion);
		var platform = window.navigator.platform;

		var osIsOk = ((agt.indexOf("windows nt 5")!=-1) || (agt.indexOf("xp")!=-1)) && (platform == "Win32"); // Windows XP

		var isXPSP2 = agt.indexOf("sv1") != -1;

		var isIE = ((agt.indexOf("msie") != -1) && (agt.indexOf("opera") == -1));

		var IEversion = -1;

		if(agt.indexOf("msie ") != -1){
			IEversion = parseInt(agt.substr((agt.indexOf("msie ")+5), 1));
		}

		var isIE6 = (isIE && (major == 4) && (IEversion >= 6));
	    var isFirefox = agt.indexOf("firefox") >= 0;
	    var isSafari = agt.indexOf("safari") >= 0;

		minSysReqIsMeet = (osIsOk && ((isIE6 && isWMPOK()) || isFirefox)) || (isMacPlatform() && (isFirefox || isSafari));

		//minSysReqIsMeet = false;

		if(!minSysReqIsMeet){
			alert("Sorry, your computer does not meet OMN Requirements\nTo install OMN, your computer must meet the following system requirements:\nWindows XP, 2000\nInternet Explorer 5.5 or later\nWindows Media Player 9 or 10\n");
			try{
				if(popupWindow)
					popupWindow.close();
			}catch(e){
			}
		}
	}

	return minSysReqIsMeet;
}

function isWindowsOS(){
	var agt = window.navigator.userAgent.toLowerCase();
	var major = parseInt(navigator.appVersion);
	var platform = window.navigator.platform;

	var isWindows = ((agt.indexOf("windows nt 5")!=-1) || (agt.indexOf("xp")!=-1)) && (platform == "Win32"); // Windows XP

	return isWindows;
}

function isSupportedMacOS(){
	var agt = window.navigator.userAgent.toLowerCase();
	var isFirefox = agt.indexOf("firefox") >= 0;
	if(isMacPlatform() && (getSafariVersion(navigator.appVersion) >= 312 || isFirefox)){ // Safari's build 312 corresponds to Mac OS X 10.3.9 or higher
		return true;
	}else{
		return false;
	}
}

function isBrowserOK(){
	var agt = window.navigator.userAgent.toLowerCase();
	var major = parseInt(navigator.appVersion);
	var platform = window.navigator.platform;

	var isIE = ((agt.indexOf("msie") != -1) && (agt.indexOf("opera") == -1));
	var IEversion = -1;
	if(agt.indexOf("msie ") != -1){
		IEversion = parseInt(agt.substr((agt.indexOf("msie ")+5), 1));
	}

	var isIE6 = (isIE && (major == 4) && (IEversion >= 6));
	var isFirefox = agt.indexOf("firefox") >= 0;
	var isSafari = agt.indexOf("safari") >= 0;

	return isIE6 || isFirefox || isSafari;
}

function isWMPOK(){
	var playerIsOk = false;
	try{
		var mediaPlayer = new ActiveXObject("WMPlayer.OCX");
		var version = parseInt(mediaPlayer.versionInfo);

		if(version < 9)
			playerIsOk = false;
		else
			playerIsOk = true;

	}catch(e){};

	return playerIsOk;
}

////////////////////////////////////////////////////////////////////////////////
// FUNCTION: normalizeMoid(i_urn)
//
// DESCRIPTION: Converts string "i_urn" of urn syntax to a moid.
////////////////////////////////////////////////////////////////////////////////
function normalizeMoid(i_urn)
{
    var index = 0;
    var tempString;
    if (i_urn.indexOf("urn") != -1)
    {
        while(true)
        {
            index = i_urn.indexOf(":", index);
            if (index == -1 )
                break;

            index++;
            tempString = i_urn.substring(index, i_urn.length);
        }

        return tempString;
    }
    else
        return i_urn;
}

//------------------------setAffiliateCompany-----------------------------//

function setAffiliateCompany(company)
{
    affiliateCompany = company;
}

//--------------------encodeURI & uncodeURI-------------------------------//

function encodeURI(str)
{
    str = escape(str);
    str = str.replace(/x/g, "xx");
    str = str.replace(/%/g, "xy");
    str = str.replace(/\//g,"xz");
    return str;
}

function uncodeURI(str)
{
    str =str.replace(/xz/g,'/');
    str =str.replace(/xy/g,'%');
    str =str.replace(/xx/g,'x');
    str = unescape(str);
    return str;
}

//--------------------launchKDX & launchAKDX------------------------------//

function launchKDX(moid,company)
{
    installOmnClient(moid,company);
}

function launchAKDX(moid,mode)
{
    switch(mode)
    {
        case   2  : mode = "alpha_stage";break;
        case false: mode = "omn_stage"; break;
        case true:  mode = "demo"; break;
        case null:  mode = "omn";break;
    }
    installOmnClient(moid,null,mode);
}

//----------- launchKDX_CINEQUEST & launchKDX_WGBH -----------------------//

function launchKDX_CINEQUEST(moid)
{
    installOmnClient(moid,"CQUEST");
}

function launchKDX_WGBH(moid)
{
    installOmnClient(moid,"WGBH");
}

//-----------------------showPopupWindow-----------------------------------//

function isPopup(){
	return window.name == "popup";
}

function showPopupWindow()
{
    var x = 0, y = 0, width = 500, height = 500;
    if (screen){
        x = (screen.availWidth - width)/2;
        y = (screen.availHeight - height)/2;
    }
    var winAttributes = "width=" +width+ ",height=" +height
                   + ",screenX=" +x+ ",screenY=" +y+ ",top=" +y+ ",left=" +x
                   + "toolbar=no,location=no,directories=no,status=no,menubar=no,scrollbars=no,resizeable=no";
	try{
		if(!isPopup())
			popupWindow = window.open("about:blank","popup",winAttributes);
		else
			popupWindow = window;
	}catch(e){
		isPlatformSupported();
	}
}

//------------------------isMacPlatform------------------------------------//

function isMacPlatform()
{
//    return true;
    switch(window.navigator.platform)
    {
        case "MacPPC":
        case "Mac68k":
//        case "MacIntel":
            return true;
        default:
            return false;
    }
}

//------------------------isIEBrowser--------------------------------------//

function isIEBrowser(){

    var agt = window.navigator.userAgent.toLowerCase();
    var major = parseInt(navigator.appVersion);
    var platform = window.navigator.platform;

    var isIE = ((agt.indexOf("msie") != -1) && (agt.indexOf("opera") == -1));
    var IEversion = -1;
    if(agt.indexOf("msie ") != -1){
        IEversion = parseInt(agt.substr((agt.indexOf("msie ")+5), 1));
    }

    var isIE6 = (isIE && (major == 4) && (IEversion >= 6));

    return isIE6;
}

//------------------------isSafariBrowser----------------------------------//

function isSafariBrowser(){
    var agt = window.navigator.userAgent.toLowerCase();
    var isSafari = agt.indexOf("safari") >= 0;

    return isSafari;
}


//----------------------getSafariVersion-----------------------------------//

function getSafariVersion(version) {
	var version = version.toLowerCase();
	var search_str = "safari/";
	var start_pos = version.indexOf(search_str);

	if(start_pos >= 0) {
			start_pos += search_str.length;
	} else {
			return 0;
	}

	var len = version.length;
	var end_pos = start_pos;;
	for(var i=start_pos; i<len; i++, end_pos++) {
			var ch = version.charAt(i);

			if(ch < '0' || ch > '9') {
					break;
			}
	}

	var res = 0;
	try {
			res = parseInt(version.substring(start_pos, end_pos));;
	} catch (e) {
			res = 0;
	}

	return res;
}

//----------------parseHtmlArguments---------------------//
var htmlArgs;

function parseHtmlArguments()
{
    var search_str = document.location.search;
    var arg_string = (search_str.length>0) ? search_str.substring(1) : "";

    var args = new Object();
    var pairs = arg_string.split("&");

    for(var i = 0; i < pairs.length; i++) {
        var pos = pairs[i].indexOf('=');

        if (pos == -1) {
            continue;
        }

        var argname = pairs[i].substring(0,pos);
        var value = unescape( pairs[i].substring(pos+1) );

        args[argname] = value;
    }

    htmlArgs = new Object();

    htmlArgs["moid"]         = args["moid"] ? args["moid"] : "";
    htmlArgs["netmanDomain"] = args["domain"] ? args["domain"] : defaultDMS;
    htmlArgs["netmanMoid"]   = args["model"]  ? args["model"] : defaultModel;
    htmlArgs["debug"]        = (args["alerts"] && args["alerts"] == "true") ? true : false;
    htmlArgs["strAttr"]      = arg_string;
    htmlArgs["url"]          = args["url"] ? args["url"] :"";
    htmlArgs["installurl"]   = args["installurl"] ? args["installurl"] :"";
    htmlArgs["servleturl"]   = htmlArgs["installurl"] ? encodeURIComponent(htmlArgs["installurl"]+"/index.html") : "";
    htmlArgs["sparam"]       = args["s"] ? encodeURIComponent(args["s"]) : "";
    htmlArgs["ppv"]          = args["ppv"] ? args["ppv"] : "";
    htmlArgs["drm"]          = args["drm"] ? args["drm"] : "";

    cook();
}

//-----------------------cook------------------------//

function cook()
{
    if (window.navigator.cookieEnabled) {
        //TODO: save cookies
        for (tag in htmlArgs)  {
            if (htmlArgs[tag]) {
                if(tag != "ppv" && tag != "drm" && tag != "sparam") {
                    document.cookie = tag + "=" + htmlArgs[tag]+"; expires=Mon, 01-Jan-2106 00:00:00 GMT; domain=omn.org";
                }
            }
        }
    }
    else {
        var message = "Please, enabled cookies for full installation";
        alert(message);
    }
}