var xmlString = '<?xml version="1.0" encoding="UTF-8"?><records><zone id="1"><class from="0" to="50" cost="25"></class><class from="50.01" to="65" cost="35"></class><class from="65.01" to="89" cost="44"></class><class from="89.01" to="9999" cost="57.5"></class></zone><zone id="2"><class from="0" to="50" cost="30"></class><class from="50.01" to="65" cost="40"></class><class from="65.01" to="89" cost="50"></class><class from="89.01" to="111" cost="58"></class><class from="111.01" to="9999" cost="79"></class></zone><zone id="3"><class from="0" to="50" cost="25"></class><class from="50.01" to="65" cost="36.5"></class><class from="65.01" to="89" cost="45"></class><class from="89.01" to="111" cost="66.5"></class><class from="111.01" to="163" cost="80"></class><class from="163.01" to="9999" cost="101"></class></zone><zone id="4"><class from="0" to="50" cost="25"></class><class from="50.01" to="65" cost="34.5"></class><class from="65.01" to="89" cost="44"></class><class from="89.01" to="111" cost="55"></class><class from="111.01" to="163" cost="79"></class><class from="163.01" to="178" cost="97.9"></class><class from="178.01" to="9999" cost="126.5"></class></zone><zone id="5"><class from="0" to="50" cost="30"></class><class from="50.01" to="65" cost="39.95"></class><class from="65.01" to="89" cost="49.95"></class><class from="89.01" to="111" cost="65"></class><class from="111.01" to="163" cost="92"></class><class from="163.01" to="178" cost="119"></class><class from="178.01" to="9999" cost="149"></class></zone><zone id="6"><class from="0" to="50" cost="33.5"></class><class from="50.01" to="65" cost="46.1"></class><class from="65.01" to="89" cost="84"></class><class from="89.01" to="111" cost="92"></class><class from="111.01" to="163" cost="119"></class><class from="163.01" to="178" cost="129"></class><class from="178.01" to="9999" cost="170"></class></zone><zone id="7"><class from="0" to="50" cost="35"></class><class from="50.01" to="65" cost="50.4"></class><class from="65.01" to="89" cost="66.5"></class><class from="89.01" to="111" cost="80"></class><class from="111.01" to="163" cost="120"></class><class from="163.01" to="178" cost="145.96"></class><class from="178.01" to="9999" cost="188"></class></zone><zone id="8"><class from="0" to="50" cost="48"></class><class from="50.01" to="65" cost="66.37"></class><class from="65.01" to="89" cost="88"></class><class from="89.01" to="111" cost="105"></class><class from="111.01" to="163" cost="155"></class><class from="163.01" to="178" cost="192.24"></class><class from="178.01" to="9999" cost="247.5"></class></zone><zone id="9"><class from="0" to="50" cost="67"></class><class from="50.01" to="65" cost="94.64"></class><class from="65.01" to="89" cost="129"></class><class from="89.01" to="111" cost="163"></class><class from="111.01" to="163" cost="230"></class><class from="163.01" to="178" cost="274.12"></class><class from="178.01" to="9999" cost="354"></class></zone></records>';
var productString = '<?xml version="1.0" encoding="UTF-8"?><products><product code="TW-60" dw="17" /><product code="TW-80" dw="30" /><product code="LL50" dw="16" /><product code="AP3" dw="14" /><product code="AP4" dw="18" /><product code="AP5" dw="23" /><product code="AP6" dw="27" /><product code="SWD-70" dw="27" /><product code="SWD-92" dw="33" /><product code="SWD-115" dw="39" /><product code="TC80" dw="7" /><product code="TT-110" dw="47" /><product code="TT-60" dw="25" /><product code="TT-80" dw="35" /><product code="DP264" dw="22" /><product code="DP265" dw="27" /><product code="DLX13" dw="39" /><product code="TR120" dw="33" /><product code="TR90" dw="18" /><product code="DU244" dw="18" /><product code="TC-60" dw="5" /><product code="UFX25-S" dw="97" /><product code="UFX22-second" dw="97" /><product code="UFX21" dw="84" /><product code="UFX17" dw="71" /><product code="UFX29" dw="110" /><product code="UFX25-L" dw="97" /><product code="SP6D" dw="0" /><product code="SP6" dw="0" /><product code="SP6-second" dw="0" /><product code="LL80-1" dw="0" /><product code="PFSL3B" dw="0" /><product code="PFSL3M" dw="0" /><product code="PFSL3T" dw="0" /><product code="PA208K" dw="0" /><product code="PROC6" dw="85" /><product code="PROC7" dw="92" /><product code="PROC7-second" dw="92" /><product code="PROS10D" dw="120" /><product code="PROS12D" dw="160" /><product code="PROS14D" dw="208" /><product code="PROS3D" dw="21" /><product code="PROS4D" dw="31" /><product code="PROS5D" dw="42" /><product code="PROS6D" dw="56" /><product code="PROS7D" dw="70" /><product code="PROS8D" dw="85" /><product code="PRODP6" dw="55" /><product code="PRODP7" dw="69" /><product code="PRODP8" dw="101" /><product code="PROX14" dw="57" /><product code="PROX14-sec" dw="57" /><product code="PROX18" dw="70" /><product code="PROX18-sec" dw="70" /><product code="PROX22" dw="84" /><product code="PROX22-sec" dw="84" /><product code="PROX26" dw="97" /><product code="PROX26-second" dw="97" /><product code="PROFX25-second" dw="97" /><product code="PROX30" dw="110" /><product code="PROX33" dw="124" /><product code="PROX36" dw="137" /><product code="PROX36-sec" dw="137" /><product code="PROP10-7" dw="145" /><product code="PROP11-8" dw="224" /><product code="PROP12-9" dw="253" /><product code="PROP13-10" dw="286" /><product code="PROP5-2" dw="88" /><product code="PROP5-2-second" dw="88" /><product code="PROP5-3-second" dw="88" /><product code="PROP6-3" dw="88" /><product code="PROP6-4-second" dw="91" /><product code="PROP7-4" dw="111" /><product code="PROP7-4-second" dw="111" /><product code="PROP8-5" dw="134" /><product code="PROP9-6" dw="163" /><product code="PROSG10" dw="37" /><product code="PROSG12" dw="44" /><product code="PROSG14" dw="59" /><product code="PROSG16" dw="59" /><product code="PROSG8" dw="27" /><product code="PROS10" dw="113" /><product code="PROS10-second" dw="113" /><product code="PROS12" dw="150" /><product code="PROS4" dw="30" /><product code="PROS5" dw="40" /><product code="PROS6" dw="52" /><product code="PROS7" dw="65" /><product code="PROS8" dw="80" /><product code="PROMT17" dw="0" /><product code="PROSF10D" dw="180" /><product code="PROSF12D" dw="231" /><product code="PROSF3D" dw="25" /><product code="PROSF6D" dw="64" /><product code="PROSF7D" dw="79" /><product code="PROSF8D" dw="97" /><product code="PROPF10-7" dw="134" /><product code="PROPF13-10" dw="296" /><product code="PROPF13-10-second" dw="296" /><product code="PROPF11-8" dw="226" /><product code="PROPF15-12" dw="376" /><product code="PROPF6-3" dw="91" /><product code="PROPF7-4" dw="114" /><product code="PROPF8-5" dw="139" /><product code="PROPF9-6" dw="165" /><product code="PROPF9-6-second" dw="165" /><product code="PROSF6" dw="61" /><product code="PROSF8" dw="93" /><product code="PROSF7" dw="76" /><product code="PFSE6" dw="64" /><product code="PFSE7" dw="77" /><product code="PFSE7-second" dw="77" /><product code="PFSE8" dw="92" /><product code="TS52" dw="5" /><product code="TS80" dw="7" /><product code="TS-52-second" dw="5" /><product code="TS-80-second" dw="7" /><product code="TRDSM5" dw="49" /><product code="TRDSM6" dw="63" /><product code="TRDSM7" dw="78" /><product code="TRDS2D" dw="14" /><product code="TRDS3D" dw="23" /><product code="TRDS4D" dw="33" /><product code="TRDS5D" dw="47" /><product code="TRDS6D" dw="57" /><product code="TRDS7D" dw="71" /><product code="TRDS8D" dw="93" /><product code="TRDDP6" dw="55" /><product code="TRDDP6-second" dw="55" /><product code="TRDDP7" dw="69" /><product code="TRDDP7-sec" dw="69" /><product code="TRDX16" dw="59" /><product code="TRDX18" dw="65" /><product code="TRDX18-second" dw="65" /><product code="TRDX22" dw="78" /><product code="TRDMP13" dw="60" /><product code="TRDMP13-sec" dw="60" /><product code="TRDS4" dw="28" /><product code="TRDS5" dw="38" /><product code="TRDS6" dw="49" /><product code="TRDS7" dw="61" /><product code="TRDS8" dw="74" /><product code="TRDSF3D" dw="25" /><product code="TRDSF4D" dw="35" /><product code="TRDSF4D-second" dw="35" /><product code="TRDSF6D-second" dw="62" /><product code="TRDSF5D" dw="48" /><product code="TRDSF6D" dw="62" /><product code="TRDSF7D" dw="77" /><product code="TRDSF8D" dw="95" /><product code="TRDSF8D-sec" dw="48" /><product code="TRDDPF6" dw="55" /><product code="TRDDPF7" dw="69" /><product code="TRDDPF8" dw="84" /><product code="TRDXF14" dw="62" /><product code="TRDXF18" dw="76" /><product code="TRDXF18-second" dw="76" /><product code="TRDXF22" dw="90" /><product code="TRDX22-second" dw="90" /><product code="TRDXF26" dw="110" /><product code="TRDFX26-second" dw="110" /><product code="TRDSF5" dw="43" /><product code="TRDSF6" dw="56" /><product code="TRDSF7" dw="70" /><product code="TRDSF8" dw="85" /><product code="UFX13" dw="58" /></products>';

// JavaScript Document
z1_start = ["200","2000","2084","2109","2264","2415","2425","2558","2600","2640","2745","2776","2791","2794","2797","2830","2845","2847","2865","2900","3000","3140","3352","3690","3750","3754","3759","3802","3910","3926","3951","3975"];
z1_end = ["221","2082","2107","2234","2327","2422","2425","2570","2620","2641","2774","2786","2793","2794","2820","2830","2845","2847","2877","2914","3138","3207","3361","3690","3752","3755","3767","3810","3920","3937","3951","3978"];

z2_start = ["2083","2108","2250","2338","2340","2423","2424","2426","2427","2429","2431","2439","2440","2441","2443","2444","2445","2447","2462","2465","2470","2471","2473","2477","2478","2479","2480","2481","2485","2500","2527","2533","2541","2571","2578","2580","2643","2646","2659","2775","2795","3139","3351","3363","3373","3385","3391","3395","3399","3409","3415","3420","3458","3677","3682","3691","3747","3770","3835","3854","3864","3873","3882","3893","3900","3923","3938","3946","3958","3967","3979","3987","3989","4000","4029","4205","4208","4287","4311","4347","4358","4360","4400","4408","4500","4508","5000","5121","5132","5138","5142","5150","5158","5950"];

z2_end = ["2083","2108","2263","2338","2340","2423","2424","2426","2428","2430","2431","2439","2440","2441","2443","2444","2446","2456","2462","2469","2470","2472","2474","2477","2478","2479","2480","2484","2490","2526","2530","2535","2541","2577","2579","2582","2644","2646","2660","2775","2795","3139","3351","3363","3381","3387","3392","3395","3400","3413","3415","3422","3461","3677","3688","3695","3749","3799","3835","3857","3864","3874","3882","3895","3900","3923","3944","3946","3958","3967","3980","3987","3990","4022","4179","4207","4230","4307","4311","4355","4358","4360","4404","4412","4504","4509","5115","5127","3134","5139","5142","5151","5168","5950"];

z3_start = ["2330","2339","2536","2538","2540","2583","2621","2647","2650","2655","2658","2712","2715","2716","3211","3321","3364","3450","3462","3487","3515","3529","3537","3539","3540","3550","3551","3555","3557","3562","3564","3565","3568","3578","3629","3634","3636","3641","3649","3671","3675","3678","3697","3704","3725","3738","3741","3812","3822","3840","3887","3889","3891","3902","3945","3950","3953","3981","3988","3991","3995","4025","4309","4340","4472","4505","4510","4516","4550","4570","4620","4625","4650","4655","4660","4670","4671","4677","4699","4719"];
z3_end = ["2336","2339","2536","2539","2540","2583","2623","2647","2651","2655","2658","2712","2715","2716","3221","3321","3364","3453","3464","3489","3527","3533","3537","3539","3546","3550","3551","3556","3561","3563","3564","3567","3576","3599","3631","3634","3636","3644","3649","3672","3675","3678","3700","3705","3736","3739","3746","3820","3825","3844","3887","3889","3891","3903","3945","3950","3953","3984","3988","3991","3996","4025","4310","4342","4472","4507","4511","4519","4569","4575","4620","4630","4650","4659","4662","4670","4676","4697","4701","4719"];

z4_start = ["2341","2350","2352","2358","2360","2365","2370","2379","2380","2381","2398","2399","2460","2463","2537","2545","2590","2624","2645","2648","2649","2653","2656","2663","2666","2680","2700","2710","2713","2717","2720","2722","2729","2738","2787","3222","3273","3275","3276","3277","3285","3322","3330","3331","3334","3337","3340","3350","3427","3428","3429","3490","3549","3607","3633","3635","3637","3646","3660","3663","3673","3701","3707","3722","3737","3753","3756","3821","3831","3883","3874","3851","3852","3858","3862","3865","3869","3870","3875","3878","3885","3886","3888","3890","3892","3896","3898","3904","3921","3925","3954","3959","3960","3962","3971","3992","4270","4312","4343","4346","4356","4359","4361","4371","4387","4405","4406","4413","4512","4520","4601","4621","4740","4810","4816","4817","4820","4868","4870","4876","4891","5116","5131","5136","5140","5144","5152","5169","5231","5233","5237","5350","5501","5510","7000","7015","7018","7030","7212","7248","7258","7304","7307","7316","7322"];
z4_end = ["2347","2350","2356","2358","2360","2365","2370","2379","2380","2397","2398","2411","2460","2464","2537","2551","2590","2633","2645","2648","2649","2653","2656","2663","2666","2680","2705","2710","2714","2717","2720","2722","2731","2739","2790","3272","3274","3275","3276","3284","3315","3329","3330","3333","3335","3338","3345","3350","3427","3428","3448","3512","3549","3624","3633","3635","3640","3646","3660","3670","3673","3701","3711","3722","3737","3753","3758","3821","3831","3883","3850","3851","3852","3860","3862","3865","3869","3871","3875","3880","3885","3886","3888","3890","3892","3896","3839","3909","3922","3925","3957","3959","3960","3962","3971","3992","4275","4313","4344","4346","4657","4359","4362","4383","4390","4405","4407","4416","4515","4521","4615","4621","4740","4815","4816","4819","4820","4868","4870","4876","4891","5120","5131","5137","5141","5144","5157","5214","5232","5236","5256","5373","5502","5523","7011","7016","7019","7053","7212","7250","7258","7306","7315","7320","7322"];

z5_start = ["2328","2337","2357","2359","2361","2328","2337","2357","2359","2361","2369","2371","2475","2848","3318","3370","3384","3388","3393","3396","3401","3414","3418","3423","3465","3467","3483","4384","4417","4474","4487","4490","4494","4580","4737","4849","4852","4859","4869","4872","4878","5259","5262","5264","5271","5277","5301","5320","5400","5415","5419","554","7012","7017","7020","7054","7139","870"];
z5_end =   ["2329","2337","2357","2359","2361","2329","2337","2357","2359","2361","2369","2372","2476","2864","3318","3371","3384","3390","3393","3396","3407","3414","3419","3424","3465","3482","3483","4385","4471","4480","4487","4490","4498","4580","4739","4850","4857","4865","4869","4873","4886","5261","5263","5270","5276","5291","5312","5346","5410","5415","5419","5540","7012","7017","7027","7119","7190","870"];

z6_start = ["2584","2586","2588","2594","2642","2584","2586","2588","2594","2642","2652","2665","2668","2681","2706","2711","2721","2725","2726","2732","2821","2831","2835","2840","2846","2878","2879","3658","3662","3712","3723","3740","4370","4702","4705","4710","4720","4741","4744","4798","4802","4804","5440","5495","5600","5608","5700","6000","6162","7120","7209","7213","7252","7259","7321","7325"];
z6_end = ["2585","2587","2588","2594","2642","2585","2587","2588","2594","2642","2652","2665","2675","2681","2707","2711","2721","2725","2727","2737","2829","2834","2839","2844","2846","2878","2880","3659","3662","3720","3723","3740","4370","4704","4707","4718","4720","4742","4757","4800","4802","4809","5440","5495","5601","5609","5710","6160","6170","7120","7211","7216","7254","7303","7321","7470"];

z7_start = ["4824","6171","6210","6226","6280","4824","6171","6210","6226","6280","6302","6311","6318","6357","6401","6413","6430","6434","6460","6525","6969","7256","800","828","850","853","860","909"];
z7_end = ["4825","6205","6210","6237","6281","4825","6205","6210","6237","6281","6309","6316","6343","6398","6412","6424","6431","6434","6465","6635","6969","7256","820","836","850","853","861","909"];


z8_start = ["4280","4709","4721","4821","4828","4858","4871","4874","5220","5374","5411","5416","5420","5422","5430","5431","5433","5451","5455","5460","5461","5462","5550","5602","5630","5631","5632","5640","5641","5680","5690","5725","6206","6213","6224","6239","6317","6346","6425","6435","6450","6638","6701","6713","6714","6720","6721","6725","6728","6743","6751","6753","6754","6758","6760","6765","872"];
z8_end = ["4285","4709","4736","4823","4828","4858","4871","4874","5223","5381","5414","5418","5421","5422","5430","5432","5434","5454","5455","5460","5461","5493","5583","5607","5630","5631","5633","5640","5670","5680","5690","5725","6208","6223","6225","6239","6317","6356","6425","6448","6450","6646","6710","6713","6718","6720","6724","6725","6728","6743","6752","6753","6754","6758","6761","6770","886"];

z9_start = ["6240","6282"];
z9_end = ["6275","6290"];

//
var xmlpath = "costdata.xml";
var xmlDoc;
var weightDoc;
var debug = true;

/*
Find zone returns the zone name
*/
function findZone(postal)
{
	var found = false;
	var z1 = z1_start.length;
	var z2 = z2_start.length;
	var z3 = z3_start.length;
	var z4 = z4_start.length;
	var z5 = z5_start.length;
	var z6 = z6_start.length;
	var z7 = z7_start.length;
	var z8 = z8_start.length;
	var z9 = z9_start.length;
	var Zone = null;
	
	/*
	//check to see if postcode is in zone1
	*/
	for(var i=0; i <= z1; i++){
		if((postal >= z1_start[i]) && (postal <= z1_end[i])){
			Zone = "1";
			found = true;
		}
	}
	//zone 2
	if(found==false)
	{
		for(var j=0; j <= z2; j++){
			if((postal >= z2_start[j]) && (postal <= z2_end[j])){
				Zone = "2";
				found = true;	
			}
		}
	}
	//zone 3
	if(found==false)
	{
		for(var k=0; k <= z3; k++){
			if((postal >= z3_start[k]) && (postal <= z3_end[k])){
				Zone = "3";
				found = true;
			}
		}
	}
	//zone 4
	if(found==false)
	{
		for(var i1=0; i1 <= z4; i1++){
			if((postal >= z4_start[i1]) && (postal <= z4_end[i1])){
				Zone = "4";
				found = true;
			}
		}
	}
	
	//zone 5
	if(found==false)
	{
		for(var j1=0; j1 <= z5; j1++){
			if((postal >= z5_start[j1]) && (postal <= z5_end[j1])){
				Zone = "5";
				found = true;
			}
		}
	}
	//zone 6
	if(found==false)
	{
		for(var k1=0; k1 <= z6; k1++){
			if((postal >= z6_start[k1]) && (postal <= z6_end[k1])){
				Zone = "6";
				found = true;
			}
		}
	}
	//zone 7
	if(found==false)
	{
		for(var i2=0; i2 <= z7; i2++){
			if((postal >= z7_start[i2]) && (postal <= z7_end[i2])){
				Zone = "7";
				found = true;
			}
		}
	}
	//zone 8
	if(found==false)
	{
		for(var j2=0; j2 <= z8; j2++){
			if((postal >= z8_start[j2]) && (postal <= z8_end[j2])){
				Zone = "8";
				found = true;
			}
		}
	}
	//zone 9
	if(found==false)
	{
		for(var k2=0; k2 <= z9; k2++){
			if((postal >= z9_start[k2]) && (postal <= z9_end[k2])){
				Zone = "9";
				found = true;
			}
		}
	}
	if(found==true)
	{
		return Zone;
	}else{
		return false;
	}
}

function findDeadweight(scode)
{
	var productsitems = weightDoc.getElementsByTagName("product");

	for (var k=0; k<productsitems.length; k++)
	{
		if(productsitems[k].getAttribute("code")==scode)
		{
			if(debug==true)
			{
				//console.log("Found Product Code in XML");
			}
			var returnDw = productsitems[k].getAttribute("dw")
			return returnDw;
		}
	}
}


function getWeightZone(sweight,pcode)
{
	
	//weight is now the product code
	var weight = findDeadweight(sweight);
	
	if(debug==true)
	{
		alert("Received weight is :"+weight);
		alert("Received pcode is :"+pcode);
	}
	//If I have my Zone then I only need to check against some weight classes
	if (!xmlDoc) {
		// most current browsers support document.implementation
		//loadXML();
		alert("Page is still loading, Please try again");
	}
	//Test the postcode is valid
	if (pcode==null||pcode==""||pcode.length < 3||pcode.length >4) {
		alert("Please enter a valid Australian Postcode that contains 4 numbers, or 3 numbers if your postcode starts with a 0");
	}else{

		var Zone = findZone(pcode);
		
		if(debug==true)
		{
			//console.log("Found Zone :"+Zone);
		}
		
		if(Zone == false)
		{
			alert(pcode+" was not found in our delivery zone");	
		}else{
		
		var allitems = xmlDoc.getElementsByTagName("zone");
		
		if(debug==true)
		{
			//console.log("XML Packet :"+allitems);
		}
		
		for (var i=0; i<allitems.length; i++)
		  {
			if(allitems[i].getAttribute("id")==Zone)
			{
				if(debug==true)
				{
					//console.log("Found Zone in XML");
				}
				
				var classes = allitems[i].getElementsByTagName("class");
				for(var j=0; j<classes.length; j++)
				{
						
						if(debug==true)
						{
							//console.log("Inside Classes for each loop");
						}
					if(isNaN(weight)){
						//console.log("Weight is not a number");
					}
					
					if(isNaN(classes[j].getAttribute("to"))){
						//console.log("TO is not a number");
					}
					var to = roundNumber(classes[j].getAttribute("to"),2);
					
					if(isNaN(classes[j].getAttribute("from"))){
						//console.log("FROM is not a number");
					}
					var from = roundNumber(classes[j].getAttribute("from"),2);
					
					weight = roundNumber(weight,2);
					
					if(weight<=to)
					{
						if(weight>=from)
						{
							
							//console.log("The attr for TO weight is:"+to);
							//console.log("The attr for FROM weight is:"+from);
							//console.log("The weight is: "+weight);
							
							var dollarvalue = (classes[j].getAttribute("cost")*1.1);
							dollarvalue = roundNumber(dollarvalue, 2);
							var completeResponse = ("Shipping fee to <b>"+pcode+"</b> is <b>$"+dollarvalue);
							return(completeResponse);
						}
					}
				}
			}
		  }
		}
	}
}

function roundNumber(num, dec)
{
	var result = Math.round(num*Math.pow(10,dec))/Math.pow(10,dec);
	return result;
}

function loadXML() { // load indexfile
// most current browsers support document.implementation
	if (document.implementation.createDocument) {
        var parser = new DOMParser()
        xmlDoc = parser.parseFromString(xmlString, "text/xml")
    // MSIE
    } else if (window.ActiveXObject) {
        xmlDoc = new ActiveXObject("Microsoft.XMLDOM")
        xmlDoc.async="false"
        xmlDoc.loadXML(xmlString)
    }
	
	if (document.implementation.createDocument) {
        var parser = new DOMParser()
        weightDoc = parser.parseFromString(productString, "text/xml")
    // MSIE
    } else if (window.ActiveXObject) {
        weightDoc = new ActiveXObject("Microsoft.XMLDOM")
        weightDoc.async="false"
        weightDoc.loadXML(productString)
    }
}

