/*

  Change Log
 	  Created 12/19/2008 Nathan Townsend

*/

TransferListHelper = new function()
{

  return{
	
	  MoveSelectedLeft: function(button)
		{
		  try{
			
		    var list = GetLists(button);
  			TransferSelected(list.Right, list.Left, false);

			}catch(err){Log.Add("TransferListHelper.MoveSelectedLeft", err, LogType.Error)}				
		},
		
		MoveSelectedRight: function(button)
		{
		  try{
  		  var list = GetLists(button);
	  		TransferSelected(list.Left, list.Right, false);
				
			}catch(err){Log.Add("TransferListHelper.MoveSelectedRight", err, LogType.Error)}							
			
		},
		
	  MoveAllLeft: function(button)
		{
		  try{
  		  var list = GetLists(button);
	  		TransferSelected(list.Right, list.Left, true);
  		}catch(err){Log.Add("TransferListHelper.MoveAllLeft", err, LogType.Error)}				
			
		
		},
		
		MoveAllRight: function(button)
		{
		  try{
  		  var list = GetLists(button);
	  		TransferSelected(list.Left, list.Right, true);
			}catch(err){Log.Add("TransferListHelper.MoveAllRight", err, LogType.Error)}						
		},
		
		Serialize: function(HTML)
		{
		  try{
			  var ret = "";
			
    		$(HTML).find(".component").each(function(){  // find all the transfer lists in the HTML
				
				  if($(this).attr("TransferList") != null)
				  {
      		  $(this).find("select").each(function(){							 // find the selects in the transfer lists
      			
              var name = $(this).attr("name");
              
              ret += "&" + name + "_count=" + $(this)[0].options.length;
      					
      				for(var i = 0; i< $(this)[0].options.length; i++)
    					{
    					  var opt = $(this)[0].options[i];
  
    					  ret += "&" + name + "_" + i + "=" + $(opt).attr("value");
    					}
  						
      			});
					}
					
    		});
				
				return ret;
						  
		  }catch(err){Log.Add("TransferListHelper.Serialize", err, LogType.Error)}
		
	  }
	
	}// end return block
	
	function GetLists(button)
	{
	  try{
  	  var p = $(button).parents(".StaticContainer");
		
	  	var l = $(p).find("select")[0];
		
  	  var r = $(p).find("select")[1];
		
		  return new List($(l), $(r));

		}catch(err){Log.Add("TransferListHelper.GetLists", err, LogType.Error)}			
	}
	
	function List(left, right)
	{
	  this.Left = left;
		this.Right = right;
	}
	
	function TransferSelected(from, to, all)
	{
	  try{
      var toMove = new Array();
  
  	  for(var i = 0; i < from[0].options.length; i++)
  		{
  		  var opt = from[0].options[i];
  
  		  if(opt.selected || all)
  			  toMove.push(opt);
  		}
  		
  		for(var i = 0; i<toMove.length; i++)
  		{
  		  var opt = toMove[i];
  			
  		  $(opt).remove().appendTo(to);
  			
  			$(opt).removeAttr("selected");
  		}
  		
  		Utilities.SortSelect(from);
  
  		Utilities.SortSelect(to);

		}catch(err){Log.Add("TransferListHelper.TransferSelected", err, LogType.Error)}		
	}
	
	

}









// TransferList 12/19/2008
function TransferList(){
  try{
	
	featuresAdded = false;

  /* composite components */
	var control = $("<div note='this is just a reference element used by storage, not shown on form anywhere' ref='TransferList' />");
	var _container = null;
  var _list1 = null;
	var _list2 = null;
	var _selLeft = null;
	var _selRight = null;
	var _allLeft = null;
	var _allRight = null;
  


  /* PUBLIC METHODS */
  return {
	
    // Appends the control to a container element
    AppendTo: function(ContainerElement)
    {
      try{
					_container.AppendTo(ContainerElement);
					
					_container.SetHeight("270");
					
					_container.GetControl().attr("transferlist", "");
					
					/* dropdown boxes */
					
          _list1.AppendTo(_container.GetControl());
					
          _list2.AppendTo(_container.GetControl());					

					var elems = [_list1, _list2];
					
					for(var i =0; i<elems.length; i++)
					{
					 
  					elems[i].SetLeft("0");
					
	  				elems[i].SetTop("5px");
					
		  			elems[i].SetWidth("336");
					
			  		elems[i].SetMultiSelect(true);
					
				  	elems[i].SetSize("12");
					
					  elems[i].SetCaption("List " + (i + 1));
					}	

					_list2.SetLeft("514");
				
					
					/* buttons */
					
					_selRight.AppendTo(_container.GetControl());
					
  			  _selRight.SetLeft("358");
					
					_selRight.SetTop("15");
					
					_selRight.SetWidth("126");
					
					_selRight.SetCaption("Move Selected -->");
					
					var obj = new Object();
					obj.Name = "click";
					
					obj.Body = "TransferListHelper.MoveSelectedRight(this)";
					_selRight.SetFunctions([obj]);		

					
					
					
					_selLeft.AppendTo(_container.GetControl());													

  			  _selLeft.SetLeft("358");
					
					_selLeft.SetTop("43");
					
					_selLeft.SetWidth("126");
					
					_selLeft.SetCaption("<-- Move Selected");
					
					obj.Body = "TransferListHelper.MoveSelectedLeft(this)";
					_selLeft.SetFunctions([obj]);		

					
					

					_allLeft.AppendTo(_container.GetControl());
					
  			  _allLeft.SetLeft("358");
					
					_allLeft.SetTop("81");
					
					_allLeft.SetWidth("126");
					
					_allLeft.SetCaption("<-- Move All");
					
					obj.Body = "TransferListHelper.MoveAllLeft(this)";
					_allLeft.SetFunctions([obj]);		



					_allRight.AppendTo(_container.GetControl());

  			  _allRight.SetLeft("358");
					
					_allRight.SetTop("109");
					
					_allRight.SetWidth("126");
					
					_allRight.SetCaption("Move All -->");
					
					obj.Body = "TransferListHelper.MoveAllRight(this)";
					_allRight.SetFunctions([obj]);		
					

					

					
          if(Editor.IsEnabled())      
            this.EditMode();
						
      } catch(err){ Log.Add("TransferList.AppendTo", err, LogType.Error); }
    },
    
    Create: function()
    {
      try{
			
			    var ctrlName = Utilities.PromptForName(true);
			
					_container = Helper.CreateEditorComponent("StaticContainer");
					
          _list1 = Helper.CreateEditorComponent("EditorDropDown", ctrlName + "_List1");

          _list2 = Helper.CreateEditorComponent("EditorDropDown", ctrlName + "_List2");

          _selLeft = Helper.CreateEditorComponent("EditorSubmitButton", ctrlName + "_MoveSelectedLeft");

          _selRight = Helper.CreateEditorComponent("EditorSubmitButton", ctrlName + "_MoveSelectedRight");

          _allLeft = Helper.CreateEditorComponent("EditorSubmitButton", ctrlName + "_MoveAllLeft");

          _allRight = Helper.CreateEditorComponent("EditorSubmitButton", ctrlName + "_MoveAllRight");
					
          Log.Add("TransferList.Create", "Created", LogType.Info);
          
      } catch(err){ Log.Add("TransferList.Create", err, LogType.Error); }
    },
    
    DefaultMode: function()
    {
      try{
        
        RemoveFeatures();
        
        Helper.RemoveComponentID(control);
        
      } catch(err){ Log.Add("TransferList.DefaultMode", err, LogType.Error); }
    },

    EditMode: function()
    {
      try{
			
        AddFeatures();
				
      } catch(err){ Log.Add("TransferList.EditMode", err, LogType.Error); }
    },
		
    GetControl: function(){try{  return control; } catch(err){ Log.Add("StaticContainer.GetControl", err, LogType.Error); }},
    		

    
    /* PUBLIC PROPERTIES */    
    NameRequired: false,
    
    Ref: "TransferList"
    
 

  }
  



  /* PRIVATE METHODS */

  // adds features to the control based on the rules specified for this type of control
  function AddFeatures()
  {
    try{
        if(featuresAdded)
          return;
        
        var pref = Helper.GetParentRef(control);
       
        control.bind("click.TransferList", function(event){event.stopPropagation(); Editor.ShowProperties(control); });
        
        featuresAdded = true;
        
     } catch(err){ Log.Add("TransferList.AddFeatures", err, LogType.Error); }
  }

  
  // removes features from the control that were previously added 
  function RemoveFeatures()
  {
    try{
        if(!featuresAdded)
          return;
        
        control.unbind("click.TransferList");

        featuresAdded = false;
        
     } catch(err){ Log.Add("TransferList.RemoveFeatures", err, LogType.Error); }
  }

} catch(err){ Log.Add("TransferList", err, LogType.Error); }
}
