﻿var columns = ["#col1", "#col2", "#col3"];
var jQueryels = jQuery(columns.toString());
var setSelector = jQueryels;
// set the cookie name
var setCookieName = "boxOrder";
// set the cookie expiry time (days):
var setCookieExpiry = 100;
var hiddenBoxesArray = new Array();

jQuery('.title').css('cursor','move');
jQuery('.ui-sortable-helper').css('width','400px');

// code executed when the document loads
function sortableCustomisation(templateId) {
	// here, we allow the user to sort the items
	jQuery(setSelector).sortable({

			items : ".sort",
			handle : ".title h2",
			connectWith : jQueryels,
			revert : true,
			appendTo: '#wrapper',
			ghosting:   true,
			zIndex : 10,
			cursor: 'move',
			opacity: 0.6,	
			helper: 'clone',
			placeholder: 'placeholder',
			tolerance: 'intersect',
			forcePlaceholderSize:true,
			scroll:true,
			start: function(e,ui) {
				ui.helper.css("width", ui.item.width());
			},
			update: function(e,ui) { 
                //console.log(jQuery(this).sortable('toArray'))
		        getOrder(templateId);
	        }

	});
	
	// here, we reload the saved order
	
	restoreOrder(templateId);
	restoreToggle();
}


// function that writes the list order to a cookie
function getOrder(templateId) 
{
	// save custom order to cookie
	jQuery.cookie(templateId + "_col1", jQuery("#col1").sortable("toArray"), { expires: setCookieExpiry, path: "/" });
	jQuery.cookie(templateId + "_col2", jQuery("#col2").sortable("toArray"), { expires: setCookieExpiry, path: "/" });
	jQuery.cookie(templateId + "_col3", jQuery("#col3").sortable("toArray"), { expires: setCookieExpiry, path: "/" });
	
	doAjaxGet(document.location.href, {saveCustomisations:"true"});
}

// function that restores the list order from a cookie
function restoreOrder(templateId) {

    for(var j = 1; j <= 3; j++) {
	    var list = jQuery("#col" + j);
	    if (list == null) return
	    // fetch the cookie value (saved order)
	    var cookie = jQuery.cookie(templateId + "_col"+j);
	   // alert(j + " - " + cookie);
	    if (!cookie) return;
    	
	    // make array from saved order
	    var IDs = cookie.split(",");
    	
	    // fetch current order
	    var items = list.sortable("toArray");
	    // make array from current order
	    var rebuild = new Array();
	    for ( var v=0; v<items.length; v++ ){
		    rebuild[items[v]] = items[v];
	    }
    	
	    for (var i = 0; i < IDs.length; i++) {
		    // item id from saved order
		    var itemID = IDs[i];
		    //if (itemID in rebuild) {
			   
			    // select item id from current order
			    var item = rebuild[itemID];
    			//alert(rebuild[itemID]);
			    
			    // select the item according to current order
			    var child = jQuery(".ui-sortable").children("#" + item);
    			
			    
			    // select the item according to the saved order
			    var savedOrd = jQuery(".ui-sortable").children("#" + itemID);
    			
			    // remove all the items
			    child.remove();
				
				
    			
			    // add the items in turn according to saved order
			    // we need to filter here since the "ui-sortable"
			    // class is applied to all ul elements and we
			    // only want the very first!  You can modify this
			    // to support multiple lists - not tested!
			    jQuery("#col" + j).append(savedOrd);
		    //}
	    }
	}
}

            

function restoreToggle()
{
	var hiddenBoxes = jQuery.cookie("hiddenBoxes");
	if (hiddenBoxes != null)
		hiddenBoxesArray = hiddenBoxes.split(',');
	
	
    jQuery(".sort").each(function() {
        var toggle = jQuery(".toggle", this);
        var content = jQuery(".hideShow", this);
        var box = this;

        if(hiddenBoxes != null)
        {
			var hiddenSplit = hiddenBoxes.split(",");
			var boxFoundInSplit = false;
			for (var i = 0; i < hiddenSplit.length; i++)
			{
				if (hiddenSplit[i] == box.id)
				{
					boxFoundInSplit = true;
					break;
				}
			}

			if(boxFoundInSplit)
			{
				toggle.addClass("plus");
				content.slideUp("slow");				
				toggle.toggle(
					function(e)
					{
						var x = -1;
						for(var i = 0; i <= hiddenBoxesArray.length; i++)
						{
							if(hiddenBoxesArray[i] == box.id)
							{
								x = i;
								break;
							}
						}
		                
						if (x != -1)
							hiddenBoxesArray.splice(x, 1);
							
						jQuery.cookie("hiddenBoxes", hiddenBoxesArray.toString(), { expires: setCookieExpiry, path: "/" });
						toggle.addClass("minus");
						toggle.removeClass("plus");
						content.slideDown("slow");
						doAjaxGet(document.location.href, {saveCustomisations:"true"});
					},
					function(e)
					{
						var exists = false;
						for(var i = 0; i < hiddenBoxesArray.length; i++)
						{
							if(hiddenBoxesArray[i] == box.id)
							{
								exists = true;
								break;
							}
						}
		                
						if(!exists)
							hiddenBoxesArray.push(box.id);
		                    
						jQuery.cookie("hiddenBoxes", hiddenBoxesArray.toString(), { expires: setCookieExpiry, path: "/" });
						toggle.addClass("plus");
						toggle.removeClass("minus");
						content.slideUp("slow");
						doAjaxGet(document.location.href, {saveCustomisations:"true"});
					}
				); //end toggle function set
			}
			else 
			{
				toggle.addClass("minus");				
				toggle.toggle(
					function(e) {
						var exists = false;
						for(var i = 0; i < hiddenBoxesArray.length; i++)
						{
							if(hiddenBoxesArray[i] == box.id)
							{
								exists = true;
								break;
							}
						}
		                
						if(!exists)
							hiddenBoxesArray.push(box.id);
		                    
						jQuery.cookie("hiddenBoxes", hiddenBoxesArray.toString(), { expires: setCookieExpiry, path: "/" });
						toggle.addClass("plus");
						toggle.removeClass("minus");
						content.slideUp("slow");
						doAjaxGet(document.location.href, {saveCustomisations:"true"});
					},
					function(e) {
						var x = -1;
						for(var i = 0; i <= hiddenBoxesArray.length; i++)
						{
							if(hiddenBoxesArray[i] == box.id)
							{
								x = i;
								break;
							}
						}
		                
						if (x != -1)
							hiddenBoxesArray.splice(x, 1);
							
						jQuery.cookie("hiddenBoxes", hiddenBoxesArray.toString(), { expires: setCookieExpiry, path: "/" });
						toggle.addClass("minus");
						toggle.removeClass("plus");
						content.slideDown("slow");
						doAjaxGet(document.location.href, {saveCustomisations:"true"});
					}
				); //end toggle function set
			}
        }
        else 
        {
			toggle.addClass("minus");
			toggle.toggle(
				function(e) {
					var exists = false;
					for(var i = 0; i < hiddenBoxesArray.length; i++)
					{
						if(hiddenBoxesArray[i] == box.id)
						{
							exists = true;
							break;
						}
					}
	                
					if(!exists)
						hiddenBoxesArray.push(box.id);
	                    
					jQuery.cookie("hiddenBoxes", hiddenBoxesArray.toString(), { expires: setCookieExpiry, path: "/" });
					toggle.addClass("plus");
					toggle.removeClass("minus");
					content.slideUp("slow");
					doAjaxGet(document.location.href, {saveCustomisations:"true"});
				},
				function(e) {
					var x = -1;
					for(var i = 0; i <= hiddenBoxesArray.length; i++)
					{
						if(hiddenBoxesArray[i] == box.id)
						{
							x = i;
							break;
						}
					}
	                
					if (x != -1)
						hiddenBoxesArray.splice(x, 1);
						
					jQuery.cookie("hiddenBoxes", hiddenBoxesArray.toString(), { expires: setCookieExpiry, path: "/" });
					toggle.addClass("minus");
					toggle.removeClass("plus");
					content.slideDown("slow");
					doAjaxGet(document.location.href, {saveCustomisations:"true"});
				}
			); //end toggle function set
        
        } // end if hiddenBoxes != null

    }); // end each function
}
