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 = 'Введённый текст не соответсвует допустимому значению';
                    state = false;
                }
            }
            if (obj.type && obj.type == 'checkbox' && obj.readAttribute('req')==1 && !obj.checked){
                error_text = 'Этот флаг обязательно должен быть включен';
                state = false;
            }
            if (obj.type && obj.type == 'radio' && obj.readAttribute('req')==1){
                error_text = 'Вы должны выбрать хотя бы один пункт';
                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 = 'Please try again.';
                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! Incorrect tekst in  '+obj.name+''+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 = 'Подтверждено';
                obj.style.color = 'green';
            } else {
                obj.innerHTML = 'Ошибка';
                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;">Успешно</span>';
            } else {
                alert('Ошибка запроса');
            }
        },
        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;
}

function sendFormWithAjax(form){
    $(form).request({
        onFailure: function() {},
        onSuccess: function(t) {
	    var data = t.responseText.evalJSON();
	    if(data.error != false){
		$('form_error_div').update(data.error);
	    }	
	    else{
		$('form_message_div').update(data.message);
		$('send_form_button').hide();
            }
        }
    });	
}