/**
 * @author fernando
 */
if(!Freelancesoft) var Freelancesoft = new Object();

Freelancesoft.fsgui = new Object();

/****************************************
 *      Freelance Soft GUI List
 ***************************************/

Freelancesoft.fsgui.list=function(id, parent){
	this.list_items=new Freelancesoft.utils.Hash();
	this.multipleSelection=false;
	this.opacity=60;
	this.mouse_over_opacity=100;
	this.item_selected_opacity=85;
	
	this.effects=new Array();
	
    var obj_list=document.createElement("div");	
    
	obj_list.id="fsgui_list_"+id;	
	obj_list.freelancesoft_fsgui_list = this;
	
	obj_list.className="fsgui_list";	 
	parent.appendChild(obj_list);
	
	this.addItem = function(Name, Value, Tooltip){
	     var item=new Freelancesoft.fsgui.list.item(Name, Value);
	     var obj_item = document.createElement("div");
	     
	     item.objHtml=obj_item;
	     
	     //Si ya existe elimino el item antes
	     if(this.list_items.hasItem(Value)){
	         this.removeItem(Value);
	     }
	     
	     this.list_items.setItem(Value, item);
	     
	     if(Tooltip!=''){
	        item.Tooltip=Tooltip;
	     }
	     item.freelancesoft_fsgui_list=this;
	     obj_item.freelancesoft_fsgui_list_item=item;
	     obj_item.freelancesoft_fsgui_list=this;
	     
	     obj_item.className="fsgui_list_item";
	     obj_list.appendChild(obj_item);
	     obj_item.innerHTML=Name;
	     obj_item.id=obj_list.id+"_"+Value;
	     Freelancesoft.utils.changeOpac(this.opacity, obj_item.id);
	     
	     Freelancesoft.utils.attachEvent(obj_item, "click", Freelancesoft.fsgui.list.click);
	     Freelancesoft.utils.attachEvent(obj_item, "mouseover", Freelancesoft.fsgui.list.mouseOver);
	     Freelancesoft.utils.attachEvent(obj_item, "mouseout", Freelancesoft.fsgui.list.mouseOut);
	}
	
	this.addOnClickEvent=function(item_id, fc){	
	     var objHtml = this.list_items.getItem(item_id).objHtml;
	     Freelancesoft.utils.attachEvent(objHtml, "click", fc);
	}
	
	this.removeItem=function(Value){
	     var item = this.list_items.getItem(Value);
	     obj_list.removeChild(item.objHtml);
	     this.list_items.removeItem(Value);
	}
	
	this.removeSelected=function(){
	     for(value in this.list_items.items){
	         if(this.list_items.getItem(value).Selected){
	            this.removeItem(value);
	         }
	     }
	}
	
	this.setDimension = function(width, height){
	     obj_list.style.width=width+"px";
	     obj_list.style.height=height+"px";
	}
	
	this.setMultipleSelection=function(bool){
	     this.multipleSelection=bool;
	}
	
	this.deselectAll=function(){
	     for(value in this.list_items.items){
	         this.list_items.getItem(value).deselect();
	     }
	}
	
	this.setup=function(json_str){
	    var setup = Freelancesoft.json(json_str);  
	    
	    for(key in setup){
	       eval("this."+key+"="+setup[key]);
	    }
	}
	
	this.addEffect=function(json_str){
	   var effect = Freelancesoft.json(json_str);
	}
}

Freelancesoft.fsgui.list.item=function(Name,Value){
   this.Selected=false;
   this.objHtml;
   this.freelancesoft_fsgui_list;
   this.Name=Name;
   this.Value=Value;
   
   this.deselect=function(){      
      this.Selected=false;
      this.objHtml.className="fsgui_list_item";
      Freelancesoft.utils.changeOpac(this.freelancesoft_fsgui_list.opacity, this.objHtml.id);
   }
   
   this.select=function(){      
      this.Selected=true;
      this.objHtml.className="fsgui_list_item_selected";
   }
}

Freelancesoft.fsgui.list.click=function(e){
    var obj = Freelancesoft.utils.getTargetEvent(e);
    var selected = obj.freelancesoft_fsgui_list_item.Selected;
    
    if(!obj.freelancesoft_fsgui_list.multipleSelection){
        obj.freelancesoft_fsgui_list.deselectAll();
    }
    
    if(selected){
      obj.freelancesoft_fsgui_list_item.deselect();
      Freelancesoft.utils.changeOpac(obj.freelancesoft_fsgui_list.opacity, obj.id);
    } else {
      obj.freelancesoft_fsgui_list_item.select();
      Freelancesoft.utils.changeOpac(obj.freelancesoft_fsgui_list.mouse_over_opacity, obj.id);
    }
}

Freelancesoft.fsgui.list.mouseOver=function(e){
    var obj = Freelancesoft.utils.getTargetEvent(e);
    var opacity = (obj.freelancesoft_fsgui_list_item.Selected) ? obj.freelancesoft_fsgui_list.item_selected_opacity : obj.freelancesoft_fsgui_list.opacity;
    Freelancesoft.utils.changeOpac(opacity, obj.id);
    
   // Freelancesoft.fsgui.Effects.fade(obj, opacity, obj.freelancesoft_fsgui_list.mouse_over_opacity, 7);
}

Freelancesoft.fsgui.list.mouseOut=function(e){
    var obj = Freelancesoft.utils.getTargetEvent(e);        
    var opacity = (obj.freelancesoft_fsgui_list_item.Selected) ? obj.freelancesoft_fsgui_list.item_selected_opacity : obj.freelancesoft_fsgui_list.opacity;
    Freelancesoft.utils.changeOpac(opacity, obj.id);
    
   // Freelancesoft.fsgui.Effects.fade(obj, obj.freelancesoft_fsgui_list.mouse_over_opacity, opacity, 15);
}

/****************************************
 *      Freelance Soft GUI Effects
 ***************************************/
Freelancesoft.fsgui.Effects = new Object();

Freelancesoft.fsgui.Effects.fade = function(obj, start, end, speed){
       var timer = 0;
	   
	  if(start < end){	   
            for(i = start; i <= end; i++){
               setTimeout("Freelancesoft.utils.changeOpac("+i+",'"+obj.id+"')",(timer * speed));		
               timer++;
            }
      } else {
            for(i = start; i >= end; i--) {
              setTimeout("Freelancesoft.utils.changeOpac("+i+",'"+obj.id+"')",(timer * speed));			
              timer++;
            }
      } 
}

Freelancesoft.fsgui.Effects.explode = function(obj, num_items, speed, time){
      var timer = 0;
	  var objects = new Array();
	  
	  for(i=0; i<num_items; i++){
	     var obj_div = document.createElement("div");
	     
	     obj_div.id=obj.id+"_effects_explode_"+i;
	     obj_div.style.position="absolute";
	     obj_div.style.top= Math.floor(Math.random() * 10);
	     obj_div.style.left= Math.floor(Math.random() * 10);
	     obj_div.style.background="#ff0000";
	     obj_div.style.width="5px";
	     obj_div.style.height="5px";
	     Freelancesoft.utils.setVisible(obj_div, false);
	     
	     obj.appendChild(obj_div);
	  }	  
	  
	  
	     for(j = 0; j <= time; j++){
	       for(i=0; i<num_items; i++){
            setTimeout("Freelancesoft.fsgui.Effects.item('"+obj.id+"_effects_explode_"+i+"')",(speed));
           }		
         }
      
}

Freelancesoft.fsgui.Effects.item=function(id){
    var obj = document.getElementById(id);    
    
    var pos = (Math.random() < .5) ? -1 : 1;
    var pos1 = (Math.random() < .5) ? -1 : 1;
    var variaton_x = Math.floor(obj.style.left.split("p")[0] + Math.random()*10*pos);
    var variaton_y = Math.floor(obj.style.top.split("p")[0] + Math.random()*10*pos1);
    
    Freelancesoft.utils.setVisible(obj, true);
    
    if(variaton_x>500)variaton_x=Math.random()*100;
    if(variaton_y>300)variaton_y=Math.random()*100;
    
    obj.style.top = variaton_y +"px";
    obj.style.left = variaton_x +"px";
}

