dojo.require("dojo.lfx");
var anim = dojo.lfx.animation;

function makeDraggable() {
	dojo.dnd.dragManager.dragSources = []; // remove any existing dragSources
	
	draggableElements = dojo.html.getElementsByClass("drag");
	for(var i=0; i<draggableElements.length; i++){
		(function(event) {
			// var drag = new dojo.dnd.HtmlDragSource(draggableElements[i], "library");
			var drag = new dojo.dnd.HtmlDragSource(draggableElements[i], "both");
			// drag.dragClass = "Dragging";
			drag.onSelected = function(event) {
				draggableElements2 = dojo.html.getElementsByClass("dragSelected");
				for(var j=0; j<draggableElements2.length; j++){
					dojo.html.removeClass(draggableElements2[j], "dragSelected");
				}
				
				for(var j=0; j<dojo.dnd.dragManager.selectedSources.length; j++){
					if(dojo.dnd.dragManager.selectedSources[j].domNode.nodeName == "TR"){
						dojo.html.addClass(dojo.dnd.dragManager.selectedSources[j].domNode, "dragSelected");
					}
				}
			};
		})(draggableElements[i]);
	}
	draggableElements = dojo.html.getElementsByClass("dragLibrary");
	for(var i=0; i<draggableElements.length; i++){
		(function(event) {
			var drag = new dojo.dnd.HtmlDragSource(draggableElements[i], "playlist");
			// drag.dragClass = "Dragging";
			drag.onSelected = function(event) {
				draggableElements2 = dojo.html.getElementsByClass("dragSelected");
				for(var j=0; j<draggableElements2.length; j++){
					//draggableElements2[j].style.backgroundColor = "";
					dojo.html.removeClass(draggableElements2[j], "dragSelected");
				}
				
				for(var j=0; j<dojo.dnd.dragManager.selectedSources.length; j++){
					dojo.html.addClass(dojo.dnd.dragManager.selectedSources[j].domNode, "dragSelected");
					//dojo.dnd.dragManager.selectedSources[j].domNode.style.backgroundColor = "red";
				}
			};
		})(draggableElements[i]);
	}
	draggableElements = dojo.html.getElementsByClass("dragBoth");
	for(var i=0; i<draggableElements.length; i++){
		(function(event) {
			var drag = new dojo.dnd.HtmlDragSource(draggableElements[i], "both");
			// drag.dragClass = "Dragging";
			drag.onSelected = function(event) {
				draggableElements2 = dojo.html.getElementsByClass("dragSelected");
				for(var j=0; j<draggableElements2.length; j++){
					//draggableElements2[j].style.backgroundColor = "";
					dojo.html.removeClass(draggableElements2[j], "dragSelected");
				}
				
				for(var j=0; j<dojo.dnd.dragManager.selectedSources.length; j++){
					dojo.html.addClass(dojo.dnd.dragManager.selectedSources[j].domNode, "dragSelected");
					//dojo.dnd.dragManager.selectedSources[j].domNode.style.backgroundColor = "red";
				}
			};
		})(draggableElements[i]);
	}
	makeListReturnDroppable();
}


// For the German text we need a bigger box. But I didn't want to change it for everything.
// So the longer text shouuld call dislayUMessageBig, everything else does the smaller box.
function displayUMessageBig(UMessageText, UMessageType, UMessageGraphic) {

	displayUMessageDo(UMessageText, UMessageType, UMessageGraphic, 1);
}

function displayUMessage(UMessageText, UMessageType, UMessageGraphic) {
	displayUMessageDo(UMessageText, UMessageType, UMessageGraphic, 0);
}

function displayUMessageDo(UMessageText, UMessageType, UMessageGraphic, BigBox) {
	
	var myBox = document.createElement("div");
	myBox.className= "umessageBox";
	
	//myBox.style.left = (ciWidth - 200) + "px";
	//myBox.style.top = (ciHeight - 69) + "px";
	myBox.style.right = 40 + "px";
	myBox.style.bottom = 20 + "px";
	
	var mbShadow = document.createElement("div");
	mbShadow.className = "shadowHold";
	
	var mbMain = document.createElement("div");
	// mbMain.className = "umMainBigBox";
	mbMain.className = (BigBox == 1) ? "umMainBigBox" : "umMain";
	mbMain.innerHTML = (UMessageGraphic != "add") ? "<span class=\"check\">&#252;<\/span>" : "<span>+<\/span>";
	//mbMain.innerHTML = (UMessageType == 1) ? "<span class=\"check\">&#252;<\/span>" : "<span>+<\/span>";
	//mbMain.innerHTML = "<span class=\"check\">&#252;<\/span>";
	
	//UMessageText = "(X) tracks deleted from your Library";
	mbMain.innerHTML +=  html_escape(UMessageText);
	
	mbShadow.appendChild(mbMain);
	myBox.appendChild(mbShadow);
	
	document.body.appendChild(myBox);
	
	var ntLeft = myBox.style.left;
	ntLeft = ntLeft.replace(/px/, "");
	var ntTop = myBox.style.top;
	ntTop = ntTop.replace(/px/, "");
	ntTop-=40;
	
	function whenDone1(nodes, anim) {
		document.body.removeChild(myBox);
	}
		
	var anim = dojo.lfx.fadeOut(myBox, 2000, 0, whenDone1);
	
	setTimeout(function() { anim.play(); }, 3000); //wrapped function here for local scope junk
	/**/
	//if(typeof(console) != "undefined") { console.log(UMessageText);}
	//window.status = UMessageText;
	/* var umwImage = "";
	switch(UMessageGraphic) {
		case "play": 	umwImage = "<div class=\"umwPlay\"></div>";
						break;
		case "add": 	umwImage = "<div class=\"umwAdd\"></div>";
						break;
	}
	dojo.byId("umessageContents").innerHTML = umwImage + html_escape(UMessageText);
	if(UMessageText != "") {
		try { anim.stop(); } catch(e) { } // anim.stop() has no properties until we have run the first animation
		dojo.byId('umessageContents').style.opacity = 100;
		dojo.byId('umessageContents').style.filter = "Alpha(Opacity=100)";
		if(UMessageType == 1) {
			anim = dojo.lfx.html.fadeOut('umessageContents', 7000);
			anim.play(0, true);
		} else {
			// YFT
			// anim = dojo.lfx.html.highlight('umessageContents',"#fbff9a",2000);
			// anim.play(0,true);
		}
	} */
}

function makeLibraryDroppable() {
	var droppableElements = dojo.html.getElementsByClass("drop");
	for(var i=0; i<droppableElements.length; i++){
		if(droppableElements[i].id != "bar2" && droppableElements[i].id != "blist") {
			var drop = new dojo.dnd.HtmlDropTarget(droppableElements[i], ["library","both"]);
		} else {
			var drop = new dojo.dnd.HtmlDropTarget(droppableElements[i], ["library"]);
		}
		drop.onDrop = function(event) {
			// var universalMessage = "The";
			for(var j=0; j<dojo.dnd.dragManager.selectedSources.length; j++){
				var elementID = dojo.dnd.dragManager.selectedSources[j].domNode.id;
				// for SC source tracking
				top.libDrag = 1;
				// if(j>0) { universalMessage += ", "; }
				switch(elementID.substring(0, 1)) {
					case "t":	// universalMessage += j + " selected track";
								// j>1?universalMessage += "s have":universalMessage += "has";
								// universalMessage += " been added to your library";
								// collection.store.addItem(elementID.substring(1), 0);
								AddToLibrary(elementID.substring(1), 0);
								// allArtists = "";
								// setTimeout("libraryDisplay.writeAllArtists()", 500);
								break;
					case "a":	// universalMessage += " selected album has been added to your library";
								// collection.store.addItem(elementID.substring(1), 1);
								AddToLibrary(elementID.substring(1), 1);
								// allArtists = "";
								// setTimeout("libraryDisplay.writeAllArtists()", 500);
								break;
					case "p":	// universalMessage += " selected playlist has been added to your library";
								// collection.store.addItem(elementID.substring(1), 2);
								AddToLibrary(elementID.substring(1), 2);
								// allPlaylists = "";
								// setTimeout("libraryDisplay.writeAllPlaylists()", 500);
								break;
				}
			}
            //danComment//collection.store.saveData(libName,tableData.toSource());
            // collection.store.saveData(libName,runToSource(tableData));
			dojo.html.removeClass(drop.domNode, "dropActive");
			dojo.html.removeClass("sb2", "dropActive");
			// displayUMessage(universalMessage, 2, "add");
				
			var draggableElements = dojo.html.getElementsByClass("dragSelected");
			for(var j=0; j<draggableElements.length; j++){
				dojo.html.removeClass(draggableElements[j], "dragSelected");
			}
		};
		drop.placeIndicator = function(e, dragObjects, boxIndex, before) {
			dojo.html.addClass(drop.domNode, "dropActive");
			dojo.html.addClass("sb2", "dropActive");
		};
		drop.createDropIndicator = function() {
			this.dropIndicator = document.createElement("div"); //create dummy div
		};
		/* drop.onDragOver = function(event) {
			drop.domNode.style.backgroundColor = "red";
		}; */
		drop.onDragOut = function(event) {
			dojo.html.removeClass(drop.domNode, "dropActive");
			dojo.html.removeClass("sb2", "dropActive");
		};
	}
}

function makePlaylistsDroppable() {
	// libraryPlaylists = dojo.byId("libraryPlaylists");
	// droppableElements = libraryPlaylists.getElementsByTagName("li");
	var droppableElements = dojo.html.getElementsByClass("dropLibrary");
	for(var i=0; i<droppableElements.length; i++){
		(function(event) {
			var drop = new dojo.dnd.HtmlDropTarget(droppableElements[i], ["playlist","both"]);
			
			drop.onDrop = function(event) {
				// universalMessage = "Added ";
				for(var j=0; j<dojo.dnd.dragManager.selectedSources.length; j++){
					elementID = dojo.dnd.dragManager.selectedSources[j].domNode.id;
					// if(j>0) { universalMessage += ", "; }
					switch(elementID.substring(0, 1)) {
						case "t":	// universalMessage += "track ";
									if(drop.domNode.id.substring(8) != 0) {
										libraryDisplay.addTrackToPlaylist(elementID.substring(1), "Track Name", drop.domNode.id.substring(8));
									} else {
										showNewPlaylistPop(elementID.substring(1), 0);
									}
									break;
						case "a":	// universalMessage += "album " + elementID.substring(1);
									libraryDisplay.addContentToPlaylist(elementID.substring(1), 1, drop.domNode.id.substring(8));
									// collection.store.addItem(elementID.substring(1), 1);
									break;
						case "p":	// universalMessage += "playlist " + elementID.substring(1);
									libraryDisplay.addPlaylistToPlaylist(elementID.substring(1), 2, drop.domNode.id.substring(8));
									break;
					}
				}
				// universalMessage += "to the selected playlist.";
				dojo.html.removeClass(drop.domNode, "dropActive");
				// if(drop.domNode.id.substring(8) != 0) { displayUMessage(universalMessage, 1); }
					
					draggableElements = dojo.html.getElementsByClass("dragSelected");
					for(var j=0; j<draggableElements.length; j++){
						dojo.html.removeClass(draggableElements[j], "dragSelected");
					}
			};
			drop.placeIndicator = function(e, dragObjects, boxIndex, before) {
				dojo.html.addClass(drop.domNode, "dropActive");
			};
			drop.createDropIndicator = function() {
				this.dropIndicator = document.createElement("div"); //create dummy div
			};
			/* drop.onDragOver = function(event) {
				drop.domNode.style.backgroundColor = "red";
			}; */
			drop.onDragOut = function(event) {
				dojo.html.removeClass(drop.domNode, "dropActive");
			};
		})(droppableElements[i]);
	}
}

function makeListReturnDroppable() {
	var drop = new dojo.dnd.HtmlDropTarget(dojo.byId("listReturnBody"), ["playlist"]);
	drop.onDropEnd = function(event) {
		collection.store.updateCurrentPlaylist();
	}
}

function makeLogoDroppable() {
	var droppableElements = dojo.html.getElementsByClass("logoDrop");
	for(var i=0; i<droppableElements.length; i++){
		var drop = new dojo.dnd.HtmlDropTarget(droppableElements[i], ["library", "playlist", "both"]);
		drop.onDrop = function(event) {
			var universalMessage = "";
			for(var j=0; j<dojo.dnd.dragManager.selectedSources.length; j++){
				var elementID = dojo.dnd.dragManager.selectedSources[j].domNode.id;
				if(j>0) { universalMessage += ", "; }
				switch(elementID.substring(0, 1)) {
					case "t":	universalMessage += "Titel ";
								Queue(elementID.substring(1), 0);
								// allArtists = "";
								// setTimeout("libraryDisplay.writeAllArtists()", 500);
								break;
					case "a":	universalMessage += "Album ";
								Queue(elementID.substring(1), 1);
								// allArtists = "";
								// setTimeout("libraryDisplay.writeAllArtists()", 500);
								break;
					case "p":	universalMessage += "Playlist ";
								Queue(elementID.substring(1), 2);
								allPlaylists = "";
								// setTimeout("libraryDisplay.writeAllPlaylists()", 500);
								break;
					//MATTNOTE: what about works - ugh
				}
			}
			dojo.html.removeClass(drop.domNode, "dropActive");
            //danComment//collection.store.saveData(libName,tableData.toSource());
            // collection.store.saveData(libName,runToSource(tableData));
			universalMessage += "wurde zur aktüllen Wiedergabe hinzugefügt.";
			displayUMessage(universalMessage, 2);
				
			var draggableElements = dojo.html.getElementsByClass("dragSelected");
			for(var j=0; j<draggableElements.length; j++){
				dojo.html.removeClass(draggableElements[j], "dragSelected");
			}
		};
		drop.placeIndicator = function(e, dragObjects, boxIndex, before) {
			dojo.html.addClass(drop.domNode, "dropActive");
		};
		drop.createDropIndicator = function() {
			this.dropIndicator = document.createElement("div"); //create dummy div
		};
		/* drop.onDragOver = function(event) {
			drop.domNode.style.backgroundColor = "red";
		}; */
		drop.onDragOut = function(event) {
			dojo.html.removeClass(drop.domNode, "dropActive");
			dojo.html.removeClass("sb2", "dropActive");
		};
	}
}

function makeDroppable() {
	// dojo.dnd.dragManager.dropTargets = []; // remove any existing dropTargets
	droppableElements = []; // remove any existing dropTargets
	makeLibraryDroppable();
	makePlaylistsDroppable();
}

function initDrag() {
	makeDraggable();
	makeDroppable();
	makeLogoDroppable();
}
