var thisManager = this;
this.form.onsubmit = function(evt) { thisManager.submit(evt); };
this.form.onclick = function(evt) { thisManager.click(evt); };
- this.submitButton = null;
/* raised on form submit */
this.onBeforeSubmit = null;
if (onBeforeSubmit.length) {
onBeforeSubmit = onBeforeSubmit[0];
}
+ /*jslint evil: true */
this.onBeforeSubmit = eval(onBeforeSubmit.value);
bsMessage = this.onBeforeSubmit(thisManager, evt);
}
query += submitButton.name + '=' + submitButton.value + '&';
}
- if (window.AJAX_CONFIG && (AJAX_CONFIG & 1 === 1)) {
+ if (window.AJAX_CONFIG && ((AJAX_CONFIG & 1) === 1)) {
if (form.method.toLowerCase() === 'post') {
this._post(query);
}
var tabIndex = ob.tabIndex;
var text;
if (ob.firstChild && ob.firstChild.className === 'hidden_value') {
- text = ob.firstChild.innerHTML;
+ text = ob.firstChild.innerHTML;
}
else {
- text = ob.innerHTML;
+ text = ob.innerHTML;
}
disablePropagation(evt);
var parent;
return;
}
var fragments = req.responseXML.documentElement.childNodes;
- var fragment, dest;
- var i;
- for (i=0 ; i<fragments.length ; i++) {
- fragment = fragments[i];
- if (fragment.nodeName === 'fragment') {
- dest = document.getElementById(fragment.getAttribute('id'));
- dest.innerHTML = fragment.firstChild.nodeValue;
-
- scripts = dest.getElementsByTagName('script');
- var j;
- for (j=0 ; j < scripts.length ; j++) {
- globalScriptRegistry.loadScript(scripts[j]);
- }
+ var element, dest, i, j;
+ for (i=0 ; i < fragments.length ; i++) {
+ element = fragments[i];
+ switch (element.nodeName) {
+ case 'fragment' :
+ dest = document.getElementById(element.getAttribute('id'));
+ if(dest) {
+ dest.innerHTML = element.firstChild.nodeValue;
+ scripts = dest.getElementsByTagName('script');
+ for (j=0 ; j < scripts.length ; j++) {
+ globalScriptRegistry.loadScript(scripts[j]); }
+ }
+ break;
+ case 'base' :
+ var headBase = document.getElementsByTagName('base');
+ if (headBase.length > 0) {
+ headBase[0].setAttribute('href', element.getAttribute('href'));
+ }
+ else {
+ headBase = document.createElement('base');
+ headBase.setAttribute('href', element.getAttribute('href'));
+ document.head.appendChild(headBase);
+ }
+ break;
}
}
break;
}
var onAfterPopulate = this.onAfterPopulate;
- if (typeof(onAfterPopulate) === "string") {
- if (window.console) {
- console.warn('Deprecation WARNING onAfterPopulate: ' + onAfterPopulate);
- }
- onAfterPopulate = eval(onAfterPopulate);
- }
onAfterPopulate();
this.scrollToPortalMessage();
+ var url = this.form.action;
+ history.pushState(url, document.title, url);
};
FormManager.prototype.scrollToPortalMessage = function() {
var psm = document.getElementById('DesktopStatusBar');
- var msgOffset = psm.offsetTop;
- smoothScroll(window.scrollY, msgOffset);
- shake(psm, 10, 1000);
+ if (psm) {
+ var msgOffset = psm.offsetTop;
+ smoothScroll(window.scrollY, msgOffset);
+ shake(psm, 10, 1000);
+ }
};
FormManager.prototype._fitField = function(evt) {
/* adapted from http://xahlee.info/js/js_shake_box.html */
function shake(e, distance, time) {
- // Handle arguments
- if (!time) time = 500;
- if (!distance) distance = 5;
-
- // Save the original style of e, Make e relatively positioned, Note the animation start time, Start the animation
- var originalStyle = e.style.cssText;
- e.style.position = "relative";
- var start = (new Date()).getTime();
- animate();
-
- // This function checks the elapsed time and updates the position of e.
- // If the animation is complete, it restores e to its original state.
- // Otherwise, it updates e's position and schedules itself to run again.
- function animate() {
- var now = (new Date()).getTime();
- // Get current time
- var elapsed = now-start;
- // How long since we started
- var fraction = elapsed/time;
- // What fraction of total time?
- if (fraction < 1) {
- // If the animation is not yet complete
- // Compute the x position of e as a function of animation
- // completion fraction. We use a sinusoidal function, and multiply
- // the completion fraction by 4pi, so that it shakes back and
- // forth twice.
- var x = distance * Math.sin(fraction*8*Math.PI);
- e.style.left = x + "px";
- // Try to run again in 25ms or at the end of the total time.
- // We're aiming for a smooth 40 frames/second animation.
- setTimeout(animate, Math.min(25, time-elapsed));
- }
- else {
- // Otherwise, the animation is complete
- e.style.cssText = originalStyle; // Restore the original style
- }
- }
+ // Handle arguments
+ if (!time) { time = 500; }
+ if (!distance) { distance = 5; }
+
+ // Save the original style of e, Make e relatively positioned, Note the animation start time, Start the animation
+ var originalStyle = e.style.cssText;
+ e.style.position = "relative";
+ var start = (new Date()).getTime();
+
+ // This function checks the elapsed time and updates the position of e.
+ // If the animation is complete, it restores e to its original state.
+ // Otherwise, it updates e's position and schedules itself to run again.
+ function animate() {
+ var now = (new Date()).getTime();
+ // Get current time
+ var elapsed = now-start;
+ // How long since we started
+ var fraction = elapsed/time;
+ // What fraction of total time?
+ if (fraction < 1) {
+ // If the animation is not yet complete
+ // Compute the x position of e as a function of animation
+ // completion fraction. We use a sinusoidal function, and multiply
+ // the completion fraction by 4pi, so that it shakes back and
+ // forth twice.
+ var x = distance * Math.sin(fraction*8*Math.PI);
+ e.style.left = x + "px";
+ // Try to run again in 25ms or at the end of the total time.
+ // We're aiming for a smooth 40 frames/second animation.
+ setTimeout(animate, Math.min(25, time-elapsed));
+ }
+ else {
+ // Otherwise, the animation is complete
+ e.style.cssText = originalStyle; // Restore the original style
+ }
+ }
+ animate();
}
}());