var o_privParents = new Array();

function excludeFromRole()
{
	addParentRoles(document.manageRolesAndPrivExcludes.excludable_privilege_ids);
	addParentRoles(document.manageRolesAndPrivExcludes.excludable_child_role_ids);
/*	for (x_i = 0; x_i < document.manageRolesAndPrivExcludes.parent_roles.length; x_i++)
	{
		if (document.manageRolesAndPrivExcludes.parent_roles.options[x_i].selected)
			alert(document.manageRolesAndPrivExcludes.parent_roles.options[x_i].value);
	}*/
	document.manageRolesAndPrivExcludes.action='/excludeFromRole.do';
	document.manageRolesAndPrivExcludes.submit();
}

function unexcludeFromRole()
{
	addParentRoles(document.manageRolesAndPrivExcludes.includable_privilege_ids);
	addParentRoles(document.manageRolesAndPrivExcludes.includable_child_role_ids);
	for (x_i = 0; x_i < document.manageRolesAndPrivExcludes.parent_roles.length; x_i++)
/*	{
		if (document.manageRolesAndPrivExcludes.parent_roles.options[x_i].selected)
			alert(document.manageRolesAndPrivExcludes.parent_roles.options[x_i].value);
	}*/
	document.manageRolesAndPrivExcludes.action='/unexcludeFromRole.do';
	document.manageRolesAndPrivExcludes.submit();
}

function addParentRoles(p_opts)
{
	if (p_opts != null)
	{
		if (p_opts.length) // it's an array of checkboxes
		{
			for (var x_i = 0; x_i < p_opts.length; x_i++)
			{
				if (p_opts[x_i].checked)
				{
					//alert(p_opts[x_i].value);
					for (var x_j = 0; x_j < o_privParents.length; x_j++)
					{
						if (o_privParents[x_j][0] == p_opts[x_i].value) 
						{
							//alert("adding option " + o_privParents[x_j][1]);
							addOption("", o_privParents[x_j][1], 
								document.manageRolesAndPrivExcludes.parent_roles, true);
						}
					}
				}
			}
		}
		else // it's just one checkbox
		{
			if (p_opts.checked)
			{
				for (var x_j = 0; x_j < o_privParents.length; x_j++)
				{
					if (o_privParents[x_j][0] == p_opts.value) 
					{
						//alert("adding option " + o_privParents[x_j][1]);
						addOption("", o_privParents[x_j][1], 
							document.manageRolesAndPrivExcludes.parent_roles, true);
					}
				}
			}
		}
	}
}

function addOption(p_text, p_value, p_selectElement, p_selected)
{
	// is the value already present?
	for (x_i = 0; x_i < p_selectElement.length; x_i++)
		if (p_selectElement.options[x_i].value == p_value) return;
	var x_opt = document.createElement("OPTION");
	x_opt.text = p_text;
	x_opt.value = p_value;
	p_selectElement.options.add(x_opt);
	x_index = p_selectElement.options.length;
	p_selectElement.options[x_index - 1].selected = p_selected;
}

function postForDirector(number, form)
{
    form.action='/officerIdentification.do';
    form.officer_key.value=number;
    form.submit();
}

function postForReport(number, form)
{
    form.action='/companiesOfficers.do';
    form.company_key.value=number;
    form.report_type.value="8006";
    form.submit();
}

function postForImageListFilter(familySelected, form) 
{
    form.action='/companyImages.do';
    var index;
	
	// set the sort order
	if (form.sort_order == null || form.sort_order.value == '')
	{
		if (form.sort_order_select != null)
		{
			form.sort_order.value = form.sort_order_select.options[form.sort_order_select.selectedIndex].value;	
		}
	}
	
    //familySelected == '' when we've pressed the searchImages button.
    if (familySelected == 'SELECT_ALL_DOCUMENTS')
    {
    	// toggle the "all" check box
    	form.selectDeselectAll.checked = true;
    	
    	// toggle all check boxes
    	for (index = 0; index < form.family_array_key.length; index++)
        {
            form.family_array_key[index].checked = true;
        }
    }
    else if (familySelected != '')
    {
        //when we click a link, then reset all other checked boxes.
        for (index = 0; index < form.family_array_key.length; index++)
        {
            if (form.family_array_key[index].value == familySelected)
                form.family_array_key[index].checked = true;
            else
                form.family_array_key[index].checked = false;
        }
    }

    // Process a target date + latitude into to and from dates
    form.target_date_DD.value = trimString(form.target_date_DD.value);
    form.target_date_MM.value = trimString(form.target_date_MM.value);
    form.target_date_YYYY.value = trimString(form.target_date_YYYY.value);
    form.days_latitude.value = trimString(form.days_latitude.value);

    if ((form.target_date_YYYY.value != "") && (form.days_latitude.value != ""))
    {
        var targetDate = makeDate(form.target_date_DD.value,
                                  form.target_date_MM.value,
                                  form.target_date_YYYY.value);
        var newFromDate = new Date();
        newFromDate.setFullYear(targetDate.getFullYear(), targetDate.getMonth(),
            targetDate.getDate() - parseInt(form.days_latitude.value));
        var newToDate = new Date();
        newToDate.setFullYear(targetDate.getFullYear(), targetDate.getMonth(),
            targetDate.getDate() + parseInt(form.days_latitude.value));
        form.from_DD.value = newFromDate.getDate();
        form.from_MM.value = newFromDate.getMonth() + 1;
        form.from_YYYY.value = newFromDate.getFullYear();
        form.to_DD.value = newToDate.getDate();
        form.to_MM.value = newToDate.getMonth() + 1;
        form.to_YYYY.value = newToDate.getFullYear();
//        alert("Target: " + form.target_date_DD.value + " " + form.target_date_MM.value + " " + form.target_date_YYYY.value);
//        alert("From: " + form.from_DD.value + " " + form.from_MM.value + " " + form.from_YYYY.value);
//        alert("To: " + form.to_DD.value + " " + form.to_MM.value + " " + form.to_YYYY.value);
//        alert("X: " + targetDate.getDate() + "+" + parseInt(form.days_latitude.value));
    }
    else
    {
        // Otherwise just validate supplied from and to dates
        form.from_DD.value = trimString(form.from_DD.value);
        form.from_MM.value = trimString(form.from_MM.value);
        form.from_YYYY.value = trimString(form.from_YYYY.value);
        form.to_DD.value = trimString(form.to_DD.value);
        form.to_MM.value = trimString(form.to_MM.value);
        form.to_YYYY.value = trimString(form.to_YYYY.value);

        if ((validateDate(form.from_DD.value, form.from_MM.value,
                form.from_YYYY.value, 'from date') == false)
            || (validateDate(form.to_DD.value, form.to_MM.value,
                form.to_YYYY.value, 'to date') == false))
        {
            return;
        }

        var fromDate = makeDate(form.from_DD.value, form.from_MM.value,
            form.from_YYYY.value);
        var toDate = makeDate(form.to_DD.value, form.to_MM.value,
            form.to_YYYY.value);

        if ((fromDate != null) && (toDate != null))
        {
            if (fromDate.getTime() > toDate.getTime())
            {
                alert("the from date cannot be after the to date.");
                return;
            }
        }
    }
    //check the max documents value.
    //Note: If empty then set to -1 so that the value is ignored in the dao.
    //      Struts sets Integer values that are null to zero :(.
    //      Use the hidden field so the setting to -1 does not show on screen.
    if ((form.max_length_screen.value == null) ||
        (form.max_length_screen.value == ''))
    {
        form.max_length.value = -1;
    }
    else
    {
        form.max_length.value = form.max_length_screen.value;
    }
    form.submit();
}

function imageListTableHeaderClicked(form, column)
{						
	// for each family_array_key value set the search params from the hidden values
	for (index = 0; index < form.family_array_key.length; index++)
	{						
		var ischecked = form.family_array_key_search_val[index].value;
		
		if (ischecked=='true')
		{
			
			form.family_array_key[index].checked = true;
		}
		else if (ischecked=='false')
		{
			form.family_array_key[index].checked = false;
		}
		else
		{
			form.family_array_key[index].checked = false;
		}
	}
	
	// for all other search params set from the hidden values						
	form.from_MM.value = form.from_MM_search_val.value;
	form.from_YYYY.value = form.from_YYYY_search_val.value;
	form.to_MM.value = form.to_MM_search_val.value;
	form.to_YYYY.value = form.to_YYYY_search_val.value;
	form.max_length_screen.value = form.max_length_screen_search_val.value;
	
	// set the sort order
	if (form.sort_order_search_val == null || form.sort_order_search_val.value == '')
	{
		form.sort_order.value = column + 'Ascending';							
	}
	else if( ((column + 'Descending') != form.sort_order_search_val.value) &&
			((column + 'Ascending') != form.sort_order_search_val.value) )
	{
		form.sort_order.value = column + 'Descending';
	}
	else if( (column + 'Descending') == form.sort_order_search_val.value)			 
	{
		form.sort_order.value = column + 'Ascending';	
	}
	else if ( (column + 'Ascending') == form.sort_order_search_val.value)
	{
		form.sort_order.value = column + 'Descending';
	}
	else
	{
		form.sort_order.value = 'typeAscending';
	}
	
	// submit the search
	postForImageListFilter('', form);
}

function postForSingleProduct(companyKey, prodId, momento, form)
{
    form.company_key.value = companyKey;
    form.product_id.value = prodId;
    form.MOMENTO_KEY.value = momento;
    form.submit();
}

function postForSingleProductWithCountryId(companyKey, prodId, momento, country_id, form)
{
    form.company_key.value = companyKey;
    form.product_id.value = prodId;
    form.MOMENTO_KEY.value = momento;
    form.country_id.value = country_id;
    form.submit();
}

function postForReportProductTab(companyKey, prodId, reportDataSectionId, momento, country_id, pagination_type, form)
{
    form.company_key.value = companyKey;
    form.product_id.value = prodId;
    form.report_data_section_id.value = reportDataSectionId;    
    form.MOMENTO_KEY.value = momento;
    form.country_id.value = country_id;
    
    if (pagination_type == 'ledger')
    {
    	form.action = '/placeReportOrderForLedgerSelections.do';
    }
    form.submit();
}

function postForDirectorReport(stakeholderKey, prodId, momento, form)
{
    form.stakeholder_key.value = stakeholderKey;
    form.product_id.value = prodId;
    form.MOMENTO_KEY.value = momento;
    form.submit();
}

function postForPeopleIdentification(stakeholderKey, entityTypeId, prodId, momento, form)
{
    form.stakeholder_key.value = stakeholderKey;
    form.product_id.value = prodId;
    form.entity_type_id.value = entityTypeId;
    form.MOMENTO_KEY.value = momento;
    form.submit();
}

function postToSearchAndOrderFavourite(momento, form)
{
    var companyKey = form.company_key.value;
    
    // check a jurisdiction has been selected. This prevents a user searching outside their given jurisdiction.
    if (isJurisdictionSelected(form) == false)
	{
    	alert("at least one jurisdiction must be selected.");
		return;
    }
    
	if (companyKey.match("UC") != null)
	{
		alert("favourites are not available for non-limited companies.");
		return;
	}
	
    // can only do this with a reg_num. Company name is to be ignored. APP-1134.
    if ((form.company_name.value != null || form.company_name.value != ""))
    {
        form.company_name.value = "";
    }
    
    
    if (companyKey != null && companyKey != "")
    {
        form.action = '/searchAndOrderFavourite.do';
        form.fav_partial_momento_key.value = momento;
        form.submit();
    }
    else
    {
        alert ("a number must be provided.");
        form.company_key.focus();
    }
}

function postToOrderLatestImage(companyKey, prodId, entityName, entityType, form)
{
    form.action = '/placeOrderForLatestImage.do';
    form.company_key.value = companyKey;
    form.product_id.value = prodId;
    form.entity_name.value = entityName;
    form.entity_type.value = entityType;
    form.submit();
}

/*
returnFlag should be y if called from a form's onsubmit attribute: then
false will be returned if the selection is invalid, aborting the submission; 
and if the selection is valid, then form.submit() isn't called - if the form is
in the process of being submitted anyway (because the user has pressed enter),
calling form.submit() would submit it again.

Conversely, if called from a link or an onclick, eg a submit graphic or 
button, returnFlag should be n: there's no need to return false to stop form 
submission, but form.submit() needs to be called, because otherwise the form
won't be submitted
*/

function postToDomesticSearch(form, returnFlag)
{
	// may not exist - can be removed by a pref
	if (form.country_id)
	{
	    if (form.country_id.options[form.country_id.selectedIndex].value=='Spacer' 
	     || form.country_id.options[form.country_id.selectedIndex].value=='')
	    {
	        alert("please select a country to proceed.");
	        if (returnFlag == 'y') 
	        {
	        	return false;
	    	}
	    }
	    else if (isJurisdictionSelected(form) == false)
	    {
	    	alert("at least one jurisdiction must be selected.");
	        if (returnFlag == 'y') 
	        {
	        	return false;
	    	}
	    }
	    else
	   	{
	        form.country_for_display.value=form.country_id.options[form.country_id.selectedIndex].value;
    		if (returnFlag != 'y')
    		{
    			form.submit();
    		}
    	}
    }
    else if (isJurisdictionSelected(form) == false)
    {
    	alert("at least one jurisdiction must be selected.");
        if (returnFlag == 'y') 
        {
        	return false;
    	}
    }
    else
   	{
		if (returnFlag != 'y')
		{
			form.submit();
		}
	}
}

/*
isJurisdictionSelected : checks whether we have either esw, ni or roi jurisdictions set on the search page. 
If not then we should not submit the form. Without this a user can uncheck the jurisdiction tick boxes
on the company search page and then perform a search outside of their jurisdiction.
*/

function isJurisdictionSelected(form)
{
	// at least one jurisdiction must be set
	
	if (form.include_england_scotland_wales != null)
	{
		if(form.include_england_scotland_wales.checked == true)
		{
			return true;
		}
	}	
	if (form.include_northern_ireland != null)
	{
		if(form.include_northern_ireland.checked == true)
		{
			return true;
		}
	}	
	if (form.include_republic_of_ireland != null)
	{
		if(form.include_republic_of_ireland.checked == true)
		{
			return true;
		}
	}	
	
	return false;
}


/*
returnFlag should be y if called from a form's onsubmit attribute: then
false will be returned if the selection is invalid, aborting the submission; 
and if the selection is valid, then form.submit() isn't called - if the form is
in the process of being submitted anyway (because the user has pressed enter),
calling form.submit() would submit it again.

Conversely, if called from a link or an onclick, eg a submit graphic or 
button, returnFlag should be n: there's no need to return false to stop form 
submission, but form.submit() needs to be called, because otherwise the form
won't be submitted
*/
function postToInternationalOnline(form, returnFlag)
{
    if (form.country_id.options[form.country_id.selectedIndex].value=='Spacer')
    {
        alert("select a country to proceed.");
        if(returnFlag=='y') 
        {
            return false;
        }
    }
    else if (form.country_for_display.value=="116"
    		 && document.getElementById("rb_ss_reg_num_1").checked==true
    		 && form.postcode.options[form.postcode.selectedIndex].value=="") // if country is Italy and number radio button is selected, a province must also be selected
    {
        alert("number search must use a province.");
        if(returnFlag=='y') 
        {
            return false;
        }
    }
    else
    {
        var searchField = document.getElementById('intl_search_box');
        var reg_name = document.getElementById('rb_ss_reg_name_1');
        // reg_name may not be present if eg for Switzerland number searching
        // isn't supported, so there are no name/number radio buttons; in this
        // case name is the default
	    if(reg_name == null || reg_name.checked == true)
	    {
	        searchField.name = 'company_name';
	    } 
	    else
	    {
	        searchField.name = 'company_key';
	    }
        if(returnFlag != 'y') form.submit();
    }
}

/*
returnFlag should be y if called from a form's onsubmit attribute: then
false will be returned if the selection is invalid, aborting the submission; 
and if the selection is valid, then form.submit() isn't called - if the form is
in the process of being submitted anyway (because the user has pressed enter),
calling form.submit() would submit it again.

Conversely, if called from a link or an onclick, eg a submit graphic or 
button, returnFlag should be n: there's no need to return false to stop form 
submission, but form.submit() needs to be called, because otherwise the form
won't be submitted
*/
function postToOrderInternationalOffline(form, returnFlag)
{
    var companyName = form.entity_name.value;
    var companyKey = form.company_key.value;

    if (form.country_id.options[form.country_id.selectedIndex].value=='Spacer')
    {
        alert("select a valid country to proceed.");
        if(returnFlag=='y')
        {
            return false;
        }
    }
    else if (companyName.length == 0 && companyKey.length == 0)
    {
        alert("specify either the company name or number to proceed.");
        if(returnFlag=='y')
        {
            return false;
        }
    }
    else
    {
        //IOFO:key={0}:name={1}:type={2}:p_id={3,number,#}:country={4,number,#}
        var momento = "IOFO:key=" + companyKey + ":name=" + companyName + ":type=:p_id=" + form.product_id.value + ":country=" + form.country_id.value;
        form.MOMENTO_KEY.value = momento;
        
        // if the delivery method is by fax then request for fax number to be completed
	    if (form.deliveryMethodSelect.options[form.deliveryMethodSelect.selectedIndex].value=='DMO:name=Fax:p_id=31007:d_id=2')
	    {	    
	    	if (form.FaxAreaCode.value.length == 0 || form.FaxNumber.value.length == 0)
	    	{
	    		alert("specify the fax area code and fax number.");
	    		return;
	    	}
	    }
	    
	    // if delivery method is by post request user to fill in address and postcode
	    if (form.deliveryMethodSelect.options[form.deliveryMethodSelect.selectedIndex].value=='DMO:name=Post:p_id=31005:d_id=3')
	    {	
	    	if (form.Address1Field.length == 0 || form.AddressPostcode.length == 0 || form.AddressCountry.options[form.AddressCountry.selectedIndex].value.length == 0)
	    	{
	    		alert("specify address 1, postcode and country.");
	    		return;
	    	}
	    }
	    
	    if (form.EmailRecipients != null)
        {
            selectAllItems(form.EmailRecipients);
        }
        
        // if address is blank, set it to be the name of the country
        // (otherwise Popes complains when the order reaches it)
        if (form.search_address.length == 0) 
        	form.search_address.value = 
        		form.country_id.options[form.country_id.selectedIndex].value;
	    if (returnFlag != 'y') form.submit();
    }
    
}

function postForMonitoringRecipientsSave(form)
{
    if (form.EmailRecipients != null)
    {
        selectAllItems(form.EmailRecipients);
    }
    
    form.submit();
}

function postForImageFromList(momento, form, showProgressBar, panel, progressBarColor)
{
	var checkboxes = null;
	
	if (form.MOMENTO_KEY.length == null)
		checkboxes = new Array(form.MOMENTO_KEY);
	else
		checkboxes = form.MOMENTO_KEY;
	
    var index;
    for (index = 0; index < checkboxes.length; index++)
    {
        if (checkboxes[index].value == momento)
            checkboxes[index].checked = true;
        else
            checkboxes[index].checked = false;
    }
    //form.submit();
    postForMultipleImages(form, showProgressBar, panel, progressBarColor);
}

function postForMultipleImages(form, showProgressBar, panel, progressBarColor)
{
    var count = 0;
    var totalPages = 0;
    var index;
    var boxes = null;
    var pageCounts = null;

    if (form.MOMENTO_KEY.length == null)
        boxes = new Array(form.MOMENTO_KEY);
    else
        boxes = form.MOMENTO_KEY;

    if (form.pages.length == null)
        pageCounts = new Array(form.pages);
    else
        pageCounts = form.pages;

    if (formHasSelectedCheckBoxes(boxes))
    {
	    for (index = 0; index < boxes.length; index++)
	    {
	        if (boxes[index].checked == true)
	        {
	            count++;
	            var pages = parseInt(pageCounts[index].value);
	            if (!isNaN(pages))
	            {
	                totalPages += pages;
	            }
	        }
	    }

	    if (count > 100)
	    {
	         alert("you may only order 100 images at a time.");
	    }
	    else if (totalPages > 200)
	    {
	        var answer = confirm("you have selected over 200 pages. This will take some time to prepare and download. Click OK if you wish to continue or Cancel to refine you request.");
	        if (answer)
	        {
	        	if(showProgressBar)
	        	{
	        		showProgressBarPanel(panel, progressBarColor);
	        	}
	        	
	            form.submit();
	        }
	    }
	    else
	    {
	    	if(showProgressBar)
        	{
        		showProgressBarPanel(panel, progressBarColor);
        	}
	        form.submit();
	    }
    }
}

function postForMultipleDesktopReports(form)
{
    var count = 0;
    var index;
    var boxes = null;
    
      if (form == null)
    {
        alert("no company selected.");
        return;
    }
    

    if (form.MOMENTO_KEY.length == null)
        boxes = new Array(form.MOMENTO_KEY);
    else
        boxes = form.MOMENTO_KEY;

   

    if (formHasSelectedCheckBoxes(boxes))
    {
	    for (index = 0; index < boxes.length; index++)
	    {
	        if (boxes[index].checked == true)
	        {
	            count++;
	          
	        }
	    }

             form.action='/orderOrderable.do';
	        form.submit();
	    
    }
}

function postForFilingHist(number, form)
{
    form.action='/companyFilingHist.do';
    form.company_key.value=number;
    form.submit();
}
function postForCompanyProductList(number, name, countryId, userId, serviceId, action, form)
{
    form.action=action;
    form.company_key.value=number;
    form.entity_name.value=name;
    form.country_id.value=countryId;
    form.user_id.value=userId;
    form.service_id.value=serviceId;
    form.submit();
}
function postForCreateCustomPackage(form)
{
	// Check valid package name

	var packageName = document.getElementsByName('name');
	if (packageName[0].value == null || packageName[0].value == 'Undefined' || packageName[0].value == '') 
	{
		alert('specify a package name.');	
		return;
	}
	//convert any lower case values to uppper case.
	form.product_code.value = form.product_code.value.toUpperCase();
	var packageAcronym = document.getElementsByName('product_code');
	if (packageAcronym[0].value == null || packageAcronym[0].value == 'Undefined' || packageAcronym[0].value == '' || !packageAcronym[0].value.match(/^[A-Z][A-Z][A-Z]$/))
	{
		alert('specify a valid acronym: a three-letter code in upper case.');	
		return;
	}
	// Check that the positions of the package elements are valid.
	var positionElements = document.getElementsByName("position");
	var noOfEnabledElements = 0;
	
	for (i = 0; i < positionElements.length; i++)
	{
		if (positionElements[i].disabled == false)
		{
			noOfEnabledElements++;
			if (positionElements[i].options[positionElements[i].selectedIndex].value == -1)
			{
				alert('you need to specify a position for each included package element.');
				return;
			}
		}
	}
	if (noOfEnabledElements == 0)
	{
		alert('you need to include at least one element.');
		return;
	}
	var maxValue = noOfEnabledElements;
	for (i = 0; i < positionElements.length; i++)
	{
		if (positionElements[i].disabled == false && positionElements[i].options[positionElements[i].selectedIndex].value >= noOfEnabledElements)
		{
			alert('make sure that the positions of the elements have correct values. \nIf you include 4 package elements, the only allowed position values are 1, 2, 3 and 4.');
			return;
		}
		if (positionElements[i].disabled == false)
		{
			for (j = i + 1; j < positionElements.length; j++)
			{
				if (positionElements[j].disabled == false && positionElements[i].options[positionElements[i].selectedIndex].value == positionElements[j].options[positionElements[j].selectedIndex].value)
				{
					alert('one or more position values are the same. \nMake sure that no package elements have the same position.');
					return;
				}
			}
		}
	}
	
	// Set the favourite flag correctly.
	form.favourite.value = form.favouritePackage.checked;
	
    form.submit();
}
function postForOrderCustomPackage(form, showProgressBar, panel, progressBarColor)
{
	// Check that the positions of the package elements are valid.
	var positionElements = document.getElementsByName("position");
	var noOfEnabledElements = 0;
	
	for (i = 0; i < positionElements.length; i++)
	{
		if (positionElements[i].disabled == false)
		{
			noOfEnabledElements++;
			if (positionElements[i].options[positionElements[i].selectedIndex].value == -1)
			{
				alert('you need to specify a position for each included package element.');
				return;
			}
		}
	}
	if (noOfEnabledElements == 0)
	{
		alert('you need to include at least one element.');
		return;
	}
	var maxValue = noOfEnabledElements;
	for (i = 0; i < positionElements.length; i++)
	{
		if (positionElements[i].disabled == false && positionElements[i].options[positionElements[i].selectedIndex].value >= noOfEnabledElements)
		{
			alert('make sure that the positions of the elements have correct values. \nIf you include 4 package elements, the only allowed position values are 1, 2, 3 and 4.');
			return;
		}
		if (positionElements[i].disabled == false)
		{
			for (j = i + 1; j < positionElements.length; j++)
			{
				if (positionElements[j].disabled == false && positionElements[i].options[positionElements[i].selectedIndex].value == positionElements[j].options[positionElements[j].selectedIndex].value)
				{
					alert('one or more position values are the same. \nMake sure that no package elements have the same position.');
					return;
				}
			}
		}
	}
	var containedProductIds = document.getElementsByName("contained_products_id");
	var orderedProductIds = new Array();
	for (i = 0; i < containedProductIds.length; i++)
	{
		if (containedProductIds[i].checked)
		{
			var prodPos = positionElements[Math.ceil(i/2)].options[positionElements[Math.ceil(i/2)].selectedIndex].value;
			orderedProductIds[prodPos] = containedProductIds[i].value;
		}
	}
	var productString = '';
	for (i = 0; i < orderedProductIds.length; i++)
	{
		if (productString == '')
			productString = orderedProductIds[i];
		else
			productString += '.' + orderedProductIds[i]; 
	}
	form.MOMENTO_KEY.value = form.MOMENTO_PREFIX.value + 'cmps_product_ids=' + productString;
	
	if (showProgressBar)
	{
	    showProgressBarPanel(panel, progressBarColor);
	}
	
    form.submit();
}

//drag n drop company custom package
//another form
function postForOrderCustomPackageDragDrop(form, showProgressBar, panel, progressBarColor)
{

    var sections = document.getElementsByClassName('rowSubSec');
	var inputCheckboxes = document.getElementsByClassName('subSectionCheckbox');
	var checkedState = document.getElementsByClassName('inputCheckbox');
	var index = 0;
	var orderedProductIds = new Array();
	//pick up from DnD
		var index2 = 0;	
		var productIDs = '';
	inputCheckboxes.each(function(box) {	
	
	if(box.checked)		  {     
	
        if (productIDs == '')
			productIDs = box.value;
		else
			productIDs += '.' + box.value;

		
		}
     });

	form.MOMENTO_KEY.value = form.MOMENTO_PREFIX.value + 'cmps_product_ids=' + productIDs;			
		
    
    var anyChecked = false;
	inputCheckboxes.each(function(box) { anyChecked = anyChecked || box.checked; });
	if(!anyChecked)
	{
		alert("no product selected.");
		return;
	}
    
    
    
    if (showProgressBar)
	{
	    showProgressBarPanel(panel, progressBarColor);
	}
	
    form.submit();
}
//ends here

function selectCustomPackage(productId, form)
{
    var index;
    var found = 0;
    var coverPageFound = 0;
    var checked;
    var coverPageElement;
    var coverPagePositionElement;
    var documentCount = 0;
    for (index = 0; index < form.elements.length; index++)
    {
        if (form.elements[index].name == "contained_products_id" &&
            form.elements[index].value == coverPageProduct) // coverPageProduct defined in page
        {
            coverPageElement = form.elements[index];
            coverPageFound = 1;
        }
        if (form.elements[index].name == "position" && coverPageFound == 1)
        {
            coverPagePositionElement = form.elements[index];
            coverPageFound = 0;
        }
        // This depends on each element for the document products appearing immediately
        // before the element for the document product
        if ((index > 0) && (form.elements[index].name == "contained_products_id") &&
            (form.elements[index-1].name == "contained_products_id") &&
            (form.elements[index-1].checked == true))
        {
            documentCount++;  // count the document components checked
        }
        if (form.elements[index].name == "contained_products_id" &&
            form.elements[index].value == productId)
        {
       		found = 1;
       		checked = form.elements[index].checked;

        	// Only let one checkbox on each row be selected.
			if (checked)
			{
				if (index > 0 && form.elements[index-1].name == "contained_products_id")
					form.elements[index-1].checked = 0;
				else if (form.elements[index+1].name == "contained_products_id")
					form.elements[index+1].checked = 0;
			}
       	}
       	if (form.elements[index].name == "position" && found == 1)
        {
        	form.elements[index].disabled = !checked;
            found = 0;
//        	break;
       	}
    }
    // check the cover page checkbox if at least one analysed product also checked
    if (documentCount > 0)
    {
        coverPageElement.checked = 1;
        coverPagePositionElement.disabled = 0;
    }
}
function postForCompanyDetails(number, form)
{
    form.action='/companyDetails.do';
    form.company_key.value=number;
    form.submit();
}
function postForCompanyResults(from_index, form)
{
    form.perform_action_on_current_search.value=true;
    if (form.previous_index)
    {
    	form.previous_index.value = form.from_index.value;
	}
	if (form.clicked_button)
	{
		form.clicked_button.value = '';
	}
    form.from_index.value=from_index;
    form.submit();
}
function postForInternationalCompanyResults(from_index, direction, form)
{
    form.perform_action_on_current_search.value=true;
    if (form.previous_index)
    {
    	form.previous_index.value = form.from_index.value;
	}
	if (form.clicked_button)
	{
		form.clicked_button.value = '';
	}
    form.from_index.value=from_index;
    form.direction.value=direction;
    form.submit();
}
// General pagination function
function postToPageResults(from_index, form)
{
    if (form.previous_index)
    {
        form.previous_index.value = form.from_index.value;
    }
    form.from_index.value=from_index;
    form.submit();
}
//allows for the handling of special characters in the name
function postForShowOfflineInternational(number, name, address, country_id, action, form)
{
    form.action=action;
    form.country_id.value=country_id;
    form.company_key.value=number;
    form.company_name.value=name;
    form.search_address.value=address;
    form.submit();
}

function postToDisplayInternationalSearch(countryid, companyname)
{
	document.internationalSearch.country_id.value = countryid;
	document.internationalSearch.entity_name.value = companyname;
	document.internationalSearch.submit();
}

function postForCompanyIdentification(number_key, product_id, entity_name, guest_link, form)
{
    if (guest_link=='true')
    {
        form.action='/freeCompanyIdentification.do';
    }
    else
    {
        form.action='/companyIdentification.do';
    }
    form.company_key.value=number_key;
    form.product_id.value=product_id;
    form.entity_name.value=entity_name;
    form.submit();
}
//post to render mailbox item
function postForMailboxItem(number_key, entity_name)
{
    form.action='/internationalMailboxItem.do';
    
    form.company_key.value=number_key;
    form.entity_name.value=entity_name;
    form.submit();
}
function postForInternationalCompanyIdentification(number_key, product_id, country_for_display, province, entity_name, address, guest_link, form)
{
    if (guest_link=='true')
    {
        form.action='/freeCompanyIdentification.do';
    }
    else
    {
        form.action='/companyIdentification.do';
    }
    form.company_key.value=number_key;
    form.product_id.value=product_id;
    form.country_for_display.value=country_for_display;
    form.postcode.value=province; // yes, postcode is province for international identification searches
    form.entity_name.value=entity_name;
    form.address.value=address;
    form.submit();
}

function postForInternationalSingleProduct(companyKey, companyName, province, country_for_display, reportUri, prodId, momento, form)
{
    form.entity_name.value = companyName;
    form.company_key.value = companyKey;
    form.postcode.value=province; // yes, postcode is province for international identification searches
    form.country_for_display.value=country_for_display;
    form.product_id.value = prodId;
    form.reportUri.value = reportUri;
    form.MOMENTO_KEY.value = momento;
    form.submit();
}

function postForInternationalMailboxReportItem(userID, targetNumber, targetName, productId, countryForDisplay, form)
{
    form.user_id.value = userID;
    form.company_key.value = targetNumber; 
    form.company_name.value = targetName;
    form.product_id.value = productId;
    form.country_for_display.value = countryForDisplay;
    form.submit();
}

function postForOrderedProduct(product_type, order_id, orderline_id, action, action_input, form)
{
    form.action='/retrieveDeliverable.do';
    form.product_type.value=product_type;
    form.order_id.value=order_id;
    form.orderline_id.value=orderline_id;
    form.download_action.value = action;
    form.action_input.value=action_input;
    form.submit();
}
function postForEditPendingOrder(order_id, orderline_id, pagination_offset, sort_on, sort_order, form)
{
    //form.action='/editPendingOrder.do';
    form.order_id.value=order_id;
    form.orderline_id.value=orderline_id;
    form.pagination_offset.value=pagination_offset;
    form.sort_on.value=sort_on;
    form.sort_order.value=sort_order;
    form.submit();
}
function postToOrderReport(momento, form)
{
    form.action='/orderableController.do';
    form.MOMENTO_KEY.value=momento;
    form.submit();
}
function postForLastCompanySearch(form)
{
    form.action='/lastCompanySearch.do';
    form.submit();
}
function postToUpdateOrder(form, update_target, cancel_orderline_id)
{
	if (update_target=="update")
	{
		form.orderline_cancel.value = "";  
		form.submit();
	}
	else if (update_target=="cancel")
	{
		var response = confirm('this will cancel the item; do you wish to proceed?');
		if (response)
		{
			form.orderline_cancel.value = cancel_orderline_id;  
			form.submit();
		}
	}
}

function postForCompleteOrder(form, add_to_auto_catalogue_flag, add_to_auto_catalogue_pref)
{
	form.action = '/placeOrder.do';
	setAutoCatalogParam(form, add_to_auto_catalogue_flag, add_to_auto_catalogue_pref);
    form.submit();
}

function postForMultiListOrder(form, add_to_auto_catalogue_flag, add_to_auto_catalogue_pref)
{
	form.action='/placeMultiListOrder.do';
    setAutoCatalogParam(form, add_to_auto_catalogue_flag, add_to_auto_catalogue_pref);
    form.submit();
}

function setAutoCatalogParam(form, add_to_auto_catalogue_flag, add_to_auto_catalogue_pref)
{
    var x_autoCatalogueFlag = add_to_auto_catalogue_flag;
    if (add_to_auto_catalogue_pref=="prompt" && add_to_auto_catalogue_flag==false)
    {
        x_autoCatalogueFlag = confirm("add products to my store?")
    }
    form.add_to_auto_catalogue_flag.checked=x_autoCatalogueFlag;
    if (x_autoCatalogueFlag)
    {
        form.auto_catalogue_checked.value = 1;
    }
    else
    {
        form.auto_catalogue_checked.value = 0;
	    }    
	}
	
	function postForAddToMultiList(f)
	{
	    if (f == null)
	    {
	        alert("no items are available to be added.");
	        return;
	    }
	    if(formHasSelectedCheckBoxes(f.elements))
	    {
			f.clicked_button.value = 'multi-list';
			f.submit();
	    }
	}
	
	function postForAddToLedger(f)
	{
	    if (f == null)
	    {
	        alert("no items are available to be added.");
	        return;
	    }
	    if(formHasSelectedCheckBoxes(f.elements))
	    {
			f.clicked_button.value = 'ledger'+ '-search-results';
			f.submit();
	    }
	}
	
	function postForAddToLedgerFromCompanyId(f)
	{
	    if (f == null)
	    {
	        alert("no items are available to be added.");
	        return;
	    }
		f.submit();
	}
		
	function postForUpdateLedgerCreditLimitAndNotes(f)
	{
	    if (f == null)
	    {
	        alert("no items are selected.");
	        return;
	    }
	    if(formHasSelectedCheckBoxes(f.elements))
	    {
	    	f.clicked_button.value = 'update';
			f.submit();
	    }
	}
		
	function postToDeleteFromLedger(f)
	{
	    if (f == null)
	    {
	        alert("no items are selected.");
	        return;
	    }
	    if(formHasSelectedCheckBoxes(f.elements))
	    {
	    	f.clicked_button.value = 'delete';
			f.submit();
	    }
	}
			
	function postForReportOnLedgerSelected(f)
	{
	    if (f == null)
	    {
	        alert("no items are selected.");
	        return;
	    }
	    if(formHasSelectedCheckBoxes(f.elements))
	    {
	    	f.clicked_button.value = 'report_on_selected';
			f.submit();
	    }
	}
			
function postForInternationalMailbox(userID, countryDisplay, form)
{

    form.user_id.value = userID;
    form.country_for_display.value = countryDisplay;
   
		//form.action='/checkInternationalMailbox.do';
		form.submit();
    
}
function postForInternationalMailboxed(form)
{

   
		form.action='/checkInternationalMailbox.do';
		form.submit();
    
}
	
function postForMultipleReports(f)
{
  
    
    if (f == null)
    {
        alert("no items are available for multiple reports.");
        return;
    }

		f.action='/multipleReport.do';
		f.submit();
    
}
function postForAddToMultipleReportOrdering(f, progressBarColor)
{
    if (f == null)
    {
        alert("no items are available to be added.");
        return;
    }
    if(formHasAtLeastTwoCheckedBoxes(f.elements))
    {
		f.clicked_button.value = 'multiple';
		showProgressBarPanel(self, progressBarColor);
		f.submit();
    }
}

function postForAddToMonitoring(f)
{
    if (f == null)
    {
        alert("no items are available to be added.");
        return;
    }
    if(formHasSelectedCheckBoxes(f.elements))
    {
		f.clicked_button.value = 'monitoring';
		f.submit();
    }
}
function postToAddEntitiesToMonitoringGroup(entityCountRemaining, form)
{
    var entities = form.entity_key;
    var count = 0;
    var i;
    for (i = 0; i< entities.length; i++)
    {
        if (entities[i].checked)
        {
            ++count;
        }
    }
    var overSpend = (count - entityCountRemaining);
    if (overSpend > 0)
    {
        alert("monitoring entity limit exceeded: please deselect " + overSpend + " and try again")
    }
    else
    {
        form.submit();
    }
}
function toggleMonitoringGroupCombo(form, index)
{
    var combos = form.group_id;
    var entityNames = form.entity_name;
    var entityTypes = form.entity_type;
    var i;
    for (i = 0; i < combos.length; i++)
    {
        if (combos[i].id == index)
        {
            combos[i].disabled = !combos[i].disabled;
            entityNames[i].disabled = !entityNames[i].disabled;
            entityTypes[i].disabled = !entityTypes[i].disabled;
        }
    }
}
function postToMoveEntitiesToGroup(form)
{
    performActionOnSelectedMonitoringEntities(form, '/moveEntities.do');
}
function postToDeleteEntitiesFromGroup(form)
{
    performActionOnSelectedMonitoringEntities(form, '/deleteEntities.do');
}
function performActionOnSelectedMonitoringEntities(form, action)
{
    var x_checked = 0
    var x_monitoring_entity_id_array_length = form.monitoring_entity_id.length;
    
    if (x_monitoring_entity_id_array_length != null)
    {
        for (index = 0; index < x_monitoring_entity_id_array_length; index++)
        {
            if (form.monitoring_entity_id[index].checked)
            {
                x_checked = x_checked + 1;
            }
        }
    }
    else
    {
        if (form.monitoring_entity_id.checked)
        {
            x_checked = 1;
        }
    }
    if (x_checked > 0)
    {
        form.action = action;
        form.submit();
    }    
}
function postToPersistMonitoringGroup(form)
{
    for (index = 0; index < form.notification_category_active.length; index++)
    {
        var active = form.notification_category_active_cb[index].checked;
        form.notification_category_active[index].value = active;
    }
    form.submit();
}
function postToDisplayHistoricNotificationsForEntity(entity_name, form)
{
    form.action = '/displayNotifications.do';
    form.from_mon_entity_name.value = entity_name;
    form.submit();
}
function doSort(sortColumn, sortOrder, form)
{
    form.sort_on.value = sortColumn;
    form.sort_order.value = sortOrder;
    form.submit();
}
function postForReportAlert(number_key, product_id, entity_name, delivery_method, form)
{
    alert(number_key);
    alert(product_id);
    alert(entity_name);
    alert(delivery_method);
}
function postFormForDisplayPage(page_id)
{
    form.action='/displayPage.do';
    form.page_id=page_id;
}
function postForLogout(user, form)
{
    var answer = confirm("are you sure you want to leave?")
    if (answer)
    {
        form.user_id.value = user;
        form.action='/logout.do';
        form.submit();
    }
    else
    {
        alert("logout cancelled.")
    }
}
function postForProductDeliveryMethods(form)
{
    form.action='/viewProdDeliveryPrefs.do';
    form.submit();
}
function postForChangeChargeReference(form, reference)
{
    form.action='/orderReferenceEdit.do';
    form.order_reference_1.value=reference;
    form.submit();
}

/**
 * When an order is placed from the placement page, we need to make sure that
 * any supplementary information fields have been validated.
 */
function postToOrderFromPlacementPage(form, progressBarColor)
{
    if (validateSupplementaryInformation(form))
    {
        setAdditionalLineItemData(form, form.cover_page, "cover_page");
        setAdditionalLineItemData(form, form.company_report, "company_report");
        setAdditionalLineItemData(form, form.filing_history, "filing_history");
        selectAllItems(form.EmailRecipients);
        // call showProgressBarPanel here so that it won't interfere
        // if called elsewhere and validateSupplementaryInformation fails
        showProgressBarPanel(self, progressBarColor);
        form.submit();
    }
}

/**
 * Before an order is placed and the user creates a recipient on the fly, we
 * need to make sure that all recipient are selected so values are posted.
 */
function postToAddRecipientFromPlacementPage(form)
{    
    var MaxAllowedRecipients = form.max_num_of_recipients.value;
    var SelectedRecipients = form.EmailRecipients.length;
    if (SelectedRecipients >= MaxAllowedRecipients)
    {
        alert("you have already selected your maximum number of recipients.");
        return;
    }

    setAdditionalLineItemData(form, form.cover_page, "cover_page");
    setAdditionalLineItemData(form, form.company_report, "company_report");
    setAdditionalLineItemData(form, form.filing_history, "filing_history");
    
    selectAllItems(form.EmailRecipients);

    var x_autoCatalogueChecked = ((form.add_to_auto_catalogue_flag != null) && (form.add_to_auto_catalogue_flag.checked));
    if (x_autoCatalogueChecked)
    {
        form.auto_catalogue_checked.value = 1;
    }
    else
    {
        form.auto_catalogue_checked.value = 0;
    }
    
    form.recipient_id.value = '';
    form.recipient_action_type.value = 'order_placement_add';
    form.action = 'displayAddUpdateOrderRecipient.do';    
    form.submit();
}

/**
 * Before an order is placed and the user creates a recipient on the fly, we
 * need to make sure that all recipient are selected so values are posted.
 */
function postToAddRecipientFromNotificationsPage(form)
{    
    var MaxAllowedRecipients = form.max_num_of_recipients.value;
    var SelectedRecipients = form.EmailRecipients.length;
    if (SelectedRecipients >= MaxAllowedRecipients)
    {
        alert("you have already selected your maximum number of recipients.");
        return;
    }
    
    selectAllItems(form.EmailRecipients);

    var x_autoCatalogueChecked = ((form.add_to_auto_catalogue_flag != null) && (form.add_to_auto_catalogue_flag.checked));
    if (x_autoCatalogueChecked)
    {
        form.auto_catalogue_checked.value = 1;
    }
    else
    {
        form.auto_catalogue_checked.value = 0;
    }
    
    form.recipient_action_type.value = 'monitoring_notifications';
    form.action = 'displayAddUpdateOrderRecipient.do';
    form.recipient_id.value = '';
    form.submit();
}


function postToUpdateRecipientFromNotificationsPage(form, recipient)
{
    var recipientSelection = document.getElementById('AvailEmailRecs');
    
    if (recipientSelection.selectedIndex == -1)
    {
        alert('select an available recipient to update.');
        return;
    }
    
    form.recipient_action_type.value = 'monitoring_notifications';
    recipient.value = recipientSelection.options[recipientSelection.selectedIndex].value;   
    form.submit();
}

function postToUpdateRecipientFromPlacementPage(form, recipient)
{
	var recipientSelection = document.getElementById('AvailEmailRecs');
    
    if (recipientSelection.selectedIndex == -1)
    {
        alert('select an available recipient to update.');
        return;
    }
    
    form.recipient_action_type.value = 'order_placement_update';
    recipient.value = recipientSelection.options[recipientSelection.selectedIndex].value;   
    form.action = 'displayAddUpdateOrderRecipient.do';    
    form.submit();
}


/**
 * Before an order is placed and the user creates a recipient on the fly, we
 * need to make sure that all recipient are selected so values are posted.
 */
function postToAddRecipientFromInternationalPage(form)
{    
    var MaxAllowedRecipients = form.max_num_of_recipients.value;
    var SelectedRecipients = form.EmailRecipients.length;
    if (SelectedRecipients >= MaxAllowedRecipients)
    {
        alert("you have already selected your maximum number of recipients.");
        return;
    }
        
    form.recipient_id.value = '';
    form.recipient_action_type.value = 'order_international_add';
    form.action = 'displayAddUpdateInternationalOrderRecipient.do';   
    form.submit();
}

function postToUpdateRecipientFromInternationalPage(form, recipient)
{
    var recipientSelection = document.getElementById('AvailEmailRecs');
    
    if (recipientSelection.selectedIndex == -1)
    {
        alert('select an available recipient to update');
        return;
    }
    
    form.recipient_action_type.value = 'order_international_update';
    recipient.value = recipientSelection.options[recipientSelection.selectedIndex].value;   
    form.action = 'displayAddUpdateInternationalOrderRecipient.do'; 
    form.submit();
}

/**
 * Clears down all the components of the order placement page.
 */
function postToClearRecipientFrom(form)
{
    clearAllItems(form.EmailRecipients);
    form.reset();
}

/**
 * Clears down all the components of the order placement page and resets the focus correctly.
 */
function clearAndResetOrderPlacementPage(form)
{
    postToClearRecipientFrom(form);
    setRecipientsAndFieldFocus(1,7);
}


function postForRemoveFromMultiList(form)
{
    if (formHasSelectedCheckBoxes(form.elements))
    {
	    form.action='/removeCompanyFromMultiList.do';
	    form.submit();
    }
}
function postForShowMultiListLineItems(form)
{
    if (formHasSelectedCheckBoxes(form.elements))
    {
	    if(form.all_products.selectedIndex == 0 &&
	       form.fav_products.selectedIndex == 0)
	    {
	        alert("a favourite or product must be selected.");
	    }
	    else if(form.current_multilist_basket_size.value == form.allowed_multilist_basket_size.value)
	    {
	    	alert("your multilist basket is full: you cannot add any more items");
	    }
	    else if ( (parseInt(form.current_multilist_basket_size.value) + parseInt(getAddToBasketCount(form)) ) > parseInt(form.allowed_multilist_basket_size.value))
	    {
	    	alert("items cannot be added: your basket has a maximum of " + form.allowed_multilist_basket_size.value + " items");
	    }
	    else if (form.fav_products.selectedIndex > 0)
	    {
	        form.action='/showMultiListLineItems.do';
	        var index = form.fav_products.selectedIndex;
	        var value = form.fav_products.options[index].value;
	        form.product_detail.value = value;
	        form.submit();
	    }
	    else
	    {
	        form.action='/showMultiListLineItems.do';
	        var index = form.all_products.selectedIndex;
	        var value = form.all_products.options[index].value;
	        form.product_detail.value = value;
	        form.submit();
	    }
    }
}

function getAddToBasketCount(form)
{
	// count number of items with selected checkbox
	var toAdd = 0;
	for (i = 0; i < form.multilist_item.length; i++)
	{
		if (form.multilist_item[i].checked)
		{ 
			toAdd ++; 
		}
	}
	return toAdd;
}

function postForAddToMultiListBasket(form)
{
    //setup the relevant check boxes.
    setMultiListCheckBoxDetails(form);
    if (validateSupplementaryInformation(form))
    {
        form.action='/addToMultiListBasket.do';
        form.submit();
    }
}
function setMultiListCheckBoxDetails(form)
{
    setAdditionalLineItemData(form, form.cover_page, "cover_page_check");
    setAdditionalLineItemData(form, form.company_report, "company_report_check");
    setAdditionalLineItemData(form, form.filing_history, "filing_history_check");
    setAdditionalLineItemData(form, form.mortgage_details, "mortgage_details_check");
}
function setAdditionalLineItemData(form, formFields, fieldName)
{
    for (index = 0; index < form.elements.length; index++)
    {
        if (form.elements[index].name == fieldName)
        {
        	// This element may be a hidden dummy type to get around the problem of
        	// disabled elements submitting null values, so check first to see if
        	// this is indeed a checkbox
        	if (form.elements[index].type == 'checkbox')
        	{
	            checked = form.elements[index].checked;
	            id = form.elements[index].id;
	            
	            if(formFields.length != null)
	            {
	                formFields[id].value=checked;
	            }
	            else
	            {
	                formFields.value=checked;
	            }
	         }
        }
    }    
}
function postForUpdateMultiListBasket(form)
{
    //setup the relevant check boxes.
    setMultiListCheckBoxDetails(form);

    if (validateSupplementaryInformation(form))
    {
        form.action='/updateMultiListBasket.do';
        form.submit();
    }
}

function postForEditMultiListBasket(form)
{
    if (getSelectedCheckBoxCount(form.elements) != 1)
    {
        alert("you must select a basket item to edit.");
    }
    else
    {
	    form.action='/editMultiListBasket.do';
	    form.submit();
    }
}
function postForRemoveFromMultiListBasket(form)
{
    if (formHasSelectedCheckBoxes(form.elements))
    {
	    form.action='/removeFromMultiListBasket.do';
	    form.submit();
    }
}
function postForCreateMultiListOrder(form)
{
    form.action='/showMultiListOrderDetails.do';
    form.submit();
}
function postForMultiOrderLineDownload(download_action, forward_target, form)
{
    form.action='/multiOrderDownload.do';
	form.user_action.value=download_action;
	form.forward_target.value=forward_target;
	if (download_action == "clear_multi_download")
	{
	    var index;
	    
	   	// If there is only one checkbox on the page, clear it.
	   	// Iterate through the array of checkboxes clearing them.
	    if (forward_target == "pending")
	    {
	    	if (form.multi_orderstatus_download_item)
	    	{
		    	form.multi_orderstatus_download_item.checked = false;
			    for (index = 0; index < form.multi_orderstatus_download_item.length; index++)
			    {
		            form.multi_orderstatus_download_item[index].checked = false;
				}
			}
		}
	    else
	    {
	    	if (form.multi_orderhistory_download_item)
	    	{
		    	form.multi_orderhistory_download_item.checked = false;
			    for (index = 0; index < form.multi_orderhistory_download_item.length; index++)
			    {
		            form.multi_orderhistory_download_item[index].checked = false;
				}
			}
		}
	}
	form.submit();
}
function pageOrderSearchResults(from_index, user_action, form)
{
    if (form.previous_index)
    {
        form.previous_index.value = form.from_index.value;
    }
    form.from_index.value=from_index;
    
	form.user_action.value=user_action;
    form.submit();
}
function pageAllOrderSearchResults(from_index, form)
{
    if (form.previous_index)
    {
        form.previous_index.value = form.from_index.value;
    }
    form.from_index.value=from_index;
    form.submit();
}
function postToFilterOrderSearchResults(form)
{
	form.filter_defined.value='true';
	form.submit();
}
function postToRefreshSearchResults(sort_on, sort_order, form)
{
    form.sort_on.value=sort_on;
    form.sort_order.value=sort_order;
    form.user_action.value='status';
    form.submit();
}
function doSortOrders(user_action, column, order, form)
{
    var index;
	form.user_action.value=user_action;
    
    if (form.sort_on.length == null)
    {
        form.sort_on.value = column;
        form.sort_order.value = order;
    }
    else
    {
        for (index = 0; index < form.sort_on.length; index++)
        {
            if (form.sort_on.options[index].value == column)
            {
                form.sort_on.selectedIndex=index;
    		}
        }
        for (index = 0; index < form.sort_order.length; index++)
        {
            if (form.sort_order.options[index].value == order)
            {
                form.sort_order.selectedIndex=index;
    		}
        }
    }
	form.submit();
}
function doShowSingleOrderById(id, form)
{
    form.customer_id.value = "";
    form.customer_cd.value = "";
    form.date_DD.value = "";
    form.date_MM.value = "";
    form.date_YYYY.value = "";
    form.order_line_id.value = "";
    form.popes_order_id.value = "";
    form.popes_order_line_id.value = "";
    form.sort_on.value = "";
    form.sort_order.value = "";
    form.order_id.value = id;
    form.pagination_offset.value = "";
    form.submit();
}
function doShowOrdersForCustomer(id, form)
{
    form.customer_id.value = id;
    form.submit();
}
function postToDisplayRole(form, selectName)  // TODO: There are two of these - which is correct?
{
	var theSelect = document.getElementById(selectName);
    form.role_id.value = theSelect.options[theSelect.selectedIndex].value;
    form.action = "/displayRole.do";
    form.submit();
}
function postToAction(form, actionName)
{
	form.action = actionName;
	form.submit();
}
function postToCrudDeliveryNote(operation, form)
{
	form.operation.value=operation;
    form.submit();
}
function postToEditDeliveryNoteMessage(operation, id, form)
{
	form.operation.value=operation;
	form.delivery_note_id.value=id;
    form.submit();
}
function postToDisplayUnit(unit_id, form)
{
    form.unit_id.value=unit_id;
    form.submit();
}
function postToDisplayRole(role_id, form)   // TODO: There are two of these - which is correct?
{
    form.role_id.value=role_id;
    form.submit();
}
function postToDisplayUsers(customer_id, customer_name, unit_id, form)
{
    form.customer_id.value=customer_id;
    form.customer_name.value=customer_name;
    form.unit_id.value=unit_id;
    form.submit();
}                                              
function postForUserInput(unit_id, form)
{
    form.unit_id.value=unit_id;
    form.submit();
}
function postToDisplayPrivilege(privilege_id, form)
{
    form.privilege_id.value=privilege_id;
    form.submit();
}
function postToEditPreferenceDefault(preference_id, privilege_id, form)
{
    form.preference_id.value=preference_id;
    form.privilege_id.value=privilege_id;
    form.submit();
}
function postForEditRecipient(recipient_id, form)
{
    form.recipient_id.value=recipient_id;
    form.submit();
}
function selectPrimaryRecipient(form)
{
	form.primary_recipient.value = form.set_default.checked;
}
function postToSimulatePopesLoop(order_id, is_custom, form)
{
    form.order_id.value = order_id;
    form.is_custom.value = is_custom;
    form.submit();
}

function postForDeleteRecipients(form)
{
    form.action='/deleteRecipients.do';
    form.submit();
}

function postForUpdatePrimaryRecipient(recipient_id, form)
{
    form.action='/setPrimaryRecipient.do';
    form.recipient_id.value = recipient_id;
    form.submit();
}

function postForPasswordAssistant(form)
{	
	form.method="POST"
    form.action='http://www.myicc.co.uk/passwordAssistant.do';
    form.submit();
}
function postToMoveFavourite(form, favourite_id, move_action)
{
	form.action = '/moveFavourite.do';
	form.favourite_id.value = favourite_id;
	form.move_action.value = move_action;
	form.submit();
}
function postForDeleteUsers(form, forward)
{
	// first ask the user to confirm
	if (confirm("are you sure you wish to delete the selected users?"))
	{
	    if(formHasSelectedCheckBoxes(form.elements))
	    {
		    form.action = "/deleteUser.do";
		    form.forward_action.value = forward;
		    form.submit();
	    }
	}
}
function postForPurgePreferenceCache(form, forward)
{
    if(formHasSelectedCheckBoxes(form.elements))
    {
	    form.action = "/purgePreferences.do";
        form.forward_action.value = forward;
	    form.submit();
    }
}
function postForAssignUserToUnit(form, user, unit)
{
    form.user_id.value = user;
    form.unit_id.value = unit;
    form.submit();
}
function postForConsumerSearch(form)
{
    form.postcode.value = form.postcode.value.toUpperCase();
    form.submit();
}
function postForConsumerPicklist(form, index)
{
	form.picklist_index.value = index;
	form.submit();
}
function postForDeleteAvailableRecipient(form, recipients, primaryRecipientId)
{
    var theSelect = document.getElementById('AvailEmailRecs');
    
    if (theSelect.selectedIndex == -1)
    {
        alert('select an available recipient to delete.');
        return;
    }
    var selectedId = theSelect.options[theSelect.selectedIndex].value;
    
    if (primaryRecipientId == selectedId)
    {
        alert('you cannot delete your primary recipient.');
        return;        
    }
    
    recipients.value = theSelect.options[theSelect.selectedIndex].value;    
    form.submit();
}

function postForNextFilingHistoryPage(form)
{
    form.submit();
}

function keyfilingsMultipleReport(day,month,year,companeyKey,companyName,countryId)
{
   	 var form = document.getElementById('imageSearchForm');
	 form.target_date_DD.value=day;
	 form.target_date_MM.value=month;
	 form.target_date_YYYY.value=year;
	 form.company_key.value=companeyKey;
	 form.entity_name.value=companyName;
	 form.country_id.value=countryId;
	 form.submit()
}

function doAddToLedger(form)
{
	var cl = document.getElementsByClassName('credit_limit');
	for(var i=0; i<cl.length ; i++)
	{
		var temp = "" + cl[i].value;
		if (temp != "") {	
			temp = removeChars(temp);
			cl[i].value = parseInt(temp);		
			}
	}
	checkCreditLimit(form);
}

//removes and non ints form a field
function removeChars(entry) {
	temp = "" + entry; // ensures enrty is a string
	out = "";
	for(var i=0; i<entry.length ; i++) {
		pos= temp.charAt(i);
		var con = parseInt(pos);
		if (isNaN(con)) {}
		else {	out = out + con;
		}
	}

return out;
}



function doUpdateCreditLedger(form)
{
	var cl = document.getElementsByClassName('credit_limit');
	for(var i=0; i<cl.length ; i++)
	{
		var temp = "" + cl[i].value;
		if (temp != "") {	
			temp = removeChars(temp);
			cl[i].value = parseInt(temp);		
			}
	}
	checkCreditLimit(form);
}

function checkCreditLimit(form)
{
	if (checkIntegers(form, 'credit_limit[]')) {
		form.submit();
	} else {
		alert('all credit limits must be integers, or left blank.');
	}
}

function addToLedger(form, position) 
{
	selectOrDeselectAll(form, false);
	clearElementToDefault(form, "selected" + position, "checked");
	postForAddToLedger(form);
}


function checkListOfNumbersForm(form)
{
	if (form.preserve_list_of_numbers_order.value == 'true')
	{
		var companyKeys = form.company_keys.value;
			
		// split company keys into array to get number of company keys entered
		var companyKeysArray=new Array();
		// Identify key entries as an alpha-numeric words
		companyKeysArray=companyKeys.split(/[\w]+/);
		
		if(companyKeysArray.length - 1 == 0)
		{
			alert('You must enter at least one number to search on!');
   			return;    
   		}
		else if(companyKeysArray.length - 1 > form.max_results_per_page.value)
		{
			alert('You can only enter a maximum of ' + form.max_results_per_page.value + ' numbers!');
   			return;    
   		}
	}
	form.submit();
}

function postToStakeholderSearch(form)
{
    // Min jurisdiction check currently disabled
//	if(form.include_uk.checked == true || form.include_republic_of_ireland.checked == true)
//	{
//    	form.submit();
//    }
//    else
//    {
//    	alert('at least one jurisdiction must be selected.');
//    	return;
//    }

    form.submit();
}


