/* http://keith-wood.name/gChart.html
   Google Chart interface for jQuery v1.1.1.
   See API details at http://code.google.com/apis/chart/.
   Written by Keith Wood (kbwood@virginbroadband.com.au) September 2008.
   Dual licensed under the GPL (http://dev.jquery.com/browser/trunk/jquery/GPL-LICENSE.txt) and 
   MIT (http://dev.jquery.com/browser/trunk/jquery/MIT-LICENSE.txt) licenses. 
   Please attribute the author if you use it. */
(function($){function GChart(){this._defaults={width:0,height:0,title:'',titleColor:'',titleSize:0,backgroundColor:null,chartColor:null,legend:'',type:'pie3D',encoding:'',series:[this.series('Hello',[60]),this.series('World',[40])],dataLabels:[],axes:[],ranges:[],markers:[],minValue:0,maxValue:100,gridSize:[],gridLine:[],extension:{},barWidth:null,barSpacing:null,barGroupSpacing:null,barZeroPoint:null,mapArea:'world',mapRegions:[],mapDefaultColor:'white',mapColors:['aaffaa','green'],qrECLevel:null,qrMargin:null}};var K='gChart';var L={aqua:'008080',black:'000000',blue:'0000ff',fuchsia:'ff00ff',gray:'808080',green:'008000',lime:'00ff00',maroon:'800000',navy:'000080',olive:'808000',orange:'ffa500',purple:'800080',red:'ff0000',silver:'c0c0c0',teal:'008080',transparent:'00000000',white:'ffffff',yellow:'ffff00'};var M={line:'lc',lineXY:'lxy',sparkline:'ls',barHoriz:'bhs',barVert:'bvs',barHorizGrouped:'bhg',barVertGrouped:'bvg',pie:'p',pie3D:'p3',venn:'v',scatter:'s',radar:'r',radarCurved:'rs',map:'t',meter:'gom',qrCode:'qr'};var N={arrow:'a',circle:'o',cross:'x',diamond:'d',down:'v',horizontal:'h',plus:'c',sparkfill:'B',sparkline:'D',square:'s',text:'t',vertical:'V'};var O={behind:-1,normal:0,above:1};var P={diagonalDown:-45,diagonalUp:45,horizontal:0,vertical:90};var Q={left:-1,center:0,right:1};var R='ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';var S='ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-.';$.extend(GChart.prototype,{markerClassName:'hasGChart',calculate:-0.123,setDefaults:function(a){extendRemove(this._defaults,a||{})},series:function(a,b,c,d,e,f,g,h){if(isArray(a)){h=g;g=f;f=e;e=d;d=c;c=b;b=a;a=''}if(typeof c!='string'){h=f;g=e;f=d;e=c;d=null;c=null}else if(d!=null&&typeof d!='string'){h=g;g=f;f=e;e=d;d=null}if(isArray(f)){h=f;g=e;f=null;e=null}return{label:a,data:b||[],color:c||'',fillColor:d,minValue:e,maxValue:f,lineThickness:g,lineSegments:h}},seriesFromCsv:function(h){var j=[];if(!isArray(h)){h=h.split('\n')}if(!h.length){return j}var k=false;var l=[];var m=[];var n=['label','color','fillColor','minValue','maxValue','lineThickness','lineSegmentLine','lineSegmentGap'];$.each(h,function(i,c){var d=c.split(',');if(i==0&&isNaN(parseFloat(d[0]))){$.each(d,function(i,a){if($.inArray(a,n)>-1){l[i]=a}else if(a.match(/^x\d+$/)){m[i]=a}})}else{var e={};var f=[];var g=null;$.each(d,function(i,a){if(l[i]){var b=$.inArray(l[i],n);e[l[i]]=(b>2?$.gchart._numeric(a,0):a)}else if(m[i]){g=(a?$.gchart._numeric(a,-1):null);k=true}else{var y=$.gchart._numeric(a,-1);f.push(g!=null?[g,y]:y);g=null}});if(e.lineSegmentLine!=null&&e.lineSegmentGap!=null){e.lineSegments=[e.lineSegmentLine,e.lineSegmentGap];e.lineSegmentLine=e.lineSegmentGap=null}j.push($.extend(e,{data:f}))}});return(k?this.seriesForXYLines(j):j)},seriesFromXml:function(e){if($.browser.msie&&typeof e=='string'){var f=new ActiveXObject('Microsoft.XMLDOM');f.validateOnParse=false;f.resolveExternals=false;f.loadXML(e);e=f}e=$(e);var g=[];var h=false;e.find('series').each(function(){var b=$(this);var c=[];b.find('point').each(function(){var a=$(this);var x=a.attr('x');if(x!=null){h=true;x=$.gchart._numeric(x,-1)}y=$.gchart._numeric(a.attr('y'),-1);c.push(x?[x,y]:y)});var d=b.attr('lineSegments');if(d){d=d.split(',')}g.push({label:b.attr('label'),data:c,color:b.attr('color'),fillColor:b.attr('fillColor'),minValue:b.attr('minValue'),maxValue:b.attr('maxValue'),lineThickness:b.attr('lineThickness'),lineSegments:d})});return(h?this.seriesForXYLines(g):g)},_numeric:function(a,b){a=parseFloat(a);return(isNaN(a)?b:a)},lineXYSeries:function(a){return this.seriesForXYLines(a)},seriesForXYLines:function(a){var b=[];for(var i=0;i<a.length;i++){var c=!isArray(a[i].data[0]);var d=(c?[null]:[]);var e=[];for(var j=0;j<a[i].data.length;j++){if(c){e[e.length]=a[i].data[j]}else{d[d.length]=a[i].data[j][0];e[e.length]=a[i].data[j][1]}}b.push($.gchart.series(a[i].label,d,a[i].color,a[i].fillColor,a[i].minValue,a[i].maxValue,a[i].lineThickness,a[i].lineSegments));b.push($.gchart.series(a[i].label,e,'',a[i].fillColor,a[i].minValue,a[i].maxValue,a[i].lineThickness,a[i].lineSegments))}return b},scatter:function(a,b){var c=[[],[],[]];for(var i=0;i<a.length;i++){c[0][i]=a[i][0];c[1][i]=a[i][1];c[2][i]=a[i][2]||100}return $.extend({},b||{},{type:'scatter',series:[$.gchart.series('',c[0]),$.gchart.series('',c[1]),$.gchart.series('',c[2])]})},venn:function(a,b,c,d,e,f,g,h){return $.extend({},h||{},{type:'venn',series:[$.gchart.series([a,b,c,d,e,f,g])]})},meter:function(a,b,c,d){if(typeof a!='string'){d=c;c=b;b=a;a=''}return $.extend({},d||{},{type:'meter',maxValue:c||100,dataLabels:[a||''],series:[$.gchart.series([b])]})},map:function(a,b,c,d,e,f){if(typeof a=='object'){f=e;e=d;d=c;c=b;b=a;a='world'}if(typeof c=='object'){f=c;c=null}else if(typeof d=='object'){f=d;d=null}else if(typeof e=='object'){f=e;e=null}var g=[];var h=[];var i=0;for(var j in b){g[i]=j;h[i]=b[j];i++}return $.extend({},f||{},{type:'map',mapArea:a,mapRegions:g,mapDefaultColor:c||$.gchart._defaults.mapDefaultColor,mapColors:[d||$.gchart._defaults.mapColors[0],e||$.gchart._defaults.mapColors[1]],series:[$.gchart.series('',h)]})},qrCode:function(a,b,c,d){var e={};if(typeof a=='object'){e=a}else{e={dataLabels:[a],encoding:b,qrECLevel:c,qrMargin:d}}e.type='qrCode';if(e.text){e.dataLabels=[e.text];e.text=null}return e},color:function(r,g,b,a){var c=function(a){if(typeof a=='number'&&(a<0||a>255)){throw'Value out of range (0-255) '+a;}};var d=function(a){return(a.length==1?'0':'')+a};if(typeof r=='string'){c(g);return(L[r]||r)+(g?d(g.toString(16)):'')}c(r);c(g);c(b);c(a);return d(r.toString(16))+d(g.toString(16))+d(b.toString(16))+(a?d(a.toString(16)):'')},gradient:function(a,b,c){var d=[];if(isArray(b)){var e=1/(b.length-1);for(var i=0;i<b.length;i++){d[d.length]=[b[i],Math.round(i*e*100)/100]}}else{d=[[b,0],[c,1]]}return{angle:a,colorPoints:d}},stripe:function(a,b){var c=[];var d=Math.round(100/b.length)/100;for(var i=0;i<b.length;i++){c[c.length]=[b[i],d]}return{angle:a,striped:true,colorPoints:c}},range:function(a,b,c,d){if(typeof a=='string'){d=c;c=b;b=a;a=false}return{vertical:a,color:b,start:c,end:d}},marker:function(a,b,c,d,e,f,g){if(typeof e=='string'){g=e;e=null}return{shape:a,color:b,series:c,item:d||-1,size:e||10,priority:(f!=null?f:0),text:g}},axis:function(a,b,c,d,e,f,g,h){if(typeof b=='number'){h=f;g=e;f=d;e=c;d=b;c=null;b=null}else if(!isArray(c)){h=g;g=f;f=e;e=d;d=c;c=null}if(typeof d=='string'){h=f;g=e;f=d;e=null;d=null}if(typeof g=='number'){h=g;g=null}return{axis:a,labels:b,positions:c,range:(d!=null?[d,e]:null),color:f,alignment:g,size:h}},_attachGChart:function(a,b){a=$(a);if(a.is('.'+this.markerClassName)){return}a.addClass(this.markerClassName);b=b||{};var c=b.width||parseInt(a.css('width'));var d=b.height||parseInt(a.css('height'));var e=$.extend({},this._defaults,b,{width:c,height:d});$.data(a[0],K,e);this._updateChart(a[0],e)},_changeGChart:function(a,b){var c=$.data(a,K);extendRemove(c||{},b||{});$.data(a,K,c);this._updateChart(a,c)},_destroyGChart:function(a){a=$(a);if(!a.is('.'+this.markerClassName)){return}a.removeClass(this.markerClassName).empty();$.removeData(a[0],K)},_updateChart:function(l,m){var n=M[m.type]||'p3';var o=this['_'+m.encoding+'Encoding']||this['_textEncoding'];var p='';for(var i=0;i<m.dataLabels.length;i++){p+='|'+escape(m.dataLabels[i]||'')}p=(p.length==m.dataLabels.length?'':p);var q='';var r='';var s='';for(var i=0;i<m.series.length;i++){q+='|'+escape(m.series[i].label||'');if(n!='lxy'||i%2==0){r+=','+this.color(m.series[i].color||'')}if(n.substr(0,1)=='l'&&m.series[i].lineThickness&&isArray(m.series[i].lineSegments)){s+='|'+m.series[i].lineThickness+','+m.series[i].lineSegments.join(',')}}var t=function(a,b){return(b?a+b:'')};var u=function(){m.width=Math.min(m.width,1000);m.height=Math.min(m.height,1000);if(n!='t'&&m.width*m.height>300000){m.height=Math.floor(300000/m.width)}return(n!='t'?'&amp;chs='+m.width+'x'+m.height:'&amp;chs='+Math.min(440,m.width)+'x'+Math.min(220,m.height))};var v=function(){return t('&amp;choe=',m.encoding)+(m.qrECLevel||m.qrMargin?'&amp;chld='+(m.qrECLevel?m.qrECLevel.charAt(0):'l')+(m.qrMargin!=null?'|'+m.qrMargin:''):'')+(p?'&amp;chl='+p.substr(1):'')};var w=function(){return'&amp;chtm='+(m.mapArea||'world')+'&amp;chd='+o.apply($.gchart,[m])+(m.mapRegions&&m.mapRegions.length?'&amp;chld='+m.mapRegions.join(''):'')+'&amp;chco='+$.gchart.color(m.mapDefaultColor)+','+$.gchart.color(m.mapColors[0]||'aaffaa')+','+$.gchart.color(m.mapColors[1]||'green')};var x=function(){var a=m.series;var b='';if(m.series.length>1){var c=$.gchart.series([]);for(var i=0;i<m.series.length;i++){c.data[c.data.length]=m.series[i].data[0];b+='|'+escape(m.series[i].label||'')}m.series=[c]}var d=o.apply($.gchart,[m]);m.series=a;return'&amp;chd='+d+(p?'&amp;chl='+p.substr(1):(b?'&amp;chl='+b.substr(1):''))};var y=function(){return'&amp;chd='+o.apply($.gchart,[m])+(p?'&amp;chl='+p.substr(1):'')};var z=function(){return(n.substr(0,1)!='b'?'':(m.barWidth==null?'':'&amp;chbh='+m.barWidth+(m.barSpacing==null?'':','+m.barSpacing+(m.barGroupSpacing==null?'':','+m.barGroupSpacing)))+(m.barZeroPoint==null?'':'&amp;chp='+m.barZeroPoint))};var A=function(){return(n.charAt(0)=='l'&&s?'&amp;chls='+s.substr(1):'')};var B=function(){return(r.length>m.series.length?'&amp;chco='+r.substr(1):'')};var C=function(){return t('&amp;chtt=',escape(m.title))+(m.titleColor||m.titleSize?'&amp;chts='+$.gchart.color(m.titleColor)+','+(m.titleSize||20):'')};var D=function(){var a='';var b='';var c='';var d='';var e='';for(var i=0;i<m.axes.length;i++){var f=(typeof m.axes[i]=='string'?m.axes[i].charAt(0):m.axes[i].axis.charAt(0));a+=','+(f=='b'?'x':(f=='l'?'y':f));if(m.axes[i].labels){var g='';for(var j=0;j<m.axes[i].labels.length;j++){g+='|'+escape(m.axes[i].labels[j]||'')}b+=(g?'|'+i+':'+g:'')}if(m.axes[i].positions){var h='';for(var j=0;j<m.axes[i].positions.length;j++){h+=','+m.axes[i].positions[j]}c+=(h?'|'+i+h:'')}if(m.axes[i].range){d+='|'+i+','+m.axes[i].range[0]+','+m.axes[i].range[1]}if(m.axes[i].color){var k=m.axes[i].alignment||0;e+='|'+i+','+$.gchart.color(m.axes[i].color||'gray')+','+(m.axes[i].size||10)+','+(Q[k]!=null?Q[k]:k)}}return(!a?'':'&amp;chxt='+a.substr(1)+(!b?'':'&amp;chxl='+b.substr(1))+(!c?'':'&amp;chxp='+c.substr(1))+(!d?'':'&amp;chxr='+d.substr(1))+(!e?'':'&amp;chxs='+e.substr(1)))};var E=function(a,b){if(b==null){return''}if(typeof b=='string'){return a+',s,'+$.gchart.color(b)}var c=a+',l'+(b.striped?'s':'g')+','+(P[b.angle]!=null?P[b.angle]:b.angle);for(var i=0;i<b.colorPoints.length;i++){c+=','+$.gchart.color(b.colorPoints[i][0])+','+b.colorPoints[i][1]}return c};var F=function(){var a=E('|bg',m.backgroundColor)+E('|c',m.chartColor);return(a?'&amp;chf='+a.substr(1):'')};var G=function(){return(m.gridSize.length==0?'':'&amp;chg='+m.gridSize[0]+','+m.gridSize[1]+(m.gridLine.length==0?'':','+m.gridLine[0]+','+m.gridLine[1]))};var H=function(){var a='';for(var i=0;i<m.markers.length;i++){var b=N[m.markers[i].shape]||m.markers[i].shape;a+='|'+b+(b=='t'?m.markers[i].text:'')+','+$.gchart.color(m.markers[i].color)+','+m.markers[i].series+','+(m.markers[i].item=='all'?-1:m.markers[i].item)+','+m.markers[i].size+','+(O[m.markers[i].priority]!=null?O[m.markers[i].priority]:m.markers[i].priority)}for(var i=0;i<m.ranges.length;i++){a+='|'+(m.ranges[i].vertical?'R':'r')+','+$.gchart.color(m.ranges[i].color)+',0,'+m.ranges[i].start+','+(m.ranges[i].end||m.ranges[i].start+0.005)}for(var i=0;i<m.series.length;i++){a+=(!m.series[i].fillColor?'':'|b,'+$.gchart.color(m.series[i].fillColor)+','+i+','+(i+1)+',0')}return(a?'&amp;chm='+a.substr(1):'')};var I=function(){return(!m.legend||q.length<=m.series.length?'':'&amp;chdl='+q.substr(1)+t('&amp;chdlp=',m.legend.charAt(0)))};var J=function(){var a='';for(var b in m.extension){a+='&amp;'+b+'='+escape(m.extension[b])}return a};$(l).html('<img src="http://chart.apis.google.com/chart?cht='+n+u()+(n=='qr'?v():(n=='t'?w():(n.charAt(0)=='p'?x():y())))+z()+A()+B()+C()+D()+F()+G()+H()+I()+J()+'"/>')},_textEncoding:function(a){var b=(a.minValue==$.gchart.calculate?this._calculateMinValue(a.series):a.minValue);var c=(a.maxValue==$.gchart.calculate?this._calculateMaxValue(a.series):a.maxValue);var d='';for(var i=0;i<a.series.length;i++){d+='|'+this._textEncode(a.series[i],b,c)}return't:'+d.substr(1)},_textEncode:function(a,b,c){b=(a.minValue!=null?a.minValue:b);c=(a.maxValue!=null?a.maxValue:c);var d=100/(c-b);var e='';for(var i=0;i<a.data.length;i++){e+=','+(a.data[i]==null||isNaN(a.data[i])?'-1':Math.round(d*(a.data[i]-b)*100)/100)}return e.substr(1)},_scaledEncoding:function(a){var b=(a.minValue==$.gchart.calculate?this._calculateMinValue(a.series):a.minValue);var c=(a.maxValue==$.gchart.calculate?this._calculateMaxValue(a.series):a.maxValue);var d='';var e='';for(var i=0;i<a.series.length;i++){d+='|'+this._scaledEncode(a.series[i],b);e+=','+(a.series[i].minValue!=null?a.series[i].minValue:b)+','+(a.series[i].maxValue!=null?a.series[i].maxValue:c)}return't:'+d.substr(1)+'&amp;chds='+e.substr(1)},_scaledEncode:function(a,b){b=(a.minValue!=null?a.minValue:b);var c='';for(var i=0;i<a.data.length;i++){c+=','+(a.data[i]==null||isNaN(a.data[i])?(b-1):a.data[i])}return c.substr(1)},_simpleEncoding:function(a){var b=(a.minValue==$.gchart.calculate?this._calculateMinValue(a.series):a.minValue);var c=(a.maxValue==$.gchart.calculate?this._calculateMaxValue(a.series):a.maxValue);var d='';for(var i=0;i<a.series.length;i++){d+=','+this._simpleEncode(a.series[i],b,c)}return's:'+d.substr(1)},_simpleEncode:function(a,b,c){b=(a.minValue!=null?a.minValue:b);c=(a.maxValue!=null?a.maxValue:c);var d=61/(c-b);var e='';for(var i=0;i<a.data.length;i++){e+=(a.data[i]==null||isNaN(a.data[i])?'_':R.charAt(Math.round(d*(a.data[i]-b))))}return e},_extendedEncoding:function(a){var b=(a.minValue==$.gchart.calculate?this._calculateMinValue(a.series):a.minValue);var c=(a.maxValue==$.gchart.calculate?this._calculateMaxValue(a.series):a.maxValue);var d='';for(var i=0;i<a.series.length;i++){d+=','+this._extendedEncode(a.series[i],b,c)}return'e:'+d.substr(1)},_extendedEncode:function(b,c,d){c=(b.minValue!=null?b.minValue:c);d=(b.maxValue!=null?b.maxValue:d);var e=4095/(d-c);var f=function(a){return S.charAt(a/64)+S.charAt(a%64)};var g='';for(var i=0;i<b.data.length;i++){g+=(b.data[i]==null||isNaN(b.data[i])?'__':f(Math.round(e*(b.data[i]-c))))}return g},_calculateMinValue:function(a){var b=99999999;for(var i=0;i<a.length;i++){var c=a[i].data;for(var j=0;j<c.length;j++){b=Math.min(b,(c[j]==null?99999999:c[j]))}}return b},_calculateMaxValue:function(a){var b=-99999999;for(var i=0;i<a.length;i++){var c=a[i].data;for(var j=0;j<c.length;j++){b=Math.max(b,(c[j]==null?-99999999:c[j]))}}return b}});function extendRemove(a,b){$.extend(a,b);for(var c in b){if(b[c]==null){a[c]=null}}return a}function isArray(a){return(a&&a.constructor==Array)}$.fn.gchart=function(a){var b=Array.prototype.slice.call(arguments,1);if(a=='current'){return $.gchart['_'+a+'GChart'].apply($.gchart,[this[0]].concat(b))}return this.each(function(){if(typeof a=='string'){$.gchart['_'+a+'GChart'].apply($.gchart,[this].concat(b))}else{$.gchart._attachGChart(this,a)}})};$.gchart=new GChart()})(jQuery);
