
/** Chart utils **/
var loading_chart= '{ "elements": [ { "type": "bar", "values": [ 1 ], "colour": "#ffffff" } ], "bg_colour": "#FFFFFF", "title": { "text": "Loading...", "style": "{font-size: 20px; font-family: Arial; font-weight: bold; color: #A2ACBA; text-align: center;}" }, "tooltip": { "shadow": false, "stroke": 0, "colour": "#ffffff", "background": "#ffffff", "title": "{font-size: 14px; color: #ffffff}" }, "x_axis": { "colour": "#ffffff", "grid-colour": "#ffffff", "steps": 1, "labels": { "labels": "", "colour": "#ffffff" } }, "y_axis": { "colour": "#ffffff", "grid-colour": "#ffffff", "min": 0, "max": 10, "steps": 20, "labels": { "text": "" } } } }';

function findSWF(movieName)
{
	if (navigator.appName.indexOf("Microsoft")!= -1)
	{
    	return window[movieName];
  	} else {
	    return document[movieName];
	}
}


/** Datatable plugins **/
(function($) {
	/*
	 * Function: fnGetColumnData
	 * Purpose:  Return an array of table values from a particular column.
	 * Returns:  array string: 1d data array 
	 * Inputs:   object:oSettings - dataTable settings object. This is always the last argument past to the function
	 *           int:iColumn - the id of the column to extract the data from
	 *           bool:bUnique - optional - if set to false duplicated values are not filtered out
	 *           bool:bFiltered - optional - if set to false all the table data is used (not only the filtered)
	 *           bool:bIgnoreEmpty - optional - if set to false empty values are not filtered from the result array
	 * Author:   Benedikt Forchhammer <b.forchhammer /AT\ mind2.de>
	 */
	$.fn.dataTableExt.oApi.fnGetColumnData = function ( oSettings, iColumn, bUnique, bFiltered, bIgnoreEmpty ) {
		// check that we have a column id
		if ( typeof iColumn == "undefined" ) return new Array();
		
		// by default we only wany unique data
		if ( typeof bUnique == "undefined" ) bUnique = true;
		
		// by default we do want to only look at filtered data
		if ( typeof bFiltered == "undefined" ) bFiltered = true;
		
		// by default we do not wany to include empty values
		if ( typeof bIgnoreEmpty == "undefined" ) bIgnoreEmpty = true;
		
		// list of rows which we're going to loop through
		var aiRows;
		
		// use only filtered rows
		if (bFiltered == true) aiRows = oSettings.aiDisplay; 
		// use all rows
		else aiRows = oSettings.aiDisplayMaster; // all row numbers

		// set up data array	
		var asResultData = new Array();
		
		for (var i=0,c=aiRows.length; i<c; i++) {
			iRow = aiRows[i];
			var aData = this.fnGetData(iRow);
			var sValue = aData[iColumn];
			
			// ignore empty values?
			if (bIgnoreEmpty == true && sValue.length == 0) continue;

			// ignore unique values?
			else if (bUnique == true && jQuery.inArray(sValue, asResultData) > -1) continue;
			
			// else push the value onto the result data array
			else asResultData.push(sValue);
		}
		
		return asResultData;
	}}(jQuery));


jQuery.fn.dataTableExt.oSort['title-numeric-asc']  = function(a,b) {
	var x = a.match(/title='(.*?)'/)[1];
	var y = b.match(/title='(.*?)'/)[1];
	x = parseFloat( x );
	y = parseFloat( y );
	return ((x < y) ? -1 : ((x > y) ?  1 : 0));
};

jQuery.fn.dataTableExt.oSort['title-numeric-desc'] = function(a,b) {
	var x = a.match(/title='(.*?)'/)[1];
	var y = b.match(/title='(.*?)'/)[1];
	x = parseFloat( x );
	y = parseFloat( y );
	return ((x < y) ?  1 : ((x > y) ? -1 : 0));
};


jQuery.fn.dataTableExt.oSort['formatted-num-desc'] = function(x,y)
{
	 x = x.replace(/[^\d\-\.\/]/g,'');
	 y = y.replace(/[^\d\-\.\/]/g,'');
	 if(x.indexOf('/')>=0)x = eval(x);
	 if(y.indexOf('/')>=0)y = eval(y);
	 return x/1 - y/1;
}

jQuery.fn.dataTableExt.oSort['formatted-num-asc'] = function(x,y)
{
	 x = x.replace(/[^\d\-\.\/]/g,'');
	 y = y.replace(/[^\d\-\.\/]/g,'');
	 if(x.indexOf('/')>=0)x = eval(x);
	 if(y.indexOf('/')>=0)y = eval(y);
	 return y/1 - x/1;
}

jQuery.fn.dataTableExt.oSort['mysql-date-desc'] = function(x,y)
{
	x = x.replace(/-/g, '' );
	y = y.replace(/-/g,'');
	if(x.indexOf('/')>=0)x = eval(x);
	if(y.indexOf('/')>=0)y = eval(y);
	return x/1 - y/1;
}

jQuery.fn.dataTableExt.oSort['mysql-date-asc'] = function(x,y)
{
	 x = x.replace(/-/g,'');
	 y = y.replace(/-/g,'');
	 if(x.indexOf('/')>=0)x = eval(x);
	 if(y.indexOf('/')>=0)y = eval(y);
	 return y/1 - x/1;
}

jQuery.fn.dataTableExt.oApi.fnReloadAjax = function ( oSettings, sNewSource, callback )
{
	oSettings.sAjaxSource = sNewSource;
	this.fnClearTable( this );
	this.oApi._fnProcessingDisplay( oSettings, true );
	var that = this;

	$.getJSON( oSettings.sAjaxSource, null, function(json) {
		/* Got the data - add it to the table */
		for ( var i=0 ; i<json.aaData.length ; i++ )
		{
			that.oApi._fnAddData( oSettings, json.aaData[i] );
		}

		oSettings.aiDisplay = oSettings.aiDisplayMaster.slice();
		that.fnDraw( that );
		that.oApi._fnProcessingDisplay( oSettings, false );
		eval( callback );
	} );
}
