/* $Id: forms.js 715 2010-04-22 16:17:17Z 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 with validation */
    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();
                        }
                    }
                });
            }
        });
    });
    
    /* ajax send without validation */
    $(".form-wrapper.ajax-w-v form, .form-wrapper.textmode-w-v form").ajaxForm({
        dataType: "json",
        beforeSubmit: function(){
            $(this).find("input[type=submit]").attr("disabled", true);
            $(this).find(".form-response").removeClass("error confirm empty").addClass('empty').html(translate_wait);
        },
        success: function(j){
            $(this).find(".form-response").removeClass("error confirm empty").addClass(j.status).html("").show('fast');
            $(this).find("input[type=submit]").attr("disabled", false);

            if (j.message){
                $(this).find(".form-response").html(j.message);
            } else {
                $.each(j.messages, function(message){
                    $(this).find(".form-response").append("<div>" + this.message + "</div>");
                });
            }
            var errfield = $(this).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();            
    });

    /* MULTFILES */
    var MFCounter = new Array();
    var killMFButton = $(document.createElement("a")).text('remove').addClass("multifilekill").click(function(){
        $(this).closest("div").animate({backgroundColor: "#fdd" }, 150).animate({opacity: 0 }, 500, function() {$(this).remove();});
    });

    $(".multifile").css('cursor', 'pointer').click(function(){
    	$(this).closest('div').find('.file-input:first').append(killMFButton);
    	var newinput = $(this).closest('div').find('.file-input:first').clone(true);
    	var name = $(newinput).find('input').attr('name');
    	if (!MFCounter[name]) {
    		MFCounter[name] = 0;
    	}
    	if ($(newinput).hasClass('with-names')) {
    		$(newinput).find('input[type="text"]').attr('name', name+'_titles['+(MFCounter[name])+']');
    	}
		$(newinput).find('input[type="file"]').attr('name', name+'['+(MFCounter[name]++)+']');
    	$(newinput).insertBefore(this).show(750).removeClass('hiddenfield');
        return false;
    });
});