if( "undefined" === typeof Smooth_Reload || !Smooth_Reload) {
    Smooth_Reload = {
        rBlocks : [],
        alreadyLoggedIn : false,
        fbApiKey : '',
        inProcessCnt : 0,
        push : function (rBlock) {
            var i, found, blocks = false;
            if(this.Smooth_Reload) {
                blocks = this.Smooth_Reload.rBlocks;
            } else {
                blocks = this.rBlocks;
            }
            for(i in blocks) {
                if(blocks.hasOwnProperty(i)) {
                    if( blocks[i].divId === rBlock.divId) {
                        found = true;
                        break;
                    }
                }
            }
            if( !found) {
                this.rBlocks.push(rBlock);
            }
            return;
        },
        appendDiv : function(content, divId) {
            // find captcha code
            var arr = content.match(new RegExp('src="http://api.recaptcha.net/challenge\\?k=([^"]+)"','im'));
            if( arr) {
                var captchaId = arr[1];
            }
            // remove all js from loaded div to prevent incorrect behavior
            var js_ScriptFragment = '(?:<script(\n|\r|.)*?>)((\n|\r|.)*?)(?:<\/script>)';
            var matchAll = new RegExp(js_ScriptFragment, 'img');
            // append content to specified div
            $("#"+divId).html(content.replace(matchAll, ''));
            var frm = document.getElementById('comments_form');
            if('undefined' !== typeof frm && 'undefined' !== typeof commentsFormAction) {
                frm.action = commentsFormAction;
            }
            // append captcha if any
            if(captchaId) {
                Recaptcha.create(captchaId, $('#capt-label+dd').get(0), {
                    theme: 'red',
                    tabindex: 0,
                    callback: Recaptcha.focus_response_field
                });
            }
        },
        refresh : function (profileReload) {
            if( isProfilePage() && !profileReload) {
                return pageReload();
            }
            var blocks = Smooth_Reload.rBlocks;
            var i, divId, controller, params, url='';
            for(i in blocks) {
                if(blocks.hasOwnProperty(i)) {
                    divId = blocks[i].divId;
                    controller = blocks[i].controller;
                    if( !controller) {
                        controller = divId;
                    }
                    params = blocks[i].params;
                    if( 'undefined' === typeof params) {
                        params = {};
                    } else if( 'function' === typeof params) {
                        params = params();
                    }
                    params.divId = divId;
                    url = "/" + controller;
                    Smooth_Reload.inProcessCnt++;
                    $("div#" + divId).load(url, params, function () {
                        if(typeof FB != 'undefined') {
                            FB.XFBML.parse();
                            // I hate this but it's necessary because of Zend Form Captcha
                            $('#recaptcha_widget_div').appendTo($('li.captchaElem'));
                        }
                    });
                }
            }
            return '';
        },
        lin : function() {
            if( !Smooth_Reload.alreadyLoggedIn) {
                Smooth_Reload.refresh();
            }
            if( "undefined" !== typeof $("#dialogLocal").dialog) {
                $('#dialogLocal').dialog('close');
            }
            if( "undefined" !== typeof $("#dialogSingin").dialog) {
                $('#dialogSingin').dialog('close');
            }
            if( "undefined" !== typeof $("#dialogSingup").dialog) {
                $('#dialogSingup').dialog('close');
            }
            $('.vote .member-links').hide();
            Smooth_Reload.alreadyLoggedIn = true;
        },
        lout : function() {
            Smooth_Reload.refresh();
            if( "undefined" !== typeof $("#dialogLocal").dialog) {
                $('#dialogLocal').dialog('close');
            }
            if( "undefined" !== typeof $("#dialogFbExt").dialog) {
                $('#dialogFbExt').dialog('close');
            }
            if( "undefined" !== typeof $("#dialogSingin").dialog) {
                $('#dialogSingin').dialog('close');
            }
            if( "undefined" !== typeof $("#dialogSingup").dialog) {
                $('#dialogSingup').dialog('close');
            }
            Smooth_Reload.alreadyLoggedIn = false;
        }
    };
}

function isProfilePage() {
    var location = window.location.href;
    var profile = location.match('/user');
    return profile;
}

function pageReload() {
    window.location.reload();
}
