var tcLinker = new Class({
    
    Implements: [Options, Events],
    
    options:{
        data:{}, 
        translate:{
            rubrik:{'Industry':'Branche', 'Solutions':'L&ouml;sungen', 'Products &amp; Services':'Produkte &amp; Services'},
            cat:{'Automotive':'Automobil','Health Care':'Gesundheitswesen', 'Financial Services':'Finanzdienstleister', 'Government':'Beh&ouml;rden', 'Utility & Waste Management':'Versorger &amp; Entsorger', 'IT &amp; Telecommunication':'IT &amp; Telekommunikation', 'Consumer Electronics':'Unterhaltungselektronik', 'Secure E-Mail':'Sichere E-Mail', 'Multi-functional ID':'Multifunktionsausweis', 'E-Invoicing & Document Signing':'Rechnungs- &amp; Dokumentensignatur', 'Device Authentication':'Device Authentication', 'Webserver Security (SSL)':'Webserver Sicherheit (SSL)', 'Mobile Content Security':'Mobile Content Security'}
        },
        mode:'grid',
        language:'ENG'
    },
    
    category: new URI(document.location).getData('cat'),
    rubrik: new URI(document.location).getData('rubrik'),
    
    initialize: function(options){
        this.setOptions(options);
        this.jsondata = $H(this.options.data);
        this.menuLinkUri = new URI('/about/references-grid.htm');
        this.backLinkUri = new URI('/about/references-grid.htm');
        this.linkUri = new URI('/about/references-list.htm');
        this.translate = (this.options.language == 'DEU');
        this.createMenu(this.getRubriken());
        if (this.options.mode == 'grid'){
            if (this.category) {
                this.createGrid(this.filterCategory({cat:this.category}))
            }else {
                this.createGrid(jsondata.data)
            }
        }    else {
            if (this.category) {
                this.createList(this.filterText(this.filterCategory({cat:this.category})));
            } else {
                this.createList(this.filterText(jsondata.data));
            }
            if (!Browser.Engine.trident) {
                window.location.hash = new URI(document.location).get('fragment');
            }
        }
        
    },
    
    filterCategory:function(options){        
        var filtered = new Array();
            this.jsondata.data.each(function(entry){
                var found = false;
                if(entry.category){
                    entry.category.each(function(singleCat){
                        if(singleCat.split(':')[1] == options.cat){
                            found = true;
                        }
                    });
                    if(found){
                        filtered.include(entry);
                    }
                }
            });
        return filtered;
    },
    
    filterText:function(data){
        var filtered = new Array();
        data.each(function(entry){
            var found = false;
            if(entry.text){
                found = true;
            }
            if(found){
                filtered.include(entry);
            }
        });
        return filtered;
    },
    
    getRubriken: function(){
        var rubriken = new Hash();
        this.jsondata.data.each(function(entry){
            entry.category.each(function(singleCat){
                var tmp = singleCat.split(':');
                if (rubriken.get(tmp[0])==null){
                    rubriken.set(tmp[0],[]); 
                }
                if(rubriken.get(tmp[0]).indexOf(tmp[1]) == -1) {
                    var insertpos = rubriken.get(tmp[0]).length;
                    rubriken.get(tmp[0])[insertpos] = tmp[1];
                };
            });
        });
        return rubriken;
    },
    
    createMenu:function(rubriken){
        var menuContainer = $('menu');
        if (menuContainer == null) return;
        var ul = new Element('ul');
        rubriken.each(function(list,k){
            if (k != '') {
                if(this.translate) {
                    if(this.options.translate.rubrik[k]){
                        k = this.options.translate.rubrik[k];
                    }
                }
                var liHeadline = new Element('li', {'html':k});
                var ulElements = new Element('ul');
                ul.adopt(liHeadline);
                liHeadline.adopt(ulElements);
                var thisbound = this
                list.each(function(e){
                    var liElement = new Element('li');
                    var selectedCategory = e;
                    if(thisbound.translate) {
                        if(thisbound.options.translate.cat[e]){
                            e = thisbound.options.translate.cat[e];
                        }
                    }
                    var selectedRubrik = k;
                    if(thisbound.translate) {
                        if(thisbound.options.translate.rubrik[k]){
                            k = thisbound.options.translate.rubrik[k];
                        }
                    }
                    var link = new Element('a',{'href':thisbound.menuLinkUri.set('data',{'cat':selectedCategory,'rubrik':selectedRubrik}).toURI(),'html':e,'style':'display:block;','id':selectedCategory}).store('cat', e);
                    ulElements.adopt(liElement);
                    liElement.adopt(link);
                });    
            }
        }.bind(this));
        
        menuContainer.adopt(ul);
    },
    
    createGrid: function(data){
        var imageContainer = $('images');
        var linkContainer = $('links');
        if (imageContainer == null || linkContainer == null) return;
        imageContainer.empty();
        linkContainer.empty();

        var listDiv = new Element('div', {'class':'lt', 'style':'width: 250px; margin-right: 19px; float: left;'});
        var listDiv2 = new Element('div', {'class':'rt', 'style':'width: 250px; float: left;'});

        var listUl = new Element ('ul');
        var listUl2 = new Element('ul');
        
        var thisbound = this;
        /* if (this.rubrik && this.category) {
            if(thisbound.translate) {
                if(this.options.translate.cat[this.category]){
                    var h2 = new Element('h2', {'html':this.rubrik+' &raquo '+this.options.translate.cat[this.category]})
                }else {
                    var h2 = new Element('h2', {'html':this.rubrik+' &raquo '+this.category})
                }
            }else {
                var h2 = new Element('h2', {'html':this.rubrik+' &raquo '+this.category})
            }
            imageContainer.adopt(h2);
        } */
        if (this.category) $(this.category).addClass('orange');
        
        var listArray = [];        

        data.each(function(e){
            if (e['img'] != ''){
                var div = new Element('div');
                var img = new Element('img',{'src':e['img'],'class':'refImage','width':'170','height':'44','alt':e['title']});
                var imageLink = new Element ('a', {'href':thisbound.linkUri.set('fragment', 'id'+e['id']).set('data',{'cat':thisbound.category,'rubrik':thisbound.rubrik}).toURI(),'class':'refImage'});
                
                var ul = new Element ('ul');
                if (thisbound.translate) {
                    var li = new Element ('li',{'text':'mehr'});
                }else {
                    var li = new Element ('li',{'text':'more'});
                }
                
                
                if (e['text'] == '') {
                    div.adopt(img)
                }else {
                    div.adopt(imageLink);
                    imageLink.adopt(img,ul.adopt(li));
                }
                
                imageContainer.adopt(div);
            } else {
                var li = new Element ('li');
                var liTitle = new Element ('li', {'html':e['title']});
                var link = new Element ('a', {'href':thisbound.linkUri.set('fragment', 'id'+e['id']).set('data',{'cat':thisbound.category,'rubrik':thisbound.rubrik}).toURI(),'html':e['title']});
                if (e['text'] == '') {
                    listArray.push(liTitle);
                }else {
                    listArray.push(li.adopt(link));
                }
            }
        });

        var listLength = listArray.length;
        var half = listLength/2;
        for (var i = 0; i < listLength; i++) {   
            if (i < half) {
                listUl.adopt(listArray[i]);
            } else {
                listUl2.adopt(listArray[i]);
            }
        }
        listDiv.adopt(listUl);
        listDiv2.adopt(listUl2);
        linkContainer.adopt(listDiv);
        linkContainer.adopt(listDiv2);
        
        imageContainer.adopt(new Element('div', {'class':'clr'}));
        if(this.translate) {
            var backLink = new Element('div', {'html':'<a href="'+this.backLinkUri+'">&laquo; zur&uuml;ck zur &Uuml;bersicht</a>', 'style':'clear: both; text-align: right; margin-top: 20px; font-weight: bold;'});
            } else {
            var backLink = new Element('div', {'html':'<a href="'+this.backLinkUri+'">&laquo; back to overview</a>', 'style':'clear: both; text-align: right; margin-top: 20px; font-weight: bold;'});
            }
        linkContainer.adopt(backLink);
    
    },
    createList: function(data){
             var listContainer = $('list');
            if (listContainer == null) return;
            listContainer.empty();
            
            /* if (this.rubrik && this.category) {
                if(this.translate) {
                    if(this.options.translate.cat[this.category]){
                        var h2 = new Element('h2', {'html':this.rubrik+' &raquo '+this.options.translate.cat[this.category]})
                    }else {
                        var h2 = new Element('h2', {'html':this.rubrik+' &raquo '+this.category})
                    }
                }else {
                    var h2 = new Element('h2', {'html':this.rubrik+' &raquo '+this.category})
                }
                listContainer.adopt(h2);
            } */
            if (this.category) $(this.category).addClass('orange');
                
            data.each(function(e){
                var imgHTML = '';
                if (e['img'] != '') {imgHTML = '<img src="'+e['img']+'" width="170" height="44" alt="'+e['title']+'" />';}
                var div = new Element('div', {'class':'listItem','html':'<a name="id'+e['id']+'"></a><div class="image">'+imgHTML+'</div><div class="itemText"><h3>'+e['title']+'</h3>'+e['text']+'</div>'});
                var clrLine = new Element('div', {'class':'clr'});
                div.adopt(clrLine);
                listContainer.adopt(div);
            });
            var clear = new Element('div', {'class':'clear'});
            listContainer.adopt(clear);
            if(this.translate) {
                var backLink = new Element('div', {'html':'<a href="'+this.backLinkUri+'">&laquo; zur&uuml;ck zur &Uuml;bersicht</a>', 'style':'text-align: right; margin-top: 20px; font-weight: bold;'});
            } else {
                var backLink = new Element('div', {'html':'<a href="'+this.backLinkUri+'">&laquo; back to overview</a>', 'style':'text-align: right; margin-top: 20px; font-weight: bold;'});
            }
            listContainer.adopt(backLink);
    }
    
});
