var xmlHttp;
function StateChanged(){ 
	if(xmlHttp.readyState==4){
		//if(xmlHttp.readyState=="complete")
		if(xmlHttp.status == 200){
			document.getElementById("formSpan").innerHTML = xmlHttp.responseText;
			scroll(0,0);
		}else{
			document.getElementById("formSpan").innerHTML = "error";
		}
	}
}

function StateChangedFlag(){ 
	if(xmlHttp.readyState==4){
		if(xmlHttp.status == 200){
			var str = xmlHttp.responseText;
			var pos = str.indexOf(",");
			var id = str.substring(pos+1);
			var flag = str.substring(0, pos);
			if(flag=='error'){
				document.getElementById(id).src = "image/flagDot.gif";
			}else{
				document.getElementById(id).src = "image/flag"+flag+".gif";
				//document.images[id].src = "image/flag"+flag+".gif";
			}
		}else{
			var str = xmlHttp.responseText;
			var pos = str.indexOf(",");
			var id = str.substring(pos+1);
			document.getElementById(id).src = "image/flagDot.gif";
		}
	}
}

function StateChangedCliEmail(){
	if(xmlHttp.readyState==4){
		if(xmlHttp.status == 200){
			document.getElementById("cliEmailDiv").innerHTML = xmlHttp.responseText;
		}else{
			document.getElementById("cliEmailDiv").innerHTML = "error";
		}
	}
}

function StateChangedLookup(){
	if(xmlHttp.readyState==4){
		if(xmlHttp.status == 200){
			document.getElementById("cli_IDDiv").innerHTML = xmlHttp.responseText;
		}else{
			document.getElementById("cli_IDDiv").innerHTML = "error";
		}
	}
}

function StateChangedLookup2(){
	if(xmlHttp.readyState==4){
		if(xmlHttp.status == 200){
			document.getElementById("cli_IDDiv").innerHTML = xmlHttp.responseText;
			OpenTab(document.getElementById('divMonth').innerHTML);
		}else{
			document.getElementById("cli_IDDiv").innerHTML = "error";
		}
	}
}

function StateChangedLookup3(){
	if(xmlHttp.readyState==4){
		if(xmlHttp.status == 200){
			document.getElementById("cli_IDDiv").innerHTML = xmlHttp.responseText;
			OpenTab(document.getElementById('divView').innerHTML, document.getElementById('tabList').value, 
			document.getElementById('tabList2').value, document.getElementById('divMonth').innerHTML, 1, 
			document.getElementById('divYear').innerHTML);
		}else{
			document.getElementById("cli_IDDiv").innerHTML = "error";
		}
	}
}

function StateChanged3(){
	if(xmlHttp.readyState==4){
		if(xmlHttp.status == 200)
			document.getElementById("divAmend").innerHTML = xmlHttp.responseText;
		else
			document.getElementById("divAmend").innerHTML = "error";
	} 
}

function StateChangedFormPart(){
	if(xmlHttp.readyState==4){
		if(xmlHttp.status == 200)
			document.getElementById("formSpan").innerHTML = xmlHttp.responseText;
		else
			document.getElementById("formSpan").innerHTML = "error";
	} 
}

function StateChanged2(){
	if(xmlHttp.readyState==4){
		if(xmlHttp.status == 200)
			document.getElementById("formSpan").innerHTML = xmlHttp.responseText;
		else
			document.getElementById("formSpan").innerHTML = "error";
	} 
}

function alertContents(){
	if(xmlHttp.readyState == 4){
		if(xmlHttp.status == 200){
			document.getElementById("dt").innerHTML = xmlHttp.responseText;
		}else{
			document.getElementById("dt").innerHTML = "error";
		}
	}
}

function alertContents2(){
	if(xmlHttp.readyState == 4){
		if(xmlHttp.status == 200){
			document.getElementById("formSpan").innerHTML = "";
			document.getElementById("dt").innerHTML = xmlHttp.responseText;
		}else{
			document.getElementById("dt").innerHTML = "error";
		}
	}
}

function RegenTable(url, parameters) {
	checkxmlHttp();
	DisplayFormLoading2();
	if(parameters=="req=search")//cancel search
		xmlHttp.onreadystatechange = alertContents2;
	else//search
		xmlHttp.onreadystatechange = alertContents;
	postXmlHttp(url, parameters);
}

function RegenTable2(url, parameters) {
	checkxmlHttp();
	DisplayFormLoading2();
	xmlHttp.onreadystatechange = alertContents;
	postXmlHttp(url, parameters);
}

function getXmlHttp(url){
	xmlHttp.open("GET",url,true);
	xmlHttp.send(null);
}

function postXmlHttp(url, parameters){
	xmlHttp.open('POST', url, true);
	xmlHttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
	xmlHttp.setRequestHeader("Content-length", parameters.length);
	xmlHttp.setRequestHeader("Connection", "close");
	xmlHttp.send(parameters);
}

function checkxmlHttp(){
	xmlHttp=GetXmlHttpObject();
	if(xmlHttp==null) return false;
	else return true;
}

function GetXmlHttpObject(){
	var xmlHttp=null;
	/*try{
		// Firefox, Opera 8.0+, Safari
		xmlHttp=new XMLHttpRequest();
	}
	catch (e){
		//Internet Explorer
		try{
			xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
		}catch(e){
			xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
		}
	}*/
	if(window.XMLHttpRequest){
	  // code for IE7+, Firefox, Chrome, Opera, Safari
		xmlHttp=new XMLHttpRequest();
	}
	else if (window.ActiveXObject){
	  // code for IE6, IE5
		xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
	}

	return xmlHttp;
}

function LoadDeleteForm(url, param){
	checkxmlHttp();
	DisplayFormLoading();
	ShowHideFormMsg(0);
	xmlHttp.onreadystatechange=StateChanged;
	postXmlHttp(url, "req=delete&"+param);
}

function LoadEditForm(url, param){
	checkxmlHttp();
	DisplayFormLoading();
	ShowHideFormMsg(0);
	xmlHttp.onreadystatechange=StateChanged;
	postXmlHttp(url, "req=bindValue&"+param);
}

function LoadClientForm(url, param){
	checkxmlHttp();
	DisplayFormLoading();
	ShowHideFormMsg(0);
	xmlHttp.onreadystatechange=StateChanged;
	//alert("req=clientForm&"+param);
	postXmlHttp(url, "req=clientForm&"+param);
}

function LoadFlag(url, param, id){
	checkxmlHttp();
	DisplayFormLoading();
	ShowHideFormMsg(0);
	xmlHttp.onreadystatechange=StateChanged;
	postXmlHttp(url, "req=loadFlag&"+param);
}

function LoadViewForm(url, param){
	checkxmlHttp();
	DisplayFormLoading();
	ShowHideFormMsg(0);
	xmlHttp.onreadystatechange=StateChanged;
	postXmlHttp(url, "req=loadView&"+param);
}

function LoadAmendmentForm(url, param){
	checkxmlHttp();
	DisplayFormLoading();
	ShowHideFormMsg(0);
	xmlHttp.onreadystatechange=StateChanged;
	postXmlHttp(url, "req=reqAmend&"+param);
}

function LoadEditFormAdmin(url, param){
	checkxmlHttp();
	DisplayFormLoading();
	ShowHideFormMsg(0);
	xmlHttp.onreadystatechange=StateChanged2;
	postXmlHttp(url, "req=bindValue&"+param);
}

function LoadNewForm(url, param){
	checkxmlHttp();
	ShowHideFormMsg(0);
	xmlHttp.onreadystatechange=StateChanged;
	postXmlHttp(url, "req=loadNew&"+param);
}

function LoadNewForm2(url, tab){
	checkxmlHttp();
	ShowHideFormMsg(0);
	xmlHttp.onreadystatechange=StateChanged;
	postXmlHttp(url, "req=loadNew&tab="+tab);
}

function LoadSearchForm(url){
	checkxmlHttp();
	DisplayFormLoading();
	ShowHideFormMsg(0);
	xmlHttp.onreadystatechange=StateChanged;
	postXmlHttp(url, "req=loadSearch");
}

function LoadApprovalForm(url){
	checkxmlHttp();
	ShowHideFormMsg(0);
	xmlHttp.onreadystatechange=StateChanged;
	postXmlHttp(url, "req=loadApproval");
}

function LoadCopyForm(url, param){
	checkxmlHttp();
	ShowHideFormMsg(0);
	xmlHttp.onreadystatechange=StateChanged;
	postXmlHttp(url, "req=loadCopy&"+param);
}

function LoadDeleteAllForm(url, param){
	checkxmlHttp();
	ShowHideFormMsg(0);
	xmlHttp.onreadystatechange=StateChanged;
	postXmlHttp(url, "req=loadDeleteAll&"+param);
}

function LoadEditRemark(url, param){
	checkxmlHttp();
	DisplayFormLoading();
	ShowHideFormMsg(0);
	xmlHttp.onreadystatechange=StateChanged;
	postXmlHttp(url, "req=bindValueRemark&"+param);
}

function LoadEditStatus(url, param){
	checkxmlHttp();
	DisplayFormLoading();
	ShowHideFormMsg(0);
	xmlHttp.onreadystatechange=StateChanged;
	postXmlHttp(url, "req=bindValueStatus&"+param);
}

function LoadEditHistory(url, param){
	checkxmlHttp();
	DisplayFormLoading();
	ShowHideFormMsg(0);
	xmlHttp.onreadystatechange=StateChanged;
	postXmlHttp(url, "req=bindRefPrice&"+param);
}

function CancelNew(url){
	checkxmlHttp();
	ShowHideFormMsg(0);
	xmlHttp.onreadystatechange = StateChanged;
	postXmlHttp(url, "req=unloadNew");
}

function CancelSearch(url){
	checkxmlHttp();
	ShowHideFormMsg(0);
	CheckSearch(1);
}

function CancelSearch2(url, baid){
	checkxmlHttp();
	ShowHideFormMsg(0);
	CheckSearch2(1, baid);
}

function GetLookupCliEmail(url, param, id){
	checkxmlHttp();
	document.getElementById(id).innerHTML = 'Loading...';
	xmlHttp.onreadystatechange=StateChangedCliEmail;
	postXmlHttp(url, param);
}

function GetLookup(url, param, id){
	checkxmlHttp();
	document.getElementById(id).innerHTML = 'Loading...';
	xmlHttp.onreadystatechange=StateChangedLookup;
	postXmlHttp(url, param);
}

function GetLookup2(url, param, id){
	checkxmlHttp();
	document.getElementById(id).innerHTML = 'Loading...';
	xmlHttp.onreadystatechange=StateChangedLookup2;
	postXmlHttp(url, param);
}

function GetLookup3(url, param, id){
	checkxmlHttp();
	document.getElementById(id).innerHTML = 'Loading...';
	xmlHttp.onreadystatechange=StateChangedLookup3;
	postXmlHttp(url, param);
}

function AddSIDtoURL(url){
	return url+"&sid="+Math.random();
}

function trim(str, chars){
	return ltrim(rtrim(str, chars), chars);
}

function ltrim(str, chars){
	chars = chars || "\\s";
	return str.replace(new RegExp("^[" + chars + "]+", "g"), "");
}

function rtrim(str, chars){
	chars = chars || "\\s";
	return str.replace(new RegExp("[" + chars + "]+$", "g"), "");
}

function DataPage(e, pageNo, maxPageNo, url, parameters){
	var key = window.event ? e.keyCode : e.which;

	if(key==13){
		if(pageNo <= maxPageNo && pageNo>0){
			RegenTable(url, parameters);
			return false;
		}else{
			alert("Invalid page.");
		}
	}
}

function ShowHide(v, id){
	if(v==0){
		document.getElementById(id).style.display = "none";
	}else{
		document.getElementById(id).style.display = "";
	}
}

function ShowHideFormMsg(v){
	if(v==0){
		document.getElementById("txtFormMsg").style.display = "none";
	}else{
		document.getElementById("txtFormMsg").style.display = "";
	}
}

function DisplayFormLoading(){
	//loading = "Loading...";
	document.getElementById("formSpan").className = 'Loading';
	document.getElementById("formSpan").innerHTML = 'Loading...';
}

function DisplayFormLoading2(){
	if(document.getElementById("dt")){
		document.getElementById("dt").className = 'Loading';
		document.getElementById("dt").innerHTML = 'Loading...';
	}
}

function DisplayError(trId, divId, arrError){
	if(arrError.length>0){
		document.getElementById(trId).style.display = "";
		document.getElementById(divId).innerHTML = "";
		for(var j=0; j<arrError.length; j++){
			document.getElementById(divId).innerHTML += arrError[j] + "<br>";
		}
		return true;
	}
	return false;
}

function ValidateEmail(str){
   var reg = /^([A-Za-z0-9_\-\.])+\@([A-Za-z0-9_\-\.])+\.([A-Za-z]{2,4})$/;
   if(reg.test(str) == false) return false;
   return true;
}

function ValidateInteger(str){
   var reg = /^\d+$/;
   if(reg.test(str) == false) return false;
   return true;
}

function ValidatePrice(str){
   var reg = /^\d+(\.\d{0,2})?$/;
   if(reg.test(str) == false) return false;
   return true;
}

function TextCounter(field,cntfield,maxlimit){
	if(field.value.length > maxlimit) field.value = field.value.substring(0, maxlimit);
	else cntfield.innerHTML = maxlimit - field.value.length;
}

function mclick(dtRow){
	if(dtRow.className=="trClick") dtRow.className="sortable";
	else dtRow.className="trClick";
}

function ShowHideDesc(spanId, trId){
	if(document.getElementById(spanId).alt=="Show description"){
		document.getElementById(spanId).src = "image/minus.gif";
		document.getElementById(spanId).alt="Hide description";
		document.getElementById(trId).style.display = "";
	}else{
		document.getElementById(spanId).src = "image/plus.gif";
		document.getElementById(spanId).alt="Show description";
		document.getElementById(trId).style.display = "none";
	}
}

function ShowHideRemark(spanId, trId, trIdStatus){
	if(document.getElementById(spanId).alt=="Show remark & status"){
		document.getElementById(spanId).src = "image/minus.gif";
		document.getElementById(spanId).alt="Hide remark & status";
		document.getElementById(trId).style.display = "";
	}else{
		document.getElementById(spanId).src = "image/plus.gif";
		document.getElementById(spanId).alt="Show remark & status";
		document.getElementById(trId).style.display = "none";
	}
}

function ShowHideRemarkAmendment(spanId, trId){
	if(document.getElementById(spanId).alt=="Show remark"){
		document.getElementById(spanId).src = "image/minus.gif";
		document.getElementById(spanId).alt="Hide remark";
		document.getElementById(trId).style.display = "";
	}else{
		document.getElementById(spanId).src = "image/plus.gif";
		document.getElementById(spanId).alt="Show remark";
		document.getElementById(trId).style.display = "none";
	}
}

function ShowHideDescAll(totalTr){
	if(document.getElementById("imgAllDesc").alt=="Show all description"){
		document.getElementById("imgAllDesc").src = "image/minus.gif";
		document.getElementById("imgAllDesc").alt="Hide all description";
		var i = 0;
		for(i=0;i<totalTr;i++){
			document.getElementById("imgDescShowHide"+i).src = "image/minus.gif";
			document.getElementById("imgDescShowHide"+i).alt="Hide description";
			document.getElementById("trDesc"+i).style.display = "";
		}
	}else{
		document.getElementById("imgAllDesc").src = "image/plus.gif";
		document.getElementById("imgAllDesc").alt="Show all description"
		var i = 0;
		for(i=0;i<totalTr;i++){
			document.getElementById("imgDescShowHide"+i).src = "image/plus.gif";
			document.getElementById("imgDescShowHide"+i).alt="Show description";
			document.getElementById("trDesc"+i).style.display = "none";
		}
	}
}

function ShowHideRemarkAll(totalTr){
	if(document.getElementById("imgAllDesc").alt=="Show all remark & status"){
		document.getElementById("imgAllDesc").src = "image/minus.gif";
		document.getElementById("imgAllDesc").alt="Hide all remark & status";
		var i = 0;
		for(i=0;i<totalTr;i++){
			document.getElementById("imgDescShowHide"+i).src = "image/minus.gif";
			document.getElementById("imgDescShowHide"+i).alt="Hide remark & status";
			document.getElementById("trRemark"+i).style.display = "";
			//document.getElementById("trStatus"+i).style.display = "";
		}
	}else{
		document.getElementById("imgAllDesc").src = "image/plus.gif";
		document.getElementById("imgAllDesc").alt="Show all remark & status"
		var i = 0;
		for(i=0;i<totalTr;i++){
			document.getElementById("imgDescShowHide"+i).src = "image/plus.gif";
			document.getElementById("imgDescShowHide"+i).alt="Show remark & status";
			document.getElementById("trRemark"+i).style.display = "none";
			//document.getElementById("trStatus"+i).style.display = "none";
		}
	}
}

function ShowHideAllClient(totalTr){
	if(document.getElementById("imgAllClient").alt=="Show client"){
		document.getElementById("imgAllClient").src = "image/minus.gif";
		document.getElementById("imgAllClient").alt="Hide client";
		var i = 0;
		for(i=0;i<totalTr;i++){
			document.getElementById("divClient"+i).style.display = "";
		}
	}else{
		document.getElementById("imgAllClient").src = "image/plus.gif";
		document.getElementById("imgAllClient").alt="Show client"
		var i = 0;
		for(i=0;i<totalTr;i++){
			document.getElementById("divClient"+i).style.display = "none";
		}
	}
}

function ShowHideAllTechName(totalTr){
	if(document.getElementById("imgAllTechName").alt=="Show client"){
		document.getElementById("imgAllTechName").src = "image/minus.gif";
		document.getElementById("imgAllTechName").alt="Hide client";
		var i = 0;
		for(i=0;i<totalTr;i++){
			document.getElementById("divTechName"+i).style.display = "";
		}
	}else{
		document.getElementById("imgAllTechName").src = "image/plus.gif";
		document.getElementById("imgAllTechName").alt="Show client"
		var i = 0;
		for(i=0;i<totalTr;i++){
			document.getElementById("divTechName"+i).style.display = "none";
		}
	}
}

function ShowHideRemarkAllAmendment(totalTr){
	if(document.getElementById("imgAllRemark").alt=="Show all remark"){
		document.getElementById("imgAllRemark").src = "image/minus.gif";
		document.getElementById("imgAllRemark").alt="Hide all remark";
		var i = 0;
		for(i=0;i<totalTr;i++){
			document.getElementById("img2Remark"+i).src = "image/minus.gif";
			document.getElementById("img2Remark"+i).alt="Hide remark";
			document.getElementById("tr2Remark"+i).style.display = "";
		}
	}else{
		document.getElementById("imgAllRemark").src = "image/plus.gif";
		document.getElementById("imgAllRemark").alt="Show all remark"
		var i = 0;
		for(i=0;i<totalTr;i++){
			document.getElementById("img2Remark"+i).src = "image/plus.gif";
			document.getElementById("img2Remark"+i).alt="Show remark";
			document.getElementById("tr2Remark"+i).style.display = "none";
		}
	}
}

function ShowHideHistoryAll(totalTr){
	if(document.getElementById("imgAllDesc").alt=="Show all history"){
		document.getElementById("imgAllDesc").src = "image/minus.gif";
		document.getElementById("imgAllDesc").alt="Hide all history";
		var i = 0;
		for(i=0;i<totalTr;i++){
			document.getElementById("imgDescShowHide"+i).src = "image/minus.gif";
			document.getElementById("imgDescShowHide"+i).alt="Hide history";
			document.getElementById("trHistory"+i).style.display = "";
		}
	}else{
		document.getElementById("imgAllDesc").src = "image/plus.gif";
		document.getElementById("imgAllDesc").alt="Show all history"
		var i = 0;
		for(i=0;i<totalTr;i++){
			document.getElementById("imgDescShowHide"+i).src = "image/plus.gif";
			document.getElementById("imgDescShowHide"+i).alt="Show history";
			document.getElementById("trHistory"+i).style.display = "none";
		}
	}
}

function ShowHideHistory(spanId, trId){
	if(document.getElementById(spanId).alt=="Show history"){
		document.getElementById(spanId).src = "image/minus.gif";
		document.getElementById(spanId).alt="Hide history";
		document.getElementById(trId).style.display = "";
	}else{
		document.getElementById(spanId).src = "image/plus.gif";
		document.getElementById(spanId).alt="Show history";
		document.getElementById(trId).style.display = "none";
	}
}

var dates = {
	convert:function(d) {
		return (
			d.constructor === Date ? d : 
			d.constructor === Array ? new Date(d[0],d[1],d[2]) : 
			d.constructor === Number ? new Date(d) :
			d.constructor === String ? new Date(d) :            
			typeof d === "object" ? new Date(d.year,d.month,d.date) :            
			NaN        
		);    
	},    
	compare:function(a,b) {        
		return (            
			isFinite(a=this.convert(a).valueOf()) 
			&& isFinite(b=this.convert(b).valueOf()) ? (a>b)-(a<b) :            
			NaN        
		);    
	},    
	inRange:function(d,start,end) {        
		return (            
			isFinite(d=this.convert(d).valueOf()) &&            
				isFinite(start=this.convert(start).valueOf()) &&            
					isFinite(end=this.convert(end).valueOf()) ?            
					start <= d && d <= end :            
					NaN        
				);    
			}
}

function Compare2(a, b, aH, aM, bH, bM){
	var aString = new String(a);
	var bString = new String(b);
    var aParts = aString.split("-");
	var bParts = bString.split("-");
        
	aYear = parseInt(aParts[2],10);
	aMonth = parseInt(aParts[1],10);
	aDay = parseInt(aParts[0],10);
	bYear = parseInt(bParts[2],10);
	bMonth = parseInt(bParts[1],10);
	bDay = parseInt(bParts[0],10);
	a = dates.convert(aMonth+'/'+aDay+'/'+aYear+' '+aH+':'+aM+':00');
	b = dates.convert(bMonth+'/'+bDay+'/'+bYear+' '+bH+':'+bM+':00');
	var dateCompare = dates.compare(a, b);
	return dateCompare;
}

function ConstructDateTime(dte, h, m){
	var dteString = new String(dte);
	var dteParts = dteString.split("-");
	
	dteYear = parseInt(dteParts[2],10);
	dteMonth = parseInt(dteParts[1],10);
	dteDay = parseInt(dteParts[0],10);
	
	var strDate = dteYear+'-'+dteMonth+'-'+dteDay+' '+h+':'+m+':00';
	return strDate;
}