var Flickr = function() {
	// Aliases
	var YD = YAHOO.util.Dom;
	var YE = YAHOO.util.Event;
	var YC = YAHOO.util.Connect;
	var YA = YAHOO.util.Anim;
	var YG = YAHOO.util.Get;

	var TOKEN = 'd15936d6b7c8afe2bd5888d7009cc047';
	
	var canvas;
	var imgs = []; 
	
	var imgsLoaded = 0;
	var numPhotos = 10;
	
	function shuffle(o) {
		for(var j, x, i = o.length; i; j = parseInt(Math.random() * i), x = o[--i], o[i] = o[j], o[j] = x);
		return o;
	};

	return {
		
		showModal: function() {
			var modal = YD.get('modal');
			YD.setStyle(modal, 'height', YD.getViewportHeight()+'px');
			YD.setStyle(modal, 'width', YD.getViewportWidth()+'px');
			modal.style.display = 'block';
		},
		
		hideModal: function() {
			YD.get('modal').style.display = 'none';
		},

		fetchImages: function(e) {
			YE.stopEvent(e);
			this.showModal();
			var query = YD.get('tag-input').value;
			var url = 'http://api.flickr.com/services/rest/?method=flickr.photos.search&jsoncallback=Flickr.insertImages&api_key=' + TOKEN + '&format=json&tags=' + query;
			var scr = YG.script(url);
		},
		
		insertImages: function(rsp) {

			if(rsp.stat != "ok"){
				// something broke!
				return;
			}
			
			if(rsp.photos) {
				var photos = rsp.photos.photo; // array of results
				photos = shuffle(photos);
				for(var i=0, len=photos.length; i<numPhotos; i++) {
					var photo = photos[i];
					var img = new Image();
					img.src = 'http://farm' + photo.farm + '.static.flickr.com/' + photo.server + '/' + photo.id + '_' + photo.secret + '_m.jpg';
					document.body.appendChild(img);
					YE.on(img, 'load', function() {
						imgsLoaded += 1;
						if(imgsLoaded == numPhotos) {
							imgsLoaded = 0;
							Flickr.initCanvas();
						}
					});
				}
			}
		},
		
		getRandomPosition: function() {
			var rTop, rLeft, rAngle;
			var viewport = { width: YD.getViewportWidth() - 100, height: YD.getViewportHeight() };
			rTop = Math.ceil(Math.random() * viewport.height) + 100;
			rLeft = Math.ceil(Math.random() * viewport.width);
			rAngle = Math.ceil(Math.random() * 360);
			if(Math.random() >= 0.5) {
				rAngle = -rAngle;
			}
			return {
				top: rTop,
				left: rLeft,
				angle: rAngle
			}
		},
		
		initCanvas: function() {
			this.hideModal();
			var imgEls = document.getElementsByTagName('img');
			canvas = new Canvas.Element('canvas', { width: YD.getViewportWidth() - 5, height: YD.getViewportHeight() - 5 });
			for(var i=0, len=imgEls.length; i<len; i++) {
				var img = new Canvas.Img(imgEls[i], this.getRandomPosition());
				imgs.push(img);
				canvas.addImage(img);
			}
		},

		init: function() {
			// Attach event to tag submit button
			YE.on('tag-form', 'submit', this.fetchImages, this, true);
		}
	};
	
}();

YAHOO.util.Event.on(window, 'load', Flickr.init, Flickr, true);	
