// ==UserScript==
// @name           Focus First Input
// @namespace      http://www.frightanic.com/greasemonkey/ffi
// @description    Focuses the first "text" input field (text, password, textarea) in the first form if the field is visible.
// @author         Marcel Stör
// @version        1.0
// ==/UserScript==
/*
Copyright (C) 2008 Marcel Stör.

This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
as published by the Free Software Foundation; either version 2
of the License, or (at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.
*/

(function(){
	var boolReturn = false, elements, element, size, delta, position;
	if(!window.location.hash) {
		if(!document || !document.forms || ( document.forms.length < 1 ) || ( document.forms[0].elements < 1 ) ) {
			return boolReturn ;
		}
		size =  [window.innerHeight, window.innerWidth];
		delta = [window.pageYOffset, window.pageXOffset];
		
		elements = document.forms[0].elements;
		for(var i = 0; i < elements.length && !boolReturn; i++){
			element = elements[i] ;
			switch (element.type) {
				case "text" : 
				case "password" : 
				case "textarea" :
					position = [0, 0];
					var tmpElement = element;
					do {
						position[0] += tmpElement.offsetTop;
						position[1] += tmpElement.offsetLeft;
						tmpElement = tmpElement.offsetParent;
					} while (tmpElement);
					   
					if (position[0] > delta[0] && position[0] < delta[0] + size[0] && 
						position[1] > delta[1] && position[1] < delta[1] + size[1]) {
						element.focus();
						boolReturn = true;
						break;
					}
				default : 
					// keep looping
					break;
			} 
		}
	}
	return boolReturn ;
})();