//20110126
var drawGraph, drawType;
(function(){
	//check enable draw method
	var _drawType;
	if(document.createElement("canvas").getContext){
		_drawType = 2;
	}
	else if(document.namespaces&&document.namespaces.add){
		_drawType=1;
	}
	
	
	function Point(x,y){
		this.x=x;
		this.y=y;
	}
	function Graph(e){
		if(!e) return;
		e.innerHTML="";
		this.container=e;
		this.type = _drawType;
		if(this.type == 2){
			this.canvas=document.createElement("canvas");
			this.canvas.width=e.offsetWidth;
			this.canvas.height=e.offsetHeight;
			this.container.appendChild(this.canvas);
		}
		else if(this.type == 1){
			if(!document.namespaces.v){
				document.namespaces.add("v","urn:schemas-microsoft-com:vml");
			//	document.createStyleSheet().addRule("v\\:*","behavior: url(#default#VML);");
				document.createStyleSheet().addRule("v\\:line","behavior: url(#default#VML);");
				document.createStyleSheet().addRule("v\\:rect","behavior: url(#default#VML);");
				document.createStyleSheet().addRule("v\\:roundrect","behavior: url(#default#VML);");
				document.createStyleSheet().addRule("v\\:oval","behavior: url(#default#VML);");
				document.createStyleSheet().addRule("v\\:fill","behavior: url(#default#VML);");
				document.createStyleSheet().addRule("v\\:stroke","behavior: url(#default#VML);");
				document.createStyleSheet().addRule("v\\:polygon","behavior: url(#default#VML);");
				document.createStyleSheet().addRule("v\\:polyline","behavior: url(#default#VML);");
			}
		}
		this.color="#3333ff";
		this.fillcolor="#ddddff";
		this.fillcolor2="#ffffff";
		this.opacity=1.0;
		this.width=1;
	}
	Graph.prototype.draw=function(p){
		var h=this.container.offsetHeight;
		if(this.type==1){
			var polyline=document.createElement("v:polyline");
			polyline.stroked=true;
			polyline.filled=false;
			var points=new Array();
			for(var i=0;i<p.length;i++){
				points.push(p[i].x);
				points.push(p[i].y);
			}
			polyline.points=points.join(",");
			this.container.appendChild(polyline);
    		var stroke=document.createElement("v:stroke");
	    	stroke.weight=this.width+"px";
	    	stroke.color=this.color;
			stroke.opacity=this.opacity;
			polyline.appendChild(stroke);
			
			var polygon = document.createElement("v:polyline");
			polygon.stroked = false;
			polygon.filled = true;
			points.push(p[p.length-1].x);
			points.push(h);
			points.push(p[0].x);
			points.push(h);
			points.push(p[0].x);
			points.push(p[0].y);
			polygon.points = points.join(",");
			this.container.appendChild(polygon);
			var fill = document.createElement("v:fill");
			if(this.fillcolor2){
				fill.color2 = this.fillcolor;
				fill.color = this.fillcolor2;
				fill.type = "gradient";
			}else{
				fill.color = this.fillcolor;
			}
			fill.opacity=this.opacity;
			polygon.appendChild(fill);
			
		}else if(this.type==2){
			var ctx=this.canvas.getContext("2d");
			ctx.strokeStyle=this.color;
			ctx.lineWidth=this.width;
			if(this.width&&this.opacity){
				ctx.globalAlpha=this.opacity;
				ctx.beginPath();
				ctx.moveTo(p[0].x,p[0].y);
				
				var min = h;
				for(var i=1;i<p.length;i++){
					ctx.lineTo(p[i].x,p[i].y);
					min = Math.min(min,p[i].y);
				}
				ctx.stroke();
				
				ctx.lineTo(p[p.length-1].x,h);
				ctx.lineTo(p[0].x,h);
				ctx.lineTo(p[0].x,p[0].y);
				
				if(this.fillcolor2){
					var grd = ctx.createLinearGradient(0, min, 0, h);
			    	grd.addColorStop(0, this.fillcolor);
			    	grd.addColorStop(1.0, this.fillcolor2);
			    	ctx.fillStyle = grd;
				}else{
					ctx.fillStyle = this.fillcolor;
				}
				ctx.fill();
			}
		}
	};
	drawGraph=function(){
		var a=document.getElementsByTagName("div");
		for(var i=0;i<a.length;i++){
			if(a[i].className!="graph") continue;
			var aa=a[i].innerHTML.split(/\s+/);
			var g=new Graph(a[i]);
			var l=new Array();
			var min=100000,max=-100000;
			for(var j=0;j<aa.length;j++){
				if(!aa[j]) continue;
				var ll=parseInt(aa[j]);
				min=Math.min(min,ll);
				max=Math.max(max,ll);
				l.push(ll);
			}
			max=Math.ceil(max/1000.0)*1000;
			min=Math.floor(min/1000.0)*1000;
			if(max==min) max=min+1000;
			var p=new Array();
			for(var j=0;j<l.length;j++){
				p.push(new Point(j*(a[i].offsetWidth-2)/(l.length-1),(a[i].offsetHeight-2)*(max-l[j])/(max-min)));
			}
			if(p.length){
				g.draw(p);
			}
			a[i].className="graph done";
		}
	};
	//export drawType as drawGraph's property
	drawType = _drawType;
	
	if(window.addEventListener){
		window.addEventListener('load',drawGraph,false);
	}else if(window.attachEvent){
		window.attachEvent('onload',drawGraph);
	}
})();

