/**
 * flickrGal jQuery Gallery Upgrade
 * @author Michael James mike@mjjames.co.uk - http://mjjames.co.uk
 */
//namespacing
var mjjames = window.mjjames ||
{};

mjjames.flickrGal = function(){ //our new stuff
    //private variables -- these need setting
    var apiKey = "38302c4ef2f007e8e70c4280c4399748";
    var sPhotoID = "";
    var bWaterMarked = true;
    //private methods
    
    var attachInitialNav = function(){
			var ourImg = $('#photoPreview img.photoPreview')[0];
			var ourSrc = ourImg.src.split('/');
			var ourSrc = ourSrc[ourSrc.length - 1].split('_');
			sPhotoID = ourSrc[0];
    		$.getJSON('http://api.flickr.com/services/rest/?method=flickr.photos.getContext&api_key=' + apiKey + '&photo_id=' + sPhotoID + '&format=json&jsoncallback=?', responseNav);
    };
    
    var attachSetListeners = function(){
        $("#photoSets ol li.set h2 a").bind("click", function(e){
            loadSet(e);
            return false;
        });
    };
    
    var attachNav = function(){
		$.getJSON('http://api.flickr.com/services/rest/?method=flickr.photos.getContext&api_key=' + apiKey + '&photo_id=' + sPhotoID + '&format=json&jsoncallback=?', responseNav);
    };
    
    var attachThumbnailListeners = function(){
        $("#photoSets li.open div.photoset a").bind("click", function(e){
            e.preventDefault();
            loadImage(e);
            return false;
        });
    }; 
    
    var loadImage = function(e){
		$("#photoPreview").append("<img src=\"/images/loading_bar.gif\" class=\"loading\" alt=\"loading ...\"/>");
		if(e.currentTarget != undefined){
            var sHref = e.currentTarget.href.split('photoid=');
        }
        else{
            var sHref = e.srcElement.parentNode.href.split('photoid=');
        }
        sPhotoID = sHref[1];
        if (bWaterMarked){
			responseImage();
		}
		else{
		    $.getJSON('http://api.flickr.com/services/rest/?method=flickr.photos.getSizes&api_key=' + apiKey + '&photo_id=' + sPhotoID + '&format=json&jsoncallback=?', responseImage);
	    }
    };
    
    var loadSet = function(e){
        if(e.target != undefined){
            var $ourSet = $(e.target);
        }
        else{
            var $ourSet = $(e.srcElement);
        }
        if ($ourSet.parents("li").is(".open") === false) {
            $('li.open').removeClass("open").find("div.photoset").slideUp();
            if ($ourSet.parents("li.set").is(":has(div.photoset)")) {
                $ourSet.parents("li.set").addClass("open").find("div.photoset").slideDown();
            }
            else {
                $ourSet.parents("li.set").addClass("open").append("<div class=\"photoset loading\"><img src=\"/images/loading_small.gif\" alt=\"loading\" /></div>");
                var sHref = $ourSet.parent().find("a")[0].href.split('?');
                var sSetID = sHref[1].replace('setid=', '');
				$.getJSON('http://api.flickr.com/services/rest/?method=flickr.photosets.getPhotos&api_key=' + apiKey + '&photoset_id=' + sSetID + '&format=json&jsoncallback=?', responseSets);
            }
        }
    };
    
    var loadPrev = function(){
		$('#photoPreview a.prev img').attr("src", "/images/prev.png");
    }
    
    var loadBlank = function(){
		$('#photoPreview a img').attr("src", "/images/blank.gif");
    }
    
    var loadNext = function(){
		$('#photoPreview a.next img').attr("src", "/images/next.png");
    }
    
    var makeRequest = function(sURL, eLoadContainer){
        $.getJSON(sURL);
    };
    
    var responseImage = function(data){
		sURL = "/loadimage.aspx?image=" + sPhotoID; //run watermark by default
		if (data !== undefined){ //if we have data we come from flickr
			sURL = data.sizes.size[3].source;
		}
        $('#photoPreview img.photoPreview').attr("src", sURL).bind("load", function(){
			$(this).parent().find('.loading').remove();
			updateWidth();
        }).parent().find('a').remove();
        $.getJSON('http://api.flickr.com/services/rest/?method=flickr.photos.getInfo&api_key=' + apiKey + '&photo_id=' + sPhotoID + '&format=json&jsoncallback=?', responseCaption);
    };
       
    var responseCaption = function(dataC){
			$('#photoCaption p').html(dataC.photo.title._content);
			attachNav();
    };
    
    var responseNav = function(dataN){
		var div$ = $('#photoPreview');
		var eNav;
		if(dataN.prevphoto != null && dataN.prevphoto.id > 0){
			eNav = "<a class='prev' href='#?photoid=" + dataN.prevphoto.id + "'> <img src='/images/blank.gif' alt='Prev &lt;' /> </a>"
			div$.append(eNav).find('a.prev').bind("click", loadImage).hover(loadPrev, loadBlank);
		}
		if(dataN.prevphoto != null && dataN.nextphoto.id > 0){
			eNav = "<a class='next' href='#?photoid=" + dataN.nextphoto.id+ "'> <img src='/images/blank.gif' alt='Next &gt;' /> </a>"
			div$.append(eNav).find('a.next').bind("click", loadImage).hover(loadNext, loadBlank);
		}
    };
    
    var responseSets = function(data){
        var $thumbsDiv = $("div.loading");
        $thumbsDiv.empty();
        $.each(data.photoset.photo, function(i, photo){
			var sURL = "http://farm" + photo.farm + ".static.flickr.com/" + photo.server + "/" + photo.id + "_" + photo.secret + "_s.jpg";
			var ourHTML = "<a href=\"~/default.aspx?photoid="+photo.id+"\"> <img src=\"" + sURL + "\" /> </a>";
            $thumbsDiv.append(ourHTML);
        });
        $thumbsDiv.removeClass("loading");
		attachThumbnailListeners();
    };
    
    var updateWidth = function(){
		$('#photoPreview').width($('#photoPreview img.photoPreview').width());
    };
    //public methods
    return {
        init: function(){
            attachSetListeners();
            attachThumbnailListeners();
            attachInitialNav();
            $('img.photoPreview').bind("load", updateWidth);
            updateWidth();
        },
        helloworld: function(){
            alert("hello world");
        },
        responseImage: responseImage,
        responseSets: responseSets,
        updateWidth: updateWidth
    };
}
();

var flickrGal = mjjames.flickrGal;

$().ready(flickrGal.init);


