//value
//global-value: datcatalog
//------------------------------------------------------------------------------
var OBJCATALOGDIR=new catalogdirclass();
var OBJSEARCHDATA=new searchdataclass(location.search);
var OBJFINDITEMS=new findclass();

function findclass() {
    //const
    var searchmotivbaselen=4;

    this.finditems=function(items){
        var dat=items;
        if (OBJSEARCHDATA.ctidxs[0]!="-1")
            dat=this.finditems_catalog(dat);
        if (OBJSEARCHDATA.mtidxs[0]!="-1")
            dat=this.finditems_motiv(dat);
        if (OBJSEARCHDATA.skeys.length==0||OBJSEARCHDATA.skeys[0]=="")
            return dat;
        //Keys
        if((OBJSEARCHDATA.skeys.length==1)||(OBJSEARCHDATA.stylestr=="exact"))
            return this.finditems_exact(dat);
        else if(OBJSEARCHDATA.stylestr=="and")
            return this.finditems_and(dat);
        else
            return this.finditems_or(dat);
    };

    this.finditems_catalog=function(items){
        if (OBJSEARCHDATA.ctidxs.length==0||OBJSEARCHDATA.ctidxs[0]=="-1")
            return items;

        var dat=new Array();
        for(var i=0;i<items.length;i++){
            var item=items[i];
            for(var j=0;j<OBJSEARCHDATA.ctidxs.length;j++){
                if(OBJSEARCHDATA.ctidxs[j]==item.ctnum.substr(0,OBJSEARCHDATA.ctidxs[j].length)){
                    dat[dat.length]=item;
                    break;
                }
            }
        }
        return dat;
    };

    this.finditems_motiv=function(items){
        if (OBJSEARCHDATA.mtidxs.length==0||OBJSEARCHDATA.mtidxs[0]=="-1")
            return items;

        var dat=new Array();
        for(var i=0;i<items.length;i++){
            var item=items[i];
            for(var j=0;j<OBJSEARCHDATA.mtidxs.length;j++){
                var len=OBJSEARCHDATA.mtidxs[j].length;
                var beg=(len<searchmotivbaselen)?searchmotivbaselen:0;
                if(OBJSEARCHDATA.mtidxs[j]==item.num.substr(beg,len)){
                    dat[dat.length]=item;
                    break;
                }
            }
        }
        return dat;
    };

    this.isinitem=function(key,item){
        var iss=false;
        var len=key.length;
        if(len==4&&key==item.num.substr(0,4))
            iss=true;
        else if(len==item.num.length&&key==item.num)
            iss=true;
        else {
            if (item.ctname.toLowerCase().indexOf(key)!=-1)
                iss=true;
            else if (item.text.toLowerCase().indexOf(key)!=-1)
                iss=true;
        }

        return iss;
    }

    this.finditems_item=function(key,items){
        var dat=new Array();

        var keyl=key.toLowerCase();
        var minus=false;
        if (keyl.charAt(0)=='-'){
            keyl=keyl.substr(1);
            minus=true;
        }

        for(var i=0;i<items.length;i++){
            var isfound=this.isinitem(keyl,items[i]);
            if(isfound&&!minus||!isfound&&minus)
                dat[dat.length]=items[i];
        }
        return dat;
    };

    this.finditems_exact=function(items){
        if(OBJSEARCHDATA.skeys.length!=0)
            return this.finditems_item(OBJSEARCHDATA.skeys[0],items);
        else
            return items;
    };

    this.finditems_and=function(items){
        var dat=items;
        for(var i=0;i<OBJSEARCHDATA.skeys.length;i++)
            dat=this.finditems_item(OBJSEARCHDATA.skeys[i],dat);
        return dat;
    };

    this.finditems_or=function(items){
        if (OBJSEARCHDATA.skeys.length==0||dat.length==0)
            return items;

        //"-key"
        var dat=items;
        for(var i=0;i<OBJSEARCHDATA.skeys.length;i++){
            if (OBJSEARCHDATA.skeys[i].charAt(0)=='-')
                dat=this.finditems_item(OBJSEARCHDATA.skeys[i],dat);
        }
        //"key"
        var datout=new Array();
        for(var i=0;i<OBJSEARCHDATA.skeys.length;i++){
            if (OBJSEARCHDATA.skeys[i].charAt(0)=='-')
                continue;
            var dat0=this.finditems_item(OBJSEARCHDATA.skeys[i],dat);
            for(var ii=0;j<dat0.length;ii++){
                var notexis=true;
                var item=dat0[ii];
                for(var iii=0;notexis&&iii<datout.length;iii++)
                    if (item==datout[iii])
                        notexis=false;
                if (notexis)
                    datout[datout.length]=item;
            }
        }
        return (datout.length==0)?dat:datout;
    };
}


function searchdataclass(search) {
    //value
    this.stylestr="and";
    this.skeysstr="";
    this.descript="Alle";

    this.skeys=new Array();
    this.ctidxs=new Array();
    this.mtidxs=new Array();

    this.setidxs=function(idxstr,idxs){
        idxs.length=0;
        if (idxstr==null||idxstr==""||idxstr=="-1")
            idxs[idxs.length]="-1";
        else {
            var strs=idxstr.splittrim(",");
            for (var i=0;i<strs.length;i++){
                if (strs[i]!="")
                    idxs[idxs.length]=strs[i];
            }
        }
    }

    this.setctidxs=function(idxstr){
        this.setidxs(idxstr,this.ctidxs);
    }

    this.setmtidxs=function(idxstr){
        this.setidxs(idxstr,this.mtidxs);
    }

    this.setkeystring=function(keystr){
        this.skeys.length=0;
        if (keystr==null||keystr=="")
            return;
        else if (this.stylestr=="exact")
            this.skeys[0]=keystr;
        else{
            var strs=keystr.splittrim(" ");
            for (var i=0;i<strs.length;i++){
                if (strs[i]!="")
                    this.skeys[this.skeys.length]=strs[i];
            }
        }
    };

    this.getidxstring=function(){
        if (this.mtidxs[0]=="-1")
            return this.makectidxstring();
        else
            return this.makemtidxstring();
    }

    this.makectidxstring=function(){
        return makestr(this.ctidxs,",");
    }
    this.makemtidxstring=function(){
        return makestr(this.mtidxs,",");
    }
    this.makekeystring=function(){
        return makestr(this.skeys," ");
    }

    this.setoption=function(ctidxstr,mtidxstr,style,keystr,desc){
        this.stylestr=style;
        this.skeysstr=keystr;
        this.descript=desc;

        if(this.stylestr=="")
            this.stylestr="and";

        this.setctidxs(ctidxstr);
        this.setmtidxs(mtidxstr);
        this.setkeystring(keystr);

        if (this.descript==""){
            if (this.ctidxs[0]!="-1")
                this.descript=OBJCATALOGDIR.getcatalogitemname(this.ctidxs[0]);
            else if (this.mtidxs[0]!="-1")
                this.descript=this.makemtidxstring();
        }
    };

    this.setfindstring=function(search){
        if (search!=null)
            this.setoption(getsearchvalue(search,"idx"),getsearchvalue(search,"mtv"),getsearchvalue(search,"lop"),unescape(getsearchvalue(search,"keys")),unescape(getsearchvalue(search,"desc")));
    };

    this.makefindstring=function(){
        return "idx="+this.makectidxstring()+"&mtv="+this.makemtidxstring()+"&lop="+this.stylestr+"&keys="+escape(this.makekeystring())+"&desc="+escape(this.descript);
    }

    //init
    this.setfindstring(search);
}

function catalogdirclass() {
    //const
    var dirbaselen=4;
    var dirchildlen=2;

    this.getcatalogdir=function() {
        var catdir=new Array();
        catdir[0]=gethomeurl()+"\tHomepage";
        catdir[1]="categoriecoin.html\tAlle Kategorien";
        if (OBJSEARCHDATA.ctidxs.length>1||OBJSEARCHDATA.mtidxs[0]!="-1"){
            if (OBJSEARCHDATA.skeysstr=="")
                catdir[catdir.length]="\t"+OBJSEARCHDATA.descript;
            else
                catdir[catdir.length]=this.makehrefdirstr(OBJSEARCHDATA.getidxstring(),OBJSEARCHDATA.descript,OBJSEARCHDATA.descript);
        }
        else if (OBJSEARCHDATA.ctidxs[0]!="-1"){
            var catalogidx=OBJSEARCHDATA.ctidxs[0];
            var catidxlen=catalogidx.length+1;
            for(var len=dirbaselen;len<catidxlen;len+=dirchildlen) {
                var catalogitem=this.getcatalogitem(catalogidx.substring(0,len));
                if(catalogitem=="")
                    continue;

                var rdata=catalogitem.splittrim("\t");
                if (OBJSEARCHDATA.skeysstr==""&&(len+2>catidxlen))
                    catdir[catdir.length]="\t"+rdata[1];
                else
                    catdir[catdir.length]=this.makehrefdirstr(rdata[0],rdata[1],rdata[1]);
            }
        }

        if (OBJSEARCHDATA.skeysstr!="")
            catdir[catdir.length]="\tSuchergebnisse: "+OBJSEARCHDATA.skeysstr;
        return catdir;
    }

    this.getdirectcatchilddir=function() {
        var spache="";
        var catdirectchilditems=new Array();
        var catalogidx=OBJSEARCHDATA.ctidxs[0];
        if (catalogidx=="-1"||OBJSEARCHDATA.ctidxs.length>1)
            this.getcatalogdirectitems(catalogidx,spache,catdirectchilditems);
        else
            this.getcatalogdirectchilditems(catalogidx,spache,catdirectchilditems);

        var catidxlen=catalogidx.length;
        if (catidxlen<dirbaselen+dirchildlen||OBJSEARCHDATA.ctidxs.length>1)
        	return catdirectchilditems;

        catdirectchilditems[catdirectchilditems.length]="-1\t-1";
        this.getcatalogparalleitems(catalogidx,spache,catdirectchilditems);

        return catdirectchilditems;
    }

    this.getcatalogitem=function(catalogidx) {
        for(var i=0;i<datcatalog.length;i++){
            var rdata=datcatalog[i].splittrim("\t");
            if(rdata[0]==catalogidx)
                return datcatalog[i];
        }

        return "";
    }

    this.getcatalogdirectitems=function(catalogidx,spache,childitems) {
        var sp=spache+".";
        for (var i=0;i<datcatalog.length;i++) {
            var rdata=datcatalog[i].splittrim("\t");
            childitems[i]=this.makehrefdirstr(rdata[0],rdata[1],sp+rdata[1]);
        }
    }

    this.getcatalogdirectchilditems=function(catalogidx,spache,childitems) {
        var sp=spache+".";
        var catidxlen=catalogidx.length;
        var catidxchildlen=catidxlen+dirchildlen;
        for (var i=0;i<datcatalog.length;i++) {
            var rdata=datcatalog[i].splittrim("\t");
            if (rdata[0].length==catidxchildlen&&rdata[0].substring(0,catidxlen)==catalogidx) {
                childitems[childitems.length]=this.makehrefdirstr(rdata[0],rdata[1],sp+rdata[1]);
                //this.getcatalogdirectchilditems(rdata[0],spache+"&nbsp; &nbsp; ",childitems);
            }
        }
    }

    this.getcatalogparalleitems=function(catalogidx,spache,childitems) {
        var sp=spache+".";
        var catidxlen=catalogidx.length;
        var catidxvatlen=catidxlen-dirchildlen;
        var catidxvat=catalogidx.substring(0,catidxvatlen);
        for (var i=0;i<datcatalog.length;i++) {
            var rdata=datcatalog[i].splittrim("\t");
            if (rdata[0].length==catidxlen&&rdata[0].substring(0,catidxvatlen)==catidxvat) {
                childitems[childitems.length]=this.makehrefdirstr(rdata[0],rdata[1],sp+rdata[1]);
            }
        }
    }

    this.getdirectcatparent=function(catalogidx) {
        if (catalogidx.length<(dirbaselen+dirchildlen))
            return "-1";
        else
            return catalogidx.substr(0,catalogidx.length-2);
    }

    this.getcatalogitemname=function(ctidx) {
        var rdata=this.getcatalogitem(ctidx).splittrim("\t");
        if (rdata.length==2)
            return rdata[1];
        return "";
    }

    this.makehrefdirstr=function(ctidxstr,name,desc){
        return "javascript:gotosearchcatalog('"+ctidxstr+"','"+name+"')\t"+desc;
    }
}
