function N2NAjaxHitUrl (vsObjectId, vsUrl, i_waitTime) {

	var m_sObjectId      = new String(vsObjectId);
	var m_iErrorWaitTime = i_waitTime * 1000;	//5 seconds
	//var m_nRefreshRate   = new Number(3000);
	var m_nRefreshRate   = new Number(60000);
	
	var m_sUrl   = new String(vsUrl);
	var m_iTimer = new Number(0);	
	
	var m_xXmlHttp2;

	function setXmlObj(vs_sXmlObj){	m_sXmlObj = vs_sXmlObj;}
	this.setXmlObj = setXmlObj;
	
	function getXmlObj(){ return m_sXmlObj; }		
	this.getXmlObj = getXmlObj;	
	
	function setXmlHttp(vs_xXmlHttp){ m_xXmlHttp2 = vs_xXmlHttp; }
	this.setXmlHttp = setXmlHttp;
	
	function getXmlHttp(){ return m_xXmlHttp2; }
	this.getXmlHttp = getXmlHttp;	

	function init() {	
		
		var bReq = loadXml();
		
		if(bReq) {	
			loadData();
		} else {
			window.status("init:Critical Error:xXmlHttp not exist");
		}		
	}
	this.init = init;

	function loadXml(){
	
		var xXmlHttp;
		var bReq = new Boolean(false);
		var msXml = new Array(
				"MSXML2.XMLHTTP.5.0",
				"MSXML2.XMLHTTP.4.0",
				"MSXML2.XMLHTTP.3.0",
				"MSXML2.XMLHTTP",
				"Microsoft.XMLHTTP");
			
		if(window.ActiveXObject){
			for(var i=0; i<msXml.length; i++){
				try{
					xXmlHttp = new ActiveXObject(msXml[i]);							
					setXmlObj(new String(msXml[i]));
					setXmlHttp(xXmlHttp);
						
					return true;
				}catch(e){
					//window.status = "Not exsist:msXml [" + e.description + "]";
				}				
			}
		}	

		if(window.XMLHttpRequest){
			try{
				xXmlHttp = new XMLHttpRequest();
				setXmlObj(new String("XMLHttpRequest()"));
				setXmlHttp(xXmlHttp);
				
				return true;
			}catch(e){ 
				//window.status = "Not exsist:msXml [" + e + "]";
			}			
		}		

		return bReq;
	}
	this.loadXml = loadXml;		
	
	function reloadData() {
		
		if(m_iTimer != undefined){
			clearTimeout(m_iTimer);
		}
		loadData();			
	}
	this.reloadData = reloadData;
	
	function loadData(){	
		
		try {
			var sUrl         = new String("");
			var randomnumber = Math.floor(Math.random() * 11);		
			var xXmlHttp     = getXmlHttp();
			var sParam       = "";
			
			sUrl = m_sUrl;
			
			//sUrl += (sUrl.indexOf("?") >=0 ? "&" : "?") + "time="+(new Date().getTime());

			//window.status='connecting...';
			
			xXmlHttp.open("GET", sUrl, true);		//Pass different query string to avoid cache.
			
			xXmlHttp.onreadystatechange = stateChange;
			
			xXmlHttp.setRequestHeader("content-type", "application/x-www-form-urlencoded");	//used when using POST
			xXmlHttp.setRequestHeader("cache-control", "no-cache");
			
			xXmlHttp.send("sId=28");					//sId currently no used, to avoid sending null, exist error 412.
			
			xXmlHttp.onreadystatechange = stateChange;
			
			setXmlHttp(xXmlHttp);
						
		} catch (e) {
			window.status = "loadData: " + e.description;
		}
	}
	this.loadData=loadData;		
	
	function stateChange() {
		
		if(m_iTimer != 0){ clearTimeout(m_iTimer); }
		
		switch(m_xXmlHttp2.readyState){
				
			case 4:
			
				m_iTimer = setTimeout(m_sObjectId + ".errorhandling()",m_nRefreshRate);
						
				if((parseInt(m_xXmlHttp2.status)) == 200){				
					var res = m_xXmlHttp2.responseText; 
					//alert(res);
					ProcFeedResponse(res);
				}
		}
	}
	this.stateChange = stateChange;

	function errorhandling() {
		if(m_iTimer != undefined) clearTimeout(m_iTimer);
		m_iTimer = setTimeout( m_sObjectId + ".loadData()",m_iErrorWaitTime);
	}
	this.errorhandling = errorhandling;
	
/****************************************************************************/

	var FEED_DATA_BEGIN    = "--_BeginFeedTime_\r\n";
	var FEED_DATA_END      = "--_EndFeedTime_\r\n";
	
	var g_bReadyForFeedData=false;
	
	function setbReadyForFeedData(){g_bReadyForFeedData = true;}
	this.setbReadyForFeedData = setbReadyForFeedData;
	
	var g_FGFeedData;

	function ProcFeedResponse(res) {

		g_FGFeedData = new parseFeedData(res);
		
		if (g_FGFeedData != null && g_FGFeedData.length > 0) {
			RetFeedDataWhenParentReady();
		}
	}
	
	function RetFeedDataWhenParentReady() {	

		getFeedData();
		return true;
	}

	function parseFeedData(vsFeedData) {
		
		/**
		--_BeginFeedTime_
		12:01:01
		--_EndFeedTime_
		**/

		if (vsFeedData.length > 0) {
			
				var i_Time_Begin = vsFeedData.indexOf(FEED_DATA_BEGIN) + 17;
				var i_Time_End   = vsFeedData.indexOf(FEED_DATA_END);
				
				if ( (i_Time_Begin >= 17) && (i_Time_End > i_Time_Begin) ) {
					
						var sData_DelayDateTime = vsFeedData.substring(i_Time_Begin, i_Time_End);
						sData_DelayDateTime = sData_DelayDateTime.replace(/(\r\n)/g, "");
						
						sHHMMSS = sData_DelayDateTime.split(':');
						
						//XX:XX AM
						if ( (sHHMMSS[0]*1) >= 12 ) {
							
								var iHr = (sHHMMSS[0]*1) - 12;
								if (iHr == 0) { iHr = "12"; }
								if (iHr < 10) { iHr = "0" + iHr; }

								g_FGFeedData = iHr + ":" + sHHMMSS[1] + " PM";
								
						} else {
														
								g_FGFeedData = sHHMMSS[0] + ":" + sHHMMSS[1] + " AM";
						}

						document.getElementById("DelayTime").innerHTML = g_FGFeedData;
						//alert(g_FGFeedData);
				} else {
						document.getElementById("DelayTime").innerHTML = "99:99 AM";
				}
		}
	}

	function getFeedData() {
		return g_FGFeedData;
	}
	this.getFeedData = getFeedData;
}