/* $Id: forms.js 331 2009-12-08 17:04:58Z tigra $ */
$(document).ready(function(){

    /* multiple forms */
    $(".button-clone").click(function(e){
        $(this).next().show();
        $(this).hide();
    });
    $(".button-delete").click(function(e){
        var button = $(e.target);
        var grpname = $(button).nextAll(".form-contents").find("input[name='groupname']").val();
        var rid = $(button).nextAll(".form-contents").find("input[name='id']").val()
        var url = "ajax/handler/profile/deleteadditional/?rid=" + rid;

        if (confirm(delete_confirm)) {
            $.post(url, {groupname: grpname, id: rid}, function(data) {
                if (data.status == 'error') {
                    $(button).nextAll(".form-contents").find(".form-response").removeClass("error confirm").addClass(data.status).html(data.message).wait(2000).animate({"height": "toggle", "opacity": "toggle"}, { duration: "normal" });
                } else {
                    $(button).closest(".form-wrapper").animate({ "backgroundColor": "#ff8080" }, { duration: "fast" }).animate({"height": "toggle", "opacity": "toggle"}, { duration: "normal" });
                }
            }, "json");
        }
    });

    /* validator */
    jQuery.each($(".form-wrapper.validate form"), function(){
        $(this).validate();
    });

    /* ajax send */
    jQuery.each($(".form-wrapper.ajax form, .form-wrapper.textmode form"), function(){
        $(this).validate({
            submitHandler: function(form) {
                $(form).ajaxSubmit({
                    dataType: "json",
                    beforeSubmit: function(){
                        $(form).find("input[type=submit]").attr("disabled", true);
                        $(form).find(".form-response").removeClass("error confirm empty").addClass('empty').html(translate_wait);
                    },
                    success: function(j){
                        $(form).find(".form-response").removeClass("error confirm empty").addClass(j.status).html("").show('fast');
                        $(form).find("input[type=submit]").attr("disabled", false);
        
                        if (j.message){
                            $(form).find(".form-response").html(j.message);
                        } else {
                            $.each(j.messages, function(message){
                                $(form).find(".form-response").append("<div>" + this.message + "</div>");
                            });
                        }
                        var errfield = $(form).find(".form-response");
                        $(errfield).oneTime(1500, function(){$(errfield).hide("fast");});

                        if ($(form).hasClass("reload") && j.status == 'confirm') {
                            location.reload();
                        }
                    }
                });
            }
        });
    });

});

/* editables */
var classEditable = "textmode";
var classEditMode = "editmode";
var clonePrefix = "clone_";

/**
 * copy value from form input to 'cloned' span
 * @param {Object} src - source form input
 */
$.fn.copyValueFromInput = function(src){
    $(this).attr("class", $(src).attr("class"));
    if ($(src).is("select") && ($(src).find("option[value=" + $(src).val() + "]").val() != 'null')) {
        $(this).text($(src).find("option[value=" + $(src).val() + "]").text());
    }
    else {
        $(this).text($(src).val());
    }
    return $(this);
};

//TODO fixup select values
$.fn.copyValueToInput = function(src){
    $(this).attr("class", $(src).attr("class"));
    if ($(this).is("select")) {
        $(this).find("option:first-child = " + $(src).text() + "").attr('selected', true);
    }
    else {
        $(this).val($(src).text());
    }
    return $(this);
};

/**
 * find input for cloned span
 * @param  clonePrefix - cloned span prefix value
 */
$.fn.getOriginal = function(){
    return $(this).closest("form").find("[name=" + $(this).attr("id").replace(clonePrefix, "")+ "]");
};

$(document).ready(function(){
    var inputs = $(
                   "." + classEditable + " form input[type=text], " 
                 + "." + classEditable + " form input[type=password], " 
                 + "." + classEditable + " form textarea, " 
                 + "." + classEditable + " form select, " 
                  );

    var multiples =$( 
                 "." + classEditable + " form select, " 
               + "." + classEditable + " form [type=radio], " 
               + "." + classEditable + " form [type=checkbox]"
                    );
                    
    var buttons = $(
                    "." + classEditable + " form input[type=submit], " 
                  + "." + classEditable + " form input[type=reset]"
                   );
    
    var labels = $(
                    "." + classEditable + " label"
                  );

    $(buttons).hide();
    
    jQuery.each($(inputs), function(){
        /* make span that contains input's value and hiding input */
        var clonedSpan = $(document.createElement("span"));
        $(clonedSpan).attr("class", $(this).attr("class")).
        attr("id", clonePrefix + $(this).attr("name"));
        if ($(this).val() == "") {
            $(clonedSpan).text("---");
        }
        else {
            if ($(this).is("select")) {
                $(clonedSpan).text($(this).text());
            }
            else {
                $(clonedSpan).text($(this).val());
            }
        }
            $(this).hide().after($(clonedSpan));
    });
    
    /**
     * 'onChange' event. Trigger for fields in 'editable' mode
     */
    $(inputs).change(function(){
        var clone = $(this).closest("form").find("#" + clonePrefix + $(this).attr("name"));
        $(clone).copyValueFromInput($(this));
    });
    
    var buttonEdit = $(document.createElement("a")).addClass("button-edit").text("Изменить");
    
    $(".form-wrapper.textmode").prepend($(buttonEdit).clone(true));
    
    /**
     * Switching to 'edit mode'. Showing back all inputs
     * and hiding 'cloned' spans
     */
    $(".button-edit").toggle(
            function(e){
                var container = $(e.target).closest("."+classEditable);
                var clones = jQuery.grep($(container).contents().find("span"), function(clone){
                    return ($(clone).attr("id").indexOf(clonePrefix) > -1);
                });
                $(this).text('Просмотр');
                $(container).find(".button-clone, .button-delete").css('display', 'block');
                $(container).removeClass(classEditable).addClass(classEditMode);
                $(container).contents().find("input, textarea, select").show();
                $(clones).hide();
            },
            function(e){
                var container = $(e.target).closest("."+classEditMode);
                var clones = jQuery.grep($(container).contents().find("span"), function(clone){
                    return ($(clone).attr("id").indexOf(clonePrefix) > -1);
                });
                $(this).text('Изменить');
                $(container).find(".button-clone, .button-delete").hide();
                $(container).find(".button-clone").next().hide();
                $(clones).hide();            
                $(container).removeClass(classEditMode).addClass(classEditable);
                $(container).contents().find("input, textarea, select").hide();
                $(clones).show();            
    });
});