(function () {

/* $Id: PageNavigator.js,v 1.3 2008/09/12 11:09:28 lsa Exp $ */   

window.SM = typeof window.SM != 'undefined' ? window.SM : new Object();
SM.COMMON = typeof SM.COMMON != 'undefined' ? SM.COMMON : new Object();

if (typeof SM.COMMON.PN == 'undefined') {

    var navigators = {};

    function replacePrams(url, params) {
        var u = url.split('?');
        var result = u[0] + '?';

        for (var p in params) {
            result += '&' + p + '=' + params[p];
        }

        if (u.length == 2) {
            var parr = u[1].split('&');

            for (var i in parr) {
                if (parr[i] != '') {
                    var p = parr[i].split('=');
    
                    if (typeof params[p[0]] == 'undefined') {
                        result += '&' + p[0] + '=' + (p.length == 2 ? p[1] : '');
                    }
                }
            }
        }

        return result;
    };

    function rppHandler(options) {
        if ((typeof this.confirmHandler == 'function')
            && !this.confirmHandler.apply(this, [options])) return;

        if (typeof this.rppChangeHandler == 'function') {
            this.rppChangeHandler.apply(this, [options]);
        }
        else if ((this.formName) && (document.forms[this.formName])) {
            var f = document.forms[this.formName];
            var rpp = parseInt(options.rpp);

            f.elements[this.rppParamName].value = isNaN(rpp) ? 0 : rpp;
            f.elements[this.rsParamName].value = 0;
            f.submit();
        }
        else {
            var rpp = parseInt(options.rpp);
            var params = {};

            if (this.rsParamName) params[this.rsParamName] = 0;
            if (this.rppParamName) params[this.rppParamName] = isNaN(rpp) ? 0 : rpp;

            window.location.href = replacePrams(window.location.href, params);
        }
    };

    function rsHandler(options) {
        if ((typeof this.confirmHandler == 'function')
            && !this.confirmHandler.apply(this, [options])) return;

        if (typeof this.rsChangeHandler == 'function') {
            this.rsChangeHandler.apply(this, [options]);
        }
        else if ((this.formName) && (document.forms[this.formName])) {
            var f = document.forms[this.formName];
            var rs = parseInt(options.rs);

            f.elements[this.rsParamName].value = isNaN(rs) ? 0 : rs;
            f.submit();
        }
        else {
            var rs = parseInt(options.rs);
            var params = {};

            if (this.rsParamName) params[this.rsParamName] = isNaN(rs) ? 0 : rs;

            window.location.href = replacePrams(window.location.href, params);
        }
    };


    SM.COMMON.PN = {

        register: function (options) {
            if (options && options.id) {
                navigators[options.id] = options;
            }
        },

        changerpp: function (options) {
            var n = navigators[options.id];
            if (n) rppHandler.apply(n, [options]);
        },

        changers: function (options) {
            var n = navigators[options.id];
            if (n) rsHandler.apply(n, [options]);
        }

    };

};

})();
