var formSubmitProcessing = 0;

$(document).ready(function() {
	var fields = new Array();
	var options = {
		target:     'null',
		dataType:   'json',
		beforeSubmit:  prepareForm,
		success:    function(data) {
			formSubmitProcessing = 0;

			if (data.wasError){
				if(window.errorInForm) {
					errorInForm(data);
				}

				$.each(data, function(key){
					updateField(key,data);
				});
			} else {
				if(window.formSuccess) {
					formSuccess(data['msg']);
				} else {
					$('#message').text(data['msg']);
				}
			}
		}
	};

	$(":submit:not('.nar'), :image:not('.nar')").parents("form.efv").each(function(){
		$(this).ajaxForm(options);
	});


	$("form.efv input[type!='submit'], form.efv textarea").blur(function() {
		if($(this).val() != '') {
			var input = $(this)
			var fieldName = $(this).attr("name");
			var tsData = '';
			//dla password/moze jakos sprytniej? np. type:password to znajdz drugi taki...
			if(fieldName == 'password1' || fieldName == 'password2') {
				tsData = "password1="+$('#password1').val()+"&password2="+$('#password2').val();
			} else {
				if($(this).is(":checkbox") && !$(this).is(":checked")) {
					// checkboxy niezaznaczone troche inaczej traktujemy :)
					tsData = fieldName+"=-1";
				} else {
					tsData = input.fieldSerialize();
				}
			}
			var url = '';
			$(this).parents("form.efv").map(function(){
				url = this.action+'/validate/'+fieldName;
			})
			if (url !='' && hasChanged(input,fields) && input.attr('value') != input.attr('title')){

				$.ajax({
					async: true,
					type: "POST",
					dataType: "json",
					url: url,
					data: tsData,
					success: function(data){
						updateField(fieldName,data);
					}
				});
			}

		}
	});

});

function updateField(fieldName,data){
	var input = $("#"+fieldName);
	var lab = $("#error_for_"+fieldName);
	if (!$(lab).length){
		//alert ("Cannot find error label");
	}
	if(data.wasError) {
		// cos jest nie tak
		if(data[fieldName] != undefined) {
			lab.text(data[fieldName]).slideDown("fast");
			//input.css("background-color",'red');
		}
	} else {
		lab.slideUp("fast", function() {$(this).empty()});
		//input.css("background-color",'');
	}
}

function hasChanged(input, fields){
	if(input.is(":checkbox")) {
		// nie keszujemy checkboxow
		return true;
	}

	var name = input.attr("name");
	var val = input.val();
	var index = jQuery.inArray(name,fields);

	// czy tresc = title (dla hint plugin)
	if(val == input.attr('title')) {
		return false;
	}

	//nie ma, dodajemy
	if(index==-1){
		var length = fields.length;
		fields[length] = name;
		fields[++length] = val;
	} else { //jest, czy jest taki sam?
		if (fields[index+1]==val){
			return false;
		} else {
			fields[index+1]=val;
		}
	}
	return true;
}


function prepareForm(formData, jqForm, options){
	if(formSubmitProcessing == 1) {
		// hej, ten formularz juz jest w trakcie wysylania!
		return false;
	} else {
		formSubmitProcessing = 1;
	}
	// przywracamy poprzednim kontenerom stare ID
	$('#activeMessageBox').each(function() {
		var oldID = $(this).attr('oldID');
		if(oldID == undefined) {
			oldID = "_randWRUVP"; // zajebisty hack :D
		}
		$(this).attr('id', oldID);
	});

	// robimy sobie kontenera na reponse
	$(jqForm).find(".message").each(function() {
		var currID = $(this).attr('id');
		$(this).attr('oldID', currID);
		$(this).attr('id', 'activeMessageBox');

	});

	return true;
}