// 
//
// Initial widget inspiration from "GNE Browser" by Eric Costello (http://glish.com/) for Ludicorp
/////////////////////////////////////
// Adapted from XML import & RSS parse code from work by Mark Wilton-Jones (http://www.howtocreate.co.uk/)
// Adapted from Flickr RSS Widget v 0.3 by Eliot Shepard <eshepard@slower.net>

var flickr_photo_info	= [];
var	flickr_feed_title	= '';
var MWJ_ldD = [];

function importXML( oURL, oFunct, oNoRand, oDelay ) {
	//note: in XML importing event handlers, 'this' refers to window
	if( !oNoRand ) { oURL += ( ( oURL.indexOf('?') + 1 ) ? '&' : '?' ) + (new Date()).getTime(); } //prevent cache
	if( window.XMLHttpRequest ) {
		//alternate XMLHTTP request - Gecko, Safari 1.2+ and Opera 7.6+
		MWJ_ldD[MWJ_ldD.length] = new XMLHttpRequest();
		MWJ_ldD[MWJ_ldD.length-1].onreadystatechange = new Function( 'if( MWJ_ldD['+(MWJ_ldD.length-1)+'].readyState == 4 && MWJ_ldD['+(MWJ_ldD.length-1)+'].status < 300 ) { '+oFunct+'(MWJ_ldD['+(MWJ_ldD.length-1)+'].responseXML); }' );
		MWJ_ldD[MWJ_ldD.length-1].open("GET", oURL, true);
		MWJ_ldD[MWJ_ldD.length-1].send(null);
		return true;
	}
	if( !navigator.__ice_version && window.ActiveXObject ) {
		//the Microsoft way - IE 5+/Win (ICE produces errors and fails to use try-catch correctly)
		try { //IE Mac has the property window.ActiveXObject but produces errors if you try and use it
			try { var tho = new ActiveXObject( 'Microsoft.XMLDOM' ); //newer
			} catch(e) { var tho = new ActiveXObject( 'Msxml2.XMLHTTP' ); } //older
			MWJ_ldD[MWJ_ldD.length] = tho;
			MWJ_ldD[MWJ_ldD.length-1].onreadystatechange = new Function( 'if( MWJ_ldD['+(MWJ_ldD.length-1)+'].readyState == 4 ) { '+oFunct+'(MWJ_ldD['+(MWJ_ldD.length-1)+']); }' );
			MWJ_ldD[MWJ_ldD.length-1].load(oURL);
			return true;
		} catch(e) {}
	}
	if( document.createElement && document.childNodes ) {
		//load the XML in an iframe
		var ifr = document.createElement('DIV');
		ifr.style.visibility = 'hidden'; ifr.style.position = 'absolute'; ifr.style.top = '0px'; ifr.style.left = '0px';
		//onload only fires in Opera so I use a timer for all
		if( !window.MWJ_XML_timer ) { window.MWJ_XML_timer = window.setInterval('MWJ_checkXMLLoad();',100); }
		ifr.innerHTML = '<iframe src="'+oURL+'" name="MWJ_XML_loader_'+MWJ_ldD.length+'" height="0" width="0"><\/iframe>';
		MWJ_ldD[MWJ_ldD.length] = oFunct+'MWJ_SPLIT'+(oDelay?oDelay:1)+'';
		document.body.appendChild(ifr);
		return true;
	}
	return false;
}


function MWJ_checkXMLLoad() {
	//check if each imported file is available (huge files may not have loaded completely - nothing I can do - use the delay to help)
	for( var x = 0; x < MWJ_ldD.length; x++ ) { if( MWJ_ldD[x] && window.frames['MWJ_XML_loader_'+x] ) {
		setTimeout( MWJ_ldD[x].split('MWJ_SPLIT')[0] + '(window.frames.MWJ_XML_loader_'+x+'.window.document);', parseInt(MWJ_ldD[x].split('MWJ_SPLIT')[1]) );
		MWJ_ldD[x] = false;
	} }
}


function parseRSS(oDocObj) {

	if (!oDocObj) {
		loadFailure();
//		alert('Could not load RSS feed'); return;
	}
	
	// check if the browser interpreted the XML correctly
	if( oDocObj.documentElement && oDocObj.documentElement.tagName && oDocObj.documentElement.tagName.toUpperCase() == 'HTML' ) {
		setTimeout('loadFailure();',20); return;
	}
	var chanEl		= oDocObj.getElementsByTagName('channel')[0];
	if( !chanEl ) {
		loadFailure();
//		alert('Format was not recognised as a valid RSS feed'); return;
	}
	var RSSversion	= oDocObj.getElementsByTagName('rssSpoof')[0] ? oDocObj.getElementsByTagName('rssSpoof')[0].getAttribute('version') : '';

	flickr_feed_title	= oDocObj.getElementsByTagName('title')[0].firstChild.nodeValue;
	
	//parse each news item
	for(var x=0, y=oDocObj.getElementsByTagName('item'); (x<20 && y[x]); x++ ) {
		flickr_photo_info[x]			= [];
		for (var i=0, j; j=y[x].childNodes[i]; i++) {
			if ('author' == j.tagName) {
				matches	= j.firstChild.nodeValue.match(/(.*\()(.*)(\).*)/);
				if (matches[2].length > 11) {
					sn	= matches[2].substr(0,11) + "...";
				} else {
					sn	= matches[2];
				}
				flickr_photo_info[x]['screenname']	= sn;
			} else if ('link' == j.tagName) {
				matches	= j.firstChild.nodeValue.match(/(^.*)(\/\d+\/$)/);
				if (matches) {
					flickr_photo_info[x]['userlink']		= matches[1] + '/';
				} else {
					flickr_photo_info[x]['userlink']		= '#';
				}
			} else if ('description' == j.tagName) {
				// scrape the image URL from here.
				matches	= j.firstChild.nodeValue.match(/(.*)(src=")([^"]+)(")(.*)/);
				if (matches) {
					flickr_photo_info[x]['img']		= matches[3]//.replace(/_m.jpg/g,'_s.jpg');
				} else {
					flickr_photo_info[x]['img']		= '#';
				}
			} 
			flickr_photo_info[x][j.tagName]	= j.firstChild ? j.firstChild.nodeValue : '';
		}
	}

	ready();
}


/////////////////////////////////////

var incs		= 9;

var	imW			= 240;
var imH			= 180;

var imageDirPath	= './images/';

// determine the absolute URL of rssLocal (ie. the same directory as this script)
var scriptTags = document.getElementsByTagName("script");
for(var i=0; i<scriptTags.length; i++) {
	if(scriptTags[i].src && scriptTags[i].src.match(/flickr_.*\.js$/)) {
		var urlScriptPath = scriptTags[i].src.replace(/flickr_.*\.js$/,'');
	}
}



html		= '<div><a target="_externalLink" href="' + window.flickerHomeURL + '"><h3>Click here for all of our photos</h3></a></div>\
            <br>\
            <div id="fcbFrame"><img id="fcbButton" src="' + imageDirPath + '/flickr_rss_widget.loading.gif" width="84" height="31" border="0" alt="Please wait, loading data from Flickr" /><div id="fcbMenu"></div></div>\
            <br>\
            <div><a target="_externalLink" href="' + window.flickerHomeURL + '"><h3>[More photos]</h3></a></div>';

document.write(html);
document.close();

var fcbFrame		= document.getElementById('fcbFrame');
var fcbMenu			= document.getElementById('fcbMenu');
var fcbButton		= document.getElementById('fcbButton');
//var fcbLink			= document.getElementById('fcbLink');


if (!window.feedURL) {
	alert('Flickr RSS Widget error: You must specify a Flickr RSS 2.0 feed in the variable "feedURL" before invoking this script.');
	loadFailure();
}

importXML(urlScriptPath + 'rssLocal.php?feedURL='+escape(feedURL), 'parseRSS', true);


function ready() {
	
	displayImages();
	fcbButton.style.display	= 'none';

}


function loadFailure() {
	fcbButton.src	= imageDirPath + '/flickr_rss_widget.loadfailed.gif';
	fcbButton.alt	= 'Sorry, couldn\'t load data from Flickr';
}


function displayImages() {



		fcbFrame.style.backgroundColor	= 'white';
		setTimeout('showRecords()', 30);

	return false;
};

function formatDate(dateString)
{
    var newDate = new Date(dateString);
    
    return newDate.getMonth() + 1 + "-" + newDate.getDate() + "-" + newDate.getFullYear();


};

function showRecords() {

	var	str		= '';
	for (var i=0; i<flickr_photo_info.length; i++) {
		str	+= '<div class="MainTable" id="fcbItem' + i + '" class="fcbRecord"><a target="_externalLink" href="' + flickr_photo_info[i]['link'] + '"><img src="' + flickr_photo_info[i]['img'] + '" height="' + imH + '" width="' + imW + '" style="border: 1px solid black;" alt="posted ' + flickr_photo_info[i]['pubDate'] + '" border="0" /><br/>' + formatDate(flickr_photo_info[i]['pubDate']) + '</a><br /></div>';
	}
	str	+= '<div class="MainTable" id="fcbItemX" class="fcbRecord"></div>';

	fcbMenu.innerHTML	= str;

	fcbMenu.style.display	= 'block';
};