Avatar billede vindermartin Nybegynder
30. maj 2001 - 20:42 Der er 19 kommentarer og
1 løsning

Problem med Java-Script

Hej

Jeg har udviklet et Java-Script, men kan nu ikke få det til at stå det rigtige sted. Det hele kan ses på www.zondo.dk/fjerbolden.
Problemet: Overmenuens kant skal være langs med undermenuens.
Avatar billede modec Nybegynder
30. maj 2001 - 21:30 #1
Om det er er problemet - ved jeg ikke, men det kan være en grund (smat kode):

<table border=\"0\" width=\"751\" cellspacing=\"0\" cellpadding=\"0\" bgcolor=\"#C0C0C0\">

<center>
<tr>
  <td valign=\"top\" width=\"159\" bgcolor=\"#FFFFFF\" nowrap><table cellspacing=\"0\" cellpadding=\"2\" border=\"0\" width=\"138\" bgcolor=\"#FF6600\">
<tr>
---------
Skal istedet være
<table border=\"0\" width=\"751\" cellspacing=\"0\" cellpadding=\"0\" bgcolor=\"#C0C0C0\" align=center>
<tr>
  <td valign=\"top\" width=\"159\" bgcolor=\"#FFFFFF\" nowrap><table cellspacing=\"0\" cellpadding=\"2\" border=\"0\" width=\"138\" bgcolor=\"#FF6600\">
<tr>
-------
eller:
<table border=\"0\" width=\"751\" cellspacing=\"0\" cellpadding=\"0\" bgcolor=\"#C0C0C0\" align=center>
<tr>
  <td valign=\"top\" width=\"159\" bgcolor=\"#FFFFFF\" nowrap align=center><table cellspacing=\"0\" cellpadding=\"2\" border=\"0\" width=\"138\" bgcolor=\"#FF6600\">
<tr>

(Afhængig af, hvad du vil have centreret...)
Avatar billede olebole Juniormester
30. maj 2001 - 21:47 #2
<ole>
tabermartin >> Du henvender dig på et site, der hedder Eksperten. Det navn er det i stand til at leve op til, bl.a. fordi der blandt brugerne er talrige, der lever af at lave det, de svarer på i dette forum.
Det er ved Gud ikke skuffens skarpeste kniv, der henvender sig et sådant sted med indgangsbønnen:
    \"Jeg har udviklet et JavaScript...\"
og derefter henviser til en side i hvis kode, der står:

/********************************************************************************
Copyright (C) Martin Birch m@birch.tc (Hver eneste e-mail tæller).
********************************************************************************/

Specielt ikke, når enhver bruger i denne kategori kender Thomas Brattli\'s koder til bevidstløshed...!

Normalt skriver man en copyright-notice for at kunne buste evt. rip-off\'ere. Det forekommer at være en anelse diminuitivt begavet at gøre det modsatte...!

Den glade nordmand har ganske gratis givet dig lov til at bruge det script, han (uagtet resultatets kvalitet) har svedt i mange timer for at producere. Det eneste, du skulle have gjort, var IKKE uretmæssigt at snylte på hans viden, kunnen og knokleri - ved at lade hans copyright-notice stå urørt. Så kunne du med den bedste samvittighed have brugt det på din side.
I stedet prøver du at tage æren for det - og derigennem smykke dig med en kunnen og viden, du ikke er besiddelse af. Det kan du sgu ikke være bekendt...!
</bole>
Avatar billede modec Nybegynder
30. maj 2001 - 22:04 #3
He he - ja du har ret Ole (omend du virker lidt hård)

TIP:
-> Iøvrigt kan det nævnes at javascript funktioner ikke bliver dobbelt så gode af at man indsætter dem 2 gange (i både .html, og .js fil)
..
Avatar billede olebole Juniormester
30. maj 2001 - 22:39 #4
Det kan man mene.
På den anden side har Brattli lavet et site, hvor han tilbyder gratis undervisning i DHTML.
Han tilbyder i bunkevis af løsninger, der typisk ville koste en tudse i timen at få udviklet på et bureau...og det tager trods alt en del timer...!
Man kan mene om hans kode praksis, hvad man vil, men der er ingen tvivl om, han har lagt en bunke viden ud og brugt en lind strøm af tid på det - ganske gratis. Det eneste, han beder om, er at du ikke sletter hans navn og copyright på de downloadede scripts.
Så ER det da tarveligt - ikke bare at slette dette, men - oven i købet at skrive sig selv som script\'er! Efter man lige har modtaget alle hans \'gaver\'.

Jeg lægger selv koder-snipper op til download, uden copyright. Jeg har heller ikke spor imod, folk sakser stumper af mine scripts derude - det har jeg selv gjort.
Jeg bliver til gengæld sur, hvis jeg ser et script med min eller kundens copyright på sakset og pasted i fuld længde - men med ny copyright!

Derudover er det jo altså buldrende ulovligt...!  :o)
Avatar billede modec Nybegynder
30. maj 2001 - 22:47 #5
Hvad hedder Brattli\'s site? tabermartin kan vel svare på dette?
Avatar billede olebole Juniormester
30. maj 2001 - 22:59 #6
Avatar billede olebole Juniormester
30. maj 2001 - 23:03 #7
Her er et par venlige sjæle mere, der også kan noget:
http://www.assembler.org/
http://www.ghtml.com/
Sidstnævnte har lavet en fin scroller.
Avatar billede vindermartin Nybegynder
31. maj 2001 - 22:55 #8
Undskyld mange gange at jeg har lavet noget der ligner en anden mands arbejde, men jeg har faktisk lavet det selv. Jeg kan så ikke gøre for at der er en anden der også har lavet det før mig.
Jeg fik ideen til at lave denne menu, da jeg så det på en side (kan ikke huske adressen).
Der er vil ikke noget forkert i at se en ting på en side og synes at det er sejt også lave det HELE selv. Vel??
Når jeg ser ting jeg kan bruge på nettet laver jeg dem altis selv, da jeg synes det er sjovere og man bliver mere stolt af det når man selv har lavet det.
Har i yderligere kommentarer?????
Avatar billede vindermartin Nybegynder
31. maj 2001 - 23:02 #9
Det som modec har foreslået virker ikke. Flere forslag??
Ellers tak for hjælpen modec
Avatar billede olebole Juniormester
31. maj 2001 - 23:27 #10
Har man ikke pære, må man ævle...!!!
Nu startede jeg vist også med at slå fast, at du ikke tilhørte skuffens skarpeste knive, men at du vil udstille din tåbelighed ved at påstå, du blot blev inspireret - that beats me...!
Her kommer først den kode, du har skrevet udfra en inspireret åbenbaring og derefter Brattli\'s egen version. Læg iøvrigt mærke til kommentarerne....du har VIRKELIG ladet dig inspirere! BaWahhhhhhh...........

===================================================================

//Default browsercheck, added to all scripts!
function checkBrowser(){
    this.ver=navigator.appVersion
    this.dom=document.getElementById?1:0
    this.ie5=(this.ver.indexOf(\"MSIE 5\")>-1 && this.dom)?1:0;
    this.ie4=(document.all && !this.dom)?1:0;
    this.ns5=(this.dom && parseInt(this.ver) >= 5) ?1:0;
    this.ns4=(document.layers && !this.dom)?1:0;
    this.bw=(this.ie5 || this.ie4 || this.ns4 || this.ns5)
    return this
}
bw=new checkBrowser()

//General variables
mainmenus=0; submenus=new Array()

/********************************************************************************
Object constructor and object functions
********************************************************************************/
function makePageCoords(){
    this.x=0;this.x2=(bw.ns4 || bw.ns5)?innerWidth:document.body.offsetWidth-20;
    this.y=0;this.y2=(bw.ns4 || bw.ns5)?innerHeight:document.body.offsetHeight-5;
    this.x50=this.x2/2;    this.y50=this.y2/2;
    return this;
}
function makeMenu(obj,nest,type,num,subnum,subsubnum){
    nest=(!nest) ? \'\':\'document.\'+nest+\'.\'
      this.css=bw.dom? document.getElementById(obj).style:bw.ie4?document.all[obj].style:bw.ns4?eval(nest+\"document.layers.\" +obj):0;                   
    this.evnt=bw.dom? document.getElementById(obj):bw.ie4?document.all[obj]:bw.ns4?eval(nest+\"document.layers.\" +obj):0;       
    this.height=bw.ns4?this.css.document.height:this.evnt.offsetHeight
    this.width=bw.ns4?this.css.document.width:this.evnt.offsetWidth
    this.moveIt=b_moveIt; this.bgChange=b_bgChange;   
    this.clipTo=b_clipTo;
    if(type==0){
        this.evnt.onmouseover=new Function(\"mmover(\"+num+\")\");
        this.evnt.onmouseout=new Function(\"mmout(\"+num+\")\");
    }else if(type==1){
        this.clipIn=b_clipIn;
        this.clipOut=b_clipOut;
        this.clipy=0
        if(bw.ns4 && menueventoff==\"mouse\"){
            this.evnt.onmouseout=new Function(\"setTimeout(\'if(!nssubover) hidemain(-1);\',50)\")
            this.evnt.onmouseover=new Function(\"nssubover=true\")
        }
    }else if(type==2){
        this.evnt.onmouseover=new Function(\"submmover(\"+num+\",\"+subnum+\")\");
        this.evnt.onmouseout=new Function(\"submmout(\"+num+\",\"+subnum+\")\");
    }else if(type==3){
        this.evnt.onmouseover=new Function(\"subsubmmover(\"+num+\",\"+subnum+\",\"+subsubnum+\")\");
        this.evnt.onmouseout=new Function(\"subsubmmout(\"+num+\",\"+subnum+\",\"+subsubnum+\")\");
    }
    this.tim=100
    this.obj = obj + \"Object\";     eval(this.obj + \"=this\")   
}
function b_clipTo(t,r,b,l,h){if(bw.ns4){this.css.clip.top=t;this.css.clip.right=r
this.css.clip.bottom=b;this.css.clip.left=l
}else{this.css.clip=\"rect(\"+t+\",\"+r+\",\"+b+\",\"+l+\")\";
if(h){ if(bw.ie4 || bw.ie5){ this.css.height=b; this.css.width=r}}}}
function b_moveIt(x,y){this.x=x; this.y=y; this.css.left=this.x;this.css.top=this.y}
function b_bgChange(color){if(bw.dom || bw.ie4) this.css.backgroundColor=color;
else if(bw.ns4) this.css.bgColor=color}
function b_clipIn(speed){
    if(this.clipy>0){
        this.clipy-=speed
        if(this.clipy<0) this.clipy=0
        this.clipTo(0,mainwidth,this.clipy,0,1)
        this.tim=setTimeout(this.obj+\".clipIn(\"+speed+\")\",10)
    }else{this.clipy=0; this.clipTo(0,mainwidth,this.clipy,0,1)}   
}
function b_clipOut(speed){
    if(this.clipy<this.clipheight){
        this.clipy+=speed
        this.clipTo(0,mainwidth,this.clipy,0,1)
        this.tim=setTimeout(this.obj+\".clipOut(\"+speed+\")\",10)
    }else{this.clipy=this.clipheight; this.clipTo(0,mainwidth,this.clipy,0,1)}
}
/********************************************************************************
Checking if the values are % or not.
********************************************************************************/
function checkp(num,lefttop){
    if(num.toString().indexOf(\"%\")!=-1){
        if(!lefttop){
            if(menurows)num=(page.x2*parseFloat(num)/100)
            else num=(page.y2*parseFloat(num)/100)
        }else{
            if(!lefttop) num=(page.x2*parseFloat(num)/100)
            else num=(page.y2*parseFloat(num)/100)
        }
    }else num=parseInt(num)
    return num
}
/********************************************************************************
Making menuobjects, placing them and clips them
********************************************************************************/

function menuInit(){
    page=new makePageCoords()
    mainwidth=checkp(mainwidth,0)
    mainheight=checkp(mainheight,1)
    subheight=checkp(subheight,1)
    if(backgroundbar){ //Backgroundbar part
        oBackgroundbar=new makeMenu(\'divBackgroundbar\',\'\',-1)
        oBackgroundbar.moveIt(checkp(backgroundbarfromleft,0),checkp(backgroundbarfromtop,1))
        if(menurows) oBackgroundbar.clipTo(0,checkp(backgroundbarsize),mainheight,0,1)
        else oBackgroundbar.clipTo(0,mainwidth,checkp(backgroundbarsize),0,1)
        oBackgroundbar.bgChange(backgroundbarcolor)
    }
    oMenu=new Array()
    x=checkp(fromleft,0); y=checkp(fromtop,1);
    for(i=0;i<mainmenus;i++){
        oMenu[i]=new makeMenu(\'divMenuMain\'+i,\'\',0,i)
        oMenu[i].clipTo(0,mainwidth,mainheight,0,1)
        if(menuplacement!=0){
            if(menurows) x=checkp(menuplacement[i])
            else y=checkp(menuplacement[i])
        }
        oMenu[i].moveIt(x,y)
        oMenu[i].bgChange(mainbgcoloroff)
        if(!menurows) y+=mainheight+checkp(pxbetween)
        else x+=mainwidth+checkp(pxbetween)
        if(submenus[i]!=\'nosub\'){
            oMenu[i].subs=new makeMenu(\'divMenuSub\'+i,\'\',1,i,-1)
            if(!menurows) oMenu[i].subs.moveIt(mainwidth+oMenu[i].x,oMenu[i].y)
            else oMenu[i].subs.moveIt(oMenu[i].x,oMenu[i].y+mainheight)
            suby=0;
            oMenu[i].sub=new Array()
            for(j=0;j<submenus[i][\"main\"];j++){
                oMenu[i].sub[j]=new makeMenu(\'divMenuSub\'+i+\'_\'+j,\'divMenuSub\'+i,2,i,j)
                oMenu[i].sub[j].clipTo(0,mainwidth,subheight,0,1)
                oMenu[i].sub[j].moveIt(0,suby)
                oMenu[i].sub[j].bgChange(subbgcoloroff)
                suby+=subheight
                if(submenus[i][\"submenus\"][j]>0){
                    subsuby=0
                    oMenu[i].sub[j].subs=new makeMenu(\'divMenuSub\'+i+\'_\'+j+\'_sub\',\'\',1,i,j)
                    oMenu[i].sub[j].subs.moveIt(oMenu[i].subs.x+mainwidth/2,oMenu[i].sub[j].y+oMenu[i].subs.y+10)
                    oMenu[i].sub[j].sub=new Array()
                    for(a=0;a<submenus[i][\"submenus\"][j];a++){
                        oMenu[i].sub[j].sub[a]=new makeMenu(\'divMenuSub\'+i+\'_\'+j+\'_sub\'+a,\'divMenuSub\'+i+\'_\'+j+\'_sub\',3,i,j,a)
                        oMenu[i].sub[j].sub[a].clipTo(0,mainwidth,subheight,0,1)
                        oMenu[i].sub[j].sub[a].moveIt(0,subsuby)
                        oMenu[i].sub[j].sub[a].bgChange(subsubbgcoloroff)
                        subsuby+=subheight
                    }
                    oMenu[i].sub[j].subs.clipTo(0,mainwidth,0,0,1)
                    oMenu[i].sub[j].subs.clipheight=subsuby
                }else oMenu[i].sub[j].subs=0
            }
            oMenu[i].subs.clipTo(0,mainwidth,0,0,1)
            oMenu[i].subs.clipheight=suby
        }else oMenu[i].subs=0
    }
    setTimeout(\"window.onresize=resized;\",500)
    if(menueventoff==\"mouse\") document.onmouseover=docover;
}
function resized(){
    page2=new makePageCoords()
    if(page2.x2!=page.x2 || page.y2!=page2.y2) location.reload()
}
/*********************************************************************************************
Mouseevents
*********************************************************************************************/
function docover(){hidemain(-1);}; var nssubover;
function mmover(num){
    oMenu[num].bgChange(mainbgcoloron)
    if(menueventon==\"mouse\") {menumain(num,1);}
    if(menueventoff==\"mouse\" || menueventon==\"mouse\"){if(bw.ie4 || bw.ie5) window.event.cancelBubble=true;}
}
function mmout(num){if(num>-1){ if(!stayoncolor || oMenu[num].subs==0 || menueventon==\"click\") oMenu[num].bgChange(mainbgcoloroff);} if(bw.ie4 || bw.ie5) window.event.cancelBubble=true;}
function submmover(num,subnum){
    oMenu[num].sub[subnum].bgChange(subbgcoloron)
    if(menueventon==\"mouse\") {menusub(num,subnum,1);}
    if(menueventoff==\"mouse\" || menueventon==\"mouse\"){if(bw.ie4 || bw.ie5) window.event.cancelBubble=true;}
}
function submmout(num,subnum){if(subnum>-1){nssubover=false; if(!stayoncolor || oMenu[num].sub[subnum].subs==0 || menueventon==\"click\") oMenu[num].sub[subnum].bgChange(subbgcoloroff)}}
function subsubmmover(num,subnum,subsubnum){
    oMenu[num].sub[subnum].sub[subsubnum].bgChange(subsubbgcoloron)
        if(menueventoff==\"mouse\" || menueventon==\"mouse\"){if(bw.ie4 || bw.ie5) window.event.cancelBubble=true;}
}
function subsubmmout(num,subnum,subsubnum){if(subnum>-1){nssubover=false; oMenu[num].sub[subnum].sub[subsubnum].bgChange(subsubbgcoloroff)}}
/*********************************************************************************************
Showing submenus
*********************************************************************************************/
function menumain(num,mouse){
    if(oMenu[num].subs!=0){
        clearTimeout(oMenu[num].subs.tim)
        if(oMenu[num].subs.clipy>=0 || mouse){
            hidemain(num); oMenu[num].subs.clipOut(menuspeed)
        }else if(oMenu[num].subs.clipy<=oMenu[num].subs.clipheight){
            hidemain(num); oMenu[num].subs.clipIn(menuspeed)
        }
    }
}
/*********************************************************************************************
Showing subsubmenus
*********************************************************************************************/
function menusub(num,sub,mouse){
    hidesubs(num,sub)
    if(oMenu[num].sub[sub].subs!=0){
        if(oMenu[num].sub[sub].subs.clipy==0 || mouse){
            oMenu[num].sub[sub].subs.clipOut(menusubspeed)
        }else if(oMenu[num].sub[sub].subs.clipy==oMenu[num].sub[sub].subs.clipy){
            oMenu[num].sub[sub].subs.clipIn(menusubspeed)
        }
    }
}
/*********************************************************************************************
Hides the other sub menuitems if any are shown. Also calls the hidesubs to hide any showing
submenus.
*********************************************************************************************/
function hidemain(num){
    for(i=0;i<oMenu.length;i++){
        if(oMenu[i].subs!=0){
            if(oMenu[i].subs.clipy<=oMenu[i].subs.clipheight){
                hidesubs(i,100)
                if(i!=num){
                    clearTimeout(oMenu[i].subs.tim)
                    if(stayoncolor) oMenu[i].bgChange(mainbgcoloroff)
                    if(menurows)oMenu[i].subs.clipIn(menuspeed)
                    else{oMenu[i].subs.clipy=0; oMenu[i].subs.clipTo(0,mainwidth,oMenu[i].subs.clipy,0,1)}
                }
            }
        }
    }
}
/*********************************************************************************************
Hides the other subsub menuitems if any are shown.
*********************************************************************************************/
function hidesubs(num,sub){
    for(j=0;j<oMenu[num].sub.length;j++){
        if(oMenu[num].sub[j].subs!=0 && j!=sub){
            if(oMenu[num].sub[j].subs.clipy<=oMenu[num].sub[j].subs.clipy
            || oMenu[num].subs.clipy<oMenu[num].subs.clipheight){
                clearTimeout(oMenu[num].sub[j].subs.tim)
                if(stayoncolor) oMenu[num].sub[j].bgChange(subbgcoloroff)
                oMenu[num].sub[j].subs.clipy=0
                oMenu[num].sub[j].subs.clipTo(0,mainwidth,oMenu[num].sub[j].subs.clipy,0,1)
            }
        }
    }
}
/*********************************************************************************************
These are the functions that writes the menus to the page.
*********************************************************************************************/
function makeMain(num,text,link){
    str=\"\"
    if(backgroundbar && num==0){str+=\'\\n<div id=\"divBackgroundbar\"></div>\\n\'}
    str+=\'<div id=\"divMenuMain\'+num+\'\" class=\"clMenuMain\">\'
    if(link){ str+=\'<a href=\"\'+link+\'\" class=\"clAMenuMain\">\'; submenus[num]=\'nosub\'
    }else str+=\'<a href=\"#\" class=\"clAMenuMain\" onclick=\"menumain(\'+num+\')\">\'
    str+=text+\'</a></div>\\n\'
    mainmenus++;
    document.write(str)
}
function makeSub(num,subnum,text,link,total){
    str=\"\"
    if(subnum==0) str=\'<div id=\"divMenuSub\'+num+\'\" class=\"clMenuSub\">\\n\'
    str+=\'\\t<div id=\"divMenuSub\'+num+\'_\'+subnum+\'\" class=\"clMenuSub1\">\'
    if(link) str+=\'<a href=\"\'+link+\'\" class=\"clAMenuSub\">\'; else str+=\'<a href=\"#\"  class=\"clAMenuSub\" onclick=\"menusub(\'+num+\',\'+subnum+\')\">\'
    str+=text+\'</a></div>\\n\'
    if(subnum==total-1){
        str+=\'</div>\\n\'; submenus[num]=new Array()
        submenus[num][\"main\"]=total; submenus[num][\"submenus\"]=new Array()
    }
    document.write(str)
}
function makeSubSub(num,subnum,subsubnum,text,link,total){
    str=\"\"
    if(subsubnum==0) str=\'<div id=\"divMenuSub\'+num+\'_\'+subnum+\'_sub\" class=\"clMenuSub\">\\n\'
    str+=\'\\t<div id=\"divMenuSub\'+num+\'_\'+subnum+\'_sub\'+subsubnum+\'\" class=\"clMenuSub1\">\'
    if(link) str+=\'<a href=\"\'+link+\'\" class=\"clAMenuSubSub\">\'; else str+=\'<a href=\"#\"  class=\"clAMenuSubSub\">\'
    str+=text+\'</a></div>\\n\'
    if(subsubnum==total-1){str+=\'</div>\\n\'; submenus[num][\"submenus\"][subnum]=total}
    document.write(str)
}
/*********************************************************************************************
END Menu script
*********************************************************************************************/

===============================================================================

/*******************************************************************************
Copyright (c) 1999 Thomas Brattli (www.bratta.com)

eXperience DHTML coolMenus - Get it at www.bratta.com
Version 1.0
This script can be used freely as long as all copyright messages are
intact. Visit www.bratta.com/dhtml for the latest version of the script.

This is the actual script page. You shouldn\'t really have to edit anything in
here.
*******************************************************************************/
//Default browsercheck, added to all scripts!
function checkBrowser(){
    this.ver=navigator.appVersion
    this.dom=document.getElementById?1:0
    this.ie5=(this.ver.indexOf(\"MSIE 5\")>-1 && this.dom)?1:0;
    this.ie4=(document.all && !this.dom)?1:0;
    this.ns5=(this.dom && parseInt(this.ver) >= 5) ?1:0;
    this.ns4=(document.layers && !this.dom)?1:0;
    this.bw=(this.ie5 || this.ie4 || this.ns4 || this.ns5)
    return this
}
var bw=new checkBrowser()

//Ie var
var explorerev=\'\'
/********************************************************************************
Object constructor and object functions
********************************************************************************/
function makePageCoords(){
    this.x=0;this.x2=(bw.ns4 || bw.ns5)?innerWidth:document.body.offsetWidth-20;
    this.y=0;this.y2=(bw.ns4 || bw.ns5)?innerHeight:document.body.offsetHeight-5;
    this.x50=this.x2/2;    this.y50=this.y2/2;
    return this;
}
function makeMenu(parent,obj,nest,type,num,subnum,subsubnum){
    nest=(!nest) ? \'\':\'document.\'+nest+\'.\'
      this.css=bw.dom? document.getElementById(obj).style:bw.ie4?document.all[obj].style:bw.ns4?eval(nest+\"document.layers.\" +obj):0;                   
    this.evnt=bw.dom? document.getElementById(obj):bw.ie4?document.all[obj]:bw.ns4?eval(nest+\"document.layers.\" +obj):0;       
    this.height=bw.ns4?this.css.document.height:this.evnt.offsetHeight
    this.width=bw.ns4?this.css.document.width:this.evnt.offsetWidth
    this.moveIt=b_moveIt; this.bgChange=b_bgChange;   
    this.clipTo=b_clipTo;
    this.parent=parent;
    this.active=0;
    this.nssubover=0
    if(type==0){
        this.evnt.onmouseover=new Function(\"mmover(\"+num+\",\"+this.parent.name+\")\");
        this.evnt.onmouseout=new Function(\"mmout(\"+num+\",\"+this.parent.name+\")\");
    }else if(type==1){
        this.clipIn=b_clipIn;
        this.clipOut=b_clipOut;
        this.clipy=0
        if((bw.ns5 || bw.ns4) && this.parent.menueventoff==\"mouse\"){ //Change for Netscape 6 ------------------------------------------------------------
            this.evnt.onmouseout=new Function(\"setTimeout(\'if(!\"+this.parent.name+\"[\"+num+\"].nssubover)\"+this.parent.name+\".hideactive(\"+num+\");\',100)\")
            this.evnt.onmouseover=new Function(this.parent.name+\"[\"+num+\"].nssubover=true\")
        }
    }else if(type==2){
        this.evnt.onmouseover=new Function(\"submmover(\"+num+\",\"+subnum+\",\"+this.parent.name+\")\");
        this.evnt.onmouseout=new Function(\"submmout(\"+num+\",\"+subnum+\",\"+this.parent.name+\")\");
    }else if(type==3){
        this.evnt.onmouseover=new Function(\"subsubmmover(\"+num+\",\"+subnum+\",\"+subsubnum+\",\"+this.parent.name+\")\");
        this.evnt.onmouseout=new Function(\"subsubmmout(\"+num+\",\"+subnum+\",\"+subsubnum+\",\"+this.parent.name+\")\");
    }
    this.tim=100
    this.obj = obj + \"Object\";     eval(this.obj + \"=this\")   
    return this
}
function b_clipTo(t,r,b,l,h){if(bw.ns4){this.css.clip.top=t;this.css.clip.right=r
this.css.clip.bottom=b;this.css.clip.left=l; this.clipx=r;
}else{this.css.clip=\"rect(\"+t+\",\"+r+\",\"+b+\",\"+l+\")\"; this.clipx=r;;
if(h){ if(!bw.ns4){ this.css.height=b; this.css.width=r}}}} //CHANGE DONE FOR NETSCAPE 6 --------------------------------------------------------------------------------------------------------------------
function b_moveIt(x,y){this.x=x; this.y=y; this.css.left=this.x;this.css.top=this.y}
function b_bgChange(color){if(bw.dom || bw.ie4) this.css.backgroundColor=color;
else if(bw.ns4) this.css.bgColor=color}
function b_clipIn(speed){
    if(this.clipy>-speed){ //CHANGE DONE FOR NETSCAPE 6 ---------------------------------------------------------------------------
        this.clipy-=speed
        if(this.clipy<0) this.clipy=0
        this.clipTo(0,this.clipx,this.clipy,0,1)
        this.tim=setTimeout(this.obj+\".clipIn(\"+speed+\")\",10)
    }else{this.clipy=0; this.clipTo(0,this.clipx,this.clipy,0,1)}   
}
function b_clipOut(speed){
    if(this.clipy<this.clipheight+10){ //CHANGE DONE FOR NETSCAPE 6 ---------------------------------------------------------------------------
        this.clipy+=speed
        this.clipTo(0,this.clipx,this.clipy,0,1)
        this.tim=setTimeout(this.obj+\".clipOut(\"+speed+\")\",10)
    }else{this.clipy=this.clipheight+10; this.clipTo(0,this.clipx,this.clipy,0,1)}  //CHANGE DONE FOR NETSCAPE 6 ---------------------------------------------------------------------------
}
//Page variable, holds the width and height of the document. (see documentsize tutorial on bratta.com/dhtml)
var page=new makePageCoords()

/********************************************************************************
Checking if the values are % or not.
********************************************************************************/
function checkp(num,lefttop){
    if(num){
        if(num.toString().indexOf(\"%\")!=-1){
            if(this.menurows)num=(page.x2*parseFloat(num)/100)
            else num=(page.y2*parseFloat(num)/100)
        }else num=parseFloat(num)
    }else num=0
    return num
}
/********************************************************************************
Menu object, constructing menu ++
********************************************************************************/
function menuObj(name){
    this.makeStyle=makeStyle;
    this.makeMain=makeMain;
    this.makeSub=makeSub;
    this.makeSubSub=makeSubSub
    this.mainmenus=0;
    this.submenus=new Array()
    this.construct=constructMenu;
    this.checkp=checkp;
    this.name=name;
    this.menumain=menumain;
    this.hidemain=hidemain;
    this.hideactive=hideactive;
    this.menusub=menusub;
    this.hidesubs=hidesubs;
}
function constructMenu(){
    bw=new checkBrowser()
    page=new makePageCoords()
    //Checking numbers for %
    this.mainwidth=checkp(this.mainwidth,0)
    this.mainheight=checkp(this.mainheight,1)
    this.subplacement=checkp(this.subplacement,1)
    this.subwidth=checkp(this.subwidth,0)
    this.subheight=checkp(this.subheight,1)
    this.subsubwidth=checkp(this.subsubwidth,0)
    this.subsubheight=checkp(this.subsubheight,1)
    this.subsubXplacement=checkp(this.subsubXplacement,1)
    this.subsubYplacement=checkp(this.subsubYplacement,1)
    if(this.backgroundbar){ //Backgroundbar part
        this.oBackgroundbar=new makeMenu(this,\'div\'+this.name+\'Backgroundbar\',\'\',-1)
        this.oBackgroundbar.moveIt(this.checkp(this.backgroundbarfromleft,0),this.checkp(this.backgroundbarfromtop,1))
        if(this.menurows) this.oBackgroundbar.clipTo(0,this.checkp(this.backgroundbarsize),this.mainheight,0,1)
        else this.oBackgroundbar.clipTo(0,this.mainwidth,this.checkp(this.backgroundbarsize),0,1)
        this.oBackgroundbar.bgChange(this.backgroundbarcolor)
    }
    this.x=this.checkp(this.fromleft,0); this.y=this.checkp(this.fromtop,1);
    for(i=0;i<this.mainmenus;i++){
        this[i]=new makeMenu(this,\'div\'+this.name+\'Main\'+i,\'\',0,i)
        this[i].clipTo(0,this.mainwidth,this.mainheight,0,1)
        if(this.menuplacement!=0){
            if(this.menurows) this.x=this.checkp(this.menuplacement[i])
            else this.y=this.checkp(this.menuplacement[i])
        }
        this[i].moveIt(this.x,this.y)
        this[i].bgChange(this.mainbgcoloroff)
        if(!this.menurows) this.y+=this.mainheight+this.checkp(this.pxbetween)
        else this.x+=this.mainwidth+this.checkp(this.pxbetween)
        if(this.submenus[i]!=\'nosub\'){
            this[i].subs=new makeMenu(this,\'div\'+this.name+\'Sub\'+i,\'\',1,i,-1)
            if(!this.menurows) this[i].subs.moveIt(this.subplacement+this[i].x,this[i].y)
            else this[i].subs.moveIt(this[i].x,this[i].y+this.subplacement)
            this.suby=0;
            this[i].sub=new Array()
            for(j=0;j<this.submenus[i][\"main\"];j++){
                this[i].sub[j]=new makeMenu(this,\'div\'+this.name+\'Sub\'+i+\'_\'+j,\'div\'+this.name+\'Sub\'+i,2,i,j)
                this[i].sub[j].clipTo(0,this.subwidth,this.subheight,0,1)
                this[i].sub[j].moveIt(0,this.suby)
                this[i].sub[j].bgChange(this.subbgcoloroff)
                this.suby+=this.subheight
                if(this.submenus[i][\"submenus\"][j]>0){
                    this.subsuby=0
                    this[i].sub[j].subs=new makeMenu(this,\'div\'+this.name+\'Sub\'+i+\'_\'+j+\'_sub\',\'\',1,i,j)
                    this[i].sub[j].subs.moveIt(this[i].subs.x+this.subsubXplacement,this[i].subs.y+this[i].sub[j].y+this.subsubYplacement)
                    this[i].sub[j].sub=new Array()
                    for(a=0;a<this.submenus[i][\"submenus\"][j];a++){
                        this[i].sub[j].sub[a]=new makeMenu(this,\'div\'+this.name+\'Sub\'+i+\'_\'+j+\'_sub\'+a,\'div\'+this.name+\'Sub\'+i+\'_\'+j+\'_sub\',3,i,j,a)
                        this[i].sub[j].sub[a].clipTo(0,this.subsubwidth,this.subsubheight,0,1)
                        this[i].sub[j].sub[a].moveIt(0,this.subsuby)
                        this[i].sub[j].sub[a].bgChange(this.subsubbgcoloroff)
                        this.subsuby+=this.subsubheight
                    }
                    this[i].sub[j].subs.clipTo(0,this.subsubwidth,0,0,1)
                    this[i].sub[j].subs.clipheight=this.subsuby
                }else this[i].sub[j].subs=0
            }
            this[i].subs.clipTo(0,this.subwidth,0,0,1)
            this[i].subs.clipheight=this.suby
        }else this[i].subs=0
    }
    setTimeout(\"window.onresize=resized;\",500)
    if(this.menueventoff==\"mouse\"){
        if(!bw.ns5 && !bw.ns4){explorerev+=this.name+\".hidemain(-1);\" //CHANGE NETSCAPE 6 -------------------------------
        document.onmouseover=new Function(explorerev)}//CHANGE NETSCAPE 6 --------------------------------------------------------------
    }
}
function resized(){
    page2=new makePageCoords()
    if(page2.x2!=page.x2 || page.y2!=page2.y2) location.reload()
}

/*********************************************************************************************
Mouseevents (name==this (as in made object, not the event \"this\"))
*********************************************************************************************/
function cancelEv(){
    if(bw.ie4 || bw.ie5) window.event.cancelBubble=true
}
function mmover(num,name){
    name[num].bgChange(name.mainbgcoloron)
    if(name.menueventon==\"mouse\") name.menumain(num,1)
    name[num].nssubover=true
    cancelEv()
}
function mmout(num,name){
    if(!isNaN(num)){
        if(name[num].subs==0 || !name.stayoncolor || !name[num].active)
        name[num].bgChange(name.mainbgcoloroff);
        name[num].nssubover=false
        if(name.menueventoff==\"mouse\") if(bw.ns4) setTimeout(\"if(!\"+name.name+\"[\"+num+\"].nssubover) \"+name.name+\".hideactive(\"+num+\")\",100)
    }
    cancelEv()
}
function submmover(num,subnum,name){
    name[num].sub[subnum].bgChange(name.subbgcoloron)
    if(name.menueventon==\"mouse\") {name.menusub(num,subnum,1)}
    name[num].nssubover=true
    cancelEv()
}
function submmout(num,subnum,name){
    if(!isNaN(subnum)){
        name[num].nssubover=false;
        if(!name.stayoncolor || !name[num].sub[subnum].active || name[num].sub[subnum].subs==0)
        name[num].sub[subnum].bgChange(name.subbgcoloroff)
    }
    cancelEv()
}
function subsubmmover(num,subnum,subsubnum,name){
    if(!isNaN(subnum)){
        name[num].sub[subnum].sub[subsubnum].bgChange(name.subsubbgcoloron);
        name[num].nssubover=true
    }
    cancelEv()
}
function subsubmmout(num,subnum,subsubnum,name){
    if(!isNaN(subnum)){
        name[num].nssubover=false;
        name[num].sub[subnum].sub[subsubnum].bgChange(name.subsubbgcoloroff)
    }
    cancelEv()
}
/*********************************************************************************************
Showing submenus
*********************************************************************************************/
function menumain(num,mouse){
    if(this[num].subs!=0){
        clearTimeout(this[num].subs.tim)
        if(this[num].subs.clipy==0 || mouse){
            this.hidemain(num); this[num].subs.clipOut(this.menuspeed); this[num].active=1
        }else{
            this.hidemain(-1); this[num].active=0
        }
    }
}
/*********************************************************************************************
Showing subsubmenus
*********************************************************************************************/
function menusub(num,sub,mouse){
    this.hidesubs(num,sub)
    if(this[num].sub[sub].subs!=0){
        if(this[num].sub[sub].subs.clipy==0 || mouse){
            this[num].sub[sub].active=1
            this[num].sub[sub].subs.clipOut(this.menusubspeed)
        }else{
            this[num].sub[sub].active=0
            this[num].sub[sub].subs.clipIn(this.menusubspeed)
        }
    }
}
/*********************************************************************************************
Hides the other sub menuitems if any are shown. Also calls the hidesubs to hide any showing
submenus.
*********************************************************************************************/
function hidemain(num){
    for(i=0;i<this.mainmenus;i++){
        if(this[i].subs!=0){
            if(this[i].subs.clipy<=this[i].subs.clipheight+10){
                this.hidesubs(i,100)
                if(i!=num){
                    clearTimeout(this[i].subs.tim)
                    this[i].active=0
                    this[i].bgChange(this.mainbgcoloroff)
                    if(this.menurows)this[i].subs.clipIn(this.menuspeed)
                    else{this[i].subs.clipy=0; this[i].subs.clipTo(0,this[i].subs.clipx,this[i].subs.clipy,0,1)}
                }
            }
        }else this[i].bgChange(this.mainbgcoloroff)
    }
}
/*********************************************************************************************
Hides the active submenuitems
*********************************************************************************************/
function hideactive(num){
    if(this[num].subs!=0){
        this.hidesubs(num,100)
        clearTimeout(this[num].subs.tim)
        this[num].active=0
        this[num].bgChange(this.mainbgcoloroff)
        if(this.menurows)this[num].subs.clipIn(this.menuspeed)
        else{this[num].subs.clipy=0; this[num].subs.clipTo(0,this[num].subs.clipx,this[num].subs.clipy,0,1)}
    }
}
/*********************************************************************************************
Hides the other subsub menuitems if any are shown.
*********************************************************************************************/
function hidesubs(num,sub){
    for(j=0;j<this[num].sub.length;j++){
        if(this[num].sub[j].subs!=0 && j!=sub){
            if(this[num].sub[j].subs.clipy<=this[num].sub[j].subs.clipy
            || this[num].subs.clipy<this[num].subs.clipheight){
                clearTimeout(this[num].sub[j].subs.tim)
                this[num].sub[j].active=0
                this[num].sub[j].bgChange(this.subbgcoloroff)
                this[num].sub[j].subs.clipy=0
                this[num].sub[j].subs.clipTo(0,this[num].sub[j].subs.clipx,this[num].sub[j].subs.clipy,0,1)
            }
        }
    }
}
/*********************************************************************************************
These are the functions that writes the style and menus to the page.
*********************************************************************************************/
function makeStyle(){
    str=\'\\n<style type=\"text/css\">\\n\'
    //CHANGE DONE FOR NETSCAPE 6 (removed the copyright line)--------------------------------------------------------------------------------------------------------------------
    str+=\'\\tDIV.cl\'+this.name+\'Main{position:absolute; z-index:51; clip:rect(0,0,0,0); overflow:hidden; width:\'+(this.mainwidth-10)+\'; \'+this.clMain+\'}\\n\'
    str+=\'\\tDIV.cl\'+this.name+\'Sub{position:absolute; z-index:52; clip:rect(0,0,0,0); overflow:hidden; width:\'+(this.subwidth-10)+\'; \'+this.clSub+\'}\\n\'
    str+=\'\\tDIV.cl\'+this.name+\'SubSub{position:absolute; z-index:54; clip:rect(0,0,0,0); width:\'+(this.subsubwidth-10)+\'; \'+this.clSubSub+\'}\\n\'
    str+=\'\\tDIV.cl\'+this.name+\'Subs{position:absolute; z-index:53; clip:rect(0,0,0,0); overflow:hidden}\\n\'
    str+=\'\\t#div\'+this.name+\'Backgroundbar{position:absolute; z-index:50; clip:rect(0,0,0,0); overflow:hidden}\\n\'
    str+=\'\\tA.clA\'+this.name+\'Main{\'+this.clAMain+\'}\\n\'
    str+=\'\\tA.clA\'+this.name+\'Sub{\'+this.clASub+\'}\\n\'
    str+=\'\\tA.clA\'+this.name+\'SubSub{\'+this.clASubSub+\'}\\n\'
    str+=\'</style>\\n\\n\'
    document.write(str)
}
function makeMain(num,text,link,target){
    str=\"\"
    if(this.backgroundbar && num==0){str+=\'\\n<div id=\"div\'+this.name+\'Backgroundbar\"></div>\\n\'}
    str+=\'<div id=\"div\'+this.name+\'Main\'+num+\'\" class=\"cl\'+this.name+\'Main\">\'
    if(link){ str+=\'<a href=\"\'+link+\'\"\'; this.submenus[num]=\'nosub\'
    }else str+=\'<a href=\"#\" onclick=\"\'+this.name+\'.menumain(\'+num+\'); return false\"\'
    if(target) str+=\' target=\"\'+target+\'\" \'
    str+=\' class=\"clA\'+this.name+\'Main\">\'+text+\'</a></div>\\n\'
    this.mainmenus++;
    document.write(str)
}
function makeSub(num,subnum,text,link,total,target){
    str=\"\"
    if(subnum==0) str=\'<div id=\"div\'+this.name+\'Sub\'+num+\'\" class=\"cl\'+this.name+\'Subs\">\\n\'
    str+=\'\\t<div id=\"div\'+this.name+\'Sub\'+num+\'_\'+subnum+\'\" class=\"cl\'+this.name+\'Sub\">\'
    if(link) str+=\'<a href=\"\'+link+\'\"\'; else str+=\'<a href=\"#\" onclick=\"\'+this.name+\'.menusub(\'+num+\',\'+subnum+\'); return false\"\'
    if(target) str+=\' target=\"\'+target+\'\" \'
    str+=\' class=\"clA\'+this.name+\'Sub\">\'+text+\'</a></div>\\n\'
    if(subnum==total-1){
        str+=\'</div>\\n\'; this.submenus[num]=new Array()
        this.submenus[num][\"main\"]=total; this.submenus[num][\"submenus\"]=new Array()
    }
    document.write(str)
}
function makeSubSub(num,subnum,subsubnum,text,link,total,target){
    str=\"\"
    if(subsubnum==0) str=\'<div id=\"div\'+this.name+\'Sub\'+num+\'_\'+subnum+\'_sub\" class=\"cl\'+this.name+\'Subs\">\\n\'
    str+=\'\\t<div id=\"div\'+this.name+\'Sub\'+num+\'_\'+subnum+\'_sub\'+subsubnum+\'\" class=\"cl\'+this.name+\'SubSub\">\'
    if(link) str+=\'<a href=\"\'+link+\'\"\'; else str+=\'<a href=\"#\"\'
    if(target) str+=\' target=\"\'+target+\'\" \'
    str+=\' class=\"clA\'+this.name+\'SubSub\">\'+text+\'</a></div>\\n\'
    if(subsubnum==total-1){str+=\'</div>\\n\'; this.submenus[num][\"submenus\"][subnum]=total}
    document.write(str)
}
/*********************************************************************************************
END Menu script
*********************************************************************************************/
Avatar billede olebole Juniormester
31. maj 2001 - 23:32 #11
\"Der er vil ikke noget forkert i at se en ting på en side og synes at det er sejt også lave det HELE selv. Vel??\"

Nej, det har du ret i, Martin - men det her er totalt ripp-off...! Du har ikke skrevet 10 linier af denne kode selv...!

DERFOR er du en ussel platugle, når du sætter din egen copyright-notice på en anden mands arbejde.

That\'s it - and that\'s that...!!!
Avatar billede vindermartin Nybegynder
01. juni 2001 - 21:31 #12
OK selvom jeg har lavet det hele selv vil jeg da gerne indrømme at det ligner denne persons arbejde hvis det virkelig er en person der findes. Hvis han kan bevise at han har lavet den gør mig vil jeg da gerne sætte hans navn på i stedet for mit.

Nå, men jeg skrev faktisk ikke dette spørgsmål for at blive belært om hvad jeg har lvaet selv om hvad jeg ikke har. Jeg skrev for at få hjælp. Jeg havde hørt at eksperten.dk skulle være en af de bedste sider, men det er det så åbenbart ikke. Her bliver man bare svinet til og bare fordi man har skrevet de samme kommentarer så det er nemmere at finde rundt i scriptet er jeg lige pludselig, så mange ting som ikke kan stå på siden

Kan man overhovedet få svar på et man spørger om her??????
Avatar billede olebole Juniormester
03. juni 2001 - 21:29 #13
NEJ...DET kan du sgu ikke med den opførsel.
Du er rundt regnet så begavet som en 16 mm spånplade, hvis du stadig vil påstå, du har lavet det script selv...!!!

Én ting er, du er dum som en dør (og en platugle af dimensioner), men at du samtidig beskylder os for at være endnu dummere - DER sætter jeg grænsen...!!!
Kommentarerne er én ting, du tydelig har kopieret - men det er jo hele koden, som den så ud i versionen, før Brattli fik korrigeret for NS6, du har skrevet af! Måske, du ikke selv kan se det, men det kan VI - på den anden side: Vi kan jo også programmere...!!!

Hvis man er i stand til at skrive dette script, er det \'a piece of cake\' at placere menuen korrekt. Du må da - hvis du selv har skrevet koden - vide, hvor i koden det er, du placerer menuen. Det er vi mange andre her på Eksperten, der kan se - og vi har ikke engang skrevet den.

Du spørger: \"Kan man overhovedet få svar på et man spørger om her??????\"
Svaret er: Ja det kan man sagtens - hvis man overholder et minimum af god opførsel. Du - derimod - skal nok ikke regne med at få hjælp her...EVER...!!!

Hvis der havde været 1/2 gram mandfolk i dig, havde du indrømmet din fejl med det samme - og du havde fået al den hjælp, du skulle bruge. Nu kan du se frem til et slagsmål med Thomas Brattli, der er blevet informeret om dit plat og svindel...!!!
Avatar billede spacey Nybegynder
03. juni 2001 - 23:39 #14
tabermartin, du er da fandeme da ikke det spidseste søm i pakken!

Og at du kan blive ved med at påstå at du har skrevet det script viser da bare at din viden om javascript svarer til en nytfødt frøs viden om hvordan forholdsordene ünter, neben og über bøjes så selv min oldgamle tysklærer er tilfreds!

Enhver idiot ved da at variabelnavne, objektnavne, kommentarer osv. er så individuelle at det slet ikke ville være muligt at du ved en tilfældighed har fremstillet det samme som Thomas Brattli.

Get af brain morris!

//Jens
Avatar billede spacey Nybegynder
03. juni 2001 - 23:41 #15
Get A brain morris - even!
Ved ikke lige hvordan det f havde kæmpet sig ind der :-)
Avatar billede vindermartin Nybegynder
06. juni 2001 - 21:51 #16
Ok jeg indrømmer jeg har ikke lavet andet end selve java-scriptet. Resten har en af mine venner, som arbejder for CNN lavet. Jeg kunne ikke kontakte ham da han var på ferie i Australien. Derfor tænkte jeg at jeg kunne spørge jer, men jeg har fået det rette nu så glem alt dette.
Avatar billede spacey Nybegynder
06. juni 2001 - 21:58 #17
Nu lyver du jo igen!!!
Det hele sagen handler om er jo netop at du har hugget Javascriptet, og ikke skrevet det selv!!!

Taber!
Avatar billede olebole Juniormester
06. juni 2001 - 22:52 #18
Rundt regnet det bedste sted at ha\' sit alibi, når man har sat sig på komfuret.
Til gengæld er klaphatten ikke det smarteste sted at opbevare babymos - sku\' jeg hilse og sige fra én af mine venner...der arbejder i DSB...!!!

...hvo\'n fa\'en laver man en Smiley, der kaster op på skærmen af grin...?!?
Avatar billede vindermartin Nybegynder
14. juni 2001 - 19:39 #19
F*ck jer alle sammen. Problemet er løst og hvis der er så mange problemer fjerner jeg det da bare fra min side. Ligeså snart jeg har fået mit logo til at passe ordentligt ind på siden.

Endnu en gang mange mange mange mange mange tak for \"hjælpen\".
Avatar billede olebole Juniormester
14. juni 2001 - 20:33 #20
Lær at opføre dig ordentligt, Padde...! Hvis det er dig muligt, har du store muligheder for at få hjælp her.
Det har du til gengæld ikke, når du scorer folks koder...og oveni købet prøver at fylde os - som du forventer skal hjælpe dig - med totalt fantasiforladte løgne. Løgne der er så platte og åbenlyse, at selve troen på de \'går i gennem\' er en fornærmelse mod enhver, der har større IQ end skonummer...!!!
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester