String.prototype.trim = function() {
	return this.replace(/^\s+|\s+$/g,"");
}

String.prototype.ltrim = function() {
	return this.replace(/^\s+/,"");
}

String.prototype.rtrim = function() {
	return this.replace(/\s+$/,"");
}

function selectAllPIN() {
	var tblDetails = document.getElementById("tblDetails");
	var newValue = document.getElementById("chkAllPIN").checked;
	var rows = tblDetails.rows.length;
	var chkPIN;

	for (var i = 2; i < rows; i++) {
		if (tblDetails.rows[i].childNodes[1].childNodes[0].nodeName != "INPUT") {
			chkPIN = tblDetails.rows[i].childNodes[17].childNodes[0];
			if (chkPIN.nodeName == 'INPUT') {
				if (!chkPIN.disabled) {
					chkPIN.checked = newValue;
				}
			}
		}
	}
}

function selectAllVehicle() {
	var tblDetails = document.getElementById("tblDetails");
	var newValue = document.getElementById("chkAllVehicle").checked;
	var rows = tblDetails.rows.length;
	var chkVehicle;

	for (var i = 2; i < rows; i++) {
		if (tblDetails.rows[i].childNodes[1].childNodes[0].nodeName != "INPUT") {
			chkVehicle = tblDetails.rows[i].childNodes[3].childNodes[0];
			if (chkVehicle.nodeName == 'INPUT') {
				if (!chkVehicle.disabled) {
					chkVehicle.checked = newValue;
				}
			}
		}
	}
}

function selectBoL(x) {
	var tblDetails = document.getElementById("tblDetails");
	var newValue = x.checked;
	var rows = tblDetails.rows.length;
	var rowIndex = 1 + (x.parentNode.parentNode.rowIndex - 0); // Cast to int
	var chkVehicle;
	var chkPIN;
	
	for (var i = rowIndex; i < rows; i++) {
		chkVehicle = tblDetails.rows[i].childNodes[3].childNodes[0];
		chkPIN = tblDetails.rows[i].childNodes[17].childNodes[0];
		if (chkVehicle.nodeName == 'INPUT') {
			if (!chkVehicle.disabled) {
				chkVehicle.checked = newValue;
			}
			if (!chkPIN.disabled) {
				chkPIN.checked = newValue;
			}
		} else {
			break;
		}
	}
}

function expandAll(x) {
	var tblDetails = document.getElementById("tblDetails");
	var rows = tblDetails.rows.length;
	var y;

	x.expanded = ! x.expanded;
	x.src = "../Image/" + (x.expanded ? "minus2" : "plus") + ".gif";

	var newClass = (x.expanded ? "SubVisible" : "SubHidden");

	for (var i = 2; i < rows; i++) {
		tr = tblDetails.rows[i];
		y = tr.childNodes[0].childNodes[0];
		if (y.nodeName == "IMG") {

			y.expanded = x.expanded;
			y.src = x.src;

			for (var j = i + 1; j < rows; j++) {
				tr = tblDetails.rows[j];
				if (tr.childNodes[3].childNodes[0].nodeName == "INPUT") {
					tr.className = newClass;
				} else {
					break;
				}
			}
			i = j - 1;
		}
	}
}

function expandBoL(x) {
	var tblDetails = document.getElementById("tblDetails");
	var rows = tblDetails.rows.length;
	var rowIndex = 1 + (x.parentNode.parentNode.rowIndex - 0); // Cast to int

	x.expanded = ! x.expanded;
	x.src = "../Image/" + (x.expanded ? "minus2" : "plus") + ".gif";

	var newClass = (x.expanded ? "SubVisible" : "SubHidden");

	for (var i = rowIndex; i < rows; i++) {
		tr = tblDetails.rows[i];
		if (tr.childNodes[3].childNodes[0].nodeName == "INPUT") {
			tr.className = newClass;
		} else {
			break;
		}
	}
}

function setVehicleIDs(chkBoxIndex, vehicleIDs) {
	var tblDetails = document.getElementById("tblDetails");
	var rows = tblDetails.rows.length;
	var tr;
	var chkBox;

	for (var i = 2; i < rows; i++) {
		tr = tblDetails.rows[i];

		if (chkBoxIndex >= tr.childNodes.length) {
			chkBox = undefined;
		} else {
			chkBox = tr.childNodes[chkBoxIndex].childNodes[0];
		}
		if (chkBox != undefined && chkBox.nodeName == 'INPUT') {
			if (vehicleIDs.indexOf(chkBox.attributes["vehicleid"].value + ",") > -1) {
				chkBox.checked = true;

				if (tr.attributes["parentrowindex"].value != 0) {
					if (!tblDetails.rows[tr.attributes["parentrowindex"].value].childNodes[0].childNodes[0].expanded) {
						expandBoL(tblDetails.rows[tr.attributes["parentrowindex"].value].childNodes[0].childNodes[0]);
					}
				}
			}
		}
	}
}

function getVehicleIDs(chkBoxIndex, completeBoL, oneBoLOnly, checkStops) {
	var tblDetails = document.getElementById("tblDetails");
	var rows = tblDetails.rows.length;
	var tr;
	var chkBox;
	var vehicleIDs = "";
	var selectingBoL = "";
	var bolVehicleTotal = 0;
	var bolVehicleCount = 0;
	var message = "";
	var stopCol = 10;
	var stopCount = 0;

	for (var i = 2; i < rows; i++) {
		tr = tblDetails.rows[i];
		
		if (tr.childNodes[2].innerText.trim().length > 0 && tr.childNodes[2].innerText.substring(0, 1).toLowerCase() != " ") {
			var bol = tr.childNodes[2].innerText;
			if (completeBoL && bolVehicleCount > 0 && bolVehicleCount != bolVehicleTotal) {
				return new Array("", "All vehicles in a Bill of Lading must be selected");
			} else {
				bolVehicleTotal = 0;
				bolVehicleCount = 0;
			}
		}
		
		if (chkBoxIndex >= tr.childNodes.length) {
			chkBox = undefined;
		} else {
			chkBox = tr.childNodes[chkBoxIndex].childNodes[0];
		}
		if (chkBox != undefined && chkBox.tagName == "INPUT") {
			if (chkBox.checked) {
				if (oneBoLOnly && selectingBoL != "" && selectingBoL != bol) {
					return new Array("", "Selected vehicles can only belong to one Bill of Lading");
				} else {
					if (checkStops && (tr.childNodes[stopCol].innerText != " " || tr.childNodes[stopCol + 1].innerText != " " || tr.childNodes[stopCol + 2].innerText != " " || tr.childNodes[stopCol + 3].innerText != " ")) {
						stopCount++;
					}
				
					vehicleIDs += chkBox.attributes["vehicleid"].value + ",";
					selectingBoL = bol;
					bolVehicleCount++;
				}
			}
			bolVehicleTotal++;
		}
	}

	if (checkStops && stopCount > 0) {
		message = "There are " + stopCount + " uncleared vehicle(s) in this selection.";
	}

	if (completeBoL && bolVehicleCount > 0 && bolVehicleCount != bolVehicleTotal) {
		return new Array("", "All vehicles in a Bill of Lading must be selected");
	}

	return new Array(vehicleIDs, message);
}

function createHouseBill() {
	var results = getVehicleIDs(3, false, true, false);
	var vehicleIDs = results[0];
	var message = results[1];

	if (vehicleIDs.length > 0) {
		var ref = prompt("Please enter your house bill number.", "");
		if (ref && ref.length > 0) {

			if(checkBills(ref)){
				document.getElementById("hidVehicles").value = vehicleIDs;
				document.getElementById("hidAction").value = "HouseBill";
				document.getElementById("hidRef").value = ref;
				document.forms["frmHeader"].submit();
			}
			else{
				alert("House Bill cannot have the same reference as the Bill of Lading.");
			}
		}
	} else {
		if (message.length == 0) {
			message = "Please select at least one Bill of Lading or Vehicle.";
		}
		alert(message);
	}
}

function checkBills(typedIn) {
	var tblDetails = document.getElementById("tblDetails");
	var rows = tblDetails.rows.length;
	var tr;
	typedIn = typedIn.trim();
	
	for (var i = 2; i < rows; i++) {
		tr = tblDetails.rows[i];

		if (tr.childNodes[2].innerText.trim().length > 0 && tr.childNodes[2].innerText.substring(0, 1).toLowerCase() != " ") {
			var bol = tr.childNodes[2].innerText.trim();
			if (typedIn == bol){
				return false;
			}
		}
	}
	return true;
}

function createSubSDR() {
	var results = getVehicleIDs(3, false, false, false);
	var vehicleIDs = results[0];
	var message = results[1];

	if (vehicleIDs.length > 0) {
		document.getElementById("hidVehicles").value = vehicleIDs;
		document.getElementById("hidAction").value = "SubSDR";

		document.forms["frmHeader"].submit();
	} else {
		if (message.length == 0) {
			message = "Please select at least one Bill of Lading or Vehicle.";
		}
		alert(message);
	}
}

function createPIN(enableTransporter) {
	var results = getVehicleIDs(3, false, false, true);
	var vehicleIDs = results[0];
	var message = results[1];
	var transporter = 0;

	var tblBtns = document.getElementById("tblBtns");
	var trn = tblBtns.rows[1];
	if (trn.childNodes[1].childNodes[0].value != "") {
		transporter = trn.childNodes[1].childNodes[0].value;
	}

	if (vehicleIDs.length > 0) {
		
		if (enableTransporter == 1 && transporter == 0) {
			alert("Please select a transporter.");
			return;
		} 
		if (message.length == 0 || confirm(message + "\r\n\r\nContinue with creating PIN?")) {
			
			var pickedSelfDrive = document.getElementById("hidSelfDriveID").value.trim();
			var answer = "";
			
			if(transporter == pickedSelfDrive){
				var go = 1;
				
				while ( go == 1 ){
					answer = prompt("Please enter the Name and/or Company of person collecting the vehicle", "Type remarks here");
					if (answer == null) {
						go = 0;
					}
					else if(answer == "Type remarks here" || answer.trim() == '' ){
						alert("Please enter some person or vehicle remarks");
					}
					else
						go = 2;//Continue Pin creation
				}
				if (go == 0)
				return;
				
				if (go == 2 ){
					alert("You must send the PIN to person collecting the Vehicle.\r\n The Self Drive vehicle can only be collected with a valid PIN.");
				}
			}
			
			document.getElementById("hidVehicles").value = vehicleIDs;
			document.getElementById("hidAction").value = "PIN";			
			document.getElementById("btnCreatePIN").disabled = true;
			document.getElementById("btnCreateHouse").disabled = true;
			if(document.getElementById("btnCreateSubSDR") != null){
				document.getElementById("btnCreateSubSDR").disabled = true;
			}
			document.getElementById("btnPrintPIN").disabled = true;
			document.getElementById("hidTransID").value = transporter;
			document.getElementById("hidSelfDriveRemarks").value = answer;
			document.forms["frmHeader"].submit();
		}
	}
	else {
		alert("Please select at least one Bill of Lading or Vehicle.");
	}
}

function save() {
	document.getElementById("hidAction").value = "SAVE";
	document.forms["frmHeader"].submit();
}

function printPIN() {
	var results = getVehicleIDs(17, false, false, false);
	var vehicleIDs = results[0];
	var message = results[1];

	if (vehicleIDs.length > 0) {
		document.getElementById("hidVehicles").value = vehicleIDs;
		document.getElementById("hidAction").value = "PRINT";
		document.forms["frmHeader"].submit();
	} else {
		alert("Please select at least one Vehicle.");
	}
}

function applyDeliveryDetails() {
	var tblDetails = document.getElementById("tblDetails");
	var rows = tblDetails.rows.length;
	
	var text = document.getElementById("txtDeliveryDetails").value;
	var lines = text.split("\r\n");

	for (var j = 0; j < lines.length; j++) {
		lines[j] = lines[j].replace(/[|]/gi, "\t");
		lines[j] = lines[j].split("\t");
	}

	for (var i = 2; i < rows; i++) {
		var tr = tblDetails.rows[i];
		var vin = tr.childNodes[5].innerText;
		if (vin && vin.trim().length > 0) {
			for (var j = 0; j < lines.length; j++) {
				if (lines[j][0] == vin) {
					if (lines[j][1]) {
						tr.childNodes[6].childNodes[0].value = lines[j][1].trim().substring(0, 50);
					}
					if (lines[j][2]) {
						tr.childNodes[7].childNodes[0].value = lines[j][2].trim().substring(0, 3);
					}
					if (lines[j][3]) {
						tr.childNodes[8].childNodes[0].value = lines[j][3].trim().substring(0, 255);
					}
					if (lines[j][4]) {
						tr.childNodes[9].childNodes[0].value = (lines[j][4].trim().substring(0, 1).toUpperCase() == "A" ? "A" : (lines[j][4].trim().substring(0, 1).toUpperCase() == "C" ? "C" : ""));
					}
					
					if (lines[j][1] || lines[j][2] || lines[j][3] || lines[j][4]) {
						setDirty(tr.childNodes[3].childNodes[0].attributes["vehicleid"].value);
					}
				}
			}
		}
	}
}

function setDirty(vehicleID) {
	var vehicleIDs = document.getElementById("hidDirtyVehicles").value.split(",");
	var found = false;

	for (var i = 0; i < vehicleIDs.length; i++) {
		if (vehicleIDs[i] == vehicleID) {
			found = true;
			break;
		}
	}
	
	if (!found) {
		document.getElementById("hidDirtyVehicles").value += vehicleID + ",";
		document.getElementById("btnSave").disabled = false;
	}
}


// new section expansion

function expandAllR(x) {
	var tblDetails = document.getElementById("tblDetailsR");
	var rows = tblDetails.rows.length;
	var y;

	x.expanded = ! x.expanded;
	x.src = "../Image/" + (x.expanded ? "minus2" : "plus") + ".gif";

	var newClass = (x.expanded ? "SubVisible" : "SubHidden");

	for (var i = 2; i < rows; i++) {
		tr = tblDetails.rows[i];
		y = tr.childNodes[0].childNodes[0];
		if (y.nodeName == "IMG") {

			y.expanded = x.expanded;
			y.src = x.src;

			for (var j = i + 1; j < rows; j++) {
				tr = tblDetails.rows[j];
				if (tr.childNodes[3].childNodes[0].nodeName == "INPUT") {
					tr.className = newClass;
				} else {
					break;
				}
			}
			i = j - 1;
		}
	}
}

function expandBoLR(x) {
	var tblDetails = document.getElementById("tblDetailsR");
	var rows = tblDetails.rows.length;
	var rowIndex = 1 + (x.parentNode.parentNode.rowIndex - 0); // Cast to int

	x.expanded = ! x.expanded;
	x.src = "../Image/" + (x.expanded ? "minus2" : "plus") + ".gif";

	var newClass = (x.expanded ? "SubVisible" : "SubHidden");

	for (var i = rowIndex; i < rows; i++) {
		tr = tblDetails.rows[i];
		if (tr.childNodes[3].childNodes[0].nodeName == "INPUT") {
			tr.className = newClass;
		} else {
			break;
		}
	}
}

function setSelectedVehicles() {
	if (document.getElementById("hidVehicles").value.length != 0) {
//		setVehicleIDs(3, document.getElementById("hidVehicles").value);
		document.getElementById("hidVehicles").value = "";
	}
}

function setSelectedPINVehicles() {
	if (document.getElementById("hidPINVehicles").value.length != 0) {
		setVehicleIDs(17, document.getElementById("hidPINVehicles").value);
		document.getElementById("hidPINVehicles").value = "";
	}
}
