(function(){
    window.upd={};
    var it=window.upd;
    var url2 = window.location.href;

    it.run = function(source, url, scroll) {
        //console.log(source);
        var scroll2;
        url2 = url === undefined || url === null || url === '' ? url2 : url;
        if (typeof source == 'object') {
            if (source.length !== undefined && source.length > 0) {
                //console.log('массив '+source.length);
                for (var i = 0; i < source.length; i++) {
                    //console.log('итерация '+i);
                    scroll2 = typeof scroll == 'number' && scroll == i ? true : false;
                    iter(source[i], url2, scroll2);
                }
            } else {
                //console.log('объект');
                iter(source, url2, scroll);
            }
        } else {
            //console.log('строка');
            updPortlet(source, url2, scroll);
        }
        return false;
    }

    it.ref = function(url) {
        window.location.href = url!==undefined&&url!==null?url:url2;
        return false;
    }
    
    it.location = function() {
        
    }
    
    it.location.href = function() {
        return url2;
    }
    
    it.form = function(form) {
        form = byId(form);
        var arr = [], url = url2.split('?')[0], data = formToJSON(form);
        for(var p in data) {
            if (data[p].length > 0)
                arr.push(p + '=' + data[p]);
        }
        url = form.action + (arr.length > 0 ? '?' + arr.join('&') : '');
        it.run(form.parentNode, url);
        return false;
    }

    function iter(source, url2, scroll) {
        if (source === null) return;
        var parent = source.parentNode, tmpId, pRef = false;
        while(true) {
            try {
                tmpId = parent.getAttribute('id').substr(0, 4);
                if (tmpId == 'pcnt') break;
            } catch (e) {}
            if (parent === document.body){
                parent = false;
                break;
            }
            parent = parent.parentNode;
        }
        pRef = parent !== false ? parent.getAttribute('id').split('pcnt')[1] : false;
        if (pRef !== false)
            updPortlet(pRef, url2, scroll);
    }

    function myGetParameter(queryString, parameter) {
        var paramRegExp = new RegExp("[\\?&]" + parameter + "=(\\w*)");
        var result = queryString.match(paramRegExp);
        return result == null ? null : result[1];
    }

    function updPortlet(pRef, pUrl, scroll) {
        if (pRef && pUrl) {
            //console.log(pRef+' '+pUrl);
            if (pRef.indexOf('-')>-1) {
                pRef = pRef.split('-');
                updPortlet(pRef[0], pUrl, scroll);
            }
            if (document.getElementById) {
                pRef = escape(pRef);
                pUrl = pUrl.split('#')[0];
                var debugLevel = myGetParameter(window.location.search, '_debug');
                var url = pUrl + (pUrl.indexOf('?') == -1 ? '?' : '&') + '_portletRefresh=' + pRef
                + (debugLevel != null ? '&_debug=' + debugLevel : '');
                if (window.XMLHttpRequest)
                    var req = new XMLHttpRequest();
                else if (window.ActiveXObject)
                    var req = new ActiveXObject('Microsoft.XMLHTTP');
                fadeOpen(pRef);
                req.onreadystatechange = function() {
                    if (req.readyState == 4)
                        if (req.status == 200) {
                            var result;
                            //alert(req.responseText);
                            var ibeg=req.responseText.indexOf('<DIV id="pcnt'+pRef+'">');
                            var iend=req.responseText.indexOf('</DIV></TD></TR>\n\
</TABLE>\n\
');
                            var offset = 15+pRef.length;
                            result=req.responseText.substring((ibeg+offset),iend);
                            fadeClose(pRef);
                            callback(pRef, result);
                        }
                }
                //alert(url);
                req.open('GET', url, true);
                req.send(null);
                function callback(pRef, data) {
                    //alert(data);
                    var pcnt = document.getElementById('pcnt' + pRef);
                    if (pcnt!==null) {
                        pcnt.innerHTML = data;
                        if (location.host=='ekburg.munrus.ru')
                            console.log(data);
                        reinitScripts(pcnt);
                        switch (scroll) {
                            case true:
                                pcnt.scrollIntoView();
                                break;
                        }
                    }

                }
                function reinitScripts(l)
                {
                    var scripts = l.getElementsByTagName('script');
                    var count = scripts.length;
                    var removeAr = [];
                    for(var j = 0; j < count; j++)
                    {
                        var oldScript = scripts[j];
                        if (oldScript.text.indexOf('document.write') == -1) {
                            var newScript = document.createElement('script');
                            newScript.type = 'text/javascript';
                            if(oldScript.src) newScript.src = oldScript.src
                            else newScript.text = oldScript.text;
                            l.appendChild(newScript);
                            removeAr.push(oldScript);
                        }
                    }
                    for(var i = 0; i < removeAr.length; i++)
                    {
                        var oldScript = removeAr[i];
                        oldScript.parentNode.removeChild(oldScript);
                    }
                }
            }
            else
                window.location.href = pUrl;
        }
        return false;
    }

    function fadeOpen(pRef) {
        var wrFader = document.createElement('div');
        wrFader.innerHTML = '&nbsp;';
        with(wrFader.style) {
            position = 'relative';
            height = 0 + 'px';
            textIndent = - 9999 + 'px';
            }
        var pcnt = document.getElementById('pcnt' + pRef);
        if (pcnt !== null) {
            pcnt.appendChild(wrFader);
            var fader = document.createElement('div');
            fader.className = 'faderWhite';
            fader.id = 'fader'+pRef;
            with(fader.style) {
                display = 'block';
                position = 'absolute';
                bottom = 0 + 'px';
                left = 0 + 'px';
                height = pcnt.offsetHeight + 'px';
                width = pcnt.offsetWidth + 'px';
                }
            wrFader.innerHTML = '';
            wrFader.appendChild(fader);
        }
    }
    function fadeClose(pRef) {
        var fader = document.getElementById('fader'+pRef);
        if (fader !== null)
            fader.parentNode.removeChild(fader);
    }
})()
