
Array.prototype.inArray = function (value) {
	var i;
	for (i=0; i < this.length; i++) {
		if (this[i] === value) {
			return true;
		}
	}
	return false;
}

function UTIL_showModalDialog(strUrl, intHeight, intWidth){
  if (!intHeight) intHeight = 500;
  if (!intWidth) intWidth = 700;
  strUrl = escape(strUrl);
  showModalDialog('/includes/modalDialog.asp?url=' + strUrl,self,'resizable:yes;dialogHeight:'+intHeight+'px;dialogWidth:'+intWidth+'px');
  
  //showModalDialog('/includes/modalDialog.asp?url=' + strUrl,self,'resizable:yes;dialogHeight:'+intHeight+'px;dialogWidth:'+intWidth+'px');
  //showModalDialog(strUrl,self,'resizable:yes;dialogHeight:'+intHeight+'px;dialogWidth:'+intWidth+'px');
  //window.open(strUrl, "testddff")
}

/*
function:   function PopUpWin(url,window_name,left,scrX,top,scrY,tb,loca,dir,sta,menu,scroll,resize,width,height)
parameters: url,window_name,left,scrX,top,scrY,tb,loca,dir,sta,menu,scroll,resize,width,height
descrip.:   pop up window 100% variable
note:       generic
example:    <a href="javascript:PopUpWin('url', 'popupx', 100, 100, 100, 100, 0, 1, 0, 0, 0, 0, 0, 250, 250)">
*/
function PopUpWin(url,window_name,left,scrX,top,scrY,tb,loca,dir,sta,menu,scroll,resize,width,height) {
  new_window = window.open(url,window_name,"left="+left+",screenX="+scrX+",top="+top+",screenY="+scrY+",toolbar="+tb+",location="+loca+",directories="+dir+",status="+sta+",menubar="+menu+",scrollbars="+scroll+",resizable="+resize+",width="+width+",height="+height);
}
function PopUpWin_Simple(url){
  new_window = window.open(url,null,'toolbar=0,location=0,directories=0,status=0,menubar=0,resizable=yes,scrollbars=yes,width=800,height=440');
}

/*
function    set_innerHtml(obj, new_content)
parameter:  obj = id of object to change
parameter:  new_content = content to insert
descrip.:   sets the innnerHtml of an object (id)
note:       generic
*/
function set_innerHtml(obj, new_content){
  document.all(obj).innerHTML = new_content;
}
/*
function:   getSelectedIndex(select_obj)
parameter:  select_obj - select object
descrip.:   returns the selected index of a non multiple select tag
note:       generic
*/
function getSelectedIndex(select_obj){
  var value = select_obj.selectedIndex;
  return(value);
}

// matches a regular expression against a string
// returns true if found, else false
// re = regular expression
// str = string to match against
// ^ i starten af sætningen betyder at den SKAL søge (og matche) fra starten.
// $ i slutningen betyder at den skal matche med sidste tegn
//Eks: [0-9] godkender enhver sætning med mindst et tal i.
//Eks: ^[0-9]$ godkender kun sætninger med netop et tal
//{n} matcher nøjagtig n gange, eks: [1-9]{3} matcher netop 3 tal
//{n,m} matcher mindst n gange og maks m gange, eks: [1-9]{3,5} matcher mindst 3 og maks 5 tal.
//* matches 0 or more times
//+ matches 1 or more times
//? matches 0 or 1 times

function matchMe(re, str) {
  var pattern = new RegExp (re,'ig');
  var found = pattern.test(str);
  if (found) { return (true); }
  else { return (false) }
}

/* checks for a valid email */
function isValidEmail(emailAddress) {
  var re = /^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/
  return re.test(emailAddress)
}

/*
function:   checkRequired(f)
parameter:  f - The form to check
descrip.:   Tjekker om brugeren har udfyldt form felter markeret med required. Hvis ikke vises den tekst der skrives ud for validation_required="error".
eks:        <INPUT type="text" name="overskrift" validation_required="Titel">
note:       generic
*/
function checkRequired(f) {
    var strError = "";
        
    for (var intLoop = 0; intLoop < f.elements.length; intLoop++) {
        var element = $(f.elements[intLoop]);
        var elementErrorMessage = JQ_validateElement(element);
        if (elementErrorMessage !=""){
            strError += elementErrorMessage
        }
    }

    if ("" != strError) {
        alert("Udfyld venligst:\n" + strError);
        return false;
    }
    return true;
}

function JQ_validateElement(jqElement) {
    var strError = "";

    
    
    //Check if element must be validated if element is not visible
    var validateElement = true;
    if (null != jqElement.attr("validateOnlyIfVisible")) {
        if (jqElement.is(':visible')) {
            validateElement = true;
        } else {
            validateElement = false;
        }
    }

    var boolUpdateColorsOnRadioGroup = false
    var boolUpdateColorsOnSingleRadio = false  
    if (validateElement) {
        
        // Tjekker Required
        if (null != jqElement.attr("validation_required")) {
            //Different types must be validated differently
            if (jqElement.attr("type") == "checkbox") {
                
                //Validation for checkbox
                if (!jqElement.is(':checked')) {
                    var requiredValue = jqElement.attr("validation_required");
                    if (requiredValue == "") {
                        strError += " - " + jqElement.attr("name") + "\n";
                    } else {
                        strError += " - " + requiredValue + "\n";
                    }
                }
            } else if (jqElement.attr("type") == "radio") {
                boolUpdateColorsOnRadioGroup = true 
                if (null == $('input[name=' + jqElement.attr("name") + ']:checked').val()) {
                    var requiredValue = jqElement.attr("validation_required");
                    if (requiredValue == "") {
                        strError += " - " + jqElement.attr("name") + "\n";
                    } else {
                        strError += " - " + requiredValue + "\n";
                    }
                }
            } else {
                
                //Validation for other input elements (eg. Text)

                var textValue = jQuery.trim(jqElement.val());
                if (textValue == "") {
                    var requiredValue = jqElement.attr("validation_required");
                    if (requiredValue == "") {
                        strError += " - " + jqElement.attr("name") + "\n";
                    } else {
                        strError += " - " + requiredValue + "\n";
                    }
                }
            }
        }
        
        // Tjekker om dato er udfyldt rigtigt
        if (null != jqElement.attr("validatedate")) {
            var textValue = jQuery.trim(jqElement.val());
            if (textValue != "") {
                if (!matchMe('^[0-9]{2}-[0-9]{2}-[0-9]{4}$', textValue)) {
                    strError += " - " + jqElement.attr("validatedate") + "\n";
                }
            }
        }

        // Tjekker om RaceRunner tid er udfyldt rigtigt (HH:MM.SS,HS)
        if (null != jqElement.attr("validaterrtime")) {
            var textValue = jQuery.trim(jqElement.val());
            if (textValue != "") {
                if (!UTIL_ValidateRRtime(jqElement.get(0))) {
                    strError += " - " + jqElement.attr("validaterrtime") + "\n";
                }
            }
        }

        // Tjekker om tidspunkt er udfyldt rigtigt (HH:MM)
        if (null != jqElement.attr("validatetime")) {
            var textValue = jQuery.trim(jqElement.val());
            if (textValue != "") {
                if (!UTIL_validatetime(jqElement.get(0))) {
                    strError += " - " + jqElement.attr("validatetime") + "\n";
                }
            }
        }

        // Tjekker om email er udfyldt rigtigt
        if (null != jqElement.attr("validateemail")) {
            var textValue = jQuery.trim(jqElement.val());
            if (textValue != "") {
                if (!isValidEmail(textValue)) {
                    strError += " - " + jqElement.attr("validateemail") + "\n";
                }
            }
        }

        // Tjekker om længden er OK
        if (null != jqElement.attr("validatelength_length")) {
            var textValue = jQuery.trim(jqElement.val());
            var length = textValue.length
            var requiredLength = jqElement.attr("validatelength_length")
            if (length < requiredLength && length > 0) {
                //strError += " - " + f.elements[intLoop].getAttribute("validateemail") + "\n";
                if (null != jqElement.attr("validatelength_message")) {
                    strError += " - " + jqElement.attr("validatelength_message") + "\n";
                } else {
                    strError += " - " + jqElement.attr("name") + " på mindst " + requiredLength + " tegn \n";
                }
            }
        }

        //RegularExpression
        if (null != jqElement.attr("regularExpression")) {
            var textValue = jQuery.trim(jqElement.val());
            if (textValue != "") {
                var re = jqElement.attr("regularExpression");
                if (!matchMe(re,textValue)){
                    strError += " - " + jqElement.attr("regularExpressionMessage") + "\n";
                }
            }
        }

        //PosInteger
        if (null != jqElement.attr("posInteger")) {
            var textValue = jQuery.trim(jqElement.val());
            if (textValue != "") {
                var re = "^[0-9]*$"
                if (!matchMe(re, textValue)) {
                    strError += " - " + jqElement.attr("posInteger") + "\n";
                }
            }
        }

        //Integer
        if (null != jqElement.attr("integer")) {
            var textValue = jQuery.trim(jqElement.val());
            if (textValue != "") {
                var re = "^-?[0-9]+$"
                if (!matchMe(re, textValue)) {
                    strError += " - " + jqElement.attr("integer") + "\n";
                }
            }
        }

        //posRealNumber. Eks: 12,223 or 12 
        if (null != jqElement.attr("posRealNumber")) {
            var textValue = jQuery.trim(jqElement.val());
            if (textValue != "") {
                var re = "^[0-9]+(,[0-9]+)?$"
                if (!matchMe(re, textValue)) {
                    strError += " - " + jqElement.attr("posRealNumber") + "\n";
                }
            }
        }
        if (null != jqElement.attr("sportResult")) {
            //hh:mm:ss:hs eller mm:ss:hs 
            var textValue = jQuery.trim(jqElement.val());
            if (textValue != "") {
                var re = "^([0-9]+:)?[0-5][0-9]:[0-5][0-9]:[0-9][0-9]$"
                if (!matchMe(re, textValue)) {
                    strError += " - " + jqElement.attr("sportResult") + "\n";
                }
            }
        }

        // Tjekker om dato er udfyldt rigtigt
        if (null != jqElement.attr("notAllowed")) {
            if (jqElement.attr("type") == "radio") {
                boolUpdateColorsOnSingleRadio = true;
                if (jqElement.is(':checked')) {
                    strError += " - " + jqElement.attr("notAllowed") + "\n";
                }
            } else {
                var textValue = jQuery.trim(jqElement.val());
                if (textValue != "") {
                    if (!matchMe('^[0-9]{2}-[0-9]{2}-[0-9]{4}$', textValue)) {
                        strError += " - " + jqElement.attr("validatedate") + "\n";
                    }
                }
            }
        }
    }
    
    //Validation complete. Update colors
    if (jqElement.attr("type") == "radio") {
        if (boolUpdateColorsOnRadioGroup) {
            if (strError != "") {
                $('input[name=' + jqElement.attr("name") + ']').each(function() {
                    $(this).addClass("jq_error")
                })
            } else {
                $('input[name=' + jqElement.attr("name") + ']').each(function() {
                    $(this).removeClass("jq_error")
                })
            }
        } else if (boolUpdateColorsOnSingleRadio) {
            if (strError != "") {
                jqElement.addClass("jq_error")
            } else {
                jqElement.removeClass("jq_error")
            }
        }
    } else {
        if (strError != "") {
            jqElement.addClass("jq_error")
        } else {
            jqElement.removeClass("jq_error")
        }
    }
    
    return strError;
}


//function checkRequired_OLD(f) {
//    var strError = "";
// 
//  for (var intLoop = 0; intLoop<f.elements.length; intLoop++){
//    
//    // Tjekker om dato er udfyldt rigtigt
//    if (null!=f.elements[intLoop].getAttribute("validatedate")) {
//      if(!isEmpty(f.elements[intLoop].value)){
//        if (!matchMe('^[0-9]{2}-[0-9]{2}-[0-9]{4}$', f.elements[intLoop].value)){
//          strError += " - " + f.elements[intLoop].getAttribute("validatedate") + "\n";
//        }
//      }
//    }
//    
//     // Tjekker om RaceRunner tid er udfyldt rigtigt (HH:MM.SS,HS)
//    if (null!=f.elements[intLoop].getAttribute("validaterrtime")) {
//      if(!isEmpty(f.elements[intLoop].value)){
//        if (!UTIL_ValidateRRtime(f.elements[intLoop])){
//          strError += " - " + f.elements[intLoop].getAttribute("validaterrtime") + "\n";
//        }
//      }
//    }
//    
//    // Tjekker om tidspunkt er udfyldt rigtigt (HH:MM)
//    if (null!=f.elements[intLoop].getAttribute("validatetime")) {
//      if(!isEmpty(f.elements[intLoop].value)){
//        if (!UTIL_validatetime(f.elements[intLoop])){
//          strError += " - " + f.elements[intLoop].getAttribute("validatetime") + "\n";
//        }
//      }
//    }
//    
//    
//    // Tjekker om email er udfyldt rigtigt
//    if (null!=f.elements[intLoop].getAttribute("validateemail")) {
//      if(!isEmpty(f.elements[intLoop].value)){
//        if (!isValidEmail(f.elements[intLoop].value)){
//          strError += " - " + f.elements[intLoop].getAttribute("validateemail") + "\n";
//        }
//      }
//    }
//    
//    // Tjekker om længden er OK
//    if (null!=f.elements[intLoop].getAttribute("validatelength_length")) {
//      var value = trim(f.elements[intLoop].value)
//      var length = value.length
//      var requiredLength = f.elements[intLoop].getAttribute("validatelength_length")
//      if(length<requiredLength && length>0){
//        //strError += " - " + f.elements[intLoop].getAttribute("validateemail") + "\n";
//        if(null!=f.elements[intLoop].getAttribute("validatelength_message")){
//          strError += " - " + f.elements[intLoop].getAttribute("validatelength_message") + "\n";
//        }else{
//          strError += " - " + f.elements[intLoop].name + " på mindst " + requiredLength + " tegn \n";
//        }
//      }
//    }
//    
//    // Tjekker Required.
//    if (null!=f.elements[intLoop].getAttribute("required")) {
//      if (isEmpty(f.elements[intLoop].value)) {
//        if(isEmpty(f.elements[intLoop].getAttribute("required"))){
//          strError += " - " + f.elements[intLoop].name + "\n";
//        }else{
//        strError += " - " + f.elements[intLoop].getAttribute("required") + "\n";
//        //f.elements[intLoop].className="error"
//        //f.elements[intLoop].style.border = ''; 

//        }
//      }
//    }
//    
//  }
//  
//  if ("" != strError) {
//    alert("Udfyld venligst:\n" + strError);
//    return false;
//  }
//  return true;
//}
/*
function:   isEmpty(str)
parameter:  str - tekstfelt, der skal tjekkes. 
descrip.:   Tjekker om et tekstfelt indeholder tekst forskellig fra " "
note:       generic
*/
function isEmpty(str) {
// Check whether string is empty.

  for (var intLoop = 0; intLoop < str.length; intLoop++){
    if (" " != str.charAt(intLoop)){
      return false;
    }
  }
  return true;  
}

//ARRAY_CE_EDITOR indeholder navne på alle contenteditable divs, der skal gemmes.
//Funktionen kaldes når formen submittes:
//onsubmit="CE_EDITOR_Save()"
//Herved kopieres indhold fra alle Content Editable Divs over i inputfelter, der submittes.
var ARRAY_CE_EDITOR = new Array();
function CE_EDITOR_Save(){
  var i;
  for(i=0;i<ARRAY_CE_EDITOR.length;i++){
    var contentDiv = document.getElementById(ARRAY_CE_EDITOR[i]);
    var strInputID = contentDiv.getAttribute("inputid");
    document.getElementById(strInputID).value = contentDiv.innerHTML;
  }
}


/*
function:   confirmDeletion(URL,Warning) 
parameter:  URL - URL der redirectes til, hvis man trykker "JA"
parameter:  Warning - TEkst der vises i en alert boks.
descrip.:   Viser en Alert boks med en advarsel, hvis man klikker "JA" redirectes til en url. Eks Er du sikker på at det skal slettes?
note:       generic
*/
function confirmDeletion(URL,Warning) {
  var agree=confirm(Warning);
  	if (agree) {
		document.location.href=URL; }
}


// returns the value of a radio button or radio button group
function getRadioValue (radioButtonOrGroup) {
  var value = null;
  if (radioButtonOrGroup.length) { // group 
    for (var b = 0; b < radioButtonOrGroup.length; b++)
      if (radioButtonOrGroup[b].checked)
        value = radioButtonOrGroup[b].value;
  }
  else if (radioButtonOrGroup.checked)
    value = radioButtonOrGroup.value;
  return value;
}
//Tjekker at kun tal kan indsættes i nummerfelter
function OnlyNoCheck(){
  if (event.keyCode < 48 || event.keyCode > 57) event.returnValue = false; 
}

// allow only "0123456789" and ensure that enter submits form (keyCode 13)
// <input type="text" name="" onKeypress="AllowOnlyNumbers()">
function AllowOnlyNumbers() {
  if(event.keyCode==8 || event.keyCode==46 || event.keyCode==37 || event.keyCode==38 || event.keyCode==39 || event.keyCode==40 || event.keyCode==9){
    //OK, this is Delete or backspace or arrows
  }else{
    if ((event.keyCode < 48 || event.keyCode > 57) && (event.keyCode != 13)){
      event.returnValue = false;
    }
  }
}

//#####################
//REDIRECT TO URL AFTER DB UPDATE
function closeWinAndRedirect(URL){
	if(window.opener){
		window.opener.document.location.href=URL;
		self.close();
	}
}

function changeFilter(table){
  table.style="filter:progid:DXImageTransform.Microsoft.BasicImage(grayscale=0, xray=0, mirror=0, invert=0, opacity=0.60, rotation=0);";
}

function setFocus(strID,booSelect){
  var elm = document.getElementById(strID);
  elm.focus();
  if(booSelect) elm.select();
}


var intZoomLevel;
function setZoomLevel(intZoomLevelTemp){
  intZoomLevel = intZoomLevelTemp;
  var iframeobj=document.getElementById('zoomframe');
  iframeobj.contentWindow.applyZoom(intZoomLevel);
  
 // document.body.style.zoom=intZoomLevel;
  intZoomLevel = parseFloat(intZoomLevel);
  var currentZoom =  parseFloat(document.body.style.zoom);
  if (intZoomLevel > currentZoom){
    setZoomLevel_helperUp()
  }else{
    setZoomLevel_helperDown()
  }
}
function setZoomLevel_helperUp(){
  intZoomLevel = parseFloat(intZoomLevel);
  var currentZoom =  parseFloat(document.body.style.zoom);
  
  if (intZoomLevel > currentZoom){
    document.body.style.zoom = currentZoom+0.05;
    setTimeout("setZoomLevel_helperUp("+intZoomLevel+")", 10);
  }else{
    document.body.style.zoom = intZoomLevel;
  }
}
function setZoomLevel_helperDown(){
  intZoomLevel = parseFloat(intZoomLevel);
  var currentZoom =  parseFloat(document.body.style.zoom);
  if (intZoomLevel < currentZoom){
    document.body.style.zoom = currentZoom-0.05;
    setTimeout("setZoomLevel_helperDown("+intZoomLevel+")", 10);
  }else{
    document.body.style.zoom = intZoomLevel;
  }
}

//Indsæter en option i en select box i alfabetisk orden
function addOptionSorted(strSelectID, strValue, strText, boolSelected){
  var intInsert1 = 0;
  var selectbox = document.getElementById(strSelectID);
  for(var i=0; i<selectbox.options.length;i++){
    if(selectbox.options[i].text.toUpperCase()>strText.toUpperCase()){  
      break;
    }
    intInsert1 = i+1;
  }
  var oOption = document.createElement("OPTION");
  oOption.text = strText;
  oOption.value = strValue;
  oOption.selected = boolSelected;
  selectbox.options.add(oOption,intInsert1);  
}

//Flytter valgte options fra en slectbox til en anden
function moveOptions(strFrom,strTo){
  var from = document.getElementById(strFrom);
  var to = document.getElementById(strTo);
  
  var addPosition = to.length;
  
  for(i=from.options.length-1;i>=0;i--){
    if(from.options[i].selected){
      var option = from.options[i];
      addOptionSorted(strTo,option.value,option.text, false)
      from.remove(i);
    }
  }
  from.onchange();
}

//Lægger filter på et billede, som hvis det ikke er aktivt
function togleImageActive(strImageID,strSelectID){
  var image = document.getElementById(strImageID);
  var selectbox = document.getElementById(strSelectID);
  for(var i=selectbox.options.length-1;i>=0;i--){
    if(selectbox.options[i].selected){
      image.style.filter="";
      return;
    }
  }
  image.style.filter="gray()";
}

/*
function:   function setValueIfNotNull(obj, new_content)
parameters: obj, new_content
descrip.:   sætter værdien af f.eks. et tekstfelt til new_content hvis new_content ikke er null.
note:       generic
example:    setValueIfNotNull(document.form1.link,"new value")
*/
function setValueIfNotNull(obj, new_content){
  if( new_content!=null){
    obj.value = new_content;
  }  
}


/*
function:   function insertHTMLfromDivInHTMLEditor(divName)
parameters: divName - ID på den div hvorfra HTML'en skal pastes
descrip.:   paster HTML fra en DIV ind i HTML editoren.
note:       generic
example:    
*/
function insertHTMLfromDivInHTMLEditor(divName){
  oName=window.dialogArguments.oUtil.oName; 
  tekst=document.getElementById(divName).innerHTML; 
  eval('window.dialogArguments.'+oName).InsertCustomHTML(tekst);
  alert('Teksten er blevet indsat.');
}

//Ikonerne + og - expander / collapser indhold når man klikker
function UTIL_ToggleExpandCollapse(imageID, targetID){
  var imgImage = document.getElementById(imageID)
  var div = document.getElementById(targetID)
  
  var _srcA = "/images/minus.gif"
  var _srcB = "/images/plus.gif"
  
  
  if (imgImage.src.indexOf(_srcA)>-1) {
    imgImage.src = _srcB
    CollapseDIV(targetID,true);
  }else{
    imgImage.src = _srcA
    CollapseDIV(targetID,false);
  
  }
  
}


function CollapseDIV(_d, _switch)
{ 

  var _height;
  var _x = document.getElementById(_d);
  /*if (_height == null){
    _height = _x.style.height;
  }*/
  if (_switch) // collapse
  { 
    
    _x.style.visibility=_x.style.visibility=="hidden"?"hidden":"hidden";
    _x.style.overflow=_x.style.overflow=="hidden"?"hidden":"hidden";
   // _x.style.height=_x.style.height=="0px"?"0px":"0px";
    _x.style.display = 'none';

  }
  if (!_switch) // expand
  { 
  
    _x.style.visibility=_x.style.visibility=="visible"?"visible":"visible";
    _x.style.overflow=_x.style.overflow=="visible"?"visible":"visible";
   // _x.style.height=_x.style.height=="1em"?"1em":"1em";
    _x.style.display = 'block';

  }
} 

var JS_ShortMessage_TimerID;
function JS_ShortMessage(strMessage, intTimeout, posObject){
  var x, y;
  if (posObject!=null){
    x = JS_findPosX(posObject)+10
    y = JS_findPosY(posObject)-10
    
  }else{
    x = document.body.clientWidth/2.0-75 + document.documentElement.scrollLeft+ document.body.scrollLeft;
    y = document.body.clientHeight/2.0-75 + document.documentElement.scrollTop+ document.body.scrollTop;
  }
  
  
 
  //x = window.event.clientX + document.documentElement.scrollLeft+ document.body.scrollLeft;
  //y = window.event.clientY + document.documentElement.scrollTop+ document.body.scrollTop;
  
  
  
  JS_ShortMessage_div.style.left=x
  JS_ShortMessage_div.style.top=y
  clearInterval(JS_ShortMessage_TimerID);
  JS_ShortMessage_div.innerHTML = strMessage;
  CollapseDIV('JS_ShortMessage_div', false);
  JS_ShortMessage_TimerID = setTimeout("CollapseDIV('JS_ShortMessage_div', true)",intTimeout);
}

function Select_getSelectedValue(selectbox){
  var k;
  for(k=0;k<selectbox.options.length;k++){
    if (selectbox.options[k].selected){
      return selectbox.options[k].value;
    }
  } 
}

function JS_setPos(obj,x,y){
  if(obj.offsetParent){
   x = x - JS_findPosX(obj.offsetParent);
   y = y - JS_findPosY(obj.offsetParent);
  }
  obj.style.pixelLeft = x;
  obj.style.pixelTop = y;
  /*
  var posX = findPosX(obj);
  var relPosX = obj.style.offsetLeft;
  obj.style.pixelLeft = x - (posX - relPosX);
  
  var posY = findPosY(obj);
  var realPosY = obj.style.offsetTop;
  obj.style.pixelTop = y - (posY - realPosY);
  */

}

function JS_findPosX(obj)
{ 

	var curleft = 0;
	if (obj.offsetParent){
		while (obj.offsetParent){
			curleft += obj.offsetLeft
      obj = obj.offsetParent;
		}
	}else if (obj.x){
		curleft += obj.x;
  }
  
	return curleft;
}

function JS_findPosY(obj )
{
	var curtop = 0;

	if (obj.offsetParent){
		while (obj.offsetParent){
			curtop += obj.offsetTop
			obj = obj.offsetParent;
		}
	}else if (obj.y){
		curtop += obj.y;
  }
	return curtop;
}

function AllowOnlyDecimalNumbers(targ) {
 
  if (event.keyCode < 44 || event.keyCode > 57 || event.keyCode == 45 || event.keyCode == 47)
  	event.returnValue = false;
	
	if (event.keyCode == 44 || event.keyCode == 46){
		if((targ.value == "")||(targ.value.indexOf(".") != -1) || (targ.value.indexOf(",") != -1)){
			event.returnValue = false;
		}
	}
}


function AllowOnlyDecimalNumbersNeg(targ) {
  
  if (event.keyCode==45) {
    //Der indtastes -
    if(targ.value==""){
     
    }else{
      event.returnValue = false;
    }
    
  }else{
    if (event.keyCode < 44 || event.keyCode > 57 || event.keyCode == 45 || event.keyCode == 47)
  	  event.returnValue = false;
	
	  if (event.keyCode == 44 || event.keyCode == 46){
		  if((targ.value == "")||(targ.value.indexOf(".") != -1) || (targ.value.indexOf(",") != -1)){
			  event.returnValue = false;
		  }
	  }
  }  
}


/*Looper gennem en vektor af radioButtons og viser eller gemmer 
    div'en i parameteren "divName".
*/
function showDivName(radioVector, show){ 
  //alert("0");//xxxxxxxxxxx
  if(radioVector.length>0){
    alert("w")
    //Der er elementer i RadioVector, og de loopes
    for(var i=0;i<radioVector.length;i++){    
      if(radioVector[i].checked==show){
           alert("1");
        CollapseDIV(radioVector[i].divName, false);
      }else{
        CollapseDIV(radioVector[i].divName, true);
           alert("2");
      }
    }
  }else{
    alert("3")
    //Hvis der kun er en radioButton kommer den ikke i en vektor. Derfor skal det gøres lidt anderledes
    if(radioVector.checked==show){
      CollapseDIV(radioVector.divName, false);
    }else{
      CollapseDIV(radioVector.divName, true);
    }
  }
}


function trim(stringToTrim) {
	return stringToTrim.replace(/^\s+|\s+$/g,"");
}
function ltrim(stringToTrim) {
	return stringToTrim.replace(/^\s+/,"");
}
function rtrim(stringToTrim) {
	return stringToTrim.replace(/\s+$/,"");
}

// 
// Field        | Full Form          | Short Form
// -------------+--------------------+-----------------------
// Year         | yyyy (4 digits)    | yy (2 digits), y (2 or 4 digits)
// Month        | MMM (name or abbr.)| MM (2 digits), M (1 or 2 digits)
//              | NNN (abbr.)        |
// Day of Month | dd (2 digits)      | d (1 or 2 digits)
// Day of Week  | EE (name)          | E (abbr)
// Hour (1-12)  | hh (2 digits)      | h (1 or 2 digits)
// Hour (0-23)  | HH (2 digits)      | H (1 or 2 digits)
// Hour (0-11)  | KK (2 digits)      | K (1 or 2 digits)
// Hour (1-24)  | kk (2 digits)      | k (1 or 2 digits)
// Minute       | mm (2 digits)      | m (1 or 2 digits)
// Second       | ss (2 digits)      | s (1 or 2 digits)
// AM/PM        | a                  |
//
// NOTE THE DIFFERENCE BETWEEN MM and mm! Month=MM, not mm!
// Examples:
//  "MMM d, y" matches: January 01, 2000
//                      Dec 1, 1900
//                      Nov 20, 00
//  "M/d/yy"   matches: 01/20/00
//                      9/2/00
//  "MMM dd, yyyy hh:mm:ssa" matches: "January 01, 2000 12:30:45AM"
// ------------------------------------------------------------------

var MONTH_NAMES=new Array('January','February','March','April','May','June','July','August','September','October','November','December','Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec');
var DAY_NAMES=new Array('Sunday','Monday','Tuesday','Wednesday','Thursday','Friday','Saturday','Sun','Mon','Tue','Wed','Thu','Fri','Sat');
function LZ(x) {return(x<0||x>9?"":"0")+x}

// ------------------------------------------------------------------
// isDate ( date_string, format_string )
// Returns true if date string matches format of format string and
// is a valid date. Else returns false.
// It is recommended that you trim whitespace around the value before
// passing it to this function, as whitespace is NOT ignored!
// ------------------------------------------------------------------
function isDate(val,format) {
	var date=getDateFromFormat(val,format);
	if (date==0) { return false; }
	return true;
	}

// -------------------------------------------------------------------
// compareDates(date1,date1format,date2,date2format)
//   Compare two date strings to see which is greater.
//   Returns:
//   1 if date1 is greater than date2
//   0 if date2 is greater than date1 of if they are the same
//  -1 if either of the dates is in an invalid format
// -------------------------------------------------------------------
function compareDates(date1,dateformat1,date2,dateformat2) {
	var d1=getDateFromFormat(date1,dateformat1);
	var d2=getDateFromFormat(date2,dateformat2);
	if (d1==0 || d2==0) {
		return -1;
		}
	else if (d1 > d2) {
		return 1;
		}
	return 0;
	}

// ------------------------------------------------------------------
// formatDate (date_object, format)
// Returns a date in the output format specified.
// The format string uses the same abbreviations as in getDateFromFormat()
// ------------------------------------------------------------------
function formatDate(date,format) {
	format=format+"";
	var result="";
	var i_format=0;
	var c="";
	var token="";
	var y=date.getYear()+"";
	var M=date.getMonth()+1;
	var d=date.getDate();
	var E=date.getDay();
	var H=date.getHours();
	var m=date.getMinutes();
	var s=date.getSeconds();
	var yyyy,yy,MMM,MM,dd,hh,h,mm,ss,ampm,HH,H,KK,K,kk,k;
	// Convert real date parts into formatted versions
	var value=new Object();
	if (y.length < 4) {y=""+(y-0+1900);}
	value["y"]=""+y;
	value["yyyy"]=y;
	value["yy"]=y.substring(2,4);
	value["M"]=M;
	value["MM"]=LZ(M);
	value["MMM"]=MONTH_NAMES[M-1];
	value["NNN"]=MONTH_NAMES[M+11];
	value["d"]=d;
	value["dd"]=LZ(d);
	value["E"]=DAY_NAMES[E+7];
	value["EE"]=DAY_NAMES[E];
	value["H"]=H;
	value["HH"]=LZ(H);
	if (H==0){value["h"]=12;}
	else if (H>12){value["h"]=H-12;}
	else {value["h"]=H;}
	value["hh"]=LZ(value["h"]);
	if (H>11){value["K"]=H-12;} else {value["K"]=H;}
	value["k"]=H+1;
	value["KK"]=LZ(value["K"]);
	value["kk"]=LZ(value["k"]);
	if (H > 11) { value["a"]="PM"; }
	else { value["a"]="AM"; }
	value["m"]=m;
	value["mm"]=LZ(m);
	value["s"]=s;
	value["ss"]=LZ(s);
	while (i_format < format.length) {
		c=format.charAt(i_format);
		token="";
		while ((format.charAt(i_format)==c) && (i_format < format.length)) {
			token += format.charAt(i_format++);
			}
		if (value[token] != null) { result=result + value[token]; }
		else { result=result + token; }
		}
	return result;
	}
	
// ------------------------------------------------------------------
// Utility functions for parsing in getDateFromFormat()
// ------------------------------------------------------------------
function _isInteger(val) {
	var digits="1234567890";
	for (var i=0; i < val.length; i++) {
		if (digits.indexOf(val.charAt(i))==-1) { return false; }
		}
	return true;
	}
function _getInt(str,i,minlength,maxlength) {
	for (var x=maxlength; x>=minlength; x--) {
		var token=str.substring(i,i+x);
		if (token.length < minlength) { return null; }
		if (_isInteger(token)) { return token; }
		}
	return null;
	}
	
// ------------------------------------------------------------------
// getDateFromFormat( date_string , format_string )
//
// This function takes a date string and a format string. It matches
// If the date string matches the format string, it returns the 
// getTime() of the date. If it does not match, it returns 0.
// ------------------------------------------------------------------
function getDateFromFormat(val,format) {
	val=val+"";
	format=format+"";
	var i_val=0;
	var i_format=0;
	var c="";
	var token="";
	var token2="";
	var x,y;
	var now=new Date();
	var year=now.getYear();
	var month=now.getMonth()+1;
	var date=1;
	var hh=now.getHours();
	var mm=now.getMinutes();
	var ss=now.getSeconds();
	var ampm="";
	
	while (i_format < format.length) {
		// Get next token from format string
		c=format.charAt(i_format);
		token="";
		while ((format.charAt(i_format)==c) && (i_format < format.length)) {
			token += format.charAt(i_format++);
			}
		// Extract contents of value based on format token
		if (token=="yyyy" || token=="yy" || token=="y") {
			if (token=="yyyy") { x=4;y=4; }
			if (token=="yy")   { x=2;y=2; }
			if (token=="y")    { x=2;y=4; }
			year=_getInt(val,i_val,x,y);
			if (year==null) { return 0; }
			i_val += year.length;
			if (year.length==2) {
				if (year > 70) { year=1900+(year-0); }
				else { year=2000+(year-0); }
				}
			}
		else if (token=="MMM"||token=="NNN"){
			month=0;
			for (var i=0; i<MONTH_NAMES.length; i++) {
				var month_name=MONTH_NAMES[i];
				if (val.substring(i_val,i_val+month_name.length).toLowerCase()==month_name.toLowerCase()) {
					if (token=="MMM"||(token=="NNN"&&i>11)) {
						month=i+1;
						if (month>12) { month -= 12; }
						i_val += month_name.length;
						break;
						}
					}
				}
			if ((month < 1)||(month>12)){return 0;}
			}
		else if (token=="EE"||token=="E"){
			for (var i=0; i<DAY_NAMES.length; i++) {
				var day_name=DAY_NAMES[i];
				if (val.substring(i_val,i_val+day_name.length).toLowerCase()==day_name.toLowerCase()) {
					i_val += day_name.length;
					break;
					}
				}
			}
		else if (token=="MM"||token=="M") {
			month=_getInt(val,i_val,token.length,2);
			if(month==null||(month<1)||(month>12)){return 0;}
			i_val+=month.length;}
		else if (token=="dd"||token=="d") {
			date=_getInt(val,i_val,token.length,2);
			if(date==null||(date<1)||(date>31)){return 0;}
			i_val+=date.length;}
		else if (token=="hh"||token=="h") {
			hh=_getInt(val,i_val,token.length,2);
			if(hh==null||(hh<1)||(hh>12)){return 0;}
			i_val+=hh.length;}
		else if (token=="HH"||token=="H") {
			hh=_getInt(val,i_val,token.length,2);
			if(hh==null||(hh<0)||(hh>23)){return 0;}
			i_val+=hh.length;}
		else if (token=="KK"||token=="K") {
			hh=_getInt(val,i_val,token.length,2);
			if(hh==null||(hh<0)||(hh>11)){return 0;}
			i_val+=hh.length;}
		else if (token=="kk"||token=="k") {
			hh=_getInt(val,i_val,token.length,2);
			if(hh==null||(hh<1)||(hh>24)){return 0;}
			i_val+=hh.length;hh--;}
		else if (token=="mm"||token=="m") {
			mm=_getInt(val,i_val,token.length,2);
			if(mm==null||(mm<0)||(mm>59)){return 0;}
			i_val+=mm.length;}
		else if (token=="ss"||token=="s") {
			ss=_getInt(val,i_val,token.length,2);
			if(ss==null||(ss<0)||(ss>59)){return 0;}
			i_val+=ss.length;}
		else if (token=="a") {
			if (val.substring(i_val,i_val+2).toLowerCase()=="am") {ampm="AM";}
			else if (val.substring(i_val,i_val+2).toLowerCase()=="pm") {ampm="PM";}
			else {return 0;}
			i_val+=2;}
		else {
			if (val.substring(i_val,i_val+token.length)!=token) {return 0;}
			else {i_val+=token.length;}
			}
		}
	// If there are any trailing characters left in the value, it doesn't match
	if (i_val != val.length) { return 0; }
	// Is date valid for month?
	if (month==2) {
		// Check for leap year
		if ( ( (year%4==0)&&(year%100 != 0) ) || (year%400==0) ) { // leap year
			if (date > 29){ return 0; }
			}
		else { if (date > 28) { return 0; } }
		}
	if ((month==4)||(month==6)||(month==9)||(month==11)) {
		if (date > 30) { return 0; }
		}
	// Correct hours value
	if (hh<12 && ampm=="PM") { hh=hh-0+12; }
	else if (hh>11 && ampm=="AM") { hh-=12; }
	var newdate=new Date(year,month-1,date,hh,mm,ss);
	return newdate.getTime();
	}

// ------------------------------------------------------------------
// parseDate( date_string [, prefer_euro_format] )
//
// This function takes a date string and tries to match it to a
// number of possible date formats to get the value. It will try to
// match against the following international formats, in this order:
// y-M-d   MMM d, y   MMM d,y   y-MMM-d   d-MMM-y  MMM d
// M/d/y   M-d-y      M.d.y     MMM-d     M/d      M-d
// d/M/y   d-M-y      d.M.y     d-MMM     d/M      d-M
// A second argument may be passed to instruct the method to search
// for formats like d/M/y (european format) before M/d/y (American).
// Returns a Date object or null if no patterns match.
// ------------------------------------------------------------------
function parseDate(val) {
	var preferEuro=(arguments.length==2)?arguments[1]:false;
	generalFormats=new Array('y-M-d','MMM d, y','MMM d,y','y-MMM-d','d-MMM-y','MMM d');
	monthFirst=new Array('M/d/y','M-d-y','M.d.y','MMM-d','M/d','M-d');
	dateFirst =new Array('d/M/y','d-M-y','d.M.y','d-MMM','d/M','d-M');
	var checkList=new Array('generalFormats',preferEuro?'dateFirst':'monthFirst',preferEuro?'monthFirst':'dateFirst');
	var d=null;
	for (var i=0; i<checkList.length; i++) {
		var l=window[checkList[i]];
		for (var j=0; j<l.length; j++) {
			d=getDateFromFormat(val,l[j]);
			if (d!=0) { return new Date(d); }
			}
		}
	return null;
	}
  
  //Tjekker om et tekstfelt har et gyldigt tidspunkt; HH:MM. Den erstatter desuden teksten med en guldig tekst. Kaldes med selve elementet.
  function UTIL_validatetime(textElement){
    var boolResult = false;  
    var strTime = textElement.value;
    if (strTime==""){
      boolResult=true
    }else{
      var kolonPos = strTime.indexOf(':')
      if(kolonPos==-1){
      }else{
        var intTime = strTime.substring(0,kolonPos)
        var intMinute = strTime.substring(kolonPos+1,strTime.length)
        intTime = parseInt(intTime)
        intMinute = parseInt(intMinute)
        if(isNaN(intTime)||isNaN(intMinute)) {
        }else{
          if (intTime<10) {  
            intTime = "0" + intTime
          }
          if (intMinute<10) {         
            intMinute = "0" + intMinute
          }
          textElement.value = intTime + ":" + intMinute
          boolResult = true
        }
      } 
    }
    return boolResult;
  }

//Resultat kommer af typen hh:mm.ss,hs
function UTIL_ValidateRRtime(textBoxObject){
 
  var boolErrors = false;
  var strResultat = textBoxObject.value
  strResultat = strResultat.replace(/ /g,"")
  
 
  if(strResultat==""){
    //Ingen tekst, OK
    textBoxObject.style.color= 'black';
    textBoxObject.value = strResultat;
    return true;
  }
  
  var intHH, intMM, intSS, intHS
  
  //Rækkefølgen er: :., 
  //Hvis der er et : skal der også være .,
  //Hvis der er et . skal der også være ,
  var boolRestRequired=false
   //Finder hh
   var kolonPos = strResultat.indexOf(':')
   if(kolonPos==-1){
     //Intet kolon
     intHH = 0;
   }else{
      boolRestRequired = true;
      intHH = strResultat.substring(0,kolonPos)
      strResultat = strResultat.substring(kolonPos+1,strResultat.length)
   }
   //Finder mm
   kolonPos = strResultat.indexOf('.')
    if(kolonPos==-1){
     //Intet kolon
     intMM = 0;
     
     if (boolRestRequired){
       boolErrors = true;
     }
   }else{
      boolRestRequired = true;
      intMM = strResultat.substring(0,kolonPos)
      strResultat = strResultat.substring(kolonPos+1,strResultat.length)
   }
   //Finder ss
   kolonPos = strResultat.indexOf(',')
    if(kolonPos==-1){
     //Intet kolon
     intSS= 0;
     if (boolRestRequired){
       boolErrors = true;
     }
   }else{
      intSS = strResultat.substring(0,kolonPos)
      strResultat = strResultat.substring(kolonPos+1,strResultat.length)
   }
   //Finder hs
   intHS = strResultat
   
   //Konverterer alle tal til Ints
   
   intHH = parseInt(UTI_RemoveLeading0(intHH))
   intMM = parseInt(UTI_RemoveLeading0(intMM))
   intSS = parseInt(UTI_RemoveLeading0(intSS))
   intHS = parseInt(UTI_RemoveLeading0(intHS))
   
   
   
   
   
   if (isNaN(intHH) || isNaN(intMM) || isNaN(intSS) || isNaN(intHS)){
    boolErrors=true;
   }else{
    //Tjekker om nogle tal er for store
    
    if(intMM>59){
      boolErrors=true;
    }
    if (intSS>59){
      boolErrors=true;
    }
    if(intHS>99){
      boolErrors=true;
    }
   }
    
   if(intMM<10){
    intMM = "0" + intMM;
   }
   if(intSS<10){
    intSS = "0" + intSS;
   }
   if(intHS<10){
    intHS = "0" + intHS;
   }
   
   if (boolErrors==true){
    textBoxObject.style.color= 'red';
    return false;
   }else{
     textBoxObject.style.color= 'black';
    //Indsætter den parsede tekststreng
    var strText = ""
    if(intHH>0){
      strText = "" + intHH + ":"
    }
    strText = strText + intMM + "." + intSS + "," + intHS
    
    textBoxObject.value = "" + strText
    return true;
   }
   
  
}

function UTI_RemoveLeading0(intNumber){
  if (intNumber.length > 1){
    if(intNumber.indexOf('0') == 0){
      intNumber = intNumber.substring(1,intNumber.length)
    }
  }
  return intNumber;
  
}


function SetChecked(val,chkName) {
  var checkboxes = document.getElementsByName(chkName);
  for(i=0; i < checkboxes.length; i++){
    checkboxes[i].checked = val;
  }
}

function UTIL_ContentEditable_insertTextAtCaret (inputField, text) {
    var selectedInputFelt = document.getElementById(inputField);
    selectedInputFelt.focus()
    document.selection.createRange().text = text;
  }

  
  function confirm_ChangeRowColor(element, txt){
    try{
      while(element.nodeName != "TR"){
        element = element.parentNode;
      }
    
      var cols = element.getElementsByTagName("td");
      for (var i=0; i < cols.length; i++){
        cols[i].style.backgroundColor='#ffeeee';
      }
      
    }catch(e){;}
    
    var ret = confirm(txt)
    try{
      for (var i=0; i < cols.length; i++){
        cols[i].style.backgroundColor='';
      }
    }catch(e){}
    
    return ret;  
  }
  
  function UTIL_GetOpenerWindow(){
    if(window.dialogArguments != null) return window.dialogArguments;
    if (window.parent.opener != null) return window.parent.opener;
  }

function UTIL_ReverseSelectCheckbox(strCheckboxID){
  $("input[name='"+strCheckboxID+"'][type='checkbox']").each(function(){
	  this.checked = !this.checked;
	});
}

function UTIL_trackGAevent(etcategory, etaction, etlabel, etvalue) {
    if (typeof (pageTracker) == "object") {
        if (isNaN(parseInt(etvalue)))
            pageTracker._trackEvent(etcategory, etaction, etlabel)
        else
            pageTracker._trackEvent(etcategory, etaction, etlabel, parseInt(etvalue))
    }
}

//////////////////////////////////////////
// //
// var pageTracker = new Object();
// function _trackEvent(p1, p2, p3, p4) {
//     alert("1: " + typeof (p1) + " : " + p1 + "\n" + "2: " + typeof (p2) + " : " + p2 + "\n" + "3: " + typeof (p3) + " : " + p3 + "\n" + "4: " + typeof (p4) + " : " + p4);
// }
// pageTracker._trackEvent = _trackEvent;
//////////////////////////////////////////


function UTIL_isAlphaNumeric(str) {
    // Check whether string is alhpa-numeric (contains only characters [0-9], [a-z], [A-Z]).

    for (var i = 0; i < str.length; i++) {
        if (str.charCodeAt(i) < 48 || (str.charCodeAt(i) > 57 && str.charCodeAt(i) < 65) || (str.charCodeAt(i) > 90 && str.charCodeAt(i) < 97) || str.charCodeAt(i) > 122) {
            return false;
        }
    }
    return true;
}

function UTIL_filterAlphaNumeric(str) {
    // Filter string by removing charcters that are not alhpa-numeric (characters [0-9], [a-z], [A-Z]).
    var newString = "";

    for (var i = 0; i < str.length; i++) {
        if (str.charCodeAt(i) < 48 || (str.charCodeAt(i) > 57 && str.charCodeAt(i) < 65) || (str.charCodeAt(i) > 90 && str.charCodeAt(i) < 97) || str.charCodeAt(i) > 122) {
            continue;
        }
        newString = newString + str.charAt(i)
    }
    return newString;
}
