/*
 * $Id:$
 *
 * This is a javascript file used for providing JS support for AutoForm.
 */

var afHelpMap = {};

function afRegisterHelp(key, text) {
    afHelpMap[key] = text;
}

function afObserve(eltId, type, fn) {
  $(eltId).observe(type, fn);
}

function afShowHelp(evt, name) {
    var elt = $E('div', { id: 'af-help-popup' }, afHelpMap[name] );
    elt.style.position = 'absolute';
    elt.style.top = (Event.pointerY(evt) + 4) + "px";
    elt.style.left = (Event.pointerX(evt) + 13) + "px";
    elt.style.display = 'block';
    document.body.appendChild(elt);
}

function afHideHelp() {
    if($('af-help-popup')) {
        document.body.removeChild($('af-help-popup'));
    }
}

function afTextFieldSelected(evt, elt, maxlen) {
    elt.addClassName('af-text-field-selected');
    if(maxlen == null) {
        return;
    }
    var box = $E('div', { id: 'af-char-counter' }, "Characters left: " + (maxlen - elt.value.length));
    var pos = elt.cumulativeOffset();
    box.style.position = 'absolute';
    box.style.top =  pos.top + "px";
    box.style.left = (elt.getWidth() + 4 + pos.left) + "px";
    document.body.appendChild(box);
    elt.observe('keyup', function(evt) {
                    box.innerHTML = "Characters left: " + (maxlen - elt.value.length);
                });

}

function afTextFieldUnSelected(evt, elt, maxlen) {
    elt.removeClassName('af-text-field-selected');
    elt.stopObserving('keyup');
    if($('af-char-counter')) {
        document.body.removeChild($('af-char-counter'));
    }
}


function afCurrencyFieldSelected(evt, elt, maxlen) {
    elt.addClassName('af-text-field-selected');

}

function afCurrencyFieldUnSelected(evt, elt, maxlen) {
    elt.value = elt.value.replace(/[^0-9.-]/g, "");
    elt.removeClassName('af-text-field-selected');
}


function afNumberFieldSelected(evt, elt, maxlen) {
    elt.addClassName('af-text-field-selected');

}

function afNumberFieldUnSelected(evt, elt, maxlen) {
    elt.value = elt.value.replace(/[^0-9.-]/g, "");
    elt.removeClassName('af-text-field-selected');
}


function afUrlFieldSelected(evt, elt, maxlen) {
    elt.addClassName('af-text-field-selected');

}

function afUrlFieldUnSelected(evt, elt, maxlen) {
    elt.value = (elt.value.match(/^http/) || elt.value.match(/^ *$/)) ? elt.value : 'http://' + elt.value;
    elt.removeClassName('af-text-field-selected');
}


function afPercentFieldSelected(evt, elt, maxlen) {
    elt.addClassName('af-text-field-selected');

}

function afPercentFieldUnSelected(evt, elt, maxlen) {
    elt.value = elt.value.replace(/[^0-9.-]/g, "");
    elt.removeClassName('af-text-field-selected');
}

function afDateFieldSelected(evt, elt, maxlen) {
    elt.addClassName('af-text-field-selected');

}

function afDateFieldUnSelected(evt, elt, maxlen) {
    elt.removeClassName('af-text-field-selected');
}

function afNode(x) {
  return $(x);
}

function afDisableFields(root) {
  if($(root).disabled !== undefined) {
    $(root).disabled = true;
  }
  var children = $(root).childElements();
  return children.length == 0 ? true : children.each(afDisableFields);
}



function afEnableFields(root) {
  if($(root).disabled !== undefined) {
    $(root).disabled = false;
  }
  var children = $(root).childElements();
  return children.length == 0 ? true : children.each(afEnableFields);
}


function afSelectAllCheckboxes(evt, root, control, selectLabel, unselectLabel) {
  var newChecked = null;
  if(control.innerHTML == selectLabel) {
    newChecked = true;
    control.innerHTML = unselectLabel;
  } else {
    newChecked = false;
    control.innerHTML = selectLabel;
  }

  $(root).select('input').each(function(input) {
    input.checked = newChecked;
  });
  evt.stop();
}
