install/includes/js/formutils.js
author Dan Fuhry <dan@enanocms.org>
Thu, 28 Oct 2010 03:05:31 -0400
changeset 1308 f9bee9b125ee
parent 1116 220428d80925
permissions -rw-r--r--
Parser updates. Added the "styled" keyword to wikitables to allow them to be styled using the current theme's standard table skinning, and changes to how the image tag parser decides how to display an image (framed, inline or raw).

/**
 * Images used for form field validation
 * @var string img_bad: Shown on field validation failure
 * @var string img_good: Shown on field validation success
 * @var string img_neu: Shown when a field's value matches known good regexp but still needs testing (e.g. DB info)
 */

var img_bad = '../images/checkbad.png';
var img_good = '../images/check.png';
var img_neu = '../images/checkunk.png';

/**
 * Highlights the background of the next-up <tr> tag.
 * @param object Form field
 */

function set_focus(item)
{
  var hint_id = ( item.type == 'radio' ) ? 'hint_' + item.name + '_' + item.value : 'hint_' + item.name;
  if ( document.getElementById(hint_id) )
  {
    var el = document.getElementById(hint_id);
    el.style.zIndex = String(getHighestZ() + 2);
    domObjChangeOpac(0, el);
    el.style.display = 'block';
    domOpacity(el, 0, 100, 400);
  }
  item = getParentTR(item);
  if ( item.tagName == 'TR' )
  {
    item.style.backgroundColor = '#FFFFE0';
  }
}

/**
 * Clears the background of the next-up <tr> tag.
 * @param object Form field
 */

function clear_focus(item)
{
  var hint_id = ( item.type == 'radio' ) ? 'hint_' + item.name + '_' + item.value : 'hint_' + item.name;
  if ( document.getElementById(hint_id) )
  {
    var el = document.getElementById(hint_id);
    // el.style.display = 'none';
    domOpacity(el, 100, 0, 200);
    setTimeout(function()
      {
        el.style.display = 'none';
      }, 250);
  }
  item = getParentTR(item);
  if ( item.tagName == 'TR' )
  {
    if ( IE )
    {
      item.style.backgroundColor = 'transparent';
    }
    else
    {
      item.style.backgroundColor = null;
    }
  }
}

function getParentTR(item)
{
  var tagName = item.tagName;
  while ( tagName != 'TR' && tagName != null )
  {
    item = item.parentNode;
    tagName = item.tagName;
  }
  if ( tagName == 'TR' && item.className != 'nohighlight' )
  {
    return item;
  }
  return null;
}

function init_hint(input, hint)
{
  hint.className = 'fieldtip_js';
  setTimeout(function()
    {
      if ( input.type == 'radio' )
      {
        var tr = getParentTR(input).parentNode.parentNode.parentNode;
        var span_width = $dynano(tr).Width() - 24;
      }
      else
      {
        var span_width = $dynano(input).Width() - 24;
      }
      var span_top = $dynano(input).Top() + $dynano(input).Height();
      var span_left = $dynano(input).Left();
      hint.style.top = span_top + 'px';
      hint.style.left = span_left + 'px';
      hint.style.width = span_width + 'px';
      hint.style.display = 'none';
    }, 100);
}

var set_inputs_to_highlight = function()
{
  var inputs = document.getElementsByTagName('input');
  for ( var i = 0; i < inputs.length; i++ )
  {
    // Highlighting
    var tr = getParentTR(inputs[i]);
    if ( tr )
    {
      inputs[i].onfocus = function()
      {
        set_focus(this);
      }
      inputs[i].onblur = function()
      {
        clear_focus(this);
      }
    }
    // Hints
    var hint_id = ( inputs[i].type == 'radio' ) ? 'hint_' + inputs[i].name + '_' + inputs[i].value : 'hint_' + inputs[i].name;
    if ( document.getElementById(hint_id) )
    {
      var el = document.getElementById(hint_id);
      if ( el.tagName == 'SPAN' )
      {
        init_hint(inputs[i], el);
      }
    }
  }
}

addOnloadHook(set_inputs_to_highlight);

function install_set_ajax_loading()
{
  var base = document.getElementById('enano-body');
  var hider = document.createElement('div');
  hider.style.position = 'absolute';
  hider.style.backgroundColor = '#FFFFFF';
  hider.style.top = $dynano(base).Top() + 'px';
  hider.style.left = $dynano(base).Left() + 'px';
  hider.style.width = $dynano(base).Width() + 'px';
  hider.style.height = $dynano(base).Height() + 'px';
  hider.style.backgroundPosition = 'center center';
  hider.style.backgroundImage = 'url(../images/loading-big.gif)';
  hider.style.backgroundRepeat = 'no-repeat';
  hider.id = 'ajax_loader';
  domObjChangeOpac(70, hider);
  var body = document.getElementsByTagName('body')[0];
  body.appendChild(hider);
  // opacity('ajax_loader', 0, 70, 750);
}

function install_unset_ajax_loading()
{
  if ( document.getElementById('ajax_loader') )
  {
    var body = document.getElementsByTagName('body')[0];
    body.removeChild(document.getElementById('ajax_loader'));
    /*
    opacity('ajax_loader', 70, 0, 750);
    setTimeout(function()
      {
        var body = document.getElementsByTagName('body')[0];
        body.removeChild(document.getElementById('ajax_loader'));
      }, 1000);
    */
  }
}