var ip_focused = 'focused';
var ip_blured = 'blured';

var ip_button = 'button';
var ip_buttonhover = 'buttonhover';
var ip_buttonpressed = 'buttonpressed';


//------------- Start -------------
addLoadEvent(ip_init);

function ip_init(){
	ip_init2('input');
	ip_init2('textarea');
	ip_init2('select');
	ip_init2('button');
}

function ip_init2(tagName){
	var inputs = document.getElementsByTagName(tagName);
	for (var i = 0; i < inputs.length; i ++) {
		if (inputs[i].tagName == 'BUTTON' || (inputs[i].tagName == 'INPUT' && inputs[i].type != 'text' && inputs[i].type != 'password')) {
			if (inputs[i].type == 'button' || inputs[i].type == 'submit' || inputs[i].type == 'reset') {
				inputs[i].className = ip_addclass(inputs[i].className, ip_button);
				inputs[i].onmouseover = ip_mouseover;
				inputs[i].onmouseout = ip_mouseout;
				inputs[i].onmousedown = ip_mousedown;
				inputs[i].onmouseup = ip_mouseover;
			}
			continue;
		}
		inputs[i].className = ip_addclass(inputs[i].className, ip_blured);
		inputs[i].onfocus = ip_focus;
		inputs[i].onblur = ip_blur;
	}
}

function ip_getinput(e){
	if (e) return e.target;
	else return event.srcElement;
}
function ip_focus(e){
	var input = ip_getinput(e);
	input.className = ip_addclass(ip_stripclass(input.className, ip_blured), ip_focused);
}
function ip_blur(e){
	var input = ip_getinput(e);
	input.className = ip_addclass(ip_stripclass(input.className, ip_focused), ip_blured);
}
function ip_mouseover(e){
	var input = ip_getinput(e);
	input.className = ip_addclass(ip_stripclass(ip_stripclass(input.className, ip_button), ip_buttonpressed), ip_buttonhover);
}
function ip_mouseout(e){
	var input = ip_getinput(e);
	input.className = ip_addclass(ip_stripclass(ip_stripclass(input.className, ip_buttonhover), ip_buttonpressed), ip_button);
}
function ip_mousedown(e){
	var input = ip_getinput(e);
	input.className = ip_addclass(ip_stripclass(ip_stripclass(input.className, ip_buttonhover), ip_button), ip_buttonpressed);
}

function ip_hasclass(classes, search){
	var ca = classes.split(' ');
	for (var i = 0; i < ca.length; i ++)
		if (ca[i] == search) return (i + 1);
	return false;
}
function ip_addclass(classes, newclass){
	if (!ip_hasclass(classes, newclass))
		return (classes + ' ' + newclass);
	return classes;
}
function ip_stripclass(classes, del){
	var i = ip_hasclass(classes, del);
	if (i) {
		i -= 1;
		var ca = classes.split(' ');
		return (ca.slice(0, i).join(' ') + ' ' + ca.slice(i + 1, ca.length).join(' '));
	}
	return classes;
}