var base='../'; var jsPath='js/'; var util = {}; /*--------------- Array ---------------*/ util.copyArray = function(arr) { var a = []; for (var i = 0; i < arr.length; i++) a[i] = arr[i]; return a; }; util.isArray = function(arr) { return typeof(arr) == "object" && arr.length != null; }; util.in_array = function(arr, val) { for (var i in arr) { if (arr[i] == val) return true; } return false; }; util.createPhpArray = function(arrName, arr) { for (i in arr) { arr[i] = encodeURI(arr[i]).replace("&", "%26"); } return requestData = arrName+"[]="+arr.join("&"+arrName+"[]="); }; /*--------------- Function ---------------*/ util.callJS = function() { var arr = this.copyArray(arguments); return eval(arr[0]).apply(null, arr.slice(1)); }; /*--------------------- Browser SPECIFIC ---------------------*/ // browser check util.isOpera = function() { return navigator.userAgent.indexOf("Opera") != -1; }; util.isIE = function() { return navigator.userAgent.indexOf("MSIE") != -1; }; util.isIE6 = function() { return !!navigator.appVersion.match(/MSIE 6/i); }; util.isIE7 = function() { return !!navigator.userAgent.match(/MSIE 7/i); }; util.isMoz = function() { return !!navigator.userAgent.match(/gecko/i); }; // find elements util.element = function(layer) { if (!layer || typeof(layer) != "string" || !layer.length) return layer; return document.getElementById(layer); }; util.getElementsByClassName = function(layer, classes, strTagName, match, conversely) { layer = this.element(layer) || this.getBody();; var result = []; if (layer) { if (strTagName == null) strTagName = "*"; var arrElements = []; if (strTagName == "*" && layer.all != null) { arrElements = layer.all; } else if (layer.getElementsByTagName != null) { arrElements = layer.getElementsByTagName(strTagName); } else if (layer.all != null) { arrElements = layer.all; } var elmnt; for (var i = 0; i < arrElements.length; i++) { elmnt = arrElements[i]; if (classes == null) { if (!elmnt.className.length) { if (!conversely) result.push(elmnt); } else if (conversely) { result.push(elmnt); } } else if ((elmnt.className && elmnt.className.length) || conversely) { var elmntClasses = elmnt.className.split(" "); if (typeof(classes) == "string") { if (classes == "*") { if (elmnt.className.length) { if (!conversely) result.push(elmnt); } else if (conversely) { result.push(elmnt); } } else { if (match) { var matched = 0; var tmpClasses = classes.split(" "); for (var cls in elmntClasses) { if (util.in_array(tmpClasses, elmntClasses[cls])) { matched++; } } if (matched == tmpClasses.length) { if (!conversely) result.push(elmnt); } else if (conversely) { result.push(elmnt); } } else if (elmnt.className == classes) { if (!conversely) result.push(elmnt); } else if (conversely) { result.push(elmnt); } } } else if (typeof(classes) == "object" && classes.length) { var doAdd = false; for (var j = 0; j < classes.length; j++) { if (!util.in_array(result, elmnt)) { if (match) { var matched = 0; var tmpClasses = classes[j].split(" "); for (var cls in elmntClasses) { if (util.in_array(tmpClasses, elmntClasses[cls])) { matched++; } } if (matched == tmpClasses.length) { if (!conversely) { doAdd = true; } else { doAdd = false; break; } } else if (conversely) { doAdd = true; } } else if (classes[j] == elmnt.className) { if (!conversely) { doAdd = true; } else { doAdd = false; break; } } else if (conversely) { doAdd = true; } } } if (doAdd) result.push(elmnt); } } } } return result; }; util.getBody = function() { return document.body || document.getElementsByTagName("body")[0]; }; util.getHead = function() { return document.getElementsByTagName("head")[0]; }; util.getHtml = function() { return document.getElementsByTagName("html")[0]; }; util.getFlashMovie = function(id) { if (window.document[id]) { return window.document[id]; } if (!isIE()) { if (document.embeds && document.embeds[id]) { return document.embeds[id]; } } return document.getElementById(id); }; // element position util.getElementX = function(el) { el = this.element(el); var x = 0; if (el.offsetParent) { x = el.offsetLeft; while ((el = el.offsetParent)) { x += el.offsetLeft; } } else if (el.x) { x = el.x; } return x; }; util.getElementY = function(el) { el = this.element(el); var y = 0; if (el.offsetParent) { y = el.offsetTop; while((el = el.offsetParent)) { y += el.offsetTop; } } else if (el.y) { y = el.y; } return y; }; util.getElementWidth = function(obj) { return this.element(obj).offsetWidth; }; util.getElementHeight = function(obj) { return this.element(obj).offsetHeight; }; // page offset util.getPageXScroll = function() { return (window.pageXOffset ? window.pageXOffset : (document.documentElement && document.documentElement.scrollLeft != null) ? document.documentElement.scrollLeft : document.body.scrollLeft)||0; }; util.getPageYScroll = function() { return (window.pageYOffset ? window.pageYOffset : (document.documentElement && document.documentElement.scrollTop != null) ? document.documentElement.scrollTop : document.body.scrollTop)||0; }; // inner dimentions util.getInnerWidth = function() { return (window.innerWidth ? window.innerWidth : document.documentElement ? document.documentElement.clientWidth : document.body.clientWidth)||0; }; util.getInnerHeight = function() { return (window.innerHeight ? window.innerHeight : document.documentElement ? document.documentElement.clientHeight : document.body.clientHeight)||0; }; /* // page offset util.getPageXScroll = function() { return (window.pageXOffset ? window.pageXOffset : (document.documentElement && document.documentElement.scrollLeft != null) ? document.documentElement.scrollLeft : document.body.scrollLeft)||0; }; util.getPageYScroll = function() { return (window.pageYOffset ? window.pageYOffset : (document.documentElement && document.documentElement.scrollTop != null) ? document.documentElement.scrollTop : document.body.scrollTop)||0; }; // inner dimentions util.getInnerWidth = function() { return (window.innerWidth ? window.innerWidth : (document.documentElement && document.documentElement.clientWidth != null) ? document.documentElement.clientWidth : document.body.clientWidth)||0; }; util.getInnerHeight = function() { return (window.innerHeight ? window.innerHeight : (document.documentElement && document.documentElement.clientHeight != null) ? document.documentElement.clientHeight : document.body.clientHeight)||0; }; */ /*--------------- Cookies ---------------*/ util.getCookie = function(name) { var start = document.cookie.indexOf(name+"="); var len = start+name.length+1; if (start && name != document.cookie.substring(0, name.length)) return null; if (start == -1) return null; var end = document.cookie.indexOf(';', len); if (end == -1) end = document.cookie.length; return unescape(document.cookie.substring(len, end)); }; util.setCookie = function(name, value, expires, path, domain, secure) { var today = new Date(); today.setTime(today.getTime()); expires = (expires||356)*1000*60*60*24; var expires_date = new Date(today.getTime()+expires); document.cookie = name+'='+escape(value)+(expires ? ';expires='+expires_date.toGMTString() : '')+(path ? ';path=' + path : '')+(domain ? ';domain=' + domain : '')+(secure ? ';secure' : ''); }; util.deleteCookie = function( name, path, domain) { if (getCookie(name)) document.cookie = name+'='+(path ? ';path=' + path : '')+(domain ? ';domain=' + domain : '')+';expires=Thu, 01-Jan-1970 00:00:01 GMT'; }; /*--------------- Focus ---------------*/ util.focus = function(el) { this.element(el).focus(); }; util.blur = function(el) { this.element(el).blur(); }; util.onFocus = function(el, def, select, toPass) { el = this.element(el); if (el && el.value == def) { el.value = ""; if (toPass) el.type = 'password'; if (select) el.select(); } }; util.onBlur = function(el, def, toText) { el = this.element(el); if (el && !el.value.split(' ').join('').length) { el.value = def; if (toText) el.type = 'text'; } }; /*--------------- Style ---------------*/ // change styles util.setStyles = function(el, styles) { el = this.element(el); if (el) { for (var i = 0; i < styles.length; i++) { el.style[styles[i][0]] = styles[i][1]; } } }; util.setStyle = function(el, style, value) { el = this.element(el); if (el && el.style) el.style[style] = value; }; /*util.getStyle = function(id, style) { var obj = this.element(id); return obj && obj.style ? obj.style[style] : null; };*/ util.getStyle = function(el, style) { el = this.element(el); style = style.toLowerCase(); if (el.currentStyle) { return el.currentStyle[this.formatStyle(style)]; } else if (window.getComputedStyle) { return document.defaultView.getComputedStyle(el, null).getPropertyValue(style); } else if (el.style) { return el.style[this.formatStyle(style)]; } return null; }; util.formatStyle = function(str) { var _arr = str.split("-"); for (var i=1, len=_arr.length; i < len; i++) { _arr[i] = this.upperFirst(_arr[i]); } return _arr.join(''); }; // class manipulation util.addClass = function(el, cls) { el = this.element(el); if (el) { var found = false; if (!el.className) el.className = ""; if (el.className.length) { var classes = el.className.split(" "); for (var i = 0, len = classes.length; i < len; i++) { if (classes[i] == cls) { found = true; break; } } } if (!found) { el.className = (el.className.length ? el.className+" " : "")+cls; } } }; util.removeClass = function(el, cls) { el = this.element(el); if (el) { var classes = el.className.split(" "); var className = ""; for (var i = 0, len = classes.length; i < len; i++) { if (classes[i].length && classes[i] != cls) { className += (className.length ? " " : "")+classes[i]; } } el.className = className; } }; util.haveClass = function(el, cls) { el = this.element(el); if (el) { if (!el.className) return false; var classes = el.className.split(" "); for (var i in classes) { if (cls == classes[i]) return true; } return false; } return null; }; // parsing util.styleToNum = function(val) { val=String(val); var c; var str=""; var len = val.length; for (var i = 0; i 0) str += '.0'; if (n > 0) { while (str.split('.')[1].length < n) { str += '0'; } } return str; }; /*-------------------- html elements --------------------*/ // show hide all select elements util.showSelects = function() { //Debug.log("showSelects"); if (!this.isSelectsVisible) { for (var i in this.selects) { util.setStyle(this.selects[i], "visibility", "visible"); } this.isSelectsVisible = true; } }; util.hideSelects = function() { //Debug.log("hideSelects"); if (this.isSelectsVisible) { if (this.selects == null) { this.selects = document.getElementsByTagName("select"); } for (var i in this.selects) { util.setStyle(this.selects[i], "visibility", "hidden"); } this.isSelectsVisible = false; } }; util.selects = null; util.isSelectsVisible = true; /*-------------------- location --------------------*/ util.getQueryParamValue = function(param, str) { var q = str || document.location.search || document.location.href.hash; if (q) { var startIndex = q.indexOf(param+"="); var endIndex = (q.indexOf("&", startIndex) > -1) ? q.indexOf("&", startIndex) : q.length; if (q.length > 1 && startIndex > -1) { return q.substring(q.indexOf("=", startIndex)+1, endIndex); } } return ""; }; util.getQueryObj = function(str) { var q = str || document.location.search || document.location.href.hash; if (!q.indexOf('?')) q = q.substr(1); var obj = {}; if (q) { var arr = q.split('&'); var arr1; for (var i = 0,len = arr.length; i < len; i++) { arr1 = arr[i].split('='); if (arr1[0].indexOf('?') != -1) { arr1[0] = arr1[0].substr(arr1[0].indexOf('?')+1); } obj[arr1[0]] = arr1[1]; } } return obj; }; util.isLocal = function() { return document.location.href.indexOf("file:") == 0; }; /*-------------------- Customizing --------------------*/ // even/odd styling util.stripe = function(layer, tags, evenClass, oddClass, everyN, oddIsFirst, leaveHeights) { if (!everyN) everyN = 1; var even = oddIsFirst; var mainObj; if (!(mainObj = this.element(layer))) return; if (!evenClass) evenClass = 'even'; if (!oddClass) oddClass = 'odd'; var elements = this.getElementsIn(mainObj, tags, 0); var el; var tmp = []; var maxH = 0; for (var i = 0; i < elements.length; i++) { el = elements[i]; if (!(i%everyN)) { even = !even; el.style.clear = "left"; } else { el.style.clear = ""; } el.className = even ? evenClass : oddClass; if (!leaveHeights) { this.setStyle(el, "height", this.isIE6() ? 0 : "auto"); //this.setStyle(el, "height", "auto"); if (el.style.clear == "left") { for (var n = 0; n < tmp.length; n++) { this.setStyle(tmp[n], "height", maxH+"px"); } tmp = []; maxH = 0; } maxH = Math.max(this.getElementHeight(el), maxH); //Debug.log(el.innerHTML+" "+this.getElementHeight(el)+" "+maxH); tmp.push(el); } } }; util.getElementsIn = function(obj, tags, depth, elements) { if (!elements) elements = []; if (!depth) depth = 0; var els = obj.getElementsByTagName(tags[depth]); if (tags[depth+1]) { for (var i = 0; i < els.length; i++) { elements = arguments.callee(els[i], tags, depth+1, elements); } } else { for (var i = 0; i < els.length; i++) { elements.push(els[i]); } } return elements; }; /*-------------------- Others --------------------*/ // remove a flickering util.fixBgImageCache = function() { try { document.execCommand("BackgroundImageCache", false, true); } catch(e) {} }(); var Delegate = {}; Delegate.create = function(t, m) { var target = t; var method = m; var type = typeof(method); var args = []; for (var i=2; i < arguments.length; i++) { args[args.length] = arguments[i]; }; return function() { var arr = []; var len = args.length; for (var i = 0; i < len; i++) { arr[arr.length] = args[i]; }; len = arguments.length; for (var i = 0; i < len; i++) { arr[arr.length] = arguments[i]; }; var err; try { switch (typeof(method)) { case "string": return (target[method] || eval(method)).apply(target, arr); case "function": return method.apply(target, arr); default: err = 'WARNING: Delegate.create unexpected method type: '+typeof(method); } } catch (error) { err = 'ERROR: '+error; } if (err.length) { if (window.Debug) Debug.log(err); if (window.Ajax) Ajax.callAjax(Delegate.create(Delegate, Delegate.sendError, err)); } return null; }; }; Delegate.sendError = function(error, props) { var errAjax = new Ajax(); if (!props) props = {}; props.error = error; props.page = window.location; errAjax.post('jsError.php', props, null, null, true); } var Events = {}; Events.objects = {}; // PUBLIC /** * addEvent * * objName - String * eventName - String * method - Function * * return id - Number - the id coresponding to added method * */ Events.addEvent = function(objName, eventName, method) { if (!this.getRealObj(objName)) return null; var eObj = this.getEventObj(objName, eventName); var id = eObj.ids++; eObj.methods.push({ id:id, method:method }); return id; }; /** * removeEvent * * objName - String * eventName - String * id - Number * */ Events.removeEvent = function(objName, eventName, id) { var eObj = this.getEventObj(objName, eventName); for (var i = 0; i < eObj.methods.length; i++) { if (id == eObj.methods[i].id) { eObj.methods.splice(i, 1); if (!eObj.methods.length) { var rObj = this.getRealObj(objName); var obj = this.getObj(objName); // remove event rObj[eventName] = null; obj[eventName] = null; // remove object if no other events var haveEvents = false; for (var evt in obj) { if (obj[evt] != null) { haveEvents = true; break; } } if (!haveEvents) { this.removeObj(objName); } } break; } } }; /** * setReturnValue - useful for onclick * or methods that will be called last * * objName - String * eventName - String * value - * * */ Events.setReturnValue = function(objName, eventName, value) { var eObj = this.getEventObj(objName, eventName); eObj.returnValue = value; }; /** * removeObj * * objName - String * */ Events.removeObj = function(objName) { if (this.objects[objName]) { var rObj = this.getRealObj(objName); var obj = this.getObj(objName); for (var evt in obj) { rObj[evt] = null; } this.objects[objName] = null; } }; /** * removeAll * * */ Events.removeAll = function() { for (var objName in this.objects) { this.removeObj(objName); } }; // PRIVATE Events.getRealObj = function(objName) { if (util.element(objName)) return util.element(objName); return eval(objName); }; Events.getObj = function(objName) { if (!this.objects[objName]) this.objects[objName] = {}; return this.objects[objName]; }; Events.getEventObj = function(objName, eventName) { var obj = this.getObj(objName); if (!obj[eventName]) { obj[eventName] = { ids:0, methods:[], returnValue:null }; this.getRealObj(objName)[eventName] = Delegate.create(this, this.callEvent, objName, eventName); } return obj[eventName]; }; Events.checkObj = function(objName, eventName) { if (!this.getEventObj(objName, eventName).methods.length) { var rObj = this.getRealObj(objName); var obj = this.getObj(objName); // remove event rObj[eventName] = null; obj[eventName] = null; // remove object if no other events var haveEvents = false; for (var evt in obj) { if (obj[evt] != null) { haveEvents = true; break; } } if (!haveEvents) { this.removeObj(objName); } } }; Events.callEvent = function(objName, eventName) { var eObj = this.getEventObj(objName, eventName); var rObj = this.getRealObj(objName); var args = util.copyArray(arguments).slice(2); for (var i = 0; i < eObj.methods.length; i++) { eObj.methods[i].method.apply(rObj ,args); } //Debug.log(eventName+" returnValue type: "+typeof(eObj.returnValue)); return typeof(eObj.returnValue) == "function" ? eObj.returnValue() : eObj.returnValue; }; // memory leak if (util.isIE()) { Events.addEvent("window", "onunload", function() { Events.removeAll(); }); } function FlashObject(elementId, swf, id, w, h, ver, c, quality, skipURL, dontShowTip, altContent) { this.element = document.getElementById(elementId); if (!dontShowTip) this.changeContent("In order to see this content you will have to install Flash Player "+ver+"."); this.params = new Object(); this.variables = new Object(); this.attributes = new Array(); if (swf) this.setAttribute('swf', swf); if (id) this.setAttribute('id', id); if (w) this.setAttribute('width', w); if (h) this.setAttribute('height', h); if (ver) this.setAttribute('version', new PlayerVersion(ver)); if (c) this.addParam('bgcolor', c); this.addParam('quality', quality ? quality : 'high'); //this.addParam('menu', 'false'); this.altContent = altContent; installedVer = FlashObjectUtil.getPlayerVersion(); this.isValidVersion = installedVer.versionIsValid(this.getAttribute('version')); if (!this.isValidVersion && skipURL) { window.location = skipURL; } }; FlashObject.prototype.setAttribute = function(name, value) { this.attributes[name] = value; }; FlashObject.prototype.getAttribute = function(name) { return this.attributes[name]; }; FlashObject.prototype.getAttributes = function() { return this.attributes; }; FlashObject.prototype.addParam = function(name, value) { this.params[name] = value; }; FlashObject.prototype.getParams = function() { return this.params; }; FlashObject.prototype.getParam = function(name) { return this.params[name]; }; FlashObject.prototype.addVariable = function(name, value) { this.variables[name] = value; }; FlashObject.prototype.getVariable = function(name) { return this.variables[name]; }; FlashObject.prototype.getVariables = function() { return this.variables; }; FlashObject.prototype.getParamTags = function() { var paramTags = ""; var key; var params = this.getParams(); for (key in params) paramTags += ''; return paramTags; }; FlashObject.prototype.getVariablePairs = function() { var variablePairs = new Array(); var key; var variables = this.getVariables(); for (key in variables) { variablePairs.push(key+"="+variables[key]); } return variablePairs; }; FlashObject.prototype.getHTML = function() { var flashHTML = ""; if (navigator.plugins && navigator.mimeTypes && navigator.mimeTypes.length) { // netscape plugin architecture flashHTML += ' 0) { flashHTML += ' flashvars="'+pairs+'"'; } flashHTML += '>'; } else { // PC IE flashHTML += ''; flashHTML += ''; var tags = this.getParamTags(); if (tags.length > 0) flashHTML += tags; var pairs = this.getVariablePairs().join("&"); if (pairs.length > 0) flashHTML += ''; flashHTML += ''; } return flashHTML; }; FlashObject.prototype.write = function() { if (document.getElementById) { if (this.isValidVersion) { this.changeContent(this.getHTML()); } else if (this.altContent) { this.changeContent(this.altContent); } } }; FlashObject.prototype.changeContent = function(str) { this.element.innerHTML = str; }; // FlashObjectUtil function FlashObjectUtil() {}; FlashObjectUtil.getPlayerVersion = function() { var version = new PlayerVersion("0.0.0"); if (navigator.plugins && navigator.mimeTypes.length) { var plugin = navigator.plugins["Shockwave Flash"]; if (plugin && plugin.description) { version = new PlayerVersion(plugin.description.replace(/([a-z]|[A-Z]|\s)+/, "").replace(/(\s+r|\s+b[0-9]+)/, ".")); } } else if (window.ActiveXObject) { try { var ax = new ActiveXObject("ShockwaveFlash.ShockwaveFlash"); version = new PlayerVersion(ax.GetVariable("$version").split(" ")[1].split(",").join(".")); } catch (e) {} } return version; }; FlashObjectUtil.getPlayerType = function() { return navigator.plugins && navigator.mimeTypes && navigator.mimeTypes.length ? "PlugIn" : "ActiveX"; }; FlashObjectUtil.versionIsValid = function(ver) { return this.getPlayerVersion().versionIsValid(ver); }; // PlayerVersion function PlayerVersion(ver) { ver_arr = String(ver).split("."); this.major = parseInt(ver_arr[0]) || 0; this.minor = parseInt(ver_arr[1]) || 0; this.rev = parseInt(ver_arr[2]) || 0; }; PlayerVersion.prototype.versionIsValid = function(fv) { if (typeof(fv) == 'string' || typeof(fv) == 'number') fv = new PlayerVersion(fv); if (this.major < fv.major) { return false; } else if (this.major == fv.major) { if (this.minor < fv.minor) { return false; } else if (this.minor == fv.minor) { if (this.rev < fv.rev) { return false; } } } return true; }; // add Array.push if needed (ie5) if (Array.prototype.push == null) { Array.prototype.push = function(item) { this[this.length] = item; return this.length; } }; var TextChanger = {}; TextChanger.toString = function() { return "TextChanger"; }; // TextChanger.init = function(sizeObj, onChange, onStop) { this.stop(); this.enabled = true; this.units = "px"; this.sizeStep = 1; this.setSizeObj(sizeObj); if (onChange) this.onChange = onChange; if (onStop) this.onStop = onStop; this.incrementing = null; this.changing = false; this.element = null; this.elements = []; }; // public methods TextChanger.resetSizes = function(sizeObj) { //Debug.log(this+".resetSizes"); var curSizeObj = this.getSizeObj(); this.setSizeObj(sizeObj); var newSizeObj = this.getSizeObj(); //Debug.log("cur min="+curSizeObj.min+" def="+curSizeObj.def+" max="+curSizeObj.max); //Debug.log("new min="+newSizeObj.min+" def="+newSizeObj.def+" max="+newSizeObj.max); if (this.elements && this.elements.length) { var curSize = this.getSize(); var newSize; if (curSize < curSizeObj.def) { newSize = newSizeObj.min+Math.round((curSize-curSizeObj.min)/(curSizeObj.def-curSizeObj.min)*(newSizeObj.def-newSizeObj.min)); } else if (curSize > curSizeObj.def) { newSize = newSizeObj.def+Math.round((curSize-curSizeObj.def)/(curSizeObj.max-curSizeObj.def)*(newSizeObj.max-newSizeObj.def)); } else { newSize = newSizeObj.def; } if (newSize != curSize) { this.setSize(newSize); } } }; TextChanger.increment = function(layers, timeout, firstTimeout) { //Debug.log(this+".increment"); this.stop(); this.incrementing = true; this.setElements(layers); this.change(timeout, firstTimeout); }; TextChanger.decrement = function(layers, timeout, firstTimeout) { //Debug.log(this+".decrement"); this.stop(); this.incrementing = false; this.setElements(layers); this.change(timeout, firstTimeout); }; TextChanger.restore = function(layers) { //Debug.log(this+".restore"); this.stop(); this.incrementing = null; this.setElements(layers); this.change(); }; TextChanger.stop = function() { if (this.changing) { clearTimeout(this.timeoutID); this.timeoutID = null; this.changing = false; this.onStop(); } }; TextChanger.enable = function() { this.enabled = true; }; TextChanger.disable = function() { this.enabled = false; }; // private methods TextChanger.setSizeObj = function(sizeObj) { this.min = sizeObj.min || this.min || 9; this.def = sizeObj.def || this.def || 12; this.max = sizeObj.max || this.max || 16; }; TextChanger.getSizeObj = function() { return { min:this.min, def:this.def, max:this.max }; }; TextChanger.setElements = function(layers) { this.elements = []; for (var i in layers) this.elements.push(util.element(layers[i])); }; TextChanger.callTimeout = function(timeout, firstTimeout) { this.changing = true; this.timeoutID = setTimeout(Delegate.create(this, this.change, timeout), firstTimeout || timeout); }; TextChanger.change = function(timeout, firstTimeout) { //Debug.log(this+".change"); var size = this.getSize(); //Debug.log("incrementing="+this.incrementing+" size="+size+" min="+this.min+" def="+this.def+" max="+this.max+" sizeStep="+this.sizeStep); var newSize; switch (this.incrementing) { case true: //Debug.log("size="+size); newSize = Math.min(size+this.sizeStep, this.max); //Debug.log("newSize="+newSize); if (size != newSize) this.setSize(newSize); if (size >= this.max) this.stop(); else if (timeout) this.callTimeout(timeout, firstTimeout); break; case false: //Debug.log("size="+size); newSize = Math.max(size-this.sizeStep, this.min); //Debug.log("newSize="+newSize); if (size != newSize) this.setSize(newSize); if (size <= this.min) this.stop(); else if (timeout) this.callTimeout(timeout, firstTimeout); break; case null: newSize = this.def; //Debug.log("newSize="+newSize); if (size != newSize) this.setSize(newSize); break; } }; TextChanger.getSize = function() { Debug.log(this+".getSize elements="+this.elements); if (this.elements && this.elements.length) { var size = util.styleToNum(util.getStyle(this.elements[0], "font-size")); } Debug.log('size='+size); if (!size || size > this.max) size = this.def; return size; }; TextChanger.setSize = function(size) { //Debug.log(this+".setSize size="+size); for (var i in this.elements) { util.setStyle(this.elements[i], "fontSize", size+this.units); } this.onChange(size); }; // user defined TextChanger.onChange = function(size) {}; TextChanger.onStop = function() {}; var ImagePopup = {}; // PROPS ImagePopup.id = "imagePopup"; ImagePopup.className = "ImagePopup"; ImagePopup.elements = { container:null, // popup content:null, curtain:null, loading:null, image:null }; ImagePopup.image = {}; // bool ImagePopup.showed = false; ImagePopup.inited = false; ImagePopup.loading = false; ImagePopup.updating = true; // timeout numbers ImagePopup.resizeNum = null; ImagePopup.scrollNum = null; ImagePopup.updateInt = null; // curtain ImagePopup.haveCurtain = true; ImagePopup.haveLoading = true; ImagePopup.loadingHaveShadow = false; // PUBLIC ImagePopup.show = function(link) { //Debug.log(this+".show link="+link); this.image.link = link; if (this.isInited()) { if (this.showed) { this.hide(); } this.showContainer(); this.resetImage(); this.image.link = link; if (!this.loading) { this.showLoading(); } if (this.haveCurtain) { this.showCurtain(); } this.addBrowserEvents(); this.loadImage(link); this.update(); this.showed = true; // selects if (util.isIE6()) { util.hideSelects(); } } return false; }; ImagePopup.hide = function() { //Debug.log(this+".hide"); this.hideContainer(); if (this.loading) { this.cancelLoading(); } if (this.loading) { this.hideLoading(); } else { this.removeImage(); } if (this.haveCurtain) { this.hideCurtain(); } this.removeBrowserEvents(); this.showed = false; // selects if (util.isIE6()) { util.showSelects(); if (window.onresize) { window.onresize(true); } } }; ImagePopup.toString = function() { return this.className; }; // PRIVATE ImagePopup.isInited = function() { if (this.inited) { return true; } else if (util.element(this.id)) { this.init(); return true; } return false; }; ImagePopup.init = function() { //Debug.log(this+".init"); var container = util.element(this.id); //Debug.log("container="+container); if (container != null) { this.elements.container = container; this.elements.content = util.getElementsByClassName(container, "popup_content", "div")[0]; this.elements.loading = util.getElementsByClassName(container, "loading", "img")[0]; this.elements.image = util.getElementsByClassName(container, "image", "img")[0]; this.elements.curtain = util.getElementsByClassName(container, "curtain", "div")[0]; //Debug.log("content="+this.elements.content); //Debug.log("loading="+this.elements.loading); //Debug.log("image="+this.elements.image); //Debug.log("curtain="+this.elements.curtain); this.elements.container.onclick = Delegate.create(this, this.hide); this.inited = true; if (this.image.link != null) { this.show(this.image.link); } } }; ImagePopup.loadImage = function(link) { //Debug.log(this+".loadImage link="+link); this.loading = true; this.showLoading(); this.hideImage(); this.image.preloader = new Image(); this.image.preloader.onload = Delegate.create(this, this.onLoadImage, link); //this.image.preloader.onload = function() { alert("preloader.onload"); };//Delegate.create(this, this.onLoadImage, link); this.image.preloader.src = link; }; ImagePopup.onLoadImage = function(link) { //Debug.log(this+".onLoadImage"); this.setImage(); this.hideLoading(); this.showImage(); this.update(); this.loading = false; }; ImagePopup.cancelLoading = function() { //Debug.log(this+".cancelLoading"); this.image.preloader.onload = null; this.image.preloader = null; this.loading = false; }; ImagePopup.showContainer = function() { //Debug.log(this+".showContainer"); util.setStyle(this.elements.container, "display", "block"); }; ImagePopup.hideContainer = function() { //Debug.log(this+".hideContainer"); util.setStyle(this.elements.container, "display", "none"); }; ImagePopup.showLoading = function() { //Debug.log(this+".showLoading"); if (this.haveLoading) { if (!this.loadingHaveShadow) this.hideShadow(); util.setStyle(this.elements.loading, "display", "block"); } }; ImagePopup.hideLoading = function() { //Debug.log(this+".hideLoading"); if (this.haveLoading) { if (!this.loadingHaveShadow) this.showShadow(); util.setStyle(this.elements.loading, "display", "none"); } }; ImagePopup.showImage = function() { //Debug.log(this+".showImage"); util.setStyle(this.elements.image, "display", "block"); }; ImagePopup.hideImage = function() { //Debug.log(this+".hideImage"); util.setStyle(this.elements.image, "display", "none"); }; ImagePopup.showCurtain = function() { //Debug.log(this+".showCurtain"); util.setStyle(this.elements.curtain, "display", "block"); util.setStyle(util.getHtml(), "overflow", "hidden"); }; ImagePopup.hideCurtain = function() { //Debug.log(this+".hideCurtain"); util.setStyle(this.elements.curtain, "display", "none"); util.setStyle(util.getHtml(), "overflow", "auto"); }; ImagePopup.showShadow = function() { //Debug.log(this+".showShadow"); var elmnts = this.getShadowElements(); //Debug.log("elmnts.length="+elmnts.length); for (var i in elmnts) { util.removeClass(elmnts[i], "invisible"); } }; ImagePopup.hideShadow = function() { //Debug.log(this+".hideShadow"); var elmnts = this.getShadowElements(); for (var i in elmnts) { util.addClass(elmnts[i], "invisible"); } }; ImagePopup.getShadowElements = function() { return util.getElementsByClassName(this.elements.content, ["l", "tl", "t", "tr", "r", "br", "b", "bl"], "td", true); }; ImagePopup.setImage = function() { //Debug.log(this+".setImage"); this.elements.image.src = this.image.link; this.elements.image.width = this.image.preloader.width; this.elements.image.height = this.image.preloader.height; //Debug.log("width="+this.image.preloader.width+" height="+this.image.preloader.height); }; ImagePopup.removeImage = function() { //Debug.log(this+".removeImage"); this.elements.image.src = ""; }; ImagePopup.resetImage = function() { //Debug.log(this+".resetImage"); this.image = { preloader:null, link:"", width:0, height:0 } }; ImagePopup.addBrowserEvents = function() { //Debug.log(this+".addBrowserEvents"); this.resizeNum = Events.addEvent("window", "onresize", Delegate.create(this, this.update)); this.scrollNum = Events.addEvent("window", "onscroll", Delegate.create(this, this.update)); }; ImagePopup.removeBrowserEvents = function() { //Debug.log(this+".removeBrowserEvents"); Events.removeEvent("window", "onresize", this.resizeNum); Events.removeEvent("window", "onscroll", this.scrollNum); }; ImagePopup.update = function() { //Debug.log(this+".update"); var width = util.getElementWidth(this.elements.content); var height = util.getElementHeight(this.elements.content); var allWidth = Math.max(document.body.scrollWidth, util.getInnerWidth()); var allHeight = Math.max(document.body.scrollHeight, util.getInnerHeight()); var scrollX = util.getPageXScroll(); var scrollY = util.getPageYScroll(); //Debug.log(document.body.scrollWidth+" "+util.getInnerWidth()+" "+util.getElementWidth(document.body)); //Debug.log(document.body.scrollHeight+" "+util.getInnerHeight()+" "+util.getElementHeight(document.body)); util.setStyle(this.elements.curtain, "width", allWidth+"px"); util.setStyle(this.elements.curtain, "height", allHeight+"px"); var screenWidth = util.getInnerWidth(); var screenHeight = util.getInnerHeight(); //Debug.log(scrollX+"+("+allWidth+"-"+width+")/2 = "+(util.getPageXScroll()+(allWidth-width)/2)); //Debug.log(util.getPageYScroll()+"+("+allHeight+"-"+height+")/2 = "+(util.getPageYScroll()+(allHeight-height)/2)); //Debug.log(screenWidth+" "+screenHeight); //Debug.log(allHeight+" "+scrollY+" "+screenHeight+" "+height); util.setStyle(this.elements.content, "left", Math.max(0, Math.min(allWidth-width, (scrollX+(screenWidth-width)/2)))+"px"); util.setStyle(this.elements.content, "top", Math.max(0, Math.min(allHeight-height, (scrollY+(screenHeight-height)/2)))+"px"); }; Events.addEvent('window', "onload", Delegate.create(ImagePopup, ImagePopup.init)); /* used props or methods from other files: util.js setHtmlTo element switchElements setStyles.js Keyboard.js ESCAPE Events.js StringPrototype.js htmlEntities Delegate.js */ var Debug = function(){}; Debug.initTime = new Date().getTime(); Debug.id = "debug"; Debug.buffer = 500; Debug.areaBuffer = 500; Debug.data = []; Debug.inited = false; Debug.showTime = true; Debug.showMsgNum = true; Debug.msgNum = 0; Debug.scrollId = null; Debug.bg_node = null; Debug.debug_node = null; Debug.log = function(msg, showAlert) { var obj = { time:new Date().getTime(), msg:msg }; if (this.inited) { Debug.showMsg(obj); } this.data.push(obj); if (this.data.length > this.buffer) this.data.shift(); if (showAlert) { alert((this.showTime ? this.getTimeStr(obj.time)+" - " : "")+obj.msg); } }; Debug.clear = function() { this.data = []; util.setHtmlTo(this.id, ""); }; Debug.showMsg = function(obj) { this.msgNum++; var p = document.createElement("p"); var d = this.debug_node; //util.element(this.id); d.childNodes.length ? d.insertBefore(p, d.childNodes[0]) : d.appendChild(p); p.innerHTML = (this.showMsgNum ? this.msgNum+": " : "")+(this.showTime ? this.getTimeStr(obj.time)+" - " : "")+String(obj.msg).htmlEntities(); util.setStyles(p, [["lineHeight", "100%"],["margin", "0"],["padding", "1em 0 0 0"]]); while (d.childNodes.length > this.areaBuffer) { d.removeChild(d.lastChild); } //util.setHtmlTo(this.id, (this.showTime ? this.getTimeStr(obj.time)+" - " : "")+String(obj.msg).htmlEntities()+util.element(this.id).innerHTML, false, true); }; Debug.switchArea = function(e) { e = window.event ? window.event : e; switch (e.keyCode) { case Keyboard.ESCAPE: if (util.element(this.id)) { this.debug_node.parentNode.removeChild(this.debug_node); this.bg_node.parentNode.removeChild(this.bg_node); Events.removeEvent("window", "onscroll", this.scrollId); var elements = util.getBody().childNodes; } else { this.bodyElement.appendChild(this.bg_node); util.setStyles(this.id+"_bg", [["position","absolute"],["left","0"],["top","0"],["margin","0"],["padding","0"],["width","100%"],["height",util.isIE() ? "2000px" : "100%"],["background","#FFFFFF"],["zIndex","99998"]]); this.bodyElement.appendChild(this.debug_node); util.setStyles(this.id, [["position","absolute"],["left","0"],["top","0"],["margin","0"],["padding","0"],["textAlign","left"],["font","14px Verdana,Arial,sans-serif"],["zIndex","99999"]]); this.scrollId = Events.addEvent("window", "onscroll", Delegate.create(this, this.onWindowScroll)); this.onWindowScroll(); } }; }; Debug.onWindowScroll = function(e) { util.setStyles(this.id+"_bg", [["left", util.getPageXScroll()+"px"], ["top", util.getPageYScroll()+"px"]]); }; Debug.initDebugger = function() { this.log("initDebugger"); /**/ this.bg_node = document.createElement("div"); this.bg_node.setAttribute("id", this.id+"_bg"); this.debug_node = document.createElement("div"); this.debug_node.setAttribute("id", this.id); this.bodyElement = document.body || document.getElementsByTagName("body")[0]; //Events.addEvent('document', "onkeydown", Delegate.create(this, this.switchArea)); this.inited = true; for (var i = 0; i < this.data.length; i++) { this.showMsg(this.data[i]); } }; Debug.getTimeStr = function(time) { var timer = (time-this.initTime); var milisecs = util.zeroPad(timer%1000, 3); var secs = util.zeroPad((timer-milisecs)/1000%60, 2); var mins = util.zeroPad(Math.floor((timer-milisecs)/1000/60), 2); return mins+":"+secs+":"+milisecs; }; Events.addEvent('window', "onload", Delegate.create(Debug, Debug.initDebugger)); var Keyboard = { PAUsE:19, PG_UP:33, PG_DOWN:34, END:35, HOME:36, LEFT:37, UP:38, RIGHT:39, DOWN:40, PRINTSCREEN:44, INSERT:45, DELETE:46, ESCAPE:27, TAB:9, CAPS:20, SHIFT:16, CONTROL:17, ALT:18, SPACE:32, UNDERLINE:109, EQUALS:61, BACKSPACE:8, ENTER:13, K_0:48, K_1:49, K_2:50, K_3:51, K_4:52, K_5:53, K_6:54, K_7:55, K_8:56, K_9:57, A:65, B:66, C:67, D:68, E:69, F:70, G:71, H:72, I:73, J:74, K:75, L:76, M:77, N:78, O:79, P:80, Q:81, R:82, S:83, T:84, U:85, V:86, W:87, X:88, Y:89, Z:90, TILDA:92, WIN:91, WIN_CONTEXT:93, NUM_LOCK:144, NUM_0:96, NUM_1:97, NUM_2:98, NUM_3:99, NUM_4:100, NUM_5:101, NUM_6:102, NUM_7:103, NUM_8:104, NUM_9:105, NUM_DEVIDE:111, NUM_MULTIPLY:106, NUM_SUBTRACT:109, NUM_ADD:107, NUM_PERIOD:110, F1:112, F2:113, F3:114, F4:115, F5:116, F6:117, F7:118, F8:119, F9:120, F10:121, F11:122, F12:123, SCROLL_LOCK:145, SEMICOLON:59, COMMA:188, PERIOD:190, SLASH:191, BACK_QUOTE:192, BRACKET:219, BACK_SLASH:220, CLOSE_BRACKET:221, QUOTE:222, BACK_SLASH_LEFT:226 }; String.prototype.htmlEntities = function() { var chars = [ '&','à','á','â','ã','ä','å','æ','ç','è','é', 'ê','ë','ì','í','î','ï','ð','ñ','ò','ó','ô', 'õ','ö','ø','ù','ú','û','ü','ý','þ','ÿ','À', 'Á','Â','Ã','Ä','Å','Æ','Ç','È','É','Ê','Ë', 'Ì','Í','Î','Ï','Ð','Ñ','Ò','Ó','Ô','Õ','Ö', 'Ø','Ù','Ú','Û','Ü','Ý','Þ','€','\"','ß','<', '>','¢','£','¤','¥','¦','§','¨','©','ª','«', '¬','­','®','¯','°','±','²','³','´','µ','¶', '·','¸','¹','º','»','¼','½','¾' ]; var entities = [ 'amp','agrave','aacute','acirc','atilde','auml','aring', 'aelig','ccedil','egrave','eacute','ecirc','euml','igrave', 'iacute','icirc','iuml','eth','ntilde','ograve','oacute', 'ocirc','otilde','ouml','oslash','ugrave','uacute','ucirc', 'uuml','yacute','thorn','yuml','Agrave','Aacute','Acirc', 'Atilde','Auml','Aring','AElig','Ccedil','Egrave','Eacute', 'Ecirc','Euml','Igrave','Iacute','Icirc','Iuml','ETH','Ntilde', 'Ograve','Oacute','Ocirc','Otilde','Ouml','Oslash','Ugrave', 'Uacute','Ucirc','Uuml','Yacute','THORN','euro','quot','szlig', 'lt','gt','cent','pound','curren','yen','brvbar','sect','uml', 'copy','ordf','laquo','not','shy','reg','macr','deg','plusmn', 'sup2','sup3','acute','micro','para','middot','cedil','sup1', 'ordm','raquo','frac14','frac12','frac34' ]; var newString = this; for (var i = 0; i < chars.length; i++) { var myRegExp = new RegExp(); myRegExp.compile(chars[i],'g'); newString = newString.replace (myRegExp, '&' + entities[i] + ';'); } return newString; }; /* String.prototype.trim = function(){ return this.replace(/^\s*([^ ]*)\s*$/, "$1"); } */ String.prototype.trim = function() { return this.replace(/^\s+|\s+$/g,""); } String.prototype.ltrim = function() { return this.replace(/^\s+/,""); } String.prototype.rtrim = function() { return this.replace(/\s+$/,""); } function onPageLoad() { Debug.log("onPageLoad"); showInvisibleElements(); fixBgImageCache(); fixEmails(emailClass); isPageLoaded = true; }; // show element that a invisible by default function showInvisibleElements() { Debug.log("showInvisibleElements"); var elements = util.getElementsByClassName(document, 'invisible', null, true); for (var i in elements) { util.removeClass(elements[i], 'invisible'); } }; function preserveFieldsValues(form, focus, blur) { //Debug.log("preserveFieldsValues form="+form); var inputs = form.getElementsByTagName("input"); var areas = form.getElementsByTagName("textarea"); var fields = inputs.concat(areas); var text; for (var i in fields) { if (!fields[i].type || fields[i].type == 'text') { text = fields[i].title || fields[i].value; fields[i].onfocus = Delegate.create(this, util.focus, fields[i], text); fields[i].onblur = Delegate.create(this, util.blur, fields[i], text); } } }; function fixEmails(emailClass) { Debug.log("setEmails"); var emails = util.getElementsByClassName(document, emailClass || 'email', '*', true); var email, emailStr, emailRes, len, len1, letter; len = emails.length; for (var i = 0; i < len; i++) { email = emails[i]; emailStr = email.innerHTML.replace(/<[^>]*>/ig, ''); emailStr = emailStr.replace(/&at;/ig, '@'); emailStr = emailStr.replace(/&[^;]*;/ig, ''); emailStr = emailStr.replace(/&/ig, ''); emailRes = ''; len1 = emailStr.length; for (var j = 0; j < len1; j++) { letter = emailStr.substr(j, 1); //Debug.log('letter='+letter+' '+letter.match(/[-_.@a-zA-Z0-9]/)); if (letter.match(/[-_.@a-zA-Z0-9]/) != null) { emailRes += letter; } } //Debug.log('tagName='+email.tagName); //Debug.log('emailRes='+emailRes); switch (email.tagName.toLowerCase()) { case 'a': email.href = 'mailto:'+emailRes; email.innerHTML = emailRes; break; default: email.innerHTML = ''+emailRes+''; util.removeClass(email.firstChild, emailClass); } } }; var emailClass = 'email'; Events.setReturnValue("window", "onload", Delegate.create(this, onPageLoad)); function setTabs() { var tabs_container = util.element('tab_menu'); if (tabs_container) { var links = tabs_container.getElementsByTagName('a'); var el, sufix; var len = links.length; for(var i = 0; i < len; i++) { el = links[i]; sufix = el.id.substr(el.id.indexOf('_') + 1); el.onclick = Delegate.create(this, activateTab, el, sufix); homeTabs.push(sufix); } } }; function activateTab(el, sufix){ var len = homeTabs.length; for(var i = 0; i < len; i++) { util.addClass(util.element('block_' + homeTabs[i]), 'hidden'); util.removeClass(util.element('tab_' + homeTabs[i]).parentNode, 'tab_current'); } util.removeClass(util.element('block_' + sufix), 'hidden'); util.addClass(util.element('tab_' + sufix).parentNode, 'tab_current'); return false; }; var homeTabs = []; Events.addEvent('window', 'onload', Delegate.create(this, 'setTabs')); function setImagePopups() { Debug.log("setImagePopups") var links = util.getElementsByClassName(document, 'popup_link', 'a'); var len = links.length; Debug.log("len="+len); for (var i = 0; i < len; i++) { links[i].onclick = Delegate.create(this, showImagePopup, links[i]); } } function showImagePopup(link) { //Debug.log("showImagePopup link="+link) ImagePopup.show(link); return false; } Events.addEvent("window", "onload", Delegate.create(this, setImagePopups)); function setTextChanger() { Debug.log('setTextChanger'); TextChanger.init(getTextSizeObj(), onTextChange, onTextStop); Events.addEvent("zoom_out", "onmousedown", Delegate.create(this, doZoomIn)); Events.addEvent("zoom_out", "onmouseup", function() { TextChanger.stop(); this.blur(); }); Events.addEvent("zoom_no", "onmousedown", Delegate.create(this, doZoomDef)); Events.addEvent("zoom_no", "onmouseup", function() { this.blur(); }); Events.addEvent("zoom_in", "onmousedown", Delegate.create(this, doZoomOut)); Events.addEvent("zoom_in", "onmouseup", function() { TextChanger.stop(); this.blur(); }); } function onTextChange(size) { Debug.log("onTextChange size="+size) //window.onresize(true); // force resize event when needed } function onTextStop() { //Debug.log("onTextStop") } function updateTextOnResize() { //Debug.log("updateTextOnResize haveResChange="+haveResChange()); if (haveResChange()) { TextChanger.resetSizes(getTextSizeObj()); } } function getTextSizeObj() { return { min:9, def:12, max:18 }; } function zoomIn() { //Debug.log("zoomIn"); util.element("zoom_in").onmousedown(); util.element("zoom_in").onmouseup(); } function zoomDef() { //Debug.log("zoomDef"); util.element("zoom_no").onmousedown(); util.element("zoom_no").onmouseup(); } function zoomOut() { //Debug.log("zoomOut"); util.element("zoom_out").onmousedown(); util.element("zoom_out").onmouseup(); } function doZoomIn() { //Debug.log("doZoomIn"); //var elements = ["container"]; //var elements = util.getElementsByClassName("container", "box_content", "div", true); var elements = getTextChangeElements(); //Debug.log("elements.length="+elements.length); TextChanger.decrement(elements, textChangeTimer, textChangeFirstTimer); } function doZoomDef() { //Debug.log("doZoomDef"); //var elements = ["container"]; //var elements = util.getElementsByClassName("container", "box_content", "div", true); var elements = getTextChangeElements(); //Debug.log("elements.length="+elements.length); TextChanger.restore(elements); } function doZoomOut() { //Debug.log("doZoomOut"); //var elements = ["container"]; //var elements = util.getElementsByClassName("container", "box_content", "div", true); var elements = getTextChangeElements(); //Debug.log("elements.length="+elements.length); TextChanger.increment(elements, textChangeTimer, textChangeFirstTimer); } function doPrint() { //Debug.log("doPrint"); window.print(); } function getTextChangeElements(container, cls) { var classes = cls || ['image_info', 'article']; var elements = []; var tmp_els; for (var i in classes) { //tmp_els = util.getElementsByClassName(container||document, classes[i], "div", true); //tmp_els = util.getElementsByClassName(container||document, classes, ['div', 'td'], true); tmp_els = util.getElementsByClassName(container||document, classes, ['*'], true); for (var j in tmp_els) { elements.push(tmp_els[j]); } } return elements; } // PROPS var textChangeTimer = 100; var textChangeFirstTimer = 500; var lastTextObj; Events.addEvent("window", "onload", Delegate.create(this, 'setTextChanger')); //Events.addEvent("window", "onresize", updateTextOnResize);