/////////////////////////////////////////////////////////////////
//
// BLVM JavaScript Library
//
// This is collection of JavaScript functions that enables
// XML RPC request to the server side, and selctional update of
// browser UI
//
// Author: Joseph Kim
// File:   src/jsp/js/blvmutil.js
//
/////////////////////////////////////////////////////////////////



// Maximum number of retries in case of failure
var maxTry = 1;
var newXML;
var oldXML;
var cursorObj = null;
//Array to keep track of the elements for the changeCursor function
var elementArray = new Array();

/////////////////////////////////////////////////////////////////
//
// Construct valid BLVM service request that will return with
// XML payload, then call transform to render display
//
/////////////////////////////////////////////////////////////////
function do_get( cmd, request, formval, dest, reload, parentFrame)
{
    cursorObj = 1;

	if ( ( document.all.item("alertFrame") != null ) &&
         ( document.all.item("alertFrame").style.visibility = "visible" ) ) {
		   document.all.item("alertFrame").style.visibility = "hidden";
	}

	var payload = new ActiveXObject( 'Microsoft.XMLDOM' );
	payload.async =	false;

	var success = false;
	var nTry = 0;

	var serviceURL = 'blvm.kmv?ctx=xml&cmd=' + cmd;

	if( request != null && request != '' )
	{
		serviceURL = serviceURL + '&' + request;
	}

	if( formval != null )
	{
		serviceURL = serviceURL + '&' + post2get( formval );
	}

	if( dest != null && dest != '' )
	{
		serviceURL = serviceURL + '&payload.dest=' + dest;
	}

	while( !success && nTry < maxTry )
	{
		success = payload.load( serviceURL );

		if( success )
		{
			//alert( 'Service request was successful' );
			transform( payload, reload, parentFrame );
			changeCursorBack();
            hideElement('statusIndicator');
            //alert( 'Service request was successful' );
		}
		nTry++;

	}

	if( !success )
	{
		changeCursorBack();
		showErrorBox( 'CreditMark encountered a problem while processing your request.  Please try again later.  If the problem persists, please contact KMV CreditMark support.'  );
		//showErrorBox(payload.parseError.reason);
        //alert( payload.parseError.reason );
		//alert( 'Service request was not successful:\n\n' + 'serviceURL=' + serviceURL );
	}

}

//
// Changes cursor style for trigger elements and it's ancestors
// up till the body element.
function changeCursor(obj,cursorType) {
var arrayCount = 0;
	if (cursorType != 'default') {
		cursorObj = obj;
		for(elementIndex=obj; elementIndex.tagName != 'HTML'; elementIndex=elementIndex.parentElement) {
			elementIndex.style.cursor = cursorType;
			elementArray[arrayCount] = elementIndex;
			arrayCount += 1;
		}
	}
    showElement('statusIndicator');
}

// Changes cursor style for elements in the elementArray back to default.

function changeCursorBack(cmd) {
	for ( i = 0; i < 1; i++ ) {
    	i = i;
    }

    if (cmd == null) {
	if (elementArray != null) {
        for(i=0; i <= elementArray.length; i++) {
            if ( elementArray[i] != null ) {
                elementArray[i].style.cursor = '';
            }
        }
    }
	}

	else if (cmd == -1) {
	if (parent.elementArray != null) {

        for(i=0; i <= parent.elementArray.length; i++) {
            if ( parent.elementArray[i] != null ) {
                parent.elementArray[i].style.cursor = '';
            }
        }
    }
	}
    cursorObj = null;
}

function checkCursor() {

	if(cursorObj != 1) {
		changeCursorBack();
		hideElement('statusIndicator');
	}

}

function showErrorBox(msg)
{
		document.frames("alertFrame").document.all.item("msgSpace").innerHTML = msg;
		document.all.item("alertFrame").style.visibility = "visible";
}

function showMessageBox()
{
    document.all.item("messageSelection").style.visibility = "visible";
}

function closeErrorBox()
{
	changeCursorBack(-1);
	parent.document.all.item("alertFrame").style.visibility = "hidden";

}

function closeMessageBox()
{
	changeCursorBack(-1);
	parent.document.all.item("messageSelection").style.visibility = "hidden";

}

function changeElement( element, index, path, number, form )
{


    if ( number )
    {
        CheckNum = parseFloat( element.value )
        if ( isNaN( CheckNum ) )
        {
            alert( "Please enter a number" );
        }
    }
    var tree = new ActiveXObject( 'Microsoft.XMLDOM' );
    var itemList;
    var dataItemList;
    var dataItem;
    tree.async = false;
    tree.loadXML(newXML);
    var itemList = tree.selectNodes(path);
    childItem = itemList.item(index);
    childItemList = childItem.childNodes;


    var noOfRows = itemList.length;
    if( noOfRows == 1 )
    {
      updateFields( element, form, childItemList );
    }
    else
    {
      if( form == 'grid' )
        return;
    }

    for (var k=0; k < childItemList.length; k++)
    {
        childItem = childItemList.item(k);
        if ( childItem.nodeName == element.name )
        {
            childItem.text= element.value;
            break;
        }
    }
    newXML = tree.xml;
}

function updateXMLTreeElement( element, path )
{

    var tree = new ActiveXObject( 'Microsoft.XMLDOM' );
    var itemList;
    var dataItemList;
    var dataItem;
    tree.async = false;
    tree.loadXML(newXML);
    var node = tree.selectSingleNode( path );
    node.text= element.value;
    newXML = tree.xml;

}


function calculateSpreads( element, path, check, index, shift )
 {
     var sizepremium = 0.0;
     var elements = document.schedForm.elements;
     var i=0;
     for( var j = 0; j<elements.length; j++ )
     {
         if( elements[ j ].name == 'sizepremium' )
         {
             sizepremium = elements[ j ].value / 10000.0;
             continue;
         }
         if( elements[ j ].name == element.name )
         {
             i = j;
             break;
         }

     }

     if( check )
     {
         var recovery = elements[ i+2 ].value;
         var lgd = elements[ i+1 ].value;
         var tenor = elements[ i-2 ].value;
         if( isNaN( recovery ) || isNaN( lgd ) )
         {
            alert( "Please enter a valid number" );
            return false;
         }
         if( lgd == 1 )
         {
             elements[ i-1 ].value = recovery;
             return false;
         }
         var cleanspread = recovery / 10000;
         var cleanRiskPremium = cleanspread - sizepremium - shift;
         var cqdf = 1 - Math.exp(tenor * (-1) * cleanRiskPremium );
         var dirtyspread = ( shift + sizepremium - (1.0 / tenor) * Math.log(1 - lgd * cqdf) ) * 10000;
         elements[ i-1 ].value = dirtyspread.toFixed( 2 );

     }
     else
     {
     	 var observed = elements[ i-4 ].value;
         var lgd = elements[ i-2 ].value;
         var tenor = elements[ i-5 ].value;
         if( isNaN( observed ) || isNaN( lgd ) )
         {
            alert( "Please enter a valid number" );
            return false;
         }
         if( lgd == 1 )
         {
             elements[ i-1 ].value = observed;
             return false;
         }
         var observedspread = observed / 10000;
         var observedRiskPremium = observedspread - sizepremium - shift;
         var cqdf = (1  -  Math.exp(tenor * (-1) * observedRiskPremium)  )  /  lgd;
         var cleanspread = ( shift + sizepremium - (1.0 / tenor) * Math.log(1 - cqdf) ) * 10000;
         elements[ i-1 ].value = cleanspread.toFixed( 2 );

     }
     changeElement( elements[ i-1 ], index, path );
     return false;

}

function fixedCouponType( element, path, form )
{
    switch( element.selectedIndex )
    {
        case 0:
            document.forms[ form ].elements['fixed-rate'].value = 'NA';
            document.forms[ form ].elements['fixed-rate'].readOnly = true;
            document.forms[ form ].elements['usage-fee'].value = 0;
            document.forms[ form ].elements['usage-fee'].readOnly = false;
            break;
        case 1:
            document.forms[ form ].elements['fixed-rate'].value = 0;
            document.forms[ form ].elements['fixed-rate'].readOnly = false;
            document.forms[ form ].elements['usage-fee'].value = 'NA';
            document.forms[ form ].elements['usage-fee'].readOnly = true;
            break;
    }
    if( document.forms[ 'grid' ] != null )
    {
        if( document.forms[ 'grid' ].elements['usage-fee']  != null )
        {
            document.forms[ 'grid' ].elements['usage-fee'].value = document.forms[ 'controlform' ].elements['usage-fee'].value;
        }
    }

    updateXMLTreeElement( document.forms[ 'controlform' ].elements['usage-fee'], '/xml-data/instrument/price-grid/item/usage-fee' );
    return false;

}


function updateFields( element, form, childItemList )
{
   if( document.forms[ form ] == null )
   {
     updatePriceGridTableXML( form, childItemList );
     return;
   }
   if( element.name == 'rating-category-id' )
   {
     if( document.forms[ form ].elements['rating-category-id'] != null )
       document.forms[ form ].elements['rating-category-id'].value = element.value;
     return;
   }

   if( form == 'grid' || form == 'controlform' )
   {
       if( element.name == 'usage-fee' )
       {
         if( document.forms[ form ].elements['usage-fee'] != null )
           document.forms[ form ].elements['usage-fee'].value = element.value;
       }
       else if( element.name == 'non-usage-fee' )
       {
         if( document.forms[ form ].elements['non-usage-fee'] != null )
           document.forms[ form ].elements['non-usage-fee'].value = element.value;
       }
       else if( element.name == 'recurring-fee' )
       {
         if( document.forms[ form ].elements['recurring-fee'] != null )
           document.forms[ form ].elements['recurring-fee'].value = element.value;
       }
       for (var k=0; k < childItemList.length; k++)
       {
        childItem = childItemList.item(k);
        if ( childItem.nodeName == 'date' )
        {

           if( document.forms[ 'grid' ].elements['date'] != null && document.forms[ 'grid' ].elements['date'].value=="" )
           {
               document.forms[ 'grid' ].elements['date'].value = document.forms[ 'controlform' ].elements['origination-date'].value;
               childItem.text= document.forms[ 'grid' ].elements['date'].value;
               continue;
           }
        }
        if ( childItem.nodeName == 'edf' )
        {
            if( document.forms[ 'grid' ].elements['edf'] != null && document.forms[ 'grid' ].elements['edf'].value=="" )
            {
               document.forms[ 'grid' ].elements['edf'].value = 1;
               childItem.text= 1;
               continue;
            }
        }
        if ( childItem.nodeName == 'usage' )
        {
            if( document.forms[ 'grid' ].elements['usage'] != null && document.forms[ 'grid' ].elements['usage'].value=="" )
            {
               document.forms[ 'grid' ].elements['usage'].value = 0;
               childItem.text= 0;
               continue;
            }
        }


        if ( childItem.nodeName == 'usage-fee' )
        {
            if( document.forms[ 'grid' ].elements['usage-fee'] != null && document.forms[ 'grid' ].elements['usage-fee'].value=="" )
            {
               document.forms[ 'grid' ].elements['usage-fee'].value = document.forms[ 'controlform' ].elements['usage-fee'].value;
               childItem.text= document.forms[ 'controlform' ].elements['usage-fee'].value;
               continue;
            }
        }

        if ( childItem.nodeName == 'non-usage-fee' )
        {
            if( document.forms[ 'grid' ].elements['non-usage-fee'] != null && document.forms[ 'grid' ].elements['non-usage-fee'].value=="" )
            {
               document.forms[ 'grid' ].elements['non-usage-fee'].value = document.forms[ 'controlform' ].elements['non-usage-fee'].value;
               childItem.text= document.forms[ 'controlform' ].elements['non-usage-fee'].value;
               continue;
            }
        }

        if ( childItem.nodeName == 'recurring-fee' )
        {
            if( document.forms[ 'grid' ].elements['recurring-fee'] != null && document.forms[ 'grid' ].elements['recurring-fee'].value=="" )
            {
               document.forms[ 'grid' ].elements['recurring-fee'].value = document.forms[ 'controlform' ].elements['recurring-fee'].value;
               childItem.text= document.forms[ 'controlform' ].elements['recurring-fee'].value;
               continue;
            }
        }
     }
   }

}


function updatePriceGridTableXML( form, childItemList )
{
  if( form == 'grid' )
  {
    for (var k=0; k < childItemList.length; k++)
    {
      childItem = childItemList.item(k);
      if ( childItem.nodeName == 'date' && childItem.text=="" )
      {
        childItem.text = document.forms[ 'controlform' ].elements['origination-date'].value;
        continue;
      }
      if ( childItem.nodeName == 'edf' && childItem.text=="" )
      {
        childItem.text = 1;
        continue;
      }
      if ( childItem.nodeName == 'usage' && childItem.text=="" )
      {
        childItem.text = 0;
        continue;
      }
      if ( childItem.nodeName == 'usage-fee' && childItem.text=="" )
      {
        childItem.text = document.forms[ 'controlform' ].elements['usage-fee'].value;
        continue;
      }
      if ( childItem.nodeName == 'non-usage-fee' && childItem.text=="" )
      {
        childItem.text = document.forms[ 'controlform' ].elements['non-usage-fee'].value;
        continue;
      }
      if ( childItem.nodeName == 'recurring-fee' && childItem.text=="" )
      {
        childItem.text = document.forms[ 'controlform' ].elements['recurring-fee'].value;
        continue;
      }
    }

  }

}



function add_row(cmd, request, formval, dest, reload, path, item, path2, item2, path3, item3)
{
    var tree = new ActiveXObject( 'Microsoft.XMLDOM' );

    tree.async = false;
    tree.loadXML(newXML);

    if (path!=null) {
        add_node(path,item, tree);
    }

    if (path2!=null) {
        add_node(path2,item2, tree);
    }

    if (path3!=null) {
        add_node(path3,item3, tree);
    }

    newXML = tree.xml;

    do_get(cmd, request, formval, dest, reload);
}

function add_node(path, item, tree)
{
    var itemList;
    var dataItemList;
    var dataItem;
    var root = tree.selectSingleNode(path);
    var itemList = tree.selectNodes(path+"/"+item);

    if (itemList.length < 1) {
        alert ( "Rows may be added only for existing schedules." );
        return;
    }

    childItem = itemList.item(itemList.length - 1);

    new_node = childItem.cloneNode(true);

    childItemList = new_node.childNodes;

    for (var k=0; k < childItemList.length; k++)
    {
        childItem = childItemList.item(k);
        if (childItem.nodeName == "index")
        {
            childItem.text= parseInt(childItem.text) + 1;
            break;
        }
    }

    root.appendChild(new_node);
}


function send_xml( dest, xmlToSend )
{
    if ( xmlToSend == null )
        xmlToSend = newXML;

    if ( dest == null )
    {
        dest = "schedule";
    }
    var xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
    url = "blvm.kmv?cmd="+dest;
    xmlHttp.open("POST", url, false);
    xmlHttp.send( xmlToSend );
}

function send_do_get( cmd, request, formval, dest, reload, send_url )
{
    send_xml( send_url );
    do_get( cmd, request, formval, dest, reload );
}

function make_rating_xml ( selElement )
{
    var rating_xml='<ratings>';

    var obj = selElement;

    for (i = 0; i < obj.options.length; i++) {
        rating_xml += '<rating>' +
                    '<id>' + obj.options[i].value + '</id>' +
                    '<name><![CDATA[' + obj.options[i].text  + ']]></name>' +
                    '<order>' + i + '</order>' +
                    '</rating>';
      }

    rating_xml += '</ratings>';

    send_xml( 'rating.system.post', rating_xml );

}

function selector_send ( selElement, cmd )
{
    var obj = document.getElementById( selElement );

    var selector_xml='<id-list>';

    for (i = 0; i < obj.options.length; i++) {
        selector_xml += '<id>'+ obj.options[i].value +'</id>';
      }
    selector_xml += '</id-list>';

    send_xml( 'selector.list.post', selector_xml );

    do_get( cmd );

}

function reset(form)
{
    form.reset();
}



/////////////////////////////////////////////////////////////////
//
// Transform XML data with XSL and render the designated area of
// the browser with the result.  Get the necessary data by parsing
// the payload passed in.
//
/////////////////////////////////////////////////////////////////
function transform( payload, reload, parentFrame )
{
	var xmlData = new ActiveXObject( 'Microsoft.XMLDOM' );
	var xslData = new ActiveXObject( 'Microsoft.XMLDOM' );

    var tempXML;
	var payloadItem;
	var destElement;
	var dataItemList;
	var payloadItemList;
    var showMessage = false;

	xmlData.async = false;
	xslData.async = false;

	//alert( "payload=" + payload.xml );

	payloadItemList = payload.getElementsByTagName( "payload-item" );

	for( var i=0; i<payloadItemList.length; i++ )
	{
 		dataItemList = payloadItemList.item( i ).childNodes;

		//alert( "dataitemlen=" + dataItemList.length );
		for( var j=0; j<dataItemList.length; j++ )
		{
			dataItem = dataItemList.item( j );

			if( dataItem.nodeName == "xml-data" )
			{
                if (reload == false) {
                    xmlData.loadXML(newXML);
                }
                else if (reload == true) {
                    xmlData.loadXML(oldXML);
                    newXML = oldXML;
                }
				else
                {
                    xmlData.loadXML( dataItem.xml );
                    tempXML = dataItem.xml;
				    //alert( "dataxxx=" + xmlData.xml );\
                }
			}
			else if( dataItem.nodeName == "xsl-url" )
			{
				//alert( "xslxxx=" + dataItem.text );

				xslData.load( dataItem.text );
			}
			else if( dataItem.nodeName == "dest-element" )
			{
				//alert( "edstxxx=" + dataItem.text );
				destElement = dataItem.text;
			}
			else if( dataItem.nodeName == "redirect-url" )
			{
				//alert( "redirect=" + dataItem.text );
				window.location = dataItem.text;

                return;
			}
            else if( dataItem.nodeName == "save-xml" && reload == null )
			{
                newXML = tempXML;
                oldXML = tempXML;
			}
            else if( dataItem.nodeName == "show-message" )
			{
                showMessage=true;
			}
            else if( dataItem.nodeName == "chart-xml" )
			{
				//alert( "chart-xml=" + dataItem.firstChild.xml );
                tempXML = dataItem.firstChild.xml;
			}
            else if( dataItem.nodeName == "chart-data" )
			{
				//alert( "chartupdate=" + dataItem.xml );
				setData(dataItem.text, tempXML);
			}

		}

		if( ( xmlData.parseError.errorCode == 0 ) && ( xslData.parseError.errorCode == 0 ) )
		{
            // i hate having this special case, but we need a special case for i-frames.
            if ( showMessage == true )
            {
                showMessageBox();
                html = xmlData.transformNode( xslData );
                document.frames("messageFrame").document.getElementById( destElement ).innerHTML = html
            }

            else
            {
                //alert( "xmldata=" + xmlData.xml + "\n\n");
                //alert( "xsldata=" + xslData.xml + "\n\n");
                //			"dest=" + destElement + "\n\n" );
                html = xmlData.transformNode( xslData );

                // i hate having this special case, but we need a special case for i-frames.
                if ( parentFrame == true )
                {
                    parent.document.getElementById( destElement ).innerHTML = html;
                }
                else
                {
                    document.getElementById( destElement ).innerHTML = html;
                }
            }
		}
		else
		{
            //alert( xmlData.parseError.reason );
            //alert( xslData.parseError.reason );
			alert( 'XML transform was not successful for payload ' + i );
		}
	}
}


/////////////////////////////////////////////////////////////////
//
// Translates form name/input values into URL query string
//
/////////////////////////////////////////////////////////////////
function post2get( postform )
{
  var get = '';
  j=0;


  if( document.images )
  {
    for( i=0; i<postform.length; i++ )
    {
      var obj = postform.elements[i];

      if( obj.type=="text" || obj.type=="textarea" || obj.type=="hidden" || obj.type=="password" )
      {
        get = get + obj.name + '=' + makeAllSafe( obj.value )  + '&';
      }
      else if( obj.name == "rule"  )
      {
        opt = 0
        for (opt; opt < obj.options.length; opt++) {
            get = get + obj.name+opt + '=' + makeAllSafe( obj.options[opt].text ) + '&';
        }
        get = get + "rule.size=" + opt + '&';
      }
      else if( obj.name == "rightList" )
      {
        opt = 0
        for (opt; opt < obj.options.length; opt++) {
            get = get + obj.name+opt + '=' + makeAllSafe( obj.options[opt].value ) + '&';
        }
        get = get + "rightList.size=" + opt + '&';
      }
      else if( obj.type.toString().charAt(0) == "s" )
      {
        get = get + makeAllSafe(obj.name) + '=' + obj.selectedIndex + '&';
      }
      else if ( obj.type=="radio" )
      {
        if ( obj.checked )
        {
            get = get + makeAllSafe( obj.name )+ '=' + obj.value + '&';
        }
      }
      else if( obj.name == "rules.mdt.datasource")
      {
        get = get + makeAllSafe( "ds"+j ) + '=' + obj.checked + '&';
        j++;
      }
       else if( obj.type == "checkbox" )
      {
        get = get + makeAllSafe ( obj.name ) + '=' + obj.checked + '&';
      }

   }

   if( get.length > 0 )
   {
     return get.substring( 0, get.length-1 );
   }
  }
  return get;
}

function makeGetSafe( str )
{
    plusSign = /\+/g;
    var returnStr = String(str).replace(plusSign,"%2B");
    return returnStr;
}

function makeAllSafe( str )
{
    percentageSign = /\%/g;
    plusSign = /\+/g;
    ampersandSign = /\&/g;
    quoteSign = /\'/g;
    poundSign = /\#/g;
    bangSign = /\!/g;
    caratSign = /\^/g;
    dollarSign = /\$/g;
    openParenSign = /\(/g;
    closeParenSign = /\)/g;

    var returnStr = String(str).replace(percentageSign,"%25");
    returnStr = String(returnStr).replace(plusSign,"%2B");
    returnStr = String(returnStr).replace(ampersandSign,"%26");
    returnStr = String(returnStr).replace(quoteSign,"%27");
    returnStr = String(returnStr).replace(poundSign,"%23");
    returnStr = String(returnStr).replace(bangSign,"%21");
    returnStr = String(returnStr).replace(caratSign,"%5E");
    returnStr = String(returnStr).replace(dollarSign,"%24");
    returnStr = String(returnStr).replace(openParenSign,"%28");
    returnStr = String(returnStr).replace(closeParenSign,"%29");
    return returnStr;
}


function trim( s )
{
  var whitespace = new String(" \t\n\r");
  var str = new String(s);

  var i = 0;
  var j = 0;

  if( str == null || str == "" )
    return str;

  while( whitespace.indexOf( str.charAt( i ) ) != -1  ) i++;

  j = str.length-1;
  while ( whitespace.indexOf( str.charAt( j ) ) != -1 ) j--;

  if( i<=j )
    return str.substring( i,j+1 );
  else
    return '';
}

function newWindow(filename, cmd, request, formval, dest, reload )
{
    filename = filename + '?' + request;
    if( formval != null )
	{
		filename = filename + '&'+ post2get( formval );
	}

    newWind=window.open(filename,"newWin",'status=yes,toolbar=no,resizable=yes,scrollbars=yes,width=760,height=750');
}

function postIt( dest, cmd, request, formval )
{
    dest = dest + '?' + 'cmd=' + cmd + '&' + request;

	if( formval != null )
	{
		dest = dest + '&'+ post2get( formval );
	}

	location = dest;
}

function setData(name, result)
{

    var chartData =  new ActiveXObject( 'SfxXMLData.ServerXMLData' );

    chartData.BagTagName = "PROP"
    chartData.BagAttrName = "NAME"
    chartData.BagAttrValue = "VALUE"
    chartData.BagTagObject = "OBJECT"

    var mystring = result;
    if (name.toString() =="spreadstruc") {
        Chart1.DataType(0) = 2;
        Chart1.DataType(1) = 2;
        Chart1.DataType(2) = 2;
    }

    Chart1.DataType(0) = 3;
    Chart1.DataType(1) = 2;
    Chart1.DataType(2) = 2;
    chartData.LoadFromString (mystring);
    Chart1.GetExternalData (chartData);
    Chart1.Chart3D = 0;
    Chart1.Series(-1).Border = 0;
    Chart1.Series(-1).PointLabels = 0;
    Chart1.MarkerSize = 3;
    Chart1.MarkerShape = 2;
    Chart1.SerLegBox=1;
    Chart1.SerLegBoxObj.Visible = 'TRUE';
    Chart1.SerLegBoxObj.SizeToFit();
    Chart1.AllowEdit = 0;
    Chart1.DataEditor = 0;
    Chart1.Axis(0).Grid = 1 ;
    Chart1.Axis(2).Grid = 1 ;
    Chart1.Axis(0).Decimals = 4 ;
    Chart1.ContextMenus = 1;

    if(name.toString() == "spreadhist") {
       Chart1.Axis(0).Title = "Spread" ;
       Chart1.Axis(2).Title = "Date" ;
       Chart1.Title(2) = "Spread History";
    }
    if (name.toString() =="dealcalc") {
        Chart1.Axis(0).Title = "Value" ;
	    Chart1.Axis(2).Title = "Date" ;
    }
   if (name.toString() =="spreadstruc") {

        Chart1.Axis(0).Title = "Spread" ;
	    Chart1.Axis(2).Title = "Tenor" ;
    }

    var detailArea = document.all.destination.style;
    if (detailArea.visibility = "visible") {
        detailArea.visibility = "hidden";
	}

	var chartArea = document.all.chartid.style;
	if (chartArea.visibility = "hidden") {
 	    chartArea.visibility = "visible";
    }
}


function confirmDoGet(msg, cmd, request, formval, dest, reload ) {
	if (confirm(msg)) {
		do_get(cmd, request, formval, dest, reload);
		}
}

/////////////////////////////////////////////////////////////////
//
// Row Selector
// Author: Cashin Yong (March 29, 2002)
//
/////////////////////////////////////////////////////////////////

//Global variables
var rollOverColor = "#e8e8e8";
var rollOutColor = "";
var selectedColor = "#D5EEEE";
var menuselectedRow = null;
var selectedMenu = null;
var currentItem = null;

//invokes the row selector and displays the menu items
function showSelector(itm,id,refImg,row,offsetL,offsetT)
{
  if (document.all) {

  //check for previous row selected and set the row color back to normal
  if(menuselectedRow != null) {
  menuselectedRow.style.backgroundColor = rollOutColor;
  }

  //Set the row selector div layer to invisible
  if(selectedMenu != null) {
	if (selectedMenu.style.visibility = "visible") {
		selectedMenu.style.visibility = "hidden";
	}
  }


  var rowSelector = document.getElementById(itm);
  var refImage = document.getElementById(refImg);

	//alert(refImage + " and " + refImg + " and " + itm + " and " + rowSelector);

  //Find coordinates of reference image and set the Row Selector to that coordinate + the offset amount
  var menuoffsetLeft = offsetL;
  var menuoffsetTop = offsetT;

  for( var p=refImage; p&&p.tagName != 'BODY'; p=p.offsetParent) {
    menuoffsetLeft+=p.offsetLeft;
    menuoffsetTop+=p.offsetTop;
  	}

  var menuoffsetHeight = refImage.offsetHeight;
  var menupixelHeight  = rowSelector.style.pixelHeight;
  var menuscrollTop    = document.body.scrollTop;

  rowSelector.style.left = menuoffsetLeft;

  if( (( menuoffsetTop - menupixelHeight ) >= menuscrollTop) && (( menuoffsetTop + menuoffsetHeight + menupixelHeight ) > ( document.body.clientHeight + menuscrollTop )) ) {
   rowSelector.style.top = menuoffsetTop - menupixelHeight;
	}
  else {
    rowSelector.style.top = menuoffsetTop + menuoffsetHeight;
    }

	//Set the Color of the row to selected
	row.style.backgroundColor = selectedColor;
	row.style.border = "solid";

	//Set the row selector div layer to visible
	if (rowSelector.style.visibility = "hidden") {
		rowSelector.style.visibility = "visible";
	}

	//Draw Selected Menu to the Div layer
	//rowSelector.innerHTML = menu;


	//keep track of which row is selected;
	menuselectedRow = row;
	selectedMenu = rowSelector;
	currentItem = itm;
}

}


function hideSelector(itm) {
	if (document.getElementById(itm).style.visibility = "visible") {
		document.getElementById(itm).style.visibility = "hidden"
		}
 }

 function hiliteRow(row) {
 		//remember background color for row before rollover
 		rollOutColor = row.style.backgroundColor;
	//set row background color to rollover color
 	if (menuselectedRow != row) {
 	 	row.style.backgroundColor = rollOverColor;
 		row.style.cursor = 'hand';
	}
 }

 function unhiliteRow(row) {
 		//set row background color back to original color
 		row.style.backgroundColor = rollOutColor;
		//dont set the background color back to original if it is selected row
		if(menuselectedRow != null) {
		menuselectedRow.style.backgroundColor = selectedColor;
		menuselectedRow.style.border = "solid";
		}
 }

 function resizeHandler(itm) {
 	if(itm != null) {
	hideSelector(itm)
	}
 }

//
function showSearchBox(itm,inputBoxId,refImg,offsetL,offsetT) {
  var elm = document.getElementById(itm);
  var refImage = document.getElementById(refImg);
  var elmStyle = elm.style;

  placeElement(itm,refImg,offsetL,offsetT);
  showHideElement(itm);

  if(elmStyle.visibility == "visible") {
  	focusInputElement(inputBoxId);
  }

}


//focuses the cursor to the element itm. If there is an an initial value, it will set and display it in the focused element.
function focusInputElement(itm,val) {
	var elm = document.getElementById(itm);
	var elmStyle = elm.style;

	if(elm) {
		if (val == null) {
			elm.value = "";
		}
		else {
		elm.value = val;
		}
		elm.focus();
	}

}

//Toggles the visibility of an element itm.
function showHideElement(itm) {
	var elm = document.getElementById(itm);
	var elmStyle = elm.style;
	elmStyle.visibility=elmStyle.visibility=="hidden"? "visible":"hidden";
}

 //Find coordinates of reference image and set the element itm to that coordinate + the offset amount
function placeElement(itm,refImg,offsetL,offsetT) {

	var elm = document.getElementById(itm);
	var refImage = document.getElementById(refImg);

	var menuoffsetLeft = offsetL;
  	var menuoffsetTop = offsetT;
	var menuoffsetHeight = refImage.offsetHeight;
  	var menupixelHeight  = elm.style.pixelHeight;
  	var menuscrollTop    = document.body.scrollTop;

  	for( var p=refImage; p&&p.tagName != 'BODY'; p=p.offsetParent) {
    	menuoffsetLeft+=p.offsetLeft;
    	menuoffsetTop+=p.offsetTop;
  	}

  	elm.style.left = menuoffsetLeft;

  	if( (( menuoffsetTop - menupixelHeight ) >= menuscrollTop) && (( menuoffsetTop + menuoffsetHeight + menupixelHeight ) > ( document.body.clientHeight + menuscrollTop )) ) {
   		elm.style.top = menuoffsetTop - menupixelHeight;
	}
  	else {
    	elm.style.top = menuoffsetTop + menuoffsetHeight;
    }
}

function hideDivLayer(divName) {
		if (document.getElementById(divName).style.visibility = "visible") {
		document.getElementById(divName).style.visibility = "hidden";
	}
}

function clearField(field) {
	field.value='';
}

	function repositionCopyrights(id) {
	document.getElementById(id).style.left = "5px";
	document.getElementById(id).style.bottom = "5px";
	}


function makeSafe( str )
{
    period = /\.|\-/g;
    var underscore = "_";
    var returnStr = String(str).replace( period, underscore );
    return returnStr;
}


function openTarget (form, features, windowName) {
   if(document.all) {
	 if (!windowName) {
 		windowName = 'targetWindow' + (new Date().getTime());
		}

		var winName =  windowName + '_at_' + makeSafe(document.domain);
		form.target = winName;
		open ('', winName, features);

	if (window.name != winName) {
		window.opener = window;
  		window.close();
		}
	}
}

function moveModule(o_col, d_col, formName)
{
  o_sl = document.forms[formName].elements[o_col].selectedIndex;
  d_sl = document.forms[formName].elements[d_col].length;
  if (o_sl != -1 && document.forms[formName].elements[o_col].options[o_sl].value > "") {
    oText = document.forms[formName].elements[o_col].options[o_sl].text;
    oValue = document.forms[formName].elements[o_col].options[o_sl].value;
    document.forms[formName].elements[o_col].options[o_sl] = null;
    document.forms[formName].elements[d_col].options[d_sl] = new Option (oText, oValue, false, true);
  } else {
    showErrorBox("Please select an item first");
  }
}


function orderMDTModule(down, col, formName)
{
  sl = document.forms[formName].elements[col].selectedIndex;
  if (sl != -1 && document.forms[formName].elements[col].options[sl].value > "") {
    oText = document.forms[formName].elements[col].options[sl].text;
    oValue = document.forms[formName].elements[col].options[sl].value;
    if (document.forms[formName].elements[col].options[sl].value > "" && sl > 0 && down == 0) {
      document.forms[formName].elements[col].options[sl].text = document.forms[formName].elements[col].options[sl-1].text;
      document.forms[formName].elements[col].options[sl].value = document.forms[formName].elements[col].options[sl-1].value;
      document.forms[formName].elements[col].options[sl-1].text = oText;
      document.forms[formName].elements[col].options[sl-1].value = oValue;
      document.forms[formName].elements[col].selectedIndex--;
    } else if (sl < document.forms[formName].elements[col].length-1 && document.forms[formName].elements[col].options[sl+1].value > "" && down == 1) {
      document.forms[formName].elements[col].options[sl].text = document.forms[formName].elements[col].options[sl+1].text;
      document.forms[formName].elements[col].options[sl].value = document.forms[formName].elements[col].options[sl+1].value;
      document.forms[formName].elements[col].options[sl+1].text = oText;
      document.forms[formName].elements[col].options[sl+1].value = oValue;
      document.forms[formName].elements[col].selectedIndex++;
    }
  } else {
    showErrorBox("Please select an item first");
  }
}


// Tooltip SCript STarts here -------------------------------------------------

//On rollover Tooltip pop-up for IE5 and Netscape4.7
	//By Cashin Yong;
    //temporary X and Y coords for Netscape use.
	var tempX = null;
	var tempY = null;
	document.onMouseMove = captureMouse;
	//captures event for IE

	//document.captureEvents(Event.MOUSEMOVE);

	//Show the tooltip div layer for IE
	function showToolTip(tip, obj, offsetX, offsetY) {
	if (document.all) {  //checks for browser
	var tempX = event.clientX + document.body.scrollLeft
    var tempY = event.clientY + document.body.scrollTop

	//for( var p=obj; p&&p.tagName != 'BODY'; p=p.offsetParent)
  	//{
	//	offsetLeft = p.offsetLeft;
	//	offsetTop = p.offsetTop;
	//}
	//var tempY;
	//var tempX;

	//var offsetHeight = obj.offsetHeight;
  	//var pixelHeight  = document.all.tooltip.style.pixelHeight;
  	//var scrollTop    = document.body.scrollTop;

		//tempX = offsetLeft;

	//if( (( offsetTop - pixelHeight ) >= scrollTop) && ( offsetTop + offsetHeight + pixelHeight ) > ( document.body.clientHeight + scrollTop ) ) {
   // 	tempY = offsetTop - pixelHeight;
	//	}
 // else  {
  //  	tempY = offsetTop+offsetHeight;
	//}

	var lyr = document.all.tooltip;
	 document.all.tooltip.innerHTML =  "&nbsp;" + tip + "&nbsp;";
	 if (lyr.style.visibility = "hidden") {
	    lyr.style.left = tempX + offsetX;
		lyr.style.top = tempY + offsetY;
 		lyr.style.visibility = "visible";
	  }
	}
	else {
	//If it's Netscape then show tool tip for Netscape
	showTipNS(tip, offsetX, offsetY);
	}
	}

	//Hides the tooltip div layer for IE
	function hideToolTip() {
	if (document.all) { //check if it's IE
	var lyr = document.all.tooltip;
	 if (lyr.style.visibility = "visible") {
 		lyr.style.visibility = "hidden";
	  }
	}
	else {
	 //If it's Netscape then call hide for Netscape
	 hideTipNS();
	}
	}

	//---------Start Netscape functions ---------------------

	function captureMouse(e) {
		tempX = e.pageX;
		tempY = e.pageY;
	}

	//Shows the tooltip div layer for Netscape
	function showTipNS(tip, offsetX, offsetY) {
	 tipNS = "<table cellpadding=0 cellspacing=0 border=0><tr><td bgcolor=#000000><table cellpadding=0 cellspacing=1 border=0><tr><td bgcolor=#FFFFEE style='font-size:11px; font-family:arial;'>&nbsp;" + tip + "&nbsp;</td></tr></table></td></tr></table>";
	 document.tooltip.document.open();
	 document.tooltip.document.write(tipNS);
	 document.tooltip.document.close();

	 if (document.tooltip.visibility = "hide") {
	    document.tooltip.moveTo(tempX + offsetX, tempY + offsetY);
	 	document.tooltip.visibility = "show";
	 }
	}

	//Hides the tooltip div layer for Netscape
	function hideTipNS() {
	 if (document.tooltip.visibility = "show") {
	 	document.tooltip.visibility = "hide";
		}
	}
	//---------End Netscape functions ---------------------
	//-->
