/*
 * netj.org Javascript for pages
 * Author: Jaeho Shin <netj@sparcs.org>
 * Created: 2010-05-18
 */



// Borrowed from http://www.webtoolkit.info/javascript-url-decode-encode.html
/**
*
*  URL encode / decode
*  http://www.webtoolkit.info/
*
**/
 
var Url = {
 
        // public method for url encoding
        encode : function (string) {
                return escape(this._utf8_encode(string));
        },
 
        // public method for url decoding
        decode : function (string) {
                return this._utf8_decode(unescape(string));
        },
 
        // private method for UTF-8 encoding
        _utf8_encode : function (string) {
                string = string.replace(/\r\n/g,"\n");
                var utftext = "";
 
                for (var n = 0; n < string.length; n++) {
 
                        var c = string.charCodeAt(n);
 
                        if (c < 128) {
                                utftext += String.fromCharCode(c);
                        }
                        else if((c > 127) && (c < 2048)) {
                                utftext += String.fromCharCode((c >> 6) | 192);
                                utftext += String.fromCharCode((c & 63) | 128);
                        }
                        else {
                                utftext += String.fromCharCode((c >> 12) | 224);
                                utftext += String.fromCharCode(((c >> 6) & 63) | 128);
                                utftext += String.fromCharCode((c & 63) | 128);
                        }
 
                }
 
                return utftext;
        },
 
        // private method for UTF-8 decoding
        _utf8_decode : function (utftext) {
                var string = "";
                var i = 0;
                var c = c1 = c2 = 0;
 
                while ( i < utftext.length ) {
 
                        c = utftext.charCodeAt(i);
 
                        if (c < 128) {
                                string += String.fromCharCode(c);
                                i++;
                        }
                        else if((c > 191) && (c < 224)) {
                                c2 = utftext.charCodeAt(i+1);
                                string += String.fromCharCode(((c & 31) << 6) | (c2 & 63));
                                i += 2;
                        }
                        else {
                                c2 = utftext.charCodeAt(i+1);
                                c3 = utftext.charCodeAt(i+2);
                                string += String.fromCharCode(((c & 15) << 12) | ((c2 & 63) << 6) | (c3 & 63));
                                i += 3;
                        }
 
                }
 
                return string;
        }
 
}

// fill given search query
if (location.pathname == "/search")
    $(document).ready(function() {
            var q = location.search
            .replace(/^.*&q=/,"")
            .replace(/&.*$/,"")
            .replace(/\+/," ")
            ;
            $("#searchBox").each(function() {
                this.value = Url.decode(q);
                });
        });


// code for links
function Link(id, name) {
    this.id = id;
    if (name)
        this.name = name;
    else
        this.name = id;
}
function links(parentId, items) {
    var parent = document.getElementById(parentId);
    if (parent) {
        var ul = document.createElement("ul");
        for (var i=0; i<items.length; i++) {
            var l = items[i];
            if (l != null) {
                var li = document.createElement("li");
                var a = document.createElement("a");
                a.href = l.id;
                a.innerHTML = l.name;
                li.appendChild(a);
                ul.appendChild(li);
            }
        }
        parent.appendChild(ul);
    }
}

// code for neighbor article links
var NextGeulLink;
var PreviousGeulLink;
function loadNeighborLinks() {
    var nav = document.getElementById("nav-article");
    if (! nav) {
        nav = document.createElement("div");
        nav.id = "nav-article";
        var p = document.getElementById("cse-search-box");
        if (p)
            p.parentNode.insertBefore(nav, p.nextSibling);
        else
            nav = null; // or throw exception?
    }
    if (! nav)
        return;
    function createLinkContainer(name) {
        var id = "nav-" + name;
        var div = document.getElementById(id);
        if (! div) {
            div = document.createElement("div");
            div.id = id;
        }
        nav.appendChild(div);
    }
    createLinkContainer("forward");
    createLinkContainer("backward");
    getNeighborArticlesFor(function(next, prev) {
            function setLink(name, geul) {
                var div = document.getElementById("nav-" + name);
                if (div.firstChild)
                    div.removeChild(div.firstChild);
                if (geul) {
                    var a = document.createElement("a");
                    a.href = geul.id;
                    //a.innerText = geul.title;
                    a.appendChild(document.createTextNode(geul.title));
                    div.appendChild(a);
                }
            }
            setLink("forward", next);
            setLink("backward", prev);
        });
}


