// --- base ---
function ajax_Request(method,URL,data,eid,indicator){
	var xmlHttp = null;
	if(window.ActiveXObject){
		xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
	}else if(window.XMLHttpRequest){
		xmlHttp = new XMLHttpRequest();
	}else{
		alert("Browser Error");
		return false;
	}
		
	var indicator_el = null; 
	if(indicator==0){//indicator เป็น 0 คือใช้ global_indicator ถ้าไม่พบจะส่งค่า null
		if(document.getElementById("_indicator")){indicator_el = "_indicator";}
	}else{//indicator เป็น 1 คือใช้ self_indicator มี 2 แบบ 1. แสดงผลที่ element indicator (ถ้าตรวจพบ)  2. แสดงผลใน eid
		if(document.getElementById(eid+"_indicator")){
			indicator_el = eid+"_indicator";
		}else{
			indicator_el = eid;
		}
	} 
	
	method = method.toLowerCase();
	if(method=="get"){
		URL += "&r="+Math.random();
		data = null;
		xmlHttp.open(method,URL,true); 
	}else if(method=="post"){
		URL += "?r="+Math.random();
		xmlHttp.open(method,URL,true);
		xmlHttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
	}else{
		alert("Request Error");
		return false;
	}

	xmlHttp.onreadystatechange = function (){
		if(xmlHttp.readyState == 4){
			if(xmlHttp.status == 200){
				var contentType = xmlHttp.getResponseHeader("Content-Type").toLowerCase();
				cb_Display(contentType,xmlHttp.responseText,eid);
				if(indicator_el != null && indicator_el != eid){document.getElementById(indicator_el).style.display="none";}
				delete xmlHttp;
			}else{
				cb_Display("text/plain","Error : " + xmlHttp.statusText,eid);
				delete xmlHttp;
			}
		}else{
			if(indicator_el != null){cb_Indicator(eid,indicator_el);}		
		}         
	};
	xmlHttp.send(data);
}

function cb_Indicator(eid,indicator_el){
	if(indicator_el != eid){
		document.getElementById(indicator_el).style.display="block";
	}else{
		document.getElementById(eid).innerHTML = "<img src='/images/loading.gif'>";
	}
}

function cb_Display(contentType,responseText,eid){
	if(contentType.match("text/javascript")){
		eval(responseText);
	}else{
		//document.getElementById(eid).innerHTML = responseText;
		display_HTML(eid,responseText);
	}
}

function display_HTML(eid,content){ 
	 var search = content; 
	 var script; 
	 var is_singleq = 0; var singleq = "'"; 
	 var is_doubleq = 0; var doubleq = '"'; 
	 var is_escaped = 0; var escap = "\\"; 
	 var layer = 0; 
			
	 while(script = search.match(/(<script[^>]+javascript[^>]+>\s*(<!--)?)/)) { 
		search = search.substr(search.indexOf(RegExp.$1) + RegExp.$1.length); 
		if (!(endscript = search.match(/((-->)?\s*<\/script>)/))) break; 
		block = search.substr(0, search.indexOf(RegExp.$1)); 
		search = search.substring(block.length + RegExp.$1.length); 
		 
		while(func = block.match(/(function(.+?)\((.*?)\)\s*\{)/)) { 
		   eval(block.substr(0,block.indexOf(RegExp.$1))); 
		   // for evaluating non functions 
		   block = block.substr(block.indexOf(RegExp.$1) + RegExp.$1.length); 
		   name = RegExp.$2; 
		   param = RegExp.$3; 
		   is_singleq = 0; 
		   is_doubleq = 0; 
		   is_escaped = 0; 
		   layer = 0; 	
			
		   for(i=0;i<block.length;i++){ 
			  c = block.substr(i,1);    
			  if ((is_singleq || is_doubleq) && is_escaped){ 
				 is_escaped = 0; 
			  }else if(!is_doubleq && (c==singleq)){ 
				 is_singleq = !is_singleq; 
			  }else if(!is_singleq && (c==doubleq)){ 
				 is_doubleq = !is_doubleq; 
			  }else if((is_singleq || is_doubleq) && (c==escap)){ 
				 is_escaped = 1; 
			  }else if( c=="{"){ 
				 layer++; 
			  }else if ( c=="}"){ 
				 if( layer==0 ){ 
					break; 
				 } 
				 layer--; 
			  } 
		   } 
			
		   code = block.substr(0,i-1); 
		   block = block.substr(i +1); 
		   code = code.replace(/\n/g, '\\n'); 
		   code = code.replace(/\r/g, '\\r'); 
		   code = code.replace(/'/g,"\\'"); 			
		   eval(name + " = new Function('"+param+"','"+code+"');"); 
		} 
		eval(block); // for evaluating non functions 
	 } 
	 document.getElementById(eid).innerHTML=content; 
} 

function request_Timeout(xmlHttp){

}

function get_RequestBody(pForm){
	var nParams = new Array();
	for(var i=0 ; i < pForm.elements.length; i++){
		var formElement = pForm.elements[i];   
        if(formElement.type=='checkbox' && !formElement.checked){continue;}  
		var pParam = encodeURIComponent(pForm.elements[i].name);  
		pParam += "=";
		pParam += encodeURIComponent(pForm.elements[i].value);
		nParams.push(pParam);
	} 
	return nParams.join("&");
}

function get_Updater(URL,eid,indicator){
	ajax_Request("get",URL,null,eid,indicator);
}

function post_Updater(form_id,eid,indicator){
	var pForm = document.getElementById(form_id);
	var pData = get_RequestBody(pForm);   
	ajax_Request("post",pForm.action,pData,eid,indicator);
}

function get_UpdaterConfirm(URL,eid,indicator,msg){
	if(confirm(msg)){get_Updater(URL,eid,indicator);}else{return;}
}

function post_UpdaterConfirm(form_id,eid,indicator,msg){
	if(confirm(msg)){post_Updater(form_id,eid,indicator);}else{return;}
}


// --- advance ---
function click_Tab(tab,URL,eid,indicator){ //beta ยังไม่ได้นำไปใช้
	if(tab.className=="tab_inactive"){			
		cur_tab.className = "tab_inactive";
		cur_tab = tab;
		tab.className = "tab_active";
		get_Updater(URL,eid,indicator);
	}else{	
		return;
	}
}

function show_Tooltips(URL){
	var eid = document.getElementById("tooltips");	
	eid.style.left = event.clientX + "px";
	eid.style.top = event.clientY + "px";
	if(eid.style.display=='block'){
		return;
	}
	eid.style.display = "block";
	get_Updater(URL,eid,1);
}

function hide_Tooltips(){
	document.getElementById("tooltips").style.display="none";
}

// --- temp ---
function AJAX_Updater(URL,req_method,eid){
	var xmlHttpIns;
	if(window.ActiveXObject){
		xmlHttpIns = new ActiveXObject("Microsoft.XMLHTTP");
	}else if(window.XMLHttpRequest){
		xmlHttpIns = new XMLHttpRequest();
	}else{
		alert("Browser Error");
		return false;
	}
		
	if(req_method=="get"){
		URL += "&r="+Math.random(); //random url
		xmlHttpIns.open("get",URL,true);
	}else if(req_method=="post"){
		var pForm = document.forms[0];
		var pBody = getRequestBody(pForm);                
		xmlHttpIns.open("post",pForm.action,true);
		xmlHttpIns.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
	}else{
		alert("Request Error");
		return false;
	}
		
	xmlHttpIns.onreadystatechange = function (){
		if(xmlHttpIns.readyState == 4){
			if(xmlHttpIns.status == 200){
				callbackDisplay(xmlHttpIns.responseText,eid);
				delete xmlHttpIns;
			}else{
				callbackDisplay("Error : " + xmlHttpIns.statusText,eid); 
				delete xmlHttpIns;
			}
		}else{
			//callbackDisplay("<br><img src='/images/bar/ajax_loading.gif'><br>",eid);			
		}            
	};
	
	if(req_method=="get"){
		xmlHttpIns.send(null);
	}else if(req_method=="post"){
		xmlHttpIns.send(pBody);
	}else{
		alert("Method Error");
		return false;
	}
}

function callbackDisplay(responseText,eid){
	document.getElementById(eid).innerHTML = responseText;
}
