/**
 * Project - funzioni per gestire i progetti del portfolio
 * 
 * @author Fabio Cazzadore (fabio.cazzadore@gmail.com)
 * @version 1.1
 * 
 */
var project = {

    vars: {},
    
	/**
	 * Questa funzione viene chiamata quando la pagina viene caricata ed il DOM generato
	 */
    domIsReady: function(){
        $('.thumbsContainer .remoteMedia').each(function(i, obj){
            project.bindClickToObject(obj);
        });
		
		$('.openCloseWholeProject').bind('click',function(){
			project.openCloseWholeProject($('.projectBody',$(this).parent().parent().parent()),this);
			return false;
		});
		//carico il primo media del primo progeto
		var firstProjectMedia = $('.firstProject .thumbsContainer .remoteMedia:first');
		if($(firstProjectMedia).is('a'))
			project.getMedia(firstProjectMedia.attr('href'),firstProjectMedia);
    },
    
	/**
	 * Questa funzione permette di creare il bind del click ad un oggetto per recuperare via ajax il media
	 * 
	 * @param {Object} obj Oggetto del DOM
	 */
    bindClickToObject: function(obj){
        $(obj).bind('click', function(){
            project.getMedia($(this).attr('href'), this);
            return false;
        });
    },
    
	/**
	 * Questa funzione permette di eliminare il bind del click ad un oggetto.
	 * 
	 * @param {Object} obj Oggetto del DOM
	 */
    unbindClickToObject: function(obj){
        $(obj).unbind('click');
        $(obj).bind('click', function(){
            return false;
        });
    },
    
	/**
	 * Questa funzione pemette di recuperare via ajax un elemento multimediale
	 * 
	 * @param {Object} linkUrl l'idirizzo del media da chiamare
	 * @param {Object} obj Oggetto del DOM
	 */
    getMedia: function(linkUrl, obj){
    
        project.unbindClickToObject(obj);
        
        var linkParts = linkUrl.split('.');
        var linkMediaExtension = linkParts[linkParts.length - 1];
        var content = '';
        var contentContainer = $('.panel', $(obj).parent().parent().parent());
        var addMedia = false;
        linkMediaExtension = linkMediaExtension.toLowerCase();
        
        $('.mediaActive', $(obj).parent().parent().parent()).removeClass('mediaActive');
        
        $(obj).addClass('mediaActive');
        
        switch (linkMediaExtension) {
            case 'jpg':
            case 'jpeg':
            case 'gif':
            case 'png':
                project.getImage(linkUrl, contentContainer, obj);
                break;
            default:
                content = project.getOtherContent(linkUrl, contentContainer);
                addMedia = true;
                break
        }
        
        if (addMedia) {
            $(contentContainer).html(content);
            project.bindClickToObject(obj);
        }
        
        
    },
    
	/**
	 * Questa funzionae viene chiamata se il media da caricare e' un'immagine
	 * 
	 * @param {Object} url l'idirizzo del media da chiamare
	 * @param {Object} contentContainer il contenitore dove andra' messa l'immagine
	 * @param {Object} obj Oggetto del DOM
	 */
    getImage: function(url, contentContainer, obj){
        var img = new Image();
        var containerHeight = $('img', $(contentContainer)).height();
        $(contentContainer).html('');
        $(contentContainer).addClass('loading');
        $(img).load(function(){
            var imageHeight = 0;
            $(this).hide();
            $(contentContainer).removeClass('loading').html(this);
            $(this).fadeIn();
            imageHeight = $(this).height();
            $(contentContainer).animate({
                height: imageHeight + 'px'
            }, 500);
            $(contentContainer).append($('.mediaDetailsContainer', $(obj).parent()).html());
            project.bindClickToObject(obj);
        }).error(function(){
        
        }).attr('src', url);
        
    },
	
    /**
	 * Questa funzionae viene chiamata se il media da caricare e' un media generico
	 * 
	 * @param {Object} url l'idirizzo del media da chiamare
	 * @param {Object} contentContainer il contenitore dove andra' messo il media
	 * @param {Object} obj Oggetto del DOM
	 */
    getOtherContent: function(url, contentContainer, obj){
    
        $(contentContainer).addClass('loading');
        responseData = gp.ajax.ajaxRequest(url, {}, false, "GET");
        responseData = responseData.split('###SEP###');
        $(contentContainer).animate({
            height: responseData[0] + 'px'
        }, 500);
        
        $(contentContainer).removeClass('loading');
        return responseData[1];
        
    },
	
	openCloseWholeProject: function(bodyProject, obj){
		if($(obj).hasClass('closed')){
			//se e' chiuso allora lo apro e gli carico il primo media che trovo
			var currentProjectMedia = $('.thumbsContainer .remoteMedia:first',$(bodyProject));
			if($(currentProjectMedia).is('a'))
				project.getMedia($(currentProjectMedia).attr('href'),currentProjectMedia);
		}
		
		$(bodyProject).slideToggle();
		$(obj).toggleClass('closed');
	}
    
}
