var Kiji; if(!Kiji) Kiji = {}; /*-------------------------------------- Kiji.Debug (FireFox Only) --------------------------------------*/ Kiji.Debug = {}; Kiji.Debug.enableDebug = true; Kiji.Debug.msgCount = 0; Kiji.Debug.debugWindow = null; Kiji.Debug.openWindow = function() { Kiji.Debug.debugWindow = window.open("", "", "top=150,left=150, width=500, height=300, scrollbars=yes, resizable=yes"); if (!Kiji.Debug.debugWindow.opener) Kiji.Debug.debugWindow.opener = self; Kiji.Debug.debugWindow.document.open(); Kiji.Debug.debugWindow.document.writeln(''); Kiji.Debug.debugWindow.document.write(''); Kiji.Debug.debugWindow.document.write('Kiji Debug Window'); Kiji.Debug.debugWindow.document.write(''); Kiji.Debug.debugWindow.document.write('
'); Kiji.Debug.debugWindow.document.write('
'); Kiji.Debug.debugWindow.document.write(''); Kiji.Debug.debugWindow.document.close(); } Kiji.Debug.debugOut = function(msg, bgColor, elementId) { if (!Kiji.Debug.debugWindow) { Kiji.Debug.openWindow(); if (!Kiji.Debug.debugWindow) return; } var div = Kiji.Debug.debugWindow.document.createElement("div"); div.style.backgroundColor = bgColor; div.innerHTML = Kiji.Debug.msgCount + ": " + msg; Kiji.Debug.debugWindow.document.getElementById(elementId).appendChild(div); } Kiji.Debug.reportError = function(msg) { if (Kiji.Debug.enableDebug) Kiji.Debug.debugOut(msg, '#fdd', 'errors'); Kiji.Debug.msgCount++; } Kiji.Debug.reportWarning = function(msg) { if (Kiji.Debug.enableDebug) Kiji.Debug.debugOut(msg, '#fee', 'errors'); Kiji.Debug.msgCount++; } Kiji.Debug.trace = function(msg) { if (Kiji.Debug.enableDebug) Kiji.Debug.debugOut(msg, '#eef', 'trace'); Kiji.Debug.msgCount++; } /*-------------------------------------- Kiji.Lib --------------------------------------*/ Kiji.Lib = {} /* Extracts the name of the parent element from the objects elements id */ Kiji.Lib.extractParentId = function(obj) { var pos = obj.id.lastIndexOf('_'); if (pos > -1) return obj.id.substring(0, pos); return ""; } /* Extracts the number id from the id. This id is used to find the element in the event array for further use */ Kiji.Lib.extractNumberId = function(obj) { var pos = obj.id.lastIndexOf('!'); if (pos > -1) return obj.id.substr(pos + 1, obj.id.length); return ""; } /* Returns a merge of the 2 list of properties. (destination is modified) */ Kiji.Lib.merge = function(destination, source) { for (property in source) destination[property] = source[property]; return destination; } /* Returns an empty property list if the object doesn't exist */ Kiji.Lib.empty = function(object) { return object || {}; } Kiji.Lib.Transition = function(mode, value) { switch(mode) { case 'sin': return (-Math.cos(value*Math.PI)/2) + 0.5; break; } return value; } Kiji.Lib.getPageSize = function() { var xScroll, yScroll; if (window.innerHeight && window.scrollMaxY) { xScroll = document.body.scrollWidth; yScroll = window.innerHeight + window.scrollMaxY; } else if (document.body.scrollHeight > document.body.offsetHeight){ // all but Explorer Mac xScroll = document.body.scrollWidth; yScroll = document.body.scrollHeight; } else { // Explorer Mac...would also work in Explorer 6 Strict, Mozilla and Safari xScroll = document.body.offsetWidth; yScroll = document.body.offsetHeight; } var windowWidth, windowHeight; if (self.innerHeight) { // all except Explorer windowWidth = self.innerWidth; windowHeight = self.innerHeight; } else if (document.documentElement && document.documentElement.clientHeight) { // Explorer 6 Strict Mode windowWidth = document.documentElement.clientWidth; windowHeight = document.documentElement.clientHeight; } else if (document.body) { // other Explorers windowWidth = document.body.clientWidth; windowHeight = document.body.clientHeight; } // for small pages with total height less then height of the viewport if(yScroll < windowHeight){ pageHeight = windowHeight; } else { pageHeight = yScroll; } // for small pages with total width less then width of the viewport if(xScroll < windowWidth){ pageWidth = windowWidth; } else { pageWidth = xScroll; } arrayPageSize = new Array(pageWidth,pageHeight,windowWidth,windowHeight) return arrayPageSize; } Kiji.Lib.createElement = function(divId, parent, properties) { var position = 'relative'; var xOffset = 0; var yOffset = 0; var display = false; var className = 'none'; var innerHTML = ''; var cursor = 'auto'; var nodePos = 'last'; var type = 'div'; var eWidth = 'auto'; var eHeight = 'auto'; if (properties) { if (properties['position']) position = properties['position']; if (properties['left']) xOffset = properties['left']; if (properties['top']) yOffset = properties['top']; if (properties['display']) display = properties['display']; if (properties['className']) className = properties['className']; if (properties['innerHTML']) innerHTML = properties['innerHTML']; if (properties['cursor']) cursor = properties['cursor']; if (properties['nodePos']) nodePos = properties['nodePos']; if (properties['type']) type = properties['type']; if (properties['width']) eWidth = properties['width']; if (properties['height']) eHeight = properties['height']; } var div = document.createElement(type); div.setAttribute('id', divId); if (className != 'none') div.className = className; div.style.position = position; div.style.left = xOffset + 'px'; div.style.top = yOffset + 'px'; div.style.width = eWidth; div.style.height = eHeight; //div.style.overflow = ''; div.style.display = display?'':'none'; if (innerHTML != '') div.innerHTML = innerHTML; div.style.cursor = cursor; if (properties['style']) Kiji.Lib.merge(div.style, properties['style']); switch (nodePos) { case 'first': parent.insertBefore(div, parent.firstChild); break; case 'last': parent.appendChild(div); break; } return div; } Kiji.Lib.createInput = function (inputId, parent, properties) { var type = 'button'; var value = ''; var className = 'none'; var cursor = 'auto'; if (properties) { if (properties['type']) type = properties['type']; if (properties['value']) value = properties['value']; if (properties['className']) className = properties['className']; if (properties['cursor']) cursor = properties['cursor']; } var input = document.createElement('input'); if (className != 'none') input.className = className; input.setAttribute('id', inputId); input.setAttribute('name', inputId); input.setAttribute('value', value); input.setAttribute('type', type); input.style.cursor = cursor; parent.appendChild(input); } Kiji.Lib.createButton = function (inputId, parent, properties) { var type = 'button'; var value = ''; var className = 'none'; var cursor = 'auto'; if (properties) { if (properties['type']) type = properties['type']; if (properties['value']) value = properties['value']; if (properties['className']) className = properties['className']; if (properties['cursor']) cursor = properties['cursor']; } var input = document.createElement('a'); if (className != 'none') input.className = className; input.setAttribute('id', inputId); input.setAttribute('href', '#'); input.innerHTML = value; input.style.cursor = cursor; if (properties['style']) Kiji.Lib.merge(input.style, properties['style']); parent.appendChild(input); } /*-------------------------------------- Kiji.Fx --------------------------------------*/ /* Kiji.Fx = {} Kiji.Fx.initialize = function(blank_path) { this.desktopLayer = Kiji.Lib.createElement('desktopLayer', document.body, { type: 'iframe', style: { zIndex: '90', position: 'absolute', top: '0px', left: '0px', display: 'none', width: '100%', height: '100%', backgroundColor: '#000', filter: 'alpha(opacity=60)', opacity: '0.6' } } ); this.desktopLayer.src = blank_path; this.desktopLayer.frameBorder = 0; this.desktopLayerAnim = null; } Kiji.Fx.blockWindow = function(state) { if (this.desktopLayerAnim) return; // this.desktopLayerAnim.stop(); var size = Kiji.Lib.getPageSize(); this.desktopLayer.style.height = size[1] + 'px'; if (state) this.desktopLayerAnim = new Kiji.Fx.animParams(this.desktopLayer, 5.0, 'dissolveIn', 0.0, 0.6).start(); else this.desktopLayerAnim = new Kiji.Fx.animParams(this.desktopLayer, 5.0, 'dissolveOut', 0.6, 0.0).start(); } Kiji.Fx.animParams = function(winObj, delay, type, rangeStart, rangeEnd) { this.startTime = 0; this.endTime = delay * 100; this.animTime = 0; this.rangeStart = rangeStart; this.rangeEnd = rangeEnd; this.animType = type; this.obj = winObj; this.pos = -1; this.render(this.startTime, false); } Kiji.Fx.animParams.prototype.start = function() { this.startTime = new Date().getTime(); this.endTime += this.startTime; this.animTime = this.startTime; this.obj.style.display = ''; this.pos = Kiji.Fx.WindowFx.add(this); } Kiji.Fx.animParams.prototype.stop = function() { Kiji.Fx.WindowFx.drop(this.pos); Kiji.Fx.WindowFx.anims.compact(); } Kiji.Fx.animParams.prototype.animate = function(currentTime) { if (currentTime >= this.startTime) { if (currentTime > this.endTime) { this.render(1, true); return false; } var factor = (currentTime - this.startTime) / (this.endTime - this.startTime ); this.render(factor, false); return true; } return false; } Kiji.Fx.animParams.prototype.render = function(factor, finished) { factor = Kiji.Lib.Transition('sin', factor); factor *= (this.rangeEnd - this.rangeStart); factor += this.rangeStart; switch(this.animType) { case 'dissolveOut': if (finished) this.obj.style.display = 'none'; case 'dissolveIn': this.obj.style.opacity = (factor < 0.00001)? 0: factor; this.obj.style.filter = 'alpha(opacity=' + ((factor < 0.00001)? 0: factor) * 100 + ')'; break; } } Kiji.Fx.WindowFx = { anims: [], interval: null, add: function(anim) { this.anims.push(anim); if (!this.interval) this.interval = setInterval(this.animate.bind(this), 40); return this.anims.length - 1; }, drop: function(i) { delete this.anims[i]; this.anims[i] = null; }, animate: function() { if (this.anims.length == 0) { clearInterval(this.interval); this.interval = null; return; } var currentTime = new Date().getTime(); var i = 0; var len = this.anims.length; while (i < len) { if (this.anims[i] == null) { i++; continue; } if (!this.anims[i].animate(currentTime)) this.drop(i); i++; } this.anims = this.anims.compact(); } } */ Kiji.Fx = {} Kiji.Fx.initialize = function(blank_path) { this.desktopLayer = Kiji.Lib.createElement('desktopLayer', document.body, { type: 'iframe', style: { zIndex: '90', position: 'absolute', top: '0px', left: '0px', display: 'none', width: '100%', height: '100%', backgroundColor: '#000', filter: 'alpha(opacity=60)', opacity: '0.6' } } ); this.desktopLayer.src = blank_path; this.desktopLayer.frameBorder = 0; //this.desktopLayerAnim = null; } Kiji.Fx.desktopLayerAnim = null; Kiji.Fx.blockWindow = function(state) { if (Kiji.Fx.desktopLayerAnim) Kiji.Fx.desktopLayerAnim.stop(); //var desktopLayerAnim = null; var size = Kiji.Lib.getPageSize(); this.desktopLayer.style.height = size[1] + 'px'; if (state) Kiji.Fx.desktopLayerAnim = new Kiji.Fx.animParams(this.desktopLayer, 5.0, 'dissolveIn', 0.0, 0.6); else Kiji.Fx.desktopLayerAnim = new Kiji.Fx.animParams(this.desktopLayer, 5.0, 'dissolveOut', 0.6, 0.0); Kiji.Fx.desktopLayerAnim.first = true; Kiji.Fx.desktopLayerAnim.start(); } Kiji.Fx.animParams = function(winObj, delay, type, rangeStart, rangeEnd) { this.startTime = 0; this.endTime = delay * 100; this.animTime = 0; this.rangeStart = rangeStart; this.rangeEnd = rangeEnd; this.animType = type; this.obj = winObj; this.pos = -1; this.first = false; //this.render(this.startTime, false); } Kiji.Fx.animParams.prototype.start = function() { this.startTime = new Date().getTime(); this.endTime += this.startTime; this.animTime = this.startTime; this.obj.style.display = '';/* if (this.first) this.pos = Kiji.Fx.WindowFx.addLonely(this); else*/ this.pos = Kiji.Fx.WindowFx.add(this); } Kiji.Fx.animParams.prototype.stop = function() { Kiji.Fx.WindowFx.drop(this.pos); //Kiji.Fx.WindowFx.anims.compact(); } Kiji.Fx.animParams.prototype.animate = function(currentTime) { if (currentTime >= this.startTime) { if (currentTime > this.endTime) { this.render(1, true); return false; } var factor = (currentTime - this.startTime) / (this.endTime - this.startTime ); this.render(factor, false); return true; } return false; } Kiji.Fx.animParams.prototype.render = function(factor, finished) { factor = Kiji.Lib.Transition('sin', factor); factor *= (this.rangeEnd - this.rangeStart); factor += this.rangeStart; switch(this.animType) { case 'dissolveOut': if (finished) this.obj.style.display = 'none'; case 'dissolveIn': this.obj.style.opacity = (factor < 0.00001)? 0: factor; this.obj.style.filter = 'alpha(opacity=' + ((factor < 0.00001)? 0: factor) * 100 + ')'; break; } } Kiji.Fx.WindowFx = { anims: [], lonelyAnims: [], interval: null, add: function(anim) { this.anims.push(anim); if (!this.interval) this.interval = setInterval(this.animate.bind(this), 40); return this.anims.length - 1; }, addLonely: function(anim) { this.lonelyAnims.push(anim); if (!this.interval) this.interval = setInterval(this.animate.bind(this), 40); return this.lonelyAnims.length - 1; }, drop: function(i) { //delete this.anims[i]; if (!this.anims[i]) return; this.anims[i] = null; this.anims.compact(); }, dropLonely: function(i) { delete this.lonelyAnims[i]; this.lonelyAnims[i] = null; }, animate: function() { if ( (this.anims.length == 0) && (this.lonelyAnims.length == 0) ) { clearInterval(this.interval); this.interval = null; return; } var currentTime = new Date().getTime(); var i = 0; var len = this.anims.length; while (i < len) { if (this.anims[i] == null) { i++; continue; } if (!this.anims[i].animate(currentTime)) this.drop(i); i++; } this.anims = this.anims.compact(); if (this.lonelyAnims.length > 0) { if (!this.lonelyAnims[0].animate(currentTime)) this.dropLonely(0); this.lonelyAnims = this.lonelyAnims.compact(); } } } /*-------------------------------------- Kiji.WindowEvents --------------------------------------*/ Kiji.WindowEvents = {}; Kiji.WindowEvents.windows = {}; Kiji.WindowEvents.buttons = {}; Kiji.WindowEvents.windows.mouseseek = new Array; Kiji.WindowEvents.windows.dragdrop = new Array; Kiji.WindowEvents.buttons.mouseclick = new Array; Kiji.WindowEvents.menus = new Array; Kiji.WindowEvents.trees = new Array; Kiji.WindowEvents.extractWindow = function(vector, event) { var targetWindowId = Kiji.Lib.extractParentId(Event.element(event)); return vector[targetWindowId]; } Kiji.WindowEvents.objExtractWindow = function(vector, obj) { var targetWindowId = Kiji.Lib.extractParentId(obj); return vector[targetWindowId]; } Kiji.WindowEvents.appendWindow = function(a, w) { a[w.windowId] = w; } // ********************** // Kiji.WindowEvents.windows.mousemove Kiji.WindowEvents.windows.mouseseek.cursorSeeker = function(event) { try { var i = 0; var currentWindow = null; while (i 0)) { var expander = Kiji.Lib.createElement(this.windowId + '_!' + this.nodeCount, fatherNode, { type: 'span', position: 'relative', innerHTML: '- ', cursor: 'pointer', display: true, nodePos: 'first' }); this.nodeCount++; expander.style.float = 'left'; Kiji.WindowEvents.trees.appendElement(expander); } return total + 1; } Kiji.TreeView.prototype.expandCollapse = function(obj) { var node = obj.parentNode.firstChild; var explode = true; var listElements = 0; while (node != null) { if ( (node.nodeName.toLowerCase() != '#text') && (node.nodeName.toLowerCase() != 'span') ) { if (node.style.display == 'none') { node.style.display = ''; explode = false; } else { node.style.display = 'none'; explode = true; } listElements++; } node = node.nextSibling; } if (explode && (listElements > 0)) obj.innerHTML = '+ '; else obj.innerHTML = '- '; } /* Kiji lib&stuff initialization */ Kiji.initialize = function(blank_path) { this.Fx.initialize(blank_path); }