
function f_setfocus( fid )
{
	var aForm = document.getElementById(fid);
	if( aForm.elements[0]!=null) {
		var i;
		var max = aForm.length;
		for( i = 0; i < max; i++ ) {
			if( aForm.elements[ i ].type == "text" &&
				!aForm.elements[ i ].disabled &&
				!aForm.elements[ i ].readOnly ) {
				aForm.elements[ i ].focus();
				break;
			}
		}
	}
}

function hideit(id)
{
	if (document.getElementById(id))
	{
		x = document.getElementById(id);
		x.style.display='none';
	}
}
function unhideit(id)
{
	if (document.getElementById(id))
	{
		x = document.getElementById(id);
		x.style.display='table-row';
	}
}
function styleit(c,id)
{
	if (document.getElementById(id))
	{
		x = document.getElementById(id);
		x.className = c;
	}
}

//-----------------------------------------
// Cross-browser dynamic innerHTML
//-----------------------------------------
function writit(text,id)
{
	if (document.getElementById(id))
	{
		x = document.getElementById(id);
		if (x.innerHTML != text) {
			x.innerHTML = '';
			x.innerHTML = text;
		}
	}
	else if (document.all)
	{
		x = document.all[id];
		if (x.innerHTML != text) {
			x.innerHTML = text;
		}
	}
}


//-----------------------------------------
// AJAX request
//-----------------------------------------
function Ajax(url, responseTagName, targetElementId) {

	//--------------------------------------------------
	var http_request = false;
	if (window.XMLHttpRequest) { // Mozilla, Safari,...
		http_request = new XMLHttpRequest();
		if (http_request.overrideMimeType) {
			http_request.overrideMimeType('text/xml');
		}
	} else if (window.ActiveXObject) { // IE
		try {
			http_request = new ActiveXObject("Msxml2.XMLHTTP");
		} catch (e) {
			try {
				http_request = new ActiveXObject("Microsoft.XMLHTTP");
			} catch (e) {}
		}
	}
		
	http_request.onreadystatechange = function(){
		if (http_request.readyState == 4) {
			if (http_request.status == 200) {
				writit(http_request.responseText,targetElementId);
					styleit('new','result');
			}
		}
	}
	
	// do the request
	try {
	http_request.open('GET', url, true);
	http_request.send(null);
	} catch(e) {}
}


var cgi_sep_arg = ";";
var cgi_sep_nameval = "=";
var cgi_sep_aray = ",";

function LiveCalc() {
	var Q = document.getElementById('engine').value + '.cgi?0' + cgi_sep_nameval + '0';

	// get interest rates
	var Rid = document.getElementById("ref_R").value;
	var R = document.getElementById(Rid).value;
	
	// loop the form...
	var elem = document.getElementById('f').elements;
	for(var i = 0; i < elem.length; i++)
	{
		if (elem[i].name.substring(0,3)=='arg') {
			var param_id = elem[i].name.substring(3);
			var param_val = elem[i].value;

			if (param_val.indexOf(',')== -1) {
				Q = Q + cgi_sep_arg + param_id  + cgi_sep_nameval + param_val;
			} else {
				var param_array = param_val.split(',');
				var loop_dir = document.getElementById('loopdirs').value.substr(param_id,1);
				var loop_label = document.getElementById('looplabels').value.split(',')[param_id];
				Q = Q + cgi_sep_arg + param_id  + cgi_sep_nameval + '@';
				Q = Q +  loop_dir;
				Q = Q + 'L';
				var part_num=0;
				while (part_num < param_array.length)
				{
					Q = Q + cgi_sep_aray + param_array[part_num];
					Q = Q + cgi_sep_aray + loop_label + '~' + param_array[part_num];
					part_num = part_num+1;
				}
			}
		}
		if (elem[i].name.substring(0,2)=='U_') {
			var Uid = elem[i].name.substring(2);
			var Yid = document.getElementById("Y_"+ Uid).value;
			var U = elem[i].value;
			var Y = document.getElementById(Yid).value;
			var QY = Y;			// default
			if (U=='S') QY = R;		// for stockL yield = R
			if (U=='F') QY = 0;		// futures have 0 yield
			if (U=='C') QY = R-Y;
			Q = Q + cgi_sep_arg + Yid.substring(3) + cgi_sep_nameval + QY;
		}
	}

	// append formatting string
	Q = Q + document.getElementById('ResultFormat').value;

//document.getElementById('result').innerHTML=Q;

	//var dS = 0.1*Math.pow(10,Math.round(Math.log(S)/Math.log(10)-0.5));
	Ajax(	Q, 	'sitmo', 'result');
	//document.getElementById('Q').innerHTML = Q;
}

var CalcTimer;

function KeyHandler() // keyup handler
{
	styleit('old','result');
	clearTimeout(CalcTimer);						// clear the timer
	CalcTimer = setTimeout("LiveCalc()", 250);    // renew it
}


function UpdateContractType(ct, rowY_id, tdY_label)
{
	if (ct=='F')  {
		hideit(rowY_id);
	}
	else if (ct=='S')  {
		hideit(rowY_id);
	}
	else if (ct=='C') {
		writit('Foreign Rate',tdY_label);
		unhideit(rowY_id);
	} else {
		writit('Yield',tdY_label);
		unhideit(rowY_id);
	}
	LiveCalc();
}