//Language Switcher Method:
function SwitchLanguage(languageId) {

    //First call the AspNet2CallbackMethod in the SiteSkin Class:
    var results = cbSwitchLanguage(languageId);

    //If the language switch was a success, then reload the page so it picks up the language switch, it will do this because
    //each page sets the language content by passing the Session("iWebsiteLanguageId") value to the constructor for the
    //Inenvi.Data.WebsitePageItemHtmlItem() object as shown below:
    //  Dim item As New Inenvi.Data.WebsitePageItemHtmlItem(websitePageItemId, Session("iWebsiteLanguageId"))
    if (results[0] == "0") {

        document.location.reload();

    }
    else {

        alert("Unable to switch the website's content language. Please try again.");

    }
    

}

//--------------------------------------------------------------------------------------------------------------------------------------------------
//SHARE VARIABLES AND CONSTANTS:
//--------------------------------------------------------------------------------------------------------------------------------------------------
var _callbackOnLoadException =
    "There is a disruption in the network between your computer and the application server that caused the " +
    "AJAX callback to fail while the sytem was attempting to refresh data.\n\n" +
    "This disruption usually resolves itself in a couple minutes, but if you can't wait, you can usually resolve this " +
    "issue immediately by closing your web browser and then reloading the application.\n\n" +
    "Hopefully by the time the application reloads, full network connectivity will be restored.  However if the problem " +
    "persists, then it mostly likely means our network is down in some capacity or there is a fatal lock in the database.";

//--------------------------------------------------------------------------------------------------------------------------------------------------
//SHARED FUNCTIONS:
//--------------------------------------------------------------------------------------------------------------------------------------------------
function OpenEmailForm(fromEmail, toEmail, subjectTypeId, versionId) {

    //If the subjectTypeId == 7 (Send Page), then get the url and pass it:
    var url = "";
    if (subjectTypeId == "7") url = document.location.href;

    //Many of the calls to this function are still based off the old paradigm so in those cases, they will simply use the
    //RequestForInformation Version and send to info@incorp.com, the key is that the lead is saved.  The more customized calls
    //to this have been updated to pass the correct subjectTypeId and versionId:
    document.location.href = "contact.aspx?qsSubject=" + subjectTypeId + "&qsVersion=" + versionId + "&qsUrl=" + url;
	
}
//--------------------------------------------------------------------------------------------------------------------------------------------------
function ShowEntityMoveWindow(entityId, afterMoveFunction){ 

    if (afterMoveFunction == null) afterMoveFunction = "";   
    
    var url = "entity_move.aspx?qsEntityId=" + entityId;  
    var resultArray = window.showModalDialogX(url, "", "dialogWidth: 780px; dialogHeight: 210px; scroll: no");   
    
    if (resultArray){
    
        var newAccountName = resultArray[0];
        var hasUnpaidInvoices = CBln(resultArray[1]);
    
        //Call the after move function, usually this is to clear any pending changes on the calling form:
        if (Trim(afterMoveFunction) != ""){
        
            afterMoveFunction = afterMoveFunction + "(\"" + newAccountName + "\", " + hasUnpaidInvoices.toString() + ");";        
            eval(afterMoveFunction);
            
        }        
    
    } 

}
//--------------------------------------------------------------------------------------------------------------------------------------------------
function SetGridScrollerHeight(gridControl, scrollerElement){
    
    var recordCount = gridControl.RecordCount;      
    var maxVisibleRecords = CInt(scrollerElement.getAttribute("maxrecords"));    
    var headerRowHeight = 19;
    var dataRowHeight = 20;
    
    if (recordCount > maxVisibleRecords){        
    
        //Will need verticle scrolling:
        scrollerElement.style.height = headerRowHeight + (maxVisibleRecords * dataRowHeight);
        scrollerElement.style.overflowY = "scroll"; 
        
    }
    else {
    
        //No verticle scrolling needed:
        scrollerElement.style.height = headerRowHeight + (recordCount * dataRowHeight);
        scrollerElement.style.overflowY = "hidden"; 
    
    }   

}
//--------------------------------------------------------------------------------------------------------------------------------------------------
function CopyToClipboard(text){

    window.clipboardData.setData("text", text);    
    
}
//--------------------------------------------------------------------------------------------------------------------------------------------------
function OpenOrderSplitWindow(orderId){

    var url = "order_split.aspx?qsOrderId=" + orderId;
    var newOrderId = window.showModalDialogX(url, "", "dialogWidth: 1060px; dialogHeight: 675px; scroll: no");
    
    return newOrderId;

}
//--------------------------------------------------------------------------------------------------------------------------------------------------
function SendKeys(keyCode){

    var lobjShell = new ActiveXObject("Wscript.shell");
    lobjShell.SendKeys(keyCode);

}
//--------------------------------------------------------------------------------------------------------------------------------------------------
function OpenPaymentWindow(orderId, accountId, paymentMethodId){    
   
    //Open payment modal window:    
    var pageName = (paymentMethodId == "4"?"account_payment_make.aspx":"order_payment.aspx");
    var url = pageName + "?qsOrderId=" + orderId + "&qsAccountId=" + accountId + "&qsPaymentMethodId=" + paymentMethodId;
    var height = (paymentMethodId == "3" || paymentMethodId == "4"?"600px":"300px");
    var scrollAttribute = (paymentMethodId == "4"?"yes":"no");
    var returnValue = window.showModalDialogX(url, "", "dialogWidth: 765px; dialogHeight: " + height + "; scroll: " + scrollAttribute);
    
    return returnValue;    

}
//--------------------------------------------------------------------------------------------------------------------------------------------------
function OpenPaymentViewer(paymentId, paymentMethodId){

    //Set the height of the window based on whether or not its check or credit card payment:
    var height = "300";
    switch (paymentMethodId){
    
        case "2": height = "250"; break; //Cash Payment
        case "3": height = "595"; break; //Check Payment
        case "4": height = "365"; break; //Credit Card Payment
        case "5": height = "250"; break; //Wire Transfer Payment
    
    }

    var url = "account_payment_view.aspx?qsPaymentId=" + paymentId;
    if (navigator.appName.toLowerCase().indexOf("microsoft") != -1){

        var result = window.showModalDialogX(url, "", "dialogWidth: 600px; dialogHeight: " + height + "px; scroll: no");   
                                
    }
    else {

        var left = (document.body.offsetWidth / 2) - (600 / 2) + document.body.scrollLeft;
        var top = (document.body.clientHeight / 2) - (height / 2) + document.body.scrollTop;	
        var features =
        "top=" + top + ",left=" + left + ",width=600,height=" + height + ",location=no,menubar=no," +
                                    "resizable=no,scrollbars=no,status=no,titlebar=yes,toolbar=no";

        window.open(url, null, features);	
    
    }

}
//--------------------------------------------------------------------------------------------------------------------------------------------------
function SendOutlookEmail(email, subject, body){    
    
    //Handle optional params:
    if (subject == null) subject = "";
    if (body == null) body = "";
    
    //Trim email string down:
    email = Trim(email);    

    if (email == ""){
   
        alert("There is no email address.");        
        return;       
   
    } 
    if (!IsEmail(email)){
   
        alert("This is not a valid email address.");        
        return;       
   
    } 
    
    document.location.href = "mailto: " + escape(email) + "?subject=" + escape(subject) + "&body=" + escape(body);

}
//--------------------------------------------------------------------------------------------------------------------------------------------------
function SendOutlookFax(faxNumber, subject){

    if (Trim(faxNumber) == ""){
   
        alert("A fax number is required to send a fax.");        
        return;       
   
    } 
    
    //Strip the fax number down to just numbers:
    faxNumber = StripPhoneNumber(faxNumber);      
    
    //Send the fax to outlook:
    document.location.href = "mailto: [FAX:" + faxNumber + "]?subject=" + escape(subject);

}
//--------------------------------------------------------------------------------------------------------------------------------------------------
function ShowEntityStatusPopup(entityId, jurisdictionId, jurisdictionEntityId){

    var url = "entity_statuswebservice.aspx?qsEntityId=" + entityId + "&qsJurisdictionId=" + jurisdictionId + "&qsJurisdictionEntityId=" + jurisdictionEntityId;
    
    window.showModalDialogX(url, "", "dialogWidth: 725px; dialogHeight: 355px; scroll: no");

}
//--------------------------------------------------------------------------------------------------------------------------------------------------
window.showModalDialogX = function (url, args, features){       

    //Parse out the width and height features of the window:
    var featureArray = features.split(";");
    
    var width = 0;
    var height = 0;
    for (var i = 0; i < featureArray.length; i++){
    
        var feature = Trim(featureArray[i]);
        if (feature.indexOf("dialogWidth:") > -1){
        
            width = CInt(Trim(Replace(feature.split("dialogWidth:")[1], "px", "")));            
            break;
        
        }       
    
    }
    for (var i = 0; i < featureArray.length; i++){
    
        var feature = Trim(featureArray[i]);
        if (feature.indexOf("dialogHeight:") > -1){
        
            height = CInt(Trim(Replace(feature.split("dialogHeight:")[1], "px", "")));            
            break;
        
        }       
    
    }
    
    //Define the x and y coordinates for the application outer window [ie... window.top]:					
    var left = (window.top.document.body.offsetWidth / 2) - (width / 2) + window.top.document.body.scrollLeft;				
    var top = (window.top.document.body.clientHeight / 2) - (height / 2) + window.top.document.body.scrollTop;	   
        
    //Add the positioning features to the features string:
    features += features + "; dialogLeft: " + left.toString() + "; dialogTop: " + top.toString();    
    
    return window.showModalDialog(url, args, features);
    
};
//--------------------------------------------------------------------------------------------------------------------------------------------------
function GenerateDoc(docType, accountId, entityId, generateArguments){    

    //Generate the word document via a callback:
    var resultArray = cbGenerateDoc(docType, accountId, entityId, generateArguments).split("<cb_col>");
    
    if (resultArray[0] == "0"){
    
        var filePath = resultArray[1];
        
        OpenWordApplication(filePath);
    
    }
    else {
    
        //Show exception:
        alert(resultArray[1]);
    
    }
	
}
//--------------------------------------------------------------------------------------------------------------------------------------------------
function OpenWordApplication(filePath){

    try {

        //To instantiate an ActiveXObject like this, the user must have the following browser setting set to "Enabled":
        //  [Initialize and script ActiveX controls not marked as safe for scripting]

        //Trim the file extension off of the path if one was provided, word will not open the file with the extension appended:
        filePath = Replace(Replace(filePath, ".doc", ""), ".DOC", "");
        
        //Instantiate a new instance of Word:
        var wordObject = new ActiveXObject("Word.Application"); 
        
        //Make it visible, activate it, and maximize it:
        wordObject.Visible = true;
        wordObject.Activate();
        wordObject.WindowState = 1; //wdWindowStateMaximize
        
        //Open the document:
        wordObject.Documents.Open(filePath);   
        
        //Search for a "<Cursor Placeholder>" string, if its found, then we are going to locate it and call the TypeBackSpace() method
        //because we want the cursor moved to that position, this is ignored for documents that do not have this placeholder:
        var isFound = wordObject.Selection.Find.Execute("<Cursor Placeholder>");        
        if (isFound) wordObject.Selection.TypeBackspace();
        
    }    
    catch (err){
    
        var errorDescription = "";
        if (err.description.toLowerCase() == "automation server can't create object"){
    
            errorDescription = 
                "Error: " + err.description + "\n\n" +
                "This function requires that the following browser security setting be set to \"Enabled\":\n" +
                "[Initialize and script ActiveX controls not marked as safe for scripting]\n\n" +
                "Please see the User Settings Manual for instructions.";
                
        }
        else {
        
            errorDescription = "Error: " + err.description;
        
        }
            
        alert(errorDescription);
    
    } 

}
//--------------------------------------------------------------------------------------------------------------------------------------------------
function GeneratePdf(formId, accountId, entityId){
    
    //Generate the pdf document via a callback:
    var resultArray = cbGeneratePdf(formId, accountId, entityId).split("<cb_col>");
    
    if (resultArray[0] == "0"){
    
        var filePath = resultArray[1];
        
        OpenAcrobatApplication(filePath);
    
    }
    else {
    
        //Show exception:
        alert(resultArray[1]);
    
    }   
	
}
//--------------------------------------------------------------------------------------------------------------------------------------------------
function OpenAcrobatApplication(filePath){  

    //To instantiate an ActiveXObject like this, the user must have the following browser setting set to "Enabled":
    //  [Initialize and script ActiveX controls not marked as safe for scripting]

    try {

        //Strip the file name out of the path:
        var fileName = filePath.substr((filePath.lastIndexOf("\\") + 1));    
        
        //Instantiate a new instance of Acrobat:
        var acrobatObject = new ActiveXObject("AcroExch.App"); 
        
        //Show the application:
        acrobatObject.Maximize(1000)
        acrobatObject.Show();    
        
        //Next, intantiate an instance of a pdf document:
        var acrobatDocObject = new ActiveXObject("AcroExch.AVDoc"); 
        
        acrobatDocObject.Open(filePath, fileName);   
        
    }
    catch (err){
    
        var errorDescription = "";
        if (err.description.toLowerCase() == "automation server can't create object"){
    
            errorDescription = 
                "Error: " + err.description + "\n\n" +
                "This function requires that the following browser security setting be set to \"Enabled\":\n" +
                "[Initialize and script ActiveX controls not marked as safe for scripting]\n\n" +
                "Please see the User Settings Manual for instructions.";
                
        }
        else {
        
            errorDescription = "Error: " + err.description;
        
        }
            
        alert(errorDescription);
    
    } 

}
//--------------------------------------------------------------------------------------------------------------------------------------------------
function GenerateGenericLetterFax(accountId, entityId){

    var url = "doc_merge_params.aspx?qsDocType=GenericLetter";     
    var generateArguments = window.showModalDialogX(url, "", "dialogWidth: 400px; dialogHeight: 205px; scroll: no");   
    
    //If not args were returned, then the user chose to cancel:
    if (generateArguments == null) return;   
    
    GenerateDoc("GenericLetter", accountId, entityId, generateArguments);

}
//--------------------------------------------------------------------------------------------------------------------------------------------------
function GetNevadaReportDocumentId(entityTypeId, isInitialList){
    
    var formId = "";
    
    switch (entityTypeId){
    
        //Domestic Profit Corporation, Domestic Professional Corporation, Foreign Profit Corporation, Domestic Close Corporation, 
        //Professional Association, Foreign Professional Corporation, Foreign Close Corporation:
        case "1": case "5": case "6": case "10": case "7": case "26": case "32": 
        
            formId = (isInitialList?"29":"25"); 
            
            break;
            
        //Domestic Corporation Sole, Foreign Corporation Sole:
        case "19": case "33": 
        
            formId = (isInitialList?"58":"59"); 
            
            break;
        
        //Domestic Business Trust, Foreign Business Trust:            
        case "30": case "28": 
        
            formId = (isInitialList?"98":"99"); 
            
            break;
        
        //Domestic Limited Partnership, Foreign Limited Partnership, Domestic Limited-Liability Limited Partnership, Foreign Limited-Liability Limited Partnership:
        case "4": case "14": case "12": case "24": 
        
            formId = (isInitialList?"73":"74"); 
            
            break;
        
        //Domestic Limited-Liability Company, Foreign Limited-Liability Company, Foreign Professional Limited-Liability Company, 
        //Domestic Professional Limited-Liability Company:
        case "2": case "17": case "22": case "23": 
        
            formId = (isInitialList?"64":"65");
            
            break;
            
        //Domestic Limited-Liability Partnership, Foreign Limited-Liability Partnership:
        case "3": case "18": 
        
            formId = (isInitialList?"90":"91");
            
            break;
            
        //Non-Profits:
        case "9": case "11": case "34": case "29": 
        
            formId = (isInitialList?"114":"45");
            
            break;            
    
    }
    
    return formId;
    
}
//--------------------------------------------------------------------------------------------------------------------------------------------------
//Called by the application in many locations:
function OpenExternalBrowserWindow(url){     

    if (Trim(Replace(url.toLowerCase(), "http://", "")) == ""){
    
        alert("No URL was supplied.");    
        return;
        
    }   
    
    //Create the new window object:
    var uniqueCode = GetUniqueCode();
    var windowName = "popup_window_" + uniqueCode;
    
    //Define the x and y coordinates for the window:					
    var left = (window.parent.document.body.offsetWidth / 2) - (1050 / 2) + window.parent.document.body.scrollLeft;				
    var top = (window.parent.document.body.clientHeight / 2) - (700 / 2) + window.parent.document.body.scrollTop;	
    
    var features = 
        "top=" + top + ",left=" + left + ",width=1050,height=700,location=yes,menubar=yes," +
                                    "resizable=yes,scrollbars=yes,status=yes,titlebar=yes,toolbar=yes";        
    
    var windowObject = window.open(url, windowName, features);	

}
//--------------------------------------------------------------------------------------------------------------------------------------------------
//Called by the Entities grids in the Account and Jurisdictions forms:
function OpenEntitySearchWindow(entityId){        
    
    //Create the new window object:
    var uniqueCode = GetUniqueCode();
    var windowName = "popup_window_" + uniqueCode;
    
    //Define the x and y coordinates for the window:					
    var left = (window.parent.document.body.offsetWidth / 2) - (1050 / 2) + window.parent.document.body.scrollLeft;				
    var top = (window.parent.document.body.clientHeight / 2) - (700 / 2) + window.parent.document.body.scrollTop;	
    
    var features = 
        "top=" + top + ",left=" + left + ",width=1050,height=700,location=no,menubar=no," +
        "resizable=no,scrollbars=no,status=yes,titlebar=yes,toolbar=no";
        
    var url = "jurisdictions_entitysearch.aspx?qsEntityId=" + entityId;
    var windowObject = window.open(url, windowName, features);	

}
//--------------------------------------------------------------------------------------------------------------------------------------------------
function OpenInternalJurisidctionWindow(jurisdictionId){

    //Build an args array:
    var argumentArray = new Array(1);
    argumentArray[0] = jurisdictionId;
    
    //Get the window collection object:
    var wc = window.parent.GetWindowCollection();
    
    //Find out if the Jurisdictions window is already open, if so, we just call a method in that window that selects this jurisdictionid:
    if (wc.IsWindowOpen("tool_jurisdictions", true)){
    
        var windowId = wc.GetWindowId("tool_jurisdictions");
        wc.GetWindowDocument(windowId).SelectJurisdiction(jurisdictionId);
        wc.ShowWindow(windowId);
    
    }
    else {
    
        window.parent.OpenTool("jurisdictions.aspx", argumentArray);
        
    }

}
//--------------------------------------------------------------------------------------------------------------------------------------------------
function escapeX(text){

    //Note the uppercase "X" at the end, this function inherits from the window escape() method and added special formatting for the "+" symbol by
    //replacing it with "&pls", and "·" with "&middot" this is necessary for ComponenentArt callbacks via their http handler, they somehow strip out all "+" symbols
    //so we have to encode them so this doesn't happen:
    return escape(Replace(Replace(text, "+", "&pls;"), "·", "&middot;"));

}
//--------------------------------------------------------------------------------------------------------------------------------------------------
function GetIncorpActiveXControl(){

    //Find out where the app window is in relation to the current window:
    var appWindowObject = window;
    if (window.parent){
    
        if (window.parent.window.parent){
        
            appWindowObject = window.parent.window.parent;   
        
        }
        else {
        
            appWindowObject = window.parent;
        
        }
    
    }    

    //Get the active x control from the application window:
    var appActiveXObject = appWindowObject.document.getElementById("appActiveXObject");  
    
    if (appActiveXObject){
    
        return appActiveXObject;
    
    }
    else {    
        
        return null;
    
    }

}
//--------------------------------------------------------------------------------------------------------------------------------------------------
function InitiateTapiCall(phoneNumber, isExtension){

    if (isExtension == null) isExtension = false; //Optional arg

    //First validate the phone number:
    if (Trim(phoneNumber) == ""){
    
        alert("A phone number is required to place a phone call.");
        return;
    
    }    
    
    if (!isExtension){
    
        //The phone numbers must be 11 characters in length after all other symbols are stripped away and the number is formatted:
        phoneNumber = StripPhoneNumber(phoneNumber);
    
        if (phoneNumber.length != 11){            
        
            alert("Since you are attempting to place a phone call through an IP phone system, the number must include (1-Area Code-Phone Number).\n\n" +
                    "An valid example would be 1-702-555-1212. Please update the phone number and try again. " + 
                    "(Note that the application strips out all non-numeric characters prior to attempting to place the call).");
            return;               
        
        }
        
    }

    var appActiveXObject = GetIncorpActiveXControl();
    
    if (appActiveXObject){          

        //Call the CreateOutlookAppointment method:
        var isSuccess = appActiveXObject.PlaceTapiCall(phoneNumber); 
        
        if (!isSuccess){
        
            alert("The TAPI engine was not able to initiate your call.");
        
        }
        
    }
    else {
    
        alert("You do not have the Incorp ActiveX control installed. You need the ActiveX control to access this feature of the application.");
    
    }

}
//--------------------------------------------------------------------------------------------------------------------------------------------------
function FixComponenentArtGridCallbackPrefix(gridControl, webServerPath, pageFileName, sslFlag){
    
    //This function is necessary because our webserver/network will re-route the URL's on callbacks to have the port inserted into the url:    
	var callbackPrefix = (sslFlag?"https:":"http:") + webServerPath + pageFileName + "?Cart_" + gridControl.GetProperty("Id") + "_Callback=yes";
        
    //Update the callback prefix:
    gridControl.SetProperty("CallbackPrefix", callbackPrefix);

}
//--------------------------------------------------------------------------------------------------------------------------------------------------
function RunReport(isReady, windowName, format, reportName, onClientSideReportLoaded) {

    var webServerPath = document.frmMain.hidWebServerPath.value;

    if (!isReady) {

        //Create the new report window object and load the preloader form so there is some feedback provided to the users:
        var uniqueCode = GetUniqueCode();
        var windowNameLocal = "report_window_" + uniqueCode;

        //Define the x and y coordinates for the window:					
        var left = (window.parent.document.body.offsetWidth / 2) - (1024 / 2) + window.parent.document.body.scrollLeft;
        var top = (window.parent.document.body.clientHeight / 2) - (550 / 2) + window.parent.document.body.scrollTop;

        /*
        NOTE: We stopped using features since it wasn't working correctly in all browsers and the new version of EMS is almost ready:
        var features =
        "top=" + top + ",left=" + left + ",width=1024,height=550,location=no,menubar=no," +
        "resizable=yes,scrollbars=" + (format == "MHTML" ? "yes" : "no") + ",status=yes,titlebar=yes,toolbar=no";
        */

        var popupWindow = window.open("http:" + webServerPath + "report_loader.aspx", windowNameLocal, "");
        
        window.setTimeout("RunReport(true, \"" + windowNameLocal + "\", \"" + format + "\", \"" + reportName + "\", \"" + onClientSideReportLoaded + "\");", 1000);

    }
    else {

        document.frmMain.target = windowName; //Set the target to the newly created window
        document.frmMain.action = "http:" + webServerPath + "report_viewer.aspx?qsFormat=" + format +
	                                "&qsName=" + reportName + "&qsUseSsl=0" + "&qsOnReportLoaded=" + escape(onClientSideReportLoaded);
        document.frmMain.submit();

    }

}
//--------------------------------------------------------------------------------------------------------------------------------------------------
function SetTextBoxReadOnly(inputControl, isReadOnly){
    
    inputControl.readOnly = isReadOnly;
    inputControl.className = (isReadOnly?"textbox_readonly":"textbox");
    inputControl.setAttribute("tabindex", (isReadOnly?"-1":""));

}
//--------------------------------------------------------------------------------------------------------------------------------------------------
function InsertTab(textAreaControl){

   var tabKeyCode = 9;
   
   if (event.keyCode == tabKeyCode && event.srcElement == textAreaControl){
   
      textAreaControl.selection = document.selection.createRange();
      textAreaControl.selection.text = String.fromCharCode(tabKeyCode);
      event.returnValue = false;
      
   }
   
}
//--------------------------------------------------------------------------------------------------------------------------------------------------
function StripPhoneNumber(number){

    //Strip out all non alpha-numeric characters:
    number = Trim(Replace(Replace(Replace(Replace(Replace(Replace(number, "-", ""), "(", ""), ")", ""), " ", ""), ".", ""), "+", ""));
    
    //If it's not a perfect 11 numbers, then format further:
    if (number.length != 11){
        
        //If there are only 10 numbers, stick the 1 at the beginning and give it a try:
        if (number.length == 10){
        
            number = "1" + number;
        
        }
        else {
        
            //If the length of the phone number is greater than 11, then trim everything after the 11 char:
            if (number.length > 11){
            
                number = number.substr(0, 11);
            
            }
                        
        }
    
    }
    
    return number;

}
//--------------------------------------------------------------------------------------------------------------------------------------------------
function RadComboBoxFocus(comboBoxId){

    document.getElementById(comboBoxId + "_Input").focus();

}
//--------------------------------------------------------------------------------------------------------------------------------------------------
function GetRadComboBoxInput(comboBoxId){

    return document.getElementById(comboBoxId + "_Input");

}
//--------------------------------------------------------------------------------------------------------------------------------------------------
function SetRadComboBoxReadOnly(comboBoxId){

    var inputControl = document.getElementById(comboBoxId + "_Input");
    with (inputControl){
        disabled = false;
        readOnly = true;
        style.backgroundColor = "#F1F1F1";
    }    
    
}
//--------------------------------------------------------------------------------------------------------------------------------------------------
function RadComboBoxClick(comboBoxId){

    document.getElementById(comboBoxId + "_Input").click();

}
//--------------------------------------------------------------------------------------------------------------------------------------------------
function GetSelectedGridItem(gridControl){

    var itemArray = gridControl.GetSelectedItems();
    
    if (itemArray.length == 0){
    
        return null;
    
    }
    else {
    
        return itemArray[0];
    
    }

}
//--------------------------------------------------------------------------------------------------------------------------------------------------
function SetCookie(name, value){

    var dateObject = new Date();
    dateObject.setFullYear(dateObject.getFullYear() + 1); //set it to expire 1 year in the future
    document.cookie = name + "=" + escape(value) + "; expires=" + dateObject.toGMTString();
  
}
//--------------------------------------------------------------------------------------------------------------------------------------------------
function GetCookie(name){

    var value = document.cookie.match(name + '=(.*?)(;|$)');

    if (value){    
        return (unescape(value[1]));        
    }
    else {    
        return "";        
    }
    
}
//--------------------------------------------------------------------------------------------------------------------------------------------------
function DeleteCookie(name){

  var dateObject = new Date();
  dateObject.setTime(dateObject.getTime() - 1);
  document.cookie = name += "=; expires=" + dateObject.toGMTString();
  
}
//--------------------------------------------------------------------------------------------------------------------------------------------------
function GetDayDesc(value){

    var description = "";

    switch (value){    
        case 0: description = "Sunday"; break;
        case 1: description = "Monday"; break;
        case 2: description = "Tuesday"; break;
        case 3: description = "Wednesday"; break;
        case 4: description = "Thursday"; break;
        case 5: description = "Friday"; break;
        case 6: description = "Saturday"; break;    
    }
    
    return description;

}
//--------------------------------------------------------------------------------------------------------------------------------------------------
function GetMonthDesc(value){

    var description = "";

    switch (value){    
        case 0: description = "January"; break;
        case 1: description = "February"; break;
        case 2: description = "March"; break;
        case 3: description = "April"; break;
        case 4: description = "May"; break;
        case 5: description = "June"; break;
        case 6: description = "July"; break;  
        case 7: description = "August"; break; 
        case 8: description = "September"; break; 
        case 9: description = "October"; break; 
        case 10: description = "November"; break; 
        case 11: description = "December"; break;   
    }
    
    return description;

}
//--------------------------------------------------------------------------------------------------------------------------------------------------
function IsCreditCardNumberValid(number, cardTypeDesc){

    //Remove "-" and " " from the Card Number:
    var cardNumber = Replace(Replace(Trim(number), "-", ""), " ", "");
    if (cardNumber == ""){
        alert("Card Number is required.");
        return false;
    }
    if (!IsInteger(cardNumber)){
        alert("Card Number must be a valid number, please do not use any " +
                "characters other than 0-9");
        return false;
    }
    //Check length:
    if (cardTypeDesc.toLowerCase() == "american express"){
        if (cardNumber.length != 15){
            alert("This card type requires a 15 digit card number.");
            return false;
        }
    }
    else {
        if (cardNumber.length != 16){
            alert("This card type requires a 16 digit card number.");
            return false;
        }
    }

    //Check cardNumber to make sure its first digit(s) matches
    //its card type:
    switch (cardTypeDesc.toLowerCase()){
        case "american express":
            if (cardNumber.substr(0,2) != "37"){
                alert("The card number is invalid. American Express cards start with [37].");
                return false;
            }
            break;
        case "visa":
            if (cardNumber.substr(0,1) != "4"){
                alert("The card number is invalid. Visa credit cards start with [4].");
                return false;
            }
            break;
        case "mastercard":
            if (cardNumber.substr(0,1) != "5"){
                alert("The card number is invalid. Mastercard credit cards start with [5].");
                return false;
            }
            break;
        case "discover":
            if (cardNumber.substr(0,2) != "60"){
                alert("The card number is invalid. Discover credit cards start with [60].");
                return false;
            }
            break;
    }
    
    //If we made it to this point, then the card number passed all validations, so return true:
    return true;
}
//--------------------------------------------------------------------------------------------------------------------------------------------------
function IsExpDateValid(expirationMonth, expirationYear){

    var dateObject = new Date();
    var currentMonth = dateObject.getMonth() + 1; 
    var currentYear = dateObject.getYear();    
    
    //Convert to int:
    expirationMonth = expirationMonth * 1;
    expirationYear = expirationYear * 1;    
        
    //Check the year first:
    if (expirationYear < currentYear) return false;
    
    //Check the month next:
    if (expirationYear == currentYear){        
        if (expirationMonth < currentMonth) return false;
    }
    return true;
    
}
//--------------------------------------------------------------------------------------------------------------------------------------------------
function LoadSelectOptions(selectControl, dataString, rowDelimiter, colDelimiter, insertEmptyOption){	
		
	if (insertEmptyOption == null) insertEmptyOption = true;
		
	//Capture the value of the current selected option:
	var value = selectControl.value;	
	
	var index = selectControl.options.selectedIndex;		
	var text = (index == -1?"":selectControl.options[index].text);
	
	//Clear all options from the select:	
	selectControl.length = 0;	
	
	//Add the 1st empty option if its needed:
	if (insertEmptyOption){	
	    
	    var optionElement = new Option("", "", false, false);    		
	    selectControl.options[0] = optionElement;	
	    
	}	
	
	if (Trim(dataString) != ""){
	
	    //Split the data string up into an array:
	    var rowArray = dataString.split(rowDelimiter);	
	        		
	    //Loop thru the array and add the maintenance options:	
	    for (var i = 0; i < rowArray.length; i++){	
    	
		    var columnArray = rowArray[i].split(colDelimiter);			
		    var optionElement = new Option(columnArray[1], columnArray[0], false, false);
    		
		    selectControl.options[i + (insertEmptyOption?1:0)] = optionElement;		
    		
	    }	
    	
	    //Reset the selected option to the value that matches value;
	    selectControl.value = value;	
	    
	}
	
}
//--------------------------------------------------------------------------------------------------------------------------------------------------
function IsInteger(value, allowNegative, allowThousands){

    //Make sure its a string:
    value = value.toString();

	if (value == ""){
		return true;
	}
	
	//Handle null params:
	if (allowNegative == null) allowNegative = true;
	if (allowThousands == null) allowThousands = false;
	
	//Since this is a function for checking for integers, the
	//isNaN() function does most of the work for us, however,
	//the isNaN() function allows "." and "-" so we must 
	//check for the presence of these two symbols.  If either
	//exist in the string, then we return false:
	if (value.indexOf(".") != -1){
		return false;
	}
	if (allowNegative == false){
		if (value.indexOf("-") != -1){
			return false;
		}	
	}		
	
	if (allowThousands == false){
		if (value.indexOf(",") != -1){
			return false;
		}	
	}
	else {
		//Strip out thousands "," incase they put them in because
		//isNaN will return true if they are there:
		value = Replace(value, ",", "");
	}		
	
	//Check for e or E since isNaN allows them:
	if (value.indexOf("e") != -1){
		return false;
	}
	if (value.indexOf("E") != -1){
		return false;
	}
	
	//Finish the validation:
	if (isNaN(value)){
		return false;
	}
	//If we made it here, then its a integer so we return true:
	return true;
}
//--------------------------------------------------------------------------------------------------------------------------------------------------
function Replace(value, findText, replaceText){

	value = value.toString();	

	return value.split(findText).join(replaceText);	
}
//--------------------------------------------------------------------------------------------------------------------------------------------------
function Trim(value){

    if (value == null) value = "";

	value = value.toString();

	return LTrim(RTrim(value));	
}
//--------------------------------------------------------------------------------------------------------------------------------------------------
function LTrim(value){	
	var spaceIndex = value.search( /^\s*(\S.*)/ );
	return ( ( spaceIndex == -1 ) ? "" : RegExp.$1 );
}
//--------------------------------------------------------------------------------------------------------------------------------------------------
function RTrim(value){	
	var spaceIndex = value.search( /\s+$/ );
	return ( ( spaceIndex == -1 ) ? value : value.substr( 0, spaceIndex ) );
} 
//--------------------------------------------------------------------------------------------------------------------------------------------------
function IsEmail(value){

	if (value == ""){
		return true;
	}	
	
    //Check for an @ symbol:    
    if (value.indexOf("@") == -1){
        return false;
    }
    //Check for more than 1 @ symbol:    
    if (value.indexOf("@") != value.lastIndexOf("@")){
        return false;
    }
    
    //Check for an . symbol after @ symbol:    
    if (value.lastIndexOf(".") < value.indexOf("@")){
        return false;
    }
    
    //Check for an empty " " string:    
    if (value.indexOf(" ") != -1){
        return false;
    }
    
    //Check for invalid symbols:
    if (value.indexOf("*") != -1){
        return false;
    }
    if (value.indexOf("%") != -1){
        return false;
    }
    if (value.indexOf(",") != -1){
        return false;
    }
    if (value.indexOf(";") != -1){
        return false;
    }
    if (value.indexOf("'") != -1){
        return false;
    }
    if (value.indexOf("\"") != -1){
        return false;
    }
    if (value.indexOf(":") != -1){
        return false;
    }
    return true;
}
//--------------------------------------------------------------------------------------------------------------------------------------------------
function CBln(value){ 

    //Handle null values:
    if (value == null) value = "";

	value = Trim(value.toLowerCase());
	return (value == "true"?true:false);
	
}
//--------------------------------------------------------------------------------------------------------------------------------------------------
function CInt(value){ 

	return (value * 1);
	
}
//--------------------------------------------------------------------------------------------------------------------------------------------------
function CDate(value){ 

    if (Trim(value) == "") return null;
    var dateObject = new Date(Trim(value));
	return dateObject;
	
}
//--------------------------------------------------------------------------------------------------------------------------------------------------
function CDec(value){ 

	return (value * 1);
	
}
//--------------------------------------------------------------------------------------------------------------------------------------------------
function GetUniqueCode(){

	var dateObject = new Date();
	var uniqueCode = "" + dateObject.getYear() + dateObject.getMonth() + 
		dateObject.getDate() + dateObject.getHours() +
		dateObject.getMinutes() + dateObject.getSeconds() + dateObject.getMilliseconds();
		
	return uniqueCode;

}
//--------------------------------------------------------------------------------------------------------------------------------------------------
function GetRadioButtonValue(radioButtonListControl){

	var r;
	for (r = 0; r < radioButtonListControl.length; r++){
	
		if (radioButtonListControl[r].checked) return radioButtonListControl[r].value;
	
	}
	
	return "";

}
//--------------------------------------------------------------------------------------------------------------------------------------------------
function SetRadioButtonValue(radioButtonListControl, value){

	var r;
	for (r = 0; r < radioButtonListControl.length; r++){
	
		//First uncheck all:
		radioButtonListControl[r].checked = false;
		
		//Then check if there's a match:
		if (radioButtonListControl[r].value == value){
		
			radioButtonListControl[r].checked = true;
			break;
		
		}
	
	}	

}
//--------------------------------------------------------------------------------------------------------------------------------------------------
function IsNumber(value){

    //Make sure its a string:
    value = value.toString();

	if (value == ""){
		return true;
	}
	
	//Remove the currency symbol if it exists:
	value = Replace(value, "$", "");
	
	//Since this is an IsNumber function, we
	//can expect valid numbers to have "." and "," and "-".  Due to
	//the fact that isNaN() returns false when a value has commas,
	//we remove them all prior to the isNaN() check.  However, if they
	//are in the wrong location, then we immediately return false:
	if (value.indexOf(",") != -1){
		//There is an assumption here that the function that called
		//this function trimmed all leading and trailing spaces off
		//of value: (This must be done!)
		
		//Since a possibility of a decimal point has to be taken
		//into consideration, we check for one decimal point, if there
		//are more than one decimal points, then we immediately return
		//false, we only perform this check if we are checking commas,
		//else the isNaN() function handles the decimal point check
		//internally:
		var tempArray = value.split(".");
		if (tempArray.length > 2){			
			return false;
		}		
		//If there is only one valid decimal point, then
		//we find the length of the string after the decimal
		//point including the decimal point.  This is then
		//subtracted from the value.length value below:
		var tempLength = 0;
		
		if (tempArray.length == 2){
			var tempString = value.substr(value.indexOf("."));
			tempLength = tempString.length;			
		}
		var validateString = value.substr(0,value.length - tempLength);
		
		//Next, we perform basically the same check for the negative symbol:
		tempArray = value.split("-"); 
		if (tempArray.length > 2){	
			return false;
		}	
		
		if (tempArray.length == 2){
			//Make sure the "-" is the first character:
			if (value.charAt(0) != "-"){
				return false;
			}
			else {
				//Remove the "-" from the string to be validated:
				validateString = validateString.substr(1);
			}		
		}
				
		switch (validateString.length){
			//1,000 - 10,000 - 100,000
			case 5: case 6: case 7:  //1,000.00
				//Check to make sure there is only one comma:
				tempArray = validateString.split(",");
				if (tempArray.length > 2){
					return false;
				}
				if (validateString.charAt(validateString.length - 4) != ","){
					return false;
				}
				break;			
			//1,000,000 - 10,000,000 - 100,000,000
			case 9: case 10: case 11:
				//Check to make sure there are only two commas:
				tempArray = validateString.split(",");
				if (tempArray.length > 3){
					return false;
				}
				if (validateString.charAt(validateString.length - 4) != "," || 
						validateString.charAt(validateString.length - 8) != ","){
					return false;
				}
				break;
			//Any other length and the comma is in the wrong location,
			//so we return false:
			default:
				return false;	
		}
	}
	//Remove commas if there are any, since we checked for proper location
	//above and isNaN() will return false if the string has any commas:
	value = value.split(",").join("");	
	
	//Check to see if its a valid number:
	if (isNaN(value)){
		return false;
	}
	//If we made it here, then its a number so we return true:
	return true;
}
//--------------------------------------------------------------------------------------------------------------------------------------------------
function FormatNumber(value, count, showThousandsSeparator, showCurrencySymbol){	
		
	value = value.toString();
		
	if (Trim(value) == "") return "";	

	//Remove any "," or "$" characters:	
	value = Replace(value, ",", "");
	value = Replace(value, "$", "");	
	
	//Next, make sure this is a valid number, as we are not validating here, just formatting:
	if (!IsNumber(value)) return value;

	//Handle null args:
	if (count == null) count = 0;
	if (showThousandsSeparator == null) showThousandsSeparator = true;
	if (showCurrencySymbol == null) showCurrencySymbol = false;

	//Build the multiplier:
	var multiplier = "";
	
	var r;
	for (r = 0; r < count; r++){
	
		multiplier += "0";
	
	}
	
	

	var tempValue = value * (("1" + multiplier) * 1);
	
	if (tempValue.toString() == "NaN")  return value;
	
	var signNumber = 1;
	
	if (tempValue < 0){
	
		signNumber = -1;
		tempValue = tempValue * -1;
	
	}
	
	//Round the value:
	tempValue = Math.round(tempValue).toString();	
	
	//Based on the decimals arg, define what the tempValue should be, start by
	//building the "0" padding string which is calcuated by the following function: 
	//((count - tempValue.length) + 1):
	var zeroCount = ((count - tempValue.length) + 1);
	var zerosString = "";	
	for (r = 0; r < zeroCount; r++){
	
		zerosString += "0";
	
	}
	
	//Add the zeros to the temp value:
	tempValue = zerosString + tempValue;		
	
	tempValue = tempValue.substr(0, tempValue.length - count) + 
						"." + tempValue.substr(tempValue.length - count, count);
	
	if (showThousandsSeparator){
	
		var searchIndex = tempValue.search(/[^-]...\./);
		do {
		
			if (searchIndex >= 0)
				tempValue = tempValue.substr(0, searchIndex + 1) + "," + tempValue.substr(searchIndex + 1);
			
			searchIndex = tempValue.search(/[^,-]...,/);
		
		}  while (searchIndex >= 0);
		
	}	
	
	if ( signNumber == -1 )   tempValue = "-" + tempValue;
	
	if (count == 0) tempValue = tempValue.substr(0, tempValue.length - 1);
	
	if (showCurrencySymbol) tempValue = "$" + tempValue;
	
	//Return the string as a formatted number:
	return tempValue;
	
}	
//--------------------------------------------------------------------------------------------------------------------------------------------------
function FormatPercent(value, count){		

	value = value.toString();

	if (Trim(value) == "") return "";

	//If, its already formatted as a percent, then exit:
	if (value.indexOf("%") != -1) return value;	
	
	//Next,we strip out commas:
	value = Replace(value, ",", "");	
	
	//Next, make sure this is a valid number, as we are not validating here, just formatting:
	if (!IsNumber(value)) return value;	
	
	//Muliply the value by 100%:
	value = value * 100;
	
	//Next, round the number passed to the number of decimals passed:
	value = FormatNumber(value, count, false, false);		
	
	//Add the percent sign:
	return value + "%";	

}
//--------------------------------------------------------------------------------------------------------------------------------------------------
function IsPercent(value){

    //First, trim it down:
    value = Trim(value);
    
    //Next, make sure it has the % sign:
    if (value.indexOf("%") == -1) return false;
    
    //Next, make sure its a number:
    value = Trim(Replace(value, "%", ""));
    if (!IsNumber(value)) return false;
    
    //If we reached this point, then it's a valid percentage:
    return true;    

}
//--------------------------------------------------------------------------------------------------------------------------------------------------
function ConvertPercentToNumber(value){

    var number = ((Trim(Replace(Replace(value, "%", ""), ",", "")) * 1) / 100);
    
    return number;

}
//--------------------------------------------------------------------------------------------------------------------------------------------------
function IsPassword(value){

    value = Trim(value).toLowerCase();
    
    if (value.length < 6 || value.length > 10) return false;

    for (i = 0; i < value.length; i++){
        if (value.substr(i, 1) < "a" || value.substr(i, 1) > "z"){
            switch (value.substr(i, 1)){
                case "0": case "1": case "2": case "3": case "4": case "5":
                case "6": case "7": case "8": case "9":
                    //Continue checking:
                    break;
                default:
                    return false;
            }
        }
    }
    return true;
    
}
//--------------------------------------------------------------------------------------------------------------------------------------------------
function IsAlphaNumeric(value){

    value = Trim(value).toLowerCase();   

    for (i = 0; i < value.length; i++){
        if (value.substr(i, 1) < "a" || value.substr(i, 1) > "z"){
            switch (value.substr(i, 1)){
                case "0": case "1": case "2": case "3": case "4": case "5":
                case "6": case "7": case "8": case "9":
                    //Continue checking:
                    break;
                default:
                    return false;
            }
        }
    }
    return true;
    
}
//--------------------------------------------------------------------------------------------------------------------------------------------------
function IsDateTime(value){

    var dateObject = new Date(value);
	//If the date object does not validate to a number, then
	//the string passed is not a valid date:
	if (isNaN(dateObject)){
		return false;
	}
	
	return true;

}
//--------------------------------------------------------------------------------------------------------------------------------------------------
function IsDate(value){

	if (value == ""){
		return true;
	}
	//Valid dates formats:
	//1.  mm(m)/dd(d)/yy(yyyy) 
	//2.  mm(m)-dd(d)-yy(yyyy) 
	
	//First we make sure the date can validate based
	//on javascript's built in date object:
	var dateObject = new Date(value);
	//If the date object does not validate to a number, then
	//the string passed is not a valid date:
	if (isNaN(dateObject)){
		return false;
	}
	//Since, the date string passed the first validation.  We next
	//check to make sure the string is in on of the two formats listed
	//at the top of this function:
	var dashArray = value.split("-");
	var slashArray = value.split("/");
	var separatorText = "";
	var monthString = "";
	var dayString = "";
	var yearString = "";
	
	//Ensure that the user did not enter mixed seperator symbols:
	if (dashArray.length - 1 == 1 && slashArray.length - 1 == 1){
		return false;
	}
		
	//Dashes:
	if (dashArray.length - 1 == 2){
		//Populate the month, day, and year variables:	
		monthString = "00" + dashArray[0];
		dayString = "00" + dashArray[1];
		yearString = dashArray[2];
	}
	//Slashes:
	else {
		//Populate the month, day, and year variables:	
		monthString = "00" + slashArray[0];
		dayString = "00" + slashArray[1];
		yearString = slashArray[2];		
	}
		
	//Validate the month portion of the date:
	monthString = monthString.substr(monthString.length - 2);
	if (monthString < "01" || monthString > "12"){
		return false;
	}	
	
	//Validate the year portion of the date:
	if (yearString.length != 2 && yearString.length != 4){
		return false;
	}
	//Check for invalid characters in the year string:
	for (i = 0; i < yearString.length; i++){
		if (yearString.charAt(i) < "0" || yearString.charAt(i) > "9"){			
			return false;
		}
	}
		
	//Validate the day portion of the date:
	dayString = dayString.substr(dayString.length - 2);
	switch (monthString){
		case "01": case "03": case "05": case "07": 
		case "08": case "10": case "12":
			if (dayString < "01" || dayString > "31"){				
				return false;
			}	
			break;
		case "04": case "06": case "09": case "11": 
			if (dayString < "01" || dayString > "30"){					
				return false;
			}	
			break;
		case "02":
			//First, we must determine if we are in a leap
			//year or not:
			var isLeapYear = false;
			
			//If yearString is 2 Digits, then we convert it to 
			//the 4 year string:
			if (yearString.length == 2){
				if (yearString >= "00" && yearString <= "80"){
					yearString = "20" + yearString;	
				}
				else {
					yearString = "19" + yearString;
				}
			}
			var yearNumber = yearString * 1;
						
			if ((yearNumber % 4) == 0){
				if ((yearNumber % 100) == 0){	
					if ((yearNumber % 400) == 0){	
						isLeapYear = true;
					}
				}
				else {
					isLeapYear = true;
				}			
			}
			
			if (isLeapYear){				
				//If we are in a leap year:
				if (dayString < "01" || dayString > "29"){					
					return false;
				}		
			}
			else {					
				//If we are not in a leap year:
				if (dayString < "01" || dayString > "28"){					
					return false;
				}	
			}			
			break;
	}			
	
	//If we make it to hear, then it is a valid date:
	return true;		
}
//--------------------------------------------------------------------------------------------------------------------------------------------------
function SetSelectByText(selectControl, text){

    for (var r = 0; r < selectControl.options.length; r++){
    
        if (Trim(selectControl.options[r].text).toLowerCase() == Trim(text).toLowerCase()){
        
            selectControl.options.selectedIndex = r;
            break;
        
        }
    
    }

}
//--------------------------------------------------------------------------------------------------------------------------------------------------
function GetSelectText(selectControl){

    return selectControl.options[selectControl.options.selectedIndex].text;

}
//--------------------------------------------------------------------------------------------------------------------------------------------------
function HtmlEncode(text){

	return text.replace(/&/g, "&amp;").replace(/\"/g, "&quot;").replace(/</g, "&lt;").replace(/>/g, "&gt;");
	
}
//--------------------------------------------------------------------------------------------------------------------------------------------------
function GetDateTime(dateTimeString){

    //The param is optional:
    if (Trim(dateTimeString) == "") dateTimeString = null;

	var dateObject = null;
	if (dateTimeString == null){
	
	    dateObject = new Date();
	    
	}
	else {
	
	    dateObject = new Date(dateTimeString);
	
	}
	
	var dateHours = dateObject.getHours();
	var dateAmPm = "";
	
	if (dateHours > 12){
	
		dateHours = dateHours - 12;
		dateAmPm = "PM";
	
	}
	else {
	
		dateAmPm = "AM";
	
	}
	
	var returnDateTimeString = 
					PadZeros(dateObject.getMonth() + 1) + "/" + 
					PadZeros(dateObject.getDate()) + "/" + 
					dateObject.getFullYear() + " " +
					PadZeros(dateHours) + ":" + 
					PadZeros(dateObject.getMinutes()) + ":" +
					PadZeros(dateObject.getSeconds()) + " " +
					dateAmPm;
		
	return returnDateTimeString;

}
//--------------------------------------------------------------------------------------------------------------------------------------------------
function FormatDateTime(dateTimeString, defaultValue){

    if (defaultValue == null) defaultValue = ""; //Used to set the default value in case the developer wants something other than ""

    //The param is optional:
    if (Trim(dateTimeString) == "") return defaultValue;

	var dateObject = null;
	
	dateObject = new Date(dateTimeString);
	
	var dateHours = dateObject.getHours();
	var dateAmPm = "";
	
	if (dateHours > 12){
	
		dateHours = dateHours - 12;
		dateAmPm = "PM";
	
	}
	else {
	
		dateAmPm = "AM";
	
	}
	
	var returnDateTimeString = 
					PadZeros(dateObject.getMonth() + 1) + "/" + 
					PadZeros(dateObject.getDate()) + "/" + 
					dateObject.getFullYear() + " " +
					PadZeros(dateHours) + ":" + 					
					PadZeros(dateObject.getMinutes()) + " " +
					dateAmPm;
		
	return returnDateTimeString;

}
//--------------------------------------------------------------------------------------------------------------------------------------------------
function PadZeros(value, digitLength){

    if (digitLength == null) digitLength = 2;

    value = "00000000000000000000" + value;
    
    value = Right(value, digitLength);
    
    return value;

}
//--------------------------------------------------------------------------------------------------------------------------------------------------
function Right(value, length){

	return value.substr(value.length - length);
	
}
//--------------------------------------------------------------------------------------------------------------------------------------------------
function Left(value, length){

	return value.substr(0, length);
	
}
//--------------------------------------------------------------------------------------------------------------------------------------------------
function HtmlDecode(s){ 

      var out = ""; 
      if (s==null) return;   

      var l = s.length; 
      for (var i=0; i<l; i++){ 

            var ch = s.charAt(i);    
            if (ch == '&'){ 

				var semicolonIndex = s.indexOf(';', i+1);                   

            if (semicolonIndex > 0){ 

                        var entity = s.substring(i + 1, semicolonIndex); 

                        if (entity.length > 1 && entity.charAt(0) == '#'){ 

                              if (entity.charAt(1) == 'x' || entity.charAt(1) == 'X') 

                                    ch = String.fromCharCode(eval('0'+entity.substring(1))); 

                              else 

                                    ch = String.fromCharCode(eval(entity.substring(1))); 

                        } 

                    else 

                      { 

								switch (entity){ 
									case 'quot': ch = String.fromCharCode(0x0022); break; 
									case 'amp': ch = String.fromCharCode(0x0026); break; 
									case 'lt': ch = String.fromCharCode(0x003c); break; 
									case 'gt': ch = String.fromCharCode(0x003e); break; 
									case 'nbsp': ch = String.fromCharCode(0x00a0); break; 
									case 'iexcl': ch = String.fromCharCode(0x00a1); break; 
									case 'cent': ch = String.fromCharCode(0x00a2); break; 
									case 'pound': ch = String.fromCharCode(0x00a3); break;
									case 'curren': ch = String.fromCharCode(0x00a4); break;
									case 'yen': ch = String.fromCharCode(0x00a5); break; 
									case 'brvbar': ch = String.fromCharCode(0x00a6); break;
									case 'sect': ch = String.fromCharCode(0x00a7); break; 
									case 'uml': ch = String.fromCharCode(0x00a8); break; 
									case 'copy': ch = String.fromCharCode(0x00a9); break;
									case 'ordf': ch = String.fromCharCode(0x00aa); break;
									case 'laquo': ch = String.fromCharCode(0x00ab); break;
									case 'not': ch = String.fromCharCode(0x00ac); break; 
									case 'shy': ch = String.fromCharCode(0x00ad); break; 
									case 'reg': ch = String.fromCharCode(0x00ae); break; 
									case 'macr': ch = String.fromCharCode(0x00af); break;
									case 'deg': ch = String.fromCharCode(0x00b0); break; 
									case 'plusmn': ch = String.fromCharCode(0x00b1); break;
									case 'sup2': ch = String.fromCharCode(0x00b2); break; 
									case 'sup3': ch = String.fromCharCode(0x00b3); break; 
									case 'acute': ch = String.fromCharCode(0x00b4); break;
									case 'micro': ch = String.fromCharCode(0x00b5); break;
									case 'para': ch = String.fromCharCode(0x00b6); break; 
									case 'middot': ch = String.fromCharCode(0x00b7); break;
									case 'cedil': ch = String.fromCharCode(0x00b8); break; 
									case 'sup1': ch = String.fromCharCode(0x00b9); break; 
									case 'ordm': ch = String.fromCharCode(0x00ba); break; 
									case 'raquo': ch = String.fromCharCode(0x00bb); break;
									case 'frac14': ch = String.fromCharCode(0x00bc); break; 
									case 'frac12': ch = String.fromCharCode(0x00bd); break; 
									case 'frac34': ch = String.fromCharCode(0x00be); break; 
									case 'iquest': ch = String.fromCharCode(0x00bf); break; 
									case 'Agrave': ch = String.fromCharCode(0x00c0); break; 
									case 'Aacute': ch = String.fromCharCode(0x00c1); break; 
									case 'Acirc': ch = String.fromCharCode(0x00c2); break; 
									case 'Atilde': ch = String.fromCharCode(0x00c3); break;
									case 'Auml': ch = String.fromCharCode(0x00c4); break; 
									case 'Aring': ch = String.fromCharCode(0x00c5); break;
									case 'AElig': ch = String.fromCharCode(0x00c6); break;
									case 'Ccedil': ch = String.fromCharCode(0x00c7); break;
									case 'Egrave': ch = String.fromCharCode(0x00c8); break;
									case 'Eacute': ch = String.fromCharCode(0x00c9); break;
									case 'Ecirc': ch = String.fromCharCode(0x00ca); break; 
									case 'Euml': ch = String.fromCharCode(0x00cb); break; 
									case 'Igrave': ch = String.fromCharCode(0x00cc); break;
									case 'Iacute': ch = String.fromCharCode(0x00cd); break;
									case 'Icirc': ch = String.fromCharCode(0x00ce ); break;
									case 'Iuml': ch = String.fromCharCode(0x00cf); break; 
									case 'ETH': ch = String.fromCharCode(0x00d0); break; 
									case 'Ntilde': ch = String.fromCharCode(0x00d1); break;
									case 'Ograve': ch = String.fromCharCode(0x00d2); break;
									case 'Oacute': ch = String.fromCharCode(0x00d3); break;
									case 'Ocirc': ch = String.fromCharCode(0x00d4); break; 
									case 'Otilde': ch = String.fromCharCode(0x00d5); break;
									case 'Ouml': ch = String.fromCharCode(0x00d6); break; 
									case 'times': ch = String.fromCharCode(0x00d7); break;
									case 'Oslash': ch = String.fromCharCode(0x00d8); break;
									case 'Ugrave': ch = String.fromCharCode(0x00d9); break;
									case 'Uacute': ch = String.fromCharCode(0x00da); break;
									case 'Ucirc': ch = String.fromCharCode(0x00db); break; 
									case 'Uuml': ch = String.fromCharCode(0x00dc); break; 
									case 'Yacute': ch = String.fromCharCode(0x00dd); break;
									case 'THORN': ch = String.fromCharCode(0x00de); break; 
									case 'szlig': ch = String.fromCharCode(0x00df); break; 
									case 'agrave': ch = String.fromCharCode(0x00e0); break;
									case 'aacute': ch = String.fromCharCode(0x00e1); break;
									case 'acirc': ch = String.fromCharCode(0x00e2); break; 
									case 'atilde': ch = String.fromCharCode(0x00e3); break;
									case 'auml': ch = String.fromCharCode(0x00e4); break; 
									case 'aring': ch = String.fromCharCode(0x00e5); break;
									case 'aelig': ch = String.fromCharCode(0x00e6); break;
									case 'ccedil': ch = String.fromCharCode(0x00e7); break;
									case 'egrave': ch = String.fromCharCode(0x00e8); break;
									case 'eacute': ch = String.fromCharCode(0x00e9); break;
									case 'ecirc': ch = String.fromCharCode(0x00ea); break; 
									case 'euml': ch = String.fromCharCode(0x00eb); break; 
									case 'igrave': ch = String.fromCharCode(0x00ec); break;
									case 'iacute': ch = String.fromCharCode(0x00ed); break;
									case 'icirc': ch = String.fromCharCode(0x00ee); break; 
									case 'iuml': ch = String.fromCharCode(0x00ef); break; 
									case 'eth': ch = String.fromCharCode(0x00f0); break; 
									case 'ntilde': ch = String.fromCharCode(0x00f1); break;
									case 'ograve': ch = String.fromCharCode(0x00f2); break;
									case 'oacute': ch = String.fromCharCode(0x00f3); break;
									case 'ocirc': ch = String.fromCharCode(0x00f4); break; 
									case 'otilde': ch = String.fromCharCode(0x00f5); break; 
									case 'ouml': ch = String.fromCharCode(0x00f6); break; 
									case 'divide': ch = String.fromCharCode(0x00f7); break;
									case 'oslash': ch = String.fromCharCode(0x00f8); break;
									case 'ugrave': ch = String.fromCharCode(0x00f9); break;
									case 'uacute': ch = String.fromCharCode(0x00fa); break;
									case 'ucirc': ch = String.fromCharCode(0x00fb); break; 
									case 'uuml': ch = String.fromCharCode(0x00fc); break; 
									case 'yacute': ch = String.fromCharCode(0x00fd); break;
									case 'thorn': ch = String.fromCharCode(0x00fe); break; 
									case 'yuml': ch = String.fromCharCode(0x00ff); break; 
									case 'OElig': ch = String.fromCharCode(0x0152); break;
									case 'oelig': ch = String.fromCharCode(0x0153); break;
									case 'Scaron': ch = String.fromCharCode(0x0160); break;
									case 'scaron': ch = String.fromCharCode(0x0161); break;
									case 'Yuml': ch = String.fromCharCode(0x0178); break; 
									case 'fnof': ch = String.fromCharCode(0x0192); break; 
									case 'circ': ch = String.fromCharCode(0x02c6); break; 
									case 'tilde': ch = String.fromCharCode(0x02dc); break;
									case 'Alpha': ch = String.fromCharCode(0x0391); break;
									case 'Beta': ch = String.fromCharCode(0x0392); break; 
									case 'Gamma': ch = String.fromCharCode(0x0393); break;
									case 'Delta': ch = String.fromCharCode(0x0394); break;
									case 'Epsilon': ch = String.fromCharCode(0x0395); break;
									case 'Zeta': ch = String.fromCharCode(0x0396); break; 
									case 'Eta': ch = String.fromCharCode(0x0397); break; 
									case 'Theta': ch = String.fromCharCode(0x0398); break;
									case 'Iota': ch = String.fromCharCode(0x0399); break; 
									case 'Kappa': ch = String.fromCharCode(0x039a); break;
									case 'Lambda': ch = String.fromCharCode(0x039b); break;
									case 'Mu': ch = String.fromCharCode(0x039c); break; 
									case 'Nu': ch = String.fromCharCode(0x039d); break; 
									case 'Xi': ch = String.fromCharCode(0x039e); break; 
									case 'Omicron': ch = String.fromCharCode(0x039f); break;
									case 'Pi': ch = String.fromCharCode(0x03a0); break; 
									case ' Rho ': ch = String.fromCharCode(0x03a1); break;
									case 'Sigma': ch = String.fromCharCode(0x03a3); break;
									case 'Tau': ch = String.fromCharCode(0x03a4); break; 
									case 'Upsilon': ch = String.fromCharCode(0x03a5); break;
									case 'Phi': ch = String.fromCharCode(0x03a6); break; 
									case 'Chi': ch = String.fromCharCode(0x03a7); break; 
									case 'Psi': ch = String.fromCharCode(0x03a8); break; 
									case 'Omega': ch = String.fromCharCode(0x03a9); break;
									case 'alpha': ch = String.fromCharCode(0x03b1); break;
									case 'beta': ch = String.fromCharCode(0x03b2); break; 
									case 'gamma': ch = String.fromCharCode(0x03b3); break;
									case 'delta': ch = String.fromCharCode(0x03b4); break;
									case 'epsilon': ch = String.fromCharCode(0x03b5); break;
									case 'zeta': ch = String.fromCharCode(0x03b6); break; 
									case 'eta': ch = String.fromCharCode(0x03b7); break; 
									case 'theta': ch = String.fromCharCode(0x03b8); break;
									case 'iota': ch = String.fromCharCode(0x03b9); break; 
									case 'kappa': ch = String.fromCharCode(0x03ba); break;
									case 'lambda': ch = String.fromCharCode(0x03bb); break;
									case 'mu': ch = String.fromCharCode(0x03bc); break; 
									case 'nu': ch = String.fromCharCode(0x03bd); break; 
									case 'xi': ch = String.fromCharCode(0x03be); break; 
									case 'omicron': ch = String.fromCharCode(0x03bf); break;
									case 'pi': ch = String.fromCharCode(0x03c0); break; 
									case 'rho': ch = String.fromCharCode(0x03c1); break; 
									case 'sigmaf': ch = String.fromCharCode(0x03c2); break;
									case 'sigma': ch = String.fromCharCode(0x03c3); break; 
									case 'tau': ch = String.fromCharCode(0x03c4); break; 
									case 'upsilon': ch = String.fromCharCode(0x03c5); break;
									case 'phi': ch = String.fromCharCode(0x03c6); break; 
									case 'chi': ch = String.fromCharCode(0x03c7); break; 
									case 'psi': ch = String.fromCharCode(0x03c8); break; 
									case 'omega': ch = String.fromCharCode(0x03c9); break;
									case 'thetasym': ch = String.fromCharCode(0x03d1); break;
									case 'upsih': ch = String.fromCharCode(0x03d2); break; 
									case 'piv': ch = String.fromCharCode(0x03d6); break; 
									case 'ensp': ch = String.fromCharCode(0x2002); break;
									case 'emsp': ch = String.fromCharCode(0x2003); break;
									case 'thinsp': ch = String.fromCharCode(0x2009); break;
									case 'zwnj': ch = String.fromCharCode(0x200c); break; 
									case 'zwj': ch = String.fromCharCode(0x200d); break; 
									case 'lrm': ch = String.fromCharCode(0x200e); break; 
									case 'rlm': ch = String.fromCharCode(0x200f); break; 
									case 'ndash': ch = String.fromCharCode(0x2013); break;
									case 'mdash': ch = String.fromCharCode(0x2014); break;
									case 'lsquo': ch = String.fromCharCode(0x2018); break;
									case 'rsquo': ch = String.fromCharCode(0x2019); break;
									case 'sbquo': ch = String.fromCharCode(0x201a); break;
									case 'ldquo': ch = String.fromCharCode(0x201c); break;
									case 'rdquo': ch = String.fromCharCode(0x201d); break;
									case 'bdquo': ch = String.fromCharCode(0x201e); break;
									case 'dagger': ch = String.fromCharCode(0x2020); break;
									case 'Dagger': ch = String.fromCharCode(0x2021); break;
									case 'bull': ch = String.fromCharCode(0x2022); break; 
									case 'hellip': ch = String.fromCharCode(0x2026); break;
									case 'permil': ch = String.fromCharCode(0x2030); break;
									case 'prime': ch = String.fromCharCode(0x2032); break; 
									case 'Prime': ch = String.fromCharCode(0x2033); break; 
									case 'lsaquo': ch = String.fromCharCode(0x2039); break;
									case 'rsaquo': ch = String.fromCharCode(0x203a); break;
									case 'oline': ch = String.fromCharCode(0x203e); break; 
									case 'frasl': ch = String.fromCharCode(0x2044); break; 
									case 'euro': ch = String.fromCharCode(0x20ac); break; 
									case 'image': ch = String.fromCharCode(0x2111); break;
									case 'weierp': ch = String.fromCharCode(0x2118); break;
									case 'real': ch = String.fromCharCode(0x211c); break; 
									case 'trade': ch = String.fromCharCode(0x2122); break;
									case 'alefsym': ch = String.fromCharCode(0x2135); break; 
									case 'larr': ch = String.fromCharCode(0x2190); break; 
									case 'uarr': ch = String.fromCharCode(0x2191); break; 
									case 'rarr': ch = String.fromCharCode(0x2192); break; 
									case 'darr': ch = String.fromCharCode(0x2193); break; 
									case 'harr': ch = String.fromCharCode(0x2194); break; 
									case 'crarr': ch = String.fromCharCode(0x21b5); break; 
									case 'lArr': ch = String.fromCharCode(0x21d0); break; 
									case 'uArr': ch = String.fromCharCode(0x21d1); break; 
									case 'rArr': ch = String.fromCharCode(0x21d2); break; 
									case 'dArr': ch = String.fromCharCode(0x21d3); break; 
									case 'hArr': ch = String.fromCharCode(0x21d4); break; 
									case 'forall': ch = String.fromCharCode(0x2200); break;
									case 'part': ch = String.fromCharCode(0x2202); break; 
									case 'exist': ch = String.fromCharCode(0x2203); break;
									case 'empty': ch = String.fromCharCode(0x2205); break;
									case 'nabla': ch = String.fromCharCode(0x2207); break;
									case 'isin': ch = String.fromCharCode(0x2208); break; 
									case 'notin': ch = String.fromCharCode(0x2209); break;
									case 'ni': ch = String.fromCharCode(0x220b); break; 
									case 'prod': ch = String.fromCharCode(0x220f); break;
									case 'sum': ch = String.fromCharCode(0x2211); break; 
									case 'minus': ch = String.fromCharCode(0x2212); break;
									case 'lowast': ch = String.fromCharCode(0x2217); break;
									case 'radic': ch = String.fromCharCode(0x221a); break; 
									case 'prop': ch = String.fromCharCode(0x221d); break; 
									case 'infin': ch = String.fromCharCode(0x221e); break;
									case 'ang': ch = String.fromCharCode(0x2220); break; 
									case 'and': ch = String.fromCharCode(0x2227); break; 
									case 'or': ch = String.fromCharCode(0x2228); break; 
									case 'cap': ch = String.fromCharCode(0x2229); break;
									case 'cup': ch = String.fromCharCode(0x222a); break;
									case 'int': ch = String.fromCharCode(0x222b); break;
									case 'there4': ch = String.fromCharCode(0x2234); break;
									case 'sim': ch = String.fromCharCode(0x223c); break; 
									case 'cong': ch = String.fromCharCode(0x2245); break;
									case 'asymp': ch = String.fromCharCode(0x2248); break;
									case 'ne': ch = String.fromCharCode(0x2260); break; 
									case 'equiv': ch = String.fromCharCode(0x2261); break;
									case 'le': ch = String.fromCharCode(0x2264); break; 
									case 'ge': ch = String.fromCharCode(0x2265); break; 
									case 'sub': ch = String.fromCharCode(0x2282); break;
									case 'sup': ch = String.fromCharCode(0x2283); break;
									case 'nsub': ch = String.fromCharCode(0x2284); break;
									case 'sube': ch = String.fromCharCode(0x2286); break;
									case 'supe': ch = String.fromCharCode(0x2287); break;
									case 'oplus': ch = String.fromCharCode(0x2295); break;
									case 'otimes': ch = String.fromCharCode(0x2297); break;
									case 'perp': ch = String.fromCharCode(0x22a5); break; 
									case 'sdot': ch = String.fromCharCode(0x22c5); break; 
									case 'lceil': ch = String.fromCharCode(0x2308); break;
									case 'rceil': ch = String.fromCharCode(0x2309); break;
									case 'lfloor': ch = String.fromCharCode(0x230a); break; 
									case 'rfloor': ch = String.fromCharCode(0x230b); break; 
									case 'lang': ch = String.fromCharCode(0x2329); break; 
									case 'rang': ch = String.fromCharCode(0x232a); break; 
									case 'loz': ch = String.fromCharCode(0x25ca); break; 
									case 'spades': ch = String.fromCharCode(0x2660); break;
									case 'clubs': ch = String.fromCharCode(0x2663); break; 
									case 'hearts': ch = String.fromCharCode(0x2665); break;
									case 'diams': ch = String.fromCharCode(0x2666); break; 
									default: ch = ''; break; 

                              } 

                        } 

                        i = semicolonIndex; 

                  } 

            } 

            out += ch; 

      } 

      return out; 

} 
//--------------------------------------------------------------------------------------------------------------------------------------------------

