
if(!Array.indexOf){Array.prototype.indexOf=function(obj){for(var i=0;i<this.length;i++){if(this[i]==obj){return i;}}
return-1;}}
Array.prototype.unique=function(b){var a=[],i,l=this.length;for(i=0;i<l;i++){if(a.indexOf(this[i],0,b)<0){a.push(this[i]);}}
return a;};$().ajaxStop($.unblockUI);$(function(){$("select#range_start").change(updateGraphingRange);$("select#range_end").change(updateGraphingRange);$('#dialog').dialog({autoOpen:false,width:300,buttons:{"See help page":function(){$(this).dialog("close");window.open(baseUrl+'tutorial.php');},"OK":function(){$(this).dialog("close");}}});OFCwidth=$("#section_mid").width()-30;$("#resize").width(OFCwidth);$("#resize").css("height","290px");$("#resize").css("padding","2px 12px 12px 0px");$("#resize").resizable({handles:"se"});var opts='';for(var i=0;i<dataNames.length;++i){opts+='<option value="'+urlNames[i]+'">'+dataNames[i]+'</option>';}
$("select#choose_data").html(opts);$('#choose_data').val(urlWanted);$("select#choose_data").change(function(){window.location=baseUrl+'chart/'+($(this).val());});$("div.colorpicker").hide();$("div.colorpicker").css("position","absolute");$("div.colorpicker").css("z-index",30);$(document).bind("click",function(e){$tgt=$(e.target);if(!$tgt.hasClass("wheel")){$("div.colorpicker").hide();}});$("button.bg-default").click(function(){updateBgColor('#f8f3d3');});$("button.bg-white").click(function(){updateBgColor('#ffffff');});$(".grid-steps, .label-steps, .text-direction").change(function(event){updateXAxisControl();});$("#y_axis_left_control button").click(function(event){updateYAxisLeftControl();});$("#y_axis_right_control button").click(function(event){updateYAxisRightControl();});$(".remove-box").click(function(event){var $tgt=$(event.target);var index=$tgt.parents(".control-unit").prevAll().size();removeGraph(index);});$(".chart-type").change(function(event){var $tgt=$(event.target);var index=$tgt.parents(".control-unit").prevAll().size();updateChartType(index);});$(".chart-axis").change(function(event){var $tgt=$(event.target);var index=$tgt.parents(".control-unit").prevAll().size();updateChartAxis(index);});$(".chart-name").keyup(function(event){var $tgt=$(event.target);var index=$tgt.parents(".control-unit").prevAll().size();updateChartName(index);});$(".chart-transformation").change(function(event){var $tgt=$(event.target);var index=$tgt.parents(".control-unit").prevAll().size();var dataRange=calculateDataRange();var i=dataRange.start;var j=dataRange.end;populateCurrentYValues(i,j,index);loadData();hideLoadingMsg();});$("input.graph-title").keyup(function(event){if(data["title"]["text"]!=$(event.target).val()){data["title"]["text"]=$(event.target).val();loadData();}});$("input.graph-footer").keyup(function(event){if(data["x_legend"]["text"]!=$(event.target).val()){data["x_legend"]["text"]=$(event.target).val();loadData();}});$(".color").click(function(event){$("div.colorpicker").hide();var $tgt=$(event.target);var colorpicker=$tgt.parent().find("div.colorpicker");colorpicker.css("left",$tgt.position().left);colorpicker.css("top",$tgt.position().top+$tgt.height()+3);colorpicker.css("border","1px solid #999");colorpicker.css("background-color","#999");colorpicker.show();$.farbtastic(colorpicker).setColor($tgt.val());event.stopPropagation();});$("button.search-input").click(function(){var dataName=$("#search_input").val();addGraph(dataName);$("#search_input").val("");});$("button.create-data").click(function(){var index=data['elements'].length;var orig_exp=$("input.create-data").val();var exp=orig_exp.toUpperCase();exp=exp.replace(/ /g,'');if(validateExpression(exp,index)){var letters=exp.match(/[A-Z]/g);if(letters!=null){letters=letters.unique();}
showLoadingMsg('Creating new data ...');var result_is_null=false;for(var i=0;i<all_data['elements'][0]['values'].length;i++){if(letters!=null){for(var k=0;k<letters.length;++k){window[letters[k]]=all_data['elements'][letters[k].charCodeAt(0)-65]['values'][i];if(window[letters[k]]==null){result_is_null=true;}}}
try{var result=null;if(!result_is_null){result=eval(exp);}
if(isNaN(result)){result=null;}
new_data['elements'][0]['values'][i]=result;}catch(err){hideLoadingMsg();showWarningMsg('Error','syntax error with your expression "'+exp+'"');return;}}
new_data['elements'][0]['text']=orig_exp;new_data['elements'][0]['display_unit']=null;addDataToGraph(new_data);}});$("button.save-image").click(function(){showLoadingMsg('Creating PNG image ...');var url=baseUrl+'create_image.php';var ofc=findSWF("my_chart");$.post(url,ofc.get_img_binary(),function(response){var redirect=baseUrl+'download.php?name='+response.filename;$(document.createElement('iframe')).attr('src',redirect).hide().appendTo('#iframe_container');hideLoadingMsg();},"json");});$("button.make-link").click(function(){showLoadingMsg('Creating link ...');var url=baseUrl+'create_link.php';$.post(url,{data:JSON.stringify(data),desc:$('#link_desc').val(),title:data["title"]["text"]},function(response){var link=baseUrl+'link/'+response.link_id;$("a.save-link").html(link);$("a.save-link").attr("href",link);hideLoadingMsg();},"json");});$(".chart-header-text").click(function(){var arrow=$(this).children(".ui-icon");if(arrow.hasClass('ui-icon-circle-triangle-e')){arrow.removeClass('ui-icon-circle-triangle-e');arrow.addClass('ui-icon-circle-triangle-s');}else{arrow.removeClass('ui-icon-circle-triangle-s');arrow.addClass('ui-icon-circle-triangle-e');}
$(this).parent().next().toggle("fast");}).next().hide();$("#graph_control").tabs();$("#graph_control").width(OFCwidth);$(".make-link").removeAttr("disabled");$(".save-image").removeAttr("disabled");$('.help-tip').bt({positions:'right'});});function ofc_ready()
{$("#resize").width(OFCwidth-1);}
function open_flash_chart_data()
{populateRangeSelectors();populateStepSelectors($("select.grid-steps"),1,24,1);populateStepSelectors($("select.label-steps"),1,24,1);setDefaultSelectorsRange();setDefaultGraphControl();setDefaultGraphingRange();setElementColor(data['elements'][0],0);populateControlUnit(0);return JSON.stringify(data);}
function populateStepSelectors($element,min,max,interval){var options='';for(var i=min;i<=max;i=i+interval){options+='<option value="'+i+'">'+i+'</option>';}
$element.html(options);}
function getCurrentFrequencyCode(){var code=all_data['elements'][0]['frequency'].substring(0,1);code=code.toUpperCase();if(code!='Y'&&code!='Q'&&code!='M'){code='M';}
return code;}
function populateRangeSelectors(){var length=all_data['x_axis']['labels']['labels'].length;var pre_optgroup='';var cur_optgroup='';var options='';frequencyCode=getCurrentFrequencyCode();if(frequencyCode=='Y'){for(var i=0;i<length;i++){var val=all_data['x_axis']['labels']['labels'][i];options+='<option value="'+val+'">'+val+'</option>';}}else{for(var i=0;i<length;i++){var val=all_data['x_axis']['labels']['labels'][i];cur_optgroup=val.substring(0,4);if(pre_optgroup==''){options+='<optgroup label="'+cur_optgroup+'">';}else if(cur_optgroup!=pre_optgroup){options+='</optgroup><optgroup label="'+cur_optgroup+'">';}
options+='<option value="'+val+'">'+displayDate(val)+'</option>';pre_optgroup=cur_optgroup;}}
$("select#range_start").html(options);$("select#range_end").html(options);setAutoComplete("search_input","results",dataNames);}
function validateExpression(exp,index){var allowedChars=/^[A-Z\(\)\+\-\*\/\.\d]+$/;if(exp==''){showWarningMsg('Info','You can type in an arithmetic expression to generate a new data series. Please see the <a href="'+baseUrl+'tutorial.php">tutorial page</a> for details');return false;}
if(!exp.match(allowedChars)){showWarningMsg('Error','illegal characters: only numbers, letters A to Z, + - * / and parens are allowed');return false;}
var letters=exp.match(/[A-Z]/g);if(letters!=null){for(var i=0;i<letters.length;i++){var charcode=letters[i].charCodeAt(0);if(charcode-65>=index){showWarningMsg('Error','you only have '+index+' data series so "'+String.fromCharCode(charcode)+'" does not exist');return false;}}}
return true;}
function populateControlUnit(index){if(index==0){control_unit_template=$(".control-unit:first").clone(true);$(".control-unit:last .remove-box").hide();$(".control-unit:last li:last").hide();}else if(index>0){var x=$(".control-unit:last");control_unit_template.clone(true).insertAfter(x.get());$(".control-unit:last .remove-box").show();$(".control-unit:last li:last").show();}
setDefaultChartType(index);setDefaultTransformation(index);var header=data["elements"][index]["text"];var pos=header.indexOf('(');if(pos!=-1){header=header.substring(0,pos-1);}
header='<span class="ui-icon ui-icon-circle-triangle-e" style="float: left;"></span>'+header;$(".control-unit:last").show();$(".control-unit:last .chart-header-text").html(header);$(".control-unit:last .chart-name").val(data["elements"][index]["text"]);$(".control-unit:last .chart-axis").val(data["elements"][index]["axis"]);var colorDiv=$(".control-unit:last div.colorpicker");var colorInput=$(".control-unit:last input.color");var currentColor=data["elements"][index]["colour"];colorInput.val(currentColor);colorInput.css("background-color",currentColor);$.farbtastic(colorDiv,function(color){colorInput.val(color);colorInput.css("background-color",color);var index=colorInput.parents(".control-unit").prevAll().size();updateChartColor(index);});}
function displayDate(val){return val;}
function setDefaultGraphingRange(){var x=data['x_axis']['labels']['labels'];var num_to_cut=x.length-default_range;if(num_to_cut>0){x.splice(0,num_to_cut);var num_series=data['elements'].length;for(var k=0;k<num_series;k++){data['elements'][k]['values'].splice(0,num_to_cut);}}}
function setDefaultSelectorsRange(){var num=$("#range_start option").length;$("#range_start option:eq("+(num-default_range)+")").attr("selected","selected");$("#range_end option:last").attr("selected","selected");}
function setDefaultGraphControl(){$("#graph_control input.graph-title").val(data["title"]["text"]);$("#graph_control input.graph-footer").val(data["x_legend"]["text"]);var colorDiv=$("#graph_control div.colorpicker");var colorInput=$("#graph_control input.color");var currentColor=data["bg_colour"];colorInput.val(currentColor);colorInput.css("background-color",currentColor);$.farbtastic(colorDiv,function(color){colorInput.val(color);colorInput.css("background-color",color);updateBgColor(color);});$("select.grid-steps").val(data["x_axis"]["steps"]);data["x_axis"]["labels"]["visible-steps"]=4;$("select.label-steps").val(data["x_axis"]["labels"]["visible-steps"]);$("#y_axis_left_control > .max").val(data['y_axis']['max']);$("#y_axis_left_control > .min").val(data['y_axis']['min']);$("#y_axis_left_control > .steps").val(data['y_axis']['steps']);disableYRightAxisControl();}
function disableYRightAxisControl(){$("#y_axis_right_control > .update-axis").attr("disabled","disabled");$("#y_axis_right_control > input").val("");$("#y_axis_right_control > input").attr("disabled","disabled");$(".control-unit li:last").hide();}
function enableYRightAxisControl(){$("#y_axis_right_control > .update-axis").attr("disabled","");$("#y_axis_right_control > input").attr("disabled","");}
function setDefaultChartType(index){var x=$(".chart-type:eq("+index+") option[value='"+default_chart_type+"']");x.attr("selected","selected");data['elements'][index]['type']=x.val();all_data['elements'][index]['type']=x.val();}
function setDefaultTransformation(index){var default_transformation='none';var x=$(".chart-transformation:eq("+index+") option[value='"+default_transformation+"']");x.attr("selected","selected");data['elements'][index]['transformation']=x.val();all_data['elements'][index]['transformation']=x.val();}
function updateYAxisLeftControl(){var min=parseInt($("#y_axis_left_control > .min").val());var max=parseInt($("#y_axis_left_control > .max").val());var steps=parseInt($("#y_axis_left_control > .steps").val());if(data["y_axis"]["min"]!=min||data["y_axis"]["max"]!=max||data["y_axis"]["steps"]!=steps){data["y_axis"]["min"]=min;data["y_axis"]["max"]=max;data["y_axis"]["steps"]=steps;loadData();}}
function updateYAxisRightControl(){var min=parseInt($("#y_axis_right_control > .min").val());var max=parseInt($("#y_axis_right_control > .max").val());var steps=parseInt($("#y_axis_right_control > .steps").val());if(data["y_axis_right"]["min"]!=min||data["y_axis_right"]["max"]!=max||data["y_axis_right"]["steps"]!=steps){data["y_axis_right"]["min"]=min;data["y_axis_right"]["max"]=max;data["y_axis_right"]["steps"]=steps;loadData();}}
function updateXAxisControl(){if(data["x_axis"]["steps"]!=$("select.grid-steps").val()||data["x_axis"]["labels"]["visible-steps"]!=$("select.label-steps").val()||data["x_axis"]["labels"]["rotate"]!=$("select.text-direction").val()){data["x_axis"]["steps"]=parseInt($("select.grid-steps").val());data["x_axis"]["labels"]["visible-steps"]=parseInt($("select.label-steps").val());data["x_axis"]["labels"]["rotate"]=$("select.text-direction").val();loadData();}}
function updateBgColor(color){if(data['bg_colour']!=color){$("#graph_control input.color").val(color);$("#graph_control input.color").css("background-color",color);;data['bg_colour']=color;loadData();}}
function removeGraph(index){data["elements"].splice(index,1);all_data["elements"].splice(index,1);$(".control-unit:eq("+index+") > *").remove();$(".control-unit:eq("+index+")").remove();if(data["elements"].length==1){$(".control-unit:first .remove-box").hide();}
runYAxisSmartAlgo();loadData();}
function updateLeftRightAxisControl(){var num=$("div.control-unit").length;if(num==1){$(".control-unit .chart-axis").val('left');data['elements'][0]['axis']='left';}
for(var i=0;i<num;++i){$(".control-unit:eq("+i+") .chart-axis").val(data['elements'][i]['axis']);}
$("#y_axis_left_control > .max").val(data['y_axis']['max']);$("#y_axis_left_control > .min").val(data['y_axis']['min']);$("#y_axis_left_control > .steps").val(data['y_axis']['steps']);var shouldRemove=true;for(var i=0;i<num;++i){if(data["elements"][i]["axis"]=='right'){shouldRemove=false;break;}}
if(shouldRemove){removeYRightAxis();}else{$(".control-unit li:last").show();$("#y_axis_right_control > .max").val(data['y_axis_right']['max']);$("#y_axis_right_control > .min").val(data['y_axis_right']['min']);$("#y_axis_right_control > .steps").val(data['y_axis_right']['steps']);enableYRightAxisControl();}}
function addGraph(dataName){var i=dataNames.indexOf(dataName);if(i<0)return;showLoadingMsg();var reply=$.ajax({url:"data.php?urlName="+urlNames[i]+"&curFre="+frequencyCode,async:false}).responseText;var data_to_add=JSON.parse(reply);addDataToGraph(data_to_add);}
function makeNumeric(str){str.replace(/Jan/,'01');str.replace(/Feb/,'02');str.replace(/Mar/,'03');str.replace(/Apr/,'04');str.replace(/May/,'05');str.replace(/Jun/,'06');str.replace(/Jul/,'07');str.replace(/Aug/,'08');str.replace(/Sep/,'09');str.replace(/Oct/,'10');str.replace(/Nov/,'11');str.replace(/Dev/,'12');return str;}
function addDataToGraph(data_to_add){var oldX=all_data['x_axis']['labels']['labels'];var newX=data_to_add['x_axis']['labels']['labels'];var newY=data_to_add['elements'][0]['values'];if(makeNumeric(newX[0])>makeNumeric(oldX[0])){var num_add=oldX.indexOf(newX[0]);newX=oldX.slice(0,num_add).concat(newX);var null_array=new Array();for(var i=0;i<num_add;i++){null_array[i]=null;}
newY=null_array.concat(newY);}else if(makeNumeric(oldX[0])>makeNumeric(newX[0])){var num_cut=newX.indexOf(oldX[0]);newX.splice(0,num_cut);newY.splice(0,num_cut);}
var newXLength=newX.length;var oldXLength=oldX.length;if(oldXLength>newXLength){var num_add=oldXLength-newXLength;newX=newX.concat(oldX.slice(oldXLength-num_add,num_add));var null_array=new Array();for(var i=0;i<num_add;i++){null_array[i]=null;}
newY=newY.concat(null_array);}else if(newXLength>oldXLength){var num_cut=newXLength-oldXLength;newX.splice(newXLength-num_cut,num_cut);}
var new_index=data['elements'].length;var tmp_str1=JSON.stringify(all_data['elements'][0]);var tmp_str2=JSON.stringify(data['elements'][0]);all_data['elements'][new_index]=JSON.parse(tmp_str1);data['elements'][new_index]=JSON.parse(tmp_str2);for(var i=0;i<oldXLength;i++){all_data['elements'][new_index]['values'][i]=newY[i];}
copyMetaInfo(data_to_add['elements'][0],all_data['elements'][new_index]);copyMetaInfo(all_data['elements'][new_index],data['elements'][new_index]);setElementColor(all_data['elements'][new_index],new_index);setElementColor(data['elements'][new_index],new_index);populateControlUnit(new_index);data['elements'][new_index]['values'].splice(0);var dataRange=calculateDataRange();var i=dataRange.start;var j=dataRange.end;setDefaultTransformation(new_index);populateCurrentYValues(i,j,new_index);runYAxisSmartAlgo();if(data["elements"].length>1){$(".control-unit:first .remove-box").show();}
loadData();hideLoadingMsg();}
function setElementColor(element,index){var colors=new Array('#D19D00','#FFC30F','#FF794D','#FF4D79');element['colour']=colors[index%colors.length];}
function copyMetaInfo(fromElement,toElement){toElement['text']=fromElement['text'];toElement['display_unit']=fromElement['display_unit'];toElement['frequency']=fromElement['frequency'];toElement['x_min']=fromElement['x_min'];toElement['x_max']=fromElement['x_max'];toElement['y_min']=fromElement['y_min'];toElement['y_max']=fromElement['y_max'];}
function setYRightAxis(data_to_add,new_index){var newY=data_to_add["y_axis"];var curY=data["y_axis"];var ratio=(newY["max"]-newY["min"])/(curY["max"]-curY["min"]);if((ratio>10)||(ratio<0.1)){var y_axis_right=JSON.stringify(newY);data["y_axis_right"]=JSON.parse(y_axis_right);data["elements"][new_index]["axis"]='right';var colors=new Array('#D19D00','#FFC30F','#FF794D','#FF4D79');data["y_axis_right"]["colour"]=colors[new_index%colors.length];}else{curY["max"]=Math.max(newY["max"],curY["max"]);curY["min"]=Math.min(newY["min"],curY["min"]);}}
function findSWF(movieName){if(navigator.appName.indexOf("Microsoft")!=-1){return window[movieName];}else{return document[movieName];}}
function updateGraphingRange(index){var length=data['x_axis']['labels']['labels'].length;var currentXData=data['x_axis']['labels']['labels'];currentXData.splice(0,length);for(var k=0;k<data['elements'].length;k++){data['elements'][k]['values'].splice(0,length);}
var dataRange=calculateDataRange();var i=dataRange.start;var j=dataRange.end;for(var m=i;m<=j;++m){currentXData[m-i]=all_data['x_axis']['labels']['labels'][m];}
for(var k=0;k<all_data['elements'].length;++k){populateCurrentYValues(i,j,k);}
loadData();}
function calculateDataRange(){var start=$("#range_start option:selected").val();var end=$("#range_end option:selected").val();var i=all_data['x_axis']['labels']['labels'].indexOf(start);var j=all_data['x_axis']['labels']['labels'].indexOf(end);if(i>j){var tmp=i;i=j;j=tmp;}
var rv=new Object();rv.start=i;rv.end=j;return rv;}
function loadData(){tmp=findSWF("my_chart");x=tmp.load(JSON.stringify(data));}
function updateChartType(index){data["elements"][index]["type"]=$(".chart-type:eq("+index+")").val();loadData();hideLoadingMsg();}
function populateCurrentYValues(i,j,index){var newTrans=$(".chart-transformation:eq("+index+")").val();data["elements"][index]["transformation"]=newTrans;var min,max;data["elements"][index]['values'].splice(0);var unitPos=data['elements'][index]['text'].indexOf('(');if(unitPos!=-1){data['elements'][index]['text']=data['elements'][index]['text'].substring(0,unitPos-1);}
if(newTrans=='abs_change'||newTrans=='per_change'){if(data['elements'][index]['type'].indexOf('bar')==-1){data['elements'][index]['type']='bar_glass';$(".chart-type:eq("+index+")").val('bar_glass');}}
switch(newTrans){case'none':for(var m=i;m<=j;m++){data['elements'][index]['values'][m-i]=all_data['elements'][index]['values'][m];if(m==i){min=max=data['elements'][index]['values'][m-i];}else{min=Math.min(min,data['elements'][index]['values'][m-i]);max=Math.max(max,data['elements'][index]['values'][m-i]);}}
if(all_data['elements'][index]['display_unit']!=null){data['elements'][index]['text']+=' ('+all_data['elements'][index]['display_unit']+')';}
break;case'abs_change':for(var m=i;m<=j;m++){if(m==0){data['elements'][index]['values'][m-i]='null';}else{data['elements'][index]['values'][m-i]=all_data['elements'][index]['values'][m]-all_data['elements'][index]['values'][m-1];if(m==i+1){min=max=data['elements'][index]['values'][m-i];}else{min=Math.min(min,data['elements'][index]['values'][m-i]);max=Math.max(max,data['elements'][index]['values'][m-i]);}}}
if(all_data['elements'][index]['display_unit']==null){data['elements'][index]['text']+=' (absolute change)';}else{data['elements'][index]['text']+=' (change in '+all_data['elements'][index]['display_unit']+')';}
break;case'per_change':for(var m=i;m<=j;m++){if(m==0){data['elements'][index]['values'][m-i]='null';}else{data['elements'][index]['values'][m-i]=((all_data['elements'][index]['values'][m]/all_data['elements'][index]['values'][m-1])-1)*100;}
if(m==i+1){min=max=data['elements'][index]['values'][m-i];}else{min=Math.min(min,data['elements'][index]['values'][m-i]);max=Math.max(max,data['elements'][index]['values'][m-i]);}}
data['elements'][index]['text']+=' (percentage change)';break;default:}
if((min==max)||(min==null)||(max==null)){}else{data['elements'][index]['y_min']=min;data['elements'][index]['y_max']=max;}
runYAxisSmartAlgo();}
function runYAxisSmartAlgo(){var numCharts=data['elements'].length;if(numCharts==1){updateYAxis(data['elements'][0]['y_min'],data['elements'][0]['y_max'],'left');removeYRightAxis();updateLeftRightAxisControl();return;}
var rightAxisExists=false;var curLeftMin=data['elements'][0]['y_min'];var curLeftMax=data['elements'][0]['y_max'];for(var i=1;i<numCharts;++i){if(canHaveSameAxis(curLeftMin,curLeftMax,data['elements'][i]['y_min'],data['elements'][i]['y_max'])){curLeftMin=getmin(curLeftMin,data['elements'][i]['y_min']);curLeftMax=getmax(curLeftMax,data['elements'][i]['y_max']);data["elements"][i]["axis"]='left';}else{var curRightMin,curRightMax;if(!rightAxisExists){curRightMin=data["elements"][i]['y_min'];curRightMax=data["elements"][i]['y_max'];data["elements"][i]["axis"]='right';rightAxisExists=true;}else{var newRightMin=(data['elements'][i]['y_min']<curRightMin)?data['elements'][i]['y_min']:curRightMin;var newRightMax=(data['elements'][i]['y_max']>curRightMax)?data['elements'][i]['y_max']:curRightMax;if(canHaveSameAxis(curRightMin,curRightMax,data['elements'][i]['y_min'],data['elements'][i]['y_max'])){curRightMin=getmin(curRightMin,data["elements"][i]['y_min']);curRightMax=getmax(curRightMax,data["elements"][i]['y_max']);data["elements"][i]["axis"]='right';}else{showWarningMsg('Warning',"can't plot this data series on either the current left or right Y axes, please adjust the axes manually");}}
updateYAxis(curRightMin,curRightMax,'right');}}
updateYAxis(curLeftMin,curLeftMax,'left');updateLeftRightAxisControl();}
function canHaveSameAxis(min1,max1,min2,max2){if(min1>0&&max1>0){min1=0;}
if(min2>0&&max2>0){min2=0;}
if(min1<0&&max1<0){max1=0;}
if(min2<0&&max2<0){max2=0;}
var min=getmin(min1,min2);var max=getmax(max1,max2);var ratio=0.2;var rv=false;if((max1-min1)>=ratio*(max-min)&&(max2-min2)>=ratio*(max-min)){rv=true;}
return rv;}
function removeYRightAxis(){data['y_axis_right']=null;disableYRightAxisControl();}
function getmax(a,b){return(a>b)?a:b;}
function getmin(a,b){return(a<b)?a:b;}
function updateYAxis(min,max,which){if((min==max)||(min==null)||(max==null)){return;}
var ymin=min;var ymax=max;if(ymin>0)ymin=0;if(ymax<0)ymax=0;var interval=(ymax-ymin)/5.0;interval=parseFloat(interval.toPrecision(1));ymax=Math.ceil(ymax/interval)*interval;ymin=Math.floor(ymin/interval)*interval;if(ymax!=0&&ymin!=0){if(Math.abs(ymax)<Math.abs(ymin)){ymax=(-1)*ymin;}else{ymin=(-1)*ymax;}}
if(which=='right'){data["y_axis_right"]=JSON.parse(JSON.stringify(data["y_axis"]));data['y_axis_right']['min']=ymin;data['y_axis_right']['max']=ymax;data['y_axis_right']['steps']=interval;}else{data['y_axis']['min']=ymin;data['y_axis']['max']=ymax;data['y_axis']['steps']=interval;}}
function updateChartAxis(index){data["elements"][index]["axis"]=$(".chart-axis:eq("+index+")").val();var removeRightAxis=true;for(var i=0;i<data["elements"].length;++i){if(data["elements"][i]["axis"]=='right'){removeRightAxis=false;break;}}
if(removeRightAxis)removeYRightAxis();loadData();}
function updateChartName(index){if(data["elements"][index]["text"]!=$(".chart-name:eq("+index+")").val()){data["elements"][index]["text"]=$(".chart-name:eq("+index+")").val();loadData();}}
function updateChartColor(index){data["elements"][index]["colour"]=$(".control-unit:eq("+index+") .color").val();loadData();}
function showWarningMsg(title,msg){$("#dialog").html(msg);$('#dialog').dialog('option','title',title);$('#dialog').dialog('open');return false;}
function showLoadingMsg(msg)
{if(typeof msg=="undefined"){msg='Loading ...';}
$.blockUI({message:msg});}
function hideLoadingMsg()
{$.unblockUI();}