﻿/**
 * 
 * @author Alexander Myadzel <aem@teletype.ru>
 * @modified 23/16/2009 12:33
 *
 */

var InputPlaceholder = function(oElement) {
	
	var oElement = oElement;
	var oForm;
	var oSubmitElement;

	var sDefaultValue = 'search';
	var bIsEmpty = true;
	var sIsEmptyClassName = 'empty';

	function initialize()
	{
		sDefaultValue = oElement.getAttribute('title');
		oElement.value = sDefaultValue;
		
		oElement.setAttribute('title', '');
		
		oElement.className = getNormalizedClassName(sIsEmptyClassName);
		
		addEvent(oElement, 'focus', setValue);
		addEvent(oElement, 'blur', unsetValue);
		addEvent(oElement, 'keydown', checkValue);
		addEvent(oElement, 'keyup', checkValue);
		
		oForm = oElement.parentNode;
        while (oForm.tagName.toLowerCase() != 'form') {
			oForm = oForm.parentNode;
        }
		
		oSubmitElement = getSubmitButton(oForm);
		oSubmitElement.disabled = true;
		
		addEvent(oForm, 'submit', resetValue);
	}
	
	function getNormalizedClassName(sClassName)
	{
		var rRegExp = new RegExp("(^|\\s)?" + sIsEmptyClassName + "($|\\s)?");
		var sNormalizedClassName = oElement.className.replace(rRegExp, '');
		return sClassName ? sNormalizedClassName + ' ' + sClassName : sNormalizedClassName;
	}
	
	function getSubmitButton(oForm)
	{
		var aInputs = oForm.getElementsByTagName('input');
		for (var i = 0; i < aInputs.length; i++) {
			if (aInputs[i].type == 'submit') {
				return aInputs[i];
			}
		}
	}
	
	function resetValue(oEvent) {
		if (bIsEmpty) {
			stopEvent(getEvent(oEvent));
			removeEvent(oElement, 'blur', unsetValue);
			oElement.value = '';
		}
	}
	
	function setValue() {
		if (bIsEmpty) {
			oElement.value = '';
			oElement.className = getNormalizedClassName();
		}
	}
	
	function unsetValue() {
		if (bIsEmpty) {
			oElement.value = sDefaultValue;
			oElement.className = getNormalizedClassName(sIsEmptyClassName);
		}
	}
	
	function checkValue() {
		if (oElement.value != '') {
			bIsEmpty = false;
			oSubmitElement.disabled = false;
		} else {
			bIsEmpty = true;
			oSubmitElement.disabled = true;
		}
	}

	function construct() {
		this.init = function() {
			initialize();
		}
		this.init();
	}

	return new construct();
}

InputPlaceholder.init = function()
{
	var aElements = getElementsByClassName('initialized');
	for (var i = 0; i < aElements.length; i++) {
		new InputPlaceholder(aElements[i]);
	}
}

addEvent(window, 'load', function(){
	InputPlaceholder.init();
});


