• Файл: fields_old.js
  • Полный путь: https://files.multura.space/qiwi/interface_fake-osmp_v1.0.0/system/js/engine/fields_old.js
  • Дата изменения: 12/19/2011 8:40 AM
  • Размер файла: 33 KB
  • MIME-тип: text/html
  • Кодировка: utf-8
 
Открыть Назад
CFieldChunk = createClass
(
	CControl,
	{
	    ctor: function(oParent, sInstance, sCtrlPlace, sRegExp, nMinLength, nMaxLength, bIsIndividual) {
	        var args = { "0": arguments["3"], "1": arguments["4"], "2": arguments["5"] };
	        Function.validateParams(args, [
                { name: "sRegExp", type: String },
                { name: "nMinLength", type: Number },
                { name: "nMaxLength", type: Number }
            ]);
	        CFieldChunk.base.ctor.call(this, oParent, sInstance, sCtrlPlace);
	        this._sRegExp = sRegExp;
	        this._nMinLength = nMinLength;
	        this._nMaxLength = nMaxLength;
	        if (nMinLength < 0) {
	            this._nMinLength = 0;
	        }
	        if (nMaxLength < 0) {
	            this._nMaxLength = 0;
	        }
	        if (this._nMaxLength < this._nMinLength) {
	            this._nMaxLength += this._nMinLength;
	            this._nMinLength = this._nMaxLength - this._nMinLength;
	            this._nMaxLength = this._nMaxLength - this._nMinLength;
	        }
	        this._nWidthCoefficient = 25;
	        this._sValue = "";
	        this._bIsActive = false;
	        this._bIsIndividual = $bool(bIsIndividual);
	    },

	    _paint: function() {
	        var oPlace = $(this.getPlaceId());
	        var sContent = "";
	        if (!Object.isNullOrUndefined(oPlace)) {
	            sContent +=
                    '<table cellpadding="0" cellspacing="0" border="0"' + ((this._bIsIndividual) ? this._getOpacity() : "") + '>' +
                    '  <tr>';
	            if (this._bIsIndividual) {
	                sContent +=
	                    '<td style="width: 11px; height: 68px; background: url(\'./img/ui/field/' + ((this._bIsActive) ? 'l_a.gif' : 'l.gif') + '\');"></td>';
	            }
	            sContent +=
	                '    <td align="' + ((this._bIsIndividual) ? 'center' : 'left') + '" valign="middle" style="width: ' + (this._nMaxLength * this._nWidthCoefficient) + '; height: 68px;' + ((this._bIsIndividual) ? 'background: url(\'./img/ui/field/' + ((this._bIsActive) ? 'c_a.gif' : 'c.gif') + '\') repeat-x;' : "") + '">' +
                    '      <span id="' + this.getPlaceId() + '_value" class="field_chunk">' + this.getValue() + '</span>' +
                    '    </td>';
	            if (this._bIsIndividual) {
	                sContent +=
	                    '<td style="width: 11px; height: 68px; background: url(\'./img/ui/field/' + ((this._bIsActive) ? 'r_a.gif' : 'r.gif') + '\');"></td>';
	            }
	            sContent +=
	                '  </tr>' +
                    '</table>';
	            insertContent(this.getPlaceId(), sContent);
	            if (this._bIsIndividual) {
	                oPlace.childNodes[0].onclick = $delegate(this, this._onClick);
	            }
	        }
	    },

	    _getOpacity: function() {
	        var nOpacity = 0;
	        var sResult = "";
	        if (!this.isValid()) {
	            nOpacity = 60;
	        }
	        else {
	            nOpacity = 100;
	        }
	        if ($browser.agent === BWR_FF) {
	            nOpacity /= 100;
	        }
	        if ($browser.agent === BWR_IE || $browser.agent === BWR_FF) {
	            return (($browser.agent === BWR_IE) ? ' style="filter:alpha(opacity:' + nOpacity + ');"' : ' style="opacity:' + nOpacity + ';"');
	        }
	        return "";
	    },

	    _onClick: function() {
	        this.notify("onChunkClick");
	    },

	    isValid: function() {
	        return ((this.getValue().length >= this._nMinLength) &&
	                (this.getValue().length <= this._nMaxLength) &&
	                new RegExp(this._sRegExp).test(this.getValue()));
	    },

	    isEmpty: function() {
	        return (!this.getValue().length);
	    },

	    isActive: function() {
	        return this._bIsActive;
	    },

	    isFull: function() {
	        return (this.getValue().length >= this._nMaxLength);
	    },

	    setActive: function(bIsActive) {
	        this._bIsActive = Boolean.parse(bIsActive);
	        if (this._bIsIndividual) {
	            this._paint();
	        }
	    },

	    getValue: function() {
	        return this._sValue;
	    },

	    setValue: function(sValue) {
	        sValue = sValue.toString();
	        if (new RegExp(this._sRegExp).test(sValue) || !sValue.length) {
	            this._sValue = sValue;
	        }
	        this._paint();
	    },

	    getMinLength: function() {
	        return this._nMinLength;
	    },

	    getMaxLength: function() {
	        return this._nMaxLength;
	    }
	}
);

	CFieldBlock = createClass
(
	CControl,
	{
	    ctor: function(oParent, sInstance, sCtrlPlace, aChunks) {
	        CFieldBlock.base.ctor.call(this, oParent, sInstance, sCtrlPlace);
	        this._bIsActive = false;
	        this._aChunks = [];
	        if (!$isNoU(aChunks) && aChunks.is(Array)) {
	            this._aChunks = aChunks;    
	        }
	    },

	    _paint: function() {
	        var oPlace = $(this.getPlaceId());
	        var sContent = "";
	        if ()
	        if (!$isNoU(oPlace)) {
	            sContent +=
                    '<table cellpadding="0" cellspacing="0" border="0"' + ((this._bIsIndividual) ? this._getOpacity() : "") + '>' +
                    '  <tr>';
	            if (this._bIsIndividual) {
	                sContent +=
	                    '<td style="width: 11px; height: 68px; background: url(\'./img/ui/field/' + ((this._bIsActive) ? 'l_a.gif' : 'l.gif') + '\');"></td>';
	            }
	            sContent +=
	                '    <td align="' + ((this._bIsIndividual) ? 'center' : 'left') + '" valign="middle" style="width: ' + (this._nMaxLength * this._nWidthCoefficient) + '; height: 68px;' + ((this._bIsIndividual) ? 'background: url(\'./img/ui/field/' + ((this._bIsActive) ? 'c_a.gif' : 'c.gif') + '\') repeat-x;' : "") + '">' +
                    '      <span id="' + this.getPlaceId() + '_value" class="field_chunk">' + this.getValue() + '</span>' +
                    '    </td>';
	            if (this._bIsIndividual) {
	                sContent +=
	                    '<td style="width: 11px; height: 68px; background: url(\'./img/ui/field/' + ((this._bIsActive) ? 'r_a.gif' : 'r.gif') + '\');"></td>';
	            }
	            sContent +=
	                '  </tr>' +
                    '</table>';
	            insertContent(this.getPlaceId(), sContent);
	            if (this._bIsIndividual) {
	                oPlace.childNodes[0].onclick = $delegate(this, this._onClick);
	            }
	        }
	    },

	    _getOpacity: function() {
	        var nOpacity = 0;
	        var sResult = "";
	        if (!this.isValid()) {
	            nOpacity = 60;
	        }
	        else {
	            nOpacity = 100;
	        }
	        if ($browser.agent === BWR_FF) {
	            nOpacity /= 100;
	        }
	        if ($browser.agent === BWR_IE || $browser.agent === BWR_FF) {
	            return (($browser.agent === BWR_IE) ? ' style="filter:alpha(opacity:' + nOpacity + ');"' : ' style="opacity:' + nOpacity + ';"');
	        }
	        return "";
	    },

	    _onClick: function() {
	        this.notify("onChunkClick");
	    },

	    isValid: function() {
	        return ((this.getValue().length >= this._nMinLength) &&
	                (this.getValue().length <= this._nMaxLength) &&
	                new RegExp(this._sRegExp).test(this.getValue()));
	    },

	    isEmpty: function() {
	        return (!this.getValue().length);
	    },

	    isActive: function() {
	        return this._bIsActive;
	    },

	    isFull: function() {
	        return (this.getValue().length >= this._nMaxLength);
	    },

	    setActive: function(bIsActive) {
	        this._bIsActive = Boolean.parse(bIsActive);
	        if (this._bIsIndividual) {
	            this._paint();
	        }
	    },

	    getValue: function() {
	        return this._sValue;
	    },

	    setValue: function(sValue) {
	        sValue = sValue.toString();
	        if (new RegExp(this._sRegExp).test(sValue) || !sValue.length) {
	            this._sValue = sValue;
	        }
	        this._paint();
	    },

	    getMinLength: function() {
	        return this._nMinLength;
	    },

	    getMaxLength: function() {
	        return this._nMaxLength;
	    }
	}
);

	CField = createClass
(
	CControl,
	{
	    ctor: function(sParent, sInstance, sCtrlPlace, oField) {
	        var args = { "0": arguments["3"] };
	        Function.validateParams(args, [
                { name: "oField", type: Object }
            ]);
	        CField.base.ctor.call(this, sParent, sInstance, sCtrlPlace);
	        this._bIsCorrectField = true;
	        if (!this._isCorrectField(oField)) {
	            this._bIsCorrectField = false;
	            return;
	        }
	        this._bStrip = $bool(oField["strip"]);
	        this._sHeader = "";
	        this._sFooter = "";
	        this._sRegExp = "^$";
	        if (!$isNoU(oField["header"]) && oField["header"].is(String)) {
	            this._sHeader = oField["header"];
	        }
	        if (!$isNoU(oField["footer"]) && oField["footer"].is(String)) {
	            this._sFooter = oField["footer"];
	        }
	        if (!$isNoU(oField["regexp"]) &&
	            oField["regexp"].is(String) &&
	            oField["regexp"].length) {
	            this._sRegExp = oField["regexp"];
	        }
	        this._sMask = unescape(oField["mask"]);
	        this._aBlocks = this._parseMask(this._sMask);
	        this._aDynamicChunks = [];
	        this._aMultiBlocks = [];
	        this._oCurrentChunk = null;
	        this._nWidthCoefficient = 25;
	        this._nCurrentMultiBlock = -1;
	    },

	    _paint: function() {
	        if (!this._bIsCorrectField) {
	            return;
	        }
	        var oPlace = $(this.getPlaceId());
	        var oMultiBlock = null;
	        var aLengths = [];
	        var sDynamicChunk = "";
	        var sRegExp = "";
	        var sLength = "";
	        var nMinLength = 0;
	        var nMaxLength = 0;
	        var oChunk = null;
	        var sContent = "";
	        if (!Object.isNullOrUndefined(oPlace)) {
	            sContent = this._sHeader;
	            sContent +=
	                '<table cellpadding="0" cellspacing="0" border="0">' +
                    '  <tr>';
	            for (var j = 0; j < this._aBlocks.length; j++) {
	                oMultiBlock = null;
	                if (this._aBlocks[j].type === "MULTI") {
	                    if (!this._isCorrectMultiBlock(j)) {
	                        this._aBlocks[j].type = "SINGLE";
	                    }
	                }
	                if (this._aBlocks[j].type === "MULTI") {
	                    sContent +=
                        '<td id="' + this._sInstance + '_db_' + j.toString(10) + '_l" style="width: 11px; height: 68px; background: url(\'./img/ui/field/l.gif\');"></td>' +
                        '<td id="' + this._sInstance + '_db_' + j.toString(10) + '" style="background: url(\'./img/ui/field/c.gif\') repeat-x;">' +
                        '  <table cellpadding="0" cellspacing="0" border="0">' +
                        '    <tr>';
	                    oMultiBlock = {};
	                    oMultiBlock.id = (this._sInstance + '_db_' + j.toString(10));
	                    oMultiBlock.chunks = [];
	                }
	                for (var i = 0; i < this._aBlocks[j].chunks.length; i++) {
	                    sContent +=
                        '<td id="' + (this._sInstance + "_chunk_" + j.toString(10) + "_" + i.toString(10)) + '" class="field_chunk" valign="middle">';
	                    if (this._aBlocks[j].chunks[i].type === "STATIC") {
	                        if (this._aBlocks[j].type === "SINGLE") {
	                            sContent += this._aBlocks[j].chunks[i].value;
	                        }
	                        else if (this._aBlocks[j].type === "MULTI") {
	                            var sId = this._sInstance + "_chunk_" + j.toString(10) + "_" + i.toString(10) + "_text";
	                            sContent +=
                                    '<div id="' + sId + '" style="width: ' + (this._aBlocks[j].chunks[i].value.length * this._nWidthCoefficient).toString(10) + 'px;">' + ((this._isCompletelyStaticMB(this._aBlocks[j])) ? this._aBlocks[j].chunks[i].value : "") + '</div>';
	                            oMultiBlock.chunks.push([sId, this._aBlocks[j].chunks[i].value]);
	                        }
	                    }
	                    else if (this._aBlocks[j].chunks[i].type === "DYNAMIC") {
	                        sDynamicChunk = this._aBlocks[j].chunks[i].value;
	                        if (this._isCorrectChunk(sDynamicChunk)) {
	                            sRegExp =
	                                sDynamicChunk.substring(sDynamicChunk.indexOf("^"),
                                        sDynamicChunk.indexOf("$") + 1);
	                            sLength =
	                                sDynamicChunk.substring(sDynamicChunk.indexOf("${") + 2,
                                        sDynamicChunk.indexOf("}"));
	                            if (/^\d+$/.test(sLength)) {
	                                nMaxLength = parseInt(sLength, 10);
	                                oChunk = new CFieldChunk(this,
	                                                     "chunk" + i.toString(10),
	                                                     (this._sInstance + "_chunk_" + j.toString(10) + "_" + i.toString(10)),
	                                                     sRegExp,
	                                                     nMaxLength,
	                                                     nMaxLength,
	                                                     ((this._aBlocks[j].type === "SINGLE") ? true : false));
	                                if (this._aBlocks[j].type === "MULTI") {
	                                    oMultiBlock.chunks.push(oChunk);
	                                }
	                            }
	                            else if (/^\d+,\d+$/.test(sLength)) {
	                                aLengths = sLength.split(",");
	                                nMinLength = parseInt(aLengths[0], 10);
	                                nMaxLength = parseInt(aLengths[1], 10);
	                                oChunk = new CFieldChunk(this,
	                                                     "chunk" + i.toString(10),
	                                                     (this._sInstance + "_chunk_" + j.toString(10) + "_" + i.toString(10)),
	                                                     sRegExp,
	                                                     nMinLength,
	                                                     nMaxLength,
	                                                     ((this._aBlocks[j].type === "SINGLE") ? true : false));
	                                if (this._aBlocks[j].type === "MULTI") {
	                                    oMultiBlock.chunks.push(oChunk);
	                                }
	                            }
	                            this._aDynamicChunks.push(oChunk);
	                        }
	                    }
	                    sContent +=
                        '</td>';
	                }
	                if (this._aBlocks[j].type === "MULTI") {
	                    this._aMultiBlocks.push(oMultiBlock);
	                    sContent +=
                        '    </tr>' +
                        '  </table>' +
                        '</td>' +
                        '<td id="' + this._sInstance + '_db_' + j.toString(10) + '_r" style="width: 11px; height: 68px; background: url(\'./img/ui/field/r.gif\');"></td>';
	                }
	                if (this._aBlocks[j].type === "SINGLE" ||
	                        this._isCompletelyStaticMB(this._aBlocks[j])) {
	                    sContent +=
                                '<td width="5"></td>';
	                }
	            }
	            sContent +=
                    '  </tr>' +
                    '</table>';
	            sContent += this._sFooter;
	            oPlace.innerHTML = sContent;
	            for (var i = 0; i < this._aMultiBlocks.length; i++) {
	                $(this._aMultiBlocks[i].id).onclick = $delegate(this,
	                    $callback(this._onMultiBlockClick, this._aMultiBlocks[i].chunks));
	                this._setMultiBlockOpacity(i);
	            }
	            for (var i = 0; i < this._aDynamicChunks.length; i++) {
	                this._aDynamicChunks[i].attachListener("onChunkClick", $delegate(this, this._onChunkClick));
	                this._aDynamicChunks[i].render();
	            }
	            this._setActiveChunk(0);
	            this._validate();
	        }
	    },

	    _isCorrectMultiBlock: function(nMultiBlock) {
	        if (nMultiBlock <= this._aBlocks.length - 1) {
	            for (var i = 0; i < this._aBlocks[nMultiBlock].chunks.length; i++) {
	                if (this._aBlocks[nMultiBlock].chunks[i].type === "DYNAMIC") {
	                    if (/^.+{\d+,\d+}>$/.test(this._aBlocks[nMultiBlock].chunks[i].value)) {
	                        return false;
	                    }
	                }
	            }
	            return true;
	        }
	        return false;
	    },

	    _isCorrectField: function(oField) {
	        if (!$isNoU(oField)) {
	            if (!$isNoU(oField["name"]) && oField["name"].is(String) && oField["name"].length) {
	                if (!$isNoU(oField["mask"]) && oField["mask"].is(String) && oField["mask"].length) {
	                    return true;
	                }
	            }
	        }
	        return false;
	    },

	    _isCorrectChunk: function(sChunk) {
	        return (/^<!\^.+\${(?:\d+|\d+,\d+)}>$/.test(sChunk));
	    },

	    _parseMask: function(sMask) {
	        var aResult = [];
	        var sTemp = "";
	        var nIdx = sMask.indexOf("$$");
	        if (nIdx === -1) {
	            aResult.push(this._makeBlock("SINGLE", this._parseBlock(sMask)));
	        }
	        else {
	            while (nIdx > -1) {
	                if (nIdx > 0) {
	                    aResult.push(this._makeBlock("SINGLE",
	                        this._parseBlock(sMask.substring(0, nIdx))));
	                    sMask = sMask.substr(nIdx);
	                }
	                sMask = sMask.replace("$$", "");
	                nIdx = sMask.indexOf("$$");
	                if (nIdx > -1) {
	                    aResult.push(this._makeBlock("MULTI",
	                        this._parseBlock(sMask.substring(0, nIdx))));
	                    sMask = sMask.substr(nIdx);
	                    if (sMask.length > 2) {
	                        sMask = sMask.substr(2);
	                    }
	                    else {
	                        sMask = "";
	                    }
	                }
	                nIdx = sMask.indexOf("$$");
	            }
	            if (sMask.length) {
	                aResult.push(this._makeBlock("SINGLE", this._parseBlock(sMask)));
	            }
	        }
	        return aResult;
	    },

	    _parseBlock: function(sBlock) {
	        var aResult = [];
	        var nIdx = sBlock.indexOf("<!");
	        while (nIdx > -1) {
	            if (nIdx > 0) {
	                aResult.push(this._makeChunk("STATIC", sBlock.substr(0, nIdx)));
	            }
	            sBlock = sBlock.substr(nIdx);
	            nIdx = sBlock.indexOf("}>");
	            if (nIdx > -1) {
	                aResult.push(this._makeChunk("DYNAMIC", sBlock.substr(0, nIdx + 2)));
	                sBlock = sBlock.substr(nIdx + 2);
	            }
	            else {
	                break;
	            }
	            nIdx = sBlock.indexOf("<!");
	        }
	        if (sBlock.length) {
	            aResult.push(this._makeChunk("STATIC", sBlock));
	        }
	        return aResult;
	    },

	    _makeBlock: function(sType, aChunks) {
	        return { type: sType, chunks: aChunks };
	    },

	    _makeChunk: function(sType, sValue) {
	        return { type: sType, value: sValue };
	    },

	    _getChunkNumber: function(oChunk) {
	        for (var i = 0; i < this._aDynamicChunks.length; i++) {
	            if (this._aDynamicChunks[i] === oChunk) {
	                return i;
	            }
	        }
	        return -1;
	    },

	    _changeChunk: function(sDirection) {
	        var nCurrentChunk = this._getChunkNumber(this._oCurrentChunk);
	        var nMultiBlockNum = -1;
	        var nChunkPos = -1;
	        if (sDirection === "PREVIOUS") {
	            nMultiBlockNum = this._getMultiBlockNum(this._oCurrentChunk);
	            if (nMultiBlockNum > -1) {
	                nChunkPos = this._getChunkNumOnMultiBlock(nMultiBlockNum, this._oCurrentChunk);
	                if (nChunkPos > 0) {
	                    if (this._aMultiBlocks[nMultiBlockNum].chunks[nChunkPos - 1].is(Array)) {
	                        $(this._aMultiBlocks[nMultiBlockNum].chunks[nChunkPos - 1][0]).innerHTML = "";
	                    }
	                }
	            }
	            if (nCurrentChunk > 0) {
	                this._setActiveChunk(nCurrentChunk - 1);
	            }
	        }
	        else if (sDirection === "NEXT") {
	            nMultiBlockNum = this._getMultiBlockNum(this._oCurrentChunk);
	            if (nMultiBlockNum > -1) {
	                nChunkPos = this._getChunkNumOnMultiBlock(nMultiBlockNum, this._oCurrentChunk);
	                if (nChunkPos < this._aMultiBlocks[nMultiBlockNum].chunks.length - 1) {
	                    if (this._aMultiBlocks[nMultiBlockNum].chunks[nChunkPos + 1].is(Array)) {
	                        $(this._aMultiBlocks[nMultiBlockNum].chunks[nChunkPos + 1][0]).innerHTML =
	                            this._aMultiBlocks[nMultiBlockNum].chunks[nChunkPos + 1][1];
	                    }
	                }
	            }
	            if (nCurrentChunk < (this._aDynamicChunks.length - 1)) {
	                this._setActiveChunk(nCurrentChunk + 1);
	            }
	        }
	    },

	    _setActiveChunk: function(nNumber) {
	        var nMultiBlock = -1;
	        for (var i = 0; i < this._aDynamicChunks.length; i++) {
	            this._aDynamicChunks[i].setActive(false);
	        }
	        if (!$isNoU(this._aDynamicChunks[nNumber])) {
	            this._oCurrentChunk = this._aDynamicChunks[nNumber];
	            nMultiBlock = this._getMultiBlockNum(this._oCurrentChunk);
	            if (nMultiBlock > -1) {
	                if (nMultiBlock !== this._nCurrentMultiBlock) {
	                    this._nCurrentMultiBlock = nMultiBlock;
	                    this._setActiveMultiBlock(nMultiBlock, true);
	                }
	                else {
	                    this._oCurrentChunk.setActive(true);
	                }
	            }
	            else {
	                this._nCurrentMultiBlock = -1;
	                this._oCurrentChunk.setActive(true);
	            }
	        }
	        for (var i = 0; i < this._aMultiBlocks.length; i++) {
	            if (i !== nMultiBlock) {
	                this._setActiveMultiBlock(i, false);
	            }
	        }
	    },

	    _getMultiBlockNum: function(oChunk) {
	        for (var i = 0; i < this._aMultiBlocks.length; i++) {
	            for (var j = 0; j < this._aMultiBlocks[i].chunks.length; j++) {
	                if (this._aMultiBlocks[i].chunks[j] === oChunk) {
	                    return i;
	                }
	            }
	        }
	        return -1;
	    },

	    _getChunkNumOnMultiBlock: function(nMultyBlock, oChunk) {
	        if (nMultyBlock <= this._aMultiBlocks.length - 1) {
	            for (var i = 0; i < this._aMultiBlocks[nMultyBlock].chunks.length; i++) {
	                if (this._aMultiBlocks[nMultyBlock].chunks[i] === oChunk) {
	                    return i;
	                }
	            }
	        }
	        return -1;
	    },

	    _setActiveMultiBlock: function(nBlock, bIsActive) {
	        var oCurrentChunk = null;
	        if (nBlock <= this._aMultiBlocks.length - 1) {
	            var oL = $((this._aMultiBlocks[nBlock].id + "_l"));
	            var oC = $(this._aMultiBlocks[nBlock].id);
	            var oR = $((this._aMultiBlocks[nBlock].id + "_r"));
	            oC.style.background =
                    "url('./img/ui/field/c" + ((bIsActive) ? "_a" : "") + ".gif') repeat-x";
	            oL.style.background =
                    "url('./img/ui/field/l" + ((bIsActive) ? "_a" : "") + ".gif')";
	            oR.style.background =
                    "url('./img/ui/field/r" + ((bIsActive) ? "_a" : "") + ".gif')";
	            if ($bool(bIsActive)) {
	                for (var i = 0; i < this._aMultiBlocks[nBlock].chunks.length; i++) {
	                    if (this._aMultiBlocks[nBlock].chunks[i].is(CFieldChunk)) {
	                        if (!this._aMultiBlocks[nBlock].chunks[i].isFull()) {
	                            oCurrentChunk = this._aMultiBlocks[nBlock].chunks[i];
	                            break;
	                        }
	                    }
	                    else if (this._aMultiBlocks[nBlock].chunks[i].is(Array)) {
	                        $(this._aMultiBlocks[nBlock].chunks[i][0]).innerHTML =
	                                this._aMultiBlocks[nBlock].chunks[i][1];
	                    }
	                }
	                if ($isNoU(oCurrentChunk)) {
	                    for (var i = this._aMultiBlocks[nBlock].chunks.length - 1; i >= 0; i--) {
	                        if (this._aMultiBlocks[nBlock].chunks[i].is(CFieldChunk)) {
	                            oCurrentChunk = this._aMultiBlocks[nBlock].chunks[i];
	                            break;
	                        }
	                    }
	                }
	                this._oCurrentChunk = oCurrentChunk;
	                this._oCurrentChunk.setActive(true);
	                this._setMultiBlockOpacity(nBlock);
	            }
	        }
	    },

	    _setMultiBlockOpacity: function(nBlock) {
	        var oL = $((this._aMultiBlocks[nBlock].id + "_l"));
	        var oC = $(this._aMultiBlocks[nBlock].id);
	        var oR = $((this._aMultiBlocks[nBlock].id + "_r"));
	        if (this._isValidMultiBlock(nBlock)) {
	            setOpacity(oL.id, 100);
	            setOpacity(oC.id, 100);
	            setOpacity(oR.id, 100);
	        }
	        else {
	            setOpacity(oL.id, 60);
	            setOpacity(oC.id, 60);
	            setOpacity(oR.id, 60);
	        }
	    },

	    _isCompletelyStaticMB: function(oMultiBlock) {
	        if (!$isNoU(oMultiBlock) &&
	            oMultiBlock.type === "MULTI" &&
	            (!$isNoU(oMultiBlock.chunks) && oMultiBlock.chunks.is(Array))) {
	            for (var i = 0; i < oMultiBlock.chunks.length; i++) {
	                if (oMultiBlock.chunks[i].type !== "STATIC") {
	                    return false;
	                }
	            }
	            return true;
	        }
	        return false;
	    },

	    _isValidMultiBlock: function(nBlock) {
	        if (nBlock <= this._aMultiBlocks.length - 1) {
	            for (var i = 0; i < this._aMultiBlocks[nBlock].chunks.length; i++) {
	                if (this._aMultiBlocks[nBlock].chunks[i].is(CFieldChunk)) {
	                    if (!this._aMultiBlocks[nBlock].chunks[i].isValid()) {
	                        return false;
	                    }
	                }
	            }
	            return true;
	        }
	        return false;
	    },

	    isValid: function() {
	        for (var i = 0; i < this._aDynamicChunks.length; i++) {
	            if (!this._aDynamicChunks[i].isValid()) {
	                return false;
	            }
	        }
	        return ((new RegExp(this._sRegExp)).test(this.getValue()));
	    },

	    isFull: function() {
	        for (var i = 0; i < this._aDynamicChunks.length; i++) {
	            if (!this._aDynamicChunks[i].isFull()) {
	                return false;
	            }
	        }
	        return true;
	    },

	    isEmpty: function() {
	        for (var i = 0; i < this._aDynamicChunks.length; i++) {
	            if (!this._aDynamicChunks[i].isEmpty()) {
	                return false;
	            }
	        }
	        return true;
	    },

	    _validate: function() {
	        this.notify("onStatusChange", { isValid: this.isValid() });
	    },

	    _onMultiBlockClick: function(sender, eargs) {
	        var aChunks = [];
	        if (!$isNoU(sender) && sender.is(Array)) {
	            aChunks = sender;
	        }
	        else if (!$isNoU(eargs) && eargs.is(Array)) {
	            aChunks = eargs;
	        }
	        this.click();
	        for (var i = 0; i < aChunks.length; i++) {
	            if (aChunks[i].is(CFieldChunk)) {
	                if (!aChunks[i].isFull()) {
	                    this._setActiveChunk(this._getChunkNumber(aChunks[i]));
	                    return;
	                }
	            }
	        }
	        for (var i = aChunks.length - 1; i >= 0; i--) {
	            if (aChunks[i].is(CFieldChunk)) {
	                this._setActiveChunk(this._getChunkNumber(aChunks[i]));
	                return;
	            }
	        }
	    },

	    _onChunkClick: function(sender, eargs) {
	        var nCurrentChunk = this._getChunkNumber(sender);
	        this._setActiveChunk(nCurrentChunk);
	        this.click();
	    },

	    _getFirstNoValidChunk: function() {
	        for (var i = 0; i < this._aDynamicChunks.length; i++) {
	            if (!this._aDynamicChunks[i].isValid()) {
	                return i;
	            }
	        }
	        return (this._aDynamicChunks.length - 1);
	    },

	    getValue: function() {
	        var sValue = "";
	        var nCounter = 0;
	        for (var i = 0; i < this._aBlocks.length; i++) {
	            for (var j = 0; j < this._aBlocks[i].chunks.length; j++) {
	                if (this._aBlocks[i].chunks[j].type === "STATIC") {
	                    if (!this._bStrip) {
	                        sValue += this._aBlocks[i].chunks[j].value;
	                    }
	                }
	                else if (this._aBlocks[i].chunks[j].type === "DYNAMIC") {
	                    if (nCounter <= this._aDynamicChunks.length) {
	                        sValue += this._aDynamicChunks[nCounter].getValue();
	                        nCounter++;
	                    }
	                }
	            }
	        }
	        return sValue;
	    },

	    activate: function(sElementPos) {
	        if (this._aDynamicChunks.length) {
	            if (sElementPos === "FIRST") {
	                this._setActiveChunk(0);
	            }
	            else if (sElementPos === "LAST") {
	                this._setActiveChunk(this._aDynamicChunks.length - 1);
	            }
	        }
	    },

	    deactivate: function() {
	        this._oCurrentChunk = null;
	        this._nCurrentMultiBlock = -1;
	        this._setActiveChunk(-1);
	    },

	    processValue: function(sValue) {
	        var oCurrentChunk = this._oCurrentChunk;
	        var nMultyBlock = -1;
	        switch (sValue) {
	            case "BACKSPACE":
	                oCurrentChunk.setValue(oCurrentChunk.getValue().substr(0, oCurrentChunk.getValue().length - 1));
	                if (this._aMultiBlocks.length) {
	                    nMultyBlock = this._getMultiBlockNum(oCurrentChunk);
	                    if (nMultyBlock > -1) {
	                        this._setMultiBlockOpacity(nMultyBlock);
	                    }
	                }
	                if (oCurrentChunk.isEmpty()) {
	                    this._changeChunk("PREVIOUS");
	                }
	                break;
	            case "CLEAR":
	                this._aDynamicChunks = [];
	                this._aMultiBlocks = [];
	                this._oCurrentChunk = null;
	                this._nCurrentMultiBlock = -1;
	                this._paint();
	                break;
	            case "TAB":
	                nMultyBlock = this._getMultiBlockNum(oCurrentChunk);
	                if (nMultyBlock > -1) {
	                }
	                this._changeChunk("NEXT");
	                break;
	            default:
	                if (!oCurrentChunk.isFull()) {
	                    oCurrentChunk.setValue(oCurrentChunk.getValue() + sValue);
	                    if (this._aMultiBlocks.length) {
	                        nMultyBlock = this._getMultiBlockNum(oCurrentChunk);
	                        if (nMultyBlock > -1) {
	                            this._setMultiBlockOpacity(nMultyBlock);
	                        }
	                    }
	                }
	                if (oCurrentChunk.isFull()) {
	                    if (this._getChunkNumber(oCurrentChunk) < this._aDynamicChunks.length - 1) {
	                        this._changeChunk("NEXT");
	                    }
	                    else {
	                        this._setActiveChunk(this._getFirstNoValidChunk());
	                    }
	                }
	                break;
	        }
	        this._validate();
	    },

	    click: function() {
	        this.notify("onClick");
	    }
	}
);