// Copyright 2004 Software FX Inc.

var SFX_currentIconOver = "";
var SFX_currentMenuOn = 0;
var SFX_currentxAdd =0;
var SFX_currentyAdd =0;
var SFX_currentRightClick = "";
var SFX_CurrentUIObjectId = "";
var SFX_currentRightClickY = 0;
var SFX_currentRightClickX = 0;
var SFX_currentThirdLevelMenu = "";
var SFX_currentThirdLevelMenuOn = 0;
var SFX_currentChartName = "";
var SFX_delayedThirdLevelMenu = "";
var SFX_timerIntervalThirdLevel = "";

var UIOBJECT_SEPARATOR = '|';
var SPECIAL_COMMAND_PREFIX = '*';
var RESPONSE_SEPARATOR = '|';
var SUBCOMMAND_SEPARATOR = ',';

var REGULAR_RESPONSE_PREFIX = '#';
var SPECIAL_RESPONSE_PREFIX = '*';
var ERROR_RESPONSE_PREFIX = '!';

var SPECIAL_COMMAND_EXPORTDATA = 'D';
var SPECIAL_COMMAND_SETFONT = 'F';

bV  = parseInt(navigator.appVersion);
bNS = navigator.appName=="Netscape";
bIE = navigator.appName=="Microsoft Internet Explorer";

function MM_findObj(n, d) 
{ //v4.01
  var p,i,x;  if(!d) d=document; if((p=n.indexOf("?"))>0&&parent.frames.length) {
    d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);}
  if(!(x=d[n])&&d.all) x=d.all[n]; for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n];
  for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=MM_findObj(n,d.layers[i].document);
  if(!x && d.getElementById) x=d.getElementById(n); return x;
}

function MM_reloadPage(init) {  //reloads the window if Nav4 resized
  if (init==true) with (navigator) {if ((appName=="Netscape")&&(parseInt(appVersion)==4)) {
    document.MM_pgW=innerWidth; document.MM_pgH=innerHeight; onresize=MM_reloadPage; }}
  else if (innerWidth!=document.MM_pgW || innerHeight!=document.MM_pgH) location.reload();
}
MM_reloadPage(true);

function MM_preloadImages() 
{ //v3.0
  var d=document; if(d.images){ if(!d.MM_p) d.MM_p=new Array();
    var i,j=d.MM_p.length,a=MM_preloadImages.arguments; for(i=0; i<a.length; i++)
    if (a[i].indexOf("#")!=0){ d.MM_p[j]=new Image; d.MM_p[j++].src=a[i];}}
}

function MM_swapImgRestore() 
{ //v3.0
  var i,x,a=document.MM_sr; for(i=0;a&&i<a.length&&(x=a[i])&&x.oSrc;i++) x.src=x.oSrc;
}

function MM_swapImage() 
{ //v3.0
  var i,j=0,x,a=MM_swapImage.arguments; document.MM_sr=new Array; for(i=0;i<(a.length-2);i+=3)
   if ((x=MM_findObj(a[i]))!=null){document.MM_sr[j++]=x; if(!x.oSrc) x.oSrc=x.src; x.src=a[i+2];}
}

function SFX_NOP () 
{
	return false;
}

function SFX_setVisibility (objName,visible) 
{ 
    var obj = MM_findObj(objName);
    if (obj == null)
        return;
        
	if (obj.style != null) {
		obj.style.visibility = visible ? 'visible' : 'hidden';
	} else
	    obj.visibility = visible ? 'show' : 'hide';
}

function SFX_changeDivPosition (divName,xPos,yPos,absolutePosition) 
{
	var chartImage = MM_findObj(SFX_currentChartName);
	
	if (!absolutePosition && (chartImage != null)) {
	    var obj = chartImage;
	    do {
		    xPos += obj.offsetLeft
		    yPos += obj.offsetTop;
		    obj = obj.offsetParent;
	    } while (obj);
	}
	
	SFX_moveLayer("SFXdiv-" + divName, xPos, yPos);
}

function SFX_showDivAt (divName,xPos,yPos,absolutePosition)
{
	SFX_changeDivPosition(divName,xPos,yPos,absolutePosition);
	SFX_setVisibility('SFXdiv-'+divName,true);
}

function SFX_showIconOver(chartName,iconName,xAdd,yAdd,absolutePosition)
{
	if (SFX_currentMenuOn==0) {
		SFX_currentChartName = chartName;
		SFX_setVisibility('SFXdiv-'+SFX_currentIconOver,false);
		SFX_showDivAt(iconName,xAdd,yAdd,absolutePosition);
		SFX_currentIconOver = iconName;
	} 
}

function SFX_noIconOver(chartName)
{
	if (SFX_currentMenuOn==0){
		SFX_currentChartName = chartName;
	}
}

function SFX_onChartContextMenu ()
{
    if (SFX_currentRightClick != "") {
        SFX_showDivAt('menu' + SFX_currentRightClick, SFX_currentRightClickX, SFX_currentRightClickY, true);
        return false;
    }
    return true;
}
function SFX_mouseX (e) 
{
    if (e.pageX) 
        return e.pageX;
        
    if (e.clientX)
        return e.clientX + (document.documentElement.scrollLeft ? document.documentElement.scrollLeft : document.body.scrollLeft);

    return null;
}

function SFX_mouseY (e) 
{
    if (e.pageY) 
        return e.pageY;
    
    if (e.clientY)
       return e.clientY + (document.documentElement.scrollTop ? document.documentElement.scrollTop : document.body.scrollTop);
       
    return null;
}

function SFX_setRightClickMenu (e,chartName,menuName,prefix) 
{
	SFX_clearLayers();
	
	var inmidiate = true;
    if (!e) {
        e = window.event; // IE
        inmidiate = false;
    }

	if ((e.button & 2) == 0)
	    return true;

	SFX_currentChartName = chartName;
	SFX_CurrentUIObjectId = prefix;
    SFX_currentRightClick = menuName;
    SFX_currentRightClickX = SFX_mouseX(e);
    SFX_currentRightClickY = SFX_mouseY(e);
    
    if (inmidiate)
        return SFX_onChartContextMenu();
    
	return false;
}

function SFX_hideRightClickMenu ()
{
	if(SFX_currentRightClick != ""){
		SFX_setVisibility('SFXdiv-menu'+SFX_currentRightClick,false);
		SFX_currentRightClick = "";
	}
}

function SFX_showToolbarMenuAbsolute(commandName,xPos,yPos)
{
	xPos = parseInt(xPos);
	yPos = parseInt(yPos);
    SFX_showToolbarMenu(SFX_currentChartName,commandName,xPos,yPos,true);
}

function SFX_showToolbarMenu(chartName,commandName,xPos,yPos,absolutePosition)
{
	SFX_currentChartName = chartName;
	SFX_clearLayers();
	SFX_showIconOver(chartName,commandName,xPos,yPos,absolutePosition);
	SFX_showContextMenu(commandName,xPos,yPos + 25,absolutePosition);
}

function SFX_showContextMenu (iconName,xPos,yPos,absolutePosition)
{
	SFX_CurrentUIObjectId = "";
	SFX_hideRightClickMenu();
	if(SFX_currentMenuOn!=0 && SFX_currentIconOver == iconName){
		SFX_HideContextMenu();
	}else{
		SFX_showDivAt('menu'+iconName,xPos,yPos,absolutePosition);
		SFX_currentMenuOn = 1;
	}
}

function SFX_showSubMenu (iconName,caller) 
{
	var xAdd = parseInt(caller.offsetWidth) + 2;
	var yAdd = parseInt(caller.offsetTop);
	SFX_hideThirdLevelMenu();
	SFX_showDivAt('menu'+iconName,SFX_currentRightClickX + xAdd, SFX_currentRightClickY + yAdd,true);
	SFX_currentThirdLevelMenuOn = 1;
	SFX_currentThirdLevelMenu=iconName;
}

function SFX_HideContextMenu()
{
	SFX_setVisibility('SFXdiv-menu'+SFX_currentIconOver,false);
	SFX_currentMenuOn = 0;
}

function SFX_hideThirdLevelMenu()
{
	if (SFX_timerIntervalThirdLevel != "") {
		window.clearInterval(SFX_timerIntervalThirdLevel);
		SFX_timerIntervalThirdLevel = ""
	}
	SFX_setVisibility('SFXdiv-menu'+SFX_currentThirdLevelMenu,false);
	SFX_currentThirdLevelMenuOn = 0;
	SFX_currentThirdLevelMenu = "";
	SFX_delayedThirdLevelMenu = "";
}

function SFX_hideThirdLevelMenuDelayed (iconName)
{
	if (iconName != SFX_currentThirdLevelMenu) {
		SFX_delayedThirdLevelMenu = SFX_currentThirdLevelMenu;
		if (SFX_timerIntervalThirdLevel == "")
			SFX_timerIntervalThirdLevel = window.setInterval("ThirdLevelMenuTimer()",100);
	}
}

function ThirdLevelMenuTimer ()
{
	if (SFX_delayedThirdLevelMenu == SFX_currentThirdLevelMenu) {
		window.clearInterval(SFX_timerIntervalThirdLevel);
		SFX_hideThirdLevelMenu();
	}
}

function SFX_hideIconOver()
{
	if (SFX_currentMenuOn == 0) {
		SFX_setVisibility('SFXdiv-'+SFX_currentIconOver,false);
		SFX_currentIconOver="";
	}
}

function SFX_clearLayers()
{
//	SFX_hideIconOver();
	SFX_HideContextMenu();
	SFX_hideRightClickMenu();
	SFX_hideThirdLevelMenu()
}

function SFX_resizeAction ()
{
	SFX_hideRightClickMenu();
	SFX_hideThirdLevelMenu();
	if (SFX_currentMenuOn != 0) {
		SFX_changeDivPosition(SFX_currentIconOver,SFX_currentxAdd,SFX_currentyAdd);
		SFX_changeDivPosition('menu'+SFX_currentIconOver, SFX_currentxAdd,parseInt(SFX_currentyAdd)+25);
	}	
}

function SFX_moveLayer(objName, xPos, yPos) 
{
	// Given object name, x & y position, adjust object to new top left
	var obj = MM_findObj(objName);
	
	if (obj == null)
	    return;
	
	if (obj.parentElement != document.body)
	    document.body.appendChild(obj);
	
	obj.style.left = xPos.toString() + "px";
	obj.style.top = yPos.toString() + "px";
}

function SFX_OnCallbackError (param,context) 
{
	alert('An error has occurred.\n'+param);
}

function SFX_OnCallbackReady (param,context) 
{
	SFX_clearLayers();
	SFX_currentChartName = context;
	
	var responseCode = param.substring(0,1);
	param = param.substring(1);
	
	// Error
	if (responseCode == ERROR_RESPONSE_PREFIX) {
		alert(param);
		return;
	}
	
	// Special command
    if (responseCode == SPECIAL_RESPONSE_PREFIX) {
		switch (param.substring(0,1)) {
			case SPECIAL_COMMAND_EXPORTDATA:
				if (window.clipboardData)
					window.clipboardData.setData('text', param.substring(1));
				else
					alert('Sorry, your browser does not support this feature.');
		}
    } else {
		window.focus();

	    var sep1 = param.indexOf(RESPONSE_SEPARATOR);
        context = param.substring(0,sep1);
        var sep2 = param.indexOf(RESPONSE_SEPARATOR,sep1+1);
        var scriptSufix = param.substring(sep1+1,sep2);
        var sep3 = param.indexOf(RESPONSE_SEPARATOR,sep2+1);
        var viewState = param.substring(sep2+1,sep3);
        var sep4 = param.indexOf(RESPONSE_SEPARATOR,sep3+1);
        var url = param.substring(sep3+1,sep4);
        var map = param.substring(sep4+1);

        // Upate viewstate
        var viewStateObj = MM_findObj('__' + context + '_VIEWSTATE');
        viewStateObj.value = viewState;	   

        SFX_RefreshCallbackData();
        
        var methodCall = "SFX_ProcessResponse" + scriptSufix + "(context,url,map);";
        eval(methodCall);
	}
	
	SFX_CurrentUIObjectId = ""
}

function SFX_ProcessResponseImage (context, url, map)
{
    // trim off <map> and </map>
    var sep1 = map.indexOf('>');
    map = map.substring(sep1+1,map.length-7);
    
    SFX_replaceImage(context,url,map);
}

function SFX_ProcessResponseActiveX (context, url, map)
{
	var obj = MM_findObj(context);
	obj.DataPath = url;
}

function SFX_ProcessResponseFlash (context, url, map)
{
	var obj = MM_findObj(context);
	obj.Movie = url;
}

function SFX_ProcessResponseSVG (context, url, map)
{
	var obj = MM_findObj(context);
	obj.Src = url;
}

function SFX_ProcessResponseChartAsText (context, url, map)
{
    SFX_ProcessResponseImage(context,url,map);
    // TODO: Update Text Chart
    // trim off <map> and </map>
    var sep1 = map.indexOf('>');
    map = map.substring(sep1+1,map.length-7);
    
    SFX_replaceImage(context,url,map);
}

function SFX_RefreshCallbackData ()
{
    __theFormPostData = "";
    __theFormPostCollection = new Array();
    WebForm_InitCallback();
}

// var g_currFilter = false;

function SFX_replaceImage (context, url, map) 
{
	var imageObj = MM_findObj(context);
	
	imageObj.src = url;

    var mapObj = MM_findObj(context+'Map');
	mapObj.innerHTML = map;
}

function SFX_SendCommand (command, postback) 
{
    if (postback)
        SFX_PostBack(SFX_currentChartName,'A:' + command + '|' + SFX_CurrentUIObjectId);
    else
        SFX_Callback(SFX_currentChartName,'A,' + command + '|' + SFX_CurrentUIObjectId);
}

function SFX_SendCommandContext (command, context, postback)
{
	SFX_CurrentUIObjectId = context;
    SFX_SendCommand(command,postback);
}

// Client-Side commands

function SFX_PrintDialog (id) 
{
	var chartImage = MM_findObj(SFX_currentChartName);
	SFX_clearLayers();
	document.execCommand("Print",true,chartImage);
}

function SFX_Print (id) 
{
	var chartImage = MM_findObj(SFX_currentChartName);
	SFX_clearLayers();
	document.execCommand("Print",false,chartImage);
}

function SFX_CopyBitmap (id) 
{
    if (window.clipboardData) {
		// If I take out this alert it doesn't work !
		alert("The Chart image is in the clipboard.","Notification");
		var chartImage = MM_findObj(SFX_currentChartName);
		var oRng=document.body.createControlRange();
		oRng.addElement(chartImage);
		oRng.execCommand("Copy");
    } else
		alert('Sorry, your browser does not support this feature.');
	SFX_clearLayers();
}

function SFX_CopyMetafile (id) 
{
    alert('Copy Metafile');
	SFX_clearLayers();
}

function SFX_CopyData (id) 
{
    SFX_SendCommand(SPECIAL_COMMAND_PREFIX + SPECIAL_COMMAND_EXPORTDATA);
}

var SFX_fontFamily;
var SFX_fontSize;
var SFX_fontIsBold;
var SFX_fontIsItalic;
var SFX_fontIsUnderline;

function SFX_ShowFontDialog (id) 
{
	SFX_clearLayers();
	
	fontFamily = "Arial";
	fontSize = 8;
	isBold = false;
	isItalic = false;
	isUnderline = false;

	SFX_fontFamily = fontFamily;
	SFX_fontSize = fontSize;
	SFX_fontIsBold = isBold;
	SFX_fontIsItalic = isItalic;
	SFX_fontIsUnderline = isUnderline;

	var windowDialog = window.open(SFX_FontDialog,null,'toolbar=0,scrollbars=0,location=0,statusbar=0,menubar=0,resizable=0,width=300,height=200');
}

function ReturnFromFontDialog (fontFamily, fontSize, isBold, isItalic, isUnderline) 
{
    SFX_SendCommand(SPECIAL_COMMAND_PREFIX + SPECIAL_COMMAND_SETFONT + fontFamily + SUBCOMMAND_SEPARATOR + fontSize + SUBCOMMAND_SEPARATOR + isBold + SUBCOMMAND_SEPARATOR + isItalic + SUBCOMMAND_SEPARATOR + isUnderline);
}