var libris = {
    getLang : function() {
        return $('html').attr('lang') || 'sv';
    },
    getText : function(str) {
        var trans = {
            '(\xd6ppnas i nytt f\xf6nster)' : '(Open in new window)',
            'Förstora' : 'Enlarge',
            'Förminska' : 'Collapse',
            'Lägg till' : 'Add',
            'Ta bort' : 'Delete',
            'Stäng' : 'Close',
            'MARC-XML kan endast sparas som fil' : 'MARC-XML can only be saved as file',
            'Avmarkera alla':'Unselect all',
            'Markera alla':'Select all',
            'Citerad':'Cited',
            'gånger':'times',
            'gång':'time',
            'Inga citeringar hittades':'No citations found',
            'Menade du':'Did you mean',
            "L\xe4s hela texten":"Read full text",
            "L\xe4s hela":"Read full",
            "L\xe4s utdrag":"Read excerpt",
            "Titeln i Google Book Search":"Title in Google Book Search",
            "Omslagsbild fr\xe5n Google Book Search":"Cover from Google Book Search",
            "Bilden \xe4r upphovsr\xe4ttsskyddad":"The image is protected by copyright law",
            "Laddar antal citeringar":"Loading times cited",
            "begränsad åtkomst":"restricted access",
            "Artikeln i Web of Science&reg;":"Record in Web of Science&reg;",
            "Related Records&reg;":"Related Records&reg;"
        };
        return libris.getLang() == 'en' ? trans[str] : str;
    },
    openInNewWindow : function() {
        var links = $("a");
        var openString = libris.getText('(\xd6ppnas i nytt f\xf6nster)');
        var openWin = function(e) {
            var newWindow = window.open($(e.target).closest('a').attr('href'), '_blank');
            if (newWindow) {
                if (newWindow.focus) {
                    newWindow.focus();
                }
                return false;
            }
            return true;
        };
        links.each(function(i, el) {
            if ($(el).hasClass('ext') || $(el).hasClass('newWindow')) {
                var tit = $(el).attr('title');
                if (tit) {
                    if (tit.indexOf(openString) == -1) {
                        tit += ' '+openString;
                    }
                } else {
                    tit = openString;
                }
                $(el).attr('title', tit).unbind('click').bind('click', openWin);
            }
        });
    },
    confirmLogout : function() {
        $("#clearhist").bind('click', function(e) {
            return window.confirm($(e.target).attr('title') + "?");
        });
    },
    blurAnchors : function() {
        $('a').live('mousedown', function(e) {
            e.target.blur();
            e.target.hideFocus = true;
            $(e.target).css('outline','none');
        }).live('mouseout', function(e) {
            e.target.blur();
            e.target.hideFocus = false;
            $(e.target).css('outline','none');
        });
    },
    roundButtons : function() {
        $('input.roundbutton').each(function(i, el) {
            var a = $('<a>')
                .attr('title', $(el).attr('title'))
                .attr('href','#')
                .attr('class', $(el).attr('class'))
                .bind('click', function(e) {
                    $(e.target).parents('form').submit();
                    return false;
                })
                .text($(el).val())
                .append($('<span>'))
                .hover(function(e) {
                    $(e.target).addClass('hover');
                }, function(e) {
                    $(e.target).removeClass('hover');
                })
            $(el).css({
                position:'absolute',
                left:-10000
            }).after(a);
        })
    },
    focusField : function() {
        if($(".rope").length==0)
            $('.framsida #sok').select();
        /*var field = $('.startpage #sok');
        var orig = field.val();
        $('.startpage #sok').addClass('default').select().bind('blur', function(e) {
            if (field.val().length < 1) {
                field.addClass('default').val(orig);
            }
        }).bind('keydown', function(e) {
            field.removeClass('default');
        }).bind('focus', function(e) {
            if (field.val() == orig) {
                field.val('');
            }
        });*/
    },
    vertText : function(el) {
        var el = $(el);
        var d = 'data:image/svg+xml,<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">' +
                '<a xlink:href="'+el.closest('a').attr('href').replace(/\&/g,'&amp;').replace(/%3c/g,'').replace(/%3e/g,'').replace(/%22/g,'')+'" target="_top">' +
                '<text x="'+el.text().length * -7+'" y="10" fill="#888" font-family="Lucida grande" font-size="'+parseInt(el.css('font-size'))+'" transform="rotate(-90)" text-rendering="optimizeSpeed">' +
                el.text() +
                '</text></a></svg>';
        var o = $('<object>').attr({
            type : 'image/svg+xml',
            data : d
        });
        el.addClass('original').after(o);
        return o;
    },
    timeData : function() {
        var bars = $('ul.timedata li');
        bars.each(function(i, el) {
            $(el).find('span').css('height',$(el).find('a').attr('rel') + 'px');
            libris.vertText($(el).find('strong'));
            // dynamic width
            var w = Math.floor(parseInt(bars.parent().width()) / bars.length);
            $(el).css('width', w-1+'px');
        });
    },
    locationData : function() {
        $('ul.locations li').each(function(i, el) {
            var a = $(el).find('a');
            a.prepend($('<i>').css('width',a.attr('rel')+'%'));
        });
    },
    fakePie : function() {
        var img = $('#pie img');
        var src = img.attr('src');
        var ul = $('<ul>').addClass('pielinks').prependTo('#pie');
        $('area').each(function(i,el) {
            var a = $('<a>')
                .text($(el).attr('alt'))
                .attr('href', $(el).attr('href')).attr('title', $(el).attr('title'));
            ul.append($('<li>').addClass('pielink'+i).append(a));
            $(el).hover(function(e) {
                img.attr('src', 'images/pie'+(i+1)+'.gif');
                a.addClass('hover');
            }, function(e) {
                img.attr('src',src);
                a.removeClass('hover');
            });
            a.hover(function(e) {
                $(el).trigger('mouseover');
            },function(e) {
                $(el).trigger('mouseout');
            })
        })
    },
    hitlistSubmit : function() {
        var form = $('form.trafflista_form');
        form.find('input[type="submit"]').css({
            position: 'absolute',
            left: '-10000px'
        });
        form.find('select').bind('change', function(e) {
            $(e.target).closest('form').submit();
        })
    },
    getLocationString : function(reg) {
        //console.log(reg,window.location.href);
        var regex = new RegExp(reg);
        return regex.exec( window.location.href ) ? regex[1] : '';
    },
    getParamValue : function(name) {
        var tmp="[\\?&]"+name+"=([^&#]*)";
        var match = new RegExp(tmp).exec(window.location.href);
        if(match)
            return match[1];
        else
            return "";
        //return libris.getLocationString(tmp);
    },
    findPos : function(obj) {
        var curleft = curltop = 0;
        if(obj){
            if (obj.offsetParent) {
                curleft = obj.offsetLeft
                curltop = obj.offsetTop
                while (obj = obj.offsetParent) {
                        curleft += obj.offsetLeft
                        curltop += obj.offsetTop
                }
            }
        }
        return [curleft,curltop];
    },
    makeCloud : function() {
        $('ul.cloud a').each(function(i,el) {
            if (!$(el).attr('rel')) {
                return;
            }
            var opacity = 0.6*parseInt($(el).attr('rel'))/100+0.4;
            $(el).hover(function() {
                $(el).css('opacity',1)
            }, function() {
                $(el).css('opacity', opacity);
            }).trigger('mouseout');
        })
    },
    showMore : function() {
        $('.showMore').each(function(i, el) {
            $(el).show().bind('click', function(e) {
                e.preventDefault();
                $(e.currentTarget).hide().siblings('.hide').show().siblings('.showLess').show();
            })
        });
        $('.showLess').each(function(i, el) {
            $(el).bind('click', function(e) {
                e.preventDefault();
                $(e.currentTarget).hide().siblings('.hide').hide().siblings('.showMore').show();
            })
        });
    },
    expandCollapseHeadings : function() {
        $('#innehall-sekundart.sidecol h2').each(function(i,el) {
            $(el).toggle(function(e) {
                $(e.target).addClass('collapsed').next().hide();
            }, function(e) {
                $(e.target).removeClass('collapsed').next().show();
            });
            if ($(el).hasClass('collapsed')) {
                $(el).trigger('click')
            }
        });
        $('#innehall-sekundart dt').each(function(i,el) {
            if($(el).siblings(".remove_refine").size() == 0 && $(el).hasClass("default_collapsed")){
                $(el).addClass("collapsed");
            }
            $(el).toggle(function(e) {
                $(e.currentTarget).addClass('collapsed').parent().children('dd').hide();
            }, function(e) {
                var do_not_show = false;
                //$(e.currentTarget).removeClass('collapsed').parent().children('dd').attr('style','').filter('.showMore').show();
                $(e.currentTarget).removeClass('collapsed').parent().children('dd').each(function(i,el){
                    $(el).attr('style','');
                    if(!do_not_show){
                        $(el).show();
                    }
                    if($(el).hasClass("showMore")){
                        do_not_show = true;
                    }
                });
            })
            if ($(el).hasClass('collapsed')) {
                $(el).trigger('click')
            }
        });
    },
    customForms : function() {
        var form = $('.chosen_form form');
        var fields = form.find('fieldset:first-child');
        var tags = $('p.custom_fields');
        var minimize = function(el) {
            var el = $(el);
            if (el.is(':hidden')) {
                return;
            }
            var div = $('<div>').css({
                width : 349,
                height : 20,
                border: '1px solid #444',
                position: 'absolute',
                top: $(el).position().top + 16,
                left: $(el).position().left + 17
            }).insertAfter($(el));
            var tag = el.data('tag');

            el.css('visibility','hidden').slideUp(200)
            tags.append(tag.css('opacity',0).show());
            div.animate({
                top: tag.position().top - parseInt(el.height()),
                left: tag.position().left,
                width: tag.width(),
                height : tag.height(),
                opacity: .7
            },{
                duration: 300,
                complete: function() {
                    div.fadeOut(100);
                    tag.animate({
                        opacity:1
                    },{
                        duration:200
                    })
                }
            });
        }
        var maximize = function(el) {
            var el = $(el);
            if (el.is(':visible')) {
                return;
            }
            var tag = el.data('tag');
            var div = $('<div>').css({
                width : tag.width(),
                height : tag.height(),
                border: '1px solid #444',
                position: 'absolute',
                top: tag.position().top,
                left: tag.position().left + 17
            }).insertAfter(tag);

            fields.append(el);

            el.show().css({opacity:0,visibility:'visible',height:0,overflow:'hidden'});
            // DAVID: replaced 10 with variable exh
            var exh = !$.browser.msie ? 10 : 0;
            window.setTimeout(function() {
                el.animate({
                    opacity:1,
                    height:el.data('height')+exh // <-- here
                },{
                    duration:200
                })
            },50);
            // END DAVID

            tags.append(tag.css('opacity',0).show());
            div.animate({
                top: el.position().top + 20,
                left: el.position().left + 17,
                width: 349,
                height : 20,
                opacity: .7
            },{
                duration: 200,
                complete: function() {
                    div.fadeOut(100);
                    tag.animate({
                        opacity:0
                    },{
                        duration:150
                    })
                }
            });
            $(el).data('tag').hide();
        };
        var hide = function(el) {
            var el = $(el);
            tags.append(el.data('tag').show().css({
                opacity:1,
                visibility:'visible'
            }));
            el.hide();
        };
        var show = function(el) {
            var el = $(el);
            fields.append(el.show().css({
                opacity:1,
                visibility:'visible',
                height: el.data('height')
            }));
            el.data('tag').hide();
        };
        fields.find('dl').each(function(i, el) {
            var tag = $('<strong>');
            var label = "";
            $(el).find('label').each(function(i2, el2){
                label += $(el2).text() + " &amp; ";
            });
            label = label.substring(0,label.length-7);
            //console.log(label);
            //var innerTag = $('<span>').html($(el).find('label').text().replace(/\s/,'&nbsp;').replace(/\//,'\/')).appendTo(tag);
            var innerTag = $('<span>').html(label.replace(/\s/,'&nbsp;').replace(/\//,'\/')).appendTo(tag);
            var add = $('<a>').attr({
                href : '#',
                title : libris.getText('Lägg till')
            }).text(libris.getText('Lägg till')).bind('click', function(e) {
                e.preventDefault();
                maximize($(el));
            });
            tag.append(add);
            $(el).data('tag', tag);
            $(el).data('height', $(el).height())
            var close = $('<a>').addClass('closecross').attr({
                href : '#',
                title : libris.getText('Ta bort')
            }).text(libris.getText('Ta bort')).bind('click', function(e) {
                libris.clearInputSelectChildren($(e.target).closest('dl'));
                e.preventDefault();
                minimize($(e.target).closest('dl'))
            });
            $(el).find('dd input, dd select').filter(':last').after(close);
            if ($(el).hasClass('collapsed')) {
                hide(el);
            } else {
                show(el);
            }
        });
        form.find('a.reset').bind('click', function(e) {
            fields.find('dl').each(function(i,el){
                if ($(el).hasClass('collapsed')) {
                    hide(el);
                } else {
                    show(el);
                }
            })
        });
        form.find('a.clear').bind('click',function(e){
            fields.find('dl input').each(function(i,el){
                $(el).val("");
            });
            fields.find('dl select').each(function(i,el){
                $(el).find("option:first").attr('selected', 'selected');
            });
            return false;
        });
    },

    clearInputSelectChildren : function(inputSelElementParent){
        
        inputSelElementParent.find("select").each(function(i,el){
                $(el).find("option:first").attr('selected', 'selected');
            });
        
        inputSelElementParent.find('input').each(function(i,el){
            $(el).val("");
        });
        
    },

    growl : function(options) {
        var o = $.extend({
            timeout : 6000,
            x : 0,
            y : 0,
            onHide : function(){},
            onShow : function(){}
        }, options);
        var g = $('#growl').hide().css({
            left: o.x,
            top: o.y - 5,
            opacity: 0
        });
        $(document).bind('ready', function() {
            g.show().animate({
                top: o.y,
                opacity: 1
            },{
                duration: 200,
                complete: function() {
                    o.onShow.apply(g[0]);
                }
            }).find('a.close').bind('click', function(e) {
                e.preventDefault();
                g.animate({
                    top: o.y + 5,
                    opacity: 0
                },{
                    duration: 500,
                    complete : function() {
                        o.onHide.apply(g[0]);
                        g.hide().css({
                            top: o.y-5
                        })
                    }
                })
            });
            window.setTimeout(function() {
                g.find('a.close').trigger('click');
            },o.timeout);
        });
    },
    savePosts : function() {
        var saved = [];
        var bar = $('#userbar');
        var counter = $('<a>').appendTo($('<div>').addClass('counter').appendTo(bar)).attr('href','#').bind('click', function(e) {
            e.preventDefault();
            if (saved.length > 0) {
                var html = '';
                for (var i=0; saved[i]; i++) {
                    html+=saved[i].text();
                    html+='\n---------------------------\n';
                }
                window.alert(html);
            }
        });
        var update = function() {
            if(bar.is(':hidden')) {
                bar.fadeIn(200);
            }
            if (saved.length == 0) {
                counter.addClass('empty');
            } else {
                counter.removeClass('empty');
            }
            counter.text(libris.getText('Mejla: (') + saved.length.toString() + ')');
        }
        $('table.trafftabell tr').each(function(i, el) {
            var el = $(el);
            var saver = $('<a>').addClass('saver').attr({
                href: '#',
                title: libris.getText('Spara post'),
                alt: libris.getText('Spara post')
            }).text(libris.getText('Spara')).bind('click', function(e) {
                e.preventDefault();
                var saveText = el.find('td:eq(1) ul li:lt(2)');
                if (saver.hasClass('saved')) {
                    saver.hide().removeClass('saved').text(libris.getText('Spara'))
                    for(var i=0; saved[i]; i++) {
                        if (saved[i].html() == saveText.html()) {
                            saved.splice(i,1);
                            update();
                            return;
                        }
                    }
                }
                saver.addClass('saved').show().text(libris.getText('Sparad'));
                saved.push(saveText);

                var div = $('<div>').css({
                    position: 'absolute',
                    top: saver.offset().top,
                    left: saver.offset().left-5,
                    width: 70,
                    height: saver.height(),
                    border: '1px solid #666'
                }).appendTo('body');
                div.animate({
                    top: counter.offset().top,
                    left: counter.offset().left,
                    width: 80,
                    height: 20,
                    opacity:.7
                },{
                    duration: 300,
                    complete: function() {
                        update();
                        div.fadeOut(200,function() {
                            $(this).remove()
                        })
                    }
                })

            }).append($('<span>')).hover(function(e) {
                if (saver.hasClass('saved')) {
                    saver.text(libris.getText('Ta bort'))
                }
            }, function(e) {
                if (saver.hasClass('saved')) {
                    saver.text(libris.getText('Sparad'))
                }
            })
            el.find('td .post').append(saver);
            el.hover(function(e) {
                saver.show();
            },function() {
                if(!saver.hasClass('saved')) {
                    saver.hide()
                }
            })
        });
        update();
    },

    linksAmr : function(){
        $(".linksamr").each(function(){
            $(this).html("<p class=\"loading\">"+libris.getText("Laddar antal citeringar")+"</p>");
            $.ajax({
                dataType: "xml",
                url: "linksamr_proxy.jspx",
                data: $(this).attr("title"),

                error: function(xmlhttpreq, textStatus, errorThrown){
                    $(".linksamr").html("");
                },
                success: function(data){libris.writeLinksAmr(data);}
            });
            $(this).attr("title","");
        });
    },

    writeLinksAmr : function(data){
        timesCited="";
        citingArticlesURL="";
        relatedRecordsURL="";
        sourceURL="";
        $("val",data).each(function(){
            if($(this).attr("name")=='timesCited'){
                timesCited=$(this).text();
            }
            if($(this).attr("name")=='citingArticlesURL'){
                citingArticlesURL=$(this).text();
            }
            if($(this).attr("name")=='relatedRecordsURL'){
                relatedRecordsURL=$(this).text();
            }
            if($(this).attr("name")=='sourceURL'){
                sourceURL=$(this).text();
            }
        });
        if(timesCited!=''){
            if(libris.getLang() == 'en'){
                $(".linksamr").html("<p>Times Cited: " + timesCited + "</a> <span class=\"beskrivning\">(Web of Science&reg;)</span></p>");
            }else{
                $(".linksamr").html("<p>Citerad " + timesCited + "</a>" +  (timesCited*1>1?" gånger":" gång") + " <span class=\"beskrivning\">(Web of Science&reg;)</span></p>");
            }
        }else{
            $(".linksamr").html("<p>"+libris.getText("Inga citeringar hittades")+"</p>");
        }
        restAccesTitle=libris.getText("begränsad åtkomst").substr(0,1).toUpperCase()+libris.getText("begränsad åtkomst").substr(1);
        if(citingArticlesURL!=''||relatedRecordsURL!=''||relatedRecordsURL!=''){
            citingArticlesURLText = "";
            if(citingArticlesURL!=''){
                if(libris.getLang() == 'en'){
                    citingArticlesURLText = "<dd><a href=\""+citingArticlesURL+"\" class=\"newWindow\" title=\""+restAccesTitle+"\">Times Cited: " + timesCited + "</a></dd>";
                }else{
                    citingArticlesURLText = "<dd><a href=\""+citingArticlesURL+"\" class=\"newWindow\" title=\""+restAccesTitle+"\">Citerad " + timesCited +  (timesCited*1>1?" gånger":" gång")+"</a></dd>";
                }
            }
            $("#external_links").after("<dl><dt>Web of Science&reg; <span>("+libris.getText("begränsad åtkomst")+")</span></dt>"+
                (sourceURL!=''?"<dd><a href=\""+sourceURL+"\" class=\"newWindow\" title=\""+restAccesTitle+"\">"+libris.getText("Artikeln i Web of Science&reg;")+"</a></dd>":"")+
                citingArticlesURLText+
                (relatedRecordsURL!=''?"<dd><a href=\""+relatedRecordsURL+"\" class=\"newWindow\" title=\""+restAccesTitle+"\">"+libris.getText("Related Records&reg;")+"</a></dd>":"")+
                "</dl>");
            libris.expandCollapseHeadings();
            libris.openInNewWindow();
        }
    },
    
    spell : function (){
        if(libris.getParamValue("spell")=='true'){
          $.ajax({
                dataType: "xml",
                url: "spell_proxy.jspx",
                data: "key=swepub&query="+libris.getParamValue("q"),

                error: function(xmlhttpreq, textStatus, errorThrown){
                },

                success: function(data){libris.writeSpell(data);}

                //error: function(xmlhttpreq,textStatus, errorThrown){$trep.writeLoadError();}
            });
        }

    },

    writeSpell : function(data){
        if($("suggestion",data).children("term").length > 0){

            var display = "";
            var hrefQ = "";
            $("suggestion term",data).each(
                function(){
                    if($(this).attr("changed") == 'true'){
                        display += "<em>"+$(this).text() + "</em> ";
                    }else{
                        display += $(this).text() + " ";
                    }
                    hrefQ += $(this).text() + " ";
                }
            );
            display = jQuery.trim(display);
            hrefQ = jQuery.trim(hrefQ);

            $("#felstavningskontroll").html(libris.getText("Menade du")+" <a href=\"hitlist?q=" + encodeURIComponent(hrefQ) + "&amp;spelled=true\">"+display+"</a> ?");
        }
    },


    myposts : function(){

        $("#mypostsformButtons").append(
            $("<li>").addClass("leftfloat").add(
                $("<a>").attr({'id':'selectAll','name':'unselect'}).addClass("imitate_link").text((libris.getText("Avmarkera alla"))).bind('click',function(e){
                    libris.myposts_un_selectall(e);
                }
        )));
	},

	myposts_un_selectall : function(e){
	    if($(e.target).attr('name') == "select"){
	        $(e.target).attr('name','unselect').text(libris.getText("Avmarkera alla"));
	        $("input[name='post']").attr("checked",true);
	    }else{
            $(e.target).attr('name','select').text(libris.getText("Markera alla"));
	        $("input[name='post']").attr("checked",false);
	    }
    },



    initToggleDescription : function(){
        $("a.contentexpand").each(function(i,el){
            $(el).show().addClass("closed");
            $(el).parents("li").find(".graruta i").css("left",(el.offsetLeft+15)+"px");
            $(el).bind('click',function(e){
                libris.toggleDesciption($(e.target));
                return false;
            });
            $(el).parents("li").find(".graruta .close").css("cursor","pointer").attr("title",libris.getText("Stäng")).bind("click",function(e){
                libris.toggleDesciption($(e.target).parents("li").find("a.contentexpand"));
                return false;
            });
        });
    },

    toggleDesciption : function($target){
        if($target.hasClass('closed')){
            $target.removeClass('closed').parents("li").find(".graruta").show();
        }else{
            $target.addClass('closed').parents("li").find(".graruta").hide();
        }
    },
    cite : false,
    domReady : function(e) {
        libris.roundButtons();
        libris.openInNewWindow();
        libris.confirmLogout();
        libris.focusField();
        libris.timeData();
        libris.blurAnchors();
        libris.locationData();
        libris.fakePie();
        libris.hitlistSubmit();
        libris.showMore();
        libris.makeCloud();
        libris.expandCollapseHeadings();
        libris.customForms();
        linkToolOpener.init();
        //libris.savePosts();
        if($("#trafflista").length > 0){
            hitlist.init();
        }
        if($("#fullpost").length > 0){
            showrecord.init();
            libris.linksAmr();
        }
        
        if(libris.cite){
            libris.cite.init();
        }
        libris.spell();
        cbb.init();
        /*
        $('table#pie').visualize({
            type: 'pie',
            height: 180,
            colors: ['#ddd']
        });
        $('table#pie').hide();
        */

    }
}

/* new addevent for backwards-compability */
var addEvent = function(element, ev, callback) {
    $(element).bind(ev, function(e) {
        callback.apply(e.target);
    });
}

/* Needs refactor */
var hitlist = {

    doSubmit : true,

    init : function(){
        if (!document.getElementById || !document.createElement || !document.appendChild) {return false;}

        libris.initToggleDescription();

        var list = document.getElementById("toollist");
        if(list){
            if(list.className.indexOf("pilupp") < 0){
                return false;
            }
            var child = list.firstChild;
            var children = new Array();
            var tmp=0;
            while(list.firstChild){

                children[tmp] = list.firstChild;
                list.removeChild(children[tmp]);
                tmp++;
            }
            //list.removeChild(toolsdiv);
            var li = document.createElement("li");

            li.className = "noborder leftfloat select_all";

            var selectAll = document.createElement("a");
            selectAll.setAttribute("id","selectAll");
            selectAll.setAttribute("name","select");

            selectAll.className="imitate_link";

            var linktext = document.createTextNode("Markera alla");
            selectAll.appendChild(linktext);
            li.appendChild(selectAll);

            list.appendChild(li);
            var link = document.getElementById("selectAll");
            //addEvent(link,'click',function(){hitlist.un_selectall(link);});
            // changed to jQuery
            $(link).bind('click', function(e) {
                hitlist.un_selectall(e.currentTarget);
            });
            // endchange
            for(i = 0; i<children.length; i++){
                    list.appendChild(children[i]);
            }
        }

        var f = document.getElementById("trafform");
        if(f){
            f.onsubmit = function(){return hitlist.doSubmit;}
        }
        var exportBtn = document.getElementById("tool_export");
        if(exportBtn){
            exportBtn.onclick=function(){hitlist.setDoSubmit(true);}
        }
        var mailBtn = document.getElementById("tool_email");
        if(mailBtn){
            mailBtn.onclick=function(){hitlist.setDoSubmit(true);}
        }
        var saveBtn = document.getElementById("tool_feed");
        if(saveBtn){
            saveBtn.onclick=function(){hitlist.setDoSubmit(true);}
        }
        var saveBtn = document.getElementById("tool_save");
        if(saveBtn){
            saveBtn.onclick=function(){hitlist.openHistory();}
        }
    },

    un_selectall : function(me){
        var posts;
        if(me.name == "select"){
            me.name = "unselect";
            me.firstChild.data = "Avmarkera alla";
            posts = document.getElementsByName("post");
            if(posts){
                for(i = 0; i < posts.length; i++){
                    posts[i].checked=true;
                }
            }
        }else{
            me.name = "select";
            me.firstChild.data = "Markera alla";
            posts = document.getElementsByName("post");
            if(posts){
                for(i = 0; i < posts.length; i++){
                    posts[i].checked=false;
                }
            }
        }
    },

    openHistory : function(){
        var posts = document.getElementsByName("post");
        var nbrCheckedPosts = 0;
        if(posts.length == 1){
            nbrCheckedPosts = 1;
            posts[0].checked = true;
        }else{
            for(var i = 0; i < posts.length; i++){
                if(posts[i].checked){
                    nbrCheckedPosts++;
                }
            }
        }
        if(nbrCheckedPosts == 0){
            alert("Du har inte valt n\xe5gon post att spara.");
            hitlist.setDoSubmit(false);
        }else{
            hitlist.setDoSubmit(true);
        }
    },

    setDoSubmit : function(bool){
        hitlist.doSubmit = bool;
    }
};

/* needs refacor */
var linkToolOpener = {

    init : function(){
        if (!document.getElementById || !document.createElement || !document.appendChild){return false;}

        var link = document.getElementById("linkToolLink");
        if(!link){
            return false;
        }

        link.className += " contentexpand closed";
        $(link).bind('click', function(){linkToolOpener.toggleLink(); return false;});

        var closer = document.getElementById("linkclose");
        $(closer).bind('click', function(){linkToolOpener.toggleLink(); return false;});

        var thelink = document.getElementById("thelink");
        //$(thelink).bind('click',function(){ alert(this);linkToolOpener.toggleLink(); return false; } );
    },

    toggleLink : function(){

        var link = document.getElementById("linkToolLink");
        var div = document.getElementById("linkdiv");

        if(div.style.display != 'block'){
            var pos = libris.findPos(link);
            div.style.top = pos[1] + 40 + 'px';
            var xpos = pos[0] - 380;
            xpos = (xpos < 0) ? 0 : xpos;
            div.style.left = xpos + 'px';

            div.style.display = 'block';
            link.className = link.className.replace(" closed","");
            var pointer = document.getElementById("pointer_blueLink");

            if(pointer){
                pointer.style.left = pos[0] - xpos + 60 + 'px';

            }

        }else{
            div.style.display = 'none';
            if(link.className.indexOf("closed") == -1){
                link.className += " closed";
            }
        }
    },

    repositionLinkdiv : function(){

        var link = document.getElementById("linkToolLink");
        var div = document.getElementById("linkdiv");

        if(div.style.display == 'block'){

            var pos = libris.findPos(link);
            div.style.top = pos[1] + 40 + 'px';
            var xpos = pos[0] - 380;
            xpos = (xpos < 0) ? 0 : xpos;
            div.style.left = xpos + 'px';

            var pointer = document.getElementById("pointer_blueLink");
            if(pointer){
                pointer.style.left = pos[0] - xpos + 60 + 'px';
            }

        }
    }
};

var cbb = {
    init : function() {
        // Check that the browser supports the DOM methods used
	if (!document.getElementById || !document.createElement || !document.appendChild){return false;}
        var oElement, oOuter, oI1, oI2, tempId;
        // Find all elements with a class name of cbb
	var arrElements = document.getElementsByTagName('*');
	var oRegExp = new RegExp("(^|\\s)cbb(\\s|$)");

	for (var i=0; i<arrElements.length; i++) {
            // Save the original outer element for later
            oElement = arrElements[i];

            if (oRegExp.test(oElement.className)) {
                // Create a new element and give it the original element's class name(s) while replacing 'cbb' with 'cb'
                oOuter = document.createElement('div');
		oOuter.className = oElement.className.replace(oRegExp, '$1cb$2');

                // Give the new div the original element's id if it has one
		if (oElement.getAttribute("id")) {
                    tempId = oElement.id;
                    oElement.removeAttribute('id');
                    oOuter.setAttribute('id', '');
                    oOuter.id = tempId;
                    //added by Henrik
                    //oElement.id = tempId;
                    //end added ny Henrik
		}

                // Change the original element's class name and replace it with the new div
		oElement.className = 'i3';
		oElement.parentNode.replaceChild(oOuter, oElement);

                // Create two new div elements and insert them into the outermost div
		oI1 = document.createElement('div');
		oI1.className = 'i1';
		oOuter.appendChild(oI1);
		oI2 = document.createElement('div');
		oI2.className = 'i2';
		oI1.appendChild(oI2);
                // Insert the original element
		oI2.appendChild(oElement);
                // Insert the top and bottom divs
		cbb.insertTop(oOuter);
		cbb.insertBottom(oOuter);
            }
        }

    },
    insertTop : function(obj) {
        var oOuter, oInner;
	// Create the two div elements needed for the top of the box
	oOuter=document.createElement("div");
	oOuter.className="bt"; // The outer div needs a class name
	oInner=document.createElement("div");
	oOuter.appendChild(oInner);
	obj.insertBefore(oOuter,obj.firstChild);
    },
    insertBottom : function(obj) {
        var oOuter, oInner;
	// Create the two div elements needed for the bottom of the box
	oOuter=document.createElement("div");
	oOuter.className="bb"; // The outer div needs a class name
	oInner=document.createElement("div");
	oOuter.appendChild(oInner);
	obj.appendChild(oOuter);
    }
};

var showrecord = {

    links : null,

    init : function(){
        if (!document.getElementById || !document.createElement || !document.appendChild){ return false;}

        var closer = document.getElementById("recinfoCloser");
        if(closer){
            closer.onclick = function(){ showrecord.closeDescription(); return false; };
        }
        showrecord.links = document.getElementsByName("descrLink");
        for(i=0; i<showrecord.links.length; i++){
            showrecord.links[i].onclick = function(){ showrecord.toggleDescription("recinfo_container"+this.id.replace("descrLink",""),this); return false; };
        }

        $("dt.openclose").bind('click',showrecord.openCloseSidecolItem);
        $("dt.openclose").bind('mouseover',function(){$(this).css("cursor","pointer")});
        $("dt.openclose").removeClass("minus");
        $("dt.openclose").addClass("plus");
        var opencloses = $("dt.openclose");
        for(i=0; i<opencloses.length;i++){
            $("dd",opencloses[i].parentNode).hide();
        }

        if(libris.getParamValue('scrollto') != ''){

            var pos = libris.findPos($("#"+libris.getParamValue('scrollto'))[0]);
            window.scrollTo(0,pos[1]);

        }
        showrecord.bindImageHoverWithResourceOrEnlarge();

    },

    bindImageHoverWithResourceOrEnlarge : function(){

        if($("div.image a.resourcelink")[0]){
          $("div.image img").hover(function(){$("div.image li.resourcelink").addClass("hover")}, function(){$("div.image li.resourcelink").removeClass("hover")});
        }else if($("div.image li.enlarge a")[0]){
            $("div.image img").hover(function(){$("div.image li.enlarge").addClass("hover")}, function(){$("div.image li.enlarge").removeClass("hover")});
        }
    },

    openCloseSidecolItem : function(){

        if(this.className.indexOf("minus") == -1){

            $(this).removeClass("plus");
            $(this).addClass("minus");
            $("dd",this.parentNode).show();
        }else{

            $(this).removeClass("minus");
            $(this).addClass("plus");
            $("dd",this.parentNode).hide();
        }
        return false;
    },

    closeDescription : function(){
        var divToHide = document.getElementById("recinfo");
        if(divToHide){
            divToHide.className = divToHide.className.replace("show","");
        }
        showrecord.closeAllDescriptions();
        linkToolOpener.repositionLinkdiv();
    },

    closeAllDescriptions : function(){
        for(i=0; i<showrecord.links.length; i++){
            var divTmp = document.getElementById("recinfo_container"+showrecord.links[i].id.replace("descrLink",""));
            if(divTmp){
                if(divTmp.className.indexOf("hide") == -1){
                    divTmp.className += " hide";
                }
            }
            if(showrecord.links[i].className.indexOf("closed")==-1){
                showrecord.links[i].className += " closed";
            }
         }
    },

    toggleDescription : function(id,link){

        var divToToggle = document.getElementById("recinfo");

        var contentDiv = document.getElementById(id);

        if(divToToggle && contentDiv){
            //St�ng
            if(contentDiv.className.indexOf("hide") == -1){

                if(divToToggle.className.indexOf("show") != -1){
                    divToToggle.className = divToToggle.className.replace("show","");
                }
                showrecord.closeAllDescriptions();
            //�ppna
            }else{
                showrecord.closeAllDescriptions();

                if(link.className.indexOf("closed")!=-1){
                    link.className = link.className.replace("closed","");
                    link.className = link.className.replace("  "," ");
                }
                if(divToToggle.className.indexOf("show") == -1){
                    divToToggle.className += " show";
                    divToToggle.className = divToToggle.className.replace("  "," ");
                }
                if(contentDiv.className.indexOf("hide") != -1){
                    contentDiv.className = contentDiv.className.replace("hide","");
                }
                var xpos = link.offsetLeft;
                var pointer = document.getElementById("recinfoPointer");
                if(pointer.style){
                    pointer.style.left = xpos + 15 + 'px';
                }
            }
        }
        linkToolOpener.repositionLinkdiv();
        return false;
    }
};


var googleBooks = {

    init : function(){
        if($(".kortvyhoger")[0]){
          if($(".kortvyhoger")[0].title){
              var title = $(".kortvyhoger")[0].title;
              if(title.indexOf("gb_isbn_")>=0){
                  googleBooks.getcover = true;
              }
          }
        }
        googleBooks.id = document.getElementById('external_links').title;
        googleBooks.callback = "googleBooks.getCoverLink";
    },

    full : libris.getText("L\xe4s hela texten"),
    full_short : libris.getText("L\xe4s hela"),
    partial : libris.getText("L\xe4s utdrag"),
    partial_short : libris.getText("L\xe4s utdrag"),
    title_in : libris.getText("Titeln i Google Book Search"),
    cover_from: libris.getText("Omslagsbild fr\xe5n Google Book Search"),
    copyright : libris.getText("Bilden \xe4r upphovsr\xe4ttsskyddad"),

    getcover : false,
    getlink : true,

    getCoverLink : function(booksInfo){
        if(googleBooks.getcover){

            googleBooks.getCover(booksInfo);
        }
        if(googleBooks.getlink){

            googleBooks.getLink(booksInfo);
        }
    },

    getLink : function(booksInfo){
        for (i in booksInfo) {
            if(booksInfo[i].info_url){
                var dl = $("#external_links")[0];
                var dt = document.createElement("dt");
                dt.innerHTML = googleBooks.title_in+":";
                var dd = document.createElement("dd");
                var book = booksInfo[i];
                // Add a link to each book's information page
                var a = document.createElement("a");
                a.href = book.info_url;
                a.className="newWindow";
                // Alert the user that the book is not previewable
                //noview", "partial", or "full
                var image_title = "";

                /*/var book_title = $("h1").text();
                if(book_title.length > 20){
                    book_title = book_title.substring(0,20)+"...";
                }*/

                var book_title = $("p.brodsmulor span.nolink").text();

                var full_a = null;
                if (book.preview == "noview"){
                    a_text = "";
                }
                else if(book.preview == "partial" || book.preview == "full"){

                    a.href += "&printsec=frontcover";
                    $(a).addClass("resourcelink");
                    if (book.preview == "partial"){
                        a_text = googleBooks.partial;
                    }else{
                        a_text = googleBooks.full;
                    }

                    if(!$('.fulltext_link')[0]){
                        var linkdl = $('.media.fulltext')[0];
                        if(!linkdl){
                            linkdl = document.createElement("dl");
                            linkdl.className = "media fulltext";
                            if($(".linklist.related_links")[0]){
                                $(".linklist.related_links").before(linkdl);
                            }else{
                                $("ul.media_type").before(linkdl);
                            }
                        }
                        var linkdd = document.createElement("dd");
                        full_a = document.createElement("a");
                        full_a.href = a.href;
                        full_a.className="fulltext_link newWindow";
                        if (book.preview == "partial"){
                            full_a.innerHTML = googleBooks.partial;
                        }else{
                            full_a.innerHTML = googleBooks.full;
                        }
                        var span = document.createElement("span");
                        span.className="beskrivning fulltext_link_beskr";
                        span.innerHTML = " (Google Book Search)";
                        linkdd.appendChild(full_a);
                        linkdd.appendChild(span);
                        linkdl.appendChild(linkdd);
                    }

                }
                a_text += a_text != '' ? "." : "";
                a.setAttribute("title",googleBooks.title_in+". "+a_text);
                //a.innerHTML = a_text;
                a.innerHTML = book_title;

                dd.appendChild(a);
                $(dd).prependTo(dl);
                $(dt).prependTo(dl);

                if($('div.image')[0] && (book.preview == "partial" || book.preview == "full")){

                    hasNonGoogleCover = $(".kortvyhoger div.imagegraruta a.enlarge")[0] ? true : false;

                    var acopy = $(a).clone()[0];
                    if(!$(".kortvyhoger div.imagegraruta a.resourcelink")[0]){
                        var image_cover = $('img', '.kortvyhoger div.image').clone()[0];
                        if(image_cover){
                            //Add link to GBS to cover image, if cover comes from GBS
                            if(!hasNonGoogleCover){
                              acopy.innerHTML = "";
                              acopy.appendChild(image_cover);
                              $('div.image div.imagegraruta').prepend(acopy);
                              $('.kortvyhoger div.imagegraruta')[0].removeChild($('a', '.kortvyhoger div.image')[0]);
                            }
                        }
                    }
                    //Add link to GBS to the ul-list under the image
                    if(!$(".kortvyhoger div.image li.resourcelink a")[0]){
                      var acopy2 = $(acopy).clone()[0];
                      acopy2.innerHTML = book.preview == "partial" ? googleBooks.partial_short : googleBooks.full_short;
                      $('div.image li.resourcelink').append(acopy2);
                    }
                    if(!hasNonGoogleCover){
                      showrecord.bindImageHoverWithResourceOrEnlarge();
                    }
                }
            }
            break;
        }
        libris.openInNewWindow();
    },

    getCover : function(booksInfo){
        for (i in booksInfo) {
            if(booksInfo[i].thumbnail_url){
                $(".kortvyvanster").removeClass("noimage");
                var div = $(".kortvyhoger")[0];

                var imageDiv = document.createElement("div");
                imageDiv.className = "image";
                var imageGraDiv = document.createElement("div");
                imageGraDiv.className = "imagegraruta";

                var book = booksInfo[i];

                // Display a thumbnail of the book's cover
                var img = document.createElement("img");
                img.src = book.thumbnail_url;
                img.setAttribute("alt", googleBooks.cover_from);
                $(img).css("margin","2em 0 2em 0");
                if (book.preview == "partial" || book.preview == "full"){
                    var link = googleBooks.getLinkElement(book);
                    $(link).addClass("resourcelink");
                    link.appendChild(img);
                    //$(link).css("margin","auto");
                    imageGraDiv.appendChild(link);
                    var ul = document.createElement("ul");
                    ul.innerHTML = "<li class=\"resourcelink\"></li><li></li>"
                    imageGraDiv.appendChild(ul);
                }else{
                    img.title = googleBooks.cover_from;
                    //$(img).css("margin","auto");
                    imageGraDiv.appendChild(img);
                }
                imageDiv.appendChild(imageGraDiv);
                var cr = document.createElement("p");
                cr.className = "copyright";
                cr.innerHTML = "<a href=\"http://librishelp.libris.kb.se/help/copyright_swe.jsp\" title=\"" + googleBooks.copyright + "\">&#169;</a>";

                imageDiv.appendChild(cr);
                div.appendChild(imageDiv);
            }
            break;
        }
        openInNewWindow.init();
    },

    getLinkElement : function(book){
        var a = document.createElement("a");
        a.href = book.info_url+"&printsec=frontcover";
        a.className="newWindow";
        //noview", "partial", or "full"
        var image_title = "";
        if (book.preview == "noview"){
            //Titeln
            /*var tit = $("h1").text();
            if(tit.length > 20){
                a_text = $("h1").text().substring(0,20)+"...";
            }else{
                a_text = $("h1").text();
            }*/
            //Titeln
            var tit = $("p.brodsmulor span.nolink").text();

            a_text = tit;

        }
        if (book.preview == "partial"){
            a_text = googleBooks.partial;
        }
        if (book.preview == "full"){
            a_text = googleBooks.full;
        }
        a.setAttribute("title",googleBooks.title_in+". "+a_text+".");
        return a;
    },

    writeJsonScript : function(isxn, callback) {

        var jsonScript = document.getElementById("jsonScript");
        if (jsonScript) {
          jsonScript.parentNode.removeChild(jsonScript);
        }
        var scriptElement = document.createElement("script");
        scriptElement.setAttribute("id", "jsonScript");
        scriptElement.setAttribute("src",
            "http://books.google.com/books?bibkeys=" +
            escape(isxn) + "&jscmd=viewapi&callback=" + callback);
        scriptElement.setAttribute("type", "text/javascript");
        $('head')[0].appendChild(scriptElement);
    }
};
