function TimeStampToDate(xmlDate)
{
    var dt = new Date();
    var dtS = xmlDate.slice(xmlDate.indexOf('T')+1, xmlDate.indexOf('.'))
    var TimeArray = dtS.split(":");
    dt.setUTCHours(TimeArray[0],TimeArray[1],TimeArray[2]);
    dtS = xmlDate.slice(0, xmlDate.indexOf('T'))
    TimeArray = dtS.split("-");
    dt.setUTCFullYear(TimeArray[0],TimeArray[1],TimeArray[2]);
    return dt;
}

getFlickr={

	html:[],

	tags:[],

	triggerClass:'getflickrphotos',

	loadingMessage:'loading...',

	viewerID:'flickrgetviewer',

	closeMessage:'close',

	closePhotoMessage:'click to close',

    startDate:null,
    
    endDate:null,
 
	leech:function(tag, func, apiKey, startDate, endDate){

		getFlickr.func = func;

		getFlickr.tag = tag;
                
        getFlickr.startDate = startDate;
        
        getFlickr.endDate = endDate; 
		
        perPage = 50;
		var s = document.createElement('script');

		//s.src = 'http://flickr.com/services/feeds/photos_public.gne?tags=' + tag + '&format=json';
        s.src = 'http://api.flickr.com/services/rest/?tags=' + tag + '&api_key=' + apiKey + '&method=flickr.photos.search&privacy_filter=1&extras=path_alias,tags,%20url_sq&sort=date-taken-desc&format=json&per_page='+perPage;
		if(startDate)
		  s.src = s.src + '&min_taken_date=' + startDate
		if(endDate)
		  s.src = s.src + '&max_taken_date=' + endDate
	    document.getElementsByTagName('head')[0].appendChild(s);

	},	

	getLinks:function(){

		var links = document.getElementsByTagName('a');

		for(var i=0,j=links.length;i<j;i++){

			if(links[i].className.indexOf(getFlickr.triggerClass)!=-1){

				getFlickr.addEvent(links[i],'click',getFlickr.getData);

				// friggin fix this now Apple!

				if((/Safari|Konqueror|KHTML/gi).test(navigator.userAgent)){

					links[i].onclick=function(){return false;}

				}

			}

		}

	},

	getData:function(e){

		var x = getFlickr.getTarget(e);

		if(x.nodeName.toLowerCase() != 'a'){x = x.parentNode}

		var tag = x.href.match(/([\w|\+]+)?\/?$/);

		getFlickr.currentLink = x;

		getFlickr.currentText = x.innerHTML;

		x.innerHTML = getFlickr.loadingMessage;

		getFlickr.leech(tag,'getFlickr.feedLink');

		getFlickr.cancelClick(e);

		},

	feedLink:function(){

		getFlickr.currentLink.innerHTML = getFlickr.currentText;

		var viewer = document.getElementById(getFlickr.viewerID);

		if(viewer === null){

			var viewer = document.createElement('div');

			viewer.id = getFlickr.viewerID;

			document.body.appendChild(viewer);

		} else {

			viewer.innerHTML = '';

		}

		var closer = document.createElement('a');

		closer.href = '#';

		closer.innerHTML = getFlickr.closeMessage;

		closer.onclick = function(){

			this.parentNode.parentNode.removeChild(this.parentNode);

			return false;

		}

		viewer.appendChild(closer);

		var ul = document.createElement('ul');

		ul.innerHTML = getFlickr.html[getFlickr.tag].replace(/_m/g,'_s');

		viewer.appendChild(ul);

		 var y=0;

		if(self.pageYOffset){

			y=self.pageYOffset;

		} else if (document.documentElement && document.documentElement.scrollTop){

			y=document.documentElement.scrollTop;

		} else if(document.body){

			y=document.body.scrollTop;

		}

		viewer.style.top = y+'px'; 

		getFlickr.addEvent(ul, 'click', getFlickr.showPic);

	},

	showPic:function(e){

		var t = getFlickr.getTarget(e);

		if(t.nodeName.toLowerCase()==='img'){

			var p = document.getElementById('flickrgetviewer');

			var s = t.src.replace('_s','_m');

			var x = t.parentNode.cloneNode(false);

			var cont = document.createElement('div');

			x.innerHTML = '<img src="'+s+'" title="+getFlickr.closePhotoMessage+" />';

			cont.appendChild(x);

			if(p.getElementsByTagName('div').length>0){

				p.replaceChild(cont,p.getElementsByTagName('div')[0]);				

			} else {

				p.appendChild(cont);				

			}

			cont.onclick = function(){

				this.parentNode.removeChild(this);

				return false;

			}

		}

		getFlickr.cancelClick(e);

	},

	returnList:function(feed){

		var x = feed.items;

		var t;

		getFlickr.html[getFlickr.tag] = '';

		getFlickr.tags[getFlickr.tag] = '';

		 for(var i=0,j=x.length;i<j;i++){
            if(startDate == null || TimeStampToDate(x[i].date_taken) > startDate)
            {
              if(endDate == null || TimeStampToDate(x[i].date_taken) < endDate)
              {
		 	    getFlickr.html[getFlickr.tag]+='<li><a href="'+x[i].link+'"><img src="'+x[i].media.m+'" alt="'+x[i].title+'" /></a></li>';
			    t+= x[i].tags + ' ';
			  }
            }
		 }

			t=t.replace(/\s$/,'');

		var x = t.split(' ');

		x=x.sort();

		 for(var i=0,j=x.length;i<j;i++){

		 	if(i>0 && x[i-1]!=x[i]){

			  getFlickr.tags[getFlickr.tag]+=x[i]+' ';

			}

		 }

		 if(getFlickr.func !== undefined){

 			 eval(getFlickr.func+'()');

		}

	},	
	
	returnListSearch:function(searchResult){

		var x = searchResult.photos.photo;

		var t;

		getFlickr.html[getFlickr.tag] = '';

		getFlickr.tags[getFlickr.tag] = '';

		 for(var i=0,j=x.length;i<j;i++){
            getFlickr.html[getFlickr.tag]+='<li><a href="http://www.flickr.com/photos/'+x[i].owner+'/'+x[i].id+'"><img src="'+x[i].url_sq+'" alt="'+x[i].title+'" /></a></li>';
			t+= x[i].tags + ' ';
		 }
		 
		 morePhotosUrl = 'http://www.flickr.com/search/?q=' + getFlickr.tag + '&m=tags&ss=0&ct=0&mt=all&w=all&adv=1';
		 
		 if(getFlickr.startDate)
		   morePhotosUrl += '&d=taken-' + getFlickr.startDate.replace('-', '').replace('-', '').substring(0,8);   
		 
		 if(getFlickr.endDate)
		 	morePhotosUrl += '-' + getFlickr.endDate.replace('-', '').replace('-', '').substring(0,8);
		 
		 getFlickr.html[getFlickr.tag]+='<li><a href="' + morePhotosUrl + '">View all photos (' + searchResult.photos.total + ')</a></li>';
			

		t=t.replace(/\s$/,'');

		var x = t.split(' ');

		x=x.sort();

		 for(var i=0,j=x.length;i<j;i++){

		 	if(i>0 && x[i-1]!=x[i]){

			  getFlickr.tags[getFlickr.tag]+=x[i]+' ';

			}

		 }

		 if(getFlickr.func !== undefined){

 			 eval(getFlickr.func+'()');

		}

	},	

	getTarget:function(e){

		var target = window.event ? window.event.srcElement : e ? e.target : null;

		if (!target){return false;}

		while(target.nodeType!=1 && target.nodeName.toLowerCase()!='body'){

			target=target.parentNode;

		}

		return target;

	},

	 cancelClick:function(e){

			if (window.event){

				window.event.cancelBubble = true;

				window.event.returnValue = false;

			}

			if (e && e.stopPropagation && e.preventDefault){

				e.stopPropagation();

				e.preventDefault();

			}

	},

	addEvent: function(elm, evType, fn, useCapture){

		if (elm.addEventListener){

			elm.addEventListener(evType, fn, useCapture);

			return true;

		} else if (elm.attachEvent) {

			var r = elm.attachEvent('on' + evType, fn);

			return r;

		} else {

			elm['on' + evType] = fn;

		}

	}

}

function jsonFlickrFeed(feed){

	getFlickr.returnList(feed);

}

function jsonFlickrApi(searchResult){
	getFlickr.returnListSearch(searchResult);

}

getFlickr.addEvent(window, 'load', getFlickr.getLinks);	
