// The function toggles the visibility for various kinds of elements
// Its primary usage is in the details section of a project

function enableDiv(div_name, enable){
	var div = document.getElementById(div_name);
	if(div) div.style.display = enable ? "block" : "none";
}

function toggleDiv(div_name){
	var div = document.getElementById(div_name);
	if(div) div.style.display = div.style.display == "none" ? "block" : "none";
}

function enableRow(div_name, enable){
	var div = document.getElementById(div_name);
	if(div){
		try{
			div.style.display = enable ? "table-row" : "none";
		}
		catch(e){
			div.style.display = "block";
		}
	}
}

function toggleRow(div_name){
	var div = document.getElementById(div_name);
	if(div){
		try{
			div.style.display = (div.style.display == "none") ? "table-row" : "none";
		}
		catch(e){
			div.style.display = "block";
		}
	}
}

function enableInline(div_name, enable){
	var div = document.getElementById(div_name);
	if(div)
		div.style.display = enable ? "inline" : "none";
}

function modifyHref(div_name, regex, replacement){
	var div = document.getElementById(div_name);
	if(div)
		div.href = div.href.replace(regex, replacement);
}

var BR = new Object();

function appendChildren(div, children){
	for(var i = 0; i < children.length; i++){
		var child = children[i];
		if(child == BR)
			div.appendChild(document.createElement('br'));
		else if(typeof child == 'string')
			div.appendChild(document.createTextNode(child));
		else div.appendChild(child);
	}  
}

function createForm(method, action, children){
	var form = document.createElement('form');
	form.method = method;
	form.action = action;
	appendChildren(form, children);
	return form;
}

function createInput(name, size){
	var input = document.createElement('input');
	input.type = 'text';
	input.name = name;
	input.size = size;
	return input;
}

function createPassword(name, size){
	var input = document.createElement('input');
	input.type = 'password';
	input.name = name;
	input.size = size;
	return input;
}

function createLink(text, url){
	var link = document.createElement('a');
	if(url) link.href = url;
	link.innerHTML = text;
	return link;
}

function createCheckbox(name){
	var check = document.createElement('input');
	check.type = 'checkbox';
	check.name = name;
	return check;
}

function createRadio(name, value){

	try{
		radio = document.createElement('<input type="radio" ' + 'name="' + name +'" />');
	}catch(err){
		radio = document.createElement('input');
		radio.type = 'radio';
		radio.name = name;
		radio.value = value;
	}
	return radio;
}

function createButton(name, text){
	var button = document.createElement('button');
	button.name = name;
	if(text) button.innerHTML = text;
	return button;
}

function createHidden(name, value){
	var hidden = document.createElement('input');
	hidden.type = 'hidden';
	hidden.name = name;
	hidden.value = value ? value : '';
	return hidden;
}

function createSpan(id, children){
	var span = document.createElement('span');
	if(id) span.id = id;
	if(children)
		appendChildren(span, children);
	return span;
}

/* Interactive Help support */

var _help_active = null;
var _help_timer =  null;

function help_show(divname, fixed)
{
	var mydiv = document.getElementById(divname);
	help_hold();  // reset timer 
	
	if (_help_active != null) {
		if (_help_active == mydiv) {
				return; // we are already showing the right div
		}
		else {
			help_hide_now();
		}
	}

	_help_active = mydiv;
	if (_help_active != null) {
			help_position(divname, fixed);
			mydiv.style.display = "block";
	}
	help_hold();
}

function help_position(divname, fixed) {
	var mydiv = document.getElementById(divname);
	var mylink = document.getElementById(divname + "-");

	
	if(fixed != true){
		var wholeBody = document.getElementsByTagName((document.compatMode && document.compatMode == "CSS1Compat") ? "HTML" : "BODY")[0];
		var posY = mylink.offsetTop;
		var posX = mylink.offsetLeft + mylink.offsetWidth;

		var bodyWidth = (wholeBody.clientWidth) ? wholeBody.clientWidth + wholeBody.scrollLeft : window.innerWidth + window.pageXOffset;
		var bodyHeight = (window.innerHeight) ? window.innerHeight + window.pageYOffset : wholeBody.clientHeight + wholeBody.scrollTop;

		mydiv.style.top = (posY - 10 ) + "px";
		mydiv.style.left = (posX ) + "px";
	
		if( posX + mydiv.offsetWidth > bodyWidth ){	//  body bounds 
			mydiv.style.left = (bodyWidth - mydiv.offsetWidth) + "px";
		}
		if( posY + mydiv.offsetHeight > bodyHeight ){
			mydiv.style.top = (bodyHeight - mydiv.offsetHeight) + "px";
		}
	}
	else{
		mydiv.style.position = "fixed";
		var posY = getY(mylink);
		var posX = getX(mylink) + mylink.offsetWidth;
		mydiv.style.top = (posY - 10) + "px";
		mydiv.style.left = (posX) + "px";
	}
}

function getY(emt){
	var ret = 0;
	while(emt != null){
		ret += emt.offsetTop;
		emt = emt.offsetParent;
	}
	return ret;
}

function getX(emt){
	var ret = 0;
	while(emt != null){
		ret += emt.offsetLeft;
		emt = emt.offsetParent;
	}
	return ret;
}


function help_hide()
{
	if(_help_active != null){
			_help_timer = setTimeout("help_hide_now();", 500);
	}
}

function help_hide_now()
{
	if (_help_active != null) {
		_help_active.style.display = 'none';
		_help_active = null;
	}
}

function help_hold()
{
		if (_help_timer != null) {
			clearTimeout(_help_timer);
		}
}

function toggleHelp(divname, fixed){
	var div = document.getElementById(divname);
	if(div.style.display != 'block')
		help_show(divname, fixed);
	else help_hide();
}

/* AJAX support */
function createRequest(){
		var xmlHttp;
		if(window.XMLHttpRequest) {
                xmlHttp = new XMLHttpRequest(); // IE7, Safari, Firefox
                //alert("IE7");
        }		
        else if(window.ActiveXObject) {
                xmlHttp = new ActiveXObject("Microsoft.XMLHTTP"); // IE6
                //alert("IE6");                
        }
        return xmlHttp;
}

/* Logo block */

function createSubmenu(caption, items){
	var li = document.createElement('li');
	var ul = document.createElement('ul');
	appendChildren(ul, items);
	appendChildren(li, [createLink(caption, null), ul]);
	return li;
}

function createMenuItem(caption, link){
	var li = document.createElement('li');
	li.appendChild(createLink(caption, link));
	return li;
}

/*function initLogoBlock(divname, authenticated, admin, site, context, current){
	var div = document.getElementById(divname);
	var login = document.createElement('div');
	var button = createButton('login', 'Sign in');
	var banner = document.createElement('div');
	var menu = document.createElement('ul');
	button.onclick = function(){ this.form.submit(); };
	login.className = 'loginbox';
	banner.className = 'pdmenu';
	banner.appendChild(menu);
	appendChildren(div, [login, banner]);
	
	if(!authenticated)
		login.appendChild(
			createForm('post', 'https://' + site + context + '/user/login.jsp',
				[	'User: ', createInput('user', '8'),
					' Pass: ', createPassword('password', '8'),
					button, BR,
					createHidden('url', current),
					"Don't have a username? ",
					createLink('Register!', context + '/user/register.jsp')
				]
			)
		);
	if(authenticated){
		var items = [
			createMenuItem('Logout', context + '/user/logout.jsp'),
			createMenuItem('User Profile', context + '/user/profile.jsp'),
			createMenuItem('Jobs', context + '/jobs.jsp')
		];
		if(admin) items.push(createMenuItem('All jobs', context + '/jobs.jsp?user=all'));
		menu.appendChild(createSubmenu('Account', items));
	}
	appendChildren(menu,[
		createSubmenu('About', [
			createMenuItem('General Info', context + '/help.jsp'),
			createMenuItem('UCSD Proteomics', 'http://proteomics.bioprojects.org/'),
			createMenuItem('Future Tools', 'http://proteomics.bioprojects.org/Software.html')
		]),
		createSubmenu('Help', [
			createMenuItem('Demo', null),
			createMenuItem('Contact', 'http://proteomics.bioprojects.org/People.html')
		])
	]);
}*/

function initLogoBlock(divname, authenticated, admin, site, context, current){
	var div = document.getElementById(divname);
	var login = document.createElement('div');
	var button = createButton('login', 'Sign in');
	var banner = document.createElement('div');
//	var menu = document.createElement('ul');
	button.onclick = function(){ this.form.submit(); };
	login.className = 'loginbox';
//	banner.className = 'pdmenu';
	banner.className = 'banner';
//	banner.appendChild(menu);
	appendChildren(div, [login, banner]);
	
	if(!authenticated)
		login.appendChild(
			createForm('post', 'https://' + site + context + '/user/login.jsp',
				[	'User: ', createInput('user', '8'),
					' Pass: ', createPassword('password', '8'),
					button, BR,
					createHidden('url', current),
					"Don't have a username? ",
					createLink('Register!', context + '/user/register.jsp')
				]
			)
		);
	if(authenticated){
		var items = [
			createLink('Logout', context + '/user/logout.jsp'), ' | ',
			createLink('User Profile', context + '/user/profile.jsp'), ' | ',
			createLink('Jobs', context + '/jobs.jsp'), ' | '
		];
		if(admin){
			items.push(createLink('All jobs', context + '/jobs.jsp?user=all'));
			items.push(' | ');
		}
		appendChildren(banner, items);
	}
	appendChildren(banner,[
		createLink('General Info', context + '/help.jsp'), ' | ',
		createLink('UCSD Proteomics', 'http://proteomics.ucsd.edu/'), ' | ',
		createLink('Future Tools', 'http://proteomics.ucsd.edu/Software.html'), ' | ',
		createLink('Demo', context + '/demo_2.jsp'), ' | ',
		createLink('Contact', 'http://proteomics.ucsd.edu/People.html')
	]);
}
