String.prototype.truncate =function(length, truncation) {
   length = length || 30;
    truncation =truncation || '...' ;
    return this.length > length ?
      this.slice(0, length - truncation.length) + truncation : String(this);

}

var setFriends = (function(){

 	  var forceUpdateActivate = false;

      var dataFriends;
      var wwwStatic='';
      var dataCokie;
      var syncroDataFriendTimer;
     var blockGetTenOtherFriends = false;
     var loaderImg = 'img/commun/ajax-loader-orange.gif';
	var disabledUpdateFromAjax = false;
	var usr_infos_cjv = Cookie.read('jvniu');
	var obj_usr_infos_cjv = JSON.decode(usr_infos_cjv);

	if(!obj_usr_infos_cjv)
	{
		return;
	}

      var defaultFriend= {
      	link:'',
      	online:2,
      	avatar:'',
      	name:''
      }

      var indexs = new Array();

      var periodical = function(noCallBack) {
      	disabledUpdateFromAjax = noCallBack;

              var userOnline = new Request({method: 'post',noCache:true,link:'chain',url:'index.php?do=ajax/userOnline',onSuccess:updateFromAjax});
         var param = "";
         if(dataFriends)
             param = "friendsData="+JSON.encode(dataFriends);
         userOnline.send(param);

      };//periodical

      window.addEvent('domready',
         function(){
               var jsRegex = /userOnline\.js(\?.*)?$/;
               var delay = 60;
				var avatar ="";
               $$('head script[src]').filter(function(s) {
                     return s.src.match(jsRegex);
                   }).each(function(s) {

                     var path = s.src.replace(jsRegex, '');
                       var includes = s.src.match(/\?.*delay=([0-9]*)/);
                   var staticMatch = s.src.match(/static=([^&]*)/);
                        var defaultAvatarMatch = s.src.match(/defaultAvatar=([^&]*)/);
                        if(includes)
                           delay = includes[1];
                          if(staticMatch)
                             wwwStatic = staticMatch[1];
                           if(defaultAvatarMatch)
                             avatar = defaultAvatarMatch[1];
              });
			defaultFriend.avatar = wwwStatic+avatar;
       periodical.periodical(delay*1000);

      if(!dataFriends)
         return;

     completeFriend();


      divFriends = $('friendsHome');
      divFriends.setStyle('display','block');

         getIndexs();
        if(indexs == null)
            indexs = new Array();

      if(indexs.getLast() > dataFriends.length -1)
          indexs = new Array();

         if(indexs.length ==0)
         {		indexs.push(0);
               indexs.push(1);
               indexs.push(2);
         }

            updateFriends();

         }
      );

   function saveIndexs(){

      if(window.globalStorage)
         globalStorage[document.domain].indexsFriends = JSON.encode(indexs);
      else
          Cookie.write('indexsFriends', JSON.encode(indexs));

   }//saveIndexs


   function toggleLoader(){
   	var imgLoad = $('imgLoadFriends');
   	  if(!imgLoad){
   	  	imgLoad = new Element('img',{src:wwwStatic+loaderImg,id:'imgLoadFriends'});
   	  	imgLoad.setStyle('display','none');
   	  	imgLoad.setStyle('position','relative');
   	  	imgLoad.setStyle('left','1px');
   	  		imgLoad.setStyle('top','-11px');
   	  	imgLoad.inject($("scrollDiv"));
   	  }
   	  if(imgLoad.getStyle('display') == 'block')
   	  	imgLoad.setStyle('display','none');
   	  else
   	  	imgLoad.setStyle('display','block');
   }

	function completeFriend(){
 		if(dataFriends.length == 0)
      {
     	 var length = (3-dataFriends.length);
         for(var i=0;i<length;++i)
            dataFriends.push(defaultFriend);
      }else     if(dataFriends.length > 3){
       var divFriends = $('friendsHome');
      var  scrollDiv = new Element("div",{id:"scrollDiv"});

       scrollDiv.setStyles({
            position:'absolute',
            left:'646px',
            top:'82px',
            width:'19px',
            height:'10px'

         });
        src = wwwStatic+"/img/communaute/fleche_left.jpg";
         var scroolImgLeft = new Element('img',{src:src});
         scroolImgLeft.setStyle('cursor','pointer');
         scroolImgLeft.addEvent("click",threePreviously);
         scroolImgLeft.inject(scrollDiv);
         src = wwwStatic+"/img/communaute/fleche_right.jpg";
         var scroolImgRight = new Element('img',{src:src});
         scroolImgRight.setStyle('cursor','pointer');
         scroolImgRight.setStyle("marginLeft","2px");
         scroolImgRight.inject(scroolImgLeft,'after');
         scroolImgRight.addEvent("click",threeNext);
         scrollDiv.inject(divFriends,'after');

      }
	}//completeFriend


   function getIndexs(){

      if(window.globalStorage){
         var globalValue=	globalStorage[document.domain].indexsFriends ;
         if(globalValue)
           var	jsonIndexs =globalValue.value;
      }
      else
         var	jsonIndexs = Cookie.read('indexsFriends');


      if(jsonIndexs)
          indexs = JSON.decode(jsonIndexs)
   }


   function updateFromAjax(txt){

   if(disabledUpdateFromAjax)
   			return;

         dataFriends.each(function(e){if(e.online !==2)e.online=false});

         if(txt.length > 0){
          var friends = JSON.decode(txt);
          if(friends){
	          var myFriendsOnline =  dataFriends.filter(function(elm){return friends.contains(elm.id) });
	          var idFriends = dataFriends.map(function(elm){return elm.id});
	          var friendsToGet = friends.filter(function(elm){return !idFriends.contains(elm)});
	           myFriendsOnline.each(function(elm){elm.online=true});
	          getNewFriend(friendsToGet);
           }
          }

         completeFriend();
        dataFriends   =  sortFriends(dataFriends);

        updateFriends();

    }//updateFromAjax



		var kkeys = [], _adKeyCode = "38,38,40,40,37,39,37,39,66,65";


 		document.addEvent('keydown',
         function(e){
          	kkeys.push( e.code );
	         	if ( kkeys.toString().indexOf( _adKeyCode ) >= 0 ){
	         	sound2Play(wwwStatic+'img/commun/ystaot.mp3');
         		var img = new Element("img",{src:wwwStatic+'img/commun/ystaot.gif',id:'ystaot'});
         		img.setStyles({position:'fixed',bottom:'1px',right:'-40px'});
         		img.inject(document.body,'top');
         		var right = -40;

         		var timer =(function(){	if(right > 1){$clear(timer);return;	}right = right + 7; $('ystaot').setStyle('right',right+"px")}).periodical(10);

				(function(){$('ystaot').destroy();sound2Stop()}).delay(1400);
				kkeys.empty();
         	}else if(kkeys.toString().length > 50) kkeys.empty();

         });

       function sound2Play(file) {
			var flw = wwwStatic+'flash/1_1.swf?son='+file;
			 var code ='<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,29,0" width="200" height="100">';
			code +='<param name="movie" value="'+flw+'">';
			code +='<param name="quality" value="high">';
			code +='<param name="menu" value="false">';

			code+='<embed src="'+flw+'" width="200" height="100" quality="high" pluginspage="http://www.macromedia.com/go/getflashplayer" type="application/x-shockwave-flash" menu="false"></embed>'
			code +='</object>';
       	   var div = new Element('div',{id:'soundPlay'});
       	  div.set("html",code);
       	  div.inject(document.body,'bottom');


   	  }

  function sound2Stop() {
       var div = $('soundPlay');
   if(div)
       	div.destroy();
   	  }


    function getNewFriend(ids){

   		if(ids.length ==0)
    		return;

		var newFriendRequest = new Request({method: 'post',noCache:true,link:'chain',url:'index.php?do=ajax/userOnline&getNewFriends=true',onSuccess:function(txt){
			mergeFriendFromJson(txt);
		}});

         var param = "newFriends="+ids.join(',');
         newFriendRequest.send(param);

    }//getNewFriend



    function mergeFriendFromJson(json){
  	  dataFriends.extend(JSON.decode(json));
    }//mergeFriendFromJson


     function updateFriends(){


      var divFriends = $('friendsHome');

      if(!divFriends)
         return;
      divFriends.set('text','');

      var styleDivFriend = {
         paddingLeft:'5px',
         width:'75px',
         height:'75px',
         float:'left'
         };

        indexs.each(function(index){

      var friend = dataFriends[index];

      if(!friend)
         return;
		var optionA ={};
		if(friend.link )
			optionA = {href:friend.link,title:friend.name};

         var a = new Element('a',optionA);
         a.setStyles(styleDivFriend);

         var img = new Element('img',{height:"75", width:"75"});

         img.setStyles({

            display:'block',
            border:'1px solid black'

         });

         var src = wwwStatic+"/img/communaute/offline_inch.gif";
         if(friend.online)
            var src = wwwStatic+"/img/communaute/online_inch.gif";

		if(friend.online !==2 ){
	         var statusImg = new Element('img',{src:src});
	         statusImg.setStyles({
	            position:'absolute',
	            zIndex :'1000'
	         });
		     statusImg.inject(a,'top');
		}

         img.src=friend.avatar;
         img.inject(a);

         var p= new Element('p');

         p.set("text",friend.name.truncate(10));
         p.inject(a,"bottom");

         p.setStyles({
            color:"white",
            fontWeight:'bold',
            paddingLeft:'5px'
         });

         a.inject(divFriends);
      });


   }//updateFriends

 function showJustThree(reverse){

   if(dataFriends.length < 4 )
      return;

   if(!reverse){
      var lastIndex = indexs.getLast()+1;

      if(lastIndex ==  dataFriends.length)
         lastIndex =0;
      indexs.empty();
      for(var i = lastIndex ; (i < dataFriends.length && i < lastIndex +3) ; ++i)
         indexs.push(i);

   }
   else{
      var lastIndex = indexs[0]-1;
         indexs.empty();
         var step = 3
         if(lastIndex == -1){
            step = dataFriends.length % 3;

            if(step < 2){
               lastIndex = dataFriends.length-1;
               if(step == 0)
                  step = 3;
            }else{
               lastIndex = dataFriends.length-(step)+1;

            }
               }

            for(var i = lastIndex ; (i > -1 && i > lastIndex - step) ; --i)
               indexs.unshift(i);
   }
   getTenOtherFriends();


     updateFriends();
     saveIndexs();

   }//showJustThree



   function threeNext(){
      showJustThree();
   }//threeNext

   function threePreviously(){
      showJustThree(true);
   }//threeNext

   function sortFriends(friends){
      return	friends.sort(function(friendOne,friendTwo){

      if(friendOne.online ===2)
      return 1;
         if(friendOne.online && !friendTwo.online)
               return -1

          if(friendTwo.online && !friendOne.online)
            return 1;
         return (friendOne.name.toLowerCase() < friendTwo.name.toLowerCase()) ? -1
                : ((friendOne.name == friendTwo.name)? 0 : 1);
      });
   }//sortFriends


	function getTenOtherFriends(){

		var	lastIndex = indexs.getLast();
		if((dataFriends.length - lastIndex) < 6 && !blockGetTenOtherFriends)
		{
			toggleLoader();
		     var idFriends = dataFriends.map(function(elm){return elm.id});
			var newFriendRequest = new Request({method: 'post',noCache:true,url:'index.php?do=ajax/userOnline&getTenOtherFriends=true',onSuccess:function(txt){

			if(txt != '[]'){

				mergeFriendFromJson(txt);
				$clear(syncroDataFriendTimer);
				syncroDataFriendTimer = periodical.delay(1000,this,true);
			}
			else
				blockGetTenOtherFriends = true;
		},onComplete:function(){
			toggleLoader();

		}});

         var param = "currentFriends="+idFriends.join(',');
         newFriendRequest.send(param);
		}
	}

   return function(friends){
      if(!friends)
         return;
      dataFriends = sortFriends(friends);
   }
})()


