/*
 * Shipping Calculator for Toll Priority.
 * (c)Copyright 2008 Monster Fish Pty. Ltd.
 */

/*
 * Base rates for each shipping zone.
 */
var baseZoneRates = new Array(
		new Array("SYD",0.79),
		new Array("ABX",0.61),
		new Array("CBR",0.73),
		new Array("NTL",1.09),
		new Array("WOL",1.09),
		new Array("NSW1",1.09),
		new Array("NSW2",1.17),
		new Array("NSW3",1.24),
		new Array("NSW4",1.24),
		new Array("NSW5",1.55),
		new Array("NSW6",1.55),
		new Array("NSW7",1.55),
		new Array("NSW8",1.64),
		new Array("NSW9",2.31),
		
		new Array("MEL",0.33),
		new Array("VIC1",0.36),
		new Array("VIC2",0.40),
		new Array("BNE",1.11),
		new Array("CNS",2.33),
		new Array("MKY",2.01),
		new Array("ROK",1.83),
		new Array("TSV",2.13),
		new Array("YORK",13.49),
		new Array("QLD1",1.67),
		new Array("QLD2",1.95),
		new Array("QLD3",2.29),
		new Array("QLD4",2.31),
		new Array("QLD5",3.45),
		new Array("QLD6",2.64),
		new Array("QLD7",2.56),
		new Array("QLD8",3.07),
		new Array("QLD9",3.39),
		new Array("ADL",0.48),
		new Array("SA1",0.70),
		new Array("SA2",0.73),
		new Array("SA3",0.81),
		new Array("SA4",0.95),
		new Array("SA5",0.97),
		new Array("PER",1.69),
		new Array("WA1",2.82),
		new Array("WA2",3.53),
		new Array("WA3",4.14),
		new Array("WA4",4.75),
		new Array("DRW",2.92),
		new Array("ASP",2.01),
		new Array("NT1",3.65),
		new Array("HBA",1.40),
		new Array("LST",1.22),
		new Array("TAS1",1.83),
		new Array("TAS2",1.83),
		new Array("TAS3",1.83)
);
/*
 * Postcode-to-Zone mappings
 */
var postcodeZones = new Array(
		new Array(2000,2234,"SYD"),
		new Array(2250,2311,"NTL"),
		new Array(2312,2312,"NSW3"),
		new Array(2314,2327,"NTL"),
		new Array(2328,2390,"NSW8"),
		new Array(2395,2396,"NSW7"),
		new Array(2397,2421,"NSW8"),
		new Array(2422,2424,"NSW3"),
		new Array(2425,2425,"NSW8"),
		new Array(2426,2446,"NSW3"),
		new Array(2447,2466,"NSW4"),
		new Array(2469,2490,"NSW5"),
		new Array(2500,2534,"WOL"),
		new Array(2535,2551,"NSW2"),
		new Array(2555,2567,"SYD"),
		new Array(2568,2579,"WOL"),
		new Array(2580,2594,"NSW6"),
		new Array(2600,2620,"CBR"),
		new Array(2621,2633,"NSW6"),
		new Array(2640,2641,"ABX"),
		new Array(2642,2647,"NSW6"),
		new Array(2648,2648,"NSW9"),
		new Array(2649,2714,"NSW6"),
		new Array(2715,2715,"NSW9"),
		new Array(2716,2716,"NSW6"),
		new Array(2717,2719,"NSW9"),
		new Array(2720,2732,"NSW6"),
		new Array(2733,2739,"NSW9"),
		new Array(2745,2751,"SYD"),
		new Array(2752,2752,"NSW1"),
		new Array(2753,2756,"SYD"),
		new Array(2757,2758,"NSW1"),
		new Array(2759,2770,"SYD"),
		new Array(2773,2785,"NSW1"),
		new Array(2786,2831,"NSW7"),
		new Array(2832,2841,"NSW9"),
		new Array(2842,2877,"NSW7"),
		new Array(2878,2880,"NSW9"),
		new Array(2900,2914,"CBR"),

		new Array(3000,3138,"MEL"),
		new Array(3139,3139,"VIC1"), 
		new Array(3140,3207,"MEL"), 
		new Array(3211,3232,"VIC1"), 
		new Array(3233,3334,"VIC2"), 
		new Array(3335,3361,"VIC1"), 
		new Array(3363,3424,"VIC2"), 
		new Array(3427,3427,"VIC1"), 
		new Array(3428,3428,"MEL"), 
		new Array(3429,3461,"VIC1"), 
		new Array(3462,3549,"VIC2"),
		new Array(3550,3555,"VIC1"), 
		new Array(3556,3691,"VIC2"), 
		new Array(3693,3694,"VIC1"), 
		new Array(3695,3749,"VIC2"), 
		new Array(3750,3751,"VIC1"), 
		new Array(3752,3752,"MEL"), 
		new Array(3753,3764,"VIC1"), 
		new Array(3765,3765,"MEL"),
		new Array(3766,3792,"VIC1"), 
		new Array(3793,3793,"MEL"), 
		new Array(3795,3795,"VIC1"), 
		new Array(3796,3796,"MEL"), 
		new Array(3797,3800,"VIC1"), 
		new Array(3802,3806,"MEL"), 
		new Array(3807,3818,"VIC1"), 
		new Array(3820,3909,"VIC2"), 
		new Array(3910,3910,"MEL"),
		new Array(3911,3929,"VIC1"), 
		new Array(3930,3931,"MEL"),
		new Array(3933,3951,"VIC1"), 
		new Array(3953,3971,"VIC2"), 
		new Array(3975,3977,"MEL"), 
		new Array(3978,3996,"VIC1"),


		new Array(4000,4179,"BNE"),
		new Array(4183,4184,"QLD2"), 
		new Array(4205,4207,"BNE"), 
		new Array(4208,4275,"QLD2"), 
		new Array(4280,4280,"QLD1"), 
		new Array(4285,4287,"QLD2"), 
		new Array(4300,4305,"BNE"), 
		new Array(4306,4347,"QLD2"), 
		new Array(4350,4352,"QLD1"), 
		new Array(4353,4422,"QLD2"), 
		new Array(4423,4482,"QLD7"), 
		new Array(4486,4487,"QLD2"),
		new Array(4488,4493,"QLD7"), 
		new Array(4494,4498,"QLD2"), 
		new Array(4500,4503,"BNE"), 
		new Array(4504,4569,"QLD1"), 
		new Array(4570,4571,"QLD2"), 
		new Array(4572,4573,"QLD1"), 
		new Array(4574,4574,"QLD2"), 
		new Array(4575,4575,"QLD1"), 
		new Array(4580,4674,"QLD2"), 
		new Array(4676,4699,"QLD3"), 
		new Array(4700,4701,"ROK"), 
		new Array(4702,4723,"QLD3"), 
		new Array(4724,4736,"QLD8"), 
		new Array(4737,4739,"QLD4"),
		new Array(4740,4740,"MKY"), 
		new Array(4741,4805,"QLD4"), 
		new Array(4806,4809,"QLD5"), 
		new Array(4810,4815,"TSV"), 
		new Array(4816,4816,"QLD5"), 
		new Array(4817,4818,"TSV"), 
		new Array(4819,4820,"QLD5"), 
		new Array(4821,4829,"QLD9"), 
		new Array(4830,4830,"YORK"),
		new Array(4849,4850,"QLD5"), 
		new Array(4852,4869,"QLD6"), 
		new Array(4870,4870,"CNS"), 
		new Array(4871,4871,"YORK"),
		new Array(4878,4886,"QLD6"), 
		new Array(4887,4887,"YORK"), 
		new Array(4888,4888,"QLD6"), 
		new Array(4890,4895,"YORK"),


		new Array(5000,5115,"ADL"), 
		new Array(5116,5121,"SA1"), 
		new Array(5125,5127,"ADL"), 
		new Array(5131,5157,"SA1"), 
		new Array(5158,5169,"ADL"), 
		new Array(5170,5214,"SA1"), 
		new Array(5220,5223,"SA5"), 
		new Array(5231,5256,"SA1"), 
		new Array(5259,5346,"SA2"), 
		new Array(5350,5353,"SA1"), 
		new Array(5354,5354,"SA2"), 
		new Array(5355,5355,"SA1"), 
		new Array(5356,5357,"SA2"), 
		new Array(5360,5416,"SA1"), 
		new Array(5417,5433,"SA2"),
		new Array(5434,5440,"SA4"), 
		new Array(5451,5453,"SA1"), 
		new Array(5454,5455,"SA2"), 
		new Array(5460,5462,"SA1"),
		new Array(5464,5495,"SA2"), 
		new Array(5501,5502,"SA1"), 
		new Array(5510,5540,"SA2"), 
		new Array(5550,5583,"SA1"), 
		new Array(5600,5601,"SA2"), 
		new Array(5602,5607,"SA3"), 
		new Array(5608,5609,"SA2"), 
		new Array(5630,5690,"SA3"), 
		new Array(5700,5710,"SA2"), 
		new Array(5720,5722,"SA4"), 
		new Array(5723,5724,"SA5"),
		new Array(5725,2732,"SA4"), 
		new Array(5733,5734,"SA5"), 
		new Array(5950,5950,"ADL"),


		new Array(6000,6181,"PER"), 
		new Array(6207,6430,"WA1"), 
		new Array(6431,6431,"WA2"),
		new Array(6432,6433,"WA1"), 
		new Array(6434,6440,"WA2"), 
		new Array(6442,6532,"WA1"), 
		new Array(6535,6537,"WA2"), 
		new Array(6556,6628,"WA1"), 
		new Array(6630,6705,"WA2"),
		new Array(6707,6722,"WA3"), 
		new Array(6725,6728,"WA4"), 
		new Array(6731,6733,"WA3"), 
		new Array(6731,6733,"WA3"), 
		new Array(6740,6743,"WA4"), 
		new Array(6751,6762,"WA3"),
		new Array(6765,6770,"WA4"), 
		new Array(6798,6799,"WA5"),


		new Array(7000,7011,"HBA"), 
		new Array(7012,7012,"TAS3"), 
		new Array(7015,7016,"HBA"), 
		new Array(7017,7017,"TAS3"),
		new Array(7018,7019,"HBA"), 
		new Array(7020,7020,"TAS3"), 
		new Array(7021,7021,"HBA"), 
		new Array(7022,7030,"TAS3"), 
		new Array(7050,7053,"HBA"), 
		new Array(7054,7054,"TAS3"),
		new Array(7055,7055,"HBA"), 
		new Array(7109,7216,"TAS3"), 
		new Array(7248,7250,"LST"), 
		new Array(7252,7254,"TAS3"), 
		new Array(7255,7257,"TAS2"), 
		new Array(7258,7307,"TAS3"), 
		new Array(7310,7315,"TAS1"),
		new Array(7316,7316,"TAS3"), 
		new Array(7320,7320,"TAS1"), 
		new Array(7321,7321,"TAS3"), 
		new Array(7322,7322,"TAS1"),
		new Array(7325,7470,"TAS3"),

		new Array(0804,0821,"DRW"), 
		new Array(0822,0822,"NT1"), 
		new Array(0828,0836,"DRW"), 
		new Array(0837,0862,"NT1"), 
		new Array(0870,0872,"ASP"), 
		new Array(0880,0886,"NT1")
);
/*
 * Determines the shipping zone based on postcode.
 */
function getZone(postcode) {
	zone = null;
	for (i=0; i<postcodeZones.length; i++) {
		if (Number(postcode)>=postcodeZones[i][0] && Number(postcode)<=postcodeZones[i][1]) {
			zone = postcodeZones[i][2];
			break;
		}
	}
	return zone;
}
/*
 * Retrieves the base rate for the specified shipping zone.
 */
function getBaseRate(zone) {
	baseRate=null;
	if (zone!=null) {
		for (z=0; z<baseZoneRates.length; z++) {
			if (zone==baseZoneRates[z][0]) {
				baseRate = baseZoneRates[z][1];
				break;
			}
		}
	}
	return baseRate;
}

/*
 *  Calculate the shipping cost based on postcode and cubic weight.
 */
function calculateShippingCost(postcode,cubicKg) {
	shippingCost = null;
	
	// retrieve the zone for the postcode then get the base rate for the zone
	zone = getZone(postcode);
	baseRate = getBaseRate(zone);

	if (baseRate!=null) {
		shippingCost = baseRate*cubicKg;	// calculate per cubic kilogram charge
		shippingCost += 7.50;	// apply basic charge for the consignment
		shippingCost *= 1.15;	// apply fuel and security surcharge
		shippingCost *= 1.10;	// apply GST
		shippingCost = Math.round(shippingCost*100);
		shippingCost /= 100;
	}
	return shippingCost;
}