﻿//field names DON'T CHANGE AFTER BEING RENAMED - once "title", always "title"



 

if(jQuery) {
		jQuery.fn.listAttributes = function() {
			var attributes = new Array();
			$(this).each(function() {
				for (var i=0; i<this.attributes.length; i++)
				{
					attributes.push(this.attributes.item(i).nodeName);
				}
			});
			return attributes;
		}
}
//end listAttributes Plugin - use this to see what attributes 


//this function can initialize an array to contain sharepoint list data
function ImportSPListToArray(ListName,FieldName)
{
var ArrayForStorage = new Array();
$(document).ready(function() {
  $().SPServices({
    operation: "GetListItems",
    async: false,
    listName: ListName,
    CAMLViewFields: "",
    CAMLQueryOptions: "<QueryOptions><ViewAttributes Scope='RecursiveAll'/></QueryOptions>",
    completefunc: function (xData, Status) {
      $(xData.responseXML).find("[nodeName='z:row']").each(function() {
        ArrayForStorage.push($(this).attr("ows_" + FieldName.replace(new RegExp( " ", "gi" ),"_x0020_")));
      });
    }
  });

});
  return ArrayForStorage;
}


//this function can initialize an array to contain sharepoint list data
function ImportSPListToArrayDEBUG(ListName,FieldName)
{
var ArrayForStorage = new Array();
$(document).ready(function() {

  
  $().SPServices({
    operation: "GetListItems",
    async: false,
    listName: ListName,
    CAMLViewFields: "",
    CAMLQueryOptions: "<QueryOptions><ViewAttributes Scope='RecursiveAll'/></QueryOptions>",
    completefunc: function (xData, Status) {
      $(xData.responseXML).find("[nodeName='z:row']").each(function() {
        ArrayForStorage.push($(this).attr("ows_" + FieldName.replace(new RegExp( " ", "gi" ),"_x0020_")));
        var Attributes = $(this).listAttributes();
        var ItemData = "";
        for (var i = 0; i<Attributes.length; i++)
{
        	if (FieldName == Attributes[i])
        		{
        			ArrayForStorage.push($(this).attr(Attributes[i]));
        		}
        	ItemData += "  ###### ATTRIBUTE: \"" + Attributes[i] + "\" @@@@@@ DATA: \"" + $(this).attr(Attributes[i]) + "\" <br/>";
        	}
        document.write("############################################ " + $(this).attr("ows_" + FieldName.replace(" ","_x0020_")) + " ################### <br/>" + ItemData);
      });
    }
  });

});
  return ArrayForStorage;
}


function ImportSPListColumnsToArray(ListName)
{
	var ArrayForStorage = new Array();
$(document).ready(function() {

  
$().SPServices({
    operation: "GetListItems",
    async: false,
    listName: ListName,
    CAMLViewFields: "",
    CAMLQueryOptions: "<QueryOptions><ViewAttributes Scope='RecursiveAll'/></QueryOptions>",
    completefunc: function (xData, Status) {
    $(xData.responseXML).find("[nodeName=z:row]").each(function() {
		    //find all fields used by each row and aggregate them without duplicating
			var row_attr = $(this).listAttributes();
		    for (var i=0; i<row_attr.length; i++)
		    {
				if ($.inArray(row_attr[i], ArrayForStorage) == -1)
					{
						ArrayForStorage.push(row_attr[i]);
					}
			}
		      //clear the array
		    row_attr = null;
			row_attr = new Array();
      });
    }
  });

});
  return ArrayForStorage;

}


function ListVLookup(list, lookup_column, lookup_value, lookup_column_2_or_null, lookup_value_2_or_null, column_to_return)
{
	var lookup_column_values = ImportSPListToArray(list, lookup_column);
	var lookup_column_values_2 = ImportSPListToArray(list, lookup_column_2_or_null);
	var lookup_column_to_return_values = ImportSPListToArray(list, column_to_return);
	return ArrayVLookup(lookup_column_values,lookup_value, lookup_column_values_2, lookup_value_2_or_null, lookup_column_to_return_values);
}

function ArrayVLookup(lookup_array, lookup_value, lookup_array_2_or_null, lookup_value_2_or_null, return_array)
{
	lookup_value = lookup_value.toString();
	var return_values = new Array();
	
	if (lookup_value_2_or_null == null || lookup_array_2_or_null == null)
	{
		for (var i=0; i<lookup_array.length; i++)
		{
			if (lookup_array[i].toLowerCase() == lookup_value.toLowerCase())
			{
				return_values.push(return_array[i]);
			}
		}
	}
	else
	{
		lookup_value_2_or_null = lookup_value_2_or_null.toString();
		for (var i=0; i<lookup_array.length; i++)
		{
			if (( lookup_array[i].toLowerCase() == lookup_value.toLowerCase() ) && ( lookup_array_2_or_null[i].toLowerCase() == lookup_value_2_or_null.toLowerCase() ))
			{
				return_values.push(return_array[i]);
			}
		}
	}						
	return return_values;
} 

function GetFieldForThisPage(column){
var URLSplit = window.location.href.split("/");
URLSplit.splice(0,3);
var PageFileName = URLSplit.join("/");

var PageNames = ImportSPListToArray("Pages", "FileRef");
var PageFieldData = ImportSPListToArray("Pages", column);

//look for the page you are viewing and then load up the custom field
for (var i = 0; i<PageNames.length; i++)
{
	if (PageNames[i].toLowerCase().indexOf(PageFileName.toLowerCase()) > 0)
		{
			PageField = PageFieldData[i]
		}
}
return PageField;
}




function EnableListSorting(list/*, target_id, page_data_field, RefreshFunction*/){
$(document).ready(function (){
var CurrentSite = $().SPServices.SPGetCurrentSite();
// put a button to click on to enable editing
$("input.ms-long").each(function(){
if ($(this).val() == list)
$(this).after("<div class='EditOrderButtonDiv' id='EditOrderButtonDiv-" + list + "'><button type='button' class='EditOrderButton' id='EditOrderButton-" + list + "'>Reorder " + list + " list</button><a href='" + CurrentSite + "/Lists/" + list + "' target='_blank'>Edit " + list + " list</a></div>");
});
//when clicked, get started ///////////////////
$("#EditOrderButton-" + list).click(function(){
//hide the start button
$(this).remove();

//load up our list to reorder
var Titles = ImportSPListToArray(list, "Title");
var IDs =  ImportSPListToArray(list, "ID");
var DisplayOrders =  ImportSPListToArray(list, "Display Order");

//start the area where we will work
var ToWrite = "<div class='ListSortingDiv' id='ListSortingDiv-" + list + "'>Reordering the " + list + " list:<ul id='ListSorting-" + list + "'>";
// Write the data in order of the display position field
for (var i = 1; i<=Titles.length; i++){  //for all display positions
	for (var j = 0; j<Titles.length; j++){  //for all list entries
		if (parseInt(DisplayOrders[j]) == i){// if this is the list entry to be displayed at this position
			ToWrite += "<li id='MenuEntry-" + IDs[j] + "'>" + Titles[j] + "</li>";		}//add to the unordered list
	}
}
//close it up
ToWrite += "</ul><button type='button' class='SaveNewOrderButton' id='SaveNewOrderButton-" + list + "'>Save New Order</button></div>";

//write our workspace after the button and then remove the button
$("#EditOrderButtonDiv-" + list).after(ToWrite).remove();


//enable sorting ////////////////////////
$("#ListSorting-" + list).sortable();


// this variable will store the order of IDs
var NewOrder = new Array();
// when sorting stops (one gets dropped), save our new order
$("#ListSorting-" + list).sortable({
   stop: function(event, ui) { 
   // save our new order
   NewOrder = $("#ListSorting-" + list).sortable('toArray');
   //remove the "Menu-Entry-" part from all of them
   for (var i=0; i<NewOrder.length; i++){
   		NewOrder[i] = NewOrder[i].replace("MenuEntry-","");
   }
   console.log(NewOrder);
   }
});

// WHEN THE SAVE BUTTON IS CLICKED /////////////
$("#SaveNewOrderButton-" + list).click(function(){
$(this).attr('disabled', 'disabled').html("Saving...     ");
// for all of the entries
	for (var i = 1; i<=Titles.length; i++){
	// update the display order field with the new order, starting at 1 and going up
		$().SPServices({
	        operation: "UpdateListItems",
	        async: false,
	        batchCmd: "Update",
	        listName: list,
	        ID: NewOrder[i-1],
	        valuepairs: [["Display_x0020_Order", i]],
	        completefunc: function(xData, Status) {
	        	console.log(list + " - Set ID: " + NewOrder[i-1] + " to display position " + i.toString());
	        	// add a cute percentage to the end of our saving button
	        	$("#SaveNewOrderButton-" + list).html("Saving... " + (i/Titles.length)*100 + "%");
	        }
	    });
	}
	
	//remove our workspace
	$("#ListSortingDiv-" + list).remove();
	/*
	//clear the menu on display
	$("#"+target_id).html("");
	//Rewrite the menu
	//WriteMenuFromList(target_id, page_data_field);
	RefreshFunction();*/
	
	//bring back the option to reorder
	EnableListSorting(list);
});

});

});
}

