/**/
function FetchXIRR(out, d, v)
{	
	//requestData_og(out, v, d, 0.1);  // AJAX.
	CallDynamicScript(out, v, d, 0.1); // dynamic scripts tag.
	//sendRequest(out, v, d, 0.1);	// iframe
}

//var url = "https://10.84.25.12/sg/realtyeasy/servlet/CalculateXIRR";
var url = "https://www.dbs.com/sg/realtyeasy/servlet/CalculateXIRR";

/* ====================================================================
/* Using IFrame to post the form and eval the result     
/* Disadvantage: Cannot cross-domain.
/* 		Submit the form to the server-side proxy(same domain),
			then resubmit to the real server.(other domain)
/* ==================================================================== */
var newDiv = null;

function sendRequest(objId, valuesString, datesString, guessNumber)
{   
	var sltn = "iframe"; //callback method.

	var callback = function(result){ document.getElementById(objId).innerHTML = result };
		
	if (!newDiv) {
		newDiv = CallFrameForm("newFrame", 'blank.html');
	}
	
	newDiv.form.action = url;
	newDiv.dts.value = datesString;
	newDiv.vls.value = valuesString;
	newDiv.gn.value = guessNumber;
	newDiv.cb.value = sltn;
	newDiv.oid.value = "newDiv";
	
	newDiv.callback = callback;   
	newDiv.form.submit();   
} 

function CallFrameForm(id, url)
{
	var rDiv = document.createElement("div");
	rDiv.id = "newDiv";
	var style = "border:0; width:0; height:0;";
	rDiv.innerHTML = "<iframe name='"+id+"' id='"+id+"' style='"+style+"'></iframe>";
   
	document.body.appendChild(rDiv);
	rDiv.iframe = document.getElementById(id);
   
	rDiv.form = document.createElement('form');
	
	rDiv.form.setAttribute('id', id+'NewForm');
	rDiv.form.setAttribute('action', url);  // 
	rDiv.form.setAttribute('target', id);
	rDiv.form.target = id;
	rDiv.form.setAttribute('method', 'post');
	rDiv.form.innerHTML = '<input type="hidden" name="dts" id="'+id+'dts">'
				+ '<input type="hidden" name="vls" id="'+id+'vls">'
				  + '<input type="hidden" name="gn" id="'+id+'gn">'
				    + '<input type="hidden" name="cb" id="'+id+'cb">'
				      + '<input type="hidden" name="oid" id="'+id+'oid">';
	
	rDiv.appendChild(rDiv.form);
	rDiv.dts = document.getElementById(id+'dts');
	rDiv.vls = document.getElementById(id+'vls');
	rDiv.gn = document.getElementById(id+'gn');
	rDiv.cb = document.getElementById(id+'cb');
	rDiv.oid = document.getElementById(id+'oid');
	
	return rDiv;
}

/* ======================================================
/* Using Dynamic Script Tags to fetch result from Server  */
/* Advantage: Can cross-domain.
/* Disadvantage: Allows ONLY GET Method (Do not work for LARGE data process) */
/* ====================================================== */
function CallDynamicScript(objId, valuesString, datesString, guessNumber)
{
	//reset
	document.getElementById(objId).innerHTML = "...";
	
	/* Form QueryString(s) */
	var qStrs = "";
	qStrs += "dts=" + datesString;
	qStrs += "&vls=" + valuesString;
	
	qStrs += "&oid=" + objId;
    	qStrs += "&cb=json";
	
	if (guessNumber != "") //skip Guess Number if it is not indicated.
	{
	    qStrs += "&gn=" + guessNumber;
	}

    	//setCookie("dts", datesString, 1, "", true);
    	//setCookie("vls", valuesString, 1, "", true);

	var scriptObj = document.createElement('script');
	scriptObj.src = url + "?" + qStrs;

	document.body.appendChild(scriptObj); // proceed script
}

/* ======================================================
/* Using AJAX to fetch result from Server 
/* Cannot cross-domain               
/* ====================================================== */
var outputObj;
var xmlHttp;

function requestData_og(objId, valuesString, datesString, guessNumber)
{
	var divObj = document.getElementById(objId);
	
	if (divObj == null) // if output object is not found, return
	{
	    return false;
	}
	
	if ((valuesString == "") || (datesString == ""))
	{
	    return false;
	}
	
	/* Gathering */
	var qStrs = "";
	qStrs += "dts=" + datesString;
	qStrs += "&vls=" + valuesString;
	
	if (guessNumber != "") //skip Guess Number if it is not indicated.
	{
	    qStrs += "&gn=" + guessNumber;
	}
												
	var xmlHttp = GetXmlHttpObject(); // Initialize XmlHttp Object
	
	if (xmlHttp == null) // return if fail to build the object.
	{		
		return false;
	}
		
	var reqUrl = url;
	
	xmlHttp.onreadystatechange = function()
	{		
		if (xmlHttp.readyState == 4)
		{
			if (xmlHttp.status == 200)
			{ 
				var tmpStr = "";
			
				if (xmlHttp.responseText != "")
				{
				    divObj.innerHTML = "" + xmlHttp.responseText;			
				}										
			}
		}
		else if (xmlHttp.readyState == 1)
		{
			divObj.innerHTML = ".";
		}
		else if (xmlHttp.readyState == 2)
		{
			divObj.innerHTML = "..";
		}
		else if (xmlHttp.readyState == 3)
		{
			divObj.innerHTML = "...";
		}
	};
	
	//xmlHttp.setRequestHeader('content-type', 'text/xml');
	
	/*
	 *  The "async" parameter specifies whether the request should be handled asynchronously or not 
	 *  – "true" means that script processing carries on after the send() method, without waiting for a response, 
	 *  - "false" means that the script waits for a response before continuing script processing.
*/				
	//xmlHttp.open("GET", reqUrl + "?" + qStrs, true);
	//xmlHttp.send(null);
	
	var contentType = "application/x-www-form-urlencoded; charset=UTF-8";
	xmlHttp.open("POST", reqUrl, true);			
	xmlHttp.setRequestHeader("Content-Type", contentType); // set after open()
	xmlHttp.send(qStrs);
}

/* Setup Object */
function GetXmlHttpObject()
{ 
	var objXMLHttp = null;
	
	// Create XMLHttpRequest object in non-MS browsers
	if (window.XMLHttpRequest)
	{
		objXMLHttp = new XMLHttpRequest();
	}
	// Create XMLHttpRequest via MS ActiveX
	else if (window.ActiveXObject)
	{		
		try
		{
			// Try to create XMLHttpRequest in later versions of Internet Explorer
			objXMLHttp = new ActiveXObject("Msxml2.XMLHTTP");
		}
		catch (e1) // Failed to create required ActiveXObject
		{
			try
			{
				// Try version supported by older versions of Internet Explorer
				objXMLHttp = new ActiveXObject("Microsoft.XMLHTTP");
			}
			catch (e2)
			{
				alert(e2);
			}
		}
	}
	return objXMLHttp;
}
