var tree;
var specifiedCollectionID = "";

function formTree(collectionID, userPresent) {
	treeInit(userPresent);

	if(collectionID != "")
		specifiedCollectionID = collectionID;
}

function treeInit(usersActive, userPresent) {
	tree = new YAHOO.widget.TreeView("treeDiv1");
	var root = tree.getRoot();
	
	var tmpNode = new YAHOO.widget.TextNode( 
		{	label: "Driver Collections",
			id: "Driver Collections",
			expanded: true }, root);
	tmpNode.renderHidden = true;
	tmpNode.expand();
	
	if (userPresent) {
		tmpNode = new YAHOO.widget.TextNode( 
				{	label: "My Collections",
					id: "My Collections",
					expanded: false }, root);
		
		tmpNode.renderHidden = true;
	}
	
	if (usersActive) {
		tmpNode = new YAHOO.widget.TextNode( 
				{	label: "User Collections",
					id: "User Collections",
					expanded: false }, root);
		tmpNode.renderHidden = true;
	}
	tree.setDynamicLoad(getPublicChildren);
	
	// handler for expanding all nodes
	YAHOO.util.Event.on("expand", "click", function(e) {
		tree.destroy();
		tree = new YAHOO.widget.TreeView("treeDiv1");
	
		tree.setDynamicLoad(getAllPublicChildren);
		
		var root = tree.getRoot();
		var tmpNode = new YAHOO.widget.TextNode( 
			{	label: "Driver Collections",
				id: "Driver Collections",
				expanded: true }, root);
		tmpNode.renderHidden = true;
		tmpNode.expand();
	
		if (userPresent) {
			tmpNode = new YAHOO.widget.TextNode( 
				{	label: "My Collections",
					id: "My Collections",
					expanded: true }, root);
		
			tmpNode.renderHidden = true;
		}
	
		tmpNode = new YAHOO.widget.TextNode( 
			{	label: "User Collections",
				id: "User Collections",
				expanded: true }, root);
	
		tmpNode.renderHidden = true;

		tree.render();
	});

	// handler for collapsing all nodes
	YAHOO.util.Event.on("collapse", "click", function(e) {
		tree.collapseAll();
		YAHOO.util.Event.preventDefault(e);
	});

	tree.render();
}

function getPublicChildren(node, onCompleteCallback) {
	var callback = function(collectionArray) {
		for ( var i = 0; i < collectionArray.length; i++) {
			var myobj = {
				label :collectionArray[i].collection.name,
				id :collectionArray[i].collection.resourceId,
				expanded: false,
				href :"javascript:fetchCollection('" + collectionArray[i].collection.resourceId + "');"
			};

			if (collectionArray[i].collection.private)
				myobj.label = myobj.label + ' *';

			var tmpNode = new YAHOO.widget.TextNode(myobj, node);

			tmpNode.isLeaf = !collectionArray[i].expandable;
			
			if(specifiedCollectionID != "") {
				fetchCollection(specifiedCollectionID);
				specifiedCollectionID = "";
			} else {
				if(collectionArray[i].collection.father == null && i == 0) 
					fetchCollection(collectionArray[i].collection.resourceId);
			}
		}
		onCompleteCallback();
	};

	var defered = collectionService.getBrowsableChildren(node.data.id);
	defered.addCallback(callback);
}

function getAllPublicChildren(node, onCompleteCallback) {
	var callback = function(collectionArray) {
		for ( var i = 0; i < collectionArray.length; i++) {
			var myobj = {
				label :collectionArray[i].collection.name,
				id :collectionArray[i].collection.resourceId,
				enableHighlight :true,
				expanded: collectionArray[i].expandable,
				href :"javascript:fetchCollection('" + collectionArray[i].collection.resourceId + "');"
			};

			if (collectionArray[i].collection.private)
				myobj.label = myobj.label + ' *';

			var tmpNode = new YAHOO.widget.TextNode(myobj, node);
			tmpNode.isLeaf = !collectionArray[i].expandable;
		}

		onCompleteCallback();
	};

	var defered = collectionService.getBrowsableChildren(node.data.id);
	defered.addCallback(callback);
}


function fetchCollection(collectionId) {
	squeezeBoxLoading.open($('collection_loading'));
	
	var callback = function(bean) {
		$('permanentLink').href = 'AllDRIVERCollections.action?collectionID=' + collectionId;
		
		if (bean.isFatherPrivate != null) {
			$('maincolumn2').setStyle('display', 'block');
			document.getElementById('col_ID').value = collectionId;
			document.getElementById('col_title').innerHTML = bean.collection.name;
			document.getElementById('col_name').innerHTML = bean.collection.name;
			document.getElementById('col_description').innerHTML = bean.collection.description;
			document.getElementById('col_subject').innerHTML = bean.collection.subject;
			
			if (bean.collection.query != "") {
				document.getElementById('col_queryCriteria').innerHTML = bean.collection.query;
				$('searchCollection').setStyle('display', 'block');
				$('searchCollectionLink').href = "javascript:searchCollection('" + collectionId + "')";

			} else {
				document.getElementById('col_queryCriteria').innerHTML = "<i>No query defined.</i>";
				$('searchCollection').setStyle('display', 'none');
			}
			
			if (bean.collection.iconUrl != "") {
				document.getElementById('col_image').src = bean.collection.iconUrl;
			} else {
				document.getElementById('col_image').src = "pages/images/logo_driver.png";
			}
			
			document.getElementById('col_lastUpdateDate').innerHTML = dateFormat(Date(bean.collection.lastUpdateDate), "mmmm dd, yyyy");
			document.getElementById('col_documentCount').innerHTML = bean.collection.documentCount;
			document.getElementById('col_itemsInBasket').innerHTML = bean.collection.documentsInBasket.length;
			
			if (bean.ownerEmail != null) {
				document.getElementById('col_ownerEmail').innerHTML = bean.ownerEmail;
			} else {
				document.getElementById('col_ownerEmail').innerHTML = '<i>Not specified.</i>';
			}
			
			if (bean.basketDocuments != null) {
				$('documentList').innerHTML = "";
				$('basketExpandAll').setStyle('display', 'block');

				for(var i = 0; i < bean.basketDocuments.length; i++)
					addDocumentDiv(i, bean.basketDocuments[i].title, bean.basketDocuments[i].documentId, bean.basketDocuments[i].summaryFields, 'documentList', false);
			} else {
				$('basketExpandAll').setStyle('display', 'none');
				$('documentList').innerHTML = "<div class=\"collectionField\"><span class=\"collectionFieldComments\">There are no documents in your basket.</span></div>";
			}

			if (bean.queryResults != null && bean.queryResults.length > 0)  {
				$('showAllDocumentsLinkDiv').setStyle('display', 'block');
				$('documentsDisplayed').innerHTML = bean.queryResults.length;
				$('totalDocuments').innerHTML = bean.queryResultCount;
				$('showAllDocumentsLink').href = "showResults.action?collectionId='" + collectionId + "'&refine=&history=false&referer=showResults";
				$('col_documentCount').innerHTML = bean.queryResultCount;
				$('queryResultsList').innerHTML = "";
				
				for(var i = 0; i < bean.queryResults.length; i++) 
					addDocumentDiv(i, bean.queryResults[i].title, bean.queryResults[i].documentId, bean.queryResults[i].summaryFields, 'queryResultsList', false);
				
				$('queryExpandAll').setStyle('display', 'block');
			} else {
				$('showAllDocumentsLinkDiv').setStyle('display', 'none');
				$('queryExpandAll').setStyle('display', 'none');
				$('queryResultsList').innerHTML = "<div class=\"collectionField\"><span class=\"collectionFieldComments\">There are no query resultsfor this collection.</span></div>";
			}
			
			if (bean.editable) {
				$('editCollectionDiv').setStyle('display', 'block');
				$('editCollectionLink').href = 'BrowseCollections.action?mode=edit&collectionID=' + collectionId;
				$('deleteCollectionLink').href = "javascript:deleteCollection('" + collectionId + "')";
			} else {
				$('editCollectionDiv').setStyle('display', 'none');
			}
			
			// implement the more/fewer options sliders on ALL dropbox items on
			// the page
			$$('.mydriveritem').each(function(item){
				if (item.getElement('.document_details')) {
					var document_details = new Fx.Slide(item.getElement('.document_details')).hide();
					item.getElement('.document_fewer').hide();			
					item.getElement('.document_more').addEvent('click', function(e){
						e.stop();
						document_details.slideIn();
					});
					item.getElement('.document_fewer').addEvent('click', function(e){
						e.stop();
						document_details.slideOut();
					});
					document_details.addEvent('complete', function() {
						if (this.open) {
							item.getElement('.document_more').hide();
							item.getElement('.document_fewer').show();
						}
						else {
							item.getElement('.document_more').show();
							item.getElement('.document_fewer').hide();					
						}
					});
				}
			});
			
			//implement the show all / hide all functionality
			$$('.showAll').each(function(aaa) {
				aaa.addEvent('click', function(e) {
					$$('.mydriveritem').each(function(item) {
						var document_details = new Fx.Slide(item.getElement('.document_details')).hide();
						document_details.slideIn();
						
						document_details.addEvent('complete', function() {
							if (this.open) {
								item.getElement('.document_more').hide();
								item.getElement('.document_fewer').show();
							}
							else {
								item.getElement('.document_more').show();
								item.getElement('.document_fewer').hide();					
							}
						});
					});
					$$('.showAll').each(function(e){
						e.setStyle('display', 'none');
					});
					$$('.hideAll').each(function(e){
						e.setStyle('display', 'block');
					});
				});
			});
			
			$$('.hideAll').each(function(aaa) {
				aaa.addEvent('click', function(e) {
					$$('.mydriveritem').each(function(item) {
						var document_details = new Fx.Slide(item.getElement('.document_details')).hide();
						document_details.slideOut();
						
						document_details.addEvent('complete', function() {
							if (this.open) {
								item.getElement('.document_more').hide();
								item.getElement('.document_fewer').show();
							}
							else {
								item.getElement('.document_more').show();
								item.getElement('.document_fewer').hide();					
							}
						});
					});
					$$('.showAll').each(function(e){
						e.setStyle('display', 'block');
					});
					$$('.hideAll').each(function(e){
						e.setStyle('display', 'none');
					});
				});
			});
			
			$$('.hideAll').each(function(e){
				e.setStyle('display', 'none');
			});
			
		} else {
			alert("A problem occured while getting collection");
		}

		// adding a small delay to make sure that the "loading" popup has finished loading.
		setTimeout("squeezeBoxLoading.close()", 200);
	};

	var defered = collectionService.getCollection(collectionId);
	defered.addCallback(callback);
}

function addDocumentDiv(index, title, documentId, summaryFields , targetDiv , editMode) {
	  var documentListDiv = document.getElementById(targetDiv);
	  var documentDiv = document.createElement('div');
	  var mydriveritemDiv = document.createElement('div');
	  var contentDiv = document.createElement('div');
	  var titleDiv = document.createElement('div');
	  var document_detailsDiv = document.createElement('div');
	  
	  contentDiv.setAttribute('class', "content");	
	  mydriveritemDiv.setAttribute('class', "mydriveritem");	
	  
	  titleDiv.innerHTML = '<h2><img src="pages/images/icons/document_text.png" alt="PDF" width="25" height="25" style="vertical-align: middle; margin-bottom: 0.25em;" />' + title + '</h2>';
	  
	  document_detailsDiv.setAttribute('class', "document_details");
	  
	  for (var key in summaryFields) {	  
		  var summaryFieldDiv = document.createElement('div');
		  summaryFieldDiv.setAttribute('class', "resultsField")
	  	  summaryFieldDiv.innerHTML = '<span class="resultsFieldNm">' + key + ':&nbsp;&nbsp;</span>' + summaryFields[key]; 	
		  document_detailsDiv.appendChild(summaryFieldDiv);
	  }  
	  
	  var document_infoDiv = document.createElement('div');
	  document_infoDiv.setAttribute('class',"document_info");
	  
	  var document_moreDiv = document.createElement('div');
	  document_moreDiv.setAttribute('class',"document_more");
	  document_moreDiv.innerHTML = "Show document details"; 
		
	  var document_fewerDiv = document.createElement('div');
	  document_fewerDiv.setAttribute('class',"document_fewer");
	  document_fewerDiv.innerHTML = "Hide document details";
	  document_infoDiv.appendChild(document_moreDiv);
	  document_infoDiv.appendChild(document_fewerDiv);
	  
	  contentDiv.appendChild(titleDiv);
	  contentDiv.appendChild(document_detailsDiv);
	  contentDiv.appendChild(document_infoDiv);
		
	  mydriveritemDiv.appendChild(contentDiv);
	  documentDiv.appendChild(mydriveritemDiv);
	  documentListDiv.appendChild(documentDiv);
}

function deleteCollection(collectionId) {
	var callback = function(bean) {
		if (bean == true) {
			window.location = 'AllDRIVERCollections.action';
		} else {
			roarQueue.alert('<p>There was an error deleting collection.</p><p></p>');
		}
	}
	
	if (confirm('Delete collection?'))
		collectionService.deleteCollection(collectionId).addCallback(callback);
}
