﻿//http://passport.nexon.net/JS/lib.js
var NgbLogin = new function __NgbLogin() {
    this.isLoginProcessing = false;
    this.Login = function (id, pwd, redirect) {
        if (this.isLoginProcessing) {
            alert("Logging on ...");
            return false;
        }
        this.isLoginProcessing = true;
        id = NgbString.Trim(id);
        pwd = NgbString.Trim(pwd);
        if (id == '') {
            alert('Plz enter id.');
            this.isLoginProcessing = false;
        }
        else if (pwd == '') {
            alert('plz enter pwd.');
            this.isLoginProcessing = false;
        }
        else {
            NgbClientForm.AddChildForSubform('txtId', id);
            NgbClientForm.AddChildForSubform('txtPassword', pwd);

            if (typeof (redirect) == 'undefined')
                redirect = document.location.href;

            NgbClientForm.SubmitForm('http://passport.nexon.net/Login.aspx?returnUrl=' + escape(redirect));
        }
    };
    this.Logout = function (redirect) {
        if (typeof (redirect) == 'undefined')
            redirect = document.location.href;

        document.location.href = 'http://passport.nexon.net/Logout.aspx?returnUrl=' + escape(redirect);
    };
};
var NgbCookie = new function __NgbCookie() {
    this.GetCookie = function (nameVal) {
        var numCookie = document.cookie.length;
        var oven = document.cookie.split('; ');

        for (var i = 0; i < oven.length; i++) {
            if (oven[i].indexOf('=') != -1) {
                cookieName = oven[i].substring(0, oven[i].indexOf('='));
            } else {
                cookieName = oven[i];
            }

            if (cookieName == nameVal) {
                if (oven[i].indexOf('=') != -1) {
                    cookieVal = oven[i].substr(oven[i].indexOf('=') + 1);
                } else {
                    cookieVal = '';
                }
                return cookieVal;
            }
        }
        return '';
    };
    this.setCookie_Permanent = function (nameVal, value) {
        document.cookie = nameVal + "=" + escape(value) + ";expires=Thu, 30 Aug 2030 10:02:13 UTC; path=/; domain=nexon.net;";
    };
};
var NgbString = new function __NgbString() {
    this.TrimStart = function (word) {
        var wordLeng = word.length;
        var i;
        var pos, first, last;

        for (i = 0; i < wordLeng; i++) {
            if (word.charAt(i) != ' ') break;
        }
        pos = i;
        first = pos;
        last = wordLeng;
        word = word.substring(first, last);
        return word;
    };
    this.TrimEnd = function (word) {
        var wordLeng = word.length;
        var i;
        var pos, first, last;

        for (i = wordLeng - 1; i >= 0; i--) {
            if (word.charAt(i) != ' ') break;
        }
        pos = i;
        first = 0;
        last = pos + 1;
        word = word.substring(first, last);
        return word;
    };
    this.Trim = function (word) {
        word = this.TrimStart(word);
        word = this.TrimEnd(word);
        return word;
    };
    this.TrimAll = function (word) {
        var wordLeng = word.length;
        var i;
        for (i = 0; i < wordLeng; i++) {
            word = word.replace(' ', '');
        }
        return word;
    };
    this.IsEmpty = function (strParam) {
        if (strParam == null)
            return false;
        else if (strParam == 'undefined')
            return false;
        else if (this.TrimAll(strParam) == '')
            return false;
        else
            return true;
    };
    this.GetLengthToByte = function (word) {
        var nValue = 0;
        for (var i = 0; i < word.length; i++) {
            if (word.charCodeAt(i) > 255)
                nValue += 2;
            else
                nValue++;
        }
        return nValue;
    };
};
var NgbClientForm = new function __NgbClientForm() {
    this.AddChildForSubform = function (strName, strValue) {
        var objForm = document.getElementById('frmLogin');
        var objInput;
        try {
            objInput = eval('document.getElementById( "frmLogin" ).' + strName);
            objInput.value = strValue;
        }
        catch (e) {
            var objInput = document.createElement('input');
            objInput.type = 'hidden';
            objInput.name = strName;
            objInput.value = strValue;
            objForm.appendChild(objInput);
        }
    };
    this.SubmitFormWithTarget = function (strURL, strTarget) {
        var objForm = document.frmLogin;

        if (NgbString.Trim(strTarget) == '')
            objForm.target = '_self';
        else
            objForm.target = strTarget;

        objForm.action = strURL;
        objForm.submit();
    };
    this.SubmitForm = function (strURL) {
        this.SubmitFormWithTarget(strURL, '_self');
    };
};
var NgbUrl = new function __NgbUrl() {
    this.GetQueryString = function (strQuery) {
        var strQueryString;
        var strHref = document.location.href.toLowerCase();
        strQuery = strQuery.toLowerCase();

        strQueryString = strHref.substr(strHref.indexOf("?") + 1);
        strQueryString = "&" + strQueryString + "&";

        var n4Index = strQueryString.indexOf("&" + strQuery + "=");
        var tempValue;

        strUrlString = document.location.href.substr(strHref.indexOf("?") + 1);
        strUrlString = "&" + strUrlString + "&";

        if (n4Index == -1) {
            return "";
        }
        else {
            tempValue = strUrlString.substr(n4Index + 1);
            tempValue = tempValue.substring(tempValue.indexOf("=") + 1, tempValue.indexOf("&"));
            if (tempValue == "undefined")
                tempValue = "";

            tempValue = tempValue.replace("#", "");
            return tempValue;
        }
    };
    this.SetQueryString = function (url, strParam, strValue) {
        var blParam = false;
        var strHref = url.toLowerCase();
        var strTempURL = "";

        if ((strParam != "") && (strValue.toString() != "")) {
            var strTempParam = "&" + strParam.toLowerCase() + "=";

            // if strParam Exists...
            if (strHref.indexOf(strTempParam) != -1) {
                var strTempQueryString = strHref.split(strTempParam);
                var strBaseURL = strTempQueryString[0];
                var strLastURL = strTempQueryString[1].substr(strTempQueryString[1].indexOf("&") + 1);

                strTempURL = strBaseURL + strTempParam + strValue;

                if (strLastURL.indexOf("=") != -1)
                    strTempURL += "&" + strLastURL;
            }
            else {
                strTempURL = strHref + strTempParam + strValue;
            }
        }

        return strTempURL.toString();
    };

    this.Redirect = function (url) {
        if (url != "") {
            document.location.href = url.toString();
        }
    };

    this.GetDomainURL = function () {
        var url = location.href;
        var reg = /(.)+:\/\/([^\/\s]+)/i;
        var data = url.match(reg);
        return data[2];
    };
};
//http://passport.nexon.net/JS/npf_auth_c.js
var NpfDebug =
{
    IsDebugMode: false,
    TraceHandler: null,
    Trace: function (strMessage) {
        if (NpfDebug.IsDebugMode == true) {
            if (NpfDebug.TraceHandler != null)
                NpfDebug.TraceHandler(strMessage);
            else
                alert(strMessage);
        }
    },
    SetTraceHandler: function (handler) {
        NpfDebug.TraceHandler = handler;
    },
    RemoveTraceHandler: function (handler) {
        NpfDebug.TraceHandler = null;
    }
};
var NpfUtil =
{
    GenerateKey: function () {
        return String(((new Date()).getTime() % 1000000) * 100 + Math.floor(Math.random() * 100));
    },
    URIEncode: function (text) {
        return escape(text);
    },
    EncodeXmlVisible: function (xmlText) {
        xmlText = xmlText.replace(/&/g, '&amp;');
        xmlText = xmlText.replace(/</g, '&lt;');
        xmlText = xmlText.replace(/>/g, '&gt;<br>');
        return xmlText;
    }
};
var NpfXmlLib =
{
    LoadText: function (xmlText) {
        try {
            var parser = new DOMParser();
            if (parser != null) {
                var xmlDoc = parser.parseFromString(xmlText, 'text/xml');
                return xmlDoc;
            }
        }
        catch (err) {
            var xmlDoc = new ActiveXObject('Microsoft.XMLDOM');
            if (xmlDoc != null) {
                xmlDoc.async = 'false';
                xmlDoc.loadXML(xmlText);
                return xmlDoc;
            }
        }
        NpfDebug.Trace('xml parser not exists');
        return null;
    },
    GetAttrValue: function (xmlElement, attrName) {
        if (xmlElement.attributes.getNamedItem(attrName) != null)
            return xmlElement.attributes.getNamedItem(attrName).value;
        return null;
    }
};
var NxamlParser =
{
    ParseXmlText: function (xmlText) {
        var xmlDoc = NpfXmlLib.LoadText(xmlText);
        if (xmlDoc == null) {
            NpfDebug.Trace('NpfXmlLib.LoadText fail');
            return null;
        }
        return NxamlParser.ParseXmlDocument(xmlDoc);
    },
    ParseXmlDocument: function (xmlDocument) {
        var rootElement = xmlDocument.documentElement;
        if (rootElement == null) {
            NpfDebug.Trace('rootElement is null');
            return null;
        }
        if (rootElement.tagName != 'nxaml') {
            NpfDebug.Trace('rootElement is not <nxaml>');
            return null;
        }
        return NxamlParser.ParseElement(rootElement);
    },
    ParseElement: function (xmlElement) {
        if (xmlElement.nodeType != 1)
            return null;
        if (xmlElement.tagName == 'arr' || xmlElement.tagName == 'array')
            return NxamlParser.ParseArray(xmlElement);
        else if (xmlElement.tagName == 'str' || xmlElement.tagName == 'string')
            return NxamlParser.ParseString(xmlElement);
        else if (xmlElement.tagName == 'num' || xmlElement.tagName == 'number')
            return NxamlParser.ParseNumber(xmlElement);
        else if (xmlElement.tagName == 'bool' || xmlElement.tagName == 'boolean')
            return NxamlParser.ParseBoolean(xmlElement);
        else if (xmlElement.tagName == 'obj' || xmlElement.tagName == 'object' || xmlElement.tagName == 'nxaml')
            return NxamlParser.ParseObject(xmlElement);
        else	// all other's are treated as an object
            return NxamlParser.ParseObject(xmlElement);
    },
    ParseString: function (xmlElement) {
        var value = NpfXmlLib.GetAttrValue(xmlElement, 'value');
        return value != null ? String(value) : '';
    },
    ParseNumber: function (xmlElement) {
        var value = NpfXmlLib.GetAttrValue(xmlElement, 'value');
        return value != null ? Number(value) : 0;
    },
    ParseBoolean: function (xmlElement) {
        var value = NpfXmlLib.GetAttrValue(xmlElement, 'value');
        if (value.toLowerCase() == "true") {
            return Boolean(1);
        } else {
            return Boolean(0);
        }
    },
    ParseObject: function (xmlElement) {
        var obj = new Object();
        var name;
        for (var i = 0; i < xmlElement.childNodes.length; ++i) {
            name = NpfXmlLib.GetAttrValue(xmlElement.childNodes[i], 'name');
            if (name != null) {
                childObj = NxamlParser.ParseElement(xmlElement.childNodes[i]);
                if (childObj != null)
                    eval('obj.' + name + ' = childObj;');
            }
        }
        return obj;
    },
    ParseArray: function (xmlElement) {
        var obj = new Array();
        for (var i = 0; i < xmlElement.childNodes.length; ++i) {
            childObj = NxamlParser.ParseElement(xmlElement.childNodes[i]);
            if (childObj != null)
                eval('obj[ ' + obj.length + ' ] = childObj;');
        }
        return obj;
    }
};
var NxamlLib =
{
    CharSet: 'ks_c_5601-1987',
    HandlerList: new Array(),
    ScriptList: new Array(),
    AppendScript: function (callbackSerial, src) {
        var script = document.createElement('script');
        script.src = src;
        script.type = 'text/javascript';
        script.charset = NxamlLib.CharSet;
        var child = document.getElementsByTagName('head')[0].appendChild(script);
        NxamlLib.ScriptList[callbackSerial] = child;
    },
    RemoveScript: function (callbackSerial) {
        if (NxamlLib.ScriptList != null && NxamlLib.ScriptList[callbackSerial] != null) {
            document.getElementsByTagName('head')[0].removeChild(NxamlLib.ScriptList[callbackSerial]);
            NxamlLib.ScriptList[callbackSerial] = null;
        }
    },
    AddHandler: function (callbackSerial, handler) {
        NxamlLib.HandlerList[callbackSerial] = handler;
    },
    ExecuteHandler: function (callbackSerial, resultObject, responseXML) {
        if (NxamlLib.HandlerList != null && NxamlLib.HandlerList[callbackSerial] != null) {
            NxamlLib.HandlerList[callbackSerial](resultObject, responseXML);
            NxamlLib.HandlerList[callbackSerial] = null;
        }
    },
    HandleResponse: function (responseXML) {
        var resultObject = NxamlParser.ParseXmlText(responseXML);
        if (resultObject != null && resultObject._cs != null) {
            NxamlLib.RemoveScript(resultObject._cs);
            NxamlLib.ExecuteHandler(resultObject._cs, resultObject, responseXML);
        }
    },
    // class XmlHttpMethod
    XmlHttpMethod: function (baseURL, methodName, callback) {
        this.callbackSerial = NpfUtil.GenerateKey();
        this.queryString = '?_vb=' + methodName + '&_cs=' + this.callbackSerial;
        this.AppendParam = function (name, value) {
            this.queryString += '&' + name + '=' + NpfUtil.URIEncode(value);
        };
        this.AppendStates = function (args, start) {
            for (var i = start; i < args.length; ++i) {
                var pos = args[i].indexOf('=');
                if (pos != -1)
                    this.AppendParam('__' + args[i].substr(0, pos), args[i].substr(pos + 1));
            }
        };
        this.SendRequest = function () {
            NxamlLib.AddHandler(this.callbackSerial, callback);
            NxamlLib.AppendScript(this.callbackSerial, baseURL + this.queryString);
        };
    }
};
var NpfUrlLib =
{
    GetProperUrl: function (url) {
        var pos;
        pos = url.indexOf('://');
        if (pos >= 0)
            url = url.substr(pos + 3);
        if (url.indexOf('auth.') == 0) {
            var cookieList = document.cookie.split(';');
            for (var i = 0; i < cookieList.length; ++i) {
                if (cookieList[i].indexOf('NPP=') >= 0) {
                    var split = cookieList[i].substr(cookieList[i].indexOf('NPP=') + 4).split(':');
                    if (split.length == 5)
                        url = split[1] + url.substr(4);
                    break;
                }
            }
        }
        return location.href.substr(0, location.href.indexOf('://') + 3) + url;
    }
};
var CommonError =
{
    NoError: 0		// ~ 9999
};
var AuthSystemError =
{
    Unknown: 20000, // ~ 29999
    NotInitialized: 20001,
    ServiceShutdown: 20002,
    NotAllowedLocale: 20003,
    DBCallFailed: 20004,
    SPException: 20005,
    WrongIDOrPassword: 20006,
    BlockedIp: 20007,
    TempBlockedByLoginFail: 20008,
    TempBlockedByWarning: 20009,
    BlockedByAdmin: 20010,
    AllocationFailed: 20011,
    InvalidNexonSN: 20012,
    SessionDataNotExist: 20013,
    InvalidUserIP: 20014,
    InvalidPassportKey: 20015,
    LockFailed: 20016,
    NexonIDMissmatched: 20017,
    Disconnected: 20018,
    NewSession: 20019,
    UmgdModuleCallFailed: 20020,
    NotAllowedServer: 20021,
    InvalidSessionKey: 20022,
    SoapCallFailed: 20023,
    InvalidArgument: 20024,
    UserNotExists: 20025,
    WrongPwd: 20026,
    WithdrawnUser: 20027,
    WrongOwner: 20028
};
var AuthSystem =
{
    FunctionURL: 'auth.nexon.net/ajax/default.aspx',
    UpdateSession: function (callback) {
        if (NpfUrlLib.GetProperUrl(AuthSystem.FunctionURL) == "http://" + AuthSystem.FunctionURL)
            return;
        var method = new NxamlLib.XmlHttpMethod(NpfUrlLib.GetProperUrl(AuthSystem.FunctionURL), 'UpdateSession', callback);
        method.SendRequest();
    },
    GetOldFashionInfo: function (callback) {
        var method = new NxamlLib.XmlHttpMethod(NpfUrlLib.GetProperUrl(AuthSystem.FunctionURL), 'GetOldFashionInfo', callback);
        method.SendRequest();
    }
};
