2007-08-30 Igor Zelmanovich <igorz@mainsoft.com>
[mono.git] / mcs / class / System.Web / resources / webform.js
index 6c51da9faf334977caf32b1981f6f169e73ea60a..11c5682f33455cc4885a7697d79d361ad1630cfd 100644 (file)
  * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
  */
 
+function WebForm_Initialize(webForm) {
 
-function WebForm_AutoFocus (id)
+webForm.WebForm_AutoFocus = function (id)
 {
-       var x = WebForm_GetElementById (id);
+       var x = this.WebForm_GetElementById (id);
 
-       if (x && (!WebForm_CanFocus(x))) {
-               x = WebForm_FindFirstFocusableChild(x);
+       if (x && (!this.WebForm_CanFocus(x))) {
+               x = this.WebForm_FindFirstFocusableChild(x);
        }
        if (x) { x.focus(); }
 }
 
-function WebForm_CanFocus(element) {
+webForm.WebForm_CanFocus = function (element) {
        if (!element || !(element.tagName) || element.disabled) {
                return false;
        }
@@ -54,7 +55,7 @@ function WebForm_CanFocus(element) {
                        tagName == "a");
 }
 
-function WebForm_FindFirstFocusableChild(element) {
+webForm.WebForm_FindFirstFocusableChild = function (element) {
        if (!element || !(element.tagName)) {
                return null;
        }
@@ -66,12 +67,12 @@ function WebForm_FindFirstFocusableChild(element) {
        if (children) {
                for (var i = 0; i < children.length; i++) {
                        try {
-                               if (WebForm_CanFocus(children[i])) {
+                               if (this.WebForm_CanFocus(children[i])) {
                                        return children[i];
                                }
                                else {
-                                       var focused = WebForm_FindFirstFocusableChild(children[i]);
-                                       if (WebForm_CanFocus(focused)) {
+                                       var focused = this.WebForm_FindFirstFocusableChild(children[i]);
+                                       if (this.WebForm_CanFocus(focused)) {
                                                return focused;
                                        }
                                }
@@ -82,103 +83,128 @@ function WebForm_FindFirstFocusableChild(element) {
        return null;
 }
 
-function wasControlEnabled (id)
+webForm.WebForm_ReEnableControls = function  ()
 {
-       if (typeof (__enabledControlArray) == 'undefined')
+       if (typeof(this._form.__enabledControlArray) != 'undefined' && this._form.__enabledControlArray != null)
+               __enabledControlArray = this._form.__enabledControlArray;
+       
+       if (typeof(__enabledControlArray) == 'undefined' || __enabledControlArray == null)
                return false;
-
-       for (var i = 0; i < __enabledControlArray.length; i ++) {
-               if (id == __enabledControlArray[i])
-                       return true;
+       
+       this._form.__disabledControlArray = new Array();
+       for (var i = 0; i < __enabledControlArray.length; i++) {
+               var c = this.WebForm_GetElementById (__enabledControlArray[i]);
+               if ((typeof(c) != "undefined") && (c != null) && (c.disabled == true)) {
+                       c.disabled = false;
+                       this._form.__disabledControlArray[this._form.__disabledControlArray.length] = c;
+               }
        }
-
-       return false;
+       setTimeout((this._instanceVariableName ? this._instanceVariableName + "." : "") + "WebForm_ReDisableControls ()", 0);
+       return true;
 }
 
-function WebForm_ReEnableControls (currForm)
+webForm.WebForm_ReDisableControls = function  ()
 {
-       currForm = currForm || theForm;
-       if (typeof (currForm) == 'undefined')
-               return;
-
-       for (var i = 0; i < currForm.childNodes.length; i ++) {
-               var node = currForm.childNodes[i];
-               if (node.disabled && wasControlEnabled (node.id))
-                       node.disabled = false;
+       for (var i = 0; i < this._form.__disabledControlArray.length; i++) {
+               this._form.__disabledControlArray[i].disabled = true;
        }
 }
 
-function WebForm_DoPostback (ctrl, par, url, apb, pval, tf, csubm, vg)
+// This function is only used in the context of TARGET_J2EE for portlets
+webForm.PortalWebForm_DoPostback = function  (id, par, url, apb, pval, tf, csubm, vg)
 {
-       if (typeof(SetValidatorContext) == "function") 
-               SetValidatorContext (WebForm_GetFormFromCtrl (ctrl));
-
-       if (pval && typeof(Page_ClientValidate) == "function" && !Page_ClientValidate(vg))
-               return;
+       if (url != null) {
+               if (url.indexOf ("vmw.action.page=") == 0) {
+                       this._form.__NEXTVMWACTIONPAGE.value = url.substring ("vmw.action.page=".length);
+                       url = this._form.action;
+               }
+               else if (url.indexOf ("vmw.render.page=") == 0)
+               {
+                       this._form.__NEXTVMWRENDERPAGE.value = url.substring ("vmw.render.page=".length);
+                       this._form.submit ();
+                       return;
+               }
+       }
+       return this.WebForm_DoPostback (id, par, url, apb, pval, tf, csubm, vg);
+}
+webForm.WebForm_DoPostback = function  (id, par, url, apb, pval, tf, csubm, vg)
+{
+       var validationResult = true;
+       if (pval && typeof(this.Page_ClientValidate) == "function")
+               validationResult =  this.Page_ClientValidate(vg);
 
-       if (url != null)
-               WebForm_GetFormFromCtrl (ctrl).action = url;
-               
+       if (validationResult) {
+               if ((typeof(url) != "undefined") && (url != null) && (url.length > 0))
+                       this._form.action = url;
+               if (tf) {
+                       var lastFocus = this._form.elements["__LASTFOCUS"];
+                       if ((typeof(lastFocus) != "undefined") && (lastFocus != null))
+                               lastFocus.value = id;
+               }
+       }               
        if (csubm)
-               __doPostBack (ctrl, par);
+               this.__doPostBack (id, par);
 }
 
-function WebForm_DoCallback (id, arg, callback, ctx, errorCallback)
+webForm.WebForm_DoCallback = function (id, arg, callback, ctx, errorCallback, useAsync)
 {
-       var myForm = WebForm_GetFormFromCtrl (id);
-       var qs = WebForm_getFormData (myForm) + "__CALLBACKTARGET=" + id + "&__CALLBACKARGUMENT=" + encodeURIComponent(arg);
-       if (myForm["__EVENTVALIDATION"]) qs += "&__EVENTVALIDATION=" + encodeURIComponent(myForm["__EVENTVALIDATION"].value);
-       // WebForm_httpPost (myForm.serverURL, qs, function (httpPost) { WebForm_ClientCallback (httpPost, ctx, callback, errorCallback); });
-       WebForm_httpPost (document.URL, qs, function (httpPost) { WebForm_ClientCallback (httpPost, ctx, callback, errorCallback); });
+       var qs = this.WebForm_getFormData () + "__CALLBACKTARGET=" + id + "&__CALLBACKARGUMENT=" + encodeURIComponent(arg);
+  
+  if (this._form["__EVENTVALIDATION"])
+    qs += "&__EVENTVALIDATION=" + encodeURIComponent(this._form["__EVENTVALIDATION"].value);
+  
+       var This = this;
+       this.WebForm_httpPost (this._form.serverURL || document.URL, qs, function (httpPost) { This.WebForm_ClientCallback (httpPost, ctx, callback, errorCallback); });
 }
 
-function WebForm_ClientCallback (httpPost, ctx, callback, errorCallback)
+webForm.WebForm_ClientCallback = function (httpPost, ctx, callback, errorCallback)
 {
-       try {
-               var doc = httpPost.responseText;
+       var doc = httpPost.responseText;
+       if (doc.charAt(0) == "e") {
+               if ((typeof(errorCallback) != "undefined") && (errorCallback != null))
+                       errorCallback(doc.substring(1), ctx);
+       } else {
                var separatorIndex = doc.indexOf("|");
                if (separatorIndex != -1) {
                        var validationFieldLength = parseInt(doc.substring(0, separatorIndex));
                        if (!isNaN(validationFieldLength)) {
                                var validationField = doc.substring(separatorIndex + 1, separatorIndex + validationFieldLength + 1);
                                if (validationField != "") {
-                                       var validationFieldElement = theForm["__EVENTVALIDATION"];
+                                       var validationFieldElement = this._form["__EVENTVALIDATION"];
                                        if (!validationFieldElement) {
                                                validationFieldElement = document.createElement("INPUT");
                                                validationFieldElement.type = "hidden";
                                                validationFieldElement.name = "__EVENTVALIDATION";
-                                               theForm.appendChild(validationFieldElement);
+                                               validationFieldElement.id = validationFieldElement.name;
+                                               this._form.appendChild(validationFieldElement);
                                        }
                                        validationFieldElement.value = validationField;
                                }
-                               callback (doc.substring(separatorIndex + validationFieldLength + 1), ctx);
-                               return;
+                               if ((typeof(callback) != "undefined") && (callback != null))
+                                       callback (doc.substring(separatorIndex + validationFieldLength + 1), ctx);
                        }
+               } else {
+                       if ((typeof(callback) != "undefined") && (callback != null))
+                               callback (doc, ctx);
                }
-       } catch (e) {
-               if (errorCallback != null)
-                       errorCallback (httpPost.responseText, ctx);
-               return;
        }
-       callback (httpPost.responseText, ctx);
 }
 
-function WebForm_getFormData (theForm)
+webForm.WebForm_getFormData = function ()
 {
        var qs = "";
-       var len = theForm.elements.length;
+       var len = this._form.elements.length;
        for (n=0; n<len; n++) {
-               var elem = theForm.elements [n];
+               var elem = this._form.elements [n];
                var tagName = elem.tagName.toLowerCase();
                if (tagName == "input") {
                        var type = elem.type;
                        if ((type == "text" || type == "hidden" || type == "password" ||
                                ((type == "checkbox" || type == "radio") && elem.checked)) &&
-                               (elem.id != "__EVENTVALIDATION")) {
+          (elem.id != "__EVENTVALIDATION")) {
                                qs += elem.name + "=" + encodeURIComponent (elem.value) + "&";
                        }
-               }
-               else if (tagName == "select") {
+               } else if (tagName == "select") {
                        var selectCount = elem.options.length;
                        for (var j = 0; j < selectCount; j++) {
                                var selectChild = elem.options[j];
@@ -194,23 +220,22 @@ function WebForm_getFormData (theForm)
        return qs;
 }
 
-var axName = null;
-function WebForm_httpPost (url, data, callback)
+webForm.WebForm_httpPost = function (url, data, callback)
 {
        var httpPost = null;
        
        if (typeof XMLHttpRequest != "undefined") {
                httpPost = new XMLHttpRequest ();
        } else {
-               if (axName != null)
-                       httpPost = new ActiveXObject (axName);
+               if (this.axName != null)
+                       httpPost = new ActiveXObject (this.axName);
                else {
                        var clsnames = new Array ("MSXML", "MSXML2", "MSXML3", "Microsoft");
                        for (n = 0; n < clsnames.length && httpPost == null; n++) {
-                               axName = clsnames [n] + ".XMLHTTP";
+                               this.axName = clsnames [n] + ".XMLHTTP";
                                try {
-                                       httpPost = new ActiveXObject (axName);
-                               } catch (e) { axName = null; }
+                                       httpPost = new ActiveXObject (this.axName);
+                               } catch (e) { this.axName = null; }
                        }
                        if (httpPost == null)
                                throw new Error ("XMLHTTP object could not be created.");
@@ -223,26 +248,14 @@ function WebForm_httpPost (url, data, callback)
        setTimeout (function () { httpPost.send (data); }, 10);
 }
 
-function WebForm_GetFormFromCtrl (id)
-{
-       // We need to translate the id from ASPX UniqueID to its ClientID.
-       var ctrl = WebForm_GetElementById (id.replace(/\$/g, "_"));
-       while (ctrl != null) {
-               if (ctrl.isAspForm)
-                       return ctrl;
-               ctrl = ctrl.parentNode;
-       }
-       return theForm;
-}
-
-function WebForm_GetElementById (id)
+webForm.WebForm_GetElementById = function (id)
 {
        return document.getElementById ? document.getElementById (id) :
               document.all ? document.all [id] :
                   document [id];
 }
 
-function WebForm_FireDefaultButton(event, target)
+webForm.WebForm_FireDefaultButton = function (event, target)
 {
        if (event.keyCode != 13) {
                return true;
@@ -250,7 +263,7 @@ function WebForm_FireDefaultButton(event, target)
        if(event.srcElement && (event.srcElement.tagName.toLowerCase() == "textarea")) {
                return true;
        }
-       var defaultButton = WebForm_GetElementById(target);
+       var defaultButton = this.WebForm_GetElementById(target);
        if (defaultButton && typeof(defaultButton.click) != "undefined") {
                defaultButton.click();
                event.cancelBubble = true;
@@ -259,37 +272,43 @@ function WebForm_FireDefaultButton(event, target)
        return true;
 }
 
-function WebForm_SaveScrollPositionSubmit() {
-    this.elements['__SCROLLPOSITIONX'].value = WebForm_GetScrollX();
-    this.elements['__SCROLLPOSITIONY'].value = WebForm_GetScrollY();
-    if ((typeof(this.oldSubmit) != "undefined") && (this.oldSubmit != null)) {
-        return this.oldSubmit();
-    }
-    return true;
+webForm.WebForm_SaveScrollPositionSubmit = function ()
+{
+       var pos = this.WebForm_GetElementPosition(this._form);
+       this._form.elements['__SCROLLPOSITIONX'].value = this.WebForm_GetScrollX() - pos.x;
+       this._form.elements['__SCROLLPOSITIONY'].value = this.WebForm_GetScrollY() - pos.y;
+       if ((typeof(this._form.oldSubmit) != "undefined") && (this._form.oldSubmit != null)) {
+               return this._form.oldSubmit();
+       }
+       return true;
 }
 
-function WebForm_SaveScrollPositionOnSubmit() {
-    this.elements['__SCROLLPOSITIONX'].value = WebForm_GetScrollX();
-    this.elements['__SCROLLPOSITIONY'].value = WebForm_GetScrollY();
-    if ((typeof(this.oldOnSubmit) != "undefined") && (this.oldOnSubmit != null)) {
-        return this.oldOnSubmit();
-    }
-    return true;
+webForm.WebForm_SaveScrollPositionOnSubmit = function ()
+{
+       var pos = this.WebForm_GetElementPosition(this._form);
+       this._form.elements['__SCROLLPOSITIONX'].value = this.WebForm_GetScrollX() - pos.x;
+       this._form.elements['__SCROLLPOSITIONY'].value = this.WebForm_GetScrollY() - pos.y;
+       if ((typeof(this._form.oldOnSubmit) != "undefined") && (this._form.oldOnSubmit != null)) {
+               return this._form.oldOnSubmit();
+       }
+       return true;
 }
 
-function WebForm_RestoreScrollPosition(currForm) {
-       currForm = currForm || theForm;
-       var ScrollX = currForm.elements['__SCROLLPOSITIONX'].value;
-       var ScrollY = currForm.elements['__SCROLLPOSITIONY'].value;
-       if (ScrollX != "" || ScrollY != "")
-       window.scrollTo(ScrollX, ScrollY);
-    if ((typeof(this.oldOnLoad) != "undefined") && (this.oldOnLoad != null)) {
-        return this.oldOnLoad();
-    }
-    return true;
+webForm.WebForm_RestoreScrollPosition = function ()
+{
+       var pos = this.WebForm_GetElementPosition(this._form);
+       var ScrollX = parseInt(this._form.elements['__SCROLLPOSITIONX'].value);
+       var ScrollY = parseInt(this._form.elements['__SCROLLPOSITIONY'].value);
+       ScrollX = (isNaN(ScrollX)) ? pos.x : (ScrollX + pos.x);
+       ScrollY = (isNaN(ScrollY)) ? pos.y : (ScrollY + pos.y);
+       window.scrollTo(ScrollX, ScrollY);
+       if ((typeof(this._form.oldOnLoad) != "undefined") && (this._form.oldOnLoad != null)) {
+               return this._form.oldOnLoad();
+       }
+       return true;
 }
 
-function WebForm_GetScrollX() {
+webForm.WebForm_GetScrollX = function () {
     if (window.pageXOffset) {
         return window.pageXOffset;
     }
@@ -302,7 +321,7 @@ function WebForm_GetScrollX() {
     return 0;
 }
 
-function WebForm_GetScrollY() {
+webForm.WebForm_GetScrollY = function () {
     if (window.pageYOffset) {
         return window.pageYOffset;
     }
@@ -315,4 +334,24 @@ function WebForm_GetScrollY() {
     return 0;
 }
 
+webForm.WebForm_GetElementPosition = function (element)
+{
+       var result = new Object();
+       result.x = 0;
+       result.y = 0;
+       result.width = 0;
+       result.height = 0;
+       result.x = element.offsetLeft;
+       result.y = element.offsetTop;
+       var parent = element.offsetParent;
+       while (parent) {
+               result.x += parent.offsetLeft;
+               result.y += parent.offsetTop;
+               parent = parent.offsetParent;
+       }
+       result.width = element.offsetWidth;
+       result.height = element.offsetHeight;
+       return result;
+}
+}