function vDesktop() { //Declare functions this.add = _vDesktop_add; this.refresh = _vDesktop_refresh; this.order = new _vDesktop_order(); this.place = _vDesktop_place; this.setPos = _vDesktop_setPos; this.dragIcon = _vDesktop_dragIcon; this.setInactive = _vDesktop_setInactive; //Declare variables this.itemHeight = 77; this.itemWidth = 70; this.items = new Array(); this.position = new Array(); this.position[0] = new Array(); this.drag = new Array(); function _vDesktop_add(icon,text,file,parameters,x,y) { x = x ? x : 0; y = y ? y : 0; //Declare main variable var desktopItem = document.createElement("DIV"); desktopItem.posX = x; desktopItem.posY = y; desktopItem.label = text; desktopItem.file = file; desktopItem.parameters = parameters; //Declare functions desktopItem.changeText = _vItem_changeText; desktopItem.changeIcon = _vItem_changeIcon; desktopItem.remove = _vItem_remove; //Declare properties desktopItem.placed = 0; desktopItem.className = "vDesktop_item"; desktopItem.style.position = "absolute"; desktopItem.style.width = vOS.vDesktop.itemWidth+"px"; desktopItem.style.height = vOS.vDesktop.itemHeight+"px"; //desktopItem.style.overflow = "hidden"; desktopItem.onmousedown = function(e) { e = e ? e : window.event; if(vOS.iWindow.action) return 1; // Set previous icon to inactive vOS.vDesktop.setInactive(e); // Set the className to selected this.className = "vDesktop_item_selected"; this.style.zIndex = 1; // Check the mousebutton var mousebutton = e.which ? e.which : e.button; // Remember THIS vOS.vDesktop.drag["this"] = this; // Block all if another button then the left one is pressed if(mousebutton != 1) return 1; // Now give my settings vOS.vDesktop.drag["x"] = e.clientX - parseInt(this.style.left + 0, 10); vOS.vDesktop.drag["y"] = e.clientY - parseInt(this.style.top + 0, 10); vOS.vDesktop.drag["oldX"] = parseInt(this.style.left + 0,10) / vOS.vDesktop.itemWidth; vOS.vDesktop.drag["oldY"] = parseInt(this.style.top + 0,10) / vOS.vDesktop.itemHeight; // We are doing something with dragging, so set the action to 1 vOS.iWindow.action = 1; // Set onmousemove document.onmousemove = vOS.vDesktop.dragIcon; } desktopItem.onmouseup = function(e) { e = e ? e : window.event; var mousebutton = e.which ? e.which : e.button; // Check if we need to popup the right click event if(mousebutton == 2 || mousebutton == 3) { var popupMenu = [ ["Openen","","vOS.run(vOS.vDesktop.drag['this'].file,vOS.vDesktop.drag['this'].parameters)"], ["-"], ["Verwijderen","","vOS.vDesktop.drag['this'].remove()"], ["Hernoemen","","vOS.vDesktop.drag['this'].changeText()"], ["-"], ["Eigenschappen","","alert(1)"] ]; vOS.vMenu.system(e.clientY, e.clientX, popupMenu); } else if(mousebutton == 1) { document.onmousemove = null; vOS.iWindow.action = 0; if(vOS.vDesktop.drag["this"]) vOS.vDesktop.setPos(vOS.vDesktop.drag["this"],vOS.vDesktop.drag["oldX"],vOS.vDesktop.drag["oldY"]); } } desktopItem.ondblclick = function(e) { vOS.run(this.file,this.parameters); this.className = "vDesktop_item"; } desktopItem.desktopIcon = document.createElement("DIV"); desktopItem.desktopIcon.style.backgroundImage = "url(" + icon + ")"; desktopItem.desktopIcon.style.width = "48px"; desktopItem.desktopIcon.style.height = "48px"; desktopItem.appendChild(desktopItem.desktopIcon); desktopItem.desktopText = document.createElement("SPAN"); desktopItem.desktopText.innerHTML = text; desktopItem.desktopText.style.overflow = "hidden"; desktopItem.desktopText.style.width = vOS.vDesktop.itemWidth - 2 + "px"; desktopItem.desktopText.style.marginLeft = "1px"; desktopItem.desktopText.style.cursor = "default"; desktopItem.appendChild(desktopItem.desktopText); vOS.screen_container.appendChild(desktopItem); vOS.vDesktop.items.push(desktopItem); vOS.vDesktop.place(desktopItem,x,y); //Functions function _vItem_changeText(text) { if(!text) text = window.prompt("Enter the new name",this.desktopText.innerHTML); if(text) this.desktopText.innerHTML = text; } function _vItem_changeIcon(icon) { this.desktopIcon.style.backgroundImage = "url(" + icon + ")"; } function _vItem_remove() { this.parentNode.removeChild(this); // Remove the "position" vOS.vDesktop.position[this.posX][this.posY] = 0; this.remove = 1; vOS.vDesktop.refresh(); } return desktopItem; } function _vDesktop_setInactive(e) { e = e ? e : window.event; var targ = vOS.event(e); // Set style to inactive if(vOS.vDesktop.drag["this"] && (targ.className != "vDesktop_item_selected" && targ.parentNode.className != "vDesktop_item_selected")) { vOS.vDesktop.drag["this"].className = "vDesktop_item"; vOS.vDesktop.drag["this"].style.zIndex = 0; } } function _vDesktop_dragIcon(e) { e = e ? e : window.event; vOS.vDesktop.drag["this"].style.left = e.clientX - vOS.vDesktop.drag["x"] + "px"; vOS.vDesktop.drag["this"].style.top = e.clientY - vOS.vDesktop.drag["y"] + "px"; } function _vDesktop_refresh() { this.position = new Array(); this.position[0] = new Array(); var items = this.items; this.items = new Array(); for(var i in items) { if(items[i].remove != 1) { this.place(items[i],items[i].posX,items[i].posY); this.items.push(items[i]); } } } function _vDesktop_order() { this.name = order_name; this.grid = order_grid; this.number = order_number; function order_name() { var order = new Array(); vOS.vDesktop.position = new Array(); vOS.vDesktop.position[0] = new Array(); for(var i in vOS.vDesktop.items) { order[order.length] = [vOS.vDesktop.items[i].label.toUpperCase(),vOS.vDesktop.items[i]]; } order.sort(); vOS.vDesktop.items = new Array(); for(var i in order) { vOS.vDesktop.place(order[i][1],0,0); order[i][1].posX = 0; order[i][1].posY = 0; vOS.vDesktop.items.push(order[i][1]); } } function order_grid() { var order = new Array(); vOS.vDesktop.position = new Array(); vOS.vDesktop.position[0] = new Array(); for(var i in vOS.vDesktop.items) { var maxX = maxX ? maxX : Math.floor(vOS.width() / vOS.vDesktop.itemWidth) - 1; var maxY = Math.floor((vOS.height() - _vTheme_padding_bottom) / vOS.vDesktop.itemHeight) - 1; var posX = vOS.vDesktop.items[i].posX == 1000 ? maxX : vOS.vDesktop.items[i].posX; var posY = vOS.vDesktop.items[i].posY == 1000 ? maxY : vOS.vDesktop.items[i].posY; order[order.length] = [(posX * (maxY + 1)) + posY,vOS.vDesktop.items[i]]; } order.sort(this.number); vOS.vDesktop.items = new Array(); for(var i in order) { vOS.vDesktop.place(order[i][1],0,0); order[i][1].posX = 0; order[i][1].posY = 0; vOS.vDesktop.items.push(order[i][1]); } } function order_number(a,b) { return a[0] - b[0] } } function _vDesktop_setPos(item,oldX,oldY) { var temX = Math.round(parseInt(item.style.left + 0,10) / this.itemWidth); var temY = Math.round(parseInt(item.style.top+0,10) / this.itemHeight); //hier het script var maxX = Math.floor(vOS.width() / this.itemWidth) - 1; var maxY = Math.floor((vOS.height() - _vTheme_padding_bottom) / this.itemHeight) - 1; var tryX = temX > maxX ? maxX : temX < 0 ? 0 : temX; var tryY = temY > maxY ? maxY : temY < 0 ? 0 : temY; if(typeof this.position[tryX] == "undefined") this.position[tryX] = new Array(); if(this.position[tryX][tryY] == 1) { this.position[oldX][oldY] = 0; this.place(item,oldX,oldY); } else { //Place is :) this.position[oldX][oldY] = 0; this.position[tryX][tryY] = 1; item.style.visibility = "visible"; item.style.top = tryY * this.itemHeight + "px"; item.style.left = tryX * this.itemWidth + "px"; //Now set the new properties to the element tryX = tryX == maxX ? 1000 : tryX; tryY = tryY == maxY ? 1000 : tryY; item.posX = tryX; item.posY = tryY; } this.refresh(); } function _vDesktop_place(item,x,y) { var collision = 1; var tryAgain = 0; var goLeft = 0; var goUp = 0; var tryX = x; var tryY = y; // Check what the max row and column are var maxX = Math.floor(vOS.width() / this.itemWidth); var maxY = Math.floor((vOS.height() - _vTheme_padding_bottom) / this.itemHeight); maxX = maxX ? maxX : 1; maxY = maxY ? maxY : 1; // Check if it's not getting to high! if(tryY + 1 > maxY) { //Set it to the highest one down :) tryY = maxY - 1; goUp = 1; } // Check if it's not getting to big if(tryX + 1 > maxX) { //Set it to the highest one right tryX = maxX - 1; goLeft = 1; } while(collision == 1) { collision = 0; //Check if the array where this one loops exists :) if(typeof this.position[tryX] == "undefined") this.position[tryX] = new Array(); //Check if there also stand's an icon :) if(this.position[tryX][tryY] == 1) { collision = 1; tryY = goUp ? tryY - 1 : tryY + 1; //Check if it's still in screen if(tryY + 1 > maxY || tryY < 0) { //Go to next row tryY = goUp ? maxY - 1 : 0; tryX = goLeft ? tryX - 1 : tryX + 1; } //Check if it fails to position the item if(tryX + 1 > maxX || tryX < 0) { if(tryAgain) { item.style.visibility = "hidden"; collision = 0; } else { tryAgain = 1; goUp = !goUp; if(goUp){ tryY = maxY - 1; } else { tryY = 0; } goLeft = !goLeft; if(goLeft){ tryX = maxX - 1; } else { tryX = 0; } } } } else { //Place the icon and set the position in the array this.position[tryX][tryY] = 1; item.style.visibility = "visible"; item.style.top = tryY * this.itemHeight + "px"; item.style.left = tryX * this.itemWidth + "px"; } } } } add_counter(5);