/*
 * Utility routines for edition builder.
 */
// following http://sourceforge.net/forum/forum.php?thread_id=1735975&forum_id=510209
// and http://en.wikibooks.org/wiki/ZK/How-Tos#Pass_JavaScript_variable_value_to_ZK_Server
/*
 * If enter is pressed, send a 'blur' and 'change' event to textbox.
 * This will send changed value to server and trigger onChange event there.
 *
 * If submitButton != null, also send a 'click' event to submit button
 * control - this will trigger onClick for the button there.
 *
 * If submitButton === undefined, send a 'focus' event to textbox to
 * reenable onChanging timer (normally, onChanging is disabled after onblur).
 * Doing so will allow us to combine onChange/onChanging in a textbox
 * that is not associated with a text button.
 */
function fireSubmitOnEnter(e, changedTextbox, submitButton) {
    if (e.keyCode == 13) {
        if (document.createEvent) { 
            var evt = document.createEvent('HTMLEvents');
            evt.initEvent( 'blur', false, false);
            changedTextbox.dispatchEvent(evt);
   
            var evt = document.createEvent('HTMLEvents');
            evt.initEvent( 'change', false, false);
            changedTextbox.dispatchEvent(evt);

            if (submitButton) {
                evt = document.createEvent('MouseEvents');
                evt.initEvent('click', false, false);
                submitButton.dispatchEvent(evt);
            } else {
                var evt = document.createEvent('HTMLEvents');
                evt.initEvent( 'focus', false, false);
                changedTextbox.dispatchEvent(evt);
            }
        } else 
        if (document.createEventObject) {
            changedTextbox.fireEvent('onblur');
            changedTextbox.fireEvent('onchange');
            if (submitButton)
                submitButton.fireEvent('onclick');
            else
                changedTextbox.fireEvent('onfocus');
        } else {
            alert("browser not supported - cannot fire event - neither createEvent nor createEventObject defined");
        }
    }
}

// http://sourceforge.net/tracker/index.php?func=detail&aid=1683475&group_id=152762&atid=785194
function Boot_progressbox(id, msg, x, y) {
  //construct a progress box
  var html = '<div id="' + id + '" style="position: absolute; ' 
        + 'padding: 1em; background-color: #E0E0E0; color: #240F8B; font-size: 14px; '
        + 'left: ' + (x+5) + 'px; top: ' + (y+5) + 'px;">' 
        + msg + ' please wait.</div>';
  document.body.insertAdjacentHTML("afterbegin", html);
  return $e(id);
}

/*
 * This function can be used in Firebug to learn when ZK sets a
 * style property on a ZK element.  If called, as in watchStyle('width', 'zk_8u')
 * you will see a stacktrace whenever element's zk_8u's style.width is set.
 */
function watchStyle(style, p1id) {
    var p1s = document.getElementById(p1id).style;
    p1s.__defineSetter__(style, function(newvalue) { 
        console.log(style + " style is being set to: " + newvalue);
        console.trace();
        p1s.setProperty(style, newvalue, "");
    });
}
