//-------------------------------------------------
// drawingonlist.js
//
// This file is part of PositLog.
//-------------------------------------------------

var PLG = new Object();
PLG.zoom = 1.0;

drawCommand = new Array();

//-------------------------
// Drawing
//-------------------------
function execDrawCommand(){
	if(drawCommand.length > 0){
		var cmd = drawCommand.shift();
		var cmdArray = cmd.split(",");
		if(cmdArray[0] == "shape"){
			var id = cmdArray[2] + "_" + cmdArray[3] + "_link_canvas";
			var canvas = document.getElementById(id);
			if(canvas){
				canvas.parentNode.innerHTML = "Arrow";
			}
			setTimeout("execDrawCommand()", 10);
			return;
		}
		var canvas = document.getElementById(cmdArray[0]);
		if(!canvas.getContext){
			return;
		}
		if(!canvas){
			setTimeout("execDrawCommand()", 10);
			return;
		}


		if(cmdArray[1] == "l"){
			var ctx = canvas.getContext("2d");
			ctx.strokeStyle = "#000000";
			ctx.lineWidth = 2;
			ctx.lineCap = "round";
			ctx.lineJoin = "round";

			var firstPoint = true;

			if(cb.bw.msie || cb.bw.msie7){
				var lineArray = cmdArray.slice(2).join(",").split(",l,");
				var path = "";
				var prevLineWidth = "";
				var prevStrokeStyle = "";

				for(var i=0; i<lineArray.length; i++){
					var tmpcmd = lineArray[i];
					if(tmpcmd.match(/^(?:s(.+?),)?(?:c(.+?),)?(\d+?),(\d+?),(.*)$/)){
						if(RegExp.$1){
							ctx.lineWidth = parseFloat(RegExp.$1);
						}
						if(RegExp.$2){
							ctx.strokeStyle = RegExp.$2;
						}
						if(prevLineWidth != parseFloat(RegExp.$1) || prevStrokeStyle != RegExp.$2){
							if(path != ""){
								canvas.firstChild.lastChild.path = path;
							}
							firstPoint = true;
						}
						prevLineWidth = parseFloat(RegExp.$1);
						prevStrokeStyle = RegExp.$2;

						if(firstPoint){
							firstPoint = false;
							ctx.beginPath();
							ctx.moveTo(parseInt(RegExp.$3), parseInt(RegExp.$4));
							ctx.stroke();

							var lcommand = RegExp.$5;
							path = (new String(canvas.firstChild.lastChild.path)).slice(0,-2) + lcommand;
						}
						else{
							var lcommand = RegExp.$5;
							path += " m " + RegExp.$3 + "," + RegExp.$4 + " l" + lcommand;
						}
					}
				}
				canvas.firstChild.lastChild.path = path;
			}
			else{
				for(var i=1; i<cmdArray.length; i++){
					if(cmdArray[i] == "l"){
						if(firstPoint){
							firstPoint = false;
						}
						else{
							ctx.stroke();
						}
						i++;
						var cmdStr = new String(cmdArray[i]);
						if(cmdStr.match(/^s(.+)$/)){
							ctx.lineWidth = parseFloat(RegExp.$1);
							i++;
						}
						cmdStr = new String(cmdArray[i]);
						if(cmdStr.match(/^c(.+)$/)){
							ctx.strokeStyle = RegExp.$1;
							i++;
						}
						ctx.beginPath();
						ctx.moveTo(parseInt(cmdArray[i]), parseInt(cmdArray[i + 1]));
					}
					else{
						ctx.lineTo(parseInt(cmdArray[i]), parseInt(cmdArray[i + 1]));
					}
					i++;
				}
				ctx.stroke();
			}
		}
		setTimeout("execDrawCommand()", 10);
		return;
	}

}

var PLG = {};
PLG.draw = function(cmd){
	drawCommand.push(cmd);
}

var cb = new chkAjaBrowser();
function bodyOnLoad(){
	if(cb.bw.msie || cb.bw.msie7){
		G_vmlCanvasManager.init();
	}
	setTimeout("execDrawCommand()", 10);
}


function chkAjaBrowser() {
	var a, ua = navigator.userAgent;
	this.bw = {
		iemobile : (navigator.appName == 'Microsoft Pocket Internet Explorer'),
		safari : ua.match(/AppleWebKit/gi) != null || ((a = ua.split('Konqueror/')[1]) ? a.split(';')[0] : 0) >= 3.3,
		konqueror : ((a = ua.split('Konqueror/')[1]) ? a.split(';')[0] : 0) >= 3.3,
		mozes : ((a = ua.split('Gecko/')[1]) ? a.split(' ')[0] : 0) >= 20011128,
		opera : (!!window.opera) && ((typeof XMLHttpRequest) == 'function'),
		msie7 : (!!window.ActiveXObject) ? ((typeof XMLHttpRequest) == 'object') : false,
		msie : (!!window.ActiveXObject) ? (!!createHttpRequest()) && ((typeof XMLHttpRequest) != 'object') : false
	}
	return (this.bw.safari || this.bw.konqueror || this.bw.mozes || this.bw.opera || this.bw.msie)
}

function createHttpRequest() {
	if(window.XMLHttpRequest){
		return new XMLHttpRequest();
	}
	else if(window.ActiveXObject){
		try{
			return new ActiveXObject('Msxml2.XMLHTTP');
		}
		catch(e){
			try{
				return new ActiveXObject('Microsoft.XMLHTTP');
			}
			catch(e2){
				return null;
			}
		}
	}
	else{
		return null;
	}
}
