sisyphus.js
function( targets, options ) {
					this.setOptions( options );
					targets = targets || {};
					var self = this;
					this.targets = this.targets || [];
					if ( self.options.name ) {
						this.href = self.options.name;
					} else {
						this.href = location.hostname + location.pathname + location.search + location.hash;
					}
					this.targets = $.merge( this.targets, targets );
					this.targets = $.unique( this.targets );
					this.targets = $( this.targets );
					if ( ! this.browserStorage.isAvailable() ) {
						return false;
					}

					var callback_result = self.options.onBeforeRestore.call( self );
					if ( callback_result === undefined || callback_result ) {
						self.restoreAllData();
					}

					if ( this.options.autoRelease ) {
						self.bindReleaseData();
					}

					if ( ! params.started[ this.getInstanceIdentifier() ] ) {
						if ( self.isCKEditorPresent() ) {
							var intervalId = setInterval( function() {
								if (CKEDITOR.isLoaded) {
									clearInterval(intervalId);
									self.bindSaveData();
									params.started[ self.getInstanceIdentifier() ] = true;
								}
							}, 100);
						} else {
							self.bindSaveData();
							params.started[ self.getInstanceIdentifier() ] = true;
						}
					}
				}
function( targets, options ) {
					this.setOptions( options );
					targets = targets || {};
					var self = this;
					this.targets = this.targets || [];
					if ( self.options.name ) {
						this.href = self.options.name;
					} else {
						this.href = location.hostname + location.pathname + location.search + location.hash;
					}
					this.targets = $.merge( this.targets, targets );
					this.targets = $.unique( this.targets );
					this.targets = $( this.targets );
					if ( ! this.browserStorage.isAvailable() ) {
						return false;
					}

					var callback_result = self.options.onBeforeRestore.call( self );
					if ( callback_result === undefined || callback_result ) {
						self.restoreAllData();
					}

					if ( this.options.autoRelease ) {
						self.bindReleaseData();
					}

					if ( ! params.started[ this.getInstanceIdentifier() ] ) {
						if ( self.isCKEditorPresent() ) {
							var intervalId = setInterval( function() {
								if (CKEDITOR.isLoaded) {
									clearInterval(intervalId);
									self.bindSaveData();
									params.started[ self.getInstanceIdentifier() ] = true;
								}
							}, 100);
						} else {
							self.bindSaveData();
							params.started[ self.getInstanceIdentifier() ] = true;
						}
					}
				}
function ( targets , options ) { this . setOptions ( options ) ; targets = targets || { } ; var self = this ; this . targets = this . targets || [ ] ; if ( self . options . name ) { this . href = self . options . name ; } else { this . href = location . hostname + location . pathname + location . search + location . hash ; } this . targets = $ . merge ( this . targets , targets ) ; this . targets = $ . unique ( this . targets ) ; this . targets = $ ( this . targets ) ; if ( ! this . browserStorage . isAvailable ( ) ) { return false ; } var callback_result = self . options . onBeforeRestore . call ( self ) ; if ( callback_result === undefined || callback_result ) { self . restoreAllData ( ) ; } if ( this . options . autoRelease ) { self . bindReleaseData ( ) ; } if ( ! params . started [ this . getInstanceIdentifier ( ) ] ) { if ( self . isCKEditorPresent ( ) ) { var intervalId = setInterval ( function ( ) { if ( CKEDITOR . isLoaded ) { clearInterval ( intervalId ) ; self . bindSaveData ( ) ; params . started [ self . getInstanceIdentifier ( ) ] = true ; } } , 100 ) ; } else { self . bindSaveData ( ) ; params . started [ self . getInstanceIdentifier ( ) ] = true ; } } }
Protect specified forms, store it's fields data to local storage and restore them on page load

@param [Object] targets		forms object(s), result of jQuery selector
@param Object options			plugin options

@return void
Protect specified forms store it s fields data to local storage and restore them on page load