// CommonFunctions - Script Library for functions used multiple places // in the application function navigateTo(strURL, strPortletName, strPortletAction) { with (document.formNavigation) { portletname.value = strPortletName; portletaction.value = strPortletAction; action = strURL; submit(); } } function posSelectFromValue(objSelect,txtValue) { for (var i=0;i'); document.write('' + this.alt + ''); } var arrayElementsForValidation = new Array(); // Global vars (1-9) var cntElementName = 1; var cntElementType = 2; var cntErrorMissing = 3; var cntErrorNotValid = 4; var cntDateSep; // Constraints vars (10-99) var cntMaxLength = 10; // Vars for element types (100-150) var cntAmountType = 100; var cntTextType = 101; var cntNumberType = 102; var cntDateType = 110; var cntDayType = 111; var cntMonthType = 112; var cntYearType = 113; var cntEmailType = 120; var cntAllTextType = 121; // Internal vars var cntOK = 0; var cntNotValid = 1; var cntMissing = 2; var cntBadType = 3; var intElementCounter = 0; function initValidation() { arrayElementsForValidation = new Array(); intElementCounter = 0; } // work around for 'typeof array' returns 'object' function typeOf(value) { var s = typeof value; if (s === 'object') { if (value) { if (value instanceof Array) { s = 'array'; } } else { s = 'null'; } } return s; } // 2007-12-04 firx, fixed bug: 08 or 09 means octal numbers, which is illegal function ValidDate(strDate) { var strWorkDate = strDate.split('-'); if (typeOf(strWorkDate) === 'array' && strWorkDate.length !== 3) { return false; } var strDay = strWorkDate[0]; var intDay = parseInt(strDay,10); var strMonth = strWorkDate[1]; var intMonth = parseInt(strMonth,10); var strYear = strWorkDate[2]; var intYear = parseInt(strYear,10); if (isNaN(intYear)) { return false; } if (isNaN(intMonth) || intMonth < 1 || intMonth > 12) { return false; } if (isNaN(intDay) || intDay < 0) { return false; } booAnswer = true; switch(intMonth) { case 2:// February, Check for leap year if ((intYear % 4) == 0) { if (intDay > 29) { booAnswer = false; } } else { if (intDay > 28) { booAnswer = false; } } break; case 1://Jan case 3://Mar case 5://May case 7://Jul case 8://Aug case 10://Okt case 12://Dec if (intDay > 31) { booAnswer = false; } break; case 4://Apr case 6://Jun case 9://Sep case 11://Nov if (intDay > 30) { booAnswer = false; } break; } return booAnswer; } // Set a new array for validation // Input : ElementName, ElementType, Error message for missing and not valid element. // Output : Array // HUJx 20/06/00 function NewElementValidation(strElementName, intElementType, strErrorMissing, strErrorNotValid) { var arrayNew = new Array(); arrayNew[cntElementName] = strElementName; arrayNew[cntElementType] = intElementType; arrayNew[cntErrorMissing] = strErrorMissing; arrayNew[cntErrorNotValid] = strErrorNotValid; return(arrayNew); } function SubmitElementValidation(objCurElement) { arrayElementsForValidation[intElementCounter] = objCurElement; intElementCounter++; } // Check if a email is of a valid type // Input : Email as string // Output : True/False // HUJx 20/06/00 function isEmailValid(strEmail) { intLength = strEmail.length; // If empty if (intLength == 0) { return cntMissing; } // Check that length is greater than 5 if (strEmail.length < 6) { return cntNotValid; } else { // Get/check position of @ intAtPosition = strEmail.indexOf('@',0); if (intAtPosition == -1) { return cntNotValid; } else { // Get/check position of . relative to @ if (strEmail.indexOf('.',intAtPosition) != -1) { return cntOK; } else { return cntNotValid; } } } } // Check if a date is of a valid type // Input : Date as string // Output : True/False // HUJx 12/09/00 function isDateValid(strDate) { intLength = strDate.length; // If empty if (intLength == 0) { return cntMissing; } // If contains only two dateparts or less if (OccurenceOfChar(strDate, cntDateSep) < 2) { return cntNotValid; } return cntOK; } // Check if a number is valid // Input : Number as string // Output : Validation Result // HUJx 11/08/00 function isNumberValid(strNumber) { if (strNumber.length == 0) { return cntMissing; } else { if (isNumber(strNumber, false, false, true)) { return cntOK; } else { return cntNotValid; } } } // Function check if a string is a number. // Input : String to check, indication of wether the number mus contain // "." and "," and " " // Output : True / False // HUJx 20/06/00 function isNumber(strNumber, blnDotsOK, blnCommasOK, blnSpacesOK) { intNumberLength = strNumber.length; blnNumberValid = true; for (intIndex = 0; intIndex < intNumberLength; intIndex++) { strCurChar = strNumber.charAt(intIndex); switch(strCurChar) { case ' ': if (!blnSpacesOK) { blnNumberValid = false; } break; case '0': break; case '1': break; case '2': break; case '3': break; case '4': break; case '5': break; case '6': break; case '7': break; case '8': break; case '9': break; case '.': if (!blnDotsOK) { blnNumberValid = false; } break; case ',': if (!blnCommasOK) { blnNumberValid = false; } break; default: blnNumberValid = false; } } if (blnNumberValid) { return true; } else { return false; } } // Function can find the number of occurences of a special char in a text // Input : Text to search and char to searh for // Output : Occurence of char in text // HUJx 20/06/00 function OccurenceOfChar(strText, strChar) { intTextLength = strText.length; intCounter = 0; for (intIndex = 0; intIndex < intTextLength; intIndex++) { strCurChar = strText.charAt(intIndex); if (strCurChar == strChar) { intCounter++; } } return(intCounter); } // Function checks if an amount is valid // Input : String containing amount // Output : Result // HUJX 20/06/00, 21/06/00 function isAmountValid(strAmount) { // Definition of thousands & decimal seperator. Should // be moved to commondefines, or maybe Reginal settings // should be used. var cntThousandSep = '.'; var cntDecimalSep = ','; var tempAmount; tempAmount = TrimString(strAmount); // Get length of string intAmountLength = tempAmount.length; // Check if the string is empty if (intAmountLength != 0) { // Check if the string contains characters not belonging to a number/amount if (isNumber(tempAmount, true, true, false)) { // Check if amount is 0 if ((OccurenceOfChar(tempAmount, "0") + OccurenceOfChar(tempAmount, cntThousandSep) + OccurenceOfChar(tempAmount, cntDecimalSep)) == intAmountLength) { return(cntNotValid); } // Check occurences of thousand & decimal seperator if ((OccurenceOfChar(tempAmount, cntThousandSep) > 2) || (OccurenceOfChar(tempAmount, cntDecimalSep) > 1)) { return(cntNotValid); } else { // Get the position of decimal & thousand seperator intDecimalSepPosition = tempAmount.indexOf(cntDecimalSep); intThousandSepPosition = tempAmount.lastIndexOf(cntThousandSep); // Check correct position of Decimal Seperator. Either there should be no decimal // seperator, or it should be placed before the last 1 or 2 digits. blnSepNotBeforeLast2Digits = ((intDecimalSepPosition + 3) != intAmountLength) if ((intDecimalSepPosition != -1) && (blnSepNotBeforeLast2Digits)) { return cntNotValid; } // Check correct position of Thousand Seperator. If no thousand seperator then // everything is OK. if (intThousandSepPosition == -1) { return cntOK; } else { if (intDecimalSepPosition == -1) { intOffSet = 0 } else { intOffSet = 3 } // Check first thousandseperator (1.000) if (intThousandSepPosition == ((intAmountLength - intOffSet) - 4)) { // If another thousandseperator exist if (intThousandSepPosition != tempAmount.indexOf(cntThousandSep)) { // Check second thousandseperator (1.000.000) intThousandSepPosition = tempAmount.indexOf(cntThousandSep) if (intThousandSepPosition == ((intAmountLength - intOffSet) - 8)) { return cntOK; } else { return cntNotValid; } } else { return cntOK; } } else { return cntNotValid; } } } } else { return cntNotValid; } } else { return cntMissing; } } // Function checks if an year is valid (4 ciffers) // Input : String containing year (4 ciffers) // Output : Result // HUJx 21/06/00 function isYearValid(strYear) { // Definition of min. & max. year // Should be moved to commondefines var cntMinYear = 2000; var cntMaxYear = 2100; // Get length of string intYearLength = strYear.length; // Check if the string is empty if (intYearLength != 0) { // Check that the year got 4 ciffers (f.x. 2001) if (intYearLength == 4) { // Check if the string does not contain charaters beside numbers. if (isNumber(strYear, false, false, true)) { // Check that year is within a certain range if ((strYear >= cntMinYear) && (strYear <= cntMaxYear)) { return cntOK; } else { return cntNotValid; } } else { return cntNotValid; } } else { return cntNotValid; } } else { return cntMissing; } } // Function checks if a month is valid (1/2 ciffers) // Input : String containing month (1/2 ciffers) // Output : Validation result // HUJx 22/06/00 function isMonthValid(strMonth) { // Definition of min. & max. month // Should be moved to commondefines var cntMinMonth = 1; var cntMaxMonth = 12; // Get length of string intMonthLength = strMonth.length; // Check if the string is empty if (intMonthLength != 0) { // Check that the year got 1/2 ciffers (f.x. 2 or 02) if ((intMonthLength == 1) || (intMonthLength == 2)) { // Check if the string does not contain charaters beside numbers. if (isNumber(strMonth, false, false, true)) { // Check that year is within a certain range if ((strMonth >= cntMinMonth) && (strMonth <= cntMaxMonth)) { return cntOK; } else { return cntNotValid; } } else { return cntNotValid; } } else { return cntNotValid; } } else { return cntMissing; } } // Function checks if a Day is valid (1/2 ciffers) // Input : String containing Day (1/2 ciffers) // Output : Validation result // HUJx 22/06/00 function isDayValid(strDay) { // Definition of min. & max. Day // Should be moved to commondefines var cntMinDay = 1; var cntMaxDay = 31; // Get length of string intDayLength = strDay.length; // Check if the string is empty if (intDayLength != 0) { // Check that the year got 1/2 ciffers (f.x. 2 or 02) if ((intDayLength == 1) || (intDayLength == 2)) { // Check if the string does not contain charaters beside numbers. if (isNumber(strDay, false, false, true)) { // Check that year is within a certain range if ((strDay >= cntMinDay) && (strDay <= cntMaxDay)) { return cntOK; } else { return cntNotValid; } } else { return cntNotValid; } } else { return cntNotValid; } } else { return cntMissing; } } function isFreeOfSpecialChars(strText) { var arrayValidChars = new Array('A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z','Æ','Ø','Å','Ü','É','È','1','2','3','4','5','6','7','8','9','0',',','.','@','-','&','!','"','=','(',')','{','}',';','#','%','$','[',']','+','*','/',':','>','<','½','?',' ','\n','\r\n','\r','\\'); // Get length of string intTextLength = strText.length; for (intIndex = 0; intIndex < intTextLength; intIndex++) { strCurChar = strText.charAt(intIndex); charOK = false; for (intSecIndex = 0; intSecIndex < arrayValidChars.length; intSecIndex++) { if (arrayValidChars[intSecIndex] == strCurChar.toUpperCase()) { charOK = true; } } if (!(charOK)) { return false; } } return true; } // Function checks if a text is valid (Not empty) // Input : String containing text // Output : Validation result // HUJx 22/06/00 function isTextValid(strText) { // Get length of string intTextLength = strText.length; // Check if the string is empty if (intTextLength != 0) { // Check for special characters if (isFreeOfSpecialChars(strText)) { return cntOK; } else { return cntNotValid; } } else { return cntMissing; } } // Function checks if a text is valid (Not empty) // Input : String containing text // Output : Validation result // plgx 25/10/00 function isAllTextValid(strText) { // Get length of string intTextLength = strText.length; // Check if the string is empty if (intTextLength != 0 || strText.value != '') { return cntOK; } else { return cntMissing; } } // Function extracts value from a from // Input : Object to the form and the element name // Output : Value for the element // HUJx 20/06/00 function GetValue(objForm, strElementName) { if (!objForm.elements[strElementName]) return(''); // Get type of element strFormElementType = objForm.elements[strElementName].type; // Get value from form depended on type of the element if (strFormElementType == 'checkbox') { return(objForm.elements[strElementName].checked); } else { strFormElementValue = objForm.elements[strElementName].value; if (strFormElementValue == '') { return(''); } else { return(strFormElementValue); } } } // Output any error messages and returms boolean validation result // Inpurt : Validationn result and error messages for missing and not valid elements // Output : True / False // HUJx 22/06/00 function ReportErrors(intValidationResult, strErrorMissing, strErrorNotValid, objElement) { switch(intValidationResult) { case 2 : //cntMissing alert(strErrorMissing); if (objElement != null) objElement.focus(); return false; case 1 : // cntNotValid alert(strErrorNotValid); if (objElement != null) objElement.focus(); return false; case 0 : // cntOK return true; case 3 : // cntBadType alert('System error : Bad Type'); if (objElement != null) objElement.focus(); return false; default: alert('System error : Bad Type'); if (objElement != null) objElement.focus(); return false; } } // Function calls the correct validation depended on element type // Input : Element type and valie // Output : Validation result // HUJx 22/06/00 function PeformValidation(strElementType, strElementValue) { switch(strElementType) { case 100: //cntAmountType return isAmountValid(strElementValue); case 101: //cntTextType return isTextValid(strElementValue); case 102: //cntNumberType return isNumberValid(strElementValue); case 110: //cntDateType return isDateValid(strElementValue); case 111: //cntDayType return isDayValid(strElementValue); case 112: //cntMonthType return isMonthValid(strElementValue); case 113: //cntYearType return isYearValid(strElementValue); case 120: //cntEmailType return isEmailValid(strElementValue); case 121: //cntAllTextType return isAllTextValid(strElementValue); default: return cntBadType; } } // Function validates an element (OnChange) // Input : object pointing to element that needs validation // Output : True/False (Alerts with error messages) // HUJx 16/08/00 function isInputOK(objElement) { // Getting value and name strElementValue = objElement.value; strElementName = objElement.name; // Get number of elements to validate var intElementLength = arrayElementsForValidation.length; // Cycle through all the elements for (intIndex = 0; intIndex < intElementLength; intIndex++) { // Get object to the current validation array var objCurElement = arrayElementsForValidation[intIndex]; if (strElementName == objCurElement[cntElementName]) { var strElementType = objCurElement[cntElementType]; var intValidationResult = PeformValidation(strElementType, strElementValue); // Get error messages and report any errors var strErrorMissing = objCurElement[cntErrorMissing]; var strErrorNotValid = objCurElement[cntErrorNotValid]; var blnValidationOK = ReportErrors(intValidationResult, strErrorMissing, strErrorNotValid, objElement); if (!blnValidationOK) { //alert(objElement.focus); if (objElement.focus) { objElement.focus(); } } } } } // Function validates a form. // Input : object pointing to form that needs validation // Output : True/False (Alerts with error messages) // HUJx 20/06/00 function isValidationOK(objForm) { // Define variables var intIndex; // Index used when looping through all elements // Get number of elements to validate var intElementLength = arrayElementsForValidation.length; // Cycle through all the elements for (intIndex = 0; intIndex < intElementLength; intIndex++) { // Get object to the current validation array var objCurElement = arrayElementsForValidation[intIndex]; // Get Element type and value and peform validation var strElementType = objCurElement[cntElementType]; var strElementValue = GetValue(objForm, objCurElement[cntElementName]); var intValidationResult = PeformValidation(strElementType, strElementValue); // Get error messages and report any errors var strErrorMissing = objCurElement[cntErrorMissing]; var strErrorNotValid = objCurElement[cntErrorNotValid]; var blnValidationOK = ReportErrors(intValidationResult, strErrorMissing, strErrorNotValid, objForm.elements[objCurElement[cntElementName]]); // If validation was wrong then stop looping (Thereby only reporting one error) if (!blnValidationOK) { return false; } } // Return true if we looped through all elements whitout // failing in validation. return true; } function WindowClosed(objWindow) { if (objWindow) { if (objWindow.closed) { return true; } else { if (objWindow.focus) { objWindow.focus() } } return false; } else { return true; } } function rowdatasort(pform,strOrderby, strSortOrder) { with (pform) { portletaction.value="sort"; action.value="sort"; if (strSortOrder == "asc") strSortOrder = "desc"; else strSortOrder = "asc"; orderby.value=strOrderby+" "+strSortOrder; submit(); } } function printPage() { //if ( isMsie4orGreater() || isFirefox() ) { window.print(); window.focus(); /*} else { alert("Print fra menuen"); }*/ } function printPageAndCloseWindow(theWindow) { printPage(); theWindow.close(); } function isMsie4orGreater() { var ua = window.navigator.userAgent; var msie = ua.indexOf("MSIE "); if (msie > 0) { return (parseInt(ua.substring(msie + 5, ua.indexOf(".", msie)),10) >= 4); } else { return false; } } /* LFAX: AHD1460373 Print from Firefox. (B11 merge) Detect Firefox client */ function isFirefox() { var ua = window.navigator.userAgent; var firefox = ua.indexOf("Firefox"); return (firefox > 0) } /* MPRX: The setBlock function is used by the CheckFieldFilled function below to control change of focuse between fields properly. More below. */ function setBlock(blockValue){ fieldBlock = blockValue; } var fieldBlock = false; /* MPRX: Checks if a field is "filled", ie. has the defined amount of characters in it. There was a problem that a user doesn't release field1:key1 before pressing field1:key2 which resulted in field1:key1 in onKeyUp sends focus to field2, after which field1:key2 fires yet another onKeyUp, triggered while field2 has focus, resulting in focus being sent to field 3. The fix is to declare the fields like this: Fields that do not declare the onFocus and onKeyDown functions will work as before. */ function CheckFieldFilled(event, objCode, objNextField, intMaxLen){ var strField = objCode.value; if(fieldBlock){ setBlock(false); } else { if(strField.length == intMaxLen){ if (event && event.keyCode > 47) { objNextField.focus(); if (objNextField.type != "select-one" && objNextField.type != "select-multiple") objNextField.select(); } } } } function setFocusAndSelectField(fieldName) { setFocusOnField(fieldName); setSelectedOnField(fieldName); } function setFocusOnField(fieldName) { if (fieldName == null) return; if (fieldName.style.visibility == "hidden" || fieldName.style.visibility == "hide") return; switch (fieldName.type) { case "password" : case "text" : case "fileupload" : case "textarea" : case "button" : case "checkbox" : case "radio" : case "reset" : case "select-one" : case "select-multiple" : case "submit" : case "text" : case "window" : fieldName.focus(); } } function setSelectedOnField(fieldName) { if (fieldName == null) return; if (fieldName.style.visibility == "hidden" || fieldName.style.visibility == "hide") return; switch (fieldName.type) { case "password" : case "text" : case "fileupload" : case "textarea" : fieldName.select(); } } function replaceEuroChars(objText) { var EURO_SIGN = String.fromCharCode(8364); var oldValue = objText.value; var newValue = ""; var charPos = oldValue.indexOf(EURO_SIGN); while (charPos != -1) { newValue = newValue + oldValue.substr(0, charPos) + "€"; oldValue = oldValue.substr(charPos + 1, oldValue.length); charPos = oldValue.indexOf(EURO_SIGN); } newValue = newValue + oldValue; objText.value = newValue; return true; } function repaintApplet() { //MPRX: This is no longer to be used. It breaks the applet rather than fixes anything. //The style.visibility trick causes the applet to not repaint properly on some platforms. //Instead, a more intelligent hide/show strategy has been implemented in coolmenus. // // applet = document.getElementById("mainApplet"); // if(applet){ // applet.style.visibility="hidden"; // setTimeout("applet.style.visibility='visible'",300); // } } //This function opens a window for "total engagement" integration. We use this function //here rather than typing in the full call in CMD as the call is too long to fit in the //SQL server table.. function totalEngWin(portletType) { window.open('/package/sdc/external/totalengagement/totalEngagementLocation.jsp?portletname=totalengagement.totalengagement&portletaction=totalengagementlocation&portletTypeRuntime='+portletType,portletType+'Win','menubar,location,scrollbars, resizable, toolbar,status','width=800,height=600'); } /************************************************************ Coolmenus Beta 4.04 - Copyright Thomas Brattli - www.dhtmlcentral.com Last updated: 03.22.02 *************************************************************/ /*Browsercheck object*/ function cm_bwcheck(){ this.ver=navigator.appVersion this.agent=navigator.userAgent.toLowerCase() this.dom=document.getElementById?1:0 this.op5=(this.agent.indexOf("opera 5")>-1 || this.agent.indexOf("opera/5")>-1) && window.opera this.op6=(this.agent.indexOf("opera 6")>-1 || this.agent.indexOf("opera/6")>-1) && window.opera this.ie5 = (this.agent.indexOf("msie 5")>-1 && !this.op5 && !this.op6) this.ie55 = (this.ie5 && this.agent.indexOf("msie 5.5")>-1) this.ie6 = (this.agent.indexOf("msie 6")>-1 && !this.op5 && !this.op6) this.ie4=(this.agent.indexOf("msie")>-1 && document.all &&!this.op5 &&!this.op6 &&!this.ie5&&!this.ie6) this.ie = (this.ie4 || this.ie5 || this.ie6) this.mac=(this.agent.indexOf("mac")>-1) this.ns6=(this.agent.indexOf("gecko")>-1 || window.sidebar) this.ns4=(!this.dom && document.layers)?1:0; this.bw=(this.ie6 || this.ie5 || this.ie4 || this.ns4 || this.ns6 || this.op5 || this.op6) this.usedom= this.ns6//Use dom creation this.reuse = this.ie||this.usedom //Reuse layers this.px=this.dom&&!this.op5?"px":"" return this } var bw=new cm_bwcheck() /*Variable declaration*/ var cmpage,cm_eventlayer=0,cm_eventlayerE=0 /*Crossbrowser objects functions*/ function cm_message(txt){alert(txt); return false} function cm_makeObj(obj,nest,o){ if(bw.usedom&&o) this.evnt=o else{nest=(!nest) ? "":'document.layers.'+nest+'.' this.evnt=bw.dom? document.getElementById(obj): bw.ie4?document.all[obj]:bw.ns4?eval(nest+"document.layers." +obj):0; } if(!this.evnt) return cm_message('The layer does not exist ('+obj+')' +'- \nIf your using Netscape please check the nesting of your tags (on the entire page)\nNest:'+nest) this.css=bw.dom||bw.ie4?this.evnt.style:this.evnt; this.ok=0 this.ref=bw.dom||bw.ie4?document:this.css.document; this.obj = obj + "Object"; eval(this.obj + "=this"); this.x=0; this.y=0; this.w=0; this.h=0; this.vis=0; return this } cm_makeObj.prototype.moveIt = function(x,y){this.x=x;this.y=y; this.css.left=x+bw.px;this.css.top=y+bw.px} cm_makeObj.prototype.showIt = function(o){this.css.visibility="visible"; this.vis=1; if(bw.op5&&this.arr){ this.arr.showIt(); }}//alert('showing arrow')}} cm_makeObj.prototype.hideIt = function(no){this.css.visibility="hidden"; this.vis=0;} cm_makeObj.prototype.clipTo = function(t,r,b,l,setwidth){ this.w=r; this.h=b; if(bw.ns4){this.css.clip.top=t;this.css.clip.right=r; this.css.clip.bottom=b;this.css.clip.left=l }else{if(t<0)t=0;if(r<0)r=0;if(b<0)b=0;if(b<0)b=0; this.css.clip="rect("+t+bw.px+","+r+bw.px+","+b+bw.px+","+l+bw.px+")"; if(setwidth){if(bw.op5||bw.op6){this.css.pixelWidth=r; this.css.pixelHeight=b;}else{this.css.width=r+bw.px; this.css.height=b+bw.px;}}}} function cm_active(on,h){ if(this.o.arr) on?this.o.arr.hideIt():bw.op5?this.o.arr.showIt():this.o.arr.css.visibility="inherit" if(bw.reuse||bw.usedom){ if(!this.img2) this.o.evnt.className=on?this.cl2:this.cl else document.images["img"+this.name].src=on?this.img2.src:this.img1.src; if(on && bw.ns6){this.o.hideIt(); this.o.css.visibility='inherit' }; //netscape 6 bug fix }else{ if(!this.img2){ if(on) this.o.over.showIt(); else this.o.over.hideIt(); }else this.o.ref.images["img"+this.name].src=on?this.img2.src:this.img1.src; }this.isactive=on?1:0 } /***Pageobject **/ function cm_page(){ this.x=0; this.x2 =(!bw.ie)?window.innerWidth:document.body.offsetWidth-20; this.y=0; this.orgy=this.y2= (!bw.ie)?window.innerHeight:document.body.offsetHeight-6; this.x50=this.x2/2; this.y50=this.y2/2; return this } /***check positions**/ function cm_cp(num,w,minus){ if(num){if(num.toString().indexOf("%")!=-1){var t = w?cmpage.x2:cmpage.y2; num=parseInt((t*parseFloat(num)/100)) if(minus) num-=minus }else num=eval(num);} else num=0; return num } /**Level object**/ function cm_makeLevel(){ var c=this, a=arguments; c.width=a[0]||null; c.height=a[1]||null; c.regClass=a[2]||null; c.overClass=a[3]||null; c.borderX=a[4]||null; c.borderY=a[5]||null; c.borderClass=a[6]||null; c.rows=a[7]>-1?a[7]:null; c.align=a[8]||null; c.offsetX=a[9]||null; c.offsetY=a[10]||null; c.arrow=a[11]||null; c.arrowWidth=a[12]||null; c.arrowHeight=a[13]||null; return c } /***Making the main menu object**/ function makeCM(name){ var c=this; c.mc=0; c.name = name; c.m=new Array(); c.level=new Array(); c.l=new Array(); c.tim=100; c.isresized=0; c.isover=0; c.zIndex=100; c.bar=0; c.z=0; c.totw=0; c.toth=0; c.maxw=0; c.maxh=0; cmpage = new cm_page(); }//events makeCM.prototype.onshow=""; makeCM.prototype.onhide=""; makeCM.prototype.onconstruct=""; /***Creating layers**/ function cm_divCreate(id,cl,txt,w,c,app,ex,txt2){ if(bw.usedom){var div=document.createElement("DIV"); div.className=cl; div.id=id; if(txt) div.innerHTML=txt; if(app){app.appendChild(div); return div} if(w) document.body.appendChild(div); return div }else{var dstr='
',0,1) }str+='
'; if(l==0){if(arrow)str+=m.d3=cm_divCreate(id+'_a','clCMAbs','',0,1,d1); str+=""} str+="\n"; if(!bw.reuse){m.txt=null; m.d2=null; m.d3=null;} if(bw.usedom){ if(l==0) document.body.appendChild(d1); str=''} return str } /***get align num from text (better to evaluate numbers later)**/ function cm_checkalign(a){ switch(a){ case "right": return 1; break; case "left": return 2; break; case "bottom": return 3; break; case "top": return 4; break; case "righttop": return 5; break; case "lefttop": return 6; break; case "bottomleft": return 7; break; case "topleft": return 8; break; }return null } /**Making each individual menu **/ makeCM.prototype.makeMenu=function(name,parent,txt,lnk,targ,w,h,img1,img2,cl,cl2,align,rows,nolink,onclick,onmouseover,onmouseout){ var c = this; if(!name) name = c.name+""+c.mc; var p = parent!=""&&parent&&c.m[parent]?parent:0; if(c.mc==0){var tmp=location.href; if(tmp.indexOf('file:')>-1||tmp.charAt(1)==':') c.root=c.offlineRoot; else c.root=c.onlineRoot if(c.useBar){if(!c.barBorderClass) c.barBorderClass=c.barClass; c.bar1 = cm_divCreate(c.name+'bbar_0',c.barClass,'',0,1); c.bar = cm_divCreate(c.name+'bbar',c.barBorderClass,'',1,1,0,0,c.bar1); if(bw.usedom) c.bar.appendChild(c.bar1); }}var create=1,img,arrow; var m = c.m[name] = new Object(); m.name=name; m.subs=new Array(); m.parent=p; m.arnum=0; m.arr=0 var l = m.lev = p?c.m[p].lev+1:0; c.mc++; m.hide=0; if(l>=c.l.length){ var p1,p2=0; if(l>=c.level.length) p1=c.l[c.level.length-1]; else p1=c.level[l]; c.l[l]=new Array(); if(!p2) p2=c.l[l-1] if(l!=0){ if(isNaN(p1.align)) p1["align"]=cm_checkalign(p1.align) for(i in p1){if(i!="str"&&i!="m"){if(p1[i]==null) c.l[l][i]=p2[i]; else c.l[l][i]=p1[i] }} }else{c.l[l]=c.level[0]; c.l[l].align=cm_checkalign(c.l[l].align)} c.l[l]["str"]=''; c.l[l].m=new Array(); if(!c.l[l].borderClass) c.l[l].borderClass=c.l[l].regClass c.l[l].app=0; c.l[l].max=0; c.l[l].arnum=0; c.l[l].o=new Array(); c.l[l].arr=new Array() c.level[l]=p1=p2=null if(l!=0) c.l[l].str=c.l[l].app=cm_divCreate(c.name+ '_' +l+'_0',c.l[l].borderClass,'') }if(p){p = c.m[p]; p.subs[p.subs.length]=name; if(p.subs.length==1&&c.l[l-1].arrow){ p.arr=1; if(p.parent){c.m[p.parent].arnum++ if(c.m[p.parent].arnum>c.l[l-1].arnum){ c.l[l-1].str+=c.l[l-1].arr[c.l[l-1].arnum]=cm_divCreate(c.name+ '_a' +(l-1)+'_'+c.l[l-1].arnum,'clCMAbs','',0,1,c.l[l-1].app); c.l[l-1].arnum++ }}}if(bw.reuse) if(p.subs.length>c.l[l].max) c.l[l].max = p.subs.length; else create=0 }m.rows=rows>-1?rows:c.l[l].rows; m.w=cm_cp(w||c.l[l].width,1); m.h=cm_cp(h||c.l[l].height,0); m.txt=txt; m.lnk=lnk; if(align) align=cm_checkalign(align); m.align=align||c.l[l].align; m.cl=cl=cl||c.l[l].regClass; m.targ=targ; m.cl2=cl2||c.l[l].overClass; m.create=create; m.mover=onmouseover; m.out=onmouseout; m.onclck=onclick; m.active = cm_active; m.isactive=0; m.nolink=nolink if(create) c.l[l].m[c.l[l].m.length]=name if(img1){m.img1 = new Image(); m.img1.src=c.root+img1; if(!img2) img2=img1; m.img2 = new Image(); m.img2.src=c.root+img2; m.cl="clCMAbs"; m.txt=''; if(!bw.reuse&&!nolink) m.txt = '';; m.txt+='c.maxw) c.maxw=m.w; if(m.h>c.maxh) c.maxh=m.h; c.totw+=c.pxBetween+m.w+c.l[0].borderX;c.toth+=c.pxBetween+m.h+c.l[0].borderY} if(lnk && !onmouseover) m.mover="self.status='"+c.root+m.lnk+"'" } /**Getting x/y coords for subs **/ makeCM.prototype.getcoords=function(m,bx,by,x,y,maxw,maxh,ox,oy){ var a=m.align; x+=m.o.x; y+=m.o.y switch(a){ case 1: x+=m.w+bx; break; case 2: x-=maxw+bx; break; case 3: y+=m.h+by; break; case 4: y-=maxh+by; break; case 5: x-=maxw+bx; y-=maxh-m.h; break; case 6: x+=m.w+bx; y-=maxh-m.h; break; case 7: y+=m.h+by; x-=maxw-m.w; break; case 8: y-=maxh+by; x-=maxw-m.w+bx; break; }m.subx=x + ox; m.suby=y + oy } /**Showing sub elements**/ makeCM.prototype.showsub=function(el){ var c=this,pm=c.m[el]; if(!pm.b||(c.isresized&&pm.lev>0)) pm.b=c.l[pm.lev].b; c.isover=1 clearTimeout(c.tim); var ln=pm.subs.length,l=pm.lev+1 if(c.l[pm.lev].a==el&&l!=c.l.length){if(c.l[pm.lev+1].a) c.hidesub(l+1,el); return} c.hidesub(l,el); if(pm.mover) eval(pm.mover); if(!pm.isactive) pm.active(1); c.l[pm.lev].a = el; if(ln==0) return; var b = c.l[l].b, bx=c.l[l].borderX, by=c.l[l].borderY, rows=pm.rows var x=bx,y=by,maxw=0,maxh=0,cn=0; b.hideIt() for(var i=0;imaxw) maxw=m.w; maxh=y} else{x+=m.w+bx; if(m.h>maxh) maxh=m.h; maxw=x;} o.css.visibility="inherit"; if(bw.op5||bw.op6) o.showIt() }else{o = c.m[c.l[l].m[i]].o; o.hideIt();} } if(!rows) maxw+=bx*2; else maxh+=by*2; b.clipTo(0,maxw,maxh,0,1) if(!pm.subx||!pm.suby||c.srollY>0||c.isresized) c.getcoords(pm,c.l[l-1].borderX,c.l[l-1].borderY,pm.b.x,pm.b.y,maxw,maxh,c.l[l-1].offsetX,c.l[l-1].offsetY) x=pm.subx; y=pm.suby; b.moveIt(x,y); if(c.onshow) eval(c.onshow); b.showIt() } /**Hide sub elements **/ /**Modified by Michael Olsen Show applet when the menu is dropped up. **/ makeCM.prototype.hidesub=function(l,el){ if(l != 2 && el == undefined){ var applet = document.getElementById('mainApplet'); if(applet && applet.style.visibility != 'visible') { applet.style.visibility = 'visible'; } } var c = this,tmp,m,i,j if(!l){if(!l) l=1;} for(i=l-1;i0&&i>l-1) c.l[i].b.hideIt() if(c.l[i].a&&c.l[i].a!=el){ m=c.m[c.l[i].a]; m.active(0,1); if(m.mout) eval(m.mout); c.l[i].a=0 if(i>0&&i>l-1) if(bw.op5||bw.op6) for(j=0;jl){for(j=0;j0) document.body.appendChild(c.l[i].app) c.l[i].str=null //Probably need this on frames version though }}c.z=c.zIndex+2 for(i=0;i0){m.b = bobj; nest=i} else{m.b = new cm_makeObj(c.name + "_"+name+"_0","",m.d1); m.b.css.zIndex=c.z; m.b.clipTo(0,w+bx*2,h+by*2,0,1); nest=name} id = c.name + "_"+name; nest=c.name + "_"+nest; if(m.create){ o=m.o=new cm_makeObj(id,nest+"_0",m.d2); o.z=o.css.zIndex=c.z+1; if(bw.reuse){c.l[l].o[oc]=o; oc++}; if(l==0&&m.img1) o.css.visibility='inherit'; if(bw.op5) o.showIt(); o.arr=0; }if(!bw.reuse||l==0) o.clipTo(0,w,h,0,1); o.moveIt(bx,by); o.z=o.css.zIndex=c.z+2 if(j-1) mpa=1; break; }for(i=0;icmpage.x2+off || page2.y2>cmpage.orgy+off){ if(bw.ie||bw.ns6){ cmpage=page2; this.isresized=1; if(this.onresize) eval(this.onresize); this.construct(1); if(this.onafterresize) eval(this.onafterresize) }else{cm_inresize=1; location.reload()} } } /**Onclick of an item**/ makeCM.prototype.onclck=function(m){ m = this.m[m] if(m.onclck) eval(m.onclck); lnk=m.lnk; targ=m.targ if(lnk){ if(lnk.indexOf("mailto")!=0 && lnk.indexOf("http")!=0) lnk=this.root+lnk if(String(targ)=="undefined" || targ=="" || targ==0 || targ=="_self") location.href=lnk else if(targ=="_blank") window.open(lnk) else if(targ=="_top" || targ=="window") top.location.href=lnk else if(top[targ]) top[targ].location.href=lnk else if(parent[targ]) parent[targ].location.href=lnk }else return false } /** Added by Casper Gjerris **/ if(bw.ie || bw.ns6){ makeCM.prototype.findPos=function(obj) { var curleft = curtop = 0; if (obj && obj.offsetParent) { curleft = obj.offsetLeft curtop = obj.offsetTop while (obj = obj.offsetParent) { curleft += obj.offsetLeft curtop += obj.offsetTop } } return [curleft,curtop]; } //Hide applet implementation by MPRX. Only hides the applet when it collides with //a menu (or somewhat close to). Same strategy as for select boxes for a more robust //UI on troublesome OS/JVM/Browser combinations (eg. JRE1.4.2_09, IE6, Win2k) makeCM.prototype.onshow+=";this.hideSdcApplet(pm,pm.subx,pm.suby,maxw,maxh,pm.lev)" makeCM.prototype.hideSdcApplet=function(pm,x,y,w,h,l){ var sdcApplet = document.getElementById('mainApplet'); if(sdcApplet) { pos = this.findPos(sdcApplet); selx=pos[0]; sely=pos[1]; selw=sdcApplet.offsetWidth; selh=sdcApplet.offsetHeight; if(selx+selw > x && selx < x+w && sely+selh > y && sely < y+h) { if(sdcApplet.style.visibility != 'hidden') { sdcApplet.style.visibility = 'hidden'; } } else { if(sdcApplet.style.visibility != 'visible') { sdcApplet.style.visibility = 'visible'; } } } } makeCM.prototype.sel=0 makeCM.prototype.onshow+=";this.hideselectboxes(pm,pm.subx,pm.suby,maxw,maxh,pm.lev)" makeCM.prototype.hideselectboxes=function(pm,x,y,w,h,l){ var selx,sely,selw,selh,i if(!this.sel ||this.sel.length==0){ var count = 0; var elements = new Array(); //MPRX: If getElementsByTagName is supported (DOM 1), use it - its faster, //safer and prettier. if(document.getElementsByTagName) { elements = document.getElementsByTagName('select'); } else { for (i=0;ix && selxy && sely 0) { activeCounter--; lastAction = new Date().getTime(); frames['outputframe'].location.href = iframeUrl; } else { //If there's no prompt window already if(promptWindow == null || promptWindow.closed) { var top = (screen.availHeight - 130)/2; var left = (screen.availWidth - 300)/2; var style = "top="+top+",left="+left+",width=300,height=130"; promptWindow = window.open(articleUrl, "Bemærk", style); } promptWindow.focus(); } } //Poll every POLL_INTERVAL seconds setTimeout("logoffControl('"+articleUrl+"','"+logoffUrl+"','"+iframeUrl+"')", POLL_INTERVAL); } /* Called by the pop-up window when the user wishes to extend his session */ function buyTime() { lastAction = new Date().getTime(); activeCounter = initialCounter; promptWindow.close(); promptWindow = null; } function silentRefresh(url) { try { document.getElementById('devnull').innerHTML=""; } catch(e) { openPromptWindow(url+"?message=Kunne ikke opdatere automatisk - evt. en template fejl"); } }