// This function creates the "add bookmark" link for items.
function addBookmark(title_elid, url, linkimage, linktext, targetelement)
{
	var myBookmark = document.createElement('a');
	var title_element = document.getElementById(title_elid);
	var title = title_element.innerHTML;
	myBookmark.setAttribute('title', linktext);
	myBookmark.style.background = 'transparent';
	if (window.sidebar) // Mozilla
	{
		myBookmark.setAttribute('onClick', 'window.sidebar.addPanel(\'' + title + '\',\'' + url + '\',""); return false;');
		myBookmark.setAttribute('href', '');
	}
	else if (window.external) // MS IE
	{
		myBookmark.setAttribute('onClick', 'window.external.AddFavorite(\'' + url + '\', \'' + title + '\');');
		myBookmark.setAttribute('href','javascript:window.external.AddFavorite(\'' + url + '\', \'' + title + '\');');
	}
	else if (window.opera && window.print) // Opera
	{
		myBookmark.setAttribute('rel','sidebar');
		myBookmark.setAttribute('href',url);
	}
	var nodedata = document.createElement('img');
	nodedata.setAttribute('src', linkimage);
	nodedata.setAttribute('alt', linktext);
	myBookmark.appendChild(nodedata);
	var divel = document.getElementById(targetelement);
	divel.appendChild(myBookmark);
}

// Called when saving an item
function checkFiles()
{
	xajax_checkFileUpload(xajax.getFormValues('itemeditform'));
	return false;
}

// Called after the check of the input data in the item administration was successfull in order to submit the data.
function submitForm()
{
	var count = document.getElementById('countDL').value;
	for (var i = 1; i <= count; i++)
		document.getElementById('readmeULfname_entered[' + i + ']').value = document.getElementById('readmeUL[' + i + ']').value;
	document.itemeditform.submit();
}

// Unhides the input fields on the login screen for admins
function showLogin()
{
	var login = document.getElementById('login');
	if(login != null)
		login.style.display = "block";
}

// Selects the given value in an select box
function selectEntry(obj, value)
{
	document.getElementById(obj).value = value;
}

// Unhides a html-element
function enableElement(desc)
{
	if(document.getElementById(desc))
	{
   		document.getElementById(desc).style.display = 'block';
	}
}

// Hides a html-element
function disableElement(desc)
{
   	document.getElementById(desc).style.display = 'none';
}

// This function marks all elements of the specified selectbox. Used in the exception administration.
function markAll(obj)
{
	var m1 = document.getElementById(obj);
	var m1len = m1.length;
	for (var i = 0; i < m1len; i++)
		m1.options[i].selected = true;
}

// Counterpart to markAll
function unmarkAll(obj)
{
	var m1 = document.getElementById(obj);
	var m1len = m1.length;
	for (var i = 0; i < m1len; i++)
		m1.options[i].selected = false;
}

function okCancel(message)
{
	return confirm(message);
}

// Shows a confirmation dialog only if a specific checkbox is checked. Used in the exception administration.
function okCancelIfchecked(element, message)
{
	var m1 = document.getElementById(element);
	if (m1.checked == true)
		return confirm(message);
	return true;
}

// Shows a warning when the given select box is empty. Used in the exception administration.
function alertIfnoneSelected(objID, message)
{
	var obj = document.getElementById(objID);
	if (obj.childNodes.length < 1)
	{
		alert(message);
		return true;
	}
	return false;
}

// Shows a warning when the given text box is empty. Used in the exception administration.
function alertIfEmpty(objID, message)
{
	var val = trim(document.getElementById(objID).value);
	if (val.length < 1)
	{
		alert(message);
		return true;
	}
	return false;
}

// Shows a warning when the selected date is in the past. Used in the exception administration.
function alertIfdateInPast(yearID, monthID, dayID, message)
{
	var year = document.getElementById(yearID);
	var month = document.getElementById(monthID);
	var day = document.getElementById(dayID);
	var currentDate = new Date();
	if ((year.value < currentDate.getFullYear())
		|| ((year.value == currentDate.getFullYear())
			&& ((month.value < (currentDate.getMonth() + 1))
				|| ((month.value == (currentDate.getMonth() + 1))
					&& (day.value <= currentDate.getDate())
					)
				)
			)
		)
		{
			alert(message);
			return true;
		}
	return false;
}

// This function adds a new option element to a select box.
function addNodes(objID, nodeText, nodeValue, nodeID, selectIt)
{
	var obj = document.getElementById(objID);
	var NodeCount = obj.childNodes.length;
	var OPTION = document.createElement("option");
	var TEXT = document.createTextNode(nodeText);
	OPTION.appendChild(TEXT);
	if(nodeValue == null)
		OPTION.value = obj.length;
	else
		OPTION.value = nodeValue;
	if(nodeID != null)
		OPTION.id = nodeID;
	
	obj.appendChild(OPTION);

	if(selectIt != null)
		OPTION.selected = true;
}

// Counterpart to addNodes.
function removeOption(selectID, optionValue)
{
	var sel = document.getElementById(selectID);
	for(i=0;i<sel.length;i++)
	{
		if(sel.options[i].value == optionValue)
			sel.options[i] = null;
	}
	if (sel.length > 0)
		sel.options[0].selected = true;
}

// This function removes all selected options from a select box. Used in the item exception administration.
function removeSelOptions(selectID)
{
	var sel = document.getElementById(selectID);
	while (sel.selectedIndex != -1)
		sel.options[sel.selectedIndex] = null;
}

// This functiom moves an option element from on select box to another. Used in the exception administration.
function moveOption(sourceSelectId, targetSelectId)
{
	var srcSel = document.getElementById(sourceSelectId);
	var tarSel = document.getElementById(targetSelectId);
	var oldLen = srcSel.length;

	while (srcSel.selectedIndex != -1)
		tarSel.appendChild(srcSel.options[srcSel.selectedIndex]);
}

// This function removes all child nodes from the specified element.
function clearNodes(element)
{
	var obj = document.getElementById(element);
	while (obj.childNodes[0])
		obj.removeChild(obj.childNodes[0]);
}

// This function is used for readme uploads in the item administration. It is used to remove the name of a previous uploaded filename.
function rmReadmeFile(index)
{
	var theNode = document.getElementById('readmerealnamediv[' + index + ']');
	theNode.parentNode.removeChild(theNode);
}

// Same as rmReadmeFile, just for news files.
function rmNewsFile()
{
	var theNode = document.getElementById('realnamedivfile');
	theNode.parentNode.removeChild(theNode);
}

// This function hides an element if it's visible and unhides it if it's hidden.
function toggleHidden(obj){

	if(document.getElementById(obj).style.display == 'block')
	{
		document.getElementById(obj).style.display = 'none';
		return false;
	}
	else
	{
		document.getElementById(obj).style.display = 'block';
		return true;
	}
}

// This function shows or hides a news entry, depending on its previous state. If neccessary it fetches the news text from the server first.
function showNews(id)
{
	var obj = document.getElementById('newsdetail');
	if (obj.style.display == 'block')
		obj.style.display = 'none';
	else if (obj.style.display == 'none')
		obj.style.display = 'block';
	else
	{
		xajax_showNews(id);
		obj.style.display = 'block';
	}
}

var selected_iten_id = "0";

// This function shows or hides the details of an item.
function toggleItemDetail(href, parent_id, obj)
{
	if(document.getElementById(obj).style.display == 'block')
	{
		document.getElementById(obj).style.display = 'none';
		document.getElementById('loadingBar_space_'+parent_id).style.display="none";			
		document.getElementById('h3_'+parent_id).className = "closed";
	}
	else
	{
		selected_iten_id = parent_id;
		xajax_showDetails(href, parent_id);
		document.getElementById(obj).style.display = 'block';
		document.getElementById('h3_'+parent_id).className = "open";		
	}
}

// This function is called when an administrator group should be deleted.
function deleteGroup(formId, message)
{
	if (document.getElementById('group').value == 0)
		return;

	if (confirm(message))
		xajax_groupDelete(xajax.getFormValues(formId));
}

// This function is called when any data in the meta data administration is renamed.
function dataRename(formId, selId)
{
	clearErrorBar();

	if (selId == 0)
		return;

	xajax_dataRename(xajax.getFormValues(formId));
}

// This function is called when any data in the meta data administration is removed.
function dataDelete(formId, selId, message)
{
	clearErrorBar();

	if(selId == 0)
		return;

	ret = confirm(message);
	
	if(ret)
		xajax_dataDelete(xajax.getFormValues(formId));
}

// This function is called when new meta data should be created.
function dataCreate(formId)
{
	clearErrorBar();

	xajax_dataCreate(xajax.getFormValues(formId));
}

// This function is called when a release in the release administration should get updated.
function releaseUpdate(formId, selId)
{
	clearErrorBar();

	if (selId == 0)
		return;

	xajax_releaseUpdate(xajax.getFormValues(formId));
}

// This function is called when deleting a release in the release administration.
function releaseDelete(formId, selId, message)
{
	clearErrorBar();

	if (selId == 0)
		return;

	ret = confirm(message);

	if (ret)
		xajax_releaseDelete(xajax.getFormValues(formId));
}

// Global functions for initializing xajax (callbacks, etc)
var lastRequest = undefined;
if (typeof xajax != "undefined" )
{
	xajax.callback.global.onRequest = function (oRequest)
	{
		lastRequest = oRequest;
		if(selected_iten_id != "0")
		{
			document.getElementById('loadingBar_'+selected_iten_id).style.display="block";
			document.getElementById('loadingBar_space_'+selected_iten_id).style.display="none";				
		}
		
		if(document.getElementById('loadingBar'))
		{
			document.getElementById('loadingBar').style.display="block";		
		}
	}

	xajax.callback.global.onComplete = function ()
	{
		lastRequest = undefined;
		if(selected_iten_id != "0")
		{
			document.getElementById('loadingBar_'+selected_iten_id).style.display="none";
			document.getElementById('loadingBar_space_'+selected_iten_id).style.display="none";			
		}
		
		if(document.getElementById('loadingBar'))
		{
			document.getElementById('loadingBar').style.display="none";	
		}
		selected_iten_id = "0";	
	}
}

// This function aborts the last started xajax request.
function cancel_last_request()
{
	if (lastRequest != undefined)
	{
		xajax.abortRequest(lastRequest);
		lastRequest = undefined;
	}
}

// This function shows the specified tab in the meta data administration.
function showD_admin_data(obj)
{
	hideAll_admin_data();
	clearErrorBar();
	document.getElementById(obj).style.display = 'block';
	document.getElementById(obj + '_tab').className = "selected";
}

// This function hides all tabs in the meta data administration.
function hideAll_admin_data()
{
	document.getElementById('platformcontent').style.display = 'none';
	document.getElementById('platformcontent_tab').className = '';
	document.getElementById('productcontent').style.display = 'none';
	document.getElementById('productcontent_tab').className = '';
	document.getElementById('releasenumbercontent').style.display = 'none';
	document.getElementById('releasenumbercontent_tab').className = '';
	document.getElementById('versioncontent').style.display = 'none';
	document.getElementById('versioncontent_tab').className = '';
}

// This function shows the specified tab of the administrator menu.
function showD_admin_menu(obj)
{
	hideAll_admin_menu();
	document.getElementById(obj).style.display = 'block';
	//document.getElementById(obj + '_tab').className = "selected";
	document.getElementById(obj + '_tab').className = "holder-admin2";
	//neccessary to work with IE
	document.getElementById(obj + '_color').style.color = "#0093D0";	
}

// This function hides all tabs of the administrator menu.
function hideAll_admin_menu()
{
	var menu_entries = new Array('uadmin_menu', 'iadmin_menu', 'sadmin_menu', 'rep_menu');
	for (var i = 0; i < menu_entries.length; ++i)
	{
		var obj = document.getElementById(menu_entries[i]);
		if (obj != undefined)
		{
			obj.style.display = 'none';
			document.getElementById(menu_entries[i] + '_tab').className = 'holder-admin';
			//neccessary to work with IE
			document.getElementById(menu_entries[i] + '_color').style.color = "#699032";
		}
	}
}

// This function shows the specified tab of the meta data area menu.
function showD_meta_data_menu(obj)
{
	hideAll_meta_data_menu();
	document.getElementById(obj).style.display = 'block';
	//document.getElementById(obj + '_tab').className = "selected";
	document.getElementById(obj + '_tab').className = "holder-admin2";
	//neccessary to work with IE
	document.getElementById(obj + '_color').style.color = "#0093D0";	
}

// This function hides all tabs of the meta data are menu.
function hideAll_meta_data_menu()
{
	var menu_entries = new Array('platformcontent', 'productcontent', 'releasenumbercontent', 'versioncontent', 'familycontent');
	for (var i = 0; i < menu_entries.length; ++i)
	{
		var obj = document.getElementById(menu_entries[i]);
		if (obj != undefined)
		{
			obj.style.display = 'none';
			document.getElementById(menu_entries[i] + '_tab').className = 'holder-admin';
			//neccessary to work with IE
			document.getElementById(menu_entries[i] + '_color').style.color = "#699032";
		}
	}
}

// This function removes all content from the error bar in the page header.
function clearErrorBar()
{
	var error_div = document.getElementById('error');
	while (error_div.hasChildNodes())
		error_div.removeChild(error_div.firstChild);
}

// This function takes a name and removes or replaces all characters that are not allowd. Used for creating urls from names.
function proposeURLName(name, valid_chars)
{
	var output = "";

	for (var i = 0; i < name.length;i++)
	{
		if (valid_chars.indexOf(name.charAt(i)) != -1)
			output = output + name.charAt(i);
		else if (name.charAt(i) == ' ')
			output = output + '_';
	}
	return output;
}

// This function is used to hide or unhide the navigation tree.
function toggle_left_nav(action)
{
	if (action == "close")
	{
		document.getElementById("c-opened").style.display="none";document.getElementById("c-closed").style.display="";
		document.getElementById("navtree").style.display="none";document.getElementById("rightside").style.width="987px";
		document.getElementById("ftr-open").style.display="none";document.getElementById("ftr-close").style.display="";
		document.getElementById("rightside").className="right-closed";document.getElementById("right-content").className="right-content close";
	}
	if (action == "open")
	{
		document.getElementById("c-opened").style.display="";document.getElementById("c-closed").style.display="none";
		document.getElementById("navtree").style.display="";
		document.getElementById("rightside").style.width="837px";document.getElementById("ftr-close").style.display="none";
		document.getElementById("ftr-open").style.display="";document.getElementById("rightside").className="right";
		document.getElementById("right-content").className="right-content open";
	}
}

// The following three functions are used to enable or disable different parts of the esd reporting screen based on the current selection.
function esdreporting_sel_prod()
{
	document.getElementById("product").disabled = false;
	document.getElementById("user_what").disabled = true;
	document.getElementById("user_crit").disabled = true;
	document.getElementById("user_val").disabled = true;
	document.getElementById("company_what").disabled = true;
	document.getElementById("company_crit").disabled = true;
	document.getElementById("company_val").disabled = true;
}

// See above.
function esdreporting_sel_user()
{
	document.getElementById("product").disabled = true;
	document.getElementById("user_what").disabled = false;
	document.getElementById("user_crit").disabled = false;
	document.getElementById("user_val").disabled = false;
	document.getElementById("company_what").disabled = true;
	document.getElementById("company_crit").disabled = true;
	document.getElementById("company_val").disabled = true;
}

// See above.
function esdreporting_sel_company()
{
	document.getElementById("product").disabled = true;
	document.getElementById("user_what").disabled = true;
	document.getElementById("user_crit").disabled = true;
	document.getElementById("user_val").disabled = true;
	document.getElementById("company_what").disabled = false;
	document.getElementById("company_crit").disabled = false;
	document.getElementById("company_val").disabled = false;
}

// This function starts a search on the esd reporting screen.
function esdreporting_search(formid)
{
	esdreporting_clear_errors();
	document.getElementById('result').style.display = 'none';
	document.getElementById('searching_wait').style.display = 'block';
	document.getElementById('do_search').disabled = true;
	document.getElementById('dl_as_csv').disabled = true;
	xajax_esdreporting_search(xajax.getFormValues(formid));
}

// This function aborts any currently running search on the esd reporting panel.
function esdreporting_abort()
{
	cancel_last_request();
	document.getElementById('result').style.display = 'none';
	document.getElementById('searching_wait').style.display = 'none';
	document.getElementById('do_search').disabled = false;
	document.getElementById('dl_as_csv').disabled = false;
}

// This function removes the content of all error elements on the esd reporting panel.
function esdreporting_clear_errors()
{
	document.getElementById('producterror').innerHTML = '';
	document.getElementById('usererror').innerHTML = '';
	document.getElementById('companyerror').innerHTML = '';
	document.getElementById('ui_view_whaterror').innerHTML = '';
}

// This function is invoked when the selection for a capability group is changed. It updates the selection of all child elements accordingly.
function cap_group_sel(group_id)
{
	var chk_boxes = document.getElementsByTagName("input");
	var checked = false;
	var start = false;
	for (var i = 0; i < chk_boxes.length; i++)
	{
		if (start)
		{
			if (chk_boxes[i].type != "checkbox")
				continue;
			if (chk_boxes[i].value < 0)
				return;
			if (chk_boxes[i].disabled == true)
				continue;
			if (chk_boxes[i].checked != checked)
				chk_boxes[i].click();
		}
		else if (chk_boxes[i].value == group_id)
		{
			checked = chk_boxes[i].checked;
			start = true;
		}
	}
}

// This function toggles the disabled state of the specified elelemt.
function toggleDisabled(obj_id)
{
	var obj = document.getElementById(obj_id);
	if (obj)
		obj.disabled = !obj.disabled;
}

// This function shows or hides the platform/product description. It takes care of the correct layout.
function toggleDesc(left_name, right_name, clicked)
{
	var o_left_name = left_name;
	var o_right_name = right_name;
	var suffix;
	if (right_name == clicked)
	{
		right_name = left_name;
		left_name = clicked;
		suffix = "right";
	}
	else
		suffix = "left";
	document.getElementById(right_name + 'detail').style.display = 'none';
	var left_middle = document.getElementById(o_left_name + 'middle');
	if (toggleHidden(left_name + 'detail'))
	{
		left_middle.className = 'item-bottom-half-open-' + suffix;
		document.getElementById(o_right_name + 'middle').style.display = 'none';
	}
	else
	{
		left_middle.className = 'item-bottom-half';
		document.getElementById(o_right_name + 'middle').style.display = 'block';
	}
}

// This function limits the number of characters for the given textarea to 999 characters.
function countLetter(ta_name) 
{
	var amount;
	amount = 999;
	var textareaname;
	
	textareaname = document.getElementById(ta_name); 

	var letter = textareaname.value;
	var count = amount - letter.length;
	if(count < 0) 
		textareaname.value = letter.substr(0, amount);
}	

// This function lets the browser scroll to the top of the page.
function jump_to_top()
{
	if(document.getElementById("isn_logo"))
	{
		document.getElementById("isn_logo").scrollIntoView(true);
	}
}

// This function is called when the states id or visibilities id is changed for a platform specific item.
// It asks the user if he really knows what he is doing:
function iadmin_id_chg_check(id, msg)
{
	var sel_obj = document.getElementById(id);
	var old_obj = document.getElementById('old_' + id);
	if ((sel_obj.value != old_obj.value) && (!confirm(msg)))
		sel_obj.value = old_obj.value;
}

// This function removes leading and trailing whitespaces from the given string.
function trim(stringToTrim)
{
	return stringToTrim.replace(/^[\s\t\n\r]+|[\s\t\r\n]+$/g,"");
}

//	This function hides preview if already displayed 
function checkPreview (id)
{
	document.getElementById('news'+id+'preview').setAttribute("onclick","toggleHidden('newsdetail"+id+"'); return false;",0);
}

// reset adim filter to default
function resetAdminFilter (selected)
{
	if(!document.getElementById("filt_visibility").checked)
	{
		document.getElementById("filt_visibility").click();
	}
	
	for(var i=0; i<document.getElementById("filt_visibility_sel").length; i++)
	{
		if(document.getElementById("filt_visibility_sel").options[i].value==selected)
		{
			document.getElementById("filt_visibility_sel").options[i].selected=true;
			break;
		}
	}
}

// change Button of selected item
var selected_last_entry = "";
function updateProductButton (id)
{
	selected_last_entry = id;
}

//mark selected entry
function markProduct (id)
{
	document.getElementById(selected_last_entry).className = "navtree_circle_elemts_open";
	selected_last_entry = "";
}

function realdelete (element, message) 
{
	if (okCancel(message)) 
	{ 
		document.getElementById(element).value = "yes";
		return true; 
	}
	
	return false;
}

// Submits the form and changes the license to a promo ad.
function change_promo() {
	javascript:xajax_displayPromo();
	return true;
}

