src/js/widgets/polemicWidget.js
branchpopcorn-port
changeset 169 427632a324d5
child 176 c04283d7d1ef
equal deleted inserted replaced
168:a14343a9e897 169:427632a324d5
       
     1 /* 
       
     2  * 	
       
     3  *	Copyright 2010 Institut de recherche et d'innovation 
       
     4  *	contributor(s) : Samuel Huron 
       
     5  *	 
       
     6  *	contact@iri.centrepompidou.fr
       
     7  *	http://www.iri.centrepompidou.fr 
       
     8  *	 
       
     9  *	This software is a computer program whose purpose is to show and add annotations on a video .
       
    10  *	This software is governed by the CeCILL-C license under French law and
       
    11  *	abiding by the rules of distribution of free software. You can  use, 
       
    12  *	modify and/ or redistribute the software under the terms of the CeCILL-C
       
    13  *	license as circulated by CEA, CNRS and INRIA at the following URL
       
    14  *	"http://www.cecill.info". 
       
    15  *	
       
    16  *	The fact that you are presently reading this means that you have had
       
    17  *	knowledge of the CeCILL-C license and that you accept its terms.
       
    18 */
       
    19 // CHART TIMELINE / VERSION PROTOTYPE  ::
       
    20 
       
    21 IriSP.PolemicWidget = function(Popcorn, config, Serializer) {
       
    22   IriSP.Widget.call(this, Popcorn, config, Serializer);
       
    23  
       
    24   this.RAWTweets;
       
    25 	this.userPol    = new Array();
       
    26 	this.userNoPol  = new Array();
       
    27 	this.userst 	   = new Array();
       
    28 	this.numberOfTweet = 0;
       
    29 	this.Users;
       
    30 	this.TweetPolemic;
       
    31 	this.yMax	  		= this.height; 
       
    32 	this.PaperSlider;
       
    33 	this.heightOfChart;
       
    34 	this.tweets  = new Array();
       
    35   
       
    36 	// Make and define the Raphael area
       
    37 	this.paper = Raphael(document.getElementById(this._id), config.width, config.height);
       
    38   
       
    39 };
       
    40 
       
    41 IriSP.PolemicWidget.prototype = new IriSP.Widget();
       
    42 	
       
    43 IriSP.PolemicWidget.prototype.draw = function() {
       
    44 	
       
    45 		// variable 
       
    46 		// yMax
       
    47 		var yCoef	  		= 2; 						// coef for height of 1 tweet 
       
    48 		var frameSize 		= 5; 						// frame size 
       
    49 		var margin 	  		= 1;						// marge between frame
       
    50 		var lineSize  		= this.width;				// timeline pixel width 
       
    51 		var nbrframes 		= lineSize/frameSize; 		// frame numbers
       
    52 		var numberOfTweet 	= 0;						// number of tweet overide later 
       
    53 		var duration  		= config.duration;			// timescale width 
       
    54 		var frameLenght 	= lineSize/frameSize;		// frame timescale	
       
    55 		var timeline;
       
    56 		var colors  = new Array("","#1D973D","#C5A62D","#CE0A15","#036AAE","#585858");
       
    57 		
       
    58 		// array 
       
    59 		//var tweets  = new Array();
       
    60 		var element = new Array();
       
    61 		var cluster = new Array();
       
    62 		var frames  = new Array(frameLenght);
       
    63 		var slices  = new Array();
       
    64 		
       
    65 		
       
    66 		// Classes =======================================================================
       
    67 		var Frames = function(){
       
    68 			
       
    69 			var Myclusters;
       
    70 			var x;
       
    71 			var y;
       
    72 			var width;
       
    73 			var height;
       
    74 		};
       
    75 		Frames = function(json){
       
    76 			// make my clusters
       
    77 			// ou Frame vide 
       
    78 		};
       
    79 		Frames.prototype.draw = function(){
       
    80 		};
       
    81 		Frames.prototype.zoom = function(){
       
    82 		};
       
    83 		Frames.prototype.inside = function(){
       
    84 		};
       
    85 		var Clusters = function(){
       
    86 			var Object;
       
    87 			var yDist;
       
    88 			var x;
       
    89 			var y;
       
    90 			var width;
       
    91 			var height;
       
    92 		};
       
    93 		Clusters = function(json){
       
    94 			// make my object
       
    95 		};
       
    96 		var Tweet = function(){
       
    97 		};
       
    98 		// Classes =======================================================================
       
    99 		
       
   100 		// trace function 
       
   101 		var traceNum = 0;
       
   102 		function trace(msg,value){
       
   103 			traceNum += 1;
       
   104 			__IriSP.jQuery("<div>"+traceNum+" - "+msg+" : "+value+"</div>").appendTo("#output");
       
   105 		}
       
   106 		
       
   107 		// Refactoring (parametere) ************************************************************
       
   108 		// color translastion
       
   109 		var qTweet_0  =0;
       
   110 		var qTweet_Q  =0;
       
   111 		var qTweet_REF=0;
       
   112 		var qTweet_OK =0;
       
   113 		var qTweet_KO =0;
       
   114 		function colorTranslation(value){
       
   115 			if(value == "Q"){
       
   116 				qTweet_Q+=1;
       
   117 				return 2;
       
   118 			}else if(value =="REF"){
       
   119 				qTweet_REF+=1;
       
   120 				return 4;
       
   121 			}else if(value =="OK"){
       
   122 				qTweet_OK+=1;
       
   123 				return 1;
       
   124 			}else if(value =="KO"){
       
   125 				qTweet_KO+=1;
       
   126 				return 3;
       
   127 			}else if(value ==""){
       
   128 				qTweet_0+=1;
       
   129 				return 5;
       
   130 			}
       
   131 		}
       
   132 		
       
   133 
       
   134 		// Refactoring (parametere) ************************************************************
       
   135 		// load tweets send in parameters 
       
   136 		__IriSP.jQuery.ajax({
       
   137 		  dataType: "jsonp",
       
   138 		  url:config.metadata,
       
   139 		  success : function(json){
       
   140 			trace("load","");
       
   141 		    // get current view (the first ???)
       
   142 		    view = json.views[0];
       
   143 		    
       
   144 		    // the tweets are by definition of the second annotation type
       
   145 		    tweet_annot_type = null;
       
   146 		    if(typeof(view.annotation_types) !== "undefined" && view.annotation_types.length > 1) {
       
   147 		    	tweet_annot_type = view.annotation_types[1];
       
   148 		    }
       
   149 			RAWTweets = json.annotations;
       
   150 			
       
   151 			__IriSP.jQuery.each(json.annotations, function(i,item) {
       
   152 				
       
   153 				var MyTime  = Math.floor(item.begin/duration*lineSize);
       
   154 				var Myframe = Math.floor(MyTime/lineSize*frameLenght);
       
   155 
       
   156 				if (typeof(item.meta) !== "undefined" 
       
   157 					&& typeof(item.meta["id-ref"]) !== "undefined"
       
   158 					&& item.meta["id-ref"] === tweet_annot_type) {
       
   159 						
       
   160 					var MyTJson = JSON.parse(item.meta['dc:source']['content']);
       
   161 					
       
   162 						if (item.content['polemics'] != undefined 
       
   163 						&& item.content['polemics'][0] != null) {
       
   164 						
       
   165 						
       
   166 					//console.log(item.meta['dc:source']['content']);
       
   167 					
       
   168 							for(var j=0; j<item.content['polemics'].length; j++){
       
   169 									
       
   170 									tweets[numberOfTweet] = {
       
   171 												id:i,
       
   172 												qualification:colorTranslation(item.content['polemics'][j]),
       
   173 												yIndicator:MyTime,
       
   174 												yframe:Myframe,
       
   175 												title:item.content['title'],
       
   176 												timeframe:item.begin,
       
   177 												userId: MyTJson.id,
       
   178 												userScreenName: MyTJson.screen_name,
       
   179 												tsource:MyTJson
       
   180 												};
       
   181 									numberOfTweet+=1;
       
   182 									
       
   183 							}
       
   184 					}
       
   185 					else {
       
   186 						//trace("k = ",i);
       
   187 						tweets[numberOfTweet] = {
       
   188 									id:i,
       
   189 									qualification:colorTranslation(""),
       
   190 									yIndicator:MyTime,
       
   191 									yframe:Myframe,
       
   192 									title:item.content['title'],
       
   193 									timeframe:item.begin,
       
   194 									userId: MyTJson.id,
       
   195 									userScreenName: MyTJson.screen_name,
       
   196 									tsource:MyTJson
       
   197 									
       
   198 						};
       
   199 						numberOfTweet+=1;
       
   200 					}
       
   201 					
       
   202 				} 
       
   203 				else {
       
   204 					//trace("tweet qualification = ","null");
       
   205 				}
       
   206 			});	
       
   207 			
       
   208 		   DrawTweets ();
       
   209 		   if(numberOfTweet>0){Report();}
       
   210 		   
       
   211 		  }
       
   212 		 });
       
   213 		
       
   214 		function pourcent(value,max){
       
   215 			var myPourcentage = Math.round(value/max*1000)/10;
       
   216 			return myPourcentage;
       
   217 			
       
   218 		}
       
   219 		function round2Dec(value){
       
   220 			var myValueRounded =  Math.round(value*100)/100;
       
   221 			return myValueRounded
       
   222 		}
       
   223 		
       
   224 
       
   225 		function searchKeyValueArray(mykey,myvalue,myarray){
       
   226 			for(var i=0; i<myarray.length; i++) {
       
   227 				if(myarray[i][mykey]==myvalue){
       
   228 					return i;
       
   229 					console.log("trouvé !");
       
   230 				}
       
   231 			}
       
   232 			return true;
       
   233 		}
       
   234 		
       
   235 		var tweetConversationel   = new Array();
       
   236 		var tweetConversationelSP = 0;
       
   237 		var tweetClient		  	  = new Array();
       
   238 		var tweetRetweet		  = new Array();
       
   239 		var maxRetweet
       
   240 		function tweetRetweetCount(mytweet){
       
   241 			tweet = mytweet.tsource
       
   242 			var retweetIsHere = false;
       
   243 			var myRT =	{
       
   244 				   			id:'',
       
   245 							tweet:tweet,
       
   246 							total:1,
       
   247 							SPtraine:''
       
   248 						} 
       
   249 			if(tweet.retweet_count>0){
       
   250 				for(var i=0; i<tweetRetweet.length; i++){
       
   251 					if(tweetRetweet[i].id==myRT.id){
       
   252 						myRT = tweetRetweet[i];
       
   253 						retweetIsHere=true;
       
   254 					}
       
   255 				}
       
   256 				
       
   257 				if (mytweet.qualification==5){
       
   258 					myTclient.numberNsp+=1;
       
   259 				}else{
       
   260 					myTclient.numberSp+=1;
       
   261 				}
       
   262 				
       
   263 				if(retweetIsHere==false){
       
   264 					tweetRetweet.push(myRT);
       
   265 				}else{
       
   266 					myRT.total+=1;	
       
   267 				}
       
   268 
       
   269 			}
       
   270 		}
       
   271 		function tweetRetweetReport(tweet){
       
   272 			
       
   273 		}
       
   274 		function tweetClientCount(tweet){
       
   275 			var myTclient =	{
       
   276 							client:tweet.tsource.source,
       
   277 							numberNsp:0,
       
   278 							numberSp:0,
       
   279 							total:1,
       
   280 							}
       
   281 			var clientIsHere = false;
       
   282 			for(var i=0; i<tweetClient.length; i++) {
       
   283 				if (tweetClient[i].client==tweet.tsource.source){
       
   284 					clientIsHere = true;
       
   285 					myTclient = tweetClient[i];
       
   286 				}
       
   287 			}
       
   288 			if (tweet.qualification==5){
       
   289 				myTclient.numberNsp+=1;
       
   290 			}else{
       
   291 				myTclient.numberSp+=1;
       
   292 			}
       
   293 			if(clientIsHere==false){
       
   294 				tweetClient.push(myTclient);
       
   295 			}else{
       
   296 				myTclient.total+=1
       
   297 			}
       
   298 		}
       
   299 		function tweetClientSort(a,b){
       
   300 			return (a.total < b.total)?1:-1;
       
   301 		}
       
   302 		function tweetClientReport(){
       
   303 			tweetClient.sort(tweetClientSort);
       
   304 			console.log("_______________________________");
       
   305 			for(var i=0; i<tweetClient.length; i++) {
       
   306 				if(tweetClient[i].total>1){
       
   307 					console.log("t: "+tweetClient[i].total+" / sp :"+tweetClient[i].numberSp+" : "+tweetClient[i].client);
       
   308 				}
       
   309 			}
       
   310 			console.log(JSON.stringify(tweetClient));
       
   311 		}
       
   312 		function conversationalCount(tweet){
       
   313 			if(tweet.tsource.entities.user_mentions.length>2){
       
   314 				if (tweet.qualification!=5){
       
   315 					tweetConversationelSP+=1;
       
   316 				}
       
   317 				var myTc = {
       
   318 							polemique:tweet.qualification,
       
   319 							user_mentions:tweet.tsource.entities.user_mentions,
       
   320 							tsource:tweet
       
   321 							}
       
   322 				tweetConversationel.push(myTc);
       
   323 			}
       
   324 		}
       
   325 		function conversationalReport(){
       
   326 			console.log("_______________________________");
       
   327 			console.log("tweets conversationel    : "+tweetConversationel.length);
       
   328 			console.log("tweets conversationel sp : "+pourcent(tweetConversationelSP,tweetConversationel.length));
       
   329 			console.log("tweets conversationel nsp: "+pourcent(tweetConversationel.length-tweetConversationelSP,tweetConversationel.length));
       
   330 		}
       
   331 		function tweetsStats(){
       
   332 			for(var i=0; i<tweets.length; i++) {
       
   333 					conversationalCount(tweets[i])
       
   334 					tweetClientCount(tweets[i]);
       
   335 					//tweetRetweetCount(tweets[i]);
       
   336 			}	
       
   337 			conversationalReport();
       
   338 			tweetClientReport();
       
   339 		}		
       
   340 		function numberUserUsePolemic(){
       
   341 			
       
   342 			for(var i=0; i<tweets.length; i++) {
       
   343 				if (tweets[i].qualification!=5){
       
   344 					var searchKeyValueArrayTest = searchKeyValueArray('userId',tweets[i].userId,userPol);
       
   345 					if(searchKeyValueArrayTest==true){
       
   346 						myUser = userPol.push({
       
   347 											userId: tweets[i].userId,
       
   348 											userScreenName: tweets[i].userScreenName,
       
   349 											tweets:[]
       
   350 											});
       
   351 					}
       
   352 				}else{
       
   353 					var searchKeyValueArrayTest = searchKeyValueArray('userId',tweets[i].userId,userPol);
       
   354 					if(searchKeyValueArrayTest==true){
       
   355 						myUser = userNoPol.push({
       
   356 											userId: tweets[i].userId,
       
   357 											userScreenName: tweets[i].userScreenName,
       
   358 											tweets:[]
       
   359 											});
       
   360 					}
       
   361 				}
       
   362 				
       
   363 				var searchKeyValueArrayTest = searchKeyValueArray('userId',tweets[i].userId,userst);
       
   364 				//console.log(searchKeyValueArrayTest);
       
   365 				if(searchKeyValueArrayTest==true){
       
   366 					//console.log("ici");
       
   367 					myUser = userst.push({
       
   368 										userId: tweets[i].userId,
       
   369 										userScreenName: tweets[i].userScreenName,
       
   370 										tweetsNP:[],
       
   371 										tweetsSP:[],
       
   372 										ecartNP:null,
       
   373 										ecartSP:null
       
   374 								 		});
       
   375 					if(tweets[i].qualification!=5){
       
   376 							userst[myUser-1].tweetsNP.push(tweets);
       
   377 					}else {
       
   378 							userst[myUser-1].tweetsSP.push(tweets);
       
   379 					}
       
   380 				}else{
       
   381 					if(tweets[searchKeyValueArrayTest].qualification!=5){
       
   382 						userst[searchKeyValueArrayTest].tweetsNP.push(tweets);
       
   383 					}else {
       
   384 						userst[searchKeyValueArrayTest].tweetsSP.push(tweets);
       
   385 					}	
       
   386 				}	
       
   387 			}
       
   388 			
       
   389 			moyenneDeTweetsNPparUsers = (numberOfTweet-qTweet_0)/userNoPol.length
       
   390 			moyenneDeTweetsSPparUsers = (numberOfTweet-qTweet_0)/userPol.length
       
   391 			sommeDeMesCarreSP=0;
       
   392 			sommeDeMesCarreNP=0;			
       
   393 			for(var i=0; i<userst.length; i++) {
       
   394 				myEcartSP = Math.pow(userst[i].tweetsSP.length-moyenneDeTweetsSPparUsers,2);
       
   395 				userst[i].ecartSP=myEcartSP;
       
   396 				sommeDeMesCarreSP+=myEcartSP;
       
   397 				
       
   398 				myEcartNP = Math.pow(userst[i].tweetsNP.length-moyenneDeTweetsNPparUsers,2);
       
   399 				userst[i].ecartNP=myEcartNP;
       
   400 				sommeDeMesCarreNP+=myEcartNP;
       
   401 			}
       
   402 			varianceSP	= sommeDeMesCarreSP/userst.length
       
   403 			varianceNP	= sommeDeMesCarreNP/userst.length
       
   404 			
       
   405 			SommeVariances = varianceNP + varianceSP;
       
   406 			
       
   407 			EcartTypeSP = Math.sqrt(varianceSP);
       
   408 			EcartTypeNP = Math.sqrt(varianceNP);
       
   409 			
       
   410 			SommeEcart = EcartTypeSP + EcartTypeNP;
       
   411 			
       
   412 
       
   413 			
       
   414 			
       
   415 			console.log("user  SP	       	: "+userPol.length);
       
   416 			console.log("user  nSP  	   	: "+userNoPol.length);
       
   417 			console.log("nbrTP / user SP   	: "+round2Dec(moyenneDeTweetsSPparUsers));
       
   418 			console.log("nbrT  / user nSP  	: "+round2Dec(moyenneDeTweetsNPparUsers));
       
   419 			console.log("varianceSP	  	: "+round2Dec(varianceSP));
       
   420 			console.log("varianceNP	  	: "+round2Dec(varianceNP));
       
   421 			console.log("EcartTypeSP	  	: "+round2Dec(EcartTypeSP));
       
   422 			console.log("EcartTypeNP	  	: "+round2Dec(EcartTypeNP));
       
   423 			
       
   424 		}
       
   425 		function Report(){
       
   426 			console.log("_______________________________");
       
   427 			console.log("Total de tweets   	: "+numberOfTweet)
       
   428 			console.log("Total de tweets P 	: "+(numberOfTweet-qTweet_0)+" 	"+ pourcent((numberOfTweet-qTweet_0),numberOfTweet)+" %")
       
   429 			console.log("accord       		: "+qTweet_OK+" 	"+pourcent(qTweet_OK,numberOfTweet)+" %");
       
   430 			console.log("desaccord    		: "+qTweet_KO+" 	"+pourcent(qTweet_KO,numberOfTweet)+" %");
       
   431 			console.log("question     		: "+qTweet_Q+" 	"+pourcent(qTweet_Q,numberOfTweet)+" %");
       
   432 			console.log("reference    		: "+qTweet_REF+" 	"+pourcent(qTweet_REF,numberOfTweet)+" %");
       
   433 			console.log("sans polemic 		: "+qTweet_0+" 	"+pourcent(qTweet_0,numberOfTweet)+" %");
       
   434 			numberUserUsePolemic();
       
   435 			tweetsStats();
       
   436 		}
       
   437 		// tweet Drawing (in raphael) 
       
   438 		function DrawTweets (){
       
   439 		// GROUPES TWEET ============================================
       
   440 		// Count nbr of cluster and tweet in a frame an save int in "frames"
       
   441 			numberOfTweet = tweets.length;
       
   442 			for(var i=0; i<nbrframes; i++) {	
       
   443 				for(var j=0; j<numberOfTweet; j++) {	
       
   444 				
       
   445 					if (i==tweets[j].yframe){
       
   446 						
       
   447 						var k = tweets[j].qualification;
       
   448 						
       
   449 						// make array for frame cluster
       
   450 						if(frames[i]==undefined){
       
   451 							frames[i] = {id:i,
       
   452 										 qualifVol:new Array(),
       
   453 										 mytweetsID:new Array()
       
   454 										};
       
   455 						}
       
   456 						// add my tweet to frame
       
   457 						frames[i].mytweetsID.push(tweets[j]);
       
   458 						
       
   459 						// count opinion by frame
       
   460 						if( frames[i].qualifVol[k] == undefined){
       
   461 							frames[i].qualifVol[k] = 1;
       
   462 						}else{
       
   463 							frames[i].qualifVol[k] += 1;
       
   464 						}
       
   465 						
       
   466 					}
       
   467 				}
       
   468 			}
       
   469 		
       
   470 		// GROUPES TWEET ============================================		
       
   471 		// max of tweet by Frame 
       
   472 			var max = 0; 
       
   473 			for(var i=0; i<nbrframes; i++) {
       
   474 				var moy	= 0;
       
   475 				for (var j=0; j<6; j++){		
       
   476 					if (frames[i]!=undefined){
       
   477 						if (frames[i].qualifVol[j]!=undefined){
       
   478 							moy += frames[i].qualifVol[j];
       
   479 						}
       
   480 					}
       
   481 				}
       
   482 				//trace("frame "+i,moy);
       
   483 				if (moy>max){max=moy;}
       
   484 			}
       
   485 		
       
   486 			var tweetDrawed = new Array();
       
   487 			var TweetHeight = 5;
       
   488 			
       
   489 			// DRAW  TWEETS ============================================
       
   490 			for(var i=0; i<nbrframes;i++) {
       
   491 				var addEheight = 5;
       
   492 				if (frames[i]!=undefined){
       
   493 					trace (i+" k=",frames[i].mytweetsID.length);
       
   494 					// by type 
       
   495 					for (var j=6; j>-1; j--){
       
   496 						if (frames[i].qualifVol[j]!=undefined){
       
   497 							// show tweet by type 
       
   498 							for (var k=0; k<frames[i].mytweetsID.length; k++){
       
   499 								if (frames[i].mytweetsID[k].qualification==j){
       
   500 									var y=config.heightmax-addEheight;
       
   501 									if(yMax>y){yMax=y;}
       
   502 									e = paper.rect( i*frameSize, 					// x
       
   503 													y,								// y
       
   504 													frameSize-margin,				// width
       
   505 													TweetHeight						// height
       
   506 													).attr({stroke:"#00","stroke-width":0.1,  fill: colors[j]});	
       
   507 									addEheight +=TweetHeight;
       
   508 									e.time= frames[i].mytweetsID[k].timeframe;
       
   509 									e.title= frames[i].mytweetsID[k].title;
       
   510 									e.mouseover(function () {
       
   511 										//this.attr({stroke:"#fff","stroke-width":5});
       
   512 										//this.toFront();
       
   513 									}).mouseout(function () {
       
   514 										//this.attr({stroke:"#00","stroke-width":0.1});	
       
   515 									}).mousedown(function () {
       
   516 										__IriSP.MyApiPlayer.seek(this.time/1000);
       
   517 									});
       
   518 									__IriSP.jQuery(e.node).attr('id', 't'+k+'');
       
   519 									__IriSP.jQuery(e.node).attr('title', frames[i].mytweetsID[k].title);
       
   520 									__IriSP.jQuery(e.node).attr('begin',  frames[i].mytweetsID[k].timeframe);
       
   521 									var tempPosition = {x:i*frameSize,y:config.heightmax-addEheight};
       
   522 									addTip(e.node, frames[i].mytweetsID[k].title,colors[j],tempPosition);
       
   523 									//frames[i].mytweetsID.pop();
       
   524 								}
       
   525 							}
       
   526 						}
       
   527 					}
       
   528 				}
       
   529 
       
   530 			}		
       
   531 			// DRAW UI :: resize border and bgd
       
   532 			heightOfChart 	= (yMax-(config.height-yMax));
       
   533 			PaperBackground = paper.rect(0,yMax, this.width,heightOfChart).attr({fill:"#fff","stroke-width":0.1,opacity: 0.1});	
       
   534 			PaperBorder 	= paper.rect(0,yMax,this.width,1).attr({fill:"#fff",stroke: "none",opacity: 1});	
       
   535 			PaperSlider 	= paper.rect(0,20,1,heightOfChart).attr({fill:"#fc00ff",stroke: "none",opacity: 1});	
       
   536 			
       
   537 			// decalage 
       
   538 			tweetSelection = paper.rect(-100,-100,5,5).attr({fill:"#fff",stroke: "none",opacity: 1});	
       
   539 				
       
   540 			PaperSlider.toFront();
       
   541 			PaperBackground.toBack();
       
   542 		}
       
   543 		
       
   544 		if(typeof(PaperSlider) !== 'undefined' ) {
       
   545 			PaperSlider.toFront();
       
   546 		}
       
   547 		Report();
       
   548 	}
       
   549 
       
   550 	
       
   551 	// jQuery(document).mousemove(function(e){
       
   552 		// if (over){
       
   553 			// __IriSP.jQuery("#tip").css("left", e.pageX-106).css("top", e.pageY-160);
       
   554 			// __IriSP.jQuery("#tipcolor").css("background-color", tipColor);
       
   555 			// __IriSP.jQuery("#tiptext").text(tipText);
       
   556 			// __IriSP.jQuery("#tip").show();
       
   557 		// }else{
       
   558 			// if (typeof(__IriSP) !== 'undefined' && typeof(__IriSP.jQuery) === 'function') {
       
   559 				// __IriSP.jQuery("#tip").css("left", -10000).css("top", -100000);
       
   560 			    // //tweetSelection.attr({x:-100,y:-100});
       
   561 			// }
       
   562 		// }
       
   563 	// });
       
   564 	
       
   565 	// var over 	 = false;
       
   566 	// var tipText  = "";
       
   567 	// var tipColor = "#efefef";
       
   568 	// var tweetSelection;
       
   569 	// var PaperSlider;
       
   570 	
       
   571 	// AddTip  ******************************************************************************
       
   572 	function addTip(node, txt,color,tempPosition){
       
   573 			__IriSP.jQuery(node).mouseover(function(){
       
   574 			   tipText = txt;
       
   575 			   //tip.hide();//fadeIn(0);
       
   576 			   tipColor = color;
       
   577 			   over = true;
       
   578 			   //tweetSelection.attr(tempPosition);
       
   579 			   //tweetSelection.toFront();
       
   580 			}).mouseout(function(){
       
   581 			   //tip.show()//tip.fadeOut(0);
       
   582 			   over = false;
       
   583 			});
       
   584 			
       
   585 
       
   586 	}
       
   587 	
       
   588 		// jQuery(document).ready(function() {
       
   589 			// if (typeof(__IriSP) !== 'undefined' && typeof(__IriSP.jQuery) === 'function') {
       
   590 				// __IriSP.jQuery("#tip").hide();
       
   591 			// }
       
   592 		// });
       
   593     
       
   594