/* $Id: jquery.manheim.portlets.js,v 1.5 2010-06-22 10:27:09 gwoodger Exp $
 * Name:    Manheim portlets
 * Author:  M Ibbotson
 * Email:   Mark.Ibbotson@manheimeurope.com
 * Purpose: Provide storable widget home page layout 
 */
jQuery.manheimPortlets = {
  // Kick off
  
  initialize: function() {
  	jQuery.each(["#column1", "#column2", "#column3"], function(i, val){
	    jQuery(val).sortable({ connectWith: '.column', cursor: "move", handle: ".heading",
	        update: function() { jQuery.manheimPortlets.saveOrder("widgets"); }
        });
	});
	
	jQuery(".dragable").addClass("ui-widget ui-widget-content ui-helper-clearfix").find(".heading").end().find(".boxcontent");
	jQuery(".column").disableSelection();

	jQuery.manheimPortlets.loadOrder("widgets");
	jQuery.manheimPortlets.setup();	
		
  },
  
  // Make the boxes functional
  setup: function() {
    jQuery('.heading').hover(function() { 
    	jQuery(this).find('.show-hide').css('visibility', 'visible');
	}, function(){
		jQuery(this).find('.show-hide').css('visibility', 'hidden');  
	});
    jQuery('.boxcontent, .boxbottom').hover(function() { 
    	jQuery(this).prev('.heading').find('.show-hide').css('visibility', 'visible');
	}, function(){
		jQuery(this).prev('.heading').find('.show-hide').css('visibility', 'hidden');  
	});
	jQuery.fn.fadeToggle = function(speed, easing, callback) { 
	    return this.animate({opacity: 'toggle'}, speed, easing, callback); 
	};
	jQuery(".show-hide").click(function() {
		//jQuery(this).parent().parent().parent().siblings('.boxcontent, .boxbottom').slideToggle('slow');
		jQuery(this).parent().parent().parent().siblings('.boxcontent, .boxbottom').toggle();
		//jQuery(this).parent().siblings('.boxcontent, .boxbottom').slideToggle('slow');
		jQuery(this).parent().siblings('.boxcontent, .boxbottom').toggle();
		jQuery(this).parent().parent().parent().toggleClass('closed');
		jQuery(this).parent().parent().toggleClass('closed');
		jQuery(this).parent().toggleClass('closed');
		jQuery(this).toggleClass('hidden');
		jQuery.manheimPortlets.saveOrder("widgets");
		//jQuery.manheimUtils.initialize();
    });
  },
  
  //Returns an array of dom elements for a given column
  getColumnLayout: function(_column) {
  	var column = new Array();
	var id    = "";
	var display = "";
	jQuery.each(jQuery(_column).find(".boxcontent"), function(i, val){
	       id      = val.id.replace('-content',''); 
           display = val.style.display == 'none' ? 'none' : '';
		   column.push(id + ":" + display);
    });
	return column;
  },
  
  //Save portal layout in cookie
  saveOrder: function(cookiename) {
  	var setCookieExpiry = 28;
	var saved_layout    = "";
	var order           = new Array();
	order.push(jQuery.manheimPortlets.getColumnLayout("#column1"));
	order.push(jQuery.manheimPortlets.getColumnLayout("#column2"));
	order.push(jQuery.manheimPortlets.getColumnLayout("#column3"));
	saved_layout = JSON.stringify(order);
	// Save to cookie
	if (cookiename && order) {
       jQuery.cookie(cookiename, saved_layout, { expires: setCookieExpiry, path: "/",  domain:  document.domain });
	}
	// Save to DB
	if (jQuery("#logged_in_user").html()) {
		var user = jQuery.trim( jQuery("#logged_in_user").html() );
		jQuery.get("/ajax/daemon.mpl", { action: 'set', username: user, layout: saved_layout}, function(data){ });
	}
	// update reset link
	var link = " | <a onclick='jQuery.manheimPortlets.resetLayout()'>Reset layout &crarr;</a>";
	jQuery('#reset').html(link);
	jQuery("#reset").click(function(){ top.location="/"});
  },  
  
  // DB layout ** obsolete cookie is now set by default from index.pl
  getUserLayout: function() {
  	var user = jQuery.trim( jQuery("#logged_in_user").html() );
	jQuery.getJSON("/ajax/daemon.mpl", { action: 'get',  username: user },
	function(data){ return jQuery.manheimPortlets.manageUserLayout(data); });
  },  
  
  // Load the column data
  loadOrder: function(cookiename) {
  	var cookie = jQuery.cookie(cookiename); 
	var user = jQuery.trim( jQuery("#logged_in_user").html() );
	if (!jQuery.cookie(cookiename)) {
		if (user != null) { jQuery.manheimPortlets.getUserLayout();	}		
	}else {
		if (!cookie) return;  	
		var link = " | <a onclick='return jQuery.manheimPortlets.resetLayout()'>Reset layout &crarr;</a>";
		jQuery('#reset').html(link);
		jQuery("#reset").click(function(){ top.location="/"});
		jQuery.manheimPortlets.manageUserLayout(cookie);
	}
  },  
  
  // cookie or db formatting of json string
  manageUserLayout: function(cookie) {
  	var item =    new Array();
	var columns = ["#column1","#column2","#column3"];
	var container = eval(cookie); // dealing with a json string plays nice only when eval'd
	if(!container ) return;
	jQuery.each(container, function(i, val) {
		item = val.toString();
		jQuery.manheimPortlets.rebuild(columns[i], item.split(',') );
	});		
  },  
  
  // Rebuild columns from saved state
  rebuild: function(column, entries) {
	var list = jQuery(column);
	if (list == null) return;
	
	var rebuild = new Array();
	var index = 0;
	var items;
	
	for (var col=0; col<jQuery(".column").size(); col++) {
	  var id = jQuery(".column")[col].id;
	  var items = jQuery("#" + id).sortable("toArray");
	  for (var i=0, len = items.length; i<len; i++) {
		 rebuild[items[i]] = items[i];
	     index++;
	  }
	}
	
	for (var i=0, len=entries.length; i<len; i++) {
	   var itemID = entries[i];
	   var id = itemID.split(":");     
	   // layout
	   if (id[0] in rebuild) {
	      var item = rebuild[id[0]];
		  var child = jQuery(".ui-sortable").children("#" + item);
		  var savedOrd = jQuery(".ui-sortable").children("#" + item);
		  jQuery(".ui-sortable").filter(column).append(savedOrd);		  
	   }       
	   // toggle
	   if(id[1] == 'none') {
	   	  var current = jQuery("#"+ id[0] + "-content").parent().find('.show-hide');
		  try { jQuery(current).parent().siblings('.boxcontent, .boxbottom').toggle(); }
		  catch(e)  { console.log("Error: " + jQuery(current).parent().toggleClass('closed') + " : " + e );}
		  try { jQuery(current).parent().toggleClass('closed'); }
		  catch(e)  { console.log("Error: " + jQuery(current).parent().toggleClass('closed') + " : " + e );}
		  try { jQuery(current).toggleClass('hidden'); }
		  catch(e)  { console.log("Error: " + jQuery(current).parent().toggleClass('closed') + " : " + e );}
	   }	   
	}	
  },
  // reset user layout
  resetLayout: function() {
  	var user = jQuery.trim( jQuery("#logged_in_user").html() );
  	if(user != null) {
		    try {
				jQuery.get("/ajax/daemon.mpl", {
					action: 'reset',
					username: user
				}, function(data){ jQuery.cookie("widgets", null,{ expires: -1, path: "/",  domain:  document.domain }); });
			} 
			catch (error) {
				console.log("Unable to reset layout : " + error);
			}
  	} 
  	return 0;
  }
}
