]> arthur.barton.de Git - ngircd-web.git/commitdiff
ngIRCd Release 13, new website.
authorAlexander Barton <alex@barton.de>
Tue, 6 Jan 2009 19:10:16 +0000 (20:10 +0100)
committerAlexander Barton <alex@barton.de>
Tue, 6 Jan 2009 19:10:16 +0000 (20:10 +0100)
38 files changed:
bugtracker.php.de [new file with mode: 0644]
bugtracker.php.en [new file with mode: 0644]
common/bevel.gif [new file with mode: 0644]
common/distributions.inc [new file with mode: 0644]
common/download.inc [new file with mode: 0644]
common/mirrors.inc [new file with mode: 0644]
common/mootools.js [new file with mode: 0644]
common/platforms.inc [new file with mode: 0644]
common/slide.js [new file with mode: 0644]
common/styles.css [new file with mode: 0644]
common/valid-html401.gif [new file with mode: 0644]
doc/ChangeLog
doc/FAQ.txt
doc/NEWS
doc/Platforms.txt
doc/README-AUX.txt
doc/README-BeOS.txt
doc/RFC.txt
doc/SSL.txt
doc/Services.txt [new file with mode: 0644]
doc/Zeroconf.txt
doc/sample-ngircd.conf
documentation.php.de [new file with mode: 0644]
documentation.php.en [new file with mode: 0644]
download.php.de [new file with mode: 0644]
download.php.en [new file with mode: 0644]
includes/common.php [new file with mode: 0644]
index.html.de [deleted file]
index.html.en [deleted file]
index.php.de [new file with mode: 0644]
index.php.en [new file with mode: 0644]
news.php.de [new file with mode: 0644]
news.php.en [new file with mode: 0644]
platforms.html
style.css
support.php.de [new file with mode: 0644]
support.php.en [new file with mode: 0644]
valid-html401.gif [deleted file]

diff --git a/bugtracker.php.de b/bugtracker.php.de
new file mode 100644 (file)
index 0000000..9bd924b
--- /dev/null
@@ -0,0 +1,27 @@
+<?php
+       include('includes/common.php');
+       begin_page('de', 'Bugtracker');
+?>
+<h2>
+       Bug-Tracker
+</h2>
+<p>
+       Damit wir den Überlick über im ngIRCd vorhandene Bugs und
+       Feature-Wünsche nicht verliere, ist ein Bug-Tracking-System
+       installiert:
+       <a href="http://ngircd.barton.de/bugzilla/index.cgi">Bugzilla</a>
+</p>
+<p>
+       Solltest du Fehler finden, so lege dort bitte einen
+       <a href="http://ngircd.barton.de/bugzilla/enter_bug.cgi">Bug-Report</a>
+       an! Vielen Dank!
+</p>
+<p>
+       Zudem kannst du dich dort auch über bekannte und vielleicht bereits
+       behobene Fehler
+       <a href="http://ngircd.barton.de/bugzilla/query.cgi">informieren</a>.
+</p>
+<?php
+       end_page();
+?>
+
diff --git a/bugtracker.php.en b/bugtracker.php.en
new file mode 100644 (file)
index 0000000..7856bf0
--- /dev/null
@@ -0,0 +1,26 @@
+<?php
+       include('includes/common.php');
+       begin_page('en', 'Bugtracker');
+?>
+<h2>
+       Bug-Tracker
+</h2>
+<p>
+       We have installed a bug tracking system to avoid losing sight of
+       existing bugs and suggestions for features in ngIRCd:
+       <a href="http://ngircd.barton.de/bugzilla/index.cgi">Bugzilla</a>
+</p>
+<p>
+       If you find any mistakes, please create a
+       <a href="http://ngircd.barton.de/bugzilla/enter_bug.cgi">bug report</a>
+       here! Thank you!
+</p>
+<p>
+       Additionally, you can get
+       <a href="http://ngircd.barton.de/bugzilla/query.cgi">information</a>
+       on known and maybe already corrected bugs.
+</p>
+<?php
+       end_page();
+?>
+
diff --git a/common/bevel.gif b/common/bevel.gif
new file mode 100644 (file)
index 0000000..77b6477
Binary files /dev/null and b/common/bevel.gif differ
diff --git a/common/distributions.inc b/common/distributions.inc
new file mode 100644 (file)
index 0000000..230bbe6
--- /dev/null
@@ -0,0 +1,38 @@
+<ul>
+       <li>
+               <a href="http://amiga.sourceforge.net/">Amiga.sf</a>:
+               <a href="http://amiga.sourceforge.net/index.php?showpackage=ngIRCd">Port</a>
+       </li>
+       <li>
+               <a href="http://www.debian.org/">Debian Linux</a>:
+               <a href="http://packages.debian.org/ngircd">deb</a>
+       </li>
+       <li>
+               <a href="http://fedoraproject.org/">Fedora Linux</a>:
+               <a href="https://admin.fedoraproject.org/pkgdb/packages/name/ngircd/">rpm</a>
+       </li>
+       <li>
+               <a href="http://www.finkproject.org/">Fink Project</a>:
+               <a href="http://pdb.finkproject.org/pdb/package.php/ngircd">Port</a>
+       </li>
+       <li>
+               <a href="http://www.freebsd.org/">FreeBSD</a>:
+               <a href="http://www.freebsd.org/cgi/ports.cgi?query=ngircd&amp;stype=all">Port</a>
+       </li>
+       <li>
+               <a href="http://www.gentoo.org/">Gentoo Linux</a>:
+               <a href="http://packages.gentoo.org/package/net-irc/ngircd">ebuild</a>
+       </li>
+       <li>
+               <a href="http://www.macports.org/">Mac Ports</a>:
+               <a href="http://trac.macports.org/browser/trunk/dports/irc/ngircd/Portfile">Port</a>
+       <li>
+               <a href="http://www.opensuse.org/">OpenSUSE</a>:
+               <a href="http://software.opensuse.org/download/server:/irc/">rpm</a>
+       </li>
+       <li>
+               <a href="http://www.ubuntu.com/">Ubuntu Linux</a>:
+               <a href="http://packages.ubuntu.com/ngircd">deb</a>
+       </li>
+</ul>
+
diff --git a/common/download.inc b/common/download.inc
new file mode 100644 (file)
index 0000000..2a100c3
--- /dev/null
@@ -0,0 +1,14 @@
+<dl>
+       <dt>
+               <strong>ngIRCd Release 13</strong> (2008-12-25):
+       </dt>
+       <dd>
+               <p>Server: <em>ftp.berlios.de</em>
+               (<a href="ftp://ftp.berlios.de/pub/ngircd/">ftp</a>):
+               <a href="ftp://ftp.berlios.de/pub/ngircd/ngircd-13.tar.gz">ngircd-13.tar.gz</a>
+               <br>Server: <em>ngircd.barton.de</em>
+               (<a href="ftp://ngircd.barton.de/pub/ngircd/">ftp</a>):
+               <a href="ftp://ngircd.barton.de/pub/ngircd/ngircd-13.tar.gz">ngircd-13.tar.gz</a>
+               </ul>
+       </dd>
+</dl>
diff --git a/common/mirrors.inc b/common/mirrors.inc
new file mode 100644 (file)
index 0000000..eef87e6
--- /dev/null
@@ -0,0 +1,8 @@
+<p>
+       Mirrors:
+</p>
+<ul>
+       <li><a href="http://ngircd.berlios.de/">ngircd.berlios.de</a>
+       <li><a href="http://ngircd.barton.de/">ngircd.barton.de</a>
+</ul>
+
diff --git a/common/mootools.js b/common/mootools.js
new file mode 100644 (file)
index 0000000..55abf46
--- /dev/null
@@ -0,0 +1,496 @@
+//MooTools, <http://mootools.net>, My Object Oriented (JavaScript) Tools. Copyright (c) 2006-2008 Valerio Proietti, <http://mad4milk.net>, MIT Style License.
+
+var MooTools={version:"1.2.0",build:""};var Native=function(J){J=J||{};var F=J.afterImplement||function(){};var G=J.generics;G=(G!==false);var H=J.legacy;
+var E=J.initialize;var B=J.protect;var A=J.name;var C=E||H;C.constructor=Native;C.$family={name:"native"};if(H&&E){C.prototype=H.prototype;}C.prototype.constructor=C;
+if(A){var D=A.toLowerCase();C.prototype.$family={name:D};Native.typize(C,D);}var I=function(M,K,N,L){if(!B||L||!M.prototype[K]){M.prototype[K]=N;}if(G){Native.genericize(M,K,B);
+}F.call(M,K,N);return M;};C.implement=function(L,K,N){if(typeof L=="string"){return I(this,L,K,N);}for(var M in L){I(this,M,L[M],K);}return this;};C.alias=function(M,K,N){if(typeof M=="string"){M=this.prototype[M];
+if(M){I(this,K,M,N);}}else{for(var L in M){this.alias(L,M[L],K);}}return this;};return C;};Native.implement=function(D,C){for(var B=0,A=D.length;B<A;B++){D[B].implement(C);
+}};Native.genericize=function(B,C,A){if((!A||!B[C])&&typeof B.prototype[C]=="function"){B[C]=function(){var D=Array.prototype.slice.call(arguments);return B.prototype[C].apply(D.shift(),D);
+};}};Native.typize=function(A,B){if(!A.type){A.type=function(C){return($type(C)===B);};}};Native.alias=function(E,B,A,F){for(var D=0,C=E.length;D<C;D++){E[D].alias(B,A,F);
+}};(function(B){for(var A in B){Native.typize(B[A],A);}})({"boolean":Boolean,"native":Native,object:Object});(function(B){for(var A in B){new Native({name:A,initialize:B[A],protect:true});
+}})({String:String,Function:Function,Number:Number,Array:Array,RegExp:RegExp,Date:Date});(function(B,A){for(var C=A.length;C--;C){Native.genericize(B,A[C],true);
+}return arguments.callee;})(Array,["pop","push","reverse","shift","sort","splice","unshift","concat","join","slice","toString","valueOf","indexOf","lastIndexOf"])(String,["charAt","charCodeAt","concat","indexOf","lastIndexOf","match","replace","search","slice","split","substr","substring","toLowerCase","toUpperCase","valueOf"]);
+function $chk(A){return !!(A||A===0);}function $clear(A){clearTimeout(A);clearInterval(A);return null;}function $defined(A){return(A!=undefined);}function $empty(){}function $arguments(A){return function(){return arguments[A];
+};}function $lambda(A){return(typeof A=="function")?A:function(){return A;};}function $extend(C,A){for(var B in (A||{})){C[B]=A[B];}return C;}function $unlink(C){var B;
+switch($type(C)){case"object":B={};for(var E in C){B[E]=$unlink(C[E]);}break;case"hash":B=$unlink(C.getClean());break;case"array":B=[];for(var D=0,A=C.length;
+D<A;D++){B[D]=$unlink(C[D]);}break;default:return C;}return B;}function $merge(){var E={};for(var D=0,A=arguments.length;D<A;D++){var B=arguments[D];if($type(B)!="object"){continue;
+}for(var C in B){var G=B[C],F=E[C];E[C]=(F&&$type(G)=="object"&&$type(F)=="object")?$merge(F,G):$unlink(G);}}return E;}function $pick(){for(var B=0,A=arguments.length;
+B<A;B++){if(arguments[B]!=undefined){return arguments[B];}}return null;}function $random(B,A){return Math.floor(Math.random()*(A-B+1)+B);}function $splat(B){var A=$type(B);
+return(A)?((A!="array"&&A!="arguments")?[B]:B):[];}var $time=Date.now||function(){return new Date().getTime();};function $try(){for(var B=0,A=arguments.length;
+B<A;B++){try{return arguments[B]();}catch(C){}}return null;}function $type(A){if(A==undefined){return false;}if(A.$family){return(A.$family.name=="number"&&!isFinite(A))?false:A.$family.name;
+}if(A.nodeName){switch(A.nodeType){case 1:return"element";case 3:return(/\S/).test(A.nodeValue)?"textnode":"whitespace";}}else{if(typeof A.length=="number"){if(A.callee){return"arguments";
+}else{if(A.item){return"collection";}}}}return typeof A;}var Hash=new Native({name:"Hash",initialize:function(A){if($type(A)=="hash"){A=$unlink(A.getClean());
+}for(var B in A){this[B]=A[B];}return this;}});Hash.implement({getLength:function(){var B=0;for(var A in this){if(this.hasOwnProperty(A)){B++;}}return B;
+},forEach:function(B,C){for(var A in this){if(this.hasOwnProperty(A)){B.call(C,this[A],A,this);}}},getClean:function(){var B={};for(var A in this){if(this.hasOwnProperty(A)){B[A]=this[A];
+}}return B;}});Hash.alias("forEach","each");function $H(A){return new Hash(A);}Array.implement({forEach:function(C,D){for(var B=0,A=this.length;B<A;B++){C.call(D,this[B],B,this);
+}}});Array.alias("forEach","each");function $A(C){if(C.item){var D=[];for(var B=0,A=C.length;B<A;B++){D[B]=C[B];}return D;}return Array.prototype.slice.call(C);
+}function $each(C,B,D){var A=$type(C);((A=="arguments"||A=="collection"||A=="array")?Array:Hash).each(C,B,D);}var Browser=new Hash({Engine:{name:"unknown",version:""},Platform:{name:(navigator.platform.match(/mac|win|linux/i)||["other"])[0].toLowerCase()},Features:{xpath:!!(document.evaluate),air:!!(window.runtime)},Plugins:{}});
+if(window.opera){Browser.Engine={name:"presto",version:(document.getElementsByClassName)?950:925};}else{if(window.ActiveXObject){Browser.Engine={name:"trident",version:(window.XMLHttpRequest)?5:4};
+}else{if(!navigator.taintEnabled){Browser.Engine={name:"webkit",version:(Browser.Features.xpath)?420:419};}else{if(document.getBoxObjectFor!=null){Browser.Engine={name:"gecko",version:(document.getElementsByClassName)?19:18};
+}}}}Browser.Engine[Browser.Engine.name]=Browser.Engine[Browser.Engine.name+Browser.Engine.version]=true;if(window.orientation!=undefined){Browser.Platform.name="ipod";
+}Browser.Platform[Browser.Platform.name]=true;Browser.Request=function(){return $try(function(){return new XMLHttpRequest();},function(){return new ActiveXObject("MSXML2.XMLHTTP");
+});};Browser.Features.xhr=!!(Browser.Request());Browser.Plugins.Flash=(function(){var A=($try(function(){return navigator.plugins["Shockwave Flash"].description;
+},function(){return new ActiveXObject("ShockwaveFlash.ShockwaveFlash").GetVariable("$version");})||"0 r0").match(/\d+/g);return{version:parseInt(A[0]||0+"."+A[1]||0),build:parseInt(A[2]||0)};
+})();function $exec(B){if(!B){return B;}if(window.execScript){window.execScript(B);}else{var A=document.createElement("script");A.setAttribute("type","text/javascript");
+A.text=B;document.head.appendChild(A);document.head.removeChild(A);}return B;}Native.UID=1;var $uid=(Browser.Engine.trident)?function(A){return(A.uid||(A.uid=[Native.UID++]))[0];
+}:function(A){return A.uid||(A.uid=Native.UID++);};var Window=new Native({name:"Window",legacy:(Browser.Engine.trident)?null:window.Window,initialize:function(A){$uid(A);
+if(!A.Element){A.Element=$empty;if(Browser.Engine.webkit){A.document.createElement("iframe");}A.Element.prototype=(Browser.Engine.webkit)?window["[[DOMElement.prototype]]"]:{};
+}return $extend(A,Window.Prototype);},afterImplement:function(B,A){window[B]=Window.Prototype[B]=A;}});Window.Prototype={$family:{name:"window"}};new Window(window);
+var Document=new Native({name:"Document",legacy:(Browser.Engine.trident)?null:window.Document,initialize:function(A){$uid(A);A.head=A.getElementsByTagName("head")[0];
+A.html=A.getElementsByTagName("html")[0];A.window=A.defaultView||A.parentWindow;if(Browser.Engine.trident4){$try(function(){A.execCommand("BackgroundImageCache",false,true);
+});}return $extend(A,Document.Prototype);},afterImplement:function(B,A){document[B]=Document.Prototype[B]=A;}});Document.Prototype={$family:{name:"document"}};
+new Document(document);Array.implement({every:function(C,D){for(var B=0,A=this.length;B<A;B++){if(!C.call(D,this[B],B,this)){return false;}}return true;
+},filter:function(D,E){var C=[];for(var B=0,A=this.length;B<A;B++){if(D.call(E,this[B],B,this)){C.push(this[B]);}}return C;},clean:function(){return this.filter($defined);
+},indexOf:function(C,D){var A=this.length;for(var B=(D<0)?Math.max(0,A+D):D||0;B<A;B++){if(this[B]===C){return B;}}return -1;},map:function(D,E){var C=[];
+for(var B=0,A=this.length;B<A;B++){C[B]=D.call(E,this[B],B,this);}return C;},some:function(C,D){for(var B=0,A=this.length;B<A;B++){if(C.call(D,this[B],B,this)){return true;
+}}return false;},associate:function(C){var D={},B=Math.min(this.length,C.length);for(var A=0;A<B;A++){D[C[A]]=this[A];}return D;},link:function(C){var A={};
+for(var E=0,B=this.length;E<B;E++){for(var D in C){if(C[D](this[E])){A[D]=this[E];delete C[D];break;}}}return A;},contains:function(A,B){return this.indexOf(A,B)!=-1;
+},extend:function(C){for(var B=0,A=C.length;B<A;B++){this.push(C[B]);}return this;},getLast:function(){return(this.length)?this[this.length-1]:null;},getRandom:function(){return(this.length)?this[$random(0,this.length-1)]:null;
+},include:function(A){if(!this.contains(A)){this.push(A);}return this;},combine:function(C){for(var B=0,A=C.length;B<A;B++){this.include(C[B]);}return this;
+},erase:function(B){for(var A=this.length;A--;A){if(this[A]===B){this.splice(A,1);}}return this;},empty:function(){this.length=0;return this;},flatten:function(){var D=[];
+for(var B=0,A=this.length;B<A;B++){var C=$type(this[B]);if(!C){continue;}D=D.concat((C=="array"||C=="collection"||C=="arguments")?Array.flatten(this[B]):this[B]);
+}return D;},hexToRgb:function(B){if(this.length!=3){return null;}var A=this.map(function(C){if(C.length==1){C+=C;}return C.toInt(16);});return(B)?A:"rgb("+A+")";
+},rgbToHex:function(D){if(this.length<3){return null;}if(this.length==4&&this[3]==0&&!D){return"transparent";}var B=[];for(var A=0;A<3;A++){var C=(this[A]-0).toString(16);
+B.push((C.length==1)?"0"+C:C);}return(D)?B:"#"+B.join("");}});Function.implement({extend:function(A){for(var B in A){this[B]=A[B];}return this;},create:function(B){var A=this;
+B=B||{};return function(D){var C=B.arguments;C=(C!=undefined)?$splat(C):Array.slice(arguments,(B.event)?1:0);if(B.event){C=[D||window.event].extend(C);
+}var E=function(){return A.apply(B.bind||null,C);};if(B.delay){return setTimeout(E,B.delay);}if(B.periodical){return setInterval(E,B.periodical);}if(B.attempt){return $try(E);
+}return E();};},pass:function(A,B){return this.create({arguments:A,bind:B});},attempt:function(A,B){return this.create({arguments:A,bind:B,attempt:true})();
+},bind:function(B,A){return this.create({bind:B,arguments:A});},bindWithEvent:function(B,A){return this.create({bind:B,event:true,arguments:A});},delay:function(B,C,A){return this.create({delay:B,bind:C,arguments:A})();
+},periodical:function(A,C,B){return this.create({periodical:A,bind:C,arguments:B})();},run:function(A,B){return this.apply(B,$splat(A));}});Number.implement({limit:function(B,A){return Math.min(A,Math.max(B,this));
+},round:function(A){A=Math.pow(10,A||0);return Math.round(this*A)/A;},times:function(B,C){for(var A=0;A<this;A++){B.call(C,A,this);}},toFloat:function(){return parseFloat(this);
+},toInt:function(A){return parseInt(this,A||10);}});Number.alias("times","each");(function(B){var A={};B.each(function(C){if(!Number[C]){A[C]=function(){return Math[C].apply(null,[this].concat($A(arguments)));
+};}});Number.implement(A);})(["abs","acos","asin","atan","atan2","ceil","cos","exp","floor","log","max","min","pow","sin","sqrt","tan"]);String.implement({test:function(A,B){return((typeof A=="string")?new RegExp(A,B):A).test(this);
+},contains:function(A,B){return(B)?(B+this+B).indexOf(B+A+B)>-1:this.indexOf(A)>-1;},trim:function(){return this.replace(/^\s+|\s+$/g,"");},clean:function(){return this.replace(/\s+/g," ").trim();
+},camelCase:function(){return this.replace(/-\D/g,function(A){return A.charAt(1).toUpperCase();});},hyphenate:function(){return this.replace(/[A-Z]/g,function(A){return("-"+A.charAt(0).toLowerCase());
+});},capitalize:function(){return this.replace(/\b[a-z]/g,function(A){return A.toUpperCase();});},escapeRegExp:function(){return this.replace(/([-.*+?^${}()|[\]\/\\])/g,"\\$1");
+},toInt:function(A){return parseInt(this,A||10);},toFloat:function(){return parseFloat(this);},hexToRgb:function(B){var A=this.match(/^#?(\w{1,2})(\w{1,2})(\w{1,2})$/);
+return(A)?A.slice(1).hexToRgb(B):null;},rgbToHex:function(B){var A=this.match(/\d{1,3}/g);return(A)?A.rgbToHex(B):null;},stripScripts:function(B){var A="";
+var C=this.replace(/<script[^>]*>([\s\S]*?)<\/script>/gi,function(){A+=arguments[1]+"\n";return"";});if(B===true){$exec(A);}else{if($type(B)=="function"){B(A,C);
+}}return C;},substitute:function(A,B){return this.replace(B||(/\\?\{([^}]+)\}/g),function(D,C){if(D.charAt(0)=="\\"){return D.slice(1);}return(A[C]!=undefined)?A[C]:"";
+});}});Hash.implement({has:Object.prototype.hasOwnProperty,keyOf:function(B){for(var A in this){if(this.hasOwnProperty(A)&&this[A]===B){return A;}}return null;
+},hasValue:function(A){return(Hash.keyOf(this,A)!==null);},extend:function(A){Hash.each(A,function(C,B){Hash.set(this,B,C);},this);return this;},combine:function(A){Hash.each(A,function(C,B){Hash.include(this,B,C);
+},this);return this;},erase:function(A){if(this.hasOwnProperty(A)){delete this[A];}return this;},get:function(A){return(this.hasOwnProperty(A))?this[A]:null;
+},set:function(A,B){if(!this[A]||this.hasOwnProperty(A)){this[A]=B;}return this;},empty:function(){Hash.each(this,function(B,A){delete this[A];},this);
+return this;},include:function(B,C){var A=this[B];if(A==undefined){this[B]=C;}return this;},map:function(B,C){var A=new Hash;Hash.each(this,function(E,D){A.set(D,B.call(C,E,D,this));
+},this);return A;},filter:function(B,C){var A=new Hash;Hash.each(this,function(E,D){if(B.call(C,E,D,this)){A.set(D,E);}},this);return A;},every:function(B,C){for(var A in this){if(this.hasOwnProperty(A)&&!B.call(C,this[A],A)){return false;
+}}return true;},some:function(B,C){for(var A in this){if(this.hasOwnProperty(A)&&B.call(C,this[A],A)){return true;}}return false;},getKeys:function(){var A=[];
+Hash.each(this,function(C,B){A.push(B);});return A;},getValues:function(){var A=[];Hash.each(this,function(B){A.push(B);});return A;},toQueryString:function(A){var B=[];
+Hash.each(this,function(F,E){if(A){E=A+"["+E+"]";}var D;switch($type(F)){case"object":D=Hash.toQueryString(F,E);break;case"array":var C={};F.each(function(H,G){C[G]=H;
+});D=Hash.toQueryString(C,E);break;default:D=E+"="+encodeURIComponent(F);}if(F!=undefined){B.push(D);}});return B.join("&");}});Hash.alias({keyOf:"indexOf",hasValue:"contains"});
+var Event=new Native({name:"Event",initialize:function(A,F){F=F||window;var K=F.document;A=A||F.event;if(A.$extended){return A;}this.$extended=true;var J=A.type;
+var G=A.target||A.srcElement;while(G&&G.nodeType==3){G=G.parentNode;}if(J.test(/key/)){var B=A.which||A.keyCode;var M=Event.Keys.keyOf(B);if(J=="keydown"){var D=B-111;
+if(D>0&&D<13){M="f"+D;}}M=M||String.fromCharCode(B).toLowerCase();}else{if(J.match(/(click|mouse|menu)/i)){K=(!K.compatMode||K.compatMode=="CSS1Compat")?K.html:K.body;
+var I={x:A.pageX||A.clientX+K.scrollLeft,y:A.pageY||A.clientY+K.scrollTop};var C={x:(A.pageX)?A.pageX-F.pageXOffset:A.clientX,y:(A.pageY)?A.pageY-F.pageYOffset:A.clientY};
+if(J.match(/DOMMouseScroll|mousewheel/)){var H=(A.wheelDelta)?A.wheelDelta/120:-(A.detail||0)/3;}var E=(A.which==3)||(A.button==2);var L=null;if(J.match(/over|out/)){switch(J){case"mouseover":L=A.relatedTarget||A.fromElement;
+break;case"mouseout":L=A.relatedTarget||A.toElement;}if(!(function(){while(L&&L.nodeType==3){L=L.parentNode;}return true;}).create({attempt:Browser.Engine.gecko})()){L=false;
+}}}}return $extend(this,{event:A,type:J,page:I,client:C,rightClick:E,wheel:H,relatedTarget:L,target:G,code:B,key:M,shift:A.shiftKey,control:A.ctrlKey,alt:A.altKey,meta:A.metaKey});
+}});Event.Keys=new Hash({enter:13,up:38,down:40,left:37,right:39,esc:27,space:32,backspace:8,tab:9,"delete":46});Event.implement({stop:function(){return this.stopPropagation().preventDefault();
+},stopPropagation:function(){if(this.event.stopPropagation){this.event.stopPropagation();}else{this.event.cancelBubble=true;}return this;},preventDefault:function(){if(this.event.preventDefault){this.event.preventDefault();
+}else{this.event.returnValue=false;}return this;}});var Class=new Native({name:"Class",initialize:function(B){B=B||{};var A=function(E){for(var D in this){this[D]=$unlink(this[D]);
+}for(var F in Class.Mutators){if(!this[F]){continue;}Class.Mutators[F](this,this[F]);delete this[F];}this.constructor=A;if(E===$empty){return this;}var C=(this.initialize)?this.initialize.apply(this,arguments):this;
+if(this.options&&this.options.initialize){this.options.initialize.call(this);}return C;};$extend(A,this);A.constructor=Class;A.prototype=B;return A;}});
+Class.implement({implement:function(){Class.Mutators.Implements(this.prototype,Array.slice(arguments));return this;}});Class.Mutators={Implements:function(A,B){$splat(B).each(function(C){$extend(A,($type(C)=="class")?new C($empty):C);
+});},Extends:function(self,klass){var instance=new klass($empty);delete instance.parent;delete instance.parentOf;for(var key in instance){var current=self[key],previous=instance[key];
+if(current==undefined){self[key]=previous;continue;}var ctype=$type(current),ptype=$type(previous);if(ctype!=ptype){continue;}switch(ctype){case"function":if(!arguments.callee.caller){self[key]=eval("("+String(current).replace(/\bthis\.parent\(\s*(\))?/g,function(full,close){return"arguments.callee._parent_.call(this"+(close||", ");
+})+")");}self[key]._parent_=previous;break;case"object":self[key]=$merge(previous,current);}}self.parent=function(){return arguments.callee.caller._parent_.apply(this,arguments);
+};self.parentOf=function(descendant){return descendant._parent_.apply(this,Array.slice(arguments,1));};}};var Chain=new Class({chain:function(){this.$chain=(this.$chain||[]).extend(arguments);
+return this;},callChain:function(){return(this.$chain&&this.$chain.length)?this.$chain.shift().apply(this,arguments):false;},clearChain:function(){if(this.$chain){this.$chain.empty();
+}return this;}});var Events=new Class({addEvent:function(C,B,A){C=Events.removeOn(C);if(B!=$empty){this.$events=this.$events||{};this.$events[C]=this.$events[C]||[];
+this.$events[C].include(B);if(A){B.internal=true;}}return this;},addEvents:function(A){for(var B in A){this.addEvent(B,A[B]);}return this;},fireEvent:function(C,B,A){C=Events.removeOn(C);
+if(!this.$events||!this.$events[C]){return this;}this.$events[C].each(function(D){D.create({bind:this,delay:A,"arguments":B})();},this);return this;},removeEvent:function(B,A){B=Events.removeOn(B);
+if(!this.$events||!this.$events[B]){return this;}if(!A.internal){this.$events[B].erase(A);}return this;},removeEvents:function(C){for(var D in this.$events){if(C&&C!=D){continue;
+}var B=this.$events[D];for(var A=B.length;A--;A){this.removeEvent(D,B[A]);}}return this;}});Events.removeOn=function(A){return A.replace(/^on([A-Z])/,function(B,C){return C.toLowerCase();
+});};var Options=new Class({setOptions:function(){this.options=$merge.run([this.options].extend(arguments));if(!this.addEvent){return this;}for(var A in this.options){if($type(this.options[A])!="function"||!(/^on[A-Z]/).test(A)){continue;
+}this.addEvent(A,this.options[A]);delete this.options[A];}return this;}});Document.implement({newElement:function(A,B){if(Browser.Engine.trident&&B){["name","type","checked"].each(function(C){if(!B[C]){return ;
+}A+=" "+C+'="'+B[C]+'"';if(C!="checked"){delete B[C];}});A="<"+A+">";}return $.element(this.createElement(A)).set(B);},newTextNode:function(A){return this.createTextNode(A);
+},getDocument:function(){return this;},getWindow:function(){return this.defaultView||this.parentWindow;},purge:function(){var C=this.getElementsByTagName("*");
+for(var B=0,A=C.length;B<A;B++){Browser.freeMem(C[B]);}}});var Element=new Native({name:"Element",legacy:window.Element,initialize:function(A,B){var C=Element.Constructors.get(A);
+if(C){return C(B);}if(typeof A=="string"){return document.newElement(A,B);}return $(A).set(B);},afterImplement:function(A,B){if(!Array[A]){Elements.implement(A,Elements.multi(A));
+}Element.Prototype[A]=B;}});Element.Prototype={$family:{name:"element"}};Element.Constructors=new Hash;var IFrame=new Native({name:"IFrame",generics:false,initialize:function(){var E=Array.link(arguments,{properties:Object.type,iframe:$defined});
+var C=E.properties||{};var B=$(E.iframe)||false;var D=C.onload||$empty;delete C.onload;C.id=C.name=$pick(C.id,C.name,B.id,B.name,"IFrame_"+$time());B=new Element(B||"iframe",C);
+var A=function(){var F=$try(function(){return B.contentWindow.location.host;});if(F&&F==window.location.host){var H=new Window(B.contentWindow);var G=new Document(B.contentWindow.document);
+$extend(H.Element.prototype,Element.Prototype);}D.call(B.contentWindow,B.contentWindow.document);};(!window.frames[C.id])?B.addListener("load",A):A();return B;
+}});var Elements=new Native({initialize:function(F,B){B=$extend({ddup:true,cash:true},B);F=F||[];if(B.ddup||B.cash){var G={},E=[];for(var C=0,A=F.length;
+C<A;C++){var D=$.element(F[C],!B.cash);if(B.ddup){if(G[D.uid]){continue;}G[D.uid]=true;}E.push(D);}F=E;}return(B.cash)?$extend(F,this):F;}});Elements.implement({filter:function(A,B){if(!A){return this;
+}return new Elements(Array.filter(this,(typeof A=="string")?function(C){return C.match(A);}:A,B));}});Elements.multi=function(A){return function(){var B=[];
+var F=true;for(var D=0,C=this.length;D<C;D++){var E=this[D][A].apply(this[D],arguments);B.push(E);if(F){F=($type(E)=="element");}}return(F)?new Elements(B):B;
+};};Window.implement({$:function(B,C){if(B&&B.$family&&B.uid){return B;}var A=$type(B);return($[A])?$[A](B,C,this.document):null;},$$:function(A){if(arguments.length==1&&typeof A=="string"){return this.document.getElements(A);
+}var F=[];var C=Array.flatten(arguments);for(var D=0,B=C.length;D<B;D++){var E=C[D];switch($type(E)){case"element":E=[E];break;case"string":E=this.document.getElements(E,true);
+break;default:E=false;}if(E){F.extend(E);}}return new Elements(F);},getDocument:function(){return this.document;},getWindow:function(){return this;}});
+$.string=function(C,B,A){C=A.getElementById(C);return(C)?$.element(C,B):null;};$.element=function(A,D){$uid(A);if(!D&&!A.$family&&!(/^object|embed$/i).test(A.tagName)){var B=Element.Prototype;
+for(var C in B){A[C]=B[C];}}return A;};$.object=function(B,C,A){if(B.toElement){return $.element(B.toElement(A),C);}return null;};$.textnode=$.whitespace=$.window=$.document=$arguments(0);
+Native.implement([Element,Document],{getElement:function(A,B){return $(this.getElements(A,true)[0]||null,B);},getElements:function(A,D){A=A.split(",");
+var C=[];var B=(A.length>1);A.each(function(E){var F=this.getElementsByTagName(E.trim());(B)?C.extend(F):C=F;},this);return new Elements(C,{ddup:B,cash:!D});
+}});Element.Storage={get:function(A){return(this[A]||(this[A]={}));}};Element.Inserters=new Hash({before:function(B,A){if(A.parentNode){A.parentNode.insertBefore(B,A);
+}},after:function(B,A){if(!A.parentNode){return ;}var C=A.nextSibling;(C)?A.parentNode.insertBefore(B,C):A.parentNode.appendChild(B);},bottom:function(B,A){A.appendChild(B);
+},top:function(B,A){var C=A.firstChild;(C)?A.insertBefore(B,C):A.appendChild(B);}});Element.Inserters.inside=Element.Inserters.bottom;Element.Inserters.each(function(C,B){var A=B.capitalize();
+Element.implement("inject"+A,function(D){C(this,$(D,true));return this;});Element.implement("grab"+A,function(D){C($(D,true),this);return this;});});Element.implement({getDocument:function(){return this.ownerDocument;
+},getWindow:function(){return this.ownerDocument.getWindow();},getElementById:function(D,C){var B=this.ownerDocument.getElementById(D);if(!B){return null;
+}for(var A=B.parentNode;A!=this;A=A.parentNode){if(!A){return null;}}return $.element(B,C);},set:function(D,B){switch($type(D)){case"object":for(var C in D){this.set(C,D[C]);
+}break;case"string":var A=Element.Properties.get(D);(A&&A.set)?A.set.apply(this,Array.slice(arguments,1)):this.setProperty(D,B);}return this;},get:function(B){var A=Element.Properties.get(B);
+return(A&&A.get)?A.get.apply(this,Array.slice(arguments,1)):this.getProperty(B);},erase:function(B){var A=Element.Properties.get(B);(A&&A.erase)?A.erase.apply(this,Array.slice(arguments,1)):this.removeProperty(B);
+return this;},match:function(A){return(!A||Element.get(this,"tag")==A);},inject:function(B,A){Element.Inserters.get(A||"bottom")(this,$(B,true));return this;
+},wraps:function(B,A){B=$(B,true);return this.replaces(B).grab(B,A);},grab:function(B,A){Element.Inserters.get(A||"bottom")($(B,true),this);return this;
+},appendText:function(B,A){return this.grab(this.getDocument().newTextNode(B),A);},adopt:function(){Array.flatten(arguments).each(function(A){A=$(A,true);
+if(A){this.appendChild(A);}},this);return this;},dispose:function(){return(this.parentNode)?this.parentNode.removeChild(this):this;},clone:function(D,C){switch($type(this)){case"element":var H={};
+for(var G=0,E=this.attributes.length;G<E;G++){var B=this.attributes[G],L=B.nodeName.toLowerCase();if(Browser.Engine.trident&&(/input/i).test(this.tagName)&&(/width|height/).test(L)){continue;
+}var K=(L=="style"&&this.style)?this.style.cssText:B.nodeValue;if(!$chk(K)||L=="uid"||(L=="id"&&!C)){continue;}if(K!="inherit"&&["string","number"].contains($type(K))){H[L]=K;
+}}var J=new Element(this.nodeName.toLowerCase(),H);if(D!==false){for(var I=0,F=this.childNodes.length;I<F;I++){var A=Element.clone(this.childNodes[I],true,C);
+if(A){J.grab(A);}}}return J;case"textnode":return document.newTextNode(this.nodeValue);}return null;},replaces:function(A){A=$(A,true);A.parentNode.replaceChild(this,A);
+return this;},hasClass:function(A){return this.className.contains(A," ");},addClass:function(A){if(!this.hasClass(A)){this.className=(this.className+" "+A).clean();
+}return this;},removeClass:function(A){this.className=this.className.replace(new RegExp("(^|\\s)"+A+"(?:\\s|$)"),"$1").clean();return this;},toggleClass:function(A){return this.hasClass(A)?this.removeClass(A):this.addClass(A);
+},getComputedStyle:function(B){if(this.currentStyle){return this.currentStyle[B.camelCase()];}var A=this.getWindow().getComputedStyle(this,null);return(A)?A.getPropertyValue([B.hyphenate()]):null;
+},empty:function(){$A(this.childNodes).each(function(A){Browser.freeMem(A);Element.empty(A);Element.dispose(A);},this);return this;},destroy:function(){Browser.freeMem(this.empty().dispose());
+return null;},getSelected:function(){return new Elements($A(this.options).filter(function(A){return A.selected;}));},toQueryString:function(){var A=[];
+this.getElements("input, select, textarea").each(function(B){if(!B.name||B.disabled){return ;}var C=(B.tagName.toLowerCase()=="select")?Element.getSelected(B).map(function(D){return D.value;
+}):((B.type=="radio"||B.type=="checkbox")&&!B.checked)?null:B.value;$splat(C).each(function(D){if(D){A.push(B.name+"="+encodeURIComponent(D));}});});return A.join("&");
+},getProperty:function(C){var B=Element.Attributes,A=B.Props[C];var D=(A)?this[A]:this.getAttribute(C,2);return(B.Bools[C])?!!D:(A)?D:D||null;},getProperties:function(){var A=$A(arguments);
+return A.map(function(B){return this.getProperty(B);},this).associate(A);},setProperty:function(D,E){var C=Element.Attributes,B=C.Props[D],A=$defined(E);
+if(B&&C.Bools[D]){E=(E||!A)?true:false;}else{if(!A){return this.removeProperty(D);}}(B)?this[B]=E:this.setAttribute(D,E);return this;},setProperties:function(A){for(var B in A){this.setProperty(B,A[B]);
+}return this;},removeProperty:function(D){var C=Element.Attributes,B=C.Props[D],A=(B&&C.Bools[D]);(B)?this[B]=(A)?false:"":this.removeAttribute(D);return this;
+},removeProperties:function(){Array.each(arguments,this.removeProperty,this);return this;}});(function(){var A=function(D,B,I,C,F,H){var E=D[I||B];var G=[];
+while(E){if(E.nodeType==1&&(!C||Element.match(E,C))){G.push(E);if(!F){break;}}E=E[B];}return(F)?new Elements(G,{ddup:false,cash:!H}):$(G[0],H);};Element.implement({getPrevious:function(B,C){return A(this,"previousSibling",null,B,false,C);
+},getAllPrevious:function(B,C){return A(this,"previousSibling",null,B,true,C);},getNext:function(B,C){return A(this,"nextSibling",null,B,false,C);},getAllNext:function(B,C){return A(this,"nextSibling",null,B,true,C);
+},getFirst:function(B,C){return A(this,"nextSibling","firstChild",B,false,C);},getLast:function(B,C){return A(this,"previousSibling","lastChild",B,false,C);
+},getParent:function(B,C){return A(this,"parentNode",null,B,false,C);},getParents:function(B,C){return A(this,"parentNode",null,B,true,C);},getChildren:function(B,C){return A(this,"nextSibling","firstChild",B,true,C);
+},hasChild:function(B){B=$(B,true);return(!!B&&$A(this.getElementsByTagName(B.tagName)).contains(B));}});})();Element.Properties=new Hash;Element.Properties.style={set:function(A){this.style.cssText=A;
+},get:function(){return this.style.cssText;},erase:function(){this.style.cssText="";}};Element.Properties.tag={get:function(){return this.tagName.toLowerCase();
+}};Element.Properties.href={get:function(){return(!this.href)?null:this.href.replace(new RegExp("^"+document.location.protocol+"//"+document.location.host),"");
+}};Element.Properties.html={set:function(){return this.innerHTML=Array.flatten(arguments).join("");}};Native.implement([Element,Window,Document],{addListener:function(B,A){if(this.addEventListener){this.addEventListener(B,A,false);
+}else{this.attachEvent("on"+B,A);}return this;},removeListener:function(B,A){if(this.removeEventListener){this.removeEventListener(B,A,false);}else{this.detachEvent("on"+B,A);
+}return this;},retrieve:function(B,A){var D=Element.Storage.get(this.uid);var C=D[B];if($defined(A)&&!$defined(C)){C=D[B]=A;}return $pick(C);},store:function(B,A){var C=Element.Storage.get(this.uid);
+C[B]=A;return this;},eliminate:function(A){var B=Element.Storage.get(this.uid);delete B[A];return this;}});Element.Attributes=new Hash({Props:{html:"innerHTML","class":"className","for":"htmlFor",text:(Browser.Engine.trident)?"innerText":"textContent"},Bools:["compact","nowrap","ismap","declare","noshade","checked","disabled","readonly","multiple","selected","noresize","defer"],Camels:["value","accessKey","cellPadding","cellSpacing","colSpan","frameBorder","maxLength","readOnly","rowSpan","tabIndex","useMap"]});
+Browser.freeMem=function(A){if(!A){return ;}if(Browser.Engine.trident&&(/object/i).test(A.tagName)){for(var B in A){if(typeof A[B]=="function"){A[B]=$empty;
+}}Element.dispose(A);}if(A.uid&&A.removeEvents){A.removeEvents();}};(function(B){var C=B.Bools,A=B.Camels;B.Bools=C=C.associate(C);Hash.extend(Hash.combine(B.Props,C),A.associate(A.map(function(D){return D.toLowerCase();
+})));B.erase("Camels");})(Element.Attributes);window.addListener("unload",function(){window.removeListener("unload",arguments.callee);document.purge();
+if(Browser.Engine.trident){CollectGarbage();}});Element.Properties.events={set:function(A){this.addEvents(A);}};Native.implement([Element,Window,Document],{addEvent:function(E,G){var H=this.retrieve("events",{});
+H[E]=H[E]||{keys:[],values:[]};if(H[E].keys.contains(G)){return this;}H[E].keys.push(G);var F=E,A=Element.Events.get(E),C=G,I=this;if(A){if(A.onAdd){A.onAdd.call(this,G);
+}if(A.condition){C=function(J){if(A.condition.call(this,J)){return G.call(this,J);}return false;};}F=A.base||F;}var D=function(){return G.call(I);};var B=Element.NativeEvents[F]||0;
+if(B){if(B==2){D=function(J){J=new Event(J,I.getWindow());if(C.call(I,J)===false){J.stop();}};}this.addListener(F,D);}H[E].values.push(D);return this;},removeEvent:function(D,C){var B=this.retrieve("events");
+if(!B||!B[D]){return this;}var G=B[D].keys.indexOf(C);if(G==-1){return this;}var A=B[D].keys.splice(G,1)[0];var F=B[D].values.splice(G,1)[0];var E=Element.Events.get(D);
+if(E){if(E.onRemove){E.onRemove.call(this,C);}D=E.base||D;}return(Element.NativeEvents[D])?this.removeListener(D,F):this;},addEvents:function(A){for(var B in A){this.addEvent(B,A[B]);
+}return this;},removeEvents:function(B){var A=this.retrieve("events");if(!A){return this;}if(!B){for(var C in A){this.removeEvents(C);}A=null;}else{if(A[B]){while(A[B].keys[0]){this.removeEvent(B,A[B].keys[0]);
+}A[B]=null;}}return this;},fireEvent:function(D,B,A){var C=this.retrieve("events");if(!C||!C[D]){return this;}C[D].keys.each(function(E){E.create({bind:this,delay:A,"arguments":B})();
+},this);return this;},cloneEvents:function(D,A){D=$(D);var C=D.retrieve("events");if(!C){return this;}if(!A){for(var B in C){this.cloneEvents(D,B);}}else{if(C[A]){C[A].keys.each(function(E){this.addEvent(A,E);
+},this);}}return this;}});Element.NativeEvents={click:2,dblclick:2,mouseup:2,mousedown:2,contextmenu:2,mousewheel:2,DOMMouseScroll:2,mouseover:2,mouseout:2,mousemove:2,selectstart:2,selectend:2,keydown:2,keypress:2,keyup:2,focus:2,blur:2,change:2,reset:2,select:2,submit:2,load:1,unload:1,beforeunload:2,resize:1,move:1,DOMContentLoaded:1,readystatechange:1,error:1,abort:1,scroll:1};
+(function(){var A=function(B){var C=B.relatedTarget;if(C==undefined){return true;}if(C===false){return false;}return($type(this)!="document"&&C!=this&&C.prefix!="xul"&&!this.hasChild(C));
+};Element.Events=new Hash({mouseenter:{base:"mouseover",condition:A},mouseleave:{base:"mouseout",condition:A},mousewheel:{base:(Browser.Engine.gecko)?"DOMMouseScroll":"mousewheel"}});
+})();Element.Properties.styles={set:function(A){this.setStyles(A);}};Element.Properties.opacity={set:function(A,B){if(!B){if(A==0){if(this.style.visibility!="hidden"){this.style.visibility="hidden";
+}}else{if(this.style.visibility!="visible"){this.style.visibility="visible";}}}if(!this.currentStyle||!this.currentStyle.hasLayout){this.style.zoom=1;}if(Browser.Engine.trident){this.style.filter=(A==1)?"":"alpha(opacity="+A*100+")";
+}this.style.opacity=A;this.store("opacity",A);},get:function(){return this.retrieve("opacity",1);}};Element.implement({setOpacity:function(A){return this.set("opacity",A,true);
+},getOpacity:function(){return this.get("opacity");},setStyle:function(B,A){switch(B){case"opacity":return this.set("opacity",parseFloat(A));case"float":B=(Browser.Engine.trident)?"styleFloat":"cssFloat";
+}B=B.camelCase();if($type(A)!="string"){var C=(Element.Styles.get(B)||"@").split(" ");A=$splat(A).map(function(E,D){if(!C[D]){return"";}return($type(E)=="number")?C[D].replace("@",Math.round(E)):E;
+}).join(" ");}else{if(A==String(Number(A))){A=Math.round(A);}}this.style[B]=A;return this;},getStyle:function(G){switch(G){case"opacity":return this.get("opacity");
+case"float":G=(Browser.Engine.trident)?"styleFloat":"cssFloat";}G=G.camelCase();var A=this.style[G];if(!$chk(A)){A=[];for(var F in Element.ShortStyles){if(G!=F){continue;
+}for(var E in Element.ShortStyles[F]){A.push(this.getStyle(E));}return A.join(" ");}A=this.getComputedStyle(G);}if(A){A=String(A);var C=A.match(/rgba?\([\d\s,]+\)/);
+if(C){A=A.replace(C[0],C[0].rgbToHex());}}if(Browser.Engine.presto||(Browser.Engine.trident&&!$chk(parseInt(A)))){if(G.test(/^(height|width)$/)){var B=(G=="width")?["left","right"]:["top","bottom"],D=0;
+B.each(function(H){D+=this.getStyle("border-"+H+"-width").toInt()+this.getStyle("padding-"+H).toInt();},this);return this["offset"+G.capitalize()]-D+"px";
+}if(Browser.Engine.presto&&String(A).test("px")){return A;}if(G.test(/(border(.+)Width|margin|padding)/)){return"0px";}}return A;},setStyles:function(B){for(var A in B){this.setStyle(A,B[A]);
+}return this;},getStyles:function(){var A={};Array.each(arguments,function(B){A[B]=this.getStyle(B);},this);return A;}});Element.Styles=new Hash({left:"@px",top:"@px",bottom:"@px",right:"@px",width:"@px",height:"@px",maxWidth:"@px",maxHeight:"@px",minWidth:"@px",minHeight:"@px",backgroundColor:"rgb(@, @, @)",backgroundPosition:"@px @px",color:"rgb(@, @, @)",fontSize:"@px",letterSpacing:"@px",lineHeight:"@px",clip:"rect(@px @px @px @px)",margin:"@px @px @px @px",padding:"@px @px @px @px",border:"@px @ rgb(@, @, @) @px @ rgb(@, @, @) @px @ rgb(@, @, @)",borderWidth:"@px @px @px @px",borderStyle:"@ @ @ @",borderColor:"rgb(@, @, @) rgb(@, @, @) rgb(@, @, @) rgb(@, @, @)",zIndex:"@",zoom:"@",fontWeight:"@",textIndent:"@px",opacity:"@"});
+Element.ShortStyles={margin:{},padding:{},border:{},borderWidth:{},borderStyle:{},borderColor:{}};["Top","Right","Bottom","Left"].each(function(G){var F=Element.ShortStyles;
+var B=Element.Styles;["margin","padding"].each(function(H){var I=H+G;F[H][I]=B[I]="@px";});var E="border"+G;F.border[E]=B[E]="@px @ rgb(@, @, @)";var D=E+"Width",A=E+"Style",C=E+"Color";
+F[E]={};F.borderWidth[D]=F[E][D]=B[D]="@px";F.borderStyle[A]=F[E][A]=B[A]="@";F.borderColor[C]=F[E][C]=B[C]="rgb(@, @, @)";});(function(){Element.implement({scrollTo:function(H,I){if(B(this)){this.getWindow().scrollTo(H,I);
+}else{this.scrollLeft=H;this.scrollTop=I;}return this;},getSize:function(){if(B(this)){return this.getWindow().getSize();}return{x:this.offsetWidth,y:this.offsetHeight};
+},getScrollSize:function(){if(B(this)){return this.getWindow().getScrollSize();}return{x:this.scrollWidth,y:this.scrollHeight};},getScroll:function(){if(B(this)){return this.getWindow().getScroll();
+}return{x:this.scrollLeft,y:this.scrollTop};},getScrolls:function(){var I=this,H={x:0,y:0};while(I&&!B(I)){H.x+=I.scrollLeft;H.y+=I.scrollTop;I=I.parentNode;
+}return H;},getOffsetParent:function(){var H=this;if(B(H)){return null;}if(!Browser.Engine.trident){return H.offsetParent;}while((H=H.parentNode)&&!B(H)){if(D(H,"position")!="static"){return H;
+}}return null;},getOffsets:function(){var I=this,H={x:0,y:0};if(B(this)){return H;}while(I&&!B(I)){H.x+=I.offsetLeft;H.y+=I.offsetTop;if(Browser.Engine.gecko){if(!F(I)){H.x+=C(I);
+H.y+=G(I);}var J=I.parentNode;if(J&&D(J,"overflow")!="visible"){H.x+=C(J);H.y+=G(J);}}else{if(I!=this&&(Browser.Engine.trident||Browser.Engine.webkit)){H.x+=C(I);
+H.y+=G(I);}}I=I.offsetParent;if(Browser.Engine.trident){while(I&&!I.currentStyle.hasLayout){I=I.offsetParent;}}}if(Browser.Engine.gecko&&!F(this)){H.x-=C(this);
+H.y-=G(this);}return H;},getPosition:function(K){if(B(this)){return{x:0,y:0};}var L=this.getOffsets(),I=this.getScrolls();var H={x:L.x-I.x,y:L.y-I.y};var J=(K&&(K=$(K)))?K.getPosition():{x:0,y:0};
+return{x:H.x-J.x,y:H.y-J.y};},getCoordinates:function(J){if(B(this)){return this.getWindow().getCoordinates();}var H=this.getPosition(J),I=this.getSize();
+var K={left:H.x,top:H.y,width:I.x,height:I.y};K.right=K.left+K.width;K.bottom=K.top+K.height;return K;},computePosition:function(H){return{left:H.x-E(this,"margin-left"),top:H.y-E(this,"margin-top")};
+},position:function(H){return this.setStyles(this.computePosition(H));}});Native.implement([Document,Window],{getSize:function(){var I=this.getWindow();
+if(Browser.Engine.presto||Browser.Engine.webkit){return{x:I.innerWidth,y:I.innerHeight};}var H=A(this);return{x:H.clientWidth,y:H.clientHeight};},getScroll:function(){var I=this.getWindow();
+var H=A(this);return{x:I.pageXOffset||H.scrollLeft,y:I.pageYOffset||H.scrollTop};},getScrollSize:function(){var I=A(this);var H=this.getSize();return{x:Math.max(I.scrollWidth,H.x),y:Math.max(I.scrollHeight,H.y)};
+},getPosition:function(){return{x:0,y:0};},getCoordinates:function(){var H=this.getSize();return{top:0,left:0,bottom:H.y,right:H.x,height:H.y,width:H.x};
+}});var D=Element.getComputedStyle;function E(H,I){return D(H,I).toInt()||0;}function F(H){return D(H,"-moz-box-sizing")=="border-box";}function G(H){return E(H,"border-top-width");
+}function C(H){return E(H,"border-left-width");}function B(H){return(/^(?:body|html)$/i).test(H.tagName);}function A(H){var I=H.getDocument();return(!I.compatMode||I.compatMode=="CSS1Compat")?I.html:I.body;
+}})();Native.implement([Window,Document,Element],{getHeight:function(){return this.getSize().y;},getWidth:function(){return this.getSize().x;},getScrollTop:function(){return this.getScroll().y;
+},getScrollLeft:function(){return this.getScroll().x;},getScrollHeight:function(){return this.getScrollSize().y;},getScrollWidth:function(){return this.getScrollSize().x;
+},getTop:function(){return this.getPosition().y;},getLeft:function(){return this.getPosition().x;}});Native.implement([Document,Element],{getElements:function(H,G){H=H.split(",");
+var C,E={};for(var D=0,B=H.length;D<B;D++){var A=H[D],F=Selectors.Utils.search(this,A,E);if(D!=0&&F.item){F=$A(F);}C=(D==0)?F:(C.item)?$A(C).concat(F):C.concat(F);
+}return new Elements(C,{ddup:(H.length>1),cash:!G});}});Element.implement({match:function(B){if(!B){return true;}var D=Selectors.Utils.parseTagAndID(B);
+var A=D[0],E=D[1];if(!Selectors.Filters.byID(this,E)||!Selectors.Filters.byTag(this,A)){return false;}var C=Selectors.Utils.parseSelector(B);return(C)?Selectors.Utils.filter(this,C,{}):true;
+}});var Selectors={Cache:{nth:{},parsed:{}}};Selectors.RegExps={id:(/#([\w-]+)/),tag:(/^(\w+|\*)/),quick:(/^(\w+|\*)$/),splitter:(/\s*([+>~\s])\s*([a-zA-Z#.*:\[])/g),combined:(/\.([\w-]+)|\[(\w+)(?:([!*^$~|]?=)["']?(.*?)["']?)?\]|:([\w-]+)(?:\(["']?(.*?)?["']?\)|$)/g)};
+Selectors.Utils={chk:function(B,C){if(!C){return true;}var A=$uid(B);if(!C[A]){return C[A]=true;}return false;},parseNthArgument:function(F){if(Selectors.Cache.nth[F]){return Selectors.Cache.nth[F];
+}var C=F.match(/^([+-]?\d*)?([a-z]+)?([+-]?\d*)?$/);if(!C){return false;}var E=parseInt(C[1]);var B=(E||E===0)?E:1;var D=C[2]||false;var A=parseInt(C[3])||0;
+if(B!=0){A--;while(A<1){A+=B;}while(A>=B){A-=B;}}else{B=A;D="index";}switch(D){case"n":C={a:B,b:A,special:"n"};break;case"odd":C={a:2,b:0,special:"n"};
+break;case"even":C={a:2,b:1,special:"n"};break;case"first":C={a:0,special:"index"};break;case"last":C={special:"last-child"};break;case"only":C={special:"only-child"};
+break;default:C={a:(B-1),special:"index"};}return Selectors.Cache.nth[F]=C;},parseSelector:function(E){if(Selectors.Cache.parsed[E]){return Selectors.Cache.parsed[E];
+}var D,H={classes:[],pseudos:[],attributes:[]};while((D=Selectors.RegExps.combined.exec(E))){var I=D[1],G=D[2],F=D[3],B=D[4],C=D[5],J=D[6];if(I){H.classes.push(I);
+}else{if(C){var A=Selectors.Pseudo.get(C);if(A){H.pseudos.push({parser:A,argument:J});}else{H.attributes.push({name:C,operator:"=",value:J});}}else{if(G){H.attributes.push({name:G,operator:F,value:B});
+}}}}if(!H.classes.length){delete H.classes;}if(!H.attributes.length){delete H.attributes;}if(!H.pseudos.length){delete H.pseudos;}if(!H.classes&&!H.attributes&&!H.pseudos){H=null;
+}return Selectors.Cache.parsed[E]=H;},parseTagAndID:function(B){var A=B.match(Selectors.RegExps.tag);var C=B.match(Selectors.RegExps.id);return[(A)?A[1]:"*",(C)?C[1]:false];
+},filter:function(F,C,E){var D;if(C.classes){for(D=C.classes.length;D--;D){var G=C.classes[D];if(!Selectors.Filters.byClass(F,G)){return false;}}}if(C.attributes){for(D=C.attributes.length;
+D--;D){var B=C.attributes[D];if(!Selectors.Filters.byAttribute(F,B.name,B.operator,B.value)){return false;}}}if(C.pseudos){for(D=C.pseudos.length;D--;D){var A=C.pseudos[D];
+if(!Selectors.Filters.byPseudo(F,A.parser,A.argument,E)){return false;}}}return true;},getByTagAndID:function(B,A,D){if(D){var C=(B.getElementById)?B.getElementById(D,true):Element.getElementById(B,D,true);
+return(C&&Selectors.Filters.byTag(C,A))?[C]:[];}else{return B.getElementsByTagName(A);}},search:function(J,I,O){var B=[];var C=I.trim().replace(Selectors.RegExps.splitter,function(Z,Y,X){B.push(Y);
+return":)"+X;}).split(":)");var K,F,E,V;for(var U=0,Q=C.length;U<Q;U++){var T=C[U];if(U==0&&Selectors.RegExps.quick.test(T)){K=J.getElementsByTagName(T);
+continue;}var A=B[U-1];var L=Selectors.Utils.parseTagAndID(T);var W=L[0],M=L[1];if(U==0){K=Selectors.Utils.getByTagAndID(J,W,M);}else{var D={},H=[];for(var S=0,R=K.length;
+S<R;S++){H=Selectors.Getters[A](H,K[S],W,M,D);}K=H;}var G=Selectors.Utils.parseSelector(T);if(G){E=[];for(var P=0,N=K.length;P<N;P++){V=K[P];if(Selectors.Utils.filter(V,G,O)){E.push(V);
+}}K=E;}}return K;}};Selectors.Getters={" ":function(H,G,I,A,E){var D=Selectors.Utils.getByTagAndID(G,I,A);for(var C=0,B=D.length;C<B;C++){var F=D[C];if(Selectors.Utils.chk(F,E)){H.push(F);
+}}return H;},">":function(H,G,I,A,F){var C=Selectors.Utils.getByTagAndID(G,I,A);for(var E=0,D=C.length;E<D;E++){var B=C[E];if(B.parentNode==G&&Selectors.Utils.chk(B,F)){H.push(B);
+}}return H;},"+":function(C,B,A,E,D){while((B=B.nextSibling)){if(B.nodeType==1){if(Selectors.Utils.chk(B,D)&&Selectors.Filters.byTag(B,A)&&Selectors.Filters.byID(B,E)){C.push(B);
+}break;}}return C;},"~":function(C,B,A,E,D){while((B=B.nextSibling)){if(B.nodeType==1){if(!Selectors.Utils.chk(B,D)){break;}if(Selectors.Filters.byTag(B,A)&&Selectors.Filters.byID(B,E)){C.push(B);
+}}}return C;}};Selectors.Filters={byTag:function(B,A){return(A=="*"||(B.tagName&&B.tagName.toLowerCase()==A));},byID:function(A,B){return(!B||(A.id&&A.id==B));
+},byClass:function(B,A){return(B.className&&B.className.contains(A," "));},byPseudo:function(A,D,C,B){return D.call(A,C,B);},byAttribute:function(C,D,B,E){var A=Element.prototype.getProperty.call(C,D);
+if(!A){return false;}if(!B||E==undefined){return true;}switch(B){case"=":return(A==E);case"*=":return(A.contains(E));case"^=":return(A.substr(0,E.length)==E);
+case"$=":return(A.substr(A.length-E.length)==E);case"!=":return(A!=E);case"~=":return A.contains(E," ");case"|=":return A.contains(E,"-");}return false;
+}};Selectors.Pseudo=new Hash({empty:function(){return !(this.innerText||this.textContent||"").length;},not:function(A){return !Element.match(this,A);},contains:function(A){return(this.innerText||this.textContent||"").contains(A);
+},"first-child":function(){return Selectors.Pseudo.index.call(this,0);},"last-child":function(){var A=this;while((A=A.nextSibling)){if(A.nodeType==1){return false;
+}}return true;},"only-child":function(){var B=this;while((B=B.previousSibling)){if(B.nodeType==1){return false;}}var A=this;while((A=A.nextSibling)){if(A.nodeType==1){return false;
+}}return true;},"nth-child":function(G,E){G=(G==undefined)?"n":G;var C=Selectors.Utils.parseNthArgument(G);if(C.special!="n"){return Selectors.Pseudo[C.special].call(this,C.a,E);
+}var F=0;E.positions=E.positions||{};var D=$uid(this);if(!E.positions[D]){var B=this;while((B=B.previousSibling)){if(B.nodeType!=1){continue;}F++;var A=E.positions[$uid(B)];
+if(A!=undefined){F=A+F;break;}}E.positions[D]=F;}return(E.positions[D]%C.a==C.b);},index:function(A){var B=this,C=0;while((B=B.previousSibling)){if(B.nodeType==1&&++C>A){return false;
+}}return(C==A);},even:function(B,A){return Selectors.Pseudo["nth-child"].call(this,"2n+1",A);},odd:function(B,A){return Selectors.Pseudo["nth-child"].call(this,"2n",A);
+}});Element.Events.domready={onAdd:function(A){if(Browser.loaded){A.call(this);}}};(function(){var B=function(){if(Browser.loaded){return ;}Browser.loaded=true;
+window.fireEvent("domready");document.fireEvent("domready");};switch(Browser.Engine.name){case"webkit":(function(){(["loaded","complete"].contains(document.readyState))?B():arguments.callee.delay(50);
+})();break;case"trident":var A=document.createElement("div");(function(){($try(function(){A.doScroll("left");return $(A).inject(document.body).set("html","temp").dispose();
+}))?B():arguments.callee.delay(50);})();break;default:window.addEvent("load",B);document.addEvent("DOMContentLoaded",B);}})();var JSON=new Hash({encode:function(B){switch($type(B)){case"string":return'"'+B.replace(/[\x00-\x1f\\"]/g,JSON.$replaceChars)+'"';
+case"array":return"["+String(B.map(JSON.encode).filter($defined))+"]";case"object":case"hash":var A=[];Hash.each(B,function(E,D){var C=JSON.encode(E);if(C){A.push(JSON.encode(D)+":"+C);
+}});return"{"+A+"}";case"number":case"boolean":return String(B);case false:return"null";}return null;},$specialChars:{"\b":"\\b","\t":"\\t","\n":"\\n","\f":"\\f","\r":"\\r",'"':'\\"',"\\":"\\\\"},$replaceChars:function(A){return JSON.$specialChars[A]||"\\u00"+Math.floor(A.charCodeAt()/16).toString(16)+(A.charCodeAt()%16).toString(16);
+},decode:function(string,secure){if($type(string)!="string"||!string.length){return null;}if(secure&&!(/^[,:{}\[\]0-9.\-+Eaeflnr-u \n\r\t]*$/).test(string.replace(/\\./g,"@").replace(/"[^"\\\n\r]*"/g,""))){return null;
+}return eval("("+string+")");}});Native.implement([Hash,Array,String,Number],{toJSON:function(){return JSON.encode(this);}});var Cookie=new Class({Implements:Options,options:{path:false,domain:false,duration:false,secure:false,document:document},initialize:function(B,A){this.key=B;
+this.setOptions(A);},write:function(B){B=encodeURIComponent(B);if(this.options.domain){B+="; domain="+this.options.domain;}if(this.options.path){B+="; path="+this.options.path;
+}if(this.options.duration){var A=new Date();A.setTime(A.getTime()+this.options.duration*24*60*60*1000);B+="; expires="+A.toGMTString();}if(this.options.secure){B+="; secure";
+}this.options.document.cookie=this.key+"="+B;return this;},read:function(){var A=this.options.document.cookie.match("(?:^|;)\\s*"+this.key.escapeRegExp()+"=([^;]*)");
+return(A)?decodeURIComponent(A[1]):null;},dispose:function(){new Cookie(this.key,$merge(this.options,{duration:-1})).write("");return this;}});Cookie.write=function(B,C,A){return new Cookie(B,A).write(C);
+};Cookie.read=function(A){return new Cookie(A).read();};Cookie.dispose=function(B,A){return new Cookie(B,A).dispose();};var Swiff=new Class({Implements:[Options],options:{id:null,height:1,width:1,container:null,properties:{},params:{quality:"high",allowScriptAccess:"always",wMode:"transparent",swLiveConnect:true},callBacks:{},vars:{}},toElement:function(){return this.object;
+},initialize:function(L,M){this.instance="Swiff_"+$time();this.setOptions(M);M=this.options;var B=this.id=M.id||this.instance;var A=$(M.container);Swiff.CallBacks[this.instance]={};
+var E=M.params,G=M.vars,F=M.callBacks;var H=$extend({height:M.height,width:M.width},M.properties);var K=this;for(var D in F){Swiff.CallBacks[this.instance][D]=(function(N){return function(){return N.apply(K.object,arguments);
+};})(F[D]);G[D]="Swiff.CallBacks."+this.instance+"."+D;}E.flashVars=Hash.toQueryString(G);if(Browser.Engine.trident){H.classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000";
+E.movie=L;}else{H.type="application/x-shockwave-flash";H.data=L;}var J='<object id="'+B+'"';for(var I in H){J+=" "+I+'="'+H[I]+'"';}J+=">";for(var C in E){if(E[C]){J+='<param name="'+C+'" value="'+E[C]+'" />';
+}}J+="</object>";this.object=((A)?A.empty():new Element("div")).set("html",J).firstChild;},replaces:function(A){A=$(A,true);A.parentNode.replaceChild(this.toElement(),A);
+return this;},inject:function(A){$(A,true).appendChild(this.toElement());return this;},remote:function(){return Swiff.remote.apply(Swiff,[this.toElement()].extend(arguments));
+}});Swiff.CallBacks={};Swiff.remote=function(obj,fn){var rs=obj.CallFunction('<invoke name="'+fn+'" returntype="javascript">'+__flash__argumentsToXML(arguments,2)+"</invoke>");
+return eval(rs);};var Fx=new Class({Implements:[Chain,Events,Options],options:{fps:50,unit:false,duration:500,link:"ignore",transition:function(A){return -(Math.cos(Math.PI*A)-1)/2;
+}},initialize:function(A){this.subject=this.subject||this;this.setOptions(A);this.options.duration=Fx.Durations[this.options.duration]||this.options.duration.toInt();
+var B=this.options.wait;if(B===false){this.options.link="cancel";}},step:function(){var A=$time();if(A<this.time+this.options.duration){var B=this.options.transition((A-this.time)/this.options.duration);
+this.set(this.compute(this.from,this.to,B));}else{this.set(this.compute(this.from,this.to,1));this.complete();}},set:function(A){return A;},compute:function(C,B,A){return Fx.compute(C,B,A);
+},check:function(A){if(!this.timer){return true;}switch(this.options.link){case"cancel":this.cancel();return true;case"chain":this.chain(A.bind(this,Array.slice(arguments,1)));
+return false;}return false;},start:function(B,A){if(!this.check(arguments.callee,B,A)){return this;}this.from=B;this.to=A;this.time=0;this.startTimer();
+this.onStart();return this;},complete:function(){if(this.stopTimer()){this.onComplete();}return this;},cancel:function(){if(this.stopTimer()){this.onCancel();
+}return this;},onStart:function(){this.fireEvent("start",this.subject);},onComplete:function(){this.fireEvent("complete",this.subject);if(!this.callChain()){this.fireEvent("chainComplete",this.subject);
+}},onCancel:function(){this.fireEvent("cancel",this.subject).clearChain();},pause:function(){this.stopTimer();return this;},resume:function(){this.startTimer();
+return this;},stopTimer:function(){if(!this.timer){return false;}this.time=$time()-this.time;this.timer=$clear(this.timer);return true;},startTimer:function(){if(this.timer){return false;
+}this.time=$time()-this.time;this.timer=this.step.periodical(Math.round(1000/this.options.fps),this);return true;}});Fx.compute=function(C,B,A){return(B-C)*A+C;
+};Fx.Durations={"short":250,normal:500,"long":1000};Fx.CSS=new Class({Extends:Fx,prepare:function(D,E,B){B=$splat(B);var C=B[1];if(!$chk(C)){B[1]=B[0];
+B[0]=D.getStyle(E);}var A=B.map(this.parse);return{from:A[0],to:A[1]};},parse:function(A){A=$lambda(A)();A=(typeof A=="string")?A.split(" "):$splat(A);
+return A.map(function(C){C=String(C);var B=false;Fx.CSS.Parsers.each(function(F,E){if(B){return ;}var D=F.parse(C);if($chk(D)){B={value:D,parser:F};}});
+B=B||{value:C,parser:Fx.CSS.Parsers.String};return B;});},compute:function(D,C,B){var A=[];(Math.min(D.length,C.length)).times(function(E){A.push({value:D[E].parser.compute(D[E].value,C[E].value,B),parser:D[E].parser});
+});A.$family={name:"fx:css:value"};return A;},serve:function(C,B){if($type(C)!="fx:css:value"){C=this.parse(C);}var A=[];C.each(function(D){A=A.concat(D.parser.serve(D.value,B));
+});return A;},render:function(A,D,C,B){A.setStyle(D,this.serve(C,B));},search:function(A){if(Fx.CSS.Cache[A]){return Fx.CSS.Cache[A];}var B={};Array.each(document.styleSheets,function(E,D){var C=E.href;
+if(C&&C.contains("://")&&!C.contains(document.domain)){return ;}var F=E.rules||E.cssRules;Array.each(F,function(I,G){if(!I.style){return ;}var H=(I.selectorText)?I.selectorText.replace(/^\w+/,function(J){return J.toLowerCase();
+}):null;if(!H||!H.test("^"+A+"$")){return ;}Element.Styles.each(function(K,J){if(!I.style[J]||Element.ShortStyles[J]){return ;}K=String(I.style[J]);B[J]=(K.test(/^rgb/))?K.rgbToHex():K;
+});});});return Fx.CSS.Cache[A]=B;}});Fx.CSS.Cache={};Fx.CSS.Parsers=new Hash({Color:{parse:function(A){if(A.match(/^#[0-9a-f]{3,6}$/i)){return A.hexToRgb(true);
+}return((A=A.match(/(\d+),\s*(\d+),\s*(\d+)/)))?[A[1],A[2],A[3]]:false;},compute:function(C,B,A){return C.map(function(E,D){return Math.round(Fx.compute(C[D],B[D],A));
+});},serve:function(A){return A.map(Number);}},Number:{parse:parseFloat,compute:Fx.compute,serve:function(B,A){return(A)?B+A:B;}},String:{parse:$lambda(false),compute:$arguments(1),serve:$arguments(0)}});
+Fx.Tween=new Class({Extends:Fx.CSS,initialize:function(B,A){this.element=this.subject=$(B);this.parent(A);},set:function(B,A){if(arguments.length==1){A=B;
+B=this.property||this.options.property;}this.render(this.element,B,A,this.options.unit);return this;},start:function(C,E,D){if(!this.check(arguments.callee,C,E,D)){return this;
+}var B=Array.flatten(arguments);this.property=this.options.property||B.shift();var A=this.prepare(this.element,this.property,B);return this.parent(A.from,A.to);
+}});Element.Properties.tween={set:function(A){var B=this.retrieve("tween");if(B){B.cancel();}return this.eliminate("tween").store("tween:options",$extend({link:"cancel"},A));
+},get:function(A){if(A||!this.retrieve("tween")){if(A||!this.retrieve("tween:options")){this.set("tween",A);}this.store("tween",new Fx.Tween(this,this.retrieve("tween:options")));
+}return this.retrieve("tween");}};Element.implement({tween:function(A,C,B){this.get("tween").start(arguments);return this;},fade:function(C){var E=this.get("tween"),D="opacity",A;
+C=$pick(C,"toggle");switch(C){case"in":E.start(D,1);break;case"out":E.start(D,0);break;case"show":E.set(D,1);break;case"hide":E.set(D,0);break;case"toggle":var B=this.retrieve("fade:flag",this.get("opacity")==1);
+E.start(D,(B)?0:1);this.store("fade:flag",!B);A=true;break;default:E.start(D,arguments);}if(!A){this.eliminate("fade:flag");}return this;},highlight:function(C,A){if(!A){A=this.retrieve("highlight:original",this.getStyle("background-color"));
+A=(A=="transparent")?"#fff":A;}var B=this.get("tween");B.start("background-color",C||"#ffff88",A).chain(function(){this.setStyle("background-color",this.retrieve("highlight:original"));
+B.callChain();}.bind(this));return this;}});Fx.Morph=new Class({Extends:Fx.CSS,initialize:function(B,A){this.element=this.subject=$(B);this.parent(A);},set:function(A){if(typeof A=="string"){A=this.search(A);
+}for(var B in A){this.render(this.element,B,A[B],this.options.unit);}return this;},compute:function(E,D,C){var A={};for(var B in E){A[B]=this.parent(E[B],D[B],C);
+}return A;},start:function(B){if(!this.check(arguments.callee,B)){return this;}if(typeof B=="string"){B=this.search(B);}var E={},D={};for(var C in B){var A=this.prepare(this.element,C,B[C]);
+E[C]=A.from;D[C]=A.to;}return this.parent(E,D);}});Element.Properties.morph={set:function(A){var B=this.retrieve("morph");if(B){B.cancel();}return this.eliminate("morph").store("morph:options",$extend({link:"cancel"},A));
+},get:function(A){if(A||!this.retrieve("morph")){if(A||!this.retrieve("morph:options")){this.set("morph",A);}this.store("morph",new Fx.Morph(this,this.retrieve("morph:options")));
+}return this.retrieve("morph");}};Element.implement({morph:function(A){this.get("morph").start(A);return this;}});(function(){var A=Fx.prototype.initialize;
+Fx.prototype.initialize=function(B){A.call(this,B);var C=this.options.transition;if(typeof C=="string"&&(C=C.split(":"))){var D=Fx.Transitions;D=D[C[0]]||D[C[0].capitalize()];
+if(C[1]){D=D["ease"+C[1].capitalize()+(C[2]?C[2].capitalize():"")];}this.options.transition=D;}};})();Fx.Transition=function(B,A){A=$splat(A);return $extend(B,{easeIn:function(C){return B(C,A);
+},easeOut:function(C){return 1-B(1-C,A);},easeInOut:function(C){return(C<=0.5)?B(2*C,A)/2:(2-B(2*(1-C),A))/2;}});};Fx.Transitions=new Hash({linear:$arguments(0)});
+Fx.Transitions.extend=function(A){for(var B in A){Fx.Transitions[B]=new Fx.Transition(A[B]);}};Fx.Transitions.extend({Pow:function(B,A){return Math.pow(B,A[0]||6);
+},Expo:function(A){return Math.pow(2,8*(A-1));},Circ:function(A){return 1-Math.sin(Math.acos(A));},Sine:function(A){return 1-Math.sin((1-A)*Math.PI/2);
+},Back:function(B,A){A=A[0]||1.618;return Math.pow(B,2)*((A+1)*B-A);},Bounce:function(D){var C;for(var B=0,A=1;1;B+=A,A/=2){if(D>=(7-4*B)/11){C=-Math.pow((11-6*B-11*D)/4,2)+A*A;
+break;}}return C;},Elastic:function(B,A){return Math.pow(2,10*--B)*Math.cos(20*B*Math.PI*(A[0]||1)/3);}});["Quad","Cubic","Quart","Quint"].each(function(B,A){Fx.Transitions[B]=new Fx.Transition(function(C){return Math.pow(C,[A+2]);
+});});var Request=new Class({Implements:[Chain,Events,Options],options:{url:"",data:"",headers:{"X-Requested-With":"XMLHttpRequest",Accept:"text/javascript, text/html, application/xml, text/xml, */*"},async:true,format:false,method:"post",link:"ignore",isSuccess:null,emulation:true,urlEncoded:true,encoding:"utf-8",evalScripts:false,evalResponse:false},initialize:function(A){this.xhr=new Browser.Request();
+this.setOptions(A);this.options.isSuccess=this.options.isSuccess||this.isSuccess;this.headers=new Hash(this.options.headers);},onStateChange:function(){if(this.xhr.readyState!=4||!this.running){return ;
+}this.running=false;this.status=0;$try(function(){this.status=this.xhr.status;}.bind(this));if(this.options.isSuccess.call(this,this.status)){this.response={text:this.xhr.responseText,xml:this.xhr.responseXML};
+this.success(this.response.text,this.response.xml);}else{this.response={text:null,xml:null};this.failure();}this.xhr.onreadystatechange=$empty;},isSuccess:function(){return((this.status>=200)&&(this.status<300));
+},processScripts:function(A){if(this.options.evalResponse||(/(ecma|java)script/).test(this.getHeader("Content-type"))){return $exec(A);}return A.stripScripts(this.options.evalScripts);
+},success:function(B,A){this.onSuccess(this.processScripts(B),A);},onSuccess:function(){this.fireEvent("complete",arguments).fireEvent("success",arguments).callChain();
+},failure:function(){this.onFailure();},onFailure:function(){this.fireEvent("complete").fireEvent("failure",this.xhr);},setHeader:function(A,B){this.headers.set(A,B);
+return this;},getHeader:function(A){return $try(function(){return this.xhr.getResponseHeader(A);}.bind(this));},check:function(A){if(!this.running){return true;
+}switch(this.options.link){case"cancel":this.cancel();return true;case"chain":this.chain(A.bind(this,Array.slice(arguments,1)));return false;}return false;
+},send:function(I){if(!this.check(arguments.callee,I)){return this;}this.running=true;var G=$type(I);if(G=="string"||G=="element"){I={data:I};}var D=this.options;
+I=$extend({data:D.data,url:D.url,method:D.method},I);var E=I.data,B=I.url,A=I.method;switch($type(E)){case"element":E=$(E).toQueryString();break;case"object":case"hash":E=Hash.toQueryString(E);
+}if(this.options.format){var H="format="+this.options.format;E=(E)?H+"&"+E:H;}if(this.options.emulation&&["put","delete"].contains(A)){var F="_method="+A;
+E=(E)?F+"&"+E:F;A="post";}if(this.options.urlEncoded&&A=="post"){var C=(this.options.encoding)?"; charset="+this.options.encoding:"";this.headers.set("Content-type","application/x-www-form-urlencoded"+C);
+}if(E&&A=="get"){B=B+(B.contains("?")?"&":"?")+E;E=null;}this.xhr.open(A.toUpperCase(),B,this.options.async);this.xhr.onreadystatechange=this.onStateChange.bind(this);
+this.headers.each(function(K,J){if(!$try(function(){this.xhr.setRequestHeader(J,K);return true;}.bind(this))){this.fireEvent("exception",[J,K]);}},this);
+this.fireEvent("request");this.xhr.send(E);if(!this.options.async){this.onStateChange();}return this;},cancel:function(){if(!this.running){return this;
+}this.running=false;this.xhr.abort();this.xhr.onreadystatechange=$empty;this.xhr=new Browser.Request();this.fireEvent("cancel");return this;}});(function(){var A={};
+["get","post","put","delete","GET","POST","PUT","DELETE"].each(function(B){A[B]=function(){var C=Array.link(arguments,{url:String.type,data:$defined});
+return this.send($extend(C,{method:B.toLowerCase()}));};});Request.implement(A);})();Element.Properties.send={set:function(A){var B=this.retrieve("send");
+if(B){B.cancel();}return this.eliminate("send").store("send:options",$extend({data:this,link:"cancel",method:this.get("method")||"post",url:this.get("action")},A));
+},get:function(A){if(A||!this.retrieve("send")){if(A||!this.retrieve("send:options")){this.set("send",A);}this.store("send",new Request(this.retrieve("send:options")));
+}return this.retrieve("send");}};Element.implement({send:function(A){var B=this.get("send");B.send({data:this,url:A||B.options.url});return this;}});Request.HTML=new Class({Extends:Request,options:{update:false,evalScripts:true,filter:false},processHTML:function(C){var B=C.match(/<body[^>]*>([\s\S]*?)<\/body>/i);
+C=(B)?B[1]:C;var A=new Element("div");return $try(function(){var D="<root>"+C+"</root>",G;if(Browser.Engine.trident){G=new ActiveXObject("Microsoft.XMLDOM");
+G.async=false;G.loadXML(D);}else{G=new DOMParser().parseFromString(D,"text/xml");}D=G.getElementsByTagName("root")[0];for(var F=0,E=D.childNodes.length;
+F<E;F++){var H=Element.clone(D.childNodes[F],true,true);if(H){A.grab(H);}}return A;})||A.set("html",C);},success:function(D){var C=this.options,B=this.response;
+B.html=D.stripScripts(function(E){B.javascript=E;});var A=this.processHTML(B.html);B.tree=A.childNodes;B.elements=A.getElements("*");if(C.filter){B.tree=B.elements.filter(C.filter);
+}if(C.update){$(C.update).empty().adopt(B.tree);}if(C.evalScripts){$exec(B.javascript);}this.onSuccess(B.tree,B.elements,B.html,B.javascript);}});Element.Properties.load={set:function(A){var B=this.retrieve("load");
+if(B){send.cancel();}return this.eliminate("load").store("load:options",$extend({data:this,link:"cancel",update:this,method:"get"},A));},get:function(A){if(A||!this.retrieve("load")){if(A||!this.retrieve("load:options")){this.set("load",A);
+}this.store("load",new Request.HTML(this.retrieve("load:options")));}return this.retrieve("load");}};Element.implement({load:function(){this.get("load").send(Array.link(arguments,{data:Object.type,url:String.type}));
+return this;}});Request.JSON=new Class({Extends:Request,options:{secure:true},initialize:function(A){this.parent(A);this.headers.extend({Accept:"application/json","X-Request":"JSON"});
+},success:function(A){this.response.json=JSON.decode(A,this.options.secure);this.onSuccess(this.response.json,A);}});
+
+
+//MooTools More, <http://mootools.net/more>. Copyright (c) 2006-2008 Valerio Proietti, <http://mad4milk.net>, MIT Style License.
+
+Fx.Slide=new Class({Extends:Fx,options:{mode:"vertical"},initialize:function(B,A){this.addEvent("complete",function(){this.open=(this.wrapper["offset"+this.layout.capitalize()]!=0);
+if(this.open&&Browser.Engine.webkit419){this.element.dispose().inject(this.wrapper);}},true);this.element=this.subject=$(B);this.parent(A);var C=this.element.retrieve("wrapper");
+this.wrapper=C||new Element("div",{styles:$extend(this.element.getStyles("margin","position"),{overflow:"hidden"})}).wraps(this.element);this.element.store("wrapper",this.wrapper).setStyle("margin",0);
+this.now=[];this.open=true;},vertical:function(){this.margin="margin-top";this.layout="height";this.offset=this.element.offsetHeight;},horizontal:function(){this.margin="margin-left";
+this.layout="width";this.offset=this.element.offsetWidth;},set:function(A){this.element.setStyle(this.margin,A[0]);this.wrapper.setStyle(this.layout,A[1]);
+return this;},compute:function(E,D,C){var B=[];var A=2;A.times(function(F){B[F]=Fx.compute(E[F],D[F],C);});return B;},start:function(B,E){if(!this.check(arguments.callee,B,E)){return this;
+}this[E||this.options.mode]();var D=this.element.getStyle(this.margin).toInt();var C=this.wrapper.getStyle(this.layout).toInt();var A=[[D,C],[0,this.offset]];
+var G=[[D,C],[-this.offset,0]];var F;switch(B){case"in":F=A;break;case"out":F=G;break;case"toggle":F=(this.wrapper["offset"+this.layout.capitalize()]==0)?A:G;
+}return this.parent(F[0],F[1]);},slideIn:function(A){return this.start("in",A);},slideOut:function(A){return this.start("out",A);},hide:function(A){this[A||this.options.mode]();
+this.open=false;return this.set([-this.offset,0]);},show:function(A){this[A||this.options.mode]();this.open=true;return this.set([0,this.offset]);},toggle:function(A){return this.start("toggle",A);
+}});Element.Properties.slide={set:function(B){var A=this.retrieve("slide");if(A){A.cancel();}return this.eliminate("slide").store("slide:options",$extend({link:"cancel"},B));
+},get:function(A){if(A||!this.retrieve("slide")){if(A||!this.retrieve("slide:options")){this.set("slide",A);}this.store("slide",new Fx.Slide(this,this.retrieve("slide:options")));
+}return this.retrieve("slide");}};Element.implement({slide:function(D,E){D=D||"toggle";var B=this.get("slide"),A;switch(D){case"hide":B.hide(E);break;case"show":B.show(E);
+break;case"toggle":var C=this.retrieve("slide:flag",B.open);B[(C)?"slideOut":"slideIn"](E);this.store("slide:flag",!C);A=true;break;default:B.start(D,E);
+}if(!A){this.eliminate("slide:flag");}return this;}});Fx.Scroll=new Class({Extends:Fx,options:{offset:{x:0,y:0},wheelStops:true},initialize:function(B,A){this.element=this.subject=$(B);
+this.parent(A);var D=this.cancel.bind(this,false);if($type(this.element)!="element"){this.element=$(this.element.getDocument().body);}var C=this.element;
+if(this.options.wheelStops){this.addEvent("start",function(){C.addEvent("mousewheel",D);},true);this.addEvent("complete",function(){C.removeEvent("mousewheel",D);
+},true);}},set:function(){var A=Array.flatten(arguments);this.element.scrollTo(A[0],A[1]);},compute:function(E,D,C){var B=[];var A=2;A.times(function(F){B.push(Fx.compute(E[F],D[F],C));
+});return B;},start:function(C,H){if(!this.check(arguments.callee,C,H)){return this;}var E=this.element.getSize(),F=this.element.getScrollSize();var B=this.element.getScroll(),D={x:C,y:H};
+for(var G in D){var A=F[G]-E[G];if($chk(D[G])){D[G]=($type(D[G])=="number")?D[G].limit(0,A):A;}else{D[G]=B[G];}D[G]+=this.options.offset[G];}return this.parent([B.x,B.y],[D.x,D.y]);
+},toTop:function(){return this.start(false,0);},toLeft:function(){return this.start(0,false);},toRight:function(){return this.start("right",false);},toBottom:function(){return this.start(false,"bottom");
+},toElement:function(B){var A=$(B).getPosition(this.element);return this.start(A.x,A.y);}});Fx.Elements=new Class({Extends:Fx.CSS,initialize:function(B,A){this.elements=this.subject=$$(B);
+this.parent(A);},compute:function(G,H,I){var C={};for(var D in G){var A=G[D],E=H[D],F=C[D]={};for(var B in A){F[B]=this.parent(A[B],E[B],I);}}return C;
+},set:function(B){for(var C in B){var A=B[C];for(var D in A){this.render(this.elements[C],D,A[D],this.options.unit);}}return this;},start:function(C){if(!this.check(arguments.callee,C)){return this;
+}var H={},I={};for(var D in C){var F=C[D],A=H[D]={},G=I[D]={};for(var B in F){var E=this.prepare(this.elements[D],B,F[B]);A[B]=E.from;G[B]=E.to;}}return this.parent(H,I);
+}});var Drag=new Class({Implements:[Events,Options],options:{snap:6,unit:"px",grid:false,style:true,limit:false,handle:false,invert:false,preventDefault:false,modifiers:{x:"left",y:"top"}},initialize:function(){var B=Array.link(arguments,{options:Object.type,element:$defined});
+this.element=$(B.element);this.document=this.element.getDocument();this.setOptions(B.options||{});var A=$type(this.options.handle);this.handles=(A=="array"||A=="collection")?$$(this.options.handle):$(this.options.handle)||this.element;
+this.mouse={now:{},pos:{}};this.value={start:{},now:{}};this.selection=(Browser.Engine.trident)?"selectstart":"mousedown";this.bound={start:this.start.bind(this),check:this.check.bind(this),drag:this.drag.bind(this),stop:this.stop.bind(this),cancel:this.cancel.bind(this),eventStop:$lambda(false)};
+this.attach();},attach:function(){this.handles.addEvent("mousedown",this.bound.start);return this;},detach:function(){this.handles.removeEvent("mousedown",this.bound.start);
+return this;},start:function(C){if(this.options.preventDefault){C.preventDefault();}this.fireEvent("beforeStart",this.element);this.mouse.start=C.page;
+var A=this.options.limit;this.limit={x:[],y:[]};for(var D in this.options.modifiers){if(!this.options.modifiers[D]){continue;}if(this.options.style){this.value.now[D]=this.element.getStyle(this.options.modifiers[D]).toInt();
+}else{this.value.now[D]=this.element[this.options.modifiers[D]];}if(this.options.invert){this.value.now[D]*=-1;}this.mouse.pos[D]=C.page[D]-this.value.now[D];
+if(A&&A[D]){for(var B=2;B--;B){if($chk(A[D][B])){this.limit[D][B]=$lambda(A[D][B])();}}}}if($type(this.options.grid)=="number"){this.options.grid={x:this.options.grid,y:this.options.grid};
+}this.document.addEvents({mousemove:this.bound.check,mouseup:this.bound.cancel});this.document.addEvent(this.selection,this.bound.eventStop);},check:function(A){if(this.options.preventDefault){A.preventDefault();
+}var B=Math.round(Math.sqrt(Math.pow(A.page.x-this.mouse.start.x,2)+Math.pow(A.page.y-this.mouse.start.y,2)));if(B>this.options.snap){this.cancel();this.document.addEvents({mousemove:this.bound.drag,mouseup:this.bound.stop});
+this.fireEvent("start",this.element).fireEvent("snap",this.element);}},drag:function(A){if(this.options.preventDefault){A.preventDefault();}this.mouse.now=A.page;
+for(var B in this.options.modifiers){if(!this.options.modifiers[B]){continue;}this.value.now[B]=this.mouse.now[B]-this.mouse.pos[B];if(this.options.invert){this.value.now[B]*=-1;
+}if(this.options.limit&&this.limit[B]){if($chk(this.limit[B][1])&&(this.value.now[B]>this.limit[B][1])){this.value.now[B]=this.limit[B][1];}else{if($chk(this.limit[B][0])&&(this.value.now[B]<this.limit[B][0])){this.value.now[B]=this.limit[B][0];
+}}}if(this.options.grid[B]){this.value.now[B]-=(this.value.now[B]%this.options.grid[B]);}if(this.options.style){this.element.setStyle(this.options.modifiers[B],this.value.now[B]+this.options.unit);
+}else{this.element[this.options.modifiers[B]]=this.value.now[B];}}this.fireEvent("drag",this.element);},cancel:function(A){this.document.removeEvent("mousemove",this.bound.check);
+this.document.removeEvent("mouseup",this.bound.cancel);if(A){this.document.removeEvent(this.selection,this.bound.eventStop);this.fireEvent("cancel",this.element);
+}},stop:function(A){this.document.removeEvent(this.selection,this.bound.eventStop);this.document.removeEvent("mousemove",this.bound.drag);this.document.removeEvent("mouseup",this.bound.stop);
+if(A){this.fireEvent("complete",this.element);}}});Element.implement({makeResizable:function(A){return new Drag(this,$merge({modifiers:{x:"width",y:"height"}},A));
+}});Drag.Move=new Class({Extends:Drag,options:{droppables:[],container:false},initialize:function(C,B){this.parent(C,B);this.droppables=$$(this.options.droppables);
+this.container=$(this.options.container);if(this.container&&$type(this.container)!="element"){this.container=$(this.container.getDocument().body);}C=this.element;
+var D=C.getStyle("position");var A=(D!="static")?D:"absolute";if(C.getStyle("left")=="auto"||C.getStyle("top")=="auto"){C.position(C.getPosition(C.offsetParent));
+}C.setStyle("position",A);this.addEvent("start",function(){this.checkDroppables();},true);},start:function(B){if(this.container){var D=this.element,J=this.container,E=J.getCoordinates(D.offsetParent),F={},A={};
+["top","right","bottom","left"].each(function(K){F[K]=J.getStyle("padding-"+K).toInt();A[K]=D.getStyle("margin-"+K).toInt();},this);var C=D.offsetWidth+A.left+A.right,I=D.offsetHeight+A.top+A.bottom;
+var H=[E.left+F.left,E.right-F.right-C];var G=[E.top+F.top,E.bottom-F.bottom-I];this.options.limit={x:H,y:G};}this.parent(B);},checkAgainst:function(B){B=B.getCoordinates();
+var A=this.mouse.now;return(A.x>B.left&&A.x<B.right&&A.y<B.bottom&&A.y>B.top);},checkDroppables:function(){var A=this.droppables.filter(this.checkAgainst,this).getLast();
+if(this.overed!=A){if(this.overed){this.fireEvent("leave",[this.element,this.overed]);}if(A){this.overed=A;this.fireEvent("enter",[this.element,A]);}else{this.overed=null;
+}}},drag:function(A){this.parent(A);if(this.droppables.length){this.checkDroppables();}},stop:function(A){this.checkDroppables();this.fireEvent("drop",[this.element,this.overed]);
+this.overed=null;return this.parent(A);}});Element.implement({makeDraggable:function(A){return new Drag.Move(this,A);}});Hash.Cookie=new Class({Extends:Cookie,options:{autoSave:true},initialize:function(B,A){this.parent(B,A);
+this.load();},save:function(){var A=JSON.encode(this.hash);if(!A||A.length>4096){return false;}if(A=="{}"){this.dispose();}else{this.write(A);}return true;
+},load:function(){this.hash=new Hash(JSON.decode(this.read(),true));return this;}});Hash.Cookie.implement((function(){var A={};Hash.each(Hash.prototype,function(C,B){A[B]=function(){var D=C.apply(this.hash,arguments);
+if(this.options.autoSave){this.save();}return D;};});return A;})());var Color=new Native({initialize:function(B,C){if(arguments.length>=3){C="rgb";B=Array.slice(arguments,0,3);
+}else{if(typeof B=="string"){if(B.match(/rgb/)){B=B.rgbToHex().hexToRgb(true);}else{if(B.match(/hsb/)){B=B.hsbToRgb();}else{B=B.hexToRgb(true);}}}}C=C||"rgb";
+switch(C){case"hsb":var A=B;B=B.hsbToRgb();B.hsb=A;break;case"hex":B=B.hexToRgb(true);break;}B.rgb=B.slice(0,3);B.hsb=B.hsb||B.rgbToHsb();B.hex=B.rgbToHex();
+return $extend(B,this);}});Color.implement({mix:function(){var A=Array.slice(arguments);var C=($type(A.getLast())=="number")?A.pop():50;var B=this.slice();
+A.each(function(D){D=new Color(D);for(var E=0;E<3;E++){B[E]=Math.round((B[E]/100*(100-C))+(D[E]/100*C));}});return new Color(B,"rgb");},invert:function(){return new Color(this.map(function(A){return 255-A;
+}));},setHue:function(A){return new Color([A,this.hsb[1],this.hsb[2]],"hsb");},setSaturation:function(A){return new Color([this.hsb[0],A,this.hsb[2]],"hsb");
+},setBrightness:function(A){return new Color([this.hsb[0],this.hsb[1],A],"hsb");}});function $RGB(C,B,A){return new Color([C,B,A],"rgb");}function $HSB(C,B,A){return new Color([C,B,A],"hsb");
+}function $HEX(A){return new Color(A,"hex");}Array.implement({rgbToHsb:function(){var B=this[0],C=this[1],J=this[2];var G,F,H;var I=Math.max(B,C,J),E=Math.min(B,C,J);
+var K=I-E;H=I/255;F=(I!=0)?K/I:0;if(F==0){G=0;}else{var D=(I-B)/K;var A=(I-C)/K;var L=(I-J)/K;if(B==I){G=L-A;}else{if(C==I){G=2+D-L;}else{G=4+A-D;}}G/=6;
+if(G<0){G++;}}return[Math.round(G*360),Math.round(F*100),Math.round(H*100)];},hsbToRgb:function(){var C=Math.round(this[2]/100*255);if(this[1]==0){return[C,C,C];
+}else{var A=this[0]%360;var E=A%60;var F=Math.round((this[2]*(100-this[1]))/10000*255);var D=Math.round((this[2]*(6000-this[1]*E))/600000*255);var B=Math.round((this[2]*(6000-this[1]*(60-E)))/600000*255);
+switch(Math.floor(A/60)){case 0:return[C,B,F];case 1:return[D,C,F];case 2:return[F,C,B];case 3:return[F,D,C];case 4:return[B,F,C];case 5:return[C,F,D];
+}}return false;}});String.implement({rgbToHsb:function(){var A=this.match(/\d{1,3}/g);return(A)?hsb.rgbToHsb():null;},hsbToRgb:function(){var A=this.match(/\d{1,3}/g);
+return(A)?A.hsbToRgb():null;}});var Group=new Class({initialize:function(){this.instances=Array.flatten(arguments);this.events={};this.checker={};},addEvent:function(B,A){this.checker[B]=this.checker[B]||{};
+this.events[B]=this.events[B]||[];if(this.events[B].contains(A)){return false;}else{this.events[B].push(A);}this.instances.each(function(C,D){C.addEvent(B,this.check.bind(this,[B,C,D]));
+},this);return this;},check:function(C,A,B){this.checker[C][B]=true;var D=this.instances.every(function(F,E){return this.checker[C][E]||false;},this);if(!D){return ;
+}this.checker[C]={};this.events[C].each(function(E){E.call(this,this.instances,A);},this);}});var Asset=new Hash({javascript:function(F,D){D=$extend({onload:$empty,document:document,check:$lambda(true)},D);
+var B=new Element("script",{src:F,type:"text/javascript"});var E=D.onload.bind(B),A=D.check,G=D.document;delete D.onload;delete D.check;delete D.document;
+B.addEvents({load:E,readystatechange:function(){if(["loaded","complete"].contains(this.readyState)){E();}}}).setProperties(D);if(Browser.Engine.webkit419){var C=(function(){if(!$try(A)){return ;
+}$clear(C);E();}).periodical(50);}return B.inject(G.head);},css:function(B,A){return new Element("link",$merge({rel:"stylesheet",media:"screen",type:"text/css",href:B},A)).inject(document.head);
+},image:function(C,B){B=$merge({onload:$empty,onabort:$empty,onerror:$empty},B);var D=new Image();var A=$(D)||new Element("img");["load","abort","error"].each(function(E){var F="on"+E;
+var G=B[F];delete B[F];D[F]=function(){if(!D){return ;}if(!A.parentNode){A.width=D.width;A.height=D.height;}D=D.onload=D.onabort=D.onerror=null;G.delay(1,A,A);
+A.fireEvent(E,A,1);};});D.src=A.src=C;if(D&&D.complete){D.onload.delay(1);}return A.setProperties(B);},images:function(D,C){C=$merge({onComplete:$empty,onProgress:$empty},C);
+if(!D.push){D=[D];}var A=[];var B=0;D.each(function(F){var E=new Asset.image(F,{onload:function(){C.onProgress.call(this,B,D.indexOf(F));B++;if(B==D.length){C.onComplete();
+}}});A.push(E);});return new Elements(A);}});var Sortables=new Class({Implements:[Events,Options],options:{snap:4,opacity:1,clone:false,revert:false,handle:false,constrain:false},initialize:function(A,B){this.setOptions(B);
+this.elements=[];this.lists=[];this.idle=true;this.addLists($$($(A)||A));if(!this.options.clone){this.options.revert=false;}if(this.options.revert){this.effect=new Fx.Morph(null,$merge({duration:250,link:"cancel"},this.options.revert));
+}},attach:function(){this.addLists(this.lists);return this;},detach:function(){this.lists=this.removeLists(this.lists);return this;},addItems:function(){Array.flatten(arguments).each(function(A){this.elements.push(A);
+var B=A.retrieve("sortables:start",this.start.bindWithEvent(this,A));(this.options.handle?A.getElement(this.options.handle)||A:A).addEvent("mousedown",B);
+},this);return this;},addLists:function(){Array.flatten(arguments).each(function(A){this.lists.push(A);this.addItems(A.getChildren());},this);return this;
+},removeItems:function(){var A=[];Array.flatten(arguments).each(function(B){A.push(B);this.elements.erase(B);var C=B.retrieve("sortables:start");(this.options.handle?B.getElement(this.options.handle)||B:B).removeEvent("mousedown",C);
+},this);return $$(A);},removeLists:function(){var A=[];Array.flatten(arguments).each(function(B){A.push(B);this.lists.erase(B);this.removeItems(B.getChildren());
+},this);return $$(A);},getClone:function(B,A){if(!this.options.clone){return new Element("div").inject(document.body);}if($type(this.options.clone)=="function"){return this.options.clone.call(this,B,A,this.list);
+}return A.clone(true).setStyles({margin:"0px",position:"absolute",visibility:"hidden",width:A.getStyle("width")}).inject(this.list).position(A.getPosition(A.getOffsetParent()));
+},getDroppables:function(){var A=this.list.getChildren();if(!this.options.constrain){A=this.lists.concat(A).erase(this.list);}return A.erase(this.clone).erase(this.element);
+},insert:function(C,B){var A="inside";if(this.lists.contains(B)){this.list=B;this.drag.droppables=this.getDroppables();}else{A=this.element.getAllPrevious().contains(B)?"before":"after";
+}this.element.inject(B,A);this.fireEvent("sort",[this.element,this.clone]);},start:function(B,A){if(!this.idle){return ;}this.idle=false;this.element=A;
+this.opacity=A.get("opacity");this.list=A.getParent();this.clone=this.getClone(B,A);this.drag=new Drag.Move(this.clone,{snap:this.options.snap,container:this.options.constrain&&this.element.getParent(),droppables:this.getDroppables(),onSnap:function(){B.stop();
+this.clone.setStyle("visibility","visible");this.element.set("opacity",this.options.opacity||0);this.fireEvent("start",[this.element,this.clone]);}.bind(this),onEnter:this.insert.bind(this),onCancel:this.reset.bind(this),onComplete:this.end.bind(this)});
+this.clone.inject(this.element,"before");this.drag.start(B);},end:function(){this.drag.detach();this.element.set("opacity",this.opacity);if(this.effect){var A=this.element.getStyles("width","height");
+var B=this.clone.computePosition(this.element.getPosition(this.clone.offsetParent));this.effect.element=this.clone;this.effect.start({top:B.top,left:B.left,width:A.width,height:A.height,opacity:0.25}).chain(this.reset.bind(this));
+}else{this.reset();}},reset:function(){this.idle=true;this.clone.destroy();this.fireEvent("complete",this.element);},serialize:function(){var C=Array.link(arguments,{modifier:Function.type,index:$defined});
+var B=this.lists.map(function(D){return D.getChildren().map(C.modifier||function(E){return E.get("id");},this);},this);var A=C.index;if(this.lists.length==1){A=0;
+}return $chk(A)&&A>=0&&A<this.lists.length?B[A]:B;}});var Tips=new Class({Implements:[Events,Options],options:{onShow:function(A){A.setStyle("visibility","visible");
+},onHide:function(A){A.setStyle("visibility","hidden");},showDelay:100,hideDelay:100,className:null,offsets:{x:16,y:16},fixed:false},initialize:function(){var C=Array.link(arguments,{options:Object.type,elements:$defined});
+this.setOptions(C.options||null);this.tip=new Element("div").inject(document.body);if(this.options.className){this.tip.addClass(this.options.className);
+}var B=new Element("div",{"class":"tip-top"}).inject(this.tip);this.container=new Element("div",{"class":"tip"}).inject(this.tip);var A=new Element("div",{"class":"tip-bottom"}).inject(this.tip);
+this.tip.setStyles({position:"absolute",top:0,left:0,visibility:"hidden"});if(C.elements){this.attach(C.elements);}},attach:function(A){$$(A).each(function(D){var G=D.retrieve("tip:title",D.get("title"));
+var F=D.retrieve("tip:text",D.get("rel")||D.get("href"));var E=D.retrieve("tip:enter",this.elementEnter.bindWithEvent(this,D));var C=D.retrieve("tip:leave",this.elementLeave.bindWithEvent(this,D));
+D.addEvents({mouseenter:E,mouseleave:C});if(!this.options.fixed){var B=D.retrieve("tip:move",this.elementMove.bindWithEvent(this,D));D.addEvent("mousemove",B);
+}D.store("tip:native",D.get("title"));D.erase("title");},this);return this;},detach:function(A){$$(A).each(function(C){C.removeEvent("mouseenter",C.retrieve("tip:enter")||$empty);
+C.removeEvent("mouseleave",C.retrieve("tip:leave")||$empty);C.removeEvent("mousemove",C.retrieve("tip:move")||$empty);C.eliminate("tip:enter").eliminate("tip:leave").eliminate("tip:move");
+var B=C.retrieve("tip:native");if(B){C.set("title",B);}});return this;},elementEnter:function(B,A){$A(this.container.childNodes).each(Element.dispose);
+var D=A.retrieve("tip:title");if(D){this.titleElement=new Element("div",{"class":"tip-title"}).inject(this.container);this.fill(this.titleElement,D);}var C=A.retrieve("tip:text");
+if(C){this.textElement=new Element("div",{"class":"tip-text"}).inject(this.container);this.fill(this.textElement,C);}this.timer=$clear(this.timer);this.timer=this.show.delay(this.options.showDelay,this);
+this.position((!this.options.fixed)?B:{page:A.getPosition()});},elementLeave:function(A){$clear(this.timer);this.timer=this.hide.delay(this.options.hideDelay,this);
+},elementMove:function(A){this.position(A);},position:function(D){var B=window.getSize(),A=window.getScroll();var E={x:this.tip.offsetWidth,y:this.tip.offsetHeight};
+var C={x:"left",y:"top"};for(var F in C){var G=D.page[F]+this.options.offsets[F];if((G+E[F]-A[F])>B[F]){G=D.page[F]-this.options.offsets[F]-E[F];}this.tip.setStyle(C[F],G);
+}},fill:function(A,B){(typeof B=="string")?A.set("html",B):A.adopt(B);},show:function(){this.fireEvent("show",this.tip);},hide:function(){this.fireEvent("hide",this.tip);
+}});var SmoothScroll=new Class({Extends:Fx.Scroll,initialize:function(B,C){C=C||document;var E=C.getDocument(),D=C.getWindow();this.parent(E,B);this.links=(this.options.links)?$$(this.options.links):$$(E.links);
+var A=D.location.href.match(/^[^#]*/)[0]+"#";this.links.each(function(G){if(G.href.indexOf(A)!=0){return ;}var F=G.href.substr(A.length);if(F&&$(F)){this.useLink(G,F);
+}},this);if(!Browser.Engine.webkit419){this.addEvent("complete",function(){D.location.hash=this.anchor;},true);}},useLink:function(B,A){B.addEvent("click",function(C){this.anchor=A;
+this.toElement(A);C.stop();}.bind(this));}});var Slider=new Class({Implements:[Events,Options],options:{onTick:function(A){if(this.options.snap){A=this.toPosition(this.step);
+}this.knob.setStyle(this.property,A);},snap:false,offset:0,range:false,wheel:false,steps:100,mode:"horizontal"},initialize:function(E,A,D){this.setOptions(D);
+this.element=$(E);this.knob=$(A);this.previousChange=this.previousEnd=this.step=-1;this.element.addEvent("mousedown",this.clickedElement.bind(this));if(this.options.wheel){this.element.addEvent("mousewheel",this.scrolledElement.bindWithEvent(this));
+}var F,B={},C={x:false,y:false};switch(this.options.mode){case"vertical":this.axis="y";this.property="top";F="offsetHeight";break;case"horizontal":this.axis="x";
+this.property="left";F="offsetWidth";}this.half=this.knob[F]/2;this.full=this.element[F]-this.knob[F]+(this.options.offset*2);this.min=$chk(this.options.range[0])?this.options.range[0]:0;
+this.max=$chk(this.options.range[1])?this.options.range[1]:this.options.steps;this.range=this.max-this.min;this.steps=this.options.steps||this.full;this.stepSize=Math.abs(this.range)/this.steps;
+this.stepWidth=this.stepSize*this.full/Math.abs(this.range);this.knob.setStyle("position","relative").setStyle(this.property,-this.options.offset);C[this.axis]=this.property;
+B[this.axis]=[-this.options.offset,this.full-this.options.offset];this.drag=new Drag(this.knob,{snap:0,limit:B,modifiers:C,onDrag:this.draggedKnob.bind(this),onStart:this.draggedKnob.bind(this),onComplete:function(){this.draggedKnob();
+this.end();}.bind(this)});if(this.options.snap){this.drag.options.grid=Math.ceil(this.stepWidth);this.drag.options.limit[this.axis][1]=this.full;}},set:function(A){if(!((this.range>0)^(A<this.min))){A=this.min;
+}if(!((this.range>0)^(A>this.max))){A=this.max;}this.step=Math.round(A);this.checkStep();this.end();this.fireEvent("tick",this.toPosition(this.step));return this;
+},clickedElement:function(C){var B=this.range<0?-1:1;var A=C.page[this.axis]-this.element.getPosition()[this.axis]-this.half;A=A.limit(-this.options.offset,this.full-this.options.offset);
+this.step=Math.round(this.min+B*this.toStep(A));this.checkStep();this.end();this.fireEvent("tick",A);},scrolledElement:function(A){var B=(this.options.mode=="horizontal")?(A.wheel<0):(A.wheel>0);
+this.set(B?this.step-this.stepSize:this.step+this.stepSize);A.stop();},draggedKnob:function(){var B=this.range<0?-1:1;var A=this.drag.value.now[this.axis];
+A=A.limit(-this.options.offset,this.full-this.options.offset);this.step=Math.round(this.min+B*this.toStep(A));this.checkStep();},checkStep:function(){if(this.previousChange!=this.step){this.previousChange=this.step;
+this.fireEvent("change",this.step);}},end:function(){if(this.previousEnd!==this.step){this.previousEnd=this.step;this.fireEvent("complete",this.step+"");
+}},toStep:function(A){var B=(A+this.options.offset)*this.stepSize/this.full*this.steps;return this.options.steps?Math.round(B-=B%this.stepSize):B;},toPosition:function(A){return(this.full*Math.abs(this.min-A))/(this.steps*this.stepSize)-this.options.offset;
+}});var Scroller=new Class({Implements:[Events,Options],options:{area:20,velocity:1,onChange:function(A,B){this.element.scrollTo(A,B);}},initialize:function(B,A){this.setOptions(A);
+this.element=$(B);this.listener=($type(this.element)!="element")?$(this.element.getDocument().body):this.element;this.timer=null;this.coord=this.getCoords.bind(this);
+},start:function(){this.listener.addEvent("mousemove",this.coord);},stop:function(){this.listener.removeEvent("mousemove",this.coord);this.timer=$clear(this.timer);
+},getCoords:function(A){this.page=(this.listener.get("tag")=="body")?A.client:A.page;if(!this.timer){this.timer=this.scroll.periodical(50,this);}},scroll:function(){var B=this.element.getSize(),A=this.element.getScroll(),E=this.element.getPosition(),D={x:0,y:0};
+for(var C in this.page){if(this.page[C]<(this.options.area+E[C])&&A[C]!=0){D[C]=(this.page[C]-this.options.area-E[C])*this.options.velocity;}else{if(this.page[C]+this.options.area>(B[C]+E[C])&&B[C]+B[C]!=A[C]){D[C]=(this.page[C]-B[C]+this.options.area-E[C])*this.options.velocity;
+}}}if(D.y||D.x){this.fireEvent("change",[A.x+D.x,A.y+D.y]);}}});var Accordion=new Class({Extends:Fx.Elements,options:{display:0,show:false,height:true,width:false,opacity:true,fixedHeight:false,fixedWidth:false,wait:false,alwaysHide:false},initialize:function(){var C=Array.link(arguments,{container:Element.type,options:Object.type,togglers:$defined,elements:$defined});
+this.parent(C.elements,C.options);this.togglers=$$(C.togglers);this.container=$(C.container);this.previous=-1;if(this.options.alwaysHide){this.options.wait=true;
+}if($chk(this.options.show)){this.options.display=false;this.previous=this.options.show;}if(this.options.start){this.options.display=false;this.options.show=false;
+}this.effects={};if(this.options.opacity){this.effects.opacity="fullOpacity";}if(this.options.width){this.effects.width=this.options.fixedWidth?"fullWidth":"offsetWidth";
+}if(this.options.height){this.effects.height=this.options.fixedHeight?"fullHeight":"scrollHeight";}for(var B=0,A=this.togglers.length;B<A;B++){this.addSection(this.togglers[B],this.elements[B]);
+}this.elements.each(function(E,D){if(this.options.show===D){this.fireEvent("active",[this.togglers[D],E]);}else{for(var F in this.effects){E.setStyle(F,0);
+}}},this);if($chk(this.options.display)){this.display(this.options.display);}},addSection:function(E,C,G){E=$(E);C=$(C);var F=this.togglers.contains(E);
+var B=this.togglers.length;this.togglers.include(E);this.elements.include(C);if(B&&(!F||G)){G=$pick(G,B-1);E.inject(this.togglers[G],"before");C.inject(E,"after");
+}else{if(this.container&&!F){E.inject(this.container);C.inject(this.container);}}var A=this.togglers.indexOf(E);E.addEvent("click",this.display.bind(this,A));
+if(this.options.height){C.setStyles({"padding-top":0,"border-top":"none","padding-bottom":0,"border-bottom":"none"});}if(this.options.width){C.setStyles({"padding-left":0,"border-left":"none","padding-right":0,"border-right":"none"});
+}C.fullOpacity=1;if(this.options.fixedWidth){C.fullWidth=this.options.fixedWidth;}if(this.options.fixedHeight){C.fullHeight=this.options.fixedHeight;}C.setStyle("overflow","hidden");
+if(!F){for(var D in this.effects){C.setStyle(D,0);}}return this;},display:function(A){A=($type(A)=="element")?this.elements.indexOf(A):A;if((this.timer&&this.options.wait)||(A===this.previous&&!this.options.alwaysHide)){return this;
+}this.previous=A;var B={};this.elements.each(function(E,D){B[D]={};var C=(D!=A)||(this.options.alwaysHide&&(E.offsetHeight>0));this.fireEvent(C?"background":"active",[this.togglers[D],E]);
+for(var F in this.effects){B[D][F]=C?0:E[this.effects[F]];}},this);return this.start(B);}});
diff --git a/common/platforms.inc b/common/platforms.inc
new file mode 100644 (file)
index 0000000..931c0a4
--- /dev/null
@@ -0,0 +1,51 @@
+<ul>
+       <li>
+               AIX
+               (3.2.5, IBM XL C Compiler)
+       </li>
+       <li>
+               A/UX
+               (3.x, original Apple C Compiler oder GNU C)
+       </li>
+       <li>
+               <a href="http://www.freebsd.org/">FreeBSD</a>
+               (4.5/i386, GNU C)
+       </li>
+       <li>
+               <a href="http://www.hp.com/">HP-UX</a>
+               (10.20, GNU C)
+       </li>
+       <li>
+               <a href="http://www.hp.com/">HP-UX</a>
+               (9.10/m68k, HP-UX cc)
+       </li>
+       <li>
+               IRIX
+               (6.5, SGI MIPSpro C 7.30)
+       </li>
+       <li>
+               <a href="http://www.linux.org/">Linux</a>
+               (2.2.x/i386, 2.4.x/i386 und 2.4.x/hppa, GNU C)
+       </li>
+       <li>
+               <a href="http://www.apple.com/macosx/">Mac OS X</a>
+               (10.x, GNU C 2.95.x/3.x/4.01)
+       </li>
+       <li>
+               <a href="http://www.netbsd.org/">NetBSD</a>
+               (1.5.2/i386 und 1.5.3/m68k, GNU C)
+       </li>
+       <li>
+               <a href="http://www.obenbsd.org/">OpenBSD</a>
+               (3.4/i386)
+       </li>
+       <li>
+               <a href="http://www.sun.com/">Solaris</a>
+               (2.5.1 und 2.6, GNU C)
+       </li>
+       <li>
+               Windows mit <a href="http://sources.redhat.com/cygwin/">Cygwin</a>
+               (GNU C)
+       </li>
+</ul>
+
diff --git a/common/slide.js b/common/slide.js
new file mode 100644 (file)
index 0000000..5896f93
--- /dev/null
@@ -0,0 +1,21 @@
+window.addEvent('domready', function() {
+       var status = {
+               'true': 'open',
+               'false': 'close'
+       };
+       
+       //-vertical
+
+       var myVerticalSlide = new Fx.Slide('vertical_slide').hide();
+
+       $('v_toggle').addEvent('click', function(e){
+               e.stop();
+               myVerticalSlide.toggle();
+       });
+       
+       // When Vertical Slide ends its transition, we check for its status
+       // note that complete will not affect 'hide' and 'show' methods
+       myVerticalSlide.addEvent('complete', function() {
+               $('vertical_status').set('html', status[myVerticalSlide.open]);
+       });
+});
diff --git a/common/styles.css b/common/styles.css
new file mode 100644 (file)
index 0000000..9dd0891
--- /dev/null
@@ -0,0 +1,135 @@
+html {
+       overflow-y: scroll;
+}
+body {
+       background-color: rgb(0,95,95);
+       font-family: "Trebuchet MS", sans-serif;
+}
+
+/* @group General */
+
+div#bodyBox {
+       min-width: 25em;
+       max-width: 55em;
+       margin: 3em auto;
+       border: 1px solid gray;
+       background-color: white;
+}
+
+/* @end */
+
+/* @group Header */
+
+div#sloganhead {
+       text-align: center;
+}
+div#sloganhead p {
+       margin: 0.2em 0 1em 0;
+       color: rgb(150,150,150);
+}
+
+h1.titel {
+       font-size: 1.8em;
+       color: rgb(150,150,150);
+       margin-bottom:0;
+}
+
+h1.titel span {
+       color: #005555;
+}
+
+/* @end */
+
+/* @group Navigation */
+
+ul.nav {
+       margin: 0 auto;
+       padding: 0;
+       width: 51em;
+       text-indent: 0;
+}
+
+ul.nav li {
+       margin: 0;
+       padding: 0;
+       text-indent: 0;
+       background-image: url(bevel.gif);
+       background-repeat: repeat-x;
+       background-position: center;
+       width: 8em;
+       text-align: center;
+       list-style-type: none;
+       border: 1px solid #005555;
+       margin: 0.1em 0.1em;
+       float:left;
+}
+
+ul.nav li a {
+       font-family: sans-serif;
+       color: rgb(230,230,230);
+       display: block;
+       padding: 0.1em;
+       text-decoration: none;
+}
+
+ul.nav li a:link {
+}
+
+ul.nav li a:visited {
+}
+
+ul.nav li a:hover {
+       color: white;
+}
+
+/* @end */
+
+/* @group Content */
+
+h2,h3,h4 {
+       margin: 1.5em 0 0.2em 0;
+}
+
+div#content {
+       margin: 0.2em 3em;
+}
+
+a {
+       text-decoration: underline;
+       color: #005555;
+}
+
+div#vertical_slide {
+       border: 1px solid gray;
+       padding: 1em;
+}
+div#preview samp {
+       font-family: Monaco,"Courier New", Courier, mono;
+       font-size: 0.9em;
+       color: rgb(65,65,65);
+       white-space: pre;
+}
+
+.btw {
+       border: 1px dotted silver;
+       padding: 1px 2px;
+}
+
+.security {
+       border: 1px solid silver;
+       padding: 1px 2px;
+       background-color: #fee;
+}
+
+/* @end */
+
+/* @group Footer */
+
+p#footer {
+       font-size: xx-small;
+       text-align: center;
+       margin-top: 5em;
+}
+
+/* @end */
+
diff --git a/common/valid-html401.gif b/common/valid-html401.gif
new file mode 100644 (file)
index 0000000..a444440
Binary files /dev/null and b/common/valid-html401.gif differ
index 4abfca533418a77181433c8c7d97c12a35bd7874..8d730bf3e7846bb77231b6885ad56756677cab60 100644 (file)
                                -- ChangeLog --
 
 
-ngIRCd Release 13
+ngIRCd Release 13 (2008-12-25)
+
+  - Updated documentation, especially doc/Services.txt and doc/SSL.txt.
+  - Make the test suite work on OpenSolaris.
 
   ngIRCd 13~rc1 (2008-11-21):
   - New version numer scheme :-)
index 4d2a89e1bfa22f93002bff208584626ccec7dff9..bf3628c12bea03d8196029316babd0d0882f7880 100644 (file)
@@ -87,4 +87,4 @@ A: Please file a bug report at <http://ngircd.barton.de/bugzilla/index.cgi>!
 
 
 -- 
-$Id$
+$Id: FAQ.txt,v 1.12 2008/01/02 22:47:58 alex Exp $
index 54a1cf5fb0b1c4af176c857ce6d8a111f547fd98..92a6b357f4bd3649b4ee92e2e6965bc417559297 100644 (file)
--- a/doc/NEWS
+++ b/doc/NEWS
@@ -10,7 +10,7 @@
                                   -- NEWS --
 
 
-ngIRCd Release 13
+ngIRCd Release 13 (2008-12-25)
 
   ngIRCd 13~rc1 (2008-11-21):
   - New version numer scheme :-)
@@ -298,4 +298,4 @@ ngIRCd 0.0.1, 31.12.2001
 
 
 -- 
-$Id$
+$Id: NEWS,v 1.88 2008/02/26 22:05:42 fw Exp $
index cd4ba7c12b72a1dbea95117f07a27aba9be36b52..a77cc88e841fd9ebb5c4a3385af862c5dc50d8d3 100644 (file)
@@ -29,28 +29,27 @@ Platform                    Compiler     ngIRCd     Date     Tester C M T R See
 alpha/unknown/netbsd3.0     gcc 3.3.3    CVSHEAD    06-05-07 fw     Y Y Y Y (3)
 hppa/unknown/openbsd3.5     gcc 2.95.3   CVSHEAD    04-05-25 alex   Y Y Y Y
 hppa1.1/unknown/linux-gnu   gcc 3.3.3    0.8.0      04-05-30 alex   Y Y Y Y
-hppa2.0/unknown/linux-gnu   gcc 3.3.5    0.9.x-CVS  05-06-27 alex   Y Y Y Y
-i386/apple/darwin9.4.0      gcc 4.0.1    0.12.1     08-07-21 alex   Y Y Y Y (3)
+hppa2.0/unknown/linux-gnu   gcc 3.3.5    13~rc1     08-12-02 alex   Y Y Y Y
+i386/apple/darwin9.5.1      gcc 4.0.1    13~rc1     08-12-02 alex   Y Y Y Y (3)
 i386/pc/solaris2.9          gcc 3.2.2    CVSHEAD    04-02-24 alex   Y Y Y Y
-i386/pc/solaris2.11         gcc 3.4.3    CVSHEAD    06-08-04 alex   Y Y Y Y
-i386/pc/solaris2.11         gcc 3.4.3    0.12.1     08-07-21 alex   Y Y Y Y (4)
+i386/pc/solaris2.11         gcc 3.4.3    13~rc1     08-12-03 alex   Y Y Y Y (4)
 i386/unknown/freebsd5.2.1   gcc 3.3.3    0.8.0      04-05-30 alex   Y Y Y Y
 i386/unknown/freebsd6.0     gcc 3.4.4    0.10.0-p1  06-08-04 alex   Y Y Y Y (3)
 i386/unknown/freebsd6.1     gcc 3.4.4    CVSHEAD    06-05-07 fw     Y Y Y Y (3)
-i386/unknown/freebsd7.0     gcc 4.2.1    0.12.1     08-07-21 alex   Y Y Y Y (3)
+i386/unknown/freebsd6.2     gcc 3.4.6    13~rc1     08-12-04 alex   Y Y Y Y (3)
+i386/unknown/freebsd7.0     gcc 4.2.1    13~rc1     08-12-04 alex   Y Y Y Y (3)
 i386/unknown/gnu0.3         gcc 3.3.3    0.8.0      04-05-30 alex   Y Y n Y
-i686/unknown/gnu0.3         gcc 4.3.1    0.12.1     08-08-10 alex   Y Y Y Y
+i686/unknown/gnu0.3         gcc 4.3.1    13~rc1     08-12-05 alex   Y Y Y Y
 i386/unknown/netbsdelf1.6.1 gcc 2.95.3   CVSHEAD    04-02-24 alex   Y Y Y Y
 i386/unknown/netbsdelf3.0.1 gcc 3.3.3    0.10.0-p1  06-08-30 alex   Y Y Y Y (3)
-i386/unknown/netbsdelf4.0   gcc 4.1.2    0.12.1     08-07-21 alex   Y Y Y Y (3)
+i386/unknown/netbsdelf4.0   gcc 4.1.2    13~rc1     08-12-05 alex   Y Y Y Y (3)
 i386/unknown/openbsd3.9     gcc 3.3.5    0.10.0-p1  06-08-30 alex   Y Y Y Y (3)
-i386/unknown/openbsd4.1     gcc 3.3.5    0.12.1     08-07-21 alex   Y Y n Y (3)
-i386/unknown/openbsd4.1     gcc 3.3.5    master     08-07-21 alex   Y Y Y Y (3)
+i386/unknown/openbsd4.1     gcc 3.3.5    13~rc1     08-12-05 alex   Y Y Y Y (3)
 i686/pc/cygwin              gcc 3.3.1    0.8.0      04-05-30 alex   Y Y n Y
 i686/pc/linux-gnu           gcc 2.95.4   0.8.0      04-05-30 alex   Y Y Y Y (1)
-i686/pc/linux-gnu           gcc 3.3.3    0.8.0      04-05-30 alex   Y Y Y Y (1)
-i386/pc/linux-gnu           gcc 4.1.2    0.10.0-p1  06-08-30 alex   Y Y Y Y (1)
-i386/pc/linux-gnu           gcc 4.3.1    0.12.1     08-07-21 alex   Y Y Y Y (1)
+i686/pc/linux-gnu           gcc 3.3.5    13~rc1     08-12-05 alex   Y Y Y Y (1)
+i386/pc/linux-gnu           gcc 4.1.2    13~rc1     08-12-05 alex   Y Y Y Y (1)
+i386/pc/linux-gnu           gcc 4.3.2    13~rc1     08-12-05 alex   Y Y Y Y (1)
 m68k/apple/aux3.1.1         Orig. A/UX   0.7.x-CVS  03-04-22 alex   Y Y Y Y (2)
 m68k/hp/hp-ux9.10           Orig. HPUX   0.7.x-CVS  03-04-30 goetz  Y Y Y Y
 m88k/dg/dgux5.4R3.10        gcc 2.5.8    CVSHEAD    04-03-15 alex   Y Y ? ?
@@ -63,6 +62,7 @@ powerpc/unknown/openbsd3.6  gcc 2.95.3   0.10.0     06-10-08 alex   Y Y n Y
 sparc/sun/solaris2.6        gcc 2.95.3   0.7.x-CVS  03-04-22 alex   Y Y Y Y
 sparc/sun/solaris2.7        gcc 3.3      0.8.0      04-05-30 alex   Y Y Y Y
 sparc/unkn./netbsdelf1.6.1  gcc 2.95.3   0.8.0      04-05-30 alex   Y Y Y Y
+x86_64/unknown/linux-gnu    4.3.2        13~rc1     08-12-05 alex   Y Y Y Y (5)
 
 
 Notes
@@ -83,3 +83,4 @@ Notes
 
 (4) Using the /dev/poll IO interface.
 
+(5) Using the epoll() IO interface.
index 250c0d15a57e10ce17c765109ae374e8289948db..68eea21d346e1dfd0dfa6cf2035e8a99b3331096 100644 (file)
@@ -64,4 +64,4 @@ A few hints in case of errors:
    even if you don't use ngIRCd.
 
 -- 
-$Id$
+$Id: README-AUX.txt,v 1.10 2006/07/23 12:19:57 alex Exp $
index 66585721ab986513f77766a1c9bee18ab5b71655..ea3816d58f9f72ef78d8016c881325a4700aac63 100644 (file)
@@ -50,4 +50,4 @@ mir in Verbindung setzen (alex@barton.de), ich maile gerne meine Patches zu.
 Fuer eine Aenderung im CVS ist es aber meiner Meinung nach noch zu frueh ...
 
 -- 
-$Id$
+$Id: README-BeOS.txt,v 1.7 2003/05/15 21:47:57 alex Exp $
index 410d7dc4e5d379185416c3816060098e1b2a8ddf..3e4142f0d996da0b7ff7dc8080f797d3e9bc5662 100644 (file)
@@ -30,4 +30,4 @@ Comments (RFC), which you can get e.g. via <http://www.faqs.org/>:
 
 
 -- 
-$Id$
+$Id: RFC.txt,v 1.6 2003/03/07 20:42:20 alex Exp $
index 9725af9dd39dfb56fc0f2f10f09318bb88ffdb90..6b590b8681ee872633597f7dfc1928f3bf83a8f3 100644 (file)
@@ -1,7 +1,7 @@
 
                      ngIRCd - Next Generation IRC Server
 
-                      (c)2001-2004 by Alexander Barton,
+                        (c)2001-2008 Alexander Barton,
                     alex@barton.de, http://www.barton.de/
 
                ngIRCd is free software and published under the
                                  -- SSL.txt --
 
 
-ngIRCd supports SSL/TLSv1 encrypted connections using the
-OpenSSL or gnutls library.
-Both encryped server <-> client and server <-> server links should work.
+ngIRCd supports SSL/TLSv1 encrypted connections using the OpenSSL or GnuTLS
+libraries. Both encrypted server-server links as well as client-server links
+are supported.
 
-BEWARE! The Code is mostly untested, use at your own risk!
+SSL is a compile-time option which is disabled by default. Use one of these
+options of the ./configure script to enable it:
 
-Example that creates a self-signed certificate and key (using OpenSSL):
-openssl req -newkey rsa:2048 -x509 -keyout server-key.pem \
-               -out server-cert.pem -days 1461
+  --with-openssl     enable SSL support using OpenSSL
+  --with-gnutls      enable SSL support using GnuTLS
 
-Example that creates DH parameters (optional):
-openssl dhparam -2 -out dhparams.pem 2048
+You need a SSL certificate, see below for how to create a self-signed one.
 
-Example that creates a self-signed certificate
-and key (using gnutls):
 
-certtool --generate-privkey --bits 2048 --outfile server-key.pem
-certtool --generate-self-signed --load-privkey server-key.pem \
-                --outfile server-cert.pem
+Configuration
+~~~~~~~~~~~~~
 
-Example that creates DH parameters (optional):
-certtool  --generate-dh-params --bits 2048 --outfile dhparams.pem
+To enable SSL connections a separate port must be configured: it is NOT
+possible to handle unencrypted and encrypted connections on the same port!
+This is a limitation of the IRC protocol ...
 
-Alternatively, you may use external programs/tools like stunnel to
-make it work:
+You have to set (at least) the following configuration variables in the
+[GLOBAL] section of ngircd.conf(5): SSLPorts, SSLKeyFile, and SSLCertFile.
+
+Now IRC clients are able to connect using SSL on the configured port(s).
+(Using port 6697 for encrypted connections is common.)
+
+To enable encrypted server-server links, you have to additionally set
+SSLConnect to "yes" in the corresponding [SERVER] section.
+
+
+Creating a self-signed certificate
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+OpenSSL:
+
+Creating a self-signed certificate and key:
+ $ openssl req -newkey rsa:2048 -x509 -keyout server-key.pem \
+       -out server-cert.pem -days 1461
+Create DH parameters (optional):
+ $ openssl dhparam -2 -out dhparams.pem 2048
+
+GnuTLS:
+
+Creating a self-signed certificate and key:
+ $ certtool --generate-privkey --bits 2048 --outfile server-key.pem
+ $ certtool --generate-self-signed --load-privkey server-key.pem \
+        --outfile server-cert.pem
+Create DH parameters (optional):
+ $ certtool  --generate-dh-params --bits 2048 --outfile dhparams.pem
+
+
+Alternate approach using stunnel(1)
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+Alternatively (or if you are using ngIRCd without compiled without support
+for GnuTLS/OpenSSL), you can use external programs/tools like stunnel(1) to
+get SSL encrypted connections:
 
   <http://stunnel.mirt.net/>
   <http://www.stunnel.org/>
 
-Stefan Sperling (stefan at binarchy dot net) mailed me the following text as a
+Stefan Sperling (stefan at binarchy dot net) mailed the following text as a
 short "how-to", thanks Stefan!
 
-
 === snip ===
     ! This guide applies to stunnel 4.x !
 
@@ -71,9 +102,3 @@ short "how-to", thanks Stefan!
     That's it.
     Don't forget to activate ssl support in your irc client ;)
 === snip ===
-
-
-
-
--- 
-$Id$
diff --git a/doc/Services.txt b/doc/Services.txt
new file mode 100644 (file)
index 0000000..67053b1
--- /dev/null
@@ -0,0 +1,70 @@
+
+                     ngIRCd - Next Generation IRC Server
+
+                        (c)2001-2008 Alexander Barton,
+                    alex@barton.de, http://www.barton.de/
+
+               ngIRCd is free software and published under the
+                   terms of the GNU General Public License.
+
+                              -- Services.txt --
+
+
+At the moment, ngIRCd doesn't implement a "special IRC services interface".
+But services acting as a "regular server" are supported, either using the IRC
+protocol defined in RFC 1459 or RFC 2812.
+
+Services have been tested using "IRC Services" version 5.x by Andrew Church,
+homepage: <http://www.ircservices.za.net/>. This document describes setting up
+ngIRCd and these services.
+
+
+Setting up ngIRCd
+~~~~~~~~~~~~~~~~~
+
+The "pseudo server" handling the IRC services is configured as a regular
+remote server in the ngircd.conf(5). In addition the variable "ServiceMask"
+should be set, enabling this ngIRCd to recognize the "pseudo users" as IRC
+services instead of regular IRC users.
+
+Example:
+
+  [SERVER]
+     Name = services.irc.net
+     MyPassword = 123abc
+     PeerPassword = 123abc
+     ServiceMask = *Serv
+
+
+Setting up IRC Services 5.1.x
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+IRC Services 5.1.3 and above can be used with ngIRCd using the "rfc1459"
+protocol module.
+
+Please note that versions up to and including 5.1.3 contain a bug that
+sometimes causes IRC Services to hang on startup. There are two workarounds:
+ a) send the services process a HUP signal ("killall -HUP ircservices")
+ b) apply this patch to the IRC Services source tree:
+    <ftp://ngircd.barton.de/ngircd/contrib/IRCServices513-FlushBuffer.patch>
+
+At least the following settings have to be tweaked, in addition to all the
+settings marked as required by IRC Services:
+
+In ircservices.conf:
+
+  Variable             Example value
+
+  RemoteServer         server.irc.net 6667 "123abc"
+  ServerName           "services.irc.net"
+  LoadModule           protocol/rfc1459
+
+In modules.conf:
+
+  Module               protocol/rfc1459
+
+The documentation of IRC Services can be found here:
+<http://www.ircservices.za.net/docs/>
+
+Please let us know if you are successfully using other IRC service packages or
+which problems you encounter, thanks!
index 71707383b1ded1b55d4b71e5fc7d7ac299f1ed40..04a323252d4184d4d296f8e55ebad9780c14d02d 100644 (file)
@@ -37,4 +37,4 @@ Links:
 
 
 -- 
-$Id$
+$Id: Zeroconf.txt,v 1.2 2006/08/03 14:37:29 alex Exp $
index 75c4f157103cdab4364ede9fed392ceef666b498..041542e7d6a68b8586ebcb8c448a57adcae06dbe 100644 (file)
@@ -1,14 +1,13 @@
-# $Id$
-
 #
-# This is a sample configuration file for the ngIRCd, which must be adepted
-# to the local preferences and needs.
+# This is a sample configuration file for the ngIRCd IRC daemon, which must
+# be customized to the local preferences and needs.
 #
 # Comments are started with "#" or ";".
 #
 # A lot of configuration options in this file start with a ";". You have
 # to remove the ";" in front of each variable to actually set a value!
-# The disabled variables are shown with example values for completeness.
+# The disabled variables are shown with example values for completeness only
+# and the daemon is using compiled-in default settings.
 #
 # Use "ngircd --configtest" (see manual page ngircd(8)) to validate that the
 # server interprets the configuration file as expected!
diff --git a/documentation.php.de b/documentation.php.de
new file mode 100644 (file)
index 0000000..9851c31
--- /dev/null
@@ -0,0 +1,106 @@
+<?php
+       include('includes/common.php');
+       begin_page('de', 'Dokumentation');
+?>
+<h2>
+       Dokumentation
+</h2>
+<h3 id="platforms">
+       Unterstützte Plattformen
+</h3>
+<p>
+       Auf den folgenden Plattformen wird der ngIRCd regelmäßig getestet
+       (in Klammern die jeweils benutzen Versionen), sie sind die
+       offiziell unterstützten Systeme:
+</p>
+<?php
+       include('common/platforms.inc');
+?>
+<p>
+       Da sich der ngIRCd an übliche UNIX-Standards hält und GNU automake
+       sowie GNU autoconf verwendet, stehen die Chancen nicht schlecht,
+       daß er sich auf weiteren UNIXoiden Systemen übersetzen bzw. relativ
+       einfach anpassen läßt.
+</p>
+<h3 id="install">
+       Installation
+</h3>
+<p>
+       ngIRCd ist für UNIXoide Systeme konzipiert, die Installation sollte
+       auf einem modernen UNIX-ähnlichen System, das von GNU automake und
+       GNU autoconf („configure“) unterstützt wird, keine besonderen
+       Schwierigkeiten bereiten.
+</p>
+<p>
+       Der Standardfall sieht so aus:
+</p>
+<blockquote><p><code>
+       tar xzf ngircd-&lt;version&gt;.tar.gz<br>
+       cd ngircd-&lt;version&gt;<br>
+       ./configure<br>
+       make
+</code></p></blockquote>
+<p>
+       Nun sollte sich in <code>src/ngircd</code> der ausführbare Server
+       (in der Regel <code>ngircd</code>) befinden.
+</p>
+<blockquote><p><code>
+       make install
+</code></p></blockquote>
+<p>
+       Der ausführbare Server wurde nun in <code>/usr/local/sbin</code>
+       installiert.
+</p>
+<p>
+       Vom Server wird die Konfigurationsdatei <code>ngircd.conf</code> in
+       <code>/usr/local/etc</code> erwartet; eine Beispiel-Konfigurationsdatei
+       ist im Verzeichnis <code>doc</code> zu finden.
+</p>
+<p>
+       Weitere Hinweise zur Installation und Konfiguration finden sich in
+       der Datei <a href="doc/INSTALL">INSTALL</a>.
+</p>
+<h3>
+       Dokumentation
+</h3>
+<p>
+       Ein wenig Dokumentation ist im Quellpaket enthalten, zum Teil im
+       Hauptverzeichnis (so z. B. die Dokumente INSTALL, README, NEWS und
+       COPYING), andere im Unterverzeichnis <samp>doc</samp> (wie z. B.
+       GIT.txt, FAQ.txt und die Beispiel-Konfiguration sample-ngircd.conf).
+</p>
+<p>
+       Die Dateien der aktuellen Version sind hier im Web (in englischer
+       Sprache) zu finden:
+</p>
+<ul>
+       <li><a href="doc/README">README</a></li>
+       <li><a href="doc/INSTALL">INSTALL</a></li>
+</ul>
+<ul>
+       <li><a href="doc/sample-ngircd.conf">sample-ngircd.conf</a>
+</ul>
+<ul>
+       <li><a href="doc/FAQ.txt">FAQ.txt</a>
+       <li><a href="doc/NEWS">NEWS</a>
+       <li><a href="doc/ChangeLog">ChangeLog</a>
+</ul>
+<ul>
+       <li><a href="doc/AUTHORS">AUTHORS</a>
+       <li><a href="doc/COPYING">COPYING</a>
+       <li><a href="doc/GIT.txt">GIT.txt</a>
+       <li><a href="doc/Platforms.txt">Platforms.txt</a>
+       <li><a href="doc/Protocol.txt">Protocol.txt</a>
+       <li><a href="doc/RFC.txt">RFC.txt</a>
+       <li><a href="doc/Services.txt">Services.txt</a>
+       <li><a href="doc/SSL.txt">SSL.txt</a>
+       <li><a href="doc/Zeroconf.txt">Zeroconf.txt</a>
+</ul>
+<ul>
+       <li><a href="doc/README-AUX.txt">README-AUX.txt</a>
+       <li><a href="doc/README-BeOS.txt">README-BeOS.txt</a> (deutsch)
+</ul>
+<?php
+       end_page();
+?>
+
diff --git a/documentation.php.en b/documentation.php.en
new file mode 100644 (file)
index 0000000..6abc868
--- /dev/null
@@ -0,0 +1,102 @@
+<?php
+       include('includes/common.php');
+       begin_page('en', 'Documentation');
+?>
+<h2>
+       Documentation
+</h2>
+<h3 id="platforms">
+       Supported platforms
+</h3>
+<p>
+       ngIRCd is being tested regularly on the following platforms (used
+       version in brackets). The systems that are officially supported are:
+</p>
+<?php
+       include('common/platforms.inc');
+?>
+<p>
+       As the ngIRCd complies to common UNIX standards and uses GNU automake
+       and GNU autoconf, chances are that it can be ported to or adapted for
+       further UNIXoid systems.
+</p>
+<h3 id="install">
+       Installation
+</h3>
+<p>
+       ngIRCd is designed for UNIXoid systems and the installation on a
+       modern UNIX-like system, which is supported by GNU automake and GNU
+       autoconf, shouldn't cause any problems.
+</p>
+<p>
+       Typically it looks like this:
+</p>
+<blockquote><p><code>
+       tar xzf ngircd-&lt;version&gt;.tar.gz<br>
+       cd ngircd-&lt;version&gt;<br>
+       ./configure<br>
+       make
+</code></p></blockquote>
+<p>
+       Now, the executing server (normally <code>ngircd</code>) should be in
+       <code>src/ngircd</code>.
+</p>
+<blockquote><p><code>
+       make install
+</code></p></blockquote>
+<p>
+       The executing server has now been installed in
+       <code>/usr/local/sbin</code>.
+</p>
+<p>
+       The configuration file <code>ngircd.conf</code> is now expected in
+       the server directory <code>/usr/local/etc</code>; an exemplary
+       configuration file can be found in the directory <code>doc</code>.
+</p>
+<p>
+       Further comments on the installation and configuration can be found
+       in the file <a href="doc/INSTALL">INSTALL</a>.
+</p>
+<h3>
+       Documentation
+</h3>
+<p>
+       Documentation is compiled in the source package, some in the main
+       directory (such as INSTALL, README, NEWS und COPYING), and some in
+       the sub directory <samp>doc</samp> (such as GIT.txt, FAQ.txt and the
+       exemplary configurations sample-ngircd.conf).
+</p>
+<p>
+       The documents of tha actual version can be found online here:
+</p>
+<ul>
+       <li><a href="doc/README">README</a></li>
+       <li><a href="doc/INSTALL">INSTALL</a></li>
+</ul>
+<ul>
+       <li><a href="doc/sample-ngircd.conf">sample-ngircd.conf</a>
+</ul>
+<ul>
+       <li><a href="doc/FAQ.txt">FAQ.txt</a>
+       <li><a href="doc/NEWS">NEWS</a>
+       <li><a href="doc/ChangeLog">ChangeLog</a>
+</ul>
+<ul>
+       <li><a href="doc/AUTHORS">AUTHORS</a>
+       <li><a href="doc/COPYING">COPYING</a>
+       <li><a href="doc/GIT.txt">GIT.txt</a>
+       <li><a href="doc/Platforms.txt">Platforms.txt</a>
+       <li><a href="doc/Protocol.txt">Protocol.txt</a>
+       <li><a href="doc/RFC.txt">RFC.txt</a>
+       <li><a href="doc/Services.txt">Services.txt</a>
+       <li><a href="doc/SSL.txt">SSL.txt</a>
+       <li><a href="doc/Zeroconf.txt">Zeroconf.txt</a>
+</ul>
+<ul>
+       <li><a href="doc/README-AUX.txt">README-AUX.txt</a>
+       <li><a href="doc/README-BeOS.txt">README-BeOS.txt</a> (deutsch)
+</ul>
+<?php
+       end_page();
+?>
+
diff --git a/download.php.de b/download.php.de
new file mode 100644 (file)
index 0000000..23edcf6
--- /dev/null
@@ -0,0 +1,57 @@
+<?php
+       include('includes/common.php');
+       begin_page('de', 'Download');
+?>
+<h2>
+       Download
+</h2>
+<h3 id="source">
+       Source Code
+</h3>
+<?php
+       include('common/download.inc');
+?>
+<p>
+       Alle bisherigen Versionen, GnuPG-Signaturen der Archive sowie
+       vorhandene Test-Versionen aus den GIT-Quellen (so vorhanden)
+       können zudem via FTP von
+       <a href="ftp://ngircd.barton.de/pub/ngircd/">ngircd.barton.de</a> und
+       <a href="ftp://ftp.berlios.de/pub/ngircd/">ftp.berlios.de</a>
+       heruntergeladen werden.
+</p>
+<h3 id="packages">
+       Pakete
+</h3>
+<p>
+       Von den folgenden Distributionen gibt es fertige Pakete für den ngIRCd:
+</p>
+<?php
+       include('common/distributions.inc');
+?>
+<p>
+       Inoffizielle Pakete:
+</p>
+<ul>
+       <li>
+               <a href="http://www.debian.org/">Debian Linux</a>:
+               <a href="ftp://arthur.barton.de/debian/pool/main/n/ngircd/">deb</a>
+               (Autor: Alex Barton)
+       </li>
+</ul>
+<h3 id="git">
+       GIT-Repository
+</h3>
+<p>
+       Der Quelltext und alle zum ngIRCd geh&ouml;renden Dateien werden mit
+       <a hreflang="en" href="http://git.or.cz/">GIT</a>, verwaltet.
+       Anonymer Zugang ist m&ouml;glich, Details hier:
+       <a href="doc/GIT.txt">GIT.txt</a>.
+</p>
+<p>
+       Im Web ist die Repository auch online verf&uuml;gbar:
+       <a href="http://ngircd.barton.de/cgi-bin/gitweb.cgi?p=ngircd.git">ngIRCd GIT Repository</a>.
+</p>                           
+<?php
+       end_page();
+?>
+
diff --git a/download.php.en b/download.php.en
new file mode 100644 (file)
index 0000000..7780fbc
--- /dev/null
@@ -0,0 +1,56 @@
+<?php
+       include('includes/common.php');
+       begin_page('en', 'Download');
+?>
+<h2>
+       Download
+</h2>
+<h3 id="source">
+       Source Code
+</h3>
+<?php
+       include('common/download.inc');
+?>
+<p>
+       All previous versions, GnuPG signatures of the archives and test
+       versions from GIT sources (if available) can be downloaded here:
+       <a href="ftp://ngircd.barton.de/pub/ngircd/">ngircd.barton.de</a> and
+       here <a href="ftp://ftp.berlios.de/pub/ngircd/">ftp.berlios.de</a>.
+</p>
+<h3 id="packages">
+       Packages
+</h3>
+<p>
+       Ready packages for ngIRCd are available for the following
+       distributions:
+</p>
+<?php
+       include('common/distributions.inc');
+?>
+<p>
+       Inofficial packages:
+</p>
+<ul>
+       <li>
+               <a href="http://www.debian.org/">Debian Linux</a>:
+               <a href="ftp://arthur.barton.de/debian/pool/main/n/ngircd/">deb</a>
+               (Author: Alex Barton)
+       </li>
+</ul>
+<h3 id="git">
+       GIT Repository
+</h3>
+<p>
+       The source code and all files belonging to ngIRCd are managed by
+       <a hreflang="en" href="http://git.or.cz/">GIT</a>. Anonymous access
+       is possible, the details can be found here:
+       <a href="doc/GIT.txt">GIT.txt</a>.
+</p>
+<p>
+       The repository is also available online:
+       <a href="http://ngircd.barton.de/cgi-bin/gitweb.cgi?p=ngircd.git">ngIRCd GIT Repository</a>.
+</p>                           
+<?php
+       end_page();
+?>
+
diff --git a/includes/common.php b/includes/common.php
new file mode 100644 (file)
index 0000000..bf98cf9
--- /dev/null
@@ -0,0 +1,60 @@
+<?php
+
+function begin_page($lang = 'en', $title = null) {
+       echo '<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" ';
+       echo '"http://www.w3.org/TR/html4/strict.dtd">' . "\n\n";
+       echo '<html lang="' . $lang . '">' . "\n";
+       echo '<head>';
+       if ($title)
+               echo "<title>$title | ngIRCd: Next Generation IRC Daemon</title>";
+       else
+               echo '<title>ngIRCd: Next Generation IRC Daemon</title>';
+       echo '<meta http-equiv="content-type" content="text/html; charset=utf-8">';
+       echo '<meta http-equiv="content-language" content="' . $lang . '">';
+       echo '<meta name="author" content="Alexander Barton">';
+       echo '<meta name="author-email" content="alex@barton.de">';
+       echo '<meta name="MSSmartTagsPreventParsing" content="TRUE">';
+       echo '<link rel="stylesheet" href="common/styles.css" type="text/css" media="screen">';
+       echo '<link rel="author" href="mailto:alex@barton.de" title="E-Mail an Alex">';
+       echo '<script type="text/javascript" src="common/mootools.js"></script>';
+       echo '<script type="text/javascript" src="common/slide.js"></script>';
+       echo "</head>\n<body>";
+       echo '<div id="bodyBox">';
+
+       // Title & Slogan
+       echo '<div id="sloganhead">';
+       echo '<h1 class="titel">ng<span>IRC</span>d: Next Generation IRC Daemon</h1>';
+       echo '<p style="font-family: Georgia">“… serving <em>white hat</em> 6667!”</p>';
+       echo '</div>';
+
+       // Navigation
+       echo '<ul class="nav">';
+       switch($lang) {
+         case 'de':
+               echo '<li><a href="index.php.de">ngIRCd</a></li>';
+               echo '<li><a href="news.php.de">Neuigkeiten</a></li>';
+               echo '<li><a href="download.php.de">Download</a></li>';
+               echo '<li><a href="documentation.php.de">Dokumentation</a></li>';
+               echo '<li><a href="support.php.de">Support</a></li>';
+               echo '<li><a href="bugtracker.php.de">Bug-Tracker</a></li>';
+               break;
+         default:
+               echo '<li><a href="index.php.en">ngIRCd</a></li>';
+               echo '<li><a href="news.php.en">News</a></li>';
+               echo '<li><a href="download.php.en">Download</a></li>';
+               echo '<li><a href="documentation.php.en">Documentation</a></li>';
+               echo '<li><a href="support.php.en">Support</a></li>';
+               echo '<li><a href="bugtracker.php.en">Bug-Tracker</a></li>';
+       }
+       echo '</ul><br style="clear:both">';
+
+       echo '<div id="content">';
+}
+
+function end_page() {
+       echo '</div>';
+       echo '<p id="footer">ngIRCd &copy;2001-2008 Alexander Barton</p>';
+       echo '</div></body></html>';
+}
+
+?>
diff --git a/index.html.de b/index.html.de
deleted file mode 100644 (file)
index c1a527e..0000000
+++ /dev/null
@@ -1,381 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
-<html lang="de">
-
-<head>
- <title>ngIRCd: Next Generation IRC Daemon</title>
- <meta http-equiv="content-type" content="text/html; charset=ISO-8859-1">
- <meta http-equiv="content-language" content="de">
- <meta name="author" content="Alexander Barton">
- <meta name="author-email" content="alex@barton.de">
- <meta name="MSSmartTagsPreventParsing" content="TRUE">
- <link rel="stylesheet" href="style.css" type="text/css" media="screen">
- <link rel="author" href="mailto:alex@barton.de" title="E-Mail an Alex">
-</head>
-
-<body>
-
-<h1>ngIRCd: Next Generation IRC Daemon</h1>
-
-<p>
- ngIRCd ist ein freier Open-Source Server f&uuml;r den Internet Relay Chat (IRC),
- der unter der GNU General Public License
- (<a href="http://www.gnu.org/licenses/gpl.html">GPL</a>)
- entwickelt wird.
- Er ist von Grund auf neu geschrieben, basiert also nicht wie die meisten
- anderen IRCd's auf dem &quot;Urvater&quot;, dem Daemon des IRCNet.
-</p>
-
-<ol>
- <li><a href="#status">Status</a>
- <li><a href="#why">Vorteile</a>
- <li><a href="#platforms">Unterst&uuml;tzte Plattformen</a>
- <li><strong><a href="#docu">Dokumentation</a></strong>
- <li><a href="#ml">Mailingliste</a>
- <li><a href="#install">Installation</a>
- <li><strong><a href="#download">Download</a></strong>
- <ul>
-  <li><a href="#source">Source Code</a></li>
-  <li><a href="#packages">Pakete</a></li>
- </ul>
- <li><a href="#people">Kontakt</a>
- <li><a href="#git">GIT-Repository</a>
- <li><a href="#bugs">Bug-Tracker</a>
- <li><a href="#history">History</a>
-</ol>
-
-<p>
- Noch ein Hinweis: bei <a href="http://freshmeat.net/">freshmeat.net</a>
- gibt es einen <a href="http://freshmeat.net/projects/ngircd/">Projekteintrag</a>
- f&uuml;r den ngIRCd. Dort ist es z.B. m&ouml;glich, sich &uuml;ber neue Versionen
- zu informieren und via E-Mail benachrichtigen zu lassen.
-</p>
-
-<p><span class="Hint">
- BTW: There's an <a href="index.html.en">English</a> version of
- this page, too.
-</span></p>
-
-<p>Mirrors:</p>
-<ul>
- <li><a href="http://ngircd.berlios.de/index.html.de">ngircd.berlios.de</a>
- <li><a href="http://ngircd.barton.de/index.html.de">ngircd.barton.de</a>
-</ul>
-
-<h2 id="status">Status</h2>
-
-<p>
- Die aktuelle &quot;stabile&quot; Version ist <strong>0.12.1</strong>.
- im Test befindet sich Version <strong>13~rc1</strong>.
- Download-M&ouml;glichkeiten <a href="#download">siehe unten</a>.
-</p>
-<p class="Security">
- <strong>Achtung:</strong>
- ngIRCd-Versionen vor 0.10.4 beinhalten einen Fehler, der (auch remote)
- dazu genutzt werden kann, den Daemon zum Absturz zu bringen.
- Alle Installationen sollten auf Version 0.10.4 (oder neuer) aktualisiert
- werden.
-</p>
-<p>
- Wenngleich die aktuelle Version noch nicht 100% komplett ist (einige
- IRC-Befehle werden noch nicht bzw. nicht im vollen von den RFCs vorgesehenen
- Umfang unterst&uuml;tzt), so taugt der Server doch bereits schon recht
- gut f&uuml;r den produktiven, t&auml;glichen Einsatz.
-</p>
-<p>
- <em>Beispiel</em>: Ein kleines IRC-Netzwerk, in dem auch mein Server aktiv
- ist, setzt teilweise den ngIRCd, teilweise das Original ein:
- <a href="http://irc.barton.de/">Info-Seite</a> dieses IRC-Netzes.
-</p>
-<p>
- &Uuml;ber R&uuml;ckmeldungen, Bug-Reports (am besten &uuml;ber den
- <a href="#bugs">Bug-Tracker</a>) und Patches freue ich mich! Also los,
- haut in die Tasten!
-</p>
-<p>
- Du erreichst mich (Alex Barton) via E-Mail als 
- <a href="mailto:alex@barton.de">alex@barton.de</a>.
-</p>
-
-<h2 id="why">Vorteile</h2>
-<p>
- Warum man den ngIRCd benutzen sollte? Ganz einfach, unter anderem aus
- diesen Gr&uuml;nden:
-</p>
-<ul>
- <li>keine Probleme mit Servern, deren IP-Adressen nicht statisch sind,
- <li>&uuml;bersichtliche (&quot;schlanke&quot;) Konfigurationsdatei,
- <li>frei verf&uuml;gbarer, moderner und &quot;aufger&auml;umter&quot; C-Quellcode.
- <li>ngIRCd wird aktiv weiter entwickelt.
-</ul>
-
-<h2 id="platforms">Unterst&uuml;tzte Plattformen</h2>
-<p>
- Auf den folgenden Plattformen wird der ngIRCd regelm&auml;&szlig;ig getestet
- (in Klammern die jeweils benutzen Versionen), sie sind die
- offiziell unterst&uuml;tzten Systeme:
-</p>
-<ul>
- <li>AIX (3.2.5, IBM XL C Compiler)
- <li>A/UX (3.x, original Apple C Compiler oder GNU C)
- <li><a href="http://www.freebsd.org/">FreeBSD</a> (4.5/i386, GNU C)
- <li><a href="http://www.hp.com/">HP-UX</a> (10.20, GNU C)
- <li><a href="http://www.hp.com/">HP-UX</a> (9.10/m68k, HP-UX cc)
- <li>IRIX (6.5, SGI MIPSpro C 7.30)
- <li><a href="http://www.linux.org/">Linux</a> (2.2.x/i386, 2.4.x/i386 und 2.4.x/hppa, GNU C)
- <li><a href="http://www.apple.com/macosx/">Mac OS X</a> (10.x, GNU C 2.95.x/3.x)
- <li><a href="http://www.netbsd.org/">NetBSD</a> (1.5.2/i386 und 1.5.3/m68k, GNU C)
- <li><a href="http://www.obenbsd.org/">OpenBSD</a> (3.4/i386)
- <li><a href="http://www.sun.com/">Solaris</a> (2.5.1 und 2.6, GNU C)
- <li>Windows mit <a href="http://sources.redhat.com/cygwin/">Cygwin</a> (GNU C)
-</ul>
-<p>
- Da sich der ngIRCd an &uuml;bliche UNIX-Standards h&auml;lt und GNU
- automake sowie GNU autoconf verwendet, stehen die Chancen nicht
- schlecht, da&szlig; er sich auf weiteren UNIXoiden Systemen &uuml;bersetzen
- bzw. relativ einfach anpassen l&auml;&szlig;t.
-</p>
-
-<h2 id="docu">Dokumentation</h2>
-<p>
- Ein wenig Dokumentation ist im Quellpaket enthalten, zum Teil im Hauptverzeichnis (so z.B.
- die Dokumente INSTALL, README, NEWS und COPYING), andere im Unterverzeichnis &quot;doc&quot;
- (wie z.B. GIT.txt, FAQ.txt und die Beispiel-Konfiguration sample-ngircd.conf).
-</p>
-<p>
- Teile von letzteren sind hier im Web (mehr oder weniger aktuell) in englischer Sprache
- verf&uuml;gbar:
-</p>
-<ul>
- <li><a href="doc/README">README</a>
- <li><a href="doc/INSTALL">INSTALL</a>
-</ul>
-<ul>
- <li><a href="doc/AUTHORS">AUTHORS</a>
- <li><a href="doc/COPYING">COPYING</a>
- <li><a href="doc/GIT.txt">GIT.txt</a>
- <li><a href="doc/ChangeLog">ChangeLog</a>
- <li><a href="doc/FAQ.txt">FAQ.txt</a>
- <li><a href="doc/NEWS">NEWS</a>
- <li><a href="doc/Platforms.txt">Platforms.txt</a>
- <li><a href="doc/Protocol.txt">Protocol.txt</a>
- <li><a href="doc/RFC.txt">RFC.txt</a>
- <li><a href="doc/SSL.txt">SSL.txt</a>
-</ul>
-<ul>
- <li><a href="doc/sample-ngircd.conf">sample-ngircd.conf</a>
-</ul>
-<ul>
- <li><a href="doc/README-AUX.txt">README-AUX.txt</a>
- <li><a href="doc/README-BeOS.txt">README-BeOS.txt</a> (deutsch)
-</ul>
-
-<h2 id="ml">Mailingliste</h2>
-<p>
- Es gibt eine (englischsprachige) Mailingliste, die sich mit allen
- "technischen" Fragen rund um den ngIRCd besch&auml;ftigt: Compilieren,
- Installieren, Konfigurieren und auch die weitere Entwicklung und
- Erweiterungen. Zudem werden hier Updates und Neuerungen
- angek&uuml;ndigt.
-</p>
-<p>Die Anmeldung erfolgt &uuml;ber die <a href="http://arthur.barton.de/mailman/listinfo/ngircd-ml">Hauptseite der Mailingliste</a>.
-<p>Alle Beitr&auml;ge werden zudem in einem <a href="http://arthur.barton.de/pipermail/ngircd-ml/">Archiv</a> gespeichert.
-
-<h2 id="install">Installation</h2>
-<p>
- ngIRCd ist f&uuml;r UNIXoide Systeme konzipiert, die Installation sollte auf
- einem modernen UNIX-&auml;hnlichen System, das von GNU automake und GNU autoconf
- (&quot;configure&quot;) unterst&uuml;tzt wird, keine besonderen Schwierigkeiten bereiten.
-</p>
-<p>
- Der &quot;Standardfall&quot; sieht so aus:
-</p>
-<blockquote><p><code>
- tar xzf ngircd-&lt;version&gt;.tar.gz<br>
- cd ngircd-&lt;version&gt;<br>
- ./configure<br>
- make
-</code></p></blockquote>
-<p>
- Nun sollte sich in <code>src/ngircd</code> der ausf&uuml;hrbare Server (in der
- Regel &quot;<code>ngircd</code>&quot;) befinden.
-</p>
-<blockquote><p><code>
- make install
-</code></p></blockquote>
-<p>
- Der ausf&uuml;hrbare Server wurde nun in <code>/usr/local/sbin</code> installiert.
-</p>
-<p>
- Vom Server wird die Konfigurationsdatei <code>ngircd.conf</code> in
- <code>/usr/local/etc</code> erwartet; eine Beispiel-Konfigurationsdatei ist
- im Verzeichnis <code>doc</code> zu finden.
-</p>
-<p>
- Weitere Hinweise zur Installation und Konfiguration finden sich in
- der Datei <a href="doc/INSTALL">INSTALL</a>.
-</p>
-
-<h2 id="download">Download</h2>
-<h3 id="source">Source Code</h3>
-<dl>
- <dt><strong>ngIRCd 0.12.1</strong> (2008-07-09):</dt>
- <dd>
-       <p>Server: <em>berlios.de</em> (<a href="ftp://ftp.berlios.de/pub/ngircd/">ftp</a>)</p>
-       <ul>
-               <li>ngircd-0.12.1.tar.gz:
-                   <a href="ftp://ftp.berlios.de/pub/ngircd/ngircd-0.12.1.tar.gz">ftp</a>
-       </ul>
-       <p>Server: <em>ngircd.barton.de</em> (<a href="ftp://ngircd.barton.de/pub/ngircd/">ftp</a>)</p>
-       <ul>
-               <li>ngircd-0.12.1.tar.gz:
-                   <a href="ftp://ngircd.barton.de/pub/ngircd/ngircd-0.12.1.tar.gz">ftp</a>.
-       </ul>
- </dd>
- <dt><strong>ngIRCd 13~rc1</strong> (2008-11-21):</dt>
- <dd>
-       <p>Server: <em>berlios.de</em> (<a href="ftp://ftp.berlios.de/pub/ngircd/">ftp</a>)</p>
-       <ul>
-               <li>ngircd-13~rc1.tar.gz:
-                   <a href="ftp://ftp.berlios.de/pub/ngircd/ngircd-13~rc1.tar.gz">ftp</a>
-       </ul>
-       <p>Server: <em>ngircd.barton.de</em> (<a href="ftp://ngircd.barton.de/pub/ngircd/">ftp</a>)</p>
-       <ul>
-               <li>ngircd-13~rc1.tar.gz:
-                   <a href="ftp://ngircd.barton.de/pub/ngircd/ngircd-13~rc1.tar.gz">ftp</a>.
-       </ul>
- </dd>
-</dl>
-<p>
- Alle bisherigen Versionen, GnuPG-Signaturen der Archive sowie vorhandene
- Test-Versionen aus den GIT-Quellen (so vorhanden) k&ouml;nnen zudem via FTP
- von <a href="ftp://ngircd.barton.de/pub/ngircd/">ngircd.barton.de</a>
- und <a href="ftp://ftp.berlios.de/pub/ngircd/">ftp.berlios.de</a>
- heruntergeladen werden.
-</p>
-<h3 id="packages">Pakete</h3>
-<p>
- Von den folgenden Distributionen gibt es fertige Pakete f&uuml;r den ngIRCd:
-</p>
-<ul>
- <li>
-  <a href="http://amiga.sourceforge.net/">Amiga.sf</a>:
-  <a href="http://amiga.sourceforge.net/index.php?showpackage=ngIRCd">Port</a>
- </li>
- <li>
-  <a href="http://www.debian.org/">Debian Linux</a>:
-  <a href="http://packages.debian.org/ngircd">deb</a>
- </li>
- <li>
-  <a href="http://fedoraproject.org/">Fedora Linux</a>:
-  <a href="https://admin.fedoraproject.org/pkgdb/packages/name/ngircd/">rpm</a>
- </li>
- <li>
-  <a href="http://www.finkproject.org/">Fink Project</a>:
-  <a href="http://pdb.finkproject.org/pdb/package.php/ngircd">Port</a>
- </li>
- <li>
-  <a href="http://www.freebsd.org/">FreeBSD</a>:
-  <a href="http://www.freebsd.org/cgi/ports.cgi?query=ngircd&amp;stype=all">Port</a>
- </li>
- <li>
-  <a href="http://www.gentoo.org/">Gentoo Linux</a>:
-  <a href="http://packages.gentoo.org/package/net-irc/ngircd">ebuild</a>
- </li>
- <li>
-  <a href="http://www.macports.org/">Mac Ports</a>:
-  <a href="http://trac.macports.org/browser/trunk/dports/irc/ngircd/Portfile">Port</a>
- <li>
-  <a href="http://www.opensuse.org/">OpenSUSE</a>:
-  <a href="http://software.opensuse.org/download/server:/irc/">rpm</a>
- </li>
- <li>
-  <a href="http://www.ubuntu.com/">Ubuntu Linux</a>:
-  <a href="http://packages.ubuntu.com/ngircd">deb</a>
- </li>
-</ul>
-<p>
- <q>Inoffizielle</q> Pakete:
-</p>
-<ul>
- <li>
-  <a href="http://www.debian.org/">Debian Linux</a>:
-  <a href="ftp://arthur.barton.de/debian/pool/main/n/ngircd/">deb</a>
-  (Autor: Alex Barton)
- </li>
-</ul>
-
-<h2 id="people">Kontakt</h2>
-<p>
- Die Idee, den ngIRCd zu entwickeln, hatte
- Alexander Barton (<a href="mailto:alex@barton.de">alex@barton.de</a>);
- von ihm sind fast alle Teile des heutigen Source-Codes.
-</p>
-<p>
- Dank geb&uuml;hrt
- Ilja Osthoff (<a href="mailto:ilja@glide.ath.cx">ilja@glide.ath.cx</a>)
- f&uuml;r englische &Uuml;bersetzungen der Dokumentation sowie
- G&ouml;tz Hoffart (<a href="mailto:goetz@hoffart.de">goetz@hoffart.de</a>)
- f&uuml;r die englische Webseite.
-</p>
-<p>
- Solltest du Bugs finden oder Ideen f&uuml;r Erweiterungen haben, trage
- diese am Besten in den <a href="#bugs">Bug-Tracker</a> des ngIRCd ein.
- F&uuml;r Diskussionen und Fragen rund um den ngIRCd ist zudem eine
- <a href="#ml">Mailingliste</a> eingerichtet.
-</p>
-<p>BTW: &uuml;ber Patches und weitere "Mitstreiter" freuen wir uns immer!</p>
-<p>ngIRCd im IRC: <a href="irc://irc.barton.de/ngircd">irc://irc.barton.de/ngircd</a>.</p>
-<h2 id="git">GIT-Repository</h2>
-<p>
- Der Quelltext und alle zum ngIRCd geh&ouml;renden Dateien werden mit
- <a hreflang="en" href="http://git.or.cz/">GIT</a>, 
- verwaltet. Anonymer Zugang ist m&ouml;glich, Details hier:
- <a href="doc/GIT.txt">GIT.txt</a>.
-</p>
-<p>
- Im Web ist die Repository auch online verf&uuml;gbar:
- <a href="http://ngircd.barton.de/cgi-bin/gitweb.cgi?p=ngircd.git">ngIRCd GIT Repository</a>.
-</p>
-
-<h2 id="bugs">Bug-Tracker</h2>
-<p>
- Damit ich den &Uuml;berlick &uuml;ber eventuell(!?) im ngIRCd vorhandene Bugs und
- Feature-W&uuml;nsche nicht verliere, ist ein Bug-Tracking-System installiert:
- <a href="http://ngircd.barton.de/bugzilla/index.cgi">Bugzilla</a>
-</p>
-<p>
- Solltest du Fehler finden, so lege dort bitte einen
- <a href="http://ngircd.barton.de/bugzilla/enter_bug.cgi">Bug-Report</a>
- an! Vielen Dank!
-</p>
-<p>
- Zudem kannst du dich dort auch &uuml;ber bekannte und vielleicht bereits
- behobene Fehler
- <a href="http://ngircd.barton.de/bugzilla/query.cgi">informieren</a>.
-</p>
-
-<h2 id="history">History</h2>
-<p>
- Die <a href="doc/NEWS">NEWS</a>-Datei und das <a href="doc/ChangeLog">ChangeLog</a>
- sind (in englischer Sprache) online verf&uuml;gbar sowie in den Archiven enthalten.
-</p>
-
-<!-- Footer -->
-<hr style="margin-top: 0.75em;">
-<p style="text-align: center">
- Dank an:<br>
- <a href="http://developer.berlios.de"><img src="http://developer.berlios.de/sflogo.php?group_id=546&amp;type=1" width="124" height="32" alt="BerliOS Logo" style="border: 0"></a>
-</p>
-<hr>
-<p>
- <img src="valid-html401.gif" style="float: right;" alt="Valid HTML 4.01!" height="31" width="88">
- <small>
-  Version: $Id$
-  <br>
-  Seite <a hreflang="en" href="http://validator.w3.org/check?uri=http%3A%2F%2Fngircd.barton.de%2Findex.html.de">pr&uuml;fen</a>.<br>
-  Kontakt: Alexander Barton, E-Mail: <a href="mailto:alex@barton.de">alex@barton.de</a>.<br>
- </small>
-</p>
-
-</body>
-</html>
diff --git a/index.html.en b/index.html.en
deleted file mode 100644 (file)
index 8374c8e..0000000
+++ /dev/null
@@ -1,369 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
-<html lang="en">
-
-<head>
- <title>ngIRCd: Next Generation IRC Daemon</title>
- <meta http-equiv="content-type" content="text/html; charset=ISO-8859-1">
- <meta http-equiv="content-language" content="en">
- <meta name="author" content="Alexander Barton">
- <meta name="author-email" content="alex@barton.de">
- <meta name="MSSmartTagsPreventParsing" content="TRUE">
- <link rel="stylesheet" href="style.css" type="text/css" media="screen">
- <link rel="author" href="mailto:alex@barton.de" title="write an E-Mail to Alex">
-</head>
-
-<body>
-
-<h1>ngIRCd: Next Generation IRC Daemon</h1>
-
-<p>
- ngIRCd is a <span title="free as in freedom">free</span> open source
- daemon for Internet Relay Chat (IRC), developed under the GNU
- General Public License (<a href="http://www.gnu.org/licenses/gpl.html">GPL</a>).
-
- It's written from scratch and is not based upon the original IRCd like
- many others.
-</p>
-
-<ol>
- <li><a href="#status">Status</a>
- <li><a href="#why">Advantages</a>
- <li><a href="#platforms">Supported platforms</a>
- <li><strong><a href="#docu">Documentation</a></strong>
- <li><a href="#ml">Mailing List</a>
- <li><a href="#install">Installation</a>
- <li><strong><a href="#download">Download</a></strong>
- <ul>
-  <li><a href="#source">Source Code</a></li>
-  <li><a href="#packages">Packages</a></li>
- </ul>
- <li><a href="#people">Contact</a>
- <li><a href="#git">GIT Repository</a>
- <li><a href="#bugs">Bug Tracker</a>
- <li><a href="#history">History</a>
-</ol>
-
-<p>
- Hint: at <a href="http://freshmeat.net/">freshmeat.net</a>
- there's an <a href="http://freshmeat.net/projects/ngircd/">entry</a>
- for the ngIRCd project. You can inform about new releases and get
- update notifications via E-Mail.
-</p>
-
-<p><span class="Hint">
- BTW: Von dieser Seite gibt es auch eine <a href="index.html.de">deutsche</a>
- Version.
-</span></p>
-
-<p>Mirrors:</p>
-<ul>
- <li><a href="http://ngircd.berlios.de/index.html.en">ngircd.berlios.de</a>
- <li><a href="http://ngircd.barton.de/index.html.en">ngircd.barton.de</a>
-</ul>
-
-<h2 id="status">Status</h2>
-
-<p>
- Current &quot;stable&quot; version is <strong>0.12.1</strong>.
- Version <strong>13~rc1</strong> is available for testing.
- Please see <a href="#download">below</a> for download locations.
-</p>
-<p class="Security">
- <strong>Attention:</strong>
- ngIRCd-versions previous to 0.10.4 comprise an error which can be used
- (also by remote) to crash the daemon. All installations should be updated
- to version 0.10.4 or subsequent versions.</p>
-<p>
- This version is used in private IRC networks and is known to run quite
- stable and flawless although it is not tested in huge IRC networks under
- heavy load yet. There are still missing features, but the current version
- should provide everything you need during &quot;normal&quot; IRC sessions.
-</p>
-<p>
- Read more about our private IRC network on these
- <a href="http://irc.barton.de/">web pages</a>.
-</p>
-<p>
- I'm glad to receive feedback, bug reports (best choice for this is the
- <a href="#bugs">Bug-Tracker</a>) and patches. Go on, use the source
- and keep on hacking!
-</p>
-<p>
- You can reach me (Alex Barton) via E-Mail:
- <a href="mailto:alex@barton.de">alex@barton.de</a>.
-</p>
-
-<h2 id="why">Advantages</h2>
-<p>
- Why should you use ngIRCd? Because ...
-</p>
-<ul>
- <li>there are no problems with servers on changing or non-static IP addresses.
- <li>there is a small and lean configuration file.
- <li>there is a free, modern and open source C source code.
- <li>it is still under active development.
-</ul>
-
-<h2 id="platforms">Supported platforms</h2>
-<p>
- ngIRCd is tested on a regular basis on the following platform
- (version numbers used in parenthesis). These are the officially
- supported systems.
-</p>
-<ul>
- <li>AIX (3.2.5, IBM XL C Compiler)
- <li>A/UX (3.x, original Apple C Compiler or GNU C)
- <li><a href="http://www.freebsd.org/">FreeBSD</a> (4.5/i386, GNU C)
- <li><a href="http://www.hp.com/">HP-UX</a> (10.20, GNU C)
- <li><a href="http://www.hp.com/">HP-UX</a> (9.10/m68k, HP-UX cc)
- <li>IRIX (6.5, SGI MIPSpro C 7.30)
- <li><a href="http://www.linux.org/">Linux</a> (2.2.x/i386, 2.4.x/i386 and 2.4.x/hppa, GNU C)
- <li><a href="http://www.apple.com/macosx/">Mac OS X</a> (10.x, GNU C 2.95.x/3.x)
- <li><a href="http://www.netbsd.org/">NetBSD</a> (1.5.2/i386 and 1.5.3/m68k, GNU C)
- <li><a href="http://www.obenbsd.org/">OpenBSD</a> (3.4/i386)
- <li><a href="http://www.sun.com/">Solaris</a> (2.5.1 and 2.6, GNU C)
- <li>Windows with <a href="http://sources.redhat.com/cygwin/">Cygwin</a> (GNU C)
-</ul>
-<p>
- As ngIRCd relies on UNIX standards and uses GNU automake and GNU autoconf
- there are good chances that it also supports UNIX-based operating systems.
-</p>
-
-<h2 id="docu">Documentation</h2>
-<p>
- There's a bit of documentation in the source code package. One's located
- in the main directory (e.g. INSTALL, README, NEWS and COPYING) others in
- subdirectories like <code>&quot;doc&quot;</code> (e.g. GIT.txt, FAQ.txt
- and sample configuration files like sample-ngircd.conf).
-</p>
-<p>Parts of the documentation are available here:</p>
-<ul>
- <li><a href="doc/README">README</a>
- <li><a href="doc/INSTALL">INSTALL</a>
-</ul>
-<ul>
- <li><a href="doc/AUTHORS">AUTHORS</a>
- <li><a href="doc/COPYING">COPYING</a>
- <li><a href="doc/GIT.txt">GIT.txt</a>
- <li><a href="doc/ChangeLog">ChangeLog</a>
- <li><a href="doc/FAQ.txt">FAQ.txt</a>
- <li><a href="doc/NEWS">NEWS</a>
- <li><a href="doc/Platforms.txt">Platforms.txt</a>
- <li><a href="doc/Protocol.txt">Protocol.txt</a>
- <li><a href="doc/RFC.txt">RFC.txt</a>
- <li><a href="doc/SSL.txt">SSL.txt</a>
-</ul>
-<ul>
- <li><a href="doc/sample-ngircd.conf">sample-ngircd.conf</a>
-</ul>
-<ul>
- <li><a href="doc/README-AUX.txt">README-AUX.txt</a>
- <li><a href="doc/README-BeOS.txt">README-BeOS.txt</a> (German)
-</ul>
-
-<h2 id="ml">Mailing List</h2>
-<p>
- There is a mailing list which deals with the &quot;technical&quot;
- questions concerning ngIRCd: compilation, installation, configuration,
- and the further development. Updates and news are announced there.
-</p>
-<p>Please subscribe using the <a href="http://arthur.barton.de/mailman/listinfo/ngircd-ml">homepage of the list</a>.
-<p>All postings are archived <a href="http://arthur.barton.de/pipermail/ngircd-ml/">here</a>.
-
-<h2 id="install">Installation</h2>
-<p>
- ngIRCd's target are systems based on or similar to UNIX. There
- shouldn't be any problem on a fairly modern UNIX that's supported by
- GNU automake and GNU autoconf. If you run into compile problems
- perhaps you should give GNU C a try (version 2.95 or newer).
-</p>
-<p>
- Typical usage is:
-</p>
-<blockquote><p><code>
- tar xzf ngircd-&lt;version&gt;.tar.gz<br>
- cd ngircd-&lt;version&gt;<br>
- ./configure<br>
- make
-</code></p></blockquote>
-<p>
- Now there's the binary executable server file in <code>src/ngircd</code>
- (&quot;<code>ngircd</code>&quot; in most cases).
-</p>
-<blockquote><p><code>
- make install
-</code></p></blockquote>
-<p>
- The binary executable is now installed in <code>/usr/local/sbin</code>.
-</p>
-<p>
- The server looks for the configuration file <code>ngircd.conf</code> in
- <code>/usr/local/etc</code>. A sample configuration file can be found in
- <code>doc</code>.
-</p>
-<p>
- Further help on installation and configuration can be found in
- <code><a href="doc/INSTALL">INSTALL</a></code>.
-</p>
-
-<h2 id="download">Download</h2>
-<h3 id="source">Source Code</h3>
-<dl>
- <dt><strong>ngIRCd 0.12.1</strong> (2008-07-09):</dt>
- <dd>
-       <p>Server: <em>berlios.de</em> (<a href="ftp://ftp.berlios.de/pub/ngircd/">ftp</a>)</p>
-       <ul>
-               <li>ngircd-0.12.1.tar.gz:
-                   <a href="ftp://ftp.berlios.de/pub/ngircd/ngircd-0.12.1.tar.gz">ftp</a>
-       </ul>
-       <p>Server: <em>ngircd.barton.de</em> (<a href="ftp://ngircd.barton.de/pub/ngircd/">ftp</a>)</p>
-       <ul>
-               <li>ngircd-0.12.1.tar.gz:
-                   <a href="ftp://ngircd.barton.de/pub/ngircd/ngircd-0.12.1.tar.gz">ftp</a>.
-       </ul>
- </dd>
- <dt><strong>ngIRCd 13~rc1</strong> (2008-11-21):</dt>
- <dd>
-       <p>Server: <em>berlios.de</em> (<a href="ftp://ftp.berlios.de/pub/ngircd/">ftp</a>)</p>
-       <ul>
-               <li>ngircd-13~rc1.tar.gz:
-                   <a href="ftp://ftp.berlios.de/pub/ngircd/ngircd-13~rc1.tar.gz">ftp</a>
-       </ul>
-       <p>Server: <em>ngircd.barton.de</em> (<a href="ftp://ngircd.barton.de/pub/ngircd/">ftp</a>)</p>
-       <ul>
-               <li>ngircd-13~rc1.tar.gz:
-                   <a href="ftp://ngircd.barton.de/pub/ngircd/ngircd-13~rc1.tar.gz">ftp</a>.
-       </ul>
- </dd>
-</dl>
-<p>
- All previous released versions, GnuPG signatures as well as available test
- releases of upcoming versions are available via FTP from
- <a href="ftp://ngircd.barton.de/pub/ngircd/">ngircd.barton.de</a> and
- <a href="ftp://ftp.berlios.de/pub/ngircd/">ftp.berlios.de</a>.
-</p>
-<h3 id="packages">Packages</h3>
-<p>
- If you are using one of the following distributions, you can use their packages:
-</p>
-<ul>
- <li>
-  <a href="http://amiga.sourceforge.net/">Amiga.sf</a>:
-  <a href="http://amiga.sourceforge.net/index.php?showpackage=ngIRCd">Port</a>
- </li>
- <li>
-  <a href="http://www.debian.org/">Debian Linux</a>:
-  <a href="http://packages.debian.org/ngircd">deb</a>
- </li>
- <li>
-  <a href="http://fedoraproject.org/">Fedora Linux</a>:
-  <a href="https://admin.fedoraproject.org/pkgdb/packages/name/ngircd/">rpm</a>
- </li>
- <li>
-  <a href="http://www.finkproject.org/">Fink Project</a>:
-  <a href="http://pdb.finkproject.org/pdb/package.php/ngircd">Port</a>
- </li>
- <li>
-  <a href="http://www.freebsd.org/">FreeBSD</a>:
-  <a href="http://www.freebsd.org/cgi/ports.cgi?query=ngircd&amp;stype=all">Port</a>
- </li>
- <li>
-  <a href="http://www.gentoo.org/">Gentoo Linux</a>:
-  <a href="http://packages.gentoo.org/package/net-irc/ngircd">ebuild</a>
- </li>
- <li>
-  <a href="http://www.macports.org/">Mac Ports</a>:
-  <a href="http://trac.macports.org/browser/trunk/dports/irc/ngircd/Portfile">Port</a>
- <li>
-  <a href="http://www.opensuse.org/">OpenSUSE</a>:
-  <a href="http://software.opensuse.org/download/server:/irc/">rpm</a>
- </li>
- <li>
-  <a href="http://www.ubuntu.com/">Ubuntu Linux</a>:
-  <a href="http://packages.ubuntu.com/ngircd">deb</a>
- </li>
-</ul>
-<p>
- <q>Inofficial</q> packages:
-</p>
-<ul>
- <li>
-  <a href="http://www.debian.org/">Debian Linux</a>:
-  <a href="ftp://arthur.barton.de/debian/pool/main/n/ngircd/">deb</a>
-  (Autor: Alex Barton)
- </li>
-</ul>
-
-<h2 id="people">Contact</h2>
-<p>
- Idea and most parts of the current code:
- Alexander Barton (<a href="mailto:alex@barton.de">alex@barton.de</a>).
-</p>
-<p>
- Thanks to
- Ilja Osthoff (<a href="mailto:ilja@glide.ath.cx">ilja@glide.ath.cx</a>)
- for translating parts of the documentation into english and
- G&ouml;tz Hoffart (<a href="mailto:goetz@hoffart.de">goetz@hoffart.de</a>)
- for translating the web page.
-</p>
-<p>
- If you find bugs or have some ideas for enhancements, please file them
- into the <a href="#bugs">bug tracker</a>. In addition, there is a
- <a href="#ml">mailing list</a> for discussions concerning the ngIRCd.
-</p>
-<p>BTW: Patches are welcome ;-)</p>
-<p>ngIRCd on IRC: <a href="irc://irc.barton.de/ngircd">irc://irc.barton.de/ngircd</a>.</p>
-<h2 id="git">GIT Repository</h2>
-<p>
- The source and all files belonging to ngIRCd are managed using
- <a hreflang="en" href="http://git.or.cz/">GIT</a>.
- Anonymous access is available, read: <a href="doc/GIT.txt">GIT.txt</a>.
-</p>
-<p>
- The repository is online available through HTTP:
- <a href="http://ngircd.barton.de/cgi-bin/gitweb.cgi?p=ngircd.git">ngIRCd GIT Reposidtory</a>.
-</p>
-
-<h2 id="bugs">Bug Tracker</h2>
-<p>
- In order to keep track of feature requests and found bugs there's a
- Bug Tracking system: <a href="http://ngircd.barton.de/bugzilla/index.cgi">Bugzilla</a>
-</p>
-<p>
- In case you found a bug please check
- <a href="http://ngircd.barton.de/bugzilla/enter_bug.cgi">Bug-Report</a>
- and describe the circumstances. Thank you!
-</p>
-<p>
- In addition you can <a href="http://ngircd.barton.de/bugzilla/query.cgi">inform</a>
- about known and perhaps fixed bugs.
-</p>
-
-<h2 id="history">History</h2>
-<p>
- Please read the files
- <a href="doc/NEWS">NEWS</a> and
- <a href="doc/ChangeLog">ChangeLog</a>
- for detailed information.
-</p>
-
-<!-- Footer -->
-<hr style="margin-top: 0.75em;">
-<p style="text-align: center">
- Thanks to:<br>
- <a href="http://developer.berlios.de"><img src="http://developer.berlios.de/sflogo.php?group_id=546&amp;type=1" width="124" height="32" alt="BerliOS Logo" style="border: 0"></a>
-</p>
-<hr>
-<p>
- <img src="valid-html401.gif" style="float: right;" alt="Valid HTML 4.01!" height="31" width="88">
- <small>
-  Version: $Id$
-  <br>
-  <a hreflang="en" href="http://validator.w3.org/check?uri=http%3A%2F%2Fngircd.barton.de%2Findex.html.en">Validate</a> page.<br>
-  Contact: Alexander Barton, E-Mail: <a href="mailto:alex@barton.de">alex@barton.de</a>.<br>
-  Thanks to <a href="mailto:goetz@hoffart.de">G&ouml;tz Hoffart</a> for cleaning up this page and the english translation!
- </small>
-</p>
-
-</body>
-</html>
diff --git a/index.php.de b/index.php.de
new file mode 100644 (file)
index 0000000..b1c45fa
--- /dev/null
@@ -0,0 +1,87 @@
+<?php
+       include('includes/common.php');
+       begin_page('de');
+?>
+<h2>
+       ngIRCd
+</h2>
+<p>
+       ngIRCd ist ein freier Open-Source Server für den Internet Relay Chat
+       (IRC), der unter der GNU General Public License
+       (<a href="http://www.gnu.org/licenses/gpl.html" hreflang="en">GPL</a>)
+       entwickelt wird. Er ist von Grund auf neu geschrieben, basiert also
+       nicht wie die meisten anderen IRC-Daemons auf dem „Urvater“, dem
+       Daemon des IRCNet.
+</p>
+<p class="hint">
+       <em>Tip:</em>
+       bei freshmeat.net gibt es einen
+       <a href="http://freshmeat.net/projects/ngircd/">Projekteintrag</a>
+       für ngIRCd. Dort ist es z. B. möglich, sich über neue Versionen zu
+       informieren und via E-Mail benachrichtigen zu lassen.
+</p>
+<p class="btw">
+       BTW: There's an <a href="index.php.en">English</a> version of this
+       page, too.
+</p>
+<?php
+       include('common/mirrors.inc');
+?>
+<h2 id="why">
+       Vorteile
+</h2>
+<p>
+       Warum man den ngIRCd benutzen sollte? Unter anderem aus diesen
+       Gründen:
+</p>
+<ul>
+       <li>
+               keine Probleme mit Servern, deren IP-Adressen dynamisch sind
+       </li>
+       <li>
+               übersichtliche (schlanke) Konfigurationsdatei
+       </li>
+       <li>
+               frei verfügbarer, moderner und „aufgeräumter“ C-Quellcode
+       </li>
+       <li>
+               ngIRCd wird seit <?php echo date("Y")-2001 ?> Jahren aktiv
+               weiter entwickelt
+       </li>
+</ul>
+<div id="preview">
+       <code><a id="v_toggle" href="#" name="v_toggle">ngircd --help</a></code><br>
+       <div id="vertical_slide">
+               <samp>ngircd 13-SYSLOG+ZLIB+SSL+TCPWRAP+IDENT+IRCPLUS+IPv6-x86_64/pc/linux-gnu
+Copyright (c)2001-2008 Alexander Barton (&lt;alex@barton.de&gt;) and Contributors.
+Homepage: &lt;http://ngircd.barton.de/&gt;
+
+This is free software; see the source for copying conditions. There is NO
+warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+
+  -f, --config &lt;f&gt;   use file &lt;f&gt; as configuration file
+  -n, --nodaemon     don't fork and don't detach from controlling terminal
+  -p, --passive      disable automatic connections to other servers
+  -t, --configtest   read, validate and display configuration; then exit
+  -V, --version      output version information and exit
+  -h, --help         display this help and exit</samp>
+       </div>
+</div>
+<h2>
+       Einfachheit
+</h2>
+<p>
+       ngIRCd unterstützt aktiv eine ganze Reihe von Plattformen: Linux,
+       BSD, Mac OS X. Aber auch auf Solaris, HP-UX, AIX und anderen Unices
+       läuft ngIRCd.
+</p>
+<p>
+       Nach der Installation, die via Paketinstallation oder
+       configure-make-make-install erfolgt, kann man nach dem Editieren der
+       ngircd.conf bereits nach 5 Minuten loslegen&nbsp;– geändert werden
+       müssen dort nur wenige Zeilen, der Rest ist optional.
+</p>
+<?php
+       end_page();
+?>
+
diff --git a/index.php.en b/index.php.en
new file mode 100644 (file)
index 0000000..e362c77
--- /dev/null
@@ -0,0 +1,84 @@
+<?php
+       include('includes/common.php');
+       begin_page('en');
+?>
+<h2>
+       ngIRCd
+</h2>
+<p>
+       ngIRCd is a free open source server for Internet Relay Chat (IRC),
+       which is being developed under the GNU General Public License
+       (<a href="http://www.gnu.org/licenses/gpl.html" hreflang="en">GPL</a>).
+       It has been written from scratch and is consequently, unlike most
+       other IRC daemons, not based on the originator, the daemon of the
+       IRCNet.
+<p class="hint">
+       <em>Hint:</em>
+       at freshmeat.net there's an
+       <a href="http://freshmeat.net/projects/ngircd/">entry</a>
+       for the ngIRCd project. You can inform about new releases and get
+       update notifications via E-Mail.
+</p>
+<p class="btw">
+       BTW: Von dieser Seite gibt es auch eine
+       <a href="index.php.de">deutsche</a> Version.
+</p>
+<?php
+       include('common/mirrors.inc');
+?>
+<h2 id="why">
+       Advantages
+</h2>
+<p>
+       Why you should be using ngIRCd? For these and other reasons:
+</p>
+<ul>
+       <li>
+               no problems with servers that have dynamic IP addresses
+       </li>
+       <li>
+               well arranged (lean) configuration file
+       </li>
+       <li>
+               freely available, modern and tidy C-source
+       </li>
+       <li>
+               ngIRCd is being actively developed since
+               <?php echo date("Y")-2001 ?> years.
+       </li>
+</ul>
+<div id="preview">
+       <code><a id="v_toggle" href="#" name="v_toggle">ngircd --help</a></code><br>
+       <div id="vertical_slide">
+               <samp>ngircd 13-SYSLOG+ZLIB+SSL+TCPWRAP+IDENT+IRCPLUS+IPv6-x86_64/pc/linux-gnu
+Copyright (c)2001-2008 Alexander Barton (&lt;alex&#64;barton.de&gt;) and Contributors.
+Homepage: &lt;http://ngircd.barton.de/&gt;
+
+This is free software; see the source for copying conditions. There is NO
+warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+
+  -f, --config &lt;f&gt;   use file &lt;f&gt; as configuration file
+  -n, --nodaemon     don't fork and don't detach from controlling terminal
+  -p, --passive      disable automatic connections to other servers
+  -t, --configtest   read, validate and display configuration; then exit
+  -V, --version      output version information and exit
+  -h, --help         display this help and exit</samp>
+       </div>
+</div>
+<h2>
+       Simplicity
+</h2>
+<p>
+       ngIRCd supports a whole range of platforms: Linux, BSD, Mac OS X, but
+       ngIRCD also runs on Solaris, HP-UX, AIX and other Unices.
+</p>
+<p>
+       After the installation of ngIRC, which is executed via packet
+       installation or configure-make-make-install, and once you have edited
+       the ngircd.conf, you can get started after 5 minutes.&nbsp;– only a
+       few lines need adapting, the rest is purely optional.
+</p>
+<?php
+       end_page();
+?>
+
diff --git a/news.php.de b/news.php.de
new file mode 100644 (file)
index 0000000..01eef95
--- /dev/null
@@ -0,0 +1,34 @@
+<?php
+       include('includes/common.php');
+       begin_page('de', 'Neuigkeiten');
+?>
+<h2>
+       Neuigkeiten &amp; Historie
+</h2>
+<h3 id="status">
+       Status
+</h3>
+<p>
+       Die aktuelle stabile Version ist <strong>Release 13</strong>,
+       siehe die <a href="download.php.de">Download-M&ouml;glichkeiten</a>.
+</p>
+<p class="security">
+       <strong>Achtung:</strong>
+       ngIRCd-Versionen vor 0.10.4 beinhalten einen Fehler, der (auch remote)
+       dazu genutzt werden kann, den Daemon zum Absturz zu bringen. Alle
+       Installationen sollten auf Version 0.10.4 (oder neuer) aktualisiert
+       werden!
+</p>
+<h3 id="history">
+       Historie
+</h3>
+<p>
+       Die <a href="doc/NEWS">NEWS</a>-Datei und das
+       <a href="doc/ChangeLog">ChangeLog</a>
+       sind (in englischer Sprache) online verf&uuml;gbar sowie in den
+       Archiven enthalten.
+</p>
+<?php
+       end_page();
+?>
+
diff --git a/news.php.en b/news.php.en
new file mode 100644 (file)
index 0000000..858691f
--- /dev/null
@@ -0,0 +1,32 @@
+<?php
+       include('includes/common.php');
+       begin_page('en', 'News');
+?>
+<h2>
+       News &amp; History
+</h2>
+<h3 id="status">
+       Status
+</h3>
+<p>
+       The current, sound version is <strong>Release 13</strong>,
+       please also refer to the <a href="download.php.en">Download</a>.
+</p>
+<p class="security">
+       <strong>Caution:</strong>
+       ngIRCd-versions previous to 0.10.4 contain a bug which can be used
+       (also remotely) to crash the daemon. All installations should be
+       updated to version 0.10.4 or newer!
+</p>
+<h3 id="history">
+       History
+</h3>
+<p>
+       The <a href="doc/NEWS">NEWS</a>-file and the
+       <a href="doc/ChangeLog">ChangeLog</a>
+       are available online and in the archives.
+</p>
+<?php
+       end_page();
+?>
+
index ae8265f870a52b09baabc96c067a025ed0eaaa38..e5ef712a3d174e6900fc257527c6f175fa809b14 100644 (file)
@@ -445,7 +445,7 @@ Zur&uuml;ck zur <a href="http://arthur.ath.cx/%7Ealex/ngircd/index.html">ngIRCd-
 </small>
 </p>
 
-<p>$Id$</p>
+<p>$Id: platforms.html,v 1.13 2006/10/09 09:36:20 alex Exp $</p>
 </div>
 </body>
 </html>
index a33c997693072aa6b61bf47cec6045cc25afcae8..49a01d5aa0df5b59096a46672c08f278999793ad 100644 (file)
--- a/style.css
+++ b/style.css
@@ -2,7 +2,7 @@
  * Cascading Style Sheet for ngIRCd homepage
  * http://arthur.ath.cx/~alex/ngircd/
  *
- * $Id$
+ * $Id: style.css,v 1.6 2008/02/26 19:31:44 alex Exp $
  */
 
 BODY {
diff --git a/support.php.de b/support.php.de
new file mode 100644 (file)
index 0000000..8a40224
--- /dev/null
@@ -0,0 +1,70 @@
+<?php
+       include('includes/common.php');
+       begin_page('de', 'Support');
+?>
+<h2>
+       Support
+</h2>
+<h3 id="people">
+       Kontakt
+</h3>
+<p>
+       Die Idee, den ngIRCd zu entwickeln, hatte Alexander Barton
+       (<a href="mailto:alex@barton.de">alex@barton.de</a>);
+       von ihm sind fast alle Teile des heutigen Source-Codes.
+</p>
+<p>
+       Solltest du Bugs finden oder Ideen f&uuml;r Erweiterungen haben, trage
+       diese am Besten in den <a href="#bugs">Bug-Tracker</a> des ngIRCd ein.
+       F&uuml;r Diskussionen und Fragen rund um den ngIRCd ist zudem eine
+       <a href="#ml">Mailingliste</a> eingerichtet.
+</p>
+<p>
+       BTW: &uuml;ber Patches und weitere „Mitstreiter“ freuen wir uns immer!
+</p>
+<p>
+       ngIRCd im IRC:
+       <a href="irc://irc.barton.de/ngircd">irc://irc.barton.de/ngircd</a>.
+</p>
+<h3 id="ml">
+       Mailingliste
+</h3>
+<p>
+       Es gibt eine (englischsprachige) Mailingliste, die sich mit allen
+       „technischen“ Fragen rund um den ngIRCd besch&auml;ftigt: Compilieren,
+       Installieren, Konfigurieren und auch die weitere Entwicklung und
+       Erweiterungen. Zudem werden hier Updates und Neuerungen
+       angek&uuml;ndigt.
+</p>
+<p>
+       Die Anmeldung erfolgt &uuml;ber die
+       <a href="http://arthur.barton.de/mailman/listinfo/ngircd-ml">Hauptseite der Mailingliste</a>.
+</p>
+<p>
+       Alle Beitr&auml;ge werden zudem in einem
+       <a href="http://arthur.barton.de/pipermail/ngircd-ml/">Archiv</a>
+       gespeichert.
+</p>
+<h4 id="gmane">
+       GMANE
+</h4>
+<p>
+       Alle Mails der Mailingliste werden zudem von
+       <a href="http://gmane.org/">GMANE</a> als Gruppe
+       <a href="http://dir.gmane.org/gmane.network.irc.ngircd">gmane.network.irc.ngircd</a>
+       gef&uuml;hrt und kann dort &uuml;ber ein Web-Frontend, als RSS-Feed
+       oder &uuml;ber NNTP gelesen werden.
+</p>
+<h3>
+       Sonstiges
+</h3>
+<p>
+       Dank geb&uuml;hrt allen Mitwirkenden und denjenigen, die sich mit
+       Feedback gemeldet haben. Eine Liste, die keinen Anspruch auf
+       Vollst&auml;ndigkeit erhebt, findet sich in der Datei
+       <a href="doc/AUTHORS">doc/AUTHORS</a>.
+</p>
+<?php
+       end_page();
+?>
+
diff --git a/support.php.en b/support.php.en
new file mode 100644 (file)
index 0000000..d629c9f
--- /dev/null
@@ -0,0 +1,68 @@
+<?php
+       include('includes/common.php');
+       begin_page('en', 'Support');
+?>
+<h2>
+       Support
+</h2>
+<h3 id="people">
+       Contact
+</h3>
+<p>
+       Alexander Barton
+       (<a href="mailto:alex&#64;barton.de">alex&#64;barton.de</a>)
+       had the idea to develop the ngIRCD; he is responsible for almost all
+       parts of today's soucre code.
+</p>
+<p>
+       If you find any bugs or you have any ideas on developing ngIRCD, it
+       is best to put them into the <a href="#bugs">Bug-Tracker</a> of the
+       ngIRCd. There is also a
+       <a href="#ml">mailing list</a> for discussions and questions concerning
+       the ngIRCd.
+</p>
+<p>
+       BTW: we are always happy any patches or additional peers!
+</p>
+<p>
+       ngIRCd in IRC:
+       <a href="irc://irc.barton.de/ngircd">irc://irc.barton.de/ngircd</a>.
+</p>
+<h3 id="ml">
+       Mailing list
+</h3>
+<p>
+       There is an (English) mailing list, which covers all technical
+       questions around the ngIRCd: compilation, installation, configuration
+       and further development and upgrading. Furthermore, it is used to
+       announce updates and innovations.
+</p>
+<p>
+       You can sign up via the
+       <a href="http://arthur.barton.de/mailman/listinfo/ngircd-ml">homepage of the mailing list</a>.
+</p>
+<p>
+       All posts are archived in the
+       <a href="http://arthur.barton.de/pipermail/ngircd-ml/">list archive.</a>
+</p>
+<h4 id="gmane">
+       GMANE
+</h4>
+<p>
+       All mails from the mailing list are also managed by
+       <a href="http://gmane.org/">GMANE</a> as a group
+       <a href="http://dir.gmane.org/gmane.network.irc.ngircd">gmane.network.irc.ngircd</a>
+       and can be read via a web frontend, RSS-feed or NNTP.
+</p>
+<h3>
+       Misc
+</h3>
+<p>
+       Many thanks to all who contributed by sending in feedback. A list
+       (with no claim to be complete) of all contributors can be found in
+       the file <a href="doc/AUTHORS">doc/AUTHORS</a>.
+</p>
+<?php
+       end_page();
+?>
+
diff --git a/valid-html401.gif b/valid-html401.gif
deleted file mode 100644 (file)
index a444440..0000000
Binary files a/valid-html401.gif and /dev/null differ