/*
Copyright (C) 2008 Webyog Softworks Private Limited
This file is a part of Visifire Charts.
Visifire is a free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
You should have received a copy of the GNU General Public License
along with Visifire Charts. If not, see .
If GPL is not suitable for your products or company, Webyog provides Visifire
under a flexible commercial license designed to meet your specific usage and
distribution requirements. If you have already obtained a commercial license
from Webyog, you can use this file under those license terms.
*/
if(!window.Visifire)
{
// Visifire class
window.Visifire = function(pXapPath, pId, pWidth, pHeight, pBackground)
{
this.id = null;
this.logLevel = 1; // Determines whether to log or not.
this.xapPath = "Visifire.xap"; // Default is taken as Visifire.xap in the same directory.
this.targetElement = null;
this.dataXml = null;
this.dataUri = null;
this.listeners = null;
this.elements = new Array("Chart", "DataPoint", "Title", "AxisX", "AxisY", "Legend");
this.events = new Array("MouseLeftButtonDown", "MouseLeftButtonUp", "MouseMove", "MouseEnter", "MouseLeave");
this.windowless = false;
this.width = null;
this.height = null;
this.background = null;
// pId not present
if(Number(pId))
{
if(pHeight)
this.background = pHeight;
pHeight = pWidth;
pWidth = pId;
}
else // pId present
{
this.id = pId;
if(pBackground)
this.background = pBackground;
}
if(pXapPath)
this.xapPath = pXapPath;
if(pWidth)
this.width = pWidth;
if(pHeight)
this.height = pHeight;
this._uThisObject = this;
this.index = ++Visifire._slCount;
}
window.Visifire._slCount = 0;
Visifire.prototype.setWindowlessState = function(pWindowless)
{
if(pWindowless != null)
{
this.windowless = Boolean(pWindowless);
}
}
Visifire.prototype._getSlControl = function ()
{
var _uThisObject = this;
if(_uThisObject.id != null)
{
var slControl = document.getElementById(_uThisObject.id);
return slControl;
}
return null;
}
Visifire.prototype.isLoaded = function()
{
var slControl = this._getSlControl();
try
{
if(slControl.Content.wrapper != null)
return true;
}
catch(ex)
{
return false;
}
}
Visifire.prototype.isDataLoaded = function()
{
var slControl = this._getSlControl();
return slControl.Content.wrapper.IsDataLoaded;
}
Visifire.prototype.setSize = function(pWidth,pHeight)
{
var slControl = this._getSlControl();
if(slControl != null)
{
slControl.width = pWidth;
slControl.height = pHeight;
slControl.Content.wrapper.Resize(pWidth,pHeight);
}
else
{
this.width = pWidth;
this.height = pHeight;
}
}
Visifire.prototype.setDataXml = function(pDataXml)
{
var slControl = this._getSlControl();
if(slControl != null && this.dataXml != null)
{
slControl.Content.wrapper.AddDataXML(pDataXml);
}
this.dataXml = pDataXml;
}
Visifire.prototype.setDataUri = function(pDataUri)
{
var slControl = this._getSlControl();
if(slControl != null && this.dataUri != null)
{
slControl.Content.wrapper.AddDataUri(pDataUri);
}
this.dataUri = pDataUri;
}
Visifire.prototype.setLogLevel = function(level)
{
if(level != null)
{
this.logLevel = level;
}
}
Visifire.prototype._isString = function()
{
if (typeof arguments[0] == 'string') return true;
if (typeof arguments[0] == 'object')
{
var criterion = arguments[0].constructor.toString().match(/string/i);
return (criterion != null);
}
return false;
}
Visifire.prototype._validateChartElement = function(pElement)
{
if(this.logLevel != 0)
{
for(var i = 0; i < this.elements.length; i++)
if(this.elements[i] == pElement)
return;
alert('Error occurred while attaching event.\nUnknown element "' + pElement + '".');
}
}
Visifire.prototype._validateEvent = function(pEvent)
{
if(this.logLevel != 0)
{
for(var i = 0; i < this.events.length; i++)
if(this.events[i] == pEvent)
return;
alert('Error occurred while attaching event.\nUnsupported event type "' + pEvent + '".');
}
}
Visifire.prototype.attachEvent = function(pElement, pEvent, pCallBack)
{
var _uThisObject = this;
_uThisObject._validateChartElement(pElement);
_uThisObject._validateEvent(pEvent);
if(pEvent && pElement && pCallBack)
{
if(_uThisObject.listeners == null)
_uThisObject.listeners = {};
if(_uThisObject.listeners[pEvent] == null)
_uThisObject.listeners[pEvent] = new Array();
if(!window["dispatchEvent" + _uThisObject.index])
window["dispatchEvent" + _uThisObject.index] = function(args)
{
if(_uThisObject.listeners[args.Event] != null)
{
var listener = _uThisObject.listeners[args.Event];
if(listener.length != 0)
{
for (var i = 0; i < listener.length; i++)
{
if ((listener[i].event == args.Event) && (listener[i].element == args.Element))
{
args.ControlId = _uThisObject.id;
if(_uThisObject._isString(listener[i].fire))
eval(listener[i].fire + "(args)");
else
listener[i].fire(args);
}
}
}
}
};
_uThisObject.listeners[pEvent].push({element: pElement, event: pEvent, fire: pCallBack});
}
}
Visifire.prototype._render = function(pTargetElement)
{
var _uThisObject = this;
var width;
var height;
_uThisObject.targerElement = (typeof(pTargetElement) == "string")?document.getElementById(pTargetElement):pTargetElement;
if(_uThisObject.width != null)
width = _uThisObject.width;
else if(_uThisObject.targerElement.offsetWidth != 0)
width = _uThisObject.targerElement.offsetWidth;
else
width = 500;
if(_uThisObject.height != null)
height = _uThisObject.height;
else if(_uThisObject.targerElement.offsetHeight != 0)
height = _uThisObject.targerElement.offsetHeight;
else
height = 300;
if(!_uThisObject.id)
{
_uThisObject.id = 'VisifireControl' + _uThisObject.index;
}
var html = '';
this.targerElement.innerHTML = html;
}
Visifire.prototype._reRender = function(pSlControl)
{
pSlControl.Content.wrapper.ReRenderChart();
}
Visifire.prototype.render = function(pTargetElement)
{
var slControl = this._getSlControl();
if(slControl == null)
{
this._render(pTargetElement);
}
else
{
this._reRender(slControl);
}
}
}