Index: ditorconfig
===================================================================
--- .editorconfig	(revision 53f5ceaa73f2e26bf68bfb1e991963323da16118)
+++ 	(revision )
@@ -1,10 +1,0 @@
-# editorconfig.org
-root = true
-
-[*]
-indent_style = space
-indent_size = 2
-end_of_line = lf
-charset = utf-8
-trim_trailing_whitespace = true
-insert_final_newline = true
Index: itattributes
===================================================================
--- .gitattributes	(revision 53f5ceaa73f2e26bf68bfb1e991963323da16118)
+++ 	(revision )
@@ -1,1 +1,0 @@
-* text=auto eol=lf
Index: itlab-ci.yml
===================================================================
--- .gitlab-ci.yml	(revision 53f5ceaa73f2e26bf68bfb1e991963323da16118)
+++ 	(revision )
@@ -1,35 +1,0 @@
-variables:
-  DOCKER_HOST: tcp://localhost:2375
-  DOCKER_TLS_CERTDIR: ""
-  IMAGE_VERSION: "0.0.${CI_PIPELINE_IID}"
-
-stages:
-- build
-
-docker:
-  image: docker:19.03.1
-  script:
-  - docker login -u "${CI_REGISTRY_USER}" -p "${CI_REGISTRY_PASSWORD}" "${CI_REGISTRY}"
-  # https://gitlab.com/gitlab-org/gitlab-runner/issues/3705
-  - docker build --build-arg="VERSION=${IMAGE_VERSION}" --network=host --no-cache --tag="${CI_REGISTRY_IMAGE}:${CI_PIPELINE_IID}-gitlab-docker" --tag="${CI_REGISTRY_IMAGE}:latest-gitlab-docker" .
-  - docker push "${CI_REGISTRY_IMAGE}:${CI_PIPELINE_IID}-gitlab-docker"
-  - docker push "${CI_REGISTRY_IMAGE}:latest-gitlab-docker"
-  services:
-  - docker:19.03.1-dind
-  stage: build
-  tags:
-  - kubernetes
-
-kaniko:
-  image:
-    name: gcr.io/kaniko-project/executor:debug
-    entrypoint: [""]
-  script:
-  - echo "{\"auths\":{\"${CI_REGISTRY}\":{\"username\":\"${CI_REGISTRY_USER}\",\"password\":\"${CI_REGISTRY_PASSWORD}\"}}}" > /kaniko/.docker/config.json
-  - /kaniko/executor --build-arg="VERSION=${IMAGE_VERSION}" --context="${CI_PROJECT_DIR}" --destination="${CI_REGISTRY_IMAGE}:${CI_PIPELINE_IID}-gitlab-kaniko" --destination="${CI_REGISTRY_IMAGE}:latest-gitlab-kaniko" --dockerfile="${CI_PROJECT_DIR}/Dockerfile"
-  stage: build
-  tags:
-  - kubernetes
-
-after_script:
-- "echo Finished building version: ${IMAGE_VERSION}"
Index: ckerfile
===================================================================
--- Dockerfile	(revision 53f5ceaa73f2e26bf68bfb1e991963323da16118)
+++ 	(revision )
@@ -1,15 +1,0 @@
-FROM registry.gitlab.jmk.hu/php/skeleton:25-gitlab-docker
-
-ARG VERSION
-
-USER root
-
-RUN apt-get update && \
-    apt-get --assume-yes install libxslt1-dev && \
-    docker-php-ext-install xsl
-
-USER www-data
-
-RUN echo "<?php\n\n\$imageVersion = explode(\".\", \"${VERSION}\");\n" > /usr/local/src/upgrade/version.php
-
-COPY src /usr/local/src/html
Index: CENSE
===================================================================
--- LICENSE	(revision 53f5ceaa73f2e26bf68bfb1e991963323da16118)
+++ 	(revision )
@@ -1,14 +1,0 @@
-            DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
-                    Version 2, December 2004
-
- Copyright (C) 2004 Sam Hocevar <sam@hocevar.net>
-
- Everyone is permitted to copy and distribute verbatim or modified
- copies of this license document, and changing it is allowed as long
- as the name is changed.
-
-            DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
-   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
-
-  0. You just DO WHAT THE FUCK YOU WANT TO.
-
Index: ADME.md
===================================================================
--- README.md	(revision 53f5ceaa73f2e26bf68bfb1e991963323da16118)
+++ 	(revision )
@@ -1,1 +1,0 @@
-# rTWi
Index: includes/classes/bittorrent_handler.inc.php
===================================================================
--- includes/classes/bittorrent_handler.inc.php	(revision 9479cdac9602f889de28ba22cd8b1823c8b13abe)
+++ includes/classes/bittorrent_handler.inc.php	(revision 9479cdac9602f889de28ba22cd8b1823c8b13abe)
@@ -0,0 +1,190 @@
+<?php
+
+class bittorrent_handler {
+	var $bt_data;
+	var $bt_content;
+
+	function __construct( $bt_data, $bt_content ) {
+		$this->bt_data = $bt_data;
+		$this->bt_content = $bt_content;
+	}
+
+	private function encode_string( $content ) {
+		$len = strlen( $content );
+		$ret = "{$len}:{$content}";
+		return $ret;
+	}
+
+	private function encode_integer( $content ) {
+		$ret = "i{$content}e";
+		return $ret;
+	}
+
+	private function encode_list( $content ) {
+		$ret = "l";
+		foreach ( $content as $val ) {
+			$ret .= $this->encode( $val );
+		}
+		$ret .= "e";
+		return $ret;
+	}
+
+	private function encode_dictionary( $content ) {
+		$ret = "d";
+		$keys = array_keys( $content );
+		sort( $keys );
+		foreach ( $keys as $val ) {
+			$value = $content[$val];
+			$ret .= $this->encode_string( $val );
+			$ret .= $this->encode( $value );
+		}
+		$ret .= "e";
+		return $ret;
+	}
+
+	private function encode( $content ) {
+		if ( is_array( $content ) && isset( $content["type"] ) && isset( $content["value"] ) ) {
+			$value = $content["value"];
+			switch ( $content["type"] ) {
+				case "string" : {
+					$ret =  $this->encode_string( $value );
+					break;
+				}
+				case "integer" : {
+					$ret = $this->encode_integer( $value );
+					break;
+				}
+				case "list" : {
+					$ret = $this->encode_list( $value );
+					break;
+				}
+				case "dictionary" : {
+					$ret = $this->encode_dictionary( $value );
+					break;
+				}
+				default : {
+					$ret = "XX";
+					break;
+				}
+			}
+		} else {
+			$ret = "";
+		}
+
+		return $ret;
+	}
+
+	private function decode_list( $data ) {
+		$len = strlen( $data );
+		$i = 1;
+		$value = array();
+		$text = "l";
+		for (;;) {
+			if ( $i >= $len )
+				return;
+			if ( $data[$i] == "e" )
+				break;
+			$ret = $this->decode( substr( $data, $i ) );
+			if ( !isset( $ret ) || !is_array( $ret ) )
+				return;
+			$value[] = $ret;
+			$i += $ret["strlen"];
+			$text .= $ret["string"];
+		}
+		$text .= "e";
+		$ret = array( "type" => "list", "value" => $value, "strlen" => strlen( $text ), "string" => $text );
+
+		return $ret;
+	}
+
+	private function decode_dictionary( $data ) {
+		$len = strlen( $data );
+		$i = 1;
+		$value = array();
+		$text = "d";
+		for ( ; ; ) {
+			if ( $i < $len ) {
+				if ( $data[$i] == "e" ) {
+					break;
+				} else {
+					$ret = $this->decode( substr( $data, $i ) );
+					if ( isset( $ret ) && is_array( $ret ) && $ret["type"] == "string" ) {
+						$subval = $ret["value"];
+						$i += $ret["strlen"];
+						$text .= $ret["string"];
+						if ( $i < $len ) {
+							$ret = $this->decode( substr( $data, $i ) );
+							if ( isset( $ret ) && is_array( $ret ) ) {
+								$value[$subval] = $ret;
+								$i += $ret["strlen"];
+								$text .= $ret["string"];
+							}
+						}
+					}
+				}
+			}
+		}
+		$text .= "e";
+		$ret = array( "type" => "dictionary", "value" => $value, "strlen" => strlen( $text ), "string" => $text );
+
+		return $ret;
+	}
+
+	private function decode( $data ) {
+		switch ( $data[0] ) {
+			case "l" : {
+				$ret = $this->decode_list( $data );
+				break;
+			}
+			case "d" : {
+				$ret = $this->decode_dictionary( $data );
+				break;
+			}
+			default : {
+				if ( preg_match( "/^(\d+):/", $data, $match ) ) {
+					$valuelen = $match[1];
+					$headlen = strlen( $valuelen ) + 1;
+					$value = substr( $data, $headlen, $valuelen );
+					$text = substr( $data, 0, $headlen + $valuelen );
+					if ( strlen( $value ) == $valuelen ) {
+						$ret = array( "type" => "string", "value" => $value, "strlen" => strlen( $text ), "string" => $text );
+					} else {
+						$ret = "";
+					}
+				} elseif ( preg_match( "/^i(\d+)e/", $data, $match ) ) {
+					$value = $match[1];
+					$text = "i{$value}e";
+					if ( $value !== "-0" && ( $value[0] != "0" || strlen( $value ) == 1 ) ) {
+						$ret = array( "type" => "integer", "value" => $value, "strlen" => strlen( $text ), "string" => $text );
+					} else {
+						$ret = "";
+					}
+				} else {
+					$ret = "";
+				}
+				break;
+			}
+		}
+
+		return $ret;
+	}
+
+	function decode_data() {
+		$this->bt_content = $this->decode( $this->bt_data );
+	}
+
+	function encode_content() {
+		$this->bt_data = $this->encode( $this->bt_content );
+	}
+
+	function fetch_data() {
+		return $this->bt_data;
+	}
+
+	function fetch_content() {
+		return $this->bt_content;
+	}
+
+}
+
+?>
Index: includes/classes/xmlrpc_handler.inc.php
===================================================================
--- includes/classes/xmlrpc_handler.inc.php	(revision 9479cdac9602f889de28ba22cd8b1823c8b13abe)
+++ includes/classes/xmlrpc_handler.inc.php	(revision 9479cdac9602f889de28ba22cd8b1823c8b13abe)
@@ -0,0 +1,512 @@
+<?php
+
+class xmlrpc_handler {
+	var $conntype = "";
+	var $host =	"";
+	var $port =	0;
+	var $timeout =	10;
+	var $request =	null;
+	var $response =	null;
+	var $calls =	0;
+	var $mcalls =	0;
+	var $times =	0;
+	var $mtimes =	0;
+	var $user = 	null;
+	var $password =	null;
+	var $errors =	array();
+
+	function __construct( $address, $timeout ) {
+		$this->conntype = "";
+		$this->host = "";
+		$this->port = 0;
+		if ( preg_match( "|^unix://(.+)$|", $address, $match ) ) {
+			if ( empty( $match[1] ) ) {
+				$this->errors[] = "xmlrpc_socket_empty";
+			} elseif ( !file_exists( $match[1] ) ) {
+				$this->errors[] = "xmlrpc_socket_noexist";
+			} elseif ( ( $perms = @fileperms( $match[1] ) ) === false ) {
+				$this->errors[] = "xmlrpc_socket_noperms";
+			} elseif ( ( $perms & 0xC000 ) !== 0xC000 ) {
+				$this->errors[] = "xmlrpc_socket_nosocket";
+			} elseif ( !is_writable( $match[1] ) ) {
+				$this->errors[] = "xmlrpc_socket_nowrite";
+			} elseif ( !is_readable( $match[1] ) ) {
+				$this->errors[] = "xmlrpc_socket_noread";
+			} else {
+				$this->conntype = "socket";
+				$this->host = $match[0];
+			}
+		} elseif ( preg_match( "<^(http|https)://(.*)$>", $address, $match ) ) {
+			if ( empty( $match[2] ) ) {
+				$this->errors[] = "xmlrpc_url_empty";
+			} else {
+				$this->conntype = "http";
+				$this->host = $match[0];
+			}
+		} elseif ( preg_match( "|^:(\d{1,5})$|", $address, $match ) ) {
+			$this->conntype = "localport";
+			$this->port = $match[1];
+			settype( $this->port, "int" );
+			if ( $this->port < 1 || $this->port > 65535 ) {
+				$this->errors[] = "xmlrpc_localport_outofrange";
+			} else {
+				$this->host = "127.0.0.1";
+			}
+		} elseif ( preg_match( "|^(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3}):(\d{1,5})$|", $address, $match ) ) {
+			$this->conntype = "port";
+			$this->host = "{$match[1]}.{$match[2]}.{$match[3]}.{$match[4]}";
+			$this->port = $match[5];
+			settype( $this->port, "int" );
+			if ( ip2long( $this->host ) === false ) {
+				$this->errors[] = "xmlrpc_port_invalidip";
+			} elseif ( $this->host != long2ip( ip2long( $this->host ) ) ) {
+				$this->errors[] = "xmlrpc_port_invalidipplus";
+			}
+			if ( $this->port < 1 || $this->port > 65535 ) {
+				$this->errors[] = "xmlrpc_port_outofrange";
+			}
+		} else {
+			$this->errors[] = "xmlrpc_nodestination";
+		}
+
+		$this->timeout	= $timeout;
+	}
+
+	function set_type( &$value, $xmlrpc_type ) {
+		switch ( $xmlrpc_type ) {
+			case "base64" : {
+				$value = (object)$value;
+				$value->xmlrpc_type = $xmlrpc_type;
+				break;
+			}
+			case "datetime" : {
+				$value = (object)$value;
+				$value->xmlrpc_type = $xmlrpc_type;
+				$value->timestamp = strtotime( $value->scalar );
+				$value->timestamp = $value->timestamp === false ? -1 : $value->timestamp;
+				break;
+			}
+		}
+	}
+
+	private function decode_rec( $inode ) {
+		$ntype = $inode->nodeName;
+		$nvalue = $inode->nodeValue;
+		switch ( $ntype ) {
+			case "string" : {
+				$response = $nvalue;
+				break;
+			}
+			case "i4" :
+			case "int" : {
+				$response = (int)$nvalue;
+				break;
+			}
+			case "struct" : {
+				$mnode = $inode->firstChild;
+				while ( $mnode != NULL ) {
+					if ( ( $mnode->firstChild->nodeValue == "faultCode" ) && ( $mnode->nextSibling->firstChild->nodeValue == "faultString" ) ) {
+						$this->errors[] = "{$mnode->nextSibling->lastChild->nodeValue} ({$mnode->lastChild->nodeValue})";
+						$this->errors[] = "xmlrpc_fault";
+						return false;
+					}
+					$nname = $mnode->firstChild->nodeValue;
+					$dec = $this->decode_rec( $mnode->lastChild->firstChild );
+					if ( $dec === false ) {
+						return false;
+					}
+					$response[$nname] = $dec;
+					$mnode = $mnode->nextSibling;
+				}
+				break;
+			}
+			case "array" : {
+				$vnode = $inode->firstChild->firstChild;
+				while ( $vnode != NULL ) {
+					$dec = $this->decode_rec( $vnode->firstChild );
+					$response[] = $dec;
+					if ( $dec === false ) {
+						return false;
+					}
+					$vnode = $vnode->nextSibling;
+				}
+				break;
+			}
+		}
+
+		return ( isset( $response ) ? $response : "" );
+	}
+
+	private function decode( $str ) {
+		$str = preg_replace( "%<(/{0,1})(i8|ex\.i8)>%", "<\\1string>", $str );
+		$str = preg_replace( "/>\s*?</s", "><", $str );
+		$xml = new DOMDocument( "1.0", "utf-8" );
+		$xml->formatOutput = true;
+		if ( !@$xml->loadXML( $str ) ) {
+			$this->errors[] = "xmlrpc_xml_noload";
+			return false;
+		}
+
+		$root = $xml->firstChild;
+		$root->nodeName;
+
+		if ( $root->firstChild->nodeName == "fault" ) {
+			$response["faultCode"] = (int)$root->firstChild->firstChild->firstChild->firstChild->lastChild->firstChild->nodeValue;
+			$response["faultString"] = $root->firstChild->firstChild->firstChild->lastChild->lastChild->firstChild->nodeValue;
+			$this->errors[] = "{$response["faultString"]} ({$response["faultCode"]})";
+			$this->errors[] = "xmlrpc_fault";
+			return false;
+		} else {
+			$vnode = $root->firstChild->firstChild->firstChild;
+			$inode = $vnode->firstChild;
+			$ntype = $inode->nodeName;
+			$nvalue = $inode->nodeValue;
+			switch ( $ntype ) {
+				case "string" : {
+					$response = $nvalue;
+					break;
+				}
+				case "i4" :
+				case "int" : {
+					$response = (int)$nvalue;
+					break;
+				}
+				case "struct" : {
+					$mnode = $inode->firstChild;
+					while ( $mnode != NULL ) {
+						$nname = $mnode->firstChild->nodeValue;
+						$dec = $this->decode_rec( $mnode->lastChild->firstChild );
+						if ( $dec === false ) {
+							return false;
+						}
+						$response[$nname] = $dec;
+						$mnode = $mnode->nextSibling;
+					}
+				}
+				case "array" : {
+					$vnode = $inode->firstChild->firstChild;
+					while ( $vnode != NULL ) {
+						$dec = $this->decode_rec( $vnode->firstChild );
+						if ( $dec === false ) {
+							return false;
+						}
+						$response[] = $dec;
+						$vnode = $vnode->nextSibling;
+					}
+				}
+			}
+		}
+
+		return ( isset( $response ) ? $response : array() );
+	}
+
+	private function encode_request_rec( $method, $param, &$xml, $pnode ) {
+		$vnode = $pnode->appendChild( $xml->createElement( "value" ) );
+		switch ( gettype( $param ) ) {
+			case "integer" : {
+				$inode = $vnode->appendChild( $xml->createElement( "int", $param ) );
+				break;
+			}
+			case "double" : {
+				$inode = $vnode->appendChild( $xml->createElement( "double", $param ) );
+				break;
+			}
+			case "string" : {
+				$inode = $vnode->appendChild( $xml->createElement( "string", $param ) );
+				break;
+			}
+			case "array" : {
+				$assoc = false;
+				foreach ( array_keys( $param ) as $key => $val ) {
+					if ( !preg_match( "/^[0-9]*$/", $val ) ) {
+						$assoc = true;
+					}
+				}
+				if ( $assoc ) {
+					$anode = $vnode->appendChild( $xml->createElement( "struct" ) );
+					foreach ( $param as $key => $val ) {
+						$mnode = $anode->appendChild( $xml->createElement( "member" ) );
+						$nnode = $mnode->appendChild( $xml->createElement( "name", $key ) );
+						if ( $this->encode_request_rec( $method, $val, $xml, $mnode ) === false ) {
+							return false;
+						}
+					}
+				} else {
+					$anode = $vnode->appendChild( $xml->createElement( "array" ) );
+					$dnode = $anode->appendChild( $xml->createElement( "data" ) );
+					foreach ( $param as $key => $val ) {
+						if ( $this->encode_request_rec( $method, $val, $xml, $dnode ) === false ) {
+							return false;
+						}
+					}
+				}
+				break;
+			}
+			case "object" : {
+				switch ( $param->xmlrpc_type ) {
+					case "base64" : {
+						$inode = $vnode->appendChild( $xml->createElement( "base64", base64_encode( $param->scalar ) ) );
+						break;
+					}
+					case "datetime" : {
+						$inode = $vnode->appendChild( $xml->createElement( "datetime", $param->timestamp ) );
+						break;
+					}
+				}
+				break;
+			}
+			default : {
+				$this->errors[] = gettype( $param );
+				$this->errors[] = "xmlrpc_request_invalidtype";
+				return false;
+				break;
+			}
+		}
+	}
+
+	private function encode_request( $method, $params ) {
+		$xml = new DOMDocument( "1.0", "utf-8" );
+		$xml->formatOutput = true;
+
+		$root = $xml->appendChild( $xml->createElement( "methodCall" ) );
+		$mnode = $root->appendChild( $xml->createElement( "methodName", $method ) );
+		
+		$psnode = $root->appendChild( $xml->createElement( "params" ) );
+		if ( is_array( $params ) ) {
+			$assoc = false;
+			foreach ( array_keys( $params ) as $key => $val ) {
+				if ( !preg_match( "/^[0-9]*$/", $val ) ) {
+					$assoc = true;
+				}
+			}
+			if ( $assoc ) {
+				$pnode = $psnode->appendChild( $xml->createElement( "param" ) );
+				$vnode = $pnode->appendChild( $xml->createElement( "value" ) );
+				$anode = $vnode->appendChild( $xml->createElement( "struct" ) );
+				foreach ( $params as $key => $val ) {
+					$mnode = $anode->appendChild( $xml->createElement( "member" ) );
+					$nnode = $mnode->appendChild( $xml->createElement( "name", $key ) );
+					if ( $this->encode_request_rec( $method, $val, $xml, $mnode ) === false ) {
+						return false;
+					}
+				}
+			} else {
+				foreach ( $params as $key => $val ) {
+					$pnode = $psnode->appendChild( $xml->createElement( "param" ) );
+					if ( $this->encode_request_rec( $method, $val, $xml, $pnode ) === false ) {
+						return false;
+					}
+				}
+			}
+		} else {
+			$pnode = $psnode->appendChild( $xml->createElement( "param" ) );
+			if ( $this->encode_request_rec( $method, $params, $xml, $pnode ) === false ) {
+				return false;
+			}
+		}
+
+		return $xml->saveXML();
+	}
+
+	function getconntype() {
+		return $this->conntype;
+	}
+
+	function setaccount( $user, $password ) {
+		$this->user = $user;
+		$this->password = $password;
+	}
+
+	function setmrequest( $methods, $params = array() ) {
+		$this->request = array();
+		foreach ( $methods as $methodkey => $methodval ) {
+			$this->request[] = array( "methodName" => $methodval, "params" => $params );
+		}
+		$this->request = $this->encode_request( "system.multicall", array( $this->request ) );
+		if ( $this->request === false ) {
+			return false;
+		} else {
+			return true;
+		}
+	}
+
+	function setumrequest( $methods, $params ) {
+		$this->request = array();
+		$num = count( $methods );
+		for ( $i = 0; $i < $num; $i++ ) {
+			$this->request[] = array( "methodName" => $methods[$i], "params" => $params[$i] );
+		}
+		$this->request = $this->encode_request( "system.multicall", array( $this->request ) );
+		if ( $this->request === false ) {
+			return false;
+		} else {
+			return true;
+		}
+	}
+
+	function setrequest( $method, $attributes ) {
+		$this->request = $this->encode_request( $method, $attributes );
+		if ( $this->request === false ) {
+			return false;
+		} else {
+			return true;
+		}
+	}
+
+	function scgi_call() {
+		$st = getmicrotime();
+
+		$len = strlen( $this->request );
+		$headers = "CONTENT_LENGTH\0{$len}\0";
+		$headers .= "SCGI\01\0";
+		$len = strlen( $headers );
+		$out = "{$len}:{$headers},{$this->request}";
+
+		$fp = @fsockopen( $this->host, $this->port, $errno, $errstr, $this->timeout );
+		if ( $fp === false ) {
+			$this->errors[] = "{$error} ({$errno})";
+			$this->errors[] = "xmlrpc_scgi_connectfailed";
+			$tt = getmicrotime();
+			$this->calls++;
+			$this->times = $this->times + $tt - $st;
+
+			return false;
+		} else {
+			fwrite( $fp, $out );
+			do {
+				$line = fgets( $fp );
+			} while ( trim( $line ) != "" );
+
+			$this->response = stream_get_contents( $fp );
+			if ( $this->response === false ) {
+				$this->errors[] = "xmlrpc_scgi_readfailed";
+				$tt = getmicrotime();
+				$this->calls++;
+				$this->times = $this->times + $tt - $st;
+
+				return false;
+			} elseif ( $this->response === "" ) {
+				$this->errors[] = "xmlrpc_scgi_emptystring";
+				$tt = getmicrotime();
+				$this->calls++;
+				$this->times = $this->times + $tt - $st;
+
+				return false;
+			} else {
+				$tt = getmicrotime();
+				$this->calls++;
+				$this->times = $this->times + $tt - $st;
+
+				return true;
+			}
+		}
+	}
+
+	function gw_call() {
+		$st = getmicrotime();
+
+		$len = strlen( $this->request );
+		$headers = "CONTENT_LENGTH\0{$len}\0";
+		$headers .= "SCGI\01\0";
+		$len = strlen( $headers );
+		$out = "{$len}:{$headers},{$this->request}";
+
+		$ch = curl_init( $this->host );
+		//curl_setopt( $ch, CURLOPT_HEADER, true );
+		curl_setopt( $ch, CURLOPT_RETURNTRANSFER, true );
+		curl_setopt( $ch, CURLOPT_POST, true );
+		curl_setopt( $ch, CURLOPT_POSTFIELDS, $this->request );
+		curl_setopt( $ch, CURLOPT_USERPWD, "{$this->user}:{$this->password}" );
+		curl_setopt( $ch, CURLOPT_SSL_VERIFYPEER, false );
+		$this->response = curl_exec( $ch ); 
+		if ( $this->response === false ) {
+			$error = curl_error( $ch );
+			$errno = curl_errno( $ch );
+			$this->errors[] = "{$error} ({$errno})";
+			$this->errors[] = "xmlrpc_gw_connectfailed";
+			return false;
+		} elseif ( $this->response === "" ) {
+			$error = curl_error( $ch );
+			$errno = curl_errno( $ch );
+			$this->errors[] = "{$error} ({$errno})";
+			$this->errors[] = "xmlrpc_gw_empttstring";
+			return false;
+		}
+		$tt = getmicrotime();
+		$this->calls++;
+		$this->times = $this->times + $tt - $st;
+
+		return true;
+	}
+
+	function call(){
+		switch ( $this->conntype ) {
+			case "" : {
+				return false;
+
+				break;
+			}
+			case "http" :
+			case "https" : {
+				return $this->gw_call();
+
+				break;
+			}
+			case "port" :
+			case "localport" :
+			case "socket" : {
+				return $this->scgi_call();
+
+				break;
+			}
+			default : {
+				return false;
+
+				break;
+			}
+		}
+	}
+
+	function parse() {
+		$this->response = $this->decode( $this->response );
+		if ( $this->response !== false ) {
+			return true;
+		} else {
+			return false;
+		}
+	}
+
+	function mfetch( $methods ) {
+		$r = -1;
+		$responses = array();
+		foreach ( $methods as $methodkey => $methodval ) {
+			$r++;
+			$responses[$methodval] = $this->response[$r][0];
+		}
+
+		return $responses;
+	}
+
+	function fetch() {
+		return $this->response;
+	}
+
+	function clearerrors() {
+		$this->errors = array();
+	}
+
+	function geterrorsnum() {
+		return count( $this->errors );
+	}
+
+	function geterrors() {
+		return $this->errors;
+	}
+
+	function getlasterror() {
+		return array_pop( $this->errors );
+	}
+
+}
+
+?>
Index: includes/classes/xsl_handler.inc.php
===================================================================
--- includes/classes/xsl_handler.inc.php	(revision 9479cdac9602f889de28ba22cd8b1823c8b13abe)
+++ includes/classes/xsl_handler.inc.php	(revision 9479cdac9602f889de28ba22cd8b1823c8b13abe)
@@ -0,0 +1,43 @@
+<?php
+
+class page_handler {
+	var $content;
+	var $page_data;
+	var $main_file;
+	var $theme;
+	var $xml_data;
+
+	function __construct( $theme, $main_file, $page_data ) {
+		$this->page_data = $page_data;
+		$this->main_file = $main_file;
+		$this->theme = $theme;
+	}
+
+	function parse() {
+		$xsl = new DOMDocument;
+		$xsl->load( "themes/{$this->theme}/{$this->main_file}" );
+
+		$this->content = new XSLTprocessor();
+		$this->content->importStyleSheet( $xsl );
+
+		$this->xml_data = $this->content->transformToXML( $this->page_data );
+	}
+
+	function parse_c() {
+		$this->xml_data = $this->page_data->saveXML();
+	}
+
+	function fetch() {
+		$this->xml_data = preg_replace( "/\<\?xml( version=\"[\d\.]+\")*( encoding=\".*\")*\?\>[\\r\\n]*/", "", $this->xml_data );
+		$this->xml_data = preg_replace( "/\<\!\[CDATA\[(.*?)\]\]\>/", "\r\n\\1", $this->xml_data );
+		return $this->xml_data;
+	}
+
+	function fetch_c() {
+		$this->xml_data = preg_replace( "/\<\?xml( version=\"[\d\.]+\")*( encoding=\".*\")*\?\>[\\r\\n]*/", "\\0<?xml-stylesheet type=\"text/xsl\" href=\"themes/{$this->theme}/{$this->main_file}\"?>\r\n", $this->xml_data );
+		return $this->xml_data;
+	}
+
+}
+
+?>
Index: includes/messages.cht.inc.php
===================================================================
--- includes/messages.cht.inc.php	(revision 9479cdac9602f889de28ba22cd8b1823c8b13abe)
+++ includes/messages.cht.inc.php	(revision 9479cdac9602f889de28ba22cd8b1823c8b13abe)
@@ -0,0 +1,415 @@
+<?php
+
+$message = array(
+	"badlogin"				=> "使用者名稱或密碼錯誤",
+	"succlogin"				=> "登入成功",
+	"succlogout"				=> "登出成功",
+
+	"noconn"				=> "沒有連線",
+
+	"nohashfound"				=> "No torrents found for this hash",
+	"noidfound"				=> "No id was given",
+	"nodirfound"				=> "No directory was given",
+	"noinputmod"				=> "No mod was specified",
+	"nooponalltorrent"			=> "No task was given",
+
+	"badidfound"				=> "Invalid id was given",
+	"baddirfound"				=> "Invalid directory was given",
+
+	"notanurl"				=> "Not valid URL was given",
+	"rtfileinisize"				=> "The uploaded file exceeds the upload_max_filesize directive in php.ini",
+	"rtfileformsize"			=> "The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form",
+	"rtfilepartial"				=> "The uploaded file was only partially uploaded",
+	"rtfilenofile"				=> "No file was uploaded",
+	"rtfilenotmpdir"			=> "Missing a temporary folder",
+	"rtfilenowrite"				=> "Failed to write file to disk",
+	"rtfileother"				=> "上傳錯誤",
+	"rtfileattack"				=> "Possible file upload attack!",
+
+	"badthrottlevals"			=> "Invalid values for throttle",
+	"succthrottlechange"			=> "速度限制已更改",
+
+	"badrtdirectory"			=> "rTorrent download directry is not set correctly",
+	"badatpath"				=> "Invalid path was given",
+
+	"novaluefound"				=> "No value was given",
+	"badvaluefound"				=> "Bad value was given",
+
+	"nopriorityfound"			=> "No priority was given",
+	"badpriorityfound"			=> "Bad priority was given",
+
+	"noviewtype"				=> "No view was given",
+	"badviewtype"				=> "Bad view was given",
+	"norefreshrate"				=> "No refresh rate was given",
+	"badrefreshrate"			=> "Bad refresh rate was given",
+	"nolanguage"				=> "No language was given",
+	"badlanguage"				=> "Bad language was given (no translation is available for this language)",
+
+	"succtorrentload"			=> "Torrent 已載入",
+	"succtorrentstart"			=> "Torrent 已開始",
+	"succtorrentsstart"			=> "Torrents 已開始",
+	"succtorrentopen"			=> "Torrent 已開啟",
+	"succtorrentsopen"			=> "Torrents 已開啟",
+	"succtorrentstop"			=> "Torrent 已停止",
+	"succtorrentsstop"			=> "Torrents 已停止",
+	"succtorrentclose"			=> "Torrent 已關閉",
+	"succtorrentsclose"			=> "Torrents 已關閉",
+	"succtorrentcheckhash"			=> "Torrent hash check started",
+	"succtorrentscheckhash"			=> "Torrents hash check started",
+	"succtorrentremove"			=> "Torrent 已移除",
+	"succtorrentsremove"			=> "Torrents 已移除",
+	"succtorrenterase"			=> "Torrent erased",
+	"warntorrenterase"			=> "Torrent erased, but not all the files were removed",
+	"succtorrentserase"			=> "Torrents erased",
+	"succprioritychange"			=> "Torrent 優先權已更改",
+	"succfileprioritychange"		=> "檔案優先權已更改",
+	"succdirprioritychange"			=> "目錄優先權已更改",
+	"succtrackerenabledchange"		=> "Tracker availablity changed",
+	"succviewchange"			=> "瀏覽類型已更改",
+	"succrefreshchange"			=> "更新頻率已更改",
+	"succlanguagechange"			=> "語言已更改",
+	"succdhtstart"				=> "DHT 伺服器已啟動",
+	"succdhtstop"				=> "DHT 伺服器已停止",
+
+	"downloadnotallowed"			=> "You are not allowed to download torrents from the webui",
+	"erasenotallowed"			=> "You are not allowed to erase downloaded data from the webui",
+	"languagenotallowed"			=> "You are not allowed to set the language of the page",
+	"refreshnotallowed"			=> "You are not allowed to set a meta-refresh interval",
+	"throttlenotallowed"			=> "You are not allowed to set throttle",
+
+	"no"					=> "否",
+	"yes"					=> "是",
+	"disabled"				=> "Disabled",
+	"enabled"				=> "Enabled",
+	"notset"				=> "Not set",
+
+	"d_connection_current_leech"		=> "Leeching",
+	"d_connection_current_seed"		=> "做種中",
+	"d_connection_current_initial_seed"	=> "Initial seeding",
+	"d_ignore_commands_0"			=> "Not ignoring commands",
+	"d_ignore_commands_1"			=> "Ignoring commands",
+	"d_active_0"				=> "已停止",
+	"d_active_1"				=> "已開始",
+	"d_hash_checked_0"			=> "Hash not checked",
+	"d_hash_checked_1"			=> "Hash checked",
+	"d_multi_file_multi"			=> "Multi",
+	"d_multi_file_single"			=> "Single",
+	"d_open_0"				=> "已關閉",
+	"d_open_1"				=> "開啟",
+	"d_complete_0"				=> "未完成",
+	"d_complete_1"				=> "已完成",
+	"d_hash_checking_0"			=> "Not hashing",
+	"d_hash_checking_1"			=> "Hashing",
+	"d_hashing_0"				=> "Not hashing",
+	"d_hashing_1"				=> "Normal hashing",
+	"d_hashing_2"				=> "Download finished, hashing",
+	"d_hashing_3"				=> "Re-hashing",
+	"d_priority_0"				=> "關",
+	"d_priority_1"				=> "低",
+	"d_priority_2"				=> "中",
+	"d_priority_3"				=> "高",
+	"d_state_0"				=> "已停止",
+	"d_state_1"				=> "已開始",
+	"f_open_0"				=> "已關閉",
+	"f_open_1"				=> "開啟",
+	"f_priority_0"				=> "關閉",
+	"f_priority_1"				=> "中",
+	"f_priority_2"				=> "高",
+	"p_encrypted_0"				=> "Plain",
+	"p_encrypted_1"				=> "Encrypted",
+	"p_incoming_0"				=> "Outgoing",
+	"p_incoming_1"				=> "Incoming",
+	"t_enabled_0"				=> "Disabled",
+	"t_enabled_1"				=> "Enabled",
+	"t_open_0"				=> "已關閉",
+	"t_open_1"				=> "開啟",
+	"t_type_1"				=> "TCP",
+	"t_type_2"				=> "UDP",
+	"dht_0"					=> "已停止",
+	"dht_1"					=> "已開始",
+
+	"bind_0000"				=> "All IP addresses",
+	"ip_0000"				=> "Not set",
+	"proxy_address_0000"			=> "Not set",
+
+	"xmlrpc_socket_empty"			=> "Malformed unix socket path",
+	"xmlrpc_socket_noexist"			=> "The socket does not exist",
+	"xmlrpc_socket_noperms"			=> "Cannot read permissions for the socket",
+	"xmlrpc_socket_nosocket"		=> "The socket seems not to be a unix socket",
+	"xmlrpc_socket_nowrite"			=> "Cannot write socket",
+	"xmlrpc_socket_noread"			=> "Cannot read socket",
+	"xmlrpc_url_empty"			=> "The URL is empty",
+	"xmlrpc_localport_outofrange"		=> "Port is out of range",
+	"xmlrpc_port_invalidip"			=> "Invalid IP address",
+	"xmlrpc_port_invalidipplus"		=> "Invalid IP address (this message should never appear - if it does, open a ticker in the rTWi trac, and attach your users.conf)",
+	"xmlrpc_port_outofrange"		=> "Port is out of range",
+	"xmlrpc_nodestination"			=> "Nowhere to connect (malformed address)",
+	"xmlrpc_scgi_connectfailed"		=> "Connecting to rTorrent has failed",
+	"xmlrpc_scgi_readfailed"		=> "Receiving answer from rTorrent has failed",
+	"xmlrpc_scgi_emptystring"		=> "rTorrent has returnde nothing (SCGI)",
+	"xmlrpc_gw_connectfailed"		=> "Connecting to rTorrent (using SCGI gateway) has failed",
+	"xmlrpc_gw_emptystring"			=> "rTorrent has returnde nothing (GW)",
+	"xmlrpc_xml_noload"			=> "Malformed XML (propably a HTTP error, or redirect)",
+	"xmlrpc_request_invalidtype"		=> "Invalid parameter type",
+	"xmlrpc_fault"				=> "rTorrent returned an XMLRPC error",
+
+	"unknown"				=> "Unknown",
+);
+
+$viewtypes = array(
+	"viewtype_main"				=> "主要",
+	"viewtype_default"			=> "預設",
+	"viewtype_name"				=> "名稱",
+	"viewtype_active"			=> "Active",
+	"viewtype_started"			=> "已開始",
+	"viewtype_stopped"			=> "已停止",
+	"viewtype_complete"			=> "已完成",
+	"viewtype_incomplete"			=> "未完成",
+	"viewtype_hashing"			=> "Hashing",
+	"viewtype_seeding"			=> "做種中",
+	"viewtype_scheduler"			=> "Scheduler",
+);
+
+$refreshrates = array(
+	"refreshrate_0"				=> "關閉",
+	"refreshrate_5"				=> "5 seconds",
+	"refreshrate_60"			=> "1 分鐘",
+	"refreshrate_180"			=> "3 分鐘",
+	"refreshrate_420"			=> "7 分鐘",
+	"refreshrate_900"			=> "15 分鐘",
+	"refreshrate_1500"			=> "25 分鐘",
+);
+
+$languages = array(
+	"en"					=> "English",
+	"de"					=> "German",
+	"hu"					=> "Hungarian",
+	"cht"					=> "Traditional Chinese",
+	"fr"					=> "French",
+);
+
+$label = array(
+	// html head
+	"title"					=> "rTWi - an rTorrent Web interface",
+	"description"				=> "rTWi - an rTorrent Web interface",
+	"author"				=> "Gabor Hudiczius",
+	"mailto"				=> "ghudiczius@gmail.com?subject=rTWi - an rTorrent Web interface",
+
+	// login
+	"username"				=> "使用者名稱",
+	"password"				=> "密碼",
+	"rememberme"				=> "記住我",
+	"login"					=> "登入",
+
+	// menu
+	"torrents"				=> "Torrents",
+	"peerlist"				=> "Peer 清單",
+	"info"					=> "資訊",
+	"filelist"				=> "檔案清單",
+	"trackerlist"				=> "Tracker 清單",
+	"chunksseen"				=> "Chunks seen",
+	"transferlist"				=> "Transfer list",
+	"addtorrent"				=> "新增 Torrent",
+	"serverinfo"				=> "伺服器資訊",
+	"logout"				=> "登出",
+
+	// misc
+	"ok"					=> "確定",
+	"yes"					=> "是",
+	"no"					=> "否",
+	
+	"clicktohide"				=> "按一下來隱藏",
+	"clicktoopen"				=> "按一下來開啟",
+	"clicktocloseopen"			=> "按一下來 關閉 / 開啟",
+	"clicktochange"				=> "按一下來更改",
+
+	"view"					=> "瀏覽",
+	"selectviewtype"			=> "選擇瀏覽類型",
+	"refresh"				=> "更新",
+	"selectrefreshrate"			=> "選擇更新速度",
+	"language"				=> "語言",
+	"selectlanguage"			=> "選擇語言",
+
+	"areyousure"				=> "你確定嗎?",
+	"areyousureerase"			=> "Are you sure, you want to delete",
+	"alldatawillbedestroyed"		=> "All data will be destroyed.",
+
+	"homepage"				=> "rTWi project homepage",
+
+	"highest"				=> "最高",
+
+	// add torrent
+	"openfrom"				=> "開啟來源",
+	"fileupload"				=> "檔案上傳",
+	"url"					=> "網址",
+	"torrentfile"				=> "Torrent 檔案",
+	"torrenturl"				=> "Torrent 網址",
+	"starttorrent"				=> "開始下載",
+	"starttorrentafteradded"		=> "新增後開始下載",
+	"downloadto"				=> "下載至",
+
+	// tasks on torrents
+	"selecttask"				=> "選擇動作",
+	"selectone"				=> "Select one",
+
+	"startall"				=> "全部開始",
+	"stopall"				=> "全部停止",
+	"openall"				=> "全部開啟",
+	"closeall"				=> "全部關閉",
+	"checkall"				=> "全部檢查",
+	"removeall"				=> "全部移除",
+	"eraseall"				=> "Erase all",
+
+	"start"					=> "開始",
+	"stop"					=> "停止",
+	"open"					=> "開啟",
+	"close"					=> "關閉",
+	"checkhash"				=> "檢查hash",
+	"remove"				=> "移除",
+	"erase"					=> "Erase",
+
+	"selectpriority"			=> "設定優先權",
+	"selectdirpriority"			=> "設定目錄優先權",
+	"selectfilepriority"			=> "設定檔案優先權",
+
+	// torrent states
+	"started"				=> "已開始",
+	"stopped"				=> "已停止",
+	"opened"				=> "已開啟",
+	"closed"				=> "已關閉",
+	"finished"				=> "已完成",
+	"checkhashed"				=> "Hash checked",
+
+	"startedsince"				=> "Started since",
+	"stopedsince"				=> "Stoped since",
+	"openedsince"				=> "Opened since",
+	"closedsince"				=> "Closed since",
+	"finishedsince"				=> "Finished since",
+	"hashingsince"				=> "Hashing since",
+
+	"sincepre"				=> "since",
+	"sincepost"				=> "",
+
+	// torrent stats
+	"details"				=> "細節",
+
+	"done"					=> "完成",
+	"downloadfinished"			=> "下載已完成",
+	"downloadeddata"			=> "已下載資料",
+	"torrentsize"				=> "大小",
+	"uploaded"				=> "已上傳",
+	"uploadeddata"				=> "已上傳資料",
+
+	"percenthashed"				=> "% hashed",
+	"percentcompleted"			=> "% 已完成",
+	"estimatedtimeremaining"		=> "估計剩餘時間",
+	"ignorecommands"			=> "Ignore commands",
+	"ratio"					=> "Ratio",
+
+	"off"					=> "關閉",
+	"low"					=> "低",
+	"normal"				=> "中",
+	"high"					=> "高",
+
+	"message"				=> "Message",
+
+	"lasttouched"				=> "Last touched",
+	"filesize"				=> "檔案大小",
+	"downloadfile"				=> "下載檔案",
+	"trackergroup"				=> "Tracker group",
+	"type"					=> "類型",
+	"selecttrackerenabled"			=> "選擇是否啟用 tracker",
+	"mininterval"				=> "Minimum interval",
+
+	// stats
+	"throttle"				=> "速度限制",
+	"uploadspeed"				=> "上傳速度",
+	"uploadlimit"				=> "上傳限制",
+	"nouploadlimit"				=> "無上傳限制",
+	"downloadspeed"				=> "下載速度",
+	"downloadlimit"				=> "下載限制",
+	"nodownloadlimit"			=> "無下載限制",
+	"rate"					=> "速度",
+
+	// info page
+	"name"					=> "名稱",
+	"infohash"				=> "Info hash",
+	"localid"				=> "Local ID",
+	"localidhtml"				=> "Local ID (html)",
+	"directory"				=> "目錄",
+	"tiedtofile"				=> "Tied to file",
+	"filestats"				=> "File stats",
+	"files"					=> "files",
+	"private"				=> "Private",
+	"chunks"				=> "Chunks",
+	"priority"				=> "優先權",
+	"statechanged"				=> "State changed",
+	"freediskspace"				=> "磁碟可用空間",
+	"connectiontype"			=> "連線類型",
+	"trackers"				=> "Trackers",
+	"peersconnected"			=> "Peers connected",
+	"dmaxpeers"				=> "Maximum",
+	"dminpeers"				=> "Minimum",
+	"leechers"				=> "Leechers",
+	"seeders"				=> "Seeders",
+	"pexenabled"				=> "PEX enabled",
+	"pexsize"				=> "PEX size",
+	"upload"				=> "上傳",
+	"download"				=> "下載",
+	"skipped"				=> "Skipped",
+
+	// server info page
+	"clientversion"				=> "客戶端版本",
+	"libraryversion"			=> "程式庫版本",
+	"workingdirectory"			=> "工作目錄",
+	"downloaddirectory"			=> "下載目錄",
+	"sessiondirectory"			=> "快取目錄",
+	"hostname"				=> "Hostname",
+	"pid"					=> "PID",
+	"listeningipaddress"			=> "Listening IP address",
+	"reportedipaddress"			=> "IP address reported to the tracker",
+	"portopened"				=> "Port opened",
+	"randomport"				=> "Random port",
+	"portrange"				=> "Port range",
+	"udptrackers"				=> "Use UDP trackers",
+	"changedhtstatus"			=> "開始 / 停止 DHT伺服器",
+	"dht"					=> "DHT 伺服器",
+	"dhtport"				=> "DHT port",
+	"dhtcycle"				=> "DHT cycle",
+	"dhtqueries"				=> "DHT queries received / sent",
+	"dhtreplies"				=> "DHT replies received",
+	"dhtbytes"				=> "DHT bytes read / written",
+	"dhtnodes"				=> "DHT nodes",
+	"in"					=> "in",
+	"buckets"				=> "buckets",
+	"dhtpeers"				=> "DHT peers",
+	"dhttorrents"				=> "DHT torrents",
+	"maxuploads"				=> "Maximum number of uploads",
+	"maxpeers"				=> "Minimum number of peers",
+	"minpeers"				=> "Maximum number of peers",
+	"memoryusage"				=> "記憶體使用量",
+	"maxmemoryusage"			=> "最大記憶體使用量",
+	"hashcheck"				=> "Hash check",
+	"safesync"				=> "Safe sync",
+	"sendbuffer"				=> "Send buffer",
+	"receivebuffer"				=> "Receive buffer",
+
+	// peer list page
+	"address"				=> "Address",
+	"port"					=> "Port",
+	"up_rate"				=> "Up",
+	"down_rate"				=> "Down",
+	"peer_rate"				=> "Peer",
+	"pdone"					=> "Done",
+	"encrypted"				=> "Encrypted",
+	"incoming"				=> "Connection",
+	"pclientversion"			=> "客戶端版本",
+
+	// tracker list page
+	"focus"					=> "Focus",
+	"enabled"				=> "啟用",
+	"seedersleechers"			=> "S/L",
+	"lasttimescraped"			=> "Last time scraped",
+);
+
+?>
Index: includes/messages.de.inc.php
===================================================================
--- includes/messages.de.inc.php	(revision 9479cdac9602f889de28ba22cd8b1823c8b13abe)
+++ includes/messages.de.inc.php	(revision 9479cdac9602f889de28ba22cd8b1823c8b13abe)
@@ -0,0 +1,415 @@
+<?php
+
+$message = array(
+	"badlogin"				=> "Benutzername oder Passwort falsch",
+	"succlogin"				=> "Erfolgreich angemeldet",
+	"succlogout"				=> "Erfolgreich abgemeldet",
+
+	"noconn"				=> "Keine Verbindung",
+
+	"nohashfound"				=> "Für diesen Hash wurden keine Torrents gefunden",
+	"noidfound"				=> "Keine ID festgelegt",
+	"nodirfound"				=> "Kein Verzeichnis festgelegt",
+	"noinputmod"				=> "Kein Mod festgelegt",
+	"nooponalltorrent"			=> "Keinen Task festegelegt",
+
+	"badidfound"				=> "ID ungültig",
+	"baddirfound"				=> "Verzeichnis ungültig",
+
+	"notanurl"				=> "Keine gültige URL",
+	"rtfileinisize"				=> "Das hochgeladene File ist zu gross",
+	"rtfileformsize"			=> "Das hochgeladene File ist zu gross",
+	"rtfilepartial"				=> "Das File wurde nur teilweisse hochgeladen",
+	"rtfilenofile"				=> "Es wurde kein File hochgeladen",
+	"rtfilenotmpdir"			=> "Kein temporärer Ordner vorhanden",
+	"rtfilenowrite"				=> "File konnte nicht gespeichert werden",
+	"rtfileother"				=> "Fehler beim Upload",
+	"rtfileattack"				=> "Möglicher File-Upload Angriff!",
+
+	"badthrottlevals"			=> "Throttle Einstellungen fehlerhaft",
+	"succthrottlechange"			=> "Throttle geändert",
+
+	"badrtdirectory"			=> "Download Verzeichnis nicht richtig eingestellt",
+	"badatpath"				=> "Pfad fehlerhaft",
+
+	"novaluefound"				=> "Kein Wert festgelegt",
+	"badvaluefound"				=> "Fehlerhafter Wert festgelegt",
+
+	"nopriorityfound"			=> "Keine Priorität festgelegt",
+	"badpriorityfound"			=> "Fehlerhafte Priorität festgelegt",
+
+	"noviewtype"				=> "Keine Ansicht festgelegt",
+	"badviewtype"				=> "Fehlerhafte Ansicht festgelegt",
+	"norefreshrate"				=> "Keine Aktualisierungsrate festgelegt",
+	"badrefreshrate"			=> "Fehlerhafte Aktualisierungsrate festgelegt",
+	"nolanguage"				=> "Keine Sprache festgelegt",
+	"badlanguage"				=> "Fehlerhafte Sprache festgelegt (keine Übersetzung für diese Sprache verfügbar)",
+
+	"succtorrentload"			=> "Torrent geladen",
+	"succtorrentstart"			=> "Torrent gestartet",
+	"succtorrentsstart"			=> "Torrents gestartet",
+	"succtorrentopen"			=> "Torrent geöffnet",
+	"succtorrentsopen"			=> "Torrents geöffnet",
+	"succtorrentstop"			=> "Torrent gestoppt",
+	"succtorrentsstop"			=> "Torrents gestoppt",
+	"succtorrentclose"			=> "Torrent geschlossen",
+	"succtorrentsclose"			=> "Torrents geschlossen",
+	"succtorrentcheckhash"			=> "Torrent Hash Überprüfung gestartet",
+	"succtorrentscheckhash"			=> "Torrents Hash Überprüfung gestartet",
+	"succtorrentremove"			=> "Torrent entfernt",
+	"succtorrentsremove"			=> "Torrents entfernt",
+	"succtorrenterase"			=> "Torrent gelöscht",
+	"warntorrenterase"			=> "Torrent gelöscht, aber nicht alle Dateien entfernt",
+	"succtorrentserase"			=> "Torrents gelöscht",
+	"succprioritychange"			=> "Torrent Priorität geändert",
+	"succfileprioritychange"		=> "File Priorität geändert",
+	"succdirprioritychange"			=> "Directory Priorität geändert",
+	"succtrackerenabledchange"		=> "Tracker Verfügbarkeit geändert",
+	"succviewchange"			=> "Anicht geändert",
+	"succrefreshchange"			=> "Aktualisierungsrate geändert",
+	"succlanguagechange"			=> "Sprache geändert",
+	"succdhtstart"				=> "DHT server gestartet",
+	"succdhtstop"				=> "DHT server gestoppt",
+
+	"downloadnotallowed"			=> "Du darfst keine Torrents vom WebUI herunterladen",
+	"erasenotallowed"			=> "Du darfst keine Daten vom WebUI löschen",
+	"languagenotallowed"			=> "Du darfst die Sprache nicht ändern",
+	"refreshnotallowed"			=> "Du darfst die Aktualisierungsrate nicht ändern",
+	"throttlenotallowed"			=> "Du darfst den Throttle nicht ändern",
+
+	"no"					=> "Nein",
+	"yes"					=> "Ja",
+	"disabled"				=> "Deaktiviert",
+	"enabled"				=> "Aktiviert",
+	"notset"				=> "Nicht gesetzt",
+
+	"d_connection_current_leech"		=> "Leeche",
+	"d_connection_current_seed"		=> "Seede",
+	"d_connection_current_initial_seed"	=> "Initial seeding",
+	"d_ignore_commands_0"			=> "Ignoriere Befehle nicht",
+	"d_ignore_commands_1"			=> "Ignoriere Befhele",
+	"d_active_0"				=> "Gestoppt",
+	"d_active_1"				=> "Gestartet",
+	"d_hash_checked_0"			=> "Hash nicht überprüft",
+	"d_hash_checked_1"			=> "Hash überprüft",
+	"d_multi_file_multi"			=> "Multi",
+	"d_multi_file_single"			=> "Single",
+	"d_open_0"				=> "Geschlossen",
+	"d_open_1"				=> "Offen",
+	"d_complete_0"				=> "Unvollständig",
+	"d_complete_1"				=> "Fertig",
+	"d_hash_checking_0"			=> "Hashe nicht",
+	"d_hash_checking_1"			=> "Hashe",
+	"d_hashing_0"				=> "Hashe nicht",
+	"d_hashing_1"				=> "Normales Hashen",
+	"d_hashing_2"				=> "Download fertig, hashe",
+	"d_hashing_3"				=> "Hashe erneut",
+	"d_priority_0"				=> "Aus",
+	"d_priority_1"				=> "Niedrig",
+	"d_priority_2"				=> "Normal",
+	"d_priority_3"				=> "Hoch",
+	"d_state_0"				=> "Gestoppt",
+	"d_state_1"				=> "Gestartet",
+	"f_open_0"				=> "Geschlossen",
+	"f_open_1"				=> "Offen",
+	"f_priority_0"				=> "Aus",
+	"f_priority_1"				=> "Normal",
+	"f_priority_2"				=> "Hoch",
+	"p_encrypted_0"				=> "Unverschlüsselt",
+	"p_encrypted_1"				=> "Verschlüsselt",
+	"p_incoming_0"				=> "Outgoing",
+	"p_incoming_1"				=> "Incoming",
+	"t_enabled_0"				=> "Deaktiviert",
+	"t_enabled_1"				=> "Aktiviert",
+	"t_open_0"				=> "Geschlossen",
+	"t_open_1"				=> "Offen",
+	"t_type_1"				=> "TCP",
+	"t_type_2"				=> "UDP",
+	"dht_0"					=> "Gestoppt",
+	"dht_1"					=> "Gestartet",
+
+	"bind_0000"				=> "Alle IP-Adressen",
+	"ip_0000"				=> "Nicht gesetzt",
+	"proxy_address_0000"			=> "Nicht gesetzt",
+
+	"xmlrpc_socket_empty"			=> "Malformed unix socket path",
+	"xmlrpc_socket_noexist"			=> "The socket does not exist",
+	"xmlrpc_socket_noperms"			=> "Cannot read permissions for the socket",
+	"xmlrpc_socket_nosocket"		=> "The socket seems not to be a unix socket",
+	"xmlrpc_socket_nowrite"			=> "Cannot write socket",
+	"xmlrpc_socket_noread"			=> "Cannot read socket",
+	"xmlrpc_url_empty"			=> "The URL is empty",
+	"xmlrpc_localport_outofrange"		=> "Port is out of range",
+	"xmlrpc_port_invalidip"			=> "Invalid IP address",
+	"xmlrpc_port_invalidipplus"		=> "Invalid IP address (this message should never appear - if it does, open a ticker in the rTWi trac, and attach your users.conf)",
+	"xmlrpc_port_outofrange"		=> "Port is out of range",
+	"xmlrpc_nodestination"			=> "Nowhere to connect (malformed address)",
+	"xmlrpc_scgi_connectfailed"		=> "Connecting to rTorrent has failed",
+	"xmlrpc_scgi_readfailed"		=> "Receiving answer from rTorrent has failed",
+	"xmlrpc_scgi_emptystring"		=> "rTorrent has returnde nothing (SCGI)",
+	"xmlrpc_gw_connectfailed"		=> "Connecting to rTorrent (using SCGI gateway) has failed",
+	"xmlrpc_gw_emptystring"			=> "rTorrent has returnde nothing (GW)",
+	"xmlrpc_xml_noload"			=> "Malformed XML (propably a HTTP error, or redirect)",
+	"xmlrpc_request_invalidtype"		=> "Invalid parameter type",
+	"xmlrpc_fault"				=> "rTorrent returned an XMLRPC error",
+
+	"unknown"				=> "Unbekannt",
+);
+
+$viewtypes = array(
+	"viewtype_main"				=> "Main",
+	"viewtype_default"			=> "Standard",
+	"viewtype_name"				=> "Name",
+	"viewtype_active"			=> "Active",
+	"viewtype_started"			=> "Gestartet",
+	"viewtype_stopped"			=> "Gestoppt",
+	"viewtype_complete"			=> "Fertig",
+	"viewtype_incomplete"			=> "Unvollständig",
+	"viewtype_hashing"			=> "Hashe",
+	"viewtype_seeding"			=> "Seede",
+	"viewtype_scheduler"			=> "Scheduler",
+);
+
+$refreshrates = array(
+	"refreshrate_0"				=> "Aus",
+	"refreshrate_5"				=> "5 seconds",
+	"refreshrate_60"			=> "1 Minute",
+	"refreshrate_180"			=> "3 Minuten",
+	"refreshrate_420"			=> "7 Minuten",
+	"refreshrate_900"			=> "15 Minuten",
+	"refreshrate_1500"			=> "25 Minuten",
+);
+
+$languages = array(
+	"en"					=> "Englisch",
+	"de"					=> "Deutsch",
+	"hu"					=> "Ungarisch",
+	"cht"					=> "Traditional Chinese",
+	"fr"					=> "French",
+);
+
+$label = array(
+	// html head
+	"title"					=> "rTWi - ein rTorrent Web-Interface",
+	"description"				=> "rTWi - ein rTorrent Web-Interface",
+	"author"				=> "Gabor Hudiczius",
+	"mailto"				=> "ghudiczius@gmail.com?subject=rTWi - an rTorrent Web interface",
+
+	// login
+	"username"				=> "Benutzername",
+	"password"				=> "Passwort",
+	"rememberme"				=> "Angemeldet bleiben",
+	"login"					=> "Anmelden",
+
+	// menu
+	"torrents"				=> "Torrents",
+	"peerlist"				=> "Peer Liste",
+	"info"					=> "Info",
+	"filelist"				=> "Datei Liste",
+	"trackerlist"				=> "Tracker Liste",
+	"chunksseen"				=> "Teile gesehen",
+	"transferlist"				=> "Transfer Liste",
+	"addtorrent"				=> "Torrent hinzufügen",
+	"serverinfo"				=> "Server Info",
+	"logout"				=> "Abmelden",
+
+	// misc
+	"ok"					=> "OK",
+	"yes"					=> "Ja",
+	"no"					=> "Nein",
+	
+	"clicktohide"				=> "Verstecken",
+	"clicktoopen"				=> "Öffnen",
+	"clicktocloseopen"			=> "Schliessen/öffnen",
+	"clicktochange"				=> "ändern",
+
+	"view"					=> "Ansicht",
+	"selectviewtype"			=> "Ansichtsart wählen",
+	"refresh"				=> "Aktualisieren",
+	"selectrefreshrate"			=> "Aktualisierungsrate wählen",
+	"language"				=> "Sprache",
+	"selectlanguage"			=> "Sprache wählen",
+
+	"areyousure"				=> "Bist du dir sicher?",
+	"areyousureerase"			=> "Bist du dir sicher?",
+	"alldatawillbedestroyed"		=> "Alle heruntegeladenen Daten werden gelöscht.",
+
+	"homepage"				=> "rTWi Projekt Homepage",
+
+	"highest"				=> "höchstes",
+
+	// add torrent
+	"openfrom"				=> "Öffnen von",
+	"fileupload"				=> "Datei upload",
+	"url"					=> "URL",
+	"torrentfile"				=> "Torrent-Datei",
+	"torrenturl"				=> "Torrent URL",
+	"starttorrent"				=> "Starte torrent",
+	"starttorrentafteradded"		=> "Starte torrent nachdem hinzugefügt",
+	"downloadto"				=> "Download nach",
+
+	// tasks on torrents
+	"selecttask"				=> "Task auswählen",
+	"selectone"				=> "Wähle eins",
+
+	"startall"				=> "Starte alle",
+	"stopall"				=> "Stoppe alle",
+	"openall"				=> "Öffne alle",
+	"closeall"				=> "Schliesse alle",
+	"checkall"				=> "Überprüfe alle",
+	"removeall"				=> "Entferne alle",
+	"eraseall"				=> "Lösche alle",
+
+	"start"					=> "Starten",
+	"stop"					=> "Stoppen",
+	"open"					=> "Öffnen",
+	"close"					=> "Schliessen",
+	"checkhash"				=> "Hash überprüfen",
+	"remove"				=> "Entfernen",
+	"erase"					=> "Löschen",
+
+	"selectpriority"			=> "Priorität auswählen",
+	"selectdirpriority"			=> "Verzeichnis-Priorität auswählen",
+	"selectfilepriority"			=> "Datei-Priorität auswählen",
+
+	// torrent states
+	"started"				=> "Gestartet",
+	"stopped"				=> "Gestoppt",
+	"opened"				=> "Geöffnet",
+	"closed"				=> "Geschlossen",
+	"finished"				=> "Fertig",
+	"checkhashed"				=> "Hash überprüft",
+
+	"startedsince"				=> "Gestartet seit",
+	"stopedsince"				=> "Gestoppt seit",
+	"openedsince"				=> "Geöffnet seit",
+	"closedsince"				=> "Geschlossen seit",
+	"finishedsince"				=> "Fertig seit",
+	"hashingsince"				=> "Hashe seit",
+
+	"sincepre"				=> "seit",
+	"sincepost"				=> "",
+
+	// torrent stats
+	"details"				=> "Details",
+
+	"done"					=> "fertig",
+	"downloadfinished"			=> "Download abgeschlossen",
+	"downloadeddata"			=> "Heruntergeladene Daten",
+	"torrentsize"				=> "Torrent grösse",
+	"uploaded"				=> "Hochgeladen",
+	"uploadeddata"				=> "Hochgeladene Daten",
+
+	"percenthashed"				=> "prozent gehasht",
+	"percentcompleted"			=> "prozent fertig",
+	"estimatedtimeremaining"		=> "Geschätzte Zeit verbleibend",
+	"ignorecommands"			=> "Ignoriere Befehle",
+	"ratio"					=> "Ratio",
+
+	"off"					=> "Aus",
+	"low"					=> "Niedrig",
+	"normal"				=> "Normal",
+	"high"					=> "Hoch",
+
+	"message"				=> "Nachricht",
+
+	"lasttouched"				=> "Zuletzt berührt",
+	"filesize"				=> "Dateigrösse",
+	"downloadfile"				=> "Datei herunterladen",
+	"trackergroup"				=> "Tracker-Gruppe",
+	"type"					=> "Typ",
+	"selecttrackerenabled"			=> "Auswählen wenn Tracker aktiviert",
+	"mininterval"				=> "Minimales Intervall",
+
+	// stats
+	"throttle"				=> "Throttle",
+	"uploadspeed"				=> "Upload-Geschwindigkeit",
+	"uploadlimit"				=> "Upload-Limit",
+	"nouploadlimit"				=> "Kein Upload-Limit",
+	"downloadspeed"				=> "Download-Gechwindigkeit",
+	"downloadlimit"				=> "Download-Limit",
+	"nodownloadlimit"			=> "Kein Download-Limit",
+	"rate"					=> "Rate",
+
+	// info page
+	"name"					=> "Name",
+	"infohash"				=> "Info-Hash",
+	"localid"				=> "Lokale ID",
+	"localidhtml"				=> "Lokale ID (html)",
+	"directory"				=> "Verzeichnis",
+	"tiedtofile"				=> "An Datei gebunden",
+	"filestats"				=> "Datei-Statistiken",
+	"files"					=> "Dateien",
+	"private"				=> "Private",
+	"chunks"				=> "Teile",
+	"priority"				=> "Priorität",
+	"statechanged"				=> "Status geändert",
+	"freediskspace"				=> "Freier Speicherplatz",
+	"connectiontype"			=> "Verbindungsart",
+	"trackers"				=> "Trackers",
+	"peersconnected"			=> "Peers verbunden",
+	"dmaxpeers"				=> "Maximum",
+	"dminpeers"				=> "Minimum",
+	"leechers"				=> "Leechers",
+	"seeders"				=> "Seeders",
+	"pexenabled"				=> "PEX aktiviert",
+	"pexsize"				=> "PEX Grösse",
+	"upload"				=> "Upload",
+	"download"				=> "Download",
+	"skipped"				=> "Übersprungen",
+
+	// server info page
+	"clientversion"				=> "Client Version",
+	"libraryversion"			=> "Library Version",
+	"workingdirectory"			=> "Arbeitsverzeichnis",
+	"downloaddirectory"			=> "Download Verzeichnis",
+	"sessiondirectory"			=> "Session Verzeichnis",
+	"hostname"				=> "Hostname",
+	"pid"					=> "PID",
+	"listeningipaddress"			=> "Listening IP-Adresse",
+	"reportedipaddress"			=> "IP-Adresse am Tracker",
+	"portopened"				=> "Port geöffnet",
+	"randomport"				=> "Zufälliger Port",
+	"portrange"				=> "Port-Range",
+	"udptrackers"				=> "Verwende UDP-Tracker",
+	"changedhtstatus"			=> "Starte/Stoppe DHT-Server",
+	"dht"					=> "DHT-Server",
+	"dhtport"				=> "DHT-Port",
+	"dhtcycle"				=> "DHT-Zyklus",
+	"dhtqueries"				=> "DHT anfrage erhalten / gesendet",
+	"dhtreplies"				=> "DHT antwort erhalten",
+	"dhtbytes"				=> "DHT Bytes gelesen / geschrieben",
+	"dhtnodes"				=> "DHT-Knoten",
+	"in"					=> "in",
+	"buckets"				=> "buckets",
+	"dhtpeers"				=> "DHT-Peers",
+	"dhttorrents"				=> "DHT-Torrents",
+	"maxuploads"				=> "Maximale Uploads",
+	"maxpeers"				=> "Maximale Peers",
+	"minpeers"				=> "Minimum an Peers",
+	"memoryusage"				=> "Speicherverbrauch",
+	"maxmemoryusage"			=> "Maximaler Speicherverbrauch",
+	"hashcheck"				=> "Hash Überprüfung",
+	"safesync"				=> "Sichere Synchronisation",
+	"sendbuffer"				=> "Sende-Buffer",
+	"receivebuffer"				=> "Empfangs-Buffer",
+
+	// peer list page
+	"address"				=> "Adresse",
+	"port"					=> "Port",
+	"up_rate"				=> "Up",
+	"down_rate"				=> "Down",
+	"peer_rate"				=> "Peer",
+	"pdone"					=> "Fertig",
+	"encrypted"				=> "Verschlüsselt",
+	"incoming"				=> "Verbidung",
+	"pclientversion"			=> "Client Version",
+
+	// tracker list page
+	"focus"					=> "Fokus",
+	"enabled"				=> "Aktiviert",
+	"seedersleechers"			=> "S/L",
+	"lasttimescraped"			=> "Letzter Scrape",
+);
+
+?>
Index: includes/messages.en.inc.php
===================================================================
--- includes/messages.en.inc.php	(revision 9479cdac9602f889de28ba22cd8b1823c8b13abe)
+++ includes/messages.en.inc.php	(revision 9479cdac9602f889de28ba22cd8b1823c8b13abe)
@@ -0,0 +1,415 @@
+<?php
+
+$message = array(
+	"badlogin"				=> "Username or password is incorrect",
+	"succlogin"				=> "You have been logged in successfully",
+	"succlogout"				=> "You have been logged out successfully",
+
+	"noconn"				=> "No connection",
+
+	"nohashfound"				=> "No torrents found for this hash",
+	"noidfound"				=> "No id was given",
+	"nodirfound"				=> "No directory was given",
+	"noinputmod"				=> "No mod was specified",
+	"nooponalltorrent"			=> "No task was given",
+
+	"badidfound"				=> "Invalid id was given",
+	"baddirfound"				=> "Invalid directory was given",
+
+	"notanurl"				=> "Not valid URL was given",
+	"rtfileinisize"				=> "The uploaded file exceeds the upload_max_filesize directive in php.ini",
+	"rtfileformsize"			=> "The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form",
+	"rtfilepartial"				=> "The uploaded file was only partially uploaded",
+	"rtfilenofile"				=> "No file was uploaded",
+	"rtfilenotmpdir"			=> "Missing a temporary folder",
+	"rtfilenowrite"				=> "Failed to write file to disk",
+	"rtfileother"				=> "Upload error",
+	"rtfileattack"				=> "Possible file upload attack!",
+
+	"badthrottlevals"			=> "Invalid values for throttle",
+	"succthrottlechange"			=> "Throttle changed",
+
+	"badrtdirectory"			=> "rTorrent download directry is not set correctly",
+	"badatpath"				=> "Invalid path was given",
+
+	"novaluefound"				=> "No value was given",
+	"badvaluefound"				=> "Bad value was given",
+
+	"nopriorityfound"			=> "No priority was given",
+	"badpriorityfound"			=> "Bad priority was given",
+
+	"noviewtype"				=> "No view was given",
+	"badviewtype"				=> "Bad view was given",
+	"norefreshrate"				=> "No refresh rate was given",
+	"badrefreshrate"			=> "Bad refresh rate was given",
+	"nolanguage"				=> "No language was given",
+	"badlanguage"				=> "Bad language was given (no translation is available for this language)",
+
+	"succtorrentload"			=> "Torrent loaded",
+	"succtorrentstart"			=> "Torrent started",
+	"succtorrentsstart"			=> "Torrents started",
+	"succtorrentopen"			=> "Torrent opened",
+	"succtorrentsopen"			=> "Torrents opened",
+	"succtorrentstop"			=> "Torrent stopped",
+	"succtorrentsstop"			=> "Torrents stopped",
+	"succtorrentclose"			=> "Torrent closed",
+	"succtorrentsclose"			=> "Torrents closed",
+	"succtorrentcheckhash"			=> "Torrent hash check started",
+	"succtorrentscheckhash"			=> "Torrents hash check started",
+	"succtorrentremove"			=> "Torrent removed",
+	"succtorrentsremove"			=> "Torrents removed",
+	"succtorrenterase"			=> "Torrent erased",
+	"warntorrenterase"			=> "Torrent erased, but not all the files were removed",
+	"succtorrentserase"			=> "Torrents erased",
+	"succprioritychange"			=> "Torrent priority changed",
+	"succfileprioritychange"		=> "File priority changed",
+	"succdirprioritychange"			=> "Directory priority changed",
+	"succtrackerenabledchange"		=> "Tracker availablity changed",
+	"succviewchange"			=> "View changed",
+	"succrefreshchange"			=> "Refresh rate changed",
+	"succlanguagechange"			=> "Language changed",
+	"succdhtstart"				=> "DHT server started",
+	"succdhtstop"				=> "DHT server stopped",
+
+	"downloadnotallowed"			=> "You are not allowed to download torrents from the webui",
+	"erasenotallowed"			=> "You are not allowed to erase downloaded data from the webui",
+	"languagenotallowed"			=> "You are not allowed to set the language of the page",
+	"refreshnotallowed"			=> "You are not allowed to set a meta-refresh interval",
+	"throttlenotallowed"			=> "You are not allowed to set throttle",
+
+	"no"					=> "No",
+	"yes"					=> "Yes",
+	"disabled"				=> "Disabled",
+	"enabled"				=> "Enabled",
+	"notset"				=> "Not set",
+
+	"d_connection_current_leech"		=> "Leeching",
+	"d_connection_current_seed"		=> "Seeding",
+	"d_connection_current_initial_seed"	=> "Initial seeding",
+	"d_ignore_commands_0"			=> "Not ignoring commands",
+	"d_ignore_commands_1"			=> "Ignoring commands",
+	"d_active_0"				=> "Stopped",
+	"d_active_1"				=> "Started",
+	"d_hash_checked_0"			=> "Hash not checked",
+	"d_hash_checked_1"			=> "Hash checked",
+	"d_multi_file_multi"			=> "Multi",
+	"d_multi_file_single"			=> "Single",
+	"d_open_0"				=> "Closed",
+	"d_open_1"				=> "Open",
+	"d_complete_0"				=> "Incomplete",
+	"d_complete_1"				=> "Completed",
+	"d_hash_checking_0"			=> "Not hashing",
+	"d_hash_checking_1"			=> "Hashing",
+	"d_hashing_0"				=> "Not hashing",
+	"d_hashing_1"				=> "Normal hashing",
+	"d_hashing_2"				=> "Download finished, hashing",
+	"d_hashing_3"				=> "Re-hashing",
+	"d_priority_0"				=> "Off",
+	"d_priority_1"				=> "Low",
+	"d_priority_2"				=> "Normal",
+	"d_priority_3"				=> "High",
+	"d_state_0"				=> "Stopped",
+	"d_state_1"				=> "Started",
+	"f_open_0"				=> "Closed",
+	"f_open_1"				=> "Open",
+	"f_priority_0"				=> "Off",
+	"f_priority_1"				=> "Normal",
+	"f_priority_2"				=> "High",
+	"p_encrypted_0"				=> "Plain",
+	"p_encrypted_1"				=> "Encrypted",
+	"p_incoming_0"				=> "Outgoing",
+	"p_incoming_1"				=> "Incoming",
+	"t_enabled_0"				=> "Disabled",
+	"t_enabled_1"				=> "Enabled",
+	"t_open_0"				=> "Closed",
+	"t_open_1"				=> "Open",
+	"t_type_1"				=> "TCP",
+	"t_type_2"				=> "UDP",
+	"dht_0"					=> "Stopped",
+	"dht_1"					=> "Started",
+
+	"bind_0000"				=> "All IP addresses",
+	"ip_0000"				=> "Not set",
+	"proxy_address_0000"			=> "Not set",
+
+	"xmlrpc_socket_empty"			=> "Malformed unix socket path",
+	"xmlrpc_socket_noexist"			=> "The socket does not exist",
+	"xmlrpc_socket_noperms"			=> "Cannot read permissions for the socket",
+	"xmlrpc_socket_nosocket"		=> "The socket seems not to be a unix socket",
+	"xmlrpc_socket_nowrite"			=> "Cannot write socket",
+	"xmlrpc_socket_noread"			=> "Cannot read socket",
+	"xmlrpc_url_empty"			=> "The URL is empty",
+	"xmlrpc_localport_outofrange"		=> "Port is out of range",
+	"xmlrpc_port_invalidip"			=> "Invalid IP address",
+	"xmlrpc_port_invalidipplus"		=> "Invalid IP address (this message should never appear - if it does, open a ticker in the rTWi trac, and attach your users.conf)",
+	"xmlrpc_port_outofrange"		=> "Port is out of range",
+	"xmlrpc_nodestination"			=> "Nowhere to connect (malformed address)",
+	"xmlrpc_scgi_connectfailed"		=> "Connecting to rTorrent has failed",
+	"xmlrpc_scgi_readfailed"		=> "Receiving answer from rTorrent has failed",
+	"xmlrpc_scgi_emptystring"		=> "rTorrent has returnde nothing (SCGI)",
+	"xmlrpc_gw_connectfailed"		=> "Connecting to rTorrent (using SCGI gateway) has failed",
+	"xmlrpc_gw_emptystring"			=> "rTorrent has returnde nothing (GW)",
+	"xmlrpc_xml_noload"			=> "Malformed XML (propably a HTTP error, or redirect)",
+	"xmlrpc_request_invalidtype"		=> "Invalid parameter type",
+	"xmlrpc_fault"				=> "rTorrent returned an XMLRPC error",
+
+	"unknown"				=> "Unknown",
+);
+
+$viewtypes = array(
+	"viewtype_main"				=> "Main",
+	"viewtype_default"			=> "Default",
+	"viewtype_name"				=> "Name",
+	"viewtype_active"			=> "Active",
+	"viewtype_started"			=> "Started",
+	"viewtype_stopped"			=> "Stopped",
+	"viewtype_complete"			=> "Complete",
+	"viewtype_incomplete"			=> "Incomplete",
+	"viewtype_hashing"			=> "Hashing",
+	"viewtype_seeding"			=> "Seeding",
+	"viewtype_scheduler"			=> "Scheduler",
+);
+
+$refreshrates = array(
+	"refreshrate_0"				=> "Off",
+	"refreshrate_5"				=> "5 seconds",
+	"refreshrate_60"			=> "1 minute",
+	"refreshrate_180"			=> "3 minutes",
+	"refreshrate_420"			=> "7 minutes",
+	"refreshrate_900"			=> "15 minutes",
+	"refreshrate_1500"			=> "25 minutes",
+);
+
+$languages = array(
+	"en"					=> "English",
+	"de"					=> "German",
+	"hu"					=> "Hungarian",
+	"cht"					=> "Traditional Chinese",
+	"fr"					=> "French",
+);
+
+$label = array(
+	// html head
+	"title"					=> "rTWi - an rTorrent Web interface",
+	"description"				=> "rTWi - an rTorrent Web interface",
+	"author"				=> "Gabor Hudiczius",
+	"mailto"				=> "ghudiczius@gmail.com?subject=rTWi - an rTorrent Web interface",
+
+	// login
+	"username"				=> "Username",
+	"password"				=> "Password",
+	"rememberme"				=> "Remember me",
+	"login"					=> "Login",
+
+	// menu
+	"torrents"				=> "Torrents",
+	"peerlist"				=> "Peer list",
+	"info"					=> "Info",
+	"filelist"				=> "File list",
+	"trackerlist"				=> "Tracker list",
+	"chunksseen"				=> "Chunks seen",
+	"transferlist"				=> "Transfer list",
+	"addtorrent"				=> "Add torrent",
+	"serverinfo"				=> "Server info",
+	"logout"				=> "Logout",
+
+	// misc
+	"ok"					=> "OK",
+	"yes"					=> "Yes",
+	"no"					=> "No",
+	
+	"clicktohide"				=> "Click to hide",
+	"clicktoopen"				=> "Click to open",
+	"clicktocloseopen"			=> "Click to close/open",
+	"clicktochange"				=> "Click to change",
+
+	"view"					=> "View",
+	"selectviewtype"			=> "Select view type",
+	"refresh"				=> "Refresh",
+	"selectrefreshrate"			=> "Select refresh rate",
+	"language"				=> "Language",
+	"selectlanguage"			=> "Select language",
+
+	"areyousure"				=> "Are you sure?",
+	"areyousureerase"			=> "Are you sure, you want to delete",
+	"alldatawillbedestroyed"		=> "All data will be destroyed.",
+
+	"homepage"				=> "rTWi project homepage",
+
+	"highest"				=> "highest",
+
+	// add torrent
+	"openfrom"				=> "Open from",
+	"fileupload"				=> "File upload",
+	"url"					=> "URL",
+	"torrentfile"				=> "Torrent file",
+	"torrenturl"				=> "Torrent URL",
+	"starttorrent"				=> "Start torrent",
+	"starttorrentafteradded"		=> "Start torrent after added",
+	"downloadto"				=> "Download to",
+
+	// tasks on torrents
+	"selecttask"				=> "Select task",
+	"selectone"				=> "Select one",
+
+	"startall"				=> "Start all",
+	"stopall"				=> "Stop all",
+	"openall"				=> "Open all",
+	"closeall"				=> "Close all",
+	"checkall"				=> "Check all",
+	"removeall"				=> "Remove all",
+	"eraseall"				=> "Erase all",
+
+	"start"					=> "Start",
+	"stop"					=> "Stop",
+	"open"					=> "Open",
+	"close"					=> "Close",
+	"checkhash"				=> "Check hash",
+	"remove"				=> "Remove",
+	"erase"					=> "Erase",
+
+	"selectpriority"			=> "Select priority",
+	"selectdirpriority"			=> "Select directory priority",
+	"selectfilepriority"			=> "Select file priority",
+
+	// torrent states
+	"started"				=> "Started",
+	"stopped"				=> "Stopped",
+	"opened"				=> "Opened",
+	"closed"				=> "Closed",
+	"finished"				=> "Finished",
+	"checkhashed"				=> "Hash checked",
+
+	"startedsince"				=> "Started since",
+	"stopedsince"				=> "Stoped since",
+	"openedsince"				=> "Opened since",
+	"closedsince"				=> "Closed since",
+	"finishedsince"				=> "Finished since",
+	"hashingsince"				=> "Hashing since",
+
+	"sincepre"				=> "since",
+	"sincepost"				=> "",
+
+	// torrent stats
+	"details"				=> "Details",
+
+	"done"					=> "done",
+	"downloadfinished"			=> "Download finished",
+	"downloadeddata"			=> "Downloaded data",
+	"torrentsize"				=> "Torrent size",
+	"uploaded"				=> "Uploaded",
+	"uploadeddata"				=> "Uploaded data",
+
+	"percenthashed"				=> "percent hashed",
+	"percentcompleted"			=> "percent completed",
+	"estimatedtimeremaining"		=> "Estimated time remaining",
+	"ignorecommands"			=> "Ignore commands",
+	"ratio"					=> "Ratio",
+
+	"off"					=> "Off",
+	"low"					=> "Low",
+	"normal"				=> "Normal",
+	"high"					=> "High",
+
+	"message"				=> "Message",
+
+	"lasttouched"				=> "Last touched",
+	"filesize"				=> "File size",
+	"downloadfile"				=> "Download file",
+	"trackergroup"				=> "Tracker group",
+	"type"					=> "Type",
+	"selecttrackerenabled"			=> "Select if tracker is enabled",
+	"mininterval"				=> "Minimum interval",
+
+	// stats
+	"throttle"				=> "Throttle",
+	"uploadspeed"				=> "Upload speed",
+	"uploadlimit"				=> "Upload limit",
+	"nouploadlimit"				=> "No upload limit",
+	"downloadspeed"				=> "Download speed",
+	"downloadlimit"				=> "Download limit",
+	"nodownloadlimit"			=> "No download limit",
+	"rate"					=> "Rate",
+
+	// info page
+	"name"					=> "Name",
+	"infohash"				=> "Info hash",
+	"localid"				=> "Local ID",
+	"localidhtml"				=> "Local ID (html)",
+	"directory"				=> "Directory",
+	"tiedtofile"				=> "Tied to file",
+	"filestats"				=> "File stats",
+	"files"					=> "files",
+	"private"				=> "Private",
+	"chunks"				=> "Chunks",
+	"priority"				=> "Priority",
+	"statechanged"				=> "State changed",
+	"freediskspace"				=> "Free diskspace",
+	"connectiontype"			=> "Connection type",
+	"trackers"				=> "Trackers",
+	"peersconnected"			=> "Peers connected",
+	"dmaxpeers"				=> "Maximum",
+	"dminpeers"				=> "Minimum",
+	"leechers"				=> "Leechers",
+	"seeders"				=> "Seeders",
+	"pexenabled"				=> "PEX enabled",
+	"pexsize"				=> "PEX size",
+	"upload"				=> "Upload",
+	"download"				=> "Download",
+	"skipped"				=> "Skipped",
+
+	// server info page
+	"clientversion"				=> "Client version",
+	"libraryversion"			=> "Library version",
+	"workingdirectory"			=> "Working directory",
+	"downloaddirectory"			=> "Download directory",
+	"sessiondirectory"			=> "Session directory",
+	"hostname"				=> "Hostname",
+	"pid"					=> "PID",
+	"listeningipaddress"			=> "Listening IP address",
+	"reportedipaddress"			=> "IP address reported to the tracker",
+	"portopened"				=> "Port opened",
+	"randomport"				=> "Random port",
+	"portrange"				=> "Port range",
+	"udptrackers"				=> "Use UDP trackers",
+	"changedhtstatus"			=> "Start/stop DHT server",
+	"dht"					=> "DHT server",
+	"dhtport"				=> "DHT port",
+	"dhtcycle"				=> "DHT cycle",
+	"dhtqueries"				=> "DHT queries received / sent",
+	"dhtreplies"				=> "DHT replies received",
+	"dhtbytes"				=> "DHT bytes read / written",
+	"dhtnodes"				=> "DHT nodes",
+	"in"					=> "in",
+	"buckets"				=> "buckets",
+	"dhtpeers"				=> "DHT peers",
+	"dhttorrents"				=> "DHT torrents",
+	"maxuploads"				=> "Maximum number of uploads",
+	"maxpeers"				=> "Minimum number of peers",
+	"minpeers"				=> "Maximum number of peers",
+	"memoryusage"				=> "Memory usage",
+	"maxmemoryusage"			=> "Max memory usage",
+	"hashcheck"				=> "Hash check",
+	"safesync"				=> "Safe sync",
+	"sendbuffer"				=> "Send buffer",
+	"receivebuffer"				=> "Receive buffer",
+
+	// peer list page
+	"address"				=> "Address",
+	"port"					=> "Port",
+	"up_rate"				=> "Up",
+	"down_rate"				=> "Down",
+	"peer_rate"				=> "Peer",
+	"pdone"					=> "Done",
+	"encrypted"				=> "Encrypted",
+	"incoming"				=> "Connection",
+	"pclientversion"			=> "Client version",
+
+	// tracker list page
+	"focus"					=> "Focus",
+	"enabled"				=> "Enabled",
+	"seedersleechers"			=> "S/L",
+	"lasttimescraped"			=> "Last time scraped",
+);
+
+?>
Index: includes/messages.fr.inc.php
===================================================================
--- includes/messages.fr.inc.php	(revision 9479cdac9602f889de28ba22cd8b1823c8b13abe)
+++ includes/messages.fr.inc.php	(revision 9479cdac9602f889de28ba22cd8b1823c8b13abe)
@@ -0,0 +1,415 @@
+<?php
+
+$message = array(
+    "badlogin"                          => "Nom d'utilisateur et/ou mot de passe incorrect(s)",
+    "succlogin"                         => "Vous vous êtes connecté avec succès",
+    "succlogout"                        => "Vous vous êtes déconnecté avec succès",
+
+    "noconn"                            => "Pas de connexion",
+
+    "nohashfound"                       => "Pas de torrent trouvé pour ce hash",
+    "noidfound"                         => "ID manquant",
+    "nodirfound"                        => "Répertoire manquant",
+    "noinputmod"                        => "Input mod manquant",
+    "nooponalltorrent"                  => "Aucune tâche n'a été fournie",
+
+    "badidfound"                        => "ID incorrect",
+    "baddirfound"                       => "Répertoire invalide",
+
+    "notanurl"                          => "URL invalide",
+    "rtfileinisize"                     => "La taille du fichier téléversé dépasse la directive upload_max_filesize dans php.ini",
+    "rtfileformsize"                    => "La taille du fichier téléversé dépasse la directive MAX_FILE_SIZE du formulaire HTML",
+    "rtfilepartial"                     => "Le fichier est téléversé partiellement",
+    "rtfilenofile"                      => "Acucun fichier téléversé",
+    "rtfilenotmpdir"                    => "Dossier introuvable",
+    "rtfilenowrite"                     => "Echec de l'écriture sur disque",
+    "rtfileother"                       => "Erreur de téléversement",
+    "rtfileattack"                      => "Attaque suspectée lors du téléversement !",
+
+    "badthrottlevals"                   => "Valeurs invalides pour le throttle",
+    "succthrottlechange"                => "Throttle modifié avec succès",
+
+    "badrtdirectory"                    => "Le dossier de téléchargement rTorrent est incorrect",
+    "badatpath"                         => "Chemin incorrect",
+
+    "novaluefound"                      => "Valeur manquante",
+    "badvaluefound"                     => "Valeur invalide",
+
+    "nopriorityfound"                   => "Priorité manquante",
+    "badpriorityfound"                  => "Priorité incorrecte",
+
+    "noviewtype"                        => "Type de vue manquant",
+    "badviewtype"                       => "Type de vue incorrect",
+    "norefreshrate"                     => "Taux de rafraichissement manquant",
+    "badrefreshrate"                    => "Taux de rafraichissement incorrect",
+    "nolanguage"                        => "Langue manquante",
+    "badlanguage"                       => "Langue incorrecte (pas de traduction disponible pour cette langue)",
+
+    "succtorrentload"                   => "Torrent chargé avec succès",
+    "succtorrentstart"                  => "Torrent démarré avec succès",
+    "succtorrentsstart"                 => "Torrents démarrés avec succès",
+    "succtorrentopen"                   => "Torrent ouvert avec succès",
+    "succtorrentsopen"                  => "Torrents ouverts avec succès",
+    "succtorrentstop"                   => "Torrent interrompu avec succès",
+    "succtorrentsstop"                  => "Torrents interrompus avec cussès",
+    "succtorrentclose"                  => "Torrent fermé avec succès",
+    "succtorrentsclose"                 => "Torrents fermés avec succès",
+    "succtorrentcheckhash"              => "Vérification du hash démarrée avec succès",
+    "succtorrentscheckhash"             => "Vérification de hash multiple démarrée avec succès",
+    "succtorrentremove"                 => "Torrent annulé avec succès",
+    "succtorrentsremove"                => "Torrents annulé avec succès",
+    "succtorrenterase"                  => "Torrent supprimé",
+    "warntorrenterase"                  => "Torrent supprimé, mais tous les fichiers n'ont pas été effacés",
+    "succtorrentserase"                 => "Torrents supprimés",
+    "succprioritychange"                => "Priorité du torrent modifiée avec succès",
+    "succfileprioritychange"            => "Priorité du fichier modifée avec succès",
+    "succdirprioritychange"             => "Priorité du repertoire modifiée avec succès",
+    "succtrackerenabledchange"          => "Disponibilité du tracker modifiée avec succès",
+    "succviewchange"                    => "Vue modifiée avec succès",
+    "succrefreshchange"                 => "Taux de rafraichissement modifié avec succès",
+    "succlanguagechange"                => "Langue modifiée avec succès",
+    "succdhtstart"                      => "Serveur DHT démarré",
+    "succdhtstop"                       => "Serveur DHT arrêté",
+
+    "downloadnotallowed"                => "Vous n'êtes pas autorisé(e) à télécharger des torrents depuis l'interface web",
+    "erasenotallowed"                   => "Vous n'êtes pas autorisé(e) à supprimer les données téléchargées depuis l'interface web",
+    "languagenotallowed"                => "Vous n'êtes pas autorisé(e) à régler la langue de la page",
+    "refreshnotallowed"                 => "Vous n'êtes pas autorisé(e) à régler l'intervale de rafraichissment meta-refesh",
+    "throttlenotallowed"                => "Vous n'êtes pas autorisé(e) à régler le throttle",
+
+    "no"                                => "Non",
+    "yes"                               => "Oui",
+    "disabled"                          => "Désactivé",
+    "enabled"                           => "Activé",
+    "notset"                            => "Non défini",
+
+    "d_connection_current_leech"        => "Leeching",
+    "d_connection_current_seed"         => "Seeding",
+    "d_connection_current_initial_seed" => "Seeding initial",
+    "d_ignore_commands_0"               => "N'ignore pas les commandes",
+    "d_ignore_commands_1"               => "Ignore les commandes",
+    "d_active_0"                        => "Stoppé",
+    "d_active_1"                        => "Démarré",
+    "d_hash_checked_0"                  => "Hash non vérifié",
+    "d_hash_checked_1"                  => "Hash vérifié",
+    "d_multi_file_multi"                => "Multiple",
+    "d_multi_file_single"               => "Simple",
+    "d_open_0"                          => "Fermé",
+    "d_open_1"                          => "Ouvert",
+    "d_complete_0"                      => "Incomplet",
+    "d_complete_1"                      => "Terminé",
+    "d_hash_checking_0"                 => "Vérif du hash inactive",
+    "d_hash_checking_1"                 => "Vérification du hash",
+    "d_hashing_0"                       => "Hachage inactif",
+    "d_hashing_1"                       => "Hachage normal en cours",
+    "d_hashing_2"                       => "Téléchargement terminé, hachage",
+    "d_hashing_3"                       => "Re-hachage",
+    "d_priority_0"                      => "Aucune",
+    "d_priority_1"                      => "Basse",
+    "d_priority_2"                      => "Normale",
+    "d_priority_3"                      => "Haute",
+    "d_state_0"                         => "Arrêté",
+    "d_state_1"                         => "Démarré",
+    "f_open_0"                          => "Fermé",
+    "f_open_1"                          => "Ouvert",
+    "f_priority_0"                      => "Aucune",
+    "f_priority_1"                      => "Normale",
+    "f_priority_2"                      => "Haute",
+    "p_encrypted_0"                     => "Clair",
+    "p_encrypted_1"                     => "Crypté",
+    "p_incoming_0"                      => "Sorties",
+    "p_incoming_1"                      => "Arrivées",
+    "t_enabled_0"                       => "Désactivé",
+    "t_enabled_1"                       => "Activé",
+    "t_open_0"                          => "Fermé",
+    "t_open_1"                          => "Ouvert",
+    "t_type_1"                          => "TCP",
+    "t_type_2"                          => "UDP",
+    "dht_0"                             => "Arrêté",
+    "dht_1"                             => "Démarré",
+
+    "bind_0000"                         => "Toute adresse IP",
+    "ip_0000"                           => "Toute adresse IP",
+    "proxy_address_0000"                => "Toute adresse de proxy",
+
+    "xmlrpc_socket_empty"               => "Chemin de socket unix incorrect",
+    "xmlrpc_socket_noexist"             => "La socket n'existe pas",
+    "xmlrpc_socket_noperms"             => "Impossible de lire les permissions de la socket",
+    "xmlrpc_socket_nosocket"            => "La socket ne semble pas être une socket unix",
+    "xmlrpc_socket_nowrite"             => "Impossible d'écrire la socket",
+    "xmlrpc_socket_noread"            	=> "Impossible de lire la socket",
+    "xmlrpc_url_empty"                  => "L'URL est vide",
+    "xmlrpc_localport_outofrange"       => "Le port local est hors de la plage",
+    "xmlrpc_port_invalidip"             => "Adresse IP invalide",
+    "xmlrpc_port_invalidipplus"         => "Adresse IP invalide (ce message ne devrait jamais apparaître - si c'est le cas, ouvrez un ticket sur le trac de rTWi, et joignez y votre users.conf)",
+    "xmlrpc_port_outofrange"            => "Le port est hors de la plage",
+    "xmlrpc_nodestination"              => "Destination incorrecte (adresse incorrecte)",
+    "xmlrpc_scgi_connectfailed"         => "La connexion à rTorrent a echoué",
+    "xmlrpc_scgi_readfailed"            => "La lecture de la réponse d'rTorrent a échoué",
+    "xmlrpc_scgi_emptystring"           => "rTorrent n'a pas répondu (SCGI)",
+    "xmlrpc_gw_connectfailed"           => "La connexion à rTorrent (en utilisant la passerelle SCGI) a échoué",
+    "xmlrpc_gw_emptystring"             => "rTorrent n'a pas répondu (GW)",
+    "xmlrpc_xml_noload"                 => "XML incorrect (probablement une erreur HTTP, ou une redirection)",
+    "xmlrpc_request_invalidtype"        => "Type de requête invalide",
+    "xmlrpc_fault"                      => "rTorrent a retourné une erreur XMLRPC",
+
+    "unknown"                           => "Inconnu",
+);
+
+$viewtypes = array(
+    "viewtype_main"                     => "Principal",
+    "viewtype_default"                  => "Par défaut",
+    "viewtype_name"                     => "Nom",
+    "viewtype_active"                   => "Actif",
+    "viewtype_started"                  => "Démarré",
+    "viewtype_stopped"                  => "Arrêté",
+    "viewtype_complete"                 => "Terminé",
+    "viewtype_incomplete"               => "Incomplet",
+    "viewtype_hashing"                  => "Hachage",
+    "viewtype_seeding"                  => "Seeding",
+    "viewtype_scheduler"                => "Planificateur",
+);
+
+$refreshrates = array(
+    "refreshrate_0"                     => "Eteint",
+    "refreshrate_5"                     => "5 secondes",
+    "refreshrate_60"                    => "1 minute",
+    "refreshrate_180"                   => "3 minutes",
+    "refreshrate_420"                   => "7 minutes",
+    "refreshrate_900"                   => "15 minutes",
+    "refreshrate_1500"                  => "25 minutes",
+);
+
+$languages = array(
+    "en"                                => "English",
+    "de"                                => "German",
+    "hu"                                => "Hungarian",
+    "cht"                               => "Traditional Chinese",
+	"fr"                                => "French",
+);
+
+$label = array(
+    // html head
+    "title"                             => "rTWi - une interface Web pour rTorrent",
+    "description"                       => "rTWi - une interface Web pour rTorrent",
+    "author"                            => "Gabor Hudiczius - Translated by JeRoMe@LaMaRtInIeRe.Eu>",
+    "mailto"                            => "ghudiczius@gmail.com?subject=rTWi - an rTorrent Web interface - french user",
+
+    // login
+    "username"                          => "Nom d'utilisateur",
+    "password"                          => "Mot de passe",
+    "rememberme"                        => "Se souvenir de moi",
+    "login"                             => "Connexion",
+
+    // menu
+    "torrents"                          => "Torrents",
+    "peerlist"                          => "Liste des pears",
+    "info"                              => "Info",
+    "filelist"                          => "Liste des fichiers",
+    "trackerlist"                       => "Liste des trackers",
+    "chunksseen"                        => "Chunks trouvés",
+    "transferlist"                      => "Liste des transferts",
+    "addtorrent"                        => "Ajouter un torrent",
+    "serverinfo"                        => "Infos sur le serveur",
+    "logout"                            => "Déconnexion",
+
+    // misc
+    "ok"                                => "OK",
+    "yes"                               => "Oui",
+    "no"                                => "Non",
+    
+    "clicktohide"                       => "Cliquer pour masquer",
+    "clicktoopen"                       => "Cliquer pour ouvrir",
+    "clicktocloseopen"                  => "Cliquer pour fermer/ouvrir",
+    "clicktochange"                     => "Cliquer pour modifier",
+
+    "view"                              => "Vue",
+    "selectviewtype"                    => "Sélectionner le type de vue",
+    "refresh"                           => "Rafraichir",
+    "selectrefreshrate"                 => "Sélectionner le taux de rafraichissement",
+    "language"                          => "Langue",
+    "selectlanguage"                    => "Select language",
+
+    "areyousure"                        => "Etes vous sûr(e) ?",
+    "areyousureerase"                   => "Etes vous sûr(e) de vouloir effacer ?",
+    "alldatawillbedestroyed"            => "Toutes les données vont être détruites",
+
+    "homepage"                          => "Page d'accueil du projet rTWi",
+
+    "highest"                           => "Maxi",
+
+    // add torrent
+    "openfrom"                          => "Ouvrir à partir de",
+    "fileupload"                        => "Téléversement de fichier",
+    "url"                               => "URL",
+    "torrentfile"                       => "Fichier torrent",
+    "torrenturl"                        => "URL du torrent",
+    "starttorrent"                      => "Démarrer le torrent",
+    "starttorrentafteradded"            => "Démarrer le torrent après l'ajout",
+    "downloadto"                        => "Télécharger vers",
+
+    // tasks on torrents
+    "selecttask"                        => "Sélectionner une tâche",
+    "selectone"                         => "En sélectionner une",
+
+    "startall"                          => "Tout démarrer",
+    "stopall"                           => "Tout arrêter",
+    "openall"                           => "Tout ouvrir",
+    "closeall"                          => "Tout fermer",
+    "checkall"                          => "Tout vérifier",
+    "removeall"                         => "Tout retirer",
+    "eraseall"                          => "Tout effacer",
+
+    "start"                             => "Démarrer",
+    "stop"                              => "Arrêter",
+    "open"                              => "Ouvrir",
+    "close"                             => "Fermer",
+    "checkhash"                         => "Vérif de hash",
+    "remove"                            => "Retirer",
+    "erase"                             => "Effacer",
+
+    "selectpriority"                    => "Sélectionner une priorité",
+    "selectdirpriority"                 => "Sélectionner un répertoire",
+    "selectfilepriority"                => "Sélectionner la priorité du fichier",
+
+    // torrent states
+    "started"                           => "Démarré",
+    "stopped"                           => "Arrêté",
+    "opened"                            => "Ouvert",
+    "closed"                            => "Fermé",
+    "finished"                          => "Terminé",
+    "checkhashed"                       => "Hash vérifié",
+
+    "startedsince"                      => "Démarré depuis",
+    "stopedsince"                       => "Arrêté depuis",
+    "openedsince"                       => "Ouvert depuis",
+    "closedsince"                       => "Fermé depuis",
+    "finishedsince"                     => "Terminé depuis",
+    "hashingsince"                      => "Hache depuis",
+
+    "sincepre"                          => "Pre-depuis",
+    "sincepost"                         => "Post-depuis",
+
+    // torrent stats
+    "details"                           => "Détails",
+
+    "done"                              => "Fait",
+    "downloadfinished"                  => "Téléchargement terminé",
+    "downloadeddata"                    => "Données téléchargées",
+    "torrentsize"                       => "Taille du torrent",
+    "uploaded"                          => "Téléversé",
+    "uploadeddata"                      => "Données téléversées",
+
+    "percenthashed"                     => "Pourcentage hashé",
+    "percentcompleted"                  => "Pourcentage effectué",
+    "estimatedtimeremaining"            => "Temps restant estimé",
+    "ignorecommands"                    => "Ignorer les commandes",
+    "ratio"                             => "Taux",
+
+    "off"                               => "Arrêté",
+    "low"                               => "Bas",
+    "normal"                            => "Normal",
+    "high"                              => "Haut",
+
+    "message"                           => "Message",
+
+    "lasttouched"                       => "Dernière fois touché",
+    "filesize"                          => "Taille du fichier",
+    "downloadfile"                      => "Télécharger le fichier",
+    "trackergroup"                      => "Groupe de trackers",
+    "type"                              => "Type",
+    "selecttrackerenabled"              => "Choisir si le tracker est activé",
+    "mininterval"                       => "Intervalle minimum",
+
+    // stats
+    "throttle"                          => "Throttle",
+    "uploadspeed"                       => "Vitesse de téléversement",
+    "uploadlimit"                       => "Limite de téléversement",
+    "nouploadlimit"                     => "Pas de limite de téléversement",
+    "downloadspeed"                     => "Vitesse de téléchargement",
+    "downloadlimit"                     => "Limite de téléchargement",
+    "nodownloadlimit"                   => "Pas de limite de téléchargement",
+    "rate"                              => "Taux",
+
+    // info page
+    "name"                              => "Nom",
+    "infohash"                          => "Infos hash",
+    "localid"                           => "ID local",
+    "localidhtml"                       => "ID local (html)",
+    "directory"                         => "Répertoire",
+    "tiedtofile"                        => "Lié au fichier",
+    "filestats"                         => "Stats fichier",
+    "files"                             => "Fichiers",
+    "private"                           => "Privé",
+    "chunks"                            => "Chunks",
+    "priority"                          => "Priorité",
+    "statechanged"                      => "Etat changé",
+    "freediskspace"                     => "Espace disque libre",
+    "connectiontype"                    => "Type de connexion",
+    "trackers"                          => "Trackers",
+    "peersconnected"                    => "Peers connectés",
+    "dmaxpeers"                         => "Maximum",
+    "dminpeers"                         => "Minimum",
+    "leechers"                          => "Leechers",
+    "seeders"                           => "Seeders",
+    "pexenabled"                        => "PEX activé",
+    "pexsize"                           => "Taille PEX",
+    "upload"                            => "Téléversement",
+    "download"                          => "Téléchargement",
+    "skipped"                           => "Passé",
+
+    // server info page
+    "clientversion"                     => "Version du client",
+    "libraryversion"                    => "Version de la lib",
+    "workingdirectory"                  => "Répertoire de travail",
+    "downloaddirectory"                 => "Répertoire de téléchargement",
+    "sessiondirectory"                  => "Répertoire de session",
+    "hostname"                          => "Nom d'hôte",
+    "pid"                               => "PID",
+    "listeningipaddress"                => "Ecoute sur l'adresse IP",
+    "reportedipaddress"                 => "Adresse IP rapportée au tracker",
+    "portopened"                        => "Port ouvrir",
+    "randomport"                        => "Port aléatoire",
+    "portrange"                         => "Plage de ports",
+    "udptrackers"                       => "Utiliser des tackers UDP",
+    "changedhtstatus"                   => "Démarrer/Arrêter le serveur DHT",
+    "dht"                               => "Serveur DHT",
+    "dhtport"                           => "Port DHT",
+    "dhtcycle"                          => "Cycle DHT",
+    "dhtqueries"                        => "Requêtes DHT reçues / envoyées",
+    "dhtreplies"                        => "Réponses DHT reçues",
+    "dhtbytes"                          => "Octets DHT lus / écrits",
+    "dhtnodes"                          => "Nodes DHT",
+    "in"                                => "Entrant",
+    "buckets"                           => "Buckets",
+    "dhtpeers"                          => "Peers DHT",
+    "dhttorrents"                       => "Torrents DHT",
+    "maxuploads"                        => "Nombre maximum de téléversements",
+    "maxpeers"                          => "Nombre minimum de peers",
+    "minpeers"                          => "Nombre maximum de peers",
+    "memoryusage"                       => "Allocation de la mémoire",
+    "maxmemoryusage"                    => "Mémoire allouée maximum",
+    "hashcheck"                         => "Vérif de hash",
+    "safesync"                          => "Safe Sync",
+    "sendbuffer"                        => "Envoyer le buffer",
+    "receivebuffer"                     => "Recevoir le buffer",
+
+    // peer list page
+    "address"                           => "Adresse",
+    "port"                              => "Port",
+    "up_rate"                           => "Taux d'up",
+    "down_rate"                         => "Taux de dl",
+    "peer_rate"                         => "Peer",
+    "pdone"                             => "Fait",
+    "encrypted"                         => "Crypté",
+    "incoming"                          => "Connexion",
+    "pclientversion"                    => "Version du client",
+
+    // tracker list page
+    "focus"                             => "Focus",
+    "enabled"                           => "Activé",
+    "seedersleechers"                   => "S/L",
+    "lasttimescraped"                   => "Dernier accomplissement",
+);
+
+?>
Index: includes/messages.hu.inc.php
===================================================================
--- includes/messages.hu.inc.php	(revision 9479cdac9602f889de28ba22cd8b1823c8b13abe)
+++ includes/messages.hu.inc.php	(revision 9479cdac9602f889de28ba22cd8b1823c8b13abe)
@@ -0,0 +1,415 @@
+<?php
+
+$message = array(
+	"badlogin"				=> "Hibás felhasználó, vagy jelszó",
+	"succlogin"				=> "Sikeres bejelentkezés",
+	"succlogout"				=> "Sikeres kijelentkezés",
+
+	"noconn"				=> "Nincs kapcsolat",
+
+	"nohashfound"				=> "Nincs ilyen torrent",
+	"noidfound"				=> "Nincs ID megadva",
+	"nodirfound"				=> "Nincs könyvtár megadva",
+	"noinputmod"				=> "Nincs funkció megadva",
+	"nooponalltorrent"			=> "Nincs feladat megadva",
+
+	"badidfound"				=> "Hibás ID",
+	"baddirfound"				=> "Hibás könyvtárnév",
+
+	"notanurl"				=> "Nincs URL megadva",
+	"rtfileinisize"				=> "A feltöltött fájl mérete meghaladja a PHP.ini-ben megengedett (upload_max_filesize) méretet",
+	"rtfileformsize"			=> "A feltöltött fájl mérete meghaladja a HTML űrlapon megengedett (MAX_FILE_SIZE) méretet",
+	"rtfilepartial"				=> "A fájl csak részlegesen került feltöltésre",
+	"rtfilenofile"				=> "Nem történt fájlfeltöltés",
+	"rtfilenotmpdir"			=> "Nincs megadva ideiglenes könyvtár",
+	"rtfilenowrite"				=> "Nem sikerült írni a lemezre",
+	"rtfileother"				=> "Feltöltési hiba",
+	"rtfileattack"				=> "Lehetséges támadás!",
+
+	"badthrottlevals"			=> "Hibás sebességkorlát érték",
+	"succthrottlechange"			=> "Sebességkorlát megváltoztatva",
+
+	"badrtdirectory"			=> "Az rTorrent letöltési könyvtár hibásan van megadva",
+	"badatpath"				=> "Hibás útvonal",
+
+	"novaluefound"				=> "Nincs érték megadva",
+	"badvaluefound"				=> "Hibás érték",
+
+	"nopriorityfound"			=> "Nincs prioritás megadva",
+	"badpriorityfound"			=> "Hibás prioritás",
+
+	"noviewtype"				=> "Nincs megadva nézet",
+	"badviewtype"				=> "Hibás nézet",
+	"norefreshrate"				=> "Nincs megadva intervallum",
+	"badrefreshrate"			=> "Hibás frissítési intervallum",
+	"nolanguage"				=> "Nincs megadva nyelv",
+	"badlanguage"				=> "Nincs ilyen nyelvi file",
+
+	"succtorrentload"			=> "Torrent betöltve",
+	"succtorrentstart"			=> "Torrent elindítva",
+	"succtorrentsstart"			=> "Torrentek elindítva",
+	"succtorrentopen"			=> "Torrent megnyitva",
+	"succtorrentsopen"			=> "Torrentek megnzitva",
+	"succtorrentstop"			=> "Torrent leállítva",
+	"succtorrentsstop"			=> "Torrentek leállítva",
+	"succtorrentclose"			=> "Torrent bezárva",
+	"succtorrentsclose"			=> "Torrentek bezárva",
+	"succtorrentcheckhash"			=> "Torrent ellenőrzés elindítva",
+	"succtorrentscheckhash"			=> "Torrentek ellenőrzése elindítva",
+	"succtorrentremove"			=> "Torrent eltávolítva",
+	"succtorrentsremove"			=> "Torrentek eltávolítva",
+	"succtorrenterase"			=> "Torrent törölve",
+	"warntorrenterase"			=> "Torrent törölve, de nem minden fájl lett eltávolítva",
+	"succtorrentserase"			=> "Torrentek törölve",
+	"succprioritychange"			=> "Torrent prioritása beállítva",
+	"succfileprioritychange"		=> "Fájl prioritása beállítva",
+	"succdirprioritychange"			=> "Könyvtár prioritása beállítva",
+	"succtrackerenabledchange"		=> "Tracker elérhetősége beállítva",
+	"succviewchange"			=> "Nézet beállítva",
+	"succrefreshchange"			=> "Frissítés beállítva",
+	"succlanguagechange"			=> "Nyelv beállítva",
+	"succdhtstart"				=> "DHT szerver elindítva",
+	"succdhtstop"				=> "DHT szerver leállítva",
+
+	"downloadnotallowed"			=> "Nem vagy jogosult torrentek letöltésére a web-es felületről",
+	"erasenotallowed"			=> "Nem vagy jogosult torrentek törlésére a web-es felületen",
+	"languagenotallowed"			=> "Nem vagy jogosult nyelv beállítására",
+	"refreshnotallowed"			=> "Nem vagy jogosult frissítés beállítására",
+	"throttlenotallowed"			=> "Nem vagy jogosult sebességkorlát beállítására",
+
+	"no"					=> "Nem",
+	"yes"					=> "Igen",
+	"disabled"				=> "Letiltva",
+	"enabled"				=> "Engedélyezve",
+	"notset"				=> "Nincs beállítva",
+
+	"d_connection_current_leech"		=> "Letöltés",
+	"d_connection_current_seed"		=> "Feltöltés",
+	"d_connection_current_initial_seed"	=> "Kezdő feltöltés",
+	"d_ignore_commands_0"			=> "Parancsok figyelembevétele",
+	"d_ignore_commands_1"			=> "Parancsok figyelmen kívü hagyása",
+	"d_active_0"				=> "Leállítva",
+	"d_active_1"				=> "Elindítva",
+	"d_hash_checked_0"			=> "Nem volt ellenőrizve",
+	"d_hash_checked_1"			=> "Ellenőrizve",
+	"d_multi_file_multi"			=> "",
+	"d_multi_file_single"			=> "Egyetlen fájl",
+	"d_open_0"				=> "Zárva",
+	"d_open_1"				=> "Nyitva",
+	"d_complete_0"				=> "Befejezetlen",
+	"d_complete_1"				=> "Befejezett",
+	"d_hash_checking_0"			=> "Nincs ellenőrzés alatt",
+	"d_hash_checking_1"			=> "Ellenőrzés alatt",
+	"d_hashing_0"				=> "Nincs ellenőrzés alatt",
+	"d_hashing_1"				=> "Normál ellenőrzés",
+	"d_hashing_2"				=> "Letöltés befejezve, ellenőrzés",
+	"d_hashing_3"				=> "Újraellenőrzés",
+	"d_priority_0"				=> "Leállítva",
+	"d_priority_1"				=> "Alacsonz",
+	"d_priority_2"				=> "Normál",
+	"d_priority_3"				=> "Magas",
+	"d_state_0"				=> "Leállítva",
+	"d_state_1"				=> "Elindítva",
+	"f_open_0"				=> "Zárva",
+	"f_open_1"				=> "Nyitva",
+	"f_priority_0"				=> "Leállítva",
+	"f_priority_1"				=> "Normál",
+	"f_priority_2"				=> "Magas",
+	"p_encrypted_0"				=> "Sima",
+	"p_encrypted_1"				=> "Titkosított",
+	"p_incoming_0"				=> "Kimenő",
+	"p_incoming_1"				=> "Bejövő",
+	"t_enabled_0"				=> "Letiltva",
+	"t_enabled_1"				=> "Engedélyezve",
+	"t_open_0"				=> "Zárva",
+	"t_open_1"				=> "Nyitva",
+	"t_type_1"				=> "TCP",
+	"t_type_2"				=> "UDP",
+	"dht_0"					=> "Leállítva",
+	"dht_1"					=> "Elindítva",
+
+	"bind_0000"				=> "Minden IP cím",
+	"ip_0000"				=> "Nincs beállítva",
+	"proxy_address_0000"			=> "Nincs beállítva",
+
+	"xmlrpc_socket_empty"			=> "A unix socket útvonalának formátuma hiás",
+	"xmlrpc_socket_noexist"			=> "A socket nem létezik",
+	"xmlrpc_socket_noperms"			=> "Nem lehet kiolvasni a socket jogosultságait",
+	"xmlrpc_socket_nosocket"		=> "A socket nem unix socket",
+	"xmlrpc_socket_nowrite"			=> "A socket nem írható",
+	"xmlrpc_socket_noread"			=> "A socket nem olvasható",
+	"xmlrpc_url_empty"			=> "Az URL üres",
+	"xmlrpc_localport_outofrange"		=> "A port 1 és 65535 között kell, hogy legyen",
+	"xmlrpc_port_invalidip"			=> "Hibás IP cím",
+	"xmlrpc_port_invalidipplus"		=> "Hibás IP cím (ez a hiba elvileg nem fordulhat elő, ellenkező esetben nyiss egy ticket-et a trac-ban és csatold a users.conf fájlt)",
+	"xmlrpc_port_outofrange"		=> "A port 1 és 65535 között kell, hogy legyen",
+	"xmlrpc_nodestination"			=> "Ninc hová csatlakozni (hibás cím)",
+	"xmlrpc_scgi_connectfailed"		=> "Nem sikerült kapcsolódni az rTorrent-hez",
+	"xmlrpc_scgi_readfailed"		=> "Nem sikerült választ kapni az rTorrent-től",
+	"xmlrpc_scgi_emptystring"		=> "Az rTorrent semmit nem adott vissza (SCGI)",
+	"xmlrpc_gw_connectfailed"		=> "Nem siker csatlakozni az rTorrent-hez (SCGI gateway haszálatával)",
+	"xmlrpc_gw_emptystring"			=> "Az rTorrent semmit nem adott vissza (GW)",
+	"xmlrpc_xml_noload"			=> "Hibás XML (valószínqleg HTTP hibaoldal, vagy átirányítás)",
+	"xmlrpc_request_invalidtype"		=> "Hibás paraméter típus",
+	"xmlrpc_fault"				=> "Az rTorrent XMLRPC hibával tért vissza",
+
+	"unknown"				=> "Ismeretlen",
+);
+
+$viewtypes = array(
+	"viewtype_main"				=> "Fő nézet",
+	"viewtype_default"			=> "Alapértelmezett",
+	"viewtype_name"				=> "Név szerint",
+	"viewtype_active"			=> "Aktív",
+	"viewtype_started"			=> "Elindított torrentek",
+	"viewtype_stopped"			=> "Leállított torrentek",
+	"viewtype_complete"			=> "Befejezett torrentek",
+	"viewtype_incomplete"			=> "Befejezetlen torrentek",
+	"viewtype_hashing"			=> "Ellenőrzés alatt álló torrentek",
+	"viewtype_seeding"			=> "Feltöltések",
+	"viewtype_scheduler"			=> "A nemlétező ütemező",
+);
+
+$refreshrates = array(
+	"refreshrate_0"				=> "Letiltva",
+	"refreshrate_5"				=> "5 másodperc",
+	"refreshrate_60"			=> "1 perc",
+	"refreshrate_180"			=> "3 perc",
+	"refreshrate_420"			=> "7 perc",
+	"refreshrate_900"			=> "15 perc",
+	"refreshrate_1500"			=> "25 perc",
+);
+
+$languages = array(
+	"en"					=> "Angol",
+	"de"					=> "Német",
+	"hu"					=> "Magyar",
+	"cht"					=> "Kínai (hagyományos)",
+	"fr"					=> "Francia",
+);
+
+$label = array(
+	// html head
+	"title"					=> "rTWi - egy rTorrent Web interfész",
+	"description"				=> "rTWi - egy rTorrent Web interfész",
+	"author"				=> "Hudiczius Gábor",
+	"mailto"				=> "ghudiczius@gmail.com?subject=rTWi - egy rTorrent Web interfész",
+
+	// login
+	"username"				=> "Felhasználó",
+	"password"				=> "Jelszó",
+	"rememberme"				=> "Jegyezz meg",
+	"login"					=> "Belépés",
+
+	// menu
+	"torrents"				=> "Torrentek",
+	"peerlist"				=> "Peer lista",
+	"info"					=> "Információ",
+	"filelist"				=> "Fájl lista",
+	"trackerlist"				=> "Tracker lista",
+	"chunksseen"				=> "Elérhető syeletek",
+	"transferlist"				=> "Átviteli lista",
+	"addtorrent"				=> "Torrent hozzáadása",
+	"serverinfo"				=> "Szerver információ",
+	"logout"				=> "Kijelentkezés",
+
+	// misc
+	"ok"					=> "OK",
+	"yes"					=> "Igen",
+	"no"					=> "Nem",
+	
+	"clicktohide"				=> "Kattints ide az elrejtéshez",
+	"clicktoopen"				=> "Kattints ide a lenyitáshoz",
+	"clicktocloseopen"			=> "Kattints ide a bezáráshoz/lenyitáshoz",
+	"clicktochange"				=> "Kattints ide a megváltoztatásához",
+
+	"view"					=> "Nézet",
+	"selectviewtype"			=> "Válassz megjelenítést",
+	"refresh"				=> "Frissítés",
+	"selectrefreshrate"			=> "Válassz frissítési időközt",
+	"language"				=> "Nyelv",
+	"selectlanguage"			=> "Válassz nyelvet",
+
+	"areyousure"				=> "Biztosan törlöd?",
+	"areyousureerase"			=> "Biztosan törlöd?",
+	"alldatawillbedestroyed"		=> "Minden adat törlésre fog kerülni.",
+
+	"homepage"				=> "rTWi honlap",
+
+	"highest"				=> "legmagasabb",
+
+	// add torrent
+	"openfrom"				=> "Megnyitás",
+	"fileupload"				=> "Fájlfeltöltéssel",
+	"url"					=> "URL megadásával",
+	"torrentfile"				=> "Torrent fájl",
+	"torrenturl"				=> "Torrent URL-je",
+	"starttorrent"				=> "Torrent indítása",
+	"starttorrentafteradded"		=> "Torrent indítása letöltés után",
+	"downloadto"				=> "Letöltés",
+
+	// tasks on torrents
+	"selecttask"				=> "Válassz műveletet",
+	"selectone"				=> "Válassz egyet",
+
+	"startall"				=> "Összes indítása",
+	"stopall"				=> "Összes leállítása",
+	"openall"				=> "Összes megnyitása",
+	"closeall"				=> "Összes bezárása",
+	"checkall"				=> "Összes ellenőrzése",
+	"removeall"				=> "Összes eltávolítása",
+	"eraseall"				=> "Összes törlése",
+
+	"start"					=> "Elindít",
+	"stop"					=> "Leállít",
+	"open"					=> "Megnyit",
+	"close"					=> "Bezár",
+	"checkhash"				=> "Hash ellenőrzés",
+	"remove"				=> "Eltávolít",
+	"erase"					=> "Töröl",
+
+	"selectpriority"			=> "Válassz prioritást",
+	"selectdirpriority"			=> "Válassz könyvtár prioritást",
+	"selectfilepriority"			=> "Válassz fájl prioritást",
+
+	// torrent states
+	"started"				=> "Elindítva",
+	"stopped"				=> "Leállítva",
+	"opened"				=> "Nyitva",
+	"closed"				=> "Zárva",
+	"finished"				=> "Kész",
+	"checkhashed"				=> "Hash ellenőrizve",
+
+	"startedsince"				=> "Elindítva:",
+	"stopedsince"				=> "Leállítva:",
+	"openedsince"				=> "Megyyitva:",
+	"closedsince"				=> "Beárva:",
+	"finishedsince"				=> "elkészült:",
+	"hashingsince"				=> "Hash ellenőrés elindítva:",
+
+	"sincepre"				=> "",
+	"sincepost"				=> "óta",
+
+	// torrent stats
+	"details"				=> "Részletek",
+
+	"done"					=> "kész",
+	"downloadfinished"			=> "Letöltés elkészült",
+	"downloadeddata"			=> "Letöltött adatmennyiség",
+	"torrentsize"				=> "Torrent mérete",
+	"uploaded"				=> "Feltöltve",
+	"uploadeddata"				=> "Feltöltött adatmennyiség",
+
+	"percenthashed"				=> "százalék ellenőrizve",
+	"percentcompleted"			=> "százalék elkészült",
+	"estimatedtimeremaining"		=> "Becsült hátralévő idő",
+	"ignorecommands"			=> "Parancsdok figyelmen kívül hagyása",
+	"ratio"					=> "Arány",
+
+	"off"					=> "Leállítva",
+	"low"					=> "Alacsony",
+	"normal"				=> "Normál",
+	"high"					=> "Magas",
+
+	"message"				=> "Üzenet",
+
+	"lasttouched"				=> "Legutóbb módosítva",
+	"filesize"				=> "Fájl mérete",
+	"downloadfile"				=> "Fájl letöltése",
+	"trackergroup"				=> "Tracker csoport",
+	"type"					=> "Típus",
+	"selecttrackerenabled"			=> "Tracker engedélyezése",
+	"mininterval"				=> "Leggyakoribb kapcsolódás",
+
+	// stats
+	"throttle"				=> "Korlát",
+	"uploadspeed"				=> "Feltöltési sebesség",
+	"uploadlimit"				=> "Feltöltési korlát",
+	"nouploadlimit"				=> "Nincs feltöltési korlát",
+	"downloadspeed"				=> "Letöltési sebesség",
+	"downloadlimit"				=> "Letöltési korlát",
+	"nodownloadlimit"			=> "Nincs letöltési korlát",
+	"rate"					=> "Sebesség",
+
+	// info page
+	"name"					=> "Torrent neve",
+	"infohash"				=> "Info hash",
+	"localid"				=> "Azonosító",
+	"localidhtml"				=> "Azonosító (html)",
+	"directory"				=> "Könyvtár",
+	"tiedtofile"				=> "Fájlhoz kötve",
+	"filestats"				=> "Fájlok száma",
+	"files"					=> "fájl",
+	"private"				=> "Privát torrent",
+	"chunks"				=> "Szeletek",
+	"priority"				=> "Prioritás",
+	"statechanged"				=> "Utolsó állapotváltozás",
+	"freediskspace"				=> "Szabad lemezterület",
+	"connectiontype"			=> "Kapcsolat tipusa",
+	"trackers"				=> "Trackerek száma",
+	"peersconnected"			=> "Kapcsolódott peer-ek",
+	"dmaxpeers"				=> "Maximum",
+	"dminpeers"				=> "Minimum",
+	"leechers"				=> "Letöltők száma",
+	"seeders"				=> "Feltöltők száma",
+	"pexenabled"				=> "PEX engedélyezve",
+	"pexsize"				=> "PEX mérete",
+	"upload"				=> "Feltöltés",
+	"download"				=> "Letöltés",
+	"skipped"				=> "Kihagyva",
+
+	// server info page
+	"clientversion"				=> "Kliens verzió",
+	"libraryversion"			=> "Függvénykönyvtár verzió",
+	"workingdirectory"			=> "Munkakönyvtár",
+	"downloaddirectory"			=> "Letöltési könyvtár",
+	"sessiondirectory"			=> "Munkamenet könyvtár",
+	"hostname"				=> "Hosztnév",
+	"pid"					=> "PID",
+	"listeningipaddress"			=> "Kapcsolatot fogadó IP cím",
+	"reportedipaddress"			=> "Tracker felé jelentett IP cím",
+	"portopened"				=> "Nyitott port",
+	"randomport"				=> "Véletlen port",
+	"portrange"				=> "Porttartomány",
+	"udptrackers"				=> "UDP tracker-ek használata",
+	"changedhtstatus"			=> "DHT szerver elindítása/leállítása",
+	"dht"					=> "DHT szerver",
+	"dhtport"				=> "DHT port",
+	"dhtcycle"				=> "DHT kör",
+	"dhtqueries"				=> "DHT fogadott / küldött kérések",
+	"dhtreplies"				=> "DHT fogadott válaszok",
+	"dhtbytes"				=> "DHT olvasott / írt bájtok",
+	"dhtnodes"				=> "DHT pontok",
+	"in"					=> "pont",
+	"buckets"				=> "csokorban",
+	"dhtpeers"				=> "DHT peer-ek",
+	"dhttorrents"				=> "DHT torrentek",
+	"maxuploads"				=> "Feltöltések maximális száma",
+	"maxpeers"				=> "Peer-ek maximális száma",
+	"minpeers"				=> "Peer-ek minimális száma",
+	"memoryusage"				=> "Memóriahasználat",
+	"maxmemoryusage"			=> "Maximális memóriahasználat",
+	"hashcheck"				=> "Hash ellenőrzés",
+	"safesync"				=> "Biztonságos szinkronizálás",
+	"sendbuffer"				=> "Kimeneti puffer",
+	"receivebuffer"				=> "Bejövő puffer",
+
+	// peer list page
+	"address"				=> "IP cím",
+	"port"					=> "Port",
+	"up_rate"				=> "Fel",
+	"down_rate"				=> "Le",
+	"peer_rate"				=> "Peer",
+	"pdone"					=> "Kész",
+	"encrypted"				=> "Titkosítás",
+	"incoming"				=> "Kapcsolat",
+	"pclientversion"			=> "Kliens verziószám",
+
+	// tracker list page
+	"focus"					=> "Fókusz",
+	"enabled"				=> "Engedélyezve",
+	"seedersleechers"			=> "Fel/Le",
+	"lasttimescraped"			=> "Utoljára lekérdezve",
+);
+
+?>
Index: includes/rtwi.conf.sample
===================================================================
--- includes/rtwi.conf.sample	(revision 9479cdac9602f889de28ba22cd8b1823c8b13abe)
+++ includes/rtwi.conf.sample	(revision 9479cdac9602f889de28ba22cd8b1823c8b13abe)
@@ -0,0 +1,54 @@
+; full url of the rTWi (with a trailing slash)
+base =		http://example.com/
+
+; change, if you've renamed the index.html file
+index =		index.php
+
+; change, if you've renamed the input.php file
+input =		input.php
+
+; path to home directory of users (with heading and trailing slash)
+home_path =	/home/
+
+; path to the file which keeps the user related informations
+user_conf =	/etc/rtorrent/users.conf
+
+; language (english and hungarian is available)
+lang =		en
+
+; site theme (look for themes in the "themes" directory)
+site_theme = 	default_ajax
+
+; do a directory tree, which can be expanded/collapsed
+; set to "false" (without the quotes),
+; if your webserver is running on a slow machine
+; and you have torrents with a lots of files
+; (a few hundreds of files in a single torrent, and more)
+dodirtree =	true
+
+; true if ajax is allowed
+ajax =		true
+
+; true if dht is enabled
+dht =		true
+
+; true if users are allowed to download finished files from the webui
+download =	true
+
+; true if users are allowed to erase downloaded data from the webui
+erase =		true
+
+; true if flags are allowed in peers page
+flags =		false
+
+; true if hiding the filelist is allowed
+hidedirtree =	true
+
+; true if users are allowed to set the language of the web interface
+language =	true
+
+; true if users are allowed to set a meta-refresh interval
+refresh =	true
+
+; true if users are allowed to set throttle
+throttle =	true
Index: includes/tools/functions.time.inc.php
===================================================================
--- includes/tools/functions.time.inc.php	(revision 9479cdac9602f889de28ba22cd8b1823c8b13abe)
+++ includes/tools/functions.time.inc.php	(revision 9479cdac9602f889de28ba22cd8b1823c8b13abe)
@@ -0,0 +1,8 @@
+<?php
+
+function getmicrotime() {
+	list( $usec, $sec ) = explode( " ", microtime() );
+	return ( ( float ) $usec + ( float ) $sec );
+}
+
+?>
Index: includes/users.conf.sample
===================================================================
--- includes/users.conf.sample	(revision 9479cdac9602f889de28ba22cd8b1823c8b13abe)
+++ includes/users.conf.sample	(revision 9479cdac9602f889de28ba22cd8b1823c8b13abe)
@@ -0,0 +1,19 @@
+[user1]
+address =	unix:///home/user1/rpc.socket
+pass =		7e240de74fb1ed08fa08d38063f6a6a91462a815
+
+[user1]
+address =	http://example.com/RPC2
+pass =		7e240de74fb1ed08fa08d38063f6a6a91462a815
+
+[user1]
+address =	:12345
+pass =		7e240de74fb1ed08fa08d38063f6a6a91462a815
+
+[user1]
+address =	123.123.123.123:123456
+pass =		7e240de74fb1ed08fa08d38063f6a6a91462a815
+
+[user1]
+address =	unix:///home/cyla/torrent/.socket/rpc.socket
+pass =		5baa61e4c9b93f3f0682250b6cf8331b7ee68fd8
Index: index.php
===================================================================
--- index.php	(revision 9479cdac9602f889de28ba22cd8b1823c8b13abe)
+++ index.php	(revision 9479cdac9602f889de28ba22cd8b1823c8b13abe)
@@ -0,0 +1,1278 @@
+<?php
+
+function myrealpath( $path, $home, $cwd ) {
+	if ( substr( $path, 0, 2 ) == "~/" ) {
+		$path = substr( $path, 2 );
+		$path = "{$home}{$_SESSION["rtwi_nick"]}/{$path}";
+	}
+
+	$oldcwd = getcwd();
+	chdir( $cwd );
+	$newpath = realpath( $path );
+	chdir( $oldcwd );
+
+	return $newpath;
+}
+
+function switch_bytes( $bytes, $d_suffix = "" ) {
+	switch ( $d_suffix ) {
+		case "GB" : {
+			$ret = $bytes / 1024 / 1024 / 1024;
+			$suffix = "GB";
+			break;
+		}
+		case "MB" : {
+			$ret = $bytes / 1024 / 1024;
+			$suffix = "MB";
+			break;
+		}
+		case "KB" : {
+			$ret = $bytes / 1024;
+			$suffix = "KB";
+			break;
+		}
+		default : {
+			if ( $bytes >= 1024 * 1024 * 1024 ) {
+				$ret = $bytes / 1024 / 1024 / 1024;
+				$suffix = "GB";
+			} elseif ( $bytes >= 1024 * 1024 ) {
+				$ret = $bytes / 1024 / 1024;
+				$suffix = "MB";
+			} elseif ( $bytes >= 1024 ) {
+				$ret = $bytes / 1024;
+				$suffix = "KB";
+			} else {
+				$ret = $bytes;
+				$suffix = "B";
+			}
+		}
+	}
+
+	return array( $ret, $suffix );
+}
+
+function prepare_serverinfo_responses( &$responses, &$message, &$config ) {
+	foreach (array_keys($responses) as $key) {
+		$oldkey = str_replace(".", "_", $key);
+		$oldkey = str_replace("=", "", $oldkey);
+		$responses[$oldkey] = $responses[$key];
+	}
+
+	$responses["dht_statistics"] = $responses["dht.statistics"];
+	$responses["dht_statistics_active"] = $responses["dht.statistics"]["active"];
+	$responses["dht_statistics_buckets"] = $responses["dht.statistics"]["buckets"];
+	$responses["dht_statistics_bytes_read"] = $responses["dht.statistics"]["bytes_read"];
+	$responses["dht_statistics_bytes_written"] = $responses["dht.statistics"]["bytes_written"];
+	$responses["dht_statistics_cycle"] = $responses["dht.statistics"]["cycle"];
+	$responses["dht_statistics_dht"] = $responses["dht.statistics"]["dht"];
+	$responses["dht_statistics_errors_caught"] = $responses["dht.statistics"]["errors_caught"];
+	$responses["dht_statistics_errors_received"] = $responses["dht.statistics"]["errors_received"];
+	$responses["dht_statistics_nodes"] = $responses["dht.statistics"]["nodes"];
+	$responses["dht_statistics_peers"] = $responses["dht.statistics"]["peers"];
+	$responses["dht_statistics_peers_max"] = $responses["dht.statistics"]["peers_max"];
+	$responses["dht_statistics_queries_received"] = $responses["dht.statistics"]["queries_received"];
+	$responses["dht_statistics_queries_sent"] = $responses["dht.statistics"]["queries_sent"];
+	$responses["dht_statistics_replies_received"] = $responses["dht.statistics"]["replies_received"];
+	$responses["dht_statistics_throttle"] = $responses["dht.statistics"]["throttle"];
+	$responses["dht_statistics_torrents"] = $responses["dht.statistics"]["torrents"];
+
+	$responses["bind"] = $responses["network.bind_address"];
+	$responses["check_hash"] = $responses["pieces.hash.on_completion"];
+	$responses["connection_leech"] = $responses["protocol.connection.leech"];
+	$responses["connection_seed"] = $responses["protocol.connection.seed"];
+	$responses["dht_port"] = $responses["dht.port"];
+	$responses["directory"] = $responses["directory.default"];
+	$responses["download_rate"] = $responses["throttle.global_down.max_rate"];
+	$responses["http_cacert"] = $responses["network.http.cacert"];
+	$responses["http_capath"] = $responses["network.http.capath"];
+	$responses["http_proxy"] = $responses["network.http.proxy_address"];
+	$responses["ip"] = $responses["network.local_address"];
+	$responses["max_downloads_div"] = $responses["throttle.max_downloads.div"];
+	$responses["max_downloads_global"] = $responses["throttle.max_downloads.global"];
+	$responses["max_file_size"] = $responses["system.file.max_size"];
+	$responses["max_memory_usage"] = $responses["pieces.memory.max"];
+	$responses["max_open_files"] = $responses["network.max_open_files"];
+	$responses["max_open_http"] = $responses["network.http.max_open"];
+	$responses["max_open_sockets"] = $responses["network.max_open_sockets"];
+	$responses["max_peers"] = $responses["throttle.max_peers.normal"];
+	$responses["max_peers_seed"] = $responses["throttle.max_peers.seed"];
+	$responses["max_uploads"] = $responses["throttle.max_uploads"];
+	$responses["max_uploads_div"] = $responses["throttle.max_uploads.div"];
+	$responses["max_uploads_global"] = $responses["throttle.max_uploads.global"];
+	$responses["memory_usage"] = $responses["pieces.memory.current"];
+	$responses["min_peers"] = $responses["throttle.min_peers.normal"];
+	$responses["min_peers_seed"] = $responses["throttle.min_peers.seed"];
+	$responses["name"] = $responses["session.name"];
+	$responses["peer_exchange"] = $responses["protocol.pex"];
+	$responses["port_open"] = $responses["network.port_open"];
+	$responses["port_random"] = $responses["network.port_random"];
+	$responses["port_range"] = $responses["network.port_range"];
+	$responses["preload_min_size"] = $responses["pieces.preload.min_size"];
+	$responses["preload_required_rate"] = $responses["pieces.preload.min_rate"];
+	$responses["preload_type"] = $responses["pieces.preload.type"];
+	$responses["proxy_address"] = $responses["network.proxy_address"];
+	$responses["receive_buffer_size"] = $responses["network.receive_buffer.size"];
+	$responses["safe_sync"] = $responses["pieces.sync.always_safe"];
+	$responses["scgi_dont_route"] = $responses["network.scgi.dont_route"];
+	$responses["send_buffer_size"] = $responses["network.send_buffer.size"];
+	$responses["session"] = $responses["session.path"];
+	$responses["session_lock"] = $responses["session.use_lock"];
+	$responses["session_on_completion"] = $responses["session.on_completion"];
+	$responses["split_file_size"] = $responses["system.file.split_size"];
+	$responses["split_suffix"] = $responses["system.file.split_suffix"];
+	$responses["stats_not_preloaded"] = $responses["pieces.stats_not_preloaded"];
+	$responses["stats_preloaded"] = $responses["pieces.stats_preloaded"];
+	$responses["timeout_safe_sync"] = $responses["pieces.sync.timeout_safe"];
+	$responses["timeout_sync"] = $responses["pieces.sync.timeout"];
+	$responses["tracker_numwant"] = $responses["trackers.numwant"];
+	$responses["upload_rate"] = $responses["throttle.global_up.max_rate"];
+	$responses["use_udp_trackers"] = $responses["trackers.use_udp"];
+	$responses["client_version"] = $responses["system.client_version"];
+	$responses["cwd"] = $responses["system.cwd"];
+	$responses["get_cwd"] = $responses["system.cwd"];
+	$responses["hostname"] = $responses["system.hostname"];
+	$responses["library_version"] = $responses["system.library_version"];
+	$responses["pid"] = $responses["system.pid"];
+	$responses["view_list"] = $responses["view.list"];
+
+	$bytes_down_arr = switch_bytes( $responses["bytes_down"] );
+	$bytes_up_arr = switch_bytes( $responses["bytes_up"] );
+	$download_rate_arr = switch_bytes( $responses["download_rate"], "KB" );
+	$max_memory_usage_arr = switch_bytes( $responses["max_memory_usage"] );
+	$memory_usage_arr = switch_bytes( $responses["memory_usage"] );
+	$preload_min_size_arr = switch_bytes( $responses["preload_min_size"] );
+	$preload_required_rate_arr = switch_bytes( $responses["preload_required_rate"] );
+	$receive_buffer_size_arr = switch_bytes( $responses["receive_buffer_size"] );
+	$send_buffer_size_arr = switch_bytes( $responses["send_buffer_size"] );
+	$upload_rate_arr = switch_bytes( $responses["upload_rate"], "KB" );
+
+	$responses["bytes_down_value"] = sprintf( "%.1f", $bytes_down_arr[0] );
+	$responses["bytes_down_suffix"] = $bytes_down_arr[1];
+	$responses["bytes_up_value"] = sprintf( "%.1f", $bytes_up_arr[0] );
+	$responses["bytes_up_suffix"] = $bytes_up_arr[1];
+	$responses["download_rate_value"] = sprintf( "%.0f", $download_rate_arr[0] );
+	$responses["download_rate_suffix"] = $download_rate_arr[1];
+	$responses["max_memory_usage_value"] = sprintf( "%.1f", $max_memory_usage_arr[0] );
+	$responses["max_memory_usage_suffix"] = $max_memory_usage_arr[1];
+	$responses["memory_usage_value"] = sprintf( "%.1f", $memory_usage_arr[0] );
+	$responses["memory_usage_suffix"] = $memory_usage_arr[1];
+	$responses["preload_min_size_value"] = sprintf( "%.1f", $preload_min_size_arr[0] );
+	$responses["preload_min_size_suffix"] = $preload_min_size_arr[1];
+	$responses["preload_required_rate_value"] = sprintf( "%.1f", $preload_required_rate_arr[0] );
+	$responses["preload_required_rate_suffix"] = $preload_required_rate_arr[1];
+	$responses["receive_buffer_size_value"] = sprintf( "%.1f", $receive_buffer_size_arr[0] );
+	$responses["receive_buffer_size_suffix"] = $receive_buffer_size_arr[1];
+	$responses["send_buffer_size_value"] = sprintf( "%.1f", $send_buffer_size_arr[0] );
+	$responses["send_buffer_size_suffix"] = $send_buffer_size_arr[1];
+	$responses["upload_rate_value"] = sprintf( "%.0f", $upload_rate_arr[0] );
+	$responses["upload_rate_suffix"] = $upload_rate_arr[1];
+
+	$responses["check_hash_value"] = $responses["check_hash"] == 0 ? $message["no"] : $message["yes"];
+	$responses["safe_sync_value"] = $responses["safe_sync"] == 0 ? $message["no"] : $message["yes"];
+	$responses["use_udp_trackers_value"] = $responses["use_udp_trackers"] == 0 ? $message["no"] : $message["yes"];
+
+	$responses["bind_value"] = $responses["bind"] == "0.0.0.0" ? $message["bind_0000"] : $responses["bind"];
+	$responses["ip_value"] = $responses["ip"] == "0.0.0.0" ? $message["ip_0000"] : $responses["ip"];
+	$responses["max_peers_value"] = $responses["max_peers"] == -1 ? $message["disabled"] : $responses["max_peers"];
+	$responses["max_peers_seed_value"] = $responses["max_peers_seed"] == -1 ? $message["disabled"] : $responses["max_peers_seed"];
+	$responses["max_uploads_value"] = $responses["max_uploads"] == -1 ? $message["disabled"] : $responses["max_uploads"];
+	$responses["min_peers_value"] = $responses["min_peers"] == -1 ? $message["disabled"] : $responses["min_peers"];
+	$responses["min_peers_seed_value"] = $responses["min_peers_seed"] == -1 ? $message["disabled"] : $responses["min_peers_seed"];
+	$responses["port_open_value"] = $responses["port_open"] == -1 ? $message["no"] : $message["yes"];
+	$responses["port_random_value"] = $responses["port_random"] == -1 ? $message["no"] : $message["yes"];
+	$responses["port_range_value"] = $responses["port_range"] == -1 ? $message["disabled"] : $responses["port_range"];
+	$responses["proxy_address_value"] = $responses["proxy_address"] == "0.0.0.0" ? $message["proxy_address_0000"] : $responses["proxy_address"];
+	$responses["tracker_numwant_value"] = $responses["tracker_numwant"] == -1 ? $message["disabled"] : $responses["tracker_numwant"];
+
+	$responses["directory_value"] = myrealpath( $responses["directory"], $config["home_path"], $responses["system.cwd"] );
+	$responses["session_value"] = myrealpath( $responses["session"], $config["home_path"], $responses["system.cwd"] );
+
+	if ( $responses["max_file_size"] == -1 ) {
+		$responses["max_file_size_value"] = $message["disabled"];
+	} else {
+		$max_file_size_arr = switch_bytes( $responses["max_file_size"] );
+		$responses["max_file_size_value"] = sprintf( "%.1f", $max_file_size_arr[0] );
+		$responses["max_file_size_suffix"] = $max_file_size_arr[1];
+	}
+
+	if ( $responses["split_file_size"] == -1 ) {
+		$responses["split_file_size_value"] = $message["disabled"];
+	} else {
+		$split_file_size_arr = switch_bytes( $responses["split_file_size"] );
+		$responses["split_file_size_value"] = sprintf( "%.1f", $split_file_size_arr[0] );
+		$responses["split_file_size_suffix"] = $split_file_size_arr[1];
+	}
+
+	if ( $config["dht"] === "1" ) {
+		if ( $responses["dht_statistics_active"] != 0 ) {
+			$dht_statistics_bytes_read_arr = switch_bytes( $responses["dht_statistics_bytes_read"] );
+			$dht_statistics_bytes_written_arr = switch_bytes( $responses["dht_statistics_bytes_written"] );
+
+			$responses["dht_statistics_bytes_read_value"] = sprintf( "%.1f", $dht_statistics_bytes_read_arr[0] );
+			$responses["dht_statistics_bytes_read_suffix"] = $dht_statistics_bytes_read_arr[1];
+			$responses["dht_statistics_bytes_written_value"] = sprintf( "%.1f", $dht_statistics_bytes_written_arr[0] );
+			$responses["dht_statistics_bytes_written_suffix"] = $dht_statistics_bytes_written_arr[1];
+		}
+
+		$responses["dht_statistics_active_value"] = $responses["dht_statistics_active"] == 0 ? $message["dht_0"] : $message["dht_1"];
+	}
+
+	ksort( $responses );
+
+	return true;
+}
+
+function prepare_downloadlist_responses( &$responses, &$message, &$home_path, &$cwd ) {
+	foreach (array_keys($responses) as $key) {
+		$oldkey = str_replace(".", "_", $key);
+		$oldkey = str_replace("=", "", $oldkey);
+		$responses[$oldkey] = $responses[$key];
+	}
+	$responses["d_active"] = $responses["d.state="];
+	$responses["d_down_rate"] = $responses["d.down.rate="];
+	$responses["d_down_total"] = $responses["d.down.total="];
+	$responses["d_skip_rate"] = $responses["d.skip.rate="];
+	$responses["d_skip_total"] = $responses["d.skip.total="];
+	$responses["d_up_rate"] = $responses["d.up.rate="];
+	$responses["d_up_total"] = $responses["d.up.total="];
+
+	$d_bytes_done_arr = switch_bytes( $responses["d_bytes_done"] );
+	$d_chunk_size_arr = switch_bytes( $responses["d_chunk_size"] );
+	$d_completed_bytes_arr = switch_bytes( $responses["d_completed_bytes"] );
+	$d_down_rate_arr = switch_bytes( $responses["d_down_rate"] );
+	$d_down_total_arr = switch_bytes( $responses["d_down_total"] );
+	$d_free_diskspace_arr = switch_bytes( $responses["d_free_diskspace"] );
+	$d_left_bytes_arr = switch_bytes( $responses["d_left_bytes"] );
+	$d_max_file_size_arr = switch_bytes( $responses["d_max_file_size"] );
+	$d_size_bytes_arr = switch_bytes( $responses["d_size_bytes"] );
+	$d_skip_rate_arr = switch_bytes( $responses["d_skip_rate"] );
+	$d_skip_total_arr = switch_bytes( $responses["d_skip_total"] );
+	$d_up_rate_arr = switch_bytes( $responses["d_up_rate"] );
+	$d_up_total_arr = switch_bytes( $responses["d_up_total"] );
+
+	$responses["d_bytes_done_value"] = sprintf( "%.1f", $d_bytes_done_arr[0] );
+	$responses["d_bytes_done_suffix"] = $d_bytes_done_arr[1];
+	$responses["d_chunk_size_value"] = sprintf( "%.1f", $d_chunk_size_arr[0] );
+	$responses["d_chunk_size_suffix"] = $d_chunk_size_arr[1];
+	$responses["d_completed_bytes_value"] = sprintf( "%.1f", $d_completed_bytes_arr[0] );
+	$responses["d_completed_bytes_suffix"] = $d_completed_bytes_arr[1];
+	$responses["d_down_rate_value"] = sprintf( "%.1f", $d_down_rate_arr[0] );
+	$responses["d_down_rate_suffix"] = $d_down_rate_arr[1];
+	$responses["d_down_total_value"] = sprintf( "%.1f", $d_down_total_arr[0] );
+	$responses["d_down_total_suffix"] = $d_down_total_arr[1];
+	$responses["d_free_diskspace_value"] = sprintf( "%.1f", $d_free_diskspace_arr[0] );
+	$responses["d_free_diskspace_suffix"] = $d_free_diskspace_arr[1];
+	$responses["d_left_bytes_value"] = sprintf( "%.1f", $d_left_bytes_arr[0] );
+	$responses["d_left_bytes_suffix"] = $d_left_bytes_arr[1];
+	$responses["d_max_file_size_value"] = sprintf( "%.1f", $d_max_file_size_arr[0] );
+	$responses["d_max_file_size_suffix"] = $d_max_file_size_arr[1];
+	$responses["d_size_bytes_value"] = sprintf( "%.1f", $d_size_bytes_arr[0] );
+	$responses["d_size_bytes_suffix"] = $d_size_bytes_arr[1];
+	$responses["d_skip_rate_value"] = sprintf( "%.1f", $d_skip_rate_arr[0] );
+	$responses["d_skip_rate_suffix"] = $d_skip_rate_arr[1];
+	$responses["d_skip_total_value"] = sprintf( "%.1f", $d_skip_total_arr[0] );
+	$responses["d_skip_total_suffix"] = $d_skip_total_arr[1];
+	$responses["d_up_rate_value"] = sprintf( "%.1f", $d_up_rate_arr[0] );
+	$responses["d_up_rate_suffix"] = $d_up_rate_arr[1];
+	$responses["d_up_total_value"] = sprintf( "%.1f", $d_up_total_arr[0] );
+	$responses["d_up_total_suffix"] = $d_up_total_arr[1];
+
+	$responses["d_active_value"] = $responses["d_active"] == 1 ? $message["d_active_1"] : $message["d_active_0"];
+	$responses["d_complete_value"] = $responses["d_complete"] == 1 ? $message["d_complete_1"] : $message["d_complete_0"];
+	$responses["d_creation_date_value"] = date( "Y-m-d H:i:s", $responses["d_creation_date"] );
+	$responses["d_ignore_commands_value"] = $responses["d_ignore_commands"] == 1 ? $message["d_ignore_commands_1"] : $message["d_ignore_commands_0"];
+	$responses["d_hash_checked_value"] = $responses["d_hash_checked"] == 1 ? $message["d_hash_checked_1"] : $message["d_hash_checked_0"];
+	$responses["d_hash_checking_value"] = $responses["d_hash_checking"] == 1 ? $message["d_hash_checking_1"] : $message["d_hash_checking_0"];
+	$responses["d_multi_file_value"] = $responses["d_multi_file"] == 1 ? $message["d_multi_file_multi"] : $message["d_multi_file_single"];
+	$responses["d_open_value"] = $responses["d_open"] == 1 ? $message["d_open_1"] : $message["d_open_0"];
+	$responses["d_peer_exchange_value"] = $responses["d_peer_exchange"] == 0 ? $message["disabled"] : $message["enabled"];
+	$responses["d_peers_max_value"] = $responses["d_peers_max"] == -1 ? $message["disabled"] : $responses["d_peers_max"];
+	$responses["d_peers_min_value"] = $responses["d_peers_min"] == -1 ? $message["disabled"] : $responses["d_peers_min"];
+	$responses["d_pex_active_value"] = $responses["d_pex_active"] == 1 ? $message["yes"] : $message["no"];
+	$responses["d_private_value"] = $responses["d_private"] == 1 ? $message["yes"] : $message["no"];
+	$responses["d_state_value"] = $responses["d_state"] == 1 ? $message["d_state_1"] : $message["d_state_0"];
+	$responses["d_state_changed_value"] = date( "Y-m-d H:i:s", $responses["d_state_changed"] );
+	$responses["d_tracker_numwant_value"] = $responses["d_tracker_numwant"] == -1 ? $message["disabled"] : $responses["d_tracker_numwant"];
+	$responses["d_uploads_max_value"] = $responses["d_uploads_max"] == -1 ? $message["disabled"] : $responses["d_uploads_max"];
+
+	$responses["d_base_path_value"] = myrealpath( $responses["d_base_path"], $home_path, $cwd );
+	$responses["d_directory_value"] = myrealpath( $responses["d_directory"], $home_path, $cwd );
+	$responses["d_tied_to_file_value"] = myrealpath( $responses["d_tied_to_file"], $home_path, $cwd );
+
+	if ( $responses["d_down_rate"] > 0 ) {
+		$responses["d_estimated_time"] = $responses["d_left_bytes"] / $responses["d_down_rate"];
+		$responses["d_estimated_time_value"] = sprintf( "%dd %02d:%02d", floor( $responses["d_estimated_time"] / 86400 ), floor( $responses["d_estimated_time"] / 3600 ) % 24, floor( $responses["d_estimated_time"] / 60 ) % 60 );
+		$responses["d_percentage"] = $responses["d_completed_bytes"] / $responses["d_size_bytes"];
+		$responses["d_percentage_value"] = floor( $responses["d_completed_bytes"] / $responses["d_size_bytes"] * 100 );
+	} elseif ( $responses["d_hashing"] != 0 ) {
+		$responses["d_estimated_time"] = "";
+		$responses["d_estimated_time_value"] = "";
+		$responses["d_percentage"] = $responses["d_completed_bytes"] / $responses["d_size_bytes"];
+		$responses["d_percentage_value"] = floor( $responses["d_completed_bytes"] / $responses["d_size_bytes"] * 100 );
+		$responses["d_hpercentage"] = $responses["d_chunks_hashed"] / $responses["d_size_chunks"];
+		$responses["d_hpercentage_value"] = floor( $responses["d_chunks_hashed"] / $responses["d_size_chunks"] * 100 );
+	} elseif ( $responses["d_complete"] != 1 ) {
+		$responses["d_estimated_time"] = "";
+		$responses["d_estimated_time_value"] = "";
+		$responses["d_percentage"] = $responses["d.completed_bytes="] / $responses["d.size_bytes="];
+		$responses["d_percentage_value"] = floor( $responses["d.completed_bytes="] / $responses["d.size_bytes="] * 100 );
+	} else {
+		$responses["d_estimated_time"] = "";
+		$responses["d_estimated_time_value"] = "";
+		$responses["d_percentage"] = 1;
+		$responses["d_percentage_value"] = 100;
+	}
+
+	switch ( $responses["d_connection_current"] ) {
+		case "seed" : $responses["d_connection_current_value"] = $message["d_connection_current_seed"]; break;
+		case "initial_seed" : $responses["d_connection_current_value"] = $message["d_connection_current_initial_seed"]; break;
+		default : $responses["d_connection_current_value"] = $message["d_connection_current_leech"]; break;
+	}
+	switch ( $responses["d_hashing"] ) {
+		case 1 : $responses["d_hashing_value"] = $message["d_hashing_1"]; break;
+		case 2 : $responses["d_hashing_value"] = $message["d_hashing_2"]; break;
+		case 3 : $responses["d_hashing_value"] = $message["d_hashing_3"]; break;
+		default : $responses["d_hashing_value"] = $message["d_hashing_0"]; break;
+	}
+	switch ( $responses["d_priority"] ) {
+		case 1 : $responses["d_priority_value"] = $message["d_priority_1"]; break;
+		case 2 : $responses["d_priority_value"] = $message["d_priority_2"]; break;
+		case 3 : $responses["d_priority_value"] = $message["d_priority_3"]; break;
+		default : $responses["d_priority_value"] = $message["d_priority_0"]; break;
+	}
+
+	$responses["d_ratio_value"] = sprintf( "%.3f", $responses["d_ratio"] / 1000 );
+
+	ksort( $responses );
+
+	return true;
+}
+
+function prepare_filelist_responses( &$responses, &$message, &$home_path, &$cwd ) {
+	foreach (array_keys($responses) as $key) {
+		$oldkey = str_replace(".", "_", $key);
+		$oldkey = str_replace("=", "", $oldkey);
+		$responses[$oldkey] = $responses[$key];
+	}
+
+	$responses["f_last_touched"] = sprintf( "%.0f", $responses["f_last_touched"] );
+	$responses["f_range_first"] += 1;
+
+	$f_size_bytes_arr = switch_bytes( $responses["f_size_bytes"] );
+
+	$responses["f_size_bytes_value"] = sprintf( "%.1f", $f_size_bytes_arr[0] );
+	$responses["f_size_bytes_suffix"] = $f_size_bytes_arr[1];
+
+	$responses["f_open_value"] = $responses["f_open"] == 1 ? $message["f_open_1"] : $message["f_open_0"];
+	$responses["f_last_touched_value"] = date( "Y-m-d H:i:s", substr( $responses["f_last_touched"], 0, -6 ) );
+
+	$responses["f_frozen_path_value"] = myrealpath( $responses["f_frozen_path"], $home_path, $cwd );
+
+	if ( $responses["f_size_chunks"] == 0 ) {
+		$responses["f_percentage"] = 1;
+		$responses["f_percentage_value"] = 100;
+	} else {
+		$responses["f_percentage"] = $responses["f_completed_chunks"] / $responses["f_size_chunks"];
+		$responses["f_percentage_value"] = floor( $responses["f_completed_chunks"] / $responses["f_size_chunks"] * 100 );
+	}
+
+	switch ( $responses["f_priority"] ) {
+		case 1 : $responses["f_priority_value"] = $message["f_priority_1"]; break;
+		case 2 : $responses["f_priority_value"] = $message["f_priority_2"]; break;
+		default : $responses["f_priority_value"] = $message["f_priority_0"]; break;
+	}
+
+	ksort( $responses );
+
+	return true;
+}
+
+function prepare_peerlist_responses( &$responses, &$message, &$config = array() ) {
+	foreach (array_keys($responses) as $key) {
+		$oldkey = str_replace(".", "_", $key);
+		$oldkey = str_replace("=", "", $oldkey);
+		$responses[$oldkey] = $responses[$key];
+	}
+
+	if ( $config["flags"] === "1" ) {
+		$responses["p_country"] = strtolower( geoip_country_code_by_name( $responses["p_address"] ) );
+		if ( $responses["p_country"] == "" ) {
+			$responses["p_country"] = "unknown";
+			$responses["p_country_value"] = $message["unknown"];
+		} else {
+			$responses["p_country_value"] = @geoip_country_name_by_name( $responses["p_address"] );
+		}
+	}
+	
+	$p_down_rate_arr = switch_bytes( $responses["p_down_rate"] );
+	$p_down_total_arr = switch_bytes( $responses["p_down_total"] );
+	$p_peer_rate_arr = switch_bytes( $responses["p_peer_rate"] );
+	$p_peer_total_arr = switch_bytes( $responses["p_peer_total"] );
+	$p_up_rate_arr = switch_bytes( $responses["p_up_rate"] );
+	$p_up_total_arr = switch_bytes( $responses["p_up_total"] );
+
+	$responses["p_down_rate_value"] = sprintf( "%.1f", $p_down_rate_arr[0] );
+	$responses["p_down_rate_suffix"] = $p_down_rate_arr[1];
+	$responses["p_down_total_value"] = sprintf( "%.1f", $p_down_total_arr[0] );
+	$responses["p_down_total_suffix"] = $p_down_total_arr[1];
+	$responses["p_peer_rate_value"] = sprintf( "%.1f", $p_peer_rate_arr[0] );
+	$responses["p_peer_rate_suffix"] = $p_peer_rate_arr[1];
+	$responses["p_peer_total_value"] = sprintf( "%.1f", $p_peer_total_arr[0] );
+	$responses["p_peer_total_suffix"] = $p_peer_total_arr[1];
+	$responses["p_up_rate_value"] = sprintf( "%.1f", $p_up_rate_arr[0] );
+	$responses["p_up_rate_suffix"] = $p_up_rate_arr[1];
+	$responses["p_up_total_value"] = sprintf( "%.1f", $p_up_total_arr[0] );
+	$responses["p_up_total_suffix"] = $p_up_total_arr[1];
+
+	$responses["p_encrypted_value"] = $responses["p_encrypted"] == 1 ? $message["p_encrypted_1"] : $message["p_encrypted_0"];
+	$responses["p_incoming_value"] = $responses["p_incoming"] == 1 ? $message["p_incoming_1"] : $message["p_incoming_0"];
+
+	ksort( $responses );
+
+	return true;
+}
+
+function prepare_trackerlist_responses( &$responses, &$message ) {
+	foreach (array_keys($responses) as $key) {
+		$oldkey = str_replace(".", "_", $key);
+		$oldkey = str_replace("=", "", $oldkey);
+		$responses[$oldkey] = $responses[$key];
+	}
+
+	$t_scrape_downloaded_arr = switch_bytes( $responses["t_scrape_downloaded"] );
+
+	$responses["t_scrape_time_last"] = sprintf( "%.0f", $responses["t_scrape_time_last"] );
+
+	$responses["t_enabled_value"] = $responses["t_enabled"] == 1 ? $message["t_enabled_1"] : $message["t_enabled_0"];
+	$responses["t_open_value"] = $responses["t_open"] == 1 ? $message["t_open_1"] : $message["t_open_0"];
+	$responses["t_min_interval_value"] = sprintf( "%02d:%02d:%02d", floor( $responses["t_min_interval"] / 3600 ), $responses["t_min_interval"] / 60 % 60, $responses["t_min_interval"] % 60 );
+	$responses["t_normal_interval_value"] = sprintf( "%02d:%02d:%02d", floor( $responses["t_normal_interval"] / 3600 ), $responses["t_normal_interval"] / 60 % 60, $responses["t_normal_interval"] % 60 );
+
+	if ( $responses["t_scrape_time_last"] == 0 ) {
+		$responses["t_scrape_time_last_value"] = date( "Y-m-d H:i:s", $responses["t_scrape_time_last"] );
+	} else {
+		$responses["t_scrape_time_last_value"] = date( "Y-m-d H:i:s", substr( $responses["t_scrape_time_last"], 0, -6 ) );
+	}
+	$responses["t_type_value"] = $responses["t_type"] == 1 ? $message["t_type_1"] : $message["t_type_2"];
+
+	ksort( $responses );
+
+	return true;
+}
+
+function addlanguages( &$xml, &$root, &$node, &$languages ) {
+	$root->setAttribute( "language", $_SESSION["rtwi_language"] );
+
+	// adding languages
+	$rrrnode = $node->appendChild( $xml->createElement( "languages" ) );
+	$rrrnode->setAttribute( "value", $_SESSION["rtwi_language"] );
+	foreach ( $languages as $key => $val ) {
+		$rrnode = $rrrnode->appendChild( $xml->createElement( "language" ) );
+		$rrnode->setAttribute( "value", $key );
+		$rrnode->setAttribute( "title", $val );
+	}
+}
+
+function addrefreshrates( &$xml, &$root, &$node, &$refreshrates ) {
+	$root->setAttribute( "refreshrate", $_SESSION["rtwi_refresh"] );
+
+	// adding refresh rates
+	$rrrnode = $node->appendChild( $xml->createElement( "refreshrates" ) );
+	$rrrnode->setAttribute( "value", $_SESSION["rtwi_refresh"] );
+	foreach ( $refreshrates as $key => $val ) {
+		$rrnode = $rrrnode->appendChild( $xml->createElement( "refreshrate" ) );
+		$rrnode->setAttribute( "value", substr( $key, 12 ) );
+		$rrnode->setAttribute( "title", $val );
+	}
+}
+
+function addviewtypes( &$xml, &$root, &$node, &$view_list, &$viewtypes ) {
+	$root->setAttribute( "viewtype", $_SESSION["rtwi_view"] );
+
+	// adding viewtypes
+	$vcrnode = $node->appendChild( $xml->createElement( "viewtypes" ) );
+	$vcrnode->setAttribute( "value", $_SESSION["rtwi_view"] );
+	foreach ( $view_list as $key => $val ) {
+		$vcnode = $vcrnode->appendChild( $xml->createElement( "viewtype" ) );
+		$vcnode->setAttribute( "value", $val );
+		$vcnode->setAttribute( "title", isset( $viewtypes["viewtype_{$val}"] ) ? $viewtypes["viewtype_{$val}"] : $val );
+	}
+}
+
+function build_xmltree( &$dstruct, &$tree, &$xml, $fullpath, $responses ) {
+	foreach ( $dstruct as $key => $val ) {
+		if ( is_array( $val ) ) {
+			$subtree = $tree->appendChild( $xml->createElement( "directory" ) );
+			$subtree->setAttribute( "id", sha1( mt_rand() ) );
+			$subtree->setAttribute( "dirname", $key );
+			$subtree->setAttribute( "dirpath", urlencode( "{$fullpath}/{$key}" ) );
+			$ret = build_xmltree( $val, $subtree, $xml, "{$fullpath}/{$key}", $responses );
+		} else {
+			$ret = $tree->appendChild( $xml->createElement( "file" ) );
+			$ret->setAttribute( "id", $key );
+			$ret->setAttribute( "filename", $val );
+			xmlrpc_multiappend( $xml, $ret, $responses[$key] );
+		}
+	}
+
+	return $ret;
+}
+
+function xmlrpc_multiappend( &$xml, &$dnode, &$responses ) {
+	$keys = array_keys( $responses );
+	reset( $responses );
+	while ( list( $rkey, $rval ) = @each( $responses ) ) {
+		$rkey = str_replace( "=", "", $rkey);
+		$rval = str_replace( "&", "&amp;", $rval );
+		if ( array_key_exists( "{$rkey}_suffix", $responses ) ) {
+			$node = $dnode->appendChild( $xml->createElement( $rkey, $rval ) );
+			$node->setAttribute( "suffix", $responses["{$rkey}_suffix"] );
+			$node->setAttribute( "value", $responses["{$rkey}_value"] );
+			unset( $responses["{$rkey}_suffix"] );
+			unset( $responses["{$rkey}_value"] );
+		} elseif ( array_key_exists( "{$rkey}_value", $responses ) ) {
+			$node = $dnode->appendChild( $xml->createElement( $rkey, $rval ) );
+			$node->setAttribute( "value", $responses["{$rkey}_value"] );
+			unset( $responses["{$rkey}_value"] );
+		} elseif ( is_array( $rval ) ) {
+		} else {
+			$node = $dnode->appendChild( $xml->createElement( $rkey, $rval ) );
+		}
+	}
+
+	return true;
+}
+
+error_reporting( E_ALL );
+error_reporting( E_ALL ^ E_NOTICE );
+
+set_time_limit( 10 );
+
+// setting default
+session_start();
+
+// reading config files
+$config = parse_ini_file( "includes/rtwi.conf", true );
+$users = parse_ini_file( $config["user_conf"], true );
+
+// set language from cookie if exists
+if ( !isset( $_SESSION["rtwi_language"] ) ) {
+	$_SESSION["rtwi_language"] = isset( $_COOKIE["rtwi_language"] ) ? $_COOKIE["rtwi_language"] : $config["lang"];
+}
+
+
+// including neccessary files
+require_once( "includes/classes/xmlrpc_handler.inc.php" );
+require_once( "includes/messages.{$_SESSION["rtwi_language"]}.inc.php" );
+require_once( "includes/tools/functions.time.inc.php" );
+
+$callnum = 0;
+$calltime = 0;
+$multicallnum = 0;
+
+// initializing xmlrpc methods
+$xmlrpc_methods = array(
+	"si"	=> $config["dht"] === "1" ? 
+			array( "dht.statistics", "network.bind_address", "pieces.hash.on_completion", "protocol.connection.leech", "protocol.connection.seed", "dht.port", "directory.default", "throttle.global_down.max_rate", "network.http.cacert", "network.http.capath", "network.http.proxy_address", "network.local_address", "throttle.max_downloads.div", "throttle.max_downloads.global", "system.file.max_size", "pieces.memory.max", "network.max_open_files", "network.http.max_open", "network.max_open_sockets", "throttle.max_peers.normal", "throttle.max_peers.seed", "throttle.max_uploads", "throttle.max_uploads.div", "throttle.max_uploads.global", "pieces.memory.current", "throttle.min_peers.normal", "throttle.min_peers.seed", "session.name", "protocol.pex", "network.port_open", "network.port_random", "network.port_range", "pieces.preload.min_size", "pieces.preload.min_rate", "pieces.preload.type", "network.proxy_address", "network.receive_buffer.size", "pieces.sync.always_safe", "network.scgi.dont_route", "network.send_buffer.size", "session.path", "session.use_lock", "session.on_completion", "system.file.split_size", "system.file.split_suffix", "pieces.stats_not_preloaded", "pieces.stats_preloaded", "pieces.sync.timeout_safe", "pieces.sync.timeout", "trackers.numwant", "throttle.global_up.max_rate", "trackers.use_udp", "system.client_version", "system.cwd", "system.hostname", "system.library_version", "system.pid", "view.list" ) :
+			array( "network.bind_address", "pieces.hash.on_completion", "protocol.connection.leech", "protocol.connection.seed", "directory.default", "throttle.global_down.max_rate", "network.http.cacert", "network.http.capath", "network.http.proxy_address", "network.local_address", "throttle.max_downloads.div", "throttle.max_downloads.global", "system.file.max_size", "pieces.memory.max", "network.max_open_files", "network.http.max_open", "network.max_open_sockets", "throttle.max_peers.normal", "throttle.max_peers.seed", "throttle.max_uploads", "throttle.max_uploads.div", "throttle.max_uploads.global", "pieces.memory.current", "throttle.min_peers.normal", "throttle.min_peers.seed", "session.name", "protocol.pex", "network.port_open", "network.port_random", "network.port_range", "pieces.preload.min_size", "pieces.preload.min_rate", "pieces.preload.type", "network.proxy_address", "network.receive_buffer.size", "pieces.sync.always_safe", "network.scgi.dont_route", "network.send_buffer.size", "session.path", "session.use_lock", "session.on_completion", "system.file.split_size", "system.file.split_suffix", "pieces.stats_not_preloaded", "pieces.stats_preloaded", "pieces.sync.timeout_safe", "pieces.sync.timeout", "trackers.numwant", "throttle.global_up.max_rate", "trackers.use_udp", "system.client_version", "system.cwd", "system.hostname", "system.library_version", "system.pid", "view.list" ),
+	"d"	=> array( "d.base_filename=", "d.base_path=", "d.bytes_done=", "d.chunk_size=", "d.chunks_hashed=", "d.complete=", "d.completed_bytes=", "d.completed_chunks=", "d.connection_current=", "d.connection_leech=", "d.connection_seed=", "d.creation_date=", "d.custom1=", "d.custom2=", "d.custom3=", "d.custom4=", "d.custom5=", "d.directory=", "d.down.rate=", "d.down.total=", "d.free_diskspace=", "d.hash=", "d.hashing=", "d.ignore_commands=", "d.left_bytes=", "d.local_id=", "d.local_id_html=", "d.max_file_size=", "d.max_size_pex=", "d.message=", "d.name=", "d.peer_exchange=", "d.peers_accounted=", "d.peers_complete=", "d.peers_connected=", "d.peers_max=", "d.peers_min=", "d.peers_not_connected=", "d.priority=", "d.priority_str=", "d.ratio=", "d.size_bytes=", "d.size_chunks=", "d.size_files=", "d.size_pex=", "d.skip.rate=", "d.skip.total=", "d.state=", "d.state_changed=", "d.tied_to_file=", "d.tracker_focus=", "d.tracker_numwant=", "d.tracker_size=", "d.up.rate=", "d.up.total=", "d.uploads_max=", "d.is_active=", "d.is_hash_checked=", "d.is_hash_checking=", "d.is_multi_file=", "d.is_open=", "d.is_pex_active=", "d.is_private=" ),
+	"f"	=> array( "f.completed_chunks=", "f.frozen_path=", "f.is_created=", "f.is_open=", "f.last_touched=", "f.match_depth_next=", "f.match_depth_prev=", "f.offset=", "f.path=", "f.path_components=", "f.path_depth=", "f.priority=", "f.range_first=", "f.range_second=", "f.size_bytes=", "f.size_chunks=" ),
+	"p"	=> array( "p.address=", "p.client_version=", "p.completed_percent=", "p.down_rate=", "p.down_total=", "p.id=", "p.id_html=", "p.options_str=", "p.peer_rate=", "p.peer_total=", "p.port=", "p.up_rate=", "p.up_total=", "p.is_encrypted=", "p.is_incoming=", "p.is_obfuscated=", "p.is_snubbed=" ),
+	"t"	=> array( "t.group=", "t.id=", "t.min_interval=", "t.normal_interval=", "t.scrape_complete=", "t.scrape_downloaded=", "t.scrape_incomplete=", "t.scrape_time_last=", "t.type=", "t.url=", "t.is_enabled=", "t.is_open=" ),
+	"g"	=> array( "f.path", "f.frozen_path", "f.size_bytes" ),
+);
+
+// getting request values
+if ( isset( $_REQUEST["format"] ) ) {
+	$format = $_REQUEST["format"];
+} else {
+	$format = "";
+}
+
+if ( isset( $_REQUEST["mod"] ) ) {
+	$mod = $_REQUEST["mod"];
+} else {
+	$mod = "";
+}
+
+if ( isset( $_REQUEST["hash"] ) ) {
+	$hash = $_REQUEST["hash"];
+} else {
+	$hash = "";
+}
+
+if ( isset( $_REQUEST["page"] ) ) {
+	switch ( $_REQUEST["page"] ) {
+		case "transfers" : {
+			$page = "transfers";
+			break;
+		}
+		case "chunks" : {
+			$page = "chunks";
+			break;
+		}
+		case "trackers" : {
+			$page = "trackers";
+			break;
+		}
+		case "files" : {
+			$page = "files";
+			break;
+		}
+		case "peers" : {
+			$page = "peers";
+			break;
+		}
+		default : {
+			$page = "info";
+			break;
+		}
+	}
+} else {
+	$page = "info";
+}
+
+if ( isset( $_REQUEST["id"] ) ) {
+	$id = $_REQUEST["id"];
+	settype( $id, "int" );
+} else {
+	$id = -1;
+}
+
+if ( isset( $_REQUEST["path"] ) ) {
+	$path = $_REQUEST["path"];
+} else {
+	$path = "";
+}
+
+if ( isset( $_REQUEST["ajax"] ) && $_REQUEST["ajax"] === "true" && $config["ajax"] === "1" ) {
+	$ajax = true;
+} else {
+	$ajax = false;
+}
+
+// checking if user is logged in
+if ( ( isset( $_SESSION["rtwi_auth"] ) && $_SESSION["rtwi_auth"] === 1 ) || ( isset( $_COOKIE["rtwi_auth"] ) && $_COOKIE["rtwi_auth"] == 1 && isset( $_COOKIE["rtwi_nick"] ) && array_key_exists( $_COOKIE["rtwi_nick"], $users ) && $users[$_COOKIE["rtwi_nick"]]["pass"] == $_COOKIE["rtwi_pass"] ) ) {
+	// setting values from cookie if exists
+	if ( !isset( $_SESSION["rtwi_auth"] ) || $_SESSION["rtwi_auth"] !== 1 ) {
+		$_SESSION["rtwi_auth"] = 1;
+		$_SESSION["rtwi_nick"] = $_COOKIE["rtwi_nick"];
+		$_SESSION["rtwi_cadr"] = $users[$_COOKIE["rtwi_nick"]]["address"];
+
+		// setting rtorrent's connection address
+		if ( substr( $_SESSION["rtwi_cadr"], 0, 7 ) === "unix://" ) {
+			$_SESSION["rtwi_cadr"] = myrealpath( substr( $_SESSION["rtwi_cadr"], 7 ), $config["home_path"], "{$config["home_path"]}{$_SESSION["rtwi_nick"]}" );
+			$_SESSION["rtwi_cadr"] = "unix://{$_SESSION["rtwi_cadr"]}";
+		}
+	}
+
+	// initializing rtorrent connection
+	$xmlrpc = new xmlrpc_handler( $_SESSION["rtwi_cadr"], 10 );
+
+	if ( $xmlrpc->getconntype() == "http" ) {
+		$xmlrpc->setaccount( $_SESSION["rtwi_nick"], $_SESSION["rtwi_password"] );
+	}
+
+	// setting sort view mode from cookie if exists
+	if ( !isset( $_SESSION["rtwi_view"] ) ) {
+		$_SESSION["rtwi_view"] = isset( $_COOKIE["rtwi_view"] ) ? $_COOKIE["rtwi_view"] : "default";
+	}
+	// setting auto-refresh rate from cookie if exists
+	if ( !isset( $_SESSION["rtwi_refresh"] ) ) {
+		$_SESSION["rtwi_refresh"] = isset( $_COOKIE["rtwi_refresh"] ) ? $_COOKIE["rtwi_refresh"] : 0;
+	}
+} else {
+	// show login page if not logged in
+	$mod = "login";
+}
+
+// initializing xml
+$xml = new DOMDocument( "1.0", "utf-8" );
+$xml->formatOutput = true;
+
+$root = $xml->appendChild( $xml->createElement( "root" ) );
+
+$root->appendChild( $xml->createElement( "mod", $mod ) );
+$root->appendChild( $xml->createElement( "hash", $hash ) );
+$root->appendChild( $xml->createElement( "page", $page ) );
+$root->appendChild( $xml->createElement( "id", $id ) );
+$root->appendChild( $xml->createElement( "burl", $config["base"] ) );
+$root->appendChild( $xml->createElement( "url", $config["index"] ) );
+$root->appendChild( $xml->createElement( "iurl", $config["input"] ) );
+$root->appendChild( $xml->createElement( "curl", str_replace( "&", "&amp;", $_SERVER["REQUEST_URI"] ) ) );
+$root->appendChild( $xml->createElement( "purl", isset( $_SESSION["rtwi_lastpage"] ) ? str_replace( "&", "&amp;", $_SESSION["rtwi_lastpage"] ) : "" ) );
+$root->appendChild( $xml->createElement( "datetime", date( "Y. m. d. H:i:s", time() ) ) );
+$root->appendChild( $xml->createElement( "language", $_SESSION["rtwi_language"] ) );
+
+// adding allowed settings in xml
+foreach ( $config as $key => $val ) {
+	if ( $val === "1" ) {
+		$root->appendChild( $xml->createElement( "allow_{$key}", "true" ) );
+	}
+}
+
+// adding translation to xml
+$labels = $root->appendChild( $xml->createElement( "labels" ) );
+foreach ( $label as $key => $val ) {
+	$labels->appendChild( $xml->createElement( $key, $val ) );
+}
+$labels->getElementsByTagName( "mailto" )->item( 0 )->nodeValue = str_rot13( base64_encode( str_rot13( $labels->getElementsByTagName( "mailto" )->item( 0 )->nodeValue ) ) );
+
+//print_r( $_SESSION );
+//print_r( $_REQUEST );
+
+// deciding what to do
+if ( $ajax === true ) {
+	$layout_file = "layout.ajax.index.xsl";
+} else {
+	$layout_file = "layout.main.index.xsl";
+}
+if ( ( isset( $xmlrpc ) && ( $xmlrpc->geterrorsnum() == 0 ) ) || ( $mod == "login" ) ) {
+	switch ( $mod ) {
+		case "login" : { // login
+			// adding language select
+			if ( $config["language"] ) {
+				addlanguages( $xml, $root, $root, $languages );
+			}
+
+			$layout_file = "layout.main.login.xsl";
+
+			break;
+		}
+		case "serverinfo" : { // server info
+			// creating torrents node
+			$tnode = $root->appendChild( $xml->createElement( "torrents" ) );
+			// adding auto-refresh select
+			if ( $config["refresh"] ) {
+				addrefreshrates( $xml, $root, $tnode, $refreshrates );
+			}
+			// adding language select
+			if ( $config["language"] ) {
+				addlanguages( $xml, $root, $tnode, $languages );
+			}
+
+			// retrieving server info
+			if ( !$xmlrpc->setmrequest( $xmlrpc_methods["si"] ) || !$xmlrpc->call() || !$xmlrpc->parse() ) {
+				$_SESSION["rtwi_err"] = $xmlrpc->geterrors();
+				break;
+			}
+			$si_responses = $xmlrpc->mfetch( $xmlrpc_methods["si"] );
+
+			// getting up/down rates for totals
+			$methodlist = array( "d.down.rate=", "d.up.rate=" );
+			if ( !$xmlrpc->setrequest( "d.multicall2", array_merge( array( '', $_SESSION["rtwi_view"] ), $methodlist ) ) || !$xmlrpc->call() || !$xmlrpc->parse() ) {
+				$_SESSION["rtwi_err"] = $xmlrpc->geterrors();
+				break;
+			}
+			$response = $xmlrpc->fetch();
+
+			// counting totals
+			$bytes_down = 0;
+			$bytes_up = 0;
+			for ( $i = 0; $i < count( $response ); $i++ ) {
+				for ( $r = 0; $r < count( $methodlist ); $r++ ) {
+					$methodval = preg_replace( "/(.)\.get_(.*)=/", "$1_$2", $methodlist[$r] );
+					$d_responses[$i][$methodval] = $response[$i][$r];
+				}
+				$bytes_down += $d_responses[$i]["d_down_rate"];
+				$bytes_up += $d_responses[$i]["d_up_rate"];
+			}
+
+			$si_responses["bytes_down"] = $bytes_down;
+			$si_responses["bytes_up"] = $bytes_up;
+
+			// preparing values
+			prepare_serverinfo_responses( $si_responses, $message, $config );
+
+			// addng some more values to xml (total up/down rate, limits)
+			$node = $tnode->appendChild( $xml->createElement( "bytes_down", $si_responses["bytes_down"] ) );
+			$node->setAttribute( "suffix", $si_responses["bytes_down_suffix"] );
+			$node->setAttribute( "value", $si_responses["bytes_down_value"] );
+			$node = $tnode->appendChild( $xml->createElement( "bytes_up", $si_responses["bytes_up"] ) );
+			$node->setAttribute( "suffix", $si_responses["bytes_up_suffix"] );
+			$node->setAttribute( "value", $si_responses["bytes_up_value"] );
+			$node = $tnode->appendChild( $xml->createElement( "download_rate", $si_responses["download_rate"] ) );
+			$node->setAttribute( "suffix", $si_responses["download_rate_suffix"] );
+			$node->setAttribute( "value", $si_responses["download_rate_value"] );
+			$node = $tnode->appendChild( $xml->createElement( "upload_rate", $si_responses["upload_rate"] ) );
+			$node->setAttribute( "suffix", $si_responses["upload_rate_suffix"] );
+			$node->setAttribute( "value", $si_responses["upload_rate_value"] );
+
+			// addng some more values to xml (total up/down rate, limits)
+			$inode = $tnode->appendChild( $xml->createElement( "server_info" ) );
+			xmlrpc_multiappend( $xml, $inode, $si_responses );
+
+			$layout_file = "layout.main.index.xsl";
+
+			break;
+		}
+		case "addtorrent" : { // add a new torrent
+			// getting download directory
+			if ( !$xmlrpc->setmrequest( array( "directory.default", "system.cwd" ) ) || !$xmlrpc->call() || !$xmlrpc->parse() ) {
+				$_SESSION["rtwi_err"] = $xmlrpc->geterrors();
+				break;
+			}
+			$directories = $xmlrpc->fetch();
+			$directory = $directories[0];
+			$cwd = $directories[1];
+
+			// full download directory path
+			$directory = myrealpath( $directories[0][0], $config["home_path"], $directories[1][0] );
+
+			$ppath = substr( $path, 0, strrpos( $path, "/" ) );
+			// scanning for subdirectories
+			$scan = scandir( myrealpath( "{$directory}/{$path}", $config["home_path"], $directories[1][0] ) );
+			// checking free space
+			$freespace = switch_bytes( disk_free_space( myrealpath( "{$directory}/{$ppath}", $config["home_path"], $directories[1][0] ) ) );
+
+			// adding values to xml
+			$atnode = $root->appendChild( $xml->createElement( "addtorrent" ) );
+			$atnode->setAttribute( "name", $ppath );
+			$atnode->setAttribute( "path", $path );
+			$atnode->setAttribute( "ppath", urlencode( $ppath ) );
+			$atnode->setAttribute( "freespace", disk_free_space( "{$directory}/{$ppath}" ) );
+			$atnode->setAttribute( "freespace_value", sprintf( "%.1f", $freespace[0] ) );
+			$atnode->setAttribute( "freespace_suffix", $freespace[1] );
+
+			// adding language select
+			if ( $config["language"] === "1" ) {
+				addlanguages( $xml, $root, $atnode, $languages );
+			}
+
+			// checking subdirectories for free space
+			foreach( $scan as $key => $val ) {
+				$dpath = str_replace( "//", "/", "{$path}/{$val}" );
+				$fdpath = str_replace( "//", "/", "{$directory}/{$dpath}" );
+				if ( ( is_dir( $fdpath ) || ( is_link( $fdpath ) && is_dir( readlink( $fdpath ) ) ) ) && substr( $val, 0, 1 ) != "."  ) {
+					$freespace = switch_bytes( disk_free_space( $fdpath ) );
+
+					$dnode = $atnode->appendChild( $xml->createElement( "dlpath" ) );
+					$dnode->setAttribute( "name", $val );
+					$dnode->setAttribute( "path", urlencode( $dpath ) );
+					$dnode->setAttribute( "freespace", disk_free_space( $fdpath ) );
+					$dnode->setAttribute( "freespace_value", sprintf( "%.1f", $freespace[0] ) );
+					$dnode->setAttribute( "freespace_suffix", $freespace[1] );
+				}
+			}
+
+			$layout_file = "layout.main.index.xsl";
+
+			break;
+		}
+		case "torrent" : { // torrent
+			// creating torrents node
+			$tnode = $root->appendChild( $xml->createElement( "torrents" ) );
+			// adding auto-refresh select
+			if ( $config["refresh"] ) {
+				addrefreshrates( $xml, $root, $tnode, $refreshrates );
+			}
+			// adding language select
+			if ( $config["language"] ) {
+				addlanguages( $xml, $root, $tnode, $languages );
+			}
+
+			// retrieving server info
+			if ( !$xmlrpc->setmrequest( $xmlrpc_methods["si"] ) || !$xmlrpc->call() || !$xmlrpc->parse() ) {
+				$_SESSION["rtwi_err"] = $xmlrpc->geterrors();
+				break;
+			}
+			$si_responses = $xmlrpc->mfetch( $xmlrpc_methods["si"] );
+
+			// retrieving download info
+			if ( !$xmlrpc->setrequest( "d.multicall2", array_merge( array( $hash, $_SESSION["rtwi_view"] ), $xmlrpc_methods["d"] ) ) || !$xmlrpc->call() || !$xmlrpc->parse() ) {
+				$_SESSION["rtwi_err"] = $xmlrpc->geterrors();
+				break;
+			}
+			$response = $xmlrpc->fetch();
+
+			// counting totals
+			$bytes_down = 0;
+			$bytes_up = 0;
+			$torrent = false;
+			for ( $i = 0; $i < count( $response ); $i++ ) {
+				for ( $r = 0; $r < count( $xmlrpc_methods["d"] ); $r++ ) {
+					$methodval = preg_replace( "/(.)\.(get|is)_(.*)=/", "$1_$3", $xmlrpc_methods["d"][$r] );
+					$d_responses[$i][$methodval] = $response[$i][$r];
+				}
+				$bytes_down += $d_responses[$i]["d_down_rate"];
+				$bytes_up += $d_responses[$i]["d_up_rate"];
+
+				// if hash matches save the download data
+				if ( $d_responses[$i]["d.hash="] == $hash ) {
+					$torrent = $d_responses[$i];
+				}
+			}
+			unset( $d_responses );
+
+			// when we have a match
+			if ( is_array( $torrent ) ) {
+				// prepare download variables
+				prepare_downloadlist_responses( $torrent, $message, $config["home_path"], $si_responses["system.cwd"] );
+				// decide what to do
+				switch ( $page ) {
+					case "peers" : { // peer list page
+						// create peer nodes
+						$node = $tnode->appendChild( $xml->createElement( "torrent_peers_root" ) );
+						$node = $node->appendChild( $xml->createElement( "torrent_peers" ) );
+
+						// retrieve peer list info
+						if ( !$xmlrpc->setrequest( "p.multicall", array_merge( array( $torrent["d_hash"], 0 ), $xmlrpc_methods["p"] ) ) || !$xmlrpc->call() || !$xmlrpc->parse() ) {
+							$_SESSION["rtwi_err"] = $xmlrpc->geterrors();
+							break;
+						}
+						$response = $xmlrpc->fetch();
+						
+						// process the peer info
+						for ( $i = 0; $i < count( $response ); $i++ ) {
+							for ( $r = 0; $r < count( $xmlrpc_methods["p"] ); $r++ ) {
+								$methodval = preg_replace( "/(.)\.(get|is)_(.*)=/", "$1_$3", $xmlrpc_methods["p"][$r] );
+								$responses[$i][$methodval] = $response[$i][$r];
+							}
+						}
+						// adding an ID to each peer in the list
+						for ( $i = 0; $i < $torrent["d_peers_connected"]; $i++ ) {
+							prepare_peerlist_responses( $responses[$i], $message, $config );
+							$pnode = $node->appendChild( $xml->createElement( "peer" ) );
+							$pnode->setAttribute( "id", $i );
+							xmlrpc_multiappend( $xml, $pnode, $responses[$i] );
+						}
+
+
+						break;
+					}
+					case "info" : {
+						// crate info nodes
+						$node = $tnode->appendChild( $xml->createElement( "torrent_info_root" ) );
+						$node = $node->appendChild( $xml->createElement( "torrent_info" ) );
+
+						break;
+					}
+					case "files" : {
+						// create file list nodes
+						$node = $tnode->appendChild( $xml->createElement( "torrent_files_root" ) );
+						$node = $node->appendChild( $xml->createElement( "torrent_files" ) );
+
+						// create downloads root direcrory node
+						$node = $node->appendChild( $xml->createElement( "files_root" ) );
+						$node = $node->appendChild( $xml->createElement( "directory" ) );
+						$node->setAttribute( "dirname", $torrent["d_base_filename"] );
+
+						$fst = getmicrotime();
+
+						// retreive file list info
+						if ( !$xmlrpc->setrequest( "f.multicall", array_merge( array( $torrent["d_hash"], 0 ), $xmlrpc_methods["f"] ) ) || !$xmlrpc->call() || !$xmlrpc->parse() ) {
+							$_SESSION["rtwi_err"] = $xmlrpc->geterrors();
+							break;
+						}
+						$response = $xmlrpc->fetch();
+
+						// process the file info
+						for ( $i = 0; $i < count( $response ); $i++ ) {
+							for ( $r = 0; $r < count( $xmlrpc_methods["f"] ); $r++ ) {
+								$methodval = preg_replace( "/(.)\.(get|is)_(.*)=/", "$1_$3", $xmlrpc_methods["f"][$r] );
+								$responses[$i][$methodval] = $response[$i][$r];
+							}
+						}
+
+						// build som kind of struct
+						$dstruct = array();
+						for ( $i = 0; $i < $torrent["d_size_files"]; $i++ ) {
+							prepare_filelist_responses( $responses[$i], $message, $home_path, $si_responses["system.cwd"] );
+
+							$n = 0;
+							$tmp = &$dstruct;
+							foreach ( $responses[$i]["f_path_components"] as $key => $val ) {
+								if ( count( $responses[$i]["f_path_components"] ) == ++$n ) {
+									$tmp[$i] = $val;
+								} else {
+									if ( !isset( $tmp[$val] ) ) {
+										$tmp[$val] = array();
+									}
+									$tmp = &$tmp[$val];
+								}
+							}
+
+						}
+						// build an xml tree of the files
+						$fnode = build_xmltree( $dstruct, $node, $xml, $torrent["d_directory_value"], $responses );
+
+						$ftt = getmicrotime();
+
+						break;
+					}
+					case "trackers" : {
+						// creating tracker list nodes
+						$node = $tnode->appendChild( $xml->createElement( "torrent_trackers_root" ) );
+						$node = $node->appendChild( $xml->createElement( "torrent_trackers" ) );
+
+						// retrieving tracker list info
+						if ( !$xmlrpc->setrequest( "t.multicall", array_merge( array( $torrent["d_hash"], 0 ), $xmlrpc_methods["t"] ) ) || !$xmlrpc->call() || !$xmlrpc->parse() ) {
+							$_SESSION["rtwi_err"] = $xmlrpc->geterrors();
+							break;
+						}
+						$response = $xmlrpc->fetch();
+						// processing the tracker info
+						for ( $i = 0; $i < count( $response ); $i++ ) {
+							for ( $r = 0; $r < count( $xmlrpc_methods["t"] ); $r++ ) {
+								$methodval = preg_replace( "/(.)\.(get|is)_(.*)=/", "$1_$3", $xmlrpc_methods["t"][$r] );
+								$responses[$i][$methodval] = $response[$i][$r];
+							}
+						}
+						// adding an ID to each tracker in the list
+						for ( $i = 0; $i < $torrent["d_tracker_size"]; $i++ ) {
+							prepare_trackerlist_responses( $responses[$i], $message, $config["home_path"] );
+							$tracnode = $node->appendChild( $xml->createElement( "tracker" ) );
+							$tracnode->setAttribute( "id", $i );
+							xmlrpc_multiappend( $xml, $tracnode, $responses[$i] );
+						}
+
+						break;
+					}
+					case "chunks" : { // unimplemented
+						$node = $tnode->appendChild( $xml->createElement( "torrent_chunks_root" ) );
+						$node = $node->appendChild( $xml->createElement( "torrent_chunks" ) );
+
+						break;
+					}
+					case "transfers" : { // unimplemented
+						$node = $tnode->appendChild( $xml->createElement( "torrent_transfers_root" ) );
+						$node = $node->appendChild( $xml->createElement( "torrent_transfers" ) );
+
+						break;
+					}
+				}
+				// adding the download info to the xml
+				xmlrpc_multiappend( $xml, $node, $torrent );
+			} else {
+				$_SESSION["rtwi_err"] = "nohashfound";
+			}
+
+			$si_responses["bytes_down"] = $bytes_down;
+			$si_responses["bytes_up"] = $bytes_up;
+
+			// adding values to xml
+			prepare_serverinfo_responses( $si_responses, $message, $home_path, $config );
+
+			// addng some more values to xml (total up/down rate, limits)
+			$node = $tnode->appendChild( $xml->createElement( "bytes_down", $si_responses["bytes_down"] ) );
+			$node->setAttribute( "suffix", $si_responses["bytes_down_suffix"] );
+			$node->setAttribute( "value", $si_responses["bytes_down_value"] );
+			$node = $tnode->appendChild( $xml->createElement( "bytes_up", $si_responses["bytes_up"] ) );
+			$node->setAttribute( "suffix", $si_responses["bytes_up_suffix"] );
+			$node->setAttribute( "value", $si_responses["bytes_up_value"] );
+			$node = $tnode->appendChild( $xml->createElement( "download_rate", $si_responses["download_rate"] ) );
+			$node->setAttribute( "suffix", $si_responses["download_rate_suffix"] );
+			$node->setAttribute( "value", $si_responses["download_rate_value"] );
+			$node = $tnode->appendChild( $xml->createElement( "upload_rate", $si_responses["upload_rate"] ) );
+			$node->setAttribute( "suffix", $si_responses["upload_rate_suffix"] );
+			$node->setAttribute( "value", $si_responses["upload_rate_value"] );
+
+			// decide what to send back to the browser
+			if ( $ajax === true ) {
+				$layout_file = "layout.ajax.index.xsl";
+			} else {
+				$layout_file = "layout.main.index.xsl";
+			}
+
+			break;
+		}
+		case "getfile" : { // download a file
+			// checking if users are allowed to download
+			if ( !$config["download"] ) {
+				$_SESSION["rtwi_err"] = "downloadnotallowed";
+				header( "location: {$url["index"]}" );
+				exit;
+			} elseif ( $id < 0 ) { // checking if the file id is given and is valid
+				$_SESSION["rtwi_err"] = "noidfound";
+				header( "location: {$url["index"]}" );
+				exit;
+			} else {
+				// retrieving server info
+				if ( !$xmlrpc->setmrequest( $xmlrpc_methods["si"] ) || !$xmlrpc->call() || !$xmlrpc->parse() ) {
+					$_SESSION["rtwi_err"] = $xmlrpc->geterrors();
+					break;
+				}
+				$si_responses = $xmlrpc->mfetch( $xmlrpc_methods["si"] );
+
+				// retrieving download info
+				if ( !$xmlrpc->setrequest( "download_list", array( "", $_SESSION["rtwi_view"] ) ) || !$xmlrpc->call() || !$xmlrpc->parse() ) {
+					$_SESSION["rtwi_err"] = $xmlrpc->geterrors();
+					break;
+				}
+				$torrents = $xmlrpc->fetch();
+
+				// checking if we've found the torrent
+				if ( in_array( $hash, $torrents ) ) {
+					// getting the filename
+					if ( !$xmlrpc->setmrequest( $xmlrpc_methods["g"], array( "${hash}:f${id}" ) ) || !$xmlrpc->call() || !$xmlrpc->parse() ) {
+						$_SESSION["rtwi_err"] = $xmlrpc->geterrors();
+						break;
+					}
+					$response = $xmlrpc->mfetch( $xmlrpc_methods["g"] );
+
+					// getting the absolute path of the download's directory
+					$d_directory_value = myrealpath( dirname($response["f.frozen_path"]), $config["home_path"], $si_responses["system.cwd"] );
+				} else {
+					$_SESSION["rtwi_err"] = "nohashfound";
+					$layout_file = "layout.main.index.xsl";
+				}
+			}
+
+			break;
+		}
+		default : { // torrents
+			// retrieving server info
+			if ( !$xmlrpc->setmrequest( $xmlrpc_methods["si"] ) || !$xmlrpc->call() || !$xmlrpc->parse() ) {
+				$_SESSION["rtwi_err"] = $xmlrpc->geterrors();
+				break;
+			}
+			$si_responses = $xmlrpc->mfetch( $xmlrpc_methods["si"] );
+
+			// creating torrents node
+			$tnode = $root->appendChild( $xml->createElement( "torrents" ) );
+			// adding sort view select
+			addviewtypes( $xml, $root, $tnode, $si_responses["view.list"], $viewtypes );
+			// adding auto-refresh select
+			if ( $config["refresh"] ) {
+				addrefreshrates( $xml, $root, $tnode, $refreshrates );
+			}
+			// adding language select
+			if ( $config["language"] ) {
+				addlanguages( $xml, $root, $tnode, $languages );
+			}
+			// retrieving download info
+			if ( !$xmlrpc->setrequest( "d.multicall2", array_merge( array( '', $_SESSION["rtwi_view"] ), $xmlrpc_methods["d"] ) ) || !$xmlrpc->call() || !$xmlrpc->parse() ) {
+				$_SESSION["rtwi_err"] = $xmlrpc->geterrors();
+				break;
+			}
+			$response = $xmlrpc->fetch();
+
+			// valirables for counting total up/down rate
+			$bytes_down = 0;
+			$bytes_up = 0;
+			// process the download info
+			for ( $i = 0; $i < count( $response ); $i++ ) {
+				for ( $r = 0; $r < count( $xmlrpc_methods["d"] ); $r++ ) {
+					$methodval = preg_replace( "/(.)\.(get|is)_(.*)=/", "$1_$3", $xmlrpc_methods["d"][$r] );
+					$d_responses[$i][$methodval] = $response[$i][$r];
+				}
+				// oincreasing total up/down rate with the current download's rates
+				$bytes_down += $d_responses[$i]["d_down_rate"];
+				$bytes_up += $d_responses[$i]["d_up_rate"];
+
+				// formatting and inserting values to xml
+				prepare_downloadlist_responses( $d_responses[$i], $message, $home_path, $si_responses["system.cwd"] );
+				$ttnode = $tnode->appendChild( $xml->createElement( "torrent" ) );
+				xmlrpc_multiappend( $xml, $ttnode, $d_responses[$i] );
+			}
+
+			// setting total up/down rate
+			$si_responses["bytes_down"] = $bytes_down;
+			$si_responses["bytes_up"] = $bytes_up;
+
+			// adding values to xml
+			prepare_serverinfo_responses( $si_responses, $message, $config );
+
+			// addng some more values to xml (total up/down rate, limits)
+			$node = $tnode->appendChild( $xml->createElement( "bytes_down", $si_responses["bytes_down"] ) );
+			$node->setAttribute( "suffix", $si_responses["bytes_down_suffix"] );
+			$node->setAttribute( "value", $si_responses["bytes_down_value"] );
+			$node = $tnode->appendChild( $xml->createElement( "bytes_up", $si_responses["bytes_up"] ) );
+			$node->setAttribute( "suffix", $si_responses["bytes_up_suffix"] );
+			$node->setAttribute( "value", $si_responses["bytes_up_value"] );
+			$node = $tnode->appendChild( $xml->createElement( "download_rate", $si_responses["download_rate"] ) );
+			$node->setAttribute( "suffix", $si_responses["download_rate_suffix"] );
+			$node->setAttribute( "value", $si_responses["download_rate_value"] );
+			$node = $tnode->appendChild( $xml->createElement( "upload_rate", $si_responses["upload_rate"] ) );
+			$node->setAttribute( "suffix", $si_responses["upload_rate_suffix"] );
+			$node->setAttribute( "value", $si_responses["upload_rate_value"] );
+
+			$layout_file = "layout.main.index.xsl";
+
+			break;
+		}
+	}
+} elseif ( isset( $xmlrpc ) ) {
+	$_SESSION["rtwi_err"] = $xmlrpc->geterrors();
+
+	if ( $ajax === true ) {
+		$layout_file = "layout.ajax.index.xsl";
+	} else {
+		$layout_file = "layout.main.index.xsl";
+	}
+} else {
+	// adding language select
+	if ( $config["language"] ) {
+		addlanguages( $xml, $root, $root, $languages );
+	}
+
+	if ( $ajax === true ) {
+		$layout_file = "layout.ajax.index.xsl";
+	} else {
+		$layout_file = "layout.main.index.xsl";
+	}
+}
+
+// adding (error) message to xml
+if ( isset( $_SESSION["rtwi_err"] ) && $_SESSION["rtwi_err"] != "" ) {
+	if ( is_array( $_SESSION["rtwi_err"] ) ) {
+		$lasterr = array_pop( $_SESSION["rtwi_err"] );
+		$preverr = array_pop( $_SESSION["rtwi_err"] );
+		$_SESSION["rtwi_err"] = $lasterr;
+	}
+	$node = $root->appendChild( $xml->createElement( "err" ) );
+	$mnode = $node->appendChild( $xml->createElement( "errmsg" ) );
+	$mnode->appendChild( $xml->createElement( "msg", $message[$_SESSION["rtwi_err"]] ) );
+	if ( in_array( $_SESSION["rtwi_err"], array( "xmlrpc_fault", "xmlrpc_scgi_connect_failed", "xmlrpc_gw_connect_failed", "xmlrpc_request_invalidtype" ) ) ) {
+		$mnode = $node->appendChild( $xml->createElement( "errmsg" ) );
+		$mnode->appendChild( $xml->createElement( "msg", isset( $preverr ) ? $preverr : $_SESSION["rtwi_err"] ) );
+	}
+
+	$_SESSION["rtwi_err"] = "";
+	unset( $_SESSION["rtwi_err"] );
+}
+
+// setting referrer
+if ( $ajax === false && $mod != "getfile" ) {
+	$_SESSION["rtwi_lastpage"] = $_SERVER["REQUEST_URI"];
+}
+
+// displaying the page
+if ( $mod != "getfile" ) {
+	if ( $format == "xml" ) {
+		print $xml->SaveXML();
+	} else {
+		require_once( "includes/classes/xsl_handler.inc.php" );
+		$page = new page_handler( $config["site_theme"], $layout_file, $xml );
+		$page->parse();
+		$text = $page->fetch();
+		$len = strlen( $text );
+
+		@header( "content-length: {$len}" );
+		@header( "content-type: text/html; charset=utf-8" );
+		@header( "content-language: hu" );
+		@header( "cache-control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0" );
+		@header( "pragma: no-cache" );
+		@header( "expires: thu, 1 jan 1970 00:00:00 gmt" );
+		@header( "imagetoolbar: no" );
+
+		print $text;
+	}
+} else { // sending file to download
+	// getting the filename
+	$path = "{$d_directory_value}/{$response["f.path"]}";
+	$filesize = filesize( $path );
+
+	// set time limit to 0, so the user actually can download the whole file set_time_limit( 0 );
+
+	// sending headers
+	@header( "Content-Description: File Transfer" );
+	@header( "Content-Type: application/force-download" );
+	@header( "Content-Length: {$filesize}" );
+	@header( "Content-Disposition: attachment; filename=\"{$response["f.path"]}\"" );
+	
+	// sending the file
+	readfile( $path );
+}
+
+?>
Index: input.php
===================================================================
--- input.php	(revision 9479cdac9602f889de28ba22cd8b1823c8b13abe)
+++ input.php	(revision 9479cdac9602f889de28ba22cd8b1823c8b13abe)
@@ -0,0 +1,1039 @@
+<?php
+
+function myrealpath( $path, $home, $cwd ) {
+	if ( substr( $path, 0, 2 ) == "~/" ) {
+		$path = substr( $path, 2 );
+		$path = "{$home}{$_SESSION["rtwi_nick"]}/{$path}";
+	}
+
+	$oldcwd = getcwd();
+	chdir( $cwd );
+	$newpath = realpath( $path );
+	chdir( $oldcwd );
+
+	return $newpath;
+}
+
+error_reporting( E_ALL );
+error_reporting( E_ALL ^ E_NOTICE );
+
+set_time_limit( 10 );
+
+session_start();
+
+$config = parse_ini_file( "includes/rtwi.conf", true );
+$users = parse_ini_file( $config["user_conf"], true );
+
+require_once( "includes/classes/xmlrpc_handler.inc.php" );
+require_once( "includes/classes/bittorrent_handler.inc.php" );
+require_once( "includes/tools/functions.time.inc.php" );
+
+$st = getmicrotime();
+$callnum = 0;
+$calltime = 0;
+$multicallnum = 0;
+
+if ( isset( $_REQUEST["mod"] ) ) {
+	$mod = $_REQUEST["mod"];
+} else {
+	$mod = "";
+}
+
+if ( isset( $_REQUEST["hash"] ) ) {
+	$hash = $_REQUEST["hash"];
+} else {
+	$hash = "";
+}
+
+if ( ( !isset( $_SESSION["rtwi_auth"] ) || $_SESSION["rtwi_auth"] !== 1 ) && !in_array( $_REQUEST["mod"], array( "login", "changelanguage" ) ) ) {
+	header( "location: {$config["index"]}" );
+	exit;
+} else {
+	$xmlrpc = new xmlrpc_handler( $_SESSION["rtwi_cadr"], 10 );
+}
+
+$xml = new DOMDocument( "1.0", "utf-8" );
+$xml->formatOutput = true;
+
+$root = $xml->appendChild( $xml->createElement( "root" ) );
+
+//print_r( $_SESSION );
+//print_r( $_REQUEST );
+
+switch ( $_REQUEST["mod"] ) {
+	case "login" : { // login
+		if ( isset( $_REQUEST["loginname"] ) && isset( $_REQUEST["loginpass"] ) && $_REQUEST["loginname"] != "" && $_REQUEST["loginpass"] != "" && array_key_exists( $_REQUEST["loginname"], $users ) && $users[$_REQUEST["loginname"]]["pass"] == sha1( $_REQUEST["loginpass"] ) ) {
+			$_SESSION["rtwi_auth"] = 1;
+			$_SESSION["rtwi_nick"] = $_REQUEST["loginname"];
+			$_SESSION["rtwi_cadr"] = $users[$_REQUEST["loginname"]]["address"];
+
+			// setting rtorrent's connection address
+			if ( preg_match( "|^unix://(.+)$|", $_SESSION["rtwi_cadr"], $match ) ) {
+				$_SESSION["rtwi_cadr"] = myrealpath( substr( $_SESSION["rtwi_cadr"], 7 ), $config["home_path"], "{$config["home_path"]}{$_SESSION["rtwi_nick"]}" );
+				$_SESSION["rtwi_cadr"] = "unix://{$_SESSION["rtwi_cadr"]}";
+			} elseif ( preg_match( "<^(http|https)://(.*)$>", $_SESSION["rtwi_cadr"], $match ) ) {
+				$_SESSION["rtwi_password"] = $_REQUEST["loginpass"];
+			}
+
+			if ( isset( $_REQUEST["rememberme"] ) && $_REQUEST["rememberme"] == "on" ) {
+				setcookie( "rtwi_auth", 1, time() + 60 * 60 * 24 * 365 );
+				setcookie( "rtwi_nick", $_REQUEST["loginname"], time() + 60 * 60 * 24 * 365 );
+				setcookie( "rtwi_pass", sha1( $_REQUEST["loginpass"] ), time() + 60 * 60 * 24 * 365 );
+			}
+
+			$_SESSION["rtwi_err"] = "succlogin";
+			header( "location: {$config["index"]}" );
+			exit;
+		} else {
+			$_SESSION["rtwi_err"] = "badlogin";
+			header( "location: {$config["index"]}" );
+			exit;
+		}
+
+		break;
+	}
+	case "logout" : { // logout
+		$_SESSION["rtwi_auth"] = 0;
+		$_SESSION["rtwi_nick"] = "";
+		$_SESSION["rtwi_cadr"] = "";
+		$_SESSION["rtwi_view"] = "";
+		$_SESSION["rtwi_refresh"] = 0;
+		$_SESSION["rtwi_language"] = "";
+		$_SESSION["rtwi_password"] = "";
+
+		unset( $_SESSION["rtwi_auth"] );
+		unset( $_SESSION["rtwi_nick"] );
+		unset( $_SESSION["rtwi_cadr"] );
+		unset( $_SESSION["rtwi_scgi"] );
+		unset( $_SESSION["rtwi_view"] );
+		unset( $_SESSION["rtwi_refresh"] );
+		unset( $_SESSION["rtwi_language"] );
+		unset( $_SESSION["rtwi_password"] );
+
+		setcookie( "rtwi_auth", 0 );
+		setcookie( "rtwi_nick", "" );
+
+		$_SESSION["rtwi_err"] = "succlogout";
+		header( "location: {$config["index"]}" );
+		exit;
+
+		break;
+	}
+	case "changeview" : { // change view
+		if ( isset( $_REQUEST["viewtype"] ) && $_REQUEST["viewtype"] != "" ) {
+			if ( !$xmlrpc->setrequest( "view.list", "" ) || !$xmlrpc->call() || !$xmlrpc->parse() ) {
+				$_SESSION["rtwi_err"] = $xmlrpc->geterrors();
+				header( "location: {$config["index"]}" );
+				exit;
+			}
+			$viewtypes = $xmlrpc->fetch();
+
+			if ( in_array( $_REQUEST["viewtype"], $viewtypes ) ) {
+				$_SESSION["rtwi_view"] = $_REQUEST["viewtype"];
+			} else {
+				$_SESSION["rtwi_err"] = "badviewtype";
+				header( "location: {$config["index"]}" );
+				exit;
+			}
+
+			setcookie( "rtwi_view", $_SESSION["rtwi_view"], time() + 60 * 60 * 24 * 30 );
+
+			$_SESSION["rtwi_err"] = "succviewchange";
+			header( "location: {$config["index"]}" );
+			exit;
+		} else {
+			$_SESSION["rtwi_err"] = "noviewtype";
+			header( "location: {$config["index"]}" );
+			exit;
+		}
+
+		break;
+	}
+	case "changerefresh" : { // change view
+		if ( $config["refresh"] !== "1" ) {
+			$_SESSION["rtwi_err"] = "refreshnotallowed";
+			header( "location: {$config["index"]}" );
+			exit;
+		}
+		if ( isset( $_REQUEST["refreshrate"] ) && $_REQUEST["refreshrate"] != "" ) {
+			$refreshrate = $_REQUEST["refreshrate"];
+			settype( $refreshrate, "int" );
+			if ( $refreshrate < 0 ) {
+				$refreshrate = 0;
+			}
+
+			$_SESSION["rtwi_refresh"] = $refreshrate;
+
+			setcookie( "rtwi_refresh", $_SESSION["rtwi_refresh"], time() + 60 * 60 * 24 * 30 );
+
+			$_SESSION["rtwi_err"] = "succrefreshchange";
+			header( "location: {$_SESSION["rtwi_lastpage"]}" );
+			exit;
+		} else {
+			$_SESSION["rtwi_err"] = "norefreshrate";
+			header( "location: {$_SESSION["rtwi_lastpage"]}" );
+			exit;
+		}
+
+		break;
+	}
+	case "changelanguage" : { // change language
+		if ( $config["language"] !== "1" ) {
+			$_SESSION["rtwi_err"] = "languagenotallowed";
+			header( "location: {$config["index"]}" );
+			exit;
+		}
+		if ( isset( $_REQUEST["language"] ) && $_REQUEST["language"] != "" ) {
+			$language = $_REQUEST["language"];
+			if ( is_readable( "includes/messages.{$language}.inc.php" ) ) {
+				$_SESSION["rtwi_language"] = $language;
+
+				setcookie( "rtwi_language", $_SESSION["rtwi_language"], time() + 60 * 60 * 24 * 30 );
+
+				$_SESSION["rtwi_err"] = "succlanguagechange";
+				header( "location: {$_SESSION["rtwi_lastpage"]}" );
+				exit;
+			} else {
+				$_SESSION["rtwi_err"] = "badlanguage";
+				header( "location: {$_SESSION["rtwi_lastpage"]}" );
+				exit;
+			}
+		} else {
+			$_SESSION["rtwi_err"] = "nolanguage";
+			header( "location: {$_SESSION["rtwi_lastpage"]}" );
+			exit;
+		}
+
+		break;
+	}
+	case "changethrottle" : { // change view
+		if ( $config["throttle"] !== "1" ) {
+			$_SESSION["rtwi_err"] = "throttlenotallowed";
+			header( "location: {$config["index"]}" );
+			exit;
+		}
+		if ( isset( $_REQUEST["upspeed"] ) && $_REQUEST["upspeed"] != "" && isset( $_REQUEST["downspeed"] ) && $_REQUEST["downspeed"] != "" ) {
+			$upspeed = $_REQUEST["upspeed"];
+			settype( $upspeed, "int" );
+			if ( $upspeed < 0 ) {
+				$upspeed = 0;
+			}
+			$downspeed = $_REQUEST["downspeed"];
+			settype( $downspeed, "int" );
+			if ( $downspeed < 0 ) {
+				$downspeed = 0;
+			}
+
+			if ( !$xmlrpc->setrequest( "throttle.global_up.max_rate.set_kb", array(0, $upspeed) ) || !$xmlrpc->call() ) {
+				$_SESSION["rtwi_err"] = $xmlrpc->geterrors();
+				header( "location: {$_SESSION["rtwi_lastpage"]}" );
+				exit;
+			}
+			if ( !$xmlrpc->setrequest( "throttle.global_down.max_rate.set_kb", array(0, $downspeed) ) || !$xmlrpc->call() ) {
+				$_SESSION["rtwi_err"] = $xmlrpc->geterrors();
+				header( "location: {$_SESSION["rtwi_lastpage"]}" );
+				exit;
+			}
+
+			$_SESSION["rtwi_err"] = "succthrottlechange";
+			header( "location: {$_SESSION["rtwi_lastpage"]}" );
+			exit;
+		} else {
+			$_SESSION["rtwi_err"] = "badthrottlevals";
+			header( "location: {$_SESSION["rtwi_lastpage"]}" );
+			exit;
+		}
+
+		break;
+	}
+	case "addtorrent" : { // add a torrent
+		if ( !isset( $_REQUEST["tfmethod"] ) || !in_array( $_REQUEST["tfmethod"], array( "url", "file" ) ) ) {
+			$_SESSION["rtwi_err"] = "badtfmethod";
+			header( "location: {$config["index"]}?mod=addtorrent" );
+			exit;
+		}
+
+		if ( !$xmlrpc->setrequest( "download_list", "" ) || !$xmlrpc->call() || !$xmlrpc->parse() ) {
+			$_SESSION["rtwi_err"] = $xmlrpc->geterrors();
+			header( "location: {$config["index"]}?mod=addtorrent}" );
+			exit;
+		}
+		$torrents = $xmlrpc->fetch();
+
+		if ( !$xmlrpc->setmrequest( array( "directory.default", "system.cwd" ) ) || !$xmlrpc->call() || !$xmlrpc->parse() ) {
+			$_SESSION["rtwi_err"] = $xmlrpc->geterrors();
+			header( "location: {$config["index"]}?mod=addtorrent}" );
+			exit;
+		}
+		$directories = $xmlrpc->fetch();
+		$directory = $directories[0][0];
+		$cwd = $directories[1][0];
+
+		$directory = myrealpath( $directory, $config["home_path"], $cwd );
+
+		if ( $_REQUEST["tfmethod"] == "url" ) {
+			if ( !isset( $_REQUEST["torrenturl"] ) || $_REQUEST["torrenturl"] == "" ) {
+				$_SESSION["rtwi_err"] = "notorrenturl";
+				header( "location: {$config["index"]}?mod=addtorrent" );
+				exit;
+			} elseif ( ( substr( $_REQUEST["torrenturl"], 0, 7 ) != "http://" ) && ( substr( $_REQUEST["torrenturl"], 0, 8 ) != "https://" ) && ( substr( $_REQUEST["torrenturl"], 0, 8 ) != "magnet:?" ) ) {
+				$_SESSION["rtwi_err"] = "notanurl";
+				header( "location: {$config["index"]}?mod=addtorrent" );
+				exit;
+			}
+			$torrent = str_replace("&", "&amp;", $_REQUEST["torrenturl"]);
+		} else {
+			if ( !isset( $_FILES ) || !is_array( $_FILES ) ) {
+				$_SESSION["rtwi_err"] = "notorrentfileuploaded";
+				header( "location: {$config["index"]}?mod=addtorrent" );
+				exit;
+			}
+			switch ( $_FILES["torrentfile"]["error"] ) {
+				case 0 : {
+					if ( is_uploaded_file( $_FILES["torrentfile"]["tmp_name"] ) ) {
+						$torrent = file_get_contents( $_FILES["torrentfile"]["tmp_name"] );
+						$xmlrpc->set_type( $torrent, "base64" );
+					} else {
+						$_SESSION["rtwi_err"] = "rtfileattack";
+						header( "location: {$config["index"]}?mod=addtorrent" );
+						exit;
+					}
+
+					break;
+				}
+				case 1 : {
+					$_SESSION["rtwi_err"] = "rtfileinisize";
+					header( "location: {$config["index"]}?mod=addtorrent" );
+					exit;
+				
+					break;
+				}
+				case 2 : {
+					$_SESSION["rtwi_err"] = "rtfileformsize";
+					header( "location: {$config["index"]}?mod=addtorrent" );
+					exit;
+				
+					break;
+				}
+				case 3 : {
+					$_SESSION["rtwi_err"] = "rtfilepartial";
+					header( "location: {$config["index"]}?mod=addtorrent" );
+					exit;
+				
+					break;
+				}
+				case 4 : {
+					$_SESSION["rtwi_err"] = "rtfilenofile";
+					header( "location: {$config["index"]}?mod=addtorrent" );
+					exit;
+				
+					break;
+				}
+				case 6 : {
+					$_SESSION["rtwi_err"] = "rtfilenotmpdir";
+					header( "location: {$config["index"]}?mod=addtorrent" );
+					exit;
+				
+					break;
+				}
+				case 7 : {
+					$_SESSION["rtwi_err"] = "rtfilenowrite";
+					header( "location: {$config["index"]}?mod=addtorrent" );
+					exit;
+				
+					break;
+				}
+				default : {
+					$_SESSION["rtwi_err"] = "rtfileother";
+					header( "location: {$config["index"]}?mod=addtorrent" );
+					exit;
+				
+					break;
+				}
+			}
+		}
+
+		$dlpath = $_REQUEST["dlpath"];
+		$dlpath = myrealpath( "{$directory}/{$dlpath}", $config["home_path"], $cwd );
+
+		$param = array( "", $torrent );
+		if ( $dlpath != "" ) {
+			$param[] = "d.directory.set={$dlpath}";
+		}
+
+		if ( $_REQUEST["tfmethod"] == "url" || isset( $_REQUEST["keeptorrentfile"] ) && $_REQUEST["keeptorrentfile"] == "on"  ) {
+			if ( isset( $_REQUEST["torrentstart"] ) && $_REQUEST["torrentstart"] == "start" ) {
+				$method = "load.start";
+			} else {
+				$method = "load.normal";
+			}
+		} else {
+			if ( isset( $_REQUEST["torrentstart"] ) && $_REQUEST["torrentstart"] == "start" ) {
+				$method = "load.raw_start";
+			} else {
+				$method = "load.raw";
+			}
+		}
+		if ( !$xmlrpc->setrequest( $method, $param ) || !$xmlrpc->call() ) {
+			$_SESSION["rtwi_err"] = $xmlrpc->geterrors();
+			header( "location: {$config["index"]}" );
+			exit;
+		}
+
+		$_SESSION["rtwi_err"] = "succtorrentload";
+		header( "location: {$config["index"]}" );
+		exit;
+
+		break;
+	}
+	case "torrentstart" : { // start a torrent
+		if ( !$xmlrpc->setrequest( "download_list", "" ) || !$xmlrpc->call() || !$xmlrpc->parse() ) {
+			$_SESSION["rtwi_err"] = $xmlrpc->geterrors();
+			header( "location: {$config["index"]}" );
+			exit;
+		}
+		$torrents = $xmlrpc->fetch();
+
+		if ( !in_array( $hash, $torrents ) ) {
+			$_SESSION["rtwi_err"] = "nohashfound";
+			header( "location: {$config["index"]}" );
+			exit;
+		}
+
+		if ( !$xmlrpc->setrequest( "d.start", $hash ) || !$xmlrpc->call() ) {
+			$_SESSION["rtwi_err"] = $xmlrpc->geterrors();
+			header( "location: {$config["index"]}" );
+			exit;
+		}
+
+		sleep( 1 );
+
+		$_SESSION["rtwi_err"] = "succtorrentstart";
+		header( "location: {$config["index"]}" );
+		exit;
+
+		break;
+	}
+	case "torrentopen" : { // open a torrent
+		if ( !$xmlrpc->setrequest( "download_list", "" ) || !$xmlrpc->call() || !$xmlrpc->parse() ) {
+			$_SESSION["rtwi_err"] = $xmlrpc->geterrors();
+			header( "location: {$config["index"]}" );
+			exit;
+		}
+		$torrents = $xmlrpc->fetch();
+
+		if ( !in_array( $hash, $torrents ) ) {
+			$_SESSION["rtwi_err"] = "nohashfound";
+			header( "location: {$config["index"]}" );
+			exit;
+		}
+
+		if ( !$xmlrpc->setrequest( "d.open", $hash ) || !$xmlrpc->call() ) {
+			$_SESSION["rtwi_err"] = $xmlrpc->geterrors();
+			header( "location: {$config["index"]}" );
+			exit;
+		}
+
+		sleep( 1 );
+
+		$_SESSION["rtwi_err"] = "succtorrentopen";
+		header( "location: {$config["index"]}" );
+		exit;
+
+		break;
+	}
+	case "torrentstop" : { // stop a torrent
+		if ( !$xmlrpc->setrequest( "download_list", "" ) || !$xmlrpc->call() || !$xmlrpc->parse() ) {
+			$_SESSION["rtwi_err"] = $xmlrpc->geterrors();
+			header( "location: {$config["index"]}" );
+			exit;
+		}
+		$torrents = $xmlrpc->fetch();
+
+		if ( !in_array( $hash, $torrents ) ) {
+			$_SESSION["rtwi_err"] = "nohashfound";
+			header( "location: {$config["index"]}" );
+			exit;
+		}
+
+		if ( !$xmlrpc->setrequest( "d.stop", $hash ) || !$xmlrpc->call() ) {
+			$_SESSION["rtwi_err"] = $xmlrpc->geterrors();
+			header( "location: {$config["index"]}" );
+			exit;
+		}
+
+		sleep( 1 );
+
+		$_SESSION["rtwi_err"] = "succtorrentstop";
+		header( "location: {$config["index"]}" );
+		exit;
+
+		break;
+	}
+	case "torrentclose" : { // close a torrent
+		if ( !$xmlrpc->setrequest( "download_list", "" ) || !$xmlrpc->call() || !$xmlrpc->parse() ) {
+			$_SESSION["rtwi_err"] = $xmlrpc->geterrors();
+			header( "location: {$config["index"]}" );
+			exit;
+		}
+		$torrents = $xmlrpc->fetch();
+
+		if ( !in_array( $hash, $torrents ) ) {
+			$_SESSION["rtwi_err"] = "nohashfound";
+			header( "location: {$config["index"]}" );
+			exit;
+		}
+
+		if ( !$xmlrpc->setmrequest( array( "d.stop", "d.close" ), array( $hash ) ) || !$xmlrpc->call() ) {
+			$_SESSION["rtwi_err"] = $xmlrpc->geterrors();
+			header( "location: {$config["index"]}" );
+			exit;
+		}
+
+		sleep( 1 );
+
+		$_SESSION["rtwi_err"] = "succtorrentclose";
+		header( "location: {$config["index"]}" );
+		exit;
+
+		break;
+	}
+	case "torrentcheckhash" : { // check hash for a torrent
+		if ( !$xmlrpc->setrequest( "download_list", "" ) || !$xmlrpc->call() || !$xmlrpc->parse() ) {
+			$_SESSION["rtwi_err"] = $xmlrpc->geterrors();
+			header( "location: {$config["index"]}" );
+			exit;
+		}
+		$torrents = $xmlrpc->fetch();
+
+		if ( !in_array( $hash, $torrents ) ) {
+			$_SESSION["rtwi_err"] = "nohashfound";
+			header( "location: {$config["index"]}" );
+			exit;
+		}
+
+		if ( !$xmlrpc->setrequest( "d.check_hash", $hash ) || !$xmlrpc->call() ) {
+			$_SESSION["rtwi_err"] = $xmlrpc->geterrors();
+			header( "location: {$config["index"]}" );
+			exit;
+		}
+
+		sleep( 1 );
+
+		$_SESSION["rtwi_err"] = "succtorrentcheckhash";
+		header( "location: {$config["index"]}" );
+		exit;
+
+		break;
+	}
+	case "torrentremove" : { // remove a torrent
+		if ( !$xmlrpc->setrequest( "download_list", "" ) || !$xmlrpc->call() || !$xmlrpc->parse() ) {
+			$_SESSION["rtwi_err"] = $xmlrpc->geterrors();
+			header( "location: {$config["index"]}" );
+			exit;
+		}
+		$torrents = $xmlrpc->fetch();
+
+		if ( !in_array( $hash, $torrents ) ) {
+			$_SESSION["rtwi_err"] = "nohashfound";
+			header( "location: {$config["index"]}" );
+			exit;
+		}
+
+		if ( !$xmlrpc->setrequest( "d.erase", $hash ) || !$xmlrpc->call() ) {
+			$_SESSION["rtwi_err"] = $xmlrpc->geterrors();
+			header( "location: {$config["index"]}" );
+			exit;
+		}
+
+		sleep( 1 );
+
+		$_SESSION["rtwi_err"] = "succtorrentremove";
+		header( "location: {$config["index"]}" );
+		exit;
+
+		break;
+	}
+	case "torrenterase" : { // erase a torrent and delete the data
+		if ( $config["erase"] !== "1" ) {
+			$_SESSION["rtwi_err"] = "erasenotallowed";
+			header( "location: {$config["index"]}" );
+			exit;
+		}
+
+		if ( !$xmlrpc->setrequest( "download_list", "" ) || !$xmlrpc->call() || !$xmlrpc->parse() ) {
+			$_SESSION["rtwi_err"] = $xmlrpc->geterrors();
+			header( "location: {$config["index"]}" );
+			exit;
+		}
+		$torrents = $xmlrpc->fetch();
+
+		if ( !in_array( $hash, $torrents ) ) {
+			$_SESSION["rtwi_err"] = "nohashfound";
+			header( "location: {$config["index"]}" );
+			exit;
+		}
+
+		if ( !$xmlrpc->setrequest( "d.base_path", $hash ) || !$xmlrpc->call() || !$xmlrpc->parse() ) {
+			$_SESSION["rtwi_err"] = $xmlrpc->geterrors();
+			header( "location: {$config["index"]}" );
+			exit;
+		}
+		$response = $xmlrpc->fetch();
+
+		if ( !$xmlrpc->setrequest( "execute", array( "", "rm", "-rf", "--", $response ) ) || !$xmlrpc->call() ) {
+			$_SESSION["rtwi_err"] = $xmlrpc->geterrors();
+			header( "location: {$config["index"]}" );
+			exit;
+		}
+		if ( !$xmlrpc->setrequest( "d.erase", $hash ) || !$xmlrpc->call() ) {
+			$_SESSION["rtwi_err"] = $xmlrpc->geterrors();
+			header( "location: {$config["index"]}" );
+			exit;
+		}
+
+		sleep( 1 );
+
+		$_SESSION["rtwi_err"] = "succtorrenterase";
+		header( "location: {$config["index"]}" );
+		exit;
+
+		break;
+	}
+	case "doonalltorrent" : { // do some task on all torrent
+		switch ( $_REQUEST["task"] ) {
+			case "start" : {
+				if ( !$xmlrpc->setrequest( "d.multicall2", array( "", $_SESSION["rtwi_view"], "d.start=" ) ) || !$xmlrpc->call() ) {
+					$_SESSION["rtwi_err"] = $xmlrpc->geterrors();
+					header( "location: {$config["index"]}" );
+					exit;
+				}
+
+				sleep( 1 );
+
+				$_SESSION["rtwi_err"] = "succtorrentsstart";
+				header( "location: {$config["index"]}" );
+				exit;
+
+				break;
+			}
+			case "stop" : {
+				if ( !$xmlrpc->setrequest( "d.multicall2", array( "", $_SESSION["rtwi_view"], "d.stop=" ) ) || !$xmlrpc->call() ) {
+					$_SESSION["rtwi_err"] = $xmlrpc->geterrors();
+					header( "location: {$config["index"]}" );
+					exit;
+				}
+
+				sleep( 1 );
+
+				$_SESSION["rtwi_err"] = "succtorrentsstop";
+				header( "location: {$config["index"]}" );
+				exit;
+
+				break;
+			}
+			case "open" : {
+				if ( !$xmlrpc->setrequest( "d.multicall2", array( "", $_SESSION["rtwi_view"], "d.open=" ) ) || !$xmlrpc->call() ) {
+					$_SESSION["rtwi_err"] = $xmlrpc->geterrors();
+					header( "location: {$config["index"]}" );
+					exit;
+				}
+
+				sleep( 1 );
+
+				$_SESSION["rtwi_err"] = "succtorrentsopen";
+				header( "location: {$config["index"]}" );
+				exit;
+
+				break;
+			}
+			case "close" : {
+				if ( !$xmlrpc->setrequest( "d.multicall2", array( "", $_SESSION["rtwi_view"], "d.stop=", "d.close=" ) ) || !$xmlrpc->call() ) {
+					$_SESSION["rtwi_err"] = $xmlrpc->geterrors();
+					header( "location: {$config["index"]}" );
+					exit;
+				}
+
+				sleep( 1 );
+
+				$_SESSION["rtwi_err"] = "succtorrentsclose";
+				header( "location: {$config["index"]}" );
+				exit;
+
+				break;
+			}
+			case "checkhash" : {
+				if ( !$xmlrpc->setrequest( "d.multicall2", array( "", $_SESSION["rtwi_view"], "d.check_hash=" ) ) || !$xmlrpc->call() ) {
+					$_SESSION["rtwi_err"] = $xmlrpc->geterrors();
+					header( "location: {$config["index"]}" );
+					exit;
+				}
+
+				sleep( 1 );
+
+				$_SESSION["rtwi_err"] = "succtorrentscheckhash";
+				header( "location: {$config["index"]}" );
+				exit;
+
+				break;
+			}
+			case "remove" : {
+				if ( !$xmlrpc->setrequest( "d.multicall2", array( "", $_SESSION["rtwi_view"], "d.erase=" ) ) || !$xmlrpc->call() ) {
+					$_SESSION["rtwi_err"] = $xmlrpc->geterrors();
+					header( "location: {$config["index"]}" );
+					exit;
+				}
+
+				sleep( 1 );
+
+				$_SESSION["rtwi_err"] = "succtorrentsremove";
+				header( "location: {$config["index"]}" );
+				exit;
+
+				break;
+			}
+			default : {
+				$_SESSION["rtwi_err"] = "nooponalltorrent";
+				header( "location: {$config["index"]}" );
+				exit;
+
+				break;
+			}
+		}
+		
+		break;
+	}
+	case "changepriority" : { // set priority
+		if ( !$xmlrpc->setrequest( "download_list", "" ) || !$xmlrpc->call() || !$xmlrpc->parse() ) {
+			$_SESSION["rtwi_err"] = $xmlrpc->geterrors();
+			header( "location: {$config["index"]}" );
+			exit;
+		}
+
+		$torrents = $xmlrpc->fetch();
+
+		if ( !in_array( $hash, $torrents ) ) {
+			$_SESSION["rtwi_err"] = "nohashfound";
+			header( "location: {$config["index"]}" );
+			exit;
+		}
+
+		if ( isset( $_REQUEST["priority"] ) ) {
+			$priority = $_REQUEST["priority"];
+		} else {
+			$_SESSION["rtwi_err"] = "nopriorityfound";
+			header( "location: {$config["index"]}" );
+			exit;
+		}
+
+		if ( !in_array( $priority, array( 0, 1, 2, 3 ) ) ) {
+			$_SESSION["rtwi_err"] = "badpriorityfoiund";
+			header( "location: {$config["index"]}" );
+			exit;
+		}
+
+		if ( !$xmlrpc->setrequest( "d.priority.set", array( $hash, $priority ) ) || !$xmlrpc->call() ) {
+			$_SESSION["rtwi_err"] = $xmlrpc->geterrors();
+			header( "location: {$config["index"]}" );
+			exit;
+		}
+
+		sleep( 1 );
+
+		$_SESSION["rtwi_err"] = "succprioritychange";
+		header( "location: {$config["index"]}" );
+		exit;
+
+		break;
+	}
+	case "changefilepriority" : { // set file priority
+		if ( isset( $_REQUEST["ajax"] ) && $_REQUEST["ajax"] == "true" ) {
+			$tourl = "{$config["index"]}?mod=torrent&hash={$hash}&page=files&ajax=true";
+		} else {
+			$tourl = "{$config["index"]}?mod=torrent&hash={$hash}&page=files";
+		}
+
+		if ( !$xmlrpc->setrequest( "download_list", "" ) || !$xmlrpc->call() || !$xmlrpc->parse() ) {
+			$_SESSION["rtwi_err"] = $xmlrpc->geterrors();
+			header( "location: {$tourl}" );
+			exit;
+		}
+		$torrents = $xmlrpc->fetch();
+
+		if ( !in_array( $hash, $torrents ) ) {
+			$_SESSION["rtwi_err"] = "nohashfound";
+			header( "location: {$tourl}" );
+			exit;
+		}
+
+		if ( isset( $_REQUEST["id"] ) ) {
+			$id = $_REQUEST["id"];
+			settype( $id, "int" );
+		} else {
+			$_SESSION["rtwi_err"] = "noidfound";
+			header( "location: {$tourl}" );
+			exit;
+		}
+
+		if ( !$xmlrpc->setrequest( "d.size_files", $hash ) || !$xmlrpc->call() || !$xmlrpc->parse() ) {
+			$_SESSION["rtwi_err"] = $xmlrpc->geterrors();
+			header( "location: {$tourl}" );
+			exit;
+		}
+		$response = $xmlrpc->fetch();
+
+		if ( $id < 0 || $id > $response ) {
+			$_SESSION["rtwi_err"] = "badidfound";
+			header( "location: {$tourl}" );
+			exit;
+		}
+
+		if ( isset( $_REQUEST["filepriority"] ) ) {
+			$filepriority = $_REQUEST["filepriority"];
+			settype( $filepriority, "int" );
+		} else {
+			$_SESSION["rtwi_err"] = "nopriorityfound";
+			header( "location: {$tourl}" );
+			exit;
+		}
+
+		if ( !in_array( $filepriority, array( 0, 1, 2 ) ) ) {
+			$_SESSION["rtwi_err"] = "badpriorityfound";
+			header( "location: {$tourl}" );
+			exit;
+		}
+
+		if ( !$xmlrpc->setrequest( "f.priority.set", array( "${hash}:f${id}", $filepriority ) ) || !$xmlrpc->call() ) {
+			$_SESSION["rtwi_err"] = $xmlrpc->geterrors();
+			header( "location: {$tourl}" );
+			exit;
+		}
+
+		if ( !$xmlrpc->setrequest( "d.update_priorities", $hash ) || !$xmlrpc->call() ) {
+			$_SESSION["rtwi_err"] = $xmlrpc->geterrors();
+			header( "location: {$tourl}" );
+			exit;
+		}
+
+		sleep( 1 );
+
+		$_SESSION["rtwi_err"] = "succfileprioritychange";
+		header( "location: {$tourl}" );
+		exit;
+
+		break;
+	}
+	case "changedirpriority" : { // set file priority
+		if ( isset( $_REQUEST["ajax"] ) && $_REQUEST["ajax"] == "true" ) {
+			$tourl = "{$config["index"]}?mod=torrent&hash={$hash}&page=files&ajax=true";
+		} else {
+			$tourl = "{$config["index"]}?mod=torrent&hash={$hash}&page=files";
+		}
+
+		if ( !$xmlrpc->setrequest( "download_list", "" ) || !$xmlrpc->call() || !$xmlrpc->parse() ) {
+			$_SESSION["rtwi_err"] = $xmlrpc->geterrors();
+			header( "location: {$tourl}" );
+			exit;
+		}
+		$torrents = $xmlrpc->fetch();
+
+		if ( !in_array( $hash, $torrents ) ) {
+			$_SESSION["rtwi_err"] = "nohashfound";
+			header( "location: {$tourl}" );
+			exit;
+		}
+
+		if ( isset( $_REQUEST["dirpriority"] ) ) {
+			$dirpriority = $_REQUEST["dirpriority"];
+			settype( $dirpriority, "int" );
+		} else {
+			$_SESSION["rtwi_err"] = "nopriorityfound";
+			header( "location: {$tourl}" );
+			exit;
+		}
+
+		if ( !in_array( $dirpriority, array( 0, 1, 2 ) ) ) {
+			$_SESSION["rtwi_err"] = "badpriorityfound";
+			header( "location: {$tourl}" );
+			exit;
+		}
+
+		if ( isset( $_REQUEST["dir"] ) ) {
+			$dir = $_REQUEST["dir"];
+		} else {
+			$_SESSION["rtwi_err"] = "nodirfound";
+			header( "location: {$tourl}" );
+			exit;
+		}
+
+		if ( substr( $dir, -1 ) != "/" ) {
+			$dir = "{$dir}/";
+		}
+		$len = strlen( $dir );
+
+		if ( !$xmlrpc->setrequest( "f.multicall", array( $hash, 0, "f.path=" ) ) || !$xmlrpc->call() || !$xmlrpc->parse() ) {
+			$_SESSION["rtwi_err"] = $xmlrpc->geterrors();
+			header( "location: {$tourl}" );
+			exit;
+		}
+		$files = $xmlrpc->fetch();
+
+		$badpath = true;
+		$request = array();
+		$params = array();
+		foreach ( $files as $key => $val ) {
+			if ( substr( $val[0], 0, 1 ) != "/" ) {
+				$val[0] = "/{$val[0]}";
+			}
+			if ( strpos( $val[0], $dir ) === 0 ) {
+				$request[] = "f.priority.set";
+				$params[] = array( "${hash}:f${key}", $dirpriority );
+				$filestochange[] = array( $key, $val[0] );
+				if ( $badpath == true ) {
+					$badpath = false;
+				}
+			}
+		}
+
+		if ( $badpath === true ) {
+			$_SESSION["rtwi_err"] = "baddirfound";
+			header( "location: {$tourl}" );
+			exit;
+		}
+
+		if ( !$xmlrpc->setumrequest( $request, $params ) || !$xmlrpc->call() || !$xmlrpc->parse() ) {
+			$_SESSION["rtwi_err"] = $xmlrpc->geterrors();
+			header( "location: {$tourl}" );
+			exit;
+		}
+		$torrents = $xmlrpc->fetch();
+
+		if ( !$xmlrpc->setrequest( "d.update_priorities", $hash ) || !$xmlrpc->call() || !$xmlrpc->parse() ) {
+			$_SESSION["rtwi_err"] = $xmlrpc->geterrors();
+			header( "location: {$tourl}" );
+			exit;
+		}
+
+		$torrents = $xmlrpc->fetch();
+
+		sleep( 1 );
+
+		$_SESSION["rtwi_err"] = "succdirprioritychange";
+		header( "location: {$tourl}" );
+		exit;
+
+		break;
+	}
+	case "changetrackerenabled" : { // set if tracker is enabled
+		if ( isset( $_REQUEST["ajax"] ) && $_REQUEST["ajax"] == "true" ) {
+			$tourl = "{$config["index"]}?mod=torrent&hash={$hash}&page=trackers&ajax=true";
+		} else {
+			$tourl = "{$config["index"]}?mod=torrent&hash={$hash}&page=trackers";
+		}
+
+		if ( !$xmlrpc->setrequest( "download_list", "" ) || !$xmlrpc->call() || !$xmlrpc->parse() ) {
+			$_SESSION["rtwi_err"] = $xmlrpc->geterrors();
+			header( "location: {$tourl}" );
+			exit;
+		}
+		$torrents = $xmlrpc->fetch();
+
+		if ( !in_array( $hash, $torrents ) ) {
+			$_SESSION["rtwi_err"] = "nohashfound";
+			header( "location: {$tourl}" );
+			exit;
+		}
+
+		if ( isset( $_REQUEST["id"] ) ) {
+			$id = $_REQUEST["id"];
+			settype( $id, "int" );
+		} else {
+			$_SESSION["rtwi_err"] = "noidfound";
+			header( "location: {$tourl}" );
+			exit;
+		}
+
+		if ( !$xmlrpc->setrequest( "d.tracker_size", $hash ) || !$xmlrpc->call() || !$xmlrpc->parse() ) {
+			$_SESSION["rtwi_err"] = $xmlrpc->geterrors();
+			header( "location: {$tourl}" );
+			exit;
+		}
+		$response = $xmlrpc->fetch();
+
+		if ( $id < 0 || $id > $response ) {
+			$_SESSION["rtwi_err"] = "badidfound";
+			header( "location: {$tourl}" );
+			exit;
+		}
+
+		if ( isset( $_REQUEST["trackerenabled"] ) ) {
+			$trackerenabled = $_REQUEST["trackerenabled"];
+			settype( $trackerenabled, "int" );
+		} else {
+			$_SESSION["rtwi_err"] = "novaluefound";
+			header( "location: {$tourl}" );
+			exit;
+		}
+
+		if ( !in_array( $trackerenabled, array( 0, 1 ) ) ) {
+			$_SESSION["rtwi_err"] = "badvaluefound";
+			header( "location: {$tourl}" );
+			exit;
+		}
+
+		if ( !$xmlrpc->setrequest( "t.is_enabled.set", array( $hash, $id, $trackerenabled ) ) || !$xmlrpc->call() ) {
+			$_SESSION["rtwi_err"] = $xmlrpc->geterrors();
+			header( "location: {$tourl}" );
+			exit;
+		}
+
+		sleep( 1 );
+
+		$_SESSION["rtwi_err"] = "succtrackerenabledchange";
+		header( "location: {$tourl}" );
+		exit;
+
+		break;
+	}
+	case "changedhtstatus" : { // start/stop dht server
+		if ( !isset( $_REQUEST["dhtstatus"] ) || $_REQUEST["dhtstatus"] == "" ) {
+			$_SESSION["rtwi_err"] = "novaluefound";
+			header( "location: {$config["index"]}?mod=serverinfo" );
+			exit;
+		}
+
+		$dhtstatus = $_REQUEST["dhtstatus"];
+		settype( $dhtstatus, "int" );
+		if ( $dhtstatus != 0 && $dhtstatus != 1 ) {
+			$_SESSION["rtwi_err"] = "badvaluefound";
+			header( "location: {$config["index"]}?mod=serverinfo" );
+			exit;
+		}
+
+		$dhtstatus = $dhtstatus == 1 ? "on" : "off";
+
+		if ( !$xmlrpc->setrequest( "dht.mode.set", array("", $dhtstatus) ) || !$xmlrpc->call() ) {
+			$_SESSION["rtwi_err"] = $xmlrpc->geterrors();
+			header( "location: {$config["index"]}?mod=serverinfo" );
+			exit;
+		}
+
+		$_SESSION["rtwi_err"] = $dhtstatus == "on" ? "succdhtstart" : "succdhtstop";
+
+		sleep( 1 );
+
+		header( "location: {$config["index"]}?mod=serverinfo" );
+		exit;
+
+		break;
+	}
+	default : {
+		$_SESSION["rtwi_err"] = "noinputmod";
+		header( "location: {$_SESSION["rtwi_lastpage"]}" );
+		exit;
+
+		break;
+	}
+}
+
+?>
Index: c/includes/classes/bittorrent_handler.inc.php
===================================================================
--- src/includes/classes/bittorrent_handler.inc.php	(revision 53f5ceaa73f2e26bf68bfb1e991963323da16118)
+++ 	(revision )
@@ -1,190 +1,0 @@
-<?php
-
-class bittorrent_handler {
-	var $bt_data;
-	var $bt_content;
-
-	function __construct( $bt_data, $bt_content ) {
-		$this->bt_data = $bt_data;
-		$this->bt_content = $bt_content;
-	}
-
-	private function encode_string( $content ) {
-		$len = strlen( $content );
-		$ret = "{$len}:{$content}";
-		return $ret;
-	}
-
-	private function encode_integer( $content ) {
-		$ret = "i{$content}e";
-		return $ret;
-	}
-
-	private function encode_list( $content ) {
-		$ret = "l";
-		foreach ( $content as $val ) {
-			$ret .= $this->encode( $val );
-		}
-		$ret .= "e";
-		return $ret;
-	}
-
-	private function encode_dictionary( $content ) {
-		$ret = "d";
-		$keys = array_keys( $content );
-		sort( $keys );
-		foreach ( $keys as $val ) {
-			$value = $content[$val];
-			$ret .= $this->encode_string( $val );
-			$ret .= $this->encode( $value );
-		}
-		$ret .= "e";
-		return $ret;
-	}
-
-	private function encode( $content ) {
-		if ( is_array( $content ) && isset( $content["type"] ) && isset( $content["value"] ) ) {
-			$value = $content["value"];
-			switch ( $content["type"] ) {
-				case "string" : {
-					$ret =  $this->encode_string( $value );
-					break;
-				}
-				case "integer" : {
-					$ret = $this->encode_integer( $value );
-					break;
-				}
-				case "list" : {
-					$ret = $this->encode_list( $value );
-					break;
-				}
-				case "dictionary" : {
-					$ret = $this->encode_dictionary( $value );
-					break;
-				}
-				default : {
-					$ret = "XX";
-					break;
-				}
-			}
-		} else {
-			$ret = "";
-		}
-
-		return $ret;
-	}
-
-	private function decode_list( $data ) {
-		$len = strlen( $data );
-		$i = 1;
-		$value = array();
-		$text = "l";
-		for (;;) {
-			if ( $i >= $len )
-				return;
-			if ( $data[$i] == "e" )
-				break;
-			$ret = $this->decode( substr( $data, $i ) );
-			if ( !isset( $ret ) || !is_array( $ret ) )
-				return;
-			$value[] = $ret;
-			$i += $ret["strlen"];
-			$text .= $ret["string"];
-		}
-		$text .= "e";
-		$ret = array( "type" => "list", "value" => $value, "strlen" => strlen( $text ), "string" => $text );
-
-		return $ret;
-	}
-
-	private function decode_dictionary( $data ) {
-		$len = strlen( $data );
-		$i = 1;
-		$value = array();
-		$text = "d";
-		for ( ; ; ) {
-			if ( $i < $len ) {
-				if ( $data[$i] == "e" ) {
-					break;
-				} else {
-					$ret = $this->decode( substr( $data, $i ) );
-					if ( isset( $ret ) && is_array( $ret ) && $ret["type"] == "string" ) {
-						$subval = $ret["value"];
-						$i += $ret["strlen"];
-						$text .= $ret["string"];
-						if ( $i < $len ) {
-							$ret = $this->decode( substr( $data, $i ) );
-							if ( isset( $ret ) && is_array( $ret ) ) {
-								$value[$subval] = $ret;
-								$i += $ret["strlen"];
-								$text .= $ret["string"];
-							}
-						}
-					}
-				}
-			}
-		}
-		$text .= "e";
-		$ret = array( "type" => "dictionary", "value" => $value, "strlen" => strlen( $text ), "string" => $text );
-
-		return $ret;
-	}
-
-	private function decode( $data ) {
-		switch ( $data[0] ) {
-			case "l" : {
-				$ret = $this->decode_list( $data );
-				break;
-			}
-			case "d" : {
-				$ret = $this->decode_dictionary( $data );
-				break;
-			}
-			default : {
-				if ( preg_match( "/^(\d+):/", $data, $match ) ) {
-					$valuelen = $match[1];
-					$headlen = strlen( $valuelen ) + 1;
-					$value = substr( $data, $headlen, $valuelen );
-					$text = substr( $data, 0, $headlen + $valuelen );
-					if ( strlen( $value ) == $valuelen ) {
-						$ret = array( "type" => "string", "value" => $value, "strlen" => strlen( $text ), "string" => $text );
-					} else {
-						$ret = "";
-					}
-				} elseif ( preg_match( "/^i(\d+)e/", $data, $match ) ) {
-					$value = $match[1];
-					$text = "i{$value}e";
-					if ( $value !== "-0" && ( $value[0] != "0" || strlen( $value ) == 1 ) ) {
-						$ret = array( "type" => "integer", "value" => $value, "strlen" => strlen( $text ), "string" => $text );
-					} else {
-						$ret = "";
-					}
-				} else {
-					$ret = "";
-				}
-				break;
-			}
-		}
-
-		return $ret;
-	}
-
-	function decode_data() {
-		$this->bt_content = $this->decode( $this->bt_data );
-	}
-
-	function encode_content() {
-		$this->bt_data = $this->encode( $this->bt_content );
-	}
-
-	function fetch_data() {
-		return $this->bt_data;
-	}
-
-	function fetch_content() {
-		return $this->bt_content;
-	}
-
-}
-
-?>
Index: c/includes/classes/xmlrpc_handler.inc.php
===================================================================
--- src/includes/classes/xmlrpc_handler.inc.php	(revision 53f5ceaa73f2e26bf68bfb1e991963323da16118)
+++ 	(revision )
@@ -1,512 +1,0 @@
-<?php
-
-class xmlrpc_handler {
-	var $conntype = "";
-	var $host =	"";
-	var $port =	0;
-	var $timeout =	10;
-	var $request =	null;
-	var $response =	null;
-	var $calls =	0;
-	var $mcalls =	0;
-	var $times =	0;
-	var $mtimes =	0;
-	var $user = 	null;
-	var $password =	null;
-	var $errors =	array();
-
-	function __construct( $address, $timeout ) {
-		$this->conntype = "";
-		$this->host = "";
-		$this->port = 0;
-		if ( preg_match( "|^unix://(.+)$|", $address, $match ) ) {
-			if ( empty( $match[1] ) ) {
-				$this->errors[] = "xmlrpc_socket_empty";
-			} elseif ( !file_exists( $match[1] ) ) {
-				$this->errors[] = "xmlrpc_socket_noexist";
-			} elseif ( ( $perms = @fileperms( $match[1] ) ) === false ) {
-				$this->errors[] = "xmlrpc_socket_noperms";
-			} elseif ( ( $perms & 0xC000 ) !== 0xC000 ) {
-				$this->errors[] = "xmlrpc_socket_nosocket";
-			} elseif ( !is_writable( $match[1] ) ) {
-				$this->errors[] = "xmlrpc_socket_nowrite";
-			} elseif ( !is_readable( $match[1] ) ) {
-				$this->errors[] = "xmlrpc_socket_noread";
-			} else {
-				$this->conntype = "socket";
-				$this->host = $match[0];
-			}
-		} elseif ( preg_match( "<^(http|https)://(.*)$>", $address, $match ) ) {
-			if ( empty( $match[2] ) ) {
-				$this->errors[] = "xmlrpc_url_empty";
-			} else {
-				$this->conntype = "http";
-				$this->host = $match[0];
-			}
-		} elseif ( preg_match( "|^:(\d{1,5})$|", $address, $match ) ) {
-			$this->conntype = "localport";
-			$this->port = $match[1];
-			settype( $this->port, "int" );
-			if ( $this->port < 1 || $this->port > 65535 ) {
-				$this->errors[] = "xmlrpc_localport_outofrange";
-			} else {
-				$this->host = "127.0.0.1";
-			}
-		} elseif ( preg_match( "|^(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3}):(\d{1,5})$|", $address, $match ) ) {
-			$this->conntype = "port";
-			$this->host = "{$match[1]}.{$match[2]}.{$match[3]}.{$match[4]}";
-			$this->port = $match[5];
-			settype( $this->port, "int" );
-			if ( ip2long( $this->host ) === false ) {
-				$this->errors[] = "xmlrpc_port_invalidip";
-			} elseif ( $this->host != long2ip( ip2long( $this->host ) ) ) {
-				$this->errors[] = "xmlrpc_port_invalidipplus";
-			}
-			if ( $this->port < 1 || $this->port > 65535 ) {
-				$this->errors[] = "xmlrpc_port_outofrange";
-			}
-		} else {
-			$this->errors[] = "xmlrpc_nodestination";
-		}
-
-		$this->timeout	= $timeout;
-	}
-
-	function set_type( &$value, $xmlrpc_type ) {
-		switch ( $xmlrpc_type ) {
-			case "base64" : {
-				$value = (object)$value;
-				$value->xmlrpc_type = $xmlrpc_type;
-				break;
-			}
-			case "datetime" : {
-				$value = (object)$value;
-				$value->xmlrpc_type = $xmlrpc_type;
-				$value->timestamp = strtotime( $value->scalar );
-				$value->timestamp = $value->timestamp === false ? -1 : $value->timestamp;
-				break;
-			}
-		}
-	}
-
-	private function decode_rec( $inode ) {
-		$ntype = $inode->nodeName;
-		$nvalue = $inode->nodeValue;
-		switch ( $ntype ) {
-			case "string" : {
-				$response = $nvalue;
-				break;
-			}
-			case "i4" :
-			case "int" : {
-				$response = (int)$nvalue;
-				break;
-			}
-			case "struct" : {
-				$mnode = $inode->firstChild;
-				while ( $mnode != NULL ) {
-					if ( ( $mnode->firstChild->nodeValue == "faultCode" ) && ( $mnode->nextSibling->firstChild->nodeValue == "faultString" ) ) {
-						$this->errors[] = "{$mnode->nextSibling->lastChild->nodeValue} ({$mnode->lastChild->nodeValue})";
-						$this->errors[] = "xmlrpc_fault";
-						return false;
-					}
-					$nname = $mnode->firstChild->nodeValue;
-					$dec = $this->decode_rec( $mnode->lastChild->firstChild );
-					if ( $dec === false ) {
-						return false;
-					}
-					$response[$nname] = $dec;
-					$mnode = $mnode->nextSibling;
-				}
-				break;
-			}
-			case "array" : {
-				$vnode = $inode->firstChild->firstChild;
-				while ( $vnode != NULL ) {
-					$dec = $this->decode_rec( $vnode->firstChild );
-					$response[] = $dec;
-					if ( $dec === false ) {
-						return false;
-					}
-					$vnode = $vnode->nextSibling;
-				}
-				break;
-			}
-		}
-
-		return ( isset( $response ) ? $response : "" );
-	}
-
-	private function decode( $str ) {
-		$str = preg_replace( "%<(/{0,1})(i8|ex\.i8)>%", "<\\1string>", $str );
-		$str = preg_replace( "/>\s*?</s", "><", $str );
-		$xml = new DOMDocument( "1.0", "utf-8" );
-		$xml->formatOutput = true;
-		if ( !@$xml->loadXML( $str ) ) {
-			$this->errors[] = "xmlrpc_xml_noload";
-			return false;
-		}
-
-		$root = $xml->firstChild;
-		$root->nodeName;
-
-		if ( $root->firstChild->nodeName == "fault" ) {
-			$response["faultCode"] = (int)$root->firstChild->firstChild->firstChild->firstChild->lastChild->firstChild->nodeValue;
-			$response["faultString"] = $root->firstChild->firstChild->firstChild->lastChild->lastChild->firstChild->nodeValue;
-			$this->errors[] = "{$response["faultString"]} ({$response["faultCode"]})";
-			$this->errors[] = "xmlrpc_fault";
-			return false;
-		} else {
-			$vnode = $root->firstChild->firstChild->firstChild;
-			$inode = $vnode->firstChild;
-			$ntype = $inode->nodeName;
-			$nvalue = $inode->nodeValue;
-			switch ( $ntype ) {
-				case "string" : {
-					$response = $nvalue;
-					break;
-				}
-				case "i4" :
-				case "int" : {
-					$response = (int)$nvalue;
-					break;
-				}
-				case "struct" : {
-					$mnode = $inode->firstChild;
-					while ( $mnode != NULL ) {
-						$nname = $mnode->firstChild->nodeValue;
-						$dec = $this->decode_rec( $mnode->lastChild->firstChild );
-						if ( $dec === false ) {
-							return false;
-						}
-						$response[$nname] = $dec;
-						$mnode = $mnode->nextSibling;
-					}
-				}
-				case "array" : {
-					$vnode = $inode->firstChild->firstChild;
-					while ( $vnode != NULL ) {
-						$dec = $this->decode_rec( $vnode->firstChild );
-						if ( $dec === false ) {
-							return false;
-						}
-						$response[] = $dec;
-						$vnode = $vnode->nextSibling;
-					}
-				}
-			}
-		}
-
-		return ( isset( $response ) ? $response : array() );
-	}
-
-	private function encode_request_rec( $method, $param, &$xml, $pnode ) {
-		$vnode = $pnode->appendChild( $xml->createElement( "value" ) );
-		switch ( gettype( $param ) ) {
-			case "integer" : {
-				$inode = $vnode->appendChild( $xml->createElement( "int", $param ) );
-				break;
-			}
-			case "double" : {
-				$inode = $vnode->appendChild( $xml->createElement( "double", $param ) );
-				break;
-			}
-			case "string" : {
-				$inode = $vnode->appendChild( $xml->createElement( "string", $param ) );
-				break;
-			}
-			case "array" : {
-				$assoc = false;
-				foreach ( array_keys( $param ) as $key => $val ) {
-					if ( !preg_match( "/^[0-9]*$/", $val ) ) {
-						$assoc = true;
-					}
-				}
-				if ( $assoc ) {
-					$anode = $vnode->appendChild( $xml->createElement( "struct" ) );
-					foreach ( $param as $key => $val ) {
-						$mnode = $anode->appendChild( $xml->createElement( "member" ) );
-						$nnode = $mnode->appendChild( $xml->createElement( "name", $key ) );
-						if ( $this->encode_request_rec( $method, $val, $xml, $mnode ) === false ) {
-							return false;
-						}
-					}
-				} else {
-					$anode = $vnode->appendChild( $xml->createElement( "array" ) );
-					$dnode = $anode->appendChild( $xml->createElement( "data" ) );
-					foreach ( $param as $key => $val ) {
-						if ( $this->encode_request_rec( $method, $val, $xml, $dnode ) === false ) {
-							return false;
-						}
-					}
-				}
-				break;
-			}
-			case "object" : {
-				switch ( $param->xmlrpc_type ) {
-					case "base64" : {
-						$inode = $vnode->appendChild( $xml->createElement( "base64", base64_encode( $param->scalar ) ) );
-						break;
-					}
-					case "datetime" : {
-						$inode = $vnode->appendChild( $xml->createElement( "datetime", $param->timestamp ) );
-						break;
-					}
-				}
-				break;
-			}
-			default : {
-				$this->errors[] = gettype( $param );
-				$this->errors[] = "xmlrpc_request_invalidtype";
-				return false;
-				break;
-			}
-		}
-	}
-
-	private function encode_request( $method, $params ) {
-		$xml = new DOMDocument( "1.0", "utf-8" );
-		$xml->formatOutput = true;
-
-		$root = $xml->appendChild( $xml->createElement( "methodCall" ) );
-		$mnode = $root->appendChild( $xml->createElement( "methodName", $method ) );
-		
-		$psnode = $root->appendChild( $xml->createElement( "params" ) );
-		if ( is_array( $params ) ) {
-			$assoc = false;
-			foreach ( array_keys( $params ) as $key => $val ) {
-				if ( !preg_match( "/^[0-9]*$/", $val ) ) {
-					$assoc = true;
-				}
-			}
-			if ( $assoc ) {
-				$pnode = $psnode->appendChild( $xml->createElement( "param" ) );
-				$vnode = $pnode->appendChild( $xml->createElement( "value" ) );
-				$anode = $vnode->appendChild( $xml->createElement( "struct" ) );
-				foreach ( $params as $key => $val ) {
-					$mnode = $anode->appendChild( $xml->createElement( "member" ) );
-					$nnode = $mnode->appendChild( $xml->createElement( "name", $key ) );
-					if ( $this->encode_request_rec( $method, $val, $xml, $mnode ) === false ) {
-						return false;
-					}
-				}
-			} else {
-				foreach ( $params as $key => $val ) {
-					$pnode = $psnode->appendChild( $xml->createElement( "param" ) );
-					if ( $this->encode_request_rec( $method, $val, $xml, $pnode ) === false ) {
-						return false;
-					}
-				}
-			}
-		} else {
-			$pnode = $psnode->appendChild( $xml->createElement( "param" ) );
-			if ( $this->encode_request_rec( $method, $params, $xml, $pnode ) === false ) {
-				return false;
-			}
-		}
-
-		return $xml->saveXML();
-	}
-
-	function getconntype() {
-		return $this->conntype;
-	}
-
-	function setaccount( $user, $password ) {
-		$this->user = $user;
-		$this->password = $password;
-	}
-
-	function setmrequest( $methods, $params = array() ) {
-		$this->request = array();
-		foreach ( $methods as $methodkey => $methodval ) {
-			$this->request[] = array( "methodName" => $methodval, "params" => $params );
-		}
-		$this->request = $this->encode_request( "system.multicall", array( $this->request ) );
-		if ( $this->request === false ) {
-			return false;
-		} else {
-			return true;
-		}
-	}
-
-	function setumrequest( $methods, $params ) {
-		$this->request = array();
-		$num = count( $methods );
-		for ( $i = 0; $i < $num; $i++ ) {
-			$this->request[] = array( "methodName" => $methods[$i], "params" => $params[$i] );
-		}
-		$this->request = $this->encode_request( "system.multicall", array( $this->request ) );
-		if ( $this->request === false ) {
-			return false;
-		} else {
-			return true;
-		}
-	}
-
-	function setrequest( $method, $attributes ) {
-		$this->request = $this->encode_request( $method, $attributes );
-		if ( $this->request === false ) {
-			return false;
-		} else {
-			return true;
-		}
-	}
-
-	function scgi_call() {
-		$st = getmicrotime();
-
-		$len = strlen( $this->request );
-		$headers = "CONTENT_LENGTH\0{$len}\0";
-		$headers .= "SCGI\01\0";
-		$len = strlen( $headers );
-		$out = "{$len}:{$headers},{$this->request}";
-
-		$fp = @fsockopen( $this->host, $this->port, $errno, $errstr, $this->timeout );
-		if ( $fp === false ) {
-			$this->errors[] = "{$error} ({$errno})";
-			$this->errors[] = "xmlrpc_scgi_connectfailed";
-			$tt = getmicrotime();
-			$this->calls++;
-			$this->times = $this->times + $tt - $st;
-
-			return false;
-		} else {
-			fwrite( $fp, $out );
-			do {
-				$line = fgets( $fp );
-			} while ( trim( $line ) != "" );
-
-			$this->response = stream_get_contents( $fp );
-			if ( $this->response === false ) {
-				$this->errors[] = "xmlrpc_scgi_readfailed";
-				$tt = getmicrotime();
-				$this->calls++;
-				$this->times = $this->times + $tt - $st;
-
-				return false;
-			} elseif ( $this->response === "" ) {
-				$this->errors[] = "xmlrpc_scgi_emptystring";
-				$tt = getmicrotime();
-				$this->calls++;
-				$this->times = $this->times + $tt - $st;
-
-				return false;
-			} else {
-				$tt = getmicrotime();
-				$this->calls++;
-				$this->times = $this->times + $tt - $st;
-
-				return true;
-			}
-		}
-	}
-
-	function gw_call() {
-		$st = getmicrotime();
-
-		$len = strlen( $this->request );
-		$headers = "CONTENT_LENGTH\0{$len}\0";
-		$headers .= "SCGI\01\0";
-		$len = strlen( $headers );
-		$out = "{$len}:{$headers},{$this->request}";
-
-		$ch = curl_init( $this->host );
-		//curl_setopt( $ch, CURLOPT_HEADER, true );
-		curl_setopt( $ch, CURLOPT_RETURNTRANSFER, true );
-		curl_setopt( $ch, CURLOPT_POST, true );
-		curl_setopt( $ch, CURLOPT_POSTFIELDS, $this->request );
-		curl_setopt( $ch, CURLOPT_USERPWD, "{$this->user}:{$this->password}" );
-		curl_setopt( $ch, CURLOPT_SSL_VERIFYPEER, false );
-		$this->response = curl_exec( $ch ); 
-		if ( $this->response === false ) {
-			$error = curl_error( $ch );
-			$errno = curl_errno( $ch );
-			$this->errors[] = "{$error} ({$errno})";
-			$this->errors[] = "xmlrpc_gw_connectfailed";
-			return false;
-		} elseif ( $this->response === "" ) {
-			$error = curl_error( $ch );
-			$errno = curl_errno( $ch );
-			$this->errors[] = "{$error} ({$errno})";
-			$this->errors[] = "xmlrpc_gw_empttstring";
-			return false;
-		}
-		$tt = getmicrotime();
-		$this->calls++;
-		$this->times = $this->times + $tt - $st;
-
-		return true;
-	}
-
-	function call(){
-		switch ( $this->conntype ) {
-			case "" : {
-				return false;
-
-				break;
-			}
-			case "http" :
-			case "https" : {
-				return $this->gw_call();
-
-				break;
-			}
-			case "port" :
-			case "localport" :
-			case "socket" : {
-				return $this->scgi_call();
-
-				break;
-			}
-			default : {
-				return false;
-
-				break;
-			}
-		}
-	}
-
-	function parse() {
-		$this->response = $this->decode( $this->response );
-		if ( $this->response !== false ) {
-			return true;
-		} else {
-			return false;
-		}
-	}
-
-	function mfetch( $methods ) {
-		$r = -1;
-		$responses = array();
-		foreach ( $methods as $methodkey => $methodval ) {
-			$r++;
-			$responses[$methodval] = $this->response[$r][0];
-		}
-
-		return $responses;
-	}
-
-	function fetch() {
-		return $this->response;
-	}
-
-	function clearerrors() {
-		$this->errors = array();
-	}
-
-	function geterrorsnum() {
-		return count( $this->errors );
-	}
-
-	function geterrors() {
-		return $this->errors;
-	}
-
-	function getlasterror() {
-		return array_pop( $this->errors );
-	}
-
-}
-
-?>
Index: c/includes/classes/xsl_handler.inc.php
===================================================================
--- src/includes/classes/xsl_handler.inc.php	(revision 53f5ceaa73f2e26bf68bfb1e991963323da16118)
+++ 	(revision )
@@ -1,43 +1,0 @@
-<?php
-
-class page_handler {
-	var $content;
-	var $page_data;
-	var $main_file;
-	var $theme;
-	var $xml_data;
-
-	function __construct( $theme, $main_file, $page_data ) {
-		$this->page_data = $page_data;
-		$this->main_file = $main_file;
-		$this->theme = $theme;
-	}
-
-	function parse() {
-		$xsl = new DOMDocument;
-		$xsl->load( "themes/{$this->theme}/{$this->main_file}" );
-
-		$this->content = new XSLTprocessor();
-		$this->content->importStyleSheet( $xsl );
-
-		$this->xml_data = $this->content->transformToXML( $this->page_data );
-	}
-
-	function parse_c() {
-		$this->xml_data = $this->page_data->saveXML();
-	}
-
-	function fetch() {
-		$this->xml_data = preg_replace( "/\<\?xml( version=\"[\d\.]+\")*( encoding=\".*\")*\?\>[\\r\\n]*/", "", $this->xml_data );
-		$this->xml_data = preg_replace( "/\<\!\[CDATA\[(.*?)\]\]\>/", "\r\n\\1", $this->xml_data );
-		return $this->xml_data;
-	}
-
-	function fetch_c() {
-		$this->xml_data = preg_replace( "/\<\?xml( version=\"[\d\.]+\")*( encoding=\".*\")*\?\>[\\r\\n]*/", "\\0<?xml-stylesheet type=\"text/xsl\" href=\"themes/{$this->theme}/{$this->main_file}\"?>\r\n", $this->xml_data );
-		return $this->xml_data;
-	}
-
-}
-
-?>
Index: c/includes/messages.cht.inc.php
===================================================================
--- src/includes/messages.cht.inc.php	(revision 53f5ceaa73f2e26bf68bfb1e991963323da16118)
+++ 	(revision )
@@ -1,415 +1,0 @@
-<?php
-
-$message = array(
-	"badlogin"				=> "使用者名稱或密碼錯誤",
-	"succlogin"				=> "登入成功",
-	"succlogout"				=> "登出成功",
-
-	"noconn"				=> "沒有連線",
-
-	"nohashfound"				=> "No torrents found for this hash",
-	"noidfound"				=> "No id was given",
-	"nodirfound"				=> "No directory was given",
-	"noinputmod"				=> "No mod was specified",
-	"nooponalltorrent"			=> "No task was given",
-
-	"badidfound"				=> "Invalid id was given",
-	"baddirfound"				=> "Invalid directory was given",
-
-	"notanurl"				=> "Not valid URL was given",
-	"rtfileinisize"				=> "The uploaded file exceeds the upload_max_filesize directive in php.ini",
-	"rtfileformsize"			=> "The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form",
-	"rtfilepartial"				=> "The uploaded file was only partially uploaded",
-	"rtfilenofile"				=> "No file was uploaded",
-	"rtfilenotmpdir"			=> "Missing a temporary folder",
-	"rtfilenowrite"				=> "Failed to write file to disk",
-	"rtfileother"				=> "上傳錯誤",
-	"rtfileattack"				=> "Possible file upload attack!",
-
-	"badthrottlevals"			=> "Invalid values for throttle",
-	"succthrottlechange"			=> "速度限制已更改",
-
-	"badrtdirectory"			=> "rTorrent download directry is not set correctly",
-	"badatpath"				=> "Invalid path was given",
-
-	"novaluefound"				=> "No value was given",
-	"badvaluefound"				=> "Bad value was given",
-
-	"nopriorityfound"			=> "No priority was given",
-	"badpriorityfound"			=> "Bad priority was given",
-
-	"noviewtype"				=> "No view was given",
-	"badviewtype"				=> "Bad view was given",
-	"norefreshrate"				=> "No refresh rate was given",
-	"badrefreshrate"			=> "Bad refresh rate was given",
-	"nolanguage"				=> "No language was given",
-	"badlanguage"				=> "Bad language was given (no translation is available for this language)",
-
-	"succtorrentload"			=> "Torrent 已載入",
-	"succtorrentstart"			=> "Torrent 已開始",
-	"succtorrentsstart"			=> "Torrents 已開始",
-	"succtorrentopen"			=> "Torrent 已開啟",
-	"succtorrentsopen"			=> "Torrents 已開啟",
-	"succtorrentstop"			=> "Torrent 已停止",
-	"succtorrentsstop"			=> "Torrents 已停止",
-	"succtorrentclose"			=> "Torrent 已關閉",
-	"succtorrentsclose"			=> "Torrents 已關閉",
-	"succtorrentcheckhash"			=> "Torrent hash check started",
-	"succtorrentscheckhash"			=> "Torrents hash check started",
-	"succtorrentremove"			=> "Torrent 已移除",
-	"succtorrentsremove"			=> "Torrents 已移除",
-	"succtorrenterase"			=> "Torrent erased",
-	"warntorrenterase"			=> "Torrent erased, but not all the files were removed",
-	"succtorrentserase"			=> "Torrents erased",
-	"succprioritychange"			=> "Torrent 優先權已更改",
-	"succfileprioritychange"		=> "檔案優先權已更改",
-	"succdirprioritychange"			=> "目錄優先權已更改",
-	"succtrackerenabledchange"		=> "Tracker availablity changed",
-	"succviewchange"			=> "瀏覽類型已更改",
-	"succrefreshchange"			=> "更新頻率已更改",
-	"succlanguagechange"			=> "語言已更改",
-	"succdhtstart"				=> "DHT 伺服器已啟動",
-	"succdhtstop"				=> "DHT 伺服器已停止",
-
-	"downloadnotallowed"			=> "You are not allowed to download torrents from the webui",
-	"erasenotallowed"			=> "You are not allowed to erase downloaded data from the webui",
-	"languagenotallowed"			=> "You are not allowed to set the language of the page",
-	"refreshnotallowed"			=> "You are not allowed to set a meta-refresh interval",
-	"throttlenotallowed"			=> "You are not allowed to set throttle",
-
-	"no"					=> "否",
-	"yes"					=> "是",
-	"disabled"				=> "Disabled",
-	"enabled"				=> "Enabled",
-	"notset"				=> "Not set",
-
-	"d_connection_current_leech"		=> "Leeching",
-	"d_connection_current_seed"		=> "做種中",
-	"d_connection_current_initial_seed"	=> "Initial seeding",
-	"d_ignore_commands_0"			=> "Not ignoring commands",
-	"d_ignore_commands_1"			=> "Ignoring commands",
-	"d_active_0"				=> "已停止",
-	"d_active_1"				=> "已開始",
-	"d_hash_checked_0"			=> "Hash not checked",
-	"d_hash_checked_1"			=> "Hash checked",
-	"d_multi_file_multi"			=> "Multi",
-	"d_multi_file_single"			=> "Single",
-	"d_open_0"				=> "已關閉",
-	"d_open_1"				=> "開啟",
-	"d_complete_0"				=> "未完成",
-	"d_complete_1"				=> "已完成",
-	"d_hash_checking_0"			=> "Not hashing",
-	"d_hash_checking_1"			=> "Hashing",
-	"d_hashing_0"				=> "Not hashing",
-	"d_hashing_1"				=> "Normal hashing",
-	"d_hashing_2"				=> "Download finished, hashing",
-	"d_hashing_3"				=> "Re-hashing",
-	"d_priority_0"				=> "關",
-	"d_priority_1"				=> "低",
-	"d_priority_2"				=> "中",
-	"d_priority_3"				=> "高",
-	"d_state_0"				=> "已停止",
-	"d_state_1"				=> "已開始",
-	"f_open_0"				=> "已關閉",
-	"f_open_1"				=> "開啟",
-	"f_priority_0"				=> "關閉",
-	"f_priority_1"				=> "中",
-	"f_priority_2"				=> "高",
-	"p_encrypted_0"				=> "Plain",
-	"p_encrypted_1"				=> "Encrypted",
-	"p_incoming_0"				=> "Outgoing",
-	"p_incoming_1"				=> "Incoming",
-	"t_enabled_0"				=> "Disabled",
-	"t_enabled_1"				=> "Enabled",
-	"t_open_0"				=> "已關閉",
-	"t_open_1"				=> "開啟",
-	"t_type_1"				=> "TCP",
-	"t_type_2"				=> "UDP",
-	"dht_0"					=> "已停止",
-	"dht_1"					=> "已開始",
-
-	"bind_0000"				=> "All IP addresses",
-	"ip_0000"				=> "Not set",
-	"proxy_address_0000"			=> "Not set",
-
-	"xmlrpc_socket_empty"			=> "Malformed unix socket path",
-	"xmlrpc_socket_noexist"			=> "The socket does not exist",
-	"xmlrpc_socket_noperms"			=> "Cannot read permissions for the socket",
-	"xmlrpc_socket_nosocket"		=> "The socket seems not to be a unix socket",
-	"xmlrpc_socket_nowrite"			=> "Cannot write socket",
-	"xmlrpc_socket_noread"			=> "Cannot read socket",
-	"xmlrpc_url_empty"			=> "The URL is empty",
-	"xmlrpc_localport_outofrange"		=> "Port is out of range",
-	"xmlrpc_port_invalidip"			=> "Invalid IP address",
-	"xmlrpc_port_invalidipplus"		=> "Invalid IP address (this message should never appear - if it does, open a ticker in the rTWi trac, and attach your users.conf)",
-	"xmlrpc_port_outofrange"		=> "Port is out of range",
-	"xmlrpc_nodestination"			=> "Nowhere to connect (malformed address)",
-	"xmlrpc_scgi_connectfailed"		=> "Connecting to rTorrent has failed",
-	"xmlrpc_scgi_readfailed"		=> "Receiving answer from rTorrent has failed",
-	"xmlrpc_scgi_emptystring"		=> "rTorrent has returnde nothing (SCGI)",
-	"xmlrpc_gw_connectfailed"		=> "Connecting to rTorrent (using SCGI gateway) has failed",
-	"xmlrpc_gw_emptystring"			=> "rTorrent has returnde nothing (GW)",
-	"xmlrpc_xml_noload"			=> "Malformed XML (propably a HTTP error, or redirect)",
-	"xmlrpc_request_invalidtype"		=> "Invalid parameter type",
-	"xmlrpc_fault"				=> "rTorrent returned an XMLRPC error",
-
-	"unknown"				=> "Unknown",
-);
-
-$viewtypes = array(
-	"viewtype_main"				=> "主要",
-	"viewtype_default"			=> "預設",
-	"viewtype_name"				=> "名稱",
-	"viewtype_active"			=> "Active",
-	"viewtype_started"			=> "已開始",
-	"viewtype_stopped"			=> "已停止",
-	"viewtype_complete"			=> "已完成",
-	"viewtype_incomplete"			=> "未完成",
-	"viewtype_hashing"			=> "Hashing",
-	"viewtype_seeding"			=> "做種中",
-	"viewtype_scheduler"			=> "Scheduler",
-);
-
-$refreshrates = array(
-	"refreshrate_0"				=> "關閉",
-	"refreshrate_5"				=> "5 seconds",
-	"refreshrate_60"			=> "1 分鐘",
-	"refreshrate_180"			=> "3 分鐘",
-	"refreshrate_420"			=> "7 分鐘",
-	"refreshrate_900"			=> "15 分鐘",
-	"refreshrate_1500"			=> "25 分鐘",
-);
-
-$languages = array(
-	"en"					=> "English",
-	"de"					=> "German",
-	"hu"					=> "Hungarian",
-	"cht"					=> "Traditional Chinese",
-	"fr"					=> "French",
-);
-
-$label = array(
-	// html head
-	"title"					=> "rTWi - an rTorrent Web interface",
-	"description"				=> "rTWi - an rTorrent Web interface",
-	"author"				=> "Gabor Hudiczius",
-	"mailto"				=> "ghudiczius@gmail.com?subject=rTWi - an rTorrent Web interface",
-
-	// login
-	"username"				=> "使用者名稱",
-	"password"				=> "密碼",
-	"rememberme"				=> "記住我",
-	"login"					=> "登入",
-
-	// menu
-	"torrents"				=> "Torrents",
-	"peerlist"				=> "Peer 清單",
-	"info"					=> "資訊",
-	"filelist"				=> "檔案清單",
-	"trackerlist"				=> "Tracker 清單",
-	"chunksseen"				=> "Chunks seen",
-	"transferlist"				=> "Transfer list",
-	"addtorrent"				=> "新增 Torrent",
-	"serverinfo"				=> "伺服器資訊",
-	"logout"				=> "登出",
-
-	// misc
-	"ok"					=> "確定",
-	"yes"					=> "是",
-	"no"					=> "否",
-	
-	"clicktohide"				=> "按一下來隱藏",
-	"clicktoopen"				=> "按一下來開啟",
-	"clicktocloseopen"			=> "按一下來 關閉 / 開啟",
-	"clicktochange"				=> "按一下來更改",
-
-	"view"					=> "瀏覽",
-	"selectviewtype"			=> "選擇瀏覽類型",
-	"refresh"				=> "更新",
-	"selectrefreshrate"			=> "選擇更新速度",
-	"language"				=> "語言",
-	"selectlanguage"			=> "選擇語言",
-
-	"areyousure"				=> "你確定嗎?",
-	"areyousureerase"			=> "Are you sure, you want to delete",
-	"alldatawillbedestroyed"		=> "All data will be destroyed.",
-
-	"homepage"				=> "rTWi project homepage",
-
-	"highest"				=> "最高",
-
-	// add torrent
-	"openfrom"				=> "開啟來源",
-	"fileupload"				=> "檔案上傳",
-	"url"					=> "網址",
-	"torrentfile"				=> "Torrent 檔案",
-	"torrenturl"				=> "Torrent 網址",
-	"starttorrent"				=> "開始下載",
-	"starttorrentafteradded"		=> "新增後開始下載",
-	"downloadto"				=> "下載至",
-
-	// tasks on torrents
-	"selecttask"				=> "選擇動作",
-	"selectone"				=> "Select one",
-
-	"startall"				=> "全部開始",
-	"stopall"				=> "全部停止",
-	"openall"				=> "全部開啟",
-	"closeall"				=> "全部關閉",
-	"checkall"				=> "全部檢查",
-	"removeall"				=> "全部移除",
-	"eraseall"				=> "Erase all",
-
-	"start"					=> "開始",
-	"stop"					=> "停止",
-	"open"					=> "開啟",
-	"close"					=> "關閉",
-	"checkhash"				=> "檢查hash",
-	"remove"				=> "移除",
-	"erase"					=> "Erase",
-
-	"selectpriority"			=> "設定優先權",
-	"selectdirpriority"			=> "設定目錄優先權",
-	"selectfilepriority"			=> "設定檔案優先權",
-
-	// torrent states
-	"started"				=> "已開始",
-	"stopped"				=> "已停止",
-	"opened"				=> "已開啟",
-	"closed"				=> "已關閉",
-	"finished"				=> "已完成",
-	"checkhashed"				=> "Hash checked",
-
-	"startedsince"				=> "Started since",
-	"stopedsince"				=> "Stoped since",
-	"openedsince"				=> "Opened since",
-	"closedsince"				=> "Closed since",
-	"finishedsince"				=> "Finished since",
-	"hashingsince"				=> "Hashing since",
-
-	"sincepre"				=> "since",
-	"sincepost"				=> "",
-
-	// torrent stats
-	"details"				=> "細節",
-
-	"done"					=> "完成",
-	"downloadfinished"			=> "下載已完成",
-	"downloadeddata"			=> "已下載資料",
-	"torrentsize"				=> "大小",
-	"uploaded"				=> "已上傳",
-	"uploadeddata"				=> "已上傳資料",
-
-	"percenthashed"				=> "% hashed",
-	"percentcompleted"			=> "% 已完成",
-	"estimatedtimeremaining"		=> "估計剩餘時間",
-	"ignorecommands"			=> "Ignore commands",
-	"ratio"					=> "Ratio",
-
-	"off"					=> "關閉",
-	"low"					=> "低",
-	"normal"				=> "中",
-	"high"					=> "高",
-
-	"message"				=> "Message",
-
-	"lasttouched"				=> "Last touched",
-	"filesize"				=> "檔案大小",
-	"downloadfile"				=> "下載檔案",
-	"trackergroup"				=> "Tracker group",
-	"type"					=> "類型",
-	"selecttrackerenabled"			=> "選擇是否啟用 tracker",
-	"mininterval"				=> "Minimum interval",
-
-	// stats
-	"throttle"				=> "速度限制",
-	"uploadspeed"				=> "上傳速度",
-	"uploadlimit"				=> "上傳限制",
-	"nouploadlimit"				=> "無上傳限制",
-	"downloadspeed"				=> "下載速度",
-	"downloadlimit"				=> "下載限制",
-	"nodownloadlimit"			=> "無下載限制",
-	"rate"					=> "速度",
-
-	// info page
-	"name"					=> "名稱",
-	"infohash"				=> "Info hash",
-	"localid"				=> "Local ID",
-	"localidhtml"				=> "Local ID (html)",
-	"directory"				=> "目錄",
-	"tiedtofile"				=> "Tied to file",
-	"filestats"				=> "File stats",
-	"files"					=> "files",
-	"private"				=> "Private",
-	"chunks"				=> "Chunks",
-	"priority"				=> "優先權",
-	"statechanged"				=> "State changed",
-	"freediskspace"				=> "磁碟可用空間",
-	"connectiontype"			=> "連線類型",
-	"trackers"				=> "Trackers",
-	"peersconnected"			=> "Peers connected",
-	"dmaxpeers"				=> "Maximum",
-	"dminpeers"				=> "Minimum",
-	"leechers"				=> "Leechers",
-	"seeders"				=> "Seeders",
-	"pexenabled"				=> "PEX enabled",
-	"pexsize"				=> "PEX size",
-	"upload"				=> "上傳",
-	"download"				=> "下載",
-	"skipped"				=> "Skipped",
-
-	// server info page
-	"clientversion"				=> "客戶端版本",
-	"libraryversion"			=> "程式庫版本",
-	"workingdirectory"			=> "工作目錄",
-	"downloaddirectory"			=> "下載目錄",
-	"sessiondirectory"			=> "快取目錄",
-	"hostname"				=> "Hostname",
-	"pid"					=> "PID",
-	"listeningipaddress"			=> "Listening IP address",
-	"reportedipaddress"			=> "IP address reported to the tracker",
-	"portopened"				=> "Port opened",
-	"randomport"				=> "Random port",
-	"portrange"				=> "Port range",
-	"udptrackers"				=> "Use UDP trackers",
-	"changedhtstatus"			=> "開始 / 停止 DHT伺服器",
-	"dht"					=> "DHT 伺服器",
-	"dhtport"				=> "DHT port",
-	"dhtcycle"				=> "DHT cycle",
-	"dhtqueries"				=> "DHT queries received / sent",
-	"dhtreplies"				=> "DHT replies received",
-	"dhtbytes"				=> "DHT bytes read / written",
-	"dhtnodes"				=> "DHT nodes",
-	"in"					=> "in",
-	"buckets"				=> "buckets",
-	"dhtpeers"				=> "DHT peers",
-	"dhttorrents"				=> "DHT torrents",
-	"maxuploads"				=> "Maximum number of uploads",
-	"maxpeers"				=> "Minimum number of peers",
-	"minpeers"				=> "Maximum number of peers",
-	"memoryusage"				=> "記憶體使用量",
-	"maxmemoryusage"			=> "最大記憶體使用量",
-	"hashcheck"				=> "Hash check",
-	"safesync"				=> "Safe sync",
-	"sendbuffer"				=> "Send buffer",
-	"receivebuffer"				=> "Receive buffer",
-
-	// peer list page
-	"address"				=> "Address",
-	"port"					=> "Port",
-	"up_rate"				=> "Up",
-	"down_rate"				=> "Down",
-	"peer_rate"				=> "Peer",
-	"pdone"					=> "Done",
-	"encrypted"				=> "Encrypted",
-	"incoming"				=> "Connection",
-	"pclientversion"			=> "客戶端版本",
-
-	// tracker list page
-	"focus"					=> "Focus",
-	"enabled"				=> "啟用",
-	"seedersleechers"			=> "S/L",
-	"lasttimescraped"			=> "Last time scraped",
-);
-
-?>
Index: c/includes/messages.de.inc.php
===================================================================
--- src/includes/messages.de.inc.php	(revision 53f5ceaa73f2e26bf68bfb1e991963323da16118)
+++ 	(revision )
@@ -1,415 +1,0 @@
-<?php
-
-$message = array(
-	"badlogin"				=> "Benutzername oder Passwort falsch",
-	"succlogin"				=> "Erfolgreich angemeldet",
-	"succlogout"				=> "Erfolgreich abgemeldet",
-
-	"noconn"				=> "Keine Verbindung",
-
-	"nohashfound"				=> "Für diesen Hash wurden keine Torrents gefunden",
-	"noidfound"				=> "Keine ID festgelegt",
-	"nodirfound"				=> "Kein Verzeichnis festgelegt",
-	"noinputmod"				=> "Kein Mod festgelegt",
-	"nooponalltorrent"			=> "Keinen Task festegelegt",
-
-	"badidfound"				=> "ID ungültig",
-	"baddirfound"				=> "Verzeichnis ungültig",
-
-	"notanurl"				=> "Keine gültige URL",
-	"rtfileinisize"				=> "Das hochgeladene File ist zu gross",
-	"rtfileformsize"			=> "Das hochgeladene File ist zu gross",
-	"rtfilepartial"				=> "Das File wurde nur teilweisse hochgeladen",
-	"rtfilenofile"				=> "Es wurde kein File hochgeladen",
-	"rtfilenotmpdir"			=> "Kein temporärer Ordner vorhanden",
-	"rtfilenowrite"				=> "File konnte nicht gespeichert werden",
-	"rtfileother"				=> "Fehler beim Upload",
-	"rtfileattack"				=> "Möglicher File-Upload Angriff!",
-
-	"badthrottlevals"			=> "Throttle Einstellungen fehlerhaft",
-	"succthrottlechange"			=> "Throttle geändert",
-
-	"badrtdirectory"			=> "Download Verzeichnis nicht richtig eingestellt",
-	"badatpath"				=> "Pfad fehlerhaft",
-
-	"novaluefound"				=> "Kein Wert festgelegt",
-	"badvaluefound"				=> "Fehlerhafter Wert festgelegt",
-
-	"nopriorityfound"			=> "Keine Priorität festgelegt",
-	"badpriorityfound"			=> "Fehlerhafte Priorität festgelegt",
-
-	"noviewtype"				=> "Keine Ansicht festgelegt",
-	"badviewtype"				=> "Fehlerhafte Ansicht festgelegt",
-	"norefreshrate"				=> "Keine Aktualisierungsrate festgelegt",
-	"badrefreshrate"			=> "Fehlerhafte Aktualisierungsrate festgelegt",
-	"nolanguage"				=> "Keine Sprache festgelegt",
-	"badlanguage"				=> "Fehlerhafte Sprache festgelegt (keine Übersetzung für diese Sprache verfügbar)",
-
-	"succtorrentload"			=> "Torrent geladen",
-	"succtorrentstart"			=> "Torrent gestartet",
-	"succtorrentsstart"			=> "Torrents gestartet",
-	"succtorrentopen"			=> "Torrent geöffnet",
-	"succtorrentsopen"			=> "Torrents geöffnet",
-	"succtorrentstop"			=> "Torrent gestoppt",
-	"succtorrentsstop"			=> "Torrents gestoppt",
-	"succtorrentclose"			=> "Torrent geschlossen",
-	"succtorrentsclose"			=> "Torrents geschlossen",
-	"succtorrentcheckhash"			=> "Torrent Hash Überprüfung gestartet",
-	"succtorrentscheckhash"			=> "Torrents Hash Überprüfung gestartet",
-	"succtorrentremove"			=> "Torrent entfernt",
-	"succtorrentsremove"			=> "Torrents entfernt",
-	"succtorrenterase"			=> "Torrent gelöscht",
-	"warntorrenterase"			=> "Torrent gelöscht, aber nicht alle Dateien entfernt",
-	"succtorrentserase"			=> "Torrents gelöscht",
-	"succprioritychange"			=> "Torrent Priorität geändert",
-	"succfileprioritychange"		=> "File Priorität geändert",
-	"succdirprioritychange"			=> "Directory Priorität geändert",
-	"succtrackerenabledchange"		=> "Tracker Verfügbarkeit geändert",
-	"succviewchange"			=> "Anicht geändert",
-	"succrefreshchange"			=> "Aktualisierungsrate geändert",
-	"succlanguagechange"			=> "Sprache geändert",
-	"succdhtstart"				=> "DHT server gestartet",
-	"succdhtstop"				=> "DHT server gestoppt",
-
-	"downloadnotallowed"			=> "Du darfst keine Torrents vom WebUI herunterladen",
-	"erasenotallowed"			=> "Du darfst keine Daten vom WebUI löschen",
-	"languagenotallowed"			=> "Du darfst die Sprache nicht ändern",
-	"refreshnotallowed"			=> "Du darfst die Aktualisierungsrate nicht ändern",
-	"throttlenotallowed"			=> "Du darfst den Throttle nicht ändern",
-
-	"no"					=> "Nein",
-	"yes"					=> "Ja",
-	"disabled"				=> "Deaktiviert",
-	"enabled"				=> "Aktiviert",
-	"notset"				=> "Nicht gesetzt",
-
-	"d_connection_current_leech"		=> "Leeche",
-	"d_connection_current_seed"		=> "Seede",
-	"d_connection_current_initial_seed"	=> "Initial seeding",
-	"d_ignore_commands_0"			=> "Ignoriere Befehle nicht",
-	"d_ignore_commands_1"			=> "Ignoriere Befhele",
-	"d_active_0"				=> "Gestoppt",
-	"d_active_1"				=> "Gestartet",
-	"d_hash_checked_0"			=> "Hash nicht überprüft",
-	"d_hash_checked_1"			=> "Hash überprüft",
-	"d_multi_file_multi"			=> "Multi",
-	"d_multi_file_single"			=> "Single",
-	"d_open_0"				=> "Geschlossen",
-	"d_open_1"				=> "Offen",
-	"d_complete_0"				=> "Unvollständig",
-	"d_complete_1"				=> "Fertig",
-	"d_hash_checking_0"			=> "Hashe nicht",
-	"d_hash_checking_1"			=> "Hashe",
-	"d_hashing_0"				=> "Hashe nicht",
-	"d_hashing_1"				=> "Normales Hashen",
-	"d_hashing_2"				=> "Download fertig, hashe",
-	"d_hashing_3"				=> "Hashe erneut",
-	"d_priority_0"				=> "Aus",
-	"d_priority_1"				=> "Niedrig",
-	"d_priority_2"				=> "Normal",
-	"d_priority_3"				=> "Hoch",
-	"d_state_0"				=> "Gestoppt",
-	"d_state_1"				=> "Gestartet",
-	"f_open_0"				=> "Geschlossen",
-	"f_open_1"				=> "Offen",
-	"f_priority_0"				=> "Aus",
-	"f_priority_1"				=> "Normal",
-	"f_priority_2"				=> "Hoch",
-	"p_encrypted_0"				=> "Unverschlüsselt",
-	"p_encrypted_1"				=> "Verschlüsselt",
-	"p_incoming_0"				=> "Outgoing",
-	"p_incoming_1"				=> "Incoming",
-	"t_enabled_0"				=> "Deaktiviert",
-	"t_enabled_1"				=> "Aktiviert",
-	"t_open_0"				=> "Geschlossen",
-	"t_open_1"				=> "Offen",
-	"t_type_1"				=> "TCP",
-	"t_type_2"				=> "UDP",
-	"dht_0"					=> "Gestoppt",
-	"dht_1"					=> "Gestartet",
-
-	"bind_0000"				=> "Alle IP-Adressen",
-	"ip_0000"				=> "Nicht gesetzt",
-	"proxy_address_0000"			=> "Nicht gesetzt",
-
-	"xmlrpc_socket_empty"			=> "Malformed unix socket path",
-	"xmlrpc_socket_noexist"			=> "The socket does not exist",
-	"xmlrpc_socket_noperms"			=> "Cannot read permissions for the socket",
-	"xmlrpc_socket_nosocket"		=> "The socket seems not to be a unix socket",
-	"xmlrpc_socket_nowrite"			=> "Cannot write socket",
-	"xmlrpc_socket_noread"			=> "Cannot read socket",
-	"xmlrpc_url_empty"			=> "The URL is empty",
-	"xmlrpc_localport_outofrange"		=> "Port is out of range",
-	"xmlrpc_port_invalidip"			=> "Invalid IP address",
-	"xmlrpc_port_invalidipplus"		=> "Invalid IP address (this message should never appear - if it does, open a ticker in the rTWi trac, and attach your users.conf)",
-	"xmlrpc_port_outofrange"		=> "Port is out of range",
-	"xmlrpc_nodestination"			=> "Nowhere to connect (malformed address)",
-	"xmlrpc_scgi_connectfailed"		=> "Connecting to rTorrent has failed",
-	"xmlrpc_scgi_readfailed"		=> "Receiving answer from rTorrent has failed",
-	"xmlrpc_scgi_emptystring"		=> "rTorrent has returnde nothing (SCGI)",
-	"xmlrpc_gw_connectfailed"		=> "Connecting to rTorrent (using SCGI gateway) has failed",
-	"xmlrpc_gw_emptystring"			=> "rTorrent has returnde nothing (GW)",
-	"xmlrpc_xml_noload"			=> "Malformed XML (propably a HTTP error, or redirect)",
-	"xmlrpc_request_invalidtype"		=> "Invalid parameter type",
-	"xmlrpc_fault"				=> "rTorrent returned an XMLRPC error",
-
-	"unknown"				=> "Unbekannt",
-);
-
-$viewtypes = array(
-	"viewtype_main"				=> "Main",
-	"viewtype_default"			=> "Standard",
-	"viewtype_name"				=> "Name",
-	"viewtype_active"			=> "Active",
-	"viewtype_started"			=> "Gestartet",
-	"viewtype_stopped"			=> "Gestoppt",
-	"viewtype_complete"			=> "Fertig",
-	"viewtype_incomplete"			=> "Unvollständig",
-	"viewtype_hashing"			=> "Hashe",
-	"viewtype_seeding"			=> "Seede",
-	"viewtype_scheduler"			=> "Scheduler",
-);
-
-$refreshrates = array(
-	"refreshrate_0"				=> "Aus",
-	"refreshrate_5"				=> "5 seconds",
-	"refreshrate_60"			=> "1 Minute",
-	"refreshrate_180"			=> "3 Minuten",
-	"refreshrate_420"			=> "7 Minuten",
-	"refreshrate_900"			=> "15 Minuten",
-	"refreshrate_1500"			=> "25 Minuten",
-);
-
-$languages = array(
-	"en"					=> "Englisch",
-	"de"					=> "Deutsch",
-	"hu"					=> "Ungarisch",
-	"cht"					=> "Traditional Chinese",
-	"fr"					=> "French",
-);
-
-$label = array(
-	// html head
-	"title"					=> "rTWi - ein rTorrent Web-Interface",
-	"description"				=> "rTWi - ein rTorrent Web-Interface",
-	"author"				=> "Gabor Hudiczius",
-	"mailto"				=> "ghudiczius@gmail.com?subject=rTWi - an rTorrent Web interface",
-
-	// login
-	"username"				=> "Benutzername",
-	"password"				=> "Passwort",
-	"rememberme"				=> "Angemeldet bleiben",
-	"login"					=> "Anmelden",
-
-	// menu
-	"torrents"				=> "Torrents",
-	"peerlist"				=> "Peer Liste",
-	"info"					=> "Info",
-	"filelist"				=> "Datei Liste",
-	"trackerlist"				=> "Tracker Liste",
-	"chunksseen"				=> "Teile gesehen",
-	"transferlist"				=> "Transfer Liste",
-	"addtorrent"				=> "Torrent hinzufügen",
-	"serverinfo"				=> "Server Info",
-	"logout"				=> "Abmelden",
-
-	// misc
-	"ok"					=> "OK",
-	"yes"					=> "Ja",
-	"no"					=> "Nein",
-	
-	"clicktohide"				=> "Verstecken",
-	"clicktoopen"				=> "Öffnen",
-	"clicktocloseopen"			=> "Schliessen/öffnen",
-	"clicktochange"				=> "ändern",
-
-	"view"					=> "Ansicht",
-	"selectviewtype"			=> "Ansichtsart wählen",
-	"refresh"				=> "Aktualisieren",
-	"selectrefreshrate"			=> "Aktualisierungsrate wählen",
-	"language"				=> "Sprache",
-	"selectlanguage"			=> "Sprache wählen",
-
-	"areyousure"				=> "Bist du dir sicher?",
-	"areyousureerase"			=> "Bist du dir sicher?",
-	"alldatawillbedestroyed"		=> "Alle heruntegeladenen Daten werden gelöscht.",
-
-	"homepage"				=> "rTWi Projekt Homepage",
-
-	"highest"				=> "höchstes",
-
-	// add torrent
-	"openfrom"				=> "Öffnen von",
-	"fileupload"				=> "Datei upload",
-	"url"					=> "URL",
-	"torrentfile"				=> "Torrent-Datei",
-	"torrenturl"				=> "Torrent URL",
-	"starttorrent"				=> "Starte torrent",
-	"starttorrentafteradded"		=> "Starte torrent nachdem hinzugefügt",
-	"downloadto"				=> "Download nach",
-
-	// tasks on torrents
-	"selecttask"				=> "Task auswählen",
-	"selectone"				=> "Wähle eins",
-
-	"startall"				=> "Starte alle",
-	"stopall"				=> "Stoppe alle",
-	"openall"				=> "Öffne alle",
-	"closeall"				=> "Schliesse alle",
-	"checkall"				=> "Überprüfe alle",
-	"removeall"				=> "Entferne alle",
-	"eraseall"				=> "Lösche alle",
-
-	"start"					=> "Starten",
-	"stop"					=> "Stoppen",
-	"open"					=> "Öffnen",
-	"close"					=> "Schliessen",
-	"checkhash"				=> "Hash überprüfen",
-	"remove"				=> "Entfernen",
-	"erase"					=> "Löschen",
-
-	"selectpriority"			=> "Priorität auswählen",
-	"selectdirpriority"			=> "Verzeichnis-Priorität auswählen",
-	"selectfilepriority"			=> "Datei-Priorität auswählen",
-
-	// torrent states
-	"started"				=> "Gestartet",
-	"stopped"				=> "Gestoppt",
-	"opened"				=> "Geöffnet",
-	"closed"				=> "Geschlossen",
-	"finished"				=> "Fertig",
-	"checkhashed"				=> "Hash überprüft",
-
-	"startedsince"				=> "Gestartet seit",
-	"stopedsince"				=> "Gestoppt seit",
-	"openedsince"				=> "Geöffnet seit",
-	"closedsince"				=> "Geschlossen seit",
-	"finishedsince"				=> "Fertig seit",
-	"hashingsince"				=> "Hashe seit",
-
-	"sincepre"				=> "seit",
-	"sincepost"				=> "",
-
-	// torrent stats
-	"details"				=> "Details",
-
-	"done"					=> "fertig",
-	"downloadfinished"			=> "Download abgeschlossen",
-	"downloadeddata"			=> "Heruntergeladene Daten",
-	"torrentsize"				=> "Torrent grösse",
-	"uploaded"				=> "Hochgeladen",
-	"uploadeddata"				=> "Hochgeladene Daten",
-
-	"percenthashed"				=> "prozent gehasht",
-	"percentcompleted"			=> "prozent fertig",
-	"estimatedtimeremaining"		=> "Geschätzte Zeit verbleibend",
-	"ignorecommands"			=> "Ignoriere Befehle",
-	"ratio"					=> "Ratio",
-
-	"off"					=> "Aus",
-	"low"					=> "Niedrig",
-	"normal"				=> "Normal",
-	"high"					=> "Hoch",
-
-	"message"				=> "Nachricht",
-
-	"lasttouched"				=> "Zuletzt berührt",
-	"filesize"				=> "Dateigrösse",
-	"downloadfile"				=> "Datei herunterladen",
-	"trackergroup"				=> "Tracker-Gruppe",
-	"type"					=> "Typ",
-	"selecttrackerenabled"			=> "Auswählen wenn Tracker aktiviert",
-	"mininterval"				=> "Minimales Intervall",
-
-	// stats
-	"throttle"				=> "Throttle",
-	"uploadspeed"				=> "Upload-Geschwindigkeit",
-	"uploadlimit"				=> "Upload-Limit",
-	"nouploadlimit"				=> "Kein Upload-Limit",
-	"downloadspeed"				=> "Download-Gechwindigkeit",
-	"downloadlimit"				=> "Download-Limit",
-	"nodownloadlimit"			=> "Kein Download-Limit",
-	"rate"					=> "Rate",
-
-	// info page
-	"name"					=> "Name",
-	"infohash"				=> "Info-Hash",
-	"localid"				=> "Lokale ID",
-	"localidhtml"				=> "Lokale ID (html)",
-	"directory"				=> "Verzeichnis",
-	"tiedtofile"				=> "An Datei gebunden",
-	"filestats"				=> "Datei-Statistiken",
-	"files"					=> "Dateien",
-	"private"				=> "Private",
-	"chunks"				=> "Teile",
-	"priority"				=> "Priorität",
-	"statechanged"				=> "Status geändert",
-	"freediskspace"				=> "Freier Speicherplatz",
-	"connectiontype"			=> "Verbindungsart",
-	"trackers"				=> "Trackers",
-	"peersconnected"			=> "Peers verbunden",
-	"dmaxpeers"				=> "Maximum",
-	"dminpeers"				=> "Minimum",
-	"leechers"				=> "Leechers",
-	"seeders"				=> "Seeders",
-	"pexenabled"				=> "PEX aktiviert",
-	"pexsize"				=> "PEX Grösse",
-	"upload"				=> "Upload",
-	"download"				=> "Download",
-	"skipped"				=> "Übersprungen",
-
-	// server info page
-	"clientversion"				=> "Client Version",
-	"libraryversion"			=> "Library Version",
-	"workingdirectory"			=> "Arbeitsverzeichnis",
-	"downloaddirectory"			=> "Download Verzeichnis",
-	"sessiondirectory"			=> "Session Verzeichnis",
-	"hostname"				=> "Hostname",
-	"pid"					=> "PID",
-	"listeningipaddress"			=> "Listening IP-Adresse",
-	"reportedipaddress"			=> "IP-Adresse am Tracker",
-	"portopened"				=> "Port geöffnet",
-	"randomport"				=> "Zufälliger Port",
-	"portrange"				=> "Port-Range",
-	"udptrackers"				=> "Verwende UDP-Tracker",
-	"changedhtstatus"			=> "Starte/Stoppe DHT-Server",
-	"dht"					=> "DHT-Server",
-	"dhtport"				=> "DHT-Port",
-	"dhtcycle"				=> "DHT-Zyklus",
-	"dhtqueries"				=> "DHT anfrage erhalten / gesendet",
-	"dhtreplies"				=> "DHT antwort erhalten",
-	"dhtbytes"				=> "DHT Bytes gelesen / geschrieben",
-	"dhtnodes"				=> "DHT-Knoten",
-	"in"					=> "in",
-	"buckets"				=> "buckets",
-	"dhtpeers"				=> "DHT-Peers",
-	"dhttorrents"				=> "DHT-Torrents",
-	"maxuploads"				=> "Maximale Uploads",
-	"maxpeers"				=> "Maximale Peers",
-	"minpeers"				=> "Minimum an Peers",
-	"memoryusage"				=> "Speicherverbrauch",
-	"maxmemoryusage"			=> "Maximaler Speicherverbrauch",
-	"hashcheck"				=> "Hash Überprüfung",
-	"safesync"				=> "Sichere Synchronisation",
-	"sendbuffer"				=> "Sende-Buffer",
-	"receivebuffer"				=> "Empfangs-Buffer",
-
-	// peer list page
-	"address"				=> "Adresse",
-	"port"					=> "Port",
-	"up_rate"				=> "Up",
-	"down_rate"				=> "Down",
-	"peer_rate"				=> "Peer",
-	"pdone"					=> "Fertig",
-	"encrypted"				=> "Verschlüsselt",
-	"incoming"				=> "Verbidung",
-	"pclientversion"			=> "Client Version",
-
-	// tracker list page
-	"focus"					=> "Fokus",
-	"enabled"				=> "Aktiviert",
-	"seedersleechers"			=> "S/L",
-	"lasttimescraped"			=> "Letzter Scrape",
-);
-
-?>
Index: c/includes/messages.en.inc.php
===================================================================
--- src/includes/messages.en.inc.php	(revision 53f5ceaa73f2e26bf68bfb1e991963323da16118)
+++ 	(revision )
@@ -1,415 +1,0 @@
-<?php
-
-$message = array(
-	"badlogin"				=> "Username or password is incorrect",
-	"succlogin"				=> "You have been logged in successfully",
-	"succlogout"				=> "You have been logged out successfully",
-
-	"noconn"				=> "No connection",
-
-	"nohashfound"				=> "No torrents found for this hash",
-	"noidfound"				=> "No id was given",
-	"nodirfound"				=> "No directory was given",
-	"noinputmod"				=> "No mod was specified",
-	"nooponalltorrent"			=> "No task was given",
-
-	"badidfound"				=> "Invalid id was given",
-	"baddirfound"				=> "Invalid directory was given",
-
-	"notanurl"				=> "Not valid URL was given",
-	"rtfileinisize"				=> "The uploaded file exceeds the upload_max_filesize directive in php.ini",
-	"rtfileformsize"			=> "The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form",
-	"rtfilepartial"				=> "The uploaded file was only partially uploaded",
-	"rtfilenofile"				=> "No file was uploaded",
-	"rtfilenotmpdir"			=> "Missing a temporary folder",
-	"rtfilenowrite"				=> "Failed to write file to disk",
-	"rtfileother"				=> "Upload error",
-	"rtfileattack"				=> "Possible file upload attack!",
-
-	"badthrottlevals"			=> "Invalid values for throttle",
-	"succthrottlechange"			=> "Throttle changed",
-
-	"badrtdirectory"			=> "rTorrent download directry is not set correctly",
-	"badatpath"				=> "Invalid path was given",
-
-	"novaluefound"				=> "No value was given",
-	"badvaluefound"				=> "Bad value was given",
-
-	"nopriorityfound"			=> "No priority was given",
-	"badpriorityfound"			=> "Bad priority was given",
-
-	"noviewtype"				=> "No view was given",
-	"badviewtype"				=> "Bad view was given",
-	"norefreshrate"				=> "No refresh rate was given",
-	"badrefreshrate"			=> "Bad refresh rate was given",
-	"nolanguage"				=> "No language was given",
-	"badlanguage"				=> "Bad language was given (no translation is available for this language)",
-
-	"succtorrentload"			=> "Torrent loaded",
-	"succtorrentstart"			=> "Torrent started",
-	"succtorrentsstart"			=> "Torrents started",
-	"succtorrentopen"			=> "Torrent opened",
-	"succtorrentsopen"			=> "Torrents opened",
-	"succtorrentstop"			=> "Torrent stopped",
-	"succtorrentsstop"			=> "Torrents stopped",
-	"succtorrentclose"			=> "Torrent closed",
-	"succtorrentsclose"			=> "Torrents closed",
-	"succtorrentcheckhash"			=> "Torrent hash check started",
-	"succtorrentscheckhash"			=> "Torrents hash check started",
-	"succtorrentremove"			=> "Torrent removed",
-	"succtorrentsremove"			=> "Torrents removed",
-	"succtorrenterase"			=> "Torrent erased",
-	"warntorrenterase"			=> "Torrent erased, but not all the files were removed",
-	"succtorrentserase"			=> "Torrents erased",
-	"succprioritychange"			=> "Torrent priority changed",
-	"succfileprioritychange"		=> "File priority changed",
-	"succdirprioritychange"			=> "Directory priority changed",
-	"succtrackerenabledchange"		=> "Tracker availablity changed",
-	"succviewchange"			=> "View changed",
-	"succrefreshchange"			=> "Refresh rate changed",
-	"succlanguagechange"			=> "Language changed",
-	"succdhtstart"				=> "DHT server started",
-	"succdhtstop"				=> "DHT server stopped",
-
-	"downloadnotallowed"			=> "You are not allowed to download torrents from the webui",
-	"erasenotallowed"			=> "You are not allowed to erase downloaded data from the webui",
-	"languagenotallowed"			=> "You are not allowed to set the language of the page",
-	"refreshnotallowed"			=> "You are not allowed to set a meta-refresh interval",
-	"throttlenotallowed"			=> "You are not allowed to set throttle",
-
-	"no"					=> "No",
-	"yes"					=> "Yes",
-	"disabled"				=> "Disabled",
-	"enabled"				=> "Enabled",
-	"notset"				=> "Not set",
-
-	"d_connection_current_leech"		=> "Leeching",
-	"d_connection_current_seed"		=> "Seeding",
-	"d_connection_current_initial_seed"	=> "Initial seeding",
-	"d_ignore_commands_0"			=> "Not ignoring commands",
-	"d_ignore_commands_1"			=> "Ignoring commands",
-	"d_active_0"				=> "Stopped",
-	"d_active_1"				=> "Started",
-	"d_hash_checked_0"			=> "Hash not checked",
-	"d_hash_checked_1"			=> "Hash checked",
-	"d_multi_file_multi"			=> "Multi",
-	"d_multi_file_single"			=> "Single",
-	"d_open_0"				=> "Closed",
-	"d_open_1"				=> "Open",
-	"d_complete_0"				=> "Incomplete",
-	"d_complete_1"				=> "Completed",
-	"d_hash_checking_0"			=> "Not hashing",
-	"d_hash_checking_1"			=> "Hashing",
-	"d_hashing_0"				=> "Not hashing",
-	"d_hashing_1"				=> "Normal hashing",
-	"d_hashing_2"				=> "Download finished, hashing",
-	"d_hashing_3"				=> "Re-hashing",
-	"d_priority_0"				=> "Off",
-	"d_priority_1"				=> "Low",
-	"d_priority_2"				=> "Normal",
-	"d_priority_3"				=> "High",
-	"d_state_0"				=> "Stopped",
-	"d_state_1"				=> "Started",
-	"f_open_0"				=> "Closed",
-	"f_open_1"				=> "Open",
-	"f_priority_0"				=> "Off",
-	"f_priority_1"				=> "Normal",
-	"f_priority_2"				=> "High",
-	"p_encrypted_0"				=> "Plain",
-	"p_encrypted_1"				=> "Encrypted",
-	"p_incoming_0"				=> "Outgoing",
-	"p_incoming_1"				=> "Incoming",
-	"t_enabled_0"				=> "Disabled",
-	"t_enabled_1"				=> "Enabled",
-	"t_open_0"				=> "Closed",
-	"t_open_1"				=> "Open",
-	"t_type_1"				=> "TCP",
-	"t_type_2"				=> "UDP",
-	"dht_0"					=> "Stopped",
-	"dht_1"					=> "Started",
-
-	"bind_0000"				=> "All IP addresses",
-	"ip_0000"				=> "Not set",
-	"proxy_address_0000"			=> "Not set",
-
-	"xmlrpc_socket_empty"			=> "Malformed unix socket path",
-	"xmlrpc_socket_noexist"			=> "The socket does not exist",
-	"xmlrpc_socket_noperms"			=> "Cannot read permissions for the socket",
-	"xmlrpc_socket_nosocket"		=> "The socket seems not to be a unix socket",
-	"xmlrpc_socket_nowrite"			=> "Cannot write socket",
-	"xmlrpc_socket_noread"			=> "Cannot read socket",
-	"xmlrpc_url_empty"			=> "The URL is empty",
-	"xmlrpc_localport_outofrange"		=> "Port is out of range",
-	"xmlrpc_port_invalidip"			=> "Invalid IP address",
-	"xmlrpc_port_invalidipplus"		=> "Invalid IP address (this message should never appear - if it does, open a ticker in the rTWi trac, and attach your users.conf)",
-	"xmlrpc_port_outofrange"		=> "Port is out of range",
-	"xmlrpc_nodestination"			=> "Nowhere to connect (malformed address)",
-	"xmlrpc_scgi_connectfailed"		=> "Connecting to rTorrent has failed",
-	"xmlrpc_scgi_readfailed"		=> "Receiving answer from rTorrent has failed",
-	"xmlrpc_scgi_emptystring"		=> "rTorrent has returnde nothing (SCGI)",
-	"xmlrpc_gw_connectfailed"		=> "Connecting to rTorrent (using SCGI gateway) has failed",
-	"xmlrpc_gw_emptystring"			=> "rTorrent has returnde nothing (GW)",
-	"xmlrpc_xml_noload"			=> "Malformed XML (propably a HTTP error, or redirect)",
-	"xmlrpc_request_invalidtype"		=> "Invalid parameter type",
-	"xmlrpc_fault"				=> "rTorrent returned an XMLRPC error",
-
-	"unknown"				=> "Unknown",
-);
-
-$viewtypes = array(
-	"viewtype_main"				=> "Main",
-	"viewtype_default"			=> "Default",
-	"viewtype_name"				=> "Name",
-	"viewtype_active"			=> "Active",
-	"viewtype_started"			=> "Started",
-	"viewtype_stopped"			=> "Stopped",
-	"viewtype_complete"			=> "Complete",
-	"viewtype_incomplete"			=> "Incomplete",
-	"viewtype_hashing"			=> "Hashing",
-	"viewtype_seeding"			=> "Seeding",
-	"viewtype_scheduler"			=> "Scheduler",
-);
-
-$refreshrates = array(
-	"refreshrate_0"				=> "Off",
-	"refreshrate_5"				=> "5 seconds",
-	"refreshrate_60"			=> "1 minute",
-	"refreshrate_180"			=> "3 minutes",
-	"refreshrate_420"			=> "7 minutes",
-	"refreshrate_900"			=> "15 minutes",
-	"refreshrate_1500"			=> "25 minutes",
-);
-
-$languages = array(
-	"en"					=> "English",
-	"de"					=> "German",
-	"hu"					=> "Hungarian",
-	"cht"					=> "Traditional Chinese",
-	"fr"					=> "French",
-);
-
-$label = array(
-	// html head
-	"title"					=> "rTWi - an rTorrent Web interface",
-	"description"				=> "rTWi - an rTorrent Web interface",
-	"author"				=> "Gabor Hudiczius",
-	"mailto"				=> "ghudiczius@gmail.com?subject=rTWi - an rTorrent Web interface",
-
-	// login
-	"username"				=> "Username",
-	"password"				=> "Password",
-	"rememberme"				=> "Remember me",
-	"login"					=> "Login",
-
-	// menu
-	"torrents"				=> "Torrents",
-	"peerlist"				=> "Peer list",
-	"info"					=> "Info",
-	"filelist"				=> "File list",
-	"trackerlist"				=> "Tracker list",
-	"chunksseen"				=> "Chunks seen",
-	"transferlist"				=> "Transfer list",
-	"addtorrent"				=> "Add torrent",
-	"serverinfo"				=> "Server info",
-	"logout"				=> "Logout",
-
-	// misc
-	"ok"					=> "OK",
-	"yes"					=> "Yes",
-	"no"					=> "No",
-	
-	"clicktohide"				=> "Click to hide",
-	"clicktoopen"				=> "Click to open",
-	"clicktocloseopen"			=> "Click to close/open",
-	"clicktochange"				=> "Click to change",
-
-	"view"					=> "View",
-	"selectviewtype"			=> "Select view type",
-	"refresh"				=> "Refresh",
-	"selectrefreshrate"			=> "Select refresh rate",
-	"language"				=> "Language",
-	"selectlanguage"			=> "Select language",
-
-	"areyousure"				=> "Are you sure?",
-	"areyousureerase"			=> "Are you sure, you want to delete",
-	"alldatawillbedestroyed"		=> "All data will be destroyed.",
-
-	"homepage"				=> "rTWi project homepage",
-
-	"highest"				=> "highest",
-
-	// add torrent
-	"openfrom"				=> "Open from",
-	"fileupload"				=> "File upload",
-	"url"					=> "URL",
-	"torrentfile"				=> "Torrent file",
-	"torrenturl"				=> "Torrent URL",
-	"starttorrent"				=> "Start torrent",
-	"starttorrentafteradded"		=> "Start torrent after added",
-	"downloadto"				=> "Download to",
-
-	// tasks on torrents
-	"selecttask"				=> "Select task",
-	"selectone"				=> "Select one",
-
-	"startall"				=> "Start all",
-	"stopall"				=> "Stop all",
-	"openall"				=> "Open all",
-	"closeall"				=> "Close all",
-	"checkall"				=> "Check all",
-	"removeall"				=> "Remove all",
-	"eraseall"				=> "Erase all",
-
-	"start"					=> "Start",
-	"stop"					=> "Stop",
-	"open"					=> "Open",
-	"close"					=> "Close",
-	"checkhash"				=> "Check hash",
-	"remove"				=> "Remove",
-	"erase"					=> "Erase",
-
-	"selectpriority"			=> "Select priority",
-	"selectdirpriority"			=> "Select directory priority",
-	"selectfilepriority"			=> "Select file priority",
-
-	// torrent states
-	"started"				=> "Started",
-	"stopped"				=> "Stopped",
-	"opened"				=> "Opened",
-	"closed"				=> "Closed",
-	"finished"				=> "Finished",
-	"checkhashed"				=> "Hash checked",
-
-	"startedsince"				=> "Started since",
-	"stopedsince"				=> "Stoped since",
-	"openedsince"				=> "Opened since",
-	"closedsince"				=> "Closed since",
-	"finishedsince"				=> "Finished since",
-	"hashingsince"				=> "Hashing since",
-
-	"sincepre"				=> "since",
-	"sincepost"				=> "",
-
-	// torrent stats
-	"details"				=> "Details",
-
-	"done"					=> "done",
-	"downloadfinished"			=> "Download finished",
-	"downloadeddata"			=> "Downloaded data",
-	"torrentsize"				=> "Torrent size",
-	"uploaded"				=> "Uploaded",
-	"uploadeddata"				=> "Uploaded data",
-
-	"percenthashed"				=> "percent hashed",
-	"percentcompleted"			=> "percent completed",
-	"estimatedtimeremaining"		=> "Estimated time remaining",
-	"ignorecommands"			=> "Ignore commands",
-	"ratio"					=> "Ratio",
-
-	"off"					=> "Off",
-	"low"					=> "Low",
-	"normal"				=> "Normal",
-	"high"					=> "High",
-
-	"message"				=> "Message",
-
-	"lasttouched"				=> "Last touched",
-	"filesize"				=> "File size",
-	"downloadfile"				=> "Download file",
-	"trackergroup"				=> "Tracker group",
-	"type"					=> "Type",
-	"selecttrackerenabled"			=> "Select if tracker is enabled",
-	"mininterval"				=> "Minimum interval",
-
-	// stats
-	"throttle"				=> "Throttle",
-	"uploadspeed"				=> "Upload speed",
-	"uploadlimit"				=> "Upload limit",
-	"nouploadlimit"				=> "No upload limit",
-	"downloadspeed"				=> "Download speed",
-	"downloadlimit"				=> "Download limit",
-	"nodownloadlimit"			=> "No download limit",
-	"rate"					=> "Rate",
-
-	// info page
-	"name"					=> "Name",
-	"infohash"				=> "Info hash",
-	"localid"				=> "Local ID",
-	"localidhtml"				=> "Local ID (html)",
-	"directory"				=> "Directory",
-	"tiedtofile"				=> "Tied to file",
-	"filestats"				=> "File stats",
-	"files"					=> "files",
-	"private"				=> "Private",
-	"chunks"				=> "Chunks",
-	"priority"				=> "Priority",
-	"statechanged"				=> "State changed",
-	"freediskspace"				=> "Free diskspace",
-	"connectiontype"			=> "Connection type",
-	"trackers"				=> "Trackers",
-	"peersconnected"			=> "Peers connected",
-	"dmaxpeers"				=> "Maximum",
-	"dminpeers"				=> "Minimum",
-	"leechers"				=> "Leechers",
-	"seeders"				=> "Seeders",
-	"pexenabled"				=> "PEX enabled",
-	"pexsize"				=> "PEX size",
-	"upload"				=> "Upload",
-	"download"				=> "Download",
-	"skipped"				=> "Skipped",
-
-	// server info page
-	"clientversion"				=> "Client version",
-	"libraryversion"			=> "Library version",
-	"workingdirectory"			=> "Working directory",
-	"downloaddirectory"			=> "Download directory",
-	"sessiondirectory"			=> "Session directory",
-	"hostname"				=> "Hostname",
-	"pid"					=> "PID",
-	"listeningipaddress"			=> "Listening IP address",
-	"reportedipaddress"			=> "IP address reported to the tracker",
-	"portopened"				=> "Port opened",
-	"randomport"				=> "Random port",
-	"portrange"				=> "Port range",
-	"udptrackers"				=> "Use UDP trackers",
-	"changedhtstatus"			=> "Start/stop DHT server",
-	"dht"					=> "DHT server",
-	"dhtport"				=> "DHT port",
-	"dhtcycle"				=> "DHT cycle",
-	"dhtqueries"				=> "DHT queries received / sent",
-	"dhtreplies"				=> "DHT replies received",
-	"dhtbytes"				=> "DHT bytes read / written",
-	"dhtnodes"				=> "DHT nodes",
-	"in"					=> "in",
-	"buckets"				=> "buckets",
-	"dhtpeers"				=> "DHT peers",
-	"dhttorrents"				=> "DHT torrents",
-	"maxuploads"				=> "Maximum number of uploads",
-	"maxpeers"				=> "Minimum number of peers",
-	"minpeers"				=> "Maximum number of peers",
-	"memoryusage"				=> "Memory usage",
-	"maxmemoryusage"			=> "Max memory usage",
-	"hashcheck"				=> "Hash check",
-	"safesync"				=> "Safe sync",
-	"sendbuffer"				=> "Send buffer",
-	"receivebuffer"				=> "Receive buffer",
-
-	// peer list page
-	"address"				=> "Address",
-	"port"					=> "Port",
-	"up_rate"				=> "Up",
-	"down_rate"				=> "Down",
-	"peer_rate"				=> "Peer",
-	"pdone"					=> "Done",
-	"encrypted"				=> "Encrypted",
-	"incoming"				=> "Connection",
-	"pclientversion"			=> "Client version",
-
-	// tracker list page
-	"focus"					=> "Focus",
-	"enabled"				=> "Enabled",
-	"seedersleechers"			=> "S/L",
-	"lasttimescraped"			=> "Last time scraped",
-);
-
-?>
Index: c/includes/messages.fr.inc.php
===================================================================
--- src/includes/messages.fr.inc.php	(revision 53f5ceaa73f2e26bf68bfb1e991963323da16118)
+++ 	(revision )
@@ -1,415 +1,0 @@
-<?php
-
-$message = array(
-    "badlogin"                          => "Nom d'utilisateur et/ou mot de passe incorrect(s)",
-    "succlogin"                         => "Vous vous êtes connecté avec succès",
-    "succlogout"                        => "Vous vous êtes déconnecté avec succès",
-
-    "noconn"                            => "Pas de connexion",
-
-    "nohashfound"                       => "Pas de torrent trouvé pour ce hash",
-    "noidfound"                         => "ID manquant",
-    "nodirfound"                        => "Répertoire manquant",
-    "noinputmod"                        => "Input mod manquant",
-    "nooponalltorrent"                  => "Aucune tâche n'a été fournie",
-
-    "badidfound"                        => "ID incorrect",
-    "baddirfound"                       => "Répertoire invalide",
-
-    "notanurl"                          => "URL invalide",
-    "rtfileinisize"                     => "La taille du fichier téléversé dépasse la directive upload_max_filesize dans php.ini",
-    "rtfileformsize"                    => "La taille du fichier téléversé dépasse la directive MAX_FILE_SIZE du formulaire HTML",
-    "rtfilepartial"                     => "Le fichier est téléversé partiellement",
-    "rtfilenofile"                      => "Acucun fichier téléversé",
-    "rtfilenotmpdir"                    => "Dossier introuvable",
-    "rtfilenowrite"                     => "Echec de l'écriture sur disque",
-    "rtfileother"                       => "Erreur de téléversement",
-    "rtfileattack"                      => "Attaque suspectée lors du téléversement !",
-
-    "badthrottlevals"                   => "Valeurs invalides pour le throttle",
-    "succthrottlechange"                => "Throttle modifié avec succès",
-
-    "badrtdirectory"                    => "Le dossier de téléchargement rTorrent est incorrect",
-    "badatpath"                         => "Chemin incorrect",
-
-    "novaluefound"                      => "Valeur manquante",
-    "badvaluefound"                     => "Valeur invalide",
-
-    "nopriorityfound"                   => "Priorité manquante",
-    "badpriorityfound"                  => "Priorité incorrecte",
-
-    "noviewtype"                        => "Type de vue manquant",
-    "badviewtype"                       => "Type de vue incorrect",
-    "norefreshrate"                     => "Taux de rafraichissement manquant",
-    "badrefreshrate"                    => "Taux de rafraichissement incorrect",
-    "nolanguage"                        => "Langue manquante",
-    "badlanguage"                       => "Langue incorrecte (pas de traduction disponible pour cette langue)",
-
-    "succtorrentload"                   => "Torrent chargé avec succès",
-    "succtorrentstart"                  => "Torrent démarré avec succès",
-    "succtorrentsstart"                 => "Torrents démarrés avec succès",
-    "succtorrentopen"                   => "Torrent ouvert avec succès",
-    "succtorrentsopen"                  => "Torrents ouverts avec succès",
-    "succtorrentstop"                   => "Torrent interrompu avec succès",
-    "succtorrentsstop"                  => "Torrents interrompus avec cussès",
-    "succtorrentclose"                  => "Torrent fermé avec succès",
-    "succtorrentsclose"                 => "Torrents fermés avec succès",
-    "succtorrentcheckhash"              => "Vérification du hash démarrée avec succès",
-    "succtorrentscheckhash"             => "Vérification de hash multiple démarrée avec succès",
-    "succtorrentremove"                 => "Torrent annulé avec succès",
-    "succtorrentsremove"                => "Torrents annulé avec succès",
-    "succtorrenterase"                  => "Torrent supprimé",
-    "warntorrenterase"                  => "Torrent supprimé, mais tous les fichiers n'ont pas été effacés",
-    "succtorrentserase"                 => "Torrents supprimés",
-    "succprioritychange"                => "Priorité du torrent modifiée avec succès",
-    "succfileprioritychange"            => "Priorité du fichier modifée avec succès",
-    "succdirprioritychange"             => "Priorité du repertoire modifiée avec succès",
-    "succtrackerenabledchange"          => "Disponibilité du tracker modifiée avec succès",
-    "succviewchange"                    => "Vue modifiée avec succès",
-    "succrefreshchange"                 => "Taux de rafraichissement modifié avec succès",
-    "succlanguagechange"                => "Langue modifiée avec succès",
-    "succdhtstart"                      => "Serveur DHT démarré",
-    "succdhtstop"                       => "Serveur DHT arrêté",
-
-    "downloadnotallowed"                => "Vous n'êtes pas autorisé(e) à télécharger des torrents depuis l'interface web",
-    "erasenotallowed"                   => "Vous n'êtes pas autorisé(e) à supprimer les données téléchargées depuis l'interface web",
-    "languagenotallowed"                => "Vous n'êtes pas autorisé(e) à régler la langue de la page",
-    "refreshnotallowed"                 => "Vous n'êtes pas autorisé(e) à régler l'intervale de rafraichissment meta-refesh",
-    "throttlenotallowed"                => "Vous n'êtes pas autorisé(e) à régler le throttle",
-
-    "no"                                => "Non",
-    "yes"                               => "Oui",
-    "disabled"                          => "Désactivé",
-    "enabled"                           => "Activé",
-    "notset"                            => "Non défini",
-
-    "d_connection_current_leech"        => "Leeching",
-    "d_connection_current_seed"         => "Seeding",
-    "d_connection_current_initial_seed" => "Seeding initial",
-    "d_ignore_commands_0"               => "N'ignore pas les commandes",
-    "d_ignore_commands_1"               => "Ignore les commandes",
-    "d_active_0"                        => "Stoppé",
-    "d_active_1"                        => "Démarré",
-    "d_hash_checked_0"                  => "Hash non vérifié",
-    "d_hash_checked_1"                  => "Hash vérifié",
-    "d_multi_file_multi"                => "Multiple",
-    "d_multi_file_single"               => "Simple",
-    "d_open_0"                          => "Fermé",
-    "d_open_1"                          => "Ouvert",
-    "d_complete_0"                      => "Incomplet",
-    "d_complete_1"                      => "Terminé",
-    "d_hash_checking_0"                 => "Vérif du hash inactive",
-    "d_hash_checking_1"                 => "Vérification du hash",
-    "d_hashing_0"                       => "Hachage inactif",
-    "d_hashing_1"                       => "Hachage normal en cours",
-    "d_hashing_2"                       => "Téléchargement terminé, hachage",
-    "d_hashing_3"                       => "Re-hachage",
-    "d_priority_0"                      => "Aucune",
-    "d_priority_1"                      => "Basse",
-    "d_priority_2"                      => "Normale",
-    "d_priority_3"                      => "Haute",
-    "d_state_0"                         => "Arrêté",
-    "d_state_1"                         => "Démarré",
-    "f_open_0"                          => "Fermé",
-    "f_open_1"                          => "Ouvert",
-    "f_priority_0"                      => "Aucune",
-    "f_priority_1"                      => "Normale",
-    "f_priority_2"                      => "Haute",
-    "p_encrypted_0"                     => "Clair",
-    "p_encrypted_1"                     => "Crypté",
-    "p_incoming_0"                      => "Sorties",
-    "p_incoming_1"                      => "Arrivées",
-    "t_enabled_0"                       => "Désactivé",
-    "t_enabled_1"                       => "Activé",
-    "t_open_0"                          => "Fermé",
-    "t_open_1"                          => "Ouvert",
-    "t_type_1"                          => "TCP",
-    "t_type_2"                          => "UDP",
-    "dht_0"                             => "Arrêté",
-    "dht_1"                             => "Démarré",
-
-    "bind_0000"                         => "Toute adresse IP",
-    "ip_0000"                           => "Toute adresse IP",
-    "proxy_address_0000"                => "Toute adresse de proxy",
-
-    "xmlrpc_socket_empty"               => "Chemin de socket unix incorrect",
-    "xmlrpc_socket_noexist"             => "La socket n'existe pas",
-    "xmlrpc_socket_noperms"             => "Impossible de lire les permissions de la socket",
-    "xmlrpc_socket_nosocket"            => "La socket ne semble pas être une socket unix",
-    "xmlrpc_socket_nowrite"             => "Impossible d'écrire la socket",
-    "xmlrpc_socket_noread"            	=> "Impossible de lire la socket",
-    "xmlrpc_url_empty"                  => "L'URL est vide",
-    "xmlrpc_localport_outofrange"       => "Le port local est hors de la plage",
-    "xmlrpc_port_invalidip"             => "Adresse IP invalide",
-    "xmlrpc_port_invalidipplus"         => "Adresse IP invalide (ce message ne devrait jamais apparaître - si c'est le cas, ouvrez un ticket sur le trac de rTWi, et joignez y votre users.conf)",
-    "xmlrpc_port_outofrange"            => "Le port est hors de la plage",
-    "xmlrpc_nodestination"              => "Destination incorrecte (adresse incorrecte)",
-    "xmlrpc_scgi_connectfailed"         => "La connexion à rTorrent a echoué",
-    "xmlrpc_scgi_readfailed"            => "La lecture de la réponse d'rTorrent a échoué",
-    "xmlrpc_scgi_emptystring"           => "rTorrent n'a pas répondu (SCGI)",
-    "xmlrpc_gw_connectfailed"           => "La connexion à rTorrent (en utilisant la passerelle SCGI) a échoué",
-    "xmlrpc_gw_emptystring"             => "rTorrent n'a pas répondu (GW)",
-    "xmlrpc_xml_noload"                 => "XML incorrect (probablement une erreur HTTP, ou une redirection)",
-    "xmlrpc_request_invalidtype"        => "Type de requête invalide",
-    "xmlrpc_fault"                      => "rTorrent a retourné une erreur XMLRPC",
-
-    "unknown"                           => "Inconnu",
-);
-
-$viewtypes = array(
-    "viewtype_main"                     => "Principal",
-    "viewtype_default"                  => "Par défaut",
-    "viewtype_name"                     => "Nom",
-    "viewtype_active"                   => "Actif",
-    "viewtype_started"                  => "Démarré",
-    "viewtype_stopped"                  => "Arrêté",
-    "viewtype_complete"                 => "Terminé",
-    "viewtype_incomplete"               => "Incomplet",
-    "viewtype_hashing"                  => "Hachage",
-    "viewtype_seeding"                  => "Seeding",
-    "viewtype_scheduler"                => "Planificateur",
-);
-
-$refreshrates = array(
-    "refreshrate_0"                     => "Eteint",
-    "refreshrate_5"                     => "5 secondes",
-    "refreshrate_60"                    => "1 minute",
-    "refreshrate_180"                   => "3 minutes",
-    "refreshrate_420"                   => "7 minutes",
-    "refreshrate_900"                   => "15 minutes",
-    "refreshrate_1500"                  => "25 minutes",
-);
-
-$languages = array(
-    "en"                                => "English",
-    "de"                                => "German",
-    "hu"                                => "Hungarian",
-    "cht"                               => "Traditional Chinese",
-	"fr"                                => "French",
-);
-
-$label = array(
-    // html head
-    "title"                             => "rTWi - une interface Web pour rTorrent",
-    "description"                       => "rTWi - une interface Web pour rTorrent",
-    "author"                            => "Gabor Hudiczius - Translated by JeRoMe@LaMaRtInIeRe.Eu>",
-    "mailto"                            => "ghudiczius@gmail.com?subject=rTWi - an rTorrent Web interface - french user",
-
-    // login
-    "username"                          => "Nom d'utilisateur",
-    "password"                          => "Mot de passe",
-    "rememberme"                        => "Se souvenir de moi",
-    "login"                             => "Connexion",
-
-    // menu
-    "torrents"                          => "Torrents",
-    "peerlist"                          => "Liste des pears",
-    "info"                              => "Info",
-    "filelist"                          => "Liste des fichiers",
-    "trackerlist"                       => "Liste des trackers",
-    "chunksseen"                        => "Chunks trouvés",
-    "transferlist"                      => "Liste des transferts",
-    "addtorrent"                        => "Ajouter un torrent",
-    "serverinfo"                        => "Infos sur le serveur",
-    "logout"                            => "Déconnexion",
-
-    // misc
-    "ok"                                => "OK",
-    "yes"                               => "Oui",
-    "no"                                => "Non",
-    
-    "clicktohide"                       => "Cliquer pour masquer",
-    "clicktoopen"                       => "Cliquer pour ouvrir",
-    "clicktocloseopen"                  => "Cliquer pour fermer/ouvrir",
-    "clicktochange"                     => "Cliquer pour modifier",
-
-    "view"                              => "Vue",
-    "selectviewtype"                    => "Sélectionner le type de vue",
-    "refresh"                           => "Rafraichir",
-    "selectrefreshrate"                 => "Sélectionner le taux de rafraichissement",
-    "language"                          => "Langue",
-    "selectlanguage"                    => "Select language",
-
-    "areyousure"                        => "Etes vous sûr(e) ?",
-    "areyousureerase"                   => "Etes vous sûr(e) de vouloir effacer ?",
-    "alldatawillbedestroyed"            => "Toutes les données vont être détruites",
-
-    "homepage"                          => "Page d'accueil du projet rTWi",
-
-    "highest"                           => "Maxi",
-
-    // add torrent
-    "openfrom"                          => "Ouvrir à partir de",
-    "fileupload"                        => "Téléversement de fichier",
-    "url"                               => "URL",
-    "torrentfile"                       => "Fichier torrent",
-    "torrenturl"                        => "URL du torrent",
-    "starttorrent"                      => "Démarrer le torrent",
-    "starttorrentafteradded"            => "Démarrer le torrent après l'ajout",
-    "downloadto"                        => "Télécharger vers",
-
-    // tasks on torrents
-    "selecttask"                        => "Sélectionner une tâche",
-    "selectone"                         => "En sélectionner une",
-
-    "startall"                          => "Tout démarrer",
-    "stopall"                           => "Tout arrêter",
-    "openall"                           => "Tout ouvrir",
-    "closeall"                          => "Tout fermer",
-    "checkall"                          => "Tout vérifier",
-    "removeall"                         => "Tout retirer",
-    "eraseall"                          => "Tout effacer",
-
-    "start"                             => "Démarrer",
-    "stop"                              => "Arrêter",
-    "open"                              => "Ouvrir",
-    "close"                             => "Fermer",
-    "checkhash"                         => "Vérif de hash",
-    "remove"                            => "Retirer",
-    "erase"                             => "Effacer",
-
-    "selectpriority"                    => "Sélectionner une priorité",
-    "selectdirpriority"                 => "Sélectionner un répertoire",
-    "selectfilepriority"                => "Sélectionner la priorité du fichier",
-
-    // torrent states
-    "started"                           => "Démarré",
-    "stopped"                           => "Arrêté",
-    "opened"                            => "Ouvert",
-    "closed"                            => "Fermé",
-    "finished"                          => "Terminé",
-    "checkhashed"                       => "Hash vérifié",
-
-    "startedsince"                      => "Démarré depuis",
-    "stopedsince"                       => "Arrêté depuis",
-    "openedsince"                       => "Ouvert depuis",
-    "closedsince"                       => "Fermé depuis",
-    "finishedsince"                     => "Terminé depuis",
-    "hashingsince"                      => "Hache depuis",
-
-    "sincepre"                          => "Pre-depuis",
-    "sincepost"                         => "Post-depuis",
-
-    // torrent stats
-    "details"                           => "Détails",
-
-    "done"                              => "Fait",
-    "downloadfinished"                  => "Téléchargement terminé",
-    "downloadeddata"                    => "Données téléchargées",
-    "torrentsize"                       => "Taille du torrent",
-    "uploaded"                          => "Téléversé",
-    "uploadeddata"                      => "Données téléversées",
-
-    "percenthashed"                     => "Pourcentage hashé",
-    "percentcompleted"                  => "Pourcentage effectué",
-    "estimatedtimeremaining"            => "Temps restant estimé",
-    "ignorecommands"                    => "Ignorer les commandes",
-    "ratio"                             => "Taux",
-
-    "off"                               => "Arrêté",
-    "low"                               => "Bas",
-    "normal"                            => "Normal",
-    "high"                              => "Haut",
-
-    "message"                           => "Message",
-
-    "lasttouched"                       => "Dernière fois touché",
-    "filesize"                          => "Taille du fichier",
-    "downloadfile"                      => "Télécharger le fichier",
-    "trackergroup"                      => "Groupe de trackers",
-    "type"                              => "Type",
-    "selecttrackerenabled"              => "Choisir si le tracker est activé",
-    "mininterval"                       => "Intervalle minimum",
-
-    // stats
-    "throttle"                          => "Throttle",
-    "uploadspeed"                       => "Vitesse de téléversement",
-    "uploadlimit"                       => "Limite de téléversement",
-    "nouploadlimit"                     => "Pas de limite de téléversement",
-    "downloadspeed"                     => "Vitesse de téléchargement",
-    "downloadlimit"                     => "Limite de téléchargement",
-    "nodownloadlimit"                   => "Pas de limite de téléchargement",
-    "rate"                              => "Taux",
-
-    // info page
-    "name"                              => "Nom",
-    "infohash"                          => "Infos hash",
-    "localid"                           => "ID local",
-    "localidhtml"                       => "ID local (html)",
-    "directory"                         => "Répertoire",
-    "tiedtofile"                        => "Lié au fichier",
-    "filestats"                         => "Stats fichier",
-    "files"                             => "Fichiers",
-    "private"                           => "Privé",
-    "chunks"                            => "Chunks",
-    "priority"                          => "Priorité",
-    "statechanged"                      => "Etat changé",
-    "freediskspace"                     => "Espace disque libre",
-    "connectiontype"                    => "Type de connexion",
-    "trackers"                          => "Trackers",
-    "peersconnected"                    => "Peers connectés",
-    "dmaxpeers"                         => "Maximum",
-    "dminpeers"                         => "Minimum",
-    "leechers"                          => "Leechers",
-    "seeders"                           => "Seeders",
-    "pexenabled"                        => "PEX activé",
-    "pexsize"                           => "Taille PEX",
-    "upload"                            => "Téléversement",
-    "download"                          => "Téléchargement",
-    "skipped"                           => "Passé",
-
-    // server info page
-    "clientversion"                     => "Version du client",
-    "libraryversion"                    => "Version de la lib",
-    "workingdirectory"                  => "Répertoire de travail",
-    "downloaddirectory"                 => "Répertoire de téléchargement",
-    "sessiondirectory"                  => "Répertoire de session",
-    "hostname"                          => "Nom d'hôte",
-    "pid"                               => "PID",
-    "listeningipaddress"                => "Ecoute sur l'adresse IP",
-    "reportedipaddress"                 => "Adresse IP rapportée au tracker",
-    "portopened"                        => "Port ouvrir",
-    "randomport"                        => "Port aléatoire",
-    "portrange"                         => "Plage de ports",
-    "udptrackers"                       => "Utiliser des tackers UDP",
-    "changedhtstatus"                   => "Démarrer/Arrêter le serveur DHT",
-    "dht"                               => "Serveur DHT",
-    "dhtport"                           => "Port DHT",
-    "dhtcycle"                          => "Cycle DHT",
-    "dhtqueries"                        => "Requêtes DHT reçues / envoyées",
-    "dhtreplies"                        => "Réponses DHT reçues",
-    "dhtbytes"                          => "Octets DHT lus / écrits",
-    "dhtnodes"                          => "Nodes DHT",
-    "in"                                => "Entrant",
-    "buckets"                           => "Buckets",
-    "dhtpeers"                          => "Peers DHT",
-    "dhttorrents"                       => "Torrents DHT",
-    "maxuploads"                        => "Nombre maximum de téléversements",
-    "maxpeers"                          => "Nombre minimum de peers",
-    "minpeers"                          => "Nombre maximum de peers",
-    "memoryusage"                       => "Allocation de la mémoire",
-    "maxmemoryusage"                    => "Mémoire allouée maximum",
-    "hashcheck"                         => "Vérif de hash",
-    "safesync"                          => "Safe Sync",
-    "sendbuffer"                        => "Envoyer le buffer",
-    "receivebuffer"                     => "Recevoir le buffer",
-
-    // peer list page
-    "address"                           => "Adresse",
-    "port"                              => "Port",
-    "up_rate"                           => "Taux d'up",
-    "down_rate"                         => "Taux de dl",
-    "peer_rate"                         => "Peer",
-    "pdone"                             => "Fait",
-    "encrypted"                         => "Crypté",
-    "incoming"                          => "Connexion",
-    "pclientversion"                    => "Version du client",
-
-    // tracker list page
-    "focus"                             => "Focus",
-    "enabled"                           => "Activé",
-    "seedersleechers"                   => "S/L",
-    "lasttimescraped"                   => "Dernier accomplissement",
-);
-
-?>
Index: c/includes/messages.hu.inc.php
===================================================================
--- src/includes/messages.hu.inc.php	(revision 53f5ceaa73f2e26bf68bfb1e991963323da16118)
+++ 	(revision )
@@ -1,415 +1,0 @@
-<?php
-
-$message = array(
-	"badlogin"				=> "Hibás felhasználó, vagy jelszó",
-	"succlogin"				=> "Sikeres bejelentkezés",
-	"succlogout"				=> "Sikeres kijelentkezés",
-
-	"noconn"				=> "Nincs kapcsolat",
-
-	"nohashfound"				=> "Nincs ilyen torrent",
-	"noidfound"				=> "Nincs ID megadva",
-	"nodirfound"				=> "Nincs könyvtár megadva",
-	"noinputmod"				=> "Nincs funkció megadva",
-	"nooponalltorrent"			=> "Nincs feladat megadva",
-
-	"badidfound"				=> "Hibás ID",
-	"baddirfound"				=> "Hibás könyvtárnév",
-
-	"notanurl"				=> "Nincs URL megadva",
-	"rtfileinisize"				=> "A feltöltött fájl mérete meghaladja a PHP.ini-ben megengedett (upload_max_filesize) méretet",
-	"rtfileformsize"			=> "A feltöltött fájl mérete meghaladja a HTML űrlapon megengedett (MAX_FILE_SIZE) méretet",
-	"rtfilepartial"				=> "A fájl csak részlegesen került feltöltésre",
-	"rtfilenofile"				=> "Nem történt fájlfeltöltés",
-	"rtfilenotmpdir"			=> "Nincs megadva ideiglenes könyvtár",
-	"rtfilenowrite"				=> "Nem sikerült írni a lemezre",
-	"rtfileother"				=> "Feltöltési hiba",
-	"rtfileattack"				=> "Lehetséges támadás!",
-
-	"badthrottlevals"			=> "Hibás sebességkorlát érték",
-	"succthrottlechange"			=> "Sebességkorlát megváltoztatva",
-
-	"badrtdirectory"			=> "Az rTorrent letöltési könyvtár hibásan van megadva",
-	"badatpath"				=> "Hibás útvonal",
-
-	"novaluefound"				=> "Nincs érték megadva",
-	"badvaluefound"				=> "Hibás érték",
-
-	"nopriorityfound"			=> "Nincs prioritás megadva",
-	"badpriorityfound"			=> "Hibás prioritás",
-
-	"noviewtype"				=> "Nincs megadva nézet",
-	"badviewtype"				=> "Hibás nézet",
-	"norefreshrate"				=> "Nincs megadva intervallum",
-	"badrefreshrate"			=> "Hibás frissítési intervallum",
-	"nolanguage"				=> "Nincs megadva nyelv",
-	"badlanguage"				=> "Nincs ilyen nyelvi file",
-
-	"succtorrentload"			=> "Torrent betöltve",
-	"succtorrentstart"			=> "Torrent elindítva",
-	"succtorrentsstart"			=> "Torrentek elindítva",
-	"succtorrentopen"			=> "Torrent megnyitva",
-	"succtorrentsopen"			=> "Torrentek megnzitva",
-	"succtorrentstop"			=> "Torrent leállítva",
-	"succtorrentsstop"			=> "Torrentek leállítva",
-	"succtorrentclose"			=> "Torrent bezárva",
-	"succtorrentsclose"			=> "Torrentek bezárva",
-	"succtorrentcheckhash"			=> "Torrent ellenőrzés elindítva",
-	"succtorrentscheckhash"			=> "Torrentek ellenőrzése elindítva",
-	"succtorrentremove"			=> "Torrent eltávolítva",
-	"succtorrentsremove"			=> "Torrentek eltávolítva",
-	"succtorrenterase"			=> "Torrent törölve",
-	"warntorrenterase"			=> "Torrent törölve, de nem minden fájl lett eltávolítva",
-	"succtorrentserase"			=> "Torrentek törölve",
-	"succprioritychange"			=> "Torrent prioritása beállítva",
-	"succfileprioritychange"		=> "Fájl prioritása beállítva",
-	"succdirprioritychange"			=> "Könyvtár prioritása beállítva",
-	"succtrackerenabledchange"		=> "Tracker elérhetősége beállítva",
-	"succviewchange"			=> "Nézet beállítva",
-	"succrefreshchange"			=> "Frissítés beállítva",
-	"succlanguagechange"			=> "Nyelv beállítva",
-	"succdhtstart"				=> "DHT szerver elindítva",
-	"succdhtstop"				=> "DHT szerver leállítva",
-
-	"downloadnotallowed"			=> "Nem vagy jogosult torrentek letöltésére a web-es felületről",
-	"erasenotallowed"			=> "Nem vagy jogosult torrentek törlésére a web-es felületen",
-	"languagenotallowed"			=> "Nem vagy jogosult nyelv beállítására",
-	"refreshnotallowed"			=> "Nem vagy jogosult frissítés beállítására",
-	"throttlenotallowed"			=> "Nem vagy jogosult sebességkorlát beállítására",
-
-	"no"					=> "Nem",
-	"yes"					=> "Igen",
-	"disabled"				=> "Letiltva",
-	"enabled"				=> "Engedélyezve",
-	"notset"				=> "Nincs beállítva",
-
-	"d_connection_current_leech"		=> "Letöltés",
-	"d_connection_current_seed"		=> "Feltöltés",
-	"d_connection_current_initial_seed"	=> "Kezdő feltöltés",
-	"d_ignore_commands_0"			=> "Parancsok figyelembevétele",
-	"d_ignore_commands_1"			=> "Parancsok figyelmen kívü hagyása",
-	"d_active_0"				=> "Leállítva",
-	"d_active_1"				=> "Elindítva",
-	"d_hash_checked_0"			=> "Nem volt ellenőrizve",
-	"d_hash_checked_1"			=> "Ellenőrizve",
-	"d_multi_file_multi"			=> "",
-	"d_multi_file_single"			=> "Egyetlen fájl",
-	"d_open_0"				=> "Zárva",
-	"d_open_1"				=> "Nyitva",
-	"d_complete_0"				=> "Befejezetlen",
-	"d_complete_1"				=> "Befejezett",
-	"d_hash_checking_0"			=> "Nincs ellenőrzés alatt",
-	"d_hash_checking_1"			=> "Ellenőrzés alatt",
-	"d_hashing_0"				=> "Nincs ellenőrzés alatt",
-	"d_hashing_1"				=> "Normál ellenőrzés",
-	"d_hashing_2"				=> "Letöltés befejezve, ellenőrzés",
-	"d_hashing_3"				=> "Újraellenőrzés",
-	"d_priority_0"				=> "Leállítva",
-	"d_priority_1"				=> "Alacsonz",
-	"d_priority_2"				=> "Normál",
-	"d_priority_3"				=> "Magas",
-	"d_state_0"				=> "Leállítva",
-	"d_state_1"				=> "Elindítva",
-	"f_open_0"				=> "Zárva",
-	"f_open_1"				=> "Nyitva",
-	"f_priority_0"				=> "Leállítva",
-	"f_priority_1"				=> "Normál",
-	"f_priority_2"				=> "Magas",
-	"p_encrypted_0"				=> "Sima",
-	"p_encrypted_1"				=> "Titkosított",
-	"p_incoming_0"				=> "Kimenő",
-	"p_incoming_1"				=> "Bejövő",
-	"t_enabled_0"				=> "Letiltva",
-	"t_enabled_1"				=> "Engedélyezve",
-	"t_open_0"				=> "Zárva",
-	"t_open_1"				=> "Nyitva",
-	"t_type_1"				=> "TCP",
-	"t_type_2"				=> "UDP",
-	"dht_0"					=> "Leállítva",
-	"dht_1"					=> "Elindítva",
-
-	"bind_0000"				=> "Minden IP cím",
-	"ip_0000"				=> "Nincs beállítva",
-	"proxy_address_0000"			=> "Nincs beállítva",
-
-	"xmlrpc_socket_empty"			=> "A unix socket útvonalának formátuma hiás",
-	"xmlrpc_socket_noexist"			=> "A socket nem létezik",
-	"xmlrpc_socket_noperms"			=> "Nem lehet kiolvasni a socket jogosultságait",
-	"xmlrpc_socket_nosocket"		=> "A socket nem unix socket",
-	"xmlrpc_socket_nowrite"			=> "A socket nem írható",
-	"xmlrpc_socket_noread"			=> "A socket nem olvasható",
-	"xmlrpc_url_empty"			=> "Az URL üres",
-	"xmlrpc_localport_outofrange"		=> "A port 1 és 65535 között kell, hogy legyen",
-	"xmlrpc_port_invalidip"			=> "Hibás IP cím",
-	"xmlrpc_port_invalidipplus"		=> "Hibás IP cím (ez a hiba elvileg nem fordulhat elő, ellenkező esetben nyiss egy ticket-et a trac-ban és csatold a users.conf fájlt)",
-	"xmlrpc_port_outofrange"		=> "A port 1 és 65535 között kell, hogy legyen",
-	"xmlrpc_nodestination"			=> "Ninc hová csatlakozni (hibás cím)",
-	"xmlrpc_scgi_connectfailed"		=> "Nem sikerült kapcsolódni az rTorrent-hez",
-	"xmlrpc_scgi_readfailed"		=> "Nem sikerült választ kapni az rTorrent-től",
-	"xmlrpc_scgi_emptystring"		=> "Az rTorrent semmit nem adott vissza (SCGI)",
-	"xmlrpc_gw_connectfailed"		=> "Nem siker csatlakozni az rTorrent-hez (SCGI gateway haszálatával)",
-	"xmlrpc_gw_emptystring"			=> "Az rTorrent semmit nem adott vissza (GW)",
-	"xmlrpc_xml_noload"			=> "Hibás XML (valószínqleg HTTP hibaoldal, vagy átirányítás)",
-	"xmlrpc_request_invalidtype"		=> "Hibás paraméter típus",
-	"xmlrpc_fault"				=> "Az rTorrent XMLRPC hibával tért vissza",
-
-	"unknown"				=> "Ismeretlen",
-);
-
-$viewtypes = array(
-	"viewtype_main"				=> "Fő nézet",
-	"viewtype_default"			=> "Alapértelmezett",
-	"viewtype_name"				=> "Név szerint",
-	"viewtype_active"			=> "Aktív",
-	"viewtype_started"			=> "Elindított torrentek",
-	"viewtype_stopped"			=> "Leállított torrentek",
-	"viewtype_complete"			=> "Befejezett torrentek",
-	"viewtype_incomplete"			=> "Befejezetlen torrentek",
-	"viewtype_hashing"			=> "Ellenőrzés alatt álló torrentek",
-	"viewtype_seeding"			=> "Feltöltések",
-	"viewtype_scheduler"			=> "A nemlétező ütemező",
-);
-
-$refreshrates = array(
-	"refreshrate_0"				=> "Letiltva",
-	"refreshrate_5"				=> "5 másodperc",
-	"refreshrate_60"			=> "1 perc",
-	"refreshrate_180"			=> "3 perc",
-	"refreshrate_420"			=> "7 perc",
-	"refreshrate_900"			=> "15 perc",
-	"refreshrate_1500"			=> "25 perc",
-);
-
-$languages = array(
-	"en"					=> "Angol",
-	"de"					=> "Német",
-	"hu"					=> "Magyar",
-	"cht"					=> "Kínai (hagyományos)",
-	"fr"					=> "Francia",
-);
-
-$label = array(
-	// html head
-	"title"					=> "rTWi - egy rTorrent Web interfész",
-	"description"				=> "rTWi - egy rTorrent Web interfész",
-	"author"				=> "Hudiczius Gábor",
-	"mailto"				=> "ghudiczius@gmail.com?subject=rTWi - egy rTorrent Web interfész",
-
-	// login
-	"username"				=> "Felhasználó",
-	"password"				=> "Jelszó",
-	"rememberme"				=> "Jegyezz meg",
-	"login"					=> "Belépés",
-
-	// menu
-	"torrents"				=> "Torrentek",
-	"peerlist"				=> "Peer lista",
-	"info"					=> "Információ",
-	"filelist"				=> "Fájl lista",
-	"trackerlist"				=> "Tracker lista",
-	"chunksseen"				=> "Elérhető syeletek",
-	"transferlist"				=> "Átviteli lista",
-	"addtorrent"				=> "Torrent hozzáadása",
-	"serverinfo"				=> "Szerver információ",
-	"logout"				=> "Kijelentkezés",
-
-	// misc
-	"ok"					=> "OK",
-	"yes"					=> "Igen",
-	"no"					=> "Nem",
-	
-	"clicktohide"				=> "Kattints ide az elrejtéshez",
-	"clicktoopen"				=> "Kattints ide a lenyitáshoz",
-	"clicktocloseopen"			=> "Kattints ide a bezáráshoz/lenyitáshoz",
-	"clicktochange"				=> "Kattints ide a megváltoztatásához",
-
-	"view"					=> "Nézet",
-	"selectviewtype"			=> "Válassz megjelenítést",
-	"refresh"				=> "Frissítés",
-	"selectrefreshrate"			=> "Válassz frissítési időközt",
-	"language"				=> "Nyelv",
-	"selectlanguage"			=> "Válassz nyelvet",
-
-	"areyousure"				=> "Biztosan törlöd?",
-	"areyousureerase"			=> "Biztosan törlöd?",
-	"alldatawillbedestroyed"		=> "Minden adat törlésre fog kerülni.",
-
-	"homepage"				=> "rTWi honlap",
-
-	"highest"				=> "legmagasabb",
-
-	// add torrent
-	"openfrom"				=> "Megnyitás",
-	"fileupload"				=> "Fájlfeltöltéssel",
-	"url"					=> "URL megadásával",
-	"torrentfile"				=> "Torrent fájl",
-	"torrenturl"				=> "Torrent URL-je",
-	"starttorrent"				=> "Torrent indítása",
-	"starttorrentafteradded"		=> "Torrent indítása letöltés után",
-	"downloadto"				=> "Letöltés",
-
-	// tasks on torrents
-	"selecttask"				=> "Válassz műveletet",
-	"selectone"				=> "Válassz egyet",
-
-	"startall"				=> "Összes indítása",
-	"stopall"				=> "Összes leállítása",
-	"openall"				=> "Összes megnyitása",
-	"closeall"				=> "Összes bezárása",
-	"checkall"				=> "Összes ellenőrzése",
-	"removeall"				=> "Összes eltávolítása",
-	"eraseall"				=> "Összes törlése",
-
-	"start"					=> "Elindít",
-	"stop"					=> "Leállít",
-	"open"					=> "Megnyit",
-	"close"					=> "Bezár",
-	"checkhash"				=> "Hash ellenőrzés",
-	"remove"				=> "Eltávolít",
-	"erase"					=> "Töröl",
-
-	"selectpriority"			=> "Válassz prioritást",
-	"selectdirpriority"			=> "Válassz könyvtár prioritást",
-	"selectfilepriority"			=> "Válassz fájl prioritást",
-
-	// torrent states
-	"started"				=> "Elindítva",
-	"stopped"				=> "Leállítva",
-	"opened"				=> "Nyitva",
-	"closed"				=> "Zárva",
-	"finished"				=> "Kész",
-	"checkhashed"				=> "Hash ellenőrizve",
-
-	"startedsince"				=> "Elindítva:",
-	"stopedsince"				=> "Leállítva:",
-	"openedsince"				=> "Megyyitva:",
-	"closedsince"				=> "Beárva:",
-	"finishedsince"				=> "elkészült:",
-	"hashingsince"				=> "Hash ellenőrés elindítva:",
-
-	"sincepre"				=> "",
-	"sincepost"				=> "óta",
-
-	// torrent stats
-	"details"				=> "Részletek",
-
-	"done"					=> "kész",
-	"downloadfinished"			=> "Letöltés elkészült",
-	"downloadeddata"			=> "Letöltött adatmennyiség",
-	"torrentsize"				=> "Torrent mérete",
-	"uploaded"				=> "Feltöltve",
-	"uploadeddata"				=> "Feltöltött adatmennyiség",
-
-	"percenthashed"				=> "százalék ellenőrizve",
-	"percentcompleted"			=> "százalék elkészült",
-	"estimatedtimeremaining"		=> "Becsült hátralévő idő",
-	"ignorecommands"			=> "Parancsdok figyelmen kívül hagyása",
-	"ratio"					=> "Arány",
-
-	"off"					=> "Leállítva",
-	"low"					=> "Alacsony",
-	"normal"				=> "Normál",
-	"high"					=> "Magas",
-
-	"message"				=> "Üzenet",
-
-	"lasttouched"				=> "Legutóbb módosítva",
-	"filesize"				=> "Fájl mérete",
-	"downloadfile"				=> "Fájl letöltése",
-	"trackergroup"				=> "Tracker csoport",
-	"type"					=> "Típus",
-	"selecttrackerenabled"			=> "Tracker engedélyezése",
-	"mininterval"				=> "Leggyakoribb kapcsolódás",
-
-	// stats
-	"throttle"				=> "Korlát",
-	"uploadspeed"				=> "Feltöltési sebesség",
-	"uploadlimit"				=> "Feltöltési korlát",
-	"nouploadlimit"				=> "Nincs feltöltési korlát",
-	"downloadspeed"				=> "Letöltési sebesség",
-	"downloadlimit"				=> "Letöltési korlát",
-	"nodownloadlimit"			=> "Nincs letöltési korlát",
-	"rate"					=> "Sebesség",
-
-	// info page
-	"name"					=> "Torrent neve",
-	"infohash"				=> "Info hash",
-	"localid"				=> "Azonosító",
-	"localidhtml"				=> "Azonosító (html)",
-	"directory"				=> "Könyvtár",
-	"tiedtofile"				=> "Fájlhoz kötve",
-	"filestats"				=> "Fájlok száma",
-	"files"					=> "fájl",
-	"private"				=> "Privát torrent",
-	"chunks"				=> "Szeletek",
-	"priority"				=> "Prioritás",
-	"statechanged"				=> "Utolsó állapotváltozás",
-	"freediskspace"				=> "Szabad lemezterület",
-	"connectiontype"			=> "Kapcsolat tipusa",
-	"trackers"				=> "Trackerek száma",
-	"peersconnected"			=> "Kapcsolódott peer-ek",
-	"dmaxpeers"				=> "Maximum",
-	"dminpeers"				=> "Minimum",
-	"leechers"				=> "Letöltők száma",
-	"seeders"				=> "Feltöltők száma",
-	"pexenabled"				=> "PEX engedélyezve",
-	"pexsize"				=> "PEX mérete",
-	"upload"				=> "Feltöltés",
-	"download"				=> "Letöltés",
-	"skipped"				=> "Kihagyva",
-
-	// server info page
-	"clientversion"				=> "Kliens verzió",
-	"libraryversion"			=> "Függvénykönyvtár verzió",
-	"workingdirectory"			=> "Munkakönyvtár",
-	"downloaddirectory"			=> "Letöltési könyvtár",
-	"sessiondirectory"			=> "Munkamenet könyvtár",
-	"hostname"				=> "Hosztnév",
-	"pid"					=> "PID",
-	"listeningipaddress"			=> "Kapcsolatot fogadó IP cím",
-	"reportedipaddress"			=> "Tracker felé jelentett IP cím",
-	"portopened"				=> "Nyitott port",
-	"randomport"				=> "Véletlen port",
-	"portrange"				=> "Porttartomány",
-	"udptrackers"				=> "UDP tracker-ek használata",
-	"changedhtstatus"			=> "DHT szerver elindítása/leállítása",
-	"dht"					=> "DHT szerver",
-	"dhtport"				=> "DHT port",
-	"dhtcycle"				=> "DHT kör",
-	"dhtqueries"				=> "DHT fogadott / küldött kérések",
-	"dhtreplies"				=> "DHT fogadott válaszok",
-	"dhtbytes"				=> "DHT olvasott / írt bájtok",
-	"dhtnodes"				=> "DHT pontok",
-	"in"					=> "pont",
-	"buckets"				=> "csokorban",
-	"dhtpeers"				=> "DHT peer-ek",
-	"dhttorrents"				=> "DHT torrentek",
-	"maxuploads"				=> "Feltöltések maximális száma",
-	"maxpeers"				=> "Peer-ek maximális száma",
-	"minpeers"				=> "Peer-ek minimális száma",
-	"memoryusage"				=> "Memóriahasználat",
-	"maxmemoryusage"			=> "Maximális memóriahasználat",
-	"hashcheck"				=> "Hash ellenőrzés",
-	"safesync"				=> "Biztonságos szinkronizálás",
-	"sendbuffer"				=> "Kimeneti puffer",
-	"receivebuffer"				=> "Bejövő puffer",
-
-	// peer list page
-	"address"				=> "IP cím",
-	"port"					=> "Port",
-	"up_rate"				=> "Fel",
-	"down_rate"				=> "Le",
-	"peer_rate"				=> "Peer",
-	"pdone"					=> "Kész",
-	"encrypted"				=> "Titkosítás",
-	"incoming"				=> "Kapcsolat",
-	"pclientversion"			=> "Kliens verziószám",
-
-	// tracker list page
-	"focus"					=> "Fókusz",
-	"enabled"				=> "Engedélyezve",
-	"seedersleechers"			=> "Fel/Le",
-	"lasttimescraped"			=> "Utoljára lekérdezve",
-);
-
-?>
Index: c/includes/rtwi.conf.sample
===================================================================
--- src/includes/rtwi.conf.sample	(revision 53f5ceaa73f2e26bf68bfb1e991963323da16118)
+++ 	(revision )
@@ -1,54 +1,0 @@
-; full url of the rTWi (with a trailing slash)
-base =		http://example.com/
-
-; change, if you've renamed the index.html file
-index =		index.php
-
-; change, if you've renamed the input.php file
-input =		input.php
-
-; path to home directory of users (with heading and trailing slash)
-home_path =	/home/
-
-; path to the file which keeps the user related informations
-user_conf =	/etc/rtorrent/users.conf
-
-; language (english and hungarian is available)
-lang =		en
-
-; site theme (look for themes in the "themes" directory)
-site_theme = 	default_ajax
-
-; do a directory tree, which can be expanded/collapsed
-; set to "false" (without the quotes),
-; if your webserver is running on a slow machine
-; and you have torrents with a lots of files
-; (a few hundreds of files in a single torrent, and more)
-dodirtree =	true
-
-; true if ajax is allowed
-ajax =		true
-
-; true if dht is enabled
-dht =		true
-
-; true if users are allowed to download finished files from the webui
-download =	true
-
-; true if users are allowed to erase downloaded data from the webui
-erase =		true
-
-; true if flags are allowed in peers page
-flags =		false
-
-; true if hiding the filelist is allowed
-hidedirtree =	true
-
-; true if users are allowed to set the language of the web interface
-language =	true
-
-; true if users are allowed to set a meta-refresh interval
-refresh =	true
-
-; true if users are allowed to set throttle
-throttle =	true
Index: c/includes/tools/functions.time.inc.php
===================================================================
--- src/includes/tools/functions.time.inc.php	(revision 53f5ceaa73f2e26bf68bfb1e991963323da16118)
+++ 	(revision )
@@ -1,8 +1,0 @@
-<?php
-
-function getmicrotime() {
-	list( $usec, $sec ) = explode( " ", microtime() );
-	return ( ( float ) $usec + ( float ) $sec );
-}
-
-?>
Index: c/includes/users.conf.sample
===================================================================
--- src/includes/users.conf.sample	(revision 53f5ceaa73f2e26bf68bfb1e991963323da16118)
+++ 	(revision )
@@ -1,19 +1,0 @@
-[user1]
-address =	unix:///home/user1/rpc.socket
-pass =		7e240de74fb1ed08fa08d38063f6a6a91462a815
-
-[user1]
-address =	http://example.com/RPC2
-pass =		7e240de74fb1ed08fa08d38063f6a6a91462a815
-
-[user1]
-address =	:12345
-pass =		7e240de74fb1ed08fa08d38063f6a6a91462a815
-
-[user1]
-address =	123.123.123.123:123456
-pass =		7e240de74fb1ed08fa08d38063f6a6a91462a815
-
-[user1]
-address =	unix:///home/cyla/torrent/.socket/rpc.socket
-pass =		5baa61e4c9b93f3f0682250b6cf8331b7ee68fd8
Index: c/index.php
===================================================================
--- src/index.php	(revision 53f5ceaa73f2e26bf68bfb1e991963323da16118)
+++ 	(revision )
@@ -1,1278 +1,0 @@
-<?php
-
-function myrealpath( $path, $home, $cwd ) {
-	if ( substr( $path, 0, 2 ) == "~/" ) {
-		$path = substr( $path, 2 );
-		$path = "{$home}{$_SESSION["rtwi_nick"]}/{$path}";
-	}
-
-	$oldcwd = getcwd();
-	chdir( $cwd );
-	$newpath = realpath( $path );
-	chdir( $oldcwd );
-
-	return $newpath;
-}
-
-function switch_bytes( $bytes, $d_suffix = "" ) {
-	switch ( $d_suffix ) {
-		case "GB" : {
-			$ret = $bytes / 1024 / 1024 / 1024;
-			$suffix = "GB";
-			break;
-		}
-		case "MB" : {
-			$ret = $bytes / 1024 / 1024;
-			$suffix = "MB";
-			break;
-		}
-		case "KB" : {
-			$ret = $bytes / 1024;
-			$suffix = "KB";
-			break;
-		}
-		default : {
-			if ( $bytes >= 1024 * 1024 * 1024 ) {
-				$ret = $bytes / 1024 / 1024 / 1024;
-				$suffix = "GB";
-			} elseif ( $bytes >= 1024 * 1024 ) {
-				$ret = $bytes / 1024 / 1024;
-				$suffix = "MB";
-			} elseif ( $bytes >= 1024 ) {
-				$ret = $bytes / 1024;
-				$suffix = "KB";
-			} else {
-				$ret = $bytes;
-				$suffix = "B";
-			}
-		}
-	}
-
-	return array( $ret, $suffix );
-}
-
-function prepare_serverinfo_responses( &$responses, &$message, &$config ) {
-	foreach (array_keys($responses) as $key) {
-		$oldkey = str_replace(".", "_", $key);
-		$oldkey = str_replace("=", "", $oldkey);
-		$responses[$oldkey] = $responses[$key];
-	}
-
-	$responses["dht_statistics"] = $responses["dht.statistics"];
-	$responses["dht_statistics_active"] = $responses["dht.statistics"]["active"];
-	$responses["dht_statistics_buckets"] = $responses["dht.statistics"]["buckets"];
-	$responses["dht_statistics_bytes_read"] = $responses["dht.statistics"]["bytes_read"];
-	$responses["dht_statistics_bytes_written"] = $responses["dht.statistics"]["bytes_written"];
-	$responses["dht_statistics_cycle"] = $responses["dht.statistics"]["cycle"];
-	$responses["dht_statistics_dht"] = $responses["dht.statistics"]["dht"];
-	$responses["dht_statistics_errors_caught"] = $responses["dht.statistics"]["errors_caught"];
-	$responses["dht_statistics_errors_received"] = $responses["dht.statistics"]["errors_received"];
-	$responses["dht_statistics_nodes"] = $responses["dht.statistics"]["nodes"];
-	$responses["dht_statistics_peers"] = $responses["dht.statistics"]["peers"];
-	$responses["dht_statistics_peers_max"] = $responses["dht.statistics"]["peers_max"];
-	$responses["dht_statistics_queries_received"] = $responses["dht.statistics"]["queries_received"];
-	$responses["dht_statistics_queries_sent"] = $responses["dht.statistics"]["queries_sent"];
-	$responses["dht_statistics_replies_received"] = $responses["dht.statistics"]["replies_received"];
-	$responses["dht_statistics_throttle"] = $responses["dht.statistics"]["throttle"];
-	$responses["dht_statistics_torrents"] = $responses["dht.statistics"]["torrents"];
-
-	$responses["bind"] = $responses["network.bind_address"];
-	$responses["check_hash"] = $responses["pieces.hash.on_completion"];
-	$responses["connection_leech"] = $responses["protocol.connection.leech"];
-	$responses["connection_seed"] = $responses["protocol.connection.seed"];
-	$responses["dht_port"] = $responses["dht.port"];
-	$responses["directory"] = $responses["directory.default"];
-	$responses["download_rate"] = $responses["throttle.global_down.max_rate"];
-	$responses["http_cacert"] = $responses["network.http.cacert"];
-	$responses["http_capath"] = $responses["network.http.capath"];
-	$responses["http_proxy"] = $responses["network.http.proxy_address"];
-	$responses["ip"] = $responses["network.local_address"];
-	$responses["max_downloads_div"] = $responses["throttle.max_downloads.div"];
-	$responses["max_downloads_global"] = $responses["throttle.max_downloads.global"];
-	$responses["max_file_size"] = $responses["system.file.max_size"];
-	$responses["max_memory_usage"] = $responses["pieces.memory.max"];
-	$responses["max_open_files"] = $responses["network.max_open_files"];
-	$responses["max_open_http"] = $responses["network.http.max_open"];
-	$responses["max_open_sockets"] = $responses["network.max_open_sockets"];
-	$responses["max_peers"] = $responses["throttle.max_peers.normal"];
-	$responses["max_peers_seed"] = $responses["throttle.max_peers.seed"];
-	$responses["max_uploads"] = $responses["throttle.max_uploads"];
-	$responses["max_uploads_div"] = $responses["throttle.max_uploads.div"];
-	$responses["max_uploads_global"] = $responses["throttle.max_uploads.global"];
-	$responses["memory_usage"] = $responses["pieces.memory.current"];
-	$responses["min_peers"] = $responses["throttle.min_peers.normal"];
-	$responses["min_peers_seed"] = $responses["throttle.min_peers.seed"];
-	$responses["name"] = $responses["session.name"];
-	$responses["peer_exchange"] = $responses["protocol.pex"];
-	$responses["port_open"] = $responses["network.port_open"];
-	$responses["port_random"] = $responses["network.port_random"];
-	$responses["port_range"] = $responses["network.port_range"];
-	$responses["preload_min_size"] = $responses["pieces.preload.min_size"];
-	$responses["preload_required_rate"] = $responses["pieces.preload.min_rate"];
-	$responses["preload_type"] = $responses["pieces.preload.type"];
-	$responses["proxy_address"] = $responses["network.proxy_address"];
-	$responses["receive_buffer_size"] = $responses["network.receive_buffer.size"];
-	$responses["safe_sync"] = $responses["pieces.sync.always_safe"];
-	$responses["scgi_dont_route"] = $responses["network.scgi.dont_route"];
-	$responses["send_buffer_size"] = $responses["network.send_buffer.size"];
-	$responses["session"] = $responses["session.path"];
-	$responses["session_lock"] = $responses["session.use_lock"];
-	$responses["session_on_completion"] = $responses["session.on_completion"];
-	$responses["split_file_size"] = $responses["system.file.split_size"];
-	$responses["split_suffix"] = $responses["system.file.split_suffix"];
-	$responses["stats_not_preloaded"] = $responses["pieces.stats_not_preloaded"];
-	$responses["stats_preloaded"] = $responses["pieces.stats_preloaded"];
-	$responses["timeout_safe_sync"] = $responses["pieces.sync.timeout_safe"];
-	$responses["timeout_sync"] = $responses["pieces.sync.timeout"];
-	$responses["tracker_numwant"] = $responses["trackers.numwant"];
-	$responses["upload_rate"] = $responses["throttle.global_up.max_rate"];
-	$responses["use_udp_trackers"] = $responses["trackers.use_udp"];
-	$responses["client_version"] = $responses["system.client_version"];
-	$responses["cwd"] = $responses["system.cwd"];
-	$responses["get_cwd"] = $responses["system.cwd"];
-	$responses["hostname"] = $responses["system.hostname"];
-	$responses["library_version"] = $responses["system.library_version"];
-	$responses["pid"] = $responses["system.pid"];
-	$responses["view_list"] = $responses["view.list"];
-
-	$bytes_down_arr = switch_bytes( $responses["bytes_down"] );
-	$bytes_up_arr = switch_bytes( $responses["bytes_up"] );
-	$download_rate_arr = switch_bytes( $responses["download_rate"], "KB" );
-	$max_memory_usage_arr = switch_bytes( $responses["max_memory_usage"] );
-	$memory_usage_arr = switch_bytes( $responses["memory_usage"] );
-	$preload_min_size_arr = switch_bytes( $responses["preload_min_size"] );
-	$preload_required_rate_arr = switch_bytes( $responses["preload_required_rate"] );
-	$receive_buffer_size_arr = switch_bytes( $responses["receive_buffer_size"] );
-	$send_buffer_size_arr = switch_bytes( $responses["send_buffer_size"] );
-	$upload_rate_arr = switch_bytes( $responses["upload_rate"], "KB" );
-
-	$responses["bytes_down_value"] = sprintf( "%.1f", $bytes_down_arr[0] );
-	$responses["bytes_down_suffix"] = $bytes_down_arr[1];
-	$responses["bytes_up_value"] = sprintf( "%.1f", $bytes_up_arr[0] );
-	$responses["bytes_up_suffix"] = $bytes_up_arr[1];
-	$responses["download_rate_value"] = sprintf( "%.0f", $download_rate_arr[0] );
-	$responses["download_rate_suffix"] = $download_rate_arr[1];
-	$responses["max_memory_usage_value"] = sprintf( "%.1f", $max_memory_usage_arr[0] );
-	$responses["max_memory_usage_suffix"] = $max_memory_usage_arr[1];
-	$responses["memory_usage_value"] = sprintf( "%.1f", $memory_usage_arr[0] );
-	$responses["memory_usage_suffix"] = $memory_usage_arr[1];
-	$responses["preload_min_size_value"] = sprintf( "%.1f", $preload_min_size_arr[0] );
-	$responses["preload_min_size_suffix"] = $preload_min_size_arr[1];
-	$responses["preload_required_rate_value"] = sprintf( "%.1f", $preload_required_rate_arr[0] );
-	$responses["preload_required_rate_suffix"] = $preload_required_rate_arr[1];
-	$responses["receive_buffer_size_value"] = sprintf( "%.1f", $receive_buffer_size_arr[0] );
-	$responses["receive_buffer_size_suffix"] = $receive_buffer_size_arr[1];
-	$responses["send_buffer_size_value"] = sprintf( "%.1f", $send_buffer_size_arr[0] );
-	$responses["send_buffer_size_suffix"] = $send_buffer_size_arr[1];
-	$responses["upload_rate_value"] = sprintf( "%.0f", $upload_rate_arr[0] );
-	$responses["upload_rate_suffix"] = $upload_rate_arr[1];
-
-	$responses["check_hash_value"] = $responses["check_hash"] == 0 ? $message["no"] : $message["yes"];
-	$responses["safe_sync_value"] = $responses["safe_sync"] == 0 ? $message["no"] : $message["yes"];
-	$responses["use_udp_trackers_value"] = $responses["use_udp_trackers"] == 0 ? $message["no"] : $message["yes"];
-
-	$responses["bind_value"] = $responses["bind"] == "0.0.0.0" ? $message["bind_0000"] : $responses["bind"];
-	$responses["ip_value"] = $responses["ip"] == "0.0.0.0" ? $message["ip_0000"] : $responses["ip"];
-	$responses["max_peers_value"] = $responses["max_peers"] == -1 ? $message["disabled"] : $responses["max_peers"];
-	$responses["max_peers_seed_value"] = $responses["max_peers_seed"] == -1 ? $message["disabled"] : $responses["max_peers_seed"];
-	$responses["max_uploads_value"] = $responses["max_uploads"] == -1 ? $message["disabled"] : $responses["max_uploads"];
-	$responses["min_peers_value"] = $responses["min_peers"] == -1 ? $message["disabled"] : $responses["min_peers"];
-	$responses["min_peers_seed_value"] = $responses["min_peers_seed"] == -1 ? $message["disabled"] : $responses["min_peers_seed"];
-	$responses["port_open_value"] = $responses["port_open"] == -1 ? $message["no"] : $message["yes"];
-	$responses["port_random_value"] = $responses["port_random"] == -1 ? $message["no"] : $message["yes"];
-	$responses["port_range_value"] = $responses["port_range"] == -1 ? $message["disabled"] : $responses["port_range"];
-	$responses["proxy_address_value"] = $responses["proxy_address"] == "0.0.0.0" ? $message["proxy_address_0000"] : $responses["proxy_address"];
-	$responses["tracker_numwant_value"] = $responses["tracker_numwant"] == -1 ? $message["disabled"] : $responses["tracker_numwant"];
-
-	$responses["directory_value"] = myrealpath( $responses["directory"], $config["home_path"], $responses["system.cwd"] );
-	$responses["session_value"] = myrealpath( $responses["session"], $config["home_path"], $responses["system.cwd"] );
-
-	if ( $responses["max_file_size"] == -1 ) {
-		$responses["max_file_size_value"] = $message["disabled"];
-	} else {
-		$max_file_size_arr = switch_bytes( $responses["max_file_size"] );
-		$responses["max_file_size_value"] = sprintf( "%.1f", $max_file_size_arr[0] );
-		$responses["max_file_size_suffix"] = $max_file_size_arr[1];
-	}
-
-	if ( $responses["split_file_size"] == -1 ) {
-		$responses["split_file_size_value"] = $message["disabled"];
-	} else {
-		$split_file_size_arr = switch_bytes( $responses["split_file_size"] );
-		$responses["split_file_size_value"] = sprintf( "%.1f", $split_file_size_arr[0] );
-		$responses["split_file_size_suffix"] = $split_file_size_arr[1];
-	}
-
-	if ( $config["dht"] === "1" ) {
-		if ( $responses["dht_statistics_active"] != 0 ) {
-			$dht_statistics_bytes_read_arr = switch_bytes( $responses["dht_statistics_bytes_read"] );
-			$dht_statistics_bytes_written_arr = switch_bytes( $responses["dht_statistics_bytes_written"] );
-
-			$responses["dht_statistics_bytes_read_value"] = sprintf( "%.1f", $dht_statistics_bytes_read_arr[0] );
-			$responses["dht_statistics_bytes_read_suffix"] = $dht_statistics_bytes_read_arr[1];
-			$responses["dht_statistics_bytes_written_value"] = sprintf( "%.1f", $dht_statistics_bytes_written_arr[0] );
-			$responses["dht_statistics_bytes_written_suffix"] = $dht_statistics_bytes_written_arr[1];
-		}
-
-		$responses["dht_statistics_active_value"] = $responses["dht_statistics_active"] == 0 ? $message["dht_0"] : $message["dht_1"];
-	}
-
-	ksort( $responses );
-
-	return true;
-}
-
-function prepare_downloadlist_responses( &$responses, &$message, &$home_path, &$cwd ) {
-	foreach (array_keys($responses) as $key) {
-		$oldkey = str_replace(".", "_", $key);
-		$oldkey = str_replace("=", "", $oldkey);
-		$responses[$oldkey] = $responses[$key];
-	}
-	$responses["d_active"] = $responses["d.state="];
-	$responses["d_down_rate"] = $responses["d.down.rate="];
-	$responses["d_down_total"] = $responses["d.down.total="];
-	$responses["d_skip_rate"] = $responses["d.skip.rate="];
-	$responses["d_skip_total"] = $responses["d.skip.total="];
-	$responses["d_up_rate"] = $responses["d.up.rate="];
-	$responses["d_up_total"] = $responses["d.up.total="];
-
-	$d_bytes_done_arr = switch_bytes( $responses["d_bytes_done"] );
-	$d_chunk_size_arr = switch_bytes( $responses["d_chunk_size"] );
-	$d_completed_bytes_arr = switch_bytes( $responses["d_completed_bytes"] );
-	$d_down_rate_arr = switch_bytes( $responses["d_down_rate"] );
-	$d_down_total_arr = switch_bytes( $responses["d_down_total"] );
-	$d_free_diskspace_arr = switch_bytes( $responses["d_free_diskspace"] );
-	$d_left_bytes_arr = switch_bytes( $responses["d_left_bytes"] );
-	$d_max_file_size_arr = switch_bytes( $responses["d_max_file_size"] );
-	$d_size_bytes_arr = switch_bytes( $responses["d_size_bytes"] );
-	$d_skip_rate_arr = switch_bytes( $responses["d_skip_rate"] );
-	$d_skip_total_arr = switch_bytes( $responses["d_skip_total"] );
-	$d_up_rate_arr = switch_bytes( $responses["d_up_rate"] );
-	$d_up_total_arr = switch_bytes( $responses["d_up_total"] );
-
-	$responses["d_bytes_done_value"] = sprintf( "%.1f", $d_bytes_done_arr[0] );
-	$responses["d_bytes_done_suffix"] = $d_bytes_done_arr[1];
-	$responses["d_chunk_size_value"] = sprintf( "%.1f", $d_chunk_size_arr[0] );
-	$responses["d_chunk_size_suffix"] = $d_chunk_size_arr[1];
-	$responses["d_completed_bytes_value"] = sprintf( "%.1f", $d_completed_bytes_arr[0] );
-	$responses["d_completed_bytes_suffix"] = $d_completed_bytes_arr[1];
-	$responses["d_down_rate_value"] = sprintf( "%.1f", $d_down_rate_arr[0] );
-	$responses["d_down_rate_suffix"] = $d_down_rate_arr[1];
-	$responses["d_down_total_value"] = sprintf( "%.1f", $d_down_total_arr[0] );
-	$responses["d_down_total_suffix"] = $d_down_total_arr[1];
-	$responses["d_free_diskspace_value"] = sprintf( "%.1f", $d_free_diskspace_arr[0] );
-	$responses["d_free_diskspace_suffix"] = $d_free_diskspace_arr[1];
-	$responses["d_left_bytes_value"] = sprintf( "%.1f", $d_left_bytes_arr[0] );
-	$responses["d_left_bytes_suffix"] = $d_left_bytes_arr[1];
-	$responses["d_max_file_size_value"] = sprintf( "%.1f", $d_max_file_size_arr[0] );
-	$responses["d_max_file_size_suffix"] = $d_max_file_size_arr[1];
-	$responses["d_size_bytes_value"] = sprintf( "%.1f", $d_size_bytes_arr[0] );
-	$responses["d_size_bytes_suffix"] = $d_size_bytes_arr[1];
-	$responses["d_skip_rate_value"] = sprintf( "%.1f", $d_skip_rate_arr[0] );
-	$responses["d_skip_rate_suffix"] = $d_skip_rate_arr[1];
-	$responses["d_skip_total_value"] = sprintf( "%.1f", $d_skip_total_arr[0] );
-	$responses["d_skip_total_suffix"] = $d_skip_total_arr[1];
-	$responses["d_up_rate_value"] = sprintf( "%.1f", $d_up_rate_arr[0] );
-	$responses["d_up_rate_suffix"] = $d_up_rate_arr[1];
-	$responses["d_up_total_value"] = sprintf( "%.1f", $d_up_total_arr[0] );
-	$responses["d_up_total_suffix"] = $d_up_total_arr[1];
-
-	$responses["d_active_value"] = $responses["d_active"] == 1 ? $message["d_active_1"] : $message["d_active_0"];
-	$responses["d_complete_value"] = $responses["d_complete"] == 1 ? $message["d_complete_1"] : $message["d_complete_0"];
-	$responses["d_creation_date_value"] = date( "Y-m-d H:i:s", $responses["d_creation_date"] );
-	$responses["d_ignore_commands_value"] = $responses["d_ignore_commands"] == 1 ? $message["d_ignore_commands_1"] : $message["d_ignore_commands_0"];
-	$responses["d_hash_checked_value"] = $responses["d_hash_checked"] == 1 ? $message["d_hash_checked_1"] : $message["d_hash_checked_0"];
-	$responses["d_hash_checking_value"] = $responses["d_hash_checking"] == 1 ? $message["d_hash_checking_1"] : $message["d_hash_checking_0"];
-	$responses["d_multi_file_value"] = $responses["d_multi_file"] == 1 ? $message["d_multi_file_multi"] : $message["d_multi_file_single"];
-	$responses["d_open_value"] = $responses["d_open"] == 1 ? $message["d_open_1"] : $message["d_open_0"];
-	$responses["d_peer_exchange_value"] = $responses["d_peer_exchange"] == 0 ? $message["disabled"] : $message["enabled"];
-	$responses["d_peers_max_value"] = $responses["d_peers_max"] == -1 ? $message["disabled"] : $responses["d_peers_max"];
-	$responses["d_peers_min_value"] = $responses["d_peers_min"] == -1 ? $message["disabled"] : $responses["d_peers_min"];
-	$responses["d_pex_active_value"] = $responses["d_pex_active"] == 1 ? $message["yes"] : $message["no"];
-	$responses["d_private_value"] = $responses["d_private"] == 1 ? $message["yes"] : $message["no"];
-	$responses["d_state_value"] = $responses["d_state"] == 1 ? $message["d_state_1"] : $message["d_state_0"];
-	$responses["d_state_changed_value"] = date( "Y-m-d H:i:s", $responses["d_state_changed"] );
-	$responses["d_tracker_numwant_value"] = $responses["d_tracker_numwant"] == -1 ? $message["disabled"] : $responses["d_tracker_numwant"];
-	$responses["d_uploads_max_value"] = $responses["d_uploads_max"] == -1 ? $message["disabled"] : $responses["d_uploads_max"];
-
-	$responses["d_base_path_value"] = myrealpath( $responses["d_base_path"], $home_path, $cwd );
-	$responses["d_directory_value"] = myrealpath( $responses["d_directory"], $home_path, $cwd );
-	$responses["d_tied_to_file_value"] = myrealpath( $responses["d_tied_to_file"], $home_path, $cwd );
-
-	if ( $responses["d_down_rate"] > 0 ) {
-		$responses["d_estimated_time"] = $responses["d_left_bytes"] / $responses["d_down_rate"];
-		$responses["d_estimated_time_value"] = sprintf( "%dd %02d:%02d", floor( $responses["d_estimated_time"] / 86400 ), floor( $responses["d_estimated_time"] / 3600 ) % 24, floor( $responses["d_estimated_time"] / 60 ) % 60 );
-		$responses["d_percentage"] = $responses["d_completed_bytes"] / $responses["d_size_bytes"];
-		$responses["d_percentage_value"] = floor( $responses["d_completed_bytes"] / $responses["d_size_bytes"] * 100 );
-	} elseif ( $responses["d_hashing"] != 0 ) {
-		$responses["d_estimated_time"] = "";
-		$responses["d_estimated_time_value"] = "";
-		$responses["d_percentage"] = $responses["d_completed_bytes"] / $responses["d_size_bytes"];
-		$responses["d_percentage_value"] = floor( $responses["d_completed_bytes"] / $responses["d_size_bytes"] * 100 );
-		$responses["d_hpercentage"] = $responses["d_chunks_hashed"] / $responses["d_size_chunks"];
-		$responses["d_hpercentage_value"] = floor( $responses["d_chunks_hashed"] / $responses["d_size_chunks"] * 100 );
-	} elseif ( $responses["d_complete"] != 1 ) {
-		$responses["d_estimated_time"] = "";
-		$responses["d_estimated_time_value"] = "";
-		$responses["d_percentage"] = $responses["d.completed_bytes="] / $responses["d.size_bytes="];
-		$responses["d_percentage_value"] = floor( $responses["d.completed_bytes="] / $responses["d.size_bytes="] * 100 );
-	} else {
-		$responses["d_estimated_time"] = "";
-		$responses["d_estimated_time_value"] = "";
-		$responses["d_percentage"] = 1;
-		$responses["d_percentage_value"] = 100;
-	}
-
-	switch ( $responses["d_connection_current"] ) {
-		case "seed" : $responses["d_connection_current_value"] = $message["d_connection_current_seed"]; break;
-		case "initial_seed" : $responses["d_connection_current_value"] = $message["d_connection_current_initial_seed"]; break;
-		default : $responses["d_connection_current_value"] = $message["d_connection_current_leech"]; break;
-	}
-	switch ( $responses["d_hashing"] ) {
-		case 1 : $responses["d_hashing_value"] = $message["d_hashing_1"]; break;
-		case 2 : $responses["d_hashing_value"] = $message["d_hashing_2"]; break;
-		case 3 : $responses["d_hashing_value"] = $message["d_hashing_3"]; break;
-		default : $responses["d_hashing_value"] = $message["d_hashing_0"]; break;
-	}
-	switch ( $responses["d_priority"] ) {
-		case 1 : $responses["d_priority_value"] = $message["d_priority_1"]; break;
-		case 2 : $responses["d_priority_value"] = $message["d_priority_2"]; break;
-		case 3 : $responses["d_priority_value"] = $message["d_priority_3"]; break;
-		default : $responses["d_priority_value"] = $message["d_priority_0"]; break;
-	}
-
-	$responses["d_ratio_value"] = sprintf( "%.3f", $responses["d_ratio"] / 1000 );
-
-	ksort( $responses );
-
-	return true;
-}
-
-function prepare_filelist_responses( &$responses, &$message, &$home_path, &$cwd ) {
-	foreach (array_keys($responses) as $key) {
-		$oldkey = str_replace(".", "_", $key);
-		$oldkey = str_replace("=", "", $oldkey);
-		$responses[$oldkey] = $responses[$key];
-	}
-
-	$responses["f_last_touched"] = sprintf( "%.0f", $responses["f_last_touched"] );
-	$responses["f_range_first"] += 1;
-
-	$f_size_bytes_arr = switch_bytes( $responses["f_size_bytes"] );
-
-	$responses["f_size_bytes_value"] = sprintf( "%.1f", $f_size_bytes_arr[0] );
-	$responses["f_size_bytes_suffix"] = $f_size_bytes_arr[1];
-
-	$responses["f_open_value"] = $responses["f_open"] == 1 ? $message["f_open_1"] : $message["f_open_0"];
-	$responses["f_last_touched_value"] = date( "Y-m-d H:i:s", substr( $responses["f_last_touched"], 0, -6 ) );
-
-	$responses["f_frozen_path_value"] = myrealpath( $responses["f_frozen_path"], $home_path, $cwd );
-
-	if ( $responses["f_size_chunks"] == 0 ) {
-		$responses["f_percentage"] = 1;
-		$responses["f_percentage_value"] = 100;
-	} else {
-		$responses["f_percentage"] = $responses["f_completed_chunks"] / $responses["f_size_chunks"];
-		$responses["f_percentage_value"] = floor( $responses["f_completed_chunks"] / $responses["f_size_chunks"] * 100 );
-	}
-
-	switch ( $responses["f_priority"] ) {
-		case 1 : $responses["f_priority_value"] = $message["f_priority_1"]; break;
-		case 2 : $responses["f_priority_value"] = $message["f_priority_2"]; break;
-		default : $responses["f_priority_value"] = $message["f_priority_0"]; break;
-	}
-
-	ksort( $responses );
-
-	return true;
-}
-
-function prepare_peerlist_responses( &$responses, &$message, &$config = array() ) {
-	foreach (array_keys($responses) as $key) {
-		$oldkey = str_replace(".", "_", $key);
-		$oldkey = str_replace("=", "", $oldkey);
-		$responses[$oldkey] = $responses[$key];
-	}
-
-	if ( $config["flags"] === "1" ) {
-		$responses["p_country"] = strtolower( geoip_country_code_by_name( $responses["p_address"] ) );
-		if ( $responses["p_country"] == "" ) {
-			$responses["p_country"] = "unknown";
-			$responses["p_country_value"] = $message["unknown"];
-		} else {
-			$responses["p_country_value"] = @geoip_country_name_by_name( $responses["p_address"] );
-		}
-	}
-	
-	$p_down_rate_arr = switch_bytes( $responses["p_down_rate"] );
-	$p_down_total_arr = switch_bytes( $responses["p_down_total"] );
-	$p_peer_rate_arr = switch_bytes( $responses["p_peer_rate"] );
-	$p_peer_total_arr = switch_bytes( $responses["p_peer_total"] );
-	$p_up_rate_arr = switch_bytes( $responses["p_up_rate"] );
-	$p_up_total_arr = switch_bytes( $responses["p_up_total"] );
-
-	$responses["p_down_rate_value"] = sprintf( "%.1f", $p_down_rate_arr[0] );
-	$responses["p_down_rate_suffix"] = $p_down_rate_arr[1];
-	$responses["p_down_total_value"] = sprintf( "%.1f", $p_down_total_arr[0] );
-	$responses["p_down_total_suffix"] = $p_down_total_arr[1];
-	$responses["p_peer_rate_value"] = sprintf( "%.1f", $p_peer_rate_arr[0] );
-	$responses["p_peer_rate_suffix"] = $p_peer_rate_arr[1];
-	$responses["p_peer_total_value"] = sprintf( "%.1f", $p_peer_total_arr[0] );
-	$responses["p_peer_total_suffix"] = $p_peer_total_arr[1];
-	$responses["p_up_rate_value"] = sprintf( "%.1f", $p_up_rate_arr[0] );
-	$responses["p_up_rate_suffix"] = $p_up_rate_arr[1];
-	$responses["p_up_total_value"] = sprintf( "%.1f", $p_up_total_arr[0] );
-	$responses["p_up_total_suffix"] = $p_up_total_arr[1];
-
-	$responses["p_encrypted_value"] = $responses["p_encrypted"] == 1 ? $message["p_encrypted_1"] : $message["p_encrypted_0"];
-	$responses["p_incoming_value"] = $responses["p_incoming"] == 1 ? $message["p_incoming_1"] : $message["p_incoming_0"];
-
-	ksort( $responses );
-
-	return true;
-}
-
-function prepare_trackerlist_responses( &$responses, &$message ) {
-	foreach (array_keys($responses) as $key) {
-		$oldkey = str_replace(".", "_", $key);
-		$oldkey = str_replace("=", "", $oldkey);
-		$responses[$oldkey] = $responses[$key];
-	}
-
-	$t_scrape_downloaded_arr = switch_bytes( $responses["t_scrape_downloaded"] );
-
-	$responses["t_scrape_time_last"] = sprintf( "%.0f", $responses["t_scrape_time_last"] );
-
-	$responses["t_enabled_value"] = $responses["t_enabled"] == 1 ? $message["t_enabled_1"] : $message["t_enabled_0"];
-	$responses["t_open_value"] = $responses["t_open"] == 1 ? $message["t_open_1"] : $message["t_open_0"];
-	$responses["t_min_interval_value"] = sprintf( "%02d:%02d:%02d", floor( $responses["t_min_interval"] / 3600 ), $responses["t_min_interval"] / 60 % 60, $responses["t_min_interval"] % 60 );
-	$responses["t_normal_interval_value"] = sprintf( "%02d:%02d:%02d", floor( $responses["t_normal_interval"] / 3600 ), $responses["t_normal_interval"] / 60 % 60, $responses["t_normal_interval"] % 60 );
-
-	if ( $responses["t_scrape_time_last"] == 0 ) {
-		$responses["t_scrape_time_last_value"] = date( "Y-m-d H:i:s", $responses["t_scrape_time_last"] );
-	} else {
-		$responses["t_scrape_time_last_value"] = date( "Y-m-d H:i:s", substr( $responses["t_scrape_time_last"], 0, -6 ) );
-	}
-	$responses["t_type_value"] = $responses["t_type"] == 1 ? $message["t_type_1"] : $message["t_type_2"];
-
-	ksort( $responses );
-
-	return true;
-}
-
-function addlanguages( &$xml, &$root, &$node, &$languages ) {
-	$root->setAttribute( "language", $_SESSION["rtwi_language"] );
-
-	// adding languages
-	$rrrnode = $node->appendChild( $xml->createElement( "languages" ) );
-	$rrrnode->setAttribute( "value", $_SESSION["rtwi_language"] );
-	foreach ( $languages as $key => $val ) {
-		$rrnode = $rrrnode->appendChild( $xml->createElement( "language" ) );
-		$rrnode->setAttribute( "value", $key );
-		$rrnode->setAttribute( "title", $val );
-	}
-}
-
-function addrefreshrates( &$xml, &$root, &$node, &$refreshrates ) {
-	$root->setAttribute( "refreshrate", $_SESSION["rtwi_refresh"] );
-
-	// adding refresh rates
-	$rrrnode = $node->appendChild( $xml->createElement( "refreshrates" ) );
-	$rrrnode->setAttribute( "value", $_SESSION["rtwi_refresh"] );
-	foreach ( $refreshrates as $key => $val ) {
-		$rrnode = $rrrnode->appendChild( $xml->createElement( "refreshrate" ) );
-		$rrnode->setAttribute( "value", substr( $key, 12 ) );
-		$rrnode->setAttribute( "title", $val );
-	}
-}
-
-function addviewtypes( &$xml, &$root, &$node, &$view_list, &$viewtypes ) {
-	$root->setAttribute( "viewtype", $_SESSION["rtwi_view"] );
-
-	// adding viewtypes
-	$vcrnode = $node->appendChild( $xml->createElement( "viewtypes" ) );
-	$vcrnode->setAttribute( "value", $_SESSION["rtwi_view"] );
-	foreach ( $view_list as $key => $val ) {
-		$vcnode = $vcrnode->appendChild( $xml->createElement( "viewtype" ) );
-		$vcnode->setAttribute( "value", $val );
-		$vcnode->setAttribute( "title", isset( $viewtypes["viewtype_{$val}"] ) ? $viewtypes["viewtype_{$val}"] : $val );
-	}
-}
-
-function build_xmltree( &$dstruct, &$tree, &$xml, $fullpath, $responses ) {
-	foreach ( $dstruct as $key => $val ) {
-		if ( is_array( $val ) ) {
-			$subtree = $tree->appendChild( $xml->createElement( "directory" ) );
-			$subtree->setAttribute( "id", sha1( mt_rand() ) );
-			$subtree->setAttribute( "dirname", $key );
-			$subtree->setAttribute( "dirpath", urlencode( "{$fullpath}/{$key}" ) );
-			$ret = build_xmltree( $val, $subtree, $xml, "{$fullpath}/{$key}", $responses );
-		} else {
-			$ret = $tree->appendChild( $xml->createElement( "file" ) );
-			$ret->setAttribute( "id", $key );
-			$ret->setAttribute( "filename", $val );
-			xmlrpc_multiappend( $xml, $ret, $responses[$key] );
-		}
-	}
-
-	return $ret;
-}
-
-function xmlrpc_multiappend( &$xml, &$dnode, &$responses ) {
-	$keys = array_keys( $responses );
-	reset( $responses );
-	while ( list( $rkey, $rval ) = @each( $responses ) ) {
-		$rkey = str_replace( "=", "", $rkey);
-		$rval = str_replace( "&", "&amp;", $rval );
-		if ( array_key_exists( "{$rkey}_suffix", $responses ) ) {
-			$node = $dnode->appendChild( $xml->createElement( $rkey, $rval ) );
-			$node->setAttribute( "suffix", $responses["{$rkey}_suffix"] );
-			$node->setAttribute( "value", $responses["{$rkey}_value"] );
-			unset( $responses["{$rkey}_suffix"] );
-			unset( $responses["{$rkey}_value"] );
-		} elseif ( array_key_exists( "{$rkey}_value", $responses ) ) {
-			$node = $dnode->appendChild( $xml->createElement( $rkey, $rval ) );
-			$node->setAttribute( "value", $responses["{$rkey}_value"] );
-			unset( $responses["{$rkey}_value"] );
-		} elseif ( is_array( $rval ) ) {
-		} else {
-			$node = $dnode->appendChild( $xml->createElement( $rkey, $rval ) );
-		}
-	}
-
-	return true;
-}
-
-error_reporting( E_ALL );
-error_reporting( E_ALL ^ E_NOTICE );
-
-set_time_limit( 10 );
-
-// setting default
-session_start();
-
-// reading config files
-$config = parse_ini_file( "includes/rtwi.conf", true );
-$users = parse_ini_file( $config["user_conf"], true );
-
-// set language from cookie if exists
-if ( !isset( $_SESSION["rtwi_language"] ) ) {
-	$_SESSION["rtwi_language"] = isset( $_COOKIE["rtwi_language"] ) ? $_COOKIE["rtwi_language"] : $config["lang"];
-}
-
-
-// including neccessary files
-require_once( "includes/classes/xmlrpc_handler.inc.php" );
-require_once( "includes/messages.{$_SESSION["rtwi_language"]}.inc.php" );
-require_once( "includes/tools/functions.time.inc.php" );
-
-$callnum = 0;
-$calltime = 0;
-$multicallnum = 0;
-
-// initializing xmlrpc methods
-$xmlrpc_methods = array(
-	"si"	=> $config["dht"] === "1" ? 
-			array( "dht.statistics", "network.bind_address", "pieces.hash.on_completion", "protocol.connection.leech", "protocol.connection.seed", "dht.port", "directory.default", "throttle.global_down.max_rate", "network.http.cacert", "network.http.capath", "network.http.proxy_address", "network.local_address", "throttle.max_downloads.div", "throttle.max_downloads.global", "system.file.max_size", "pieces.memory.max", "network.max_open_files", "network.http.max_open", "network.max_open_sockets", "throttle.max_peers.normal", "throttle.max_peers.seed", "throttle.max_uploads", "throttle.max_uploads.div", "throttle.max_uploads.global", "pieces.memory.current", "throttle.min_peers.normal", "throttle.min_peers.seed", "session.name", "protocol.pex", "network.port_open", "network.port_random", "network.port_range", "pieces.preload.min_size", "pieces.preload.min_rate", "pieces.preload.type", "network.proxy_address", "network.receive_buffer.size", "pieces.sync.always_safe", "network.scgi.dont_route", "network.send_buffer.size", "session.path", "session.use_lock", "session.on_completion", "system.file.split_size", "system.file.split_suffix", "pieces.stats_not_preloaded", "pieces.stats_preloaded", "pieces.sync.timeout_safe", "pieces.sync.timeout", "trackers.numwant", "throttle.global_up.max_rate", "trackers.use_udp", "system.client_version", "system.cwd", "system.hostname", "system.library_version", "system.pid", "view.list" ) :
-			array( "network.bind_address", "pieces.hash.on_completion", "protocol.connection.leech", "protocol.connection.seed", "directory.default", "throttle.global_down.max_rate", "network.http.cacert", "network.http.capath", "network.http.proxy_address", "network.local_address", "throttle.max_downloads.div", "throttle.max_downloads.global", "system.file.max_size", "pieces.memory.max", "network.max_open_files", "network.http.max_open", "network.max_open_sockets", "throttle.max_peers.normal", "throttle.max_peers.seed", "throttle.max_uploads", "throttle.max_uploads.div", "throttle.max_uploads.global", "pieces.memory.current", "throttle.min_peers.normal", "throttle.min_peers.seed", "session.name", "protocol.pex", "network.port_open", "network.port_random", "network.port_range", "pieces.preload.min_size", "pieces.preload.min_rate", "pieces.preload.type", "network.proxy_address", "network.receive_buffer.size", "pieces.sync.always_safe", "network.scgi.dont_route", "network.send_buffer.size", "session.path", "session.use_lock", "session.on_completion", "system.file.split_size", "system.file.split_suffix", "pieces.stats_not_preloaded", "pieces.stats_preloaded", "pieces.sync.timeout_safe", "pieces.sync.timeout", "trackers.numwant", "throttle.global_up.max_rate", "trackers.use_udp", "system.client_version", "system.cwd", "system.hostname", "system.library_version", "system.pid", "view.list" ),
-	"d"	=> array( "d.base_filename=", "d.base_path=", "d.bytes_done=", "d.chunk_size=", "d.chunks_hashed=", "d.complete=", "d.completed_bytes=", "d.completed_chunks=", "d.connection_current=", "d.connection_leech=", "d.connection_seed=", "d.creation_date=", "d.custom1=", "d.custom2=", "d.custom3=", "d.custom4=", "d.custom5=", "d.directory=", "d.down.rate=", "d.down.total=", "d.free_diskspace=", "d.hash=", "d.hashing=", "d.ignore_commands=", "d.left_bytes=", "d.local_id=", "d.local_id_html=", "d.max_file_size=", "d.max_size_pex=", "d.message=", "d.name=", "d.peer_exchange=", "d.peers_accounted=", "d.peers_complete=", "d.peers_connected=", "d.peers_max=", "d.peers_min=", "d.peers_not_connected=", "d.priority=", "d.priority_str=", "d.ratio=", "d.size_bytes=", "d.size_chunks=", "d.size_files=", "d.size_pex=", "d.skip.rate=", "d.skip.total=", "d.state=", "d.state_changed=", "d.tied_to_file=", "d.tracker_focus=", "d.tracker_numwant=", "d.tracker_size=", "d.up.rate=", "d.up.total=", "d.uploads_max=", "d.is_active=", "d.is_hash_checked=", "d.is_hash_checking=", "d.is_multi_file=", "d.is_open=", "d.is_pex_active=", "d.is_private=" ),
-	"f"	=> array( "f.completed_chunks=", "f.frozen_path=", "f.is_created=", "f.is_open=", "f.last_touched=", "f.match_depth_next=", "f.match_depth_prev=", "f.offset=", "f.path=", "f.path_components=", "f.path_depth=", "f.priority=", "f.range_first=", "f.range_second=", "f.size_bytes=", "f.size_chunks=" ),
-	"p"	=> array( "p.address=", "p.client_version=", "p.completed_percent=", "p.down_rate=", "p.down_total=", "p.id=", "p.id_html=", "p.options_str=", "p.peer_rate=", "p.peer_total=", "p.port=", "p.up_rate=", "p.up_total=", "p.is_encrypted=", "p.is_incoming=", "p.is_obfuscated=", "p.is_snubbed=" ),
-	"t"	=> array( "t.group=", "t.id=", "t.min_interval=", "t.normal_interval=", "t.scrape_complete=", "t.scrape_downloaded=", "t.scrape_incomplete=", "t.scrape_time_last=", "t.type=", "t.url=", "t.is_enabled=", "t.is_open=" ),
-	"g"	=> array( "f.path", "f.frozen_path", "f.size_bytes" ),
-);
-
-// getting request values
-if ( isset( $_REQUEST["format"] ) ) {
-	$format = $_REQUEST["format"];
-} else {
-	$format = "";
-}
-
-if ( isset( $_REQUEST["mod"] ) ) {
-	$mod = $_REQUEST["mod"];
-} else {
-	$mod = "";
-}
-
-if ( isset( $_REQUEST["hash"] ) ) {
-	$hash = $_REQUEST["hash"];
-} else {
-	$hash = "";
-}
-
-if ( isset( $_REQUEST["page"] ) ) {
-	switch ( $_REQUEST["page"] ) {
-		case "transfers" : {
-			$page = "transfers";
-			break;
-		}
-		case "chunks" : {
-			$page = "chunks";
-			break;
-		}
-		case "trackers" : {
-			$page = "trackers";
-			break;
-		}
-		case "files" : {
-			$page = "files";
-			break;
-		}
-		case "peers" : {
-			$page = "peers";
-			break;
-		}
-		default : {
-			$page = "info";
-			break;
-		}
-	}
-} else {
-	$page = "info";
-}
-
-if ( isset( $_REQUEST["id"] ) ) {
-	$id = $_REQUEST["id"];
-	settype( $id, "int" );
-} else {
-	$id = -1;
-}
-
-if ( isset( $_REQUEST["path"] ) ) {
-	$path = $_REQUEST["path"];
-} else {
-	$path = "";
-}
-
-if ( isset( $_REQUEST["ajax"] ) && $_REQUEST["ajax"] === "true" && $config["ajax"] === "1" ) {
-	$ajax = true;
-} else {
-	$ajax = false;
-}
-
-// checking if user is logged in
-if ( ( isset( $_SESSION["rtwi_auth"] ) && $_SESSION["rtwi_auth"] === 1 ) || ( isset( $_COOKIE["rtwi_auth"] ) && $_COOKIE["rtwi_auth"] == 1 && isset( $_COOKIE["rtwi_nick"] ) && array_key_exists( $_COOKIE["rtwi_nick"], $users ) && $users[$_COOKIE["rtwi_nick"]]["pass"] == $_COOKIE["rtwi_pass"] ) ) {
-	// setting values from cookie if exists
-	if ( !isset( $_SESSION["rtwi_auth"] ) || $_SESSION["rtwi_auth"] !== 1 ) {
-		$_SESSION["rtwi_auth"] = 1;
-		$_SESSION["rtwi_nick"] = $_COOKIE["rtwi_nick"];
-		$_SESSION["rtwi_cadr"] = $users[$_COOKIE["rtwi_nick"]]["address"];
-
-		// setting rtorrent's connection address
-		if ( substr( $_SESSION["rtwi_cadr"], 0, 7 ) === "unix://" ) {
-			$_SESSION["rtwi_cadr"] = myrealpath( substr( $_SESSION["rtwi_cadr"], 7 ), $config["home_path"], "{$config["home_path"]}{$_SESSION["rtwi_nick"]}" );
-			$_SESSION["rtwi_cadr"] = "unix://{$_SESSION["rtwi_cadr"]}";
-		}
-	}
-
-	// initializing rtorrent connection
-	$xmlrpc = new xmlrpc_handler( $_SESSION["rtwi_cadr"], 10 );
-
-	if ( $xmlrpc->getconntype() == "http" ) {
-		$xmlrpc->setaccount( $_SESSION["rtwi_nick"], $_SESSION["rtwi_password"] );
-	}
-
-	// setting sort view mode from cookie if exists
-	if ( !isset( $_SESSION["rtwi_view"] ) ) {
-		$_SESSION["rtwi_view"] = isset( $_COOKIE["rtwi_view"] ) ? $_COOKIE["rtwi_view"] : "default";
-	}
-	// setting auto-refresh rate from cookie if exists
-	if ( !isset( $_SESSION["rtwi_refresh"] ) ) {
-		$_SESSION["rtwi_refresh"] = isset( $_COOKIE["rtwi_refresh"] ) ? $_COOKIE["rtwi_refresh"] : 0;
-	}
-} else {
-	// show login page if not logged in
-	$mod = "login";
-}
-
-// initializing xml
-$xml = new DOMDocument( "1.0", "utf-8" );
-$xml->formatOutput = true;
-
-$root = $xml->appendChild( $xml->createElement( "root" ) );
-
-$root->appendChild( $xml->createElement( "mod", $mod ) );
-$root->appendChild( $xml->createElement( "hash", $hash ) );
-$root->appendChild( $xml->createElement( "page", $page ) );
-$root->appendChild( $xml->createElement( "id", $id ) );
-$root->appendChild( $xml->createElement( "burl", $config["base"] ) );
-$root->appendChild( $xml->createElement( "url", $config["index"] ) );
-$root->appendChild( $xml->createElement( "iurl", $config["input"] ) );
-$root->appendChild( $xml->createElement( "curl", str_replace( "&", "&amp;", $_SERVER["REQUEST_URI"] ) ) );
-$root->appendChild( $xml->createElement( "purl", isset( $_SESSION["rtwi_lastpage"] ) ? str_replace( "&", "&amp;", $_SESSION["rtwi_lastpage"] ) : "" ) );
-$root->appendChild( $xml->createElement( "datetime", date( "Y. m. d. H:i:s", time() ) ) );
-$root->appendChild( $xml->createElement( "language", $_SESSION["rtwi_language"] ) );
-
-// adding allowed settings in xml
-foreach ( $config as $key => $val ) {
-	if ( $val === "1" ) {
-		$root->appendChild( $xml->createElement( "allow_{$key}", "true" ) );
-	}
-}
-
-// adding translation to xml
-$labels = $root->appendChild( $xml->createElement( "labels" ) );
-foreach ( $label as $key => $val ) {
-	$labels->appendChild( $xml->createElement( $key, $val ) );
-}
-$labels->getElementsByTagName( "mailto" )->item( 0 )->nodeValue = str_rot13( base64_encode( str_rot13( $labels->getElementsByTagName( "mailto" )->item( 0 )->nodeValue ) ) );
-
-//print_r( $_SESSION );
-//print_r( $_REQUEST );
-
-// deciding what to do
-if ( $ajax === true ) {
-	$layout_file = "layout.ajax.index.xsl";
-} else {
-	$layout_file = "layout.main.index.xsl";
-}
-if ( ( isset( $xmlrpc ) && ( $xmlrpc->geterrorsnum() == 0 ) ) || ( $mod == "login" ) ) {
-	switch ( $mod ) {
-		case "login" : { // login
-			// adding language select
-			if ( $config["language"] ) {
-				addlanguages( $xml, $root, $root, $languages );
-			}
-
-			$layout_file = "layout.main.login.xsl";
-
-			break;
-		}
-		case "serverinfo" : { // server info
-			// creating torrents node
-			$tnode = $root->appendChild( $xml->createElement( "torrents" ) );
-			// adding auto-refresh select
-			if ( $config["refresh"] ) {
-				addrefreshrates( $xml, $root, $tnode, $refreshrates );
-			}
-			// adding language select
-			if ( $config["language"] ) {
-				addlanguages( $xml, $root, $tnode, $languages );
-			}
-
-			// retrieving server info
-			if ( !$xmlrpc->setmrequest( $xmlrpc_methods["si"] ) || !$xmlrpc->call() || !$xmlrpc->parse() ) {
-				$_SESSION["rtwi_err"] = $xmlrpc->geterrors();
-				break;
-			}
-			$si_responses = $xmlrpc->mfetch( $xmlrpc_methods["si"] );
-
-			// getting up/down rates for totals
-			$methodlist = array( "d.down.rate=", "d.up.rate=" );
-			if ( !$xmlrpc->setrequest( "d.multicall2", array_merge( array( '', $_SESSION["rtwi_view"] ), $methodlist ) ) || !$xmlrpc->call() || !$xmlrpc->parse() ) {
-				$_SESSION["rtwi_err"] = $xmlrpc->geterrors();
-				break;
-			}
-			$response = $xmlrpc->fetch();
-
-			// counting totals
-			$bytes_down = 0;
-			$bytes_up = 0;
-			for ( $i = 0; $i < count( $response ); $i++ ) {
-				for ( $r = 0; $r < count( $methodlist ); $r++ ) {
-					$methodval = preg_replace( "/(.)\.get_(.*)=/", "$1_$2", $methodlist[$r] );
-					$d_responses[$i][$methodval] = $response[$i][$r];
-				}
-				$bytes_down += $d_responses[$i]["d_down_rate"];
-				$bytes_up += $d_responses[$i]["d_up_rate"];
-			}
-
-			$si_responses["bytes_down"] = $bytes_down;
-			$si_responses["bytes_up"] = $bytes_up;
-
-			// preparing values
-			prepare_serverinfo_responses( $si_responses, $message, $config );
-
-			// addng some more values to xml (total up/down rate, limits)
-			$node = $tnode->appendChild( $xml->createElement( "bytes_down", $si_responses["bytes_down"] ) );
-			$node->setAttribute( "suffix", $si_responses["bytes_down_suffix"] );
-			$node->setAttribute( "value", $si_responses["bytes_down_value"] );
-			$node = $tnode->appendChild( $xml->createElement( "bytes_up", $si_responses["bytes_up"] ) );
-			$node->setAttribute( "suffix", $si_responses["bytes_up_suffix"] );
-			$node->setAttribute( "value", $si_responses["bytes_up_value"] );
-			$node = $tnode->appendChild( $xml->createElement( "download_rate", $si_responses["download_rate"] ) );
-			$node->setAttribute( "suffix", $si_responses["download_rate_suffix"] );
-			$node->setAttribute( "value", $si_responses["download_rate_value"] );
-			$node = $tnode->appendChild( $xml->createElement( "upload_rate", $si_responses["upload_rate"] ) );
-			$node->setAttribute( "suffix", $si_responses["upload_rate_suffix"] );
-			$node->setAttribute( "value", $si_responses["upload_rate_value"] );
-
-			// addng some more values to xml (total up/down rate, limits)
-			$inode = $tnode->appendChild( $xml->createElement( "server_info" ) );
-			xmlrpc_multiappend( $xml, $inode, $si_responses );
-
-			$layout_file = "layout.main.index.xsl";
-
-			break;
-		}
-		case "addtorrent" : { // add a new torrent
-			// getting download directory
-			if ( !$xmlrpc->setmrequest( array( "directory.default", "system.cwd" ) ) || !$xmlrpc->call() || !$xmlrpc->parse() ) {
-				$_SESSION["rtwi_err"] = $xmlrpc->geterrors();
-				break;
-			}
-			$directories = $xmlrpc->fetch();
-			$directory = $directories[0];
-			$cwd = $directories[1];
-
-			// full download directory path
-			$directory = myrealpath( $directories[0][0], $config["home_path"], $directories[1][0] );
-
-			$ppath = substr( $path, 0, strrpos( $path, "/" ) );
-			// scanning for subdirectories
-			$scan = scandir( myrealpath( "{$directory}/{$path}", $config["home_path"], $directories[1][0] ) );
-			// checking free space
-			$freespace = switch_bytes( disk_free_space( myrealpath( "{$directory}/{$ppath}", $config["home_path"], $directories[1][0] ) ) );
-
-			// adding values to xml
-			$atnode = $root->appendChild( $xml->createElement( "addtorrent" ) );
-			$atnode->setAttribute( "name", $ppath );
-			$atnode->setAttribute( "path", $path );
-			$atnode->setAttribute( "ppath", urlencode( $ppath ) );
-			$atnode->setAttribute( "freespace", disk_free_space( "{$directory}/{$ppath}" ) );
-			$atnode->setAttribute( "freespace_value", sprintf( "%.1f", $freespace[0] ) );
-			$atnode->setAttribute( "freespace_suffix", $freespace[1] );
-
-			// adding language select
-			if ( $config["language"] === "1" ) {
-				addlanguages( $xml, $root, $atnode, $languages );
-			}
-
-			// checking subdirectories for free space
-			foreach( $scan as $key => $val ) {
-				$dpath = str_replace( "//", "/", "{$path}/{$val}" );
-				$fdpath = str_replace( "//", "/", "{$directory}/{$dpath}" );
-				if ( ( is_dir( $fdpath ) || ( is_link( $fdpath ) && is_dir( readlink( $fdpath ) ) ) ) && substr( $val, 0, 1 ) != "."  ) {
-					$freespace = switch_bytes( disk_free_space( $fdpath ) );
-
-					$dnode = $atnode->appendChild( $xml->createElement( "dlpath" ) );
-					$dnode->setAttribute( "name", $val );
-					$dnode->setAttribute( "path", urlencode( $dpath ) );
-					$dnode->setAttribute( "freespace", disk_free_space( $fdpath ) );
-					$dnode->setAttribute( "freespace_value", sprintf( "%.1f", $freespace[0] ) );
-					$dnode->setAttribute( "freespace_suffix", $freespace[1] );
-				}
-			}
-
-			$layout_file = "layout.main.index.xsl";
-
-			break;
-		}
-		case "torrent" : { // torrent
-			// creating torrents node
-			$tnode = $root->appendChild( $xml->createElement( "torrents" ) );
-			// adding auto-refresh select
-			if ( $config["refresh"] ) {
-				addrefreshrates( $xml, $root, $tnode, $refreshrates );
-			}
-			// adding language select
-			if ( $config["language"] ) {
-				addlanguages( $xml, $root, $tnode, $languages );
-			}
-
-			// retrieving server info
-			if ( !$xmlrpc->setmrequest( $xmlrpc_methods["si"] ) || !$xmlrpc->call() || !$xmlrpc->parse() ) {
-				$_SESSION["rtwi_err"] = $xmlrpc->geterrors();
-				break;
-			}
-			$si_responses = $xmlrpc->mfetch( $xmlrpc_methods["si"] );
-
-			// retrieving download info
-			if ( !$xmlrpc->setrequest( "d.multicall2", array_merge( array( $hash, $_SESSION["rtwi_view"] ), $xmlrpc_methods["d"] ) ) || !$xmlrpc->call() || !$xmlrpc->parse() ) {
-				$_SESSION["rtwi_err"] = $xmlrpc->geterrors();
-				break;
-			}
-			$response = $xmlrpc->fetch();
-
-			// counting totals
-			$bytes_down = 0;
-			$bytes_up = 0;
-			$torrent = false;
-			for ( $i = 0; $i < count( $response ); $i++ ) {
-				for ( $r = 0; $r < count( $xmlrpc_methods["d"] ); $r++ ) {
-					$methodval = preg_replace( "/(.)\.(get|is)_(.*)=/", "$1_$3", $xmlrpc_methods["d"][$r] );
-					$d_responses[$i][$methodval] = $response[$i][$r];
-				}
-				$bytes_down += $d_responses[$i]["d_down_rate"];
-				$bytes_up += $d_responses[$i]["d_up_rate"];
-
-				// if hash matches save the download data
-				if ( $d_responses[$i]["d.hash="] == $hash ) {
-					$torrent = $d_responses[$i];
-				}
-			}
-			unset( $d_responses );
-
-			// when we have a match
-			if ( is_array( $torrent ) ) {
-				// prepare download variables
-				prepare_downloadlist_responses( $torrent, $message, $config["home_path"], $si_responses["system.cwd"] );
-				// decide what to do
-				switch ( $page ) {
-					case "peers" : { // peer list page
-						// create peer nodes
-						$node = $tnode->appendChild( $xml->createElement( "torrent_peers_root" ) );
-						$node = $node->appendChild( $xml->createElement( "torrent_peers" ) );
-
-						// retrieve peer list info
-						if ( !$xmlrpc->setrequest( "p.multicall", array_merge( array( $torrent["d_hash"], 0 ), $xmlrpc_methods["p"] ) ) || !$xmlrpc->call() || !$xmlrpc->parse() ) {
-							$_SESSION["rtwi_err"] = $xmlrpc->geterrors();
-							break;
-						}
-						$response = $xmlrpc->fetch();
-						
-						// process the peer info
-						for ( $i = 0; $i < count( $response ); $i++ ) {
-							for ( $r = 0; $r < count( $xmlrpc_methods["p"] ); $r++ ) {
-								$methodval = preg_replace( "/(.)\.(get|is)_(.*)=/", "$1_$3", $xmlrpc_methods["p"][$r] );
-								$responses[$i][$methodval] = $response[$i][$r];
-							}
-						}
-						// adding an ID to each peer in the list
-						for ( $i = 0; $i < $torrent["d_peers_connected"]; $i++ ) {
-							prepare_peerlist_responses( $responses[$i], $message, $config );
-							$pnode = $node->appendChild( $xml->createElement( "peer" ) );
-							$pnode->setAttribute( "id", $i );
-							xmlrpc_multiappend( $xml, $pnode, $responses[$i] );
-						}
-
-
-						break;
-					}
-					case "info" : {
-						// crate info nodes
-						$node = $tnode->appendChild( $xml->createElement( "torrent_info_root" ) );
-						$node = $node->appendChild( $xml->createElement( "torrent_info" ) );
-
-						break;
-					}
-					case "files" : {
-						// create file list nodes
-						$node = $tnode->appendChild( $xml->createElement( "torrent_files_root" ) );
-						$node = $node->appendChild( $xml->createElement( "torrent_files" ) );
-
-						// create downloads root direcrory node
-						$node = $node->appendChild( $xml->createElement( "files_root" ) );
-						$node = $node->appendChild( $xml->createElement( "directory" ) );
-						$node->setAttribute( "dirname", $torrent["d_base_filename"] );
-
-						$fst = getmicrotime();
-
-						// retreive file list info
-						if ( !$xmlrpc->setrequest( "f.multicall", array_merge( array( $torrent["d_hash"], 0 ), $xmlrpc_methods["f"] ) ) || !$xmlrpc->call() || !$xmlrpc->parse() ) {
-							$_SESSION["rtwi_err"] = $xmlrpc->geterrors();
-							break;
-						}
-						$response = $xmlrpc->fetch();
-
-						// process the file info
-						for ( $i = 0; $i < count( $response ); $i++ ) {
-							for ( $r = 0; $r < count( $xmlrpc_methods["f"] ); $r++ ) {
-								$methodval = preg_replace( "/(.)\.(get|is)_(.*)=/", "$1_$3", $xmlrpc_methods["f"][$r] );
-								$responses[$i][$methodval] = $response[$i][$r];
-							}
-						}
-
-						// build som kind of struct
-						$dstruct = array();
-						for ( $i = 0; $i < $torrent["d_size_files"]; $i++ ) {
-							prepare_filelist_responses( $responses[$i], $message, $home_path, $si_responses["system.cwd"] );
-
-							$n = 0;
-							$tmp = &$dstruct;
-							foreach ( $responses[$i]["f_path_components"] as $key => $val ) {
-								if ( count( $responses[$i]["f_path_components"] ) == ++$n ) {
-									$tmp[$i] = $val;
-								} else {
-									if ( !isset( $tmp[$val] ) ) {
-										$tmp[$val] = array();
-									}
-									$tmp = &$tmp[$val];
-								}
-							}
-
-						}
-						// build an xml tree of the files
-						$fnode = build_xmltree( $dstruct, $node, $xml, $torrent["d_directory_value"], $responses );
-
-						$ftt = getmicrotime();
-
-						break;
-					}
-					case "trackers" : {
-						// creating tracker list nodes
-						$node = $tnode->appendChild( $xml->createElement( "torrent_trackers_root" ) );
-						$node = $node->appendChild( $xml->createElement( "torrent_trackers" ) );
-
-						// retrieving tracker list info
-						if ( !$xmlrpc->setrequest( "t.multicall", array_merge( array( $torrent["d_hash"], 0 ), $xmlrpc_methods["t"] ) ) || !$xmlrpc->call() || !$xmlrpc->parse() ) {
-							$_SESSION["rtwi_err"] = $xmlrpc->geterrors();
-							break;
-						}
-						$response = $xmlrpc->fetch();
-						// processing the tracker info
-						for ( $i = 0; $i < count( $response ); $i++ ) {
-							for ( $r = 0; $r < count( $xmlrpc_methods["t"] ); $r++ ) {
-								$methodval = preg_replace( "/(.)\.(get|is)_(.*)=/", "$1_$3", $xmlrpc_methods["t"][$r] );
-								$responses[$i][$methodval] = $response[$i][$r];
-							}
-						}
-						// adding an ID to each tracker in the list
-						for ( $i = 0; $i < $torrent["d_tracker_size"]; $i++ ) {
-							prepare_trackerlist_responses( $responses[$i], $message, $config["home_path"] );
-							$tracnode = $node->appendChild( $xml->createElement( "tracker" ) );
-							$tracnode->setAttribute( "id", $i );
-							xmlrpc_multiappend( $xml, $tracnode, $responses[$i] );
-						}
-
-						break;
-					}
-					case "chunks" : { // unimplemented
-						$node = $tnode->appendChild( $xml->createElement( "torrent_chunks_root" ) );
-						$node = $node->appendChild( $xml->createElement( "torrent_chunks" ) );
-
-						break;
-					}
-					case "transfers" : { // unimplemented
-						$node = $tnode->appendChild( $xml->createElement( "torrent_transfers_root" ) );
-						$node = $node->appendChild( $xml->createElement( "torrent_transfers" ) );
-
-						break;
-					}
-				}
-				// adding the download info to the xml
-				xmlrpc_multiappend( $xml, $node, $torrent );
-			} else {
-				$_SESSION["rtwi_err"] = "nohashfound";
-			}
-
-			$si_responses["bytes_down"] = $bytes_down;
-			$si_responses["bytes_up"] = $bytes_up;
-
-			// adding values to xml
-			prepare_serverinfo_responses( $si_responses, $message, $home_path, $config );
-
-			// addng some more values to xml (total up/down rate, limits)
-			$node = $tnode->appendChild( $xml->createElement( "bytes_down", $si_responses["bytes_down"] ) );
-			$node->setAttribute( "suffix", $si_responses["bytes_down_suffix"] );
-			$node->setAttribute( "value", $si_responses["bytes_down_value"] );
-			$node = $tnode->appendChild( $xml->createElement( "bytes_up", $si_responses["bytes_up"] ) );
-			$node->setAttribute( "suffix", $si_responses["bytes_up_suffix"] );
-			$node->setAttribute( "value", $si_responses["bytes_up_value"] );
-			$node = $tnode->appendChild( $xml->createElement( "download_rate", $si_responses["download_rate"] ) );
-			$node->setAttribute( "suffix", $si_responses["download_rate_suffix"] );
-			$node->setAttribute( "value", $si_responses["download_rate_value"] );
-			$node = $tnode->appendChild( $xml->createElement( "upload_rate", $si_responses["upload_rate"] ) );
-			$node->setAttribute( "suffix", $si_responses["upload_rate_suffix"] );
-			$node->setAttribute( "value", $si_responses["upload_rate_value"] );
-
-			// decide what to send back to the browser
-			if ( $ajax === true ) {
-				$layout_file = "layout.ajax.index.xsl";
-			} else {
-				$layout_file = "layout.main.index.xsl";
-			}
-
-			break;
-		}
-		case "getfile" : { // download a file
-			// checking if users are allowed to download
-			if ( !$config["download"] ) {
-				$_SESSION["rtwi_err"] = "downloadnotallowed";
-				header( "location: {$url["index"]}" );
-				exit;
-			} elseif ( $id < 0 ) { // checking if the file id is given and is valid
-				$_SESSION["rtwi_err"] = "noidfound";
-				header( "location: {$url["index"]}" );
-				exit;
-			} else {
-				// retrieving server info
-				if ( !$xmlrpc->setmrequest( $xmlrpc_methods["si"] ) || !$xmlrpc->call() || !$xmlrpc->parse() ) {
-					$_SESSION["rtwi_err"] = $xmlrpc->geterrors();
-					break;
-				}
-				$si_responses = $xmlrpc->mfetch( $xmlrpc_methods["si"] );
-
-				// retrieving download info
-				if ( !$xmlrpc->setrequest( "download_list", array( "", $_SESSION["rtwi_view"] ) ) || !$xmlrpc->call() || !$xmlrpc->parse() ) {
-					$_SESSION["rtwi_err"] = $xmlrpc->geterrors();
-					break;
-				}
-				$torrents = $xmlrpc->fetch();
-
-				// checking if we've found the torrent
-				if ( in_array( $hash, $torrents ) ) {
-					// getting the filename
-					if ( !$xmlrpc->setmrequest( $xmlrpc_methods["g"], array( "${hash}:f${id}" ) ) || !$xmlrpc->call() || !$xmlrpc->parse() ) {
-						$_SESSION["rtwi_err"] = $xmlrpc->geterrors();
-						break;
-					}
-					$response = $xmlrpc->mfetch( $xmlrpc_methods["g"] );
-
-					// getting the absolute path of the download's directory
-					$d_directory_value = myrealpath( dirname($response["f.frozen_path"]), $config["home_path"], $si_responses["system.cwd"] );
-				} else {
-					$_SESSION["rtwi_err"] = "nohashfound";
-					$layout_file = "layout.main.index.xsl";
-				}
-			}
-
-			break;
-		}
-		default : { // torrents
-			// retrieving server info
-			if ( !$xmlrpc->setmrequest( $xmlrpc_methods["si"] ) || !$xmlrpc->call() || !$xmlrpc->parse() ) {
-				$_SESSION["rtwi_err"] = $xmlrpc->geterrors();
-				break;
-			}
-			$si_responses = $xmlrpc->mfetch( $xmlrpc_methods["si"] );
-
-			// creating torrents node
-			$tnode = $root->appendChild( $xml->createElement( "torrents" ) );
-			// adding sort view select
-			addviewtypes( $xml, $root, $tnode, $si_responses["view.list"], $viewtypes );
-			// adding auto-refresh select
-			if ( $config["refresh"] ) {
-				addrefreshrates( $xml, $root, $tnode, $refreshrates );
-			}
-			// adding language select
-			if ( $config["language"] ) {
-				addlanguages( $xml, $root, $tnode, $languages );
-			}
-			// retrieving download info
-			if ( !$xmlrpc->setrequest( "d.multicall2", array_merge( array( '', $_SESSION["rtwi_view"] ), $xmlrpc_methods["d"] ) ) || !$xmlrpc->call() || !$xmlrpc->parse() ) {
-				$_SESSION["rtwi_err"] = $xmlrpc->geterrors();
-				break;
-			}
-			$response = $xmlrpc->fetch();
-
-			// valirables for counting total up/down rate
-			$bytes_down = 0;
-			$bytes_up = 0;
-			// process the download info
-			for ( $i = 0; $i < count( $response ); $i++ ) {
-				for ( $r = 0; $r < count( $xmlrpc_methods["d"] ); $r++ ) {
-					$methodval = preg_replace( "/(.)\.(get|is)_(.*)=/", "$1_$3", $xmlrpc_methods["d"][$r] );
-					$d_responses[$i][$methodval] = $response[$i][$r];
-				}
-				// oincreasing total up/down rate with the current download's rates
-				$bytes_down += $d_responses[$i]["d_down_rate"];
-				$bytes_up += $d_responses[$i]["d_up_rate"];
-
-				// formatting and inserting values to xml
-				prepare_downloadlist_responses( $d_responses[$i], $message, $home_path, $si_responses["system.cwd"] );
-				$ttnode = $tnode->appendChild( $xml->createElement( "torrent" ) );
-				xmlrpc_multiappend( $xml, $ttnode, $d_responses[$i] );
-			}
-
-			// setting total up/down rate
-			$si_responses["bytes_down"] = $bytes_down;
-			$si_responses["bytes_up"] = $bytes_up;
-
-			// adding values to xml
-			prepare_serverinfo_responses( $si_responses, $message, $config );
-
-			// addng some more values to xml (total up/down rate, limits)
-			$node = $tnode->appendChild( $xml->createElement( "bytes_down", $si_responses["bytes_down"] ) );
-			$node->setAttribute( "suffix", $si_responses["bytes_down_suffix"] );
-			$node->setAttribute( "value", $si_responses["bytes_down_value"] );
-			$node = $tnode->appendChild( $xml->createElement( "bytes_up", $si_responses["bytes_up"] ) );
-			$node->setAttribute( "suffix", $si_responses["bytes_up_suffix"] );
-			$node->setAttribute( "value", $si_responses["bytes_up_value"] );
-			$node = $tnode->appendChild( $xml->createElement( "download_rate", $si_responses["download_rate"] ) );
-			$node->setAttribute( "suffix", $si_responses["download_rate_suffix"] );
-			$node->setAttribute( "value", $si_responses["download_rate_value"] );
-			$node = $tnode->appendChild( $xml->createElement( "upload_rate", $si_responses["upload_rate"] ) );
-			$node->setAttribute( "suffix", $si_responses["upload_rate_suffix"] );
-			$node->setAttribute( "value", $si_responses["upload_rate_value"] );
-
-			$layout_file = "layout.main.index.xsl";
-
-			break;
-		}
-	}
-} elseif ( isset( $xmlrpc ) ) {
-	$_SESSION["rtwi_err"] = $xmlrpc->geterrors();
-
-	if ( $ajax === true ) {
-		$layout_file = "layout.ajax.index.xsl";
-	} else {
-		$layout_file = "layout.main.index.xsl";
-	}
-} else {
-	// adding language select
-	if ( $config["language"] ) {
-		addlanguages( $xml, $root, $root, $languages );
-	}
-
-	if ( $ajax === true ) {
-		$layout_file = "layout.ajax.index.xsl";
-	} else {
-		$layout_file = "layout.main.index.xsl";
-	}
-}
-
-// adding (error) message to xml
-if ( isset( $_SESSION["rtwi_err"] ) && $_SESSION["rtwi_err"] != "" ) {
-	if ( is_array( $_SESSION["rtwi_err"] ) ) {
-		$lasterr = array_pop( $_SESSION["rtwi_err"] );
-		$preverr = array_pop( $_SESSION["rtwi_err"] );
-		$_SESSION["rtwi_err"] = $lasterr;
-	}
-	$node = $root->appendChild( $xml->createElement( "err" ) );
-	$mnode = $node->appendChild( $xml->createElement( "errmsg" ) );
-	$mnode->appendChild( $xml->createElement( "msg", $message[$_SESSION["rtwi_err"]] ) );
-	if ( in_array( $_SESSION["rtwi_err"], array( "xmlrpc_fault", "xmlrpc_scgi_connect_failed", "xmlrpc_gw_connect_failed", "xmlrpc_request_invalidtype" ) ) ) {
-		$mnode = $node->appendChild( $xml->createElement( "errmsg" ) );
-		$mnode->appendChild( $xml->createElement( "msg", isset( $preverr ) ? $preverr : $_SESSION["rtwi_err"] ) );
-	}
-
-	$_SESSION["rtwi_err"] = "";
-	unset( $_SESSION["rtwi_err"] );
-}
-
-// setting referrer
-if ( $ajax === false && $mod != "getfile" ) {
-	$_SESSION["rtwi_lastpage"] = $_SERVER["REQUEST_URI"];
-}
-
-// displaying the page
-if ( $mod != "getfile" ) {
-	if ( $format == "xml" ) {
-		print $xml->SaveXML();
-	} else {
-		require_once( "includes/classes/xsl_handler.inc.php" );
-		$page = new page_handler( $config["site_theme"], $layout_file, $xml );
-		$page->parse();
-		$text = $page->fetch();
-		$len = strlen( $text );
-
-		@header( "content-length: {$len}" );
-		@header( "content-type: text/html; charset=utf-8" );
-		@header( "content-language: hu" );
-		@header( "cache-control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0" );
-		@header( "pragma: no-cache" );
-		@header( "expires: thu, 1 jan 1970 00:00:00 gmt" );
-		@header( "imagetoolbar: no" );
-
-		print $text;
-	}
-} else { // sending file to download
-	// getting the filename
-	$path = "{$d_directory_value}/{$response["f.path"]}";
-	$filesize = filesize( $path );
-
-	// set time limit to 0, so the user actually can download the whole file set_time_limit( 0 );
-
-	// sending headers
-	@header( "Content-Description: File Transfer" );
-	@header( "Content-Type: application/force-download" );
-	@header( "Content-Length: {$filesize}" );
-	@header( "Content-Disposition: attachment; filename=\"{$response["f.path"]}\"" );
-	
-	// sending the file
-	readfile( $path );
-}
-
-?>
Index: c/input.php
===================================================================
--- src/input.php	(revision 53f5ceaa73f2e26bf68bfb1e991963323da16118)
+++ 	(revision )
@@ -1,1039 +1,0 @@
-<?php
-
-function myrealpath( $path, $home, $cwd ) {
-	if ( substr( $path, 0, 2 ) == "~/" ) {
-		$path = substr( $path, 2 );
-		$path = "{$home}{$_SESSION["rtwi_nick"]}/{$path}";
-	}
-
-	$oldcwd = getcwd();
-	chdir( $cwd );
-	$newpath = realpath( $path );
-	chdir( $oldcwd );
-
-	return $newpath;
-}
-
-error_reporting( E_ALL );
-error_reporting( E_ALL ^ E_NOTICE );
-
-set_time_limit( 10 );
-
-session_start();
-
-$config = parse_ini_file( "includes/rtwi.conf", true );
-$users = parse_ini_file( $config["user_conf"], true );
-
-require_once( "includes/classes/xmlrpc_handler.inc.php" );
-require_once( "includes/classes/bittorrent_handler.inc.php" );
-require_once( "includes/tools/functions.time.inc.php" );
-
-$st = getmicrotime();
-$callnum = 0;
-$calltime = 0;
-$multicallnum = 0;
-
-if ( isset( $_REQUEST["mod"] ) ) {
-	$mod = $_REQUEST["mod"];
-} else {
-	$mod = "";
-}
-
-if ( isset( $_REQUEST["hash"] ) ) {
-	$hash = $_REQUEST["hash"];
-} else {
-	$hash = "";
-}
-
-if ( ( !isset( $_SESSION["rtwi_auth"] ) || $_SESSION["rtwi_auth"] !== 1 ) && !in_array( $_REQUEST["mod"], array( "login", "changelanguage" ) ) ) {
-	header( "location: {$config["index"]}" );
-	exit;
-} else {
-	$xmlrpc = new xmlrpc_handler( $_SESSION["rtwi_cadr"], 10 );
-}
-
-$xml = new DOMDocument( "1.0", "utf-8" );
-$xml->formatOutput = true;
-
-$root = $xml->appendChild( $xml->createElement( "root" ) );
-
-//print_r( $_SESSION );
-//print_r( $_REQUEST );
-
-switch ( $_REQUEST["mod"] ) {
-	case "login" : { // login
-		if ( isset( $_REQUEST["loginname"] ) && isset( $_REQUEST["loginpass"] ) && $_REQUEST["loginname"] != "" && $_REQUEST["loginpass"] != "" && array_key_exists( $_REQUEST["loginname"], $users ) && $users[$_REQUEST["loginname"]]["pass"] == sha1( $_REQUEST["loginpass"] ) ) {
-			$_SESSION["rtwi_auth"] = 1;
-			$_SESSION["rtwi_nick"] = $_REQUEST["loginname"];
-			$_SESSION["rtwi_cadr"] = $users[$_REQUEST["loginname"]]["address"];
-
-			// setting rtorrent's connection address
-			if ( preg_match( "|^unix://(.+)$|", $_SESSION["rtwi_cadr"], $match ) ) {
-				$_SESSION["rtwi_cadr"] = myrealpath( substr( $_SESSION["rtwi_cadr"], 7 ), $config["home_path"], "{$config["home_path"]}{$_SESSION["rtwi_nick"]}" );
-				$_SESSION["rtwi_cadr"] = "unix://{$_SESSION["rtwi_cadr"]}";
-			} elseif ( preg_match( "<^(http|https)://(.*)$>", $_SESSION["rtwi_cadr"], $match ) ) {
-				$_SESSION["rtwi_password"] = $_REQUEST["loginpass"];
-			}
-
-			if ( isset( $_REQUEST["rememberme"] ) && $_REQUEST["rememberme"] == "on" ) {
-				setcookie( "rtwi_auth", 1, time() + 60 * 60 * 24 * 365 );
-				setcookie( "rtwi_nick", $_REQUEST["loginname"], time() + 60 * 60 * 24 * 365 );
-				setcookie( "rtwi_pass", sha1( $_REQUEST["loginpass"] ), time() + 60 * 60 * 24 * 365 );
-			}
-
-			$_SESSION["rtwi_err"] = "succlogin";
-			header( "location: {$config["index"]}" );
-			exit;
-		} else {
-			$_SESSION["rtwi_err"] = "badlogin";
-			header( "location: {$config["index"]}" );
-			exit;
-		}
-
-		break;
-	}
-	case "logout" : { // logout
-		$_SESSION["rtwi_auth"] = 0;
-		$_SESSION["rtwi_nick"] = "";
-		$_SESSION["rtwi_cadr"] = "";
-		$_SESSION["rtwi_view"] = "";
-		$_SESSION["rtwi_refresh"] = 0;
-		$_SESSION["rtwi_language"] = "";
-		$_SESSION["rtwi_password"] = "";
-
-		unset( $_SESSION["rtwi_auth"] );
-		unset( $_SESSION["rtwi_nick"] );
-		unset( $_SESSION["rtwi_cadr"] );
-		unset( $_SESSION["rtwi_scgi"] );
-		unset( $_SESSION["rtwi_view"] );
-		unset( $_SESSION["rtwi_refresh"] );
-		unset( $_SESSION["rtwi_language"] );
-		unset( $_SESSION["rtwi_password"] );
-
-		setcookie( "rtwi_auth", 0 );
-		setcookie( "rtwi_nick", "" );
-
-		$_SESSION["rtwi_err"] = "succlogout";
-		header( "location: {$config["index"]}" );
-		exit;
-
-		break;
-	}
-	case "changeview" : { // change view
-		if ( isset( $_REQUEST["viewtype"] ) && $_REQUEST["viewtype"] != "" ) {
-			if ( !$xmlrpc->setrequest( "view.list", "" ) || !$xmlrpc->call() || !$xmlrpc->parse() ) {
-				$_SESSION["rtwi_err"] = $xmlrpc->geterrors();
-				header( "location: {$config["index"]}" );
-				exit;
-			}
-			$viewtypes = $xmlrpc->fetch();
-
-			if ( in_array( $_REQUEST["viewtype"], $viewtypes ) ) {
-				$_SESSION["rtwi_view"] = $_REQUEST["viewtype"];
-			} else {
-				$_SESSION["rtwi_err"] = "badviewtype";
-				header( "location: {$config["index"]}" );
-				exit;
-			}
-
-			setcookie( "rtwi_view", $_SESSION["rtwi_view"], time() + 60 * 60 * 24 * 30 );
-
-			$_SESSION["rtwi_err"] = "succviewchange";
-			header( "location: {$config["index"]}" );
-			exit;
-		} else {
-			$_SESSION["rtwi_err"] = "noviewtype";
-			header( "location: {$config["index"]}" );
-			exit;
-		}
-
-		break;
-	}
-	case "changerefresh" : { // change view
-		if ( $config["refresh"] !== "1" ) {
-			$_SESSION["rtwi_err"] = "refreshnotallowed";
-			header( "location: {$config["index"]}" );
-			exit;
-		}
-		if ( isset( $_REQUEST["refreshrate"] ) && $_REQUEST["refreshrate"] != "" ) {
-			$refreshrate = $_REQUEST["refreshrate"];
-			settype( $refreshrate, "int" );
-			if ( $refreshrate < 0 ) {
-				$refreshrate = 0;
-			}
-
-			$_SESSION["rtwi_refresh"] = $refreshrate;
-
-			setcookie( "rtwi_refresh", $_SESSION["rtwi_refresh"], time() + 60 * 60 * 24 * 30 );
-
-			$_SESSION["rtwi_err"] = "succrefreshchange";
-			header( "location: {$_SESSION["rtwi_lastpage"]}" );
-			exit;
-		} else {
-			$_SESSION["rtwi_err"] = "norefreshrate";
-			header( "location: {$_SESSION["rtwi_lastpage"]}" );
-			exit;
-		}
-
-		break;
-	}
-	case "changelanguage" : { // change language
-		if ( $config["language"] !== "1" ) {
-			$_SESSION["rtwi_err"] = "languagenotallowed";
-			header( "location: {$config["index"]}" );
-			exit;
-		}
-		if ( isset( $_REQUEST["language"] ) && $_REQUEST["language"] != "" ) {
-			$language = $_REQUEST["language"];
-			if ( is_readable( "includes/messages.{$language}.inc.php" ) ) {
-				$_SESSION["rtwi_language"] = $language;
-
-				setcookie( "rtwi_language", $_SESSION["rtwi_language"], time() + 60 * 60 * 24 * 30 );
-
-				$_SESSION["rtwi_err"] = "succlanguagechange";
-				header( "location: {$_SESSION["rtwi_lastpage"]}" );
-				exit;
-			} else {
-				$_SESSION["rtwi_err"] = "badlanguage";
-				header( "location: {$_SESSION["rtwi_lastpage"]}" );
-				exit;
-			}
-		} else {
-			$_SESSION["rtwi_err"] = "nolanguage";
-			header( "location: {$_SESSION["rtwi_lastpage"]}" );
-			exit;
-		}
-
-		break;
-	}
-	case "changethrottle" : { // change view
-		if ( $config["throttle"] !== "1" ) {
-			$_SESSION["rtwi_err"] = "throttlenotallowed";
-			header( "location: {$config["index"]}" );
-			exit;
-		}
-		if ( isset( $_REQUEST["upspeed"] ) && $_REQUEST["upspeed"] != "" && isset( $_REQUEST["downspeed"] ) && $_REQUEST["downspeed"] != "" ) {
-			$upspeed = $_REQUEST["upspeed"];
-			settype( $upspeed, "int" );
-			if ( $upspeed < 0 ) {
-				$upspeed = 0;
-			}
-			$downspeed = $_REQUEST["downspeed"];
-			settype( $downspeed, "int" );
-			if ( $downspeed < 0 ) {
-				$downspeed = 0;
-			}
-
-			if ( !$xmlrpc->setrequest( "throttle.global_up.max_rate.set_kb", array(0, $upspeed) ) || !$xmlrpc->call() ) {
-				$_SESSION["rtwi_err"] = $xmlrpc->geterrors();
-				header( "location: {$_SESSION["rtwi_lastpage"]}" );
-				exit;
-			}
-			if ( !$xmlrpc->setrequest( "throttle.global_down.max_rate.set_kb", array(0, $downspeed) ) || !$xmlrpc->call() ) {
-				$_SESSION["rtwi_err"] = $xmlrpc->geterrors();
-				header( "location: {$_SESSION["rtwi_lastpage"]}" );
-				exit;
-			}
-
-			$_SESSION["rtwi_err"] = "succthrottlechange";
-			header( "location: {$_SESSION["rtwi_lastpage"]}" );
-			exit;
-		} else {
-			$_SESSION["rtwi_err"] = "badthrottlevals";
-			header( "location: {$_SESSION["rtwi_lastpage"]}" );
-			exit;
-		}
-
-		break;
-	}
-	case "addtorrent" : { // add a torrent
-		if ( !isset( $_REQUEST["tfmethod"] ) || !in_array( $_REQUEST["tfmethod"], array( "url", "file" ) ) ) {
-			$_SESSION["rtwi_err"] = "badtfmethod";
-			header( "location: {$config["index"]}?mod=addtorrent" );
-			exit;
-		}
-
-		if ( !$xmlrpc->setrequest( "download_list", "" ) || !$xmlrpc->call() || !$xmlrpc->parse() ) {
-			$_SESSION["rtwi_err"] = $xmlrpc->geterrors();
-			header( "location: {$config["index"]}?mod=addtorrent}" );
-			exit;
-		}
-		$torrents = $xmlrpc->fetch();
-
-		if ( !$xmlrpc->setmrequest( array( "directory.default", "system.cwd" ) ) || !$xmlrpc->call() || !$xmlrpc->parse() ) {
-			$_SESSION["rtwi_err"] = $xmlrpc->geterrors();
-			header( "location: {$config["index"]}?mod=addtorrent}" );
-			exit;
-		}
-		$directories = $xmlrpc->fetch();
-		$directory = $directories[0][0];
-		$cwd = $directories[1][0];
-
-		$directory = myrealpath( $directory, $config["home_path"], $cwd );
-
-		if ( $_REQUEST["tfmethod"] == "url" ) {
-			if ( !isset( $_REQUEST["torrenturl"] ) || $_REQUEST["torrenturl"] == "" ) {
-				$_SESSION["rtwi_err"] = "notorrenturl";
-				header( "location: {$config["index"]}?mod=addtorrent" );
-				exit;
-			} elseif ( ( substr( $_REQUEST["torrenturl"], 0, 7 ) != "http://" ) && ( substr( $_REQUEST["torrenturl"], 0, 8 ) != "https://" ) && ( substr( $_REQUEST["torrenturl"], 0, 8 ) != "magnet:?" ) ) {
-				$_SESSION["rtwi_err"] = "notanurl";
-				header( "location: {$config["index"]}?mod=addtorrent" );
-				exit;
-			}
-			$torrent = str_replace("&", "&amp;", $_REQUEST["torrenturl"]);
-		} else {
-			if ( !isset( $_FILES ) || !is_array( $_FILES ) ) {
-				$_SESSION["rtwi_err"] = "notorrentfileuploaded";
-				header( "location: {$config["index"]}?mod=addtorrent" );
-				exit;
-			}
-			switch ( $_FILES["torrentfile"]["error"] ) {
-				case 0 : {
-					if ( is_uploaded_file( $_FILES["torrentfile"]["tmp_name"] ) ) {
-						$torrent = file_get_contents( $_FILES["torrentfile"]["tmp_name"] );
-						$xmlrpc->set_type( $torrent, "base64" );
-					} else {
-						$_SESSION["rtwi_err"] = "rtfileattack";
-						header( "location: {$config["index"]}?mod=addtorrent" );
-						exit;
-					}
-
-					break;
-				}
-				case 1 : {
-					$_SESSION["rtwi_err"] = "rtfileinisize";
-					header( "location: {$config["index"]}?mod=addtorrent" );
-					exit;
-				
-					break;
-				}
-				case 2 : {
-					$_SESSION["rtwi_err"] = "rtfileformsize";
-					header( "location: {$config["index"]}?mod=addtorrent" );
-					exit;
-				
-					break;
-				}
-				case 3 : {
-					$_SESSION["rtwi_err"] = "rtfilepartial";
-					header( "location: {$config["index"]}?mod=addtorrent" );
-					exit;
-				
-					break;
-				}
-				case 4 : {
-					$_SESSION["rtwi_err"] = "rtfilenofile";
-					header( "location: {$config["index"]}?mod=addtorrent" );
-					exit;
-				
-					break;
-				}
-				case 6 : {
-					$_SESSION["rtwi_err"] = "rtfilenotmpdir";
-					header( "location: {$config["index"]}?mod=addtorrent" );
-					exit;
-				
-					break;
-				}
-				case 7 : {
-					$_SESSION["rtwi_err"] = "rtfilenowrite";
-					header( "location: {$config["index"]}?mod=addtorrent" );
-					exit;
-				
-					break;
-				}
-				default : {
-					$_SESSION["rtwi_err"] = "rtfileother";
-					header( "location: {$config["index"]}?mod=addtorrent" );
-					exit;
-				
-					break;
-				}
-			}
-		}
-
-		$dlpath = $_REQUEST["dlpath"];
-		$dlpath = myrealpath( "{$directory}/{$dlpath}", $config["home_path"], $cwd );
-
-		$param = array( "", $torrent );
-		if ( $dlpath != "" ) {
-			$param[] = "d.directory.set={$dlpath}";
-		}
-
-		if ( $_REQUEST["tfmethod"] == "url" || isset( $_REQUEST["keeptorrentfile"] ) && $_REQUEST["keeptorrentfile"] == "on"  ) {
-			if ( isset( $_REQUEST["torrentstart"] ) && $_REQUEST["torrentstart"] == "start" ) {
-				$method = "load.start";
-			} else {
-				$method = "load.normal";
-			}
-		} else {
-			if ( isset( $_REQUEST["torrentstart"] ) && $_REQUEST["torrentstart"] == "start" ) {
-				$method = "load.raw_start";
-			} else {
-				$method = "load.raw";
-			}
-		}
-		if ( !$xmlrpc->setrequest( $method, $param ) || !$xmlrpc->call() ) {
-			$_SESSION["rtwi_err"] = $xmlrpc->geterrors();
-			header( "location: {$config["index"]}" );
-			exit;
-		}
-
-		$_SESSION["rtwi_err"] = "succtorrentload";
-		header( "location: {$config["index"]}" );
-		exit;
-
-		break;
-	}
-	case "torrentstart" : { // start a torrent
-		if ( !$xmlrpc->setrequest( "download_list", "" ) || !$xmlrpc->call() || !$xmlrpc->parse() ) {
-			$_SESSION["rtwi_err"] = $xmlrpc->geterrors();
-			header( "location: {$config["index"]}" );
-			exit;
-		}
-		$torrents = $xmlrpc->fetch();
-
-		if ( !in_array( $hash, $torrents ) ) {
-			$_SESSION["rtwi_err"] = "nohashfound";
-			header( "location: {$config["index"]}" );
-			exit;
-		}
-
-		if ( !$xmlrpc->setrequest( "d.start", $hash ) || !$xmlrpc->call() ) {
-			$_SESSION["rtwi_err"] = $xmlrpc->geterrors();
-			header( "location: {$config["index"]}" );
-			exit;
-		}
-
-		sleep( 1 );
-
-		$_SESSION["rtwi_err"] = "succtorrentstart";
-		header( "location: {$config["index"]}" );
-		exit;
-
-		break;
-	}
-	case "torrentopen" : { // open a torrent
-		if ( !$xmlrpc->setrequest( "download_list", "" ) || !$xmlrpc->call() || !$xmlrpc->parse() ) {
-			$_SESSION["rtwi_err"] = $xmlrpc->geterrors();
-			header( "location: {$config["index"]}" );
-			exit;
-		}
-		$torrents = $xmlrpc->fetch();
-
-		if ( !in_array( $hash, $torrents ) ) {
-			$_SESSION["rtwi_err"] = "nohashfound";
-			header( "location: {$config["index"]}" );
-			exit;
-		}
-
-		if ( !$xmlrpc->setrequest( "d.open", $hash ) || !$xmlrpc->call() ) {
-			$_SESSION["rtwi_err"] = $xmlrpc->geterrors();
-			header( "location: {$config["index"]}" );
-			exit;
-		}
-
-		sleep( 1 );
-
-		$_SESSION["rtwi_err"] = "succtorrentopen";
-		header( "location: {$config["index"]}" );
-		exit;
-
-		break;
-	}
-	case "torrentstop" : { // stop a torrent
-		if ( !$xmlrpc->setrequest( "download_list", "" ) || !$xmlrpc->call() || !$xmlrpc->parse() ) {
-			$_SESSION["rtwi_err"] = $xmlrpc->geterrors();
-			header( "location: {$config["index"]}" );
-			exit;
-		}
-		$torrents = $xmlrpc->fetch();
-
-		if ( !in_array( $hash, $torrents ) ) {
-			$_SESSION["rtwi_err"] = "nohashfound";
-			header( "location: {$config["index"]}" );
-			exit;
-		}
-
-		if ( !$xmlrpc->setrequest( "d.stop", $hash ) || !$xmlrpc->call() ) {
-			$_SESSION["rtwi_err"] = $xmlrpc->geterrors();
-			header( "location: {$config["index"]}" );
-			exit;
-		}
-
-		sleep( 1 );
-
-		$_SESSION["rtwi_err"] = "succtorrentstop";
-		header( "location: {$config["index"]}" );
-		exit;
-
-		break;
-	}
-	case "torrentclose" : { // close a torrent
-		if ( !$xmlrpc->setrequest( "download_list", "" ) || !$xmlrpc->call() || !$xmlrpc->parse() ) {
-			$_SESSION["rtwi_err"] = $xmlrpc->geterrors();
-			header( "location: {$config["index"]}" );
-			exit;
-		}
-		$torrents = $xmlrpc->fetch();
-
-		if ( !in_array( $hash, $torrents ) ) {
-			$_SESSION["rtwi_err"] = "nohashfound";
-			header( "location: {$config["index"]}" );
-			exit;
-		}
-
-		if ( !$xmlrpc->setmrequest( array( "d.stop", "d.close" ), array( $hash ) ) || !$xmlrpc->call() ) {
-			$_SESSION["rtwi_err"] = $xmlrpc->geterrors();
-			header( "location: {$config["index"]}" );
-			exit;
-		}
-
-		sleep( 1 );
-
-		$_SESSION["rtwi_err"] = "succtorrentclose";
-		header( "location: {$config["index"]}" );
-		exit;
-
-		break;
-	}
-	case "torrentcheckhash" : { // check hash for a torrent
-		if ( !$xmlrpc->setrequest( "download_list", "" ) || !$xmlrpc->call() || !$xmlrpc->parse() ) {
-			$_SESSION["rtwi_err"] = $xmlrpc->geterrors();
-			header( "location: {$config["index"]}" );
-			exit;
-		}
-		$torrents = $xmlrpc->fetch();
-
-		if ( !in_array( $hash, $torrents ) ) {
-			$_SESSION["rtwi_err"] = "nohashfound";
-			header( "location: {$config["index"]}" );
-			exit;
-		}
-
-		if ( !$xmlrpc->setrequest( "d.check_hash", $hash ) || !$xmlrpc->call() ) {
-			$_SESSION["rtwi_err"] = $xmlrpc->geterrors();
-			header( "location: {$config["index"]}" );
-			exit;
-		}
-
-		sleep( 1 );
-
-		$_SESSION["rtwi_err"] = "succtorrentcheckhash";
-		header( "location: {$config["index"]}" );
-		exit;
-
-		break;
-	}
-	case "torrentremove" : { // remove a torrent
-		if ( !$xmlrpc->setrequest( "download_list", "" ) || !$xmlrpc->call() || !$xmlrpc->parse() ) {
-			$_SESSION["rtwi_err"] = $xmlrpc->geterrors();
-			header( "location: {$config["index"]}" );
-			exit;
-		}
-		$torrents = $xmlrpc->fetch();
-
-		if ( !in_array( $hash, $torrents ) ) {
-			$_SESSION["rtwi_err"] = "nohashfound";
-			header( "location: {$config["index"]}" );
-			exit;
-		}
-
-		if ( !$xmlrpc->setrequest( "d.erase", $hash ) || !$xmlrpc->call() ) {
-			$_SESSION["rtwi_err"] = $xmlrpc->geterrors();
-			header( "location: {$config["index"]}" );
-			exit;
-		}
-
-		sleep( 1 );
-
-		$_SESSION["rtwi_err"] = "succtorrentremove";
-		header( "location: {$config["index"]}" );
-		exit;
-
-		break;
-	}
-	case "torrenterase" : { // erase a torrent and delete the data
-		if ( $config["erase"] !== "1" ) {
-			$_SESSION["rtwi_err"] = "erasenotallowed";
-			header( "location: {$config["index"]}" );
-			exit;
-		}
-
-		if ( !$xmlrpc->setrequest( "download_list", "" ) || !$xmlrpc->call() || !$xmlrpc->parse() ) {
-			$_SESSION["rtwi_err"] = $xmlrpc->geterrors();
-			header( "location: {$config["index"]}" );
-			exit;
-		}
-		$torrents = $xmlrpc->fetch();
-
-		if ( !in_array( $hash, $torrents ) ) {
-			$_SESSION["rtwi_err"] = "nohashfound";
-			header( "location: {$config["index"]}" );
-			exit;
-		}
-
-		if ( !$xmlrpc->setrequest( "d.base_path", $hash ) || !$xmlrpc->call() || !$xmlrpc->parse() ) {
-			$_SESSION["rtwi_err"] = $xmlrpc->geterrors();
-			header( "location: {$config["index"]}" );
-			exit;
-		}
-		$response = $xmlrpc->fetch();
-
-		if ( !$xmlrpc->setrequest( "execute", array( "", "rm", "-rf", "--", $response ) ) || !$xmlrpc->call() ) {
-			$_SESSION["rtwi_err"] = $xmlrpc->geterrors();
-			header( "location: {$config["index"]}" );
-			exit;
-		}
-		if ( !$xmlrpc->setrequest( "d.erase", $hash ) || !$xmlrpc->call() ) {
-			$_SESSION["rtwi_err"] = $xmlrpc->geterrors();
-			header( "location: {$config["index"]}" );
-			exit;
-		}
-
-		sleep( 1 );
-
-		$_SESSION["rtwi_err"] = "succtorrenterase";
-		header( "location: {$config["index"]}" );
-		exit;
-
-		break;
-	}
-	case "doonalltorrent" : { // do some task on all torrent
-		switch ( $_REQUEST["task"] ) {
-			case "start" : {
-				if ( !$xmlrpc->setrequest( "d.multicall2", array( "", $_SESSION["rtwi_view"], "d.start=" ) ) || !$xmlrpc->call() ) {
-					$_SESSION["rtwi_err"] = $xmlrpc->geterrors();
-					header( "location: {$config["index"]}" );
-					exit;
-				}
-
-				sleep( 1 );
-
-				$_SESSION["rtwi_err"] = "succtorrentsstart";
-				header( "location: {$config["index"]}" );
-				exit;
-
-				break;
-			}
-			case "stop" : {
-				if ( !$xmlrpc->setrequest( "d.multicall2", array( "", $_SESSION["rtwi_view"], "d.stop=" ) ) || !$xmlrpc->call() ) {
-					$_SESSION["rtwi_err"] = $xmlrpc->geterrors();
-					header( "location: {$config["index"]}" );
-					exit;
-				}
-
-				sleep( 1 );
-
-				$_SESSION["rtwi_err"] = "succtorrentsstop";
-				header( "location: {$config["index"]}" );
-				exit;
-
-				break;
-			}
-			case "open" : {
-				if ( !$xmlrpc->setrequest( "d.multicall2", array( "", $_SESSION["rtwi_view"], "d.open=" ) ) || !$xmlrpc->call() ) {
-					$_SESSION["rtwi_err"] = $xmlrpc->geterrors();
-					header( "location: {$config["index"]}" );
-					exit;
-				}
-
-				sleep( 1 );
-
-				$_SESSION["rtwi_err"] = "succtorrentsopen";
-				header( "location: {$config["index"]}" );
-				exit;
-
-				break;
-			}
-			case "close" : {
-				if ( !$xmlrpc->setrequest( "d.multicall2", array( "", $_SESSION["rtwi_view"], "d.stop=", "d.close=" ) ) || !$xmlrpc->call() ) {
-					$_SESSION["rtwi_err"] = $xmlrpc->geterrors();
-					header( "location: {$config["index"]}" );
-					exit;
-				}
-
-				sleep( 1 );
-
-				$_SESSION["rtwi_err"] = "succtorrentsclose";
-				header( "location: {$config["index"]}" );
-				exit;
-
-				break;
-			}
-			case "checkhash" : {
-				if ( !$xmlrpc->setrequest( "d.multicall2", array( "", $_SESSION["rtwi_view"], "d.check_hash=" ) ) || !$xmlrpc->call() ) {
-					$_SESSION["rtwi_err"] = $xmlrpc->geterrors();
-					header( "location: {$config["index"]}" );
-					exit;
-				}
-
-				sleep( 1 );
-
-				$_SESSION["rtwi_err"] = "succtorrentscheckhash";
-				header( "location: {$config["index"]}" );
-				exit;
-
-				break;
-			}
-			case "remove" : {
-				if ( !$xmlrpc->setrequest( "d.multicall2", array( "", $_SESSION["rtwi_view"], "d.erase=" ) ) || !$xmlrpc->call() ) {
-					$_SESSION["rtwi_err"] = $xmlrpc->geterrors();
-					header( "location: {$config["index"]}" );
-					exit;
-				}
-
-				sleep( 1 );
-
-				$_SESSION["rtwi_err"] = "succtorrentsremove";
-				header( "location: {$config["index"]}" );
-				exit;
-
-				break;
-			}
-			default : {
-				$_SESSION["rtwi_err"] = "nooponalltorrent";
-				header( "location: {$config["index"]}" );
-				exit;
-
-				break;
-			}
-		}
-		
-		break;
-	}
-	case "changepriority" : { // set priority
-		if ( !$xmlrpc->setrequest( "download_list", "" ) || !$xmlrpc->call() || !$xmlrpc->parse() ) {
-			$_SESSION["rtwi_err"] = $xmlrpc->geterrors();
-			header( "location: {$config["index"]}" );
-			exit;
-		}
-
-		$torrents = $xmlrpc->fetch();
-
-		if ( !in_array( $hash, $torrents ) ) {
-			$_SESSION["rtwi_err"] = "nohashfound";
-			header( "location: {$config["index"]}" );
-			exit;
-		}
-
-		if ( isset( $_REQUEST["priority"] ) ) {
-			$priority = $_REQUEST["priority"];
-		} else {
-			$_SESSION["rtwi_err"] = "nopriorityfound";
-			header( "location: {$config["index"]}" );
-			exit;
-		}
-
-		if ( !in_array( $priority, array( 0, 1, 2, 3 ) ) ) {
-			$_SESSION["rtwi_err"] = "badpriorityfoiund";
-			header( "location: {$config["index"]}" );
-			exit;
-		}
-
-		if ( !$xmlrpc->setrequest( "d.priority.set", array( $hash, $priority ) ) || !$xmlrpc->call() ) {
-			$_SESSION["rtwi_err"] = $xmlrpc->geterrors();
-			header( "location: {$config["index"]}" );
-			exit;
-		}
-
-		sleep( 1 );
-
-		$_SESSION["rtwi_err"] = "succprioritychange";
-		header( "location: {$config["index"]}" );
-		exit;
-
-		break;
-	}
-	case "changefilepriority" : { // set file priority
-		if ( isset( $_REQUEST["ajax"] ) && $_REQUEST["ajax"] == "true" ) {
-			$tourl = "{$config["index"]}?mod=torrent&hash={$hash}&page=files&ajax=true";
-		} else {
-			$tourl = "{$config["index"]}?mod=torrent&hash={$hash}&page=files";
-		}
-
-		if ( !$xmlrpc->setrequest( "download_list", "" ) || !$xmlrpc->call() || !$xmlrpc->parse() ) {
-			$_SESSION["rtwi_err"] = $xmlrpc->geterrors();
-			header( "location: {$tourl}" );
-			exit;
-		}
-		$torrents = $xmlrpc->fetch();
-
-		if ( !in_array( $hash, $torrents ) ) {
-			$_SESSION["rtwi_err"] = "nohashfound";
-			header( "location: {$tourl}" );
-			exit;
-		}
-
-		if ( isset( $_REQUEST["id"] ) ) {
-			$id = $_REQUEST["id"];
-			settype( $id, "int" );
-		} else {
-			$_SESSION["rtwi_err"] = "noidfound";
-			header( "location: {$tourl}" );
-			exit;
-		}
-
-		if ( !$xmlrpc->setrequest( "d.size_files", $hash ) || !$xmlrpc->call() || !$xmlrpc->parse() ) {
-			$_SESSION["rtwi_err"] = $xmlrpc->geterrors();
-			header( "location: {$tourl}" );
-			exit;
-		}
-		$response = $xmlrpc->fetch();
-
-		if ( $id < 0 || $id > $response ) {
-			$_SESSION["rtwi_err"] = "badidfound";
-			header( "location: {$tourl}" );
-			exit;
-		}
-
-		if ( isset( $_REQUEST["filepriority"] ) ) {
-			$filepriority = $_REQUEST["filepriority"];
-			settype( $filepriority, "int" );
-		} else {
-			$_SESSION["rtwi_err"] = "nopriorityfound";
-			header( "location: {$tourl}" );
-			exit;
-		}
-
-		if ( !in_array( $filepriority, array( 0, 1, 2 ) ) ) {
-			$_SESSION["rtwi_err"] = "badpriorityfound";
-			header( "location: {$tourl}" );
-			exit;
-		}
-
-		if ( !$xmlrpc->setrequest( "f.priority.set", array( "${hash}:f${id}", $filepriority ) ) || !$xmlrpc->call() ) {
-			$_SESSION["rtwi_err"] = $xmlrpc->geterrors();
-			header( "location: {$tourl}" );
-			exit;
-		}
-
-		if ( !$xmlrpc->setrequest( "d.update_priorities", $hash ) || !$xmlrpc->call() ) {
-			$_SESSION["rtwi_err"] = $xmlrpc->geterrors();
-			header( "location: {$tourl}" );
-			exit;
-		}
-
-		sleep( 1 );
-
-		$_SESSION["rtwi_err"] = "succfileprioritychange";
-		header( "location: {$tourl}" );
-		exit;
-
-		break;
-	}
-	case "changedirpriority" : { // set file priority
-		if ( isset( $_REQUEST["ajax"] ) && $_REQUEST["ajax"] == "true" ) {
-			$tourl = "{$config["index"]}?mod=torrent&hash={$hash}&page=files&ajax=true";
-		} else {
-			$tourl = "{$config["index"]}?mod=torrent&hash={$hash}&page=files";
-		}
-
-		if ( !$xmlrpc->setrequest( "download_list", "" ) || !$xmlrpc->call() || !$xmlrpc->parse() ) {
-			$_SESSION["rtwi_err"] = $xmlrpc->geterrors();
-			header( "location: {$tourl}" );
-			exit;
-		}
-		$torrents = $xmlrpc->fetch();
-
-		if ( !in_array( $hash, $torrents ) ) {
-			$_SESSION["rtwi_err"] = "nohashfound";
-			header( "location: {$tourl}" );
-			exit;
-		}
-
-		if ( isset( $_REQUEST["dirpriority"] ) ) {
-			$dirpriority = $_REQUEST["dirpriority"];
-			settype( $dirpriority, "int" );
-		} else {
-			$_SESSION["rtwi_err"] = "nopriorityfound";
-			header( "location: {$tourl}" );
-			exit;
-		}
-
-		if ( !in_array( $dirpriority, array( 0, 1, 2 ) ) ) {
-			$_SESSION["rtwi_err"] = "badpriorityfound";
-			header( "location: {$tourl}" );
-			exit;
-		}
-
-		if ( isset( $_REQUEST["dir"] ) ) {
-			$dir = $_REQUEST["dir"];
-		} else {
-			$_SESSION["rtwi_err"] = "nodirfound";
-			header( "location: {$tourl}" );
-			exit;
-		}
-
-		if ( substr( $dir, -1 ) != "/" ) {
-			$dir = "{$dir}/";
-		}
-		$len = strlen( $dir );
-
-		if ( !$xmlrpc->setrequest( "f.multicall", array( $hash, 0, "f.path=" ) ) || !$xmlrpc->call() || !$xmlrpc->parse() ) {
-			$_SESSION["rtwi_err"] = $xmlrpc->geterrors();
-			header( "location: {$tourl}" );
-			exit;
-		}
-		$files = $xmlrpc->fetch();
-
-		$badpath = true;
-		$request = array();
-		$params = array();
-		foreach ( $files as $key => $val ) {
-			if ( substr( $val[0], 0, 1 ) != "/" ) {
-				$val[0] = "/{$val[0]}";
-			}
-			if ( strpos( $val[0], $dir ) === 0 ) {
-				$request[] = "f.priority.set";
-				$params[] = array( "${hash}:f${key}", $dirpriority );
-				$filestochange[] = array( $key, $val[0] );
-				if ( $badpath == true ) {
-					$badpath = false;
-				}
-			}
-		}
-
-		if ( $badpath === true ) {
-			$_SESSION["rtwi_err"] = "baddirfound";
-			header( "location: {$tourl}" );
-			exit;
-		}
-
-		if ( !$xmlrpc->setumrequest( $request, $params ) || !$xmlrpc->call() || !$xmlrpc->parse() ) {
-			$_SESSION["rtwi_err"] = $xmlrpc->geterrors();
-			header( "location: {$tourl}" );
-			exit;
-		}
-		$torrents = $xmlrpc->fetch();
-
-		if ( !$xmlrpc->setrequest( "d.update_priorities", $hash ) || !$xmlrpc->call() || !$xmlrpc->parse() ) {
-			$_SESSION["rtwi_err"] = $xmlrpc->geterrors();
-			header( "location: {$tourl}" );
-			exit;
-		}
-
-		$torrents = $xmlrpc->fetch();
-
-		sleep( 1 );
-
-		$_SESSION["rtwi_err"] = "succdirprioritychange";
-		header( "location: {$tourl}" );
-		exit;
-
-		break;
-	}
-	case "changetrackerenabled" : { // set if tracker is enabled
-		if ( isset( $_REQUEST["ajax"] ) && $_REQUEST["ajax"] == "true" ) {
-			$tourl = "{$config["index"]}?mod=torrent&hash={$hash}&page=trackers&ajax=true";
-		} else {
-			$tourl = "{$config["index"]}?mod=torrent&hash={$hash}&page=trackers";
-		}
-
-		if ( !$xmlrpc->setrequest( "download_list", "" ) || !$xmlrpc->call() || !$xmlrpc->parse() ) {
-			$_SESSION["rtwi_err"] = $xmlrpc->geterrors();
-			header( "location: {$tourl}" );
-			exit;
-		}
-		$torrents = $xmlrpc->fetch();
-
-		if ( !in_array( $hash, $torrents ) ) {
-			$_SESSION["rtwi_err"] = "nohashfound";
-			header( "location: {$tourl}" );
-			exit;
-		}
-
-		if ( isset( $_REQUEST["id"] ) ) {
-			$id = $_REQUEST["id"];
-			settype( $id, "int" );
-		} else {
-			$_SESSION["rtwi_err"] = "noidfound";
-			header( "location: {$tourl}" );
-			exit;
-		}
-
-		if ( !$xmlrpc->setrequest( "d.tracker_size", $hash ) || !$xmlrpc->call() || !$xmlrpc->parse() ) {
-			$_SESSION["rtwi_err"] = $xmlrpc->geterrors();
-			header( "location: {$tourl}" );
-			exit;
-		}
-		$response = $xmlrpc->fetch();
-
-		if ( $id < 0 || $id > $response ) {
-			$_SESSION["rtwi_err"] = "badidfound";
-			header( "location: {$tourl}" );
-			exit;
-		}
-
-		if ( isset( $_REQUEST["trackerenabled"] ) ) {
-			$trackerenabled = $_REQUEST["trackerenabled"];
-			settype( $trackerenabled, "int" );
-		} else {
-			$_SESSION["rtwi_err"] = "novaluefound";
-			header( "location: {$tourl}" );
-			exit;
-		}
-
-		if ( !in_array( $trackerenabled, array( 0, 1 ) ) ) {
-			$_SESSION["rtwi_err"] = "badvaluefound";
-			header( "location: {$tourl}" );
-			exit;
-		}
-
-		if ( !$xmlrpc->setrequest( "t.is_enabled.set", array( $hash, $id, $trackerenabled ) ) || !$xmlrpc->call() ) {
-			$_SESSION["rtwi_err"] = $xmlrpc->geterrors();
-			header( "location: {$tourl}" );
-			exit;
-		}
-
-		sleep( 1 );
-
-		$_SESSION["rtwi_err"] = "succtrackerenabledchange";
-		header( "location: {$tourl}" );
-		exit;
-
-		break;
-	}
-	case "changedhtstatus" : { // start/stop dht server
-		if ( !isset( $_REQUEST["dhtstatus"] ) || $_REQUEST["dhtstatus"] == "" ) {
-			$_SESSION["rtwi_err"] = "novaluefound";
-			header( "location: {$config["index"]}?mod=serverinfo" );
-			exit;
-		}
-
-		$dhtstatus = $_REQUEST["dhtstatus"];
-		settype( $dhtstatus, "int" );
-		if ( $dhtstatus != 0 && $dhtstatus != 1 ) {
-			$_SESSION["rtwi_err"] = "badvaluefound";
-			header( "location: {$config["index"]}?mod=serverinfo" );
-			exit;
-		}
-
-		$dhtstatus = $dhtstatus == 1 ? "on" : "off";
-
-		if ( !$xmlrpc->setrequest( "dht.mode.set", array("", $dhtstatus) ) || !$xmlrpc->call() ) {
-			$_SESSION["rtwi_err"] = $xmlrpc->geterrors();
-			header( "location: {$config["index"]}?mod=serverinfo" );
-			exit;
-		}
-
-		$_SESSION["rtwi_err"] = $dhtstatus == "on" ? "succdhtstart" : "succdhtstop";
-
-		sleep( 1 );
-
-		header( "location: {$config["index"]}?mod=serverinfo" );
-		exit;
-
-		break;
-	}
-	default : {
-		$_SESSION["rtwi_err"] = "noinputmod";
-		header( "location: {$_SESSION["rtwi_lastpage"]}" );
-		exit;
-
-		break;
-	}
-}
-
-?>
Index: c/themes/default_ajax/inc/afunc.js
===================================================================
--- src/themes/default_ajax/inc/afunc.js	(revision 53f5ceaa73f2e26bf68bfb1e991963323da16118)
+++ 	(revision )
@@ -1,200 +1,0 @@
-function loadcontent( hash, page ) {
- var xmlHttp;
- try {
-  xmlHttp = new XMLHttpRequest();
- }
- catch ( e ) {
-  try {
-   xmlHttp = new ActiveXObject( "Msxml2.XMLHTTP" );
-  }
-  catch ( e ) {
-   try {
-    xmlHttp = new ActiveXObject( "Microsoft.XMLHTTP" );
-   } catch ( e ) {
-    alert( "Your browser does not support AJAX!" );
-    return false;
-   }
-  }
- }
- xmlHttp.onreadystatechange = function() {
-  switch ( xmlHttp.readyState ) {
-   case 0 : {
-    document.getElementById( 'torrent_' + hash + '_content' ).innerHTML = 0;
-    break;
-   }
-   case 1 : {
-    document.getElementById( 'torrent_' + hash + '_content' ).innerHTML = 'Requesting...';
-    break;
-   }
-   case 2 : {
-    document.getElementById( 'torrent_' + hash + '_content' ).innerHTML = 2;
-    break;
-   }
-   case 3 : {
-    document.getElementById( 'torrent_' + hash + '_content' ).innerHTML = 'Processing...';
-    break;
-   }
-   case 4 : {
-    document.getElementById( 'torrent_' + hash + '_content' ).innerHTML = xmlHttp.responseText;
-    break;
-   }
-   default : {
-    document.getElementById( 'torrent_' + hash + '_content' ).innerHTML = '.';
-    break;
-   }
-  }
- }
- xmlHttp.open( 'GET', '?mod=torrent&hash=' + hash + '&page=' + page + '&ajax=true', true );
- xmlHttp.send( null );
-}
-
-function loadcontent_dirpriority( iurl, hash, dir, dirpriority ) {
- var xmlHttp;
- try {
-  xmlHttp = new XMLHttpRequest();
- }
- catch ( e ) {
-  try {
-   xmlHttp = new ActiveXObject( "Msxml2.XMLHTTP" );
-  }
-  catch ( e ) {
-   try {
-    xmlHttp = new ActiveXObject( "Microsoft.XMLHTTP" );
-   } catch ( e ) {
-    alert( "Your browser does not support AJAX!" );
-    return false;
-   }
-  }
- }
- xmlHttp.onreadystatechange = function() {
-  switch ( xmlHttp.readyState ) {
-   case 0 : {
-    document.getElementById( 'torrent_' + hash + '_content' ).innerHTML = 0;
-    break;
-   }
-   case 1 : {
-    document.getElementById( 'torrent_' + hash + '_content' ).innerHTML = 'Requesting...';
-    break;
-   }
-   case 2 : {
-    document.getElementById( 'torrent_' + hash + '_content' ).innerHTML = 2;
-    break;
-   }
-   case 3 : {
-    document.getElementById( 'torrent_' + hash + '_content' ).innerHTML = 'Processing...';
-    break;
-   }
-   case 4 : {
-    document.getElementById( 'torrent_' + hash + '_content' ).innerHTML = xmlHttp.responseText;
-    break;
-   }
-   default : {
-    document.getElementById( 'torrent_' + hash + '_content' ).innerHTML = '.';
-    break;
-   }
-  }
- }
- xmlHttp.open( 'GET', iurl + '?mod=changedirpriority&hash=' + hash + '&dir=' + dir + '&dirpriority=' + dirpriority + '&ajax=true', true );
- xmlHttp.send( null );
-}
-
-function loadcontent_filepriority( iurl, hash, id, filepriority ) {
- var xmlHttp;
- try {
-  xmlHttp = new XMLHttpRequest();
- }
- catch ( e ) {
-  try {
-   xmlHttp = new ActiveXObject( "Msxml2.XMLHTTP" );
-  }
-  catch ( e ) {
-   try {
-    xmlHttp = new ActiveXObject( "Microsoft.XMLHTTP" );
-   } catch ( e ) {
-    alert( "Your browser does not support AJAX!" );
-    return false;
-   }
-  }
- }
- xmlHttp.onreadystatechange = function() {
-  switch ( xmlHttp.readyState ) {
-   case 0 : {
-    document.getElementById( 'torrent_' + hash + '_content' ).innerHTML = 0;
-    break;
-   }
-   case 1 : {
-    document.getElementById( 'torrent_' + hash + '_content' ).innerHTML = 'Requesting...';
-    break;
-   }
-   case 2 : {
-    document.getElementById( 'torrent_' + hash + '_content' ).innerHTML = 2;
-    break;
-   }
-   case 3 : {
-    document.getElementById( 'torrent_' + hash + '_content' ).innerHTML = 'Processing...';
-    break;
-   }
-   case 4 : {
-    document.getElementById( 'torrent_' + hash + '_content' ).innerHTML = xmlHttp.responseText;
-    break;
-   }
-   default : {
-    document.getElementById( 'torrent_' + hash + '_content' ).innerHTML = '.';
-    break;
-   }
-  }
- }
- xmlHttp.open( 'GET', iurl + '?mod=changefilepriority&hash=' + hash + '&id=' + id + '&filepriority=' + filepriority + '&ajax=true', true );
- xmlHttp.send( null );
-}
-
-function loadcontent_trackerenabled( iurl, hash, id, trackerenabled ) {
- var xmlHttp;
- try {
-  xmlHttp = new XMLHttpRequest();
- }
- catch ( e ) {
-  try {
-   xmlHttp = new ActiveXObject( "Msxml2.XMLHTTP" );
-  }
-  catch ( e ) {
-   try {
-    xmlHttp = new ActiveXObject( "Microsoft.XMLHTTP" );
-   } catch ( e ) {
-    alert( "Your browser does not support AJAX!" );
-    return false;
-   }
-  }
- }
- xmlHttp.onreadystatechange = function() {
-  switch ( xmlHttp.readyState ) {
-   case 0 : {
-    document.getElementById( 'torrent_' + hash + '_content' ).innerHTML = 0;
-    break;
-   }
-   case 1 : {
-    document.getElementById( 'torrent_' + hash + '_content' ).innerHTML = 'Requesting...';
-    break;
-   }
-   case 2 : {
-    document.getElementById( 'torrent_' + hash + '_content' ).innerHTML = 2;
-    break;
-   }
-   case 3 : {
-    document.getElementById( 'torrent_' + hash + '_content' ).innerHTML = 'Processing...';
-    break;
-   }
-   case 4 : {
-    document.getElementById( 'torrent_' + hash + '_content' ).innerHTML = xmlHttp.responseText;
-    break;
-   }
-   default : {
-    document.getElementById( 'torrent_' + hash + '_content' ).innerHTML = '.';
-    break;
-   }
-  }
- }
- xmlHttp.open( 'GET', iurl + '?mod=changetrackerenabled&hash=' + hash + '&id=' + id + '&trackerenabled=' + trackerenabled + '&ajax=true', true );
- xmlHttp.send( null );
-}
-
Index: c/themes/default_ajax/inc/hfunc.js
===================================================================
--- src/themes/default_ajax/inc/hfunc.js	(revision 53f5ceaa73f2e26bf68bfb1e991963323da16118)
+++ 	(revision )
@@ -1,77 +1,0 @@
-function toggle( modpage ) {
- switch ( modpage ) {
-  case '_info' :
-  case 'torrent_info' :
-  case 'torrent_peers' :
-  case 'torrent_trackers' : {
-   if ( document.getElementById( 'changethrottleform' ) != null ) {
-    document.getElementById( 'throttleupinput' ).style.display = 'none';
-    document.getElementById( 'throttledowninput' ).style.display = 'none';
-    document.getElementById( 'tsubmit' ).style.display = 'none';
-
-    document.getElementById( 'throttleup' ).style.display = '';
-    document.getElementById( 'throttledown' ).style.display = '';
-   }
-
-   break;
-  }
-  case 'serverinfo_info' : {
-   if ( document.getElementById( 'changethrottleform' ) != null ) {
-    document.getElementById( 'throttleupinput' ).style.display = 'none';
-    document.getElementById( 'throttledowninput' ).style.display = 'none';
-    document.getElementById( 'tsubmit' ).style.display = 'none';
-
-    document.getElementById( 'throttleup' ).style.display = '';
-    document.getElementById( 'throttledown' ).style.display = '';
-   }
-
-   document.getElementById( 'changedht' ).style.display = '';
-   document.getElementById( 'changedhtselect' ).style.display = 'none';
-
-   break;
-  }
-  case '_info_restore' : {
-   document.getElementById( 'throttleupinput' ).style.display = '';
-   document.getElementById( 'throttledowninput' ).style.display = '';
-   document.getElementById( 'tsubmit' ).style.display = '';
-
-   document.getElementById( 'throttleup' ).style.display = 'none';
-   document.getElementById( 'throttledown' ).style.display = 'none';
-
-   break;
-  }
-  case 'serverinfo_info_restore' : {
-   if ( document.getElementById( 'changethrottleform' ) != null ) {
-    document.getElementById( 'changedht' ).style.display = 'none';
-    document.getElementById( 'changedhtselect' ).style.display = '';
-   }
-
-   break;
-  }
-  case 'addtorrent_info' : {
-   document.getElementById( 'torrenturl' ).style.display = 'none';
-
-   break;
-  }
-  case 'torrent_files' : {
-   var uls = document.getElementsByTagName( 'ul' );
-   for ( i = 0; i < uls.length; i++ ) {
-    var atts = uls.item( i ).attributes;
-    for ( j = 0; j < atts.length; j++ ) {
-     if ( atts[j].nodeName == 'class' && atts[j].nodeValue == 'directory' ) {
-      uls.item( i ).style.display='none';
-     }
-    }
-   }
-
-   document.getElementById( 'throttleupinput' ).style.display = 'none';
-   document.getElementById( 'throttledowninput' ).style.display = 'none';
-   document.getElementById( 'tsubmit' ).style.display = 'none';
-
-   document.getElementById( 'throttleup' ).style.display = '';
-   document.getElementById( 'throttledown' ).style.display = '';
-
-   break;
-  }
- }
-}
Index: c/themes/default_ajax/inc/style.css
===================================================================
--- src/themes/default_ajax/inc/style.css	(revision 53f5ceaa73f2e26bf68bfb1e991963323da16118)
+++ 	(revision )
@@ -1,579 +1,0 @@
-body {
-		min-width: 60em;
-		margin: 0;
-		padding: 0;
-		font-family: arial, sans-serif;
-		font-size: medium;
-		background: #ffffff;
-		line-height: 1.2em;
-}
-
-div {
-		margin: 0;
-		padding: 0;
-		overflow: hidden;
-}
-
-ul {
-		margin: 0;
-		padding: 0;
-		list-style-type: none;
-}
-
-li {
-		margin: 0;
-		padding: 0;
-}
-
-img {
-		margin: 0;
-		padding: 0;
-		border: none;
-}
-
-p {
-		margin: 0;
-		padding: 0;
-}
-
-span {
-		margin: 0;
-		padding: 0;
-}
-
-a {
-		color: #505050;
-		font-weight: bold;
-		text-decoration: none;
-}
-
-form {
-		margin: 0;
-		padding: 0;
-}
-
-a:hover {
-		color: #a0a0a0;
-}
-
-select.whiteselect {
-		border: 1px solid #000000;
-		background: #ffffff;
-}
-
-#top {
-		width: 100%;
-		height: 91px;
-		margin: 0 0 2em 0;
-		background: url( "../pics/topbar.gif" );
-}
-
-#main {
-		width: 100%;
-		margin: 0;
-		padding: 0;
-}
-
-#leftcol {
-		float: left;
-		width: 13%;
-		margin: 0 1% 0 1%;
-}
-
-#maincol {
-		float: left;
-		width: 84%;
-		margin: 0 0 0 0;
-		padding: 0;
-}
-
-#footer {
-		margin: 4em 1em 2em 0;
-		text-align: right;
-		font-size: smaller;
-}
-
-#mainmenu {
-		margin: 0 0 1em 0;
-		padding: 0;
-		border: 1px solid #aaaaaa;
-}
-
-#mainmenu li.first {
-		margin: 0;
-		padding: 0;
-		border-top: none;
-}
-
-#mainmenu li {
-		border-top: 1px solid #aaaaaa;
-}
-
-#mainmenu a {
-		display: block;
-		padding: .2em 0 .2em 0;
-		color: #505050;
-		font-weight: bold;
-		text-align: center;
-}
-
-#mainmenu a:hover {
-		color: #000000;
-		background: #e0e0e0;
-}
-
-#err {
-		margin: 0 0 1em 0;
-		color: #aa0000;
-		font-weight: bold;
-		text-align: center;
-}
-
-#loginbox {
-		text-align: center;
-}
-
-#changeviewform {
-		float: left;
-		margin: 0 1em 0 0;
-}
-
-#changerefreshform {
-		float: left;
-		margin: 0 1em 0 0;
-}
-
-#changelanguageform {
-		float: left;
-}
-
-#loginbox #changelanguageform {
-		float: none;
-		margin: 0 0 1em 0;
-}
-
-#doonalltorrentform {
-		float: right;
-}
-
-#addtorrent {
-		clear: both;
-}
-
-.clr {
-		clear: both;
-		height: 1px;
-		overflow: hidden;
-}
-
-.submit {
-		margin: 0 0 0 .3em;
-}
-
-.submenu {
-		margin: 0 0 0 20%;
-		font-size: smaller;
-		border-left: 1px solid #aaaaaa;
-}
-
-.submenu.notshown {
-		display: none;
-}
-
-.tline {
-		margin: 0 0 1em 0;
-}
-
-.spacer {
-		margin: 0 0 1em 0;
-}
-
-.tline.last {
-		margin: 1em 0 1em 0;
-}
-
-.tthrottle {
-		float: left;
-		margin: 0 1em 0 0;
-}
-
-.tthrottle input[type="text"] {
-		width: 2em;
-		text-align: right;
-}
-
-.trates_total {
-		float: left;
-}
-
-.ticon {
-		float: left;
-		width: 1em;
-}
-
-.ticon img {
-		width: .8125em;
-}
-
-.tname {
-		float: left;
-		margin: 0;
-}
-
-.tops {
-		float: right;
-		font-size: smaller;
-}
-
-.tops a {
-		margin: 0 0 0 .5em;
-}
-
-.tbytes {
-		float: left;
-		width: 11.3em;
-		margin: 0 .5em 0 1.2em;
-		background: #eeeeee;
-		font-size: smaller;
-}
-
-.trates {
-		float: left;
-		width: 14em;
-		margin: 0 .5em 0 0;
-		background: #eeeeee;
-		font-size: smaller;
-}
-
-.tupbytes {
-		float: left;
-		width: 11em;
-		margin: 0 .5em 0 0;
-		background: #eeeeee;
-		font-size: smaller;
-}
-
-.tpercentage {
-		float: left;
-		width: 3.5em;
-		margin: 0 .5em 0 0;
-		background: #eeeeee;
-		font-size: smaller;
-		text-align: right;
-}
-
-.testimate {
-		float: left;
-		width: 5em;
-		background: #eeeeee;
-		font-size: smaller;
-		text-align: right;
-}
-
-.tselect {
-		float: right;
-		font-size: smaller;
-		text-align: right;
-}
-
-.tpriority {
-		float: right;
-		margin: 0 0 0 .5em;
-		background: #eeeeee;
-		font-size: smaller;
-		text-align: right;
-}
-
-.tpriority select {
-		font-size: smaller;
-}
-
-.tpriority .submit {
-		font-size: smaller;
-}
-
-.tratio {
-		float: right;
-		width: 6.5em;
-		margin: 0 0 0 .5em;
-		background: #eeeeee;
-		font-size: smaller;
-		text-align: right;
-}
-
-.tmessage {
-		float: left;
-		margin: 0 .5em 0 1.2em;
-		background: #eeeeee;
-		font-size: smaller;
-}
-
-.tcontainer {
-		margin: 0 0 0 1.2em;
-		font-size: smaller;
-}
-
-.tcontainer a.subpage {
-		float: left;
-		width: 10em;
-		margin: 0 .5em 0 0;
-		background: #eeeeee;
-		text-align: center;
-}
-
-.tcontent {
-		margin: .5em 0 0 0;
-}
-
-.tufleft {
-		float: left;
-		width: 14%;
-		font-weight: bold;
-}
-
-.tufright {
-		float: left;
-		width: 86%;
-}
-
-.tufpath {
-		float: left;
-}
-
-.tufspace {
-		float: right;
-}
-
-.tuform .formsend {
-		margin: 1em 0 0 14%;
-}
-
-.infoleft {
-		float: left;
-		width: 25%;
-		font-weight: bold;
-}
-
-.inforight {
-		float: left;
-		width: 74%
-}
-
-.directory {
-		margin: 0 0 0 1em;
-}
-
-.directory li {
-}
-
-.dopenlink {
-		float: left;
-}
-
-.dpriority {
-		float: right;
-		margin: 0;
-		font-size: smaller;
-		text-align: right;
-		background: #eeeeee;
-}
-
-.dpriority select {
-		font-size: smaller;
-}
-
-.dpriority .submit {
-		font-size: smaller;
-}
-
-.tcontent .dpriority {
-		float: right;
-		margin: 0;
-		text-align: right;
-		background: #eeeeee;
-}
-
-.fname {
-		float: left;
-		background: #eeeeee;
-}
-
-.fdownload {
-		float: right;
-		background: #eeeeee;
-}
-
-.fchunks {
-		float: right;
-		width: 6.5em;
-		margin: 0 0 0 .5em;
-		text-align: right;
-		background: #eeeeee;
-}
-
-.fsize {
-		float: right;
-		width: 5.5em;
-		margin: 0 0 0 .5em;
-		text-align: right;
-		background: #eeeeee;
-}
-
-.fpriority {
-		float: right;
-		width: 8.5em;
-		margin: 0 0 0 .5em;
-		font-size: smaller;
-		text-align: right;
-		background: #eeeeee;
-}
-
-.fpriority select {
-		font-size: smaller;
-}
-
-.fpriority .submit {
-		font-size: smaller;
-}
-
-.tcontent .fpriority {
-		float: right;
-		width: 8em;
-		margin: 0 0 0 .5em;
-		text-align: right;
-		background: #eeeeee;
-}
-
-.fpercentage {
-		float: right;
-		width: 3.5em;
-		margin: 0 0 0 .5em;
-		text-align: right;
-		background: #eeeeee;
-}
-
-.tracker {
-		margin: 0 0 .5em 0;
-}
-
-.tgroup {
-		float: left;
-		width: 1.5em;
-		text-align: right;
-		background: #eeeeee;
-}
-
-.turl {
-		float: left;
-		margin: 0 0 0 .5em;
-}
-
-.tfocus {
-		float: left;
-		width: 6em;
-		font-size: smaller;
-		background: #eeeeee;
-}
-
-.tenabled {
-		float: left;
-		width: 11.5em;
-		margin: 0 0 0 .5em;
-		font-size: smaller;
-		background: #eeeeee;
-}
-
-.tcontainer .tenabled {
-		width: 13em;
-}
-
-.tenabled .submit {
-		font-size: smaller;
-}
-
-.tenabled select {
-		font-size: smaller;
-}
-
-.topen {
-		float: left;
-		width: 6em;
-		margin: 0 0 0 .5em;
-		font-size: smaller;
-		background: #eeeeee;
-}
-
-.tpeers {
-		float: left;
-		margin: 0 0 0 .5em;
-		font-size: smaller;
-}
-
-.tscrape {
-		font-size: smaller;
-}
-
-.phead {
-		font-weight: bold;
-}
-
-.paddress {
-		float: left;
-		width: 10em;
-}
-
-.paddress img {
-		margin: 0 .5em 0 0;
-}
-
-.pup {
-		float: left;
-		width: 5em;
-		margin: 0 0 0 .5em;
-		text-align: right;
-}
-
-.pdown {
-		float: left;
-		width: 5em;
-		margin: 0 0 0 .5em;
-		text-align: right;
-}
-
-.prate {
-		float: left;
-		width: 5em;
-		margin: 0 0 0 .5em;
-		text-align: right;
-}
-
-.pdone {
-		float: left;
-		width: 4em;
-		margin: 0 0 0 .5em;
-		text-align: right;
-}
-
-.pencrypted {
-		float: left;
-		width: 6em;
-		margin: 0 0 0 .5em;
-}
-
-.pincoming {
-		float: left;
-		width: 6em;
-		margin: 0 0 0 1.5em;
-}
-
-.poptions {
-		float: left;
-		width: 6em;
-		margin: 0 0 0 .5em;
-		font-size: smaller;
-}
-
-.pclient {
-		float: left;
-		margin: 0 0 0 .5em;
-}
Index: c/themes/default_ajax/layout.ajax.index.xsl
===================================================================
--- src/themes/default_ajax/layout.ajax.index.xsl	(revision 53f5ceaa73f2e26bf68bfb1e991963323da16118)
+++ 	(revision )
@@ -1,562 +1,0 @@
-﻿<xsl:stylesheet version="1.1"
-                xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
-                lang="en">
- <xsl:output method="xml"
-             indent="no"
-             encoding="utf-8" />
-
- <xsl:template match="root">
-  <xsl:apply-templates select="err" />
-  <xsl:apply-templates select="torrents" />
- </xsl:template>
-
- <xsl:template match="err">
-  <div id="err" title="{/root/labels/clicktohide}" onmouseover="this.style.cursor='pointer';" onclick="this.parentNode.removeChild( this );">
-   <xsl:apply-templates select="errmsg" />
-  </div>
- </xsl:template>
- 
- <xsl:template match="errmsg">
-  <div>
-   <xsl:value-of select="msg" />
-  </div>
- </xsl:template>
-
- <xsl:template match="torrents">
-  <ul>
-   <xsl:apply-templates select="torrent_info_root" />
-   <xsl:apply-templates select="torrent_files_root" />
-   <xsl:apply-templates select="torrent_peers_root" />
-   <xsl:apply-templates select="torrent_trackers_root" />
-  </ul>
- </xsl:template>
-
- <xsl:template match="torrent_info_root">
-  <xsl:apply-templates select="torrent_info" />
- </xsl:template>
-
- <xsl:template match="torrent_info">
-  <li class="line spacer">
-   <div class="infoleft">
-    <xsl:value-of select="/root/labels/name" />
-   </div>
-   <div class="inforight">
-    <xsl:value-of select="d_name" />
-   </div>
-   <div class="clr"></div>
-  </li>
-  <li class="line">
-   <div class="infoleft">
-    <xsl:value-of select="/root/labels/infohash" />
-   </div>
-   <div class="inforight">
-    <xsl:value-of select="d_hash" />
-   </div>
-   <div class="clr"></div>
-  </li>
-  <li class="line">
-   <div class="infoleft">
-    <xsl:value-of select="/root/labels/localid" />
-   </div>
-   <div class="inforight">
-    <xsl:value-of select="d_local_id" />
-   </div>
-   <div class="clr"></div>
-  </li>
-  <li class="line spacer">
-   <div class="infoleft">
-    <xsl:value-of select="/root/labels/localidhtml" />
-   </div>
-   <div class="inforight">
-    <xsl:value-of select="d_local_id_html" />
-   </div>
-   <div class="clr"></div>
-  </li>
-  <li class="line">
-   <div class="infoleft">
-    <xsl:value-of select="/root/labels/directory" />
-   </div>
-   <div class="inforight">
-    <xsl:value-of select="d_directory/@value" />
-   </div>
-   <div class="clr"></div>
-  </li>
-  <li class="line">
-   <div class="infoleft">
-    <xsl:value-of select="/root/labels/tiedtofile" />
-   </div>
-   <div class="inforight">
-    <xsl:choose>
-     <xsl:when test="d_tied_to_file != ''">
-      <xsl:value-of select="d_tied_to_file/@value" />
-     </xsl:when>
-     <xsl:otherwise>
-      <xsl:value-of select="/root/labels/no" />
-     </xsl:otherwise>
-    </xsl:choose>
-   </div>
-   <div class="clr"></div>
-  </li>
-  <li class="line">
-   <div class="infoleft">
-    <xsl:value-of select="/root/labels/filestats" />
-   </div>
-   <div class="inforight">
-    <xsl:value-of select="d_multi_file/@value" />
-    <xsl:choose>
-     <xsl:when test="d_multi_file != 0">
-      <xsl:text> </xsl:text>
-      <xsl:value-of select="d_size_files" />
-      <xsl:text> </xsl:text>
-      <xsl:value-of select="/root/labels/files" />
-     </xsl:when>
-    </xsl:choose>
-   </div>
-   <div class="clr"></div>
-  </li>
-  <li class="line spacer">
-   <div class="infoleft">
-    <xsl:value-of select="/root/labels/private" />
-   </div>
-   <div class="inforight">
-    <xsl:value-of select="d_private/@value" />
-   </div>
-   <div class="clr"></div>
-  </li>
-  <li class="line">
-   <div class="infoleft">
-    <xsl:value-of select="/root/labels/chunks" />
-   </div>
-   <div class="inforight">
-    <xsl:value-of select="d_completed_chunks" />
-    <xsl:text> / </xsl:text>
-    <xsl:value-of select="d_chunks_hashed" />
-    <xsl:text> * </xsl:text>
-    <xsl:value-of select="d_chunk_size/@value" />
-    <xsl:text> </xsl:text>
-    <xsl:value-of select="d_chunk_size/@suffix" />
-   </div>
-   <div class="clr"></div>
-  </li>
-  <li class="line">
-   <div class="infoleft">
-    <xsl:value-of select="/root/labels/priority" />
-   </div>
-   <div class="inforight">
-    <xsl:value-of select="d_priority/@value" />
-   </div>
-   <div class="clr"></div>
-  </li>
-  <li class="line spacer">
-   <div class="infoleft">
-    <xsl:value-of select="/root/labels/statechanged" />
-   </div>
-   <div class="inforight">
-    <xsl:value-of select="d_state_changed/@value" />
-   </div>
-   <div class="clr"></div>
-  </li>
-  <li class="line spacer">
-   <div class="infoleft">
-    <xsl:value-of select="/root/labels/freediskspace" />
-   </div>
-   <div class="inforight">
-    <xsl:value-of select="d_free_diskspace/@value" />
-    <xsl:text> </xsl:text>
-    <xsl:value-of select="d_free_diskspace/@suffix" />
-   </div>
-   <div class="clr"></div>
-  </li>
-  <li class="line">
-   <div class="infoleft">
-    <xsl:value-of select="/root/labels/connectiontype" />
-   </div>
-   <div class="inforight">
-    <xsl:value-of select="d_connection_current/@value" />
-   </div>
-   <div class="clr"></div>
-  </li>
-  <li class="line">
-   <div class="infoleft">
-    <xsl:value-of select="/root/labels/trackers" />
-   </div>
-   <div class="inforight">
-    <xsl:value-of select="d_tracker_size" />
-   </div>
-   <div class="clr"></div>
-  </li>
-  <li class="line">
-   <div class="infoleft">
-    <xsl:value-of select="/root/labels/peersconnected" />
-   </div>
-   <div class="inforight">
-    <span title="{/root/labels/dminpeers}: {d_peers_min} - {/root/labels/dmaxpeers}: {d_peers_max}">
-     <xsl:value-of select="d_peers_connected" />
-    </span>
-   </div>
-   <div class="clr"></div>
-  </li>
-  <li class="line">
-   <div class="infoleft">
-    <xsl:value-of select="/root/labels/leechers" />
-   </div>
-   <div class="inforight">
-    <xsl:value-of select="d_peers_accounted" />
-   </div>
-   <div class="clr"></div>
-  </li>
-  <li class="line spacer">
-   <div class="infoleft">
-    <xsl:value-of select="/root/labels/seeders" />
-   </div>
-   <div class="inforight">
-    <xsl:value-of select="d_peers_complete" />
-   </div>
-   <div class="clr"></div>
-  </li>
-  <li class="line">
-   <div class="infoleft">
-    <xsl:value-of select="/root/labels/pexenabled" />
-   </div>
-   <div class="inforight">
-    <xsl:value-of select="d_pex_active/@value" />
-   </div>
-   <div class="clr"></div>
-  </li>
-  <li class="line spacer">
-   <div class="infoleft">
-    <xsl:value-of select="/root/labels/pexsize" />
-   </div>
-   <div class="inforight">
-    <xsl:value-of select="d_size_pex" />
-    <xsl:text> / </xsl:text>
-    <xsl:value-of select="d_max_size_pex" />
-   </div>
-   <div class="clr"></div>
-  </li>
-  <li class="line">
-   <div class="infoleft">
-    <xsl:value-of select="/root/labels/upload" />
-   </div>
-   <div class="inforight">
-    <xsl:value-of select="d_up_rate/@value" />
-    <xsl:text> </xsl:text>
-    <xsl:value-of select="d_up_rate/@suffix" />
-    <xsl:text> / </xsl:text>
-    <xsl:value-of select="d_up_total/@value" />
-    <xsl:text> </xsl:text>
-    <xsl:value-of select="d_up_total/@suffix" />
-   </div>
-   <div class="clr"></div>
-  </li>
-  <li class="line">
-   <div class="infoleft">
-    <xsl:value-of select="/root/labels/download" />
-   </div>
-   <div class="inforight">
-    <xsl:value-of select="d_down_rate/@value" />
-    <xsl:text> </xsl:text>
-    <xsl:value-of select="d_down_rate/@suffix" />
-    <xsl:text> / </xsl:text>
-    <xsl:value-of select="d_down_total/@value" />
-    <xsl:text> </xsl:text>
-    <xsl:value-of select="d_down_total/@suffix" />
-   </div>
-   <div class="clr"></div>
-  </li>
-  <li class="line">
-   <div class="infoleft">
-    <xsl:value-of select="/root/labels/skipped" />
-   </div>
-   <div class="inforight">
-    <xsl:value-of select="d_skip_rate/@value" />
-    <xsl:text> </xsl:text>
-    <xsl:value-of select="d_skip_rate/@suffix" />
-    <xsl:text> / </xsl:text>
-    <xsl:value-of select="d_skip_total/@value" />
-    <xsl:text> </xsl:text>
-    <xsl:value-of select="d_skip_total/@suffix" />
-   </div>
-   <div class="clr"></div>
-  </li>
- </xsl:template>
-
- <xsl:template match="torrent_files_root">
-  <xsl:apply-templates select="torrent_files" />
- </xsl:template>
-
- <xsl:template match="torrent_files">
-  <xsl:apply-templates select="files_root" />
- </xsl:template>
-
- <xsl:template match="torrent_trackers_root">
-  <xsl:apply-templates select="torrent_trackers" />
- </xsl:template>
-
- <xsl:template match="torrent_trackers">
-  <xsl:apply-templates select="tracker" />
- </xsl:template>
-
- <xsl:template match="torrent_peers_root">
-  <xsl:apply-templates select="torrent_peers" />
- </xsl:template>
-
- <xsl:template match="torrent_peers">
-  <li class="phead">
-   <div class="paddress">
-    <xsl:value-of select="/root/labels/address" />
-   </div>
-   <div class="pup">
-    <xsl:value-of select="/root/labels/up_rate" />
-   </div>
-   <div class="pdown">
-    <xsl:value-of select="/root/labels/down_rate" />
-   </div>
-   <div class="prate">
-    <xsl:value-of select="/root/labels/peer_rate" />
-   </div>
-   <div class="pdone">
-    <xsl:value-of select="/root/labels/done" />
-   </div>
-   <div class="pincoming">
-    <xsl:value-of select="/root/labels/incoming" />
-   </div>
-   <div class="pencrypted">
-    <xsl:value-of select="/root/labels/encrypted" />
-   </div>
-   <div class="pclient">
-    <xsl:value-of select="/root/labels/pclientversion" />
-   </div>
-   <div class="clr"></div>
-  </li>
-  <xsl:apply-templates select="peer" />
- </xsl:template>
-
- <xsl:template match="files_root">
-  <xsl:apply-templates select="directory" />
-  <xsl:apply-templates select="file" />
- </xsl:template>
-
- <xsl:template match="directory">
-  <li>
-   <div class="dopenlink">
-    <a title="{/root/labels/clicktoopenclose}" onmouseover="this.style.cursor='pointer';" onclick="if ( this.parentNode.parentNode.getElementsByTagName( 'ul' ).item( 0 ).style.display == '' ) {{ this.parentNode.parentNode.getElementsByTagName( 'ul' ).item( 0 ).style.display = 'none' }} else {{ this.parentNode.parentNode.getElementsByTagName( 'ul' ).item( 0 ).style.display = '' }};"><xsl:value-of select="@dirname" /></a>
-   </div>
-   <div class="dpriority">
-    <form class="changedirpriorityform" name="changedirpriorityform_{@id}" method="post" action="{/root/iurl}?mod=changedirpriority&amp;hash={/root/hash}&amp;dir={@dirpath}">
-     <select class="whiteselect" name="dirpriority" title="Select directory priority" onchange="loadcontent_dirpriority( '{/root/iurl}', '{/root/hash}', '{@dirpath}', this.value );">
-      <option value="-1" title="{/root/labels/selectone}" selected="selected"><xsl:value-of select="/root/labels/selectone" /></option>
-      <option value="0" title="{/root/labels/off}"><xsl:value-of select="/root/labels/off" /></option>
-      <option value="1" title="{/root/labels/normal}"><xsl:value-of select="/root/labels/normal" /></option>
-      <option value="2" title="{/root/labels/high}"><xsl:value-of select="/root/labels/high" /></option>
-     </select>
-     <noscript>
-      <input class="submit" type="submit" name="OK" value="OK" title="OK" />
-     </noscript>
-    </form>
-   </div>
-   <div class="clr">_</div>
-   <ul class="directory" style="display: none;">
-    <xsl:apply-templates select="directory" />
-    <xsl:apply-templates select="file" />
-   </ul>
-  </li>
- </xsl:template>
-
- <xsl:template match="file">
-  <li onmouseover="this.style.background='#eeeeee';" onmouseout="this.style.background='';">
-   <div class="fname">
-    <span title="{/root/labels/lasttouched}: {f_last_touched}">
-     <xsl:value-of select="@filename" />
-    </span>
-   </div>
-   <div class="fpercentage">
-    <span title="{f_percentage/@value} {/root/labels/percentcompleted}">
-     <xsl:text>[</xsl:text>
-     <xsl:value-of select="f_percentage/@value" />
-     <xsl:text> %]</xsl:text>
-    </span>
-   </div>
-   <div class="fpriority">
-    <form class="changefilepriorityform" name="changefilepriorityform_{@id}" method="post" action="{/root/iurl}?mod=changefilepriority&amp;hash={/root/hash}&amp;id={@id}">
-     <select class="whiteselect" name="filepriority" title="{/root/labels/selectfilepriority}" onchange="loadcontent_filepriority( '{/root/iurl}', '{/root/hash}', '{@id}', this.value );">
-      <xsl:choose>
-       <xsl:when test="f_priority = 0">
-        <option value="0" title="{/root/labels/off}" selected="selected"><xsl:value-of select="/root/labels/off" /></option>
-        <option value="1" title="{/root/labels/normal}"><xsl:value-of select="/root/labels/normal" /></option>
-        <option value="2" title="{/root/labels/high}"><xsl:value-of select="/root/labels/high" /></option>
-       </xsl:when>
-       <xsl:when test="f_priority = 2">
-        <option value="0" title="{/root/labels/off}"><xsl:value-of select="/root/labels/off" /></option>
-        <option value="1" title="{/root/labels/normal}"><xsl:value-of select="/root/labels/normal" /></option>
-        <option value="2" title="{/root/labels/high}" selected="selected"><xsl:value-of select="/root/labels/high" /></option>
-       </xsl:when>
-       <xsl:otherwise>
-        <option value="0" title="{/root/labels/off}"><xsl:value-of select="/root/labels/off" /></option>
-        <option value="1" title="{/root/labels/normal}" selected="selected"><xsl:value-of select="/root/labels/normal" /></option>
-        <option value="2" title="{/root/labels/high}"><xsl:value-of select="/root/labels/high" /></option>
-       </xsl:otherwise>
-      </xsl:choose>
-     </select>
-    </form>
-   </div>
-   <div class="fsize">
-    <span title="{/root/labels/filesize}">
-     <xsl:value-of select="f_size_bytes/@value" />
-     <xsl:text> </xsl:text>
-     <xsl:value-of select="f_size_bytes/@suffix" />
-    </span>
-   </div>
-   <div class="fchunks">
-    <span title="{/root/labels/chunks}">
-     <xsl:choose>
-      <xsl:when test="f_range_first != f_range_second">
-       <xsl:value-of select="f_range_first" />
-       <xsl:text> - </xsl:text>
-       <xsl:value-of select="f_range_second" />
-      </xsl:when>
-      <xsl:otherwise>
-       <xsl:value-of select="f_range_first" />
-      </xsl:otherwise>
-     </xsl:choose>
-    </span>
-   </div>
-   <xsl:choose>
-    <xsl:when test="f_percentage = 1 and /root/allow_download = 'true'">
-     <div class="fdownload">
-      <a href="?mod=getfile&amp;hash={/root/hash}&amp;id={@id}" title="{/root/labels/downloadfile}"><xsl:value-of select="/root/labels/download" /></a>
-     </div>
-    </xsl:when>
-   </xsl:choose>
-   <div class="clr"></div>
-  </li>
- </xsl:template>
-
- <xsl:template match="tracker">
-  <li>
-   <ul>
-    <li>
-     <div class="tgroup">
-      <span title="{/root/labels/trackergroup}">
-       <xsl:value-of select="t_group" />
-       <xsl:text>:</xsl:text>
-      </span>
-     </div>
-     <div class="turl">
-      <span title="{/root/labels/type}: {t_type/@value}">
-       <xsl:value-of select="t_url" />
-      </span>
-     </div>
-     <div class="clr"></div>
-    </li>
-    <li>
-     <div class="tfocus">
-      <xsl:choose>
-       <xsl:when test="root/tottents/torrent_trackers_root/torrent_trackers/d_tracker_focus = @id">
-        <xsl:value-of select="/root/labels/focus" />
-        <xsl:text>: </xsl:text>
-        <xsl:value-of select="/root/labels/yes" />
-       </xsl:when>
-       <xsl:otherwise>
-        <xsl:value-of select="/root/labels/focus" />
-        <xsl:text>: </xsl:text>
-        <xsl:value-of select="/root/labels/no" />
-       </xsl:otherwise>
-      </xsl:choose>
-     </div>
-     <div class="tenabled">
-      <form class="changetrackerenabledform" name="changetrackerenabledform_{@id}" method="post" action="{/root/iurl}?mod=changetrackerenabled&amp;hash={/root/hash}&amp;id={@id}">
-       <xsl:value-of select="/root/labels/enabled" />
-       <xsl:text>: </xsl:text>
-       <select class="whiteselect" name="trackerenabled" title="{/root/labels/selecttrackerenabled}" onchange="loadcontent_trackerenabled( '{/root/iurl}', '{/root/hash}', '{@id}', this.value )">
-        <xsl:choose>
-         <xsl:when test="t_enabled = 0">
-          <option value="1" title="{/root/labels/yes}"><xsl:value-of select="/root/labels/yes" /></option>
-          <option value="0" title="{/root/labels/no}" selected="selected"><xsl:value-of select="/root/labels/no" /></option>
-         </xsl:when>
-         <xsl:otherwise>
-          <option value="1" title="{/root/labels/yes}" selected="selected"><xsl:value-of select="/root/labels/yes" /></option>
-          <option value="0" title="{/root/labels/no}"><xsl:value-of select="/root/labels/no" /></option>
-         </xsl:otherwise>
-        </xsl:choose>
-       </select>
-      </form>
-     </div>
-     <div class="topen">
-      <xsl:value-of select="/root/labels/opened" />
-      <xsl:text>: </xsl:text>
-      <xsl:choose>
-       <xsl:when test="t_open != 0">
-        <xsl:value-of select="/root/labels/yes" />
-       </xsl:when>
-       <xsl:otherwise>
-        <xsl:value-of select="/root/labels/no" />
-       </xsl:otherwise>
-      </xsl:choose>
-     </div>
-     <div class="tpeers">
-      <xsl:value-of select="/root/labels/seedersleechers" />
-      <xsl:text>: </xsl:text>
-      <xsl:value-of select="t_scrape_complete" />
-      <xsl:text> / </xsl:text>
-      <xsl:value-of select="t_scrape_incomplete" />
-     </div>
-     <div class="clr"></div>
-    </li>
-    <li>
-     <div class="tscrape">
-      <span title="{/root/labels/mininterval}: {t_min_interval/@value} - Normal interval: {t_normal_interval/@value}">
-       <xsl:value-of select="/root/labels/lasttimescraped" />
-       <xsl:text>: </xsl:text>
-       <xsl:value-of select="t_scrape_time_last/@value" />
-      </span>
-     </div>
-     <div class="clr"></div>
-    </li>
-   </ul>
-  </li>
- </xsl:template>
-
- <xsl:template match="peer">
-  <li>
-   <div class="paddress">
-    <xsl:choose>
-     <xsl:when test="p_country != ''">
-      <img src="flags/{p_country}.gif" alt="flag" title="{p_country/@value}" />
-     </xsl:when>
-    </xsl:choose>
-    <xsl:value-of select="p_address" />
-   </div>
-   <div class="pup">
-    <xsl:value-of select="p_up_rate/@value" />
-    <xsl:text> </xsl:text>
-    <xsl:value-of select="p_up_rate/@suffix" />
-   </div>
-   <div class="pdown">
-    <xsl:value-of select="p_down_rate/@value" />
-    <xsl:text> </xsl:text>
-    <xsl:value-of select="p_down_rate/@suffix" />
-   </div>
-   <div class="prate">
-    <xsl:value-of select="p_peer_rate/@value" />
-    <xsl:text> </xsl:text>
-    <xsl:value-of select="p_peer_rate/@suffix" />
-   </div>
-   <div class="pdone">
-    <xsl:value-of select="p_completed_percent" />
-    <xsl:text> %</xsl:text>
-   </div>
-   <div class="pincoming">
-    <xsl:value-of select="p_incoming/@value" />
-   </div>
-   <div class="pencrypted">
-    <xsl:value-of select="p_encrypted/@value" />
-   </div>
-   <div class="pclient">
-    <xsl:value-of select="p_client_version" />
-   </div>
-   <div class="clr"></div>
-  </li>
- </xsl:template>
-
-</xsl:stylesheet>
Index: c/themes/default_ajax/layout.editor.index.xsl
===================================================================
--- src/themes/default_ajax/layout.editor.index.xsl	(revision 53f5ceaa73f2e26bf68bfb1e991963323da16118)
+++ 	(revision )
@@ -1,102 +1,0 @@
-﻿<xsl:stylesheet version="1.1"
-                xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
-                lang="en">
- <xsl:output method="xml"
-             indent="no"
-             encoding="utf-8"
-             doctype-public="-//W3C//DTD XHTML 1.0 Transitional//EN"
-             doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd" />
-
- <xsl:template match="root">
-  <html lang="en">
-   <head>
-    <meta http-equiv="content-type" content="text/html; charset=utf-8" />
-    <meta http-equiv="content-language" content="en" />
-    <meta http-equiv="cache-control" content="no-store, no-cache, must-revalidate, post-check=0, pre-check=0" />
-    <meta http-equiv="pragma" content="no-cache" />
-    <meta http-equiv="expires" content="thu, 1 jan 1970 00:00:00 gmt" />
-    <meta http-equiv="imagetoolbar" content="no" />  
-    <xsl:choose>
-     <xsl:when test="/root/torrents/@refreshrate != 0">
-      <meta http-equiv="refresh" content="{/root/torrents/@refreshrate}; url={curl}" />  
-     </xsl:when>
-    </xsl:choose>
-    <meta name="author" content="{/root/labels/author}" />
-    <meta name="description" content="{/root/labels/description}" />
-    <meta name="doc-type" content="web page" />
-    <meta name="rating" content="general" />
-    <meta name="robots" content="noindex, nofollow" />
-    <link rel="stylesheet" type="text/css" href="themes/default_ajax/inc/style.css" />
-    <script type="text/javascript" src="themes/default_ajax/inc/afunc.js"></script>
-    <script type="text/javascript" src="themes/default_ajax/inc/hfunc.js"></script>
-    <title><xsl:value-of select="/root/labels/title" /></title>
-   </head>
-   <body onload="toggle( '{/root/mod}_{/root/page}' );">
-    <div id="top">
-    </div>
-    <div id="main">
-     <div id="balh">
-      <div id="fomenu">
-       <ul>
-        <li class="first"><a href="{/root/url}" title="Main">Main</a></li>
-        <li><a href="?mod=loadtorrent" title="Load torrent">Load torrent</a></li>
-        <li><a href="?mod=savetorrent" title="Save torrent">Save torrent</a></li>
-       </ul>
-      </div>
-     </div>
-     <div id="kozeph">
-      <xsl:apply-templates select="err" />
-      <xsl:apply-templates select="torrent" />
-     </div>
-     <div class="clr1"></div>
-    </div>
-   </body>
-  </html>
- </xsl:template>
-
- <xsl:template match="err">
-  <div id="err">
-   <span title="Click to hide" onmouseover="this.style.cursor='pointer';" onclick="document.getElementById( 'err' ).style.display='none';">
-    <xsl:value-of select="errmsg" />
-   </span>
-  </div>
- </xsl:template>
-
- <xsl:template match="loadtorrent">
-  <form id="loadtorrent" name="loadtorrent" enctype="multipart/form-data" method="post" action="{/root/iurl}?mod=loadtorrent">
-   <ul class="tuform">
-    <li>
-     <div class="tufleft">Open from:</div>
-     <div class="tufright">
-      <select name="tfmethod" title="Open from" onchange="if ( this.value == 'url' ) {{ document.getElementById( 'torrenturl' ).style.display=''; document.getElementById( 'torrentfile' ).style.display='none'; }} else {{ document.getElementById( 'torrenturl' ).style.display='none'; document.getElementById( 'torrentfile' ).style.display=''; }}">
-       <option value="file">File upload</option>
-       <option value="url">URL</option>
-      </select>
-     </div>
-     <div class="clr"></div>
-    </li>
-    <li id="torrentfile">
-     <div class="tufleft">Torrent file:</div>
-     <div class="tufright">
-      <input type="hidden" name="MAX_FILE_SIZE" value="1000000" />
-      <input type="file" name="torrentfile" title="Torrent File" value="" />
-	  <input type="checkbox" name="keeptorrentfile" title="Keep the .torrent file" />
-	  <span>Keep the .torrent file</span>
-     </div>
-     <div class="clr"></div>
-    </li>
-    <li id="torrenturl">
-     <div class="tufleft">Torrent URL:</div>
-     <div class="tufright">
-      <input type="text" name="torrenturl" title="Torrent url" value="" />
-     </div>
-     <div class="clr"></div>
-    </li>
-    <li class="formsend">
-     <input class="inputok" type="submit" name="loadtorrent" title="Load torrent" value="Load torrent" />
-    </li>
-   </ul>
-  </form>
- </xsl:template>
-
-</xsl:stylesheet>
Index: c/themes/default_ajax/layout.main.index.xsl
===================================================================
--- src/themes/default_ajax/layout.main.index.xsl	(revision 53f5ceaa73f2e26bf68bfb1e991963323da16118)
+++ 	(revision )
@@ -1,1486 +1,0 @@
-﻿<xsl:stylesheet version="1.1"
-                xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
-                lang="en">
- <xsl:output method="xml"
-             indent="no"
-             encoding="utf-8"
-             doctype-public="-//W3C//DTD XHTML 1.0 Transitional//EN"
-             doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd" />
-
- <xsl:template match="root">
-  <html xml:lang="{language}" lang="{language}">
-   <head>
-    <meta http-equiv="content-type" content="text/html; charset=utf-8" />
-    <meta http-equiv="content-language" content="{language}" />
-    <meta http-equiv="cache-control" content="no-store, no-cache, must-revalidate, post-check=0, pre-check=0" />
-    <meta http-equiv="pragma" content="no-cache" />
-    <meta http-equiv="expires" content="thu, 1 jan 1970 00:00:00 gmt" />
-    <meta http-equiv="imagetoolbar" content="no" />  
-    <xsl:choose>
-     <xsl:when test="@refreshrate != 0">
-      <meta http-equiv="refresh" content="{@refreshrate}; url={curl}" />  
-     </xsl:when>
-    </xsl:choose>
-    <meta name="author" content="{labels/author}" />
-    <meta name="description" content="{labels/description}" />
-    <meta name="doc-type" content="web page" />
-    <meta name="rating" content="general" />
-    <meta name="robots" content="noindex, nofollow" />
-    <link rel="stylesheet" type="text/css" href="themes/default_ajax/inc/style.css" />
-    <script type="text/javascript" src="themes/default_ajax/inc/afunc.js"></script>
-    <script type="text/javascript" src="themes/default_ajax/inc/hfunc.js"></script>
-    <title><xsl:value-of select="labels/title" /></title>
-   </head>
-   <body onload="toggle( '{mod}_{page}' );">
-    <div id="top">
-    </div>
-    <div id="main">
-     <div id="leftcol">
-      <div id="mainmenu">
-       <ul>
-        <li class="first"><a href="{url}" title="{labels/torrents}"><xsl:value-of select="labels/torrents" /></a></li>
-        <xsl:choose>
-         <xsl:when test="mod = 'torrent'">
-          <li class="submenu">
-           <a href="?mod=torrent&amp;hash={hash}&amp;page=peers" title="{labels/peerlist}"><xsl:value-of select="labels/peerlist" /></a>
-          </li>
-          <li class="submenu">
-           <a href="?mod=torrent&amp;hash={hash}&amp;page=info" title="{labels/info}"><xsl:value-of select="labels/info" /></a>
-          </li>
-          <li class="submenu">
-           <a href="?mod=torrent&amp;hash={hash}&amp;page=files" title="{labels/filelist}"><xsl:value-of select="labels/filelist" /></a>
-          </li>
-          <li class="submenu">
-           <a href="?mod=torrent&amp;hash={hash}&amp;page=trackers" title="{labels/trackerlist}"><xsl:value-of select="labels/trackerlist" /></a>
-          </li>
-          <li class="submenu notshown">
-           <a href="?mod=torrent&amp;hash={hash}&amp;page=chunks" title="{labels/chunksseen}"><xsl:value-of select="labels/chunksseen" /></a>
-          </li>
-          <li class="submenu notshown">
-           <a href="?mod=torrent&amp;hash={hash}&amp;page=transfers" title="{labels/transferlist}"><xsl:value-of select="labels/transferlist" /></a>
-          </li>
-         </xsl:when>
-        </xsl:choose>
-        <li><a href="?mod=addtorrent" title="{labels/addtorrent}"><xsl:value-of select="labels/addtorrent" /></a></li>
-        <li><a href="?mod=serverinfo" title="{labels/serverinfo}"><xsl:value-of select="labels/serverinfo" /></a></li>
-        <li><a href="{iurl}?mod=logout" title="{labels/logout}"><xsl:value-of select="labels/logout" /></a></li>
-       </ul>
-      </div>
-     </div>
-     <div id="maincol">
-      <xsl:apply-templates select="err" />
-      <xsl:apply-templates select="addtorrent" />
-      <xsl:apply-templates select="torrents" />
-     </div>
-     <div class="clr1"></div>
-    </div>
-    <div id="footer">
-     <span><a href="https://rtwi.jmk.hu/" title="{labels/homepage}"><xsl:value-of select="labels/homepage" /></a></span>
-    </div>
-   </body>
-  </html>
- </xsl:template>
-
- <xsl:template match="err">
-  <div id="err" title="{/root/labels/clicktohide}" onmouseover="this.style.cursor='pointer';" onclick="this.parentNode.removeChild( this );">
-   <xsl:apply-templates select="errmsg" />
-  </div>
- </xsl:template>
- 
- <xsl:template match="errmsg">
-  <div>
-   <xsl:value-of select="msg" />
-  </div>
- </xsl:template>
-
-
- <xsl:template match="addtorrent">
-  <div class="spacer">
-   <xsl:apply-templates select="languages" />
-  </div>
-  <form id="addtorrent" name="addtorrent" enctype="multipart/form-data" method="post" action="{/root/iurl}?mod=addtorrent">
-   <ul class="tuform">
-    <li>
-     <div class="tufleft"><xsl:value-of select="/root/labels/openfrom" />:</div>
-     <div class="tufright">
-      <select name="tfmethod" title="{/root/labels/openfrom}" onchange="if ( this.value == 'url' ) {{ document.getElementById( 'torrenturl' ).style.display=''; document.getElementById( 'torrentfile' ).style.display='none'; }} else {{ document.getElementById( 'torrenturl' ).style.display='none'; document.getElementById( 'torrentfile' ).style.display=''; }}">
-       <option value="file"><xsl:value-of select="/root/labels/fileupload" /></option>
-       <option value="url"><xsl:value-of select="/root/labels/url" /></option>
-      </select>
-     </div>
-     <div class="clr"></div>
-    </li>
-    <li id="torrentfile">
-     <div class="tufleft"><xsl:value-of select="/root/labels/torrentfile" />:</div>
-     <div class="tufright">
-      <input type="hidden" name="MAX_FILE_SIZE" value="1000000" />
-      <input type="file" name="torrentfile" title="{/root/labels/torrentfile}" value="" />
-     </div>
-     <div class="clr"></div>
-    </li>
-    <li id="torrenturl">
-     <div class="tufleft"><xsl:value-of select="/root/labels/torrenturl" />:</div>
-     <div class="tufright">
-      <input type="text" name="torrenturl" title="{/root/labels/torrenturl}" value="" />
-     </div>
-     <div class="clr"></div>
-    </li>
-    <li>
-     <div class="tufleft"><xsl:value-of select="/root/labels/starttorrent" />:</div>
-     <div class="tufright">
-      <input type="checkbox" name="torrentstart" title="{/root/labels/starttorrentafteradded}" value="start" checked="checked" />
-     </div>
-     <div class="clr"></div>
-    </li>
-    <li>
-     <div class="tufleft"><xsl:value-of select="/root/labels/downloadto" />:</div>
-     <div class="tufright">
-      <input type="hidden" name="dlpath" value="{@path}" />
-      <ul class="tufupload">
-       <li onmouseover="this.style.background='#eeeeee';" onmouseout="this.style.background='';">
-        <div class="tufpath">
-         <a href="?mod=addtorrent&amp;path={@ppath}">..</a>
-        </div>
-        <div class="tufspace">
-         <xsl:value-of select="@freespace_value" />
-         <xsl:text> </xsl:text>
-         <xsl:value-of select="@freespace_suffix" />
-        </div>
-        <div class="clr"></div>
-       </li>
-       <xsl:apply-templates select="dlpath" />
-      </ul>
-     </div>
-     <div class="clr"></div>
-    </li>
-    <li class="formsend">
-     <input class="inputok" type="submit" name="addtorrent" title="{/root/labels/addtorrent}" value="{/root/labels/addtorrent}" />
-    </li>
-   </ul>
-  </form>
- </xsl:template>
-
- <xsl:template match="torrents">
-  <ul>
-   <li class="tline first">
-    <xsl:apply-templates select="viewtypes" />
-    <xsl:apply-templates select="refreshrates" />
-    <xsl:apply-templates select="languages" />
-    <xsl:choose>
-     <xsl:when test="/root/mod = ''">
-      <form id="doonalltorrentform" name="doonalltorrentform" method="post" action="{/root/iurl}?mod=doonalltorrent">
-       <select class="whiteselect" name="task" title="{/root/labels/selecttask}" onchange="window.location='{/root/iurl}?mod=doonalltorrent&amp;task='+this.value;">
-        <option value="select" title="{/root/labels/selecttask}" selected="selected"><xsl:value-of select="/root/labels/selecttask" /></option>
-        <option value="start" title="{/root/labels/startall}"><xsl:value-of select="/root/labels/startall" /></option>
-        <option value="stop" title="{/root/labels/stopall}"><xsl:value-of select="/root/labels/stopall" /></option>
-        <option value="open" title="{/root/labels/openall}"><xsl:value-of select="/root/labels/openall" /></option>
-        <option value="close" title="{/root/labels/closeall}"><xsl:value-of select="/root/labels/closeall" /></option>
-        <option value="checkhash" title="{/root/labels/checkall}"><xsl:value-of select="/root/labels/checkall" /></option>
-        <option value="remove" title="{/root/labels/removeall}"><xsl:value-of select="/root/labels/removeall" /></option>
-       </select>
-       <noscript>
-        <input class="submit" id="doatsubmit" type="submit" name="doatsubmit" title="{/root/labels/ok}" value="{/root/labels/ok}" />
-       </noscript>
-      </form>
-     </xsl:when>
-    </xsl:choose>
-    <div class="clr"></div>
-   </li>
-   <xsl:apply-templates select="torrent">
-    <xsl:sort select="d_name" lang="utf-8" data-type="text" order="ascending" />
-   </xsl:apply-templates>
-   <xsl:apply-templates select="torrent_info_root" />
-   <xsl:apply-templates select="torrent_files_root" />
-   <xsl:apply-templates select="torrent_peers_root" />
-   <xsl:apply-templates select="torrent_trackers_root" />
-   <xsl:apply-templates select="server_info" />
-   <li class="tline last">
-    <xsl:choose>
-     <xsl:when test="/root/allow_throttle = 'true'">
-      <div class="tthrottle" onmouseover="this.style.cursor='pointer';" onclick="toggle( '_info_restore' );">
-       <form id="changethrottleform" name="changethrottleform" method="post" action="{/root/iurl}?mod=changethrottle">
-        <span title="{/root/labels/clicktochange}">
-         <xsl:text>[</xsl:text>
-         <xsl:value-of select="/root/labels/throttle" />
-         <xsl:text> </xsl:text>
-        </span>
-        <span title="{/root/labels/uploadlimit}">
-         <span id="throttleup" style="display: none;"><xsl:value-of select="upload_rate/@value" /></span>
-         <input type="text" id="throttleupinput" name="upspeed" value="{upload_rate/@value}" />
-         <xsl:text> KB</xsl:text>
-        </span>
-        <xsl:text> / </xsl:text>
-        <span title="{/root/labels/downloadlimit}">
-         <span id="throttledown" style="display: none;"><xsl:value-of select="download_rate/@value" /></span>
-         <input type="text" id="throttledowninput" name="downspeed" value="{download_rate/@value}" />
-         <xsl:text> KB</xsl:text>
-        </span>
-        <input class="submit" id="tsubmit" type="submit" name="tsubmit" title="{/root/labels/ok}" value="{/root/labels/ok}" />
-        <xsl:text>]</xsl:text>
-       </form>
-      </div>
-     </xsl:when>
-     <xsl:otherwise>
-      <div class="tthrottle">
-        <span>
-         <xsl:text>[</xsl:text>
-         <xsl:value-of select="/root/labels/throttle" />
-         <xsl:text> </xsl:text>
-        </span>
-       <span title="{/root/labels/uploadlimit}"><xsl:value-of select="upload_rate/@value" /> KB</span>
-       <xsl:text> / </xsl:text>
-       <span title="{/root/labels/downloadlimit}"><xsl:value-of select="download_rate/@value" /> KB</span>
-       <xsl:text>]</xsl:text>
-      </div>
-     </xsl:otherwise>
-    </xsl:choose>
-    <div class="trates_total">
-     <xsl:text>[</xsl:text>
-     <xsl:value-of select="/root/labels/rate" />
-     <xsl:text> </xsl:text>
-     <span title="{/root/labels/uploadspeed}">
-      <xsl:value-of select="bytes_up/@value" />
-      <xsl:text> </xsl:text>
-      <xsl:value-of select="bytes_up/@suffix" />
-     </span>
-     <xsl:text> / </xsl:text>
-     <span title="{/root/labels/downloadspeed}">
-      <xsl:value-of select="bytes_down/@value" />
-      <xsl:text> </xsl:text>
-      <xsl:value-of select="bytes_down/@suffix" />
-     </span>
-     <xsl:text>]</xsl:text>
-    </div>
-    <div class="clr"></div>
-   </li>
-  </ul>
- </xsl:template>
-
- <xsl:template match="viewtypes">
-  <form id="changeviewform" name="changeviewform" method="post" action="{/root/iurl}?mod=changeview">
-   <xsl:text>[</xsl:text>
-   <xsl:value-of select="/root/labels/view" />
-   <xsl:text>: </xsl:text>
-   <select class="whiteselect" name="viewtype" title="{/root/labels/selectviewtype}" onchange="window.location='{/root/iurl}?mod=changeview&amp;viewtype='+this.value;">
-    <xsl:apply-templates select="viewtype" />
-   </select>
-   <noscript>
-    <input class="submit" id="vtsubmit" type="submit" name="vtsubmit" title="{/root/labels/ok}" value="{/root/labels/ok}" />
-   </noscript>
-   <xsl:text>]</xsl:text>
-  </form>
- </xsl:template>
-
- <xsl:template match="viewtype">
-  <xsl:choose>
-   <xsl:when test="/root/@viewtype = @value">
-    <option value="{@value}" title="{@title}" selected="selected"><xsl:value-of select="@title" /></option>
-   </xsl:when>
-   <xsl:otherwise>
-    <option value="{@value}" title="{@title}"><xsl:value-of select="@title" /></option>
-   </xsl:otherwise>
-  </xsl:choose>
- </xsl:template>
-
- <xsl:template match="refreshrates">
-  <form id="changerefreshform" name="changerefreshform" method="post" action="{/root/iurl}?mod=changerefresh">
-   <xsl:text>[</xsl:text>
-   <xsl:value-of select="/root/labels/refresh" />
-   <xsl:text>: </xsl:text>
-   <select class="whiteselect" name="refreshrate" title="{/root/labels/selectrefreshrate}" onchange="window.location='{/root/iurl}?mod=changerefresh&amp;refreshrate='+this.value;">
-    <xsl:apply-templates select="refreshrate" />
-   </select>
-   <noscript>
-    <input class="submit" id="rrsubmit" type="submit" name="rrsubmit" title="{/root/labels/ok}" value="{/root/labels/ok}" />
-   </noscript>
-   <xsl:text>]</xsl:text>
-  </form>
- </xsl:template>
-
- <xsl:template match="refreshrate">
-  <xsl:choose>
-   <xsl:when test="/root/@refreshrate = @value">
-    <option value="{@value}" title="{@title}" selected="selected"><xsl:value-of select="@title" /></option>
-   </xsl:when>
-   <xsl:otherwise>
-    <option value="{@value}" title="{@title}"><xsl:value-of select="@title" /></option>
-   </xsl:otherwise>
-  </xsl:choose>
- </xsl:template>
-
- <xsl:template match="languages">
-  <form id="changelanguageform" name="changelanguageform" method="post" action="{/root/iurl}?mod=changelanguage">
-   <xsl:text>[</xsl:text>
-   <xsl:value-of select="/root/labels/language" />
-   <xsl:text>: </xsl:text>
-   <select class="whiteselect" name="language" title="{/root/labels/selectlanguage}" onchange="window.location='{/root/iurl}?mod=changelanguage&amp;language='+this.value;">
-    <xsl:apply-templates select="language" />
-   </select>
-   <noscript>
-    <input class="submit" id="lsubmit" type="submit" name="lsubmit" title="{/root/labels/ok}" value="{/root/labels/ok}" />
-   </noscript>
-   <xsl:text>]</xsl:text>
-  </form>
- </xsl:template>
-
- <xsl:template match="language">
-  <xsl:choose>
-   <xsl:when test="/root/@language = @value">
-    <option value="{@value}" title="{@title}" selected="selected"><xsl:value-of select="@title" /></option>
-   </xsl:when>
-   <xsl:otherwise>
-    <option value="{@value}" title="{@title}"><xsl:value-of select="@title" /></option>
-   </xsl:otherwise>
-  </xsl:choose>
- </xsl:template>
-
- <xsl:template match="torrent">
-  <li class="tline">
-   <div class="ticon">
-    <xsl:choose>
-     <xsl:when test="d_hashing != 0">
-      <img class="icon" src="themes/default_ajax/pics/hashing.png" alt="{/root/labels/hashing}" title="{/root/labels/hashingsince} {d_state_changed/@value}" />
-     </xsl:when>
-     <xsl:when test="d_active != 0">
-      <img class="icon" src="themes/default_ajax/pics/{d_connection_current}ing.png" alt="{d_connection_current}" title="{d_connection_current/@value} {/root/labels/sincepre} {d_state_changed/@value} {/root/labels/sincepost}" />
-     </xsl:when>
-     <xsl:when test="d_complete != 0">
-      <xsl:choose>
-       <xsl:when test="d_open != 0">
-        <img class="icon" src="themes/default_ajax/pics/finished.png" alt="{/root/labels/finished}" title="{/root/labels/finishedsince} {d_state_changed/@value}" />
-       </xsl:when>
-       <xsl:otherwise>
-        <img class="icon" src="themes/default_ajax/pics/finished_c.png" alt="{/root/labels/finished}" title="{/root/labels/finishedsince} {d_state_changed/@value}" />
-       </xsl:otherwise>
-      </xsl:choose>
-     </xsl:when>
-     <xsl:when test="d_open != 0">
-      <img class="icon" src="themes/default_ajax/pics/stopped.png" alt="{/root/labels/stopped}" title="{/root/labels/stoppedsince} {d_state_changed/@value}" />
-     </xsl:when>
-     <xsl:otherwise>
-      <img class="icon" src="themes/default_ajax/pics/closed.png" alt="{/root/labels/closed}" title="{/root/labels/closedsince} {d_state_changed/@value}" />
-     </xsl:otherwise>
-    </xsl:choose>
-   </div>
-   <div class="tname">
-    <xsl:choose>
-     <xsl:when test="/root/allow_ajax = 'true'">
-      <a href="?mod=torrent&amp;hash={d_hash}" title="{/root/labels/details}" onclick="if ( document.getElementById( 'torrent_{d_hash}' ).style.display == '' ) {{ document.getElementById( 'torrent_{d_hash}' ).style.display = 'none' }} else {{ document.getElementById( 'torrent_{d_hash}' ).style.display = ''}} return false;"><xsl:value-of select="d_name" /></a>
-     </xsl:when>
-     <xsl:otherwise>
-      <a href="?mod=torrent&amp;hash={d_hash}" title="{/root/labels/details}"><xsl:value-of select="d_name" /></a>
-     </xsl:otherwise>
-    </xsl:choose>
-   </div>
-   <div class="tops">
-    <xsl:choose>
-     <xsl:when test="d_hashing != 0">
-      <xsl:value-of select="d_hashing/@value" />
-     </xsl:when>
-     <xsl:otherwise>
-      <a href="{/root/iurl}?mod=torrentcheckhash&amp;hash={d_hash}" title="{/root/labels/checkhash}"><xsl:value-of select="/root/labels/checkhash" /></a>
-     </xsl:otherwise>
-    </xsl:choose>
-    <xsl:choose>
-     <xsl:when test="d_active != 0">
-      <a href="{/root/iurl}?mod=torrentstop&amp;hash={d_hash}" title="{/root/labels/stop}"><xsl:value-of select="/root/labels/stop" /></a>
-     </xsl:when>
-     <xsl:otherwise>
-      <xsl:choose>
-       <xsl:when test="d_hashing != 0">
-        <a href="{/root/iurl}?mod=torrentstop&amp;hash={d_hash}" title="{/root/labels/stop}"><xsl:value-of select="/root/labels/stop" /></a>
-       </xsl:when>
-       <xsl:otherwise>
-        <a href="{/root/iurl}?mod=torrentstart&amp;hash={d_hash}" title="{/root/labels/start}"><xsl:value-of select="/root/labels/start" /></a>
-       </xsl:otherwise>
-      </xsl:choose>
-     </xsl:otherwise>
-    </xsl:choose>
-    <xsl:choose>
-     <xsl:when test="d_open = 0">
-      <a href="{/root/iurl}?mod=torrentopen&amp;hash={d_hash}" title="{/root/labels/open}"><xsl:value-of select="/root/labels/open" /></a>
-     </xsl:when>
-     <xsl:otherwise>
-      <a href="{/root/iurl}?mod=torrentclose&amp;hash={d_hash}" title="{/root/labels/close}"><xsl:value-of select="/root/labels/close" /></a>
-     </xsl:otherwise>
-    </xsl:choose>
-    <a href="{/root/iurl}?mod=torrentremove&amp;hash={d_hash}" title="{/root/labels/remove}" onclick="var answer = confirm( '{/root/labels/areyousure}' ); if ( !answer ) return false;"><xsl:value-of select="/root/labels/remove" /></a>
-    <xsl:choose>
-     <xsl:when test="/root/allow_erase = 'true'">
-      <a href="{/root/iurl}?mod=torrenterase&amp;hash={d_hash}" title="{/root/labels/erase}" onclick="var answer = confirm( '{/root/labels/areyousureerase}\n{d_base_path}\n{/root/labels/alldatawillbedestroyed}' ); if ( !answer ) return false;"><xsl:value-of select="/root/labels/erase" /></a>
-     </xsl:when>
-    </xsl:choose>
-   </div>
-   <div class="clr"></div>
-   <div class="tbytes">
-    <xsl:choose>
-     <xsl:when test="d_complete = 1">
-      <span title="{/root/labels/downloadfinished}"><xsl:value-of select="/root/labels/done" /> </span>
-     </xsl:when>
-     <xsl:otherwise>
-      <span title="{/root/labels/downloadeddata}">
-       <xsl:value-of select="d_bytes_done/@value" />
-       <xsl:text> </xsl:text>
-       <xsl:value-of select="d_bytes_done/@suffix" />
-      </span>
-      <xsl:text> / </xsl:text>
-     </xsl:otherwise>
-    </xsl:choose>
-    <span title="{/root/labels/torrentsize}">
-     <xsl:value-of select="d_size_bytes/@value" />
-     <xsl:text> </xsl:text>
-     <xsl:value-of select="d_size_bytes/@suffix" />
-    </span>
-   </div>
-   <div class="trates">
-    <xsl:value-of select="/root/labels/rate" />
-    <xsl:text>: </xsl:text>
-    <span title="{/root/labels/uploadspeed}">
-     <xsl:value-of select="d_up_rate/@value" />
-     <xsl:text> </xsl:text>
-     <xsl:value-of select="d_up_rate/@suffix" />
-    </span>
-    <xsl:text> / </xsl:text>
-    <span title="{/root/labels/downloadspeed}">
-     <xsl:value-of select="d_down_rate/@value" />
-     <xsl:text> </xsl:text>
-     <xsl:value-of select="d_down_rate/@suffix" />
-    </span>
-   </div>
-   <div class="tupbytes">
-    <span><xsl:value-of select="/root/labels/uploaded" />: </span>
-    <span title="{/root/labels/uploadeddata}">
-     <xsl:value-of select="d_up_total/@value" />
-     <xsl:text> </xsl:text>
-     <xsl:value-of select="d_up_total/@suffix" />
-    </span>
-   </div>
-   <xsl:choose>
-    <xsl:when test="d_percentage != 1">
-     <xsl:choose>
-      <xsl:when test="d_hashing != 0">
-       <div class="tpercentage">
-        <span title="{d_hpercentage/@value} {/root/labels/percenthashed}">
-         <xsl:text>[</xsl:text>
-         <xsl:value-of select="d_hpercentage/@value" />
-         <xsl:text> %]</xsl:text>
-        </span>
-       </div>
-       <div class="tpercentage">
-        <span title="{d_percentage/@value} {/root/labels/percentcompleted}">
-         <xsl:text>[</xsl:text>
-         <xsl:value-of select="d_percentage/@value" />
-         <xsl:text> %]</xsl:text>
-        </span>
-       </div>
-      </xsl:when>
-      <xsl:otherwise>
-       <div class="tpercentage">
-        <span title="{d_percentage/@value} {/root/labels/percentcompleted}">
-         <xsl:text>[</xsl:text>
-         <xsl:value-of select="d_percentage/@value" />
-         <xsl:text> %]</xsl:text>
-        </span>
-       </div>
-      </xsl:otherwise>
-     </xsl:choose>
-     <xsl:choose>
-      <xsl:when test="d_estimated_time != ''">
-       <div class="testimate">
-        <span title="{/root/labels/estimatedtimeremaining}">
-         <xsl:value-of select="d_estimated_time/@value" />
-        </span>
-       </div>
-      </xsl:when>
-     </xsl:choose>
-    </xsl:when>
-   </xsl:choose>
-   <div class="tratio">
-    <xsl:text>[</xsl:text>
-    <xsl:choose>
-     <xsl:when test="d_tied_to_file != ''">
-      <span title="{/root/labels/tiedtofile}">T</span>
-     </xsl:when>
-    </xsl:choose>
-    <xsl:choose>
-     <xsl:when test="d_ignore_commands != 0">
-      <span title="{/root/labels/ignoringcommands}">I</span>
-     </xsl:when>
-    </xsl:choose>
-    <span title="{/root/labels/ratio}">
-     <xsl:text> R: </xsl:text>
-     <xsl:value-of select="d_ratio/@value" />
-    </span>
-    <xsl:text>]</xsl:text>
-   </div>
-   <div class="tpriority">
-    <form class="changepriorityform" name="changepriorityform_{d_hash}" method="post" action="{/root/iurl}?mod=changepriority&amp;hash={d_hash}">
-     <select class="whiteselect" name="priority" title="{/root/labels/selectpriority}" onchange="window.location='{/root/iurl}?mod=changepriority&amp;hash={d_hash}&amp;priority='+this.value;">
-      <xsl:choose>
-       <xsl:when test="d_priority = 0">
-        <option value="0" title="{/root/labels/off}" selected="selected"><xsl:value-of select="/root/labels/off" /></option>
-        <option value="1" title="{/root/labels/low}"><xsl:value-of select="/root/labels/low" /></option>
-        <option value="2" title="{/root/labels/normal}"><xsl:value-of select="/root/labels/normal" /></option>
-        <option value="3" title="{/root/labels/high}"><xsl:value-of select="/root/labels/high" /></option>
-       </xsl:when>
-       <xsl:when test="d_priority = 1">
-        <option value="0" title="{/root/labels/off}"><xsl:value-of select="/root/labels/off" /></option>
-        <option value="1" title="{/root/labels/low}" selected="selected"><xsl:value-of select="/root/labels/low" /></option>
-        <option value="2" title="{/root/labels/normal}"><xsl:value-of select="/root/labels/normal" /></option>
-        <option value="3" title="{/root/labels/high}"><xsl:value-of select="/root/labels/high" /></option>
-       </xsl:when>
-       <xsl:when test="d_priority = 3">
-        <option value="0" title="{/root/labels/off}"><xsl:value-of select="/root/labels/off" /></option>
-        <option value="1" title="{/root/labels/low}"><xsl:value-of select="/root/labels/low" /></option>
-        <option value="2" title="{/root/labels/normal}"><xsl:value-of select="/root/labels/normal" /></option>
-        <option value="3" title="{/root/labels/high}" selected="selected"><xsl:value-of select="/root/labels/high" /></option>
-       </xsl:when>
-       <xsl:otherwise>
-        <option value="0" title="{/root/labels/off}"><xsl:value-of select="/root/labels/off" /></option>
-        <option value="1" title="{/root/labels/low}"><xsl:value-of select="/root/labels/low" /></option>
-        <option value="2" title="{/root/labels/normal}" selected="selected"><xsl:value-of select="/root/labels/normal" /></option>
-        <option value="3" title="{/root/labels/high}"><xsl:value-of select="/root/labels/high" /></option>
-       </xsl:otherwise>
-      </xsl:choose>
-     </select>
-     <noscript>
-      <input class="submit" type="submit" name="submit" value="{/root/labels/ok}" title="{/root/labels/ok}" />
-     </noscript>
-    </form>
-   </div>
-   <div class="clr"></div>
-   <div class="tmessage">
-    <span><xsl:value-of select="/root/labels/message" />: <xsl:value-of select="d_message" /></span>
-   </div>
-   <div class="clr"></div>
-   <xsl:choose>
-    <xsl:when test="/root/allow_ajax = 'true'">
-     <div class="tcontainer" id="torrent_{d_hash}" style="display: none;">
-      <a class="subpage" href="?mod=torrent&amp;hash={d_hash}&amp;page=peers" title="{/root/labels/peerlist}" onclick="loadcontent( '{d_hash}', 'peers' ); return false;"><xsl:value-of select="/root/labels/peerlist" /></a>
-      <a class="subpage" href="?mod=torrent&amp;hash={d_hash}&amp;page=info" title="{/root/labels/info}" onclick="loadcontent( '{d_hash}', 'info' ); return false;"><xsl:value-of select="/root/labels/info" /></a>
-      <a class="subpage" href="?mod=torrent&amp;hash={d_hash}&amp;page=files" title="{/root/labels/filelist}" onclick="loadcontent( '{d_hash}', 'files' ); return false;"><xsl:value-of select="/root/labels/filelist" /></a>
-      <a class="subpage" href="?mod=torrent&amp;hash={d_hash}&amp;page=trackers" title="{/root/labels/trackerlist}" onclick="loadcontent( '{d_hash}', 'trackers' ); return false;"><xsl:value-of select="/root/labels/trackerlist" /></a>
-      <div class="clr"></div>
-      <div class="tcontent" id="torrent_{d_hash}_content"></div>
-     </div>
-    </xsl:when>
-   </xsl:choose>
-   <div class="clr"></div>
-  </li>
- </xsl:template>
-
- <xsl:template match="torrent_info_root">
-  <xsl:apply-templates select="torrent_info" />
- </xsl:template>
-
- <xsl:template match="torrent_info">
-  <li class="line spacer">
-   <div class="infoleft">
-    <xsl:value-of select="/root/labels/name" />
-   </div>
-   <div class="inforight">
-    <xsl:value-of select="d_name" />
-   </div>
-   <div class="clr"></div>
-  </li>
-  <li class="line">
-   <div class="infoleft">
-    <xsl:value-of select="/root/labels/infohash" />
-   </div>
-   <div class="inforight">
-    <xsl:value-of select="d_hash" />
-   </div>
-   <div class="clr"></div>
-  </li>
-  <li class="line">
-   <div class="infoleft">
-    <xsl:value-of select="/root/labels/localid" />
-   </div>
-   <div class="inforight">
-    <xsl:value-of select="d_local_id" />
-   </div>
-   <div class="clr"></div>
-  </li>
-  <li class="line spacer">
-   <div class="infoleft">
-    <xsl:value-of select="/root/labels/localidhtml" />
-   </div>
-   <div class="inforight">
-    <xsl:value-of select="d_local_id_html" />
-   </div>
-   <div class="clr"></div>
-  </li>
-  <li class="line">
-   <div class="infoleft">
-    <xsl:value-of select="/root/labels/directory" />
-   </div>
-   <div class="inforight">
-    <xsl:value-of select="d_directory/@value" />
-   </div>
-   <div class="clr"></div>
-  </li>
-  <li class="line">
-   <div class="infoleft">
-    <xsl:value-of select="/root/labels/tiedtofile" />
-   </div>
-   <div class="inforight">
-    <xsl:choose>
-     <xsl:when test="d_tied_to_file != ''">
-      <xsl:value-of select="d_tied_to_file/@value" />
-     </xsl:when>
-     <xsl:otherwise>
-      <xsl:value-of select="/root/labels/no" />
-     </xsl:otherwise>
-    </xsl:choose>
-   </div>
-   <div class="clr"></div>
-  </li>
-  <li class="line">
-   <div class="infoleft">
-    <xsl:value-of select="/root/labels/filestats" />
-   </div>
-   <div class="inforight">
-    <xsl:value-of select="d_multi_file/@value" />
-    <xsl:choose>
-     <xsl:when test="d_multi_file != 0">
-      <xsl:text> </xsl:text>
-      <xsl:value-of select="d_size_files" />
-      <xsl:text> </xsl:text>
-      <xsl:value-of select="/root/labels/files" />
-     </xsl:when>
-    </xsl:choose>
-   </div>
-   <div class="clr"></div>
-  </li>
-  <li class="line spacer">
-   <div class="infoleft">
-    <xsl:value-of select="/root/labels/private" />
-   </div>
-   <div class="inforight">
-    <xsl:value-of select="d_private/@value" />
-   </div>
-   <div class="clr"></div>
-  </li>
-  <li class="line">
-   <div class="infoleft">
-    <xsl:value-of select="/root/labels/chunks" />
-   </div>
-   <div class="inforight">
-    <xsl:value-of select="d_completed_chunks" />
-    <xsl:text> / </xsl:text>
-    <xsl:value-of select="d_chunks_hashed" />
-    <xsl:text> * </xsl:text>
-    <xsl:value-of select="d_chunk_size/@value" />
-    <xsl:text> </xsl:text>
-    <xsl:value-of select="d_chunk_size/@suffix" />
-   </div>
-   <div class="clr"></div>
-  </li>
-  <li class="line">
-   <div class="infoleft">
-    <xsl:value-of select="/root/labels/priority" />
-   </div>
-   <div class="inforight">
-    <xsl:value-of select="d_priority/@value" />
-   </div>
-   <div class="clr"></div>
-  </li>
-  <li class="line spacer">
-   <div class="infoleft">
-    <xsl:value-of select="/root/labels/statechanged" />
-   </div>
-   <div class="inforight">
-    <xsl:value-of select="d_state_changed/@value" />
-   </div>
-   <div class="clr"></div>
-  </li>
-  <li class="line spacer">
-   <div class="infoleft">
-    <xsl:value-of select="/root/labels/freediskspace" />
-   </div>
-   <div class="inforight">
-    <xsl:value-of select="d_free_diskspace/@value" />
-    <xsl:text> </xsl:text>
-    <xsl:value-of select="d_free_diskspace/@suffix" />
-   </div>
-   <div class="clr"></div>
-  </li>
-  <li class="line">
-   <div class="infoleft">
-    <xsl:value-of select="/root/labels/connectiontype" />
-   </div>
-   <div class="inforight">
-    <xsl:value-of select="d_connection_current/@value" />
-   </div>
-   <div class="clr"></div>
-  </li>
-  <li class="line">
-   <div class="infoleft">
-    <xsl:value-of select="/root/labels/trackers" />
-   </div>
-   <div class="inforight">
-    <xsl:value-of select="d_tracker_size" />
-   </div>
-   <div class="clr"></div>
-  </li>
-  <li class="line">
-   <div class="infoleft">
-    <xsl:value-of select="/root/labels/peersconnected" />
-   </div>
-   <div class="inforight">
-    <span title="{/root/labels/dminpeers}: {d_peers_min} - {/root/labels/dmaxpeers}: {d_peers_max}">
-     <xsl:value-of select="d_peers_connected" />
-    </span>
-   </div>
-   <div class="clr"></div>
-  </li>
-  <li class="line">
-   <div class="infoleft">
-    <xsl:value-of select="/root/labels/leechers" />
-   </div>
-   <div class="inforight">
-    <xsl:value-of select="d_peers_accounted" />
-   </div>
-   <div class="clr"></div>
-  </li>
-  <li class="line spacer">
-   <div class="infoleft">
-    <xsl:value-of select="/root/labels/seeders" />
-   </div>
-   <div class="inforight">
-    <xsl:value-of select="d_peers_complete" />
-   </div>
-   <div class="clr"></div>
-  </li>
-  <li class="line">
-   <div class="infoleft">
-    <xsl:value-of select="/root/labels/pexenabled" />
-   </div>
-   <div class="inforight">
-    <xsl:value-of select="d_pex_active/@value" />
-   </div>
-   <div class="clr"></div>
-  </li>
-  <li class="line spacer">
-   <div class="infoleft">
-    <xsl:value-of select="/root/labels/pexsize" />
-   </div>
-   <div class="inforight">
-    <xsl:value-of select="d_size_pex" />
-    <xsl:text> / </xsl:text>
-    <xsl:value-of select="d_max_size_pex" />
-   </div>
-   <div class="clr"></div>
-  </li>
-  <li class="line">
-   <div class="infoleft">
-    <xsl:value-of select="/root/labels/upload" />
-   </div>
-   <div class="inforight">
-    <xsl:value-of select="d_up_rate/@value" />
-    <xsl:text> </xsl:text>
-    <xsl:value-of select="d_up_rate/@suffix" />
-    <xsl:text> / </xsl:text>
-    <xsl:value-of select="d_up_total/@value" />
-    <xsl:text> </xsl:text>
-    <xsl:value-of select="d_up_total/@suffix" />
-   </div>
-   <div class="clr"></div>
-  </li>
-  <li class="line">
-   <div class="infoleft">
-    <xsl:value-of select="/root/labels/download" />
-   </div>
-   <div class="inforight">
-    <xsl:value-of select="d_down_rate/@value" />
-    <xsl:text> </xsl:text>
-    <xsl:value-of select="d_down_rate/@suffix" />
-    <xsl:text> / </xsl:text>
-    <xsl:value-of select="d_down_total/@value" />
-    <xsl:text> </xsl:text>
-    <xsl:value-of select="d_down_total/@suffix" />
-   </div>
-   <div class="clr"></div>
-  </li>
-  <li class="line">
-   <div class="infoleft">
-    <xsl:value-of select="/root/labels/skipped" />
-   </div>
-   <div class="inforight">
-    <xsl:value-of select="d_skip_rate/@value" />
-    <xsl:text> </xsl:text>
-    <xsl:value-of select="d_skip_rate/@suffix" />
-    <xsl:text> / </xsl:text>
-    <xsl:value-of select="d_skip_total/@value" />
-    <xsl:text> </xsl:text>
-    <xsl:value-of select="d_skip_total/@suffix" />
-   </div>
-   <div class="clr"></div>
-  </li>
- </xsl:template>
-
- <xsl:template match="torrent_files_root">
-  <xsl:apply-templates select="torrent_files" />
- </xsl:template>
-
- <xsl:template match="torrent_files">
-  <xsl:apply-templates select="files_root" />
- </xsl:template>
-
- <xsl:template match="torrent_trackers_root">
-  <xsl:apply-templates select="torrent_trackers" />
- </xsl:template>
-
- <xsl:template match="torrent_trackers">
-  <xsl:apply-templates select="tracker" />
- </xsl:template>
-
- <xsl:template match="torrent_peers_root">
-  <xsl:apply-templates select="torrent_peers" />
- </xsl:template>
-
- <xsl:template match="torrent_peers">
-  <li class="phead">
-   <div class="paddress">
-    <xsl:value-of select="/root/labels/address" />
-   </div>
-   <div class="pup">
-    <xsl:value-of select="/root/labels/up_rate" />
-   </div>
-   <div class="pdown">
-    <xsl:value-of select="/root/labels/down_rate" />
-   </div>
-   <div class="prate">
-    <xsl:value-of select="/root/labels/peer_rate" />
-   </div>
-   <div class="pdone">
-    <xsl:value-of select="/root/labels/pdone" />
-   </div>
-   <div class="pincoming">
-    <xsl:value-of select="/root/labels/incoming" />
-   </div>
-   <div class="pencrypted">
-    <xsl:value-of select="/root/labels/encrypted" />
-   </div>
-   <div class="pclient">
-    <xsl:value-of select="/root/labels/pclientversion" />
-   </div>
-   <div class="clr"></div>
-  </li>
-  <xsl:apply-templates select="peer" />
- </xsl:template>
-
- <xsl:template match="server_info">
-  <li class="line">
-   <div class="infoleft">
-    <xsl:value-of select="/root/labels/hostname" />
-   </div>
-   <div class="inforight">
-    <xsl:value-of select="hostname" />
-   </div>
-   <div class="clr"></div>
-  </li>
-  <li class="line spacer">
-   <div class="infoleft">
-    <xsl:value-of select="/root/labels/pid" />
-   </div>
-   <div class="inforight">
-    <xsl:value-of select="pid" />
-   </div>
-   <div class="clr"></div>
-  </li>
-  <li class="line">
-   <div class="infoleft">
-    <xsl:value-of select="/root/labels/clientversion" />
-   </div>
-   <div class="inforight">
-    <xsl:value-of select="client_version" />
-   </div>
-   <div class="clr"></div>
-  </li>
-  <li class="line spacer">
-   <div class="infoleft">
-    <xsl:value-of select="/root/labels/libraryversion" />
-   </div>
-   <div class="inforight">
-    <xsl:value-of select="library_version" />
-   </div>
-   <div class="clr"></div>
-  </li>
-  <li class="line">
-   <div class="infoleft">
-    <xsl:value-of select="/root/labels/workingdirectory" />
-   </div>
-   <div class="inforight">
-    <xsl:value-of select="get_cwd" />
-   </div>
-   <div class="clr"></div>
-  </li>
-  <li class="line">
-   <div class="infoleft">
-    <xsl:value-of select="/root/labels/downloaddirectory" />
-   </div>
-   <div class="inforight">
-    <xsl:value-of select="directory/@value" />
-   </div>
-   <div class="clr"></div>
-  </li>
-  <li class="line spacer">
-   <div class="infoleft">
-    <xsl:value-of select="/root/labels/sessiondirectory" />
-   </div>
-   <div class="inforight">
-    <xsl:value-of select="session/@value" />
-   </div>
-   <div class="clr"></div>
-  </li>
-  <li class="line">
-   <div class="infoleft">
-    <xsl:value-of select="/root/labels/listeningipaddress" />
-   </div>
-   <div class="inforight">
-    <xsl:value-of select="bind/@value" />
-   </div>
-   <div class="clr"></div>
-  </li>
-  <li class="line">
-   <div class="infoleft">
-    <xsl:value-of select="/root/labels/reportedipaddress" />
-   </div>
-   <div class="inforight">
-    <xsl:value-of select="ip/@value" />
-   </div>
-   <div class="clr"></div>
-  </li>
-  <li class="line">
-   <div class="infoleft">
-    <xsl:value-of select="/root/labels/portopened" />
-   </div>
-   <div class="inforight">
-    <xsl:value-of select="port_open/@value" />
-   </div>
-   <div class="clr"></div>
-  </li>
-  <li class="line">
-   <div class="infoleft">
-    <xsl:value-of select="/root/labels/randomport" />
-   </div>
-   <div class="inforight">
-    <xsl:value-of select="port_random/@value" />
-   </div>
-   <div class="clr"></div>
-  </li>
-  <li class="line">
-   <div class="infoleft">
-    <xsl:value-of select="/root/labels/portrange" />
-   </div>
-   <div class="inforight">
-    <xsl:value-of select="port_range/@value" />
-   </div>
-   <div class="clr"></div>
-  </li>
-  <li class="line spacer">
-   <div class="infoleft">
-    <xsl:value-of select="/root/labels/udptrackers" />
-   </div>
-   <div class="inforight">
-    <xsl:value-of select="use_udp_trackers/@value" />
-   </div>
-   <div class="clr"></div>
-  </li>
-  <xsl:choose>
-   <xsl:when test="/root/allow_dht = 'true'">
-    <xsl:choose>
-     <xsl:when test="dht_statistics_active = 0">
-      <li class="line spacer">
-       <div class="infoleft">
-        <xsl:value-of select="/root/labels/dht" />
-       </div>
-       <div class="inforight" onmouseover="this.style.cursor='pointer';" onclick="toggle( 'serverinfo_info_restore' );">
-        <form class="changedhtstatusform" name="changedhtstatusform" method="post" action="{/root/iurl}?mod=changedhtstatus">
-         <span id="changedhtselect">
-          <select class="whiteselect" name="dhtstatus" title="{/root/labels/changedhtstatus}" onchange="window.location='{/root/iurl}?mod=changedhtstatus&amp;dhtstatus='+this.value;">
-           <option value="0" title="{/root/labels/stopped}" selected="selected"><xsl:value-of select="/root/labels/stopped" /></option>
-           <option value="1" title="{/root/labels/start}"><xsl:value-of select="/root/labels/start" /></option>
-          </select>
-         </span>
-         <noscript>
-          <input class="submit" type="submit" name="{/root/labels/ok}" value="{/root/labels/ok}" title="{/root/labels/ok}" />
-         </noscript>
-         <span id="changedht" title="{/root/labels/clicktochange}">
-          <xsl:value-of select="dht_statistics_active/@value" />
-         </span>
-        </form>
-       </div>
-       <div class="clr"></div>
-      </li>
-     </xsl:when>
-     <xsl:otherwise>
-      <li class="line">
-       <div class="infoleft">
-        <xsl:value-of select="/root/labels/dht" />
-       </div>
-       <div class="inforight" onmouseover="this.style.cursor='pointer';" onclick="toggle( 'serverinfo_info_restore' );">
-        <form class="changedhtstatusform" name="changedhtstatusform" method="post" action="{/root/iurl}?mod=changedhtstatus">
-         <span id="changedhtselect">
-          <select class="whiteselect" name="dhtstatus" title="{/root/labels/changedhtstatus}" onchange="window.location='{/root/iurl}?mod=changedhtstatus&amp;dhtstatus='+this.value;">
-           <option value="0" title="{/root/labels/stop}"><xsl:value-of select="/root/labels/stop" /></option>
-           <option value="1" title="{/root/labels/started}" selected="selected"><xsl:value-of select="/root/labels/started" /></option>
-          </select>
-         </span>
-         <noscript>
-          <input class="submit" type="submit" name="{/root/labels/ok}" value="{/root/labels/ok}" title="{/root/labels/ok}" />
-         </noscript>
-         <span id="changedht" title="{/root/labels/clicktochange}">
-          <xsl:value-of select="dht_statistics_active/@value" />
-         </span>
-        </form>
-       </div>
-       <div class="clr"></div>
-      </li>
-      <li class="line">
-       <div class="infoleft">
-        <xsl:value-of select="/root/labels/dhtport" />
-       </div>
-       <div class="inforight">
-        <xsl:value-of select="dht_port" />
-       </div>
-       <div class="clr"></div>
-      </li>
-      <li class="line">
-       <div class="infoleft">
-        <xsl:value-of select="/root/labels/dhtcycle" />
-       </div>
-       <div class="inforight">
-        <xsl:value-of select="dht_statistics_cycle" />
-       </div>
-       <div class="clr"></div>
-      </li>
-      <li class="line">
-       <div class="infoleft">
-        <xsl:value-of select="/root/labels/dhtqueries" />
-       </div>
-       <div class="inforight">
-        <xsl:value-of select="dht_statistics_queries_received" />
-        <xsl:text> / </xsl:text>
-        <xsl:value-of select="dht_statistics_queries_sent" />
-       </div>
-       <div class="clr"></div>
-      </li>
-      <li class="line">
-       <div class="infoleft">
-        <xsl:value-of select="/root/labels/dhtreplies" />
-       </div>
-       <div class="inforight">
-        <xsl:value-of select="dht_statistics_replies_received" />
-       </div>
-       <div class="clr"></div>
-      </li>
-      <li class="line">
-       <div class="infoleft">
-        <xsl:value-of select="/root/labels/dhtbytes" />
-       </div>
-       <div class="inforight">
-        <xsl:value-of select="dht_statistics_bytes_read/@value" />
-        <xsl:text> </xsl:text>
-        <xsl:value-of select="dht_statistics_bytes_read/@suffix" />
-        <xsl:text> / </xsl:text>
-        <xsl:value-of select="dht_statistics_bytes_written/@value" />
-        <xsl:text> </xsl:text>
-        <xsl:value-of select="dht_statistics_bytes_written/@suffix" />
-       </div>
-       <div class="clr"></div>
-      </li>
-      <li class="line">
-       <div class="infoleft">
-        <xsl:value-of select="/root/labels/dhtnodes" />
-       </div>
-       <div class="inforight">
-        <xsl:value-of select="dht_statistics_nodes" />
-        <xsl:text> </xsl:text>
-        <xsl:value-of select="/root/labels/in" />
-        <xsl:text> </xsl:text>
-        <xsl:value-of select="dht_statistics_buckets" />
-        <xsl:text> </xsl:text>
-        <xsl:value-of select="/root/labels/buckets" />
-       </div>
-       <div class="clr"></div>
-      </li>
-      <li class="line">
-       <div class="infoleft">
-        <xsl:value-of select="/root/labels/dhtpeers" />
-       </div>
-       <div class="inforight">
-        <xsl:value-of select="dht_statistics_peers" />
-        <xsl:text> (</xsl:text>
-        <xsl:value-of select="/root/labels/highest" />
-        <xsl:text>: </xsl:text>
-        <xsl:value-of select="dht_statistics_peers_max" />
-        <xsl:text>)</xsl:text>
-       </div>
-       <div class="clr"></div>
-      </li>
-      <li class="line spacer">
-       <div class="infoleft">
-        <xsl:value-of select="/root/labels/dhttorrents" />
-       </div>
-       <div class="inforight">
-        <xsl:value-of select="dht_statistics_torrents" />
-       </div>
-       <div class="clr"></div>
-      </li>
-     </xsl:otherwise>
-    </xsl:choose>
-   </xsl:when>
-  </xsl:choose>
-  <li class="line">
-   <div class="infoleft">
-    <xsl:value-of select="/root/labels/maxuploads" />
-   </div>
-   <div class="inforight">
-    <xsl:value-of select="max_uploads/@value" />
-   </div>
-   <div class="clr"></div>
-  </li>
-  <li class="line">
-   <div class="infoleft">
-    <xsl:value-of select="/root/labels/minpeers" />
-   </div>
-   <div class="inforight">
-    <xsl:value-of select="min_peers/@value" />
-   </div>
-   <div class="clr"></div>
-  </li>
-  <li class="line">
-   <div class="infoleft">
-    <xsl:value-of select="/root/labels/maxpeers" />
-   </div>
-   <div class="inforight">
-    <xsl:value-of select="max_peers/@value" />
-   </div>
-   <div class="clr"></div>
-  </li>
-  <li class="line">
-   <div class="infoleft">
-    <xsl:value-of select="/root/labels/memoryusage" />
-   </div>
-   <div class="inforight">
-    <xsl:value-of select="memory_usage/@value" />
-    <xsl:text> </xsl:text>
-    <xsl:value-of select="memory_usage/@suffix" />
-   </div>
-   <div class="clr"></div>
-  </li>
-  <li class="line spacer">
-   <div class="infoleft">
-    <xsl:value-of select="/root/labels/maxmemoryusage" />
-   </div>
-   <div class="inforight">
-    <xsl:value-of select="max_memory_usage/@value" />
-    <xsl:text> </xsl:text>
-    <xsl:value-of select="max_memory_usage/@suffix" />
-   </div>
-   <div class="clr"></div>
-  </li>
-  <li class="line">
-   <div class="infoleft">
-    <xsl:value-of select="/root/labels/hashcheck" />
-   </div>
-   <div class="inforight">
-    <xsl:value-of select="check_hash/@value" />
-   </div>
-   <div class="clr"></div>
-  </li>
-  <li class="line">
-   <div class="infoleft">
-    <xsl:value-of select="/root/labels/safesync" />
-   </div>
-   <div class="inforight">
-    <xsl:value-of select="safe_sync/@value" />
-   </div>
-   <div class="clr"></div>
-  </li>
-  <li class="line">
-   <div class="infoleft">
-    <xsl:value-of select="/root/labels/sendbuffer" />
-   </div>
-   <div class="inforight">
-    <xsl:value-of select="receive_buffer_size/@value" />
-    <xsl:text> </xsl:text>
-    <xsl:value-of select="receive_buffer_size/@suffix" />
-   </div>
-   <div class="clr"></div>
-  </li>
-  <li class="line">
-   <div class="infoleft">
-    <xsl:value-of select="/root/labels/receivebuffer" />
-   </div>
-   <div class="inforight">
-    <xsl:value-of select="receive_buffer_size/@value" />
-    <xsl:text> </xsl:text>
-    <xsl:value-of select="receive_buffer_size/@suffix" />
-   </div>
-   <div class="clr"></div>
-  </li>
- </xsl:template>
-
- <xsl:template match="files_root">
-  <xsl:apply-templates select="directory" />
-  <xsl:apply-templates select="file" />
- </xsl:template>
-
- <xsl:template match="directory">
-  <li>
-   <div class="dopenlink">
-    <a title="{/root/labels/clicktoopenclose}" onmouseover="this.style.cursor='pointer';" onclick="if ( this.parentNode.parentNode.getElementsByTagName( 'ul' ).item( 0 ).style.display == '' ) {{ this.parentNode.parentNode.getElementsByTagName( 'ul' ).item( 0 ).style.display = 'none' }} else {{ this.parentNode.parentNode.getElementsByTagName( 'ul' ).item( 0 ).style.display = '' }};"><xsl:value-of select="@dirname" /></a>
-   </div>
-   <div class="dpriority">
-    <form class="changedirpriorityform" name="changedirpriorityform_{@id}" method="post" action="{/root/iurl}?mod=changedirpriority&amp;hash={/root/hash}&amp;dir={@dirpath}">
-     <select class="whiteselect" name="dirpriority" title="{/root/labels/selectdirpriority}" onchange="window.location='{/root/iurl}?mod=changedirpriority&amp;hash={/root/hash}&amp;dir={@dirpath}&amp;dirpriority='+this.value;">
-      <option value="-1" title="{/root/labels/selectone}" selected="selected"><xsl:value-of select="/root/labels/selectone" /></option>
-      <option value="0" title="{/root/labels/off}"><xsl:value-of select="/root/labels/off" /></option>
-      <option value="1" title="{/root/labels/normal}"><xsl:value-of select="/root/labels/normal" /></option>
-      <option value="2" title="{/root/labels/high}"><xsl:value-of select="/root/labels/high" /></option>
-     </select>
-     <noscript>
-      <input class="submit" type="submit" name="{/root/labels/ok}" value="{/root/labels/ok}" title="{/root/labels/ok}" />
-     </noscript>
-    </form>
-   </div>
-   <div class="clr"></div>
-   <xsl:choose>
-    <xsl:when test="/root/allow_hidedirtree = 'true'">
-     <ul class="directory">
-      <xsl:apply-templates select="directory" />
-      <xsl:apply-templates select="file" />
-     </ul>
-    </xsl:when>
-    <xsl:otherwise>
-     <ul class="directory nohide">
-      <xsl:apply-templates select="directory" />
-      <xsl:apply-templates select="file" />
-     </ul>
-    </xsl:otherwise>
-   </xsl:choose>
-  </li>
- </xsl:template>
-
- <xsl:template match="file">
-  <li onmouseover="this.style.background='#eeeeee';" onmouseout="this.style.background='';">
-   <div class="fname">
-    <span title="{/root/labels/lasttouched}: {f_last_touched}">
-     <xsl:value-of select="@filename" />
-    </span>
-   </div>
-   <div class="fpercentage">
-    <span title="{f_percentage/@value} {/root/labels/percentcompleted}">
-     <xsl:text>[</xsl:text>
-     <xsl:value-of select="f_percentage/@value" />
-     <xsl:text> %]</xsl:text>
-    </span>
-   </div>
-   <div class="fpriority">
-    <form class="changefilepriorityform" name="changefilepriorityform_{@id}" method="post" action="{/root/iurl}?mod=changefilepriority&amp;hash={/root/hash}&amp;id={@id}">
-     <select class="whiteselect" name="filepriority" title="{/root/labels/selectfilepriority}" onchange="window.location='{/root/iurl}?mod=changefilepriority&amp;hash={/root/hash}&amp;id={@id}&amp;filepriority='+this.value;">
-      <xsl:choose>
-       <xsl:when test="f_priority = 0">
-        <option value="0" title="{/root/labels/off}" selected="selected"><xsl:value-of select="/root/labels/off" /></option>
-        <option value="1" title="{/root/labels/normal}"><xsl:value-of select="/root/labels/normal" /></option>
-        <option value="2" title="{/root/labels/high}"><xsl:value-of select="/root/labels/high" /></option>
-       </xsl:when>
-       <xsl:when test="f_priority = 2">
-        <option value="0" title="{/root/labels/off}"><xsl:value-of select="/root/labels/off" /></option>
-        <option value="1" title="{/root/labels/normal}"><xsl:value-of select="/root/labels/normal" /></option>
-        <option value="2" title="{/root/labels/high}" selected="selected"><xsl:value-of select="/root/labels/high" /></option>
-       </xsl:when>
-       <xsl:otherwise>
-        <option value="0" title="{/root/labels/off}"><xsl:value-of select="/root/labels/off" /></option>
-        <option value="1" title="{/root/labels/normal}" selected="selected"><xsl:value-of select="/root/labels/normal" /></option>
-        <option value="2" title="{/root/labels/high}"><xsl:value-of select="/root/labels/high" /></option>
-       </xsl:otherwise>
-      </xsl:choose>
-     </select>
-     <noscript>
-      <input class="submit" type="submit" name="{/root/labels/ok}" value="{/root/labels/ok}" title="{/root/labels/ok}" />
-     </noscript>
-    </form>
-   </div>
-   <div class="fsize">
-    <span title="{/root/labels/filesize}">
-     <xsl:value-of select="f_size_bytes/@value" />
-     <xsl:text> </xsl:text>
-     <xsl:value-of select="f_size_bytes/@suffix" />
-    </span>
-   </div>
-   <div class="fchunks">
-    <span title="{/root/labels/chunks}">
-     <xsl:choose>
-      <xsl:when test="f_range_first != f_range_second">
-       <xsl:value-of select="f_range_first" />
-       <xsl:text> - </xsl:text>
-       <xsl:value-of select="f_range_second" />
-      </xsl:when>
-      <xsl:otherwise>
-       <xsl:value-of select="f_range_first" />
-      </xsl:otherwise>
-     </xsl:choose>
-    </span>
-   </div>
-   <xsl:choose>
-    <xsl:when test="f_percentage = 1 and /root/allow_download = 'true'">
-     <div class="fdownload">
-      <a href="?mod=getfile&amp;hash={/root/hash}&amp;id={@id}" title="{/root/labels/downloadfile}"><xsl:value-of select="/root/labels/download" /></a>
-     </div>
-    </xsl:when>
-   </xsl:choose>
-   <div class="clr"></div>
-  </li>
- </xsl:template>
-
- <xsl:template match="dlpath">
-  <li onmouseover="this.style.background='#eeeeee';" onmouseout="this.style.background='';">
-   <div class="tufpath">
-    <a href="?mod=addtorrent&amp;path={@path}">
-     <xsl:value-of select="@name" />
-    </a>
-   </div>
-   <div class="tufspace">
-    <xsl:value-of select="@freespace_value" />
-    <xsl:text> </xsl:text>
-    <xsl:value-of select="@freespace_suffix" />
-   </div>
-   <div class="clr"></div>
-  </li>
- </xsl:template>
-
- <xsl:template match="tracker">
-  <li>
-   <ul>
-    <li>
-     <div class="tgroup">
-      <span title="{/root/labels/trackergroup}">
-       <xsl:value-of select="t_group" />
-       <xsl:text>:</xsl:text>
-      </span>
-     </div>
-     <div class="turl">
-      <span title="{/root/labels/type}: {t_type/@value}">
-       <xsl:value-of select="t_url" />
-      </span>
-     </div>
-     <div class="clr"></div>
-    </li>
-    <li>
-     <div class="tfocus">
-      <xsl:choose>
-       <xsl:when test="root/tottents/torrent_trackers_root/torrent_trackers/d_tracker_focus = @id">
-        <xsl:value-of select="/root/labels/focus" />
-        <xsl:text>: </xsl:text>
-        <xsl:value-of select="/root/labels/yes" />
-       </xsl:when>
-       <xsl:otherwise>
-        <xsl:value-of select="/root/labels/focus" />
-        <xsl:text>: </xsl:text>
-        <xsl:value-of select="/root/labels/no" />
-       </xsl:otherwise>
-      </xsl:choose>
-     </div>
-     <div class="tenabled">
-      <form class="changetrackerenabledform" name="changetrackerenabledform_{@id}" method="post" action="{/root/iurl}?mod=changetrackerenabled&amp;hash={/root/hash}&amp;id={@id}">
-       <xsl:value-of select="/root/labels/enabled" />
-       <xsl:text>: </xsl:text>
-       <select class="whiteselect" name="trackerenabled" title="{/root/labels/selecttrackerenabled}" onchange="window.location='{/root/iurl}?mod=changetrackerenabled&amp;hash={/root/hash}&amp;id={@id}&amp;trackerenabled='+this.value;">
-        <xsl:choose>
-         <xsl:when test="t_enabled = 0">
-          <option value="1" title="{/root/labels/yes}"><xsl:value-of select="/root/labels/yes" /></option>
-          <option value="0" title="{/root/labels/no}" selected="selected"><xsl:value-of select="/root/labels/no" /></option>
-         </xsl:when>
-         <xsl:otherwise>
-          <option value="1" title="{/root/labels/yes}" selected="selected"><xsl:value-of select="/root/labels/yes" /></option>
-          <option value="0" title="{/root/labels/no}"><xsl:value-of select="/root/labels/no" /></option>
-         </xsl:otherwise>
-        </xsl:choose>
-       </select>
-       <noscript>
-        <input class="submit" type="submit" name="submit" value="{/root/labels/ok}" title="{/root/labels/ok}" />
-       </noscript>
-      </form>
-     </div>
-     <div class="topen">
-      <xsl:value-of select="/root/labels/opened" />
-      <xsl:text>: </xsl:text>
-      <xsl:choose>
-       <xsl:when test="t_open != 0">
-        <xsl:value-of select="/root/labels/yes" />
-       </xsl:when>
-       <xsl:otherwise>
-        <xsl:value-of select="/root/labels/no" />
-       </xsl:otherwise>
-      </xsl:choose>
-     </div>
-     <div class="tpeers">
-      <xsl:value-of select="/root/labels/seedersleechers" />
-      <xsl:text>: </xsl:text>
-      <xsl:value-of select="t_scrape_complete" />
-      <xsl:text> / </xsl:text>
-      <xsl:value-of select="t_scrape_incomplete" />
-     </div>
-     <div class="clr"></div>
-    </li>
-    <li>
-     <div class="tscrape">
-      <span title="{/root/labels/mininterval}: {t_min_interval/@value} - Normal interval: {t_normal_interval/@value}">
-       <xsl:value-of select="/root/labels/lasttimescraped" />
-       <xsl:text>: </xsl:text>
-       <xsl:value-of select="t_scrape_time_last/@value" />
-      </span>
-     </div>
-     <div class="clr"></div>
-    </li>
-   </ul>
-  </li>
- </xsl:template>
-
- <xsl:template match="peer">
-  <li>
-   <div class="paddress">
-    <xsl:choose>
-     <xsl:when test="p_country != ''">
-      <img src="flags/{p_country}.gif" alt="flag" title="{p_country/@value}" />
-     </xsl:when>
-    </xsl:choose>
-    <xsl:value-of select="p_address" />
-   </div>
-   <div class="pup">
-    <xsl:value-of select="p_up_rate/@value" />
-    <xsl:text> </xsl:text>
-    <xsl:value-of select="p_up_rate/@suffix" />
-   </div>
-   <div class="pdown">
-    <xsl:value-of select="p_down_rate/@value" />
-    <xsl:text> </xsl:text>
-    <xsl:value-of select="p_down_rate/@suffix" />
-   </div>
-   <div class="prate">
-    <xsl:value-of select="p_peer_rate/@value" />
-    <xsl:text> </xsl:text>
-    <xsl:value-of select="p_peer_rate/@suffix" />
-   </div>
-   <div class="pdone">
-    <xsl:value-of select="p_completed_percent" />
-    <xsl:text> %</xsl:text>
-   </div>
-   <div class="pincoming">
-    <xsl:value-of select="p_incoming/@value" />
-   </div>
-   <div class="pencrypted">
-    <xsl:value-of select="p_encrypted/@value" />
-   </div>
-   <div class="pclient">
-    <xsl:value-of select="p_client_version" />
-   </div>
-   <div class="clr"></div>
-  </li>
- </xsl:template>
-
-</xsl:stylesheet>
Index: c/themes/default_ajax/layout.main.login.xsl
===================================================================
--- src/themes/default_ajax/layout.main.login.xsl	(revision 53f5ceaa73f2e26bf68bfb1e991963323da16118)
+++ 	(revision )
@@ -1,100 +1,0 @@
-﻿<xsl:stylesheet version="1.1"
-                xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
-                lang="en">
- <xsl:output method="xml"
-             indent="no"
-             encoding="utf-8"
-             doctype-public="-//W3C//DTD XHTML 1.0 Transitional//EN"
-             doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd" />
-
- <xsl:template match="root">
-  <html xml:lang="{language}" lang="{language}">
-   <head>
-    <meta http-equiv="content-type" content="text/html; charset=utf-8" />
-    <meta http-equiv="content-language" content="{language}" />
-    <meta http-equiv="cache-control" content="no-store, no-cache, must-revalidate, post-check=0, pre-check=0" />
-    <meta http-equiv="pragma" content="no-cache" />
-    <meta http-equiv="expires" content="thu, 1 jan 1970 00:00:00 gmt" />
-    <meta http-equiv="imagetoolbar" content="no" />  
-    <meta name="author" content="{labels/author}" />
-    <meta name="description" content="{labels/description}" />
-    <meta name="doc-type" content="web page" />
-    <meta name="rating" content="general" />
-    <meta name="robots" content="noindex, nofollow" />
-    <link rel="stylesheet" type="text/css" href="themes/default_ajax/inc/style.css" />
-    <title><xsl:value-of select="labels/title" /></title>
-   </head>
-   <body onload="document.getElementById( 'lfname' ).focus();">
-    <div id="top">
-    </div>
-    <div id="loginbox">
-     <xsl:apply-templates select="err" />
-     <xsl:apply-templates select="languages" />
-     <form id="login" method="post" action="{iurl}?mod=login">
-      <ul>
-       <li>
-        <div class="lftitle"><xsl:value-of select="labels/username" />:</div>
-        <div class="lffield">
-         <input id="lfname" type="text" title="{labels/username}" name="loginname" />
-        </div>
-       </li>
-       <li>
-        <div class="lftitle"><xsl:value-of select="labels/password" />:</div>
-        <div class="lffield">
-         <input id="lfpass" type="password" title="{labels/password}" name="loginpass" />
-        </div>
-       </li>
-       <li>
-        <div class="lftitle"><xsl:value-of select="labels/rememberme" />:</div>
-        <div class="lffield">
-         <input id="lfremember" type="checkbox" title="{labels/rememberme}" name="rememberme" />
-        </div>
-       </li>
-       <li class="formsend">
-        <input class="inputok" type="submit" title="{labels/login}" name="loginok" value="{labels/login}" />
-       </li>
-      </ul>
-     </form>
-    </div>
-    <div id="footer">
-     <span><a href="https://rtwi.jmk.hu/" title="{labels/homepage}"><xsl:value-of select="labels/homepage" /></a></span>
-    </div>
-   </body>
-  </html>
- </xsl:template>
-
- <xsl:template match="err">
-  <div id="err">
-   <span title="clicktohide" onmouseover="this.style.cursor='pointer';" onclick="document.getElementById( 'err' ).style.display='none';">
-    <xsl:value-of select="errmsg" />
-   </span>
-  </div>
- </xsl:template>
-
- <xsl:template match="languages">
-  <form id="changelanguageform" name="changelanguageform" method="post" action="{/root/iurl}?mod=changelanguage">
-   <xsl:text>[</xsl:text>
-   <xsl:value-of select="/root/labels/language" />
-   <xsl:text>: </xsl:text>
-   <select class="whiteselect" name="language" title="{/root/labels/selectlanguage}" onchange="window.location='{/root/iurl}?mod=changelanguage&amp;language='+this.value;">
-    <xsl:apply-templates select="language" />
-   </select>
-   <noscript>
-    <input class="submit" id="lsubmit" type="submit" name="lsubmit" title="{/root/labels/ok}" value="{/root/labels/ok}" />
-   </noscript>
-   <xsl:text>]</xsl:text>
-  </form>
- </xsl:template>
-
- <xsl:template match="language">
-  <xsl:choose>
-   <xsl:when test="/root/@language = @value">
-    <option value="{@value}" title="{@title}" selected="selected"><xsl:value-of select="@title" /></option>
-   </xsl:when>
-   <xsl:otherwise>
-    <option value="{@value}" title="{@title}"><xsl:value-of select="@title" /></option>
-   </xsl:otherwise>
-  </xsl:choose>
- </xsl:template>
-
-</xsl:stylesheet>
Index: themes/default_ajax/inc/afunc.js
===================================================================
--- themes/default_ajax/inc/afunc.js	(revision 9479cdac9602f889de28ba22cd8b1823c8b13abe)
+++ themes/default_ajax/inc/afunc.js	(revision 9479cdac9602f889de28ba22cd8b1823c8b13abe)
@@ -0,0 +1,200 @@
+function loadcontent( hash, page ) {
+ var xmlHttp;
+ try {
+  xmlHttp = new XMLHttpRequest();
+ }
+ catch ( e ) {
+  try {
+   xmlHttp = new ActiveXObject( "Msxml2.XMLHTTP" );
+  }
+  catch ( e ) {
+   try {
+    xmlHttp = new ActiveXObject( "Microsoft.XMLHTTP" );
+   } catch ( e ) {
+    alert( "Your browser does not support AJAX!" );
+    return false;
+   }
+  }
+ }
+ xmlHttp.onreadystatechange = function() {
+  switch ( xmlHttp.readyState ) {
+   case 0 : {
+    document.getElementById( 'torrent_' + hash + '_content' ).innerHTML = 0;
+    break;
+   }
+   case 1 : {
+    document.getElementById( 'torrent_' + hash + '_content' ).innerHTML = 'Requesting...';
+    break;
+   }
+   case 2 : {
+    document.getElementById( 'torrent_' + hash + '_content' ).innerHTML = 2;
+    break;
+   }
+   case 3 : {
+    document.getElementById( 'torrent_' + hash + '_content' ).innerHTML = 'Processing...';
+    break;
+   }
+   case 4 : {
+    document.getElementById( 'torrent_' + hash + '_content' ).innerHTML = xmlHttp.responseText;
+    break;
+   }
+   default : {
+    document.getElementById( 'torrent_' + hash + '_content' ).innerHTML = '.';
+    break;
+   }
+  }
+ }
+ xmlHttp.open( 'GET', '?mod=torrent&hash=' + hash + '&page=' + page + '&ajax=true', true );
+ xmlHttp.send( null );
+}
+
+function loadcontent_dirpriority( iurl, hash, dir, dirpriority ) {
+ var xmlHttp;
+ try {
+  xmlHttp = new XMLHttpRequest();
+ }
+ catch ( e ) {
+  try {
+   xmlHttp = new ActiveXObject( "Msxml2.XMLHTTP" );
+  }
+  catch ( e ) {
+   try {
+    xmlHttp = new ActiveXObject( "Microsoft.XMLHTTP" );
+   } catch ( e ) {
+    alert( "Your browser does not support AJAX!" );
+    return false;
+   }
+  }
+ }
+ xmlHttp.onreadystatechange = function() {
+  switch ( xmlHttp.readyState ) {
+   case 0 : {
+    document.getElementById( 'torrent_' + hash + '_content' ).innerHTML = 0;
+    break;
+   }
+   case 1 : {
+    document.getElementById( 'torrent_' + hash + '_content' ).innerHTML = 'Requesting...';
+    break;
+   }
+   case 2 : {
+    document.getElementById( 'torrent_' + hash + '_content' ).innerHTML = 2;
+    break;
+   }
+   case 3 : {
+    document.getElementById( 'torrent_' + hash + '_content' ).innerHTML = 'Processing...';
+    break;
+   }
+   case 4 : {
+    document.getElementById( 'torrent_' + hash + '_content' ).innerHTML = xmlHttp.responseText;
+    break;
+   }
+   default : {
+    document.getElementById( 'torrent_' + hash + '_content' ).innerHTML = '.';
+    break;
+   }
+  }
+ }
+ xmlHttp.open( 'GET', iurl + '?mod=changedirpriority&hash=' + hash + '&dir=' + dir + '&dirpriority=' + dirpriority + '&ajax=true', true );
+ xmlHttp.send( null );
+}
+
+function loadcontent_filepriority( iurl, hash, id, filepriority ) {
+ var xmlHttp;
+ try {
+  xmlHttp = new XMLHttpRequest();
+ }
+ catch ( e ) {
+  try {
+   xmlHttp = new ActiveXObject( "Msxml2.XMLHTTP" );
+  }
+  catch ( e ) {
+   try {
+    xmlHttp = new ActiveXObject( "Microsoft.XMLHTTP" );
+   } catch ( e ) {
+    alert( "Your browser does not support AJAX!" );
+    return false;
+   }
+  }
+ }
+ xmlHttp.onreadystatechange = function() {
+  switch ( xmlHttp.readyState ) {
+   case 0 : {
+    document.getElementById( 'torrent_' + hash + '_content' ).innerHTML = 0;
+    break;
+   }
+   case 1 : {
+    document.getElementById( 'torrent_' + hash + '_content' ).innerHTML = 'Requesting...';
+    break;
+   }
+   case 2 : {
+    document.getElementById( 'torrent_' + hash + '_content' ).innerHTML = 2;
+    break;
+   }
+   case 3 : {
+    document.getElementById( 'torrent_' + hash + '_content' ).innerHTML = 'Processing...';
+    break;
+   }
+   case 4 : {
+    document.getElementById( 'torrent_' + hash + '_content' ).innerHTML = xmlHttp.responseText;
+    break;
+   }
+   default : {
+    document.getElementById( 'torrent_' + hash + '_content' ).innerHTML = '.';
+    break;
+   }
+  }
+ }
+ xmlHttp.open( 'GET', iurl + '?mod=changefilepriority&hash=' + hash + '&id=' + id + '&filepriority=' + filepriority + '&ajax=true', true );
+ xmlHttp.send( null );
+}
+
+function loadcontent_trackerenabled( iurl, hash, id, trackerenabled ) {
+ var xmlHttp;
+ try {
+  xmlHttp = new XMLHttpRequest();
+ }
+ catch ( e ) {
+  try {
+   xmlHttp = new ActiveXObject( "Msxml2.XMLHTTP" );
+  }
+  catch ( e ) {
+   try {
+    xmlHttp = new ActiveXObject( "Microsoft.XMLHTTP" );
+   } catch ( e ) {
+    alert( "Your browser does not support AJAX!" );
+    return false;
+   }
+  }
+ }
+ xmlHttp.onreadystatechange = function() {
+  switch ( xmlHttp.readyState ) {
+   case 0 : {
+    document.getElementById( 'torrent_' + hash + '_content' ).innerHTML = 0;
+    break;
+   }
+   case 1 : {
+    document.getElementById( 'torrent_' + hash + '_content' ).innerHTML = 'Requesting...';
+    break;
+   }
+   case 2 : {
+    document.getElementById( 'torrent_' + hash + '_content' ).innerHTML = 2;
+    break;
+   }
+   case 3 : {
+    document.getElementById( 'torrent_' + hash + '_content' ).innerHTML = 'Processing...';
+    break;
+   }
+   case 4 : {
+    document.getElementById( 'torrent_' + hash + '_content' ).innerHTML = xmlHttp.responseText;
+    break;
+   }
+   default : {
+    document.getElementById( 'torrent_' + hash + '_content' ).innerHTML = '.';
+    break;
+   }
+  }
+ }
+ xmlHttp.open( 'GET', iurl + '?mod=changetrackerenabled&hash=' + hash + '&id=' + id + '&trackerenabled=' + trackerenabled + '&ajax=true', true );
+ xmlHttp.send( null );
+}
+
Index: themes/default_ajax/inc/hfunc.js
===================================================================
--- themes/default_ajax/inc/hfunc.js	(revision 9479cdac9602f889de28ba22cd8b1823c8b13abe)
+++ themes/default_ajax/inc/hfunc.js	(revision 9479cdac9602f889de28ba22cd8b1823c8b13abe)
@@ -0,0 +1,77 @@
+function toggle( modpage ) {
+ switch ( modpage ) {
+  case '_info' :
+  case 'torrent_info' :
+  case 'torrent_peers' :
+  case 'torrent_trackers' : {
+   if ( document.getElementById( 'changethrottleform' ) != null ) {
+    document.getElementById( 'throttleupinput' ).style.display = 'none';
+    document.getElementById( 'throttledowninput' ).style.display = 'none';
+    document.getElementById( 'tsubmit' ).style.display = 'none';
+
+    document.getElementById( 'throttleup' ).style.display = '';
+    document.getElementById( 'throttledown' ).style.display = '';
+   }
+
+   break;
+  }
+  case 'serverinfo_info' : {
+   if ( document.getElementById( 'changethrottleform' ) != null ) {
+    document.getElementById( 'throttleupinput' ).style.display = 'none';
+    document.getElementById( 'throttledowninput' ).style.display = 'none';
+    document.getElementById( 'tsubmit' ).style.display = 'none';
+
+    document.getElementById( 'throttleup' ).style.display = '';
+    document.getElementById( 'throttledown' ).style.display = '';
+   }
+
+   document.getElementById( 'changedht' ).style.display = '';
+   document.getElementById( 'changedhtselect' ).style.display = 'none';
+
+   break;
+  }
+  case '_info_restore' : {
+   document.getElementById( 'throttleupinput' ).style.display = '';
+   document.getElementById( 'throttledowninput' ).style.display = '';
+   document.getElementById( 'tsubmit' ).style.display = '';
+
+   document.getElementById( 'throttleup' ).style.display = 'none';
+   document.getElementById( 'throttledown' ).style.display = 'none';
+
+   break;
+  }
+  case 'serverinfo_info_restore' : {
+   if ( document.getElementById( 'changethrottleform' ) != null ) {
+    document.getElementById( 'changedht' ).style.display = 'none';
+    document.getElementById( 'changedhtselect' ).style.display = '';
+   }
+
+   break;
+  }
+  case 'addtorrent_info' : {
+   document.getElementById( 'torrenturl' ).style.display = 'none';
+
+   break;
+  }
+  case 'torrent_files' : {
+   var uls = document.getElementsByTagName( 'ul' );
+   for ( i = 0; i < uls.length; i++ ) {
+    var atts = uls.item( i ).attributes;
+    for ( j = 0; j < atts.length; j++ ) {
+     if ( atts[j].nodeName == 'class' && atts[j].nodeValue == 'directory' ) {
+      uls.item( i ).style.display='none';
+     }
+    }
+   }
+
+   document.getElementById( 'throttleupinput' ).style.display = 'none';
+   document.getElementById( 'throttledowninput' ).style.display = 'none';
+   document.getElementById( 'tsubmit' ).style.display = 'none';
+
+   document.getElementById( 'throttleup' ).style.display = '';
+   document.getElementById( 'throttledown' ).style.display = '';
+
+   break;
+  }
+ }
+}
Index: themes/default_ajax/inc/style.css
===================================================================
--- themes/default_ajax/inc/style.css	(revision 9479cdac9602f889de28ba22cd8b1823c8b13abe)
+++ themes/default_ajax/inc/style.css	(revision 9479cdac9602f889de28ba22cd8b1823c8b13abe)
@@ -0,0 +1,579 @@
+body {
+		min-width: 60em;
+		margin: 0;
+		padding: 0;
+		font-family: arial, sans-serif;
+		font-size: medium;
+		background: #ffffff;
+		line-height: 1.2em;
+}
+
+div {
+		margin: 0;
+		padding: 0;
+		overflow: hidden;
+}
+
+ul {
+		margin: 0;
+		padding: 0;
+		list-style-type: none;
+}
+
+li {
+		margin: 0;
+		padding: 0;
+}
+
+img {
+		margin: 0;
+		padding: 0;
+		border: none;
+}
+
+p {
+		margin: 0;
+		padding: 0;
+}
+
+span {
+		margin: 0;
+		padding: 0;
+}
+
+a {
+		color: #505050;
+		font-weight: bold;
+		text-decoration: none;
+}
+
+form {
+		margin: 0;
+		padding: 0;
+}
+
+a:hover {
+		color: #a0a0a0;
+}
+
+select.whiteselect {
+		border: 1px solid #000000;
+		background: #ffffff;
+}
+
+#top {
+		width: 100%;
+		height: 91px;
+		margin: 0 0 2em 0;
+		background: url( "../pics/topbar.gif" );
+}
+
+#main {
+		width: 100%;
+		margin: 0;
+		padding: 0;
+}
+
+#leftcol {
+		float: left;
+		width: 13%;
+		margin: 0 1% 0 1%;
+}
+
+#maincol {
+		float: left;
+		width: 84%;
+		margin: 0 0 0 0;
+		padding: 0;
+}
+
+#footer {
+		margin: 4em 1em 2em 0;
+		text-align: right;
+		font-size: smaller;
+}
+
+#mainmenu {
+		margin: 0 0 1em 0;
+		padding: 0;
+		border: 1px solid #aaaaaa;
+}
+
+#mainmenu li.first {
+		margin: 0;
+		padding: 0;
+		border-top: none;
+}
+
+#mainmenu li {
+		border-top: 1px solid #aaaaaa;
+}
+
+#mainmenu a {
+		display: block;
+		padding: .2em 0 .2em 0;
+		color: #505050;
+		font-weight: bold;
+		text-align: center;
+}
+
+#mainmenu a:hover {
+		color: #000000;
+		background: #e0e0e0;
+}
+
+#err {
+		margin: 0 0 1em 0;
+		color: #aa0000;
+		font-weight: bold;
+		text-align: center;
+}
+
+#loginbox {
+		text-align: center;
+}
+
+#changeviewform {
+		float: left;
+		margin: 0 1em 0 0;
+}
+
+#changerefreshform {
+		float: left;
+		margin: 0 1em 0 0;
+}
+
+#changelanguageform {
+		float: left;
+}
+
+#loginbox #changelanguageform {
+		float: none;
+		margin: 0 0 1em 0;
+}
+
+#doonalltorrentform {
+		float: right;
+}
+
+#addtorrent {
+		clear: both;
+}
+
+.clr {
+		clear: both;
+		height: 1px;
+		overflow: hidden;
+}
+
+.submit {
+		margin: 0 0 0 .3em;
+}
+
+.submenu {
+		margin: 0 0 0 20%;
+		font-size: smaller;
+		border-left: 1px solid #aaaaaa;
+}
+
+.submenu.notshown {
+		display: none;
+}
+
+.tline {
+		margin: 0 0 1em 0;
+}
+
+.spacer {
+		margin: 0 0 1em 0;
+}
+
+.tline.last {
+		margin: 1em 0 1em 0;
+}
+
+.tthrottle {
+		float: left;
+		margin: 0 1em 0 0;
+}
+
+.tthrottle input[type="text"] {
+		width: 2em;
+		text-align: right;
+}
+
+.trates_total {
+		float: left;
+}
+
+.ticon {
+		float: left;
+		width: 1em;
+}
+
+.ticon img {
+		width: .8125em;
+}
+
+.tname {
+		float: left;
+		margin: 0;
+}
+
+.tops {
+		float: right;
+		font-size: smaller;
+}
+
+.tops a {
+		margin: 0 0 0 .5em;
+}
+
+.tbytes {
+		float: left;
+		width: 11.3em;
+		margin: 0 .5em 0 1.2em;
+		background: #eeeeee;
+		font-size: smaller;
+}
+
+.trates {
+		float: left;
+		width: 14em;
+		margin: 0 .5em 0 0;
+		background: #eeeeee;
+		font-size: smaller;
+}
+
+.tupbytes {
+		float: left;
+		width: 11em;
+		margin: 0 .5em 0 0;
+		background: #eeeeee;
+		font-size: smaller;
+}
+
+.tpercentage {
+		float: left;
+		width: 3.5em;
+		margin: 0 .5em 0 0;
+		background: #eeeeee;
+		font-size: smaller;
+		text-align: right;
+}
+
+.testimate {
+		float: left;
+		width: 5em;
+		background: #eeeeee;
+		font-size: smaller;
+		text-align: right;
+}
+
+.tselect {
+		float: right;
+		font-size: smaller;
+		text-align: right;
+}
+
+.tpriority {
+		float: right;
+		margin: 0 0 0 .5em;
+		background: #eeeeee;
+		font-size: smaller;
+		text-align: right;
+}
+
+.tpriority select {
+		font-size: smaller;
+}
+
+.tpriority .submit {
+		font-size: smaller;
+}
+
+.tratio {
+		float: right;
+		width: 6.5em;
+		margin: 0 0 0 .5em;
+		background: #eeeeee;
+		font-size: smaller;
+		text-align: right;
+}
+
+.tmessage {
+		float: left;
+		margin: 0 .5em 0 1.2em;
+		background: #eeeeee;
+		font-size: smaller;
+}
+
+.tcontainer {
+		margin: 0 0 0 1.2em;
+		font-size: smaller;
+}
+
+.tcontainer a.subpage {
+		float: left;
+		width: 10em;
+		margin: 0 .5em 0 0;
+		background: #eeeeee;
+		text-align: center;
+}
+
+.tcontent {
+		margin: .5em 0 0 0;
+}
+
+.tufleft {
+		float: left;
+		width: 14%;
+		font-weight: bold;
+}
+
+.tufright {
+		float: left;
+		width: 86%;
+}
+
+.tufpath {
+		float: left;
+}
+
+.tufspace {
+		float: right;
+}
+
+.tuform .formsend {
+		margin: 1em 0 0 14%;
+}
+
+.infoleft {
+		float: left;
+		width: 25%;
+		font-weight: bold;
+}
+
+.inforight {
+		float: left;
+		width: 74%
+}
+
+.directory {
+		margin: 0 0 0 1em;
+}
+
+.directory li {
+}
+
+.dopenlink {
+		float: left;
+}
+
+.dpriority {
+		float: right;
+		margin: 0;
+		font-size: smaller;
+		text-align: right;
+		background: #eeeeee;
+}
+
+.dpriority select {
+		font-size: smaller;
+}
+
+.dpriority .submit {
+		font-size: smaller;
+}
+
+.tcontent .dpriority {
+		float: right;
+		margin: 0;
+		text-align: right;
+		background: #eeeeee;
+}
+
+.fname {
+		float: left;
+		background: #eeeeee;
+}
+
+.fdownload {
+		float: right;
+		background: #eeeeee;
+}
+
+.fchunks {
+		float: right;
+		width: 6.5em;
+		margin: 0 0 0 .5em;
+		text-align: right;
+		background: #eeeeee;
+}
+
+.fsize {
+		float: right;
+		width: 5.5em;
+		margin: 0 0 0 .5em;
+		text-align: right;
+		background: #eeeeee;
+}
+
+.fpriority {
+		float: right;
+		width: 8.5em;
+		margin: 0 0 0 .5em;
+		font-size: smaller;
+		text-align: right;
+		background: #eeeeee;
+}
+
+.fpriority select {
+		font-size: smaller;
+}
+
+.fpriority .submit {
+		font-size: smaller;
+}
+
+.tcontent .fpriority {
+		float: right;
+		width: 8em;
+		margin: 0 0 0 .5em;
+		text-align: right;
+		background: #eeeeee;
+}
+
+.fpercentage {
+		float: right;
+		width: 3.5em;
+		margin: 0 0 0 .5em;
+		text-align: right;
+		background: #eeeeee;
+}
+
+.tracker {
+		margin: 0 0 .5em 0;
+}
+
+.tgroup {
+		float: left;
+		width: 1.5em;
+		text-align: right;
+		background: #eeeeee;
+}
+
+.turl {
+		float: left;
+		margin: 0 0 0 .5em;
+}
+
+.tfocus {
+		float: left;
+		width: 6em;
+		font-size: smaller;
+		background: #eeeeee;
+}
+
+.tenabled {
+		float: left;
+		width: 11.5em;
+		margin: 0 0 0 .5em;
+		font-size: smaller;
+		background: #eeeeee;
+}
+
+.tcontainer .tenabled {
+		width: 13em;
+}
+
+.tenabled .submit {
+		font-size: smaller;
+}
+
+.tenabled select {
+		font-size: smaller;
+}
+
+.topen {
+		float: left;
+		width: 6em;
+		margin: 0 0 0 .5em;
+		font-size: smaller;
+		background: #eeeeee;
+}
+
+.tpeers {
+		float: left;
+		margin: 0 0 0 .5em;
+		font-size: smaller;
+}
+
+.tscrape {
+		font-size: smaller;
+}
+
+.phead {
+		font-weight: bold;
+}
+
+.paddress {
+		float: left;
+		width: 10em;
+}
+
+.paddress img {
+		margin: 0 .5em 0 0;
+}
+
+.pup {
+		float: left;
+		width: 5em;
+		margin: 0 0 0 .5em;
+		text-align: right;
+}
+
+.pdown {
+		float: left;
+		width: 5em;
+		margin: 0 0 0 .5em;
+		text-align: right;
+}
+
+.prate {
+		float: left;
+		width: 5em;
+		margin: 0 0 0 .5em;
+		text-align: right;
+}
+
+.pdone {
+		float: left;
+		width: 4em;
+		margin: 0 0 0 .5em;
+		text-align: right;
+}
+
+.pencrypted {
+		float: left;
+		width: 6em;
+		margin: 0 0 0 .5em;
+}
+
+.pincoming {
+		float: left;
+		width: 6em;
+		margin: 0 0 0 1.5em;
+}
+
+.poptions {
+		float: left;
+		width: 6em;
+		margin: 0 0 0 .5em;
+		font-size: smaller;
+}
+
+.pclient {
+		float: left;
+		margin: 0 0 0 .5em;
+}
Index: themes/default_ajax/layout.ajax.index.xsl
===================================================================
--- themes/default_ajax/layout.ajax.index.xsl	(revision 9479cdac9602f889de28ba22cd8b1823c8b13abe)
+++ themes/default_ajax/layout.ajax.index.xsl	(revision 9479cdac9602f889de28ba22cd8b1823c8b13abe)
@@ -0,0 +1,562 @@
+﻿<xsl:stylesheet version="1.1"
+                xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+                lang="en">
+ <xsl:output method="xml"
+             indent="no"
+             encoding="utf-8" />
+
+ <xsl:template match="root">
+  <xsl:apply-templates select="err" />
+  <xsl:apply-templates select="torrents" />
+ </xsl:template>
+
+ <xsl:template match="err">
+  <div id="err" title="{/root/labels/clicktohide}" onmouseover="this.style.cursor='pointer';" onclick="this.parentNode.removeChild( this );">
+   <xsl:apply-templates select="errmsg" />
+  </div>
+ </xsl:template>
+ 
+ <xsl:template match="errmsg">
+  <div>
+   <xsl:value-of select="msg" />
+  </div>
+ </xsl:template>
+
+ <xsl:template match="torrents">
+  <ul>
+   <xsl:apply-templates select="torrent_info_root" />
+   <xsl:apply-templates select="torrent_files_root" />
+   <xsl:apply-templates select="torrent_peers_root" />
+   <xsl:apply-templates select="torrent_trackers_root" />
+  </ul>
+ </xsl:template>
+
+ <xsl:template match="torrent_info_root">
+  <xsl:apply-templates select="torrent_info" />
+ </xsl:template>
+
+ <xsl:template match="torrent_info">
+  <li class="line spacer">
+   <div class="infoleft">
+    <xsl:value-of select="/root/labels/name" />
+   </div>
+   <div class="inforight">
+    <xsl:value-of select="d_name" />
+   </div>
+   <div class="clr"></div>
+  </li>
+  <li class="line">
+   <div class="infoleft">
+    <xsl:value-of select="/root/labels/infohash" />
+   </div>
+   <div class="inforight">
+    <xsl:value-of select="d_hash" />
+   </div>
+   <div class="clr"></div>
+  </li>
+  <li class="line">
+   <div class="infoleft">
+    <xsl:value-of select="/root/labels/localid" />
+   </div>
+   <div class="inforight">
+    <xsl:value-of select="d_local_id" />
+   </div>
+   <div class="clr"></div>
+  </li>
+  <li class="line spacer">
+   <div class="infoleft">
+    <xsl:value-of select="/root/labels/localidhtml" />
+   </div>
+   <div class="inforight">
+    <xsl:value-of select="d_local_id_html" />
+   </div>
+   <div class="clr"></div>
+  </li>
+  <li class="line">
+   <div class="infoleft">
+    <xsl:value-of select="/root/labels/directory" />
+   </div>
+   <div class="inforight">
+    <xsl:value-of select="d_directory/@value" />
+   </div>
+   <div class="clr"></div>
+  </li>
+  <li class="line">
+   <div class="infoleft">
+    <xsl:value-of select="/root/labels/tiedtofile" />
+   </div>
+   <div class="inforight">
+    <xsl:choose>
+     <xsl:when test="d_tied_to_file != ''">
+      <xsl:value-of select="d_tied_to_file/@value" />
+     </xsl:when>
+     <xsl:otherwise>
+      <xsl:value-of select="/root/labels/no" />
+     </xsl:otherwise>
+    </xsl:choose>
+   </div>
+   <div class="clr"></div>
+  </li>
+  <li class="line">
+   <div class="infoleft">
+    <xsl:value-of select="/root/labels/filestats" />
+   </div>
+   <div class="inforight">
+    <xsl:value-of select="d_multi_file/@value" />
+    <xsl:choose>
+     <xsl:when test="d_multi_file != 0">
+      <xsl:text> </xsl:text>
+      <xsl:value-of select="d_size_files" />
+      <xsl:text> </xsl:text>
+      <xsl:value-of select="/root/labels/files" />
+     </xsl:when>
+    </xsl:choose>
+   </div>
+   <div class="clr"></div>
+  </li>
+  <li class="line spacer">
+   <div class="infoleft">
+    <xsl:value-of select="/root/labels/private" />
+   </div>
+   <div class="inforight">
+    <xsl:value-of select="d_private/@value" />
+   </div>
+   <div class="clr"></div>
+  </li>
+  <li class="line">
+   <div class="infoleft">
+    <xsl:value-of select="/root/labels/chunks" />
+   </div>
+   <div class="inforight">
+    <xsl:value-of select="d_completed_chunks" />
+    <xsl:text> / </xsl:text>
+    <xsl:value-of select="d_chunks_hashed" />
+    <xsl:text> * </xsl:text>
+    <xsl:value-of select="d_chunk_size/@value" />
+    <xsl:text> </xsl:text>
+    <xsl:value-of select="d_chunk_size/@suffix" />
+   </div>
+   <div class="clr"></div>
+  </li>
+  <li class="line">
+   <div class="infoleft">
+    <xsl:value-of select="/root/labels/priority" />
+   </div>
+   <div class="inforight">
+    <xsl:value-of select="d_priority/@value" />
+   </div>
+   <div class="clr"></div>
+  </li>
+  <li class="line spacer">
+   <div class="infoleft">
+    <xsl:value-of select="/root/labels/statechanged" />
+   </div>
+   <div class="inforight">
+    <xsl:value-of select="d_state_changed/@value" />
+   </div>
+   <div class="clr"></div>
+  </li>
+  <li class="line spacer">
+   <div class="infoleft">
+    <xsl:value-of select="/root/labels/freediskspace" />
+   </div>
+   <div class="inforight">
+    <xsl:value-of select="d_free_diskspace/@value" />
+    <xsl:text> </xsl:text>
+    <xsl:value-of select="d_free_diskspace/@suffix" />
+   </div>
+   <div class="clr"></div>
+  </li>
+  <li class="line">
+   <div class="infoleft">
+    <xsl:value-of select="/root/labels/connectiontype" />
+   </div>
+   <div class="inforight">
+    <xsl:value-of select="d_connection_current/@value" />
+   </div>
+   <div class="clr"></div>
+  </li>
+  <li class="line">
+   <div class="infoleft">
+    <xsl:value-of select="/root/labels/trackers" />
+   </div>
+   <div class="inforight">
+    <xsl:value-of select="d_tracker_size" />
+   </div>
+   <div class="clr"></div>
+  </li>
+  <li class="line">
+   <div class="infoleft">
+    <xsl:value-of select="/root/labels/peersconnected" />
+   </div>
+   <div class="inforight">
+    <span title="{/root/labels/dminpeers}: {d_peers_min} - {/root/labels/dmaxpeers}: {d_peers_max}">
+     <xsl:value-of select="d_peers_connected" />
+    </span>
+   </div>
+   <div class="clr"></div>
+  </li>
+  <li class="line">
+   <div class="infoleft">
+    <xsl:value-of select="/root/labels/leechers" />
+   </div>
+   <div class="inforight">
+    <xsl:value-of select="d_peers_accounted" />
+   </div>
+   <div class="clr"></div>
+  </li>
+  <li class="line spacer">
+   <div class="infoleft">
+    <xsl:value-of select="/root/labels/seeders" />
+   </div>
+   <div class="inforight">
+    <xsl:value-of select="d_peers_complete" />
+   </div>
+   <div class="clr"></div>
+  </li>
+  <li class="line">
+   <div class="infoleft">
+    <xsl:value-of select="/root/labels/pexenabled" />
+   </div>
+   <div class="inforight">
+    <xsl:value-of select="d_pex_active/@value" />
+   </div>
+   <div class="clr"></div>
+  </li>
+  <li class="line spacer">
+   <div class="infoleft">
+    <xsl:value-of select="/root/labels/pexsize" />
+   </div>
+   <div class="inforight">
+    <xsl:value-of select="d_size_pex" />
+    <xsl:text> / </xsl:text>
+    <xsl:value-of select="d_max_size_pex" />
+   </div>
+   <div class="clr"></div>
+  </li>
+  <li class="line">
+   <div class="infoleft">
+    <xsl:value-of select="/root/labels/upload" />
+   </div>
+   <div class="inforight">
+    <xsl:value-of select="d_up_rate/@value" />
+    <xsl:text> </xsl:text>
+    <xsl:value-of select="d_up_rate/@suffix" />
+    <xsl:text> / </xsl:text>
+    <xsl:value-of select="d_up_total/@value" />
+    <xsl:text> </xsl:text>
+    <xsl:value-of select="d_up_total/@suffix" />
+   </div>
+   <div class="clr"></div>
+  </li>
+  <li class="line">
+   <div class="infoleft">
+    <xsl:value-of select="/root/labels/download" />
+   </div>
+   <div class="inforight">
+    <xsl:value-of select="d_down_rate/@value" />
+    <xsl:text> </xsl:text>
+    <xsl:value-of select="d_down_rate/@suffix" />
+    <xsl:text> / </xsl:text>
+    <xsl:value-of select="d_down_total/@value" />
+    <xsl:text> </xsl:text>
+    <xsl:value-of select="d_down_total/@suffix" />
+   </div>
+   <div class="clr"></div>
+  </li>
+  <li class="line">
+   <div class="infoleft">
+    <xsl:value-of select="/root/labels/skipped" />
+   </div>
+   <div class="inforight">
+    <xsl:value-of select="d_skip_rate/@value" />
+    <xsl:text> </xsl:text>
+    <xsl:value-of select="d_skip_rate/@suffix" />
+    <xsl:text> / </xsl:text>
+    <xsl:value-of select="d_skip_total/@value" />
+    <xsl:text> </xsl:text>
+    <xsl:value-of select="d_skip_total/@suffix" />
+   </div>
+   <div class="clr"></div>
+  </li>
+ </xsl:template>
+
+ <xsl:template match="torrent_files_root">
+  <xsl:apply-templates select="torrent_files" />
+ </xsl:template>
+
+ <xsl:template match="torrent_files">
+  <xsl:apply-templates select="files_root" />
+ </xsl:template>
+
+ <xsl:template match="torrent_trackers_root">
+  <xsl:apply-templates select="torrent_trackers" />
+ </xsl:template>
+
+ <xsl:template match="torrent_trackers">
+  <xsl:apply-templates select="tracker" />
+ </xsl:template>
+
+ <xsl:template match="torrent_peers_root">
+  <xsl:apply-templates select="torrent_peers" />
+ </xsl:template>
+
+ <xsl:template match="torrent_peers">
+  <li class="phead">
+   <div class="paddress">
+    <xsl:value-of select="/root/labels/address" />
+   </div>
+   <div class="pup">
+    <xsl:value-of select="/root/labels/up_rate" />
+   </div>
+   <div class="pdown">
+    <xsl:value-of select="/root/labels/down_rate" />
+   </div>
+   <div class="prate">
+    <xsl:value-of select="/root/labels/peer_rate" />
+   </div>
+   <div class="pdone">
+    <xsl:value-of select="/root/labels/done" />
+   </div>
+   <div class="pincoming">
+    <xsl:value-of select="/root/labels/incoming" />
+   </div>
+   <div class="pencrypted">
+    <xsl:value-of select="/root/labels/encrypted" />
+   </div>
+   <div class="pclient">
+    <xsl:value-of select="/root/labels/pclientversion" />
+   </div>
+   <div class="clr"></div>
+  </li>
+  <xsl:apply-templates select="peer" />
+ </xsl:template>
+
+ <xsl:template match="files_root">
+  <xsl:apply-templates select="directory" />
+  <xsl:apply-templates select="file" />
+ </xsl:template>
+
+ <xsl:template match="directory">
+  <li>
+   <div class="dopenlink">
+    <a title="{/root/labels/clicktoopenclose}" onmouseover="this.style.cursor='pointer';" onclick="if ( this.parentNode.parentNode.getElementsByTagName( 'ul' ).item( 0 ).style.display == '' ) {{ this.parentNode.parentNode.getElementsByTagName( 'ul' ).item( 0 ).style.display = 'none' }} else {{ this.parentNode.parentNode.getElementsByTagName( 'ul' ).item( 0 ).style.display = '' }};"><xsl:value-of select="@dirname" /></a>
+   </div>
+   <div class="dpriority">
+    <form class="changedirpriorityform" name="changedirpriorityform_{@id}" method="post" action="{/root/iurl}?mod=changedirpriority&amp;hash={/root/hash}&amp;dir={@dirpath}">
+     <select class="whiteselect" name="dirpriority" title="Select directory priority" onchange="loadcontent_dirpriority( '{/root/iurl}', '{/root/hash}', '{@dirpath}', this.value );">
+      <option value="-1" title="{/root/labels/selectone}" selected="selected"><xsl:value-of select="/root/labels/selectone" /></option>
+      <option value="0" title="{/root/labels/off}"><xsl:value-of select="/root/labels/off" /></option>
+      <option value="1" title="{/root/labels/normal}"><xsl:value-of select="/root/labels/normal" /></option>
+      <option value="2" title="{/root/labels/high}"><xsl:value-of select="/root/labels/high" /></option>
+     </select>
+     <noscript>
+      <input class="submit" type="submit" name="OK" value="OK" title="OK" />
+     </noscript>
+    </form>
+   </div>
+   <div class="clr">_</div>
+   <ul class="directory" style="display: none;">
+    <xsl:apply-templates select="directory" />
+    <xsl:apply-templates select="file" />
+   </ul>
+  </li>
+ </xsl:template>
+
+ <xsl:template match="file">
+  <li onmouseover="this.style.background='#eeeeee';" onmouseout="this.style.background='';">
+   <div class="fname">
+    <span title="{/root/labels/lasttouched}: {f_last_touched}">
+     <xsl:value-of select="@filename" />
+    </span>
+   </div>
+   <div class="fpercentage">
+    <span title="{f_percentage/@value} {/root/labels/percentcompleted}">
+     <xsl:text>[</xsl:text>
+     <xsl:value-of select="f_percentage/@value" />
+     <xsl:text> %]</xsl:text>
+    </span>
+   </div>
+   <div class="fpriority">
+    <form class="changefilepriorityform" name="changefilepriorityform_{@id}" method="post" action="{/root/iurl}?mod=changefilepriority&amp;hash={/root/hash}&amp;id={@id}">
+     <select class="whiteselect" name="filepriority" title="{/root/labels/selectfilepriority}" onchange="loadcontent_filepriority( '{/root/iurl}', '{/root/hash}', '{@id}', this.value );">
+      <xsl:choose>
+       <xsl:when test="f_priority = 0">
+        <option value="0" title="{/root/labels/off}" selected="selected"><xsl:value-of select="/root/labels/off" /></option>
+        <option value="1" title="{/root/labels/normal}"><xsl:value-of select="/root/labels/normal" /></option>
+        <option value="2" title="{/root/labels/high}"><xsl:value-of select="/root/labels/high" /></option>
+       </xsl:when>
+       <xsl:when test="f_priority = 2">
+        <option value="0" title="{/root/labels/off}"><xsl:value-of select="/root/labels/off" /></option>
+        <option value="1" title="{/root/labels/normal}"><xsl:value-of select="/root/labels/normal" /></option>
+        <option value="2" title="{/root/labels/high}" selected="selected"><xsl:value-of select="/root/labels/high" /></option>
+       </xsl:when>
+       <xsl:otherwise>
+        <option value="0" title="{/root/labels/off}"><xsl:value-of select="/root/labels/off" /></option>
+        <option value="1" title="{/root/labels/normal}" selected="selected"><xsl:value-of select="/root/labels/normal" /></option>
+        <option value="2" title="{/root/labels/high}"><xsl:value-of select="/root/labels/high" /></option>
+       </xsl:otherwise>
+      </xsl:choose>
+     </select>
+    </form>
+   </div>
+   <div class="fsize">
+    <span title="{/root/labels/filesize}">
+     <xsl:value-of select="f_size_bytes/@value" />
+     <xsl:text> </xsl:text>
+     <xsl:value-of select="f_size_bytes/@suffix" />
+    </span>
+   </div>
+   <div class="fchunks">
+    <span title="{/root/labels/chunks}">
+     <xsl:choose>
+      <xsl:when test="f_range_first != f_range_second">
+       <xsl:value-of select="f_range_first" />
+       <xsl:text> - </xsl:text>
+       <xsl:value-of select="f_range_second" />
+      </xsl:when>
+      <xsl:otherwise>
+       <xsl:value-of select="f_range_first" />
+      </xsl:otherwise>
+     </xsl:choose>
+    </span>
+   </div>
+   <xsl:choose>
+    <xsl:when test="f_percentage = 1 and /root/allow_download = 'true'">
+     <div class="fdownload">
+      <a href="?mod=getfile&amp;hash={/root/hash}&amp;id={@id}" title="{/root/labels/downloadfile}"><xsl:value-of select="/root/labels/download" /></a>
+     </div>
+    </xsl:when>
+   </xsl:choose>
+   <div class="clr"></div>
+  </li>
+ </xsl:template>
+
+ <xsl:template match="tracker">
+  <li>
+   <ul>
+    <li>
+     <div class="tgroup">
+      <span title="{/root/labels/trackergroup}">
+       <xsl:value-of select="t_group" />
+       <xsl:text>:</xsl:text>
+      </span>
+     </div>
+     <div class="turl">
+      <span title="{/root/labels/type}: {t_type/@value}">
+       <xsl:value-of select="t_url" />
+      </span>
+     </div>
+     <div class="clr"></div>
+    </li>
+    <li>
+     <div class="tfocus">
+      <xsl:choose>
+       <xsl:when test="root/tottents/torrent_trackers_root/torrent_trackers/d_tracker_focus = @id">
+        <xsl:value-of select="/root/labels/focus" />
+        <xsl:text>: </xsl:text>
+        <xsl:value-of select="/root/labels/yes" />
+       </xsl:when>
+       <xsl:otherwise>
+        <xsl:value-of select="/root/labels/focus" />
+        <xsl:text>: </xsl:text>
+        <xsl:value-of select="/root/labels/no" />
+       </xsl:otherwise>
+      </xsl:choose>
+     </div>
+     <div class="tenabled">
+      <form class="changetrackerenabledform" name="changetrackerenabledform_{@id}" method="post" action="{/root/iurl}?mod=changetrackerenabled&amp;hash={/root/hash}&amp;id={@id}">
+       <xsl:value-of select="/root/labels/enabled" />
+       <xsl:text>: </xsl:text>
+       <select class="whiteselect" name="trackerenabled" title="{/root/labels/selecttrackerenabled}" onchange="loadcontent_trackerenabled( '{/root/iurl}', '{/root/hash}', '{@id}', this.value )">
+        <xsl:choose>
+         <xsl:when test="t_enabled = 0">
+          <option value="1" title="{/root/labels/yes}"><xsl:value-of select="/root/labels/yes" /></option>
+          <option value="0" title="{/root/labels/no}" selected="selected"><xsl:value-of select="/root/labels/no" /></option>
+         </xsl:when>
+         <xsl:otherwise>
+          <option value="1" title="{/root/labels/yes}" selected="selected"><xsl:value-of select="/root/labels/yes" /></option>
+          <option value="0" title="{/root/labels/no}"><xsl:value-of select="/root/labels/no" /></option>
+         </xsl:otherwise>
+        </xsl:choose>
+       </select>
+      </form>
+     </div>
+     <div class="topen">
+      <xsl:value-of select="/root/labels/opened" />
+      <xsl:text>: </xsl:text>
+      <xsl:choose>
+       <xsl:when test="t_open != 0">
+        <xsl:value-of select="/root/labels/yes" />
+       </xsl:when>
+       <xsl:otherwise>
+        <xsl:value-of select="/root/labels/no" />
+       </xsl:otherwise>
+      </xsl:choose>
+     </div>
+     <div class="tpeers">
+      <xsl:value-of select="/root/labels/seedersleechers" />
+      <xsl:text>: </xsl:text>
+      <xsl:value-of select="t_scrape_complete" />
+      <xsl:text> / </xsl:text>
+      <xsl:value-of select="t_scrape_incomplete" />
+     </div>
+     <div class="clr"></div>
+    </li>
+    <li>
+     <div class="tscrape">
+      <span title="{/root/labels/mininterval}: {t_min_interval/@value} - Normal interval: {t_normal_interval/@value}">
+       <xsl:value-of select="/root/labels/lasttimescraped" />
+       <xsl:text>: </xsl:text>
+       <xsl:value-of select="t_scrape_time_last/@value" />
+      </span>
+     </div>
+     <div class="clr"></div>
+    </li>
+   </ul>
+  </li>
+ </xsl:template>
+
+ <xsl:template match="peer">
+  <li>
+   <div class="paddress">
+    <xsl:choose>
+     <xsl:when test="p_country != ''">
+      <img src="flags/{p_country}.gif" alt="flag" title="{p_country/@value}" />
+     </xsl:when>
+    </xsl:choose>
+    <xsl:value-of select="p_address" />
+   </div>
+   <div class="pup">
+    <xsl:value-of select="p_up_rate/@value" />
+    <xsl:text> </xsl:text>
+    <xsl:value-of select="p_up_rate/@suffix" />
+   </div>
+   <div class="pdown">
+    <xsl:value-of select="p_down_rate/@value" />
+    <xsl:text> </xsl:text>
+    <xsl:value-of select="p_down_rate/@suffix" />
+   </div>
+   <div class="prate">
+    <xsl:value-of select="p_peer_rate/@value" />
+    <xsl:text> </xsl:text>
+    <xsl:value-of select="p_peer_rate/@suffix" />
+   </div>
+   <div class="pdone">
+    <xsl:value-of select="p_completed_percent" />
+    <xsl:text> %</xsl:text>
+   </div>
+   <div class="pincoming">
+    <xsl:value-of select="p_incoming/@value" />
+   </div>
+   <div class="pencrypted">
+    <xsl:value-of select="p_encrypted/@value" />
+   </div>
+   <div class="pclient">
+    <xsl:value-of select="p_client_version" />
+   </div>
+   <div class="clr"></div>
+  </li>
+ </xsl:template>
+
+</xsl:stylesheet>
Index: themes/default_ajax/layout.editor.index.xsl
===================================================================
--- themes/default_ajax/layout.editor.index.xsl	(revision 9479cdac9602f889de28ba22cd8b1823c8b13abe)
+++ themes/default_ajax/layout.editor.index.xsl	(revision 9479cdac9602f889de28ba22cd8b1823c8b13abe)
@@ -0,0 +1,102 @@
+﻿<xsl:stylesheet version="1.1"
+                xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+                lang="en">
+ <xsl:output method="xml"
+             indent="no"
+             encoding="utf-8"
+             doctype-public="-//W3C//DTD XHTML 1.0 Transitional//EN"
+             doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd" />
+
+ <xsl:template match="root">
+  <html lang="en">
+   <head>
+    <meta http-equiv="content-type" content="text/html; charset=utf-8" />
+    <meta http-equiv="content-language" content="en" />
+    <meta http-equiv="cache-control" content="no-store, no-cache, must-revalidate, post-check=0, pre-check=0" />
+    <meta http-equiv="pragma" content="no-cache" />
+    <meta http-equiv="expires" content="thu, 1 jan 1970 00:00:00 gmt" />
+    <meta http-equiv="imagetoolbar" content="no" />  
+    <xsl:choose>
+     <xsl:when test="/root/torrents/@refreshrate != 0">
+      <meta http-equiv="refresh" content="{/root/torrents/@refreshrate}; url={curl}" />  
+     </xsl:when>
+    </xsl:choose>
+    <meta name="author" content="{/root/labels/author}" />
+    <meta name="description" content="{/root/labels/description}" />
+    <meta name="doc-type" content="web page" />
+    <meta name="rating" content="general" />
+    <meta name="robots" content="noindex, nofollow" />
+    <link rel="stylesheet" type="text/css" href="themes/default_ajax/inc/style.css" />
+    <script type="text/javascript" src="themes/default_ajax/inc/afunc.js"></script>
+    <script type="text/javascript" src="themes/default_ajax/inc/hfunc.js"></script>
+    <title><xsl:value-of select="/root/labels/title" /></title>
+   </head>
+   <body onload="toggle( '{/root/mod}_{/root/page}' );">
+    <div id="top">
+    </div>
+    <div id="main">
+     <div id="balh">
+      <div id="fomenu">
+       <ul>
+        <li class="first"><a href="{/root/url}" title="Main">Main</a></li>
+        <li><a href="?mod=loadtorrent" title="Load torrent">Load torrent</a></li>
+        <li><a href="?mod=savetorrent" title="Save torrent">Save torrent</a></li>
+       </ul>
+      </div>
+     </div>
+     <div id="kozeph">
+      <xsl:apply-templates select="err" />
+      <xsl:apply-templates select="torrent" />
+     </div>
+     <div class="clr1"></div>
+    </div>
+   </body>
+  </html>
+ </xsl:template>
+
+ <xsl:template match="err">
+  <div id="err">
+   <span title="Click to hide" onmouseover="this.style.cursor='pointer';" onclick="document.getElementById( 'err' ).style.display='none';">
+    <xsl:value-of select="errmsg" />
+   </span>
+  </div>
+ </xsl:template>
+
+ <xsl:template match="loadtorrent">
+  <form id="loadtorrent" name="loadtorrent" enctype="multipart/form-data" method="post" action="{/root/iurl}?mod=loadtorrent">
+   <ul class="tuform">
+    <li>
+     <div class="tufleft">Open from:</div>
+     <div class="tufright">
+      <select name="tfmethod" title="Open from" onchange="if ( this.value == 'url' ) {{ document.getElementById( 'torrenturl' ).style.display=''; document.getElementById( 'torrentfile' ).style.display='none'; }} else {{ document.getElementById( 'torrenturl' ).style.display='none'; document.getElementById( 'torrentfile' ).style.display=''; }}">
+       <option value="file">File upload</option>
+       <option value="url">URL</option>
+      </select>
+     </div>
+     <div class="clr"></div>
+    </li>
+    <li id="torrentfile">
+     <div class="tufleft">Torrent file:</div>
+     <div class="tufright">
+      <input type="hidden" name="MAX_FILE_SIZE" value="1000000" />
+      <input type="file" name="torrentfile" title="Torrent File" value="" />
+	  <input type="checkbox" name="keeptorrentfile" title="Keep the .torrent file" />
+	  <span>Keep the .torrent file</span>
+     </div>
+     <div class="clr"></div>
+    </li>
+    <li id="torrenturl">
+     <div class="tufleft">Torrent URL:</div>
+     <div class="tufright">
+      <input type="text" name="torrenturl" title="Torrent url" value="" />
+     </div>
+     <div class="clr"></div>
+    </li>
+    <li class="formsend">
+     <input class="inputok" type="submit" name="loadtorrent" title="Load torrent" value="Load torrent" />
+    </li>
+   </ul>
+  </form>
+ </xsl:template>
+
+</xsl:stylesheet>
Index: themes/default_ajax/layout.main.index.xsl
===================================================================
--- themes/default_ajax/layout.main.index.xsl	(revision 9479cdac9602f889de28ba22cd8b1823c8b13abe)
+++ themes/default_ajax/layout.main.index.xsl	(revision 9479cdac9602f889de28ba22cd8b1823c8b13abe)
@@ -0,0 +1,1486 @@
+﻿<xsl:stylesheet version="1.1"
+                xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+                lang="en">
+ <xsl:output method="xml"
+             indent="no"
+             encoding="utf-8"
+             doctype-public="-//W3C//DTD XHTML 1.0 Transitional//EN"
+             doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd" />
+
+ <xsl:template match="root">
+  <html xml:lang="{language}" lang="{language}">
+   <head>
+    <meta http-equiv="content-type" content="text/html; charset=utf-8" />
+    <meta http-equiv="content-language" content="{language}" />
+    <meta http-equiv="cache-control" content="no-store, no-cache, must-revalidate, post-check=0, pre-check=0" />
+    <meta http-equiv="pragma" content="no-cache" />
+    <meta http-equiv="expires" content="thu, 1 jan 1970 00:00:00 gmt" />
+    <meta http-equiv="imagetoolbar" content="no" />  
+    <xsl:choose>
+     <xsl:when test="@refreshrate != 0">
+      <meta http-equiv="refresh" content="{@refreshrate}; url={curl}" />  
+     </xsl:when>
+    </xsl:choose>
+    <meta name="author" content="{labels/author}" />
+    <meta name="description" content="{labels/description}" />
+    <meta name="doc-type" content="web page" />
+    <meta name="rating" content="general" />
+    <meta name="robots" content="noindex, nofollow" />
+    <link rel="stylesheet" type="text/css" href="themes/default_ajax/inc/style.css" />
+    <script type="text/javascript" src="themes/default_ajax/inc/afunc.js"></script>
+    <script type="text/javascript" src="themes/default_ajax/inc/hfunc.js"></script>
+    <title><xsl:value-of select="labels/title" /></title>
+   </head>
+   <body onload="toggle( '{mod}_{page}' );">
+    <div id="top">
+    </div>
+    <div id="main">
+     <div id="leftcol">
+      <div id="mainmenu">
+       <ul>
+        <li class="first"><a href="{url}" title="{labels/torrents}"><xsl:value-of select="labels/torrents" /></a></li>
+        <xsl:choose>
+         <xsl:when test="mod = 'torrent'">
+          <li class="submenu">
+           <a href="?mod=torrent&amp;hash={hash}&amp;page=peers" title="{labels/peerlist}"><xsl:value-of select="labels/peerlist" /></a>
+          </li>
+          <li class="submenu">
+           <a href="?mod=torrent&amp;hash={hash}&amp;page=info" title="{labels/info}"><xsl:value-of select="labels/info" /></a>
+          </li>
+          <li class="submenu">
+           <a href="?mod=torrent&amp;hash={hash}&amp;page=files" title="{labels/filelist}"><xsl:value-of select="labels/filelist" /></a>
+          </li>
+          <li class="submenu">
+           <a href="?mod=torrent&amp;hash={hash}&amp;page=trackers" title="{labels/trackerlist}"><xsl:value-of select="labels/trackerlist" /></a>
+          </li>
+          <li class="submenu notshown">
+           <a href="?mod=torrent&amp;hash={hash}&amp;page=chunks" title="{labels/chunksseen}"><xsl:value-of select="labels/chunksseen" /></a>
+          </li>
+          <li class="submenu notshown">
+           <a href="?mod=torrent&amp;hash={hash}&amp;page=transfers" title="{labels/transferlist}"><xsl:value-of select="labels/transferlist" /></a>
+          </li>
+         </xsl:when>
+        </xsl:choose>
+        <li><a href="?mod=addtorrent" title="{labels/addtorrent}"><xsl:value-of select="labels/addtorrent" /></a></li>
+        <li><a href="?mod=serverinfo" title="{labels/serverinfo}"><xsl:value-of select="labels/serverinfo" /></a></li>
+        <li><a href="{iurl}?mod=logout" title="{labels/logout}"><xsl:value-of select="labels/logout" /></a></li>
+       </ul>
+      </div>
+     </div>
+     <div id="maincol">
+      <xsl:apply-templates select="err" />
+      <xsl:apply-templates select="addtorrent" />
+      <xsl:apply-templates select="torrents" />
+     </div>
+     <div class="clr1"></div>
+    </div>
+    <div id="footer">
+     <span><a href="https://rtwi.jmk.hu/" title="{labels/homepage}"><xsl:value-of select="labels/homepage" /></a></span>
+    </div>
+   </body>
+  </html>
+ </xsl:template>
+
+ <xsl:template match="err">
+  <div id="err" title="{/root/labels/clicktohide}" onmouseover="this.style.cursor='pointer';" onclick="this.parentNode.removeChild( this );">
+   <xsl:apply-templates select="errmsg" />
+  </div>
+ </xsl:template>
+ 
+ <xsl:template match="errmsg">
+  <div>
+   <xsl:value-of select="msg" />
+  </div>
+ </xsl:template>
+
+
+ <xsl:template match="addtorrent">
+  <div class="spacer">
+   <xsl:apply-templates select="languages" />
+  </div>
+  <form id="addtorrent" name="addtorrent" enctype="multipart/form-data" method="post" action="{/root/iurl}?mod=addtorrent">
+   <ul class="tuform">
+    <li>
+     <div class="tufleft"><xsl:value-of select="/root/labels/openfrom" />:</div>
+     <div class="tufright">
+      <select name="tfmethod" title="{/root/labels/openfrom}" onchange="if ( this.value == 'url' ) {{ document.getElementById( 'torrenturl' ).style.display=''; document.getElementById( 'torrentfile' ).style.display='none'; }} else {{ document.getElementById( 'torrenturl' ).style.display='none'; document.getElementById( 'torrentfile' ).style.display=''; }}">
+       <option value="file"><xsl:value-of select="/root/labels/fileupload" /></option>
+       <option value="url"><xsl:value-of select="/root/labels/url" /></option>
+      </select>
+     </div>
+     <div class="clr"></div>
+    </li>
+    <li id="torrentfile">
+     <div class="tufleft"><xsl:value-of select="/root/labels/torrentfile" />:</div>
+     <div class="tufright">
+      <input type="hidden" name="MAX_FILE_SIZE" value="1000000" />
+      <input type="file" name="torrentfile" title="{/root/labels/torrentfile}" value="" />
+     </div>
+     <div class="clr"></div>
+    </li>
+    <li id="torrenturl">
+     <div class="tufleft"><xsl:value-of select="/root/labels/torrenturl" />:</div>
+     <div class="tufright">
+      <input type="text" name="torrenturl" title="{/root/labels/torrenturl}" value="" />
+     </div>
+     <div class="clr"></div>
+    </li>
+    <li>
+     <div class="tufleft"><xsl:value-of select="/root/labels/starttorrent" />:</div>
+     <div class="tufright">
+      <input type="checkbox" name="torrentstart" title="{/root/labels/starttorrentafteradded}" value="start" checked="checked" />
+     </div>
+     <div class="clr"></div>
+    </li>
+    <li>
+     <div class="tufleft"><xsl:value-of select="/root/labels/downloadto" />:</div>
+     <div class="tufright">
+      <input type="hidden" name="dlpath" value="{@path}" />
+      <ul class="tufupload">
+       <li onmouseover="this.style.background='#eeeeee';" onmouseout="this.style.background='';">
+        <div class="tufpath">
+         <a href="?mod=addtorrent&amp;path={@ppath}">..</a>
+        </div>
+        <div class="tufspace">
+         <xsl:value-of select="@freespace_value" />
+         <xsl:text> </xsl:text>
+         <xsl:value-of select="@freespace_suffix" />
+        </div>
+        <div class="clr"></div>
+       </li>
+       <xsl:apply-templates select="dlpath" />
+      </ul>
+     </div>
+     <div class="clr"></div>
+    </li>
+    <li class="formsend">
+     <input class="inputok" type="submit" name="addtorrent" title="{/root/labels/addtorrent}" value="{/root/labels/addtorrent}" />
+    </li>
+   </ul>
+  </form>
+ </xsl:template>
+
+ <xsl:template match="torrents">
+  <ul>
+   <li class="tline first">
+    <xsl:apply-templates select="viewtypes" />
+    <xsl:apply-templates select="refreshrates" />
+    <xsl:apply-templates select="languages" />
+    <xsl:choose>
+     <xsl:when test="/root/mod = ''">
+      <form id="doonalltorrentform" name="doonalltorrentform" method="post" action="{/root/iurl}?mod=doonalltorrent">
+       <select class="whiteselect" name="task" title="{/root/labels/selecttask}" onchange="window.location='{/root/iurl}?mod=doonalltorrent&amp;task='+this.value;">
+        <option value="select" title="{/root/labels/selecttask}" selected="selected"><xsl:value-of select="/root/labels/selecttask" /></option>
+        <option value="start" title="{/root/labels/startall}"><xsl:value-of select="/root/labels/startall" /></option>
+        <option value="stop" title="{/root/labels/stopall}"><xsl:value-of select="/root/labels/stopall" /></option>
+        <option value="open" title="{/root/labels/openall}"><xsl:value-of select="/root/labels/openall" /></option>
+        <option value="close" title="{/root/labels/closeall}"><xsl:value-of select="/root/labels/closeall" /></option>
+        <option value="checkhash" title="{/root/labels/checkall}"><xsl:value-of select="/root/labels/checkall" /></option>
+        <option value="remove" title="{/root/labels/removeall}"><xsl:value-of select="/root/labels/removeall" /></option>
+       </select>
+       <noscript>
+        <input class="submit" id="doatsubmit" type="submit" name="doatsubmit" title="{/root/labels/ok}" value="{/root/labels/ok}" />
+       </noscript>
+      </form>
+     </xsl:when>
+    </xsl:choose>
+    <div class="clr"></div>
+   </li>
+   <xsl:apply-templates select="torrent">
+    <xsl:sort select="d_name" lang="utf-8" data-type="text" order="ascending" />
+   </xsl:apply-templates>
+   <xsl:apply-templates select="torrent_info_root" />
+   <xsl:apply-templates select="torrent_files_root" />
+   <xsl:apply-templates select="torrent_peers_root" />
+   <xsl:apply-templates select="torrent_trackers_root" />
+   <xsl:apply-templates select="server_info" />
+   <li class="tline last">
+    <xsl:choose>
+     <xsl:when test="/root/allow_throttle = 'true'">
+      <div class="tthrottle" onmouseover="this.style.cursor='pointer';" onclick="toggle( '_info_restore' );">
+       <form id="changethrottleform" name="changethrottleform" method="post" action="{/root/iurl}?mod=changethrottle">
+        <span title="{/root/labels/clicktochange}">
+         <xsl:text>[</xsl:text>
+         <xsl:value-of select="/root/labels/throttle" />
+         <xsl:text> </xsl:text>
+        </span>
+        <span title="{/root/labels/uploadlimit}">
+         <span id="throttleup" style="display: none;"><xsl:value-of select="upload_rate/@value" /></span>
+         <input type="text" id="throttleupinput" name="upspeed" value="{upload_rate/@value}" />
+         <xsl:text> KB</xsl:text>
+        </span>
+        <xsl:text> / </xsl:text>
+        <span title="{/root/labels/downloadlimit}">
+         <span id="throttledown" style="display: none;"><xsl:value-of select="download_rate/@value" /></span>
+         <input type="text" id="throttledowninput" name="downspeed" value="{download_rate/@value}" />
+         <xsl:text> KB</xsl:text>
+        </span>
+        <input class="submit" id="tsubmit" type="submit" name="tsubmit" title="{/root/labels/ok}" value="{/root/labels/ok}" />
+        <xsl:text>]</xsl:text>
+       </form>
+      </div>
+     </xsl:when>
+     <xsl:otherwise>
+      <div class="tthrottle">
+        <span>
+         <xsl:text>[</xsl:text>
+         <xsl:value-of select="/root/labels/throttle" />
+         <xsl:text> </xsl:text>
+        </span>
+       <span title="{/root/labels/uploadlimit}"><xsl:value-of select="upload_rate/@value" /> KB</span>
+       <xsl:text> / </xsl:text>
+       <span title="{/root/labels/downloadlimit}"><xsl:value-of select="download_rate/@value" /> KB</span>
+       <xsl:text>]</xsl:text>
+      </div>
+     </xsl:otherwise>
+    </xsl:choose>
+    <div class="trates_total">
+     <xsl:text>[</xsl:text>
+     <xsl:value-of select="/root/labels/rate" />
+     <xsl:text> </xsl:text>
+     <span title="{/root/labels/uploadspeed}">
+      <xsl:value-of select="bytes_up/@value" />
+      <xsl:text> </xsl:text>
+      <xsl:value-of select="bytes_up/@suffix" />
+     </span>
+     <xsl:text> / </xsl:text>
+     <span title="{/root/labels/downloadspeed}">
+      <xsl:value-of select="bytes_down/@value" />
+      <xsl:text> </xsl:text>
+      <xsl:value-of select="bytes_down/@suffix" />
+     </span>
+     <xsl:text>]</xsl:text>
+    </div>
+    <div class="clr"></div>
+   </li>
+  </ul>
+ </xsl:template>
+
+ <xsl:template match="viewtypes">
+  <form id="changeviewform" name="changeviewform" method="post" action="{/root/iurl}?mod=changeview">
+   <xsl:text>[</xsl:text>
+   <xsl:value-of select="/root/labels/view" />
+   <xsl:text>: </xsl:text>
+   <select class="whiteselect" name="viewtype" title="{/root/labels/selectviewtype}" onchange="window.location='{/root/iurl}?mod=changeview&amp;viewtype='+this.value;">
+    <xsl:apply-templates select="viewtype" />
+   </select>
+   <noscript>
+    <input class="submit" id="vtsubmit" type="submit" name="vtsubmit" title="{/root/labels/ok}" value="{/root/labels/ok}" />
+   </noscript>
+   <xsl:text>]</xsl:text>
+  </form>
+ </xsl:template>
+
+ <xsl:template match="viewtype">
+  <xsl:choose>
+   <xsl:when test="/root/@viewtype = @value">
+    <option value="{@value}" title="{@title}" selected="selected"><xsl:value-of select="@title" /></option>
+   </xsl:when>
+   <xsl:otherwise>
+    <option value="{@value}" title="{@title}"><xsl:value-of select="@title" /></option>
+   </xsl:otherwise>
+  </xsl:choose>
+ </xsl:template>
+
+ <xsl:template match="refreshrates">
+  <form id="changerefreshform" name="changerefreshform" method="post" action="{/root/iurl}?mod=changerefresh">
+   <xsl:text>[</xsl:text>
+   <xsl:value-of select="/root/labels/refresh" />
+   <xsl:text>: </xsl:text>
+   <select class="whiteselect" name="refreshrate" title="{/root/labels/selectrefreshrate}" onchange="window.location='{/root/iurl}?mod=changerefresh&amp;refreshrate='+this.value;">
+    <xsl:apply-templates select="refreshrate" />
+   </select>
+   <noscript>
+    <input class="submit" id="rrsubmit" type="submit" name="rrsubmit" title="{/root/labels/ok}" value="{/root/labels/ok}" />
+   </noscript>
+   <xsl:text>]</xsl:text>
+  </form>
+ </xsl:template>
+
+ <xsl:template match="refreshrate">
+  <xsl:choose>
+   <xsl:when test="/root/@refreshrate = @value">
+    <option value="{@value}" title="{@title}" selected="selected"><xsl:value-of select="@title" /></option>
+   </xsl:when>
+   <xsl:otherwise>
+    <option value="{@value}" title="{@title}"><xsl:value-of select="@title" /></option>
+   </xsl:otherwise>
+  </xsl:choose>
+ </xsl:template>
+
+ <xsl:template match="languages">
+  <form id="changelanguageform" name="changelanguageform" method="post" action="{/root/iurl}?mod=changelanguage">
+   <xsl:text>[</xsl:text>
+   <xsl:value-of select="/root/labels/language" />
+   <xsl:text>: </xsl:text>
+   <select class="whiteselect" name="language" title="{/root/labels/selectlanguage}" onchange="window.location='{/root/iurl}?mod=changelanguage&amp;language='+this.value;">
+    <xsl:apply-templates select="language" />
+   </select>
+   <noscript>
+    <input class="submit" id="lsubmit" type="submit" name="lsubmit" title="{/root/labels/ok}" value="{/root/labels/ok}" />
+   </noscript>
+   <xsl:text>]</xsl:text>
+  </form>
+ </xsl:template>
+
+ <xsl:template match="language">
+  <xsl:choose>
+   <xsl:when test="/root/@language = @value">
+    <option value="{@value}" title="{@title}" selected="selected"><xsl:value-of select="@title" /></option>
+   </xsl:when>
+   <xsl:otherwise>
+    <option value="{@value}" title="{@title}"><xsl:value-of select="@title" /></option>
+   </xsl:otherwise>
+  </xsl:choose>
+ </xsl:template>
+
+ <xsl:template match="torrent">
+  <li class="tline">
+   <div class="ticon">
+    <xsl:choose>
+     <xsl:when test="d_hashing != 0">
+      <img class="icon" src="themes/default_ajax/pics/hashing.png" alt="{/root/labels/hashing}" title="{/root/labels/hashingsince} {d_state_changed/@value}" />
+     </xsl:when>
+     <xsl:when test="d_active != 0">
+      <img class="icon" src="themes/default_ajax/pics/{d_connection_current}ing.png" alt="{d_connection_current}" title="{d_connection_current/@value} {/root/labels/sincepre} {d_state_changed/@value} {/root/labels/sincepost}" />
+     </xsl:when>
+     <xsl:when test="d_complete != 0">
+      <xsl:choose>
+       <xsl:when test="d_open != 0">
+        <img class="icon" src="themes/default_ajax/pics/finished.png" alt="{/root/labels/finished}" title="{/root/labels/finishedsince} {d_state_changed/@value}" />
+       </xsl:when>
+       <xsl:otherwise>
+        <img class="icon" src="themes/default_ajax/pics/finished_c.png" alt="{/root/labels/finished}" title="{/root/labels/finishedsince} {d_state_changed/@value}" />
+       </xsl:otherwise>
+      </xsl:choose>
+     </xsl:when>
+     <xsl:when test="d_open != 0">
+      <img class="icon" src="themes/default_ajax/pics/stopped.png" alt="{/root/labels/stopped}" title="{/root/labels/stoppedsince} {d_state_changed/@value}" />
+     </xsl:when>
+     <xsl:otherwise>
+      <img class="icon" src="themes/default_ajax/pics/closed.png" alt="{/root/labels/closed}" title="{/root/labels/closedsince} {d_state_changed/@value}" />
+     </xsl:otherwise>
+    </xsl:choose>
+   </div>
+   <div class="tname">
+    <xsl:choose>
+     <xsl:when test="/root/allow_ajax = 'true'">
+      <a href="?mod=torrent&amp;hash={d_hash}" title="{/root/labels/details}" onclick="if ( document.getElementById( 'torrent_{d_hash}' ).style.display == '' ) {{ document.getElementById( 'torrent_{d_hash}' ).style.display = 'none' }} else {{ document.getElementById( 'torrent_{d_hash}' ).style.display = ''}} return false;"><xsl:value-of select="d_name" /></a>
+     </xsl:when>
+     <xsl:otherwise>
+      <a href="?mod=torrent&amp;hash={d_hash}" title="{/root/labels/details}"><xsl:value-of select="d_name" /></a>
+     </xsl:otherwise>
+    </xsl:choose>
+   </div>
+   <div class="tops">
+    <xsl:choose>
+     <xsl:when test="d_hashing != 0">
+      <xsl:value-of select="d_hashing/@value" />
+     </xsl:when>
+     <xsl:otherwise>
+      <a href="{/root/iurl}?mod=torrentcheckhash&amp;hash={d_hash}" title="{/root/labels/checkhash}"><xsl:value-of select="/root/labels/checkhash" /></a>
+     </xsl:otherwise>
+    </xsl:choose>
+    <xsl:choose>
+     <xsl:when test="d_active != 0">
+      <a href="{/root/iurl}?mod=torrentstop&amp;hash={d_hash}" title="{/root/labels/stop}"><xsl:value-of select="/root/labels/stop" /></a>
+     </xsl:when>
+     <xsl:otherwise>
+      <xsl:choose>
+       <xsl:when test="d_hashing != 0">
+        <a href="{/root/iurl}?mod=torrentstop&amp;hash={d_hash}" title="{/root/labels/stop}"><xsl:value-of select="/root/labels/stop" /></a>
+       </xsl:when>
+       <xsl:otherwise>
+        <a href="{/root/iurl}?mod=torrentstart&amp;hash={d_hash}" title="{/root/labels/start}"><xsl:value-of select="/root/labels/start" /></a>
+       </xsl:otherwise>
+      </xsl:choose>
+     </xsl:otherwise>
+    </xsl:choose>
+    <xsl:choose>
+     <xsl:when test="d_open = 0">
+      <a href="{/root/iurl}?mod=torrentopen&amp;hash={d_hash}" title="{/root/labels/open}"><xsl:value-of select="/root/labels/open" /></a>
+     </xsl:when>
+     <xsl:otherwise>
+      <a href="{/root/iurl}?mod=torrentclose&amp;hash={d_hash}" title="{/root/labels/close}"><xsl:value-of select="/root/labels/close" /></a>
+     </xsl:otherwise>
+    </xsl:choose>
+    <a href="{/root/iurl}?mod=torrentremove&amp;hash={d_hash}" title="{/root/labels/remove}" onclick="var answer = confirm( '{/root/labels/areyousure}' ); if ( !answer ) return false;"><xsl:value-of select="/root/labels/remove" /></a>
+    <xsl:choose>
+     <xsl:when test="/root/allow_erase = 'true'">
+      <a href="{/root/iurl}?mod=torrenterase&amp;hash={d_hash}" title="{/root/labels/erase}" onclick="var answer = confirm( '{/root/labels/areyousureerase}\n{d_base_path}\n{/root/labels/alldatawillbedestroyed}' ); if ( !answer ) return false;"><xsl:value-of select="/root/labels/erase" /></a>
+     </xsl:when>
+    </xsl:choose>
+   </div>
+   <div class="clr"></div>
+   <div class="tbytes">
+    <xsl:choose>
+     <xsl:when test="d_complete = 1">
+      <span title="{/root/labels/downloadfinished}"><xsl:value-of select="/root/labels/done" /> </span>
+     </xsl:when>
+     <xsl:otherwise>
+      <span title="{/root/labels/downloadeddata}">
+       <xsl:value-of select="d_bytes_done/@value" />
+       <xsl:text> </xsl:text>
+       <xsl:value-of select="d_bytes_done/@suffix" />
+      </span>
+      <xsl:text> / </xsl:text>
+     </xsl:otherwise>
+    </xsl:choose>
+    <span title="{/root/labels/torrentsize}">
+     <xsl:value-of select="d_size_bytes/@value" />
+     <xsl:text> </xsl:text>
+     <xsl:value-of select="d_size_bytes/@suffix" />
+    </span>
+   </div>
+   <div class="trates">
+    <xsl:value-of select="/root/labels/rate" />
+    <xsl:text>: </xsl:text>
+    <span title="{/root/labels/uploadspeed}">
+     <xsl:value-of select="d_up_rate/@value" />
+     <xsl:text> </xsl:text>
+     <xsl:value-of select="d_up_rate/@suffix" />
+    </span>
+    <xsl:text> / </xsl:text>
+    <span title="{/root/labels/downloadspeed}">
+     <xsl:value-of select="d_down_rate/@value" />
+     <xsl:text> </xsl:text>
+     <xsl:value-of select="d_down_rate/@suffix" />
+    </span>
+   </div>
+   <div class="tupbytes">
+    <span><xsl:value-of select="/root/labels/uploaded" />: </span>
+    <span title="{/root/labels/uploadeddata}">
+     <xsl:value-of select="d_up_total/@value" />
+     <xsl:text> </xsl:text>
+     <xsl:value-of select="d_up_total/@suffix" />
+    </span>
+   </div>
+   <xsl:choose>
+    <xsl:when test="d_percentage != 1">
+     <xsl:choose>
+      <xsl:when test="d_hashing != 0">
+       <div class="tpercentage">
+        <span title="{d_hpercentage/@value} {/root/labels/percenthashed}">
+         <xsl:text>[</xsl:text>
+         <xsl:value-of select="d_hpercentage/@value" />
+         <xsl:text> %]</xsl:text>
+        </span>
+       </div>
+       <div class="tpercentage">
+        <span title="{d_percentage/@value} {/root/labels/percentcompleted}">
+         <xsl:text>[</xsl:text>
+         <xsl:value-of select="d_percentage/@value" />
+         <xsl:text> %]</xsl:text>
+        </span>
+       </div>
+      </xsl:when>
+      <xsl:otherwise>
+       <div class="tpercentage">
+        <span title="{d_percentage/@value} {/root/labels/percentcompleted}">
+         <xsl:text>[</xsl:text>
+         <xsl:value-of select="d_percentage/@value" />
+         <xsl:text> %]</xsl:text>
+        </span>
+       </div>
+      </xsl:otherwise>
+     </xsl:choose>
+     <xsl:choose>
+      <xsl:when test="d_estimated_time != ''">
+       <div class="testimate">
+        <span title="{/root/labels/estimatedtimeremaining}">
+         <xsl:value-of select="d_estimated_time/@value" />
+        </span>
+       </div>
+      </xsl:when>
+     </xsl:choose>
+    </xsl:when>
+   </xsl:choose>
+   <div class="tratio">
+    <xsl:text>[</xsl:text>
+    <xsl:choose>
+     <xsl:when test="d_tied_to_file != ''">
+      <span title="{/root/labels/tiedtofile}">T</span>
+     </xsl:when>
+    </xsl:choose>
+    <xsl:choose>
+     <xsl:when test="d_ignore_commands != 0">
+      <span title="{/root/labels/ignoringcommands}">I</span>
+     </xsl:when>
+    </xsl:choose>
+    <span title="{/root/labels/ratio}">
+     <xsl:text> R: </xsl:text>
+     <xsl:value-of select="d_ratio/@value" />
+    </span>
+    <xsl:text>]</xsl:text>
+   </div>
+   <div class="tpriority">
+    <form class="changepriorityform" name="changepriorityform_{d_hash}" method="post" action="{/root/iurl}?mod=changepriority&amp;hash={d_hash}">
+     <select class="whiteselect" name="priority" title="{/root/labels/selectpriority}" onchange="window.location='{/root/iurl}?mod=changepriority&amp;hash={d_hash}&amp;priority='+this.value;">
+      <xsl:choose>
+       <xsl:when test="d_priority = 0">
+        <option value="0" title="{/root/labels/off}" selected="selected"><xsl:value-of select="/root/labels/off" /></option>
+        <option value="1" title="{/root/labels/low}"><xsl:value-of select="/root/labels/low" /></option>
+        <option value="2" title="{/root/labels/normal}"><xsl:value-of select="/root/labels/normal" /></option>
+        <option value="3" title="{/root/labels/high}"><xsl:value-of select="/root/labels/high" /></option>
+       </xsl:when>
+       <xsl:when test="d_priority = 1">
+        <option value="0" title="{/root/labels/off}"><xsl:value-of select="/root/labels/off" /></option>
+        <option value="1" title="{/root/labels/low}" selected="selected"><xsl:value-of select="/root/labels/low" /></option>
+        <option value="2" title="{/root/labels/normal}"><xsl:value-of select="/root/labels/normal" /></option>
+        <option value="3" title="{/root/labels/high}"><xsl:value-of select="/root/labels/high" /></option>
+       </xsl:when>
+       <xsl:when test="d_priority = 3">
+        <option value="0" title="{/root/labels/off}"><xsl:value-of select="/root/labels/off" /></option>
+        <option value="1" title="{/root/labels/low}"><xsl:value-of select="/root/labels/low" /></option>
+        <option value="2" title="{/root/labels/normal}"><xsl:value-of select="/root/labels/normal" /></option>
+        <option value="3" title="{/root/labels/high}" selected="selected"><xsl:value-of select="/root/labels/high" /></option>
+       </xsl:when>
+       <xsl:otherwise>
+        <option value="0" title="{/root/labels/off}"><xsl:value-of select="/root/labels/off" /></option>
+        <option value="1" title="{/root/labels/low}"><xsl:value-of select="/root/labels/low" /></option>
+        <option value="2" title="{/root/labels/normal}" selected="selected"><xsl:value-of select="/root/labels/normal" /></option>
+        <option value="3" title="{/root/labels/high}"><xsl:value-of select="/root/labels/high" /></option>
+       </xsl:otherwise>
+      </xsl:choose>
+     </select>
+     <noscript>
+      <input class="submit" type="submit" name="submit" value="{/root/labels/ok}" title="{/root/labels/ok}" />
+     </noscript>
+    </form>
+   </div>
+   <div class="clr"></div>
+   <div class="tmessage">
+    <span><xsl:value-of select="/root/labels/message" />: <xsl:value-of select="d_message" /></span>
+   </div>
+   <div class="clr"></div>
+   <xsl:choose>
+    <xsl:when test="/root/allow_ajax = 'true'">
+     <div class="tcontainer" id="torrent_{d_hash}" style="display: none;">
+      <a class="subpage" href="?mod=torrent&amp;hash={d_hash}&amp;page=peers" title="{/root/labels/peerlist}" onclick="loadcontent( '{d_hash}', 'peers' ); return false;"><xsl:value-of select="/root/labels/peerlist" /></a>
+      <a class="subpage" href="?mod=torrent&amp;hash={d_hash}&amp;page=info" title="{/root/labels/info}" onclick="loadcontent( '{d_hash}', 'info' ); return false;"><xsl:value-of select="/root/labels/info" /></a>
+      <a class="subpage" href="?mod=torrent&amp;hash={d_hash}&amp;page=files" title="{/root/labels/filelist}" onclick="loadcontent( '{d_hash}', 'files' ); return false;"><xsl:value-of select="/root/labels/filelist" /></a>
+      <a class="subpage" href="?mod=torrent&amp;hash={d_hash}&amp;page=trackers" title="{/root/labels/trackerlist}" onclick="loadcontent( '{d_hash}', 'trackers' ); return false;"><xsl:value-of select="/root/labels/trackerlist" /></a>
+      <div class="clr"></div>
+      <div class="tcontent" id="torrent_{d_hash}_content"></div>
+     </div>
+    </xsl:when>
+   </xsl:choose>
+   <div class="clr"></div>
+  </li>
+ </xsl:template>
+
+ <xsl:template match="torrent_info_root">
+  <xsl:apply-templates select="torrent_info" />
+ </xsl:template>
+
+ <xsl:template match="torrent_info">
+  <li class="line spacer">
+   <div class="infoleft">
+    <xsl:value-of select="/root/labels/name" />
+   </div>
+   <div class="inforight">
+    <xsl:value-of select="d_name" />
+   </div>
+   <div class="clr"></div>
+  </li>
+  <li class="line">
+   <div class="infoleft">
+    <xsl:value-of select="/root/labels/infohash" />
+   </div>
+   <div class="inforight">
+    <xsl:value-of select="d_hash" />
+   </div>
+   <div class="clr"></div>
+  </li>
+  <li class="line">
+   <div class="infoleft">
+    <xsl:value-of select="/root/labels/localid" />
+   </div>
+   <div class="inforight">
+    <xsl:value-of select="d_local_id" />
+   </div>
+   <div class="clr"></div>
+  </li>
+  <li class="line spacer">
+   <div class="infoleft">
+    <xsl:value-of select="/root/labels/localidhtml" />
+   </div>
+   <div class="inforight">
+    <xsl:value-of select="d_local_id_html" />
+   </div>
+   <div class="clr"></div>
+  </li>
+  <li class="line">
+   <div class="infoleft">
+    <xsl:value-of select="/root/labels/directory" />
+   </div>
+   <div class="inforight">
+    <xsl:value-of select="d_directory/@value" />
+   </div>
+   <div class="clr"></div>
+  </li>
+  <li class="line">
+   <div class="infoleft">
+    <xsl:value-of select="/root/labels/tiedtofile" />
+   </div>
+   <div class="inforight">
+    <xsl:choose>
+     <xsl:when test="d_tied_to_file != ''">
+      <xsl:value-of select="d_tied_to_file/@value" />
+     </xsl:when>
+     <xsl:otherwise>
+      <xsl:value-of select="/root/labels/no" />
+     </xsl:otherwise>
+    </xsl:choose>
+   </div>
+   <div class="clr"></div>
+  </li>
+  <li class="line">
+   <div class="infoleft">
+    <xsl:value-of select="/root/labels/filestats" />
+   </div>
+   <div class="inforight">
+    <xsl:value-of select="d_multi_file/@value" />
+    <xsl:choose>
+     <xsl:when test="d_multi_file != 0">
+      <xsl:text> </xsl:text>
+      <xsl:value-of select="d_size_files" />
+      <xsl:text> </xsl:text>
+      <xsl:value-of select="/root/labels/files" />
+     </xsl:when>
+    </xsl:choose>
+   </div>
+   <div class="clr"></div>
+  </li>
+  <li class="line spacer">
+   <div class="infoleft">
+    <xsl:value-of select="/root/labels/private" />
+   </div>
+   <div class="inforight">
+    <xsl:value-of select="d_private/@value" />
+   </div>
+   <div class="clr"></div>
+  </li>
+  <li class="line">
+   <div class="infoleft">
+    <xsl:value-of select="/root/labels/chunks" />
+   </div>
+   <div class="inforight">
+    <xsl:value-of select="d_completed_chunks" />
+    <xsl:text> / </xsl:text>
+    <xsl:value-of select="d_chunks_hashed" />
+    <xsl:text> * </xsl:text>
+    <xsl:value-of select="d_chunk_size/@value" />
+    <xsl:text> </xsl:text>
+    <xsl:value-of select="d_chunk_size/@suffix" />
+   </div>
+   <div class="clr"></div>
+  </li>
+  <li class="line">
+   <div class="infoleft">
+    <xsl:value-of select="/root/labels/priority" />
+   </div>
+   <div class="inforight">
+    <xsl:value-of select="d_priority/@value" />
+   </div>
+   <div class="clr"></div>
+  </li>
+  <li class="line spacer">
+   <div class="infoleft">
+    <xsl:value-of select="/root/labels/statechanged" />
+   </div>
+   <div class="inforight">
+    <xsl:value-of select="d_state_changed/@value" />
+   </div>
+   <div class="clr"></div>
+  </li>
+  <li class="line spacer">
+   <div class="infoleft">
+    <xsl:value-of select="/root/labels/freediskspace" />
+   </div>
+   <div class="inforight">
+    <xsl:value-of select="d_free_diskspace/@value" />
+    <xsl:text> </xsl:text>
+    <xsl:value-of select="d_free_diskspace/@suffix" />
+   </div>
+   <div class="clr"></div>
+  </li>
+  <li class="line">
+   <div class="infoleft">
+    <xsl:value-of select="/root/labels/connectiontype" />
+   </div>
+   <div class="inforight">
+    <xsl:value-of select="d_connection_current/@value" />
+   </div>
+   <div class="clr"></div>
+  </li>
+  <li class="line">
+   <div class="infoleft">
+    <xsl:value-of select="/root/labels/trackers" />
+   </div>
+   <div class="inforight">
+    <xsl:value-of select="d_tracker_size" />
+   </div>
+   <div class="clr"></div>
+  </li>
+  <li class="line">
+   <div class="infoleft">
+    <xsl:value-of select="/root/labels/peersconnected" />
+   </div>
+   <div class="inforight">
+    <span title="{/root/labels/dminpeers}: {d_peers_min} - {/root/labels/dmaxpeers}: {d_peers_max}">
+     <xsl:value-of select="d_peers_connected" />
+    </span>
+   </div>
+   <div class="clr"></div>
+  </li>
+  <li class="line">
+   <div class="infoleft">
+    <xsl:value-of select="/root/labels/leechers" />
+   </div>
+   <div class="inforight">
+    <xsl:value-of select="d_peers_accounted" />
+   </div>
+   <div class="clr"></div>
+  </li>
+  <li class="line spacer">
+   <div class="infoleft">
+    <xsl:value-of select="/root/labels/seeders" />
+   </div>
+   <div class="inforight">
+    <xsl:value-of select="d_peers_complete" />
+   </div>
+   <div class="clr"></div>
+  </li>
+  <li class="line">
+   <div class="infoleft">
+    <xsl:value-of select="/root/labels/pexenabled" />
+   </div>
+   <div class="inforight">
+    <xsl:value-of select="d_pex_active/@value" />
+   </div>
+   <div class="clr"></div>
+  </li>
+  <li class="line spacer">
+   <div class="infoleft">
+    <xsl:value-of select="/root/labels/pexsize" />
+   </div>
+   <div class="inforight">
+    <xsl:value-of select="d_size_pex" />
+    <xsl:text> / </xsl:text>
+    <xsl:value-of select="d_max_size_pex" />
+   </div>
+   <div class="clr"></div>
+  </li>
+  <li class="line">
+   <div class="infoleft">
+    <xsl:value-of select="/root/labels/upload" />
+   </div>
+   <div class="inforight">
+    <xsl:value-of select="d_up_rate/@value" />
+    <xsl:text> </xsl:text>
+    <xsl:value-of select="d_up_rate/@suffix" />
+    <xsl:text> / </xsl:text>
+    <xsl:value-of select="d_up_total/@value" />
+    <xsl:text> </xsl:text>
+    <xsl:value-of select="d_up_total/@suffix" />
+   </div>
+   <div class="clr"></div>
+  </li>
+  <li class="line">
+   <div class="infoleft">
+    <xsl:value-of select="/root/labels/download" />
+   </div>
+   <div class="inforight">
+    <xsl:value-of select="d_down_rate/@value" />
+    <xsl:text> </xsl:text>
+    <xsl:value-of select="d_down_rate/@suffix" />
+    <xsl:text> / </xsl:text>
+    <xsl:value-of select="d_down_total/@value" />
+    <xsl:text> </xsl:text>
+    <xsl:value-of select="d_down_total/@suffix" />
+   </div>
+   <div class="clr"></div>
+  </li>
+  <li class="line">
+   <div class="infoleft">
+    <xsl:value-of select="/root/labels/skipped" />
+   </div>
+   <div class="inforight">
+    <xsl:value-of select="d_skip_rate/@value" />
+    <xsl:text> </xsl:text>
+    <xsl:value-of select="d_skip_rate/@suffix" />
+    <xsl:text> / </xsl:text>
+    <xsl:value-of select="d_skip_total/@value" />
+    <xsl:text> </xsl:text>
+    <xsl:value-of select="d_skip_total/@suffix" />
+   </div>
+   <div class="clr"></div>
+  </li>
+ </xsl:template>
+
+ <xsl:template match="torrent_files_root">
+  <xsl:apply-templates select="torrent_files" />
+ </xsl:template>
+
+ <xsl:template match="torrent_files">
+  <xsl:apply-templates select="files_root" />
+ </xsl:template>
+
+ <xsl:template match="torrent_trackers_root">
+  <xsl:apply-templates select="torrent_trackers" />
+ </xsl:template>
+
+ <xsl:template match="torrent_trackers">
+  <xsl:apply-templates select="tracker" />
+ </xsl:template>
+
+ <xsl:template match="torrent_peers_root">
+  <xsl:apply-templates select="torrent_peers" />
+ </xsl:template>
+
+ <xsl:template match="torrent_peers">
+  <li class="phead">
+   <div class="paddress">
+    <xsl:value-of select="/root/labels/address" />
+   </div>
+   <div class="pup">
+    <xsl:value-of select="/root/labels/up_rate" />
+   </div>
+   <div class="pdown">
+    <xsl:value-of select="/root/labels/down_rate" />
+   </div>
+   <div class="prate">
+    <xsl:value-of select="/root/labels/peer_rate" />
+   </div>
+   <div class="pdone">
+    <xsl:value-of select="/root/labels/pdone" />
+   </div>
+   <div class="pincoming">
+    <xsl:value-of select="/root/labels/incoming" />
+   </div>
+   <div class="pencrypted">
+    <xsl:value-of select="/root/labels/encrypted" />
+   </div>
+   <div class="pclient">
+    <xsl:value-of select="/root/labels/pclientversion" />
+   </div>
+   <div class="clr"></div>
+  </li>
+  <xsl:apply-templates select="peer" />
+ </xsl:template>
+
+ <xsl:template match="server_info">
+  <li class="line">
+   <div class="infoleft">
+    <xsl:value-of select="/root/labels/hostname" />
+   </div>
+   <div class="inforight">
+    <xsl:value-of select="hostname" />
+   </div>
+   <div class="clr"></div>
+  </li>
+  <li class="line spacer">
+   <div class="infoleft">
+    <xsl:value-of select="/root/labels/pid" />
+   </div>
+   <div class="inforight">
+    <xsl:value-of select="pid" />
+   </div>
+   <div class="clr"></div>
+  </li>
+  <li class="line">
+   <div class="infoleft">
+    <xsl:value-of select="/root/labels/clientversion" />
+   </div>
+   <div class="inforight">
+    <xsl:value-of select="client_version" />
+   </div>
+   <div class="clr"></div>
+  </li>
+  <li class="line spacer">
+   <div class="infoleft">
+    <xsl:value-of select="/root/labels/libraryversion" />
+   </div>
+   <div class="inforight">
+    <xsl:value-of select="library_version" />
+   </div>
+   <div class="clr"></div>
+  </li>
+  <li class="line">
+   <div class="infoleft">
+    <xsl:value-of select="/root/labels/workingdirectory" />
+   </div>
+   <div class="inforight">
+    <xsl:value-of select="get_cwd" />
+   </div>
+   <div class="clr"></div>
+  </li>
+  <li class="line">
+   <div class="infoleft">
+    <xsl:value-of select="/root/labels/downloaddirectory" />
+   </div>
+   <div class="inforight">
+    <xsl:value-of select="directory/@value" />
+   </div>
+   <div class="clr"></div>
+  </li>
+  <li class="line spacer">
+   <div class="infoleft">
+    <xsl:value-of select="/root/labels/sessiondirectory" />
+   </div>
+   <div class="inforight">
+    <xsl:value-of select="session/@value" />
+   </div>
+   <div class="clr"></div>
+  </li>
+  <li class="line">
+   <div class="infoleft">
+    <xsl:value-of select="/root/labels/listeningipaddress" />
+   </div>
+   <div class="inforight">
+    <xsl:value-of select="bind/@value" />
+   </div>
+   <div class="clr"></div>
+  </li>
+  <li class="line">
+   <div class="infoleft">
+    <xsl:value-of select="/root/labels/reportedipaddress" />
+   </div>
+   <div class="inforight">
+    <xsl:value-of select="ip/@value" />
+   </div>
+   <div class="clr"></div>
+  </li>
+  <li class="line">
+   <div class="infoleft">
+    <xsl:value-of select="/root/labels/portopened" />
+   </div>
+   <div class="inforight">
+    <xsl:value-of select="port_open/@value" />
+   </div>
+   <div class="clr"></div>
+  </li>
+  <li class="line">
+   <div class="infoleft">
+    <xsl:value-of select="/root/labels/randomport" />
+   </div>
+   <div class="inforight">
+    <xsl:value-of select="port_random/@value" />
+   </div>
+   <div class="clr"></div>
+  </li>
+  <li class="line">
+   <div class="infoleft">
+    <xsl:value-of select="/root/labels/portrange" />
+   </div>
+   <div class="inforight">
+    <xsl:value-of select="port_range/@value" />
+   </div>
+   <div class="clr"></div>
+  </li>
+  <li class="line spacer">
+   <div class="infoleft">
+    <xsl:value-of select="/root/labels/udptrackers" />
+   </div>
+   <div class="inforight">
+    <xsl:value-of select="use_udp_trackers/@value" />
+   </div>
+   <div class="clr"></div>
+  </li>
+  <xsl:choose>
+   <xsl:when test="/root/allow_dht = 'true'">
+    <xsl:choose>
+     <xsl:when test="dht_statistics_active = 0">
+      <li class="line spacer">
+       <div class="infoleft">
+        <xsl:value-of select="/root/labels/dht" />
+       </div>
+       <div class="inforight" onmouseover="this.style.cursor='pointer';" onclick="toggle( 'serverinfo_info_restore' );">
+        <form class="changedhtstatusform" name="changedhtstatusform" method="post" action="{/root/iurl}?mod=changedhtstatus">
+         <span id="changedhtselect">
+          <select class="whiteselect" name="dhtstatus" title="{/root/labels/changedhtstatus}" onchange="window.location='{/root/iurl}?mod=changedhtstatus&amp;dhtstatus='+this.value;">
+           <option value="0" title="{/root/labels/stopped}" selected="selected"><xsl:value-of select="/root/labels/stopped" /></option>
+           <option value="1" title="{/root/labels/start}"><xsl:value-of select="/root/labels/start" /></option>
+          </select>
+         </span>
+         <noscript>
+          <input class="submit" type="submit" name="{/root/labels/ok}" value="{/root/labels/ok}" title="{/root/labels/ok}" />
+         </noscript>
+         <span id="changedht" title="{/root/labels/clicktochange}">
+          <xsl:value-of select="dht_statistics_active/@value" />
+         </span>
+        </form>
+       </div>
+       <div class="clr"></div>
+      </li>
+     </xsl:when>
+     <xsl:otherwise>
+      <li class="line">
+       <div class="infoleft">
+        <xsl:value-of select="/root/labels/dht" />
+       </div>
+       <div class="inforight" onmouseover="this.style.cursor='pointer';" onclick="toggle( 'serverinfo_info_restore' );">
+        <form class="changedhtstatusform" name="changedhtstatusform" method="post" action="{/root/iurl}?mod=changedhtstatus">
+         <span id="changedhtselect">
+          <select class="whiteselect" name="dhtstatus" title="{/root/labels/changedhtstatus}" onchange="window.location='{/root/iurl}?mod=changedhtstatus&amp;dhtstatus='+this.value;">
+           <option value="0" title="{/root/labels/stop}"><xsl:value-of select="/root/labels/stop" /></option>
+           <option value="1" title="{/root/labels/started}" selected="selected"><xsl:value-of select="/root/labels/started" /></option>
+          </select>
+         </span>
+         <noscript>
+          <input class="submit" type="submit" name="{/root/labels/ok}" value="{/root/labels/ok}" title="{/root/labels/ok}" />
+         </noscript>
+         <span id="changedht" title="{/root/labels/clicktochange}">
+          <xsl:value-of select="dht_statistics_active/@value" />
+         </span>
+        </form>
+       </div>
+       <div class="clr"></div>
+      </li>
+      <li class="line">
+       <div class="infoleft">
+        <xsl:value-of select="/root/labels/dhtport" />
+       </div>
+       <div class="inforight">
+        <xsl:value-of select="dht_port" />
+       </div>
+       <div class="clr"></div>
+      </li>
+      <li class="line">
+       <div class="infoleft">
+        <xsl:value-of select="/root/labels/dhtcycle" />
+       </div>
+       <div class="inforight">
+        <xsl:value-of select="dht_statistics_cycle" />
+       </div>
+       <div class="clr"></div>
+      </li>
+      <li class="line">
+       <div class="infoleft">
+        <xsl:value-of select="/root/labels/dhtqueries" />
+       </div>
+       <div class="inforight">
+        <xsl:value-of select="dht_statistics_queries_received" />
+        <xsl:text> / </xsl:text>
+        <xsl:value-of select="dht_statistics_queries_sent" />
+       </div>
+       <div class="clr"></div>
+      </li>
+      <li class="line">
+       <div class="infoleft">
+        <xsl:value-of select="/root/labels/dhtreplies" />
+       </div>
+       <div class="inforight">
+        <xsl:value-of select="dht_statistics_replies_received" />
+       </div>
+       <div class="clr"></div>
+      </li>
+      <li class="line">
+       <div class="infoleft">
+        <xsl:value-of select="/root/labels/dhtbytes" />
+       </div>
+       <div class="inforight">
+        <xsl:value-of select="dht_statistics_bytes_read/@value" />
+        <xsl:text> </xsl:text>
+        <xsl:value-of select="dht_statistics_bytes_read/@suffix" />
+        <xsl:text> / </xsl:text>
+        <xsl:value-of select="dht_statistics_bytes_written/@value" />
+        <xsl:text> </xsl:text>
+        <xsl:value-of select="dht_statistics_bytes_written/@suffix" />
+       </div>
+       <div class="clr"></div>
+      </li>
+      <li class="line">
+       <div class="infoleft">
+        <xsl:value-of select="/root/labels/dhtnodes" />
+       </div>
+       <div class="inforight">
+        <xsl:value-of select="dht_statistics_nodes" />
+        <xsl:text> </xsl:text>
+        <xsl:value-of select="/root/labels/in" />
+        <xsl:text> </xsl:text>
+        <xsl:value-of select="dht_statistics_buckets" />
+        <xsl:text> </xsl:text>
+        <xsl:value-of select="/root/labels/buckets" />
+       </div>
+       <div class="clr"></div>
+      </li>
+      <li class="line">
+       <div class="infoleft">
+        <xsl:value-of select="/root/labels/dhtpeers" />
+       </div>
+       <div class="inforight">
+        <xsl:value-of select="dht_statistics_peers" />
+        <xsl:text> (</xsl:text>
+        <xsl:value-of select="/root/labels/highest" />
+        <xsl:text>: </xsl:text>
+        <xsl:value-of select="dht_statistics_peers_max" />
+        <xsl:text>)</xsl:text>
+       </div>
+       <div class="clr"></div>
+      </li>
+      <li class="line spacer">
+       <div class="infoleft">
+        <xsl:value-of select="/root/labels/dhttorrents" />
+       </div>
+       <div class="inforight">
+        <xsl:value-of select="dht_statistics_torrents" />
+       </div>
+       <div class="clr"></div>
+      </li>
+     </xsl:otherwise>
+    </xsl:choose>
+   </xsl:when>
+  </xsl:choose>
+  <li class="line">
+   <div class="infoleft">
+    <xsl:value-of select="/root/labels/maxuploads" />
+   </div>
+   <div class="inforight">
+    <xsl:value-of select="max_uploads/@value" />
+   </div>
+   <div class="clr"></div>
+  </li>
+  <li class="line">
+   <div class="infoleft">
+    <xsl:value-of select="/root/labels/minpeers" />
+   </div>
+   <div class="inforight">
+    <xsl:value-of select="min_peers/@value" />
+   </div>
+   <div class="clr"></div>
+  </li>
+  <li class="line">
+   <div class="infoleft">
+    <xsl:value-of select="/root/labels/maxpeers" />
+   </div>
+   <div class="inforight">
+    <xsl:value-of select="max_peers/@value" />
+   </div>
+   <div class="clr"></div>
+  </li>
+  <li class="line">
+   <div class="infoleft">
+    <xsl:value-of select="/root/labels/memoryusage" />
+   </div>
+   <div class="inforight">
+    <xsl:value-of select="memory_usage/@value" />
+    <xsl:text> </xsl:text>
+    <xsl:value-of select="memory_usage/@suffix" />
+   </div>
+   <div class="clr"></div>
+  </li>
+  <li class="line spacer">
+   <div class="infoleft">
+    <xsl:value-of select="/root/labels/maxmemoryusage" />
+   </div>
+   <div class="inforight">
+    <xsl:value-of select="max_memory_usage/@value" />
+    <xsl:text> </xsl:text>
+    <xsl:value-of select="max_memory_usage/@suffix" />
+   </div>
+   <div class="clr"></div>
+  </li>
+  <li class="line">
+   <div class="infoleft">
+    <xsl:value-of select="/root/labels/hashcheck" />
+   </div>
+   <div class="inforight">
+    <xsl:value-of select="check_hash/@value" />
+   </div>
+   <div class="clr"></div>
+  </li>
+  <li class="line">
+   <div class="infoleft">
+    <xsl:value-of select="/root/labels/safesync" />
+   </div>
+   <div class="inforight">
+    <xsl:value-of select="safe_sync/@value" />
+   </div>
+   <div class="clr"></div>
+  </li>
+  <li class="line">
+   <div class="infoleft">
+    <xsl:value-of select="/root/labels/sendbuffer" />
+   </div>
+   <div class="inforight">
+    <xsl:value-of select="receive_buffer_size/@value" />
+    <xsl:text> </xsl:text>
+    <xsl:value-of select="receive_buffer_size/@suffix" />
+   </div>
+   <div class="clr"></div>
+  </li>
+  <li class="line">
+   <div class="infoleft">
+    <xsl:value-of select="/root/labels/receivebuffer" />
+   </div>
+   <div class="inforight">
+    <xsl:value-of select="receive_buffer_size/@value" />
+    <xsl:text> </xsl:text>
+    <xsl:value-of select="receive_buffer_size/@suffix" />
+   </div>
+   <div class="clr"></div>
+  </li>
+ </xsl:template>
+
+ <xsl:template match="files_root">
+  <xsl:apply-templates select="directory" />
+  <xsl:apply-templates select="file" />
+ </xsl:template>
+
+ <xsl:template match="directory">
+  <li>
+   <div class="dopenlink">
+    <a title="{/root/labels/clicktoopenclose}" onmouseover="this.style.cursor='pointer';" onclick="if ( this.parentNode.parentNode.getElementsByTagName( 'ul' ).item( 0 ).style.display == '' ) {{ this.parentNode.parentNode.getElementsByTagName( 'ul' ).item( 0 ).style.display = 'none' }} else {{ this.parentNode.parentNode.getElementsByTagName( 'ul' ).item( 0 ).style.display = '' }};"><xsl:value-of select="@dirname" /></a>
+   </div>
+   <div class="dpriority">
+    <form class="changedirpriorityform" name="changedirpriorityform_{@id}" method="post" action="{/root/iurl}?mod=changedirpriority&amp;hash={/root/hash}&amp;dir={@dirpath}">
+     <select class="whiteselect" name="dirpriority" title="{/root/labels/selectdirpriority}" onchange="window.location='{/root/iurl}?mod=changedirpriority&amp;hash={/root/hash}&amp;dir={@dirpath}&amp;dirpriority='+this.value;">
+      <option value="-1" title="{/root/labels/selectone}" selected="selected"><xsl:value-of select="/root/labels/selectone" /></option>
+      <option value="0" title="{/root/labels/off}"><xsl:value-of select="/root/labels/off" /></option>
+      <option value="1" title="{/root/labels/normal}"><xsl:value-of select="/root/labels/normal" /></option>
+      <option value="2" title="{/root/labels/high}"><xsl:value-of select="/root/labels/high" /></option>
+     </select>
+     <noscript>
+      <input class="submit" type="submit" name="{/root/labels/ok}" value="{/root/labels/ok}" title="{/root/labels/ok}" />
+     </noscript>
+    </form>
+   </div>
+   <div class="clr"></div>
+   <xsl:choose>
+    <xsl:when test="/root/allow_hidedirtree = 'true'">
+     <ul class="directory">
+      <xsl:apply-templates select="directory" />
+      <xsl:apply-templates select="file" />
+     </ul>
+    </xsl:when>
+    <xsl:otherwise>
+     <ul class="directory nohide">
+      <xsl:apply-templates select="directory" />
+      <xsl:apply-templates select="file" />
+     </ul>
+    </xsl:otherwise>
+   </xsl:choose>
+  </li>
+ </xsl:template>
+
+ <xsl:template match="file">
+  <li onmouseover="this.style.background='#eeeeee';" onmouseout="this.style.background='';">
+   <div class="fname">
+    <span title="{/root/labels/lasttouched}: {f_last_touched}">
+     <xsl:value-of select="@filename" />
+    </span>
+   </div>
+   <div class="fpercentage">
+    <span title="{f_percentage/@value} {/root/labels/percentcompleted}">
+     <xsl:text>[</xsl:text>
+     <xsl:value-of select="f_percentage/@value" />
+     <xsl:text> %]</xsl:text>
+    </span>
+   </div>
+   <div class="fpriority">
+    <form class="changefilepriorityform" name="changefilepriorityform_{@id}" method="post" action="{/root/iurl}?mod=changefilepriority&amp;hash={/root/hash}&amp;id={@id}">
+     <select class="whiteselect" name="filepriority" title="{/root/labels/selectfilepriority}" onchange="window.location='{/root/iurl}?mod=changefilepriority&amp;hash={/root/hash}&amp;id={@id}&amp;filepriority='+this.value;">
+      <xsl:choose>
+       <xsl:when test="f_priority = 0">
+        <option value="0" title="{/root/labels/off}" selected="selected"><xsl:value-of select="/root/labels/off" /></option>
+        <option value="1" title="{/root/labels/normal}"><xsl:value-of select="/root/labels/normal" /></option>
+        <option value="2" title="{/root/labels/high}"><xsl:value-of select="/root/labels/high" /></option>
+       </xsl:when>
+       <xsl:when test="f_priority = 2">
+        <option value="0" title="{/root/labels/off}"><xsl:value-of select="/root/labels/off" /></option>
+        <option value="1" title="{/root/labels/normal}"><xsl:value-of select="/root/labels/normal" /></option>
+        <option value="2" title="{/root/labels/high}" selected="selected"><xsl:value-of select="/root/labels/high" /></option>
+       </xsl:when>
+       <xsl:otherwise>
+        <option value="0" title="{/root/labels/off}"><xsl:value-of select="/root/labels/off" /></option>
+        <option value="1" title="{/root/labels/normal}" selected="selected"><xsl:value-of select="/root/labels/normal" /></option>
+        <option value="2" title="{/root/labels/high}"><xsl:value-of select="/root/labels/high" /></option>
+       </xsl:otherwise>
+      </xsl:choose>
+     </select>
+     <noscript>
+      <input class="submit" type="submit" name="{/root/labels/ok}" value="{/root/labels/ok}" title="{/root/labels/ok}" />
+     </noscript>
+    </form>
+   </div>
+   <div class="fsize">
+    <span title="{/root/labels/filesize}">
+     <xsl:value-of select="f_size_bytes/@value" />
+     <xsl:text> </xsl:text>
+     <xsl:value-of select="f_size_bytes/@suffix" />
+    </span>
+   </div>
+   <div class="fchunks">
+    <span title="{/root/labels/chunks}">
+     <xsl:choose>
+      <xsl:when test="f_range_first != f_range_second">
+       <xsl:value-of select="f_range_first" />
+       <xsl:text> - </xsl:text>
+       <xsl:value-of select="f_range_second" />
+      </xsl:when>
+      <xsl:otherwise>
+       <xsl:value-of select="f_range_first" />
+      </xsl:otherwise>
+     </xsl:choose>
+    </span>
+   </div>
+   <xsl:choose>
+    <xsl:when test="f_percentage = 1 and /root/allow_download = 'true'">
+     <div class="fdownload">
+      <a href="?mod=getfile&amp;hash={/root/hash}&amp;id={@id}" title="{/root/labels/downloadfile}"><xsl:value-of select="/root/labels/download" /></a>
+     </div>
+    </xsl:when>
+   </xsl:choose>
+   <div class="clr"></div>
+  </li>
+ </xsl:template>
+
+ <xsl:template match="dlpath">
+  <li onmouseover="this.style.background='#eeeeee';" onmouseout="this.style.background='';">
+   <div class="tufpath">
+    <a href="?mod=addtorrent&amp;path={@path}">
+     <xsl:value-of select="@name" />
+    </a>
+   </div>
+   <div class="tufspace">
+    <xsl:value-of select="@freespace_value" />
+    <xsl:text> </xsl:text>
+    <xsl:value-of select="@freespace_suffix" />
+   </div>
+   <div class="clr"></div>
+  </li>
+ </xsl:template>
+
+ <xsl:template match="tracker">
+  <li>
+   <ul>
+    <li>
+     <div class="tgroup">
+      <span title="{/root/labels/trackergroup}">
+       <xsl:value-of select="t_group" />
+       <xsl:text>:</xsl:text>
+      </span>
+     </div>
+     <div class="turl">
+      <span title="{/root/labels/type}: {t_type/@value}">
+       <xsl:value-of select="t_url" />
+      </span>
+     </div>
+     <div class="clr"></div>
+    </li>
+    <li>
+     <div class="tfocus">
+      <xsl:choose>
+       <xsl:when test="root/tottents/torrent_trackers_root/torrent_trackers/d_tracker_focus = @id">
+        <xsl:value-of select="/root/labels/focus" />
+        <xsl:text>: </xsl:text>
+        <xsl:value-of select="/root/labels/yes" />
+       </xsl:when>
+       <xsl:otherwise>
+        <xsl:value-of select="/root/labels/focus" />
+        <xsl:text>: </xsl:text>
+        <xsl:value-of select="/root/labels/no" />
+       </xsl:otherwise>
+      </xsl:choose>
+     </div>
+     <div class="tenabled">
+      <form class="changetrackerenabledform" name="changetrackerenabledform_{@id}" method="post" action="{/root/iurl}?mod=changetrackerenabled&amp;hash={/root/hash}&amp;id={@id}">
+       <xsl:value-of select="/root/labels/enabled" />
+       <xsl:text>: </xsl:text>
+       <select class="whiteselect" name="trackerenabled" title="{/root/labels/selecttrackerenabled}" onchange="window.location='{/root/iurl}?mod=changetrackerenabled&amp;hash={/root/hash}&amp;id={@id}&amp;trackerenabled='+this.value;">
+        <xsl:choose>
+         <xsl:when test="t_enabled = 0">
+          <option value="1" title="{/root/labels/yes}"><xsl:value-of select="/root/labels/yes" /></option>
+          <option value="0" title="{/root/labels/no}" selected="selected"><xsl:value-of select="/root/labels/no" /></option>
+         </xsl:when>
+         <xsl:otherwise>
+          <option value="1" title="{/root/labels/yes}" selected="selected"><xsl:value-of select="/root/labels/yes" /></option>
+          <option value="0" title="{/root/labels/no}"><xsl:value-of select="/root/labels/no" /></option>
+         </xsl:otherwise>
+        </xsl:choose>
+       </select>
+       <noscript>
+        <input class="submit" type="submit" name="submit" value="{/root/labels/ok}" title="{/root/labels/ok}" />
+       </noscript>
+      </form>
+     </div>
+     <div class="topen">
+      <xsl:value-of select="/root/labels/opened" />
+      <xsl:text>: </xsl:text>
+      <xsl:choose>
+       <xsl:when test="t_open != 0">
+        <xsl:value-of select="/root/labels/yes" />
+       </xsl:when>
+       <xsl:otherwise>
+        <xsl:value-of select="/root/labels/no" />
+       </xsl:otherwise>
+      </xsl:choose>
+     </div>
+     <div class="tpeers">
+      <xsl:value-of select="/root/labels/seedersleechers" />
+      <xsl:text>: </xsl:text>
+      <xsl:value-of select="t_scrape_complete" />
+      <xsl:text> / </xsl:text>
+      <xsl:value-of select="t_scrape_incomplete" />
+     </div>
+     <div class="clr"></div>
+    </li>
+    <li>
+     <div class="tscrape">
+      <span title="{/root/labels/mininterval}: {t_min_interval/@value} - Normal interval: {t_normal_interval/@value}">
+       <xsl:value-of select="/root/labels/lasttimescraped" />
+       <xsl:text>: </xsl:text>
+       <xsl:value-of select="t_scrape_time_last/@value" />
+      </span>
+     </div>
+     <div class="clr"></div>
+    </li>
+   </ul>
+  </li>
+ </xsl:template>
+
+ <xsl:template match="peer">
+  <li>
+   <div class="paddress">
+    <xsl:choose>
+     <xsl:when test="p_country != ''">
+      <img src="flags/{p_country}.gif" alt="flag" title="{p_country/@value}" />
+     </xsl:when>
+    </xsl:choose>
+    <xsl:value-of select="p_address" />
+   </div>
+   <div class="pup">
+    <xsl:value-of select="p_up_rate/@value" />
+    <xsl:text> </xsl:text>
+    <xsl:value-of select="p_up_rate/@suffix" />
+   </div>
+   <div class="pdown">
+    <xsl:value-of select="p_down_rate/@value" />
+    <xsl:text> </xsl:text>
+    <xsl:value-of select="p_down_rate/@suffix" />
+   </div>
+   <div class="prate">
+    <xsl:value-of select="p_peer_rate/@value" />
+    <xsl:text> </xsl:text>
+    <xsl:value-of select="p_peer_rate/@suffix" />
+   </div>
+   <div class="pdone">
+    <xsl:value-of select="p_completed_percent" />
+    <xsl:text> %</xsl:text>
+   </div>
+   <div class="pincoming">
+    <xsl:value-of select="p_incoming/@value" />
+   </div>
+   <div class="pencrypted">
+    <xsl:value-of select="p_encrypted/@value" />
+   </div>
+   <div class="pclient">
+    <xsl:value-of select="p_client_version" />
+   </div>
+   <div class="clr"></div>
+  </li>
+ </xsl:template>
+
+</xsl:stylesheet>
Index: themes/default_ajax/layout.main.login.xsl
===================================================================
--- themes/default_ajax/layout.main.login.xsl	(revision 9479cdac9602f889de28ba22cd8b1823c8b13abe)
+++ themes/default_ajax/layout.main.login.xsl	(revision 9479cdac9602f889de28ba22cd8b1823c8b13abe)
@@ -0,0 +1,100 @@
+﻿<xsl:stylesheet version="1.1"
+                xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+                lang="en">
+ <xsl:output method="xml"
+             indent="no"
+             encoding="utf-8"
+             doctype-public="-//W3C//DTD XHTML 1.0 Transitional//EN"
+             doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd" />
+
+ <xsl:template match="root">
+  <html xml:lang="{language}" lang="{language}">
+   <head>
+    <meta http-equiv="content-type" content="text/html; charset=utf-8" />
+    <meta http-equiv="content-language" content="{language}" />
+    <meta http-equiv="cache-control" content="no-store, no-cache, must-revalidate, post-check=0, pre-check=0" />
+    <meta http-equiv="pragma" content="no-cache" />
+    <meta http-equiv="expires" content="thu, 1 jan 1970 00:00:00 gmt" />
+    <meta http-equiv="imagetoolbar" content="no" />  
+    <meta name="author" content="{labels/author}" />
+    <meta name="description" content="{labels/description}" />
+    <meta name="doc-type" content="web page" />
+    <meta name="rating" content="general" />
+    <meta name="robots" content="noindex, nofollow" />
+    <link rel="stylesheet" type="text/css" href="themes/default_ajax/inc/style.css" />
+    <title><xsl:value-of select="labels/title" /></title>
+   </head>
+   <body onload="document.getElementById( 'lfname' ).focus();">
+    <div id="top">
+    </div>
+    <div id="loginbox">
+     <xsl:apply-templates select="err" />
+     <xsl:apply-templates select="languages" />
+     <form id="login" method="post" action="{iurl}?mod=login">
+      <ul>
+       <li>
+        <div class="lftitle"><xsl:value-of select="labels/username" />:</div>
+        <div class="lffield">
+         <input id="lfname" type="text" title="{labels/username}" name="loginname" />
+        </div>
+       </li>
+       <li>
+        <div class="lftitle"><xsl:value-of select="labels/password" />:</div>
+        <div class="lffield">
+         <input id="lfpass" type="password" title="{labels/password}" name="loginpass" />
+        </div>
+       </li>
+       <li>
+        <div class="lftitle"><xsl:value-of select="labels/rememberme" />:</div>
+        <div class="lffield">
+         <input id="lfremember" type="checkbox" title="{labels/rememberme}" name="rememberme" />
+        </div>
+       </li>
+       <li class="formsend">
+        <input class="inputok" type="submit" title="{labels/login}" name="loginok" value="{labels/login}" />
+       </li>
+      </ul>
+     </form>
+    </div>
+    <div id="footer">
+     <span><a href="https://rtwi.jmk.hu/" title="{labels/homepage}"><xsl:value-of select="labels/homepage" /></a></span>
+    </div>
+   </body>
+  </html>
+ </xsl:template>
+
+ <xsl:template match="err">
+  <div id="err">
+   <span title="clicktohide" onmouseover="this.style.cursor='pointer';" onclick="document.getElementById( 'err' ).style.display='none';">
+    <xsl:value-of select="errmsg" />
+   </span>
+  </div>
+ </xsl:template>
+
+ <xsl:template match="languages">
+  <form id="changelanguageform" name="changelanguageform" method="post" action="{/root/iurl}?mod=changelanguage">
+   <xsl:text>[</xsl:text>
+   <xsl:value-of select="/root/labels/language" />
+   <xsl:text>: </xsl:text>
+   <select class="whiteselect" name="language" title="{/root/labels/selectlanguage}" onchange="window.location='{/root/iurl}?mod=changelanguage&amp;language='+this.value;">
+    <xsl:apply-templates select="language" />
+   </select>
+   <noscript>
+    <input class="submit" id="lsubmit" type="submit" name="lsubmit" title="{/root/labels/ok}" value="{/root/labels/ok}" />
+   </noscript>
+   <xsl:text>]</xsl:text>
+  </form>
+ </xsl:template>
+
+ <xsl:template match="language">
+  <xsl:choose>
+   <xsl:when test="/root/@language = @value">
+    <option value="{@value}" title="{@title}" selected="selected"><xsl:value-of select="@title" /></option>
+   </xsl:when>
+   <xsl:otherwise>
+    <option value="{@value}" title="{@title}"><xsl:value-of select="@title" /></option>
+   </xsl:otherwise>
+  </xsl:choose>
+ </xsl:template>
+
+</xsl:stylesheet>
