dojo.provide("amplafi.ext.fancyLabels");

dojo.require("amplafi.util");

// TODO (AA): Need to find the initial source of this (before i adopted it for dojo).
// used for labeling quick invite fields
// inspired by aaron boodman's labels.js
// USAGE: addEvent(window, 'load', function() { init('searchjobs'); });
amplafi.ext.fancyLabels = {

  initLabel : function(span) {
    span.style.display = 'none';
    var lbl = span.getElementsByTagName('label')[0] || span;
    var input = document.getElementById(lbl.htmlFor);
    input._label = lbl.firstChild.nodeValue;
    if (input.type=='password') {
        //if (dojo.render.html.ie)
            //return;
        //input._type = true;
    }
    dojo.event.connectOnce(input, 'onfocus', this.focusedLabel);
    dojo.event.connectOnce(input, 'onblur', this.blurredLabel);
    if(input.value == '' || input.value == input._label)
        this.showLabel(input);
  },

  wipeLabels : function(div) {
    var inputs =  amplafi.html.getElementsByTagNames('input,textarea',div);
    for(var i = 0; i < inputs.length; i++) {
      if(inputs[i].value == inputs[i]._label)
          this.hideLabel(inputs[i]);
    }
  },

  focusedLabel : function(e) {
    var input = window.event ? window.event.srcElement : e ? e.target : null;
    if(input.value == input._label)
        amplafi.ext.fancyLabels.hideLabel(input);
  },

  blurredLabel : function(e) {
    var input = window.event ? window.event.srcElement : e ? e.target : null;
    if(input.value == '' || input.value == input._label)
        amplafi.ext.fancyLabels.showLabel(input);
  },

  hideLabel : function(input) {
    input.value = '';
    if (input._type)
        input.type = 'password';
    dojo.html.removeClass(input, 'labeloff');
    dojo.html.addClass(input, 'labelon');
  },

  showLabel : function(input) {
    input.value = input._label;
    if (input._type)
        input.type = 'text';
    dojo.html.removeClass(input, 'labelon');
    dojo.html.addClass(input, 'labeloff');
  },

  init: function(id, form) {
      var div = document.getElementById(id);
      if(!div) return;
      
      //var lbls = dojo.html.getElementsByClass(div, 'span', 'lbl');
      var lbls = div.getElementsByTagName('label');
      for(var i = 0; i < lbls.length; i++) {
        this.initLabel(lbls[i]);
      }

      // form is an optional parameter (used when form is not inside target div)
      if(!form)
          var form = div.getElementsByTagName('form')[0];
      dojo.event.connect(form, 'submit', function() {
          amplafi.ext.fancyLabels.wipeLabels(div) });
    },

    // http://domscripting.com/blog/display/18
    // a nice getElementsByClass function from Dustin Diaz - we don't need it here,
    // but the original code did.
    getElementsByClass: function(node,searchClass,tag) {
      var classElements = new Array();
      var els = node.getElementsByTagName(tag);
      var elsLen = els.length;
      var pattern = new RegExp("\b"+searchClass+"\b");
      for (i = 0, j = 0; i < elsLen; i++) {
        if ( pattern.test(els[i].className) ) {
          classElements[j] = els[i];
          j++;
        }
      }
      return classElements;
    }
}

