function toggleLists(action){
	var nonLinkedTickers = document.bannerDetails.notIncludedItems;
	var linkedTickers = document.bannerDetails.includedItems;
	var notLinkedTickersToAddArray = new Array();
	var currentItem, addToFirst, newOption;
	
	//create the linked notIncludedItems list based on whether the action selected is 'add' or 'remove'
	if(action == 'add'){
		//add the notIncludedItems already selcted to this array
		for(var i=0;i<linkedTickers.options.length;i++){
			notLinkedTickersToAddArray[notLinkedTickersToAddArray.length] = linkedTickers.options[i].value;
		}
		
		//put all the notIncludedItems to add in an array
		for(var i=0;i<nonLinkedTickers.options.length;i++){
			if(nonLinkedTickers.options[i].selected){
				notLinkedTickersToAddArray[notLinkedTickersToAddArray.length] = nonLinkedTickers.options[i].value;
			}
		}
	}else{
		//put all the items to keep in an array
		for(var i=0;i<linkedTickers.length;i++){
			if(!linkedTickers.options[i].selected){
				notLinkedTickersToAddArray[notLinkedTickersToAddArray.length] = linkedTickers.options[i].value;
			}
		}
	}
	
	linkedTickers.options.length = 0;
	var header;
	//regenerate the selected list
	for(var j=0;j<notLinkedTickersToAddArray.length;j++){
		currentTicker = notLinkedTickersToAddArray[j];
		for(var k=0;k<allTickerArray.length-1;k++){
			//if the current item is in the to add list... add them
			if(currentTicker == allTickerArray[k][0]){
				if(allTickerArray[k][1] == 1) header = allTickerArray[k][2] + " - [Internal]";
				else header = allTickerArray[k][2] + " - [External]";
				
				linkedTickers.options[linkedTickers.options.length] = new Option(header,allTickerArray[k][0]);
			}
		}
	}

	//now we need to generate the first select statement including optgroups
	nonLinkedTickers.options.length = 0;
	//create the similar notIncludedItems group
	var internalBanner = document.getElementById('internalBanner');
	
	//-------------------------------------------------------------------------------------------------
	//The Syntax is different here for IE and other browsers so we need to run a browser check
	//--------------------------------------------------------------------------------------------------

	for(var l=0;l<=internalTickerArray.length-1;l++){
		currentTicker = internalTickerArray[l][0];
		addToFirst = true;
		//if the current contact has not been selected we need to put them in the first list
		for(var m=0;m<notLinkedTickersToAddArray.length;m++){
			if(currentTicker == notLinkedTickersToAddArray[m]){
				addToFirst = false;
			}
		}
		
		//javascript seems to add an undefined value to the end of the list so we must account for this in our logic
		if(addToFirst && (internalTickerArray[l][1] == 1)){
			if(browser == 'Internet Explorer'){
				newOption = document.createElement('option');
				newOption.value = internalTickerArray[l][0];
				newOption.innerText = internalTickerArray[l][2];
				internalBanner.appendChild(newOption);
			}else{
				newOption = new Option(internalTickerArray[l][2],internalTickerArray[l][0]);
				internalBanner.appendChild(newOption);
			}
		}
	}

	//create the non-similar notIncludedItems group
	var externalBanner = document.getElementById('externalBanner');
	for(var l=0;l<=externalTickerArray.length-1;l++){
		currentTicker = externalTickerArray[l][0];
		addToFirst = true;
		//if the current contact has not been selected we need to put them in the first list
		for(var m=0;m<notLinkedTickersToAddArray.length;m++){
			if(currentTicker == notLinkedTickersToAddArray[m]){
				addToFirst = false;
			}
		}
		
		if(addToFirst && (externalTickerArray[l][1] == 0)){
			if(browser == 'Internet Explorer'){
				newOption = document.createElement('option');
				newOption.value = externalTickerArray[l][0];
				newOption.innerText = externalTickerArray[l][2];
				externalBanner.appendChild(newOption);
			}else{
				newOption = new Option(externalTickerArray[l][2],externalTickerArray[l][0]);
				externalBanner.appendChild(newOption);
			}

		}
	}
}//-->

function move(direction){
	var fieldList = document.bannerDetails.includedItems;
	//get all the tickers in the list
	var tickerArray = new Array();
	for(var i=0;i<fieldList.options.length;i++){
		tickerArray[tickerArray.length] = fieldList.options[i].value;
	}
	var fieldsArray = new Array();
	//now create the field array based on these tickers
	for(var i=0;i<tickerArray.length;i++){
		for(var j=0;j<allTickerArray.length-1;j++){
			if(tickerArray[i] == allTickerArray[j][0]){
				if(allTickerArray[j][1] == 1) header = allTickerArray[j][2]+" - [Internal]";
				else header = allTickerArray[j][2]+" - [External]";
				fieldsArray[fieldsArray.length] = [allTickerArray[j][2],allTickerArray[j][0],header];
			}
		}
	}
	//add the extra field to replicate a serverside dynamic array
	fieldsArray[fieldsArray.length] = [];
	
	if(field = fieldList.value){
		var newOrder = new Array();
		var fieldForm;
		
		switch(direction){
				case 'up':	//if the item is already the first one in the list we don't want to do anything
							if(field == fieldsArray[0][1]){
								newOrder = fieldsArray;
							}else{
								//loop through the fields and create the new order for the fields array
								for(var i=0;i<fieldsArray.length-1;i++){
									newOrder.push(fieldsArray[i]);
									//if the next item is the one selected pop it back off and insert it before the current
									if(field == fieldsArray[i+1][1]){
										newOrder.pop();
										fieldForm = [fieldsArray[i+1][0],fieldsArray[i+1][1],fieldsArray[i+1][2]];
										newOrder.push(fieldForm);
										newOrder.push(fieldsArray[i]);
									}else if(field == fieldsArray[i][1]){
										//we don't need to display this at this level as its been moved up
										newOrder.pop();
									}
								}
								
								//add the extra empty array to the end of the new order to replicate the original list
								newOrder[newOrder.length] = [];
							}
							break;
			
			case 'down':	//if the item is already the last one in the list do nothing
							if(field == fieldsArray[fieldsArray.length-2][1]){
								newOrder = fieldsArray;
							}else{
								var fieldInMemory = false;
								var insertFlag = false;
								var fieldValue;
								//loop through the fields and create the new order for the fields array
								for(var i=0;i<fieldsArray.length-1;i++){
									newOrder.push(fieldsArray[i]);
									//if the current item is the selected one delete. We need to insert it after the next loop
									if(field == fieldsArray[i][1]){
										newOrder.pop();
										fieldValue = [fieldsArray[i][0],fieldsArray[i][1],fieldsArray[i][2]];
										fieldInMemory = true;
									}
									
									//if the fields in memory insert it after the second loop record
									if(fieldInMemory && !insertFlag){
										insertFlag = true;	
									}else if(fieldInMemory && insertFlag){
										newOrder.push(fieldValue);
										fieldInMemory = false;
										insertFlag = false;
									}
								}
								
								//add the extra empty array to the end of the new order to replicate the original list
								newOrder[newOrder.length] = [];
							}
							break;
							
			default:		newOrder = fieldsArray;
							break;
		}
		
		//once the new order has been created allocate the new list
		fieldsArray = newOrder;
		fillFields(field, fieldsArray);
	}
}//-->

function fillFields(selectedField, fieldsArray){
	var fields = fieldsArray;
	var fieldItems = document.getElementById('includedItems');
	
	fieldItems.length = 0;
	
	for(var i=0;i<fields.length-1;i++){
		fieldItems.options[fieldItems.length] = new Option(fields[i][2],fields[i][1]);
		if(fields[i][1] == selectedField){
			fieldItems.options[fieldItems.length-1].selected = true;
		}
	}
}//-->

function processForm(){
	var orderedList = document.getElementById('includedItems');
	//select the entire second list
	for(var i=0;i<orderedList.options.length;i++){
		orderedList.options[i].selected = true;
	}
	
	document.bannerDetails.submit();
}//-->
