/*  Formalize - version 1.1  Note: This file depends on the Dojo library.*/// Module pattern:// http://yuiblog.com/blog/2007/06/12/module-patternvar FORMALIZE = (function(window, document, undefined) {  // Private constants.  var PLACEHOLDER_SUPPORTED = 'placeholder' in document.createElement('input');  var AUTOFOCUS_SUPPORTED = 'autofocus' in document.createElement('input');  var IE6 = parseInt(dojo.isIE, 10) === 6;  var IE7 = parseInt(dojo.isIE, 10) === 7;  // Expose innards of FORMALIZE.  return {    // FORMALIZE.go    go: function() {      for (var i in FORMALIZE.init) {        FORMALIZE.init[i]();      }    },    // FORMALIZE.init    init: {      // FORMALIZE.init.full_input_size      full_input_size: function() {        if (!IE7 || !dojo.query('textarea, input.input_full').length) {          return;        }        // This fixes width: 100% on <textarea> and class="input_full".        // It ensures that form elements don't go wider than container.        dojo.query('textarea, input.input_full').forEach(function(el) {          var new_el = el.cloneNode(false);          var span = document.createElement('span');          span.className = 'input_full_wrap';          span.appendChild(new_el);          el.parentNode.replaceChild(span, el);        });      },      // FORMALIZE.init.ie6_skin_inputs      ie6_skin_inputs: function() {        // Test for Internet Explorer 6.        if (!IE6 || !dojo.query('input, select, textarea').length) {          // Exit if the browser is not IE6,          // or if no form elements exist.          return;        }        // For <input type="submit" />, etc.        var button_regex = /button|submit|reset/;        // For <input type="text" />, etc.        var type_regex = /date|datetime|datetime-local|email|month|number|password|range|search|tel|text|time|url|week/;        dojo.query('input').forEach(function(el) {          // Is it a button?          if (el.getAttribute('type').match(button_regex)) {            dojo.addClass(el, 'ie6_button');            /* Is it disabled? */            if (el.disabled) {              dojo.addClass(el, 'ie6_button_disabled');            }          }          // Or is it a textual input?          else if (el.getAttribute('type').match(type_regex)) {            dojo.addClass(el, 'ie6_input');            /* Is it disabled? */            if (el.disabled) {              dojo.addClass(el, 'ie6_input_disabled');            }          }        });        dojo.query('textarea, select').forEach(function(el) {          /* Is it disabled? */          if (el.disabled) {            dojo.addClass(el, 'ie6_input_disabled');          }        });      },      // FORMALIZE.init.autofocus      autofocus: function() {        if (AUTOFOCUS_SUPPORTED || !dojo.query('[autofocus]').length) {          return;        }        dojo.query('[autofocus]')[0].focus();      },      // FORMALIZE.init.placeholder      placeholder: function() {        if (PLACEHOLDER_SUPPORTED || !dojo.query('[placeholder]').length) {          // Exit if placeholder is supported natively,          // or if page does not have any placeholder.          return;        }        FORMALIZE.misc.add_placeholder();        dojo.query('[placeholder]').forEach(function(el) {          dojo.connect(el, 'onfocus', function() {            var text = el.getAttribute('placeholder');            if (el.value === text) {              el.value = '';              dojo.removeClass(el, 'placeholder_text');            }          });          dojo.connect(el, 'onblur', function() {            FORMALIZE.misc.add_placeholder();          });        });        // Prevent <form> from accidentally        // submitting the placeholder text.        dojo.query('form').forEach(function(form) {          dojo.connect(form, 'onsubmit', function() {            dojo.query('[placeholder]', form).forEach(function(el) {              var text = el.getAttribute('placeholder');              if (el.value === text) {                el.value = '';                dojo.removeClass(el, 'placeholder_text');              }            });          });          dojo.connect(form, 'onreset', function() {            setTimeout(FORMALIZE.misc.add_placeholder, 50);          });        });      }    },    // FORMALIZE.misc    misc: {      // FORMALIZE.misc.add_placeholder      add_placeholder: function() {        if (PLACEHOLDER_SUPPORTED || !dojo.query('[placeholder]').length) {          // Exit if placeholder is supported natively,          // or if page does not have any placeholder.          return;        }        dojo.query('[placeholder]').forEach(function(el) {          var text = el.getAttribute('placeholder');          if (!el.value || el.value === text) {            el.value = text;            dojo.addClass(el, 'placeholder_text');          }        });      }    }  };// Alias window, document.})(this, this.document);// Automatically calls all functions in FORMALIZE.initdojo.addOnLoad(function() {  FORMALIZE.go();});
