Omnimaga: The Coders Of Tomorrow
Welcome, Guest. Please login or register.
 
Omnimaga: The Coders Of Tomorrow
19 June, 2013, 10:33:31 *
Welcome, Guest. Please login or register.

Login with username, password and session length
 
   home   news downloads projects tutorials misc forums rules new posts irc about Login Register  
+-OmnomIRC

You must Register, be logged in and have at least 40 posts to use this shout-box! If it still doesn't show up afterward, it might be that OmnomIRC is disabled for your group or under maintenance.

Note: You can also use an IRC client like mIRC, X-Chat or Mibbit to connect to an EFnet server and #omnimaga.

Pages: [1] 2   Go Down
  Print  
Author Topic: OmnomIRC Protocol Information -  (Read 1158 times) Bookmark and Share
0 Members and 1 Guest are viewing this topic.
Netham45
WOOOOOO
President
LV11 Super Veteran (Next: 3000)
*
Offline Offline

Gender: Male
Last Login: 17 June, 2013, 01:19:16
Date Registered: 26 August, 2008, 07:35:31
Location: Denver, Colorado
Posts: 2296


Topic starter
Total Post Ratings: +208

View Profile WWW
« on: 20 June, 2011, 07:22:28 »
0

OmnomIRC Protocol Stuffs (Giant wall of post go!)
All code is javascript
Required functions:

addLine(ircMessage) - This function is called from the load.php to load messages.
addUser(userMessage) - This function is called from the load.php to keep track of users.


The ircMessage message is pretty simple.
There is a common header.

Common Header:
   Message Number:Message Type:Online:Time
   Message Number -- Corresponds to the auto-incrementing primary key in the SQL DB. You will need to put this on the update.php call to not return already-parsed lines.
   Message Type -- pm,message,action,join,part,kick,quit,mode,nick,topic,curline, check the next section.
   Online -- Boolean value to tell if the source was from OmnomIRC or IRC. I use this to check if I should apply links to OmnomIRC names.
   Time -- UNIX Timestamp

After the common header, all elements are base64 encoded. Check btoa.js for a cross-browser base64 implementation.
   
Specific Types:
   pm, message, action, part, quit, mode, topic - These share paramaters
      :Name 1:Message
   join
      :Name 1
   nick
      :Name 1:Name 2
   curline
      No parts, used to set the current line.
      
Examples:
   pm, message, action, part, quit, mode, topic
   Decoded:
      1:message:0:12345:Netham45:Test
   Encoded:
      1:message:0:12345:TmV0aGFtNDU=:VGVzdA==
   
   Join
   Decoded:
      1:join:0:12345:Netham45
   Encoded:
      1:message:0:12345:TmV0aGFtNDU=
   Nick
   Decoded:
      1:nick:0:12345:Netham45:Netham46
   Encoded:
      1:nick:0:12345:TmV0aGFtNDU=:TmV0aGFtNDY=
   curline: -- This does not return a proper timestamp, as it is not actually matched to an event in the SQL DB.
      1:curline:0:0
      
To parse in javascript, this is a simple method (assuming you're using the btoa.js included):


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
function addLines(message)
{
var messageParts = message.split(":");
for (var i=4;i<messageParts.length;i++)
messageParts[i] = base64.decode(messageParts[i]);
curLine = messageParts[0]; //This is a global var for a reason
var type = messageParts[1];
var online = messageParts[2];
var time = new Date(messageParts[3]);
textBox.innerHTML += "[" + time.toLocaleString() + "] ";
switch (type)
{
case "message":
textBox.innerHTML += "&lt; " + messageParts[4] + " &gt; " + messageParts[5];
break;
case "action":
...
}
textBox.innerHTML += "<br/>";
}

userMessage information:
These are simpler, only composed of two parts. They are all the same. They are only sent from the load.php for now.

userName:Online

userName is a base64 encoded name
Online is a boolean value for if they're on OmnomIRC or not

Example:
Decoded:
   Netham45:1
Encoded:
   TmV0aGFtNDU=:1
   
Here is the code from Omnom_Parser.js that deals with users:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
//******************************
// Userlist Start              *
//******************************
userListContainer = document.getElementById("UserListArrContainer");
userListDiv = document.getElementById("UserList");
UserListArr = array();

function addUser(user)
{
UserListArr.push(user);
}

function addUserJoin(user)
{
if(!hasLoaded) return;
var userp = base64.encode(user) + ":0";
UserListArr.push(userp);
parseUsers();
}

function removeUser(user)
{
if(!hasLoaded) return;
for (i in UserListArr)
{
parts = UserListArr[i].split(":");
if (base64.decode(parts[0]) == user)
UserListArr.splice(i,1);
}
parseUsers();
}

function parseUsers()
{
if (!userListDiv || userListDiv == null)
userListDiv = document.getElementById("UserList");
userText = "";
i = 0;
UserListArr.sort(function(a,b)
{
var al=base64.decode(a).toLowerCase(),bl=base64.decode(b).toLowerCase();
return al==bl?(a==b?0:a<b?-1:1):al<bl?-1:1;
});
for (i=0;i<UserListArr.length;i++)
{
parts = UserListArr[i].split(":");
if (parts[1] == "0") userText = userText + "#" + base64.decode(parts[0]) + "<br/>";
if (parts[1] == "1")
userText = userText + '<a target="_parent" href="http://www.omnimaga.org/index.php?action=ezportal;sa=page;p=13&userSearch=' +base64.decode(parts[0]) +
'"><img src="http://netham45.org/irc/efnet/ouser.png" alt="Omnimaga User" title="Omnimaga User" border=0 width=8 height=8 />' + base64.decode(parts[0]) + '</a><br/>';
if (parts[1] == "2") userText = userText + "!" + base64.decode(parts[0]) + "<br/>";
}
userText = userText + "<br/><br/>";
userListDiv.innerHTML = userText;
}

//******************************
// Userlist End                *
//******************************


To "subscribe" to updates:
Request load.php. This returns a javascript file that calls addLine and addUser
nick and signature are optional, they are only used to return PMs. Channel is required for what channel you're querying. Signature and nick need to be in place to request PMs.
All paramaters except count are base64 encoded.

Here's the URL:
Decoded:
   http://omnom.omnimaga.org/OmnomIRC_Dev/load.php?count=50&channel=#Omnimaga&nick=Netham45&signature=No sig for you!
Encoded:
   http://omnom.omnimaga.org/OmnomIRC_Dev/load.php?count=50&channel=I09tbmltYWdh&nick=TmV0aGFtNDU=&signature=Tm8gc2lnIGZvciB5b3Uh

   
Once load.php is parsed, you need to request update.php. This does not return a javascript file, but instead just returns the message.
lineNum is not base64 encoded, but everything else is.

Here's the URL:
Decoded:
   http://omnom.omnimaga.org/OmnomIRC_Dev/update.php?lineNum=1&channel=#omnimaga&nick=Netham45&signature=No sig for you!   
Encoded:
   http://omnom.omnimaga.org/OmnomIRC_Dev/update.php?lineNum=1&channel=I09tbmltYWdh&nick=TmV0aGFtNDU=&signature=Tm8gc2lnIGZvciB5b3Uh

   
Here is the code from Omnom_Parser that handles 'subscribing' and updating:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
function load()
{
var body= document.getElementsByTagName('body')[0];
var script= document.createElement('script');
script.type= 'text/javascript';
script.src= 'Load.php?count=50&channel=' + base64_encode("#Omnimaga") + "&nick=" + base64.encode("Netham45") + "&signature=" + base64.encode("lolnope");
script.onload= function(){parseUsers();startLoop();mBoxCont.scrollTop = mBoxCont.scrollHeight;hasLoaded = true;};
body.appendChild(script);
}

//******************************
// Start Request Loop functions*
//******************************
function startLoop()
{
xmlhttp=getAjaxObject();
if (xmlhttp==null) {
alert ("Your browser does not support AJAX! Please update for OmnomIRC compatibility.");
return;
}
xmlhttp.onreadystatechange=getIncomingLine;
sendRequest();
}

function sendRequest()
{
url = "http://omnom.omnimaga.org/OmnomIRC_Dev/Update.php?lineNum=" + curLine + "&channel=" + getChannelEn() + "&nick=" + base64.encode(parent.userName) + "&signature=" + base64.encode(parent.Signature);
xmlhttp.open("GET",url,true);
xmlhttp.send(null);
}

function getIncomingLine()
{
if (xmlhttp.readyState==4 || xmlhttp.readyState=="complete") {
if (xmlhttp.status == 200) addLine(xmlhttp.responseText); //Filter out 500s from timeouts
sendRequest();
}
}

function getAjaxObject()
{
xmlhttp=new XMLHttpRequest(); //Decent Browsers
if (!xmlhttp || xmlhttp == undefined || xmlhttp == null) xmlhttp=new ActiveXObject("Msxml2.XMLHTTP");  //IE7+
if (!xmlhttp || xmlhttp == undefined || xmlhttp == null) xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); //IE6-
return xmlhttp;
}

//******************************
// End Request Loop functions  *
//******************************
Logged

Creator of OmnomIRC and SpyBot45
Join LOPN(Lobsters Opposing Pink Names) now, help us fight back!
Message me for more information, and to join now!
Members: Graphmastur;Stefan Bauwens
HOLY SHIT, I HAVE A BLOG



                                     
Put this in your signature if you've played the original WFRNG
Juju
Evil Fluttershy (Site issues must be PM'ed to Netham45, Eeems, Shmibs, Deep Thought and AngelFish, not me.)
Coder Of Tomorrow
LV12 Extreme Poster (Next: 5000)
*
Online Online

Gender: Male
Last Login: Today at 10:16:18
Date Registered: 17 March, 2010, 07:46:57
Location: Québec, North Equestria
Posts: 4628


Total Post Ratings: +402

View Profile WWW
« Reply #1 on: 20 June, 2011, 07:24:20 »
0

Ah cool, an API. Will help me if I want to write an OmnomIRC client. Tongue
Logged

LuaIDE
Reuben Quest HD: The PC Remake
Zarmina Project: Play Read
Nspire I/O: Info Download


THEGAME
Spoiler for Other stuff:
Also Yuki "ジュジュ" Kagayaki
Support Casio-Scene against the attacks of matt @ matpac.co.uk ! For more information: Casio-Scene shuts down & Matt actions threads
Find what P+4zJ means and you get free candy! cc4daa9c4645bd123ed22e385ed701fd
#omnimaga on OmniNet, EFNet and Pesterchum
Omnimaga Owner and Former Administrator
Fan of My Little Jim Bauwens: Losing the Game is Magic
Proud member of POLN - Ponys Oppositing Lol Names
Member of OBEL - Omnimaga Board of the EFnrgelnicshh Language - Office Omnimagois de la Langue FArnagnlçaaiiss
あなたはこのゲームを失った
Spoiler for Old spoileryception stuff:

Spoiler for Coming soon...:
Indefinitely halted [|.........] 10%
OmnomIRC Mobile [||||......] 40% (argh threads >_<)
Spoiler for Current/Past TI-related projects:
The Axe Parser Wiki / Founder and maintainer
Keytar Hero [|||||_____] 50% Engine done, wackiness left to do (Halted)
OmniOS
VVVVVV [||||______] 40% (Made most of the engine, extremely glitchy) (Gave it to Leafy)
░█▀█░█░█░█▀▀░█▀█░█▀█░█▀█░▀█▀░█▀▄
░█▀█░▄▀▄░█▀▀░█▀█░█░█░█░█░░█░░█░█
v0.1.0
░▀░▀░▀░▀░▀▀▀░▀░▀░▀░▀░▀▀▀░▀▀▀░▀▀░[|||||||||¦] 95ish% (Completed)
tilibs-wii? [._________] 0% (Nope.)
Spoiler for Spoilers:
<!---->
wxWabbitemu Developer
Spoiler for Other Userbars:






<!--Everything done, got 90% Cheesy sudo apt-get install z80asm z80dasm-->
Spoiler for Quote:
We are in 2034. The situation on Earth is catastrophic. The ozone layer has been completely destroyed by the carbonic gas of automobiles, the chemical industries, and the poosh-poosh in little cans. In the end, the earth cooks under the rays of the sun. We must find a planet on which can live 6 billion idiots. The planetary federation turns to the strongest country in the world: Canada. It is Canadian knowledge that has allowed, on October 28, 2034, the launch of the spaceship Romano Fafard, which leaves earth to search the confines of the Universe. Where the hand of man has never set foot.
I hate TI right now
Quote from: jimbauwens
You make me lose the game
Everytime I read your name
Spoiler for The real answer to life, the universe and everything:
Spoiler for Old HTML stuff:
<div style="margin:20px; margin-top:5px"><div class="smallfont" style="margin-bottom:2px">Spoiler for This is another spoiler: <input type="button" value="Show" style="width:60px;font-size:10px;margin:0px;padding:0px;" onclick="window.location.replace('http://goo.gl/QMET');"></div><div class="alt2" style="margin: 0px; padding: 6px; border: 1px inset;"><div style="display: none; ">HAHAHA SUCCESSFUL RICKROLL IS SUCCESSFUL</div></div></div><!-- old avatars:
http://fc00.deviantart.net/fs71/f/2011/120/d/f/nepeta_nyan_cat_by_supuru-d3f8tcx.gif
http://th01.deviantart.net/fs70/PRE/i/2011/099/5/b/rainbow_dash_derping_by_moongazeponies-d3dmg7l.png
http://25.media.tumblr.com/tumblr_lqhvmtSIwo1qm2frqo1_1280.png--><!---->
I may or may not be inactive during work hours (9AM to 5PM EST, Monday to Friday), so for any inquiries please leave a message after the beep and I'll answer you when I have time. Beep. Nevermind, I'm on vacation now. Cheesy
Netham45
WOOOOOO
President
LV11 Super Veteran (Next: 3000)
*
Offline Offline

Gender: Male
Last Login: 17 June, 2013, 01:19:16
Date Registered: 26 August, 2008, 07:35:31
Location: Denver, Colorado
Posts: 2296


Topic starter
Total Post Ratings: +208

View Profile WWW
« Reply #2 on: 20 June, 2011, 07:29:00 »
0

I need a method for generating API keys, but once I come up with something I'll be making it so you can make things that send outgoing messages.
Logged

Creator of OmnomIRC and SpyBot45
Join LOPN(Lobsters Opposing Pink Names) now, help us fight back!
Message me for more information, and to join now!
Members: Graphmastur;Stefan Bauwens
HOLY SHIT, I HAVE A BLOG



                                     
Put this in your signature if you've played the original WFRNG
Jim Bauwens
Lua! Nspire! Linux!
Editor
LV10 31337 u53r (Next: 2000)
*
Offline Offline

Gender: Male
Last Login: Yesterday at 22:29:56
Date Registered: 28 February, 2011, 22:32:12
Location: Belgium
Posts: 1736


Total Post Ratings: +180

View Profile WWW
« Reply #3 on: 20 June, 2011, 09:54:56 »
0

Pretty nice that you are documenting and releasing everything!

Thanks Smiley
Logged

Netham45
WOOOOOO
President
LV11 Super Veteran (Next: 3000)
*
Offline Offline

Gender: Male
Last Login: 17 June, 2013, 01:19:16
Date Registered: 26 August, 2008, 07:35:31
Location: Denver, Colorado
Posts: 2296


Topic starter
Total Post Ratings: +208

View Profile WWW
« Reply #4 on: 20 June, 2011, 09:55:46 »
+1

Cheesy

I think right now I've got everything released that someone would need to set up and run their own copy of it, except for the documentation.
Logged

Creator of OmnomIRC and SpyBot45
Join LOPN(Lobsters Opposing Pink Names) now, help us fight back!
Message me for more information, and to join now!
Members: Graphmastur;Stefan Bauwens
HOLY SHIT, I HAVE A BLOG



                                     
Put this in your signature if you've played the original WFRNG
Jim Bauwens
Lua! Nspire! Linux!
Editor
LV10 31337 u53r (Next: 2000)
*
Offline Offline

Gender: Male
Last Login: Yesterday at 22:29:56
Date Registered: 28 February, 2011, 22:32:12
Location: Belgium
Posts: 1736


Total Post Ratings: +180

View Profile WWW
« Reply #5 on: 20 June, 2011, 10:11:55 »
0

When I got some time I'll try to setup a local version, without IRC (that should work, shouldn't it?)
Logged

Netham45
WOOOOOO
President
LV11 Super Veteran (Next: 3000)
*
Offline Offline

Gender: Male
Last Login: 17 June, 2013, 01:19:16
Date Registered: 26 August, 2008, 07:35:31
Location: Denver, Colorado
Posts: 2296


Topic starter
Total Post Ratings: +208

View Profile WWW
« Reply #6 on: 20 June, 2011, 10:14:49 »
0

Yea. You'll need to comment a bit of load.php out to remove the Omnimaga userlist (and prolly remove some other Omni-specific coding, like the username links).
Logged

Creator of OmnomIRC and SpyBot45
Join LOPN(Lobsters Opposing Pink Names) now, help us fight back!
Message me for more information, and to join now!
Members: Graphmastur;Stefan Bauwens
HOLY SHIT, I HAVE A BLOG



                                     
Put this in your signature if you've played the original WFRNG
Jim Bauwens
Lua! Nspire! Linux!
Editor
LV10 31337 u53r (Next: 2000)
*
Offline Offline

Gender: Male
Last Login: Yesterday at 22:29:56
Date Registered: 28 February, 2011, 22:32:12
Location: Belgium
Posts: 1736


Total Post Ratings: +180

View Profile WWW
« Reply #7 on: 20 June, 2011, 10:16:18 »
0

ok, thanks Smiley
Logged

Netham45
WOOOOOO
President
LV11 Super Veteran (Next: 3000)
*
Offline Offline

Gender: Male
Last Login: 17 June, 2013, 01:19:16
Date Registered: 26 August, 2008, 07:35:31
Location: Denver, Colorado
Posts: 2296


Topic starter
Total Post Ratings: +208

View Profile WWW
« Reply #8 on: 20 June, 2011, 10:17:29 »
0

On that note, I've actually been tossing around the idea of trying to get a couple people to work with me on it to come up with more of a finalized product. Anyone interested in that?
Logged

Creator of OmnomIRC and SpyBot45
Join LOPN(Lobsters Opposing Pink Names) now, help us fight back!
Message me for more information, and to join now!
Members: Graphmastur;Stefan Bauwens
HOLY SHIT, I HAVE A BLOG



                                     
Put this in your signature if you've played the original WFRNG
Jim Bauwens
Lua! Nspire! Linux!
Editor
LV10 31337 u53r (Next: 2000)
*
Offline Offline

Gender: Male
Last Login: Yesterday at 22:29:56
Date Registered: 28 February, 2011, 22:32:12
Location: Belgium
Posts: 1736


Total Post Ratings: +180

View Profile WWW
« Reply #9 on: 20 June, 2011, 12:10:55 »
0

I just put omnom up internally, and I must say it works pretty good!
I needed to change some stuff to let it work, but it was pretty straight forward, so good job Netham!
Logged

DJ Omnimaga
Retired Omnimaga founder (Site issues must be PM'ed to Netham45, Eeems, Shmibs, Deep Thought and AngelFish, not me.)
Editor
LV15 Omnimagician (Next: --)
*
Online Online

Gender: Male
Last Login: Today at 10:27:56
Date Registered: 25 August, 2008, 07:00:21
Location: Québec (Canada)
Posts: 50634


Total Post Ratings: +2637

View Profile WWW
« Reply #10 on: 24 June, 2011, 01:27:09 »
0

It would be nice Netham45, especially for spotting bugs and fixing them, plus when you are busy then people could still maintain it.
Logged

Retired 83+ coder, Omnimaga/TIMGUL founder. Now doing power metal music (formerly did electronica)

Follow me on Bandcamp|Facebook|Reverbnation|Youtube|Twitter|Myspace
Munchor
LV13 Extreme Addict (Next: 9001)
*************
Offline Offline

Gender: Male
Last Login: 13 June, 2013, 19:29:09
Date Registered: 16 October, 2010, 15:39:13
Location: Position
Posts: 6209


Total Post Ratings: +174

View Profile
« Reply #11 on: 24 June, 2011, 13:58:12 »
0

It would be nice Netham45, especially for spotting bugs and fixing them, plus when you are busy then people could still maintain it.

I also like the idea, and Jim Bauwens already seems to be doing some work.
Logged
DJ Omnimaga
Retired Omnimaga founder (Site issues must be PM'ed to Netham45, Eeems, Shmibs, Deep Thought and AngelFish, not me.)
Editor
LV15 Omnimagician (Next: --)
*
Online Online

Gender: Male
Last Login: Today at 10:27:56
Date Registered: 25 August, 2008, 07:00:21
Location: Québec (Canada)
Posts: 50634


Total Post Ratings: +2637

View Profile WWW
« Reply #12 on: 25 June, 2011, 05:30:28 »
0

Ah ok that's good too Smiley
Logged

Retired 83+ coder, Omnimaga/TIMGUL founder. Now doing power metal music (formerly did electronica)

Follow me on Bandcamp|Facebook|Reverbnation|Youtube|Twitter|Myspace
Netham45
WOOOOOO
President
LV11 Super Veteran (Next: 3000)
*
Offline Offline

Gender: Male
Last Login: 17 June, 2013, 01:19:16
Date Registered: 26 August, 2008, 07:35:31
Location: Denver, Colorado
Posts: 2296


Topic starter
Total Post Ratings: +208

View Profile WWW
« Reply #13 on: 25 June, 2011, 06:10:37 »
0

I'm working on the login system, and I've hit a bit of a hangup.

Here's what I got so far


1
2
3
4
5
6
7
8
Step 1: User hits index.php
Step 2: index.php hits login.php, which will be replacable(SMF,phpBB,etc... versions)
Step 3: login.php will encrypt user data and send it to the forums (OmnomIRC_Login.php, for example). The forums will decrypt it and check it's validity. This will require my own cookies for user info.
ALTERNATIVE
Step 3: login.php will load an iframe to a remote page that will redirect to a local null page. It will then rip the signature from a paramater on the page. This will use the sites' cookies.
Step 4: OmnomIRC_Login.php will return either a signature for the user, or 'INVALID', based off of the result of its check
Step 5: If Invalid, go to the forum to login, or own login. If valid, yay!

I'm stuck on a good way to perform step 3, or a good way to check if the user is logged into the forums by their own site cookies. I'd rather not handle logins separately.

edit: here's an idea.

login.php has a JS callback that marks the signature.

login.php has an iframe that calls the remote one, the remote one them calls a stupid php file on the local page that only calls that callback on index.php
v------------------------------------------------------------------------------^
v-login.php -> OmnomIRC_CheckLogin.php -> signature_callback.php-^

same origin policy  Mad
« Last Edit: 25 June, 2011, 06:15:42 by Netham45 » Logged

Creator of OmnomIRC and SpyBot45
Join LOPN(Lobsters Opposing Pink Names) now, help us fight back!
Message me for more information, and to join now!
Members: Graphmastur;Stefan Bauwens
HOLY SHIT, I HAVE A BLOG



                                     
Put this in your signature if you've played the original WFRNG
DJ Omnimaga
Retired Omnimaga founder (Site issues must be PM'ed to Netham45, Eeems, Shmibs, Deep Thought and AngelFish, not me.)
Editor
LV15 Omnimagician (Next: --)
*
Online Online

Gender: Male
Last Login: Today at 10:27:56
Date Registered: 25 August, 2008, 07:00:21
Location: Québec (Canada)
Posts: 50634


Total Post Ratings: +2637

View Profile WWW
« Reply #14 on: 25 June, 2011, 06:45:28 »
0

That seems hard shocked. What about passwords? 
Logged

Retired 83+ coder, Omnimaga/TIMGUL founder. Now doing power metal music (formerly did electronica)

Follow me on Bandcamp|Facebook|Reverbnation|Youtube|Twitter|Myspace
Pages: [1] 2   Go Up
  Print  
 
Jump to:  

Powered by EzPortal
Powered by MySQL Powered by SMF 1.1.18 | SMF © 2013, Simple Machines Powered by PHP
Page created in 0.358 seconds with 31 queries.
Skin by DJ Omnimaga edited from SMF default theme with the help of tr1p1ea.
All programs, games and songs avaliable on this website are property of their respective owners.
Best viewed in Opera, Firefox, Chrome and Safari with a resolution of 1024x768 or above.