console.log("starting to load application.js");

function load(url /*String*/) {
	if (url == null) {
		alert('unable to load the document');
	} else {
		console.log("Loading "+url);
		window.location.href=url;
	}
}

function changeClass(obj, className) {
	obj.className = className;
}


/* functions for loading icon display */

function setLoading(val /*boolean*/) {
	try {
		// FIXME do nothing for now
//		if (val) {
//			dojo.byId("main-loading").style.display="block";
//		} else {
//			dojo.byId("main-loading").style.display="none";
//		}
	} catch (err) {
		console.error("error "+err);
	}
}

var loadingCount = 0;

function pushLoading() {
	loadingCount += 1;
	console.log("push loading with count now "+loadingCount);
	if (loadingCount > 0) {
		setLoading(true);
	}
}

function popLoading() {
	loadingCount -= 1;
	console.log("pop loading with count now "+loadingCount);
	//if (loadingCount < 0) {
	//	loadingCount = 0;
	//}
	if (loadingCount == 0) {
		setLoading(false);
	}
}


/* Evaluate scripts present in HTML content */

function snarfScripts(cont, byRef){
	// summary
	//		strips out script tags from cont
	// invoke with 
	//	byRef = {errBack:function(){/*add your download error code here*/, downloadRemote: true(default false)}}
	//	byRef will have {code: 'jscode'} when this scope leaves
	// copied with modifications from http://archive.dojotoolkit.org/nightly/dojotoolkit/dojox/layout/ContentPane.js
	byRef.code = "";

	function download(src){
		if(byRef.downloadRemote){
			// console.debug('downloading',src);
			dojo.xhrGet({
				url: src,
				sync: true,
				load: function(code){
					byRef.code += code+";";
				},
				error: byRef.errBack
			});
		}
	}
	
	// match <script>, <script type="text/..., but not <script type="dojo(/method)...
	return cont.replace(/<script\s*(?![^>]*type=['"]?dojo)(?:[^>]*?(?:src=(['"]?)([^>]*?)\1[^>]*)?)*>([\s\S]*?)<\/script>/gi,
		function(ignore, delim, src, code){
			if(src){
				download(src);
			}else{
				byRef.code += code;
			}
			return "";
		}
	);
}

function evalScriptInGlobal(code, appendNode){
	// we do our own eval here as dojo.eval doesn't eval in global crossbrowser
	// This work X browser but but it relies on a DOM
	// plus it doesn't return anything, thats unrelevant here but not for dojo core
	// copied from http://archive.dojotoolkit.org/nightly/dojotoolkit/dojox/layout/ContentPane.js
	appendNode = appendNode || dojo.doc.body;
	var n = appendNode.ownerDocument.createElement('script');
	n.type = "text/javascript";
	appendNode.appendChild(n);
	n.text = code; // DOM 1 says this should work
}

function executeScripts(currentContent /*html content string*/, node /*DomNode*/) {
	//console.log('executing scripts from ',currentContent);
	var code, byRef = {
		downloadRemote: true,
		errBack:function(e){
			console.log('Error running (remote) scripts for '+node, e);
		}
	};
	currentContent = this.snarfScripts(currentContent, byRef);
	code = byRef.code;
	//console.log('executing scripts in ', code);
	try{
		this.evalScriptInGlobal(code, node);
	}catch(e){
		console.log('Error running scripts for '+node, e);
	}
	console.log('finished executing scripts for ', node);
}

function highlight(/* DomeNode */ node) {	
	var highlightAnim = dojo.animateProperty({
   	  	node: node,
 		duration: 3000,
		properties: {
    	backgroundColor: { start:"#ffff99", end: "#ffffff" }
    	}
	});
	highlightAnim.play();
}

function saveItemsToFolder(id /* string id used as suffix in save form */) {
	console.log('save items to folder id is ' + id);
	var selectedFolderId = dojo.byId('fs' + id).value;
	var finame = dojo.byId('finame' + id).value;
	var extendedItemdata = dojo.byId('sw' + id).value;
	var msgbox = dojo.byId('save_to_folder_message_' + id);
	dojo.addClass(msgbox, "info");
	msgbox.innerHTML='Saving...please wait';
	console.log('Will save in ' + selectedFolderId + ' with name ' + finame + ' item ' + extendedItemdata);
	addItemCallback = function(folderid){
		console.log("Calling the add item callback with folderid " + folderid);
		DWRRestricted.addItemsToFolder(folderid, [extendedItemdata], [finame], function(data){
			dojo.addClass(msgbox, "success");
			dojo.removeClass(msgbox, "info");
			msgbox.innerHTML = 'Item saved successfully.';
		});
	};
	console.log("addItemCallback is ", addItemCallback);
	if (selectedFolderId > 0) {
		addItemCallback(selectedFolderId);
	} else {
		var folderName = prompt('Enter name of the new folder to create', 'TestFolder');
		var userName = dojo.byId('user' + id).value;
		createFolder(folderName, userName, addItemCallback);
	}
}

function createUserInputFolder(userName, reloadUrl) {
	var folderName = prompt('Enter name of the new folder to create', 'TestFolder');
	console.log('will create a new folder with name ' + folderName + ' for ' + userName + ' and reload to ' + reloadUrl);
	createFolder(folderName, userName, function(folderid) {
		alert('Created the new folder successfully');
		load(reloadUrl);
	});
}

function createFolder(folderName, user, callback) {
	console.log("will create folder with name " + folderName +" for " + user +" with callback ", callback);
	DWRRestricted.createFolder(folderName, user, function(data) {
		if (data.indexOf("error") >= 0) {
			alert("Unable to create new folder "+data);
			console.log("createFolder returned " + data);
		} else {
			console.log("created new folder with id " + data + " for the user");
			if (callback) {
				callback(data);
			}
		}
	});
}

function deleteFolder(folderid, reloadUrl) {
	var sure = confirm('Are you sure you want to delete the folder and all associated data? Once deleted, the data can not be restored.');
	if (!sure) {
		return;
	}
	DWRRestricted.deleteFolder(folderid, function(data) {
		if (data == "") {
			alert("deleted the folder successfully");
			if (reloadUrl) {
				load(reloadUrl);
			}
		} else {
			alert("unable to delete the folder " + data);
		}
	});
}

function deleteFolderItem(itemid, reloadUrl) {
	var sure = confirm('Are you sure you want to delete the item? Once deleted, the data can not be restored.');
	if (!sure) {
		return;
	}
	DWRRestricted.deleteFolderItem(itemid, function(data) {
		if (data == true) {
			alert("deleted the item successfully");
			if (reloadUrl) {
				load(reloadUrl);
			}
		} else {
			alert("unable to delete the item " + data);
		}
	});
}


function updateSaveItemName(id /* string id used as suffix in save form */, suffix /*string*/){
	var selectNode = dojo.byId('sw' + id);
	var optionNode = selectNode.options[selectNode.selectedIndex];
	var itemName = optionNode.innerHTML;
	console.log("for fs"+id+", itemName is " + itemName);
	dojo.byId('finame' + id).value = itemName + suffix;
}

function getRadioValue(radioGrpClass /* String */) {
	var selectedVal = undefined;
	var radioGrp = dojo.query("." + radioGrpClass).forEach(function(node) {
		console.log("node ", node, node.checked);
		if (node.checked) {
			selectedVal = node.value;
		}
	});
	return selectedVal;
}

console.log("finished loading application.js");
