var display_type = 'block';
/**
* Функция валидации и подсчета формул
*/
function validation(id){
    var elements = $$('input,textarea');
    var global_state = true
    elements.each(
        function (obj){
            if (!validateOne(obj)){
                global_state = false;
            }
        }
    )
    return global_state;
}

/**
* Функция проверки одного элемента
*/
function validateOne(obj){
    var state = true;
    var error_text = new String;
    obj = prototyper(obj);
    switch (obj.tagName){
        case 'TEXTAREA':
        case 'INPUT':
            if (obj.type == 'hidden' && !obj.readAttribute('req')){
                break;
            }
            var preg = getPreg(obj);
            var value = obj.getValue();
            if (preg){
                preg = new RegExp(preg);
                if (!preg.test(value)){
                    error_text = 'Text you\'ve entered does not fit the acceptable value';
                    state = false;
                }
            }
            if (obj.type && obj.type == 'checkbox' && obj.readAttribute('req')==1 && !obj.checked){
                error_text = 'This flag must be checked';
                state = false;
            }
            if (obj.type && obj.type == 'radio' && obj.readAttribute('req')==1){
                error_text = 'You must select at list one value';
                state = ($$('input[name="'+obj.name+'"]:checked').size()?state:false);
            }
            if ((obj.readAttribute('req')==1 && value == '') || (obj.readAttribute('min')!==null && parseInt(value) < obj.readAttribute('min')) || (obj.readAttribute('max')!==null && parseInt(value) > obj.readAttribute('max'))){
                error_text = 'You have not filled out this field!';
                state = false;
            }
            if (!obj.readAttribute('req') && value == ''){
                state = true;
            }
            break;
        default:
            break;
    }
    var error = $(obj.name+'error');
    if (error){
        error.title = error_text;
        if (state){
            error.hide();
        } else {
            error.style.display = display_type;
        }
    } else {
        if (!state)
            alert('Error in  '+obj.name+' Text:'+error_text);
    }
    return state;

}

/**
* Функция генерации регулярного выражения
* Генерирует в зависимости от настроек
* типа поля
*/
function getPreg(obj){
    var type = obj.readAttribute('valid_type')?obj.readAttribute('valid_type'):false;
    var length = obj.readAttribute('lenght')?obj.readAttribute('lenght'):false;
    var return_value;
    if (type){
        switch (type){
            case 'text':
                if (length){
                    return '^.{0,'+length+'}$';
                } else {
                    return false;
                }
                break;
            case 'number':
                if (length){
                    return '^[0-9]+{0,'+length+'}$';
                } else {
                    return '^[0-9]+$';
                }
                break;
            case 'pagename':
                if (length){
                    return '^[0-9_a-zA-Z]+{0,'+length+'}$';
                } else {
                    return '^[0-9_a-zA-Z]+$';
                }
                break;
            case 'phone':
                if (length){
                    return '^[-0-9)(]+{0,'+length+'}$';
                } else {
                    return '^[-0-9)(]+$';
                }
                break;
            case 'email':
                return '^^([a-zA-Z0-9\-_]+)@([a-zA-Z0-9\-_\.]{2,})\.[a-zA-Z]{2,6}$';
                break;
            case 'regular':
                return obj.readAttribute('regular')?'^'+obj.readAttribute('regular')+'$':false;
                break;
        }
    } else {
        return false;
    }
    return false;
}
/**
* Функция инициализации отправки подтверждения о получении премиум-статуса
*/
function sendConfirm(id,obj){
    var loader = $('loader');
    loader.show();
    JsHttpRequest.query( 
        'send.php',
        {
            org_id: id
        },
        function(result, debugMessages) {
            loader.hide();
            if (result.state){
                obj.innerHTML = 'Confirmed';
                obj.style.color = 'green';
            } else {
                obj.innerHTML = 'Error';
                obj.style.color = 'red';
            }
        },
        function(result, debugMessages) {},
        false
    )
}

/**
* Функция получения имени страницы элемента из его названия
*/
function getTranslitedName(obj,target){
    document.getElementsByName(target)[0].disabled = 'disabled';
    JsHttpRequest.query( 
        '/ajax/get_translite.php',
        {
            text: obj.value,
            info: target
        },
        function(result, debugMessages) {
            obj = document.getElementsByName(result.info)[0];
            obj.disabled = false;
            obj.value = result.text;
            validateOne(obj);
        },
        function(result, debugMessages) {},
        false
    )
}

/**
* Функция отправки предупреждения об окончании размещения
*/
function reportAboutDeadline(id,obj,change_state){
    var loader = $('loader');
    loader.show();
    JsHttpRequest.query( 
        'send.php',
        {
            org_id: id,
            state: change_state
        },
        function(result, debugMessages) {
            loader.hide();
            if (result.state){
                obj.innerHTML = (change_state?'Показ отключён':'Отправлено');
                obj.style.color = 'green';
            } else {
                obj.innerHTML = (change_state?'Ошибка отключения':'Ошибка отправки');
                obj.style.color = 'red';
            }
        },
        function(result, debugMessages) {},
        false
    )
}

/**
* Функция ajax-отправки данных из грида в бэкенд
*/
function gridSend(obj,file,id){
    obj = obj.parentNode;
    obj.innerHTML = '<img src="/images/loader.gif" align="middle" id="loader"/>';
    JsHttpRequest.query( 
        file,
        {
            id: id,
            from_grid:1
        },
        function(result, debugMessages) {
            if (result.state){
                obj.innerHTML = '<span style="background:green;">Success</span>';
            } else {
                alert('Query error');
            }
        },
        function(result, debugMessages) {},
        false
    )
}


/**
* Функция для ручного расширения любой
* ссылки на объект до объекта типа
* Element:extended(Prototype)
*/
function prototyper(obj){
    if (!obj.id){
        obj.id = 'new';
        obj = $(obj.id);
        obj.id = null;
    } else {
        obj = $(obj.id);
    }
    
    return obj;
}

/**
* Функция получения значения select-box'a и подставновки его в url
*/
function addValueToUrl(var_name,obj){
    var x;
    var url_params;
    var temp_url = new String(window.location);
    var url_array = temp_url.split('?');
    if (url_array[1] && temp_url.search(var_name) != -1){
        url_params = url_array[1].split('&');
        if (url_params[1]){
            for(x in url_params){
                if (typeof(url_params[x]) === 'function'){
                    continue;
                } else {
                    if (url_params[x].search(var_name) != -1){
                        url_params[x] = var_name + '=' + obj.value;
                        break;
                    }
                }
            }
            var url_string;
            new_url = url_array[0] + '?' + url_params.join('&');
        }
    } else {
        var new_url = temp_url + (temp_url.search(/\?/)==-1?'?':'&') + var_name + '=' + obj.value;    
    }
    window.location = new_url;
}