/**
 * Client Side Functions Library for LogisticPlus System
 * @access global
 * @author YP. Ajie (ajie@ageedev.com)
 * @abstract Handle AJAX Style operation.
 * @since 11/05/2006
 */

var imgs = new Image;
var resultBuffer = '';
var timerID = 0;
imgs.src = "/admin/templates/default/images/progress.gif";

function getHTTPObject() {
				var http_object;
					/*@cc_on
					@if (@_jscript_version >= 5)
						try {
							http_object = new ActiveXObject("Msxml2.XMLHTTP");
						}
						catch (e) {
							try {
								http_object = new ActiveXObject("Microsoft.XMLHTTP");
							}
							catch (E) {
								http_object = false;
							}
						}
					@else
						xmlhttp = http_object;
					@end @*/

				if (!http_object && typeof XMLHttpRequest != 'undefined') {
					try {http_object = new XMLHttpRequest();}
					catch (e) {http_object = false;}
				}

	return http_object;
}

function startProgress(strMessage){
	document.getElementById("statusMessage").innerHTML = "<img src='/admin/templates/default/images/progress.gif' align=absmiddle>&nbsp;&nbsp;" + strMessage + "...";
}

function resetProgress(strMessage){
	document.getElementById("statusMessage").innerHTML = "<img src='/admin/templates/default/images/icons/icon_info.gif' align=absmiddle>&nbsp;&nbsp;" + strMessage + "...";
}

function printDebug(strData){
	document.getElementById("debugWindow").innerHTML = "<span>AGJS Debug Window</span><br><xmp>" + strData + "</xmp>";
}

function updateTariff(roomName,target){	
	var http1 = getHTTPObject();
	var strURL = "/_engine/AGFunctionsLib.class.php";
	var strQUERY = "?cmd=UPDATETARIFF&room=" + escape(roomName);
	http1.open('GET', strURL+strQUERY, true);
	http1.onreadystatechange = function handleHttpGetSeed(){
						if (http1.readyState == 4) {
							results = http1.responseText;
							
							document.getElementById(target).value =  results;							
						}
			}
	http1.send(null);
	
}


function quickBooking(){
	
	var salutation = document.getElementById("salutation").value
	var bookerName = document.getElementById("bookerName").value
	
	var arrivalDate = document.getElementById("arrivalDate").value
	var departureDate = document.getElementById("departureDate").value
	var numofGuest = document.getElementById("numofGuest").value
		
	var err=false;
	var ermsg = '';
	
	if(bookerName=='Your Name' ||bookerName==''){
		err=true;
		ermsg = '- Your Name\n';	
	}
		
	if(arrivalDate=='' || arrivalDate=='Arrival Date'){
		err=true;
		ermsg = ermsg + '- Arrival Date\n';	
	}
	
	if(departureDate=='' || departureDate=='Departure Date'){
		err=true;
		ermsg = ermsg + '- Departure Date\n';	
	}
	
	if(numofGuest=='Num. of Guest' || numofGuest=='0'){
		err=true;
		ermsg = ermsg + '- Number of Guest\n';	
	}
	
	if(err==true){
		var msg = "Sorry, you have invalid entries in the following fields:\n"+ermsg;
		alert(msg)
		return false;
	}else{
		return true;
	}
		
}



function checkAll() {
r = eval('document.f0.r_count_field');
for (var j = 0; j <= r.value-1; j++) {
box = eval('document.f0.cb'+j);
if (box.checked == false) box.checked = true;
   }
}


function setDelay(milisecond) {
   timerID = setTimeout("UpdateTimer()", milisecond);
   return true;
}


function uncheckAll() {
r = eval('document.f0.r_count_field');
for (var j = 0; j <= r.value-1; j++) {
box = eval('document.f0.cb'+j);
if (box.checked == true) box.checked = false;
   }
}

function switchAll() {
r = eval('document.f0.r_count_field');
for (var j = 0; j <= r.value-1; j++) {
box = eval('document.f0.cb'+j);
box.checked = !box.checked;
   }
	}

function stopProgress(strMessage){
	document.getElementById("statusMessage").innerHTML = strMessage;
}

function setResultTitle(strTitle){
	document.getElementById("searchResultTitle").innerHTML = strTitle;
}



function showPage(intPageNum){
	var intTotalPage = document.f1.totalPage.value;
	for(i=1;i<=intTotalPage;i++){
			document.getElementById("page_" + i).style.display="none";
			document.getElementById("pagingText_" + i).style.fontWeight="normal";
			document.getElementById("pagingText_" + i).style.color="#005FA9";
	}
	document.getElementById("page_" + intPageNum).style.display="";
	document.getElementById("pagingText_" + intPageNum).style.fontWeight="bolder";
	document.getElementById("pagingText_" + intPageNum).style.color="#CA5F00";
}



function placeFocus() {
if (document.forms.length > 0) {
var field = document.forms[0];
for (i = 0; i < field.length; i++) {
if ((field.elements[i].type == "text") || (field.elements[i].type == "textarea") || (field.elements[i].type.toString().charAt(0) == "s")) {
document.forms[0].elements[i].focus();
break;
         }
      }
   }
}

function updown(t,d){
	var fobj = eval("document.forms[0]." + t);
	var direction = d;
	var current_value = fobj.value;
	if(direction == 'up'){
		current_value++;
	}else{
		if(current_value > 0){
			current_value--;
		}
	}
	fobj.value = current_value;
}

function removeformatCurrency(num) {
    num = num.toString().replace(/\,|\.|(,00)|\(|\)/g,'');
    return num;
}

function formatCurrency(num) {
    num = num.toString().replace(/Rp\.|\,|\(|\)/g,'');
    if(isNaN(num))
    num = "0";
    sign = (num == (num = Math.abs(num)));
    num = Math.floor(num*100+0.50000000001);
    cents = num%100;
    num = Math.floor(num/100).toString();
    if(cents<10)
    cents = "0" + cents;
    for (var i = 0; i < Math.floor((num.length-(1+i))/3); i++)
    num = num.substring(0,num.length-(4*i+3))+'.'+
    num.substring(num.length-(4*i+3));
    return ( ((sign)?'':'-') + num );
}




function putInWindow(el,wName){
	var r = Application.getNewId();
	var win = new Window(r, {className: "mac_os_x",
					title: wName,
					closable: 	true,
					hideEffect:Element.hide,
					showEffect:Element.show,
					resizable: true});
	win.setContent(el,true,true);
	win.setSize(400, 500);
	win.showCenter(true);
}



function Get_Cookie(name) {
   var start = document.cookie.indexOf(name+"=");
   var len = start+name.length+1;
   if ((!start) && (name != document.cookie.substring(0,name.length))) return null;
   if (start == -1) return null;
   var end = document.cookie.indexOf(";",len);
   if (end == -1) end = document.cookie.length;
   return unescape(document.cookie.substring(len,end));
}

function Set_Cookie(name,value,expires,path,domain,secure) {
    var cookieString = name + "=" +escape(value) +
       ( (expires) ? ";expires=" + expires.toGMTString() : "") +
       ( (path) ? ";path=" + path : "") +
       ( (domain) ? ";domain=" + domain : "") +
       ( (secure) ? ";secure" : "");
    document.cookie = cookieString;
}

function Delete_Cookie(name,path,domain) {
   if (Get_Cookie(name)) document.cookie = name + "=" +
      ( (path) ? ";path=" + path : "") +
      ( (domain) ? ";domain=" + domain : "") +
      ";expires=Thu, 01-Jan-70 00:00:01 GMT";
}


function isInvoiceSaved(order_id){

	var strURL = "/_engine/AGFunctionsLib.class.php";
	var strQUERY = "?cmd=isinvoicesaved&order_id=" + order_id;
	var results = '';

	var http = getHTTPObject();
	http.open('GET', strURL+strQUERY, true);
	http.onreadystatechange = function (){
				if (http.readyState == 4) {
					results = http.responseText;
					if(results=="1"){
						document.getElementById("savedStatus").value = "SAVED";
					}else{
						document.getElementById("savedStatus").value = "NOTSAVED";
					}
				}
			}

	http.send(null);


}

function doNothing(){

	return true;
}

function confirmInvoicePrint(){
	var els = document.forms[0].elements;
	var getString = '';
	for(i=0;i<=els.length-1;i++){
		if(els[i].name.indexOf("print_") != -1){
			if(els[i].checked==true){
				getString = getString + els[i].name + "=1#spar#";
			}else{
				getString = getString + els[i].name + "=0#spar#";
			}
		}else{
			getString = getString + els[i].name + "=" + els[i].value + "#spar#";
		}
	}

	var order_id = document.getElementById("ord_ID").value;
	var gData = encodeBase64("id="+order_id+"#spar#"+getString);
	var elCount = parseInt(document.forms[0].elCount.value);
	var sel = '';

	for(i=0;i<=elCount;i++){
		
		var cb = eval("document.forms[0].print_"+i);
		
		
		if(cb.checked==true){
			sel = sel + "OK,";
		}
	}
	
	
	var selArr = sel.split(",");

	//check is invoice saved


	if(document.getElementById("savedStatus").value ==  'NOTSAVED'){
		alert("Please Save/Update invoice first");
		return false;
	}

	if(selArr.length > 1){
		var agree=confirm("Are you sure want to print selected item(s) as a invoice?");
		if (agree){

			window.open("/_engine/AGFunctionsLib.class.php?cmd=PRINTINVOICE&gdata="+gData,"INV","width=700,height=600,scrollbars");
			var order_ID = document.getElementById("ord_ID").value;
			displayInvoiceInput(order_ID);

		}else{
			return false ;
		}
	}else{
		alert("Please select at least 1 item to print");
	}


}

function invoiceInitData(){
	var els = document.forms[0].elements;
			var postString = '';
			for(i=0;i<= els.length-1;i++){
				postString = postString + els[i].name + "=" + els[i].value + "&";
			}
			var strURL = "/_engine/AGFunctionsLib.class.php";
			var strQUERY = "cmd=invoiceSave&"+postString;
			var results = '';



			startProgress("Querying Data...");
			var http = getHTTPObject();
			http.open('POST', strURL, true);
			http.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
			http.onreadystatechange = 	function (){
											if (http.readyState == 4) {
														results = http.responseText;
														//printDebug(results);
														resetProgress("Invoice Saved")

											}else{
												printDebug(results);
												return false;
											}
										}
			http.send(strQUERY);


}

function invoiceSave(){

			var currentLocationArray = document.location.toString().split("admin");
			var currentLocation = "/admin" + currentLocationArray[1];

			var els = document.forms[0].elements;
			var postString = '';
			for(i=0;i<= els.length-1;i++){
				postString = postString + els[i].name + "=" + els[i].value + "&";
			}
			var strURL = "/_engine/AGFunctionsLib.class.php";
			var strQUERY = "cmd=invoiceSave&"+postString;
			var results = '';
			var go = confirm("Are you sure to SAVE this invoice?\nClick OK to proceed");

			if(go){
				startProgress("Querying Data...");
				var http = getHTTPObject();
				http.open('POST', strURL, true);
				http.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
				http.onreadystatechange = 	function (){
												if (http.readyState == 4) {
															results = http.responseText;
															//printDebug(results);
															resetProgress("Invoice Saved")
															top.location = currentLocation;

												}else{
													//printDebug(results);
													return false;
												}
											}
				http.send(strQUERY);
			}

}


function postCostUpdate(){

			var els = document.forms[0].elements;
			var postString = '';
			for(i=0;i<= els.length-1;i++){
				postString = postString + els[i].name + "=" + els[i].value + "&";
			}
			var currentProgress = document.getElementById("ca_progress").value;

			var strURL = "/_engine/AGFunctionsLib.class.php";
			var strQUERY = "cmd=postCostUpdate&"+postString;
			var results = '';

			if(currentProgress > 300){
					alert("This CA has been settled");
					return false;
			}

			var go = confirm("Are you sure to UPDATE this cost?\nClick OK to proceed");

			if(go){
				var http = getHTTPObject();
				http.open('POST', strURL, true);
				http.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
				http.onreadystatechange = 	function (){
												if (http.readyState == 4) {
													results = http.responseText;													
													
													displayCAUpdateByCAID(results);
												}
											}
				http.send(strQUERY);
			}

}


function updateJobCode(){
	var jtype = document.forms[0].ord_jobtype.value;
	var jstype = document.forms[0].ord_jobsubtype.value;
	var typeCode = jtype+"-"+jstype;
	var serviceCode = '';
	
	//enable all form obj
	for(i=0;i<=document.forms[0].elements.length-4;i++){
		document.forms[0].elements[i].disabled=false;
	}

	switch(typeCode){
		case "3-7" :
	      serviceCode = "DP";
	      break;
	    case "3-6" :
	      serviceCode = "DT";
	      break;
	    case "3-5" :
	      serviceCode = "DW";	     
	      //disable unecessary elements
	      document.forms[0].ord_gwkgs.disabled=true;
	      document.forms[0].ord_gwcbm.disabled=true;
	      document.forms[0].ord_consignee_source.disabled=true;
	      document.forms[0].ord_consignee.disabled=true;
	      document.forms[0].ord_shipper_source.disabled=true;
	      document.forms[0].ord_shipper.disabled=true;
	      document.forms[0].ord_trasporttype.disabled=true;
	      document.forms[0].ord_etd.disabled=true;
	      document.forms[0].ord_eta.disabled=true;
	      document.forms[0].ord_destinationport.disabled=true;
	      document.forms[0].ord_warehousevendor.disabled=true;
	      document.forms[0].ord_mbl.disabled=true;
	      document.forms[0].ord_hbl.disabled=true;
	      document.forms[0].ord_containerno.disabled=true;		      
	      break;
	    case "2-3" :
	      serviceCode = "AE";
	      break;
	    case "2-4" :
	      serviceCode = "SE";
	      break;
	    case "1-1" :
	      serviceCode = "AI";
	      break;
	    case "1-2" :
	      serviceCode = "SI";
	      break;
	     default :
	     serviceCode = "[SelectServiceType]";
	     break;
	}

	var jobCode = document.forms[0].ord_jobnumber.value;
	var jobCodeArray = jobCode.split("/");
	var updatedJobCode = jobCodeArray[0]+"/"+serviceCode+"/"+jobCodeArray[2]+"/"+jobCodeArray[3]+"/"+jobCodeArray[4];
	document.forms[0].ord_jobnumber.value = updatedJobCode;

}


function generateJobCode(){

	var r = getLastOrderSequence(2,3);
	alert(r);
	var jtype = document.forms[0].ord_jobtype.value;
	var jstype = document.forms[0].ord_jobsubtype.value;
}



function updatePayment(jobnumber){
	var strAmount = document.getElementById("pay_amount").value;
	var strURL = "/_engine/AGFunctionsLib.class.php";
	var strQUERY = "cmd=POSTUPDATEPAYMENT&amount="+strAmount+"&jobnumber="+jobnumber;
	var results = '';

	var http = getHTTPObject();
	http.open('POST', strURL, true);
	http.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
	http.onreadystatechange = function (){
				if (http.readyState == 4) {
							results = http.responseText;
							refreshPaymentHistory(results);
				}else{
					printDebug(results);
					return false;
				}
			}
	http.send(strQUERY);

}


function getJobType(intActiveBentukID,strEl){
    var http = getHTTPObject();
    var strURL = "/_engine/AGFunctionsLib.class.php?cmd=GETJOBTYPE";
	    http.open('GET', strURL, true);
	    http.onreadystatechange = 	function handleHttpResponse(){
									    if (http.readyState == 4) {
										    results = http.responseText;

										    var arrayResult = results.split("@SPRTOR@");
										    var districtID = '';

										    for(j=0;j < arrayResult.length-1;j++){
												    var comp = arrayResult[j].split("-");
												    cp = eval("document.form1." + strEl);
												    cp.options[j] = new Option(comp[0], comp[1], false);
												    districtID = districtID + comp[1] + ",";
										    }

										    for(i=0;i < arrayResult.length-1;i++){
											    var comp = arrayResult[i].split("-");

											    if(parseInt(comp[1]) == parseInt(intActiveBentukID)){
												    cp.selectedIndex = i;
											    }
										    }

										    return true;
									    }else{
										    return false;
									    }
								    }
	    http.send(null);


}


function getJobSubType(intJobTypeID,intActiveSubTypeID,strEl){

				if(intJobTypeID==0){
					intJobTypeID =3;
				}
				var http = getHTTPObject();

				var strURL = "/_engine/AGFunctionsLib.class.php?cmd=GETJOBSUBTYPE&param=" + intJobTypeID;

				http.open('GET', strURL, true);
				http.onreadystatechange = 	function handleHttpResponse(){
												if (http.readyState == 4) {
													results = http.responseText;

													var arrayResult = results.split("@SPRTOR@");


													targetSel = eval("document.form1." + strEl);
													for(i=0;i < 40;i++){
															targetSel.options[0] = null;
													}

													elCount = 0;

													for(j=0;j < arrayResult.length-1;j++){
														if(arrayResult[j] !=''){
															var comp = arrayResult[j].split("-");
															targetSel.options[elCount] = new Option(comp[0], comp[1], false, false);

															elCount++;
														}
													}
													//set active selection
													for(i=0;i < arrayResult.length-1;i++){
														var comp = arrayResult[i].split("-");
														if(parseInt(comp[1]) == parseInt(intActiveSubTypeID)){
															targetSel.selectedIndex = i;
														}
													}

												}
											}
				http.send(null);

}


function xxx(){

	startProgress("Disconnecting..");
	var http = getHTTPObject();
	var strURL = "/_engine/AGFunctionsLib.class.php";
	var strQUERY = "cmd=DISCONNECT";
	http.open('POST', strURL, true);
	http.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
	http.onreadystatechange = 	function handleHttpResponse(){
									if (http.readyState == 4) {
												results = http.responseText;
												if(results=="OK"){
														stopProgress('Disconnected');
														startProgress("Please wait...");
														document.location="index.igt";
												}else{
													 setErrorMessage(results);
												}
									}else{
										return false;
									}
								}
	http.send(strQUERY);

}



function resetTRCount(){
		document.forms[0].rowCount.value = 0;
	}


function urlDecode(str){
    str=str.replace(new RegExp('\\+','g'),' ');
    return unescape(str);
}
function urlEncode(str){
    str=escape(str);
    str=str.replace(new RegExp('\\+','g'),'%2B');
    return str.replace(new RegExp('%20','g'),'+');
}

var END_OF_INPUT = -1;

var base64Chars = new Array(
    'A','B','C','D','E','F','G','H',
    'I','J','K','L','M','N','O','P',
    'Q','R','S','T','U','V','W','X',
    'Y','Z','a','b','c','d','e','f',
    'g','h','i','j','k','l','m','n',
    'o','p','q','r','s','t','u','v',
    'w','x','y','z','0','1','2','3',
    '4','5','6','7','8','9','+','/'
);

var reverseBase64Chars = new Array();
for (var i=0; i < base64Chars.length; i++){
    reverseBase64Chars[base64Chars[i]] = i;
}

var base64Str;
var base64Count;
function setBase64Str(str){
    base64Str = str;
    base64Count = 0;
}
function readBase64(){
    if (!base64Str) return END_OF_INPUT;
    if (base64Count >= base64Str.length) return END_OF_INPUT;
    var c = base64Str.charCodeAt(base64Count) & 0xff;
    base64Count++;
    return c;
}
function encodeBase64(str){
    setBase64Str(str);
    var result = '';
    var inBuffer = new Array(3);
    var lineCount = 0;
    var done = false;
    while (!done && (inBuffer[0] = readBase64()) != END_OF_INPUT){
        inBuffer[1] = readBase64();
        inBuffer[2] = readBase64();
        result += (base64Chars[ inBuffer[0] >> 2 ]);
        if (inBuffer[1] != END_OF_INPUT){
            result += (base64Chars [(( inBuffer[0] << 4 ) & 0x30) | (inBuffer[1] >> 4) ]);
            if (inBuffer[2] != END_OF_INPUT){
                result += (base64Chars [((inBuffer[1] << 2) & 0x3c) | (inBuffer[2] >> 6) ]);
                result += (base64Chars [inBuffer[2] & 0x3F]);
            } else {
                result += (base64Chars [((inBuffer[1] << 2) & 0x3c)]);
                result += ('=');
                done = true;
            }
        } else {
            result += (base64Chars [(( inBuffer[0] << 4 ) & 0x30)]);
            result += ('=');
            result += ('=');
            done = true;
        }
        lineCount += 4;
        if (lineCount >= 76){
            result += ('\n');
            lineCount = 0;
        }
    }
    return result;
}
function readReverseBase64(){
    if (!base64Str) return END_OF_INPUT;
    while (true){
        if (base64Count >= base64Str.length) return END_OF_INPUT;
        var nextCharacter = base64Str.charAt(base64Count);
        base64Count++;
        if (reverseBase64Chars[nextCharacter]){
            return reverseBase64Chars[nextCharacter];
        }
        if (nextCharacter == 'A') return 0;
    }
    return END_OF_INPUT;
}

function ntos(n){
    n=n.toString(16);
    if (n.length == 1) n="0"+n;
    n="%"+n;
    return unescape(n);
}

function decodeBase64(str){
    setBase64Str(str);
    var result = "";
    var inBuffer = new Array(4);
    var done = false;
    while (!done && (inBuffer[0] = readReverseBase64()) != END_OF_INPUT
        && (inBuffer[1] = readReverseBase64()) != END_OF_INPUT){
        inBuffer[2] = readReverseBase64();
        inBuffer[3] = readReverseBase64();
        result += ntos((((inBuffer[0] << 2) & 0xff)| inBuffer[1] >> 4));
        if (inBuffer[2] != END_OF_INPUT){
            result +=  ntos((((inBuffer[1] << 4) & 0xff)| inBuffer[2] >> 2));
            if (inBuffer[3] != END_OF_INPUT){
                result +=  ntos((((inBuffer[2] << 6)  & 0xff) | inBuffer[3]));
            } else {
                done = true;
            }
        } else {
            done = true;
        }
    }
    return result;
}

var digitArray = new Array('0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f');
function toHex(n){
    var result = ''
    var start = true;
    for (var i=32; i>0;){
        i-=4;
        var digit = (n>>i) & 0xf;
        if (!start || digit != 0){
            start = false;
            result += digitArray[digit];
        }
    }
    return (result==''?'0':result);
}

function pad(str, len, pad){
    var result = str;
    for (var i=str.length; i<len; i++){
        result = pad + result;
    }
    return result;
}

function encodeHex(str){
    var result = "";
    for (var i=0; i<str.length; i++){
        result += pad(toHex(str.charCodeAt(i)&0xff),2,'0');
    }
    return result;
}

function decodeHex(str){
    str = str.replace(new RegExp("s/[^0-9a-zA-Z]//g"));
    var result = "";
    var nextchar = "";
    for (var i=0; i<str.length; i++){
        nextchar += str.charAt(i);
        if (nextchar.length == 2){
            result += ntos(eval('0x'+nextchar));
            nextchar = "";
        }
    }
    return result;

}


