/*
  LIBRARY TO SHOW HINTS IN FORMS
  Taken and adapted from:
  http://www.askthecssguy.com/2007/03/form_field_hints_with_css_and.html
  Thanks!
*/

/*
  ADD EVENT LISTENERS
  written by Dean Edwards, 2005
  http://dean.edwards.name/
*/

function addEvent(element, type, handler) {
	// assign each event handler a unique ID
	if (!handler.$$guid) handler.$$guid = addEvent.guid++;
	// create a hash table of event types for the element
	if (!element.events) element.events = {};
	// create a hash table of event handlers for each element/event pair
	var handlers = element.events[type];
	if (!handlers) {
		handlers = element.events[type] = {};
		// store the existing event handler (if there is one)
		if (element["on" + type]) {
			handlers[0] = element["on" + type];
		}
	}
	// store the event handler in the hash table
	handlers[handler.$$guid] = handler;
	// assign a global event handler to do all the work
	element["on" + type] = handleEvent;
};
// a counter used to create unique IDs
addEvent.guid = 1;

function removeEvent(element, type, handler) {
	// delete the event handler from the hash table
	if (element.events && element.events[type]) {
		delete element.events[type][handler.$$guid];
	}
};

function handleEvent(event) {
	// grab the event object (IE uses a global event object)
	event = event || window.event;
	// get a reference to the hash table of event handlers
	var handlers = this.events[event.type];
	// execute each event handler
	for (var i in handlers) {
		this.$$handleEvent = handlers[i];
		this.$$handleEvent(event);
	}
};

function addLoadEvent(func) {
  addEvent(window,
             'load',
             func
            );
}

function prepareInputsForHints() {
  var inputs = document.getElementsByTagName("input");
  for (var i=0; i<inputs.length; i++){
    // test to see if the hint span exists first
    if (inputs[i].parentNode.getElementsByTagName("span")[0]) {
      // the span exists!  on focus, show the hint
      addEvent(inputs[i],
               'focus',
               function () {
                 this.parentNode.getElementsByTagName("span")[0].style.display = "inline";
               }
              );
      // when the cursor moves away from the field, hide the hint
      addEvent(inputs[i],
               'blur', 
               function () {
                 this.parentNode.getElementsByTagName("span")[0].style.display = "none";
               }
              );
    }
  }

  // repeat the same tests as above for selects
  var selects = document.getElementsByTagName("select");
  for (var k=0; k<selects.length; k++){
    if (selects[k].parentNode.getElementsByTagName("span")[0]) {
      addEvent(selects[k],
               'focus',
               function () {
                this.parentNode.getElementsByTagName("span")[0].style.display = "inline";
                 }
                );
      addEvent(selects[k],
                 'blur', 
                 function () {
                  this.parentNode.getElementsByTagName("span")[0].style.display = "none";
                 }
                );
    }
  }

  // and for textareas
  var textareas = document.getElementsByTagName("textarea");
  for (var m=0; m<textareas.length; m++){
    if (textareas[m].parentNode.getElementsByTagName("span")[0]) {
      addEvent(textareas[m],
                 'focus',
                 function () {
                  this.parentNode.getElementsByTagName("span")[0].style.display = "inline";
                 }
                );
      addEvent(textareas[m],
                 'blur', 
                 function () {
                  this.parentNode.getElementsByTagName("span")[0].style.display = "none";
                 }
                );
    }
  }
}
