function cmd_exec(module,cmd){
   var code ="var ret=cmd_request('POST','"+module+"','"+cmd+"',''";
   	for(var i=2;i<arguments.length;i++){
		code = code +",'"+arguments[i]+"','"+arguments[++i]+"'";
	}
   code = code + ");";
   eval(code);
	if(ret.indexOf("_WEBSYS_CLIENT_MESSAGE_:") != -1) {
		var msg="_WEBSYS_CLIENT_MESSAGE_:";
		var code=ret.substr(msg.length,2);
		var ret=ret.substr(msg.length+code.length);
		if(code == "0:") { 
			if(data) alert(ret);
			return ;
		}
	}
	var idx=ret.indexOf("_WEBSYS_SERVER_MESSAGE_:");
	if( idx != -1) {
		var msg="_WEBSYS_SERVER_MESSAGE_:";
		var code=ret.substr(idx+msg.length,2);
		var data=ret.substr(idx+msg.length+code.length);
		if(code == "0:") { 
			if(data) alert(ret);
			return ;
		}
		if(data==undefined) data="";
		return data;
	} 
	alert(cmd+" : 程式執行錯誤!!\n"+ret);

	return;
}

function cmd_request(method,module,cmd,cb){
	var url="../modules/"+module+"/cmds.php";
	var params="cmd="+cmd;
	var request;
	for(var i=4;i<arguments.length;i++){
		params = params + "&" + arguments[i]+"="+urlencode(arguments[++i]);
	}

	try {
  		request=new XMLHttpRequest();
  	}catch (e){
  		try{
    			request=new ActiveXObject("Msxml2.XMLHTTP");
    		}catch (e){
    			try{
      				request=new ActiveXObject("Microsoft.XMLHTTP");
      			}catch (e){
				return "_WEBSYS_CLIENT_MESSAGE_:0:";
      			}
    		}
  	}
	
	if(method == "POST") {
		request.open(method,url,false);
		request.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
		request.setRequestHeader("Content-length", ""+params.length);
		request.setRequestHeader("Connection", "close");
		request.send(params);
	} else {
		if(params != "") url = url+"?"+params;
		request.open("GET",url,false);
		request.send(null);
	}
	if(request.readyState == 4) {
		if (request.status == 200) {
			var ret = request.responseText;
			return "_WEBSYS_CLIENT_MESSAGE_:1:"+ret;
		}
	}
	return "_WEBSYS_CLIENT_MESSAGE_:0:"+request.status+" "+request.statusText;

}



function form_submit_cancel(t){
	if(!confirm("您確定要取消上載嗎?")) return;
	var timeout_id=document.getElementById('timeout_id_'+t).innerHTML;
	var interval_id=document.getElementById('interval_id_'+t).innerHTML;
	window.clearInterval(parseInt(str_trim(interval_id)));
	window.clearTimeout(parseInt(str_trim(timeout_id)));
	document.getElementById('iframe_'+t).src="";
	var div=document.getElementById("form_"+t);
	div.parentNode.removeChild(div);	
	return;
}

function form_submit_response(t){
	var div = document.getElementById("form_"+t);
	return div.innerHTML;
}

function form_submit_destroy(t) {
	var div=document.getElementById("form_"+t);
	div.parentNode.removeChild(div);	
	return;
}

function form_submit_interval(t,complete_cb,error_cb){
	
	var iframe=document.getElementById("iframe_"+t);
	var doc = (iframe.contentWindow || iframe.contentDocument);
	if(doc.document) doc=doc.document;
	if(!doc.body ) return;
	var ret=doc.body.innerHTML;
	if(ret) {
		var complete_fun=unescape(complete_cb);
		var error_fun=unescape(error_cb);
		var timeout_id=document.getElementById('timeout_id_'+t).innerHTML;
		var interval_id=document.getElementById('interval_id_'+t).innerHTML;
		window.clearInterval(parseInt(str_trim(interval_id)));
		window.clearTimeout(parseInt(str_trim(timeout_id)));
		document.getElementById('interval_id_'+t).innerHTML="complete";


		var div=document.getElementById("form_"+t);
//alert(ret);
		div.innerHTML="";
      var idx=ret.indexOf("_WEBSYS_SERVER_MESSAGE_:");
		if( idx != -1) {
			var msg="_WEBSYS_SERVER_MESSAGE_:";
			var code=ret.substr(idx+msg.length,2);
			var data=ret.substr(idx+msg.length+code.length);
			div.innerHTML=data;
			if(code == "0:") { 
				if(error_fun) eval(error_fun);
				return ;
			}
			if(complete_fun != "") eval(complete_fun);
		} else {
				if(error_fun) eval(error_fun);
		}
		return;
	}
	//document.getElementById('interval_id_'+t).innerHTML += "...";
}

function form_submit_timeout(t,timeout_cb){
	var timeout_fun=unescape(timeout_cb);
	var interval_id=document.getElementById('interval_id_'+t).innerHTML;
	var timeout_id=document.getElementById('timeout_id_'+t).innerHTML;
	window.clearInterval(parseInt(str_trim(interval_id)));
	window.clearTimeout(parseInt(str_trim(timeout_id)));
	document.getElementById('iframe_'+t).src="";
	document.getElementById('timeout_id_'+t).innerHTML="timeout!!";
	if(timeout_fun) eval(timeout_fun);
	var div=document.getElementById("form_"+t);
	div.innerHTML="";
	return;
}

function form_submit(form_id,timeout,complete_cb,timeout_cb,error_cb){
	var form=document.getElementById(form_id);
	var div = document.createElement("div");
	t=form_id;

	div.setAttribute("id","form_"+t);
	div.setAttribute("style","width:0px; height:0px; border:0px; visibility:hidden; position:absolute;");
	
	var html = "<iframe style='width:0px; height:0px; border:0px; visibility:hidden; position:absolute;' id='iframe_"+t+"' name='iframe_"+t+"' src=''></iframe>";
	html += "<span style='width:0px; height:0px; border:0px; visibility:hidden; position:absolute;' id='interval_id_"+t+"'></span>";
	html += "<span style='width:0px; height:0px; border:0px; visibility:hidden; position:absolute;' id='timeout_id_"+t+"'></span>";
	div.innerHTML=html;	
	
	form.setAttribute("target","iframe_"+t);
	form.appendChild(div);
	
	complete_cb=escape(complete_cb);
	timeout_cb=escape(timeout_cb);
	error_cb=escape(error_cb);
	
	var interval_id = window.setInterval("form_submit_interval('"+t+"','"+complete_cb+"','"+error_cb+"')",500);
	var timeout_id = window.setTimeout("form_submit_timeout('"+t+"','"+timeout_cb+"')",timeout*1000);
	document.getElementById('interval_id_'+t).innerHTML=interval_id;
	document.getElementById('timeout_id_'+t).innerHTML=timeout_id;
	form.submit();


	return t;
}

function get_content_frame(url,target){
	var request;
	try{
		request=new XMLHttpRequest();
	}catch(trymicrosoft){
		try{
			request=new ActiveXObject("Msxml2.XMLHTTP");
		}catch(othermicrosoft){
			request=new ActiveXObject("Microsoft.XMLHTTP");
		}
	}
	request.open("GET",url,true);
	request.onreadystatechange= function () {
		var contentFrame=document.getElementById(target);
		if(request.readyState == 4) {
			if (request.status == 200) {
				var ret = request.responseText;
				 contentFrame.innerHTML=ret;
				return;
			}
		}
		contentFrame.innerHTML="";
		return;
	}
	request.send(null);
}

function urlencode(url){
	var SAFECHARS = "0123456789" +
	"ABCDEFGHIJKLMNOPQRSTUVWXYZ" +
	"abcdefghijklmnopqrstuvwxyz" +
	"-_.!~*'()"; 
	var HEX = "0123456789ABCDEF";
	var plaintext = url;
	var encoded = "";
	for (var i = 0; i < plaintext.length; i++ ) {
		var ch = plaintext.charAt(i);
		if (ch == " ") {
			encoded += "+";
		} else if (SAFECHARS.indexOf(ch) != -1) {
			encoded += ch;
		} else {
			var charCode = ch.charCodeAt(0);
			if (charCode > 255) {
				encoded += encodeURI(ch);
			} else {
				encoded += "%";
				encoded += HEX.charAt((charCode >> 4) & 0xF);
				encoded += HEX.charAt(charCode & 0xF);
			}
		}
	}

	return encoded;
};

function frame_load(frame){
	var params="frame="+encodeURI(frame);
	var page ="index.php"
	for(var i=1;i<arguments.length;i++){
		if(arguments[i]=="base_url" && arguments[i+1] != "") {
			page = arguments[i+1];
		}
		params = params + "&" + arguments[i]+"="+encodeURI(arguments[++i]);
	}	
	document.location.href=page+"?"+params;
}

function toplevel_load(frame){
	var params="frame="+encodeURI(frame);
	var page = frame
	for(var i=1;i<arguments.length;i++){
		params = params + "&" + arguments[i]+"="+encodeURI(arguments[++i]);
	}	
	document.location.href=page+"?"+params+"&base_url="+frame;
}

function frame_target_load(target,frame){
	var params="./"+target+"?frame="+encodeURI(frame);
	for(var i=1;i<arguments.length;i++){
		params = params + "&" + arguments[i]+"="+encodeURI(arguments[++i]);
	}	
	document.location.href=params;
}

function str_trim(str){
	return str.replace(/^\s+|\s+$/g,"");
}


