/* $Id: forms.js 830 2010-06-11 18:20:09Z vosi $ */
$(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({"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 input[type=radio], "
               + "." + classEditable + " form input[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({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])+']');
    	}
    	if ($(this).closest('div').find('.file-input-custom:first')){
			$(newinput).find('input[type="file"]').each(function(){
			    if ($(this).attr('alt') != undefined && $(this).attr('alt') != '') {
			        $(this).attr('name', name+'['+(MFCounter[name])+']'+'['+$(this).attr('alt')+']').removeAttr('alt');
			    } else {
			        $(this).attr('name', name+'['+(MFCounter[name])+']').removeAttr('alt');
			    }
			});
			$(newinput).find('input[type="hidden"][name="'+name+'_default"]').attr('name', name+'_default['+(MFCounter[name])+']');
			$(newinput).insertBefore(this).show().removeClass('hiddenfield');
    	} else {
    		$(newinput).find('input[type="file"]').attr('name', name+'['+(MFCounter[name])+']');
    		$(newinput).insertBefore(this).show().removeClass('hiddenfield');
    	}
		MFCounter[name]++;
        return false;
    });
});