/**
* @package Kibero.CMS
* @copyright Авторские права (C) since 2008 Novalex. Все права защищены.
* @license Смотрите LICENSE.php
* Для просмотра подробностей и замечаний об авторском праве, смотрите файл COPYRIGHT.php.
*/

if( typeof( Kibero) === 'undefined') var Kibero = {};
Kibero.set_scid = function( scid) { Kibero.scid = scid }
Kibero.set_tmpl_path = function( path) { Kibero.tmpl_path = path }
Kibero.message = function ( mess, type, dt) {
    var status = $('status-info')
    if( type != 'simple') {
        status.set( 'html', '<div class="mesico"></div>'+mess);
        status.className = type != 'message' ? type+' message' : type;
    } else {
        status.set( 'html', mess);
    }
    status.style.display = 'block';
    if( dt == null) {
        switch( type) {
            case 'message': dt = 3000; break
            default: dt = 10000; break
        }
    } else if( !dt) return
    window.setTimeout("$('status-info').style.display = 'none'", dt)
}
Kibero.info = function( mess, dt) { Kibero.message( mess, 'message', dt)}
Kibero.error = function( mess, dt) { Kibero.message( mess, 'error_message', dt)}
Kibero.warning = function( mess, dt) { Kibero.message( mess, 'warning_message', dt)}
Kibero.success = 'Операция успешно выполнена'
Kibero.error_default = 'Извините, произошла непредвиденная ошибка. '
Kibero.db_error = 'Извините, произошла непредвиденная ошибка базы данных. '
Kibero.try_again = 'Попробуйте перегрузить страницу и снова выполнить операцию.'
Kibero.tell_developer = 'Пожалуйста, сообщите разработчику'
Kibero.need_auth = 'Сессия пользователя завершена. Пожалуйста, обновите страницу и авторизуйтесь'
Kibero.access_denied = 'Извините, но у Вас нет доступа к этой операции'
Kibero.checkResponseError = function( responseText, emptyIsError) {
    if( !responseText && emptyIsError) {Kibero.error( Kibero.error_default+Kibero.tell_developer);return true}
    else if( responseText == 'need_auth') {Kibero.info( Kibero.need_auth, 0);return true}
    else if( responseText == 'access_denied') {Kibero.warning( Kibero.access_denied);return true}
    else if( responseText == 'db-error') {Kibero.error( Kibero.db_error+Kibero.tell_developer);return true}
    else if( responseText == 'runtime-error') {Kibero.error( Kibero.error_default+Kibero.try_again);return true}
    else if( responseText == 'page_not_found-error') {Kibero.error( Kibero.error_default+Kibero.tell_developer);return true}
    return false
}
Kibero.checkSimpleResponseError = function( responseText, emptyIsError) {
    var mes = ''
    if( !responseText && emptyIsError) mes = Kibero.error_default+Kibero.tell_developer
    else if( responseText == 'need_auth') mes = Kibero.need_auth
    else if( responseText == 'access_denied') mes = Kibero.access_denied
    else if( responseText == 'db-error') mes = Kibero.db_error+Kibero.tell_developer
    else if( responseText == 'runtime-error') mes = Kibero.error_default+Kibero.try_again
    else if( responseText == 'page_not_found-error') mes = Kibero.error_default+Kibero.tell_developer
    if( mes != '') {
        Kibero.message( mes, 'simple')
        return true
    } else
        return false
}
Kibero.message_response = function( responseText) {
    var arr = responseText.split("@mess_type@")
    var type = 'message'
    if( arr.length > 1) {
        type = arr[arr.length-1]
        responseText = arr[0]; 
    }
    if( responseText != '') Kibero.message( responseText, type)
}
Kibero.getFormByID = function( form_id) {
    if( form_id == null) form_id = 'adminForm'
    return $(form_id)
}
Kibero.setForm = function( form_id) {
    Kibero.form = Kibero.getFormByID( form_id);
}
Kibero.setTForm = function( form_id) {
    Kibero.tform = Kibero.getFormByID( form_id);
}
Kibero.getForm = function() {
    if( typeof( Kibero.form) !== 'undefined' && Kibero.form != null) return Kibero.form
    Kibero.form = Kibero.getFormByID()
    if( Kibero.form == null) Kibero.form = document.adminForm
    return Kibero.form
}
Kibero.getTForm = function() {
    return Kibero.tform != null ? Kibero.tform : Kibero.getForm()
}
Kibero.stateLoading = function(start) {
    var loading = $('admin-loading'); if( loading == null) return
    if( start) {
        if( !loading.get('html')) loading.set('html', '<img align="baseline" src="'+Kibero.tmpl_path+'images/loading.gif" alt="..." />')
    } else loading.set('html', '')
}
/* default */
Kibero.submitform = function( task) {
    var f = Kibero.getTForm()
    if( task != null) f.task.value = task
    f.submit()
}
/* default */
Kibero.submitbutton = function( task, apply) {
    if( apply != null) return true
    Kibero.submitform( task);
}
Kibero.ch_apply = function() {
    if( !Kibero.submitbutton( 'apply', 1)) return false
    Kibero.getTForm().set('send', {
        url:'ajax.index.php?task=apply',
        method: 'post',
        async: false,
        onRequest: function() {$('tb-apply').className='tb-load'},
        onSuccess: function( responseText) {
            Kibero.message_response( responseText)
            $('tb-apply').className='tb-apply'
        },
        onFailure: function() {Kibero.error( Kibero.error_default+Kibero.try_again)}
    }).send()
    return false
}
Kibero.ltrim = function(str){
    var whitespace = new String(" \t\n\r");
    var s = new String(str);
    if( whitespace.indexOf(s.charAt(0)) != -1) {
        var j=0, i = s.length;
        while( j < i && whitespace.indexOf(s.charAt(j)) != -1) j++;
        s = s.substring(j, i);
    }
    return s;
}
Kibero.rtrim = function(str) {
    var whitespace = new String(" \t\n\r");
    var s = new String(str);
    if( whitespace.indexOf(s.charAt(s.length-1)) != -1) {
        var i = s.length - 1;
        while( i >= 0 && whitespace.indexOf(s.charAt(i)) != -1) i--;
        s = s.substring(0, i+1);
    }
    return s;
}
Kibero.trim = function(str){return Kibero.rtrim(Kibero.ltrim(str))}
Kibero.configValidator = null
Kibero.configInit = function( adminForm, noElementChangeEvent) {
    Kibero.setForm( adminForm)
    var f = Kibero.getForm(), el
    var ch = !noElementChangeEvent ? Kibero.configChange : function(){$(f.get('id')+'-error-'+this.name).set('html','')}
    for(var i = 0; i < f.elements.length; i++) {
        el = f.elements[i]
        if( el.getAttribute( 'config') == null) continue
        switch( el.type) {
            case 'text': 
            case 'textarea': el.onkeyup = ch; break
            default: el.onchange = ch
        } 
    }
    Locale.use("ru-RU");
    Locale.define("ru-RU",'FormValidator','email','Пожалуйста, введите корректный Email. Например: "info@kibero.ru"');
    Kibero.configValidator = new Form.Validator.Inline(f,{
        errorPrefix:'',
        serial:false,
        stopOnFailure:false,
        evaluateFieldsOnBlur:false,
        evaluateFieldsOnChange:false,
        evaluateOnSubmit:false,
        scrollToErrorsOnSubmit:false,
        onElementFail: !noElementChangeEvent ? function(el,ar) {
            if( el.value != el.defaultValue)
                $(f.get('id')+'-action-'+el.name).set('html','<a class="default" onclick="return Kibero.configCancel(\''+el.name+'\')" href="javascript:" title="Убрать изменения?">Отменить?</a>')
            else
                $(f.get('id')+'-action-'+el.name).set('html','')
        } : null
    })
    Kibero.configValidator.addAllThese([
        ['validate-integer-positive', {
            errorMsg: function() { return 'Пожалуйста, введите в это поле положительное целое число'},
            test: function( element) {
                return Form.Validator.getValidator('IsEmpty').test(element) || !(element.get('value') === '0') && (/^([1-9]\d*|0)$/).test(element.get('value'));
            }
        }],
        ['validate-integer-unsigned', {
            errorMsg: function() { return 'Пожалуйста, введите в это поле положительное целое число'},
            test: function( element) {
                return Form.Validator.getValidator('IsEmpty').test(element) || !(element.get('value') < 0) && (/^([1-9]\d*|0)$/).test(element.get('value'));
            }
        }],
        ['validate-numeric-unsigned', {
            errorMsg: function() { return 'Пожалуйста, введите в это поле положительное число'},
            test: function( element) {
                return Form.Validator.getValidator('IsEmpty').test(element) || !(element.get('value') < 0) && (/^(?:0$0(?=\d*\.)|[1-9]|0)\d*(\.\d+)?$/).test(element.get('value'));
            }
        }],
        ['emptyMinLength',{
            errorMsg: function(element, props) {
                props.minLength = props.emptyMinLength
                return Form.Validator.getValidator('minLength').getError( element, props);
            },
            test: function(element, props) {
                if( element.get('value').length == 0) return true
                props.minLength = props.emptyMinLength
                return Form.Validator.getValidator('minLength').test( element, props);
            }    
        }],
        ['minCount', {
            errorMsg: function(element, props) { return 'Это число не может быть меньше '+props.minCount},
            test: function(element, props) {
                return element.get('value') >= props.minCount;
            }
        }],
        ['validate-kibero-sef', {
            errorMsg: function() {
                return Kibero.errorSefMessage
            },
            test: function(el) {
                var f = Kibero.getForm()
                new Request({
                    url: 'ajax.index.php?comp='+f.comp.value+'&act='+f.act.value+'&task=validate-kibero-sef',
                    async: false,
                    onRequest: function() {Kibero.stateLoading(true)},
                    onSuccess: function(responseText) {
                        if( Kibero.checkResponseError( responseText, false)) return
                        Kibero.errorSefMessage = Kibero.trim( responseText)
                    },
                    onFailure: function() {Kibero.error( Kibero.error_default+Kibero.try_again)},
                    onComplete: function() {Kibero.stateLoading(false)}
                }).send('value='+el.value+'&object='+f.object.value+'&id='+f.id.value);
                return Kibero.errorSefMessage == ''
            }
        }],
        ['reg-login-unique', {
            errorMsg: function() {
                return Kibero.errorLoginMessage
            },
            test: function(el) {
                var value = Kibero.trim( el.value), f = Kibero.getForm()
                if( value == '') return
                new Request({
                    url: 'ajax.index.php?comp='+f.comp.value+'&task=reg-unique',
                    async: false,
                    onRequest: function() {Kibero.stateLoading(true)},
                    onSuccess: function(responseText) {
                        if( Kibero.checkResponseError( responseText, false)) return
                        Kibero.errorLoginMessage = Kibero.trim( responseText)
                    },
                    onFailure: function() {Kibero.error( Kibero.error_default+Kibero.try_again)},
                    onComplete: function() {Kibero.stateLoading(false)}
                }).send('value='+value+'&field=login'+'&id='+f.id.value+'&'+Kibero.scid+'=1');
                return Kibero.errorLoginMessage == ''
            }
        }],
        ['reg-email-unique', {
            errorMsg: function() {
                return Kibero.errorEmailMessage
            },
            test: function(el) {
                var value = Kibero.trim( el.value), f = Kibero.getForm()
                if( value == '') return
                new Request({
                    url: 'ajax.index.php?comp=users&task=reg-unique',
                    async: false,
                    onRequest: function() {Kibero.stateLoading(true)},
                    onSuccess: function(responseText) {
                        if( Kibero.checkResponseError( responseText, false)) return
                        Kibero.errorEmailMessage = Kibero.trim( responseText)
                    },
                    onFailure: function() {Kibero.error( Kibero.error_default+Kibero.try_again)},
                    onComplete: function() {Kibero.stateLoading(false)}
                }).send('value='+value+'&field=email'+'&id='+f.id.value+'&'+Kibero.scid+'=1');
                return Kibero.errorEmailMessage == ''
            }
        }],
        ['reg-compare-password', {
             errorMsg: function() {
                return 'Пароли не совпадают'
            },
            test: function(el) {
                var f = Kibero.getForm()
                if( f.password == null || (Kibero.trim(f.password.value) == '' && Kibero.trim(el.value) == '')) return true
                return el.value == f.password.value
            }
        }],
        ['reg-captcha-validate', {
            errorMsg: function() {
                return Kibero.errorCaptchaMessage
            },
            test: function(el) {
                var value = Kibero.trim( el.value), f = Kibero.getForm()
                if( value == '') return
                new Request({
                    url: 'ajax.index.php?comp=users&task=reg-captcha-validate',
                    async: false,
                    onRequest: function() {Kibero.stateLoading(true)},
                    onSuccess: function(responseText) {
                        if( Kibero.checkResponseError( responseText, false)) return
                        Kibero.errorCaptchaMessage = Kibero.trim( responseText)
                    },
                    onFailure: function() {Kibero.error( Kibero.error_default+Kibero.try_again)},
                    onComplete: function() {Kibero.stateLoading(false)}
                }).send('value='+value+'&'+Kibero.scid+'=1');
                return Kibero.errorCaptchaMessage == ''
            }            
        }],
        ['nonegative',{            
            errorMsg: function() { return 'Пожалуйста, сделайте выбор'},
            test: function( element) {return element.get('value') >= 0}
        }]
    ])
}
Kibero.configChange = function(event,el) {
    el = (el == null ? this : el)
    var f = Kibero.getForm()
    switch( el.type) {
        case 'text': case 'textarea': if( event != null) {
            var is_error_data = ($(f.get('id')+'-error-'+el.name).get('html') != '')
            if( el.value == el.defaultValue && !is_error_data) break
            var s = $(f.get('id')+'-action-'+el.name)
            if( s.get('html') == '' || is_error_data) {
                s.set('html',' <a class="default" onclick="Kibero.configSave(\''+el.name+'\');return false" href="javascript:" title="Сохранить новое значение?">Сохранить?</a>&nbsp;&nbsp;<a class="default" onclick="return Kibero.configCancel(\''+el.name+'\')" href="javascript:" title="Убрать изменения?">Отменить?</a>')
                if( is_error_data) {
                    Kibero.configValidator.resetField(el)
                    $(f.get('id')+'-error-'+el.name).set('html','')
                }
            }
            break
        }
        default: Kibero.configSave(el); break
        case 'file':
            f.action = 'ajax.index.php?task=file&name='+el.name+(el.get('delete') ? '&delete=1' : '')+(f.id != null ? '&id='+f.id.value : '')
            el.set('delete', null)
            Kibero.stateLoading(true)
            f.submit()
            break
    } 
}
Kibero.configSave = function(el) {
    var f = Kibero.getForm(), isError = false, value
    if( typeOf(el) == 'string') {
        el = f[el]
        if( Kibero.configValidator != null && !Kibero.configValidator.validateField(el)) return false
    }
    value = el.value
    if( el.type == 'select-multiple' && el.multiple) {
        var v = [], o
        for( i = 0; i < el.options.length; i++) {
            o = el.options[i]
            if( o.selected) v.push( o.value)
        }
        value = v.toString()
    }
    new Request({
        url: 'ajax.index.php?comp='+f.comp.value+'&act='+f.act.value+'&task=save'+(f.id != null ? '&id='+f.id.value : '')+(f.object != null ? '&object='+f.object.value : ''),
        async: false,
        onRequest: function() {Kibero.stateLoading(true)},
        onSuccess: function(responseText) {
            if( Kibero.checkResponseError( responseText, false)) {isError = true; return}
            if( responseText != null) {
                var dlm = '@javascript@', s, pos
                if( (pos = responseText.lastIndexOf( dlm)) >= 0) {
                    s = responseText.substr( pos+dlm.length)
                    responseText = responseText.substring(0, pos)
                }
                if( $(f.get('id')+'-default-'+el.name) != null) $(f.get('id')+'-default-'+el.name).set('html',responseText)
                if( s) eval(s)
            }
            $(f.get('id')+'-action-'+el.name).set('html', '')
            el.defaultValue = value
        },
        onFailure: function() {Kibero.error( Kibero.error_default+Kibero.try_again); isError = true},
        onComplete: function() {Kibero.stateLoading(false)}
    }).send('name='+el.name+'&value='+value+(el.getAttribute( 'default') != null ? '&default=1' : '')+(el.getAttribute( 'cache') != null ? '&cache='+el.getAttribute( 'cache') : '')+'&'+Kibero.scid+'=1')

    return !isError
}
Kibero.configCancel = function(name) {
    var f = Kibero.getForm(), el = f[name]
    el.value = el.defaultValue
    $(f.get('id')+'-action-'+name).set('html','')
    if( $(f.get('id')+'-error-'+name) != null && Kibero.configValidator.validateField(el)) $(f.get('id')+'-error-'+name).set('html','') 
    return false    
}
Kibero.configSetDefault = function(name, def) {
    if( !confirm('Установить для данного параметра значение по умолчанию?')) return
    var f = Kibero.getForm(), el = f[name]
    switch( typeOf(el)) {
        case 'collection':
            for( var i = 0; i < el.length; i++) if( el[i].value == def) {el[i].checked = true; el = el[i]; break}
            break
        default: el.value = def
    }
    Kibero.configChange(null,el)
    if( Kibero.configValidator.validateField(el)) $(f.get('id')+'-error-'+el.name).set('html','')
    return false
}
Kibero.configShowTab = function() {
    if( Kibero.configValidator && !Kibero.configValidator.validate()) return false
}
Kibero.saveForm = function() {
    if( Kibero.configValidator && !Kibero.configValidator.validate()) return false
    var f = Kibero.getForm(), el, e
    for( var i = 0; i < f.elements.length; i++) {
        el = f.elements[i]
        if( $(f.get('id')+'-action-'+el.name) != null && $(f.get('id')+'-action-'+el.name).get('html') != '') {
            if( el.type == 'textarea' && typeof( tinyMCE) != 'undefined' && (e = tinyMCE.get(el.name)) != null) {e.save();e.undoManager.clear()}
            if( !Kibero.configSave(el)) return false
        }
    }
    return true
}
Kibero.configEndEdit = function( back_href) {
    if( !Kibero.saveForm()) return false
    var isError = false, f = $('adminForm')
    if( f.object != null && f.id != null) {
        new Request({
            url: 'ajax.index.php?comp='+f.comp.value+'&act='+f.act.value+'&task=checkin',
            async: false,
            onRequest: function() {Kibero.stateLoading(true)},
            onSuccess: function( responseText) {isError = Kibero.checkResponseError( responseText, false)},
            onFailure: function() {Kibero.error( Kibero.error_default+Kibero.try_again); isError = true},
            onComplete: function() {Kibero.stateLoading(false)}
        }).send('object='+f.object.value+'&id='+f.id.value)        
    }
    if( !isError) document.location.href = (back_href ? back_href : 'index.php');
    return false
}
Kibero.mceChange = function( ed, l) {
    var s = $(Kibero.getForm().get('id')+'-action-'+ed.id)
    if( s == null || s.get( 'html') != '') return
    s.set('html','<a class="default" onclick="var e = tinyMCE.get(\''+ed.id+'\');e.save();e.undoManager.clear();Kibero.configSave(\''+ed.id+'\');return false" href="javascript:" title="Сохранить новое значение?">Сохранить?</a>&nbsp;&nbsp;<a class="default" onclick="Kibero.configCancel(\''+ed.id+'\');var e = tinyMCE.get(\''+ed.id+'\');e.load();e.undoManager.clear();return false" href="javascript:" title="Убрать изменения?">Отменить?</a>')
}
Kibero.needTip = function( className) {
    var class_postix = className ? '-'+className : '';
    $$('.needTip'+class_postix).each( function( e) {
        var title = e.get('title')
        if( title) {
            var parts = title.split('::', 2);
            e.store('tip:title', parts[0]);
            e.store('tip:text', parts[1]);
        }
    })
    new Tips( '.needTip'+class_postix, { maxTitleChars: 50, fixed: false, className:className});    
}
Kibero.viewImg = function(image) {
    SqueezeBox.open( null, {handler: 'image', url: image})
    return false
}
Kibero.squeezeBoxInit = function( init) {
    if( init) SqueezeBox.initialize()
    SqueezeBox.assign($$('a.modal'),{parse:'rel'})
}
Kibero.loadScript = function( url) {
    var script = document.createElement("script");  
    script.src = url;  
    script.type = 'text/javascript';  
    document.body.appendChild( script);        
}
Kibero.userSubmit = function() {
    if( !Kibero.configValidator.validate()) return
    Kibero.getForm().set('send', {
        url: 'ajax.index.php?task=save',
        async: false,
        onRequest: function() {Kibero.stateLoading(true)},
        onSuccess: function( responseText) {
            if( Kibero.checkResponseError( responseText, true)) return
            if( Kibero.getForm().id.value == '0') {
                if( responseText == 'online') document.location.reload()
                else Kibero.error( Kibero.error_default+Kibero.tell_developer)
            } else {
                Kibero.info( responseText, 3000) 
            }
        },
        onFailure: function() {Kibero.error( Kibero.error_default+Kibero.try_again)},
        onComplete: function() {Kibero.stateLoading(false)}
    }).send()
}
Kibero.lostpass = function() {
    var value = Kibero.trim( $('lpass').value)
    if( value == '') return;
    new Request({
        url: 'ajax.index.php?comp=users&task=lostpass',
        async: false,
        onRequest: function() {Kibero.stateLoading(true)},
        onSuccess: function( responseText) {
            if( Kibero.checkResponseError( responseText, true)) return
            $('lpass_result').set('html', responseText)
        },
        onFailure: function() {Kibero.error( Kibero.error_default+Kibero.try_again)},
        onComplete: function() {Kibero.stateLoading(false)}
    }).send('value='+value)        
}
