// rubix

var init_rubix = function(type,id,doc_id,open) {

       var rubix = $("rubix_"+type+"_"+id);

       if ( rubix && !rubix.hasClassName("rubix") )
       {
	      rubix.remove();
	      rubix = undefined;
       }

       if ( ! rubix )
       {
	      rubix = create_rubix(type,id);
       }

       if ( ! rubix || rubix.is_loaded ) return;

       // context

       rubix.context='';
       rubix.addself=false;

       if ( id ) rubix.context = '/in/'+type+'/'+id;

       if ( window['pagerubix'] && window['pagerubix'].object==type && window['pagerubix'].object_id==id )
       {
	      rubix.is_cached = true;
	      if ( id && window['pagerubix'].self)
	      {
		     rubix.context = '/in/'+type+'/'+id+'/self';
		     rubix.addself = true;
	      }
	      // hook to get correct nb of docs in a group
	      if ( window['pagerubix'].doc_count)
	      {
		     Data[type][id].doc_count = window['pagerubix'].doc_count;
	      }
       }

       // divs

       rubix.div = { };

       var d = rubix.select('div');

       rubix.div['show'] = d[0];
       rubix.div['box']  = d[2];
       rubix.div['h3']   = rubix.select('h3')[0];

       // infos

       rubix.infos = [];

       var t = rubix.select('table')[2];

       rubix.infos['offset'] = t.select('td')[1];
       rubix.infos['count']  = t.select('td')[3];

       // open ?

       if ( open ) rubix.div['h3'].style.fontWeight="bold";

       // title link

       var link = rubix.div['h3'].select("a")[0];

       link.onclick=function(e) { if ( thumbs[page*8] ) this.href += '?from='+thumbs[page*8].doc_id+'&at='+thumbs[page*8].posted_at; };

       // [x] ?

       if ( id>0 && isyou && (type=="album" || type=="group") )
       {
	      var remove = rubix.div['h3'].select('a')[1];
	      if ( type=="album" )
	      {
		     remove.onclick = function() { $('tools').removeFromAlbum(id); return false; };
	      }
	      else if ( type=="group")
	      {
		     remove.onclick = function() { $('tools').removeFromGroup(id); return false; };
	      }
	      remove.style.display="inline";
       }
       else if ( type=="group" && Data['group'][id] && Data['group'][id].rel>0 && Data['group'][id].rel<4)
       {
	      var remove = rubix.div['h3'].select('a')[1];
	      remove.onclick = function() { $('tools').removeFromGroup(id); return false; };
	      remove.style.display="inline";
       }

       // images

       var imgs = rubix.getElementsByTagName('img');
       $A(imgs).each(function(img) {

			    if ( img.className=="rubix_img_toggle" )
			    {
				   img.src_open = URL['L']+"/rubix/album_open.png";
				   img.src_close= URL['L']+"/rubix/album_close.png";
				   img.src_current = URL['L']+"/rubix/album_open.png";

				   img.onmouseover = function() { this.src = this.src_current.replace('.png','_hover.png'); };
				   img.onmouseout  = function() { this.src = this.src_current; };
				   img.onclick     = function() { ( rubix.is_open )? rubix.close() : rubix.open(); };
				   img.id = rubix.id+"_toggle";
				   img.style.cursor="pointer";
			    }
			    else if ( img.className.substr(0,9)=="rubix_img" )
			    {
				   img.src_default = img.src;
				   img.src_disabled = img.src.replace('.png','_off.png');
				   img.active = true;

				   img.onmouseover = function() { if ( this.active) this.src=this.src_default.replace('.png','_hover.png'); };
				   img.onmouseout  = function() { if ( this.active) this.src=this.src_default; };
				   img.style.cursor="pointer";

				   if ( img.className=="rubix_img_left" )
				   {
					  img.id = rubix.id+"_left";
					  img.onclick=function() { if ( this.active) rubix.go_left(); };
				   }
				   else if ( img.className=="rubix_img_right" )
				   {
					  img.id = rubix.id+"_right";
					  img.onclick=function() { if ( this.active ) rubix.go_right(); };
				   }
				   else if ( img.className=="rubix_img_prev" )
				   {
					  img.id = rubix.id+"_prev";
					  img.onclick=function() { if ( this.active ) rubix.go_prev(); };
				   }
				   else if ( img.className=="rubix_img_next" )
				   {
					  img.id = rubix.id+"_next";
					  img.onclick=function() { if ( this.active ) rubix.go_next(); };
				   }
			    }
		     }
		    );

       // init values

       var thumbs = [], docs = [], done = [], pages = [], offset = [], page = 0, pos = 0;

       //
       // infos
       //

       if ( !id)
       {
	      var count = glob_user.doc_count;
       }
       else if ( type=="album" )
       {
	      var count = Data['album'][id].doc_count;
       }
       else if ( type=="group" )
       {
	      var count = Data['group'][id].doc_count;
       }
       else if ( type=="keyword" || type=="profile" )
       {
	      var count = Data[type][id].doc_count;
       }

       var c = (count>1)?_MSG['docs.']:_MSG['doc.'];
       rubix.infos['count'].innerHTML = '<span>'+count+'</span>&nbsp;' + c;

       //
       // load_thumbs
       //

       rubix.load_thumbs = function(page,dir,tries) {

	      IOL.debug("Loading Rubix params "+type+"_"+id+", page="+page+", self="+rubix.addself);

	      var params = {};
	      params['user_id'] = glob_user.user_id;

	      params['object'] = type;
	      params['object_id'] = id;
	      params['doc_id']  = doc_id;
	      if ( Data['doc'][doc_id] ) params['posted_at'] = Data['doc'][doc_id].posted_at;

	      // self ?
	      if ( rubix.addself ) params['self'] = 1;

	      if ( dir )
	      {
		     params['page']   = dir;
		     params['doc_id'] = thumbs[page*8].doc_id;
		     params['posted_at'] = thumbs[page*8].posted_at;
	      }

	      params['objback'] = 1;

	      if ( page==0 && rubix.is_cached)
	      {
		     var api = {success:true,rsp:window['pagerubix']};
	      }
	      else
	      {
		     var api = IOL.API.request("doc.rubix",params);
	      }

	      if ( api.success )
	      {
		     var rsp = api.rsp;

		     for(var i=0;i<=32;i++)
		     {
			    var n = page*8+i;
			    var p = page*8-i;

			    if ( rsp.next && rsp.next[i] ) { thumbs[n]   = rsp.next[i]; pages[Math.floor(n/8)]=1; if ( thumbs[n].doc_id==doc_id ) offset=n; }
			    if ( rsp.prev && rsp.prev[i] ) { thumbs[p-1] = rsp.prev[i]; pages[Math.ceil(p/8)-1]=1; if ( thumbs[p-1].doc_id==doc_id ) offset=p-1; }
		     }

		     if ( rsp.next && rsp.next[32] ) pages[page+4]=-1;
		     if ( rsp.prev && rsp.prev[32] ) pages[page-5]=-1;

		     /*
		      for(var i=-500;i<500;i++)
		      {
		      if ( thumbs[i] ) IOL.debug(i+":"+thumbs[i].doc_id);
		      }
		      for(var i=-50;i<50;i++)
		      {
		      if ( pages[i]!=undefined ) IOL.debug(i+":"+pages[i]);
		      }
		      */

		     pagerubix = undefined;

		     return true;
	      }
	      else
	      {
		     // retry 3 times
		     if ( tries < 3 )
		     {
			    return this.load_thumbs(page,dir,tries+1);
		     }
		     else
		     {
			    alert(_MSG['failed']+" RUBIX "+type+'-'+id+'('+params['user_id']+')');
			    return false;
		     }
	      }
       };

       //
       // display : show the
       //

       rubix.display = function() {

	      // save rubix
	      window['glob_rubix_thumbs'] = thumbs;

	      // display thumbnails

	      if ( ! done[page] )
	      {
		     var end = false;

		     for (var i=0;i<8;i++)
		     {
			    var t = page*8+i;

			    if ( thumbs[t] )
			    {
				   var el = document.createElement("a");
				   el.style.cursor="pointer";
				   el.id = t;

				   var img  = document.createElement("img");
				   img.src = thumbs[t]['doc_url']+'.t.jpg';
				   img.style.width = img.style.height = "75px";

				   el.appendChild(img);

				   if ( thumbs[t].doc_id == doc_id )
				   {
					  img.style.border="solid 1px #ff6600";
					  new Effect.Opacity(img,{to:0.5});
				   }
				   else
				   {
					  el.onmouseover = function() { this.style.backgroundColor="#0087e1"; };
					  el.onmouseout  = function() { this.style.backgroundColor="#eee"; };
					  img.style.padding="1px";
				   }

				   var alias=(glob_user.user_id==thumbs[t].user_id)?glob_user.folder:thumbs[t].user_id;

				   el.href = '/doc/'+alias+'/'+thumbs[t].doc_id;

				   // context
				   el.href += rubix.context;

				   // from
				   if ( page>=0 )
				   {
					  el.href += '?from='+thumbs[page*8].doc_id+'&at='+thumbs[page*8].posted_at;
				   }
				   else
				   {
					  for(var f=0;f<8;f++) { if ( thumbs[page*8+f] ) { el.href += '?from='+thumbs[page*8+f].doc_id+'&at='+thumbs[page*8+f].posted_at; break; }}
				   }

				   el.title = thumbs[t]['title'].unxmlentities();
			    }
			    else
			    {
				   var el = document.createElement("div");
				   el.style.position="absolute";
				   el.style.width=el.style.height="75px";
				   el.className="end";
				   if ( ! end && ( page>=0 || (page<0 && thumbs[t+1]) ) )
				   {
					  el.innerHTML = (page<0)?_MSG['last_doc']:_MSG['first_doc'];
					  end=true;
				   }
			    }

			    var c = (i<4)? i:i-4;
			    var l = (i<4)? 0:1;

			    el.style.left = (pos+c*77)+"px";
			    el.style.top  = (l*77)+"px";

			    if ( thumbs[t] && 0)
			    {
				   var xx = document.createElement("div");
				   xx.innerHTML = t+' '+thumbs[t].doc_id;
				   xx.style.position="absolute";
				   xx.style.left = "5px";
				   xx.style.top  = "5px";
				   xx.style.color="#fff";
				   xx.style.fontSize="10px";
				   xx.style.backgroundColor="#000";
				   el.appendChild(xx);
			    }

			    // embed icon ?
			    if ( thumbs[t] && (thumbs[t]['type']==2 || thumbs[t]['type']==3) )
			    {
				   var embed = document.createElement("img");
				   embed.src = (thumbs[t]['type']==2)? URL['L']+'/icons/embed.mp3.png' : URL['L']+'/icons/embed.flv.png';
				   embed.className = "pngfix";
				   embed.style.width="16px";
				   embed.style.height="16px";
				   embed.style.position="absolute";
				   embed.style.left = "58px";
				   embed.style.top  = "58px";
				   el.appendChild(embed);
			    }
			    rubix.div['box'].appendChild(el);
		     }
		     done[page]=1;
	      }

	      //rubix.infos['offset'].innerHTML = col + ':' + pos;

	      if ( pages[page-1] )
	      {
		     $(rubix.id+"_left").src = $(rubix.id+"_left").src_default;
		     $(rubix.id+"_left").style.cursor = "pointer";
		     $(rubix.id+"_left").active = true;
	      }
	      else
	      {
		     $(rubix.id+"_left").src = $(rubix.id+"_left").src_disabled;
		     $(rubix.id+"_left").style.cursor = "default";
		     $(rubix.id+"_left").active = false;
	      }

	      if ( pages[page+1] )
	      {
		     $(rubix.id+"_right").src = $(rubix.id+"_right").src_default;
		     $(rubix.id+"_right").style.cursor = "pointer";
		     $(rubix.id+"_right").active = true;
	      }
	      else
	      {
		     $(rubix.id+"_right").src = $(rubix.id+"_right").src_disabled;
		     $(rubix.id+"_right").style.cursor = "default";
		     $(rubix.id+"_right").active = false;
	      }

	      if ( thumbs[offset-1] && page==0)
	      {
		     $(rubix.id+"_prev").src = $(rubix.id+"_prev").src_default;
		     $(rubix.id+"_prev").style.cursor = "pointer";
		     $(rubix.id+"_prev").active = true;
	      }
	      else
	      {
		     $(rubix.id+"_prev").src = $(rubix.id+"_prev").src_disabled;
		     $(rubix.id+"_prev").style.cursor = "default";
		     $(rubix.id+"_prev").active = false;
	      }

	      if ( thumbs[offset+1] && page==0)
	      {
		     $(rubix.id+"_next").src = $(rubix.id+"_next").src_default;
		     $(rubix.id+"_next").style.cursor = "pointer";
		     $(rubix.id+"_next").active = true;
	      }
	      else
	      {
		     $(rubix.id+"_next").src = $(rubix.id+"_next").src_disabled;
		     $(rubix.id+"_next").style.cursor = "default";
		     $(rubix.id+"_next").active = false;
	      }


	      return true;
       };

       //
       // go_left
       //

       rubix.go_left = function() {

	      if ( this.is_moving ) { return; }

	      if ( pages[page-1] )
	      {
		     this.is_moving = true;

		     if (pages[page-1]<0) this.load_thumbs(page,-1,0);

		     page--;
		     pos -= 308;

		     if ( this.display() )
		     {
			    new Effect.Move(this.div['box'],
			    { x: +308, y: 0,
			    transition: Effect.Transitions.sinoidal,
			    duration:0.3,
			    afterFinish:function() { rubix.is_moving=false;}
			});
		     }
	      }

	      rubix.page = page;

       };

       //
       // go_right
       //

       rubix.go_right = function() {

	      if ( this.is_moving ) { return; }

	      if ( pages[page+1] )
	      {
		     this.is_moving = true;

		     if (pages[page+1]<0) this.load_thumbs(page+1,1,0);

		     page++;
		     pos += 308;

		     if ( this.display() )
		     {
			    new Effect.Move(this.div['box'],
			    { x: -308, y: 0,
			    transition: Effect.Transitions.sinoidal,
			    duration:0.3,
			    afterFinish:function() { rubix.is_moving=false;}
			});

		     }
	      }

	      rubix.page = page;

       };

       //
       // go_prev
       //

       rubix.go_prev = function() {

	      var thumb = thumbs[offset-1];
	      if ( ! thumb ) return;

	      var page = Math.ceil(offset/8)-1;

	      var alias = (thumb.user_id==glob_user.user_id)?glob_user.folder:thumb.user_id;

	      var url = '/doc/'+alias+'/'+thumb.doc_id;
	      if ( type && id )    url += rubix.context;

	      if ( offset>0 )
	      {
		     url += '?from='+thumbs[page*8].doc_id+'&at='+thumbs[page*8].posted_at;
	      }
	      else
	      {
		     for(var f=0;f<8;f++) { if ( thumbs[page*8+f] ) { url += '?from='+thumbs[page*8+f].doc_id+'&at='+thumbs[page*8+f].posted_at; break; }}
	      }

	      document.location=url;
       };

       //
       // go_next
       //

       rubix.go_next = function() {

	      var thumb = thumbs[offset+1];
	      if ( ! thumb ) return;

	      var page = Math.floor((offset+1)/8);

	      var alias = (thumb.user_id==glob_user.user_id)?glob_user.folder:thumb.user_id;

	      var url = '/doc/'+alias+'/'+thumb.doc_id;
	      if ( type && id )    url += rubix.context;
	      if ( thumbs[page*8]) url += '?from='+thumbs[page*8].doc_id+'&at='+thumbs[page*8].posted_at;

	      document.location=url;
       };

       //
       // open
       //

       rubix.open = function() {

	      $(rubix.id+'_toggle').src = $(rubix.id+'_toggle').src_current = $(rubix.id+'_toggle').src_close;

	      rubix.div['h3'].addClassName("on");

	      if ( ! pages[0] ) this.load_thumbs(0,0,0);

	      rubix.display();

	      rubix.div['show'].style.display="block";

	      rubix.is_open = true;
       };

       //
       // close
       //

       rubix.close = function() {

	      $(rubix.id+'_toggle').src = $(rubix.id+'_toggle').src_current = $(rubix.id+'_toggle').src_open;

	      rubix.div['h3'].removeClassName("on");

	      rubix.div['show'].style.display="none";

	      rubix.is_open = false;
       };

       // open ?

       if ( open ) rubix.open();

       // is_loaded

       rubix.is_loaded = true;

};

var create_rubix = function(type,id) {

       var rubixes = $('rubixes');
       var ti      = type+'_'+id;

       var set = Data[type][id];

       if ( set==undefined ) return false;

       if ( type=="album" )
       {
	      var title = set.title;
	      var url = '/doc/'+glob_user.folder+'/album/'+id;
       }
       else if ( type=="group" )
       {
	      var title = set.title +  ' ('+_MSG['group']+')';
	      var url = '/group/'+id+'/doc';
       }
       else
       {
	      // not very good...
	      var title = set.title;
	      var url = '/explore/'+type+'/'+id;
       }

       var div = new Element("div");

       div.id = "rubix_"+ti;
       div.className="rubix";

       var html =
	      '<table border="0" cellspacing="0" cellpadding="0">'+
	      '<tr valign="middle">'+
	      '<td width="20"><img src="'+URL['L']+'/rubix/album_open.png" class="rubix_img_toggle"/></td>'+
	      '<td><h3 class="'+(type=="group"?"is_group":"")+'"><a href="'+url+'">'+title+'</a> '+ '<a href="#" class="trash" style="display:none">[x]</a>'+'</h3></td>'+
	      '</tr>'+
	      '</table>'+
	      '<div style="display:none">'+
	      '<table border="0" width="100%" cellspacing="0" cellpadding="0" class="rubix_case">'+
	      '<tr>'+
	      '<td width="308">'+
	      '<div class="rubix_wrap"><div class="rubix_box"></div></div>'+
	      '</td>'+
	      '</td>'+
	      '</tr>'+
	      '</table>'+
	      '<table border="0" width="100%" cellspacing="0" cellpadding="0" class="rubix_tools">'+
	      '<tr>'+
	      '<td>'+
	      '<img class="rubix_img_left" src="'+URL['L']+'/rubix/left.png"/>'+
	      '<img class="rubix_img_prev" src="'+URL['L']+'/rubix/prev.png"/>'+
	      '<img class="rubix_img_next" src="'+URL['L']+'/rubix/next.png"/>'+
	      '<img class="rubix_img_right" src="'+URL['L']+'/rubix/right.png"/>'+
	      '</td>'+
	      '<td class="rubix_offset"></td>'+
	      '<td></td>'+
	      '<td class="rubix_count" align="right"><span></span></td>'+
	      '</tr>'+
	      '</table>'+
	      '</div>';
       div.innerHTML = html;

       rubixes.appendChild(div);

       return div;
};

var delete_rubix = function(type,id) {

       var rubixes = $('rubixes');

       if ( $('rubix_'+type+'_'+id) )
       {
	      rubixes.removeChild($('rubix_'+type+'_'+id));
       }

};
