(function(n){n.fn.areYouSure=function(t){var i=n.extend({message:"You have unsaved changes!",dirtyClass:"dirty",change:null,silent:!1,addRemoveFieldsMarksDirty:!1,fieldEvents:"change keyup propertychange input",fieldSelector:":input:not(input[type=submit]):not(input[type=button])"},t),f=function(t){if(t.hasClass("ays-ignore")||t.hasClass("aysIgnore")||t.attr("data-ays-ignore")||t.attr("name")===undefined)return null;if(t.is(":disabled"))return"ays-disabled";var i,r=t.attr("type");t.is("select")&&(r="select");switch(r){case"checkbox":case"radio":i=t.is(":checked");break;case"select":i="";t.find("option").each(function(){var t=n(this);t.is(":selected")&&(i+=t.val())});break;default:i=t.val()}return i},e=function(n){n.data("ays-orig",f(n))},u=function(t){var o=function(n){var t=n.data("ays-orig");return undefined===t?!1:f(n)!=t},u=n(this).is("form")?n(this):n(this).parents("form"),s,e;if(o(n(t.target))){r(u,!0);return}if($fields=u.find(i.fieldSelector),i.addRemoveFieldsMarksDirty&&(s=u.data("ays-orig-field-count"),s!=$fields.length)){r(u,!0);return}e=!1;$fields.each(function(){return $field=n(this),o($field)?(e=!0,!1):void 0});r(u,e)},o=function(t){var f=t.find(i.fieldSelector);n(f).each(function(){e(n(this))});n(f).unbind(i.fieldEvents,u);n(f).bind(i.fieldEvents,u);t.data("ays-orig-field-count",n(f).length);r(t,!1)},r=function(n,t){var r=t!=n.hasClass(i.dirtyClass);n.toggleClass(i.dirtyClass,t);r&&(i.change&&i.change.call(n,n),t&&n.trigger("dirty.areYouSure",[n]),t||n.trigger("clean.areYouSure",[n]),n.trigger("change.areYouSure",[n]))},s=function(){var t=n(this),r=t.find(i.fieldSelector);n(r).each(function(){var t=n(this);t.data("ays-orig")||(e(t),t.bind(i.fieldEvents,u))});t.trigger("checkform.areYouSure")},h=function(){o(n(this))};return i.silent||window.aysUnloadSet||(window.aysUnloadSet=!0,n(window).bind("beforeunload",function(){if($dirtyForms=n("form").filter("."+i.dirtyClass),$dirtyForms.length!=0){if(navigator.userAgent.toLowerCase().match(/msie|chrome/)){if(window.aysHasPrompted)return;window.aysHasPrompted=!0;window.setTimeout(function(){window.aysHasPrompted=!1},900)}return i.message}})),this.each(function(){if(n(this).is("form")){var t=n(this);t.submit(function(){t.removeClass(i.dirtyClass)});t.bind("reset",function(){r(t,!1)});t.bind("rescan.areYouSure",s);t.bind("reinitialize.areYouSure",h);t.bind("checkform.areYouSure",u);o(t)}})}})(jQuery)