var xa = xb = nn = '';

function change(e, color){
	var el=window.event? event.srcElement: e.target
	if (el.tagName=="INPUT"&&el.type=="button") {
		el.style.backgroundColor=color
	}
}

function import(){
	xa = document.getElementById("csv_xa").value.split(",");
	xb = document.getElementById("csv_xb").value.split(",");

	$j.each(xa, function(n,val) {
		xa[n] = parseInt(parseFloat(xa[n]));
	});

	$j.each(xb, function(n,val) {
		xb[n] = parseInt(parseFloat(xb[n]));
	});
	
	nn = (xa.length > xb.length)? xa.length : xb.length;

	change_mode('import');
	change_mode('calculate');		
	return false;
}

function more_stats(xdata,sample){
	var SKStd = 0.0;
	var KUStd = 0.0;
	var Std = 0;
	var MAD = 0;

	Sum = 0;
	$j.each(xdata, function(n,val) {
		Sum += val;
	});
	
	N = xdata.length
	x = Sum/N;
	y = Math.round(10000000*x);
	z = y/10000000;

	for(i=0; i < N; i++){
		Std += Math.pow((xdata[i] - x), 2);
		MAD +=  Math.abs(xdata[i] - x);
		SKStd += Math.pow((xdata[i] - x), 3);
		KUStd += Math.pow((xdata[i] - x), 4);
	}
	MAD = MAD/N;

	V1 = Std/(N-1);
	V = Math.round(10000000*V1)/10000000;
	b = Math.sqrt(V);
	SD = Math.round(10000000*b)/10000000;

	//calculate Skewness
	SK1 = SKStd/(N-1);
	b3 = Math.pow( (b), 3);
	SK2 = SK1/(b3);
	SK = Math.round(10000000*SK2)/10000000;

	//calculate Kurtosis
	KU1 = KUStd/(N-1);
	b = Math.sqrt(V);
	b4 = Math.pow((b),4);
	KU2 = KU1/(b4);
	KU = Math.round(10000000*KU2)/10000000;

	CV = Math.abs(b/x);
	var CV2 = CV + "";
	if(CV2.indexOf("nfinity") != -1)  {
		CV1 = "No CV";
	}else{
		CV1 = Math.round(1000000*CV)/1000000;
	}

	if(sample == 'a'){
		document.ska.elements[0].value = SK;
		document.aku.elements[0].value = KU;
		document.acv.elements[0].value = CV1;
	}else{
		document.skb.elements[0].value = SK;
		document.bku.elements[0].value = KU;
		document.bcv.elements[0].value = CV1;
	}
}

function get_stats(){
	more_stats(xa,'a');
	more_stats(xb,'b');
	plot();
}

function calc() {
	var k = nn;
	var nx = 0;
	var ny = 0;
	var sumx = 0;
	var sumy = 0;
	var sumsqx = 0;
	var sumsqy = 0;
	var sumxy = 0;
	var p1 = 1*0;
	for (var i=0; i<k; i++) {
		if (xa[i] > 0) {nx=nx+1}
	}
	document.nx.elements[0].value = nx;

	for (var i=0; i<k; i++) {
		if (xb[i] > 0) {ny=ny+1}
	}
	document.ny.elements[0].value = ny;


	for (var i=0; i<nx; i++) {
		sumx = sumx + (xa[i]*1)
	}
	document.sumx.elements[0].value = sumx;

	for (var i=0; i<ny; i++) {
		sumy = sumy + (xb[i]*1)
	}
	document.sumy.elements[0].value = sumy;

	for (var i=0; i<nx; i++) {
		sumsqx = sumsqx + (xa[i]*xa[i])
	}
	document.sumsqx.elements[0].value = Math.round(sumsqx*10000)/10000;

	for (var i=0; i<ny; i++) {
		sumsqy = sumsqy + (xb[i]*xb[i])
	}
	document.sumsqy.elements[0].value = Math.round(sumsqy*10000)/10000;
	var ssx =  sumsqx-((sumx*sumx)/nx);
	var ssy =  sumsqy-((sumy*sumy)/ny);
	var meanx = sumx/nx;
	var meany = sumy/ny;
	document.meanx.elements[0].value = Math.round(meanx*10000)/10000;
	document.meany.elements[0].value = Math.round(meany*10000)/10000;

	document.ssx.elements[0].value = Math.round(ssx*10000)/10000;
	document.ssy.elements[0].value = Math.round(ssy*10000)/10000;
	document.varx.elements[0].value = Math.round((ssx/(nx-1))*10000)/10000;
	document.vary.elements[0].value = Math.round((ssy/(ny-1))*10000)/10000;
	document.sdx.elements[0].value = (Math.round((Math.sqrt(ssx/(nx-1)))*10000)/10000).toFixed(2);
	document.sdy.elements[0].value = (Math.round((Math.sqrt(ssy/(ny-1)))*10000)/10000).toFixed(2);

	$j('#summary_sdx').html(document.sdx.elements[0].value);
	$j('#summary_sdy').html(document.sdy.elements[0].value);

	document.sdy.elements[0].value = (Math.round((Math.sqrt(ssy/(ny-1)))*10000)/10000).toFixed(2);

	var df = 1*(nx+ny-2);

	var prepool = ((ssx+ssy)/df);
	var pool = (prepool/nx)+(prepool/ny);

	$j('#meanx').html(meanx.toFixed(2));
	$j('#meany').html(meany.toFixed(2));

	var t = (meanx - meany)/Math.sqrt(pool);
	t = Math.round(t*100)/100;
	$j('#summary_t').html(t.toFixed(2));

	document.diff.elements[0].value =Math.round((meanx - meany)*10000)/10000 ;
	$j('#meandiff').html((Math.round((meanx - meany)*10000)/10000).toFixed(2));


	document.t.elements[0].value = t;
	if(t>0){
 		document.t.elements[0].value = "+"+document.t.elements[0].value;
	}

	document.df.elements[0].value = df;
	$j('#summary_df').html(df);

	document.pa.elements[0].value = Tcall(buzz(eval(t),eval(df)));
	document.pb.elements[0].value = Tcall(buzz(eval(t),eval(df)))/2;
	
	if(document.pa.elements[0].value<.0001||document.pa.elements[0].value>1.0||document.pa.elements[0].value<0.05){
		$j('#one_tailed_value').html('<.0001');
		$j('#one_tailed_result').html('<span style="color:green"><b><i>Statistical Significance</i></b></span>');
	}else{
		$j('#one_tailed_value').html(Tcall(buzz(eval(t),eval(df))));
		$j('#one_tailed_result').html('<span style="color:red"><b><i>No Statistical Significance</i></b></span>');
	}

	if(document.pb.elements[0].value<.0001||document.pb.elements[0].value>1.0||document.pa.elements[0].value<0.05){
		$j('#two_tailed_value').html('<.0001');
		$j('#two_tailed_result').html('<span style="color:green"><b><i>Statistical Significance</i></b></span>');
	}else{
		$j('#two_tailed_value').html(Tcall(buzz(eval(t),eval(df)))/2);
		$j('#two_tailed_result').html('<span style="color:red"><b><i>No Statistical Significance</i></b></span>');
	}

	get_stats();
}

function wipe() {
	var k = nn;
	document.nx.elements[0].value = "";
	document.ny.elements[0].value = "";
	document.sumx.elements[0].value = "";
	document.sumy.elements[0].value = "";
	document.sumsqx.elements[0].value = "";
	document.sumsqy.elements[0].value = "";
	document.varx.elements[0].value = "";
	document.vary.elements[0].value = "";
	document.ssx.elements[0].value = "";
	document.ssy.elements[0].value = "";
	document.meanx.elements[0].value = "";
	document.meany.elements[0].value = "";
	document.diff.elements[0].value = "";
	document.t.elements[0].value = "";
	document.df.elements[0].value = "";
	document.sdx.elements[0].value = "";
	document.sdy.elements[0].value = "";
	document.pa.elements[0].value = "";
	document.pb.elements[0].value = "";
}

function plot(){
  ymin = xa.min() < xb.min() ? xa.min()-(xa.min()/4) : xb.min()-(xb.min()/4);
  ymax = xa.max() < xb.max() ? xa.max()+(xa.max()/4) : xb.max()+(xb.max()/4);
  yplots = xa.toString()+','+xb.toString();
  xplots = '';
  for(i=0;i<xa.length-1;i++){
	  xplots += '1,';
  }
  for(i=0;i<xb.length-2;i++){
	  xplots += '2,';
  }
  xplots += 2;
  $j('#agraph').html('<img src="http://chart.apis.google.com/chart?cht=s&chs=300x225&chd=t:'+xplots+'|'+yplots+'&chxt=x,y&chxl=0:|0|1|2|1:|'+Math.round(ymin)+'|'+Math.round(ymax)+'&chds=0,2,'+Math.round(ymin)+','+Math.round(ymax)+'&chm=o,0066FF,0,-2.0,6" />');
}

function compareNumbers(a, b){
   return a - b;
}     

Array.prototype.unique =
  function() {
    var a = [];
    var l = this.length;
    for(var i=0; i<l; i++) {
      for(var j=i+1; j<l; j++) {
        // If this[i] is found later in the array
        if (this[i] === this[j])
          j = ++i;
      }
      a.push(this[i]);
    }
    return a;
  };


  function change_mode(mode){
	switch(mode){
		case 'import':			
			$j("#import").hide();
			$j('#stats_controls').show();
		break;
		case 'calculate':
			$j('#stats_controls').hide();
			$j('#instructions').hide();
			$j('#import').hide();
			calc();
			//$j('#stats_summary').show();
			$j('#stats_results').show();
			$j('#stats_results_summary').show();
			$j('#agraph').show();
		break;
		case 'reset':
			$j('#instructions').show();
			$j('#import').show();
			wipe();
			$j('#stats_controls').hide();
			$j('#stats_results_summary').hide();
			$j('#stats_results').hide();
			$j('#agraph').hide();
			$j('#two_tailed_result').html('');
			$j('#two_tailed_result').html('');
		break;
	}
  }

Array.prototype.max = function() {
	var max = this[0];
	var len = this.length;
	for (var i = 1; i < len; i++) if (this[i] > max) max = this[i];
	return max;
}

Array.prototype.min = function() {
	var min = this[0];
	var len = this.length;
	for (var i = 1; i < len; i++) if (this[i] < min) min = this[i];
	return min;
}

var pi=Math.PI;
var pj2=pi/2;
var pj4=pi/4;
var pi2=2*pi;
var e = Math.E;
var exx = 1.10517091807564;
var dgr=180/pi;

function buzz(t,n) {
	t=Math.abs(t);
	var rt=t/Math.sqrt(n);
	var fk=Math.atan(rt);
    if(n==1) { return 1-fk/pj2 }
    var ek=Math.sin(fk); var dk=Math.cos(fk);
	if((n%2)==1)
        { return 1-(fk+ek*dk*zip(dk*dk,2,n-3,-1))/pj2 }
        else
        { return 1-ek*zip(dk*dk,1,n-3,-1) }
}
function zip(q,i,j,b) {
	var zz=1;
	var z=zz;
	var k=i;
while(k<=j) { zz=zz*q*k/(k-b); z=z+zz; k=k+2 }
    return z;
}
function Abuzz(p,n) { var v=0.5; var dv=0.5; var t=0
    while(dv>1e-6) { t=1/v-1; dv=dv/2; if(buzz(t,n)>p) { v=v-dv } else { v=v+dv } }
    return t;
    }


function Tcall(x) { 
var zk;
if(x>=0) { zk=''+(x+0.0000005) } else { zk=''+(x-0.0000005) }
return zk.substring(0,zk.indexOf('.')+7);
}

$j(document).ready( function() {
	$j('#stats_controls').hide();
	$j('#stats_results').hide();
	$j('#stats_results_summary').hide();
	$j('#agraph').hide();
});

