//Die möglichen Keys der properties von MenuItem
OBJECTNAME = "objectName"; //Der Name der Item-Instanz
MENUCODE = "iMenuCode"; //Der Menücode
HREF = "href";  //Der aufzurufende Seite
NAME_SHOWN = "name_shown"; //Der Name, der im Link angezeigt werden soll
NAME_IMAGE = "name_image"; //Der Name für das Image-Tag
NAME_IMAGE_TEXT = "name_image_text"; //Der Name für das Image-Tag des Text-Images
NAME_ANCHOR = "name_anchor"; //Der Name für das Anchor-Tag mit der href
IMAGE_INACT = "image_inact"; //Das Image für den inaktiven Zustand
IMAGE_HI = "image_hi"; //Das Image für den high-light-Zustand
IMAGE_ACT = "image_act"; //Das Image für den aktiven Zustand
IMAGE_TEXT_INACT = "image_text_inact"; //Das Text-Image für den inaktiven Zustand
IMAGE_TEXT_HI = "image_text_hi";  //Das Text-Image für den high-light-Zustand
IMAGE_TEXT_ACT = "image_text_act"; //Das Text-Image für den aktiven Zustand
CSS_INACT = "css_inact"; //Der Css-Klassen-Name für den inaktiven Zustand
CSS_HI = "css_hi"; //Der Css-Klassen-Name für den high-light-Zustand
CSS_ACT = "css_act";  //Der Css-Klassen-Name für den aktiven Zustand
WHICH_FRAME = "whichFrame"; //Gibt an, in welchen Framen das Item gesetzt werden soll
ITEM_EXECUTIVE = "item_executive"; //Referenz auf das eigentlich ausführende Item
//Die variablen Felder
CURRENT_INDEX_VAR = "currentIndex_var"; //Der Array-Index im aktuellen (flachen) Menü-Array
IMAGE_VAR = "image_var";  //Das aktuelle Image 
IMAGE_TEXT_VAR = "image_text_var"; //Das aktuelle Text-Image
CSS_VAR = "css_var";  //Die aktuelle Css-Klasse
//Die möglichen Frames
NO_FRAME = -1; //Wenn kein Frame vorhanden ist 
DEFAULT_FRAME = 0; //Wenn nur ein Frame vorhanden ist 
TOP_FRAME = 1; //oberer Frame 
RIGHT_FRAME = 2; //rechter Frame 
BOTTOM_FRAME = 3; //unterer Frame 
LEFT_FRAME = 4; //linker Frame 

//Das Array für das Mapping von Seiten-HREF und Menü-Item; das Mapping geschieht in setChild() 
var mapPage_MenuCode = new Array();

//Hier wird das Parent-Item zurückgegeben
function getParent(){
         return this.parent;
}

//Hier wird ein Child-Item gesetzt
function setChild( child ){
         this.children[this.children.length]=child;
         child.parent= this;
		 mapPage_MenuCode[child.properties[HREF]] = child;//Mapping zwischen HREF und Menü-Item
}

//Hier wird das Array der Child-Items zurückgegeben
function getChildren(){  
         return this.children;
}

//Der Konstruktor des MenuItem-Objekts
//Hier können auch der Link, der anzuzeigende Name, die verschiedenen Images usw. gesetzt werden.
//Der Menübaum sollte (automatisch) so aufgebaut werden, dass der Array-Index gleich dem
//Menücode-Index der Ebene minus 1 ist. So können die Kindermenüpunkte über den 
//Menücode aus dem Hauptfenster gesucht werden.
function MenuItem( iMenuCode ,	
				   href ){// Über den Konstruktor nur die wichtigsten Felder, die anderen Felder über set und get
		 //Das Properties-Array hält alle Felder des Item-Objektes
         this.properties = new Array();
         this.properties[MENUCODE] = iMenuCode;
         this.properties[HREF] = href;
         
         //Der Objekt-Name wird nach der Konvention vergeben: "menuItem" + [Menü-Code]
         this.properties[OBJECTNAME] = "menuItem"+iMenuCode;
         
         //Die Tag-Namen werden automatisch erzeugt
         this.properties[NAME_IMAGE] = "image_"+iMenuCode;
         this.properties[NAME_IMAGE_TEXT] = "image_text_"+iMenuCode;
         this.properties[NAME_ANCHOR] = "anchor_"+iMenuCode;   
         
         //Die Frame-Angabe wird vorbelegt und kann bei der Initialisierung überschrieben werden
		 this.properties[WHICH_FRAME]=DEFAULT_FRAME;
         
         //Zunächst wird angenommen, dass das Item selbst das ausführende Item ist
		 this.properties[ITEM_EXECUTIVE]= this;
         
         //Die variablen Felder werden vorbelegt
         this.properties[IMAGE_VAR] = "";
         this.properties[IMAGE_TEXT_VAR] = "";
         this.properties[CSS_VAR] = "";
         this.properties[CURRENT_INDEX_VAR] = -1;

         //Anlegen des Children-Arrays
         this.children = new Array();
         
         //Anlegen des Parent-Feldes
         this.parent = null;
}

//Zuerst ein Dummy-Objekt erzeugen, damit das Prototypobjekt angelegt wird
new MenuItem("",0);

//Das Prototypobjekt besitzt die Methoden
MenuItem.prototype.getParent = getParent;
MenuItem.prototype.setChild = setChild;
MenuItem.prototype.getChildren = getChildren;


