function checkFormatedKt(fKt) {
	var kt = new String(fKt);
	if(kt.length==11)
	{
		if(fKt.charAt(6)=='-')
		{
			kt = kt.replace(/-{1}/,"");
		}
	}
	return checkKt(kt);
}
function checkKt(Kt) {
	  var isok = true;
	  if (Kt != "") 
	  {
	    str_Kt = new String(Kt);
	    str_Ktclean = new String;
	    for(var i=0; i<str_Kt.length; i++) 
	    {
	      var t = parseInt(str_Kt.charAt(i),10);
	      if (!isNaN(t)) {
	        str_Ktclean += t;
	      }
	      else
	      {
	        isok = false;
	      }
	    }
	    var margf= new Array(3,2,7,6,5,4,3,2,1);
	    var summa = 0;
	    for (var i=0; i!=9; i++) 
	    {
	      summa = summa + (margf[i] * str_Ktclean.charAt(i));
	    }
	    isok = ((summa % 11) || (str_Ktclean.length != 10)) ? false : isok;
	  }
	  return isok;
	}
// tekur punkta, kommur og stafi úr innslætti
function kommupunkt_ut(tala)
{
    var ns = '';
    for(var i=0; i<tala.length; i++)
    {
    	var c = tala.charAt(i);
        switch(c)
        {
            case "," : ns += ".";break;
            case "." : break;
            default :  ns += c;
        }
    }
    var num = parseInt(ns,10);
    if(isNaN(num)){num = 0;}
    return num;
}
// bætir punktum og kommum við tölur
function punkt_inn(tala)
{
	var s = new String(Math.round(tala).toString());
	if(s==0)
		return "";
	var ns = '';
	for(i=0; i<s.length; i++)
	{
		ns = s.charAt(s.length-i-1) + ns;
	        if( (i%3 == 2) && (i<s.length-1))
	            ns = '.' + ns;
	}
	return ns;
}

function formatInput(input)
{
	if(input.value=="0") return;
	var val = kommupunkt_ut(input.value);
	val = punkt_inn(val);
	if(val!=input.value)
		input.value = val;
}
function trimString (str) {
  return str.replace(/^\s+/g, '').replace(/\s+$/g, '');
}
/********************* Dom util *******************************/
var domU = {
	add : function(el,tagName)
	{
		var newEl = document.createElement(tagName);
		el.appendChild(newEl);
		return newEl;
	},
	
	appendPopper : function(container,block)
	{
		domU.poppBlockOpened();
		container.appendChild(block);
	},
	
	removePopper : function(container,block)
	{
		domU.poppBlockClosed();
		container.removeChild(block);
	},
	
	poppBlockOpened : function()
	{
		if (navigator.appVersion.match(/\bMSIE\b/))
		{
			cssU.addClass(document.body,"hideselect");
		}
	},
	
	poppBlockClosed : function()
	{
		if (navigator.appVersion.match(/\bMSIE\b/))
		{
			cssU.removeClass(document.body,"hideselect");
		}
	},
	
	addInput : function(el,type)
	{
		var newEl = document.createElement("input");
		newEl.setAttribute("type",type);
		el.appendChild(newEl);
		return newEl;
	},

	addText : function(el,text)
	{
		var textEl = document.createTextNode(text);
		el.appendChild(textEl);
		return textEl;
	},
	
	addTh : function(row,text)
	{
		var th = document.createElement("th");
		domU.addText(th,text);
		row.appendChild(th);
		return th;
	},

	addTd : function(row,text)
	{
		var td = document.createElement("td");
		domU.addText(td,text);
		row.appendChild(td);
		return td;
	},
	
	insert : function(elm,newElm,below)
	{
		var container = elm.parentNode;
		var children = container.childNodes;
		var r = null;
		var found = false;
		var i=0;
		var elmsToMove = [];
		var j = 0;
		for(var i=0;r = children[i];i++)
		{
			if(r==elm)
			{
				found = true;
				if(below)
				{
					i = i + 1;
					r = children[i];
				}
				while(r)
				{
					elmsToMove[j] = r;
					j++;
					container.removeChild(r);
					r = children[i];
				}
			}
		}
		container.appendChild(newElm);
		for(j=0;j<elmsToMove.length;j++)
		{
			container.appendChild(elmsToMove[j]);
		}
	},

	getParent : function(el, pTagName) 
	{
		if (el == null) return null;
		else if (el.nodeType == 1 && el.tagName.toLowerCase() == pTagName.toLowerCase())	// Gecko bug, supposed to be uppercase
			return el;
		else
			return domU.getParent(el.parentNode, pTagName);
	},

	getInnerText : function(el) 
	{
		if (typeof el == "string") return el;
		if (typeof el == "undefined") { return "" };
		if (el.innerText) return el.innerText;	//Not needed but it is faster
		var str = "";
		
		var cs = el.childNodes;
		var l = cs.length;
		for (var i = 0; i < l; i++) {
			switch (cs[i].nodeType) {
				case 1: //ELEMENT_NODE
					str += domU.getInnerText(cs[i]);
					break;
				case 3:	//TEXT_NODE
					str += cs[i].nodeValue;
					break;
			}
		}
		return str;
	},
	
	setSelectedCol : function(tbl,selCol)
	{
		tbl = $(tbl);
		for (var j=0;j<tbl.rows.length;j++) 
	    { 
    		var row = tbl.rows[j];
    		for(var k=0;k<row.cells.length;k++)
    		{
    			if(k==selCol)DOM.addClass(row.cells[k],"highlight");
    			else DOM.removeClass(row.cells[k],"highlight");
    		}
	    }
	},
	
	getLinkBlock : function(link)
	{
		return $(link.href.replace(/^.*#(.+)$/,"$1"));
	}
	
};

/************* util ***************************/
tmUtil = {
		
	isInteger : function(s)
	{
		var i;

		if (tmUtil.isEmpty(s))
			if (isInteger.arguments.length == 1) return 0;
			else return (isInteger.arguments[1] == true);

		for (i = 0; i < s.length; i++)
		{
			var c = s.charAt(i);

			if (!tmUtil.isDigit(c)) return false;
		}

		return true;
	},

   isEmpty : function(s)
   {
		return ((s == null) || (s.length == 0))
   },

   isDigit : function(c)
   {
	   return ((c >= "0") && (c <= "9"))
   },
		
	escape : function(param)
	{
		param = escape(param);
		return param.replace(/\+/g,'%2B');
	},
	
	setSelectOnFocusForm : function(form)
	{
		var els = form.elements;
		var el = null;
		for(var i=0;el = els[i];i++)
		{
			if(el.type=="text") addEvent(el,"focus",function(){this.select();});
		}
	},
	ifChanged : function(inp,funcCall)
	{
		if(inp.value!=inp.defaultValue)
		{
			inp.defaultValue = inp.value;
			funcCall(inp.value);
		}
	},
	
	getSelectionStart : function(input)
	{
		if(document.selection && document.selection.createRange)
		{
			// The current selection 
			input.focus();
			var range = document.selection.createRange(); 
			// We'll use this as a 'dummy' 
			var stored_range = range.duplicate(); 
			// Select all text 
			stored_range.moveToElementText( input ); 
			// Now move 'dummy' end point to end point of original range 
			stored_range.setEndPoint( 'EndToEnd', range ); 
			// Now we can calculate start and end points 
			input.selectionStart = stored_range.text.length - range.text.length; 
			// ta.selectionEnd = ta.selectionStart + range.text.length; 
		}
		return input.selectionStart;
	},
	
	getCaretPos : function (el) 
	{
		if (typeof el.selectionStart != "undefined")
			return el.selectionStart;
		else if (document.selection)
			return Math.abs(document.selection.createRange().moveStart("character", -1000000));
	}
	
};
/********************** Table util *************************/
var tableUtil = {
	doMoveEvent : function(event,input)
	{
		input = input?input:this;
		if(event.keyCode==40)//move down
		{
			tableUtil.moveVerticalBy(input,1);
		}
		else if(event.keyCode==38)//move up
		{
			tableUtil.moveVerticalBy(input,-1);
		}
		if(event.keyCode==39)
		{
			if(input.lastStart==input.value.length || input.value.length==0)
			{
				tableUtil.moveHorizontalBy(input,1);
			}
		}
		if(event.keyCode==37)
		{
			if(input.lastStart==0  || input.value.length==0)
			{
				tableUtil.moveHorizontalBy(input,-1);
			}
		}
		input.lastStart = tmUtil.getCaretPos(input);
	},
	
	moveVerticalBy : function(input,move)
	{
			var tBody = input.parentNode.parentNode.parentNode;
			if(tBody.rows)
			{
				var ci = input.parentNode.cellIndex;
				var ri = input.parentNode.parentNode.rowIndex
				if(ci && ri && ri+move>=0 && tBody.rows.length>ri+move)
				{
					var nextInp = tBody.rows[ri+move].cells[ci].getElementsByTagName("INPUT")[0];
					if(nextInp)
					{
						nextInp.select();
						nextInp.focus();
					}
				}
			}
	},
	
	moveHorizontalBy : function(input,move)
	{
		var row = input.parentNode.parentNode;
		if(row.cells)
		{
			var ci = input.parentNode.cellIndex;
			if(ci+move>=0 && row.cells.length>ci+move)
			{
				var nextInp = null;
				var i = ci+move;
				while(nextInp==null && i<row.cells.length && i>=0)
				{
					var arr = row.cells[i].getElementsByTagName("INPUT");
					if(arr && arr.length>0)
					{
						nextInp = arr[0];
					}
					else if(move>0)i++;
					else i--;
				}
				if(nextInp)
				{
					nextInp.select();
					nextInp.focus();
				}
			}
		}
	},
	
	swapRows : function(rowI,rowJ)
	{
		var nextSibling = rowI.nextSibling;
		var parentNode = rowI.parentNode;
  		rowJ.parentNode.replaceChild(rowI, rowJ);
  		parentNode.insertBefore(rowJ, nextSibling);
	}
};
/********************** Tree table ***************************************/
var treeTable_ = {
	toggle : function (elm)
	{
	 	var tbl = domU.getParent(elm,"TABLE");
	 	var rows = tbl.getElementsByTagName("TR");
	 	var thisRow = domU.getParent(elm,"TR");
		cssU.toggleClass(thisRow,"open","closed");
		var hide = cssU.hasClass(thisRow,"closed");
		var thisID = thisRow.id + "-";

		// When expanding, only expand one level.  Collapse all desendants.
		var matchDirectChildrenOnly = !hide;

		for (var j = 0; j < rows.length; j++)
		{
			var s = rows[j];
			if (this.matchStart(s.id, thisID, matchDirectChildrenOnly))
			{
				cssU.removeClass(s,"open");
				cssU.addClass(s,"closed");
				if(hide)
				{
					cssU.addClass(s,"hidden_field");
				}
				else 
				{
					cssU.removeClass(s,"hidden_field");
				}
			}
		}
		return false;
	},

	matchStart : function (target, pattern, matchDirectChildrenOnly)
	{
		var pos = target.indexOf(pattern);
		if (pos != 0) return false;
		if (!matchDirectChildrenOnly) return true;
		if (target.slice(pos + pattern.length, target.length).indexOf("-") >= 0) return false;
		return true;
	},

	collapseAll : function (tbl)
	{
	 	var rows = tbl.getElementsByTagName("TR");
		for (var j = 0; j < rows.length; j++)
		{
			var r = rows[j];
			if (r.id.indexOf("-") >= 0) 
			{
				cssU.addClass(r,"hidden_field");
			}
			cssU.removeClass(r,"open");
			cssU.addClass(r,"closed");
		}
	},

	expandAll : function (tbl)
	{
	 	var rows = tbl.getElementsByTagName("TR");
		for (var j = 0; j < rows.length; j++)
		{
			var r = rows[j];
			if (r.id.indexOf("-") >= 0) 
			{
				cssU.removeClass(r,"hidden_field");
				cssU.removeClass(r,"closed");
				cssU.addClass(r,"open");
			}
		}
	}
};
/** Attribute **/
tmAttribute = {
	doValueChange : function(id,input)
	{
		var show = input.value?input.value.indexOf("_SUB")>0:false;
		if(input.type=="checkbox")
		{
			show = false;
			var arr = input.form[input.name];
			var i = arr.length;
			while(i--)
			{
				if(arr[i].value.indexOf("_SUB")>0 && arr[i].checked)
				{
					show = true;
					break;
				}
			}
		}
		var block = $(id+'_SubBlock');
		if(show) DOM.removeClass(block,"hidden_field");
		else DOM.addClass(block,"hidden_field");
		var children = DOM.get("acronym.req",block);
    	var i = children.length;
    	while (i--)
    	{
			if(show) DOM.addClass(children[i].parentNode.parentNode,"req");
			else  DOM.removeClass(children[i].parentNode.parentNode,"req");
		}
	},
	
	doJNValueChange : function(id,showValue,input)
	{
		var show = input.value==showValue;
		var block = $(id+'_SubBlock');
		if(show) DOM.removeClass(block,"hidden_field");
		else DOM.addClass(block,"hidden_field");
	}
};

