//set the debug flag
var debugFlag = 0;

var showSat = false;

function startPage(){
	hideAllBoxes();
	getObjStyle('termsBox').display = "block";
	getObj('errorBox').className = "commentBox";
	getObj('errorBox').innerHTML = "Please read the terms and conditions and click 'continue' if you agree.";
}

//validation -- return true or false

// dropzip if the last field to call validation. Therefore we can group all checks under this function.
function pickZipFN(){
	
	hideAllBoxes();
	getObjStyle('postcodeBox').display = "block";

	getObj('pickZip').value = getObj('pickZipA').value + " " + getObj('pickZipB').value;
	
	errorFlag = false;
	//check collection postcode
	var toCheck = getObj('pickZip').value;
	errorsRet = checkPostCode(toCheck);
	if (errorsRet == true){
		errorFlag = true;
		getObj('errorBox').className = "errorBox";
		getObj('errorBox').innerHTML = "Sorry but the collection postcode format is incorrect.";
	}
	
	return errorFlag;
}
function dropZipFN(){
	
	hideAllBoxes();
	getObjStyle('postcodeBox').display = "block";

	getObj('dropZip').value = getObj('dropZipA').value + " " + getObj('dropZipB').value;
	
	errorFlag = false;
	//check delivery postcode
	var toCheck = getObj('dropZip').value;
	errorsRet = checkPostCode(toCheck);
	if (errorsRet == true){
		errorFlag = true;
		getObj('errorBox').className = "errorBox";
		getObj('errorBox').innerHTML = "Sorry but the delivery postcode format is incorrect.";
	}
	
	return errorFlag;
}
function collectDateFN(){
	hideAllBoxes();
	getObjStyle('postcodeBox').display = "block";
	getObjStyle('collectDateBox').display = "block";
}
function saturdayFN(){
	hideAllBoxes();
	getObjStyle('postcodeBox').display = "block";
	getObjStyle('collectDateBox').display = "block";
	if(showSat == true){
		getObjStyle('saturdayBox').display = "block";
	}
}
function deliverTimeFN(){
	hideAllBoxes();
	getObjStyle('postcodeBox').display = "block";
	getObjStyle('collectDateBox').display = "block";
	if(showSat == true){
		getObjStyle('saturdayBox').display = "block";
	}
	getObjStyle('deliverTimeBox').display = "block";
}
function serviceFN(){
	hideAllBoxes();
	getObjStyle('postcodeBox').display = "block";
	getObjStyle('collectDateBox').display = "block";
	if(showSat == true){
		getObjStyle('saturdayBox').display = "block";
	}
	getObjStyle('deliverTimeBox').display = "block";
	getObjStyle('serviceBox').display = "block";
}
function piecesFN(){
	hideAllBoxes();
	getObjStyle('postcodeBox').display = "block";
	getObjStyle('collectDateBox').display = "block";
	if(showSat == true){
		getObjStyle('saturdayBox').display = "block";
	}
	getObjStyle('deliverTimeBox').display = "block";
	getObjStyle('serviceBox').display = "block";
	getObjStyle('piecesBox').display = "block";
}

function weightDimsCheck(fobj, numOfPieces, maxweight, maxaveragelength, maxaveragewidth, maxaveragedepth){
	errorFlag = false;

	var i = 1;
	for(i=1;i<=numOfPieces;i++){
		
		var errorRet = intonly(getObj('depth'+i));
		var errorRet = intonly(getObj('width'+i));
		var errorRet = intonly(getObj('length'+i));
		
		var errorRet = checkBlank('weight'+i, 'weight');
		var errorRet = checkBlank('depth'+i, 'depth');
		var errorRet = checkBlank('width'+i, 'width');
		var errorRet = checkBlank('length'+i, 'length');

		var errorRet = checkMax('length'+i, maxaveragelength, 'length');
		var errorRet = checkMax('width'+i, maxaveragewidth, 'width');
		var errorRet = checkMax('depth'+i, maxaveragedepth, 'depth');
		var errorRet = checkMax('weight'+i, maxweight, 'weight');

		var errorRet = checkMin('length'+i, 0.1, 'length');
		var errorRet = checkMin('width'+i, 0.1, 'width');
		var errorRet = checkMin('depth'+i, 0.1, 'depth');
		var errorRet = checkMin('weight'+i, 0.01, 'weight');
		
		var errorRet = checkDecimals('weight'+i);
		
	}
	
	if (errorFlag == false) {
		submitform (getObj('weightDimsForm'), '../php/addWeight.php', weightState);
		return false;
	} else {
		getObjStyle('errorBox').display = "block";
	}
	return errorFlag;
}
function checkBlank(field, errorField){
	if(getObj(field).value == ""){
		errorFlag = true;
		getObj('errorBox').className = "errorBox";
		getObj('errorBox').innerHTML = "Please enter a valid "+errorField;
	}
	return errorFlag;
}
function checkMax(field, maxField, errorField){
	if(getObj(field).value > maxField){
		errorFlag = true;
		getObj('errorBox').className = "errorBox";
		getObj('errorBox').innerHTML = "Sorry but the maximum "+errorField+" is "+maxField;
	}
	return errorFlag;
}
function checkMin(field, minField, errorField){
	if(getObj(field).value < minField){
		errorFlag = true;
		getObj('errorBox').className = "errorBox";
		getObj('errorBox').innerHTML = "Sorry but the minimum "+errorField+" is "+minField;
	}
	return errorFlag;
}
function checkDecimals(field) {
	
	var fieldName = getObj(field);
	var fieldValue = getObj(field).value;

	decallowed = 2;  // how many decimals are allowed?
	
	if (isNaN(fieldValue) || fieldValue == "") {
		getObj('errorBox').className = "errorBox";
		getObj('errorBox').innerHTML = "Please enter a weight";
		fieldName.select();
		fieldName.focus();
		errorFlag = true;
	} else {
		if (fieldValue.indexOf('.') == -1) fieldValue += ".";
		dectext = fieldValue.substring(fieldValue.indexOf('.')+1, fieldValue.length);

		if (dectext.length > decallowed){
			getObj('errorBox').className = "errorBox";
			getObj('errorBox').innerHTML = "Sorry but only 2 decimal places allowed for weight";
			fieldName.select();
			fieldName.focus();
			errorFlag = true;
     	 }
   	}
	return errorFlag;
}
function intonly(field) {
	var valid = "0123456789"
	var temp;
	for (var i=0; i<field.value.length; i++) {
		temp = "" + field.value.substring(i, i+1);
		if (valid.indexOf(temp) == "-1"){
			errorFlag = true;
			getObj('errorBox').className = "errorBox";
			getObj('errorBox').innerHTML = "Sorry but only whole numbers alowed";
		}
	}
	return errorFlag;
}
//state changes
function termsState(){
	hideAllBoxes();
	getObjStyle('postcodeBox').display = "block";
	getObj('errorBox').className = "commentBox";
	getObj('errorBox').innerHTML = "Please start by entering the collection and delivery postcode for your parcel.";
}
function postcodeState(){
	getObj('btnPcode').src = "../images/template/btnUpdate.jpg";
	getObj('errorBox').className = "commentBox";
	getObj('errorBox').innerHTML = "Please select when you would like your parcels collected. We have removed any days when we are closed.";
	populateReturn('collectDate');
}
function collectDateState(){
	getObj('btnCollectDate').src = "../images/template/btnUpdate.jpg";
	getObj('errorBox').className = "commentBox";
	getObj('errorBox').innerHTML = "If you would like the parcels delivered on saturday (for an extra charge), please select 'yes'.";
	
	//populateReturn('saturday');
	
	if (xmlhttp.readyState==4 || xmlhttp.readyState=="complete"){
		var xmlDoc=xmlhttp.responseXML;
		
		var startPoint = xmlDoc.documentElement.getElementsByTagName('returnXML');
		
		var errorField = startPoint[0].lastChild.childNodes;
		var errorFlag = errorField[0].getAttribute("errorFlag");
		var errorMess = errorField[0].getAttribute("errorMess");
		
		if(errorFlag == 0){

			getObjStyle("saturdayBox").display = "block";
			
			var optionField = startPoint[0].firstChild.childNodes;
			getObj("saturday").options.length= 0;
			for(var i = 0; i < optionField.length; i++){
				getObj("saturday").options[i]=new Option(optionField[i].getAttribute("optionDisplay"), optionField[i].getAttribute("optionValue"), false, false);
			}
			
			if((getObj("saturday").options.length== 1) && (getObj("saturday").options[0].value == "No")){
				showSat = false;
				getObjStyle("saturdayBox").display = "none";
				submitform (getObj('saturdayForm'), '../php/addSaturday.php', saturdayState);
			} else {
				showSat = true;
			}

		} else {
			getObj('errorBox').className = "errorBox";
			getObj('errorBox').innerHTML = errorMess;
		}
		
		if(debugFlag == 1){
			debug(xmlDoc);
		}
		
	}

}
function saturdayState(){
	getObj('btnSaturday').src = "../images/template/btnUpdate.jpg";
	getObj('errorBox').className = "commentBox";
	getObj('errorBox').innerHTML = "Please select the time you would like your parcel delivered.";
	//populateReturn('deliverTime');
	
	var nextBox = 'deliverTime';
	
	if (xmlhttp.readyState==4 || xmlhttp.readyState=="complete"){
		var xmlDoc=xmlhttp.responseXML;
		
		var startPoint = xmlDoc.documentElement.getElementsByTagName('returnXML');
		
		var errorField = startPoint[0].lastChild.childNodes;
		var errorFlag = errorField[0].getAttribute("errorFlag");
		var errorMess = errorField[0].getAttribute("errorMess");
		
		if(errorFlag == 0){

			getObjStyle(nextBox + "Box").display = "block";
			
			var optionField = startPoint[0].firstChild.childNodes;
			getObj(nextBox).options.length= 0;
			for(var i = 0; i < optionField.length; i++){
				getObj(nextBox).options[i]=new Option(optionField[i].getAttribute("optionDisplay"), optionField[i].getAttribute("optionValue"), false, false);
			}
			
			var sameDayField = xmlDoc.documentElement.getElementsByTagName('sameDayDATA');
			var sameDayCheck = sameDayField[0].childNodes;
			
			if(sameDayCheck.length > 0){
				
				getObj('errorBox').innerHTML += "<p class=\"redTxt\">The following services are now not available for booking today:</p>";
				for(var i = 0; i < sameDayCheck.length; i++){
					getObj('errorBox').innerHTML += "<span class=\"redTxt\">The cut off time for "+ sameDayCheck[i].getAttribute("service") +" is "+ sameDayCheck[i].getAttribute("cutTime") +".</span><br/>";
				}

			}

		} else {
			getObj('errorBox').className = "errorBox";
			getObj('errorBox').innerHTML = errorMess;
		}
		
		if(debugFlag == 1){
			debug(xmlDoc);
		}
		
	}

}
function deliverTimeState(){
	getObj('btnDeliverTime').src = "../images/template/btnUpdate.jpg";
	getObj('errorBox').className = "commentBox";
	getObj('errorBox').innerHTML = "Please choose which service you require.";
	populateReturn('service');
}
function serviceState(){
	getObj('btnService').src = "../images/template/btnUpdate.jpg";
	getObj('errorBox').className = "commentBox";
	getObj('errorBox').innerHTML = "Please select how many parcels are to be delivered to this address.";
	populateReturn('pieces');
}
function piecesState(){
	getObj('btnParcels').src = "../images/template/btnUpdate.jpg";	
	if (xmlhttp.readyState==4 || xmlhttp.readyState=="complete"){
		var xmlDoc=xmlhttp.responseXML;
		
		var errorField = xmlDoc.documentElement.getElementsByTagName('errorField');
		var errorFlag = errorField[0].getAttribute("errorFlag");
		var errorMess = errorField[0].getAttribute("errorMess");
		
		if(errorFlag == 0){
			getObj('errorBox').className = "commentBox";
			getObj('errorBox').innerHTML = "Please enter the dimensions and weight of each parcel so we can estimate the charge correctly.";
			
			getObjStyle('weightDimsBox').display = "block";
			
			var parcel = xmlDoc.documentElement.getElementsByTagName('parcel');		
			var numOfPieces = parcel[0].getAttribute("pieces");
			var maxweight = parcel[0].getAttribute("maxweight");
			var maxaveragelength = parcel[0].getAttribute("maxaveragelength");
			var maxaveragewidth = parcel[0].getAttribute("maxaveragewidth");
			var maxaveragedepth = parcel[0].getAttribute("maxaveragedepth");
			var maxvolume = parcel[0].getAttribute("maxvolume");
			var volumetricdivisor = parcel[0].getAttribute("volumetricdivisor");
			
			var i=1;
			var output = "";

			output += "<form action=\"quoteResponse.php\" method=\"post\" name=\"weightDimsForm\" id=\"weightDimsForm\">";
			output += "<table width=\"450px\"  border=\"0\" cellspacing=\"2\" cellpadding=\"2\" align=\"center\">";
			
			output += "<tr>";
				output += "<td width=\"20%\">&nbsp;</td>";
				output += "<td width=\"20%\"  class=\"fieldBgC\">Length</td>";
				output += "<td width=\"20%\" class=\"fieldBgC\">Width</td>";
				output += "<td width=\"20%\" class=\"fieldBgC\">Depth</td>";
				output += "<td width=\"20%\" class=\"fieldBgC\">Weight</td>";
			output += "</tr>";
			
			for(i=1;i<=numOfPieces;i++){
				output += "<tr>";
				output += "<td width=\"20%\" class=\"fieldBgC\">Parcel " + i + "</td>";
				output += "<td width=\"20%\" class=\"fieldBgB\"><input name=\"length"+i+"\" id=\"length"+i+"\" class=\"inputField\" type=\"text\" size=\"3\" maxlength=\"3\"/>(cms)</td>";
				output += "<td width=\"20%\" class=\"fieldBgB\"><input name=\"width"+i+"\" id=\"width"+i+"\" class=\"inputField\" type=\"text\" size=\"3\" maxlength=\"3\"/>(cms)</td>";
				output += "<td width=\"20%\" class=\"fieldBgB\"><input name=\"depth"+i+"\" id=\"depth"+i+"\" class=\"inputField\" type=\"text\" size=\"3\" maxlength=\"3\"/>(cms)</td>";
				output += "<td width=\"20%\" class=\"fieldBgB\"><input name=\"weight"+i+"\" id=\"weight"+i+"\" class=\"inputField\" type=\"text\" size=\"5\" maxlength=\"8\"/>(kgs)</td>";
				output += "</tr>";
			}
			output += "<tr>";
				output += "<td colspan=\"5\" align=\"center\"><a href=\"#\" onClick=\"weightDimsCheck('weightDimsForm', '"+numOfPieces+"', "+maxweight+", "+maxaveragelength+", "+maxaveragewidth+", "+maxaveragedepth+");\"><img src=\"../images/template/btnContinue.jpg\" border=\"0\"></a></td>";
			output += "</tr>";
			output += "</table>";
			output += "</form>";

			getObj('weightDimsBox').innerHTML = output;

		} else {
			getObj('errorBox').className = "errorBox";
			getObj('errorBox').innerHTML = errorMess;
		}
		
	}
}
function weightState(){
	if (xmlhttp.readyState==4 || xmlhttp.readyState=="complete"){
		var xmlDoc=xmlhttp.responseXML;
		
		var errorField = xmlDoc.documentElement.getElementsByTagName('errorField');
		var errorFlag = errorField[0].getAttribute("errorFlag");
		var errorMess = errorField[0].getAttribute("errorMess");
		
		if(errorFlag == 0){

			getObjStyle('weightDimsBox').display = "none";
			getObjStyle('dimSumBox').display = "block";

			var consignment = xmlDoc.documentElement.getElementsByTagName('consignment');		
			var totalWeight = parseFloat(consignment[0].getAttribute("totalWeight"));
			var volumetric = parseFloat(consignment[0].getAttribute("volumetric"));
			
			output ="";

			output += "<table width=\"100%\"  border=\"0\" cellspacing=\"2\" cellpadding=\"2\">";
			output += "<tr>";
				output += "<td width=\"200\" class=\"fieldBgA\">Total Weight</td>";
				output += "<td>"+totalWeight+" kgs</td>";
				output += "<td width=\"100\" align=\"right\"><a href=\"#\" onClick=\"submitform (getObj('piecesForm'), '../php/addPieces.php', piecesState);\"><img src=\"../images/template/btnUpdate.jpg\" border=\"0\"></a></td>";
			output += "</tr>";
			if(volumetric > totalWeight){
				output += "<tr>";
					output += "<td class=\"fieldBgB\">Volumetric Weight</td>";
					output += "<td>"+volumetric+" kgs</td>";
					output += "<td align=\"right\"><a href=\"#\" onClick=\"submitform (getObj('piecesForm'), '../php/addPieces.php', piecesState);\"><img src=\"../images/template/btnUpdate.jpg\" border=\"0\"></a></td>";
				output += "</tr>";
				output += "<tr>";
					output += "<td class=\"fieldBgA\">Used Weight</td>";
					output += "<td class=\"redTxt\">The volumetric weight is greater than the actual weight of the shipment. You will therefore be charged according to the volumetric weight.</td>";
					output += "<td align=\"right\">&nbsp;</td>";
				output += "</tr>";
			}
			
			output += "</table>";
			
			getObj('dimSumBox').innerHTML = output;
			
			//bypass submitting a form and call the processajax function
			processajax ('../php/getQuote.php', quoteState, "post", "");

		} else {
			getObj('errorBox').className = "errorBox";
			getObj('errorBox').innerHTML = errorMess;
		}
		
	}
}
function quoteState(){
	if (xmlhttp.readyState==4 || xmlhttp.readyState=="complete"){
		var xmlDoc=xmlhttp.responseXML;
		
		var errorField = xmlDoc.documentElement.getElementsByTagName('errorField');
		var errorFlag = errorField[0].getAttribute("errorFlag");
		var errorMess = errorField[0].getAttribute("errorMess");
			
		if(errorFlag == 0){

			getObjStyle('errorBox').display = "none";
			getObjStyle('quoteBox').display = "block";
	
			var pricefield = xmlDoc.documentElement.getElementsByTagName('price');
			var servicePrice = pricefield[0].getAttribute("servicePrice");
			var totalPrice = pricefield[0].getAttribute("totalPrice");
			var vatPrice = pricefield[0].getAttribute("vatPrice");
			
			output = "<table width=\"200\" border=\"0\" cellspacing=\"0\" cellpadding=\"5\" align=\"right\">";
				output += "<tr>";
					output += "<td style=\"border-bottom:1px solid #999; color:#666 \" align=\"right\">Delivery Charges</td>";
					output += "<td style=\"border-bottom:1px solid #999; width:90px;\" align=\"right\">£"+servicePrice+" GBP</td>";
				output += "</tr>";
				output += "<tr>";
					output += "<td style=\"border-bottom:1px solid #999; color:#666 \" align=\"right\">+ VAT</td>";
					output += "<td style=\"border-bottom:1px solid #999; width:90px; \" align=\"right\">£"+vatPrice+" GBP</td>";
				output += "</tr>";
				output += "<tr>";
					output += "<td style=\"color:#666 \" align=\"right\">Total Charge</td>";
					output += "<td align=\"right\">£"+totalPrice+" GBP</td>";
				output += "</tr>";
				output += "<tr>";
					output += "<td>&nbsp;</td>";
					output += "<td>&nbsp;</td>";
				output += "</tr>";
				output += "<tr>";
					output += "<td colspan=\"2\"><a href=\"../book/address.php\"><img src=\"../images/template/btnBookNow.gif\" border=\"0\"></a></td>";
				output += "</tr>";
			output += "</table>";

			getObj('quoteBox').innerHTML = output;

		} else {
			getObj('errorBox').className = "errorBox";
			getObj('errorBox').innerHTML = errorMess;
		}
		
	}
}
function populateReturn(nextBox){
	
	if (xmlhttp.readyState==4 || xmlhttp.readyState=="complete"){
		var xmlDoc=xmlhttp.responseXML;
		
		var startPoint = xmlDoc.documentElement.getElementsByTagName('returnXML');
		
		var errorField = startPoint[0].lastChild.childNodes;
		var errorFlag = errorField[0].getAttribute("errorFlag");
		var errorMess = errorField[0].getAttribute("errorMess");
		
		if(errorFlag == 0){

			getObjStyle(nextBox + "Box").display = "block";
			
			var optionField = startPoint[0].firstChild.childNodes;
			getObj(nextBox).options.length= 0;
			for(var i = 0; i < optionField.length; i++){
				getObj(nextBox).options[i]=new Option(optionField[i].getAttribute("optionDisplay"), optionField[i].getAttribute("optionValue"), false, false);
			}

		} else {
			getObj('errorBox').className = "errorBox";
			getObj('errorBox').innerHTML = errorMess;
		}
		
		if(debugFlag == 1){
			debug(xmlDoc);
		}
		
	}
}

function hideAllBoxes(){
	
	//getObjStyle('errorBox').display = "none";
	
	getObjStyle('termsBox').display = "none";
	getObjStyle('postcodeBox').display = "none";
	getObjStyle('collectDateBox').display = "none";
	getObjStyle('saturdayBox').display = "none";
	getObjStyle('deliverTimeBox').display = "none";
	getObjStyle('serviceBox').display = "none";
	getObjStyle('piecesBox').display = "none";
	getObjStyle('weightDimsBox').display = "none";
	getObjStyle('dimSumBox').display = "none";
	getObjStyle('quoteBox').display = "none";

}

function debug(xmlDoc){
	var startPoint = xmlDoc.documentElement.getElementsByTagName('debugXML');
	
	var tariffList = startPoint[0].lastChild.childNodes;
	
	var output = "";
	
	output += "<table width=\"100%\"  border=\"0\" cellspacing=\"2\" cellpadding=\"2\">";
		output += "<tr>";
			output += "<td>code</td>";
			output += "<td>description</td>";
			output += "<td>time</td>";
			output += "<td>delivery days</td>";
			output += "<td>saturday</td>";
			output += "<td>max parcels</td>";
		output += "</tr>";
	for(var i=0; i<tariffList.length; i++){
		output += "<tr>";
			output += "<td>" + tariffList[i].getAttribute("code") + "</td>";
			output += "<td>" + tariffList[i].getAttribute("description") + "</td>";
			output += "<td>" + tariffList[i].getAttribute("time") + "</td>";
			output += "<td>" + tariffList[i].getAttribute("deliverdays") + "</td>";
			output += "<td>" + tariffList[i].getAttribute("saturday") + "</td>";
			output += "<td>" + tariffList[i].getAttribute("maxParcels") + "</td>";
		output += "</tr>";
	}
	output += "</table>";
	
	getObj('debug').innerHTML = output;	
}
