// ============================================================== // Microsoft Server Appliance // Task-level JavaScript functions // // Copyright (c) Microsoft Corporation. All rights reserved. // // ============================================================== //------------------------------------------------------------------------- // Global Variables //------------------------------------------------------------------------- var id = 0; var sid =0; var retrys = 0; var maxRetrys = 5; var bFooterIsLoaded; var bPageInitialized = false; ClearOkayToLeavePage(); //------------------------------------------------------------------------- // // Function : Task // // Synopsis : Initialize the Task class // // Arguments: None // // Returns : None // //------------------------------------------------------------------------- function TaskObject() { // static JScript properties NavClick = false; KeyPress = false; PageType = false; BackDisabled = false; NextDisabled = false; FinishDisabled = false; CancelDisabled = false; } var Task = new TaskObject(); Task.NavClick = false; Task.KeyPress = false; Task.PageType = false; Task.BackDisabled = false; Task.NextDisabled = false; Task.FinishDisabled = false; Task.CancelDisabled = false; //------------------------------------------------------------------------- // // Function: SA_SignalFooterIsLoaded // // Synopsis: Signal that the Footer frameset page is loaded. This function is // called by the footer page after it has been loaded. Calling this // function signals to the main page that the navigation bar has // loaded and completed initialization. // // Arguments: None // // Returns : None // //------------------------------------------------------------------------- function SA_SignalFooterIsLoaded() { bFooterIsLoaded=true; //SA_TraceOut("SH_TASK", "Footer signaled it was loaded") } //------------------------------------------------------------------------- // // Function: SA_WaitForFooter // // Synopsis: Wait for the Footer frameset page to load and initialize. // // Arguments: None // // Returns: None // //------------------------------------------------------------------------- function SA_WaitForFooter() { //SA_TraceOut("SH_TASK::SA_WaitForFooter()", "Entering") // // If the footer has not loaded then sleep for 1/2 second and check again. if ( !bFooterIsLoaded ) { window.setTimeout("SA_WaitForFooter()",500); //SA_TraceOut("SH_TASK::SA_WaitForFooter()", "Exiting, not ready") return; } // // Footer has loaded, complete initialization of this page CompletePageInit(); //SA_TraceOut("SH_TASK::SA_WaitForFooter()", "Exiting, Ready") } //------------------------------------------------------------------------- // // Function: PageInit // // Synopsis: Initialize a web page in the client browser. // // 1) Load the Footer frameset with the correct navigation // bar. Property and Tabbed property pages require // a nav bar with an OK and Cancel button. Wizard // pages require Back, Next | Finish, and Cancel. // 2) Call WaitForFooter which then waits for the Footer frameset // page to load. // // // Arguments: None // // Returns: None // //------------------------------------------------------------------------- function PageInit() { //SA_TraceOut("SH_Task::PageInit", "Entering") // // Clear the Footer Frameset is loaded flag. This flag is set by the Footer // Frameset (SA_SignalFooterIsLoaded) inside the footer frameset page after // it has completed it's initialization. bFooterIsLoaded = false; // // Need to know what type of page we are serving. var taskType = document.frmTask.TaskType.value; var wizardPageType = document.frmTask.PageType.value; //SA_TraceOut("SH_Task::PageInit", "TaskType : " + document.frmTask.TaskType.value); //SA_TraceOut("SH_Task::PageInit", "WizardPageType: " + wizardPageType); //SA_TraceOut("SH_Task::PageInit", "Forms count: " + document.forms.length ); var oFooter = eval("top.footer"); if ( oFooter == null ) { if ( SA_IsDebugEnabled() ) { var msg = "Error: The current page will not work correctly because it's being opened without frameset.\n\n"; msg += "The current page is either a Property, Tabbed Property, or a Wizard page. "; msg += "These pages only work within frameset's. Normally this error indicates that the call to "; msg += "OTS_CreateTask was made using the incorrect PageType parameter. The correct PageType "; msg += "value this page is either OTS_PT_PROPERTY, OTS_PT_TABBED, or OTS_PT_WIZARD depending upon "; msg += "which page type this page is. "; alert(msg); } return; } // // Property page if ( taskType == "prop" ) { top.footer.location = GetVirtualRoot()+"sh_propfooter.asp"; } // // Tabbed Property page else if ( taskType == "TabPropSheet" ) { top.footer.location = GetVirtualRoot()+"sh_propfooter.asp"; } // // Wizard page else if ( taskType == "wizard" ) { if ( wizardPageType == "intro" ) { top.footer.location = GetVirtualRoot()+"sh_wizardfooter.asp?PT=Intro" + "&" + SAI_FLD_PAGEKEY + "=" + g_strSAIPageKey; } else if ( wizardPageType == "finish" ) { top.footer.location = GetVirtualRoot()+"sh_wizardfooter.asp?PT=Finish" + "&" + SAI_FLD_PAGEKEY + "=" + g_strSAIPageKey; } else { top.footer.location = GetVirtualRoot()+"sh_wizardfooter.asp?PT=Standard" + "&" + SAI_FLD_PAGEKEY + "=" + g_strSAIPageKey; } } // // Unknown page else { SA_TraceOut("SH_Task::PageInit()", "Unrecognized TaskType: " + taskType); top.footer.location = GetVirtualRoot()+"sh_propfooter.asp"; } // // Wait for the Footer Frameset to load SA_WaitForFooter(); //SA_TraceOut("SH_Task::PageInit", "Leaving") } //------------------------------------------------------------------------- // // Function: CompletePageInit // // Synopsis: Finish initialization of the web page running in the client browser. // This function is executed after the Footer Frameset page has // completed initialization. // // Arguments: None // // Returns: None // //------------------------------------------------------------------------- function CompletePageInit() { //SA_TraceOut("SH_TASK", "CompletePageInit") document.onkeypress = HandleKeyPress; Task.NavClick = false; Task.KeyPress = false; Task.PageType = document.frmTask.PageType.value; // // Set initial state of Footer Frameset buttons SetTaskButtons(); // // Call the Init function for this Web Page. This function must be implemented // for any task (Property, Tabbed Property, or Wizard) page. var oException; try { Init(); } catch(oException) { if ( SA_IsDebugEnabled() ) { alert("Unexpected exception while attempting to execute Init() function.\n\n" + "Error: " + oException.number + "\n" + "Description: " + oException.description + "\n"); } } // // Store the initial state of all form fields on this page. The initial state is // later checked when the user attempts to tab away from this page. The framework // checks to see if any of the form fields have changed and if changes are detected // a confirm dialog is presented to warn the user. SA_StoreInitialState(); SA_SetPageInitialized(); } function SA_IsPageInitialized() { return bPageInitialized; } function SA_SetPageInitialized() { bPageInitialized = true; } //------------------------------------------------------------------------- // // Function : SetTaskButtons // // Synopsis : Sets task wizard button state // // Arguments: None // // Returns : None // //------------------------------------------------------------------------- function SetTaskButtons() { var oFooter = top.footer.document.getElementById("frmFooter"); if(oFooter != null) { switch (document.frmTask.TaskType.value) { case "wizard" : switch (document.frmTask.PageType.value) { case "intro": if (!Task.NextDisabled) { DisableBack(); EnableNext(); oFooter.butNext.focus(); } break; case "finish": if (!Task.FinishDisabled) { EnableFinish(); oFooter.butFinish.focus(); } break; default: if((document.frmTask.PageType.value).indexOf("finish") !=-1) { if (!Task.FinishDisabled) { EnableFinish(); oFooter.butFinish.focus(); } } else { if (!Task.NextDisabled) { EnableNext(); oFooter.butNext.focus(); } } break; } break; default: break; } } } //------------------------------------------------------------------------- // // Function : SetupEmbedValues // // Synopsis : Extracts form values for the current embedded page. // Uses values to set current form elements, // e.g., sets a radio button to its state when the page // was last posted. // // Arguments: None // // Returns : None // //------------------------------------------------------------------------- // //function SetupEmbedValues() { // var arrName = new Array; // var arrValue = new Array; // var i; // var intIndex = document.frmTask.EmbedPageIndex.value; // var strInput = document.frmTask.elements['EmbedValues'+intIndex].value; // var strNameD = ";;"; // name delimiter // var strValueD = ";"; // value delimiter // if (strInput != "") { // if (strInput.substring(0, 2) == strNameD) // strInput = strInput.substring(2, strInput.length + 1); // intIndex = 0; // intPos1 = strInput.indexOf(strValueD); // intPos2 = -2; // do { // arrName[intIndex] = Trim(strInput.substring(intPos2+2, intPos1)); // intPos2 = strInput.indexOf(strNameD, intPos1); // if (intPos2 == -1) // intPos2 = strInput.length + 1; // assumes no end delimiter // arrValue[intIndex] = Trim(strInput.substring(intPos1+1, intPos2)); // if (intPos2+1 < strInput.length) // intPos1 = strInput.indexOf(strValueD, intPos2 + 2); // else // break; // intIndex = intIndex+1; // } // while (intPos1 != 0); // for (i=0;i' + ErrMsg + '' if (IsIE()) { document.all("divErrMsg").innerHTML = strErrMsg; } else { alert(ErrMsg); } } function SA_OnClickTab(tabNumber) { var oException; var bValid = false; try { bValid = ValidatePage(); } catch(oException) { if ( SA_IsDebugEnabled() ) { alert("Unexpected exception while attempting to execute ValidatePage()\n\nError:"+oException.number+"\nDescription: " + oException.description); } } if (bValid) { try { SetData(); } catch(oException) { if ( SA_IsDebugEnabled() ) { alert("Unexpected exception while attempting to execute SetData()\n\nError:"+oException.number+"\nDescription: " + oException.description); } } top.main.document.forms['frmTask'].TabSelected.value=tabNumber; top.main.document.forms['frmTask'].submit(); } } //------------------------------------------------------------------------- // // Function : Next // // Synopsis : Handle next button being clicked // // Arguments: None // // Returns : None // //------------------------------------------------------------------------- function Next() { if (Task.NavClick != true && !Task.NextDisabled) { var bValid; try { bValid = ValidatePage(); if (bValid) { DisableNext(); DisableBack(); DisableCancel(); DisableFinish(); DisableOK(); Task.NavClick = true; SetData(); document.frmTask.Method.value = "NEXT"; document.frmTask.submit(); return true; } else { Task.NavClick = false; Task.KeyPress = false; return false; } } catch(oException) { if ( SA_IsDebugEnabled() ) { alert("Unexpected exception while attempting to execute ValidatePage()\n\nError:"+oException.number+"\nDescription: " + oException.description); } } } else { return false; } } //------------------------------------------------------------------------- // // Function : Back // // Synopsis : Handle back button being clicked // // Arguments: None // // Returns : None // //------------------------------------------------------------------------- function Back() { if (Task.NavClick == false && Task.PageType != "intro" && !Task.BackDisabled) { DisableNext(); DisableBack(); DisableCancel(); DisableFinish(); DisableOK(); Task.NavClick = true; document.frmTask.Method.value = "BACK"; document.frmTask.submit(); } } //------------------------------------------------------------------------- // // Function : Cancel // // Synopsis : Handle cancel button being clicked // // Arguments: None // // Returns : None // //------------------------------------------------------------------------- function Cancel() { if (Task.NavClick != true && !Task.CancelDisabled) { Task.NavClick = true; DisableCancel(); DisableNext(); DisableBack(); DisableFinish(); DisableOK(); document.frmTask.target= "_top"; document.frmTask.Method.value = "CANCEL"; document.frmTask.submit(); } } //------------------------------------------------------------------------- // // Function : FinishShell // // Synopsis : Handle finish button being clicked // // Arguments: None // // Returns : None // //------------------------------------------------------------------------- function FinishShell() { if (Task.NavClick == false && !Task.FinishDisabled) { Task.NavClick = true; DisableCancel(); DisableNext(); DisableBack(); DisableFinish(); DisableOK(); SetData(); document.frmTask.Method.value = "FINISH"; document.frmTask.submit(); } } //------------------------------------------------------------------------- // // Function : DisableNext // // Synopsis : Disables the next button // // Arguments: None // // Returns : None // //------------------------------------------------------------------------- function SA_DisableNext() { DisableNext(); } function DisableNext() { var oFooter = SAI_GetFooterForm('DisableNext();'); if ( oFooter == null ) return; if (oFooter.butNext != null) { oFooter.butNext.disabled = true; oFooter.butNext.value = oFooter.butNext.value; var oImage = top.footer.document.getElementById("btnNextImage"); if ( oImage != null ) { oImage.src = GetVirtualRoot()+'images/butGreenArrowDisabled.gif'; } } Task.NextDisabled = true; } //------------------------------------------------------------------------- // // Function : EnableNext // // Synopsis : Enables the next button // // Arguments: None // // Returns : None // //------------------------------------------------------------------------- function SA_EnableNext() { EnableNext(); } function EnableNext() { var oFooter = SAI_GetFooterForm('EnableNext();'); if ( oFooter == null ) return; if (oFooter.butNext != null) { oFooter.butNext.disabled = false; var oImage = top.footer.document.getElementById("btnNextImage"); if ( oImage != null ) { oImage.src = GetVirtualRoot()+'images/butGreenArrow.gif'; } } Task.NextDisabled = false; } //------------------------------------------------------------------------- // // Function : DisableBack // // Synopsis : Disables the back button // // Arguments: None // // Returns : None // //------------------------------------------------------------------------- function SA_DisableBack() { DisableBack(); } function DisableBack() { var oFooter = SAI_GetFooterForm('DisableBack();'); if ( oFooter == null ) return; if (oFooter.butBack != null) { oFooter.butBack.disabled = true; oFooter.butBack.value = oFooter.butBack.value; var oImage = top.footer.document.getElementById("btnBackImage"); if ( oImage != null ) { oImage.src = GetVirtualRoot()+'images/butGreenArrowLeftDisabled.gif'; } } Task.BackDisabled = true; } //------------------------------------------------------------------------- // // Function : EnableBack // // Synopsis : Enables the back button // // Arguments: None // // Returns : None // //------------------------------------------------------------------------- function SA_EnableBack() { EnableBack(); } function EnableBack() { var oFooter = SAI_GetFooterForm('EnableBack();'); if ( oFooter == null ) return; if (oFooter.butBack != null) { oFooter.butBack.disabled = false; var oImage = top.footer.document.getElementById("btnBackImage"); if ( oImage != null ) { oImage.src = GetVirtualRoot()+'images/butGreenArrowLeft.gif'; } } Task.BackDisabled = false; } //------------------------------------------------------------------------- // // Function : DisableFinish // // Synopsis : Disables the finish button // // Arguments: None // // Returns : None // //------------------------------------------------------------------------- function SA_DisableFinish() { DisableFinish(); } function DisableFinish() { var oFooter = SAI_GetFooterForm('DisableFinish();'); if ( oFooter == null ) return; if (oFooter.butFinish != null) { oFooter.butFinish.disabled = true; oFooter.butFinish.value = oFooter.butFinish.value; var oImage = top.footer.document.getElementById("btnFinishImage"); if ( oImage != null ) { oImage.src = GetVirtualRoot()+'images/butGreenArrowDisabled.gif'; } } Task.FinishDisabled = true; } //------------------------------------------------------------------------- // // Function : EnableFinish // // Synopsis : Enables the finish button // // Arguments: None // // Returns : None // //------------------------------------------------------------------------- function SA_EnableFinish() { EnableFinish(); } function EnableFinish() { var oFooter = SAI_GetFooterForm('EnableFinish();'); if ( oFooter == null ) return; if (oFooter.butFinish != null) { oFooter.butFinish.disabled = false; var oImage = top.footer.document.getElementById("btnFinishImage"); if ( oImage != null ) { oImage.src = GetVirtualRoot()+'images/butGreenArrow.gif'; } } Task.FinishDisabled = false; } //------------------------------------------------------------------------- // // Function : DisableCancel // // Synopsis : Disables the cancel button // // Arguments: None // // Returns : None // //------------------------------------------------------------------------- function SA_DisableCancel() { DisableCancel(); } function DisableCancel() { var oFooter = SAI_GetFooterForm('DisableCancel();'); if ( oFooter == null ) return; if (oFooter.butCancel != null) { oFooter.butCancel.disabled = true; oFooter.butCancel.value = oFooter.butCancel.value; var oImage = top.footer.document.getElementById("btnCancelImage"); if ( oImage != null ) { oImage.src = GetVirtualRoot()+'images/butRedXDisabled.gif'; } } Task.CancelDisabled = true; } //------------------------------------------------------------------------- // // Function : EnableCancel // // Synopsis : Enables the cancel button // // Arguments: None // // Returns : None // //------------------------------------------------------------------------- function SA_EnableCancel() { EnableCancel(); } function EnableCancel() { var oFooter = SAI_GetFooterForm('EnableCancel();'); if ( oFooter == null ) return; if (oFooter.butCancel != null) { oFooter.butCancel.disabled = false; var oImage = top.footer.document.getElementById("btnCancelImage"); if ( oImage != null ) { oImage.src = GetVirtualRoot()+'images/butRedX.gif'; } } Task.CancelDisabled = false; } //------------------------------------------------------------------------- // // Function : DisableOK // // Synopsis : Disables the OK button // // Arguments: None // // Returns : None // //------------------------------------------------------------------------- function SA_DisableOK() { DisableOK(); } function DisableOK() { var oFooter = SAI_GetFooterForm('DisableOK();'); if ( oFooter == null ) return; if (oFooter.butOK != null) { oFooter.butOK.disabled = true; oFooter.butOK.value = oFooter.butOK.value; var oImage = top.footer.document.getElementById("btnOKImage"); if ( oImage != null ) { oImage.src = GetVirtualRoot()+'images/butGreenArrowDisabled.gif'; } } Task.FinishDisabled = true; } //------------------------------------------------------------------------- // // Function : EnableOK // // Synopsis : Enables the OK button // // Arguments: None // // Returns : None // //------------------------------------------------------------------------- function SA_EnableOK() { EnableOK(); } function EnableOK() { var oFooter = SAI_GetFooterForm('EnableOK();'); if ( oFooter == null ) return; if (oFooter.butOK != null) { oFooter.butOK.disabled = false; var oImage = top.footer.document.getElementById("btnOKImage"); if ( oImage != null ) { oImage.src = GetVirtualRoot()+'images/butGreenArrow.gif'; } } Task.NextDisabled = false; } //------------------------------------------------------------------------- // // Function : isValidFileName // // Synopsis : validates that file name has correct syntax // // Arguments: filePath(IN) - file name with path to validate // // Returns : true/false // //------------------------------------------------------------------------- function isValidFileName(filePath) { reInvalid = /[\/\*\?"<>\|]/; if (reInvalid.test(filePath)) return false; reColomn2 = /:{2,}/; reColomn1 = /:{1,}/; if ( reColomn2.test(filePath) || ( filePath.charAt(1) != ':' && reColomn1.test(filePath) )) return false; reEndSlash = /\\ *$/; if (reEndSlash.test(filePath)) return false; reEndColomn = /: *$/; if (reEndColomn.test(filePath)) return false; reAllSpaces = /[^ ]/; if (!reAllSpaces.test(filePath)) return false; return true; } //------------------------------------------------------------------------- // // Function : HandleKeyPressIFrame // // Synopsis : key press event handler for IFRAME // // Arguments: evnt(IN) - event describing the key pressed // // Returns : None // //------------------------------------------------------------------------- function HandleKeyPressIFrame(evnt) { var intKeyCode; var frameMain = window.top.main; if (Task.KeyPress==true || Task.NavClick==true) { return; } Task.KeyPress = true; if (IsIE()) intKeyCode = window.event.keyCode; else intKeyCode = evnt.which; if (intKeyCode == 13) { frameMain.Next(); } if (intKeyCode == 27) { frameMain.Cancel(); } } function IsOkayToChangeTabs() { return confirm('Click OK to discard any changes.'); } function SAI_GetFooterForm(CallingFunction) { var oFooter = top.footer.document.getElementById("frmFooter"); if (oFooter == null) { retrys++; if ( retrys < maxRetrys ) { //SA_TraceOut("SH_TASK::DisableNext()", "Footer not ready, waiting for footer") window.setTimeout(CallingFunction,500); } else { if (SA_IsDebugEnabled()) { SA_TraceOut("Unable to locate footer.frmFooter for function: ", CallingFunction); } retrys = 0; } } else { retrys = 0; } return oFooter; }