// recent-flickr.js
// Copyright 2006 Kawasaki Yusuke <u-suke [at] kawa.net>

//  2006/01/31  first version
//  2006/02/04  iCab bug
//  2006/02/06  iCab/OmniWeb bug
//  2006/04/01  stable version
//  2006/05/01  JSON version

var MAX_FLICKR = 9;
var FLICKR_JSON = "http://www.kawa.net/rss/recent-flickr.json";

function flickr_update ( data, area ) {
    if ( ! data ) return;
    var entry = data.rss.channel.item;
    if ( ! entry ) return;
    if ( entry.title ) entry = [ entry ];
    if ( entry.length > MAX_FLICKR ) entry.length = MAX_FLICKR;

    var frag = document.createDocumentFragment();

    for( var i=0; i<entry.length; i++ ) {
        var img = document.createElement( "img" );
        var atag = document.createElement( "a" );

        var thumb_url = entry[i]["media:thumbnail@url"];
        if ( ! thumb_url ) continue;    // 

        var title = entry[i]["title"];
        if ( title ) {
            img.alt = title;
            atag.title = title;
        }
/*
        var mtext = entry[i]["media:text"];
        if ( mtext ) {
            var m2 = mtext.match( /<p>([^\<\>]*)(<\/p>|<br)/ );
            if ( m2 ) {
                var mesg = RegExp.$1;
                img.alt = mesg;
                atag.title = mesg;
            }
        }
*/
        atag.target = "_blank";
        var link = entry[i].link;
        atag.href = link;

        img.src    = thumb_url;
        img.width  = entry[i]["media:thumbnail@width"];
        img.height = entry[i]["media:thumbnail@height"];
        img.border = 0;
        img.style.margin = "2px";
        if ( link ) {
            atag.appendChild( img );
            frag.appendChild( atag );
        }
        if ( i % 3 == 2 ) {
            var brtag = document.createElement( "br" );
            frag.appendChild( brtag );
        }
    }
    if ( ! frag.firstChild ) return;  // no images

    flickr_display( area, frag );
};

function flickr_load ( area ) {
    flickr_display( area, "Now loading..." );
    var http = new JKL.ParseXML.JSON( FLICKR_JSON );
    var func = function ( data ) {
        flickr_update( data, area );
    };
    var err = function ( err ) {
        flickr_display( area, "[error] "+err );
    };
//  http.onerror( err );
    http.async( func );
    http.parse();

};

function flickr_display ( area, elem ) {
    if ( typeof(elem) == "string" ) {
        elem = document.createTextNode( elem );
    }
    var here = document.getElementById(area);
    if ( here.firstChild ) {
        here.replaceChild( elem, here.firstChild );
    } else {
        here.appendChild( elem );
    }
}

