function DataIslandHandler(xsl, url, div, async){
    var oXML, oXSL, sUrl, oDiv;
    function transferXML(){
        oDiv.innerHTML = oXML.transformNode(oXSL.XMLDocument)
    }
    function readyStateChange(){
        if(oXML.readyState == 4)    transferXML();
    }
    this.init = function(xsl, url, div, async){
        oXML = new ActiveXObject("MSXML2.DOMDocument");
        oXSL = xsl;
        sURL = url;
        oDiv = div;
        bAsync = async;
        
        //XML settings
        if(bAsync){        
            oXML.async = true;
            oXML.onreadystatechange = readyStateChange;
        }
        else    oXML.async = false;
    }
    this.init(xsl, url, div, async);
    
    this.render = function(url){
        sURL = url || sURL;
        oXML.load(sURL);
        if(!bAsync)  transferXML();
    }
}

function StringBuilder(){
	//By Urix
    var arr = [],i=0;

    this.append = function(s){
        arr[i++] = s;
    }
    this.clear = function(){
        arr = [];
    }
    this.toString = function(){
        return arr.join("");
    }
}


	function Move(iTarget, oElement, iPulse, iInterval){
	    var iRightLeft; //1 - move right, -1 - move left
	    this.target = iTarget;
	    this.o = oElement;
	    this.stl = null;
	    this.pulse = iPulse;
	    this.interval = iInterval;	    

	    this.move = function(){
	        try{
	            clearInterval(Move.intervalID)
	        }
	        catch(e){}
	        
	        this.stl = this.o.style;

	        if(this.stl.pixelLeft == this.target) return false;
	        else if(this.stl.pixelLeft < this.target) iRightLeft = 1;
	        else iRightLeft = -1;

	        var iPixelsToMove = (this.target - this.stl.pixelLeft)*iRightLeft,
	            iPulse = this.pulse,
	            oStl = this.stl;
	        //alert("distance: " + iPixelsToMove);
	        //check if there are no "steps"
	        var iSteps = Math.floor(iPixelsToMove/this.pulse); 
	        if(iSteps == 0){
	            this.stl.pixelLeft += this.pulse*iRightLeft;
	            return true;
	        }
	        else{
	            var cIntervals=0,
	            iIntervalID = setInterval(
                    function(){ 
                        Move.intervalID = iIntervalID;
                        cIntervals++;
                        oStl.pixelLeft += iPulse*iRightLeft; 
                        if(cIntervals == iSteps){
                            clearInterval(iIntervalID)
                        }
                    }
                , this.interval);
	            this.stl.pixelLeft += (iPixelsToMove%this.pulse)*iRightLeft;
	            return true;
	       }
	    }
	}
	Move.intervalID = null;


function Menu(rect,menuLine,linksRect){
    var oRect = rect;
    var oLinksRect = linksRect;
    var oMenuLine = menuLine;
    this.items = {};
    var oSB = new StringBuilder();
    
    this.addItem = function(sName,sImgSrc,sLink,sLeftFloat){
        this.items[sName + ""] = new MenuItem(sName,sImgSrc,sLink,sLeftFloat);         
        return this.items[sName + ""];
    }
    this.showMenu = function(){
        for(var j in this.items){
            oSB.append(this.items[j].getImgHTML(oSB))
        }
        oMenuLine.innerHTML = oSB.toString();
        
        //add the rect to the current page img
        var sLH = location.href;
        var sPageName = sLH.substring(sLH.lastIndexOf("\/")+1, sLH.length-4);
        /^([a-z]+)/g.test(sPageName);
        sPageName = RegExp.$1;
        if(!sPageName || sPageName == "index" || sPageName == "\/")  sPageName="home";
        var oTarget = document.getElementById("menuimg" + sPageName).firstChild;
        oRect.style.visibility = "visible";
        Menu.addToCenter(oRect,oTarget);
        setTimeout(addEvents, 1);
    }
    function addEvents(){
        oMenuLine.attachEvent("onmouseover",
            function(){
                var oSrc = event.srcElement;
                if(oSrc.nodeName === "IMG"){
                    var oItem = Menu.ref.items[oSrc.parentElement.id.replace("menuimg","")];
                    if(oItem.sLink || oItem.hasLinks){
                        setTimeout(
                            function(){
                                Menu.addToCenter(oRect,oSrc);
                            }
                            ,1
                       )
                    }   
                    
                    var sInnerHTML = oItem.getOverHTML();  
                    oLinksRect.firstChild.innerHTML = '<v:fill method="linear sigma" angle="-90" \
                                                    type="gradient" opacity = "1" color = "#DFDFDF" color2 = "#F3F3F3" />' + sInnerHTML;
                    Menu.addToRight(oLinksRect,oSrc);                
                    oLinksRect.style.visibility = (sInnerHTML != "<ul><\/ul>")?"visible":"hidden";
                }
            }
        );
        oMenuLine.attachEvent("onclick",
            function(){
                var oSrc = event.srcElement;
                if(oSrc.nodeName === "IMG"){
                    var oItem = Menu.ref.items[oSrc.parentElement.id.replace("menuimg","")];
                    if(oItem.sLink || oItem.hasLinks){
                       setTimeout(
                            function(){
                                Menu.addToCenter(oRect,oSrc);
                            }
                            ,1
                       )
                    }
                    
                    var sLink = oItem.sLink;
                    if(sLink) location.href = sLink;
                }
            }
        );
        oMenuLine.attachEvent("onmouseout",
            function(){
                var oSrc = event.srcElement,
                    oTo = event.toElement;
                if(oTo.id !== oMenuLine.id && oTo.parentElement.id !== oLinksRect.id && oTo.parentElement.parentElement.id !== oLinksRect.id && oTo.parentElement.parentElement.parentElement.id !== oLinksRect.id){              
                    oLinksRect.style.visibility = "hidden";   
                }
            }
        );
        oLinksRect.attachEvent("onmouseout",
            function(){
                var oSrc = event.srcElement,
                    oTo = event.toElement;
                try{
                    if(oLinksRect.id !== oTo.parentElement.parentElement.parentElement.id && oLinksRect.id !== oTo.parentElement.parentElement.parentElement.parentElement.id){
                        oLinksRect.style.visibility = "hidden";
                    }
                }
                catch(e){}
            }
        );
    }
}


Menu.getRight = function(o){
    return screen.availWidth - (o.getClientRects()[0].right + 2 + document.body.scrollLeft);
}
Menu.getLeft = function(o){
    return (o.getClientRects()[0].left + 2 + document.body.scrollLeft) - 20;
}
Menu.getWidth = function(o){
    return o.offsetWidth;
}
Menu.move = new Move(0,0,10,10);
Menu.move.pulse = 15; //15
Menu.move.interval = 5; //5
Menu.addToRight = function(oR,oEl){
    oR.style.pixelLeft = Menu.getLeft(oEl) - (Menu.getWidth(oR) - Menu.getWidth(oEl))
}
Menu.addToCenter = function(oR,oEl){
    var iTarget = (Menu.getLeft(oEl) + Math.round((Menu.getWidth(oEl) - Menu.getWidth(oR))/2)) - Menu.getLeft(Menu.menuLine),
        i;

    Menu.move.target = iTarget;
    Menu.move.o = oR;
    Menu.move.move();   
}

function MenuItem(sName,sImgSrc,sLink,sLeftFloat){
    this.sLink = sLink;
    this.sLeftFloat = sLeftFloat;
    this.oImgSrc = sImgSrc;
    this.name = sName;
    this.hasLinks = false;
    var menuItemLinks = [];
    var i=0;
    
    this.addLink = function(sDesc,sUrl){
       menuItemLinks[i++] = new MenuItemLink(sDesc,sUrl);
       this.hasLinks = true;
    }
    
    this.getImgHTML = function(oSB){
        if(this.sLeftFloat == "right"){
            if(this.sLink)
                oSB.append("<div id = \"menuimg" + this.name + "\"><img src = \"" + this.oImgSrc + "\" class=\"handed\"><\/div>");
            else
                oSB.append("<div id = \"menuimg" + this.name + "\"><img src = \"" + this.oImgSrc + "\"><\/div>");
        }
        else{
            if(this.sLink)
                oSB.append("<div id = \"menuimg" + this.name + "\" style = \"float: left\"><img src = \"" + this.oImgSrc + "\" class=\"handed\"><\/div>");
            else
                oSB.append("<div id = \"menuimg" + this.name + "\" style = \"float: left\"><img src = \"" + this.oImgSrc + "\"><\/div>");
        }
    }
    
    this.getOverHTML = function(){
        var oStrBld = new StringBuilder();
        oStrBld.append("<ul>");
        for(var j=0;j<menuItemLinks.length;j++){
            oStrBld.append("<li>");
            oStrBld.append(menuItemLinks[j].getHTML());
            oStrBld.append("<\/li>");
        }
        oStrBld.append("<\/ul>");
        return oStrBld.toString(); 
    }
}

function MenuItemLink(sDesc,sUrl){
    var desc = sDesc;
    var url = sUrl;
    this.getHTML = function(){
        return "<a href = \"" + url + "\" class = \"MenuLink\">" + desc + "<\/a>";
    }
}
			function initMenu(){
			    Menu.menuLine = document.getElementById("MenuLine");
			
				var oRect = document.getElementById("MenuRoundRect");
				var oMenuLine = document.getElementById("MenuLine");
				var oMenu = new Menu(oRect,oMenuLine,document.getElementById("MenuRoundLinks"));
				Menu.ref = oMenu;
				oMenu.addItem("1","Images\/Menu\/arrow.gif","", "right");
				oMenu.addItem("home","Images\/Menu\/home.gif","index.asp", "right");
				oMenu.addItem("2","Images\/Menu\/arrow.gif","", "right");
				oItem = oMenu.addItem("product","Images\/Menu\/products.gif", "", "right");
				    oItem.addLink("תוכנה","productSoftware.asp");
				    oItem.addLink("אתרים","productSites.asp");
				oMenu.addItem("3","Images\/Menu\/arrow.gif","", "right");
				oItem = oMenu.addItem("clients","Images\/Menu\/clients.gif","", "right");
				    oItem.addLink("תמיכה","clientsSupport.asp");
				    oItem.addLink("רשימה","clientsList.asp");
				oMenu.addItem("4","Images\/Menu\/arrow.gif","", "right");
				oMenu.addItem("cooperation","Images\/Menu\/cooperation.gif","cooperation.asp", "right");
				oMenu.addItem("5","Images\/Menu\/arrow.gif","", "right");
				oMenu.addItem("about","Images\/Menu\/about.gif","about.asp", "right");
				oMenu.addItem("6","Images\/Menu\/arrow.gif","", "right");
				oMenu.addItem("contact","Images\/Menu\/contact.gif","contact.asp", "right");
				
				oMenu.addItem("7","Images\/Menu\/leftArrow.gif","","left");
				oMenu.addItem("english","Images\/Menu\/english.gif","english.asp","left");
				
				oMenu.showMenu()
		    }

			attachEvent("onload", initMenu);
