
var cargoCat = new Array();
cargoCat[0] = 'Timber';
cargoCat[1] = 'Palletised or Unitised Cargo';
cargoCat[2] = 'General Cargo';
cargoCat[3] = 'Dangerous Goods';
cargoCat[4] = 'Heavy Packages (2.5 to 5 tonnes)';
cargoCat[5] = 'Heavy Packages (Over 5 to 10 tonnes)';
cargoCat[6] = 'Heavy Packages (Over 10 tonnes)';
cargoCat[7] = 'Wheeled Vehicles (Less than 2.5 tonnes in weight)';
cargoCat[8] = 'Animal & Livestock';
cargoCat[9] = 'Other Items';
cargoCat[10] = 'Liquid Cargo In Bulk';
cargoCat[11] = 'Dry Cargo In Bulk';
cargoCat[12] = 'Miscellaneous (Not covered above)';

function CargoDef() {
	this.mainCategory='';
	this.name='';
	this.rateSteveDore=0;
	this.rateGodown=0;
	this.ratePipeline=0;
	this.rateWharf=0;
	return this;
}
var cargoSubCat = new Array();


cargoSubCat[0] = new Array();

var c = new CargoDef();
c.name = 'Timber in loose form';
c.rateSteveDore = 4.8;
c.rateGoDown = 8.5;
c.ratePipeline = 6.5;
c.rateWharf = 6;
cargoSubCat[0][0] = c;

var c1 = new CargoDef();
c1.name = 'Timber in Bundles';
c1.rateSteveDore = 4.8;
c1.rateGoDown = 7.5;
c1.ratePipeline = 5.5;
c1.rateWharf = 5;
cargoSubCat[0][1] = c1;

var c2 = new CargoDef();
c2.name = 'Timber Logs - Kayu Balak';
c2.rateSteveDore = 4;
c2.rateGoDown = 0;
c2.ratePipeline = 0;
c2.rateWharf = 2.5;
cargoSubCat[0][2] = c2;
 
cargoSubCat[1] = new Array();

var c3 = new CargoDef();
c3.name = 'Palletised or Unitised Cargo';
c3.rateSteveDore = 4.5;
c3.rateGoDown = 6;
c3.ratePipeline = 6;
c3.rateWharf = 4;
cargoSubCat[1][0] = c3;

var c4 = new CargoDef();
c4.name = 'Palletised or Unitised Cargo - Kargo yang dipalet yang djadikan satu unit';
c4.rateSteveDore = 4.5;
c4.rateGoDown = 6;
c4.ratePipeline = 6;
c4.rateWharf = 4;
cargoSubCat[1][1] = c4;

var c5 = new CargoDef();
c5.name = 'Palletised or Unitised Cargo - Papan Lapis';
c5.rateSteveDore = 4.8;
c5.rateGoDown = 6;
c5.ratePipeline = 6;
c5.rateWharf = 4;
cargoSubCat[1][2] = c5;

cargoSubCat[2] = new Array();

var c6 = new CargoDef();
c6.name = 'General Cargo';
c6.rateSteveDore = 6;
c6.rateGoDown = 7;
c6.ratePipeline = 7;
c6.rateWharf = 5;
cargoSubCat[2][0] = c6;

var c7 = new CargoDef();
c7.name = 'General Cargo - CKD';
c7.rateSteveDore = 4.8;
c7.rateGoDown = 7;
c7.ratePipeline = 7;
c7.rateWharf = 5;
cargoSubCat[2][1] = c7;

var c8 = new CargoDef();
c8.name = 'General Cargo - Kargo Dalam Beg';
c8.rateSteveDore = 6.8;
c8.rateGoDown = 7;
c8.ratePipeline = 7;
c8.rateWharf = 5;
cargoSubCat[2][2] = c8;

var c9 = new CargoDef();
c9.name = 'General Cargo - Dram (Tong)';
c9.rateSteveDore = 6;
c9.rateGoDown = 7;
c9.ratePipeline = 7;
c9.rateWharf = 5;
cargoSubCat[2][3] = c9;

var c10 = new CargoDef();
c10.name = 'General Cargo - Kargo Dalam Jumbo Beg';
c10.rateSteveDore = 5.3;
c10.rateGoDown = 7;
c10.ratePipeline = 7;
c10.rateWharf = 5;
cargoSubCat[2][4] = c10;

cargoSubCat[3] = new Array();

var c11 = new CargoDef();
c11.name = 'Dangerous Goods Class I & Class II';
c11.rateSteveDore = 14;
c11.rateGoDown = 21;
c11.ratePipeline = 21;
c11.rateWharf = 15;
cargoSubCat[3][0] = c11;

var c12 = new CargoDef();
c12.name = 'Dangerous Goods Class III';
c12.rateSteveDore = 9.5;
c12.rateGoDown = 14;
c12.ratePipeline = 14;
c12.rateWharf = 10;
cargoSubCat[3][1] = c12;

var c13 = new CargoDef();
c13.name = 'Dangerous Goods Class IV';
c13.rateSteveDore = 4.8;
c13.rateGoDown = 7;
c13.ratePipeline = 7;
c13.rateWharf = 5;
cargoSubCat[3][2] = c13;

cargoSubCat[4] = new Array();

var c14 = new CargoDef();
c14.name = 'Batang Paip (kosong(MT))- Melebihi 24 inci';
c14.rateSteveDore = 6.5;
c14.rateGoDown = 0;
c14.ratePipeline = 13;
c14.rateWharf = 7;
cargoSubCat[4][0] = c14;

var c15 = new CargoDef();
c15.name = 'Batang Paip (kosong(MT))- Kurang 24 inci';
c15.rateSteveDore = 5.7;
c15.rateGoDown = 0;
c15.ratePipeline = 13;
c15.rateWharf = 7;
cargoSubCat[4][1] = c15;

var c16 = new CargoDef();
c16.name = 'Batang Paip (Disalut (MT)';
c16.rateSteveDore = 5.7;
c16.rateGoDown = 0;
c16.ratePipeline = 13;
c16.rateWharf = 7;
cargoSubCat[4][2] = c16;

var c17 = new CargoDef();
c17.name = 'Kargo Berat (Melebihi 2.5 Tan)';
c17.rateSteveDore = 5.7;
c17.rateGoDown = 0;
c17.ratePipeline = 13;
c17.rateWharf = 7;
cargoSubCat[4][3] = c17;

var c18 = new CargoDef();
c18.name = 'Struktur Keluli/Bilet';
c18.rateSteveDore = 5.7;
c18.rateGoDown = 0;
c18.ratePipeline = 13;
c18.rateWharf = 7;
cargoSubCat[4][4] = c18;

cargoSubCat[5] = new Array();

var c19 = new CargoDef();
c19.name = 'Batang Paip (kosong(MT))- Melebihi 24 inci';
c19.rateSteveDore = 6.5;
c19.rateGoDown = 0;
c19.ratePipeline = 17;
c19.rateWharf = 9;
cargoSubCat[5][0] = c19;

var c20 = new CargoDef();
c20.name = 'Batang Paip (kosong(MT))- Kurang 24 inci';
c20.rateSteveDore = 5.7;
c20.rateGoDown = 0;
c20.ratePipeline = 17;
c20.rateWharf = 9;
cargoSubCat[5][1] = c20;

var c21 = new CargoDef();
c21.name = 'Batang Paip (Disalut (MT)';
c21.rateSteveDore = 5.7;
c21.rateGoDown = 0;
c21.ratePipeline = 17;
c21.rateWharf = 9;
cargoSubCat[5][2] = c21;

var c22 = new CargoDef();
c22.name = 'Kargo Berat (Melebihi 2.5 Tan)';
c22.rateSteveDore = 5.7;
c22.rateGoDown = 0;
c22.ratePipeline = 17;
c22.rateWharf = 9;
cargoSubCat[5][3] = c17;

var c23 = new CargoDef();
c23.name = 'Struktur Keluli/Bilet';
c23.rateSteveDore = 5.7;
c23.rateGoDown = 0;
c23.ratePipeline = 17;
c23.rateWharf = 9;
cargoSubCat[5][4] = c23;


cargoSubCat[6] = new Array();

var c24 = new CargoDef();
c24.name = 'Batang Paip (kosong(MT))- Melebihi 24 inci';
c24.rateSteveDore = 6.5;
c24.rateGoDown = 0;
c24.ratePipeline = 22;
c24.rateWharf = 11;
cargoSubCat[6][0] = c24;

var c25 = new CargoDef();
c25.name = 'Batang Paip (kosong(MT))- Kurang 24 inci';
c25.rateSteveDore = 5.7;
c25.rateGoDown = 0;
c25.ratePipeline = 22;
c25.rateWharf = 11;
cargoSubCat[6][1] = c25;

var c26 = new CargoDef();
c26.name = 'Batang Paip (Disalut (MT)';
c26.rateSteveDore = 5.7;
c26.rateGoDown = 0;
c26.ratePipeline = 22;
c26.rateWharf = 11;
cargoSubCat[6][2] = c26;

var c27 = new CargoDef();
c27.name = 'Kargo Berat (Melebihi 2.5 Tan)';
c27.rateSteveDore = 5.7;
c27.rateGoDown = 0;
c27.ratePipeline = 22;
c27.rateWharf = 11;
cargoSubCat[6][3] = c27;

var c28 = new CargoDef();
c28.name = 'Struktur Keluli/Bilet';
c28.rateSteveDore = 5.7;
c28.rateGoDown = 0;
c28.ratePipeline = 22;
c28.rateWharf = 11;
cargoSubCat[6][4] = c28;

cargoSubCat[7] = new Array();

var c29 = new CargoDef();
c29.name = 'Wheeled Vehicles (Less than 2.5 tonnes in weight)';
c29.rateSteveDore = 0;
c29.rateGoDown = 0;
c29.ratePipeline = 10;
c29.rateWharf = 7;
cargoSubCat[7][0] = c29;

cargoSubCat[8] = new Array();

var c30 = new CargoDef();
c30.name = 'Sheep, goats, pigs, calves, cats & monkeys'; 
c30.rateSteveDore = 0;
c30.rateGoDown = 0;
c30.ratePipeline = 0;
c30.rateWharf = 0.8;
cargoSubCat[8][0] = c30;

var c31 = new CargoDef();
c31.name = 'Poultry or birds'; 
c31.rateSteveDore = 0;
c31.rateGoDown = 0;
c31.ratePipeline = 0;
c31.rateWharf = 0.8;
cargoSubCat[8][1] = c31;

var c32 = new CargoDef();
c32.name = 'Cattle, horses, ponies, mules & donkeys'; 
c32.rateSteveDore = 0;
c32.rateGoDown = 0;
c32.ratePipeline = 0;
c32.rateWharf = 3;
cargoSubCat[8][2] = c32;

var c33 = new CargoDef();
c33.name = 'Elephants'; 
c33.rateSteveDore = 0;
c33.rateGoDown = 0;
c33.ratePipeline = 0;
c33.rateWharf = 3;
cargoSubCat[8][3] = c33;

var c34 = new CargoDef();
c34.name = 'Wild animals & reptiles in cage or crates'; 
c34.rateSteveDore = 0;
c34.rateGoDown = 0;
c34.ratePipeline = 0;
c34.rateWharf = 8;
cargoSubCat[8][4] = c34;

cargoSubCat[9] = new Array();

var c35 = new CargoDef();
c35.name = 'Motocycles'; 
c35.rateSteveDore = 0;
c35.rateGoDown = 0;
c35.ratePipeline = 3.5;
c35.rateWharf = 3;
cargoSubCat[9][0] = c35;

var c36 = new CargoDef();
c36.name = 'Bicycles & tricycles'; 
c36.rateSteveDore = 0;
c36.rateGoDown = 0;
c36.ratePipeline = 1.5;
c36.rateWharf = 1.2;
cargoSubCat[9][1] = c36;

var c37 = new CargoDef();
c37.name = 'Perambulators'; 
c37.rateSteveDore = 0;
c37.rateGoDown = 0;
c37.ratePipeline = 3;
c37.rateWharf = 2.5;
cargoSubCat[9][2] = c37;

var c38 = new CargoDef();
c38.name = 'Empty drums'; 
c38.rateSteveDore = 0;
c38.rateGoDown = 0;
c38.ratePipeline = 0.6;
c38.rateWharf = 0.4;
cargoSubCat[9][3] = c38;

cargoSubCat[10] = new Array();

var c39 = new CargoDef();
c39.name = 'Chemical, petroleum & petroleum produtcs'; 
c39.rateSteveDore = 0;
c39.rateGoDown = 0;
c39.ratePipeline = 2.5;
c38.rateWharf = 2;
cargoSubCat[10][0] = c39;

var c40 = new CargoDef();
c40.name = 'Palm oil & other edible liquid cargo'; 
c40.rateSteveDore = 0;
c40.rateGoDown = 0;
c40.ratePipeline = 2;
c40.rateWharf = 1.5;
cargoSubCat[10][1] = c40;


cargoSubCat[11] = new Array();

var c41 = new CargoDef();
c41.name = 'Dry cargo in bulk'; 
c41.rateSteveDore = 0.7;
c41.rateGoDown = 0;
c41.ratePipeline = 1.5;
c41.rateWharf = 1;
cargoSubCat[11][0] = c41;


cargoSubCat[12] = new Array();

var c42 = new CargoDef();
c42.name = 'Miscellaneous (Not cover above)'; 
c42.rateSteveDore = 6;
c42.rateGoDown = 0;
c42.ratePipeline = 7;
c42.rateWharf = 5;
cargoSubCat[12][0] = c42;


function fillCargoCategory() {
	for (i =0; i< cargoCat.length; i++) {
		fCargoCat.options[fCargoCat.options.length] = new Option(cargoCat[i], i, false, false);
	}
}

function fillCargoSubCategory() {
	//Clear Option List
	for (i = fCargoSubCat.length; i > -1; i--) {
		fCargoSubCat.options[i] = null;
	}
	
	cat = fCargoCat.options[fCargoCat.selectedIndex].value;
	for (i = 0; i < cargoSubCat[cat].length; i++) {
		var	c = cargoSubCat[cat][i];
		//alert (c.name);
		catName = c.name;
		fCargoSubCat.options[fCargoSubCat.length] = new Option(catName, i, false, false);
	}
}

/**
* Convert hours to day
*/
function hoursToDays(hrs) {
	
	if (isNaN(hrs)) {
		alert ('Port Stay must be a numeric value');
		return;
	}
	
	if (hrs < 25) return 1;
	
	var d = Math.round(hrs/24);
	if (hrs%24) {
		d = d+1;
	}
	
	return d;
}

	/* Calc Pilotage AReturn charges based on user Loa */
function getLOACharges(userLoa) {
		var loaCharges = new Array();
		var loaRulesMin = new Array();
		var loaRulesMax = new Array();

		loaRulesMin[0] = 1;
		loaRulesMax[0] = 60;
		loaRulesMin[1] = 61;
		loaRulesMax[1] = 75;
		loaRulesMin[2] = 76;
		loaRulesMax[2] = 90;
		loaRulesMin[3] = 91;
		loaRulesMax[3] = 105;
		loaRulesMin[4] = 106;
		loaRulesMax[4] = 120;
		loaRulesMin[5] = 121;
		loaRulesMax[5] = 135;
		loaRulesMin[6] = 136;
		loaRulesMax[6] = 150;
		loaRulesMin[7] = 151;
		loaRulesMax[7] = 165;
		loaRulesMin[8] = 166;
		loaRulesMax[8] = 180;
		loaRulesMin[9] = 181;
		loaRulesMax[9] = 205;
		loaRulesMin[10] = 206;
		loaRulesMax[10] = -1;


		/* Charges Based on LOA */
		loaCharges[0] = 75;
		loaCharges[1] = 90;
		loaCharges[2] = 105;
		loaCharges[3] = 120;
		loaCharges[4] = 135;
		loaCharges[5] = 150;
		loaCharges[6] = 165;
		loaCharges[7] = 180;
		loaCharges[8] = 205;
		loaCharges[9] = 220;
		loaCharges[10] = 235;
		
		for (var i=0; i< loaRulesMin.length; i++) {
			if (loaRulesMax[i] == -1) {
				if (userLoa >= loaRulesMin[i]) {
					var diff = userLoa - (loaRulesMin[i] -1);
					var difftot = diff * 3;
					var totLoa = loaCharges[i] + difftot;
					return totLoa;
				}
			}	

			if (userLoa > loaRulesMin[i] && userLoa <= loaRulesMax[i]) {
				return (loaCharges[i]);
			}
		}	
	}


/**
* Calc Pilotage B
*/
function getPilotageBCharges(userLoa) {
	var tot = 0;
	if (userLoa < 90) {
		tot = 85;
	}

	if (userLoa >=90 && userLoa <=205) {
		tot = 125;
	}

	if (userLoa > 205) {
		var diff = userLoa - 205;
		var difftot = diff * 3;
		tot = 125 + diff;
	}
	return tot;
}

/**
* Calc total valu for pilotage A
*/
function sumPilotageA(loa) {
	tot = 0;
	tot = getLOACharges(loa);
	tot = tot * 2;
	return tot;	
}

/**
* Calc total value for pilotage B
*/
function sumPilotageB(loa, night) {
	tot = 0;
	tot = getPilotageBCharges(loa);
	
	//Times to (in/out);
	tot = tot * 2;
	
	//Add 50% for night services
	if (night) {
		a = tot * 0.5;
		tot = tot + a;
	}
	
	return tot;
}

/**
* Calc total value for port dues
*/
function sumPortDues(charge, grt) {
	return Math.round(charge * grt);
}

/**
* Get tugs charge based on loa
*/
function getTugsCharge(loa) {
	if (loa <= 91) {
		return 100;
	}
	
	if (loa > 91 && loa <= 152) {
		return 150;
	}
	
	if (loa > 152) {
		return 225;
	}
}

/**
* Calc total of Hire of tugs charge
*/
function sumHireOfTugs(loa, movement, tugs, night) {
	tot = getTugsCharge(loa) * movement * tugs;
	if (night) {
		a = tot * 0.5;
		tot = tot+a;
	}
	return tot;
}

/**
* Calc total berthing services charges
*/
function sumBerthing(charge, movement, night) {
	tot = charge * movement;
	if (night) {
		a = tot * 0.5;
		tot = tot+a;
	}
	
	return Math.round(tot);
}

function sumDockage(charge, grt, portstay) {
	/*
	g = grt/100;
	if (grt%100) {
		g = g + 1;
	}
	x = grt%100;
	alert(x);
	*/
	g = Math.round(grt/100);
	tot = charge * g * portstay;
	
	return tot;
}

function sumHarbourRate(volume) {
	tot = 1.2 * volume;
	return tot;
}

function sumStevedore(charge, volume) {
	return charge * volume;
}


function getGarbageCharge(grt) {
	if (grt <= 750) {
		return 10;
	}
	
	if (grt > 750 && grt <= 15000) {
		return 30;
	}
	
	if (grt > 15000) {
		return 50;
	}
}

function sumGarbage(grt, portstay) {
	
	charge = getGarbageCharge(grt);
	days = hoursToDays(portstay);
	return charge * days;
}

function sumHandlingCharges(charge, volume) {
	return charge * volume;
}

function sumFreshWater(charge, tonne) {
	tot = charge * tonne;
	if (tot < 100) {
		tot = 100;
	}
	return tot;
}

function sumHatch(charge, hatch) {
	return charge * hatch;
}

function sumHandlingCharges(charge, volume) {
	return charge * volume;
}

function sumContainerCharges() {
}

/**
*Parse number to currency format
*/

function parseelement(thisone){

var wd="n"; //with dotted, n=no; y=yes
var tempnum;

thisone = '' + thisone;
for (var i=0;i<thisone.length;i++){
	if (thisone.charAt(i)=="."){
	wd="y";
	break;
	}
}
	
if (wd=="n")
	thisone=thisone+".00";
else{
	if (thisone.charAt(thisone.length-2)==".")
		thisone=thisone+"0";
	else{
	tempnum=Math.round(thisone*100)/100;
	thisone=tempnum;}
}
return thisone;
}
