(function ($) {
    $.fn.HVal = function (options) {
        var defaults = {
            errorClass: 'Hamid_Error',
            successClass: 'Hamid_Success',
            ajaxPost: true,
            errorMessage: 'Error on Submit',
            successMessage: 'Submitted Successfully',
            disableOnSubmit: true,
            displayOutput: true,
            checkboxNames: [],
            radioNames: [],
            beforeSubmit: function () {},
            onComplete: function () {},
            onSuccess: function () {},
            onError: function () {},
			showResult:true
        };
        var hamidVal = $.extend(defaults, options);
        return this.each(function () {
            var elem = $(this);
			var goval = elem.find('[type=submit]').val();
			if(elem.find('[type=submit][disabled]').val() == goval){
				elem.find('[type=submit][disabled]').removeAttr('disabled');
			}
            if ((hamidVal.radioNames).length > 0) {
                for (var i = 0;
                (hamidVal.radioNames).length > i; i++) {
                    $('[name=' + hamidVal.radioNames[i] + '][type=radio]', this).wrapAll("<span style='display:inline-block;' class='Hamid_rbwrap'></span>");
                }
            }
            if ((hamidVal.checkboxNames).length > 0) {
                for (var i = 0;
                (hamidVal.checkboxNames).length > i; i++) {
                    $('[name=' + hamidVal.checkboxNames[i] + '][type=checkbox]', this).wrapAll("<span style='display:inline-block;' class='Hamid_cbwrap'></span>");
                }
            }
            $('input, select, textarea', this).not('*[type=submit], [type=checkbox], [type=radio], [type=reset]').addClass('HamidField');
            var turl = $(this).attr('action');
            elem.find('input[type=reset]').click(function () {
                elem.find('[type=submit]').removeAttr('disabled').val(goval);
                $('.HamidField, .Hamid_cbwrap, .Hamid_rbwrap', elem).removeClass(hamidVal.errorClass);
                $('.HamidRemotePg, .result', elem).slideUp(function () {
                    $(this).remove();
                });
            });
            $(this).submit(function () {
                $(hamidVal.beforeSubmit);
                var error = 0;
                elem.find('[type=submit]').attr('disabled', true).val('Submitting..');
                $('.HamidField, .Hamid_cbwrap, .Hamid_rbwrap', this).removeClass(hamidVal.errorClass);
                $('.errorbox', this).remove();
                for (var i = 0;
                (hamidVal.checkboxNames).length > i; i++) {
                    if ($('.Hamid_cbwrap [type=checkbox][name=' + hamidVal.checkboxNames[i] + ']', this).length > 0) {
                        var cerror = 1;
                        $('.Hamid_cbwrap [type=checkbox][name=' + hamidVal.checkboxNames[i] + ']', this).each(function () {
                            if (this.checked) {
                                cerror = 0;
                            }
                        });
                        if (cerror == 1) {
                            error = 1;
                            $('.Hamid_cbwrap [type=checkbox][name=' + hamidVal.checkboxNames[i] + ']', this).parent().addClass('error');
                        }
                    }
                }
                for (var i = 0;
                (hamidVal.radioNames).length > i; i++) {
                    if ($('.Hamid_rbwrap [type=radio][name=' + hamidVal.radioNames[i] + ']', this).length > 0) {
                        var cerror = 1;
                        $('.Hamid_rbwrap [type=radio][name=' + hamidVal.radioNames[i] + ']', this).each(function () {
                            if (this.checked) {
                                cerror = 0;
                            }
                        });
                        if (cerror == 1) {
                            error = 1;
                            $('.Hamid_rbwrap [type=radio][name=' + hamidVal.radioNames[i] + ']', this).parent().addClass('error');
                        }
                    }
                }
                $('.HamidField', this).each(function () {
                    if ($.isArray($(this).val())) {
                        if ($(this).val().length <= 0) {
                            $(this).addClass(hamidVal.errorClass);
                            error = 1;
                        } else if ($(this).val().length == 1) {
                            if ($(this).val()[0] == '') {
                                $(this).addClass(hamidVal.errorClass);
                                error = 1;
                            }
                        }
                    } else {
                        var tval = $.trim($(this).val());
                        if ($(this).hasClass('required')) {
                            if (tval == '') {
                                $(this).addClass(hamidVal.errorClass);
                                error = 1;
                            }
                        }
                        if ($(this).hasClass('email')) {
                            var rege = /^([A-Za-z0-9_\-\.])+\@([A-Za-z0-9_\-\.])+\.([A-Za-z]{2,4})$/;
                            if (!rege.test(tval)) {
                                $(this).addClass(hamidVal.errorClass);
                                error = 1;
                            }
                        }
                        if ($(this).hasClass('mobile') || $(this).hasClass('numeric')) {
                            if (isNaN(tval) || tval == '') {
                                $(this).addClass(hamidVal.errorClass);
                                error = 1;
                            }
                        }
                    }
                });
                if (error == 0) {
                    if (!hamidVal.disableOnSubmit) {
                        elem.find('[type=submit]').removeAttr('disabled').val(goval);
                    }
                    if (hamidVal.ajaxPost) {
                        $.post(turl, $(this).serialize(), function (hamid) {
                            $('.HamidRemotePg, .result', elem).remove();
                            elem.append('<div class="HamidRemotePg" style="display:none">' + hamid + '</div>');
                            var v01 = $('.HamidRemotePg', elem).find('#Hamid_errorcode').text();
							if(hamidVal.displayOutput){
								var rmsg = $('.HamidRemotePg', elem).find('#Hamid_resultmessage').html();
							}else{
								var rmsg = '';
							}
                            if (v01 == 1) {
								if(hamidVal.showResult){
                                	elem.append('<div class="result" style="display:none;">' + rmsg + '<div class="Hamid_successmsg">' + hamidVal.successMessage + '</div></div>');
								}
                                elem.find('[type=submit]').val('Submitted');
                                $(hamidVal.onSuccess);
                            } else {
								if(hamidVal.showResult){
                                	elem.append('<div class="result" style="display:none;">' + hamidVal.errorMessage + '</div>');
								}
                                elem.find('[type=submit]').removeAttr('disabled').val('Error');
                                $(hamidVal.onError);
                            }
                            $('.result', elem).slideDown();
                            $('.HamidRemotePg', elem).remove();
                        });
                        $(hamidVal.onComplete);
                        return false;
                    } else {
                        $(hamidVal.onComplete);
                        return true;
                    }
                } else {
                    elem.find('[type=submit]').removeAttr('disabled').val(goval);
                    $('.HamidRemotePg, .result', elem).slideUp(function () {
                        $(this).remove();
                    });
                    $(hamidVal.onComplete);
                    return false;
                }
            });
        });
    };
})(jQuery);
