/**
 * Network area functions
 * @author Erick S
 * @version 1.1.1 13/12/2007
 */

/** Will be supplied through PHP */
var networkId = null;
var xhr = null;
var delayTimer = null;
var netCache = new Array();
var selectedType = null;
var floater = null;

/** General error func - removes the 'wait' cursor */
function xhrErr(errorText)
{
	document.documentElement.style.cursor = 'default';	
	MessageBox.Alert(errorText);
}

/** For sorting results */
function networkCompare(a,b)
{
	if (a[1] < b[1]) return -1;
	if (a[1] == b[1]) return 0;
	return 1;	
}

function searchNetCat(type)
{
	selectedType = type;
	if (netCache[type])
	{
		parseNetResult(netCache[type]);
		return;
	}
	// Not in cache - send request
	if(!xhr) xhr = new XHR();
	else if (xhr.InProgress() && !delayTimer)
	{
		delayTimer = setTimeout('searchNet("'+type+'")',1000);
		return;
	}
	delayTimer = null;
	document.documentElement.style.cursor = 'wait';
	xhr.SetErrorFunc(xhrErr);
	xhr.Post('/networks/listener.php','act=netsearch&type='+type,searchNetResult,type);
}

function searchNet(form)
{
	var value = trim(form.elements['searchVal'].value);
	if (!value) return;
	selectedType = null;	
	if(!xhr) xhr = new XHR();
	else if (xhr.InProgress() && !delayTimer)
	{
		delayTimer = setTimeout('searchNet("'+type+'")',1000);
		return;
	}
	delayTimer = null;
	document.documentElement.style.cursor = 'wait';
	xhr.SetErrorFunc(xhrErr);
	xhr.Post('/networks/listener.php','act=netsearch&value='+XHR.Encode(value),searchNetResult,null);
}

function searchNetResult(responseText,type)
{
	try
	{
		var json = eval("({" + responseText + "});");
		if (json.error) throw Error(json.error);
		json.networks.sort(networkCompare);		
		if (type != null) // store results
			netCache[type] = json.networks;

		parseNetResult(json.networks);
	}
	catch (ex)
	{
		MessageBox.Alert(ex.message);
	}
	document.documentElement.style.cursor = 'default';	
}

function parseNetResult(networks)
{
	// assign colors
	var id = new Array('academic','military','organization','other');
	for (var i=0;i<id.length;i++)
	{
		$('search'+id[i]).style.background = (selectedType == id[i]) ? '#a5dd4c' : '#f9f9f9';
	}
	var html = new Array();
	if (networks.length == 0)
	{
		$('netSearchResult').innerHTML = 'None found';
		return;
	}
	for (var i=0;i<networks.length;i++)
	{
		html.push("<div style='margin:3px'><a href='/networks/?id="+
					networks[i][0]+"'>"+networks[i][1]+"</div>");
	}
	$('netSearchResult').innerHTML = html.join('');
}

function joinNetwork(networkId,state)
{
	if (!networkId) return;
	if(!xhr) xhr = new XHR();
	else if (xhr.InProgress())
	{
		if (!delayTimer) delayTimer = setTimeout('joinNetwork("'+networkId+','+state+'")',1000);
		else
		{
			MessageBox.Alert("A request is already in progress. Please wait.");
		}
		return;
	}
	delayTimer = null;
	document.documentElement.style.cursor = 'wait';
	xhr.SetErrorFunc(xhrErr);
	xhr.Post('/networks/listener.php','act=join&state='+state+'&id='+networkId,joinNetworkResult,state);
}

function joinNetworkResult(responseText,state)
{
	if (responseText == 'ok')
	{
		if (state == 1)
			MessageBox.Alert("You are now a member of this network.<br/>Refreshing the page in 5 seconds");
		else
			MessageBox.Alert("You are no longer a member of this network.<br/>Refreshing the page in 5 seconds");

		setTimeout("window.location.reload()",5000);
	}
	else MessageBox.Alert(responseText);
	document.documentElement.style.cursor = 'default';
	$('joinButton').disabled = true;	
}

function popSuggest()
{
	if (!floater) // send request for floater HTML
	{
		if (!xhr) xhr = new XHR();
		else if (xhr.InProgress())
		{
			if (!delayTimer) delayTimer = setTimeout(popSuggest,1000);
			else
			{
				MessageBox.Alert("A request is already in progress. Please wait.");
			}
			return;
		}
		document.documentElement.style.cursor = 'wait';
		xhr.SetErrorFunc(xhrErr);
		xhr.Get('/networks/listener.php?act=sugghtml',popSuggestResult);
		return;
	}
	// reset floater fields
	$('name').value = '';
	$('email').value = '';
	$('type').selectedIndex = 0;
	$('title').value = '';
	$('comments').value = '';
	floater.showCenter(null,null);
}
function popSuggestResult(responseText)
{
	floater = new FloaterBox();
	floater.setContents(responseText);
	floater.showCenter(null,null);
	setTimeout("document.documentElement.style.cursor = 'default'",500);	
}
function suggestNetwork()
{
	// get the fields
	var title = trim($('title').value);	
	if (title.length == 0)
	{
		MessageBox.Alert("Network title is required");
		return;
	}
	var email = trim($('email').value);
	var name = trim($('name').value);	
	// type
	var typeSelect = $('type');
	var type = typeSelect.options[typeSelect.selectedIndex].text;
	var comments = trim($('comments').value);
	var postInfo = 'act=sendsugg&name='+name+'&email='+email+'&type='+type+'&title='+title+'&comments='+comments;
	if (!xhr) xhr = new XHR();
	xhr.Post('/networks/listener.php',postInfo,suggestNetworkResult);
	floater.hide();
	$('suggestButton').disabled = true;
}
function suggestNetworkResult(responseText)
{
	MessageBox.Alert(responseText);
	$('suggestButton').disabled = false;
}

function popAddNote(noteId)
{
	if (typeof(noteId) == 'undefined' || !noteId)
		MessageBox.PromptAdv('Add Note','',true,512,addNoteOk,null);
	else
	{
		var value = $('note_'+noteId).innerHTML;
		value = value.replace(/<br\/?>/gi,'');
		MessageBox.PromptAdv('Edit Note',value,true,512,addNoteOk,noteId);
	}
}

function addNoteOk(text,noteId)
{
	text = trim(text);
	if (!text) return;
	if (!networkId) { alert('Network Id missing'); return; }
	if (!xhr) xhr = new XHR();
	var postInfo = 'act=editnote&net_id='+networkId+'&text='+XHR.Encode(text);
	if (noteId != null)
	{
		postInfo += '&note_id=' + noteId;
		var data = new Object(); // will be passed to result function
		data.noteId = noteId;
		data.text = text;
		xhr.Post('/networks/listener.php',postInfo,editNoteResult,data);
	}
	else
	{
		xhr.Post('/networks/listener.php',postInfo,addNoteResult,null);
	}
}

function editNoteResult(responseText,data)
{
	if (responseText == 'ok')
	{
		$('note_'+data.noteId).innerHTML = nl2br(data.text);
		return;
	}
	// Give the original dialog time to close
	setTimeout('MessageBox.Alert("'+responseText+'");',250);
}

function addNoteResult(responseText)
{
	$('notesArea').innerHTML = responseText;
}