/////////////////////////////////////////////////////////////////////////////////////////
// Page functions
// copyright 2008, Alpha Genesis Networks, Inc., subsidiary of Alpha Genesis Terra Corporation (AGTC)
// copyright 2008, www.TicketingSystems.com.
//
// Author: James L. Lainé (AGTC)
//
// Permission granted to use, republish, sell and otherwise
// benefit from this code as you see fit, provided you keep
// this notice intact. You may remove comments below this line.
//
// END OF NOTICE
/////////////////////////////////////////////////////////////////////////////////////////
 var XML_UI		= '<UI><FN>\t</FN><LN>\t</LN><MI>\t</MI><AD>\t</AD><CT>\t</CT><ST>\t</ST><ZC>\t</ZC></UI>';

 var BILLING_CART		= 'Billing';
 var BILLING_TRANS_CODE		= 'BTC';
 var BILLING_ACCOUNT_NUMBER	= 'BAN';
 var BILLING_PAYMENT_METHOD	= 'BPM';
 var BILLING_SERVICE		= 'BS';
 var BILLING_PERIOD		= 'BPd';
 var BILLING_DUE_DATE		= 'BDD';
 var BILLING_TRANS_DATE		= 'BTD';
 var BILLING_TIME_STAMP		= 'BTS';
 var BILLING_AMOUNT		= 'BA';
 var BILLING_PAST_CHARGES	= 'BPC';
 var BILLING_PAYMENT		= 'BPt';
 var BILLING_PROCESSING_FEE	= 'BPF';
 var BILLING_TOTAL_PAYMENT	= 'BTP';
 var BILLING_BILLER_INFO	= 'BBI';
 var BILLING_OPERATOR_ID	= 'BOID';
 var BILLING_BILLER_MERC_ID	= 'BBMID';
 var BILLING_BILLER_MERC_PWD	= 'BBMPWD';
 

 var ECOM_ACCOUNT_NUMBER= 'EAN';
 var ECOM_TRANS_CODE	= 'ETC';
 var ECOM_PAYMENT_METHOD= 'EPM';
 var ECOM_CART_COUNT	= 'ECC';
 var ECOM_CART_ITEM	= 'ECI';
 var ECOM_TRANS_DATE	= 'ETD';
 var ECOM_TIME_STAMP	= 'ETS';
 var TRANSACTION	= 'Transaction';
 var ECOM_CART		= 'EC';
 var ECOM_PROCESSING_FEE= 'EPF';
 var ECOM_TOTAL_AMOUNT	= 'ETA';
 var ECOM_BILLER_INFO	= 'EBI';
 var ECOM_OPERATOR_ID	= 'EOID';
 var ECOM_MERCHANT_ID	= 'EBMID';
 var ECOM_MERCHANT_PWD	= 'EBMPWD';
 var MAX_ECOM_CART_FIELDS = 5;

 function Update_UI_XML(XML_UI_String)
 {
    //UI Info
    var objFirstName		= document.getElementById('First_Name');
    var objMidInitial		= document.getElementById('Middle_Initial');
    var objLastName		= document.getElementById('Last_Name');
    var objAddress		= document.getElementById('Address');
    var objCity		= document.getElementById('City');
    var objState		= document.getElementById('State');
    var objZipCode		= document.getElementById('Zip_Code');

    if (objFirstName && objMidInitial && objLastName && 
         objAddress && objCity && objState && objZipCode)
    {
       //UI Info 
       var szXML_UI	= SetTag(XML_UI_String, 'FN',	objFirstName.value);
       szXML_UI		= SetTag(szXML_UI, 'MI',	objMidInitial.value);
       szXML_UI		= SetTag(szXML_UI, 'LN',	objLastName.value);
       szXML_UI		= SetTag(szXML_UI, 'AD',	objAddress.value);
       szXML_UI		= SetTag(szXML_UI, 'CT',	objCity.value);
       szXML_UI		= SetTag(szXML_UI, 'ST',	objState.value);
       szXML_UI		= SetTag(szXML_UI, 'ZC',	objZipCode.value);

       return szXML_UI;
    }  

    return null;    
 }

 function GetTag(XMLString, Tag)
 {
   var bValidParams	= XMLString.length > 0 && Tag.length > 0;

   if (bValidParams)
   {

     var STag		= '<' + Tag + '>';
     var ETag		= '</' + Tag + '>';
     var nSTag		= XMLString.indexOf(STag);

     if (nSTag > -1)
     { 
       nSTag		+= STag.length;
       var nETag	=  XMLString.indexOf(ETag, nSTag);

       if (nETag > -1)
       {
          var FTag	= XMLString.substr(nSTag, (nETag - nSTag));
          return FTag;
       } 
     }
   }

  return '';
}

function SetTag(XMLString, Tag, NewValue)
{
  var TagVal	= GetTag(XMLString, Tag);
  var OldVal	= "<" + Tag + ">" + TagVal + "</" + Tag + ">";
  var NewVal	= "<" + Tag + ">" + NewValue + "</" + Tag + ">";

  var NewXMLString	= XMLString.replace(OldVal, NewVal);
  
  return NewXMLString;
}

/////////////////////////////////////////////////////////////////////////////////////////
//
// This function disables the right click event
//
//	Parameters:	object event		The event to trap
//	Returns:	None
//
//	Author:		James L. Lainé
//	Date Imp:	03.29.2008
//	Version:	1.0
//	Notes:		Version 1.0 - Initial implementation
//				
/////////////////////////////////////////////////////////////////////////////////////////
 var whiteSpaceChars 	= '\n\f\r\t\v ';

 function RTrim(str)
 {
   var strRet;

   if(whiteSpaceChars.indexOf(str.substr(0,1)) > -1)
     strRet = RTrim(str.substr(1));
   else
     return str;
    
   return strRet;
 }

 function LTrim(str)
 {
   var strRet;

   if(whiteSpaceChars.indexOf(str.substr(str.length - 1)) > -1)
     strRet = LTrim(str.substr(0, str.length - 2));
   else
     return str;
    
   return strRet;
 }

 function Trim(str)
 {
    var strRet = LTrim(str);
    strRet     = RTrim(strRet);

    return strRet;
 }

 function GrowFormBody(groupName, growBy)
 {
   var DivTags  = document.getElementsByTagName('div');
   var nNumDivTags =  DivTags.length;
   var tag;

   for (tag=0; tag < nNumDivTags - 1; tag++)
   {
     if (DivTags[tag].name)
     {
       if(DivTags[tag].name == 'bl' + groupName || DivTags[tag].name == 'br' + groupName || DivTags[tag].name == 'bd' + groupName)
       {
         DivTags[tag].style.height = String(parseInt(DivTags[tag].style.height) + growBy) + 'px';
       }
     }
   }
  }

  function AddMultipleSelectionControls(tableName, rowIndex, dataIndex, colSpan, returnAnchor, returnPrompt, paddingLeft)
  {
    var MSCCCell;
    var UpdateActionItem0 = "return UpdateActionItems('" + tableName + "_chkDoActions', 0, " + rowIndex + ");";
    var UpdateActionItem1 = "return UpdateActionItems('" +tableName + "_chkDoActions', 1, " + rowIndex + ");";
    var ConfirmAction0    = "return ConfirmAction('" + tableName + "_chkDoActions', 0, " + rowIndex + ", " + dataIndex + ", 0);";
    var ConfirmAction1    = "return ConfirmAction('" + tableName + "_chkDoActions', 1, " + rowIndex + ", " + dataIndex + ", 0);";

    var MSCCCellObj  = "<img style=\"padding-left:3px; padding-right:10px\" src=\"images/ActionArrow.PNG\" width=\"29px\" height=\"21px\">\r\n";
    MSCCCellObj     += "<a href=\"...\" id=\"ActionCheckAll\"  style=\"font-size:small\" onclick=\"" + UpdateActionItem1 + "\"><strong>Check All</strong></a> \\ <a href=\"...\" id=\"ActionUncheckAll\"  style=\"font-size:small\" onclick=\"" + UpdateActionItem0 + "\"><strong>Uncheck All</strong></a>\r\n";
    MSCCCellObj     += "&nbsp;&nbsp;&nbsp;<i>With Selected:</i>\r\n";
    MSCCCellObj     += "<input id=\"button_delete\" type=\"image\" name=\"submit_mult_delete\" value=\"Delete\" title=\"Delete\" src=\"images/BTN_DELETE_MULTI_16.PNG\" onclick=\"" + ConfirmAction0 + "\"/>\r\n";
    MSCCCellObj     += "<input style=\"margin-left:15px\" id=\"button_edit\" type=\"image\" name=\"submit_mult_edit\" value=\"Edit\" title=\"Edit\" src=\"images/BTN_EDIT_MULTI_16.PNG\" onclick=\"" + ConfirmAction1 + "\"/>\r\n";

    if (returnAnchor.length > 0 && returnPrompt.length > 0)
    {
      MSCCCellObj   += "<a id='" + tableName + "_returnAnchor' name='" + tableName + "_returnAnchor' style='font-size:small' href='" + returnAnchor + "'><img style='margin-left:" + paddingLeft + "px; margin-right:5px; display:inline; border:none' height='22' width='18' src='images/RETURN_TO.PNG'/>" + returnPrompt + "</a>";
    }
    else
    {
      if (rowIndex > 1)
      {
        var objAnchor = document.getElementById(tableName + '_returnAnchor');

        if (objAnchor)
        {
          var innerHTML = objAnchor.innerHTML;
          returnAnchor  = objAnchor.href;
          MSCCCellObj   += "<a id='" + tableName + "_returnAnchor' name='" + tableName + "_returnAnchor' style='font-size:small' href='" + returnAnchor + "'>" + innerHTML + "</a>";
         }
      } 
   }
 
    if (rowIndex > 1)
    {
       MSCCCell  = document.getElementById(tableName + '_MultipleSelectionControlsCell');
    }
    else
    {
      var NewRowIndex         = document.getElementById(tableName).rows.length;
      var NewRow              = document.getElementById(tableName).insertRow(NewRowIndex);
      var NewRowHeight        = '30px';
      var NewRowPaddingTop    = '10px';

      NewRow.style.fontSize      = "small";
      NewRow.id                  = tableName + '_MultipleSelectionControlsRow';
      NewRow.name                = tableName + '_MultipleSelectionControlsRow';
      NewRow.style.height        = NewRowHeight; 
      NewRow.style.paddingTop    = NewRowPaddingTop;
      NewRow.style.paddingBottom = 0;

      MSCCCell	                   = NewRow.insertCell(0);
      MSCCCell.id                  = tableName + '_MultipleSelectionControlsCell';
      MSCCCell.name                = tableName + '_MultipleSelectionControlsCell';
      MSCCCell.colSpan             = colSpan;
      MSCCCell.style.paddingTop    = NewRowPaddingTop;
      MSCCCell.style.paddingBottom = 0;
      MSCCCell.style.backgroundColor = '#c0c0c0'; //'#ebffff';

      GrowFormBody('_manAcc', (parseInt(NewRowHeight) + parseInt(NewRowPaddingTop)));
    }

    if (MSCCCell) 
      MSCCCell.innerHTML = MSCCCellObj; 
  }

function disableRightClick(event)
{
  var message = "Right click has been disabled.";
  
  if(!document.rightClickDisabled) // initialize
  {
    if(document.layers) 
    {
      document.captureEvents(Event.MOUSEDOWN);
      document.onmousedown = disableRightClick;
    }
    else document.oncontextmenu = disableRightClick;
    return document.rightClickDisabled = true;
  }

  if(document.layers || (document.getElementById && !document.all))
  {
    if (event.which==2 || event.which==3)
    {
      alert(message);
      return false;
    }
  }
  else
  {
    alert(message);
    return false;
  }
}

/////////////////////////////////////////////////////////////////////////////////////////
//
// This function launches the Add a Favorite tool window, and adds a new page
// defined by urlAddress and pageTitle
//
//	Parameters:	string urlAddress	The URL of the page to add
//			string pageTitle	The page's description
//	Returns:	None
//
//	Author:		James L. Lainé
//	Date Imp:	03.29.2008
//	Version:	1.0
//	Notes:		Version 1.0 - Initial implementation
//				
/////////////////////////////////////////////////////////////////////////////////////////
function BookmarkPage(urlAddress, pageTitle)
{
  if (window.external)
  {
   window.external.AddFavorite(urlAddress, pageTitle);
  }
  else
  { 
   alert("Sorry! Your browser doesn't support this function.");
  }
}

/////////////////////////////////////////////////////////////////////////////////////////
//
// This function prints the page displayed in the browser
//
//	Parameters:	object thisDocument	The current document
//	Returns:	None
//
//	Author:		James L. Lainé
//	Date Imp:	03.29.2008
//	Version:	1.0
//	Notes:		Version 1.0 - Initial implementation
//				
/////////////////////////////////////////////////////////////////////////////////////////
function PrintThisPage(thisDocument) 
{ 
  print(thisDocument); 
}

/////////////////////////////////////////////////////////////////////////////////////////
//
// This function attempts to find an object within the specified document
//
//	Parameters:	string szObjToFind	The object to find
//			Object thisDocument	The HTML document to search or NULL
//	Returns:	Object objFound		The object found within the document
//
//	Author:		James L. Lainé
//	Date Imp:	03.29.2008
//	Version:	1.0
//	Notes:		Version 1.0 - Initial implementation
//				
/////////////////////////////////////////////////////////////////////////////////////////
function AGN_findObj(szObjToFind, thisDocument) 
{
  var nIndexOf;			//function IndexOf return value
  var nObj;			//Object iterator	
  var objFound;  		//Holds object to return if found within the document

  if (!thisDocument) 		//If document argument was not passed
     thisDocument = document;	//Assign a default document  

  if ((nIndexOf = szObjToFind.indexOf("?")) > 0 && parent.frames.length) 
  {
    thisDocument	= parent.frames[szObjToFind.substring(nIndexOf + 1)].document; 
    szObjToFind		= szObjToFind.substring(0, nIndexOf);
  }
  
  //Search the document for the object
  if(!(objFound = thisDocument[szObjToFind]) && thisDocument.all)
    objFound	= thisDocument.all[szObjToFind]; 

  //Search through the documents forms
  for (nObj = 0;!objFound && nObj < thisDocument.forms.length; nObj++) 
      objFound	= thisDocument.forms[nObj][szObjToFind];

  //Search throught the document's layers
  for (nObj = 0;!objFound && thisDocument.layers && nObj < thisDocument.layers.length; nObj++)
      objFound	= AGN_findObj(szObjToFind, thisDocument.layers[nObj].document);

  //Finally use getElementByid
  if (!objFound && thisDocument.getElementById) 
     objFound	= thisDocument.getElementById(szObjToFind); 

  return objFound;
}

/////////////////////////////////////////////////////////////////////////////
//
// This form should utilize the power of regular expressions to validate
// emails and phone numbers. At present to get this page going will refactor
// this code for self-documentation only.
//
//	Parameters:	None
//	Returns:	None
//
//	Author:		James L. Lainé
//	Date Imp:	03.29.2008
//	Version:	1.0
//	Notes:		Version 1.0 - Initial implementation
//			A form's object is passed to this function in the
//			following manner:
//			0.	object name
//			1.	undefined
//			2.	object test criteria
//                      Make sure the the object's id and name variables
//                      have been set.
//
/////////////////////////////////////////////////////////////////////////////
var bSilentFormValidation             = false;
var SilentFormValidationErrorMessage  = '';
function AGN_validateForm() 
{
  var vFuncArgs		= AGN_validateForm.arguments;
  var nFuncArgIndex;   					//Index to vFuncArgs
  var objVal;						//Holds the object returned by AGN_findObj
							//then if it is not NULL holds the object's value
  var objValName;					//Holds the name of the object found
  var objTestCriteria;					//Contains various test criterias defined for the object
  var nIndexOf;						//Function IndexOf return value
  var numValue;						//If the object is supposed to return a numerical value
  var minRange;						//If objTestCriteria contains 'inRange' the minimum range
  var maxRange;						//If objTestCriteria contains 'inRange' the maximum range
  var szErrors		= '';				//Error string

  //iterate through the function's argument list and validate form objects
  for (nFuncArgIndex = 0; nFuncArgIndex < (vFuncArgs.length - 2); nFuncArgIndex+=3)
  { 
    objVal		= AGN_findObj(vFuncArgs[nFuncArgIndex]);

    if (objVal)
    { 
      objTestCriteria	= vFuncArgs[nFuncArgIndex + 2];
      objValName	= objVal.name;

      //if it is not blank then process
      if ((objVal = objVal.value) != "") 
      {
        //if it is not blank - is it an email address field?
        if (objTestCriteria.indexOf('isEmail') != -1)
        { 
          var nIndexOfAt	= objVal.indexOf('@');
          var nIndexOfDot	= objVal.indexOf('.');
         
          var bValidEmail	= nIndexOfAt < nIndexOfDot && nIndexOfAt != -1 && nIndexOfDot != -1 && nIndexOfDot - nIndexOfAt > 1;

          if (bValidEmail)
          {
             var arrSplitAt	= objVal.split("@");
             var arrSplitDot    = objVal.split(".");

             bValidEmail	= arrSplitAt.length == 2 && arrSplitDot.length == 2;
 
             if (bValidEmail)
             {
                bValidEmail	= arrSplitDot[1].length >= 2 && isNaN(arrSplitAt[0].charAt(0));
             }
          }

          if (!bValidEmail) 
             szErrors+='- '+ objValName +' must contain an e-mail address i.e. support@ticketingsystems.com\n';
        }
        else if (objTestCriteria.indexOf('isNumeric') != -1) //Is it a decimal or non decimal - numeric value field? 
        {
          numValue = parseFloat(objVal);
          //It is supposed to be a numeric value field - is it?
          if (isNaN(objVal))                                
             szErrors+= '- ' + objValName + ' must contain a numeric value.\n';
          
          if (objTestCriteria.indexOf('inRange') != -1)
          {
            nIndexOf	= objTestCriteria.indexOf(':');
            minRange	= objTestCriteria.substring(8, nIndexOf); 
            maxRange	= objTestCriteria.substring(nIndexOf + 1);
            if (numValue < minRange || maxRange < numValue)
               szErrors+= '- '+ objValName +' must contain a number between ' + minRange + ' and ' + maxRange +'.\n';
          }
        }
        else if (objTestCriteria.indexOf('isInteger') != -1) //Is it a non decimal - numeric value field? 
        {
          //It is supposed to be a numeric value field - is it?
          if (isNaN(objVal))                                
             szErrors+= '- ' + objValName + ' must contain a non-decimal numeric value, i.e. 10, 20 30, etc...\n';
          else
          {
             var nIndexOfDot	= objVal.indexOf('.');
             if (nIndexOfDot != -1)
                szErrors+= '- ' + objValName + ' must contain a non-decimal numeric value, i.e. 10, 20 30, etc...\n';
          }
          
          if (objTestCriteria.indexOf('inRange') != -1)
          {
            nIndexOf	= objTestCriteria.indexOf(':');
            minRange	= objTestCriteria.substring(8, nIndexOf); 
            maxRange	= objTestCriteria.substring(nIndexOf + 1);
            if (numValue < minRange || maxRange < numValue)
               szErrors+= '- '+ objValName +' must contain a number between ' + minRange + ' and ' + maxRange +'.\n';
          }
        }
        else if (objTestCriteria.indexOf('isTelephone') != -1) //Is it a telephone value field? 
        {
           var szTempTel	= objVal;
           szTempTel		= szTempTel.replace(" ", "");
           szTempTel		= szTempTel.replace(" ", "");
           szTempTel		= szTempTel.replace("(", "");
           szTempTel		= szTempTel.replace(")", "");
           szTempTel		= szTempTel.replace("-", "");
           szTempTel		= szTempTel.replace("-", "");
           szTempTel		= szTempTel.replace(".", "");
           szTempTel		= szTempTel.replace(".", "");
           szTempTel		= szTempTel.replace(",", "");
           szTempTel		= szTempTel.replace(",", "");
           szTempTel		= szTempTel.replace("*", "");
           szTempTel		= szTempTel.replace("*", "");
	
           var bValidLength	= szTempTel.length == 10;
           var bValidConversion	= !isNaN(szTempTel);

           var bValidTelephone	= bValidLength && bValidConversion;

           if (bValidTelephone)
           {
	      bValidTelephone = szTempTel != "1234567890" && szTempTel != "0987654321" &&
                                szTempTel != "1111111111" && szTempTel != "2222222222" &&  
                                szTempTel != "3333333333" && szTempTel != "4444444444" &&  
                                szTempTel != "5555555555" && szTempTel != "6666666666" &&  
                                szTempTel != "7777777777" && szTempTel != "8888888888" &&  
                                szTempTel != "9999999999" && szTempTel != "0000000000";
           }
 
	   if (!bValidTelephone)       
	      szErrors+= '- '+ objValName +': please enter a 10 digit telephone number. i.e. (760) 480-1002 \n';
           else
           {
              objVal		= AGN_findObj(vFuncArgs[nFuncArgIndex]);
              if (objVal)
              {
                objVal.value = "(" + szTempTel.substring(0,3) + ") " + szTempTel.substring(3,6) + "-" + szTempTel.substring(6);
              }
           }
        }
        else if (objTestCriteria.indexOf('isDate') != -1) //Is it a Date value field? 
        {
        }
        else if (objTestCriteria.indexOf('isZipcode') != -1) //Is it a zipcode field? 
        {
           var szTempZip	= objVal;
           szTempZip		= szTempZip.replace(" ", "");
           szTempZip		= szTempZip.replace("-", "");

           var bValidLength	= szTempZip.length == 5 || szTempZip.length == 9;
           var bValidConversion	= !isNaN(szTempZip);
           var bvalidZipcodeVal = szTempZip != "00000" && szTempZip != "11111" &&
                                  szTempZip != "22222" && szTempZip != "33333" && 
                                  szTempZip != "44444" && szTempZip != "55555" && 
                                  szTempZip != "66666" && szTempZip != "77777" && 
                                  szTempZip != "88888" && szTempZip != "99999" && 
                                  szTempZip != "111111111" && szTempZip != "222222222" &&  
                                  szTempZip != "333333333" && szTempZip != "444444444" &&  
                                  szTempZip != "555555555" && szTempZip != "666666666" &&  
                                  szTempZip != "777777777" && szTempZip != "888888888" &&  
                                  szTempZip != "999999999" && szTempZip != "000000000";

           var bValidZipcode	= bValidLength && bValidConversion && bvalidZipcodeVal;

           if (!bValidZipcode)
              szErrors+= '- '+ objValName +': please enter a 5 or 9 digit zipcode. i.e. 92025 or 92025-5248 \n';
           else
           {
              objVal		= AGN_findObj(vFuncArgs[nFuncArgIndex]);
              if (objVal)
              {
                if (szTempZip.length == 9)
                  objVal.value = szTempZip.substring(0,5) + "-" + szTempZip.substring(5);
                else
                  objVal.value = szTempZip;
              }
           } 
        }
        else if (objTestCriteria.indexOf('isCustomerID') != -1) //Is it a customer ID field? 
        {
           var szCustomerID	= objVal;
           var bValidCustomerID	= false;

           //validate customer ID
           // Must start with oneof the following
           //1.	C0- to Cn-, n<=20
           //2. MERCCC- 
           //3.	RS:SRV-
           //4. RS:CLNT-
           //5.	OPOS-
           //5.	MGC-

           //validate multiPOS
           if (szCustomerID.indexOf('C') == 0)
           {
              var nComputer = 0;
              for (nComputer=0; nComputer <=20; ++nComputer)
              {
                bValidCustomerID = szCustomerID.indexOf('C'+ nComputer + '-') == 0;
                if (bValidCustomerID)
                   break;
              }
           }
           else if (szCustomerID.indexOf('MERCCC-') == 0) 
           {
             bValidCustomerID = true;
           }
           else if (szCustomerID.indexOf('RS:SRV-') == 0) 
           {
             bValidCustomerID = true;
           }
           else if (szCustomerID.indexOf('RS:CLNT-') == 0) 
           {
             bValidCustomerID = true;
           }
           else if (szCustomerID.indexOf('OPOS-') == 0) 
           {
             bValidCustomerID = true;
           }
           else if (szCustomerID.indexOf('MGC-') == 0) 
           {
             bValidCustomerID = true;
           }

           if(!bValidCustomerID)
           {
             szErrors+='- '+ objValName +': You have entered an unrecognized Customer Number or ID.\n';
           } 
        }
        //At this point it is neither an:
        //  1.	email address 
	//  2,	numeric value 
	//  3.	telephone number
	//  4.  date
	//  4.  zipcode
        //  5.  CustomerID
        //  field it must therefore default to a text field 
      } 
      else if (objTestCriteria.charAt(0) == 'R') //if it is blank - is it a required field?
        szErrors += '- '+ objValName +' is required.\n'; 
    }
  }

  if (szErrors)
  {
     if (bSilentFormValidation == false) 
        alert('The following error(s) occurred:\n'+szErrors);
     else
        SilentFormValidationErrorMessage = szErrors;
  }

  document.AGN_returnValue = (szErrors == '');
  bSilentFormValidation = false;

  return document.AGN_returnValue;
}

/////////////////////////////////////////////////////////////////////////////////////////
//
// This function validates state and US territory initials
//
//	Parameters:	string szStateInitials	The initials to validate
//	Returns:	boolean
//
//	Author:		James L. Lainé
//	Date Imp:	03.30.2008
//	Version:	1.0
//	Notes:		Version 1.0 - Initial implementation
//				
/////////////////////////////////////////////////////////////////////////////////////////
function AGN_ValidateState(szStateInitials)
{
  //Validate function parameters
  var bValidFuncParam = (szStateInitials.length > 0);

  if (bValidFuncParam)
  {
    var szAllStates = "AL,AK,AS,AZ,AR,CA,CO,CT,DE,DC,FM,FL,GA,GU,HI,ID,IL,IN,IA,KS,KY,LA,ME,MH,MD,MA,MI,MN,MS,MO,MT,NE,NV,NH,NJ,NM,NY,NC,ND,MP,OH,OK,OR,PW,PA,PR,RI,SC,SD,TN,TX,UT,VT,VI,VA,WA,WV,WI,WY";
    bValidFuncParam = (szAllStates.indexOf(szStateInitials) != -1);
  }  

  return bValidFuncParam;
}

/////////////////////////////////////////////////////////////////////////////////////////
//
// This function converts state and US territory initials to the state and territory name
//
//	Parameters:	string szStateInitialsToConvert	The state initials to convert
//	Returns:	string				The state string
//
//	Author:		James L. Lainé
//	Date Imp:	03.30.2008
//	Version:	1.0
//	Notes:		Version 1.0 - Initial implementation.
//				
/////////////////////////////////////////////////////////////////////////////////////////
function AGN_ConvertStateInitialsToString(szStateInitialsToConvert)
{
  var bValidFuncParam = (szStateInitialsToConvert.length > 0);
  var szNoConversion = "";

  //Validate function parameters
  if (bValidFuncParam)
  {
    //Validate function parameters
    var bValidFuncParamContent = AGN_ValidateState(szStateInitialsToConvert);
    
    if (bValidFuncParamContent)
    {
       if (szStateInitialsToConvert == "AL") return "ALABAMA";
       if (szStateInitialsToConvert == "AK") return "ALASKA";
       if (szStateInitialsToConvert == "AS") return "AMERICAN SAMOA";
       if (szStateInitialsToConvert == "AZ") return "ARIZONA ";
       if (szStateInitialsToConvert == "AR") return "ARKANSAS";
       if (szStateInitialsToConvert == "CA") return "CALIFORNIA ";
       if (szStateInitialsToConvert == "CO") return "COLORADO ";
       if (szStateInitialsToConvert == "CT") return "CONNECTICUT";
       if (szStateInitialsToConvert == "DE") return "DELAWARE";
       if (szStateInitialsToConvert == "DC") return "DISTRICT OF COLUMBIA";
       if (szStateInitialsToConvert == "FM") return "FEDERATED STATES OF MICRONESIA";
       if (szStateInitialsToConvert == "FL") return "FLORIDA";
       if (szStateInitialsToConvert == "GA") return "GEORGIA";
       if (szStateInitialsToConvert == "GU") return "GUAM ";
       if (szStateInitialsToConvert == "HI") return "HAWAII";
       if (szStateInitialsToConvert == "ID") return "IDAHO";
       if (szStateInitialsToConvert == "IL") return "ILLINOIS";
       if (szStateInitialsToConvert == "IN") return "INDIANA";
       if (szStateInitialsToConvert == "IA") return "IOWA";
       if (szStateInitialsToConvert == "KS") return "KANSAS";
       if (szStateInitialsToConvert == "KY") return "KENTUCKY";
       if (szStateInitialsToConvert == "LA") return "LOUISIANA";
       if (szStateInitialsToConvert == "ME") return "MAINE";
       if (szStateInitialsToConvert == "MH") return "MARSHALL ISLANDS";
       if (szStateInitialsToConvert == "MD") return "MARYLAND";
       if (szStateInitialsToConvert == "MA") return "MASSACHUSETTS";
       if (szStateInitialsToConvert == "MI") return "MICHIGAN";
       if (szStateInitialsToConvert == "MN") return "MINNESOTA";
       if (szStateInitialsToConvert == "MS") return "MISSISSIPPI";
       if (szStateInitialsToConvert == "MO") return "MISSOURI";
       if (szStateInitialsToConvert == "MT") return "MONTANA";
       if (szStateInitialsToConvert == "NE") return "NEBRASKA";
       if (szStateInitialsToConvert == "NV") return "NEVADA";
       if (szStateInitialsToConvert == "NH") return "NEW HAMPSHIRE";
       if (szStateInitialsToConvert == "NJ") return "NEW JERSEY";
       if (szStateInitialsToConvert == "NM") return "NEW MEXICO";
       if (szStateInitialsToConvert == "NY") return "NEW YORK";
       if (szStateInitialsToConvert == "NC") return "NORTH CAROLINA";
       if (szStateInitialsToConvert == "ND") return "NORTH DAKOTA";
       if (szStateInitialsToConvert == "MP") return "NORTHERN MARIANA ISLANDS";
       if (szStateInitialsToConvert == "OH") return "OHIO";
       if (szStateInitialsToConvert == "OK") return "OKLAHOMA";
       if (szStateInitialsToConvert == "OR") return "OREGON";
       if (szStateInitialsToConvert == "PW") return "PALAU";
       if (szStateInitialsToConvert == "PA") return "PENNSYLVANIA";
       if (szStateInitialsToConvert == "PR") return "PUERTO RICO";
       if (szStateInitialsToConvert == "RI") return "RHODE ISLAND";
       if (szStateInitialsToConvert == "SC") return "SOUTH CAROLINA";
       if (szStateInitialsToConvert == "SD") return "SOUTH DAKOTA";
       if (szStateInitialsToConvert == "TN") return "TENNESSEE";
       if (szStateInitialsToConvert == "TX") return "TEXAS";
       if (szStateInitialsToConvert == "UT") return "UTAH";
       if (szStateInitialsToConvert == "VT") return "VERMONT";
       if (szStateInitialsToConvert == "VI") return "VIRGIN ISLANDS";
       if (szStateInitialsToConvert == "VA") return "VIRGINIA ";
       if (szStateInitialsToConvert == "WA") return "WASHINGTON";
       if (szStateInitialsToConvert == "WV") return "WEST VIRGINIA";
       if (szStateInitialsToConvert == "WI") return "WISCONSIN";
       if (szStateInitialsToConvert == "WY") return "WYOMING";
    }
  }
  
  return szNoConversion;
}

/////////////////////////////////////////////////////////////////////////////////////////
//
// This function creates an under constrution message for the state selected
//
//	Parameters:	string szStateInitialSelected	The initials to create the message for
//	Returns:	None
//
//	Author:		James L. Lainé
//	Date Imp:	03.30.2008
//	Version:	1.0
//	Notes:		Version 1.0 - Initial implementation
//				
/////////////////////////////////////////////////////////////////////////////////////////
function AGN_SelectStateMessage(szStateInitialSelected)
{
  var szMessage;
  var bValidFuncParam = (szStateInitialSelected.length > 0);
  var bValidFuncParamContent = false;

  //Validate function parameters
  if (bValidFuncParam)
  {
    //Validate function parameters
    bValidFuncParamContent = AGN_ValidateState(szStateInitialSelected);

    if (bValidFuncParamContent)
    {
      var szStateName = AGN_ConvertStateInitialsToString(szStateInitialSelected);
      szMessage = szStateName + " EVENTS AND VENUES:\r\n\r\n" + "This page is currently under construction.\r\n You will be able to select venues and events from the state of " + szStateName + " shorlty.\r\n\r\n Thank you for navigating our pages.";
    }
    else
    {
      szMessage = "You have selected an invalid state, please try again.";
    }
  }
  else
  {
     szMessage = "Please select a state.";
  }
   
  alert(szMessage);
}

/////////////////////////////////////////////////////////////////////////////////////////
//
// This function starts a demo .wmv file listed on the demo page
//
//	Parameters:	string szDemoToShow	The name of the demo to show
//			string szCtlTagId	The id of the img tag to replace
//	Returns:	None
//
//	Author:		James L. Lainé
//	Date Imp:	04.09.2008
//	Version:	1.1
//	Notes:		Version 1.0 - Initial implementation
//                      Version 1.1 - Added szImgTagId to differentiate where the call is 
//                                    coming from 
//				
/////////////////////////////////////////////////////////////////////////////////////////
function AGN_ShowVideoDemo(szCtlTagId, szDemoToShow)
{
  var bValidFuncParam = (szDemoToShow.length > 0);
  var bValidFuncParam2= (szCtlTagId.length > 0);
  
  if(bValidFuncParam) //Turn everything to lower case
     szDemoToShow = szDemoToShow.toLowerCase();

  var bValidFileType = (szDemoToShow.indexOf('.wmv') != -1) || (szDemoToShow.indexOf('.mpeg') != -1) || (szDemoToShow.indexOf('.mpg') != -1) || (szDemoToShow.indexOf('.mov') != -1) || (szDemoToShow.indexOf('.sfw') != -1);
  var imgVideoFound = false;
  var embVideoFound = false;

  var szErrMsg;
  if (bValidFuncParam && bValidFuncParam2 && bValidFileType)
  {
    if (document.getElementById)
    { 
      imgVideoFound = document.getElementById('img-' + szCtlTagId);

      if (imgVideoFound)
      {
        imgVideoFound.parentNode.innerHTML= '\x3Cembed id=\'emb-' + szCtlTagId + '\' src=\'' + szDemoToShow + '\' width=\'512\' height=\'456\' autostart=\'1\' showcontrols=\'1\' showstatusbar=\'1\' type=\'application/x-mplayer2\' pluginspage=\'http://www.microsoft.com/windows/windowsmedia/download/\'\x3E \x3C/embed\x3E';
      }
      else
      {
        if (!imgVideoFound)  
        {    
          embVideoFound = document.getElementById('emb-' + szCtlTagId);
          if (embVideoFound)
          { 
            embVideoFound.parentNode.innerHTML= '\x3Cimg name=\'img-' + szCtlTagId + '\' id=\'img-' + szCtlTagId + '\' src=\'images/video-control.png\' alt=\'img-video-control\' width=\'512px\' height=\'384px\'/\x3E';
            AGN_ShowVideoDemo(szCtlTagId, szDemoToShow);
          }
          else
          {
            szErrMsg = "An <img> parent tag with name and id equaling [video-control] has not been added to this page...";
            alert(szErrMsg);
          }
        }
      }
    }
  }
  else
  {
    if(!bValidFuncParam)
      szErrMsg = "Invalid function parameter, cannot be zero length...";
     
    if(bValidFuncParam && !bValidFileType)
      szErrMsg = szDemoToShow + " is an unrecognized flash extension.";

   alert(szErrMsg); 
  }
 }

 function AGN_AlertLogin()
 {
    alert("Please Login!");
    document.AGN_returnValue = false;
 }

 var numMenus=4;

 function expandByID(divId, tdId, aId, DisplayTab)
 {
  for (i=1; i<=numMenus;++i)
  {
    var menuDivId = "Menu" + i;
    var menuTDId  = "td" + i;
    var menuAId   = "a" + i;	 
    collapseByID(menuDivId, menuTDId, menuAId, i);

    if (DisplayTab == i)
    {
      var dmh = "div_message_head" + i;
      var dmb = "div_message_body" + i;
   
      var div_message_head = document.getElementById(dmh);
      if (div_message_head)
         div_message_head.className = "messageHeadHover";

      var div_message_body = document.getElementById(dmb);
      if (div_message_body)
         div_message_body.className = "messageBodyHover";
    }
  }
		
  var div = document.getElementById(divId);
  div.className = "menuHover";

  var td = document.getElementById(tdId);
  td.className = "menuHover";

  var a = document.getElementById(aId);
  a.className  = "menuHover";

  return false;
 }
	
 function collapseByID(divId, tdId, aId, i)
 {
   var div = document.getElementById(divId);
   div.className = "menuNormal";

   var td = document.getElementById(tdId);
   td.className = "menuNormal";
 
   var a  = document.getElementById(aId);
   a.className = "menuNormal";

   var dmh = "div_message_head" + i;
   var dmb = "div_message_body" + i;
   
   var div_message_head = document.getElementById(dmh);
   if (div_message_head)
      div_message_head.className = "messageHeadNormal";

   var div_message_body = document.getElementById(dmb);
   if (div_message_body)
      div_message_body.className = "messageBodyNormal";
  
  return false;
 }

  var CITEM	= 0;
  var CUPC	= 1;
  var CQTY	= 2;
  var CPRICE	= 3;
  var CSTOTAL	= 4;

  function ValidateECom_Cart(XMLString)
  {
     //Validate Counts
     var CartCount	= GetTag(XMLString, ECOM_CART_COUNT);
     var CartSet	= GetTag(XMLString, ECOM_CART);
     var bValidEComCart	= false;
     var subTotal	= 0;
  
     for (var nItem = 0; nItem < CartCount; ++nItem)
     {
       var arrItem	= GetCartItem(CartSet, CartCount, nItem);

       if (arrItem)
       {
          if (arrItem.length == MAX_ECOM_CART_FIELDS);
          {
             bValidEComCart = arrItem[CITEM].length > 0 && Number(arrItem[CQTY]) > 0 && (Number(arrItem[CQTY]) * Number(arrItem[CPRICE]) == Number(arrItem[CSTOTAL]));

             if (!bValidEComCart)
             {
                SilentFormValidationErrorMessage = arrItem[CITEM] + "\t\t" + arrItem[CQTY] + "\t\t$" + Number(arrItem[CPRICE]).toFixed(2) + "\t\t$" + Number(arrItem[CSTOTAL]).toFixed(2);
                break;
             }

             subTotal += Number(arrItem[CSTOTAL]);
          }
       }
     }

     if (bValidEComCart)
     {
        var objSubTotal	= document.getElementById('Sub_Total');
       
        if (objSubTotal)
           bValidEComCart = Number(objSubTotal.value) == subTotal && subTotal > 0;
        else
           bValidEComCart = false;

        if (bValidEComCart)
        {
           var EComAccountNumber= GetTag(XMLString, ECOM_ACCOUNT_NUMBER);
           var EComTransCode	= GetTag(XMLString, ECOM_TRANS_CODE);
           var EComMerchantId	= GetTag(XMLString, ECOM_MERCHANT_ID);
           var EComMerchantPwd	= GetTag(XMLString, ECOM_MERCHANT_PWD);
           var EComBillerInfo	= GetTag(XMLString, ECOM_BILLER_INFO);
           var EComOperatorID	= GetTag(XMLString, ECOM_OPERATOR_ID);

           bValidEComCart	= EComMerchantId.length > 0 &&  EComMerchantPwd.length > 0 && EComBillerInfo.length > 0 &&
                                  EComOperatorID.length > 0 && EComAccountNumber.length > 0 && EComTransCode.length > 0;

           if (!bValidEComCart)
              SilentFormValidationErrorMessage = "Merchant information has been omitted from this submission."
        }
     }

     return bValidEComCart;
  }

  function ValidateBilling_Cart(XMLString)
  {
     var CartSet		= GetTag(XMLString, BILLING_CART);

     var BillingAccntNo		= GetTag(CartSet, BILLING_ACCOUNT_NUMBER);
     var BillingTransCode	= GetTag(CartSet, BILLING_TRANS_CODE);
     var BillingService		= GetTag(CartSet, BILLING_SERVICE);
     var BillingPeriod		= GetTag(CartSet, BILLING_PERIOD);
     var BillingDueDate		= GetTag(CartSet, BILLING_DUE_DATE);
     var BilllingAmount		= GetTag(CartSet, BILLING_AMOUNT);
     var BillingPastCharges	= GetTag(CartSet, BILLING_PAST_CHARGES);
     var BillingBillerInfo	= GetTag(CartSet, BILLING_BILLER_INFO);
     var BillingBillerMercId	= GetTag(CartSet, BILLING_BILLER_MERC_ID);
     var BillingBillerMercPwd	= GetTag(CartSet, BILLING_BILLER_MERC_PWD);

     var bValidBillingInfo	= BillingService.length > 0 && BillingPeriod.length > 0 && BillingDueDate.length > 0 && BilllingAmount.length > 0 && Number(BilllingAmount) > 0;
     var bValidBillingMercInfo	= BillingBillerMercId.length > 0 && BillingBillerMercPwd.length > 0 && BillingAccntNo.length > 0 && BillingTransCode.length > 0;
     var bValidBillingCart	= bValidBillingInfo && bValidBillingMercInfo;
                                  
    //Debug alerts
    //alert(BillingService); 
    //alert(BillingPeriod); 
    //alert(BillingDueDate); 
    //alert(BilllingAmount); 
    //alert(BillingBillerMercId); 
    //alert(BillingBillerMercPwd); 

    if (!bValidBillingCart)
    {
       if (!bValidBillingInfo)
          SilentFormValidationErrorMessage = "Invalid Billing Information - Missing Field.";

       if (!bValidBillingMercInfo)
       {
          if (SilentFormValidationErrorMessage.length > 0)
             SilentFormValidationErrorMessage += "\r\n";

          SilentFormValidationErrorMessage += "Merchant information has been omitted from this submission.";       
       } 
    }
    
    return bValidBillingCart;
  }


  function GetCartItem(CartSet, CartCount, nItem)
  {
    if (IsValidCartSet(CartSet, CartCount) && nItem >= 0 && nItem < CartCount)
    {
      var Item = GetTag(CartSet, ECOM_CART_ITEM + nItem);
      return Item.split('~');
    }

    return null;
  }

  function IsValidCartSet(CartSet, CartCount)
  {
     var bvalidCartSet		= CartCount > 0 && CartSet.length > 0;

     if (bvalidCartSet) 
     {
        var TCartSet		= CartSet;
        var nItemsDetected	= 0;

        for (var nItem = 0; nItem < CartCount; nItem++)
        {
           if (IsTagAvailable(TCartSet, ECOM_CART_ITEM + nItem))
           {
              var FTag		= GetTag(TCartSet, ECOM_CART_ITEM + nItem);
              TCartSet		= DeleteTag(TCartSet, ECOM_CART_ITEM + nItem);
              var ArrCItem	= FTag.split('~');

              if (ArrCItem.length == MAX_ECOM_CART_FIELDS)            
                 nItemsDetected++;
              else
                 break;
           }
           else
                break;
        }

        bvalidCartSet	= nItemsDetected == nItem && TCartSet.length == 0;
     }

     return bvalidCartSet;
  }

  function IsTagAvailable(XMLString, Tag)
  {
     var XMLTag	= GetTag(XMLString, Tag);

     return XMLTag.length > 0;
  }

  function DeleteTag(XMLString, Tag)
  {
    var TagVal	= GetTag(XMLString, Tag);
    var OldVal	= "<" + Tag + ">"  + TagVal + "</" + Tag + ">";
    var NewXMLString= XMLString.replace(OldVal, "");

    return NewXMLString;
  }   