
// ***************************************************************************************************************************
//
// Title :			brandsmiths.js
// Author : 		Ben Sekulowicz-Barclay
//
// Description : 	v0.1
//
// ***************************************************************************************************************************

Event.observe(window, 'load', Brandsmiths, false);

function Brandsmiths () {	
	// Variables
	this.ajaxPath 	= "../client/ajax.jsp";
	this.imgPath 	= "../images/uploaded/";
	//this.imgPath 	= "Brandsmiths/images/uploaded/";

	// initialise page	
	Element.addClassName(document.body, "have-js");

	// Initialise DnD *********************************************************************************************************
	
	// Disable handle link
	if($("add-to")) {
		for (var i = 0; i < $("add-to").childNodes.length; i++) {
			if ($("add-to").childNodes[i].tagName == "A") {
				$("add-to").childNodes[i].onclick = function() { return false; }
			}
		}
	}
	
	// Draggable items
	var drags = document.getElementsByClassName("js-drag");
	for (var i = 0; i < drags.length; i++) {
		new Draggable(drags[i], { revert: true });		
	}
	
	// Drop zone
	if ($("dropzones")) {
		for (var i = 0; i < $("dropzones").childNodes.length; i++) {
			if ($("dropzones").childNodes[i].tagName == "LI") {
				if ($("dropzones").childNodes[i].id == "trash") {
					addTrashDrop($("dropzones").childNodes[i]);
				} else {	
					addSBDrop($("dropzones").childNodes[i]);
				}		
			}
		}	
	}	
	
	
	// Initialise AddNodes ****************************************************************************************************
	
	if ($("add")) {
		$("add").onclick = function() {
			addExtraBlocks();
			return false;
		}
	}
	
	// ************************************************************************************************************************
	
	function addExtraBlocks() {
		
		if($("dropzones")) {
			for (var i = 0; i < 2; i++) {
				var li = document.createElement("LI");
				addSBDrop(li);			
				$("dropzones").appendChild(li);
			}

			for (var i = 0; i < $("dropzones").childNodes.length; i++) {
				if ($("dropzones").childNodes[i].tagName == "LI") {
					if ($("dropzones").childNodes[i].id == "trash") {
						var tempLI = $("dropzones").childNodes[i];
						tempLI.parentNode.removeChild(tempLI);
					}		
				}
			}		
			$("dropzones").appendChild(tempLI);
		}			
	}
	
	// ************************************************************************************************************************
	
	// Scrapbook drop zones
	function addSBDrop(li) {
		var fullDrop = 0;		
		// Check all the LI childnodes to make sue they are empty
		for (var i = 0; i < li.childNodes.length; i++) {
			if (li.childNodes[i].nodeType != "3") {
				fullDrop = 1;
			}
		}
		
		// If the LI only contains '&nbsp;'
		if (fullDrop != 1) {			
			Droppables.add(li, { 
				accept: "js-drag", 
				onDrop: function(element, droppableElement) { getSBDrop(element, droppableElement) } 
			});
		}
	}
	
	// Trashbook drop zone	
	function addTrashDrop(li) {			
		Droppables.add(li, { 
			accept: "js-trash",
			onDrop: function(element, droppableElement) { getTrashDrop(element, droppableElement) } 
		});
	}
	
	// ************************************************************************************************************************
	
	function getSBDrop(dragged, dropped) {		
		var dropId 			= dragged.getAttribute("dndI");
		var dropImgSrc 		= dragged.getAttribute("dndS");
		var dropTitle		= dragged.getAttribute("dndT");		
		var dropIcon 		= createIcon(dropId, dropTitle, dropImgSrc);		
		var dropPosition 	= getListPosition(dropped);
		
		dropped.appendChild(dropIcon);		
		Droppables.remove(dropped);
		
		// Housekeeping - check for duplicates and remove
		var dropUL = dropped.parentNode;		
		for (var i = 0; i < dropUL.childNodes.length; i++) {
			// If the child is an LI and it isn't the dropped on LI
			if ((dropUL.childNodes[i].tagName == "LI") && (dropUL.childNodes[i] != dropped)) {
				for (var j = 0; j < dropUL.childNodes[i].childNodes.length; j++) {
					// If it contains an image and that image's id is the same as the dropped, remove it
					if ((dropUL.childNodes[i].childNodes[j].tagName == "A") && (dropUL.childNodes[i].childNodes[j].getAttribute("dndI") == dropId)) {
						dropUL.childNodes[i].childNodes[j].parentNode.removeChild(dropUL.childNodes[i].childNodes[j]);
						addSBDrop(dropUL.childNodes[i]);
					}
				}				
			}
		}		
      var ajaxArgs 	= "id=" + dropId + "&position=" + dropPosition + "&img=" + dropImgSrc + "&title=" + dropTitle + "&ajax=1";
      var ajaxReq 	= new Ajax.Request(this.ajaxPath, { method:'get', parameters: ajaxArgs, onComplete: gotAjaxResponse });
	}
	
	// ************************************************************************************************************************
	
	function getTrashDrop(dragged, dropped) {
			var toAddDrop = dragged.parentNode;
			
	//	if (toAddDrop.parentNode.id == "dropzones") {
			toAddDrop.removeChild(dragged);
			addSBDrop(toAddDrop);
		
			var dropId 		= dragged.getAttribute("dndI");
			var dropImgSrc 	= dragged.getAttribute("dndS");
			var dropTitle	= dragged.getAttribute("dndT");

			var ajaxArgs 	= "id=" + dropId + "&position=-1&img=" + dropImgSrc + "&title=" + dropTitle + "&ajax=1";
			var ajaxReq 	= new Ajax.Request(this.ajaxPath, { method:'get', parameters: ajaxArgs, onComplete: gotAjaxResponse });
	//	}
	}	
	
	// ************************************************************************************************************************
	
	function gotAjaxResponse(xml) {		
		// COMMENT THE FOLLOWING LINE OUT TO REMOVE ALERT BOX DEBUG TEXT
		// alert(xml.responseText);
	}	
	
	// ************************************************************************************************************************
	
	function getListPosition(li) {
		var UL = li.parentNode;
		var LIs = 0;
		for (var i = 0; i < UL.childNodes.length; i++) {
			if (UL.childNodes[i].tagName == "LI") {		
				LIs ++;
				if (UL.childNodes[i] == li) {
					return LIs;
				}
			}
		}
	}
	
	function createIcon(id, title, src) {		
		var iconImg = document.createElement("IMG");	
		iconImg.setAttribute("title", title);
		iconImg.setAttribute("src", this.imgPath + src);	
		
		var iconA = document.createElement("A");
		iconA.setAttribute("href", "#");
		
		iconA.setAttribute("dndI", id);
		iconA.setAttribute("dndS", src);
		iconA.setAttribute("dndT", title);
		
		iconA.className = "js-drag js-trash";	
		new Draggable(iconA, { revert: true });
		iconA.onclick = function() { return false; }
			
		iconA.appendChild(iconImg);
		
		return iconA;
	}
	
	// ************************************************************************************************************************
}

