// *********************************************************************************************
// Rating Call Functions
// *********************************************************************************************

// Call the test function
function Test()
{
	StarRate.SRWebServiceProxy.Test(OnTestSuccess, OnFailure);            
}

// Callback function for test success
function OnTestSuccess(results)
{
    alert(results);
}

function GetRates(e)
{
	// Check input
	if (!ValidateShipment())
		return false;

	// Reset toggle display flag
	summaryDisplay = true;

    // Clear the results
    document.getElementById("results").innerHTML = "";    
    document.getElementById("oldresults").innerHTML = "";
    document.getElementById("comparisonresults").innerHTML = "";    
    
    if (e.altKey && e.shiftKey)
    {
        // Display animation
        document.getElementById("comparisonresults").innerHTML = "<img src='img/loading.gif'/>";            

        SendRateRequest();  
        SendOldRateRequest();          
        CompareStarRates();
    }
    else if (e.altKey && e.ctrlKey)
    {
        // Display animations
        document.getElementById("oldresults").innerHTML = "<img src='img/loading.gif'/>";
        document.getElementById("results").innerHTML = "<img src='img/loading.gif'/>";        
    
        SendRateRequest();  
        SendOldRateRequest();          
    }
    else if (e.altKey)
    {
        // Display animation
        document.getElementById("oldresults").innerHTML = "<img src='img/loading.gif'/>";
    
        SendOldRateRequest();
    }
    else
    {
        // Display animation
        document.getElementById("results").innerHTML = "<img src='img/loading.gif'/>";
        
        SendRateRequest();
    }
}

function SendRateRequest() 
{
    // Create the xml request
    var xmlstring = CreateXMLRequest();

	// Get the settings id
	//var settingsId = document.getElementById("settingsId").value;
	var settingsId = readCookieSubkey("StarRateSettings","SettingsId");

	// Get custom code(s)
	var customCode = "";
	currentCustom = 1;
	while ((cbCustom = document.getElementById("cbCustom" + currentCustom)) != null)
	{
	    if (cbCustom.checked)
	    {
	        if (customCode != "")
	        {
	            customCode = customCode + ",";
	        }
	        customCode = customCode + cbCustom.value;
	    }
	        
	    currentCustom++;
	}
	
	// Modes (add to custom)
	var modeLtlElement = document.getElementsByName("modeLtl");
	if (modeLtlElement != null && modeLtlElement.length > 0)
	{
	    if (modeLtlElement[0].checked)
	    {
            if (customCode != "")
            {
                customCode = customCode + ",";
            }
            customCode = customCode + "MODE_LTL";
	    }
	}
	var modeTlElement = document.getElementsByName("modeTl");
	if (modeTlElement != null && modeTlElement.length > 0)
	{
	    if (modeTlElement[0].checked)
	    {
            if (customCode != "")
            {
                customCode = customCode + ",";
            }
            customCode = customCode + "MODE_TRUCKLOAD";
	    }
	}
	var modePkgElement = document.getElementsByName("modePkg");
	if (modePkgElement != null && modePkgElement.length > 0)
	{
	    if (modePkgElement[0].checked)
	    {
            if (customCode != "")
            {
                customCode = customCode + ",";
            }
            customCode = customCode + "MODE_PARCEL";
	    }
	}
	
    // Sort (add to custom)
    var sortElement = document.getElementsByName("sort");
    var sortValue = "";
    var sortCode = "";
    if (sortElement != null && sortElement.length > 0)
    {
        sortValue = getCheckedValue(sortElement);
        
        if (sortValue == "sortLeastCostRadio")
        {
            sortCode = "SORT_LEASTCOST";
        }
        else if (sortValue == "sortScacRadio")
        {
            sortCode = "SORT_SCAC";
        }
        else if (sortValue == "sortDaysRadio")
        {
            sortCode = "SORT_DAYS";
        }
        else if (sortValue == "sortPreferredRadio")
        {
            sortCode = "SORT_PREFERRED";
        }
        else if (sortValue == "sortPrecedenceRadio")
        {
            sortCode = "SORT_PRECEDENCE";
        }
        else if (sortValue == "sortPrecedencePreferredRadio")
        {
            sortCode = "SORT_PRECEDENCEPREFERRED";
        }
    }
	if (sortCode != "")
	{
        if (customCode != "")
        {
            customCode = customCode + ",";
        }
        customCode = customCode + sortCode;
	}

	// Call the rating function
	StarRate.SRWebServiceProxy.TokenCustomRateXmlStringWithSettingsAndTransformToHtml(settingsId, xmlstring, customCode, OnRatingSuccess, OnFailure);            	
}

function SendOldRateRequest()
{
    // Create the xml request
    var xmlstring = CreateOldXMLRequest();
    //alert(xmlstring);

    // Call the rating function
    StarRate.SRWebServiceProxy.TokenRateOldXmlStringAndTransformToHtml(xmlstring, OnOldRatingSuccess, OnFailure);
}

function CompareStarRates() 
{
    // Create the old xml request
    var oldxmlstring = CreateOldXMLRequest();
    
    // Create the xml request
    var xmlstring = CreateXMLRequest();

	// Get the settings id
	//var settingsId = document.getElementById("settingsId").value;
	var settingsId = readCookieSubkey("StarRateSettings","SettingsId");
    
    // Call the comparison function and put the results in the 'results' div
    StarRate.SRWebServiceProxy.TokenCompareOldVsNewStarRate(settingsId, xmlstring, oldxmlstring, OnComparisonSuccess, OnFailure);    
}

function CreateXMLRequest()
{
	// Create xml
	var xmlstring = "";
	var xmldisplaystring = "";

	xmlstring = "<?xml version=\"1.0\"?>";
	xmldisplaystring = "<?xml version=\"1.0\"?>\n";

	xmlstring += "<shipment>";
	xmldisplaystring += "<shipment>\n";            

	// Client Information
    var corpCode = readCookieSubkey("StarRateSettings","corporateCode");
    var clientCode = readCookieSubkey("StarRateSettings","clientCode");
    var rateType = "C";
    	
    // Rate Type
    var rateTypeElement = document.getElementsByName("rateType");
    var rateTypeValue = "";
    if (rateTypeElement != null && rateTypeElement.length > 0)
    {
        rateTypeValue = getCheckedValue(rateTypeElement);
        
        if (rateTypeValue == "tranzactRadio")
        {
            rateType = "T";
        }
        else
        {
            rateType = "C";
        }
    }
    	
    // Division
    var division = "";
    var divisionOverrideElement = document.getElementById("divisionOverride"); // Hidden
    var divisionOverrideRadio = document.getElementsByName("divisionOverrideRadio"); // Radio buttons
    var divisionOverrideDropDown = document.getElementById("divisionOverrideDropDown"); // Drop Down 
    if (divisionOverrideElement != null)
    {
        division = divisionOverrideElement.value;
    }
    else if (divisionOverrideRadio != null && divisionOverrideRadio.length > 0)
    {	
	    division = getCheckedValue(divisionOverrideRadio);
	}
	else if (divisionOverrideDropDown != null)
	{
	    division = divisionOverrideDropDown.options[divisionOverrideDropDown.selectedIndex].value;
	}
	else
	{
        division = readCookieSubkey("StarRateSettings","division");
	}

	xmlstring += "<ratetype>" + trim(rateType) + "</ratetype>";	    
	xmlstring += "<corporatecode>" + trim(corpCode) + "</corporatecode>";
	xmlstring += "<clientcode>" + trim(clientCode) + "</clientcode>";
	xmlstring += "<division>" + trim(division) + "</division>";

	xmldisplaystring += "<ratetype>" + trim(rateType) + "</ratetype>\n";
	xmldisplaystring += "<corporatecode>" + trim(corpCode) + "</corporatecode>\n";
	xmldisplaystring += "<clientcode>" + trim(clientCode) + "</clientcode>\n";
	xmldisplaystring += "<division>" + trim(division) + "</division>\n";

	// Carrier
	var ddlCarriers = document.getElementById("ddlCarriers");
	if (ddlCarriers != null)
	{
		var carrierarray = ddlCarriers.options[ddlCarriers.selectedIndex].value.split(",");
		xmlstring += "<scac>" + carrierarray[0] + "</scac>";
		xmlstring += "<servicelevelcode>" + carrierarray[1] + "</servicelevelcode>";

		xmldisplaystring += "<scac>" + carrierarray[0] + "</scac>\n";
		xmldisplaystring += "<servicelevelcode>" + carrierarray[1] + "</servicelevelcode>\n";
	}
	else
	{
		xmlstring += "<scac></scac>\n<servicelevelcode></servicelevelcode>"; // Default to rank.

		xmldisplaystring += "<scac></scac>\n<servicelevelcode></servicelevelcode>\n"; // Default to rank.                
	}

    // Pallets
	var palletsTextBox = document.getElementById("tbPallets");
	var palletsValue = "";
	if (palletsTextBox != null) // Check that the control exists.
	{
	    palletsValue = trim(palletsTextBox.value) == "" ? 0 : trim(palletsTextBox.value);
		xmlstring += "<pallets>" + palletsValue + "</pallets>";
		xmldisplaystring += "<pallets>" + palletsValue + "</pallets>\n";	            
    }    

	// Equipment Codes
	var currentEquipmentCode = 1;
	while ((cbEquipment = document.getElementById("cbEquipment" + currentEquipmentCode)) != null)
	{
	    if (cbEquipment.checked)
	    {
	        xmlstring += "<equipmentcode>" + cbEquipment.value + "</equipmentcode>";
	        xmldisplaystring += "<equipmentcode>" + cbEquipment.value + "</equipmentcode>\n";
	    }
	        
	    currentEquipmentCode++;
	}

	// Ship Date
	var shipDateTextBox = document.getElementById("tbShipDate");
	if (shipDateTextBox != null) // Check that the control exists, otherwise we will default to today.
	{
		var datearray = shipDateTextBox.value.split("/");
		var month = datearray[0];
		var day = datearray[1];
		var year = datearray[2];
		
		// add leading zeros
		if (day < 10)
		{
		    day = "0" + eval(day);
		}
		if (month < 10)
		{
		    month = "0" + eval(month);
		}
		
		xmlstring += "<shipdate>" + year + "-" + month + "-" + day + "</shipdate>";

		xmldisplaystring += "<shipdate>" + year + "-" + month + "-" + day + "</shipdate>\n";	            
	}
	else
	{
		var today = new Date();
		var year = today.getFullYear();
		var month = (today.getMonth() + 1);
		var day = today.getDate();
		
		// add leading zeros
		if (day < 10)
		{
		    day = "0" + eval(day);
		}
		if (month < 10)
		{
		    month = "0" + eval(month);
		}
		
		xmlstring += "<shipdate>" + year + "-" + month + "-" + day + "</shipdate>";
		xmldisplaystring += "<shipdate>" + year + "-" + month + "-" + day + "</shipdate>\n";                
	}

	// Locations (Points)
	var tbOriginPostalCode = document.getElementById("tbOriginPostalCode");
	var tbDestinationPostalCode = document.getElementById("tbDestinationPostalCode");
	var ddlOriginSites = document.getElementById("ddlOriginSites");
	var ddlDestinationSites = document.getElementById("ddlDestinationSites");
	if (tbOriginPostalCode != null || ddlOriginSites != null) // Separate origin and destination controls
	{
		// Origin
		if (tbOriginPostalCode == null)
		{
		    var record = ddlOriginSites.options[ddlOriginSites.selectedIndex].value.split(",");		
		    xmlstring += "<point>";
		    xmlstring += "<postalcode>" + record[0] + "</postalcode>";
		    xmlstring += "<name>" + record[1] + "</name>";    
		    xmlstring += "<state>" + record[2] + "</state>";        
		    xmlstring += "<country>" + record[3] + "</country>";                        
		    xmlstring += "</point>";                		
		    
		    xmldisplaystring += "<point>\n";
		    xmldisplaystring += "<postalcode>" + record[0] + "</postalcode>\n";
		    xmldisplaystring += "<name>" + record[1] + "</name>\n";    
		    xmldisplaystring += "<state>" + record[2] + "</state>\n";        
		    xmldisplaystring += "<country>" + record[3] + "</country>\n";                        
		    xmldisplaystring += "</point>\n";                
		}
		else
		{
		    xmlstring += "<point>";
		    xmlstring += "<postalcode>" + trim(document.getElementById("tbOriginPostalCode").value) + "</postalcode>";
		    xmlstring += "<name>" + trim(document.getElementById("tbOriginCity").value) + "</name>";    
		    var selOriginState = document.getElementById("selOriginState");
		    var record = selOriginState.options[selOriginState.selectedIndex].value.split(",");
		    xmlstring += "<state>" + record[0] + "</state>";        
		    xmlstring += "<country>" + record[1] + "</country>";                        
		    xmlstring += "</point>";                

		    xmldisplaystring += "<point>\n";
		    xmldisplaystring += "<postalcode>" + trim(document.getElementById("tbOriginPostalCode").value) + "</postalcode>\n";
		    xmldisplaystring += "<name>" + trim(document.getElementById("tbOriginCity").value) + "</name>\n";    
		    xmldisplaystring += "<state>" + record[0] + "</state>\n";        
		    xmldisplaystring += "<country>" + record[1] + "</country>\n";                        
		    xmldisplaystring += "</point>\n";                
		}

		// Destination
		if (tbDestinationPostalCode == null)
		{
		    var record = ddlDestinationSites.options[ddlDestinationSites.selectedIndex].value.split(",");		
		    xmlstring += "<point>";
		    xmlstring += "<postalcode>" + record[0] + "</postalcode>";
		    xmlstring += "<name>" + record[1] + "</name>";    
		    xmlstring += "<state>" + record[2] + "</state>";        
		    xmlstring += "<country>" + record[3] + "</country>";                        
		    xmlstring += "</point>";                		
		    
		    xmldisplaystring += "<point>\n";
		    xmldisplaystring += "<postalcode>" + record[0] + "</postalcode>\n";
		    xmldisplaystring += "<name>" + record[1] + "</name>\n";    
		    xmldisplaystring += "<state>" + record[2] + "</state>\n";        
		    xmldisplaystring += "<country>" + record[3] + "</country>\n";                        
		    xmldisplaystring += "</point>\n";                
		}
		else
		{
		    xmlstring += "<point>";
		    xmlstring += "<postalcode>" + trim(document.getElementById("tbDestinationPostalCode").value) + "</postalcode>";
		    xmlstring += "<name>" + trim(document.getElementById("tbDestinationCity").value) + "</name>";    
		    var selDestinationState = document.getElementById("selDestinationState");
		    record = selDestinationState.options[selDestinationState.selectedIndex].value.split(",");
		    xmlstring += "<state>" + record[0] + "</state>";        
		    xmlstring += "<country>" + record[1] + "</country>";                        
		    xmlstring += "</point>";                

		    xmldisplaystring += "<point>\n";
		    xmldisplaystring += "<postalcode>" + trim(document.getElementById("tbDestinationPostalCode").value) + "</postalcode>\n";
		    xmldisplaystring += "<name>" + trim(document.getElementById("tbDestinationCity").value) + "</name>\n";    
		    xmldisplaystring += "<state>" + record[0] + "</state>\n";        
		    xmldisplaystring += "<country>" + record[1] + "</country>\n";                        
		    xmldisplaystring += "</point>\n";                
		}
	}
	else // Location list
	{
		var selLocationList = document.getElementById("selLocationList");
		var locationrecord;

		for (var i = 0; i < selLocationList.options.length; i++)
		{
			locationrecord = selLocationList.options[i].value.split(",");
			xmlstring += "<point>";
			xmlstring += "<postalcode>" + locationrecord[0] + "</postalcode>";
			xmlstring += "<name>" + locationrecord[1] + "</name>";    
			xmlstring += "<state>" + locationrecord[2] + "</state>";        
			xmlstring += "<country>" + locationrecord[3] + "</country>";                        
			xmlstring += "</point>";   

			xmldisplaystring += "<point>\n";
			xmldisplaystring += "<postalcode>" + locationrecord[0] + "</postalcode>\n";
			xmldisplaystring += "<name>" + locationrecord[1] + "</name>\n";    
			xmldisplaystring += "<state>" + locationrecord[2] + "</state>\n";        
			xmldisplaystring += "<country>" + locationrecord[3] + "</country>\n";                        
			xmldisplaystring += "</point>\n";   
		}
	}

	// Line Items
	tbWeight1 = document.getElementById("tbWeight1");
	if (tbWeight1 != null) // Separate line item controls
	{
		// Find out how many (populated) line item rows we have
		var lineItemCount = 0;
		while (document.getElementById("tbWeight" + (lineItemCount + 1)) != null)
		{
			if (trim(document.getElementById("tbWeight" + (lineItemCount + 1)).value) != "")
			{
				lineItemCount++;
			}
			else
			{
				break;
			}
		}

		var tbWeight;
		var tbPieces;
		var selClass;
		var pieces;
		for (var i = 0; i < lineItemCount; i++)
		{
			tbWeight = document.getElementById("tbWeight" + (i + 1));
			tbPieces = document.getElementById("tbPieces" + (i + 1));
			selClass = document.getElementById("selClass" + (i + 1));

            if (tbPieces != null)
            {
			    pieces = (trim(tbPieces.value) == "" || tbPieces.value <= 0) ? 1 : tbPieces.value;
			}
			else
			{
			    pieces = 1;
			}

			xmlstring += "<lineitem>";
			xmlstring += "<perpieceweight>" + trim(tbWeight.value) + "</perpieceweight>";
			if (tbPieces != null)
			{
				xmlstring += "<pieces>" + pieces + "</pieces>";    
			}
			if (selClass != null)
			{
				xmlstring += "<class>" + trim(selClass.options[selClass.selectedIndex].value) + "</class>";        
			}
			xmlstring += "</lineitem>";                

			xmldisplaystring += "<lineitem>\n";
			xmldisplaystring += "<perpieceweight>" + trim(tbWeight.value) + "</perpieceweight>\n";
			if (tbPieces != null)
			{
				xmldisplaystring += "<pieces>" + pieces + "</pieces>\n";    
			}
			if (selClass != null)
			{
				xmldisplaystring += "<class>" + trim(selClass.options[selClass.selectedIndex].value) + "</class>\n";        
			}
			xmldisplaystring += "</lineitem>\n";                
		}
	}
	else // Line item list
	{
		var selLineItemList = document.getElementById("selLineItemList");
		var record;
		var pieces;
		for (var i = 0; i < selLineItemList.options.length; i++)
		{
			record = selLineItemList.options[i].value.split(",");

			pieces = record[2] <= 0 ? 1 : record[2];

			xmlstring += "<lineitem>";
			xmlstring += "<perpieceweight>" + record[0] + "</perpieceweight>";
			xmlstring += "<pieces>" + pieces + "</pieces>";    
			xmlstring += "<class>" + record[1] + "</class>";        
			xmlstring += "</lineitem>";                

			xmldisplaystring += "<lineitem>\n";
			xmldisplaystring += "<perpieceweight>" + record[0] + "</perpieceweight>\n";
			xmldisplaystring += "<pieces>" + pieces + "</pieces>\n";    
			xmldisplaystring += "<class>" + record[1] + "</class>\n";        
			xmldisplaystring += "</lineitem>\n";                
		}
	}  
	
	// Add Ons
	var currentAddOn = 1;
	while ((cbAddOn = document.getElementById("cbAddOn" + currentAddOn)) != null)
	{
	    if (cbAddOn.checked)
	    {
	        xmlstring += "<additionalcharge>" + cbAddOn.value + "</additionalcharge>";
	        
	        xmldisplaystring += "<additionalcharge>" + cbAddOn.value + "</additionalcharge>\n";
	    }
	        
	    currentAddOn++;
	}
	// Hidden (Always Used) Add Ons
	currentAddOn = 1;
	while ((hAddOn = document.getElementById("hAddOn" + currentAddOn)) != null)
	{
        xmlstring += "<additionalcharge>" + hAddOn.value + "</additionalcharge>";
        
        xmldisplaystring += "<additionalcharge>" + hAddOn.value + "</additionalcharge>\n";
                
	    currentAddOn++;
	}

	xmlstring += "</shipment>";
	xmldisplaystring += "</shipment>\n";            

    return xmlstring;
}

function CreateOldXMLRequest()
{
    var xmlstring = "";
    
	xmlstring = "<?xml version=\"1.0\"?>";

	xmlstring += "<batch id=\"8765\"><shipment id=\"4321\" ";

	// Client Information
	//var clientCode = document.getElementById("clientCode").value;
	var clientCode = readCookieSubkey("StarRateSettings","clientCode");
    var rateType = document.getElementById("rateType").value;
    	
    // Division
    var division = "";
    var divisionOverrideElement = document.getElementById("divisionOverride"); // Hidden
    var divisionOverrideElements = document.getElementsByName("divisionOverrideRadio"); // Radio buttons
    if (divisionOverrideElement != null)
    {
        division = divisionOverrideElement.value;
    }
    else if (divisionOverrideElements != null)
    {	
	    division = getCheckedValue(divisionOverrideElements);
	}
	else
	{
        //division = document.getElementById("division").value;
        division = readCookieSubkey("StarRateSettings","division");
	}
	    
	xmlstring += "cc=\"" + trim(clientCode) + "\" ";
	xmlstring += "di=\"" + trim(division) + "\" ";
	//xmlstring += "<ratetype>" + trim(rateType) + "</ratetype>";

	// Ship Date
	var shipDateTextBox = document.getElementById("tbShipDate");
	if (shipDateTextBox != null) // Check that the control exists, otherwise we will default to today.
	{
		var datearray = shipDateTextBox.value.split("/");
		var month = datearray[0];
		var day = datearray[1];
		var year = datearray[2];
		
		// add leading zeros
		if (day < 10)
		{
		    day = "0" + day;
		}
		if (month < 10)
		{
		    month = "0" + month;
		}
		
		xmlstring += "shipdate=\"" + month + "/" + day + "/" + year + "\" ";
	}
	else
	{
		var today = new Date();
		xmlstring += "shipdate=\"" + (today.getMonth() + 1) + "/" + today.getDate() + "/" + today.getFullYear() + "\" ";
	}

	// Carrier
	var ddlCarriers = document.getElementById("ddlCarriers");
	if (ddlCarriers != null)
	{
		var carrierarray = ddlCarriers.options[ddlCarriers.selectedIndex].value.split(",");
		xmlstring += "scac=\"" + carrierarray[0] + "\" ";
	}
	else
	{
		xmlstring += "scac=\"\" "; // Default to rank.
	}

	// Locations (Points)
	var tbOriginPostalCode = document.getElementById("tbOriginPostalCode");
	if (tbOriginPostalCode != null) // Separate origin and destination controls
	{
		// Origin
		xmlstring += "oz=\"" + trim(document.getElementById("tbOriginPostalCode").value) + "\" ";

		// Destination
		xmlstring += "dz=\"" + trim(document.getElementById("tbDestinationPostalCode").value) + "\" ";
	}
	else // Location list
	{
// FIX THIS!!!	
	
//		var selLocationList = document.getElementById("selLocationList");
//		var locationrecord;

//		for (var i = 0; i < selLocationList.options.length; i++)
//		{
//			locationrecord = selLocationList.options[i].value.split(",");
//			xmlstring += "<point>";
//			xmlstring += "<postalcode>" + locationrecord[0] + "</postalcode>";
//			xmlstring += "<name>" + locationrecord[1] + "</name>";    
//			xmlstring += "<state>" + locationrecord[2] + "</state>";        
//			xmlstring += "<country>" + locationrecord[3] + "</country>";                        
//			xmlstring += "</point>";   

//		}
	}
	
	// Mode
	xmlstring += "mode = \"\">";

	// Line Items
	tbWeight1 = document.getElementById("tbWeight1");
	if (tbWeight1 != null) // Separate line item controls
	{
		// Find out how many (populated) line item rows we have
		var lineItemCount = 0;
		while (document.getElementById("tbWeight" + (lineItemCount + 1)) != null)
		{
			if (trim(document.getElementById("tbWeight" + (lineItemCount + 1)).value) != "")
			{
				lineItemCount++;
			}
			else
			{
				break;
			}
		}

		var tbWeight;
		var tbPieces;
		var selClass;
		var pieces;
		for (var i = 0; i < lineItemCount; i++)
		{
			tbWeight = document.getElementById("tbWeight" + (i + 1));
			tbPieces = document.getElementById("tbPieces" + (i + 1));
			selClass = document.getElementById("selClass" + (i + 1));

            if (tbPieces != null)
            {
			    pieces = (trim(tbPieces.value) == "" || tbPieces.value <= 0) ? 1 : tbPieces.value;
			}
			else
			{
			    pieces = 1;
			}

			xmlstring += "<lineitem ";
			xmlstring += "weight=\"" + trim(tbWeight.value) + "\" ";
			if (selClass != null)
			{
				xmlstring += "class=\"" + trim(selClass.options[selClass.selectedIndex].value) + "\" ";        
			}
			else
			{
			    xmlstring += "class=\"\" ";
			}
			if (tbPieces != null)
			{
				xmlstring += "pieces=\"" + pieces + "\" ";    
			}
			else
			{
			    xmlstring += "pieces=\"\" ";
			}
			xmlstring += "/>";                
		}
	}
	else // Line item list
	{
		var selLineItemList = document.getElementById("selLineItemList");
		var record;
		var pieces;
		for (var i = 0; i < selLineItemList.options.length; i++)
		{
			record = selLineItemList.options[i].split(",");

			pieces = record[2] <= 0 ? 1 : record[2];

			xmlstring += "<lineitem ";
			xmlstring += "weight=\"" + record[0] + "\" ";
			xmlstring += "class=\"" + record[1] + "\" ";        
			xmlstring += "pieces=\"" + pieces + "\" ";    
			xmlstring += "/>";                
		}
	}  
	
	// Add Ons
	var currentAddOn = 1;
	while ((cbAddOn = document.getElementById("cbAddOn" + currentAddOn)) != null)
	{
	    if (cbAddOn.checked)
	    {
	        xmlstring += "<ancillary>" + cbAddOn.value + "</ancillary>";
	    }
	        
	    currentAddOn++;
	}
	// Hidden (Always Used) Add Ons
	currentAddOn = 1;
	while ((hAddOn = document.getElementById("hAddOn" + currentAddOn)) != null)
	{
        xmlstring += "<ancillary>" + hAddOn.value + "</ancillary>";
                
	    currentAddOn++;
	}

	xmlstring += "</shipment></batch>";
    
    return xmlstring;
}


// *********************************************************************************************
// AJAX Web Service Callback Function (Success)
// *********************************************************************************************

function OnRatingSuccess(results)
{
	var resultsDiv = document.getElementById("results");  
	var radioNewPage = document.getElementById("rResultsTarget_1");      

	if (radioNewPage != null)
	{
		if (radioNewPage.checked) // New page
		{
			// Clear the results on this page
			resultsDiv.innerHTML = "";

			// Open a new window for the results
			PopupResults(results);

			return;
		}
	}

	// Replace the contents of the results div with the returned text
	resultsDiv.innerHTML = results;            
}

function OnOldRatingSuccess(results)
{
	var resultsDiv = document.getElementById("oldresults");  
	var radioNewPage = document.getElementById("rResultsTarget_1");      

	if (radioNewPage != null)
	{
		if (radioNewPage.checked) // New page
		{
			// Clear the results on this page
			resultsDiv.innerHTML = "";

			// Open a new window for the results
			PopupResults(results);

			return;
		}
	}

    //alert(results);

	// Replace the contents of the results div with the returned text
	resultsDiv.innerHTML = results;            
}

function OnComparisonSuccess(results)
{
	var resultsDiv = document.getElementById("comparisonresults");  
	var radioNewPage = document.getElementById("rResultsTarget_1");      

	if (radioNewPage != null)
	{
		if (radioNewPage.checked) // New page
		{
			// Clear the results on this page
			resultsDiv.innerHTML = "";

			// Open a new window for the results
			PopupResults(results);

			return;
		}
	}

	// Replace the contents of the results div with the returned text
	resultsDiv.innerHTML = results;            
}

function PopupResults(results)
{
    var resultsWindow = window.open("","","");
    
    resultsWindow.document.write("<html><head><title>StarRate Results</title>");
    resultsWindow.document.write("<script language='javascript' src='toggle.js'></script>");    
    resultsWindow.document.write("</head><body>");
    resultsWindow.document.write(results);
    resultsWindow.document.write("</body></html>");
}

// *********************************************************************************************
// AJAX Web Service Call Failure Handling Function
// *********************************************************************************************

function OnFailure(error)
{
	// NOTE: This is an error in the ajax call to the web service, not a StarRate error
	var stackTrace = error.get_stackTrace();
	var message = error.get_message();
	var statusCode = error.get_statusCode();
	var exceptionType = error.get_exceptionType();
	var timedout = error.get_timedOut();

	var resultsDiv = document.getElementById("results");

	resultsDiv.innerHTML = 
		"Stack Trace: " +  stackTrace + "<br/>" +
		"Service Error: " + message + "<br/>" +
		"Status Code: " + statusCode + "<br/>" +
		"Exception Type: " + exceptionType + "<br/>" +
		"Timed Out: " + timedout;
}
