﻿var sortitems = 0;
 
function move(fbox, fmbox, tbox, tmbox, All) 
{
	for(var i = fbox.options.length - 1; i >= 0; i--)
	{
		if((fbox.options[i].selected || All) && fbox.options[i].value != "") 
		{
            // Add to To-Box
			var no = new Option();
			no.value = fbox.options[i].value;
			no.text = fbox.options[i].text;

            var no2 = new Option();
			no2.value = fbox.options[i].value;
			no2.text = fbox.options[i].text;
			try
			{
			    
                tbox.add(no, null); // standards compliant; doesn't work in IE
                tmbox.add(no2, null);
            }
            catch(ex)
            {
                tbox.add(no); // IE only
                tmbox.add(no2);
            }
			
			// Remove from from-box
			for(var j = 0; j < fmbox.options.length; j++)
			{
			    if(fmbox.options[j].value == fbox.options[i].value)
			    {
			        fmbox.remove(j);
			        break;
			    }
			}
			
			fbox.remove(i);
			
		}
	}
    SortD(tbox);
}

function Multiple_Add(fbox, fmbox, tbox, tmbox, All) 
{
	for(var i = fbox.options.length - 1; i >= 0; i--)
	{
		if((fbox.options[i].selected || All) && fbox.options[i].value != "") 
		{
            // Add to To-Box
			var no = new Option();
			no.value = fbox.options[i].value;
			no.text = fbox.options[i].text;

            var no2 = new Option();
			no2.value = fbox.options[i].value;
			no2.text = fbox.options[i].text;
			try
			{
			    
                tbox.add(no, null); // standards compliant; doesn't work in IE
                tmbox.add(no2, null);
            }
            catch(ex)
            {
                tbox.add(no); // IE only
                tmbox.add(no2);
            }
		}
	}
    SortD(tbox);
}

function Multiple_Remove(fbox, fmbox, tbox, tmbox, All) 
{
	for(var i = fbox.options.length - 1; i >= 0; i--)
	{
		if((fbox.options[i].selected || All) && fbox.options[i].value != "") 
		{
			// Remove from from-box
			for(var j = 0; j < fmbox.options.length; j++)
			{
			    if(fmbox.options[j].value == fbox.options[i].value)
			    {
			        fmbox.remove(j);
			        break;
			    }
			}
			
			fbox.remove(i);
		}
	}
    SortD(tbox);
}


function SortD(id) {
    var lb=id;
    var oldValue;
    if(id.selectedIndex > -1)
        oldValue = id[id.selectedIndex].value;

    arrTexts = new Array();

    for(i=0; i<lb.length; i++) {
        arrTexts[i] = lb.options[i].text+':|:'+lb.options[i].value;
    }
    arrTexts.sort();
    for(i=0; i<lb.length; i++) {
        el = arrTexts[i].split(':|:');
        lb.options[i].text = el[0];
        lb.options[i].value = el[1];

        if(oldValue == lb.options[i].value)
            lb.options[i].selected = true;
        else
            lb.options[i].selected = false;
    }
} 

// ***************************  SWAP MODE ******************************* //
	
function SwapSelected_Remove(strAssignedList, strAssignedMasterList, strUnassignedList, strUnassignedMasterList, strIDList)
{
    var UnassignedList = document.getElementById(strUnassignedList);
    var AssignedList = document.getElementById(strAssignedList);
    var UnassignedMasterList = document.getElementById(strUnassignedMasterList);
    var AssignedMasterList = document.getElementById(strAssignedMasterList);
    
    var IDList = document.getElementById(strIDList);
	// remove all selected items from lhs and add to rhs
	blnUpdateRequired = true;
	move(AssignedList, AssignedMasterList, UnassignedList, UnassignedMasterList, false);
	//move(AssignedList, AssignedMasterList, UnassignedList, UnassignedMasterList, false);
	buildReturnValue(AssignedList, IDList);
}

function SwapSelected_Add(strAssignedList, strAssignedMasterList, strUnassignedList, strUnassignedMasterList, strIDList)
{
    var UnassignedList = document.getElementById(strUnassignedList);
    var AssignedList = document.getElementById(strAssignedList);
    var UnassignedMasterList = document.getElementById(strUnassignedMasterList);
    var AssignedMasterList = document.getElementById(strAssignedMasterList);
    var IDList = document.getElementById(strIDList);
	// remove all selected items from rhs and add to lhs
	blnUpdateRequired = true;
	move(UnassignedList, UnassignedMasterList, AssignedList, AssignedMasterList, false);
	//move(UnassignedList, UnassignedMasterList, AssignedList, AssignedMasterList, false);
	buildReturnValue(AssignedList, IDList);
}

function SwapAll_Add(strAssignedList, strAssignedMasterList, strUnassignedList, strUnassignedMasterList, strIDList)
{
    var UnassignedList = document.getElementById(strUnassignedList);
    var AssignedList = document.getElementById(strAssignedList);
    var UnassignedMasterList = document.getElementById(strUnassignedMasterList);
    var AssignedMasterList = document.getElementById(strAssignedMasterList);
    var IDList = document.getElementById(strIDList);
	// remove all selected items from rhs and add to lhs
	blnUpdateRequired = true;
	move(UnassignedList, UnassignedMasterList, AssignedList, AssignedMasterList, true);
	//move(UnassignedList, UnassignedMasterList, AssignedList, AssignedMasterList, true);
	buildReturnValue(AssignedList, IDList);
}

function SwapAll_Remove(strAssignedList, strAssignedMasterList, strUnassignedList, strUnassignedMasterList, strIDList)
{
    var UnassignedList = document.getElementById(strUnassignedList);
    var AssignedList = document.getElementById(strAssignedList);
    var UnassignedMasterList = document.getElementById(strUnassignedMasterList);
    var AssignedMasterList = document.getElementById(strAssignedMasterList);
    
    var IDList = document.getElementById(strIDList);
	// remove all selected items from lhs and add to rhs
	blnUpdateRequired = true;
	move(AssignedList, AssignedMasterList, UnassignedList, UnassignedMasterList, true);
	//move(AssignedList, AssignedMasterList, UnassignedList, UnassignedMasterList, true);
	buildReturnValue(AssignedList, IDList);
}
	
	
	
// ***************************  MULTIPLE MODE ******************************* //
	
function MultipleSelected_Remove(strAssignedList, strAssignedMasterList, strUnassignedList, strUnassignedMasterList, strIDList)
{
    var UnassignedList = document.getElementById(strUnassignedList);
    var AssignedList = document.getElementById(strAssignedList);
    var UnassignedMasterList = document.getElementById(strUnassignedMasterList);
    var AssignedMasterList = document.getElementById(strAssignedMasterList);
    
    var IDList = document.getElementById(strIDList);
	blnUpdateRequired = true;
	
	Multiple_Remove(AssignedList, AssignedMasterList, UnassignedList, UnassignedMasterList, false);
	//Multiple_Remove(AssignedList, AssignedMasterList, UnassignedList, UnassignedMasterList, false);
	
	buildReturnValue(AssignedList, IDList);
}

function MultipleSelected_Add(strAssignedList, strAssignedMasterList, strUnassignedList, strUnassignedMasterList, strIDList)
{
    var UnassignedList = document.getElementById(strUnassignedList);
    var AssignedList = document.getElementById(strAssignedList);
    var UnassignedMasterList = document.getElementById(strUnassignedMasterList);
    var AssignedMasterList = document.getElementById(strAssignedMasterList);
    var IDList = document.getElementById(strIDList);

	blnUpdateRequired = true;
	
	Multiple_Add(UnassignedList, UnassignedMasterList, AssignedList, AssignedMasterList, false);
	//Multiple_Add(UnassignedList, UnassignedMasterList, AssignedList, AssignedMasterList, false);
	
	buildReturnValue(AssignedList, IDList);
}

function MultipleAll_Add(strAssignedList, strAssignedMasterList, strUnassignedList, strUnassignedMasterList, strIDList)
{
    var UnassignedList = document.getElementById(strUnassignedList);
    var AssignedList = document.getElementById(strAssignedList);
    var UnassignedMasterList = document.getElementById(strUnassignedMasterList);
    var AssignedMasterList = document.getElementById(strAssignedMasterList);
    var IDList = document.getElementById(strIDList);
	// remove all selected items from rhs and add to lhs
	blnUpdateRequired = true;
	Multiple_Add(UnassignedList, UnassignedMasterList, AssignedList, AssignedMasterList, true);
	//Multiple_Add(UnassignedList, UnassignedMasterList, AssignedList, AssignedMasterList, true);
	buildReturnValue(AssignedList, IDList);
}

function MultipleAll_Remove(strAssignedList, strAssignedMasterList, strUnassignedList, strUnassignedMasterList, strIDList)
{
    var UnassignedList = document.getElementById(strUnassignedList);
    var AssignedList = document.getElementById(strAssignedList);
    var UnassignedMasterList = document.getElementById(strUnassignedMasterList);
    var AssignedMasterList = document.getElementById(strAssignedMasterList);
    
    var IDList = document.getElementById(strIDList);
	// remove all selected items from lhs and add to rhs
	blnUpdateRequired = true;
	Multiple_Remove(AssignedList, AssignedMasterList, UnassignedList, UnassignedMasterList, true);
	//Multiple_Remove(AssignedList, AssignedMasterList, UnassignedList, UnassignedMasterList, true);
	buildReturnValue(AssignedList, IDList);
}
	
function buildReturnValue(AssignedList, IDList)
{
	//set hidden field value to csv of id's
	IDList.value = "";
		
	for(var i=0; i<AssignedList.options.length; i++)
		IDList.value += AssignedList.options[i].value + ","
	
	IDList.value = IDList.value.substring(0,(IDList.value.length-1));
}

function Filter(MasterListId, FilteredListId, Filter)
{
    var MasterList = document.getElementById(MasterListId);
    var FilteredList = document.getElementById(FilteredListId);
    
    FilteredList.options.length = 0;
    
    for(var i = 0; i < MasterList.options.length; i++)
    {
        if(MasterList.options[i].text.toLowerCase().indexOf(Filter.toLowerCase()) > -1)
        {
            var no = new Option();
            no.text = MasterList.options[i].text;
            no.value = MasterList.options[i].value;
            FilteredList.options[FilteredList.options.length] = no;
        }
    }
}
