Type.registerNamespace('FundsSelector');

FundsSelector.SelectorFilter = function FundsSelector_SelectorFilter( sel)
{
    this.selector=sel;
	this.risks= new Array(3);
	this.arts = new Array(6);
	this.types= new Array(2);
	this.fName= "";

}
FundsSelector.SelectorFilter.prototype = 
{

     _field: null,
     _idx: null,
    
    loadFilterFromCookies: function FundsSelector_SelectorFilter$loadFilterFromCookies()
    {
        var data = this.GetCookie();

        if (data==null)
        {	
            try
            {
	               this.risks[0] = 1;
                   this.risks[1] = 2;
                   this.risks[2] = 3;
                   this.types[0] = 1;
                   this.types[1] = 0;
                  
	               this.arts[0]= this.GetType(0);
	               this.arts[1]= this.GetType(1);
	               this.arts[2]= this.GetType(2);
	               this.arts[3]= this.GetType(3);
	               this.arts[4]= this.GetType(4);
	               this.arts[5]= this.GetType(5);//All different
            }
            catch (ex)
            {
	            alert (ex.description);
            }
        }
        else
        {
           var elements = data.split("|");

           this.risks[0]=(elements[0]=="-")?null:1;
           this.risks[1]=(elements[1]=="-")?null:2;
           this.risks[2]=(elements[2]=="-")?null:3;

           this.types[0]=(elements[3]=="-")?null:1;
           this.types[1]=(elements[4]=="-")?null:0;;

           this.arts[0]=(elements[5]=="-")?null:elements[5];
           this.arts[1]=(elements[6]=="-")?null:elements[6];
           this.arts[2]=(elements[7]=="-")?null:elements[7];
           this.arts[3]=(elements[8]=="-")?null:elements[8];
           this.arts[4]=(elements[9]=="-")?null:elements[9];
           this.arts[5]=(elements[10]=="-")?null:elements[10];
             
           this.fName=(elements[11]=="-")?"":elements[11];
        }
        
      
    },
    
    GetType: function FundsSelector_SelectorFilter$GetType(typeId)
    {
	    switch (typeId)
	    {
		    case 0:
			    return getLabel("fart_Aktien",getLanguage());
		    case 1:
			    return getLabel("fart_Renten",getLanguage());
		    case 2:
			    return getLabel("fart_Geldmarkt",getLanguage());
		    case 3:
			    return getLabel("fart_Mix",getLanguage());
		    case 4:
			    return getLabel("fart_Dach",getLanguage());
		    case 5:
			    return getLabel("fart_Special",getLanguage());
		    default:
			    return "";
	    }
    },
    
    loadFilterFromForm: function FundsSelector_SelectorFilter$loadFilterFromForm()
    {
         try
         {
               this.risks[0] = MM_findObj("Checkbox10").checked ? 1 : null;
               this.risks[1] = MM_findObj("Checkbox11").checked ? 2 : null;
               this.risks[2] = MM_findObj("Checkbox12").checked ? 3 : null;
               this.types[0] = MM_findObj("evTresaur").checked ? 1 : null;
               this.types[1] = MM_findObj("evAusschuettung").checked ? 0 : null;
              
               //'fartAktien','fartRenten','fartSpezial','fartGeldmarkt','fartGemischt','fartDach'
		        this.arts[0]=MM_findObj("fartAktien").checked ? this.GetType(0) : null;
		        this.arts[1]=MM_findObj("fartRenten").checked ? this.GetType(1) : null;
		        this.arts[2]=MM_findObj("fartGeldmarkt").checked ? this.GetType(2) : null;
		        this.arts[3]=MM_findObj("fartGemischt").checked ? this.GetType(3) : null;
		        this.arts[4]=MM_findObj("fartDach").checked ? this.GetType(4) : null;
		        this.arts[5]=MM_findObj("fartSpezial").checked ? this.GetType(5) : null;//All different
                
                this.fName    = MM_findObj("fondsname").value;
          }
         catch (ex)
         {
            //	alert (ex.description);
         }
    },
    
    saveFilterToCookies: function FundsSelector_SelectorFilter$saveFilterToCookies()
    {
        var data = "";
        data+= (this.risks[0]==null)?"-":this.risks[0];
        data+="|";
        data+= (this.risks[1]==null)?"-":this.risks[1];
        data+="|";
        data+= (this.risks[2]==null)?"-":this.risks[2];
        data+="|";
        data+= (this.types[0]==null)?"-":this.types[0];
        data+="|";
        data+= (this.types[1]==null)?"-":this.types[1];
        data+="|";
        data+= (this.arts[0]==null)?"-":this.arts[0];
        data+="|";
        data+= (this.arts[1]==null)?"-":this.arts[1];
        data+="|";
        data+= (this.arts[2]==null)?"-":this.arts[2];
        data+="|";
        data+= (this.arts[3]==null)?"-":this.arts[3];
        data+="|";
        data+= (this.arts[4]==null)?"-":this.arts[4];
        data+="|";
        data+= (this.arts[5]==null)?"-":this.arts[5];//All different
        data+="|";
        data+= (this.fName==null)?"-":this.fName;

        this.SetCookie(data);
           
    },
    
    saveFilterToForm: function FundsSelector_SelectorFilter$saveFilterToForm()
    {
    
     // Sets input fields according to search criterias	
     try
     {
		
		    var chr1 = 	(this.risks[0]!=null);
		    var chr2 = 	(this.risks[1]!=null);
		    var chr3 = 	(this.risks[2]!=null);
    		
		    MM_findObj("Checkbox10").checked=chr1;
            MM_findObj("Checkbox11").checked=chr2;
            MM_findObj("Checkbox12").checked=chr3;
            MM_findObj("allrisk").checked=chr1 && chr2 && chr3;
            
            var cht1 = 	(this.types[0]!=null);
		    var cht2 = 	(this.types[1]!=null);
    		
		    MM_findObj("evTresaur").checked=cht1;
            MM_findObj("evAusschuettung").checked=cht2;
            MM_findObj("evAll").checked=cht1 && cht2;
            

		    //'fartAktien','fartRenten','fartSpezial','fartGeldmarkt','fartGemischt','fartDach'
		    var cha1 = 	(this.arts[0]!=null);
		    var cha2 = 	(this.arts[1]!=null);
		    var cha3 = 	(this.arts[2]!=null);
		    var cha4 = 	(this.arts[3]!=null);
		    var cha5 = 	(this.arts[4]!=null);
		    var cha6 = 	(this.arts[5]!=null);
    		
		    MM_findObj("fartAktien").checked=cha1;
		    MM_findObj("fartRenten").checked=cha2;
		    MM_findObj("fartGeldmarkt").checked=cha3;
		    MM_findObj("fartGemischt").checked=cha4;
		    MM_findObj("fartDach").checked=cha5;
		    MM_findObj("fartSpezial").checked=cha6; //All different
		    MM_findObj("Checkbox1").checked=cha1 && cha2 && cha3 && cha4 && cha5 && cha6;
            
            
		    MM_findObj("fondsname").value = this.fName;
            MM_findObj("allefonds").checked=(this.fName=="");
      }
      catch (ex)
      { 
	    //	alert ("carch");
      }
    },
    
    quickSort: function FundsSelector_SelectorFilter$quickSort(funds, column, idx) 
    {

        //   Sort is not optimal. Quick
        //   sortRange(funds, 0, funds.length-1, field);
        try
        {
             _idx = idx;
             _field = column.currentField;
             
             //TODO: Sortierung wieder einbauen
             funds.sort( this.doFundsSort );
             
             if (!((idx==-1 && _field.sortOrder=="D") || (idx!=-1 && _field.sortOrder.split("/")[idx]=="D"))) {
               funds.reverse();
             }
             
        }
        catch (ex)
        {
            alert (ex.description);
        }
    },
    
    sortFundList: function FundsSelector_SelectorFilter$sortFundList(column,idx)
    {
	    this.quickSort(this.selector.funds, column, idx);
    },
    
    filterFundList: function FundsSelector_SelectorFilter$filterFundList()
    {
	    for (var i=0;i<this.selector.funds.length;i++)
	    {
		    this.selector.funds[i].IsShown = true; //set all to visible
	    }
	    //hide all that not fit to specific filter
    	
	    this.filterRisk(); 
	    this.filterVWType(); 
	    this.filterArt();
	    this.filterName();
      
        this.saveFilterToForm();
        this.saveFilterToCookies();
    },
    
    filterRisk: function FundsSelector_SelectorFilter$filterRisk()
    {

	    for (i=0;i<this.selector.funds.length;i++)
	    {
		    try
		    {
			    if (!this.selector.funds[i].IsShown)
				    continue;
    				
			    var sett = false;
               
			    for (vi = 0; vi < this.risks.length; vi++)
			    {
    			  
   				    if (this.risks[vi]==null)
					    continue;

				    if (this.selector.fields[5].compareValues(this.selector.funds[i], this.risks[vi])==0)
				    {
					    sett=true;
					    break;
				    }        
			    }
               
			    if (!sett)
				    this.selector.funds[i].IsShown = false;
		    }
		    catch (ex)
		    {
			     alert ("Exception:" + ex.description);
		    }
	    }
    },
    
    filterVWType: function  FundsSelector_SelectorFilter$filterVWType()
    {
        //'evTresaur','evAusschuettung','evAll'
        for (var i=0;i<this.selector.funds.length;i++)
        {
            try
            {
                if (!this.selector.funds[i].IsShown)
                    continue;
            		
                var sett = false;
              
                for (var tpi = 0; tpi < this.types.length; tpi++)
                {
                    if (this.types[tpi]==null)
                        continue;

                    if (this.selector.fields[7].compareValues(this.selector.funds[i], this.types[tpi])==0) 
                    {
                        sett=true;
                        break;
                    }  
                }
              
                if (!sett)
                    this.selector.funds[i].IsShown = false;
            }
            catch (error)
            {
                alert ("error"+error.description);
            }
        }
    },
    
    
    filterArt: function FundsSelector_SelectorFilter$filterArt()
    {
	    for (i=0;i<this.selector.funds.length;i++)
	    {
		    try
		    {
			    if (!this.selector.funds[i].IsShown)
				    continue;
				    
			    var sett = false; //means that the type is correct
               
			    for (ai = 0; ai < this.arts.length-1; ai++)//do not perform this for special funds
			    {
				    var currArt;
   				    if (this.arts[ai]==null)
					    currArt=this.GetType(ai);	
				    else
					    currArt=this.arts[ai];
                
				    if (this.selector.fields[31].compareValues(this.selector.funds[i], currArt)==0)
				    {
					    this.selector.funds[i].IsShown=(this.arts[ai]!=null);//shown when filter says so
					    sett=true;
					    break;
				    }        
			    }
               
			    if (!sett) //the type was not matched - it should be special
				    this.selector.funds[i].IsShown = (this.arts[5]!=null);//show if specials are shown
		    }
		    catch (ex)
		    {
			     alert ("Exception:" + ex.description);
		    }
	    }
    },
    
    filterName: function FundsSelector_SelectorFilter$filterName()
    {
        
        var subName =  this.fName;
        if (subName=="")
		    return;
		    
		
        for (var i=0;i<this.selector.funds.length;i++)
        {
            try
            {
	            if (!this.selector.funds[i].IsShown)
			            continue;
        			
	            var result=false;
	            var value1 = new String(this.selector.fields[10].getFieldValue(this.selector.funds[i])).toLowerCase();
	            var value2 = subName.toLowerCase();
	            var len = value1.length-1;

	            for (var xch=0; xch<len;xch++)
	            {
		            //compare first letter
		            if (value1.substring(xch,xch+1)==value2.substring(0,1))
		            {
        			
		                var ok=true;
			            for (var ych=1; ych<value2.length;ych++)
			            {
				            if (value1.substring(xch+ych,xch+ych+1)!=value2.substring(ych,ych+1))
				            {
				                ok=false;
					            break;
				            }
			            }
        			
			            if (ok)
			            {
				            result=true;
			            }

		            }
		            else
		            {
			             continue;	
			        }
	            }
        	
	            if (!result)
		            this.selector.funds[i].IsShown=false;

            }
            catch (exx)
            {
	            alert (exx.description);
            }
         }
    },
    
    doFundsSort: function FundsSelector_SelectorFilter$doFundsSort(f1, f2)
    {
        try
        { 
            var val = _field.getFieldValue(f1);
           
            if (_idx==-1) 
            {
                return _field.compareValues(f2, val);
            }
            else 
            {
              return _field.compareValues(f2, val[_idx], _idx);
            }
        }
        catch (ex)
        {
            alert (ex.description);
            return 0;
        }
    },
    
    SetCookie: function FundsSelector_SelectorFilter$SetCookie(sValue)
    {
        var sName = "uiFundNavigatorFilterCookie";
        date = new Date();
        date.setFullYear(date.getFullYear()+1);
        
        document.cookie = sName + "=" + escape(sValue) + "; expires=" + date.toGMTString()+";";
    },

    GetCookie: function FundsSelector_SelectorFilter$GetCookie()
    {
        
        var sName = "uiFundNavigatorFilterCookie";

        try
        {
            var aCookie = document.cookie.split("; ");
            
            for (var i=0; i < aCookie.length; i++)
            {
                var aCrumb = aCookie[i].split("=");
                //	alert (aCrumb[0]);
                if (sName == aCrumb[0]) 
                return unescape(aCrumb[1]);
            }
        }
        catch (ex)
        {
            alert (ex.description);
        }
        return null;
    }
}

FundsSelector.SelectorFilter.registerClass('FundsSelector.SelectorFilter');
