//----------------------------------- START Group Manager ----------------------------
function viewUsers(id){
	var newUsr = new createModalForm("View Users");
	newUsr.modalwrap.addClass("filesharer");

	var wrapUsers=$('<div class="div-input full area"><label>Users</label><br /></div>').appendTo(newUsr.body);
	$('<div class="clear"></div><br />').appendTo(newUsr.body);
	
	var userList = new createBoxList(wrapUsers);

	$('<div class="btn-but btn-blue done"><i class="halflings white arrow-left"></i> Back</div>').appendTo(newUsr.bottom).click(function(){newUsr.close()});

	newUsr.loading(true);
	$.post(sharer_url+"/?script=ajax&act=user_find", {data:'{"group":'+id+'}'}, 
		function(data){
			resp = JSON.parse(data);
			if(resp.result=="OK"){
				newUsr.setHeader(resp.name);
				userList.addTokens(resp.array_result);
			}
		})
	.always(function() {
		newUsr.loading(false);
	});
}
function newGroup(id){
	var newGrp = new createModalForm("New Group");
	newGrp.modalwrap.addClass("filesharer");
	
	if(id>0)
		newGrp.setHeader("Modify Group");

	newGrp.setBody('<div class="div-input full"><label>Name</label><br /><input id="grp-name" value="" data-min="1" data-max="250" data-type="13" class="text_input" type="text" /><div class="err_lbl"></div></div>');
	var wrapUsers=$('<div class="div-input full area"><label>Users</label><br /></div>').appendTo(newGrp.body);
	$('<div class="clear"></div><br />').appendTo(newGrp.body);
	
	var userList = new createBoxList(wrapUsers, "user_find");
	
	if(id>0){
		newGrp.loading(true);
		$.post(sharer_url+"/?script=ajax&act=user_find", {data:'{"group":'+id+'}'}, 
			function(data){
				resp = JSON.parse(data);
				if(resp.result=="OK"){
					$("#grp-name").val(resp.name);
					userList.addTokens(resp.array_result);
				}
			})
		.always(function() {
			newGrp.loading(false);
		});
	
		$('<div class="btn-but btn-red"><i class="halflings white trash"></i> Delete Group</div>').appendTo(newGrp.bottom).click(function(){
			if(confirm("Do you really want to delete this group?")){
			
				var jsonvar = {};
				jsonvar.id = id;		
			
				newGrp.loading(true);
				$.post(sharer_url+"/?script=ajax&act=group_remove", {data:JSON.stringify(jsonvar)}, 
					function(data){
						resp = JSON.parse(data);
						if(resp.result=="OK")
							newGrp.close();
						else
							alert(resp.result);
					})
				.fail(function() {
					alert("Connection Error!!");
				}).always(function() {
					newGrp.loading(false);
				});
			}
		});
	}
	
	$('<div class="btn-but btn-blue done"><i class="halflings white ok"></i> Done</div>').appendTo(newGrp.bottom).click(function(){
		
		var jsonvar = {};
		jsonvar.id = id;
		jsonvar.name = $("#grp-name").val();
		jsonvar.comps = userList.getTokens();
		
		var ajaxURL = sharer_url+"/?script=ajax&act=group_create";
		if(id>0)
			ajaxURL = sharer_url+"/?script=ajax&act=group_mod";

		userList.boxlist.removeClass("text_err");
		if(jsonvar.comps==0){
			userList.boxlist.addClass("text_err");
			alert("Please select one user at least!");
			return;
		}

		if(!validate(newGrp.body))
			return;
		
		newGrp.loading(true);
		$.post(ajaxURL, {data:JSON.stringify(jsonvar)}, 
			function(data){
				resp = JSON.parse(data);
				if(resp.result=="OK")
					newGrp.close();
				else
					alert(resp.result);
			})
		.fail(function() {
			alert("Connection Error!!");
		}).always(function() {
			newGrp.loading(false);
		});
	});
}

function createBoxList(obj,tofill,searchurl){
	obj.css("height","auto");
	this.boxlist = $("<div class='boxlist'></div>").appendTo(obj);
	var wrapauto=null;
	
	var tthis=this;
	
	if(typeof tofill !== 'undefined'){
		this.boxlist.css("cursor","text");
		var wrapauto = $('<div></div>').appendTo(this.boxlist).css({"position":"relative","display":"inline-block"});
		var input = $('<input type="text" size="1" />').appendTo(wrapauto);
		var autocomplete = $('<ul class="autocomplete"></ul>').appendTo(wrapauto);
		
		this.boxlist.click(function(){ input.focus(); });
		
		var jqxhr=null;
		input.keyup(function(event){
			if(event.which>=37 && event.which<=40)
				return;
		
			var kk=$(this).val();
			if(kk.length==0)
				$(this).attr('size', 1);
			else
				$(this).attr('size', kk.length);
			
			if(jqxhr!=null)
				jqxhr.abort();

			autocomplete.hide().empty();
			if(kk.length>1){
				if(tofill=="group_find")
					tthis.search(kk,true,10);
				else
					tthis.search(kk,false,10); /* mix_find */
			}
		});
		
		input.keydown(function(event){
			if(event.which==8 && $(this).val().length==0)
				wrapauto.prev().remove();
			if(autocomplete.is(':visible')){
				if(event.which==38){
					var curr = autocomplete.find(".selected");
					if(curr.length==0){
						autocomplete.find("li:last-child").addClass("selected");
						return;
					}
					if(curr.prev().length!=0){
						curr.prev().addClass("selected");
						curr.removeClass("selected");
					}
				}
				if(event.which==40){
					var curr = autocomplete.find(".selected");
					if(curr.length==0){
						autocomplete.find("li:first-child").addClass("selected");
						return;
					}
					if(curr.next().length!=0){
						curr.next().addClass("selected");
						curr.removeClass("selected");
					}
				}
				if(event.which==13){
					autocomplete.find(".selected").click();
				}
			}
		}).focus(function(){if(input.val()=="")autocomplete.empty();if(!autocomplete.is(':empty'))autocomplete.show();}).blur(function(){if(!autocomplete.is(':hover'))autocomplete.hide()});
		if((tofill=="mix_find")||(tofill=="group_find")){
			input.css({"padding-left":"20px"});
			autocomplete.css({"left":"20px"});
			$("<i class='halflings group' title='View all groups'></i>").css({"position":"absolute","top":"4px","left":"3px","margin":"0","cursor":"pointer"}).appendTo(wrapauto)
			.click(function(){
				input.val("");
				input.attr('size',1);
				if(jqxhr!=null) jqxhr.abort();
				autocomplete.hide();
				tthis.search("",true,1000);
			});
		}
	}
	this.search = function(search,onlyGroup,maxrow){
		var postURL=sharer_url+"/?script=ajax&act="+tofill;
		if(searchurl!==undefined)postURL=searchurl;
		jqxhr = $.post(postURL,{"data":JSON.stringify({"search":search,"onlyGroup":onlyGroup})},function(data){
			if(!(resp=JSON.parse(data)))return;
			if(resp.result=="OK"){
				if(typeof resp.array_result==='undefined')return;
				autocomplete.empty().show();
				cc=0;
				for(i=0;i<resp.array_result.length;i++){
					if(tthis.boxlist.find(".token[data-id='"+resp.array_result[i].id+"']").length==0){
						if(tofill=='mix_find'){
							if(resp.array_result[i].id.slice(-1)=="u")
								autocomplete.append("<li data-id='"+resp.array_result[i].id+"' data-ck='"+resp.array_result[i].ck+"'><i class='halflings user'></i> "+resp.array_result[i].value+"</li>");
							else
								autocomplete.append("<li data-id='"+resp.array_result[i].id+"' data-ck='"+resp.array_result[i].ck+"'><i class='halflings group'></i> "+resp.array_result[i].value+"</li>");
						}else if(tofill=='user_find'){
							autocomplete.append("<li data-id='"+resp.array_result[i].id+"' data-ck='"+resp.array_result[i].ck+"'><i class='halflings user'></i> "+resp.array_result[i].value+"</li>");
						}else
							autocomplete.append("<li data-id='"+resp.array_result[i].id+"' data-ck='"+resp.array_result[i].ck+"'>"+resp.array_result[i].value+"</li>");
						cc++;
					}
					if(cc==maxrow)i=resp.array_result.length;
				}
				if(cc==0){autocomplete.hide();return;}
				autocomplete.find("li").click(function(){
					tthis.addToken({"id":$(this).data("id"),"value":$(this).html(),"ck":$(this).data("ck")});
				});			
			}
		});
	}
	this.addToken = function(item){
		var token = $("<div class='token' data-id='"+item.id+"' data-value='"+$("<div>"+item.value+"</div>").text().trim()+"'>"+item.value+"</div>");
		
		if(item.ck==1)
			$("<div class='delbutton'><i class='halflings white pencil' title='Modify Group'></i></div>").appendTo(token).click(function(){newGroup(token.data("id"))});
		else if(!isNaN(item.id) && tofill=='mix_find')
			$("<div class='delbutton'><i class='halflings white eye-open' title='View Users'></i></div>").appendTo(token).click(function(){viewUsers(token.data("id"))});
		if(typeof tofill !== 'undefined')
			$("<div class='delbutton'><i class='halflings white remove' title='Remove from selection'></i></div>").appendTo(token).click(function(){token.remove()});
		if(wrapauto==null){
			this.boxlist.append(token);
		}else{
			wrapauto.before(token);
			input.val("");
			input.attr('size',1);
			autocomplete.empty().hide();
		}
		
		var itoken = token.find(">i").addClass("white");
		if(itoken.length==0){
			if(tofill=='mix_find'){
				if(isNaN(item.id) && item.id.slice(-1)=="u")
					token.prepend("<i class='halflings white user'></i> ");
				else
					token.prepend("<i class='halflings white group'></i> ");
			}else{
				token.prepend("<i class='halflings white user'></i> ");
			}
		}
	}
	this.addTokens = function(items){
		for(i=0;i<items.length;i++)
			this.addToken(items[i]);
	}
	this.getTokens = function(){
		var tokens = [];
		this.boxlist.find(".token").each(function(){tokens.push($(this).data("id"));});
		return tokens;
	}
	this.getStringTokens = function(){
		//mdm 22/3/2019 (IF for empty participant lists; to be implemented in /m4f/poll/poll.js(?))
		if ($(this).data('id') != "") {
			var tokens = "-";
			this.boxlist.find(".token").each(function(){tokens+=$(this).data('id')+"-";});
			if(tokens=="-")
				tokens = "-1-";		
			return tokens;
		} else {
			return "";
		}
	}
	this.getValueTokens = function(){
		var tokens=[];
		this.boxlist.find(".token").each(function(){tokens.push({"id":$(this).data("id"),"value":$(this).data("value")});});
		return tokens;
	}
	this.serialiseTokens = function(){
		var tokens = "";
		this.boxlist.find(".token").each(function(){tokens+=$(this).data('id')+",";});
		if(tokens.length>0)
			tokens=tokens.substring(0, tokens.length-1);
		return tokens;
	}
}

//----------------------------------- END Group Manager ------------------------------