// Version 0.2
//
// ==UserScript==
// @name          Peninsula Library System Amazon.com Lookup
// @namespace     http://loonyone.livejournal.com
// @description   On Amazon, display book availability in the Peninsula Library System
// @include       *.amazon.*/*
// ==/UserScript==
// Based on Palo Alto Library lookup script 
//
// Version 0.2 - Added/Fixed In Transit/On Hold/In Storage

// Version 0.1 - First release

(

function()
{
var libraryUrlPattern = 'http://catalog.plsinfo.org/ipac20/ipac.jsp?index=ISBN&term=';
var libraryName = 'Peninsula Library System';
var libraryAvailability = /In Library/;
var libraryRecentAvailability = /Recent Checkin/;
var libraryStorage = /Storage/;
var libraryTransit = /In Transit/;
var libraryOnHold = /(On Hold Shelf|[Bb]eing [Hh]eld)/;
var libraryDueBack = /(\d{2} [A-Z][A-Z][A-Z] \d{2})/;
var notFound = /Sorry, could not find anything matching/

var libraryLookup = 
    {
    insertLink: function(isbn, hrefTitle, aLabel, color )
        {
        var div = origTitle.parentNode;
        var title = origTitle.firstChild.nodeValue;

        var newTitle = document.createElement('b');
        newTitle.setAttribute('class','sans');

        var titleText = document.createTextNode(title);
        newTitle.appendChild(titleText);
        
        var br = document.createElement('br');

        var link = document.createElement('a');
        link.setAttribute ( 'title', hrefTitle );
        link.setAttribute('href', libraryUrlPattern + isbn);
        link.setAttribute('style','color: ' + color);

        var label = document.createTextNode( aLabel );

        link.appendChild(label);

        div.insertBefore(newTitle, origTitle);
        div.insertBefore(br, origTitle);
        div.insertBefore(link, origTitle);
        div.removeChild(origTitle);
        },

    doLookup: function ( isbn )
        {
        GM_xmlhttpRequest
            ({
            method:'GET',
            url: libraryUrlPattern + isbn,
            onload:function(results)
                {
                page = results.responseText;
                if ( notFound.test(page) )
                    {
                    var due = page.match(notFound)[1]
                    libraryLookup.insertLink (
                        isbn,
                        "Not carried",
                        "Not in Library",
						"red"
                        );
                    }
                else if ( libraryAvailability.test(page) )
                    {
                    libraryLookup.insertLink (
                      	isbn,
                 	    "On the shelf now!",
                        "In Library",
					    "green"
                         );
                    }
                else if ( libraryRecentAvailability.test(page) )
                    {
                    libraryLookup.insertLink (
                      	isbn,
                 	    "Recent Checkin",
                        "New In Library",
					    "green"
                         );
                    }
                else if ( libraryStorage.test(page) )
                    {
                    libraryLookup.insertLink (
                      	isbn,
                 	    "In Storage",
                        "In Storage",
					    "green"
                         );
                    }
                else if ( libraryTransit.test(page) )
                    {
                    libraryLookup.insertLink (
                      	isbn,
                 	    "In Transit",
                        "In Transit",
					    "#AA7700"
                         );
                    }
                else if ( libraryOnHold.test(page) )
                    {
                    libraryLookup.insertLink (
                      	isbn,
                 	    "Being Held",
                        "On Hold",
					    "green"
                         );
                    }
                else if ( libraryDueBack.test(page) )
                    {
                    var due = page.match(libraryDueBack)[1]
                    libraryLookup.insertLink (
                        isbn,
                        "Due: ",
                        "Due back",
						"#AA7700"  // dark yellow
                        );
                    }
				else
					{
                    libraryLookup.insertLink (
                        isbn,
                        "Error",
                        "Error checking " + libraryName + " Library",
						"orange"
                        );
					}
                }
            });
        }


    }

try 
    { var isbn = window._content.location.href.match(/\/(\d{7,9}[\d|X])\//)[1];  }
catch (e)
    { return; }

var origTitle = document.evaluate("//b[@class='sans']", document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null ).singleNodeValue;

if ( ! origTitle )
  { return; }

libraryLookup.doLookup(isbn);

}
)();
