function CreateChart( Width, Height, Description, ObjectID, UnformattedObjectID, BaseName, Mode, ExtendedSettings )
{
	// Chart Shim Object
	document.write( '<div id="divChartCtlError_' + UnformattedObjectID + '" style="display:none;"><img ObjectID="' + ObjectID + '" onload="UpdateChartCtlErrorImgLoaded(this, null);" src="/ClientFormsImages/Common/TransparentPixel.gif" id="imgChart_' + UnformattedObjectID + '" style="position:relative;width:' + Width + ';height:' + Height +'" align="absmiddle" /></div><OBJECT classid="/ChartsShim/Toreion.Interop.Charts.Shim.dll#Toreion.Interop.Charts.Shim.Chart" id="' + UnformattedObjectID + '" onmouseenter="ResizePage();" onreadystatechange="this.style.display = \'inline-block\';ResizePage();CheckChartCtl( \'' + UnformattedObjectID + '\' );" style="position:relative;width:' + Width + ';height:' + Height +';z-index:0;" Description="' + Description + '" ObjectID="' + ObjectID + '" BaseName="' + BaseName + '" ResizeSink="ChartCtlResize(\'' + UnformattedObjectID + '\');"><param name="Mode" value="' + Mode + '"><param name="ExtendedSettings" value="' + ExtendedSettings + '"><script language="javascript">CheckChartCtl("' + UnformattedObjectID + '");</script></object>' );
}

function UpdateChartCtlErrorImgLoaded( img, id )
{
    if( img == null )
        img = document.getElementById( id );
    
    if( img.clientWidth > 0 && img.Loaded != "True" )
    {
        img.src = "/Chart.aspx?ChartGuid=" + img.getAttribute( "ObjectID" ) + "&Width=" + img.clientWidth + "&Height=" + img.clientHeight + "&UniqueGuid=" + GenerateGuid();
        img.Loaded = "True";
        img.TimeoutCalled = "False";
    }
    else if( img.Loaded != "True" && img.TimeoutCalled != "True" )
    {
        img.TimeoutCalled = "True";
        setTimeout( "UpdateChartCtlErrorImgLoaded(null, '" + img.id + "');", 500 );
    }
}

function CheckChartCtl( UnformattedObjectID )
{
    if( document.getElementById( UnformattedObjectID ) == undefined || document.getElementById( UnformattedObjectID ).object == null )
    {
        document.getElementById( UnformattedObjectID ).style.display = 'none';
        document.getElementById( 'divChartCtlError_' + UnformattedObjectID ).style.display = 'inline';
    }
}

function ChartCtlResize( UnformattedObjectID )
{
    var img = document.getElementById( "imgChart_" + UnformattedObjectID );
    
    if( img != undefined && (img.InternalWidth != img.clientWidth || img.InternalHeight != img.clientHeight) )
    {
        img.InternalWidth = img.clientWidth;
        img.InternalHeight = img.clientHeight;
        img.Loaded = "False";
        UpdateChartCtlErrorImgLoaded( img, null );
    }
}

function ChartCtlIncrementChartValue( objEvent, objElement, strIncrementBy, strSerieIDPin, strAxis, strOppositeAxisCompareValue, strOppositeAxisCompareIDPin, strSliceLabel )
{
    try
    {
        var objSerieIDPin = strSerieIDPin;
    		
        if( strSerieIDPin.length > 2 && strSerieIDPin.charAt( 0 ) == "!" && strSerieIDPin.charAt( strSerieIDPin.length-1 ) == "!" )
        {
	        if( objEvent.IsArray( strSerieIDPin.substr( 1, strSerieIDPin.length-2 ) ) )
		        objSerieIDPin = objEvent.GetParameterArray( strSerieIDPin.substr( 1, strSerieIDPin.length-2 ) );
	        else
		        objSerieIDPin = objEvent.GetParameter( strSerieIDPin.substr( 1, strSerieIDPin.length-2 ) );
        }
        
        if( objSerieIDPin == undefined )
            objSerieIDPin = null;
    		
        var objOppositeAxisCompareValue = strOppositeAxisCompareValue;
			
        if( strOppositeAxisCompareValue.length > 2 && strOppositeAxisCompareValue.charAt( 0 ) == "!" && strOppositeAxisCompareValue.charAt( strOppositeAxisCompareValue.length-1 ) == "!" )
        {
	        if( objEvent.IsArray( strOppositeAxisCompareValue.substr( 1, strOppositeAxisCompareValue.length-2 ) ) )
		        objOppositeAxisCompareValue = objEvent.GetParameterArray( strOppositeAxisCompareValue.substr( 1, strOppositeAxisCompareValue.length-2 ) );
	        else
		        objOppositeAxisCompareValue = objEvent.GetParameter( strOppositeAxisCompareValue.substr( 1, strOppositeAxisCompareValue.length-2 ) );
        }
			
        if( objOppositeAxisCompareValue == undefined )
	        objOppositeAxisCompareValue = null;
		
        var objOppositeAxisCompareIDPin = strOppositeAxisCompareIDPin;
			
        if( strOppositeAxisCompareIDPin.length > 2 && strOppositeAxisCompareIDPin.charAt( 0 ) == "!" && strOppositeAxisCompareIDPin.charAt( strOppositeAxisCompareIDPin.length-1 ) == "!" )
        {
	        if( objEvent.IsArray( strOppositeAxisCompareIDPin.substr( 1, strOppositeAxisCompareIDPin.length-2 ) ) )
		        objOppositeAxisCompareIDPin = objEvent.GetParameterArray( strOppositeAxisCompareIDPin.substr( 1, strOppositeAxisCompareIDPin.length-2 ) );
	        else
		        objOppositeAxisCompareIDPin = objEvent.GetParameter( strOppositeAxisCompareIDPin.substr( 1, strOppositeAxisCompareIDPin.length-2 ) );
        }
			
        if( objOppositeAxisCompareIDPin == undefined )
	        objOppositeAxisCompareIDPin = null;
		
        var objIncrementBy = strIncrementBy;
			
        if( strIncrementBy.length > 2 && strIncrementBy.charAt( 0 ) == "!" && strIncrementBy.charAt( strIncrementBy.length-1 ) == "!" )
        {
	        if( objEvent.IsArray( strIncrementBy.substr( 1, strIncrementBy.length-2 ) ) )
		        objIncrementBy = objEvent.GetParameterArray( strIncrementBy.substr( 1, strIncrementBy.length-2 ) );
	        else
		        objIncrementBy = objEvent.GetParameter( strIncrementBy.substr( 1, strIncrementBy.length-2 ) );
        }
			
        if( objIncrementBy == undefined )
	        objIncrementBy = null;

	    var objSliceLabel = strSliceLabel;
				
        if( strSliceLabel.length > 2 && strSliceLabel.charAt( 0 ) == "!" && strSliceLabel.charAt( strSliceLabel.length-1 ) == "!" )
        {
	        if( objEvent.IsArray( strSliceLabel.substr( 1, strSliceLabel.length-2 ) ) )
		        objSliceLabel = objEvent.GetParameterArray( strSliceLabel.substr( 1, strSliceLabel.length-2 ) );
	        else
		        objSliceLabel = objEvent.GetParameter( strSliceLabel.substr( 1, strSliceLabel.length-2 ) );
        }
		
        if( objSliceLabel == undefined  )
	        objSliceLabel = null;
	        
        if( objElement.object == null )
        { 
            var strXml = "<root>";
            
            strXml += "<MethodCall Action=\"IncrementValue\">";
            
            strXml += "<Parameter Name=\"IncrementBy\">";
            strXml += Array2DataItemXml( objIncrementBy );
            strXml += "</Parameter>";
            
            if( objOppositeAxisCompareIDPin != null && objOppositeAxisCompareIDPin != "" )
            {
                strXml += "<Parameter Name=\"OppositeAxisCompareIDPin\">";
                strXml += Array2DataItemXml( objOppositeAxisCompareIDPin );
                strXml += "</Parameter>";
            }
            
            if( objOppositeAxisCompareValue != null && objOppositeAxisCompareValue != "" )
            {
                strXml += "<Parameter Name=\"OppositeAxisCompareValue\">";
                strXml += Array2DataItemXml( objOppositeAxisCompareValue );
                strXml += "</Parameter>";
            }
            
            if( objSliceLabel != null && objSliceLabel != "" )
            {
                strXml += "<Parameter Name=\"SliceLabel\">";
                strXml += Array2DataItemXml( objSliceLabel );
                strXml += "</Parameter>";
            }
            
            if( objSerieIDPin != null && objSerieIDPin != "" )
            {
                strXml += "<Parameter Name=\"SerieIDPin\">";
                strXml += Array2DataItemXml( objSerieIDPin );
                strXml += "</Parameter>";
            }
            
            if( strAxis != null && strAxis != "" )
            {
                strXml += "<Parameter Name=\"Axis\">";
                strXml += Array2DataItemXml( strAxis );
                strXml += "</Parameter>";
            }
            
            strXml += "</MethodCall>";
            
            strXml += "</root>";

            var iframe = null;
            
            if( navigator.appName == "Microsoft Internet Explorer" )
            {
                iframe = document.createElement("<iframe onload=\"ChartCtlCallback(this);\" style=\"display:none;\" src=\"/Chart.aspx\"></iframe>");
                
                iframe.MethodCallXml = strXml;
                iframe.id = GenerateGuid();
                iframe.ObjectID = objElement.ObjectID;
                iframe.FrameID = objElement.id;
                
                document.body.appendChild(iframe);
            }
            else
            {
                iframe = document.createElement("iframe");

	            iframe.setAttribute( "onload", "ChartCtlCallback(this);" );
    	        
	            document.body.appendChild(iframe);
    	        
    	        iframe.setAttribute( "ObjectID", objElement.getAttribute( "ObjectID" ) );
    	        iframe.setAttribute( "FrameID", objElement.id );
	            iframe.setAttribute( "style", "display:none;" );
	            iframe.setAttribute( "id", GenerateGuid() );
	            iframe.setAttribute( "MethodCallXml", strXml );
	            iframe.setAttribute( "src", "Chart.aspx" );
            }
        }
        else
        {	
            if (objElement.type == "FlashChartElement")
            {   
                if (objSerieIDPin != null && typeof(objSerieIDPin) == "AutomationArray")
                    objSerieIDPin = objSerieIDPin.Values;
                    
                if (objOppositeAxisCompareValue != null && typeof(objOppositeAxisCompareValue) == "AutomationArray")
                    objOppositeAxisCompareValue = objOppositeAxisCompareValue.Values;
                    
                if (objOppositeAxisCompareIDPin != null && typeof(objOppositeAxisCompareIDPin) == "AutomationArray")
                    objOppositeAxisCompareIDPin = objOppositeAxisCompareIDPin.Values;
                    
                if (objIncrementBy != null && typeof(objIncrementBy) == "AutomationArray")
                    objIncrementBy = objIncrementBy.Values;
            
                objElement.IncrementValue(objSerieIDPin, objOppositeAxisCompareValue, objOppositeAxisCompareIDPin, objIncrementBy);
	        }
	        else if( objElement.ChartTypeString == "LinearGauge" )
	        {
		        objElement.BaseGauge.IncrementValue( objIncrementBy );
	        }
	        else if( objElement.ChartTypeString == "Pie" )
	        {	
		        objElement.Pie.IncrementValue( objOppositeAxisCompareIDPin, objSliceLabel, objIncrementBy );
	        }
	        else if( objElement.ChartTypeString == "Line" )
	        {  
	            if( strAxis == "X" )
		            objElement.BaseChart.IncrementXValue( objSerieIDPin, objOppositeAxisCompareValue, objOppositeAxisCompareIDPin, objIncrementBy );
	            else
		            objElement.BaseChart.IncrementYValue( objSerieIDPin, objOppositeAxisCompareValue, objOppositeAxisCompareIDPin, objIncrementBy );
            }
	    }
    }
    catch( e )
    {
	    if( e.description != "'BaseChart' is null or not an object" )
		    alert( "Chart : " + e.message );
    }
}

function ChartCtlDecrementChartValue( objEvent, objElement, strDecrementBy, strSerieIDPin, strAxis, strOppositeAxisCompareValue, strOppositeAxisCompareIDPin, strSliceLabel )
{
    try
    {
        var objSerieIDPin = strSerieIDPin;
    		
        if( strSerieIDPin.length > 2 && strSerieIDPin.charAt( 0 ) == "!" && strSerieIDPin.charAt( strSerieIDPin.length-1 ) == "!" )
        {
	        if( objEvent.IsArray( strSerieIDPin.substr( 1, strSerieIDPin.length-2 ) ) )
		        objSerieIDPin = objEvent.GetParameterArray( strSerieIDPin.substr( 1, strSerieIDPin.length-2 ) );
	        else
		        objSerieIDPin = objEvent.GetParameter( strSerieIDPin.substr( 1, strSerieIDPin.length-2 ) );
        }
        
        if( objSerieIDPin == undefined )
            objSerieIDPin = null;
    		
        var objOppositeAxisCompareValue = strOppositeAxisCompareValue;
			
        if( strOppositeAxisCompareValue.length > 2 && strOppositeAxisCompareValue.charAt( 0 ) == "!" && strOppositeAxisCompareValue.charAt( strOppositeAxisCompareValue.length-1 ) == "!" )
        {
	        if( objEvent.IsArray( strOppositeAxisCompareValue.substr( 1, strOppositeAxisCompareValue.length-2 ) ) )
		        objOppositeAxisCompareValue = objEvent.GetParameterArray( strOppositeAxisCompareValue.substr( 1, strOppositeAxisCompareValue.length-2 ) );
	        else
		        objOppositeAxisCompareValue = objEvent.GetParameter( strOppositeAxisCompareValue.substr( 1, strOppositeAxisCompareValue.length-2 ) );
        }
			
        if( objOppositeAxisCompareValue == undefined )
	        objOppositeAxisCompareValue = null;
		
        var objOppositeAxisCompareIDPin = strOppositeAxisCompareIDPin;
			
        if( strOppositeAxisCompareIDPin.length > 2 && strOppositeAxisCompareIDPin.charAt( 0 ) == "!" && strOppositeAxisCompareIDPin.charAt( strOppositeAxisCompareIDPin.length-1 ) == "!" )
        {
	        if( objEvent.IsArray( strOppositeAxisCompareIDPin.substr( 1, strOppositeAxisCompareIDPin.length-2 ) ) )
		        objOppositeAxisCompareIDPin = objEvent.GetParameterArray( strOppositeAxisCompareIDPin.substr( 1, strOppositeAxisCompareIDPin.length-2 ) );
	        else
		        objOppositeAxisCompareIDPin = objEvent.GetParameter( strOppositeAxisCompareIDPin.substr( 1, strOppositeAxisCompareIDPin.length-2 ) );
        }
			
        if( objOppositeAxisCompareIDPin == undefined )
	        objOppositeAxisCompareIDPin = null;
		
        var objDecrementBy = strDecrementBy;
			
        if( strDecrementBy.length > 2 && strDecrementBy.charAt( 0 ) == "!" && strDecrementBy.charAt( strDecrementBy.length-1 ) == "!" )
        {
	        if( objEvent.IsArray( strDecrementBy.substr( 1, strDecrementBy.length-2 ) ) )
		        objDecrementBy = objEvent.GetParameterArray( strDecrementBy.substr( 1, strDecrementBy.length-2 ) );
	        else
		        objDecrementBy = objEvent.GetParameter( strDecrementBy.substr( 1, strDecrementBy.length-2 ) );
        }
			
        if( objDecrementBy == undefined )
	        objDecrementBy = null;

	    var objSliceLabel = strSliceLabel;
				
        if( strSliceLabel.length > 2 && strSliceLabel.charAt( 0 ) == "!" && strSliceLabel.charAt( strSliceLabel.length-1 ) == "!" )
        {
	        if( objEvent.IsArray( strSliceLabel.substr( 1, strSliceLabel.length-2 ) ) )
		        objSliceLabel = objEvent.GetParameterArray( strSliceLabel.substr( 1, strSliceLabel.length-2 ) );
	        else
		        objSliceLabel = objEvent.GetParameter( strSliceLabel.substr( 1, strSliceLabel.length-2 ) );
        }
		
        if( objSliceLabel == undefined  )
	        objSliceLabel = null;
	        
        if( objElement.object == null )
        { 
            var strXml = "<root>";
            
            strXml += "<MethodCall Action=\"DecrementValue\">";
            
            strXml += "<Parameter Name=\"DecrementBy\">";
            strXml += Array2DataItemXml( objDecrementBy );
            strXml += "</Parameter>";
            
            if( objOppositeAxisCompareIDPin != null && objOppositeAxisCompareIDPin != "" )
            {
                strXml += "<Parameter Name=\"OppositeAxisCompareIDPin\">";
                strXml += Array2DataItemXml( objOppositeAxisCompareIDPin );
                strXml += "</Parameter>";
            }
            
            if( objOppositeAxisCompareValue != null && objOppositeAxisCompareValue != "" )
            {
                strXml += "<Parameter Name=\"OppositeAxisCompareValue\">";
                strXml += Array2DataItemXml( objOppositeAxisCompareValue );
                strXml += "</Parameter>";
            }
            
            if( objSliceLabel != null && objSliceLabel != "" )
            {
                strXml += "<Parameter Name=\"SliceLabel\">";
                strXml += Array2DataItemXml( objSliceLabel );
                strXml += "</Parameter>";
            }
            
            if( objSerieIDPin != null && objSerieIDPin != "" )
            {
                strXml += "<Parameter Name=\"SerieIDPin\">";
                strXml += Array2DataItemXml( objSerieIDPin );
                strXml += "</Parameter>";
            }
            
            if( strAxis != null && strAxis != "" )
            {
                strXml += "<Parameter Name=\"Axis\">";
                strXml += Array2DataItemXml( strAxis );
                strXml += "</Parameter>";
            }
            
            strXml += "</MethodCall>";
            
            strXml += "</root>";

            var iframe = null;
            
            if( navigator.appName == "Microsoft Internet Explorer" )
            {
                iframe = document.createElement("<iframe onload=\"ChartCtlCallback(this);\" style=\"display:none;\" src=\"/Chart.aspx\"></iframe>");
                
                iframe.MethodCallXml = strXml;
                iframe.id = GenerateGuid();
                iframe.ObjectID = objElement.ObjectID;
                iframe.FrameID = objElement.id;
                
                document.body.appendChild(iframe);
            }
            else
            {
                iframe = document.createElement("iframe");

	            iframe.setAttribute( "onload", "ChartCtlCallback(this);" );
    	        
	            document.body.appendChild(iframe);
    	        
    	        iframe.setAttribute( "ObjectID", objElement.getAttribute( "ObjectID" ) );
    	        iframe.setAttribute( "FrameID", objElement.id );
	            iframe.setAttribute( "style", "display:none;" );
	            iframe.setAttribute( "id", GenerateGuid() );
	            iframe.setAttribute( "MethodCallXml", strXml );
	            iframe.setAttribute( "src", "Chart.aspx" );
            }
        }
        else
        {	
            if (objElement.type == "FlashChartElement")
            {
                if (objSerieIDPin != null && typeof(objSerieIDPin) == "AutomationArray")
                    objSerieIDPin = objSerieIDPin.Values;
                    
                if (objOppositeAxisCompareValue != null && typeof(objOppositeAxisCompareValue) == "AutomationArray")
                    objOppositeAxisCompareValue = objOppositeAxisCompareValue.Values;
                    
                if (objOppositeAxisCompareIDPin != null && typeof(objOppositeAxisCompareIDPin) == "AutomationArray")
                    objOppositeAxisCompareIDPin = objOppositeAxisCompareIDPin.Values;
                    
                if (objDecrementBy != null && typeof(objDecrementBy) == "AutomationArray")
                    objDecrementBy = objDecrementBy.Values;
                    
                objElement.DecrementValue(objSerieIDPin, objOppositeAxisCompareValue, objOppositeAxisCompareIDPin, objDecrementBy);
            }
	        else if( objElement.ChartTypeString == "LinearGauge" )
	        {
		        objElement.BaseGauge.DecrementValue( objDecrementBy );
	        }
	        else if( objElement.ChartTypeString == "Pie" )
	        {	
	            objElement.Pie.DecrementValue( objOppositeAxisCompareIDPin, objSliceLabel, objDecrementBy );
	        }
	        else if( objElement.ChartTypeString == "Line" )
	        {  
	            if( strAxis == "X" )
		            objElement.BaseChart.DecrementXValue( objSerieIDPin, objOppositeAxisCompareValue, objOppositeAxisCompareIDPin, objDecrementBy );
	            else
		            objElement.BaseChart.DecrementYValue( objSerieIDPin, objOppositeAxisCompareValue, objOppositeAxisCompareIDPin, objDecrementBy );
            }
	    }
    }
    catch( e )
    {
	    if( e.description != "'BaseChart' is null or not an object" )
		    alert( "Chart : " + e.message );
    }
}

function ChartCtlCallback( obj )
{    
    try
    {
        var objIFrame = null;
    
        if( navigator.appName == "Microsoft Internet Explorer" )
            objIFrame = document.frames( obj.id );
        else
        {
            for( var i = 0; i < window.frames.length; i++ )
            {
                if( window.frames[i].frameElement.id == obj.id )
                {
                    objIFrame = window.frames[i];
                    break;
                }
            }
        }
        
        var objForm = objIFrame.document.getElementById( "ChartForm" );
        
        if( objIFrame.document.getElementById("MethodCallXml").value == "" )
        {
            objIFrame.document.getElementById("MethodCallXml").value = obj.getAttribute( "MethodCallXml" );
            objIFrame.document.getElementById("ChartGuid").value = obj.getAttribute( "ObjectID" );
            objForm.submit();
        }
        else
        {
            document.body.removeChild(obj);
            var img = document.getElementById( "imgChart_" + obj.getAttribute( "FrameID" ) );
            img.setAttribute( "src", "/Chart.aspx?ChartGuid=" + img.getAttribute( "ObjectID" ) + "&Width=" + img.clientWidth + "&Height=" + img.clientHeight + "&UniqueGuid=" + GenerateGuid() );
        }
    }
    catch( e )
    {
        alert( "ChartCtlCallback : " + e.message );
    }
}

function Chart_OnClick()
{
    alert("To be implemented in ChartControl.js::Chart_OnClick()");
}
