
/**
	AJAX Update панелька
*/
var AjaxPanel = function(id, moduleId)
{
    this.id = id;

    var obj = $("ajax"+id);
    obj.moduleId = moduleId;
    obj.id = "ajax"+id;

    if (!obj)
        return;
	
    // определяем потенциальных субмиттеров
    obj.imageSubmits = obj.getElementsBySelector('[type="image"]');
    obj.inputSubmits = obj.getElementsBySelector('[type="submit"]');
    obj.checkboxSubmits = obj.getElementsBySelector('[type="checkbox"]');
	
    // сканим данные формы
    obj.inputs = obj.getElementsBySelector('input[type!="image"][type!="submit"][type!="checkbox"]');
    obj.selects = obj.getElementsBySelector('select');

    if (obj.imageSubmits != null && obj.imageSubmits != undefined)
        obj.imageSubmits.each(
            function(item)
            {
                item.ajaxPanel = obj;
                item.onAjaxClick = item.onclick;
                item.onclick = null;
                item.observe('click', clicker);
            }
            );

    if (obj.checkboxSubmits != null && obj.checkboxSubmits != undefined)
        obj.checkboxSubmits.each(
            function(item)
            {
                item.ajaxPanel = obj;
                item.onAjaxClick = item.onclick;
                item.onclick = null;
                item.observe('click', clicker);
            }
            );
		
    if (obj.inputSubmits != null && obj.inputSubmits != undefined)
        obj.inputSubmits.each(
            function(item)
            {
                item.ajaxPanel = obj;
                item.onAjaxClick = item.onclick;
                item.observe('click', clicker);
            }
            );
}

// обработчик нажатия на субмиттер
function clicker(event)
{
    // останавливаем дальнейшую обработку событий для избежания submit'а всей страницы
    Event.stop(event);
	
    // определяем, какой элемент вызвал сабмит
    var elem = Event.element(event);
	
    // если у сабмита был onclick, то вызываем вначале его
    if (elem.onAjaxClick != null)
    {
        // отмена действия
        if (elem.onAjaxClick() == false)
            return;
    }
	
    var handler = elem.name;
    var obj = elem;
    var panel = obj.ajaxPanel;
	
    var post = handler+'='+handler+'&ajaxHandler=1&ajaxId='+panel.id+'&moduleId='+panel.moduleId;
	
    // сериализация данных формы
    if (panel.selects)
        panel.selects.each(
            function(item)
            {
                post += "&"+Form.Element.serialize(item);
            }
            )

    // сериализация данных формы
    if (panel.inputs)
        panel.inputs.each(
            function(item)
            {
                //alert(item);
                post += "&"+Form.Element.serialize(item);
            }
            )
	
    // AJAX POST запрос
    new Ajax.Request(document.location.href,
    {
        postBody: post,
        onSuccess: function(transport, json)
        {
            obj.ajaxPanel.innerHTML = transport.responseText;
            new AjaxPanel(obj.ajaxPanel.id.substring(4), obj.ajaxPanel.moduleId)
        }
    });
}
var AjaxTimeout = null;
function showAjaxWait()
{
    var AjaxWaiter = document.getElementById("wait");
    AjaxWaiter.style.display = "block";
    AjaxWaiter.style.top = Math.round((document.body.offsetHeight/2)-(AjaxWaiter.offsetHeight/2)+document.body.scrollTop)+'px';
    AjaxWaiter.style.left = Math.round((document.body.offsetWidth/2)-(AjaxWaiter.offsetWidth/2))+"px";
}
function hideAjaxWait()
{
    document.getElementById("wait").style.display = "none";
}

Ajax.Responders.register({
    onCreate: function()
    {
        showAjaxWait();
    },
    onComplete: function()
    {
        hideAjaxWait();
    }
})

/**
	Валидация данных
*/
// список валидаторов
var validators = new Array();

var Validator = function(id, rules)
{
    this.id = id;
    this.field = $(id);
    this.rules = rules.split(" ");
	
    // устанавливаем свои обработчики событий
    Event.observe(this.field, "blur", onValidate);
    //	Event.observe(this.field, "keydown", onValidate);
    //	Event.observe(this.field, "keyup", onValidate);
	
    // сохраняем валидатор в список валидаторов
    validators[id] = this;
}

// валидация
Validator.prototype.DoValidate = function()
{
    var obj = this;
    var validated = true;
    this.rules.each
    (
        function(item)
        {
            checkFunc = "obj.Rule" + item + "()";
            validated &= eval(checkFunc);
        }
        )

    var errorBlock = $(obj.id + "validator");

    if (!validated)
        errorBlock.style.display = "block";
    else
        errorBlock.style.display = "none";

    return validated;
}

/**
	Правила валидатора
*/
Validator.prototype.RuleNotNull = function()
{
    var value = $F(this.field);
    return !(/^\s*$/.test(value));
}

Validator.prototype.RuleInt = function()
{
    var value = $F(this.field);
    return /^[0-9]*$/.test(value);
}

Validator.prototype.RuleFloat = function()
{
    var value = $F(this.field);
    return /^[0-9]+((\.|,)[0-9]+)?$/.test(value);
}

Validator.prototype.RuleLatin = function()
{
    var value = $F(this.field);
    return /^[0-9A-z_\-]+$/.test(value);
}

function onValidate(event)
{
    var element = Event.element(event);

    var result = validators[element.id].DoValidate();
}

// инициализация валидатора
function initValidator(id, rules)
{
    var validator = new Validator(id, rules);
}

/**
	Upload файлов
*/
var oldtarget = "";
var oldaction = "";
var oldenctype = "";
// начанает аплоад
function uploadFile(element, id, top)
{

    var form = element.form;
    $(id+"_progress").style.display = "block";
    $(id+"_btn").style.display = "none";
    oldtarget = form.target;
    oldaction = form.action;
    oldenctype = form.enctype;
    form.action = "/upload.php?id="+id;
    form.target = id+"_upload";
    form.method = "post";
    form.enctype = "multipart/form-data";
    $(id+"_submit").click();
    form.target = oldtarget;
    form.enctype = oldenctype;
    form.action = oldaction;
}
// событие при завершении аплоада файла
function onFileUploadFinished(id, filepath, fileId, title, filesize, manname)
{
    var form = $(id+"_submit").form;

    $(id+"_progress").style.display = "none";
    $(id+"_btn").style.display = "block";
    var table = $(id+"_table");
    var tblBody = $(id+"_tbody");

    var row = document.createElement("tr");
    row.id = 'upload_file'+fileId;

    var DelBtnCell = document.createElement("td");
    DelBtnCell.innerHTML = '<input type="image" name="handlerBtnDel:'+fileId+'" src="/admin/img/op_delete.gif" alt="Удалить файл" height="16" width="16" onclick="delUplFile(\''+fileId+'\'); return false;" />';
    DelBtnCell.style.width = "16px";
    row.appendChild(DelBtnCell);

    var ImgCell = document.createElement("td");
    ImgCell.innerHTML = '<img style="vertical-align:middle" src="/img/default.jpg" align=left alt="'+title+'" title="'+title+'" ><span>'+title+'<span>';
    row.appendChild(ImgCell);

    if(manname){
    var ManCell = document.createElement("td");
    ManCell.innerHTML = '<span>Производитель: '+manname+'<span>';
    row.appendChild(ManCell);
    }

    var BtnUpCell = document.createElement("td");
    BtnUpCell.innerHTML = '<input type="image" name="handlerBtnUp:'+fileId+'" src="/admin/img/op_up.gif" alt="Поднять файл" height="16" width="16" onclick="upUplFile(\''+id+'\', \''+fileId+'\'); return false;" />';
    BtnUpCell.style.width = "16px";
    row.appendChild(BtnUpCell);

    var BtnDownCell = document.createElement("td");
    BtnDownCell.innerHTML = '<input type="image" name="handlerBtnDown:'+fileId+'" src="/admin/img/op_down.gif" alt="Опустить файл" height="16" width="16"  onclick="downUplFile(\''+id+'\', \''+fileId+'\'); return false;" />';
    BtnDownCell.style.width = "16px";
    row.appendChild(BtnDownCell);

    var DescrCell = document.createElement("td");
    DescrCell.innerHTML = title+'('+filesize+' кб)';
    row.appendChild(DescrCell);

    tblBody.appendChild(row);
    table.appendChild(tblBody);

    $(id+"_file").value = "";
    $(id+"_file").outerHTML = '<input type="file" width="100%" id="'+id+'_file" name="'+id+'_file" size="60" />';
    $(id+"_title").value = "";
}
// событие при завершении аплоада картинки
function onUploadFinished(id, imgPath, imgId, title, width, height, fileSize, thumbWidth, thumbHeight)
{
    var form = $(id+"_submit").form;
	
    $(id+"_progress").style.display = "none";
    $(id+"_btn").style.display = "block";
    var table = $(id+"_table");
    var tblBody = $(id+"_tbody");
	
    var row = document.createElement("tr");
    row.id = 'upload_img'+imgId;
	
    var DelBtnCell = document.createElement("td");
    DelBtnCell.innerHTML = '<input type="image" name="handlerBtnDel:'+imgId+'" src="/admin/img/op_delete.gif" alt="Удаление изображение" height="16" width="16" onclick="delUplImg(\''+imgId+'\'); return false;" />';
    DelBtnCell.style.width = "16px";
    row.appendChild(DelBtnCell);
	
    if (thumbHeight != "")
        thumbHeight = "&height="+thumbHeight;

    var ImgCell = document.createElement("td");
    ImgCell.innerHTML = '<img src="'+imgPath+'&width='+thumbWidth+thumbHeight+'" width="'+thumbWidth+'" alt="'+title+'" title="'+title+'" >';
    ImgCell.style.width = thumbWidth+"px";
    row.appendChild(ImgCell);

    var BtnUpCell = document.createElement("td");
    BtnUpCell.innerHTML = '<input type="image" name="handlerBtnUp:'+imgId+'" src="/admin/img/op_up.gif" alt="Поднять изображение" height="16" width="16" onclick="upUplImg(\''+id+'\', \''+imgId+'\'); return false;" />';
    BtnUpCell.style.width = "16px";
    row.appendChild(BtnUpCell);
	
    var BtnDownCell = document.createElement("td");
    BtnDownCell.innerHTML = '<input type="image" name="handlerBtnDown:'+imgId+'" src="/admin/img/op_down.gif" alt="Опустить изображение" height="16" width="16"  onclick="downUplImg(\''+id+'\', \''+imgId+'\'); return false;" />';
    BtnDownCell.style.width = "16px";
    row.appendChild(BtnDownCell);

    var DescrCell = document.createElement("td");
    DescrCell.innerHTML = title+'('+width+'x'+height+' - '+fileSize+' кб)';
    row.appendChild(DescrCell);
	
    tblBody.appendChild(row);
    table.appendChild(tblBody);
	
    $(id+"_file").value = "";
    $(id+"_file").outerHTML = '<input type="file" width="100%" id="'+id+'_file" name="'+id+'_file" size="60" />';
    $(id+"_title").value = "";
}
function delUplImg(id)
{
    if (!confirm("Вы уверены, что хотите удалить изображение?"))
        return false;

    new Ajax.Request("/upload.php",
    {
        postBody: 'deleteImg='+id,
        onSuccess: function(transport, json)
        {
            var row = $("upload_img"+id);
            var table = row.parentNode;
            table.removeChild(row);
        }
    });
}
function delUplFile(id)
{
    if (!confirm("Вы уверены, что хотите удалить файл?"))
        return false;

    new Ajax.Request("/upload.php",
    {
        postBody: 'deleteFile='+id,
        onSuccess: function(transport, json)
        {
            var row = $("upload_file"+id);
            var table = row.parentNode;
            table.removeChild(row);
        }
    });
}
function upUplImg(id, imgId)
{
    var obj = $("upload_img"+imgId);
    var table = obj.parentNode;
    var prevObj = obj.previousSibling;

    new Ajax.Request("/upload.php",
    {
        postBody: 'upImg='+imgId,
        onSuccess: function(transport, json)
        {
            //			alert(transport.responseText);
            // если предыдущей нет, то меня с последней строкой
            if (!prevObj)
            {
                prevObj = table.lastChild;

                // удаляем текущую
                table.removeChild(obj);

                // вставляем текущую перед последней
                table.insertBefore(obj, prevObj);

                // удаляем последнюю
                table.removeChild(prevObj);

                // добавляем последнюю в начало
                table.insertBefore(prevObj, table.firstChild);
            }
            else
            {
                table.removeChild(obj);
                table.insertBefore(obj, prevObj);
            }
        }
    });
}

function downUplImg(id, imgId)
{
    var obj = $("upload_img"+imgId);
    var table = obj.parentNode;
    var nextObj = obj.nextSibling;
	
    new Ajax.Request("/upload.php",
    {
        postBody: 'downImg='+imgId,
        onSuccess: function(transport, json)
        {
            //			alert(transport.responseText);
            // если следующего нет, то меняем с первой строкой
            if (!nextObj)
            {
                nextObj = table.firstChild;
				
                // удаляем первую строку
                table.removeChild(nextObj);
				
                // вставляем первую строку перед текущим элементом
                table.insertBefore(nextObj, obj);
				
                // удаляем текущий элемент
                table.removeChild(obj);
				
                // добавляем текущий в начало
                table.insertBefore(obj, table.firstChild);
            }
            else
            {
                table.removeChild(nextObj);
                table.insertBefore(nextObj, obj);
            }
        }
    });
}
function downUplFile(id, fileId)
{
    var obj = $("upload_file"+fileId);
    var table = obj.parentNode;
    var nextObj = obj.nextSibling;

    new Ajax.Request("/upload.php",
    {
        postBody: 'downFile='+fileId,
        onSuccess: function(transport, json)
        {
            //			alert(transport.responseText);
            // если следующего нет, то меняем с первой строкой
            if (!nextObj)
            {
                nextObj = table.firstChild;

                // удаляем первую строку
                table.removeChild(nextObj);

                // вставляем первую строку перед текущим элементом
                table.insertBefore(nextObj, obj);

                // удаляем текущий элемент
                table.removeChild(obj);

                // добавляем текущий в начало
                table.insertBefore(obj, table.firstChild);
            }
            else
            {
                table.removeChild(nextObj);
                table.insertBefore(nextObj, obj);
            }
        }
    });
}
function upUplFile(id, fileId)
{
    var obj = $("upload_file"+fileId);
    var table = obj.parentNode;
    var prevObj = obj.previousSibling;

    new Ajax.Request("/upload.php",
    {
        postBody: 'upFile='+fileId,
        onSuccess: function(transport, json)
        {
            // если предыдущей нет, то меня с последней строкой
            if (!prevObj)
            {
                prevObj = table.lastChild;

                // удаляем текущую
                table.removeChild(obj);

                // вставляем текущую перед последней
                table.insertBefore(obj, prevObj);

                // удаляем последнюю
                table.removeChild(prevObj);

                // добавляем последнюю в начало
                table.insertBefore(prevObj, table.firstChild);
            }
            else
            {
                table.removeChild(obj);
                table.insertBefore(obj, prevObj);
            }
        }
    });
}
