var invalidsession=false;

function huh(){  // for debugging
	alert('huh?');
}

function validatefloat(event){
	var field=$(eventsrc(event));
	field.value=$F(field).gsub(',','.').strip();
	if(field.blank){return(true);}
	var regexp;
	regexp=field.hasClassName('cannegative')?
		'^(-)?\\d+(\\.\\d+)?(e(-)?\\d+)?$':
		'^\\d+(\\.\\d+)?(e(-)?\\d+)?$';
	//regexp='^\\d+\\.\\d+';
	var re=new RegExp(regexp);
	//alert('>'+$F(field)+'|'+regexp+'<');
	if(!field.value.match(re)){
		alert('Ugyldig tall');
		field.focus;
		return(false);
	}
}

function get_subitems(id,table,param){
	if (table=='contract'){
		param.set('contacts',"project");
	}
	param.set('id',id);
	param.set("table",table);
	
	var myAjax=new Ajax.Request(url,
		{
			method:'get',
			parameters: param.toQueryString(),
			onComplete: hHR_getsubitems
		});
} 


function hHR_inserttablerow(response){
	defaulttablename='datatable';
//	alert(response.responseText);
	error=$('error');
	statusmsg('Loading...');
	hiddenFields= new Array('id','addby','addtime');
	//alert("hidden:"+toString(hiddenFields));
	var xmlDocument = response.responseXML;
	if(xmlDocument.getElementsByTagName('error')[0].firstChild.data != '0'){
		handleServerError(xmlDocument.getElementsByTagName('error')[0].firstChild.data);
	}else{ // no error (as far as the server knows)
		clearerror();
		var tablename;
		if ($(defaulttablename)){
			tablename=defaulttablename;
		}else{
			table=xmlDocument.getElementsByTagName('table')[0].firstChild.data;
			tablename='subform_'+table;
		}
		var items = xmlDocument.getElementsByTagName('items');
		var rowid=0;
		var newrow;
		
		/*
		Has to define the row where the new data are to go
		Either rowid is defined and it already exists :
		*/
		try{ 
			rowid=xmlDocument.getElementsByTagName('rowid')[0].firstChild.data;
			//alert(rowid);
			if (rowid<1){
				// This really should not happen...
				throw('norowid');
			}
			newrow=$('sub_'+table+'_'+rowid);
			// Clean out the old childnodes
			$A(newrow.childNodes).each(function(node){
				newrow.removeChild(node);
			});
		}
		/*
		or we need to create a new row
		*/ 
		catch(e){ // New row defined 
			newrow=document.createElement('tr');
			id=xmlDocument.getElementsByTagName('id')[0].firstChild.data;
			newrow.id='sub_'+table+'_'+id;
			newrow.onclick=editrow;
		}
		if (tablename != defaulttablename){
			var newcell=document.createElement('td');
			var celltext=document.createTextNode(' ');
			newcell.appendChild(celltext);
			newrow.appendChild(newcell);
		}
		for ( j=0;j<items[0].childNodes.length;j++)
		{	
			node=items[0].childNodes[j];
			if (node.nodeType != 1) continue;
			if(node.nodeName == 'item')
			{
				var name=node.firstChild?node.firstChild.data:' ';
				status.innerHTML=name;
				var field=node.getAttribute('field');
				var t=queryparam('t');
				if ( field == 'id' || field=='addtime' || field == 'addby' || field==t+'id'){ //in hiddenFields){
				//	alert('hidden: '+field);
				}else{
					var newcell=document.createElement('td');
					var celltext=document.createTextNode(name);
					newcell.appendChild(celltext);
					newrow.appendChild(newcell);		
				}
			}
		}
		// marks the new row so that it cannot be overlooked
		newrow.onclick=editrow;
		newrow.className='ok';
		table=$(tablename);
		body=table.getElementsByTagName('tbody')[0];
		body.getElementsByClassName('ok').each(function(tr){
			tr.removeClassName('ok');
		});
		var skiprow=0; // numbers of rows to skip before the row can be inserted
		if(body.getElementsByTagName('th').length) skiprow+=1;
		if(body.getElementsByTagName('select').length) skiprow+=1;
		try{
			if (body.childNodes[skiprow].nodeType != 1) skiprow+1;
			row=body.childNodes[skiprow];
			body.insertBefore(newrow,row);
		//	row.firstSibling.className='';
		}catch(e)
		{
			//alert(e);
			body.appendChild(newrow);
		}
		status.innerHTML='&nbsp;';
		var typevalue=$H({
			'input':'',
			'select':'---'});
		typevalue.keys().each(function(type){
			var inputs=body.getElementsByTagName(type);
			for (var i=0; i< inputs.length; i++){
				name=inputs[i].name;
				if (name.substring(0,2)!='__' && inputs[i].type != 'submit')
				{
					inputs[i].value=typevalue[type];
				}
			}
		});
	}
}
	


function queryparam(param){
	param=param.replace(/[\[]/,"\\\[").replace(/[\]]/,"\\\]");
	var regexS="[\\?&]"+param+"=([^&#]*)";
	var regex=new RegExp(regexS);
	var results=regex.exec(window.location.href);
	if (results == null)
		return "";
	else
		return results[1];
}


function isNumeric(strString)
   //  check for valid numeric strings	
   {
   strString.replace(',','.');
   var strValidChars = "0123456789.-";
   var strChar;
   var blnResult = true;

   if (strString.length == 0) return false;

   //  test strString consists of valid characters listed above
   for (i = 0; i < strString.length && blnResult == true; i++)
      {
      strChar = strString.charAt(i);
      if (strValidChars.indexOf(strChar) == -1)
         {
         blnResult = false;
         }
      }
   return blnResult;
   }

function winevent(event){
	if (typeof event == 'undefined'){
		event=window.event;
	}
	return event;
}


function handleServerError(errormsg){
	if(errormsg =='invalid session' && !invalidsession){
		alert("Ugyldig sesjon\n Logg deg av og på igjen");
		invalidsession=true;
	}else{
		var error=$('error');
		error.className="failed";
		error.innerHTML=errormsg;
		statusmsg('');
	}	
}

function statusmsg(text){
	window.status=text;
}

function setselect(select,idx){
	var sel=$(select);
	for (var i=0;i<sel.length;i++){
		if(sel[i].value == idx){
			sel.selectedIndex = i;
			i=sel.length;
		}
	}
}

function hHR_populatedialog(response){
	statusmsg('Loading updates...');
	var xmlDocument = response.responseXML;
	//alert(response.responseText);
	if(xmlDocument.getElementsByTagName('error')[0].firstChild.data != '0'){
		handleServerError(xmlDocument.getElementsByTagName('error')[0].firstChild.data);
	}else{ // no error (as far as the server knows)
		clearerror();
		var items = xmlDocument.getElementsByTagName('items');
		var dialogname =xmlDocument.getElementsByTagName('sb')[0].firstChild.data;
		if (items[0].childNodes.length == 0){
			// alert('Det finnes ingen data for '+dialogname);
		}
		//alert('dlgname '+dialogname);
		populate_dialog($(dialogname),items);
		statusmsg('OK');
	}
}


function populate_dialog(dialogbox,items){
	//alert('id'+dialogbox.id);  // DEBUG.js
	var value=dialogbox.value;
	dialogbox.options.length = 0;
	var idx=0;
	dialogbox.options[idx++]=new Option (' ','---'); 
	for (j=0;j<items[0].childNodes.length;j++)
	{	
		node=items[0].childNodes[j];
		if (node.nodeType != 1) continue;
		var id=node.getElementsByTagName('id')[0].firstChild.data;
		var name=node.getElementsByTagName('name')[0].firstChild.data;	
		dialogbox.options[idx++]=new Option (name,id); 
	}
	if (value != '---'){
		dialogbox.value=value;
	}
}


function eventsrc(event){
	event=winevent(event);
	return $(Event.element(event));
}


function visi(id) // switches visibility of an element
{
		vista = ($(id).style.visibility == 'hidden') ? 'visible' : 'hidden';
		$(id).style.visibility = vista;
}


function createtd(text,tr){
	//alert(text);
	var td=document.createElement('td');
	var textnode=document.createTextNode(text);
	td.appendChild(textnode);
	tr.appendChild(td);
}

function newtable(id){
	var table=document.createElement('table');
	table.id=id;
	table.appendChild(document.createElement('tbody'));
	return table;
}


function clearerror(){
	$('error').innerHTML='';
	$('error').removeClassName('failed');
}


function getradiovalue(name){
	var btns=$A(document.getElementsByName(name));
	var retval;
	btns.each(function(btn){
		//alert(btn.value);
		if (btn.checked){
			retval=btn.value;
		}
	});
	return retval;
}
