jQuery.noConflict(); // WILL: let mootools have $

// script to disable enter key on form
function disableEnterKey(e)
{
     var key;
     if(window.event)
          key = window.event.keyCode;     //IE
     else
          key = e.which;     //firefox
     if(key == 13)
          return false;
     else
          return true;
}




window.addEvent('domready', function(){
		
var periodical;
var scrollarea = $('scrollarea');

// context.name keeps the upcoming name that will be queried
// and context.fresh tells if start has been pressed already

var context = new Object();
context.fresh = true;
context.id = "";
 
var printline = function() {

	if (context.fresh) { 
	    var query = {
	    	type:"/influence/influence_node",
        	name: context.name,
        	id: null,
        	influenced: [{       
            	name:null,
				id:null,
				optional:true
        	}],
        	peers:[{
      			peers:[{
        			name:null,
        			id:null,
        			optional:true
      			}],
      			optional:true
    		}],
        	influenced_by: [{       
            	name:null,
				id:null,
				optional:true
        	}]
    	};
    	
		context.fresh = false;
  	
    } else {
    	var query = {
	    	type:"/influence/influence_node",
        	name: null,
        	id: context.id,
        	limit:1,
        	influenced: [{       
            	name:null,
				id:null,
				optional:true
        	}],
        	peers:[{
      			peers:[{
        			name:null,
        			id:null,
        			optional:true
      			}],
      			optional:true
    		}],
        	influenced_by: [{       
            	name:null,
				id:null,
				optional:true
        	}]
    	};
    }
    
    Metaweb.read(query, displayinfluences);
   
    function displayinfluences(result) {  
    
        if (!result) {
            $clear(periodical);
            var newline = new Element('div').setHTML('Sorry - could not find this person. Click new name to start over.').injectTop(scrollarea);
            return;
        }
        
        // randomly pick between all of possible the influence connections
        // by picking a random number and then test if it's an incoming
        // or outgoing influence
        
        var total = result.influenced.length  + result.peers.length + result.influenced_by.length;
        var ran_number = Math.floor(Math.random()*total);
        
        if (ran_number < result.influenced.length) {

            var influenced_name = result.influenced[ran_number].name;
            context.id = result.influenced[ran_number].id;
            var did_what_to_whom = " influenced " + influenced_name;

        } else if (ran_number < result.influenced.length + result.peers.length) {
        
        	// trickiness here to unpack peer - which is a compound value type
        	// the peer relationship contain the original person and his/her peer
    	    // for more info read Freebase API on 'CVT'
    	    
            if (result.peers[ran_number - result.influenced.length].peers[0].name != result.name) {
        		var peer_name = result.peers[ran_number - result.influenced.length].peers[0].name;
        		context.id = result.peers[ran_number - result.influenced.length].peers[0].id;
        	} else {
        		var peer_name = result.peers[ran_number - result.influenced.length].peers[1].name;
        		context.id = result.peers[ran_number - result.influenced.length].peers[1].id;
            }
            
            var did_what_to_whom = " peer of " + peer_name;
            
        } else {
        
            var influenced_by_name = result.influenced_by[ran_number - result.influenced.length - result.peers.length].name;
            context.id = result.influenced_by[ran_number - result.influenced.length - result.peers.length].id;
            var did_what_to_whom = " influenced by " + influenced_by_name;

        }
        
        // print a new line and link the first of the pair to Freebase
        
        var url = 'http://www.freebase.com/view' + result.id;        
        var newline = new Element('div').setHTML('<a href="' + url + '" target="_blank">' + result.name + '</a>' + did_what_to_whom).injectTop(scrollarea);
        
        // fx makes with the slide effect
        
        var fx = new Fx.Slide(newline, {
        	duration: 200,
			wait: false,
			transition: Fx.Transitions.Quad.easeIn
		});
		
		// weight by number of total connections for the first of the pair
		
        if (total > 16) newline.addClass('level4');
        else if (total > 12) newline.addClass('level3');
        else if (total > 8) newline.addClass('level2');
        else if (total > 4) newline.addClass('level1');
        else newline.addClass('level0');
        
        fx.hide();
        fx.slideIn();
        
    }
		
}
 
 $('start').addEvent('click', function() {
 
 // if it's the first press, get the value from the Form
 
 	if (context.fresh) {
		context.name = $('mytextinput').getValue();
	}
	
	printline();
	periodical = printline.periodical(1000, context);
 });
 
$('stop').addEvent('click', function() {
	$clear(periodical);
});

});
		

/***********************/
/* jQuery from here on */
/***********************/

jQuery(document).ready( function($) {
    var settings = {
	'#mytextinput' : { type:'/influence/influence_node' }
    };
    
    for (var id in settings) {
	var ac_param = { type: '/common/topic', category: "instance", get_all_types: "0", disamb: "1", limit: "10", strict:1 };
	$.extend( ac_param, settings[id] );
	$(id).freebaseSuggest( {ac_param:ac_param} );
    }

    $("#example4")
    .bind("fb-select", function(e, data) { $('#log').text("suggest: "+ data.id+" -- "+ data.name);  });

});


