function nlsubmit() { var email = document.nlform['nl[email]'].value; if (email == '') { alert('Kérlek, töltsd ki az e-mail mezőt!'); return false; } else { var re = new RegExp("^.*\@.*[\.].*$","i"); if (!email.match(re)) { alert('Kérlek, valós e-mail címet adj meg!'); return false; } else { document.nlform.submit(); return true; } } } function init() { var y = document.getElementsByTagName('a'); for (var i=0; i 9) { alert('A foglalható jegyek számának 1 és 4 közé kell esnie!'); return false; } frames['hiddenframe'].location.href = url + '/' + ticket_number + '/' + encode64(customer_name, false); return true; } offeredSeats = 0; function removeOfferedSeats() { var y = document.getElementsByTagName('td'); for (var i=0; i 0) { return; } else current = parseInt(current); current = current + 20; setTimeout("changePos('" + container + "','" + current + "', 'left')", 100); } function changePos(id, pos, direction) { document.getElementById(id).style.left = pos + 'px' pos = parseInt(pos); if (moving) { if (direction == 'left') { if (pos < 0) { pos = pos + 20; } else { return; } } else { if (pos > max) { pos = pos - 20; } else { return; } } setTimeout("changePos('" + id + "','" + pos + "', '" + direction + "')", 100); } } function showCenterImage(objid,width,height) { var obj = document.getElementById(objid); if (self.innerWidth) { var frameWidth = self.innerWidth; var frameHeight = self.innerHeight; } else if (document.documentElement && document.documentElement.clientWidth) { var frameWidth = document.documentElement.clientWidth; var frameHeight = document.documentElement.clientHeight; } else if (document.body) { var frameWidth = document.body.clientWidth; var frameHeight = document.body.clientHeight; } if (self.pageYOffset) { var plusx= self.pageXOffset; var plusy = self.pageYOffset; } else if(document.documentElement && document.documentElement.scrollTop) { var plusx = document.documentElement.scrollLeft; var plusy = document.documentElement.scrollTop; } else { var plusx = document.body.scrollLeft; var plusy = document.body.scrollTop; } // -20 : padding // -14 : jobb oldali scrollbar var posx = Math.round(frameWidth/2 - width/2 + plusx -20 -14); var posy = Math.round(frameHeight/2 - height/2 + plusy -20); obj.style.left = posx + 'px'; obj.style.top = posy + 'px'; visible(objid,true,'block'); } function hideCenterImage(objid) { var obj = document.getElementById(objid); visible(objid,false,''); } function link_onclick() { var timer = 0; var location; var picWidth = 200; var picHeight = 200; var warning = ''; if (timer) clearTimeout(timer); location = this.getAttribute('href'); if (!location) location = this.getAttribute('location'); warning = this.getAttribute('warning'); if (warning && warning != '') { if (!confirm(warning)) { return false; } } if ((this.getAttribute('inactivated')) && (this.getAttribute('inactivated') != '')) { alert(this.getAttribute('inactivated')); return false; } if ((location) && (location != '')) { timer = setTimeout("document.location='" + location + "'", 10); } return false; } function form_onsubmit() { formname = this.getAttribute('name'); if (formname == 'searchform') { if (document.forms['' + formname + ''].searchtext.value.length < 3) { new Effect.Shake('searchfield'); Effect.Appear('searchfieldwarning', { duration:2.0, transition:Effect.Transitions.wobble, afterFinish: function() { setTimeout((function() { new Effect.Fade('searchfieldwarning'); } ), 1000); } }); return false; } } if (formname == 'newsletterform') { if (document.forms['' + formname + ''].newsletteremail.value =='' || document.forms['' + formname + ''].newsletteremail.value =='e-mail cím') { visible('emailfieldmsg',false,''); new Effect.Shake('emailfield'); Effect.Appear('emailfieldwarning', { duration:2.0, transition:Effect.Transitions.wobble, afterFinish: function() { setTimeout((function() { new Effect.Fade('emailfieldwarning'); } ), 1000); } }); return false; } } } function submit_form() { var formname = ''; var submitaction = ''; if ((this.getAttribute('inactivated')) && (this.getAttribute('inactivated') != '')) { alert(this.getAttribute('inactivated')); return false; } formname = this.getAttribute('submit'); submitaction = this.getAttribute('submitaction'); if (submitaction) { document.forms['' + formname + ''].setAttribute('action', submitaction); } if (formname == 'folderForm' && (!is_any_checkbox_checked('choosedImages[]') || (this.className != 'underline' && !is_size_selected('choosedSize')))) { alert('A művelet elvégzéséhez legalább 1 képet és kívánt méretet ki kell jelölnöd!'); return false; } if (formname == 'searchform') { if (document.forms['' + formname + ''].searchtext.value.length < 3) { new Effect.Shake('searchfield'); Effect.Appear('searchfieldwarning', { duration:2.0, transition:Effect.Transitions.wobble, afterFinish: function() { setTimeout((function() { new Effect.Fade('searchfieldwarning'); } ), 1000); } }); return false; } } if (formname == 'newsletterform') { if (document.forms['' + formname + ''].newsletteremail.value =='' || document.forms['' + formname + ''].newsletteremail.value =='e-mail cím') { visible('emailfieldmsg',false,''); new Effect.Shake('emailfield'); Effect.Appear('emailfieldwarning', { duration:2.0, transition:Effect.Transitions.wobble, afterFinish: function() { setTimeout((function() { new Effect.Fade('emailfieldwarning'); } ), 1000); } }); return false; } } if (this.getAttribute('hidecontent')) { objname = this.getAttribute('hidecontent'); if (document.getElementById(objname)) document.getElementById(objname).style.display='none'; } if (this.getAttribute('showcontent')) { objname = this.getAttribute('showcontent'); if (document.getElementById(objname)) document.getElementById(objname).style.display=''; } document.forms['' + formname + ''].submit(); return false; } function visible(obj, visible, display) { if (!display) display = ''; if (document.all) { if (window.document.all(obj)) { if (visible=='change') visible=window.document.all(obj).style.display=='none'; if (visible) window.document.all(obj).style.display=display; else window.document.all(obj).style.display='none'; } } else if (document.getElementById) { if (document.getElementById(obj)) { if (visible=='change') visible=document.getElementById(obj).style.display=='none'; if (visible) { document.getElementById(obj).style.display=display; } else document.getElementById(obj).style.display='none'; } } return true; } var newWindow; function openPopup() { var location; var windowName; var width; var height; var usebg; location = this.getAttribute('openpopup'); wName = this.getAttribute('wName'); pWidth = this.getAttribute('pWidth'); pHeight = this.getAttribute('pHeight'); usebg = this.getAttribute('usebg'); if (newWindow) { newWindow.close(); } if (usebg == 1) { newWindow = window.open("", wName,'resizable=no,width='+pWidth+',height='+pHeight+',scrollbars=no'); newWindow.document.writeln('
'); } else { newWindow = window.open(location, wName ,'width='+pWidth+',height='+pHeight+',status=no,toolbar=no,menubar=no,location=no,directories=no,resizable=yes,scrollbars=yes,titlebar=no'); } return false; } function defaultimage() { var image; image = this.getAttribute('defaultimage'); this.src = image; return false; } function _insertimage(container, image) { if (document[container]) { document[container].src = image; return true; } return false; } function insertimage() { var container; var image; container = this.getAttribute('insertimage'); image = this.getAttribute('image'); _insertimage(container, image); return false; } /* Prototype JavaScript framework, version 1.4.0_pre2 * (c) 2005 Sam Stephenson * * THIS FILE IS AUTOMATICALLY GENERATED. When sending patches, please diff * against the source tree, available from the Prototype darcs repository. * * Prototype is freely distributable under the terms of an MIT-style license. * * For details, see the Prototype web site: http://prototype.conio.net/ * /*--------------------------------------------------------------------------*/ var Prototype = { Version: '1.4.0_pre2', emptyFunction: function() {} } var Class = { create: function() { return function() { this.initialize.apply(this, arguments); } } } var Abstract = new Object(); Object.extend = function(destination, source) { for (property in source) { destination[property] = source[property]; } return destination; } /* Object.prototype.extend = function(object) { return Object.extend.apply(this, [this, object]); } */ Function.prototype.bind = function(object) { var __method = this; return function() { return __method.apply(object, arguments); } } Function.prototype.bindAsEventListener = function(object) { var __method = this; return function(event) { return __method.call(object, event || window.event); } } Number.prototype.toColorPart = function() { var digits = this.toString(16); if (this < 16) return '0' + digits; return digits; } var Try = { these: function() { var returnValue; for (var i = 0; i < arguments.length; i++) { var lambda = arguments[i]; try { returnValue = lambda(); break; } catch (e) {} } return returnValue; } } /*--------------------------------------------------------------------------*/ var PeriodicalExecuter = Class.create(); PeriodicalExecuter.prototype = { initialize: function(callback, frequency) { this.callback = callback; this.frequency = frequency; this.currentlyExecuting = false; this.registerCallback(); }, registerCallback: function() { setInterval(this.onTimerEvent.bind(this), this.frequency * 1000); }, onTimerEvent: function() { if (!this.currentlyExecuting) { try { this.currentlyExecuting = true; this.callback(); } finally { this.currentlyExecuting = false; } } } } /*--------------------------------------------------------------------------*/ function $() { var elements = new Array(); for (var i = 0; i < arguments.length; i++) { var element = arguments[i]; if (typeof element == 'string') { element = document.getElementById(element); } if (arguments.length == 1) return element; elements.push(element); } return elements; } if (!Array.prototype.push) { Array.prototype.push = function() { var startLength = this.length; for (var i = 0; i < arguments.length; i++) this[startLength + i] = arguments[i]; return this.length; } } if (!Function.prototype.apply) { // Based on code from http://www.youngpup.net/ Function.prototype.apply = function(object, parameters) { var parameterStrings = new Array(); if (!object) object = window; if (!parameters) parameters = new Array(); for (var i = 0; i < parameters.length; i++) parameterStrings[i] = 'parameters[' + i + ']'; object.__apply__ = this; var result = eval('object.__apply__(' + parameterStrings.join(', ') + ')'); object.__apply__ = null; return result; } } Object.extend(String.prototype, { stripTags: function() { return this.replace(/<\/?[^>]+>/gi, ''); }, escapeHTML: function() { var div = document.createElement('div'); var text = document.createTextNode(this); div.appendChild(text); return div.innerHTML; }, unescapeHTML: function() { var div = document.createElement('div'); div.innerHTML = this.stripTags(); return div.childNodes[0].nodeValue; } }); var Ajax = { getTransport: function() { return Try.these( function() {return new ActiveXObject('Msxml2.XMLHTTP')}, function() {return new ActiveXObject('Microsoft.XMLHTTP')}, function() {return new XMLHttpRequest()} ) || false; } } Ajax.Base = function() {}; Ajax.Base.prototype = { setOptions: function(options) { this.options = { method: 'post', asynchronous: true, parameters: '' } Object.extend(this.options, options || {}); }, responseIsSuccess: function() { return this.transport.status == undefined || this.transport.status == 0 || (this.transport.status >= 200 && this.transport.status < 300); }, responseIsFailure: function() { return !this.responseIsSuccess(); } } Ajax.Request = Class.create(); Ajax.Request.Events = ['Uninitialized', 'Loading', 'Loaded', 'Interactive', 'Complete']; Ajax.Request.prototype = Object.extend(new Ajax.Base(), { initialize: function(url, options) { this.transport = Ajax.getTransport(); this.setOptions(options); this.request(url); }, request: function(url) { var parameters = this.options.parameters || ''; if (parameters.length > 0) parameters += '&_='; try { if (this.options.method == 'get') url += '?' + parameters; this.transport.open(this.options.method, url, this.options.asynchronous); if (this.options.asynchronous) { this.transport.onreadystatechange = this.onStateChange.bind(this); setTimeout((function() {this.respondToReadyState(1)}).bind(this), 10); } this.setRequestHeaders(); var body = this.options.postBody ? this.options.postBody : parameters; this.transport.send(this.options.method == 'post' ? body : null); } catch (e) { } }, setRequestHeaders: function() { var requestHeaders = ['X-Requested-With', 'XMLHttpRequest', 'X-Prototype-Version', Prototype.Version]; if (this.options.method == 'post') { requestHeaders.push('Content-type', 'application/x-www-form-urlencoded'); /* Force "Connection: close" for Mozilla browsers to work around * a bug where XMLHttpReqeuest sends an incorrect Content-length * header. See Mozilla Bugzilla #246651. */ if (this.transport.overrideMimeType) requestHeaders.push('Connection', 'close'); } if (this.options.requestHeaders) requestHeaders.push.apply(requestHeaders, this.options.requestHeaders); for (var i = 0; i < requestHeaders.length; i += 2) this.transport.setRequestHeader(requestHeaders[i], requestHeaders[i+1]); }, onStateChange: function() { var readyState = this.transport.readyState; if (readyState != 1) this.respondToReadyState(this.transport.readyState); }, respondToReadyState: function(readyState) { var event = Ajax.Request.Events[readyState]; if (event == 'Complete') (this.options['on' + this.transport.status] || this.options['on' + (this.responseIsSuccess() ? 'Success' : 'Failure')] || Prototype.emptyFunction)(this.transport); (this.options['on' + event] || Prototype.emptyFunction)(this.transport); /* Avoid memory leak in MSIE: clean up the oncomplete event handler */ if (event == 'Complete') this.transport.onreadystatechange = Prototype.emptyFunction; } }); Ajax.Updater = Class.create(); Ajax.Updater.ScriptFragment = '(?:)((\n|.)*?)(?:<\/script>)'; Object.extend(Object.extend(Ajax.Updater.prototype, Ajax.Request.prototype), { initialize: function(container, url, options) { this.containers = { success: container.success ? $(container.success) : $(container), failure: container.failure ? $(container.failure) : (container.success ? null : $(container)) } this.transport = Ajax.getTransport(); this.setOptions(options); var onComplete = this.options.onComplete || Prototype.emptyFunction; this.options.onComplete = (function() { this.updateContent(); onComplete(this.transport); }).bind(this); this.request(url); }, updateContent: function() { var receiver = this.responseIsSuccess() ? this.containers.success : this.containers.failure; var match = new RegExp(Ajax.Updater.ScriptFragment, 'img'); var response = this.transport.responseText.replace(match, ''); var scripts = this.transport.responseText.match(match); if (receiver) { if (this.options.insertion) { new this.options.insertion(receiver, response); } else { receiver.innerHTML = response; } } if (this.responseIsSuccess()) { if (this.onComplete) setTimeout((function() {this.onComplete( this.transport)}).bind(this), 10); } if (this.options.evalScripts && scripts) { match = new RegExp(Ajax.Updater.ScriptFragment, 'im'); setTimeout((function() { for (var i = 0; i < scripts.length; i++) eval(scripts[i].match(match)[1]); }).bind(this), 10); } } }); Ajax.PeriodicalUpdater = Class.create(); Ajax.PeriodicalUpdater.prototype = Object.extend(new Ajax.Base(), { initialize: function(container, url, options) { this.setOptions(options); this.onComplete = this.options.onComplete; this.frequency = (this.options.frequency || 2); this.decay = 1; this.updater = {}; this.container = container; this.url = url; this.start(); }, start: function() { this.options.onComplete = this.updateComplete.bind(this); this.onTimerEvent(); }, stop: function() { this.updater.onComplete = undefined; clearTimeout(this.timer); (this.onComplete || Ajax.emptyFunction).apply(this, arguments); }, updateComplete: function(request) { if (this.options.decay) { this.decay = (request.responseText == this.lastText ? this.decay * this.options.decay : 1); this.lastText = request.responseText; } this.timer = setTimeout(this.onTimerEvent.bind(this), this.decay * this.frequency * 1000); }, onTimerEvent: function() { this.updater = new Ajax.Updater(this.container, this.url, this.options); } }); document.getElementsByClassName = function(className) { var children = document.getElementsByTagName('*') || document.all; var elements = new Array(); for (var i = 0; i < children.length; i++) { var child = children[i]; var classNames = child.className.split(' '); for (var j = 0; j < classNames.length; j++) { if (classNames[j] == className) { elements.push(child); break; } } } return elements; } /*--------------------------------------------------------------------------*/ if (!window.Element) { var Element = new Object(); } Object.extend(Element, { toggle: function() { for (var i = 0; i < arguments.length; i++) { var element = $(arguments[i]); element.style.display = (element.style.display == 'none' ? '' : 'none'); } }, hide: function() { for (var i = 0; i < arguments.length; i++) { var element = $(arguments[i]); element.style.display = 'none'; } }, show: function() { for (var i = 0; i < arguments.length; i++) { var element = $(arguments[i]); element.style.display = ''; } }, remove: function(element) { element = $(element); element.parentNode.removeChild(element); }, getHeight: function(element) { element = $(element); return element.offsetHeight; }, hasClassName: function(element, className) { element = $(element); if (!element) return; var a = element.className.split(' '); for (var i = 0; i < a.length; i++) { if (a[i] == className) return true; } return false; }, addClassName: function(element, className) { element = $(element); Element.removeClassName(element, className); element.className += ' ' + className; }, removeClassName: function(element, className) { element = $(element); if (!element) return; var newClassName = ''; var a = element.className.split(' '); for (var i = 0; i < a.length; i++) { if (a[i] != className) { if (i > 0) newClassName += ' '; newClassName += a[i]; } } element.className = newClassName; }, // removes whitespace-only text node children cleanWhitespace: function(element) { var element = $(element); for (var i = 0; i < element.childNodes.length; i++) { var node = element.childNodes[i]; if (node.nodeType == 3 && !/\S/.test(node.nodeValue)) Element.remove(node); } } }); var Toggle = new Object(); Toggle.display = Element.toggle; /*--------------------------------------------------------------------------*/ Abstract.Insertion = function(adjacency) { this.adjacency = adjacency; } Abstract.Insertion.prototype = { initialize: function(element, content) { this.element = $(element); this.content = content; if (this.adjacency && this.element.insertAdjacentHTML) { this.element.insertAdjacentHTML(this.adjacency, this.content); } else { this.range = this.element.ownerDocument.createRange(); if (this.initializeRange) this.initializeRange(); this.fragment = this.range.createContextualFragment(this.content); this.insertContent(); } } } var Insertion = new Object(); Insertion.Before = Class.create(); Insertion.Before.prototype = Object.extend(new Abstract.Insertion('beforeBegin'), { initializeRange: function() { this.range.setStartBefore(this.element); }, insertContent: function() { this.element.parentNode.insertBefore(this.fragment, this.element); } }); Insertion.Top = Class.create(); Insertion.Top.prototype = Object.extend(new Abstract.Insertion('afterBegin'), { initializeRange: function() { this.range.selectNodeContents(this.element); this.range.collapse(true); }, insertContent: function() { this.element.insertBefore(this.fragment, this.element.firstChild); } }); Insertion.Bottom = Class.create(); Insertion.Bottom.prototype = Object.extend(new Abstract.Insertion('beforeEnd'), { initializeRange: function() { this.range.selectNodeContents(this.element); this.range.collapse(this.element); }, insertContent: function() { this.element.appendChild(this.fragment); } }); Insertion.After = Class.create(); Insertion.After.prototype = Object.extend(new Abstract.Insertion('afterEnd'), { initializeRange: function() { this.range.setStartAfter(this.element); }, insertContent: function() { this.element.parentNode.insertBefore(this.fragment, this.element.nextSibling); } }); var Field = { clear: function() { for (var i = 0; i < arguments.length; i++) $(arguments[i]).value = ''; }, focus: function(element) { $(element).focus(); }, present: function() { for (var i = 0; i < arguments.length; i++) if ($(arguments[i]).value == '') return false; return true; }, select: function(element) { $(element).select(); }, activate: function(element) { $(element).focus(); $(element).select(); } } /*--------------------------------------------------------------------------*/ var Form = { serialize: function(form) { var elements = Form.getElements($(form)); var queryComponents = new Array(); for (var i = 0; i < elements.length; i++) { var queryComponent = Form.Element.serialize(elements[i]); if (queryComponent) queryComponents.push(queryComponent); } return queryComponents.join('&'); }, getElements: function(form) { var form = $(form); var elements = new Array(); for (tagName in Form.Element.Serializers) { var tagElements = form.getElementsByTagName(tagName); for (var j = 0; j < tagElements.length; j++) elements.push(tagElements[j]); } return elements; }, getInputs: function(form, typeName, name) { var form = $(form); var inputs = form.getElementsByTagName('input'); if (!typeName && !name) return inputs; var matchingInputs = new Array(); for (var i = 0; i < inputs.length; i++) { var input = inputs[i]; if ((typeName && input.type != typeName) || (name && input.name != name)) continue; matchingInputs.push(input); } return matchingInputs; }, disable: function(form) { var elements = Form.getElements(form); for (var i = 0; i < elements.length; i++) { var element = elements[i]; element.blur(); element.disabled = 'true'; } }, enable: function(form) { var elements = Form.getElements(form); for (var i = 0; i < elements.length; i++) { var element = elements[i]; element.disabled = ''; } }, focusFirstElement: function(form) { var form = $(form); var elements = Form.getElements(form); for (var i = 0; i < elements.length; i++) { var element = elements[i]; if (element.type != 'hidden' && !element.disabled) { Field.activate(element); break; } } }, reset: function(form) { $(form).reset(); } } Form.Element = { serialize: function(element) { var element = $(element); var method = element.tagName.toLowerCase(); var parameter = Form.Element.Serializers[method](element); if (parameter) return encodeURIComponent(parameter[0]) + '=' + encodeURIComponent(parameter[1]); }, getValue: function(element) { var element = $(element); var method = element.tagName.toLowerCase(); var parameter = Form.Element.Serializers[method](element); if (parameter) return parameter[1]; } } Form.Element.Serializers = { input: function(element) { switch (element.type.toLowerCase()) { case 'submit': case 'hidden': case 'password': case 'text': return Form.Element.Serializers.textarea(element); case 'checkbox': case 'radio': return Form.Element.Serializers.inputSelector(element); } return false; }, inputSelector: function(element) { if (element.checked) return [element.name, element.value]; }, textarea: function(element) { return [element.name, element.value]; }, select: function(element) { var value = ''; if (element.type == 'select-one') { var index = element.selectedIndex; if (index >= 0) value = element.options[index].value || element.options[index].text; } else { value = new Array(); for (var i = 0; i < element.length; i++) { var opt = element.options[i]; if (opt.selected) value.push(opt.value || opt.text); } } return [element.name, value]; } } /*--------------------------------------------------------------------------*/ var $F = Form.Element.getValue; /*--------------------------------------------------------------------------*/ Abstract.TimedObserver = function() {} Abstract.TimedObserver.prototype = { initialize: function(element, frequency, callback) { this.frequency = frequency; this.element = $(element); this.callback = callback; this.lastValue = this.getValue(); this.registerCallback(); }, registerCallback: function() { setInterval(this.onTimerEvent.bind(this), this.frequency * 1000); }, onTimerEvent: function() { var value = this.getValue(); if (this.lastValue != value) { this.callback(this.element, value); this.lastValue = value; } } } Form.Element.Observer = Class.create(); Form.Element.Observer.prototype = Object.extend(new Abstract.TimedObserver(), { getValue: function() { return Form.Element.getValue(this.element); } }); Form.Observer = Class.create(); Form.Observer.prototype = Object.extend(new Abstract.TimedObserver(), { getValue: function() { return Form.serialize(this.element); } }); /*--------------------------------------------------------------------------*/ Abstract.EventObserver = function() {} Abstract.EventObserver.prototype = { initialize: function(element, callback) { this.element = $(element); this.callback = callback; this.lastValue = this.getValue(); if (this.element.tagName.toLowerCase() == 'form') this.registerFormCallbacks(); else this.registerCallback(this.element); }, onElementEvent: function() { var value = this.getValue(); if (this.lastValue != value) { this.callback(this.element, value); this.lastValue = value; } }, registerFormCallbacks: function() { var elements = Form.getElements(this.element); for (var i = 0; i < elements.length; i++) this.registerCallback(elements[i]); }, registerCallback: function(element) { if (element.type) { switch (element.type.toLowerCase()) { case 'checkbox': case 'radio': element.target = this; element.prev_onclick = element.onclick || Prototype.emptyFunction; element.onclick = function() { this.prev_onclick(); this.target.onElementEvent(); } break; case 'password': case 'text': case 'textarea': case 'select-one': case 'select-multiple': element.target = this; element.prev_onchange = element.onchange || Prototype.emptyFunction; element.onchange = function() { this.prev_onchange(); this.target.onElementEvent(); } break; } } } } Form.Element.EventObserver = Class.create(); Form.Element.EventObserver.prototype = Object.extend(new Abstract.EventObserver(), { getValue: function() { return Form.Element.getValue(this.element); } }); Form.EventObserver = Class.create(); Form.EventObserver.prototype = Object.extend(new Abstract.EventObserver(), { getValue: function() { return Form.serialize(this.element); } }); if (!window.Event) { var Event = new Object(); } Object.extend(Event, { KEY_BACKSPACE: 8, KEY_TAB: 9, KEY_RETURN: 13, KEY_ESC: 27, KEY_LEFT: 37, KEY_UP: 38, KEY_RIGHT: 39, KEY_DOWN: 40, KEY_DELETE: 46, element: function(event) { return event.target || event.srcElement; }, isLeftClick: function(event) { return (((event.which) && (event.which == 1)) || ((event.button) && (event.button == 1))); }, pointerX: function(event) { return event.pageX || (event.clientX + (document.documentElement.scrollLeft || document.body.scrollLeft)); }, pointerY: function(event) { return event.pageY || (event.clientY + (document.documentElement.scrollTop || document.body.scrollTop)); }, stop: function(event) { if (event.preventDefault) { event.preventDefault(); event.stopPropagation(); } else { event.returnValue = false; } }, // find the first node with the given tagName, starting from the // node the event was triggered on; traverses the DOM upwards findElement: function(event, tagName) { var element = Event.element(event); while (element.parentNode && (!element.tagName || (element.tagName.toUpperCase() != tagName.toUpperCase()))) element = element.parentNode; return element; }, observers: false, _observeAndCache: function(element, name, observer, useCapture) { if (!this.observers) this.observers = []; if (element.addEventListener) { this.observers.push([element, name, observer, useCapture]); element.addEventListener(name, observer, useCapture); } else if (element.attachEvent) { this.observers.push([element, name, observer, useCapture]); element.attachEvent('on' + name, observer); } }, unloadCache: function() { if (!Event.observers) return; for (var i = 0; i < Event.observers.length; i++) { Event.stopObserving.apply(this, Event.observers[i]); Event.observers[i][0] = null; } Event.observers = false; }, observe: function(element, name, observer, useCapture) { var element = $(element); useCapture = useCapture || false; if (name == 'keypress' && ((navigator.appVersion.indexOf('AppleWebKit') > 0) || element.attachEvent)) name = 'keydown'; this._observeAndCache(element, name, observer, useCapture); }, stopObserving: function(element, name, observer, useCapture) { var element = $(element); useCapture = useCapture || false; if (name == 'keypress' && ((navigator.appVersion.indexOf('AppleWebKit') > 0) || element.detachEvent)) name = 'keydown'; if (element.removeEventListener) { element.removeEventListener(name, observer, useCapture); } else if (element.detachEvent) { element.detachEvent('on' + name, observer); } } }); /* prevent memory leaks in IE */ Event.observe(window, 'unload', Event.unloadCache, false); var Position = { // set to true if needed, warning: firefox performance problems // NOT neeeded for page scrolling, only if draggable contained in // scrollable elements includeScrollOffsets: false, // must be called before calling withinIncludingScrolloffset, every time the // page is scrolled prepare: function() { this.deltaX = window.pageXOffset || document.documentElement.scrollLeft || document.body.scrollLeft || 0; this.deltaY = window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop || 0; }, realOffset: function(element) { var valueT = 0, valueL = 0; do { valueT += element.scrollTop || 0; valueL += element.scrollLeft || 0; element = element.parentNode; } while (element); return [valueL, valueT]; }, cumulativeOffset: function(element) { var valueT = 0, valueL = 0; do { valueT += element.offsetTop || 0; valueL += element.offsetLeft || 0; element = element.offsetParent; } while (element); return [valueL, valueT]; }, // caches x/y coordinate pair to use with overlap within: function(element, x, y) { if (this.includeScrollOffsets) return this.withinIncludingScrolloffsets(element, x, y); this.xcomp = x; this.ycomp = y; this.offset = this.cumulativeOffset(element); return (y >= this.offset[1] && y < this.offset[1] + element.offsetHeight && x >= this.offset[0] && x < this.offset[0] + element.offsetWidth); }, withinIncludingScrolloffsets: function(element, x, y) { var offsetcache = this.realOffset(element); this.xcomp = x + offsetcache[0] - this.deltaX; this.ycomp = y + offsetcache[1] - this.deltaY; this.offset = this.cumulativeOffset(element); return (this.ycomp >= this.offset[1] && this.ycomp < this.offset[1] + element.offsetHeight && this.xcomp >= this.offset[0] && this.xcomp < this.offset[0] + element.offsetWidth); }, // within must be called directly before overlap: function(mode, element) { if (!mode) return 0; if (mode == 'vertical') return ((this.offset[1] + element.offsetHeight) - this.ycomp) / element.offsetHeight; if (mode == 'horizontal') return ((this.offset[0] + element.offsetWidth) - this.xcomp) / element.offsetWidth; }, clone: function(source, target) { source = $(source); target = $(target); target.style.position = 'absolute'; var offsets = this.cumulativeOffset(source); target.style.top = offsets[1] + 'px'; target.style.left = offsets[0] + 'px'; target.style.width = source.offsetWidth + 'px'; target.style.height = source.offsetHeight + 'px'; } } function getAbsolutePosition(element) { var x = 0, y = 0; do { x += element.offsetLeft || 0; y += element.offsetTop || 0; element = element.offsetParent; } while (element); return [x, y]; } // This code was written by Tyler Akins and has been placed in the // public domain. It would be nice if you left this header intact. // Base64 code from Tyler Akins -- http://rumkin.com var keyStr = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="; function _encode64(input) { var output = ""; var chr1, chr2, chr3; var enc1, enc2, enc3, enc4; var i = 0; return input; do { chr1 = input.charCodeAt(i++); chr2 = input.charCodeAt(i++); chr3 = input.charCodeAt(i++); enc1 = chr1 >> 2; enc2 = ((chr1 & 3) << 4) | (chr2 >> 4); enc3 = ((chr2 & 15) << 2) | (chr3 >> 6); enc4 = chr3 & 63; if (isNaN(chr2)) { enc3 = enc4 = 64; } else if (isNaN(chr3)) { enc4 = 64; } output = output + keyStr.charAt(enc1) + keyStr.charAt(enc2) + keyStr.charAt(enc3) + keyStr.charAt(enc4); } while (i < input.length); return output; } function decode64(input) { var output = ""; var chr1, chr2, chr3; var enc1, enc2, enc3, enc4; var i = 0; // remove all characters that are not A-Z, a-z, 0-9, +, /, or = input = input.replace(/[^A-Za-z0-9\+\/\=]/g, ""); do { enc1 = keyStr.indexOf(input.charAt(i++)); enc2 = keyStr.indexOf(input.charAt(i++)); enc3 = keyStr.indexOf(input.charAt(i++)); enc4 = keyStr.indexOf(input.charAt(i++)); chr1 = (enc1 << 2) | (enc2 >> 4); chr2 = ((enc2 & 15) << 4) | (enc3 >> 2); chr3 = ((enc3 & 3) << 6) | enc4; output = output + String.fromCharCode(chr1); if (enc3 != 64) { output = output + String.fromCharCode(chr2); } if (enc4 != 64) { output = output + String.fromCharCode(chr3); } } while (i < input.length); return output; } /* Unobtrusive Flash Objects (UFO) v3.02 Copyright 2005, 2006 Bobby van der Sluis This software is licensed under the CC-GNU LGPL */ var UFO = { requiredAttrParams: ["movie", "width", "height", "majorversion", "build"], optionalAttrEmb: ["name", "swliveconnect", "align"], optionalAttrObj: ["id", "align"], optionalAttrParams: ["play", "loop", "menu", "quality", "scale", "salign", "wmode", "bgcolor", "base", "flashvars", "devicefont", "allowscriptaccess"], ximovie: "ufo.swf", xiwidth: "215", xiheight: "138", is_w3cdom: (typeof document.getElementById != "undefined" && typeof document.getElementsByTagName != "undefined" && (typeof document.createElement != "undefined" || typeof document.createElementNS != "undefined")), is_ie: (navigator.userAgent.toLowerCase().indexOf("msie") != -1 && navigator.userAgent.toLowerCase().indexOf("opera") == -1), is_safari: (navigator.userAgent.toLowerCase().indexOf("safari") != -1), is_win: (navigator.userAgent.toLowerCase().indexOf("win") != -1), is_mac: (navigator.userAgent.toLowerCase().indexOf("mac") != -1), is_XML: (typeof document.contentType != "undefined" && document.contentType.indexOf("xml") > -1), foList: [], create: function(FO, id) { if (!UFO.is_w3cdom) return; UFO.foList[id] = UFO.updateFO(FO); UFO.createStyleRule("#" + id, "visibility:hidden;"); UFO.domLoad(id); }, updateFO: function(FO) { if (typeof FO.xi != "undefined" && FO.xi == "true") { if (typeof FO.ximovie == "undefined") FO.ximovie = UFO.ximovie; if (typeof FO.xiwidth == "undefined") FO.xiwidth = UFO.xiwidth; if (typeof FO.xiheight == "undefined") FO.xiheight = UFO.xiheight; } else { FO.xi = false; } FO.domLoaded = false; return FO; }, domLoad: function(id) { var timer = setInterval(function() { // doesn't work in IE/Mac if((document.getElementsByTagName("body")[0] != null || document.body != null) && document.getElementById(id) != null) { UFO.main(id); clearInterval(timer); } }, 250); if (typeof document.addEventListener != "undefined") { document.addEventListener("DOMContentLoaded", function() { UFO.main(id); clearInterval(timer); } , null); // Mozilla only } }, main: function(id) { var FO = UFO.foList[id]; if (FO.domLoaded) return; // for Mozilla, only execute once UFO.foList[id].domLoaded = true; document.getElementById(id).style.visibility = "hidden"; if (UFO.hasRequiredAttrParams(id)) { if (UFO.hasFlashVersion(FO.majorversion, FO.build)) { UFO.writeFlashObject(id); } else if (FO.xi && UFO.hasFlashVersion("6", "65")) { UFO.createModalDialog(id); } } document.getElementById(id).style.visibility = "visible"; }, createStyleRule: function(selector, declaration) { if (UFO.is_ie && UFO.is_mac) return; // bugs in IE/Mac var head = document.getElementsByTagName("head")[0]; var style = UFO.createElement("style"); if (!(UFO.is_ie && UFO.is_win)) { var styleRule = document.createTextNode(selector + " {" + declaration + "}"); style.appendChild(styleRule); // bugs in IE/Win } style.setAttribute("type", "text/css"); style.setAttribute("media", "screen"); head.appendChild(style); if (UFO.is_safari && UFO.is_XML) { head.innerHTML += ""; } // force Safari repaint for MIME type application/xhtml+xml if (UFO.is_ie && UFO.is_win && document.styleSheets && document.styleSheets.length > 0) { var lastStyle = document.styleSheets[document.styleSheets.length - 1]; if (typeof lastStyle.addRule == "object") { lastStyle.addRule(selector, declaration); } } }, createElement: function(el) { return (typeof document.createElementNS != "undefined") ? document.createElementNS("http://www.w3.org/1999/xhtml", el) : document.createElement(el); }, hasRequiredAttrParams: function(id) { var FO = UFO.foList[id]; for (var i = 0; i < UFO.requiredAttrParams.length; i++) { if (typeof FO[UFO.requiredAttrParams[i]] == "undefined") return false; } return true; }, hasFlashVersion: function(majorVersion, buildVersion) { var reqVersion = parseFloat(majorVersion + "." + buildVersion); if (navigator.plugins && typeof navigator.plugins["Shockwave Flash"] == "object") { var desc = navigator.plugins["Shockwave Flash"].description; if (desc) { var versionStr = desc.replace(/^.*\s+(\S+\s+\S+$)/, "$1"); var major = parseInt(versionStr.replace(/^(.*)\..*$/, "$1")); var build = parseInt(versionStr.replace(/^.*r(.*)$/, "$1")); var flashVersion = parseFloat(major + "." + build); } } else if (window.ActiveXObject) { try { var flashObj = new ActiveXObject("ShockwaveFlash.ShockwaveFlash"); var desc = flashObj.GetVariable("$version"); if (desc) { var versionArr = desc.replace(/^\S+\s+(.*)$/, "$1").split(","); var major = parseInt(versionArr[0]); var build = parseInt(versionArr[2]); var flashVersion = parseFloat(major + "." + build); } } catch(e) {} } if (typeof flashVersion != "undefined"){ return (flashVersion >= reqVersion ? true : false); } return false; }, writeFlashObject: function(id) { var el = document.getElementById(id); if (typeof el.innerHTML == "undefined") return; var FO = UFO.foList[id]; if (navigator.plugins && typeof navigator.plugins["Shockwave Flash"] == "object") { try { // older versions of Gecko only support innerHTML get and not set el.innerHTML = "ufo-test"; } catch (e) {} if (el.innerHTML != "ufo-test") { while(el.hasChildNodes()) { el.removeChild(el.firstChild); } var embed = UFO.createElement("embed"); embed.setAttribute("type", "application/x-shockwave-flash"); embed.setAttribute("pluginspage", "http://www.macromedia.com/go/getflashplayer"); embed.setAttribute("src", FO.movie); embed.setAttribute("width", FO.width); embed.setAttribute("height", FO.height); for (var i = 0; i < UFO.optionalAttrEmb.length; i++) { if (typeof FO[UFO.optionalAttrEmb[i]] != "undefined") { embed.setAttribute(UFO.optionalAttrEmb[i], FO[UFO.optionalAttrEmb[i]]); } } for (var i = 0; i < UFO.optionalAttrParams.length; i++) { if (typeof FO[UFO.optionalAttrParams[i]] != "undefined") { embed.setAttribute(UFO.optionalAttrParams[i], FO[UFO.optionalAttrParams[i]]); } } el.appendChild(embed); } else { var embHTML = ""; for (var i = 0; i < UFO.optionalAttrEmb.length; i++) { if (typeof FO[UFO.optionalAttrEmb[i]] != "undefined") { embHTML += ' ' + UFO.optionalAttrEmb[i] + '="' + FO[UFO.optionalAttrEmb[i]] + '"'; } } for (var i = 0; i < UFO.optionalAttrParams.length; i++) { if (typeof FO[UFO.optionalAttrParams[i]] != "undefined") { embHTML += ' ' + UFO.optionalAttrParams[i] + '="' + FO[UFO.optionalAttrParams[i]] + '"'; } } el.innerHTML = ''; } } else { var objAttrHTML = ""; for (var i = 0; i < UFO.optionalAttrObj.length; i++) { if (typeof FO[UFO.optionalAttrObj[i]] != "undefined") { objAttrHTML += ' ' + UFO.optionalAttrObj[i] + '="' + FO[UFO.optionalAttrObj[i]] + '"'; } } var objParamHTML = ""; for (var i = 0; i < UFO.optionalAttrParams.length; i++) { if (typeof FO[UFO.optionalAttrParams[i]] != "undefined") { objParamHTML += ''; } } var protocol = (window.location.protocol == "https:" ? "https:" : "http:"); el.innerHTML = '' + objParamHTML + ''; } }, createModalDialog: function(id) { var FO = UFO.foList[id]; UFO.createStyleRule("html", "height:100%; overflow:hidden;"); UFO.createStyleRule("body", "height:100%; overflow:hidden;"); UFO.createStyleRule("#xi-con", "position:absolute; left:0; top:0; z-index:1000; width:100%; height:100%; background-color:#333; filter:alpha(opacity:50); -khtml-opacity:0.5; -moz-opacity:0.5; opacity:0.5;"); UFO.createStyleRule("#xi-mod", "position:absolute; left:50%; top:50%; margin-left: -" + (parseInt(FO.xiwidth)/2) + "px; margin-top: -" + (parseInt(FO.xiheight)/2) + "px; width:" + FO.xiwidth + "px; height:" + FO.xiheight + "px;"); var body = document.getElementsByTagName("body")[0]; var container = UFO.createElement("div"); container.setAttribute("id", "xi-con"); var dialog = UFO.createElement("div"); dialog.setAttribute("id", "xi-mod"); container.appendChild(dialog); body.appendChild(container); var MMredirectURL = window.location; // MM code document.title = document.title.slice(0, 47) + " - Flash Player Installation"; // MM code var MMdoctitle = document.title; // MM code if (UFO.is_ie && UFO.is_win) { var xiFO = { movie:FO.ximovie, width:FO.xiwidth, height:FO.xiheight, majorversion:"6", build:"65", flashvars:"MMredirectURL=" + MMredirectURL + "&MMplayerType=ActiveX&MMdoctitle=" + MMdoctitle }; } else { var xiFO = { movie:FO.ximovie, width:FO.xiwidth, height:FO.xiheight, majorversion:"6", build:"65", flashvars:"MMredirectURL=" + MMredirectURL + "&MMplayerType=PlugIn&MMdoctitle=" + MMdoctitle }; } UFO.foList["xi-mod"] = xiFO; UFO.writeFlashObject("xi-mod"); }, expressInstallCallback: function() { var body = document.getElementsByTagName("body")[0]; var dialog = document.getElementById("xi-con"); body.removeChild(dialog); UFO.createStyleRule("body", "height:auto; overflow:auto;"); UFO.createStyleRule("html", "height:auto; overflow:auto;"); } }; /// /// // This file implements base64 encoding and decoding. // Encoding is done by the function base64Encode(), decoding // by base64Decode(). The naming mimics closely the corresponding // library functions found in PHP. However, this implementation allows // for a more flexible use. // // This implementation follows RFC 3548 (http://www.faqs.org/rfcs/rfc3548.html), // so the copyright formulated therein applies. // // Dr.Heller Information Management, 2005 (http://www.hellerim.de). // /// // original base64 encoding encString = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'; // URL and file name safe encoding encStringS = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_'; /// BEGIN_DOC(base64).METHOD(encode) /// // method String base64.encode(INPUTTYPE inp [, bool uc [, bool safe]]) // // Encode input data into a base64 character string. // // Function arguments: // INPUTTYPE inp: data to be encoded. INPUTTYPE may be String or Array. // Any other INPUTTYPE results in an output value of null. // If INPUTTYPE is String each character is converted into // two bytes each of which is encoded separately. // bool uc Optional. If this parameter has a value of 'true' which is // the default, code of each character is treated as a 16-bit // entity (UniCode), i.e. as two bytes. Otherwise, the codes // are truncated to one byte (8-bit character set) which // may result in information loss. If INPUTTYPE is Array, // the value of this parameter has no effect. // bool safe: Optioanal. If this parameter is set to true, the standard base64 // character set is replaced with a modified version where // the characters '+' and '/' are replace with '-' and '_', // repectively, in order to avoid problems with file system // namings which otherwise could occur on some systems. // By default, the value of this argument is assumed to be // false. // Return value: The function returns a character string consisting of // the base64 representaion of the input. Its length is a // multiple of 4. If the encoding yields less than this // the string is stuffed with the '=' character. In each case, // the string maybe empty but not null if no error occurred. // Errors: Whenever an error occurs, null is returned. Parameter values // not defined above are considered errors. // Remarks: If the input array contains something different from // a byte at some position the first 8 bits only of this entity are // processed silently without returning an error, which probably // results in garbage converted to base64. // /// END_DOC function encode64(inp, uc, safe) { // do some argument checking if (arguments.length < 1) return null; var readBuf = new Array(); // read buffer if (arguments.length >= 3 && safe != true && safe != false) return null; var enc = (arguments.length >= 3 && safe) ? encStringS : encString; // character set used var b = (typeof inp == "string"); // how input is to be processed if (!b && (typeof inp != "object") && !(inp instanceof Array)) return null; // bad input if (arguments.length < 2) { uc = true; // set default } // otherwise its value is passed from the caller if (uc != true && uc != false) return null; var n = (!b || !uc) ? 1 : 2; // length of read buffer var out = ''; // output string var c = 0; // holds character code (maybe 16 bit or 8 bit) var j = 1; // sextett counter var l = 0; // work buffer var s = 0; // holds sextett // convert for (var i = 0; i < inp.length; i++) { // read input c = (b) ? inp.charCodeAt(i) : inp[i]; // fill read buffer for (var k = n - 1; k >= 0; k--) { readBuf[k] = c & 0xff; c >>= 8; } for (var m = 0; m < n; m++) { // run through read buffer // process bytes from read buffer l = ((l<<8)&0xff00) | readBuf[m]; // shift remaining bits one byte to the left and append next byte s = (0x3f<<(2*j)) & l; // extract sextett from buffer l -=s; // remove those bits from buffer; out += enc.charAt(s>>(2*j)); // convert leftmost sextett and append it to output j++; if (j==4) { // another sextett is complete out += enc.charAt(l&0x3f); // convert and append it j = 1; } } } switch (j) { // handle left-over sextetts case 2: s = 0x3f & (16 * l); // extract sextett from buffer out += enc.charAt(s); // convert leftmost sextett and append it to output out += '=='; // stuff break; case 3: s = 0x3f & (4 * l); // extract sextett from buffer out += enc.charAt(s); // convert leftmost sextett and append it to output out += '='; // stuff break; default: break; } return out; }