var WikiPage = {

    confirmExitMessage:'',
    isModified: false,
    causesValidation: true,
    
    init: function()
	{
		Event.observe(window, "load", this.load);
	},

	load: function()
	{
        window.onbeforeunload = WikiPage.confirmExit;
        
        var trackedCtrls = $$('.trackChanges input, textarea.trackChanges, input.trackChanges');
        trackedCtrls.each( function(ctrl) {
			switch(ctrl.type)
			{
				case 'textarea':
					Event.observe(ctrl, 'keydown', WikiPage.onKeyDown);
					Event.observe(ctrl, 'keypress', WikiPage.onKeyDown);
					break;
					
				case 'text':
					Event.observe(ctrl, 'keydown', WikiPage.onKeyDown);
					Event.observe(ctrl, 'keypress', WikiPage.onKeyDown);
					break;
				
				case 'radio':
					Event.observe(ctrl, 'click', WikiPage.setModified);						
					break;
			}
        });	
	},
	
	setModified: function()
	{
		WikiPage.isModified = true;
	},
	
	onKeyDown: function(evt)
	{
    	if( evt.ctrlKey || evt.which == 0 )
    	    return;
    	    
        // handle IE keys which should be ignored
    	switch( evt.keyCode )
    	{
        	case 9: //tab
    	    case 18: //alt
    	    case 19: //pause
    	    case 27: // esc
    	    case 91: //
    	    case 92: //
    	    case 93: //
    	    case 33: //pageup
    	    case 34: //pagedown
    	    case 35: //end
    	    case 36: //pos1
    	    case 37: //left
    	    case 38: //up
    	    case 39: //right
    	    case 40: //down
    	    case 45: //einf.
    	    case 112: //F1
    	    case 113:
    	    case 114:
    	    case 115:
    	    case 116:
    	    case 117:
    	    case 118:
    	    case 119:
    	    case 120:
    	    case 121:
    	    case 122:
    	    case 123: //F12
    	    case 144: //num
    	    case 145: //rollen
    	        return;
    	}
    	
	    WikiPage.setModified();
	},
    
	confirmExit: function(evt)
	{
        if(typeof evt == 'undefined')
            evt = window.event;

        if( WikiPage.isModified && WikiPage.causesValidation )
        {
            evt.returnValue = WikiPage.confirmExitMessage;
            return WikiPage.confirmExitMessage;
        }
        else
        {
            evt.cancelBubble = true;
        }
	}
};

WikiPage.init()