kui.search = {
    options:{
        loaded:false,
        minMsg:'Search terms require a minimum of 3 characters, Please try again!'
    },
    init:function(){
        if (kui.search.options.loaded) { return; }
        kui.search.options.loaded = true;
        
        $(document.body).select('div.srch a').each(function(idx){kui.search.observe(idx);});
        
        if ($('searchResults')) {
            var rules = { 
                click : { 
                    '.srchRes a *': function(event) { 
                        Event.stop(event); 
                        kui.search.activate(Event.element(event).up('div.srchRes')); 
                    }
                },
                over : { 
                    'div.srchRes *' : function(event) { Event.element(event).up('.srchRes').addClassName('hover'); },
                    'div.srchRes' : function(event) { Event.element(event).addClassName('hover'); } 
                },
                out  : { 
                    'div.srchRes *' : function(event) { Event.element(event).up('.srchRes').removeClassName('hover'); },
                    'div.srchRes' : function(event) { Event.element(event).removeClassName('hover'); }
                }
            };
            $('searchResults').delegate('mouseover',rules.over).delegate('mouseout',rules.out).delegate('click',rules.click);
        }
    },
    
    callback:function(obj){ kui.search.observe($(obj).next('a')); },
    
    observe:function(idx){
        if (idx.hasClassName('popup')) {
            idx.observe('click',function(event){kui.search.submit(Event.element(event));},false);
            if (kui.keys) {
                kui.keys.onkey(idx.previous('input'), function(event){
                    kui.search.submit(Event.element(event).next('a'));
                }, true, 13);
            }
        }
        else {
            if (kui.keys) {
                kui.keys.onkey(idx.previous('input'), function(event){
                    kui.search.reload(Event.element(event).next('a'));
                }, true, 13);
            }
        }
        
        idx.previous('input').observe('focus',function(event){
            Event.element(event).addClassName('focus');
        },false).observe('blur',function(event){
            Event.element(event).removeClassName('focus');
        },false);
    },
    
    activate:function(obj){
        var json = obj.readAttribute('rel').evalJSON();
        var act  = obj.className.split(" ").first();
        switch (act) {
            case 'page':
            case 'text':
                var url = obj.down('a.url span').innerHTML;
                kui.gotoUrl(url, true);
            break;
            case 'media':
                kui.search.preview(json);
            break;
        }
    },
    
    preview : function(json) {
        var activeObj, winDims = document.viewport.getDimensions();
        var mTypes     = {
            'video' : { 
                width  : (json.width)  ? (Number(json.width)>(winDims.width-60)) ? (winDims.width-60) : Number(json.width) : 640,
                height : (json.height) ? (Number(json.height)>(winDims.height-60)) ? (winDims.height-60) : Number(json.height) : 480,
                src:'/player/'+json.id
            },
            'audio' : { width: 290, height: 200, src:'/player/'+json.id },
            'docs' :  { width: 290, height: 200, src:'/download/'+json.id }
        };
        if (json.type=='docs') { 
            window.open('/download/id/'+json.file_id, '_self'); return;
        }
        else {
            switch (json.type) {
                case 'video': activeObj = mTypes.video; break;
                case 'audio': activeObj = mTypes.audio; break;
                case 'page' :
                case 'url'  : activeObj = mTypes.link; break;
                case 'img'  : klGeneric.picPrev({path:json.file_name,fullpath:json.file_name,file_id:json.file_id}); break;
            }
            if (json.type=='img') { return; }
            var prevWin = kui.openWin({ title:'Media Preview', 
                src:activeObj.src, shaded:true, width:activeObj.width, height:activeObj.height 
            });
        }
    },
    
    submit:function(obj){
        var input = $(obj).previous('input');
        if (input.value.blank() || input.value.length<=3) {
            alert(kui.search.options.minMsg);
            input.focus();
            return;
        } else {
            var rel = input.readAttribute('rel');
            var json = rel.evalJSON(true);
            kui.openWin({
                theme:'hClr',
                title:'Search',
                width:850,
                src:'/'+json.id+'/search/'+escape(input.value)
            });
        }
    },
    reload:function(obj){
        var input = obj.previous('input');
        if (input.value.blank() || input.value.length<=3) {
            alert(kui.search.options.minMsg);
            input.focus();
            return;
        } else {
            kui.updateRel('searchPanel','query',escape(input.value));
            kui.search.paginate(0);
        }
    },
    
    paginate:function(offset){
        var json = $('searchPanel').readAttribute('rel').evalJSON();
        var setAjax = new Ajax.Request('/ajax/search', {
            parameters: Object.toQueryString({ 
                query  : json.query,
                offset : offset,
                id : json.id,
                func : 'search'
            }),
            onComplete: function (req) {
                json = req.responseJSON;
                if (json.html) { $('searchResults').update(json.html); }
                if (json.pages) { $('searchPages').update(json.pages).show(); } 
                else { $('searchPages').hide(); }
                $(document.body).scrollTo();
            }
        });
    }
};

document.observe("dom:loaded", kui.search.init);

