// VARIABLE DECLARATIONS
var getGNServiceURL = function(service) {
	return Env.locService+"/"+service;
};

function init() {}

// Read a cookie
function get_cookie ( cookie_name )
{
  var results = document.cookie.match ( cookie_name + '=(.*?)(;|$)' );

  if ( results )
    return ( unescape ( results[1] ) );
  else
    return null;
}

// New browser windows
	function popNew(a)
	{
		msgWindow=window.open(a,"displayWindow","location=no, toolbar=no, directories=no, status=no, menubar=no, scrollbars=yes, resizable=yes, width=800, height=600")
		msgWindow.focus()
	}

	function openPage(what,type)
	{
		msgWindow=window.open(what,type,"location=yes, toolbar=yes, directories=yes, status=yes, menubar=yes, scrollbars=yes, resizable=yes, width=800, height=600")
		msgWindow.focus()
	}

	function popFeedback(a)
	{
		msgWindow=window.open(a,"feedbackWindow","location=no, toolbar=no, directories=no, status=no, menubar=no, scrollbars=yes, resizable=yes, width=800, height=600")
		msgWindow.focus()
	}

	function popWindow(a)
	{
		msgWindow=window.open(a,"popWindow","location=no, toolbar=no, directories=no, status=no, menubar=no, scrollbars=yes, resizable=yes, width=800, height=600")
		msgWindow.focus()
	}

	function popInterMap(a)
	{
		msgWindow=window.open(a,"InterMap","location=no, toolbar=no, directories=no, status=no, menubar=no, scrollbars=yes, resizable=yes, width=800, height=600")
		msgWindow.focus()
	}

// Forms
	function goSubmit(form_name) {
		document.forms[form_name].submit();
	}

	function goReset(form_name)
	{
		document.forms[form_name].reset();
	}

	function entSub(form_name) {
		if (window.event && window.event.keyCode == 13)
			goSubmit(form_name);
		else
			return true;
	}
    
// Navigation
	function goBack()
	{
		history.back();
	}

	function processCancel() {
		document.close();
	}

	function load(url)
	{
		document.location.href = url;
	}

	function doConfirm(url, message)
	{
		if(confirm(message))
		{
			load(url);
			return true;
		}
		return false;
	}

	function feedbackSubmit()
	{
		var form = $('feedbackf');
		if (isWhitespace(form.comments.value)) {
			form.comments.value = 'No comment';
		}

		if (isWhitespace(form.name.value) || isWhitespace(form.org.value)) {
			alert("Please fill in a Name or Organization");
			return;
		} else if (!isEmail(form.email.value)) {
			alert("Please fill correct E-mail Address");
			return;
		} 

		Modalbox.show(getGNServiceURL('file.download'),{height: 400, width: 600, params: Form.serialize('feedbackf')});
	}

	function doDownload(id, all) {
		var list = $('downloadlist').getElementsByTagName('INPUT');
		var pars = '&id='+id+'&access=private';

		var selected = false;
		for (var i=0; i<list.length; i++) {
			if (list[i].checked || all != null) {
				selected = true;
				var name = list[i].getAttribute('name');
				pars += '&fname='+name;
			}
		}

		if (!selected) {
			alert("You'd better select at least one file to download!");
			return;
		}

		Modalbox.show(getGNServiceURL('file.disclaimer') + "?" + pars, {height: 400, width: 600});
	}

	function massiveOperation(service, title, width, message)
	{

		if (message != null) {
			if(!confirm(message))
				return;
		}

		var url = Env.locService +'/' + service;
		Modalbox.show(url,{title: title, width: width, afterHide: function() { $('search-results-content').hide();}});
	}

/**********************************************************
***
***		SELECT ACTIONS
***
**********************************************************/

	function oActionsInit(name,id) {
   if (id === undefined) {
     id = "";
   }
   $(name+'Ele'+id).style.width = $(name+id).getWidth();
   $(name+'Ele'+id).style.top = $(name+id).positionedOffset().top + $(name+id).getHeight();
   $(name+'Ele'+id).style.left = $(name+id).positionedOffset().left;
	}

	function oActions(name,id) {
		if (id === undefined) {
			id = "";
  	}
		if (!$(name+'Ele'+id).style.top)
			oActionsInit (name, id);

  	if ($(name+'Ele'+id).style.display == 'none') {
    	$(name+'Ele'+id).style.display = 'block';
    	$(name+'Img'+id).src = off;
  	} else {
    	$(name+'Ele'+id).style.display = 'none';
    	$(name+'Img'+id).src = on;
  	}
	}

	function actionOnSelect(msg) {
		if ($('nbselected').innerHTML == 0 && $('oAcOsEle').style.display == 'none') {
			alert(msg);
		} else {
			oActions('oAcOs');
		}
	}

 	/*
   *Check and uncheck selected things
   */
	function check(selectdiv) {
		var checks = $(selectdiv).getElementsByTagName('INPUT');
		var checksLength = checks.length;				
		for (var i = 0; i < checksLength; i++) {
			checks[i].checked = true;
		}
	}

	function uncheck(selectdiv) {
		var checks = $(selectdiv).getElementsByTagName('INPUT');
		var checksLength = checks.length;				
		for (var i = 0; i < checksLength; i++) {
			checks[i].checked = false;
		}
	}

	function selectobject(service, selectdiv, id, selected){
		var param = 'id='+id+'&selected='+selected;
		var http = new Ajax.Request(
    	getGNServiceURL(service), 
			{
				method: 'get',
				parameters: param,
				onComplete: function(originalRequest){
					// console.log('onComplete');
				},
				onLoaded: function(originalRequest){
					// console.log('onLoaded');
				},
				onSuccess: function(originalRequest){
					var xmlString = originalRequest.responseText;
					
					// convert the string to an XML object
					var xmlobject = (new DOMParser()).parseFromString(xmlString, "text/xml");
					// get the XML root item
					var root = xmlobject.getElementsByTagName('response')[0];
					var nbSelected = root.getElementsByTagName('Selected')[0].firstChild.nodeValue;
					var item = document.getElementById('nbselected');
					item.innerHTML = nbSelected;
			},
			onFailure: function(originalRequest){
				alert('ERROR JAVASCRIPT '+service);
			}
		});
		if (selected=='none') {
			uncheck(selectdiv);
		};
		if (selected=='all') {
			check(selectdiv);
		};
	}

/**********************************************************
***
***		BANNER MENU ACTIONS INCLUDING LOGIN/LOGOUT
***
**********************************************************/

	var viewEdit,adminWindow;

	function doBannerButton(url, title, width)
	{
		Modalbox.show(url,{title: title, width: width});
		return true;
	}

	// Same as doBannerButton but afterhide we close adminWindow 
	function doAdminBannerButton(url, title, width)
	{
		Modalbox.show(url,{title: title, width: width, afterHide: function() { if (adminWindow) adminWindow.close(); }});
		return true;
	}

	function getEditing() {
		if (!viewEdit) // viewEdit doesn't exist so can't be editing
			return false;
		else if (viewEdit && viewEdit.closed) // viewEdit window closed 
			return false;
			
		if (viewEdit.$('editForm')) // viewEdit and editForm active so editing 
			return true;
		else // not editing
			return false;
	}

	function checkEditing() {
	  var editing = getEditing();
		if (editing && editing != '') {
			return true;
		} else {
			return false;
		}
	}

	function popAdminWindow(a)
	{
			
		adminWindow=window.open(a,"AdminWindow","location=no, toolbar=no, directories=no, status=no, menubar=no, scrollbars=yes, resizable=yes, width=800, height=600")
		adminWindow.focus()
	}

	function popEditorViewer(a)
	{
		if (checkEditing()) {
			alert(i18n('editorInUse'));
		} else {
			viewEdit=window.open(a,"MetadataEditorViewer","location=no, toolbar=no, directories=no, status=no, menubar=no, scrollbars=yes, resizable=yes, width=800, height=600")
		}
		viewEdit.focus()
	}

	function checkReset() {
		if (!checkEditing()) {
			if (confirm(i18n('resetWarning'))) {
				if (viewEdit) viewEdit.close();
				return true;
			}
		} else {
			alert(i18n('editorInUse'));
			viewEdit.focus()
		}
		return false;
	}
	
	function doLogout(action) {
		if (!checkEditing()) {
			if (viewEdit) viewEdit.close(); // if not editing close
			goSubmit(action);
			return true;
		} else {
			alert(i18n('editorInUse'));
			viewEdit.focus()
			return false;
		}
	}

	function doLogin(action) {
		if (viewEdit) viewEdit.close(); // close because permissions change
		goSubmit(action);
		return true;
	}

	/*
   * Update the featureMap/recent additions if on simple search tab
   */
	function gn_updateRecentAdditions() 
	{
		timeval = setTimeout('doUpdateRecentAdditions()',200);
	}

	function doUpdateRecentAdditions()
	{

		clearNode('featuredMap');
		var myAjax = new Ajax.Updater(
			'featuredMap',
			getGNServiceURL('metadata.recent.additions.embedded'), 
			{
				method: 'get',
				onComplete: function() {},
				onFailure: function(req) {
					alert("ERROR: get recent additions failed: "+req.responseText);
				}
			}
		);
	}
		
/**********************************************************
***
***		USER-REGISTRATION ACTIONS
***
**********************************************************/

	function processRegSub(url)
	{
		// check start
		var invalid = " "; // Invalid character is a space
		var minLength = 6; // Minimum length
            
		if (document.userregisterform.name.value.length == 0) {
			alert(i18n('firstNameMandatory'));
			return;
		} 
		if (isWhitespace(document.userregisterform.name.value)) {
			alert(i18n('firstNameMandatory'));
			return;
		}    
		if (document.userregisterform.name.value.indexOf(invalid) > -1) {
			alert(i18n('spacesNot'));
			return;
		}	
			
		if (document.userregisterform.surname.value.length == 0) {
			alert(i18n('lastNameMandatory'));
			return;
		}  
		if (isWhitespace(document.userregisterform.surname.value)) {
			alert(i18n('lastNameMandatory'));
			return;
		}
		if (document.userregisterform.surname.value.indexOf(invalid) > -1) {
			alert(i18n('spacesNot'));
			return;
		}
			
		if (!isEmail(document.userregisterform.email.value)) {
			alert(i18n('emailAddressInvalid'));
			return;
		}
			
		var myAjax = new Ajax.Request(
			getGNServiceURL(url), 
				{
					method: 'post',
					parameters: $('userregisterform').serialize(true), 
						onSuccess: function(req) {
            	var output = req.responseText;
        			Modalbox.show(output,{title: "Your registration..", width: 300});
						},
						onFailure: function(req) {
            	alert("ERROR: registration failed: "+req.responseText+" status: "+req.status+" - Try again later?");
						}
				}
		);
	}
		
/**********************************************************
***
***	FEEDBACK ACTIONS	
***
**********************************************************/
       			
	function processFeedbackSubmit(url) {

		if (isWhitespace(document.feedbackf.name.value) || isWhitespace(document.feedbackf.org.value)) {
			alert("Please fill in a Name or Organization");
			return false;
		} else if (!isEmail(document.feedbackf.email.value)) {
			alert("Please fill correct E-mail Address");
			return false;
		}

		var myAjax = new Ajax.Request(
			getGNServiceURL(url), 
				{
					method: 'post',
					parameters: $('feedbackf').serialize(true),
					onSuccess: function(req) {
						var output = req.responseText;
    				Modalbox.show(output,{title: "Thanks...", width: 300});
					},
					onFailure: function(req) {
						alert("ERROR: submit feedback failed: "+req.responseText+" status: "+req.status+" - Try again later?");
					}
				}
			);


    }
