diff -r 299a90e28abc -r 87e08a6e4fec install/includes/js/formutils.js --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/install/includes/js/formutils.js Wed Jan 16 13:55:49 2008 -0500 @@ -0,0 +1,169 @@ +/** + * 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/bad.gif'; +var img_good = '../images/good.gif'; +var img_neu = '../images/unknown.gif'; + +/** + * Highlights the background of the next-up 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 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 = $(tr).Width() - 24; + } + else + { + var span_width = $(input).Width() - 24; + } + var span_top = $(input).Top() + $(input).Height(); + var span_left = $(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 = $(base).Top() + 'px'; + hider.style.left = $(base).Left() + 'px'; + hider.style.width = $(base).Width() + 'px'; + hider.style.height = $(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(0, 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') ) + { + opacity('ajax_loader', 70, 0, 750); + setTimeout(function() + { + var body = document.getElementsByTagName('body')[0]; + body.removeChild(document.getElementById('ajax_loader')); + }, 1000); + } +}