/* 
	File name: tracking.cache.js
	Description: This is used on tracking home page and tracking input page, helps with ajax calls and auto track
	Revision	: $Revision: 1.40 $
	Created by: Nagesh Arra
	Modified by	: $Author: xhc6qdb $ $Date: 2009/06/23 17:50:14 $
	Checkout Tag	: $Name:  $

	Copyright 2009 United Parcel Service of America, Inc. All Rights Reserved.
*/


(function() {


		/**
		 * Setting a client side cookie	
		 */
        function setCookie(name, value, expires) {
            //set time, it's in milliseconds
            var today = new Date();           
            if (expires) {
            	expires = expires * 1000 * 60; // minutes converted to milliseconds
            }
            var expires_date = new Date(today.getTime() + (expires));
            document.cookie = name + "=" + escape(value) + ((expires) ? ";expires=" + expires_date.toGMTString() : "");
        }

		/**
		 * Reading a client side cookie	
		 */
        function getCookie(cName) {
            //split cookie into name/value pairs
            var cookies = document.cookie.split( ';' );
            var cValue = '';

            for(i=0; i < cookies.length; i++) {
                //split each name=value pair
                var temp_cookie = cookies[i].split('=');

                //trim left/right whitespace
                var cookie_name = temp_cookie[0].replace(/^\s+|\s+$/g, '');

                if (cookie_name == cName) {
                    if (temp_cookie.length > 1) {
                        cValue = unescape(temp_cookie[1].replace(/^\s+|\s+$/g, ''));
                    }
                    break;
                }
            }
            return cValue;
        }
        
		/**
		 * This method will get called when tracking accordion is opened
		 * registered for the cclamp events during init.	
		 */
        function openCalled(event, data) {
        	if(data.id=="Tracking") {
	        	if(autoTrackEnabled) {
		            var val = getCookie("auto-track");	            
		            //alert("open called"+val);
		            if(!val) {
		                $("#trk-grid-body-0").html(loadingText); 
		                getUpdate();
		            }
		        }
		    }
        }

		/**
		 * This method will get an updated recent tracks list, asynchronously
		 */		
        function getUpdate() {
        	if(isRecentTracksSuppressed) { return; }
        	
            $.ajax({
               type: "GET",
               url: url("/hptrack/updateRecentTracks?loc="+localeStr),
               cache: false,
               dataType: "html", 
               success: function(msg){
                 //alert( "Update received: " + msg );
                 $("#trk-grid-body-0").replaceWith(msg);
                 $("#trk-grid-hdr-checkAll-0").css("visibility","visible");
                 $("#trk-grid-hdr-checkAll-0").attr("checked",false);
                 //Set cookie again - resetting the auto track time period counter
                 if(autoTrackEnabled) {
                 	setCookie("auto-track", "false", autoTrackTimePeriod);
                 }
               },
               error: function(req, textStatus, errorThrown) {               
                 //alert( "Error: " + req+"\n"+textStatus+"\n"+errorThrown );
                 document.getElementById("trk-grid-body-0").innerHTML = textStatus + " " + errorThrown;
               }
             });
        }
        
		/**
		 * This method will append protocol and host to the supplied path
		 * Path have to be starting with '/'	
		 */
        function url(path) {
            return window.location.protocol +"//"+ window.location.host+ path;
        }
        
        var isRecentTracksSuppressed = false;
		/**
		 * This method will initialize the tracking module on home page 
		 */        
        function initModule(showCheckAll, recentTracksSuppressed) {
        	//alert("home page tracking app -- init");
        	isRecentTracksSuppressed = recentTracksSuppressed;
    	    $("#reqTxtInst-0").css("visibility","hidden");
	        $("#reqTxtInst-0").css("position","absolute");

        	if(!isRecentTracksSuppressed) {
	            if(showCheckAll) {
	            	//To make Non Javascript browsers not have this "select all" check box
					$("#trk-grid-hdr-checkAll-0").css("visibility","visible");
				}

	        	//To make Non Javascript browsers not have this column resizer
				$("#trk-grid-0_resizer-1").css("visibility","visible");
	        
		        //Converting the percent widths to pixes widths
		        window.TrackingGrid.setAbsoluteWidth(); 
		        //alert("home page tracking app -- set absolute width -- done");       
		        //Position the resizer based on the narrow/wide layout, uses percentage to get pixel value
		        window.TrackingGrid.adjustResizer();
		        //Adding mouse listeners for mousemove and mouseup events
		        window.TrackingGrid.addListeners();
		        //Binding mouse move event for grid root
		        window.TrackingGrid.bindEvents();
	        
		        //Set Cookie for auto track time
		        if(autoTrackEnabled) {
		        	setCookie("auto-track", "false", autoTrackTimePeriod);
			        //register for RIF-Panel-Expanded event (Tracking Launchlet Opened)        
			        window.com_ups_cclamp.regCusEvtLis("RIF-Panel-Expanded", openCalled);
		        } 
	        
		        //handling back button
		        selectAllTrackingNumbers(false);
		        
			} // End of !isRecentTracksSuppressed           	    		
        }
        
		var enter = "";
		
		/**
		 * Remove text from input text area on home page tracking module
		 */
	    function removeInstructionText() {    
	        //alert("called"+val+" e:"+enter);
	        if(enter=="<<init>>") {
	            $("#trackNums").attr("value","");
	            enter = "";
	        }
	    }
	    
	    /**
	     * Add instruction text to the input text area on the home page tracking module
	     */
	    function addInstructionText(text) {
	    	text = unescape(text);
           	$("#trackNums").attr("value",text);
            enter = "<<init>>";
	    }    
        
        /**
         *  Validate the input entered in homepage tracking module.
         *  	if the tracking numbers entered are valid, then show the results in thick box (modal window)
         *		if the tracking numbers entered are invalid, then redirect the user to web tracking input page
         * 		Return TRUE of this method automatically submits the form with default action in form tag
         */
	    function validateAndSubmit() {
	    	var canSubmit = validate();
	    	//alert("canSubmit " + canSubmit);
	    	if(canSubmit) {
	    		//send AJAX request to validate
	    		var isValid = isValidRequestSynch(); //AJAX request
	    		if(isValid=="true") {
	    			showThickBoxWithResults();
	    		}else {
	    			//alert("return true");
	    			return true;
	    		}
	    	}
	    	//alert("return false");
	    	return false;
	    }
	    
	    /**
	     *	This method sends an AJAX request to validate input and return true or false
	     */
	    function isValidRequestSynch() {
			var trkNums = escape($("#trackNums").attr("value"));
	    	var historyCBs = getSelectedTrackingNumbersInGrid();
	    	var params = "?trackNums="+trkNums+historyCBs+"&track.x=track&loc="+localeStr+"&Requester=UPSHome"; 
            var isValid = $.ajax({
               type: "GET",
               url: url("/hptrack/hptrackValidate")+params,
               async: false,   
               timeout: 3000,            
               error: function(req, textStatus, errorThrown) {  
                 //alert( "Error in validation: " + req+"\n"+textStatus+"\n"+errorThrown );
                 return false;
               }
             }).responseText;
             isValid = $.trim(isValid);
             return isValid;
	    }
	    
	    /**
	     * This method creates a string with all the selected numbers from tracking history showed on home page
	     */
	    function getSelectedTrackingNumbersInGrid() {
	    	var queryString = "";
	        $("input.trk-grid-cell-check").each( function(i,obj){
	    		if(obj.checked) {
	    			queryString += "&"+obj.name+"="+obj.value;
	    		}
	        });
	        return queryString; 
	    }
	    
	    /**
	     * This opens the results in a modal window (thick box)
	     */
	    function showThickBoxWithResults(){
	    	var eventData = new Object();
	    	var trkNums = escape($("#trackNums").attr("value"));
	    	var historyCBs = getSelectedTrackingNumbersInGrid();
	    	eventData.url = "/hptrack/trackDlgRequest?HTMLVersion=5.0&loc="+localeStr+"&Requester=UPSHome&track.x=Track&trackNums="+trkNums+historyCBs+"&WBPM_lid="+MetaDCSextValue+"_pnl_trk";
	    	eventData.hideTitleBar = true;
			eventData.url += "&modal=true&TB_iframe=true&height=600&width=800";

			//window.com_ups_cclamp.regCusEvtLis("enableCClampEvt", closeDialog);
			window.com_ups_cclamp.disDisableCClampEvt(eventData);

			return false;
	    }
	    
	    /**
	     * This will get called when close 'x' icon clicked on modal or when modal closed by any other action like clicking on main screen
	     */
	    function closeDialog() {
			//alert("Close dialog event called from parent window");
			//if(autoTrackEnabled) { //Commented this as per TT 28768 
				if(isLoggedIn) {
					$("#trk-grid-body-0").html(loadingText);
					getUpdate();
				}								
			//}
			if(!isRecentTracksSuppressed && isLoggedIn) {
				$("#trackNums").attr("value","");
			}
		}
	    
	    /**
	     * This method checks if there is any number entered in text area on home page tracking module
	     */
	    function isNumberEnteredInTextArea() {
	    	//Instruction text still present
	    	if(enter=="<<init>>") {
	    		return false;
	    	}
	    	
	    	//Entered space or nothing
			var trackNumsTxt = $("#trackNums").attr("value");
	    	trackNumsTxt = $.trim(trackNumsTxt);
	    	if(!trackNumsTxt || trackNumsTxt.length==0) {
	    		return false;
	    	}
	    	
	    	//Something entered
	    	return true;
	    }
	    
	    /**
	     * This validates if there is any data entered in text area or any number selected from tracking history grid
	     * Also checks if the entered numbers and selected numbers together more than 25.
	     */
	    function validate() {	
	    	//alert("validate called");
	    	var isNumberSelectedInGrid = $("[@class='trk-grid-cell-check'][@checked]").size() != 0; 
	    	if(!isNumberEnteredInTextArea() && !isNumberSelectedInGrid) {
	    		$("#trk-errorMsg").css("visibility","visible").css("position","relative").html(">>> "+trkErr1);
	    		return false;
	    	}else if(tooManyTracks()){	    		
	    		$("#trk-errorMsg").css("visibility","visible").css("position","relative").html(">>> " +trkErr2);
	    		return false;	    		
	    	}else {
	    		$("#trk-errorMsg").css("visibility","hidden").css("position","absolute");
	    	}
	    	return true;
	    } 
	    
	    /**
	     * Single Number Selected in tracking history grid
	     */
	    function selectSingleTrackingNumber(selected) {
	    	//make 'select all' - non checked
	    	var totalNumbers = $("input.trk-grid-cell-check").size();
	    	var selectedNumbers = $("[@class='trk-grid-cell-check'][@checked]").size(); 
	    	if(selectedNumbers<totalNumbers) {
	    		$("#trk-grid-hdr-checkAll-0").attr("checked",false);
	    	}
	    	
	    	//make 'select all' - checked
	    	if(selectedNumbers==totalNumbers) {
	    		$("#trk-grid-hdr-checkAll-0").attr("checked",true);
	    	}
	    	
	    	removeInstructionText();
	    	
	    	//alert("select single"+selectedNumbers);
	    }
	    
	    /**
	     * Select all tracking numbers in history grid
	     */
	    function selectAllTrackingNumbers(checked) {
	    	//alert("Select all called");
	        $("input.trk-grid-cell-check").each( function(i,obj){
	            obj.checked = checked
	        });
	        //alert("size:"+$("input.trk-grid-cell-check").size());
	        
	        removeInstructionText();
	        //alert("select all ");
	    }
	
		/**
		 * Checks if there are more than 25 tracking numbers all together in text area and grid selection
		 */
	    function tooManyTracks() {
	    	var enteredNumbers = calculateEnteredNumbers();
	    	var numbersSelectedInGrid = $("[@class='trk-grid-cell-check'][@checked]").size();
	    	//alert("total: "+(enteredNumbers+numbersSelectedInGrid));
	    	if(enteredNumbers+numbersSelectedInGrid > 25) {
	    		return true;
	    	}
	    	return false;
	    }
	    
	    /**
	     * Calculates tracking numbers entered in text area
	     */
	    function calculateEnteredNumbers() {
	    	var trackNumsTxt = $("#trackNums").attr("value");
	    	trackNumsTxt = $.trim(trackNumsTxt);
	    	if(trackNumsTxt && trackNumsTxt.length>0) {
	            //Using only \n instead of \r\n because Fire Fox returns only \n instead of \r\n
	            return trackNumsTxt.split("\n").length;
		    }
		    return 0;
	    }
	    
	    /**
	     * trkErr1 is used to show "Enter a tracking number" type of message when 
	     * no tracking number entered or selected and clicked on Track
	     */
        var trkErr1 = "";

		/**
	     * trkErr1 is used to show "Too many tracks, you can track 25 only" type of message when 
	     * user enter more than 25 tracking numbers and clicked on Track
	     */
	     var trkErr2 = ""; 
        
        /**
         * Set the error text from JSP so that can be shown using Java Script 
         */
	    function setErrorText(errTxt1, errTxt2) {
	    	trkErr1 = errTxt1;
	    	trkErr2 = errTxt2;
	    }
	    
	    /**
	     * trkErr3 is to show system not available at this time.
	     */
	    var trkErr3 = "";	    
	    function setErrorMessage3(errTxt3) {
	    	trkErr3 = errTxt3;
	    }
	    
	    var autoTrackEnabled = false; //default
	    
	    /**
	     * Set the auto track enabled or not, this will be set to false if user not logged in or auto track disabled in properties file 
	     */
	    function setAutoTrackEnabled(isEnabled) {
	    	autoTrackEnabled = isEnabled;
	    }	    
	    
	    var autoTrackTimePeriod = 120; //default
	    
	    /**
	     * Set the auto track time period from JSP so that we can use for AJAX based auto update 
	     */
	    function setAutoTrackTimeperiod(timePeriod) {
	    	autoTrackTimePeriod = timePeriod;
	    }
	    
	    var localeStr = "en_US"; //default
	    
	    /**
	     * Set locale string
	     */
	    function setLocaleString(s) {
	    	localeStr = s;
	    }
	    
	    function getLocaleString() {
	    	return localeStr; 
	    }
	    
	    
		///////////////// Input Page Specific /////////////////

		/**
		 *	Adding instruction text to text area of tracking input page 
		 */
	    function addInstructionTextForInputPage(enter25Text) {
	    	enter25Text = unescape(enter25Text);
	    	//alert("addInstructionTextForInputPage called");
	        var numberList = $("#trackNums").attr("value");
	        if(!numberList || numberList.length==0) {
	        	//alert("addInstructionTextForInputPage adding text");
	        	$("#trackNums").attr("value", enter25Text);
	        	enter = "<<init>>";
	        }
	    }
		/**
		 * Inline Edit - show text field when clicked on label
		 */
		function showInput(labelId, inputDivId, textBoxId) { 
			$(inputDivId).css("visibility", "visible");				
			$(labelId).css("visibility", "hidden");
			setTimeout("Tracking.select('"+textBoxId+"')",10);
		}
		
		function select(textBoxId) {
	        document.getElementById(textBoxId).focus();
	        document.getElementById(textBoxId).select();
		}

		/**
		 * Inline Edit - set text to label when focus lost from text field
		 */		
		function setText(labelId, inputId, desc, trackingNumber) {
			//alert(labelId + " "+ inputId+" "+desc);
			//if(!desc) { desc = "Enter description"; }
			callAJAXSaveDescription(labelId, inputId, trackingNumber, desc);
		}
		
		/**
		 * Making an AJAX call to save the description
		 */		
		function callAJAXSaveDescription(labelId, inputId, trackingNumber, desc) {
			var params = "trackingNumber="+trackingNumber+"&"+trackingNumber+"="+encodeURIComponent(desc)+"&desc_save.x=10&Requester=WebTracking";
            var response = makeAJAXCall(params);
            var ajaxResp;			
			if(response) {
                 //alert( "Description saved: \n" + response );
                 response = $.trim(response);
                 try {
                 	ajaxResp = eval('(' + response + ')');
                 }catch(er) {
                 	//do nothing
                 }
                 if(ajaxResp && ajaxResp.status && ajaxResp.status=="AJAXCall_SUCCESS") {
                 	setTextNow(labelId, inputId, desc);
                 	if(isErrorShown) {
                 		hideErrorOnInputPage();
                 	}
                 }else{
                 	//alert(response);
                 	if(ajaxResp && ajaxResp.message) {
                 		showErrorOnInputPage(ajaxResp.message);
                 	}else {
                 		showErrorOnInputPage(trkErr3);
                 	}
                 }
            }      
		}
		
		/**
		 * Setting description to grid cell
		 */	
		function setTextNow(labelId, inputId, desc) {                
			var vMiddleClass = getLocaleString()=="he_IL" ? "vMiddleHE_IL" : "vMiddle";
            document.getElementById(labelId).innerHTML = '<div class="'+vMiddleClass+'">'+desc+'</div>';
			$(labelId).css("visibility", "visible");
			$(inputId).css("visibility", "hidden");
		}

		/**
		 * Handling enter key on description text fields
		 */	
        function keyDown(event, inputId, labelId, desc, trackingNumber) {
        	//alert("keyDown called "+event.keyCode);
            if(event.keyCode==13) {
                setText(inputId, labelId, desc, trackingNumber);
                return false;
            }
            return true;
        }
	
		/**
		 *	Make an AJAX call for description save, save number, discard number functionalities 
		 */
		function makeAJAXCall(params) {
			return $.ajax({
               type: "POST",
               url: url("/hptrack/ajaxSave?loc="+localeStr+"&Requester=WebTracking"),
               data: params,
               async: false, 
               timeout: 5000,
               error: function(req, textStatus, errorThrown) { 
                 //alert( "Error: " + req+"\n"+textStatus+"\n"+errorThrown );
               }
             }).responseText;
        }
	
		/**
		 * Saving tracking number saved status to "saved"
		 */		
		function saveNumber(trkNum, rowId) {
			$("#discardNumberStatusImage-"+rowId).css("visibility","hidden");
			$("#discardNumberStatusImage-"+rowId).css("display","none"); 			
			saveOrDiscardNumber(trkNum, rowId, true);
		}

		/**
		 * Saving tracking number saved status to "discard"
		 */		
		function discardNumber(trkNum, rowId) {
			$("#saveNumberStatusImage-"+rowId).css("visibility","hidden");
			$("#saveNumberStatusImage-"+rowId).css("display","none"); 
			saveOrDiscardNumber(trkNum, rowId, false);
		}

		/**
		 * Saving tracking number saved status to "saved" or "discard", using AJAX call
		 */		
		function saveOrDiscardNumber(trkNum, rowId, isSave) {
			var action = isSave ? "&save_number.x=10" : "&discard_number.x=10&Requester=WebTracking"; 		
			//alert("Save Number clicked"+trkNum);
			var params = "trackingNumber="+trkNum+action;
            var response = makeAJAXCall(params);
            var ajaxResp;				

			if(response) {
                 //alert( "Tracking Number Saved or Discarded: ##" + $.trim(response) +"##");
                 response = $.trim(response);
				 try {
                 	ajaxResp = eval('(' + response + ')');
                 }catch(er) {
                 	//do nothing
                 }
                 if(ajaxResp && ajaxResp.status && ajaxResp.status=="AJAXCall_SUCCESS") {
                 	changeSaveNumberStatusImage(rowId, isSave);
                 	if(isErrorShown) {
                 		hideErrorOnInputPage();
                 	}
                 }else{
                 	//alert(response);
					if(isSave) {
						$("#discardNumberStatusImage-"+rowId).css("visibility","visible");
						$("#discardNumberStatusImage-"+rowId).css("display","inline"); 		 			
					}else {
						$("#saveNumberStatusImage-"+rowId).css("visibility","visible"); 	
						$("#saveNumberStatusImage-"+rowId).css("display","inline");		
					}
					if(ajaxResp && ajaxResp.message) {
                 		showErrorOnInputPage(ajaxResp.message, ajaxResp.type);
                 	}else {
                 		showErrorOnInputPage(trkErr3);
                 	}
                 }
            }      
		}
		

		/**
		 * Handling image toggle for save / discard
		 */	
		function changeSaveNumberStatusImage(rowId, isSave) {
			//alert("changing image");
			if(isSave) {
				$("#saveNumberStatusImage-"+rowId).css("visibility","visible"); 	
				$("#saveNumberStatusImage-"+rowId).css("display","inline");		
			}else {
				$("#discardNumberStatusImage-"+rowId).css("visibility","visible");
				$("#discardNumberStatusImage-"+rowId).css("display","inline"); 		 			
			}
			//alert("changed image"+ $("#"+imageId).attr("src"));
		}
		
		var loadingText = "";
		
		function setLoadingText(loadText) {
			loadingText = loadText;
		}
		
		function initInputPage(showCheckAll, showGrid) {		
            if(showCheckAll && showGrid) {
				//make check box for "select all" visible
				$("#trk-grid-hdr-checkAll-0").css("visibility","visible");
			}
			
			//make "enter 25 ..." text below text area invisible as text added inside text area
		    $("#reqTxtInst-0").css("visibility","hidden");
	        $("#reqTxtInst-0").css("position","absolute");

			if(showGrid) {
				//make column resizers visible
				$("#trk-grid-0_resizer-1").css("visibility","visible");
				$("#trk-grid-0_resizer-2").css("visibility","visible");
			
				//Hide text description fields
		        $("div.trk-grid-desc-text-edit").each( function(i,obj){
		    		$(obj).css("visibility","hidden");
		        });
	
		        //Adding mouse listeners for mousemove and mouseup events
		        window.TrackingGrid.addListeners();
		        
		        //Binding mouse move event for grid root
		        window.TrackingGrid.bindEvents();
		        
			}
		}
		
		var isSaveLimitErrorShown = false;
		
		function setSaveLimitErrorShown(isShown) {
			isSaveLimitErrorShown = isShown;
		} 
		
		var isErrorShown = false;
	    function showErrorOnInputPage(msg, errorType) {
	    	// Fixing TT 28974 -- Double save error on input page
	    	if(errorType=="err_more_than_50" && isSaveLimitErrorShown) {
	    		//do nothing
	    		isErrorShown = true;
	    	}else {
	    		$("#trk-errorMsg").css("visibility","visible");
	    		$("#trk-errorMsg").css("position","relative");
	    		$("#trk-errorMsg").html(">>> "+msg+"<BR>");
	    		window.scrollTo(0,$("#trk-errorMsg"));
	    		isErrorShown = true;
	    	}
		}
		
		function hideErrorOnInputPage() {
    		$("#trk-errorMsg").css("visibility","hidden");
    		$("#trk-errorMsg").css("position","absolute");
    		$("#trk-errorMsg").html("");
    		isErrorShown = false;
    		if(isSaveLimitErrorShown) {
    			isSaveLimitErrorShown = false;
	    		$("#err_more_than_50").css("visibility","hidden");
	    		$("#err_more_than_50").css("position","absolute");
    		}
		}
		
		function removeTracks(msg) {
			var numbersSelectedInGrid = $("[@class='trk-grid-cell-check'][@checked]").size();
			if(numbersSelectedInGrid<=0) {
				return true; //show them error message with confirm
			}		
            var agree=confirm(msg);
            if (agree) {
            	removeInstructionText();
                return true;
            } else {
                return false;
            }
		}		
		
		var MetaDCSextValue = "";
		function setMetaDCSextValue(tagValue) {
			MetaDCSextValue = tagValue;
		}
		
		var isLoggedIn = false;
		function setLoggedIn(loggedIn) {
			isLoggedIn = loggedIn;
		}
		
		//Public Declarations
        var Tracking = window.Tracking = function() {};
                
        //Tracking.getCookie = getCookie;        
        Tracking.initModule = initModule;
		Tracking.removeInstructionText = removeInstructionText;
		Tracking.addInstructionText = addInstructionText;
        Tracking.validateAndSubmit = validateAndSubmit;
    	Tracking.selectAllTrackingNumbers = selectAllTrackingNumbers;
    	Tracking.selectSingleTrackingNumber = selectSingleTrackingNumber;
    	Tracking.setErrorText = setErrorText;
    	Tracking.setAutoTrackTimeperiod = setAutoTrackTimeperiod;
    	Tracking.setAutoTrackEnabled = setAutoTrackEnabled;
    	Tracking.setLocaleString = setLocaleString;
    	Tracking.addInstructionTextForInputPage = addInstructionTextForInputPage;
    	Tracking.showInput = showInput;
    	Tracking.setText = setText;
    	Tracking.keyDown = keyDown;
    	Tracking.saveNumber = saveNumber;
    	Tracking.discardNumber = discardNumber;
    	Tracking.initInputPage = initInputPage;
    	Tracking.removeTracks = removeTracks;
    	Tracking.closeDialog = closeDialog;
    	Tracking.setLoadingText = setLoadingText;
    	Tracking.getLocaleString = getLocaleString;
    	Tracking.select = select;
    	Tracking.setErrorMessage3 = setErrorMessage3;
    	Tracking.setMetaDCSextValue = setMetaDCSextValue;
    	Tracking.setLoggedIn = setLoggedIn;
    	Tracking.setSaveLimitErrorShown = setSaveLimitErrorShown;
})();
