$.deferred.define();
var factory = {
    createTile: function(){
	var tile = new Tile(layer, photoList)
	return tile;
    },
    createTagTile: function(tagInfo){
	var tile = new TagTile(layer, tagInfo);
	return tile;
    },
    getLoaderPath: function(){
	return "/flickr/popular_json/";
    },
    getOnLoadHandler: function(){
	return function(json){
	    for (var i = 0; i < json.length; i++){
		photoList.addPhoto(json[i]);
	    }
	    tl.checkLoaded();
	};	
    },
    getTileLayout: function(){
	return tl;
    },
    getTagMap: function(){
	return tagMap;
    },
    getHeightMargin: function(){
	return 90;
    },
    getTileWidth: function(){
	return 75;
    },
    getTileHeight: function(){
	return 75;
    },
    getTagMapScale: function(){
	return 2;
    },
    getNumTotalRow: function(){
	return 169;
    },
    getNumTotalCol: function(){
	return 100;
    },
    getLayerXControllerID: function(){
	return "#layerXController";
    },
    getLayerYControllerID: function(){
	return "#layerYController";
    },
    getTagMapID: function(){
	return "#tag-map";
    }
}
var loader = new Loader(factory);
var photoList  = new PhotoList(loader);
var layer = new Layer("#layer", factory); 
var tl = new TileLayout(layer, tags, factory);
var tagMap = new TagMap(layer, tags, factory);


var start = function(){
    $("#status").html("");
    $("#layer").show();
    $("#sidebar").show();
    layer.onResize();
    layer.scroll(Math.random() * 75 * factory.getNumTotalCol(), 
		 Math.random() * 75 * factory.getNumTotalRow());
    $("#tag-map-tab").click(function(){
	$("#all-tags").hide();
	$("#tag-map").show();
	$("#tag-map-tab").addClass("tag-selected").
	removeClass("tag-unselected")
	$("#all-tags-tab").addClass("tag-unselected").
	removeClass("tag-selected")
    });
    $("#all-tags-tab").click(function(){
	$("#all-tags").show();
	$("#tag-map").hide();
	$("#all-tags-tab").addClass("tag-selected").
	removeClass("tag-unselected")
	$("#tag-map-tab").addClass("tag-unselected").
	removeClass("tag-selected")
    });
}
$(window).load(start);
//$("#status").click(start);

window.onbeforeunload = function(event){
    //event = event || window.event; 
    //event.returnValue = 'Are you sure you want to leave?';
}

window.onerror = function(error){
    alert(error);
}

