//UNRESOLVED ISSUES
//1. cannot determine from Aus Post brochure if lodgement and destination offices are within 50 km of each other
//2. cannot determine from Aus Post brochure if LOCAL office parcel rates will require air freight - generally unlikely unless posted from remote areas
//3. business owner needs to decide on whether/when to use prepaid satchels - these not yet configured - would need weight, number rules


function getpostage(destinationpostcode,lodgementpostcode,regularorexpress){
	
	//alert(destinationpostcode+lodgementpostcode+regularorexpress);
	//get destination zone options (some postcodes have 2 zones where cheapest is chosen
	//get this destinationpostcode selection from cookie later
	var destzonestring = getzones(destinationpostcode);
	var destzonearray = destzonestring.split("|");
	var destzone1 = destzonearray[0];
	var destzone2 = destzonearray[1];
	
	var lodgezonestring = getzones(lodgementpostcode);
	var lodgezonearray = lodgezonestring.split("|");
	var lodgezone1 = lodgezonearray[0];
	var lodgezone2 = lodgezonearray[1];

	//can this be posted as a local parcel
	var canpostlocal = getcanpostlocal(lodgementpostcode,destinationpostcode);

	//get lodgement and destination states using postcodes since states dont always correlate with codes
	var samestate = false;
	var lodgestate = getstate(lodgementpostcode);
	var deststate = getstate(destinationpostcode);
	(lodgestate==deststate)?samestate=true:samestate=false;
	
	//get baserate parcel postage
	var baserate = getbaserate(samestate,destzone1,canpostlocal,regularorexpress);

	//get variable rate parcel postage
	var variablerate = getvariablerate(destzone1,destzone2,lodgezone1,canpostlocal,regularorexpress);
 
	//get weight units to nearest kg rounded upwards
	var weightunits = getweightunits();
		
	//calculate postage
	var postage = baserate + (weightunits*variablerate) + packingfee;
 
	//write postage to cookie
	document.cookie="postage="+postage;

	//write destintation postcode to cookie
	document.cookie="destinationpostcode="+destinationpostcode;
	
	//write regular or express selection to cookie
	document.cookie="regularorexpress="+regularorexpress;
	
	//write total weight to cookie so can read and compare with current weight and recalculate on page load if changed
	document.cookie="previoustotalweight="+totalweight;
	
	//reload page cookies
	history.go(0); 
}

function getzones(pcode){
	var pc=pcode.toString();
	if(pc.indexOf("0")==0){pc=pc.substring(1,pc.length)}//remove leading 0 before using parseInt()
	pc = parseInt(pc);
	var z="";//primary zone
	var x="NO2NDZONE";//secondary zone 0870
	if(pc>= 200 && pc<= 299){z="N2"}
	else if(pc>= 1000 && pc<= 2263){z="N1"}
	else if(pc>= 2264 && pc<= 2484){z="N2"}
	else if(pc>= 2485 && pc<= 2486){z="N2"; x="Q1"}
	else if(pc>= 2487 && pc<= 2499){z="N2"}
	else if(pc>= 2500 && pc<= 2530){z="N1"}
	else if(pc>= 2531 && pc<= 2554){z="N2"}
	else if(pc>= 2555 && pc<= 2574){z="N1"}
	else if(pc>= 2575 && pc<= 2639){z="N2"}
	else if(pc>= 2640 && pc<= 2641){z="V2"; x="N2"}
	else if(pc>= 2642 && pc<= 2647){z="N2"}
	else if(pc== 2648){z="V2"}
	else if(pc>= 2649 && pc<= 2714){z="N2"}
	else if(pc== 2715){z="V2"}
	else if(pc== 2716){z="N2"}
	else if(pc>= 2717 && pc<= 2719){z="V2"}
	else if(pc>= 2720 && pc<= 2730){z="N2"}
	else if(pc>= 2731 && pc<= 2739){z="V2"}
	else if(pc>= 2740 && pc<= 2786){z="N1"}
	else if(pc>= 2787 && pc<= 2879){z="N2"}
	else if(pc== 2880){z="S2"}
	else if(pc>= 2881 && pc<= 2889){z="N2"}
	else if(pc== 2890){z="N1"}
	else if(pc>= 2891 && pc<= 2898){z="N2"}
	else if(pc== 2899){z="NF"}
	else if(pc>= 2900 && pc<= 2999){z="N2"}
	else if(pc>= 3000 && pc<= 3220){z="V1"}
	else if(pc>= 3221 && pc<= 3334){z="V2"}
	else if(pc>= 3335 && pc<= 3341){z="V1"}
	else if(pc>= 3342 && pc<= 3424){z="V2"}
	else if(pc>= 3425 && pc<= 3443){z="V1"}
	else if(pc>= 3444 && pc<= 3688){z="V2"}
	else if(pc>= 3689 && pc<= 3690){z="V2"; x="N2"}
	else if(pc>= 3691 && pc<= 3749){z="V2"}
	else if(pc>= 3750 && pc<= 3811){z="V1"}
	else if(pc>= 3812 && pc<= 3909){z="V2"}
	else if(pc>= 3910 && pc<= 3920){z="V1"}
	else if(pc>= 3921 && pc<= 3925){z="V2"}
	else if(pc>= 3926 && pc<= 3944){z="V1"}
	else if(pc>= 3945 && pc<= 3971){z="V2"}
	else if(pc>= 3972 && pc<= 3978){z="V1"}
	else if(pc== 3979){z="V2"}
	else if(pc>= 3980 && pc<= 3983){z="V1"}
	else if(pc>= 3984 && pc<= 3999){z="V2"}
	else if(pc>= 8000 && pc<= 8999){z="V1"}
	else if(pc>= 4000 && pc<= 4224){z="Q1"}
	else if(pc== 4225){z="N2"; x="Q1"}
	else if(pc>= 4226 && pc<= 4299){z="Q1"}
	else if(pc>= 4300 && pc<= 4449){z="Q2"}
	else if(pc>= 4450 && pc<= 4499){z="Q3"}
	else if(pc>= 4500 && pc<= 4549){z="Q1"}
	else if(pc>= 4550 && pc<= 4699){z="Q2"}
	else if(pc>= 4700 && pc<= 4805){z="Q3"}
	else if(pc>= 4806 && pc<= 4899){z="Q4"}
	else if(pc>= 9000 && pc<= 9299){z="Q1"}
	else if(pc>= 9400 && pc<= 9596){z="Q1"}
	else if(pc>= 9597 && pc<= 9599){z="Q2"}
	else if(pc>= 9700 && pc<= 9799){z="Q1"}
	else if(pc>= 9880 && pc<= 9919){z="Q2"}
	else if(pc>= 9920 && pc<= 9959){z="Q3"}
	else if(pc>= 9960 && pc<= 9999){z="Q4"}
	else if(pc>= 5000 && pc<= 5199){z="S1"}
	else if(pc>= 5200 && pc<= 5749){z="S2"}
	else if(pc>= 5800 && pc<= 5999){z="S1"}
	else if(pc>= 800 && pc<= 999){z="NT1"}
	else if(pc>= 6000 && pc<= 6214){z="W1"}
	else if(pc>= 6215 && pc<= 6699){z="W2"}
	else if(pc>= 6700 && pc<= 6799){z="W3"}
	else if(pc>= 6800 && pc<= 6999){z="W1"}
	else if(pc>= 7000 && pc<= 7999){z="T1"}
	else{alert("Please enter a valid Australian postcode")}
	var codes = z+"|"+x;
	return codes;
}

function getzonerates(lodgezone1,regularorexpress){//called in getvariablerate()
	if(regularorexpress=="regular"){
		//array contains destination zones in this order: N1,N2,V1,V2,Q1,Q2,Q3,Q4,S1,S2,NT1,W1,W2,W3
		if      (lodgezone1 == "N1") {var ratesarray = new Array(0.00,0.30,0.50,0.55,0.50,0.85,1.45,1.65,0.80,1.20,2.60,2.20,2.55,2.65,1.70)}
		else if (lodgezone1 == "N2") {var ratesarray = new Array(0.30,0.30,0.55,0.60,0.80,1.05,1.60,1.70,0.85,1.65,2.60,2.30,2.65,2.75,1.85)}
		else if (lodgezone1 == "V1") {var ratesarray = new Array(0.50,0.55,0.00,0.30,0.80,1.35,1.65,1.75,0.50,0.80,2.60,2.20,2.30,2.65,0.85)}
		else if (lodgezone1 == "V2") {var ratesarray = new Array(0.55,0.60,0.30,0.30,1.45,1.65,1.75,2.20,0.55,1.05,2.60,2.30,2.65,2.75,1.05)}
		else if (lodgezone1 == "Q1") {var ratesarray = new Array(0.50,0.80,0.80,1.45,0.00,0.30,0.45,0.80,1.45,1.65,2.20,2.10,2.45,2.55,2.20)}
		else if (lodgezone1 == "Q2") {var ratesarray = new Array(0.85,1.05,1.35,1.65,0.30,0.30,0.45,0.80,1.50,2.20,2.20,2.20,2.55,2.65,2.55)}
		else if (lodgezone1 == "Q3") {var ratesarray = new Array(1.45,1.60,1.65,1.75,0.45,0.45,0.30,0.50,2.10,2.25,2.20,2.30,2.65,2.75,2.65)}
		else if (lodgezone1 == "Q4") {var ratesarray = new Array(1.65,1.70,1.75,2.20,0.80,0.80,0.50,0.45,2.30,2.45,1.65,2.60,2.75,2.85,2.75)}
		else if (lodgezone1 == "S1") {var ratesarray = new Array(0.55,0.80,0.50,0.55,1.10,1.50,2.10,2.30,0.00,0.30,2.20,1.65,2.00,2.20,2.10)}
		else if (lodgezone1 == "S2") {var ratesarray = new Array(1.20,1.55,0.80,1.05,1.65,2.20,2.25,2.45,0.30,0.30,2.60,2.20,2.20,2.60,2.30)}
		else if (lodgezone1 == "NT1"){var ratesarray = new Array(2.60,2.60,2.60,2.60,2.20,2.20,2.20,1.65,2.20,2.60,0.50,2.60,2.60,2.60,2.60)}
		else if (lodgezone1 == "W1") {var ratesarray = new Array(1.65,2.20,1.65,2.20,2.10,2.20,2.30,2.60,1.65,2.20,2.60,0.00,0.30,0.80,2.55)}
		else if (lodgezone1 == "W2") {var ratesarray = new Array(2.50,2.60,2.20,2.60,2.45,2.55,2.65,2.75,2.20,2.30,2.60,0.30,0.30,0.80,2.65)}
		else if (lodgezone1 == "W3") {var ratesarray = new Array(2.60,2.70,2.60,2.70,2.55,2.65,2.75,2.85,2.30,2.60,2.60,0.80,0.80,0.80,2.75)}
		else if (lodgezone1 == "T1") {var ratesarray = new Array(1.60,1.70,0.55,1.05,2.20,2.55,2.65,2.75,1.65,2.20,2.60,2.20,2.60,2.70,0.20)}
	}else{
		if(regularorexpress=="express"){
			if      (lodgezone1 == "N1") {var ratesarray = new Array(0.00,2.10,2.40,3.10,2.50,3.10,4.60,6.60,3.50,4.10,10.70,9.15,10.45,15.60,3.60)}
			else if (lodgezone1 == "N2") {var ratesarray = new Array(2.10,3.10,4.50,5.10,4.50,5.10,6.60,8.60,5.50,6.10,12.75,11.20,12.50,17.65,5.65)}
			else if (lodgezone1 == "V1") {var ratesarray = new Array(2.40,4.50,0.00,0.65,3.90,4.60,6.00,8.00,2.20,2.90,10.65,7.55,8.85, 3.95,2.30)}
			else if (lodgezone1 == "V2") {var ratesarray = new Array(3.10,5.10,0.65,0.70,4.50,5.20,6.60,8.90,2.80,3.50,11.30,8.20,9.50,14.60,2.90)}
			else if (lodgezone1 == "Q1") {var ratesarray = new Array(2.50,4.50,3.90,4.50,0.00,0.70,2.10,4.00,4.55,5.20,9.85,10.10,11.35,16.50,5.30)}
			else if (lodgezone1 == "Q2") {var ratesarray = new Array(2.90,5.05,4.55,5.20,0.70,0.95,2.60,4.50,5.25,5.90,10.55,10.80,12.05,17.20,6.00)}
			else if (lodgezone1 == "Q3") {var ratesarray = new Array(4.60,6.60,6.00,6.60,2.10,2.70,2.50,5.85,6.60,7.30,11.90,12.50,13.70,19.10,7.80)}
			else if (lodgezone1 == "Q4") {var ratesarray = new Array(6.60,8.60,8.00,8.90,4.00,4.60,5.85,5.05,8.90,9.60,13.40,13.95,15.25,20.40,9.60)}
			else if (lodgezone1 == "S1") {var ratesarray = new Array(3.50,5.50,2.20,2.90,4.55,5.25,6.60,8.90,0.00,0.65,9.25,5.90,7.20,12.30,3.70)}
			else if (lodgezone1 == "S2") {var ratesarray = new Array(4.10,6.10,2.90,3.50,5.20,5.90,7.30,9.60,0.65,0.70,9.90,6.55,7.90,12.95,4.35)}
			else if (lodgezone1 == "NT1"){var ratesarray = new Array(10.70,12.75,10.65,11.30,9.85,10.55,11.90,13.40,9.25,9.90,4.70,14.60,15.90,11.50,12.90)}
			else if (lodgezone1 == "W1") {var ratesarray = new Array(9.15,11.20,7.55,8.20,10.10,10.80,12.50,13.95,5.90,6.55,14.60,0.00,1.30,6.40,9.00)}
			else if (lodgezone1 == "W2") {var ratesarray = new Array(10.45,12.50,8.85,9.50,11.35,12.05,13.70,15.25,7.20,7.90,15.90,1.30,1.40,7.65,10.30)}
			else if (lodgezone1 == "W3") {var ratesarray = new Array(15.60,17.65,13.95,14.60,16.50,17.20,19.10,20.40,12.30,12.95,11.50,6.40,7.65,1.30,15.40)}
			else if (lodgezone1 == "T1") {var ratesarray = new Array(3.60,5.65,2.30,2.90,5.30,6.00,7.80,9.60,3.70,4.35,12.90,9.00,10.30,15.40,0.50)}
		}else{
			alert("Neither Regular nor Express were selected");
		}
	}
	return ratesarray;
}

function getstate(pc){
	var pc=parseInt(pc);
	if      ((pc>=200  && pc<=299) ||(pc>=1000 && pc<=2999)){var state="nsw"}
	else if ((pc>=3000 && pc<=3999)||(pc>=8000 && pc<=8999)){var state="vic"}
	else if ((pc>=4000 && pc<=4899)||(pc>=9000 && pc<=9999)){var state="qld"}
	else if (pc>=5000 && pc<=5999){var state="sa"}
	else if (pc>=800 && pc<=999){var state="nt"}
	else if (pc>=6000 && pc<=6999){var state="wa"}
	else if (pc>=7000 && pc<=7999){var state="tas"}
	return state;
}

function getbaserate(samestate,destzone1,canpostlocal,regularorexpress){//called from getpostage()
	if(canpostlocal){
		if(totalweight<=500){
			var baserate=2.75;
		}else{
			var baserate=4;
		}
	}else{
		if(regularorexpress=="regular"){
			if(totalweight<=250){
				var baserate = 3.4;
			}else{
				if(totalweight <=500){
					var baserate = 4.4;
				}else{	
					if(samestate){
						var baserate = 6;
					}else{
						if(destzone1=="NI"){
							var baserate = 6.95;
						}else{
							var baserate = 7.65;
						}
					}
				}
			}	
		}else{
			if(regularorexpress=="express"){
				if(totalweight<=500){
					var baserate = 6.5;
				}else{
					if(destzone1=="NI"){
						var baserate = 8.65
					}else{
						var baserate = 9.50;
					}
				}
			}
		}
	}
	return baserate;
}

function getvariablerate(destzone1,destzone2,lodgezone1,canpostlocal,regularorexpress){
	if(canpostlocal){
		var variablerate1=0;
	}else{
		if(totalweight<=500){
			var variablerate1=0;
		}else{	
			var ratesarray1 = getzonerates(lodgezone1,regularorexpress)//get all rates for lodgement zone 1, some have 2 options for zones which needs the cheapest worked out
			//var ratesarray2 = getzonerates(lodgezone2)
			var i;
			if      (destzone1=="N1" || destzone2=="N1"){i=0}
			else if (destzone1=="N2" || destzone2=="N2"){i=1}
			else if (destzone1=="V1" || destzone2=="V1"){i=2}
			else if (destzone1=="V2" || destzone2=="V2"){i=3}
			else if (destzone1=="Q1" || destzone2=="Q1"){i=4}
			else if (destzone1=="Q2" || destzone2=="Q2"){i=5}
			else if (destzone1=="Q3" || destzone2=="Q3"){i=6}
			else if (destzone1=="Q4" || destzone2=="Q4"){i=7}
			else if (destzone1=="S1" || destzone2=="S1"){i=8}
			else if (destzone1=="S2" || destzone2=="S2"){i=9}
			else if (destzone1=="NT1" || destzone2=="NT1"){i=10}
			else if (destzone1=="W1" || destzone2=="W1"){i=11}
			else if (destzone1=="W2" || destzone2=="W2"){i=12}
			else if (destzone1=="W3" || destzone2=="W3"){i=13}
			else if (destzone1=="T1" || destzone2=="T1"){i=14}
			else if (destzone1=="NF" || destzone2=="NF"){i=15}

			var variablerate1 = ratesarray1[i];
			//var variablerate2 = ratesarray2[i];
		}
	}
	return variablerate1;
}

function getweightunits(){
	var wholeunits = parseInt(totalweight/1000); // ie units of 1000 g
	var remainder = totalweight % 1000;
	var partunits = 0;
	if (remainder > 0) {
		partunits = 1;
	}else{
		partunits = 0;
	}
	var weightunits = wholeunits + partunits;
	return weightunits;
}

function getcanpostlocal(lodgementpostcode,destinationpostcode){
	var lpc=parseInt(lodgementpostcode);
	var dpc=parseInt(destinationpostcode);
	var canpostlocal = false;
	//assuming that the lodging office will be same office used to deliver parcels in the same postcode, at least
	if(lodgementpostcode==destinationpostcode){
		if	   (lpc>=835 && lpc<=899){canpostlocal=true}
		else if(lpc>=1970 && lpc<=1999){canpostlocal=true}
		else if(lpc>=2240 && lpc<=2490){canpostlocal=true}
		else if(lpc>=2500 && lpc<=2554){canpostlocal=true}
		else if(lpc>=2575 && lpc<=2599){canpostlocal=true}
		else if(lpc>=2640 && lpc<=2739){canpostlocal=true}
		else if(lpc>=2787 && lpc<=2880){canpostlocal=true}
		else if(lpc>=2890 && lpc<=2899){canpostlocal=true}
		else if(lpc>=3211 && lpc<=3334){canpostlocal=true}
		else if(lpc>=3342 && lpc<=3424){canpostlocal=true}
		else if(lpc>=3444 && lpc<=3749){canpostlocal=true}
		else if(lpc>=3812 && lpc<=3909){canpostlocal=true}
		else if(lpc>=3921 && lpc<=3925){canpostlocal=true}
		else if(lpc>=3945 && lpc<=3971){canpostlocal=true}
		else if(lpc>=3211 && lpc<=3334){canpostlocal=true}
		else if(lpc>=3342 && lpc<=3424){canpostlocal=true}
		else if(lpc>=3444 && lpc<=3749){canpostlocal=true}
		else if(lpc>=3812 && lpc<=3909){canpostlocal=true}
		else if(lpc>=3921 && lpc<=3925){canpostlocal=true}
		else if(lpc>=3945 && lpc<=3971){canpostlocal=true}
		else if(lpc>=3979 && lpc<=3979){canpostlocal=true}
		else if(lpc>=3984 && lpc<=3999){canpostlocal=true}
		else if(lpc>=4210 && lpc<=4499){canpostlocal=true}
		else if(lpc>=4550 && lpc<=4899){canpostlocal=true}
		else if(lpc>=5200 && lpc<=5749){canpostlocal=true}
		else if(lpc>=6215 && lpc<=6507){canpostlocal=true}
		else if(lpc>=6509 && lpc<=6646){canpostlocal=true}
		else if(lpc>=6700 && lpc<=6799){canpostlocal=true}
		else if(lpc>=7200 && lpc<=7499){canpostlocal=true}
		else if(lpc>=7900 && lpc<=7999){canpostlocal=true}
		else if(lpc>=9597 && lpc<=9599){canpostlocal=true}
		else if(lpc>=9700 && lpc<=9799){canpostlocal=true}
		else if(lpc>=9880 && lpc<=9999){canpostlocal=true}
		else{canpostlocal=false}
	}return canpostlocal;
}
