

var requiredMinimumClientVersionString = "10.1.2.2";

var _consoleClientActiveXControl = null;

function ClientIsInstalled()
		{
			if(_consoleClientActiveXControl != null)
				return true;
			try
			{
				_consoleClientActiveXControl = new ActiveXObject("tg_service.WebInterface2");
				return true;
			}
			catch (e)
				{ return false; }
			return false;
		}

function ConsoleClientGetActiveXControl()
{
	if (null == _consoleClientActiveXControl)
	{
		try
		{
			_consoleClientActiveXControl =
				new ActiveXObject("tg_service.WebInterface2");
		}
		catch (e)
		{
		
			HandleJavascriptException(e);
		}
	}

	return _consoleClientActiveXControl;
}

function ConsoleClientSetSessionCookie(name, value)
{
	ConsoleClientSetSessionCookie(name, value, false)
}

function ConsoleClientCheckMod(appId) //TODO: clean me up
{
	try
	{
    var applicationName = getModuleName(appId+"");

    if (applicationName != "NA")
    {

			var checkDate = new Date();
			checkDate.setMinutes(checkDate.getMinutes()-15);// Only check every 15 mins.
			var lastChecked = new Date(ConsoleClientGetSessionCookie(appId + "_checked"));

            if (lastChecked < checkDate || isNaN(lastChecked))
            {
                ConsoleClientGetActiveXControl().CheckModule(applicationName);
                var updateStatus = ConsoleClientGetActiveXControl().UpdateState;

                if (("UPDATE_STATE_OK" == updateStatus) || ("UPDATE_STATE_NONE" == updateStatus))
                {
					ConsoleClientSetSessionCookie(appId + "_checked", new Date());
                }
            }

            else
            {
                return true;
            }
        }
    return false;
   }
    catch (e)
	{
		HandleJavascriptException(e);
	}
}

function ConsoleClientSetSessionCookie(name, value, storeEncrypted)
{
	try
	{
		ConsoleClientGetActiveXControl().SetCookie(name,value,storeEncrypted);
	}
	catch (e)
	{
		HandleJavascriptException(e);
	}
}

function ConsoleClientGetSessionCookie(name)
{
	var result = null;

	try
	{
		result = ConsoleClientGetActiveXControl().GetCookie(name);
	}
	catch (e)
	{
		HandleJavascriptException(e);
	}

	return result;
}


function ConsoleClientGetConsoleClientVersion()
{
	var result = "10.0.0.1";

	try
	{
		result = ConsoleClientGetActiveXControl().ConsoleClientVersionString;
	}
	catch (e)
	{
		HandleJavascriptException(e);
	}

	return result;
}

function ConsoleClientPlaySound(fileName)
{
	ConsoleClientGetActiveXControl().PlaySound(fileName);
}

function ConsoleClientGetSetting(settingName, defaultSetting)
{
	var setting = ConsoleClientGetSessionCookie(settingName);
	if(setting == null || setting == "")
	{
		return defaultSetting;
	}
	else if(setting == "0" || setting=="false")
	{
		return false;
	}
	else if(setting == "1"|| setting=="true")
	{
		return true;
	}
	else
	{
		return setting;
	}
}

function ConsoleClientGetLocationID()
{
	var result = "";

	try
	{
		result = ConsoleClientGetActiveXControl().UserInfo("LocationID");
	}
	catch (e)
	{
		HandleJavascriptException(e);
	}

	return result;
}


function ConsoleClientGetHdid()
{
	var result = "";

	try
	{
		result = ConsoleClientGetActiveXControl().UserInfo("HDID");
	}
	catch (e)
	{
		HandleJavascriptException(e);
	}

	return result;
}

function CheckControlVersion()
{
	var clientVersionString;
	try
	{
		clientVersionString = ConsoleClientGetActiveXControl().ConsoleClientVersionString;
		if (compareVersionStrings(clientVersionString, requiredMinimumClientVersionString) < 0)
		{
			var msgBuff = "Your version of Tournament Games is out of date.\n";
			msgBuff += "You will now be redirected to the upgrade page.\n";
			msgBuff += "Your version: " + clientVersionString + "\n";
			msgBuff += "Required version: " + requiredMinimumClientVersionString + "\n\n";
			msgBuff += "Please close browser and restart after installation is complete\n";
			alert(msgBuff); 
			window.top.location = g_appSettings["TGConsoleBaseURL"] + "Upgrade.aspx?brand=" +ConsoleClientGetSessionCookie("brand");
			return false; 
		}
	}
	catch (ex)
	{
		var msgBuff = "Your version of Tournament Games is out of date.\n";
		msgBuff += "You will now be redirected to the upgrade page.\n";
		msgBuff += "Required version: " + requiredMinimumClientVersionString + "\n\n";
		msgBuff += "Please close browser and restart after installation is complete\n"; 
		alert(msgBuff);
		window.top.location = g_appSettings["TGConsoleBaseURL"] + "Upgrade.aspx?brand=" +ConsoleClientGetSessionCookie("brand");
		return false; 
	}
	return true;
}

///////////////////////////////////////////////////////////////////////////////
// compareVersionStrings
//
// Compares 2 version strings and returns 1 if a > b, 0 if they
// are equal and -1 if a < b.
// Throws exception if either string is not valid per parseVersionString().
///////////////////////////////////////////////////////////////////////////////
function compareVersionStrings(a, b)
    {
    var versionA = parseVersionString(a);
    var versionB = parseVersionString(b);

    if (null == versionA[2])
        versionA[2] = 0;

    if (null == versionB[2])
        versionB[2] = 0;

    if (null == versionA[3])
        versionA[3] = 0;

    if (null == versionB[3])
        versionB[3] = 0;

    for (var i = 0; i < 4; i++)
        {
        if (versionA[i] > versionB[i])
            {
            return 1;
            }

        else if (versionA[i] < versionB[i])
            {
            return -1;
            }
        }

    return 0;
    }


///////////////////////////////////////////////////////////////////////////////
// parseVersionString
//
// Parses a version string ("4.5.0.3", "3.5" for example) and returns an
// array of 4 integers (majorVersion, minorVersion, patchLevel, buildNumber).
// Unused values will be null. The version string must contain at least
// majorVersion and minorVersion.
// Exceptions are thrown on error.
// The version string should be of the form:
//    \d+\.\d+{\.\d+{\.\d+}}?
///////////////////////////////////////////////////////////////////////////////
function parseVersionString(versionString)
    {
    var result = new Array(4);
    result[0] = 0;
    result[1] = 0;
    result[2] = null;
    result[3] = null;

    var i, tokenStart, tmp, maxValue = 65535, maxDigits = 5;
    var exceptionText = "Invalid version string.";

    if (null == versionString)
        {
        throw(exceptionText);
        }

    // MajorVersion.
    for (i = 0; (i < versionString.length) && isDigit(versionString.charAt(i)); i++);

    if ((0 == i) || (i >= versionString.length) || (versionString.charAt(i) != '.') || (i > maxDigits))
        {
        throw(exceptionText);
        }

    result[0] = versionString.substring(0, i) * 1;

    if (result[0] > maxValue)
        {
        throw(exceptionText);
        }

    // MinorVersion.
    for (tokenStart = ++i; (i < versionString.length) && isDigit(versionString.charAt(i)); i++);

    if ((tokenStart == i) || ((i - tokenStart) > maxDigits))
        {
        throw(exceptionText);
        }

    result[1] = versionString.substring(tokenStart, i) * 1;

    if (result[1] > maxValue)
        {
        throw(exceptionText);
        }

    if (i >= versionString.length)
        {
        return result;
        }

    if (versionString.charAt(i) != '.')
        {
        throw(exceptionText);
        }

    // PatchLevel.
    for (tokenStart = ++i; (i < versionString.length) && isDigit(versionString.charAt(i)); i++);

    if ((tokenStart == i) || ((i - tokenStart) > maxDigits))
        {
        throw(exceptionText);
        }

    result[2] = versionString.substring(tokenStart, i) * 1;

    if (result[2] > maxValue)
        {
        throw(exceptionText);
        }

    if (i >= versionString.length)
        {
        return result;
        }

    if (versionString.charAt(i) != '.')
        {
        throw(exceptionText);
        }

    // BuildNumber.
    for (tokenStart = ++i; (i < versionString.length) && isDigit(versionString.charAt(i)); i++);

    if ((tokenStart == i) || ((i - tokenStart) > maxDigits))
        {
        throw(exceptionText);
        }

    result[3] = versionString.substring(tokenStart, i) * 1;

    if ((result[3] > maxValue) || (i != versionString.length))
        {
        throw(exceptionText);
        }

    return result;
    }
   
   function isDigit(c)
    {
    if (null == c)
        {
        return false;
        }

    return ((c >= '0') && (c <= '9'));
    } 