document.write('<script src="http://www.google.com/uds/api?file=uds.js&amp;v=0.1&amp;key=ABQIAAAA7ZBq0wWITb9OgpBUNg_lRBQK-5M4JWYiQ5AI7vT9w4G94bhM7hSecQl1cIy4sFbnCyYY2XpfUIvW9g" type="text/javascript"></script>');
var Kellegous = Kellegous || { version: 0.2 };
Kellegous.AjaxSearch = function(div) {
    var build = function(cont,result) {
        var na = $(cont).appendChild(
            document.createElement("div"));
        na.className = 'gs-result';

        var nb = na.appendChild(
            document.createElement("div"));
        nb.className = 'gs-title';
        nb = na.appendChild(
            document.createElement("a"));
        nb.href = result.unescapedUrl;
        nb.target = '_blank';
        nb.className = 'gs-title'
        nb.innerHTML = result.title;

        var nc = na.appendChild(
            document.createElement("div"));
        nc.className = 'gs-snippet';
        nc.innerHTML = result.content;
    }

    var empty = function(cont) {
        var na = $(cont).appendChild(
            document.createElement("div"));
        na.className = 'gs-result';
        na.appendChild(
            document.createTextNode('nothing'));
    }

    var groups = [{
            container: "search-results-journal",
            belongsTo: function(result) {
                return (/kellegous\.com\/+ecrits/i).test(result.unescapedUrl);
            }
        },{
            container: "search-results-photos",
            belongsTo: function(result) {
                return (/kellegous\.com\/+photo/i).test(result.unescapedUrl);
            }
        },{
            container: "search-results-other",
            belongsTo: function(result) {
                return true;
            }
        }];

    var gSearch = new GwebSearch();
    gSearch.setSiteRestriction('kellegous.com');
    gSearch.setResultSetSize(GSearch.LARGE_RESULTSET);
    gSearch.setSearchCompleteCallback(
        $(div),
        function () {
            Element.show(this);
            var buckets = groups.map(function(x) {
                return {
                    node:       $(x.container),
                    results:    []
                };
            });

            gSearch.results.each(function(x) {
                for (var i=0;i<groups.length;i++) {
                    if (groups[i].belongsTo(x)) {
                        buckets[i].results.add(x);
                        break;
                    }
                }
            });

            buckets.each(function(bucket) {
                var open = function() {
                    if (bucket.results.length == 0) {
                        empty(bucket.node);
                    } else {
                        bucket.results.each(function(x) {
                            build(bucket.node,x);
                        });
                    }

                    new Effect.BlindDown(bucket.node,{
                        duration:   0.5
                    });
                };

                //check for prev. results.
                var cn = bucket.node.childNodes;
                var em = true;
                for (var i=0;i<cn.length;i++) {
                    if (cn[i].nodeName != '#text') {
                        em = false;
                        break;
                    }
                }

                if (!em) {
                    new Effect.BlindUp(bucket.node,{
                        duration: 0.5,
                        afterFinish: function() {
                            $A(cn).each(function(x) {
                                bucket.node.removeChild(x);
                            });
                            open();
                        }
                    });
                } else {
                    open();
                }
            });
        });
    this.execute = function(query) {
        gSearch.execute(query)
    }
}

