//var root_path = raletivePath;
var root_path = "/dcnet/";
var trial_tab_height = "10";
TrResult = function(loca, ms, isLast){
	this.EXL = 250;
	this.GOOD = 1000;
	this.WARN = 2000;
	this.POOR = 5000;
	this.UNREACHABLE = "";
	
	//this.CELL_W = 15+4;
	this.offset = 0;
	this.performence = "Good";
	if(ms == this.UNREACHABLE || typeof(ms) == 'undefined'){
		this.performence = "Unreachable";
		this.offset = 12;
	} else if(ms > this.POOR){
		this.performence = "Very Slow";
		//this.offset = 12 * this.CELL_W;
		this.offset = 12;
	} else if(ms > this.WARN){
		this.performence = "Warning";
		var suboff = Math.ceil((ms-this.WARN)/1000);
		//this.offset = (8+suboff) * this.CELL_W;
		this.offset = 8+suboff;
	} else if(ms > this.GOOD){
		this.performence = "Average";
		var suboff = Math.ceil((ms-this.GOOD)/250);
		//this.offset = (4+suboff) * this.CELL_W;
		this.offset = 4+suboff;
	} else if(ms > this.EXL){
		this.performence = "Good";
		var suboff = Math.ceil((ms-this.EXL)/250);
		//this.offset = (1+suboff) * this.CELL_W;
		this.offset = 1+suboff;
	} else {
		this.performence = "Excellent";
		//this.offset = this.CELL_W;
		this.offset = 1;
	}
	
	this.trEl = document.createElement("tr");
	
	var tdEl1 = document.createElement("td");
	tdEl1.className = "keyword progress";
	if(typeof(loca) == 'undefined')
		loca = "";
	var txt = document.createTextNode(loca);
	tdEl1.appendChild(txt);
	
	var tdEl2 = document.createElement("td");
	tdEl2.className = "progress";
	tdEl2.width = "240";
	var progressBar = document.createElement("ul");
	var no = 1;
	//good cell
	for(var i = 0; i < 4; i++){
		var li = document.createElement("li");
		li.className = "ex";
		progressBar.appendChild(li);
		this.replaceBgimg(li, no++, "progress_green_gray.gif");
	}
	//warning cell
	for(var i = 0; i < 4; i++){
		var li = document.createElement("li");
		li.className = "wa";
		progressBar.appendChild(li);
		this.replaceBgimg(li, no++, "progress_yellow_gray.gif");
	}
	//poor cell
	for(var i = 0; i < 3; i++){
		var li = document.createElement("li");
		li.className = "po";
		progressBar.appendChild(li);
		this.replaceBgimg(li, no++, "progress_orange_gray.gif");
	}
	//critical cell
	var li = document.createElement("li");
	li.className = "cr";
	progressBar.appendChild(li);
	this.replaceBgimg(li, no++, "progress_pink_gray.gif");
	tdEl2.appendChild(progressBar);
	
	var tdEl3 = document.createElement("td");
	tdEl3.style.cssText = "padding-left:1em;";
	if(ms == this.UNREACHABLE || typeof(ms) == 'undefined'){
		txt = document.createTextNode(this.performence);
	}else{
		txt = document.createTextNode(ms+'ms - '+this.performence);
	}
	tdEl3.appendChild(txt);
	
	if(isLast){
		tdEl1.className +=" last";
		tdEl2.className +=" last";
	}
	
	//tdEl1.height = trial_tab_height;
	//tdEl2.height = trial_tab_height;
	//tdEl3.height = trial_tab_height;
	this.trEl.appendChild(tdEl1);
	this.trEl.appendChild(tdEl2);
	this.trEl.appendChild(tdEl3);
	//cover
	//this.cover = document.createElement("div");
	//this.cover.className = "cover";
	//document.body.appendChild(this.cover);
}

TrResult.prototype = {
	append : function(){
		var table = document.getElementById("rstTbody");
		table.appendChild(this.trEl);
		//var coordinate = YAHOO.util.Dom.getXY("firstEx");
		//var topoff = (coordinate[1]-3);
		//var leftoff = (coordinate[0]-3) + this.offset;
		//this.cover.style.top = topoff+"px";
		//this.cover.style.left = leftoff+"px";
	},
	
	replaceBgimg : function(cell, no, imgName){
		if(no > this.offset){
			cell.style.cssText += "background:url('images/icon/"+imgName+"') no-repeat left center;";
		} else if(no == this.offset){
			cell.style.cssText += "border-right: 1px solid #ccc;"
		}
	},
	
	destroy : function(){
		var table = document.getElementById("rstTbody");
		try{
			table.removeChild(this.trEl);
			this.trEl = null;
		}catch(e){}
	}
}

dojo.require("dojo.io.*");
dojo.require("dojo.json");
var chInsDisabled = false;
function doValidate()
{
	if(chInsDisabled){return false; }
	isTimeOut = false;
	var trialDiv = document.getElementById("trialURL");
	var trialURLStr = AtTrim(trialDiv.value);
	if(trialURLStr == "http://" || trialURLStr == "https://" || trialURLStr == ""){
		alert("Please enter a URL for check.");
		trialDiv.focus();
		return false;
	}
	
	submitTrial(trialURLStr);
	disableExample();
	location.href = "#check";
	return true;
}

function disableExample(){
	document.getElementById("ciexample").style.display='none';
	enable_MM_showHideLayers = false;
}
function enableExample(){
	document.getElementById("ciexample").style.display='block';
	enable_MM_showHideLayers = true;
}

function destroyTrialRst(){
	for(i=0;i<trlArray.length;i++){
		//alert(trlArray[i]);
		trlArray[i].destroy();
	}
	
	trlArray.length = 0;
	
	showResultField("none");
	
	document.getElementById("siteCompareDesc").innerHTML = "";
	document.getElementById("chartResult").innerHTML = "";
	
	if(rCheckResult){
		window.clearInterval(rCheckResult);
	}
	if(rCheckTerminate){
		window.clearTimeout(rCheckTerminate);
	}
	rCheckResult = null;
	rCheckTerminate = null;
	chInsDisabled = false;
	curRequestId = null;
	enableExample();
}

function submitTrial(trialURL){
	chInsDisabled = true;
	window.clearInterval(rCheckResult);
	window.clearTimeout(rCheckTerminate);
	rCheckResult = null;
	rCheckTerminate = null;
	trialIndex = 0;
	//requestId = 0;
	showResultField("block");
	var resultRowDiv = document.getElementById("resultRow");
	resultRowDiv.innerHTML = "";
	document.getElementById("siteCompareDesc").innerHTML = "";
	document.getElementById("chartResult").innerHTML = "";
	var lightBoxDiv = document.getElementById("lightbox");
	var closeBtDiv = document.getElementById("closeBtDiv");
	closeBtDiv.style.display = 'none';
	lightBoxDiv.innerHTML = '<img src="../images/loading.gif">' + strChecking;
	for(i=0;i<trlArray.length;i++){
		//alert(trlArray[i]);
		trlArray[i].destroy();
	}
	
	trlArray.length = 0;
	dojo.io.bind({
		url: root_path+'trialManage.do?method=addQuickTrial&trialURL='+trialURL+'&tmp='+RndNum(9),
  			load: function(type, data, evt){
  				var response;
  				var dataParsed = true;
  				try{
  					response = dojo.json.evalJson(data);
  				}catch(e){
  					lightBoxDiv.innerHTML = strValidURL;
					//document.getElementById("startCheck").disabled = false;
					chInsDisabled = false;
  					dataParsed = false;
  				}
  				
  				if(dataParsed){
	  				var formedUrl = response.formedUrl;
	  				var trialURL = response.trialURL;
	  				//var time = date2LocalString(response.time);
	  				//var time = date2Trial(response.time);
	  				var time = response.time;
	  				resultRowDiv.innerHTML = '<h2 class="small-green-title">Result</h2><p class="keyword" id="trailWebsite">'+trialURL+'</p>&nbsp;&nbsp;<p id="trailCompleteDate"> - &nbsp;&nbsp;'+time+'</p>';
	  				if(formedUrl){
	  					var requestId = response.requestId;
	  					curRequestId = requestId;
	  					var requestorId = response.requestorId;
	  					lightBoxDiv.innerHTML = '<img src="../images/loading.gif">' + strChecking;
	  					//checkResult(requestId);
	  					rCheckResult = window.setInterval("checkResult("+requestId+","+requestorId+")", 5000);
						rCheckTerminate = window.setTimeout(checkTerminate, 75000);
						closeBtDiv.style.display = 'block';
	  				}else{
	  					lightBoxDiv.innerHTML = strValidURL;
	  					//document.getElementById("startCheck").disabled = false;
	  					chInsDisabled = false;
	  				}
	  			}
  			},
  			error: function(type, error){ destroyTrialRst(); },
  			//sync: true,
		mimetype: "text/plain"
	});
}

function showResultField(display){
	var monitorResultDiv = document.getElementById("moniter_result");
	/*
	if(monitorResultDiv.parentNode){
		monitorResultDiv.parentNode.style.display = display;
	}**/
	monitorResultDiv.style.display = display;
}

function formatCheckResult(retString){
	document.getElementById("lightbox").innerHTML = retString;
	//document.getElementById("startCheck").disabled = false;
	window.clearInterval(rCheckResult);
	window.clearTimeout(rCheckTerminate);
	curRequestId = null;
	chInsDisabled = false;
}

var isTimeOut = false;
var rCheckResult;
var rCheckTerminate;
var trlResultCnt = 0;
var trialIndex = 0;
var trlArray = new Array();
//var requestId = 0;
var strCheckFinished = "Monitor finished, please check the result(s) below.";
var strTimeout = "Timed out. Please try again.";
var strValidURL = "Please provide a valid URL for check.";
var strChecking = "Checking...stand by.";
var strCompareSite = "Want to check site access time comparing with some famous web sites? Go ahead...";
var chartUrl = "";
var curRequestId = null;

//for +enter
var curRequestorId=null;

function checkResult(requestId,requestorId)
{
	dojo.io.bind({
		url: root_path+'trialManage.do?method=getQuickTrial&reqId='+requestId+'&requestorId='+requestorId+'&index='+trialIndex+'&Rnd='+RndNum(10),
		load: function(type, data, evt){
			//Return directly if check timeout or requestId is not the current request id.
			if(isTimeOut || (curRequestId != requestId)){
				return;
			}
			var response;
			var dataParsed = true;
			try{
				response = dojo.json.evalJson(data);
			}catch(e){
				formatCheckResult(strValidURL);
				dataParsed = false;
			}
			
			if(dataParsed){
				var body = response.tab_body;
				
				trlResultCnt = response.trl_resultCnt;
				var isLast = false;
				
				if(body != "none"){
					for(var i = 0; i < body.length; i++)
					{
						var row = body[i];
						trialIndex = row['No'];
						if(trialIndex == "-1"){
							isLast = true;
						}else{
							if(trialIndex >= 5)
								isLast = true;
							if(trialIndex > trlArray.length){
								var trl = new TrResult(row['Location'], row['ResponseTime'], isLast);
								trl.append();
								trlArray[trlArray.length] = trl;
							}
						}
					}
					
					chartUrl = response.chart_url;
					
					if(isLast){
						
    				if(response.chart_url ){
    					
						drawChart();
						}else{
							
							var rstMailSend = response.rstMailSend;
							
								var report_sending = response.report_sending;
							
							    	
						if( typeof(rstMailSend) == "undefined"){
							
							//for +enter
							curRequestorId=requestorId;
							
							document.getElementById("siteCompareDesc").innerHTML = '<h2 class="small-green-title">' + '<a>To get '+
							'check result,please leave your email address:'+'</a>'
							'' + '</h2>';
							
							document.getElementById("chartResult").innerHTML = 
							'<input id="emailAddrTrial" name="emailAddrTrial" " style="width:240px;"   type="text" />'+
							'<input id="emailAddrTrialSub" type="submit"  value="Submit" onclick="setEmail('+requestorId+');" />' ;
							
							
								
						}else{
							    
									document.getElementById("siteCompareDesc").innerHTML = '<h2 class="small-green-title">' + 
									'<a>'+ report_sending
									+'</a>'+ '</h2>';
									
									document.getElementById("chartResult").innerHTML="";
						
						
							}
						}
					}
					
					if(trlResultCnt >= 5 || isLast)
					{
					
							
						formatCheckResult(strCheckFinished);
					}
				}
			}
		},
		error: function(type, error){},
		timeoutSeconds: 5,
		timeout: function(type, data, evt){},
		mimetype: "text/plain"
	});
	
	//rCheckResult = window.setTimeout("checkResult("+requestId+")", 2000);
}

function drawChart(){
	/***********************************
	* used to set the absolute path
	***********************************/
	chartUrl = root_path+chartUrl;
	
	document.getElementById("siteCompareDesc").innerHTML = '<h2 class="small-green-title">' + strCompareSite + '</h2>';
	var chartResult = document.getElementById("chartResult");
	if(chartResult.innerHTML === ""){
		chartResult.innerHTML = '<img src="' + chartUrl + '">';
	}
}

function checkTerminate()
{
	if(trlResultCnt == 0 && trialIndex == 0){//No record returns in 1 minute.
		document.getElementById("lightbox").innerHTML = strTimeout;
		//document.getElementById("startCheck").disabled = false;
		curRequestId = null;
		chInsDisabled = false;
	} else{
		drawChart();
		document.getElementById("lightbox").innerHTML = strCheckFinished;
		//document.getElementById("startCheck").disabled = false;
		curRequestId = null;
		chInsDisabled = false;
	}
	
	isTimeOut = true;
	window.clearInterval(rCheckResult);
}



function setEmail(requestorId){
		
	var emailAddrTrial=document.getElementById("emailAddrTrial").value;
		
	if( ! checkMail(emailAddrTrial )){
	return false;
	}
	
	document.getElementById("emailAddrTrialSub").disabled=true;
	
	emailAddrTrial=emailAddrTrial.toLowerCase();
	dojo.io.bind({
		url: root_path+'trialManage.do?method=setEmailAddress&requestorId='+requestorId+'&emailAddress='+emailAddrTrial+'&tmp='+RndNum(9),
  			load: function(type, data, evt){
  				var response;
  				var dataParsed = true;
  				try{
  					response = eval("(" + data + ")");
  				}catch(e){
  					lightBoxDiv.innerHTML = strValidURL;
					document.getElementById("startCheck").disabled = false;
  					dataParsed = false;
  				}
  				
  				if(dataParsed){
	  				var report_sending = response.report_sending;
	  				if(report_sending){
						document.getElementById("siteCompareDesc").innerHTML = 
						'<h2 class="small-green-title">' + report_sending + '</h2>';
											
						document.getElementById("chartResult").innerHTML="";
							
	  				}else{
						
	  					document.getElementById("startCheck").disabled = false;
	  					
	  				}
	  			}
  			},
  			error: function(type, error){  },
  			//sync: true,
		mimetype: "text/plain"
	});
}


function checkMail(emailAddr)
{
	var x = emailAddr;
	var filter  = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;
	if (filter.test(x)){
	 return (true);
	 }
	else {
	alert('Incorrect email address,retry again.');
	 document.getElementById("emailAddrTrial").focus();
		 return (false);
	}
}

	
