//////////////////////////////////////////////////////////////////////////////
//
// Copyright (C) 1998, Siebel Systems, Inc., All rights reserved.
//
// FILE:       swecommon.js
//  $Revision: 1 $
//      $Date: 10/31/97 1:01p $
//    $Author: Tdiec $ of last update
//
// CREATOR:    TDiec
//
// DESCRIPTION
//    
// JavaScript Functions used by the Siebel Web Engine.
//
//////////////////////////////////////////////////////////////////////////////


/******************************************************************
 JAVASCRIPT FUNCTIONS USED BY SIEBEL WEB ENGINE IN SIEBEL 2000
 *****************************************************************/

/////////////////////
var winPop = null;
////////////////////

function SWEConfirmNExecute(msg, url)
{
   var tf = confirm(msg);

   if (tf)
   {
      this.location = url;
   }
}

function SWEExecuteLogin(formObj, action)
{
   if (! g_bInitialized)
      return;

   if (action != null)
      formObj.action = action;
   formObj.SWECmd.value = "ExecuteLogin";
   formObj.submit();
}

function SWEInvokeMethod(formObj, action, method, bRowSen)
{
   if (! g_bInitialized)
      return;

   if (action != null)
      formObj.action = action;
   formObj.SWECmd.value = "InvokeMethod";
   formObj.SWEMethod.value = method;
   formObj.SWEReqRowId.value = bRowSen;
   formObj.submit();
}

function SWEInvokeGeneric(formObj, action, method, view, applet, rowId, bRowSen)
{
    if (view != null && view != "")
       formObj.SWEView.value = view;

    if (applet != null && applet != "")
       formObj.SWEApplet.value = applet;

    if (rowId != null && rowId != "")
       formObj.SWERowId.value = rowId;

    SWEInvokeMethod(formObj, action, method, bRowSen);
}

function SWEGotoURL (url)
{
   if (url != null && url != "")
   {
      var now = new Date();
      location = url + "&SWETime=" + now.getTime();
   }
}

function SWEPostChanges(formObj, action, seq, bRowSen)
{
   formObj.SWESeq.value = seq;
   SWEInvokeMethod(formObj, action, "PostChanges", bRowSen);
}

function SWEEditField(formObj, action, field, bRowSen)
{
   formObj.SWEField.value = field;
   SWEInvokeMethod(formObj, action, "EditField", bRowSen);
}

/*****************************************************************
 THE FOLLOWING FUNCTIONS ARE NOT USED IN SIEBEL 2000
 *****************************************************************/

/*****************************************************************
 Functions for sending requests to the Siebel Web Engine
******************************************************************/

// Utility function for adding to the SWENargs field.
function SWEAddToNArg(formObj, value)
{
    if (value == null)
       return;

    if (formObj.SWENargs.value == "")
        formObj.SWENargs.value = value;
    else
        formObj.SWENargs.value = ", " + value;
}

// 
// SWE Commands
//
function SWELogin(formObj, action)
{
   if (! g_bInitialized)
      return;

   if (action != null)
      formObj.action = action;
   formObj.SWECmd.value = "Login";
   formObj.submit();
}


function SWELogoff(formObj, action)
{
   if (! g_bInitialized)
      return;

   if (action != null)
      formObj.action = action;
   formObj.SWECmd.value = "Logoff";
   formObj.submit();
}


function SWEGotoPage(formObj, action, page)
{
   if (! g_bInitialized)
      return;

   if (action != null)
      formObj.action = action;
   formObj.SWECmd.value = "GotoPage";
   formObj.SWEPage.value = page;
   formObj.submit();
}

// TBD
function SWEGotoPageTab(formObj, action, screen)
{
   if (! g_bInitialized)
      return;

   if (action != null)
      formObj.action = action;
   formObj.SWECmd.value = "GotoPageTab";
   SWEAddToNArg(formObj, "SWEScreen=" + screen);
   formObj.submit();
}


function SWEGotoView(formObj, action, view, bKeepCtx, qmApplet, qmMethod, qmArgs)
{
   if (! g_bInitialized)
      return;

   if (action != null)
      formObj.action = action;
   formObj.SWECmd.value = "GotoView";
   formObj.SWEView.value = view;

   if (bKeepCtx != null && bKeepCtx != "")
      SWEAddToNArg(formObj, "SWEKeepContext=" + bKeepCtx);

   if (qmApplet != null && qmApplet != "")
      SWEAddToNArg(formObj, "SWEQMApplet=" + qmApplet);

   if (qmMethod != null && qmMethod != "")
      SWEAddToNArg(formObj, "SWEQMMethod=" + qmMethod);

   if (qmArgs != null && qmArgs != "")
      SWEAddToNArg(formObj, "SWEQMArgs=" + qmArgs);

   formObj.submit();
}

function SWEExecuteNamedQuery(formObj, action, view, query)
{
   if (! g_bInitialized)
      return;

   if (action != null)
      formObj.action = action;
   formObj.SWECmd.value = "ExecuteNamedQuery";
   formObj.SWEView.value = view;
   formObj.SWEQueryName.value = query;
   formObj.submit();
}

//
// Various Invoke Methods
//
function SWEGotoFirstSet(formObj, action, bRowSen)
{
    SWEInvokeMethod(formObj, action, "GotoFirstSet", bRowSen);
}

function SWEGotoLastSet(formObj, action, bRowSen)
{
   SWEInvokeMethod(formObj, action, "GotoLastSet", bRowSen);
}

function SWEGotoNextSet(formObj, action, bRowSen)
{
   SWEInvokeMethod(formObj, action, "GotoNextSet", bRowSen);
}

function SWEGotoPreviousSet(formObj, action, bRowSen)
{
   SWEInvokeMethod(formObj, action, "GotoPreviousSet", bRowSen);
}

function SWESortOrder(formObj, action, view, applet, bRowSen)
{
    if (view != null && view != "")
       formObj.SWEView.value = view;
    if (applet != null && applet != "")
       formObj.SWEApplet.value = applet;
    SWEInvokeMethod(formObj, action, "SortOrder", bRowSen);
}

function SWEExecuteSort(formObj, action, bRowSen)
{
   SWEInvokeMethod(formObj, action, "ExecuteSort", bRowSen);
}

function SWESortAscending(formObj, action, field, bRowSen)
{
   formObj.SWEField.value = field;
   SWEInvokeMethod(formObj, action, "SortAscending", bRowSen);
}

function SWESortDescending(formObj, action, field, bRowSen)
{
   formObj.SWEField.value = field;
   SWEInvokeMethod(formObj, action, "SortDescending", bRowSen);
}

function SWENewQuery(formObj, action, view, applet, bRowSen)
{
    if (view != null && view != "")
       formObj.SWEView.value = view;

    if (applet != null && applet != "")
       formObj.SWEApplet.value = applet;

    SWEInvokeMethod(formObj, action, "NewQuery", bRowSen);
}

function SWEExecuteQuery(formObj, action, bRowSen)
{
   SWEInvokeMethod(formObj, action, "ExecuteQuery", bRowSen);
}

function SWEUndoRecord(formObj, action, bRowSen)
{
   SWEInvokeMethod(formObj, action, "UndoRecord", bRowSen);
}

function SWEDeleteRecord(formObj, action, rowId, bRowSen)
{
   if (! g_bInitialized)
      return;

   var tf = confirm(SWEGetMessage("SWEConfirmDelete"));

   if (tf)
   {
       if (rowId != null && rowId != "")
          formObj.SWERowId.value = rowId;
       SWEInvokeMethod(formObj, action, "DeleteRecord", bRowSen);
   }
}


function SWECreateRecord(formObj, action, bRowSen)
{
   SWEInvokeMethod(formObj, action, "CreateRecord", bRowSen);
}

function SWENewRecord(formObj, action, bRowSen)
{
   SWEInvokeMethod(formObj, action, "NewRecord", bRowSen);
}

function SWEEditRecord(formObj, action, rowId, bRowSen)
{
   if (rowId != null && rowId != "")
      formObj.SWERowId.value = rowId;

   SWEInvokeMethod(formObj, action, "EditRecord", bRowSen);
}

function SWEEditRecordInSeq(formObj, action, rowId, seq, bRowSen)
{
   SWEAddToNArg(formObj, "SWESeq=" + seq);
   SWEEditRecord(formObj, action, rowId, bRowSen);
}


function SWEWriteRecord(formObj, action, bRowSen)
{
   SWEInvokeMethod(formObj, action, "WriteRecord", bRowSen);
}

function SWEWriteRecordNReturn(formObj, action, bReturn, bRowSen)
{
   if (bReturn != null && bReturn != "")
      SWEAddToNArg(formObj, "SWEReturn=" + bReturn); 
   SWEInvokeMethod(formObj, action, "WriteRecord", bRowSen);
}

function SWEResetRecord(formObj, action, bRowSen)
{
  // SWEInvokeMethod(formObj, action, "ResetRecord", bRowSen);
  SWEResetForm(formObj);
}

function SWECloseApplet(formObj, action, bRowSen)
{
   SWEInvokeMethod(formObj, action, "CloseApplet", bRowSen);
} 

function SWERefresh(formObj, action, bRowSen)
{
   SWEInvokeMethod(formObj, action, "Refresh", bRowSen);
}

//
//   Drilldown
//
function SWEDrilldown(formObj, ddnName, rowIds)
{
   if (! g_bInitialized)
      return;

   SWEAddToNArg(formObj, "SWEDdnName=" + ddnName);
   formObj.SWERowIds.value = rowIds;
   SWEInvokeMethod(formObj, null, "Drilldown", 1);
}

/******************************************************************
 Misc Functions
*******************************************************************/
function SWEResetForm(formObj)
{
   formObj.reset();
}

function SWENop()
{
}

/***********************************************************
 An utility function to popup a window and display a message
************************************************************/
var   lmsgWindow, lmsgTimerId, lmsgCur, lmsgTitle;
var   g_bInitialized = false;

function SWEPopupMessage(title, msg)
{
   lmsgCur = msg;
   lmsgTitle = title;
   lmsgWindow=window.open('','','toolbar=no,scrollbars=yes,resizable=yes,width=400,height=200');
   lmsgTimerId = setTimeout("SWEPopupHandler()", 200);
}

function SWEPopupHandler()
{
   var      w;

   clearTimeout(lmsgTimerId);

   w = lmsgWindow;

   w.document.writeln('<html><HEAD><TITLE>');
   w.document.writeln(lmsgTitle);
   w.document.writeln('</TITLE></HEAD><body bgcolor="#FFFFFF">');
   w.document.writeln(lmsgCur);
   w.document.writeln('</body></html>');
   w.document.close();
}   


/*******************************************
   Functions to retrive translated messages.
********************************************/

// Returns a translated message text. The messages are defined in 
// swemessageresources_<language code>.js
// This function is written to support variable arguments.
// It takes atleast one argument. The first argument is the message key.
// If only the message key is specified, the corresponding message is 
// returned. If addional arguments are specified, they are used as paramters
// to be substituted in the message.
function SWEGetMessage(key)
{
   if (arguments.length > 1)
   {
     tokens = new Array(arguments.length - 1);
     for (var i = 0; i < arguments.length - 1; i++)
         tokens[i] = arguments[i+1];
     return SWEGetFormattedMessage(key, tokens);
   }
   else
     return _SWEGetMessage(key);
}

// Retrives the translated message and replaces the placeholders in the message
// with the given tokens. Place holder {0} will be replaced with token[0] and so on.
// Parameter key: message key string
// Parameter tokens: Array object of token values to be substituted.
function SWEGetFormattedMessage(key, tokens)
{
   var pattern = _SWEGetMessage(key);
   var message = "";
   var j = 0;

   if (pattern == null)
   {
      return "Message key not found: " + key;
   }
   while (j < pattern.length - 2)
   {
      if ((pattern.charAt(j) == "{") && 
          (!isNaN(parseInt(pattern.charAt(j + 1))))  && 
          (parseInt(pattern.charAt(j + 1)) < tokens.length) &&
          (pattern.charAt(j + 2) == "}"))
      {
          message += tokens[parseInt(pattern.charAt(j + 1))];
          j = j + 3;
      }
      else
          message += pattern.charAt(j++);          
   }
   return message;
}

// validates the SWEForm1 for the submit payment functionality
function validateForm()
{
   var paymentAmount = document.SWEForm1.c_SHECOPaymentAmount.value;
   var ccType = document.SWEForm1.c_SHECOSubName.value;
   var ccNumber = document.SWEForm1.c_SHECOExternalNumber.value;
   var expiryDate = document.SWEForm1.c_SHECOExpDate.value;

	if (trimSpaces(paymentAmount) == '')
	{
	   alert("A Payment Amount must be entered.");
	   document.SWEForm1.c_SHECOPaymentAmount.focus();
	   return false;
	}
	else if (paymentAmount <= 0)
	{
	   alert("Payment Amount cannot be less than or equal to 0.");
	   document.SWEForm1.c_SHECOPaymentAmount.focus();
	   return false;
	}
	else if (isNaN(paymentAmount))
	{
	   alert("Payment Amount is invalid.");
	   document.SWEForm1.c_SHECOPaymentAmount.focus();
	   return false;
	}
	else if (trimSpaces(ccType) == '')
	{
	   alert("Credit Card Type must be selected.");
	   document.SWEForm1.c_SHECOSubName.focus();
	   return false;
	}
	else if (trimSpaces(ccNumber) == '')
	{
	   alert("Credit Card Number must be entered.");
	   document.SWEForm1.c_SHECOExternalNumber.focus();
	   return false;
	}
	else if (trimSpaces(expiryDate) == '')
	{
	   alert("Credit Card Expiration Date must be entered.");
	   document.SWEForm1.c_SHECOExpDate.focus();
	   return false;
	}
	else if (expiryDate.length != 4)
	{
	   alert("Credit Card Expiration Date is invalid.");
	   document.SWEForm1.c_SHECOExpDate.focus();
	   return false;
	}
	else if (isNaN(expiryDate))
	{
	   alert("Credit Card Expiration Date is invalid.");
	   document.SWEForm1.c_SHECOExpDate.focus();
	   return false;
	}
	else
	{
	   var strConfirm = "PAYMENT SUBMISSION CONFIRMATION:\n";
	   strConfirm += "\nPayment Amount : " + document.SWEForm1.c_SHECOPaymentAmount.value +  "\n";
	   strConfirm += "Credit Card Type : " + document.SWEForm1.c_SHECOSubName.value +  "\n";
	   strConfirm += "Credit Card Number : " + document.SWEForm1.c_SHECOExternalNumber.value +  "\n";
	   strConfirm += "Expiration Date : " + document.SWEForm1.c_SHECOExpDate.value +  "\n";
	   strConfirm += "\nDo you wish to submit the Payment?";
	   
	   var response = confirm(strConfirm);
	   if (response)
	   {
		   //document.SWEForm1.submit();
		   SWEInvokeMethod(document.SWEForm1, null, "WriteRecord", "1")
		   openWinPop();
		}
	}
}

// validates the SWEForm1 for the submit payment functionality
function validateACHForm()
{
   var paymentAmount = document.SWEForm1.c_SHECOPaymentAmount.value;
   var accountType = document.SWEForm1.c_SHECOBankAccountType.value;
   var routingNum = document.SWEForm1.c_SHECOBankRoutingNumber.value;
   var accountNum = document.SWEForm1.c_SHECOBankAccountNumber.value;

	if (trimSpaces(paymentAmount) == '')
	{
	   alert("A Payment Amount must be entered.");
	   document.SWEForm1.c_SHECOPaymentAmount.focus();
	   return false;
	}
	else if (paymentAmount <= 0)
	{
	   alert("Payment Amount cannot be less than or equal to 0.");
	   document.SWEForm1.c_SHECOPaymentAmount.focus();
	   return false;
	}
	else if (isNaN(paymentAmount))
	{
	   alert("Payment Amount is invalid.");
	   document.SWEForm1.c_SHECOPaymentAmount.focus();
	   return false;
	}
	else if (trimSpaces(accountType) == '')
	{
	   alert("Bank Account Type must be selected.");
	   document.SWEForm1.c_SHECOBankAccountType.focus();
	   return false;
	}
	else if (trimSpaces(routingNum) == '')
	{
	   alert("Routing Number must be entered.");
	   document.SWEForm1.c_SHECOBankRoutingNumber.focus();
	   return false;
	}
	else if (routingNum.length != 9)
	{
	   alert("Routing Number is invalid.");
	   document.SWEForm1.c_SHECOBankRoutingNumber.focus();
	   return false;
	}
	else if (isNaN(routingNum))
	{
	   alert("Routing Number is invalid.");
	   document.SWEForm1.c_SHECOBankRoutingNumber.focus();
	   return false;
	}
	else if (isNaN(accountNum))
	{
	   alert("Account Number is invalid.");
	   document.SWEForm1.c_SHECOBankAccountNumber.focus();
	   return false;
	}
	else if (trimSpaces(accountNum) == '')
	{
	   alert("Bank Account Number must be entered.");
	   document.SWEForm1.c_SHECOBankAccountNumber.focus();
	   return false;
	}
	else
	{
	   var strConfirm = "PAYMENT SUBMISSION CONFIRMATION:\n";
	   strConfirm += "\nPayment Amount : " + document.SWEForm1.c_SHECOPaymentAmount.value +  "\n";
	   strConfirm += "Routing Number : " + document.SWEForm1.c_SHECOBankRoutingNumber.value +  "\n";
	   strConfirm += "Bank Account Type : " + document.SWEForm1.c_SHECOBankAccountType.value +  "\n";
	   strConfirm += "Bank Account Number : " + document.SWEForm1.c_SHECOBankAccountNumber.value +  "\n";
	   strConfirm += "\nDo you wish to submit the Payment?";
	   
	   var response = confirm(strConfirm);
	   if (response)
	   {
		   //document.SWEForm1.submit();
		   SWEInvokeMethod(document.SWEForm1, null, "WriteRecord", "1")
		   openWinPop();
		}
	}
}

//*************************************************************************************
//***		Removes all the leading and trailing whitespace from the string 'oldValue'
//*************************************************************************************

function trimSpaces(oldValue) {
	if((oldValue != null) || (oldValue.length != 0)){
        var temp = oldValue;

        while(temp.charAt(0) == ' ') {
                temp = temp.substring(1);
        }
        while(temp.charAt(temp.length - 1) == ' ') {
                temp = temp.substring(0, temp.length-1);
        }
    }
	return temp;
}


function openWinPop()
{
  winPop = window.open("/HELP/Processing.htm","processing",'top=10,left=10,toolbar=0,location=0,directories=0,status=1,menubar=0,scrollbars=1,resizable=1,width=400,height=300')
}

function closeWinPop()
{
//    alert(winPop);
	if (winPop != null)
    {
	winPop.close();
    }
}