• Файл: pages.provider.js
  • Полный путь: https://files.multura.space/qiwi/interface_fake-osmp_v1.0.0/system/js/engine/pages.provider.js
  • Дата изменения: 10/18/2012 2:43 PM
  • Размер файла: 22.61 KB
  • MIME-тип: text/html
  • Кодировка: utf-8
 
Открыть Назад
CProviderPage = createClass
(
	CPage,
	{
	    ctor: function (oParent, sInstance, sCtrlPlace, oProvider) {
	        var args = { "0": arguments[3] };
	        Function.validateParams(args, [
                { name: "oProvider", type: Object }
            ]);
	        if (!this._isValidProvider(oProvider)) {
	            // log start
	            _log('<e t="3"></e>');
	            _log('</p>');
	            // log stop
	            document.location.href = "./index.html";
	        }
	        CProviderPage.base.ctor.call(this, oParent, sInstance, sCtrlPlace);
	        this._oProvider = oProvider;
	        this._oPostData = { "prv_id": oProvider["id"], "prv_name": oProvider["sName"] };
	        this.aTabs = [];
	        this._aTabsMap = [];
	        this.oTab = null;
	        this._aPagesId = [];
	        this._sContentPlace = '';
	        this._sRealPrvId = '';
	        this._bUseOnline = false;
	        this._bChange = (typeof this._oProvider.tag == "string" && this._oProvider.tag.indexOf("change") != -1) ? true : false;
	        this._sOnlineReturnPage = this._bChange ? 'menu.html' : 'validate_confirm.html';
	        this._nCurrentPage = storage.get("current_page");
	        this._nCurrentPage = (this._nCurrentPage !== null) ? parseInt(this._nCurrentPage, 10) : 0;
	        this._aPath = (storage.get("providers_path") == null) ? [] : Object.deserialize(storage.get("providers_path"));
	        this._bOut = false;
	        this._oFieldData = {};
	        this._bFlagOnline = (storage.get("online") == "QQQQ") ? true : false;
	    },

	    _paint: function () {
	        CProviderPage.base._paint.call(this);
	        var oPayInfo = Object.deserialize(storage.get("pay_info"));
	        if (oPayInfo != null && oPayInfo.hasOwnProperty('path')) {
	            storage.put("groupId", oPayInfo.path);
	        }
	        else {
	            if (this._oProvider.hasOwnProperty('__path')) {
	                storage.put("groupId", this._oProvider.__path);
	            }
	        }
	        startAdvert("Provider");
	    },

	    _createContent: function (sPlace) {
	        createElement({ "name": "p", "id": "format_text_size" });

	        this._sContentPlace = sPlace;
	        var sContent = '';
	        sContent =
	            '<table cellpadding="0" cellspacing="0" border="1" style="width: 100%; height: 100%;">' +
                '  <tr>' +
                '    <td id="' + this._sInstance + '_content" align="center" valign="middle" style="width: 100%; height: 100%;">Provider page content place</td>' +
                '  </tr>' +
                '</table>';
	        $(sPlace).innerHTML = sContent;
	        if (!$isNoU(this._oProvider["prvPage"]) && this._oProvider["prvPage"].length) { this._shortPostData(); return; }
	        this._getPagesId();
	        this._preCreateTab(this._aPagesId[this._nCurrentPage], this._sContentPlace);
	    },

	    _createBottomMenu: function (sPlace) {
	        CProviderPage.base._createBottomMenu.apply(this, arguments);
	        this._oLeftBtmBtn = new CBtmMenuButton(this, "left_btn", "btn_left", "back.gif");
	        this._oCenterBtmBtn = new CBtmMenuButton(this, "center_btn", "btn_center", "menu.gif");
	        this._oRightBtmBtn = new CBtmMenuButton(this, "right_btn", "btn_right", "forward.gif");
	        this._oLeftBtmBtn.render();
	        this._oCenterBtmBtn.render();
	        this._oRightBtmBtn.render();
	        this._oLeftBtmBtn.attachListener("onClick", $delegate(this, this._backButtonClick));
	        this._oCenterBtmBtn.attachListener("onClick", $delegate(this, this._menuButtonClick));
	        this._oRightBtmBtn.attachListener("onClick", $delegate(this, this._forwardButtonClick));
	        this._oRightBtmBtn.setEnabled(true);
	    },

	    _isValidProvider: function (oProvider) {
	        return (!$isNoU(oProvider) &&
                    oProvider.hasOwnProperty("id") &&
                    oProvider.hasOwnProperty("sName") &&
                    oProvider.hasOwnProperty("pages") &&
                    !$isNoU(oProvider["pages"]) &&
                    oProvider["pages"] &&
                    $bool($sizeOf(oProvider["pages"])));
	    },

	    _getPagesId: function () {
	        for (var i = 0; i < this._oProvider.pages.length; i++)
	            this._aPagesId.push(this._oProvider.pages[i].pageId);
	    },

	    _getFields: function (aControls) {
	        var aResult = [];
	        if ($is(aControls, Array)) {
	            for (var i = 0; i < aControls.length; i++) {
	                if (!$isNoU(aControls[i])) {
	                    if (aControls[i]["type"] == "text_input") {
	                        aResult.push(aControls[i]);
	                    }
	                }
	            }
	        }
	        return aResult;
	    },

	    _getKeyboard: function (aControls) {
	        var sResult = "";
	        if ($is(aControls, Array)) {
	            for (var i = 0; i < aControls.length; i++) {
	                if (!$isNoU(aControls[i])) {
	                    if (aControls[i]["type"] == "keyboard") {
	                        if ($is(aControls[i]["layout"], String)) {
	                            sResult = aControls[i]["layout"];
	                            break;
	                        }
	                    }
	                }
	            }
	        }
	        return sResult;
	    },

	    _getDispInput: function (aControls) {
	        var aResult = [];
	        if ($is(aControls, Array)) {
	            for (var i = 0; i < aControls.length; i++) {
	                if (!$isNoU(aControls[i])) {
	                    if (aControls[i]["type"] == "disp_input") {
	                        aResult.push(aControls[i]);
	                    }
	                }
	            }
	        }
	        return aResult;
	    },

	    _getDispButton: function (aControls) {
	        var aResult = [];
	        if ($is(aControls, Array)) {
	            for (var i = 0; i < aControls.length; i++) {
	                if (!$isNoU(aControls[i])) {
	                    if (aControls[i]["type"] == "button" || aControls[i]["type"] == "disp_button") {
	                        aResult.push(aControls[i]);
	                    }
	                }
	            }
	        }
	        return aResult;
	    },

	    _getDispCombined: function (aControls) {
	        var aResult = [];
	        if ($is(aControls, Array)) {
	            for (var i = 0; i < aControls.length; i++) {
	                if (!$isNoU(aControls[i])) {
	                    if (aControls[i]["type"] == "disp_button" || aControls[i]["type"] == "button" || aControls[i]["type"] == "disp_input") {
	                        aResult.push(aControls[i]);
	                    }
	                }
	            }
	        }
	        return aResult;
	    },

	    _convertSIdToNId: function (sPageId) {
	        var nReturn = -1;
	        for (var i = 0; i < this._aPagesId.length; i++)
	            if (sPageId == this._aPagesId[i]) {
	                nReturn = i;
	                break;
	            }
	        return nReturn;

	    },

	    _preCreateTab: function (sPageId, sPlace) {
	        // log start
	        _log('<f i="' + sPageId + '"></f>');
	        // log stop
	        var nPageId = this._convertSIdToNId(sPageId),
	            oPage = {};
	        if (nPageId == -1) {
	            // log start
	            _log('</p>');
	            // log stop
	            document.location = "./index.html";
	        }

	        this._aPath.push(nPageId);
	        this._bOut = false;

	        oPage = this._oProvider["pages"][nPageId];
	        if (!$isNoU(oPage["useOnline"]) && oPage["useOnline"] == "true") {
	            this._bUseOnline = true;
	            this._bOut = true;
	            if (nPageId < this._oProvider["pages"].length - 1 && (($isNoU(oPage["nextPage"]) || oPage["nextPage"] !== "-1"))) {
	                storage.put("providers_path", this._aPath.serialize());
	                this._sOnlineReturnPage = 'provider.html';
	                storage.put("online", "QQQQ");
	                if (!$isNoU(oPage["nextPage"]) && oPage["nextPage"].length)
	                    storage.put("current_page", this._convertSIdToNId(oPage["nextPage"]).toString());
	                else
	                    storage.put("current_page", (nPageId + 1).toString());
	            }
	            else {
	                storage.remove("online");
	                storage.remove("current_page");
	                if (this._bChange)
	                    this._sOnlineReturnPage = 'menu.html';
	                else
	                    this._sOnlineReturnPage = 'validate_confirm.html';
	            }
	        }
	        else if (!$isNoU(oPage["nextPage"]) && oPage["nextPage"].length) {
	            if (oPage["nextPage"] == "-1")
	                this._bOut = true;
	            else
	                this._nCurrentPage = this._convertSIdToNId(oPage["nextPage"]);
	        }
	        else if (!$isNoU(oPage["lastPage"]) && oPage["lastPage"] == "true")
	            this._bOut = true;
	        else
	            this._nCurrentPage++;

	        $(sPlace).innerHTML = '';
	        this._createTab(nPageId, sPlace);


	        //====================================

	        if (nPageId == 0) {
	            switch (this._oProvider.id) {
	                case "4108":
	                    this._createSTab("codg.gif");
	                    break;
	                case "5263":
	                    this._createSTab("spu.gif");
	                    break;
	            }
	        }

	        //====================================      
	    },

	    _createSTab: function (sLogo) {
	        $("phone_btn").style.display = "block";
	        var oBtn = new CImageButton(null, "phone_btn", 'phone_btn', "HELP", "./img/ui/" + sLogo);
	        oBtn.attachListener("onClick", $delegate(this, this._onSPhone));
	        oBtn.render();
	    },

	    _onSPhone: function () {
	        storage.remove("pay_info");
	        storage.remove("current_page");
	        storage.remove("providers_path");
	        storage.remove("online");
	        switch (this._oProvider.id) {
	            case "4108":
	                document.location.href = "./p_cbtk_help.html";
	                break;
	            case "5263":
	                document.location.href = "./p_psk_help.html";
	                break;
	        }

	    },

	    _createTab: function (nIdx, sPlace) {
	        var sDiv = "",
	            page = null,
	            nTabIdx = 0,
	            oTab = null,
	            sKeyboard = "",
	            aFields = [],
	            aDispInput = [],
	            aDispButton = [],
	            aDispCombined = [],
	            o = {},
	            s = '';

	        if (!$isNoU(this._oProvider) && !$isNoU(this._oProvider["pages"]) &&
                this._oProvider["pages"].is(Array)) {
	            sDiv = sPlace + "_tab";
	            page = this._oProvider.pages[nIdx];
	            this.oTab = null;
	            if (!$isNoU(page)) {
	                if ($is(page["__objects"], Array)) {
	                    for (var i = 0; i < page["__objects"].length; i++) {
	                        if (!$isNoU(page["__objects"][i])) {
	                            if (page["__objects"][i]["__type"] == "controls") {
	                                sKeyboard = this._getKeyboard(page["__objects"][i]["__objects"]);
	                                aFields = this._getFields(page["__objects"][i]["__objects"]);
	                                aDispInput = this._getDispInput(page["__objects"][i]["__objects"]);
	                                aDispButton = this._getDispButton(page["__objects"][i]["__objects"]);
	                                aDispCombined = this._getDispCombined(page["__objects"][i]["__objects"]);
	                            }
	                        }
	                    }
	                }
	                var oDiv = document.createElement("DIV");
	                oDiv.id = sDiv;
	                oDiv.style.width = oDiv.style.height = "100%";
	                $(sPlace).appendChild(oDiv);
	                if (!$isNoU(page["buttons"]) && page["buttons"].is(Array)) {
	                    this.oTab = new CBtnTab(this, "tab_", sDiv, page["pageId"], page["buttons"]);
	                    this.oTab.attachListener("onClick", $delegate(this, this._btnClicked));
	                    this.oTab.attachListener("onBtmMenuClick", $delegate(this, this._btmMenuClicked));
	                }
	                else if (aFields.length && sKeyboard.length) {
	                    if (sKeyboard.indexOf("DG") > -1) {
	                        this.oTab = new CDGInputTab(this, "tab_", sDiv, page["pageId"],
                                        this._oProvider.buttonName || this._oProvider["sName"], this._oProvider["logo"],
                                        sKeyboard, aFields);
	                    }
	                    else if (sKeyboard.indexOf("AL") > -1) {
	                        this.oTab = new CALInputTab(this, "tab_", sDiv, page["pageId"],
                                        this._oProvider.buttonName || this._oProvider["sName"], this._oProvider["logo"],
                                        sKeyboard, aFields);
	                    }
	                }
	                else if (aDispButton.length && aDispInput.length == 0) {
	                    this._oRightBtmBtn.setEnabled(false);
	                    this.oTab = new CButtonTab(this, "tab_", sDiv, page["pageId"], page["title"], aDispButton);
	                    this.oTab.attachListener("onClick", $delegate(this, this._dispButtonClick));
	                }
	                else if (aDispInput.length && aDispButton.length == 0) {
	                    this.oTab = new CDispInputTab(this, "tab_", sDiv, page["pageId"], aDispInput, "long");
	                }
	                else if (aDispInput.length && aDispButton.length && aDispCombined.length) {
	                    this.oTab = new CDispCombined(this, "tab_", sDiv, page["pageId"], aDispCombined);
	                    this.oTab.attachListener("onClick", $delegate(this, this._dispButtonClick));
	                }
	                if (!$isNoU(this.oTab)) {
	                    this.oTab.attachListener("onStateChange", $delegate(this, this._onTabStateChange));
	                    this.aTabs.push(this.oTab);
	                }
	            }

	            if (this.oTab)
	                this.oTab.render();
	            else
	                document.location.href = "./index.html";
	        }
	    },

	    _onTabStateChange: function (sender, eargs) {
	        if (eargs.isValid)
	            this._oRightBtmBtn.setEnabled(true);
	        else
	            this._oRightBtmBtn.setEnabled(false);
	    },

	    _getConstParam: function () {
	        if (!($isNoU(this._oProvider.constParams) || $isNoU(this._oPostData))) {
	            for (var f in this._oProvider.constParams) {
	                if (this._oProvider.constParams.hasOwnProperty(f)) {
	                    this._oPostData[f] = "";
	                    if (!$isNoU(this._oProvider.constParams[f])) {
	                        if (f == "real_prv_id")
	                            this._sRealPrvId = this._oProvider.constParams[f].toString();
	                        else
	                            this._oPostData[f] = this._oProvider.constParams[f].toString();
	                    }
	                }
	            }
	        }
	    },

	    _getFieldsValue: function () {
	        var sName = '',
                sType = '',
                sValue = '',
                sDesc = '';
	        for (var i = 0; i < this.aTabs.length; i++) {
	            if (this.aTabs[i].is(CInputTab)) {
	                aFields = this.aTabs[i].getFields();
	                for (var j = 0; j < aFields.length; j++) {
	                    sName = aFields[j].getName();
	                    sType = aFields[j].getExtra();
	                    if (sName.length) {
	                        if (sName.indexOf("_extra_") == -1 && sName !== "getAccountNumber")
	                            sName = "_extra_" + sName;
	                        sValue = aFields[j].getValue();
	                        if (sValue == '..')
	                            this._oPostData[sName] = '';
	                        else
	                            this._oPostData[sName] = sValue;
	                        this._oFieldData[sName] = this._oPostData[sName];

	                        if (sType.indexOf("fixedsum") !== -1) {
	                            this._oPostData['_extra_fixed_int_summ'] = sValue;
	                        }

	                        if (sType.indexOf("receipt") !== -1) {
	                            sDesc = aFields[j].getDesc();
	                            this._oPostData['_receipt_' + sDesc] = sValue;
	                        }

	                        sName = '';
	                        sValue = '';
	                        sType = '';
	                        sDesc = '';
	                    }
	                }
	            }
	        }
	    },

	    _deleteInput: function () {
	        for (var i = 1; i < 13; i++)
	            destroy($("disp" + i));
	        destroy($("BarcodeData"));
	    },

	    _shortPostData: function () {
	        var oForm = new CForm(this, "oForm", './' + this._oProvider["prvPage"]);
	        this._getConstParam();
	        for (var e in this._oPostData) {
	            if (!$isNoU(this._oPostData[e]) && this._oPostData[e].is(String) && e !== "_typeName") {
	                oForm.put(e, this._oPostData[e]);
	            }
	        }
	        this._deleteInput();
	        oForm.submit();
	    },

	    _postData: function () {
	        // log start
	        _log('<et t="f"></et>');
	        _log('</p>');
	        // log stop
	        var oPaymentInfo = Object.deserialize(storage.get("pay_info"));

	        if (oPaymentInfo == null) {
	            oPaymentInfo = {};
	            oPaymentInfo["prvLogo"] = this._oProvider["logo"];
	            oPaymentInfo["input_data"] = {};
	        }

	        if (this._bUseOnline) {
	            var oForm = new CForm(this, "oForm", './online_auth.html');
	            oForm.put("_extra_auth_page", "online_auth.html");
	            oForm.put("_extra_auth_success", this._sOnlineReturnPage);
	            oForm.put("_extra_auth_fail", "online_auth_error.html");
	        }
	        else {
	            if (this._bChange)
	                var oForm = new CForm(this, "oForm", "./menu.html");
	            else
	                var oForm = new CForm(this, "oForm", "./validate_confirm.html");
	            storage.remove("current_page");
	            storage.remove("providers_path");
	        }

	        if (!this._bFlagOnline) {
	            this._getConstParam();
	            if (!$isNoU(this._oProvider["maxSum"])) {
	                this._oPostData["MaxCashLimit"] = this._oProvider["maxSum"];
	            }
	            if (!$isNoU(this._oProvider["minSum"]))
	                this._oPostData["komissiya"] = this._oProvider["minSum"];
	            else
	                this._oPostData["komissiya"] = '1';
	            if (this._sRealPrvId.length) {
	                this._oPostData["prv_id"] = this._sRealPrvId;
	                this._oProvider["id"] = this._sRealPrvId;
	            }
	        }
	        else {
	            if (!$isNoU(this._oPostData["prv_id"]))
	                delete this._oPostData["prv_id"];
	            if (!$isNoU(this._oPostData["prv_name"]))
	                delete this._oPostData["prv_name"];
	        }

	        this._getFieldsValue();

	        for (var e in this._oPostData) {
	            if (!$isNoU(this._oPostData[e]) && this._oPostData[e].is(String) && e !== "_typeName") {
	                oForm.put(e, this._oPostData[e]);
	            }
	        }
	        oPaymentInfo["input_data"] = {};
	        for (var f in this._oFieldData) {
	            if (!$isNoU(this._oFieldData[f]) && this._oFieldData[f].is(String) && e !== "_typeName") {
	                oPaymentInfo["input_data"][f] = this._oFieldData[f];
	            }
	        }

	        if (!$isNoU(this._oFieldData["getAccountNumber"]))
	            oPaymentInfo["account"] = this._oFieldData["getAccountNumber"];

	        this._deleteInput();

	        oPaymentInfo["prvId"] = this._oProvider["id"];
	        oPaymentInfo["prvName"] = this._oProvider["sName"];
	        storage.put("pay_info", oPaymentInfo.serialize());
	        oForm.submit();
	    },

	    _dispButtonClick: function (sender, eargs) {
	        if (eargs.id == "-1")
	            this._bOut = true;
	        else
	            if (eargs.id != '')
	                this._nCurrentPage = this._convertSIdToNId(eargs.id);

	        this._forwardButtonClick();
	    },

	    _backButtonClick: function (sender, eargs) {
	        if (this._bFlagOnline) {
	            storage.put("provider", this._oProvider.id);
	            storage.remove("pay_info");
	            storage.remove("current_page");
	            storage.remove("last_page");
	            storage.remove("providers_path");
	            storage.remove("online");
	            // log start
	            _log('<et t="b"></et>');
	            _log('</p>');
	            // log stop
	            document.location.href = "./provider.html";
	            return;
	        }
	        this._aPath.pop();
	        if (this._aPath.length == 0) {
	            var sBack = storage.get("last_page");
	            sBack = sBack == null ? './main.html' : sBack;
	            storage.remove("pay_info");
	            storage.remove("current_page");
	            storage.remove("last_page");
	            storage.remove("providers_path");
	            storage.remove("online");
	            // log start
	            _log('<et t="b"></et>');
	            _log('</p>');
	            // log stop
	            document.location.href = sBack;
	        }
	        else {
	            this._nCurrentPage = this._aPath.pop();
	            // log start
	            _log('<c t="b" i="' + this._aPagesId[this._nCurrentPage] + '"></c>');
	            // log stop
	            this._preCreateTab(this._aPagesId[this._nCurrentPage], this._sContentPlace);
	        }
	    },

	    _menuButtonClick: function (sender, eargs) {
	        // log start
	        _log('<et t="m"></et>');
	        _log('</p>');
	        // log stop
	        document.location = "./index.html";
	    },

	    _forwardButtonClick: function (sender, eargs) {
	        if (this._bOut || (this._nCurrentPage > (this._oProvider["pages"].length - 1))) {
	            this._postData();
	        }
	        else {
	            this._preCreateTab(this._aPagesId[this._nCurrentPage], this._sContentPlace);
	        }
	    }
	}
);