var IE = (navigator.appName == 'Microsoft Internet Explorer') ? true : false;
var xmlData;
var xmlRoot;
var curField;
var obsId;
var lanId;

function cancelQuery() {
	var url = '/portal/lib/ajax/cancel_query.php';
	var params = 'a=b';
	var xmlhttp2 = startxmlhttp();
	xmlhttp2.open('POST', url, true);
	
	// send the proper header information along with the request
  xmlhttp2.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
  xmlhttp2.setRequestHeader('Content-length', params.length);
  xmlhttp2.setRequestHeader('Connection', 'close');
	
  xmlhttp2.onreadystatechange = function() {
	  if ((xmlhttp2.readyState == 4) && (xmlhttp2.status == 200)) {
	  	var result = xmlhttp2.responseText;
	  	if (result == 'true') {
	  		alert('Vraag afgebroken');
	  	}
	  }
	};
	xmlhttp2.send(params);
}

function changeList() {
	// refresh list with recent observations
	var dayvalue = document.getElementById('daylist').options[document.getElementById('daylist').selectedIndex].value;
	var regionvalue
	if (document.getElementById('regid').typeOf == 'select-one') {
		regionvalue = document.getElementById('regid').options[document.getElementById('regid').selectedIndex].value;
	} else{
		regionvalue = document.getElementById('regid').value;
	}
	var taxgrpidvalue = document.getElementById('taxgrpid').value;
	var url = '/portal/lib/ajax/getlist.php';
	var params = 'day=' +  dayvalue;
	params += '&regid=' + regionvalue;
	params += '&taxgrpid=' + taxgrpidvalue;
	
	document.getElementById('listdiv').innerHTML = getWaitimage(16);
	
	var xmlhttp = startxmlhttp();
	xmlhttp.open('POST', url, true);
	
	// send the proper header information along with the request
  xmlhttp.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
  xmlhttp.setRequestHeader('Content-length', params.length);
  xmlhttp.setRequestHeader('Connection', 'close');
	
  xmlhttp.onreadystatechange = function() {
	  if ((xmlhttp.readyState == 4) && (xmlhttp.status == 200)) {
	  	var result = xmlhttp.responseText;
	  	document.getElementById('listdiv').innerHTML = result;
	  }
	};
	xmlhttp.send(params);
}

function changeListgroup(p_taxgrpid) {
	document.getElementById('taxgrpid').value = p_taxgrpid;
	changeList();
}

function changeProject() {
	if (!document.getElementById('projectsgroup')) {
		return;
	}
	var folidvalue = getRadiovalue(document.projectsform.projectsgroup);
	if (folidvalue == undefined) {
		alert('Geen waarde gevonden');
		return;
	}
	
	showMessage('Even geduld a.u.b., het project wordt geselecteerd.', 'message', 2000, 'projectmessage');
	
	var url = '/portal/lib/ajax/change_selected_project.php';
  var params = 'folid=' + folidvalue;
  var xmlhttp = startxmlhttp();
  xmlhttp.open('POST', url, true);
	
  // send the proper header information along with the request
  xmlhttp.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
  xmlhttp.setRequestHeader('Content-length', params.length);
  xmlhttp.setRequestHeader('Connection', 'close');
	
  xmlhttp.onreadystatechange = function() {
	  if ((xmlhttp.readyState == 4) && (xmlhttp.status == 200)) {
	  	var result = xmlhttp.responseText;
	  	var projecttext = document.getElementById('projectspan' + folidvalue) ? document.getElementById('projectspan' + folidvalue).innerHTML : '';
	    if (result.substring(0, 5) == 'error') {
	    	alert('Selecteren project ' + projecttext + ' mislukt.');
	    } else {
	    	var messagetext = 'Project ' + projecttext + ' geselecteerd.';
	    	showMessage(messagetext, 'message', 2000, 'projectmessage');
	    }
	  }
	};
	xmlhttp.send(params);
}

function checkKeyup(e) {
	// checks for press on enter key to submit login form
	var toetscode;
	if (IE) {
		toetscode = event.keyCode;
  } else {
  	toetscode = e.which;
  }

  if (toetscode == 13) {         // enter
  	// submit form
  	submitLoginform();
  }
}

function ensureScriptIsLoaded(name, src) {
	// test if script is loaded (by name). if not load script (src) in head section
  if (document.getElementById('script_' + name)) {    // already exists
    return true;
  }
  var head = document.getElementsByTagName('head')[0];
  var script = document.createElement('script');
  script.id = 'script_' + name;
  script.type = 'text/javascript';
  if (src.indexOf('http') == 0) {	// script starts with http
    script.src = src;
  } else {
    script.src = '/portal/js/' + src;
  }  
  head.appendChild(script);
  return false;
}

function getElementvalue(p_elementid, p_defaultvalue, p_min, p_max) {
	if (document.getElementById(p_elementid)) {
		var f_returnvalue = document.getElementById(p_elementid).value.replace(/^[0]+/g,"");
		if (f_returnvalue == '') {
			return p_defaultvalue;
		}
		if (typeof(p_defaultvalue) == 'number') {
			//alert(f_returnvalue);
		  f_returnvalue = parseInt(f_returnvalue);

		  //alert(typeof(f_returnvalue));
		  if (isNaN(f_returnvalue)) {
		  	return -1;
		  }
		}
		if ((f_returnvalue < p_min) || (f_returnvalue > p_max)) {
			return -1;
	  } else {
		  return f_returnvalue;
	  }
	} else {
	  return p_defaultvalue;
	}
}


// document functions:
function setNodevaluebyid(id, value) {
  node = document.getElementById('margin');
  if (node) node.value = value;
}

function setElementvalue(p_elementid, p_value) {
	if (document.getElementById(p_elementid)) {
		document.getElementById(p_elementid).value = p_value;
	}
}


function getElementtext(p_elementid, p_defaultvalue) {
  if (document.getElementById(p_elementid)) {
		return document.getElementById(p_elementid).value;
  } else {
    return p_defaultvalue;
  }
}


function getPhrase(key) {
	////////////////  translation phrases ////////////////////////////
  return phrar[key] ? phrar[key] : key;
}

function getRadiovalue(el) {  // call with el = document.formname.radioname
	if (el) {
		for (var i = 0; i < el.length; i++) {
			if (el[i].checked == true) {
				return el[i].value;
			}
		}
	}
	return false;
}

function getRadiovalue2(p_elementid) {	// call with element-id: getRadiovalue2('scientificnames')
	var f_elements = document.getElementsByName(p_elementid);
	if (f_elements.length > 0) {
		for (var i = 0; i < f_elements.length; i++) {
			if (f_elements[i].checked == true) {
				return f_elements[i].value;
			}
		}
	}
	return false;
}

function getRadiovalue3(p_elementid, p_default) {	// call with element-id: getRadiovalue3('scientificnames')
	var f_elements = document.getElementsByName(p_elementid);
	if (f_elements.length > 0) {
		for (var i = 0; i < f_elements.length; i++) {
			if (f_elements[i].checked == true) {
				return f_elements[i].value;
			}
		}
	}
	return p_default;
}

function isNumeric(p_strValue) {
	var strValidchars = '0123456789.,';
 
  for (var i = 0; i < p_strValue.length; i++) {
    if (strValidchars.indexOf(p_strValue.charAt(i)) == -1) {
      return false;
    }
	}
	return true;
}

function is_integer(p_strValue) {
	var strValidchars = '0123456789';
 
  for (var i = 0; i < p_strValue.length; i++) {
    if (strValidchars.indexOf(p_strValue.charAt(i)) == -1) {
      return false;
    }
	}
	return true;
}

function isNumber(n) {
  return !isNaN(parseFloat(n)) && isFinite(n);
}


function setFocus(p_element) {
	document.getElementById(p_element).focus();
	document.getElementById(p_element).select();
}

function setRadiovalue(el, p_value) {  // call with el = document.formname.radioname
	if (el) {
		for (var i = 0; i < el.length; i++) {
			if (el[i].value == p_value) {
				el[i].checked = true;
				return;
			}
		}
	}
}

function setScripturl(str) {
	// get script load commands from html.  [[script|script_taxon|form_taxon_js.php]]
  
  var pStart = str.indexOf('[[script|');     // find start script load command 
  while (pStart > -1) {
    var pName = pStart + 9;                       // start script name
    var pSrc =  str.indexOf('|', pName) + 1;      // start script src 
    var pEnd =  str.indexOf(']]', pStart);        // end script command 
    
    var sName = str.substr(pName, pSrc - pName - 1);      // script name
    var sSrc  = str.substr(pSrc, pEnd - pSrc);           // script src

    ensureScriptIsLoaded(sName, sSrc);        // load script
   
    pStart = str.indexOf('[[script|',pEnd);   // find next start script load command 
  }
}

function setSelectvalue(p_element, p_value) {
	if (!document.getElementById(p_element)) {
		return;
	}
	for (var i = 0; i < document.getElementById(p_element).options.length; i++) {
		if (document.getElementById(p_element).options[i].value == p_value) {
			document.getElementById(p_element).selectedIndex = i;
			return;
		}
	}
}

function getSelectvalue(p_element) {
  if (!document.getElementById(p_element)) return '';
	
  var index = document.getElementById(p_element).selectedIndex;
  return document.getElementById(p_element).options[index].value;
}

function getSelectvalue2(p_element, p_default) {
  if (!document.getElementById(p_element)) return p_default;
	
  var index = document.getElementById(p_element).selectedIndex;
  var value = document.getElementById(p_element).options[index].value;
  
  if (value != '') {
  	return value;
  } else {
  	return p_default;
  }
}

function getCheckboxchecked(p_element) {
	if (!document.getElementById(p_element)) return false;
	
	if (document.getElementById(p_element).checked) {
		return true;
	} else {
		return false;
	}
}

function showPicture(dir, m, y, name) {
	// shows full picture in largeimagespan
  var filename = dir + y + '/' + m + '/' + name;
  document.getElementById('largeimagespan').innerHTML = '<img src="' + filename + '" />';
}

function startxmlhttp() {
	var xmlhttp = false;
	/*@cc_on @*/
	/*@if (@_jscript_version >= 5)
	// JScript gives us Conditional compilation, we can cope with old IE versions.
	// and security blocked creation of the objects.
	try {
	 	xmlhttp = new ActiveXObject('Msxml2.XMLHTTP');
	} catch (e) {
	  try {
	   	xmlhttp = new ActiveXObject('Microsoft.XMLHTTP');
	  } catch (E) {
	   	xmlhttp = false;
	  }
	}
	@end @*/
	if (!xmlhttp && typeof XMLHttpRequest != 'undefined') {
		try {
			xmlhttp = new XMLHttpRequest();
		} catch (e) {
			xmlhttp = false;
		}
	}
	if (!xmlhttp && window.createRequest) {
		try {
			xmlhttp = window.createRequest();
		} catch (e) {
			xmlhttp = false;
		}
	}
  return xmlhttp;
}

function strtoint(p_value, p_default) {	// convert string to integer
	if ((p_value == '') || (parseInt(p_value) == 'NaN')) {
		return p_default;
	} else {
		return p_value * 1;
	}
}

function submitLoginform() {
	// check and submit login form
	var userel = document.getElementById('us_login');
	var passwordel = document.getElementById('us_password');
	if ((userel.value == '') && (passwordel.value != '')) {
		alert('geen gebruikersnaam ingevuld');
	} else if ((userel.value != '') && (passwordel.value == '')) {
		alert('geen wachtwoord ingevuld');
	} else if ((userel.value != '') && (passwordel.value != '')) {
		if (!isIllegal(userel.value)) {
			document.getElementById('user_login').submit();
		} else {
			alert('ongeldige tekens in het veld loginnaam');
		}
	}
}

function trim(value) {
  value = value.replace(/^\s+/, '');
  value = value.replace(/\s+$/, '');
  return value;
}

function isIllegal(p_username) {
	var ar_illegal = new Array("<", ">", ";");
	for (var i = 0; i < ar_illegal.length; i++) {
		if (p_username.indexOf(ar_illegal[i]) >= 0) {
			return true;
		}
	}
	return false;
}

function pad(number, length) {
    var str = '' + number;
    while (str.length < length) {
        str = '0' + str;
    }
    return str;
}


////////////////  XML functions ////////////////////////////

function XMLToString(oXML) {
  if (window.ActiveXObject) {
    return oXML.xml;
  } else {
    return (new XMLSerializer()).serializeToString(oXML);
  }
}

function convertAtt(node, att, standard, name) {
	// convert attribute to text (name = value)
  return ' ' + name + '="' + readAtt(node, att, standard) + '"';
}

function getFormXML(element_id) {
  if (element_id == undefined) element_id = 'formxml';
  // get xml form data
  if (document.getElementById(element_id)) {
    var xmlvalue = document.getElementById(element_id).value;

    if (xmlvalue != '') {   		// convert the string to an XML object
      if (IE) {
        xmlData = new ActiveXObject('Microsoft.XMLDOM');
        xmlData.async = 'false';
        xmlData.loadXML(xmlvalue);
      }	else {
        xmlData = (new DOMParser()).parseFromString(xmlvalue, 'text/xml');
      }
      xmlRoot = xmlData.documentElement;  // root node...
    obsId = readAtt(xmlRoot, 'id', 0);          // get observation-id...
    lanId = readAtt(xmlRoot, 'lanid', 112345);  // get language-id...
    }
  }
}

function readAtt(node, att, standard) {
	// read attribute from node
  return (node.getAttribute(att) == null) ? standard : node.getAttribute(att);
}

// read attribute from childnode
function readChildnodeatt(node, tag, att, standard) {
	if (node.getElementsByTagName(tag).length > 0) {
		var child = node.getElementsByTagName(tag)[0];  // see if node exists
	  if (child != null) {                            // yes:
	    return (child.getAttribute(att) == null) ? standard : child.getAttribute(att);
	  } else {
	    return standard;
	  }
  } else {
  	return standard;
  }
}

// read value from childnode
function readChildnodevalue(node, tag, standard) {
  var value = standard;
  var child = node.getElementsByTagName(tag)[0];  // see if node exists
  if (child != null) {                            // yes:
    if (child.childNodes.length > 0) {
      value = child.childNodes[0].nodeValue;
    }
  }
  return value;
}  

function writeAtt(node, att, value, standard) {
	// write or clear attribute
  if (value == '') {
  	value = standard;
  }
  if (value != '') {
    if (value == '-') {                   // clear attribute
      node.setAttribute(att, '');
    } else {
      node.setAttribute(att, value);
    }
  } else {                              // delete attribute
    if (node.getAttribute(att) != null) {
    	node.removeAttribute(att);
    }
  }
}

function writeNode(node, tag, value) {
	// add or remove childnode (given tag-name and value):
	doc = node.ownerDocument;           // add childnode
  var child = node.getElementsByTagName(tag)[0];  // see if node already exists
  if (child != null) {                            // yes:
    if (child.childNodes.length > 0) {
     	child.childNodes[0].nodeValue = value;
    } else {
     	textnode = doc.createTextNode(value);
     	child.appendChild(textnode);
    }
  } else {                                        // childnode doesnt exist yet:
  	child = doc.createElement(tag);         // add childnode
    node.appendChild(child);
    if (value != '') {
      textnode = doc.createTextNode(value);
      child.appendChild(textnode);
    }
  }
}

// add or remove childnode (given tag-name and value):
function addNode(node, tag) {
  var child = node.getElementsByTagName(tag)[0];  // see if node already exists
  if (child == null) {                            // yes:
    doc = node.ownerDocument;           // add childnode
    child = doc.createElement(tag);           // add childnode
    node.appendChild(child);
  }
  return child;
}

// adds new childnode with id attribute.
function addNewnode(node, tag, id) {
  var doc = node.ownerDocument;           // add childnode
  var child = doc.createElement(tag);           // add childnode
  node.appendChild(child);
  child.setAttribute('id',id);
  return child;
}


function findNodebyelementid(node, tag, id) {
	// find childnode with given id:
  if (node == null) return null;
  if (node.childNodes.length > 0) {
    var childnodes = node.getElementsByTagName(tag);
    for (var i = 0; i < childnodes.length; i++) {
      if (childnodes[i].getAttribute('id') == id) {
        return childnodes[i];
        break;
      }
    }
  } else {
    return null;
  }
}





////////////////////  message functions ///////////////////////////////////

function hideMessage(divname) {
  if (document.getElementById(divname)) {
    document.getElementById(divname).innerHTML = '';
    document.getElementById(divname).className = 'message';
  }
}

function showMessage(messagetext, cname, wait, divname) {
  if (messagetext == '') return;     // don't show empty messages
  if (wait == null) wait = 5000;       // default display time
  if (wait < 500) wait = wait * 1000 // convert second to milliseconds
  if (cname == null) cname = '';      // style to use ('message', 'error', 'help', 'confirm?')
  if (divname == undefined) divname = 'messagediv';
  if (wait == -1) {
    wait = 60000;

   messagetext +=  '<a href="hideMessage();">'+'sluiten'+'</a>';
  }
  if (document.getElementById(divname)) {
    document.getElementById(divname).innerHTML = messagetext;
    document.getElementById(divname).className = cname;
    if (wait > 0) var m_iInterval = setTimeout("hideMessage('" + divname + "');", wait);
  }
}

///////////////////////  form-field functions:

function findField(fldid) {
	// find certain field (node) by Id in data xml
  var curField = xmlRoot.getElementsByTagName('f' + fldid)[0];
  if (curField != null) {
    return 1;
  } else {
  	return 0;
  }
}

function getFielddescription(field, item, span) {
	// get text for field item, given field-id and item-id, put in span
  var pagina = 'lib/forms/fieldinfo.php?fld=' + field + '&itm=' + item;
  var xmlhttp = startxmlhttp();    // Creating the AJAX object
  xmlhttp.open('GET', pagina, true);
  xmlhttp.onreadystatechange = function() {
    if (xmlhttp.readyState == 4) {
      document.getElementById(span).innerHTML = xmlhttp.responseText;
    }
  }
  xmlhttp.send(null);
}

function getFieldvalue(field, value) {
	// get value for certain field (value input is default value)
  return (findField(field)==1) ? readAtt(curField, 'val', value) : 0;
}

//////////////////////////////  hide / show / clear div's and spans: ////////////////////

function clearSpan(_w) {
  var element = document.getElementById(_w);
  if (element) {
    element.innerHTML = '';
    return true;
  } else {
  	return false;
  }
}

function getPage(pagina, target) {
	// get a certain page, and paste it in div 'target'
  var xmlhttp = startxmlhttp();               // Creating the AJAX object
  xmlhttp.open('GET', pagina, true);
  xmlhttp.onreadystatechange = function() {
    if (xmlhttp.readyState == 4) {
      document.getElementById(target).innerHTML = xmlhttp.responseText;
    }
  }
  xmlhttp.send(null); 
}

function getWaitimage(size) {
	// available sizes: 16-30, only even numbers
	if (size < 16) {
		size = 16;
	}
	if (size > 30) {
		size = 30;
	}
	if (size % 2 > 0) {
		size -= 1;
	}
	
	var result = '<img src="/layout/gfx/wait' + size + 'trans.gif" title="even geduld a.u.b." alt="even geduld a.u.b." />';
	return result;
}

function toggleBool(_element,show) {
  (show) ? toggleDiv(_element,'s') : toggleDiv(_element,'h');
}

function toggleDiv(_element, _action) {
	// show or hide div element
	var action;
	var element = document.getElementById(_element);
	if (element) {
		action = ((_action == '') || (_action == '?')) ? ((element.style.display == 'inline') ? 'h' : 's') : _action;
		if (action == 's') {
			element.style.display = 'inline';
		} else {
			element.style.display = 'none';
		}
	}
	if (_action == '?') {
		return action;
	}
}

function toggleDiv2(divid, linkid, _action, texton, textoff) {
	// show or hide div elements: action applies to element1, element2 gets opposite action
  var fielddiv = document.getElementById(divid);
  if (fielddiv) {
    if (_action=='s') fielddiv.style.display = 'inline';
    if (_action=='h') fielddiv.style.display = 'none';
    if (_action=='') {
      fielddiv.style.display = (fielddiv.style.display == 'inline') ? 'none' : 'inline';
    }
    if (linkid > 0) {
      var linediv = document.getElementById('linediv'+linkid);
      if (linediv) {
        linediv.style.display = (fielddiv.style.display == 'inline') ? 'none' : 'inline';
      }
    }
    var adiv = document.getElementById('adiv'+linkid);
    if (adiv) {
      adiv.innerHTML = (fielddiv.style.display == 'inline') ? textoff : texton;
    }
  }
}

function visibleDiv(divid) {
  var fielddiv = document.getElementById(divid);
  var result = 'h';
  if (fielddiv) {
    result = (fielddiv.style.display == 'inline') ? 's' : 'h';
  }
  return result;
}

function resizeIframe(p_frame_id) {
	// resizes iframe in parent to dimensions of document
	if (parent) {
		if (parent.document.getElementById(p_frame_id)) {
			// get document properties
			var docwidth = document.body.offsetWidth;
			var docheight = document.body.offsetHeight;
			parent.document.getElementById(p_frame_id).width = docwidth;
			parent.document.getElementById(p_frame_id).height = docheight;
		}
	}
}
