Changeset - 91fae60bf2b6
[Not reviewed]
Merge codereview
1 54 6
Marcin Kuzminski - 14 years ago 2012-06-05 21:22:23
marcin@python-works.com
merge with beta
58 files changed with 3550 insertions and 1220 deletions:
0 comments (0 inline, 0 general)
.hgignore
Show inline comments
 
syntax: glob
 
*.pyc
 
*.swp
 
*.sqlite
 
Paste*.egg
 

	
 
syntax: regexp
 
^rcextensions
 
^build
 
^docs/build/
 
^docs/_build/
 
^data$
 
^\.settings$
 
^\.project$
 
^\.pydevproject$
 
^\.coverage$
 
^rhodecode\.db$
 
^test\.db$
 
^RhodeCode\.egg-info$
 
^rc\.ini$
 
^fabfile.py
 
^\.rhodecode$
docs/api/api.rst
Show inline comments
 
@@ -14,96 +14,137 @@ API ACCESS FOR WEB VIEWS
 
++++++++++++++++++++++++
 

	
 
API access can also be turned on for each web view in RhodeCode that is 
 
decorated with `@LoginRequired` decorator. To enable API access simple change 
 
the standard login decorator to `@LoginRequired(api_access=True)`. 
 
After this change, a rhodecode view can be accessed without login by adding a 
 
GET parameter `?api_key=<api_key>` to url. By default this is only
 
enabled on RSS/ATOM feed views.
 

	
 

	
 
API ACCESS
 
++++++++++
 

	
 
All clients are required to send JSON-RPC spec JSON data::
 

	
 
    {   
 
        "id:"<id>",
 
        "api_key":"<api_key>",
 
        "method":"<method_name>",
 
        "args":{"<arg_key>":"<arg_val>"}
 
    }
 

	
 
Example call for autopulling remotes repos using curl::
 
    curl https://server.com/_admin/api -X POST -H 'content-type:text/plain' --data-binary '{"id":1,"api_key":"xe7cdb2v278e4evbdf5vs04v832v0efvcbcve4a3","method":"pull","args":{"repo":"CPython"}}'
 

	
 
Simply provide
 
 - *id* A value of any type, which is used to match the response with the request that it is replying to.
 
 - *api_key* for access and permission validation.
 
 - *method* is name of method to call
 
 - *args* is an key:value list of arguments to pass to method
 

	
 
.. note::
 

	
 
    api_key can be found in your user account page
 

	
 

	
 
RhodeCode API will return always a JSON-RPC response::
 

	
 
    {   
 
        "id":<id>, # matching id sent by request
 
        "result": "<result>"|null, # JSON formatted result, null if any errors
 
        "error": "null"|<error_message> # JSON formatted error (if any)
 
    }
 

	
 
All responses from API will be `HTTP/1.0 200 OK`, if there's an error while
 
calling api *error* key from response will contain failure description
 
and result will be null.
 

	
 

	
 
API CLIENT
 
++++++++++
 

	
 
From version 1.4 RhodeCode adds a binary script that allows to easily
 
communicate with API. After installing RhodeCode a `rhodecode-api` script
 
will be available.
 

	
 
To get started quickly simply run::
 

	
 
  rhodecode-api _create_config --apikey=<youapikey> --apihost=<rhodecode host>
 
 
 
This will create a file named .config in the directory you executed it storing
 
json config file with credentials. You can skip this step and always provide
 
both of the arguments to be able to communicate with server
 

	
 

	
 
after that simply run any api command for example get_repo::
 
 
 
 rhodecode-api get_repo
 

	
 
 calling {"api_key": "<apikey>", "id": 75, "args": {}, "method": "get_repo"} to http://127.0.0.1:5000
 
 rhodecode said:
 
 {'error': 'Missing non optional `repoid` arg in JSON DATA',
 
  'id': 75,
 
  'result': None}
 

	
 
Ups looks like we forgot to add an argument
 

	
 
Let's try again now giving the repoid as parameters::
 

	
 
    rhodecode-api get_repo repoid:rhodecode   
 
 
 
    calling {"api_key": "<apikey>", "id": 39, "args": {"repoid": "rhodecode"}, "method": "get_repo"} to http://127.0.0.1:5000
 
    rhodecode said:
 
    {'error': None,
 
     'id': 39,
 
     'result': <json data...>}
 

	
 

	
 

	
 
API METHODS
 
+++++++++++
 

	
 

	
 
pull
 
----
 

	
 
Pulls given repo from remote location. Can be used to automatically keep
 
remote repos up to date. This command can be executed only using api_key
 
belonging to user with admin rights
 

	
 
INPUT::
 

	
 
    id : <id_for_response>
 
    api_key : "<api_key>"
 
    method :  "pull"
 
    args :    {
 
                "repo_name" : "<reponame>"
 
              }
 

	
 
OUTPUT::
 

	
 
    result : "Pulled from <reponame>"
 
    error :  null
 

	
 

	
 
get_user
 
--------
 

	
 
Get's an user by username or user_id, Returns empty result if user is not found.
 
This command can be executed only using api_key belonging to user with admin 
 
rights.
 

	
 

	
 
INPUT::
 

	
 
    id : <id_for_response>
 
    api_key : "<api_key>"
 
    method :  "get_user"
 
    args :    { 
 
                "userid" : "<username or user_id>"
 
              }
 

	
 
OUTPUT::
 

	
 
    result: None if user does not exist or 
 
            {
 
                "id" :       "<id>",
 
@@ -142,130 +183,167 @@ INPUT::
 
    args :    { }
 

	
 
OUTPUT::
 

	
 
    result: [
 
              {
 
                "id" :       "<id>",
 
                "username" : "<username>",
 
                "firstname": "<firstname>",
 
                "lastname" : "<lastname>",
 
                "email" :    "<email>",
 
                "active" :   "<bool>",
 
                "admin" :    "<bool>",
 
                "ldap_dn" :  "<ldap_dn>",
 
                "last_login": "<last_login>",
 
              },
 
    	
 
            ]
 
    error:  null
 

	
 

	
 
create_user
 
-----------
 

	
 
Creates new user. This command can 
 
be executed only using api_key belonging to user with admin rights.
 

	
 

	
 
INPUT::
 

	
 
    id : <id_for_response>
 
    api_key : "<api_key>"
 
    method :  "create_user"
 
    args :    {
 
                "username" :  "<username>",
 
                "password" :  "<password>",
 
                "email" :     "<useremail>",
 
                "firstname" : "<firstname> = None",
 
                "lastname" :  "<lastname> = None",
 
                "active" :    "<bool> = True",
 
                "admin" :     "<bool> = False",
 
                "ldap_dn" :   "<ldap_dn> = None"
 
              }
 

	
 
OUTPUT::
 

	
 
    result: {
 
              "id" : "<new_user_id>",
 
              "msg" : "created new user <username>"
 
              "msg" : "created new user <username>",
 
              "user": {
 
                "id" :       "<id>",
 
                "username" : "<username>",
 
                "firstname": "<firstname>",
 
                "lastname" : "<lastname>",
 
                "email" :    "<email>",
 
                "active" :   "<bool>",
 
                "admin" :    "<bool>",
 
                "ldap_dn" :  "<ldap_dn>",
 
                "last_login": "<last_login>",
 
              },
 
            }
 
    error:  null
 

	
 

	
 
update_user
 
-----------
 

	
 
updates current one if such user exists. This command can 
 
updates given user if such user exists. This command can 
 
be executed only using api_key belonging to user with admin rights.
 

	
 

	
 
INPUT::
 

	
 
    id : <id_for_response>
 
    api_key : "<api_key>"
 
    method :  "update_user"
 
    args :    {
 
                "userid" : "<user_id or username>",
 
                "username" :  "<username>",
 
                "password" :  "<password>",
 
                "email" :     "<useremail>",
 
                "firstname" : "<firstname>",
 
                "lastname" :  "<lastname>",
 
                "active" :    "<bool>",
 
                "admin" :     "<bool>",
 
                "ldap_dn" :   "<ldap_dn>"
 
              }
 

	
 
OUTPUT::
 

	
 
    result: {
 
              "id" : "<edited_user_id>",
 
              "msg" : "updated user <username>"
 
              "msg" : "updated user ID:<userid> <username>"
 
            }
 
    error:  null
 

	
 

	
 
delete_user
 
-----------
 

	
 

	
 
deletes givenuser if such user exists. This command can 
 
be executed only using api_key belonging to user with admin rights.
 

	
 

	
 
INPUT::
 

	
 
    id : <id_for_response>
 
    api_key : "<api_key>"
 
    method :  "delete_user"
 
    args :    {
 
                "userid" : "<user_id or username>",
 
              }
 

	
 
OUTPUT::
 

	
 
    result: {
 
              "id" : "<edited_user_id>",
 
              "msg" : "deleted user ID:<userid> <username>"
 
            }
 
    error:  null
 

	
 

	
 
get_users_group
 
---------------
 

	
 
Gets an existing users group. This command can be executed only using api_key
 
belonging to user with admin rights.
 

	
 

	
 
INPUT::
 

	
 
    id : <id_for_response>
 
    api_key : "<api_key>"
 
    method :  "get_users_group"
 
    args :    {
 
                "group_name" : "<name>"
 
              }
 

	
 
OUTPUT::
 

	
 
    result : None if group not exist
 
             {
 
               "id" :         "<id>",
 
               "group_name" : "<groupname>",
 
               "active":      "<bool>",
 
               "members" :  [
 
                              { "id" :       "<userid>",
 
                                "username" : "<username>",
 
                                "firstname": "<firstname>",
 
                                "lastname" : "<lastname>",
 
                                "email" :    "<email>",
 
                                "active" :   "<bool>",
 
                                "admin" :    "<bool>",
 
                                "ldap" :     "<ldap_dn>"
 
                              },
 
 
                            ]
 
             }
 
    error : null
 

	
 

	
 
get_users_groups
 
----------------
 

	
 
Lists all existing users groups. This command can be executed only using 
 
api_key belonging to user with admin rights.
 
@@ -489,96 +567,105 @@ INPUT::
 
    args:     {
 
                "repo_name" : "<reponame>",
 
                "revision"  : "<revision>",
 
                "root_path" : "<root_path>",
 
                "ret_type"  : "<ret_type>" = 'all'
 
              }
 

	
 
OUTPUT::
 

	
 
    result: [
 
              {
 
                "name" :        "<name>"
 
                "type" :        "<type>",
 
              },
 
 
            ]
 
    error:  null
 

	
 

	
 
create_repo
 
-----------
 

	
 
Creates a repository. This command can be executed only using api_key
 
belonging to user with admin rights.
 
If repository name contains "/", all needed repository groups will be created.
 
For example "foo/bar/baz" will create groups "foo", "bar" (with "foo" as parent),
 
and create "baz" repository with "bar" as group.
 

	
 

	
 
INPUT::
 

	
 
    id : <id_for_response>
 
    api_key : "<api_key>"
 
    method :  "create_repo"
 
    args:     {
 
                "repo_name" :   "<reponame>",
 
                "owner_name" :  "<ownername>",
 
                "description" : "<description> = ''",
 
                "repo_type" :   "<type> = 'hg'",
 
                "private" :     "<bool> = False",
 
                "clone_uri" :   "<clone_uri> = None",
 
              }
 

	
 
OUTPUT::
 

	
 
    result: {
 
              "id": "<newrepoid>",
 
              "msg": "Created new repository <reponame>",
 
              "repo": {
 
                "id" :          "<id>",
 
                "repo_name" :   "<reponame>"
 
                "type" :        "<type>",
 
                "description" : "<description>",
 
                "clone_uri" :   "<clone_uri>",
 
                "private": :    "<bool>",
 
                "created_on" :  "<datetimecreated>",
 
              },
 
            }
 
    error:  null
 

	
 

	
 
delete_repo
 
-----------
 

	
 
Deletes a repository. This command can be executed only using api_key
 
belonging to user with admin rights.
 

	
 

	
 
INPUT::
 

	
 
    id : <id_for_response>
 
    api_key : "<api_key>"
 
    method :  "delete_repo"
 
    args:     {
 
                "repo_name" :   "<reponame>",
 
              }
 

	
 
OUTPUT::
 

	
 
    result: {
 
              "msg": "Deleted repository <reponame>",
 
            }
 
    error:  null
 

	
 

	
 
grant_user_permission
 
---------------------
 

	
 
Grant permission for user on given repository, or update existing one
 
if found. This command can be executed only using api_key belonging to user 
 
with admin rights.
 

	
 

	
 
INPUT::
 

	
 
    id : <id_for_response>
 
    api_key : "<api_key>"
 
    method :  "grant_user_permission"
 
    args:     {
 
                "repo_name" :  "<reponame>",
 
                "username" :   "<username>",
 
                "perm" :       "(repository.(none|read|write|admin))",
 
              }
 

	
 
OUTPUT::
docs/changelog.rst
Show inline comments
 
.. _changelog:
 

	
 
=========
 
Changelog
 
=========
 

	
 
1.4.0 (**2012-XX-XX**)
 
----------------------
 

	
 
:status: in-progress
 
:branch: beta
 

	
 
news
 
++++
 
 
 
- new codereview system
 
- email map, allowing users to have multiple email addresses mapped into
 
  their accounts
 
- changed setup-app into setup-rhodecode and added default options to it.
 
- new git repos are created as bare now by default
 
- #464 added links to groups in permission box
 
- #465 mentions autocomplete inside comments boxes
 
- #469 added --update-only option to whoosh to re-index only given list
 
  of repos in index 
 
- rhodecode-api CLI client
 
- new git http protocol replaced buggy dulwich implementation.
 
  Now based on pygrack & gitweb
 

	
 
fixes
 
+++++
 

	
 
- improved translations
 
- fixes issue #455 Creating an archive generates an exception on Windows
 
- fixes #448 Download ZIP archive keeps file in /tmp open and results 
 
  in out of disk space
 
- fixes issue #454 Search results under Windows include proceeding
 
  backslash
 
- fixed issue #450. Rhodecode no longer will crash when bad revision is
 
  present in journal data.
 
- fix for issue #417, git execution was broken on windows for certain
 
  commands.
 
- fixed #413. Don't disable .git directory for bare repos on deleting
 
- fixed issue #459. Changed the way of obtaining logger in reindex task.
 

	
 
1.3.6 (**2012-05-17**)
 
----------------------
 

	
 
news
 
++++
 

	
 
- chinese traditional translation
 
- changed setup-app into setup-rhodecode and added arguments for auto-setup 
 
  mode that doesn't need user interaction 
 

	
 
fixes
 
+++++
 

	
 
- fixed no scm found warning
 
- fixed __future__ import error on rcextensions
 
- made simplejson required lib for speedup on JSON encoding
 
- fixes #449 bad regex could get more than revisions from parsing history
 
- don't clear DB session when CELERY_EAGER is turned ON
 

	
 
1.3.5 (**2012-05-10**)
 
----------------------
 

	
 
news
 
++++
 

	
 
- use ext_json for json module
 
- unified annotation view with file source view
 
- notification improvements, better inbox + css
 
- #419 don't strip passwords for login forms, make rhodecode 
 
  more compatible with LDAP servers
 
- Added HTTP_X_FORWARDED_FOR as another method of extracting 
requires.txt
Show inline comments
 
Pylons==1.0.0
 
Beaker==1.6.3
 
WebHelpers==1.3
 
formencode==1.2.4
 
SQLAlchemy==0.7.6
 
Mako==0.7.0
 
pygments>=1.4
 
whoosh>=2.4.0,<2.5
 
celery>=2.2.5,<2.3
 
babel
 
python-dateutil>=1.5.0,<2.0.0
 
dulwich>=0.8.5,<0.9.0
 
webob==1.0.8
 
markdown==2.1.1
 
docutils==0.8.1
 
simplejson==2.5.2
 
py-bcrypt
 
mercurial>=2.2.1,<2.3
 
\ No newline at end of file
 
mercurial>=2.2.2,<2.3
 
\ No newline at end of file
rhodecode/__init__.py
Show inline comments
 
@@ -27,72 +27,72 @@ import sys
 
import platform
 

	
 
VERSION = (1, 4, 0, 'b')
 

	
 
try:
 
    from rhodecode.lib import get_current_revision
 
    _rev = get_current_revision()
 
    if _rev and len(VERSION) > 3:
 
        VERSION += ('dev%s' % _rev[0],)
 
except ImportError:
 
    pass
 

	
 
__version__ = ('.'.join((str(each) for each in VERSION[:3])) +
 
               '.'.join(VERSION[3:]))
 
__dbversion__ = 6  # defines current db version for migrations
 
__platform__ = platform.system()
 
__license__ = 'GPLv3'
 
__py_version__ = sys.version_info
 

	
 
PLATFORM_WIN = ('Windows')
 
PLATFORM_OTHERS = ('Linux', 'Darwin', 'FreeBSD', 'OpenBSD', 'SunOS')
 

	
 
is_windows = __platform__ in PLATFORM_WIN
 
is_unix = __platform__ in PLATFORM_OTHERS
 

	
 
requirements = [
 
    "Pylons==1.0.0",
 
    "Beaker==1.6.3",
 
    "WebHelpers==1.3",
 
    "formencode==1.2.4",
 
    "SQLAlchemy==0.7.6",
 
    "Mako==0.7.0",
 
    "pygments>=1.4",
 
    "whoosh>=2.4.0,<2.5",
 
    "celery>=2.2.5,<2.3",
 
    "babel",
 
    "python-dateutil>=1.5.0,<2.0.0",
 
    "dulwich>=0.8.5,<0.9.0",
 
    "webob==1.0.8",
 
    "markdown==2.1.1",
 
    "docutils==0.8.1",
 
    "simplejson==2.5.2",
 
]
 

	
 
if __py_version__ < (2, 6):
 
    requirements.append("pysqlite")
 

	
 
if is_windows:
 
    requirements.append("mercurial>=2.2.1,<2.3")
 
    requirements.append("mercurial>=2.2.2,<2.3")
 
else:
 
    requirements.append("py-bcrypt")
 
    requirements.append("mercurial>=2.2.1,<2.3")
 
    requirements.append("mercurial>=2.2.2,<2.3")
 

	
 

	
 
def get_version():
 
    """Returns shorter version (digit parts only) as string."""
 

	
 
    return '.'.join((str(each) for each in VERSION[:3]))
 

	
 
BACKENDS = {
 
    'hg': 'Mercurial repository',
 
    'git': 'Git repository',
 
}
 

	
 
CELERY_ON = False
 
CELERY_EAGER = False
 

	
 
# link to config for pylons
 
CONFIG = {}
 

	
 
# Linked module for extensions
 
EXTENSIONS = {}
rhodecode/bin/__init__.py
Show inline comments
 
new file 100644
rhodecode/bin/rhodecode_api.py
Show inline comments
 
new file 100755
 
# -*- coding: utf-8 -*-
 
"""
 
    rhodecode.bin.backup_manager
 
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 

	
 
    Api CLI client for RhodeCode
 

	
 
    :created_on: Jun 3, 2012
 
    :author: marcink
 
    :copyright: (C) 2010-2012 Marcin Kuzminski <marcin@python-works.com>
 
    :license: GPLv3, see COPYING for more details.
 
"""
 
# This program is free software: you can redistribute it and/or modify
 
# it under the terms of the GNU General Public License as published by
 
# the Free Software Foundation, either version 3 of the License, or
 
# (at your option) any later version.
 
#
 
# This program is distributed in the hope that it will be useful,
 
# but WITHOUT ANY WARRANTY; without even the implied warranty of
 
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 
# GNU General Public License for more details.
 
#
 
# You should have received a copy of the GNU General Public License
 
# along with this program.  If not, see <http://www.gnu.org/licenses/>.
 

	
 
from __future__ import with_statement
 
import os
 
import sys
 
import random
 
import urllib2
 
import pprint
 
import argparse
 

	
 
try:
 
    from rhodecode.lib.ext_json import json
 
except ImportError:
 
    try:
 
        import simplejson as json
 
    except ImportError:
 
        import json
 

	
 

	
 
CONFIG_NAME = '.rhodecode'
 
FORMAT_PRETTY = 'pretty'
 
FORMAT_JSON = 'json'
 

	
 

	
 
class RcConf(object):
 
    """
 
    RhodeCode config for API
 

	
 
    conf = RcConf()
 
    conf['key']
 

	
 
    """
 

	
 
    def __init__(self, autoload=True, autocreate=False, config=None):
 
        self._conf_name = CONFIG_NAME
 
        self._conf = {}
 
        if autocreate:
 
            self.make_config(config)
 
        if autoload:
 
            self._conf = self.load_config()
 

	
 
    def __getitem__(self, key):
 
        return self._conf[key]
 

	
 
    def __nonzero__(self):
 
        if self._conf:
 
            return True
 
        return False
 

	
 
    def __eq__(self):
 
        return self._conf.__eq__()
 

	
 
    def __repr__(self):
 
        return 'RcConf<%s>' % self._conf.__repr__()
 

	
 
    def make_config(self, config):
 
        """
 
        Saves given config as a JSON dump in the _conf_name location
 

	
 
        :param config:
 
        :type config:
 
        """
 
        with open(self._conf_name, 'wb') as f:
 
            json.dump(config, f, indent=4)
 
            sys.stdout.write('Updated conf\n')
 

	
 
    def update_config(self, new_config):
 
        """
 
        Reads the JSON config updates it's values with new_config and
 
        saves it back as JSON dump
 

	
 
        :param new_config:
 
        """
 
        config = {}
 
        try:
 
            with open(self._conf_name, 'rb') as conf:
 
                config = json.load(conf)
 
        except IOError, e:
 
            sys.stderr.write(str(e) + '\n')
 

	
 
        config.update(new_config)
 
        self.make_config(config)
 

	
 
    def load_config(self):
 
        """
 
        Loads config from file and returns loaded JSON object
 
        """
 
        try:
 
            with open(self._conf_name, 'rb') as conf:
 
                return  json.load(conf)
 
        except IOError, e:
 
            #sys.stderr.write(str(e) + '\n')
 
            pass
 

	
 

	
 
def api_call(apikey, apihost, format, method=None, **kw):
 
    """
 
    Api_call wrapper for RhodeCode
 

	
 
    :param apikey:
 
    :param apihost:
 
    :param format: formatting, pretty means prints and pprint of json
 
     json returns unparsed json
 
    :param method:
 
    """
 
    def _build_data(random_id):
 
        """
 
        Builds API data with given random ID
 

	
 
        :param random_id:
 
        :type random_id:
 
        """
 
        return {
 
            "id": random_id,
 
            "api_key": apikey,
 
            "method": method,
 
            "args": kw
 
        }
 

	
 
    if not method:
 
        raise Exception('please specify method name !')
 
    id_ = random.randrange(1, 200)
 
    req = urllib2.Request('%s/_admin/api' % apihost,
 
                      data=json.dumps(_build_data(id_)),
 
                      headers={'content-type': 'text/plain'})
 
    if format == FORMAT_PRETTY:
 
        sys.stdout.write('calling %s to %s \n' % (req.get_data(), apihost))
 
    ret = urllib2.urlopen(req)
 
    raw_json = ret.read()
 
    json_data = json.loads(raw_json)
 
    id_ret = json_data['id']
 
    _formatted_json = pprint.pformat(json_data)
 
    if id_ret == id_:
 
        if format == FORMAT_JSON:
 
            sys.stdout.write(str(raw_json))
 
        else:
 
            sys.stdout.write('rhodecode returned:\n%s\n' % (_formatted_json))
 

	
 
    else:
 
        raise Exception('something went wrong. '
 
                        'ID mismatch got %s, expected %s | %s' % (
 
                                            id_ret, id_, _formatted_json))
 

	
 

	
 
def argparser(argv):
 
    usage = ("rhodecode_api [-h] [--format=FORMAT] [--apikey=APIKEY] [--apihost=APIHOST] "
 
             "_create_config or METHOD <key:val> <key2:val> ...")
 

	
 
    parser = argparse.ArgumentParser(description='RhodeCode API cli',
 
                                     usage=usage)
 

	
 
    ## config
 
    group = parser.add_argument_group('config')
 
    group.add_argument('--apikey', help='api access key')
 
    group.add_argument('--apihost', help='api host')
 

	
 
    group = parser.add_argument_group('API')
 
    group.add_argument('method', metavar='METHOD', type=str,
 
            help='API method name to call followed by key:value attributes',
 
    )
 
    group.add_argument('--format', dest='format', type=str,
 
            help='output format default: `pretty` can '
 
                 'be also `%s`' % FORMAT_JSON,
 
            default=FORMAT_PRETTY
 
    )
 
    args, other = parser.parse_known_args()
 
    return parser, args, other
 

	
 

	
 
def main(argv=None):
 
    """
 
    Main execution function for cli
 

	
 
    :param argv:
 
    :type argv:
 
    """
 
    if argv is None:
 
        argv = sys.argv
 

	
 
    conf = None
 
    parser, args, other = argparser(argv)
 

	
 
    api_credentials_given = (args.apikey and args.apihost)
 
    if args.method == '_create_config':
 
        if not api_credentials_given:
 
            raise parser.error('_create_config requires --apikey and --apihost')
 
        conf = RcConf(autocreate=True, config={'apikey': args.apikey,
 
                                               'apihost': args.apihost})
 
        sys.stdout.write('Create new config in %s\n' % CONFIG_NAME)
 

	
 
    if not conf:
 
        conf = RcConf(autoload=True)
 
        if not conf:
 
            if not api_credentials_given:
 
                parser.error('Could not find config file and missing '
 
                             '--apikey or --apihost in params')
 

	
 
    apikey = args.apikey or conf['apikey']
 
    host = args.apihost or conf['apihost']
 
    method = args.method
 
    margs = dict(map(lambda s: s.split(':', 1), other))
 

	
 
    api_call(apikey, host, args.format, method, **margs)
 
    return 0
 

	
 
if __name__ == '__main__':
 
    sys.exit(main(sys.argv))
rhodecode/bin/rhodecode_backup.py
Show inline comments
 
modified file chmod 100644 => 100755
 
file renamed from rhodecode/lib/backup_manager.py to rhodecode/bin/rhodecode_backup.py
 
# -*- coding: utf-8 -*-
 
"""
 
    rhodecode.lib.backup_manager
 
    rhodecode.bin.backup_manager
 
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 

	
 
    Mercurial repositories backup manager, it allows to backups all
 
    Repositories backup manager, it allows to backups all
 
    repositories and send it to backup server using RSA key via ssh.
 

	
 
    :created_on: Feb 28, 2010
 
    :author: marcink
 
    :copyright: (C) 2010-2012 Marcin Kuzminski <marcin@python-works.com>
 
    :license: GPLv3, see COPYING for more details.
 
"""
 
# This program is free software: you can redistribute it and/or modify
 
# it under the terms of the GNU General Public License as published by
 
# the Free Software Foundation, either version 3 of the License, or
 
# (at your option) any later version.
 
#
 
# This program is distributed in the hope that it will be useful,
 
# but WITHOUT ANY WARRANTY; without even the implied warranty of
 
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 
# GNU General Public License for more details.
 
#
 
# You should have received a copy of the GNU General Public License
 
# along with this program.  If not, see <http://www.gnu.org/licenses/>.
 

	
 
import os
 
import sys
 

	
 
import logging
 
import tarfile
 
import datetime
 
import subprocess
 

	
 
logging.basicConfig(level=logging.DEBUG,
 
                    format="%(asctime)s %(levelname)-5.5s %(message)s")
 

	
 

	
 
class BackupManager(object):
 
    def __init__(self, repos_location, rsa_key, backup_server):
 
        today = datetime.datetime.now().weekday() + 1
 
        self.backup_file_name = "mercurial_repos.%s.tar.gz" % today
 
        self.backup_file_name = "rhodecode_repos.%s.tar.gz" % today
 

	
 
        self.id_rsa_path = self.get_id_rsa(rsa_key)
 
        self.repos_path = self.get_repos_path(repos_location)
 
        self.backup_server = backup_server
 

	
 
        self.backup_file_path = '/tmp'
 

	
 
        logging.info('starting backup for %s', self.repos_path)
 
        logging.info('backup target %s', self.backup_file_path)
 

	
 
    def get_id_rsa(self, rsa_key):
 
        if not os.path.isfile(rsa_key):
 
            logging.error('Could not load id_rsa key file in %s', rsa_key)
 
            sys.exit()
 
        return rsa_key
 

	
 
    def get_repos_path(self, path):
 
        if not os.path.isdir(path):
 
            logging.error('Wrong location for repositories in %s', path)
 
            sys.exit()
 
        return path
 

	
 
    def backup_repos(self):
 
        bckp_file = os.path.join(self.backup_file_path, self.backup_file_name)
 
        tar = tarfile.open(bckp_file, "w:gz")
 

	
 
        for dir_name in os.listdir(self.repos_path):
 
            logging.info('backing up %s', dir_name)
 
            tar.add(os.path.join(self.repos_path, dir_name), dir_name)
 
        tar.close()
 
        logging.info('finished backup of mercurial repositories')
 

	
 
    def transfer_files(self):
 
        params = {
 
                  'id_rsa_key': self.id_rsa_path,
 
                  'backup_file': os.path.join(self.backup_file_path,
 
                                             self.backup_file_name),
 
                  'backup_server': self.backup_server
 
                  }
 
        cmd = ['scp', '-l', '40000', '-i', '%(id_rsa_key)s' % params,
 
               '%(backup_file)s' % params,
 
               '%(backup_server)s' % params]
 

	
 
        subprocess.call(cmd)
 
        logging.info('Transfered file %s to %s', self.backup_file_name, cmd[4])
 

	
 
    def rm_file(self):
 
        logging.info('Removing file %s', self.backup_file_name)
rhodecode/config/routing.py
Show inline comments
 
@@ -172,97 +172,97 @@ def make_map(config):
 
                                                 function=check_int))
 
        # ajax delete repos group perm user
 
        m.connect('delete_repos_group_user_perm',
 
                  "/delete_repos_group_user_perm/{group_name:.*}",
 
             action="delete_repos_group_user_perm",
 
             conditions=dict(method=["DELETE"], function=check_group))
 

	
 
        # ajax delete repos group perm users_group
 
        m.connect('delete_repos_group_users_group_perm',
 
                  "/delete_repos_group_users_group_perm/{group_name:.*}",
 
                  action="delete_repos_group_users_group_perm",
 
                  conditions=dict(method=["DELETE"], function=check_group))
 

	
 
    #ADMIN USER REST ROUTES
 
    with rmap.submapper(path_prefix=ADMIN_PREFIX,
 
                        controller='admin/users') as m:
 
        m.connect("users", "/users",
 
                  action="create", conditions=dict(method=["POST"]))
 
        m.connect("users", "/users",
 
                  action="index", conditions=dict(method=["GET"]))
 
        m.connect("formatted_users", "/users.{format}",
 
                  action="index", conditions=dict(method=["GET"]))
 
        m.connect("new_user", "/users/new",
 
                  action="new", conditions=dict(method=["GET"]))
 
        m.connect("formatted_new_user", "/users/new.{format}",
 
                  action="new", conditions=dict(method=["GET"]))
 
        m.connect("update_user", "/users/{id}",
 
                  action="update", conditions=dict(method=["PUT"]))
 
        m.connect("delete_user", "/users/{id}",
 
                  action="delete", conditions=dict(method=["DELETE"]))
 
        m.connect("edit_user", "/users/{id}/edit",
 
                  action="edit", conditions=dict(method=["GET"]))
 
        m.connect("formatted_edit_user",
 
                  "/users/{id}.{format}/edit",
 
                  action="edit", conditions=dict(method=["GET"]))
 
        m.connect("user", "/users/{id}",
 
                  action="show", conditions=dict(method=["GET"]))
 
        m.connect("formatted_user", "/users/{id}.{format}",
 
                  action="show", conditions=dict(method=["GET"]))
 

	
 
        #EXTRAS USER ROUTES
 
        m.connect("user_perm", "/users_perm/{id}",
 
                  action="update_perm", conditions=dict(method=["PUT"]))
 
        m.connect("user_emails", "/users_emails/{id}",
 
                  action="add_email", conditions=dict(method=["PUT"]))
 
        m.connect("user_emails_delete", "/users_emails/{id}",
 
                  action="delete_email", conditions=dict(method=["DELETE"]))
 

	
 
    #ADMIN USERS REST ROUTES
 
    #ADMIN USERS GROUPS REST ROUTES
 
    with rmap.submapper(path_prefix=ADMIN_PREFIX,
 
                        controller='admin/users_groups') as m:
 
        m.connect("users_groups", "/users_groups",
 
                  action="create", conditions=dict(method=["POST"]))
 
        m.connect("users_groups", "/users_groups",
 
                  action="index", conditions=dict(method=["GET"]))
 
        m.connect("formatted_users_groups", "/users_groups.{format}",
 
                  action="index", conditions=dict(method=["GET"]))
 
        m.connect("new_users_group", "/users_groups/new",
 
                  action="new", conditions=dict(method=["GET"]))
 
        m.connect("formatted_new_users_group", "/users_groups/new.{format}",
 
                  action="new", conditions=dict(method=["GET"]))
 
        m.connect("update_users_group", "/users_groups/{id}",
 
                  action="update", conditions=dict(method=["PUT"]))
 
        m.connect("delete_users_group", "/users_groups/{id}",
 
                  action="delete", conditions=dict(method=["DELETE"]))
 
        m.connect("edit_users_group", "/users_groups/{id}/edit",
 
                  action="edit", conditions=dict(method=["GET"]))
 
        m.connect("formatted_edit_users_group",
 
                  "/users_groups/{id}.{format}/edit",
 
                  action="edit", conditions=dict(method=["GET"]))
 
        m.connect("users_group", "/users_groups/{id}",
 
                  action="show", conditions=dict(method=["GET"]))
 
        m.connect("formatted_users_group", "/users_groups/{id}.{format}",
 
                  action="show", conditions=dict(method=["GET"]))
 

	
 
        #EXTRAS USER ROUTES
 
        m.connect("users_group_perm", "/users_groups_perm/{id}",
 
                  action="update_perm", conditions=dict(method=["PUT"]))
 

	
 
    #ADMIN GROUP REST ROUTES
 
    rmap.resource('group', 'groups',
 
                  controller='admin/groups', path_prefix=ADMIN_PREFIX)
 

	
 
    #ADMIN PERMISSIONS REST ROUTES
 
    rmap.resource('permission', 'permissions',
 
                  controller='admin/permissions', path_prefix=ADMIN_PREFIX)
 

	
 
    ##ADMIN LDAP SETTINGS
 
    rmap.connect('ldap_settings', '%s/ldap' % ADMIN_PREFIX,
 
                 controller='admin/ldap_settings', action='ldap_settings',
 
                 conditions=dict(method=["POST"]))
 

	
 
    rmap.connect('ldap_home', '%s/ldap' % ADMIN_PREFIX,
 
                 controller='admin/ldap_settings')
 

	
 
    #ADMIN SETTINGS REST ROUTES
 
    with rmap.submapper(path_prefix=ADMIN_PREFIX,
 
@@ -301,100 +301,107 @@ def make_map(config):
 
    with rmap.submapper(path_prefix=ADMIN_PREFIX,
 
                        controller='admin/notifications') as m:
 
        m.connect("notifications", "/notifications",
 
                  action="create", conditions=dict(method=["POST"]))
 
        m.connect("notifications", "/notifications",
 
                  action="index", conditions=dict(method=["GET"]))
 
        m.connect("notifications_mark_all_read", "/notifications/mark_all_read",
 
                  action="mark_all_read", conditions=dict(method=["GET"]))
 
        m.connect("formatted_notifications", "/notifications.{format}",
 
                  action="index", conditions=dict(method=["GET"]))
 
        m.connect("new_notification", "/notifications/new",
 
                  action="new", conditions=dict(method=["GET"]))
 
        m.connect("formatted_new_notification", "/notifications/new.{format}",
 
                  action="new", conditions=dict(method=["GET"]))
 
        m.connect("/notification/{notification_id}",
 
                  action="update", conditions=dict(method=["PUT"]))
 
        m.connect("/notification/{notification_id}",
 
                  action="delete", conditions=dict(method=["DELETE"]))
 
        m.connect("edit_notification", "/notification/{notification_id}/edit",
 
                  action="edit", conditions=dict(method=["GET"]))
 
        m.connect("formatted_edit_notification",
 
                  "/notification/{notification_id}.{format}/edit",
 
                  action="edit", conditions=dict(method=["GET"]))
 
        m.connect("notification", "/notification/{notification_id}",
 
                  action="show", conditions=dict(method=["GET"]))
 
        m.connect("formatted_notification", "/notifications/{notification_id}.{format}",
 
                  action="show", conditions=dict(method=["GET"]))
 

	
 
    #ADMIN MAIN PAGES
 
    with rmap.submapper(path_prefix=ADMIN_PREFIX,
 
                        controller='admin/admin') as m:
 
        m.connect('admin_home', '', action='index')
 
        m.connect('admin_add_repo', '/add_repo/{new_repo:[a-z0-9\. _-]*}',
 
                  action='add_repo')
 

	
 
    #==========================================================================
 
    # API V2
 
    #==========================================================================
 
    with rmap.submapper(path_prefix=ADMIN_PREFIX,
 
                        controller='api/api') as m:
 
        m.connect('api', '/api')
 

	
 
    #USER JOURNAL
 
    rmap.connect('journal', '%s/journal' % ADMIN_PREFIX, controller='journal')
 

	
 
    rmap.connect('public_journal', '%s/public_journal' % ADMIN_PREFIX,
 
                 controller='journal', action="public_journal")
 

	
 
    rmap.connect('public_journal_rss', '%s/public_journal_rss' % ADMIN_PREFIX,
 
    rmap.connect('public_journal_rss', '%s/public_journal/rss' % ADMIN_PREFIX,
 
                 controller='journal', action="public_journal_rss")
 

	
 
    rmap.connect('public_journal_rss_old', '%s/public_journal_rss' % ADMIN_PREFIX,
 
                 controller='journal', action="public_journal_rss")
 

	
 
    rmap.connect('public_journal_atom',
 
                 '%s/public_journal/atom' % ADMIN_PREFIX, controller='journal',
 
                 action="public_journal_atom")
 

	
 
    rmap.connect('public_journal_atom_old',
 
                 '%s/public_journal_atom' % ADMIN_PREFIX, controller='journal',
 
                 action="public_journal_atom")
 

	
 
    rmap.connect('toggle_following', '%s/toggle_following' % ADMIN_PREFIX,
 
                 controller='journal', action='toggle_following',
 
                 conditions=dict(method=["POST"]))
 

	
 
    #SEARCH
 
    rmap.connect('search', '%s/search' % ADMIN_PREFIX, controller='search',)
 
    rmap.connect('search_repo', '%s/search/{search_repo:.*}' % ADMIN_PREFIX,
 
                  controller='search')
 

	
 
    #LOGIN/LOGOUT/REGISTER/SIGN IN
 
    rmap.connect('login_home', '%s/login' % ADMIN_PREFIX, controller='login')
 
    rmap.connect('logout_home', '%s/logout' % ADMIN_PREFIX, controller='login',
 
                 action='logout')
 

	
 
    rmap.connect('register', '%s/register' % ADMIN_PREFIX, controller='login',
 
                 action='register')
 

	
 
    rmap.connect('reset_password', '%s/password_reset' % ADMIN_PREFIX,
 
                 controller='login', action='password_reset')
 

	
 
    rmap.connect('reset_password_confirmation',
 
                 '%s/password_reset_confirmation' % ADMIN_PREFIX,
 
                 controller='login', action='password_reset_confirmation')
 

	
 
    #FEEDS
 
    rmap.connect('rss_feed_home', '/{repo_name:.*}/feed/rss',
 
                controller='feed', action='rss',
 
                conditions=dict(function=check_repo))
 

	
 
    rmap.connect('atom_feed_home', '/{repo_name:.*}/feed/atom',
 
                controller='feed', action='atom',
 
                conditions=dict(function=check_repo))
 

	
 
    #==========================================================================
 
    # REPOSITORY ROUTES
 
    #==========================================================================
 
    rmap.connect('summary_home', '/{repo_name:.*}',
 
                controller='summary',
 
                conditions=dict(function=check_repo))
 

	
 
    rmap.connect('repos_group_home', '/{group_name:.*}',
 
                controller='admin/repos_groups', action="show_by_name",
 
                conditions=dict(function=check_group))
 

	
 
    rmap.connect('changeset_home', '/{repo_name:.*}/changeset/{revision}',
rhodecode/controllers/admin/repos.py
Show inline comments
 
@@ -106,199 +106,201 @@ class ReposController(BaseController):
 
        c.repo_last_rev = repo.count() if repo.revisions else 0
 

	
 
        if last_rev == 0 or c.repo_last_rev == 0:
 
            c.stats_percentage = 0
 
        else:
 
            c.stats_percentage = '%.2f' % ((float((last_rev)) /
 
                                            c.repo_last_rev) * 100)
 

	
 
        defaults = RepoModel()._get_defaults(repo_name)
 

	
 
        c.repos_list = [('', _('--REMOVE FORK--'))]
 
        c.repos_list += [(x.repo_id, x.repo_name) for x in
 
                   Repository.query().order_by(Repository.repo_name).all()]
 
        return defaults
 

	
 
    @HasPermissionAllDecorator('hg.admin')
 
    def index(self, format='html'):
 
        """GET /repos: All items in the collection"""
 
        # url('repos')
 

	
 
        c.repos_list = ScmModel().get_repos(Repository.query()
 
                                            .order_by(Repository.repo_name)
 
                                            .all(), sort_key='name_sort')
 
        return render('admin/repos/repos.html')
 

	
 
    @HasPermissionAnyDecorator('hg.admin', 'hg.create.repository')
 
    def create(self):
 
        """
 
        POST /repos: Create a new item"""
 
        # url('repos')
 

	
 
        self.__load_defaults()
 
        form_result = {}
 
        try:
 
            form_result = RepoForm(repo_groups=c.repo_groups_choices)()\
 
                            .to_python(dict(request.POST))
 
            RepoModel().create(form_result, self.rhodecode_user)
 
            if form_result['clone_uri']:
 
                h.flash(_('created repository %s from %s') \
 
                    % (form_result['repo_name'], form_result['clone_uri']),
 
                    category='success')
 
            else:
 
                h.flash(_('created repository %s') % form_result['repo_name'],
 
                    category='success')
 

	
 
            if request.POST.get('user_created'):
 
                # created by regular non admin user
 
                action_logger(self.rhodecode_user, 'user_created_repo',
 
                              form_result['repo_name_full'], '', self.sa)
 
                              form_result['repo_name_full'], self.ip_addr,
 
                              self.sa)
 
            else:
 
                action_logger(self.rhodecode_user, 'admin_created_repo',
 
                              form_result['repo_name_full'], '', self.sa)
 
                              form_result['repo_name_full'], self.ip_addr,
 
                              self.sa)
 
            Session.commit()
 
        except formencode.Invalid, errors:
 

	
 
            c.new_repo = errors.value['repo_name']
 

	
 
            if request.POST.get('user_created'):
 
                r = render('admin/repos/repo_add_create_repository.html')
 
            else:
 
                r = render('admin/repos/repo_add.html')
 

	
 
            return htmlfill.render(
 
                r,
 
                defaults=errors.value,
 
                errors=errors.error_dict or {},
 
                prefix_error=False,
 
                encoding="UTF-8")
 

	
 
        except Exception:
 
            log.error(traceback.format_exc())
 
            msg = _('error occurred during creation of repository %s') \
 
                    % form_result.get('repo_name')
 
            h.flash(msg, category='error')
 
        if request.POST.get('user_created'):
 
            return redirect(url('home'))
 
        return redirect(url('repos'))
 

	
 
    @HasPermissionAllDecorator('hg.admin')
 
    def new(self, format='html'):
 
        """GET /repos/new: Form to create a new item"""
 
        new_repo = request.GET.get('repo', '')
 
        c.new_repo = repo_name_slug(new_repo)
 
        self.__load_defaults()
 
        return render('admin/repos/repo_add.html')
 

	
 
    @HasPermissionAllDecorator('hg.admin')
 
    def update(self, repo_name):
 
        """
 
        PUT /repos/repo_name: Update an existing item"""
 
        # Forms posted to this method should contain a hidden field:
 
        #    <input type="hidden" name="_method" value="PUT" />
 
        # Or using helpers:
 
        #    h.form(url('repo', repo_name=ID),
 
        #           method='put')
 
        # url('repo', repo_name=ID)
 
        self.__load_defaults()
 
        repo_model = RepoModel()
 
        changed_name = repo_name
 
        _form = RepoForm(edit=True, old_data={'repo_name': repo_name},
 
                         repo_groups=c.repo_groups_choices)()
 
        try:
 
            form_result = _form.to_python(dict(request.POST))
 
            repo = repo_model.update(repo_name, form_result)
 
            invalidate_cache('get_repo_cached_%s' % repo_name)
 
            h.flash(_('Repository %s updated successfully' % repo_name),
 
                    category='success')
 
            changed_name = repo.repo_name
 
            action_logger(self.rhodecode_user, 'admin_updated_repo',
 
                              changed_name, '', self.sa)
 
                              changed_name, self.ip_addr, self.sa)
 
            Session.commit()
 
        except formencode.Invalid, errors:
 
            defaults = self.__load_data(repo_name)
 
            defaults.update(errors.value)
 
            return htmlfill.render(
 
                render('admin/repos/repo_edit.html'),
 
                defaults=defaults,
 
                errors=errors.error_dict or {},
 
                prefix_error=False,
 
                encoding="UTF-8")
 

	
 
        except Exception:
 
            log.error(traceback.format_exc())
 
            h.flash(_('error occurred during update of repository %s') \
 
                    % repo_name, category='error')
 
        return redirect(url('edit_repo', repo_name=changed_name))
 

	
 
    @HasPermissionAllDecorator('hg.admin')
 
    def delete(self, repo_name):
 
        """
 
        DELETE /repos/repo_name: Delete an existing item"""
 
        # Forms posted to this method should contain a hidden field:
 
        #    <input type="hidden" name="_method" value="DELETE" />
 
        # Or using helpers:
 
        #    h.form(url('repo', repo_name=ID),
 
        #           method='delete')
 
        # url('repo', repo_name=ID)
 

	
 
        repo_model = RepoModel()
 
        repo = repo_model.get_by_repo_name(repo_name)
 
        if not repo:
 
            h.flash(_('%s repository is not mapped to db perhaps'
 
                      ' it was moved or renamed  from the filesystem'
 
                      ' please run the application again'
 
                      ' in order to rescan repositories') % repo_name,
 
                      category='error')
 

	
 
            return redirect(url('repos'))
 
        try:
 
            action_logger(self.rhodecode_user, 'admin_deleted_repo',
 
                              repo_name, '', self.sa)
 
                              repo_name, self.ip_addr, self.sa)
 
            repo_model.delete(repo)
 
            invalidate_cache('get_repo_cached_%s' % repo_name)
 
            h.flash(_('deleted repository %s') % repo_name, category='success')
 
            Session.commit()
 
        except IntegrityError, e:
 
            if e.message.find('repositories_fork_id_fkey') != -1:
 
                log.error(traceback.format_exc())
 
                h.flash(_('Cannot delete %s it still contains attached '
 
                          'forks') % repo_name,
 
                        category='warning')
 
            else:
 
                log.error(traceback.format_exc())
 
                h.flash(_('An error occurred during '
 
                          'deletion of %s') % repo_name,
 
                        category='error')
 

	
 
        except Exception, e:
 
            log.error(traceback.format_exc())
 
            h.flash(_('An error occurred during deletion of %s') % repo_name,
 
                    category='error')
 

	
 
        return redirect(url('repos'))
 

	
 
    @HasRepoPermissionAllDecorator('repository.admin')
 
    def delete_perm_user(self, repo_name):
 
        """
 
        DELETE an existing repository permission user
 

	
 
        :param repo_name:
 
        """
 
        try:
 
            RepoModel().revoke_user_permission(repo=repo_name,
 
                                               user=request.POST['user_id'])
 
            Session.commit()
 
        except Exception:
 
            log.error(traceback.format_exc())
 
            h.flash(_('An error occurred during deletion of repository user'),
 
                    category='error')
 
            raise HTTPInternalServerError()
 

	
 
    @HasRepoPermissionAllDecorator('repository.admin')
 
    def delete_perm_users_group(self, repo_name):
 
        """
 
        DELETE an existing repository permission users group
 

	
 
        :param repo_name:
 
        """
 

	
rhodecode/controllers/admin/users.py
Show inline comments
 
# -*- coding: utf-8 -*-
 
"""
 
    rhodecode.controllers.admin.users
 
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 

	
 
    Users crud controller for pylons
 

	
 
    :created_on: Apr 4, 2010
 
    :author: marcink
 
    :copyright: (C) 2010-2012 Marcin Kuzminski <marcin@python-works.com>
 
    :license: GPLv3, see COPYING for more details.
 
"""
 
# This program is free software: you can redistribute it and/or modify
 
# it under the terms of the GNU General Public License as published by
 
# the Free Software Foundation, either version 3 of the License, or
 
# (at your option) any later version.
 
#
 
# This program is distributed in the hope that it will be useful,
 
# but WITHOUT ANY WARRANTY; without even the implied warranty of
 
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 
# GNU General Public License for more details.
 
#
 
# You should have received a copy of the GNU General Public License
 
# along with this program.  If not, see <http://www.gnu.org/licenses/>.
 

	
 
import logging
 
import traceback
 
import formencode
 

	
 
from formencode import htmlfill
 
from pylons import request, session, tmpl_context as c, url, config
 
from pylons.controllers.util import redirect
 
from pylons.i18n.translation import _
 

	
 
from rhodecode.lib.exceptions import DefaultUserException, \
 
    UserOwnsReposException
 
from rhodecode.lib import helpers as h
 
from rhodecode.lib.auth import LoginRequired, HasPermissionAllDecorator
 
from rhodecode.lib.base import BaseController, render
 

	
 
from rhodecode.model.db import User, Permission, UserEmailMap
 
from rhodecode.model.forms import UserForm
 
from rhodecode.model.user import UserModel
 
from rhodecode.model.meta import Session
 
from rhodecode.lib.utils import action_logger
 

	
 
log = logging.getLogger(__name__)
 

	
 

	
 
class UsersController(BaseController):
 
    """REST Controller styled on the Atom Publishing Protocol"""
 
    # To properly map this controller, ensure your config/routing.py
 
    # file has a resource setup:
 
    #     map.resource('user', 'users')
 

	
 
    @LoginRequired()
 
    @HasPermissionAllDecorator('hg.admin')
 
    def __before__(self):
 
        c.admin_user = session.get('admin_user')
 
        c.admin_username = session.get('admin_username')
 
        super(UsersController, self).__before__()
 
        c.available_permissions = config['available_permissions']
 

	
 
    def index(self, format='html'):
 
        """GET /users: All items in the collection"""
 
        # url('users')
 

	
 
        c.users_list = self.sa.query(User).all()
 
        return render('admin/users/users.html')
 

	
 
    def create(self):
 
        """POST /users: Create a new item"""
 
        # url('users')
 

	
 
        user_model = UserModel()
 
        user_form = UserForm()()
 
        try:
 
            form_result = user_form.to_python(dict(request.POST))
 
            user_model.create(form_result)
 
            h.flash(_('created user %s') % form_result['username'],
 
            usr = form_result['username']
 
            action_logger(self.rhodecode_user, 'admin_created_user:%s' % usr,
 
                          None, self.ip_addr, self.sa)
 
            h.flash(_('created user %s') % usr,
 
                    category='success')
 
            Session.commit()
 
            #action_logger(self.rhodecode_user, 'new_user', '', '', self.sa)
 
        except formencode.Invalid, errors:
 
            return htmlfill.render(
 
                render('admin/users/user_add.html'),
 
                defaults=errors.value,
 
                errors=errors.error_dict or {},
 
                prefix_error=False,
 
                encoding="UTF-8")
 
        except Exception:
 
            log.error(traceback.format_exc())
 
            h.flash(_('error occurred during creation of user %s') \
 
                    % request.POST.get('username'), category='error')
 
        return redirect(url('users'))
 

	
 
    def new(self, format='html'):
 
        """GET /users/new: Form to create a new item"""
 
        # url('new_user')
 
        return render('admin/users/user_add.html')
 

	
 
    def update(self, id):
 
        """PUT /users/id: Update an existing item"""
 
        # Forms posted to this method should contain a hidden field:
 
        #    <input type="hidden" name="_method" value="PUT" />
 
        # Or using helpers:
 
        #    h.form(url('update_user', id=ID),
 
        #           method='put')
 
        # url('user', id=ID)
 
        user_model = UserModel()
 
        c.user = user_model.get(id)
 

	
 
        _form = UserForm(edit=True, old_data={'user_id': id,
 
                                              'email': c.user.email})()
 
        form_result = {}
 
        try:
 
            form_result = _form.to_python(dict(request.POST))
 
            user_model.update(id, form_result)
 
            usr = form_result['username']
 
            action_logger(self.rhodecode_user, 'admin_updated_user:%s' % usr,
 
                          None, self.ip_addr, self.sa)
 
            h.flash(_('User updated successfully'), category='success')
 
            Session.commit()
 
        except formencode.Invalid, errors:
 
            e = errors.error_dict or {}
 
            perm = Permission.get_by_key('hg.create.repository')
 
            e.update({'create_repo_perm': user_model.has_perm(id, perm)})
 
            return htmlfill.render(
 
                render('admin/users/user_edit.html'),
 
                defaults=errors.value,
 
                errors=e,
 
                prefix_error=False,
 
                encoding="UTF-8")
 
        except Exception:
 
            log.error(traceback.format_exc())
 
            h.flash(_('error occurred during update of user %s') \
 
                    % form_result.get('username'), category='error')
 

	
 
        return redirect(url('users'))
 

	
 
    def delete(self, id):
 
        """DELETE /users/id: Delete an existing item"""
 
        # Forms posted to this method should contain a hidden field:
 
        #    <input type="hidden" name="_method" value="DELETE" />
 
        # Or using helpers:
 
        #    h.form(url('delete_user', id=ID),
 
        #           method='delete')
 
        # url('user', id=ID)
 
        user_model = UserModel()
 
        try:
 
            user_model.delete(id)
 
            Session.commit()
 
            h.flash(_('successfully deleted user'), category='success')
 
        except (UserOwnsReposException, DefaultUserException), e:
 
            h.flash(e, category='warning')
 
        except Exception:
 
            log.error(traceback.format_exc())
 
            h.flash(_('An error occurred during deletion of user'),
 
                    category='error')
 
        return redirect(url('users'))
 

	
 
    def show(self, id, format='html'):
 
        """GET /users/id: Show a specific item"""
 
        # url('user', id=ID)
 

	
 
    def edit(self, id, format='html'):
 
        """GET /users/id/edit: Form to edit an existing item"""
 
        # url('edit_user', id=ID)
 
        c.user = User.get(id)
rhodecode/controllers/admin/users_groups.py
Show inline comments
 
# -*- coding: utf-8 -*-
 
"""
 
    rhodecode.controllers.admin.users_groups
 
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 

	
 
    Users Groups crud controller for pylons
 

	
 
    :created_on: Jan 25, 2011
 
    :author: marcink
 
    :copyright: (C) 2010-2012 Marcin Kuzminski <marcin@python-works.com>
 
    :license: GPLv3, see COPYING for more details.
 
"""
 
# This program is free software: you can redistribute it and/or modify
 
# it under the terms of the GNU General Public License as published by
 
# the Free Software Foundation, either version 3 of the License, or
 
# (at your option) any later version.
 
#
 
# This program is distributed in the hope that it will be useful,
 
# but WITHOUT ANY WARRANTY; without even the implied warranty of
 
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 
# GNU General Public License for more details.
 
#
 
# You should have received a copy of the GNU General Public License
 
# along with this program.  If not, see <http://www.gnu.org/licenses/>.
 

	
 
import logging
 
import traceback
 
import formencode
 

	
 
from formencode import htmlfill
 
from pylons import request, session, tmpl_context as c, url, config
 
from pylons.controllers.util import abort, redirect
 
from pylons.i18n.translation import _
 

	
 
from rhodecode.lib import helpers as h
 
from rhodecode.lib.exceptions import UsersGroupsAssignedException
 
from rhodecode.lib.utils2 import safe_unicode
 
from rhodecode.lib.auth import LoginRequired, HasPermissionAllDecorator
 
from rhodecode.lib.base import BaseController, render
 

	
 
from rhodecode.model.users_group import UsersGroupModel
 

	
 
from rhodecode.model.db import User, UsersGroup, Permission, UsersGroupToPerm
 
from rhodecode.model.forms import UsersGroupForm
 
from rhodecode.model.meta import Session
 
from rhodecode.lib.utils import action_logger
 

	
 
log = logging.getLogger(__name__)
 

	
 

	
 
class UsersGroupsController(BaseController):
 
    """REST Controller styled on the Atom Publishing Protocol"""
 
    # To properly map this controller, ensure your config/routing.py
 
    # file has a resource setup:
 
    #     map.resource('users_group', 'users_groups')
 

	
 
    @LoginRequired()
 
    @HasPermissionAllDecorator('hg.admin')
 
    def __before__(self):
 
        c.admin_user = session.get('admin_user')
 
        c.admin_username = session.get('admin_username')
 
        super(UsersGroupsController, self).__before__()
 
        c.available_permissions = config['available_permissions']
 

	
 
    def index(self, format='html'):
 
        """GET /users_groups: All items in the collection"""
 
        # url('users_groups')
 
        c.users_groups_list = self.sa.query(UsersGroup).all()
 
        return render('admin/users_groups/users_groups.html')
 

	
 
    def create(self):
 
        """POST /users_groups: Create a new item"""
 
        # url('users_groups')
 

	
 
        users_group_form = UsersGroupForm()()
 
        try:
 
            form_result = users_group_form.to_python(dict(request.POST))
 
            UsersGroupModel().create(name=form_result['users_group_name'],
 
                                     active=form_result['users_group_active'])
 
            h.flash(_('created users group %s') \
 
                    % form_result['users_group_name'], category='success')
 
            #action_logger(self.rhodecode_user, 'new_user', '', '', self.sa)
 
            gr = form_result['users_group_name']
 
            action_logger(self.rhodecode_user,
 
                          'admin_created_users_group:%s' % gr,
 
                          None, self.ip_addr, self.sa)
 
            h.flash(_('created users group %s') % gr, category='success')
 
            Session.commit()
 
        except formencode.Invalid, errors:
 
            return htmlfill.render(
 
                render('admin/users_groups/users_group_add.html'),
 
                defaults=errors.value,
 
                errors=errors.error_dict or {},
 
                prefix_error=False,
 
                encoding="UTF-8")
 
        except Exception:
 
            log.error(traceback.format_exc())
 
            h.flash(_('error occurred during creation of users group %s') \
 
                    % request.POST.get('users_group_name'), category='error')
 

	
 
        return redirect(url('users_groups'))
 

	
 
    def new(self, format='html'):
 
        """GET /users_groups/new: Form to create a new item"""
 
        # url('new_users_group')
 
        return render('admin/users_groups/users_group_add.html')
 

	
 
    def update(self, id):
 
        """PUT /users_groups/id: Update an existing item"""
 
        # Forms posted to this method should contain a hidden field:
 
        #    <input type="hidden" name="_method" value="PUT" />
 
        # Or using helpers:
 
        #    h.form(url('users_group', id=ID),
 
        #           method='put')
 
        # url('users_group', id=ID)
 

	
 
        c.users_group = UsersGroup.get(id)
 
        c.group_members_obj = [x.user for x in c.users_group.members]
 
        c.group_members = [(x.user_id, x.username) for x in
 
                           c.group_members_obj]
 

	
 
        c.available_members = [(x.user_id, x.username) for x in
 
                               self.sa.query(User).all()]
 

	
 
        available_members = [safe_unicode(x[0]) for x in c.available_members]
 

	
 
        users_group_form = UsersGroupForm(edit=True,
 
                                          old_data=c.users_group.get_dict(),
 
                                          available_members=available_members)()
 

	
 
        try:
 
            form_result = users_group_form.to_python(request.POST)
 
            UsersGroupModel().update(c.users_group, form_result)
 
            h.flash(_('updated users group %s') \
 
                        % form_result['users_group_name'],
 
                    category='success')
 
            #action_logger(self.rhodecode_user, 'new_user', '', '', self.sa)
 
            gr = form_result['users_group_name']
 
            action_logger(self.rhodecode_user,
 
                          'admin_updated_users_group:%s' % gr,
 
                          None, self.ip_addr, self.sa)
 
            h.flash(_('updated users group %s') % gr, category='success')
 
            Session.commit()
 
        except formencode.Invalid, errors:
 
            e = errors.error_dict or {}
 

	
 
            perm = Permission.get_by_key('hg.create.repository')
 
            e.update({'create_repo_perm':
 
                         UsersGroupModel().has_perm(id, perm)})
 

	
 
            return htmlfill.render(
 
                render('admin/users_groups/users_group_edit.html'),
 
                defaults=errors.value,
 
                errors=e,
 
                prefix_error=False,
 
                encoding="UTF-8")
 
        except Exception:
 
            log.error(traceback.format_exc())
 
            h.flash(_('error occurred during update of users group %s') \
 
                    % request.POST.get('users_group_name'), category='error')
 

	
 
        return redirect(url('users_groups'))
 

	
 
    def delete(self, id):
 
        """DELETE /users_groups/id: Delete an existing item"""
 
        # Forms posted to this method should contain a hidden field:
 
        #    <input type="hidden" name="_method" value="DELETE" />
 
        # Or using helpers:
 
        #    h.form(url('users_group', id=ID),
 
        #           method='delete')
 
        # url('users_group', id=ID)
 

	
 
        try:
 
            UsersGroupModel().delete(id)
 
            Session.commit()
 
            h.flash(_('successfully deleted users group'), category='success')
 
        except UsersGroupsAssignedException, e:
 
            h.flash(e, category='error')
 
        except Exception:
 
            log.error(traceback.format_exc())
 
            h.flash(_('An error occurred during deletion of users group'),
 
                    category='error')
 
        return redirect(url('users_groups'))
 

	
 
    def show(self, id, format='html'):
 
        """GET /users_groups/id: Show a specific item"""
 
        # url('users_group', id=ID)
 

	
 
    def edit(self, id, format='html'):
 
        """GET /users_groups/id/edit: Form to edit an existing item"""
rhodecode/controllers/api/__init__.py
Show inline comments
 
@@ -12,218 +12,231 @@
 
"""
 
# This program is free software; you can redistribute it and/or
 
# modify it under the terms of the GNU General Public License
 
# as published by the Free Software Foundation; version 2
 
# of the License or (at your opinion) any later version of the license.
 
#
 
# This program is distributed in the hope that it will be useful,
 
# but WITHOUT ANY WARRANTY; without even the implied warranty of
 
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 
# GNU General Public License for more details.
 
#
 
# You should have received a copy of the GNU General Public License
 
# along with this program; if not, write to the Free Software
 
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
 
# MA  02110-1301, USA.
 

	
 
import inspect
 
import logging
 
import types
 
import urllib
 
import traceback
 

	
 
from rhodecode.lib.compat import izip_longest, json
 

	
 
from paste.response import replace_header
 

	
 
from pylons.controllers import WSGIController
 

	
 

	
 
from webob.exc import HTTPNotFound, HTTPForbidden, HTTPInternalServerError, \
 
HTTPBadRequest, HTTPError
 

	
 
from rhodecode.model.db import User
 
from rhodecode.lib.auth import AuthUser
 

	
 
log = logging.getLogger('JSONRPC')
 

	
 

	
 
class JSONRPCError(BaseException):
 

	
 
    def __init__(self, message):
 
        self.message = message
 
        super(JSONRPCError, self).__init__()
 

	
 
    def __str__(self):
 
        return str(self.message)
 

	
 

	
 
def jsonrpc_error(message, code=None):
 
def jsonrpc_error(message, retid=None, code=None):
 
    """
 
    Generate a Response object with a JSON-RPC error body
 
    """
 
    from pylons.controllers.util import Response
 
    resp = Response(body=json.dumps(dict(id=None, result=None, error=message)),
 
    return Response(
 
            body=json.dumps(dict(id=retid, result=None, error=message)),
 
                    status=code,
 
                    content_type='application/json')
 
    return resp
 
            content_type='application/json'
 
    )
 

	
 

	
 
class JSONRPCController(WSGIController):
 
    """
 
     A WSGI-speaking JSON-RPC controller class
 

	
 
     See the specification:
 
     <http://json-rpc.org/wiki/specification>`.
 

	
 
     Valid controller return values should be json-serializable objects.
 

	
 
     Sub-classes should catch their exceptions and raise JSONRPCError
 
     if they want to pass meaningful errors to the client.
 

	
 
     """
 

	
 
    def _get_method_args(self):
 
        """
 
        Return `self._rpc_args` to dispatched controller method
 
        chosen by __call__
 
        """
 
        return self._rpc_args
 

	
 
    def __call__(self, environ, start_response):
 
        """
 
        Parse the request body as JSON, look up the method on the
 
        controller and if it exists, dispatch to it.
 
        """
 
        self._req_id = None
 
        if 'CONTENT_LENGTH' not in environ:
 
            log.debug("No Content-Length")
 
            return jsonrpc_error(message="No Content-Length in request")
 
            return jsonrpc_error(retid=self._req_id,
 
                                 message="No Content-Length in request")
 
        else:
 
            length = environ['CONTENT_LENGTH'] or 0
 
            length = int(environ['CONTENT_LENGTH'])
 
            log.debug('Content-Length: %s' % length)
 

	
 
        if length == 0:
 
            log.debug("Content-Length is 0")
 
            return jsonrpc_error(message="Content-Length is 0")
 
            return jsonrpc_error(retid=self._req_id,
 
                                 message="Content-Length is 0")
 

	
 
        raw_body = environ['wsgi.input'].read(length)
 

	
 
        try:
 
            json_body = json.loads(urllib.unquote_plus(raw_body))
 
        except ValueError, e:
 
            # catch JSON errors Here
 
            return jsonrpc_error(message="JSON parse error ERR:%s RAW:%r" \
 
            return jsonrpc_error(retid=self._req_id,
 
                                 message="JSON parse error ERR:%s RAW:%r" \
 
                                 % (e, urllib.unquote_plus(raw_body)))
 

	
 
        # check AUTH based on API KEY
 
        try:
 
            self._req_api_key = json_body['api_key']
 
            self._req_id = json_body['id']
 
            self._req_method = json_body['method']
 
            self._request_params = json_body['args']
 
            log.debug(
 
                'method: %s, params: %s' % (self._req_method,
 
                                            self._request_params)
 
            )
 
        except KeyError, e:
 
            return jsonrpc_error(message='Incorrect JSON query missing %s' % e)
 
            return jsonrpc_error(retid=self._req_id,
 
                                 message='Incorrect JSON query missing %s' % e)
 

	
 
        # check if we can find this session using api_key
 
        try:
 
            u = User.get_by_api_key(self._req_api_key)
 
            if u is None:
 
                return jsonrpc_error(message='Invalid API KEY')
 
                return jsonrpc_error(retid=self._req_id,
 
                                     message='Invalid API KEY')
 
            auth_u = AuthUser(u.user_id, self._req_api_key)
 
        except Exception, e:
 
            return jsonrpc_error(message='Invalid API KEY')
 
            return jsonrpc_error(retid=self._req_id,
 
                                 message='Invalid API KEY')
 

	
 
        self._error = None
 
        try:
 
            self._func = self._find_method()
 
        except AttributeError, e:
 
            return jsonrpc_error(message=str(e))
 
            return jsonrpc_error(retid=self._req_id,
 
                                 message=str(e))
 

	
 
        # now that we have a method, add self._req_params to
 
        # self.kargs and dispatch control to WGIController
 
        argspec = inspect.getargspec(self._func)
 
        arglist = argspec[0][1:]
 
        defaults = map(type, argspec[3] or [])
 
        default_empty = types.NotImplementedType
 

	
 
        # kw arguments required by this method
 
        func_kwargs = dict(izip_longest(reversed(arglist), reversed(defaults),
 
                                        fillvalue=default_empty))
 

	
 
        # this is little trick to inject logged in user for
 
        # perms decorators to work they expect the controller class to have
 
        # rhodecode_user attribute set
 
        self.rhodecode_user = auth_u
 

	
 
        # This attribute will need to be first param of a method that uses
 
        # api_key, which is translated to instance of user at that name
 
        USER_SESSION_ATTR = 'apiuser'
 

	
 
        if USER_SESSION_ATTR not in arglist:
 
            return jsonrpc_error(message='This method [%s] does not support '
 
                                 'authentication (missing %s param)' %
 
                                 (self._func.__name__, USER_SESSION_ATTR))
 
            return jsonrpc_error(
 
                retid=self._req_id,
 
                message='This method [%s] does not support '
 
                         'authentication (missing %s param)' % (
 
                                    self._func.__name__, USER_SESSION_ATTR)
 
            )
 

	
 
        # get our arglist and check if we provided them as args
 
        for arg, default in func_kwargs.iteritems():
 
            if arg == USER_SESSION_ATTR:
 
                # USER_SESSION_ATTR is something translated from api key and
 
                # this is checked before so we don't need validate it
 
                continue
 

	
 
            # skip the required param check if it's default value is
 
            # NotImplementedType (default_empty)
 
            if (default == default_empty and arg not in self._request_params):
 
                return jsonrpc_error(
 
                    retid=self._req_id,
 
                    message=(
 
                        'Missing non optional `%s` arg in JSON DATA' % arg
 
                    )
 
                )
 

	
 
        self._rpc_args = {USER_SESSION_ATTR: u}
 
        self._rpc_args.update(self._request_params)
 

	
 
        self._rpc_args['action'] = self._req_method
 
        self._rpc_args['environ'] = environ
 
        self._rpc_args['start_response'] = start_response
 

	
 
        status = []
 
        headers = []
 
        exc_info = []
 

	
 
        def change_content(new_status, new_headers, new_exc_info=None):
 
            status.append(new_status)
 
            headers.extend(new_headers)
 
            exc_info.append(new_exc_info)
 

	
 
        output = WSGIController.__call__(self, environ, change_content)
 
        output = list(output)
 
        headers.append(('Content-Length', str(len(output[0]))))
 
        replace_header(headers, 'Content-Type', 'application/json')
 
        start_response(status[0], headers, exc_info[0])
 

	
 
        return output
 

	
 
    def _dispatch_call(self):
 
        """
 
        Implement dispatch interface specified by WSGIController
 
        """
 
        try:
 
            raw_response = self._inspect_call(self._func)
 
            if isinstance(raw_response, HTTPError):
 
                self._error = str(raw_response)
 
        except JSONRPCError, e:
 
            self._error = str(e)
 
        except Exception, e:
 
            log.error('Encountered unhandled exception: %s' \
 
                      % traceback.format_exc())
 
            json_exc = JSONRPCError('Internal server error')
 
            self._error = str(json_exc)
 

	
 
        if self._error is not None:
 
            raw_response = None
 

	
rhodecode/controllers/api/api.py
Show inline comments
 
@@ -111,141 +111,176 @@ class ApiController(JSONRPCController):
 

	
 
        :param apiuser:
 
        """
 

	
 
        result = []
 
        for user in User.getAll():
 
            result.append(
 
                dict(
 
                    id=user.user_id,
 
                    username=user.username,
 
                    firstname=user.name,
 
                    lastname=user.lastname,
 
                    email=user.email,
 
                    active=user.active,
 
                    admin=user.admin,
 
                    ldap_dn=user.ldap_dn,
 
                    last_login=user.last_login,
 
                )
 
            )
 
        return result
 

	
 
    @HasPermissionAllDecorator('hg.admin')
 
    def create_user(self, apiuser, username, email, password, firstname=None,
 
                    lastname=None, active=True, admin=False, ldap_dn=None):
 
        """
 
        Create new user
 

	
 
        :param apiuser:
 
        :param username:
 
        :param password:
 
        :param email:
 
        :param name:
 
        :param lastname:
 
        :param active:
 
        :param admin:
 
        :param ldap_dn:
 
        """
 
        if User.get_by_username(username):
 
            raise JSONRPCError("user %s already exist" % username)
 

	
 
        if User.get_by_email(email, case_insensitive=True):
 
            raise JSONRPCError("email %s already exist" % email)
 

	
 
        if ldap_dn:
 
            # generate temporary password if ldap_dn
 
            password = PasswordGenerator().gen_password(length=8)
 

	
 
        try:
 
            usr = UserModel().create_or_update(
 
            user = UserModel().create_or_update(
 
                username, password, email, firstname,
 
                lastname, active, admin, ldap_dn
 
            )
 
            Session.commit()
 
            return dict(
 
                id=usr.user_id,
 
                msg='created new user %s' % username
 
                id=user.user_id,
 
                msg='created new user %s' % username,
 
                user=dict(
 
                    id=user.user_id,
 
                    username=user.username,
 
                    firstname=user.name,
 
                    lastname=user.lastname,
 
                    email=user.email,
 
                    active=user.active,
 
                    admin=user.admin,
 
                    ldap_dn=user.ldap_dn,
 
                    last_login=user.last_login,
 
                )
 
            )
 
        except Exception:
 
            log.error(traceback.format_exc())
 
            raise JSONRPCError('failed to create user %s' % username)
 

	
 
    @HasPermissionAllDecorator('hg.admin')
 
    def update_user(self, apiuser, userid, username, password, email,
 
                    firstname, lastname, active, admin, ldap_dn):
 
        """
 
        Updates given user
 

	
 
        :param apiuser:
 
        :param username:
 
        :param password:
 
        :param email:
 
        :param name:
 
        :param lastname:
 
        :param active:
 
        :param admin:
 
        :param ldap_dn:
 
        """
 
        if not UserModel().get_user(userid):
 
            raise JSONRPCError("user %s does not exist" % username)
 
        usr = UserModel().get_user(userid)
 
        if not usr:
 
            raise JSONRPCError("user ID:%s does not exist" % userid)
 

	
 
        try:
 
            usr = UserModel().create_or_update(
 
                username, password, email, firstname,
 
                lastname, active, admin, ldap_dn
 
            )
 
            Session.commit()
 
            return dict(
 
                id=usr.user_id,
 
                msg='updated user %s' % username
 
                msg='updated user ID:%s %s' % (usr.user_id, usr.username)
 
            )
 
        except Exception:
 
            log.error(traceback.format_exc())
 
            raise JSONRPCError('failed to update user %s' % username)
 
            raise JSONRPCError('failed to update user %s' % userid)
 

	
 
    @HasPermissionAllDecorator('hg.admin')
 
    def delete_user(self, apiuser, userid):
 
        """"
 
        Deletes an user
 

	
 
        :param apiuser:
 
        """
 
        usr = UserModel().get_user(userid)
 
        if not usr:
 
            raise JSONRPCError("user ID:%s does not exist" % userid)
 

	
 
        try:
 
            UserModel().delete(userid)
 
            Session.commit()
 
            return dict(
 
                id=usr.user_id,
 
                msg='deleted user ID:%s %s' % (usr.user_id, usr.username)
 
            )
 
        except Exception:
 
            log.error(traceback.format_exc())
 
            raise JSONRPCError('failed to delete ID:%s %s' % (usr.user_id,
 
                                                              usr.username))
 

	
 
    @HasPermissionAllDecorator('hg.admin')
 
    def get_users_group(self, apiuser, group_name):
 
        """"
 
        Get users group by name
 

	
 
        :param apiuser:
 
        :param group_name:
 
        """
 

	
 
        users_group = UsersGroup.get_by_group_name(group_name)
 
        if not users_group:
 
            return None
 

	
 
        members = []
 
        for user in users_group.members:
 
            user = user.user
 
            members.append(dict(id=user.user_id,
 
                            username=user.username,
 
                            firstname=user.name,
 
                            lastname=user.lastname,
 
                            email=user.email,
 
                            active=user.active,
 
                            admin=user.admin,
 
                            ldap=user.ldap_dn))
 

	
 
        return dict(id=users_group.users_group_id,
 
                    group_name=users_group.users_group_name,
 
                    active=users_group.users_group_active,
 
                    members=members)
 

	
 
    @HasPermissionAllDecorator('hg.admin')
 
    def get_users_groups(self, apiuser):
 
        """"
 
        Get all users groups
 

	
 
        :param apiuser:
 
        """
 

	
 
        result = []
 
        for users_group in UsersGroup.getAll():
 
            members = []
 
            for user in users_group.members:
 
                user = user.user
 
                members.append(dict(id=user.user_id,
 
                                username=user.username,
 
                                firstname=user.name,
 
                                lastname=user.lastname,
 
@@ -309,97 +344,97 @@ class ApiController(JSONRPCController):
 
            return dict(
 
                id=ugm.users_group_member_id if ugm != True else None,
 
                success=success,
 
                msg=msg
 
            )
 
        except Exception:
 
            log.error(traceback.format_exc())
 
            raise JSONRPCError('failed to add users group member')
 

	
 
    @HasPermissionAllDecorator('hg.admin')
 
    def remove_user_from_users_group(self, apiuser, group_name, username):
 
        """
 
        Remove user from a group
 

	
 
        :param apiuser
 
        :param group_name
 
        :param username
 
        """
 

	
 
        try:
 
            users_group = UsersGroup.get_by_group_name(group_name)
 
            if not users_group:
 
                raise JSONRPCError('unknown users group %s' % group_name)
 

	
 
            user = User.get_by_username(username)
 
            if user is None:
 
                raise JSONRPCError('unknown user %s' % username)
 

	
 
            success = UsersGroupModel().remove_user_from_group(users_group, user)
 
            msg = 'removed member %s from users group %s' % (username, group_name)
 
            msg = msg if success else "User wasn't in group"
 
            Session.commit()
 
            return dict(success=success, msg=msg)
 
        except Exception:
 
            log.error(traceback.format_exc())
 
            raise JSONRPCError('failed to remove user from group')
 

	
 
    @HasPermissionAnyDecorator('hg.admin')
 
    def get_repo(self, apiuser, repoid):
 
        """"
 
        Get repository by name
 

	
 
        :param apiuser:
 
        :param repo_name:
 
        """
 

	
 
        repo = RepoModel().get_repo(repoid)
 
        if repo is None:
 
            raise JSONRPCError('unknown repository %s' % repo)
 
            raise JSONRPCError('unknown repository "%s"' % (repo or repoid))
 

	
 
        members = []
 
        for user in repo.repo_to_perm:
 
            perm = user.permission.permission_name
 
            user = user.user
 
            members.append(
 
                dict(
 
                    type="user",
 
                    id=user.user_id,
 
                    username=user.username,
 
                    firstname=user.name,
 
                    lastname=user.lastname,
 
                    email=user.email,
 
                    active=user.active,
 
                    admin=user.admin,
 
                    ldap=user.ldap_dn,
 
                    permission=perm
 
                )
 
            )
 
        for users_group in repo.users_group_to_perm:
 
            perm = users_group.permission.permission_name
 
            users_group = users_group.users_group
 
            members.append(
 
                dict(
 
                    type="users_group",
 
                    id=users_group.users_group_id,
 
                    name=users_group.users_group_name,
 
                    active=users_group.users_group_active,
 
                    permission=perm
 
                )
 
            )
 

	
 
        return dict(
 
            id=repo.repo_id,
 
            repo_name=repo.repo_name,
 
            type=repo.repo_type,
 
            clone_uri=repo.clone_uri,
 
            private=repo.private,
 
            created_on=repo.created_on,
 
            description=repo.description,
 
            members=members
 
        )
 

	
 
    @HasPermissionAnyDecorator('hg.admin')
 
    def get_repos(self, apiuser):
 
        """"
 
        Get all repositories
 

	
 
@@ -441,111 +476,128 @@ class ApiController(JSONRPCController):
 
            _map = {
 
                'all': _d + _f,
 
                'files': _f,
 
                'dirs': _d,
 
            }
 
            return _map[ret_type]
 
        except KeyError:
 
            raise JSONRPCError('ret_type must be one of %s' % _map.keys())
 
        except Exception, e:
 
            raise JSONRPCError(e)
 

	
 
    @HasPermissionAnyDecorator('hg.admin', 'hg.create.repository')
 
    def create_repo(self, apiuser, repo_name, owner_name, description='',
 
                    repo_type='hg', private=False, clone_uri=None):
 
        """
 
        Create repository, if clone_url is given it makes a remote clone
 

	
 
        :param apiuser:
 
        :param repo_name:
 
        :param owner_name:
 
        :param description:
 
        :param repo_type:
 
        :param private:
 
        :param clone_uri:
 
        """
 

	
 
        try:
 
            owner = User.get_by_username(owner_name)
 
            if owner is None:
 
                raise JSONRPCError('unknown user %s' % owner_name)
 

	
 
            if Repository.get_by_repo_name(repo_name):
 
                raise JSONRPCError("repo %s already exist" % repo_name)
 

	
 
            groups = repo_name.split(Repository.url_sep())
 
            real_name = groups[-1]
 
            # create structure of groups
 
            group = map_groups(repo_name)
 

	
 
            repo = RepoModel().create(
 
                dict(
 
                    repo_name=real_name,
 
                    repo_name_full=repo_name,
 
                    description=description,
 
                    private=private,
 
                    repo_type=repo_type,
 
                    repo_group=group.group_id if group else None,
 
                    clone_uri=clone_uri
 
                ),
 
                owner
 
                )
 
            )
 
            Session.commit()
 

	
 
            return dict(
 
                id=repo.repo_id,
 
                msg="Created new repository %s" % repo.repo_name
 
                msg="Created new repository %s" % (repo.repo_name),
 
                repo=dict(
 
                    id=repo.repo_id,
 
                    repo_name=repo.repo_name,
 
                    type=repo.repo_type,
 
                    clone_uri=repo.clone_uri,
 
                    private=repo.private,
 
                    created_on=repo.created_on,
 
                    description=repo.description,
 
                )
 
            )
 

	
 
        except Exception:
 
            log.error(traceback.format_exc())
 
            raise JSONRPCError('failed to create repository %s' % repo_name)
 

	
 
    @HasPermissionAnyDecorator('hg.admin')
 
    def fork_repo(self, apiuser, repoid):
 
        repo = RepoModel().get_repo(repoid)
 
        if repo is None:
 
            raise JSONRPCError('unknown repository "%s"' % (repo or repoid))
 

	
 
        RepoModel().create_fork(form_data, cur_user)
 

	
 

	
 
    @HasPermissionAnyDecorator('hg.admin')
 
    def delete_repo(self, apiuser, repo_name):
 
        """
 
        Deletes a given repository
 

	
 
        :param repo_name:
 
        """
 
        if not Repository.get_by_repo_name(repo_name):
 
            raise JSONRPCError("repo %s does not exist" % repo_name)
 
        try:
 
            RepoModel().delete(repo_name)
 
            Session.commit()
 
            return dict(
 
                msg='Deleted repository %s' % repo_name
 
            )
 
        except Exception:
 
            log.error(traceback.format_exc())
 
            raise JSONRPCError('failed to delete repository %s' % repo_name)
 

	
 
    @HasPermissionAnyDecorator('hg.admin')
 
    def grant_user_permission(self, apiuser, repo_name, username, perm):
 
        """
 
        Grant permission for user on given repository, or update existing one
 
        if found
 

	
 
        :param repo_name:
 
        :param username:
 
        :param perm:
 
        """
 

	
 
        try:
 
            repo = Repository.get_by_repo_name(repo_name)
 
            if repo is None:
 
                raise JSONRPCError('unknown repository %s' % repo)
 

	
 
            user = User.get_by_username(username)
 
            if user is None:
 
                raise JSONRPCError('unknown user %s' % username)
 

	
 
            RepoModel().grant_user_permission(repo=repo, user=user, perm=perm)
 

	
 
            Session.commit()
 
            return dict(
 
                msg='Granted perm: %s for user: %s in repo: %s' % (
 
                    perm, username, repo_name
 
                )
 
            )
 
        except Exception:
 
            log.error(traceback.format_exc())
rhodecode/controllers/changelog.py
Show inline comments
 
# -*- coding: utf-8 -*-
 
"""
 
    rhodecode.controllers.changelog
 
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 

	
 
    changelog controller for rhodecode
 

	
 
    :created_on: Apr 21, 2010
 
    :author: marcink
 
    :copyright: (C) 2010-2012 Marcin Kuzminski <marcin@python-works.com>
 
    :license: GPLv3, see COPYING for more details.
 
"""
 
# This program is free software: you can redistribute it and/or modify
 
# it under the terms of the GNU General Public License as published by
 
# the Free Software Foundation, either version 3 of the License, or
 
# (at your option) any later version.
 
#
 
# This program is distributed in the hope that it will be useful,
 
# but WITHOUT ANY WARRANTY; without even the implied warranty of
 
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 
# GNU General Public License for more details.
 
#
 
# You should have received a copy of the GNU General Public License
 
# along with this program.  If not, see <http://www.gnu.org/licenses/>.
 

	
 
import logging
 
import traceback
 

	
 
from mercurial import graphmod
 
from pylons import request, url, session, tmpl_context as c
 
from pylons.controllers.util import redirect
 
from pylons.i18n.translation import _
 

	
 
import rhodecode.lib.helpers as h
 
from rhodecode.lib.auth import LoginRequired, HasRepoPermissionAnyDecorator
 
from rhodecode.lib.base import BaseRepoController, render
 
from rhodecode.lib.helpers import RepoPage
 
from rhodecode.lib.compat import json
 

	
 
from rhodecode.lib.graphmod import _colored, _dagwalker
 
from rhodecode.lib.vcs.exceptions import RepositoryError, ChangesetDoesNotExistError
 
from rhodecode.model.db import Repository
 

	
 
log = logging.getLogger(__name__)
 

	
 

	
 
class ChangelogController(BaseRepoController):
 

	
 
    @LoginRequired()
 
    @HasRepoPermissionAnyDecorator('repository.read', 'repository.write',
 
                                   'repository.admin')
 
    def __before__(self):
 
        super(ChangelogController, self).__before__()
 
        c.affected_files_cut_off = 60
 

	
 
    def index(self):
 
        limit = 100
 
        default = 20
 
        if request.params.get('size'):
 
            try:
 
                int_size = int(request.params.get('size'))
 
            except ValueError:
 
                int_size = default
 
            int_size = int_size if int_size <= limit else limit
 
            c.size = int_size
 
            session['changelog_size'] = c.size
 
            session.save()
 
        else:
 
            c.size = int(session.get('changelog_size', default))
 

	
 
        p = int(request.params.get('page', 1))
 
        branch_name = request.params.get('branch', None)
 
        try:
 
            if branch_name:
 
                collection = [z for z in
 
                              c.rhodecode_repo.get_changesets(start=0,
 
                                                    branch_name=branch_name)]
 
                c.total_cs = len(collection)
 
            else:
 
                collection = c.rhodecode_repo
 
                c.total_cs = len(c.rhodecode_repo)
 

	
 
            c.pagination = RepoPage(collection, page=p, item_count=c.total_cs,
 
                                    items_per_page=c.size, branch=branch_name)
 
            collection = list(c.pagination)
 
            page_revisions = [x.raw_id for x in collection]
 
            c.comments = c.rhodecode_db_repo.comments(page_revisions)
 
            c.statuses = c.rhodecode_db_repo.statuses(page_revisions)
 
        except (RepositoryError, ChangesetDoesNotExistError, Exception), e:
 
            log.error(traceback.format_exc())
 
            h.flash(str(e), category='warning')
 
            return redirect(url('home'))
 

	
 
        self._graph(c.rhodecode_repo, collection, c.total_cs, c.size, p)
 

	
 
        c.branch_name = branch_name
 
        c.branch_filters = [('', _('All Branches'))] + \
 
            [(k, k) for k in c.rhodecode_repo.branches.keys()]
 

	
 
        return render('changelog/changelog.html')
 

	
 
    def changelog_details(self, cs):
 
        if request.environ.get('HTTP_X_PARTIAL_XHR'):
 
            c.cs = c.rhodecode_repo.get_changeset(cs)
 
            return render('changelog/changelog_details.html')
 

	
 
    def _graph(self, repo, collection, repo_size, size, p):
 
        """
 
        Generates a DAG graph for mercurial
 

	
 
        :param repo: repo instance
 
        :param size: number of commits to show
 
        :param p: page number
 
        """
 
        if not collection:
 
            c.jsdata = json.dumps([])
 
            return
 

	
 
        data = []
 
        revs = [x.revision for x in collection]
 

	
 
        if repo.alias == 'git':
 
            for _ in revs:
 
                vtx = [0, 1]
 
                edges = [[0, 0, 1]]
 
                data.append(['', vtx, edges])
 

	
 
        elif repo.alias == 'hg':
 
            dag = graphmod.dagwalker(repo._repo, revs)
 
            c.dag = graphmod.colored(dag, repo._repo)
 
            for (id, type, ctx, vtx, edges) in c.dag:
 
                if type != graphmod.CHANGESET:
 
                    continue
 
        dag = _dagwalker(repo, revs, repo.alias)
 
        dag = _colored(dag)
 
        for (id, type, ctx, vtx, edges) in dag:
 
                data.append(['', vtx, edges])
 

	
 
        c.jsdata = json.dumps(data)
rhodecode/controllers/changeset.py
Show inline comments
 
# -*- coding: utf-8 -*-
 
"""
 
    rhodecode.controllers.changeset
 
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 

	
 
    changeset controller for pylons showoing changes beetween
 
    revisions
 

	
 
    :created_on: Apr 25, 2010
 
    :author: marcink
 
    :copyright: (C) 2010-2012 Marcin Kuzminski <marcin@python-works.com>
 
    :license: GPLv3, see COPYING for more details.
 
"""
 
# This program is free software: you can redistribute it and/or modify
 
# it under the terms of the GNU General Public License as published by
 
# the Free Software Foundation, either version 3 of the License, or
 
# (at your option) any later version.
 
#
 
# This program is distributed in the hope that it will be useful,
 
# but WITHOUT ANY WARRANTY; without even the implied warranty of
 
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 
# GNU General Public License for more details.
 
#
 
# You should have received a copy of the GNU General Public License
 
# along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
import logging
 
import traceback
 
from collections import defaultdict
 
from webob.exc import HTTPForbidden
 

	
 
from pylons import tmpl_context as c, url, request, response
 
from pylons.i18n.translation import _
 
from pylons.controllers.util import redirect
 
from pylons.decorators import jsonify
 

	
 
from rhodecode.lib.vcs.exceptions import RepositoryError, ChangesetError, \
 
    ChangesetDoesNotExistError
 
from rhodecode.lib.vcs.nodes import FileNode
 

	
 
import rhodecode.lib.helpers as h
 
from rhodecode.lib.auth import LoginRequired, HasRepoPermissionAnyDecorator
 
from rhodecode.lib.base import BaseRepoController, render
 
from rhodecode.lib.utils import EmptyChangeset
 
from rhodecode.lib.utils import EmptyChangeset, action_logger
 
from rhodecode.lib.compat import OrderedDict
 
from rhodecode.lib import diffs
 
from rhodecode.model.db import ChangesetComment, ChangesetStatus
 
from rhodecode.model.comment import ChangesetCommentsModel
 
from rhodecode.model.changeset_status import ChangesetStatusModel
 
from rhodecode.model.meta import Session
 
from rhodecode.lib.diffs import wrapped_diff
 
from rhodecode.model.repo import RepoModel
 

	
 
log = logging.getLogger(__name__)
 

	
 

	
 
def _update_with_GET(params, GET):
 
    for k in ['diff1', 'diff2', 'diff']:
 
        params[k] += GET.getall(k)
 

	
 

	
 
def anchor_url(revision, path, GET):
 
    fid = h.FID(revision, path)
 
    return h.url.current(anchor=fid, **dict(GET))
 

	
 

	
 
def get_ignore_ws(fid, GET):
 
    ig_ws_global = GET.get('ignorews')
 
    ig_ws = filter(lambda k: k.startswith('WS'), GET.getall(fid))
 
    if ig_ws:
 
        try:
 
            return int(ig_ws[0].split(':')[-1])
 
        except:
 
            pass
 
    return ig_ws_global
 

	
 

	
 
def _ignorews_url(GET, fileid=None):
 
    fileid = str(fileid) if fileid else None
 
    params = defaultdict(list)
 
    _update_with_GET(params, GET)
 
    lbl = _('show white space')
 
    ig_ws = get_ignore_ws(fileid, GET)
 
    ln_ctx = get_line_ctx(fileid, GET)
 
    # global option
 
    if fileid is None:
 
        if ig_ws is None:
 
            params['ignorews'] += [1]
 
            lbl = _('ignore white space')
 
        ctx_key = 'context'
 
        ctx_val = ln_ctx
 
    # per file options
 
    else:
 
        if ig_ws is None:
 
            params[fileid] += ['WS:1']
 
            lbl = _('ignore white space')
 

	
 
        ctx_key = fileid
 
        ctx_val = 'C:%s' % ln_ctx
 
    # if we have passed in ln_ctx pass it along to our params
 
@@ -121,96 +122,99 @@ def get_line_ctx(fid, GET):
 

	
 
def _context_url(GET, fileid=None):
 
    """
 
    Generates url for context lines
 

	
 
    :param fileid:
 
    """
 

	
 
    fileid = str(fileid) if fileid else None
 
    ig_ws = get_ignore_ws(fileid, GET)
 
    ln_ctx = (get_line_ctx(fileid, GET) or 3) * 2
 

	
 
    params = defaultdict(list)
 
    _update_with_GET(params, GET)
 

	
 
    # global option
 
    if fileid is None:
 
        if ln_ctx > 0:
 
            params['context'] += [ln_ctx]
 

	
 
        if ig_ws:
 
            ig_ws_key = 'ignorews'
 
            ig_ws_val = 1
 

	
 
    # per file option
 
    else:
 
        params[fileid] += ['C:%s' % ln_ctx]
 
        ig_ws_key = fileid
 
        ig_ws_val = 'WS:%s' % 1
 

	
 
    if ig_ws:
 
        params[ig_ws_key] += [ig_ws_val]
 

	
 
    lbl = _('%s line context') % ln_ctx
 

	
 
    params['anchor'] = fileid
 
    img = h.image(h.url('/images/icons/table_add.png'), lbl, class_='icon')
 
    return h.link_to(img, h.url.current(**params), title=lbl, class_='tooltip')
 

	
 

	
 
class ChangesetController(BaseRepoController):
 

	
 
    @LoginRequired()
 
    @HasRepoPermissionAnyDecorator('repository.read', 'repository.write',
 
                                   'repository.admin')
 
    def __before__(self):
 
        super(ChangesetController, self).__before__()
 
        c.affected_files_cut_off = 60
 
        repo_model = RepoModel()
 
        c.users_array = repo_model.get_users_js()
 
        c.users_groups_array = repo_model.get_users_groups_js()
 

	
 
    def index(self, revision):
 

	
 
        c.anchor_url = anchor_url
 
        c.ignorews_url = _ignorews_url
 
        c.context_url = _context_url
 
        limit_off = request.GET.get('fulldiff')
 
        #get ranges of revisions if preset
 
        rev_range = revision.split('...')[:2]
 
        enable_comments = True
 
        try:
 
            if len(rev_range) == 2:
 
                enable_comments = False
 
                rev_start = rev_range[0]
 
                rev_end = rev_range[1]
 
                rev_ranges = c.rhodecode_repo.get_changesets(start=rev_start,
 
                                                            end=rev_end)
 
            else:
 
                rev_ranges = [c.rhodecode_repo.get_changeset(revision)]
 

	
 
            c.cs_ranges = list(rev_ranges)
 
            if not c.cs_ranges:
 
                raise RepositoryError('Changeset range returned empty result')
 

	
 
        except (RepositoryError, ChangesetDoesNotExistError, Exception), e:
 
            log.error(traceback.format_exc())
 
            h.flash(str(e), category='warning')
 
            return redirect(url('home'))
 

	
 
        c.changes = OrderedDict()
 

	
 
        c.lines_added = 0  # count of lines added
 
        c.lines_deleted = 0  # count of lines removes
 

	
 
        cumulative_diff = 0
 
        c.cut_off = False  # defines if cut off limit is reached
 
        c.changeset_statuses = ChangesetStatus.STATUSES
 
        c.comments = []
 
        c.statuses = []
 
        c.inline_comments = []
 
        c.inline_cnt = 0
 
        # Iterate over ranges (default changeset view is always one changeset)
 
        for changeset in c.cs_ranges:
 

	
 
            c.statuses.extend([ChangesetStatusModel()\
 
                              .get_status(c.rhodecode_db_repo.repo_id,
 
                                          changeset.raw_id)])
 

	
 
@@ -346,75 +350,79 @@ class ChangesetController(BaseRepoContro
 
                                           context=line_context)
 
                    diff = diffs.DiffProcessor(f_gitdiff,
 
                                                format='gitdiff').raw_diff()
 

	
 
                cs1 = filenode_old.changeset.raw_id
 
                cs2 = node.changeset.raw_id
 
                c.changes.append(('changed', node, diff, cs1, cs2))
 

	
 
        response.content_type = 'text/plain'
 

	
 
        if method == 'download':
 
            response.content_disposition = 'attachment; filename=%s.patch' \
 
                                            % revision
 

	
 
        c.parent_tmpl = ''.join(['# Parent  %s\n' % x.raw_id
 
                                 for x in c.changeset.parents])
 

	
 
        c.diffs = ''
 
        for x in c.changes:
 
            c.diffs += x[2]
 

	
 
        return render('changeset/raw_changeset.html')
 

	
 
    @jsonify
 
    def comment(self, repo_name, revision):
 
        status = request.POST.get('changeset_status')
 
        change_status = request.POST.get('change_changeset_status')
 

	
 
        comm = ChangesetCommentsModel().create(
 
            text=request.POST.get('text'),
 
            repo_id=c.rhodecode_db_repo.repo_id,
 
            user_id=c.rhodecode_user.user_id,
 
            revision=revision,
 
            f_path=request.POST.get('f_path'),
 
            line_no=request.POST.get('line'),
 
            status_change=(ChangesetStatus.get_status_lbl(status) 
 
                           if status and change_status else None)
 
        )
 

	
 
        # get status if set !
 
        if status and change_status:
 
            ChangesetStatusModel().set_status(
 
                c.rhodecode_db_repo.repo_id,
 
                revision,
 
                status,
 
                c.rhodecode_user.user_id,
 
                comm,
 
            )
 
        action_logger(self.rhodecode_user,
 
                      'user_commented_revision:%s' % revision,
 
                      c.rhodecode_db_repo, self.ip_addr, self.sa)
 

	
 
        Session.commit()
 

	
 
        if not request.environ.get('HTTP_X_PARTIAL_XHR'):
 
            return redirect(h.url('changeset_home', repo_name=repo_name,
 
                                  revision=revision))
 

	
 
        data = {
 
           'target_id': h.safeid(h.safe_unicode(request.POST.get('f_path'))),
 
        }
 
        if comm:
 
            c.co = comm
 
            data.update(comm.get_dict())
 
            data.update({'rendered_text':
 
                         render('changeset/changeset_comment_block.html')})
 

	
 
        return data
 

	
 
    @jsonify
 
    def delete_comment(self, repo_name, comment_id):
 
        co = ChangesetComment.get(comment_id)
 
        owner = lambda: co.author.user_id == c.rhodecode_user.user_id
 
        if h.HasPermissionAny('hg.admin', 'repository.admin')() or owner:
 
            ChangesetCommentsModel().delete(comment=co)
 
            Session.commit()
 
            return True
 
        else:
 
            raise HTTPForbidden()
rhodecode/controllers/feed.py
Show inline comments
 
# -*- coding: utf-8 -*-
 
"""
 
    rhodecode.controllers.feed
 
    ~~~~~~~~~~~~~~~~~~~~~~~~~~
 

	
 
    Feed controller for rhodecode
 

	
 
    :created_on: Apr 23, 2010
 
    :author: marcink
 
    :copyright: (C) 2010-2012 Marcin Kuzminski <marcin@python-works.com>
 
    :license: GPLv3, see COPYING for more details.
 
"""
 
# This program is free software: you can redistribute it and/or modify
 
# it under the terms of the GNU General Public License as published by
 
# the Free Software Foundation, either version 3 of the License, or
 
# (at your option) any later version.
 
#
 
# This program is distributed in the hope that it will be useful,
 
# but WITHOUT ANY WARRANTY; without even the implied warranty of
 
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 
# GNU General Public License for more details.
 
#
 
# You should have received a copy of the GNU General Public License
 
# along with this program.  If not, see <http://www.gnu.org/licenses/>.
 

	
 
import logging
 

	
 
from pylons import url, response, tmpl_context as c
 
from pylons.i18n.translation import _
 

	
 
from rhodecode.lib.utils2 import safe_unicode
 
from webhelpers.feedgenerator import Atom1Feed, Rss201rev2Feed
 

	
 
from rhodecode.lib import helpers as h
 
from rhodecode.lib.auth import LoginRequired, HasRepoPermissionAnyDecorator
 
from rhodecode.lib.base import BaseRepoController
 

	
 
from webhelpers.feedgenerator import Atom1Feed, Rss201rev2Feed
 
from rhodecode.lib.diffs import DiffProcessor
 

	
 
log = logging.getLogger(__name__)
 

	
 

	
 
class FeedController(BaseRepoController):
 

	
 
    @LoginRequired(api_access=True)
 
    @HasRepoPermissionAnyDecorator('repository.read', 'repository.write',
 
                                   'repository.admin')
 
    def __before__(self):
 
        super(FeedController, self).__before__()
 
        #common values for feeds
 
        self.description = _('Changes on %s repository')
 
        self.title = self.title = _('%s %s feed') % (c.rhodecode_name, '%s')
 
        self.language = 'en-us'
 
        self.ttl = "5"
 
        self.feed_nr = 10
 
        self.feed_nr = 20
 

	
 
    def _get_title(self, cs):
 
        return "R%s:%s - %s" % (
 
            cs.revision, cs.short_id, cs.message
 
        return "%s" % (
 
            h.shorter(cs.message, 160)
 
        )
 

	
 
    def __changes(self, cs):
 
        changes = []
 

	
 
        a = [safe_unicode(n.path) for n in cs.added]
 
        if a:
 
            changes.append('\nA ' + '\nA '.join(a))
 

	
 
        m = [safe_unicode(n.path) for n in cs.changed]
 
        if m:
 
            changes.append('\nM ' + '\nM '.join(m))
 
        diffprocessor = DiffProcessor(cs.diff())
 
        stats = diffprocessor.prepare(inline_diff=False)
 
        for st in stats:
 
            st.update({'added': st['stats'][0],
 
                       'removed': st['stats'][1]})
 
            changes.append('\n %(operation)s %(filename)s '
 
                           '(%(added)s lines added, %(removed)s lines removed)'
 
                            % st)
 
        return changes
 

	
 
        d = [safe_unicode(n.path) for n in cs.removed]
 
        if d:
 
            changes.append('\nD ' + '\nD '.join(d))
 

	
 
        changes.append('</pre>')
 

	
 
        return ''.join(changes)
 
    def __get_desc(self, cs):
 
        desc_msg = []
 
        desc_msg.append('%s %s %s:<br/>' % (cs.author, _('commited on'),
 
                                           cs.date))
 
        desc_msg.append('<pre>')
 
        desc_msg.append(cs.message)
 
        desc_msg.append('\n')
 
        desc_msg.extend(self.__changes(cs))
 
        desc_msg.append('</pre>')
 
        return desc_msg
 

	
 
    def atom(self, repo_name):
 
        """Produce an atom-1.0 feed via feedgenerator module"""
 
        feed = Atom1Feed(
 
             title=self.title % repo_name,
 
             link=url('summary_home', repo_name=repo_name,
 
                      qualified=True),
 
             description=self.description % repo_name,
 
             language=self.language,
 
             ttl=self.ttl
 
        )
 

	
 
        for cs in reversed(list(c.rhodecode_repo[-self.feed_nr:])):
 
            desc_msg = []
 
            desc_msg.append('%s - %s<br/><pre>' % (cs.author, cs.date))
 
            desc_msg.append(self.__changes(cs))
 

	
 
            feed.add_item(title=self._get_title(cs),
 
                          link=url('changeset_home', repo_name=repo_name,
 
                                   revision=cs.raw_id, qualified=True),
 
                          author_name=cs.author,
 
                          description=''.join(desc_msg))
 
                          description=''.join(self.__get_desc(cs)),
 
                          pubdate=cs.date,
 
                          )
 

	
 
        response.content_type = feed.mime_type
 
        return feed.writeString('utf-8')
 

	
 
    def rss(self, repo_name):
 
        """Produce an rss2 feed via feedgenerator module"""
 
        feed = Rss201rev2Feed(
 
            title=self.title % repo_name,
 
            link=url('summary_home', repo_name=repo_name,
 
                     qualified=True),
 
            description=self.description % repo_name,
 
            language=self.language,
 
            ttl=self.ttl
 
        )
 

	
 
        for cs in reversed(list(c.rhodecode_repo[-self.feed_nr:])):
 
            desc_msg = []
 
            desc_msg.append('%s - %s<br/><pre>' % (cs.author, cs.date))
 
            desc_msg.append(self.__changes(cs))
 

	
 
            feed.add_item(title=self._get_title(cs),
 
                          link=url('changeset_home', repo_name=repo_name,
 
                                   revision=cs.raw_id, qualified=True),
 
                          author_name=cs.author,
 
                          description=''.join(desc_msg),
 
                          description=''.join(self.__get_desc(cs)),
 
                          pubdate=cs.date,
 
                         )
 

	
 
        response.content_type = feed.mime_type
 
        return feed.writeString('utf-8')
rhodecode/controllers/journal.py
Show inline comments
 
@@ -147,96 +147,94 @@ class JournalController(BaseController):
 
                    Session.commit()
 
                    return 'ok'
 
                except:
 
                    raise HTTPBadRequest()
 

	
 
        log.debug('token mismatch %s vs %s' % (cur_token, token))
 
        raise HTTPBadRequest()
 

	
 
    @LoginRequired()
 
    def public_journal(self):
 
        # Return a rendered template
 
        p = int(request.params.get('page', 1))
 

	
 
        c.following = self.sa.query(UserFollowing)\
 
            .filter(UserFollowing.user_id == self.rhodecode_user.user_id)\
 
            .options(joinedload(UserFollowing.follows_repository))\
 
            .all()
 

	
 
        journal = self._get_journal_data(c.following)
 

	
 
        c.journal_pager = Page(journal, page=p, items_per_page=20)
 

	
 
        c.journal_day_aggreagate = self._get_daily_aggregate(c.journal_pager)
 

	
 
        c.journal_data = render('journal/journal_data.html')
 
        if request.environ.get('HTTP_X_PARTIAL_XHR'):
 
            return c.journal_data
 
        return render('journal/public_journal.html')
 

	
 
    @LoginRequired(api_access=True)
 
    def public_journal_atom(self):
 
        """
 
        Produce an atom-1.0 feed via feedgenerator module
 
        """
 
        c.following = self.sa.query(UserFollowing)\
 
            .filter(UserFollowing.user_id == self.rhodecode_user.user_id)\
 
            .options(joinedload(UserFollowing.follows_repository))\
 
            .all()
 

	
 
        journal = self._get_journal_data(c.following)
 

	
 
        feed = Atom1Feed(title=self.title % 'atom',
 
                         link=url('public_journal_atom', qualified=True),
 
                         description=_('Public journal'),
 
                         language=self.language,
 
                         ttl=self.ttl)
 

	
 
        for entry in journal[:self.feed_nr]:
 
            #tmpl = h.action_parser(entry)[0]
 
            action, action_extra = h.action_parser(entry, feed=True)
 
            title = "%s - %s %s" % (entry.user.short_contact, action,
 
            action, action_extra, ico = h.action_parser(entry, feed=True)
 
            title = "%s - %s %s" % (entry.user.short_contact, action(),
 
                                 entry.repository.repo_name)
 
            desc = action_extra()
 
            feed.add_item(title=title,
 
                          pubdate=entry.action_date,
 
                          link=url('', qualified=True),
 
                          author_email=entry.user.email,
 
                          author_name=entry.user.full_contact,
 
                          description=desc)
 

	
 
        response.content_type = feed.mime_type
 
        return feed.writeString('utf-8')
 

	
 
    @LoginRequired(api_access=True)
 
    def public_journal_rss(self):
 
        """
 
        Produce an rss2 feed via feedgenerator module
 
        """
 
        c.following = self.sa.query(UserFollowing)\
 
            .filter(UserFollowing.user_id == self.rhodecode_user.user_id)\
 
            .options(joinedload(UserFollowing.follows_repository))\
 
            .all()
 

	
 
        journal = self._get_journal_data(c.following)
 

	
 
        feed = Rss201rev2Feed(title=self.title % 'rss',
 
                         link=url('public_journal_rss', qualified=True),
 
                         description=_('Public journal'),
 
                         language=self.language,
 
                         ttl=self.ttl)
 

	
 
        for entry in journal[:self.feed_nr]:
 
            #tmpl = h.action_parser(entry)[0]
 
            action, action_extra = h.action_parser(entry, feed=True)
 
            title = "%s - %s %s" % (entry.user.short_contact, action,
 
            action, action_extra, ico = h.action_parser(entry, feed=True)
 
            title = "%s - %s %s" % (entry.user.short_contact, action(),
 
                                 entry.repository.repo_name)
 
            desc = action_extra()
 
            feed.add_item(title=title,
 
                          pubdate=entry.action_date,
 
                          link=url('', qualified=True),
 
                          author_email=entry.user.email,
 
                          author_name=entry.user.full_contact,
 
                          description=desc)
 

	
 
        response.content_type = feed.mime_type
 
        return feed.writeString('utf-8')
rhodecode/controllers/settings.py
Show inline comments
 
@@ -59,100 +59,100 @@ class SettingsController(BaseRepoControl
 

	
 
        repo_model = RepoModel()
 
        c.users_array = repo_model.get_users_js()
 
        c.users_groups_array = repo_model.get_users_groups_js()
 

	
 
    @HasRepoPermissionAllDecorator('repository.admin')
 
    def index(self, repo_name):
 
        repo_model = RepoModel()
 
        c.repo_info = repo = repo_model.get_by_repo_name(repo_name)
 
        if not repo:
 
            h.flash(_('%s repository is not mapped to db perhaps'
 
                      ' it was created or renamed from the file system'
 
                      ' please run the application again'
 
                      ' in order to rescan repositories') % repo_name,
 
                      category='error')
 

	
 
            return redirect(url('home'))
 

	
 
        self.__load_defaults()
 

	
 
        defaults = RepoModel()._get_defaults(repo_name)
 

	
 
        return htmlfill.render(
 
            render('settings/repo_settings.html'),
 
            defaults=defaults,
 
            encoding="UTF-8",
 
            force_defaults=False
 
        )
 

	
 
    @HasRepoPermissionAllDecorator('repository.admin')
 
    def update(self, repo_name):
 
        repo_model = RepoModel()
 
        changed_name = repo_name
 

	
 
        self.__load_defaults()
 

	
 
        _form = RepoSettingsForm(edit=True,
 
                                 old_data={'repo_name': repo_name},
 
                                 repo_groups=c.repo_groups_choices)()
 
        try:
 
            form_result = _form.to_python(dict(request.POST))
 

	
 
            repo_model.update(repo_name, form_result)
 
            invalidate_cache('get_repo_cached_%s' % repo_name)
 
            h.flash(_('Repository %s updated successfully' % repo_name),
 
                    category='success')
 
            changed_name = form_result['repo_name_full']
 
            action_logger(self.rhodecode_user, 'user_updated_repo',
 
                          changed_name, '', self.sa)
 
                          changed_name, self.ip_addr, self.sa)
 
            Session.commit()
 
        except formencode.Invalid, errors:
 
            c.repo_info = repo_model.get_by_repo_name(repo_name)
 
            c.users_array = repo_model.get_users_js()
 
            errors.value.update({'user': c.repo_info.user.username})
 
            return htmlfill.render(
 
                render('settings/repo_settings.html'),
 
                defaults=errors.value,
 
                errors=errors.error_dict or {},
 
                prefix_error=False,
 
                encoding="UTF-8")
 
        except Exception:
 
            log.error(traceback.format_exc())
 
            h.flash(_('error occurred during update of repository %s') \
 
                    % repo_name, category='error')
 

	
 
        return redirect(url('repo_settings_home', repo_name=changed_name))
 

	
 
    @HasRepoPermissionAllDecorator('repository.admin')
 
    def delete(self, repo_name):
 
        """DELETE /repos/repo_name: Delete an existing item"""
 
        # Forms posted to this method should contain a hidden field:
 
        #    <input type="hidden" name="_method" value="DELETE" />
 
        # Or using helpers:
 
        #    h.form(url('repo_settings_delete', repo_name=ID),
 
        #           method='delete')
 
        # url('repo_settings_delete', repo_name=ID)
 

	
 
        repo_model = RepoModel()
 
        repo = repo_model.get_by_repo_name(repo_name)
 
        if not repo:
 
            h.flash(_('%s repository is not mapped to db perhaps'
 
                      ' it was moved or renamed  from the filesystem'
 
                      ' please run the application again'
 
                      ' in order to rescan repositories') % repo_name,
 
                      category='error')
 

	
 
            return redirect(url('home'))
 
        try:
 
            action_logger(self.rhodecode_user, 'user_deleted_repo',
 
                              repo_name, '', self.sa)
 
                              repo_name, self.ip_addr, self.sa)
 
            repo_model.delete(repo)
 
            invalidate_cache('get_repo_cached_%s' % repo_name)
 
            h.flash(_('deleted repository %s') % repo_name, category='success')
 
            Session.commit()
 
        except Exception:
 
            log.error(traceback.format_exc())
 
            h.flash(_('An error occurred during deletion of %s') % repo_name,
 
                    category='error')
 

	
 
        return redirect(url('home'))
rhodecode/i18n/en/LC_MESSAGES/rhodecode.po
Show inline comments
 
# English translations for rhodecode.
 
# Copyright (C) 2010 ORGANIZATION
 
# This file is distributed under the same license as the rhodecode project.
 
# FIRST AUTHOR <EMAIL@ADDRESS>, 2010.
 
#
 
msgid ""
 
msgstr ""
 
"Project-Id-Version: rhodecode 0.1\n"
 
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
 
"POT-Creation-Date: 2012-05-27 17:41+0200\n"
 
"POT-Creation-Date: 2012-06-03 01:06+0200\n"
 
"PO-Revision-Date: 2011-02-25 19:13+0100\n"
 
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 
"Language-Team: en <LL@li.org>\n"
 
"Plural-Forms: nplurals=2; plural=(n != 1)\n"
 
"MIME-Version: 1.0\n"
 
"Content-Type: text/plain; charset=utf-8\n"
 
"Content-Transfer-Encoding: 8bit\n"
 
"Generated-By: Babel 0.9.6\n"
 

	
 
#: rhodecode/controllers/changelog.py:96
 
#: rhodecode/controllers/changelog.py:95
 
msgid "All Branches"
 
msgstr ""
 

	
 
#: rhodecode/controllers/changeset.py:79
 
#: rhodecode/controllers/changeset.py:80
 
msgid "show white space"
 
msgstr ""
 

	
 
#: rhodecode/controllers/changeset.py:86 rhodecode/controllers/changeset.py:93
 
#: rhodecode/controllers/changeset.py:87 rhodecode/controllers/changeset.py:94
 
msgid "ignore white space"
 
msgstr ""
 

	
 
#: rhodecode/controllers/changeset.py:153
 
#: rhodecode/controllers/changeset.py:154
 
#, python-format
 
msgid "%s line context"
 
msgstr ""
 

	
 
#: rhodecode/controllers/changeset.py:320
 
#: rhodecode/controllers/changeset.py:335 rhodecode/lib/diffs.py:62
 
#: rhodecode/controllers/changeset.py:324
 
#: rhodecode/controllers/changeset.py:339 rhodecode/lib/diffs.py:62
 
msgid "binary file"
 
msgstr ""
 

	
 
#: rhodecode/controllers/error.py:69
 
msgid "Home page"
 
msgstr ""
 

	
 
#: rhodecode/controllers/error.py:98
 
msgid "The request could not be understood by the server due to malformed syntax."
 
msgstr ""
 

	
 
#: rhodecode/controllers/error.py:101
 
msgid "Unauthorized access to resource"
 
msgstr ""
 

	
 
#: rhodecode/controllers/error.py:103
 
msgid "You don't have permission to view this page"
 
msgstr ""
 

	
 
#: rhodecode/controllers/error.py:105
 
msgid "The resource could not be found"
 
msgstr ""
 

	
 
#: rhodecode/controllers/error.py:107
 
msgid ""
 
"The server encountered an unexpected condition which prevented it from "
 
"fulfilling the request."
 
msgstr ""
 

	
 
#: rhodecode/controllers/feed.py:48
 
#, python-format
 
msgid "Changes on %s repository"
 
msgstr ""
 

	
 
#: rhodecode/controllers/feed.py:49
 
#, python-format
 
msgid "%s %s feed"
 
msgstr ""
 

	
 
#: rhodecode/controllers/files.py:86
 
#: rhodecode/templates/admin/repos/repo_add.html:13
 
msgid "add new"
 
msgstr ""
 

	
 
#: rhodecode/controllers/files.py:87
 
#, python-format
 
msgid "There are no files yet %s"
 
msgstr ""
 
@@ -136,160 +136,160 @@ msgstr ""
 
#: rhodecode/controllers/files.py:461
 
#: rhodecode/templates/changeset/changeset_range.html:5
 
#: rhodecode/templates/changeset/changeset_range.html:13
 
#: rhodecode/templates/changeset/changeset_range.html:31
 
msgid "Changesets"
 
msgstr ""
 

	
 
#: rhodecode/controllers/files.py:462 rhodecode/controllers/summary.py:230
 
#: rhodecode/templates/branches/branches.html:5
 
msgid "Branches"
 
msgstr ""
 

	
 
#: rhodecode/controllers/files.py:463 rhodecode/controllers/summary.py:231
 
#: rhodecode/templates/tags/tags.html:5
 
msgid "Tags"
 
msgstr ""
 

	
 
#: rhodecode/controllers/forks.py:69 rhodecode/controllers/admin/repos.py:86
 
#, python-format
 
msgid ""
 
"%s repository is not mapped to db perhaps it was created or renamed from "
 
"the filesystem please run the application again in order to rescan "
 
"repositories"
 
msgstr ""
 

	
 
#: rhodecode/controllers/forks.py:128 rhodecode/controllers/settings.py:69
 
#, python-format
 
msgid ""
 
"%s repository is not mapped to db perhaps it was created or renamed from "
 
"the file system please run the application again in order to rescan "
 
"repositories"
 
msgstr ""
 

	
 
#: rhodecode/controllers/forks.py:163
 
#, python-format
 
msgid "forked %s repository as %s"
 
msgstr ""
 

	
 
#: rhodecode/controllers/forks.py:177
 
#, python-format
 
msgid "An error occurred during repository forking %s"
 
msgstr ""
 

	
 
#: rhodecode/controllers/journal.py:53
 
#, python-format
 
msgid "%s public journal %s feed"
 
msgstr ""
 

	
 
#: rhodecode/controllers/journal.py:190 rhodecode/controllers/journal.py:224
 
#: rhodecode/controllers/journal.py:190 rhodecode/controllers/journal.py:223
 
#: rhodecode/templates/admin/repos/repo_edit.html:177
 
#: rhodecode/templates/base/base.html:307
 
#: rhodecode/templates/base/base.html:309
 
#: rhodecode/templates/base/base.html:311
 
msgid "Public journal"
 
msgstr ""
 

	
 
#: rhodecode/controllers/login.py:116
 
msgid "You have successfully registered into rhodecode"
 
msgstr ""
 

	
 
#: rhodecode/controllers/login.py:137
 
msgid "Your password reset link was sent"
 
msgstr ""
 

	
 
#: rhodecode/controllers/login.py:157
 
msgid ""
 
"Your password reset was successful, new password has been sent to your "
 
"email"
 
msgstr ""
 

	
 
#: rhodecode/controllers/search.py:114
 
msgid "Invalid search query. Try quoting it."
 
msgstr ""
 

	
 
#: rhodecode/controllers/search.py:119
 
msgid "There is no index to search in. Please run whoosh indexer"
 
msgstr ""
 

	
 
#: rhodecode/controllers/search.py:123
 
msgid "An error occurred during this search operation"
 
msgstr ""
 

	
 
#: rhodecode/controllers/settings.py:103
 
#: rhodecode/controllers/admin/repos.py:211
 
#: rhodecode/controllers/admin/repos.py:213
 
#, python-format
 
msgid "Repository %s updated successfully"
 
msgstr ""
 

	
 
#: rhodecode/controllers/settings.py:121
 
#: rhodecode/controllers/admin/repos.py:229
 
#: rhodecode/controllers/admin/repos.py:231
 
#, python-format
 
msgid "error occurred during update of repository %s"
 
msgstr ""
 

	
 
#: rhodecode/controllers/settings.py:139
 
#: rhodecode/controllers/admin/repos.py:247
 
#: rhodecode/controllers/admin/repos.py:249
 
#, python-format
 
msgid ""
 
"%s repository is not mapped to db perhaps it was moved or renamed  from "
 
"the filesystem please run the application again in order to rescan "
 
"repositories"
 
msgstr ""
 

	
 
#: rhodecode/controllers/settings.py:151
 
#: rhodecode/controllers/admin/repos.py:259
 
#: rhodecode/controllers/admin/repos.py:261
 
#, python-format
 
msgid "deleted repository %s"
 
msgstr ""
 

	
 
#: rhodecode/controllers/settings.py:155
 
#: rhodecode/controllers/admin/repos.py:269
 
#: rhodecode/controllers/admin/repos.py:275
 
#: rhodecode/controllers/admin/repos.py:271
 
#: rhodecode/controllers/admin/repos.py:277
 
#, python-format
 
msgid "An error occurred during deletion of %s"
 
msgstr ""
 

	
 
#: rhodecode/controllers/summary.py:138
 
msgid "No data loaded yet"
 
msgstr ""
 

	
 
#: rhodecode/controllers/summary.py:142
 
#: rhodecode/templates/summary/summary.html:139
 
msgid "Statistics are disabled for this repository"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/ldap_settings.py:49
 
msgid "BASE"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/ldap_settings.py:50
 
msgid "ONELEVEL"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/ldap_settings.py:51
 
msgid "SUBTREE"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/ldap_settings.py:55
 
msgid "NEVER"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/ldap_settings.py:56
 
msgid "ALLOW"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/ldap_settings.py:57
 
msgid "TRY"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/ldap_settings.py:58
 
msgid "DEMAND"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/ldap_settings.py:59
 
msgid "HARD"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/ldap_settings.py:63
 
msgid "No encryption"
 
msgstr ""
 
@@ -348,427 +348,447 @@ msgstr ""
 
#: rhodecode/templates/base/base.html:326
 
#: rhodecode/templates/base/base.html:328
 
#: rhodecode/templates/base/base.html:330
 
msgid "Admin"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/permissions.py:65
 
msgid "disabled"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/permissions.py:67
 
msgid "allowed with manual account activation"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/permissions.py:69
 
msgid "allowed with automatic account activation"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/permissions.py:71
 
msgid "Disabled"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/permissions.py:72
 
msgid "Enabled"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/permissions.py:106
 
msgid "Default permissions updated successfully"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/permissions.py:123
 
msgid "error occurred during update of permissions"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/repos.py:116
 
msgid "--REMOVE FORK--"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/repos.py:144
 
#, python-format
 
msgid "created repository %s from %s"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/repos.py:148
 
#, python-format
 
msgid "created repository %s"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/repos.py:177
 
#: rhodecode/controllers/admin/repos.py:179
 
#, python-format
 
msgid "error occurred during creation of repository %s"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/repos.py:264
 
#: rhodecode/controllers/admin/repos.py:266
 
#, python-format
 
msgid "Cannot delete %s it still contains attached forks"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/repos.py:293
 
#: rhodecode/controllers/admin/repos.py:295
 
msgid "An error occurred during deletion of repository user"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/repos.py:312
 
#: rhodecode/controllers/admin/repos.py:314
 
msgid "An error occurred during deletion of repository users groups"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/repos.py:329
 
#: rhodecode/controllers/admin/repos.py:331
 
msgid "An error occurred during deletion of repository stats"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/repos.py:345
 
#: rhodecode/controllers/admin/repos.py:347
 
msgid "An error occurred during cache invalidation"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/repos.py:365
 
#: rhodecode/controllers/admin/repos.py:367
 
msgid "Updated repository visibility in public journal"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/repos.py:369
 
#: rhodecode/controllers/admin/repos.py:371
 
msgid "An error occurred during setting this repository in public journal"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/repos.py:374 rhodecode/model/forms.py:54
 
#: rhodecode/controllers/admin/repos.py:376 rhodecode/model/forms.py:54
 
msgid "Token mismatch"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/repos.py:387
 
msgid "Pulled from remote location"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/repos.py:389
 
msgid "Pulled from remote location"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/repos.py:391
 
msgid "An error occurred during pull from remote location"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/repos.py:405
 
msgid "Nothing"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/repos.py:407
 
msgid "Nothing"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/repos.py:409
 
#, python-format
 
msgid "Marked repo %s as fork of %s"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/repos.py:411
 
#: rhodecode/controllers/admin/repos.py:413
 
msgid "An error occurred during this operation"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/repos_groups.py:119
 
#, python-format
 
msgid "created repos group %s"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/repos_groups.py:132
 
#, python-format
 
msgid "error occurred during creation of repos group %s"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/repos_groups.py:166
 
#, python-format
 
msgid "updated repos group %s"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/repos_groups.py:179
 
#, python-format
 
msgid "error occurred during update of repos group %s"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/repos_groups.py:198
 
#, python-format
 
msgid "This group contains %s repositores and cannot be deleted"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/repos_groups.py:205
 
#, python-format
 
msgid "removed repos group %s"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/repos_groups.py:210
 
msgid "Cannot delete this group it still contains subgroups"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/repos_groups.py:215
 
#: rhodecode/controllers/admin/repos_groups.py:220
 
#, python-format
 
msgid "error occurred during deletion of repos group %s"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/repos_groups.py:240
 
msgid "An error occurred during deletion of group user"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/repos_groups.py:260
 
msgid "An error occurred during deletion of group users groups"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/settings.py:120
 
#, python-format
 
msgid "Repositories successfully rescanned added: %s,removed: %s"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/settings.py:129
 
msgid "Whoosh reindex task scheduled"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/settings.py:154
 
msgid "Updated application settings"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/settings.py:159
 
#: rhodecode/controllers/admin/settings.py:226
 
msgid "error occurred during updating application settings"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/settings.py:221
 
msgid "Updated mercurial settings"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/settings.py:246
 
msgid "Added new hook"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/settings.py:258
 
msgid "Updated hooks"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/settings.py:262
 
msgid "error occurred during hook creation"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/settings.py:281
 
msgid "Email task created"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/settings.py:336
 
msgid "You can't edit this user since it's crucial for entire application"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/settings.py:365
 
#: rhodecode/controllers/admin/settings.py:367
 
msgid "Your account was updated successfully"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/settings.py:384
 
#: rhodecode/controllers/admin/users.py:132
 
#: rhodecode/controllers/admin/settings.py:387
 
#: rhodecode/controllers/admin/users.py:138
 
#, python-format
 
msgid "error occurred during update of user %s"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/users.py:79
 
#: rhodecode/controllers/admin/users.py:83
 
#, python-format
 
msgid "created user %s"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/users.py:92
 
#: rhodecode/controllers/admin/users.py:95
 
#, python-format
 
msgid "error occurred during creation of user %s"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/users.py:118
 
#: rhodecode/controllers/admin/users.py:124
 
msgid "User updated successfully"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/users.py:149
 
#: rhodecode/controllers/admin/users.py:155
 
msgid "successfully deleted user"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/users.py:154
 
#: rhodecode/controllers/admin/users.py:160
 
msgid "An error occurred during deletion of user"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/users.py:169
 
#: rhodecode/controllers/admin/users.py:175
 
msgid "You can't edit this user"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/users.py:199
 
#: rhodecode/controllers/admin/users_groups.py:215
 
#: rhodecode/controllers/admin/users.py:205
 
#: rhodecode/controllers/admin/users_groups.py:219
 
msgid "Granted 'repository create' permission to user"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/users.py:208
 
#: rhodecode/controllers/admin/users_groups.py:225
 
#: rhodecode/controllers/admin/users.py:214
 
#: rhodecode/controllers/admin/users_groups.py:229
 
msgid "Revoked 'repository create' permission to user"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/users_groups.py:79
 
#: rhodecode/controllers/admin/users_groups.py:84
 
#, python-format
 
msgid "created users group %s"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/users_groups.py:92
 
#: rhodecode/controllers/admin/users_groups.py:95
 
#, python-format
 
msgid "error occurred during creation of users group %s"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/users_groups.py:128
 
#: rhodecode/controllers/admin/users_groups.py:135
 
#, python-format
 
msgid "updated users group %s"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/users_groups.py:148
 
#: rhodecode/controllers/admin/users_groups.py:152
 
#, python-format
 
msgid "error occurred during update of users group %s"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/users_groups.py:165
 
#: rhodecode/controllers/admin/users_groups.py:169
 
msgid "successfully deleted users group"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/users_groups.py:170
 
#: rhodecode/controllers/admin/users_groups.py:174
 
msgid "An error occurred during deletion of users group"
 
msgstr ""
 

	
 
#: rhodecode/lib/auth.py:497
 
msgid "You need to be a registered user to perform this action"
 
msgstr ""
 

	
 
#: rhodecode/lib/auth.py:538
 
msgid "You need to be a signed in to view this page"
 
msgstr ""
 

	
 
#: rhodecode/lib/diffs.py:78
 
msgid "Changeset was too big and was cut off, use diff menu to display this diff"
 
msgstr ""
 

	
 
#: rhodecode/lib/diffs.py:88
 
msgid "No changes detected"
 
msgstr ""
 

	
 
#: rhodecode/lib/helpers.py:415
 
msgid "True"
 
msgstr ""
 

	
 
#: rhodecode/lib/helpers.py:419
 
msgid "False"
 
msgstr ""
 

	
 
#: rhodecode/lib/helpers.py:463
 
msgid "Changeset not found"
 
msgstr ""
 

	
 
#: rhodecode/lib/helpers.py:486
 
#, python-format
 
msgid "Show all combined changesets %s->%s"
 
msgstr ""
 

	
 
#: rhodecode/lib/helpers.py:492
 
msgid "compare view"
 
msgstr ""
 

	
 
#: rhodecode/lib/helpers.py:512
 
msgid "and"
 
msgstr ""
 

	
 
#: rhodecode/lib/helpers.py:513
 
#, python-format
 
msgid "%s more"
 
msgstr ""
 

	
 
#: rhodecode/lib/helpers.py:514 rhodecode/templates/changelog/changelog.html:40
 
msgid "revisions"
 
msgstr ""
 

	
 
#: rhodecode/lib/helpers.py:537
 
msgid "fork name "
 
msgstr ""
 

	
 
#: rhodecode/lib/helpers.py:540
 
#: rhodecode/lib/helpers.py:550
 
msgid "[deleted] repository"
 
msgstr ""
 

	
 
#: rhodecode/lib/helpers.py:541 rhodecode/lib/helpers.py:546
 
#: rhodecode/lib/helpers.py:552 rhodecode/lib/helpers.py:562
 
msgid "[created] repository"
 
msgstr ""
 

	
 
#: rhodecode/lib/helpers.py:542
 
msgid "[created] repository as fork"
 
msgstr ""
 

	
 
#: rhodecode/lib/helpers.py:543 rhodecode/lib/helpers.py:547
 
msgid "[forked] repository"
 
msgstr ""
 

	
 
#: rhodecode/lib/helpers.py:544 rhodecode/lib/helpers.py:548
 
msgid "[updated] repository"
 
msgstr ""
 

	
 
#: rhodecode/lib/helpers.py:545
 
msgid "[delete] repository"
 
msgstr ""
 

	
 
#: rhodecode/lib/helpers.py:549
 
msgid "[pushed] into"
 
msgstr ""
 

	
 
#: rhodecode/lib/helpers.py:550
 
msgid "[committed via RhodeCode] into"
 
msgstr ""
 

	
 
#: rhodecode/lib/helpers.py:551
 
msgid "[pulled from remote] into"
 
msgstr ""
 

	
 
#: rhodecode/lib/helpers.py:552
 
msgid "[pulled] from"
 
msgstr ""
 

	
 
#: rhodecode/lib/helpers.py:553
 
msgid "[started following] repository"
 
msgstr ""
 

	
 
#: rhodecode/lib/helpers.py:554
 
msgid "[created] repository as fork"
 
msgstr ""
 

	
 
#: rhodecode/lib/helpers.py:556 rhodecode/lib/helpers.py:564
 
msgid "[forked] repository"
 
msgstr ""
 

	
 
#: rhodecode/lib/helpers.py:558 rhodecode/lib/helpers.py:566
 
msgid "[updated] repository"
 
msgstr ""
 

	
 
#: rhodecode/lib/helpers.py:560
 
msgid "[delete] repository"
 
msgstr ""
 

	
 
#: rhodecode/lib/helpers.py:568
 
msgid "[created] user"
 
msgstr ""
 

	
 
#: rhodecode/lib/helpers.py:570
 
msgid "[updated] user"
 
msgstr ""
 

	
 
#: rhodecode/lib/helpers.py:572
 
msgid "[created] users group"
 
msgstr ""
 

	
 
#: rhodecode/lib/helpers.py:574
 
msgid "[updated] users group"
 
msgstr ""
 

	
 
#: rhodecode/lib/helpers.py:576
 
msgid "[commented] on revision in repository"
 
msgstr ""
 

	
 
#: rhodecode/lib/helpers.py:578
 
msgid "[pushed] into"
 
msgstr ""
 

	
 
#: rhodecode/lib/helpers.py:580
 
msgid "[committed via RhodeCode] into repository"
 
msgstr ""
 

	
 
#: rhodecode/lib/helpers.py:582
 
msgid "[pulled from remote] into repository"
 
msgstr ""
 

	
 
#: rhodecode/lib/helpers.py:584
 
msgid "[pulled] from"
 
msgstr ""
 

	
 
#: rhodecode/lib/helpers.py:586
 
msgid "[started following] repository"
 
msgstr ""
 

	
 
#: rhodecode/lib/helpers.py:588
 
msgid "[stopped following] repository"
 
msgstr ""
 

	
 
#: rhodecode/lib/helpers.py:732
 
#: rhodecode/lib/helpers.py:752
 
#, python-format
 
msgid " and %s more"
 
msgstr ""
 

	
 
#: rhodecode/lib/helpers.py:736
 
#: rhodecode/lib/helpers.py:756
 
msgid "No Files"
 
msgstr ""
 

	
 
#: rhodecode/lib/utils2.py:335
 
#, python-format
 
msgid "%d year"
 
msgid_plural "%d years"
 
msgstr[0] ""
 
msgstr[1] ""
 

	
 
#: rhodecode/lib/utils2.py:336
 
#, python-format
 
msgid "%d month"
 
msgid_plural "%d months"
 
msgstr[0] ""
 
msgstr[1] ""
 

	
 
#: rhodecode/lib/utils2.py:337
 
#, python-format
 
msgid "%d day"
 
msgid_plural "%d days"
 
msgstr[0] ""
 
msgstr[1] ""
 

	
 
#: rhodecode/lib/utils2.py:338
 
#, python-format
 
msgid "%d hour"
 
msgid_plural "%d hours"
 
msgstr[0] ""
 
msgstr[1] ""
 

	
 
#: rhodecode/lib/utils2.py:339
 
#, python-format
 
msgid "%d minute"
 
msgid_plural "%d minutes"
 
msgstr[0] ""
 
msgstr[1] ""
 

	
 
#: rhodecode/lib/utils2.py:340
 
#, python-format
 
msgid "%d second"
 
msgid_plural "%d seconds"
 
msgstr[0] ""
 
msgstr[1] ""
 

	
 
#: rhodecode/lib/utils2.py:355
 
#, python-format
 
msgid "%s ago"
 
@@ -926,531 +946,531 @@ msgstr ""
 
msgid "Please enter a password"
 
msgstr ""
 

	
 
#: rhodecode/model/forms.py:559
 
#, python-format
 
msgid "Enter %(min)i characters or more"
 
msgstr ""
 

	
 
#: rhodecode/model/notification.py:175
 
msgid "commented on commit"
 
msgstr ""
 

	
 
#: rhodecode/model/notification.py:176
 
msgid "sent message"
 
msgstr ""
 

	
 
#: rhodecode/model/notification.py:177
 
msgid "mentioned you"
 
msgstr ""
 

	
 
#: rhodecode/model/notification.py:178
 
msgid "registered in RhodeCode"
 
msgstr ""
 

	
 
#: rhodecode/model/user.py:235
 
msgid "new user registration"
 
msgstr ""
 

	
 
#: rhodecode/model/user.py:259 rhodecode/model/user.py:279
 
msgid "You can't Edit this user since it's crucial for entire application"
 
msgstr ""
 

	
 
#: rhodecode/model/user.py:300
 
msgid "You can't remove this user since it's crucial for entire application"
 
msgstr ""
 

	
 
#: rhodecode/model/user.py:306
 
#, python-format
 
msgid ""
 
"user \"%s\" still owns %s repositories and cannot be removed. Switch "
 
"owners or remove those repositories. %s"
 
msgstr ""
 

	
 
#: rhodecode/templates/index.html:3
 
msgid "Dashboard"
 
msgstr ""
 

	
 
#: rhodecode/templates/index_base.html:6
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:115
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:31
 
#: rhodecode/templates/bookmarks/bookmarks.html:10
 
#: rhodecode/templates/branches/branches.html:9
 
#: rhodecode/templates/journal/journal.html:31
 
#: rhodecode/templates/tags/tags.html:10
 
msgid "quick filter..."
 
msgstr ""
 

	
 
#: rhodecode/templates/index_base.html:6 rhodecode/templates/base/base.html:218
 
msgid "repositories"
 
msgstr ""
 

	
 
#: rhodecode/templates/index_base.html:13
 
#: rhodecode/templates/index_base.html:15
 
#: rhodecode/templates/admin/repos/repos.html:22
 
msgid "ADD REPOSITORY"
 
msgstr ""
 

	
 
#: rhodecode/templates/index_base.html:29
 
#: rhodecode/templates/admin/repos_groups/repos_groups_add.html:32
 
#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:32
 
#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:33
 
#: rhodecode/templates/admin/users_groups/users_group_add.html:32
 
#: rhodecode/templates/admin/users_groups/users_group_edit.html:33
 
msgid "Group name"
 
msgstr ""
 

	
 
#: rhodecode/templates/index_base.html:30
 
#: rhodecode/templates/index_base.html:67
 
#: rhodecode/templates/index_base.html:132
 
#: rhodecode/templates/index_base.html:158
 
#: rhodecode/templates/admin/repos/repo_add_base.html:47
 
#: rhodecode/templates/admin/repos/repo_edit.html:66
 
#: rhodecode/templates/admin/repos/repos.html:37
 
#: rhodecode/templates/admin/repos/repos.html:84
 
#: rhodecode/templates/admin/repos_groups/repos_groups_add.html:41
 
#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:41
 
#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:34
 
#: rhodecode/templates/forks/fork.html:49
 
#: rhodecode/templates/settings/repo_settings.html:57
 
#: rhodecode/templates/summary/summary.html:100
 
msgid "Description"
 
msgstr ""
 

	
 
#: rhodecode/templates/index_base.html:40
 
#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:46
 
msgid "Repositories group"
 
msgstr ""
 

	
 
#: rhodecode/templates/index_base.html:66
 
#: rhodecode/templates/index_base.html:156
 
#: rhodecode/templates/admin/repos/repo_add_base.html:9
 
#: rhodecode/templates/admin/repos/repo_edit.html:32
 
#: rhodecode/templates/admin/repos/repos.html:36
 
#: rhodecode/templates/admin/repos/repos.html:82
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:133
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:183
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:249
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:284
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:49
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:99
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:165
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:200
 
#: rhodecode/templates/bookmarks/bookmarks.html:36
 
#: rhodecode/templates/bookmarks/bookmarks_data.html:6
 
#: rhodecode/templates/branches/branches.html:36
 
#: rhodecode/templates/files/files_browser.html:47
 
#: rhodecode/templates/journal/journal.html:50
 
#: rhodecode/templates/journal/journal.html:98
 
#: rhodecode/templates/journal/journal.html:177
 
#: rhodecode/templates/settings/repo_settings.html:31
 
#: rhodecode/templates/summary/summary.html:38
 
#: rhodecode/templates/summary/summary.html:114
 
#: rhodecode/templates/tags/tags.html:36
 
#: rhodecode/templates/tags/tags_data.html:6
 
msgid "Name"
 
msgstr ""
 

	
 
#: rhodecode/templates/index_base.html:68
 
#: rhodecode/templates/admin/repos/repos.html:38
 
msgid "Last change"
 
msgstr ""
 

	
 
#: rhodecode/templates/index_base.html:69
 
#: rhodecode/templates/index_base.html:161
 
#: rhodecode/templates/admin/repos/repos.html:39
 
#: rhodecode/templates/admin/repos/repos.html:87
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:251
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:167
 
#: rhodecode/templates/journal/journal.html:179
 
msgid "Tip"
 
msgstr ""
 

	
 
#: rhodecode/templates/index_base.html:70
 
#: rhodecode/templates/index_base.html:163
 
#: rhodecode/templates/admin/repos/repo_edit.html:103
 
#: rhodecode/templates/admin/repos/repos.html:89
 
msgid "Owner"
 
msgstr ""
 

	
 
#: rhodecode/templates/index_base.html:71
 
#: rhodecode/templates/journal/public_journal.html:20
 
#: rhodecode/templates/summary/summary.html:43
 
#: rhodecode/templates/summary/summary.html:46
 
msgid "RSS"
 
msgstr ""
 

	
 
#: rhodecode/templates/index_base.html:72
 
#: rhodecode/templates/journal/public_journal.html:23
 
msgid "Atom"
 
msgstr ""
 

	
 
#: rhodecode/templates/index_base.html:102
 
#: rhodecode/templates/index_base.html:104
 
#, python-format
 
msgid "Subscribe to %s rss feed"
 
msgstr ""
 

	
 
#: rhodecode/templates/index_base.html:109
 
#: rhodecode/templates/index_base.html:111
 
#, python-format
 
msgid "Subscribe to %s atom feed"
 
msgstr ""
 

	
 
#: rhodecode/templates/index_base.html:130
 
msgid "Group Name"
 
msgstr ""
 

	
 
#: rhodecode/templates/index_base.html:148
 
#: rhodecode/templates/index_base.html:188
 
#: rhodecode/templates/admin/repos/repos.html:112
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:270
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:186
 
#: rhodecode/templates/bookmarks/bookmarks.html:60
 
#: rhodecode/templates/branches/branches.html:60
 
#: rhodecode/templates/journal/journal.html:202
 
#: rhodecode/templates/tags/tags.html:60
 
msgid "Click to sort ascending"
 
msgstr ""
 

	
 
#: rhodecode/templates/index_base.html:149
 
#: rhodecode/templates/index_base.html:189
 
#: rhodecode/templates/admin/repos/repos.html:113
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:271
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:187
 
#: rhodecode/templates/bookmarks/bookmarks.html:61
 
#: rhodecode/templates/branches/branches.html:61
 
#: rhodecode/templates/journal/journal.html:203
 
#: rhodecode/templates/tags/tags.html:61
 
msgid "Click to sort descending"
 
msgstr ""
 

	
 
#: rhodecode/templates/index_base.html:159
 
#: rhodecode/templates/admin/repos/repos.html:85
 
msgid "Last Change"
 
msgstr ""
 

	
 
#: rhodecode/templates/index_base.html:190
 
#: rhodecode/templates/admin/repos/repos.html:114
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:272
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:188
 
#: rhodecode/templates/bookmarks/bookmarks.html:62
 
#: rhodecode/templates/branches/branches.html:62
 
#: rhodecode/templates/journal/journal.html:204
 
#: rhodecode/templates/tags/tags.html:62
 
msgid "No records found."
 
msgstr ""
 

	
 
#: rhodecode/templates/index_base.html:191
 
#: rhodecode/templates/admin/repos/repos.html:115
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:273
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:189
 
#: rhodecode/templates/bookmarks/bookmarks.html:63
 
#: rhodecode/templates/branches/branches.html:63
 
#: rhodecode/templates/journal/journal.html:205
 
#: rhodecode/templates/tags/tags.html:63
 
msgid "Data error."
 
msgstr ""
 

	
 
#: rhodecode/templates/index_base.html:192
 
#: rhodecode/templates/admin/repos/repos.html:116
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:274
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:190
 
#: rhodecode/templates/bookmarks/bookmarks.html:64
 
#: rhodecode/templates/branches/branches.html:64
 
#: rhodecode/templates/journal/journal.html:206
 
#: rhodecode/templates/tags/tags.html:64
 
msgid "Loading..."
 
msgstr ""
 

	
 
#: rhodecode/templates/login.html:5 rhodecode/templates/login.html:54
 
msgid "Sign In"
 
msgstr ""
 

	
 
#: rhodecode/templates/login.html:21
 
msgid "Sign In to"
 
msgstr ""
 

	
 
#: rhodecode/templates/login.html:31 rhodecode/templates/register.html:20
 
#: rhodecode/templates/admin/admin_log.html:5
 
#: rhodecode/templates/admin/users/user_add.html:32
 
#: rhodecode/templates/admin/users/user_edit.html:50
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:49
 
#: rhodecode/templates/admin/users/user_edit_my_account_form.html:26
 
#: rhodecode/templates/base/base.html:83
 
#: rhodecode/templates/summary/summary.html:113
 
msgid "Username"
 
msgstr ""
 

	
 
#: rhodecode/templates/login.html:40 rhodecode/templates/register.html:29
 
#: rhodecode/templates/admin/ldap/ldap.html:46
 
#: rhodecode/templates/admin/users/user_add.html:41
 
#: rhodecode/templates/base/base.html:92
 
msgid "Password"
 
msgstr ""
 

	
 
#: rhodecode/templates/login.html:50
 
msgid "Remember me"
 
msgstr ""
 

	
 
#: rhodecode/templates/login.html:60
 
msgid "Forgot your password ?"
 
msgstr ""
 

	
 
#: rhodecode/templates/login.html:63 rhodecode/templates/base/base.html:103
 
msgid "Don't have an account ?"
 
msgstr ""
 

	
 
#: rhodecode/templates/password_reset.html:5
 
msgid "Reset your password"
 
msgstr ""
 

	
 
#: rhodecode/templates/password_reset.html:11
 
msgid "Reset your password to"
 
msgstr ""
 

	
 
#: rhodecode/templates/password_reset.html:21
 
msgid "Email address"
 
msgstr ""
 

	
 
#: rhodecode/templates/password_reset.html:30
 
msgid "Reset my password"
 
msgstr ""
 

	
 
#: rhodecode/templates/password_reset.html:31
 
msgid "Password reset link will be send to matching email address"
 
msgstr ""
 

	
 
#: rhodecode/templates/register.html:5 rhodecode/templates/register.html:74
 
msgid "Sign Up"
 
msgstr ""
 

	
 
#: rhodecode/templates/register.html:11
 
msgid "Sign Up to"
 
msgstr ""
 

	
 
#: rhodecode/templates/register.html:38
 
msgid "Re-enter password"
 
msgstr ""
 

	
 
#: rhodecode/templates/register.html:47
 
#: rhodecode/templates/admin/users/user_add.html:59
 
#: rhodecode/templates/admin/users/user_edit.html:86
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:76
 
#: rhodecode/templates/admin/users/user_edit_my_account_form.html:53
 
msgid "First Name"
 
msgstr ""
 

	
 
#: rhodecode/templates/register.html:56
 
#: rhodecode/templates/admin/users/user_add.html:68
 
#: rhodecode/templates/admin/users/user_edit.html:95
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:85
 
#: rhodecode/templates/admin/users/user_edit_my_account_form.html:62
 
msgid "Last Name"
 
msgstr ""
 

	
 
#: rhodecode/templates/register.html:65
 
#: rhodecode/templates/admin/users/user_add.html:77
 
#: rhodecode/templates/admin/users/user_edit.html:104
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:94
 
#: rhodecode/templates/admin/users/user_edit_my_account_form.html:71
 
#: rhodecode/templates/summary/summary.html:115
 
msgid "Email"
 
msgstr ""
 

	
 
#: rhodecode/templates/register.html:76
 
msgid "Your account will be activated right after registration"
 
msgstr ""
 

	
 
#: rhodecode/templates/register.html:78
 
msgid "Your account must wait for activation by administrator"
 
msgstr ""
 

	
 
#: rhodecode/templates/repo_switcher_list.html:11
 
#: rhodecode/templates/admin/repos/repo_add_base.html:56
 
#: rhodecode/templates/admin/repos/repo_edit.html:76
 
#: rhodecode/templates/settings/repo_settings.html:67
 
msgid "Private repository"
 
msgstr ""
 

	
 
#: rhodecode/templates/repo_switcher_list.html:16
 
msgid "Public repository"
 
msgstr ""
 

	
 
#: rhodecode/templates/switch_to_list.html:3
 
#: rhodecode/templates/branches/branches.html:14
 
msgid "branches"
 
msgstr ""
 

	
 
#: rhodecode/templates/switch_to_list.html:10
 
#: rhodecode/templates/branches/branches_data.html:51
 
msgid "There are no branches yet"
 
msgstr ""
 

	
 
#: rhodecode/templates/switch_to_list.html:15
 
#: rhodecode/templates/shortlog/shortlog_data.html:10
 
#: rhodecode/templates/tags/tags.html:15
 
msgid "tags"
 
msgstr ""
 

	
 
#: rhodecode/templates/switch_to_list.html:22
 
#: rhodecode/templates/tags/tags_data.html:33
 
msgid "There are no tags yet"
 
msgstr ""
 

	
 
#: rhodecode/templates/switch_to_list.html:28
 
#: rhodecode/templates/bookmarks/bookmarks.html:15
 
msgid "bookmarks"
 
msgstr ""
 

	
 
#: rhodecode/templates/switch_to_list.html:35
 
#: rhodecode/templates/bookmarks/bookmarks_data.html:32
 
msgid "There are no bookmarks yet"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/admin.html:5
 
#: rhodecode/templates/admin/admin.html:9
 
msgid "Admin journal"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/admin_log.html:6
 
#: rhodecode/templates/admin/repos/repos.html:41
 
#: rhodecode/templates/admin/repos/repos.html:90
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:135
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:136
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:51
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:52
 
#: rhodecode/templates/journal/journal.html:52
 
#: rhodecode/templates/journal/journal.html:53
 
msgid "Action"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/admin_log.html:7
 
msgid "Repository"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/admin_log.html:8
 
#: rhodecode/templates/bookmarks/bookmarks.html:37
 
#: rhodecode/templates/bookmarks/bookmarks_data.html:7
 
#: rhodecode/templates/branches/branches.html:37
 
#: rhodecode/templates/tags/tags.html:37
 
#: rhodecode/templates/tags/tags_data.html:7
 
msgid "Date"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/admin_log.html:9
 
msgid "From IP"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/admin_log.html:52
 
#: rhodecode/templates/admin/admin_log.html:53
 
msgid "No actions yet"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/ldap/ldap.html:5
 
msgid "LDAP administration"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/ldap/ldap.html:11
 
msgid "Ldap"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/ldap/ldap.html:28
 
msgid "Connection settings"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/ldap/ldap.html:30
 
msgid "Enable LDAP"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/ldap/ldap.html:34
 
msgid "Host"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/ldap/ldap.html:38
 
msgid "Port"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/ldap/ldap.html:42
 
msgid "Account"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/ldap/ldap.html:50
 
msgid "Connection security"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/ldap/ldap.html:54
 
msgid "Certificate Checks"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/ldap/ldap.html:57
 
msgid "Search settings"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/ldap/ldap.html:59
 
msgid "Base DN"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/ldap/ldap.html:63
 
msgid "LDAP Filter"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/ldap/ldap.html:67
 
msgid "LDAP Search Scope"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/ldap/ldap.html:70
 
msgid "Attribute mappings"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/ldap/ldap.html:72
 
msgid "Login Attribute"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/ldap/ldap.html:76
 
msgid "First Name Attribute"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/ldap/ldap.html:80
 
msgid "Last Name Attribute"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/ldap/ldap.html:84
 
msgid "E-mail Attribute"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/ldap/ldap.html:89
 
#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:66
 
#: rhodecode/templates/admin/settings/hooks.html:73
 
#: rhodecode/templates/admin/users/user_edit.html:129
 
#: rhodecode/templates/admin/users/user_edit.html:154
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:102
 
#: rhodecode/templates/admin/users/user_edit_my_account_form.html:79
 
#: rhodecode/templates/admin/users_groups/users_group_edit.html:115
 
#: rhodecode/templates/settings/repo_settings.html:84
 
msgid "Save"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/notifications/notifications.html:5
 
#: rhodecode/templates/admin/notifications/notifications.html:9
 
msgid "My Notifications"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/notifications/notifications.html:29
 
msgid "Mark all read"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/notifications/notifications_data.html:38
 
msgid "No notifications here yet"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/notifications/show_notification.html:5
 
#: rhodecode/templates/admin/notifications/show_notification.html:11
 
msgid "Show notification"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/notifications/show_notification.html:9
 
msgid "Notifications"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/permissions/permissions.html:5
 
msgid "Permissions administration"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/permissions/permissions.html:11
 
#: rhodecode/templates/admin/repos/repo_edit.html:116
 
#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:58
 
#: rhodecode/templates/admin/users/user_edit.html:139
 
#: rhodecode/templates/admin/users_groups/users_group_edit.html:100
 
#: rhodecode/templates/settings/repo_settings.html:77
 
msgid "Permissions"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/permissions/permissions.html:24
 
msgid "Default permissions"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/permissions/permissions.html:31
 
msgid "Anonymous access"
 
msgstr ""
 

	
 
@@ -1512,97 +1532,97 @@ msgstr ""
 
#: rhodecode/templates/forks/fork.html:41
 
#: rhodecode/templates/settings/repo_settings.html:48
 
msgid "Repository group"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/repos/repo_add_base.html:33
 
#: rhodecode/templates/admin/repos/repo_edit.html:53
 
#: rhodecode/templates/settings/repo_settings.html:52
 
msgid "Optional select a group to put this repository into."
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/repos/repo_add_base.html:38
 
#: rhodecode/templates/admin/repos/repo_edit.html:58
 
msgid "Type"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/repos/repo_add_base.html:42
 
msgid "Type of repository to create."
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/repos/repo_add_base.html:51
 
#: rhodecode/templates/admin/repos/repo_edit.html:70
 
#: rhodecode/templates/settings/repo_settings.html:61
 
msgid "Keep it short and to the point. Use a README file for longer descriptions."
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/repos/repo_add_base.html:60
 
#: rhodecode/templates/admin/repos/repo_edit.html:80
 
#: rhodecode/templates/settings/repo_settings.html:71
 
msgid ""
 
"Private repositories are only visible to people explicitly added as "
 
"collaborators."
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/repos/repo_add_base.html:64
 
msgid "add"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/repos/repo_add_create_repository.html:9
 
msgid "add new repository"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/repos/repo_edit.html:5
 
msgid "Edit repository"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/repos/repo_edit.html:13
 
#: rhodecode/templates/admin/users/user_edit.html:13
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:155
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:71
 
#: rhodecode/templates/admin/users_groups/users_group_edit.html:13
 
#: rhodecode/templates/files/files_source.html:32
 
#: rhodecode/templates/journal/journal.html:72
 
msgid "edit"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/repos/repo_edit.html:40
 
#: rhodecode/templates/settings/repo_settings.html:39
 
msgid "Clone uri"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/repos/repo_edit.html:85
 
msgid "Enable statistics"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/repos/repo_edit.html:89
 
msgid "Enable statistics window on summary page."
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/repos/repo_edit.html:94
 
msgid "Enable downloads"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/repos/repo_edit.html:98
 
msgid "Enable download menu on summary page."
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/repos/repo_edit.html:108
 
msgid "Change owner of this repository."
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/repos/repo_edit.html:134
 
msgid "Administration"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/repos/repo_edit.html:137
 
msgid "Statistics"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/repos/repo_edit.html:141
 
msgid "Reset current statistics"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/repos/repo_edit.html:141
 
msgid "Confirm to remove current statistics"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/repos/repo_edit.html:144
 
@@ -1670,197 +1690,186 @@ msgid ""
 
"unaccesible for RhodeCode and VCS systems.\n"
 
"                         If you need fully delete it from filesystem "
 
"please do it manually"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/repos/repo_edit.html:213
 
msgid "Set as fork"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/repos/repo_edit.html:222
 
msgid "Manually set this repository as a fork of another"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/repos/repo_edit_perms.html:3
 
#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:3
 
msgid "none"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/repos/repo_edit_perms.html:4
 
#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:4
 
msgid "read"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/repos/repo_edit_perms.html:5
 
#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:5
 
msgid "write"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/repos/repo_edit_perms.html:6
 
#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:6
 
#: rhodecode/templates/admin/users/users.html:38
 
#: rhodecode/templates/base/base.html:214
 
msgid "admin"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/repos/repo_edit_perms.html:7
 
#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:7
 
msgid "member"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/repos/repo_edit_perms.html:16
 
#: rhodecode/templates/data_table/_dt_elements.html:61
 
#: rhodecode/templates/journal/journal.html:123
 
#: rhodecode/templates/summary/summary.html:71
 
msgid "private repository"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/repos/repo_edit_perms.html:33
 
#: rhodecode/templates/admin/repos/repo_edit_perms.html:53
 
#: rhodecode/templates/admin/repos/repo_edit_perms.html:58
 
#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:23
 
#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:42
 
msgid "revoke"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/repos/repo_edit_perms.html:75
 
#: rhodecode/templates/admin/repos/repo_edit_perms.html:80
 
#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:64
 
msgid "Add another member"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/repos/repo_edit_perms.html:89
 
#: rhodecode/templates/admin/repos/repo_edit_perms.html:94
 
#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:78
 
msgid "Failed to remove user"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/repos/repo_edit_perms.html:104
 
#: rhodecode/templates/admin/repos/repo_edit_perms.html:109
 
#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:93
 
msgid "Failed to remove users group"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/repos/repo_edit_perms.html:123
 
#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:112
 
msgid "Group"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/repos/repo_edit_perms.html:124
 
#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:113
 
#: rhodecode/templates/admin/users_groups/users_groups.html:33
 
msgid "members"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/repos/repos.html:5
 
msgid "Repositories administration"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/repos/repos.html:40
 
#: rhodecode/templates/summary/summary.html:107
 
msgid "Contact"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/repos/repos.html:68
 
#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:54
 
#: rhodecode/templates/admin/users/users.html:55
 
#: rhodecode/templates/admin/users_groups/users_groups.html:44
 
msgid "delete"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/repos/repos.html:68
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:158
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:74
 
#, python-format
 
msgid "Confirm to delete this repository: %s"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/repos_groups/repos_groups.html:8
 
msgid "Groups"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/repos_groups/repos_groups.html:12
 
msgid "with"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/repos_groups/repos_groups_add.html:5
 
msgid "Add repos group"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/repos_groups/repos_groups_add.html:10
 
#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:10
 
msgid "Repos groups"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/repos_groups/repos_groups_add.html:12
 
msgid "add new repos group"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/repos_groups/repos_groups_add.html:50
 
#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:50
 
msgid "Group parent"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/repos_groups/repos_groups_add.html:58
 
#: rhodecode/templates/admin/users/user_add.html:94
 
#: rhodecode/templates/admin/users_groups/users_group_add.html:49
 
#: rhodecode/templates/admin/users_groups/users_group_edit.html:90
 
msgid "save"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:5
 
msgid "Edit repos group"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:12
 
msgid "edit repos group"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:67
 
#: rhodecode/templates/admin/settings/settings.html:112
 
#: rhodecode/templates/admin/settings/settings.html:177
 
#: rhodecode/templates/admin/users/user_edit.html:130
 
#: rhodecode/templates/admin/users/user_edit.html:155
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:103
 
#: rhodecode/templates/admin/users/user_edit_my_account_form.html:80
 
#: rhodecode/templates/admin/users_groups/users_group_edit.html:116
 
#: rhodecode/templates/files/files_add.html:82
 
#: rhodecode/templates/files/files_edit.html:68
 
#: rhodecode/templates/settings/repo_settings.html:85
 
msgid "Reset"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:5
 
msgid "Repositories groups administration"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:22
 
msgid "ADD NEW GROUP"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:35
 
msgid "Number of toplevel repositories"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:36
 
#: rhodecode/templates/admin/users/users.html:40
 
#: rhodecode/templates/admin/users_groups/users_groups.html:35
 
msgid "action"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:54
 
#, python-format
 
msgid "Confirm to delete this group: %s"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:62
 
msgid "There are no repositories groups yet"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/settings/hooks.html:5
 
#: rhodecode/templates/admin/settings/settings.html:5
 
msgid "Settings administration"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/settings/hooks.html:9
 
#: rhodecode/templates/admin/settings/settings.html:9
 
#: rhodecode/templates/settings/repo_settings.html:5
 
#: rhodecode/templates/settings/repo_settings.html:13
 
msgid "Settings"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/settings/hooks.html:24
 
msgid "Built in hooks - read only"
 
@@ -1994,179 +2003,179 @@ msgid "Test Email"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/settings/settings.html:199
 
msgid "Email to"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/settings/settings.html:207
 
msgid "Send"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/settings/settings.html:213
 
msgid "System Info and Packages"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/settings/settings.html:216
 
msgid "show"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/users/user_add.html:5
 
msgid "Add user"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/users/user_add.html:10
 
#: rhodecode/templates/admin/users/user_edit.html:11
 
#: rhodecode/templates/admin/users/users.html:9
 
msgid "Users"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/users/user_add.html:12
 
msgid "add new user"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/users/user_add.html:50
 
msgid "Password confirmation"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/users/user_add.html:86
 
#: rhodecode/templates/admin/users/user_edit.html:113
 
#: rhodecode/templates/admin/users_groups/users_group_add.html:41
 
#: rhodecode/templates/admin/users_groups/users_group_edit.html:42
 
msgid "Active"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/users/user_edit.html:5
 
msgid "Edit user"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/users/user_edit.html:34
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:33
 
#: rhodecode/templates/admin/users/user_edit_my_account_form.html:10
 
msgid "Change your avatar at"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/users/user_edit.html:35
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:34
 
#: rhodecode/templates/admin/users/user_edit_my_account_form.html:11
 
msgid "Using"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/users/user_edit.html:43
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:43
 
#: rhodecode/templates/admin/users/user_edit_my_account_form.html:20
 
msgid "API key"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/users/user_edit.html:59
 
msgid "LDAP DN"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/users/user_edit.html:68
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:58
 
#: rhodecode/templates/admin/users/user_edit_my_account_form.html:35
 
msgid "New password"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/users/user_edit.html:77
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:67
 
#: rhodecode/templates/admin/users/user_edit_my_account_form.html:44
 
msgid "New password confirmation"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/users/user_edit.html:147
 
#: rhodecode/templates/admin/users_groups/users_group_edit.html:108
 
msgid "Create repositories"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:5
 
#: rhodecode/templates/base/base.html:124
 
msgid "My account"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:9
 
msgid "My Account"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:116
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:32
 
#: rhodecode/templates/journal/journal.html:32
 
msgid "My repos"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:116
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:32
 
msgid "My permissions"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:121
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:37
 
#: rhodecode/templates/journal/journal.html:37
 
msgid "ADD"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:134
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:50
 
#: rhodecode/templates/bookmarks/bookmarks.html:40
 
#: rhodecode/templates/bookmarks/bookmarks_data.html:9
 
#: rhodecode/templates/branches/branches.html:40
 
#: rhodecode/templates/journal/journal.html:51
 
#: rhodecode/templates/tags/tags.html:40
 
#: rhodecode/templates/tags/tags_data.html:9
 
msgid "Revision"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:155
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:71
 
#: rhodecode/templates/journal/journal.html:72
 
msgid "private"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:165
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:81
 
#: rhodecode/templates/journal/journal.html:85
 
msgid "No repositories yet"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:167
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:83
 
#: rhodecode/templates/journal/journal.html:87
 
msgid "create one now"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:184
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:285
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:100
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:201
 
msgid "Permission"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/users/users.html:5
 
msgid "Users administration"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/users/users.html:23
 
msgid "ADD NEW USER"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/users/users.html:33
 
msgid "username"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/users/users.html:34
 
#: rhodecode/templates/branches/branches_data.html:6
 
msgid "name"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/users/users.html:35
 
msgid "lastname"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/users/users.html:36
 
msgid "last login"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/users/users.html:37
 
#: rhodecode/templates/admin/users_groups/users_groups.html:34
 
msgid "active"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/users/users.html:39
 
#: rhodecode/templates/base/base.html:223
 
msgid "ldap"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/users/users.html:56
 
#, python-format
 
msgid "Confirm to delete this user: %s"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/users_groups/users_group_add.html:5
 
msgid "Add users group"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/users_groups/users_group_add.html:10
 
@@ -2177,96 +2186,101 @@ msgstr ""
 
#: rhodecode/templates/admin/users_groups/users_group_add.html:12
 
msgid "add new users group"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/users_groups/users_group_edit.html:5
 
msgid "Edit users group"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/users_groups/users_group_edit.html:11
 
msgid "UsersGroups"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/users_groups/users_group_edit.html:50
 
msgid "Members"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/users_groups/users_group_edit.html:58
 
msgid "Choosen group members"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/users_groups/users_group_edit.html:61
 
msgid "Remove all elements"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/users_groups/users_group_edit.html:75
 
msgid "Available members"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/users_groups/users_group_edit.html:79
 
msgid "Add all elements"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/users_groups/users_group_edit.html:126
 
msgid "Group members"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/users_groups/users_groups.html:5
 
msgid "Users groups administration"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/users_groups/users_groups.html:23
 
msgid "ADD NEW USER GROUP"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/users_groups/users_groups.html:32
 
msgid "group name"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/users_groups/users_groups.html:33
 
#: rhodecode/templates/base/root.html:46
 
msgid "members"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/users_groups/users_groups.html:45
 
#, python-format
 
msgid "Confirm to delete this users group: %s"
 
msgstr ""
 

	
 
#: rhodecode/templates/base/base.html:41
 
msgid "Submit a bug"
 
msgstr ""
 

	
 
#: rhodecode/templates/base/base.html:77
 
msgid "Login to your account"
 
msgstr ""
 

	
 
#: rhodecode/templates/base/base.html:100
 
msgid "Forgot password ?"
 
msgstr ""
 

	
 
#: rhodecode/templates/base/base.html:107
 
msgid "Log In"
 
msgstr ""
 

	
 
#: rhodecode/templates/base/base.html:118
 
msgid "Inbox"
 
msgstr ""
 

	
 
#: rhodecode/templates/base/base.html:122
 
#: rhodecode/templates/base/base.html:289
 
#: rhodecode/templates/base/base.html:291
 
#: rhodecode/templates/base/base.html:293
 
msgid "Home"
 
msgstr ""
 

	
 
#: rhodecode/templates/base/base.html:123
 
#: rhodecode/templates/base/base.html:298
 
#: rhodecode/templates/base/base.html:300
 
#: rhodecode/templates/base/base.html:302
 
#: rhodecode/templates/journal/journal.html:4
 
#: rhodecode/templates/journal/journal.html:17
 
#: rhodecode/templates/journal/public_journal.html:4
 
msgid "Journal"
 
msgstr ""
 

	
 
#: rhodecode/templates/base/base.html:125
 
msgid "Log Out"
 
msgstr ""
 

	
 
#: rhodecode/templates/base/base.html:144
 
msgid "Switch repository"
 
@@ -2336,111 +2350,115 @@ msgstr ""
 
msgid "fork"
 
msgstr ""
 

	
 
#: rhodecode/templates/base/base.html:210
 
msgid "search"
 
msgstr ""
 

	
 
#: rhodecode/templates/base/base.html:217
 
msgid "journal"
 
msgstr ""
 

	
 
#: rhodecode/templates/base/base.html:219
 
msgid "repositories groups"
 
msgstr ""
 

	
 
#: rhodecode/templates/base/base.html:220
 
msgid "users"
 
msgstr ""
 

	
 
#: rhodecode/templates/base/base.html:221
 
msgid "users groups"
 
msgstr ""
 

	
 
#: rhodecode/templates/base/base.html:222
 
msgid "permissions"
 
msgstr ""
 

	
 
#: rhodecode/templates/base/base.html:235
 
#: rhodecode/templates/base/base.html:237
 
#: rhodecode/templates/followers/followers.html:5
 
msgid "Followers"
 
msgstr ""
 

	
 
#: rhodecode/templates/base/base.html:243
 
#: rhodecode/templates/base/base.html:245
 
#: rhodecode/templates/forks/forks.html:5
 
msgid "Forks"
 
msgstr ""
 

	
 
#: rhodecode/templates/base/base.html:316
 
#: rhodecode/templates/base/base.html:318
 
#: rhodecode/templates/base/base.html:320
 
#: rhodecode/templates/search/search.html:4
 
#: rhodecode/templates/search/search.html:24
 
#: rhodecode/templates/search/search.html:46
 
msgid "Search"
 
msgstr ""
 

	
 
#: rhodecode/templates/base/root.html:53
 
#: rhodecode/templates/base/root.html:42
 
msgid "add another comment"
 
msgstr ""
 

	
 
#: rhodecode/templates/base/root.html:54
 
#: rhodecode/templates/base/root.html:43
 
#: rhodecode/templates/journal/journal.html:111
 
#: rhodecode/templates/summary/summary.html:52
 
msgid "Stop following this repository"
 
msgstr ""
 

	
 
#: rhodecode/templates/base/root.html:55
 
#: rhodecode/templates/base/root.html:44
 
#: rhodecode/templates/summary/summary.html:56
 
msgid "Start following this repository"
 
msgstr ""
 

	
 
#: rhodecode/templates/base/root.html:45
 
msgid "Group"
 
msgstr ""
 

	
 
#: rhodecode/templates/bookmarks/bookmarks.html:5
 
msgid "Bookmarks"
 
msgstr ""
 

	
 
#: rhodecode/templates/bookmarks/bookmarks.html:39
 
#: rhodecode/templates/bookmarks/bookmarks_data.html:8
 
#: rhodecode/templates/branches/branches.html:39
 
#: rhodecode/templates/tags/tags.html:39
 
#: rhodecode/templates/tags/tags_data.html:8
 
msgid "Author"
 
msgstr ""
 

	
 
#: rhodecode/templates/branches/branches_data.html:7
 
msgid "date"
 
msgstr ""
 

	
 
#: rhodecode/templates/branches/branches_data.html:8
 
#: rhodecode/templates/shortlog/shortlog_data.html:8
 
msgid "author"
 
msgstr ""
 

	
 
#: rhodecode/templates/branches/branches_data.html:9
 
#: rhodecode/templates/shortlog/shortlog_data.html:5
 
msgid "revision"
 
msgstr ""
 

	
 
#: rhodecode/templates/changelog/changelog.html:15
 
#, python-format
 
msgid "showing %d out of %d revision"
 
msgid_plural "showing %d out of %d revisions"
 
msgstr[0] ""
 
msgstr[1] ""
 

	
 
#: rhodecode/templates/changelog/changelog.html:38
 
msgid "Show"
 
msgstr ""
 

	
 
#: rhodecode/templates/changelog/changelog.html:64
 
#: rhodecode/templates/summary/summary.html:352
 
msgid "show more"
 
msgstr ""
 

	
 
#: rhodecode/templates/changelog/changelog.html:68
 
msgid "Affected number of files, click to show more details"
 
msgstr ""
 

	
 
#: rhodecode/templates/changelog/changelog.html:82
 
#: rhodecode/templates/changeset/changeset.html:72
 
@@ -2479,158 +2497,158 @@ msgstr ""
 
msgid "Show selected changes __S -> __E"
 
msgstr ""
 

	
 
#: rhodecode/templates/changelog/changelog.html:235
 
msgid "There are no changes yet"
 
msgstr ""
 

	
 
#: rhodecode/templates/changelog/changelog_details.html:2
 
#: rhodecode/templates/changeset/changeset.html:60
 
msgid "removed"
 
msgstr ""
 

	
 
#: rhodecode/templates/changelog/changelog_details.html:3
 
#: rhodecode/templates/changeset/changeset.html:61
 
msgid "changed"
 
msgstr ""
 

	
 
#: rhodecode/templates/changelog/changelog_details.html:4
 
#: rhodecode/templates/changeset/changeset.html:62
 
msgid "added"
 
msgstr ""
 

	
 
#: rhodecode/templates/changelog/changelog_details.html:6
 
#: rhodecode/templates/changelog/changelog_details.html:7
 
#: rhodecode/templates/changelog/changelog_details.html:8
 
#: rhodecode/templates/changeset/changeset.html:64
 
#: rhodecode/templates/changeset/changeset.html:65
 
#: rhodecode/templates/changeset/changeset.html:66
 
#, python-format
 
msgid "affected %s files"
 
msgstr ""
 

	
 
#: rhodecode/templates/changeset/changeset.html:6
 
#: rhodecode/templates/changeset/changeset.html:14
 
msgid "Changeset"
 
msgstr ""
 

	
 
#: rhodecode/templates/changeset/changeset.html:37
 
#: rhodecode/templates/changeset/diff_block.html:20
 
msgid "raw diff"
 
msgstr ""
 

	
 
#: rhodecode/templates/changeset/changeset.html:38
 
#: rhodecode/templates/changeset/diff_block.html:21
 
msgid "download diff"
 
msgstr ""
 

	
 
#: rhodecode/templates/changeset/changeset.html:42
 
#: rhodecode/templates/changeset/changeset_file_comment.html:69
 
#: rhodecode/templates/changeset/changeset_file_comment.html:71
 
#, python-format
 
msgid "%d comment"
 
msgid_plural "%d comments"
 
msgstr[0] ""
 
msgstr[1] ""
 

	
 
#: rhodecode/templates/changeset/changeset.html:42
 
#: rhodecode/templates/changeset/changeset_file_comment.html:69
 
#: rhodecode/templates/changeset/changeset_file_comment.html:71
 
#, python-format
 
msgid "(%d inline)"
 
msgid_plural "(%d inline)"
 
msgstr[0] ""
 
msgstr[1] ""
 

	
 
#: rhodecode/templates/changeset/changeset.html:97
 
#, python-format
 
msgid "%s files affected with %s insertions and %s deletions:"
 
msgstr ""
 

	
 
#: rhodecode/templates/changeset/changeset.html:113
 
msgid "Changeset was too big and was cut off..."
 
msgstr ""
 

	
 
#: rhodecode/templates/changeset/changeset_file_comment.html:35
 
msgid "Submitting..."
 
msgstr ""
 

	
 
#: rhodecode/templates/changeset/changeset_file_comment.html:38
 
msgid "Commenting on line {1}."
 
msgstr ""
 

	
 
#: rhodecode/templates/changeset/changeset_file_comment.html:39
 
#: rhodecode/templates/changeset/changeset_file_comment.html:100
 
#: rhodecode/templates/changeset/changeset_file_comment.html:102
 
#, python-format
 
msgid "Comments parsed using %s syntax with %s support."
 
msgstr ""
 

	
 
#: rhodecode/templates/changeset/changeset_file_comment.html:41
 
#: rhodecode/templates/changeset/changeset_file_comment.html:102
 
#: rhodecode/templates/changeset/changeset_file_comment.html:104
 
msgid "Use @username inside this text to send notification to this RhodeCode user"
 
msgstr ""
 

	
 
#: rhodecode/templates/changeset/changeset_file_comment.html:47
 
#: rhodecode/templates/changeset/changeset_file_comment.html:107
 
#: rhodecode/templates/changeset/changeset_file_comment.html:49
 
#: rhodecode/templates/changeset/changeset_file_comment.html:110
 
msgid "Comment"
 
msgstr ""
 

	
 
#: rhodecode/templates/changeset/changeset_file_comment.html:48
 
#: rhodecode/templates/changeset/changeset_file_comment.html:59
 
#: rhodecode/templates/changeset/changeset_file_comment.html:50
 
#: rhodecode/templates/changeset/changeset_file_comment.html:61
 
msgid "Hide"
 
msgstr ""
 

	
 
#: rhodecode/templates/changeset/changeset_file_comment.html:55
 
#: rhodecode/templates/changeset/changeset_file_comment.html:57
 
msgid "You need to be logged in to comment."
 
msgstr ""
 

	
 
#: rhodecode/templates/changeset/changeset_file_comment.html:55
 
#: rhodecode/templates/changeset/changeset_file_comment.html:57
 
msgid "Login now"
 
msgstr ""
 

	
 
#: rhodecode/templates/changeset/changeset_file_comment.html:97
 
#: rhodecode/templates/changeset/changeset_file_comment.html:99
 
msgid "Leave a comment"
 
msgstr ""
 

	
 
#: rhodecode/templates/changeset/changeset_range.html:29
 
msgid "Compare View"
 
msgstr ""
 

	
 
#: rhodecode/templates/changeset/changeset_range.html:49
 
msgid "Files affected"
 
msgstr ""
 

	
 
#: rhodecode/templates/changeset/diff_block.html:19
 
msgid "diff"
 
msgstr ""
 

	
 
#: rhodecode/templates/changeset/diff_block.html:27
 
msgid "show inline comments"
 
msgstr ""
 

	
 
#: rhodecode/templates/data_table/_dt_elements.html:33
 
#: rhodecode/templates/data_table/_dt_elements.html:35
 
#: rhodecode/templates/data_table/_dt_elements.html:37
 
#: rhodecode/templates/forks/fork.html:5
 
msgid "Fork"
 
msgstr ""
 

	
 
#: rhodecode/templates/data_table/_dt_elements.html:54
 
#: rhodecode/templates/journal/journal.html:117
 
#: rhodecode/templates/summary/summary.html:63
 
msgid "Mercurial repository"
 
msgstr ""
 

	
 
#: rhodecode/templates/data_table/_dt_elements.html:56
 
#: rhodecode/templates/journal/journal.html:119
 
#: rhodecode/templates/summary/summary.html:66
 
msgid "Git repository"
 
msgstr ""
 

	
 
#: rhodecode/templates/data_table/_dt_elements.html:63
 
#: rhodecode/templates/journal/journal.html:125
 
#: rhodecode/templates/summary/summary.html:73
 
msgid "public repository"
 
msgstr ""
 

	
 
#: rhodecode/templates/data_table/_dt_elements.html:74
 
#: rhodecode/templates/summary/summary.html:82
 
#: rhodecode/templates/summary/summary.html:83
 
msgid "Fork of"
 
@@ -3025,54 +3043,54 @@ msgstr ""
 
msgid "Commit activity by day / author"
 
msgstr ""
 

	
 
#: rhodecode/templates/summary/summary.html:188
 
msgid "Stats gathered: "
 
msgstr ""
 

	
 
#: rhodecode/templates/summary/summary.html:211
 
msgid "Quick start"
 
msgstr ""
 

	
 
#: rhodecode/templates/summary/summary.html:281
 
#, python-format
 
msgid "Download %s as %s"
 
msgstr ""
 

	
 
#: rhodecode/templates/summary/summary.html:638
 
msgid "commits"
 
msgstr ""
 

	
 
#: rhodecode/templates/summary/summary.html:639
 
msgid "files added"
 
msgstr ""
 

	
 
#: rhodecode/templates/summary/summary.html:640
 
msgid "files changed"
 
msgstr ""
 

	
 
#: rhodecode/templates/summary/summary.html:641
 
msgid "files removed"
 
msgstr ""
 

	
 
#: rhodecode/templates/summary/summary.html:644
 
msgid "commit"
 
msgstr ""
 

	
 
#: rhodecode/templates/summary/summary.html:645
 
msgid "file added"
 
msgstr ""
 

	
 
#: rhodecode/templates/summary/summary.html:646
 
msgid "file changed"
 
msgstr ""
 

	
 
#: rhodecode/templates/summary/summary.html:647
 
msgid "file removed"
 
msgstr ""
 

	
 
#~ msgid ""
 
#~ "Changeset was to big and was cut"
 
#~ " off, use diff menu to display "
 
#~ "this diff"
 
#~ msgid "[committed via RhodeCode] into"
 
#~ msgstr ""
 

	
 
#~ msgid "[pulled from remote] into"
 
#~ msgstr ""
 

	
rhodecode/i18n/fr/LC_MESSAGES/rhodecode.po
Show inline comments
 
# French translations for RhodeCode.
 
# Copyright (C) 2011 ORGANIZATION
 
# This file is distributed under the same license as the RhodeCode project.
 
# FIRST AUTHOR <EMAIL@ADDRESS>, 2011.
 
#
 
msgid ""
 
msgstr ""
 
"Project-Id-Version: RhodeCode 1.1.5\n"
 
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
 
"POT-Creation-Date: 2012-05-27 17:41+0200\n"
 
"POT-Creation-Date: 2012-06-03 01:06+0200\n"
 
"PO-Revision-Date: 2012-05-20 11:36+0100\n"
 
"Last-Translator: Vincent Duvert <vincent@duvert.net>\n"
 
"Language-Team: fr <LL@li.org>\n"
 
"Plural-Forms: nplurals=2; plural=(n > 1)\n"
 
"MIME-Version: 1.0\n"
 
"Content-Type: text/plain; charset=utf-8\n"
 
"Content-Transfer-Encoding: 8bit\n"
 
"Generated-By: Babel 0.9.6\n"
 

	
 
#: rhodecode/controllers/changelog.py:96
 
#: rhodecode/controllers/changelog.py:95
 
msgid "All Branches"
 
msgstr "Toutes les branches"
 

	
 
#: rhodecode/controllers/changeset.py:79
 
#: rhodecode/controllers/changeset.py:80
 
msgid "show white space"
 
msgstr "afficher les espaces et tabulations"
 

	
 
#: rhodecode/controllers/changeset.py:86 rhodecode/controllers/changeset.py:93
 
#: rhodecode/controllers/changeset.py:87 rhodecode/controllers/changeset.py:94
 
msgid "ignore white space"
 
msgstr "ignorer les espaces et tabulations"
 

	
 
#: rhodecode/controllers/changeset.py:153
 
#: rhodecode/controllers/changeset.py:154
 
#, python-format
 
msgid "%s line context"
 
msgstr "afficher %s lignes de contexte"
 

	
 
#: rhodecode/controllers/changeset.py:320
 
#: rhodecode/controllers/changeset.py:335 rhodecode/lib/diffs.py:62
 
#: rhodecode/controllers/changeset.py:324
 
#: rhodecode/controllers/changeset.py:339 rhodecode/lib/diffs.py:62
 
msgid "binary file"
 
msgstr "fichier binaire"
 

	
 
#: rhodecode/controllers/error.py:69
 
msgid "Home page"
 
msgstr "Accueil"
 

	
 
#: rhodecode/controllers/error.py:98
 
msgid "The request could not be understood by the server due to malformed syntax."
 
msgstr ""
 
"Le serveur n’a pas pu interpréter la requête à cause d’une erreur de "
 
"syntaxe"
 

	
 
#: rhodecode/controllers/error.py:101
 
msgid "Unauthorized access to resource"
 
msgstr "Accès interdit à cet ressource"
 

	
 
#: rhodecode/controllers/error.py:103
 
msgid "You don't have permission to view this page"
 
msgstr "Vous n’avez pas la permission de voir cette page"
 

	
 
#: rhodecode/controllers/error.py:105
 
msgid "The resource could not be found"
 
msgstr "Ressource introuvable"
 

	
 
#: rhodecode/controllers/error.py:107
 
msgid ""
 
"The server encountered an unexpected condition which prevented it from "
 
"fulfilling the request."
 
msgstr ""
 
"La requête n’a pu être traitée en raison d’une erreur survenue sur le "
 
"serveur."
 

	
 
#: rhodecode/controllers/feed.py:48
 
#, python-format
 
msgid "Changes on %s repository"
 
msgstr "Changements sur le dépôt %s"
 

	
 
#: rhodecode/controllers/feed.py:49
 
#, python-format
 
msgid "%s %s feed"
 
msgstr "Flux %s de %s"
 

	
 
#: rhodecode/controllers/files.py:86
 
#: rhodecode/templates/admin/repos/repo_add.html:13
 
msgid "add new"
 
msgstr "ajouter un nouveau"
 

	
 
@@ -146,167 +146,167 @@ msgstr "Changesets"
 

	
 
#: rhodecode/controllers/files.py:462 rhodecode/controllers/summary.py:230
 
#: rhodecode/templates/branches/branches.html:5
 
msgid "Branches"
 
msgstr "Branches"
 

	
 
#: rhodecode/controllers/files.py:463 rhodecode/controllers/summary.py:231
 
#: rhodecode/templates/tags/tags.html:5
 
msgid "Tags"
 
msgstr "Tags"
 

	
 
#: rhodecode/controllers/forks.py:69 rhodecode/controllers/admin/repos.py:86
 
#, python-format
 
msgid ""
 
"%s repository is not mapped to db perhaps it was created or renamed from "
 
"the filesystem please run the application again in order to rescan "
 
"repositories"
 
msgstr ""
 
"Le dépôt %s n’est pas représenté dans la base de données. Il a "
 
"probablement été créé ou renommé manuellement. Veuillez relancer "
 
"l’application pour rescanner les dépôts."
 

	
 
#: rhodecode/controllers/forks.py:128 rhodecode/controllers/settings.py:69
 
#, python-format
 
msgid ""
 
"%s repository is not mapped to db perhaps it was created or renamed from "
 
"the file system please run the application again in order to rescan "
 
"repositories"
 
msgstr ""
 
"Le dépôt %s n’est pas représenté dans la base de données. Il a "
 
"probablement été créé ou renommé manuellement. Veuillez relancer "
 
"l’application pour rescanner les dépôts."
 

	
 
#: rhodecode/controllers/forks.py:163
 
#, python-format
 
msgid "forked %s repository as %s"
 
msgstr "dépôt %s forké en tant que %s"
 

	
 
#: rhodecode/controllers/forks.py:177
 
#, python-format
 
msgid "An error occurred during repository forking %s"
 
msgstr "Une erreur est survenue durant le fork du dépôt %s."
 

	
 
#: rhodecode/controllers/journal.py:53
 
#, python-format
 
msgid "%s public journal %s feed"
 
msgstr "%s — Flux %s du journal public"
 

	
 
#: rhodecode/controllers/journal.py:190 rhodecode/controllers/journal.py:224
 
#: rhodecode/controllers/journal.py:190 rhodecode/controllers/journal.py:223
 
#: rhodecode/templates/admin/repos/repo_edit.html:177
 
#: rhodecode/templates/base/base.html:307
 
#: rhodecode/templates/base/base.html:309
 
#: rhodecode/templates/base/base.html:311
 
msgid "Public journal"
 
msgstr "Journal public"
 

	
 
#: rhodecode/controllers/login.py:116
 
msgid "You have successfully registered into rhodecode"
 
msgstr "Vous vous êtes inscrits avec succès à RhodeCode"
 

	
 
#: rhodecode/controllers/login.py:137
 
msgid "Your password reset link was sent"
 
msgstr "Un lien de rénitialisation de votre mot de passe vous a été envoyé."
 

	
 
#: rhodecode/controllers/login.py:157
 
msgid ""
 
"Your password reset was successful, new password has been sent to your "
 
"email"
 
msgstr ""
 
"Votre mot de passe a été réinitialisé. Votre nouveau mot de passe vous a "
 
"été envoyé par e-mail."
 

	
 
#: rhodecode/controllers/search.py:114
 
msgid "Invalid search query. Try quoting it."
 
msgstr "Requête invalide. Essayer de la mettre entre guillemets."
 

	
 
#: rhodecode/controllers/search.py:119
 
msgid "There is no index to search in. Please run whoosh indexer"
 
msgstr ""
 
"L’index de recherche n’est pas présent. Veuillez exécuter l’indexeur de "
 
"code Whoosh."
 

	
 
#: rhodecode/controllers/search.py:123
 
msgid "An error occurred during this search operation"
 
msgstr "Une erreur est survenue durant l’opération de recherche."
 

	
 
#: rhodecode/controllers/settings.py:103
 
#: rhodecode/controllers/admin/repos.py:211
 
#: rhodecode/controllers/admin/repos.py:213
 
#, python-format
 
msgid "Repository %s updated successfully"
 
msgstr "Dépôt %s mis à jour avec succès."
 

	
 
#: rhodecode/controllers/settings.py:121
 
#: rhodecode/controllers/admin/repos.py:229
 
#: rhodecode/controllers/admin/repos.py:231
 
#, python-format
 
msgid "error occurred during update of repository %s"
 
msgstr "Une erreur est survenue lors de la mise à jour du dépôt %s."
 

	
 
#: rhodecode/controllers/settings.py:139
 
#: rhodecode/controllers/admin/repos.py:247
 
#: rhodecode/controllers/admin/repos.py:249
 
#, python-format
 
msgid ""
 
"%s repository is not mapped to db perhaps it was moved or renamed  from "
 
"the filesystem please run the application again in order to rescan "
 
"repositories"
 
msgstr ""
 
"Le dépôt %s n’est pas représenté dans la base de données. Il a "
 
"probablement été déplacé ou renommé manuellement. Veuillez relancer "
 
"l’application pour rescanner les dépôts."
 

	
 
#: rhodecode/controllers/settings.py:151
 
#: rhodecode/controllers/admin/repos.py:259
 
#: rhodecode/controllers/admin/repos.py:261
 
#, python-format
 
msgid "deleted repository %s"
 
msgstr "Dépôt %s supprimé"
 

	
 
#: rhodecode/controllers/settings.py:155
 
#: rhodecode/controllers/admin/repos.py:269
 
#: rhodecode/controllers/admin/repos.py:275
 
#: rhodecode/controllers/admin/repos.py:271
 
#: rhodecode/controllers/admin/repos.py:277
 
#, python-format
 
msgid "An error occurred during deletion of %s"
 
msgstr "Erreur pendant la suppression de %s"
 

	
 
#: rhodecode/controllers/summary.py:138
 
msgid "No data loaded yet"
 
msgstr "Aucune donnée actuellement disponible."
 

	
 
#: rhodecode/controllers/summary.py:142
 
#: rhodecode/templates/summary/summary.html:139
 
msgid "Statistics are disabled for this repository"
 
msgstr "La mise à jour des statistiques est désactivée pour ce dépôt."
 

	
 
#: rhodecode/controllers/admin/ldap_settings.py:49
 
msgid "BASE"
 
msgstr "Base"
 

	
 
#: rhodecode/controllers/admin/ldap_settings.py:50
 
msgid "ONELEVEL"
 
msgstr "Un niveau"
 

	
 
#: rhodecode/controllers/admin/ldap_settings.py:51
 
msgid "SUBTREE"
 
msgstr "Sous-arbre"
 

	
 
#: rhodecode/controllers/admin/ldap_settings.py:55
 
msgid "NEVER"
 
msgstr "NEVER"
 

	
 
#: rhodecode/controllers/admin/ldap_settings.py:56
 
msgid "ALLOW"
 
msgstr "Autoriser"
 

	
 
#: rhodecode/controllers/admin/ldap_settings.py:57
 
msgid "TRY"
 
msgstr "TRY"
 

	
 
#: rhodecode/controllers/admin/ldap_settings.py:58
 
msgid "DEMAND"
 
msgstr "DEMAND"
 

	
 
#: rhodecode/controllers/admin/ldap_settings.py:59
 
msgid "HARD"
 
msgstr "HARD"
 

	
 
#: rhodecode/controllers/admin/ldap_settings.py:63
 
msgid "No encryption"
 
msgstr "Pas de chiffrement"
 
@@ -365,156 +365,156 @@ msgstr "Écrire"
 
#: rhodecode/templates/base/base.html:326
 
#: rhodecode/templates/base/base.html:328
 
#: rhodecode/templates/base/base.html:330
 
msgid "Admin"
 
msgstr "Administration"
 

	
 
#: rhodecode/controllers/admin/permissions.py:65
 
msgid "disabled"
 
msgstr "Désactivé"
 

	
 
#: rhodecode/controllers/admin/permissions.py:67
 
msgid "allowed with manual account activation"
 
msgstr "Autorisé avec activation manuelle du compte"
 

	
 
#: rhodecode/controllers/admin/permissions.py:69
 
msgid "allowed with automatic account activation"
 
msgstr "Autorisé avec activation automatique du compte"
 

	
 
#: rhodecode/controllers/admin/permissions.py:71
 
msgid "Disabled"
 
msgstr "Interdite"
 

	
 
#: rhodecode/controllers/admin/permissions.py:72
 
msgid "Enabled"
 
msgstr "Autorisée"
 

	
 
#: rhodecode/controllers/admin/permissions.py:106
 
msgid "Default permissions updated successfully"
 
msgstr "Permissions par défaut mises à jour avec succès"
 

	
 
#: rhodecode/controllers/admin/permissions.py:123
 
msgid "error occurred during update of permissions"
 
msgstr "erreur pendant la mise à jour des permissions"
 

	
 
#: rhodecode/controllers/admin/repos.py:116
 
msgid "--REMOVE FORK--"
 
msgstr "[Pas un fork]"
 

	
 
#: rhodecode/controllers/admin/repos.py:144
 
#, python-format
 
msgid "created repository %s from %s"
 
msgstr "Le dépôt %s a été créé depuis %s."
 

	
 
#: rhodecode/controllers/admin/repos.py:148
 
#, python-format
 
msgid "created repository %s"
 
msgstr "Le dépôt %s a été créé."
 

	
 
#: rhodecode/controllers/admin/repos.py:177
 
#: rhodecode/controllers/admin/repos.py:179
 
#, python-format
 
msgid "error occurred during creation of repository %s"
 
msgstr "Une erreur est survenue durant la création du dépôt %s."
 

	
 
#: rhodecode/controllers/admin/repos.py:264
 
#: rhodecode/controllers/admin/repos.py:266
 
#, python-format
 
msgid "Cannot delete %s it still contains attached forks"
 
msgstr "Impossible de supprimer le dépôt %s : Des forks y sont attachés."
 

	
 
#: rhodecode/controllers/admin/repos.py:293
 
#: rhodecode/controllers/admin/repos.py:295
 
msgid "An error occurred during deletion of repository user"
 
msgstr "Une erreur est survenue durant la suppression de l’utilisateur du dépôt."
 

	
 
#: rhodecode/controllers/admin/repos.py:312
 
#: rhodecode/controllers/admin/repos.py:314
 
msgid "An error occurred during deletion of repository users groups"
 
msgstr ""
 
"Une erreur est survenue durant la suppression du groupe d’utilisateurs de"
 
" ce dépôt."
 

	
 
#: rhodecode/controllers/admin/repos.py:329
 
#: rhodecode/controllers/admin/repos.py:331
 
msgid "An error occurred during deletion of repository stats"
 
msgstr "Une erreur est survenue durant la suppression des statistiques du dépôt."
 

	
 
#: rhodecode/controllers/admin/repos.py:345
 
#: rhodecode/controllers/admin/repos.py:347
 
msgid "An error occurred during cache invalidation"
 
msgstr "Une erreur est survenue durant l’invalidation du cache."
 

	
 
#: rhodecode/controllers/admin/repos.py:365
 
#: rhodecode/controllers/admin/repos.py:367
 
msgid "Updated repository visibility in public journal"
 
msgstr "La visibilité du dépôt dans le journal public a été mise à jour."
 

	
 
#: rhodecode/controllers/admin/repos.py:369
 
#: rhodecode/controllers/admin/repos.py:371
 
msgid "An error occurred during setting this repository in public journal"
 
msgstr ""
 
"Une erreur est survenue durant la configuration du journal public pour ce"
 
" dépôt."
 

	
 
#: rhodecode/controllers/admin/repos.py:374 rhodecode/model/forms.py:54
 
#: rhodecode/controllers/admin/repos.py:376 rhodecode/model/forms.py:54
 
msgid "Token mismatch"
 
msgstr "Jeton d’authentification incorrect."
 

	
 
#: rhodecode/controllers/admin/repos.py:387
 
msgid "Pulled from remote location"
 
msgstr "Les changements distants ont été récupérés."
 

	
 
#: rhodecode/controllers/admin/repos.py:389
 
msgid "Pulled from remote location"
 
msgstr "Les changements distants ont été récupérés."
 

	
 
#: rhodecode/controllers/admin/repos.py:391
 
msgid "An error occurred during pull from remote location"
 
msgstr "Une erreur est survenue durant le pull depuis la source distante."
 

	
 
#: rhodecode/controllers/admin/repos.py:405
 
#: rhodecode/controllers/admin/repos.py:407
 
msgid "Nothing"
 
msgstr "[Aucun dépôt]"
 

	
 
#: rhodecode/controllers/admin/repos.py:407
 
#: rhodecode/controllers/admin/repos.py:409
 
#, python-format
 
msgid "Marked repo %s as fork of %s"
 
msgstr "Le dépôt %s a été marké comme fork de %s"
 

	
 
#: rhodecode/controllers/admin/repos.py:411
 
#: rhodecode/controllers/admin/repos.py:413
 
msgid "An error occurred during this operation"
 
msgstr "Une erreur est survenue durant cette opération."
 

	
 
#: rhodecode/controllers/admin/repos_groups.py:119
 
#, python-format
 
msgid "created repos group %s"
 
msgstr "Le groupe de dépôts %s a été créé."
 

	
 
#: rhodecode/controllers/admin/repos_groups.py:132
 
#, python-format
 
msgid "error occurred during creation of repos group %s"
 
msgstr "Une erreur est survenue durant la création du groupe de dépôts %s."
 

	
 
#: rhodecode/controllers/admin/repos_groups.py:166
 
#, python-format
 
msgid "updated repos group %s"
 
msgstr "Le groupe de dépôts %s a été mis à jour."
 

	
 
#: rhodecode/controllers/admin/repos_groups.py:179
 
#, python-format
 
msgid "error occurred during update of repos group %s"
 
msgstr "Une erreur est survenue durant la mise à jour du groupe de dépôts %s."
 

	
 
#: rhodecode/controllers/admin/repos_groups.py:198
 
#, python-format
 
msgid "This group contains %s repositores and cannot be deleted"
 
msgstr "Ce groupe contient %s dépôts et ne peut être supprimé."
 

	
 
#: rhodecode/controllers/admin/repos_groups.py:205
 
#, python-format
 
msgid "removed repos group %s"
 
msgstr "Le groupe de dépôts %s a été supprimé."
 

	
 
#: rhodecode/controllers/admin/repos_groups.py:210
 
msgid "Cannot delete this group it still contains subgroups"
 
msgstr "Impossible de supprimer ce groupe : Il contient des sous-groupes."
 

	
 
#: rhodecode/controllers/admin/repos_groups.py:215
 
#: rhodecode/controllers/admin/repos_groups.py:220
 
#, python-format
 
msgid "error occurred during deletion of repos group %s"
 
msgstr "Une erreur est survenue durant la suppression du groupe de dépôts %s."
 

	
 
#: rhodecode/controllers/admin/repos_groups.py:240
 
msgid "An error occurred during deletion of group user"
 
msgstr ""
 
"Une erreur est survenue durant la suppression de l’utilisateur du groupe "
 
"de dépôts."
 
@@ -524,281 +524,315 @@ msgid "An error occurred during deletion
 
msgstr ""
 
"Une erreur est survenue durant la suppression du groupe d’utilisateurs du"
 
" groupe de dépôts."
 

	
 
#: rhodecode/controllers/admin/settings.py:120
 
#, python-format
 
msgid "Repositories successfully rescanned added: %s,removed: %s"
 
msgstr "Après re-scan : %s ajouté(s), %s enlevé(s)"
 

	
 
#: rhodecode/controllers/admin/settings.py:129
 
msgid "Whoosh reindex task scheduled"
 
msgstr "La tâche de réindexation Whoosh a été planifiée."
 

	
 
#: rhodecode/controllers/admin/settings.py:154
 
msgid "Updated application settings"
 
msgstr "Réglages mis à jour"
 

	
 
#: rhodecode/controllers/admin/settings.py:159
 
#: rhodecode/controllers/admin/settings.py:226
 
msgid "error occurred during updating application settings"
 
msgstr "Une erreur est survenue durant la mise à jour des options."
 

	
 
#: rhodecode/controllers/admin/settings.py:221
 
msgid "Updated mercurial settings"
 
msgstr "Réglages de Mercurial mis à jour"
 

	
 
#: rhodecode/controllers/admin/settings.py:246
 
msgid "Added new hook"
 
msgstr "Le nouveau hook a été ajouté."
 

	
 
#: rhodecode/controllers/admin/settings.py:258
 
msgid "Updated hooks"
 
msgstr "Hooks mis à jour"
 

	
 
#: rhodecode/controllers/admin/settings.py:262
 
msgid "error occurred during hook creation"
 
msgstr "Une erreur est survenue durant la création du hook."
 

	
 
#: rhodecode/controllers/admin/settings.py:281
 
msgid "Email task created"
 
msgstr "La tâche d’e-mail a été créée."
 

	
 
#: rhodecode/controllers/admin/settings.py:336
 
msgid "You can't edit this user since it's crucial for entire application"
 
msgstr ""
 
"Vous ne pouvez pas éditer cet utilisateur ; il est nécessaire pour le bon"
 
" fonctionnement de l’application."
 

	
 
#: rhodecode/controllers/admin/settings.py:365
 
#: rhodecode/controllers/admin/settings.py:367
 
msgid "Your account was updated successfully"
 
msgstr "Votre compte a été mis à jour avec succès"
 

	
 
#: rhodecode/controllers/admin/settings.py:384
 
#: rhodecode/controllers/admin/users.py:132
 
#: rhodecode/controllers/admin/settings.py:387
 
#: rhodecode/controllers/admin/users.py:138
 
#, python-format
 
msgid "error occurred during update of user %s"
 
msgstr "Une erreur est survenue durant la mise à jour de l’utilisateur %s."
 

	
 
#: rhodecode/controllers/admin/users.py:79
 
#: rhodecode/controllers/admin/users.py:83
 
#, python-format
 
msgid "created user %s"
 
msgstr "utilisateur %s créé"
 

	
 
#: rhodecode/controllers/admin/users.py:92
 
#: rhodecode/controllers/admin/users.py:95
 
#, python-format
 
msgid "error occurred during creation of user %s"
 
msgstr "Une erreur est survenue durant la création de l’utilisateur %s."
 

	
 
#: rhodecode/controllers/admin/users.py:118
 
#: rhodecode/controllers/admin/users.py:124
 
msgid "User updated successfully"
 
msgstr "L’utilisateur a été mis à jour avec succès."
 

	
 
#: rhodecode/controllers/admin/users.py:149
 
#: rhodecode/controllers/admin/users.py:155
 
msgid "successfully deleted user"
 
msgstr "L’utilisateur a été supprimé avec succès."
 

	
 
#: rhodecode/controllers/admin/users.py:154
 
#: rhodecode/controllers/admin/users.py:160
 
msgid "An error occurred during deletion of user"
 
msgstr "Une erreur est survenue durant la suppression de l’utilisateur."
 

	
 
#: rhodecode/controllers/admin/users.py:169
 
#: rhodecode/controllers/admin/users.py:175
 
msgid "You can't edit this user"
 
msgstr "Vous ne pouvez pas éditer cet utilisateur"
 

	
 
#: rhodecode/controllers/admin/users.py:199
 
#: rhodecode/controllers/admin/users_groups.py:215
 
#: rhodecode/controllers/admin/users.py:205
 
#: rhodecode/controllers/admin/users_groups.py:219
 
msgid "Granted 'repository create' permission to user"
 
msgstr "La permission de création de dépôts a été accordée à l’utilisateur."
 

	
 
#: rhodecode/controllers/admin/users.py:208
 
#: rhodecode/controllers/admin/users_groups.py:225
 
#: rhodecode/controllers/admin/users.py:214
 
#: rhodecode/controllers/admin/users_groups.py:229
 
msgid "Revoked 'repository create' permission to user"
 
msgstr "La permission de création de dépôts a été révoquée à l’utilisateur."
 

	
 
#: rhodecode/controllers/admin/users_groups.py:79
 
#: rhodecode/controllers/admin/users_groups.py:84
 
#, python-format
 
msgid "created users group %s"
 
msgstr "Le groupe d’utilisateurs %s a été créé."
 

	
 
#: rhodecode/controllers/admin/users_groups.py:92
 
#: rhodecode/controllers/admin/users_groups.py:95
 
#, python-format
 
msgid "error occurred during creation of users group %s"
 
msgstr "Une erreur est survenue durant la création du groupe d’utilisateurs %s."
 

	
 
#: rhodecode/controllers/admin/users_groups.py:128
 
#: rhodecode/controllers/admin/users_groups.py:135
 
#, python-format
 
msgid "updated users group %s"
 
msgstr "Le groupe d’utilisateurs %s a été mis à jour."
 

	
 
#: rhodecode/controllers/admin/users_groups.py:148
 
#: rhodecode/controllers/admin/users_groups.py:152
 
#, python-format
 
msgid "error occurred during update of users group %s"
 
msgstr "Une erreur est survenue durant la mise à jour du groupe d’utilisateurs %s."
 

	
 
#: rhodecode/controllers/admin/users_groups.py:165
 
#: rhodecode/controllers/admin/users_groups.py:169
 
msgid "successfully deleted users group"
 
msgstr "Le groupe d’utilisateurs a été supprimé avec succès."
 

	
 
#: rhodecode/controllers/admin/users_groups.py:170
 
#: rhodecode/controllers/admin/users_groups.py:174
 
msgid "An error occurred during deletion of users group"
 
msgstr "Une erreur est survenue lors de la suppression du groupe d’utilisateurs."
 

	
 
#: rhodecode/lib/auth.py:497
 
msgid "You need to be a registered user to perform this action"
 
msgstr "Vous devez être un utilisateur enregistré pour effectuer cette action."
 

	
 
#: rhodecode/lib/auth.py:538
 
msgid "You need to be a signed in to view this page"
 
msgstr "Vous devez être connecté pour visualiser cette page."
 

	
 
#: rhodecode/lib/diffs.py:78
 
msgid "Changeset was too big and was cut off, use diff menu to display this diff"
 
msgstr ""
 
"Cet ensemble de changements était trop gros pour être affiché et a été "
 
"découpé, utilisez le menu « Diff » pour afficher les différences."
 

	
 
#: rhodecode/lib/diffs.py:88
 
msgid "No changes detected"
 
msgstr "Aucun changement détecté."
 

	
 
#: rhodecode/lib/helpers.py:415
 
msgid "True"
 
msgstr "Vrai"
 

	
 
#: rhodecode/lib/helpers.py:419
 
msgid "False"
 
msgstr "Faux"
 

	
 
#: rhodecode/lib/helpers.py:463
 
#, fuzzy
 
msgid "Changeset not found"
 
msgstr "Dépôt vide"
 

	
 
#: rhodecode/lib/helpers.py:486
 
#, python-format
 
msgid "Show all combined changesets %s->%s"
 
msgstr "Afficher les changements combinés %s->%s"
 

	
 
#: rhodecode/lib/helpers.py:492
 
msgid "compare view"
 
msgstr "vue de comparaison"
 

	
 
#: rhodecode/lib/helpers.py:512
 
msgid "and"
 
msgstr "et"
 

	
 
#: rhodecode/lib/helpers.py:513
 
#, python-format
 
msgid "%s more"
 
msgstr "%s de plus"
 

	
 
#: rhodecode/lib/helpers.py:514 rhodecode/templates/changelog/changelog.html:40
 
msgid "revisions"
 
msgstr "révisions"
 

	
 
#: rhodecode/lib/helpers.py:537
 
msgid "fork name "
 
msgstr "Nom du fork"
 

	
 
#: rhodecode/lib/helpers.py:540
 
#: rhodecode/lib/helpers.py:550
 
msgid "[deleted] repository"
 
msgstr "[a supprimé] le dépôt"
 

	
 
#: rhodecode/lib/helpers.py:541 rhodecode/lib/helpers.py:546
 
#: rhodecode/lib/helpers.py:552 rhodecode/lib/helpers.py:562
 
msgid "[created] repository"
 
msgstr "[a créé] le dépôt"
 

	
 
#: rhodecode/lib/helpers.py:542
 
#: rhodecode/lib/helpers.py:554
 
msgid "[created] repository as fork"
 
msgstr "[a créé] le dépôt en tant que fork"
 

	
 
#: rhodecode/lib/helpers.py:543 rhodecode/lib/helpers.py:547
 
#: rhodecode/lib/helpers.py:556 rhodecode/lib/helpers.py:564
 
msgid "[forked] repository"
 
msgstr "[a forké] le dépôt"
 

	
 
#: rhodecode/lib/helpers.py:544 rhodecode/lib/helpers.py:548
 
#: rhodecode/lib/helpers.py:558 rhodecode/lib/helpers.py:566
 
msgid "[updated] repository"
 
msgstr "[a mis à jour] le dépôt"
 

	
 
#: rhodecode/lib/helpers.py:545
 
#: rhodecode/lib/helpers.py:560
 
msgid "[delete] repository"
 
msgstr "[a supprimé] le dépôt"
 

	
 
#: rhodecode/lib/helpers.py:549
 
#: rhodecode/lib/helpers.py:568
 
#, fuzzy, python-format
 
#| msgid "created user %s"
 
msgid "[created] user"
 
msgstr "utilisateur %s créé"
 

	
 
#: rhodecode/lib/helpers.py:570
 
#, fuzzy, python-format
 
#| msgid "updated users group %s"
 
msgid "[updated] user"
 
msgstr "Le groupe d’utilisateurs %s a été mis à jour."
 

	
 
#: rhodecode/lib/helpers.py:572
 
#, fuzzy, python-format
 
#| msgid "created users group %s"
 
msgid "[created] users group"
 
msgstr "Le groupe d’utilisateurs %s a été créé."
 

	
 
#: rhodecode/lib/helpers.py:574
 
#, fuzzy, python-format
 
#| msgid "updated users group %s"
 
msgid "[updated] users group"
 
msgstr "Le groupe d’utilisateurs %s a été mis à jour."
 

	
 
#: rhodecode/lib/helpers.py:576
 
#, fuzzy
 
#| msgid "[created] repository"
 
msgid "[commented] on revision in repository"
 
msgstr "[a créé] le dépôt"
 

	
 
#: rhodecode/lib/helpers.py:578
 
msgid "[pushed] into"
 
msgstr "[a pushé] dans"
 

	
 
#: rhodecode/lib/helpers.py:550
 
msgid "[committed via RhodeCode] into"
 
#: rhodecode/lib/helpers.py:580
 
#, fuzzy
 
#| msgid "[committed via RhodeCode] into"
 
msgid "[committed via RhodeCode] into repository"
 
msgstr "[a commité via RhodeCode] dans"
 

	
 
#: rhodecode/lib/helpers.py:551
 
msgid "[pulled from remote] into"
 
#: rhodecode/lib/helpers.py:582
 
#, fuzzy
 
#| msgid "[pulled from remote] into"
 
msgid "[pulled from remote] into repository"
 
msgstr "[a pullé depuis un site distant] dans"
 

	
 
#: rhodecode/lib/helpers.py:552
 
#: rhodecode/lib/helpers.py:584
 
msgid "[pulled] from"
 
msgstr "[a pullé] depuis"
 

	
 
#: rhodecode/lib/helpers.py:553
 
#: rhodecode/lib/helpers.py:586
 
msgid "[started following] repository"
 
msgstr "[suit maintenant] le dépôt"
 

	
 
#: rhodecode/lib/helpers.py:554
 
#: rhodecode/lib/helpers.py:588
 
msgid "[stopped following] repository"
 
msgstr "[ne suit plus] le dépôt"
 

	
 
#: rhodecode/lib/helpers.py:732
 
#: rhodecode/lib/helpers.py:752
 
#, python-format
 
msgid " and %s more"
 
msgstr "et %s de plus"
 

	
 
#: rhodecode/lib/helpers.py:736
 
#: rhodecode/lib/helpers.py:756
 
msgid "No Files"
 
msgstr "Aucun fichier"
 

	
 
#: rhodecode/lib/utils2.py:335
 
#, python-format
 
msgid "%d year"
 
msgid_plural "%d years"
 
msgstr[0] "%d an"
 
msgstr[1] "%d ans"
 

	
 
#: rhodecode/lib/utils2.py:336
 
#, python-format
 
msgid "%d month"
 
msgid_plural "%d months"
 
msgstr[0] "%d mois"
 
msgstr[1] "%d mois"
 

	
 
#: rhodecode/lib/utils2.py:337
 
#, python-format
 
msgid "%d day"
 
msgid_plural "%d days"
 
msgstr[0] "%d jour"
 
msgstr[1] "%d jours"
 

	
 
#: rhodecode/lib/utils2.py:338
 
#, python-format
 
msgid "%d hour"
 
msgid_plural "%d hours"
 
msgstr[0] "%d heure"
 
msgstr[1] "%d heures"
 

	
 
#: rhodecode/lib/utils2.py:339
 
#, python-format
 
msgid "%d minute"
 
msgid_plural "%d minutes"
 
msgstr[0] "%d minute"
 
msgstr[1] "%d minutes"
 

	
 
#: rhodecode/lib/utils2.py:340
 
#, python-format
 
msgid "%d second"
 
msgid_plural "%d seconds"
 
msgstr[0] "%d seconde"
 
msgstr[1] "%d secondes"
 

	
 
#: rhodecode/lib/utils2.py:355
 
#, python-format
 
msgid "%s ago"
 
@@ -972,531 +1006,531 @@ msgid "Enter %(min)i characters or more"
 
msgstr "Entrez au moins %(min)i caractères"
 

	
 
#: rhodecode/model/notification.py:175
 
msgid "commented on commit"
 
msgstr "a posté un commentaire sur le commit"
 

	
 
#: rhodecode/model/notification.py:176
 
msgid "sent message"
 
msgstr "a envoyé un message"
 

	
 
#: rhodecode/model/notification.py:177
 
msgid "mentioned you"
 
msgstr "vous a mentioné"
 

	
 
#: rhodecode/model/notification.py:178
 
msgid "registered in RhodeCode"
 
msgstr "s’est enregistré sur RhodeCode"
 

	
 
#: rhodecode/model/user.py:235
 
msgid "new user registration"
 
msgstr "Nouveau compte utilisateur enregistré"
 

	
 
#: rhodecode/model/user.py:259 rhodecode/model/user.py:279
 
msgid "You can't Edit this user since it's crucial for entire application"
 
msgstr ""
 
"Vous ne pouvez pas éditer cet utilisateur ; il est nécessaire pour le bon"
 
" fonctionnement de l’application."
 

	
 
#: rhodecode/model/user.py:300
 
msgid "You can't remove this user since it's crucial for entire application"
 
msgstr ""
 
"Vous ne pouvez pas supprimer cet utilisateur ; il est nécessaire pour le "
 
"bon fonctionnement de l’application."
 

	
 
#: rhodecode/model/user.py:306
 
#, python-format
 
msgid ""
 
"user \"%s\" still owns %s repositories and cannot be removed. Switch "
 
"owners or remove those repositories. %s"
 
msgstr ""
 
"L’utilisateur « %s » possède %s dépôts et ne peut être supprimé. Changez "
 
"les propriétaires de ces dépôts. %s"
 

	
 
#: rhodecode/templates/index.html:3
 
msgid "Dashboard"
 
msgstr "Tableau de bord"
 

	
 
#: rhodecode/templates/index_base.html:6
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:115
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:31
 
#: rhodecode/templates/bookmarks/bookmarks.html:10
 
#: rhodecode/templates/branches/branches.html:9
 
#: rhodecode/templates/journal/journal.html:31
 
#: rhodecode/templates/tags/tags.html:10
 
msgid "quick filter..."
 
msgstr "filtre rapide"
 

	
 
#: rhodecode/templates/index_base.html:6 rhodecode/templates/base/base.html:218
 
msgid "repositories"
 
msgstr "Dépôts"
 

	
 
#: rhodecode/templates/index_base.html:13
 
#: rhodecode/templates/index_base.html:15
 
#: rhodecode/templates/admin/repos/repos.html:22
 
msgid "ADD REPOSITORY"
 
msgstr "AJOUTER UN DÉPÔT"
 

	
 
#: rhodecode/templates/index_base.html:29
 
#: rhodecode/templates/admin/repos_groups/repos_groups_add.html:32
 
#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:32
 
#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:33
 
#: rhodecode/templates/admin/users_groups/users_group_add.html:32
 
#: rhodecode/templates/admin/users_groups/users_group_edit.html:33
 
msgid "Group name"
 
msgstr "Nom de groupe"
 

	
 
#: rhodecode/templates/index_base.html:30
 
#: rhodecode/templates/index_base.html:67
 
#: rhodecode/templates/index_base.html:132
 
#: rhodecode/templates/index_base.html:158
 
#: rhodecode/templates/admin/repos/repo_add_base.html:47
 
#: rhodecode/templates/admin/repos/repo_edit.html:66
 
#: rhodecode/templates/admin/repos/repos.html:37
 
#: rhodecode/templates/admin/repos/repos.html:84
 
#: rhodecode/templates/admin/repos_groups/repos_groups_add.html:41
 
#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:41
 
#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:34
 
#: rhodecode/templates/forks/fork.html:49
 
#: rhodecode/templates/settings/repo_settings.html:57
 
#: rhodecode/templates/summary/summary.html:100
 
msgid "Description"
 
msgstr "Description"
 

	
 
#: rhodecode/templates/index_base.html:40
 
#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:46
 
msgid "Repositories group"
 
msgstr "Groupe de dépôts"
 

	
 
#: rhodecode/templates/index_base.html:66
 
#: rhodecode/templates/index_base.html:156
 
#: rhodecode/templates/admin/repos/repo_add_base.html:9
 
#: rhodecode/templates/admin/repos/repo_edit.html:32
 
#: rhodecode/templates/admin/repos/repos.html:36
 
#: rhodecode/templates/admin/repos/repos.html:82
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:133
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:183
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:249
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:284
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:49
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:99
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:165
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:200
 
#: rhodecode/templates/bookmarks/bookmarks.html:36
 
#: rhodecode/templates/bookmarks/bookmarks_data.html:6
 
#: rhodecode/templates/branches/branches.html:36
 
#: rhodecode/templates/files/files_browser.html:47
 
#: rhodecode/templates/journal/journal.html:50
 
#: rhodecode/templates/journal/journal.html:98
 
#: rhodecode/templates/journal/journal.html:177
 
#: rhodecode/templates/settings/repo_settings.html:31
 
#: rhodecode/templates/summary/summary.html:38
 
#: rhodecode/templates/summary/summary.html:114
 
#: rhodecode/templates/tags/tags.html:36
 
#: rhodecode/templates/tags/tags_data.html:6
 
msgid "Name"
 
msgstr "Nom"
 

	
 
#: rhodecode/templates/index_base.html:68
 
#: rhodecode/templates/admin/repos/repos.html:38
 
msgid "Last change"
 
msgstr "Dernière modification"
 

	
 
#: rhodecode/templates/index_base.html:69
 
#: rhodecode/templates/index_base.html:161
 
#: rhodecode/templates/admin/repos/repos.html:39
 
#: rhodecode/templates/admin/repos/repos.html:87
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:251
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:167
 
#: rhodecode/templates/journal/journal.html:179
 
msgid "Tip"
 
msgstr "Sommet"
 

	
 
#: rhodecode/templates/index_base.html:70
 
#: rhodecode/templates/index_base.html:163
 
#: rhodecode/templates/admin/repos/repo_edit.html:103
 
#: rhodecode/templates/admin/repos/repos.html:89
 
msgid "Owner"
 
msgstr "Propriétaire"
 

	
 
#: rhodecode/templates/index_base.html:71
 
#: rhodecode/templates/journal/public_journal.html:20
 
#: rhodecode/templates/summary/summary.html:43
 
#: rhodecode/templates/summary/summary.html:46
 
msgid "RSS"
 
msgstr "RSS"
 

	
 
#: rhodecode/templates/index_base.html:72
 
#: rhodecode/templates/journal/public_journal.html:23
 
msgid "Atom"
 
msgstr "Atom"
 

	
 
#: rhodecode/templates/index_base.html:102
 
#: rhodecode/templates/index_base.html:104
 
#, python-format
 
msgid "Subscribe to %s rss feed"
 
msgstr "S’abonner au flux RSS de %s"
 

	
 
#: rhodecode/templates/index_base.html:109
 
#: rhodecode/templates/index_base.html:111
 
#, python-format
 
msgid "Subscribe to %s atom feed"
 
msgstr "S’abonner au flux ATOM de %s"
 

	
 
#: rhodecode/templates/index_base.html:130
 
msgid "Group Name"
 
msgstr "Nom du groupe"
 

	
 
#: rhodecode/templates/index_base.html:148
 
#: rhodecode/templates/index_base.html:188
 
#: rhodecode/templates/admin/repos/repos.html:112
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:270
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:186
 
#: rhodecode/templates/bookmarks/bookmarks.html:60
 
#: rhodecode/templates/branches/branches.html:60
 
#: rhodecode/templates/journal/journal.html:202
 
#: rhodecode/templates/tags/tags.html:60
 
msgid "Click to sort ascending"
 
msgstr "Tri ascendant"
 

	
 
#: rhodecode/templates/index_base.html:149
 
#: rhodecode/templates/index_base.html:189
 
#: rhodecode/templates/admin/repos/repos.html:113
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:271
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:187
 
#: rhodecode/templates/bookmarks/bookmarks.html:61
 
#: rhodecode/templates/branches/branches.html:61
 
#: rhodecode/templates/journal/journal.html:203
 
#: rhodecode/templates/tags/tags.html:61
 
msgid "Click to sort descending"
 
msgstr "Tri descendant"
 

	
 
#: rhodecode/templates/index_base.html:159
 
#: rhodecode/templates/admin/repos/repos.html:85
 
msgid "Last Change"
 
msgstr "Dernière modification"
 

	
 
#: rhodecode/templates/index_base.html:190
 
#: rhodecode/templates/admin/repos/repos.html:114
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:272
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:188
 
#: rhodecode/templates/bookmarks/bookmarks.html:62
 
#: rhodecode/templates/branches/branches.html:62
 
#: rhodecode/templates/journal/journal.html:204
 
#: rhodecode/templates/tags/tags.html:62
 
msgid "No records found."
 
msgstr "Aucun élément n’a été trouvé."
 

	
 
#: rhodecode/templates/index_base.html:191
 
#: rhodecode/templates/admin/repos/repos.html:115
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:273
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:189
 
#: rhodecode/templates/bookmarks/bookmarks.html:63
 
#: rhodecode/templates/branches/branches.html:63
 
#: rhodecode/templates/journal/journal.html:205
 
#: rhodecode/templates/tags/tags.html:63
 
msgid "Data error."
 
msgstr "Erreur d’intégrité des données."
 

	
 
#: rhodecode/templates/index_base.html:192
 
#: rhodecode/templates/admin/repos/repos.html:116
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:274
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:190
 
#: rhodecode/templates/bookmarks/bookmarks.html:64
 
#: rhodecode/templates/branches/branches.html:64
 
#: rhodecode/templates/journal/journal.html:206
 
#: rhodecode/templates/tags/tags.html:64
 
msgid "Loading..."
 
msgstr "Chargement…"
 

	
 
#: rhodecode/templates/login.html:5 rhodecode/templates/login.html:54
 
msgid "Sign In"
 
msgstr "Connexion"
 

	
 
#: rhodecode/templates/login.html:21
 
msgid "Sign In to"
 
msgstr "Connexion à"
 

	
 
#: rhodecode/templates/login.html:31 rhodecode/templates/register.html:20
 
#: rhodecode/templates/admin/admin_log.html:5
 
#: rhodecode/templates/admin/users/user_add.html:32
 
#: rhodecode/templates/admin/users/user_edit.html:50
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:49
 
#: rhodecode/templates/admin/users/user_edit_my_account_form.html:26
 
#: rhodecode/templates/base/base.html:83
 
#: rhodecode/templates/summary/summary.html:113
 
msgid "Username"
 
msgstr "Nom d’utilisateur"
 

	
 
#: rhodecode/templates/login.html:40 rhodecode/templates/register.html:29
 
#: rhodecode/templates/admin/ldap/ldap.html:46
 
#: rhodecode/templates/admin/users/user_add.html:41
 
#: rhodecode/templates/base/base.html:92
 
msgid "Password"
 
msgstr "Mot de passe"
 

	
 
#: rhodecode/templates/login.html:50
 
msgid "Remember me"
 
msgstr "Se souvenir de moi"
 

	
 
#: rhodecode/templates/login.html:60
 
msgid "Forgot your password ?"
 
msgstr "Mot de passe oublié ?"
 

	
 
#: rhodecode/templates/login.html:63 rhodecode/templates/base/base.html:103
 
msgid "Don't have an account ?"
 
msgstr "Vous n’avez pas de compte ?"
 

	
 
#: rhodecode/templates/password_reset.html:5
 
msgid "Reset your password"
 
msgstr "Mot de passe oublié ?"
 

	
 
#: rhodecode/templates/password_reset.html:11
 
msgid "Reset your password to"
 
msgstr "Réinitialiser votre mot de passe"
 

	
 
#: rhodecode/templates/password_reset.html:21
 
msgid "Email address"
 
msgstr "Adresse e-mail"
 

	
 
#: rhodecode/templates/password_reset.html:30
 
msgid "Reset my password"
 
msgstr "Réinitialiser mon mot de passe"
 

	
 
#: rhodecode/templates/password_reset.html:31
 
msgid "Password reset link will be send to matching email address"
 
msgstr "Votre nouveau mot de passe sera envoyé à l’adresse correspondante."
 

	
 
#: rhodecode/templates/register.html:5 rhodecode/templates/register.html:74
 
msgid "Sign Up"
 
msgstr "Inscription"
 

	
 
#: rhodecode/templates/register.html:11
 
msgid "Sign Up to"
 
msgstr "Inscription à"
 

	
 
#: rhodecode/templates/register.html:38
 
msgid "Re-enter password"
 
msgstr "Confirmation"
 

	
 
#: rhodecode/templates/register.html:47
 
#: rhodecode/templates/admin/users/user_add.html:59
 
#: rhodecode/templates/admin/users/user_edit.html:86
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:76
 
#: rhodecode/templates/admin/users/user_edit_my_account_form.html:53
 
msgid "First Name"
 
msgstr "Prénom"
 

	
 
#: rhodecode/templates/register.html:56
 
#: rhodecode/templates/admin/users/user_add.html:68
 
#: rhodecode/templates/admin/users/user_edit.html:95
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:85
 
#: rhodecode/templates/admin/users/user_edit_my_account_form.html:62
 
msgid "Last Name"
 
msgstr "Nom"
 

	
 
#: rhodecode/templates/register.html:65
 
#: rhodecode/templates/admin/users/user_add.html:77
 
#: rhodecode/templates/admin/users/user_edit.html:104
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:94
 
#: rhodecode/templates/admin/users/user_edit_my_account_form.html:71
 
#: rhodecode/templates/summary/summary.html:115
 
msgid "Email"
 
msgstr "E-mail"
 

	
 
#: rhodecode/templates/register.html:76
 
msgid "Your account will be activated right after registration"
 
msgstr "Votre compte utilisateur sera actif dès la fin de l’enregistrement."
 

	
 
#: rhodecode/templates/register.html:78
 
msgid "Your account must wait for activation by administrator"
 
msgstr "Votre compte utilisateur devra être activé par un administrateur."
 

	
 
#: rhodecode/templates/repo_switcher_list.html:11
 
#: rhodecode/templates/admin/repos/repo_add_base.html:56
 
#: rhodecode/templates/admin/repos/repo_edit.html:76
 
#: rhodecode/templates/settings/repo_settings.html:67
 
msgid "Private repository"
 
msgstr "Dépôt privé"
 

	
 
#: rhodecode/templates/repo_switcher_list.html:16
 
msgid "Public repository"
 
msgstr "Dépôt public"
 

	
 
#: rhodecode/templates/switch_to_list.html:3
 
#: rhodecode/templates/branches/branches.html:14
 
msgid "branches"
 
msgstr "Branches"
 

	
 
#: rhodecode/templates/switch_to_list.html:10
 
#: rhodecode/templates/branches/branches_data.html:51
 
msgid "There are no branches yet"
 
msgstr "Aucune branche n’a été créée pour le moment."
 

	
 
#: rhodecode/templates/switch_to_list.html:15
 
#: rhodecode/templates/shortlog/shortlog_data.html:10
 
#: rhodecode/templates/tags/tags.html:15
 
msgid "tags"
 
msgstr "Tags"
 

	
 
#: rhodecode/templates/switch_to_list.html:22
 
#: rhodecode/templates/tags/tags_data.html:33
 
msgid "There are no tags yet"
 
msgstr "Aucun tag n’a été créé pour le moment."
 

	
 
#: rhodecode/templates/switch_to_list.html:28
 
#: rhodecode/templates/bookmarks/bookmarks.html:15
 
msgid "bookmarks"
 
msgstr "Signets"
 

	
 
#: rhodecode/templates/switch_to_list.html:35
 
#: rhodecode/templates/bookmarks/bookmarks_data.html:32
 
msgid "There are no bookmarks yet"
 
msgstr "Aucun signet n’a été créé."
 

	
 
#: rhodecode/templates/admin/admin.html:5
 
#: rhodecode/templates/admin/admin.html:9
 
msgid "Admin journal"
 
msgstr "Historique d’administration"
 

	
 
#: rhodecode/templates/admin/admin_log.html:6
 
#: rhodecode/templates/admin/repos/repos.html:41
 
#: rhodecode/templates/admin/repos/repos.html:90
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:135
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:136
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:51
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:52
 
#: rhodecode/templates/journal/journal.html:52
 
#: rhodecode/templates/journal/journal.html:53
 
msgid "Action"
 
msgstr "Action"
 

	
 
#: rhodecode/templates/admin/admin_log.html:7
 
msgid "Repository"
 
msgstr "Dépôt"
 

	
 
#: rhodecode/templates/admin/admin_log.html:8
 
#: rhodecode/templates/bookmarks/bookmarks.html:37
 
#: rhodecode/templates/bookmarks/bookmarks_data.html:7
 
#: rhodecode/templates/branches/branches.html:37
 
#: rhodecode/templates/tags/tags.html:37
 
#: rhodecode/templates/tags/tags_data.html:7
 
msgid "Date"
 
msgstr "Date"
 

	
 
#: rhodecode/templates/admin/admin_log.html:9
 
msgid "From IP"
 
msgstr "Depuis l’adresse IP"
 

	
 
#: rhodecode/templates/admin/admin_log.html:52
 
#: rhodecode/templates/admin/admin_log.html:53
 
msgid "No actions yet"
 
msgstr "Aucune action n’a été enregistrée pour le moment."
 

	
 
#: rhodecode/templates/admin/ldap/ldap.html:5
 
msgid "LDAP administration"
 
msgstr "Administration LDAP"
 

	
 
#: rhodecode/templates/admin/ldap/ldap.html:11
 
msgid "Ldap"
 
msgstr "LDAP"
 

	
 
#: rhodecode/templates/admin/ldap/ldap.html:28
 
msgid "Connection settings"
 
msgstr "Options de connexion"
 

	
 
#: rhodecode/templates/admin/ldap/ldap.html:30
 
msgid "Enable LDAP"
 
msgstr "Activer le LDAP"
 

	
 
#: rhodecode/templates/admin/ldap/ldap.html:34
 
msgid "Host"
 
msgstr "Serveur"
 

	
 
#: rhodecode/templates/admin/ldap/ldap.html:38
 
msgid "Port"
 
msgstr "Port"
 

	
 
#: rhodecode/templates/admin/ldap/ldap.html:42
 
msgid "Account"
 
msgstr "Compte"
 

	
 
#: rhodecode/templates/admin/ldap/ldap.html:50
 
msgid "Connection security"
 
msgstr "Connexion sécurisée"
 

	
 
#: rhodecode/templates/admin/ldap/ldap.html:54
 
msgid "Certificate Checks"
 
msgstr "Vérif. des certificats"
 

	
 
#: rhodecode/templates/admin/ldap/ldap.html:57
 
msgid "Search settings"
 
msgstr "Réglages de recherche"
 

	
 
#: rhodecode/templates/admin/ldap/ldap.html:59
 
msgid "Base DN"
 
msgstr "Base de recherche"
 

	
 
#: rhodecode/templates/admin/ldap/ldap.html:63
 
msgid "LDAP Filter"
 
msgstr "Filtre de recherche"
 

	
 
#: rhodecode/templates/admin/ldap/ldap.html:67
 
msgid "LDAP Search Scope"
 
msgstr "Portée de recherche"
 

	
 
#: rhodecode/templates/admin/ldap/ldap.html:70
 
msgid "Attribute mappings"
 
msgstr "Correspondance des attributs"
 

	
 
#: rhodecode/templates/admin/ldap/ldap.html:72
 
msgid "Login Attribute"
 
msgstr "Attribut pour le nom d’utilisateur"
 

	
 
#: rhodecode/templates/admin/ldap/ldap.html:76
 
msgid "First Name Attribute"
 
msgstr "Attribut pour le prénom"
 

	
 
#: rhodecode/templates/admin/ldap/ldap.html:80
 
msgid "Last Name Attribute"
 
msgstr "Attribut pour le nom de famille"
 

	
 
#: rhodecode/templates/admin/ldap/ldap.html:84
 
msgid "E-mail Attribute"
 
msgstr "Attribut pour l’e-mail"
 

	
 
#: rhodecode/templates/admin/ldap/ldap.html:89
 
#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:66
 
#: rhodecode/templates/admin/settings/hooks.html:73
 
#: rhodecode/templates/admin/users/user_edit.html:129
 
#: rhodecode/templates/admin/users/user_edit.html:154
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:102
 
#: rhodecode/templates/admin/users/user_edit_my_account_form.html:79
 
#: rhodecode/templates/admin/users_groups/users_group_edit.html:115
 
#: rhodecode/templates/settings/repo_settings.html:84
 
msgid "Save"
 
msgstr "Enregistrer"
 

	
 
#: rhodecode/templates/admin/notifications/notifications.html:5
 
#: rhodecode/templates/admin/notifications/notifications.html:9
 
msgid "My Notifications"
 
msgstr "Mes notifications"
 

	
 
#: rhodecode/templates/admin/notifications/notifications.html:29
 
msgid "Mark all read"
 
msgstr "Tout marquer comme lu"
 

	
 
#: rhodecode/templates/admin/notifications/notifications_data.html:38
 
msgid "No notifications here yet"
 
msgstr "Aucune notification pour le moment."
 

	
 
#: rhodecode/templates/admin/notifications/show_notification.html:5
 
#: rhodecode/templates/admin/notifications/show_notification.html:11
 
msgid "Show notification"
 
msgstr "Notification"
 

	
 
#: rhodecode/templates/admin/notifications/show_notification.html:9
 
msgid "Notifications"
 
msgstr "Notifications"
 

	
 
#: rhodecode/templates/admin/permissions/permissions.html:5
 
msgid "Permissions administration"
 
msgstr "Gestion des permissions"
 

	
 
#: rhodecode/templates/admin/permissions/permissions.html:11
 
#: rhodecode/templates/admin/repos/repo_edit.html:116
 
#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:58
 
#: rhodecode/templates/admin/users/user_edit.html:139
 
#: rhodecode/templates/admin/users_groups/users_group_edit.html:100
 
#: rhodecode/templates/settings/repo_settings.html:77
 
msgid "Permissions"
 
msgstr "Permissions"
 

	
 
#: rhodecode/templates/admin/permissions/permissions.html:24
 
msgid "Default permissions"
 
msgstr "Permissions par défaut"
 

	
 
#: rhodecode/templates/admin/permissions/permissions.html:31
 
msgid "Anonymous access"
 
msgstr "Accès anonyme"
 

	
 
@@ -1565,97 +1599,97 @@ msgstr "Groupe de dépôt"
 

	
 
#: rhodecode/templates/admin/repos/repo_add_base.html:33
 
#: rhodecode/templates/admin/repos/repo_edit.html:53
 
#: rhodecode/templates/settings/repo_settings.html:52
 
msgid "Optional select a group to put this repository into."
 
msgstr "Sélectionnez un groupe (optionel) dans lequel sera placé le dépôt."
 

	
 
#: rhodecode/templates/admin/repos/repo_add_base.html:38
 
#: rhodecode/templates/admin/repos/repo_edit.html:58
 
msgid "Type"
 
msgstr "Type"
 

	
 
#: rhodecode/templates/admin/repos/repo_add_base.html:42
 
msgid "Type of repository to create."
 
msgstr "Type de dépôt à créer."
 

	
 
#: rhodecode/templates/admin/repos/repo_add_base.html:51
 
#: rhodecode/templates/admin/repos/repo_edit.html:70
 
#: rhodecode/templates/settings/repo_settings.html:61
 
msgid "Keep it short and to the point. Use a README file for longer descriptions."
 
msgstr ""
 
"Gardez cette description précise et concise. Utilisez un fichier README "
 
"pour des descriptions plus détaillées."
 

	
 
#: rhodecode/templates/admin/repos/repo_add_base.html:60
 
#: rhodecode/templates/admin/repos/repo_edit.html:80
 
#: rhodecode/templates/settings/repo_settings.html:71
 
msgid ""
 
"Private repositories are only visible to people explicitly added as "
 
"collaborators."
 
msgstr ""
 
"Les dépôts privés sont visibles seulement par les utilisateurs ajoutés "
 
"comme collaborateurs."
 

	
 
#: rhodecode/templates/admin/repos/repo_add_base.html:64
 
msgid "add"
 
msgstr "Ajouter"
 

	
 
#: rhodecode/templates/admin/repos/repo_add_create_repository.html:9
 
msgid "add new repository"
 
msgstr "ajouter un nouveau dépôt"
 

	
 
#: rhodecode/templates/admin/repos/repo_edit.html:5
 
msgid "Edit repository"
 
msgstr "Éditer le dépôt"
 

	
 
#: rhodecode/templates/admin/repos/repo_edit.html:13
 
#: rhodecode/templates/admin/users/user_edit.html:13
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:155
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:71
 
#: rhodecode/templates/admin/users_groups/users_group_edit.html:13
 
#: rhodecode/templates/files/files_source.html:32
 
#: rhodecode/templates/journal/journal.html:72
 
msgid "edit"
 
msgstr "éditer"
 

	
 
#: rhodecode/templates/admin/repos/repo_edit.html:40
 
#: rhodecode/templates/settings/repo_settings.html:39
 
msgid "Clone uri"
 
msgstr "URL de clone"
 

	
 
#: rhodecode/templates/admin/repos/repo_edit.html:85
 
msgid "Enable statistics"
 
msgstr "Activer les statistiques"
 

	
 
#: rhodecode/templates/admin/repos/repo_edit.html:89
 
msgid "Enable statistics window on summary page."
 
msgstr "Afficher les statistiques sur la page du dépôt."
 

	
 
#: rhodecode/templates/admin/repos/repo_edit.html:94
 
msgid "Enable downloads"
 
msgstr "Activer les téléchargements"
 

	
 
#: rhodecode/templates/admin/repos/repo_edit.html:98
 
msgid "Enable download menu on summary page."
 
msgstr "Afficher le menu de téléchargements sur la page du dépôt."
 

	
 
#: rhodecode/templates/admin/repos/repo_edit.html:108
 
msgid "Change owner of this repository."
 
msgstr "Changer le propriétaire de ce dépôt."
 

	
 
#: rhodecode/templates/admin/repos/repo_edit.html:134
 
msgid "Administration"
 
msgstr "Administration"
 

	
 
#: rhodecode/templates/admin/repos/repo_edit.html:137
 
msgid "Statistics"
 
msgstr "Statistiques"
 

	
 
#: rhodecode/templates/admin/repos/repo_edit.html:141
 
msgid "Reset current statistics"
 
msgstr "Réinitialiser les statistiques"
 

	
 
#: rhodecode/templates/admin/repos/repo_edit.html:141
 
msgid "Confirm to remove current statistics"
 
msgstr "Souhaitez-vous vraiment réinitialiser les statistiques de ce dépôt ?"
 

	
 
#: rhodecode/templates/admin/repos/repo_edit.html:144
 
@@ -1729,197 +1763,186 @@ msgstr ""
 
"Ce dépôt sera renommé de manière à le rendre inaccessible à RhodeCode et "
 
"au système de gestion de versions.\n"
 
"Si vous voulez le supprimer complètement, effectuez la suppression "
 
"manuellement."
 

	
 
#: rhodecode/templates/admin/repos/repo_edit.html:213
 
msgid "Set as fork"
 
msgstr "Indiquer comme fork"
 

	
 
#: rhodecode/templates/admin/repos/repo_edit.html:222
 
msgid "Manually set this repository as a fork of another"
 
msgstr "Permet d’indiquer manuellement que ce dépôt est un fork d’un autre dépôt."
 

	
 
#: rhodecode/templates/admin/repos/repo_edit_perms.html:3
 
#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:3
 
msgid "none"
 
msgstr "Aucune"
 

	
 
#: rhodecode/templates/admin/repos/repo_edit_perms.html:4
 
#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:4
 
msgid "read"
 
msgstr "Lecture"
 

	
 
#: rhodecode/templates/admin/repos/repo_edit_perms.html:5
 
#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:5
 
msgid "write"
 
msgstr "Écriture"
 

	
 
#: rhodecode/templates/admin/repos/repo_edit_perms.html:6
 
#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:6
 
#: rhodecode/templates/admin/users/users.html:38
 
#: rhodecode/templates/base/base.html:214
 
msgid "admin"
 
msgstr "Administration"
 

	
 
#: rhodecode/templates/admin/repos/repo_edit_perms.html:7
 
#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:7
 
msgid "member"
 
msgstr "Membre"
 

	
 
#: rhodecode/templates/admin/repos/repo_edit_perms.html:16
 
#: rhodecode/templates/data_table/_dt_elements.html:61
 
#: rhodecode/templates/journal/journal.html:123
 
#: rhodecode/templates/summary/summary.html:71
 
msgid "private repository"
 
msgstr "Dépôt privé"
 

	
 
#: rhodecode/templates/admin/repos/repo_edit_perms.html:33
 
#: rhodecode/templates/admin/repos/repo_edit_perms.html:53
 
#: rhodecode/templates/admin/repos/repo_edit_perms.html:58
 
#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:23
 
#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:42
 
msgid "revoke"
 
msgstr "Révoquer"
 

	
 
#: rhodecode/templates/admin/repos/repo_edit_perms.html:75
 
#: rhodecode/templates/admin/repos/repo_edit_perms.html:80
 
#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:64
 
msgid "Add another member"
 
msgstr "Ajouter un utilisateur"
 

	
 
#: rhodecode/templates/admin/repos/repo_edit_perms.html:89
 
#: rhodecode/templates/admin/repos/repo_edit_perms.html:94
 
#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:78
 
msgid "Failed to remove user"
 
msgstr "Échec de suppression de l’utilisateur"
 

	
 
#: rhodecode/templates/admin/repos/repo_edit_perms.html:104
 
#: rhodecode/templates/admin/repos/repo_edit_perms.html:109
 
#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:93
 
msgid "Failed to remove users group"
 
msgstr "Erreur lors de la suppression du groupe d’utilisateurs."
 

	
 
#: rhodecode/templates/admin/repos/repo_edit_perms.html:123
 
#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:112
 
msgid "Group"
 
msgstr "Groupe"
 

	
 
#: rhodecode/templates/admin/repos/repo_edit_perms.html:124
 
#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:113
 
#: rhodecode/templates/admin/users_groups/users_groups.html:33
 
msgid "members"
 
msgstr "Membres"
 

	
 
#: rhodecode/templates/admin/repos/repos.html:5
 
msgid "Repositories administration"
 
msgstr "Administration des dépôts"
 

	
 
#: rhodecode/templates/admin/repos/repos.html:40
 
#: rhodecode/templates/summary/summary.html:107
 
msgid "Contact"
 
msgstr "Contact"
 

	
 
#: rhodecode/templates/admin/repos/repos.html:68
 
#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:54
 
#: rhodecode/templates/admin/users/users.html:55
 
#: rhodecode/templates/admin/users_groups/users_groups.html:44
 
msgid "delete"
 
msgstr "Supprimer"
 

	
 
#: rhodecode/templates/admin/repos/repos.html:68
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:158
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:74
 
#, python-format
 
msgid "Confirm to delete this repository: %s"
 
msgstr "Voulez-vous vraiment supprimer le dépôt %s ?"
 

	
 
#: rhodecode/templates/admin/repos_groups/repos_groups.html:8
 
msgid "Groups"
 
msgstr "Groupes"
 

	
 
#: rhodecode/templates/admin/repos_groups/repos_groups.html:12
 
msgid "with"
 
msgstr "avec support de"
 

	
 
#: rhodecode/templates/admin/repos_groups/repos_groups_add.html:5
 
msgid "Add repos group"
 
msgstr "Créer un groupe de dépôt"
 

	
 
#: rhodecode/templates/admin/repos_groups/repos_groups_add.html:10
 
#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:10
 
msgid "Repos groups"
 
msgstr "Groupes de dépôts"
 

	
 
#: rhodecode/templates/admin/repos_groups/repos_groups_add.html:12
 
msgid "add new repos group"
 
msgstr "Nouveau groupe de dépôt"
 

	
 
#: rhodecode/templates/admin/repos_groups/repos_groups_add.html:50
 
#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:50
 
msgid "Group parent"
 
msgstr "Parent du groupe"
 

	
 
#: rhodecode/templates/admin/repos_groups/repos_groups_add.html:58
 
#: rhodecode/templates/admin/users/user_add.html:94
 
#: rhodecode/templates/admin/users_groups/users_group_add.html:49
 
#: rhodecode/templates/admin/users_groups/users_group_edit.html:90
 
msgid "save"
 
msgstr "Enregistrer"
 

	
 
#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:5
 
msgid "Edit repos group"
 
msgstr "Éditer le groupe de dépôt"
 

	
 
#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:12
 
msgid "edit repos group"
 
msgstr "Édition du groupe de dépôt"
 

	
 
#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:67
 
#: rhodecode/templates/admin/settings/settings.html:112
 
#: rhodecode/templates/admin/settings/settings.html:177
 
#: rhodecode/templates/admin/users/user_edit.html:130
 
#: rhodecode/templates/admin/users/user_edit.html:155
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:103
 
#: rhodecode/templates/admin/users/user_edit_my_account_form.html:80
 
#: rhodecode/templates/admin/users_groups/users_group_edit.html:116
 
#: rhodecode/templates/files/files_add.html:82
 
#: rhodecode/templates/files/files_edit.html:68
 
#: rhodecode/templates/settings/repo_settings.html:85
 
msgid "Reset"
 
msgstr "Réinitialiser"
 

	
 
#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:5
 
msgid "Repositories groups administration"
 
msgstr "Administration des groupes de dépôts"
 

	
 
#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:22
 
msgid "ADD NEW GROUP"
 
msgstr "AJOUTER UN NOUVEAU GROUPE"
 

	
 
#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:35
 
msgid "Number of toplevel repositories"
 
msgstr "Nombre de sous-dépôts"
 

	
 
#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:36
 
#: rhodecode/templates/admin/users/users.html:40
 
#: rhodecode/templates/admin/users_groups/users_groups.html:35
 
msgid "action"
 
msgstr "Action"
 

	
 
#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:54
 
#, python-format
 
msgid "Confirm to delete this group: %s"
 
msgstr "Voulez-vous vraiment supprimer le groupe « %s » ?"
 

	
 
#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:62
 
msgid "There are no repositories groups yet"
 
msgstr "Aucun groupe de dépôts n’a été créé pour le moment."
 

	
 
#: rhodecode/templates/admin/settings/hooks.html:5
 
#: rhodecode/templates/admin/settings/settings.html:5
 
msgid "Settings administration"
 
msgstr "Administration générale"
 

	
 
#: rhodecode/templates/admin/settings/hooks.html:9
 
#: rhodecode/templates/admin/settings/settings.html:9
 
#: rhodecode/templates/settings/repo_settings.html:5
 
#: rhodecode/templates/settings/repo_settings.html:13
 
msgid "Settings"
 
msgstr "Options"
 

	
 
#: rhodecode/templates/admin/settings/hooks.html:24
 
msgid "Built in hooks - read only"
 
@@ -2058,179 +2081,179 @@ msgid "Test Email"
 
msgstr "E-mail de test"
 

	
 
#: rhodecode/templates/admin/settings/settings.html:199
 
msgid "Email to"
 
msgstr "Envoyer l’e-mail à"
 

	
 
#: rhodecode/templates/admin/settings/settings.html:207
 
msgid "Send"
 
msgstr "Envoyer"
 

	
 
#: rhodecode/templates/admin/settings/settings.html:213
 
msgid "System Info and Packages"
 
msgstr "Information système et paquets"
 

	
 
#: rhodecode/templates/admin/settings/settings.html:216
 
msgid "show"
 
msgstr "Montrer"
 

	
 
#: rhodecode/templates/admin/users/user_add.html:5
 
msgid "Add user"
 
msgstr "Ajouter un utilisateur"
 

	
 
#: rhodecode/templates/admin/users/user_add.html:10
 
#: rhodecode/templates/admin/users/user_edit.html:11
 
#: rhodecode/templates/admin/users/users.html:9
 
msgid "Users"
 
msgstr "Utilisateurs"
 

	
 
#: rhodecode/templates/admin/users/user_add.html:12
 
msgid "add new user"
 
msgstr "nouvel utilisateur"
 

	
 
#: rhodecode/templates/admin/users/user_add.html:50
 
msgid "Password confirmation"
 
msgstr "Confirmation"
 

	
 
#: rhodecode/templates/admin/users/user_add.html:86
 
#: rhodecode/templates/admin/users/user_edit.html:113
 
#: rhodecode/templates/admin/users_groups/users_group_add.html:41
 
#: rhodecode/templates/admin/users_groups/users_group_edit.html:42
 
msgid "Active"
 
msgstr "Actif"
 

	
 
#: rhodecode/templates/admin/users/user_edit.html:5
 
msgid "Edit user"
 
msgstr "Éditer l'utilisateur"
 

	
 
#: rhodecode/templates/admin/users/user_edit.html:34
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:33
 
#: rhodecode/templates/admin/users/user_edit_my_account_form.html:10
 
msgid "Change your avatar at"
 
msgstr "Vous pouvez changer votre avatar sur"
 

	
 
#: rhodecode/templates/admin/users/user_edit.html:35
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:34
 
#: rhodecode/templates/admin/users/user_edit_my_account_form.html:11
 
msgid "Using"
 
msgstr "en utilisant l’adresse"
 

	
 
#: rhodecode/templates/admin/users/user_edit.html:43
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:43
 
#: rhodecode/templates/admin/users/user_edit_my_account_form.html:20
 
msgid "API key"
 
msgstr "Clé d’API"
 

	
 
#: rhodecode/templates/admin/users/user_edit.html:59
 
msgid "LDAP DN"
 
msgstr "DN LDAP"
 

	
 
#: rhodecode/templates/admin/users/user_edit.html:68
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:58
 
#: rhodecode/templates/admin/users/user_edit_my_account_form.html:35
 
msgid "New password"
 
msgstr "Nouveau mot de passe"
 

	
 
#: rhodecode/templates/admin/users/user_edit.html:77
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:67
 
#: rhodecode/templates/admin/users/user_edit_my_account_form.html:44
 
msgid "New password confirmation"
 
msgstr "Confirmation du nouveau mot de passe"
 

	
 
#: rhodecode/templates/admin/users/user_edit.html:147
 
#: rhodecode/templates/admin/users_groups/users_group_edit.html:108
 
msgid "Create repositories"
 
msgstr "Création de dépôts"
 

	
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:5
 
#: rhodecode/templates/base/base.html:124
 
msgid "My account"
 
msgstr "Mon compte"
 

	
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:9
 
msgid "My Account"
 
msgstr "Mon compte"
 

	
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:116
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:32
 
#: rhodecode/templates/journal/journal.html:32
 
msgid "My repos"
 
msgstr "Mes dépôts"
 

	
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:116
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:32
 
msgid "My permissions"
 
msgstr "Mes permissions"
 

	
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:121
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:37
 
#: rhodecode/templates/journal/journal.html:37
 
msgid "ADD"
 
msgstr "AJOUTER"
 

	
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:134
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:50
 
#: rhodecode/templates/bookmarks/bookmarks.html:40
 
#: rhodecode/templates/bookmarks/bookmarks_data.html:9
 
#: rhodecode/templates/branches/branches.html:40
 
#: rhodecode/templates/journal/journal.html:51
 
#: rhodecode/templates/tags/tags.html:40
 
#: rhodecode/templates/tags/tags_data.html:9
 
msgid "Revision"
 
msgstr "Révision"
 

	
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:155
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:71
 
#: rhodecode/templates/journal/journal.html:72
 
msgid "private"
 
msgstr "privé"
 

	
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:165
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:81
 
#: rhodecode/templates/journal/journal.html:85
 
msgid "No repositories yet"
 
msgstr "Aucun dépôt pour le moment"
 

	
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:167
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:83
 
#: rhodecode/templates/journal/journal.html:87
 
msgid "create one now"
 
msgstr "En créer un maintenant"
 

	
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:184
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:285
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:100
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:201
 
msgid "Permission"
 
msgstr "Permission"
 

	
 
#: rhodecode/templates/admin/users/users.html:5
 
msgid "Users administration"
 
msgstr "Administration des utilisateurs"
 

	
 
#: rhodecode/templates/admin/users/users.html:23
 
msgid "ADD NEW USER"
 
msgstr "NOUVEL UTILISATEUR"
 

	
 
#: rhodecode/templates/admin/users/users.html:33
 
msgid "username"
 
msgstr "Nom d’utilisateur"
 

	
 
#: rhodecode/templates/admin/users/users.html:34
 
#: rhodecode/templates/branches/branches_data.html:6
 
msgid "name"
 
msgstr "Prénom"
 

	
 
#: rhodecode/templates/admin/users/users.html:35
 
msgid "lastname"
 
msgstr "Nom de famille"
 

	
 
#: rhodecode/templates/admin/users/users.html:36
 
msgid "last login"
 
msgstr "Dernière connexion"
 

	
 
#: rhodecode/templates/admin/users/users.html:37
 
#: rhodecode/templates/admin/users_groups/users_groups.html:34
 
msgid "active"
 
msgstr "Actif"
 

	
 
#: rhodecode/templates/admin/users/users.html:39
 
#: rhodecode/templates/base/base.html:223
 
msgid "ldap"
 
msgstr "LDAP"
 

	
 
#: rhodecode/templates/admin/users/users.html:56
 
#, python-format
 
msgid "Confirm to delete this user: %s"
 
msgstr "Voulez-vous vraiment supprimer l’utilisateur « %s » ?"
 

	
 
#: rhodecode/templates/admin/users_groups/users_group_add.html:5
 
msgid "Add users group"
 
msgstr "Ajouter un groupe d’utilisateur"
 

	
 
#: rhodecode/templates/admin/users_groups/users_group_add.html:10
 
@@ -2241,96 +2264,101 @@ msgstr "Groupes d’utilisateurs"
 
#: rhodecode/templates/admin/users_groups/users_group_add.html:12
 
msgid "add new users group"
 
msgstr "Ajouter un nouveau groupe"
 

	
 
#: rhodecode/templates/admin/users_groups/users_group_edit.html:5
 
msgid "Edit users group"
 
msgstr "Éditer le groupe d’utilisateurs"
 

	
 
#: rhodecode/templates/admin/users_groups/users_group_edit.html:11
 
msgid "UsersGroups"
 
msgstr "UsersGroups"
 

	
 
#: rhodecode/templates/admin/users_groups/users_group_edit.html:50
 
msgid "Members"
 
msgstr "Membres"
 

	
 
#: rhodecode/templates/admin/users_groups/users_group_edit.html:58
 
msgid "Choosen group members"
 
msgstr "Membres du groupe"
 

	
 
#: rhodecode/templates/admin/users_groups/users_group_edit.html:61
 
msgid "Remove all elements"
 
msgstr "Tout enlever"
 

	
 
#: rhodecode/templates/admin/users_groups/users_group_edit.html:75
 
msgid "Available members"
 
msgstr "Membres disponibles"
 

	
 
#: rhodecode/templates/admin/users_groups/users_group_edit.html:79
 
msgid "Add all elements"
 
msgstr "Tout ajouter"
 

	
 
#: rhodecode/templates/admin/users_groups/users_group_edit.html:126
 
msgid "Group members"
 
msgstr "Membres du groupe"
 

	
 
#: rhodecode/templates/admin/users_groups/users_groups.html:5
 
msgid "Users groups administration"
 
msgstr "Gestion des groupes d’utilisateurs"
 

	
 
#: rhodecode/templates/admin/users_groups/users_groups.html:23
 
msgid "ADD NEW USER GROUP"
 
msgstr "AJOUTER UN NOUVEAU GROUPE"
 

	
 
#: rhodecode/templates/admin/users_groups/users_groups.html:32
 
msgid "group name"
 
msgstr "Nom du groupe"
 

	
 
#: rhodecode/templates/admin/users_groups/users_groups.html:33
 
#: rhodecode/templates/base/root.html:46
 
msgid "members"
 
msgstr "Membres"
 

	
 
#: rhodecode/templates/admin/users_groups/users_groups.html:45
 
#, python-format
 
msgid "Confirm to delete this users group: %s"
 
msgstr "Voulez-vous vraiment supprimer le groupe d‘utilisateurs « %s » ?"
 

	
 
#: rhodecode/templates/base/base.html:41
 
msgid "Submit a bug"
 
msgstr "Signaler un bogue"
 

	
 
#: rhodecode/templates/base/base.html:77
 
msgid "Login to your account"
 
msgstr "Connexion à votre compte"
 

	
 
#: rhodecode/templates/base/base.html:100
 
msgid "Forgot password ?"
 
msgstr "Mot de passe oublié ?"
 

	
 
#: rhodecode/templates/base/base.html:107
 
msgid "Log In"
 
msgstr "Connexion"
 

	
 
#: rhodecode/templates/base/base.html:118
 
msgid "Inbox"
 
msgstr "Boîte de réception"
 

	
 
#: rhodecode/templates/base/base.html:122
 
#: rhodecode/templates/base/base.html:289
 
#: rhodecode/templates/base/base.html:291
 
#: rhodecode/templates/base/base.html:293
 
msgid "Home"
 
msgstr "Accueil"
 

	
 
#: rhodecode/templates/base/base.html:123
 
#: rhodecode/templates/base/base.html:298
 
#: rhodecode/templates/base/base.html:300
 
#: rhodecode/templates/base/base.html:302
 
#: rhodecode/templates/journal/journal.html:4
 
#: rhodecode/templates/journal/journal.html:17
 
#: rhodecode/templates/journal/public_journal.html:4
 
msgid "Journal"
 
msgstr "Historique"
 

	
 
#: rhodecode/templates/base/base.html:125
 
msgid "Log Out"
 
msgstr "Se déconnecter"
 

	
 
#: rhodecode/templates/base/base.html:144
 
msgid "Switch repository"
 
@@ -2400,111 +2428,115 @@ msgstr "Réglages"
 
msgid "fork"
 
msgstr "Fork"
 

	
 
#: rhodecode/templates/base/base.html:210
 
msgid "search"
 
msgstr "Rechercher"
 

	
 
#: rhodecode/templates/base/base.html:217
 
msgid "journal"
 
msgstr "Journal"
 

	
 
#: rhodecode/templates/base/base.html:219
 
msgid "repositories groups"
 
msgstr "Groupes de dépôts"
 

	
 
#: rhodecode/templates/base/base.html:220
 
msgid "users"
 
msgstr "Utilisateurs"
 

	
 
#: rhodecode/templates/base/base.html:221
 
msgid "users groups"
 
msgstr "Groupes d’utilisateurs"
 

	
 
#: rhodecode/templates/base/base.html:222
 
msgid "permissions"
 
msgstr "Permissions"
 

	
 
#: rhodecode/templates/base/base.html:235
 
#: rhodecode/templates/base/base.html:237
 
#: rhodecode/templates/followers/followers.html:5
 
msgid "Followers"
 
msgstr "Followers"
 

	
 
#: rhodecode/templates/base/base.html:243
 
#: rhodecode/templates/base/base.html:245
 
#: rhodecode/templates/forks/forks.html:5
 
msgid "Forks"
 
msgstr "Forks"
 

	
 
#: rhodecode/templates/base/base.html:316
 
#: rhodecode/templates/base/base.html:318
 
#: rhodecode/templates/base/base.html:320
 
#: rhodecode/templates/search/search.html:4
 
#: rhodecode/templates/search/search.html:24
 
#: rhodecode/templates/search/search.html:46
 
msgid "Search"
 
msgstr "Rechercher"
 

	
 
#: rhodecode/templates/base/root.html:53
 
#: rhodecode/templates/base/root.html:42
 
msgid "add another comment"
 
msgstr "Nouveau commentaire"
 

	
 
#: rhodecode/templates/base/root.html:54
 
#: rhodecode/templates/base/root.html:43
 
#: rhodecode/templates/journal/journal.html:111
 
#: rhodecode/templates/summary/summary.html:52
 
msgid "Stop following this repository"
 
msgstr "Arrêter de suivre ce dépôt"
 

	
 
#: rhodecode/templates/base/root.html:55
 
#: rhodecode/templates/base/root.html:44
 
#: rhodecode/templates/summary/summary.html:56
 
msgid "Start following this repository"
 
msgstr "Suivre ce dépôt"
 

	
 
#: rhodecode/templates/base/root.html:45
 
msgid "Group"
 
msgstr "Groupe"
 

	
 
#: rhodecode/templates/bookmarks/bookmarks.html:5
 
msgid "Bookmarks"
 
msgstr "Signets"
 

	
 
#: rhodecode/templates/bookmarks/bookmarks.html:39
 
#: rhodecode/templates/bookmarks/bookmarks_data.html:8
 
#: rhodecode/templates/branches/branches.html:39
 
#: rhodecode/templates/tags/tags.html:39
 
#: rhodecode/templates/tags/tags_data.html:8
 
msgid "Author"
 
msgstr "Auteur"
 

	
 
#: rhodecode/templates/branches/branches_data.html:7
 
msgid "date"
 
msgstr "Date"
 

	
 
#: rhodecode/templates/branches/branches_data.html:8
 
#: rhodecode/templates/shortlog/shortlog_data.html:8
 
msgid "author"
 
msgstr "Auteur"
 

	
 
#: rhodecode/templates/branches/branches_data.html:9
 
#: rhodecode/templates/shortlog/shortlog_data.html:5
 
msgid "revision"
 
msgstr "Révision"
 

	
 
#: rhodecode/templates/changelog/changelog.html:15
 
#, python-format
 
msgid "showing %d out of %d revision"
 
msgid_plural "showing %d out of %d revisions"
 
msgstr[0] "Affichage de %d révision sur %d"
 
msgstr[1] "Affichage de %d révisions sur %d"
 

	
 
#: rhodecode/templates/changelog/changelog.html:38
 
msgid "Show"
 
msgstr "Afficher"
 

	
 
#: rhodecode/templates/changelog/changelog.html:64
 
#: rhodecode/templates/summary/summary.html:352
 
msgid "show more"
 
msgstr "montrer plus"
 

	
 
#: rhodecode/templates/changelog/changelog.html:68
 
msgid "Affected number of files, click to show more details"
 
msgstr "Nombre de fichiers modifiés, cliquez pour plus de détails"
 

	
 
#: rhodecode/templates/changelog/changelog.html:82
 
#: rhodecode/templates/changeset/changeset.html:72
 
@@ -2543,162 +2575,162 @@ msgstr "Tag"
 
msgid "Show selected changes __S -> __E"
 
msgstr "Afficher les changements sélections de __S à __E"
 

	
 
#: rhodecode/templates/changelog/changelog.html:235
 
msgid "There are no changes yet"
 
msgstr "Il n’y a aucun changement pour le moment"
 

	
 
#: rhodecode/templates/changelog/changelog_details.html:2
 
#: rhodecode/templates/changeset/changeset.html:60
 
msgid "removed"
 
msgstr "Supprimés"
 

	
 
#: rhodecode/templates/changelog/changelog_details.html:3
 
#: rhodecode/templates/changeset/changeset.html:61
 
msgid "changed"
 
msgstr "Modifiés"
 

	
 
#: rhodecode/templates/changelog/changelog_details.html:4
 
#: rhodecode/templates/changeset/changeset.html:62
 
msgid "added"
 
msgstr "Ajoutés"
 

	
 
#: rhodecode/templates/changelog/changelog_details.html:6
 
#: rhodecode/templates/changelog/changelog_details.html:7
 
#: rhodecode/templates/changelog/changelog_details.html:8
 
#: rhodecode/templates/changeset/changeset.html:64
 
#: rhodecode/templates/changeset/changeset.html:65
 
#: rhodecode/templates/changeset/changeset.html:66
 
#, python-format
 
msgid "affected %s files"
 
msgstr "%s fichiers affectés"
 

	
 
#: rhodecode/templates/changeset/changeset.html:6
 
#: rhodecode/templates/changeset/changeset.html:14
 
msgid "Changeset"
 
msgstr "Changements"
 

	
 
#: rhodecode/templates/changeset/changeset.html:37
 
#: rhodecode/templates/changeset/diff_block.html:20
 
msgid "raw diff"
 
msgstr "Diff brut"
 

	
 
#: rhodecode/templates/changeset/changeset.html:38
 
#: rhodecode/templates/changeset/diff_block.html:21
 
msgid "download diff"
 
msgstr "Télécharger le diff"
 

	
 
#: rhodecode/templates/changeset/changeset.html:42
 
#: rhodecode/templates/changeset/changeset_file_comment.html:69
 
#: rhodecode/templates/changeset/changeset_file_comment.html:71
 
#, python-format
 
msgid "%d comment"
 
msgid_plural "%d comments"
 
msgstr[0] "%d commentaire"
 
msgstr[1] "%d commentaires"
 

	
 
#: rhodecode/templates/changeset/changeset.html:42
 
#: rhodecode/templates/changeset/changeset_file_comment.html:69
 
#: rhodecode/templates/changeset/changeset_file_comment.html:71
 
#, python-format
 
msgid "(%d inline)"
 
msgid_plural "(%d inline)"
 
msgstr[0] "(et %d en ligne)"
 
msgstr[1] "(et %d en ligne)"
 

	
 
#: rhodecode/templates/changeset/changeset.html:97
 
#, python-format
 
msgid "%s files affected with %s insertions and %s deletions:"
 
msgstr "%s fichiers affectés avec %s insertions et %s suppressions :"
 

	
 
#: rhodecode/templates/changeset/changeset.html:113
 
msgid "Changeset was too big and was cut off..."
 
msgstr "Cet ensemble de changements était trop important et a été découpé…"
 

	
 
#: rhodecode/templates/changeset/changeset_file_comment.html:35
 
msgid "Submitting..."
 
msgstr "Envoi…"
 

	
 
#: rhodecode/templates/changeset/changeset_file_comment.html:38
 
msgid "Commenting on line {1}."
 
msgstr "Commentaire sur la ligne {1}."
 

	
 
#: rhodecode/templates/changeset/changeset_file_comment.html:39
 
#: rhodecode/templates/changeset/changeset_file_comment.html:100
 
#: rhodecode/templates/changeset/changeset_file_comment.html:102
 
#, python-format
 
msgid "Comments parsed using %s syntax with %s support."
 
msgstr ""
 
"Les commentaires sont analysés avec la syntaxe %s, avec le support de la "
 
"commande %s."
 

	
 
#: rhodecode/templates/changeset/changeset_file_comment.html:41
 
#: rhodecode/templates/changeset/changeset_file_comment.html:102
 
#: rhodecode/templates/changeset/changeset_file_comment.html:104
 
msgid "Use @username inside this text to send notification to this RhodeCode user"
 
msgstr ""
 
"Utilisez @nomutilisateur dans ce texte pour envoyer une notification à "
 
"l’utilisateur RhodeCode en question."
 

	
 
#: rhodecode/templates/changeset/changeset_file_comment.html:47
 
#: rhodecode/templates/changeset/changeset_file_comment.html:107
 
#: rhodecode/templates/changeset/changeset_file_comment.html:49
 
#: rhodecode/templates/changeset/changeset_file_comment.html:110
 
msgid "Comment"
 
msgstr "Commentaire"
 

	
 
#: rhodecode/templates/changeset/changeset_file_comment.html:48
 
#: rhodecode/templates/changeset/changeset_file_comment.html:59
 
#: rhodecode/templates/changeset/changeset_file_comment.html:50
 
#: rhodecode/templates/changeset/changeset_file_comment.html:61
 
msgid "Hide"
 
msgstr "Masquer"
 

	
 
#: rhodecode/templates/changeset/changeset_file_comment.html:55
 
#: rhodecode/templates/changeset/changeset_file_comment.html:57
 
msgid "You need to be logged in to comment."
 
msgstr "Vous devez être connecté pour poster des commentaires."
 

	
 
#: rhodecode/templates/changeset/changeset_file_comment.html:55
 
#: rhodecode/templates/changeset/changeset_file_comment.html:57
 
msgid "Login now"
 
msgstr "Se connecter maintenant"
 

	
 
#: rhodecode/templates/changeset/changeset_file_comment.html:97
 
#: rhodecode/templates/changeset/changeset_file_comment.html:99
 
msgid "Leave a comment"
 
msgstr "Laisser un commentaire"
 

	
 
#: rhodecode/templates/changeset/changeset_range.html:29
 
msgid "Compare View"
 
msgstr "Comparaison"
 

	
 
#: rhodecode/templates/changeset/changeset_range.html:49
 
msgid "Files affected"
 
msgstr "Fichiers affectés"
 

	
 
#: rhodecode/templates/changeset/diff_block.html:19
 
msgid "diff"
 
msgstr "Diff"
 

	
 
#: rhodecode/templates/changeset/diff_block.html:27
 
msgid "show inline comments"
 
msgstr "Afficher les commentaires"
 

	
 
#: rhodecode/templates/data_table/_dt_elements.html:33
 
#: rhodecode/templates/data_table/_dt_elements.html:35
 
#: rhodecode/templates/data_table/_dt_elements.html:37
 
#: rhodecode/templates/forks/fork.html:5
 
msgid "Fork"
 
msgstr "Fork"
 

	
 
#: rhodecode/templates/data_table/_dt_elements.html:54
 
#: rhodecode/templates/journal/journal.html:117
 
#: rhodecode/templates/summary/summary.html:63
 
msgid "Mercurial repository"
 
msgstr "Dépôt Mercurial"
 

	
 
#: rhodecode/templates/data_table/_dt_elements.html:56
 
#: rhodecode/templates/journal/journal.html:119
 
#: rhodecode/templates/summary/summary.html:66
 
msgid "Git repository"
 
msgstr "Dépôt Git"
 

	
 
#: rhodecode/templates/data_table/_dt_elements.html:63
 
#: rhodecode/templates/journal/journal.html:125
 
#: rhodecode/templates/summary/summary.html:73
 
msgid "public repository"
 
msgstr "Dépôt public"
 

	
 
#: rhodecode/templates/data_table/_dt_elements.html:74
 
#: rhodecode/templates/summary/summary.html:82
 
#: rhodecode/templates/summary/summary.html:83
 
msgid "Fork of"
rhodecode/i18n/pt_BR/LC_MESSAGES/rhodecode.po
Show inline comments
 
# Portuguese (Brazil) translations for RhodeCode.
 
# Copyright (C) 2011-2012 Augusto Herrmann
 
# This file is distributed under the same license as the RhodeCode project.
 
# Augusto Herrmann <augusto.herrmann@gmail.com>, 2012.
 
#
 
msgid ""
 
msgstr ""
 
"Project-Id-Version: RhodeCode 1.2.0\n"
 
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
 
"POT-Creation-Date: 2012-05-27 17:41+0200\n"
 
"POT-Creation-Date: 2012-06-03 01:06+0200\n"
 
"PO-Revision-Date: 2012-05-22 16:47-0300\n"
 
"Last-Translator: Augusto Herrmann <augusto.herrmann@gmail.com>\n"
 
"Language-Team: pt_BR <LL@li.org>\n"
 
"Plural-Forms: nplurals=2; plural=(n > 1)\n"
 
"MIME-Version: 1.0\n"
 
"Content-Type: text/plain; charset=utf-8\n"
 
"Content-Transfer-Encoding: 8bit\n"
 
"Generated-By: Babel 0.9.6\n"
 

	
 
#: rhodecode/controllers/changelog.py:96
 
#: rhodecode/controllers/changelog.py:95
 
msgid "All Branches"
 
msgstr "Todos os Ramos"
 

	
 
#: rhodecode/controllers/changeset.py:79
 
#: rhodecode/controllers/changeset.py:80
 
msgid "show white space"
 
msgstr "mostrar espaços em branco"
 

	
 
#: rhodecode/controllers/changeset.py:86 rhodecode/controllers/changeset.py:93
 
#: rhodecode/controllers/changeset.py:87 rhodecode/controllers/changeset.py:94
 
msgid "ignore white space"
 
msgstr "ignorar espaços em branco"
 

	
 
#: rhodecode/controllers/changeset.py:153
 
#: rhodecode/controllers/changeset.py:154
 
#, python-format
 
msgid "%s line context"
 
msgstr "contexto de %s linhas"
 

	
 
#: rhodecode/controllers/changeset.py:320
 
#: rhodecode/controllers/changeset.py:335 rhodecode/lib/diffs.py:62
 
#: rhodecode/controllers/changeset.py:324
 
#: rhodecode/controllers/changeset.py:339 rhodecode/lib/diffs.py:62
 
msgid "binary file"
 
msgstr "arquivo binário"
 

	
 
#: rhodecode/controllers/error.py:69
 
msgid "Home page"
 
msgstr "Página inicial"
 

	
 
#: rhodecode/controllers/error.py:98
 
msgid "The request could not be understood by the server due to malformed syntax."
 
msgstr ""
 
"A requisição não pôde ser compreendida pelo servidor devido à sintaxe mal"
 
" formada"
 

	
 
#: rhodecode/controllers/error.py:101
 
msgid "Unauthorized access to resource"
 
msgstr "Acesso não autorizado ao recurso"
 

	
 
#: rhodecode/controllers/error.py:103
 
msgid "You don't have permission to view this page"
 
msgstr "Você não tem permissão para ver esta página"
 

	
 
#: rhodecode/controllers/error.py:105
 
msgid "The resource could not be found"
 
msgstr "O recurso não pôde ser encontrado"
 

	
 
#: rhodecode/controllers/error.py:107
 
msgid ""
 
"The server encountered an unexpected condition which prevented it from "
 
"fulfilling the request."
 
msgstr ""
 
"O servidor encontrou uma condição inesperada que o impediu de satisfazer "
 
"a requisição"
 

	
 
#: rhodecode/controllers/feed.py:48
 
#, python-format
 
msgid "Changes on %s repository"
 
msgstr "Alterações no repositório %s"
 

	
 
#: rhodecode/controllers/feed.py:49
 
#, python-format
 
msgid "%s %s feed"
 
msgstr "%s - feed %s"
 

	
 
#: rhodecode/controllers/files.py:86
 
#: rhodecode/templates/admin/repos/repo_add.html:13
 
msgid "add new"
 
msgstr "adicionar novo"
 

	
 
@@ -146,165 +146,165 @@ msgstr "Conjuntos de mudanças"
 

	
 
#: rhodecode/controllers/files.py:462 rhodecode/controllers/summary.py:230
 
#: rhodecode/templates/branches/branches.html:5
 
msgid "Branches"
 
msgstr "Ramos"
 

	
 
#: rhodecode/controllers/files.py:463 rhodecode/controllers/summary.py:231
 
#: rhodecode/templates/tags/tags.html:5
 
msgid "Tags"
 
msgstr "Etiquetas"
 

	
 
#: rhodecode/controllers/forks.py:69 rhodecode/controllers/admin/repos.py:86
 
#, python-format
 
msgid ""
 
"%s repository is not mapped to db perhaps it was created or renamed from "
 
"the filesystem please run the application again in order to rescan "
 
"repositories"
 
msgstr ""
 
"repositório %s não está mapeado ao bd. Talvez ele tenha sido criado ou "
 
"renomeado a partir do sistema de arquivos. Por favor execute a aplicação "
 
"outra vez para varrer novamente por repositórios"
 

	
 
#: rhodecode/controllers/forks.py:128 rhodecode/controllers/settings.py:69
 
#, python-format
 
msgid ""
 
"%s repository is not mapped to db perhaps it was created or renamed from "
 
"the file system please run the application again in order to rescan "
 
"repositories"
 
msgstr ""
 
"repositório %s não está mapeado ao bd. Talvez ele tenha sido criado ou "
 
"renomeado a partir do sistema de arquivos. Por favor execute a aplicação "
 
"outra vez para varrer novamente por repositórios"
 

	
 
#: rhodecode/controllers/forks.py:163
 
#, python-format
 
msgid "forked %s repository as %s"
 
msgstr "bifurcado repositório %s como %s"
 

	
 
#: rhodecode/controllers/forks.py:177
 
#, python-format
 
msgid "An error occurred during repository forking %s"
 
msgstr "Ocorreu um erro ao bifurcar o repositório %s"
 

	
 
#: rhodecode/controllers/journal.py:53
 
#, python-format
 
msgid "%s public journal %s feed"
 
msgstr "diário público de %s - feed %s"
 

	
 
#: rhodecode/controllers/journal.py:190 rhodecode/controllers/journal.py:224
 
#: rhodecode/controllers/journal.py:190 rhodecode/controllers/journal.py:223
 
#: rhodecode/templates/admin/repos/repo_edit.html:177
 
#: rhodecode/templates/base/base.html:307
 
#: rhodecode/templates/base/base.html:309
 
#: rhodecode/templates/base/base.html:311
 
msgid "Public journal"
 
msgstr "Diário público"
 

	
 
#: rhodecode/controllers/login.py:116
 
msgid "You have successfully registered into rhodecode"
 
msgstr "Você se registrou com sucesso no rhodecode"
 

	
 
#: rhodecode/controllers/login.py:137
 
msgid "Your password reset link was sent"
 
msgstr "Seu link de reinicialização de senha foi enviado"
 

	
 
#: rhodecode/controllers/login.py:157
 
msgid ""
 
"Your password reset was successful, new password has been sent to your "
 
"email"
 
msgstr ""
 
"Sua reinicialização de senha foi bem sucedida, sua senha foi enviada ao "
 
"seu e-mail"
 

	
 
#: rhodecode/controllers/search.py:114
 
msgid "Invalid search query. Try quoting it."
 
msgstr "Consulta de busca inválida. Tente usar aspas."
 

	
 
#: rhodecode/controllers/search.py:119
 
msgid "There is no index to search in. Please run whoosh indexer"
 
msgstr "Não há índice onde pesquisa. Por favor execute o indexador whoosh"
 

	
 
#: rhodecode/controllers/search.py:123
 
msgid "An error occurred during this search operation"
 
msgstr "Ocorreu um erro durante essa operação de busca"
 

	
 
#: rhodecode/controllers/settings.py:103
 
#: rhodecode/controllers/admin/repos.py:211
 
#: rhodecode/controllers/admin/repos.py:213
 
#, python-format
 
msgid "Repository %s updated successfully"
 
msgstr "Repositório %s atualizado com sucesso"
 

	
 
#: rhodecode/controllers/settings.py:121
 
#: rhodecode/controllers/admin/repos.py:229
 
#: rhodecode/controllers/admin/repos.py:231
 
#, python-format
 
msgid "error occurred during update of repository %s"
 
msgstr "ocorreu um erro ao atualizar o repositório %s"
 

	
 
#: rhodecode/controllers/settings.py:139
 
#: rhodecode/controllers/admin/repos.py:247
 
#: rhodecode/controllers/admin/repos.py:249
 
#, python-format
 
msgid ""
 
"%s repository is not mapped to db perhaps it was moved or renamed  from "
 
"the filesystem please run the application again in order to rescan "
 
"repositories"
 
msgstr ""
 
"repositório %s não está mapeado ao bd. Talvez ele tenha sido movido ou "
 
"renomeado a partir do sistema de arquivos. Por favor execute a aplicação "
 
"outra vez para varrer novamente por repositórios"
 

	
 
#: rhodecode/controllers/settings.py:151
 
#: rhodecode/controllers/admin/repos.py:259
 
#: rhodecode/controllers/admin/repos.py:261
 
#, python-format
 
msgid "deleted repository %s"
 
msgstr "excluído o repositório %s"
 

	
 
#: rhodecode/controllers/settings.py:155
 
#: rhodecode/controllers/admin/repos.py:269
 
#: rhodecode/controllers/admin/repos.py:275
 
#: rhodecode/controllers/admin/repos.py:271
 
#: rhodecode/controllers/admin/repos.py:277
 
#, python-format
 
msgid "An error occurred during deletion of %s"
 
msgstr "Ocorreu um erro durante a exclusão de %s"
 

	
 
#: rhodecode/controllers/summary.py:138
 
msgid "No data loaded yet"
 
msgstr "Ainda não há dados carregados"
 

	
 
#: rhodecode/controllers/summary.py:142
 
#: rhodecode/templates/summary/summary.html:139
 
msgid "Statistics are disabled for this repository"
 
msgstr "As estatísticas estão desabillitadas para este repositório"
 

	
 
#: rhodecode/controllers/admin/ldap_settings.py:49
 
msgid "BASE"
 
msgstr "BASE"
 

	
 
#: rhodecode/controllers/admin/ldap_settings.py:50
 
msgid "ONELEVEL"
 
msgstr "UMNÍVEL"
 

	
 
#: rhodecode/controllers/admin/ldap_settings.py:51
 
msgid "SUBTREE"
 
msgstr "SUBÁRVORE"
 

	
 
#: rhodecode/controllers/admin/ldap_settings.py:55
 
msgid "NEVER"
 
msgstr "NUNCA"
 

	
 
#: rhodecode/controllers/admin/ldap_settings.py:56
 
msgid "ALLOW"
 
msgstr "PERMITIR"
 

	
 
#: rhodecode/controllers/admin/ldap_settings.py:57
 
msgid "TRY"
 
msgstr "TENTAR"
 

	
 
#: rhodecode/controllers/admin/ldap_settings.py:58
 
msgid "DEMAND"
 
msgstr "EXIGIR"
 

	
 
#: rhodecode/controllers/admin/ldap_settings.py:59
 
msgid "HARD"
 
msgstr "DIFÍCIL"
 

	
 
#: rhodecode/controllers/admin/ldap_settings.py:63
 
msgid "No encryption"
 
msgstr "Sem criptografia"
 
@@ -363,429 +363,463 @@ msgstr "Gravar"
 
#: rhodecode/templates/base/base.html:326
 
#: rhodecode/templates/base/base.html:328
 
#: rhodecode/templates/base/base.html:330
 
msgid "Admin"
 
msgstr "Administrador"
 

	
 
#: rhodecode/controllers/admin/permissions.py:65
 
msgid "disabled"
 
msgstr "desabilitado"
 

	
 
#: rhodecode/controllers/admin/permissions.py:67
 
msgid "allowed with manual account activation"
 
msgstr "permitido com ativação manual de conta"
 

	
 
#: rhodecode/controllers/admin/permissions.py:69
 
msgid "allowed with automatic account activation"
 
msgstr "permitido com ativação automática de conta"
 

	
 
#: rhodecode/controllers/admin/permissions.py:71
 
msgid "Disabled"
 
msgstr "Desabilitado"
 

	
 
#: rhodecode/controllers/admin/permissions.py:72
 
msgid "Enabled"
 
msgstr "Habilitado"
 

	
 
#: rhodecode/controllers/admin/permissions.py:106
 
msgid "Default permissions updated successfully"
 
msgstr "Permissões padrões atualizadas com sucesso"
 

	
 
#: rhodecode/controllers/admin/permissions.py:123
 
msgid "error occurred during update of permissions"
 
msgstr "ocorreu um erro ao atualizar as permissões"
 

	
 
#: rhodecode/controllers/admin/repos.py:116
 
msgid "--REMOVE FORK--"
 
msgstr "--REMOVER BIFURCAÇÂO--"
 

	
 
#: rhodecode/controllers/admin/repos.py:144
 
#, python-format
 
msgid "created repository %s from %s"
 
msgstr "repositório %s criado a partir de %s"
 

	
 
#: rhodecode/controllers/admin/repos.py:148
 
#, python-format
 
msgid "created repository %s"
 
msgstr "repositório %s criado"
 

	
 
#: rhodecode/controllers/admin/repos.py:177
 
#: rhodecode/controllers/admin/repos.py:179
 
#, python-format
 
msgid "error occurred during creation of repository %s"
 
msgstr "ocorreu um erro ao criar o repositório %s"
 

	
 
#: rhodecode/controllers/admin/repos.py:264
 
#: rhodecode/controllers/admin/repos.py:266
 
#, python-format
 
msgid "Cannot delete %s it still contains attached forks"
 
msgstr "Nao é possível excluir %s pois ele ainda contém bifurcações vinculadas"
 

	
 
#: rhodecode/controllers/admin/repos.py:293
 
#: rhodecode/controllers/admin/repos.py:295
 
msgid "An error occurred during deletion of repository user"
 
msgstr "Ocorreu um erro ao excluir usuário de repositório"
 

	
 
#: rhodecode/controllers/admin/repos.py:312
 
#: rhodecode/controllers/admin/repos.py:314
 
msgid "An error occurred during deletion of repository users groups"
 
msgstr "Ocorreu um erro ao excluir grupo de usuário de repositório"
 

	
 
#: rhodecode/controllers/admin/repos.py:329
 
#: rhodecode/controllers/admin/repos.py:331
 
msgid "An error occurred during deletion of repository stats"
 
msgstr "Ocorreu um erro ao excluir estatísticas de repositório"
 

	
 
#: rhodecode/controllers/admin/repos.py:345
 
#: rhodecode/controllers/admin/repos.py:347
 
msgid "An error occurred during cache invalidation"
 
msgstr "Ocorreu um erro ao invalidar o cache"
 

	
 
#: rhodecode/controllers/admin/repos.py:365
 
#: rhodecode/controllers/admin/repos.py:367
 
msgid "Updated repository visibility in public journal"
 
msgstr "Atualizada a visibilidade do repositório no diário público"
 

	
 
#: rhodecode/controllers/admin/repos.py:369
 
#: rhodecode/controllers/admin/repos.py:371
 
msgid "An error occurred during setting this repository in public journal"
 
msgstr "Ocorreu um erro ao ajustar esse repositório no diário público"
 

	
 
#: rhodecode/controllers/admin/repos.py:374 rhodecode/model/forms.py:54
 
#: rhodecode/controllers/admin/repos.py:376 rhodecode/model/forms.py:54
 
msgid "Token mismatch"
 
msgstr "Descompasso de Token"
 

	
 
#: rhodecode/controllers/admin/repos.py:387
 
#: rhodecode/controllers/admin/repos.py:389
 
msgid "Pulled from remote location"
 
msgstr "Realizado pull de localização remota"
 

	
 
#: rhodecode/controllers/admin/repos.py:389
 
#: rhodecode/controllers/admin/repos.py:391
 
msgid "An error occurred during pull from remote location"
 
msgstr "Ocorreu um erro ao realizar pull de localização remota"
 

	
 
#: rhodecode/controllers/admin/repos.py:405
 
#: rhodecode/controllers/admin/repos.py:407
 
msgid "Nothing"
 
msgstr "Nada"
 

	
 
#: rhodecode/controllers/admin/repos.py:407
 
#: rhodecode/controllers/admin/repos.py:409
 
#, python-format
 
msgid "Marked repo %s as fork of %s"
 
msgstr "Marcado repositório %s como bifurcação de %s"
 

	
 
#: rhodecode/controllers/admin/repos.py:411
 
#: rhodecode/controllers/admin/repos.py:413
 
msgid "An error occurred during this operation"
 
msgstr "Ocorreu um erro durante essa operação"
 

	
 
#: rhodecode/controllers/admin/repos_groups.py:119
 
#, python-format
 
msgid "created repos group %s"
 
msgstr "criado grupo de repositórios %s"
 

	
 
#: rhodecode/controllers/admin/repos_groups.py:132
 
#, python-format
 
msgid "error occurred during creation of repos group %s"
 
msgstr "ccorreu um erro ao criar grupo de repositório %s"
 

	
 
#: rhodecode/controllers/admin/repos_groups.py:166
 
#, python-format
 
msgid "updated repos group %s"
 
msgstr "atualizado grupo de repositórios %s"
 

	
 
#: rhodecode/controllers/admin/repos_groups.py:179
 
#, python-format
 
msgid "error occurred during update of repos group %s"
 
msgstr "ocorreu um erro ao atualizar grupo de repositórios %s"
 

	
 
#: rhodecode/controllers/admin/repos_groups.py:198
 
#, python-format
 
msgid "This group contains %s repositores and cannot be deleted"
 
msgstr "Esse grupo contém %s repositórios e não pode ser excluído"
 

	
 
#: rhodecode/controllers/admin/repos_groups.py:205
 
#, python-format
 
msgid "removed repos group %s"
 
msgstr "removido grupo de repositórios %s"
 

	
 
#: rhodecode/controllers/admin/repos_groups.py:210
 
msgid "Cannot delete this group it still contains subgroups"
 
msgstr "Nao é possível excluir este grupo pois ele ainda contém subgrupos"
 

	
 
#: rhodecode/controllers/admin/repos_groups.py:215
 
#: rhodecode/controllers/admin/repos_groups.py:220
 
#, python-format
 
msgid "error occurred during deletion of repos group %s"
 
msgstr "ccorreu um erro ao excluir grupo de repositórios %s"
 

	
 
#: rhodecode/controllers/admin/repos_groups.py:240
 
msgid "An error occurred during deletion of group user"
 
msgstr "Ocorreu um erro ao excluir o usuário de grupo"
 

	
 
#: rhodecode/controllers/admin/repos_groups.py:260
 
msgid "An error occurred during deletion of group users groups"
 
msgstr "Ocorreu um erro ao excluir o grupo do grupo de usuários"
 

	
 
#: rhodecode/controllers/admin/settings.py:120
 
#, python-format
 
msgid "Repositories successfully rescanned added: %s,removed: %s"
 
msgstr "Repositórios varridos com sucesso adicionados: %s, removidos: %s"
 

	
 
#: rhodecode/controllers/admin/settings.py:129
 
msgid "Whoosh reindex task scheduled"
 
msgstr "Tarefa de reindexação do whoosh agendada"
 

	
 
#: rhodecode/controllers/admin/settings.py:154
 
msgid "Updated application settings"
 
msgstr "Configurações da aplicação atualizadas"
 

	
 
#: rhodecode/controllers/admin/settings.py:159
 
#: rhodecode/controllers/admin/settings.py:226
 
msgid "error occurred during updating application settings"
 
msgstr "ocorreu um erro ao atualizar as configurações da aplicação"
 

	
 
#: rhodecode/controllers/admin/settings.py:221
 
msgid "Updated mercurial settings"
 
msgstr "Atualizadas as configurações do mercurial"
 

	
 
#: rhodecode/controllers/admin/settings.py:246
 
msgid "Added new hook"
 
msgstr "Adicionado novo gancho"
 

	
 
#: rhodecode/controllers/admin/settings.py:258
 
msgid "Updated hooks"
 
msgstr "Atualizados os ganchos"
 

	
 
#: rhodecode/controllers/admin/settings.py:262
 
msgid "error occurred during hook creation"
 
msgstr "ocorreu um erro ao criar gancho"
 

	
 
#: rhodecode/controllers/admin/settings.py:281
 
msgid "Email task created"
 
msgstr "Tarefa de e-mail criada"
 

	
 
#: rhodecode/controllers/admin/settings.py:336
 
msgid "You can't edit this user since it's crucial for entire application"
 
msgstr "Você não pode editar esse usuário pois ele é crucial para toda a aplicação"
 

	
 
#: rhodecode/controllers/admin/settings.py:365
 
#: rhodecode/controllers/admin/settings.py:367
 
msgid "Your account was updated successfully"
 
msgstr "Sua conta foi atualizada com sucesso"
 

	
 
#: rhodecode/controllers/admin/settings.py:384
 
#: rhodecode/controllers/admin/users.py:132
 
#: rhodecode/controllers/admin/settings.py:387
 
#: rhodecode/controllers/admin/users.py:138
 
#, python-format
 
msgid "error occurred during update of user %s"
 
msgstr "ocorreu um erro ao atualizar o usuário %s"
 

	
 
#: rhodecode/controllers/admin/users.py:79
 
#: rhodecode/controllers/admin/users.py:83
 
#, python-format
 
msgid "created user %s"
 
msgstr "usuário %s criado"
 

	
 
#: rhodecode/controllers/admin/users.py:92
 
#: rhodecode/controllers/admin/users.py:95
 
#, python-format
 
msgid "error occurred during creation of user %s"
 
msgstr "ocorreu um erro ao criar o usuário %s"
 

	
 
#: rhodecode/controllers/admin/users.py:118
 
#: rhodecode/controllers/admin/users.py:124
 
msgid "User updated successfully"
 
msgstr "Usuário atualizado com sucesso"
 

	
 
#: rhodecode/controllers/admin/users.py:149
 
#: rhodecode/controllers/admin/users.py:155
 
msgid "successfully deleted user"
 
msgstr "usuário excluído com sucesso"
 

	
 
#: rhodecode/controllers/admin/users.py:154
 
#: rhodecode/controllers/admin/users.py:160
 
msgid "An error occurred during deletion of user"
 
msgstr "Ocorreu um erro ao excluir o usuário"
 

	
 
#: rhodecode/controllers/admin/users.py:169
 
#: rhodecode/controllers/admin/users.py:175
 
msgid "You can't edit this user"
 
msgstr "Você não pode editar esse usuário"
 

	
 
#: rhodecode/controllers/admin/users.py:199
 
#: rhodecode/controllers/admin/users_groups.py:215
 
#: rhodecode/controllers/admin/users.py:205
 
#: rhodecode/controllers/admin/users_groups.py:219
 
msgid "Granted 'repository create' permission to user"
 
msgstr "Concedida permissão de 'criar repositório' ao usuário"
 

	
 
#: rhodecode/controllers/admin/users.py:208
 
#: rhodecode/controllers/admin/users_groups.py:225
 
#: rhodecode/controllers/admin/users.py:214
 
#: rhodecode/controllers/admin/users_groups.py:229
 
msgid "Revoked 'repository create' permission to user"
 
msgstr "Revogada permissão de 'criar repositório' ao usuário"
 

	
 
#: rhodecode/controllers/admin/users_groups.py:79
 
#: rhodecode/controllers/admin/users_groups.py:84
 
#, python-format
 
msgid "created users group %s"
 
msgstr "criado grupo de usuários %s"
 

	
 
#: rhodecode/controllers/admin/users_groups.py:92
 
#: rhodecode/controllers/admin/users_groups.py:95
 
#, python-format
 
msgid "error occurred during creation of users group %s"
 
msgstr "ocorreu um erro ao criar o grupo de usuários %s"
 

	
 
#: rhodecode/controllers/admin/users_groups.py:128
 
#: rhodecode/controllers/admin/users_groups.py:135
 
#, python-format
 
msgid "updated users group %s"
 
msgstr "grupo de usuários %s atualizado"
 

	
 
#: rhodecode/controllers/admin/users_groups.py:148
 
#: rhodecode/controllers/admin/users_groups.py:152
 
#, python-format
 
msgid "error occurred during update of users group %s"
 
msgstr "ocorreu um erro ao atualizar o grupo de usuários %s"
 

	
 
#: rhodecode/controllers/admin/users_groups.py:165
 
#: rhodecode/controllers/admin/users_groups.py:169
 
msgid "successfully deleted users group"
 
msgstr "grupo de usuários excluído com sucesso"
 

	
 
#: rhodecode/controllers/admin/users_groups.py:170
 
#: rhodecode/controllers/admin/users_groups.py:174
 
msgid "An error occurred during deletion of users group"
 
msgstr "Ocorreu um erro ao excluir o grupo de usuários"
 

	
 
#: rhodecode/lib/auth.py:497
 
msgid "You need to be a registered user to perform this action"
 
msgstr "Você precisa ser um usuário registrado para realizar essa ação"
 

	
 
#: rhodecode/lib/auth.py:538
 
msgid "You need to be a signed in to view this page"
 
msgstr "Você precisa estar logado para ver essa página"
 

	
 
#: rhodecode/lib/diffs.py:78
 
msgid "Changeset was too big and was cut off, use diff menu to display this diff"
 
msgstr ""
 
"Conjunto de mudanças é grande demais e foi cortado, use o menu de "
 
"diferenças para ver as diferenças"
 

	
 
#: rhodecode/lib/diffs.py:88
 
msgid "No changes detected"
 
msgstr "Nenhuma alteração detectada"
 

	
 
#: rhodecode/lib/helpers.py:415
 
msgid "True"
 
msgstr "Verdadeiro"
 

	
 
#: rhodecode/lib/helpers.py:419
 
msgid "False"
 
msgstr "Falso"
 

	
 
#: rhodecode/lib/helpers.py:463
 
msgid "Changeset not found"
 
msgstr "Conjunto de alterações não encontrado"
 

	
 
#: rhodecode/lib/helpers.py:486
 
#, python-format
 
msgid "Show all combined changesets %s->%s"
 
msgstr "Ver todos os conjuntos de mudanças combinados %s->%s"
 

	
 
#: rhodecode/lib/helpers.py:492
 
msgid "compare view"
 
msgstr "comparar exibir"
 

	
 
#: rhodecode/lib/helpers.py:512
 
msgid "and"
 
msgstr "e"
 

	
 
#: rhodecode/lib/helpers.py:513
 
#, python-format
 
msgid "%s more"
 
msgstr "%s mais"
 

	
 
#: rhodecode/lib/helpers.py:514 rhodecode/templates/changelog/changelog.html:40
 
msgid "revisions"
 
msgstr "revisões"
 

	
 
#: rhodecode/lib/helpers.py:537
 
msgid "fork name "
 
msgstr "nome da bifurcação"
 

	
 
#: rhodecode/lib/helpers.py:540
 
#: rhodecode/lib/helpers.py:550
 
msgid "[deleted] repository"
 
msgstr "repositório [excluído]"
 

	
 
#: rhodecode/lib/helpers.py:541 rhodecode/lib/helpers.py:546
 
#: rhodecode/lib/helpers.py:552 rhodecode/lib/helpers.py:562
 
msgid "[created] repository"
 
msgstr "repositório [criado]"
 

	
 
#: rhodecode/lib/helpers.py:542
 
#: rhodecode/lib/helpers.py:554
 
msgid "[created] repository as fork"
 
msgstr "repositório [criado] como uma bifurcação"
 

	
 
#: rhodecode/lib/helpers.py:543 rhodecode/lib/helpers.py:547
 
#: rhodecode/lib/helpers.py:556 rhodecode/lib/helpers.py:564
 
msgid "[forked] repository"
 
msgstr "repositório [bifurcado]"
 

	
 
#: rhodecode/lib/helpers.py:544 rhodecode/lib/helpers.py:548
 
#: rhodecode/lib/helpers.py:558 rhodecode/lib/helpers.py:566
 
msgid "[updated] repository"
 
msgstr "repositório [atualizado]"
 

	
 
#: rhodecode/lib/helpers.py:545
 
#: rhodecode/lib/helpers.py:560
 
msgid "[delete] repository"
 
msgstr "[excluir] repositório"
 

	
 
#: rhodecode/lib/helpers.py:549
 
#: rhodecode/lib/helpers.py:568
 
#, fuzzy, python-format
 
#| msgid "created user %s"
 
msgid "[created] user"
 
msgstr "usuário %s criado"
 

	
 
#: rhodecode/lib/helpers.py:570
 
#, fuzzy, python-format
 
#| msgid "updated users group %s"
 
msgid "[updated] user"
 
msgstr "grupo de usuários %s atualizado"
 

	
 
#: rhodecode/lib/helpers.py:572
 
#, fuzzy, python-format
 
#| msgid "created users group %s"
 
msgid "[created] users group"
 
msgstr "criado grupo de usuários %s"
 

	
 
#: rhodecode/lib/helpers.py:574
 
#, fuzzy, python-format
 
#| msgid "updated users group %s"
 
msgid "[updated] users group"
 
msgstr "grupo de usuários %s atualizado"
 

	
 
#: rhodecode/lib/helpers.py:576
 
#, fuzzy
 
#| msgid "[created] repository"
 
msgid "[commented] on revision in repository"
 
msgstr "repositório [criado]"
 

	
 
#: rhodecode/lib/helpers.py:578
 
msgid "[pushed] into"
 
msgstr "[realizado push] para"
 

	
 
#: rhodecode/lib/helpers.py:550
 
msgid "[committed via RhodeCode] into"
 
#: rhodecode/lib/helpers.py:580
 
#, fuzzy
 
#| msgid "[committed via RhodeCode] into"
 
msgid "[committed via RhodeCode] into repository"
 
msgstr "[realizado commit via RhodeCode] para"
 

	
 
#: rhodecode/lib/helpers.py:551
 
msgid "[pulled from remote] into"
 
#: rhodecode/lib/helpers.py:582
 
#, fuzzy
 
#| msgid "[pulled from remote] into"
 
msgid "[pulled from remote] into repository"
 
msgstr "[realizado pull remoto] para"
 

	
 
#: rhodecode/lib/helpers.py:552
 
#: rhodecode/lib/helpers.py:584
 
msgid "[pulled] from"
 
msgstr "[realizado pull] a partir de"
 

	
 
#: rhodecode/lib/helpers.py:553
 
#: rhodecode/lib/helpers.py:586
 
msgid "[started following] repository"
 
msgstr "[passou a seguir] o repositório"
 

	
 
#: rhodecode/lib/helpers.py:554
 
#: rhodecode/lib/helpers.py:588
 
msgid "[stopped following] repository"
 
msgstr "[parou de seguir] o repositório"
 

	
 
#: rhodecode/lib/helpers.py:732
 
#: rhodecode/lib/helpers.py:752
 
#, python-format
 
msgid " and %s more"
 
msgstr " e mais %s"
 

	
 
#: rhodecode/lib/helpers.py:736
 
#: rhodecode/lib/helpers.py:756
 
msgid "No Files"
 
msgstr "Nenhum Arquivo"
 

	
 
#: rhodecode/lib/utils2.py:335
 
#, python-format
 
msgid "%d year"
 
msgid_plural "%d years"
 
msgstr[0] "%d ano"
 
msgstr[1] "%d anos"
 

	
 
#: rhodecode/lib/utils2.py:336
 
#, python-format
 
msgid "%d month"
 
msgid_plural "%d months"
 
msgstr[0] "%d mês"
 
msgstr[1] "%d meses"
 

	
 
#: rhodecode/lib/utils2.py:337
 
#, python-format
 
msgid "%d day"
 
msgid_plural "%d days"
 
msgstr[0] "%d dia"
 
msgstr[1] "%d dias"
 

	
 
#: rhodecode/lib/utils2.py:338
 
#, python-format
 
msgid "%d hour"
 
msgid_plural "%d hours"
 
msgstr[0] "%d hora"
 
msgstr[1] "%d horas"
 

	
 
#: rhodecode/lib/utils2.py:339
 
#, python-format
 
msgid "%d minute"
 
msgid_plural "%d minutes"
 
msgstr[0] "%d minuto"
 
msgstr[1] "%d minutos"
 

	
 
#: rhodecode/lib/utils2.py:340
 
#, python-format
 
msgid "%d second"
 
msgid_plural "%d seconds"
 
msgstr[0] "%d segundo"
 
msgstr[1] "%d segundos"
 

	
 
#: rhodecode/lib/utils2.py:355
 
#, python-format
 
msgid "%s ago"
 
@@ -956,533 +990,533 @@ msgid "Enter %(min)i characters or more"
 
msgstr "Entre com %(min)i caracteres ou mais"
 

	
 
#: rhodecode/model/notification.py:175
 
msgid "commented on commit"
 
msgstr "comentado no commit"
 

	
 
#: rhodecode/model/notification.py:176
 
msgid "sent message"
 
msgstr "mensagem enviada"
 

	
 
#: rhodecode/model/notification.py:177
 
msgid "mentioned you"
 
msgstr "mencionou você"
 

	
 
#: rhodecode/model/notification.py:178
 
msgid "registered in RhodeCode"
 
msgstr "registrado no RhodeCode"
 

	
 
#: rhodecode/model/user.py:235
 
msgid "new user registration"
 
msgstr "registro de novo usuário"
 

	
 
#: rhodecode/model/user.py:259 rhodecode/model/user.py:279
 
msgid "You can't Edit this user since it's crucial for entire application"
 
msgstr ""
 
"Você não pode Editar esse usuário, pois ele é crucial para toda a "
 
"aplicação"
 

	
 
#: rhodecode/model/user.py:300
 
msgid "You can't remove this user since it's crucial for entire application"
 
msgstr ""
 
"Você não pode remover esse usuário, pois ele é crucial para toda a "
 
"aplicação"
 

	
 
#: rhodecode/model/user.py:306
 
#, python-format
 
msgid ""
 
"user \"%s\" still owns %s repositories and cannot be removed. Switch "
 
"owners or remove those repositories. %s"
 
msgstr ""
 
"usuário \"%s\" ainda é dono de %s repositórios e não pode ser removido. "
 
"Troque os donos ou remova esses repositórios. %s"
 

	
 
#: rhodecode/templates/index.html:3
 
msgid "Dashboard"
 
msgstr "Painel de Controle"
 

	
 
#: rhodecode/templates/index_base.html:6
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:115
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:31
 
#: rhodecode/templates/bookmarks/bookmarks.html:10
 
#: rhodecode/templates/branches/branches.html:9
 
#: rhodecode/templates/journal/journal.html:31
 
#: rhodecode/templates/tags/tags.html:10
 
msgid "quick filter..."
 
msgstr "filtro rápido..."
 

	
 
#: rhodecode/templates/index_base.html:6 rhodecode/templates/base/base.html:218
 
msgid "repositories"
 
msgstr "repositórios"
 

	
 
#: rhodecode/templates/index_base.html:13
 
#: rhodecode/templates/index_base.html:15
 
#: rhodecode/templates/admin/repos/repos.html:22
 
msgid "ADD REPOSITORY"
 
msgstr "ADICIONAR REPOSITÓRIO"
 

	
 
#: rhodecode/templates/index_base.html:29
 
#: rhodecode/templates/admin/repos_groups/repos_groups_add.html:32
 
#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:32
 
#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:33
 
#: rhodecode/templates/admin/users_groups/users_group_add.html:32
 
#: rhodecode/templates/admin/users_groups/users_group_edit.html:33
 
msgid "Group name"
 
msgstr "Nome do grupo"
 

	
 
#: rhodecode/templates/index_base.html:30
 
#: rhodecode/templates/index_base.html:67
 
#: rhodecode/templates/index_base.html:132
 
#: rhodecode/templates/index_base.html:158
 
#: rhodecode/templates/admin/repos/repo_add_base.html:47
 
#: rhodecode/templates/admin/repos/repo_edit.html:66
 
#: rhodecode/templates/admin/repos/repos.html:37
 
#: rhodecode/templates/admin/repos/repos.html:84
 
#: rhodecode/templates/admin/repos_groups/repos_groups_add.html:41
 
#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:41
 
#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:34
 
#: rhodecode/templates/forks/fork.html:49
 
#: rhodecode/templates/settings/repo_settings.html:57
 
#: rhodecode/templates/summary/summary.html:100
 
msgid "Description"
 
msgstr "Descrição"
 

	
 
#: rhodecode/templates/index_base.html:40
 
#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:46
 
msgid "Repositories group"
 
msgstr "Grupo de repositórios"
 

	
 
#: rhodecode/templates/index_base.html:66
 
#: rhodecode/templates/index_base.html:156
 
#: rhodecode/templates/admin/repos/repo_add_base.html:9
 
#: rhodecode/templates/admin/repos/repo_edit.html:32
 
#: rhodecode/templates/admin/repos/repos.html:36
 
#: rhodecode/templates/admin/repos/repos.html:82
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:133
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:183
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:249
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:284
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:49
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:99
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:165
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:200
 
#: rhodecode/templates/bookmarks/bookmarks.html:36
 
#: rhodecode/templates/bookmarks/bookmarks_data.html:6
 
#: rhodecode/templates/branches/branches.html:36
 
#: rhodecode/templates/files/files_browser.html:47
 
#: rhodecode/templates/journal/journal.html:50
 
#: rhodecode/templates/journal/journal.html:98
 
#: rhodecode/templates/journal/journal.html:177
 
#: rhodecode/templates/settings/repo_settings.html:31
 
#: rhodecode/templates/summary/summary.html:38
 
#: rhodecode/templates/summary/summary.html:114
 
#: rhodecode/templates/tags/tags.html:36
 
#: rhodecode/templates/tags/tags_data.html:6
 
msgid "Name"
 
msgstr "Nome"
 

	
 
#: rhodecode/templates/index_base.html:68
 
#: rhodecode/templates/admin/repos/repos.html:38
 
msgid "Last change"
 
msgstr "Última alteração"
 

	
 
#: rhodecode/templates/index_base.html:69
 
#: rhodecode/templates/index_base.html:161
 
#: rhodecode/templates/admin/repos/repos.html:39
 
#: rhodecode/templates/admin/repos/repos.html:87
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:251
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:167
 
#: rhodecode/templates/journal/journal.html:179
 
msgid "Tip"
 
msgstr "Ponta"
 

	
 
#: rhodecode/templates/index_base.html:70
 
#: rhodecode/templates/index_base.html:163
 
#: rhodecode/templates/admin/repos/repo_edit.html:103
 
#: rhodecode/templates/admin/repos/repos.html:89
 
msgid "Owner"
 
msgstr "Dono"
 

	
 
#: rhodecode/templates/index_base.html:71
 
#: rhodecode/templates/journal/public_journal.html:20
 
#: rhodecode/templates/summary/summary.html:43
 
#: rhodecode/templates/summary/summary.html:46
 
msgid "RSS"
 
msgstr "RSS"
 

	
 
#: rhodecode/templates/index_base.html:72
 
#: rhodecode/templates/journal/public_journal.html:23
 
msgid "Atom"
 
msgstr "Atom"
 

	
 
#: rhodecode/templates/index_base.html:102
 
#: rhodecode/templates/index_base.html:104
 
#, python-format
 
msgid "Subscribe to %s rss feed"
 
msgstr "Assinar o feed rss de %s"
 

	
 
#: rhodecode/templates/index_base.html:109
 
#: rhodecode/templates/index_base.html:111
 
#, python-format
 
msgid "Subscribe to %s atom feed"
 
msgstr "Assinar o feed atom de %s"
 

	
 
#: rhodecode/templates/index_base.html:130
 
msgid "Group Name"
 
msgstr "Nome do Grupo"
 

	
 
#: rhodecode/templates/index_base.html:148
 
#: rhodecode/templates/index_base.html:188
 
#: rhodecode/templates/admin/repos/repos.html:112
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:270
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:186
 
#: rhodecode/templates/bookmarks/bookmarks.html:60
 
#: rhodecode/templates/branches/branches.html:60
 
#: rhodecode/templates/journal/journal.html:202
 
#: rhodecode/templates/tags/tags.html:60
 
msgid "Click to sort ascending"
 
msgstr "Clique para ordenar em ordem crescente"
 

	
 
#: rhodecode/templates/index_base.html:149
 
#: rhodecode/templates/index_base.html:189
 
#: rhodecode/templates/admin/repos/repos.html:113
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:271
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:187
 
#: rhodecode/templates/bookmarks/bookmarks.html:61
 
#: rhodecode/templates/branches/branches.html:61
 
#: rhodecode/templates/journal/journal.html:203
 
#: rhodecode/templates/tags/tags.html:61
 
msgid "Click to sort descending"
 
msgstr "Clique para ordenar em ordem descrescente"
 

	
 
#: rhodecode/templates/index_base.html:159
 
#: rhodecode/templates/admin/repos/repos.html:85
 
msgid "Last Change"
 
msgstr "Última Alteração"
 

	
 
#: rhodecode/templates/index_base.html:190
 
#: rhodecode/templates/admin/repos/repos.html:114
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:272
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:188
 
#: rhodecode/templates/bookmarks/bookmarks.html:62
 
#: rhodecode/templates/branches/branches.html:62
 
#: rhodecode/templates/journal/journal.html:204
 
#: rhodecode/templates/tags/tags.html:62
 
msgid "No records found."
 
msgstr "Nenhum registro encontrado."
 

	
 
#: rhodecode/templates/index_base.html:191
 
#: rhodecode/templates/admin/repos/repos.html:115
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:273
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:189
 
#: rhodecode/templates/bookmarks/bookmarks.html:63
 
#: rhodecode/templates/branches/branches.html:63
 
#: rhodecode/templates/journal/journal.html:205
 
#: rhodecode/templates/tags/tags.html:63
 
msgid "Data error."
 
msgstr "Erro de dados."
 

	
 
#: rhodecode/templates/index_base.html:192
 
#: rhodecode/templates/admin/repos/repos.html:116
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:274
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:190
 
#: rhodecode/templates/bookmarks/bookmarks.html:64
 
#: rhodecode/templates/branches/branches.html:64
 
#: rhodecode/templates/journal/journal.html:206
 
#: rhodecode/templates/tags/tags.html:64
 
msgid "Loading..."
 
msgstr "Carregando..."
 

	
 
#: rhodecode/templates/login.html:5 rhodecode/templates/login.html:54
 
msgid "Sign In"
 
msgstr "Entrar"
 

	
 
#: rhodecode/templates/login.html:21
 
msgid "Sign In to"
 
msgstr "Entrar em"
 

	
 
#: rhodecode/templates/login.html:31 rhodecode/templates/register.html:20
 
#: rhodecode/templates/admin/admin_log.html:5
 
#: rhodecode/templates/admin/users/user_add.html:32
 
#: rhodecode/templates/admin/users/user_edit.html:50
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:49
 
#: rhodecode/templates/admin/users/user_edit_my_account_form.html:26
 
#: rhodecode/templates/base/base.html:83
 
#: rhodecode/templates/summary/summary.html:113
 
msgid "Username"
 
msgstr "Nome de usuário"
 

	
 
#: rhodecode/templates/login.html:40 rhodecode/templates/register.html:29
 
#: rhodecode/templates/admin/ldap/ldap.html:46
 
#: rhodecode/templates/admin/users/user_add.html:41
 
#: rhodecode/templates/base/base.html:92
 
msgid "Password"
 
msgstr "Senha"
 

	
 
#: rhodecode/templates/login.html:50
 
msgid "Remember me"
 
msgstr "Lembre-se de mim"
 

	
 
#: rhodecode/templates/login.html:60
 
msgid "Forgot your password ?"
 
msgstr "Esqueceu sua senha ?"
 

	
 
#: rhodecode/templates/login.html:63 rhodecode/templates/base/base.html:103
 
msgid "Don't have an account ?"
 
msgstr "Não possui uma conta ?"
 

	
 
#: rhodecode/templates/password_reset.html:5
 
msgid "Reset your password"
 
msgstr "Reinicializar sua senha"
 

	
 
#: rhodecode/templates/password_reset.html:11
 
msgid "Reset your password to"
 
msgstr "Reinicializar sua senha para"
 

	
 
#: rhodecode/templates/password_reset.html:21
 
msgid "Email address"
 
msgstr "Endereço de e-mail"
 

	
 
#: rhodecode/templates/password_reset.html:30
 
msgid "Reset my password"
 
msgstr "Reinicializar minha senha"
 

	
 
#: rhodecode/templates/password_reset.html:31
 
msgid "Password reset link will be send to matching email address"
 
msgstr ""
 
"Link de reinicialização de senha será enviado ao endereço de e-mail "
 
"correspondente"
 

	
 
#: rhodecode/templates/register.html:5 rhodecode/templates/register.html:74
 
msgid "Sign Up"
 
msgstr "Inscrever-se"
 

	
 
#: rhodecode/templates/register.html:11
 
msgid "Sign Up to"
 
msgstr "Inscrever-se em"
 

	
 
#: rhodecode/templates/register.html:38
 
msgid "Re-enter password"
 
msgstr "Repita a senha"
 

	
 
#: rhodecode/templates/register.html:47
 
#: rhodecode/templates/admin/users/user_add.html:59
 
#: rhodecode/templates/admin/users/user_edit.html:86
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:76
 
#: rhodecode/templates/admin/users/user_edit_my_account_form.html:53
 
msgid "First Name"
 
msgstr "Primeiro Nome"
 

	
 
#: rhodecode/templates/register.html:56
 
#: rhodecode/templates/admin/users/user_add.html:68
 
#: rhodecode/templates/admin/users/user_edit.html:95
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:85
 
#: rhodecode/templates/admin/users/user_edit_my_account_form.html:62
 
msgid "Last Name"
 
msgstr "Último Nome"
 

	
 
#: rhodecode/templates/register.html:65
 
#: rhodecode/templates/admin/users/user_add.html:77
 
#: rhodecode/templates/admin/users/user_edit.html:104
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:94
 
#: rhodecode/templates/admin/users/user_edit_my_account_form.html:71
 
#: rhodecode/templates/summary/summary.html:115
 
msgid "Email"
 
msgstr "E-mail"
 

	
 
#: rhodecode/templates/register.html:76
 
msgid "Your account will be activated right after registration"
 
msgstr "Sua conta será ativada logo após o registro ser concluído"
 

	
 
#: rhodecode/templates/register.html:78
 
msgid "Your account must wait for activation by administrator"
 
msgstr "Sua conta precisa esperar ativação por um administrador"
 

	
 
#: rhodecode/templates/repo_switcher_list.html:11
 
#: rhodecode/templates/admin/repos/repo_add_base.html:56
 
#: rhodecode/templates/admin/repos/repo_edit.html:76
 
#: rhodecode/templates/settings/repo_settings.html:67
 
msgid "Private repository"
 
msgstr "Repositório privado"
 

	
 
#: rhodecode/templates/repo_switcher_list.html:16
 
msgid "Public repository"
 
msgstr "Repositório público"
 

	
 
#: rhodecode/templates/switch_to_list.html:3
 
#: rhodecode/templates/branches/branches.html:14
 
msgid "branches"
 
msgstr "ramos"
 

	
 
#: rhodecode/templates/switch_to_list.html:10
 
#: rhodecode/templates/branches/branches_data.html:51
 
msgid "There are no branches yet"
 
msgstr "Ainda não há ramos"
 

	
 
#: rhodecode/templates/switch_to_list.html:15
 
#: rhodecode/templates/shortlog/shortlog_data.html:10
 
#: rhodecode/templates/tags/tags.html:15
 
msgid "tags"
 
msgstr "etiquetas"
 

	
 
#: rhodecode/templates/switch_to_list.html:22
 
#: rhodecode/templates/tags/tags_data.html:33
 
msgid "There are no tags yet"
 
msgstr "Ainda não há etiquetas"
 

	
 
#: rhodecode/templates/switch_to_list.html:28
 
#: rhodecode/templates/bookmarks/bookmarks.html:15
 
msgid "bookmarks"
 
msgstr "marcadores"
 

	
 
#: rhodecode/templates/switch_to_list.html:35
 
#: rhodecode/templates/bookmarks/bookmarks_data.html:32
 
msgid "There are no bookmarks yet"
 
msgstr "Ainda não há marcadores"
 

	
 
#: rhodecode/templates/admin/admin.html:5
 
#: rhodecode/templates/admin/admin.html:9
 
msgid "Admin journal"
 
msgstr "Diário do administrador"
 

	
 
#: rhodecode/templates/admin/admin_log.html:6
 
#: rhodecode/templates/admin/repos/repos.html:41
 
#: rhodecode/templates/admin/repos/repos.html:90
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:135
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:136
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:51
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:52
 
#: rhodecode/templates/journal/journal.html:52
 
#: rhodecode/templates/journal/journal.html:53
 
msgid "Action"
 
msgstr "Ação"
 

	
 
#: rhodecode/templates/admin/admin_log.html:7
 
msgid "Repository"
 
msgstr "Repositório"
 

	
 
#: rhodecode/templates/admin/admin_log.html:8
 
#: rhodecode/templates/bookmarks/bookmarks.html:37
 
#: rhodecode/templates/bookmarks/bookmarks_data.html:7
 
#: rhodecode/templates/branches/branches.html:37
 
#: rhodecode/templates/tags/tags.html:37
 
#: rhodecode/templates/tags/tags_data.html:7
 
msgid "Date"
 
msgstr "Data"
 

	
 
#: rhodecode/templates/admin/admin_log.html:9
 
msgid "From IP"
 
msgstr "A partir do IP"
 

	
 
#: rhodecode/templates/admin/admin_log.html:52
 
#: rhodecode/templates/admin/admin_log.html:53
 
msgid "No actions yet"
 
msgstr "Ainda não há ações"
 

	
 
#: rhodecode/templates/admin/ldap/ldap.html:5
 
msgid "LDAP administration"
 
msgstr "Administração de LDAP"
 

	
 
#: rhodecode/templates/admin/ldap/ldap.html:11
 
msgid "Ldap"
 
msgstr "LDAP"
 

	
 
#: rhodecode/templates/admin/ldap/ldap.html:28
 
msgid "Connection settings"
 
msgstr "Configurações de conexão"
 

	
 
#: rhodecode/templates/admin/ldap/ldap.html:30
 
msgid "Enable LDAP"
 
msgstr "Habilitar LDAP"
 

	
 
#: rhodecode/templates/admin/ldap/ldap.html:34
 
msgid "Host"
 
msgstr "Host"
 

	
 
#: rhodecode/templates/admin/ldap/ldap.html:38
 
msgid "Port"
 
msgstr "Porta"
 

	
 
#: rhodecode/templates/admin/ldap/ldap.html:42
 
msgid "Account"
 
msgstr "Conta"
 

	
 
#: rhodecode/templates/admin/ldap/ldap.html:50
 
msgid "Connection security"
 
msgstr "Segurança da conexão"
 

	
 
#: rhodecode/templates/admin/ldap/ldap.html:54
 
msgid "Certificate Checks"
 
msgstr "Verificações de Certificados"
 

	
 
#: rhodecode/templates/admin/ldap/ldap.html:57
 
msgid "Search settings"
 
msgstr "Configurações de busca"
 

	
 
#: rhodecode/templates/admin/ldap/ldap.html:59
 
msgid "Base DN"
 
msgstr "DN Base"
 

	
 
#: rhodecode/templates/admin/ldap/ldap.html:63
 
msgid "LDAP Filter"
 
msgstr "Filtro LDAP"
 

	
 
#: rhodecode/templates/admin/ldap/ldap.html:67
 
msgid "LDAP Search Scope"
 
msgstr "Escopo de Buscas LDAP"
 

	
 
#: rhodecode/templates/admin/ldap/ldap.html:70
 
msgid "Attribute mappings"
 
msgstr "Mapeamento de atributos"
 

	
 
#: rhodecode/templates/admin/ldap/ldap.html:72
 
msgid "Login Attribute"
 
msgstr "Atributo de Login"
 

	
 
#: rhodecode/templates/admin/ldap/ldap.html:76
 
msgid "First Name Attribute"
 
msgstr "Atributo do Primeiro Nome"
 

	
 
#: rhodecode/templates/admin/ldap/ldap.html:80
 
msgid "Last Name Attribute"
 
msgstr "Atributo do Último Nome"
 

	
 
#: rhodecode/templates/admin/ldap/ldap.html:84
 
msgid "E-mail Attribute"
 
msgstr "Atributo de E-mail"
 

	
 
#: rhodecode/templates/admin/ldap/ldap.html:89
 
#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:66
 
#: rhodecode/templates/admin/settings/hooks.html:73
 
#: rhodecode/templates/admin/users/user_edit.html:129
 
#: rhodecode/templates/admin/users/user_edit.html:154
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:102
 
#: rhodecode/templates/admin/users/user_edit_my_account_form.html:79
 
#: rhodecode/templates/admin/users_groups/users_group_edit.html:115
 
#: rhodecode/templates/settings/repo_settings.html:84
 
msgid "Save"
 
msgstr "Salvar"
 

	
 
#: rhodecode/templates/admin/notifications/notifications.html:5
 
#: rhodecode/templates/admin/notifications/notifications.html:9
 
msgid "My Notifications"
 
msgstr "Minhas Notificações"
 

	
 
#: rhodecode/templates/admin/notifications/notifications.html:29
 
msgid "Mark all read"
 
msgstr "Marcar tudo como lido"
 

	
 
#: rhodecode/templates/admin/notifications/notifications_data.html:38
 
msgid "No notifications here yet"
 
msgstr "Ainda não há notificações aqui"
 

	
 
#: rhodecode/templates/admin/notifications/show_notification.html:5
 
#: rhodecode/templates/admin/notifications/show_notification.html:11
 
msgid "Show notification"
 
msgstr "Mostrar notificação"
 

	
 
#: rhodecode/templates/admin/notifications/show_notification.html:9
 
msgid "Notifications"
 
msgstr "Notificações"
 

	
 
#: rhodecode/templates/admin/permissions/permissions.html:5
 
msgid "Permissions administration"
 
msgstr "Administração de permissões"
 

	
 
#: rhodecode/templates/admin/permissions/permissions.html:11
 
#: rhodecode/templates/admin/repos/repo_edit.html:116
 
#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:58
 
#: rhodecode/templates/admin/users/user_edit.html:139
 
#: rhodecode/templates/admin/users_groups/users_group_edit.html:100
 
#: rhodecode/templates/settings/repo_settings.html:77
 
msgid "Permissions"
 
msgstr "Permissões"
 

	
 
#: rhodecode/templates/admin/permissions/permissions.html:24
 
msgid "Default permissions"
 
msgstr "Permissões padrão"
 

	
 
#: rhodecode/templates/admin/permissions/permissions.html:31
 
msgid "Anonymous access"
 
msgstr "Acesso anônimo"
 

	
 
@@ -1551,97 +1585,97 @@ msgstr "Grupo de repositórios"
 

	
 
#: rhodecode/templates/admin/repos/repo_add_base.html:33
 
#: rhodecode/templates/admin/repos/repo_edit.html:53
 
#: rhodecode/templates/settings/repo_settings.html:52
 
msgid "Optional select a group to put this repository into."
 
msgstr "Opcionalmente selecione um grupo no qual colocar esse repositório."
 

	
 
#: rhodecode/templates/admin/repos/repo_add_base.html:38
 
#: rhodecode/templates/admin/repos/repo_edit.html:58
 
msgid "Type"
 
msgstr "Tipo"
 

	
 
#: rhodecode/templates/admin/repos/repo_add_base.html:42
 
msgid "Type of repository to create."
 
msgstr "Tipo de repositório a criar."
 

	
 
#: rhodecode/templates/admin/repos/repo_add_base.html:51
 
#: rhodecode/templates/admin/repos/repo_edit.html:70
 
#: rhodecode/templates/settings/repo_settings.html:61
 
msgid "Keep it short and to the point. Use a README file for longer descriptions."
 
msgstr ""
 
"Seja sucinto e objetivo. Use um arquivo README para descrições mais "
 
"longas."
 

	
 
#: rhodecode/templates/admin/repos/repo_add_base.html:60
 
#: rhodecode/templates/admin/repos/repo_edit.html:80
 
#: rhodecode/templates/settings/repo_settings.html:71
 
msgid ""
 
"Private repositories are only visible to people explicitly added as "
 
"collaborators."
 
msgstr ""
 
"Repositórios privados são visíveis somente por pessoas explicitamente "
 
"adicionadas como colaboradores."
 

	
 
#: rhodecode/templates/admin/repos/repo_add_base.html:64
 
msgid "add"
 
msgstr "adicionar"
 

	
 
#: rhodecode/templates/admin/repos/repo_add_create_repository.html:9
 
msgid "add new repository"
 
msgstr "adicionar novo repositório"
 

	
 
#: rhodecode/templates/admin/repos/repo_edit.html:5
 
msgid "Edit repository"
 
msgstr "Editar repositório"
 

	
 
#: rhodecode/templates/admin/repos/repo_edit.html:13
 
#: rhodecode/templates/admin/users/user_edit.html:13
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:155
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:71
 
#: rhodecode/templates/admin/users_groups/users_group_edit.html:13
 
#: rhodecode/templates/files/files_source.html:32
 
#: rhodecode/templates/journal/journal.html:72
 
msgid "edit"
 
msgstr "editar"
 

	
 
#: rhodecode/templates/admin/repos/repo_edit.html:40
 
#: rhodecode/templates/settings/repo_settings.html:39
 
msgid "Clone uri"
 
msgstr "URI de clonagem"
 

	
 
#: rhodecode/templates/admin/repos/repo_edit.html:85
 
msgid "Enable statistics"
 
msgstr "Habilitar estatísticas"
 

	
 
#: rhodecode/templates/admin/repos/repo_edit.html:89
 
msgid "Enable statistics window on summary page."
 
msgstr "Habilitar janela de estatísticas na página de sumário."
 

	
 
#: rhodecode/templates/admin/repos/repo_edit.html:94
 
msgid "Enable downloads"
 
msgstr "Habilitar downloads"
 

	
 
#: rhodecode/templates/admin/repos/repo_edit.html:98
 
msgid "Enable download menu on summary page."
 
msgstr "Habilitar menu de descarregar na página de sumário."
 

	
 
#: rhodecode/templates/admin/repos/repo_edit.html:108
 
msgid "Change owner of this repository."
 
msgstr "Mudar o dono desse repositório."
 

	
 
#: rhodecode/templates/admin/repos/repo_edit.html:134
 
msgid "Administration"
 
msgstr "Administração"
 

	
 
#: rhodecode/templates/admin/repos/repo_edit.html:137
 
msgid "Statistics"
 
msgstr "Estatísticas"
 

	
 
#: rhodecode/templates/admin/repos/repo_edit.html:141
 
msgid "Reset current statistics"
 
msgstr "Reinicializar estatísticas atuais"
 

	
 
#: rhodecode/templates/admin/repos/repo_edit.html:141
 
msgid "Confirm to remove current statistics"
 
msgstr "Confirma remover atuais estatísticas"
 

	
 
#: rhodecode/templates/admin/repos/repo_edit.html:144
 
@@ -1715,197 +1749,186 @@ msgstr ""
 
"Este repositório será renomeado de uma maneira especial, de forma a ser "
 
"inacessível ao RhodeCode e sistemas de controle de versão.\n"
 
"                         Se você precisa exclui-lo completamente do "
 
"sistema de arquivos, por favor faça-o manualmente"
 

	
 
#: rhodecode/templates/admin/repos/repo_edit.html:213
 
msgid "Set as fork"
 
msgstr "Marcar como bifurcação"
 

	
 
#: rhodecode/templates/admin/repos/repo_edit.html:222
 
msgid "Manually set this repository as a fork of another"
 
msgstr "Marcar manualmente este repositório como sendo uma bifurcação de outro"
 

	
 
#: rhodecode/templates/admin/repos/repo_edit_perms.html:3
 
#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:3
 
msgid "none"
 
msgstr "nenhum"
 

	
 
#: rhodecode/templates/admin/repos/repo_edit_perms.html:4
 
#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:4
 
msgid "read"
 
msgstr "ler"
 

	
 
#: rhodecode/templates/admin/repos/repo_edit_perms.html:5
 
#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:5
 
msgid "write"
 
msgstr "escrever"
 

	
 
#: rhodecode/templates/admin/repos/repo_edit_perms.html:6
 
#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:6
 
#: rhodecode/templates/admin/users/users.html:38
 
#: rhodecode/templates/base/base.html:214
 
msgid "admin"
 
msgstr "administrador"
 

	
 
#: rhodecode/templates/admin/repos/repo_edit_perms.html:7
 
#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:7
 
msgid "member"
 
msgstr "membro"
 

	
 
#: rhodecode/templates/admin/repos/repo_edit_perms.html:16
 
#: rhodecode/templates/data_table/_dt_elements.html:61
 
#: rhodecode/templates/journal/journal.html:123
 
#: rhodecode/templates/summary/summary.html:71
 
msgid "private repository"
 
msgstr "repositório privado"
 

	
 
#: rhodecode/templates/admin/repos/repo_edit_perms.html:33
 
#: rhodecode/templates/admin/repos/repo_edit_perms.html:53
 
#: rhodecode/templates/admin/repos/repo_edit_perms.html:58
 
#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:23
 
#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:42
 
msgid "revoke"
 
msgstr "revogar"
 

	
 
#: rhodecode/templates/admin/repos/repo_edit_perms.html:75
 
#: rhodecode/templates/admin/repos/repo_edit_perms.html:80
 
#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:64
 
msgid "Add another member"
 
msgstr "Adicionar outro membro"
 

	
 
#: rhodecode/templates/admin/repos/repo_edit_perms.html:89
 
#: rhodecode/templates/admin/repos/repo_edit_perms.html:94
 
#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:78
 
msgid "Failed to remove user"
 
msgstr "Falha ao reomver usuário"
 

	
 
#: rhodecode/templates/admin/repos/repo_edit_perms.html:104
 
#: rhodecode/templates/admin/repos/repo_edit_perms.html:109
 
#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:93
 
msgid "Failed to remove users group"
 
msgstr "Falha ao remover grupo de usuários"
 

	
 
#: rhodecode/templates/admin/repos/repo_edit_perms.html:123
 
#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:112
 
msgid "Group"
 
msgstr "Grupo"
 

	
 
#: rhodecode/templates/admin/repos/repo_edit_perms.html:124
 
#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:113
 
#: rhodecode/templates/admin/users_groups/users_groups.html:33
 
msgid "members"
 
msgstr "membros"
 

	
 
#: rhodecode/templates/admin/repos/repos.html:5
 
msgid "Repositories administration"
 
msgstr "Administração de repositórios"
 

	
 
#: rhodecode/templates/admin/repos/repos.html:40
 
#: rhodecode/templates/summary/summary.html:107
 
msgid "Contact"
 
msgstr "Contato"
 

	
 
#: rhodecode/templates/admin/repos/repos.html:68
 
#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:54
 
#: rhodecode/templates/admin/users/users.html:55
 
#: rhodecode/templates/admin/users_groups/users_groups.html:44
 
msgid "delete"
 
msgstr "excluir"
 

	
 
#: rhodecode/templates/admin/repos/repos.html:68
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:158
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:74
 
#, python-format
 
msgid "Confirm to delete this repository: %s"
 
msgstr "Confirma excluir esse repositório: %s"
 

	
 
#: rhodecode/templates/admin/repos_groups/repos_groups.html:8
 
msgid "Groups"
 
msgstr "Grupos"
 

	
 
#: rhodecode/templates/admin/repos_groups/repos_groups.html:12
 
msgid "with"
 
msgstr "com"
 

	
 
#: rhodecode/templates/admin/repos_groups/repos_groups_add.html:5
 
msgid "Add repos group"
 
msgstr "Adicionar grupo de repositórios"
 

	
 
#: rhodecode/templates/admin/repos_groups/repos_groups_add.html:10
 
#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:10
 
msgid "Repos groups"
 
msgstr "Grupo de repositórios"
 

	
 
#: rhodecode/templates/admin/repos_groups/repos_groups_add.html:12
 
msgid "add new repos group"
 
msgstr "adicionar novo grupo de repositórios"
 

	
 
#: rhodecode/templates/admin/repos_groups/repos_groups_add.html:50
 
#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:50
 
msgid "Group parent"
 
msgstr "Progenitor do grupo"
 

	
 
#: rhodecode/templates/admin/repos_groups/repos_groups_add.html:58
 
#: rhodecode/templates/admin/users/user_add.html:94
 
#: rhodecode/templates/admin/users_groups/users_group_add.html:49
 
#: rhodecode/templates/admin/users_groups/users_group_edit.html:90
 
msgid "save"
 
msgstr "salvar"
 

	
 
#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:5
 
msgid "Edit repos group"
 
msgstr "Editar grupo de repositórios"
 

	
 
#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:12
 
msgid "edit repos group"
 
msgstr "editar grupo de repositórios"
 

	
 
#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:67
 
#: rhodecode/templates/admin/settings/settings.html:112
 
#: rhodecode/templates/admin/settings/settings.html:177
 
#: rhodecode/templates/admin/users/user_edit.html:130
 
#: rhodecode/templates/admin/users/user_edit.html:155
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:103
 
#: rhodecode/templates/admin/users/user_edit_my_account_form.html:80
 
#: rhodecode/templates/admin/users_groups/users_group_edit.html:116
 
#: rhodecode/templates/files/files_add.html:82
 
#: rhodecode/templates/files/files_edit.html:68
 
#: rhodecode/templates/settings/repo_settings.html:85
 
msgid "Reset"
 
msgstr "Limpar"
 

	
 
#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:5
 
msgid "Repositories groups administration"
 
msgstr "Administração de grupos de repositórios"
 

	
 
#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:22
 
msgid "ADD NEW GROUP"
 
msgstr "ADICIONAR NOVO GRUPO"
 

	
 
#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:35
 
msgid "Number of toplevel repositories"
 
msgstr "Número de repositórios de nível superior"
 

	
 
#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:36
 
#: rhodecode/templates/admin/users/users.html:40
 
#: rhodecode/templates/admin/users_groups/users_groups.html:35
 
msgid "action"
 
msgstr "ação"
 

	
 
#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:54
 
#, python-format
 
msgid "Confirm to delete this group: %s"
 
msgstr "Confirme para excluir esse grupo: %s"
 

	
 
#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:62
 
msgid "There are no repositories groups yet"
 
msgstr "Ainda não há grupos de repositórios"
 

	
 
#: rhodecode/templates/admin/settings/hooks.html:5
 
#: rhodecode/templates/admin/settings/settings.html:5
 
msgid "Settings administration"
 
msgstr "Administração de configurações"
 

	
 
#: rhodecode/templates/admin/settings/hooks.html:9
 
#: rhodecode/templates/admin/settings/settings.html:9
 
#: rhodecode/templates/settings/repo_settings.html:5
 
#: rhodecode/templates/settings/repo_settings.html:13
 
msgid "Settings"
 
msgstr "Configurações"
 

	
 
#: rhodecode/templates/admin/settings/hooks.html:24
 
msgid "Built in hooks - read only"
 
@@ -2045,179 +2068,179 @@ msgid "Test Email"
 
msgstr "Testar E-mail"
 

	
 
#: rhodecode/templates/admin/settings/settings.html:199
 
msgid "Email to"
 
msgstr "E-mail para"
 

	
 
#: rhodecode/templates/admin/settings/settings.html:207
 
msgid "Send"
 
msgstr "Enviar"
 

	
 
#: rhodecode/templates/admin/settings/settings.html:213
 
msgid "System Info and Packages"
 
msgstr "Informações de Sistema e Pacotes"
 

	
 
#: rhodecode/templates/admin/settings/settings.html:216
 
msgid "show"
 
msgstr "mostrar"
 

	
 
#: rhodecode/templates/admin/users/user_add.html:5
 
msgid "Add user"
 
msgstr "Adicionar usuário"
 

	
 
#: rhodecode/templates/admin/users/user_add.html:10
 
#: rhodecode/templates/admin/users/user_edit.html:11
 
#: rhodecode/templates/admin/users/users.html:9
 
msgid "Users"
 
msgstr "Usuários"
 

	
 
#: rhodecode/templates/admin/users/user_add.html:12
 
msgid "add new user"
 
msgstr "adicionar novo usuário"
 

	
 
#: rhodecode/templates/admin/users/user_add.html:50
 
msgid "Password confirmation"
 
msgstr "Confirmação de senha"
 

	
 
#: rhodecode/templates/admin/users/user_add.html:86
 
#: rhodecode/templates/admin/users/user_edit.html:113
 
#: rhodecode/templates/admin/users_groups/users_group_add.html:41
 
#: rhodecode/templates/admin/users_groups/users_group_edit.html:42
 
msgid "Active"
 
msgstr "Ativo"
 

	
 
#: rhodecode/templates/admin/users/user_edit.html:5
 
msgid "Edit user"
 
msgstr "Editar usuário"
 

	
 
#: rhodecode/templates/admin/users/user_edit.html:34
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:33
 
#: rhodecode/templates/admin/users/user_edit_my_account_form.html:10
 
msgid "Change your avatar at"
 
msgstr "Altere o seu avatar em"
 

	
 
#: rhodecode/templates/admin/users/user_edit.html:35
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:34
 
#: rhodecode/templates/admin/users/user_edit_my_account_form.html:11
 
msgid "Using"
 
msgstr "Usando"
 

	
 
#: rhodecode/templates/admin/users/user_edit.html:43
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:43
 
#: rhodecode/templates/admin/users/user_edit_my_account_form.html:20
 
msgid "API key"
 
msgstr "Chave de API"
 

	
 
#: rhodecode/templates/admin/users/user_edit.html:59
 
msgid "LDAP DN"
 
msgstr "DN LDAP"
 

	
 
#: rhodecode/templates/admin/users/user_edit.html:68
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:58
 
#: rhodecode/templates/admin/users/user_edit_my_account_form.html:35
 
msgid "New password"
 
msgstr "Nova senha"
 

	
 
#: rhodecode/templates/admin/users/user_edit.html:77
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:67
 
#: rhodecode/templates/admin/users/user_edit_my_account_form.html:44
 
msgid "New password confirmation"
 
msgstr "Confirmação de nova senha"
 

	
 
#: rhodecode/templates/admin/users/user_edit.html:147
 
#: rhodecode/templates/admin/users_groups/users_group_edit.html:108
 
msgid "Create repositories"
 
msgstr "Criar repositórios"
 

	
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:5
 
#: rhodecode/templates/base/base.html:124
 
msgid "My account"
 
msgstr "Minha conta"
 

	
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:9
 
msgid "My Account"
 
msgstr "Minha Conta"
 

	
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:116
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:32
 
#: rhodecode/templates/journal/journal.html:32
 
msgid "My repos"
 
msgstr "Meus repositórios"
 

	
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:116
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:32
 
msgid "My permissions"
 
msgstr "Minhas permissões"
 

	
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:121
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:37
 
#: rhodecode/templates/journal/journal.html:37
 
msgid "ADD"
 
msgstr "ADICIONAR"
 

	
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:134
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:50
 
#: rhodecode/templates/bookmarks/bookmarks.html:40
 
#: rhodecode/templates/bookmarks/bookmarks_data.html:9
 
#: rhodecode/templates/branches/branches.html:40
 
#: rhodecode/templates/journal/journal.html:51
 
#: rhodecode/templates/tags/tags.html:40
 
#: rhodecode/templates/tags/tags_data.html:9
 
msgid "Revision"
 
msgstr "Revisão"
 

	
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:155
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:71
 
#: rhodecode/templates/journal/journal.html:72
 
msgid "private"
 
msgstr "privado"
 

	
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:165
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:81
 
#: rhodecode/templates/journal/journal.html:85
 
msgid "No repositories yet"
 
msgstr "Ainda não há repositórios"
 

	
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:167
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:83
 
#: rhodecode/templates/journal/journal.html:87
 
msgid "create one now"
 
msgstr "criar um agora"
 

	
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:184
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:285
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:100
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:201
 
msgid "Permission"
 
msgstr "Permissão"
 

	
 
#: rhodecode/templates/admin/users/users.html:5
 
msgid "Users administration"
 
msgstr "Administração de usuários"
 

	
 
#: rhodecode/templates/admin/users/users.html:23
 
msgid "ADD NEW USER"
 
msgstr "ADICIONAR NOVO USUÁRIO"
 

	
 
#: rhodecode/templates/admin/users/users.html:33
 
msgid "username"
 
msgstr "nome de usuário"
 

	
 
#: rhodecode/templates/admin/users/users.html:34
 
#: rhodecode/templates/branches/branches_data.html:6
 
msgid "name"
 
msgstr "nome"
 

	
 
#: rhodecode/templates/admin/users/users.html:35
 
msgid "lastname"
 
msgstr "sobrenome"
 

	
 
#: rhodecode/templates/admin/users/users.html:36
 
msgid "last login"
 
msgstr "último login"
 

	
 
#: rhodecode/templates/admin/users/users.html:37
 
#: rhodecode/templates/admin/users_groups/users_groups.html:34
 
msgid "active"
 
msgstr "ativo"
 

	
 
#: rhodecode/templates/admin/users/users.html:39
 
#: rhodecode/templates/base/base.html:223
 
msgid "ldap"
 
msgstr "ldap"
 

	
 
#: rhodecode/templates/admin/users/users.html:56
 
#, python-format
 
msgid "Confirm to delete this user: %s"
 
msgstr "Confirma excluir este usuário: %s"
 

	
 
#: rhodecode/templates/admin/users_groups/users_group_add.html:5
 
msgid "Add users group"
 
msgstr "Adicionar grupo de usuários"
 

	
 
#: rhodecode/templates/admin/users_groups/users_group_add.html:10
 
@@ -2228,96 +2251,101 @@ msgstr "Grupos de usuários"
 
#: rhodecode/templates/admin/users_groups/users_group_add.html:12
 
msgid "add new users group"
 
msgstr "Adicionar novo grupo de usuários"
 

	
 
#: rhodecode/templates/admin/users_groups/users_group_edit.html:5
 
msgid "Edit users group"
 
msgstr "Editar grupo de usuários"
 

	
 
#: rhodecode/templates/admin/users_groups/users_group_edit.html:11
 
msgid "UsersGroups"
 
msgstr "Grupos de Usuários"
 

	
 
#: rhodecode/templates/admin/users_groups/users_group_edit.html:50
 
msgid "Members"
 
msgstr "Membros"
 

	
 
#: rhodecode/templates/admin/users_groups/users_group_edit.html:58
 
msgid "Choosen group members"
 
msgstr "Membros escolhidos do grupo"
 

	
 
#: rhodecode/templates/admin/users_groups/users_group_edit.html:61
 
msgid "Remove all elements"
 
msgstr "Remover todos os elementos"
 

	
 
#: rhodecode/templates/admin/users_groups/users_group_edit.html:75
 
msgid "Available members"
 
msgstr "Membros disponíveis"
 

	
 
#: rhodecode/templates/admin/users_groups/users_group_edit.html:79
 
msgid "Add all elements"
 
msgstr "Adicionar todos os elementos"
 

	
 
#: rhodecode/templates/admin/users_groups/users_group_edit.html:126
 
msgid "Group members"
 
msgstr "Membros do grupo"
 

	
 
#: rhodecode/templates/admin/users_groups/users_groups.html:5
 
msgid "Users groups administration"
 
msgstr "Administração de grupos de usuários"
 

	
 
#: rhodecode/templates/admin/users_groups/users_groups.html:23
 
msgid "ADD NEW USER GROUP"
 
msgstr "ADICIONAR NOVO GRUPO DE USUÁRIOS"
 

	
 
#: rhodecode/templates/admin/users_groups/users_groups.html:32
 
msgid "group name"
 
msgstr "nome do grupo"
 

	
 
#: rhodecode/templates/admin/users_groups/users_groups.html:33
 
#: rhodecode/templates/base/root.html:46
 
msgid "members"
 
msgstr "membros"
 

	
 
#: rhodecode/templates/admin/users_groups/users_groups.html:45
 
#, python-format
 
msgid "Confirm to delete this users group: %s"
 
msgstr "Confirme para excluir este grupo de usuários: %s"
 

	
 
#: rhodecode/templates/base/base.html:41
 
msgid "Submit a bug"
 
msgstr "Encaminhe um bug"
 

	
 
#: rhodecode/templates/base/base.html:77
 
msgid "Login to your account"
 
msgstr "Entrar com sua conta"
 

	
 
#: rhodecode/templates/base/base.html:100
 
msgid "Forgot password ?"
 
msgstr "Esqueceu a senha ?"
 

	
 
#: rhodecode/templates/base/base.html:107
 
msgid "Log In"
 
msgstr "Entrar"
 

	
 
#: rhodecode/templates/base/base.html:118
 
msgid "Inbox"
 
msgstr "Caixa de Entrada"
 

	
 
#: rhodecode/templates/base/base.html:122
 
#: rhodecode/templates/base/base.html:289
 
#: rhodecode/templates/base/base.html:291
 
#: rhodecode/templates/base/base.html:293
 
msgid "Home"
 
msgstr "Início"
 

	
 
#: rhodecode/templates/base/base.html:123
 
#: rhodecode/templates/base/base.html:298
 
#: rhodecode/templates/base/base.html:300
 
#: rhodecode/templates/base/base.html:302
 
#: rhodecode/templates/journal/journal.html:4
 
#: rhodecode/templates/journal/journal.html:17
 
#: rhodecode/templates/journal/public_journal.html:4
 
msgid "Journal"
 
msgstr "Diário"
 

	
 
#: rhodecode/templates/base/base.html:125
 
msgid "Log Out"
 
msgstr "Sair"
 

	
 
#: rhodecode/templates/base/base.html:144
 
msgid "Switch repository"
 
@@ -2387,111 +2415,115 @@ msgstr "configurações"
 
msgid "fork"
 
msgstr "bifurcação"
 

	
 
#: rhodecode/templates/base/base.html:210
 
msgid "search"
 
msgstr "pesquisar"
 

	
 
#: rhodecode/templates/base/base.html:217
 
msgid "journal"
 
msgstr "diário"
 

	
 
#: rhodecode/templates/base/base.html:219
 
msgid "repositories groups"
 
msgstr "grupos de repositórios"
 

	
 
#: rhodecode/templates/base/base.html:220
 
msgid "users"
 
msgstr "usuários"
 

	
 
#: rhodecode/templates/base/base.html:221
 
msgid "users groups"
 
msgstr "grupos de usuários"
 

	
 
#: rhodecode/templates/base/base.html:222
 
msgid "permissions"
 
msgstr "permissões"
 

	
 
#: rhodecode/templates/base/base.html:235
 
#: rhodecode/templates/base/base.html:237
 
#: rhodecode/templates/followers/followers.html:5
 
msgid "Followers"
 
msgstr "Seguidores"
 

	
 
#: rhodecode/templates/base/base.html:243
 
#: rhodecode/templates/base/base.html:245
 
#: rhodecode/templates/forks/forks.html:5
 
msgid "Forks"
 
msgstr "Bifurcações"
 

	
 
#: rhodecode/templates/base/base.html:316
 
#: rhodecode/templates/base/base.html:318
 
#: rhodecode/templates/base/base.html:320
 
#: rhodecode/templates/search/search.html:4
 
#: rhodecode/templates/search/search.html:24
 
#: rhodecode/templates/search/search.html:46
 
msgid "Search"
 
msgstr "Pesquisar"
 

	
 
#: rhodecode/templates/base/root.html:53
 
#: rhodecode/templates/base/root.html:42
 
msgid "add another comment"
 
msgstr "adicionar outro comentário"
 

	
 
#: rhodecode/templates/base/root.html:54
 
#: rhodecode/templates/base/root.html:43
 
#: rhodecode/templates/journal/journal.html:111
 
#: rhodecode/templates/summary/summary.html:52
 
msgid "Stop following this repository"
 
msgstr "Parar de seguir este repositório"
 

	
 
#: rhodecode/templates/base/root.html:55
 
#: rhodecode/templates/base/root.html:44
 
#: rhodecode/templates/summary/summary.html:56
 
msgid "Start following this repository"
 
msgstr "Passar a seguir este repositório"
 

	
 
#: rhodecode/templates/base/root.html:45
 
msgid "Group"
 
msgstr "Grupo"
 

	
 
#: rhodecode/templates/bookmarks/bookmarks.html:5
 
msgid "Bookmarks"
 
msgstr "Marcadores"
 

	
 
#: rhodecode/templates/bookmarks/bookmarks.html:39
 
#: rhodecode/templates/bookmarks/bookmarks_data.html:8
 
#: rhodecode/templates/branches/branches.html:39
 
#: rhodecode/templates/tags/tags.html:39
 
#: rhodecode/templates/tags/tags_data.html:8
 
msgid "Author"
 
msgstr "Autor"
 

	
 
#: rhodecode/templates/branches/branches_data.html:7
 
msgid "date"
 
msgstr "data"
 

	
 
#: rhodecode/templates/branches/branches_data.html:8
 
#: rhodecode/templates/shortlog/shortlog_data.html:8
 
msgid "author"
 
msgstr "autor"
 

	
 
#: rhodecode/templates/branches/branches_data.html:9
 
#: rhodecode/templates/shortlog/shortlog_data.html:5
 
msgid "revision"
 
msgstr "revisão"
 

	
 
#: rhodecode/templates/changelog/changelog.html:15
 
#, python-format
 
msgid "showing %d out of %d revision"
 
msgid_plural "showing %d out of %d revisions"
 
msgstr[0] "mostrando %d de % revisão"
 
msgstr[1] "mostrando %d de % revisões"
 

	
 
#: rhodecode/templates/changelog/changelog.html:38
 
msgid "Show"
 
msgstr "Mostrar"
 

	
 
#: rhodecode/templates/changelog/changelog.html:64
 
#: rhodecode/templates/summary/summary.html:352
 
msgid "show more"
 
msgstr "mostrar mais"
 

	
 
#: rhodecode/templates/changelog/changelog.html:68
 
msgid "Affected number of files, click to show more details"
 
msgstr "Número de arquivos afetados, clique para mostrar mais detalhes"
 

	
 
#: rhodecode/templates/changelog/changelog.html:82
 
#: rhodecode/templates/changeset/changeset.html:72
 
@@ -2530,160 +2562,160 @@ msgstr "etiqueta"
 
msgid "Show selected changes __S -> __E"
 
msgstr "Mostrar alterações selecionadas __S -> __E"
 

	
 
#: rhodecode/templates/changelog/changelog.html:235
 
msgid "There are no changes yet"
 
msgstr "Ainda não há alteações"
 

	
 
#: rhodecode/templates/changelog/changelog_details.html:2
 
#: rhodecode/templates/changeset/changeset.html:60
 
msgid "removed"
 
msgstr "removidos"
 

	
 
#: rhodecode/templates/changelog/changelog_details.html:3
 
#: rhodecode/templates/changeset/changeset.html:61
 
msgid "changed"
 
msgstr "alterados"
 

	
 
#: rhodecode/templates/changelog/changelog_details.html:4
 
#: rhodecode/templates/changeset/changeset.html:62
 
msgid "added"
 
msgstr "adicionados"
 

	
 
#: rhodecode/templates/changelog/changelog_details.html:6
 
#: rhodecode/templates/changelog/changelog_details.html:7
 
#: rhodecode/templates/changelog/changelog_details.html:8
 
#: rhodecode/templates/changeset/changeset.html:64
 
#: rhodecode/templates/changeset/changeset.html:65
 
#: rhodecode/templates/changeset/changeset.html:66
 
#, python-format
 
msgid "affected %s files"
 
msgstr "%s arquivos afetados"
 

	
 
#: rhodecode/templates/changeset/changeset.html:6
 
#: rhodecode/templates/changeset/changeset.html:14
 
msgid "Changeset"
 
msgstr "Conjunto de Mudanças"
 

	
 
#: rhodecode/templates/changeset/changeset.html:37
 
#: rhodecode/templates/changeset/diff_block.html:20
 
msgid "raw diff"
 
msgstr "diff bruto"
 

	
 
#: rhodecode/templates/changeset/changeset.html:38
 
#: rhodecode/templates/changeset/diff_block.html:21
 
msgid "download diff"
 
msgstr "descarregar diff"
 

	
 
#: rhodecode/templates/changeset/changeset.html:42
 
#: rhodecode/templates/changeset/changeset_file_comment.html:69
 
#: rhodecode/templates/changeset/changeset_file_comment.html:71
 
#, python-format
 
msgid "%d comment"
 
msgid_plural "%d comments"
 
msgstr[0] "%d comentário"
 
msgstr[1] "%d comentários"
 

	
 
#: rhodecode/templates/changeset/changeset.html:42
 
#: rhodecode/templates/changeset/changeset_file_comment.html:69
 
#: rhodecode/templates/changeset/changeset_file_comment.html:71
 
#, python-format
 
msgid "(%d inline)"
 
msgid_plural "(%d inline)"
 
msgstr[0] "(%d em linha)"
 
msgstr[1] "(%d em linha)"
 

	
 
#: rhodecode/templates/changeset/changeset.html:97
 
#, python-format
 
msgid "%s files affected with %s insertions and %s deletions:"
 
msgstr "%s arquivos afetados com %s inserções e %s exclusões"
 

	
 
#: rhodecode/templates/changeset/changeset.html:113
 
msgid "Changeset was too big and was cut off..."
 
msgstr "Conjunto de mudanças era grande demais e foi cortado..."
 

	
 
#: rhodecode/templates/changeset/changeset_file_comment.html:35
 
msgid "Submitting..."
 
msgstr "Enviando..."
 

	
 
#: rhodecode/templates/changeset/changeset_file_comment.html:38
 
msgid "Commenting on line {1}."
 
msgstr "Comentando a linha {1}."
 

	
 
#: rhodecode/templates/changeset/changeset_file_comment.html:39
 
#: rhodecode/templates/changeset/changeset_file_comment.html:100
 
#: rhodecode/templates/changeset/changeset_file_comment.html:102
 
#, python-format
 
msgid "Comments parsed using %s syntax with %s support."
 
msgstr "Comentários interpretados usando a sintaxe %s com suporte a %s."
 

	
 
#: rhodecode/templates/changeset/changeset_file_comment.html:41
 
#: rhodecode/templates/changeset/changeset_file_comment.html:102
 
#: rhodecode/templates/changeset/changeset_file_comment.html:104
 
msgid "Use @username inside this text to send notification to this RhodeCode user"
 
msgstr ""
 
"Use @nomedeusuário dentro desse texto para enviar notificação a este "
 
"usuário do RhodeCode"
 

	
 
#: rhodecode/templates/changeset/changeset_file_comment.html:47
 
#: rhodecode/templates/changeset/changeset_file_comment.html:107
 
#: rhodecode/templates/changeset/changeset_file_comment.html:49
 
#: rhodecode/templates/changeset/changeset_file_comment.html:110
 
msgid "Comment"
 
msgstr "Comentário"
 

	
 
#: rhodecode/templates/changeset/changeset_file_comment.html:48
 
#: rhodecode/templates/changeset/changeset_file_comment.html:59
 
#: rhodecode/templates/changeset/changeset_file_comment.html:50
 
#: rhodecode/templates/changeset/changeset_file_comment.html:61
 
msgid "Hide"
 
msgstr "Ocultar"
 

	
 
#: rhodecode/templates/changeset/changeset_file_comment.html:55
 
#: rhodecode/templates/changeset/changeset_file_comment.html:57
 
msgid "You need to be logged in to comment."
 
msgstr "Você precisa estar logado para comentar."
 

	
 
#: rhodecode/templates/changeset/changeset_file_comment.html:55
 
#: rhodecode/templates/changeset/changeset_file_comment.html:57
 
msgid "Login now"
 
msgstr "Entrar agora"
 

	
 
#: rhodecode/templates/changeset/changeset_file_comment.html:97
 
#: rhodecode/templates/changeset/changeset_file_comment.html:99
 
msgid "Leave a comment"
 
msgstr "Deixar um comentário"
 

	
 
#: rhodecode/templates/changeset/changeset_range.html:29
 
msgid "Compare View"
 
msgstr "Exibir Comparação"
 

	
 
#: rhodecode/templates/changeset/changeset_range.html:49
 
msgid "Files affected"
 
msgstr "Arquivos afetados"
 

	
 
#: rhodecode/templates/changeset/diff_block.html:19
 
msgid "diff"
 
msgstr "diff"
 

	
 
#: rhodecode/templates/changeset/diff_block.html:27
 
msgid "show inline comments"
 
msgstr "mostrar comentários em linha"
 

	
 
#: rhodecode/templates/data_table/_dt_elements.html:33
 
#: rhodecode/templates/data_table/_dt_elements.html:35
 
#: rhodecode/templates/data_table/_dt_elements.html:37
 
#: rhodecode/templates/forks/fork.html:5
 
msgid "Fork"
 
msgstr "Bifurcação"
 

	
 
#: rhodecode/templates/data_table/_dt_elements.html:54
 
#: rhodecode/templates/journal/journal.html:117
 
#: rhodecode/templates/summary/summary.html:63
 
msgid "Mercurial repository"
 
msgstr "Repositório Mercurial"
 

	
 
#: rhodecode/templates/data_table/_dt_elements.html:56
 
#: rhodecode/templates/journal/journal.html:119
 
#: rhodecode/templates/summary/summary.html:66
 
msgid "Git repository"
 
msgstr "Repositório Git"
 

	
 
#: rhodecode/templates/data_table/_dt_elements.html:63
 
#: rhodecode/templates/journal/journal.html:125
 
#: rhodecode/templates/summary/summary.html:73
 
msgid "public repository"
 
msgstr "repositório público"
 

	
 
#: rhodecode/templates/data_table/_dt_elements.html:74
 
#: rhodecode/templates/summary/summary.html:82
 
#: rhodecode/templates/summary/summary.html:83
 
msgid "Fork of"
rhodecode/i18n/rhodecode.pot
Show inline comments
 
# Translations template for RhodeCode.
 
# Copyright (C) 2012 ORGANIZATION
 
# This file is distributed under the same license as the RhodeCode project.
 
# FIRST AUTHOR <EMAIL@ADDRESS>, 2012.
 
#
 
#, fuzzy
 
msgid ""
 
msgstr ""
 
"Project-Id-Version: RhodeCode 1.4.0\n"
 
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
 
"POT-Creation-Date: 2012-05-27 17:41+0200\n"
 
"POT-Creation-Date: 2012-06-03 01:06+0200\n"
 
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 
"Language-Team: LANGUAGE <LL@li.org>\n"
 
"MIME-Version: 1.0\n"
 
"Content-Type: text/plain; charset=utf-8\n"
 
"Content-Transfer-Encoding: 8bit\n"
 
"Generated-By: Babel 0.9.6\n"
 

	
 
#: rhodecode/controllers/changelog.py:96
 
#: rhodecode/controllers/changelog.py:95
 
msgid "All Branches"
 
msgstr ""
 

	
 
#: rhodecode/controllers/changeset.py:79
 
#: rhodecode/controllers/changeset.py:80
 
msgid "show white space"
 
msgstr ""
 

	
 
#: rhodecode/controllers/changeset.py:86 rhodecode/controllers/changeset.py:93
 
#: rhodecode/controllers/changeset.py:87 rhodecode/controllers/changeset.py:94
 
msgid "ignore white space"
 
msgstr ""
 

	
 
#: rhodecode/controllers/changeset.py:153
 
#: rhodecode/controllers/changeset.py:154
 
#, python-format
 
msgid "%s line context"
 
msgstr ""
 

	
 
#: rhodecode/controllers/changeset.py:320 rhodecode/controllers/changeset.py:335
 
#: rhodecode/controllers/changeset.py:324 rhodecode/controllers/changeset.py:339
 
#: rhodecode/lib/diffs.py:62
 
msgid "binary file"
 
msgstr ""
 

	
 
#: rhodecode/controllers/error.py:69
 
msgid "Home page"
 
msgstr ""
 

	
 
#: rhodecode/controllers/error.py:98
 
msgid "The request could not be understood by the server due to malformed syntax."
 
msgstr ""
 

	
 
#: rhodecode/controllers/error.py:101
 
msgid "Unauthorized access to resource"
 
msgstr ""
 

	
 
#: rhodecode/controllers/error.py:103
 
msgid "You don't have permission to view this page"
 
msgstr ""
 

	
 
#: rhodecode/controllers/error.py:105
 
msgid "The resource could not be found"
 
msgstr ""
 

	
 
#: rhodecode/controllers/error.py:107
 
msgid ""
 
"The server encountered an unexpected condition which prevented it from "
 
"fulfilling the request."
 
msgstr ""
 

	
 
#: rhodecode/controllers/feed.py:48
 
#, python-format
 
msgid "Changes on %s repository"
 
msgstr ""
 

	
 
#: rhodecode/controllers/feed.py:49
 
#, python-format
 
msgid "%s %s feed"
 
msgstr ""
 

	
 
#: rhodecode/controllers/files.py:86
 
#: rhodecode/templates/admin/repos/repo_add.html:13
 
msgid "add new"
 
msgstr ""
 

	
 
#: rhodecode/controllers/files.py:87
 
#, python-format
 
msgid "There are no files yet %s"
 
@@ -134,151 +134,151 @@ msgid "Unknown archive type"
 
msgstr ""
 

	
 
#: rhodecode/controllers/files.py:461
 
#: rhodecode/templates/changeset/changeset_range.html:5
 
#: rhodecode/templates/changeset/changeset_range.html:13
 
#: rhodecode/templates/changeset/changeset_range.html:31
 
msgid "Changesets"
 
msgstr ""
 

	
 
#: rhodecode/controllers/files.py:462 rhodecode/controllers/summary.py:230
 
#: rhodecode/templates/branches/branches.html:5
 
msgid "Branches"
 
msgstr ""
 

	
 
#: rhodecode/controllers/files.py:463 rhodecode/controllers/summary.py:231
 
#: rhodecode/templates/tags/tags.html:5
 
msgid "Tags"
 
msgstr ""
 

	
 
#: rhodecode/controllers/forks.py:69 rhodecode/controllers/admin/repos.py:86
 
#, python-format
 
msgid ""
 
"%s repository is not mapped to db perhaps it was created or renamed from the "
 
"filesystem please run the application again in order to rescan repositories"
 
msgstr ""
 

	
 
#: rhodecode/controllers/forks.py:128 rhodecode/controllers/settings.py:69
 
#, python-format
 
msgid ""
 
"%s repository is not mapped to db perhaps it was created or renamed from the "
 
"file system please run the application again in order to rescan repositories"
 
msgstr ""
 

	
 
#: rhodecode/controllers/forks.py:163
 
#, python-format
 
msgid "forked %s repository as %s"
 
msgstr ""
 

	
 
#: rhodecode/controllers/forks.py:177
 
#, python-format
 
msgid "An error occurred during repository forking %s"
 
msgstr ""
 

	
 
#: rhodecode/controllers/journal.py:53
 
#, python-format
 
msgid "%s public journal %s feed"
 
msgstr ""
 

	
 
#: rhodecode/controllers/journal.py:190 rhodecode/controllers/journal.py:224
 
#: rhodecode/controllers/journal.py:190 rhodecode/controllers/journal.py:223
 
#: rhodecode/templates/admin/repos/repo_edit.html:177
 
#: rhodecode/templates/base/base.html:307 rhodecode/templates/base/base.html:309
 
#: rhodecode/templates/base/base.html:311
 
msgid "Public journal"
 
msgstr ""
 

	
 
#: rhodecode/controllers/login.py:116
 
msgid "You have successfully registered into rhodecode"
 
msgstr ""
 

	
 
#: rhodecode/controllers/login.py:137
 
msgid "Your password reset link was sent"
 
msgstr ""
 

	
 
#: rhodecode/controllers/login.py:157
 
msgid "Your password reset was successful, new password has been sent to your email"
 
msgstr ""
 

	
 
#: rhodecode/controllers/search.py:114
 
msgid "Invalid search query. Try quoting it."
 
msgstr ""
 

	
 
#: rhodecode/controllers/search.py:119
 
msgid "There is no index to search in. Please run whoosh indexer"
 
msgstr ""
 

	
 
#: rhodecode/controllers/search.py:123
 
msgid "An error occurred during this search operation"
 
msgstr ""
 

	
 
#: rhodecode/controllers/settings.py:103 rhodecode/controllers/admin/repos.py:211
 
#: rhodecode/controllers/settings.py:103 rhodecode/controllers/admin/repos.py:213
 
#, python-format
 
msgid "Repository %s updated successfully"
 
msgstr ""
 

	
 
#: rhodecode/controllers/settings.py:121 rhodecode/controllers/admin/repos.py:229
 
#: rhodecode/controllers/settings.py:121 rhodecode/controllers/admin/repos.py:231
 
#, python-format
 
msgid "error occurred during update of repository %s"
 
msgstr ""
 

	
 
#: rhodecode/controllers/settings.py:139 rhodecode/controllers/admin/repos.py:247
 
#: rhodecode/controllers/settings.py:139 rhodecode/controllers/admin/repos.py:249
 
#, python-format
 
msgid ""
 
"%s repository is not mapped to db perhaps it was moved or renamed  from the "
 
"filesystem please run the application again in order to rescan repositories"
 
msgstr ""
 

	
 
#: rhodecode/controllers/settings.py:151 rhodecode/controllers/admin/repos.py:259
 
#: rhodecode/controllers/settings.py:151 rhodecode/controllers/admin/repos.py:261
 
#, python-format
 
msgid "deleted repository %s"
 
msgstr ""
 

	
 
#: rhodecode/controllers/settings.py:155 rhodecode/controllers/admin/repos.py:269
 
#: rhodecode/controllers/admin/repos.py:275
 
#: rhodecode/controllers/settings.py:155 rhodecode/controllers/admin/repos.py:271
 
#: rhodecode/controllers/admin/repos.py:277
 
#, python-format
 
msgid "An error occurred during deletion of %s"
 
msgstr ""
 

	
 
#: rhodecode/controllers/summary.py:138
 
msgid "No data loaded yet"
 
msgstr ""
 

	
 
#: rhodecode/controllers/summary.py:142
 
#: rhodecode/templates/summary/summary.html:139
 
msgid "Statistics are disabled for this repository"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/ldap_settings.py:49
 
msgid "BASE"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/ldap_settings.py:50
 
msgid "ONELEVEL"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/ldap_settings.py:51
 
msgid "SUBTREE"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/ldap_settings.py:55
 
msgid "NEVER"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/ldap_settings.py:56
 
msgid "ALLOW"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/ldap_settings.py:57
 
msgid "TRY"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/ldap_settings.py:58
 
msgid "DEMAND"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/ldap_settings.py:59
 
msgid "HARD"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/ldap_settings.py:63
 
msgid "No encryption"
 
msgstr ""
 
@@ -335,427 +335,447 @@ msgstr ""
 
#: rhodecode/templates/admin/users_groups/users_groups.html:9
 
#: rhodecode/templates/base/base.html:197 rhodecode/templates/base/base.html:326
 
#: rhodecode/templates/base/base.html:328 rhodecode/templates/base/base.html:330
 
msgid "Admin"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/permissions.py:65
 
msgid "disabled"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/permissions.py:67
 
msgid "allowed with manual account activation"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/permissions.py:69
 
msgid "allowed with automatic account activation"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/permissions.py:71
 
msgid "Disabled"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/permissions.py:72
 
msgid "Enabled"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/permissions.py:106
 
msgid "Default permissions updated successfully"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/permissions.py:123
 
msgid "error occurred during update of permissions"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/repos.py:116
 
msgid "--REMOVE FORK--"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/repos.py:144
 
#, python-format
 
msgid "created repository %s from %s"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/repos.py:148
 
#, python-format
 
msgid "created repository %s"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/repos.py:177
 
#: rhodecode/controllers/admin/repos.py:179
 
#, python-format
 
msgid "error occurred during creation of repository %s"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/repos.py:264
 
#: rhodecode/controllers/admin/repos.py:266
 
#, python-format
 
msgid "Cannot delete %s it still contains attached forks"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/repos.py:293
 
#: rhodecode/controllers/admin/repos.py:295
 
msgid "An error occurred during deletion of repository user"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/repos.py:312
 
#: rhodecode/controllers/admin/repos.py:314
 
msgid "An error occurred during deletion of repository users groups"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/repos.py:329
 
#: rhodecode/controllers/admin/repos.py:331
 
msgid "An error occurred during deletion of repository stats"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/repos.py:345
 
#: rhodecode/controllers/admin/repos.py:347
 
msgid "An error occurred during cache invalidation"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/repos.py:365
 
#: rhodecode/controllers/admin/repos.py:367
 
msgid "Updated repository visibility in public journal"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/repos.py:369
 
#: rhodecode/controllers/admin/repos.py:371
 
msgid "An error occurred during setting this repository in public journal"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/repos.py:374 rhodecode/model/forms.py:54
 
#: rhodecode/controllers/admin/repos.py:376 rhodecode/model/forms.py:54
 
msgid "Token mismatch"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/repos.py:387
 
msgid "Pulled from remote location"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/repos.py:389
 
msgid "Pulled from remote location"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/repos.py:391
 
msgid "An error occurred during pull from remote location"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/repos.py:405
 
msgid "Nothing"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/repos.py:407
 
msgid "Nothing"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/repos.py:409
 
#, python-format
 
msgid "Marked repo %s as fork of %s"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/repos.py:411
 
#: rhodecode/controllers/admin/repos.py:413
 
msgid "An error occurred during this operation"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/repos_groups.py:119
 
#, python-format
 
msgid "created repos group %s"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/repos_groups.py:132
 
#, python-format
 
msgid "error occurred during creation of repos group %s"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/repos_groups.py:166
 
#, python-format
 
msgid "updated repos group %s"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/repos_groups.py:179
 
#, python-format
 
msgid "error occurred during update of repos group %s"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/repos_groups.py:198
 
#, python-format
 
msgid "This group contains %s repositores and cannot be deleted"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/repos_groups.py:205
 
#, python-format
 
msgid "removed repos group %s"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/repos_groups.py:210
 
msgid "Cannot delete this group it still contains subgroups"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/repos_groups.py:215
 
#: rhodecode/controllers/admin/repos_groups.py:220
 
#, python-format
 
msgid "error occurred during deletion of repos group %s"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/repos_groups.py:240
 
msgid "An error occurred during deletion of group user"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/repos_groups.py:260
 
msgid "An error occurred during deletion of group users groups"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/settings.py:120
 
#, python-format
 
msgid "Repositories successfully rescanned added: %s,removed: %s"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/settings.py:129
 
msgid "Whoosh reindex task scheduled"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/settings.py:154
 
msgid "Updated application settings"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/settings.py:159
 
#: rhodecode/controllers/admin/settings.py:226
 
msgid "error occurred during updating application settings"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/settings.py:221
 
msgid "Updated mercurial settings"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/settings.py:246
 
msgid "Added new hook"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/settings.py:258
 
msgid "Updated hooks"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/settings.py:262
 
msgid "error occurred during hook creation"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/settings.py:281
 
msgid "Email task created"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/settings.py:336
 
msgid "You can't edit this user since it's crucial for entire application"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/settings.py:365
 
#: rhodecode/controllers/admin/settings.py:367
 
msgid "Your account was updated successfully"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/settings.py:384
 
#: rhodecode/controllers/admin/users.py:132
 
#: rhodecode/controllers/admin/settings.py:387
 
#: rhodecode/controllers/admin/users.py:138
 
#, python-format
 
msgid "error occurred during update of user %s"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/users.py:79
 
#: rhodecode/controllers/admin/users.py:83
 
#, python-format
 
msgid "created user %s"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/users.py:92
 
#: rhodecode/controllers/admin/users.py:95
 
#, python-format
 
msgid "error occurred during creation of user %s"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/users.py:118
 
#: rhodecode/controllers/admin/users.py:124
 
msgid "User updated successfully"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/users.py:149
 
#: rhodecode/controllers/admin/users.py:155
 
msgid "successfully deleted user"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/users.py:154
 
#: rhodecode/controllers/admin/users.py:160
 
msgid "An error occurred during deletion of user"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/users.py:169
 
#: rhodecode/controllers/admin/users.py:175
 
msgid "You can't edit this user"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/users.py:199
 
#: rhodecode/controllers/admin/users_groups.py:215
 
#: rhodecode/controllers/admin/users.py:205
 
#: rhodecode/controllers/admin/users_groups.py:219
 
msgid "Granted 'repository create' permission to user"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/users.py:208
 
#: rhodecode/controllers/admin/users_groups.py:225
 
#: rhodecode/controllers/admin/users.py:214
 
#: rhodecode/controllers/admin/users_groups.py:229
 
msgid "Revoked 'repository create' permission to user"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/users_groups.py:79
 
#: rhodecode/controllers/admin/users_groups.py:84
 
#, python-format
 
msgid "created users group %s"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/users_groups.py:92
 
#: rhodecode/controllers/admin/users_groups.py:95
 
#, python-format
 
msgid "error occurred during creation of users group %s"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/users_groups.py:128
 
#: rhodecode/controllers/admin/users_groups.py:135
 
#, python-format
 
msgid "updated users group %s"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/users_groups.py:148
 
#: rhodecode/controllers/admin/users_groups.py:152
 
#, python-format
 
msgid "error occurred during update of users group %s"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/users_groups.py:165
 
#: rhodecode/controllers/admin/users_groups.py:169
 
msgid "successfully deleted users group"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/users_groups.py:170
 
#: rhodecode/controllers/admin/users_groups.py:174
 
msgid "An error occurred during deletion of users group"
 
msgstr ""
 

	
 
#: rhodecode/lib/auth.py:497
 
msgid "You need to be a registered user to perform this action"
 
msgstr ""
 

	
 
#: rhodecode/lib/auth.py:538
 
msgid "You need to be a signed in to view this page"
 
msgstr ""
 

	
 
#: rhodecode/lib/diffs.py:78
 
msgid "Changeset was too big and was cut off, use diff menu to display this diff"
 
msgstr ""
 

	
 
#: rhodecode/lib/diffs.py:88
 
msgid "No changes detected"
 
msgstr ""
 

	
 
#: rhodecode/lib/helpers.py:415
 
msgid "True"
 
msgstr ""
 

	
 
#: rhodecode/lib/helpers.py:419
 
msgid "False"
 
msgstr ""
 

	
 
#: rhodecode/lib/helpers.py:463
 
msgid "Changeset not found"
 
msgstr ""
 

	
 
#: rhodecode/lib/helpers.py:486
 
#, python-format
 
msgid "Show all combined changesets %s->%s"
 
msgstr ""
 

	
 
#: rhodecode/lib/helpers.py:492
 
msgid "compare view"
 
msgstr ""
 

	
 
#: rhodecode/lib/helpers.py:512
 
msgid "and"
 
msgstr ""
 

	
 
#: rhodecode/lib/helpers.py:513
 
#, python-format
 
msgid "%s more"
 
msgstr ""
 

	
 
#: rhodecode/lib/helpers.py:514 rhodecode/templates/changelog/changelog.html:40
 
msgid "revisions"
 
msgstr ""
 

	
 
#: rhodecode/lib/helpers.py:537
 
msgid "fork name "
 
msgstr ""
 

	
 
#: rhodecode/lib/helpers.py:540
 
#: rhodecode/lib/helpers.py:550
 
msgid "[deleted] repository"
 
msgstr ""
 

	
 
#: rhodecode/lib/helpers.py:541 rhodecode/lib/helpers.py:546
 
#: rhodecode/lib/helpers.py:552 rhodecode/lib/helpers.py:562
 
msgid "[created] repository"
 
msgstr ""
 

	
 
#: rhodecode/lib/helpers.py:542
 
msgid "[created] repository as fork"
 
msgstr ""
 

	
 
#: rhodecode/lib/helpers.py:543 rhodecode/lib/helpers.py:547
 
msgid "[forked] repository"
 
msgstr ""
 

	
 
#: rhodecode/lib/helpers.py:544 rhodecode/lib/helpers.py:548
 
msgid "[updated] repository"
 
msgstr ""
 

	
 
#: rhodecode/lib/helpers.py:545
 
msgid "[delete] repository"
 
msgstr ""
 

	
 
#: rhodecode/lib/helpers.py:549
 
msgid "[pushed] into"
 
msgstr ""
 

	
 
#: rhodecode/lib/helpers.py:550
 
msgid "[committed via RhodeCode] into"
 
msgstr ""
 

	
 
#: rhodecode/lib/helpers.py:551
 
msgid "[pulled from remote] into"
 
msgstr ""
 

	
 
#: rhodecode/lib/helpers.py:552
 
msgid "[pulled] from"
 
msgstr ""
 

	
 
#: rhodecode/lib/helpers.py:553
 
msgid "[started following] repository"
 
msgstr ""
 

	
 
#: rhodecode/lib/helpers.py:554
 
msgid "[created] repository as fork"
 
msgstr ""
 

	
 
#: rhodecode/lib/helpers.py:556 rhodecode/lib/helpers.py:564
 
msgid "[forked] repository"
 
msgstr ""
 

	
 
#: rhodecode/lib/helpers.py:558 rhodecode/lib/helpers.py:566
 
msgid "[updated] repository"
 
msgstr ""
 

	
 
#: rhodecode/lib/helpers.py:560
 
msgid "[delete] repository"
 
msgstr ""
 

	
 
#: rhodecode/lib/helpers.py:568
 
msgid "[created] user"
 
msgstr ""
 

	
 
#: rhodecode/lib/helpers.py:570
 
msgid "[updated] user"
 
msgstr ""
 

	
 
#: rhodecode/lib/helpers.py:572
 
msgid "[created] users group"
 
msgstr ""
 

	
 
#: rhodecode/lib/helpers.py:574
 
msgid "[updated] users group"
 
msgstr ""
 

	
 
#: rhodecode/lib/helpers.py:576
 
msgid "[commented] on revision in repository"
 
msgstr ""
 

	
 
#: rhodecode/lib/helpers.py:578
 
msgid "[pushed] into"
 
msgstr ""
 

	
 
#: rhodecode/lib/helpers.py:580
 
msgid "[committed via RhodeCode] into repository"
 
msgstr ""
 

	
 
#: rhodecode/lib/helpers.py:582
 
msgid "[pulled from remote] into repository"
 
msgstr ""
 

	
 
#: rhodecode/lib/helpers.py:584
 
msgid "[pulled] from"
 
msgstr ""
 

	
 
#: rhodecode/lib/helpers.py:586
 
msgid "[started following] repository"
 
msgstr ""
 

	
 
#: rhodecode/lib/helpers.py:588
 
msgid "[stopped following] repository"
 
msgstr ""
 

	
 
#: rhodecode/lib/helpers.py:732
 
#: rhodecode/lib/helpers.py:752
 
#, python-format
 
msgid " and %s more"
 
msgstr ""
 

	
 
#: rhodecode/lib/helpers.py:736
 
#: rhodecode/lib/helpers.py:756
 
msgid "No Files"
 
msgstr ""
 

	
 
#: rhodecode/lib/utils2.py:335
 
#, python-format
 
msgid "%d year"
 
msgid_plural "%d years"
 
msgstr[0] ""
 
msgstr[1] ""
 

	
 
#: rhodecode/lib/utils2.py:336
 
#, python-format
 
msgid "%d month"
 
msgid_plural "%d months"
 
msgstr[0] ""
 
msgstr[1] ""
 

	
 
#: rhodecode/lib/utils2.py:337
 
#, python-format
 
msgid "%d day"
 
msgid_plural "%d days"
 
msgstr[0] ""
 
msgstr[1] ""
 

	
 
#: rhodecode/lib/utils2.py:338
 
#, python-format
 
msgid "%d hour"
 
msgid_plural "%d hours"
 
msgstr[0] ""
 
msgstr[1] ""
 

	
 
#: rhodecode/lib/utils2.py:339
 
#, python-format
 
msgid "%d minute"
 
msgid_plural "%d minutes"
 
msgstr[0] ""
 
msgstr[1] ""
 

	
 
#: rhodecode/lib/utils2.py:340
 
#, python-format
 
msgid "%d second"
 
msgid_plural "%d seconds"
 
msgstr[0] ""
 
msgstr[1] ""
 

	
 
#: rhodecode/lib/utils2.py:355
 
#, python-format
 
msgid "%s ago"
 
@@ -913,518 +933,518 @@ msgstr ""
 
msgid "Please enter a password"
 
msgstr ""
 

	
 
#: rhodecode/model/forms.py:559
 
#, python-format
 
msgid "Enter %(min)i characters or more"
 
msgstr ""
 

	
 
#: rhodecode/model/notification.py:175
 
msgid "commented on commit"
 
msgstr ""
 

	
 
#: rhodecode/model/notification.py:176
 
msgid "sent message"
 
msgstr ""
 

	
 
#: rhodecode/model/notification.py:177
 
msgid "mentioned you"
 
msgstr ""
 

	
 
#: rhodecode/model/notification.py:178
 
msgid "registered in RhodeCode"
 
msgstr ""
 

	
 
#: rhodecode/model/user.py:235
 
msgid "new user registration"
 
msgstr ""
 

	
 
#: rhodecode/model/user.py:259 rhodecode/model/user.py:279
 
msgid "You can't Edit this user since it's crucial for entire application"
 
msgstr ""
 

	
 
#: rhodecode/model/user.py:300
 
msgid "You can't remove this user since it's crucial for entire application"
 
msgstr ""
 

	
 
#: rhodecode/model/user.py:306
 
#, python-format
 
msgid ""
 
"user \"%s\" still owns %s repositories and cannot be removed. Switch owners "
 
"or remove those repositories. %s"
 
msgstr ""
 

	
 
#: rhodecode/templates/index.html:3
 
msgid "Dashboard"
 
msgstr ""
 

	
 
#: rhodecode/templates/index_base.html:6
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:115
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:31
 
#: rhodecode/templates/bookmarks/bookmarks.html:10
 
#: rhodecode/templates/branches/branches.html:9
 
#: rhodecode/templates/journal/journal.html:31
 
#: rhodecode/templates/tags/tags.html:10
 
msgid "quick filter..."
 
msgstr ""
 

	
 
#: rhodecode/templates/index_base.html:6 rhodecode/templates/base/base.html:218
 
msgid "repositories"
 
msgstr ""
 

	
 
#: rhodecode/templates/index_base.html:13 rhodecode/templates/index_base.html:15
 
#: rhodecode/templates/admin/repos/repos.html:22
 
msgid "ADD REPOSITORY"
 
msgstr ""
 

	
 
#: rhodecode/templates/index_base.html:29
 
#: rhodecode/templates/admin/repos_groups/repos_groups_add.html:32
 
#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:32
 
#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:33
 
#: rhodecode/templates/admin/users_groups/users_group_add.html:32
 
#: rhodecode/templates/admin/users_groups/users_group_edit.html:33
 
msgid "Group name"
 
msgstr ""
 

	
 
#: rhodecode/templates/index_base.html:30 rhodecode/templates/index_base.html:67
 
#: rhodecode/templates/index_base.html:132 rhodecode/templates/index_base.html:158
 
#: rhodecode/templates/admin/repos/repo_add_base.html:47
 
#: rhodecode/templates/admin/repos/repo_edit.html:66
 
#: rhodecode/templates/admin/repos/repos.html:37
 
#: rhodecode/templates/admin/repos/repos.html:84
 
#: rhodecode/templates/admin/repos_groups/repos_groups_add.html:41
 
#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:41
 
#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:34
 
#: rhodecode/templates/forks/fork.html:49
 
#: rhodecode/templates/settings/repo_settings.html:57
 
#: rhodecode/templates/summary/summary.html:100
 
msgid "Description"
 
msgstr ""
 

	
 
#: rhodecode/templates/index_base.html:40
 
#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:46
 
msgid "Repositories group"
 
msgstr ""
 

	
 
#: rhodecode/templates/index_base.html:66 rhodecode/templates/index_base.html:156
 
#: rhodecode/templates/admin/repos/repo_add_base.html:9
 
#: rhodecode/templates/admin/repos/repo_edit.html:32
 
#: rhodecode/templates/admin/repos/repos.html:36
 
#: rhodecode/templates/admin/repos/repos.html:82
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:133
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:183
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:249
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:284
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:49
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:99
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:165
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:200
 
#: rhodecode/templates/bookmarks/bookmarks.html:36
 
#: rhodecode/templates/bookmarks/bookmarks_data.html:6
 
#: rhodecode/templates/branches/branches.html:36
 
#: rhodecode/templates/files/files_browser.html:47
 
#: rhodecode/templates/journal/journal.html:50
 
#: rhodecode/templates/journal/journal.html:98
 
#: rhodecode/templates/journal/journal.html:177
 
#: rhodecode/templates/settings/repo_settings.html:31
 
#: rhodecode/templates/summary/summary.html:38
 
#: rhodecode/templates/summary/summary.html:114
 
#: rhodecode/templates/tags/tags.html:36 rhodecode/templates/tags/tags_data.html:6
 
msgid "Name"
 
msgstr ""
 

	
 
#: rhodecode/templates/index_base.html:68
 
#: rhodecode/templates/admin/repos/repos.html:38
 
msgid "Last change"
 
msgstr ""
 

	
 
#: rhodecode/templates/index_base.html:69 rhodecode/templates/index_base.html:161
 
#: rhodecode/templates/admin/repos/repos.html:39
 
#: rhodecode/templates/admin/repos/repos.html:87
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:251
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:167
 
#: rhodecode/templates/journal/journal.html:179
 
msgid "Tip"
 
msgstr ""
 

	
 
#: rhodecode/templates/index_base.html:70 rhodecode/templates/index_base.html:163
 
#: rhodecode/templates/admin/repos/repo_edit.html:103
 
#: rhodecode/templates/admin/repos/repos.html:89
 
msgid "Owner"
 
msgstr ""
 

	
 
#: rhodecode/templates/index_base.html:71
 
#: rhodecode/templates/journal/public_journal.html:20
 
#: rhodecode/templates/summary/summary.html:43
 
#: rhodecode/templates/summary/summary.html:46
 
msgid "RSS"
 
msgstr ""
 

	
 
#: rhodecode/templates/index_base.html:72
 
#: rhodecode/templates/journal/public_journal.html:23
 
msgid "Atom"
 
msgstr ""
 

	
 
#: rhodecode/templates/index_base.html:102 rhodecode/templates/index_base.html:104
 
#, python-format
 
msgid "Subscribe to %s rss feed"
 
msgstr ""
 

	
 
#: rhodecode/templates/index_base.html:109 rhodecode/templates/index_base.html:111
 
#, python-format
 
msgid "Subscribe to %s atom feed"
 
msgstr ""
 

	
 
#: rhodecode/templates/index_base.html:130
 
msgid "Group Name"
 
msgstr ""
 

	
 
#: rhodecode/templates/index_base.html:148 rhodecode/templates/index_base.html:188
 
#: rhodecode/templates/admin/repos/repos.html:112
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:270
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:186
 
#: rhodecode/templates/bookmarks/bookmarks.html:60
 
#: rhodecode/templates/branches/branches.html:60
 
#: rhodecode/templates/journal/journal.html:202
 
#: rhodecode/templates/tags/tags.html:60
 
msgid "Click to sort ascending"
 
msgstr ""
 

	
 
#: rhodecode/templates/index_base.html:149 rhodecode/templates/index_base.html:189
 
#: rhodecode/templates/admin/repos/repos.html:113
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:271
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:187
 
#: rhodecode/templates/bookmarks/bookmarks.html:61
 
#: rhodecode/templates/branches/branches.html:61
 
#: rhodecode/templates/journal/journal.html:203
 
#: rhodecode/templates/tags/tags.html:61
 
msgid "Click to sort descending"
 
msgstr ""
 

	
 
#: rhodecode/templates/index_base.html:159
 
#: rhodecode/templates/admin/repos/repos.html:85
 
msgid "Last Change"
 
msgstr ""
 

	
 
#: rhodecode/templates/index_base.html:190
 
#: rhodecode/templates/admin/repos/repos.html:114
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:272
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:188
 
#: rhodecode/templates/bookmarks/bookmarks.html:62
 
#: rhodecode/templates/branches/branches.html:62
 
#: rhodecode/templates/journal/journal.html:204
 
#: rhodecode/templates/tags/tags.html:62
 
msgid "No records found."
 
msgstr ""
 

	
 
#: rhodecode/templates/index_base.html:191
 
#: rhodecode/templates/admin/repos/repos.html:115
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:273
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:189
 
#: rhodecode/templates/bookmarks/bookmarks.html:63
 
#: rhodecode/templates/branches/branches.html:63
 
#: rhodecode/templates/journal/journal.html:205
 
#: rhodecode/templates/tags/tags.html:63
 
msgid "Data error."
 
msgstr ""
 

	
 
#: rhodecode/templates/index_base.html:192
 
#: rhodecode/templates/admin/repos/repos.html:116
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:274
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:190
 
#: rhodecode/templates/bookmarks/bookmarks.html:64
 
#: rhodecode/templates/branches/branches.html:64
 
#: rhodecode/templates/journal/journal.html:206
 
#: rhodecode/templates/tags/tags.html:64
 
msgid "Loading..."
 
msgstr ""
 

	
 
#: rhodecode/templates/login.html:5 rhodecode/templates/login.html:54
 
msgid "Sign In"
 
msgstr ""
 

	
 
#: rhodecode/templates/login.html:21
 
msgid "Sign In to"
 
msgstr ""
 

	
 
#: rhodecode/templates/login.html:31 rhodecode/templates/register.html:20
 
#: rhodecode/templates/admin/admin_log.html:5
 
#: rhodecode/templates/admin/users/user_add.html:32
 
#: rhodecode/templates/admin/users/user_edit.html:50
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:49
 
#: rhodecode/templates/admin/users/user_edit_my_account_form.html:26
 
#: rhodecode/templates/base/base.html:83
 
#: rhodecode/templates/summary/summary.html:113
 
msgid "Username"
 
msgstr ""
 

	
 
#: rhodecode/templates/login.html:40 rhodecode/templates/register.html:29
 
#: rhodecode/templates/admin/ldap/ldap.html:46
 
#: rhodecode/templates/admin/users/user_add.html:41
 
#: rhodecode/templates/base/base.html:92
 
msgid "Password"
 
msgstr ""
 

	
 
#: rhodecode/templates/login.html:50
 
msgid "Remember me"
 
msgstr ""
 

	
 
#: rhodecode/templates/login.html:60
 
msgid "Forgot your password ?"
 
msgstr ""
 

	
 
#: rhodecode/templates/login.html:63 rhodecode/templates/base/base.html:103
 
msgid "Don't have an account ?"
 
msgstr ""
 

	
 
#: rhodecode/templates/password_reset.html:5
 
msgid "Reset your password"
 
msgstr ""
 

	
 
#: rhodecode/templates/password_reset.html:11
 
msgid "Reset your password to"
 
msgstr ""
 

	
 
#: rhodecode/templates/password_reset.html:21
 
msgid "Email address"
 
msgstr ""
 

	
 
#: rhodecode/templates/password_reset.html:30
 
msgid "Reset my password"
 
msgstr ""
 

	
 
#: rhodecode/templates/password_reset.html:31
 
msgid "Password reset link will be send to matching email address"
 
msgstr ""
 

	
 
#: rhodecode/templates/register.html:5 rhodecode/templates/register.html:74
 
msgid "Sign Up"
 
msgstr ""
 

	
 
#: rhodecode/templates/register.html:11
 
msgid "Sign Up to"
 
msgstr ""
 

	
 
#: rhodecode/templates/register.html:38
 
msgid "Re-enter password"
 
msgstr ""
 

	
 
#: rhodecode/templates/register.html:47
 
#: rhodecode/templates/admin/users/user_add.html:59
 
#: rhodecode/templates/admin/users/user_edit.html:86
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:76
 
#: rhodecode/templates/admin/users/user_edit_my_account_form.html:53
 
msgid "First Name"
 
msgstr ""
 

	
 
#: rhodecode/templates/register.html:56
 
#: rhodecode/templates/admin/users/user_add.html:68
 
#: rhodecode/templates/admin/users/user_edit.html:95
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:85
 
#: rhodecode/templates/admin/users/user_edit_my_account_form.html:62
 
msgid "Last Name"
 
msgstr ""
 

	
 
#: rhodecode/templates/register.html:65
 
#: rhodecode/templates/admin/users/user_add.html:77
 
#: rhodecode/templates/admin/users/user_edit.html:104
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:94
 
#: rhodecode/templates/admin/users/user_edit_my_account_form.html:71
 
#: rhodecode/templates/summary/summary.html:115
 
msgid "Email"
 
msgstr ""
 

	
 
#: rhodecode/templates/register.html:76
 
msgid "Your account will be activated right after registration"
 
msgstr ""
 

	
 
#: rhodecode/templates/register.html:78
 
msgid "Your account must wait for activation by administrator"
 
msgstr ""
 

	
 
#: rhodecode/templates/repo_switcher_list.html:11
 
#: rhodecode/templates/admin/repos/repo_add_base.html:56
 
#: rhodecode/templates/admin/repos/repo_edit.html:76
 
#: rhodecode/templates/settings/repo_settings.html:67
 
msgid "Private repository"
 
msgstr ""
 

	
 
#: rhodecode/templates/repo_switcher_list.html:16
 
msgid "Public repository"
 
msgstr ""
 

	
 
#: rhodecode/templates/switch_to_list.html:3
 
#: rhodecode/templates/branches/branches.html:14
 
msgid "branches"
 
msgstr ""
 

	
 
#: rhodecode/templates/switch_to_list.html:10
 
#: rhodecode/templates/branches/branches_data.html:51
 
msgid "There are no branches yet"
 
msgstr ""
 

	
 
#: rhodecode/templates/switch_to_list.html:15
 
#: rhodecode/templates/shortlog/shortlog_data.html:10
 
#: rhodecode/templates/tags/tags.html:15
 
msgid "tags"
 
msgstr ""
 

	
 
#: rhodecode/templates/switch_to_list.html:22
 
#: rhodecode/templates/tags/tags_data.html:33
 
msgid "There are no tags yet"
 
msgstr ""
 

	
 
#: rhodecode/templates/switch_to_list.html:28
 
#: rhodecode/templates/bookmarks/bookmarks.html:15
 
msgid "bookmarks"
 
msgstr ""
 

	
 
#: rhodecode/templates/switch_to_list.html:35
 
#: rhodecode/templates/bookmarks/bookmarks_data.html:32
 
msgid "There are no bookmarks yet"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/admin.html:5 rhodecode/templates/admin/admin.html:9
 
msgid "Admin journal"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/admin_log.html:6
 
#: rhodecode/templates/admin/repos/repos.html:41
 
#: rhodecode/templates/admin/repos/repos.html:90
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:135
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:136
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:51
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:52
 
#: rhodecode/templates/journal/journal.html:52
 
#: rhodecode/templates/journal/journal.html:53
 
msgid "Action"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/admin_log.html:7
 
msgid "Repository"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/admin_log.html:8
 
#: rhodecode/templates/bookmarks/bookmarks.html:37
 
#: rhodecode/templates/bookmarks/bookmarks_data.html:7
 
#: rhodecode/templates/branches/branches.html:37
 
#: rhodecode/templates/tags/tags.html:37 rhodecode/templates/tags/tags_data.html:7
 
msgid "Date"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/admin_log.html:9
 
msgid "From IP"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/admin_log.html:52
 
#: rhodecode/templates/admin/admin_log.html:53
 
msgid "No actions yet"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/ldap/ldap.html:5
 
msgid "LDAP administration"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/ldap/ldap.html:11
 
msgid "Ldap"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/ldap/ldap.html:28
 
msgid "Connection settings"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/ldap/ldap.html:30
 
msgid "Enable LDAP"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/ldap/ldap.html:34
 
msgid "Host"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/ldap/ldap.html:38
 
msgid "Port"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/ldap/ldap.html:42
 
msgid "Account"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/ldap/ldap.html:50
 
msgid "Connection security"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/ldap/ldap.html:54
 
msgid "Certificate Checks"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/ldap/ldap.html:57
 
msgid "Search settings"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/ldap/ldap.html:59
 
msgid "Base DN"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/ldap/ldap.html:63
 
msgid "LDAP Filter"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/ldap/ldap.html:67
 
msgid "LDAP Search Scope"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/ldap/ldap.html:70
 
msgid "Attribute mappings"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/ldap/ldap.html:72
 
msgid "Login Attribute"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/ldap/ldap.html:76
 
msgid "First Name Attribute"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/ldap/ldap.html:80
 
msgid "Last Name Attribute"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/ldap/ldap.html:84
 
msgid "E-mail Attribute"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/ldap/ldap.html:89
 
#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:66
 
#: rhodecode/templates/admin/settings/hooks.html:73
 
#: rhodecode/templates/admin/users/user_edit.html:129
 
#: rhodecode/templates/admin/users/user_edit.html:154
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:102
 
#: rhodecode/templates/admin/users/user_edit_my_account_form.html:79
 
#: rhodecode/templates/admin/users_groups/users_group_edit.html:115
 
#: rhodecode/templates/settings/repo_settings.html:84
 
msgid "Save"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/notifications/notifications.html:5
 
#: rhodecode/templates/admin/notifications/notifications.html:9
 
msgid "My Notifications"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/notifications/notifications.html:29
 
msgid "Mark all read"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/notifications/notifications_data.html:38
 
msgid "No notifications here yet"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/notifications/show_notification.html:5
 
#: rhodecode/templates/admin/notifications/show_notification.html:11
 
msgid "Show notification"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/notifications/show_notification.html:9
 
msgid "Notifications"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/permissions/permissions.html:5
 
msgid "Permissions administration"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/permissions/permissions.html:11
 
#: rhodecode/templates/admin/repos/repo_edit.html:116
 
#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:58
 
#: rhodecode/templates/admin/users/user_edit.html:139
 
#: rhodecode/templates/admin/users_groups/users_group_edit.html:100
 
#: rhodecode/templates/settings/repo_settings.html:77
 
msgid "Permissions"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/permissions/permissions.html:24
 
msgid "Default permissions"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/permissions/permissions.html:31
 
msgid "Anonymous access"
 
msgstr ""
 

	
 
@@ -1486,97 +1506,97 @@ msgstr ""
 
#: rhodecode/templates/forks/fork.html:41
 
#: rhodecode/templates/settings/repo_settings.html:48
 
msgid "Repository group"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/repos/repo_add_base.html:33
 
#: rhodecode/templates/admin/repos/repo_edit.html:53
 
#: rhodecode/templates/settings/repo_settings.html:52
 
msgid "Optional select a group to put this repository into."
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/repos/repo_add_base.html:38
 
#: rhodecode/templates/admin/repos/repo_edit.html:58
 
msgid "Type"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/repos/repo_add_base.html:42
 
msgid "Type of repository to create."
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/repos/repo_add_base.html:51
 
#: rhodecode/templates/admin/repos/repo_edit.html:70
 
#: rhodecode/templates/settings/repo_settings.html:61
 
msgid "Keep it short and to the point. Use a README file for longer descriptions."
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/repos/repo_add_base.html:60
 
#: rhodecode/templates/admin/repos/repo_edit.html:80
 
#: rhodecode/templates/settings/repo_settings.html:71
 
msgid ""
 
"Private repositories are only visible to people explicitly added as "
 
"collaborators."
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/repos/repo_add_base.html:64
 
msgid "add"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/repos/repo_add_create_repository.html:9
 
msgid "add new repository"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/repos/repo_edit.html:5
 
msgid "Edit repository"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/repos/repo_edit.html:13
 
#: rhodecode/templates/admin/users/user_edit.html:13
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:155
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:71
 
#: rhodecode/templates/admin/users_groups/users_group_edit.html:13
 
#: rhodecode/templates/files/files_source.html:32
 
#: rhodecode/templates/journal/journal.html:72
 
msgid "edit"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/repos/repo_edit.html:40
 
#: rhodecode/templates/settings/repo_settings.html:39
 
msgid "Clone uri"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/repos/repo_edit.html:85
 
msgid "Enable statistics"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/repos/repo_edit.html:89
 
msgid "Enable statistics window on summary page."
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/repos/repo_edit.html:94
 
msgid "Enable downloads"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/repos/repo_edit.html:98
 
msgid "Enable download menu on summary page."
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/repos/repo_edit.html:108
 
msgid "Change owner of this repository."
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/repos/repo_edit.html:134
 
msgid "Administration"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/repos/repo_edit.html:137
 
msgid "Statistics"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/repos/repo_edit.html:141
 
msgid "Reset current statistics"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/repos/repo_edit.html:141
 
msgid "Confirm to remove current statistics"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/repos/repo_edit.html:144
 
@@ -1644,197 +1664,186 @@ msgid ""
 
"for RhodeCode and VCS systems.\n"
 
"                         If you need fully delete it from filesystem please "
 
"do it manually"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/repos/repo_edit.html:213
 
msgid "Set as fork"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/repos/repo_edit.html:222
 
msgid "Manually set this repository as a fork of another"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/repos/repo_edit_perms.html:3
 
#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:3
 
msgid "none"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/repos/repo_edit_perms.html:4
 
#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:4
 
msgid "read"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/repos/repo_edit_perms.html:5
 
#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:5
 
msgid "write"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/repos/repo_edit_perms.html:6
 
#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:6
 
#: rhodecode/templates/admin/users/users.html:38
 
#: rhodecode/templates/base/base.html:214
 
msgid "admin"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/repos/repo_edit_perms.html:7
 
#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:7
 
msgid "member"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/repos/repo_edit_perms.html:16
 
#: rhodecode/templates/data_table/_dt_elements.html:61
 
#: rhodecode/templates/journal/journal.html:123
 
#: rhodecode/templates/summary/summary.html:71
 
msgid "private repository"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/repos/repo_edit_perms.html:33
 
#: rhodecode/templates/admin/repos/repo_edit_perms.html:53
 
#: rhodecode/templates/admin/repos/repo_edit_perms.html:58
 
#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:23
 
#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:42
 
msgid "revoke"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/repos/repo_edit_perms.html:75
 
#: rhodecode/templates/admin/repos/repo_edit_perms.html:80
 
#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:64
 
msgid "Add another member"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/repos/repo_edit_perms.html:89
 
#: rhodecode/templates/admin/repos/repo_edit_perms.html:94
 
#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:78
 
msgid "Failed to remove user"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/repos/repo_edit_perms.html:104
 
#: rhodecode/templates/admin/repos/repo_edit_perms.html:109
 
#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:93
 
msgid "Failed to remove users group"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/repos/repo_edit_perms.html:123
 
#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:112
 
msgid "Group"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/repos/repo_edit_perms.html:124
 
#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:113
 
#: rhodecode/templates/admin/users_groups/users_groups.html:33
 
msgid "members"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/repos/repos.html:5
 
msgid "Repositories administration"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/repos/repos.html:40
 
#: rhodecode/templates/summary/summary.html:107
 
msgid "Contact"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/repos/repos.html:68
 
#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:54
 
#: rhodecode/templates/admin/users/users.html:55
 
#: rhodecode/templates/admin/users_groups/users_groups.html:44
 
msgid "delete"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/repos/repos.html:68
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:158
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:74
 
#, python-format
 
msgid "Confirm to delete this repository: %s"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/repos_groups/repos_groups.html:8
 
msgid "Groups"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/repos_groups/repos_groups.html:12
 
msgid "with"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/repos_groups/repos_groups_add.html:5
 
msgid "Add repos group"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/repos_groups/repos_groups_add.html:10
 
#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:10
 
msgid "Repos groups"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/repos_groups/repos_groups_add.html:12
 
msgid "add new repos group"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/repos_groups/repos_groups_add.html:50
 
#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:50
 
msgid "Group parent"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/repos_groups/repos_groups_add.html:58
 
#: rhodecode/templates/admin/users/user_add.html:94
 
#: rhodecode/templates/admin/users_groups/users_group_add.html:49
 
#: rhodecode/templates/admin/users_groups/users_group_edit.html:90
 
msgid "save"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:5
 
msgid "Edit repos group"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:12
 
msgid "edit repos group"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:67
 
#: rhodecode/templates/admin/settings/settings.html:112
 
#: rhodecode/templates/admin/settings/settings.html:177
 
#: rhodecode/templates/admin/users/user_edit.html:130
 
#: rhodecode/templates/admin/users/user_edit.html:155
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:103
 
#: rhodecode/templates/admin/users/user_edit_my_account_form.html:80
 
#: rhodecode/templates/admin/users_groups/users_group_edit.html:116
 
#: rhodecode/templates/files/files_add.html:82
 
#: rhodecode/templates/files/files_edit.html:68
 
#: rhodecode/templates/settings/repo_settings.html:85
 
msgid "Reset"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:5
 
msgid "Repositories groups administration"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:22
 
msgid "ADD NEW GROUP"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:35
 
msgid "Number of toplevel repositories"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:36
 
#: rhodecode/templates/admin/users/users.html:40
 
#: rhodecode/templates/admin/users_groups/users_groups.html:35
 
msgid "action"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:54
 
#, python-format
 
msgid "Confirm to delete this group: %s"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:62
 
msgid "There are no repositories groups yet"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/settings/hooks.html:5
 
#: rhodecode/templates/admin/settings/settings.html:5
 
msgid "Settings administration"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/settings/hooks.html:9
 
#: rhodecode/templates/admin/settings/settings.html:9
 
#: rhodecode/templates/settings/repo_settings.html:5
 
#: rhodecode/templates/settings/repo_settings.html:13
 
msgid "Settings"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/settings/hooks.html:24
 
msgid "Built in hooks - read only"
 
@@ -1968,178 +1977,178 @@ msgid "Test Email"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/settings/settings.html:199
 
msgid "Email to"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/settings/settings.html:207
 
msgid "Send"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/settings/settings.html:213
 
msgid "System Info and Packages"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/settings/settings.html:216
 
msgid "show"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/users/user_add.html:5
 
msgid "Add user"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/users/user_add.html:10
 
#: rhodecode/templates/admin/users/user_edit.html:11
 
#: rhodecode/templates/admin/users/users.html:9
 
msgid "Users"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/users/user_add.html:12
 
msgid "add new user"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/users/user_add.html:50
 
msgid "Password confirmation"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/users/user_add.html:86
 
#: rhodecode/templates/admin/users/user_edit.html:113
 
#: rhodecode/templates/admin/users_groups/users_group_add.html:41
 
#: rhodecode/templates/admin/users_groups/users_group_edit.html:42
 
msgid "Active"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/users/user_edit.html:5
 
msgid "Edit user"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/users/user_edit.html:34
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:33
 
#: rhodecode/templates/admin/users/user_edit_my_account_form.html:10
 
msgid "Change your avatar at"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/users/user_edit.html:35
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:34
 
#: rhodecode/templates/admin/users/user_edit_my_account_form.html:11
 
msgid "Using"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/users/user_edit.html:43
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:43
 
#: rhodecode/templates/admin/users/user_edit_my_account_form.html:20
 
msgid "API key"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/users/user_edit.html:59
 
msgid "LDAP DN"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/users/user_edit.html:68
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:58
 
#: rhodecode/templates/admin/users/user_edit_my_account_form.html:35
 
msgid "New password"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/users/user_edit.html:77
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:67
 
#: rhodecode/templates/admin/users/user_edit_my_account_form.html:44
 
msgid "New password confirmation"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/users/user_edit.html:147
 
#: rhodecode/templates/admin/users_groups/users_group_edit.html:108
 
msgid "Create repositories"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:5
 
#: rhodecode/templates/base/base.html:124
 
msgid "My account"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:9
 
msgid "My Account"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:116
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:32
 
#: rhodecode/templates/journal/journal.html:32
 
msgid "My repos"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:116
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:32
 
msgid "My permissions"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:121
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:37
 
#: rhodecode/templates/journal/journal.html:37
 
msgid "ADD"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:134
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:50
 
#: rhodecode/templates/bookmarks/bookmarks.html:40
 
#: rhodecode/templates/bookmarks/bookmarks_data.html:9
 
#: rhodecode/templates/branches/branches.html:40
 
#: rhodecode/templates/journal/journal.html:51
 
#: rhodecode/templates/tags/tags.html:40 rhodecode/templates/tags/tags_data.html:9
 
msgid "Revision"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:155
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:71
 
#: rhodecode/templates/journal/journal.html:72
 
msgid "private"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:165
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:81
 
#: rhodecode/templates/journal/journal.html:85
 
msgid "No repositories yet"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:167
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:83
 
#: rhodecode/templates/journal/journal.html:87
 
msgid "create one now"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:184
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:285
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:100
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:201
 
msgid "Permission"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/users/users.html:5
 
msgid "Users administration"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/users/users.html:23
 
msgid "ADD NEW USER"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/users/users.html:33
 
msgid "username"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/users/users.html:34
 
#: rhodecode/templates/branches/branches_data.html:6
 
msgid "name"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/users/users.html:35
 
msgid "lastname"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/users/users.html:36
 
msgid "last login"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/users/users.html:37
 
#: rhodecode/templates/admin/users_groups/users_groups.html:34
 
msgid "active"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/users/users.html:39
 
#: rhodecode/templates/base/base.html:223
 
msgid "ldap"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/users/users.html:56
 
#, python-format
 
msgid "Confirm to delete this user: %s"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/users_groups/users_group_add.html:5
 
msgid "Add users group"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/users_groups/users_group_add.html:10
 
@@ -2150,96 +2159,101 @@ msgstr ""
 
#: rhodecode/templates/admin/users_groups/users_group_add.html:12
 
msgid "add new users group"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/users_groups/users_group_edit.html:5
 
msgid "Edit users group"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/users_groups/users_group_edit.html:11
 
msgid "UsersGroups"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/users_groups/users_group_edit.html:50
 
msgid "Members"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/users_groups/users_group_edit.html:58
 
msgid "Choosen group members"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/users_groups/users_group_edit.html:61
 
msgid "Remove all elements"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/users_groups/users_group_edit.html:75
 
msgid "Available members"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/users_groups/users_group_edit.html:79
 
msgid "Add all elements"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/users_groups/users_group_edit.html:126
 
msgid "Group members"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/users_groups/users_groups.html:5
 
msgid "Users groups administration"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/users_groups/users_groups.html:23
 
msgid "ADD NEW USER GROUP"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/users_groups/users_groups.html:32
 
msgid "group name"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/users_groups/users_groups.html:33
 
#: rhodecode/templates/base/root.html:46
 
msgid "members"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/users_groups/users_groups.html:45
 
#, python-format
 
msgid "Confirm to delete this users group: %s"
 
msgstr ""
 

	
 
#: rhodecode/templates/base/base.html:41
 
msgid "Submit a bug"
 
msgstr ""
 

	
 
#: rhodecode/templates/base/base.html:77
 
msgid "Login to your account"
 
msgstr ""
 

	
 
#: rhodecode/templates/base/base.html:100
 
msgid "Forgot password ?"
 
msgstr ""
 

	
 
#: rhodecode/templates/base/base.html:107
 
msgid "Log In"
 
msgstr ""
 

	
 
#: rhodecode/templates/base/base.html:118
 
msgid "Inbox"
 
msgstr ""
 

	
 
#: rhodecode/templates/base/base.html:122 rhodecode/templates/base/base.html:289
 
#: rhodecode/templates/base/base.html:291 rhodecode/templates/base/base.html:293
 
msgid "Home"
 
msgstr ""
 

	
 
#: rhodecode/templates/base/base.html:123 rhodecode/templates/base/base.html:298
 
#: rhodecode/templates/base/base.html:300 rhodecode/templates/base/base.html:302
 
#: rhodecode/templates/journal/journal.html:4
 
#: rhodecode/templates/journal/journal.html:17
 
#: rhodecode/templates/journal/public_journal.html:4
 
msgid "Journal"
 
msgstr ""
 

	
 
#: rhodecode/templates/base/base.html:125
 
msgid "Log Out"
 
msgstr ""
 

	
 
#: rhodecode/templates/base/base.html:144
 
msgid "Switch repository"
 
msgstr ""
 

	
 
#: rhodecode/templates/base/base.html:146
 
msgid "Products"
 
@@ -2293,111 +2307,115 @@ msgstr ""
 

	
 
#: rhodecode/templates/base/base.html:209
 
#: rhodecode/templates/data_table/_dt_elements.html:74
 
#: rhodecode/templates/forks/fork.html:13
 
msgid "fork"
 
msgstr ""
 

	
 
#: rhodecode/templates/base/base.html:210
 
msgid "search"
 
msgstr ""
 

	
 
#: rhodecode/templates/base/base.html:217
 
msgid "journal"
 
msgstr ""
 

	
 
#: rhodecode/templates/base/base.html:219
 
msgid "repositories groups"
 
msgstr ""
 

	
 
#: rhodecode/templates/base/base.html:220
 
msgid "users"
 
msgstr ""
 

	
 
#: rhodecode/templates/base/base.html:221
 
msgid "users groups"
 
msgstr ""
 

	
 
#: rhodecode/templates/base/base.html:222
 
msgid "permissions"
 
msgstr ""
 

	
 
#: rhodecode/templates/base/base.html:235 rhodecode/templates/base/base.html:237
 
#: rhodecode/templates/followers/followers.html:5
 
msgid "Followers"
 
msgstr ""
 

	
 
#: rhodecode/templates/base/base.html:243 rhodecode/templates/base/base.html:245
 
#: rhodecode/templates/forks/forks.html:5
 
msgid "Forks"
 
msgstr ""
 

	
 
#: rhodecode/templates/base/base.html:316 rhodecode/templates/base/base.html:318
 
#: rhodecode/templates/base/base.html:320 rhodecode/templates/search/search.html:4
 
#: rhodecode/templates/search/search.html:24
 
#: rhodecode/templates/search/search.html:46
 
msgid "Search"
 
msgstr ""
 

	
 
#: rhodecode/templates/base/root.html:53
 
#: rhodecode/templates/base/root.html:42
 
msgid "add another comment"
 
msgstr ""
 

	
 
#: rhodecode/templates/base/root.html:54
 
#: rhodecode/templates/base/root.html:43
 
#: rhodecode/templates/journal/journal.html:111
 
#: rhodecode/templates/summary/summary.html:52
 
msgid "Stop following this repository"
 
msgstr ""
 

	
 
#: rhodecode/templates/base/root.html:55
 
#: rhodecode/templates/base/root.html:44
 
#: rhodecode/templates/summary/summary.html:56
 
msgid "Start following this repository"
 
msgstr ""
 

	
 
#: rhodecode/templates/base/root.html:45
 
msgid "Group"
 
msgstr ""
 

	
 
#: rhodecode/templates/bookmarks/bookmarks.html:5
 
msgid "Bookmarks"
 
msgstr ""
 

	
 
#: rhodecode/templates/bookmarks/bookmarks.html:39
 
#: rhodecode/templates/bookmarks/bookmarks_data.html:8
 
#: rhodecode/templates/branches/branches.html:39
 
#: rhodecode/templates/tags/tags.html:39 rhodecode/templates/tags/tags_data.html:8
 
msgid "Author"
 
msgstr ""
 

	
 
#: rhodecode/templates/branches/branches_data.html:7
 
msgid "date"
 
msgstr ""
 

	
 
#: rhodecode/templates/branches/branches_data.html:8
 
#: rhodecode/templates/shortlog/shortlog_data.html:8
 
msgid "author"
 
msgstr ""
 

	
 
#: rhodecode/templates/branches/branches_data.html:9
 
#: rhodecode/templates/shortlog/shortlog_data.html:5
 
msgid "revision"
 
msgstr ""
 

	
 
#: rhodecode/templates/changelog/changelog.html:15
 
#, python-format
 
msgid "showing %d out of %d revision"
 
msgid_plural "showing %d out of %d revisions"
 
msgstr[0] ""
 
msgstr[1] ""
 

	
 
#: rhodecode/templates/changelog/changelog.html:38
 
msgid "Show"
 
msgstr ""
 

	
 
#: rhodecode/templates/changelog/changelog.html:64
 
#: rhodecode/templates/summary/summary.html:352
 
msgid "show more"
 
msgstr ""
 

	
 
#: rhodecode/templates/changelog/changelog.html:68
 
msgid "Affected number of files, click to show more details"
 
msgstr ""
 

	
 
#: rhodecode/templates/changelog/changelog.html:82
 
#: rhodecode/templates/changeset/changeset.html:72
 
msgid "Parent"
 
@@ -2435,158 +2453,158 @@ msgstr ""
 
msgid "Show selected changes __S -> __E"
 
msgstr ""
 

	
 
#: rhodecode/templates/changelog/changelog.html:235
 
msgid "There are no changes yet"
 
msgstr ""
 

	
 
#: rhodecode/templates/changelog/changelog_details.html:2
 
#: rhodecode/templates/changeset/changeset.html:60
 
msgid "removed"
 
msgstr ""
 

	
 
#: rhodecode/templates/changelog/changelog_details.html:3
 
#: rhodecode/templates/changeset/changeset.html:61
 
msgid "changed"
 
msgstr ""
 

	
 
#: rhodecode/templates/changelog/changelog_details.html:4
 
#: rhodecode/templates/changeset/changeset.html:62
 
msgid "added"
 
msgstr ""
 

	
 
#: rhodecode/templates/changelog/changelog_details.html:6
 
#: rhodecode/templates/changelog/changelog_details.html:7
 
#: rhodecode/templates/changelog/changelog_details.html:8
 
#: rhodecode/templates/changeset/changeset.html:64
 
#: rhodecode/templates/changeset/changeset.html:65
 
#: rhodecode/templates/changeset/changeset.html:66
 
#, python-format
 
msgid "affected %s files"
 
msgstr ""
 

	
 
#: rhodecode/templates/changeset/changeset.html:6
 
#: rhodecode/templates/changeset/changeset.html:14
 
msgid "Changeset"
 
msgstr ""
 

	
 
#: rhodecode/templates/changeset/changeset.html:37
 
#: rhodecode/templates/changeset/diff_block.html:20
 
msgid "raw diff"
 
msgstr ""
 

	
 
#: rhodecode/templates/changeset/changeset.html:38
 
#: rhodecode/templates/changeset/diff_block.html:21
 
msgid "download diff"
 
msgstr ""
 

	
 
#: rhodecode/templates/changeset/changeset.html:42
 
#: rhodecode/templates/changeset/changeset_file_comment.html:69
 
#: rhodecode/templates/changeset/changeset_file_comment.html:71
 
#, python-format
 
msgid "%d comment"
 
msgid_plural "%d comments"
 
msgstr[0] ""
 
msgstr[1] ""
 

	
 
#: rhodecode/templates/changeset/changeset.html:42
 
#: rhodecode/templates/changeset/changeset_file_comment.html:69
 
#: rhodecode/templates/changeset/changeset_file_comment.html:71
 
#, python-format
 
msgid "(%d inline)"
 
msgid_plural "(%d inline)"
 
msgstr[0] ""
 
msgstr[1] ""
 

	
 
#: rhodecode/templates/changeset/changeset.html:97
 
#, python-format
 
msgid "%s files affected with %s insertions and %s deletions:"
 
msgstr ""
 

	
 
#: rhodecode/templates/changeset/changeset.html:113
 
msgid "Changeset was too big and was cut off..."
 
msgstr ""
 

	
 
#: rhodecode/templates/changeset/changeset_file_comment.html:35
 
msgid "Submitting..."
 
msgstr ""
 

	
 
#: rhodecode/templates/changeset/changeset_file_comment.html:38
 
msgid "Commenting on line {1}."
 
msgstr ""
 

	
 
#: rhodecode/templates/changeset/changeset_file_comment.html:39
 
#: rhodecode/templates/changeset/changeset_file_comment.html:100
 
#: rhodecode/templates/changeset/changeset_file_comment.html:102
 
#, python-format
 
msgid "Comments parsed using %s syntax with %s support."
 
msgstr ""
 

	
 
#: rhodecode/templates/changeset/changeset_file_comment.html:41
 
#: rhodecode/templates/changeset/changeset_file_comment.html:102
 
#: rhodecode/templates/changeset/changeset_file_comment.html:104
 
msgid "Use @username inside this text to send notification to this RhodeCode user"
 
msgstr ""
 

	
 
#: rhodecode/templates/changeset/changeset_file_comment.html:47
 
#: rhodecode/templates/changeset/changeset_file_comment.html:107
 
#: rhodecode/templates/changeset/changeset_file_comment.html:49
 
#: rhodecode/templates/changeset/changeset_file_comment.html:110
 
msgid "Comment"
 
msgstr ""
 

	
 
#: rhodecode/templates/changeset/changeset_file_comment.html:48
 
#: rhodecode/templates/changeset/changeset_file_comment.html:59
 
#: rhodecode/templates/changeset/changeset_file_comment.html:50
 
#: rhodecode/templates/changeset/changeset_file_comment.html:61
 
msgid "Hide"
 
msgstr ""
 

	
 
#: rhodecode/templates/changeset/changeset_file_comment.html:55
 
#: rhodecode/templates/changeset/changeset_file_comment.html:57
 
msgid "You need to be logged in to comment."
 
msgstr ""
 

	
 
#: rhodecode/templates/changeset/changeset_file_comment.html:55
 
#: rhodecode/templates/changeset/changeset_file_comment.html:57
 
msgid "Login now"
 
msgstr ""
 

	
 
#: rhodecode/templates/changeset/changeset_file_comment.html:97
 
#: rhodecode/templates/changeset/changeset_file_comment.html:99
 
msgid "Leave a comment"
 
msgstr ""
 

	
 
#: rhodecode/templates/changeset/changeset_range.html:29
 
msgid "Compare View"
 
msgstr ""
 

	
 
#: rhodecode/templates/changeset/changeset_range.html:49
 
msgid "Files affected"
 
msgstr ""
 

	
 
#: rhodecode/templates/changeset/diff_block.html:19
 
msgid "diff"
 
msgstr ""
 

	
 
#: rhodecode/templates/changeset/diff_block.html:27
 
msgid "show inline comments"
 
msgstr ""
 

	
 
#: rhodecode/templates/data_table/_dt_elements.html:33
 
#: rhodecode/templates/data_table/_dt_elements.html:35
 
#: rhodecode/templates/data_table/_dt_elements.html:37
 
#: rhodecode/templates/forks/fork.html:5
 
msgid "Fork"
 
msgstr ""
 

	
 
#: rhodecode/templates/data_table/_dt_elements.html:54
 
#: rhodecode/templates/journal/journal.html:117
 
#: rhodecode/templates/summary/summary.html:63
 
msgid "Mercurial repository"
 
msgstr ""
 

	
 
#: rhodecode/templates/data_table/_dt_elements.html:56
 
#: rhodecode/templates/journal/journal.html:119
 
#: rhodecode/templates/summary/summary.html:66
 
msgid "Git repository"
 
msgstr ""
 

	
 
#: rhodecode/templates/data_table/_dt_elements.html:63
 
#: rhodecode/templates/journal/journal.html:125
 
#: rhodecode/templates/summary/summary.html:73
 
msgid "public repository"
 
msgstr ""
 

	
 
#: rhodecode/templates/data_table/_dt_elements.html:74
 
#: rhodecode/templates/summary/summary.html:82
 
#: rhodecode/templates/summary/summary.html:83
 
msgid "Fork of"
rhodecode/i18n/zh_CN/LC_MESSAGES/rhodecode.po
Show inline comments
 
# Chinese (China) translations for RhodeCode.
 
# Copyright (C) 2011 ORGANIZATION
 
# This file is distributed under the same license as the RhodeCode project.
 
# FIRST AUTHOR <EMAIL@ADDRESS>, 2011.
 
# mikespook <mikespook@gmail.com>, 2012.
 
msgid ""
 
msgstr ""
 
"Project-Id-Version: RhodeCode 1.2.0\n"
 
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
 
"POT-Creation-Date: 2012-05-27 17:41+0200\n"
 
"POT-Creation-Date: 2012-06-03 01:06+0200\n"
 
"PO-Revision-Date: 2012-04-05 17:37+0800\n"
 
"Last-Translator: mikespook <mikespook@gmail.com>\n"
 
"Language-Team: mikespook\n"
 
"Plural-Forms: nplurals=1; plural=0\n"
 
"MIME-Version: 1.0\n"
 
"Content-Type: text/plain; charset=utf-8\n"
 
"Content-Transfer-Encoding: 8bit\n"
 
"Generated-By: Babel 0.9.6\n"
 

	
 
#: rhodecode/controllers/changelog.py:96
 
#: rhodecode/controllers/changelog.py:95
 
#, fuzzy
 
msgid "All Branches"
 
msgstr "分支"
 

	
 
#: rhodecode/controllers/changeset.py:79
 
#: rhodecode/controllers/changeset.py:80
 
msgid "show white space"
 
msgstr ""
 

	
 
#: rhodecode/controllers/changeset.py:86 rhodecode/controllers/changeset.py:93
 
#: rhodecode/controllers/changeset.py:87 rhodecode/controllers/changeset.py:94
 
msgid "ignore white space"
 
msgstr ""
 

	
 
#: rhodecode/controllers/changeset.py:153
 
#: rhodecode/controllers/changeset.py:154
 
#, fuzzy, python-format
 
msgid "%s line context"
 
msgstr "文件内容"
 

	
 
#: rhodecode/controllers/changeset.py:320
 
#: rhodecode/controllers/changeset.py:335 rhodecode/lib/diffs.py:62
 
#: rhodecode/controllers/changeset.py:324
 
#: rhodecode/controllers/changeset.py:339 rhodecode/lib/diffs.py:62
 
msgid "binary file"
 
msgstr "二进制文件"
 

	
 
#: rhodecode/controllers/error.py:69
 
msgid "Home page"
 
msgstr "主页"
 

	
 
#: rhodecode/controllers/error.py:98
 
msgid "The request could not be understood by the server due to malformed syntax."
 
msgstr "由于错误的语法,服务器无法对请求进行响应。"
 

	
 
#: rhodecode/controllers/error.py:101
 
msgid "Unauthorized access to resource"
 
msgstr "未授权的资源访问"
 

	
 
#: rhodecode/controllers/error.py:103
 
msgid "You don't have permission to view this page"
 
msgstr "无权访问该页面"
 

	
 
#: rhodecode/controllers/error.py:105
 
msgid "The resource could not be found"
 
msgstr "资源未找到"
 

	
 
#: rhodecode/controllers/error.py:107
 
msgid ""
 
"The server encountered an unexpected condition which prevented it from "
 
"fulfilling the request."
 
msgstr "服务进入非预期的混乱状态,这会阻止它对请求进行响应。"
 

	
 
#: rhodecode/controllers/feed.py:48
 
#, python-format
 
msgid "Changes on %s repository"
 
msgstr "%s 库的修改"
 

	
 
#: rhodecode/controllers/feed.py:49
 
#, python-format
 
msgid "%s %s feed"
 
msgstr "%s %s 订阅"
 

	
 
#: rhodecode/controllers/files.py:86
 
#: rhodecode/templates/admin/repos/repo_add.html:13
 
msgid "add new"
 
msgstr "新增"
 

	
 
#: rhodecode/controllers/files.py:87
 
#, fuzzy, python-format
 
msgid "There are no files yet %s"
 
msgstr "尚无文件"
 
@@ -139,160 +139,160 @@ msgstr "未知包类型"
 
#: rhodecode/controllers/files.py:461
 
#: rhodecode/templates/changeset/changeset_range.html:5
 
#: rhodecode/templates/changeset/changeset_range.html:13
 
#: rhodecode/templates/changeset/changeset_range.html:31
 
msgid "Changesets"
 
msgstr "变更集"
 

	
 
#: rhodecode/controllers/files.py:462 rhodecode/controllers/summary.py:230
 
#: rhodecode/templates/branches/branches.html:5
 
msgid "Branches"
 
msgstr "分支"
 

	
 
#: rhodecode/controllers/files.py:463 rhodecode/controllers/summary.py:231
 
#: rhodecode/templates/tags/tags.html:5
 
msgid "Tags"
 
msgstr "标签"
 

	
 
#: rhodecode/controllers/forks.py:69 rhodecode/controllers/admin/repos.py:86
 
#, python-format
 
msgid ""
 
"%s repository is not mapped to db perhaps it was created or renamed from "
 
"the filesystem please run the application again in order to rescan "
 
"repositories"
 
msgstr ""
 

	
 
#: rhodecode/controllers/forks.py:128 rhodecode/controllers/settings.py:69
 
#, python-format
 
msgid ""
 
"%s repository is not mapped to db perhaps it was created or renamed from "
 
"the file system please run the application again in order to rescan "
 
"repositories"
 
msgstr ""
 

	
 
#: rhodecode/controllers/forks.py:163
 
#, python-format
 
msgid "forked %s repository as %s"
 
msgstr "版本库 %s 被分支到 %s"
 

	
 
#: rhodecode/controllers/forks.py:177
 
#, python-format
 
msgid "An error occurred during repository forking %s"
 
msgstr ""
 

	
 
#: rhodecode/controllers/journal.py:53
 
#, python-format
 
msgid "%s public journal %s feed"
 
msgstr "公共日志 %s %s 订阅"
 

	
 
#: rhodecode/controllers/journal.py:190 rhodecode/controllers/journal.py:224
 
#: rhodecode/controllers/journal.py:190 rhodecode/controllers/journal.py:223
 
#: rhodecode/templates/admin/repos/repo_edit.html:177
 
#: rhodecode/templates/base/base.html:307
 
#: rhodecode/templates/base/base.html:309
 
#: rhodecode/templates/base/base.html:311
 
msgid "Public journal"
 
msgstr "公共日志"
 

	
 
#: rhodecode/controllers/login.py:116
 
msgid "You have successfully registered into rhodecode"
 
msgstr "成功注册到 rhodecode"
 

	
 
#: rhodecode/controllers/login.py:137
 
msgid "Your password reset link was sent"
 
msgstr "密码重置链接已经发送"
 

	
 
#: rhodecode/controllers/login.py:157
 
msgid ""
 
"Your password reset was successful, new password has been sent to your "
 
"email"
 
msgstr "密码已经成功重置,新密码已经发送到你的邮箱"
 

	
 
#: rhodecode/controllers/search.py:114
 
msgid "Invalid search query. Try quoting it."
 
msgstr "错误的搜索。请尝试用引号包含它。"
 

	
 
#: rhodecode/controllers/search.py:119
 
msgid "There is no index to search in. Please run whoosh indexer"
 
msgstr "没有索引用于搜索。请运行 whoosh 索引器"
 

	
 
#: rhodecode/controllers/search.py:123
 
msgid "An error occurred during this search operation"
 
msgstr "在搜索操作中发生异常"
 

	
 
#: rhodecode/controllers/settings.py:103
 
#: rhodecode/controllers/admin/repos.py:211
 
#: rhodecode/controllers/admin/repos.py:213
 
#, python-format
 
msgid "Repository %s updated successfully"
 
msgstr "版本库 %s 成功更新"
 

	
 
#: rhodecode/controllers/settings.py:121
 
#: rhodecode/controllers/admin/repos.py:229
 
#: rhodecode/controllers/admin/repos.py:231
 
#, python-format
 
msgid "error occurred during update of repository %s"
 
msgstr ""
 

	
 
#: rhodecode/controllers/settings.py:139
 
#: rhodecode/controllers/admin/repos.py:247
 
#: rhodecode/controllers/admin/repos.py:249
 
#, python-format
 
msgid ""
 
"%s repository is not mapped to db perhaps it was moved or renamed  from "
 
"the filesystem please run the application again in order to rescan "
 
"repositories"
 
msgstr ""
 

	
 
#: rhodecode/controllers/settings.py:151
 
#: rhodecode/controllers/admin/repos.py:259
 
#: rhodecode/controllers/admin/repos.py:261
 
#, python-format
 
msgid "deleted repository %s"
 
msgstr "已经删除版本库 %s"
 

	
 
#: rhodecode/controllers/settings.py:155
 
#: rhodecode/controllers/admin/repos.py:269
 
#: rhodecode/controllers/admin/repos.py:275
 
#: rhodecode/controllers/admin/repos.py:271
 
#: rhodecode/controllers/admin/repos.py:277
 
#, python-format
 
msgid "An error occurred during deletion of %s"
 
msgstr ""
 

	
 
#: rhodecode/controllers/summary.py:138
 
msgid "No data loaded yet"
 
msgstr ""
 

	
 
#: rhodecode/controllers/summary.py:142
 
#: rhodecode/templates/summary/summary.html:139
 
msgid "Statistics are disabled for this repository"
 
msgstr "该版本库统计功能已经禁用"
 

	
 
#: rhodecode/controllers/admin/ldap_settings.py:49
 
msgid "BASE"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/ldap_settings.py:50
 
msgid "ONELEVEL"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/ldap_settings.py:51
 
msgid "SUBTREE"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/ldap_settings.py:55
 
msgid "NEVER"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/ldap_settings.py:56
 
msgid "ALLOW"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/ldap_settings.py:57
 
msgid "TRY"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/ldap_settings.py:58
 
msgid "DEMAND"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/ldap_settings.py:59
 
msgid "HARD"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/ldap_settings.py:63
 
msgid "No encryption"
 
msgstr "未加密"
 
@@ -351,432 +351,460 @@ msgstr "写"
 
#: rhodecode/templates/base/base.html:326
 
#: rhodecode/templates/base/base.html:328
 
#: rhodecode/templates/base/base.html:330
 
msgid "Admin"
 
msgstr "管理"
 

	
 
#: rhodecode/controllers/admin/permissions.py:65
 
msgid "disabled"
 
msgstr "禁用"
 

	
 
#: rhodecode/controllers/admin/permissions.py:67
 
msgid "allowed with manual account activation"
 
msgstr "允许手工启用帐号"
 

	
 
#: rhodecode/controllers/admin/permissions.py:69
 
msgid "allowed with automatic account activation"
 
msgstr "允许自动启用帐号"
 

	
 
#: rhodecode/controllers/admin/permissions.py:71
 
msgid "Disabled"
 
msgstr "停用"
 

	
 
#: rhodecode/controllers/admin/permissions.py:72
 
msgid "Enabled"
 
msgstr "启用"
 

	
 
#: rhodecode/controllers/admin/permissions.py:106
 
msgid "Default permissions updated successfully"
 
msgstr "成功更新默认权限"
 

	
 
#: rhodecode/controllers/admin/permissions.py:123
 
msgid "error occurred during update of permissions"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/repos.py:116
 
msgid "--REMOVE FORK--"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/repos.py:144
 
#, python-format
 
msgid "created repository %s from %s"
 
msgstr "新版本库 %s 基于 %s 建立。"
 

	
 
#: rhodecode/controllers/admin/repos.py:148
 
#, python-format
 
msgid "created repository %s"
 
msgstr "建立版本库 %s"
 

	
 
#: rhodecode/controllers/admin/repos.py:177
 
#: rhodecode/controllers/admin/repos.py:179
 
#, python-format
 
msgid "error occurred during creation of repository %s"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/repos.py:264
 
#: rhodecode/controllers/admin/repos.py:266
 
#, python-format
 
msgid "Cannot delete %s it still contains attached forks"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/repos.py:293
 
#: rhodecode/controllers/admin/repos.py:295
 
msgid "An error occurred during deletion of repository user"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/repos.py:312
 
#: rhodecode/controllers/admin/repos.py:314
 
msgid "An error occurred during deletion of repository users groups"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/repos.py:329
 
#: rhodecode/controllers/admin/repos.py:331
 
msgid "An error occurred during deletion of repository stats"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/repos.py:345
 
#: rhodecode/controllers/admin/repos.py:347
 
msgid "An error occurred during cache invalidation"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/repos.py:365
 
#: rhodecode/controllers/admin/repos.py:367
 
msgid "Updated repository visibility in public journal"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/repos.py:369
 
#: rhodecode/controllers/admin/repos.py:371
 
msgid "An error occurred during setting this repository in public journal"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/repos.py:374 rhodecode/model/forms.py:54
 
#: rhodecode/controllers/admin/repos.py:376 rhodecode/model/forms.py:54
 
msgid "Token mismatch"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/repos.py:387
 
msgid "Pulled from remote location"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/repos.py:389
 
msgid "An error occurred during pull from remote location"
 
msgid "Pulled from remote location"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/repos.py:405
 
msgid "Nothing"
 
#: rhodecode/controllers/admin/repos.py:391
 
msgid "An error occurred during pull from remote location"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/repos.py:407
 
msgid "Nothing"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/repos.py:409
 
#, fuzzy, python-format
 
msgid "Marked repo %s as fork of %s"
 
msgstr "新版本库 %s 基于 %s 建立。"
 

	
 
#: rhodecode/controllers/admin/repos.py:411
 
#: rhodecode/controllers/admin/repos.py:413
 
#, fuzzy
 
msgid "An error occurred during this operation"
 
msgstr "在搜索操作中发生异常"
 

	
 
#: rhodecode/controllers/admin/repos_groups.py:119
 
#, python-format
 
msgid "created repos group %s"
 
msgstr "建立版本库组 %s"
 

	
 
#: rhodecode/controllers/admin/repos_groups.py:132
 
#, python-format
 
msgid "error occurred during creation of repos group %s"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/repos_groups.py:166
 
#, python-format
 
msgid "updated repos group %s"
 
msgstr "更新版本库组 %s"
 

	
 
#: rhodecode/controllers/admin/repos_groups.py:179
 
#, python-format
 
msgid "error occurred during update of repos group %s"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/repos_groups.py:198
 
#, python-format
 
msgid "This group contains %s repositores and cannot be deleted"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/repos_groups.py:205
 
#, python-format
 
msgid "removed repos group %s"
 
msgstr "移除版本库组 %s"
 

	
 
#: rhodecode/controllers/admin/repos_groups.py:210
 
msgid "Cannot delete this group it still contains subgroups"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/repos_groups.py:215
 
#: rhodecode/controllers/admin/repos_groups.py:220
 
#, python-format
 
msgid "error occurred during deletion of repos group %s"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/repos_groups.py:240
 
#, fuzzy
 
msgid "An error occurred during deletion of group user"
 
msgstr "在搜索操作中发生异常"
 

	
 
#: rhodecode/controllers/admin/repos_groups.py:260
 
msgid "An error occurred during deletion of group users groups"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/settings.py:120
 
#, python-format
 
msgid "Repositories successfully rescanned added: %s,removed: %s"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/settings.py:129
 
msgid "Whoosh reindex task scheduled"
 
msgstr "Whoosh 重新索引任务调度"
 

	
 
#: rhodecode/controllers/admin/settings.py:154
 
msgid "Updated application settings"
 
msgstr "更新应用设置"
 

	
 
#: rhodecode/controllers/admin/settings.py:159
 
#: rhodecode/controllers/admin/settings.py:226
 
msgid "error occurred during updating application settings"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/settings.py:221
 
msgid "Updated mercurial settings"
 
msgstr "更新 mercurial 设置"
 

	
 
#: rhodecode/controllers/admin/settings.py:246
 
msgid "Added new hook"
 
msgstr "新增钩子"
 

	
 
#: rhodecode/controllers/admin/settings.py:258
 
msgid "Updated hooks"
 
msgstr "更新钩子"
 

	
 
#: rhodecode/controllers/admin/settings.py:262
 
msgid "error occurred during hook creation"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/settings.py:281
 
msgid "Email task created"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/settings.py:336
 
msgid "You can't edit this user since it's crucial for entire application"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/settings.py:365
 
#: rhodecode/controllers/admin/settings.py:367
 
msgid "Your account was updated successfully"
 
msgstr "你的帐号已经更新完成"
 

	
 
#: rhodecode/controllers/admin/settings.py:384
 
#: rhodecode/controllers/admin/users.py:132
 
#: rhodecode/controllers/admin/settings.py:387
 
#: rhodecode/controllers/admin/users.py:138
 
#, python-format
 
msgid "error occurred during update of user %s"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/users.py:79
 
#: rhodecode/controllers/admin/users.py:83
 
#, python-format
 
msgid "created user %s"
 
msgstr "创建用户 %s"
 

	
 
#: rhodecode/controllers/admin/users.py:92
 
#: rhodecode/controllers/admin/users.py:95
 
#, python-format
 
msgid "error occurred during creation of user %s"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/users.py:118
 
#: rhodecode/controllers/admin/users.py:124
 
msgid "User updated successfully"
 
msgstr "用户更新成功"
 

	
 
#: rhodecode/controllers/admin/users.py:149
 
#: rhodecode/controllers/admin/users.py:155
 
msgid "successfully deleted user"
 
msgstr "用户删除成功"
 

	
 
#: rhodecode/controllers/admin/users.py:154
 
#: rhodecode/controllers/admin/users.py:160
 
msgid "An error occurred during deletion of user"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/users.py:169
 
#: rhodecode/controllers/admin/users.py:175
 
msgid "You can't edit this user"
 
msgstr "无法编辑该用户"
 

	
 
#: rhodecode/controllers/admin/users.py:199
 
#: rhodecode/controllers/admin/users_groups.py:215
 
#: rhodecode/controllers/admin/users.py:205
 
#: rhodecode/controllers/admin/users_groups.py:219
 
msgid "Granted 'repository create' permission to user"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/users.py:208
 
#: rhodecode/controllers/admin/users_groups.py:225
 
#: rhodecode/controllers/admin/users.py:214
 
#: rhodecode/controllers/admin/users_groups.py:229
 
msgid "Revoked 'repository create' permission to user"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/users_groups.py:79
 
#: rhodecode/controllers/admin/users_groups.py:84
 
#, python-format
 
msgid "created users group %s"
 
msgstr "建立用户组 %s"
 

	
 
#: rhodecode/controllers/admin/users_groups.py:92
 
#: rhodecode/controllers/admin/users_groups.py:95
 
#, python-format
 
msgid "error occurred during creation of users group %s"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/users_groups.py:128
 
#: rhodecode/controllers/admin/users_groups.py:135
 
#, python-format
 
msgid "updated users group %s"
 
msgstr "更新用户组 %s"
 

	
 
#: rhodecode/controllers/admin/users_groups.py:148
 
#: rhodecode/controllers/admin/users_groups.py:152
 
#, python-format
 
msgid "error occurred during update of users group %s"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/users_groups.py:165
 
#: rhodecode/controllers/admin/users_groups.py:169
 
msgid "successfully deleted users group"
 
msgstr "删除用户组成功"
 

	
 
#: rhodecode/controllers/admin/users_groups.py:170
 
#: rhodecode/controllers/admin/users_groups.py:174
 
msgid "An error occurred during deletion of users group"
 
msgstr ""
 

	
 
#: rhodecode/lib/auth.py:497
 
msgid "You need to be a registered user to perform this action"
 
msgstr "必须是注册用户才能进行此操作"
 

	
 
#: rhodecode/lib/auth.py:538
 
msgid "You need to be a signed in to view this page"
 
msgstr "必须登录才能访问该页面"
 

	
 
#: rhodecode/lib/diffs.py:78
 
msgid "Changeset was too big and was cut off, use diff menu to display this diff"
 
msgstr "变更集因过大而被截断,可查看原始变更集作为替代"
 

	
 
#: rhodecode/lib/diffs.py:88
 
#, fuzzy
 
msgid "No changes detected"
 
msgstr "尚无修订"
 

	
 
#: rhodecode/lib/helpers.py:415
 
msgid "True"
 
msgstr ""
 

	
 
#: rhodecode/lib/helpers.py:419
 
msgid "False"
 
msgstr ""
 

	
 
#: rhodecode/lib/helpers.py:463
 
#, fuzzy
 
msgid "Changeset not found"
 
msgstr "修改"
 

	
 
#: rhodecode/lib/helpers.py:486
 
#, python-format
 
msgid "Show all combined changesets %s->%s"
 
msgstr ""
 

	
 
#: rhodecode/lib/helpers.py:492
 
msgid "compare view"
 
msgstr ""
 

	
 
#: rhodecode/lib/helpers.py:512
 
msgid "and"
 
msgstr ""
 

	
 
#: rhodecode/lib/helpers.py:513
 
#, python-format
 
msgid "%s more"
 
msgstr ""
 

	
 
#: rhodecode/lib/helpers.py:514 rhodecode/templates/changelog/changelog.html:40
 
msgid "revisions"
 
msgstr "修订"
 

	
 
#: rhodecode/lib/helpers.py:537
 
msgid "fork name "
 
msgstr "分支名称"
 

	
 
#: rhodecode/lib/helpers.py:540
 
#: rhodecode/lib/helpers.py:550
 
msgid "[deleted] repository"
 
msgstr ""
 

	
 
#: rhodecode/lib/helpers.py:541 rhodecode/lib/helpers.py:546
 
#: rhodecode/lib/helpers.py:552 rhodecode/lib/helpers.py:562
 
msgid "[created] repository"
 
msgstr ""
 

	
 
#: rhodecode/lib/helpers.py:542
 
#: rhodecode/lib/helpers.py:554
 
#, fuzzy
 
msgid "[created] repository as fork"
 
msgstr "建立版本库 %s"
 

	
 
#: rhodecode/lib/helpers.py:543 rhodecode/lib/helpers.py:547
 
#: rhodecode/lib/helpers.py:556 rhodecode/lib/helpers.py:564
 
msgid "[forked] repository"
 
msgstr ""
 

	
 
#: rhodecode/lib/helpers.py:544 rhodecode/lib/helpers.py:548
 
#: rhodecode/lib/helpers.py:558 rhodecode/lib/helpers.py:566
 
msgid "[updated] repository"
 
msgstr ""
 

	
 
#: rhodecode/lib/helpers.py:545
 
#: rhodecode/lib/helpers.py:560
 
msgid "[delete] repository"
 
msgstr ""
 

	
 
#: rhodecode/lib/helpers.py:549
 
#: rhodecode/lib/helpers.py:568
 
#, fuzzy, python-format
 
#| msgid "created user %s"
 
msgid "[created] user"
 
msgstr "创建用户 %s"
 

	
 
#: rhodecode/lib/helpers.py:570
 
#, fuzzy, python-format
 
#| msgid "updated users group %s"
 
msgid "[updated] user"
 
msgstr "更新用户组 %s"
 

	
 
#: rhodecode/lib/helpers.py:572
 
#, fuzzy, python-format
 
#| msgid "created users group %s"
 
msgid "[created] users group"
 
msgstr "建立用户组 %s"
 

	
 
#: rhodecode/lib/helpers.py:574
 
#, fuzzy, python-format
 
#| msgid "updated users group %s"
 
msgid "[updated] users group"
 
msgstr "更新用户组 %s"
 

	
 
#: rhodecode/lib/helpers.py:576
 
msgid "[commented] on revision in repository"
 
msgstr ""
 

	
 
#: rhodecode/lib/helpers.py:578
 
msgid "[pushed] into"
 
msgstr ""
 

	
 
#: rhodecode/lib/helpers.py:550
 
msgid "[committed via RhodeCode] into"
 
#: rhodecode/lib/helpers.py:580
 
msgid "[committed via RhodeCode] into repository"
 
msgstr ""
 

	
 
#: rhodecode/lib/helpers.py:551
 
msgid "[pulled from remote] into"
 
#: rhodecode/lib/helpers.py:582
 
msgid "[pulled from remote] into repository"
 
msgstr ""
 

	
 
#: rhodecode/lib/helpers.py:552
 
#: rhodecode/lib/helpers.py:584
 
msgid "[pulled] from"
 
msgstr ""
 

	
 
#: rhodecode/lib/helpers.py:553
 
#: rhodecode/lib/helpers.py:586
 
msgid "[started following] repository"
 
msgstr ""
 

	
 
#: rhodecode/lib/helpers.py:554
 
#: rhodecode/lib/helpers.py:588
 
msgid "[stopped following] repository"
 
msgstr ""
 

	
 
#: rhodecode/lib/helpers.py:732
 
#: rhodecode/lib/helpers.py:752
 
#, python-format
 
msgid " and %s more"
 
msgstr ""
 

	
 
#: rhodecode/lib/helpers.py:736
 
#: rhodecode/lib/helpers.py:756
 
msgid "No Files"
 
msgstr "没有文件"
 

	
 
#: rhodecode/lib/utils2.py:335
 
#, fuzzy, python-format
 
msgid "%d year"
 
msgid_plural "%d years"
 
msgstr[0] "年"
 

	
 
#: rhodecode/lib/utils2.py:336
 
#, fuzzy, python-format
 
msgid "%d month"
 
msgid_plural "%d months"
 
msgstr[0] "月"
 

	
 
#: rhodecode/lib/utils2.py:337
 
#, fuzzy, python-format
 
msgid "%d day"
 
msgid_plural "%d days"
 
msgstr[0] "日"
 

	
 
#: rhodecode/lib/utils2.py:338
 
#, fuzzy, python-format
 
msgid "%d hour"
 
msgid_plural "%d hours"
 
msgstr[0] "时"
 

	
 
#: rhodecode/lib/utils2.py:339
 
#, fuzzy, python-format
 
msgid "%d minute"
 
msgid_plural "%d minutes"
 
msgstr[0] "分"
 

	
 
#: rhodecode/lib/utils2.py:340
 
#, fuzzy, python-format
 
msgid "%d second"
 
msgid_plural "%d seconds"
 
msgstr[0] "秒"
 

	
 
#: rhodecode/lib/utils2.py:355
 
#, fuzzy, python-format
 
msgid "%s ago"
 
msgstr "之前"
 

	
 
#: rhodecode/lib/utils2.py:357
 
#, python-format
 
msgid "%s and %s ago"
 
msgstr ""
 
@@ -934,536 +962,536 @@ msgstr "请输入密码"
 
#: rhodecode/model/forms.py:559
 
#, python-format
 
msgid "Enter %(min)i characters or more"
 
msgstr ""
 

	
 
#: rhodecode/model/notification.py:175
 
msgid "commented on commit"
 
msgstr ""
 

	
 
#: rhodecode/model/notification.py:176
 
#, fuzzy
 
msgid "sent message"
 
msgstr "提交信息"
 

	
 
#: rhodecode/model/notification.py:177
 
msgid "mentioned you"
 
msgstr ""
 

	
 
#: rhodecode/model/notification.py:178
 
#, fuzzy
 
msgid "registered in RhodeCode"
 
msgstr "成功注册到 rhodecode"
 

	
 
#: rhodecode/model/user.py:235
 
#, fuzzy
 
msgid "new user registration"
 
msgstr "[RhodeCode] 新用户注册"
 

	
 
#: rhodecode/model/user.py:259 rhodecode/model/user.py:279
 
msgid "You can't Edit this user since it's crucial for entire application"
 
msgstr "由于是系统帐号,无法编辑该用户"
 

	
 
#: rhodecode/model/user.py:300
 
msgid "You can't remove this user since it's crucial for entire application"
 
msgstr "由于是系统帐号,无法删除该用户"
 

	
 
#: rhodecode/model/user.py:306
 
#, fuzzy, python-format
 
msgid ""
 
"user \"%s\" still owns %s repositories and cannot be removed. Switch "
 
"owners or remove those repositories. %s"
 
msgstr "由于该用户拥有版本库 %s 因而无法删除,请变更版本库所有者或删除版本库"
 

	
 
#: rhodecode/templates/index.html:3
 
msgid "Dashboard"
 
msgstr ""
 

	
 
#: rhodecode/templates/index_base.html:6
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:115
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:31
 
#: rhodecode/templates/bookmarks/bookmarks.html:10
 
#: rhodecode/templates/branches/branches.html:9
 
#: rhodecode/templates/journal/journal.html:31
 
#: rhodecode/templates/tags/tags.html:10
 
msgid "quick filter..."
 
msgstr "快速过滤..."
 

	
 
#: rhodecode/templates/index_base.html:6 rhodecode/templates/base/base.html:218
 
msgid "repositories"
 
msgstr "个版本库"
 

	
 
#: rhodecode/templates/index_base.html:13
 
#: rhodecode/templates/index_base.html:15
 
#: rhodecode/templates/admin/repos/repos.html:22
 
msgid "ADD REPOSITORY"
 
msgstr "新增版本库"
 

	
 
#: rhodecode/templates/index_base.html:29
 
#: rhodecode/templates/admin/repos_groups/repos_groups_add.html:32
 
#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:32
 
#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:33
 
#: rhodecode/templates/admin/users_groups/users_group_add.html:32
 
#: rhodecode/templates/admin/users_groups/users_group_edit.html:33
 
msgid "Group name"
 
msgstr "组名"
 

	
 
#: rhodecode/templates/index_base.html:30
 
#: rhodecode/templates/index_base.html:67
 
#: rhodecode/templates/index_base.html:132
 
#: rhodecode/templates/index_base.html:158
 
#: rhodecode/templates/admin/repos/repo_add_base.html:47
 
#: rhodecode/templates/admin/repos/repo_edit.html:66
 
#: rhodecode/templates/admin/repos/repos.html:37
 
#: rhodecode/templates/admin/repos/repos.html:84
 
#: rhodecode/templates/admin/repos_groups/repos_groups_add.html:41
 
#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:41
 
#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:34
 
#: rhodecode/templates/forks/fork.html:49
 
#: rhodecode/templates/settings/repo_settings.html:57
 
#: rhodecode/templates/summary/summary.html:100
 
msgid "Description"
 
msgstr "描述"
 

	
 
#: rhodecode/templates/index_base.html:40
 
#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:46
 
msgid "Repositories group"
 
msgstr "版本库组"
 

	
 
#: rhodecode/templates/index_base.html:66
 
#: rhodecode/templates/index_base.html:156
 
#: rhodecode/templates/admin/repos/repo_add_base.html:9
 
#: rhodecode/templates/admin/repos/repo_edit.html:32
 
#: rhodecode/templates/admin/repos/repos.html:36
 
#: rhodecode/templates/admin/repos/repos.html:82
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:133
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:183
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:249
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:284
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:49
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:99
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:165
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:200
 
#: rhodecode/templates/bookmarks/bookmarks.html:36
 
#: rhodecode/templates/bookmarks/bookmarks_data.html:6
 
#: rhodecode/templates/branches/branches.html:36
 
#: rhodecode/templates/files/files_browser.html:47
 
#: rhodecode/templates/journal/journal.html:50
 
#: rhodecode/templates/journal/journal.html:98
 
#: rhodecode/templates/journal/journal.html:177
 
#: rhodecode/templates/settings/repo_settings.html:31
 
#: rhodecode/templates/summary/summary.html:38
 
#: rhodecode/templates/summary/summary.html:114
 
#: rhodecode/templates/tags/tags.html:36
 
#: rhodecode/templates/tags/tags_data.html:6
 
msgid "Name"
 
msgstr "名称"
 

	
 
#: rhodecode/templates/index_base.html:68
 
#: rhodecode/templates/admin/repos/repos.html:38
 
msgid "Last change"
 
msgstr "最后修改"
 

	
 
#: rhodecode/templates/index_base.html:69
 
#: rhodecode/templates/index_base.html:161
 
#: rhodecode/templates/admin/repos/repos.html:39
 
#: rhodecode/templates/admin/repos/repos.html:87
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:251
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:167
 
#: rhodecode/templates/journal/journal.html:179
 
msgid "Tip"
 
msgstr ""
 

	
 
#: rhodecode/templates/index_base.html:70
 
#: rhodecode/templates/index_base.html:163
 
#: rhodecode/templates/admin/repos/repo_edit.html:103
 
#: rhodecode/templates/admin/repos/repos.html:89
 
msgid "Owner"
 
msgstr "所有者"
 

	
 
#: rhodecode/templates/index_base.html:71
 
#: rhodecode/templates/journal/public_journal.html:20
 
#: rhodecode/templates/summary/summary.html:43
 
#: rhodecode/templates/summary/summary.html:46
 
msgid "RSS"
 
msgstr ""
 

	
 
#: rhodecode/templates/index_base.html:72
 
#: rhodecode/templates/journal/public_journal.html:23
 
msgid "Atom"
 
msgstr ""
 

	
 
#: rhodecode/templates/index_base.html:102
 
#: rhodecode/templates/index_base.html:104
 
#, python-format
 
msgid "Subscribe to %s rss feed"
 
msgstr "订阅 rss %s"
 

	
 
#: rhodecode/templates/index_base.html:109
 
#: rhodecode/templates/index_base.html:111
 
#, python-format
 
msgid "Subscribe to %s atom feed"
 
msgstr "订阅 atom %s"
 

	
 
#: rhodecode/templates/index_base.html:130
 
#, fuzzy
 
msgid "Group Name"
 
msgstr "组名"
 

	
 
#: rhodecode/templates/index_base.html:148
 
#: rhodecode/templates/index_base.html:188
 
#: rhodecode/templates/admin/repos/repos.html:112
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:270
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:186
 
#: rhodecode/templates/bookmarks/bookmarks.html:60
 
#: rhodecode/templates/branches/branches.html:60
 
#: rhodecode/templates/journal/journal.html:202
 
#: rhodecode/templates/tags/tags.html:60
 
msgid "Click to sort ascending"
 
msgstr ""
 

	
 
#: rhodecode/templates/index_base.html:149
 
#: rhodecode/templates/index_base.html:189
 
#: rhodecode/templates/admin/repos/repos.html:113
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:271
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:187
 
#: rhodecode/templates/bookmarks/bookmarks.html:61
 
#: rhodecode/templates/branches/branches.html:61
 
#: rhodecode/templates/journal/journal.html:203
 
#: rhodecode/templates/tags/tags.html:61
 
msgid "Click to sort descending"
 
msgstr ""
 

	
 
#: rhodecode/templates/index_base.html:159
 
#: rhodecode/templates/admin/repos/repos.html:85
 
#, fuzzy
 
msgid "Last Change"
 
msgstr "最后修改"
 

	
 
#: rhodecode/templates/index_base.html:190
 
#: rhodecode/templates/admin/repos/repos.html:114
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:272
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:188
 
#: rhodecode/templates/bookmarks/bookmarks.html:62
 
#: rhodecode/templates/branches/branches.html:62
 
#: rhodecode/templates/journal/journal.html:204
 
#: rhodecode/templates/tags/tags.html:62
 
msgid "No records found."
 
msgstr ""
 

	
 
#: rhodecode/templates/index_base.html:191
 
#: rhodecode/templates/admin/repos/repos.html:115
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:273
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:189
 
#: rhodecode/templates/bookmarks/bookmarks.html:63
 
#: rhodecode/templates/branches/branches.html:63
 
#: rhodecode/templates/journal/journal.html:205
 
#: rhodecode/templates/tags/tags.html:63
 
msgid "Data error."
 
msgstr ""
 

	
 
#: rhodecode/templates/index_base.html:192
 
#: rhodecode/templates/admin/repos/repos.html:116
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:274
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:190
 
#: rhodecode/templates/bookmarks/bookmarks.html:64
 
#: rhodecode/templates/branches/branches.html:64
 
#: rhodecode/templates/journal/journal.html:206
 
#: rhodecode/templates/tags/tags.html:64
 
#, fuzzy
 
msgid "Loading..."
 
msgstr "加载文件列表..."
 

	
 
#: rhodecode/templates/login.html:5 rhodecode/templates/login.html:54
 
msgid "Sign In"
 
msgstr "登录"
 

	
 
#: rhodecode/templates/login.html:21
 
msgid "Sign In to"
 
msgstr "登录到"
 

	
 
#: rhodecode/templates/login.html:31 rhodecode/templates/register.html:20
 
#: rhodecode/templates/admin/admin_log.html:5
 
#: rhodecode/templates/admin/users/user_add.html:32
 
#: rhodecode/templates/admin/users/user_edit.html:50
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:49
 
#: rhodecode/templates/admin/users/user_edit_my_account_form.html:26
 
#: rhodecode/templates/base/base.html:83
 
#: rhodecode/templates/summary/summary.html:113
 
msgid "Username"
 
msgstr "帐号"
 

	
 
#: rhodecode/templates/login.html:40 rhodecode/templates/register.html:29
 
#: rhodecode/templates/admin/ldap/ldap.html:46
 
#: rhodecode/templates/admin/users/user_add.html:41
 
#: rhodecode/templates/base/base.html:92
 
msgid "Password"
 
msgstr "密码"
 

	
 
#: rhodecode/templates/login.html:50
 
#, fuzzy
 
msgid "Remember me"
 
msgstr "成员"
 

	
 
#: rhodecode/templates/login.html:60
 
msgid "Forgot your password ?"
 
msgstr "忘记了密码?"
 

	
 
#: rhodecode/templates/login.html:63 rhodecode/templates/base/base.html:103
 
msgid "Don't have an account ?"
 
msgstr "还没有帐号?"
 

	
 
#: rhodecode/templates/password_reset.html:5
 
msgid "Reset your password"
 
msgstr "重置密码"
 

	
 
#: rhodecode/templates/password_reset.html:11
 
msgid "Reset your password to"
 
msgstr "重置密码"
 

	
 
#: rhodecode/templates/password_reset.html:21
 
msgid "Email address"
 
msgstr "邮件地址"
 

	
 
#: rhodecode/templates/password_reset.html:30
 
msgid "Reset my password"
 
msgstr "重置密码"
 

	
 
#: rhodecode/templates/password_reset.html:31
 
msgid "Password reset link will be send to matching email address"
 
msgstr "密码重置地址已经发送到邮件"
 

	
 
#: rhodecode/templates/register.html:5 rhodecode/templates/register.html:74
 
msgid "Sign Up"
 
msgstr "注册"
 

	
 
#: rhodecode/templates/register.html:11
 
msgid "Sign Up to"
 
msgstr "注册"
 

	
 
#: rhodecode/templates/register.html:38
 
msgid "Re-enter password"
 
msgstr "确认密码"
 

	
 
#: rhodecode/templates/register.html:47
 
#: rhodecode/templates/admin/users/user_add.html:59
 
#: rhodecode/templates/admin/users/user_edit.html:86
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:76
 
#: rhodecode/templates/admin/users/user_edit_my_account_form.html:53
 
msgid "First Name"
 
msgstr "名"
 

	
 
#: rhodecode/templates/register.html:56
 
#: rhodecode/templates/admin/users/user_add.html:68
 
#: rhodecode/templates/admin/users/user_edit.html:95
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:85
 
#: rhodecode/templates/admin/users/user_edit_my_account_form.html:62
 
msgid "Last Name"
 
msgstr "姓"
 

	
 
#: rhodecode/templates/register.html:65
 
#: rhodecode/templates/admin/users/user_add.html:77
 
#: rhodecode/templates/admin/users/user_edit.html:104
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:94
 
#: rhodecode/templates/admin/users/user_edit_my_account_form.html:71
 
#: rhodecode/templates/summary/summary.html:115
 
msgid "Email"
 
msgstr "电子邮件"
 

	
 
#: rhodecode/templates/register.html:76
 
msgid "Your account will be activated right after registration"
 
msgstr "注册后,帐号将启用"
 

	
 
#: rhodecode/templates/register.html:78
 
msgid "Your account must wait for activation by administrator"
 
msgstr "管理员审核后,你注册的帐号将被启用"
 

	
 
#: rhodecode/templates/repo_switcher_list.html:11
 
#: rhodecode/templates/admin/repos/repo_add_base.html:56
 
#: rhodecode/templates/admin/repos/repo_edit.html:76
 
#: rhodecode/templates/settings/repo_settings.html:67
 
msgid "Private repository"
 
msgstr "私有版本库"
 

	
 
#: rhodecode/templates/repo_switcher_list.html:16
 
msgid "Public repository"
 
msgstr "公共版本库"
 

	
 
#: rhodecode/templates/switch_to_list.html:3
 
#: rhodecode/templates/branches/branches.html:14
 
msgid "branches"
 
msgstr "分支"
 

	
 
#: rhodecode/templates/switch_to_list.html:10
 
#: rhodecode/templates/branches/branches_data.html:51
 
msgid "There are no branches yet"
 
msgstr "没有任何分支"
 

	
 
#: rhodecode/templates/switch_to_list.html:15
 
#: rhodecode/templates/shortlog/shortlog_data.html:10
 
#: rhodecode/templates/tags/tags.html:15
 
msgid "tags"
 
msgstr "标签"
 

	
 
#: rhodecode/templates/switch_to_list.html:22
 
#: rhodecode/templates/tags/tags_data.html:33
 
msgid "There are no tags yet"
 
msgstr "没有任何标签"
 

	
 
#: rhodecode/templates/switch_to_list.html:28
 
#: rhodecode/templates/bookmarks/bookmarks.html:15
 
msgid "bookmarks"
 
msgstr ""
 

	
 
#: rhodecode/templates/switch_to_list.html:35
 
#: rhodecode/templates/bookmarks/bookmarks_data.html:32
 
#, fuzzy
 
msgid "There are no bookmarks yet"
 
msgstr "尚未有任何分支"
 

	
 
#: rhodecode/templates/admin/admin.html:5
 
#: rhodecode/templates/admin/admin.html:9
 
msgid "Admin journal"
 
msgstr "管理员日志"
 

	
 
#: rhodecode/templates/admin/admin_log.html:6
 
#: rhodecode/templates/admin/repos/repos.html:41
 
#: rhodecode/templates/admin/repos/repos.html:90
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:135
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:136
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:51
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:52
 
#: rhodecode/templates/journal/journal.html:52
 
#: rhodecode/templates/journal/journal.html:53
 
msgid "Action"
 
msgstr "操作"
 

	
 
#: rhodecode/templates/admin/admin_log.html:7
 
msgid "Repository"
 
msgstr "版本库"
 

	
 
#: rhodecode/templates/admin/admin_log.html:8
 
#: rhodecode/templates/bookmarks/bookmarks.html:37
 
#: rhodecode/templates/bookmarks/bookmarks_data.html:7
 
#: rhodecode/templates/branches/branches.html:37
 
#: rhodecode/templates/tags/tags.html:37
 
#: rhodecode/templates/tags/tags_data.html:7
 
msgid "Date"
 
msgstr "日期"
 

	
 
#: rhodecode/templates/admin/admin_log.html:9
 
msgid "From IP"
 
msgstr "来源 IP"
 

	
 
#: rhodecode/templates/admin/admin_log.html:52
 
#: rhodecode/templates/admin/admin_log.html:53
 
msgid "No actions yet"
 
msgstr "尚无操作"
 

	
 
#: rhodecode/templates/admin/ldap/ldap.html:5
 
msgid "LDAP administration"
 
msgstr "LDAP 管理员"
 

	
 
#: rhodecode/templates/admin/ldap/ldap.html:11
 
msgid "Ldap"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/ldap/ldap.html:28
 
msgid "Connection settings"
 
msgstr "连接设置"
 

	
 
#: rhodecode/templates/admin/ldap/ldap.html:30
 
msgid "Enable LDAP"
 
msgstr "启用 LDAP"
 

	
 
#: rhodecode/templates/admin/ldap/ldap.html:34
 
msgid "Host"
 
msgstr "主机"
 

	
 
#: rhodecode/templates/admin/ldap/ldap.html:38
 
msgid "Port"
 
msgstr "端口"
 

	
 
#: rhodecode/templates/admin/ldap/ldap.html:42
 
msgid "Account"
 
msgstr "帐号"
 

	
 
#: rhodecode/templates/admin/ldap/ldap.html:50
 
msgid "Connection security"
 
msgstr "连接安全"
 

	
 
#: rhodecode/templates/admin/ldap/ldap.html:54
 
msgid "Certificate Checks"
 
msgstr "凭证确认"
 

	
 
#: rhodecode/templates/admin/ldap/ldap.html:57
 
msgid "Search settings"
 
msgstr "搜索设置"
 

	
 
#: rhodecode/templates/admin/ldap/ldap.html:59
 
msgid "Base DN"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/ldap/ldap.html:63
 
msgid "LDAP Filter"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/ldap/ldap.html:67
 
msgid "LDAP Search Scope"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/ldap/ldap.html:70
 
msgid "Attribute mappings"
 
msgstr "属性映射"
 

	
 
#: rhodecode/templates/admin/ldap/ldap.html:72
 
msgid "Login Attribute"
 
msgstr "登录属性"
 

	
 
#: rhodecode/templates/admin/ldap/ldap.html:76
 
msgid "First Name Attribute"
 
msgstr "名"
 

	
 
#: rhodecode/templates/admin/ldap/ldap.html:80
 
msgid "Last Name Attribute"
 
msgstr "姓"
 

	
 
#: rhodecode/templates/admin/ldap/ldap.html:84
 
msgid "E-mail Attribute"
 
msgstr "电子邮件属性"
 

	
 
#: rhodecode/templates/admin/ldap/ldap.html:89
 
#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:66
 
#: rhodecode/templates/admin/settings/hooks.html:73
 
#: rhodecode/templates/admin/users/user_edit.html:129
 
#: rhodecode/templates/admin/users/user_edit.html:154
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:102
 
#: rhodecode/templates/admin/users/user_edit_my_account_form.html:79
 
#: rhodecode/templates/admin/users_groups/users_group_edit.html:115
 
#: rhodecode/templates/settings/repo_settings.html:84
 
msgid "Save"
 
msgstr "保存"
 

	
 
#: rhodecode/templates/admin/notifications/notifications.html:5
 
#: rhodecode/templates/admin/notifications/notifications.html:9
 
msgid "My Notifications"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/notifications/notifications.html:29
 
msgid "Mark all read"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/notifications/notifications_data.html:38
 
#, fuzzy
 
msgid "No notifications here yet"
 
msgstr "尚无操作"
 

	
 
#: rhodecode/templates/admin/notifications/show_notification.html:5
 
#: rhodecode/templates/admin/notifications/show_notification.html:11
 
#, fuzzy
 
msgid "Show notification"
 
msgstr "显示注释"
 

	
 
#: rhodecode/templates/admin/notifications/show_notification.html:9
 
#, fuzzy
 
msgid "Notifications"
 
msgstr "位置"
 

	
 
#: rhodecode/templates/admin/permissions/permissions.html:5
 
msgid "Permissions administration"
 
msgstr "权限管理"
 

	
 
#: rhodecode/templates/admin/permissions/permissions.html:11
 
#: rhodecode/templates/admin/repos/repo_edit.html:116
 
#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:58
 
#: rhodecode/templates/admin/users/user_edit.html:139
 
#: rhodecode/templates/admin/users_groups/users_group_edit.html:100
 
#: rhodecode/templates/settings/repo_settings.html:77
 
msgid "Permissions"
 
msgstr "权限"
 

	
 
#: rhodecode/templates/admin/permissions/permissions.html:24
 
msgid "Default permissions"
 
msgstr "默认权限"
 

	
 
#: rhodecode/templates/admin/permissions/permissions.html:31
 
@@ -1529,97 +1557,97 @@ msgstr ""
 
#: rhodecode/templates/settings/repo_settings.html:48
 
msgid "Repository group"
 
msgstr "版本库组"
 

	
 
#: rhodecode/templates/admin/repos/repo_add_base.html:33
 
#: rhodecode/templates/admin/repos/repo_edit.html:53
 
#: rhodecode/templates/settings/repo_settings.html:52
 
msgid "Optional select a group to put this repository into."
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/repos/repo_add_base.html:38
 
#: rhodecode/templates/admin/repos/repo_edit.html:58
 
msgid "Type"
 
msgstr "类型"
 

	
 
#: rhodecode/templates/admin/repos/repo_add_base.html:42
 
#, fuzzy
 
msgid "Type of repository to create."
 
msgstr "建立版本库"
 

	
 
#: rhodecode/templates/admin/repos/repo_add_base.html:51
 
#: rhodecode/templates/admin/repos/repo_edit.html:70
 
#: rhodecode/templates/settings/repo_settings.html:61
 
msgid "Keep it short and to the point. Use a README file for longer descriptions."
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/repos/repo_add_base.html:60
 
#: rhodecode/templates/admin/repos/repo_edit.html:80
 
#: rhodecode/templates/settings/repo_settings.html:71
 
msgid ""
 
"Private repositories are only visible to people explicitly added as "
 
"collaborators."
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/repos/repo_add_base.html:64
 
msgid "add"
 
msgstr "新增"
 

	
 
#: rhodecode/templates/admin/repos/repo_add_create_repository.html:9
 
msgid "add new repository"
 
msgstr "新增版本库"
 

	
 
#: rhodecode/templates/admin/repos/repo_edit.html:5
 
msgid "Edit repository"
 
msgstr "编辑版本库"
 

	
 
#: rhodecode/templates/admin/repos/repo_edit.html:13
 
#: rhodecode/templates/admin/users/user_edit.html:13
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:155
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:71
 
#: rhodecode/templates/admin/users_groups/users_group_edit.html:13
 
#: rhodecode/templates/files/files_source.html:32
 
#: rhodecode/templates/journal/journal.html:72
 
msgid "edit"
 
msgstr "编辑"
 

	
 
#: rhodecode/templates/admin/repos/repo_edit.html:40
 
#: rhodecode/templates/settings/repo_settings.html:39
 
msgid "Clone uri"
 
msgstr "clone 地址"
 

	
 
#: rhodecode/templates/admin/repos/repo_edit.html:85
 
msgid "Enable statistics"
 
msgstr "启用统计"
 

	
 
#: rhodecode/templates/admin/repos/repo_edit.html:89
 
msgid "Enable statistics window on summary page."
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/repos/repo_edit.html:94
 
msgid "Enable downloads"
 
msgstr "启用下载"
 

	
 
#: rhodecode/templates/admin/repos/repo_edit.html:98
 
msgid "Enable download menu on summary page."
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/repos/repo_edit.html:108
 
#, fuzzy
 
msgid "Change owner of this repository."
 
msgstr "%s 库的修改"
 

	
 
#: rhodecode/templates/admin/repos/repo_edit.html:134
 
msgid "Administration"
 
msgstr "管理"
 

	
 
#: rhodecode/templates/admin/repos/repo_edit.html:137
 
msgid "Statistics"
 
msgstr "统计"
 

	
 
#: rhodecode/templates/admin/repos/repo_edit.html:141
 
msgid "Reset current statistics"
 
msgstr "重置统计"
 

	
 
#: rhodecode/templates/admin/repos/repo_edit.html:141
 
msgid "Confirm to remove current statistics"
 
msgstr "确认移除当前统计"
 

	
 
@@ -1688,197 +1716,186 @@ msgid ""
 
"unaccesible for RhodeCode and VCS systems.\n"
 
"                         If you need fully delete it from filesystem "
 
"please do it manually"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/repos/repo_edit.html:213
 
msgid "Set as fork"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/repos/repo_edit.html:222
 
msgid "Manually set this repository as a fork of another"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/repos/repo_edit_perms.html:3
 
#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:3
 
msgid "none"
 
msgstr "无"
 

	
 
#: rhodecode/templates/admin/repos/repo_edit_perms.html:4
 
#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:4
 
msgid "read"
 
msgstr "读"
 

	
 
#: rhodecode/templates/admin/repos/repo_edit_perms.html:5
 
#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:5
 
msgid "write"
 
msgstr "写"
 

	
 
#: rhodecode/templates/admin/repos/repo_edit_perms.html:6
 
#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:6
 
#: rhodecode/templates/admin/users/users.html:38
 
#: rhodecode/templates/base/base.html:214
 
msgid "admin"
 
msgstr "管理员"
 

	
 
#: rhodecode/templates/admin/repos/repo_edit_perms.html:7
 
#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:7
 
msgid "member"
 
msgstr "成员"
 

	
 
#: rhodecode/templates/admin/repos/repo_edit_perms.html:16
 
#: rhodecode/templates/data_table/_dt_elements.html:61
 
#: rhodecode/templates/journal/journal.html:123
 
#: rhodecode/templates/summary/summary.html:71
 
msgid "private repository"
 
msgstr "私有版本库"
 

	
 
#: rhodecode/templates/admin/repos/repo_edit_perms.html:33
 
#: rhodecode/templates/admin/repos/repo_edit_perms.html:53
 
#: rhodecode/templates/admin/repos/repo_edit_perms.html:58
 
#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:23
 
#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:42
 
msgid "revoke"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/repos/repo_edit_perms.html:75
 
#: rhodecode/templates/admin/repos/repo_edit_perms.html:80
 
#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:64
 
msgid "Add another member"
 
msgstr "添加成员"
 

	
 
#: rhodecode/templates/admin/repos/repo_edit_perms.html:89
 
#: rhodecode/templates/admin/repos/repo_edit_perms.html:94
 
#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:78
 
msgid "Failed to remove user"
 
msgstr "删除用户失败"
 

	
 
#: rhodecode/templates/admin/repos/repo_edit_perms.html:104
 
#: rhodecode/templates/admin/repos/repo_edit_perms.html:109
 
#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:93
 
msgid "Failed to remove users group"
 
msgstr "删除用户组失败"
 

	
 
#: rhodecode/templates/admin/repos/repo_edit_perms.html:123
 
#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:112
 
msgid "Group"
 
msgstr "组"
 

	
 
#: rhodecode/templates/admin/repos/repo_edit_perms.html:124
 
#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:113
 
#: rhodecode/templates/admin/users_groups/users_groups.html:33
 
msgid "members"
 
msgstr "成员"
 

	
 
#: rhodecode/templates/admin/repos/repos.html:5
 
msgid "Repositories administration"
 
msgstr "版本库管理员"
 

	
 
#: rhodecode/templates/admin/repos/repos.html:40
 
#: rhodecode/templates/summary/summary.html:107
 
msgid "Contact"
 
msgstr "联系方式"
 

	
 
#: rhodecode/templates/admin/repos/repos.html:68
 
#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:54
 
#: rhodecode/templates/admin/users/users.html:55
 
#: rhodecode/templates/admin/users_groups/users_groups.html:44
 
msgid "delete"
 
msgstr "删除"
 

	
 
#: rhodecode/templates/admin/repos/repos.html:68
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:158
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:74
 
#, fuzzy, python-format
 
msgid "Confirm to delete this repository: %s"
 
msgstr "确认删除版本库"
 

	
 
#: rhodecode/templates/admin/repos_groups/repos_groups.html:8
 
msgid "Groups"
 
msgstr "组"
 

	
 
#: rhodecode/templates/admin/repos_groups/repos_groups.html:12
 
msgid "with"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/repos_groups/repos_groups_add.html:5
 
msgid "Add repos group"
 
msgstr "添加版本库组"
 

	
 
#: rhodecode/templates/admin/repos_groups/repos_groups_add.html:10
 
#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:10
 
msgid "Repos groups"
 
msgstr "版本库组"
 

	
 
#: rhodecode/templates/admin/repos_groups/repos_groups_add.html:12
 
msgid "add new repos group"
 
msgstr "添加新版本库组"
 

	
 
#: rhodecode/templates/admin/repos_groups/repos_groups_add.html:50
 
#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:50
 
msgid "Group parent"
 
msgstr "上级组"
 

	
 
#: rhodecode/templates/admin/repos_groups/repos_groups_add.html:58
 
#: rhodecode/templates/admin/users/user_add.html:94
 
#: rhodecode/templates/admin/users_groups/users_group_add.html:49
 
#: rhodecode/templates/admin/users_groups/users_group_edit.html:90
 
msgid "save"
 
msgstr "保存"
 

	
 
#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:5
 
msgid "Edit repos group"
 
msgstr "编辑版本库组"
 

	
 
#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:12
 
msgid "edit repos group"
 
msgstr "编辑版本库组"
 

	
 
#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:67
 
#: rhodecode/templates/admin/settings/settings.html:112
 
#: rhodecode/templates/admin/settings/settings.html:177
 
#: rhodecode/templates/admin/users/user_edit.html:130
 
#: rhodecode/templates/admin/users/user_edit.html:155
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:103
 
#: rhodecode/templates/admin/users/user_edit_my_account_form.html:80
 
#: rhodecode/templates/admin/users_groups/users_group_edit.html:116
 
#: rhodecode/templates/files/files_add.html:82
 
#: rhodecode/templates/files/files_edit.html:68
 
#: rhodecode/templates/settings/repo_settings.html:85
 
msgid "Reset"
 
msgstr "重置"
 

	
 
#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:5
 
msgid "Repositories groups administration"
 
msgstr "版本库管理员"
 

	
 
#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:22
 
msgid "ADD NEW GROUP"
 
msgstr "添加组"
 

	
 
#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:35
 
#, fuzzy
 
msgid "Number of toplevel repositories"
 
msgstr "版本库数量"
 

	
 
#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:36
 
#: rhodecode/templates/admin/users/users.html:40
 
#: rhodecode/templates/admin/users_groups/users_groups.html:35
 
msgid "action"
 
msgstr "操作"
 

	
 
#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:54
 
#, fuzzy, python-format
 
msgid "Confirm to delete this group: %s"
 
msgstr "确认删除该组"
 

	
 
#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:62
 
msgid "There are no repositories groups yet"
 
msgstr "没有版本库组"
 

	
 
#: rhodecode/templates/admin/settings/hooks.html:5
 
#: rhodecode/templates/admin/settings/settings.html:5
 
msgid "Settings administration"
 
msgstr "设置管理员"
 

	
 
#: rhodecode/templates/admin/settings/hooks.html:9
 
#: rhodecode/templates/admin/settings/settings.html:9
 
#: rhodecode/templates/settings/repo_settings.html:5
 
#: rhodecode/templates/settings/repo_settings.html:13
 
msgid "Settings"
 
msgstr "设置"
 

	
 
#: rhodecode/templates/admin/settings/hooks.html:24
 
@@ -2017,182 +2034,182 @@ msgstr ""
 
msgid "Email to"
 
msgstr "电子邮件"
 

	
 
#: rhodecode/templates/admin/settings/settings.html:207
 
#, fuzzy
 
msgid "Send"
 
msgstr "秒"
 

	
 
#: rhodecode/templates/admin/settings/settings.html:213
 
msgid "System Info and Packages"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/settings/settings.html:216
 
#, fuzzy
 
msgid "show"
 
msgstr "显示"
 

	
 
#: rhodecode/templates/admin/users/user_add.html:5
 
msgid "Add user"
 
msgstr "添加用户"
 

	
 
#: rhodecode/templates/admin/users/user_add.html:10
 
#: rhodecode/templates/admin/users/user_edit.html:11
 
#: rhodecode/templates/admin/users/users.html:9
 
msgid "Users"
 
msgstr "用户"
 

	
 
#: rhodecode/templates/admin/users/user_add.html:12
 
msgid "add new user"
 
msgstr "添加新用户"
 

	
 
#: rhodecode/templates/admin/users/user_add.html:50
 
#, fuzzy
 
msgid "Password confirmation"
 
msgstr "密码不符"
 

	
 
#: rhodecode/templates/admin/users/user_add.html:86
 
#: rhodecode/templates/admin/users/user_edit.html:113
 
#: rhodecode/templates/admin/users_groups/users_group_add.html:41
 
#: rhodecode/templates/admin/users_groups/users_group_edit.html:42
 
msgid "Active"
 
msgstr "启用"
 

	
 
#: rhodecode/templates/admin/users/user_edit.html:5
 
msgid "Edit user"
 
msgstr "编辑用户"
 

	
 
#: rhodecode/templates/admin/users/user_edit.html:34
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:33
 
#: rhodecode/templates/admin/users/user_edit_my_account_form.html:10
 
msgid "Change your avatar at"
 
msgstr "修改你的头像"
 

	
 
#: rhodecode/templates/admin/users/user_edit.html:35
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:34
 
#: rhodecode/templates/admin/users/user_edit_my_account_form.html:11
 
msgid "Using"
 
msgstr "使用中"
 

	
 
#: rhodecode/templates/admin/users/user_edit.html:43
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:43
 
#: rhodecode/templates/admin/users/user_edit_my_account_form.html:20
 
msgid "API key"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/users/user_edit.html:59
 
msgid "LDAP DN"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/users/user_edit.html:68
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:58
 
#: rhodecode/templates/admin/users/user_edit_my_account_form.html:35
 
msgid "New password"
 
msgstr "新密码"
 

	
 
#: rhodecode/templates/admin/users/user_edit.html:77
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:67
 
#: rhodecode/templates/admin/users/user_edit_my_account_form.html:44
 
msgid "New password confirmation"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/users/user_edit.html:147
 
#: rhodecode/templates/admin/users_groups/users_group_edit.html:108
 
msgid "Create repositories"
 
msgstr "创建版本库"
 

	
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:5
 
#: rhodecode/templates/base/base.html:124
 
msgid "My account"
 
msgstr "我的账户"
 

	
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:9
 
msgid "My Account"
 
msgstr "我的账户"
 

	
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:116
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:32
 
#: rhodecode/templates/journal/journal.html:32
 
#, fuzzy
 
msgid "My repos"
 
msgstr "空版本库"
 

	
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:116
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:32
 
#, fuzzy
 
msgid "My permissions"
 
msgstr "权限"
 

	
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:121
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:37
 
#: rhodecode/templates/journal/journal.html:37
 
#, fuzzy
 
msgid "ADD"
 
msgstr "新增"
 

	
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:134
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:50
 
#: rhodecode/templates/bookmarks/bookmarks.html:40
 
#: rhodecode/templates/bookmarks/bookmarks_data.html:9
 
#: rhodecode/templates/branches/branches.html:40
 
#: rhodecode/templates/journal/journal.html:51
 
#: rhodecode/templates/tags/tags.html:40
 
#: rhodecode/templates/tags/tags_data.html:9
 
msgid "Revision"
 
msgstr "修订"
 

	
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:155
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:71
 
#: rhodecode/templates/journal/journal.html:72
 
msgid "private"
 
msgstr "私有"
 

	
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:165
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:81
 
#: rhodecode/templates/journal/journal.html:85
 
msgid "No repositories yet"
 
msgstr "没有任何版本库"
 

	
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:167
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:83
 
#: rhodecode/templates/journal/journal.html:87
 
msgid "create one now"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:184
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:285
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:100
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:201
 
#, fuzzy
 
msgid "Permission"
 
msgstr "权限"
 

	
 
#: rhodecode/templates/admin/users/users.html:5
 
msgid "Users administration"
 
msgstr "用户管理员"
 

	
 
#: rhodecode/templates/admin/users/users.html:23
 
msgid "ADD NEW USER"
 
msgstr "添加用户"
 

	
 
#: rhodecode/templates/admin/users/users.html:33
 
msgid "username"
 
msgstr "用户名"
 

	
 
#: rhodecode/templates/admin/users/users.html:34
 
#: rhodecode/templates/branches/branches_data.html:6
 
msgid "name"
 
msgstr "名称"
 

	
 
#: rhodecode/templates/admin/users/users.html:35
 
msgid "lastname"
 
msgstr "姓"
 

	
 
#: rhodecode/templates/admin/users/users.html:36
 
msgid "last login"
 
msgstr "最后登录"
 

	
 
#: rhodecode/templates/admin/users/users.html:37
 
#: rhodecode/templates/admin/users_groups/users_groups.html:34
 
msgid "active"
 
msgstr "启用"
 

	
 
#: rhodecode/templates/admin/users/users.html:39
 
#: rhodecode/templates/base/base.html:223
 
msgid "ldap"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/users/users.html:56
 
#, fuzzy, python-format
 
msgid "Confirm to delete this user: %s"
 
msgstr "确认删除该用户"
 

	
 
#: rhodecode/templates/admin/users_groups/users_group_add.html:5
 
msgid "Add users group"
 
msgstr "添加用户组"
 

	
 
@@ -2205,96 +2222,101 @@ msgstr "用户组"
 
msgid "add new users group"
 
msgstr "添加新用户组"
 

	
 
#: rhodecode/templates/admin/users_groups/users_group_edit.html:5
 
msgid "Edit users group"
 
msgstr "编辑用户组"
 

	
 
#: rhodecode/templates/admin/users_groups/users_group_edit.html:11
 
msgid "UsersGroups"
 
msgstr "用户组"
 

	
 
#: rhodecode/templates/admin/users_groups/users_group_edit.html:50
 
msgid "Members"
 
msgstr "成员"
 

	
 
#: rhodecode/templates/admin/users_groups/users_group_edit.html:58
 
msgid "Choosen group members"
 
msgstr "选择组成员"
 

	
 
#: rhodecode/templates/admin/users_groups/users_group_edit.html:61
 
msgid "Remove all elements"
 
msgstr "移除全部项目"
 

	
 
#: rhodecode/templates/admin/users_groups/users_group_edit.html:75
 
msgid "Available members"
 
msgstr "启用成员"
 

	
 
#: rhodecode/templates/admin/users_groups/users_group_edit.html:79
 
msgid "Add all elements"
 
msgstr "添加全部项目"
 

	
 
#: rhodecode/templates/admin/users_groups/users_group_edit.html:126
 
#, fuzzy
 
msgid "Group members"
 
msgstr "选择组成员"
 

	
 
#: rhodecode/templates/admin/users_groups/users_groups.html:5
 
msgid "Users groups administration"
 
msgstr "用户组管理"
 

	
 
#: rhodecode/templates/admin/users_groups/users_groups.html:23
 
msgid "ADD NEW USER GROUP"
 
msgstr "添加新用户组"
 

	
 
#: rhodecode/templates/admin/users_groups/users_groups.html:32
 
msgid "group name"
 
msgstr "组名"
 

	
 
#: rhodecode/templates/admin/users_groups/users_groups.html:33
 
#: rhodecode/templates/base/root.html:46
 
msgid "members"
 
msgstr "成员"
 

	
 
#: rhodecode/templates/admin/users_groups/users_groups.html:45
 
#, fuzzy, python-format
 
msgid "Confirm to delete this users group: %s"
 
msgstr "确认删除该组"
 

	
 
#: rhodecode/templates/base/base.html:41
 
msgid "Submit a bug"
 
msgstr "提交 bug"
 

	
 
#: rhodecode/templates/base/base.html:77
 
msgid "Login to your account"
 
msgstr ""
 

	
 
#: rhodecode/templates/base/base.html:100
 
msgid "Forgot password ?"
 
msgstr "忘记密码?"
 

	
 
#: rhodecode/templates/base/base.html:107
 
#, fuzzy
 
msgid "Log In"
 
msgstr "登录"
 

	
 
#: rhodecode/templates/base/base.html:118
 
msgid "Inbox"
 
msgstr ""
 

	
 
#: rhodecode/templates/base/base.html:122
 
#: rhodecode/templates/base/base.html:289
 
#: rhodecode/templates/base/base.html:291
 
#: rhodecode/templates/base/base.html:293
 
msgid "Home"
 
msgstr "首页"
 

	
 
#: rhodecode/templates/base/base.html:123
 
#: rhodecode/templates/base/base.html:298
 
#: rhodecode/templates/base/base.html:300
 
#: rhodecode/templates/base/base.html:302
 
#: rhodecode/templates/journal/journal.html:4
 
#: rhodecode/templates/journal/journal.html:17
 
#: rhodecode/templates/journal/public_journal.html:4
 
msgid "Journal"
 
msgstr "日志"
 

	
 
#: rhodecode/templates/base/base.html:125
 
msgid "Log Out"
 
msgstr "退出"
 

	
 
#: rhodecode/templates/base/base.html:144
 
@@ -2365,112 +2387,116 @@ msgstr "设置"
 
msgid "fork"
 
msgstr ""
 

	
 
#: rhodecode/templates/base/base.html:210
 
msgid "search"
 
msgstr "搜索"
 

	
 
#: rhodecode/templates/base/base.html:217
 
msgid "journal"
 
msgstr "日志"
 

	
 
#: rhodecode/templates/base/base.html:219
 
msgid "repositories groups"
 
msgstr "版本库组"
 

	
 
#: rhodecode/templates/base/base.html:220
 
msgid "users"
 
msgstr "用户"
 

	
 
#: rhodecode/templates/base/base.html:221
 
msgid "users groups"
 
msgstr "用户组"
 

	
 
#: rhodecode/templates/base/base.html:222
 
msgid "permissions"
 
msgstr "权限"
 

	
 
#: rhodecode/templates/base/base.html:235
 
#: rhodecode/templates/base/base.html:237
 
#: rhodecode/templates/followers/followers.html:5
 
msgid "Followers"
 
msgstr "跟随者"
 

	
 
#: rhodecode/templates/base/base.html:243
 
#: rhodecode/templates/base/base.html:245
 
#: rhodecode/templates/forks/forks.html:5
 
msgid "Forks"
 
msgstr ""
 

	
 
#: rhodecode/templates/base/base.html:316
 
#: rhodecode/templates/base/base.html:318
 
#: rhodecode/templates/base/base.html:320
 
#: rhodecode/templates/search/search.html:4
 
#: rhodecode/templates/search/search.html:24
 
#: rhodecode/templates/search/search.html:46
 
msgid "Search"
 
msgstr "搜索"
 

	
 
#: rhodecode/templates/base/root.html:53
 
#: rhodecode/templates/base/root.html:42
 
#, fuzzy
 
msgid "add another comment"
 
msgstr "添加成员"
 

	
 
#: rhodecode/templates/base/root.html:54
 
#: rhodecode/templates/base/root.html:43
 
#: rhodecode/templates/journal/journal.html:111
 
#: rhodecode/templates/summary/summary.html:52
 
msgid "Stop following this repository"
 
msgstr "停止跟随该版本库"
 

	
 
#: rhodecode/templates/base/root.html:55
 
#: rhodecode/templates/base/root.html:44
 
#: rhodecode/templates/summary/summary.html:56
 
msgid "Start following this repository"
 
msgstr "开始跟随该版本库"
 

	
 
#: rhodecode/templates/base/root.html:45
 
msgid "Group"
 
msgstr "组"
 

	
 
#: rhodecode/templates/bookmarks/bookmarks.html:5
 
msgid "Bookmarks"
 
msgstr ""
 

	
 
#: rhodecode/templates/bookmarks/bookmarks.html:39
 
#: rhodecode/templates/bookmarks/bookmarks_data.html:8
 
#: rhodecode/templates/branches/branches.html:39
 
#: rhodecode/templates/tags/tags.html:39
 
#: rhodecode/templates/tags/tags_data.html:8
 
#, fuzzy
 
msgid "Author"
 
msgstr "作者"
 

	
 
#: rhodecode/templates/branches/branches_data.html:7
 
msgid "date"
 
msgstr "日期"
 

	
 
#: rhodecode/templates/branches/branches_data.html:8
 
#: rhodecode/templates/shortlog/shortlog_data.html:8
 
msgid "author"
 
msgstr "作者"
 

	
 
#: rhodecode/templates/branches/branches_data.html:9
 
#: rhodecode/templates/shortlog/shortlog_data.html:5
 
msgid "revision"
 
msgstr "修订"
 

	
 
#: rhodecode/templates/changelog/changelog.html:15
 
#, python-format
 
msgid "showing %d out of %d revision"
 
msgid_plural "showing %d out of %d revisions"
 
msgstr[0] ""
 

	
 
#: rhodecode/templates/changelog/changelog.html:38
 
msgid "Show"
 
msgstr "显示"
 

	
 
#: rhodecode/templates/changelog/changelog.html:64
 
#: rhodecode/templates/summary/summary.html:352
 
msgid "show more"
 
msgstr ""
 

	
 
#: rhodecode/templates/changelog/changelog.html:68
 
msgid "Affected number of files, click to show more details"
 
msgstr ""
 

	
 
#: rhodecode/templates/changelog/changelog.html:82
 
#: rhodecode/templates/changeset/changeset.html:72
 
@@ -2509,158 +2535,158 @@ msgstr "标签"
 
msgid "Show selected changes __S -> __E"
 
msgstr ""
 

	
 
#: rhodecode/templates/changelog/changelog.html:235
 
msgid "There are no changes yet"
 
msgstr "没有任何变更"
 

	
 
#: rhodecode/templates/changelog/changelog_details.html:2
 
#: rhodecode/templates/changeset/changeset.html:60
 
msgid "removed"
 
msgstr "移除"
 

	
 
#: rhodecode/templates/changelog/changelog_details.html:3
 
#: rhodecode/templates/changeset/changeset.html:61
 
msgid "changed"
 
msgstr "修改"
 

	
 
#: rhodecode/templates/changelog/changelog_details.html:4
 
#: rhodecode/templates/changeset/changeset.html:62
 
msgid "added"
 
msgstr "添加"
 

	
 
#: rhodecode/templates/changelog/changelog_details.html:6
 
#: rhodecode/templates/changelog/changelog_details.html:7
 
#: rhodecode/templates/changelog/changelog_details.html:8
 
#: rhodecode/templates/changeset/changeset.html:64
 
#: rhodecode/templates/changeset/changeset.html:65
 
#: rhodecode/templates/changeset/changeset.html:66
 
#, python-format
 
msgid "affected %s files"
 
msgstr ""
 

	
 
#: rhodecode/templates/changeset/changeset.html:6
 
#: rhodecode/templates/changeset/changeset.html:14
 
msgid "Changeset"
 
msgstr ""
 

	
 
#: rhodecode/templates/changeset/changeset.html:37
 
#: rhodecode/templates/changeset/diff_block.html:20
 
msgid "raw diff"
 
msgstr "原始 diff"
 

	
 
#: rhodecode/templates/changeset/changeset.html:38
 
#: rhodecode/templates/changeset/diff_block.html:21
 
msgid "download diff"
 
msgstr "下载 diff"
 

	
 
#: rhodecode/templates/changeset/changeset.html:42
 
#: rhodecode/templates/changeset/changeset_file_comment.html:69
 
#: rhodecode/templates/changeset/changeset_file_comment.html:71
 
#, fuzzy, python-format
 
msgid "%d comment"
 
msgid_plural "%d comments"
 
msgstr[0] "提交"
 

	
 
#: rhodecode/templates/changeset/changeset.html:42
 
#: rhodecode/templates/changeset/changeset_file_comment.html:69
 
#: rhodecode/templates/changeset/changeset_file_comment.html:71
 
#, python-format
 
msgid "(%d inline)"
 
msgid_plural "(%d inline)"
 
msgstr[0] ""
 

	
 
#: rhodecode/templates/changeset/changeset.html:97
 
#, python-format
 
msgid "%s files affected with %s insertions and %s deletions:"
 
msgstr ""
 

	
 
#: rhodecode/templates/changeset/changeset.html:113
 
msgid "Changeset was too big and was cut off..."
 
msgstr ""
 

	
 
#: rhodecode/templates/changeset/changeset_file_comment.html:35
 
msgid "Submitting..."
 
msgstr ""
 

	
 
#: rhodecode/templates/changeset/changeset_file_comment.html:38
 
msgid "Commenting on line {1}."
 
msgstr ""
 

	
 
#: rhodecode/templates/changeset/changeset_file_comment.html:39
 
#: rhodecode/templates/changeset/changeset_file_comment.html:100
 
#: rhodecode/templates/changeset/changeset_file_comment.html:102
 
#, python-format
 
msgid "Comments parsed using %s syntax with %s support."
 
msgstr ""
 

	
 
#: rhodecode/templates/changeset/changeset_file_comment.html:41
 
#: rhodecode/templates/changeset/changeset_file_comment.html:102
 
#: rhodecode/templates/changeset/changeset_file_comment.html:104
 
msgid "Use @username inside this text to send notification to this RhodeCode user"
 
msgstr ""
 

	
 
#: rhodecode/templates/changeset/changeset_file_comment.html:47
 
#: rhodecode/templates/changeset/changeset_file_comment.html:107
 
#: rhodecode/templates/changeset/changeset_file_comment.html:49
 
#: rhodecode/templates/changeset/changeset_file_comment.html:110
 
#, fuzzy
 
msgid "Comment"
 
msgstr "提交"
 

	
 
#: rhodecode/templates/changeset/changeset_file_comment.html:48
 
#: rhodecode/templates/changeset/changeset_file_comment.html:59
 
#: rhodecode/templates/changeset/changeset_file_comment.html:50
 
#: rhodecode/templates/changeset/changeset_file_comment.html:61
 
msgid "Hide"
 
msgstr ""
 

	
 
#: rhodecode/templates/changeset/changeset_file_comment.html:55
 
#: rhodecode/templates/changeset/changeset_file_comment.html:57
 
#, fuzzy
 
msgid "You need to be logged in to comment."
 
msgstr "必须登录才能访问该页面"
 

	
 
#: rhodecode/templates/changeset/changeset_file_comment.html:55
 
#: rhodecode/templates/changeset/changeset_file_comment.html:57
 
msgid "Login now"
 
msgstr ""
 

	
 
#: rhodecode/templates/changeset/changeset_file_comment.html:97
 
#: rhodecode/templates/changeset/changeset_file_comment.html:99
 
msgid "Leave a comment"
 
msgstr ""
 

	
 
#: rhodecode/templates/changeset/changeset_range.html:29
 
msgid "Compare View"
 
msgstr "比较显示"
 

	
 
#: rhodecode/templates/changeset/changeset_range.html:49
 
msgid "Files affected"
 
msgstr ""
 

	
 
#: rhodecode/templates/changeset/diff_block.html:19
 
msgid "diff"
 
msgstr ""
 

	
 
#: rhodecode/templates/changeset/diff_block.html:27
 
#, fuzzy
 
msgid "show inline comments"
 
msgstr "文件内容"
 

	
 
#: rhodecode/templates/data_table/_dt_elements.html:33
 
#: rhodecode/templates/data_table/_dt_elements.html:35
 
#: rhodecode/templates/data_table/_dt_elements.html:37
 
#: rhodecode/templates/forks/fork.html:5
 
msgid "Fork"
 
msgstr "分支"
 

	
 
#: rhodecode/templates/data_table/_dt_elements.html:54
 
#: rhodecode/templates/journal/journal.html:117
 
#: rhodecode/templates/summary/summary.html:63
 
msgid "Mercurial repository"
 
msgstr "Mercurial 版本库"
 

	
 
#: rhodecode/templates/data_table/_dt_elements.html:56
 
#: rhodecode/templates/journal/journal.html:119
 
#: rhodecode/templates/summary/summary.html:66
 
msgid "Git repository"
 
msgstr "Git 版本库"
 

	
 
#: rhodecode/templates/data_table/_dt_elements.html:63
 
#: rhodecode/templates/journal/journal.html:125
 
#: rhodecode/templates/summary/summary.html:73
 
msgid "public repository"
 
msgstr "公共版本库"
 

	
 
#: rhodecode/templates/data_table/_dt_elements.html:74
 
#: rhodecode/templates/summary/summary.html:82
 
#: rhodecode/templates/summary/summary.html:83
 
@@ -3074,48 +3100,54 @@ msgid "Commit activity by day / author"
 
msgstr ""
 

	
 
#: rhodecode/templates/summary/summary.html:188
 
msgid "Stats gathered: "
 
msgstr ""
 

	
 
#: rhodecode/templates/summary/summary.html:211
 
#, fuzzy
 
msgid "Quick start"
 
msgstr "快速过滤..."
 

	
 
#: rhodecode/templates/summary/summary.html:281
 
#, python-format
 
msgid "Download %s as %s"
 
msgstr "下载 %s 作为 %s"
 

	
 
#: rhodecode/templates/summary/summary.html:638
 
msgid "commits"
 
msgstr "提交"
 

	
 
#: rhodecode/templates/summary/summary.html:639
 
msgid "files added"
 
msgstr "文件已添加"
 

	
 
#: rhodecode/templates/summary/summary.html:640
 
msgid "files changed"
 
msgstr "文件已更改"
 

	
 
#: rhodecode/templates/summary/summary.html:641
 
msgid "files removed"
 
msgstr "文件已删除"
 

	
 
#: rhodecode/templates/summary/summary.html:644
 
msgid "commit"
 
msgstr "提交"
 

	
 
#: rhodecode/templates/summary/summary.html:645
 
msgid "file added"
 
msgstr "文件已添加"
 

	
 
#: rhodecode/templates/summary/summary.html:646
 
msgid "file changed"
 
msgstr "文件已更改"
 

	
 
#: rhodecode/templates/summary/summary.html:647
 
msgid "file removed"
 
msgstr "文件已删除"
 

	
 
#~ msgid "[committed via RhodeCode] into"
 
#~ msgstr ""
 

	
 
#~ msgid "[pulled from remote] into"
 
#~ msgstr ""
 

	
rhodecode/i18n/zh_TW/LC_MESSAGES/rhodecode.po
Show inline comments
 
# Chinese (Taiwan) translations for RhodeCode.
 
# Copyright (C) 2011 ORGANIZATION
 
# This file is distributed under the same license as the RhodeCode project.
 
# FIRST AUTHOR <EMAIL@ADDRESS>, 2011.
 
#
 
msgid ""
 
msgstr ""
 
"Project-Id-Version: RhodeCode 1.2.0\n"
 
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
 
"POT-Creation-Date: 2012-05-27 17:41+0200\n"
 
"POT-Creation-Date: 2012-06-03 01:06+0200\n"
 
"PO-Revision-Date: 2012-05-09 22:23+0800\n"
 
"Last-Translator: Nansen <nansenat16@gmail.com>\n"
 
"Language-Team: zh_TW <LL@li.org>\n"
 
"Plural-Forms: nplurals=1; plural=0\n"
 
"MIME-Version: 1.0\n"
 
"Content-Type: text/plain; charset=utf-8\n"
 
"Content-Transfer-Encoding: 8bit\n"
 
"Generated-By: Babel 0.9.6\n"
 

	
 
#: rhodecode/controllers/changelog.py:96
 
#: rhodecode/controllers/changelog.py:95
 
#, fuzzy
 
msgid "All Branches"
 
msgstr "分支"
 

	
 
#: rhodecode/controllers/changeset.py:79
 
#: rhodecode/controllers/changeset.py:80
 
msgid "show white space"
 
msgstr ""
 

	
 
#: rhodecode/controllers/changeset.py:86 rhodecode/controllers/changeset.py:93
 
#: rhodecode/controllers/changeset.py:87 rhodecode/controllers/changeset.py:94
 
msgid "ignore white space"
 
msgstr ""
 

	
 
#: rhodecode/controllers/changeset.py:153
 
#: rhodecode/controllers/changeset.py:154
 
#, fuzzy, python-format
 
msgid "%s line context"
 
msgstr "文件內容"
 

	
 
#: rhodecode/controllers/changeset.py:320
 
#: rhodecode/controllers/changeset.py:335 rhodecode/lib/diffs.py:62
 
#: rhodecode/controllers/changeset.py:324
 
#: rhodecode/controllers/changeset.py:339 rhodecode/lib/diffs.py:62
 
msgid "binary file"
 
msgstr "二進位檔"
 

	
 
#: rhodecode/controllers/error.py:69
 
msgid "Home page"
 
msgstr "首頁"
 

	
 
#: rhodecode/controllers/error.py:98
 
msgid "The request could not be understood by the server due to malformed syntax."
 
msgstr ""
 

	
 
#: rhodecode/controllers/error.py:101
 
msgid "Unauthorized access to resource"
 
msgstr ""
 

	
 
#: rhodecode/controllers/error.py:103
 
msgid "You don't have permission to view this page"
 
msgstr "您沒有權限瀏覽這個頁面"
 

	
 
#: rhodecode/controllers/error.py:105
 
msgid "The resource could not be found"
 
msgstr "找不到這個資源"
 

	
 
#: rhodecode/controllers/error.py:107
 
msgid ""
 
"The server encountered an unexpected condition which prevented it from "
 
"fulfilling the request."
 
msgstr ""
 

	
 
#: rhodecode/controllers/feed.py:48
 
#, python-format
 
msgid "Changes on %s repository"
 
msgstr "修改於版本庫 %s"
 

	
 
#: rhodecode/controllers/feed.py:49
 
#, python-format
 
msgid "%s %s feed"
 
msgstr ""
 

	
 
#: rhodecode/controllers/files.py:86
 
#: rhodecode/templates/admin/repos/repo_add.html:13
 
msgid "add new"
 
msgstr "新增"
 

	
 
#: rhodecode/controllers/files.py:87
 
#, fuzzy, python-format
 
msgid "There are no files yet %s"
 
msgstr "尚未有任何檔案"
 
@@ -139,160 +139,160 @@ msgstr "未知的存檔類型"
 
#: rhodecode/controllers/files.py:461
 
#: rhodecode/templates/changeset/changeset_range.html:5
 
#: rhodecode/templates/changeset/changeset_range.html:13
 
#: rhodecode/templates/changeset/changeset_range.html:31
 
msgid "Changesets"
 
msgstr "變更"
 

	
 
#: rhodecode/controllers/files.py:462 rhodecode/controllers/summary.py:230
 
#: rhodecode/templates/branches/branches.html:5
 
msgid "Branches"
 
msgstr "分支"
 

	
 
#: rhodecode/controllers/files.py:463 rhodecode/controllers/summary.py:231
 
#: rhodecode/templates/tags/tags.html:5
 
msgid "Tags"
 
msgstr "標籤"
 

	
 
#: rhodecode/controllers/forks.py:69 rhodecode/controllers/admin/repos.py:86
 
#, python-format
 
msgid ""
 
"%s repository is not mapped to db perhaps it was created or renamed from "
 
"the filesystem please run the application again in order to rescan "
 
"repositories"
 
msgstr ""
 

	
 
#: rhodecode/controllers/forks.py:128 rhodecode/controllers/settings.py:69
 
#, python-format
 
msgid ""
 
"%s repository is not mapped to db perhaps it was created or renamed from "
 
"the file system please run the application again in order to rescan "
 
"repositories"
 
msgstr ""
 

	
 
#: rhodecode/controllers/forks.py:163
 
#, python-format
 
msgid "forked %s repository as %s"
 
msgstr "forked %s 版本庫為 %s"
 

	
 
#: rhodecode/controllers/forks.py:177
 
#, python-format
 
msgid "An error occurred during repository forking %s"
 
msgstr ""
 

	
 
#: rhodecode/controllers/journal.py:53
 
#, python-format
 
msgid "%s public journal %s feed"
 
msgstr "%s 公開日誌 %s feed"
 

	
 
#: rhodecode/controllers/journal.py:190 rhodecode/controllers/journal.py:224
 
#: rhodecode/controllers/journal.py:190 rhodecode/controllers/journal.py:223
 
#: rhodecode/templates/admin/repos/repo_edit.html:177
 
#: rhodecode/templates/base/base.html:307
 
#: rhodecode/templates/base/base.html:309
 
#: rhodecode/templates/base/base.html:311
 
msgid "Public journal"
 
msgstr "公開日誌"
 

	
 
#: rhodecode/controllers/login.py:116
 
msgid "You have successfully registered into rhodecode"
 
msgstr "您已經成功註冊rhodecode"
 

	
 
#: rhodecode/controllers/login.py:137
 
msgid "Your password reset link was sent"
 
msgstr "您的密碼重設連結已寄出"
 

	
 
#: rhodecode/controllers/login.py:157
 
msgid ""
 
"Your password reset was successful, new password has been sent to your "
 
"email"
 
msgstr "您的密碼重設動作已完成,新的密碼已寄至您的信箱"
 

	
 
#: rhodecode/controllers/search.py:114
 
msgid "Invalid search query. Try quoting it."
 
msgstr "無效的查詢。請使用跳脫字元"
 

	
 
#: rhodecode/controllers/search.py:119
 
msgid "There is no index to search in. Please run whoosh indexer"
 
msgstr "沒有任何索引可以搜尋。請執行 whoosh 建立索引"
 

	
 
#: rhodecode/controllers/search.py:123
 
msgid "An error occurred during this search operation"
 
msgstr ""
 

	
 
#: rhodecode/controllers/settings.py:103
 
#: rhodecode/controllers/admin/repos.py:211
 
#: rhodecode/controllers/admin/repos.py:213
 
#, python-format
 
msgid "Repository %s updated successfully"
 
msgstr "版本庫 %s 更新完成"
 

	
 
#: rhodecode/controllers/settings.py:121
 
#: rhodecode/controllers/admin/repos.py:229
 
#: rhodecode/controllers/admin/repos.py:231
 
#, python-format
 
msgid "error occurred during update of repository %s"
 
msgstr ""
 

	
 
#: rhodecode/controllers/settings.py:139
 
#: rhodecode/controllers/admin/repos.py:247
 
#: rhodecode/controllers/admin/repos.py:249
 
#, python-format
 
msgid ""
 
"%s repository is not mapped to db perhaps it was moved or renamed  from "
 
"the filesystem please run the application again in order to rescan "
 
"repositories"
 
msgstr ""
 

	
 
#: rhodecode/controllers/settings.py:151
 
#: rhodecode/controllers/admin/repos.py:259
 
#: rhodecode/controllers/admin/repos.py:261
 
#, python-format
 
msgid "deleted repository %s"
 
msgstr "刪除版本庫 %s"
 

	
 
#: rhodecode/controllers/settings.py:155
 
#: rhodecode/controllers/admin/repos.py:269
 
#: rhodecode/controllers/admin/repos.py:275
 
#: rhodecode/controllers/admin/repos.py:271
 
#: rhodecode/controllers/admin/repos.py:277
 
#, python-format
 
msgid "An error occurred during deletion of %s"
 
msgstr ""
 

	
 
#: rhodecode/controllers/summary.py:138
 
msgid "No data loaded yet"
 
msgstr ""
 

	
 
#: rhodecode/controllers/summary.py:142
 
#: rhodecode/templates/summary/summary.html:139
 
msgid "Statistics are disabled for this repository"
 
msgstr "這個版本庫的統計功能已停用"
 

	
 
#: rhodecode/controllers/admin/ldap_settings.py:49
 
msgid "BASE"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/ldap_settings.py:50
 
msgid "ONELEVEL"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/ldap_settings.py:51
 
msgid "SUBTREE"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/ldap_settings.py:55
 
msgid "NEVER"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/ldap_settings.py:56
 
msgid "ALLOW"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/ldap_settings.py:57
 
msgid "TRY"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/ldap_settings.py:58
 
msgid "DEMAND"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/ldap_settings.py:59
 
msgid "HARD"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/ldap_settings.py:63
 
msgid "No encryption"
 
msgstr "無加密"
 
@@ -351,429 +351,457 @@ msgstr "寫"
 
#: rhodecode/templates/base/base.html:326
 
#: rhodecode/templates/base/base.html:328
 
#: rhodecode/templates/base/base.html:330
 
msgid "Admin"
 
msgstr "管理"
 

	
 
#: rhodecode/controllers/admin/permissions.py:65
 
msgid "disabled"
 
msgstr "停用"
 

	
 
#: rhodecode/controllers/admin/permissions.py:67
 
msgid "allowed with manual account activation"
 
msgstr "允許手動啟用帳號"
 

	
 
#: rhodecode/controllers/admin/permissions.py:69
 
msgid "allowed with automatic account activation"
 
msgstr "允許自動啟用帳號"
 

	
 
#: rhodecode/controllers/admin/permissions.py:71
 
msgid "Disabled"
 
msgstr "停用"
 

	
 
#: rhodecode/controllers/admin/permissions.py:72
 
msgid "Enabled"
 
msgstr "啟用"
 

	
 
#: rhodecode/controllers/admin/permissions.py:106
 
msgid "Default permissions updated successfully"
 
msgstr "預設權限更新完成"
 

	
 
#: rhodecode/controllers/admin/permissions.py:123
 
msgid "error occurred during update of permissions"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/repos.py:116
 
msgid "--REMOVE FORK--"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/repos.py:144
 
#, python-format
 
msgid "created repository %s from %s"
 
msgstr "建立版本庫 %s 到 %s"
 

	
 
#: rhodecode/controllers/admin/repos.py:148
 
#, python-format
 
msgid "created repository %s"
 
msgstr "建立版本庫 %s"
 

	
 
#: rhodecode/controllers/admin/repos.py:177
 
#: rhodecode/controllers/admin/repos.py:179
 
#, python-format
 
msgid "error occurred during creation of repository %s"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/repos.py:264
 
#: rhodecode/controllers/admin/repos.py:266
 
#, python-format
 
msgid "Cannot delete %s it still contains attached forks"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/repos.py:293
 
#: rhodecode/controllers/admin/repos.py:295
 
msgid "An error occurred during deletion of repository user"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/repos.py:312
 
#: rhodecode/controllers/admin/repos.py:314
 
msgid "An error occurred during deletion of repository users groups"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/repos.py:329
 
#: rhodecode/controllers/admin/repos.py:331
 
msgid "An error occurred during deletion of repository stats"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/repos.py:345
 
#: rhodecode/controllers/admin/repos.py:347
 
msgid "An error occurred during cache invalidation"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/repos.py:365
 
#: rhodecode/controllers/admin/repos.py:367
 
msgid "Updated repository visibility in public journal"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/repos.py:369
 
#: rhodecode/controllers/admin/repos.py:371
 
msgid "An error occurred during setting this repository in public journal"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/repos.py:374 rhodecode/model/forms.py:54
 
#: rhodecode/controllers/admin/repos.py:376 rhodecode/model/forms.py:54
 
msgid "Token mismatch"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/repos.py:387
 
msgid "Pulled from remote location"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/repos.py:389
 
msgid "An error occurred during pull from remote location"
 
msgid "Pulled from remote location"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/repos.py:405
 
msgid "Nothing"
 
#: rhodecode/controllers/admin/repos.py:391
 
msgid "An error occurred during pull from remote location"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/repos.py:407
 
msgid "Nothing"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/repos.py:409
 
#, fuzzy, python-format
 
msgid "Marked repo %s as fork of %s"
 
msgstr "建立版本庫 %s 到 %s"
 

	
 
#: rhodecode/controllers/admin/repos.py:411
 
#: rhodecode/controllers/admin/repos.py:413
 
msgid "An error occurred during this operation"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/repos_groups.py:119
 
#, python-format
 
msgid "created repos group %s"
 
msgstr "建立版本庫群組 %s"
 

	
 
#: rhodecode/controllers/admin/repos_groups.py:132
 
#, python-format
 
msgid "error occurred during creation of repos group %s"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/repos_groups.py:166
 
#, python-format
 
msgid "updated repos group %s"
 
msgstr "更新版本庫群組 %s"
 

	
 
#: rhodecode/controllers/admin/repos_groups.py:179
 
#, python-format
 
msgid "error occurred during update of repos group %s"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/repos_groups.py:198
 
#, python-format
 
msgid "This group contains %s repositores and cannot be deleted"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/repos_groups.py:205
 
#, python-format
 
msgid "removed repos group %s"
 
msgstr "移除版本庫群組 %s"
 

	
 
#: rhodecode/controllers/admin/repos_groups.py:210
 
msgid "Cannot delete this group it still contains subgroups"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/repos_groups.py:215
 
#: rhodecode/controllers/admin/repos_groups.py:220
 
#, python-format
 
msgid "error occurred during deletion of repos group %s"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/repos_groups.py:240
 
msgid "An error occurred during deletion of group user"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/repos_groups.py:260
 
msgid "An error occurred during deletion of group users groups"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/settings.py:120
 
#, python-format
 
msgid "Repositories successfully rescanned added: %s,removed: %s"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/settings.py:129
 
msgid "Whoosh reindex task scheduled"
 
msgstr "Whoosh 重新索引工作排程"
 

	
 
#: rhodecode/controllers/admin/settings.py:154
 
msgid "Updated application settings"
 
msgstr "更新應用設定"
 

	
 
#: rhodecode/controllers/admin/settings.py:159
 
#: rhodecode/controllers/admin/settings.py:226
 
msgid "error occurred during updating application settings"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/settings.py:221
 
msgid "Updated mercurial settings"
 
msgstr "更新 mercurial 設定"
 

	
 
#: rhodecode/controllers/admin/settings.py:246
 
msgid "Added new hook"
 
msgstr "新增hook"
 

	
 
#: rhodecode/controllers/admin/settings.py:258
 
msgid "Updated hooks"
 
msgstr "更新hook"
 

	
 
#: rhodecode/controllers/admin/settings.py:262
 
msgid "error occurred during hook creation"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/settings.py:281
 
msgid "Email task created"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/settings.py:336
 
msgid "You can't edit this user since it's crucial for entire application"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/settings.py:365
 
#: rhodecode/controllers/admin/settings.py:367
 
msgid "Your account was updated successfully"
 
msgstr "您的帳號已更新完成"
 

	
 
#: rhodecode/controllers/admin/settings.py:384
 
#: rhodecode/controllers/admin/users.py:132
 
#: rhodecode/controllers/admin/settings.py:387
 
#: rhodecode/controllers/admin/users.py:138
 
#, python-format
 
msgid "error occurred during update of user %s"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/users.py:79
 
#: rhodecode/controllers/admin/users.py:83
 
#, python-format
 
msgid "created user %s"
 
msgstr "建立使用者 %s"
 

	
 
#: rhodecode/controllers/admin/users.py:92
 
#: rhodecode/controllers/admin/users.py:95
 
#, python-format
 
msgid "error occurred during creation of user %s"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/users.py:118
 
#: rhodecode/controllers/admin/users.py:124
 
msgid "User updated successfully"
 
msgstr "使用者更新完成"
 

	
 
#: rhodecode/controllers/admin/users.py:149
 
#: rhodecode/controllers/admin/users.py:155
 
msgid "successfully deleted user"
 
msgstr "成功刪除使用者"
 

	
 
#: rhodecode/controllers/admin/users.py:154
 
#: rhodecode/controllers/admin/users.py:160
 
msgid "An error occurred during deletion of user"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/users.py:169
 
#: rhodecode/controllers/admin/users.py:175
 
msgid "You can't edit this user"
 
msgstr "您無法編輯這位使用者"
 

	
 
#: rhodecode/controllers/admin/users.py:199
 
#: rhodecode/controllers/admin/users_groups.py:215
 
#: rhodecode/controllers/admin/users.py:205
 
#: rhodecode/controllers/admin/users_groups.py:219
 
msgid "Granted 'repository create' permission to user"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/users.py:208
 
#: rhodecode/controllers/admin/users_groups.py:225
 
#: rhodecode/controllers/admin/users.py:214
 
#: rhodecode/controllers/admin/users_groups.py:229
 
msgid "Revoked 'repository create' permission to user"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/users_groups.py:79
 
#: rhodecode/controllers/admin/users_groups.py:84
 
#, python-format
 
msgid "created users group %s"
 
msgstr "建立使用者群組 %s"
 

	
 
#: rhodecode/controllers/admin/users_groups.py:92
 
#: rhodecode/controllers/admin/users_groups.py:95
 
#, python-format
 
msgid "error occurred during creation of users group %s"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/users_groups.py:128
 
#: rhodecode/controllers/admin/users_groups.py:135
 
#, python-format
 
msgid "updated users group %s"
 
msgstr "更新使用者群組 %s"
 

	
 
#: rhodecode/controllers/admin/users_groups.py:148
 
#: rhodecode/controllers/admin/users_groups.py:152
 
#, python-format
 
msgid "error occurred during update of users group %s"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/users_groups.py:165
 
#: rhodecode/controllers/admin/users_groups.py:169
 
msgid "successfully deleted users group"
 
msgstr "成功移除使用者群組"
 

	
 
#: rhodecode/controllers/admin/users_groups.py:170
 
#: rhodecode/controllers/admin/users_groups.py:174
 
msgid "An error occurred during deletion of users group"
 
msgstr ""
 

	
 
#: rhodecode/lib/auth.py:497
 
msgid "You need to be a registered user to perform this action"
 
msgstr "您必須是註冊使用者才能執行這個動作"
 

	
 
#: rhodecode/lib/auth.py:538
 
msgid "You need to be a signed in to view this page"
 
msgstr "您必須登入後才能瀏覽這個頁面"
 

	
 
#: rhodecode/lib/diffs.py:78
 
msgid "Changeset was too big and was cut off, use diff menu to display this diff"
 
msgstr ""
 

	
 
#: rhodecode/lib/diffs.py:88
 
msgid "No changes detected"
 
msgstr "尚未有任何變更"
 

	
 
#: rhodecode/lib/helpers.py:415
 
msgid "True"
 
msgstr "真"
 

	
 
#: rhodecode/lib/helpers.py:419
 
msgid "False"
 
msgstr "假"
 

	
 
#: rhodecode/lib/helpers.py:463
 
#, fuzzy
 
msgid "Changeset not found"
 
msgstr "修改"
 

	
 
#: rhodecode/lib/helpers.py:486
 
#, python-format
 
msgid "Show all combined changesets %s->%s"
 
msgstr ""
 

	
 
#: rhodecode/lib/helpers.py:492
 
msgid "compare view"
 
msgstr ""
 

	
 
#: rhodecode/lib/helpers.py:512
 
msgid "and"
 
msgstr "和"
 

	
 
#: rhodecode/lib/helpers.py:513
 
#, python-format
 
msgid "%s more"
 
msgstr ""
 

	
 
#: rhodecode/lib/helpers.py:514 rhodecode/templates/changelog/changelog.html:40
 
msgid "revisions"
 
msgstr "修訂"
 

	
 
#: rhodecode/lib/helpers.py:537
 
msgid "fork name "
 
msgstr "fork 名稱"
 

	
 
#: rhodecode/lib/helpers.py:540
 
#: rhodecode/lib/helpers.py:550
 
msgid "[deleted] repository"
 
msgstr ""
 

	
 
#: rhodecode/lib/helpers.py:541 rhodecode/lib/helpers.py:546
 
#: rhodecode/lib/helpers.py:552 rhodecode/lib/helpers.py:562
 
msgid "[created] repository"
 
msgstr ""
 

	
 
#: rhodecode/lib/helpers.py:542
 
#: rhodecode/lib/helpers.py:554
 
#, fuzzy
 
msgid "[created] repository as fork"
 
msgstr "建立版本庫 %s"
 

	
 
#: rhodecode/lib/helpers.py:543 rhodecode/lib/helpers.py:547
 
#: rhodecode/lib/helpers.py:556 rhodecode/lib/helpers.py:564
 
msgid "[forked] repository"
 
msgstr ""
 

	
 
#: rhodecode/lib/helpers.py:544 rhodecode/lib/helpers.py:548
 
#: rhodecode/lib/helpers.py:558 rhodecode/lib/helpers.py:566
 
msgid "[updated] repository"
 
msgstr ""
 

	
 
#: rhodecode/lib/helpers.py:545
 
#: rhodecode/lib/helpers.py:560
 
msgid "[delete] repository"
 
msgstr ""
 

	
 
#: rhodecode/lib/helpers.py:549
 
#: rhodecode/lib/helpers.py:568
 
#, fuzzy, python-format
 
#| msgid "created user %s"
 
msgid "[created] user"
 
msgstr "建立使用者 %s"
 

	
 
#: rhodecode/lib/helpers.py:570
 
#, fuzzy, python-format
 
#| msgid "updated users group %s"
 
msgid "[updated] user"
 
msgstr "更新使用者群組 %s"
 

	
 
#: rhodecode/lib/helpers.py:572
 
#, fuzzy, python-format
 
#| msgid "created users group %s"
 
msgid "[created] users group"
 
msgstr "建立使用者群組 %s"
 

	
 
#: rhodecode/lib/helpers.py:574
 
#, fuzzy, python-format
 
#| msgid "updated users group %s"
 
msgid "[updated] users group"
 
msgstr "更新使用者群組 %s"
 

	
 
#: rhodecode/lib/helpers.py:576
 
msgid "[commented] on revision in repository"
 
msgstr ""
 

	
 
#: rhodecode/lib/helpers.py:578
 
msgid "[pushed] into"
 
msgstr ""
 

	
 
#: rhodecode/lib/helpers.py:550
 
msgid "[committed via RhodeCode] into"
 
#: rhodecode/lib/helpers.py:580
 
msgid "[committed via RhodeCode] into repository"
 
msgstr ""
 

	
 
#: rhodecode/lib/helpers.py:551
 
msgid "[pulled from remote] into"
 
#: rhodecode/lib/helpers.py:582
 
msgid "[pulled from remote] into repository"
 
msgstr ""
 

	
 
#: rhodecode/lib/helpers.py:552
 
#: rhodecode/lib/helpers.py:584
 
msgid "[pulled] from"
 
msgstr ""
 

	
 
#: rhodecode/lib/helpers.py:553
 
#: rhodecode/lib/helpers.py:586
 
msgid "[started following] repository"
 
msgstr ""
 

	
 
#: rhodecode/lib/helpers.py:554
 
#: rhodecode/lib/helpers.py:588
 
msgid "[stopped following] repository"
 
msgstr ""
 

	
 
#: rhodecode/lib/helpers.py:732
 
#: rhodecode/lib/helpers.py:752
 
#, python-format
 
msgid " and %s more"
 
msgstr ""
 

	
 
#: rhodecode/lib/helpers.py:736
 
#: rhodecode/lib/helpers.py:756
 
msgid "No Files"
 
msgstr "沒有檔案"
 

	
 
#: rhodecode/lib/utils2.py:335
 
#, fuzzy, python-format
 
msgid "%d year"
 
msgid_plural "%d years"
 
msgstr[0] "年"
 

	
 
#: rhodecode/lib/utils2.py:336
 
#, fuzzy, python-format
 
msgid "%d month"
 
msgid_plural "%d months"
 
msgstr[0] "月"
 

	
 
#: rhodecode/lib/utils2.py:337
 
#, fuzzy, python-format
 
msgid "%d day"
 
msgid_plural "%d days"
 
msgstr[0] "日"
 

	
 
#: rhodecode/lib/utils2.py:338
 
#, fuzzy, python-format
 
msgid "%d hour"
 
msgid_plural "%d hours"
 
msgstr[0] "時"
 

	
 
#: rhodecode/lib/utils2.py:339
 
#, fuzzy, python-format
 
msgid "%d minute"
 
msgid_plural "%d minutes"
 
msgstr[0] "分"
 

	
 
#: rhodecode/lib/utils2.py:340
 
#, fuzzy, python-format
 
msgid "%d second"
 
msgid_plural "%d seconds"
 
msgstr[0] "秒"
 

	
 
#: rhodecode/lib/utils2.py:355
 
#, fuzzy, python-format
 
msgid "%s ago"
 
msgstr "之前"
 

	
 
#: rhodecode/lib/utils2.py:357
 
#, python-format
 
msgid "%s and %s ago"
 
msgstr ""
 
@@ -931,536 +959,536 @@ msgstr "請輸入密碼"
 
#: rhodecode/model/forms.py:559
 
#, python-format
 
msgid "Enter %(min)i characters or more"
 
msgstr ""
 

	
 
#: rhodecode/model/notification.py:175
 
msgid "commented on commit"
 
msgstr ""
 

	
 
#: rhodecode/model/notification.py:176
 
#, fuzzy
 
msgid "sent message"
 
msgstr "遞交資訊"
 

	
 
#: rhodecode/model/notification.py:177
 
msgid "mentioned you"
 
msgstr ""
 

	
 
#: rhodecode/model/notification.py:178
 
#, fuzzy
 
msgid "registered in RhodeCode"
 
msgstr "您已經成功註冊rhodecode"
 

	
 
#: rhodecode/model/user.py:235
 
#, fuzzy
 
msgid "new user registration"
 
msgstr "[RhodeCode] 新使用者註冊"
 

	
 
#: rhodecode/model/user.py:259 rhodecode/model/user.py:279
 
msgid "You can't Edit this user since it's crucial for entire application"
 
msgstr "您無法編輯這個使用者,因為他是系統帳號"
 

	
 
#: rhodecode/model/user.py:300
 
msgid "You can't remove this user since it's crucial for entire application"
 
msgstr "您無法移除這個使用者,因為他是系統帳號"
 

	
 
#: rhodecode/model/user.py:306
 
#, fuzzy, python-format
 
msgid ""
 
"user \"%s\" still owns %s repositories and cannot be removed. Switch "
 
"owners or remove those repositories. %s"
 
msgstr "這個使用者擁有 %s 個版本庫所以無法移除,請先變更版本庫擁有者或者刪除版本庫"
 

	
 
#: rhodecode/templates/index.html:3
 
msgid "Dashboard"
 
msgstr "儀表板"
 

	
 
#: rhodecode/templates/index_base.html:6
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:115
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:31
 
#: rhodecode/templates/bookmarks/bookmarks.html:10
 
#: rhodecode/templates/branches/branches.html:9
 
#: rhodecode/templates/journal/journal.html:31
 
#: rhodecode/templates/tags/tags.html:10
 
msgid "quick filter..."
 
msgstr "快速過濾..."
 

	
 
#: rhodecode/templates/index_base.html:6 rhodecode/templates/base/base.html:218
 
msgid "repositories"
 
msgstr "個版本庫"
 

	
 
#: rhodecode/templates/index_base.html:13
 
#: rhodecode/templates/index_base.html:15
 
#: rhodecode/templates/admin/repos/repos.html:22
 
msgid "ADD REPOSITORY"
 
msgstr "新增版本庫"
 

	
 
#: rhodecode/templates/index_base.html:29
 
#: rhodecode/templates/admin/repos_groups/repos_groups_add.html:32
 
#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:32
 
#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:33
 
#: rhodecode/templates/admin/users_groups/users_group_add.html:32
 
#: rhodecode/templates/admin/users_groups/users_group_edit.html:33
 
msgid "Group name"
 
msgstr "群組名稱"
 

	
 
#: rhodecode/templates/index_base.html:30
 
#: rhodecode/templates/index_base.html:67
 
#: rhodecode/templates/index_base.html:132
 
#: rhodecode/templates/index_base.html:158
 
#: rhodecode/templates/admin/repos/repo_add_base.html:47
 
#: rhodecode/templates/admin/repos/repo_edit.html:66
 
#: rhodecode/templates/admin/repos/repos.html:37
 
#: rhodecode/templates/admin/repos/repos.html:84
 
#: rhodecode/templates/admin/repos_groups/repos_groups_add.html:41
 
#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:41
 
#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:34
 
#: rhodecode/templates/forks/fork.html:49
 
#: rhodecode/templates/settings/repo_settings.html:57
 
#: rhodecode/templates/summary/summary.html:100
 
msgid "Description"
 
msgstr "描述"
 

	
 
#: rhodecode/templates/index_base.html:40
 
#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:46
 
msgid "Repositories group"
 
msgstr "版本庫群組"
 

	
 
#: rhodecode/templates/index_base.html:66
 
#: rhodecode/templates/index_base.html:156
 
#: rhodecode/templates/admin/repos/repo_add_base.html:9
 
#: rhodecode/templates/admin/repos/repo_edit.html:32
 
#: rhodecode/templates/admin/repos/repos.html:36
 
#: rhodecode/templates/admin/repos/repos.html:82
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:133
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:183
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:249
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:284
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:49
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:99
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:165
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:200
 
#: rhodecode/templates/bookmarks/bookmarks.html:36
 
#: rhodecode/templates/bookmarks/bookmarks_data.html:6
 
#: rhodecode/templates/branches/branches.html:36
 
#: rhodecode/templates/files/files_browser.html:47
 
#: rhodecode/templates/journal/journal.html:50
 
#: rhodecode/templates/journal/journal.html:98
 
#: rhodecode/templates/journal/journal.html:177
 
#: rhodecode/templates/settings/repo_settings.html:31
 
#: rhodecode/templates/summary/summary.html:38
 
#: rhodecode/templates/summary/summary.html:114
 
#: rhodecode/templates/tags/tags.html:36
 
#: rhodecode/templates/tags/tags_data.html:6
 
msgid "Name"
 
msgstr "名稱"
 

	
 
#: rhodecode/templates/index_base.html:68
 
#: rhodecode/templates/admin/repos/repos.html:38
 
msgid "Last change"
 
msgstr "最後修改"
 

	
 
#: rhodecode/templates/index_base.html:69
 
#: rhodecode/templates/index_base.html:161
 
#: rhodecode/templates/admin/repos/repos.html:39
 
#: rhodecode/templates/admin/repos/repos.html:87
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:251
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:167
 
#: rhodecode/templates/journal/journal.html:179
 
msgid "Tip"
 
msgstr ""
 

	
 
#: rhodecode/templates/index_base.html:70
 
#: rhodecode/templates/index_base.html:163
 
#: rhodecode/templates/admin/repos/repo_edit.html:103
 
#: rhodecode/templates/admin/repos/repos.html:89
 
msgid "Owner"
 
msgstr "擁有者"
 

	
 
#: rhodecode/templates/index_base.html:71
 
#: rhodecode/templates/journal/public_journal.html:20
 
#: rhodecode/templates/summary/summary.html:43
 
#: rhodecode/templates/summary/summary.html:46
 
msgid "RSS"
 
msgstr ""
 

	
 
#: rhodecode/templates/index_base.html:72
 
#: rhodecode/templates/journal/public_journal.html:23
 
msgid "Atom"
 
msgstr ""
 

	
 
#: rhodecode/templates/index_base.html:102
 
#: rhodecode/templates/index_base.html:104
 
#, python-format
 
msgid "Subscribe to %s rss feed"
 
msgstr "訂閱 %s rss"
 

	
 
#: rhodecode/templates/index_base.html:109
 
#: rhodecode/templates/index_base.html:111
 
#, python-format
 
msgid "Subscribe to %s atom feed"
 
msgstr "訂閱 %s atom"
 

	
 
#: rhodecode/templates/index_base.html:130
 
#, fuzzy
 
msgid "Group Name"
 
msgstr "群組名稱"
 

	
 
#: rhodecode/templates/index_base.html:148
 
#: rhodecode/templates/index_base.html:188
 
#: rhodecode/templates/admin/repos/repos.html:112
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:270
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:186
 
#: rhodecode/templates/bookmarks/bookmarks.html:60
 
#: rhodecode/templates/branches/branches.html:60
 
#: rhodecode/templates/journal/journal.html:202
 
#: rhodecode/templates/tags/tags.html:60
 
msgid "Click to sort ascending"
 
msgstr ""
 

	
 
#: rhodecode/templates/index_base.html:149
 
#: rhodecode/templates/index_base.html:189
 
#: rhodecode/templates/admin/repos/repos.html:113
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:271
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:187
 
#: rhodecode/templates/bookmarks/bookmarks.html:61
 
#: rhodecode/templates/branches/branches.html:61
 
#: rhodecode/templates/journal/journal.html:203
 
#: rhodecode/templates/tags/tags.html:61
 
msgid "Click to sort descending"
 
msgstr ""
 

	
 
#: rhodecode/templates/index_base.html:159
 
#: rhodecode/templates/admin/repos/repos.html:85
 
#, fuzzy
 
msgid "Last Change"
 
msgstr "最後修改"
 

	
 
#: rhodecode/templates/index_base.html:190
 
#: rhodecode/templates/admin/repos/repos.html:114
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:272
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:188
 
#: rhodecode/templates/bookmarks/bookmarks.html:62
 
#: rhodecode/templates/branches/branches.html:62
 
#: rhodecode/templates/journal/journal.html:204
 
#: rhodecode/templates/tags/tags.html:62
 
msgid "No records found."
 
msgstr ""
 

	
 
#: rhodecode/templates/index_base.html:191
 
#: rhodecode/templates/admin/repos/repos.html:115
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:273
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:189
 
#: rhodecode/templates/bookmarks/bookmarks.html:63
 
#: rhodecode/templates/branches/branches.html:63
 
#: rhodecode/templates/journal/journal.html:205
 
#: rhodecode/templates/tags/tags.html:63
 
msgid "Data error."
 
msgstr ""
 

	
 
#: rhodecode/templates/index_base.html:192
 
#: rhodecode/templates/admin/repos/repos.html:116
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:274
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:190
 
#: rhodecode/templates/bookmarks/bookmarks.html:64
 
#: rhodecode/templates/branches/branches.html:64
 
#: rhodecode/templates/journal/journal.html:206
 
#: rhodecode/templates/tags/tags.html:64
 
#, fuzzy
 
msgid "Loading..."
 
msgstr "載入中..."
 

	
 
#: rhodecode/templates/login.html:5 rhodecode/templates/login.html:54
 
msgid "Sign In"
 
msgstr "登入"
 

	
 
#: rhodecode/templates/login.html:21
 
msgid "Sign In to"
 
msgstr "登入"
 

	
 
#: rhodecode/templates/login.html:31 rhodecode/templates/register.html:20
 
#: rhodecode/templates/admin/admin_log.html:5
 
#: rhodecode/templates/admin/users/user_add.html:32
 
#: rhodecode/templates/admin/users/user_edit.html:50
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:49
 
#: rhodecode/templates/admin/users/user_edit_my_account_form.html:26
 
#: rhodecode/templates/base/base.html:83
 
#: rhodecode/templates/summary/summary.html:113
 
msgid "Username"
 
msgstr "帳號"
 

	
 
#: rhodecode/templates/login.html:40 rhodecode/templates/register.html:29
 
#: rhodecode/templates/admin/ldap/ldap.html:46
 
#: rhodecode/templates/admin/users/user_add.html:41
 
#: rhodecode/templates/base/base.html:92
 
msgid "Password"
 
msgstr "密碼"
 

	
 
#: rhodecode/templates/login.html:50
 
#, fuzzy
 
msgid "Remember me"
 
msgstr "成員"
 

	
 
#: rhodecode/templates/login.html:60
 
msgid "Forgot your password ?"
 
msgstr "忘記您的密碼?"
 

	
 
#: rhodecode/templates/login.html:63 rhodecode/templates/base/base.html:103
 
msgid "Don't have an account ?"
 
msgstr "沒有帳號?"
 

	
 
#: rhodecode/templates/password_reset.html:5
 
msgid "Reset your password"
 
msgstr "重設您的密碼"
 

	
 
#: rhodecode/templates/password_reset.html:11
 
msgid "Reset your password to"
 
msgstr "重設您的密碼"
 

	
 
#: rhodecode/templates/password_reset.html:21
 
msgid "Email address"
 
msgstr "郵件位址"
 

	
 
#: rhodecode/templates/password_reset.html:30
 
msgid "Reset my password"
 
msgstr "重設我的密碼"
 

	
 
#: rhodecode/templates/password_reset.html:31
 
msgid "Password reset link will be send to matching email address"
 
msgstr "密碼重設連結已郵寄至您的信箱"
 

	
 
#: rhodecode/templates/register.html:5 rhodecode/templates/register.html:74
 
msgid "Sign Up"
 
msgstr "登入"
 

	
 
#: rhodecode/templates/register.html:11
 
msgid "Sign Up to"
 
msgstr "登入"
 

	
 
#: rhodecode/templates/register.html:38
 
msgid "Re-enter password"
 
msgstr "確認密碼"
 

	
 
#: rhodecode/templates/register.html:47
 
#: rhodecode/templates/admin/users/user_add.html:59
 
#: rhodecode/templates/admin/users/user_edit.html:86
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:76
 
#: rhodecode/templates/admin/users/user_edit_my_account_form.html:53
 
msgid "First Name"
 
msgstr "名"
 

	
 
#: rhodecode/templates/register.html:56
 
#: rhodecode/templates/admin/users/user_add.html:68
 
#: rhodecode/templates/admin/users/user_edit.html:95
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:85
 
#: rhodecode/templates/admin/users/user_edit_my_account_form.html:62
 
msgid "Last Name"
 
msgstr "姓"
 

	
 
#: rhodecode/templates/register.html:65
 
#: rhodecode/templates/admin/users/user_add.html:77
 
#: rhodecode/templates/admin/users/user_edit.html:104
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:94
 
#: rhodecode/templates/admin/users/user_edit_my_account_form.html:71
 
#: rhodecode/templates/summary/summary.html:115
 
msgid "Email"
 
msgstr "電子郵件"
 

	
 
#: rhodecode/templates/register.html:76
 
msgid "Your account will be activated right after registration"
 
msgstr "您的帳號註冊後將會啟用"
 

	
 
#: rhodecode/templates/register.html:78
 
msgid "Your account must wait for activation by administrator"
 
msgstr "您的帳號註冊後將等待管理員啟用"
 

	
 
#: rhodecode/templates/repo_switcher_list.html:11
 
#: rhodecode/templates/admin/repos/repo_add_base.html:56
 
#: rhodecode/templates/admin/repos/repo_edit.html:76
 
#: rhodecode/templates/settings/repo_settings.html:67
 
msgid "Private repository"
 
msgstr "私有的版本庫"
 

	
 
#: rhodecode/templates/repo_switcher_list.html:16
 
msgid "Public repository"
 
msgstr "公開的版本庫"
 

	
 
#: rhodecode/templates/switch_to_list.html:3
 
#: rhodecode/templates/branches/branches.html:14
 
msgid "branches"
 
msgstr "分支"
 

	
 
#: rhodecode/templates/switch_to_list.html:10
 
#: rhodecode/templates/branches/branches_data.html:51
 
msgid "There are no branches yet"
 
msgstr "沒有任何分支"
 

	
 
#: rhodecode/templates/switch_to_list.html:15
 
#: rhodecode/templates/shortlog/shortlog_data.html:10
 
#: rhodecode/templates/tags/tags.html:15
 
msgid "tags"
 
msgstr "標籤"
 

	
 
#: rhodecode/templates/switch_to_list.html:22
 
#: rhodecode/templates/tags/tags_data.html:33
 
msgid "There are no tags yet"
 
msgstr "沒有任何標籤"
 

	
 
#: rhodecode/templates/switch_to_list.html:28
 
#: rhodecode/templates/bookmarks/bookmarks.html:15
 
msgid "bookmarks"
 
msgstr ""
 

	
 
#: rhodecode/templates/switch_to_list.html:35
 
#: rhodecode/templates/bookmarks/bookmarks_data.html:32
 
#, fuzzy
 
msgid "There are no bookmarks yet"
 
msgstr "尚未有任何 fork"
 

	
 
#: rhodecode/templates/admin/admin.html:5
 
#: rhodecode/templates/admin/admin.html:9
 
msgid "Admin journal"
 
msgstr "管理員日誌"
 

	
 
#: rhodecode/templates/admin/admin_log.html:6
 
#: rhodecode/templates/admin/repos/repos.html:41
 
#: rhodecode/templates/admin/repos/repos.html:90
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:135
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:136
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:51
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:52
 
#: rhodecode/templates/journal/journal.html:52
 
#: rhodecode/templates/journal/journal.html:53
 
msgid "Action"
 
msgstr "動作"
 

	
 
#: rhodecode/templates/admin/admin_log.html:7
 
msgid "Repository"
 
msgstr "版本庫"
 

	
 
#: rhodecode/templates/admin/admin_log.html:8
 
#: rhodecode/templates/bookmarks/bookmarks.html:37
 
#: rhodecode/templates/bookmarks/bookmarks_data.html:7
 
#: rhodecode/templates/branches/branches.html:37
 
#: rhodecode/templates/tags/tags.html:37
 
#: rhodecode/templates/tags/tags_data.html:7
 
msgid "Date"
 
msgstr "時間"
 

	
 
#: rhodecode/templates/admin/admin_log.html:9
 
msgid "From IP"
 
msgstr "來源IP"
 

	
 
#: rhodecode/templates/admin/admin_log.html:52
 
#: rhodecode/templates/admin/admin_log.html:53
 
msgid "No actions yet"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/ldap/ldap.html:5
 
msgid "LDAP administration"
 
msgstr "LDAP管理者"
 

	
 
#: rhodecode/templates/admin/ldap/ldap.html:11
 
msgid "Ldap"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/ldap/ldap.html:28
 
msgid "Connection settings"
 
msgstr "連接設定"
 

	
 
#: rhodecode/templates/admin/ldap/ldap.html:30
 
msgid "Enable LDAP"
 
msgstr "啟動LDAP"
 

	
 
#: rhodecode/templates/admin/ldap/ldap.html:34
 
msgid "Host"
 
msgstr "主機"
 

	
 
#: rhodecode/templates/admin/ldap/ldap.html:38
 
msgid "Port"
 
msgstr "連接埠"
 

	
 
#: rhodecode/templates/admin/ldap/ldap.html:42
 
msgid "Account"
 
msgstr "帳號"
 

	
 
#: rhodecode/templates/admin/ldap/ldap.html:50
 
msgid "Connection security"
 
msgstr "連接安全性"
 

	
 
#: rhodecode/templates/admin/ldap/ldap.html:54
 
msgid "Certificate Checks"
 
msgstr "憑證確認"
 

	
 
#: rhodecode/templates/admin/ldap/ldap.html:57
 
msgid "Search settings"
 
msgstr "搜尋選項"
 

	
 
#: rhodecode/templates/admin/ldap/ldap.html:59
 
msgid "Base DN"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/ldap/ldap.html:63
 
msgid "LDAP Filter"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/ldap/ldap.html:67
 
msgid "LDAP Search Scope"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/ldap/ldap.html:70
 
msgid "Attribute mappings"
 
msgstr "屬性對應"
 

	
 
#: rhodecode/templates/admin/ldap/ldap.html:72
 
msgid "Login Attribute"
 
msgstr "登入屬性"
 

	
 
#: rhodecode/templates/admin/ldap/ldap.html:76
 
msgid "First Name Attribute"
 
msgstr "名"
 

	
 
#: rhodecode/templates/admin/ldap/ldap.html:80
 
msgid "Last Name Attribute"
 
msgstr "姓"
 

	
 
#: rhodecode/templates/admin/ldap/ldap.html:84
 
msgid "E-mail Attribute"
 
msgstr "電子郵件屬性"
 

	
 
#: rhodecode/templates/admin/ldap/ldap.html:89
 
#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:66
 
#: rhodecode/templates/admin/settings/hooks.html:73
 
#: rhodecode/templates/admin/users/user_edit.html:129
 
#: rhodecode/templates/admin/users/user_edit.html:154
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:102
 
#: rhodecode/templates/admin/users/user_edit_my_account_form.html:79
 
#: rhodecode/templates/admin/users_groups/users_group_edit.html:115
 
#: rhodecode/templates/settings/repo_settings.html:84
 
msgid "Save"
 
msgstr "儲存"
 

	
 
#: rhodecode/templates/admin/notifications/notifications.html:5
 
#: rhodecode/templates/admin/notifications/notifications.html:9
 
msgid "My Notifications"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/notifications/notifications.html:29
 
msgid "Mark all read"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/notifications/notifications_data.html:38
 
msgid "No notifications here yet"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/notifications/show_notification.html:5
 
#: rhodecode/templates/admin/notifications/show_notification.html:11
 
#, fuzzy
 
msgid "Show notification"
 
msgstr "險是註釋"
 

	
 
#: rhodecode/templates/admin/notifications/show_notification.html:9
 
#, fuzzy
 
msgid "Notifications"
 
msgstr "位置"
 

	
 
#: rhodecode/templates/admin/permissions/permissions.html:5
 
msgid "Permissions administration"
 
msgstr "權限管理員"
 

	
 
#: rhodecode/templates/admin/permissions/permissions.html:11
 
#: rhodecode/templates/admin/repos/repo_edit.html:116
 
#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:58
 
#: rhodecode/templates/admin/users/user_edit.html:139
 
#: rhodecode/templates/admin/users_groups/users_group_edit.html:100
 
#: rhodecode/templates/settings/repo_settings.html:77
 
msgid "Permissions"
 
msgstr "權限"
 

	
 
#: rhodecode/templates/admin/permissions/permissions.html:24
 
msgid "Default permissions"
 
msgstr "預設權限"
 

	
 
#: rhodecode/templates/admin/permissions/permissions.html:31
 
msgid "Anonymous access"
 
@@ -1525,97 +1553,97 @@ msgstr ""
 
#: rhodecode/templates/settings/repo_settings.html:48
 
msgid "Repository group"
 
msgstr "版本庫群組"
 

	
 
#: rhodecode/templates/admin/repos/repo_add_base.html:33
 
#: rhodecode/templates/admin/repos/repo_edit.html:53
 
#: rhodecode/templates/settings/repo_settings.html:52
 
msgid "Optional select a group to put this repository into."
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/repos/repo_add_base.html:38
 
#: rhodecode/templates/admin/repos/repo_edit.html:58
 
msgid "Type"
 
msgstr "類型"
 

	
 
#: rhodecode/templates/admin/repos/repo_add_base.html:42
 
#, fuzzy
 
msgid "Type of repository to create."
 
msgstr "版本庫建立"
 

	
 
#: rhodecode/templates/admin/repos/repo_add_base.html:51
 
#: rhodecode/templates/admin/repos/repo_edit.html:70
 
#: rhodecode/templates/settings/repo_settings.html:61
 
msgid "Keep it short and to the point. Use a README file for longer descriptions."
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/repos/repo_add_base.html:60
 
#: rhodecode/templates/admin/repos/repo_edit.html:80
 
#: rhodecode/templates/settings/repo_settings.html:71
 
msgid ""
 
"Private repositories are only visible to people explicitly added as "
 
"collaborators."
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/repos/repo_add_base.html:64
 
msgid "add"
 
msgstr "新增"
 

	
 
#: rhodecode/templates/admin/repos/repo_add_create_repository.html:9
 
msgid "add new repository"
 
msgstr "新增版本庫"
 

	
 
#: rhodecode/templates/admin/repos/repo_edit.html:5
 
msgid "Edit repository"
 
msgstr "編輯版本庫"
 

	
 
#: rhodecode/templates/admin/repos/repo_edit.html:13
 
#: rhodecode/templates/admin/users/user_edit.html:13
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:155
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:71
 
#: rhodecode/templates/admin/users_groups/users_group_edit.html:13
 
#: rhodecode/templates/files/files_source.html:32
 
#: rhodecode/templates/journal/journal.html:72
 
msgid "edit"
 
msgstr "編輯"
 

	
 
#: rhodecode/templates/admin/repos/repo_edit.html:40
 
#: rhodecode/templates/settings/repo_settings.html:39
 
msgid "Clone uri"
 
msgstr "複製URL"
 

	
 
#: rhodecode/templates/admin/repos/repo_edit.html:85
 
msgid "Enable statistics"
 
msgstr "啟用統計"
 

	
 
#: rhodecode/templates/admin/repos/repo_edit.html:89
 
msgid "Enable statistics window on summary page."
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/repos/repo_edit.html:94
 
msgid "Enable downloads"
 
msgstr "啟用下載"
 

	
 
#: rhodecode/templates/admin/repos/repo_edit.html:98
 
msgid "Enable download menu on summary page."
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/repos/repo_edit.html:108
 
#, fuzzy
 
msgid "Change owner of this repository."
 
msgstr "修改於版本庫 %s"
 

	
 
#: rhodecode/templates/admin/repos/repo_edit.html:134
 
msgid "Administration"
 
msgstr "管理者"
 

	
 
#: rhodecode/templates/admin/repos/repo_edit.html:137
 
msgid "Statistics"
 
msgstr "統計"
 

	
 
#: rhodecode/templates/admin/repos/repo_edit.html:141
 
msgid "Reset current statistics"
 
msgstr "重設目前的統計"
 

	
 
#: rhodecode/templates/admin/repos/repo_edit.html:141
 
msgid "Confirm to remove current statistics"
 
msgstr "確認移除目前的統計"
 

	
 
@@ -1684,197 +1712,186 @@ msgid ""
 
"unaccesible for RhodeCode and VCS systems.\n"
 
"                         If you need fully delete it from filesystem "
 
"please do it manually"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/repos/repo_edit.html:213
 
msgid "Set as fork"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/repos/repo_edit.html:222
 
msgid "Manually set this repository as a fork of another"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/repos/repo_edit_perms.html:3
 
#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:3
 
msgid "none"
 
msgstr "無"
 

	
 
#: rhodecode/templates/admin/repos/repo_edit_perms.html:4
 
#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:4
 
msgid "read"
 
msgstr "讀"
 

	
 
#: rhodecode/templates/admin/repos/repo_edit_perms.html:5
 
#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:5
 
msgid "write"
 
msgstr "寫"
 

	
 
#: rhodecode/templates/admin/repos/repo_edit_perms.html:6
 
#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:6
 
#: rhodecode/templates/admin/users/users.html:38
 
#: rhodecode/templates/base/base.html:214
 
msgid "admin"
 
msgstr "管理員"
 

	
 
#: rhodecode/templates/admin/repos/repo_edit_perms.html:7
 
#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:7
 
msgid "member"
 
msgstr "成員"
 

	
 
#: rhodecode/templates/admin/repos/repo_edit_perms.html:16
 
#: rhodecode/templates/data_table/_dt_elements.html:61
 
#: rhodecode/templates/journal/journal.html:123
 
#: rhodecode/templates/summary/summary.html:71
 
msgid "private repository"
 
msgstr "私有版本庫"
 

	
 
#: rhodecode/templates/admin/repos/repo_edit_perms.html:33
 
#: rhodecode/templates/admin/repos/repo_edit_perms.html:53
 
#: rhodecode/templates/admin/repos/repo_edit_perms.html:58
 
#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:23
 
#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:42
 
msgid "revoke"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/repos/repo_edit_perms.html:75
 
#: rhodecode/templates/admin/repos/repo_edit_perms.html:80
 
#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:64
 
msgid "Add another member"
 
msgstr "新增另ㄧ位成員"
 

	
 
#: rhodecode/templates/admin/repos/repo_edit_perms.html:89
 
#: rhodecode/templates/admin/repos/repo_edit_perms.html:94
 
#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:78
 
msgid "Failed to remove user"
 
msgstr "移除使用者失敗"
 

	
 
#: rhodecode/templates/admin/repos/repo_edit_perms.html:104
 
#: rhodecode/templates/admin/repos/repo_edit_perms.html:109
 
#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:93
 
msgid "Failed to remove users group"
 
msgstr "移除使用者群組失敗"
 

	
 
#: rhodecode/templates/admin/repos/repo_edit_perms.html:123
 
#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:112
 
msgid "Group"
 
msgstr "群組"
 

	
 
#: rhodecode/templates/admin/repos/repo_edit_perms.html:124
 
#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:113
 
#: rhodecode/templates/admin/users_groups/users_groups.html:33
 
msgid "members"
 
msgstr "成員"
 

	
 
#: rhodecode/templates/admin/repos/repos.html:5
 
msgid "Repositories administration"
 
msgstr "版本庫管理員"
 

	
 
#: rhodecode/templates/admin/repos/repos.html:40
 
#: rhodecode/templates/summary/summary.html:107
 
msgid "Contact"
 
msgstr "聯絡方式"
 

	
 
#: rhodecode/templates/admin/repos/repos.html:68
 
#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:54
 
#: rhodecode/templates/admin/users/users.html:55
 
#: rhodecode/templates/admin/users_groups/users_groups.html:44
 
msgid "delete"
 
msgstr "刪除"
 

	
 
#: rhodecode/templates/admin/repos/repos.html:68
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:158
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:74
 
#, fuzzy, python-format
 
msgid "Confirm to delete this repository: %s"
 
msgstr "確認移除這個版本庫"
 

	
 
#: rhodecode/templates/admin/repos_groups/repos_groups.html:8
 
msgid "Groups"
 
msgstr "群組"
 

	
 
#: rhodecode/templates/admin/repos_groups/repos_groups.html:12
 
msgid "with"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/repos_groups/repos_groups_add.html:5
 
msgid "Add repos group"
 
msgstr "新增版本庫群組"
 

	
 
#: rhodecode/templates/admin/repos_groups/repos_groups_add.html:10
 
#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:10
 
msgid "Repos groups"
 
msgstr "版本庫群組"
 

	
 
#: rhodecode/templates/admin/repos_groups/repos_groups_add.html:12
 
msgid "add new repos group"
 
msgstr "新增版本庫群組"
 

	
 
#: rhodecode/templates/admin/repos_groups/repos_groups_add.html:50
 
#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:50
 
msgid "Group parent"
 
msgstr "父群組"
 

	
 
#: rhodecode/templates/admin/repos_groups/repos_groups_add.html:58
 
#: rhodecode/templates/admin/users/user_add.html:94
 
#: rhodecode/templates/admin/users_groups/users_group_add.html:49
 
#: rhodecode/templates/admin/users_groups/users_group_edit.html:90
 
msgid "save"
 
msgstr "儲存"
 

	
 
#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:5
 
msgid "Edit repos group"
 
msgstr "編輯版本庫群組"
 

	
 
#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:12
 
msgid "edit repos group"
 
msgstr "編輯版本庫群組"
 

	
 
#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:67
 
#: rhodecode/templates/admin/settings/settings.html:112
 
#: rhodecode/templates/admin/settings/settings.html:177
 
#: rhodecode/templates/admin/users/user_edit.html:130
 
#: rhodecode/templates/admin/users/user_edit.html:155
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:103
 
#: rhodecode/templates/admin/users/user_edit_my_account_form.html:80
 
#: rhodecode/templates/admin/users_groups/users_group_edit.html:116
 
#: rhodecode/templates/files/files_add.html:82
 
#: rhodecode/templates/files/files_edit.html:68
 
#: rhodecode/templates/settings/repo_settings.html:85
 
msgid "Reset"
 
msgstr "重設"
 

	
 
#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:5
 
msgid "Repositories groups administration"
 
msgstr "版本庫群組管理員"
 

	
 
#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:22
 
msgid "ADD NEW GROUP"
 
msgstr "新增群組"
 

	
 
#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:35
 
#, fuzzy
 
msgid "Number of toplevel repositories"
 
msgstr "版本庫數量"
 

	
 
#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:36
 
#: rhodecode/templates/admin/users/users.html:40
 
#: rhodecode/templates/admin/users_groups/users_groups.html:35
 
msgid "action"
 
msgstr "動作"
 

	
 
#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:54
 
#, fuzzy, python-format
 
msgid "Confirm to delete this group: %s"
 
msgstr "確認刪除這個群組"
 

	
 
#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:62
 
msgid "There are no repositories groups yet"
 
msgstr "沒有任何版本庫群組"
 

	
 
#: rhodecode/templates/admin/settings/hooks.html:5
 
#: rhodecode/templates/admin/settings/settings.html:5
 
msgid "Settings administration"
 
msgstr "設定管理員"
 

	
 
#: rhodecode/templates/admin/settings/hooks.html:9
 
#: rhodecode/templates/admin/settings/settings.html:9
 
#: rhodecode/templates/settings/repo_settings.html:5
 
#: rhodecode/templates/settings/repo_settings.html:13
 
msgid "Settings"
 
msgstr "設定"
 

	
 
#: rhodecode/templates/admin/settings/hooks.html:24
 
@@ -2013,182 +2030,182 @@ msgstr ""
 
msgid "Email to"
 
msgstr "電子郵件"
 

	
 
#: rhodecode/templates/admin/settings/settings.html:207
 
#, fuzzy
 
msgid "Send"
 
msgstr "秒"
 

	
 
#: rhodecode/templates/admin/settings/settings.html:213
 
msgid "System Info and Packages"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/settings/settings.html:216
 
#, fuzzy
 
msgid "show"
 
msgstr "顯示"
 

	
 
#: rhodecode/templates/admin/users/user_add.html:5
 
msgid "Add user"
 
msgstr "新增使用者"
 

	
 
#: rhodecode/templates/admin/users/user_add.html:10
 
#: rhodecode/templates/admin/users/user_edit.html:11
 
#: rhodecode/templates/admin/users/users.html:9
 
msgid "Users"
 
msgstr "使用者"
 

	
 
#: rhodecode/templates/admin/users/user_add.html:12
 
msgid "add new user"
 
msgstr "新增使用者"
 

	
 
#: rhodecode/templates/admin/users/user_add.html:50
 
#, fuzzy
 
msgid "Password confirmation"
 
msgstr "密碼不相符"
 

	
 
#: rhodecode/templates/admin/users/user_add.html:86
 
#: rhodecode/templates/admin/users/user_edit.html:113
 
#: rhodecode/templates/admin/users_groups/users_group_add.html:41
 
#: rhodecode/templates/admin/users_groups/users_group_edit.html:42
 
msgid "Active"
 
msgstr "啟用"
 

	
 
#: rhodecode/templates/admin/users/user_edit.html:5
 
msgid "Edit user"
 
msgstr "編輯使用者"
 

	
 
#: rhodecode/templates/admin/users/user_edit.html:34
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:33
 
#: rhodecode/templates/admin/users/user_edit_my_account_form.html:10
 
msgid "Change your avatar at"
 
msgstr "修改您的頭像於"
 

	
 
#: rhodecode/templates/admin/users/user_edit.html:35
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:34
 
#: rhodecode/templates/admin/users/user_edit_my_account_form.html:11
 
msgid "Using"
 
msgstr "使用中"
 

	
 
#: rhodecode/templates/admin/users/user_edit.html:43
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:43
 
#: rhodecode/templates/admin/users/user_edit_my_account_form.html:20
 
msgid "API key"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/users/user_edit.html:59
 
msgid "LDAP DN"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/users/user_edit.html:68
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:58
 
#: rhodecode/templates/admin/users/user_edit_my_account_form.html:35
 
msgid "New password"
 
msgstr "新密碼"
 

	
 
#: rhodecode/templates/admin/users/user_edit.html:77
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:67
 
#: rhodecode/templates/admin/users/user_edit_my_account_form.html:44
 
msgid "New password confirmation"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/users/user_edit.html:147
 
#: rhodecode/templates/admin/users_groups/users_group_edit.html:108
 
msgid "Create repositories"
 
msgstr "建立版本庫"
 

	
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:5
 
#: rhodecode/templates/base/base.html:124
 
msgid "My account"
 
msgstr "我的帳號"
 

	
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:9
 
msgid "My Account"
 
msgstr "我的帳號"
 

	
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:116
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:32
 
#: rhodecode/templates/journal/journal.html:32
 
#, fuzzy
 
msgid "My repos"
 
msgstr "空的版本庫"
 

	
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:116
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:32
 
#, fuzzy
 
msgid "My permissions"
 
msgstr "權限"
 

	
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:121
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:37
 
#: rhodecode/templates/journal/journal.html:37
 
#, fuzzy
 
msgid "ADD"
 
msgstr "新增"
 

	
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:134
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:50
 
#: rhodecode/templates/bookmarks/bookmarks.html:40
 
#: rhodecode/templates/bookmarks/bookmarks_data.html:9
 
#: rhodecode/templates/branches/branches.html:40
 
#: rhodecode/templates/journal/journal.html:51
 
#: rhodecode/templates/tags/tags.html:40
 
#: rhodecode/templates/tags/tags_data.html:9
 
msgid "Revision"
 
msgstr "修訂"
 

	
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:155
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:71
 
#: rhodecode/templates/journal/journal.html:72
 
msgid "private"
 
msgstr "私有"
 

	
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:165
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:81
 
#: rhodecode/templates/journal/journal.html:85
 
msgid "No repositories yet"
 
msgstr "沒有任何版本庫"
 

	
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:167
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:83
 
#: rhodecode/templates/journal/journal.html:87
 
msgid "create one now"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:184
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:285
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:100
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:201
 
#, fuzzy
 
msgid "Permission"
 
msgstr "權限"
 

	
 
#: rhodecode/templates/admin/users/users.html:5
 
msgid "Users administration"
 
msgstr "使用者管理員"
 

	
 
#: rhodecode/templates/admin/users/users.html:23
 
msgid "ADD NEW USER"
 
msgstr "新增使用者"
 

	
 
#: rhodecode/templates/admin/users/users.html:33
 
msgid "username"
 
msgstr "使用者名稱"
 

	
 
#: rhodecode/templates/admin/users/users.html:34
 
#: rhodecode/templates/branches/branches_data.html:6
 
msgid "name"
 
msgstr "名字"
 

	
 
#: rhodecode/templates/admin/users/users.html:35
 
msgid "lastname"
 
msgstr "姓"
 

	
 
#: rhodecode/templates/admin/users/users.html:36
 
msgid "last login"
 
msgstr "最後登入"
 

	
 
#: rhodecode/templates/admin/users/users.html:37
 
#: rhodecode/templates/admin/users_groups/users_groups.html:34
 
msgid "active"
 
msgstr "啟用"
 

	
 
#: rhodecode/templates/admin/users/users.html:39
 
#: rhodecode/templates/base/base.html:223
 
msgid "ldap"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/users/users.html:56
 
#, fuzzy, python-format
 
msgid "Confirm to delete this user: %s"
 
msgstr "確認刪除這個使用者"
 

	
 
#: rhodecode/templates/admin/users_groups/users_group_add.html:5
 
msgid "Add users group"
 
msgstr "新增使用者群組"
 

	
 
@@ -2201,96 +2218,101 @@ msgstr "使用者群組"
 
msgid "add new users group"
 
msgstr "新增使用者群組"
 

	
 
#: rhodecode/templates/admin/users_groups/users_group_edit.html:5
 
msgid "Edit users group"
 
msgstr "編輯使用者群組"
 

	
 
#: rhodecode/templates/admin/users_groups/users_group_edit.html:11
 
msgid "UsersGroups"
 
msgstr "使用者群組"
 

	
 
#: rhodecode/templates/admin/users_groups/users_group_edit.html:50
 
msgid "Members"
 
msgstr "成員"
 

	
 
#: rhodecode/templates/admin/users_groups/users_group_edit.html:58
 
msgid "Choosen group members"
 
msgstr "選擇群組成員"
 

	
 
#: rhodecode/templates/admin/users_groups/users_group_edit.html:61
 
msgid "Remove all elements"
 
msgstr "移除所有元素"
 

	
 
#: rhodecode/templates/admin/users_groups/users_group_edit.html:75
 
msgid "Available members"
 
msgstr "啟用的成員"
 

	
 
#: rhodecode/templates/admin/users_groups/users_group_edit.html:79
 
msgid "Add all elements"
 
msgstr "新增索有元素"
 

	
 
#: rhodecode/templates/admin/users_groups/users_group_edit.html:126
 
#, fuzzy
 
msgid "Group members"
 
msgstr "選擇群組成員"
 

	
 
#: rhodecode/templates/admin/users_groups/users_groups.html:5
 
msgid "Users groups administration"
 
msgstr "使用者群組管理員"
 

	
 
#: rhodecode/templates/admin/users_groups/users_groups.html:23
 
msgid "ADD NEW USER GROUP"
 
msgstr "建立新的使用者群組"
 

	
 
#: rhodecode/templates/admin/users_groups/users_groups.html:32
 
msgid "group name"
 
msgstr "群組名稱"
 

	
 
#: rhodecode/templates/admin/users_groups/users_groups.html:33
 
#: rhodecode/templates/base/root.html:46
 
msgid "members"
 
msgstr "成員"
 

	
 
#: rhodecode/templates/admin/users_groups/users_groups.html:45
 
#, fuzzy, python-format
 
msgid "Confirm to delete this users group: %s"
 
msgstr "確認刪除這個群組"
 

	
 
#: rhodecode/templates/base/base.html:41
 
msgid "Submit a bug"
 
msgstr "回報錯誤"
 

	
 
#: rhodecode/templates/base/base.html:77
 
msgid "Login to your account"
 
msgstr ""
 

	
 
#: rhodecode/templates/base/base.html:100
 
msgid "Forgot password ?"
 
msgstr "忘記密碼?"
 

	
 
#: rhodecode/templates/base/base.html:107
 
#, fuzzy
 
msgid "Log In"
 
msgstr "登入"
 

	
 
#: rhodecode/templates/base/base.html:118
 
msgid "Inbox"
 
msgstr ""
 

	
 
#: rhodecode/templates/base/base.html:122
 
#: rhodecode/templates/base/base.html:289
 
#: rhodecode/templates/base/base.html:291
 
#: rhodecode/templates/base/base.html:293
 
msgid "Home"
 
msgstr "首頁"
 

	
 
#: rhodecode/templates/base/base.html:123
 
#: rhodecode/templates/base/base.html:298
 
#: rhodecode/templates/base/base.html:300
 
#: rhodecode/templates/base/base.html:302
 
#: rhodecode/templates/journal/journal.html:4
 
#: rhodecode/templates/journal/journal.html:17
 
#: rhodecode/templates/journal/public_journal.html:4
 
msgid "Journal"
 
msgstr "日誌"
 

	
 
#: rhodecode/templates/base/base.html:125
 
msgid "Log Out"
 
msgstr "登出"
 

	
 
#: rhodecode/templates/base/base.html:144
 
@@ -2361,112 +2383,116 @@ msgstr "設定"
 
msgid "fork"
 
msgstr ""
 

	
 
#: rhodecode/templates/base/base.html:210
 
msgid "search"
 
msgstr "搜尋"
 

	
 
#: rhodecode/templates/base/base.html:217
 
msgid "journal"
 
msgstr "日誌"
 

	
 
#: rhodecode/templates/base/base.html:219
 
msgid "repositories groups"
 
msgstr "版本庫群組"
 

	
 
#: rhodecode/templates/base/base.html:220
 
msgid "users"
 
msgstr "使用者"
 

	
 
#: rhodecode/templates/base/base.html:221
 
msgid "users groups"
 
msgstr "使用者群組"
 

	
 
#: rhodecode/templates/base/base.html:222
 
msgid "permissions"
 
msgstr "權限"
 

	
 
#: rhodecode/templates/base/base.html:235
 
#: rhodecode/templates/base/base.html:237
 
#: rhodecode/templates/followers/followers.html:5
 
msgid "Followers"
 
msgstr "追蹤者"
 

	
 
#: rhodecode/templates/base/base.html:243
 
#: rhodecode/templates/base/base.html:245
 
#: rhodecode/templates/forks/forks.html:5
 
msgid "Forks"
 
msgstr ""
 

	
 
#: rhodecode/templates/base/base.html:316
 
#: rhodecode/templates/base/base.html:318
 
#: rhodecode/templates/base/base.html:320
 
#: rhodecode/templates/search/search.html:4
 
#: rhodecode/templates/search/search.html:24
 
#: rhodecode/templates/search/search.html:46
 
msgid "Search"
 
msgstr "搜尋"
 

	
 
#: rhodecode/templates/base/root.html:53
 
#: rhodecode/templates/base/root.html:42
 
#, fuzzy
 
msgid "add another comment"
 
msgstr "新增另ㄧ位成員"
 

	
 
#: rhodecode/templates/base/root.html:54
 
#: rhodecode/templates/base/root.html:43
 
#: rhodecode/templates/journal/journal.html:111
 
#: rhodecode/templates/summary/summary.html:52
 
msgid "Stop following this repository"
 
msgstr "停止追蹤這個版本庫"
 

	
 
#: rhodecode/templates/base/root.html:55
 
#: rhodecode/templates/base/root.html:44
 
#: rhodecode/templates/summary/summary.html:56
 
msgid "Start following this repository"
 
msgstr "開始追蹤這個版本庫"
 

	
 
#: rhodecode/templates/base/root.html:45
 
msgid "Group"
 
msgstr "群組"
 

	
 
#: rhodecode/templates/bookmarks/bookmarks.html:5
 
msgid "Bookmarks"
 
msgstr ""
 

	
 
#: rhodecode/templates/bookmarks/bookmarks.html:39
 
#: rhodecode/templates/bookmarks/bookmarks_data.html:8
 
#: rhodecode/templates/branches/branches.html:39
 
#: rhodecode/templates/tags/tags.html:39
 
#: rhodecode/templates/tags/tags_data.html:8
 
#, fuzzy
 
msgid "Author"
 
msgstr "作者"
 

	
 
#: rhodecode/templates/branches/branches_data.html:7
 
msgid "date"
 
msgstr "日期"
 

	
 
#: rhodecode/templates/branches/branches_data.html:8
 
#: rhodecode/templates/shortlog/shortlog_data.html:8
 
msgid "author"
 
msgstr "作者"
 

	
 
#: rhodecode/templates/branches/branches_data.html:9
 
#: rhodecode/templates/shortlog/shortlog_data.html:5
 
msgid "revision"
 
msgstr "修訂"
 

	
 
#: rhodecode/templates/changelog/changelog.html:15
 
#, python-format
 
msgid "showing %d out of %d revision"
 
msgid_plural "showing %d out of %d revisions"
 
msgstr[0] ""
 

	
 
#: rhodecode/templates/changelog/changelog.html:38
 
msgid "Show"
 
msgstr "顯示"
 

	
 
#: rhodecode/templates/changelog/changelog.html:64
 
#: rhodecode/templates/summary/summary.html:352
 
msgid "show more"
 
msgstr "顯示更多"
 

	
 
#: rhodecode/templates/changelog/changelog.html:68
 
msgid "Affected number of files, click to show more details"
 
msgstr ""
 

	
 
#: rhodecode/templates/changelog/changelog.html:82
 
#: rhodecode/templates/changeset/changeset.html:72
 
@@ -2505,158 +2531,158 @@ msgstr "標籤"
 
msgid "Show selected changes __S -> __E"
 
msgstr ""
 

	
 
#: rhodecode/templates/changelog/changelog.html:235
 
msgid "There are no changes yet"
 
msgstr "尚未有任何變更"
 

	
 
#: rhodecode/templates/changelog/changelog_details.html:2
 
#: rhodecode/templates/changeset/changeset.html:60
 
msgid "removed"
 
msgstr "移除"
 

	
 
#: rhodecode/templates/changelog/changelog_details.html:3
 
#: rhodecode/templates/changeset/changeset.html:61
 
msgid "changed"
 
msgstr "修改"
 

	
 
#: rhodecode/templates/changelog/changelog_details.html:4
 
#: rhodecode/templates/changeset/changeset.html:62
 
msgid "added"
 
msgstr "新增"
 

	
 
#: rhodecode/templates/changelog/changelog_details.html:6
 
#: rhodecode/templates/changelog/changelog_details.html:7
 
#: rhodecode/templates/changelog/changelog_details.html:8
 
#: rhodecode/templates/changeset/changeset.html:64
 
#: rhodecode/templates/changeset/changeset.html:65
 
#: rhodecode/templates/changeset/changeset.html:66
 
#, python-format
 
msgid "affected %s files"
 
msgstr ""
 

	
 
#: rhodecode/templates/changeset/changeset.html:6
 
#: rhodecode/templates/changeset/changeset.html:14
 
msgid "Changeset"
 
msgstr ""
 

	
 
#: rhodecode/templates/changeset/changeset.html:37
 
#: rhodecode/templates/changeset/diff_block.html:20
 
msgid "raw diff"
 
msgstr "原始差異"
 

	
 
#: rhodecode/templates/changeset/changeset.html:38
 
#: rhodecode/templates/changeset/diff_block.html:21
 
msgid "download diff"
 
msgstr "下載差異"
 

	
 
#: rhodecode/templates/changeset/changeset.html:42
 
#: rhodecode/templates/changeset/changeset_file_comment.html:69
 
#: rhodecode/templates/changeset/changeset_file_comment.html:71
 
#, fuzzy, python-format
 
msgid "%d comment"
 
msgid_plural "%d comments"
 
msgstr[0] "遞交"
 

	
 
#: rhodecode/templates/changeset/changeset.html:42
 
#: rhodecode/templates/changeset/changeset_file_comment.html:69
 
#: rhodecode/templates/changeset/changeset_file_comment.html:71
 
#, python-format
 
msgid "(%d inline)"
 
msgid_plural "(%d inline)"
 
msgstr[0] ""
 

	
 
#: rhodecode/templates/changeset/changeset.html:97
 
#, python-format
 
msgid "%s files affected with %s insertions and %s deletions:"
 
msgstr ""
 

	
 
#: rhodecode/templates/changeset/changeset.html:113
 
msgid "Changeset was too big and was cut off..."
 
msgstr ""
 

	
 
#: rhodecode/templates/changeset/changeset_file_comment.html:35
 
msgid "Submitting..."
 
msgstr ""
 

	
 
#: rhodecode/templates/changeset/changeset_file_comment.html:38
 
msgid "Commenting on line {1}."
 
msgstr ""
 

	
 
#: rhodecode/templates/changeset/changeset_file_comment.html:39
 
#: rhodecode/templates/changeset/changeset_file_comment.html:100
 
#: rhodecode/templates/changeset/changeset_file_comment.html:102
 
#, python-format
 
msgid "Comments parsed using %s syntax with %s support."
 
msgstr ""
 

	
 
#: rhodecode/templates/changeset/changeset_file_comment.html:41
 
#: rhodecode/templates/changeset/changeset_file_comment.html:102
 
#: rhodecode/templates/changeset/changeset_file_comment.html:104
 
msgid "Use @username inside this text to send notification to this RhodeCode user"
 
msgstr ""
 

	
 
#: rhodecode/templates/changeset/changeset_file_comment.html:47
 
#: rhodecode/templates/changeset/changeset_file_comment.html:107
 
#: rhodecode/templates/changeset/changeset_file_comment.html:49
 
#: rhodecode/templates/changeset/changeset_file_comment.html:110
 
#, fuzzy
 
msgid "Comment"
 
msgstr "遞交"
 

	
 
#: rhodecode/templates/changeset/changeset_file_comment.html:48
 
#: rhodecode/templates/changeset/changeset_file_comment.html:59
 
#: rhodecode/templates/changeset/changeset_file_comment.html:50
 
#: rhodecode/templates/changeset/changeset_file_comment.html:61
 
msgid "Hide"
 
msgstr ""
 

	
 
#: rhodecode/templates/changeset/changeset_file_comment.html:55
 
#: rhodecode/templates/changeset/changeset_file_comment.html:57
 
#, fuzzy
 
msgid "You need to be logged in to comment."
 
msgstr "您必須登入後才能瀏覽這個頁面"
 

	
 
#: rhodecode/templates/changeset/changeset_file_comment.html:55
 
#: rhodecode/templates/changeset/changeset_file_comment.html:57
 
msgid "Login now"
 
msgstr ""
 

	
 
#: rhodecode/templates/changeset/changeset_file_comment.html:97
 
#: rhodecode/templates/changeset/changeset_file_comment.html:99
 
msgid "Leave a comment"
 
msgstr ""
 

	
 
#: rhodecode/templates/changeset/changeset_range.html:29
 
msgid "Compare View"
 
msgstr "比較顯示"
 

	
 
#: rhodecode/templates/changeset/changeset_range.html:49
 
msgid "Files affected"
 
msgstr ""
 

	
 
#: rhodecode/templates/changeset/diff_block.html:19
 
msgid "diff"
 
msgstr "差異"
 

	
 
#: rhodecode/templates/changeset/diff_block.html:27
 
#, fuzzy
 
msgid "show inline comments"
 
msgstr "文件內容"
 

	
 
#: rhodecode/templates/data_table/_dt_elements.html:33
 
#: rhodecode/templates/data_table/_dt_elements.html:35
 
#: rhodecode/templates/data_table/_dt_elements.html:37
 
#: rhodecode/templates/forks/fork.html:5
 
msgid "Fork"
 
msgstr "分支"
 

	
 
#: rhodecode/templates/data_table/_dt_elements.html:54
 
#: rhodecode/templates/journal/journal.html:117
 
#: rhodecode/templates/summary/summary.html:63
 
msgid "Mercurial repository"
 
msgstr "Mercurial 版本庫"
 

	
 
#: rhodecode/templates/data_table/_dt_elements.html:56
 
#: rhodecode/templates/journal/journal.html:119
 
#: rhodecode/templates/summary/summary.html:66
 
msgid "Git repository"
 
msgstr "Git 版本庫"
 

	
 
#: rhodecode/templates/data_table/_dt_elements.html:63
 
#: rhodecode/templates/journal/journal.html:125
 
#: rhodecode/templates/summary/summary.html:73
 
msgid "public repository"
 
msgstr "公開版本庫"
 

	
 
#: rhodecode/templates/data_table/_dt_elements.html:74
 
#: rhodecode/templates/summary/summary.html:82
 
#: rhodecode/templates/summary/summary.html:83
 
@@ -3071,54 +3097,54 @@ msgid "Commit activity by day / author"
 
msgstr ""
 

	
 
#: rhodecode/templates/summary/summary.html:188
 
msgid "Stats gathered: "
 
msgstr ""
 

	
 
#: rhodecode/templates/summary/summary.html:211
 
#, fuzzy
 
msgid "Quick start"
 
msgstr "快速過濾..."
 

	
 
#: rhodecode/templates/summary/summary.html:281
 
#, python-format
 
msgid "Download %s as %s"
 
msgstr "下載 %s 為 %s"
 

	
 
#: rhodecode/templates/summary/summary.html:638
 
msgid "commits"
 
msgstr "遞交"
 

	
 
#: rhodecode/templates/summary/summary.html:639
 
msgid "files added"
 
msgstr "多個檔案新增"
 

	
 
#: rhodecode/templates/summary/summary.html:640
 
msgid "files changed"
 
msgstr "多個檔案修改"
 

	
 
#: rhodecode/templates/summary/summary.html:641
 
msgid "files removed"
 
msgstr "移除多個檔案"
 

	
 
#: rhodecode/templates/summary/summary.html:644
 
msgid "commit"
 
msgstr "遞交"
 

	
 
#: rhodecode/templates/summary/summary.html:645
 
msgid "file added"
 
msgstr "檔案新增"
 

	
 
#: rhodecode/templates/summary/summary.html:646
 
msgid "file changed"
 
msgstr "檔案修改"
 

	
 
#: rhodecode/templates/summary/summary.html:647
 
msgid "file removed"
 
msgstr "移除檔案"
 

	
 
#~ msgid ""
 
#~ "Changeset was to big and was cut"
 
#~ " off, use diff menu to display "
 
#~ "this diff"
 
#~ msgid "[committed via RhodeCode] into"
 
#~ msgstr ""
 

	
 
#~ msgid "[pulled from remote] into"
 
#~ msgstr ""
 

	
rhodecode/lib/base.py
Show inline comments
 
"""The base Controller API
 

	
 
Provides the BaseController class for subclassing.
 
"""
 
import logging
 
import time
 
import traceback
 

	
 
from paste.auth.basic import AuthBasicAuthenticator
 
from paste.httpexceptions import HTTPUnauthorized, HTTPForbidden
 
from paste.httpheaders import WWW_AUTHENTICATE
 

	
 
from pylons import config, tmpl_context as c, request, session, url
 
from pylons.controllers import WSGIController
 
from pylons.controllers.util import redirect
 
from pylons.templating import render_mako as render
 

	
 
from rhodecode import __version__, BACKENDS
 

	
 
from rhodecode.lib.utils2 import str2bool, safe_unicode
 
from rhodecode.lib.auth import AuthUser, get_container_username, authfunc,\
 
    HasPermissionAnyMiddleware, CookieStoreWrapper
 
from rhodecode.lib.utils import get_repo_slug, invalidate_cache
 
from rhodecode.model import meta
 

	
 
from rhodecode.model.db import Repository
 
from rhodecode.model.notification import NotificationModel
 
from rhodecode.model.scm import ScmModel
 

	
 
log = logging.getLogger(__name__)
 

	
 

	
 
def _get_ip_addr(environ):
 
    proxy_key = 'HTTP_X_REAL_IP'
 
    proxy_key2 = 'HTTP_X_FORWARDED_FOR'
 
    def_key = 'REMOTE_ADDR'
 

	
 
    return environ.get(proxy_key2,
 
                       environ.get(proxy_key, environ.get(def_key, '0.0.0.0'))
 
                       )
 

	
 

	
 
class BasicAuth(AuthBasicAuthenticator):
 

	
 
    def __init__(self, realm, authfunc, auth_http_code=None):
 
        self.realm = realm
 
        self.authfunc = authfunc
 
        self._rc_auth_http_code = auth_http_code
 

	
 
    def build_authentication(self):
 
        head = WWW_AUTHENTICATE.tuples('Basic realm="%s"' % self.realm)
 
        if self._rc_auth_http_code and self._rc_auth_http_code == '403':
 
            # return 403 if alternative http return code is specified in
 
            # RhodeCode config
 
            return HTTPForbidden(headers=head)
 
        return HTTPUnauthorized(headers=head)
 

	
 

	
 
class BaseVCSController(object):
 

	
 
    def __init__(self, application, config):
 
        self.application = application
 
        self.config = config
 
        # base path of repo locations
 
        self.basepath = self.config['base_path']
 
        #authenticate this mercurial request using authfunc
 
        self.authenticate = BasicAuth('', authfunc,
 
                                      config.get('auth_ret_code'))
 
        self.ipaddr = '0.0.0.0'
 

	
 
    def _handle_request(self, environ, start_response):
 
        raise NotImplementedError()
 

	
 
    def _get_by_id(self, repo_name):
 
        """
 
        Get's a special pattern _<ID> from clone url and tries to replace it
 
        with a repository_name for support of _<ID> non changable urls
 

	
 
        :param repo_name:
 
        """
 
        try:
 
            data = repo_name.split('/')
 
            if len(data) >= 2:
 
                by_id = data[1].split('_')
 
                if len(by_id) == 2 and by_id[1].isdigit():
 
                    _repo_name = Repository.get(by_id[1]).repo_name
 
                    data[1] = _repo_name
 
        except:
 
            log.debug('Failed to extract repo_name from id %s' % (
 
                      traceback.format_exc()
 
                      )
 
            )
 

	
 
        return '/'.join(data)
 

	
 
    def _invalidate_cache(self, repo_name):
 
        """
 
        Set's cache for this repository for invalidation on next access
 

	
 
        :param repo_name: full repo name, also a cache key
 
        """
 
        invalidate_cache('get_repo_cached_%s' % repo_name)
 

	
 
    def _check_permission(self, action, user, repo_name):
 
        """
 
        Checks permissions using action (push/pull) user and repository
 
        name
 

	
 
        :param action: push or pull action
 
        :param user: user instance
 
        :param repo_name: repository name
 
        """
 
        if action == 'push':
 
            if not HasPermissionAnyMiddleware('repository.write',
 
                                              'repository.admin')(user,
 
                                                                  repo_name):
 
                return False
 

	
 
        else:
 
            #any other action need at least read permission
 
            if not HasPermissionAnyMiddleware('repository.read',
 
                                              'repository.write',
 
                                              'repository.admin')(user,
 
                                                                  repo_name):
 
                return False
 

	
 
        return True
 

	
 
    def _get_ip_addr(self, environ):
 
        proxy_key = 'HTTP_X_REAL_IP'
 
        proxy_key2 = 'HTTP_X_FORWARDED_FOR'
 
        def_key = 'REMOTE_ADDR'
 

	
 
        return environ.get(proxy_key2,
 
                           environ.get(proxy_key,
 
                                       environ.get(def_key, '0.0.0.0')
 
                            )
 
                        )
 
        return _get_ip_addr(environ)
 

	
 
    def __call__(self, environ, start_response):
 
        start = time.time()
 
        try:
 
            return self._handle_request(environ, start_response)
 
        finally:
 
            log = logging.getLogger('rhodecode.' + self.__class__.__name__)
 
            log.debug('Request time: %.3fs' % (time.time() - start))
 
            meta.Session.remove()
 

	
 

	
 
class BaseController(WSGIController):
 

	
 
    def __before__(self):
 
        c.rhodecode_version = __version__
 
        c.rhodecode_instanceid = config.get('instance_id')
 
        c.rhodecode_name = config.get('rhodecode_title')
 
        c.use_gravatar = str2bool(config.get('use_gravatar'))
 
        c.ga_code = config.get('rhodecode_ga_code')
 
        c.repo_name = get_repo_slug(request)
 
        c.backends = BACKENDS.keys()
 
        c.unread_notifications = NotificationModel()\
 
                        .get_unread_cnt_for_user(c.rhodecode_user.user_id)
 
        self.cut_off_limit = int(config.get('cut_off_limit'))
 

	
 
        self.sa = meta.Session
 
        self.scm_model = ScmModel(self.sa)
 
        self.ip_addr = ''
 

	
 
    def __call__(self, environ, start_response):
 
        """Invoke the Controller"""
 
        # WSGIController.__call__ dispatches to the Controller method
 
        # the request is routed to. This routing information is
 
        # available in environ['pylons.routes_dict']
 
        start = time.time()
 
        try:
 
            self.ip_addr = _get_ip_addr(environ)
 
            # make sure that we update permissions each time we call controller
 
            api_key = request.GET.get('api_key')
 
            cookie_store = CookieStoreWrapper(session.get('rhodecode_user'))
 
            user_id = cookie_store.get('user_id', None)
 
            username = get_container_username(environ, config)
 
            auth_user = AuthUser(user_id, api_key, username)
 
            request.user = auth_user
 
            self.rhodecode_user = c.rhodecode_user = auth_user
 
            if not self.rhodecode_user.is_authenticated and \
 
                       self.rhodecode_user.user_id is not None:
 
                self.rhodecode_user.set_authenticated(
 
                    cookie_store.get('is_authenticated')
 
                )
 
            log.info('User: %s accessed %s' % (
 
                auth_user, safe_unicode(environ.get('PATH_INFO')))
 
            )
 
            return WSGIController.__call__(self, environ, start_response)
 
        finally:
 
            log.info('Request to %s time: %.3fs' % (
 
                safe_unicode(environ.get('PATH_INFO')), time.time() - start)
 
            )
 
            meta.Session.remove()
 

	
 

	
 
class BaseRepoController(BaseController):
 
    """
 
    Base class for controllers responsible for loading all needed data for
 
    repository loaded items are
 

	
 
    c.rhodecode_repo: instance of scm repository
 
    c.rhodecode_db_repo: instance of db
 
    c.repository_followers: number of followers
 
    c.repository_forks: number of forks
 
    """
 

	
 
    def __before__(self):
 
        super(BaseRepoController, self).__before__()
 
        if c.repo_name:
 

	
 
            c.rhodecode_db_repo = Repository.get_by_repo_name(c.repo_name)
 
            c.rhodecode_repo = c.rhodecode_db_repo.scm_instance
 

	
 
            if c.rhodecode_repo is None:
 
                log.error('%s this repository is present in database but it '
 
                          'cannot be created as an scm instance', c.repo_name)
 

	
 
                redirect(url('home'))
 

	
rhodecode/lib/diffs.py
Show inline comments
 
@@ -90,97 +90,97 @@ def wrapped_diff(filenode_old, filenode_
 
        submodules = filter(lambda o: isinstance(o, SubModuleNode),
 
                            [filenode_new, filenode_old])
 
        if submodules:
 
            diff = wrap_to_table(escape('Submodule %r' % submodules[0]))
 
        else:
 
            diff = wrap_to_table(_('No changes detected'))
 

	
 
    cs1 = filenode_old.changeset.raw_id
 
    cs2 = filenode_new.changeset.raw_id
 

	
 
    return size, cs1, cs2, diff, stats
 

	
 

	
 
def get_gitdiff(filenode_old, filenode_new, ignore_whitespace=True, context=3):
 
    """
 
    Returns git style diff between given ``filenode_old`` and ``filenode_new``.
 

	
 
    :param ignore_whitespace: ignore whitespaces in diff
 
    """
 
    # make sure we pass in default context
 
    context = context or 3
 
    submodules = filter(lambda o: isinstance(o, SubModuleNode),
 
                        [filenode_new, filenode_old])
 
    if submodules:
 
        return ''
 

	
 
    for filenode in (filenode_old, filenode_new):
 
        if not isinstance(filenode, FileNode):
 
            raise VCSError("Given object should be FileNode object, not %s"
 
                % filenode.__class__)
 

	
 
    repo = filenode_new.changeset.repository
 
    old_raw_id = getattr(filenode_old.changeset, 'raw_id', repo.EMPTY_CHANGESET)
 
    new_raw_id = getattr(filenode_new.changeset, 'raw_id', repo.EMPTY_CHANGESET)
 

	
 
    vcs_gitdiff = repo.get_diff(old_raw_id, new_raw_id, filenode_new.path,
 
                                 ignore_whitespace, context)
 
    return vcs_gitdiff
 

	
 

	
 
class DiffProcessor(object):
 
    """
 
    Give it a unified diff and it returns a list of the files that were
 
    mentioned in the diff together with a dict of meta information that
 
    can be used to render it in a HTML template.
 
    """
 
    _chunk_re = re.compile(r'@@ -(\d+)(?:,(\d+))? \+(\d+)(?:,(\d+))? @@(.*)')
 

	
 
    def __init__(self, diff, differ='diff', format='udiff'):
 
    def __init__(self, diff, differ='diff', format='gitdiff'):
 
        """
 
        :param diff:   a text in diff format or generator
 
        :param format: format of diff passed, `udiff` or `gitdiff`
 
        """
 
        if isinstance(diff, basestring):
 
            diff = [diff]
 

	
 
        self.__udiff = diff
 
        self.__format = format
 
        self.adds = 0
 
        self.removes = 0
 

	
 
        if isinstance(self.__udiff, basestring):
 
            self.lines = iter(self.__udiff.splitlines(1))
 

	
 
        elif self.__format == 'gitdiff':
 
            udiff_copy = self.copy_iterator()
 
            self.lines = imap(self.escaper, self._parse_gitdiff(udiff_copy))
 
        else:
 
            udiff_copy = self.copy_iterator()
 
            self.lines = imap(self.escaper, udiff_copy)
 

	
 
        # Select a differ.
 
        if differ == 'difflib':
 
            self.differ = self._highlight_line_difflib
 
        else:
 
            self.differ = self._highlight_line_udiff
 

	
 
    def escaper(self, string):
 
        return markupsafe.escape(string)
 

	
 
    def copy_iterator(self):
 
        """
 
        make a fresh copy of generator, we should not iterate thru
 
        an original as it's needed for repeating operations on
 
        this instance of DiffProcessor
 
        """
 
        self.__udiff, iterator_copy = tee(self.__udiff)
 
        return iterator_copy
 

	
 
    def _extract_rev(self, line1, line2):
 
        """
 
        Extract the operation (A/M/D), filename and revision hint from a line.
 
        """
 

	
 
        try:
 
            if line1.startswith('--- ') and line2.startswith('+++ '):
 
                l1 = line1[4:].split(None, 1)
 
@@ -244,219 +244,225 @@ class DiffProcessor(object):
 

	
 
        sequence = difflib.SequenceMatcher(None, oldwords, newwords)
 

	
 
        oldfragments, newfragments = [], []
 
        for tag, i1, i2, j1, j2 in sequence.get_opcodes():
 
            oldfrag = ''.join(oldwords[i1:i2])
 
            newfrag = ''.join(newwords[j1:j2])
 
            if tag != 'equal':
 
                if oldfrag:
 
                    oldfrag = '<del>%s</del>' % oldfrag
 
                if newfrag:
 
                    newfrag = '<ins>%s</ins>' % newfrag
 
            oldfragments.append(oldfrag)
 
            newfragments.append(newfrag)
 

	
 
        old['line'] = "".join(oldfragments)
 
        new['line'] = "".join(newfragments)
 

	
 
    def _highlight_line_udiff(self, line, next_):
 
        """
 
        Highlight inline changes in both lines.
 
        """
 
        start = 0
 
        limit = min(len(line['line']), len(next_['line']))
 
        while start < limit and line['line'][start] == next_['line'][start]:
 
            start += 1
 
        end = -1
 
        limit -= start
 
        while -end <= limit and line['line'][end] == next_['line'][end]:
 
            end -= 1
 
        end += 1
 
        if start or end:
 
            def do(l):
 
                last = end + len(l['line'])
 
                if l['action'] == 'add':
 
                    tag = 'ins'
 
                else:
 
                    tag = 'del'
 
                l['line'] = '%s<%s>%s</%s>%s' % (
 
                    l['line'][:start],
 
                    tag,
 
                    l['line'][start:last],
 
                    tag,
 
                    l['line'][last:]
 
                )
 
            do(line)
 
            do(next_)
 

	
 
    def _parse_udiff(self):
 
    def _parse_udiff(self, inline_diff=True):
 
        """
 
        Parse the diff an return data for the template.
 
        """
 
        lineiter = self.lines
 
        files = []
 
        try:
 
            line = lineiter.next()
 
            while 1:
 
                # continue until we found the old file
 
                if not line.startswith('--- '):
 
                    line = lineiter.next()
 
                    continue
 

	
 
                chunks = []
 
                stats = [0, 0]
 
                operation, filename, old_rev, new_rev = \
 
                    self._extract_rev(line, lineiter.next())
 
                files.append({
 
                    'filename':         filename,
 
                    'old_revision':     old_rev,
 
                    'new_revision':     new_rev,
 
                    'chunks':           chunks,
 
                    'operation':        operation,
 
                    'stats':            stats,
 
                })
 

	
 
                line = lineiter.next()
 
                while line:
 
                    match = self._chunk_re.match(line)
 
                    if not match:
 
                        break
 

	
 
                    lines = []
 
                    chunks.append(lines)
 

	
 
                    old_line, old_end, new_line, new_end = \
 
                        [int(x or 1) for x in match.groups()[:-1]]
 
                    old_line -= 1
 
                    new_line -= 1
 
                    gr = match.groups()
 
                    context = len(gr) == 5
 
                    old_end += old_line
 
                    new_end += new_line
 

	
 
                    if context:
 
                        # skip context only if it's first line
 
                        if int(gr[0]) > 1:
 
                            lines.append({
 
                                'old_lineno': '...',
 
                                'new_lineno': '...',
 
                                'action':     'context',
 
                                'line':       line,
 
                            })
 

	
 
                    line = lineiter.next()
 
                    while old_line < old_end or new_line < new_end:
 
                        if line:
 
                            command, line = line[0], line[1:]
 
                        else:
 
                            command = ' '
 
                        affects_old = affects_new = False
 

	
 
                        # ignore those if we don't expect them
 
                        if command in '#@':
 
                            continue
 
                        elif command == '+':
 
                            affects_new = True
 
                            action = 'add'
 
                            stats[0] += 1
 
                        elif command == '-':
 
                            affects_old = True
 
                            action = 'del'
 
                            stats[1] += 1
 
                        else:
 
                            affects_old = affects_new = True
 
                            action = 'unmod'
 

	
 
                        if line.find('No newline at end of file') != -1:
 
                            lines.append({
 
                                'old_lineno':   '...',
 
                                'new_lineno':   '...',
 
                                'action':       'context',
 
                                'line':         line
 
                            })
 

	
 
                        else:
 
                            old_line += affects_old
 
                            new_line += affects_new
 
                            lines.append({
 
                                'old_lineno':   affects_old and old_line or '',
 
                                'new_lineno':   affects_new and new_line or '',
 
                                'action':       action,
 
                                'line':         line
 
                            })
 

	
 
                        line = lineiter.next()
 

	
 
        except StopIteration:
 
            pass
 

	
 
        sorter = lambda info: {'A': 0, 'M': 1, 'D': 2}.get(info['operation'])
 
        if inline_diff is False:
 
            return sorted(files, key=sorter)
 

	
 
        # highlight inline changes
 
        for diff_data in files:
 
            for chunk in diff_data['chunks']:
 
                lineiter = iter(chunk)
 
                try:
 
                    while 1:
 
                        line = lineiter.next()
 
                        if line['action'] != 'unmod':
 
                            nextline = lineiter.next()
 
                            if nextline['action'] in ['unmod', 'context'] or \
 
                               nextline['action'] == line['action']:
 
                                continue
 
                            self.differ(line, nextline)
 
                except StopIteration:
 
                    pass
 
        return files
 

	
 
    def prepare(self):
 
        return sorted(files, key=sorter)
 

	
 
    def prepare(self, inline_diff=True):
 
        """
 
        Prepare the passed udiff for HTML rendering. It'l return a list
 
        of dicts
 
        """
 
        return self._parse_udiff()
 
        return self._parse_udiff(inline_diff=inline_diff)
 

	
 
    def _safe_id(self, idstring):
 
        """Make a string safe for including in an id attribute.
 

	
 
        The HTML spec says that id attributes 'must begin with
 
        a letter ([A-Za-z]) and may be followed by any number
 
        of letters, digits ([0-9]), hyphens ("-"), underscores
 
        ("_"), colons (":"), and periods (".")'. These regexps
 
        are slightly over-zealous, in that they remove colons
 
        and periods unnecessarily.
 

	
 
        Whitespace is transformed into underscores, and then
 
        anything which is not a hyphen or a character that
 
        matches \w (alphanumerics and underscore) is removed.
 

	
 
        """
 
        # Transform all whitespace to underscore
 
        idstring = re.sub(r'\s', "_", '%s' % idstring)
 
        # Remove everything that is not a hyphen or a member of \w
 
        idstring = re.sub(r'(?!-)\W', "", idstring).lower()
 
        return idstring
 

	
 
    def raw_diff(self):
 
        """
 
        Returns raw string as udiff
 
        """
 
        udiff_copy = self.copy_iterator()
 
        if self.__format == 'gitdiff':
 
            udiff_copy = self._parse_gitdiff(udiff_copy)
 
        return u''.join(udiff_copy)
 

	
 
    def as_html(self, table_class='code-difftable', line_class='line',
 
                new_lineno_class='lineno old', old_lineno_class='lineno new',
 
                code_class='code', enable_comments=False, diff_lines=None):
 
        """
 
        Return given diff as html table with customized css classes
 
        """
 
        def _link_to_if(condition, label, url):
 
            """
 
            Generates a link if condition is meet or just the label if not.
 
            """
 

	
 
            if condition:
 
                return '''<a href="%(url)s">%(label)s</a>''' % {
 
                    'url': url,
 
                    'label': label
 
                }
 
            else:
rhodecode/lib/graphmod.py
Show inline comments
 
new file 100644
 
"""
 
Modified mercurial DAG graph functions that re-uses VCS structure
 

	
 
It allows to have a shared codebase for DAG generation for hg and git repos
 
"""
 

	
 
nullrev = -1
 

	
 

	
 
def grandparent(parentrev_func, lowestrev, roots, head):
 
    """
 
    Return all ancestors of head in roots which revision is
 
    greater or equal to lowestrev.
 
    """
 
    pending = set([head])
 
    seen = set()
 
    kept = set()
 
    llowestrev = max(nullrev, lowestrev)
 
    while pending:
 
        r = pending.pop()
 
        if r >= llowestrev and r not in seen:
 
            if r in roots:
 
                kept.add(r)
 
            else:
 
                pending.update([p for p in parentrev_func(r)])
 
            seen.add(r)
 
    return sorted(kept)
 

	
 

	
 
def _dagwalker(repo, revs, alias):
 
    if not revs:
 
        return
 

	
 
    if alias == 'hg':
 
        cl = repo._repo.changelog.parentrevs
 
        repo = repo
 
    elif alias == 'git':
 
        def cl(rev):
 
            return [x.revision for x in repo[rev].parents()]
 
        repo = repo
 

	
 
    lowestrev = min(revs)
 
    gpcache = {}
 

	
 
    knownrevs = set(revs)
 
    for rev in revs:
 
        ctx = repo[rev]
 
        parents = sorted(set([p.revision for p in ctx.parents
 
                              if p.revision in knownrevs]))
 
        mpars = [p.revision for p in ctx.parents if
 
                 p.revision != nullrev and p.revision not in parents]
 

	
 
        for mpar in mpars:
 
            gp = gpcache.get(mpar)
 
            if gp is None:
 
                gp = gpcache[mpar] = grandparent(cl, lowestrev, revs, mpar)
 
            if not gp:
 
                parents.append(mpar)
 
            else:
 
                parents.extend(g for g in gp if g not in parents)
 

	
 
        yield (ctx.revision, 'C', ctx, parents)
 

	
 

	
 
def _colored(dag):
 
    """annotates a DAG with colored edge information
 

	
 
    For each DAG node this function emits tuples::
 

	
 
      (id, type, data, (col, color), [(col, nextcol, color)])
 

	
 
    with the following new elements:
 

	
 
      - Tuple (col, color) with column and color index for the current node
 
      - A list of tuples indicating the edges between the current node and its
 
        parents.
 
    """
 
    seen = []
 
    colors = {}
 
    newcolor = 1
 

	
 
    getconf = lambda rev: {}
 

	
 
    for (cur, type, data, parents) in dag:
 

	
 
        # Compute seen and next
 
        if cur not in seen:
 
            seen.append(cur)  # new head
 
            colors[cur] = newcolor
 
            newcolor += 1
 

	
 
        col = seen.index(cur)
 
        color = colors.pop(cur)
 
        next = seen[:]
 

	
 
        # Add parents to next
 
        addparents = [p for p in parents if p not in next]
 
        next[col:col + 1] = addparents
 

	
 
        # Set colors for the parents
 
        for i, p in enumerate(addparents):
 
            if not i:
 
                colors[p] = color
 
            else:
 
                colors[p] = newcolor
 
                newcolor += 1
 

	
 
        # Add edges to the graph
 
        edges = []
 
        for ecol, eid in enumerate(seen):
 
            if eid in next:
 
                bconf = getconf(eid)
 
                edges.append((
 
                    ecol, next.index(eid), colors[eid],
 
                    bconf.get('width', -1),
 
                    bconf.get('color', '')))
 
            elif eid == cur:
 
                for p in parents:
 
                    bconf = getconf(p)
 
                    edges.append((
 
                        ecol, next.index(p), color,
 
                        bconf.get('width', -1),
 
                        bconf.get('color', '')))
 

	
 
        # Yield and move on
 
        yield (cur, type, data, (col, color), edges)
 
        seen = next
rhodecode/lib/helpers.py
Show inline comments
 
@@ -493,156 +493,176 @@ def action_parser(user_log, feed=False):
 
                _('compare view')
 
            )
 
        )
 

	
 
        # if we have exactly one more than normally displayed
 
        # just display it, takes less space than displaying
 
        # "and 1 more revisions"
 
        if len(revs_ids) == revs_limit + 1:
 
            rev = revs[revs_limit]
 
            cs_links.append(", " + lnk(rev, repo_name))
 

	
 
        # hidden-by-default ones
 
        if len(revs_ids) > revs_limit + 1:
 
            uniq_id = revs_ids[0]
 
            html_tmpl = (
 
                '<span> %s <a class="show_more" id="_%s" '
 
                'href="#more">%s</a> %s</span>'
 
            )
 
            if not feed:
 
                cs_links.append(html_tmpl % (
 
                      _('and'),
 
                      uniq_id, _('%s more') % (len(revs_ids) - revs_limit),
 
                      _('revisions')
 
                    )
 
                )
 

	
 
            if not feed:
 
                html_tmpl = '<span id="%s" style="display:none">, %s </span>'
 
            else:
 
                html_tmpl = '<span id="%s"> %s </span>'
 

	
 
            morelinks = ', '.join(
 
              [lnk(rev, repo_name) for rev in revs[revs_limit:]]
 
            )
 

	
 
            if len(revs_ids) > revs_top_limit:
 
                morelinks += ', ...'
 

	
 
            cs_links.append(html_tmpl % (uniq_id, morelinks))
 
        if len(revs) > 1:
 
            cs_links.append(compare_view)
 
        return ''.join(cs_links)
 

	
 
    def get_fork_name():
 
        repo_name = action_params
 
        return _('fork name ') + str(link_to(action_params, url('summary_home',
 
                                          repo_name=repo_name,)))
 

	
 
    action_map = {'user_deleted_repo': (_('[deleted] repository'), None),
 
           'user_created_repo': (_('[created] repository'), None),
 
           'user_created_fork': (_('[created] repository as fork'), None),
 
           'user_forked_repo': (_('[forked] repository'), get_fork_name),
 
           'user_updated_repo': (_('[updated] repository'), None),
 
           'admin_deleted_repo': (_('[delete] repository'), None),
 
           'admin_created_repo': (_('[created] repository'), None),
 
           'admin_forked_repo': (_('[forked] repository'), None),
 
           'admin_updated_repo': (_('[updated] repository'), None),
 
           'push': (_('[pushed] into'), get_cs_links),
 
           'push_local': (_('[committed via RhodeCode] into'), get_cs_links),
 
           'push_remote': (_('[pulled from remote] into'), get_cs_links),
 
           'pull': (_('[pulled] from'), None),
 
           'started_following_repo': (_('[started following] repository'), None),
 
           'stopped_following_repo': (_('[stopped following] repository'), None),
 
    def get_user_name():
 
        user_name = action_params
 
        return user_name
 

	
 
    def get_users_group():
 
        group_name = action_params
 
        return group_name
 

	
 
    # action : translated str, callback(extractor), icon
 
    action_map = {
 
    'user_deleted_repo':         (_('[deleted] repository'),
 
                                  None, 'database_delete.png'),
 
    'user_created_repo':         (_('[created] repository'),
 
                                  None, 'database_add.png'),
 
    'user_created_fork':         (_('[created] repository as fork'),
 
                                  None, 'arrow_divide.png'),
 
    'user_forked_repo':          (_('[forked] repository'),
 
                                  get_fork_name, 'arrow_divide.png'),
 
    'user_updated_repo':         (_('[updated] repository'),
 
                                  None, 'database_edit.png'),
 
    'admin_deleted_repo':        (_('[delete] repository'),
 
                                  None, 'database_delete.png'),
 
    'admin_created_repo':        (_('[created] repository'),
 
                                  None, 'database_add.png'),
 
    'admin_forked_repo':         (_('[forked] repository'),
 
                                  None, 'arrow_divide.png'),
 
    'admin_updated_repo':        (_('[updated] repository'),
 
                                  None, 'database_edit.png'),
 
    'admin_created_user':        (_('[created] user'),
 
                                  get_user_name, 'user_add.png'),
 
    'admin_updated_user':        (_('[updated] user'),
 
                                  get_user_name, 'user_edit.png'),
 
    'admin_created_users_group': (_('[created] users group'),
 
                                  get_users_group, 'group_add.png'),
 
    'admin_updated_users_group': (_('[updated] users group'),
 
                                  get_users_group, 'group_edit.png'),
 
    'user_commented_revision':   (_('[commented] on revision in repository'),
 
                                  get_cs_links, 'comment_add.png'),
 
    'push':                      (_('[pushed] into'),
 
                                  get_cs_links, 'script_add.png'),
 
    'push_local':                (_('[committed via RhodeCode] into repository'),
 
                                  get_cs_links, 'script_edit.png'),
 
    'push_remote':               (_('[pulled from remote] into repository'),
 
                                  get_cs_links, 'connect.png'),
 
    'pull':                      (_('[pulled] from'),
 
                                  None, 'down_16.png'),
 
    'started_following_repo':    (_('[started following] repository'),
 
                                  None, 'heart_add.png'),
 
    'stopped_following_repo':    (_('[stopped following] repository'),
 
                                  None, 'heart_delete.png'),
 
            }
 

	
 
    action_str = action_map.get(action, action)
 
    if feed:
 
        action = action_str[0].replace('[', '').replace(']', '')
 
    else:
 
        action = action_str[0]\
 
            .replace('[', '<span class="journal_highlight">')\
 
            .replace(']', '</span>')
 

	
 
    action_params_func = lambda: ""
 

	
 
    if callable(action_str[1]):
 
        action_params_func = action_str[1]
 

	
 
    return [literal(action), action_params_func]
 

	
 

	
 
def action_parser_icon(user_log):
 
    def action_parser_icon():
 
    action = user_log.action
 
    action_params = None
 
    x = action.split(':')
 

	
 
    if len(x) > 1:
 
        action, action_params = x
 

	
 
    tmpl = """<img src="%s%s" alt="%s"/>"""
 
    map = {'user_deleted_repo':'database_delete.png',
 
           'user_created_repo':'database_add.png',
 
           'user_created_fork':'arrow_divide.png',
 
           'user_forked_repo':'arrow_divide.png',
 
           'user_updated_repo':'database_edit.png',
 
           'admin_deleted_repo':'database_delete.png',
 
           'admin_created_repo':'database_add.png',
 
           'admin_forked_repo':'arrow_divide.png',
 
           'admin_updated_repo':'database_edit.png',
 
           'push':'script_add.png',
 
           'push_local':'script_edit.png',
 
           'push_remote':'connect.png',
 
           'pull':'down_16.png',
 
           'started_following_repo':'heart_add.png',
 
           'stopped_following_repo':'heart_delete.png',
 
            }
 
    return literal(tmpl % ((url('/images/icons/')),
 
                           map.get(action, action), action))
 
        ico = action_map.get(action, ['', '', ''])[2]
 
        return literal(tmpl % ((url('/images/icons/')), ico, action))
 

	
 
    # returned callbacks we need to call to get
 
    return [lambda: literal(action), action_params_func, action_parser_icon]
 

	
 

	
 

	
 
#==============================================================================
 
# PERMS
 
#==============================================================================
 
from rhodecode.lib.auth import HasPermissionAny, HasPermissionAll, \
 
HasRepoPermissionAny, HasRepoPermissionAll
 

	
 

	
 
#==============================================================================
 
# GRAVATAR URL
 
#==============================================================================
 

	
 
def gravatar_url(email_address, size=30):
 
    if (not str2bool(config['app_conf'].get('use_gravatar')) or
 
        not email_address or email_address == 'anonymous@rhodecode.org'):
 
        f = lambda a, l: min(l, key=lambda x: abs(x - a))
 
        return url("/images/user%s.png" % f(size, [14, 16, 20, 24, 30]))
 

	
 
    ssl_enabled = 'https' == request.environ.get('wsgi.url_scheme')
 
    default = 'identicon'
 
    baseurl_nossl = "http://www.gravatar.com/avatar/"
 
    baseurl_ssl = "https://secure.gravatar.com/avatar/"
 
    baseurl = baseurl_ssl if ssl_enabled else baseurl_nossl
 

	
 
    if isinstance(email_address, unicode):
 
        #hashlib crashes on unicode items
 
        email_address = safe_str(email_address)
 
    # construct the url
 
    gravatar_url = baseurl + hashlib.md5(email_address.lower()).hexdigest() + "?"
 
    gravatar_url += urllib.urlencode({'d': default, 's': str(size)})
 

	
 
    return gravatar_url
 

	
 

	
 
#==============================================================================
 
# REPO PAGER, PAGER FOR REPOSITORY
 
#==============================================================================
 
class RepoPage(Page):
 

	
 
    def __init__(self, collection, page=1, items_per_page=20,
 
                 item_count=None, url=None, **kwargs):
 

	
 
        """Create a "RepoPage" instance. special pager for paging
 
        repository
 
        """
 
        self._url_generator = url
 

	
rhodecode/lib/indexers/__init__.py
Show inline comments
 
# -*- coding: utf-8 -*-
 
"""
 
    rhodecode.lib.indexers.__init__
 
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 

	
 
    Whoosh indexing module for RhodeCode
 

	
 
    :created_on: Aug 17, 2010
 
    :author: marcink
 
    :copyright: (C) 2010-2012 Marcin Kuzminski <marcin@python-works.com>
 
    :license: GPLv3, see COPYING for more details.
 
"""
 
# This program is free software: you can redistribute it and/or modify
 
# it under the terms of the GNU General Public License as published by
 
# the Free Software Foundation, either version 3 of the License, or
 
# (at your option) any later version.
 
#
 
# This program is distributed in the hope that it will be useful,
 
# but WITHOUT ANY WARRANTY; without even the implied warranty of
 
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 
# GNU General Public License for more details.
 
#
 
# You should have received a copy of the GNU General Public License
 
# along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
import os
 
import sys
 
import traceback
 
import logging
 
from os.path import dirname as dn, join as jn
 

	
 
#to get the rhodecode import
 
sys.path.append(dn(dn(dn(os.path.realpath(__file__)))))
 

	
 
from string import strip
 
from shutil import rmtree
 

	
 
from whoosh.analysis import RegexTokenizer, LowercaseFilter, StopFilter
 
from whoosh.fields import TEXT, ID, STORED, Schema, FieldType
 
from whoosh.index import create_in, open_dir
 
from whoosh.formats import Characters
 
from whoosh.highlight import highlight, HtmlFormatter, ContextFragmenter
 

	
 
from webhelpers.html.builder import escape
 
from webhelpers.html.builder import escape, literal
 
from sqlalchemy import engine_from_config
 

	
 
from rhodecode.model import init_model
 
from rhodecode.model.scm import ScmModel
 
from rhodecode.model.repo import RepoModel
 
from rhodecode.config.environment import load_environment
 
from rhodecode.lib.utils2 import LazyProperty
 
from rhodecode.lib.utils import BasePasterCommand, Command, add_cache,\
 
    load_rcextensions
 

	
 
# CUSTOM ANALYZER wordsplit + lowercase filter
 
ANALYZER = RegexTokenizer(expression=r"\w+") | LowercaseFilter()
 

	
 

	
 
#INDEX SCHEMA DEFINITION
 
SCHEMA = Schema(
 
    fileid=ID(unique=True),
 
    owner=TEXT(),
 
    repository=TEXT(stored=True),
 
    path=TEXT(stored=True),
 
    content=FieldType(format=Characters(), analyzer=ANALYZER,
 
                      scorable=True, stored=True),
 
    modtime=STORED(),
 
    extension=TEXT(stored=True)
 
)
 

	
 
IDX_NAME = 'HG_INDEX'
 
FORMATTER = HtmlFormatter('span', between='\n<span class="break">...</span>\n')
 
FRAGMENTER = ContextFragmenter(200)
 

	
 

	
 
class MakeIndex(BasePasterCommand):
 

	
 
    max_args = 1
 
    min_args = 1
 

	
 
    usage = "CONFIG_FILE"
 
    summary = "Creates index for full text search given configuration file"
 
    group_name = "RhodeCode"
 
    takes_config_file = -1
 
    parser = Command.standard_parser(verbose=True)
 

	
 
    def command(self):
 
        logging.config.fileConfig(self.path_to_ini_file)
 
        from pylons import config
 
        add_cache(config)
 
        engine = engine_from_config(config, 'sqlalchemy.db1.')
 
        init_model(engine)
 
        index_location = config['index_dir']
 
        repo_location = self.options.repo_location \
 
            if self.options.repo_location else RepoModel().repos_path
 
        repo_list = map(strip, self.options.repo_list.split(',')) \
 
            if self.options.repo_list else None
 
        repo_update_list = map(strip, self.options.repo_update_list.split(',')) \
 
            if self.options.repo_update_list else None
 
        load_rcextensions(config['here'])
 
        #======================================================================
 
        # WHOOSH DAEMON
 
        #======================================================================
 
        from rhodecode.lib.pidlock import LockHeld, DaemonLock
 
        from rhodecode.lib.indexers.daemon import WhooshIndexingDaemon
 
        try:
 
            l = DaemonLock(file_=jn(dn(dn(index_location)), 'make_index.lock'))
 
            WhooshIndexingDaemon(index_location=index_location,
 
                                 repo_location=repo_location,
 
                                 repo_list=repo_list,)\
 
                                 repo_list=repo_list,
 
                                 repo_update_list=repo_update_list)\
 
                .run(full_index=self.options.full_index)
 
            l.release()
 
        except LockHeld:
 
            sys.exit(1)
 

	
 
    def update_parser(self):
 
        self.parser.add_option('--repo-location',
 
                          action='store',
 
                          dest='repo_location',
 
                          help="Specifies repositories location to index OPTIONAL",
 
                          )
 
        self.parser.add_option('--index-only',
 
                          action='store',
 
                          dest='repo_list',
 
                          help="Specifies a comma separated list of repositores "
 
                                "to build index on OPTIONAL",
 
                                "to build index on. If not given all repositories "
 
                                "are scanned for indexing. OPTIONAL",
 
                          )
 
        self.parser.add_option('--update-only',
 
                          action='store',
 
                          dest='repo_update_list',
 
                          help="Specifies a comma separated list of repositores "
 
                                "to re-build index on. OPTIONAL",
 
                          )
 
        self.parser.add_option('-f',
 
                          action='store_true',
 
                          dest='full_index',
 
                          help="Specifies that index should be made full i.e"
 
                                " destroy old and build from scratch",
 
                          default=False)
 

	
 

	
 
class WhooshResultWrapper(object):
 
    def __init__(self, search_type, searcher, matcher, highlight_items,
 
                 repo_location):
 
        self.search_type = search_type
 
        self.searcher = searcher
 
        self.matcher = matcher
 
        self.highlight_items = highlight_items
 
        self.fragment_size = 200
 
        self.repo_location = repo_location
 

	
 
    @LazyProperty
 
    def doc_ids(self):
 
        docs_id = []
 
        while self.matcher.is_active():
 
            docnum = self.matcher.id()
 
            chunks = [offsets for offsets in self.get_chunks()]
 
            docs_id.append([docnum, chunks])
 
            self.matcher.next()
 
        return docs_id
 

	
 
    def __str__(self):
 
        return '<%s at %s>' % (self.__class__.__name__, len(self.doc_ids))
 

	
 
    def __repr__(self):
 
        return self.__str__()
 

	
 
    def __len__(self):
 
        return len(self.doc_ids)
 

	
 
    def __iter__(self):
 
        """
 
        Allows Iteration over results,and lazy generate content
 

	
 
        *Requires* implementation of ``__getitem__`` method.
 
        """
 
        for docid in self.doc_ids:
 
            yield self.get_full_content(docid)
 

	
 
    def __getitem__(self, key):
 
@@ -175,56 +186,56 @@ class WhooshResultWrapper(object):
 

	
 
        slices = []
 
        for docid in self.doc_ids[i:j]:
 
            slices.append(self.get_full_content(docid))
 
        return slices
 

	
 
    def get_full_content(self, docid):
 
        res = self.searcher.stored_fields(docid[0])
 
        full_repo_path = jn(self.repo_location, res['repository'])
 
        f_path = res['path'].split(full_repo_path)[-1]
 
        f_path = f_path.lstrip(os.sep)
 

	
 
        content_short = self.get_short_content(res, docid[1])
 
        res.update({'content_short': content_short,
 
                    'content_short_hl': self.highlight(content_short),
 
                    'f_path': f_path})
 

	
 
        return res
 

	
 
    def get_short_content(self, res, chunks):
 

	
 
        return ''.join([res['content'][chunk[0]:chunk[1]] for chunk in chunks])
 

	
 
    def get_chunks(self):
 
        """
 
        Smart function that implements chunking the content
 
        but not overlap chunks so it doesn't highlight the same
 
        close occurrences twice.
 

	
 
        :param matcher:
 
        :param size:
 
        """
 
        memory = [(0, 0)]
 
        for span in self.matcher.spans():
 
            start = span.startchar or 0
 
            end = span.endchar or 0
 
            start_offseted = max(0, start - self.fragment_size)
 
            end_offseted = end + self.fragment_size
 

	
 
            if start_offseted < memory[-1][1]:
 
                start_offseted = memory[-1][1]
 
            memory.append((start_offseted, end_offseted,))
 
            yield (start_offseted, end_offseted,)
 

	
 
    def highlight(self, content, top=5):
 
        if self.search_type != 'content':
 
            return ''
 
        hl = highlight(
 
            text=escape(content),
 
            text=content,
 
            terms=self.highlight_items,
 
            analyzer=ANALYZER,
 
            fragmenter=FRAGMENTER,
 
            formatter=FORMATTER,
 
            top=top
 
        )
 
        return hl
rhodecode/lib/indexers/daemon.py
Show inline comments
 
@@ -8,230 +8,250 @@
 
    :created_on: Jan 26, 2010
 
    :author: marcink
 
    :copyright: (C) 2010-2012 Marcin Kuzminski <marcin@python-works.com>
 
    :license: GPLv3, see COPYING for more details.
 
"""
 
# This program is free software: you can redistribute it and/or modify
 
# it under the terms of the GNU General Public License as published by
 
# the Free Software Foundation, either version 3 of the License, or
 
# (at your option) any later version.
 
#
 
# This program is distributed in the hope that it will be useful,
 
# but WITHOUT ANY WARRANTY; without even the implied warranty of
 
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 
# GNU General Public License for more details.
 
#
 
# You should have received a copy of the GNU General Public License
 
# along with this program.  If not, see <http://www.gnu.org/licenses/>.
 

	
 
import os
 
import sys
 
import logging
 
import traceback
 

	
 
from shutil import rmtree
 
from time import mktime
 

	
 
from os.path import dirname as dn
 
from os.path import join as jn
 

	
 
#to get the rhodecode import
 
project_path = dn(dn(dn(dn(os.path.realpath(__file__)))))
 
sys.path.append(project_path)
 

	
 
from rhodecode.config.conf import INDEX_EXTENSIONS
 
from rhodecode.model.scm import ScmModel
 
from rhodecode.lib.utils2 import safe_unicode
 
from rhodecode.lib.indexers import SCHEMA, IDX_NAME
 

	
 
from rhodecode.lib.vcs.exceptions import ChangesetError, RepositoryError, \
 
    NodeDoesNotExistError
 

	
 
from whoosh.index import create_in, open_dir
 

	
 
log = logging.getLogger('whoosh_indexer')
 

	
 

	
 
class WhooshIndexingDaemon(object):
 
    """
 
    Daemon for atomic jobs
 
    Daemon for atomic indexing jobs
 
    """
 

	
 
    def __init__(self, indexname=IDX_NAME, index_location=None,
 
                 repo_location=None, sa=None, repo_list=None):
 
                 repo_location=None, sa=None, repo_list=None,
 
                 repo_update_list=None):
 
        self.indexname = indexname
 

	
 
        self.index_location = index_location
 
        if not index_location:
 
            raise Exception('You have to provide index location')
 

	
 
        self.repo_location = repo_location
 
        if not repo_location:
 
            raise Exception('You have to provide repositories location')
 

	
 
        self.repo_paths = ScmModel(sa).repo_scan(self.repo_location)
 

	
 
        #filter repo list
 
        if repo_list:
 
            filtered_repo_paths = {}
 
            self.filtered_repo_paths = {}
 
            for repo_name, repo in self.repo_paths.items():
 
                if repo_name in repo_list:
 
                    filtered_repo_paths[repo_name] = repo
 
                    self.filtered_repo_paths[repo_name] = repo
 

	
 
            self.repo_paths = self.filtered_repo_paths
 

	
 
            self.repo_paths = filtered_repo_paths
 
        #filter update repo list
 
        self.filtered_repo_update_paths = {}
 
        if repo_update_list:
 
            self.filtered_repo_update_paths = {}
 
            for repo_name, repo in self.repo_paths.items():
 
                if repo_name in repo_update_list:
 
                    self.filtered_repo_update_paths[repo_name] = repo
 
            self.repo_paths = self.filtered_repo_update_paths
 

	
 
        self.initial = False
 
        if not os.path.isdir(self.index_location):
 
            os.makedirs(self.index_location)
 
            log.info('Cannot run incremental index since it does not'
 
                     ' yet exist running full build')
 
            self.initial = True
 

	
 
    def get_paths(self, repo):
 
        """
 
        recursive walk in root dir and return a set of all path in that dir
 
        based on repository walk function
 
        """
 
        index_paths_ = set()
 
        try:
 
            tip = repo.get_changeset('tip')
 
            for topnode, dirs, files in tip.walk('/'):
 
                for f in files:
 
                    index_paths_.add(jn(repo.path, f.path))
 

	
 
        except RepositoryError, e:
 
            log.debug(traceback.format_exc())
 
            pass
 
        return index_paths_
 

	
 
    def get_node(self, repo, path):
 
        n_path = path[len(repo.path) + 1:]
 
        node = repo.get_changeset().get_node(n_path)
 
        return node
 

	
 
    def get_node_mtime(self, node):
 
        return mktime(node.last_changeset.date.timetuple())
 

	
 
    def add_doc(self, writer, path, repo, repo_name):
 
        """
 
        Adding doc to writer this function itself fetches data from
 
        the instance of vcs backend
 
        """
 

	
 
        node = self.get_node(repo, path)
 
        indexed = indexed_w_content = 0
 
        # we just index the content of chosen files, and skip binary files
 
        if node.extension in INDEX_EXTENSIONS and not node.is_binary:
 
            u_content = node.content
 
            if not isinstance(u_content, unicode):
 
                log.warning('  >> %s Could not get this content as unicode '
 
                            'replacing with empty content' % path)
 
                u_content = u''
 
            else:
 
                log.debug('    >> %s [WITH CONTENT]' % path)
 
                indexed_w_content += 1
 

	
 
        else:
 
            log.debug('    >> %s' % path)
 
            # just index file name without it's content
 
            u_content = u''
 
            indexed += 1
 

	
 
        p = safe_unicode(path)
 
        writer.add_document(
 
            fileid=p,
 
            owner=unicode(repo.contact),
 
            repository=safe_unicode(repo_name),
 
            path=safe_unicode(path),
 
            path=p,
 
            content=u_content,
 
            modtime=self.get_node_mtime(node),
 
            extension=node.extension
 
        )
 
        return indexed, indexed_w_content
 

	
 
    def build_index(self):
 
        if os.path.exists(self.index_location):
 
            log.debug('removing previous index')
 
            rmtree(self.index_location)
 

	
 
        if not os.path.exists(self.index_location):
 
            os.mkdir(self.index_location)
 

	
 
        idx = create_in(self.index_location, SCHEMA, indexname=IDX_NAME)
 
        writer = idx.writer()
 
        log.debug('BUILDIN INDEX FOR EXTENSIONS %s' % INDEX_EXTENSIONS)
 
        for repo_name, repo in self.repo_paths.items():
 
            log.debug('building index @ %s' % repo.path)
 
            i_cnt = iwc_cnt = 0
 
            for idx_path in self.get_paths(repo):
 
                i, iwc = self.add_doc(writer, idx_path, repo, repo_name)
 
                i_cnt += i
 
                iwc_cnt += iwc
 
            log.debug('added %s files %s with content for repo %s' % (
 
                         i_cnt + iwc_cnt, iwc_cnt, repo.path)
 
            )
 

	
 
        log.debug('>> COMMITING CHANGES <<')
 
        writer.commit(merge=True)
 
        log.debug('>>> FINISHED BUILDING INDEX <<<')
 

	
 
    def update_index(self):
 
        log.debug('STARTING INCREMENTAL INDEXING UPDATE FOR EXTENSIONS %s' %
 
                  INDEX_EXTENSIONS)
 
        log.debug((u'STARTING INCREMENTAL INDEXING UPDATE FOR EXTENSIONS %s '
 
                   'AND REPOS %s') % (INDEX_EXTENSIONS, self.repo_paths.keys()))
 

	
 
        idx = open_dir(self.index_location, indexname=self.indexname)
 
        # The set of all paths in the index
 
        indexed_paths = set()
 
        # The set of all paths we need to re-index
 
        to_index = set()
 

	
 
        reader = idx.reader()
 
        writer = idx.writer()
 

	
 
        # Loop over the stored fields in the index
 
        for fields in reader.all_stored_fields():
 
            indexed_path = fields['path']
 
            indexed_repo_path = fields['repository']
 
            indexed_paths.add(indexed_path)
 

	
 
            repo = self.repo_paths[fields['repository']]
 
            if not indexed_repo_path in self.filtered_repo_update_paths:
 
                continue
 

	
 
            repo = self.repo_paths[indexed_repo_path]
 

	
 
            try:
 
                node = self.get_node(repo, indexed_path)
 
            except (ChangesetError, NodeDoesNotExistError):
 
                # This file was deleted since it was indexed
 
                log.debug('removing from index %s' % indexed_path)
 
                writer.delete_by_term('path', indexed_path)
 

	
 
            else:
 
                # Check if this file was changed since it was indexed
 
                indexed_time = fields['modtime']
 
                mtime = self.get_node_mtime(node)
 
                if mtime > indexed_time:
 
                    # The file has changed, delete it and add it to the list of
 
                    # files to reindex
 
                    log.debug('adding to reindex list %s' % indexed_path)
 
                    log.debug('adding to reindex list %s mtime: %s vs %s' % (
 
                                    indexed_path, mtime, indexed_time)
 
                    )
 
                    writer.delete_by_term('fileid', indexed_path)
 

	
 
                    to_index.add(indexed_path)
 
            except (ChangesetError, NodeDoesNotExistError):
 
                # This file was deleted since it was indexed
 
                log.debug('removing from index %s' % indexed_path)
 
                    writer.delete_by_term('path', indexed_path)
 
                    to_index.add(indexed_path)
 

	
 
        # Loop over the files in the filesystem
 
        # Assume we have a function that gathers the filenames of the
 
        # documents to be indexed
 
        ri_cnt = riwc_cnt = 0
 
        for repo_name, repo in self.repo_paths.items():
 
            for path in self.get_paths(repo):
 
                path = safe_unicode(path)
 
                if path in to_index or path not in indexed_paths:
 

	
 
                    # This is either a file that's changed, or a new file
 
                    # that wasn't indexed before. So index it!
 
                    i, iwc = self.add_doc(writer, path, repo, repo_name)
 
                    log.debug('re indexing %s' % path)
 
                    ri_cnt += i
 
                    riwc_cnt += iwc
 
        log.debug('added %s files %s with content for repo %s' % (
 
                     ri_cnt + riwc_cnt, riwc_cnt, repo.path)
 
        )
 
        log.debug('>> COMMITING CHANGES <<')
 
        writer.commit(merge=True)
 
        log.debug('>>> FINISHED REBUILDING INDEX <<<')
 

	
 
    def run(self, full_index=False):
 
        """Run daemon"""
 
        if full_index or self.initial:
 
            self.build_index()
 
        else:
 
            self.update_index()
rhodecode/lib/middleware/pygrack.py
Show inline comments
 
new file 100644
 
import os
 
import socket
 
import logging
 
import subprocess
 

	
 
from webob import Request, Response, exc
 

	
 
from rhodecode.lib import subprocessio
 

	
 
log = logging.getLogger(__name__)
 

	
 

	
 
class FileWrapper(object):
 

	
 
    def __init__(self, fd, content_length):
 
        self.fd = fd
 
        self.content_length = content_length
 
        self.remain = content_length
 

	
 
    def read(self, size):
 
        if size <= self.remain:
 
            try:
 
                data = self.fd.read(size)
 
            except socket.error:
 
                raise IOError(self)
 
            self.remain -= size
 
        elif self.remain:
 
            data = self.fd.read(self.remain)
 
            self.remain = 0
 
        else:
 
            data = None
 
        return data
 

	
 
    def __repr__(self):
 
        return '<FileWrapper %s len: %s, read: %s>' % (
 
            self.fd, self.content_length, self.content_length - self.remain
 
        )
 

	
 

	
 
class GitRepository(object):
 
    git_folder_signature = set(['config', 'head', 'info', 'objects', 'refs'])
 
    commands = ['git-upload-pack', 'git-receive-pack']
 

	
 
    def __init__(self, repo_name, content_path):
 
        files = set([f.lower() for f in os.listdir(content_path)])
 
        if  not (self.git_folder_signature.intersection(files)
 
                == self.git_folder_signature):
 
            raise OSError('%s missing git signature' % content_path)
 
        self.content_path = content_path
 
        self.valid_accepts = ['application/x-%s-result' %
 
                              c for c in self.commands]
 
        self.repo_name = repo_name
 

	
 
    def _get_fixedpath(self, path):
 
        """
 
        Small fix for repo_path
 

	
 
        :param path:
 
        :type path:
 
        """
 
        return path.split(self.repo_name, 1)[-1].strip('/')
 

	
 
    def inforefs(self, request, environ):
 
        """
 
        WSGI Response producer for HTTP GET Git Smart
 
        HTTP /info/refs request.
 
        """
 

	
 
        git_command = request.GET['service']
 
        if git_command not in self.commands:
 
            log.debug('command %s not allowed' % git_command)
 
            return exc.HTTPMethodNotAllowed()
 

	
 
        # note to self:
 
        # please, resist the urge to add '\n' to git capture and increment
 
        # line count by 1.
 
        # The code in Git client not only does NOT need '\n', but actually
 
        # blows up if you sprinkle "flush" (0000) as "0001\n".
 
        # It reads binary, per number of bytes specified.
 
        # if you do add '\n' as part of data, count it.
 
        smart_server_advert = '# service=%s' % git_command
 
        try:
 
            out = subprocessio.SubprocessIOChunker(
 
                r'git %s --stateless-rpc --advertise-refs "%s"' % (
 
                                git_command[4:], self.content_path),
 
                starting_values=[
 
                    str(hex(len(smart_server_advert) + 4)[2:]
 
                        .rjust(4, '0') + smart_server_advert + '0000')
 
                ]
 
            )
 
        except EnvironmentError, e:
 
            log.exception(e)
 
            raise exc.HTTPExpectationFailed()
 
        resp = Response()
 
        resp.content_type = 'application/x-%s-advertisement' % str(git_command)
 
        resp.app_iter = out
 
        return resp
 

	
 
    def backend(self, request, environ):
 
        """
 
        WSGI Response producer for HTTP POST Git Smart HTTP requests.
 
        Reads commands and data from HTTP POST's body.
 
        returns an iterator obj with contents of git command's
 
        response to stdout
 
        """
 
        git_command = self._get_fixedpath(request.path_info)
 
        if git_command not in self.commands:
 
            log.debug('command %s not allowed' % git_command)
 
            return exc.HTTPMethodNotAllowed()
 

	
 
        if 'CONTENT_LENGTH' in environ:
 
            inputstream = FileWrapper(environ['wsgi.input'],
 
                                      request.content_length)
 
        else:
 
            inputstream = environ['wsgi.input']
 

	
 
        try:
 
            out = subprocessio.SubprocessIOChunker(
 
                r'git %s --stateless-rpc "%s"' % (git_command[4:],
 
                                                  self.content_path),
 
                inputstream=inputstream
 
                )
 
        except EnvironmentError, e:
 
            log.exception(e)
 
            raise exc.HTTPExpectationFailed()
 

	
 
        if git_command in [u'git-receive-pack']:
 
            # updating refs manually after each push.
 
            # Needed for pre-1.7.0.4 git clients using regular HTTP mode.
 
            subprocess.call(u'git --git-dir "%s" '
 
                            'update-server-info' % self.content_path,
 
                            shell=True)
 

	
 
        resp = Response()
 
        resp.content_type = 'application/x-%s-result' % git_command.encode('utf8')
 
        resp.app_iter = out
 
        return resp
 

	
 
    def __call__(self, environ, start_response):
 
        request = Request(environ)
 
        _path = self._get_fixedpath(request.path_info)
 
        if _path.startswith('info/refs'):
 
            app = self.inforefs
 
        elif [a for a in self.valid_accepts if a in request.accept]:
 
            app = self.backend
 
        try:
 
            resp = app(request, environ)
 
        except exc.HTTPException, e:
 
            resp = e
 
            log.exception(e)
 
        except Exception, e:
 
            log.exception(e)
 
            resp = exc.HTTPInternalServerError()
 
        return resp(environ, start_response)
 

	
 

	
 
class GitDirectory(object):
 

	
 
    def __init__(self, repo_root, repo_name):
 
        repo_location = os.path.join(repo_root, repo_name)
 
        if not os.path.isdir(repo_location):
 
            raise OSError(repo_location)
 

	
 
        self.content_path = repo_location
 
        self.repo_name = repo_name
 
        self.repo_location = repo_location
 

	
 
    def __call__(self, environ, start_response):
 
        content_path = self.content_path
 
        try:
 
            app = GitRepository(self.repo_name, content_path)
 
        except (AssertionError, OSError):
 
            if os.path.isdir(os.path.join(content_path, '.git')):
 
                app = GitRepository(os.path.join(content_path, '.git'))
 
            else:
 
                return exc.HTTPNotFound()(environ, start_response)
 
        return app(environ, start_response)
 

	
 

	
 
def make_wsgi_app(repo_name, repo_root):
 
    return GitDirectory(repo_root, repo_name)
rhodecode/lib/middleware/simplegit.py
Show inline comments
 
@@ -173,101 +173,103 @@ class SimpleGit(BaseVCSController):
 
                            return HTTPForbidden()(environ, start_response)
 
                        username = user.username
 
                    except:
 
                        log.error(traceback.format_exc())
 
                        return HTTPInternalServerError()(environ,
 
                                                         start_response)
 

	
 
                    #check permissions for this repository
 
                    perm = self._check_permission(action, user, repo_name)
 
                    if perm is not True:
 
                        return HTTPForbidden()(environ, start_response)
 
        extras = {
 
            'ip': ipaddr,
 
            'username': username,
 
            'action': action,
 
            'repository': repo_name,
 
            'scm': 'git',
 
        }
 

	
 
        #===================================================================
 
        # GIT REQUEST HANDLING
 
        #===================================================================
 
        repo_path = os.path.join(safe_str(self.basepath), safe_str(repo_name))
 
        log.debug('Repository path is %s' % repo_path)
 

	
 
        baseui = make_ui('db')
 
        self.__inject_extras(repo_path, baseui, extras)
 

	
 
        try:
 
            # invalidate cache on push
 
            if action == 'push':
 
                self._invalidate_cache(repo_name)
 
            self._handle_githooks(repo_name, action, baseui, environ)
 

	
 
            log.info('%s action on GIT repo "%s"' % (action, repo_name))
 
            app = self.__make_app(repo_name, repo_path)
 
            return app(environ, start_response)
 
        except Exception:
 
            log.error(traceback.format_exc())
 
            return HTTPInternalServerError()(environ, start_response)
 

	
 
    def __make_app(self, repo_name, repo_path):
 
        """
 
        Make an wsgi application using dulserver
 

	
 
        :param repo_name: name of the repository
 
        :param repo_path: full path to the repository
 
        """
 
        _d = {'/' + repo_name: Repo(repo_path)}
 
        backend = dulserver.DictBackend(_d)
 
        gitserve = make_wsgi_chain(backend)
 

	
 
        return gitserve
 
        from rhodecode.lib.middleware.pygrack import make_wsgi_app
 
        app = make_wsgi_app(
 
            repo_root=os.path.dirname(repo_path),
 
            repo_name=repo_name,
 
        )
 
        return app
 

	
 
    def __get_repository(self, environ):
 
        """
 
        Get's repository name out of PATH_INFO header
 

	
 
        :param environ: environ where PATH_INFO is stored
 
        """
 
        try:
 
            environ['PATH_INFO'] = self._get_by_id(environ['PATH_INFO'])
 
            repo_name = GIT_PROTO_PAT.match(environ['PATH_INFO']).group(1)
 
        except:
 
            log.error(traceback.format_exc())
 
            raise
 

	
 
        return repo_name
 

	
 
    def __get_user(self, username):
 
        return User.get_by_username(username)
 

	
 
    def __get_action(self, environ):
 
        """
 
        Maps git request commands into a pull or push command.
 

	
 
        :param environ:
 
        """
 
        service = environ['QUERY_STRING'].split('=')
 

	
 
        if len(service) > 1:
 
            service_cmd = service[1]
 
            mapping = {
 
                'git-receive-pack': 'push',
 
                'git-upload-pack': 'pull',
 
            }
 
            op = mapping[service_cmd]
 
            self._git_stored_op = op
 
            return op
 
        else:
 
            # try to fallback to stored variable as we don't know if the last
 
            # operation is pull/push
 
            op = getattr(self, '_git_stored_op', 'pull')
 
        return op
 

	
 
    def _handle_githooks(self, repo_name, action, baseui, environ):
 
        from rhodecode.lib.hooks import log_pull_action, log_push_action
 
        service = environ['QUERY_STRING'].split('=')
 
        if len(service) < 2:
 
            return
 

	
rhodecode/lib/subprocessio.py
Show inline comments
 
new file 100644
 
'''
 
Module provides a class allowing to wrap communication over subprocess.Popen
 
input, output, error streams into a meaningfull, non-blocking, concurrent
 
stream processor exposing the output data as an iterator fitting to be a
 
return value passed by a WSGI applicaiton to a WSGI server per PEP 3333.
 

	
 
Copyright (c) 2011  Daniel Dotsenko <dotsa@hotmail.com>
 

	
 
This file is part of git_http_backend.py Project.
 

	
 
git_http_backend.py Project is free software: you can redistribute it and/or
 
modify it under the terms of the GNU Lesser General Public License as
 
published by the Free Software Foundation, either version 2.1 of the License,
 
or (at your option) any later version.
 

	
 
git_http_backend.py Project is distributed in the hope that it will be useful,
 
but WITHOUT ANY WARRANTY; without even the implied warranty of
 
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
 
GNU Lesser General Public License for more details.
 

	
 
You should have received a copy of the GNU Lesser General Public License
 
along with git_http_backend.py Project.
 
If not, see <http://www.gnu.org/licenses/>.
 
'''
 
import os
 
import subprocess
 
import threading
 
from collections import deque
 

	
 

	
 
class StreamFeeder(threading.Thread):
 
    """
 
    Normal writing into pipe-like is blocking once the buffer is filled.
 
    This thread allows a thread to seep data from a file-like into a pipe
 
    without blocking the main thread.
 
    We close inpipe once the end of the source stream is reached.
 
    """
 
    def __init__(self, source):
 
        super(StreamFeeder, self).__init__()
 
        self.daemon = True
 
        filelike = False
 
        self.bytes = b''
 
        if type(source) in (type(''), bytes, bytearray): # string-like
 
            self.bytes = bytes(source)
 
        else: # can be either file pointer or file-like
 
            if type(source) in (int, long): # file pointer it is
 
                ## converting file descriptor (int) stdin into file-like
 
                try:
 
                    source = os.fdopen(source, 'rb', 16384)
 
                except:
 
                    pass
 
            # let's see if source is file-like by now
 
            try:
 
                filelike = source.read
 
            except:
 
                pass
 
        if not filelike and not self.bytes:
 
            raise TypeError("StreamFeeder's source object must be a readable file-like, a file descriptor, or a string-like.")
 
        self.source = source
 
        self.readiface, self.writeiface = os.pipe()
 

	
 
    def run(self):
 
        t = self.writeiface
 
        if self.bytes:
 
            os.write(t, self.bytes)
 
        else:
 
            s = self.source
 
            b = s.read(4096)
 
            while b:
 
                os.write(t, b)
 
                b = s.read(4096)
 
        os.close(t)
 

	
 
    @property
 
    def output(self):
 
        return self.readiface
 

	
 

	
 
class InputStreamChunker(threading.Thread):
 
    def __init__(self, source, target, buffer_size, chunk_size):
 

	
 
        super(InputStreamChunker, self).__init__()
 

	
 
        self.daemon = True  # die die die.
 

	
 
        self.source = source
 
        self.target = target
 
        self.chunk_count_max = int(buffer_size / chunk_size) + 1
 
        self.chunk_size = chunk_size
 

	
 
        self.data_added = threading.Event()
 
        self.data_added.clear()
 

	
 
        self.keep_reading = threading.Event()
 
        self.keep_reading.set()
 

	
 
        self.EOF = threading.Event()
 
        self.EOF.clear()
 

	
 
        self.go = threading.Event()
 
        self.go.set()
 

	
 
    def stop(self):
 
        self.go.clear()
 
        self.EOF.set()
 
        try:
 
            # this is not proper, but is done to force the reader thread let
 
            # go of the input because, if successful, .close() will send EOF
 
            # down the pipe.
 
            self.source.close()
 
        except:
 
            pass
 

	
 
    def run(self):
 
        s = self.source
 
        t = self.target
 
        cs = self.chunk_size
 
        ccm = self.chunk_count_max
 
        kr = self.keep_reading
 
        da = self.data_added
 
        go = self.go
 
        b = s.read(cs)
 
        while b and go.is_set():
 
            if len(t) > ccm:
 
                kr.clear()
 
                kr.wait(2)
 
#                # this only works on 2.7.x and up
 
#                if not kr.wait(10):
 
#                    raise Exception("Timed out while waiting for input to be read.")
 
                # instead we'll use this
 
                if len(t) > ccm + 3:
 
                    raise IOError("Timed out while waiting for input from subprocess.")
 
            t.append(b)
 
            da.set()
 
            b = s.read(cs)
 
        self.EOF.set()
 
        da.set()  # for cases when done but there was no input.
 

	
 

	
 
class BufferedGenerator():
 
    '''
 
    Class behaves as a non-blocking, buffered pipe reader.
 
    Reads chunks of data (through a thread)
 
    from a blocking pipe, and attaches these to an array (Deque) of chunks.
 
    Reading is halted in the thread when max chunks is internally buffered.
 
    The .next() may operate in blocking or non-blocking fashion by yielding
 
    '' if no data is ready
 
    to be sent or by not returning until there is some data to send
 
    When we get EOF from underlying source pipe we raise the marker to raise
 
    StopIteration after the last chunk of data is yielded.
 
    '''
 

	
 
    def __init__(self, source, buffer_size=65536, chunk_size=4096,
 
                 starting_values=[], bottomless=False):
 

	
 
        if bottomless:
 
            maxlen = int(buffer_size / chunk_size)
 
        else:
 
            maxlen = None
 

	
 
        self.data = deque(starting_values, maxlen)
 

	
 
        self.worker = InputStreamChunker(source, self.data, buffer_size,
 
                                         chunk_size)
 
        if starting_values:
 
            self.worker.data_added.set()
 
        self.worker.start()
 

	
 
    ####################
 
    # Generator's methods
 
    ####################
 

	
 
    def __iter__(self):
 
        return self
 

	
 
    def next(self):
 
        while not len(self.data) and not self.worker.EOF.is_set():
 
            self.worker.data_added.clear()
 
            self.worker.data_added.wait(0.2)
 
        if len(self.data):
 
            self.worker.keep_reading.set()
 
            return bytes(self.data.popleft())
 
        elif self.worker.EOF.is_set():
 
            raise StopIteration
 

	
 
    def throw(self, type, value=None, traceback=None):
 
        if not self.worker.EOF.is_set():
 
            raise type(value)
 

	
 
    def start(self):
 
        self.worker.start()
 

	
 
    def stop(self):
 
        self.worker.stop()
 

	
 
    def close(self):
 
        try:
 
            self.worker.stop()
 
            self.throw(GeneratorExit)
 
        except (GeneratorExit, StopIteration):
 
            pass
 

	
 
    def __del__(self):
 
        self.close()
 

	
 
    ####################
 
    # Threaded reader's infrastructure.
 
    ####################
 
    @property
 
    def input(self):
 
        return self.worker.w
 

	
 
    @property
 
    def data_added_event(self):
 
        return self.worker.data_added
 

	
 
    @property
 
    def data_added(self):
 
        return self.worker.data_added.is_set()
 

	
 
    @property
 
    def reading_paused(self):
 
        return not self.worker.keep_reading.is_set()
 

	
 
    @property
 
    def done_reading_event(self):
 
        '''
 
        Done_reding does not mean that the iterator's buffer is empty.
 
        Iterator might have done reading from underlying source, but the read
 
        chunks might still be available for serving through .next() method.
 

	
 
        @return An Event class instance.
 
        '''
 
        return self.worker.EOF
 

	
 
    @property
 
    def done_reading(self):
 
        '''
 
        Done_reding does not mean that the iterator's buffer is empty.
 
        Iterator might have done reading from underlying source, but the read
 
        chunks might still be available for serving through .next() method.
 

	
 
        @return An Bool value.
 
        '''
 
        return self.worker.EOF.is_set()
 

	
 
    @property
 
    def length(self):
 
        '''
 
        returns int.
 

	
 
        This is the lenght of the que of chunks, not the length of
 
        the combined contents in those chunks.
 

	
 
        __len__() cannot be meaningfully implemented because this
 
        reader is just flying throuh a bottomless pit content and
 
        can only know the lenght of what it already saw.
 

	
 
        If __len__() on WSGI server per PEP 3333 returns a value,
 
        the responce's length will be set to that. In order not to
 
        confuse WSGI PEP3333 servers, we will not implement __len__
 
        at all.
 
        '''
 
        return len(self.data)
 

	
 
    def prepend(self, x):
 
        self.data.appendleft(x)
 

	
 
    def append(self, x):
 
        self.data.append(x)
 

	
 
    def extend(self, o):
 
        self.data.extend(o)
 

	
 
    def __getitem__(self, i):
 
        return self.data[i]
 

	
 

	
 
class SubprocessIOChunker():
 
    '''
 
    Processor class wrapping handling of subprocess IO.
 

	
 
    In a way, this is a "communicate()" replacement with a twist.
 

	
 
    - We are multithreaded. Writing in and reading out, err are all sep threads.
 
    - We support concurrent (in and out) stream processing.
 
    - The output is not a stream. It's a queue of read string (bytes, not unicode)
 
      chunks. The object behaves as an iterable. You can "for chunk in obj:" us.
 
    - We are non-blocking in more respects than communicate()
 
      (reading from subprocess out pauses when internal buffer is full, but
 
       does not block the parent calling code. On the flip side, reading from
 
       slow-yielding subprocess may block the iteration until data shows up. This
 
       does not block the parallel inpipe reading occurring parallel thread.)
 

	
 
    The purpose of the object is to allow us to wrap subprocess interactions into
 
    and interable that can be passed to a WSGI server as the application's return
 
    value. Because of stream-processing-ability, WSGI does not have to read ALL
 
    of the subprocess's output and buffer it, before handing it to WSGI server for
 
    HTTP response. Instead, the class initializer reads just a bit of the stream
 
    to figure out if error ocurred or likely to occur and if not, just hands the
 
    further iteration over subprocess output to the server for completion of HTTP
 
    response.
 

	
 
    The real or perceived subprocess error is trapped and raised as one of
 
    EnvironmentError family of exceptions
 

	
 
    Example usage:
 
    #    try:
 
    #        answer = SubprocessIOChunker(
 
    #            cmd,
 
    #            input,
 
    #            buffer_size = 65536,
 
    #            chunk_size = 4096
 
    #            )
 
    #    except (EnvironmentError) as e:
 
    #        print str(e)
 
    #        raise e
 
    #
 
    #    return answer
 

	
 

	
 
    '''
 
    def __init__(self, cmd, inputstream=None, buffer_size=65536,
 
                 chunk_size=4096, starting_values=[]):
 
        '''
 
        Initializes SubprocessIOChunker
 

	
 
        @param cmd A Subprocess.Popen style "cmd". Can be string or array of strings
 
        @param inputstream (Default: None) A file-like, string, or file pointer.
 
        @param buffer_size (Default: 65536) A size of total buffer per stream in bytes.
 
        @param chunk_size (Default: 4096) A max size of a chunk. Actual chunk may be smaller.
 
        @param starting_values (Default: []) An array of strings to put in front of output que.
 
        '''
 

	
 
        if inputstream:
 
            input_streamer = StreamFeeder(inputstream)
 
            input_streamer.start()
 
            inputstream = input_streamer.output
 

	
 
        _p = subprocess.Popen(cmd,
 
            bufsize=-1,
 
            shell=True,
 
            stdin=inputstream,
 
            stdout=subprocess.PIPE,
 
            stderr=subprocess.PIPE
 
            )
 

	
 
        bg_out = BufferedGenerator(_p.stdout, buffer_size, chunk_size, starting_values)
 
        bg_err = BufferedGenerator(_p.stderr, 16000, 1, bottomless=True)
 

	
 
        while not bg_out.done_reading and not bg_out.reading_paused and not bg_err.length:
 
            # doing this until we reach either end of file, or end of buffer.
 
            bg_out.data_added_event.wait(1)
 
            bg_out.data_added_event.clear()
 

	
 
        # at this point it's still ambiguous if we are done reading or just full buffer.
 
        # Either way, if error (returned by ended process, or implied based on
 
        # presence of stuff in stderr output) we error out.
 
        # Else, we are happy.
 
        _returncode = _p.poll()
 
        if _returncode or (_returncode == None and bg_err.length):
 
            try:
 
                _p.terminate()
 
            except:
 
                pass
 
            bg_out.stop()
 
            bg_err.stop()
 
            raise EnvironmentError("Subprocess exited due to an error.\n" + "".join(bg_err))
 

	
 
        self.process = _p
 
        self.output = bg_out
 
        self.error = bg_err
 

	
 
    def __iter__(self):
 
        return self
 

	
 
    def next(self):
 
        if self.process.poll():
 
            raise EnvironmentError("Subprocess exited due to an error:\n" + ''.join(self.error))
 
        return self.output.next()
 

	
 
    def throw(self, type, value=None, traceback=None):
 
        if self.output.length or not self.output.done_reading:
 
            raise type(value)
 

	
 
    def close(self):
 
        try:
 
            self.process.terminate()
 
        except:
 
            pass
 
        try:
 
            self.output.close()
 
        except:
 
            pass
 
        try:
 
            self.error.close()
 
        except:
 
            pass
 

	
 
    def __del__(self):
 
        self.close()
rhodecode/lib/utils.py
Show inline comments
 
@@ -101,103 +101,104 @@ def repo_name_slug(value):
 

	
 
def get_repo_slug(request):
 
    _repo = request.environ['pylons.routes_dict'].get('repo_name')
 
    if _repo:
 
        _repo = _repo.rstrip('/')
 
    return _repo
 

	
 

	
 
def get_repos_group_slug(request):
 
    _group = request.environ['pylons.routes_dict'].get('group_name')
 
    if _group:
 
        _group = _group.rstrip('/')
 
    return _group
 

	
 

	
 
def action_logger(user, action, repo, ipaddr='', sa=None, commit=False):
 
    """
 
    Action logger for various actions made by users
 

	
 
    :param user: user that made this action, can be a unique username string or
 
        object containing user_id attribute
 
    :param action: action to log, should be on of predefined unique actions for
 
        easy translations
 
    :param repo: string name of repository or object containing repo_id,
 
        that action was made on
 
    :param ipaddr: optional ip address from what the action was made
 
    :param sa: optional sqlalchemy session
 

	
 
    """
 

	
 
    if not sa:
 
        sa = meta.Session
 

	
 
    try:
 
        if hasattr(user, 'user_id'):
 
            user_obj = user
 
        elif isinstance(user, basestring):
 
            user_obj = User.get_by_username(user)
 
        else:
 
            raise Exception('You have to provide user object or username')
 

	
 
        if hasattr(repo, 'repo_id'):
 
            repo_obj = Repository.get(repo.repo_id)
 
            repo_name = repo_obj.repo_name
 
        elif  isinstance(repo, basestring):
 
            repo_name = repo.lstrip('/')
 
            repo_obj = Repository.get_by_repo_name(repo_name)
 
        else:
 
            raise Exception('You have to provide repository to action logger')
 
            repo_obj = None
 
            repo_name = ''
 

	
 
        user_log = UserLog()
 
        user_log.user_id = user_obj.user_id
 
        user_log.action = safe_unicode(action)
 

	
 
        user_log.repository_id = repo_obj.repo_id
 
        user_log.repository = repo_obj
 
        user_log.repository_name = repo_name
 

	
 
        user_log.action_date = datetime.datetime.now()
 
        user_log.user_ip = ipaddr
 
        sa.add(user_log)
 

	
 
        log.info(
 
            'Adding user %s, action %s on %s' % (user_obj, action,
 
                                                 safe_unicode(repo))
 
        )
 
        if commit:
 
            sa.commit()
 
    except:
 
        log.error(traceback.format_exc())
 
        raise
 

	
 

	
 
def get_repos(path, recursive=False):
 
    """
 
    Scans given path for repos and return (name,(type,path)) tuple
 

	
 
    :param path: path to scan for repositories
 
    :param recursive: recursive search and return names with subdirs in front
 
    """
 

	
 
    # remove ending slash for better results
 
    path = path.rstrip(os.sep)
 

	
 
    def _get_repos(p):
 
        if not os.access(p, os.W_OK):
 
            return
 
        for dirpath in os.listdir(p):
 
            if os.path.isfile(os.path.join(p, dirpath)):
 
                continue
 
            cur_path = os.path.join(p, dirpath)
 
            try:
 
                scm_info = get_scm(cur_path)
 
                yield scm_info[1].split(path, 1)[-1].lstrip(os.sep), scm_info
 
            except VCSError:
 
                if not recursive:
 
                    continue
 
                #check if this dir containts other repos for recursive scan
 
                rec_path = os.path.join(p, dirpath)
 
                if os.path.isdir(rec_path):
 
                    for inner_scm in _get_repos(rec_path):
 
                        yield inner_scm
 

	
 
    return _get_repos(path)
rhodecode/lib/vcs/backends/git/changeset.py
Show inline comments
 
@@ -149,96 +149,101 @@ class GitChangeset(BaseChangeset):
 
        """
 
        return [self.repository.get_changeset(parent)
 
            for parent in self._commit.parents]
 

	
 
    def next(self, branch=None):
 

	
 
        if branch and self.branch != branch:
 
            raise VCSError('Branch option used on changeset not belonging '
 
                           'to that branch')
 

	
 
        def _next(changeset, branch):
 
            try:
 
                next_ = changeset.revision + 1
 
                next_rev = changeset.repository.revisions[next_]
 
            except IndexError:
 
                raise ChangesetDoesNotExistError
 
            cs = changeset.repository.get_changeset(next_rev)
 

	
 
            if branch and branch != cs.branch:
 
                return _next(cs, branch)
 

	
 
            return cs
 

	
 
        return _next(self, branch)
 

	
 
    def prev(self, branch=None):
 
        if branch and self.branch != branch:
 
            raise VCSError('Branch option used on changeset not belonging '
 
                           'to that branch')
 

	
 
        def _prev(changeset, branch):
 
            try:
 
                prev_ = changeset.revision - 1
 
                if prev_ < 0:
 
                    raise IndexError
 
                prev_rev = changeset.repository.revisions[prev_]
 
            except IndexError:
 
                raise ChangesetDoesNotExistError
 

	
 
            cs = changeset.repository.get_changeset(prev_rev)
 

	
 
            if branch and branch != cs.branch:
 
                return _prev(cs, branch)
 

	
 
            return cs
 

	
 
        return _prev(self, branch)
 

	
 
    def diff(self, ignore_whitespace=True, context=3):
 
        return ''.join(self.repository.get_diff(self, self.parents[0],
 
                                    ignore_whitespace=ignore_whitespace,
 
                                    context=context))
 

	
 
    def get_file_mode(self, path):
 
        """
 
        Returns stat mode of the file at the given ``path``.
 
        """
 
        # ensure path is traversed
 
        self._get_id_for_path(path)
 
        return self._stat_modes[path]
 

	
 
    def get_file_content(self, path):
 
        """
 
        Returns content of the file at given ``path``.
 
        """
 
        id = self._get_id_for_path(path)
 
        blob = self.repository._repo[id]
 
        return blob.as_pretty_string()
 

	
 
    def get_file_size(self, path):
 
        """
 
        Returns size of the file at given ``path``.
 
        """
 
        id = self._get_id_for_path(path)
 
        blob = self.repository._repo[id]
 
        return blob.raw_length()
 

	
 
    def get_file_changeset(self, path):
 
        """
 
        Returns last commit of the file at the given ``path``.
 
        """
 
        node = self.get_node(path)
 
        return node.history[0]
 

	
 
    def get_file_history(self, path):
 
        """
 
        Returns history of file as reversed list of ``Changeset`` objects for
 
        which file at given ``path`` has been modified.
 

	
 
        TODO: This function now uses os underlying 'git' and 'grep' commands
 
        which is generally not good. Should be replaced with algorithm
 
        iterating commits.
 
        """
 
        cmd = 'log --pretty="format: %%H" -s -p %s -- "%s"' % (
 
                  self.id, path
 
               )
 
        so, se = self.repository.run_git_command(cmd)
 
        ids = re.findall(r'[0-9a-fA-F]{40}', so)
 
        return [self.repository.get_changeset(id) for id in ids]
 

	
 
    def get_file_annotate(self, path):
rhodecode/lib/vcs/backends/git/repository.py
Show inline comments
 
@@ -392,159 +392,176 @@ class GitRepository(BaseRepository):
 
        revs = self.run_git_command(cmd)[0].splitlines()
 
        start_pos = 0
 
        end_pos = len(revs)
 
        if start:
 
            _start = self._get_revision(start)
 
            try:
 
                start_pos = revs.index(_start)
 
            except ValueError:
 
                pass
 

	
 
        if end is not None:
 
            _end = self._get_revision(end)
 
            try:
 
                end_pos = revs.index(_end)
 
            except ValueError:
 
                pass
 

	
 
        if None not in [start, end] and start_pos > end_pos:
 
            raise RepositoryError('start cannot be after end')
 

	
 
        if end_pos is not None:
 
            end_pos += 1
 

	
 
        revs = revs[start_pos:end_pos]
 
        if reverse:
 
            revs = reversed(revs)
 
        for rev in revs:
 
            yield self.get_changeset(rev)
 

	
 
    def get_diff(self, rev1, rev2, path=None, ignore_whitespace=False,
 
                 context=3):
 
        """
 
        Returns (git like) *diff*, as plain text. Shows changes introduced by
 
        ``rev2`` since ``rev1``.
 

	
 
        :param rev1: Entry point from which diff is shown. Can be
 
          ``self.EMPTY_CHANGESET`` - in this case, patch showing all
 
          the changes since empty state of the repository until ``rev2``
 
        :param rev2: Until which revision changes should be shown.
 
        :param ignore_whitespace: If set to ``True``, would not show whitespace
 
          changes. Defaults to ``False``.
 
        :param context: How many lines before/after changed lines should be
 
          shown. Defaults to ``3``.
 
        """
 
        flags = ['-U%s' % context]
 
        if ignore_whitespace:
 
            flags.append('-w')
 

	
 
        if hasattr(rev1, 'raw_id'):
 
            rev1 = getattr(rev1, 'raw_id')
 

	
 
        if hasattr(rev2, 'raw_id'):
 
            rev2 = getattr(rev2, 'raw_id')
 

	
 
        if rev1 == self.EMPTY_CHANGESET:
 
            rev2 = self.get_changeset(rev2).raw_id
 
            cmd = ' '.join(['show'] + flags + [rev2])
 
        else:
 
            rev1 = self.get_changeset(rev1).raw_id
 
            rev2 = self.get_changeset(rev2).raw_id
 
            cmd = ' '.join(['diff'] + flags + [rev1, rev2])
 

	
 
        if path:
 
            cmd += ' -- "%s"' % path
 
        stdout, stderr = self.run_git_command(cmd)
 
        # If we used 'show' command, strip first few lines (until actual diff
 
        # starts)
 
        if rev1 == self.EMPTY_CHANGESET:
 
            lines = stdout.splitlines()
 
            x = 0
 
            for line in lines:
 
                if line.startswith('diff'):
 
                    break
 
                x += 1
 
            # Append new line just like 'diff' command do
 
            stdout = '\n'.join(lines[x:]) + '\n'
 
        return stdout
 

	
 
    @LazyProperty
 
    def in_memory_changeset(self):
 
        """
 
        Returns ``GitInMemoryChangeset`` object for this repository.
 
        """
 
        return GitInMemoryChangeset(self)
 

	
 
    def clone(self, url, update_after_clone=True, bare=False):
 
        """
 
        Tries to clone changes from external location.
 

	
 
        :param update_after_clone: If set to ``False``, git won't checkout
 
          working directory
 
        :param bare: If set to ``True``, repository would be cloned into
 
          *bare* git repository (no working directory at all).
 
        """
 
        url = self._get_url(url)
 
        cmd = ['clone']
 
        if bare:
 
            cmd.append('--bare')
 
        elif not update_after_clone:
 
            cmd.append('--no-checkout')
 
        cmd += ['--', '"%s"' % url, '"%s"' % self.path]
 
        cmd = ' '.join(cmd)
 
        # If error occurs run_git_command raises RepositoryError already
 
        self.run_git_command(cmd)
 

	
 
    def pull(self, url):
 
        """
 
        Tries to pull changes from external location.
 
        """
 
        url = self._get_url(url)
 
        cmd = ['pull']
 
        cmd.append("--ff-only")
 
        cmd.append(url)
 
        cmd = ' '.join(cmd)
 
        # If error occurs run_git_command raises RepositoryError already
 
        self.run_git_command(cmd)
 

	
 
    def fetch(self, url):
 
        """
 
        Tries to pull changes from external location.
 
        """
 
        url = self._get_url(url)
 
        cmd = ['fetch']
 
        cmd.append(url)
 
        cmd = ' '.join(cmd)
 
        # If error occurs run_git_command raises RepositoryError already
 
        self.run_git_command(cmd)
 

	
 
    @LazyProperty
 
    def workdir(self):
 
        """
 
        Returns ``Workdir`` instance for this repository.
 
        """
 
        return GitWorkdir(self)
 

	
 
    def get_config_value(self, section, name, config_file=None):
 
        """
 
        Returns configuration value for a given [``section``] and ``name``.
 

	
 
        :param section: Section we want to retrieve value from
 
        :param name: Name of configuration we want to retrieve
 
        :param config_file: A path to file which should be used to retrieve
 
          configuration from (might also be a list of file paths)
 
        """
 
        if config_file is None:
 
            config_file = []
 
        elif isinstance(config_file, basestring):
 
            config_file = [config_file]
 

	
 
        def gen_configs():
 
            for path in config_file + self._config_files:
 
                try:
 
                    yield ConfigFile.from_path(path)
 
                except (IOError, OSError, ValueError):
 
                    continue
 

	
 
        for config in gen_configs():
 
            try:
 
                return config.get(section, name)
 
            except KeyError:
 
                continue
 
        return None
 

	
 
    def get_user_name(self, config_file=None):
 
        """
 
        Returns user's name from global configuration file.
 

	
 
        :param config_file: A path to file which should be used to retrieve
 
          configuration from (might also be a list of file paths)
 
        """
 
        return self.get_config_value('user', 'name', config_file)
 

	
 
    def get_user_email(self, config_file=None):
 
        """
 
        Returns user's email from global configuration file.
 

	
rhodecode/lib/vcs/backends/hg/changeset.py
Show inline comments
 
@@ -91,96 +91,101 @@ class MercurialChangeset(BaseChangeset):
 
        """
 
        return [self.repository.get_changeset(parent.rev())
 
                for parent in self._ctx.parents() if parent.rev() >= 0]
 

	
 
    def next(self, branch=None):
 

	
 
        if branch and self.branch != branch:
 
            raise VCSError('Branch option used on changeset not belonging '
 
                           'to that branch')
 

	
 
        def _next(changeset, branch):
 
            try:
 
                next_ = changeset.revision + 1
 
                next_rev = changeset.repository.revisions[next_]
 
            except IndexError:
 
                raise ChangesetDoesNotExistError
 
            cs = changeset.repository.get_changeset(next_rev)
 

	
 
            if branch and branch != cs.branch:
 
                return _next(cs, branch)
 

	
 
            return cs
 

	
 
        return _next(self, branch)
 

	
 
    def prev(self, branch=None):
 
        if branch and self.branch != branch:
 
            raise VCSError('Branch option used on changeset not belonging '
 
                           'to that branch')
 

	
 
        def _prev(changeset, branch):
 
            try:
 
                prev_ = changeset.revision - 1
 
                if prev_ < 0:
 
                    raise IndexError
 
                prev_rev = changeset.repository.revisions[prev_]
 
            except IndexError:
 
                raise ChangesetDoesNotExistError
 

	
 
            cs = changeset.repository.get_changeset(prev_rev)
 

	
 
            if branch and branch != cs.branch:
 
                return _prev(cs, branch)
 

	
 
            return cs
 

	
 
        return _prev(self, branch)
 

	
 
    def diff(self, ignore_whitespace=True, context=3):
 
        return ''.join(self._ctx.diff(git=True,
 
                                      ignore_whitespace=ignore_whitespace,
 
                                      context=context))
 

	
 
    def _fix_path(self, path):
 
        """
 
        Paths are stored without trailing slash so we need to get rid off it if
 
        needed. Also mercurial keeps filenodes as str so we need to decode
 
        from unicode to str
 
        """
 
        if path.endswith('/'):
 
            path = path.rstrip('/')
 

	
 
        return safe_str(path)
 

	
 
    def _get_kind(self, path):
 
        path = self._fix_path(path)
 
        if path in self._file_paths:
 
            return NodeKind.FILE
 
        elif path in self._dir_paths:
 
            return NodeKind.DIR
 
        else:
 
            raise ChangesetError("Node does not exist at the given path %r"
 
                % (path))
 

	
 
    def _get_filectx(self, path):
 
        path = self._fix_path(path)
 
        if self._get_kind(path) != NodeKind.FILE:
 
            raise ChangesetError("File does not exist for revision %r at "
 
                " %r" % (self.revision, path))
 
        return self._ctx.filectx(path)
 

	
 
    def _extract_submodules(self):
 
        """
 
        returns a dictionary with submodule information from substate file
 
        of hg repository
 
        """
 
        return self._ctx.substate
 

	
 
    def get_file_mode(self, path):
 
        """
 
        Returns stat mode of the file at the given ``path``.
 
        """
 
        fctx = self._get_filectx(path)
 
        if 'x' in fctx.flags():
 
            return 0100755
 
        else:
 
            return 0100644
 

	
 
    def get_file_content(self, path):
 
        """
 
        Returns content of the file at given ``path``.
rhodecode/lib/vcs/backends/hg/repository.py
Show inline comments
 
@@ -186,96 +186,102 @@ class MercurialRepository(BaseRepository
 
            raise TagDoesNotExistError("Tag %s does not exist" % name)
 
        if message is None:
 
            message = "Removed tag %s" % name
 
        if date is None:
 
            date = datetime.datetime.now().ctime()
 
        local = False
 

	
 
        try:
 
            self._repo.tag(name, nullid, message, local, user, date)
 
            self.tags = self._get_tags()
 
        except Abort, e:
 
            raise RepositoryError(e.message)
 

	
 
    @LazyProperty
 
    def bookmarks(self):
 
        """
 
        Get's bookmarks for this repository
 
        """
 
        return self._get_bookmarks()
 

	
 
    def _get_bookmarks(self):
 
        if self._empty:
 
            return {}
 

	
 
        sortkey = lambda ctx: ctx[0]  # sort by name
 
        _bookmarks = [(safe_unicode(n), hex(h),) for n, h in
 
                 self._repo._bookmarks.items()]
 
        return OrderedDict(sorted(_bookmarks, key=sortkey, reverse=True))
 

	
 
    def _get_all_revisions(self):
 

	
 
        return map(lambda x: hex(x[7]), self._repo.changelog.index)[:-1]
 

	
 
    def get_diff(self, rev1, rev2, path='', ignore_whitespace=False,
 
                  context=3):
 
        """
 
        Returns (git like) *diff*, as plain text. Shows changes introduced by
 
        ``rev2`` since ``rev1``.
 

	
 
        :param rev1: Entry point from which diff is shown. Can be
 
          ``self.EMPTY_CHANGESET`` - in this case, patch showing all
 
          the changes since empty state of the repository until ``rev2``
 
        :param rev2: Until which revision changes should be shown.
 
        :param ignore_whitespace: If set to ``True``, would not show whitespace
 
          changes. Defaults to ``False``.
 
        :param context: How many lines before/after changed lines should be
 
          shown. Defaults to ``3``.
 
        """
 
        if hasattr(rev1, 'raw_id'):
 
            rev1 = getattr(rev1, 'raw_id')
 

	
 
        if hasattr(rev2, 'raw_id'):
 
            rev2 = getattr(rev2, 'raw_id')
 

	
 
        # Check if given revisions are present at repository (may raise
 
        # ChangesetDoesNotExistError)
 
        if rev1 != self.EMPTY_CHANGESET:
 
            self.get_changeset(rev1)
 
        self.get_changeset(rev2)
 

	
 
        file_filter = match(self.path, '', [path])
 
        return ''.join(patch.diff(self._repo, rev1, rev2, match=file_filter,
 
                          opts=diffopts(git=True,
 
                                        ignorews=ignore_whitespace,
 
                                        context=context)))
 

	
 
    def _check_url(self, url):
 
        """
 
        Function will check given url and try to verify if it's a valid
 
        link. Sometimes it may happened that mercurial will issue basic
 
        auth request that can cause whole API to hang when used from python
 
        or other external calls.
 

	
 
        On failures it'll raise urllib2.HTTPError, return code 200 if url
 
        is valid or True if it's a local path
 
        """
 

	
 
        from mercurial.util import url as Url
 

	
 
        # those authnadlers are patched for python 2.6.5 bug an
 
        # infinit looping when given invalid resources
 
        from mercurial.url import httpbasicauthhandler, httpdigestauthhandler
 

	
 
        # check first if it's not an local url
 
        if os.path.isdir(url) or url.startswith('file:'):
 
            return True
 

	
 
        handlers = []
 
        test_uri, authinfo = Url(url).authinfo()
 

	
 
        if authinfo:
 
            #create a password manager
 
            passmgr = urllib2.HTTPPasswordMgrWithDefaultRealm()
 
            passmgr.add_password(*authinfo)
 

	
 
            handlers.extend((httpbasicauthhandler(passmgr),
 
                             httpdigestauthhandler(passmgr)))
 

	
 
        o = urllib2.build_opener(*handlers)
 
        o.addheaders = [('Content-Type', 'application/mercurial-0.1'),
 
                        ('Accept', 'application/mercurial-0.1')]
 

	
rhodecode/model/comment.py
Show inline comments
 
@@ -59,96 +59,97 @@ class ChangesetCommentsModel(BaseModel):
 

	
 
        :param text:
 
        :param repo_id:
 
        :param user_id:
 
        :param revision:
 
        :param f_path:
 
        :param line_no:
 
        :param status_change:
 
        """
 

	
 
        if text:
 
            repo = Repository.get(repo_id)
 
            cs = repo.scm_instance.get_changeset(revision)
 
            desc = "%s - %s" % (cs.short_id, h.shorter(cs.message, 256))
 
            author_email = cs.author_email
 
            comment = ChangesetComment()
 
            comment.repo = repo
 
            comment.user_id = user_id
 
            comment.revision = revision
 
            comment.text = text
 
            comment.f_path = f_path
 
            comment.line_no = line_no
 

	
 
            self.sa.add(comment)
 
            self.sa.flush()
 
            # make notification
 
            line = ''
 
            if line_no:
 
                line = _('on line %s') % line_no
 
            subj = safe_unicode(
 
                h.link_to('Re commit: %(commit_desc)s %(line)s' % \
 
                          {'commit_desc': desc, 'line': line},
 
                          h.url('changeset_home', repo_name=repo.repo_name,
 
                                revision=revision,
 
                                anchor='comment-%s' % comment.comment_id,
 
                                qualified=True,
 
                          )
 
                )
 
            )
 

	
 
            body = text
 

	
 
            # get the current participants of this changeset
 
            recipients = ChangesetComment.get_users(revision=revision)
 

	
 
            # add changeset author if it's in rhodecode system
 
            recipients += [User.get_by_email(author_email)]
 

	
 
            # create notification objects, and emails
 
            NotificationModel().create(
 
              created_by=user_id, subject=subj, body=body,
 
              recipients=recipients, type_=Notification.TYPE_CHANGESET_COMMENT,
 
              email_kwargs={'status_change': status_change}
 
            )
 

	
 
            mention_recipients = set(self._extract_mentions(body))\
 
                                    .difference(recipients)
 
            if mention_recipients:
 
                subj = _('[Mention]') + ' ' + subj
 
                NotificationModel().create(
 
                    created_by=user_id, subject=subj, body=body,
 
                    recipients=mention_recipients,
 
                    type_=Notification.TYPE_CHANGESET_COMMENT
 
                )
 

	
 
            return comment
 

	
 
    def delete(self, comment):
 
        """
 
        Deletes given comment
 

	
 
        :param comment_id:
 
        """
 
        comment = self.__get_changeset_comment(comment)
 
        self.sa.delete(comment)
 

	
 
        return comment
 

	
 
    def get_comments(self, repo_id, revision):
 
        return ChangesetComment.query()\
 
                .filter(ChangesetComment.repo_id == repo_id)\
 
                .filter(ChangesetComment.revision == revision)\
 
                .filter(ChangesetComment.line_no == None)\
 
                .filter(ChangesetComment.f_path == None).all()
 

	
 
    def get_inline_comments(self, repo_id, revision):
 
        comments = self.sa.query(ChangesetComment)\
 
            .filter(ChangesetComment.repo_id == repo_id)\
 
            .filter(ChangesetComment.revision == revision)\
 
            .filter(ChangesetComment.line_no != None)\
 
            .filter(ChangesetComment.f_path != None)\
 
            .order_by(ChangesetComment.comment_id.asc())\
 
            .all()
 

	
 
        paths = defaultdict(lambda: defaultdict(list))
 

	
 
        for co in comments:
rhodecode/model/notification.py
Show inline comments
 
@@ -58,98 +58,101 @@ class NotificationModel(BaseModel):
 
    def create(self, created_by, subject, body, recipients=None,
 
               type_=Notification.TYPE_MESSAGE, with_email=True,
 
               email_kwargs={}):
 
        """
 

	
 
        Creates notification of given type
 

	
 
        :param created_by: int, str or User instance. User who created this
 
            notification
 
        :param subject:
 
        :param body:
 
        :param recipients: list of int, str or User objects, when None
 
            is given send to all admins
 
        :param type_: type of notification
 
        :param with_email: send email with this notification
 
        :param email_kwargs: additional dict to pass as args to email template
 
        """
 
        from rhodecode.lib.celerylib import tasks, run_task
 

	
 
        if recipients and not getattr(recipients, '__iter__', False):
 
            raise Exception('recipients must be a list of iterable')
 

	
 
        created_by_obj = self.__get_user(created_by)
 

	
 
        if recipients:
 
            recipients_objs = []
 
            for u in recipients:
 
                obj = self.__get_user(u)
 
                if obj:
 
                    recipients_objs.append(obj)
 
            recipients_objs = set(recipients_objs)
 
            log.debug('sending notifications %s to %s' % (
 
                type_, recipients_objs)
 
            )
 
        else:
 
            # empty recipients means to all admins
 
            recipients_objs = User.query().filter(User.admin == True).all()
 
            log.debug('sending notifications %s to admins: %s' % (
 
                type_, recipients_objs)
 
            )
 
        notif = Notification.create(
 
            created_by=created_by_obj, subject=subject,
 
            body=body, recipients=recipients_objs, type_=type_
 
        )
 

	
 
        if with_email is False:
 
            return notif
 

	
 
        # send email with notification
 
        for rec in recipients_objs:
 
        #don't send email to person who created this comment
 
        rec_objs = set(recipients_objs).difference(set([created_by_obj]))
 

	
 
        # send email with notification to all other participants
 
        for rec in rec_objs:
 
            email_subject = NotificationModel().make_description(notif, False)
 
            type_ = type_
 
            email_body = body
 
            ## this is passed into template
 
            kwargs = {'subject': subject, 'body': h.rst_w_mentions(body)}
 
            kwargs.update(email_kwargs)
 
            email_body_html = EmailNotificationModel()\
 
                                .get_email_tmpl(type_, **kwargs)
 

	
 
            run_task(tasks.send_email, rec.email, email_subject, email_body,
 
                     email_body_html)
 

	
 
        return notif
 

	
 
    def delete(self, user, notification):
 
        # we don't want to remove actual notification just the assignment
 
        try:
 
            notification = self.__get_notification(notification)
 
            user = self.__get_user(user)
 
            if notification and user:
 
                obj = UserNotification.query()\
 
                        .filter(UserNotification.user == user)\
 
                        .filter(UserNotification.notification
 
                                == notification)\
 
                        .one()
 
                self.sa.delete(obj)
 
                return True
 
        except Exception:
 
            log.error(traceback.format_exc())
 
            raise
 

	
 
    def get_for_user(self, user):
 
        user = self.__get_user(user)
 
        return user.notifications
 

	
 
    def mark_all_read_for_user(self, user):
 
        user = self.__get_user(user)
 
        UserNotification.query()\
 
            .filter(UserNotification.read == False)\
 
            .update({'read': True})
 

	
 
    def get_unread_cnt_for_user(self, user):
 
        user = self.__get_user(user)
 
        return UserNotification.query()\
 
                .filter(UserNotification.read == False)\
 
                .filter(UserNotification.user == user).count()
 

	
 
    def get_unread_for_user(self, user):
rhodecode/model/scm.py
Show inline comments
 
@@ -315,97 +315,99 @@ class ScmModel(BaseModel):
 
        u = User.get_by_username(username)
 

	
 
        f = self.sa.query(UserFollowing)\
 
            .filter(UserFollowing.follows_user == u)\
 
            .filter(UserFollowing.user_id == user_id).scalar()
 

	
 
        return f is not None
 

	
 
    def get_followers(self, repo_id):
 
        if not isinstance(repo_id, int):
 
            repo_id = getattr(Repository.get_by_repo_name(repo_id), 'repo_id')
 

	
 
        return self.sa.query(UserFollowing)\
 
                .filter(UserFollowing.follows_repo_id == repo_id).count()
 

	
 
    def get_forks(self, repo_id):
 
        if not isinstance(repo_id, int):
 
            repo_id = getattr(Repository.get_by_repo_name(repo_id), 'repo_id')
 

	
 
        return self.sa.query(Repository)\
 
                .filter(Repository.fork_id == repo_id).count()
 

	
 
    def mark_as_fork(self, repo, fork, user):
 
        repo = self.__get_repo(repo)
 
        fork = self.__get_repo(fork)
 
        repo.fork = fork
 
        self.sa.add(repo)
 
        return repo
 

	
 
    def pull_changes(self, repo_name, username):
 
        dbrepo = Repository.get_by_repo_name(repo_name)
 
        clone_uri = dbrepo.clone_uri
 
        if not clone_uri:
 
            raise Exception("This repository doesn't have a clone uri")
 

	
 
        repo = dbrepo.scm_instance
 
        try:
 
            extras = {
 
                'ip': '',
 
                'username': username,
 
                'action': 'push_remote',
 
                'repository': repo_name,
 
                'scm': repo.alias,
 
            }
 

	
 
            # inject ui extra param to log this action via push logger
 
            for k, v in extras.items():
 
                repo._repo.ui.setconfig('rhodecode_extras', k, v)
 

	
 
            if repo.alias == 'git':
 
                repo.fetch(clone_uri)
 
            else:
 
            repo.pull(clone_uri)
 
            self.mark_for_invalidation(repo_name)
 
        except:
 
            log.error(traceback.format_exc())
 
            raise
 

	
 
    def commit_change(self, repo, repo_name, cs, user, author, message,
 
                      content, f_path):
 

	
 
        if repo.alias == 'hg':
 
            from rhodecode.lib.vcs.backends.hg import \
 
                MercurialInMemoryChangeset as IMC
 
        elif repo.alias == 'git':
 
            from rhodecode.lib.vcs.backends.git import \
 
                GitInMemoryChangeset as IMC
 

	
 
        # decoding here will force that we have proper encoded values
 
        # in any other case this will throw exceptions and deny commit
 
        content = safe_str(content)
 
        path = safe_str(f_path)
 
        # message and author needs to be unicode
 
        # proper backend should then translate that into required type
 
        message = safe_unicode(message)
 
        author = safe_unicode(author)
 
        m = IMC(repo)
 
        m.change(FileNode(path, content))
 
        tip = m.commit(message=message,
 
                       author=author,
 
                       parents=[cs], branch=cs.branch)
 

	
 
        new_cs = tip.short_id
 
        action = 'push_local:%s' % new_cs
 

	
 
        action_logger(user, action, repo_name)
 

	
 
        self.mark_for_invalidation(repo_name)
 

	
 
    def create_node(self, repo, repo_name, cs, user, author, message, content,
 
                      f_path):
 
        if repo.alias == 'hg':
 
            from rhodecode.lib.vcs.backends.hg import MercurialInMemoryChangeset as IMC
 
        elif repo.alias == 'git':
 
            from rhodecode.lib.vcs.backends.git import GitInMemoryChangeset as IMC
 
        # decoding here will force that we have proper encoded values
 
        # in any other case this will throw exceptions and deny commit
 

	
 
        if isinstance(content, (basestring,)):
 
            content = safe_str(content)
rhodecode/public/css/style.css
Show inline comments
 
@@ -285,96 +285,101 @@ div.options a {
 
	color: #fff;
 
}
 
 
#header ul#logged-user li.highlight a:hover {
 
	color: #FFF;
 
}
 
 
#header #header-inner {
 
	min-height: 44px;
 
	clear: both;
 
	position: relative;
 
    background-color: #003B76;
 
    background-repeat: repeat-x;
 
    background-image: -khtml-gradient(linear, left top, left bottom, from(#003B76), to(#00376E) );
 
    background-image: -moz-linear-gradient(top, #003b76, #00376e);
 
    background-image: -ms-linear-gradient(top, #003b76, #00376e);
 
    background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #003b76),color-stop(100%, #00376e) );
 
    background-image: -webkit-linear-gradient(top, #003b76, #00376e);
 
    background-image: -o-linear-gradient(top, #003b76, #00376e);
 
    background-image: linear-gradient(top, #003b76, #00376e);
 
    filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#003b76',endColorstr='#00376e', GradientType=0 );
 
	margin: 0;
 
	padding: 0;
 
	display: block;
 
	box-shadow: 0 2px 2px rgba(0, 0, 0, 0.6);
 
	-webkit-border-radius: 4px 4px 4px 4px;
 
	-khtml-border-radius: 4px 4px 4px 4px;
 
	-moz-border-radius: 4px 4px 4px 4px;
 
	border-radius: 4px 4px 4px 4px;
 
}
 
#header #header-inner.hover{
 
	position: fixed !important;
 
	width: 100% !important;
 
	margin-left: -10px !important;
 
	z-index: 10000;
 
    -webkit-border-radius: 0px 0px 0px 0px;
 
    -khtml-border-radius: 0px 0px 0px 0px;
 
    -moz-border-radius: 0px 0px 0px 0px;
 
    border-radius: 0px 0px 0px 0px;	
 
}
 
 
.ie7 #header #header-inner.hover,
 
.ie8 #header #header-inner.hover,
 
.ie9 #header #header-inner.hover
 
{
 
    z-index: auto !important;
 
}
 
 
.header-pos-fix{
 
	margin-top: -44px;
 
	padding-top: 44px;
 
}
 
 
#header #header-inner #home a {
 
	height: 40px;
 
	width: 46px;
 
	display: block;
 
	background: url("../images/button_home.png");
 
	background-position: 0 0;
 
	margin: 0;
 
	padding: 0;
 
}
 
 
#header #header-inner #home a:hover {
 
	background-position: 0 -40px;
 
}
 
 
#header #header-inner #logo {
 
	float: left;
 
	position: absolute;
 
}
 
 
#header #header-inner #logo h1 {
 
	color: #FFF;
 
	font-size: 20px;
 
	margin: 12px 0 0 13px;
 
	padding: 0;
 
}
 
 
#header #header-inner #logo a {
 
	color: #fff;
 
	text-decoration: none;
 
}
 
 
#header #header-inner #logo a:hover {
 
	color: #bfe3ff;
 
}
 
 
#header #header-inner #quick,#header #header-inner #quick ul {
 
	position: relative;
 
	float: right;
 
	list-style-type: none;
 
	list-style-position: outside;
 
	margin: 8px 8px 0 0;
 
	padding: 0;
 
}
 
 
#header #header-inner #quick li {
 
	position: relative;
 
	float: left;
 
	margin: 0 5px 0 0;
 
@@ -2795,96 +2800,103 @@ table.code-browser .submodule-dir {
 
.info_box .rev {
 
	color: #003367;
 
	font-size: 1.6em;
 
	font-weight: bold;
 
	vertical-align: sub;
 
}
 
 
.info_box input#at_rev,.info_box input#size {
 
	background: #FFF;
 
	border-top: 1px solid #b3b3b3;
 
	border-left: 1px solid #b3b3b3;
 
	border-right: 1px solid #eaeaea;
 
	border-bottom: 1px solid #eaeaea;
 
	color: #000;
 
	font-size: 12px;
 
	margin: 0;
 
	padding: 1px 5px 1px;
 
}
 
 
.info_box input#view {
 
	text-align: center;
 
	padding: 4px 3px 2px 2px;
 
}
 
 
.yui-overlay,.yui-panel-container {
 
	visibility: hidden;
 
	position: absolute;
 
	z-index: 2;
 
}
 
 
.yui-tt {
 
	visibility: hidden;
 
	position: absolute;
 
	color: #666;
 
	background-color: #FFF;
 
	border: 2px solid #003367;
 
	font: 100% sans-serif;
 
	width: auto;
 
	opacity: 1px;
 
	padding: 8px;
 
	white-space: pre-wrap;
 
	-webkit-border-radius: 8px 8px 8px 8px;
 
	-khtml-border-radius: 8px 8px 8px 8px;
 
	-moz-border-radius: 8px 8px 8px 8px;
 
	border-radius: 8px 8px 8px 8px;
 
	box-shadow: 0 2px 2px rgba(0, 0, 0, 0.6);
 
}
 
 
.mentions-container{
 
	width: 90% !important;
 
}
 
.mentions-container .yui-ac-content{
 
	width: 100% !important;
 
}
 
 
.ac {
 
	vertical-align: top;
 
}
 
 
.ac .yui-ac {
 
	position: inherit;
 
	font-size: 100%;
 
}
 
 
.ac .perm_ac {
 
	width: 20em;
 
}
 
 
.ac .yui-ac-input {
 
	width: 100%;
 
}
 
 
.ac .yui-ac-container {
 
	position: absolute;
 
	top: 1.6em;
 
	width: auto;
 
}
 
 
.ac .yui-ac-content {
 
	position: absolute;
 
	border: 1px solid gray;
 
	background: #fff;
 
	z-index: 9050;
 
	
 
}
 
 
.ac .yui-ac-shadow {
 
	position: absolute;
 
	width: 100%;
 
	background: #000;
 
	-moz-opacity: 0.1px;
 
	opacity: .10;
 
	filter: alpha(opacity = 10);
 
	z-index: 9049;
 
	margin: .3em;
 
}
 
 
.ac .yui-ac-content ul {
 
	width: 100%;
 
	margin: 0;
 
	padding: 0;
 
	z-index: 9050;
 
}
rhodecode/public/js/rhodecode.js
Show inline comments
 
/**
 
RhodeCode JS Files
 
**/
 

	
 
if (typeof console == "undefined" || typeof console.log == "undefined"){
 
	console = { log: function() {} }
 
}
 

	
 

	
 
var str_repeat = function(i, m) {
 
	for (var o = []; m > 0; o[--m] = i);
 
	return o.join('');
 
};
 

	
 
/**
 
 * INJECT .format function into String
 
 * Usage: "My name is {0} {1}".format("Johny","Bravo")
 
 * Return "My name is Johny Bravo"
 
 * Inspired by https://gist.github.com/1049426
 
 */
 
String.prototype.format = function() {
 
	  
 
	  function format() {
 
	    var str = this;
 
	    var len = arguments.length+1;
 
	    var safe = undefined;
 
	    var arg = undefined;
 
	    
 
	    // For each {0} {1} {n...} replace with the argument in that position.  If 
 
	    // the argument is an object or an array it will be stringified to JSON.
 
	    for (var i=0; i < len; arg = arguments[i++]) {
 
	      safe = typeof arg === 'object' ? JSON.stringify(arg) : arg;
 
	      str = str.replace(RegExp('\\{'+(i-1)+'\\}', 'g'), safe);
 
	    }
 
	    return str;
 
	  }
 

	
 
	  // Save a reference of what may already exist under the property native.  
 
	  // Allows for doing something like: if("".format.native) { /* use native */ }
 
	  format.native = String.prototype.format;
 

	
 
	  // Replace the prototype property
 
	  return format;
 

	
 
}();
 

	
 
String.prototype.strip = function(char) {
 
	if(char === undefined){
 
	    char = '\\s';
 
	}
 
	return this.replace(new RegExp('^'+char+'+|'+char+'+$','g'), '');
 
}
 
String.prototype.lstrip = function(char) {
 
	if(char === undefined){
 
	    char = '\\s';
 
	}
 
	return this.replace(new RegExp('^'+char+'+'),'');
 
}
 
String.prototype.rstrip = function(char) {
 
	if(char === undefined){
 
	    char = '\\s';
 
	}
 
	return this.replace(new RegExp(''+char+'+$'),'');
 
}
 

	
 
/**
 
 * SmartColorGenerator
 
 *
 
 *usage::
 
 *	var CG = new ColorGenerator();
 
 *  var col = CG.getColor(key); //returns array of RGB
 
 *  'rgb({0})'.format(col.join(',')
 
 * 
 
 * @returns {ColorGenerator}
 
 */
 
var ColorGenerator = function(){
 
	this.GOLDEN_RATIO = 0.618033988749895;
 
	this.CURRENT_RATIO = 0.22717784590367374 // this can be random
 
	this.HSV_1 = 0.75;//saturation
 
	this.HSV_2 = 0.95;
 
	this.color;
 
	this.cacheColorMap = {};
 
};
 

	
 
ColorGenerator.prototype = {
 
    getColor:function(key){
 
    	if(this.cacheColorMap[key] !== undefined){
 
    		return this.cacheColorMap[key];
 
    	}
 
    	else{
 
    		this.cacheColorMap[key] = this.generateColor();
 
    		return this.cacheColorMap[key];
 
    	}
 
    },
 
    _hsvToRgb:function(h,s,v){
 
        if (s == 0.0)
 
            return [v, v, v];
 
        i = parseInt(h * 6.0)
 
        f = (h * 6.0) - i
 
        p = v * (1.0 - s)
 
        q = v * (1.0 - s * f)
 
        t = v * (1.0 - s * (1.0 - f))
 
        i = i % 6
 
        if (i == 0) 
 
            return [v, t, p]
 
        if (i == 1) 
 
            return [q, v, p]
 
        if (i == 2) 
 
            return [p, v, t]
 
        if (i == 3)
 
            return [p, q, v]
 
        if (i == 4) 
 
@@ -402,97 +420,97 @@ var injectInlineForm = function(tr){
 
	  
 
	  YUD.get('text_'+lineno).focus();
 
	  var f = YUD.get(form);
 
	  
 
	  var overlay = f.getElementsByClassName('overlay')[0];
 
	  var _form = f.getElementsByClassName('inline-form')[0];
 
	  
 
	  form.on('submit',function(e){
 
		  YUE.preventDefault(e);
 
		  
 
		  //ajax submit
 
		  var text = YUD.get('text_'+lineno).value;
 
		  var postData = {
 
	            'text':text,
 
	            'f_path':f_path,
 
	            'line':lineno
 
		  };
 
		  
 
		  if(lineno === undefined){
 
			  alert('missing line !');
 
			  return
 
		  }
 
		  if(f_path === undefined){
 
			  alert('missing file path !');
 
			  return
 
		  }
 
		  
 
		  if(text == ""){
 
			  return
 
		  }
 
		  
 
		  var success = function(o){
 
			  YUD.removeClass(tr, 'form-open');
 
			  removeInlineForm(f);			  
 
			  var json_data = JSON.parse(o.responseText);
 
	          renderInlineComment(json_data);
 
		  };
 

	
 
		  if (YUD.hasClass(overlay,'overlay')){
 
			  var w = _form.offsetWidth;
 
			  var h = _form.offsetHeight;
 
			  YUD.setStyle(overlay,'width',w+'px');
 
			  YUD.setStyle(overlay,'height',h+'px');
 
		  }		  
 
		  YUD.addClass(overlay, 'submitting');		  
 
		  
 
		  ajaxPOST(submit_url, postData, success);
 
	  });
 
	  
 
	  // callbacks
 
	  tooltip_activate();
 
};
 

	
 
var deleteComment = function(comment_id){
 
	var url = AJAX_COMMENT_DELETE_URL.replace('__COMMENT_ID__',comment_id);
 
    var postData = {'_method':'delete'};
 
    var success = function(o){
 
        var n = YUD.get('comment-tr-'+comment_id);
 
        var root = n.previousElementSibling.previousElementSibling;
 
        n.parentNode.removeChild(n);
 

	
 
        // scann nodes, and attach add button to last one
 
        placeAddButton(root);
 
    }
 
    ajaxPOST(url,postData,success);
 
}
 

	
 

	
 
var createInlineAddButton = function(tr){
 

	
 
	var label = TRANSLATION_MAP['add another comment'];
 
	
 
	var html_el = document.createElement('div');
 
	YUD.addClass(html_el, 'add-comment');
 
	html_el.innerHTML = '<span class="ui-btn">{0}</span>'.format(label);
 
	
 
	var add = new YAHOO.util.Element(html_el);
 
	add.on('click', function(e) {
 
		injectInlineForm(tr);
 
	});
 
	return add;
 
};
 

	
 
var getLineNo = function(tr) {
 
	var line;
 
	var o = tr.children[0].id.split('_');
 
	var n = tr.children[1].id.split('_');
 

	
 
	if (n.length >= 2) {
 
		line = n[n.length-1];
 
	} else if (o.length >= 2) {
 
		line = o[o.length-1];
 
	}
 

	
 
	return line
 
};
 

	
 
var placeAddButton = function(target_tr){
 
@@ -774,265 +792,453 @@ var  getSelectionLink = function(selecti
 
	                hl_div = document.createElement('div');
 
	                hl_div.id = 'linktt';
 
	            }
 
	            anchor = '#L'+ranges[0]+'-'+ranges[1];
 
	            hl_div.innerHTML = '';
 
	            l = document.createElement('a');
 
	            l.href = location.href.substring(0,location.href.indexOf('#'))+anchor;
 
	            l.innerHTML = selection_link_label;
 
	            hl_div.appendChild(l);
 
	            
 
	            YUD.get('body').appendChild(hl_div);
 
	            
 
	            xy = YUD.getXY(till.id);
 
	            
 
	            YUD.addClass('linktt','yui-tt');
 
	            YUD.setStyle('linktt','top',xy[1]+offset+'px');
 
	            YUD.setStyle('linktt','left',xy[0]+'px');
 
	            YUD.setStyle('linktt','visibility','visible');
 
	        }
 
	        else{
 
	        	YUD.setStyle('linktt','visibility','hidden');
 
	        }
 
	    }
 
	}
 
};
 

	
 
var deleteNotification = function(url, notification_id,callbacks){
 
    var callback = { 
 
		success:function(o){
 
		    var obj = YUD.get(String("notification_"+notification_id));
 
		    if(obj.parentNode !== undefined){
 
				obj.parentNode.removeChild(obj);
 
			}
 
			_run_callbacks(callbacks);
 
		},
 
	    failure:function(o){
 
	        alert("error");
 
	    },
 
	};
 
    var postData = '_method=delete';
 
    var sUrl = url.replace('__NOTIFICATION_ID__',notification_id);
 
    var request = YAHOO.util.Connect.asyncRequest('POST', sUrl, 
 
    											  callback, postData);
 
};	
 

	
 

	
 
/** MEMBERS AUTOCOMPLETE WIDGET **/
 

	
 
var MembersAutoComplete = function (users_list, groups_list, group_lbl, members_lbl) {
 
var MembersAutoComplete = function (users_list, groups_list) {
 
    var myUsers = users_list;
 
    var myGroups = groups_list;
 

	
 
    // Define a custom search function for the DataSource of users
 
    var matchUsers = function (sQuery) {
 
            // Case insensitive matching
 
            var query = sQuery.toLowerCase();
 
            var i = 0;
 
            var l = myUsers.length;
 
            var matches = [];
 

	
 
            // Match against each name of each contact
 
            for (; i < l; i++) {
 
                contact = myUsers[i];
 
                if ((contact.fname.toLowerCase().indexOf(query) > -1) || (contact.lname.toLowerCase().indexOf(query) > -1) || (contact.nname && (contact.nname.toLowerCase().indexOf(query) > -1))) {
 
                if (((contact.fname+"").toLowerCase().indexOf(query) > -1) || 
 
                   	 ((contact.lname+"").toLowerCase().indexOf(query) > -1) || 
 
                   	 ((contact.nname) && ((contact.nname).toLowerCase().indexOf(query) > -1))) {
 
                    matches[matches.length] = contact;
 
                }
 
            }
 
            return matches;
 
        };
 

	
 
    // Define a custom search function for the DataSource of usersGroups
 
    var matchGroups = function (sQuery) {
 
            // Case insensitive matching
 
            var query = sQuery.toLowerCase();
 
            var i = 0;
 
            var l = myGroups.length;
 
            var matches = [];
 

	
 
            // Match against each name of each contact
 
            for (; i < l; i++) {
 
                matched_group = myGroups[i];
 
                if (matched_group.grname.toLowerCase().indexOf(query) > -1) {
 
                    matches[matches.length] = matched_group;
 
                }
 
            }
 
            return matches;
 
        };
 

	
 
    //match all
 
    var matchAll = function (sQuery) {
 
            u = matchUsers(sQuery);
 
            g = matchGroups(sQuery);
 
            return u.concat(g);
 
        };
 

	
 
    // DataScheme for members
 
    var memberDS = new YAHOO.util.FunctionDataSource(matchAll);
 
    memberDS.responseSchema = {
 
        fields: ["id", "fname", "lname", "nname", "grname", "grmembers", "gravatar_lnk"]
 
    };
 

	
 
    // DataScheme for owner
 
    var ownerDS = new YAHOO.util.FunctionDataSource(matchUsers);
 
    ownerDS.responseSchema = {
 
        fields: ["id", "fname", "lname", "nname", "gravatar_lnk"]
 
    };
 

	
 
    // Instantiate AutoComplete for perms
 
    var membersAC = new YAHOO.widget.AutoComplete("perm_new_member_name", "perm_container", memberDS);
 
    membersAC.useShadow = false;
 
    membersAC.resultTypeList = false;
 

	
 
    // Instantiate AutoComplete for owner
 
    var ownerAC = new YAHOO.widget.AutoComplete("user", "owner_container", ownerDS);
 
    ownerAC.useShadow = false;
 
    ownerAC.resultTypeList = false;
 

	
 

	
 
    // Helper highlight function for the formatter
 
    var highlightMatch = function (full, snippet, matchindex) {
 
            return full.substring(0, matchindex) 
 
            + "<span class='match'>" 
 
            + full.substr(matchindex, snippet.length) 
 
            + "</span>" + full.substring(matchindex + snippet.length);
 
        };
 

	
 
    // Custom formatter to highlight the matching letters
 
    var custom_formatter = function (oResultData, sQuery, sResultMatch) {
 
            var query = sQuery.toLowerCase();
 
            var _gravatar = function(res, em, group){
 
            	if (group !== undefined){
 
            		em = '/images/icons/group.png'
 
            	}
 
            	tmpl = '<div class="ac-container-wrap"><img class="perm-gravatar-ac" src="{0}"/>{1}</div>'
 
            	return tmpl.format(em,res)
 
            }
 
            // group
 
            if (oResultData.grname != undefined) {
 
                var grname = oResultData.grname;
 
                var grmembers = oResultData.grmembers;
 
                var grnameMatchIndex = grname.toLowerCase().indexOf(query);
 
                var grprefix = "{0}: ".format(group_lbl);
 
                var grprefix = "{0}: ".format(_TM['Group']);
 
                var grsuffix = " (" + grmembers + "  )";
 
                var grsuffix = " ({0}  {1})".format(grmembers, members_lbl);
 
                var grsuffix = " ({0}  {1})".format(grmembers, _TM['members']);
 

	
 
                if (grnameMatchIndex > -1) {
 
                    return _gravatar(grprefix + highlightMatch(grname, query, grnameMatchIndex) + grsuffix,null,true);
 
                }
 
			    return _gravatar(grprefix + oResultData.grname + grsuffix, null,true);
 
            // Users
 
            } else if (oResultData.fname != undefined) {
 
                var fname = oResultData.fname,
 
                    lname = oResultData.lname,
 
                    nname = oResultData.nname || "",
 
            } else if (oResultData.nname != undefined) {
 
                var fname = oResultData.fname || "";
 
                var lname = oResultData.lname || "";
 
                var nname = oResultData.nname;
 
                
 
                    // Guard against null value
 
                    fnameMatchIndex = fname.toLowerCase().indexOf(query),
 
                var fnameMatchIndex = fname.toLowerCase().indexOf(query),
 
                    lnameMatchIndex = lname.toLowerCase().indexOf(query),
 
                    nnameMatchIndex = nname.toLowerCase().indexOf(query),
 
                    displayfname, displaylname, displaynname;
 

	
 
                if (fnameMatchIndex > -1) {
 
                    displayfname = highlightMatch(fname, query, fnameMatchIndex);
 
                } else {
 
                    displayfname = fname;
 
                }
 

	
 
                if (lnameMatchIndex > -1) {
 
                    displaylname = highlightMatch(lname, query, lnameMatchIndex);
 
                } else {
 
                    displaylname = lname;
 
                }
 

	
 
                if (nnameMatchIndex > -1) {
 
                    displaynname = "(" + highlightMatch(nname, query, nnameMatchIndex) + ")";
 
                } else {
 
                    displaynname = nname ? "(" + nname + ")" : "";
 
                }
 

	
 
                return _gravatar(displayfname + " " + displaylname + " " + displaynname, oResultData.gravatar_lnk);
 
            } else {
 
                return '';
 
            }
 
        };
 
    membersAC.formatResult = custom_formatter;
 
    ownerAC.formatResult = custom_formatter;
 

	
 
    var myHandler = function (sType, aArgs) {
 

	
 
            var myAC = aArgs[0]; // reference back to the AC instance
 
            var elLI = aArgs[1]; // reference to the selected LI element
 
            var oData = aArgs[2]; // object literal of selected item's result data
 
            //fill the autocomplete with value
 
            if (oData.nname != undefined) {
 
                //users
 
                myAC.getInputEl().value = oData.nname;
 
                YUD.get('perm_new_member_type').value = 'user';
 
            } else {
 
                //groups
 
                myAC.getInputEl().value = oData.grname;
 
                YUD.get('perm_new_member_type').value = 'users_group';
 
            }
 
        };
 

	
 
    membersAC.itemSelectEvent.subscribe(myHandler);
 
    if(ownerAC.itemSelectEvent){
 
    	ownerAC.itemSelectEvent.subscribe(myHandler);
 
    }
 

	
 
    return {
 
        memberDS: memberDS,
 
        ownerDS: ownerDS,
 
        membersAC: membersAC,
 
        ownerAC: ownerAC,
 
    };
 
}
 

	
 

	
 
var MentionsAutoComplete = function (divid, cont, users_list, groups_list) {
 
    var myUsers = users_list;
 
    var myGroups = groups_list;
 

	
 
    // Define a custom search function for the DataSource of users
 
    var matchUsers = function (sQuery) {
 
    	    var org_sQuery = sQuery;
 
    	    if(this.mentionQuery == null){
 
    	    	return []    	    	
 
    	    }
 
    	    sQuery = this.mentionQuery;
 
            // Case insensitive matching
 
            var query = sQuery.toLowerCase();
 
            var i = 0;
 
            var l = myUsers.length;
 
            var matches = [];
 

	
 
            // Match against each name of each contact
 
            for (; i < l; i++) {
 
                contact = myUsers[i];
 
                if (((contact.fname+"").toLowerCase().indexOf(query) > -1) || 
 
                	 ((contact.lname+"").toLowerCase().indexOf(query) > -1) || 
 
                	 ((contact.nname) && ((contact.nname).toLowerCase().indexOf(query) > -1))) {
 
                    matches[matches.length] = contact;
 
                }
 
            }
 
            return matches
 
        };
 

	
 
    //match all
 
    var matchAll = function (sQuery) {
 
            u = matchUsers(sQuery);
 
            return u
 
        };
 

	
 
    // DataScheme for owner
 
    var ownerDS = new YAHOO.util.FunctionDataSource(matchUsers);
 

	
 
    ownerDS.responseSchema = {
 
        fields: ["id", "fname", "lname", "nname", "gravatar_lnk"]
 
    };
 

	
 
    // Instantiate AutoComplete for mentions
 
    var ownerAC = new YAHOO.widget.AutoComplete(divid, cont, ownerDS);
 
    ownerAC.useShadow = false;
 
    ownerAC.resultTypeList = false;
 
    ownerAC.suppressInputUpdate = true;
 

	
 
    // Helper highlight function for the formatter
 
    var highlightMatch = function (full, snippet, matchindex) {
 
            return full.substring(0, matchindex) 
 
            + "<span class='match'>" 
 
            + full.substr(matchindex, snippet.length) 
 
            + "</span>" + full.substring(matchindex + snippet.length);
 
        };
 

	
 
    // Custom formatter to highlight the matching letters
 
    ownerAC.formatResult = function (oResultData, sQuery, sResultMatch) {
 
		    var org_sQuery = sQuery;
 
		    if(this.dataSource.mentionQuery != null){
 
		    	sQuery = this.dataSource.mentionQuery;		    	
 
		    }
 

	
 
            var query = sQuery.toLowerCase();
 
            var _gravatar = function(res, em, group){
 
            	if (group !== undefined){
 
            		em = '/images/icons/group.png'
 
            	}
 
            	tmpl = '<div class="ac-container-wrap"><img class="perm-gravatar-ac" src="{0}"/>{1}</div>'
 
            	return tmpl.format(em,res)
 
            }
 
            if (oResultData.nname != undefined) {
 
                var fname = oResultData.fname || "";
 
                var lname = oResultData.lname || "";
 
                var nname = oResultData.nname;
 
                
 
                // Guard against null value
 
                var fnameMatchIndex = fname.toLowerCase().indexOf(query),
 
                    lnameMatchIndex = lname.toLowerCase().indexOf(query),
 
                    nnameMatchIndex = nname.toLowerCase().indexOf(query),
 
                    displayfname, displaylname, displaynname;
 

	
 
                if (fnameMatchIndex > -1) {
 
                    displayfname = highlightMatch(fname, query, fnameMatchIndex);
 
                } else {
 
                    displayfname = fname;
 
                }
 

	
 
                if (lnameMatchIndex > -1) {
 
                    displaylname = highlightMatch(lname, query, lnameMatchIndex);
 
                } else {
 
                    displaylname = lname;
 
                }
 

	
 
                if (nnameMatchIndex > -1) {
 
                    displaynname = "(" + highlightMatch(nname, query, nnameMatchIndex) + ")";
 
                } else {
 
                    displaynname = nname ? "(" + nname + ")" : "";
 
                }
 

	
 
                return _gravatar(displayfname + " " + displaylname + " " + displaynname, oResultData.gravatar_lnk);
 
            } else {
 
                return '';
 
            }
 
        };
 

	
 
    if(ownerAC.itemSelectEvent){
 
    	ownerAC.itemSelectEvent.subscribe(function (sType, aArgs) {
 

	
 
            var myAC = aArgs[0]; // reference back to the AC instance
 
            var elLI = aArgs[1]; // reference to the selected LI element
 
            var oData = aArgs[2]; // object literal of selected item's result data
 
            //fill the autocomplete with value
 
            if (oData.nname != undefined) {
 
                //users
 
            	//Replace the mention name with replaced
 
            	var re = new RegExp();
 
            	var org = myAC.getInputEl().value;
 
            	var chunks = myAC.dataSource.chunks
 
            	// replace middle chunk(the search term) with actuall  match
 
            	chunks[1] = chunks[1].replace('@'+myAC.dataSource.mentionQuery,
 
            								  '@'+oData.nname+' ');
 
                myAC.getInputEl().value = chunks.join('')
 
                YUD.get(myAC.getInputEl()).focus(); // Y U NO WORK !?
 
            } else {
 
                //groups
 
                myAC.getInputEl().value = oData.grname;
 
                YUD.get('perm_new_member_type').value = 'users_group';
 
            }
 
        });
 
    }
 

	
 
    // in this keybuffer we will gather current value of search !
 
    // since we need to get this just when someone does `@` then we do the
 
    // search
 
    ownerAC.dataSource.chunks = [];
 
    ownerAC.dataSource.mentionQuery = null;
 

	
 
    ownerAC.get_mention = function(msg, max_pos) {
 
    	var org = msg;
 
    	var re = new RegExp('(?:^@|\s@)([a-zA-Z0-9]{1}[a-zA-Z0-9\-\_\.]+)$')
 
    	var chunks  = [];
 

	
 
		
 
    	// cut first chunk until curret pos
 
		var to_max = msg.substr(0, max_pos);		
 
		var at_pos = Math.max(0,to_max.lastIndexOf('@')-1);
 
		var msg2 = to_max.substr(at_pos);
 

	
 
		chunks.push(org.substr(0,at_pos))// prefix chunk
 
		chunks.push(msg2)                // search chunk
 
		chunks.push(org.substr(max_pos)) // postfix chunk
 

	
 
		// clean up msg2 for filtering and regex match
 
		var msg2 = msg2.lstrip(' ').lstrip('\n');
 

	
 
		if(re.test(msg2)){
 
			var unam = re.exec(msg2)[1];
 
			return [unam, chunks];
 
		}
 
		return [null, null];
 
    };    
 
	ownerAC.textboxKeyUpEvent.subscribe(function(type, args){
 
		
 
		var ac_obj = args[0];
 
		var currentMessage = args[1];
 
		var currentCaretPosition = args[0]._elTextbox.selectionStart;
 

	
 
		var unam = ownerAC.get_mention(currentMessage, currentCaretPosition); 
 
		var curr_search = null;
 
		if(unam[0]){
 
			curr_search = unam[0];
 
		}
 
		
 
		ownerAC.dataSource.chunks = unam[1];
 
		ownerAC.dataSource.mentionQuery = curr_search;
 

	
 
	})
 

	
 
    return {
 
        ownerDS: ownerDS,
 
        ownerAC: ownerAC,
 
    };
 
}
 

	
 

	
 
/**
 
 * QUICK REPO MENU
 
 */
 
var quick_repo_menu = function(){
 
    YUE.on(YUQ('.quick_repo_menu'),'mouseenter',function(e){
 
            var menu = e.currentTarget.firstElementChild.firstElementChild;
 
            if(YUD.hasClass(menu,'hidden')){
 
                YUD.replaceClass(e.currentTarget,'hidden', 'active');
 
                YUD.replaceClass(menu, 'hidden', 'active');
 
            }
 
        })
 
    YUE.on(YUQ('.quick_repo_menu'),'mouseleave',function(e){
 
            var menu = e.currentTarget.firstElementChild.firstElementChild;
 
            if(YUD.hasClass(menu,'active')){
 
                YUD.replaceClass(e.currentTarget, 'active', 'hidden');
 
                YUD.replaceClass(menu, 'active', 'hidden');
 
            }
 
        })
 
};
 

	
 

	
 
/**
 
 * TABLE SORTING
 
 */
 

	
 
// returns a node from given html;
 
var fromHTML = function(html){
 
	  var _html = document.createElement('element');
 
	  _html.innerHTML = html;
 
	  return _html;
 
}
 
var get_rev = function(node){
 
    var n = node.firstElementChild.firstElementChild;
 
    
 
    if (n===null){
 
        return -1
 
    }
 
    else{
 
        out = n.firstElementChild.innerHTML.split(':')[0].replace('r','');
 
        return parseInt(out);
 
    }
 
}
 

	
 
var get_name = function(node){
 
	 var name = node.firstElementChild.children[2].innerHTML; 
 
	 return name
 
}
rhodecode/public/js/yui.2.9.js
Show inline comments
 
/*
 
Copyright (c) 2011, Yahoo! Inc. All rights reserved.
 
Code licensed under the BSD License:
 
http://developer.yahoo.com/yui/license.html
 
version: 2.9.0
 
*/
 
if(typeof YAHOO=="undefined"||!YAHOO){var YAHOO={};}YAHOO.namespace=function(){var b=arguments,g=null,e,c,f;for(e=0;e<b.length;e=e+1){f=(""+b[e]).split(".");g=YAHOO;for(c=(f[0]=="YAHOO")?1:0;c<f.length;c=c+1){g[f[c]]=g[f[c]]||{};g=g[f[c]];}}return g;};YAHOO.log=function(d,a,c){var b=YAHOO.widget.Logger;if(b&&b.log){return b.log(d,a,c);}else{return false;}};YAHOO.register=function(a,f,e){var k=YAHOO.env.modules,c,j,h,g,d;if(!k[a]){k[a]={versions:[],builds:[]};}c=k[a];j=e.version;h=e.build;g=YAHOO.env.listeners;c.name=a;c.version=j;c.build=h;c.versions.push(j);c.builds.push(h);c.mainClass=f;for(d=0;d<g.length;d=d+1){g[d](c);}if(f){f.VERSION=j;f.BUILD=h;}else{YAHOO.log("mainClass is undefined for module "+a,"warn");}};YAHOO.env=YAHOO.env||{modules:[],listeners:[]};YAHOO.env.getVersion=function(a){return YAHOO.env.modules[a]||null;};YAHOO.env.parseUA=function(d){var e=function(i){var j=0;return parseFloat(i.replace(/\./g,function(){return(j++==1)?"":".";}));},h=navigator,g={ie:0,opera:0,gecko:0,webkit:0,chrome:0,mobile:null,air:0,ipad:0,iphone:0,ipod:0,ios:null,android:0,webos:0,caja:h&&h.cajaVersion,secure:false,os:null},c=d||(navigator&&navigator.userAgent),f=window&&window.location,b=f&&f.href,a;g.secure=b&&(b.toLowerCase().indexOf("https")===0);if(c){if((/windows|win32/i).test(c)){g.os="windows";}else{if((/macintosh/i).test(c)){g.os="macintosh";}else{if((/rhino/i).test(c)){g.os="rhino";}}}if((/KHTML/).test(c)){g.webkit=1;}a=c.match(/AppleWebKit\/([^\s]*)/);if(a&&a[1]){g.webkit=e(a[1]);if(/ Mobile\//.test(c)){g.mobile="Apple";a=c.match(/OS ([^\s]*)/);if(a&&a[1]){a=e(a[1].replace("_","."));}g.ios=a;g.ipad=g.ipod=g.iphone=0;a=c.match(/iPad|iPod|iPhone/);if(a&&a[0]){g[a[0].toLowerCase()]=g.ios;}}else{a=c.match(/NokiaN[^\/]*|Android \d\.\d|webOS\/\d\.\d/);if(a){g.mobile=a[0];}if(/webOS/.test(c)){g.mobile="WebOS";a=c.match(/webOS\/([^\s]*);/);if(a&&a[1]){g.webos=e(a[1]);}}if(/ Android/.test(c)){g.mobile="Android";a=c.match(/Android ([^\s]*);/);if(a&&a[1]){g.android=e(a[1]);}}}a=c.match(/Chrome\/([^\s]*)/);if(a&&a[1]){g.chrome=e(a[1]);}else{a=c.match(/AdobeAIR\/([^\s]*)/);if(a){g.air=a[0];}}}if(!g.webkit){a=c.match(/Opera[\s\/]([^\s]*)/);if(a&&a[1]){g.opera=e(a[1]);a=c.match(/Version\/([^\s]*)/);if(a&&a[1]){g.opera=e(a[1]);}a=c.match(/Opera Mini[^;]*/);if(a){g.mobile=a[0];}}else{a=c.match(/MSIE\s([^;]*)/);if(a&&a[1]){g.ie=e(a[1]);}else{a=c.match(/Gecko\/([^\s]*)/);if(a){g.gecko=1;a=c.match(/rv:([^\s\)]*)/);if(a&&a[1]){g.gecko=e(a[1]);}}}}}}return g;};YAHOO.env.ua=YAHOO.env.parseUA();(function(){YAHOO.namespace("util","widget","example");if("undefined"!==typeof YAHOO_config){var b=YAHOO_config.listener,a=YAHOO.env.listeners,d=true,c;if(b){for(c=0;c<a.length;c++){if(a[c]==b){d=false;break;}}if(d){a.push(b);}}}})();YAHOO.lang=YAHOO.lang||{};(function(){var f=YAHOO.lang,a=Object.prototype,c="[object Array]",h="[object Function]",i="[object Object]",b=[],g={"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#x27;","/":"&#x2F;","`":"&#x60;"},d=["toString","valueOf"],e={isArray:function(j){return a.toString.apply(j)===c;},isBoolean:function(j){return typeof j==="boolean";},isFunction:function(j){return(typeof j==="function")||a.toString.apply(j)===h;},isNull:function(j){return j===null;},isNumber:function(j){return typeof j==="number"&&isFinite(j);},isObject:function(j){return(j&&(typeof j==="object"||f.isFunction(j)))||false;},isString:function(j){return typeof j==="string";},isUndefined:function(j){return typeof j==="undefined";},_IEEnumFix:(YAHOO.env.ua.ie)?function(l,k){var j,n,m;for(j=0;j<d.length;j=j+1){n=d[j];m=k[n];if(f.isFunction(m)&&m!=a[n]){l[n]=m;}}}:function(){},escapeHTML:function(j){return j.replace(/[&<>"'\/`]/g,function(k){return g[k];});},extend:function(m,n,l){if(!n||!m){throw new Error("extend failed, please check that "+"all dependencies are included.");}var k=function(){},j;k.prototype=n.prototype;m.prototype=new k();m.prototype.constructor=m;m.superclass=n.prototype;if(n.prototype.constructor==a.constructor){n.prototype.constructor=n;}if(l){for(j in l){if(f.hasOwnProperty(l,j)){m.prototype[j]=l[j];}}f._IEEnumFix(m.prototype,l);}},augmentObject:function(n,m){if(!m||!n){throw new Error("Absorb failed, verify dependencies.");}var j=arguments,l,o,k=j[2];if(k&&k!==true){for(l=2;l<j.length;l=l+1){n[j[l]]=m[j[l]];}}else{for(o in m){if(k||!(o in n)){n[o]=m[o];}}f._IEEnumFix(n,m);}return n;},augmentProto:function(m,l){if(!l||!m){throw new Error("Augment failed, verify dependencies.");}var j=[m.prototype,l.prototype],k;for(k=2;k<arguments.length;k=k+1){j.push(arguments[k]);}f.augmentObject.apply(this,j);return m;},dump:function(j,p){var l,n,r=[],t="{...}",k="f(){...}",q=", ",m=" => ";if(!f.isObject(j)){return j+"";}else{if(j instanceof Date||("nodeType" in j&&"tagName" in j)){return j;}else{if(f.isFunction(j)){return k;}}}p=(f.isNumber(p))?p:3;if(f.isArray(j)){r.push("[");for(l=0,n=j.length;l<n;l=l+1){if(f.isObject(j[l])){r.push((p>0)?f.dump(j[l],p-1):t);}else{r.push(j[l]);}r.push(q);}if(r.length>1){r.pop();}r.push("]");}else{r.push("{");for(l in j){if(f.hasOwnProperty(j,l)){r.push(l+m);if(f.isObject(j[l])){r.push((p>0)?f.dump(j[l],p-1):t);}else{r.push(j[l]);}r.push(q);}}if(r.length>1){r.pop();}r.push("}");}return r.join("");},substitute:function(x,y,E,l){var D,C,B,G,t,u,F=[],p,z=x.length,A="dump",r=" ",q="{",m="}",n,w;for(;;){D=x.lastIndexOf(q,z);if(D<0){break;}C=x.indexOf(m,D);if(D+1>C){break;}p=x.substring(D+1,C);G=p;u=null;B=G.indexOf(r);if(B>-1){u=G.substring(B+1);G=G.substring(0,B);}t=y[G];if(E){t=E(G,t,u);}if(f.isObject(t)){if(f.isArray(t)){t=f.dump(t,parseInt(u,10));}else{u=u||"";n=u.indexOf(A);if(n>-1){u=u.substring(4);}w=t.toString();if(w===i||n>-1){t=f.dump(t,parseInt(u,10));}else{t=w;}}}else{if(!f.isString(t)&&!f.isNumber(t)){t="~-"+F.length+"-~";F[F.length]=p;}}x=x.substring(0,D)+t+x.substring(C+1);if(l===false){z=D-1;}}for(D=F.length-1;D>=0;D=D-1){x=x.replace(new RegExp("~-"+D+"-~"),"{"+F[D]+"}","g");}return x;},trim:function(j){try{return j.replace(/^\s+|\s+$/g,"");}catch(k){return j;
 
}},merge:function(){var n={},k=arguments,j=k.length,m;for(m=0;m<j;m=m+1){f.augmentObject(n,k[m],true);}return n;},later:function(t,k,u,n,p){t=t||0;k=k||{};var l=u,s=n,q,j;if(f.isString(u)){l=k[u];}if(!l){throw new TypeError("method undefined");}if(!f.isUndefined(n)&&!f.isArray(s)){s=[n];}q=function(){l.apply(k,s||b);};j=(p)?setInterval(q,t):setTimeout(q,t);return{interval:p,cancel:function(){if(this.interval){clearInterval(j);}else{clearTimeout(j);}}};},isValue:function(j){return(f.isObject(j)||f.isString(j)||f.isNumber(j)||f.isBoolean(j));}};f.hasOwnProperty=(a.hasOwnProperty)?function(j,k){return j&&j.hasOwnProperty&&j.hasOwnProperty(k);}:function(j,k){return !f.isUndefined(j[k])&&j.constructor.prototype[k]!==j[k];};e.augmentObject(f,e,true);YAHOO.util.Lang=f;f.augment=f.augmentProto;YAHOO.augment=f.augmentProto;YAHOO.extend=f.extend;})();YAHOO.register("yahoo",YAHOO,{version:"2.9.0",build:"2800"});YAHOO.util.Get=function(){var m={},k=0,r=0,l=false,n=YAHOO.env.ua,s=YAHOO.lang,q,d,e,i=function(x,t,y){var u=y||window,z=u.document,A=z.createElement(x),v;for(v in t){if(t.hasOwnProperty(v)){A.setAttribute(v,t[v]);}}return A;},h=function(u,v,t){var w={id:"yui__dyn_"+(r++),type:"text/css",rel:"stylesheet",href:u};if(t){s.augmentObject(w,t);}return i("link",w,v);},p=function(u,v,t){var w={id:"yui__dyn_"+(r++),type:"text/javascript",src:u};if(t){s.augmentObject(w,t);}return i("script",w,v);},a=function(t,u){return{tId:t.tId,win:t.win,data:t.data,nodes:t.nodes,msg:u,purge:function(){d(this.tId);}};},b=function(t,w){var u=m[w],v=(s.isString(t))?u.win.document.getElementById(t):t;if(!v){q(w,"target node not found: "+t);}return v;},c=function(w){YAHOO.log("Finishing transaction "+w);var u=m[w],v,t;u.finished=true;if(u.aborted){v="transaction "+w+" was aborted";q(w,v);return;}if(u.onSuccess){t=u.scope||u.win;u.onSuccess.call(t,a(u));}},o=function(v){YAHOO.log("Timeout "+v,"info","get");var u=m[v],t;if(u.onTimeout){t=u.scope||u;u.onTimeout.call(t,a(u));}},f=function(v,A){YAHOO.log("_next: "+v+", loaded: "+A,"info","Get");var u=m[v],D=u.win,C=D.document,B=C.getElementsByTagName("head")[0],x,y,t,E,z;if(u.timer){u.timer.cancel();}if(u.aborted){y="transaction "+v+" was aborted";q(v,y);return;}if(A){u.url.shift();if(u.varName){u.varName.shift();}}else{u.url=(s.isString(u.url))?[u.url]:u.url;if(u.varName){u.varName=(s.isString(u.varName))?[u.varName]:u.varName;}}if(u.url.length===0){if(u.type==="script"&&n.webkit&&n.webkit<420&&!u.finalpass&&!u.varName){z=p(null,u.win,u.attributes);z.innerHTML='YAHOO.util.Get._finalize("'+v+'");';u.nodes.push(z);B.appendChild(z);}else{c(v);}return;}t=u.url[0];if(!t){u.url.shift();YAHOO.log("skipping empty url");return f(v);}YAHOO.log("attempting to load "+t,"info","Get");if(u.timeout){u.timer=s.later(u.timeout,u,o,v);}if(u.type==="script"){x=p(t,D,u.attributes);}else{x=h(t,D,u.attributes);}e(u.type,x,v,t,D,u.url.length);u.nodes.push(x);if(u.insertBefore){E=b(u.insertBefore,v);if(E){E.parentNode.insertBefore(x,E);}}else{B.appendChild(x);}YAHOO.log("Appending node: "+t,"info","Get");if((n.webkit||n.gecko)&&u.type==="css"){f(v,t);}},j=function(){if(l){return;}l=true;var t,u;for(t in m){if(m.hasOwnProperty(t)){u=m[t];if(u.autopurge&&u.finished){d(u.tId);delete m[t];}}}l=false;},g=function(u,t,v){var x="q"+(k++),w;v=v||{};if(k%YAHOO.util.Get.PURGE_THRESH===0){j();}m[x]=s.merge(v,{tId:x,type:u,url:t,finished:false,aborted:false,nodes:[]});w=m[x];w.win=w.win||window;w.scope=w.scope||w.win;w.autopurge=("autopurge" in w)?w.autopurge:(u==="script")?true:false;w.attributes=w.attributes||{};w.attributes.charset=v.charset||w.attributes.charset||"utf-8";s.later(0,w,f,x);return{tId:x};};e=function(H,z,x,u,D,E,G){var F=G||f,B,t,I,v,J,A,C,y;if(n.ie){z.onreadystatechange=function(){B=this.readyState;if("loaded"===B||"complete"===B){YAHOO.log(x+" onload "+u,"info","Get");z.onreadystatechange=null;F(x,u);}};}else{if(n.webkit){if(H==="script"){if(n.webkit>=420){z.addEventListener("load",function(){YAHOO.log(x+" DOM2 onload "+u,"info","Get");F(x,u);});}else{t=m[x];if(t.varName){v=YAHOO.util.Get.POLL_FREQ;YAHOO.log("Polling for "+t.varName[0]);t.maxattempts=YAHOO.util.Get.TIMEOUT/v;t.attempts=0;t._cache=t.varName[0].split(".");t.timer=s.later(v,t,function(w){I=this._cache;A=I.length;J=this.win;for(C=0;C<A;C=C+1){J=J[I[C]];if(!J){this.attempts++;if(this.attempts++>this.maxattempts){y="Over retry limit, giving up";t.timer.cancel();q(x,y);}else{YAHOO.log(I[C]+" failed, retrying");}return;}}YAHOO.log("Safari poll complete");t.timer.cancel();F(x,u);},null,true);}else{s.later(YAHOO.util.Get.POLL_FREQ,null,F,[x,u]);}}}}else{z.onload=function(){YAHOO.log(x+" onload "+u,"info","Get");F(x,u);};}}};q=function(w,v){YAHOO.log("get failure: "+v,"warn","Get");var u=m[w],t;if(u.onFailure){t=u.scope||u.win;u.onFailure.call(t,a(u,v));}};d=function(z){if(m[z]){var t=m[z],u=t.nodes,x=u.length,C=t.win.document,A=C.getElementsByTagName("head")[0],v,y,w,B;if(t.insertBefore){v=b(t.insertBefore,z);if(v){A=v.parentNode;}}for(y=0;y<x;y=y+1){w=u[y];if(w.clearAttributes){w.clearAttributes();}else{for(B in w){if(w.hasOwnProperty(B)){delete w[B];}}}A.removeChild(w);}t.nodes=[];}};return{POLL_FREQ:10,PURGE_THRESH:20,TIMEOUT:2000,_finalize:function(t){YAHOO.log(t+" finalized ","info","Get");s.later(0,null,c,t);},abort:function(u){var v=(s.isString(u))?u:u.tId,t=m[v];if(t){YAHOO.log("Aborting "+v,"info","Get");t.aborted=true;}},script:function(t,u){return g("script",t,u);},css:function(t,u){return g("css",t,u);}};}();YAHOO.register("get",YAHOO.util.Get,{version:"2.9.0",build:"2800"});(function(){var Y=YAHOO,util=Y.util,lang=Y.lang,env=Y.env,PROV="_provides",SUPER="_supersedes",REQ="expanded",AFTER="_after",VERSION="2.9.0";var YUI={dupsAllowed:{"yahoo":true,"get":true},info:{"root":VERSION+"/build/","base":"http://yui.yahooapis.com/"+VERSION+"/build/","comboBase":"http://yui.yahooapis.com/combo?","skin":{"defaultSkin":"sam","base":"assets/skins/","path":"skin.css","after":["reset","fonts","grids","base"],"rollup":3},dupsAllowed:["yahoo","get"],"moduleInfo":{"animation":{"type":"js","path":"animation/animation-min.js","requires":["dom","event"]},"autocomplete":{"type":"js","path":"autocomplete/autocomplete-min.js","requires":["dom","event","datasource"],"optional":["connection","animation"],"skinnable":true},"base":{"type":"css","path":"base/base-min.css","after":["reset","fonts","grids"]},"button":{"type":"js","path":"button/button-min.js","requires":["element"],"optional":["menu"],"skinnable":true},"calendar":{"type":"js","path":"calendar/calendar-min.js","requires":["event","dom"],supersedes:["datemath"],"skinnable":true},"carousel":{"type":"js","path":"carousel/carousel-min.js","requires":["element"],"optional":["animation"],"skinnable":true},"charts":{"type":"js","path":"charts/charts-min.js","requires":["element","json","datasource","swf"]},"colorpicker":{"type":"js","path":"colorpicker/colorpicker-min.js","requires":["slider","element"],"optional":["animation"],"skinnable":true},"connection":{"type":"js","path":"connection/connection-min.js","requires":["event"],"supersedes":["connectioncore"]},"connectioncore":{"type":"js","path":"connection/connection_core-min.js","requires":["event"],"pkg":"connection"},"container":{"type":"js","path":"container/container-min.js","requires":["dom","event"],"optional":["dragdrop","animation","connection"],"supersedes":["containercore"],"skinnable":true},"containercore":{"type":"js","path":"container/container_core-min.js","requires":["dom","event"],"pkg":"container"},"cookie":{"type":"js","path":"cookie/cookie-min.js","requires":["yahoo"]},"datasource":{"type":"js","path":"datasource/datasource-min.js","requires":["event"],"optional":["connection"]},"datatable":{"type":"js","path":"datatable/datatable-min.js","requires":["element","datasource"],"optional":["calendar","dragdrop","paginator"],"skinnable":true},datemath:{"type":"js","path":"datemath/datemath-min.js","requires":["yahoo"]},"dom":{"type":"js","path":"dom/dom-min.js","requires":["yahoo"]},"dragdrop":{"type":"js","path":"dragdrop/dragdrop-min.js","requires":["dom","event"]},"editor":{"type":"js","path":"editor/editor-min.js","requires":["menu","element","button"],"optional":["animation","dragdrop"],"supersedes":["simpleeditor"],"skinnable":true},"element":{"type":"js","path":"element/element-min.js","requires":["dom","event"],"optional":["event-mouseenter","event-delegate"]},"element-delegate":{"type":"js","path":"element-delegate/element-delegate-min.js","requires":["element"]},"event":{"type":"js","path":"event/event-min.js","requires":["yahoo"]},"event-simulate":{"type":"js","path":"event-simulate/event-simulate-min.js","requires":["event"]},"event-delegate":{"type":"js","path":"event-delegate/event-delegate-min.js","requires":["event"],"optional":["selector"]},"event-mouseenter":{"type":"js","path":"event-mouseenter/event-mouseenter-min.js","requires":["dom","event"]},"fonts":{"type":"css","path":"fonts/fonts-min.css"},"get":{"type":"js","path":"get/get-min.js","requires":["yahoo"]},"grids":{"type":"css","path":"grids/grids-min.css","requires":["fonts"],"optional":["reset"]},"history":{"type":"js","path":"history/history-min.js","requires":["event"]},"imagecropper":{"type":"js","path":"imagecropper/imagecropper-min.js","requires":["dragdrop","element","resize"],"skinnable":true},"imageloader":{"type":"js","path":"imageloader/imageloader-min.js","requires":["event","dom"]},"json":{"type":"js","path":"json/json-min.js","requires":["yahoo"]},"layout":{"type":"js","path":"layout/layout-min.js","requires":["element"],"optional":["animation","dragdrop","resize","selector"],"skinnable":true},"logger":{"type":"js","path":"logger/logger-min.js","requires":["event","dom"],"optional":["dragdrop"],"skinnable":true},"menu":{"type":"js","path":"menu/menu-min.js","requires":["containercore"],"skinnable":true},"paginator":{"type":"js","path":"paginator/paginator-min.js","requires":["element"],"skinnable":true},"profiler":{"type":"js","path":"profiler/profiler-min.js","requires":["yahoo"]},"profilerviewer":{"type":"js","path":"profilerviewer/profilerviewer-min.js","requires":["profiler","yuiloader","element"],"skinnable":true},"progressbar":{"type":"js","path":"progressbar/progressbar-min.js","requires":["element"],"optional":["animation"],"skinnable":true},"reset":{"type":"css","path":"reset/reset-min.css"},"reset-fonts-grids":{"type":"css","path":"reset-fonts-grids/reset-fonts-grids.css","supersedes":["reset","fonts","grids","reset-fonts"],"rollup":4},"reset-fonts":{"type":"css","path":"reset-fonts/reset-fonts.css","supersedes":["reset","fonts"],"rollup":2},"resize":{"type":"js","path":"resize/resize-min.js","requires":["dragdrop","element"],"optional":["animation"],"skinnable":true},"selector":{"type":"js","path":"selector/selector-min.js","requires":["yahoo","dom"]},"simpleeditor":{"type":"js","path":"editor/simpleeditor-min.js","requires":["element"],"optional":["containercore","menu","button","animation","dragdrop"],"skinnable":true,"pkg":"editor"},"slider":{"type":"js","path":"slider/slider-min.js","requires":["dragdrop"],"optional":["animation"],"skinnable":true},"storage":{"type":"js","path":"storage/storage-min.js","requires":["yahoo","event","cookie"],"optional":["swfstore"]},"stylesheet":{"type":"js","path":"stylesheet/stylesheet-min.js","requires":["yahoo"]},"swf":{"type":"js","path":"swf/swf-min.js","requires":["element"],"supersedes":["swfdetect"]},"swfdetect":{"type":"js","path":"swfdetect/swfdetect-min.js","requires":["yahoo"]},"swfstore":{"type":"js","path":"swfstore/swfstore-min.js","requires":["element","cookie","swf"]},"tabview":{"type":"js","path":"tabview/tabview-min.js","requires":["element"],"optional":["connection"],"skinnable":true},"treeview":{"type":"js","path":"treeview/treeview-min.js","requires":["event","dom"],"optional":["json","animation","calendar"],"skinnable":true},"uploader":{"type":"js","path":"uploader/uploader-min.js","requires":["element"]},"utilities":{"type":"js","path":"utilities/utilities.js","supersedes":["yahoo","event","dragdrop","animation","dom","connection","element","yahoo-dom-event","get","yuiloader","yuiloader-dom-event"],"rollup":8},"yahoo":{"type":"js","path":"yahoo/yahoo-min.js"},"yahoo-dom-event":{"type":"js","path":"yahoo-dom-event/yahoo-dom-event.js","supersedes":["yahoo","event","dom"],"rollup":3},"yuiloader":{"type":"js","path":"yuiloader/yuiloader-min.js","supersedes":["yahoo","get"]},"yuiloader-dom-event":{"type":"js","path":"yuiloader-dom-event/yuiloader-dom-event.js","supersedes":["yahoo","dom","event","get","yuiloader","yahoo-dom-event"],"rollup":5},"yuitest":{"type":"js","path":"yuitest/yuitest-min.js","requires":["logger"],"optional":["event-simulate"],"skinnable":true}}},ObjectUtil:{appendArray:function(o,a){if(a){for(var i=0;
 
i<a.length;i=i+1){o[a[i]]=true;}}},keys:function(o,ordered){var a=[],i;for(i in o){if(lang.hasOwnProperty(o,i)){a.push(i);}}return a;}},ArrayUtil:{appendArray:function(a1,a2){Array.prototype.push.apply(a1,a2);},indexOf:function(a,val){for(var i=0;i<a.length;i=i+1){if(a[i]===val){return i;}}return -1;},toObject:function(a){var o={};for(var i=0;i<a.length;i=i+1){o[a[i]]=true;}return o;},uniq:function(a){return YUI.ObjectUtil.keys(YUI.ArrayUtil.toObject(a));}}};YAHOO.util.YUILoader=function(o){this._internalCallback=null;this._useYahooListener=false;this.onSuccess=null;this.onFailure=Y.log;this.onProgress=null;this.onTimeout=null;this.scope=this;this.data=null;this.insertBefore=null;this.charset=null;this.varName=null;this.base=YUI.info.base;this.comboBase=YUI.info.comboBase;this.combine=false;this.root=YUI.info.root;this.timeout=0;this.ignore=null;this.force=null;this.allowRollup=true;this.filter=null;this.required={};this.moduleInfo=lang.merge(YUI.info.moduleInfo);this.rollups=null;this.loadOptional=false;this.sorted=[];this.loaded={};this.dirty=true;this.inserted={};var self=this;env.listeners.push(function(m){if(self._useYahooListener){self.loadNext(m.name);}});this.skin=lang.merge(YUI.info.skin);this._config(o);};Y.util.YUILoader.prototype={FILTERS:{RAW:{"searchExp":"-min\\.js","replaceStr":".js"},DEBUG:{"searchExp":"-min\\.js","replaceStr":"-debug.js"}},SKIN_PREFIX:"skin-",_config:function(o){if(o){for(var i in o){if(lang.hasOwnProperty(o,i)){if(i=="require"){this.require(o[i]);}else{this[i]=o[i];}}}}var f=this.filter;if(lang.isString(f)){f=f.toUpperCase();if(f==="DEBUG"){this.require("logger");}if(!Y.widget.LogWriter){Y.widget.LogWriter=function(){return Y;};}this.filter=this.FILTERS[f];}},addModule:function(o){if(!o||!o.name||!o.type||(!o.path&&!o.fullpath)){return false;}o.ext=("ext" in o)?o.ext:true;o.requires=o.requires||[];this.moduleInfo[o.name]=o;this.dirty=true;return true;},require:function(what){var a=(typeof what==="string")?arguments:what;this.dirty=true;YUI.ObjectUtil.appendArray(this.required,a);},_addSkin:function(skin,mod){var name=this.formatSkin(skin),info=this.moduleInfo,sinf=this.skin,ext=info[mod]&&info[mod].ext;if(!info[name]){this.addModule({"name":name,"type":"css","path":sinf.base+skin+"/"+sinf.path,"after":sinf.after,"rollup":sinf.rollup,"ext":ext});}if(mod){name=this.formatSkin(skin,mod);if(!info[name]){var mdef=info[mod],pkg=mdef.pkg||mod;this.addModule({"name":name,"type":"css","after":sinf.after,"path":pkg+"/"+sinf.base+skin+"/"+mod+".css","ext":ext});}}return name;},getRequires:function(mod){if(!mod){return[];}if(!this.dirty&&mod.expanded){return mod.expanded;}mod.requires=mod.requires||[];var i,d=[],r=mod.requires,o=mod.optional,info=this.moduleInfo,m;for(i=0;i<r.length;i=i+1){d.push(r[i]);m=info[r[i]];YUI.ArrayUtil.appendArray(d,this.getRequires(m));}if(o&&this.loadOptional){for(i=0;i<o.length;i=i+1){d.push(o[i]);YUI.ArrayUtil.appendArray(d,this.getRequires(info[o[i]]));}}mod.expanded=YUI.ArrayUtil.uniq(d);return mod.expanded;},getProvides:function(name,notMe){var addMe=!(notMe),ckey=(addMe)?PROV:SUPER,m=this.moduleInfo[name],o={};if(!m){return o;}if(m[ckey]){return m[ckey];}var s=m.supersedes,done={},me=this;var add=function(mm){if(!done[mm]){done[mm]=true;lang.augmentObject(o,me.getProvides(mm));}};if(s){for(var i=0;i<s.length;i=i+1){add(s[i]);}}m[SUPER]=o;m[PROV]=lang.merge(o);m[PROV][name]=true;return m[ckey];},calculate:function(o){if(o||this.dirty){this._config(o);this._setup();this._explode();if(this.allowRollup){this._rollup();}this._reduce();this._sort();this.dirty=false;}},_setup:function(){var info=this.moduleInfo,name,i,j;for(name in info){if(lang.hasOwnProperty(info,name)){var m=info[name];if(m&&m.skinnable){var o=this.skin.overrides,smod;if(o&&o[name]){for(i=0;i<o[name].length;i=i+1){smod=this._addSkin(o[name][i],name);}}else{smod=this._addSkin(this.skin.defaultSkin,name);}if(YUI.ArrayUtil.indexOf(m.requires,smod)==-1){m.requires.push(smod);}}}}var l=lang.merge(this.inserted);if(!this._sandbox){l=lang.merge(l,env.modules);}if(this.ignore){YUI.ObjectUtil.appendArray(l,this.ignore);}if(this.force){for(i=0;i<this.force.length;i=i+1){if(this.force[i] in l){delete l[this.force[i]];}}}for(j in l){if(lang.hasOwnProperty(l,j)){lang.augmentObject(l,this.getProvides(j));}}this.loaded=l;},_explode:function(){var r=this.required,i,mod;for(i in r){if(lang.hasOwnProperty(r,i)){mod=this.moduleInfo[i];if(mod){var req=this.getRequires(mod);if(req){YUI.ObjectUtil.appendArray(r,req);}}}}},_skin:function(){},formatSkin:function(skin,mod){var s=this.SKIN_PREFIX+skin;if(mod){s=s+"-"+mod;}return s;},parseSkin:function(mod){if(mod.indexOf(this.SKIN_PREFIX)===0){var a=mod.split("-");return{skin:a[1],module:a[2]};}return null;},_rollup:function(){var i,j,m,s,rollups={},r=this.required,roll,info=this.moduleInfo;if(this.dirty||!this.rollups){for(i in info){if(lang.hasOwnProperty(info,i)){m=info[i];if(m&&m.rollup){rollups[i]=m;}}}this.rollups=rollups;}for(;;){var rolled=false;for(i in rollups){if(!r[i]&&!this.loaded[i]){m=info[i];s=m.supersedes;roll=false;if(!m.rollup){continue;}var skin=(m.ext)?false:this.parseSkin(i),c=0;if(skin){for(j in r){if(lang.hasOwnProperty(r,j)){if(i!==j&&this.parseSkin(j)){c++;roll=(c>=m.rollup);if(roll){break;}}}}}else{for(j=0;j<s.length;j=j+1){if(this.loaded[s[j]]&&(!YUI.dupsAllowed[s[j]])){roll=false;break;}else{if(r[s[j]]){c++;roll=(c>=m.rollup);if(roll){break;}}}}}if(roll){r[i]=true;rolled=true;this.getRequires(m);}}}if(!rolled){break;}}},_reduce:function(){var i,j,s,m,r=this.required;for(i in r){if(i in this.loaded){delete r[i];}else{var skinDef=this.parseSkin(i);if(skinDef){if(!skinDef.module){var skin_pre=this.SKIN_PREFIX+skinDef.skin;for(j in r){if(lang.hasOwnProperty(r,j)){m=this.moduleInfo[j];var ext=m&&m.ext;if(!ext&&j!==i&&j.indexOf(skin_pre)>-1){delete r[j];}}}}}else{m=this.moduleInfo[i];s=m&&m.supersedes;if(s){for(j=0;j<s.length;j=j+1){if(s[j] in r){delete r[s[j]];}}}}}}},_onFailure:function(msg){YAHOO.log("Failure","info","loader");
 
var f=this.onFailure;if(f){f.call(this.scope,{msg:"failure: "+msg,data:this.data,success:false});}},_onTimeout:function(){YAHOO.log("Timeout","info","loader");var f=this.onTimeout;if(f){f.call(this.scope,{msg:"timeout",data:this.data,success:false});}},_sort:function(){var s=[],info=this.moduleInfo,loaded=this.loaded,checkOptional=!this.loadOptional,me=this;var requires=function(aa,bb){var mm=info[aa];if(loaded[bb]||!mm){return false;}var ii,rr=mm.expanded,after=mm.after,other=info[bb],optional=mm.optional;if(rr&&YUI.ArrayUtil.indexOf(rr,bb)>-1){return true;}if(after&&YUI.ArrayUtil.indexOf(after,bb)>-1){return true;}if(checkOptional&&optional&&YUI.ArrayUtil.indexOf(optional,bb)>-1){return true;}var ss=info[bb]&&info[bb].supersedes;if(ss){for(ii=0;ii<ss.length;ii=ii+1){if(requires(aa,ss[ii])){return true;}}}if(mm.ext&&mm.type=="css"&&!other.ext&&other.type=="css"){return true;}return false;};for(var i in this.required){if(lang.hasOwnProperty(this.required,i)){s.push(i);}}var p=0;for(;;){var l=s.length,a,b,j,k,moved=false;for(j=p;j<l;j=j+1){a=s[j];for(k=j+1;k<l;k=k+1){if(requires(a,s[k])){b=s.splice(k,1);s.splice(j,0,b[0]);moved=true;break;}}if(moved){break;}else{p=p+1;}}if(!moved){break;}}this.sorted=s;},toString:function(){var o={type:"YUILoader",base:this.base,filter:this.filter,required:this.required,loaded:this.loaded,inserted:this.inserted};lang.dump(o,1);},_combine:function(){this._combining=[];var self=this,s=this.sorted,len=s.length,js=this.comboBase,css=this.comboBase,target,startLen=js.length,i,m,type=this.loadType;YAHOO.log("type "+type);for(i=0;i<len;i=i+1){m=this.moduleInfo[s[i]];if(m&&!m.ext&&(!type||type===m.type)){target=this.root+m.path;target+="&";if(m.type=="js"){js+=target;}else{css+=target;}this._combining.push(s[i]);}}if(this._combining.length){YAHOO.log("Attempting to combine: "+this._combining,"info","loader");var callback=function(o){var c=this._combining,len=c.length,i,m;for(i=0;i<len;i=i+1){this.inserted[c[i]]=true;}this.loadNext(o.data);},loadScript=function(){if(js.length>startLen){YAHOO.util.Get.script(self._filter(js),{data:self._loading,onSuccess:callback,onFailure:self._onFailure,onTimeout:self._onTimeout,insertBefore:self.insertBefore,charset:self.charset,timeout:self.timeout,scope:self});}else{this.loadNext();}};if(css.length>startLen){YAHOO.util.Get.css(this._filter(css),{data:this._loading,onSuccess:loadScript,onFailure:this._onFailure,onTimeout:this._onTimeout,insertBefore:this.insertBefore,charset:this.charset,timeout:this.timeout,scope:self});}else{loadScript();}return;}else{this.loadNext(this._loading);}},insert:function(o,type){this.calculate(o);this._loading=true;this.loadType=type;if(this.combine){return this._combine();}if(!type){var self=this;this._internalCallback=function(){self._internalCallback=null;self.insert(null,"js");};this.insert(null,"css");return;}this.loadNext();},sandbox:function(o,type){var self=this,success=function(o){var idx=o.argument[0],name=o.argument[2];self._scriptText[idx]=o.responseText;if(self.onProgress){self.onProgress.call(self.scope,{name:name,scriptText:o.responseText,xhrResponse:o,data:self.data});}self._loadCount++;if(self._loadCount>=self._stopCount){var v=self.varName||"YAHOO";var t="(function() {\n";var b="\nreturn "+v+";\n})();";var ref=eval(t+self._scriptText.join("\n")+b);self._pushEvents(ref);if(ref){self.onSuccess.call(self.scope,{reference:ref,data:self.data});}else{self._onFailure.call(self.varName+" reference failure");}}},failure=function(o){self.onFailure.call(self.scope,{msg:"XHR failure",xhrResponse:o,data:self.data});};self._config(o);if(!self.onSuccess){throw new Error("You must supply an onSuccess handler for your sandbox");}self._sandbox=true;if(!type||type!=="js"){self._internalCallback=function(){self._internalCallback=null;self.sandbox(null,"js");};self.insert(null,"css");return;}if(!util.Connect){var ld=new YAHOO.util.YUILoader();ld.insert({base:self.base,filter:self.filter,require:"connection",insertBefore:self.insertBefore,charset:self.charset,onSuccess:function(){self.sandbox(null,"js");},scope:self},"js");return;}self._scriptText=[];self._loadCount=0;self._stopCount=self.sorted.length;self._xhr=[];self.calculate();var s=self.sorted,l=s.length,i,m,url;for(i=0;i<l;i=i+1){m=self.moduleInfo[s[i]];if(!m){self._onFailure("undefined module "+m);for(var j=0;j<self._xhr.length;j=j+1){self._xhr[j].abort();}return;}if(m.type!=="js"){self._loadCount++;continue;}url=m.fullpath;url=(url)?self._filter(url):self._url(m.path);var xhrData={success:success,failure:failure,scope:self,argument:[i,url,s[i]]};self._xhr.push(util.Connect.asyncRequest("GET",url,xhrData));}},loadNext:function(mname){if(!this._loading){return;}var self=this,donext=function(o){self.loadNext(o.data);},successfn,s=this.sorted,len=s.length,i,fn,m,url;if(mname){if(mname!==this._loading){return;}this.inserted[mname]=true;if(this.onProgress){this.onProgress.call(this.scope,{name:mname,data:this.data});}}for(i=0;i<len;i=i+1){if(s[i] in this.inserted){continue;}if(s[i]===this._loading){return;}m=this.moduleInfo[s[i]];if(!m){this.onFailure.call(this.scope,{msg:"undefined module "+m,data:this.data});return;}if(!this.loadType||this.loadType===m.type){successfn=donext;this._loading=s[i];fn=(m.type==="css")?util.Get.css:util.Get.script;url=m.fullpath;url=(url)?this._filter(url):this._url(m.path);if(env.ua.webkit&&env.ua.webkit<420&&m.type==="js"&&!m.varName){successfn=null;this._useYahooListener=true;}fn(url,{data:s[i],onSuccess:successfn,onFailure:this._onFailure,onTimeout:this._onTimeout,insertBefore:this.insertBefore,charset:this.charset,timeout:this.timeout,varName:m.varName,scope:self});return;}}this._loading=null;if(this._internalCallback){var f=this._internalCallback;this._internalCallback=null;f.call(this);}else{if(this.onSuccess){this._pushEvents();this.onSuccess.call(this.scope,{data:this.data});}}},_pushEvents:function(ref){var r=ref||YAHOO;if(r.util&&r.util.Event){r.util.Event._load();}},_filter:function(str){var f=this.filter;return(f)?str.replace(new RegExp(f.searchExp,"g"),f.replaceStr):str;
 
},_url:function(path){return this._filter((this.base||"")+path);}};})();YAHOO.register("yuiloader",YAHOO.util.YUILoader,{version:"2.9.0",build:"2800"});(function(){YAHOO.env._id_counter=YAHOO.env._id_counter||0;var e=YAHOO.util,k=YAHOO.lang,L=YAHOO.env.ua,a=YAHOO.lang.trim,B={},F={},m=/^t(?:able|d|h)$/i,w=/color$/i,j=window.document,v=j.documentElement,C="ownerDocument",M="defaultView",U="documentElement",S="compatMode",z="offsetLeft",o="offsetTop",T="offsetParent",x="parentNode",K="nodeType",c="tagName",n="scrollLeft",H="scrollTop",p="getBoundingClientRect",V="getComputedStyle",y="currentStyle",l="CSS1Compat",A="BackCompat",E="class",f="className",i="",b=" ",R="(?:^|\\s)",J="(?= |$)",t="g",O="position",D="fixed",u="relative",I="left",N="top",Q="medium",P="borderLeftWidth",q="borderTopWidth",d=L.opera,h=L.webkit,g=L.gecko,s=L.ie;e.Dom={CUSTOM_ATTRIBUTES:(!v.hasAttribute)?{"for":"htmlFor","class":f}:{"htmlFor":"for","className":E},DOT_ATTRIBUTES:{checked:true},get:function(aa){var ac,X,ab,Z,W,G,Y=null;if(aa){if(typeof aa=="string"||typeof aa=="number"){ac=aa+"";aa=j.getElementById(aa);G=(aa)?aa.attributes:null;if(aa&&G&&G.id&&G.id.value===ac){return aa;}else{if(aa&&j.all){aa=null;X=j.all[ac];if(X&&X.length){for(Z=0,W=X.length;Z<W;++Z){if(X[Z].id===ac){return X[Z];}}}}}}else{if(e.Element&&aa instanceof e.Element){aa=aa.get("element");}else{if(!aa.nodeType&&"length" in aa){ab=[];for(Z=0,W=aa.length;Z<W;++Z){ab[ab.length]=e.Dom.get(aa[Z]);}aa=ab;}}}Y=aa;}return Y;},getComputedStyle:function(G,W){if(window[V]){return G[C][M][V](G,null)[W];}else{if(G[y]){return e.Dom.IE_ComputedStyle.get(G,W);}}},getStyle:function(G,W){return e.Dom.batch(G,e.Dom._getStyle,W);},_getStyle:function(){if(window[V]){return function(G,Y){Y=(Y==="float")?Y="cssFloat":e.Dom._toCamel(Y);var X=G.style[Y],W;if(!X){W=G[C][M][V](G,null);if(W){X=W[Y];}}return X;};}else{if(v[y]){return function(G,Y){var X;switch(Y){case"opacity":X=100;try{X=G.filters["DXImageTransform.Microsoft.Alpha"].opacity;}catch(Z){try{X=G.filters("alpha").opacity;}catch(W){}}return X/100;case"float":Y="styleFloat";default:Y=e.Dom._toCamel(Y);X=G[y]?G[y][Y]:null;return(G.style[Y]||X);}};}}}(),setStyle:function(G,W,X){e.Dom.batch(G,e.Dom._setStyle,{prop:W,val:X});},_setStyle:function(){if(!window.getComputedStyle&&j.documentElement.currentStyle){return function(W,G){var X=e.Dom._toCamel(G.prop),Y=G.val;if(W){switch(X){case"opacity":if(Y===""||Y===null||Y===1){W.style.removeAttribute("filter");}else{if(k.isString(W.style.filter)){W.style.filter="alpha(opacity="+Y*100+")";if(!W[y]||!W[y].hasLayout){W.style.zoom=1;}}}break;case"float":X="styleFloat";default:W.style[X]=Y;}}else{}};}else{return function(W,G){var X=e.Dom._toCamel(G.prop),Y=G.val;if(W){if(X=="float"){X="cssFloat";}W.style[X]=Y;}else{}};}}(),getXY:function(G){return e.Dom.batch(G,e.Dom._getXY);},_canPosition:function(G){return(e.Dom._getStyle(G,"display")!=="none"&&e.Dom._inDoc(G));},_getXY:function(W){var X,G,Z,ab,Y,aa,ac=Math.round,ad=false;if(e.Dom._canPosition(W)){Z=W[p]();ab=W[C];X=e.Dom.getDocumentScrollLeft(ab);G=e.Dom.getDocumentScrollTop(ab);ad=[Z[I],Z[N]];if(Y||aa){ad[0]-=aa;ad[1]-=Y;}if((G||X)){ad[0]+=X;ad[1]+=G;}ad[0]=ac(ad[0]);ad[1]=ac(ad[1]);}else{}return ad;},getX:function(G){var W=function(X){return e.Dom.getXY(X)[0];};return e.Dom.batch(G,W,e.Dom,true);},getY:function(G){var W=function(X){return e.Dom.getXY(X)[1];};return e.Dom.batch(G,W,e.Dom,true);},setXY:function(G,X,W){e.Dom.batch(G,e.Dom._setXY,{pos:X,noRetry:W});},_setXY:function(G,Z){var aa=e.Dom._getStyle(G,O),Y=e.Dom.setStyle,ad=Z.pos,W=Z.noRetry,ab=[parseInt(e.Dom.getComputedStyle(G,I),10),parseInt(e.Dom.getComputedStyle(G,N),10)],ac,X;ac=e.Dom._getXY(G);if(!ad||ac===false){return false;}if(aa=="static"){aa=u;Y(G,O,aa);}if(isNaN(ab[0])){ab[0]=(aa==u)?0:G[z];}if(isNaN(ab[1])){ab[1]=(aa==u)?0:G[o];}if(ad[0]!==null){Y(G,I,ad[0]-ac[0]+ab[0]+"px");}if(ad[1]!==null){Y(G,N,ad[1]-ac[1]+ab[1]+"px");}if(!W){X=e.Dom._getXY(G);if((ad[0]!==null&&X[0]!=ad[0])||(ad[1]!==null&&X[1]!=ad[1])){e.Dom._setXY(G,{pos:ad,noRetry:true});}}},setX:function(W,G){e.Dom.setXY(W,[G,null]);},setY:function(G,W){e.Dom.setXY(G,[null,W]);},getRegion:function(G){var W=function(X){var Y=false;if(e.Dom._canPosition(X)){Y=e.Region.getRegion(X);}else{}return Y;};return e.Dom.batch(G,W,e.Dom,true);},getClientWidth:function(){return e.Dom.getViewportWidth();},getClientHeight:function(){return e.Dom.getViewportHeight();},getElementsByClassName:function(ab,af,ac,ae,X,ad){af=af||"*";ac=(ac)?e.Dom.get(ac):null||j;if(!ac){return[];}var W=[],G=ac.getElementsByTagName(af),Z=e.Dom.hasClass;for(var Y=0,aa=G.length;Y<aa;++Y){if(Z(G[Y],ab)){W[W.length]=G[Y];}}if(ae){e.Dom.batch(W,ae,X,ad);}return W;},hasClass:function(W,G){return e.Dom.batch(W,e.Dom._hasClass,G);},_hasClass:function(X,W){var G=false,Y;if(X&&W){Y=e.Dom._getAttribute(X,f)||i;if(Y){Y=Y.replace(/\s+/g,b);}if(W.exec){G=W.test(Y);}else{G=W&&(b+Y+b).indexOf(b+W+b)>-1;}}else{}return G;},addClass:function(W,G){return e.Dom.batch(W,e.Dom._addClass,G);},_addClass:function(X,W){var G=false,Y;if(X&&W){Y=e.Dom._getAttribute(X,f)||i;if(!e.Dom._hasClass(X,W)){e.Dom.setAttribute(X,f,a(Y+b+W));G=true;}}else{}return G;},removeClass:function(W,G){return e.Dom.batch(W,e.Dom._removeClass,G);},_removeClass:function(Y,X){var W=false,aa,Z,G;if(Y&&X){aa=e.Dom._getAttribute(Y,f)||i;e.Dom.setAttribute(Y,f,aa.replace(e.Dom._getClassRegex(X),i));Z=e.Dom._getAttribute(Y,f);if(aa!==Z){e.Dom.setAttribute(Y,f,a(Z));W=true;if(e.Dom._getAttribute(Y,f)===""){G=(Y.hasAttribute&&Y.hasAttribute(E))?E:f;Y.removeAttribute(G);}}}else{}return W;},replaceClass:function(X,W,G){return e.Dom.batch(X,e.Dom._replaceClass,{from:W,to:G});},_replaceClass:function(Y,X){var W,ab,aa,G=false,Z;if(Y&&X){ab=X.from;aa=X.to;if(!aa){G=false;}else{if(!ab){G=e.Dom._addClass(Y,X.to);}else{if(ab!==aa){Z=e.Dom._getAttribute(Y,f)||i;W=(b+Z.replace(e.Dom._getClassRegex(ab),b+aa).replace(/\s+/g,b)).split(e.Dom._getClassRegex(aa));W.splice(1,0,b+aa);e.Dom.setAttribute(Y,f,a(W.join(i)));G=true;}}}}else{}return G;},generateId:function(G,X){X=X||"yui-gen";var W=function(Y){if(Y&&Y.id){return Y.id;}var Z=X+YAHOO.env._id_counter++;
 
if(Y){if(Y[C]&&Y[C].getElementById(Z)){return e.Dom.generateId(Y,Z+X);}Y.id=Z;}return Z;};return e.Dom.batch(G,W,e.Dom,true)||W.apply(e.Dom,arguments);},isAncestor:function(W,X){W=e.Dom.get(W);X=e.Dom.get(X);var G=false;if((W&&X)&&(W[K]&&X[K])){if(W.contains&&W!==X){G=W.contains(X);}else{if(W.compareDocumentPosition){G=!!(W.compareDocumentPosition(X)&16);}}}else{}return G;},inDocument:function(G,W){return e.Dom._inDoc(e.Dom.get(G),W);},_inDoc:function(W,X){var G=false;if(W&&W[c]){X=X||W[C];G=e.Dom.isAncestor(X[U],W);}else{}return G;},getElementsBy:function(W,af,ab,ad,X,ac,ae){af=af||"*";ab=(ab)?e.Dom.get(ab):null||j;var aa=(ae)?null:[],G;if(ab){G=ab.getElementsByTagName(af);for(var Y=0,Z=G.length;Y<Z;++Y){if(W(G[Y])){if(ae){aa=G[Y];break;}else{aa[aa.length]=G[Y];}}}if(ad){e.Dom.batch(aa,ad,X,ac);}}return aa;},getElementBy:function(X,G,W){return e.Dom.getElementsBy(X,G,W,null,null,null,true);},batch:function(X,ab,aa,Z){var Y=[],W=(Z)?aa:null;X=(X&&(X[c]||X.item))?X:e.Dom.get(X);if(X&&ab){if(X[c]||X.length===undefined){return ab.call(W,X,aa);}for(var G=0;G<X.length;++G){Y[Y.length]=ab.call(W||X[G],X[G],aa);}}else{return false;}return Y;},getDocumentHeight:function(){var W=(j[S]!=l||h)?j.body.scrollHeight:v.scrollHeight,G=Math.max(W,e.Dom.getViewportHeight());return G;},getDocumentWidth:function(){var W=(j[S]!=l||h)?j.body.scrollWidth:v.scrollWidth,G=Math.max(W,e.Dom.getViewportWidth());return G;},getViewportHeight:function(){var G=self.innerHeight,W=j[S];if((W||s)&&!d){G=(W==l)?v.clientHeight:j.body.clientHeight;}return G;},getViewportWidth:function(){var G=self.innerWidth,W=j[S];if(W||s){G=(W==l)?v.clientWidth:j.body.clientWidth;}return G;},getAncestorBy:function(G,W){while((G=G[x])){if(e.Dom._testElement(G,W)){return G;}}return null;},getAncestorByClassName:function(W,G){W=e.Dom.get(W);if(!W){return null;}var X=function(Y){return e.Dom.hasClass(Y,G);};return e.Dom.getAncestorBy(W,X);},getAncestorByTagName:function(W,G){W=e.Dom.get(W);if(!W){return null;}var X=function(Y){return Y[c]&&Y[c].toUpperCase()==G.toUpperCase();};return e.Dom.getAncestorBy(W,X);},getPreviousSiblingBy:function(G,W){while(G){G=G.previousSibling;if(e.Dom._testElement(G,W)){return G;}}return null;},getPreviousSibling:function(G){G=e.Dom.get(G);if(!G){return null;}return e.Dom.getPreviousSiblingBy(G);},getNextSiblingBy:function(G,W){while(G){G=G.nextSibling;if(e.Dom._testElement(G,W)){return G;}}return null;},getNextSibling:function(G){G=e.Dom.get(G);if(!G){return null;}return e.Dom.getNextSiblingBy(G);},getFirstChildBy:function(G,X){var W=(e.Dom._testElement(G.firstChild,X))?G.firstChild:null;return W||e.Dom.getNextSiblingBy(G.firstChild,X);},getFirstChild:function(G,W){G=e.Dom.get(G);if(!G){return null;}return e.Dom.getFirstChildBy(G);},getLastChildBy:function(G,X){if(!G){return null;}var W=(e.Dom._testElement(G.lastChild,X))?G.lastChild:null;return W||e.Dom.getPreviousSiblingBy(G.lastChild,X);},getLastChild:function(G){G=e.Dom.get(G);return e.Dom.getLastChildBy(G);},getChildrenBy:function(W,Y){var X=e.Dom.getFirstChildBy(W,Y),G=X?[X]:[];e.Dom.getNextSiblingBy(X,function(Z){if(!Y||Y(Z)){G[G.length]=Z;}return false;});return G;},getChildren:function(G){G=e.Dom.get(G);if(!G){}return e.Dom.getChildrenBy(G);},getDocumentScrollLeft:function(G){G=G||j;return Math.max(G[U].scrollLeft,G.body.scrollLeft);},getDocumentScrollTop:function(G){G=G||j;return Math.max(G[U].scrollTop,G.body.scrollTop);},insertBefore:function(W,G){W=e.Dom.get(W);G=e.Dom.get(G);if(!W||!G||!G[x]){return null;}return G[x].insertBefore(W,G);},insertAfter:function(W,G){W=e.Dom.get(W);G=e.Dom.get(G);if(!W||!G||!G[x]){return null;}if(G.nextSibling){return G[x].insertBefore(W,G.nextSibling);}else{return G[x].appendChild(W);}},getClientRegion:function(){var X=e.Dom.getDocumentScrollTop(),W=e.Dom.getDocumentScrollLeft(),Y=e.Dom.getViewportWidth()+W,G=e.Dom.getViewportHeight()+X;return new e.Region(X,Y,G,W);},setAttribute:function(W,G,X){e.Dom.batch(W,e.Dom._setAttribute,{attr:G,val:X});},_setAttribute:function(X,W){var G=e.Dom._toCamel(W.attr),Y=W.val;if(X&&X.setAttribute){if(e.Dom.DOT_ATTRIBUTES[G]&&X.tagName&&X.tagName!="BUTTON"){X[G]=Y;}else{G=e.Dom.CUSTOM_ATTRIBUTES[G]||G;X.setAttribute(G,Y);}}else{}},getAttribute:function(W,G){return e.Dom.batch(W,e.Dom._getAttribute,G);},_getAttribute:function(W,G){var X;G=e.Dom.CUSTOM_ATTRIBUTES[G]||G;if(e.Dom.DOT_ATTRIBUTES[G]){X=W[G];}else{if(W&&"getAttribute" in W){if(/^(?:href|src)$/.test(G)){X=W.getAttribute(G,2);}else{X=W.getAttribute(G);}}else{}}return X;},_toCamel:function(W){var X=B;function G(Y,Z){return Z.toUpperCase();}return X[W]||(X[W]=W.indexOf("-")===-1?W:W.replace(/-([a-z])/gi,G));},_getClassRegex:function(W){var G;if(W!==undefined){if(W.exec){G=W;}else{G=F[W];if(!G){W=W.replace(e.Dom._patterns.CLASS_RE_TOKENS,"\\$1");W=W.replace(/\s+/g,b);G=F[W]=new RegExp(R+W+J,t);}}}return G;},_patterns:{ROOT_TAG:/^body|html$/i,CLASS_RE_TOKENS:/([\.\(\)\^\$\*\+\?\|\[\]\{\}\\])/g},_testElement:function(G,W){return G&&G[K]==1&&(!W||W(G));},_calcBorders:function(X,Y){var W=parseInt(e.Dom[V](X,q),10)||0,G=parseInt(e.Dom[V](X,P),10)||0;if(g){if(m.test(X[c])){W=0;G=0;}}Y[0]+=G;Y[1]+=W;return Y;}};var r=e.Dom[V];if(L.opera){e.Dom[V]=function(W,G){var X=r(W,G);if(w.test(G)){X=e.Dom.Color.toRGB(X);}return X;};}if(L.webkit){e.Dom[V]=function(W,G){var X=r(W,G);if(X==="rgba(0, 0, 0, 0)"){X="transparent";}return X;};}if(L.ie&&L.ie>=8){e.Dom.DOT_ATTRIBUTES.type=true;}})();YAHOO.util.Region=function(d,e,a,c){this.top=d;this.y=d;this[1]=d;this.right=e;this.bottom=a;this.left=c;this.x=c;this[0]=c;this.width=this.right-this.left;this.height=this.bottom-this.top;};YAHOO.util.Region.prototype.contains=function(a){return(a.left>=this.left&&a.right<=this.right&&a.top>=this.top&&a.bottom<=this.bottom);};YAHOO.util.Region.prototype.getArea=function(){return((this.bottom-this.top)*(this.right-this.left));};YAHOO.util.Region.prototype.intersect=function(f){var d=Math.max(this.top,f.top),e=Math.min(this.right,f.right),a=Math.min(this.bottom,f.bottom),c=Math.max(this.left,f.left);
 
if(a>=d&&e>=c){return new YAHOO.util.Region(d,e,a,c);}else{return null;}};YAHOO.util.Region.prototype.union=function(f){var d=Math.min(this.top,f.top),e=Math.max(this.right,f.right),a=Math.max(this.bottom,f.bottom),c=Math.min(this.left,f.left);return new YAHOO.util.Region(d,e,a,c);};YAHOO.util.Region.prototype.toString=function(){return("Region {"+"top: "+this.top+", right: "+this.right+", bottom: "+this.bottom+", left: "+this.left+", height: "+this.height+", width: "+this.width+"}");};YAHOO.util.Region.getRegion=function(e){var g=YAHOO.util.Dom.getXY(e),d=g[1],f=g[0]+e.offsetWidth,a=g[1]+e.offsetHeight,c=g[0];return new YAHOO.util.Region(d,f,a,c);};YAHOO.util.Point=function(a,b){if(YAHOO.lang.isArray(a)){b=a[1];a=a[0];}YAHOO.util.Point.superclass.constructor.call(this,b,a,b,a);};YAHOO.extend(YAHOO.util.Point,YAHOO.util.Region);(function(){var b=YAHOO.util,a="clientTop",f="clientLeft",j="parentNode",k="right",w="hasLayout",i="px",u="opacity",l="auto",d="borderLeftWidth",g="borderTopWidth",p="borderRightWidth",v="borderBottomWidth",s="visible",q="transparent",n="height",e="width",h="style",t="currentStyle",r=/^width|height$/,o=/^(\d[.\d]*)+(em|ex|px|gd|rem|vw|vh|vm|ch|mm|cm|in|pt|pc|deg|rad|ms|s|hz|khz|%){1}?/i,m={get:function(x,z){var y="",A=x[t][z];if(z===u){y=b.Dom.getStyle(x,u);}else{if(!A||(A.indexOf&&A.indexOf(i)>-1)){y=A;}else{if(b.Dom.IE_COMPUTED[z]){y=b.Dom.IE_COMPUTED[z](x,z);}else{if(o.test(A)){y=b.Dom.IE.ComputedStyle.getPixel(x,z);}else{y=A;}}}}return y;},getOffset:function(z,E){var B=z[t][E],x=E.charAt(0).toUpperCase()+E.substr(1),C="offset"+x,y="pixel"+x,A="",D;if(B==l){D=z[C];if(D===undefined){A=0;}A=D;if(r.test(E)){z[h][E]=D;if(z[C]>D){A=D-(z[C]-D);}z[h][E]=l;}}else{if(!z[h][y]&&!z[h][E]){z[h][E]=B;}A=z[h][y];}return A+i;},getBorderWidth:function(x,z){var y=null;if(!x[t][w]){x[h].zoom=1;}switch(z){case g:y=x[a];break;case v:y=x.offsetHeight-x.clientHeight-x[a];break;case d:y=x[f];break;case p:y=x.offsetWidth-x.clientWidth-x[f];break;}return y+i;},getPixel:function(y,x){var A=null,B=y[t][k],z=y[t][x];y[h][k]=z;A=y[h].pixelRight;y[h][k]=B;return A+i;},getMargin:function(y,x){var z;if(y[t][x]==l){z=0+i;}else{z=b.Dom.IE.ComputedStyle.getPixel(y,x);}return z;},getVisibility:function(y,x){var z;while((z=y[t])&&z[x]=="inherit"){y=y[j];}return(z)?z[x]:s;},getColor:function(y,x){return b.Dom.Color.toRGB(y[t][x])||q;},getBorderColor:function(y,x){var z=y[t],A=z[x]||z.color;return b.Dom.Color.toRGB(b.Dom.Color.toHex(A));}},c={};c.top=c.right=c.bottom=c.left=c[e]=c[n]=m.getOffset;c.color=m.getColor;c[g]=c[p]=c[v]=c[d]=m.getBorderWidth;c.marginTop=c.marginRight=c.marginBottom=c.marginLeft=m.getMargin;c.visibility=m.getVisibility;c.borderColor=c.borderTopColor=c.borderRightColor=c.borderBottomColor=c.borderLeftColor=m.getBorderColor;b.Dom.IE_COMPUTED=c;b.Dom.IE_ComputedStyle=m;})();(function(){var c="toString",a=parseInt,b=RegExp,d=YAHOO.util;d.Dom.Color={KEYWORDS:{black:"000",silver:"c0c0c0",gray:"808080",white:"fff",maroon:"800000",red:"f00",purple:"800080",fuchsia:"f0f",green:"008000",lime:"0f0",olive:"808000",yellow:"ff0",navy:"000080",blue:"00f",teal:"008080",aqua:"0ff"},re_RGB:/^rgb\(([0-9]+)\s*,\s*([0-9]+)\s*,\s*([0-9]+)\)$/i,re_hex:/^#?([0-9A-F]{2})([0-9A-F]{2})([0-9A-F]{2})$/i,re_hex3:/([0-9A-F])/gi,toRGB:function(e){if(!d.Dom.Color.re_RGB.test(e)){e=d.Dom.Color.toHex(e);}if(d.Dom.Color.re_hex.exec(e)){e="rgb("+[a(b.$1,16),a(b.$2,16),a(b.$3,16)].join(", ")+")";}return e;},toHex:function(f){f=d.Dom.Color.KEYWORDS[f]||f;if(d.Dom.Color.re_RGB.exec(f)){f=[Number(b.$1).toString(16),Number(b.$2).toString(16),Number(b.$3).toString(16)];for(var e=0;e<f.length;e++){if(f[e].length<2){f[e]="0"+f[e];}}f=f.join("");}if(f.length<6){f=f.replace(d.Dom.Color.re_hex3,"$1$1");}if(f!=="transparent"&&f.indexOf("#")<0){f="#"+f;}return f.toUpperCase();}};}());YAHOO.register("dom",YAHOO.util.Dom,{version:"2.9.0",build:"2800"});YAHOO.util.CustomEvent=function(d,c,b,a,e){this.type=d;this.scope=c||window;this.silent=b;this.fireOnce=e;this.fired=false;this.firedWith=null;this.signature=a||YAHOO.util.CustomEvent.LIST;this.subscribers=[];if(!this.silent){}var f="_YUICEOnSubscribe";if(d!==f){this.subscribeEvent=new YAHOO.util.CustomEvent(f,this,true);}this.lastError=null;};YAHOO.util.CustomEvent.LIST=0;YAHOO.util.CustomEvent.FLAT=1;YAHOO.util.CustomEvent.prototype={subscribe:function(b,c,d){if(!b){throw new Error("Invalid callback for subscriber to '"+this.type+"'");}if(this.subscribeEvent){this.subscribeEvent.fire(b,c,d);}var a=new YAHOO.util.Subscriber(b,c,d);if(this.fireOnce&&this.fired){this.notify(a,this.firedWith);}else{this.subscribers.push(a);}},unsubscribe:function(d,f){if(!d){return this.unsubscribeAll();}var e=false;for(var b=0,a=this.subscribers.length;b<a;++b){var c=this.subscribers[b];if(c&&c.contains(d,f)){this._delete(b);e=true;}}return e;},fire:function(){this.lastError=null;var h=[],a=this.subscribers.length;var d=[].slice.call(arguments,0),c=true,f,b=false;if(this.fireOnce){if(this.fired){return true;}else{this.firedWith=d;}}this.fired=true;if(!a&&this.silent){return true;}if(!this.silent){}var e=this.subscribers.slice();for(f=0;f<a;++f){var g=e[f];if(!g||!g.fn){b=true;}else{c=this.notify(g,d);if(false===c){if(!this.silent){}break;}}}return(c!==false);},notify:function(g,c){var b,i=null,f=g.getScope(this.scope),a=YAHOO.util.Event.throwErrors;if(!this.silent){}if(this.signature==YAHOO.util.CustomEvent.FLAT){if(c.length>0){i=c[0];}try{b=g.fn.call(f,i,g.obj);}catch(h){this.lastError=h;if(a){throw h;}}}else{try{b=g.fn.call(f,this.type,c,g.obj);}catch(d){this.lastError=d;if(a){throw d;}}}return b;},unsubscribeAll:function(){var a=this.subscribers.length,b;for(b=a-1;b>-1;b--){this._delete(b);}this.subscribers=[];return a;},_delete:function(a){var b=this.subscribers[a];if(b){delete b.fn;delete b.obj;}this.subscribers.splice(a,1);},toString:function(){return"CustomEvent: "+"'"+this.type+"', "+"context: "+this.scope;}};YAHOO.util.Subscriber=function(a,b,c){this.fn=a;this.obj=YAHOO.lang.isUndefined(b)?null:b;this.overrideContext=c;};YAHOO.util.Subscriber.prototype.getScope=function(a){if(this.overrideContext){if(this.overrideContext===true){return this.obj;}else{return this.overrideContext;}}return a;};YAHOO.util.Subscriber.prototype.contains=function(a,b){if(b){return(this.fn==a&&this.obj==b);}else{return(this.fn==a);}};YAHOO.util.Subscriber.prototype.toString=function(){return"Subscriber { obj: "+this.obj+", overrideContext: "+(this.overrideContext||"no")+" }";};if(!YAHOO.util.Event){YAHOO.util.Event=function(){var g=false,h=[],j=[],a=0,e=[],b=0,c={63232:38,63233:40,63234:37,63235:39,63276:33,63277:34,25:9},d=YAHOO.env.ua.ie,f="focusin",i="focusout";return{POLL_RETRYS:500,POLL_INTERVAL:40,EL:0,TYPE:1,FN:2,WFN:3,UNLOAD_OBJ:3,ADJ_SCOPE:4,OBJ:5,OVERRIDE:6,CAPTURE:7,lastError:null,isSafari:YAHOO.env.ua.webkit,webkit:YAHOO.env.ua.webkit,isIE:d,_interval:null,_dri:null,_specialTypes:{focusin:(d?"focusin":"focus"),focusout:(d?"focusout":"blur")},DOMReady:false,throwErrors:false,startInterval:function(){if(!this._interval){this._interval=YAHOO.lang.later(this.POLL_INTERVAL,this,this._tryPreloadAttach,null,true);}},onAvailable:function(q,m,o,p,n){var k=(YAHOO.lang.isString(q))?[q]:q;for(var l=0;l<k.length;l=l+1){e.push({id:k[l],fn:m,obj:o,overrideContext:p,checkReady:n});}a=this.POLL_RETRYS;this.startInterval();},onContentReady:function(n,k,l,m){this.onAvailable(n,k,l,m,true);},onDOMReady:function(){this.DOMReadyEvent.subscribe.apply(this.DOMReadyEvent,arguments);},_addListener:function(m,k,v,p,t,y){if(!v||!v.call){return false;}if(this._isValidCollection(m)){var w=true;for(var q=0,s=m.length;q<s;++q){w=this.on(m[q],k,v,p,t)&&w;}return w;}else{if(YAHOO.lang.isString(m)){var o=this.getEl(m);if(o){m=o;}else{this.onAvailable(m,function(){YAHOO.util.Event._addListener(m,k,v,p,t,y);});return true;}}}if(!m){return false;}if("unload"==k&&p!==this){j[j.length]=[m,k,v,p,t];return true;}var l=m;if(t){if(t===true){l=p;}else{l=t;}}var n=function(z){return v.call(l,YAHOO.util.Event.getEvent(z,m),p);};var x=[m,k,v,n,l,p,t,y];var r=h.length;h[r]=x;try{this._simpleAdd(m,k,n,y);}catch(u){this.lastError=u;this.removeListener(m,k,v);return false;}return true;},_getType:function(k){return this._specialTypes[k]||k;},addListener:function(m,p,l,n,o){var k=((p==f||p==i)&&!YAHOO.env.ua.ie)?true:false;return this._addListener(m,this._getType(p),l,n,o,k);},addFocusListener:function(l,k,m,n){return this.on(l,f,k,m,n);},removeFocusListener:function(l,k){return this.removeListener(l,f,k);},addBlurListener:function(l,k,m,n){return this.on(l,i,k,m,n);},removeBlurListener:function(l,k){return this.removeListener(l,i,k);},removeListener:function(l,k,r){var m,p,u;k=this._getType(k);if(typeof l=="string"){l=this.getEl(l);}else{if(this._isValidCollection(l)){var s=true;for(m=l.length-1;m>-1;m--){s=(this.removeListener(l[m],k,r)&&s);}return s;}}if(!r||!r.call){return this.purgeElement(l,false,k);}if("unload"==k){for(m=j.length-1;m>-1;m--){u=j[m];if(u&&u[0]==l&&u[1]==k&&u[2]==r){j.splice(m,1);return true;}}return false;}var n=null;var o=arguments[3];if("undefined"===typeof o){o=this._getCacheIndex(h,l,k,r);}if(o>=0){n=h[o];}if(!l||!n){return false;}var t=n[this.CAPTURE]===true?true:false;try{this._simpleRemove(l,k,n[this.WFN],t);}catch(q){this.lastError=q;return false;}delete h[o][this.WFN];delete h[o][this.FN];h.splice(o,1);return true;},getTarget:function(m,l){var k=m.target||m.srcElement;return this.resolveTextNode(k);},resolveTextNode:function(l){try{if(l&&3==l.nodeType){return l.parentNode;}}catch(k){return null;}return l;},getPageX:function(l){var k=l.pageX;if(!k&&0!==k){k=l.clientX||0;if(this.isIE){k+=this._getScrollLeft();}}return k;},getPageY:function(k){var l=k.pageY;if(!l&&0!==l){l=k.clientY||0;if(this.isIE){l+=this._getScrollTop();}}return l;},getXY:function(k){return[this.getPageX(k),this.getPageY(k)];},getRelatedTarget:function(l){var k=l.relatedTarget;
 
if(!k){if(l.type=="mouseout"){k=l.toElement;}else{if(l.type=="mouseover"){k=l.fromElement;}}}return this.resolveTextNode(k);},getTime:function(m){if(!m.time){var l=new Date().getTime();try{m.time=l;}catch(k){this.lastError=k;return l;}}return m.time;},stopEvent:function(k){this.stopPropagation(k);this.preventDefault(k);},stopPropagation:function(k){if(k.stopPropagation){k.stopPropagation();}else{k.cancelBubble=true;}},preventDefault:function(k){if(k.preventDefault){k.preventDefault();}else{k.returnValue=false;}},getEvent:function(m,k){var l=m||window.event;if(!l){var n=this.getEvent.caller;while(n){l=n.arguments[0];if(l&&Event==l.constructor){break;}n=n.caller;}}return l;},getCharCode:function(l){var k=l.keyCode||l.charCode||0;if(YAHOO.env.ua.webkit&&(k in c)){k=c[k];}return k;},_getCacheIndex:function(n,q,r,p){for(var o=0,m=n.length;o<m;o=o+1){var k=n[o];if(k&&k[this.FN]==p&&k[this.EL]==q&&k[this.TYPE]==r){return o;}}return -1;},generateId:function(k){var l=k.id;if(!l){l="yuievtautoid-"+b;++b;k.id=l;}return l;},_isValidCollection:function(l){try{return(l&&typeof l!=="string"&&l.length&&!l.tagName&&!l.alert&&typeof l[0]!=="undefined");}catch(k){return false;}},elCache:{},getEl:function(k){return(typeof k==="string")?document.getElementById(k):k;},clearCache:function(){},DOMReadyEvent:new YAHOO.util.CustomEvent("DOMReady",YAHOO,0,0,1),_load:function(l){if(!g){g=true;var k=YAHOO.util.Event;k._ready();k._tryPreloadAttach();}},_ready:function(l){var k=YAHOO.util.Event;if(!k.DOMReady){k.DOMReady=true;k.DOMReadyEvent.fire();k._simpleRemove(document,"DOMContentLoaded",k._ready);}},_tryPreloadAttach:function(){if(e.length===0){a=0;if(this._interval){this._interval.cancel();this._interval=null;}return;}if(this.locked){return;}if(this.isIE){if(!this.DOMReady){this.startInterval();return;}}this.locked=true;var q=!g;if(!q){q=(a>0&&e.length>0);}var p=[];var r=function(t,u){var s=t;if(u.overrideContext){if(u.overrideContext===true){s=u.obj;}else{s=u.overrideContext;}}u.fn.call(s,u.obj);};var l,k,o,n,m=[];for(l=0,k=e.length;l<k;l=l+1){o=e[l];if(o){n=this.getEl(o.id);if(n){if(o.checkReady){if(g||n.nextSibling||!q){m.push(o);e[l]=null;}}else{r(n,o);e[l]=null;}}else{p.push(o);}}}for(l=0,k=m.length;l<k;l=l+1){o=m[l];r(this.getEl(o.id),o);}a--;if(q){for(l=e.length-1;l>-1;l--){o=e[l];if(!o||!o.id){e.splice(l,1);}}this.startInterval();}else{if(this._interval){this._interval.cancel();this._interval=null;}}this.locked=false;},purgeElement:function(p,q,s){var n=(YAHOO.lang.isString(p))?this.getEl(p):p;var r=this.getListeners(n,s),o,k;if(r){for(o=r.length-1;o>-1;o--){var m=r[o];this.removeListener(n,m.type,m.fn);}}if(q&&n&&n.childNodes){for(o=0,k=n.childNodes.length;o<k;++o){this.purgeElement(n.childNodes[o],q,s);}}},getListeners:function(n,k){var q=[],m;if(!k){m=[h,j];}else{if(k==="unload"){m=[j];}else{k=this._getType(k);m=[h];}}var s=(YAHOO.lang.isString(n))?this.getEl(n):n;for(var p=0;p<m.length;p=p+1){var u=m[p];if(u){for(var r=0,t=u.length;r<t;++r){var o=u[r];if(o&&o[this.EL]===s&&(!k||k===o[this.TYPE])){q.push({type:o[this.TYPE],fn:o[this.FN],obj:o[this.OBJ],adjust:o[this.OVERRIDE],scope:o[this.ADJ_SCOPE],index:r});}}}}return(q.length)?q:null;},_unload:function(s){var m=YAHOO.util.Event,p,o,n,r,q,t=j.slice(),k;for(p=0,r=j.length;p<r;++p){n=t[p];if(n){try{k=window;if(n[m.ADJ_SCOPE]){if(n[m.ADJ_SCOPE]===true){k=n[m.UNLOAD_OBJ];}else{k=n[m.ADJ_SCOPE];}}n[m.FN].call(k,m.getEvent(s,n[m.EL]),n[m.UNLOAD_OBJ]);}catch(w){}t[p]=null;}}n=null;k=null;j=null;if(h){for(o=h.length-1;o>-1;o--){n=h[o];if(n){try{m.removeListener(n[m.EL],n[m.TYPE],n[m.FN],o);}catch(v){}}}n=null;}try{m._simpleRemove(window,"unload",m._unload);m._simpleRemove(window,"load",m._load);}catch(u){}},_getScrollLeft:function(){return this._getScroll()[1];},_getScrollTop:function(){return this._getScroll()[0];},_getScroll:function(){var k=document.documentElement,l=document.body;if(k&&(k.scrollTop||k.scrollLeft)){return[k.scrollTop,k.scrollLeft];}else{if(l){return[l.scrollTop,l.scrollLeft];}else{return[0,0];}}},regCE:function(){},_simpleAdd:function(){if(window.addEventListener){return function(m,n,l,k){m.addEventListener(n,l,(k));};}else{if(window.attachEvent){return function(m,n,l,k){m.attachEvent("on"+n,l);};}else{return function(){};}}}(),_simpleRemove:function(){if(window.removeEventListener){return function(m,n,l,k){m.removeEventListener(n,l,(k));};}else{if(window.detachEvent){return function(l,m,k){l.detachEvent("on"+m,k);};}else{return function(){};}}}()};}();(function(){var a=YAHOO.util.Event;a.on=a.addListener;a.onFocus=a.addFocusListener;a.onBlur=a.addBlurListener;
 
/*! DOMReady: based on work by: Dean Edwards/John Resig/Matthias Miller/Diego Perini */
 
if(a.isIE){if(self!==self.top){document.onreadystatechange=function(){if(document.readyState=="complete"){document.onreadystatechange=null;a._ready();}};}else{YAHOO.util.Event.onDOMReady(YAHOO.util.Event._tryPreloadAttach,YAHOO.util.Event,true);var b=document.createElement("p");a._dri=setInterval(function(){try{b.doScroll("left");clearInterval(a._dri);a._dri=null;a._ready();b=null;}catch(c){}},a.POLL_INTERVAL);}}else{if(a.webkit&&a.webkit<525){a._dri=setInterval(function(){var c=document.readyState;if("loaded"==c||"complete"==c){clearInterval(a._dri);a._dri=null;a._ready();}},a.POLL_INTERVAL);}else{a._simpleAdd(document,"DOMContentLoaded",a._ready);}}a._simpleAdd(window,"load",a._load);a._simpleAdd(window,"unload",a._unload);a._tryPreloadAttach();})();}YAHOO.util.EventProvider=function(){};YAHOO.util.EventProvider.prototype={__yui_events:null,__yui_subscribers:null,subscribe:function(a,c,f,e){this.__yui_events=this.__yui_events||{};var d=this.__yui_events[a];if(d){d.subscribe(c,f,e);}else{this.__yui_subscribers=this.__yui_subscribers||{};var b=this.__yui_subscribers;if(!b[a]){b[a]=[];}b[a].push({fn:c,obj:f,overrideContext:e});}},unsubscribe:function(c,e,g){this.__yui_events=this.__yui_events||{};var a=this.__yui_events;if(c){var f=a[c];if(f){return f.unsubscribe(e,g);}}else{var b=true;for(var d in a){if(YAHOO.lang.hasOwnProperty(a,d)){b=b&&a[d].unsubscribe(e,g);
 
}}return b;}return false;},unsubscribeAll:function(a){return this.unsubscribe(a);},createEvent:function(b,g){this.__yui_events=this.__yui_events||{};var e=g||{},d=this.__yui_events,f;if(d[b]){}else{f=new YAHOO.util.CustomEvent(b,e.scope||this,e.silent,YAHOO.util.CustomEvent.FLAT,e.fireOnce);d[b]=f;if(e.onSubscribeCallback){f.subscribeEvent.subscribe(e.onSubscribeCallback);}this.__yui_subscribers=this.__yui_subscribers||{};var a=this.__yui_subscribers[b];if(a){for(var c=0;c<a.length;++c){f.subscribe(a[c].fn,a[c].obj,a[c].overrideContext);}}}return d[b];},fireEvent:function(b){this.__yui_events=this.__yui_events||{};var d=this.__yui_events[b];if(!d){return null;}var a=[];for(var c=1;c<arguments.length;++c){a.push(arguments[c]);}return d.fire.apply(d,a);},hasEvent:function(a){if(this.__yui_events){if(this.__yui_events[a]){return true;}}return false;}};(function(){var a=YAHOO.util.Event,c=YAHOO.lang;YAHOO.util.KeyListener=function(d,i,e,f){if(!d){}else{if(!i){}else{if(!e){}}}if(!f){f=YAHOO.util.KeyListener.KEYDOWN;}var g=new YAHOO.util.CustomEvent("keyPressed");this.enabledEvent=new YAHOO.util.CustomEvent("enabled");this.disabledEvent=new YAHOO.util.CustomEvent("disabled");if(c.isString(d)){d=document.getElementById(d);}if(c.isFunction(e)){g.subscribe(e);}else{g.subscribe(e.fn,e.scope,e.correctScope);}function h(o,n){if(!i.shift){i.shift=false;}if(!i.alt){i.alt=false;}if(!i.ctrl){i.ctrl=false;}if(o.shiftKey==i.shift&&o.altKey==i.alt&&o.ctrlKey==i.ctrl){var j,m=i.keys,l;if(YAHOO.lang.isArray(m)){for(var k=0;k<m.length;k++){j=m[k];l=a.getCharCode(o);if(j==l){g.fire(l,o);break;}}}else{l=a.getCharCode(o);if(m==l){g.fire(l,o);}}}}this.enable=function(){if(!this.enabled){a.on(d,f,h);this.enabledEvent.fire(i);}this.enabled=true;};this.disable=function(){if(this.enabled){a.removeListener(d,f,h);this.disabledEvent.fire(i);}this.enabled=false;};this.toString=function(){return"KeyListener ["+i.keys+"] "+d.tagName+(d.id?"["+d.id+"]":"");};};var b=YAHOO.util.KeyListener;b.KEYDOWN="keydown";b.KEYUP="keyup";b.KEY={ALT:18,BACK_SPACE:8,CAPS_LOCK:20,CONTROL:17,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,LEFT:37,META:224,NUM_LOCK:144,PAGE_DOWN:34,PAGE_UP:33,PAUSE:19,PRINTSCREEN:44,RIGHT:39,SCROLL_LOCK:145,SHIFT:16,SPACE:32,TAB:9,UP:38};})();YAHOO.register("event",YAHOO.util.Event,{version:"2.9.0",build:"2800"});YAHOO.util.Connect={_msxml_progid:["Microsoft.XMLHTTP","MSXML2.XMLHTTP.3.0","MSXML2.XMLHTTP"],_http_headers:{},_has_http_headers:false,_use_default_post_header:true,_default_post_header:"application/x-www-form-urlencoded; charset=UTF-8",_default_form_header:"application/x-www-form-urlencoded",_use_default_xhr_header:true,_default_xhr_header:"XMLHttpRequest",_has_default_headers:true,_isFormSubmit:false,_default_headers:{},_poll:{},_timeOut:{},_polling_interval:50,_transaction_id:0,startEvent:new YAHOO.util.CustomEvent("start"),completeEvent:new YAHOO.util.CustomEvent("complete"),successEvent:new YAHOO.util.CustomEvent("success"),failureEvent:new YAHOO.util.CustomEvent("failure"),abortEvent:new YAHOO.util.CustomEvent("abort"),_customEvents:{onStart:["startEvent","start"],onComplete:["completeEvent","complete"],onSuccess:["successEvent","success"],onFailure:["failureEvent","failure"],onUpload:["uploadEvent","upload"],onAbort:["abortEvent","abort"]},setProgId:function(a){this._msxml_progid.unshift(a);},setDefaultPostHeader:function(a){if(typeof a=="string"){this._default_post_header=a;this._use_default_post_header=true;}else{if(typeof a=="boolean"){this._use_default_post_header=a;}}},setDefaultXhrHeader:function(a){if(typeof a=="string"){this._default_xhr_header=a;}else{this._use_default_xhr_header=a;}},setPollingInterval:function(a){if(typeof a=="number"&&isFinite(a)){this._polling_interval=a;}},createXhrObject:function(g){var d,a,b;try{a=new XMLHttpRequest();d={conn:a,tId:g,xhr:true};}catch(c){for(b=0;b<this._msxml_progid.length;++b){try{a=new ActiveXObject(this._msxml_progid[b]);d={conn:a,tId:g,xhr:true};break;}catch(f){}}}finally{return d;}},getConnectionObject:function(a){var c,d=this._transaction_id;try{if(!a){c=this.createXhrObject(d);}else{c={tId:d};if(a==="xdr"){c.conn=this._transport;c.xdr=true;}else{if(a==="upload"){c.upload=true;}}}if(c){this._transaction_id++;}}catch(b){}return c;},asyncRequest:function(h,d,g,a){var b=g&&g.argument?g.argument:null,e=this,f,c;if(this._isFileUpload){c="upload";}else{if(g&&g.xdr){c="xdr";}}f=this.getConnectionObject(c);if(!f){return null;}else{if(g&&g.customevents){this.initCustomEvents(f,g);}if(this._isFormSubmit){if(this._isFileUpload){window.setTimeout(function(){e.uploadFile(f,g,d,a);},10);return f;}if(h.toUpperCase()=="GET"){if(this._sFormData.length!==0){d+=((d.indexOf("?")==-1)?"?":"&")+this._sFormData;}}else{if(h.toUpperCase()=="POST"){a=a?this._sFormData+"&"+a:this._sFormData;}}}if(h.toUpperCase()=="GET"&&(g&&g.cache===false)){d+=((d.indexOf("?")==-1)?"?":"&")+"rnd="+new Date().valueOf().toString();}if(this._use_default_xhr_header){if(!this._default_headers["X-Requested-With"]){this.initHeader("X-Requested-With",this._default_xhr_header,true);}}if((h.toUpperCase()==="POST"&&this._use_default_post_header)&&this._isFormSubmit===false){this.initHeader("Content-Type",this._default_post_header);}if(f.xdr){this.xdr(f,h,d,g,a);return f;}f.conn.open(h,d,true);if(this._has_default_headers||this._has_http_headers){this.setHeader(f);}this.handleReadyState(f,g);f.conn.send(a||"");if(this._isFormSubmit===true){this.resetFormState();}this.startEvent.fire(f,b);if(f.startEvent){f.startEvent.fire(f,b);}return f;}},initCustomEvents:function(a,c){var b;for(b in c.customevents){if(this._customEvents[b][0]){a[this._customEvents[b][0]]=new YAHOO.util.CustomEvent(this._customEvents[b][1],(c.scope)?c.scope:null);a[this._customEvents[b][0]].subscribe(c.customevents[b]);}}},handleReadyState:function(c,d){var b=this,a=(d&&d.argument)?d.argument:null;if(d&&d.timeout){this._timeOut[c.tId]=window.setTimeout(function(){b.abort(c,d,true);},d.timeout);}this._poll[c.tId]=window.setInterval(function(){if(c.conn&&c.conn.readyState===4){window.clearInterval(b._poll[c.tId]);delete b._poll[c.tId];if(d&&d.timeout){window.clearTimeout(b._timeOut[c.tId]);delete b._timeOut[c.tId];}b.completeEvent.fire(c,a);if(c.completeEvent){c.completeEvent.fire(c,a);}b.handleTransactionResponse(c,d);}},this._polling_interval);},handleTransactionResponse:function(b,j,d){var f,a,h=(j&&j.argument)?j.argument:null,c=(b.r&&b.r.statusText==="xdr:success")?true:false,i=(b.r&&b.r.statusText==="xdr:failure")?true:false,k=d;try{if((b.conn.status!==undefined&&b.conn.status!==0)||c){f=b.conn.status;}else{if(i&&!k){f=0;}else{f=13030;}}}catch(g){f=13030;}if((f>=200&&f<300)||f===1223||c){a=b.xdr?b.r:this.createResponseObject(b,h);if(j&&j.success){if(!j.scope){j.success(a);}else{j.success.apply(j.scope,[a]);}}this.successEvent.fire(a);if(b.successEvent){b.successEvent.fire(a);}}else{switch(f){case 12002:case 12029:case 12030:case 12031:case 12152:case 13030:a=this.createExceptionObject(b.tId,h,(d?d:false));if(j&&j.failure){if(!j.scope){j.failure(a);}else{j.failure.apply(j.scope,[a]);}}break;default:a=(b.xdr)?b.response:this.createResponseObject(b,h);if(j&&j.failure){if(!j.scope){j.failure(a);}else{j.failure.apply(j.scope,[a]);}}}this.failureEvent.fire(a);if(b.failureEvent){b.failureEvent.fire(a);}}this.releaseObject(b);a=null;},createResponseObject:function(a,h){var d={},k={},f,c,g,b;try{c=a.conn.getAllResponseHeaders();g=c.split("\n");for(f=0;f<g.length;f++){b=g[f].indexOf(":");if(b!=-1){k[g[f].substring(0,b)]=YAHOO.lang.trim(g[f].substring(b+2));}}}catch(j){}d.tId=a.tId;d.status=(a.conn.status==1223)?204:a.conn.status;d.statusText=(a.conn.status==1223)?"No Content":a.conn.statusText;d.getResponseHeader=k;d.getAllResponseHeaders=c;d.responseText=a.conn.responseText;d.responseXML=a.conn.responseXML;if(h){d.argument=h;}return d;},createExceptionObject:function(h,d,a){var f=0,g="communication failure",c=-1,b="transaction aborted",e={};e.tId=h;if(a){e.status=c;e.statusText=b;}else{e.status=f;e.statusText=g;}if(d){e.argument=d;}return e;},initHeader:function(a,d,c){var b=(c)?this._default_headers:this._http_headers;b[a]=d;if(c){this._has_default_headers=true;}else{this._has_http_headers=true;}},setHeader:function(a){var b;if(this._has_default_headers){for(b in this._default_headers){if(YAHOO.lang.hasOwnProperty(this._default_headers,b)){a.conn.setRequestHeader(b,this._default_headers[b]);
 
}}}if(this._has_http_headers){for(b in this._http_headers){if(YAHOO.lang.hasOwnProperty(this._http_headers,b)){a.conn.setRequestHeader(b,this._http_headers[b]);}}this._http_headers={};this._has_http_headers=false;}},resetDefaultHeaders:function(){this._default_headers={};this._has_default_headers=false;},abort:function(e,g,a){var d,b=(g&&g.argument)?g.argument:null;e=e||{};if(e.conn){if(e.xhr){if(this.isCallInProgress(e)){e.conn.abort();window.clearInterval(this._poll[e.tId]);delete this._poll[e.tId];if(a){window.clearTimeout(this._timeOut[e.tId]);delete this._timeOut[e.tId];}d=true;}}else{if(e.xdr){e.conn.abort(e.tId);d=true;}}}else{if(e.upload){var c="yuiIO"+e.tId;var f=document.getElementById(c);if(f){YAHOO.util.Event.removeListener(f,"load");document.body.removeChild(f);if(a){window.clearTimeout(this._timeOut[e.tId]);delete this._timeOut[e.tId];}d=true;}}else{d=false;}}if(d===true){this.abortEvent.fire(e,b);if(e.abortEvent){e.abortEvent.fire(e,b);}this.handleTransactionResponse(e,g,true);}return d;},isCallInProgress:function(a){a=a||{};if(a.xhr&&a.conn){return a.conn.readyState!==4&&a.conn.readyState!==0;}else{if(a.xdr&&a.conn){return a.conn.isCallInProgress(a.tId);}else{if(a.upload===true){return document.getElementById("yuiIO"+a.tId)?true:false;}else{return false;}}}},releaseObject:function(a){if(a&&a.conn){a.conn=null;a=null;}}};(function(){var g=YAHOO.util.Connect,h={};function d(i){var j='<object id="YUIConnectionSwf" type="application/x-shockwave-flash" data="'+i+'" width="0" height="0">'+'<param name="movie" value="'+i+'">'+'<param name="allowScriptAccess" value="always">'+"</object>",k=document.createElement("div");document.body.appendChild(k);k.innerHTML=j;}function b(l,i,j,n,k){h[parseInt(l.tId)]={"o":l,"c":n};if(k){n.method=i;n.data=k;}l.conn.send(j,n,l.tId);}function e(i){d(i);g._transport=document.getElementById("YUIConnectionSwf");}function c(){g.xdrReadyEvent.fire();}function a(j,i){if(j){g.startEvent.fire(j,i.argument);if(j.startEvent){j.startEvent.fire(j,i.argument);}}}function f(j){var k=h[j.tId].o,i=h[j.tId].c;if(j.statusText==="xdr:start"){a(k,i);return;}j.responseText=decodeURI(j.responseText);k.r=j;if(i.argument){k.r.argument=i.argument;}this.handleTransactionResponse(k,i,j.statusText==="xdr:abort"?true:false);delete h[j.tId];}g.xdr=b;g.swf=d;g.transport=e;g.xdrReadyEvent=new YAHOO.util.CustomEvent("xdrReady");g.xdrReady=c;g.handleXdrResponse=f;})();(function(){var e=YAHOO.util.Connect,g=YAHOO.util.Event,a=document.documentMode?document.documentMode:false;e._isFileUpload=false;e._formNode=null;e._sFormData=null;e._submitElementValue=null;e.uploadEvent=new YAHOO.util.CustomEvent("upload");e._hasSubmitListener=function(){if(g){g.addListener(document,"click",function(k){var j=g.getTarget(k),i=j.nodeName.toLowerCase();if((i==="input"||i==="button")&&(j.type&&j.type.toLowerCase()=="submit")){e._submitElementValue=encodeURIComponent(j.name)+"="+encodeURIComponent(j.value);}});return true;}return false;}();function h(w,r,m){var v,l,u,s,z,t=false,p=[],y=0,o,q,n,x,k;this.resetFormState();if(typeof w=="string"){v=(document.getElementById(w)||document.forms[w]);}else{if(typeof w=="object"){v=w;}else{return;}}if(r){this.createFrame(m?m:null);this._isFormSubmit=true;this._isFileUpload=true;this._formNode=v;return;}for(o=0,q=v.elements.length;o<q;++o){l=v.elements[o];z=l.disabled;u=l.name;if(!z&&u){u=encodeURIComponent(u)+"=";s=encodeURIComponent(l.value);switch(l.type){case"select-one":if(l.selectedIndex>-1){k=l.options[l.selectedIndex];p[y++]=u+encodeURIComponent((k.attributes.value&&k.attributes.value.specified)?k.value:k.text);}break;case"select-multiple":if(l.selectedIndex>-1){for(n=l.selectedIndex,x=l.options.length;n<x;++n){k=l.options[n];if(k.selected){p[y++]=u+encodeURIComponent((k.attributes.value&&k.attributes.value.specified)?k.value:k.text);}}}break;case"radio":case"checkbox":if(l.checked){p[y++]=u+s;}break;case"file":case undefined:case"reset":case"button":break;case"submit":if(t===false){if(this._hasSubmitListener&&this._submitElementValue){p[y++]=this._submitElementValue;}t=true;}break;default:p[y++]=u+s;}}}this._isFormSubmit=true;this._sFormData=p.join("&");this.initHeader("Content-Type",this._default_form_header);return this._sFormData;}function d(){this._isFormSubmit=false;this._isFileUpload=false;this._formNode=null;this._sFormData="";}function c(i){var j="yuiIO"+this._transaction_id,l=(a===9)?true:false,k;if(YAHOO.env.ua.ie&&!l){k=document.createElement('<iframe id="'+j+'" name="'+j+'" />');if(typeof i=="boolean"){k.src="javascript:false";}}else{k=document.createElement("iframe");k.id=j;k.name=j;}k.style.position="absolute";k.style.top="-1000px";k.style.left="-1000px";document.body.appendChild(k);}function f(j){var m=[],k=j.split("&"),l,n;for(l=0;l<k.length;l++){n=k[l].indexOf("=");if(n!=-1){m[l]=document.createElement("input");m[l].type="hidden";m[l].name=decodeURIComponent(k[l].substring(0,n));m[l].value=decodeURIComponent(k[l].substring(n+1));this._formNode.appendChild(m[l]);}}return m;}function b(m,y,n,l){var t="yuiIO"+m.tId,u="multipart/form-data",w=document.getElementById(t),p=(a>=8)?true:false,z=this,v=(y&&y.argument)?y.argument:null,x,s,k,r,j,q;j={action:this._formNode.getAttribute("action"),method:this._formNode.getAttribute("method"),target:this._formNode.getAttribute("target")};this._formNode.setAttribute("action",n);this._formNode.setAttribute("method","POST");this._formNode.setAttribute("target",t);if(YAHOO.env.ua.ie&&!p){this._formNode.setAttribute("encoding",u);}else{this._formNode.setAttribute("enctype",u);}if(l){x=this.appendPostData(l);}this._formNode.submit();this.startEvent.fire(m,v);if(m.startEvent){m.startEvent.fire(m,v);}if(y&&y.timeout){this._timeOut[m.tId]=window.setTimeout(function(){z.abort(m,y,true);},y.timeout);}if(x&&x.length>0){for(s=0;s<x.length;s++){this._formNode.removeChild(x[s]);}}for(k in j){if(YAHOO.lang.hasOwnProperty(j,k)){if(j[k]){this._formNode.setAttribute(k,j[k]);}else{this._formNode.removeAttribute(k);}}}this.resetFormState();
 
q=function(){var i,A,B;if(y&&y.timeout){window.clearTimeout(z._timeOut[m.tId]);delete z._timeOut[m.tId];}z.completeEvent.fire(m,v);if(m.completeEvent){m.completeEvent.fire(m,v);}r={tId:m.tId,argument:v};try{i=w.contentWindow.document.getElementsByTagName("body")[0];A=w.contentWindow.document.getElementsByTagName("pre")[0];if(i){if(A){B=A.textContent?A.textContent:A.innerText;}else{B=i.textContent?i.textContent:i.innerText;}}r.responseText=B;r.responseXML=w.contentWindow.document.XMLDocument?w.contentWindow.document.XMLDocument:w.contentWindow.document;}catch(o){}if(y&&y.upload){if(!y.scope){y.upload(r);}else{y.upload.apply(y.scope,[r]);}}z.uploadEvent.fire(r);if(m.uploadEvent){m.uploadEvent.fire(r);}g.removeListener(w,"load",q);setTimeout(function(){document.body.removeChild(w);z.releaseObject(m);},100);};g.addListener(w,"load",q);}e.setForm=h;e.resetFormState=d;e.createFrame=c;e.appendPostData=f;e.uploadFile=b;})();YAHOO.register("connection",YAHOO.util.Connect,{version:"2.9.0",build:"2800"});(function(){var b=YAHOO.util;var a=function(d,c,e,f){if(!d){}this.init(d,c,e,f);};a.NAME="Anim";a.prototype={toString:function(){var c=this.getEl()||{};var d=c.id||c.tagName;return(this.constructor.NAME+": "+d);},patterns:{noNegatives:/width|height|opacity|padding/i,offsetAttribute:/^((width|height)|(top|left))$/,defaultUnit:/width|height|top$|bottom$|left$|right$/i,offsetUnit:/\d+(em|%|en|ex|pt|in|cm|mm|pc)$/i},doMethod:function(c,e,d){return this.method(this.currentFrame,e,d-e,this.totalFrames);},setAttribute:function(c,f,e){var d=this.getEl();if(this.patterns.noNegatives.test(c)){f=(f>0)?f:0;}if(c in d&&!("style" in d&&c in d.style)){d[c]=f;}else{b.Dom.setStyle(d,c,f+e);}},getAttribute:function(c){var e=this.getEl();var g=b.Dom.getStyle(e,c);if(g!=="auto"&&!this.patterns.offsetUnit.test(g)){return parseFloat(g);}var d=this.patterns.offsetAttribute.exec(c)||[];var h=!!(d[3]);var f=!!(d[2]);if("style" in e){if(f||(b.Dom.getStyle(e,"position")=="absolute"&&h)){g=e["offset"+d[0].charAt(0).toUpperCase()+d[0].substr(1)];}else{g=0;}}else{if(c in e){g=e[c];}}return g;},getDefaultUnit:function(c){if(this.patterns.defaultUnit.test(c)){return"px";}return"";},setRuntimeAttribute:function(d){var j;var e;var f=this.attributes;this.runtimeAttributes[d]={};var h=function(i){return(typeof i!=="undefined");};if(!h(f[d]["to"])&&!h(f[d]["by"])){return false;}j=(h(f[d]["from"]))?f[d]["from"]:this.getAttribute(d);if(h(f[d]["to"])){e=f[d]["to"];}else{if(h(f[d]["by"])){if(j.constructor==Array){e=[];for(var g=0,c=j.length;g<c;++g){e[g]=j[g]+f[d]["by"][g]*1;}}else{e=j+f[d]["by"]*1;}}}this.runtimeAttributes[d].start=j;this.runtimeAttributes[d].end=e;this.runtimeAttributes[d].unit=(h(f[d].unit))?f[d]["unit"]:this.getDefaultUnit(d);return true;},init:function(f,c,h,i){var d=false;var e=null;var g=0;f=b.Dom.get(f);this.attributes=c||{};this.duration=!YAHOO.lang.isUndefined(h)?h:1;this.method=i||b.Easing.easeNone;this.useSeconds=true;this.currentFrame=0;this.totalFrames=b.AnimMgr.fps;this.setEl=function(j){f=b.Dom.get(j);};this.getEl=function(){return f;};this.isAnimated=function(){return d;};this.getStartTime=function(){return e;};this.runtimeAttributes={};this.animate=function(){if(this.isAnimated()){return false;}this.currentFrame=0;this.totalFrames=(this.useSeconds)?Math.ceil(b.AnimMgr.fps*this.duration):this.duration;if(this.duration===0&&this.useSeconds){this.totalFrames=1;}b.AnimMgr.registerElement(this);return true;};this.stop=function(j){if(!this.isAnimated()){return false;}if(j){this.currentFrame=this.totalFrames;this._onTween.fire();}b.AnimMgr.stop(this);};this._handleStart=function(){this.onStart.fire();this.runtimeAttributes={};for(var j in this.attributes){if(this.attributes.hasOwnProperty(j)){this.setRuntimeAttribute(j);}}d=true;g=0;e=new Date();};this._handleTween=function(){var l={duration:new Date()-this.getStartTime(),currentFrame:this.currentFrame};l.toString=function(){return("duration: "+l.duration+", currentFrame: "+l.currentFrame);};this.onTween.fire(l);var k=this.runtimeAttributes;for(var j in k){if(k.hasOwnProperty(j)){this.setAttribute(j,this.doMethod(j,k[j].start,k[j].end),k[j].unit);}}this.afterTween.fire(l);g+=1;};this._handleComplete=function(){var j=(new Date()-e)/1000;var k={duration:j,frames:g,fps:g/j};k.toString=function(){return("duration: "+k.duration+", frames: "+k.frames+", fps: "+k.fps);};d=false;g=0;this.onComplete.fire(k);};this._onStart=new b.CustomEvent("_start",this,true);this.onStart=new b.CustomEvent("start",this);this.onTween=new b.CustomEvent("tween",this);this.afterTween=new b.CustomEvent("afterTween",this);this._onTween=new b.CustomEvent("_tween",this,true);this.onComplete=new b.CustomEvent("complete",this);this._onComplete=new b.CustomEvent("_complete",this,true);this._onStart.subscribe(this._handleStart);this._onTween.subscribe(this._handleTween);this._onComplete.subscribe(this._handleComplete);}};b.Anim=a;})();YAHOO.util.AnimMgr=new function(){var e=null;var c=[];var g=0;this.fps=1000;this.delay=20;this.registerElement=function(j){c[c.length]=j;g+=1;j._onStart.fire();this.start();};var f=[];var d=false;var h=function(){var j=f.shift();b.apply(YAHOO.util.AnimMgr,j);if(f.length){arguments.callee();}};var b=function(k,j){j=j||a(k);if(!k.isAnimated()||j===-1){return false;}k._onComplete.fire();c.splice(j,1);g-=1;if(g<=0){this.stop();}return true;};this.unRegister=function(){f.push(arguments);if(!d){d=true;h();d=false;}};this.start=function(){if(e===null){e=setInterval(this.run,this.delay);}};this.stop=function(l){if(!l){clearInterval(e);for(var k=0,j=c.length;k<j;++k){this.unRegister(c[0],0);}c=[];e=null;g=0;}else{this.unRegister(l);}};this.run=function(){for(var l=0,j=c.length;l<j;++l){var k=c[l];if(!k||!k.isAnimated()){continue;}if(k.currentFrame<k.totalFrames||k.totalFrames===null){k.currentFrame+=1;if(k.useSeconds){i(k);}k._onTween.fire();}else{YAHOO.util.AnimMgr.stop(k,l);}}};var a=function(l){for(var k=0,j=c.length;k<j;++k){if(c[k]===l){return k;}}return -1;};var i=function(k){var n=k.totalFrames;var m=k.currentFrame;var l=(k.currentFrame*k.duration*1000/k.totalFrames);var j=(new Date()-k.getStartTime());var o=0;if(j<k.duration*1000){o=Math.round((j/l-1)*k.currentFrame);}else{o=n-(m+1);}if(o>0&&isFinite(o)){if(k.currentFrame+o>=n){o=n-(m+1);}k.currentFrame+=o;}};this._queue=c;this._getIndex=a;};YAHOO.util.Bezier=new function(){this.getPosition=function(e,d){var f=e.length;var c=[];for(var b=0;b<f;++b){c[b]=[e[b][0],e[b][1]];}for(var a=1;a<f;++a){for(b=0;b<f-a;++b){c[b][0]=(1-d)*c[b][0]+d*c[parseInt(b+1,10)][0];c[b][1]=(1-d)*c[b][1]+d*c[parseInt(b+1,10)][1];}}return[c[0][0],c[0][1]];};};(function(){var a=function(f,e,g,h){a.superclass.constructor.call(this,f,e,g,h);};a.NAME="ColorAnim";a.DEFAULT_BGCOLOR="#fff";var c=YAHOO.util;YAHOO.extend(a,c.Anim);var d=a.superclass;var b=a.prototype;b.patterns.color=/color$/i;b.patterns.rgb=/^rgb\(([0-9]+)\s*,\s*([0-9]+)\s*,\s*([0-9]+)\)$/i;b.patterns.hex=/^#?([0-9A-F]{2})([0-9A-F]{2})([0-9A-F]{2})$/i;b.patterns.hex3=/^#?([0-9A-F]{1})([0-9A-F]{1})([0-9A-F]{1})$/i;
 
b.patterns.transparent=/^transparent|rgba\(0, 0, 0, 0\)$/;b.parseColor=function(e){if(e.length==3){return e;}var f=this.patterns.hex.exec(e);if(f&&f.length==4){return[parseInt(f[1],16),parseInt(f[2],16),parseInt(f[3],16)];}f=this.patterns.rgb.exec(e);if(f&&f.length==4){return[parseInt(f[1],10),parseInt(f[2],10),parseInt(f[3],10)];}f=this.patterns.hex3.exec(e);if(f&&f.length==4){return[parseInt(f[1]+f[1],16),parseInt(f[2]+f[2],16),parseInt(f[3]+f[3],16)];}return null;};b.getAttribute=function(e){var g=this.getEl();if(this.patterns.color.test(e)){var i=YAHOO.util.Dom.getStyle(g,e);var h=this;if(this.patterns.transparent.test(i)){var f=YAHOO.util.Dom.getAncestorBy(g,function(j){return !h.patterns.transparent.test(i);});if(f){i=c.Dom.getStyle(f,e);}else{i=a.DEFAULT_BGCOLOR;}}}else{i=d.getAttribute.call(this,e);}return i;};b.doMethod=function(f,k,g){var j;if(this.patterns.color.test(f)){j=[];for(var h=0,e=k.length;h<e;++h){j[h]=d.doMethod.call(this,f,k[h],g[h]);}j="rgb("+Math.floor(j[0])+","+Math.floor(j[1])+","+Math.floor(j[2])+")";}else{j=d.doMethod.call(this,f,k,g);}return j;};b.setRuntimeAttribute=function(f){d.setRuntimeAttribute.call(this,f);if(this.patterns.color.test(f)){var h=this.attributes;var k=this.parseColor(this.runtimeAttributes[f].start);var g=this.parseColor(this.runtimeAttributes[f].end);if(typeof h[f]["to"]==="undefined"&&typeof h[f]["by"]!=="undefined"){g=this.parseColor(h[f].by);for(var j=0,e=k.length;j<e;++j){g[j]=k[j]+g[j];}}this.runtimeAttributes[f].start=k;this.runtimeAttributes[f].end=g;}};c.ColorAnim=a;})();
 
/*!
 
TERMS OF USE - EASING EQUATIONS
 
Open source under the BSD License.
 
Copyright 2001 Robert Penner All rights reserved.
 

	
 
Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
 

	
 
 * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
 
 * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
 
 * Neither the name of the author nor the names of contributors may be used to endorse or promote products derived from this software without specific prior written permission.
 

	
 
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
*/
 
YAHOO.util.Easing={easeNone:function(e,a,g,f){return g*e/f+a;},easeIn:function(e,a,g,f){return g*(e/=f)*e+a;},easeOut:function(e,a,g,f){return -g*(e/=f)*(e-2)+a;},easeBoth:function(e,a,g,f){if((e/=f/2)<1){return g/2*e*e+a;}return -g/2*((--e)*(e-2)-1)+a;},easeInStrong:function(e,a,g,f){return g*(e/=f)*e*e*e+a;},easeOutStrong:function(e,a,g,f){return -g*((e=e/f-1)*e*e*e-1)+a;},easeBothStrong:function(e,a,g,f){if((e/=f/2)<1){return g/2*e*e*e*e+a;}return -g/2*((e-=2)*e*e*e-2)+a;},elasticIn:function(g,e,k,j,f,i){if(g==0){return e;}if((g/=j)==1){return e+k;}if(!i){i=j*0.3;}if(!f||f<Math.abs(k)){f=k;var h=i/4;}else{var h=i/(2*Math.PI)*Math.asin(k/f);}return -(f*Math.pow(2,10*(g-=1))*Math.sin((g*j-h)*(2*Math.PI)/i))+e;},elasticOut:function(g,e,k,j,f,i){if(g==0){return e;}if((g/=j)==1){return e+k;}if(!i){i=j*0.3;}if(!f||f<Math.abs(k)){f=k;var h=i/4;}else{var h=i/(2*Math.PI)*Math.asin(k/f);}return f*Math.pow(2,-10*g)*Math.sin((g*j-h)*(2*Math.PI)/i)+k+e;},elasticBoth:function(g,e,k,j,f,i){if(g==0){return e;}if((g/=j/2)==2){return e+k;}if(!i){i=j*(0.3*1.5);}if(!f||f<Math.abs(k)){f=k;var h=i/4;}else{var h=i/(2*Math.PI)*Math.asin(k/f);}if(g<1){return -0.5*(f*Math.pow(2,10*(g-=1))*Math.sin((g*j-h)*(2*Math.PI)/i))+e;}return f*Math.pow(2,-10*(g-=1))*Math.sin((g*j-h)*(2*Math.PI)/i)*0.5+k+e;},backIn:function(e,a,h,g,f){if(typeof f=="undefined"){f=1.70158;}return h*(e/=g)*e*((f+1)*e-f)+a;},backOut:function(e,a,h,g,f){if(typeof f=="undefined"){f=1.70158;}return h*((e=e/g-1)*e*((f+1)*e+f)+1)+a;},backBoth:function(e,a,h,g,f){if(typeof f=="undefined"){f=1.70158;}if((e/=g/2)<1){return h/2*(e*e*(((f*=(1.525))+1)*e-f))+a;}return h/2*((e-=2)*e*(((f*=(1.525))+1)*e+f)+2)+a;},bounceIn:function(e,a,g,f){return g-YAHOO.util.Easing.bounceOut(f-e,0,g,f)+a;},bounceOut:function(e,a,g,f){if((e/=f)<(1/2.75)){return g*(7.5625*e*e)+a;}else{if(e<(2/2.75)){return g*(7.5625*(e-=(1.5/2.75))*e+0.75)+a;}else{if(e<(2.5/2.75)){return g*(7.5625*(e-=(2.25/2.75))*e+0.9375)+a;}}}return g*(7.5625*(e-=(2.625/2.75))*e+0.984375)+a;},bounceBoth:function(e,a,g,f){if(e<f/2){return YAHOO.util.Easing.bounceIn(e*2,0,g,f)*0.5+a;}return YAHOO.util.Easing.bounceOut(e*2-f,0,g,f)*0.5+g*0.5+a;}};(function(){var a=function(h,g,i,j){if(h){a.superclass.constructor.call(this,h,g,i,j);}};a.NAME="Motion";var e=YAHOO.util;YAHOO.extend(a,e.ColorAnim);var f=a.superclass;var c=a.prototype;c.patterns.points=/^points$/i;c.setAttribute=function(g,i,h){if(this.patterns.points.test(g)){h=h||"px";f.setAttribute.call(this,"left",i[0],h);f.setAttribute.call(this,"top",i[1],h);}else{f.setAttribute.call(this,g,i,h);}};c.getAttribute=function(g){if(this.patterns.points.test(g)){var h=[f.getAttribute.call(this,"left"),f.getAttribute.call(this,"top")];}else{h=f.getAttribute.call(this,g);}return h;};c.doMethod=function(g,k,h){var j=null;if(this.patterns.points.test(g)){var i=this.method(this.currentFrame,0,100,this.totalFrames)/100;j=e.Bezier.getPosition(this.runtimeAttributes[g],i);
 
}else{j=f.doMethod.call(this,g,k,h);}return j;};c.setRuntimeAttribute=function(q){if(this.patterns.points.test(q)){var h=this.getEl();var k=this.attributes;var g;var m=k["points"]["control"]||[];var j;var n,p;if(m.length>0&&!(m[0] instanceof Array)){m=[m];}else{var l=[];for(n=0,p=m.length;n<p;++n){l[n]=m[n];}m=l;}if(e.Dom.getStyle(h,"position")=="static"){e.Dom.setStyle(h,"position","relative");}if(d(k["points"]["from"])){e.Dom.setXY(h,k["points"]["from"]);}else{e.Dom.setXY(h,e.Dom.getXY(h));}g=this.getAttribute("points");if(d(k["points"]["to"])){j=b.call(this,k["points"]["to"],g);var o=e.Dom.getXY(this.getEl());for(n=0,p=m.length;n<p;++n){m[n]=b.call(this,m[n],g);}}else{if(d(k["points"]["by"])){j=[g[0]+k["points"]["by"][0],g[1]+k["points"]["by"][1]];for(n=0,p=m.length;n<p;++n){m[n]=[g[0]+m[n][0],g[1]+m[n][1]];}}}this.runtimeAttributes[q]=[g];if(m.length>0){this.runtimeAttributes[q]=this.runtimeAttributes[q].concat(m);}this.runtimeAttributes[q][this.runtimeAttributes[q].length]=j;}else{f.setRuntimeAttribute.call(this,q);}};var b=function(g,i){var h=e.Dom.getXY(this.getEl());g=[g[0]-h[0]+i[0],g[1]-h[1]+i[1]];return g;};var d=function(g){return(typeof g!=="undefined");};e.Motion=a;})();(function(){var d=function(f,e,g,h){if(f){d.superclass.constructor.call(this,f,e,g,h);}};d.NAME="Scroll";var b=YAHOO.util;YAHOO.extend(d,b.ColorAnim);var c=d.superclass;var a=d.prototype;a.doMethod=function(e,h,f){var g=null;if(e=="scroll"){g=[this.method(this.currentFrame,h[0],f[0]-h[0],this.totalFrames),this.method(this.currentFrame,h[1],f[1]-h[1],this.totalFrames)];}else{g=c.doMethod.call(this,e,h,f);}return g;};a.getAttribute=function(e){var g=null;var f=this.getEl();if(e=="scroll"){g=[f.scrollLeft,f.scrollTop];}else{g=c.getAttribute.call(this,e);}return g;};a.setAttribute=function(e,h,g){var f=this.getEl();if(e=="scroll"){f.scrollLeft=h[0];f.scrollTop=h[1];}else{c.setAttribute.call(this,e,h,g);}};b.Scroll=d;})();YAHOO.register("animation",YAHOO.util.Anim,{version:"2.9.0",build:"2800"});if(!YAHOO.util.DragDropMgr){YAHOO.util.DragDropMgr=function(){var A=YAHOO.util.Event,B=YAHOO.util.Dom;return{useShim:false,_shimActive:false,_shimState:false,_debugShim:false,_createShim:function(){var C=document.createElement("div");C.id="yui-ddm-shim";if(document.body.firstChild){document.body.insertBefore(C,document.body.firstChild);}else{document.body.appendChild(C);}C.style.display="none";C.style.backgroundColor="red";C.style.position="absolute";C.style.zIndex="99999";B.setStyle(C,"opacity","0");this._shim=C;A.on(C,"mouseup",this.handleMouseUp,this,true);A.on(C,"mousemove",this.handleMouseMove,this,true);A.on(window,"scroll",this._sizeShim,this,true);},_sizeShim:function(){if(this._shimActive){var C=this._shim;C.style.height=B.getDocumentHeight()+"px";C.style.width=B.getDocumentWidth()+"px";C.style.top="0";C.style.left="0";}},_activateShim:function(){if(this.useShim){if(!this._shim){this._createShim();}this._shimActive=true;var C=this._shim,D="0";if(this._debugShim){D=".5";}B.setStyle(C,"opacity",D);this._sizeShim();C.style.display="block";}},_deactivateShim:function(){this._shim.style.display="none";this._shimActive=false;},_shim:null,ids:{},handleIds:{},dragCurrent:null,dragOvers:{},deltaX:0,deltaY:0,preventDefault:true,stopPropagation:true,initialized:false,locked:false,interactionInfo:null,init:function(){this.initialized=true;},POINT:0,INTERSECT:1,STRICT_INTERSECT:2,mode:0,_execOnAll:function(E,D){for(var F in this.ids){for(var C in this.ids[F]){var G=this.ids[F][C];if(!this.isTypeOfDD(G)){continue;}G[E].apply(G,D);}}},_onLoad:function(){this.init();A.on(document,"mouseup",this.handleMouseUp,this,true);A.on(document,"mousemove",this.handleMouseMove,this,true);A.on(window,"unload",this._onUnload,this,true);A.on(window,"resize",this._onResize,this,true);},_onResize:function(C){this._execOnAll("resetConstraints",[]);},lock:function(){this.locked=true;},unlock:function(){this.locked=false;},isLocked:function(){return this.locked;},locationCache:{},useCache:true,clickPixelThresh:3,clickTimeThresh:1000,dragThreshMet:false,clickTimeout:null,startX:0,startY:0,fromTimeout:false,regDragDrop:function(D,C){if(!this.initialized){this.init();}if(!this.ids[C]){this.ids[C]={};}this.ids[C][D.id]=D;},removeDDFromGroup:function(E,C){if(!this.ids[C]){this.ids[C]={};}var D=this.ids[C];if(D&&D[E.id]){delete D[E.id];}},_remove:function(E){for(var D in E.groups){if(D){var C=this.ids[D];if(C&&C[E.id]){delete C[E.id];}}}delete this.handleIds[E.id];},regHandle:function(D,C){if(!this.handleIds[D]){this.handleIds[D]={};}this.handleIds[D][C]=C;},isDragDrop:function(C){return(this.getDDById(C))?true:false;},getRelated:function(H,D){var G=[];for(var F in H.groups){for(var E in this.ids[F]){var C=this.ids[F][E];if(!this.isTypeOfDD(C)){continue;}if(!D||C.isTarget){G[G.length]=C;}}}return G;},isLegalTarget:function(G,F){var D=this.getRelated(G,true);for(var E=0,C=D.length;E<C;++E){if(D[E].id==F.id){return true;}}return false;},isTypeOfDD:function(C){return(C&&C.__ygDragDrop);},isHandle:function(D,C){return(this.handleIds[D]&&this.handleIds[D][C]);},getDDById:function(D){for(var C in this.ids){if(this.ids[C][D]){return this.ids[C][D];}}return null;},handleMouseDown:function(E,D){this.currentTarget=YAHOO.util.Event.getTarget(E);this.dragCurrent=D;var C=D.getEl();this.startX=YAHOO.util.Event.getPageX(E);this.startY=YAHOO.util.Event.getPageY(E);this.deltaX=this.startX-C.offsetLeft;this.deltaY=this.startY-C.offsetTop;this.dragThreshMet=false;this.clickTimeout=setTimeout(function(){var F=YAHOO.util.DDM;F.startDrag(F.startX,F.startY);F.fromTimeout=true;},this.clickTimeThresh);},startDrag:function(C,E){if(this.dragCurrent&&this.dragCurrent.useShim){this._shimState=this.useShim;this.useShim=true;}this._activateShim();clearTimeout(this.clickTimeout);var D=this.dragCurrent;if(D&&D.events.b4StartDrag){D.b4StartDrag(C,E);D.fireEvent("b4StartDragEvent",{x:C,y:E});}if(D&&D.events.startDrag){D.startDrag(C,E);D.fireEvent("startDragEvent",{x:C,y:E});}this.dragThreshMet=true;},handleMouseUp:function(C){if(this.dragCurrent){clearTimeout(this.clickTimeout);if(this.dragThreshMet){if(this.fromTimeout){this.fromTimeout=false;this.handleMouseMove(C);}this.fromTimeout=false;this.fireEvents(C,true);}else{}this.stopDrag(C);this.stopEvent(C);}},stopEvent:function(C){if(this.stopPropagation){YAHOO.util.Event.stopPropagation(C);}if(this.preventDefault){YAHOO.util.Event.preventDefault(C);}},stopDrag:function(E,D){var C=this.dragCurrent;if(C&&!D){if(this.dragThreshMet){if(C.events.b4EndDrag){C.b4EndDrag(E);C.fireEvent("b4EndDragEvent",{e:E});}if(C.events.endDrag){C.endDrag(E);C.fireEvent("endDragEvent",{e:E});}}if(C.events.mouseUp){C.onMouseUp(E);C.fireEvent("mouseUpEvent",{e:E});}}if(this._shimActive){this._deactivateShim();if(this.dragCurrent&&this.dragCurrent.useShim){this.useShim=this._shimState;this._shimState=false;}}this.dragCurrent=null;this.dragOvers={};},handleMouseMove:function(F){var C=this.dragCurrent;if(C){if(YAHOO.env.ua.ie&&(YAHOO.env.ua.ie<9)&&!F.button){this.stopEvent(F);return this.handleMouseUp(F);}else{if(F.clientX<0||F.clientY<0){}}if(!this.dragThreshMet){var E=Math.abs(this.startX-YAHOO.util.Event.getPageX(F));var D=Math.abs(this.startY-YAHOO.util.Event.getPageY(F));if(E>this.clickPixelThresh||D>this.clickPixelThresh){this.startDrag(this.startX,this.startY);}}if(this.dragThreshMet){if(C&&C.events.b4Drag){C.b4Drag(F);C.fireEvent("b4DragEvent",{e:F});}if(C&&C.events.drag){C.onDrag(F);C.fireEvent("dragEvent",{e:F});}if(C){this.fireEvents(F,false);}}this.stopEvent(F);}},fireEvents:function(W,M){var c=this.dragCurrent;if(!c||c.isLocked()||c.dragOnly){return;}var O=YAHOO.util.Event.getPageX(W),N=YAHOO.util.Event.getPageY(W),Q=new YAHOO.util.Point(O,N),K=c.getTargetCoord(Q.x,Q.y),F=c.getDragEl(),E=["out","over","drop","enter"],V=new YAHOO.util.Region(K.y,K.x+F.offsetWidth,K.y+F.offsetHeight,K.x),I=[],D={},L={},R=[],d={outEvts:[],overEvts:[],dropEvts:[],enterEvts:[]};for(var T in this.dragOvers){var f=this.dragOvers[T];if(!this.isTypeOfDD(f)){continue;
 
}if(!this.isOverTarget(Q,f,this.mode,V)){d.outEvts.push(f);}I[T]=true;delete this.dragOvers[T];}for(var S in c.groups){if("string"!=typeof S){continue;}for(T in this.ids[S]){var G=this.ids[S][T];if(!this.isTypeOfDD(G)){continue;}if(G.isTarget&&!G.isLocked()&&G!=c){if(this.isOverTarget(Q,G,this.mode,V)){D[S]=true;if(M){d.dropEvts.push(G);}else{if(!I[G.id]){d.enterEvts.push(G);}else{d.overEvts.push(G);}this.dragOvers[G.id]=G;}}}}}this.interactionInfo={out:d.outEvts,enter:d.enterEvts,over:d.overEvts,drop:d.dropEvts,point:Q,draggedRegion:V,sourceRegion:this.locationCache[c.id],validDrop:M};for(var C in D){R.push(C);}if(M&&!d.dropEvts.length){this.interactionInfo.validDrop=false;if(c.events.invalidDrop){c.onInvalidDrop(W);c.fireEvent("invalidDropEvent",{e:W});}}for(T=0;T<E.length;T++){var Z=null;if(d[E[T]+"Evts"]){Z=d[E[T]+"Evts"];}if(Z&&Z.length){var H=E[T].charAt(0).toUpperCase()+E[T].substr(1),Y="onDrag"+H,J="b4Drag"+H,P="drag"+H+"Event",X="drag"+H;if(this.mode){if(c.events[J]){c[J](W,Z,R);L[Y]=c.fireEvent(J+"Event",{event:W,info:Z,group:R});}if(c.events[X]&&(L[Y]!==false)){c[Y](W,Z,R);c.fireEvent(P,{event:W,info:Z,group:R});}}else{for(var a=0,U=Z.length;a<U;++a){if(c.events[J]){c[J](W,Z[a].id,R[0]);L[Y]=c.fireEvent(J+"Event",{event:W,info:Z[a].id,group:R[0]});}if(c.events[X]&&(L[Y]!==false)){c[Y](W,Z[a].id,R[0]);c.fireEvent(P,{event:W,info:Z[a].id,group:R[0]});}}}}}},getBestMatch:function(E){var G=null;var D=E.length;if(D==1){G=E[0];}else{for(var F=0;F<D;++F){var C=E[F];if(this.mode==this.INTERSECT&&C.cursorIsOver){G=C;break;}else{if(!G||!G.overlap||(C.overlap&&G.overlap.getArea()<C.overlap.getArea())){G=C;}}}}return G;},refreshCache:function(D){var F=D||this.ids;for(var C in F){if("string"!=typeof C){continue;}for(var E in this.ids[C]){var G=this.ids[C][E];if(this.isTypeOfDD(G)){var H=this.getLocation(G);if(H){this.locationCache[G.id]=H;}else{delete this.locationCache[G.id];}}}}},verifyEl:function(D){try{if(D){var C=D.offsetParent;if(C){return true;}}}catch(E){}return false;},getLocation:function(H){if(!this.isTypeOfDD(H)){return null;}var F=H.getEl(),K,E,D,M,L,N,C,J,G;try{K=YAHOO.util.Dom.getXY(F);}catch(I){}if(!K){return null;}E=K[0];D=E+F.offsetWidth;M=K[1];L=M+F.offsetHeight;N=M-H.padding[0];C=D+H.padding[1];J=L+H.padding[2];G=E-H.padding[3];return new YAHOO.util.Region(N,C,J,G);},isOverTarget:function(K,C,E,F){var G=this.locationCache[C.id];if(!G||!this.useCache){G=this.getLocation(C);this.locationCache[C.id]=G;}if(!G){return false;}C.cursorIsOver=G.contains(K);var J=this.dragCurrent;if(!J||(!E&&!J.constrainX&&!J.constrainY)){return C.cursorIsOver;}C.overlap=null;if(!F){var H=J.getTargetCoord(K.x,K.y);var D=J.getDragEl();F=new YAHOO.util.Region(H.y,H.x+D.offsetWidth,H.y+D.offsetHeight,H.x);}var I=F.intersect(G);if(I){C.overlap=I;return(E)?true:C.cursorIsOver;}else{return false;}},_onUnload:function(D,C){this.unregAll();},unregAll:function(){if(this.dragCurrent){this.stopDrag();this.dragCurrent=null;}this._execOnAll("unreg",[]);this.ids={};},elementCache:{},getElWrapper:function(D){var C=this.elementCache[D];if(!C||!C.el){C=this.elementCache[D]=new this.ElementWrapper(YAHOO.util.Dom.get(D));}return C;},getElement:function(C){return YAHOO.util.Dom.get(C);},getCss:function(D){var C=YAHOO.util.Dom.get(D);return(C)?C.style:null;},ElementWrapper:function(C){this.el=C||null;this.id=this.el&&C.id;this.css=this.el&&C.style;},getPosX:function(C){return YAHOO.util.Dom.getX(C);},getPosY:function(C){return YAHOO.util.Dom.getY(C);},swapNode:function(E,C){if(E.swapNode){E.swapNode(C);}else{var F=C.parentNode;var D=C.nextSibling;if(D==E){F.insertBefore(E,C);}else{if(C==E.nextSibling){F.insertBefore(C,E);}else{E.parentNode.replaceChild(C,E);F.insertBefore(E,D);}}}},getScroll:function(){var E,C,F=document.documentElement,D=document.body;if(F&&(F.scrollTop||F.scrollLeft)){E=F.scrollTop;C=F.scrollLeft;}else{if(D){E=D.scrollTop;C=D.scrollLeft;}else{}}return{top:E,left:C};},getStyle:function(D,C){return YAHOO.util.Dom.getStyle(D,C);},getScrollTop:function(){return this.getScroll().top;},getScrollLeft:function(){return this.getScroll().left;},moveToEl:function(C,E){var D=YAHOO.util.Dom.getXY(E);YAHOO.util.Dom.setXY(C,D);},getClientHeight:function(){return YAHOO.util.Dom.getViewportHeight();},getClientWidth:function(){return YAHOO.util.Dom.getViewportWidth();},numericSort:function(D,C){return(D-C);},_timeoutCount:0,_addListeners:function(){var C=YAHOO.util.DDM;if(YAHOO.util.Event&&document){C._onLoad();}else{if(C._timeoutCount>2000){}else{setTimeout(C._addListeners,10);if(document&&document.body){C._timeoutCount+=1;}}}},handleWasClicked:function(C,E){if(this.isHandle(E,C.id)){return true;}else{var D=C.parentNode;while(D){if(this.isHandle(E,D.id)){return true;}else{D=D.parentNode;}}}return false;}};}();YAHOO.util.DDM=YAHOO.util.DragDropMgr;YAHOO.util.DDM._addListeners();}(function(){var A=YAHOO.util.Event;var B=YAHOO.util.Dom;YAHOO.util.DragDrop=function(E,C,D){if(E){this.init(E,C,D);}};YAHOO.util.DragDrop.prototype={events:null,on:function(){this.subscribe.apply(this,arguments);},id:null,config:null,dragElId:null,handleElId:null,invalidHandleTypes:null,invalidHandleIds:null,invalidHandleClasses:null,startPageX:0,startPageY:0,groups:null,locked:false,lock:function(){this.locked=true;},unlock:function(){this.locked=false;},isTarget:true,padding:null,dragOnly:false,useShim:false,_domRef:null,__ygDragDrop:true,constrainX:false,constrainY:false,minX:0,maxX:0,minY:0,maxY:0,deltaX:0,deltaY:0,maintainOffset:false,xTicks:null,yTicks:null,primaryButtonOnly:true,available:false,hasOuterHandles:false,cursorIsOver:false,overlap:null,b4StartDrag:function(C,D){},startDrag:function(C,D){},b4Drag:function(C){},onDrag:function(C){},onDragEnter:function(C,D){},b4DragOver:function(C){},onDragOver:function(C,D){},b4DragOut:function(C){},onDragOut:function(C,D){},b4DragDrop:function(C){},onDragDrop:function(C,D){},onInvalidDrop:function(C){},b4EndDrag:function(C){},endDrag:function(C){},b4MouseDown:function(C){},onMouseDown:function(C){},onMouseUp:function(C){},onAvailable:function(){},getEl:function(){if(!this._domRef){this._domRef=B.get(this.id);
 
}return this._domRef;},getDragEl:function(){return B.get(this.dragElId);},init:function(F,C,D){this.initTarget(F,C,D);A.on(this._domRef||this.id,"mousedown",this.handleMouseDown,this,true);for(var E in this.events){this.createEvent(E+"Event");}},initTarget:function(E,C,D){this.config=D||{};this.events={};this.DDM=YAHOO.util.DDM;this.groups={};if(typeof E!=="string"){this._domRef=E;E=B.generateId(E);}this.id=E;this.addToGroup((C)?C:"default");this.handleElId=E;A.onAvailable(E,this.handleOnAvailable,this,true);this.setDragElId(E);this.invalidHandleTypes={A:"A"};this.invalidHandleIds={};this.invalidHandleClasses=[];this.applyConfig();},applyConfig:function(){this.events={mouseDown:true,b4MouseDown:true,mouseUp:true,b4StartDrag:true,startDrag:true,b4EndDrag:true,endDrag:true,drag:true,b4Drag:true,invalidDrop:true,b4DragOut:true,dragOut:true,dragEnter:true,b4DragOver:true,dragOver:true,b4DragDrop:true,dragDrop:true};if(this.config.events){for(var C in this.config.events){if(this.config.events[C]===false){this.events[C]=false;}}}this.padding=this.config.padding||[0,0,0,0];this.isTarget=(this.config.isTarget!==false);this.maintainOffset=(this.config.maintainOffset);this.primaryButtonOnly=(this.config.primaryButtonOnly!==false);this.dragOnly=((this.config.dragOnly===true)?true:false);this.useShim=((this.config.useShim===true)?true:false);},handleOnAvailable:function(){this.available=true;this.resetConstraints();this.onAvailable();},setPadding:function(E,C,F,D){if(!C&&0!==C){this.padding=[E,E,E,E];}else{if(!F&&0!==F){this.padding=[E,C,E,C];}else{this.padding=[E,C,F,D];}}},setInitPosition:function(F,E){var G=this.getEl();if(!this.DDM.verifyEl(G)){if(G&&G.style&&(G.style.display=="none")){}else{}return;}var D=F||0;var C=E||0;var H=B.getXY(G);this.initPageX=H[0]-D;this.initPageY=H[1]-C;this.lastPageX=H[0];this.lastPageY=H[1];this.setStartPosition(H);},setStartPosition:function(D){var C=D||B.getXY(this.getEl());this.deltaSetXY=null;this.startPageX=C[0];this.startPageY=C[1];},addToGroup:function(C){this.groups[C]=true;this.DDM.regDragDrop(this,C);},removeFromGroup:function(C){if(this.groups[C]){delete this.groups[C];}this.DDM.removeDDFromGroup(this,C);},setDragElId:function(C){this.dragElId=C;},setHandleElId:function(C){if(typeof C!=="string"){C=B.generateId(C);}this.handleElId=C;this.DDM.regHandle(this.id,C);},setOuterHandleElId:function(C){if(typeof C!=="string"){C=B.generateId(C);}A.on(C,"mousedown",this.handleMouseDown,this,true);this.setHandleElId(C);this.hasOuterHandles=true;},unreg:function(){A.removeListener(this.id,"mousedown",this.handleMouseDown);this._domRef=null;this.DDM._remove(this);},isLocked:function(){return(this.DDM.isLocked()||this.locked);},handleMouseDown:function(J,I){var D=J.which||J.button;if(this.primaryButtonOnly&&D>1){return;}if(this.isLocked()){return;}var C=this.b4MouseDown(J),F=true;if(this.events.b4MouseDown){F=this.fireEvent("b4MouseDownEvent",J);}var E=this.onMouseDown(J),H=true;if(this.events.mouseDown){if(E===false){H=false;}else{H=this.fireEvent("mouseDownEvent",J);}}if((C===false)||(E===false)||(F===false)||(H===false)){return;}this.DDM.refreshCache(this.groups);var G=new YAHOO.util.Point(A.getPageX(J),A.getPageY(J));if(!this.hasOuterHandles&&!this.DDM.isOverTarget(G,this)){}else{if(this.clickValidator(J)){this.setStartPosition();this.DDM.handleMouseDown(J,this);this.DDM.stopEvent(J);}else{}}},clickValidator:function(D){var C=YAHOO.util.Event.getTarget(D);return(this.isValidHandleChild(C)&&(this.id==this.handleElId||this.DDM.handleWasClicked(C,this.id)));},getTargetCoord:function(E,D){var C=E-this.deltaX;var F=D-this.deltaY;if(this.constrainX){if(C<this.minX){C=this.minX;}if(C>this.maxX){C=this.maxX;}}if(this.constrainY){if(F<this.minY){F=this.minY;}if(F>this.maxY){F=this.maxY;}}C=this.getTick(C,this.xTicks);F=this.getTick(F,this.yTicks);return{x:C,y:F};},addInvalidHandleType:function(C){var D=C.toUpperCase();this.invalidHandleTypes[D]=D;},addInvalidHandleId:function(C){if(typeof C!=="string"){C=B.generateId(C);}this.invalidHandleIds[C]=C;},addInvalidHandleClass:function(C){this.invalidHandleClasses.push(C);},removeInvalidHandleType:function(C){var D=C.toUpperCase();delete this.invalidHandleTypes[D];},removeInvalidHandleId:function(C){if(typeof C!=="string"){C=B.generateId(C);}delete this.invalidHandleIds[C];},removeInvalidHandleClass:function(D){for(var E=0,C=this.invalidHandleClasses.length;E<C;++E){if(this.invalidHandleClasses[E]==D){delete this.invalidHandleClasses[E];}}},isValidHandleChild:function(F){var E=true;var H;try{H=F.nodeName.toUpperCase();}catch(G){H=F.nodeName;}E=E&&!this.invalidHandleTypes[H];E=E&&!this.invalidHandleIds[F.id];for(var D=0,C=this.invalidHandleClasses.length;E&&D<C;++D){E=!B.hasClass(F,this.invalidHandleClasses[D]);}return E;},setXTicks:function(F,C){this.xTicks=[];this.xTickSize=C;var E={};for(var D=this.initPageX;D>=this.minX;D=D-C){if(!E[D]){this.xTicks[this.xTicks.length]=D;E[D]=true;}}for(D=this.initPageX;D<=this.maxX;D=D+C){if(!E[D]){this.xTicks[this.xTicks.length]=D;E[D]=true;}}this.xTicks.sort(this.DDM.numericSort);},setYTicks:function(F,C){this.yTicks=[];this.yTickSize=C;var E={};for(var D=this.initPageY;D>=this.minY;D=D-C){if(!E[D]){this.yTicks[this.yTicks.length]=D;E[D]=true;}}for(D=this.initPageY;D<=this.maxY;D=D+C){if(!E[D]){this.yTicks[this.yTicks.length]=D;E[D]=true;}}this.yTicks.sort(this.DDM.numericSort);},setXConstraint:function(E,D,C){this.leftConstraint=parseInt(E,10);this.rightConstraint=parseInt(D,10);this.minX=this.initPageX-this.leftConstraint;this.maxX=this.initPageX+this.rightConstraint;if(C){this.setXTicks(this.initPageX,C);}this.constrainX=true;},clearConstraints:function(){this.constrainX=false;this.constrainY=false;this.clearTicks();},clearTicks:function(){this.xTicks=null;this.yTicks=null;this.xTickSize=0;this.yTickSize=0;},setYConstraint:function(C,E,D){this.topConstraint=parseInt(C,10);this.bottomConstraint=parseInt(E,10);this.minY=this.initPageY-this.topConstraint;this.maxY=this.initPageY+this.bottomConstraint;
 
if(D){this.setYTicks(this.initPageY,D);}this.constrainY=true;},resetConstraints:function(){if(this.initPageX||this.initPageX===0){var D=(this.maintainOffset)?this.lastPageX-this.initPageX:0;var C=(this.maintainOffset)?this.lastPageY-this.initPageY:0;this.setInitPosition(D,C);}else{this.setInitPosition();}if(this.constrainX){this.setXConstraint(this.leftConstraint,this.rightConstraint,this.xTickSize);}if(this.constrainY){this.setYConstraint(this.topConstraint,this.bottomConstraint,this.yTickSize);}},getTick:function(I,F){if(!F){return I;}else{if(F[0]>=I){return F[0];}else{for(var D=0,C=F.length;D<C;++D){var E=D+1;if(F[E]&&F[E]>=I){var H=I-F[D];var G=F[E]-I;return(G>H)?F[D]:F[E];}}return F[F.length-1];}}},toString:function(){return("DragDrop "+this.id);}};YAHOO.augment(YAHOO.util.DragDrop,YAHOO.util.EventProvider);})();YAHOO.util.DD=function(C,A,B){if(C){this.init(C,A,B);}};YAHOO.extend(YAHOO.util.DD,YAHOO.util.DragDrop,{scroll:true,autoOffset:function(C,B){var A=C-this.startPageX;var D=B-this.startPageY;this.setDelta(A,D);},setDelta:function(B,A){this.deltaX=B;this.deltaY=A;},setDragElPos:function(C,B){var A=this.getDragEl();this.alignElWithMouse(A,C,B);},alignElWithMouse:function(C,G,F){var E=this.getTargetCoord(G,F);if(!this.deltaSetXY){var H=[E.x,E.y];YAHOO.util.Dom.setXY(C,H);var D=parseInt(YAHOO.util.Dom.getStyle(C,"left"),10);var B=parseInt(YAHOO.util.Dom.getStyle(C,"top"),10);this.deltaSetXY=[D-E.x,B-E.y];}else{YAHOO.util.Dom.setStyle(C,"left",(E.x+this.deltaSetXY[0])+"px");YAHOO.util.Dom.setStyle(C,"top",(E.y+this.deltaSetXY[1])+"px");}this.cachePosition(E.x,E.y);var A=this;setTimeout(function(){A.autoScroll.call(A,E.x,E.y,C.offsetHeight,C.offsetWidth);},0);},cachePosition:function(B,A){if(B){this.lastPageX=B;this.lastPageY=A;}else{var C=YAHOO.util.Dom.getXY(this.getEl());this.lastPageX=C[0];this.lastPageY=C[1];}},autoScroll:function(J,I,E,K){if(this.scroll){var L=this.DDM.getClientHeight();var B=this.DDM.getClientWidth();var N=this.DDM.getScrollTop();var D=this.DDM.getScrollLeft();var H=E+I;var M=K+J;var G=(L+N-I-this.deltaY);var F=(B+D-J-this.deltaX);var C=40;var A=(document.all)?80:30;if(H>L&&G<C){window.scrollTo(D,N+A);}if(I<N&&N>0&&I-N<C){window.scrollTo(D,N-A);}if(M>B&&F<C){window.scrollTo(D+A,N);}if(J<D&&D>0&&J-D<C){window.scrollTo(D-A,N);}}},applyConfig:function(){YAHOO.util.DD.superclass.applyConfig.call(this);this.scroll=(this.config.scroll!==false);},b4MouseDown:function(A){this.setStartPosition();this.autoOffset(YAHOO.util.Event.getPageX(A),YAHOO.util.Event.getPageY(A));},b4Drag:function(A){this.setDragElPos(YAHOO.util.Event.getPageX(A),YAHOO.util.Event.getPageY(A));},toString:function(){return("DD "+this.id);}});YAHOO.util.DDProxy=function(C,A,B){if(C){this.init(C,A,B);this.initFrame();}};YAHOO.util.DDProxy.dragElId="ygddfdiv";YAHOO.extend(YAHOO.util.DDProxy,YAHOO.util.DD,{resizeFrame:true,centerFrame:false,createFrame:function(){var B=this,A=document.body;if(!A||!A.firstChild){setTimeout(function(){B.createFrame();},50);return;}var F=this.getDragEl(),E=YAHOO.util.Dom;if(!F){F=document.createElement("div");F.id=this.dragElId;var D=F.style;D.position="absolute";D.visibility="hidden";D.cursor="move";D.border="2px solid #aaa";D.zIndex=999;D.height="25px";D.width="25px";var C=document.createElement("div");E.setStyle(C,"height","100%");E.setStyle(C,"width","100%");E.setStyle(C,"background-color","#ccc");E.setStyle(C,"opacity","0");F.appendChild(C);A.insertBefore(F,A.firstChild);}},initFrame:function(){this.createFrame();},applyConfig:function(){YAHOO.util.DDProxy.superclass.applyConfig.call(this);this.resizeFrame=(this.config.resizeFrame!==false);this.centerFrame=(this.config.centerFrame);this.setDragElId(this.config.dragElId||YAHOO.util.DDProxy.dragElId);},showFrame:function(E,D){var C=this.getEl();var A=this.getDragEl();var B=A.style;this._resizeProxy();if(this.centerFrame){this.setDelta(Math.round(parseInt(B.width,10)/2),Math.round(parseInt(B.height,10)/2));}this.setDragElPos(E,D);YAHOO.util.Dom.setStyle(A,"visibility","visible");},_resizeProxy:function(){if(this.resizeFrame){var H=YAHOO.util.Dom;var B=this.getEl();var C=this.getDragEl();var G=parseInt(H.getStyle(C,"borderTopWidth"),10);var I=parseInt(H.getStyle(C,"borderRightWidth"),10);var F=parseInt(H.getStyle(C,"borderBottomWidth"),10);var D=parseInt(H.getStyle(C,"borderLeftWidth"),10);if(isNaN(G)){G=0;}if(isNaN(I)){I=0;}if(isNaN(F)){F=0;}if(isNaN(D)){D=0;}var E=Math.max(0,B.offsetWidth-I-D);var A=Math.max(0,B.offsetHeight-G-F);H.setStyle(C,"width",E+"px");H.setStyle(C,"height",A+"px");}},b4MouseDown:function(B){this.setStartPosition();var A=YAHOO.util.Event.getPageX(B);var C=YAHOO.util.Event.getPageY(B);this.autoOffset(A,C);},b4StartDrag:function(A,B){this.showFrame(A,B);},b4EndDrag:function(A){YAHOO.util.Dom.setStyle(this.getDragEl(),"visibility","hidden");},endDrag:function(D){var C=YAHOO.util.Dom;var B=this.getEl();var A=this.getDragEl();C.setStyle(A,"visibility","");C.setStyle(B,"visibility","hidden");YAHOO.util.DDM.moveToEl(B,A);C.setStyle(A,"visibility","hidden");C.setStyle(B,"visibility","");},toString:function(){return("DDProxy "+this.id);}});YAHOO.util.DDTarget=function(C,A,B){if(C){this.initTarget(C,A,B);}};YAHOO.extend(YAHOO.util.DDTarget,YAHOO.util.DragDrop,{toString:function(){return("DDTarget "+this.id);}});YAHOO.register("dragdrop",YAHOO.util.DragDropMgr,{version:"2.9.0",build:"2800"});YAHOO.util.Attribute=function(b,a){if(a){this.owner=a;this.configure(b,true);}};YAHOO.util.Attribute.INVALID_VALUE={};YAHOO.util.Attribute.prototype={name:undefined,value:null,owner:null,readOnly:false,writeOnce:false,_initialConfig:null,_written:false,method:null,setter:null,getter:null,validator:null,getValue:function(){var a=this.value;if(this.getter){a=this.getter.call(this.owner,this.name,a);}return a;},setValue:function(f,b){var e,a=this.owner,c=this.name,g=YAHOO.util.Attribute.INVALID_VALUE,d={type:c,prevValue:this.getValue(),newValue:f};if(this.readOnly||(this.writeOnce&&this._written)){return false;}if(this.validator&&!this.validator.call(a,f)){return false;}if(!b){e=a.fireBeforeChangeEvent(d);if(e===false){return false;}}if(this.setter){f=this.setter.call(a,f,this.name);if(f===undefined){}if(f===g){return false;}}if(this.method){if(this.method.call(a,f,this.name)===g){return false;}}this.value=f;this._written=true;d.type=c;if(!b){this.owner.fireChangeEvent(d);}return true;},configure:function(b,c){b=b||{};if(c){this._written=false;}this._initialConfig=this._initialConfig||{};for(var a in b){if(b.hasOwnProperty(a)){this[a]=b[a];if(c){this._initialConfig[a]=b[a];}}}},resetValue:function(){return this.setValue(this._initialConfig.value);},resetConfig:function(){this.configure(this._initialConfig,true);},refresh:function(a){this.setValue(this.value,a);}};(function(){var a=YAHOO.util.Lang;YAHOO.util.AttributeProvider=function(){};YAHOO.util.AttributeProvider.prototype={_configs:null,get:function(c){this._configs=this._configs||{};var b=this._configs[c];if(!b||!this._configs.hasOwnProperty(c)){return null;}return b.getValue();},set:function(d,e,b){this._configs=this._configs||{};var c=this._configs[d];if(!c){return false;}return c.setValue(e,b);},getAttributeKeys:function(){this._configs=this._configs;var c=[],b;for(b in this._configs){if(a.hasOwnProperty(this._configs,b)&&!a.isUndefined(this._configs[b])){c[c.length]=b;}}return c;},setAttributes:function(d,b){for(var c in d){if(a.hasOwnProperty(d,c)){this.set(c,d[c],b);}}},resetValue:function(c,b){this._configs=this._configs||{};if(this._configs[c]){this.set(c,this._configs[c]._initialConfig.value,b);return true;}return false;},refresh:function(e,c){this._configs=this._configs||{};var f=this._configs;e=((a.isString(e))?[e]:e)||this.getAttributeKeys();for(var d=0,b=e.length;d<b;++d){if(f.hasOwnProperty(e[d])){this._configs[e[d]].refresh(c);}}},register:function(b,c){this.setAttributeConfig(b,c);},getAttributeConfig:function(c){this._configs=this._configs||{};var b=this._configs[c]||{};var d={};for(c in b){if(a.hasOwnProperty(b,c)){d[c]=b[c];}}return d;},setAttributeConfig:function(b,c,d){this._configs=this._configs||{};c=c||{};if(!this._configs[b]){c.name=b;this._configs[b]=this.createAttribute(c);}else{this._configs[b].configure(c,d);}},configureAttribute:function(b,c,d){this.setAttributeConfig(b,c,d);},resetAttributeConfig:function(b){this._configs=this._configs||{};this._configs[b].resetConfig();},subscribe:function(b,c){this._events=this._events||{};if(!(b in this._events)){this._events[b]=this.createEvent(b);}YAHOO.util.EventProvider.prototype.subscribe.apply(this,arguments);},on:function(){this.subscribe.apply(this,arguments);},addListener:function(){this.subscribe.apply(this,arguments);},fireBeforeChangeEvent:function(c){var b="before";b+=c.type.charAt(0).toUpperCase()+c.type.substr(1)+"Change";c.type=b;return this.fireEvent(c.type,c);},fireChangeEvent:function(b){b.type+="Change";return this.fireEvent(b.type,b);},createAttribute:function(b){return new YAHOO.util.Attribute(b,this);}};YAHOO.augment(YAHOO.util.AttributeProvider,YAHOO.util.EventProvider);})();(function(){var b=YAHOO.util.Dom,d=YAHOO.util.AttributeProvider,c={mouseenter:true,mouseleave:true};var a=function(e,f){this.init.apply(this,arguments);};a.DOM_EVENTS={"click":true,"dblclick":true,"keydown":true,"keypress":true,"keyup":true,"mousedown":true,"mousemove":true,"mouseout":true,"mouseover":true,"mouseup":true,"mouseenter":true,"mouseleave":true,"focus":true,"blur":true,"submit":true,"change":true};a.prototype={DOM_EVENTS:null,DEFAULT_HTML_SETTER:function(g,e){var f=this.get("element");if(f){f[e]=g;}return g;},DEFAULT_HTML_GETTER:function(e){var f=this.get("element"),g;if(f){g=f[e];}return g;},appendChild:function(e){e=e.get?e.get("element"):e;return this.get("element").appendChild(e);},getElementsByTagName:function(e){return this.get("element").getElementsByTagName(e);},hasChildNodes:function(){return this.get("element").hasChildNodes();},insertBefore:function(e,f){e=e.get?e.get("element"):e;f=(f&&f.get)?f.get("element"):f;return this.get("element").insertBefore(e,f);},removeChild:function(e){e=e.get?e.get("element"):e;return this.get("element").removeChild(e);},replaceChild:function(e,f){e=e.get?e.get("element"):e;f=f.get?f.get("element"):f;return this.get("element").replaceChild(e,f);},initAttributes:function(e){},addListener:function(j,i,k,h){h=h||this;var e=YAHOO.util.Event,g=this.get("element")||this.get("id"),f=this;if(c[j]&&!e._createMouseDelegate){return false;}if(!this._events[j]){if(g&&this.DOM_EVENTS[j]){e.on(g,j,function(m,l){if(m.srcElement&&!m.target){m.target=m.srcElement;}if((m.toElement&&!m.relatedTarget)||(m.fromElement&&!m.relatedTarget)){m.relatedTarget=e.getRelatedTarget(m);}if(!m.currentTarget){m.currentTarget=g;}f.fireEvent(j,m,l);},k,h);}this.createEvent(j,{scope:this});}return YAHOO.util.EventProvider.prototype.subscribe.apply(this,arguments);},on:function(){return this.addListener.apply(this,arguments);},subscribe:function(){return this.addListener.apply(this,arguments);},removeListener:function(f,e){return this.unsubscribe.apply(this,arguments);},addClass:function(e){b.addClass(this.get("element"),e);},getElementsByClassName:function(f,e){return b.getElementsByClassName(f,e,this.get("element"));},hasClass:function(e){return b.hasClass(this.get("element"),e);},removeClass:function(e){return b.removeClass(this.get("element"),e);},replaceClass:function(f,e){return b.replaceClass(this.get("element"),f,e);
 
},setStyle:function(f,e){return b.setStyle(this.get("element"),f,e);},getStyle:function(e){return b.getStyle(this.get("element"),e);},fireQueue:function(){var f=this._queue;for(var g=0,e=f.length;g<e;++g){this[f[g][0]].apply(this,f[g][1]);}},appendTo:function(f,g){f=(f.get)?f.get("element"):b.get(f);this.fireEvent("beforeAppendTo",{type:"beforeAppendTo",target:f});g=(g&&g.get)?g.get("element"):b.get(g);var e=this.get("element");if(!e){return false;}if(!f){return false;}if(e.parent!=f){if(g){f.insertBefore(e,g);}else{f.appendChild(e);}}this.fireEvent("appendTo",{type:"appendTo",target:f});return e;},get:function(e){var g=this._configs||{},f=g.element;if(f&&!g[e]&&!YAHOO.lang.isUndefined(f.value[e])){this._setHTMLAttrConfig(e);}return d.prototype.get.call(this,e);},setAttributes:function(l,h){var f={},j=this._configOrder;for(var k=0,e=j.length;k<e;++k){if(l[j[k]]!==undefined){f[j[k]]=true;this.set(j[k],l[j[k]],h);}}for(var g in l){if(l.hasOwnProperty(g)&&!f[g]){this.set(g,l[g],h);}}},set:function(f,h,e){var g=this.get("element");if(!g){this._queue[this._queue.length]=["set",arguments];if(this._configs[f]){this._configs[f].value=h;}return;}if(!this._configs[f]&&!YAHOO.lang.isUndefined(g[f])){this._setHTMLAttrConfig(f);}return d.prototype.set.apply(this,arguments);},setAttributeConfig:function(e,f,g){this._configOrder.push(e);d.prototype.setAttributeConfig.apply(this,arguments);},createEvent:function(f,e){this._events[f]=true;return d.prototype.createEvent.apply(this,arguments);},init:function(f,e){this._initElement(f,e);},destroy:function(){var e=this.get("element");YAHOO.util.Event.purgeElement(e,true);this.unsubscribeAll();if(e&&e.parentNode){e.parentNode.removeChild(e);}this._queue=[];this._events={};this._configs={};this._configOrder=[];},_initElement:function(g,f){this._queue=this._queue||[];this._events=this._events||{};this._configs=this._configs||{};this._configOrder=[];f=f||{};f.element=f.element||g||null;var i=false;var e=a.DOM_EVENTS;this.DOM_EVENTS=this.DOM_EVENTS||{};for(var h in e){if(e.hasOwnProperty(h)){this.DOM_EVENTS[h]=e[h];}}if(typeof f.element==="string"){this._setHTMLAttrConfig("id",{value:f.element});}if(b.get(f.element)){i=true;this._initHTMLElement(f);this._initContent(f);}YAHOO.util.Event.onAvailable(f.element,function(){if(!i){this._initHTMLElement(f);}this.fireEvent("available",{type:"available",target:b.get(f.element)});},this,true);YAHOO.util.Event.onContentReady(f.element,function(){if(!i){this._initContent(f);}this.fireEvent("contentReady",{type:"contentReady",target:b.get(f.element)});},this,true);},_initHTMLElement:function(e){this.setAttributeConfig("element",{value:b.get(e.element),readOnly:true});},_initContent:function(e){this.initAttributes(e);this.setAttributes(e,true);this.fireQueue();},_setHTMLAttrConfig:function(e,g){var f=this.get("element");g=g||{};g.name=e;g.setter=g.setter||this.DEFAULT_HTML_SETTER;g.getter=g.getter||this.DEFAULT_HTML_GETTER;g.value=g.value||f[e];this._configs[e]=new YAHOO.util.Attribute(g,this);}};YAHOO.augment(a,d);YAHOO.util.Element=a;})();YAHOO.register("element",YAHOO.util.Element,{version:"2.9.0",build:"2800"});YAHOO.register("utilities", YAHOO, {version: "2.9.0", build: "2800"});/*
 
Copyright (c) 2011, Yahoo! Inc. All rights reserved.
 
Code licensed under the BSD License:
 
http://developer.yahoo.com/yui/license.html
 
version: 2.9.0
 
*/
 
(function(){var lang=YAHOO.lang,util=YAHOO.util,Ev=util.Event;util.DataSourceBase=function(oLiveData,oConfigs){if(oLiveData===null||oLiveData===undefined){return;}this.liveData=oLiveData;this._oQueue={interval:null,conn:null,requests:[]};this.responseSchema={};if(oConfigs&&(oConfigs.constructor==Object)){for(var sConfig in oConfigs){if(sConfig){this[sConfig]=oConfigs[sConfig];}}}var maxCacheEntries=this.maxCacheEntries;if(!lang.isNumber(maxCacheEntries)||(maxCacheEntries<0)){maxCacheEntries=0;}this._aIntervals=[];this.createEvent("cacheRequestEvent");this.createEvent("cacheResponseEvent");this.createEvent("requestEvent");this.createEvent("responseEvent");this.createEvent("responseParseEvent");this.createEvent("responseCacheEvent");this.createEvent("dataErrorEvent");this.createEvent("cacheFlushEvent");var DS=util.DataSourceBase;this._sName="DataSource instance"+DS._nIndex;DS._nIndex++;};var DS=util.DataSourceBase;lang.augmentObject(DS,{TYPE_UNKNOWN:-1,TYPE_JSARRAY:0,TYPE_JSFUNCTION:1,TYPE_XHR:2,TYPE_JSON:3,TYPE_XML:4,TYPE_TEXT:5,TYPE_HTMLTABLE:6,TYPE_SCRIPTNODE:7,TYPE_LOCAL:8,ERROR_DATAINVALID:"Invalid data",ERROR_DATANULL:"Null data",_nIndex:0,_nTransactionId:0,_cloneObject:function(o){if(!lang.isValue(o)){return o;}var copy={};if(Object.prototype.toString.apply(o)==="[object RegExp]"){copy=o;}else{if(lang.isFunction(o)){copy=o;}else{if(lang.isArray(o)){var array=[];for(var i=0,len=o.length;i<len;i++){array[i]=DS._cloneObject(o[i]);}copy=array;}else{if(lang.isObject(o)){for(var x in o){if(lang.hasOwnProperty(o,x)){if(lang.isValue(o[x])&&lang.isObject(o[x])||lang.isArray(o[x])){copy[x]=DS._cloneObject(o[x]);}else{copy[x]=o[x];}}}}else{copy=o;}}}}return copy;},_getLocationValue:function(field,context){var locator=field.locator||field.key||field,xmldoc=context.ownerDocument||context,result,res,value=null;try{if(!lang.isUndefined(xmldoc.evaluate)){result=xmldoc.evaluate(locator,context,xmldoc.createNSResolver(!context.ownerDocument?context.documentElement:context.ownerDocument.documentElement),0,null);while(res=result.iterateNext()){value=res.textContent;}}else{xmldoc.setProperty("SelectionLanguage","XPath");result=context.selectNodes(locator)[0];value=result.value||result.text||null;}return value;}catch(e){}},issueCallback:function(callback,params,error,scope){if(lang.isFunction(callback)){callback.apply(scope,params);}else{if(lang.isObject(callback)){scope=callback.scope||scope||window;var callbackFunc=callback.success;if(error){callbackFunc=callback.failure;}if(callbackFunc){callbackFunc.apply(scope,params.concat([callback.argument]));}}}},parseString:function(oData){if(!lang.isValue(oData)){return null;}var string=oData+"";if(lang.isString(string)){return string;}else{return null;}},parseNumber:function(oData){if(!lang.isValue(oData)||(oData==="")){return null;}var number=oData*1;if(lang.isNumber(number)){return number;}else{return null;}},convertNumber:function(oData){return DS.parseNumber(oData);},parseDate:function(oData){var date=null;if(lang.isValue(oData)&&!(oData instanceof Date)){date=new Date(oData);}else{return oData;}if(date instanceof Date){return date;}else{return null;}},convertDate:function(oData){return DS.parseDate(oData);}});DS.Parser={string:DS.parseString,number:DS.parseNumber,date:DS.parseDate};DS.prototype={_sName:null,_aCache:null,_oQueue:null,_aIntervals:null,maxCacheEntries:0,liveData:null,dataType:DS.TYPE_UNKNOWN,responseType:DS.TYPE_UNKNOWN,responseSchema:null,useXPath:false,cloneBeforeCaching:false,toString:function(){return this._sName;},getCachedResponse:function(oRequest,oCallback,oCaller){var aCache=this._aCache;if(this.maxCacheEntries>0){if(!aCache){this._aCache=[];}else{var nCacheLength=aCache.length;if(nCacheLength>0){var oResponse=null;this.fireEvent("cacheRequestEvent",{request:oRequest,callback:oCallback,caller:oCaller});for(var i=nCacheLength-1;i>=0;i--){var oCacheElem=aCache[i];if(this.isCacheHit(oRequest,oCacheElem.request)){oResponse=oCacheElem.response;this.fireEvent("cacheResponseEvent",{request:oRequest,response:oResponse,callback:oCallback,caller:oCaller});if(i<nCacheLength-1){aCache.splice(i,1);this.addToCache(oRequest,oResponse);}oResponse.cached=true;break;}}return oResponse;}}}else{if(aCache){this._aCache=null;}}return null;},isCacheHit:function(oRequest,oCachedRequest){return(oRequest===oCachedRequest);},addToCache:function(oRequest,oResponse){var aCache=this._aCache;if(!aCache){return;}while(aCache.length>=this.maxCacheEntries){aCache.shift();}oResponse=(this.cloneBeforeCaching)?DS._cloneObject(oResponse):oResponse;var oCacheElem={request:oRequest,response:oResponse};aCache[aCache.length]=oCacheElem;this.fireEvent("responseCacheEvent",{request:oRequest,response:oResponse});},flushCache:function(){if(this._aCache){this._aCache=[];this.fireEvent("cacheFlushEvent");}},setInterval:function(nMsec,oRequest,oCallback,oCaller){if(lang.isNumber(nMsec)&&(nMsec>=0)){var oSelf=this;var nId=setInterval(function(){oSelf.makeConnection(oRequest,oCallback,oCaller);},nMsec);this._aIntervals.push(nId);return nId;}else{}},clearInterval:function(nId){var tracker=this._aIntervals||[];for(var i=tracker.length-1;i>-1;i--){if(tracker[i]===nId){tracker.splice(i,1);clearInterval(nId);}}},clearAllIntervals:function(){var tracker=this._aIntervals||[];for(var i=tracker.length-1;i>-1;i--){clearInterval(tracker[i]);}tracker=[];},sendRequest:function(oRequest,oCallback,oCaller){var oCachedResponse=this.getCachedResponse(oRequest,oCallback,oCaller);if(oCachedResponse){DS.issueCallback(oCallback,[oRequest,oCachedResponse],false,oCaller);return null;}return this.makeConnection(oRequest,oCallback,oCaller);},makeConnection:function(oRequest,oCallback,oCaller){var tId=DS._nTransactionId++;this.fireEvent("requestEvent",{tId:tId,request:oRequest,callback:oCallback,caller:oCaller});var oRawResponse=this.liveData;this.handleResponse(oRequest,oRawResponse,oCallback,oCaller,tId);return tId;},handleResponse:function(oRequest,oRawResponse,oCallback,oCaller,tId){this.fireEvent("responseEvent",{tId:tId,request:oRequest,response:oRawResponse,callback:oCallback,caller:oCaller});
 
var xhr=(this.dataType==DS.TYPE_XHR)?true:false;var oParsedResponse=null;var oFullResponse=oRawResponse;if(this.responseType===DS.TYPE_UNKNOWN){var ctype=(oRawResponse&&oRawResponse.getResponseHeader)?oRawResponse.getResponseHeader["Content-Type"]:null;if(ctype){if(ctype.indexOf("text/xml")>-1){this.responseType=DS.TYPE_XML;}else{if(ctype.indexOf("application/json")>-1){this.responseType=DS.TYPE_JSON;}else{if(ctype.indexOf("text/plain")>-1){this.responseType=DS.TYPE_TEXT;}}}}else{if(YAHOO.lang.isArray(oRawResponse)){this.responseType=DS.TYPE_JSARRAY;}else{if(oRawResponse&&oRawResponse.nodeType&&(oRawResponse.nodeType===9||oRawResponse.nodeType===1||oRawResponse.nodeType===11)){this.responseType=DS.TYPE_XML;}else{if(oRawResponse&&oRawResponse.nodeName&&(oRawResponse.nodeName.toLowerCase()=="table")){this.responseType=DS.TYPE_HTMLTABLE;}else{if(YAHOO.lang.isObject(oRawResponse)){this.responseType=DS.TYPE_JSON;}else{if(YAHOO.lang.isString(oRawResponse)){this.responseType=DS.TYPE_TEXT;}}}}}}}switch(this.responseType){case DS.TYPE_JSARRAY:if(xhr&&oRawResponse&&oRawResponse.responseText){oFullResponse=oRawResponse.responseText;}try{if(lang.isString(oFullResponse)){var parseArgs=[oFullResponse].concat(this.parseJSONArgs);if(lang.JSON){oFullResponse=lang.JSON.parse.apply(lang.JSON,parseArgs);}else{if(window.JSON&&JSON.parse){oFullResponse=JSON.parse.apply(JSON,parseArgs);}else{if(oFullResponse.parseJSON){oFullResponse=oFullResponse.parseJSON.apply(oFullResponse,parseArgs.slice(1));}else{while(oFullResponse.length>0&&(oFullResponse.charAt(0)!="{")&&(oFullResponse.charAt(0)!="[")){oFullResponse=oFullResponse.substring(1,oFullResponse.length);}if(oFullResponse.length>0){var arrayEnd=Math.max(oFullResponse.lastIndexOf("]"),oFullResponse.lastIndexOf("}"));oFullResponse=oFullResponse.substring(0,arrayEnd+1);oFullResponse=eval("("+oFullResponse+")");}}}}}}catch(e1){}oFullResponse=this.doBeforeParseData(oRequest,oFullResponse,oCallback);oParsedResponse=this.parseArrayData(oRequest,oFullResponse);break;case DS.TYPE_JSON:if(xhr&&oRawResponse&&oRawResponse.responseText){oFullResponse=oRawResponse.responseText;}try{if(lang.isString(oFullResponse)){var parseArgs=[oFullResponse].concat(this.parseJSONArgs);if(lang.JSON){oFullResponse=lang.JSON.parse.apply(lang.JSON,parseArgs);}else{if(window.JSON&&JSON.parse){oFullResponse=JSON.parse.apply(JSON,parseArgs);}else{if(oFullResponse.parseJSON){oFullResponse=oFullResponse.parseJSON.apply(oFullResponse,parseArgs.slice(1));}else{while(oFullResponse.length>0&&(oFullResponse.charAt(0)!="{")&&(oFullResponse.charAt(0)!="[")){oFullResponse=oFullResponse.substring(1,oFullResponse.length);}if(oFullResponse.length>0){var objEnd=Math.max(oFullResponse.lastIndexOf("]"),oFullResponse.lastIndexOf("}"));oFullResponse=oFullResponse.substring(0,objEnd+1);oFullResponse=eval("("+oFullResponse+")");}}}}}}catch(e){}oFullResponse=this.doBeforeParseData(oRequest,oFullResponse,oCallback);oParsedResponse=this.parseJSONData(oRequest,oFullResponse);break;case DS.TYPE_HTMLTABLE:if(xhr&&oRawResponse.responseText){var el=document.createElement("div");el.innerHTML=oRawResponse.responseText;oFullResponse=el.getElementsByTagName("table")[0];}oFullResponse=this.doBeforeParseData(oRequest,oFullResponse,oCallback);oParsedResponse=this.parseHTMLTableData(oRequest,oFullResponse);break;case DS.TYPE_XML:if(xhr&&oRawResponse.responseXML){oFullResponse=oRawResponse.responseXML;}oFullResponse=this.doBeforeParseData(oRequest,oFullResponse,oCallback);oParsedResponse=this.parseXMLData(oRequest,oFullResponse);break;case DS.TYPE_TEXT:if(xhr&&lang.isString(oRawResponse.responseText)){oFullResponse=oRawResponse.responseText;}oFullResponse=this.doBeforeParseData(oRequest,oFullResponse,oCallback);oParsedResponse=this.parseTextData(oRequest,oFullResponse);break;default:oFullResponse=this.doBeforeParseData(oRequest,oFullResponse,oCallback);oParsedResponse=this.parseData(oRequest,oFullResponse);break;}oParsedResponse=oParsedResponse||{};if(!oParsedResponse.results){oParsedResponse.results=[];}if(!oParsedResponse.meta){oParsedResponse.meta={};}if(!oParsedResponse.error){oParsedResponse=this.doBeforeCallback(oRequest,oFullResponse,oParsedResponse,oCallback);this.fireEvent("responseParseEvent",{request:oRequest,response:oParsedResponse,callback:oCallback,caller:oCaller});this.addToCache(oRequest,oParsedResponse);}else{oParsedResponse.error=true;this.fireEvent("dataErrorEvent",{request:oRequest,response:oRawResponse,callback:oCallback,caller:oCaller,message:DS.ERROR_DATANULL});}oParsedResponse.tId=tId;DS.issueCallback(oCallback,[oRequest,oParsedResponse],oParsedResponse.error,oCaller);},doBeforeParseData:function(oRequest,oFullResponse,oCallback){return oFullResponse;},doBeforeCallback:function(oRequest,oFullResponse,oParsedResponse,oCallback){return oParsedResponse;},parseData:function(oRequest,oFullResponse){if(lang.isValue(oFullResponse)){var oParsedResponse={results:oFullResponse,meta:{}};return oParsedResponse;}return null;},parseArrayData:function(oRequest,oFullResponse){if(lang.isArray(oFullResponse)){var results=[],i,j,rec,field,data;if(lang.isArray(this.responseSchema.fields)){var fields=this.responseSchema.fields;for(i=fields.length-1;i>=0;--i){if(typeof fields[i]!=="object"){fields[i]={key:fields[i]};}}var parsers={},p;for(i=fields.length-1;i>=0;--i){p=(typeof fields[i].parser==="function"?fields[i].parser:DS.Parser[fields[i].parser+""])||fields[i].converter;if(p){parsers[fields[i].key]=p;}}var arrType=lang.isArray(oFullResponse[0]);for(i=oFullResponse.length-1;i>-1;i--){var oResult={};rec=oFullResponse[i];if(typeof rec==="object"){for(j=fields.length-1;j>-1;j--){field=fields[j];data=arrType?rec[j]:rec[field.key];if(parsers[field.key]){data=parsers[field.key].call(this,data);}if(data===undefined){data=null;}oResult[field.key]=data;}}else{if(lang.isString(rec)){for(j=fields.length-1;j>-1;j--){field=fields[j];data=rec;if(parsers[field.key]){data=parsers[field.key].call(this,data);}if(data===undefined){data=null;}oResult[field.key]=data;
 
}}}results[i]=oResult;}}else{results=oFullResponse;}var oParsedResponse={results:results};return oParsedResponse;}return null;},parseTextData:function(oRequest,oFullResponse){if(lang.isString(oFullResponse)){if(lang.isString(this.responseSchema.recordDelim)&&lang.isString(this.responseSchema.fieldDelim)){var oParsedResponse={results:[]};var recDelim=this.responseSchema.recordDelim;var fieldDelim=this.responseSchema.fieldDelim;if(oFullResponse.length>0){var newLength=oFullResponse.length-recDelim.length;if(oFullResponse.substr(newLength)==recDelim){oFullResponse=oFullResponse.substr(0,newLength);}if(oFullResponse.length>0){var recordsarray=oFullResponse.split(recDelim);for(var i=0,len=recordsarray.length,recIdx=0;i<len;++i){var bError=false,sRecord=recordsarray[i];if(lang.isString(sRecord)&&(sRecord.length>0)){var fielddataarray=recordsarray[i].split(fieldDelim);var oResult={};if(lang.isArray(this.responseSchema.fields)){var fields=this.responseSchema.fields;for(var j=fields.length-1;j>-1;j--){try{var data=fielddataarray[j];if(lang.isString(data)){if(data.charAt(0)=='"'){data=data.substr(1);}if(data.charAt(data.length-1)=='"'){data=data.substr(0,data.length-1);}var field=fields[j];var key=(lang.isValue(field.key))?field.key:field;if(!field.parser&&field.converter){field.parser=field.converter;}var parser=(typeof field.parser==="function")?field.parser:DS.Parser[field.parser+""];if(parser){data=parser.call(this,data);}if(data===undefined){data=null;}oResult[key]=data;}else{bError=true;}}catch(e){bError=true;}}}else{oResult=fielddataarray;}if(!bError){oParsedResponse.results[recIdx++]=oResult;}}}}}return oParsedResponse;}}return null;},parseXMLResult:function(result){var oResult={},schema=this.responseSchema;try{for(var m=schema.fields.length-1;m>=0;m--){var field=schema.fields[m];var key=(lang.isValue(field.key))?field.key:field;var data=null;if(this.useXPath){data=YAHOO.util.DataSource._getLocationValue(field,result);}else{var xmlAttr=result.attributes.getNamedItem(key);if(xmlAttr){data=xmlAttr.value;}else{var xmlNode=result.getElementsByTagName(key);if(xmlNode&&xmlNode.item(0)){var item=xmlNode.item(0);data=(item)?((item.text)?item.text:(item.textContent)?item.textContent:null):null;if(!data){var datapieces=[];for(var j=0,len=item.childNodes.length;j<len;j++){if(item.childNodes[j].nodeValue){datapieces[datapieces.length]=item.childNodes[j].nodeValue;}}if(datapieces.length>0){data=datapieces.join("");}}}}}if(data===null){data="";}if(!field.parser&&field.converter){field.parser=field.converter;}var parser=(typeof field.parser==="function")?field.parser:DS.Parser[field.parser+""];if(parser){data=parser.call(this,data);}if(data===undefined){data=null;}oResult[key]=data;}}catch(e){}return oResult;},parseXMLData:function(oRequest,oFullResponse){var bError=false,schema=this.responseSchema,oParsedResponse={meta:{}},xmlList=null,metaNode=schema.metaNode,metaLocators=schema.metaFields||{},i,k,loc,v;try{if(this.useXPath){for(k in metaLocators){oParsedResponse.meta[k]=YAHOO.util.DataSource._getLocationValue(metaLocators[k],oFullResponse);}}else{metaNode=metaNode?oFullResponse.getElementsByTagName(metaNode)[0]:oFullResponse;if(metaNode){for(k in metaLocators){if(lang.hasOwnProperty(metaLocators,k)){loc=metaLocators[k];v=metaNode.getElementsByTagName(loc)[0];if(v){v=v.firstChild.nodeValue;}else{v=metaNode.attributes.getNamedItem(loc);if(v){v=v.value;}}if(lang.isValue(v)){oParsedResponse.meta[k]=v;}}}}}xmlList=(schema.resultNode)?oFullResponse.getElementsByTagName(schema.resultNode):null;}catch(e){}if(!xmlList||!lang.isArray(schema.fields)){bError=true;}else{oParsedResponse.results=[];for(i=xmlList.length-1;i>=0;--i){var oResult=this.parseXMLResult(xmlList.item(i));oParsedResponse.results[i]=oResult;}}if(bError){oParsedResponse.error=true;}else{}return oParsedResponse;},parseJSONData:function(oRequest,oFullResponse){var oParsedResponse={results:[],meta:{}};if(lang.isObject(oFullResponse)&&this.responseSchema.resultsList){var schema=this.responseSchema,fields=schema.fields,resultsList=oFullResponse,results=[],metaFields=schema.metaFields||{},fieldParsers=[],fieldPaths=[],simpleFields=[],bError=false,i,len,j,v,key,parser,path;var buildPath=function(needle){var path=null,keys=[],i=0;if(needle){needle=needle.replace(/\[(['"])(.*?)\1\]/g,function(x,$1,$2){keys[i]=$2;return".@"+(i++);}).replace(/\[(\d+)\]/g,function(x,$1){keys[i]=parseInt($1,10)|0;return".@"+(i++);}).replace(/^\./,"");if(!/[^\w\.\$@]/.test(needle)){path=needle.split(".");for(i=path.length-1;i>=0;--i){if(path[i].charAt(0)==="@"){path[i]=keys[parseInt(path[i].substr(1),10)];}}}else{}}return path;};var walkPath=function(path,origin){var v=origin,i=0,len=path.length;for(;i<len&&v;++i){v=v[path[i]];}return v;};path=buildPath(schema.resultsList);if(path){resultsList=walkPath(path,oFullResponse);if(resultsList===undefined){bError=true;}}else{bError=true;}if(!resultsList){resultsList=[];}if(!lang.isArray(resultsList)){resultsList=[resultsList];}if(!bError){if(schema.fields){var field;for(i=0,len=fields.length;i<len;i++){field=fields[i];key=field.key||field;parser=((typeof field.parser==="function")?field.parser:DS.Parser[field.parser+""])||field.converter;path=buildPath(key);if(parser){fieldParsers[fieldParsers.length]={key:key,parser:parser};}if(path){if(path.length>1){fieldPaths[fieldPaths.length]={key:key,path:path};}else{simpleFields[simpleFields.length]={key:key,path:path[0]};}}else{}}for(i=resultsList.length-1;i>=0;--i){var r=resultsList[i],rec={};if(r){for(j=simpleFields.length-1;j>=0;--j){rec[simpleFields[j].key]=(r[simpleFields[j].path]!==undefined)?r[simpleFields[j].path]:r[j];}for(j=fieldPaths.length-1;j>=0;--j){rec[fieldPaths[j].key]=walkPath(fieldPaths[j].path,r);}for(j=fieldParsers.length-1;j>=0;--j){var p=fieldParsers[j].key;rec[p]=fieldParsers[j].parser.call(this,rec[p]);if(rec[p]===undefined){rec[p]=null;}}}results[i]=rec;}}else{results=resultsList;}for(key in metaFields){if(lang.hasOwnProperty(metaFields,key)){path=buildPath(metaFields[key]);
 
if(path){v=walkPath(path,oFullResponse);oParsedResponse.meta[key]=v;}}}}else{oParsedResponse.error=true;}oParsedResponse.results=results;}else{oParsedResponse.error=true;}return oParsedResponse;},parseHTMLTableData:function(oRequest,oFullResponse){var bError=false;var elTable=oFullResponse;var fields=this.responseSchema.fields;var oParsedResponse={results:[]};if(lang.isArray(fields)){for(var i=0;i<elTable.tBodies.length;i++){var elTbody=elTable.tBodies[i];for(var j=elTbody.rows.length-1;j>-1;j--){var elRow=elTbody.rows[j];var oResult={};for(var k=fields.length-1;k>-1;k--){var field=fields[k];var key=(lang.isValue(field.key))?field.key:field;var data=elRow.cells[k].innerHTML;if(!field.parser&&field.converter){field.parser=field.converter;}var parser=(typeof field.parser==="function")?field.parser:DS.Parser[field.parser+""];if(parser){data=parser.call(this,data);}if(data===undefined){data=null;}oResult[key]=data;}oParsedResponse.results[j]=oResult;}}}else{bError=true;}if(bError){oParsedResponse.error=true;}else{}return oParsedResponse;}};lang.augmentProto(DS,util.EventProvider);util.LocalDataSource=function(oLiveData,oConfigs){this.dataType=DS.TYPE_LOCAL;if(oLiveData){if(YAHOO.lang.isArray(oLiveData)){this.responseType=DS.TYPE_JSARRAY;}else{if(oLiveData.nodeType&&oLiveData.nodeType==9){this.responseType=DS.TYPE_XML;}else{if(oLiveData.nodeName&&(oLiveData.nodeName.toLowerCase()=="table")){this.responseType=DS.TYPE_HTMLTABLE;oLiveData=oLiveData.cloneNode(true);}else{if(YAHOO.lang.isString(oLiveData)){this.responseType=DS.TYPE_TEXT;}else{if(YAHOO.lang.isObject(oLiveData)){this.responseType=DS.TYPE_JSON;}}}}}}else{oLiveData=[];this.responseType=DS.TYPE_JSARRAY;}util.LocalDataSource.superclass.constructor.call(this,oLiveData,oConfigs);};lang.extend(util.LocalDataSource,DS);lang.augmentObject(util.LocalDataSource,DS);util.FunctionDataSource=function(oLiveData,oConfigs){this.dataType=DS.TYPE_JSFUNCTION;oLiveData=oLiveData||function(){};util.FunctionDataSource.superclass.constructor.call(this,oLiveData,oConfigs);};lang.extend(util.FunctionDataSource,DS,{scope:null,makeConnection:function(oRequest,oCallback,oCaller){var tId=DS._nTransactionId++;this.fireEvent("requestEvent",{tId:tId,request:oRequest,callback:oCallback,caller:oCaller});var oRawResponse=(this.scope)?this.liveData.call(this.scope,oRequest,this,oCallback):this.liveData(oRequest,oCallback);if(this.responseType===DS.TYPE_UNKNOWN){if(YAHOO.lang.isArray(oRawResponse)){this.responseType=DS.TYPE_JSARRAY;}else{if(oRawResponse&&oRawResponse.nodeType&&oRawResponse.nodeType==9){this.responseType=DS.TYPE_XML;}else{if(oRawResponse&&oRawResponse.nodeName&&(oRawResponse.nodeName.toLowerCase()=="table")){this.responseType=DS.TYPE_HTMLTABLE;}else{if(YAHOO.lang.isObject(oRawResponse)){this.responseType=DS.TYPE_JSON;}else{if(YAHOO.lang.isString(oRawResponse)){this.responseType=DS.TYPE_TEXT;}}}}}}this.handleResponse(oRequest,oRawResponse,oCallback,oCaller,tId);return tId;}});lang.augmentObject(util.FunctionDataSource,DS);util.ScriptNodeDataSource=function(oLiveData,oConfigs){this.dataType=DS.TYPE_SCRIPTNODE;oLiveData=oLiveData||"";util.ScriptNodeDataSource.superclass.constructor.call(this,oLiveData,oConfigs);};lang.extend(util.ScriptNodeDataSource,DS,{getUtility:util.Get,asyncMode:"allowAll",scriptCallbackParam:"callback",generateRequestCallback:function(id){return"&"+this.scriptCallbackParam+"=YAHOO.util.ScriptNodeDataSource.callbacks["+id+"]";},doBeforeGetScriptNode:function(sUri){return sUri;},makeConnection:function(oRequest,oCallback,oCaller){var tId=DS._nTransactionId++;this.fireEvent("requestEvent",{tId:tId,request:oRequest,callback:oCallback,caller:oCaller});if(util.ScriptNodeDataSource._nPending===0){util.ScriptNodeDataSource.callbacks=[];util.ScriptNodeDataSource._nId=0;}var id=util.ScriptNodeDataSource._nId;util.ScriptNodeDataSource._nId++;var oSelf=this;util.ScriptNodeDataSource.callbacks[id]=function(oRawResponse){if((oSelf.asyncMode!=="ignoreStaleResponses")||(id===util.ScriptNodeDataSource.callbacks.length-1)){if(oSelf.responseType===DS.TYPE_UNKNOWN){if(YAHOO.lang.isArray(oRawResponse)){oSelf.responseType=DS.TYPE_JSARRAY;}else{if(oRawResponse.nodeType&&oRawResponse.nodeType==9){oSelf.responseType=DS.TYPE_XML;}else{if(oRawResponse.nodeName&&(oRawResponse.nodeName.toLowerCase()=="table")){oSelf.responseType=DS.TYPE_HTMLTABLE;}else{if(YAHOO.lang.isObject(oRawResponse)){oSelf.responseType=DS.TYPE_JSON;}else{if(YAHOO.lang.isString(oRawResponse)){oSelf.responseType=DS.TYPE_TEXT;}}}}}}oSelf.handleResponse(oRequest,oRawResponse,oCallback,oCaller,tId);}else{}delete util.ScriptNodeDataSource.callbacks[id];};util.ScriptNodeDataSource._nPending++;var sUri=this.liveData+oRequest+this.generateRequestCallback(id);sUri=this.doBeforeGetScriptNode(sUri);this.getUtility.script(sUri,{autopurge:true,onsuccess:util.ScriptNodeDataSource._bumpPendingDown,onfail:util.ScriptNodeDataSource._bumpPendingDown});return tId;}});lang.augmentObject(util.ScriptNodeDataSource,DS);lang.augmentObject(util.ScriptNodeDataSource,{_nId:0,_nPending:0,callbacks:[]});util.XHRDataSource=function(oLiveData,oConfigs){this.dataType=DS.TYPE_XHR;this.connMgr=this.connMgr||util.Connect;oLiveData=oLiveData||"";util.XHRDataSource.superclass.constructor.call(this,oLiveData,oConfigs);};lang.extend(util.XHRDataSource,DS,{connMgr:null,connXhrMode:"allowAll",connMethodPost:false,connTimeout:0,makeConnection:function(oRequest,oCallback,oCaller){var oRawResponse=null;var tId=DS._nTransactionId++;this.fireEvent("requestEvent",{tId:tId,request:oRequest,callback:oCallback,caller:oCaller});var oSelf=this;var oConnMgr=this.connMgr;var oQueue=this._oQueue;var _xhrSuccess=function(oResponse){if(oResponse&&(this.connXhrMode=="ignoreStaleResponses")&&(oResponse.tId!=oQueue.conn.tId)){return null;}else{if(!oResponse){this.fireEvent("dataErrorEvent",{request:oRequest,response:null,callback:oCallback,caller:oCaller,message:DS.ERROR_DATANULL});DS.issueCallback(oCallback,[oRequest,{error:true}],true,oCaller);return null;
 
}else{if(this.responseType===DS.TYPE_UNKNOWN){var ctype=(oResponse.getResponseHeader)?oResponse.getResponseHeader["Content-Type"]:null;if(ctype){if(ctype.indexOf("text/xml")>-1){this.responseType=DS.TYPE_XML;}else{if(ctype.indexOf("application/json")>-1){this.responseType=DS.TYPE_JSON;}else{if(ctype.indexOf("text/plain")>-1){this.responseType=DS.TYPE_TEXT;}}}}}this.handleResponse(oRequest,oResponse,oCallback,oCaller,tId);}}};var _xhrFailure=function(oResponse){this.fireEvent("dataErrorEvent",{request:oRequest,response:oResponse,callback:oCallback,caller:oCaller,message:DS.ERROR_DATAINVALID});if(lang.isString(this.liveData)&&lang.isString(oRequest)&&(this.liveData.lastIndexOf("?")!==this.liveData.length-1)&&(oRequest.indexOf("?")!==0)){}oResponse=oResponse||{};oResponse.error=true;DS.issueCallback(oCallback,[oRequest,oResponse],true,oCaller);return null;};var _xhrCallback={success:_xhrSuccess,failure:_xhrFailure,scope:this};if(lang.isNumber(this.connTimeout)){_xhrCallback.timeout=this.connTimeout;}if(this.connXhrMode=="cancelStaleRequests"){if(oQueue.conn){if(oConnMgr.abort){oConnMgr.abort(oQueue.conn);oQueue.conn=null;}else{}}}if(oConnMgr&&oConnMgr.asyncRequest){var sLiveData=this.liveData;var isPost=this.connMethodPost;var sMethod=(isPost)?"POST":"GET";var sUri=(isPost||!lang.isValue(oRequest))?sLiveData:sLiveData+oRequest;var sRequest=(isPost)?oRequest:null;if(this.connXhrMode!="queueRequests"){oQueue.conn=oConnMgr.asyncRequest(sMethod,sUri,_xhrCallback,sRequest);}else{if(oQueue.conn){var allRequests=oQueue.requests;allRequests.push({request:oRequest,callback:_xhrCallback});if(!oQueue.interval){oQueue.interval=setInterval(function(){if(oConnMgr.isCallInProgress(oQueue.conn)){return;}else{if(allRequests.length>0){sUri=(isPost||!lang.isValue(allRequests[0].request))?sLiveData:sLiveData+allRequests[0].request;sRequest=(isPost)?allRequests[0].request:null;oQueue.conn=oConnMgr.asyncRequest(sMethod,sUri,allRequests[0].callback,sRequest);allRequests.shift();}else{clearInterval(oQueue.interval);oQueue.interval=null;}}},50);}}else{oQueue.conn=oConnMgr.asyncRequest(sMethod,sUri,_xhrCallback,sRequest);}}}else{DS.issueCallback(oCallback,[oRequest,{error:true}],true,oCaller);}return tId;}});lang.augmentObject(util.XHRDataSource,DS);util.DataSource=function(oLiveData,oConfigs){oConfigs=oConfigs||{};var dataType=oConfigs.dataType;if(dataType){if(dataType==DS.TYPE_LOCAL){return new util.LocalDataSource(oLiveData,oConfigs);}else{if(dataType==DS.TYPE_XHR){return new util.XHRDataSource(oLiveData,oConfigs);}else{if(dataType==DS.TYPE_SCRIPTNODE){return new util.ScriptNodeDataSource(oLiveData,oConfigs);}else{if(dataType==DS.TYPE_JSFUNCTION){return new util.FunctionDataSource(oLiveData,oConfigs);}}}}}if(YAHOO.lang.isString(oLiveData)){return new util.XHRDataSource(oLiveData,oConfigs);}else{if(YAHOO.lang.isFunction(oLiveData)){return new util.FunctionDataSource(oLiveData,oConfigs);}else{return new util.LocalDataSource(oLiveData,oConfigs);}}};lang.augmentObject(util.DataSource,DS);})();YAHOO.util.Number={format:function(e,k){if(e===""||e===null||!isFinite(e)){return"";}e=+e;k=YAHOO.lang.merge(YAHOO.util.Number.format.defaults,(k||{}));var j=e+"",l=Math.abs(e),b=k.decimalPlaces||0,r=k.thousandsSeparator,f=k.negativeFormat||("-"+k.format),q,p,g,h;if(f.indexOf("#")>-1){f=f.replace(/#/,k.format);}if(b<0){q=l-(l%1)+"";g=q.length+b;if(g>0){q=Number("."+q).toFixed(g).slice(2)+new Array(q.length-g+1).join("0");}else{q="0";}}else{var a=l+"";if(b>0||a.indexOf(".")>0){var d=Math.pow(10,b);q=Math.round(l*d)/d+"";var c=q.indexOf("."),m,o;if(c<0){m=b;o=(Math.pow(10,m)+"").substring(1);if(b>0){q=q+"."+o;}}else{m=b-(q.length-c-1);o=(Math.pow(10,m)+"").substring(1);q=q+o;}}else{q=l.toFixed(b)+"";}}p=q.split(/\D/);if(l>=1000){g=p[0].length%3||3;p[0]=p[0].slice(0,g)+p[0].slice(g).replace(/(\d{3})/g,r+"$1");}return YAHOO.util.Number.format._applyFormat((e<0?f:k.format),p.join(k.decimalSeparator),k);}};YAHOO.util.Number.format.defaults={format:"{prefix}{number}{suffix}",negativeFormat:null,decimalSeparator:".",decimalPlaces:null,thousandsSeparator:""};YAHOO.util.Number.format._applyFormat=function(a,b,c){return a.replace(/\{(\w+)\}/g,function(d,e){return e==="number"?b:e in c?c[e]:"";});};(function(){var a=function(c,e,d){if(typeof d==="undefined"){d=10;}for(;parseInt(c,10)<d&&d>1;d/=10){c=e.toString()+c;}return c.toString();};var b={formats:{a:function(e,c){return c.a[e.getDay()];},A:function(e,c){return c.A[e.getDay()];},b:function(e,c){return c.b[e.getMonth()];},B:function(e,c){return c.B[e.getMonth()];},C:function(c){return a(parseInt(c.getFullYear()/100,10),0);},d:["getDate","0"],e:["getDate"," "],g:function(c){return a(parseInt(b.formats.G(c)%100,10),0);},G:function(f){var g=f.getFullYear();var e=parseInt(b.formats.V(f),10);var c=parseInt(b.formats.W(f),10);if(c>e){g++;}else{if(c===0&&e>=52){g--;}}return g;},H:["getHours","0"],I:function(e){var c=e.getHours()%12;return a(c===0?12:c,0);},j:function(h){var g=new Date(""+h.getFullYear()+"/1/1 GMT");var e=new Date(""+h.getFullYear()+"/"+(h.getMonth()+1)+"/"+h.getDate()+" GMT");var c=e-g;var f=parseInt(c/60000/60/24,10)+1;return a(f,0,100);},k:["getHours"," "],l:function(e){var c=e.getHours()%12;return a(c===0?12:c," ");},m:function(c){return a(c.getMonth()+1,0);},M:["getMinutes","0"],p:function(e,c){return c.p[e.getHours()>=12?1:0];},P:function(e,c){return c.P[e.getHours()>=12?1:0];},s:function(e,c){return parseInt(e.getTime()/1000,10);},S:["getSeconds","0"],u:function(c){var e=c.getDay();return e===0?7:e;},U:function(g){var c=parseInt(b.formats.j(g),10);var f=6-g.getDay();var e=parseInt((c+f)/7,10);return a(e,0);},V:function(g){var f=parseInt(b.formats.W(g),10);var c=(new Date(""+g.getFullYear()+"/1/1")).getDay();var e=f+(c>4||c<=1?0:1);if(e===53&&(new Date(""+g.getFullYear()+"/12/31")).getDay()<4){e=1;}else{if(e===0){e=b.formats.V(new Date(""+(g.getFullYear()-1)+"/12/31"));}}return a(e,0);},w:"getDay",W:function(g){var c=parseInt(b.formats.j(g),10);var f=7-b.formats.u(g);var e=parseInt((c+f)/7,10);
 
return a(e,0,10);},y:function(c){return a(c.getFullYear()%100,0);},Y:"getFullYear",z:function(f){var e=f.getTimezoneOffset();var c=a(parseInt(Math.abs(e/60),10),0);var g=a(Math.abs(e%60),0);return(e>0?"-":"+")+c+g;},Z:function(c){var e=c.toString().replace(/^.*:\d\d( GMT[+-]\d+)? \(?([A-Za-z ]+)\)?\d*$/,"$2").replace(/[a-z ]/g,"");if(e.length>4){e=b.formats.z(c);}return e;},"%":function(c){return"%";}},aggregates:{c:"locale",D:"%m/%d/%y",F:"%Y-%m-%d",h:"%b",n:"\n",r:"locale",R:"%H:%M",t:"\t",T:"%H:%M:%S",x:"locale",X:"locale"},format:function(g,f,d){f=f||{};if(!(g instanceof Date)){return YAHOO.lang.isValue(g)?g:"";}var h=f.format||"%m/%d/%Y";if(h==="YYYY/MM/DD"){h="%Y/%m/%d";}else{if(h==="DD/MM/YYYY"){h="%d/%m/%Y";}else{if(h==="MM/DD/YYYY"){h="%m/%d/%Y";}}}d=d||"en";if(!(d in YAHOO.util.DateLocale)){if(d.replace(/-[a-zA-Z]+$/,"") in YAHOO.util.DateLocale){d=d.replace(/-[a-zA-Z]+$/,"");}else{d="en";}}var j=YAHOO.util.DateLocale[d];var c=function(l,k){var m=b.aggregates[k];return(m==="locale"?j[k]:m);};var e=function(l,k){var m=b.formats[k];if(typeof m==="string"){return g[m]();}else{if(typeof m==="function"){return m.call(g,g,j);}else{if(typeof m==="object"&&typeof m[0]==="string"){return a(g[m[0]](),m[1]);}else{return k;}}}};while(h.match(/%[cDFhnrRtTxX]/)){h=h.replace(/%([cDFhnrRtTxX])/g,c);}var i=h.replace(/%([aAbBCdegGHIjklmMpPsSuUVwWyYzZ%])/g,e);c=e=undefined;return i;}};YAHOO.namespace("YAHOO.util");YAHOO.util.Date=b;YAHOO.util.DateLocale={a:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],A:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],b:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],B:["January","February","March","April","May","June","July","August","September","October","November","December"],c:"%a %d %b %Y %T %Z",p:["AM","PM"],P:["am","pm"],r:"%I:%M:%S %p",x:"%d/%m/%y",X:"%T"};YAHOO.util.DateLocale["en"]=YAHOO.lang.merge(YAHOO.util.DateLocale,{});YAHOO.util.DateLocale["en-US"]=YAHOO.lang.merge(YAHOO.util.DateLocale["en"],{c:"%a %d %b %Y %I:%M:%S %p %Z",x:"%m/%d/%Y",X:"%I:%M:%S %p"});YAHOO.util.DateLocale["en-GB"]=YAHOO.lang.merge(YAHOO.util.DateLocale["en"],{r:"%l:%M:%S %P %Z"});YAHOO.util.DateLocale["en-AU"]=YAHOO.lang.merge(YAHOO.util.DateLocale["en"]);})();YAHOO.register("datasource",YAHOO.util.DataSource,{version:"2.9.0",build:"2800"});/*
 
Copyright (c) 2011, Yahoo! Inc. All rights reserved.
 
Code licensed under the BSD License:
 
http://developer.yahoo.com/yui/license.html
 
version: 2.9.0
 
*/
 
YAHOO.widget.DS_JSArray=YAHOO.util.LocalDataSource;YAHOO.widget.DS_JSFunction=YAHOO.util.FunctionDataSource;YAHOO.widget.DS_XHR=function(b,a,d){var c=new YAHOO.util.XHRDataSource(b,d);c._aDeprecatedSchema=a;return c;};YAHOO.widget.DS_ScriptNode=function(b,a,d){var c=new YAHOO.util.ScriptNodeDataSource(b,d);c._aDeprecatedSchema=a;return c;};YAHOO.widget.DS_XHR.TYPE_JSON=YAHOO.util.DataSourceBase.TYPE_JSON;YAHOO.widget.DS_XHR.TYPE_XML=YAHOO.util.DataSourceBase.TYPE_XML;YAHOO.widget.DS_XHR.TYPE_FLAT=YAHOO.util.DataSourceBase.TYPE_TEXT;YAHOO.widget.AutoComplete=function(g,b,j,c){if(g&&b&&j){if(j&&YAHOO.lang.isFunction(j.sendRequest)){this.dataSource=j;}else{return;}this.key=0;var d=j.responseSchema;if(j._aDeprecatedSchema){var k=j._aDeprecatedSchema;if(YAHOO.lang.isArray(k)){if((j.responseType===YAHOO.util.DataSourceBase.TYPE_JSON)||(j.responseType===YAHOO.util.DataSourceBase.TYPE_UNKNOWN)){d.resultsList=k[0];this.key=k[1];d.fields=(k.length<3)?null:k.slice(1);}else{if(j.responseType===YAHOO.util.DataSourceBase.TYPE_XML){d.resultNode=k[0];this.key=k[1];d.fields=k.slice(1);}else{if(j.responseType===YAHOO.util.DataSourceBase.TYPE_TEXT){d.recordDelim=k[0];d.fieldDelim=k[1];}}}j.responseSchema=d;}}if(YAHOO.util.Dom.inDocument(g)){if(YAHOO.lang.isString(g)){this._sName="instance"+YAHOO.widget.AutoComplete._nIndex+" "+g;this._elTextbox=document.getElementById(g);}else{this._sName=(g.id)?"instance"+YAHOO.widget.AutoComplete._nIndex+" "+g.id:"instance"+YAHOO.widget.AutoComplete._nIndex;this._elTextbox=g;}YAHOO.util.Dom.addClass(this._elTextbox,"yui-ac-input");}else{return;}if(YAHOO.util.Dom.inDocument(b)){if(YAHOO.lang.isString(b)){this._elContainer=document.getElementById(b);}else{this._elContainer=b;}if(this._elContainer.style.display=="none"){}var e=this._elContainer.parentNode;var a=e.tagName.toLowerCase();if(a=="div"){YAHOO.util.Dom.addClass(e,"yui-ac");}else{}}else{return;}if(this.dataSource.dataType===YAHOO.util.DataSourceBase.TYPE_LOCAL){this.applyLocalFilter=true;}if(c&&(c.constructor==Object)){for(var i in c){if(i){this[i]=c[i];}}}this._initContainerEl();this._initProps();this._initListEl();this._initContainerHelperEls();var h=this;var f=this._elTextbox;YAHOO.util.Event.addListener(f,"keyup",h._onTextboxKeyUp,h);YAHOO.util.Event.addListener(f,"keydown",h._onTextboxKeyDown,h);YAHOO.util.Event.addListener(f,"focus",h._onTextboxFocus,h);YAHOO.util.Event.addListener(f,"blur",h._onTextboxBlur,h);YAHOO.util.Event.addListener(b,"mouseover",h._onContainerMouseover,h);YAHOO.util.Event.addListener(b,"mouseout",h._onContainerMouseout,h);YAHOO.util.Event.addListener(b,"click",h._onContainerClick,h);YAHOO.util.Event.addListener(b,"scroll",h._onContainerScroll,h);YAHOO.util.Event.addListener(b,"resize",h._onContainerResize,h);YAHOO.util.Event.addListener(f,"keypress",h._onTextboxKeyPress,h);YAHOO.util.Event.addListener(window,"unload",h._onWindowUnload,h);this.textboxFocusEvent=new YAHOO.util.CustomEvent("textboxFocus",this);this.textboxKeyEvent=new YAHOO.util.CustomEvent("textboxKey",this);this.dataRequestEvent=new YAHOO.util.CustomEvent("dataRequest",this);this.dataRequestCancelEvent=new YAHOO.util.CustomEvent("dataRequestCancel",this);this.dataReturnEvent=new YAHOO.util.CustomEvent("dataReturn",this);this.dataErrorEvent=new YAHOO.util.CustomEvent("dataError",this);this.containerPopulateEvent=new YAHOO.util.CustomEvent("containerPopulate",this);this.containerExpandEvent=new YAHOO.util.CustomEvent("containerExpand",this);this.typeAheadEvent=new YAHOO.util.CustomEvent("typeAhead",this);this.itemMouseOverEvent=new YAHOO.util.CustomEvent("itemMouseOver",this);this.itemMouseOutEvent=new YAHOO.util.CustomEvent("itemMouseOut",this);this.itemArrowToEvent=new YAHOO.util.CustomEvent("itemArrowTo",this);this.itemArrowFromEvent=new YAHOO.util.CustomEvent("itemArrowFrom",this);this.itemSelectEvent=new YAHOO.util.CustomEvent("itemSelect",this);this.unmatchedItemSelectEvent=new YAHOO.util.CustomEvent("unmatchedItemSelect",this);this.selectionEnforceEvent=new YAHOO.util.CustomEvent("selectionEnforce",this);this.containerCollapseEvent=new YAHOO.util.CustomEvent("containerCollapse",this);this.textboxBlurEvent=new YAHOO.util.CustomEvent("textboxBlur",this);this.textboxChangeEvent=new YAHOO.util.CustomEvent("textboxChange",this);f.setAttribute("autocomplete","off");YAHOO.widget.AutoComplete._nIndex++;}else{}};YAHOO.widget.AutoComplete.prototype.dataSource=null;YAHOO.widget.AutoComplete.prototype.applyLocalFilter=null;YAHOO.widget.AutoComplete.prototype.queryMatchCase=false;YAHOO.widget.AutoComplete.prototype.queryMatchContains=false;YAHOO.widget.AutoComplete.prototype.queryMatchSubset=false;YAHOO.widget.AutoComplete.prototype.minQueryLength=1;YAHOO.widget.AutoComplete.prototype.maxResultsDisplayed=10;YAHOO.widget.AutoComplete.prototype.queryDelay=0.2;YAHOO.widget.AutoComplete.prototype.typeAheadDelay=0.5;YAHOO.widget.AutoComplete.prototype.queryInterval=500;YAHOO.widget.AutoComplete.prototype.highlightClassName="yui-ac-highlight";YAHOO.widget.AutoComplete.prototype.prehighlightClassName=null;YAHOO.widget.AutoComplete.prototype.delimChar=null;YAHOO.widget.AutoComplete.prototype.autoHighlight=true;YAHOO.widget.AutoComplete.prototype.typeAhead=false;YAHOO.widget.AutoComplete.prototype.animHoriz=false;YAHOO.widget.AutoComplete.prototype.animVert=true;YAHOO.widget.AutoComplete.prototype.animSpeed=0.3;YAHOO.widget.AutoComplete.prototype.forceSelection=false;YAHOO.widget.AutoComplete.prototype.allowBrowserAutocomplete=true;YAHOO.widget.AutoComplete.prototype.alwaysShowContainer=false;YAHOO.widget.AutoComplete.prototype.useIFrame=false;YAHOO.widget.AutoComplete.prototype.useShadow=false;YAHOO.widget.AutoComplete.prototype.suppressInputUpdate=false;YAHOO.widget.AutoComplete.prototype.resultTypeList=true;YAHOO.widget.AutoComplete.prototype.queryQuestionMark=true;YAHOO.widget.AutoComplete.prototype.autoSnapContainer=true;YAHOO.widget.AutoComplete.prototype.toString=function(){return"AutoComplete "+this._sName;};YAHOO.widget.AutoComplete.prototype.getInputEl=function(){return this._elTextbox;
 
};YAHOO.widget.AutoComplete.prototype.getContainerEl=function(){return this._elContainer;};YAHOO.widget.AutoComplete.prototype.isFocused=function(){return this._bFocused;};YAHOO.widget.AutoComplete.prototype.isContainerOpen=function(){return this._bContainerOpen;};YAHOO.widget.AutoComplete.prototype.getListEl=function(){return this._elList;};YAHOO.widget.AutoComplete.prototype.getListItemMatch=function(a){if(a._sResultMatch){return a._sResultMatch;}else{return null;}};YAHOO.widget.AutoComplete.prototype.getListItemData=function(a){if(a._oResultData){return a._oResultData;}else{return null;}};YAHOO.widget.AutoComplete.prototype.getListItemIndex=function(a){if(YAHOO.lang.isNumber(a._nItemIndex)){return a._nItemIndex;}else{return null;}};YAHOO.widget.AutoComplete.prototype.setHeader=function(b){if(this._elHeader){var a=this._elHeader;if(b){a.innerHTML=b;a.style.display="";}else{a.innerHTML="";a.style.display="none";}}};YAHOO.widget.AutoComplete.prototype.setFooter=function(b){if(this._elFooter){var a=this._elFooter;if(b){a.innerHTML=b;a.style.display="";}else{a.innerHTML="";a.style.display="none";}}};YAHOO.widget.AutoComplete.prototype.setBody=function(a){if(this._elBody){var b=this._elBody;YAHOO.util.Event.purgeElement(b,true);if(a){b.innerHTML=a;b.style.display="";}else{b.innerHTML="";b.style.display="none";}this._elList=null;}};YAHOO.widget.AutoComplete.prototype.generateRequest=function(b){var a=this.dataSource.dataType;if(a===YAHOO.util.DataSourceBase.TYPE_XHR){if(!this.dataSource.connMethodPost){b=(this.queryQuestionMark?"?":"")+(this.dataSource.scriptQueryParam||"query")+"="+b+(this.dataSource.scriptQueryAppend?("&"+this.dataSource.scriptQueryAppend):"");}else{b=(this.dataSource.scriptQueryParam||"query")+"="+b+(this.dataSource.scriptQueryAppend?("&"+this.dataSource.scriptQueryAppend):"");}}else{if(a===YAHOO.util.DataSourceBase.TYPE_SCRIPTNODE){b="&"+(this.dataSource.scriptQueryParam||"query")+"="+b+(this.dataSource.scriptQueryAppend?("&"+this.dataSource.scriptQueryAppend):"");}}return b;};YAHOO.widget.AutoComplete.prototype.sendQuery=function(b){this._bFocused=true;var a=(this.delimChar)?this._elTextbox.value+b:b;this._sendQuery(a);};YAHOO.widget.AutoComplete.prototype.snapContainer=function(){var a=this._elTextbox,b=YAHOO.util.Dom.getXY(a);b[1]+=YAHOO.util.Dom.get(a).offsetHeight+2;YAHOO.util.Dom.setXY(this._elContainer,b);};YAHOO.widget.AutoComplete.prototype.expandContainer=function(){this._toggleContainer(true);};YAHOO.widget.AutoComplete.prototype.collapseContainer=function(){this._toggleContainer(false);};YAHOO.widget.AutoComplete.prototype.clearList=function(){var b=this._elList.childNodes,a=b.length-1;for(;a>-1;a--){b[a].style.display="none";}};YAHOO.widget.AutoComplete.prototype.getSubsetMatches=function(e){var d,c,a;for(var b=e.length;b>=this.minQueryLength;b--){a=this.generateRequest(e.substr(0,b));this.dataRequestEvent.fire(this,d,a);c=this.dataSource.getCachedResponse(a);if(c){return this.filterResults.apply(this.dataSource,[e,c,c,{scope:this}]);}}return null;};YAHOO.widget.AutoComplete.prototype.preparseRawResponse=function(c,b,a){var d=((this.responseStripAfter!=="")&&(b.indexOf))?b.indexOf(this.responseStripAfter):-1;if(d!=-1){b=b.substring(0,d);}return b;};YAHOO.widget.AutoComplete.prototype.filterResults=function(l,n,r,m){if(m&&m.argument&&YAHOO.lang.isValue(m.argument.query)){l=m.argument.query;}if(l&&l!==""){r=YAHOO.widget.AutoComplete._cloneObject(r);var j=m.scope,q=this,c=r.results,o=[],b=j.maxResultsDisplayed,k=(q.queryMatchCase||j.queryMatchCase),a=(q.queryMatchContains||j.queryMatchContains);for(var d=0,h=c.length;d<h;d++){var f=c[d];var e=null;if(YAHOO.lang.isString(f)){e=f;}else{if(YAHOO.lang.isArray(f)){e=f[0];}else{if(this.responseSchema.fields){var p=this.responseSchema.fields[0].key||this.responseSchema.fields[0];e=f[p];}else{if(this.key){e=f[this.key];}}}}if(YAHOO.lang.isString(e)){var g=(k)?e.indexOf(decodeURIComponent(l)):e.toLowerCase().indexOf(decodeURIComponent(l).toLowerCase());if((!a&&(g===0))||(a&&(g>-1))){o.push(f);}}if(h>b&&o.length===b){break;}}r.results=o;}else{}return r;};YAHOO.widget.AutoComplete.prototype.handleResponse=function(c,a,b){if((this instanceof YAHOO.widget.AutoComplete)&&this._sName){this._populateList(c,a,b);}};YAHOO.widget.AutoComplete.prototype.doBeforeLoadData=function(c,a,b){return true;};YAHOO.widget.AutoComplete.prototype.formatResult=function(b,d,a){var c=(a)?a:"";return c;};YAHOO.widget.AutoComplete.prototype.formatEscapedResult=function(c,d,b){var a=(b)?b:"";return YAHOO.lang.escapeHTML(a);};YAHOO.widget.AutoComplete.prototype.doBeforeExpandContainer=function(d,a,c,b){return true;};YAHOO.widget.AutoComplete.prototype.destroy=function(){var b=this.toString();var a=this._elTextbox;var d=this._elContainer;this.textboxFocusEvent.unsubscribeAll();this.textboxKeyEvent.unsubscribeAll();this.dataRequestEvent.unsubscribeAll();this.dataReturnEvent.unsubscribeAll();this.dataErrorEvent.unsubscribeAll();this.containerPopulateEvent.unsubscribeAll();this.containerExpandEvent.unsubscribeAll();this.typeAheadEvent.unsubscribeAll();this.itemMouseOverEvent.unsubscribeAll();this.itemMouseOutEvent.unsubscribeAll();this.itemArrowToEvent.unsubscribeAll();this.itemArrowFromEvent.unsubscribeAll();this.itemSelectEvent.unsubscribeAll();this.unmatchedItemSelectEvent.unsubscribeAll();this.selectionEnforceEvent.unsubscribeAll();this.containerCollapseEvent.unsubscribeAll();this.textboxBlurEvent.unsubscribeAll();this.textboxChangeEvent.unsubscribeAll();YAHOO.util.Event.purgeElement(a,true);YAHOO.util.Event.purgeElement(d,true);d.innerHTML="";for(var c in this){if(YAHOO.lang.hasOwnProperty(this,c)){this[c]=null;}}};YAHOO.widget.AutoComplete.prototype.textboxFocusEvent=null;YAHOO.widget.AutoComplete.prototype.textboxKeyEvent=null;YAHOO.widget.AutoComplete.prototype.dataRequestEvent=null;YAHOO.widget.AutoComplete.prototype.dataRequestCancelEvent=null;YAHOO.widget.AutoComplete.prototype.dataReturnEvent=null;YAHOO.widget.AutoComplete.prototype.dataErrorEvent=null;
 
YAHOO.widget.AutoComplete.prototype.containerPopulateEvent=null;YAHOO.widget.AutoComplete.prototype.containerExpandEvent=null;YAHOO.widget.AutoComplete.prototype.typeAheadEvent=null;YAHOO.widget.AutoComplete.prototype.itemMouseOverEvent=null;YAHOO.widget.AutoComplete.prototype.itemMouseOutEvent=null;YAHOO.widget.AutoComplete.prototype.itemArrowToEvent=null;YAHOO.widget.AutoComplete.prototype.itemArrowFromEvent=null;YAHOO.widget.AutoComplete.prototype.itemSelectEvent=null;YAHOO.widget.AutoComplete.prototype.unmatchedItemSelectEvent=null;YAHOO.widget.AutoComplete.prototype.selectionEnforceEvent=null;YAHOO.widget.AutoComplete.prototype.containerCollapseEvent=null;YAHOO.widget.AutoComplete.prototype.textboxBlurEvent=null;YAHOO.widget.AutoComplete.prototype.textboxChangeEvent=null;YAHOO.widget.AutoComplete._nIndex=0;YAHOO.widget.AutoComplete.prototype._sName=null;YAHOO.widget.AutoComplete.prototype._elTextbox=null;YAHOO.widget.AutoComplete.prototype._elContainer=null;YAHOO.widget.AutoComplete.prototype._elContent=null;YAHOO.widget.AutoComplete.prototype._elHeader=null;YAHOO.widget.AutoComplete.prototype._elBody=null;YAHOO.widget.AutoComplete.prototype._elFooter=null;YAHOO.widget.AutoComplete.prototype._elShadow=null;YAHOO.widget.AutoComplete.prototype._elIFrame=null;YAHOO.widget.AutoComplete.prototype._bFocused=false;YAHOO.widget.AutoComplete.prototype._oAnim=null;YAHOO.widget.AutoComplete.prototype._bContainerOpen=false;YAHOO.widget.AutoComplete.prototype._bOverContainer=false;YAHOO.widget.AutoComplete.prototype._elList=null;YAHOO.widget.AutoComplete.prototype._nDisplayedItems=0;YAHOO.widget.AutoComplete.prototype._sCurQuery=null;YAHOO.widget.AutoComplete.prototype._sPastSelections="";YAHOO.widget.AutoComplete.prototype._sInitInputValue=null;YAHOO.widget.AutoComplete.prototype._elCurListItem=null;YAHOO.widget.AutoComplete.prototype._elCurPrehighlightItem=null;YAHOO.widget.AutoComplete.prototype._bItemSelected=false;YAHOO.widget.AutoComplete.prototype._nKeyCode=null;YAHOO.widget.AutoComplete.prototype._nDelayID=-1;YAHOO.widget.AutoComplete.prototype._nTypeAheadDelayID=-1;YAHOO.widget.AutoComplete.prototype._iFrameSrc="javascript:false;";YAHOO.widget.AutoComplete.prototype._queryInterval=null;YAHOO.widget.AutoComplete.prototype._sLastTextboxValue=null;YAHOO.widget.AutoComplete.prototype._initProps=function(){var b=this.minQueryLength;if(!YAHOO.lang.isNumber(b)){this.minQueryLength=1;}var e=this.maxResultsDisplayed;if(!YAHOO.lang.isNumber(e)||(e<1)){this.maxResultsDisplayed=10;}var f=this.queryDelay;if(!YAHOO.lang.isNumber(f)||(f<0)){this.queryDelay=0.2;}var c=this.typeAheadDelay;if(!YAHOO.lang.isNumber(c)||(c<0)){this.typeAheadDelay=0.2;}var a=this.delimChar;if(YAHOO.lang.isString(a)&&(a.length>0)){this.delimChar=[a];}else{if(!YAHOO.lang.isArray(a)){this.delimChar=null;}}var d=this.animSpeed;if((this.animHoriz||this.animVert)&&YAHOO.util.Anim){if(!YAHOO.lang.isNumber(d)||(d<0)){this.animSpeed=0.3;}if(!this._oAnim){this._oAnim=new YAHOO.util.Anim(this._elContent,{},this.animSpeed);}else{this._oAnim.duration=this.animSpeed;}}if(this.forceSelection&&a){}};YAHOO.widget.AutoComplete.prototype._initContainerHelperEls=function(){if(this.useShadow&&!this._elShadow){var a=document.createElement("div");a.className="yui-ac-shadow";a.style.width=0;a.style.height=0;this._elShadow=this._elContainer.appendChild(a);}if(this.useIFrame&&!this._elIFrame){var b=document.createElement("iframe");b.src=this._iFrameSrc;b.frameBorder=0;b.scrolling="no";b.style.position="absolute";b.style.width=0;b.style.height=0;b.style.padding=0;b.tabIndex=-1;b.role="presentation";b.title="Presentational iframe shim";this._elIFrame=this._elContainer.appendChild(b);}};YAHOO.widget.AutoComplete.prototype._initContainerEl=function(){YAHOO.util.Dom.addClass(this._elContainer,"yui-ac-container");if(!this._elContent){var c=document.createElement("div");c.className="yui-ac-content";c.style.display="none";this._elContent=this._elContainer.appendChild(c);var b=document.createElement("div");b.className="yui-ac-hd";b.style.display="none";this._elHeader=this._elContent.appendChild(b);var d=document.createElement("div");d.className="yui-ac-bd";this._elBody=this._elContent.appendChild(d);var a=document.createElement("div");a.className="yui-ac-ft";a.style.display="none";this._elFooter=this._elContent.appendChild(a);}else{}};YAHOO.widget.AutoComplete.prototype._initListEl=function(){var c=this.maxResultsDisplayed,a=this._elList||document.createElement("ul"),b;while(a.childNodes.length<c){b=document.createElement("li");b.style.display="none";b._nItemIndex=a.childNodes.length;a.appendChild(b);}if(!this._elList){var d=this._elBody;YAHOO.util.Event.purgeElement(d,true);d.innerHTML="";this._elList=d.appendChild(a);}this._elBody.style.display="";};YAHOO.widget.AutoComplete.prototype._focus=function(){var a=this;setTimeout(function(){try{a._elTextbox.focus();}catch(b){}},0);};YAHOO.widget.AutoComplete.prototype._enableIntervalDetection=function(){var a=this;if(!a._queryInterval&&a.queryInterval){a._queryInterval=setInterval(function(){a._onInterval();},a.queryInterval);}};YAHOO.widget.AutoComplete.prototype.enableIntervalDetection=YAHOO.widget.AutoComplete.prototype._enableIntervalDetection;YAHOO.widget.AutoComplete.prototype._onInterval=function(){var a=this._elTextbox.value;var b=this._sLastTextboxValue;if(a!=b){this._sLastTextboxValue=a;this._sendQuery(a);}};YAHOO.widget.AutoComplete.prototype._clearInterval=function(){if(this._queryInterval){clearInterval(this._queryInterval);this._queryInterval=null;}};YAHOO.widget.AutoComplete.prototype._isIgnoreKey=function(a){if((a==9)||(a==13)||(a==16)||(a==17)||(a>=18&&a<=20)||(a==27)||(a>=33&&a<=35)||(a>=36&&a<=40)||(a>=44&&a<=45)||(a==229)){return true;}return false;};YAHOO.widget.AutoComplete.prototype._sendQuery=function(d){if(this.minQueryLength<0){this._toggleContainer(false);return;}if(this.delimChar){var a=this._extractQuery(d);d=a.query;this._sPastSelections=a.previous;}if((d&&(d.length<this.minQueryLength))||(!d&&this.minQueryLength>0)){if(this._nDelayID!=-1){clearTimeout(this._nDelayID);
 
}this._toggleContainer(false);return;}d=encodeURIComponent(d);this._nDelayID=-1;if(this.dataSource.queryMatchSubset||this.queryMatchSubset){var c=this.getSubsetMatches(d);if(c){this.handleResponse(d,c,{query:d});return;}}if(this.dataSource.responseStripAfter){this.dataSource.doBeforeParseData=this.preparseRawResponse;}if(this.applyLocalFilter){this.dataSource.doBeforeCallback=this.filterResults;}var b=this.generateRequest(d);if(b!==undefined){this.dataRequestEvent.fire(this,d,b);this.dataSource.sendRequest(b,{success:this.handleResponse,failure:this.handleResponse,scope:this,argument:{query:d}});}else{this.dataRequestCancelEvent.fire(this,d);}};YAHOO.widget.AutoComplete.prototype._populateListItem=function(b,a,c){b.innerHTML=this.formatResult(a,c,b._sResultMatch);};YAHOO.widget.AutoComplete.prototype._populateList=function(n,f,c){if(this._nTypeAheadDelayID!=-1){clearTimeout(this._nTypeAheadDelayID);}n=(c&&c.query)?c.query:n;var h=this.doBeforeLoadData(n,f,c);if(h&&!f.error){this.dataReturnEvent.fire(this,n,f.results);if(this._bFocused){var p=decodeURIComponent(n);this._sCurQuery=p;this._bItemSelected=false;var u=f.results,a=Math.min(u.length,this.maxResultsDisplayed),m=(this.dataSource.responseSchema.fields)?(this.dataSource.responseSchema.fields[0].key||this.dataSource.responseSchema.fields[0]):0;if(a>0){if(!this._elList||(this._elList.childNodes.length<a)){this._initListEl();}this._initContainerHelperEls();var l=this._elList.childNodes;for(var t=a-1;t>=0;t--){var s=l[t],e=u[t];if(this.resultTypeList){var b=[];b[0]=(YAHOO.lang.isString(e))?e:e[m]||e[this.key];var o=this.dataSource.responseSchema.fields;if(YAHOO.lang.isArray(o)&&(o.length>1)){for(var q=1,v=o.length;q<v;q++){b[b.length]=e[o[q].key||o[q]];}}else{if(YAHOO.lang.isArray(e)){b=e;}else{if(YAHOO.lang.isString(e)){b=[e];}else{b[1]=e;}}}e=b;}s._sResultMatch=(YAHOO.lang.isString(e))?e:(YAHOO.lang.isArray(e))?e[0]:(e[m]||"");s._oResultData=e;this._populateListItem(s,e,p);s.style.display="";}if(a<l.length){var g;for(var r=l.length-1;r>=a;r--){g=l[r];g.style.display="none";}}this._nDisplayedItems=a;this.containerPopulateEvent.fire(this,n,u);if(this.autoHighlight){var d=this._elList.firstChild;this._toggleHighlight(d,"to");this.itemArrowToEvent.fire(this,d);this._typeAhead(d,n);}else{this._toggleHighlight(this._elCurListItem,"from");}h=this._doBeforeExpandContainer(this._elTextbox,this._elContainer,n,u);this._toggleContainer(h);}else{this._toggleContainer(false);}return;}}else{this.dataErrorEvent.fire(this,n,f);}};YAHOO.widget.AutoComplete.prototype._doBeforeExpandContainer=function(d,a,c,b){if(this.autoSnapContainer){this.snapContainer();}return this.doBeforeExpandContainer(d,a,c,b);};YAHOO.widget.AutoComplete.prototype._clearSelection=function(){var a=(this.delimChar)?this._extractQuery(this._elTextbox.value):{previous:"",query:this._elTextbox.value};this._elTextbox.value=a.previous;this.selectionEnforceEvent.fire(this,a.query);};YAHOO.widget.AutoComplete.prototype._textMatchesOption=function(){var a=null;for(var b=0;b<this._nDisplayedItems;b++){var c=this._elList.childNodes[b];var d=(""+c._sResultMatch).toLowerCase();if(d==this._sCurQuery.toLowerCase()){a=c;break;}}return(a);};YAHOO.widget.AutoComplete.prototype._typeAhead=function(b,d){if(!this.typeAhead||(this._nKeyCode==8)){return;}var a=this,c=this._elTextbox;if(c.setSelectionRange||c.createTextRange){this._nTypeAheadDelayID=setTimeout(function(){var f=c.value.length;a._updateValue(b);var g=c.value.length;a._selectText(c,f,g);var e=c.value.substr(f,g);a._sCurQuery=b._sResultMatch;a.typeAheadEvent.fire(a,d,e);},(this.typeAheadDelay*1000));}};YAHOO.widget.AutoComplete.prototype._selectText=function(d,a,b){if(d.setSelectionRange){d.setSelectionRange(a,b);}else{if(d.createTextRange){var c=d.createTextRange();c.moveStart("character",a);c.moveEnd("character",b-d.value.length);c.select();}else{d.select();}}};YAHOO.widget.AutoComplete.prototype._extractQuery=function(h){var c=this.delimChar,f=-1,g,e,b=c.length-1,d;for(;b>=0;b--){g=h.lastIndexOf(c[b]);if(g>f){f=g;}}if(c[b]==" "){for(var a=c.length-1;a>=0;a--){if(h[f-1]==c[a]){f--;break;}}}if(f>-1){e=f+1;while(h.charAt(e)==" "){e+=1;}d=h.substring(0,e);h=h.substr(e);}else{d="";}return{previous:d,query:h};};YAHOO.widget.AutoComplete.prototype._toggleContainerHelpers=function(d){var e=this._elContent.offsetWidth+"px";var b=this._elContent.offsetHeight+"px";if(this.useIFrame&&this._elIFrame){var c=this._elIFrame;if(d){c.style.width=e;c.style.height=b;c.style.padding="";}else{c.style.width=0;c.style.height=0;c.style.padding=0;}}if(this.useShadow&&this._elShadow){var a=this._elShadow;if(d){a.style.width=e;a.style.height=b;}else{a.style.width=0;a.style.height=0;}}};YAHOO.widget.AutoComplete.prototype._toggleContainer=function(i){var d=this._elContainer;if(this.alwaysShowContainer&&this._bContainerOpen){return;}if(!i){this._toggleHighlight(this._elCurListItem,"from");this._nDisplayedItems=0;this._sCurQuery=null;if(this._elContent.style.display=="none"){return;}}var a=this._oAnim;if(a&&a.getEl()&&(this.animHoriz||this.animVert)){if(a.isAnimated()){a.stop(true);}var g=this._elContent.cloneNode(true);d.appendChild(g);g.style.top="-9000px";g.style.width="";g.style.height="";g.style.display="";var f=g.offsetWidth;var c=g.offsetHeight;var b=(this.animHoriz)?0:f;var e=(this.animVert)?0:c;a.attributes=(i)?{width:{to:f},height:{to:c}}:{width:{to:b},height:{to:e}};if(i&&!this._bContainerOpen){this._elContent.style.width=b+"px";this._elContent.style.height=e+"px";}else{this._elContent.style.width=f+"px";this._elContent.style.height=c+"px";}d.removeChild(g);g=null;var h=this;var j=function(){a.onComplete.unsubscribeAll();if(i){h._toggleContainerHelpers(true);h._bContainerOpen=i;h.containerExpandEvent.fire(h);}else{h._elContent.style.display="none";h._bContainerOpen=i;h.containerCollapseEvent.fire(h);}};this._toggleContainerHelpers(false);this._elContent.style.display="";a.onComplete.subscribe(j);a.animate();}else{if(i){this._elContent.style.display="";this._toggleContainerHelpers(true);
 
this._bContainerOpen=i;this.containerExpandEvent.fire(this);}else{this._toggleContainerHelpers(false);this._elContent.style.display="none";this._bContainerOpen=i;this.containerCollapseEvent.fire(this);}}};YAHOO.widget.AutoComplete.prototype._toggleHighlight=function(a,c){if(a){var b=this.highlightClassName;if(this._elCurListItem){YAHOO.util.Dom.removeClass(this._elCurListItem,b);this._elCurListItem=null;}if((c=="to")&&b){YAHOO.util.Dom.addClass(a,b);this._elCurListItem=a;}}};YAHOO.widget.AutoComplete.prototype._togglePrehighlight=function(b,c){var a=this.prehighlightClassName;if(this._elCurPrehighlightItem){YAHOO.util.Dom.removeClass(this._elCurPrehighlightItem,a);}if(b==this._elCurListItem){return;}if((c=="mouseover")&&a){YAHOO.util.Dom.addClass(b,a);this._elCurPrehighlightItem=b;}else{YAHOO.util.Dom.removeClass(b,a);}};YAHOO.widget.AutoComplete.prototype._updateValue=function(c){if(!this.suppressInputUpdate){var f=this._elTextbox;var e=(this.delimChar)?(this.delimChar[0]||this.delimChar):null;var b=c._sResultMatch;var d="";if(e){d=this._sPastSelections;d+=b+e;if(e!=" "){d+=" ";}}else{d=b;}f.value=d;if(f.type=="textarea"){f.scrollTop=f.scrollHeight;}var a=f.value.length;this._selectText(f,a,a);this._elCurListItem=c;}};YAHOO.widget.AutoComplete.prototype._selectItem=function(a){this._bItemSelected=true;this._updateValue(a);this._sPastSelections=this._elTextbox.value;this._clearInterval();this.itemSelectEvent.fire(this,a,a._oResultData);this._toggleContainer(false);};YAHOO.widget.AutoComplete.prototype._jumpSelection=function(){if(this._elCurListItem){this._selectItem(this._elCurListItem);}else{this._toggleContainer(false);}};YAHOO.widget.AutoComplete.prototype._moveSelection=function(g){if(this._bContainerOpen){var h=this._elCurListItem,d=-1;if(h){d=h._nItemIndex;}var e=(g==40)?(d+1):(d-1);if(e<-2||e>=this._nDisplayedItems){return;}if(h){this._toggleHighlight(h,"from");this.itemArrowFromEvent.fire(this,h);}if(e==-1){if(this.delimChar){this._elTextbox.value=this._sPastSelections+this._sCurQuery;}else{this._elTextbox.value=this._sCurQuery;}return;}if(e==-2){this._toggleContainer(false);return;}var f=this._elList.childNodes[e],b=this._elContent,c=YAHOO.util.Dom.getStyle(b,"overflow"),i=YAHOO.util.Dom.getStyle(b,"overflowY"),a=((c=="auto")||(c=="scroll")||(i=="auto")||(i=="scroll"));if(a&&(e>-1)&&(e<this._nDisplayedItems)){if(g==40){if((f.offsetTop+f.offsetHeight)>(b.scrollTop+b.offsetHeight)){b.scrollTop=(f.offsetTop+f.offsetHeight)-b.offsetHeight;}else{if((f.offsetTop+f.offsetHeight)<b.scrollTop){b.scrollTop=f.offsetTop;}}}else{if(f.offsetTop<b.scrollTop){this._elContent.scrollTop=f.offsetTop;}else{if(f.offsetTop>(b.scrollTop+b.offsetHeight)){this._elContent.scrollTop=(f.offsetTop+f.offsetHeight)-b.offsetHeight;}}}}this._toggleHighlight(f,"to");this.itemArrowToEvent.fire(this,f);if(this.typeAhead){this._updateValue(f);this._sCurQuery=f._sResultMatch;}}};YAHOO.widget.AutoComplete.prototype._onContainerMouseover=function(a,c){var d=YAHOO.util.Event.getTarget(a);var b=d.nodeName.toLowerCase();while(d&&(b!="table")){switch(b){case"body":return;case"li":if(c.prehighlightClassName){c._togglePrehighlight(d,"mouseover");}else{c._toggleHighlight(d,"to");}c.itemMouseOverEvent.fire(c,d);break;case"div":if(YAHOO.util.Dom.hasClass(d,"yui-ac-container")){c._bOverContainer=true;return;}break;default:break;}d=d.parentNode;if(d){b=d.nodeName.toLowerCase();}}};YAHOO.widget.AutoComplete.prototype._onContainerMouseout=function(a,c){var d=YAHOO.util.Event.getTarget(a);var b=d.nodeName.toLowerCase();while(d&&(b!="table")){switch(b){case"body":return;case"li":if(c.prehighlightClassName){c._togglePrehighlight(d,"mouseout");}else{c._toggleHighlight(d,"from");}c.itemMouseOutEvent.fire(c,d);break;case"ul":c._toggleHighlight(c._elCurListItem,"to");break;case"div":if(YAHOO.util.Dom.hasClass(d,"yui-ac-container")){c._bOverContainer=false;return;}break;default:break;}d=d.parentNode;if(d){b=d.nodeName.toLowerCase();}}};YAHOO.widget.AutoComplete.prototype._onContainerClick=function(a,c){var d=YAHOO.util.Event.getTarget(a);var b=d.nodeName.toLowerCase();while(d&&(b!="table")){switch(b){case"body":return;case"li":c._toggleHighlight(d,"to");c._selectItem(d);return;default:break;}d=d.parentNode;if(d){b=d.nodeName.toLowerCase();}}};YAHOO.widget.AutoComplete.prototype._onContainerScroll=function(a,b){b._focus();};YAHOO.widget.AutoComplete.prototype._onContainerResize=function(a,b){b._toggleContainerHelpers(b._bContainerOpen);};YAHOO.widget.AutoComplete.prototype._onTextboxKeyDown=function(a,b){var c=a.keyCode;if(b._nTypeAheadDelayID!=-1){clearTimeout(b._nTypeAheadDelayID);}switch(c){case 9:if(!YAHOO.env.ua.opera&&(navigator.userAgent.toLowerCase().indexOf("mac")==-1)||(YAHOO.env.ua.webkit>420)){if(b._elCurListItem){if(b.delimChar&&(b._nKeyCode!=c)){if(b._bContainerOpen){YAHOO.util.Event.stopEvent(a);}}b._selectItem(b._elCurListItem);}else{b._toggleContainer(false);}}break;case 13:if(!YAHOO.env.ua.opera&&(navigator.userAgent.toLowerCase().indexOf("mac")==-1)||(YAHOO.env.ua.webkit>420)){if(b._elCurListItem){if(b._nKeyCode!=c){if(b._bContainerOpen){YAHOO.util.Event.stopEvent(a);}}b._selectItem(b._elCurListItem);}else{b._toggleContainer(false);}}break;case 27:b._toggleContainer(false);return;case 39:b._jumpSelection();break;case 38:if(b._bContainerOpen){YAHOO.util.Event.stopEvent(a);b._moveSelection(c);}break;case 40:if(b._bContainerOpen){YAHOO.util.Event.stopEvent(a);b._moveSelection(c);}break;default:b._bItemSelected=false;b._toggleHighlight(b._elCurListItem,"from");b.textboxKeyEvent.fire(b,c);break;}if(c===18){b._enableIntervalDetection();}b._nKeyCode=c;};YAHOO.widget.AutoComplete.prototype._onTextboxKeyPress=function(a,b){var c=a.keyCode;if(YAHOO.env.ua.opera||(navigator.userAgent.toLowerCase().indexOf("mac")!=-1)&&(YAHOO.env.ua.webkit<420)){switch(c){case 9:if(b._bContainerOpen){if(b.delimChar){YAHOO.util.Event.stopEvent(a);}if(b._elCurListItem){b._selectItem(b._elCurListItem);}else{b._toggleContainer(false);}}break;case 13:if(b._bContainerOpen){YAHOO.util.Event.stopEvent(a);
 
if(b._elCurListItem){b._selectItem(b._elCurListItem);}else{b._toggleContainer(false);}}break;default:break;}}else{if(c==229){b._enableIntervalDetection();}}};YAHOO.widget.AutoComplete.prototype._onTextboxKeyUp=function(a,c){var b=this.value;c._initProps();var d=a.keyCode;if(c._isIgnoreKey(d)){return;}if(c._nDelayID!=-1){clearTimeout(c._nDelayID);}c._nDelayID=setTimeout(function(){c._sendQuery(b);},(c.queryDelay*1000));};YAHOO.widget.AutoComplete.prototype._onTextboxFocus=function(a,b){if(!b._bFocused){b._elTextbox.setAttribute("autocomplete","off");b._bFocused=true;b._sInitInputValue=b._elTextbox.value;b.textboxFocusEvent.fire(b);}};YAHOO.widget.AutoComplete.prototype._onTextboxBlur=function(a,c){if(!c._bOverContainer||(c._nKeyCode==9)){if(!c._bItemSelected){var b=c._textMatchesOption();if(!c._bContainerOpen||(c._bContainerOpen&&(b===null))){if(c.forceSelection){c._clearSelection();}else{c.unmatchedItemSelectEvent.fire(c,c._sCurQuery);}}else{if(c.forceSelection){c._selectItem(b);}}}c._clearInterval();c._bFocused=false;if(c._sInitInputValue!==c._elTextbox.value){c.textboxChangeEvent.fire(c);}c.textboxBlurEvent.fire(c);c._toggleContainer(false);}else{c._focus();}};YAHOO.widget.AutoComplete.prototype._onWindowUnload=function(a,b){if(b&&b._elTextbox&&b.allowBrowserAutocomplete){b._elTextbox.setAttribute("autocomplete","on");}};YAHOO.widget.AutoComplete.prototype.doBeforeSendQuery=function(a){return this.generateRequest(a);};YAHOO.widget.AutoComplete.prototype.getListItems=function(){var c=[],b=this._elList.childNodes;for(var a=b.length-1;a>=0;a--){c[a]=b[a];}return c;};YAHOO.widget.AutoComplete._cloneObject=function(d){if(!YAHOO.lang.isValue(d)){return d;}var f={};if(YAHOO.lang.isFunction(d)){f=d;}else{if(YAHOO.lang.isArray(d)){var e=[];for(var c=0,b=d.length;c<b;c++){e[c]=YAHOO.widget.AutoComplete._cloneObject(d[c]);}f=e;}else{if(YAHOO.lang.isObject(d)){for(var a in d){if(YAHOO.lang.hasOwnProperty(d,a)){if(YAHOO.lang.isValue(d[a])&&YAHOO.lang.isObject(d[a])||YAHOO.lang.isArray(d[a])){f[a]=YAHOO.widget.AutoComplete._cloneObject(d[a]);}else{f[a]=d[a];}}}}else{f=d;}}}return f;};YAHOO.register("autocomplete",YAHOO.widget.AutoComplete,{version:"2.9.0",build:"2800"});/*
 
Copyright (c) 2011, Yahoo! Inc. All rights reserved.
 
Code licensed under the BSD License:
 
http://developer.yahoo.com/yui/license.html
 
version: 2.9.0
 
*/
 
(function(){YAHOO.util.Config=function(d){if(d){this.init(d);}};var b=YAHOO.lang,c=YAHOO.util.CustomEvent,a=YAHOO.util.Config;a.CONFIG_CHANGED_EVENT="configChanged";a.BOOLEAN_TYPE="boolean";a.prototype={owner:null,queueInProgress:false,config:null,initialConfig:null,eventQueue:null,configChangedEvent:null,init:function(d){this.owner=d;this.configChangedEvent=this.createEvent(a.CONFIG_CHANGED_EVENT);this.configChangedEvent.signature=c.LIST;this.queueInProgress=false;this.config={};this.initialConfig={};this.eventQueue=[];},checkBoolean:function(d){return(typeof d==a.BOOLEAN_TYPE);},checkNumber:function(d){return(!isNaN(d));},fireEvent:function(d,f){var e=this.config[d];if(e&&e.event){e.event.fire(f);}},addProperty:function(e,d){e=e.toLowerCase();this.config[e]=d;d.event=this.createEvent(e,{scope:this.owner});d.event.signature=c.LIST;d.key=e;if(d.handler){d.event.subscribe(d.handler,this.owner);}this.setProperty(e,d.value,true);if(!d.suppressEvent){this.queueProperty(e,d.value);}},getConfig:function(){var d={},f=this.config,g,e;for(g in f){if(b.hasOwnProperty(f,g)){e=f[g];if(e&&e.event){d[g]=e.value;}}}return d;},getProperty:function(d){var e=this.config[d.toLowerCase()];if(e&&e.event){return e.value;}else{return undefined;}},resetProperty:function(d){d=d.toLowerCase();var e=this.config[d];if(e&&e.event){if(d in this.initialConfig){this.setProperty(d,this.initialConfig[d]);return true;}}else{return false;}},setProperty:function(e,g,d){var f;e=e.toLowerCase();if(this.queueInProgress&&!d){this.queueProperty(e,g);return true;}else{f=this.config[e];if(f&&f.event){if(f.validator&&!f.validator(g)){return false;}else{f.value=g;if(!d){this.fireEvent(e,g);this.configChangedEvent.fire([e,g]);}return true;}}else{return false;}}},queueProperty:function(v,r){v=v.toLowerCase();var u=this.config[v],l=false,k,g,h,j,p,t,f,n,o,d,m,w,e;if(u&&u.event){if(!b.isUndefined(r)&&u.validator&&!u.validator(r)){return false;}else{if(!b.isUndefined(r)){u.value=r;}else{r=u.value;}l=false;k=this.eventQueue.length;for(m=0;m<k;m++){g=this.eventQueue[m];if(g){h=g[0];j=g[1];if(h==v){this.eventQueue[m]=null;this.eventQueue.push([v,(!b.isUndefined(r)?r:j)]);l=true;break;}}}if(!l&&!b.isUndefined(r)){this.eventQueue.push([v,r]);}}if(u.supercedes){p=u.supercedes.length;for(w=0;w<p;w++){t=u.supercedes[w];f=this.eventQueue.length;for(e=0;e<f;e++){n=this.eventQueue[e];if(n){o=n[0];d=n[1];if(o==t.toLowerCase()){this.eventQueue.push([o,d]);this.eventQueue[e]=null;break;}}}}}return true;}else{return false;}},refireEvent:function(d){d=d.toLowerCase();var e=this.config[d];if(e&&e.event&&!b.isUndefined(e.value)){if(this.queueInProgress){this.queueProperty(d);}else{this.fireEvent(d,e.value);}}},applyConfig:function(d,g){var f,e;if(g){e={};for(f in d){if(b.hasOwnProperty(d,f)){e[f.toLowerCase()]=d[f];}}this.initialConfig=e;}for(f in d){if(b.hasOwnProperty(d,f)){this.queueProperty(f,d[f]);}}},refresh:function(){var d;for(d in this.config){if(b.hasOwnProperty(this.config,d)){this.refireEvent(d);}}},fireQueue:function(){var e,h,d,g,f;this.queueInProgress=true;for(e=0;e<this.eventQueue.length;e++){h=this.eventQueue[e];if(h){d=h[0];g=h[1];f=this.config[d];f.value=g;this.eventQueue[e]=null;this.fireEvent(d,g);}}this.queueInProgress=false;this.eventQueue=[];},subscribeToConfigEvent:function(d,e,g,h){var f=this.config[d.toLowerCase()];if(f&&f.event){if(!a.alreadySubscribed(f.event,e,g)){f.event.subscribe(e,g,h);}return true;}else{return false;}},unsubscribeFromConfigEvent:function(d,e,g){var f=this.config[d.toLowerCase()];if(f&&f.event){return f.event.unsubscribe(e,g);}else{return false;}},toString:function(){var d="Config";if(this.owner){d+=" ["+this.owner.toString()+"]";}return d;},outputEventQueue:function(){var d="",g,e,f=this.eventQueue.length;for(e=0;e<f;e++){g=this.eventQueue[e];if(g){d+=g[0]+"="+g[1]+", ";}}return d;},destroy:function(){var e=this.config,d,f;for(d in e){if(b.hasOwnProperty(e,d)){f=e[d];f.event.unsubscribeAll();f.event=null;}}this.configChangedEvent.unsubscribeAll();this.configChangedEvent=null;this.owner=null;this.config=null;this.initialConfig=null;this.eventQueue=null;}};a.alreadySubscribed=function(e,h,j){var f=e.subscribers.length,d,g;if(f>0){g=f-1;do{d=e.subscribers[g];if(d&&d.obj==j&&d.fn==h){return true;}}while(g--);}return false;};YAHOO.lang.augmentProto(a,YAHOO.util.EventProvider);}());(function(){YAHOO.widget.Module=function(r,q){if(r){this.init(r,q);}else{}};var f=YAHOO.util.Dom,d=YAHOO.util.Config,n=YAHOO.util.Event,m=YAHOO.util.CustomEvent,g=YAHOO.widget.Module,i=YAHOO.env.ua,h,p,o,e,a={"BEFORE_INIT":"beforeInit","INIT":"init","APPEND":"append","BEFORE_RENDER":"beforeRender","RENDER":"render","CHANGE_HEADER":"changeHeader","CHANGE_BODY":"changeBody","CHANGE_FOOTER":"changeFooter","CHANGE_CONTENT":"changeContent","DESTROY":"destroy","BEFORE_SHOW":"beforeShow","SHOW":"show","BEFORE_HIDE":"beforeHide","HIDE":"hide"},j={"VISIBLE":{key:"visible",value:true,validator:YAHOO.lang.isBoolean},"EFFECT":{key:"effect",suppressEvent:true,supercedes:["visible"]},"MONITOR_RESIZE":{key:"monitorresize",value:true},"APPEND_TO_DOCUMENT_BODY":{key:"appendtodocumentbody",value:false}};g.IMG_ROOT=null;g.IMG_ROOT_SSL=null;g.CSS_MODULE="yui-module";g.CSS_HEADER="hd";g.CSS_BODY="bd";g.CSS_FOOTER="ft";g.RESIZE_MONITOR_SECURE_URL="javascript:false;";g.RESIZE_MONITOR_BUFFER=1;g.textResizeEvent=new m("textResize");g.forceDocumentRedraw=function(){var q=document.documentElement;if(q){q.className+=" ";q.className=YAHOO.lang.trim(q.className);}};function l(){if(!h){h=document.createElement("div");h.innerHTML=('<div class="'+g.CSS_HEADER+'"></div>'+'<div class="'+g.CSS_BODY+'"></div><div class="'+g.CSS_FOOTER+'"></div>');p=h.firstChild;o=p.nextSibling;e=o.nextSibling;}return h;}function k(){if(!p){l();}return(p.cloneNode(false));}function b(){if(!o){l();}return(o.cloneNode(false));}function c(){if(!e){l();}return(e.cloneNode(false));}g.prototype={constructor:g,element:null,header:null,body:null,footer:null,id:null,imageRoot:g.IMG_ROOT,initEvents:function(){var q=m.LIST;
 
this.beforeInitEvent=this.createEvent(a.BEFORE_INIT);this.beforeInitEvent.signature=q;this.initEvent=this.createEvent(a.INIT);this.initEvent.signature=q;this.appendEvent=this.createEvent(a.APPEND);this.appendEvent.signature=q;this.beforeRenderEvent=this.createEvent(a.BEFORE_RENDER);this.beforeRenderEvent.signature=q;this.renderEvent=this.createEvent(a.RENDER);this.renderEvent.signature=q;this.changeHeaderEvent=this.createEvent(a.CHANGE_HEADER);this.changeHeaderEvent.signature=q;this.changeBodyEvent=this.createEvent(a.CHANGE_BODY);this.changeBodyEvent.signature=q;this.changeFooterEvent=this.createEvent(a.CHANGE_FOOTER);this.changeFooterEvent.signature=q;this.changeContentEvent=this.createEvent(a.CHANGE_CONTENT);this.changeContentEvent.signature=q;this.destroyEvent=this.createEvent(a.DESTROY);this.destroyEvent.signature=q;this.beforeShowEvent=this.createEvent(a.BEFORE_SHOW);this.beforeShowEvent.signature=q;this.showEvent=this.createEvent(a.SHOW);this.showEvent.signature=q;this.beforeHideEvent=this.createEvent(a.BEFORE_HIDE);this.beforeHideEvent.signature=q;this.hideEvent=this.createEvent(a.HIDE);this.hideEvent.signature=q;},platform:function(){var q=navigator.userAgent.toLowerCase();if(q.indexOf("windows")!=-1||q.indexOf("win32")!=-1){return"windows";}else{if(q.indexOf("macintosh")!=-1){return"mac";}else{return false;}}}(),browser:function(){var q=navigator.userAgent.toLowerCase();if(q.indexOf("opera")!=-1){return"opera";}else{if(q.indexOf("msie 7")!=-1){return"ie7";}else{if(q.indexOf("msie")!=-1){return"ie";}else{if(q.indexOf("safari")!=-1){return"safari";}else{if(q.indexOf("gecko")!=-1){return"gecko";}else{return false;}}}}}}(),isSecure:function(){if(window.location.href.toLowerCase().indexOf("https")===0){return true;}else{return false;}}(),initDefaultConfig:function(){this.cfg.addProperty(j.VISIBLE.key,{handler:this.configVisible,value:j.VISIBLE.value,validator:j.VISIBLE.validator});this.cfg.addProperty(j.EFFECT.key,{handler:this.configEffect,suppressEvent:j.EFFECT.suppressEvent,supercedes:j.EFFECT.supercedes});this.cfg.addProperty(j.MONITOR_RESIZE.key,{handler:this.configMonitorResize,value:j.MONITOR_RESIZE.value});this.cfg.addProperty(j.APPEND_TO_DOCUMENT_BODY.key,{value:j.APPEND_TO_DOCUMENT_BODY.value});},init:function(v,u){var s,w;this.initEvents();this.beforeInitEvent.fire(g);this.cfg=new d(this);if(this.isSecure){this.imageRoot=g.IMG_ROOT_SSL;}if(typeof v=="string"){s=v;v=document.getElementById(v);if(!v){v=(l()).cloneNode(false);v.id=s;}}this.id=f.generateId(v);this.element=v;w=this.element.firstChild;if(w){var r=false,q=false,t=false;do{if(1==w.nodeType){if(!r&&f.hasClass(w,g.CSS_HEADER)){this.header=w;r=true;}else{if(!q&&f.hasClass(w,g.CSS_BODY)){this.body=w;q=true;}else{if(!t&&f.hasClass(w,g.CSS_FOOTER)){this.footer=w;t=true;}}}}}while((w=w.nextSibling));}this.initDefaultConfig();f.addClass(this.element,g.CSS_MODULE);if(u){this.cfg.applyConfig(u,true);}if(!d.alreadySubscribed(this.renderEvent,this.cfg.fireQueue,this.cfg)){this.renderEvent.subscribe(this.cfg.fireQueue,this.cfg,true);}this.initEvent.fire(g);},initResizeMonitor:function(){var r=(i.gecko&&this.platform=="windows");if(r){var q=this;setTimeout(function(){q._initResizeMonitor();},0);}else{this._initResizeMonitor();}},_initResizeMonitor:function(){var q,s,u;function w(){g.textResizeEvent.fire();}if(!i.opera){s=f.get("_yuiResizeMonitor");var v=this._supportsCWResize();if(!s){s=document.createElement("iframe");if(this.isSecure&&g.RESIZE_MONITOR_SECURE_URL&&i.ie){s.src=g.RESIZE_MONITOR_SECURE_URL;}if(!v){u=["<html><head><script ",'type="text/javascript">',"window.onresize=function(){window.parent.","YAHOO.widget.Module.textResizeEvent.","fire();};<","/script></head>","<body></body></html>"].join("");s.src="data:text/html;charset=utf-8,"+encodeURIComponent(u);}s.id="_yuiResizeMonitor";s.title="Text Resize Monitor";s.tabIndex=-1;s.setAttribute("role","presentation");s.style.position="absolute";s.style.visibility="hidden";var r=document.body,t=r.firstChild;if(t){r.insertBefore(s,t);}else{r.appendChild(s);}s.style.backgroundColor="transparent";s.style.borderWidth="0";s.style.width="2em";s.style.height="2em";s.style.left="0";s.style.top=(-1*(s.offsetHeight+g.RESIZE_MONITOR_BUFFER))+"px";s.style.visibility="visible";if(i.webkit){q=s.contentWindow.document;q.open();q.close();}}if(s&&s.contentWindow){g.textResizeEvent.subscribe(this.onDomResize,this,true);if(!g.textResizeInitialized){if(v){if(!n.on(s.contentWindow,"resize",w)){n.on(s,"resize",w);}}g.textResizeInitialized=true;}this.resizeMonitor=s;}}},_supportsCWResize:function(){var q=true;if(i.gecko&&i.gecko<=1.8){q=false;}return q;},onDomResize:function(s,r){var q=-1*(this.resizeMonitor.offsetHeight+g.RESIZE_MONITOR_BUFFER);this.resizeMonitor.style.top=q+"px";this.resizeMonitor.style.left="0";},setHeader:function(r){var q=this.header||(this.header=k());if(r.nodeName){q.innerHTML="";q.appendChild(r);}else{q.innerHTML=r;}if(this._rendered){this._renderHeader();}this.changeHeaderEvent.fire(r);this.changeContentEvent.fire();},appendToHeader:function(r){var q=this.header||(this.header=k());q.appendChild(r);this.changeHeaderEvent.fire(r);this.changeContentEvent.fire();},setBody:function(r){var q=this.body||(this.body=b());if(r.nodeName){q.innerHTML="";q.appendChild(r);}else{q.innerHTML=r;}if(this._rendered){this._renderBody();}this.changeBodyEvent.fire(r);this.changeContentEvent.fire();},appendToBody:function(r){var q=this.body||(this.body=b());q.appendChild(r);this.changeBodyEvent.fire(r);this.changeContentEvent.fire();},setFooter:function(r){var q=this.footer||(this.footer=c());if(r.nodeName){q.innerHTML="";q.appendChild(r);}else{q.innerHTML=r;}if(this._rendered){this._renderFooter();}this.changeFooterEvent.fire(r);this.changeContentEvent.fire();},appendToFooter:function(r){var q=this.footer||(this.footer=c());q.appendChild(r);this.changeFooterEvent.fire(r);this.changeContentEvent.fire();},render:function(s,q){var t=this;function r(u){if(typeof u=="string"){u=document.getElementById(u);
 
}if(u){t._addToParent(u,t.element);t.appendEvent.fire();}}this.beforeRenderEvent.fire();if(!q){q=this.element;}if(s){r(s);}else{if(!f.inDocument(this.element)){return false;}}this._renderHeader(q);this._renderBody(q);this._renderFooter(q);this._rendered=true;this.renderEvent.fire();return true;},_renderHeader:function(q){q=q||this.element;if(this.header&&!f.inDocument(this.header)){var r=q.firstChild;if(r){q.insertBefore(this.header,r);}else{q.appendChild(this.header);}}},_renderBody:function(q){q=q||this.element;if(this.body&&!f.inDocument(this.body)){if(this.footer&&f.isAncestor(q,this.footer)){q.insertBefore(this.body,this.footer);}else{q.appendChild(this.body);}}},_renderFooter:function(q){q=q||this.element;if(this.footer&&!f.inDocument(this.footer)){q.appendChild(this.footer);}},destroy:function(q){var r,s=!(q);if(this.element){n.purgeElement(this.element,s);r=this.element.parentNode;}if(r){r.removeChild(this.element);}this.element=null;this.header=null;this.body=null;this.footer=null;g.textResizeEvent.unsubscribe(this.onDomResize,this);this.cfg.destroy();this.cfg=null;this.destroyEvent.fire();},show:function(){this.cfg.setProperty("visible",true);},hide:function(){this.cfg.setProperty("visible",false);},configVisible:function(r,q,s){var t=q[0];if(t){if(this.beforeShowEvent.fire()){f.setStyle(this.element,"display","block");this.showEvent.fire();}}else{if(this.beforeHideEvent.fire()){f.setStyle(this.element,"display","none");this.hideEvent.fire();}}},configEffect:function(r,q,s){this._cachedEffects=(this.cacheEffects)?this._createEffects(q[0]):null;},cacheEffects:true,_createEffects:function(t){var q=null,u,r,s;if(t){if(t instanceof Array){q=[];u=t.length;for(r=0;r<u;r++){s=t[r];if(s.effect){q[q.length]=s.effect(this,s.duration);}}}else{if(t.effect){q=[t.effect(this,t.duration)];}}}return q;},configMonitorResize:function(s,r,t){var q=r[0];if(q){this.initResizeMonitor();}else{g.textResizeEvent.unsubscribe(this.onDomResize,this,true);this.resizeMonitor=null;}},_addToParent:function(q,r){if(!this.cfg.getProperty("appendtodocumentbody")&&q===document.body&&q.firstChild){q.insertBefore(r,q.firstChild);}else{q.appendChild(r);}},toString:function(){return"Module "+this.id;}};YAHOO.lang.augmentProto(g,YAHOO.util.EventProvider);}());(function(){YAHOO.widget.Overlay=function(p,o){YAHOO.widget.Overlay.superclass.constructor.call(this,p,o);};var i=YAHOO.lang,m=YAHOO.util.CustomEvent,g=YAHOO.widget.Module,n=YAHOO.util.Event,f=YAHOO.util.Dom,d=YAHOO.util.Config,k=YAHOO.env.ua,b=YAHOO.widget.Overlay,h="subscribe",e="unsubscribe",c="contained",j,a={"BEFORE_MOVE":"beforeMove","MOVE":"move"},l={"X":{key:"x",validator:i.isNumber,suppressEvent:true,supercedes:["iframe"]},"Y":{key:"y",validator:i.isNumber,suppressEvent:true,supercedes:["iframe"]},"XY":{key:"xy",suppressEvent:true,supercedes:["iframe"]},"CONTEXT":{key:"context",suppressEvent:true,supercedes:["iframe"]},"FIXED_CENTER":{key:"fixedcenter",value:false,supercedes:["iframe","visible"]},"WIDTH":{key:"width",suppressEvent:true,supercedes:["context","fixedcenter","iframe"]},"HEIGHT":{key:"height",suppressEvent:true,supercedes:["context","fixedcenter","iframe"]},"AUTO_FILL_HEIGHT":{key:"autofillheight",supercedes:["height"],value:"body"},"ZINDEX":{key:"zindex",value:null},"CONSTRAIN_TO_VIEWPORT":{key:"constraintoviewport",value:false,validator:i.isBoolean,supercedes:["iframe","x","y","xy"]},"IFRAME":{key:"iframe",value:(k.ie==6?true:false),validator:i.isBoolean,supercedes:["zindex"]},"PREVENT_CONTEXT_OVERLAP":{key:"preventcontextoverlap",value:false,validator:i.isBoolean,supercedes:["constraintoviewport"]}};b.IFRAME_SRC="javascript:false;";b.IFRAME_OFFSET=3;b.VIEWPORT_OFFSET=10;b.TOP_LEFT="tl";b.TOP_RIGHT="tr";b.BOTTOM_LEFT="bl";b.BOTTOM_RIGHT="br";b.PREVENT_OVERLAP_X={"tltr":true,"blbr":true,"brbl":true,"trtl":true};b.PREVENT_OVERLAP_Y={"trbr":true,"tlbl":true,"bltl":true,"brtr":true};b.CSS_OVERLAY="yui-overlay";b.CSS_HIDDEN="yui-overlay-hidden";b.CSS_IFRAME="yui-overlay-iframe";b.STD_MOD_RE=/^\s*?(body|footer|header)\s*?$/i;b.windowScrollEvent=new m("windowScroll");b.windowResizeEvent=new m("windowResize");b.windowScrollHandler=function(p){var o=n.getTarget(p);if(!o||o===window||o===window.document){if(k.ie){if(!window.scrollEnd){window.scrollEnd=-1;}clearTimeout(window.scrollEnd);window.scrollEnd=setTimeout(function(){b.windowScrollEvent.fire();},1);}else{b.windowScrollEvent.fire();}}};b.windowResizeHandler=function(o){if(k.ie){if(!window.resizeEnd){window.resizeEnd=-1;}clearTimeout(window.resizeEnd);window.resizeEnd=setTimeout(function(){b.windowResizeEvent.fire();},100);}else{b.windowResizeEvent.fire();}};b._initialized=null;if(b._initialized===null){n.on(window,"scroll",b.windowScrollHandler);n.on(window,"resize",b.windowResizeHandler);b._initialized=true;}b._TRIGGER_MAP={"windowScroll":b.windowScrollEvent,"windowResize":b.windowResizeEvent,"textResize":g.textResizeEvent};YAHOO.extend(b,g,{CONTEXT_TRIGGERS:[],init:function(p,o){b.superclass.init.call(this,p);this.beforeInitEvent.fire(b);f.addClass(this.element,b.CSS_OVERLAY);if(o){this.cfg.applyConfig(o,true);}if(this.platform=="mac"&&k.gecko){if(!d.alreadySubscribed(this.showEvent,this.showMacGeckoScrollbars,this)){this.showEvent.subscribe(this.showMacGeckoScrollbars,this,true);}if(!d.alreadySubscribed(this.hideEvent,this.hideMacGeckoScrollbars,this)){this.hideEvent.subscribe(this.hideMacGeckoScrollbars,this,true);}}this.initEvent.fire(b);},initEvents:function(){b.superclass.initEvents.call(this);var o=m.LIST;this.beforeMoveEvent=this.createEvent(a.BEFORE_MOVE);this.beforeMoveEvent.signature=o;this.moveEvent=this.createEvent(a.MOVE);this.moveEvent.signature=o;},initDefaultConfig:function(){b.superclass.initDefaultConfig.call(this);var o=this.cfg;o.addProperty(l.X.key,{handler:this.configX,validator:l.X.validator,suppressEvent:l.X.suppressEvent,supercedes:l.X.supercedes});o.addProperty(l.Y.key,{handler:this.configY,validator:l.Y.validator,suppressEvent:l.Y.suppressEvent,supercedes:l.Y.supercedes});
 
o.addProperty(l.XY.key,{handler:this.configXY,suppressEvent:l.XY.suppressEvent,supercedes:l.XY.supercedes});o.addProperty(l.CONTEXT.key,{handler:this.configContext,suppressEvent:l.CONTEXT.suppressEvent,supercedes:l.CONTEXT.supercedes});o.addProperty(l.FIXED_CENTER.key,{handler:this.configFixedCenter,value:l.FIXED_CENTER.value,validator:l.FIXED_CENTER.validator,supercedes:l.FIXED_CENTER.supercedes});o.addProperty(l.WIDTH.key,{handler:this.configWidth,suppressEvent:l.WIDTH.suppressEvent,supercedes:l.WIDTH.supercedes});o.addProperty(l.HEIGHT.key,{handler:this.configHeight,suppressEvent:l.HEIGHT.suppressEvent,supercedes:l.HEIGHT.supercedes});o.addProperty(l.AUTO_FILL_HEIGHT.key,{handler:this.configAutoFillHeight,value:l.AUTO_FILL_HEIGHT.value,validator:this._validateAutoFill,supercedes:l.AUTO_FILL_HEIGHT.supercedes});o.addProperty(l.ZINDEX.key,{handler:this.configzIndex,value:l.ZINDEX.value});o.addProperty(l.CONSTRAIN_TO_VIEWPORT.key,{handler:this.configConstrainToViewport,value:l.CONSTRAIN_TO_VIEWPORT.value,validator:l.CONSTRAIN_TO_VIEWPORT.validator,supercedes:l.CONSTRAIN_TO_VIEWPORT.supercedes});o.addProperty(l.IFRAME.key,{handler:this.configIframe,value:l.IFRAME.value,validator:l.IFRAME.validator,supercedes:l.IFRAME.supercedes});o.addProperty(l.PREVENT_CONTEXT_OVERLAP.key,{value:l.PREVENT_CONTEXT_OVERLAP.value,validator:l.PREVENT_CONTEXT_OVERLAP.validator,supercedes:l.PREVENT_CONTEXT_OVERLAP.supercedes});},moveTo:function(o,p){this.cfg.setProperty("xy",[o,p]);},hideMacGeckoScrollbars:function(){f.replaceClass(this.element,"show-scrollbars","hide-scrollbars");},showMacGeckoScrollbars:function(){f.replaceClass(this.element,"hide-scrollbars","show-scrollbars");},_setDomVisibility:function(o){f.setStyle(this.element,"visibility",(o)?"visible":"hidden");var p=b.CSS_HIDDEN;if(o){f.removeClass(this.element,p);}else{f.addClass(this.element,p);}},configVisible:function(x,w,t){var p=w[0],B=f.getStyle(this.element,"visibility"),o=this._cachedEffects||this._createEffects(this.cfg.getProperty("effect")),A=(this.platform=="mac"&&k.gecko),y=d.alreadySubscribed,q,v,s,r,u,z;if(B=="inherit"){v=this.element.parentNode;while(v.nodeType!=9&&v.nodeType!=11){B=f.getStyle(v,"visibility");if(B!="inherit"){break;}v=v.parentNode;}if(B=="inherit"){B="visible";}}if(p){if(A){this.showMacGeckoScrollbars();}if(o){if(p){if(B!="visible"||B===""||this._fadingOut){if(this.beforeShowEvent.fire()){z=o.length;for(s=0;s<z;s++){q=o[s];if(s===0&&!y(q.animateInCompleteEvent,this.showEvent.fire,this.showEvent)){q.animateInCompleteEvent.subscribe(this.showEvent.fire,this.showEvent,true);}q.animateIn();}}}}}else{if(B!="visible"||B===""){if(this.beforeShowEvent.fire()){this._setDomVisibility(true);this.cfg.refireEvent("iframe");this.showEvent.fire();}}else{this._setDomVisibility(true);}}}else{if(A){this.hideMacGeckoScrollbars();}if(o){if(B=="visible"||this._fadingIn){if(this.beforeHideEvent.fire()){z=o.length;for(r=0;r<z;r++){u=o[r];if(r===0&&!y(u.animateOutCompleteEvent,this.hideEvent.fire,this.hideEvent)){u.animateOutCompleteEvent.subscribe(this.hideEvent.fire,this.hideEvent,true);}u.animateOut();}}}else{if(B===""){this._setDomVisibility(false);}}}else{if(B=="visible"||B===""){if(this.beforeHideEvent.fire()){this._setDomVisibility(false);this.hideEvent.fire();}}else{this._setDomVisibility(false);}}}},doCenterOnDOMEvent:function(){var o=this.cfg,p=o.getProperty("fixedcenter");if(o.getProperty("visible")){if(p&&(p!==c||this.fitsInViewport())){this.center();}}},fitsInViewport:function(){var s=b.VIEWPORT_OFFSET,q=this.element,t=q.offsetWidth,r=q.offsetHeight,o=f.getViewportWidth(),p=f.getViewportHeight();return((t+s<o)&&(r+s<p));},configFixedCenter:function(s,q,t){var u=q[0],p=d.alreadySubscribed,r=b.windowResizeEvent,o=b.windowScrollEvent;if(u){this.center();if(!p(this.beforeShowEvent,this.center)){this.beforeShowEvent.subscribe(this.center);}if(!p(r,this.doCenterOnDOMEvent,this)){r.subscribe(this.doCenterOnDOMEvent,this,true);}if(!p(o,this.doCenterOnDOMEvent,this)){o.subscribe(this.doCenterOnDOMEvent,this,true);}}else{this.beforeShowEvent.unsubscribe(this.center);r.unsubscribe(this.doCenterOnDOMEvent,this);o.unsubscribe(this.doCenterOnDOMEvent,this);}},configHeight:function(r,p,s){var o=p[0],q=this.element;f.setStyle(q,"height",o);this.cfg.refireEvent("iframe");},configAutoFillHeight:function(t,s,p){var v=s[0],q=this.cfg,u="autofillheight",w="height",r=q.getProperty(u),o=this._autoFillOnHeightChange;q.unsubscribeFromConfigEvent(w,o);g.textResizeEvent.unsubscribe(o);this.changeContentEvent.unsubscribe(o);if(r&&v!==r&&this[r]){f.setStyle(this[r],w,"");}if(v){v=i.trim(v.toLowerCase());q.subscribeToConfigEvent(w,o,this[v],this);g.textResizeEvent.subscribe(o,this[v],this);this.changeContentEvent.subscribe(o,this[v],this);q.setProperty(u,v,true);}},configWidth:function(r,o,s){var q=o[0],p=this.element;f.setStyle(p,"width",q);this.cfg.refireEvent("iframe");},configzIndex:function(q,o,r){var s=o[0],p=this.element;if(!s){s=f.getStyle(p,"zIndex");if(!s||isNaN(s)){s=0;}}if(this.iframe||this.cfg.getProperty("iframe")===true){if(s<=0){s=1;}}f.setStyle(p,"zIndex",s);this.cfg.setProperty("zIndex",s,true);if(this.iframe){this.stackIframe();}},configXY:function(q,p,r){var t=p[0],o=t[0],s=t[1];this.cfg.setProperty("x",o);this.cfg.setProperty("y",s);this.beforeMoveEvent.fire([o,s]);o=this.cfg.getProperty("x");s=this.cfg.getProperty("y");this.cfg.refireEvent("iframe");this.moveEvent.fire([o,s]);},configX:function(q,p,r){var o=p[0],s=this.cfg.getProperty("y");this.cfg.setProperty("x",o,true);this.cfg.setProperty("y",s,true);this.beforeMoveEvent.fire([o,s]);o=this.cfg.getProperty("x");s=this.cfg.getProperty("y");f.setX(this.element,o,true);this.cfg.setProperty("xy",[o,s],true);this.cfg.refireEvent("iframe");this.moveEvent.fire([o,s]);},configY:function(q,p,r){var o=this.cfg.getProperty("x"),s=p[0];this.cfg.setProperty("x",o,true);this.cfg.setProperty("y",s,true);this.beforeMoveEvent.fire([o,s]);o=this.cfg.getProperty("x");s=this.cfg.getProperty("y");f.setY(this.element,s,true);
 
this.cfg.setProperty("xy",[o,s],true);this.cfg.refireEvent("iframe");this.moveEvent.fire([o,s]);},showIframe:function(){var p=this.iframe,o;if(p){o=this.element.parentNode;if(o!=p.parentNode){this._addToParent(o,p);}p.style.display="block";}},hideIframe:function(){if(this.iframe){this.iframe.style.display="none";}},syncIframe:function(){var o=this.iframe,q=this.element,s=b.IFRAME_OFFSET,p=(s*2),r;if(o){o.style.width=(q.offsetWidth+p+"px");o.style.height=(q.offsetHeight+p+"px");r=this.cfg.getProperty("xy");if(!i.isArray(r)||(isNaN(r[0])||isNaN(r[1]))){this.syncPosition();r=this.cfg.getProperty("xy");}f.setXY(o,[(r[0]-s),(r[1]-s)]);}},stackIframe:function(){if(this.iframe){var o=f.getStyle(this.element,"zIndex");if(!YAHOO.lang.isUndefined(o)&&!isNaN(o)){f.setStyle(this.iframe,"zIndex",(o-1));}}},configIframe:function(r,q,s){var o=q[0];function t(){var v=this.iframe,w=this.element,x;if(!v){if(!j){j=document.createElement("iframe");if(this.isSecure){j.src=b.IFRAME_SRC;}if(k.ie){j.style.filter="alpha(opacity=0)";j.frameBorder=0;}else{j.style.opacity="0";}j.style.position="absolute";j.style.border="none";j.style.margin="0";j.style.padding="0";j.style.display="none";j.tabIndex=-1;j.className=b.CSS_IFRAME;}v=j.cloneNode(false);v.id=this.id+"_f";x=w.parentNode;var u=x||document.body;this._addToParent(u,v);this.iframe=v;}this.showIframe();this.syncIframe();this.stackIframe();if(!this._hasIframeEventListeners){this.showEvent.subscribe(this.showIframe);this.hideEvent.subscribe(this.hideIframe);this.changeContentEvent.subscribe(this.syncIframe);this._hasIframeEventListeners=true;}}function p(){t.call(this);this.beforeShowEvent.unsubscribe(p);this._iframeDeferred=false;}if(o){if(this.cfg.getProperty("visible")){t.call(this);}else{if(!this._iframeDeferred){this.beforeShowEvent.subscribe(p);this._iframeDeferred=true;}}}else{this.hideIframe();if(this._hasIframeEventListeners){this.showEvent.unsubscribe(this.showIframe);this.hideEvent.unsubscribe(this.hideIframe);this.changeContentEvent.unsubscribe(this.syncIframe);this._hasIframeEventListeners=false;}}},_primeXYFromDOM:function(){if(YAHOO.lang.isUndefined(this.cfg.getProperty("xy"))){this.syncPosition();this.cfg.refireEvent("xy");this.beforeShowEvent.unsubscribe(this._primeXYFromDOM);}},configConstrainToViewport:function(p,o,q){var r=o[0];if(r){if(!d.alreadySubscribed(this.beforeMoveEvent,this.enforceConstraints,this)){this.beforeMoveEvent.subscribe(this.enforceConstraints,this,true);}if(!d.alreadySubscribed(this.beforeShowEvent,this._primeXYFromDOM)){this.beforeShowEvent.subscribe(this._primeXYFromDOM);}}else{this.beforeShowEvent.unsubscribe(this._primeXYFromDOM);this.beforeMoveEvent.unsubscribe(this.enforceConstraints,this);}},configContext:function(u,t,q){var x=t[0],r,o,v,s,p,w=this.CONTEXT_TRIGGERS;if(x){r=x[0];o=x[1];v=x[2];s=x[3];p=x[4];if(w&&w.length>0){s=(s||[]).concat(w);}if(r){if(typeof r=="string"){this.cfg.setProperty("context",[document.getElementById(r),o,v,s,p],true);}if(o&&v){this.align(o,v,p);}if(this._contextTriggers){this._processTriggers(this._contextTriggers,e,this._alignOnTrigger);}if(s){this._processTriggers(s,h,this._alignOnTrigger);this._contextTriggers=s;}}}},_alignOnTrigger:function(p,o){this.align();},_findTriggerCE:function(o){var p=null;if(o instanceof m){p=o;}else{if(b._TRIGGER_MAP[o]){p=b._TRIGGER_MAP[o];}}return p;},_processTriggers:function(s,v,r){var q,u;for(var p=0,o=s.length;p<o;++p){q=s[p];u=this._findTriggerCE(q);if(u){u[v](r,this,true);}else{this[v](q,r);}}},align:function(p,w,s){var v=this.cfg.getProperty("context"),t=this,o,q,u;function r(z,A){var y=null,x=null;switch(p){case b.TOP_LEFT:y=A;x=z;break;case b.TOP_RIGHT:y=A-q.offsetWidth;x=z;break;case b.BOTTOM_LEFT:y=A;x=z-q.offsetHeight;break;case b.BOTTOM_RIGHT:y=A-q.offsetWidth;x=z-q.offsetHeight;break;}if(y!==null&&x!==null){if(s){y+=s[0];x+=s[1];}t.moveTo(y,x);}}if(v){o=v[0];q=this.element;t=this;if(!p){p=v[1];}if(!w){w=v[2];}if(!s&&v[4]){s=v[4];}if(q&&o){u=f.getRegion(o);switch(w){case b.TOP_LEFT:r(u.top,u.left);break;case b.TOP_RIGHT:r(u.top,u.right);break;case b.BOTTOM_LEFT:r(u.bottom,u.left);break;case b.BOTTOM_RIGHT:r(u.bottom,u.right);break;}}}},enforceConstraints:function(p,o,q){var s=o[0];var r=this.getConstrainedXY(s[0],s[1]);this.cfg.setProperty("x",r[0],true);this.cfg.setProperty("y",r[1],true);this.cfg.setProperty("xy",r,true);},_getConstrainedPos:function(y,p){var t=this.element,r=b.VIEWPORT_OFFSET,A=(y=="x"),z=(A)?t.offsetWidth:t.offsetHeight,s=(A)?f.getViewportWidth():f.getViewportHeight(),D=(A)?f.getDocumentScrollLeft():f.getDocumentScrollTop(),C=(A)?b.PREVENT_OVERLAP_X:b.PREVENT_OVERLAP_Y,o=this.cfg.getProperty("context"),u=(z+r<s),w=this.cfg.getProperty("preventcontextoverlap")&&o&&C[(o[1]+o[2])],v=D+r,B=D+s-z-r,q=p;if(p<v||p>B){if(w){q=this._preventOverlap(y,o[0],z,s,D);}else{if(u){if(p<v){q=v;}else{if(p>B){q=B;}}}else{q=v;}}}return q;},_preventOverlap:function(y,w,z,u,C){var A=(y=="x"),t=b.VIEWPORT_OFFSET,s=this,q=((A)?f.getX(w):f.getY(w))-C,o=(A)?w.offsetWidth:w.offsetHeight,p=q-t,r=(u-(q+o))-t,D=false,v=function(){var x;if((s.cfg.getProperty(y)-C)>q){x=(q-z);}else{x=(q+o);}s.cfg.setProperty(y,(x+C),true);return x;},B=function(){var E=((s.cfg.getProperty(y)-C)>q)?r:p,x;if(z>E){if(D){v();}else{v();D=true;x=B();}}return x;};B();return this.cfg.getProperty(y);},getConstrainedX:function(o){return this._getConstrainedPos("x",o);},getConstrainedY:function(o){return this._getConstrainedPos("y",o);},getConstrainedXY:function(o,p){return[this.getConstrainedX(o),this.getConstrainedY(p)];},center:function(){var r=b.VIEWPORT_OFFSET,s=this.element.offsetWidth,q=this.element.offsetHeight,p=f.getViewportWidth(),t=f.getViewportHeight(),o,u;if(s<p){o=(p/2)-(s/2)+f.getDocumentScrollLeft();}else{o=r+f.getDocumentScrollLeft();}if(q<t){u=(t/2)-(q/2)+f.getDocumentScrollTop();}else{u=r+f.getDocumentScrollTop();}this.cfg.setProperty("xy",[parseInt(o,10),parseInt(u,10)]);this.cfg.refireEvent("iframe");if(k.webkit){this.forceContainerRedraw();}},syncPosition:function(){var o=f.getXY(this.element);
 
this.cfg.setProperty("x",o[0],true);this.cfg.setProperty("y",o[1],true);this.cfg.setProperty("xy",o,true);},onDomResize:function(q,p){var o=this;b.superclass.onDomResize.call(this,q,p);setTimeout(function(){o.syncPosition();o.cfg.refireEvent("iframe");o.cfg.refireEvent("context");},0);},_getComputedHeight:(function(){if(document.defaultView&&document.defaultView.getComputedStyle){return function(p){var o=null;if(p.ownerDocument&&p.ownerDocument.defaultView){var q=p.ownerDocument.defaultView.getComputedStyle(p,"");if(q){o=parseInt(q.height,10);}}return(i.isNumber(o))?o:null;};}else{return function(p){var o=null;if(p.style.pixelHeight){o=p.style.pixelHeight;}return(i.isNumber(o))?o:null;};}})(),_validateAutoFillHeight:function(o){return(!o)||(i.isString(o)&&b.STD_MOD_RE.test(o));},_autoFillOnHeightChange:function(r,p,q){var o=this.cfg.getProperty("height");if((o&&o!=="auto")||(o===0)){this.fillHeight(q);}},_getPreciseHeight:function(p){var o=p.offsetHeight;if(p.getBoundingClientRect){var q=p.getBoundingClientRect();o=q.bottom-q.top;}return o;},fillHeight:function(r){if(r){var p=this.innerElement||this.element,o=[this.header,this.body,this.footer],v,w=0,x=0,t=0,q=false;for(var u=0,s=o.length;u<s;u++){v=o[u];if(v){if(r!==v){x+=this._getPreciseHeight(v);}else{q=true;}}}if(q){if(k.ie||k.opera){f.setStyle(r,"height",0+"px");}w=this._getComputedHeight(p);if(w===null){f.addClass(p,"yui-override-padding");w=p.clientHeight;f.removeClass(p,"yui-override-padding");}t=Math.max(w-x,0);f.setStyle(r,"height",t+"px");if(r.offsetHeight!=t){t=Math.max(t-(r.offsetHeight-t),0);}f.setStyle(r,"height",t+"px");}}},bringToTop:function(){var s=[],r=this.element;function v(z,y){var B=f.getStyle(z,"zIndex"),A=f.getStyle(y,"zIndex"),x=(!B||isNaN(B))?0:parseInt(B,10),w=(!A||isNaN(A))?0:parseInt(A,10);if(x>w){return -1;}else{if(x<w){return 1;}else{return 0;}}}function q(y){var x=f.hasClass(y,b.CSS_OVERLAY),w=YAHOO.widget.Panel;if(x&&!f.isAncestor(r,y)){if(w&&f.hasClass(y,w.CSS_PANEL)){s[s.length]=y.parentNode;}else{s[s.length]=y;}}}f.getElementsBy(q,"div",document.body);s.sort(v);var o=s[0],u;if(o){u=f.getStyle(o,"zIndex");if(!isNaN(u)){var t=false;if(o!=r){t=true;}else{if(s.length>1){var p=f.getStyle(s[1],"zIndex");if(!isNaN(p)&&(u==p)){t=true;}}}if(t){this.cfg.setProperty("zindex",(parseInt(u,10)+2));}}}},destroy:function(o){if(this.iframe){this.iframe.parentNode.removeChild(this.iframe);}this.iframe=null;b.windowResizeEvent.unsubscribe(this.doCenterOnDOMEvent,this);b.windowScrollEvent.unsubscribe(this.doCenterOnDOMEvent,this);g.textResizeEvent.unsubscribe(this._autoFillOnHeightChange);if(this._contextTriggers){this._processTriggers(this._contextTriggers,e,this._alignOnTrigger);}b.superclass.destroy.call(this,o);},forceContainerRedraw:function(){var o=this;f.addClass(o.element,"yui-force-redraw");setTimeout(function(){f.removeClass(o.element,"yui-force-redraw");},0);},toString:function(){return"Overlay "+this.id;}});}());(function(){YAHOO.widget.OverlayManager=function(g){this.init(g);};var d=YAHOO.widget.Overlay,c=YAHOO.util.Event,e=YAHOO.util.Dom,b=YAHOO.util.Config,f=YAHOO.util.CustomEvent,a=YAHOO.widget.OverlayManager;a.CSS_FOCUSED="focused";a.prototype={constructor:a,overlays:null,initDefaultConfig:function(){this.cfg.addProperty("overlays",{suppressEvent:true});this.cfg.addProperty("focusevent",{value:"mousedown"});},init:function(i){this.cfg=new b(this);this.initDefaultConfig();if(i){this.cfg.applyConfig(i,true);}this.cfg.fireQueue();var h=null;this.getActive=function(){return h;};this.focus=function(j){var k=this.find(j);if(k){k.focus();}};this.remove=function(k){var m=this.find(k),j;if(m){if(h==m){h=null;}var l=(m.element===null&&m.cfg===null)?true:false;if(!l){j=e.getStyle(m.element,"zIndex");m.cfg.setProperty("zIndex",-1000,true);}this.overlays.sort(this.compareZIndexDesc);this.overlays=this.overlays.slice(0,(this.overlays.length-1));m.hideEvent.unsubscribe(m.blur);m.destroyEvent.unsubscribe(this._onOverlayDestroy,m);m.focusEvent.unsubscribe(this._onOverlayFocusHandler,m);m.blurEvent.unsubscribe(this._onOverlayBlurHandler,m);if(!l){c.removeListener(m.element,this.cfg.getProperty("focusevent"),this._onOverlayElementFocus);m.cfg.setProperty("zIndex",j,true);m.cfg.setProperty("manager",null);}if(m.focusEvent._managed){m.focusEvent=null;}if(m.blurEvent._managed){m.blurEvent=null;}if(m.focus._managed){m.focus=null;}if(m.blur._managed){m.blur=null;}}};this.blurAll=function(){var k=this.overlays.length,j;if(k>0){j=k-1;do{this.overlays[j].blur();}while(j--);}};this._manageBlur=function(j){var k=false;if(h==j){e.removeClass(h.element,a.CSS_FOCUSED);h=null;k=true;}return k;};this._manageFocus=function(j){var k=false;if(h!=j){if(h){h.blur();}h=j;this.bringToTop(h);e.addClass(h.element,a.CSS_FOCUSED);k=true;}return k;};var g=this.cfg.getProperty("overlays");if(!this.overlays){this.overlays=[];}if(g){this.register(g);this.overlays.sort(this.compareZIndexDesc);}},_onOverlayElementFocus:function(i){var g=c.getTarget(i),h=this.close;if(h&&(g==h||e.isAncestor(h,g))){this.blur();}else{this.focus();}},_onOverlayDestroy:function(h,g,i){this.remove(i);},_onOverlayFocusHandler:function(h,g,i){this._manageFocus(i);},_onOverlayBlurHandler:function(h,g,i){this._manageBlur(i);},_bindFocus:function(g){var h=this;if(!g.focusEvent){g.focusEvent=g.createEvent("focus");g.focusEvent.signature=f.LIST;g.focusEvent._managed=true;}else{g.focusEvent.subscribe(h._onOverlayFocusHandler,g,h);}if(!g.focus){c.on(g.element,h.cfg.getProperty("focusevent"),h._onOverlayElementFocus,null,g);g.focus=function(){if(h._manageFocus(this)){if(this.cfg.getProperty("visible")&&this.focusFirst){this.focusFirst();}this.focusEvent.fire();}};g.focus._managed=true;}},_bindBlur:function(g){var h=this;if(!g.blurEvent){g.blurEvent=g.createEvent("blur");g.blurEvent.signature=f.LIST;g.focusEvent._managed=true;}else{g.blurEvent.subscribe(h._onOverlayBlurHandler,g,h);}if(!g.blur){g.blur=function(){if(h._manageBlur(this)){this.blurEvent.fire();}};g.blur._managed=true;}g.hideEvent.subscribe(g.blur);
 
},_bindDestroy:function(g){var h=this;g.destroyEvent.subscribe(h._onOverlayDestroy,g,h);},_syncZIndex:function(g){var h=e.getStyle(g.element,"zIndex");if(!isNaN(h)){g.cfg.setProperty("zIndex",parseInt(h,10));}else{g.cfg.setProperty("zIndex",0);}},register:function(g){var k=false,h,j;if(g instanceof d){g.cfg.addProperty("manager",{value:this});this._bindFocus(g);this._bindBlur(g);this._bindDestroy(g);this._syncZIndex(g);this.overlays.push(g);this.bringToTop(g);k=true;}else{if(g instanceof Array){for(h=0,j=g.length;h<j;h++){k=this.register(g[h])||k;}}}return k;},bringToTop:function(m){var i=this.find(m),l,g,j;if(i){j=this.overlays;j.sort(this.compareZIndexDesc);g=j[0];if(g){l=e.getStyle(g.element,"zIndex");if(!isNaN(l)){var k=false;if(g!==i){k=true;}else{if(j.length>1){var h=e.getStyle(j[1].element,"zIndex");if(!isNaN(h)&&(l==h)){k=true;}}}if(k){i.cfg.setProperty("zindex",(parseInt(l,10)+2));}}j.sort(this.compareZIndexDesc);}}},find:function(g){var l=g instanceof d,j=this.overlays,p=j.length,k=null,m,h;if(l||typeof g=="string"){for(h=p-1;h>=0;h--){m=j[h];if((l&&(m===g))||(m.id==g)){k=m;break;}}}return k;},compareZIndexDesc:function(j,i){var h=(j.cfg)?j.cfg.getProperty("zIndex"):null,g=(i.cfg)?i.cfg.getProperty("zIndex"):null;if(h===null&&g===null){return 0;}else{if(h===null){return 1;}else{if(g===null){return -1;}else{if(h>g){return -1;}else{if(h<g){return 1;}else{return 0;}}}}}},showAll:function(){var h=this.overlays,j=h.length,g;for(g=j-1;g>=0;g--){h[g].show();}},hideAll:function(){var h=this.overlays,j=h.length,g;for(g=j-1;g>=0;g--){h[g].hide();}},toString:function(){return"OverlayManager";}};}());(function(){YAHOO.widget.Tooltip=function(p,o){YAHOO.widget.Tooltip.superclass.constructor.call(this,p,o);};var e=YAHOO.lang,n=YAHOO.util.Event,m=YAHOO.util.CustomEvent,c=YAHOO.util.Dom,j=YAHOO.widget.Tooltip,h=YAHOO.env.ua,g=(h.ie&&(h.ie<=6||document.compatMode=="BackCompat")),f,i={"PREVENT_OVERLAP":{key:"preventoverlap",value:true,validator:e.isBoolean,supercedes:["x","y","xy"]},"SHOW_DELAY":{key:"showdelay",value:200,validator:e.isNumber},"AUTO_DISMISS_DELAY":{key:"autodismissdelay",value:5000,validator:e.isNumber},"HIDE_DELAY":{key:"hidedelay",value:250,validator:e.isNumber},"TEXT":{key:"text",suppressEvent:true},"CONTAINER":{key:"container"},"DISABLED":{key:"disabled",value:false,suppressEvent:true},"XY_OFFSET":{key:"xyoffset",value:[0,25],suppressEvent:true}},a={"CONTEXT_MOUSE_OVER":"contextMouseOver","CONTEXT_MOUSE_OUT":"contextMouseOut","CONTEXT_TRIGGER":"contextTrigger"};j.CSS_TOOLTIP="yui-tt";function k(q,o){var p=this.cfg,r=p.getProperty("width");if(r==o){p.setProperty("width",q);}}function d(p,o){if("_originalWidth" in this){k.call(this,this._originalWidth,this._forcedWidth);}var q=document.body,u=this.cfg,t=u.getProperty("width"),r,s;if((!t||t=="auto")&&(u.getProperty("container")!=q||u.getProperty("x")>=c.getViewportWidth()||u.getProperty("y")>=c.getViewportHeight())){s=this.element.cloneNode(true);s.style.visibility="hidden";s.style.top="0px";s.style.left="0px";q.appendChild(s);r=(s.offsetWidth+"px");q.removeChild(s);s=null;u.setProperty("width",r);u.refireEvent("xy");this._originalWidth=t||"";this._forcedWidth=r;}}function b(p,o,q){this.render(q);}function l(){n.onDOMReady(b,this.cfg.getProperty("container"),this);}YAHOO.extend(j,YAHOO.widget.Overlay,{init:function(p,o){j.superclass.init.call(this,p);this.beforeInitEvent.fire(j);c.addClass(this.element,j.CSS_TOOLTIP);if(o){this.cfg.applyConfig(o,true);}this.cfg.queueProperty("visible",false);this.cfg.queueProperty("constraintoviewport",true);this.setBody("");this.subscribe("changeContent",d);this.subscribe("init",l);this.subscribe("render",this.onRender);this.initEvent.fire(j);},initEvents:function(){j.superclass.initEvents.call(this);var o=m.LIST;this.contextMouseOverEvent=this.createEvent(a.CONTEXT_MOUSE_OVER);this.contextMouseOverEvent.signature=o;this.contextMouseOutEvent=this.createEvent(a.CONTEXT_MOUSE_OUT);this.contextMouseOutEvent.signature=o;this.contextTriggerEvent=this.createEvent(a.CONTEXT_TRIGGER);this.contextTriggerEvent.signature=o;},initDefaultConfig:function(){j.superclass.initDefaultConfig.call(this);this.cfg.addProperty(i.PREVENT_OVERLAP.key,{value:i.PREVENT_OVERLAP.value,validator:i.PREVENT_OVERLAP.validator,supercedes:i.PREVENT_OVERLAP.supercedes});this.cfg.addProperty(i.SHOW_DELAY.key,{handler:this.configShowDelay,value:200,validator:i.SHOW_DELAY.validator});this.cfg.addProperty(i.AUTO_DISMISS_DELAY.key,{handler:this.configAutoDismissDelay,value:i.AUTO_DISMISS_DELAY.value,validator:i.AUTO_DISMISS_DELAY.validator});this.cfg.addProperty(i.HIDE_DELAY.key,{handler:this.configHideDelay,value:i.HIDE_DELAY.value,validator:i.HIDE_DELAY.validator});this.cfg.addProperty(i.TEXT.key,{handler:this.configText,suppressEvent:i.TEXT.suppressEvent});this.cfg.addProperty(i.CONTAINER.key,{handler:this.configContainer,value:document.body});this.cfg.addProperty(i.DISABLED.key,{handler:this.configContainer,value:i.DISABLED.value,supressEvent:i.DISABLED.suppressEvent});this.cfg.addProperty(i.XY_OFFSET.key,{value:i.XY_OFFSET.value.concat(),supressEvent:i.XY_OFFSET.suppressEvent});},configText:function(p,o,q){var r=o[0];if(r){this.setBody(r);}},configContainer:function(q,p,r){var o=p[0];if(typeof o=="string"){this.cfg.setProperty("container",document.getElementById(o),true);}},_removeEventListeners:function(){var r=this._context,o,q,p;if(r){o=r.length;if(o>0){p=o-1;do{q=r[p];n.removeListener(q,"mouseover",this.onContextMouseOver);n.removeListener(q,"mousemove",this.onContextMouseMove);n.removeListener(q,"mouseout",this.onContextMouseOut);}while(p--);}}},configContext:function(t,p,u){var s=p[0],v,o,r,q;if(s){if(!(s instanceof Array)){if(typeof s=="string"){this.cfg.setProperty("context",[document.getElementById(s)],true);}else{this.cfg.setProperty("context",[s],true);}s=this.cfg.getProperty("context");}this._removeEventListeners();this._context=s;v=this._context;if(v){o=v.length;if(o>0){q=o-1;do{r=v[q];n.on(r,"mouseover",this.onContextMouseOver,this);
 
n.on(r,"mousemove",this.onContextMouseMove,this);n.on(r,"mouseout",this.onContextMouseOut,this);}while(q--);}}}},onContextMouseMove:function(p,o){o.pageX=n.getPageX(p);o.pageY=n.getPageY(p);},onContextMouseOver:function(q,p){var o=this;if(o.title){p._tempTitle=o.title;o.title="";}if(p.fireEvent("contextMouseOver",o,q)!==false&&!p.cfg.getProperty("disabled")){if(p.hideProcId){clearTimeout(p.hideProcId);p.hideProcId=null;}n.on(o,"mousemove",p.onContextMouseMove,p);p.showProcId=p.doShow(q,o);}},onContextMouseOut:function(q,p){var o=this;if(p._tempTitle){o.title=p._tempTitle;p._tempTitle=null;}if(p.showProcId){clearTimeout(p.showProcId);p.showProcId=null;}if(p.hideProcId){clearTimeout(p.hideProcId);p.hideProcId=null;}p.fireEvent("contextMouseOut",o,q);p.hideProcId=setTimeout(function(){p.hide();},p.cfg.getProperty("hidedelay"));},doShow:function(r,o){var t=this.cfg.getProperty("xyoffset"),p=t[0],s=t[1],q=this;if(h.opera&&o.tagName&&o.tagName.toUpperCase()=="A"){s+=12;}return setTimeout(function(){var u=q.cfg.getProperty("text");if(q._tempTitle&&(u===""||YAHOO.lang.isUndefined(u)||YAHOO.lang.isNull(u))){q.setBody(q._tempTitle);}else{q.cfg.refireEvent("text");}q.moveTo(q.pageX+p,q.pageY+s);if(q.cfg.getProperty("preventoverlap")){q.preventOverlap(q.pageX,q.pageY);}n.removeListener(o,"mousemove",q.onContextMouseMove);q.contextTriggerEvent.fire(o);q.show();q.hideProcId=q.doHide();},this.cfg.getProperty("showdelay"));},doHide:function(){var o=this;return setTimeout(function(){o.hide();},this.cfg.getProperty("autodismissdelay"));},preventOverlap:function(s,r){var o=this.element.offsetHeight,q=new YAHOO.util.Point(s,r),p=c.getRegion(this.element);p.top-=5;p.left-=5;p.right+=5;p.bottom+=5;if(p.contains(q)){this.cfg.setProperty("y",(r-o-5));}},onRender:function(s,r){function t(){var w=this.element,v=this.underlay;if(v){v.style.width=(w.offsetWidth+6)+"px";v.style.height=(w.offsetHeight+1)+"px";}}function p(){c.addClass(this.underlay,"yui-tt-shadow-visible");if(h.ie){this.forceUnderlayRedraw();}}function o(){c.removeClass(this.underlay,"yui-tt-shadow-visible");}function u(){var x=this.underlay,w,v,z,y;if(!x){w=this.element;v=YAHOO.widget.Module;z=h.ie;y=this;if(!f){f=document.createElement("div");f.className="yui-tt-shadow";}x=f.cloneNode(false);w.appendChild(x);this.underlay=x;this._shadow=this.underlay;p.call(this);this.subscribe("beforeShow",p);this.subscribe("hide",o);if(g){window.setTimeout(function(){t.call(y);},0);this.cfg.subscribeToConfigEvent("width",t);this.cfg.subscribeToConfigEvent("height",t);this.subscribe("changeContent",t);v.textResizeEvent.subscribe(t,this,true);this.subscribe("destroy",function(){v.textResizeEvent.unsubscribe(t,this);});}}}function q(){u.call(this);this.unsubscribe("beforeShow",q);}if(this.cfg.getProperty("visible")){u.call(this);}else{this.subscribe("beforeShow",q);}},forceUnderlayRedraw:function(){var o=this;c.addClass(o.underlay,"yui-force-redraw");setTimeout(function(){c.removeClass(o.underlay,"yui-force-redraw");},0);},destroy:function(){this._removeEventListeners();j.superclass.destroy.call(this);},toString:function(){return"Tooltip "+this.id;}});}());(function(){YAHOO.widget.Panel=function(v,u){YAHOO.widget.Panel.superclass.constructor.call(this,v,u);};var s=null;var e=YAHOO.lang,f=YAHOO.util,a=f.Dom,t=f.Event,m=f.CustomEvent,k=YAHOO.util.KeyListener,i=f.Config,h=YAHOO.widget.Overlay,o=YAHOO.widget.Panel,l=YAHOO.env.ua,p=(l.ie&&(l.ie<=6||document.compatMode=="BackCompat")),g,q,c,d={"BEFORE_SHOW_MASK":"beforeShowMask","BEFORE_HIDE_MASK":"beforeHideMask","SHOW_MASK":"showMask","HIDE_MASK":"hideMask","DRAG":"drag"},n={"CLOSE":{key:"close",value:true,validator:e.isBoolean,supercedes:["visible"]},"DRAGGABLE":{key:"draggable",value:(f.DD?true:false),validator:e.isBoolean,supercedes:["visible"]},"DRAG_ONLY":{key:"dragonly",value:false,validator:e.isBoolean,supercedes:["draggable"]},"UNDERLAY":{key:"underlay",value:"shadow",supercedes:["visible"]},"MODAL":{key:"modal",value:false,validator:e.isBoolean,supercedes:["visible","zindex"]},"KEY_LISTENERS":{key:"keylisteners",suppressEvent:true,supercedes:["visible"]},"STRINGS":{key:"strings",supercedes:["close"],validator:e.isObject,value:{close:"Close"}}};o.CSS_PANEL="yui-panel";o.CSS_PANEL_CONTAINER="yui-panel-container";o.FOCUSABLE=["a","button","select","textarea","input","iframe"];function j(v,u){if(!this.header&&this.cfg.getProperty("draggable")){this.setHeader("&#160;");}}function r(v,u,w){var z=w[0],x=w[1],y=this.cfg,A=y.getProperty("width");if(A==x){y.setProperty("width",z);}this.unsubscribe("hide",r,w);}function b(v,u){var y,x,w;if(p){y=this.cfg;x=y.getProperty("width");if(!x||x=="auto"){w=(this.element.offsetWidth+"px");y.setProperty("width",w);this.subscribe("hide",r,[(x||""),w]);}}}YAHOO.extend(o,h,{init:function(v,u){o.superclass.init.call(this,v);this.beforeInitEvent.fire(o);a.addClass(this.element,o.CSS_PANEL);this.buildWrapper();if(u){this.cfg.applyConfig(u,true);}this.subscribe("showMask",this._addFocusHandlers);this.subscribe("hideMask",this._removeFocusHandlers);this.subscribe("beforeRender",j);this.subscribe("render",function(){this.setFirstLastFocusable();this.subscribe("changeContent",this.setFirstLastFocusable);});this.subscribe("show",this._focusOnShow);this.initEvent.fire(o);},_onElementFocus:function(z){if(s===this){var y=t.getTarget(z),x=document.documentElement,v=(y!==x&&y!==window);if(v&&y!==this.element&&y!==this.mask&&!a.isAncestor(this.element,y)){try{this._focusFirstModal();}catch(w){try{if(v&&y!==document.body){y.blur();}}catch(u){}}}}},_focusFirstModal:function(){var u=this.firstElement;if(u){u.focus();}else{if(this._modalFocus){this._modalFocus.focus();}else{this.innerElement.focus();}}},_addFocusHandlers:function(v,u){if(!this.firstElement){if(l.webkit||l.opera){if(!this._modalFocus){this._createHiddenFocusElement();}}else{this.innerElement.tabIndex=0;}}this._setTabLoop(this.firstElement,this.lastElement);t.onFocus(document.documentElement,this._onElementFocus,this,true);s=this;},_createHiddenFocusElement:function(){var u=document.createElement("button");
 
u.style.height="1px";u.style.width="1px";u.style.position="absolute";u.style.left="-10000em";u.style.opacity=0;u.tabIndex=-1;this.innerElement.appendChild(u);this._modalFocus=u;},_removeFocusHandlers:function(v,u){t.removeFocusListener(document.documentElement,this._onElementFocus,this);if(s==this){s=null;}},_focusOnShow:function(v,u,w){if(u&&u[1]){t.stopEvent(u[1]);}if(!this.focusFirst(v,u,w)){if(this.cfg.getProperty("modal")){this._focusFirstModal();}}},focusFirst:function(w,u,z){var v=this.firstElement,y=false;if(u&&u[1]){t.stopEvent(u[1]);}if(v){try{v.focus();y=true;}catch(x){}}return y;},focusLast:function(w,u,z){var v=this.lastElement,y=false;if(u&&u[1]){t.stopEvent(u[1]);}if(v){try{v.focus();y=true;}catch(x){}}return y;},_setTabLoop:function(u,v){this.setTabLoop(u,v);},setTabLoop:function(x,z){var v=this.preventBackTab,w=this.preventTabOut,u=this.showEvent,y=this.hideEvent;if(v){v.disable();u.unsubscribe(v.enable,v);y.unsubscribe(v.disable,v);v=this.preventBackTab=null;}if(w){w.disable();u.unsubscribe(w.enable,w);y.unsubscribe(w.disable,w);w=this.preventTabOut=null;}if(x){this.preventBackTab=new k(x,{shift:true,keys:9},{fn:this.focusLast,scope:this,correctScope:true});v=this.preventBackTab;u.subscribe(v.enable,v,true);y.subscribe(v.disable,v,true);}if(z){this.preventTabOut=new k(z,{shift:false,keys:9},{fn:this.focusFirst,scope:this,correctScope:true});w=this.preventTabOut;u.subscribe(w.enable,w,true);y.subscribe(w.disable,w,true);}},getFocusableElements:function(v){v=v||this.innerElement;var x={},u=this;for(var w=0;w<o.FOCUSABLE.length;w++){x[o.FOCUSABLE[w]]=true;}return a.getElementsBy(function(y){return u._testIfFocusable(y,x);},null,v);},_testIfFocusable:function(u,v){if(u.focus&&u.type!=="hidden"&&!u.disabled&&v[u.tagName.toLowerCase()]){return true;}return false;},setFirstLastFocusable:function(){this.firstElement=null;this.lastElement=null;var u=this.getFocusableElements();this.focusableElements=u;if(u.length>0){this.firstElement=u[0];this.lastElement=u[u.length-1];}if(this.cfg.getProperty("modal")){this._setTabLoop(this.firstElement,this.lastElement);}},initEvents:function(){o.superclass.initEvents.call(this);var u=m.LIST;this.showMaskEvent=this.createEvent(d.SHOW_MASK);this.showMaskEvent.signature=u;this.beforeShowMaskEvent=this.createEvent(d.BEFORE_SHOW_MASK);this.beforeShowMaskEvent.signature=u;this.hideMaskEvent=this.createEvent(d.HIDE_MASK);this.hideMaskEvent.signature=u;this.beforeHideMaskEvent=this.createEvent(d.BEFORE_HIDE_MASK);this.beforeHideMaskEvent.signature=u;this.dragEvent=this.createEvent(d.DRAG);this.dragEvent.signature=u;},initDefaultConfig:function(){o.superclass.initDefaultConfig.call(this);this.cfg.addProperty(n.CLOSE.key,{handler:this.configClose,value:n.CLOSE.value,validator:n.CLOSE.validator,supercedes:n.CLOSE.supercedes});this.cfg.addProperty(n.DRAGGABLE.key,{handler:this.configDraggable,value:(f.DD)?true:false,validator:n.DRAGGABLE.validator,supercedes:n.DRAGGABLE.supercedes});this.cfg.addProperty(n.DRAG_ONLY.key,{value:n.DRAG_ONLY.value,validator:n.DRAG_ONLY.validator,supercedes:n.DRAG_ONLY.supercedes});this.cfg.addProperty(n.UNDERLAY.key,{handler:this.configUnderlay,value:n.UNDERLAY.value,supercedes:n.UNDERLAY.supercedes});this.cfg.addProperty(n.MODAL.key,{handler:this.configModal,value:n.MODAL.value,validator:n.MODAL.validator,supercedes:n.MODAL.supercedes});this.cfg.addProperty(n.KEY_LISTENERS.key,{handler:this.configKeyListeners,suppressEvent:n.KEY_LISTENERS.suppressEvent,supercedes:n.KEY_LISTENERS.supercedes});this.cfg.addProperty(n.STRINGS.key,{value:n.STRINGS.value,handler:this.configStrings,validator:n.STRINGS.validator,supercedes:n.STRINGS.supercedes});},configClose:function(y,v,z){var A=v[0],x=this.close,u=this.cfg.getProperty("strings"),w;if(A){if(!x){if(!c){c=document.createElement("a");c.className="container-close";c.href="#";}x=c.cloneNode(true);w=this.innerElement.firstChild;if(w){this.innerElement.insertBefore(x,w);}else{this.innerElement.appendChild(x);}x.innerHTML=(u&&u.close)?u.close:"&#160;";t.on(x,"click",this._doClose,this,true);this.close=x;}else{x.style.display="block";}}else{if(x){x.style.display="none";}}},_doClose:function(u){t.preventDefault(u);this.hide();},configDraggable:function(v,u,w){var x=u[0];if(x){if(!f.DD){this.cfg.setProperty("draggable",false);return;}if(this.header){a.setStyle(this.header,"cursor","move");this.registerDragDrop();}this.subscribe("beforeShow",b);}else{if(this.dd){this.dd.unreg();}if(this.header){a.setStyle(this.header,"cursor","auto");}this.unsubscribe("beforeShow",b);}},configUnderlay:function(D,C,z){var B=(this.platform=="mac"&&l.gecko),E=C[0].toLowerCase(),v=this.underlay,w=this.element;function x(){var F=false;if(!v){if(!q){q=document.createElement("div");q.className="underlay";}v=q.cloneNode(false);this.element.appendChild(v);this.underlay=v;if(p){this.sizeUnderlay();this.cfg.subscribeToConfigEvent("width",this.sizeUnderlay);this.cfg.subscribeToConfigEvent("height",this.sizeUnderlay);this.changeContentEvent.subscribe(this.sizeUnderlay);YAHOO.widget.Module.textResizeEvent.subscribe(this.sizeUnderlay,this,true);}if(l.webkit&&l.webkit<420){this.changeContentEvent.subscribe(this.forceUnderlayRedraw);}F=true;}}function A(){var F=x.call(this);if(!F&&p){this.sizeUnderlay();}this._underlayDeferred=false;this.beforeShowEvent.unsubscribe(A);}function y(){if(this._underlayDeferred){this.beforeShowEvent.unsubscribe(A);this._underlayDeferred=false;}if(v){this.cfg.unsubscribeFromConfigEvent("width",this.sizeUnderlay);this.cfg.unsubscribeFromConfigEvent("height",this.sizeUnderlay);this.changeContentEvent.unsubscribe(this.sizeUnderlay);this.changeContentEvent.unsubscribe(this.forceUnderlayRedraw);YAHOO.widget.Module.textResizeEvent.unsubscribe(this.sizeUnderlay,this,true);this.element.removeChild(v);this.underlay=null;}}switch(E){case"shadow":a.removeClass(w,"matte");a.addClass(w,"shadow");break;case"matte":if(!B){y.call(this);}a.removeClass(w,"shadow");a.addClass(w,"matte");break;default:if(!B){y.call(this);
 
}a.removeClass(w,"shadow");a.removeClass(w,"matte");break;}if((E=="shadow")||(B&&!v)){if(this.cfg.getProperty("visible")){var u=x.call(this);if(!u&&p){this.sizeUnderlay();}}else{if(!this._underlayDeferred){this.beforeShowEvent.subscribe(A);this._underlayDeferred=true;}}}},configModal:function(v,u,x){var w=u[0];if(w){if(!this._hasModalityEventListeners){this.subscribe("beforeShow",this.buildMask);this.subscribe("beforeShow",this.bringToTop);this.subscribe("beforeShow",this.showMask);this.subscribe("hide",this.hideMask);h.windowResizeEvent.subscribe(this.sizeMask,this,true);this._hasModalityEventListeners=true;}}else{if(this._hasModalityEventListeners){if(this.cfg.getProperty("visible")){this.hideMask();this.removeMask();}this.unsubscribe("beforeShow",this.buildMask);this.unsubscribe("beforeShow",this.bringToTop);this.unsubscribe("beforeShow",this.showMask);this.unsubscribe("hide",this.hideMask);h.windowResizeEvent.unsubscribe(this.sizeMask,this);this._hasModalityEventListeners=false;}}},removeMask:function(){var v=this.mask,u;if(v){this.hideMask();u=v.parentNode;if(u){u.removeChild(v);}this.mask=null;}},configKeyListeners:function(x,u,A){var w=u[0],z,y,v;if(w){if(w instanceof Array){y=w.length;for(v=0;v<y;v++){z=w[v];if(!i.alreadySubscribed(this.showEvent,z.enable,z)){this.showEvent.subscribe(z.enable,z,true);}if(!i.alreadySubscribed(this.hideEvent,z.disable,z)){this.hideEvent.subscribe(z.disable,z,true);this.destroyEvent.subscribe(z.disable,z,true);}}}else{if(!i.alreadySubscribed(this.showEvent,w.enable,w)){this.showEvent.subscribe(w.enable,w,true);}if(!i.alreadySubscribed(this.hideEvent,w.disable,w)){this.hideEvent.subscribe(w.disable,w,true);this.destroyEvent.subscribe(w.disable,w,true);}}}},configStrings:function(v,u,w){var x=e.merge(n.STRINGS.value,u[0]);this.cfg.setProperty(n.STRINGS.key,x,true);},configHeight:function(x,v,y){var u=v[0],w=this.innerElement;a.setStyle(w,"height",u);this.cfg.refireEvent("iframe");},_autoFillOnHeightChange:function(x,v,w){o.superclass._autoFillOnHeightChange.apply(this,arguments);if(p){var u=this;setTimeout(function(){u.sizeUnderlay();},0);}},configWidth:function(x,u,y){var w=u[0],v=this.innerElement;a.setStyle(v,"width",w);this.cfg.refireEvent("iframe");},configzIndex:function(v,u,x){o.superclass.configzIndex.call(this,v,u,x);if(this.mask||this.cfg.getProperty("modal")===true){var w=a.getStyle(this.element,"zIndex");if(!w||isNaN(w)){w=0;}if(w===0){this.cfg.setProperty("zIndex",1);}else{this.stackMask();}}},buildWrapper:function(){var w=this.element.parentNode,u=this.element,v=document.createElement("div");v.className=o.CSS_PANEL_CONTAINER;v.id=u.id+"_c";if(w){w.insertBefore(v,u);}v.appendChild(u);this.element=v;this.innerElement=u;a.setStyle(this.innerElement,"visibility","inherit");},sizeUnderlay:function(){var v=this.underlay,u;if(v){u=this.element;v.style.width=u.offsetWidth+"px";v.style.height=u.offsetHeight+"px";}},registerDragDrop:function(){var v=this;if(this.header){if(!f.DD){return;}var u=(this.cfg.getProperty("dragonly")===true);this.dd=new f.DD(this.element.id,this.id,{dragOnly:u});if(!this.header.id){this.header.id=this.id+"_h";}this.dd.startDrag=function(){var x,z,w,C,B,A;if(YAHOO.env.ua.ie==6){a.addClass(v.element,"drag");}if(v.cfg.getProperty("constraintoviewport")){var y=h.VIEWPORT_OFFSET;x=v.element.offsetHeight;z=v.element.offsetWidth;w=a.getViewportWidth();C=a.getViewportHeight();B=a.getDocumentScrollLeft();A=a.getDocumentScrollTop();if(x+y<C){this.minY=A+y;this.maxY=A+C-x-y;}else{this.minY=A+y;this.maxY=A+y;}if(z+y<w){this.minX=B+y;this.maxX=B+w-z-y;}else{this.minX=B+y;this.maxX=B+y;}this.constrainX=true;this.constrainY=true;}else{this.constrainX=false;this.constrainY=false;}v.dragEvent.fire("startDrag",arguments);};this.dd.onDrag=function(){v.syncPosition();v.cfg.refireEvent("iframe");if(this.platform=="mac"&&YAHOO.env.ua.gecko){this.showMacGeckoScrollbars();}v.dragEvent.fire("onDrag",arguments);};this.dd.endDrag=function(){if(YAHOO.env.ua.ie==6){a.removeClass(v.element,"drag");}v.dragEvent.fire("endDrag",arguments);v.moveEvent.fire(v.cfg.getProperty("xy"));};this.dd.setHandleElId(this.header.id);this.dd.addInvalidHandleType("INPUT");this.dd.addInvalidHandleType("SELECT");this.dd.addInvalidHandleType("TEXTAREA");}},buildMask:function(){var u=this.mask;if(!u){if(!g){g=document.createElement("div");g.className="mask";g.innerHTML="&#160;";}u=g.cloneNode(true);u.id=this.id+"_mask";document.body.insertBefore(u,document.body.firstChild);this.mask=u;if(YAHOO.env.ua.gecko&&this.platform=="mac"){a.addClass(this.mask,"block-scrollbars");}this.stackMask();}},hideMask:function(){if(this.cfg.getProperty("modal")&&this.mask&&this.beforeHideMaskEvent.fire()){this.mask.style.display="none";a.removeClass(document.body,"masked");this.hideMaskEvent.fire();}},showMask:function(){if(this.cfg.getProperty("modal")&&this.mask&&this.beforeShowMaskEvent.fire()){a.addClass(document.body,"masked");this.sizeMask();this.mask.style.display="block";this.showMaskEvent.fire();}},sizeMask:function(){if(this.mask){var v=this.mask,w=a.getViewportWidth(),u=a.getViewportHeight();if(v.offsetHeight>u){v.style.height=u+"px";}if(v.offsetWidth>w){v.style.width=w+"px";}v.style.height=a.getDocumentHeight()+"px";v.style.width=a.getDocumentWidth()+"px";}},stackMask:function(){if(this.mask){var u=a.getStyle(this.element,"zIndex");if(!YAHOO.lang.isUndefined(u)&&!isNaN(u)){a.setStyle(this.mask,"zIndex",u-1);}}},render:function(u){return o.superclass.render.call(this,u,this.innerElement);},_renderHeader:function(u){u=u||this.innerElement;o.superclass._renderHeader.call(this,u);},_renderBody:function(u){u=u||this.innerElement;o.superclass._renderBody.call(this,u);},_renderFooter:function(u){u=u||this.innerElement;o.superclass._renderFooter.call(this,u);},destroy:function(u){h.windowResizeEvent.unsubscribe(this.sizeMask,this);this.removeMask();if(this.close){t.purgeElement(this.close);}o.superclass.destroy.call(this,u);},forceUnderlayRedraw:function(){var v=this.underlay;a.addClass(v,"yui-force-redraw");
 
setTimeout(function(){a.removeClass(v,"yui-force-redraw");},0);},toString:function(){return"Panel "+this.id;}});}());(function(){YAHOO.widget.Dialog=function(j,i){YAHOO.widget.Dialog.superclass.constructor.call(this,j,i);};var b=YAHOO.util.Event,g=YAHOO.util.CustomEvent,e=YAHOO.util.Dom,a=YAHOO.widget.Dialog,f=YAHOO.lang,h={"BEFORE_SUBMIT":"beforeSubmit","SUBMIT":"submit","MANUAL_SUBMIT":"manualSubmit","ASYNC_SUBMIT":"asyncSubmit","FORM_SUBMIT":"formSubmit","CANCEL":"cancel"},c={"POST_METHOD":{key:"postmethod",value:"async"},"POST_DATA":{key:"postdata",value:null},"BUTTONS":{key:"buttons",value:"none",supercedes:["visible"]},"HIDEAFTERSUBMIT":{key:"hideaftersubmit",value:true}};a.CSS_DIALOG="yui-dialog";function d(){var m=this._aButtons,k,l,j;if(f.isArray(m)){k=m.length;if(k>0){j=k-1;do{l=m[j];if(YAHOO.widget.Button&&l instanceof YAHOO.widget.Button){l.destroy();}else{if(l.tagName.toUpperCase()=="BUTTON"){b.purgeElement(l);b.purgeElement(l,false);}}}while(j--);}}}YAHOO.extend(a,YAHOO.widget.Panel,{form:null,initDefaultConfig:function(){a.superclass.initDefaultConfig.call(this);this.callback={success:null,failure:null,argument:null};this.cfg.addProperty(c.POST_METHOD.key,{handler:this.configPostMethod,value:c.POST_METHOD.value,validator:function(i){if(i!="form"&&i!="async"&&i!="none"&&i!="manual"){return false;}else{return true;}}});this.cfg.addProperty(c.POST_DATA.key,{value:c.POST_DATA.value});this.cfg.addProperty(c.HIDEAFTERSUBMIT.key,{value:c.HIDEAFTERSUBMIT.value});this.cfg.addProperty(c.BUTTONS.key,{handler:this.configButtons,value:c.BUTTONS.value,supercedes:c.BUTTONS.supercedes});},initEvents:function(){a.superclass.initEvents.call(this);var i=g.LIST;this.beforeSubmitEvent=this.createEvent(h.BEFORE_SUBMIT);this.beforeSubmitEvent.signature=i;this.submitEvent=this.createEvent(h.SUBMIT);this.submitEvent.signature=i;this.manualSubmitEvent=this.createEvent(h.MANUAL_SUBMIT);this.manualSubmitEvent.signature=i;this.asyncSubmitEvent=this.createEvent(h.ASYNC_SUBMIT);this.asyncSubmitEvent.signature=i;this.formSubmitEvent=this.createEvent(h.FORM_SUBMIT);this.formSubmitEvent.signature=i;this.cancelEvent=this.createEvent(h.CANCEL);this.cancelEvent.signature=i;},init:function(j,i){a.superclass.init.call(this,j);this.beforeInitEvent.fire(a);e.addClass(this.element,a.CSS_DIALOG);this.cfg.setProperty("visible",false);if(i){this.cfg.applyConfig(i,true);}this.beforeHideEvent.subscribe(this.blurButtons,this,true);this.subscribe("changeBody",this.registerForm);this.initEvent.fire(a);},doSubmit:function(){var q=YAHOO.util.Connect,r=this.form,l=false,o=false,s,n,m,j;switch(this.cfg.getProperty("postmethod")){case"async":s=r.elements;n=s.length;if(n>0){m=n-1;do{if(s[m].type=="file"){l=true;break;}}while(m--);}if(l&&YAHOO.env.ua.ie&&this.isSecure){o=true;}j=this._getFormAttributes(r);q.setForm(r,l,o);var k=this.cfg.getProperty("postdata");var p=q.asyncRequest(j.method,j.action,this.callback,k);this.asyncSubmitEvent.fire(p);break;case"form":r.submit();this.formSubmitEvent.fire();break;case"none":case"manual":this.manualSubmitEvent.fire();break;}},_getFormAttributes:function(k){var i={method:null,action:null};if(k){if(k.getAttributeNode){var j=k.getAttributeNode("action");var l=k.getAttributeNode("method");if(j){i.action=j.value;}if(l){i.method=l.value;}}else{i.action=k.getAttribute("action");i.method=k.getAttribute("method");}}i.method=(f.isString(i.method)?i.method:"POST").toUpperCase();i.action=f.isString(i.action)?i.action:"";return i;},registerForm:function(){var i=this.element.getElementsByTagName("form")[0];if(this.form){if(this.form==i&&e.isAncestor(this.element,this.form)){return;}else{b.purgeElement(this.form);this.form=null;}}if(!i){i=document.createElement("form");i.name="frm_"+this.id;this.body.appendChild(i);}if(i){this.form=i;b.on(i,"submit",this._submitHandler,this,true);}},_submitHandler:function(i){b.stopEvent(i);this.submit();this.form.blur();},setTabLoop:function(i,j){i=i||this.firstButton;j=j||this.lastButton;a.superclass.setTabLoop.call(this,i,j);},_setTabLoop:function(i,j){i=i||this.firstButton;j=this.lastButton||j;this.setTabLoop(i,j);},setFirstLastFocusable:function(){a.superclass.setFirstLastFocusable.call(this);var k,j,m,n=this.focusableElements;this.firstFormElement=null;this.lastFormElement=null;if(this.form&&n&&n.length>0){j=n.length;for(k=0;k<j;++k){m=n[k];if(this.form===m.form){this.firstFormElement=m;break;}}for(k=j-1;k>=0;--k){m=n[k];if(this.form===m.form){this.lastFormElement=m;break;}}}},configClose:function(j,i,k){a.superclass.configClose.apply(this,arguments);},_doClose:function(i){b.preventDefault(i);this.cancel();},configButtons:function(t,s,n){var o=YAHOO.widget.Button,v=s[0],l=this.innerElement,u,q,k,r,p,j,m;d.call(this);this._aButtons=null;if(f.isArray(v)){p=document.createElement("span");p.className="button-group";r=v.length;this._aButtons=[];this.defaultHtmlButton=null;for(m=0;m<r;m++){u=v[m];if(o){k=new o({label:u.text,type:u.type});k.appendTo(p);q=k.get("element");if(u.isDefault){k.addClass("default");this.defaultHtmlButton=q;}if(f.isFunction(u.handler)){k.set("onclick",{fn:u.handler,obj:this,scope:this});}else{if(f.isObject(u.handler)&&f.isFunction(u.handler.fn)){k.set("onclick",{fn:u.handler.fn,obj:((!f.isUndefined(u.handler.obj))?u.handler.obj:this),scope:(u.handler.scope||this)});}}this._aButtons[this._aButtons.length]=k;}else{q=document.createElement("button");q.setAttribute("type","button");if(u.isDefault){q.className="default";this.defaultHtmlButton=q;}q.innerHTML=u.text;if(f.isFunction(u.handler)){b.on(q,"click",u.handler,this,true);}else{if(f.isObject(u.handler)&&f.isFunction(u.handler.fn)){b.on(q,"click",u.handler.fn,((!f.isUndefined(u.handler.obj))?u.handler.obj:this),(u.handler.scope||this));}}p.appendChild(q);this._aButtons[this._aButtons.length]=q;}u.htmlButton=q;if(m===0){this.firstButton=q;}if(m==(r-1)){this.lastButton=q;}}this.setFooter(p);j=this.footer;if(e.inDocument(this.element)&&!e.isAncestor(l,j)){l.appendChild(j);}this.buttonSpan=p;}else{p=this.buttonSpan;
 
j=this.footer;if(p&&j){j.removeChild(p);this.buttonSpan=null;this.firstButton=null;this.lastButton=null;this.defaultHtmlButton=null;}}this.changeContentEvent.fire();},getButtons:function(){return this._aButtons||null;},focusFirst:function(k,i,n){var j=this.firstFormElement,m=false;if(i&&i[1]){b.stopEvent(i[1]);if(i[0]===9&&this.firstElement){j=this.firstElement;}}if(j){try{j.focus();m=true;}catch(l){}}else{if(this.defaultHtmlButton){m=this.focusDefaultButton();}else{m=this.focusFirstButton();}}return m;},focusLast:function(k,i,n){var o=this.cfg.getProperty("buttons"),j=this.lastFormElement,m=false;if(i&&i[1]){b.stopEvent(i[1]);if(i[0]===9&&this.lastElement){j=this.lastElement;}}if(o&&f.isArray(o)){m=this.focusLastButton();}else{if(j){try{j.focus();m=true;}catch(l){}}}return m;},_getButton:function(j){var i=YAHOO.widget.Button;if(i&&j&&j.nodeName&&j.id){j=i.getButton(j.id)||j;}return j;},focusDefaultButton:function(){var i=this._getButton(this.defaultHtmlButton),k=false;if(i){try{i.focus();k=true;}catch(j){}}return k;},blurButtons:function(){var o=this.cfg.getProperty("buttons"),l,n,k,j;if(o&&f.isArray(o)){l=o.length;if(l>0){j=(l-1);do{n=o[j];if(n){k=this._getButton(n.htmlButton);if(k){try{k.blur();}catch(m){}}}}while(j--);}}},focusFirstButton:function(){var m=this.cfg.getProperty("buttons"),k,i,l=false;if(m&&f.isArray(m)){k=m[0];if(k){i=this._getButton(k.htmlButton);if(i){try{i.focus();l=true;}catch(j){}}}}return l;},focusLastButton:function(){var n=this.cfg.getProperty("buttons"),j,l,i,m=false;if(n&&f.isArray(n)){j=n.length;if(j>0){l=n[(j-1)];if(l){i=this._getButton(l.htmlButton);if(i){try{i.focus();m=true;}catch(k){}}}}}return m;},configPostMethod:function(j,i,k){this.registerForm();},validate:function(){return true;},submit:function(){if(this.validate()){if(this.beforeSubmitEvent.fire()){this.doSubmit();this.submitEvent.fire();if(this.cfg.getProperty("hideaftersubmit")){this.hide();}return true;}else{return false;}}else{return false;}},cancel:function(){this.cancelEvent.fire();this.hide();},getData:function(){var A=this.form,k,t,w,m,u,r,q,j,x,l,y,B,p,C,o,z,v;function s(n){var i=n.tagName.toUpperCase();return((i=="INPUT"||i=="TEXTAREA"||i=="SELECT")&&n.name==m);}if(A){k=A.elements;t=k.length;w={};for(z=0;z<t;z++){m=k[z].name;u=e.getElementsBy(s,"*",A);r=u.length;if(r>0){if(r==1){u=u[0];q=u.type;j=u.tagName.toUpperCase();switch(j){case"INPUT":if(q=="checkbox"){w[m]=u.checked;}else{if(q!="radio"){w[m]=u.value;}}break;case"TEXTAREA":w[m]=u.value;break;case"SELECT":x=u.options;l=x.length;y=[];for(v=0;v<l;v++){B=x[v];if(B.selected){o=B.attributes.value;y[y.length]=(o&&o.specified)?B.value:B.text;}}w[m]=y;break;}}else{q=u[0].type;switch(q){case"radio":for(v=0;v<r;v++){p=u[v];if(p.checked){w[m]=p.value;break;}}break;case"checkbox":y=[];for(v=0;v<r;v++){C=u[v];if(C.checked){y[y.length]=C.value;}}w[m]=y;break;}}}}}return w;},destroy:function(i){d.call(this);this._aButtons=null;var j=this.element.getElementsByTagName("form"),k;if(j.length>0){k=j[0];if(k){b.purgeElement(k);if(k.parentNode){k.parentNode.removeChild(k);}this.form=null;}}a.superclass.destroy.call(this,i);},toString:function(){return"Dialog "+this.id;}});}());(function(){YAHOO.widget.SimpleDialog=function(e,d){YAHOO.widget.SimpleDialog.superclass.constructor.call(this,e,d);};var c=YAHOO.util.Dom,b=YAHOO.widget.SimpleDialog,a={"ICON":{key:"icon",value:"none",suppressEvent:true},"TEXT":{key:"text",value:"",suppressEvent:true,supercedes:["icon"]}};b.ICON_BLOCK="blckicon";b.ICON_ALARM="alrticon";b.ICON_HELP="hlpicon";b.ICON_INFO="infoicon";b.ICON_WARN="warnicon";b.ICON_TIP="tipicon";b.ICON_CSS_CLASSNAME="yui-icon";b.CSS_SIMPLEDIALOG="yui-simple-dialog";YAHOO.extend(b,YAHOO.widget.Dialog,{initDefaultConfig:function(){b.superclass.initDefaultConfig.call(this);this.cfg.addProperty(a.ICON.key,{handler:this.configIcon,value:a.ICON.value,suppressEvent:a.ICON.suppressEvent});this.cfg.addProperty(a.TEXT.key,{handler:this.configText,value:a.TEXT.value,suppressEvent:a.TEXT.suppressEvent,supercedes:a.TEXT.supercedes});},init:function(e,d){b.superclass.init.call(this,e);this.beforeInitEvent.fire(b);c.addClass(this.element,b.CSS_SIMPLEDIALOG);this.cfg.queueProperty("postmethod","manual");if(d){this.cfg.applyConfig(d,true);}this.beforeRenderEvent.subscribe(function(){if(!this.body){this.setBody("");}},this,true);this.initEvent.fire(b);},registerForm:function(){b.superclass.registerForm.call(this);var e=this.form.ownerDocument,d=e.createElement("input");d.type="hidden";d.name=this.id;d.value="";this.form.appendChild(d);},configIcon:function(k,j,h){var d=j[0],e=this.body,f=b.ICON_CSS_CLASSNAME,l,i,g;if(d&&d!="none"){l=c.getElementsByClassName(f,"*",e);if(l.length===1){i=l[0];g=i.parentNode;if(g){g.removeChild(i);i=null;}}if(d.indexOf(".")==-1){i=document.createElement("span");i.className=(f+" "+d);i.innerHTML="&#160;";}else{i=document.createElement("img");i.src=(this.imageRoot+d);i.className=f;}if(i){e.insertBefore(i,e.firstChild);}}},configText:function(e,d,f){var g=d[0];if(g){this.setBody(g);this.cfg.refireEvent("icon");}},toString:function(){return"SimpleDialog "+this.id;}});}());(function(){YAHOO.widget.ContainerEffect=function(e,h,g,d,f){if(!f){f=YAHOO.util.Anim;}this.overlay=e;this.attrIn=h;this.attrOut=g;this.targetElement=d||e.element;this.animClass=f;};var b=YAHOO.util.Dom,c=YAHOO.util.CustomEvent,a=YAHOO.widget.ContainerEffect;a.FADE=function(d,f){var g=YAHOO.util.Easing,i={attributes:{opacity:{from:0,to:1}},duration:f,method:g.easeIn},e={attributes:{opacity:{to:0}},duration:f,method:g.easeOut},h=new a(d,i,e,d.element);h.handleUnderlayStart=function(){var k=this.overlay.underlay;if(k&&YAHOO.env.ua.ie){var j=(k.filters&&k.filters.length>0);if(j){b.addClass(d.element,"yui-effect-fade");}}};h.handleUnderlayComplete=function(){var j=this.overlay.underlay;if(j&&YAHOO.env.ua.ie){b.removeClass(d.element,"yui-effect-fade");}};h.handleStartAnimateIn=function(k,j,l){l.overlay._fadingIn=true;b.addClass(l.overlay.element,"hide-select");if(!l.overlay.underlay){l.overlay.cfg.refireEvent("underlay");
 
}l.handleUnderlayStart();l.overlay._setDomVisibility(true);b.setStyle(l.overlay.element,"opacity",0);};h.handleCompleteAnimateIn=function(k,j,l){l.overlay._fadingIn=false;b.removeClass(l.overlay.element,"hide-select");if(l.overlay.element.style.filter){l.overlay.element.style.filter=null;}l.handleUnderlayComplete();l.overlay.cfg.refireEvent("iframe");l.animateInCompleteEvent.fire();};h.handleStartAnimateOut=function(k,j,l){l.overlay._fadingOut=true;b.addClass(l.overlay.element,"hide-select");l.handleUnderlayStart();};h.handleCompleteAnimateOut=function(k,j,l){l.overlay._fadingOut=false;b.removeClass(l.overlay.element,"hide-select");if(l.overlay.element.style.filter){l.overlay.element.style.filter=null;}l.overlay._setDomVisibility(false);b.setStyle(l.overlay.element,"opacity",1);l.handleUnderlayComplete();l.overlay.cfg.refireEvent("iframe");l.animateOutCompleteEvent.fire();};h.init();return h;};a.SLIDE=function(f,d){var i=YAHOO.util.Easing,l=f.cfg.getProperty("x")||b.getX(f.element),k=f.cfg.getProperty("y")||b.getY(f.element),m=b.getClientWidth(),h=f.element.offsetWidth,j={attributes:{points:{to:[l,k]}},duration:d,method:i.easeIn},e={attributes:{points:{to:[(m+25),k]}},duration:d,method:i.easeOut},g=new a(f,j,e,f.element,YAHOO.util.Motion);g.handleStartAnimateIn=function(o,n,p){p.overlay.element.style.left=((-25)-h)+"px";p.overlay.element.style.top=k+"px";};g.handleTweenAnimateIn=function(q,p,r){var s=b.getXY(r.overlay.element),o=s[0],n=s[1];if(b.getStyle(r.overlay.element,"visibility")=="hidden"&&o<l){r.overlay._setDomVisibility(true);}r.overlay.cfg.setProperty("xy",[o,n],true);r.overlay.cfg.refireEvent("iframe");};g.handleCompleteAnimateIn=function(o,n,p){p.overlay.cfg.setProperty("xy",[l,k],true);p.startX=l;p.startY=k;p.overlay.cfg.refireEvent("iframe");p.animateInCompleteEvent.fire();};g.handleStartAnimateOut=function(o,n,r){var p=b.getViewportWidth(),s=b.getXY(r.overlay.element),q=s[1];r.animOut.attributes.points.to=[(p+25),q];};g.handleTweenAnimateOut=function(p,o,q){var s=b.getXY(q.overlay.element),n=s[0],r=s[1];q.overlay.cfg.setProperty("xy",[n,r],true);q.overlay.cfg.refireEvent("iframe");};g.handleCompleteAnimateOut=function(o,n,p){p.overlay._setDomVisibility(false);p.overlay.cfg.setProperty("xy",[l,k]);p.animateOutCompleteEvent.fire();};g.init();return g;};a.prototype={init:function(){this.beforeAnimateInEvent=this.createEvent("beforeAnimateIn");this.beforeAnimateInEvent.signature=c.LIST;this.beforeAnimateOutEvent=this.createEvent("beforeAnimateOut");this.beforeAnimateOutEvent.signature=c.LIST;this.animateInCompleteEvent=this.createEvent("animateInComplete");this.animateInCompleteEvent.signature=c.LIST;this.animateOutCompleteEvent=this.createEvent("animateOutComplete");this.animateOutCompleteEvent.signature=c.LIST;this.animIn=new this.animClass(this.targetElement,this.attrIn.attributes,this.attrIn.duration,this.attrIn.method);this.animIn.onStart.subscribe(this.handleStartAnimateIn,this);this.animIn.onTween.subscribe(this.handleTweenAnimateIn,this);this.animIn.onComplete.subscribe(this.handleCompleteAnimateIn,this);this.animOut=new this.animClass(this.targetElement,this.attrOut.attributes,this.attrOut.duration,this.attrOut.method);this.animOut.onStart.subscribe(this.handleStartAnimateOut,this);this.animOut.onTween.subscribe(this.handleTweenAnimateOut,this);this.animOut.onComplete.subscribe(this.handleCompleteAnimateOut,this);},animateIn:function(){this._stopAnims(this.lastFrameOnStop);this.beforeAnimateInEvent.fire();this.animIn.animate();},animateOut:function(){this._stopAnims(this.lastFrameOnStop);this.beforeAnimateOutEvent.fire();this.animOut.animate();},lastFrameOnStop:true,_stopAnims:function(d){if(this.animOut&&this.animOut.isAnimated()){this.animOut.stop(d);}if(this.animIn&&this.animIn.isAnimated()){this.animIn.stop(d);}},handleStartAnimateIn:function(e,d,f){},handleTweenAnimateIn:function(e,d,f){},handleCompleteAnimateIn:function(e,d,f){},handleStartAnimateOut:function(e,d,f){},handleTweenAnimateOut:function(e,d,f){},handleCompleteAnimateOut:function(e,d,f){},toString:function(){var d="ContainerEffect";if(this.overlay){d+=" ["+this.overlay.toString()+"]";}return d;}};YAHOO.lang.augmentProto(a,YAHOO.util.EventProvider);})();YAHOO.register("container",YAHOO.widget.Module,{version:"2.9.0",build:"2800"});/*
 
Copyright (c) 2011, Yahoo! Inc. All rights reserved.
 
Code licensed under the BSD License:
 
http://developer.yahoo.com/yui/license.html
 
version: 2.9.0
 
*/
 
var Y=YAHOO,Y_DOM=YAHOO.util.Dom,EMPTY_ARRAY=[],Y_UA=Y.env.ua,Y_Lang=Y.lang,Y_DOC=document,Y_DOCUMENT_ELEMENT=Y_DOC.documentElement,Y_DOM_inDoc=Y_DOM.inDocument,Y_mix=Y_Lang.augmentObject,Y_guid=Y_DOM.generateId,Y_getDoc=function(a){var b=Y_DOC;if(a){b=(a.nodeType===9)?a:a.ownerDocument||a.document||Y_DOC;}return b;},Y_Array=function(g,d){var c,b,h=d||0;try{return Array.prototype.slice.call(g,h);}catch(f){b=[];c=g.length;for(;h<c;h++){b.push(g[h]);}return b;}},Y_DOM_allById=function(f,a){a=a||Y_DOC;var b=[],c=[],d,e;if(a.querySelectorAll){c=a.querySelectorAll('[id="'+f+'"]');}else{if(a.all){b=a.all(f);if(b){if(b.nodeName){if(b.id===f){c.push(b);b=EMPTY_ARRAY;}else{b=[b];}}if(b.length){for(d=0;e=b[d++];){if(e.id===f||(e.attributes&&e.attributes.id&&e.attributes.id.value===f)){c.push(e);}}}}}else{c=[Y_getDoc(a).getElementById(f)];}}return c;};var COMPARE_DOCUMENT_POSITION="compareDocumentPosition",OWNER_DOCUMENT="ownerDocument",Selector={_foundCache:[],useNative:true,_compare:("sourceIndex" in Y_DOCUMENT_ELEMENT)?function(f,e){var d=f.sourceIndex,c=e.sourceIndex;if(d===c){return 0;}else{if(d>c){return 1;}}return -1;}:(Y_DOCUMENT_ELEMENT[COMPARE_DOCUMENT_POSITION]?function(b,a){if(b[COMPARE_DOCUMENT_POSITION](a)&4){return -1;}else{return 1;}}:function(e,d){var c,a,b;if(e&&d){c=e[OWNER_DOCUMENT].createRange();c.setStart(e,0);a=d[OWNER_DOCUMENT].createRange();a.setStart(d,0);b=c.compareBoundaryPoints(1,a);}return b;}),_sort:function(a){if(a){a=Y_Array(a,0,true);if(a.sort){a.sort(Selector._compare);}}return a;},_deDupe:function(a){var b=[],c,d;for(c=0;(d=a[c++]);){if(!d._found){b[b.length]=d;d._found=true;}}for(c=0;(d=b[c++]);){d._found=null;d.removeAttribute("_found");}return b;},query:function(b,j,k,a){if(j&&typeof j=="string"){j=Y_DOM.get(j);if(!j){return(k)?null:[];}}else{j=j||Y_DOC;}var f=[],c=(Selector.useNative&&Y_DOC.querySelector&&!a),e=[[b,j]],g,l,d,h=(c)?Selector._nativeQuery:Selector._bruteQuery;if(b&&h){if(!a&&(!c||j.tagName)){e=Selector._splitQueries(b,j);}for(d=0;(g=e[d++]);){l=h(g[0],g[1],k);if(!k){l=Y_Array(l,0,true);}if(l){f=f.concat(l);}}if(e.length>1){f=Selector._sort(Selector._deDupe(f));}}return(k)?(f[0]||null):f;},_splitQueries:function(c,f){var b=c.split(","),d=[],g="",e,a;if(f){if(f.tagName){f.id=f.id||Y_guid();g='[id="'+f.id+'"] ';}for(e=0,a=b.length;e<a;++e){c=g+b[e];d.push([c,f]);}}return d;},_nativeQuery:function(a,b,c){if(Y_UA.webkit&&a.indexOf(":checked")>-1&&(Selector.pseudos&&Selector.pseudos.checked)){return Selector.query(a,b,c,true);}try{return b["querySelector"+(c?"":"All")](a);}catch(d){return Selector.query(a,b,c,true);}},filter:function(b,a){var c=[],d,e;if(b&&a){for(d=0;(e=b[d++]);){if(Selector.test(e,a)){c[c.length]=e;}}}else{}return c;},test:function(c,d,k){var g=false,b=d.split(","),a=false,l,o,h,n,f,e,m;if(c&&c.tagName){if(!k&&!Y_DOM_inDoc(c)){l=c.parentNode;if(l){k=l;}else{n=c[OWNER_DOCUMENT].createDocumentFragment();n.appendChild(c);k=n;a=true;}}k=k||c[OWNER_DOCUMENT];if(!c.id){c.id=Y_guid();}for(f=0;(m=b[f++]);){m+='[id="'+c.id+'"]';h=Selector.query(m,k);for(e=0;o=h[e++];){if(o===c){g=true;break;}}if(g){break;}}if(a){n.removeChild(c);}}return g;}};YAHOO.util.Selector=Selector;var PARENT_NODE="parentNode",TAG_NAME="tagName",ATTRIBUTES="attributes",COMBINATOR="combinator",PSEUDOS="pseudos",SelectorCSS2={_reRegExpTokens:/([\^\$\?\[\]\*\+\-\.\(\)\|\\])/,SORT_RESULTS:true,_children:function(e,a){var b=e.children,d,c=[],f,g;if(e.children&&a&&e.children.tags){c=e.children.tags(a);}else{if((!b&&e[TAG_NAME])||(b&&a)){f=b||e.childNodes;b=[];for(d=0;(g=f[d++]);){if(g.tagName){if(!a||a===g.tagName){b.push(g);}}}}}return b||[];},_re:{attr:/(\[[^\]]*\])/g,esc:/\\[:\[\]\(\)#\.\'\>+~"]/gi,pseudos:/(\([^\)]*\))/g},shorthand:{"\\#(-?[_a-z]+[-\\w\\uE000]*)":"[id=$1]","\\.(-?[_a-z]+[-\\w\\uE000]*)":"[className~=$1]"},operators:{"":function(b,a){return !!b.getAttribute(a);},"~=":"(?:^|\\s+){val}(?:\\s+|$)","|=":"^{val}(?:-|$)"},pseudos:{"first-child":function(a){return Selector._children(a[PARENT_NODE])[0]===a;}},_bruteQuery:function(f,j,l){var g=[],a=[],i=Selector._tokenize(f),e=i[i.length-1],k=Y_getDoc(j),c,b,h,d;if(e){b=e.id;h=e.className;d=e.tagName||"*";if(j.getElementsByTagName){if(b&&(j.all||(j.nodeType===9||Y_DOM_inDoc(j)))){a=Y_DOM_allById(b,j);}else{if(h){a=j.getElementsByClassName(h);}else{a=j.getElementsByTagName(d);}}}else{c=j.firstChild;while(c){if(c.tagName){a.push(c);}c=c.nextSilbing||c.firstChild;}}if(a.length){g=Selector._filterNodes(a,i,l);}}return g;},_filterNodes:function(l,f,h){var r=0,q,s=f.length,k=s-1,e=[],o=l[0],v=o,t=Selector.getters,d,p,c,g,a,m,b,u;for(r=0;(v=o=l[r++]);){k=s-1;g=null;testLoop:while(v&&v.tagName){c=f[k];b=c.tests;q=b.length;if(q&&!a){while((u=b[--q])){d=u[1];if(t[u[0]]){m=t[u[0]](v,u[0]);}else{m=v[u[0]];if(m===undefined&&v.getAttribute){m=v.getAttribute(u[0]);}}if((d==="="&&m!==u[2])||(typeof d!=="string"&&d.test&&!d.test(m))||(!d.test&&typeof d==="function"&&!d(v,u[0],u[2]))){if((v=v[g])){while(v&&(!v.tagName||(c.tagName&&c.tagName!==v.tagName))){v=v[g];}}continue testLoop;}}}k--;if(!a&&(p=c.combinator)){g=p.axis;v=v[g];while(v&&!v.tagName){v=v[g];}if(p.direct){g=null;}}else{e.push(o);if(h){return e;}break;}}}o=v=null;return e;},combinators:{" ":{axis:"parentNode"},">":{axis:"parentNode",direct:true},"+":{axis:"previousSibling",direct:true}},_parsers:[{name:ATTRIBUTES,re:/^\uE003(-?[a-z]+[\w\-]*)+([~\|\^\$\*!=]=?)?['"]?([^\uE004'"]*)['"]?\uE004/i,fn:function(d,e){var c=d[2]||"",a=Selector.operators,b=(d[3])?d[3].replace(/\\/g,""):"",f;if((d[1]==="id"&&c==="=")||(d[1]==="className"&&Y_DOCUMENT_ELEMENT.getElementsByClassName&&(c==="~="||c==="="))){e.prefilter=d[1];d[3]=b;e[d[1]]=(d[1]==="id")?d[3]:b;}if(c in a){f=a[c];if(typeof f==="string"){d[3]=b.replace(Selector._reRegExpTokens,"\\$1");f=new RegExp(f.replace("{val}",d[3]));}d[2]=f;}if(!e.last||e.prefilter!==d[1]){return d.slice(1);}}},{name:TAG_NAME,re:/^((?:-?[_a-z]+[\w-]*)|\*)/i,fn:function(b,c){var a=b[1].toUpperCase();c.tagName=a;if(a!=="*"&&(!c.last||c.prefilter)){return[TAG_NAME,"=",a];
 
}if(!c.prefilter){c.prefilter="tagName";}}},{name:COMBINATOR,re:/^\s*([>+~]|\s)\s*/,fn:function(a,b){}},{name:PSEUDOS,re:/^:([\-\w]+)(?:\uE005['"]?([^\uE005]*)['"]?\uE006)*/i,fn:function(a,b){var c=Selector[PSEUDOS][a[1]];if(c){if(a[2]){a[2]=a[2].replace(/\\/g,"");}return[a[2],c];}else{return false;}}}],_getToken:function(a){return{tagName:null,id:null,className:null,attributes:{},combinator:null,tests:[]};},_tokenize:function(c){c=c||"";c=Selector._replaceShorthand(Y_Lang.trim(c));var b=Selector._getToken(),h=c,g=[],j=false,e,f,d,a;outer:do{j=false;for(d=0;(a=Selector._parsers[d++]);){if((e=a.re.exec(c))){if(a.name!==COMBINATOR){b.selector=c;}c=c.replace(e[0],"");if(!c.length){b.last=true;}if(Selector._attrFilters[e[1]]){e[1]=Selector._attrFilters[e[1]];}f=a.fn(e,b);if(f===false){j=false;break outer;}else{if(f){b.tests.push(f);}}if(!c.length||a.name===COMBINATOR){g.push(b);b=Selector._getToken(b);if(a.name===COMBINATOR){b.combinator=Selector.combinators[e[1]];}}j=true;}}}while(j&&c.length);if(!j||c.length){g=[];}return g;},_replaceShorthand:function(b){var d=Selector.shorthand,c=b.match(Selector._re.esc),e,h,g,f,a;if(c){b=b.replace(Selector._re.esc,"\uE000");}e=b.match(Selector._re.attr);h=b.match(Selector._re.pseudos);if(e){b=b.replace(Selector._re.attr,"\uE001");}if(h){b=b.replace(Selector._re.pseudos,"\uE002");}for(g in d){if(d.hasOwnProperty(g)){b=b.replace(new RegExp(g,"gi"),d[g]);}}if(e){for(f=0,a=e.length;f<a;++f){b=b.replace(/\uE001/,e[f]);}}if(h){for(f=0,a=h.length;f<a;++f){b=b.replace(/\uE002/,h[f]);}}b=b.replace(/\[/g,"\uE003");b=b.replace(/\]/g,"\uE004");b=b.replace(/\(/g,"\uE005");b=b.replace(/\)/g,"\uE006");if(c){for(f=0,a=c.length;f<a;++f){b=b.replace("\uE000",c[f]);}}return b;},_attrFilters:{"class":"className","for":"htmlFor"},getters:{href:function(b,a){return Y_DOM.getAttribute(b,a);}}};Y_mix(Selector,SelectorCSS2,true);Selector.getters.src=Selector.getters.rel=Selector.getters.href;if(Selector.useNative&&Y_DOC.querySelector){Selector.shorthand["\\.([^\\s\\\\(\\[:]*)"]="[class~=$1]";}Selector._reNth=/^(?:([\-]?\d*)(n){1}|(odd|even)$)*([\-+]?\d*)$/;Selector._getNth=function(d,o,q,h){Selector._reNth.test(o);var m=parseInt(RegExp.$1,10),c=RegExp.$2,j=RegExp.$3,k=parseInt(RegExp.$4,10)||0,p=[],l=Selector._children(d.parentNode,q),f;if(j){m=2;f="+";c="n";k=(j==="odd")?1:0;}else{if(isNaN(m)){m=(c)?1:0;}}if(m===0){if(h){k=l.length-k+1;}if(l[k-1]===d){return true;}else{return false;}}else{if(m<0){h=!!h;m=Math.abs(m);}}if(!h){for(var e=k-1,g=l.length;e<g;e+=m){if(e>=0&&l[e]===d){return true;}}}else{for(var e=l.length-k,g=l.length;e>=0;e-=m){if(e<g&&l[e]===d){return true;}}}return false;};Y_mix(Selector.pseudos,{"root":function(a){return a===a.ownerDocument.documentElement;},"nth-child":function(a,b){return Selector._getNth(a,b);},"nth-last-child":function(a,b){return Selector._getNth(a,b,null,true);},"nth-of-type":function(a,b){return Selector._getNth(a,b,a.tagName);},"nth-last-of-type":function(a,b){return Selector._getNth(a,b,a.tagName,true);},"last-child":function(b){var a=Selector._children(b.parentNode);return a[a.length-1]===b;},"first-of-type":function(a){return Selector._children(a.parentNode,a.tagName)[0]===a;},"last-of-type":function(b){var a=Selector._children(b.parentNode,b.tagName);return a[a.length-1]===b;},"only-child":function(b){var a=Selector._children(b.parentNode);return a.length===1&&a[0]===b;},"only-of-type":function(b){var a=Selector._children(b.parentNode,b.tagName);return a.length===1&&a[0]===b;},"empty":function(a){return a.childNodes.length===0;},"not":function(a,b){return !Selector.test(a,b);},"contains":function(a,b){var c=a.innerText||a.textContent||"";return c.indexOf(b)>-1;},"checked":function(a){return(a.checked===true||a.selected===true);},enabled:function(a){return(a.disabled!==undefined&&!a.disabled);},disabled:function(a){return(a.disabled);}});Y_mix(Selector.operators,{"^=":"^{val}","!=":function(b,a,c){return b[a]!==c;},"$=":"{val}$","*=":"{val}"});Selector.combinators["~"]={axis:"previousSibling"};YAHOO.register("selector",YAHOO.util.Selector,{version:"2.9.0",build:"2800"});/*
 
Copyright (c) 2011, Yahoo! Inc. All rights reserved.
 
Code licensed under the BSD License:
 
http://developer.yahoo.com/yui/license.html
 
version: 2.9.0
 
*/
 
(function(){var A=YAHOO.util.Event,C=YAHOO.lang,B=[],D=function(H,E,F){var G;if(!H||H===F){G=false;}else{G=YAHOO.util.Selector.test(H,E)?H:D(H.parentNode,E,F);}return G;};C.augmentObject(A,{_createDelegate:function(F,E,G,H){return function(I){var J=this,N=A.getTarget(I),L=E,P=(J.nodeType===9),Q,K,O,M;if(C.isFunction(E)){Q=E(N);}else{if(C.isString(E)){if(!P){O=J.id;if(!O){O=A.generateId(J);}M=("#"+O+" ");L=(M+E).replace(/,/gi,(","+M));}if(YAHOO.util.Selector.test(N,L)){Q=N;}else{if(YAHOO.util.Selector.test(N,((L.replace(/,/gi," *,"))+" *"))){Q=D(N,L,J);}}}}if(Q){K=Q;if(H){if(H===true){K=G;}else{K=H;}}return F.call(K,I,Q,J,G);}};},delegate:function(F,J,L,G,H,I){var E=J,K,M;if(C.isString(G)&&!YAHOO.util.Selector){return false;}if(J=="mouseenter"||J=="mouseleave"){if(!A._createMouseDelegate){return false;}E=A._getType(J);K=A._createMouseDelegate(L,H,I);M=A._createDelegate(function(P,O,N){return K.call(O,P,N);},G,H,I);}else{M=A._createDelegate(L,G,H,I);}B.push([F,E,L,M]);return A.on(F,E,M);},removeDelegate:function(F,J,I){var K=J,H=false,G,E;if(J=="mouseenter"||J=="mouseleave"){K=A._getType(J);}G=A._getCacheIndex(B,F,K,I);if(G>=0){E=B[G];}if(F&&E){H=A.removeListener(E[0],E[1],E[3]);if(H){delete B[G][2];delete B[G][3];B.splice(G,1);}}return H;}});}());YAHOO.register("event-delegate",YAHOO.util.Event,{version:"2.9.0",build:"2800"});/*
 
Copyright (c) 2011, Yahoo! Inc. All rights reserved.
 
Code licensed under the BSD License:
 
http://developer.yahoo.com/yui/license.html
 
version: 2.9.0
 
*/
 
(function(){var l=YAHOO.lang,isFunction=l.isFunction,isObject=l.isObject,isArray=l.isArray,_toStr=Object.prototype.toString,Native=(YAHOO.env.ua.caja?window:this).JSON,_UNICODE_EXCEPTIONS=/[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,_ESCAPES=/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,_VALUES=/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,_BRACKETS=/(?:^|:|,)(?:\s*\[)+/g,_UNSAFE=/[^\],:{}\s]/,_SPECIAL_CHARS=/[\\\"\x00-\x1f\x7f-\x9f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,_CHARS={"\b":"\\b","\t":"\\t","\n":"\\n","\f":"\\f","\r":"\\r",'"':'\\"',"\\":"\\\\"},UNDEFINED="undefined",OBJECT="object",NULL="null",STRING="string",NUMBER="number",BOOLEAN="boolean",DATE="date",_allowable={"undefined":UNDEFINED,"string":STRING,"[object String]":STRING,"number":NUMBER,"[object Number]":NUMBER,"boolean":BOOLEAN,"[object Boolean]":BOOLEAN,"[object Date]":DATE,"[object RegExp]":OBJECT},EMPTY="",OPEN_O="{",CLOSE_O="}",OPEN_A="[",CLOSE_A="]",COMMA=",",COMMA_CR=",\n",CR="\n",COLON=":",COLON_SP=": ",QUOTE='"';Native=_toStr.call(Native)==="[object JSON]"&&Native;function _char(c){if(!_CHARS[c]){_CHARS[c]="\\u"+("0000"+(+(c.charCodeAt(0))).toString(16)).slice(-4);}return _CHARS[c];}function _revive(data,reviver){var walk=function(o,key){var k,v,value=o[key];if(value&&typeof value==="object"){for(k in value){if(l.hasOwnProperty(value,k)){v=walk(value,k);if(v===undefined){delete value[k];}else{value[k]=v;}}}}return reviver.call(o,key,value);};return typeof reviver==="function"?walk({"":data},""):data;}function _prepare(s){return s.replace(_UNICODE_EXCEPTIONS,_char);}function _isSafe(str){return l.isString(str)&&!_UNSAFE.test(str.replace(_ESCAPES,"@").replace(_VALUES,"]").replace(_BRACKETS,""));}function _parse(s,reviver){s=_prepare(s);if(_isSafe(s)){return _revive(eval("("+s+")"),reviver);}throw new SyntaxError("JSON.parse");}function _type(o){var t=typeof o;return _allowable[t]||_allowable[_toStr.call(o)]||(t===OBJECT?(o?OBJECT:NULL):UNDEFINED);}function _string(s){return QUOTE+s.replace(_SPECIAL_CHARS,_char)+QUOTE;}function _indent(s,space){return s.replace(/^/gm,space);}function _stringify(o,w,space){if(o===undefined){return undefined;}var replacer=isFunction(w)?w:null,format=_toStr.call(space).match(/String|Number/)||[],_date=YAHOO.lang.JSON.dateToString,stack=[],tmp,i,len;if(replacer||!isArray(w)){w=undefined;}if(w){tmp={};for(i=0,len=w.length;i<len;++i){tmp[w[i]]=true;}w=tmp;}space=format[0]==="Number"?new Array(Math.min(Math.max(0,space),10)+1).join(" "):(space||EMPTY).slice(0,10);function _serialize(h,key){var value=h[key],t=_type(value),a=[],colon=space?COLON_SP:COLON,arr,i,keys,k,v;if(isObject(value)&&isFunction(value.toJSON)){value=value.toJSON(key);}else{if(t===DATE){value=_date(value);}}if(isFunction(replacer)){value=replacer.call(h,key,value);}if(value!==h[key]){t=_type(value);}switch(t){case DATE:case OBJECT:break;case STRING:return _string(value);case NUMBER:return isFinite(value)?value+EMPTY:NULL;case BOOLEAN:return value+EMPTY;case NULL:return NULL;default:return undefined;}for(i=stack.length-1;i>=0;--i){if(stack[i]===value){throw new Error("JSON.stringify. Cyclical reference");}}arr=isArray(value);stack.push(value);if(arr){for(i=value.length-1;i>=0;--i){a[i]=_serialize(value,i)||NULL;}}else{keys=w||value;i=0;for(k in keys){if(l.hasOwnProperty(keys,k)){v=_serialize(value,k);if(v){a[i++]=_string(k)+colon+v;}}}}stack.pop();if(space&&a.length){return arr?OPEN_A+CR+_indent(a.join(COMMA_CR),space)+CR+CLOSE_A:OPEN_O+CR+_indent(a.join(COMMA_CR),space)+CR+CLOSE_O;}else{return arr?OPEN_A+a.join(COMMA)+CLOSE_A:OPEN_O+a.join(COMMA)+CLOSE_O;}}return _serialize({"":o},"");}YAHOO.lang.JSON={useNativeParse:!!Native,useNativeStringify:!!Native,isSafe:function(s){return _isSafe(_prepare(s));},parse:function(s,reviver){if(typeof s!=="string"){s+="";}return Native&&YAHOO.lang.JSON.useNativeParse?Native.parse(s,reviver):_parse(s,reviver);},stringify:function(o,w,space){return Native&&YAHOO.lang.JSON.useNativeStringify?Native.stringify(o,w,space):_stringify(o,w,space);},dateToString:function(d){function _zeroPad(v){return v<10?"0"+v:v;}return d.getUTCFullYear()+"-"+_zeroPad(d.getUTCMonth()+1)+"-"+_zeroPad(d.getUTCDate())+"T"+_zeroPad(d.getUTCHours())+COLON+_zeroPad(d.getUTCMinutes())+COLON+_zeroPad(d.getUTCSeconds())+"Z";},stringToDate:function(str){var m=str.match(/^(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2})(?:\.(\d{3}))?Z$/);if(m){var d=new Date();d.setUTCFullYear(m[1],m[2]-1,m[3]);d.setUTCHours(m[4],m[5],m[6],(m[7]||0));return d;}return str;}};YAHOO.lang.JSON.isValid=YAHOO.lang.JSON.isSafe;})();YAHOO.register("json",YAHOO.lang.JSON,{version:"2.9.0",build:"2800"});/*
 
Copyright (c) 2011, Yahoo! Inc. All rights reserved.
 
Code licensed under the BSD License:
 
http://developer.yahoo.com/yui/license.html
 
version: 2.9.0
 
*/
 
(function(){var b=YAHOO.util.Event,g=YAHOO.lang,e=b.addListener,f=b.removeListener,c=b.getListeners,d=[],h={mouseenter:"mouseover",mouseleave:"mouseout"},a=function(n,m,l){var j=b._getCacheIndex(d,n,m,l),i,k;if(j>=0){i=d[j];}if(n&&i){k=f.call(b,i[0],m,i[3]);if(k){delete d[j][2];delete d[j][3];d.splice(j,1);}}return k;};g.augmentObject(b._specialTypes,h);g.augmentObject(b,{_createMouseDelegate:function(i,j,k){return function(q,m){var p=this,l=b.getRelatedTarget(q),o,n;if(p!=l&&!YAHOO.util.Dom.isAncestor(p,l)){o=p;if(k){if(k===true){o=j;}else{o=k;}}n=[q,j];if(m){n.splice(1,0,p,m);}return i.apply(o,n);}};},addListener:function(m,l,k,n,o){var i,j;if(h[l]){i=b._createMouseDelegate(k,n,o);i.mouseDelegate=true;d.push([m,l,k,i]);j=e.call(b,m,l,i);}else{j=e.apply(b,arguments);}return j;},removeListener:function(l,k,j){var i;if(h[k]){i=a.apply(b,arguments);}else{i=f.apply(b,arguments);}return i;},getListeners:function(p,o){var n=[],r,m=(o==="mouseover"||o==="mouseout"),q,k,j;if(o&&(m||h[o])){r=c.call(b,p,this._getType(o));if(r){for(k=r.length-1;k>-1;k--){j=r[k];q=j.fn.mouseDelegate;if((h[o]&&q)||(m&&!q)){n.push(j);}}}}else{n=c.apply(b,arguments);}return(n&&n.length)?n:null;}},true);b.on=b.addListener;}());YAHOO.register("event-mouseenter",YAHOO.util.Event,{version:"2.9.0",build:"2800"});
 
/*
 
Copyright (c) 2011, Yahoo! Inc. All rights reserved.
 
Code licensed under the BSD License:
 
http://developer.yahoo.com/yui/license.html
 
version: 2.9.0
 
*/
 
(function(){var lang=YAHOO.lang,util=YAHOO.util,Ev=util.Event;util.DataSourceBase=function(oLiveData,oConfigs){if(oLiveData===null||oLiveData===undefined){return;}this.liveData=oLiveData;this._oQueue={interval:null,conn:null,requests:[]};this.responseSchema={};if(oConfigs&&(oConfigs.constructor==Object)){for(var sConfig in oConfigs){if(sConfig){this[sConfig]=oConfigs[sConfig];}}}var maxCacheEntries=this.maxCacheEntries;if(!lang.isNumber(maxCacheEntries)||(maxCacheEntries<0)){maxCacheEntries=0;}this._aIntervals=[];this.createEvent("cacheRequestEvent");this.createEvent("cacheResponseEvent");this.createEvent("requestEvent");this.createEvent("responseEvent");this.createEvent("responseParseEvent");this.createEvent("responseCacheEvent");this.createEvent("dataErrorEvent");this.createEvent("cacheFlushEvent");var DS=util.DataSourceBase;this._sName="DataSource instance"+DS._nIndex;DS._nIndex++;};var DS=util.DataSourceBase;lang.augmentObject(DS,{TYPE_UNKNOWN:-1,TYPE_JSARRAY:0,TYPE_JSFUNCTION:1,TYPE_XHR:2,TYPE_JSON:3,TYPE_XML:4,TYPE_TEXT:5,TYPE_HTMLTABLE:6,TYPE_SCRIPTNODE:7,TYPE_LOCAL:8,ERROR_DATAINVALID:"Invalid data",ERROR_DATANULL:"Null data",_nIndex:0,_nTransactionId:0,_cloneObject:function(o){if(!lang.isValue(o)){return o;}var copy={};if(Object.prototype.toString.apply(o)==="[object RegExp]"){copy=o;}else{if(lang.isFunction(o)){copy=o;}else{if(lang.isArray(o)){var array=[];for(var i=0,len=o.length;i<len;i++){array[i]=DS._cloneObject(o[i]);}copy=array;}else{if(lang.isObject(o)){for(var x in o){if(lang.hasOwnProperty(o,x)){if(lang.isValue(o[x])&&lang.isObject(o[x])||lang.isArray(o[x])){copy[x]=DS._cloneObject(o[x]);}else{copy[x]=o[x];}}}}else{copy=o;}}}}return copy;},_getLocationValue:function(field,context){var locator=field.locator||field.key||field,xmldoc=context.ownerDocument||context,result,res,value=null;try{if(!lang.isUndefined(xmldoc.evaluate)){result=xmldoc.evaluate(locator,context,xmldoc.createNSResolver(!context.ownerDocument?context.documentElement:context.ownerDocument.documentElement),0,null);while(res=result.iterateNext()){value=res.textContent;}}else{xmldoc.setProperty("SelectionLanguage","XPath");result=context.selectNodes(locator)[0];value=result.value||result.text||null;}return value;}catch(e){}},issueCallback:function(callback,params,error,scope){if(lang.isFunction(callback)){callback.apply(scope,params);}else{if(lang.isObject(callback)){scope=callback.scope||scope||window;var callbackFunc=callback.success;if(error){callbackFunc=callback.failure;}if(callbackFunc){callbackFunc.apply(scope,params.concat([callback.argument]));}}}},parseString:function(oData){if(!lang.isValue(oData)){return null;}var string=oData+"";if(lang.isString(string)){return string;}else{return null;}},parseNumber:function(oData){if(!lang.isValue(oData)||(oData==="")){return null;}var number=oData*1;if(lang.isNumber(number)){return number;}else{return null;}},convertNumber:function(oData){return DS.parseNumber(oData);},parseDate:function(oData){var date=null;if(lang.isValue(oData)&&!(oData instanceof Date)){date=new Date(oData);}else{return oData;}if(date instanceof Date){return date;}else{return null;}},convertDate:function(oData){return DS.parseDate(oData);}});DS.Parser={string:DS.parseString,number:DS.parseNumber,date:DS.parseDate};DS.prototype={_sName:null,_aCache:null,_oQueue:null,_aIntervals:null,maxCacheEntries:0,liveData:null,dataType:DS.TYPE_UNKNOWN,responseType:DS.TYPE_UNKNOWN,responseSchema:null,useXPath:false,cloneBeforeCaching:false,toString:function(){return this._sName;},getCachedResponse:function(oRequest,oCallback,oCaller){var aCache=this._aCache;if(this.maxCacheEntries>0){if(!aCache){this._aCache=[];}else{var nCacheLength=aCache.length;if(nCacheLength>0){var oResponse=null;this.fireEvent("cacheRequestEvent",{request:oRequest,callback:oCallback,caller:oCaller});for(var i=nCacheLength-1;i>=0;i--){var oCacheElem=aCache[i];if(this.isCacheHit(oRequest,oCacheElem.request)){oResponse=oCacheElem.response;this.fireEvent("cacheResponseEvent",{request:oRequest,response:oResponse,callback:oCallback,caller:oCaller});if(i<nCacheLength-1){aCache.splice(i,1);this.addToCache(oRequest,oResponse);}oResponse.cached=true;break;}}return oResponse;}}}else{if(aCache){this._aCache=null;}}return null;},isCacheHit:function(oRequest,oCachedRequest){return(oRequest===oCachedRequest);},addToCache:function(oRequest,oResponse){var aCache=this._aCache;if(!aCache){return;}while(aCache.length>=this.maxCacheEntries){aCache.shift();}oResponse=(this.cloneBeforeCaching)?DS._cloneObject(oResponse):oResponse;var oCacheElem={request:oRequest,response:oResponse};aCache[aCache.length]=oCacheElem;this.fireEvent("responseCacheEvent",{request:oRequest,response:oResponse});},flushCache:function(){if(this._aCache){this._aCache=[];this.fireEvent("cacheFlushEvent");}},setInterval:function(nMsec,oRequest,oCallback,oCaller){if(lang.isNumber(nMsec)&&(nMsec>=0)){var oSelf=this;var nId=setInterval(function(){oSelf.makeConnection(oRequest,oCallback,oCaller);},nMsec);this._aIntervals.push(nId);return nId;}else{}},clearInterval:function(nId){var tracker=this._aIntervals||[];for(var i=tracker.length-1;i>-1;i--){if(tracker[i]===nId){tracker.splice(i,1);clearInterval(nId);}}},clearAllIntervals:function(){var tracker=this._aIntervals||[];for(var i=tracker.length-1;i>-1;i--){clearInterval(tracker[i]);}tracker=[];},sendRequest:function(oRequest,oCallback,oCaller){var oCachedResponse=this.getCachedResponse(oRequest,oCallback,oCaller);if(oCachedResponse){DS.issueCallback(oCallback,[oRequest,oCachedResponse],false,oCaller);return null;}return this.makeConnection(oRequest,oCallback,oCaller);},makeConnection:function(oRequest,oCallback,oCaller){var tId=DS._nTransactionId++;this.fireEvent("requestEvent",{tId:tId,request:oRequest,callback:oCallback,caller:oCaller});var oRawResponse=this.liveData;this.handleResponse(oRequest,oRawResponse,oCallback,oCaller,tId);return tId;},handleResponse:function(oRequest,oRawResponse,oCallback,oCaller,tId){this.fireEvent("responseEvent",{tId:tId,request:oRequest,response:oRawResponse,callback:oCallback,caller:oCaller});
 
var xhr=(this.dataType==DS.TYPE_XHR)?true:false;var oParsedResponse=null;var oFullResponse=oRawResponse;if(this.responseType===DS.TYPE_UNKNOWN){var ctype=(oRawResponse&&oRawResponse.getResponseHeader)?oRawResponse.getResponseHeader["Content-Type"]:null;if(ctype){if(ctype.indexOf("text/xml")>-1){this.responseType=DS.TYPE_XML;}else{if(ctype.indexOf("application/json")>-1){this.responseType=DS.TYPE_JSON;}else{if(ctype.indexOf("text/plain")>-1){this.responseType=DS.TYPE_TEXT;}}}}else{if(YAHOO.lang.isArray(oRawResponse)){this.responseType=DS.TYPE_JSARRAY;}else{if(oRawResponse&&oRawResponse.nodeType&&(oRawResponse.nodeType===9||oRawResponse.nodeType===1||oRawResponse.nodeType===11)){this.responseType=DS.TYPE_XML;}else{if(oRawResponse&&oRawResponse.nodeName&&(oRawResponse.nodeName.toLowerCase()=="table")){this.responseType=DS.TYPE_HTMLTABLE;}else{if(YAHOO.lang.isObject(oRawResponse)){this.responseType=DS.TYPE_JSON;}else{if(YAHOO.lang.isString(oRawResponse)){this.responseType=DS.TYPE_TEXT;}}}}}}}switch(this.responseType){case DS.TYPE_JSARRAY:if(xhr&&oRawResponse&&oRawResponse.responseText){oFullResponse=oRawResponse.responseText;}try{if(lang.isString(oFullResponse)){var parseArgs=[oFullResponse].concat(this.parseJSONArgs);if(lang.JSON){oFullResponse=lang.JSON.parse.apply(lang.JSON,parseArgs);}else{if(window.JSON&&JSON.parse){oFullResponse=JSON.parse.apply(JSON,parseArgs);}else{if(oFullResponse.parseJSON){oFullResponse=oFullResponse.parseJSON.apply(oFullResponse,parseArgs.slice(1));}else{while(oFullResponse.length>0&&(oFullResponse.charAt(0)!="{")&&(oFullResponse.charAt(0)!="[")){oFullResponse=oFullResponse.substring(1,oFullResponse.length);}if(oFullResponse.length>0){var arrayEnd=Math.max(oFullResponse.lastIndexOf("]"),oFullResponse.lastIndexOf("}"));oFullResponse=oFullResponse.substring(0,arrayEnd+1);oFullResponse=eval("("+oFullResponse+")");}}}}}}catch(e1){}oFullResponse=this.doBeforeParseData(oRequest,oFullResponse,oCallback);oParsedResponse=this.parseArrayData(oRequest,oFullResponse);break;case DS.TYPE_JSON:if(xhr&&oRawResponse&&oRawResponse.responseText){oFullResponse=oRawResponse.responseText;}try{if(lang.isString(oFullResponse)){var parseArgs=[oFullResponse].concat(this.parseJSONArgs);if(lang.JSON){oFullResponse=lang.JSON.parse.apply(lang.JSON,parseArgs);}else{if(window.JSON&&JSON.parse){oFullResponse=JSON.parse.apply(JSON,parseArgs);}else{if(oFullResponse.parseJSON){oFullResponse=oFullResponse.parseJSON.apply(oFullResponse,parseArgs.slice(1));}else{while(oFullResponse.length>0&&(oFullResponse.charAt(0)!="{")&&(oFullResponse.charAt(0)!="[")){oFullResponse=oFullResponse.substring(1,oFullResponse.length);}if(oFullResponse.length>0){var objEnd=Math.max(oFullResponse.lastIndexOf("]"),oFullResponse.lastIndexOf("}"));oFullResponse=oFullResponse.substring(0,objEnd+1);oFullResponse=eval("("+oFullResponse+")");}}}}}}catch(e){}oFullResponse=this.doBeforeParseData(oRequest,oFullResponse,oCallback);oParsedResponse=this.parseJSONData(oRequest,oFullResponse);break;case DS.TYPE_HTMLTABLE:if(xhr&&oRawResponse.responseText){var el=document.createElement("div");el.innerHTML=oRawResponse.responseText;oFullResponse=el.getElementsByTagName("table")[0];}oFullResponse=this.doBeforeParseData(oRequest,oFullResponse,oCallback);oParsedResponse=this.parseHTMLTableData(oRequest,oFullResponse);break;case DS.TYPE_XML:if(xhr&&oRawResponse.responseXML){oFullResponse=oRawResponse.responseXML;}oFullResponse=this.doBeforeParseData(oRequest,oFullResponse,oCallback);oParsedResponse=this.parseXMLData(oRequest,oFullResponse);break;case DS.TYPE_TEXT:if(xhr&&lang.isString(oRawResponse.responseText)){oFullResponse=oRawResponse.responseText;}oFullResponse=this.doBeforeParseData(oRequest,oFullResponse,oCallback);oParsedResponse=this.parseTextData(oRequest,oFullResponse);break;default:oFullResponse=this.doBeforeParseData(oRequest,oFullResponse,oCallback);oParsedResponse=this.parseData(oRequest,oFullResponse);break;}oParsedResponse=oParsedResponse||{};if(!oParsedResponse.results){oParsedResponse.results=[];}if(!oParsedResponse.meta){oParsedResponse.meta={};}if(!oParsedResponse.error){oParsedResponse=this.doBeforeCallback(oRequest,oFullResponse,oParsedResponse,oCallback);this.fireEvent("responseParseEvent",{request:oRequest,response:oParsedResponse,callback:oCallback,caller:oCaller});this.addToCache(oRequest,oParsedResponse);}else{oParsedResponse.error=true;this.fireEvent("dataErrorEvent",{request:oRequest,response:oRawResponse,callback:oCallback,caller:oCaller,message:DS.ERROR_DATANULL});}oParsedResponse.tId=tId;DS.issueCallback(oCallback,[oRequest,oParsedResponse],oParsedResponse.error,oCaller);},doBeforeParseData:function(oRequest,oFullResponse,oCallback){return oFullResponse;},doBeforeCallback:function(oRequest,oFullResponse,oParsedResponse,oCallback){return oParsedResponse;},parseData:function(oRequest,oFullResponse){if(lang.isValue(oFullResponse)){var oParsedResponse={results:oFullResponse,meta:{}};return oParsedResponse;}return null;},parseArrayData:function(oRequest,oFullResponse){if(lang.isArray(oFullResponse)){var results=[],i,j,rec,field,data;if(lang.isArray(this.responseSchema.fields)){var fields=this.responseSchema.fields;for(i=fields.length-1;i>=0;--i){if(typeof fields[i]!=="object"){fields[i]={key:fields[i]};}}var parsers={},p;for(i=fields.length-1;i>=0;--i){p=(typeof fields[i].parser==="function"?fields[i].parser:DS.Parser[fields[i].parser+""])||fields[i].converter;if(p){parsers[fields[i].key]=p;}}var arrType=lang.isArray(oFullResponse[0]);for(i=oFullResponse.length-1;i>-1;i--){var oResult={};rec=oFullResponse[i];if(typeof rec==="object"){for(j=fields.length-1;j>-1;j--){field=fields[j];data=arrType?rec[j]:rec[field.key];if(parsers[field.key]){data=parsers[field.key].call(this,data);}if(data===undefined){data=null;}oResult[field.key]=data;}}else{if(lang.isString(rec)){for(j=fields.length-1;j>-1;j--){field=fields[j];data=rec;if(parsers[field.key]){data=parsers[field.key].call(this,data);}if(data===undefined){data=null;}oResult[field.key]=data;
 
}}}results[i]=oResult;}}else{results=oFullResponse;}var oParsedResponse={results:results};return oParsedResponse;}return null;},parseTextData:function(oRequest,oFullResponse){if(lang.isString(oFullResponse)){if(lang.isString(this.responseSchema.recordDelim)&&lang.isString(this.responseSchema.fieldDelim)){var oParsedResponse={results:[]};var recDelim=this.responseSchema.recordDelim;var fieldDelim=this.responseSchema.fieldDelim;if(oFullResponse.length>0){var newLength=oFullResponse.length-recDelim.length;if(oFullResponse.substr(newLength)==recDelim){oFullResponse=oFullResponse.substr(0,newLength);}if(oFullResponse.length>0){var recordsarray=oFullResponse.split(recDelim);for(var i=0,len=recordsarray.length,recIdx=0;i<len;++i){var bError=false,sRecord=recordsarray[i];if(lang.isString(sRecord)&&(sRecord.length>0)){var fielddataarray=recordsarray[i].split(fieldDelim);var oResult={};if(lang.isArray(this.responseSchema.fields)){var fields=this.responseSchema.fields;for(var j=fields.length-1;j>-1;j--){try{var data=fielddataarray[j];if(lang.isString(data)){if(data.charAt(0)=='"'){data=data.substr(1);}if(data.charAt(data.length-1)=='"'){data=data.substr(0,data.length-1);}var field=fields[j];var key=(lang.isValue(field.key))?field.key:field;if(!field.parser&&field.converter){field.parser=field.converter;}var parser=(typeof field.parser==="function")?field.parser:DS.Parser[field.parser+""];if(parser){data=parser.call(this,data);}if(data===undefined){data=null;}oResult[key]=data;}else{bError=true;}}catch(e){bError=true;}}}else{oResult=fielddataarray;}if(!bError){oParsedResponse.results[recIdx++]=oResult;}}}}}return oParsedResponse;}}return null;},parseXMLResult:function(result){var oResult={},schema=this.responseSchema;try{for(var m=schema.fields.length-1;m>=0;m--){var field=schema.fields[m];var key=(lang.isValue(field.key))?field.key:field;var data=null;if(this.useXPath){data=YAHOO.util.DataSource._getLocationValue(field,result);}else{var xmlAttr=result.attributes.getNamedItem(key);if(xmlAttr){data=xmlAttr.value;}else{var xmlNode=result.getElementsByTagName(key);if(xmlNode&&xmlNode.item(0)){var item=xmlNode.item(0);data=(item)?((item.text)?item.text:(item.textContent)?item.textContent:null):null;if(!data){var datapieces=[];for(var j=0,len=item.childNodes.length;j<len;j++){if(item.childNodes[j].nodeValue){datapieces[datapieces.length]=item.childNodes[j].nodeValue;}}if(datapieces.length>0){data=datapieces.join("");}}}}}if(data===null){data="";}if(!field.parser&&field.converter){field.parser=field.converter;}var parser=(typeof field.parser==="function")?field.parser:DS.Parser[field.parser+""];if(parser){data=parser.call(this,data);}if(data===undefined){data=null;}oResult[key]=data;}}catch(e){}return oResult;},parseXMLData:function(oRequest,oFullResponse){var bError=false,schema=this.responseSchema,oParsedResponse={meta:{}},xmlList=null,metaNode=schema.metaNode,metaLocators=schema.metaFields||{},i,k,loc,v;try{if(this.useXPath){for(k in metaLocators){oParsedResponse.meta[k]=YAHOO.util.DataSource._getLocationValue(metaLocators[k],oFullResponse);}}else{metaNode=metaNode?oFullResponse.getElementsByTagName(metaNode)[0]:oFullResponse;if(metaNode){for(k in metaLocators){if(lang.hasOwnProperty(metaLocators,k)){loc=metaLocators[k];v=metaNode.getElementsByTagName(loc)[0];if(v){v=v.firstChild.nodeValue;}else{v=metaNode.attributes.getNamedItem(loc);if(v){v=v.value;}}if(lang.isValue(v)){oParsedResponse.meta[k]=v;}}}}}xmlList=(schema.resultNode)?oFullResponse.getElementsByTagName(schema.resultNode):null;}catch(e){}if(!xmlList||!lang.isArray(schema.fields)){bError=true;}else{oParsedResponse.results=[];for(i=xmlList.length-1;i>=0;--i){var oResult=this.parseXMLResult(xmlList.item(i));oParsedResponse.results[i]=oResult;}}if(bError){oParsedResponse.error=true;}else{}return oParsedResponse;},parseJSONData:function(oRequest,oFullResponse){var oParsedResponse={results:[],meta:{}};if(lang.isObject(oFullResponse)&&this.responseSchema.resultsList){var schema=this.responseSchema,fields=schema.fields,resultsList=oFullResponse,results=[],metaFields=schema.metaFields||{},fieldParsers=[],fieldPaths=[],simpleFields=[],bError=false,i,len,j,v,key,parser,path;var buildPath=function(needle){var path=null,keys=[],i=0;if(needle){needle=needle.replace(/\[(['"])(.*?)\1\]/g,function(x,$1,$2){keys[i]=$2;return".@"+(i++);}).replace(/\[(\d+)\]/g,function(x,$1){keys[i]=parseInt($1,10)|0;return".@"+(i++);}).replace(/^\./,"");if(!/[^\w\.\$@]/.test(needle)){path=needle.split(".");for(i=path.length-1;i>=0;--i){if(path[i].charAt(0)==="@"){path[i]=keys[parseInt(path[i].substr(1),10)];}}}else{}}return path;};var walkPath=function(path,origin){var v=origin,i=0,len=path.length;for(;i<len&&v;++i){v=v[path[i]];}return v;};path=buildPath(schema.resultsList);if(path){resultsList=walkPath(path,oFullResponse);if(resultsList===undefined){bError=true;}}else{bError=true;}if(!resultsList){resultsList=[];}if(!lang.isArray(resultsList)){resultsList=[resultsList];}if(!bError){if(schema.fields){var field;for(i=0,len=fields.length;i<len;i++){field=fields[i];key=field.key||field;parser=((typeof field.parser==="function")?field.parser:DS.Parser[field.parser+""])||field.converter;path=buildPath(key);if(parser){fieldParsers[fieldParsers.length]={key:key,parser:parser};}if(path){if(path.length>1){fieldPaths[fieldPaths.length]={key:key,path:path};}else{simpleFields[simpleFields.length]={key:key,path:path[0]};}}else{}}for(i=resultsList.length-1;i>=0;--i){var r=resultsList[i],rec={};if(r){for(j=simpleFields.length-1;j>=0;--j){rec[simpleFields[j].key]=(r[simpleFields[j].path]!==undefined)?r[simpleFields[j].path]:r[j];}for(j=fieldPaths.length-1;j>=0;--j){rec[fieldPaths[j].key]=walkPath(fieldPaths[j].path,r);}for(j=fieldParsers.length-1;j>=0;--j){var p=fieldParsers[j].key;rec[p]=fieldParsers[j].parser.call(this,rec[p]);if(rec[p]===undefined){rec[p]=null;}}}results[i]=rec;}}else{results=resultsList;}for(key in metaFields){if(lang.hasOwnProperty(metaFields,key)){path=buildPath(metaFields[key]);
 
if(path){v=walkPath(path,oFullResponse);oParsedResponse.meta[key]=v;}}}}else{oParsedResponse.error=true;}oParsedResponse.results=results;}else{oParsedResponse.error=true;}return oParsedResponse;},parseHTMLTableData:function(oRequest,oFullResponse){var bError=false;var elTable=oFullResponse;var fields=this.responseSchema.fields;var oParsedResponse={results:[]};if(lang.isArray(fields)){for(var i=0;i<elTable.tBodies.length;i++){var elTbody=elTable.tBodies[i];for(var j=elTbody.rows.length-1;j>-1;j--){var elRow=elTbody.rows[j];var oResult={};for(var k=fields.length-1;k>-1;k--){var field=fields[k];var key=(lang.isValue(field.key))?field.key:field;var data=elRow.cells[k].innerHTML;if(!field.parser&&field.converter){field.parser=field.converter;}var parser=(typeof field.parser==="function")?field.parser:DS.Parser[field.parser+""];if(parser){data=parser.call(this,data);}if(data===undefined){data=null;}oResult[key]=data;}oParsedResponse.results[j]=oResult;}}}else{bError=true;}if(bError){oParsedResponse.error=true;}else{}return oParsedResponse;}};lang.augmentProto(DS,util.EventProvider);util.LocalDataSource=function(oLiveData,oConfigs){this.dataType=DS.TYPE_LOCAL;if(oLiveData){if(YAHOO.lang.isArray(oLiveData)){this.responseType=DS.TYPE_JSARRAY;}else{if(oLiveData.nodeType&&oLiveData.nodeType==9){this.responseType=DS.TYPE_XML;}else{if(oLiveData.nodeName&&(oLiveData.nodeName.toLowerCase()=="table")){this.responseType=DS.TYPE_HTMLTABLE;oLiveData=oLiveData.cloneNode(true);}else{if(YAHOO.lang.isString(oLiveData)){this.responseType=DS.TYPE_TEXT;}else{if(YAHOO.lang.isObject(oLiveData)){this.responseType=DS.TYPE_JSON;}}}}}}else{oLiveData=[];this.responseType=DS.TYPE_JSARRAY;}util.LocalDataSource.superclass.constructor.call(this,oLiveData,oConfigs);};lang.extend(util.LocalDataSource,DS);lang.augmentObject(util.LocalDataSource,DS);util.FunctionDataSource=function(oLiveData,oConfigs){this.dataType=DS.TYPE_JSFUNCTION;oLiveData=oLiveData||function(){};util.FunctionDataSource.superclass.constructor.call(this,oLiveData,oConfigs);};lang.extend(util.FunctionDataSource,DS,{scope:null,makeConnection:function(oRequest,oCallback,oCaller){var tId=DS._nTransactionId++;this.fireEvent("requestEvent",{tId:tId,request:oRequest,callback:oCallback,caller:oCaller});var oRawResponse=(this.scope)?this.liveData.call(this.scope,oRequest,this,oCallback):this.liveData(oRequest,oCallback);if(this.responseType===DS.TYPE_UNKNOWN){if(YAHOO.lang.isArray(oRawResponse)){this.responseType=DS.TYPE_JSARRAY;}else{if(oRawResponse&&oRawResponse.nodeType&&oRawResponse.nodeType==9){this.responseType=DS.TYPE_XML;}else{if(oRawResponse&&oRawResponse.nodeName&&(oRawResponse.nodeName.toLowerCase()=="table")){this.responseType=DS.TYPE_HTMLTABLE;}else{if(YAHOO.lang.isObject(oRawResponse)){this.responseType=DS.TYPE_JSON;}else{if(YAHOO.lang.isString(oRawResponse)){this.responseType=DS.TYPE_TEXT;}}}}}}this.handleResponse(oRequest,oRawResponse,oCallback,oCaller,tId);return tId;}});lang.augmentObject(util.FunctionDataSource,DS);util.ScriptNodeDataSource=function(oLiveData,oConfigs){this.dataType=DS.TYPE_SCRIPTNODE;oLiveData=oLiveData||"";util.ScriptNodeDataSource.superclass.constructor.call(this,oLiveData,oConfigs);};lang.extend(util.ScriptNodeDataSource,DS,{getUtility:util.Get,asyncMode:"allowAll",scriptCallbackParam:"callback",generateRequestCallback:function(id){return"&"+this.scriptCallbackParam+"=YAHOO.util.ScriptNodeDataSource.callbacks["+id+"]";},doBeforeGetScriptNode:function(sUri){return sUri;},makeConnection:function(oRequest,oCallback,oCaller){var tId=DS._nTransactionId++;this.fireEvent("requestEvent",{tId:tId,request:oRequest,callback:oCallback,caller:oCaller});if(util.ScriptNodeDataSource._nPending===0){util.ScriptNodeDataSource.callbacks=[];util.ScriptNodeDataSource._nId=0;}var id=util.ScriptNodeDataSource._nId;util.ScriptNodeDataSource._nId++;var oSelf=this;util.ScriptNodeDataSource.callbacks[id]=function(oRawResponse){if((oSelf.asyncMode!=="ignoreStaleResponses")||(id===util.ScriptNodeDataSource.callbacks.length-1)){if(oSelf.responseType===DS.TYPE_UNKNOWN){if(YAHOO.lang.isArray(oRawResponse)){oSelf.responseType=DS.TYPE_JSARRAY;}else{if(oRawResponse.nodeType&&oRawResponse.nodeType==9){oSelf.responseType=DS.TYPE_XML;}else{if(oRawResponse.nodeName&&(oRawResponse.nodeName.toLowerCase()=="table")){oSelf.responseType=DS.TYPE_HTMLTABLE;}else{if(YAHOO.lang.isObject(oRawResponse)){oSelf.responseType=DS.TYPE_JSON;}else{if(YAHOO.lang.isString(oRawResponse)){oSelf.responseType=DS.TYPE_TEXT;}}}}}}oSelf.handleResponse(oRequest,oRawResponse,oCallback,oCaller,tId);}else{}delete util.ScriptNodeDataSource.callbacks[id];};util.ScriptNodeDataSource._nPending++;var sUri=this.liveData+oRequest+this.generateRequestCallback(id);sUri=this.doBeforeGetScriptNode(sUri);this.getUtility.script(sUri,{autopurge:true,onsuccess:util.ScriptNodeDataSource._bumpPendingDown,onfail:util.ScriptNodeDataSource._bumpPendingDown});return tId;}});lang.augmentObject(util.ScriptNodeDataSource,DS);lang.augmentObject(util.ScriptNodeDataSource,{_nId:0,_nPending:0,callbacks:[]});util.XHRDataSource=function(oLiveData,oConfigs){this.dataType=DS.TYPE_XHR;this.connMgr=this.connMgr||util.Connect;oLiveData=oLiveData||"";util.XHRDataSource.superclass.constructor.call(this,oLiveData,oConfigs);};lang.extend(util.XHRDataSource,DS,{connMgr:null,connXhrMode:"allowAll",connMethodPost:false,connTimeout:0,makeConnection:function(oRequest,oCallback,oCaller){var oRawResponse=null;var tId=DS._nTransactionId++;this.fireEvent("requestEvent",{tId:tId,request:oRequest,callback:oCallback,caller:oCaller});var oSelf=this;var oConnMgr=this.connMgr;var oQueue=this._oQueue;var _xhrSuccess=function(oResponse){if(oResponse&&(this.connXhrMode=="ignoreStaleResponses")&&(oResponse.tId!=oQueue.conn.tId)){return null;}else{if(!oResponse){this.fireEvent("dataErrorEvent",{request:oRequest,response:null,callback:oCallback,caller:oCaller,message:DS.ERROR_DATANULL});DS.issueCallback(oCallback,[oRequest,{error:true}],true,oCaller);return null;
 
}else{if(this.responseType===DS.TYPE_UNKNOWN){var ctype=(oResponse.getResponseHeader)?oResponse.getResponseHeader["Content-Type"]:null;if(ctype){if(ctype.indexOf("text/xml")>-1){this.responseType=DS.TYPE_XML;}else{if(ctype.indexOf("application/json")>-1){this.responseType=DS.TYPE_JSON;}else{if(ctype.indexOf("text/plain")>-1){this.responseType=DS.TYPE_TEXT;}}}}}this.handleResponse(oRequest,oResponse,oCallback,oCaller,tId);}}};var _xhrFailure=function(oResponse){this.fireEvent("dataErrorEvent",{request:oRequest,response:oResponse,callback:oCallback,caller:oCaller,message:DS.ERROR_DATAINVALID});if(lang.isString(this.liveData)&&lang.isString(oRequest)&&(this.liveData.lastIndexOf("?")!==this.liveData.length-1)&&(oRequest.indexOf("?")!==0)){}oResponse=oResponse||{};oResponse.error=true;DS.issueCallback(oCallback,[oRequest,oResponse],true,oCaller);return null;};var _xhrCallback={success:_xhrSuccess,failure:_xhrFailure,scope:this};if(lang.isNumber(this.connTimeout)){_xhrCallback.timeout=this.connTimeout;}if(this.connXhrMode=="cancelStaleRequests"){if(oQueue.conn){if(oConnMgr.abort){oConnMgr.abort(oQueue.conn);oQueue.conn=null;}else{}}}if(oConnMgr&&oConnMgr.asyncRequest){var sLiveData=this.liveData;var isPost=this.connMethodPost;var sMethod=(isPost)?"POST":"GET";var sUri=(isPost||!lang.isValue(oRequest))?sLiveData:sLiveData+oRequest;var sRequest=(isPost)?oRequest:null;if(this.connXhrMode!="queueRequests"){oQueue.conn=oConnMgr.asyncRequest(sMethod,sUri,_xhrCallback,sRequest);}else{if(oQueue.conn){var allRequests=oQueue.requests;allRequests.push({request:oRequest,callback:_xhrCallback});if(!oQueue.interval){oQueue.interval=setInterval(function(){if(oConnMgr.isCallInProgress(oQueue.conn)){return;}else{if(allRequests.length>0){sUri=(isPost||!lang.isValue(allRequests[0].request))?sLiveData:sLiveData+allRequests[0].request;sRequest=(isPost)?allRequests[0].request:null;oQueue.conn=oConnMgr.asyncRequest(sMethod,sUri,allRequests[0].callback,sRequest);allRequests.shift();}else{clearInterval(oQueue.interval);oQueue.interval=null;}}},50);}}else{oQueue.conn=oConnMgr.asyncRequest(sMethod,sUri,_xhrCallback,sRequest);}}}else{DS.issueCallback(oCallback,[oRequest,{error:true}],true,oCaller);}return tId;}});lang.augmentObject(util.XHRDataSource,DS);util.DataSource=function(oLiveData,oConfigs){oConfigs=oConfigs||{};var dataType=oConfigs.dataType;if(dataType){if(dataType==DS.TYPE_LOCAL){return new util.LocalDataSource(oLiveData,oConfigs);}else{if(dataType==DS.TYPE_XHR){return new util.XHRDataSource(oLiveData,oConfigs);}else{if(dataType==DS.TYPE_SCRIPTNODE){return new util.ScriptNodeDataSource(oLiveData,oConfigs);}else{if(dataType==DS.TYPE_JSFUNCTION){return new util.FunctionDataSource(oLiveData,oConfigs);}}}}}if(YAHOO.lang.isString(oLiveData)){return new util.XHRDataSource(oLiveData,oConfigs);}else{if(YAHOO.lang.isFunction(oLiveData)){return new util.FunctionDataSource(oLiveData,oConfigs);}else{return new util.LocalDataSource(oLiveData,oConfigs);}}};lang.augmentObject(util.DataSource,DS);})();YAHOO.util.Number={format:function(e,k){if(e===""||e===null||!isFinite(e)){return"";}e=+e;k=YAHOO.lang.merge(YAHOO.util.Number.format.defaults,(k||{}));var j=e+"",l=Math.abs(e),b=k.decimalPlaces||0,r=k.thousandsSeparator,f=k.negativeFormat||("-"+k.format),q,p,g,h;if(f.indexOf("#")>-1){f=f.replace(/#/,k.format);}if(b<0){q=l-(l%1)+"";g=q.length+b;if(g>0){q=Number("."+q).toFixed(g).slice(2)+new Array(q.length-g+1).join("0");}else{q="0";}}else{var a=l+"";if(b>0||a.indexOf(".")>0){var d=Math.pow(10,b);q=Math.round(l*d)/d+"";var c=q.indexOf("."),m,o;if(c<0){m=b;o=(Math.pow(10,m)+"").substring(1);if(b>0){q=q+"."+o;}}else{m=b-(q.length-c-1);o=(Math.pow(10,m)+"").substring(1);q=q+o;}}else{q=l.toFixed(b)+"";}}p=q.split(/\D/);if(l>=1000){g=p[0].length%3||3;p[0]=p[0].slice(0,g)+p[0].slice(g).replace(/(\d{3})/g,r+"$1");}return YAHOO.util.Number.format._applyFormat((e<0?f:k.format),p.join(k.decimalSeparator),k);}};YAHOO.util.Number.format.defaults={format:"{prefix}{number}{suffix}",negativeFormat:null,decimalSeparator:".",decimalPlaces:null,thousandsSeparator:""};YAHOO.util.Number.format._applyFormat=function(a,b,c){return a.replace(/\{(\w+)\}/g,function(d,e){return e==="number"?b:e in c?c[e]:"";});};(function(){var a=function(c,e,d){if(typeof d==="undefined"){d=10;}for(;parseInt(c,10)<d&&d>1;d/=10){c=e.toString()+c;}return c.toString();};var b={formats:{a:function(e,c){return c.a[e.getDay()];},A:function(e,c){return c.A[e.getDay()];},b:function(e,c){return c.b[e.getMonth()];},B:function(e,c){return c.B[e.getMonth()];},C:function(c){return a(parseInt(c.getFullYear()/100,10),0);},d:["getDate","0"],e:["getDate"," "],g:function(c){return a(parseInt(b.formats.G(c)%100,10),0);},G:function(f){var g=f.getFullYear();var e=parseInt(b.formats.V(f),10);var c=parseInt(b.formats.W(f),10);if(c>e){g++;}else{if(c===0&&e>=52){g--;}}return g;},H:["getHours","0"],I:function(e){var c=e.getHours()%12;return a(c===0?12:c,0);},j:function(h){var g=new Date(""+h.getFullYear()+"/1/1 GMT");var e=new Date(""+h.getFullYear()+"/"+(h.getMonth()+1)+"/"+h.getDate()+" GMT");var c=e-g;var f=parseInt(c/60000/60/24,10)+1;return a(f,0,100);},k:["getHours"," "],l:function(e){var c=e.getHours()%12;return a(c===0?12:c," ");},m:function(c){return a(c.getMonth()+1,0);},M:["getMinutes","0"],p:function(e,c){return c.p[e.getHours()>=12?1:0];},P:function(e,c){return c.P[e.getHours()>=12?1:0];},s:function(e,c){return parseInt(e.getTime()/1000,10);},S:["getSeconds","0"],u:function(c){var e=c.getDay();return e===0?7:e;},U:function(g){var c=parseInt(b.formats.j(g),10);var f=6-g.getDay();var e=parseInt((c+f)/7,10);return a(e,0);},V:function(g){var f=parseInt(b.formats.W(g),10);var c=(new Date(""+g.getFullYear()+"/1/1")).getDay();var e=f+(c>4||c<=1?0:1);if(e===53&&(new Date(""+g.getFullYear()+"/12/31")).getDay()<4){e=1;}else{if(e===0){e=b.formats.V(new Date(""+(g.getFullYear()-1)+"/12/31"));}}return a(e,0);},w:"getDay",W:function(g){var c=parseInt(b.formats.j(g),10);var f=7-b.formats.u(g);var e=parseInt((c+f)/7,10);
 
return a(e,0,10);},y:function(c){return a(c.getFullYear()%100,0);},Y:"getFullYear",z:function(f){var e=f.getTimezoneOffset();var c=a(parseInt(Math.abs(e/60),10),0);var g=a(Math.abs(e%60),0);return(e>0?"-":"+")+c+g;},Z:function(c){var e=c.toString().replace(/^.*:\d\d( GMT[+-]\d+)? \(?([A-Za-z ]+)\)?\d*$/,"$2").replace(/[a-z ]/g,"");if(e.length>4){e=b.formats.z(c);}return e;},"%":function(c){return"%";}},aggregates:{c:"locale",D:"%m/%d/%y",F:"%Y-%m-%d",h:"%b",n:"\n",r:"locale",R:"%H:%M",t:"\t",T:"%H:%M:%S",x:"locale",X:"locale"},format:function(g,f,d){f=f||{};if(!(g instanceof Date)){return YAHOO.lang.isValue(g)?g:"";}var h=f.format||"%m/%d/%Y";if(h==="YYYY/MM/DD"){h="%Y/%m/%d";}else{if(h==="DD/MM/YYYY"){h="%d/%m/%Y";}else{if(h==="MM/DD/YYYY"){h="%m/%d/%Y";}}}d=d||"en";if(!(d in YAHOO.util.DateLocale)){if(d.replace(/-[a-zA-Z]+$/,"") in YAHOO.util.DateLocale){d=d.replace(/-[a-zA-Z]+$/,"");}else{d="en";}}var j=YAHOO.util.DateLocale[d];var c=function(l,k){var m=b.aggregates[k];return(m==="locale"?j[k]:m);};var e=function(l,k){var m=b.formats[k];if(typeof m==="string"){return g[m]();}else{if(typeof m==="function"){return m.call(g,g,j);}else{if(typeof m==="object"&&typeof m[0]==="string"){return a(g[m[0]](),m[1]);}else{return k;}}}};while(h.match(/%[cDFhnrRtTxX]/)){h=h.replace(/%([cDFhnrRtTxX])/g,c);}var i=h.replace(/%([aAbBCdegGHIjklmMpPsSuUVwWyYzZ%])/g,e);c=e=undefined;return i;}};YAHOO.namespace("YAHOO.util");YAHOO.util.Date=b;YAHOO.util.DateLocale={a:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],A:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],b:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],B:["January","February","March","April","May","June","July","August","September","October","November","December"],c:"%a %d %b %Y %T %Z",p:["AM","PM"],P:["am","pm"],r:"%I:%M:%S %p",x:"%d/%m/%y",X:"%T"};YAHOO.util.DateLocale["en"]=YAHOO.lang.merge(YAHOO.util.DateLocale,{});YAHOO.util.DateLocale["en-US"]=YAHOO.lang.merge(YAHOO.util.DateLocale["en"],{c:"%a %d %b %Y %I:%M:%S %p %Z",x:"%m/%d/%Y",X:"%I:%M:%S %p"});YAHOO.util.DateLocale["en-GB"]=YAHOO.lang.merge(YAHOO.util.DateLocale["en"],{r:"%l:%M:%S %P %Z"});YAHOO.util.DateLocale["en-AU"]=YAHOO.lang.merge(YAHOO.util.DateLocale["en"]);})();YAHOO.register("datasource",YAHOO.util.DataSource,{version:"2.9.0",build:"2800"});/*
 
Copyright (c) 2011, Yahoo! Inc. All rights reserved.
 
Code licensed under the BSD License:
 
http://developer.yahoo.com/yui/license.html
 
version: 2.9.0
 
*/
 
YAHOO.util.Chain=function(){this.q=[].slice.call(arguments);this.createEvent("end");};YAHOO.util.Chain.prototype={id:0,run:function(){var g=this.q[0],d;if(!g){this.fireEvent("end");return this;}else{if(this.id){return this;}}d=g.method||g;if(typeof d==="function"){var f=g.scope||{},b=g.argument||[],a=g.timeout||0,e=this;if(!(b instanceof Array)){b=[b];}if(a<0){this.id=a;if(g.until){for(;!g.until();){d.apply(f,b);}}else{if(g.iterations){for(;g.iterations-->0;){d.apply(f,b);}}else{d.apply(f,b);}}this.q.shift();this.id=0;return this.run();}else{if(g.until){if(g.until()){this.q.shift();return this.run();}}else{if(!g.iterations||!--g.iterations){this.q.shift();}}this.id=setTimeout(function(){d.apply(f,b);if(e.id){e.id=0;e.run();}},a);}}return this;},add:function(a){this.q.push(a);return this;},pause:function(){if(this.id>0){clearTimeout(this.id);}this.id=0;return this;},stop:function(){this.pause();this.q=[];return this;}};YAHOO.lang.augmentProto(YAHOO.util.Chain,YAHOO.util.EventProvider);(function(){var a=YAHOO.util.Event,c=YAHOO.lang,b=[],d=function(h,e,f){var g;if(!h||h===f){g=false;}else{g=YAHOO.util.Selector.test(h,e)?h:d(h.parentNode,e,f);}return g;};c.augmentObject(a,{_createDelegate:function(f,e,g,h){return function(i){var j=this,n=a.getTarget(i),l=e,p=(j.nodeType===9),q,k,o,m;if(c.isFunction(e)){q=e(n);}else{if(c.isString(e)){if(!p){o=j.id;if(!o){o=a.generateId(j);}m=("#"+o+" ");l=(m+e).replace(/,/gi,(","+m));}if(YAHOO.util.Selector.test(n,l)){q=n;}else{if(YAHOO.util.Selector.test(n,((l.replace(/,/gi," *,"))+" *"))){q=d(n,l,j);}}}}if(q){k=q;if(h){if(h===true){k=g;}else{k=h;}}return f.call(k,i,q,j,g);}};},delegate:function(f,j,l,g,h,i){var e=j,k,m;if(c.isString(g)&&!YAHOO.util.Selector){return false;}if(j=="mouseenter"||j=="mouseleave"){if(!a._createMouseDelegate){return false;}e=a._getType(j);k=a._createMouseDelegate(l,h,i);m=a._createDelegate(function(p,o,n){return k.call(o,p,n);},g,h,i);}else{m=a._createDelegate(l,g,h,i);}b.push([f,e,l,m]);return a.on(f,e,m);},removeDelegate:function(f,j,i){var k=j,h=false,g,e;if(j=="mouseenter"||j=="mouseleave"){k=a._getType(j);}g=a._getCacheIndex(b,f,k,i);if(g>=0){e=b[g];}if(f&&e){h=a.removeListener(e[0],e[1],e[3]);if(h){delete b[g][2];delete b[g][3];b.splice(g,1);}}return h;}});}());(function(){var b=YAHOO.util.Event,g=YAHOO.lang,e=b.addListener,f=b.removeListener,c=b.getListeners,d=[],h={mouseenter:"mouseover",mouseleave:"mouseout"},a=function(n,m,l){var j=b._getCacheIndex(d,n,m,l),i,k;if(j>=0){i=d[j];}if(n&&i){k=f.call(b,i[0],m,i[3]);if(k){delete d[j][2];delete d[j][3];d.splice(j,1);}}return k;};g.augmentObject(b._specialTypes,h);g.augmentObject(b,{_createMouseDelegate:function(i,j,k){return function(q,m){var p=this,l=b.getRelatedTarget(q),o,n;if(p!=l&&!YAHOO.util.Dom.isAncestor(p,l)){o=p;if(k){if(k===true){o=j;}else{o=k;}}n=[q,j];if(m){n.splice(1,0,p,m);}return i.apply(o,n);}};},addListener:function(m,l,k,n,o){var i,j;if(h[l]){i=b._createMouseDelegate(k,n,o);i.mouseDelegate=true;d.push([m,l,k,i]);j=e.call(b,m,l,i);}else{j=e.apply(b,arguments);}return j;},removeListener:function(l,k,j){var i;if(h[k]){i=a.apply(b,arguments);}else{i=f.apply(b,arguments);}return i;},getListeners:function(p,o){var n=[],r,m=(o==="mouseover"||o==="mouseout"),q,k,j;if(o&&(m||h[o])){r=c.call(b,p,this._getType(o));if(r){for(k=r.length-1;k>-1;k--){j=r[k];q=j.fn.mouseDelegate;if((h[o]&&q)||(m&&!q)){n.push(j);}}}}else{n=c.apply(b,arguments);}return(n&&n.length)?n:null;}},true);b.on=b.addListener;}());YAHOO.register("event-mouseenter",YAHOO.util.Event,{version:"2.9.0",build:"2800"});var Y=YAHOO,Y_DOM=YAHOO.util.Dom,EMPTY_ARRAY=[],Y_UA=Y.env.ua,Y_Lang=Y.lang,Y_DOC=document,Y_DOCUMENT_ELEMENT=Y_DOC.documentElement,Y_DOM_inDoc=Y_DOM.inDocument,Y_mix=Y_Lang.augmentObject,Y_guid=Y_DOM.generateId,Y_getDoc=function(a){var b=Y_DOC;if(a){b=(a.nodeType===9)?a:a.ownerDocument||a.document||Y_DOC;}return b;},Y_Array=function(g,d){var c,b,h=d||0;try{return Array.prototype.slice.call(g,h);}catch(f){b=[];c=g.length;for(;h<c;h++){b.push(g[h]);}return b;}},Y_DOM_allById=function(f,a){a=a||Y_DOC;var b=[],c=[],d,e;if(a.querySelectorAll){c=a.querySelectorAll('[id="'+f+'"]');}else{if(a.all){b=a.all(f);if(b){if(b.nodeName){if(b.id===f){c.push(b);b=EMPTY_ARRAY;}else{b=[b];}}if(b.length){for(d=0;e=b[d++];){if(e.id===f||(e.attributes&&e.attributes.id&&e.attributes.id.value===f)){c.push(e);}}}}}else{c=[Y_getDoc(a).getElementById(f)];}}return c;};var COMPARE_DOCUMENT_POSITION="compareDocumentPosition",OWNER_DOCUMENT="ownerDocument",Selector={_foundCache:[],useNative:true,_compare:("sourceIndex" in Y_DOCUMENT_ELEMENT)?function(f,e){var d=f.sourceIndex,c=e.sourceIndex;if(d===c){return 0;}else{if(d>c){return 1;}}return -1;}:(Y_DOCUMENT_ELEMENT[COMPARE_DOCUMENT_POSITION]?function(b,a){if(b[COMPARE_DOCUMENT_POSITION](a)&4){return -1;}else{return 1;}}:function(e,d){var c,a,b;if(e&&d){c=e[OWNER_DOCUMENT].createRange();c.setStart(e,0);a=d[OWNER_DOCUMENT].createRange();a.setStart(d,0);b=c.compareBoundaryPoints(1,a);}return b;}),_sort:function(a){if(a){a=Y_Array(a,0,true);if(a.sort){a.sort(Selector._compare);}}return a;},_deDupe:function(a){var b=[],c,d;for(c=0;(d=a[c++]);){if(!d._found){b[b.length]=d;d._found=true;}}for(c=0;(d=b[c++]);){d._found=null;d.removeAttribute("_found");}return b;},query:function(b,j,k,a){if(typeof j=="string"){j=Y_DOM.get(j);if(!j){return(k)?null:[];}}else{j=j||Y_DOC;}var f=[],c=(Selector.useNative&&Y_DOC.querySelector&&!a),e=[[b,j]],g,l,d,h=(c)?Selector._nativeQuery:Selector._bruteQuery;if(b&&h){if(!a&&(!c||j.tagName)){e=Selector._splitQueries(b,j);}for(d=0;(g=e[d++]);){l=h(g[0],g[1],k);if(!k){l=Y_Array(l,0,true);}if(l){f=f.concat(l);}}if(e.length>1){f=Selector._sort(Selector._deDupe(f));}}Y.log("query: "+b+" returning: "+f.length,"info","Selector");return(k)?(f[0]||null):f;},_splitQueries:function(c,f){var b=c.split(","),d=[],g="",e,a;if(f){if(f.tagName){f.id=f.id||Y_guid();g='[id="'+f.id+'"] ';}for(e=0,a=b.length;e<a;++e){c=g+b[e];d.push([c,f]);}}return d;},_nativeQuery:function(a,b,c){if(Y_UA.webkit&&a.indexOf(":checked")>-1&&(Selector.pseudos&&Selector.pseudos.checked)){return Selector.query(a,b,c,true);
 
}try{return b["querySelector"+(c?"":"All")](a);}catch(d){return Selector.query(a,b,c,true);}},filter:function(b,a){var c=[],d,e;if(b&&a){for(d=0;(e=b[d++]);){if(Selector.test(e,a)){c[c.length]=e;}}}else{Y.log("invalid filter input (nodes: "+b+", selector: "+a+")","warn","Selector");}return c;},test:function(c,d,k){var g=false,b=d.split(","),a=false,l,o,h,n,f,e,m;if(c&&c.tagName){if(!k&&!Y_DOM_inDoc(c)){l=c.parentNode;if(l){k=l;}else{n=c[OWNER_DOCUMENT].createDocumentFragment();n.appendChild(c);k=n;a=true;}}k=k||c[OWNER_DOCUMENT];if(!c.id){c.id=Y_guid();}for(f=0;(m=b[f++]);){m+='[id="'+c.id+'"]';h=Selector.query(m,k);for(e=0;o=h[e++];){if(o===c){g=true;break;}}if(g){break;}}if(a){n.removeChild(c);}}return g;}};YAHOO.util.Selector=Selector;var PARENT_NODE="parentNode",TAG_NAME="tagName",ATTRIBUTES="attributes",COMBINATOR="combinator",PSEUDOS="pseudos",SelectorCSS2={_reRegExpTokens:/([\^\$\?\[\]\*\+\-\.\(\)\|\\])/,SORT_RESULTS:true,_children:function(e,a){var b=e.children,d,c=[],f,g;if(e.children&&a&&e.children.tags){c=e.children.tags(a);}else{if((!b&&e[TAG_NAME])||(b&&a)){f=b||e.childNodes;b=[];for(d=0;(g=f[d++]);){if(g.tagName){if(!a||a===g.tagName){b.push(g);}}}}}return b||[];},_re:{attr:/(\[[^\]]*\])/g,esc:/\\[:\[\]\(\)#\.\'\>+~"]/gi,pseudos:/(\([^\)]*\))/g},shorthand:{"\\#(-?[_a-z]+[-\\w\\uE000]*)":"[id=$1]","\\.(-?[_a-z]+[-\\w\\uE000]*)":"[className~=$1]"},operators:{"":function(b,a){return !!b.getAttribute(a);},"~=":"(?:^|\\s+){val}(?:\\s+|$)","|=":"^{val}(?:-|$)"},pseudos:{"first-child":function(a){return Selector._children(a[PARENT_NODE])[0]===a;}},_bruteQuery:function(f,j,l){var g=[],a=[],i=Selector._tokenize(f),e=i[i.length-1],k=Y_getDoc(j),c,b,h,d;if(e){b=e.id;h=e.className;d=e.tagName||"*";if(j.getElementsByTagName){if(b&&(j.all||(j.nodeType===9||Y_DOM_inDoc(j)))){a=Y_DOM_allById(b,j);}else{if(h){a=j.getElementsByClassName(h);}else{a=j.getElementsByTagName(d);}}}else{c=j.firstChild;while(c){if(c.tagName){a.push(c);}c=c.nextSilbing||c.firstChild;}}if(a.length){g=Selector._filterNodes(a,i,l);}}return g;},_filterNodes:function(l,f,h){var r=0,q,s=f.length,k=s-1,e=[],o=l[0],v=o,t=Selector.getters,d,p,c,g,a,m,b,u;for(r=0;(v=o=l[r++]);){k=s-1;g=null;testLoop:while(v&&v.tagName){c=f[k];b=c.tests;q=b.length;if(q&&!a){while((u=b[--q])){d=u[1];if(t[u[0]]){m=t[u[0]](v,u[0]);}else{m=v[u[0]];if(m===undefined&&v.getAttribute){m=v.getAttribute(u[0]);}}if((d==="="&&m!==u[2])||(typeof d!=="string"&&d.test&&!d.test(m))||(!d.test&&typeof d==="function"&&!d(v,u[0],u[2]))){if((v=v[g])){while(v&&(!v.tagName||(c.tagName&&c.tagName!==v.tagName))){v=v[g];}}continue testLoop;}}}k--;if(!a&&(p=c.combinator)){g=p.axis;v=v[g];while(v&&!v.tagName){v=v[g];}if(p.direct){g=null;}}else{e.push(o);if(h){return e;}break;}}}o=v=null;return e;},combinators:{" ":{axis:"parentNode"},">":{axis:"parentNode",direct:true},"+":{axis:"previousSibling",direct:true}},_parsers:[{name:ATTRIBUTES,re:/^\uE003(-?[a-z]+[\w\-]*)+([~\|\^\$\*!=]=?)?['"]?([^\uE004'"]*)['"]?\uE004/i,fn:function(d,e){var c=d[2]||"",a=Selector.operators,b=(d[3])?d[3].replace(/\\/g,""):"",f;if((d[1]==="id"&&c==="=")||(d[1]==="className"&&Y_DOCUMENT_ELEMENT.getElementsByClassName&&(c==="~="||c==="="))){e.prefilter=d[1];d[3]=b;e[d[1]]=(d[1]==="id")?d[3]:b;}if(c in a){f=a[c];if(typeof f==="string"){d[3]=b.replace(Selector._reRegExpTokens,"\\$1");f=new RegExp(f.replace("{val}",d[3]));}d[2]=f;}if(!e.last||e.prefilter!==d[1]){return d.slice(1);}}},{name:TAG_NAME,re:/^((?:-?[_a-z]+[\w-]*)|\*)/i,fn:function(b,c){var a=b[1].toUpperCase();c.tagName=a;if(a!=="*"&&(!c.last||c.prefilter)){return[TAG_NAME,"=",a];}if(!c.prefilter){c.prefilter="tagName";}}},{name:COMBINATOR,re:/^\s*([>+~]|\s)\s*/,fn:function(a,b){}},{name:PSEUDOS,re:/^:([\-\w]+)(?:\uE005['"]?([^\uE005]*)['"]?\uE006)*/i,fn:function(a,b){var c=Selector[PSEUDOS][a[1]];if(c){if(a[2]){a[2]=a[2].replace(/\\/g,"");}return[a[2],c];}else{return false;}}}],_getToken:function(a){return{tagName:null,id:null,className:null,attributes:{},combinator:null,tests:[]};},_tokenize:function(c){c=c||"";c=Selector._replaceShorthand(Y_Lang.trim(c));var b=Selector._getToken(),h=c,g=[],j=false,e,f,d,a;outer:do{j=false;for(d=0;(a=Selector._parsers[d++]);){if((e=a.re.exec(c))){if(a.name!==COMBINATOR){b.selector=c;}c=c.replace(e[0],"");if(!c.length){b.last=true;}if(Selector._attrFilters[e[1]]){e[1]=Selector._attrFilters[e[1]];}f=a.fn(e,b);if(f===false){j=false;break outer;}else{if(f){b.tests.push(f);}}if(!c.length||a.name===COMBINATOR){g.push(b);b=Selector._getToken(b);if(a.name===COMBINATOR){b.combinator=Selector.combinators[e[1]];}}j=true;}}}while(j&&c.length);if(!j||c.length){Y.log("query: "+h+" contains unsupported token in: "+c,"warn","Selector");g=[];}return g;},_replaceShorthand:function(b){var d=Selector.shorthand,c=b.match(Selector._re.esc),e,h,g,f,a;if(c){b=b.replace(Selector._re.esc,"\uE000");}e=b.match(Selector._re.attr);h=b.match(Selector._re.pseudos);if(e){b=b.replace(Selector._re.attr,"\uE001");}if(h){b=b.replace(Selector._re.pseudos,"\uE002");}for(g in d){if(d.hasOwnProperty(g)){b=b.replace(new RegExp(g,"gi"),d[g]);}}if(e){for(f=0,a=e.length;f<a;++f){b=b.replace(/\uE001/,e[f]);}}if(h){for(f=0,a=h.length;f<a;++f){b=b.replace(/\uE002/,h[f]);}}b=b.replace(/\[/g,"\uE003");b=b.replace(/\]/g,"\uE004");b=b.replace(/\(/g,"\uE005");b=b.replace(/\)/g,"\uE006");if(c){for(f=0,a=c.length;f<a;++f){b=b.replace("\uE000",c[f]);}}return b;},_attrFilters:{"class":"className","for":"htmlFor"},getters:{href:function(b,a){return Y_DOM.getAttribute(b,a);}}};Y_mix(Selector,SelectorCSS2,true);Selector.getters.src=Selector.getters.rel=Selector.getters.href;if(Selector.useNative&&Y_DOC.querySelector){Selector.shorthand["\\.([^\\s\\\\(\\[:]*)"]="[class~=$1]";}Selector._reNth=/^(?:([\-]?\d*)(n){1}|(odd|even)$)*([\-+]?\d*)$/;Selector._getNth=function(d,o,q,h){Selector._reNth.test(o);var m=parseInt(RegExp.$1,10),c=RegExp.$2,j=RegExp.$3,k=parseInt(RegExp.$4,10)||0,p=[],l=Selector._children(d.parentNode,q),f;if(j){m=2;f="+";c="n";k=(j==="odd")?1:0;}else{if(isNaN(m)){m=(c)?1:0;
 
}}if(m===0){if(h){k=l.length-k+1;}if(l[k-1]===d){return true;}else{return false;}}else{if(m<0){h=!!h;m=Math.abs(m);}}if(!h){for(var e=k-1,g=l.length;e<g;e+=m){if(e>=0&&l[e]===d){return true;}}}else{for(var e=l.length-k,g=l.length;e>=0;e-=m){if(e<g&&l[e]===d){return true;}}}return false;};Y_mix(Selector.pseudos,{"root":function(a){return a===a.ownerDocument.documentElement;},"nth-child":function(a,b){return Selector._getNth(a,b);},"nth-last-child":function(a,b){return Selector._getNth(a,b,null,true);},"nth-of-type":function(a,b){return Selector._getNth(a,b,a.tagName);},"nth-last-of-type":function(a,b){return Selector._getNth(a,b,a.tagName,true);},"last-child":function(b){var a=Selector._children(b.parentNode);return a[a.length-1]===b;},"first-of-type":function(a){return Selector._children(a.parentNode,a.tagName)[0]===a;},"last-of-type":function(b){var a=Selector._children(b.parentNode,b.tagName);return a[a.length-1]===b;},"only-child":function(b){var a=Selector._children(b.parentNode);return a.length===1&&a[0]===b;},"only-of-type":function(b){var a=Selector._children(b.parentNode,b.tagName);return a.length===1&&a[0]===b;},"empty":function(a){return a.childNodes.length===0;},"not":function(a,b){return !Selector.test(a,b);},"contains":function(a,b){var c=a.innerText||a.textContent||"";return c.indexOf(b)>-1;},"checked":function(a){return(a.checked===true||a.selected===true);},enabled:function(a){return(a.disabled!==undefined&&!a.disabled);},disabled:function(a){return(a.disabled);}});Y_mix(Selector.operators,{"^=":"^{val}","!=":function(b,a,c){return b[a]!==c;},"$=":"{val}$","*=":"{val}"});Selector.combinators["~"]={axis:"previousSibling"};YAHOO.register("selector",YAHOO.util.Selector,{version:"2.9.0",build:"2800"});var Dom=YAHOO.util.Dom;YAHOO.widget.ColumnSet=function(a){this._sId=Dom.generateId(null,"yui-cs");a=YAHOO.widget.DataTable._cloneObject(a);this._init(a);YAHOO.widget.ColumnSet._nCount++;};YAHOO.widget.ColumnSet._nCount=0;YAHOO.widget.ColumnSet.prototype={_sId:null,_aDefinitions:null,tree:null,flat:null,keys:null,headers:null,_init:function(j){var k=[];var a=[];var g=[];var e=[];var c=-1;var b=function(m,s){c++;if(!k[c]){k[c]=[];}for(var o=0;o<m.length;o++){var i=m[o];var q=new YAHOO.widget.Column(i);i.yuiColumnId=q._sId;a.push(q);if(s){q._oParent=s;}if(YAHOO.lang.isArray(i.children)){q.children=i.children;var r=0;var p=function(v){var w=v.children;for(var u=0;u<w.length;u++){if(YAHOO.lang.isArray(w[u].children)){p(w[u]);}else{r++;}}};p(i);q._nColspan=r;var t=i.children;for(var n=0;n<t.length;n++){var l=t[n];if(q.className&&(l.className===undefined)){l.className=q.className;}if(q.editor&&(l.editor===undefined)){l.editor=q.editor;}if(q.editorOptions&&(l.editorOptions===undefined)){l.editorOptions=q.editorOptions;}if(q.formatter&&(l.formatter===undefined)){l.formatter=q.formatter;}if(q.resizeable&&(l.resizeable===undefined)){l.resizeable=q.resizeable;}if(q.sortable&&(l.sortable===undefined)){l.sortable=q.sortable;}if(q.hidden){l.hidden=true;}if(q.width&&(l.width===undefined)){l.width=q.width;}if(q.minWidth&&(l.minWidth===undefined)){l.minWidth=q.minWidth;}if(q.maxAutoWidth&&(l.maxAutoWidth===undefined)){l.maxAutoWidth=q.maxAutoWidth;}if(q.type&&(l.type===undefined)){l.type=q.type;}if(q.type&&!q.formatter){q.formatter=q.type;}if(q.text&&!YAHOO.lang.isValue(q.label)){q.label=q.text;}if(q.parser){}if(q.sortOptions&&((q.sortOptions.ascFunction)||(q.sortOptions.descFunction))){}}if(!k[c+1]){k[c+1]=[];}b(t,q);}else{q._nKeyIndex=g.length;q._nColspan=1;g.push(q);}k[c].push(q);}c--;};if(YAHOO.lang.isArray(j)){b(j);this._aDefinitions=j;}else{return null;}var f;var d=function(l){var n=1;var q;var o;var r=function(t,p){p=p||1;for(var u=0;u<t.length;u++){var m=t[u];if(YAHOO.lang.isArray(m.children)){p++;r(m.children,p);p--;}else{if(p>n){n=p;}}}};for(var i=0;i<l.length;i++){q=l[i];r(q);for(var s=0;s<q.length;s++){o=q[s];if(!YAHOO.lang.isArray(o.children)){o._nRowspan=n;}else{o._nRowspan=1;}}n=1;}};d(k);for(f=0;f<k[0].length;f++){k[0][f]._nTreeIndex=f;}var h=function(l,m){e[l].push(m.getSanitizedKey());if(m._oParent){h(l,m._oParent);}};for(f=0;f<g.length;f++){e[f]=[];h(f,g[f]);e[f]=e[f].reverse();}this.tree=k;this.flat=a;this.keys=g;this.headers=e;},getId:function(){return this._sId;},toString:function(){return"ColumnSet instance "+this._sId;},getDefinitions:function(){var a=this._aDefinitions;var b=function(e,g){for(var d=0;d<e.length;d++){var f=e[d];var i=g.getColumnById(f.yuiColumnId);if(i){var h=i.getDefinition();for(var c in h){if(YAHOO.lang.hasOwnProperty(h,c)){f[c]=h[c];}}}if(YAHOO.lang.isArray(f.children)){b(f.children,g);}}};b(a,this);this._aDefinitions=a;return a;},getColumnById:function(c){if(YAHOO.lang.isString(c)){var a=this.flat;for(var b=a.length-1;b>-1;b--){if(a[b]._sId===c){return a[b];}}}return null;},getColumn:function(c){if(YAHOO.lang.isNumber(c)&&this.keys[c]){return this.keys[c];}else{if(YAHOO.lang.isString(c)){var a=this.flat;var d=[];for(var b=0;b<a.length;b++){if(a[b].key===c){d.push(a[b]);}}if(d.length===1){return d[0];}else{if(d.length>1){return d;}}}}return null;},getDescendants:function(d){var b=this;var c=[];var a;var e=function(f){c.push(f);if(f.children){for(a=0;a<f.children.length;a++){e(b.getColumn(f.children[a].key));}}};e(d);return c;}};YAHOO.widget.Column=function(b){this._sId=Dom.generateId(null,"yui-col");if(b&&YAHOO.lang.isObject(b)){for(var a in b){if(a){this[a]=b[a];}}}if(!YAHOO.lang.isValue(this.key)){this.key=Dom.generateId(null,"yui-dt-col");}if(!YAHOO.lang.isValue(this.field)){this.field=this.key;}YAHOO.widget.Column._nCount++;if(this.width&&!YAHOO.lang.isNumber(this.width)){this.width=null;}if(this.editor&&YAHOO.lang.isString(this.editor)){this.editor=new YAHOO.widget.CellEditor(this.editor,this.editorOptions);}};YAHOO.lang.augmentObject(YAHOO.widget.Column,{_nCount:0,formatCheckbox:function(b,a,c,d){YAHOO.widget.DataTable.formatCheckbox(b,a,c,d);},formatCurrency:function(b,a,c,d){YAHOO.widget.DataTable.formatCurrency(b,a,c,d);},formatDate:function(b,a,c,d){YAHOO.widget.DataTable.formatDate(b,a,c,d);
 
},formatEmail:function(b,a,c,d){YAHOO.widget.DataTable.formatEmail(b,a,c,d);},formatLink:function(b,a,c,d){YAHOO.widget.DataTable.formatLink(b,a,c,d);},formatNumber:function(b,a,c,d){YAHOO.widget.DataTable.formatNumber(b,a,c,d);},formatSelect:function(b,a,c,d){YAHOO.widget.DataTable.formatDropdown(b,a,c,d);}});YAHOO.widget.Column.prototype={_sId:null,_nKeyIndex:null,_nTreeIndex:null,_nColspan:1,_nRowspan:1,_oParent:null,_elTh:null,_elThLiner:null,_elThLabel:null,_elResizer:null,_nWidth:null,_dd:null,_ddResizer:null,key:null,field:null,label:null,abbr:null,children:null,width:null,minWidth:null,maxAutoWidth:null,hidden:false,selected:false,className:null,formatter:null,currencyOptions:null,dateOptions:null,dropdownOptions:null,editor:null,resizeable:false,sortable:false,sortOptions:null,getId:function(){return this._sId;},toString:function(){return"Column instance "+this._sId;},getDefinition:function(){var a={};a.abbr=this.abbr;a.className=this.className;a.editor=this.editor;a.editorOptions=this.editorOptions;a.field=this.field;a.formatter=this.formatter;a.hidden=this.hidden;a.key=this.key;a.label=this.label;a.minWidth=this.minWidth;a.maxAutoWidth=this.maxAutoWidth;a.resizeable=this.resizeable;a.selected=this.selected;a.sortable=this.sortable;a.sortOptions=this.sortOptions;a.width=this.width;a._calculatedWidth=this._calculatedWidth;return a;},getKey:function(){return this.key;},getField:function(){return this.field;},getSanitizedKey:function(){return this.getKey().replace(/[^\w\-]/g,"");},getKeyIndex:function(){return this._nKeyIndex;},getTreeIndex:function(){return this._nTreeIndex;},getParent:function(){return this._oParent;},getColspan:function(){return this._nColspan;},getColSpan:function(){return this.getColspan();},getRowspan:function(){return this._nRowspan;},getThEl:function(){return this._elTh;},getThLinerEl:function(){return this._elThLiner;},getResizerEl:function(){return this._elResizer;},getColEl:function(){return this.getThEl();},getIndex:function(){return this.getKeyIndex();},format:function(){}};YAHOO.util.Sort={compare:function(d,c,e){if((d===null)||(typeof d=="undefined")){if((c===null)||(typeof c=="undefined")){return 0;}else{return 1;}}else{if((c===null)||(typeof c=="undefined")){return -1;}}if(d.constructor==String){d=d.toLowerCase();}if(c.constructor==String){c=c.toLowerCase();}if(d<c){return(e)?1:-1;}else{if(d>c){return(e)?-1:1;}else{return 0;}}}};YAHOO.widget.ColumnDD=function(d,a,c,b){if(d&&a&&c&&b){this.datatable=d;this.table=d.getTableEl();this.column=a;this.headCell=c;this.pointer=b;this.newIndex=null;this.init(c);this.initFrame();this.invalidHandleTypes={};this.setPadding(10,0,(this.datatable.getTheadEl().offsetHeight+10),0);YAHOO.util.Event.on(window,"resize",function(){this.initConstraints();},this,true);}else{}};if(YAHOO.util.DDProxy){YAHOO.extend(YAHOO.widget.ColumnDD,YAHOO.util.DDProxy,{initConstraints:function(){var g=YAHOO.util.Dom.getRegion(this.table),d=this.getEl(),f=YAHOO.util.Dom.getXY(d),c=parseInt(YAHOO.util.Dom.getStyle(d,"width"),10),a=parseInt(YAHOO.util.Dom.getStyle(d,"height"),10),e=((f[0]-g.left)+15),b=((g.right-f[0]-c)+15);this.setXConstraint(e,b);this.setYConstraint(10,10);},_resizeProxy:function(){YAHOO.widget.ColumnDD.superclass._resizeProxy.apply(this,arguments);var a=this.getDragEl(),b=this.getEl();YAHOO.util.Dom.setStyle(this.pointer,"height",(this.table.parentNode.offsetHeight+10)+"px");YAHOO.util.Dom.setStyle(this.pointer,"display","block");var c=YAHOO.util.Dom.getXY(b);YAHOO.util.Dom.setXY(this.pointer,[c[0],(c[1]-5)]);YAHOO.util.Dom.setStyle(a,"height",this.datatable.getContainerEl().offsetHeight+"px");YAHOO.util.Dom.setStyle(a,"width",(parseInt(YAHOO.util.Dom.getStyle(a,"width"),10)+4)+"px");YAHOO.util.Dom.setXY(this.dragEl,c);},onMouseDown:function(){this.initConstraints();this.resetConstraints();},clickValidator:function(b){if(!this.column.hidden){var a=YAHOO.util.Event.getTarget(b);return(this.isValidHandleChild(a)&&(this.id==this.handleElId||this.DDM.handleWasClicked(a,this.id)));}},onDragOver:function(h,a){var f=this.datatable.getColumn(a);if(f){var c=f.getTreeIndex();while((c===null)&&f.getParent()){f=f.getParent();c=f.getTreeIndex();}if(c!==null){var b=f.getThEl();var k=c;var d=YAHOO.util.Event.getPageX(h),i=YAHOO.util.Dom.getX(b),j=i+((YAHOO.util.Dom.get(b).offsetWidth)/2),e=this.column.getTreeIndex();if(d<j){YAHOO.util.Dom.setX(this.pointer,i);}else{var g=parseInt(b.offsetWidth,10);YAHOO.util.Dom.setX(this.pointer,(i+g));k++;}if(c>e){k--;}if(k<0){k=0;}else{if(k>this.datatable.getColumnSet().tree[0].length){k=this.datatable.getColumnSet().tree[0].length;}}this.newIndex=k;}}},onDragDrop:function(){this.datatable.reorderColumn(this.column,this.newIndex);},endDrag:function(){this.newIndex=null;YAHOO.util.Dom.setStyle(this.pointer,"display","none");}});}YAHOO.util.ColumnResizer=function(e,c,d,a,b){if(e&&c&&d&&a){this.datatable=e;this.column=c;this.headCell=d;this.headCellLiner=c.getThLinerEl();this.resizerLiner=d.firstChild;this.init(a,a,{dragOnly:true,dragElId:b.id});this.initFrame();this.resetResizerEl();this.setPadding(0,1,0,0);}else{}};if(YAHOO.util.DD){YAHOO.extend(YAHOO.util.ColumnResizer,YAHOO.util.DDProxy,{resetResizerEl:function(){var a=YAHOO.util.Dom.get(this.handleElId).style;a.left="auto";a.right=0;a.top="auto";a.bottom=0;a.height=this.headCell.offsetHeight+"px";},onMouseUp:function(h){var f=this.datatable.getColumnSet().keys,b;for(var c=0,a=f.length;c<a;c++){b=f[c];if(b._ddResizer){b._ddResizer.resetResizerEl();}}this.resetResizerEl();var d=this.headCellLiner;var g=d.offsetWidth-(parseInt(YAHOO.util.Dom.getStyle(d,"paddingLeft"),10)|0)-(parseInt(YAHOO.util.Dom.getStyle(d,"paddingRight"),10)|0);this.datatable.fireEvent("columnResizeEvent",{column:this.column,target:this.headCell,width:g});},onMouseDown:function(a){this.startWidth=this.headCellLiner.offsetWidth;this.startX=YAHOO.util.Event.getXY(a)[0];this.nLinerPadding=(parseInt(YAHOO.util.Dom.getStyle(this.headCellLiner,"paddingLeft"),10)|0)+(parseInt(YAHOO.util.Dom.getStyle(this.headCellLiner,"paddingRight"),10)|0);
 
},clickValidator:function(b){if(!this.column.hidden){var a=YAHOO.util.Event.getTarget(b);return(this.isValidHandleChild(a)&&(this.id==this.handleElId||this.DDM.handleWasClicked(a,this.id)));}},startDrag:function(){var e=this.datatable.getColumnSet().keys,d=this.column.getKeyIndex(),b;for(var c=0,a=e.length;c<a;c++){b=e[c];if(b._ddResizer){YAHOO.util.Dom.get(b._ddResizer.handleElId).style.height="1em";}}},onDrag:function(c){var d=YAHOO.util.Event.getXY(c)[0];if(d>YAHOO.util.Dom.getX(this.headCellLiner)){var a=d-this.startX;var b=this.startWidth+a-this.nLinerPadding;if(b>0){this.datatable.setColumnWidth(this.column,b);}}}});}(function(){var g=YAHOO.lang,a=YAHOO.util,e=YAHOO.widget,c=a.Dom,f=a.Event,d=e.DataTable;YAHOO.widget.RecordSet=function(h){this._init(h);};var b=e.RecordSet;b._nCount=0;b.prototype={_sId:null,_init:function(h){this._sId=c.generateId(null,"yui-rs");e.RecordSet._nCount++;this._records=[];this._initEvents();if(h){if(g.isArray(h)){this.addRecords(h);}else{if(g.isObject(h)){this.addRecord(h);}}}},_initEvents:function(){this.createEvent("recordAddEvent");this.createEvent("recordsAddEvent");this.createEvent("recordSetEvent");this.createEvent("recordsSetEvent");this.createEvent("recordUpdateEvent");this.createEvent("recordDeleteEvent");this.createEvent("recordsDeleteEvent");this.createEvent("resetEvent");this.createEvent("recordValueUpdateEvent");},_addRecord:function(j,h){var i=new YAHOO.widget.Record(j);if(YAHOO.lang.isNumber(h)&&(h>-1)){this._records.splice(h,0,i);}else{this._records[this._records.length]=i;}return i;},_setRecord:function(i,h){if(!g.isNumber(h)||h<0){h=this._records.length;}return(this._records[h]=new e.Record(i));},_deleteRecord:function(i,h){if(!g.isNumber(h)||(h<0)){h=1;}this._records.splice(i,h);},getId:function(){return this._sId;},toString:function(){return"RecordSet instance "+this._sId;},getLength:function(){return this._records.length;},getRecord:function(h){var j;if(h instanceof e.Record){for(j=0;j<this._records.length;j++){if(this._records[j]&&(this._records[j]._sId===h._sId)){return h;}}}else{if(g.isNumber(h)){if((h>-1)&&(h<this.getLength())){return this._records[h];}}else{if(g.isString(h)){for(j=0;j<this._records.length;j++){if(this._records[j]&&(this._records[j]._sId===h)){return this._records[j];}}}}}return null;},getRecords:function(i,h){if(!g.isNumber(i)){return this._records;}if(!g.isNumber(h)){return this._records.slice(i);}return this._records.slice(i,i+h);},hasRecords:function(j,h){var l=this.getRecords(j,h);for(var k=0;k<h;++k){if(typeof l[k]==="undefined"){return false;}}return true;},getRecordIndex:function(j){if(j){for(var h=this._records.length-1;h>-1;h--){if(this._records[h]&&j.getId()===this._records[h].getId()){return h;}}}return null;},addRecord:function(j,h){if(g.isObject(j)){var i=this._addRecord(j,h);this.fireEvent("recordAddEvent",{record:i,data:j});return i;}else{return null;}},addRecords:function(m,l){if(g.isArray(m)){var p=[],j,n,h;l=g.isNumber(l)?l:this._records.length;j=l;for(n=0,h=m.length;n<h;++n){if(g.isObject(m[n])){var k=this._addRecord(m[n],j++);p.push(k);}}this.fireEvent("recordsAddEvent",{records:p,data:m});return p;}else{if(g.isObject(m)){var o=this._addRecord(m);this.fireEvent("recordsAddEvent",{records:[o],data:m});return o;}else{return null;}}},setRecord:function(j,h){if(g.isObject(j)){var i=this._setRecord(j,h);this.fireEvent("recordSetEvent",{record:i,data:j});return i;}else{return null;}},setRecords:function(o,n){var r=e.Record,k=g.isArray(o)?o:[o],q=[],p=0,h=k.length,m=0;n=parseInt(n,10)|0;for(;p<h;++p){if(typeof k[p]==="object"&&k[p]){q[m++]=this._records[n+p]=new r(k[p]);}}this.fireEvent("recordsSetEvent",{records:q,data:o});this.fireEvent("recordsSet",{records:q,data:o});if(k.length&&!q.length){}return q;},updateRecord:function(h,l){var j=this.getRecord(h);if(j&&g.isObject(l)){var k={};for(var i in j._oData){if(g.hasOwnProperty(j._oData,i)){k[i]=j._oData[i];}}j._oData=l;this.fireEvent("recordUpdateEvent",{record:j,newData:l,oldData:k});return j;}else{return null;}},updateKey:function(h,i,j){this.updateRecordValue(h,i,j);},updateRecordValue:function(h,k,n){var j=this.getRecord(h);if(j){var m=null;var l=j._oData[k];if(l&&g.isObject(l)){m={};for(var i in l){if(g.hasOwnProperty(l,i)){m[i]=l[i];}}}else{m=l;}j._oData[k]=n;this.fireEvent("keyUpdateEvent",{record:j,key:k,newData:n,oldData:m});this.fireEvent("recordValueUpdateEvent",{record:j,key:k,newData:n,oldData:m});}else{}},replaceRecords:function(h){this.reset();return this.addRecords(h);},sortRecords:function(h,j,i){return this._records.sort(function(l,k){return h(l,k,j,i);});},reverseRecords:function(){return this._records.reverse();},deleteRecord:function(h){if(g.isNumber(h)&&(h>-1)&&(h<this.getLength())){var i=this.getRecord(h).getData();this._deleteRecord(h);this.fireEvent("recordDeleteEvent",{data:i,index:h});return i;}else{return null;}},deleteRecords:function(k,h){if(!g.isNumber(h)){h=1;}if(g.isNumber(k)&&(k>-1)&&(k<this.getLength())){var m=this.getRecords(k,h);var j=[],n=[];for(var l=0;l<m.length;l++){j[j.length]=m[l];n[n.length]=m[l].getData();}this._deleteRecord(k,h);this.fireEvent("recordsDeleteEvent",{data:j,deletedData:n,index:k});return j;}else{return null;}},reset:function(){this._records=[];this.fireEvent("resetEvent");}};g.augmentProto(b,a.EventProvider);YAHOO.widget.Record=function(h){this._nCount=e.Record._nCount;this._sId=c.generateId(null,"yui-rec");e.Record._nCount++;this._oData={};if(g.isObject(h)){for(var i in h){if(g.hasOwnProperty(h,i)){this._oData[i]=h[i];}}}};YAHOO.widget.Record._nCount=0;YAHOO.widget.Record.prototype={_nCount:null,_sId:null,_oData:null,getCount:function(){return this._nCount;},getId:function(){return this._sId;},getData:function(h){if(g.isString(h)){return this._oData[h];}else{return this._oData;}},setData:function(h,i){this._oData[h]=i;}};})();(function(){var h=YAHOO.lang,a=YAHOO.util,e=YAHOO.widget,b=YAHOO.env.ua,c=a.Dom,g=a.Event,f=a.DataSourceBase;YAHOO.widget.DataTable=function(i,m,o,k){var l=e.DataTable;
 
if(k&&k.scrollable){return new YAHOO.widget.ScrollingDataTable(i,m,o,k);}this._nIndex=l._nCount;this._sId=c.generateId(null,"yui-dt");this._oChainRender=new YAHOO.util.Chain();this._oChainRender.subscribe("end",this._onRenderChainEnd,this,true);this._initConfigs(k);this._initDataSource(o);if(!this._oDataSource){return;}this._initColumnSet(m);if(!this._oColumnSet){return;}this._initRecordSet();if(!this._oRecordSet){}l.superclass.constructor.call(this,i,this.configs);var q=this._initDomElements(i);if(!q){return;}this.showTableMessage(this.get("MSG_LOADING"),l.CLASS_LOADING);this._initEvents();l._nCount++;l._nCurrentCount++;var n={success:this.onDataReturnSetRows,failure:this.onDataReturnSetRows,scope:this,argument:this.getState()};var p=this.get("initialLoad");if(p===true){this._oDataSource.sendRequest(this.get("initialRequest"),n);}else{if(p===false){this.showTableMessage(this.get("MSG_EMPTY"),l.CLASS_EMPTY);}else{var j=p||{};n.argument=j.argument||{};this._oDataSource.sendRequest(j.request,n);}}};var d=e.DataTable;h.augmentObject(d,{CLASS_DATATABLE:"yui-dt",CLASS_LINER:"yui-dt-liner",CLASS_LABEL:"yui-dt-label",CLASS_MESSAGE:"yui-dt-message",CLASS_MASK:"yui-dt-mask",CLASS_DATA:"yui-dt-data",CLASS_COLTARGET:"yui-dt-coltarget",CLASS_RESIZER:"yui-dt-resizer",CLASS_RESIZERLINER:"yui-dt-resizerliner",CLASS_RESIZERPROXY:"yui-dt-resizerproxy",CLASS_EDITOR:"yui-dt-editor",CLASS_EDITOR_SHIM:"yui-dt-editor-shim",CLASS_PAGINATOR:"yui-dt-paginator",CLASS_PAGE:"yui-dt-page",CLASS_DEFAULT:"yui-dt-default",CLASS_PREVIOUS:"yui-dt-previous",CLASS_NEXT:"yui-dt-next",CLASS_FIRST:"yui-dt-first",CLASS_LAST:"yui-dt-last",CLASS_REC:"yui-dt-rec",CLASS_EVEN:"yui-dt-even",CLASS_ODD:"yui-dt-odd",CLASS_SELECTED:"yui-dt-selected",CLASS_HIGHLIGHTED:"yui-dt-highlighted",CLASS_HIDDEN:"yui-dt-hidden",CLASS_DISABLED:"yui-dt-disabled",CLASS_EMPTY:"yui-dt-empty",CLASS_LOADING:"yui-dt-loading",CLASS_ERROR:"yui-dt-error",CLASS_EDITABLE:"yui-dt-editable",CLASS_DRAGGABLE:"yui-dt-draggable",CLASS_RESIZEABLE:"yui-dt-resizeable",CLASS_SCROLLABLE:"yui-dt-scrollable",CLASS_SORTABLE:"yui-dt-sortable",CLASS_ASC:"yui-dt-asc",CLASS_DESC:"yui-dt-desc",CLASS_BUTTON:"yui-dt-button",CLASS_CHECKBOX:"yui-dt-checkbox",CLASS_DROPDOWN:"yui-dt-dropdown",CLASS_RADIO:"yui-dt-radio",_nCount:0,_nCurrentCount:0,_elDynStyleNode:null,_bDynStylesFallback:(b.ie)?true:false,_oDynStyles:{},_cloneObject:function(m){if(!h.isValue(m)){return m;}var p={};if(m instanceof YAHOO.widget.BaseCellEditor){p=m;}else{if(Object.prototype.toString.apply(m)==="[object RegExp]"){p=m;}else{if(h.isFunction(m)){p=m;}else{if(h.isArray(m)){var n=[];for(var l=0,k=m.length;l<k;l++){n[l]=d._cloneObject(m[l]);}p=n;}else{if(h.isObject(m)){for(var j in m){if(h.hasOwnProperty(m,j)){if(h.isValue(m[j])&&h.isObject(m[j])||h.isArray(m[j])){p[j]=d._cloneObject(m[j]);}else{p[j]=m[j];}}}}else{p=m;}}}}}return p;},formatButton:function(i,j,k,n,m){var l=h.isValue(n)?n:"Click";i.innerHTML='<button type="button" class="'+d.CLASS_BUTTON+'">'+l+"</button>";},formatCheckbox:function(i,j,k,n,m){var l=n;l=(l)?' checked="checked"':"";i.innerHTML='<input type="checkbox"'+l+' class="'+d.CLASS_CHECKBOX+'" />';},formatCurrency:function(j,k,l,n,m){var i=m||this;j.innerHTML=a.Number.format(n,l.currencyOptions||i.get("currencyOptions"));},formatDate:function(j,l,m,o,n){var i=n||this,k=m.dateOptions||i.get("dateOptions");j.innerHTML=a.Date.format(o,k,k.locale);},formatDropdown:function(l,u,q,j,t){var s=t||this,r=(h.isValue(j))?j:u.getData(q.field),v=(h.isArray(q.dropdownOptions))?q.dropdownOptions:null,k,p=l.getElementsByTagName("select");if(p.length===0){k=document.createElement("select");k.className=d.CLASS_DROPDOWN;k=l.appendChild(k);g.addListener(k,"change",s._onDropdownChange,s);}k=p[0];if(k){k.innerHTML="";if(v){for(var n=0;n<v.length;n++){var o=v[n];var m=document.createElement("option");m.value=(h.isValue(o.value))?o.value:o;m.innerHTML=(h.isValue(o.text))?o.text:(h.isValue(o.label))?o.label:o;m=k.appendChild(m);if(m.value==r){m.selected=true;}}}else{k.innerHTML='<option selected value="'+r+'">'+r+"</option>";}}else{l.innerHTML=h.isValue(j)?j:"";}},formatEmail:function(i,j,k,m,l){if(h.isString(m)){m=h.escapeHTML(m);i.innerHTML='<a href="mailto:'+m+'">'+m+"</a>";}else{i.innerHTML=h.isValue(m)?h.escapeHTML(m.toString()):"";}},formatLink:function(i,j,k,m,l){if(h.isString(m)){m=h.escapeHTML(m);i.innerHTML='<a href="'+m+'">'+m+"</a>";}else{i.innerHTML=h.isValue(m)?h.escapeHTML(m.toString()):"";}},formatNumber:function(j,k,l,n,m){var i=m||this;j.innerHTML=a.Number.format(n,l.numberOptions||i.get("numberOptions"));},formatRadio:function(j,k,l,o,n){var i=n||this,m=o;m=(m)?' checked="checked"':"";j.innerHTML='<input type="radio"'+m+' name="'+i.getId()+"-col-"+l.getSanitizedKey()+'"'+' class="'+d.CLASS_RADIO+'" />';},formatText:function(i,j,l,n,m){var k=(h.isValue(n))?n:"";i.innerHTML=h.escapeHTML(k.toString());},formatTextarea:function(j,k,m,o,n){var l=(h.isValue(o))?h.escapeHTML(o.toString()):"",i="<textarea>"+l+"</textarea>";j.innerHTML=i;},formatTextbox:function(j,k,m,o,n){var l=(h.isValue(o))?h.escapeHTML(o.toString()):"",i='<input type="text" value="'+l+'" />';j.innerHTML=i;},formatDefault:function(i,j,k,m,l){i.innerHTML=(h.isValue(m)&&m!=="")?m.toString():"&#160;";},validateNumber:function(j){var i=j*1;if(h.isNumber(i)){return i;}else{return undefined;}}});d.Formatter={button:d.formatButton,checkbox:d.formatCheckbox,currency:d.formatCurrency,"date":d.formatDate,dropdown:d.formatDropdown,email:d.formatEmail,link:d.formatLink,"number":d.formatNumber,radio:d.formatRadio,text:d.formatText,textarea:d.formatTextarea,textbox:d.formatTextbox,defaultFormatter:d.formatDefault};h.extend(d,a.Element,{initAttributes:function(i){i=i||{};d.superclass.initAttributes.call(this,i);this.setAttributeConfig("summary",{value:"",validator:h.isString,method:function(j){if(this._elTable){this._elTable.summary=j;}}});this.setAttributeConfig("selectionMode",{value:"standard",validator:h.isString});this.setAttributeConfig("sortedBy",{value:null,validator:function(j){if(j){return(h.isObject(j)&&j.key);
 
}else{return(j===null);}},method:function(k){var r=this.get("sortedBy");this._configs.sortedBy.value=k;var j,o,m,q;if(this._elThead){if(r&&r.key&&r.dir){j=this._oColumnSet.getColumn(r.key);o=j.getKeyIndex();var u=j.getThEl();c.removeClass(u,r.dir);this.formatTheadCell(j.getThLinerEl().firstChild,j,k);}if(k){m=(k.column)?k.column:this._oColumnSet.getColumn(k.key);q=m.getKeyIndex();var v=m.getThEl();if(k.dir&&((k.dir=="asc")||(k.dir=="desc"))){var p=(k.dir=="desc")?d.CLASS_DESC:d.CLASS_ASC;c.addClass(v,p);}else{var l=k.dir||d.CLASS_ASC;c.addClass(v,l);}this.formatTheadCell(m.getThLinerEl().firstChild,m,k);}}if(this._elTbody){this._elTbody.style.display="none";var s=this._elTbody.rows,t;for(var n=s.length-1;n>-1;n--){t=s[n].childNodes;if(t[o]){c.removeClass(t[o],r.dir);}if(t[q]){c.addClass(t[q],k.dir);}}this._elTbody.style.display="";}this._clearTrTemplateEl();}});this.setAttributeConfig("paginator",{value:null,validator:function(j){return j===null||j instanceof e.Paginator;},method:function(){this._updatePaginator.apply(this,arguments);}});this.setAttributeConfig("caption",{value:null,validator:h.isString,method:function(j){this._initCaptionEl(j);}});this.setAttributeConfig("draggableColumns",{value:false,validator:h.isBoolean,method:function(j){if(this._elThead){if(j){this._initDraggableColumns();}else{this._destroyDraggableColumns();}}}});this.setAttributeConfig("renderLoopSize",{value:0,validator:h.isNumber});this.setAttributeConfig("sortFunction",{value:function(k,j,o,n){var m=YAHOO.util.Sort.compare,l=m(k.getData(n),j.getData(n),o);if(l===0){return m(k.getCount(),j.getCount(),o);}else{return l;}}});this.setAttributeConfig("formatRow",{value:null,validator:h.isFunction});this.setAttributeConfig("generateRequest",{value:function(k,n){k=k||{pagination:null,sortedBy:null};var m=encodeURIComponent((k.sortedBy)?k.sortedBy.key:n.getColumnSet().keys[0].getKey());var j=(k.sortedBy&&k.sortedBy.dir===YAHOO.widget.DataTable.CLASS_DESC)?"desc":"asc";var o=(k.pagination)?k.pagination.recordOffset:0;var l=(k.pagination)?k.pagination.rowsPerPage:null;return"sort="+m+"&dir="+j+"&startIndex="+o+((l!==null)?"&results="+l:"");},validator:h.isFunction});this.setAttributeConfig("initialRequest",{value:null});this.setAttributeConfig("initialLoad",{value:true});this.setAttributeConfig("dynamicData",{value:false,validator:h.isBoolean});this.setAttributeConfig("MSG_EMPTY",{value:"No records found.",validator:h.isString});this.setAttributeConfig("MSG_LOADING",{value:"Loading...",validator:h.isString});this.setAttributeConfig("MSG_ERROR",{value:"Data error.",validator:h.isString});this.setAttributeConfig("MSG_SORTASC",{value:"Click to sort ascending",validator:h.isString,method:function(k){if(this._elThead){for(var l=0,m=this.getColumnSet().keys,j=m.length;l<j;l++){if(m[l].sortable&&this.getColumnSortDir(m[l])===d.CLASS_ASC){m[l]._elThLabel.firstChild.title=k;}}}}});this.setAttributeConfig("MSG_SORTDESC",{value:"Click to sort descending",validator:h.isString,method:function(k){if(this._elThead){for(var l=0,m=this.getColumnSet().keys,j=m.length;l<j;l++){if(m[l].sortable&&this.getColumnSortDir(m[l])===d.CLASS_DESC){m[l]._elThLabel.firstChild.title=k;}}}}});this.setAttributeConfig("currencySymbol",{value:"$",validator:h.isString});this.setAttributeConfig("currencyOptions",{value:{prefix:this.get("currencySymbol"),decimalPlaces:2,decimalSeparator:".",thousandsSeparator:","}});this.setAttributeConfig("dateOptions",{value:{format:"%m/%d/%Y",locale:"en"}});this.setAttributeConfig("numberOptions",{value:{decimalPlaces:0,thousandsSeparator:","}});},_bInit:true,_nIndex:null,_nTrCount:0,_nTdCount:0,_sId:null,_oChainRender:null,_elContainer:null,_elMask:null,_elTable:null,_elCaption:null,_elColgroup:null,_elThead:null,_elTbody:null,_elMsgTbody:null,_elMsgTr:null,_elMsgTd:null,_elColumnDragTarget:null,_elColumnResizerProxy:null,_oDataSource:null,_oColumnSet:null,_oRecordSet:null,_oCellEditor:null,_sFirstTrId:null,_sLastTrId:null,_elTrTemplate:null,_aDynFunctions:[],_disabled:false,clearTextSelection:function(){var i;if(window.getSelection){i=window.getSelection();}else{if(document.getSelection){i=document.getSelection();}else{if(document.selection){i=document.selection;}}}if(i){if(i.empty){i.empty();}else{if(i.removeAllRanges){i.removeAllRanges();}else{if(i.collapse){i.collapse();}}}}},_focusEl:function(i){i=i||this._elTbody;setTimeout(function(){try{i.focus();}catch(j){}},0);},_repaintGecko:(b.gecko)?function(j){j=j||this._elContainer;var i=j.parentNode;var k=j.nextSibling;i.insertBefore(i.removeChild(j),k);}:function(){},_repaintOpera:(b.opera)?function(){if(b.opera){document.documentElement.className+=" ";document.documentElement.className=YAHOO.lang.trim(document.documentElement.className);}}:function(){},_repaintWebkit:(b.webkit)?function(j){j=j||this._elContainer;var i=j.parentNode;var k=j.nextSibling;i.insertBefore(i.removeChild(j),k);}:function(){},_initConfigs:function(i){if(!i||!h.isObject(i)){i={};}this.configs=i;},_initColumnSet:function(n){var m,k,j;if(this._oColumnSet){for(k=0,j=this._oColumnSet.keys.length;k<j;k++){m=this._oColumnSet.keys[k];d._oDynStyles["."+this.getId()+"-col-"+m.getSanitizedKey()+" ."+d.CLASS_LINER]=undefined;if(m.editor&&m.editor.unsubscribeAll){m.editor.unsubscribeAll();}}this._oColumnSet=null;this._clearTrTemplateEl();}if(h.isArray(n)){this._oColumnSet=new YAHOO.widget.ColumnSet(n);}else{if(n instanceof YAHOO.widget.ColumnSet){this._oColumnSet=n;}}var l=this._oColumnSet.keys;for(k=0,j=l.length;k<j;k++){m=l[k];if(m.editor&&m.editor.subscribe){m.editor.subscribe("showEvent",this._onEditorShowEvent,this,true);m.editor.subscribe("keydownEvent",this._onEditorKeydownEvent,this,true);m.editor.subscribe("revertEvent",this._onEditorRevertEvent,this,true);m.editor.subscribe("saveEvent",this._onEditorSaveEvent,this,true);m.editor.subscribe("cancelEvent",this._onEditorCancelEvent,this,true);m.editor.subscribe("blurEvent",this._onEditorBlurEvent,this,true);m.editor.subscribe("blockEvent",this._onEditorBlockEvent,this,true);
 
m.editor.subscribe("unblockEvent",this._onEditorUnblockEvent,this,true);}}},_initDataSource:function(j){this._oDataSource=null;if(j&&(h.isFunction(j.sendRequest))){this._oDataSource=j;}else{var k=null;var o=this._elContainer;var l=0;if(o.hasChildNodes()){var n=o.childNodes;for(l=0;l<n.length;l++){if(n[l].nodeName&&n[l].nodeName.toLowerCase()=="table"){k=n[l];break;}}if(k){var m=[];for(;l<this._oColumnSet.keys.length;l++){m.push({key:this._oColumnSet.keys[l].key});}this._oDataSource=new f(k);this._oDataSource.responseType=f.TYPE_HTMLTABLE;this._oDataSource.responseSchema={fields:m};}}}},_initRecordSet:function(){if(this._oRecordSet){this._oRecordSet.reset();}else{this._oRecordSet=new YAHOO.widget.RecordSet();}},_initDomElements:function(i){this._initContainerEl(i);this._initTableEl(this._elContainer);this._initColgroupEl(this._elTable);this._initTheadEl(this._elTable);this._initMsgTbodyEl(this._elTable);this._initTbodyEl(this._elTable);if(!this._elContainer||!this._elTable||!this._elColgroup||!this._elThead||!this._elTbody||!this._elMsgTbody){return false;}else{return true;}},_destroyContainerEl:function(m){var k=this._oColumnSet.keys,l,j;c.removeClass(m,d.CLASS_DATATABLE);g.purgeElement(m);g.purgeElement(this._elThead,true);g.purgeElement(this._elTbody);g.purgeElement(this._elMsgTbody);l=m.getElementsByTagName("select");if(l.length){g.detachListener(l,"change");}for(j=k.length-1;j>=0;--j){if(k[j].editor){g.purgeElement(k[j].editor._elContainer);}}m.innerHTML="";this._elContainer=null;this._elColgroup=null;this._elThead=null;this._elTbody=null;},_initContainerEl:function(j){j=c.get(j);if(j&&j.nodeName&&(j.nodeName.toLowerCase()=="div")){this._destroyContainerEl(j);c.addClass(j,d.CLASS_DATATABLE);g.addListener(j,"focus",this._onTableFocus,this);g.addListener(j,"dblclick",this._onTableDblclick,this);this._elContainer=j;var i=document.createElement("div");i.className=d.CLASS_MASK;i.style.display="none";this._elMask=j.appendChild(i);}},_destroyTableEl:function(){var i=this._elTable;if(i){g.purgeElement(i,true);i.parentNode.removeChild(i);this._elCaption=null;this._elColgroup=null;this._elThead=null;this._elTbody=null;}},_initCaptionEl:function(i){if(this._elTable&&i){if(!this._elCaption){this._elCaption=this._elTable.createCaption();}this._elCaption.innerHTML=i;}else{if(this._elCaption){this._elCaption.parentNode.removeChild(this._elCaption);}}},_initTableEl:function(i){if(i){this._destroyTableEl();this._elTable=i.appendChild(document.createElement("table"));this._elTable.summary=this.get("summary");if(this.get("caption")){this._initCaptionEl(this.get("caption"));}g.delegate(this._elTable,"mouseenter",this._onTableMouseover,"thead ."+d.CLASS_LABEL,this);g.delegate(this._elTable,"mouseleave",this._onTableMouseout,"thead ."+d.CLASS_LABEL,this);g.delegate(this._elTable,"mouseenter",this._onTableMouseover,"tbody.yui-dt-data>tr>td",this);g.delegate(this._elTable,"mouseleave",this._onTableMouseout,"tbody.yui-dt-data>tr>td",this);g.delegate(this._elTable,"mouseenter",this._onTableMouseover,"tbody.yui-dt-message>tr>td",this);g.delegate(this._elTable,"mouseleave",this._onTableMouseout,"tbody.yui-dt-message>tr>td",this);}},_destroyColgroupEl:function(){var i=this._elColgroup;if(i){var j=i.parentNode;g.purgeElement(i,true);j.removeChild(i);this._elColgroup=null;}},_initColgroupEl:function(s){if(s){this._destroyColgroupEl();var l=this._aColIds||[],r=this._oColumnSet.keys,m=0,p=l.length,j,o,q=document.createDocumentFragment(),n=document.createElement("col");for(m=0,p=r.length;m<p;m++){o=r[m];j=q.appendChild(n.cloneNode(false));}var k=s.insertBefore(document.createElement("colgroup"),s.firstChild);k.appendChild(q);this._elColgroup=k;}},_insertColgroupColEl:function(i){if(h.isNumber(i)&&this._elColgroup){var j=this._elColgroup.childNodes[i]||null;this._elColgroup.insertBefore(document.createElement("col"),j);}},_removeColgroupColEl:function(i){if(h.isNumber(i)&&this._elColgroup&&this._elColgroup.childNodes[i]){this._elColgroup.removeChild(this._elColgroup.childNodes[i]);}},_reorderColgroupColEl:function(l,k){if(h.isArray(l)&&h.isNumber(k)&&this._elColgroup&&(this._elColgroup.childNodes.length>l[l.length-1])){var j,n=[];for(j=l.length-1;j>-1;j--){n.push(this._elColgroup.removeChild(this._elColgroup.childNodes[l[j]]));}var m=this._elColgroup.childNodes[k]||null;for(j=n.length-1;j>-1;j--){this._elColgroup.insertBefore(n[j],m);}}},_destroyTheadEl:function(){var j=this._elThead;if(j){var i=j.parentNode;g.purgeElement(j,true);this._destroyColumnHelpers();i.removeChild(j);this._elThead=null;}},_initTheadEl:function(v){v=v||this._elTable;if(v){this._destroyTheadEl();var q=(this._elColgroup)?v.insertBefore(document.createElement("thead"),this._elColgroup.nextSibling):v.appendChild(document.createElement("thead"));g.addListener(q,"focus",this._onTheadFocus,this);g.addListener(q,"keydown",this._onTheadKeydown,this);g.addListener(q,"mousedown",this._onTableMousedown,this);g.addListener(q,"mouseup",this._onTableMouseup,this);g.addListener(q,"click",this._onTheadClick,this);var x=this._oColumnSet,t,r,p,n;var w=x.tree;var o;for(r=0;r<w.length;r++){var m=q.appendChild(document.createElement("tr"));for(p=0;p<w[r].length;p++){t=w[r][p];o=m.appendChild(document.createElement("th"));this._initThEl(o,t);}if(r===0){c.addClass(m,d.CLASS_FIRST);}if(r===(w.length-1)){c.addClass(m,d.CLASS_LAST);}}var k=x.headers[0]||[];for(r=0;r<k.length;r++){c.addClass(c.get(this.getId()+"-th-"+k[r]),d.CLASS_FIRST);}var s=x.headers[x.headers.length-1]||[];for(r=0;r<s.length;r++){c.addClass(c.get(this.getId()+"-th-"+s[r]),d.CLASS_LAST);}if(b.webkit&&b.webkit<420){var u=this;setTimeout(function(){q.style.display="";},0);q.style.display="none";}this._elThead=q;this._initColumnHelpers();}},_initThEl:function(m,l){m.id=this.getId()+"-th-"+l.getSanitizedKey();m.innerHTML="";m.rowSpan=l.getRowspan();m.colSpan=l.getColspan();l._elTh=m;var i=m.appendChild(document.createElement("div"));i.id=m.id+"-liner";i.className=d.CLASS_LINER;l._elThLiner=i;var j=i.appendChild(document.createElement("span"));
 
j.className=d.CLASS_LABEL;if(l.abbr){m.abbr=l.abbr;}if(l.hidden){this._clearMinWidth(l);}m.className=this._getColumnClassNames(l);if(l.width){var k=(l.minWidth&&(l.width<l.minWidth))?l.minWidth:l.width;if(d._bDynStylesFallback){m.firstChild.style.overflow="hidden";m.firstChild.style.width=k+"px";}else{this._setColumnWidthDynStyles(l,k+"px","hidden");}}this.formatTheadCell(j,l,this.get("sortedBy"));l._elThLabel=j;},formatTheadCell:function(i,m,k){var q=m.getKey();var p=h.isValue(m.label)?m.label:q;if(m.sortable){var n=this.getColumnSortDir(m,k);var j=(n===d.CLASS_DESC);if(k&&(m.key===k.key)){j=!(k.dir===d.CLASS_DESC);}var l=this.getId()+"-href-"+m.getSanitizedKey();var o=(j)?this.get("MSG_SORTDESC"):this.get("MSG_SORTASC");i.innerHTML='<a href="'+l+'" title="'+o+'" class="'+d.CLASS_SORTABLE+'">'+p+"</a>";}else{i.innerHTML=p;}},_destroyDraggableColumns:function(){var l,m;for(var k=0,j=this._oColumnSet.tree[0].length;k<j;k++){l=this._oColumnSet.tree[0][k];if(l._dd){l._dd=l._dd.unreg();c.removeClass(l.getThEl(),d.CLASS_DRAGGABLE);}}this._destroyColumnDragTargetEl();},_initDraggableColumns:function(){this._destroyDraggableColumns();if(a.DD){var m,n,k;for(var l=0,j=this._oColumnSet.tree[0].length;l<j;l++){m=this._oColumnSet.tree[0][l];n=m.getThEl();c.addClass(n,d.CLASS_DRAGGABLE);k=this._initColumnDragTargetEl();m._dd=new YAHOO.widget.ColumnDD(this,m,n,k);}}else{}},_destroyColumnDragTargetEl:function(){if(this._elColumnDragTarget){var i=this._elColumnDragTarget;YAHOO.util.Event.purgeElement(i);i.parentNode.removeChild(i);this._elColumnDragTarget=null;}},_initColumnDragTargetEl:function(){if(!this._elColumnDragTarget){var i=document.createElement("div");i.id=this.getId()+"-coltarget";i.className=d.CLASS_COLTARGET;i.style.display="none";document.body.insertBefore(i,document.body.firstChild);this._elColumnDragTarget=i;}return this._elColumnDragTarget;},_destroyResizeableColumns:function(){var k=this._oColumnSet.keys;for(var l=0,j=k.length;l<j;l++){if(k[l]._ddResizer){k[l]._ddResizer=k[l]._ddResizer.unreg();c.removeClass(k[l].getThEl(),d.CLASS_RESIZEABLE);}}this._destroyColumnResizerProxyEl();},_initResizeableColumns:function(){this._destroyResizeableColumns();if(a.DD){var p,k,n,q,j,r,m;for(var l=0,o=this._oColumnSet.keys.length;l<o;l++){p=this._oColumnSet.keys[l];if(p.resizeable){k=p.getThEl();c.addClass(k,d.CLASS_RESIZEABLE);n=p.getThLinerEl();q=k.appendChild(document.createElement("div"));q.className=d.CLASS_RESIZERLINER;q.appendChild(n);j=q.appendChild(document.createElement("div"));j.id=k.id+"-resizer";j.className=d.CLASS_RESIZER;p._elResizer=j;r=this._initColumnResizerProxyEl();p._ddResizer=new YAHOO.util.ColumnResizer(this,p,k,j,r);m=function(i){g.stopPropagation(i);};g.addListener(j,"click",m);}}}else{}},_destroyColumnResizerProxyEl:function(){if(this._elColumnResizerProxy){var i=this._elColumnResizerProxy;YAHOO.util.Event.purgeElement(i);i.parentNode.removeChild(i);this._elColumnResizerProxy=null;}},_initColumnResizerProxyEl:function(){if(!this._elColumnResizerProxy){var i=document.createElement("div");i.id=this.getId()+"-colresizerproxy";i.className=d.CLASS_RESIZERPROXY;document.body.insertBefore(i,document.body.firstChild);this._elColumnResizerProxy=i;}return this._elColumnResizerProxy;},_destroyColumnHelpers:function(){this._destroyDraggableColumns();this._destroyResizeableColumns();},_initColumnHelpers:function(){if(this.get("draggableColumns")){this._initDraggableColumns();}this._initResizeableColumns();},_destroyTbodyEl:function(){var i=this._elTbody;if(i){var j=i.parentNode;g.purgeElement(i,true);j.removeChild(i);this._elTbody=null;}},_initTbodyEl:function(j){if(j){this._destroyTbodyEl();var i=j.appendChild(document.createElement("tbody"));i.tabIndex=0;i.className=d.CLASS_DATA;g.addListener(i,"focus",this._onTbodyFocus,this);g.addListener(i,"mousedown",this._onTableMousedown,this);g.addListener(i,"mouseup",this._onTableMouseup,this);g.addListener(i,"keydown",this._onTbodyKeydown,this);g.addListener(i,"click",this._onTbodyClick,this);if(b.ie){i.hideFocus=true;}this._elTbody=i;}},_destroyMsgTbodyEl:function(){var i=this._elMsgTbody;if(i){var j=i.parentNode;g.purgeElement(i,true);j.removeChild(i);this._elTbody=null;}},_initMsgTbodyEl:function(l){if(l){var k=document.createElement("tbody");k.className=d.CLASS_MESSAGE;var j=k.appendChild(document.createElement("tr"));j.className=d.CLASS_FIRST+" "+d.CLASS_LAST;this._elMsgTr=j;var m=j.appendChild(document.createElement("td"));m.colSpan=this._oColumnSet.keys.length||1;m.className=d.CLASS_FIRST+" "+d.CLASS_LAST;this._elMsgTd=m;k=l.insertBefore(k,this._elTbody);var i=m.appendChild(document.createElement("div"));i.className=d.CLASS_LINER;this._elMsgTbody=k;g.addListener(k,"focus",this._onTbodyFocus,this);g.addListener(k,"mousedown",this._onTableMousedown,this);g.addListener(k,"mouseup",this._onTableMouseup,this);g.addListener(k,"keydown",this._onTbodyKeydown,this);g.addListener(k,"click",this._onTbodyClick,this);}},_initEvents:function(){this._initColumnSort();YAHOO.util.Event.addListener(document,"click",this._onDocumentClick,this);this.subscribe("paginatorChange",function(){this._handlePaginatorChange.apply(this,arguments);});this.subscribe("initEvent",function(){this.renderPaginator();});this._initCellEditing();},_initColumnSort:function(){this.subscribe("theadCellClickEvent",this.onEventSortColumn);var i=this.get("sortedBy");if(i){if(i.dir=="desc"){this._configs.sortedBy.value.dir=d.CLASS_DESC;}else{if(i.dir=="asc"){this._configs.sortedBy.value.dir=d.CLASS_ASC;}}}},_initCellEditing:function(){this.subscribe("editorBlurEvent",function(){this.onEditorBlurEvent.apply(this,arguments);});this.subscribe("editorBlockEvent",function(){this.onEditorBlockEvent.apply(this,arguments);});this.subscribe("editorUnblockEvent",function(){this.onEditorUnblockEvent.apply(this,arguments);});},_getColumnClassNames:function(l,k){var i;if(h.isString(l.className)){i=[l.className];}else{if(h.isArray(l.className)){i=l.className;}else{i=[];}}i[i.length]=this.getId()+"-col-"+l.getSanitizedKey();
 
i[i.length]="yui-dt-col-"+l.getSanitizedKey();var j=this.get("sortedBy")||{};if(l.key===j.key){i[i.length]=j.dir||"";}if(l.hidden){i[i.length]=d.CLASS_HIDDEN;}if(l.selected){i[i.length]=d.CLASS_SELECTED;}if(l.sortable){i[i.length]=d.CLASS_SORTABLE;}if(l.resizeable){i[i.length]=d.CLASS_RESIZEABLE;}if(l.editor){i[i.length]=d.CLASS_EDITABLE;}if(k){i=i.concat(k);}return i.join(" ");},_clearTrTemplateEl:function(){this._elTrTemplate=null;},_getTrTemplateEl:function(u,o){if(this._elTrTemplate){return this._elTrTemplate;}else{var q=document,s=q.createElement("tr"),l=q.createElement("td"),k=q.createElement("div");l.appendChild(k);var t=document.createDocumentFragment(),r=this._oColumnSet.keys,n;var p;for(var m=0,j=r.length;m<j;m++){n=l.cloneNode(true);n=this._formatTdEl(r[m],n,m,(m===j-1));t.appendChild(n);}s.appendChild(t);s.className=d.CLASS_REC;this._elTrTemplate=s;return s;}},_formatTdEl:function(n,p,q,m){var t=this._oColumnSet;var i=t.headers,k=i[q],o="",v;for(var l=0,u=k.length;l<u;l++){v=this._sId+"-th-"+k[l]+" ";o+=v;}p.headers=o;var s=[];if(q===0){s[s.length]=d.CLASS_FIRST;}if(m){s[s.length]=d.CLASS_LAST;}p.className=this._getColumnClassNames(n,s);p.firstChild.className=d.CLASS_LINER;if(n.width&&d._bDynStylesFallback){var r=(n.minWidth&&(n.width<n.minWidth))?n.minWidth:n.width;p.firstChild.style.overflow="hidden";p.firstChild.style.width=r+"px";}return p;},_addTrEl:function(k){var j=this._getTrTemplateEl();var i=j.cloneNode(true);return this._updateTrEl(i,k);},_updateTrEl:function(q,r){var p=this.get("formatRow")?this.get("formatRow").call(this,q,r):true;if(p){q.style.display="none";var o=q.childNodes,m;for(var l=0,n=o.length;l<n;++l){m=o[l];this.formatCell(o[l].firstChild,r,this._oColumnSet.keys[l]);}q.style.display="";}var j=q.id,k=r.getId();if(this._sFirstTrId===j){this._sFirstTrId=k;}if(this._sLastTrId===j){this._sLastTrId=k;}q.id=k;return q;},_deleteTrEl:function(i){var j;if(!h.isNumber(i)){j=c.get(i).sectionRowIndex;}else{j=i;}if(h.isNumber(j)&&(j>-2)&&(j<this._elTbody.rows.length)){return this._elTbody.removeChild(this._elTbody.rows[i]);}else{return null;}},_unsetFirstRow:function(){if(this._sFirstTrId){c.removeClass(this._sFirstTrId,d.CLASS_FIRST);this._sFirstTrId=null;}},_setFirstRow:function(){this._unsetFirstRow();var i=this.getFirstTrEl();if(i){c.addClass(i,d.CLASS_FIRST);this._sFirstTrId=i.id;}},_unsetLastRow:function(){if(this._sLastTrId){c.removeClass(this._sLastTrId,d.CLASS_LAST);this._sLastTrId=null;}},_setLastRow:function(){this._unsetLastRow();var i=this.getLastTrEl();if(i){c.addClass(i,d.CLASS_LAST);this._sLastTrId=i.id;}},_setRowStripes:function(t,l){var m=this._elTbody.rows,q=0,s=m.length,p=[],r=0,n=[],j=0;if((t!==null)&&(t!==undefined)){var o=this.getTrEl(t);if(o){q=o.sectionRowIndex;if(h.isNumber(l)&&(l>1)){s=q+l;}}}for(var k=q;k<s;k++){if(k%2){p[r++]=m[k];}else{n[j++]=m[k];}}if(p.length){c.replaceClass(p,d.CLASS_EVEN,d.CLASS_ODD);}if(n.length){c.replaceClass(n,d.CLASS_ODD,d.CLASS_EVEN);}},_setSelections:function(){var l=this.getSelectedRows();var n=this.getSelectedCells();if((l.length>0)||(n.length>0)){var m=this._oColumnSet,k;for(var j=0;j<l.length;j++){k=c.get(l[j]);if(k){c.addClass(k,d.CLASS_SELECTED);}}for(j=0;j<n.length;j++){k=c.get(n[j].recordId);if(k){c.addClass(k.childNodes[m.getColumn(n[j].columnKey).getKeyIndex()],d.CLASS_SELECTED);}}}},_onRenderChainEnd:function(){this.hideTableMessage();if(this._elTbody.rows.length===0){this.showTableMessage(this.get("MSG_EMPTY"),d.CLASS_EMPTY);}var i=this;setTimeout(function(){if((i instanceof d)&&i._sId){if(i._bInit){i._bInit=false;i.fireEvent("initEvent");}i.fireEvent("renderEvent");i.fireEvent("refreshEvent");i.validateColumnWidths();i.fireEvent("postRenderEvent");}},0);},_onDocumentClick:function(l,j){var m=g.getTarget(l);var i=m.nodeName.toLowerCase();if(!c.isAncestor(j._elContainer,m)){j.fireEvent("tableBlurEvent");if(j._oCellEditor){if(j._oCellEditor.getContainerEl){var k=j._oCellEditor.getContainerEl();if(!c.isAncestor(k,m)&&(k.id!==m.id)){j._oCellEditor.fireEvent("blurEvent",{editor:j._oCellEditor});}}else{if(j._oCellEditor.isActive){if(!c.isAncestor(j._oCellEditor.container,m)&&(j._oCellEditor.container.id!==m.id)){j.fireEvent("editorBlurEvent",{editor:j._oCellEditor});}}}}}},_onTableFocus:function(j,i){i.fireEvent("tableFocusEvent");},_onTheadFocus:function(j,i){i.fireEvent("theadFocusEvent");i.fireEvent("tableFocusEvent");},_onTbodyFocus:function(j,i){i.fireEvent("tbodyFocusEvent");i.fireEvent("tableFocusEvent");},_onTableMouseover:function(n,m,i,k){var o=m;var j=o.nodeName&&o.nodeName.toLowerCase();var l=true;while(o&&(j!="table")){switch(j){case"body":return;case"a":break;case"td":l=k.fireEvent("cellMouseoverEvent",{target:o,event:n});break;case"span":if(c.hasClass(o,d.CLASS_LABEL)){l=k.fireEvent("theadLabelMouseoverEvent",{target:o,event:n});l=k.fireEvent("headerLabelMouseoverEvent",{target:o,event:n});}break;case"th":l=k.fireEvent("theadCellMouseoverEvent",{target:o,event:n});l=k.fireEvent("headerCellMouseoverEvent",{target:o,event:n});break;case"tr":if(o.parentNode.nodeName.toLowerCase()=="thead"){l=k.fireEvent("theadRowMouseoverEvent",{target:o,event:n});l=k.fireEvent("headerRowMouseoverEvent",{target:o,event:n});}else{l=k.fireEvent("rowMouseoverEvent",{target:o,event:n});}break;default:break;}if(l===false){return;}else{o=o.parentNode;if(o){j=o.nodeName.toLowerCase();}}}k.fireEvent("tableMouseoverEvent",{target:(o||k._elContainer),event:n});},_onTableMouseout:function(n,m,i,k){var o=m;var j=o.nodeName&&o.nodeName.toLowerCase();var l=true;while(o&&(j!="table")){switch(j){case"body":return;case"a":break;case"td":l=k.fireEvent("cellMouseoutEvent",{target:o,event:n});break;case"span":if(c.hasClass(o,d.CLASS_LABEL)){l=k.fireEvent("theadLabelMouseoutEvent",{target:o,event:n});l=k.fireEvent("headerLabelMouseoutEvent",{target:o,event:n});}break;case"th":l=k.fireEvent("theadCellMouseoutEvent",{target:o,event:n});l=k.fireEvent("headerCellMouseoutEvent",{target:o,event:n});break;case"tr":if(o.parentNode.nodeName.toLowerCase()=="thead"){l=k.fireEvent("theadRowMouseoutEvent",{target:o,event:n});
 
l=k.fireEvent("headerRowMouseoutEvent",{target:o,event:n});}else{l=k.fireEvent("rowMouseoutEvent",{target:o,event:n});}break;default:break;}if(l===false){return;}else{o=o.parentNode;if(o){j=o.nodeName.toLowerCase();}}}k.fireEvent("tableMouseoutEvent",{target:(o||k._elContainer),event:n});},_onTableMousedown:function(l,j){var m=g.getTarget(l);var i=m.nodeName&&m.nodeName.toLowerCase();var k=true;while(m&&(i!="table")){switch(i){case"body":return;case"a":break;case"td":k=j.fireEvent("cellMousedownEvent",{target:m,event:l});break;case"span":if(c.hasClass(m,d.CLASS_LABEL)){k=j.fireEvent("theadLabelMousedownEvent",{target:m,event:l});k=j.fireEvent("headerLabelMousedownEvent",{target:m,event:l});}break;case"th":k=j.fireEvent("theadCellMousedownEvent",{target:m,event:l});k=j.fireEvent("headerCellMousedownEvent",{target:m,event:l});break;case"tr":if(m.parentNode.nodeName.toLowerCase()=="thead"){k=j.fireEvent("theadRowMousedownEvent",{target:m,event:l});k=j.fireEvent("headerRowMousedownEvent",{target:m,event:l});}else{k=j.fireEvent("rowMousedownEvent",{target:m,event:l});}break;default:break;}if(k===false){return;}else{m=m.parentNode;if(m){i=m.nodeName.toLowerCase();}}}j.fireEvent("tableMousedownEvent",{target:(m||j._elContainer),event:l});},_onTableMouseup:function(l,j){var m=g.getTarget(l);var i=m.nodeName&&m.nodeName.toLowerCase();var k=true;while(m&&(i!="table")){switch(i){case"body":return;case"a":break;case"td":k=j.fireEvent("cellMouseupEvent",{target:m,event:l});break;case"span":if(c.hasClass(m,d.CLASS_LABEL)){k=j.fireEvent("theadLabelMouseupEvent",{target:m,event:l});k=j.fireEvent("headerLabelMouseupEvent",{target:m,event:l});}break;case"th":k=j.fireEvent("theadCellMouseupEvent",{target:m,event:l});k=j.fireEvent("headerCellMouseupEvent",{target:m,event:l});break;case"tr":if(m.parentNode.nodeName.toLowerCase()=="thead"){k=j.fireEvent("theadRowMouseupEvent",{target:m,event:l});k=j.fireEvent("headerRowMouseupEvent",{target:m,event:l});}else{k=j.fireEvent("rowMouseupEvent",{target:m,event:l});}break;default:break;}if(k===false){return;}else{m=m.parentNode;if(m){i=m.nodeName.toLowerCase();}}}j.fireEvent("tableMouseupEvent",{target:(m||j._elContainer),event:l});},_onTableDblclick:function(l,j){var m=g.getTarget(l);var i=m.nodeName&&m.nodeName.toLowerCase();var k=true;while(m&&(i!="table")){switch(i){case"body":return;case"td":k=j.fireEvent("cellDblclickEvent",{target:m,event:l});break;case"span":if(c.hasClass(m,d.CLASS_LABEL)){k=j.fireEvent("theadLabelDblclickEvent",{target:m,event:l});k=j.fireEvent("headerLabelDblclickEvent",{target:m,event:l});}break;case"th":k=j.fireEvent("theadCellDblclickEvent",{target:m,event:l});k=j.fireEvent("headerCellDblclickEvent",{target:m,event:l});break;case"tr":if(m.parentNode.nodeName.toLowerCase()=="thead"){k=j.fireEvent("theadRowDblclickEvent",{target:m,event:l});k=j.fireEvent("headerRowDblclickEvent",{target:m,event:l});}else{k=j.fireEvent("rowDblclickEvent",{target:m,event:l});}break;default:break;}if(k===false){return;}else{m=m.parentNode;if(m){i=m.nodeName.toLowerCase();}}}j.fireEvent("tableDblclickEvent",{target:(m||j._elContainer),event:l});},_onTheadKeydown:function(l,j){var m=g.getTarget(l);var i=m.nodeName&&m.nodeName.toLowerCase();var k=true;while(m&&(i!="table")){switch(i){case"body":return;case"input":case"textarea":break;case"thead":k=j.fireEvent("theadKeyEvent",{target:m,event:l});break;default:break;}if(k===false){return;}else{m=m.parentNode;if(m){i=m.nodeName.toLowerCase();}}}j.fireEvent("tableKeyEvent",{target:(m||j._elContainer),event:l});},_onTbodyKeydown:function(m,k){var j=k.get("selectionMode");if(j=="standard"){k._handleStandardSelectionByKey(m);}else{if(j=="single"){k._handleSingleSelectionByKey(m);}else{if(j=="cellblock"){k._handleCellBlockSelectionByKey(m);}else{if(j=="cellrange"){k._handleCellRangeSelectionByKey(m);}else{if(j=="singlecell"){k._handleSingleCellSelectionByKey(m);}}}}}if(k._oCellEditor){if(k._oCellEditor.fireEvent){k._oCellEditor.fireEvent("blurEvent",{editor:k._oCellEditor});}else{if(k._oCellEditor.isActive){k.fireEvent("editorBlurEvent",{editor:k._oCellEditor});}}}var n=g.getTarget(m);var i=n.nodeName&&n.nodeName.toLowerCase();var l=true;while(n&&(i!="table")){switch(i){case"body":return;case"tbody":l=k.fireEvent("tbodyKeyEvent",{target:n,event:m});break;default:break;}if(l===false){return;}else{n=n.parentNode;if(n){i=n.nodeName.toLowerCase();}}}k.fireEvent("tableKeyEvent",{target:(n||k._elContainer),event:m});},_onTheadClick:function(l,j){if(j._oCellEditor){if(j._oCellEditor.fireEvent){j._oCellEditor.fireEvent("blurEvent",{editor:j._oCellEditor});}else{if(j._oCellEditor.isActive){j.fireEvent("editorBlurEvent",{editor:j._oCellEditor});}}}var m=g.getTarget(l),i=m.nodeName&&m.nodeName.toLowerCase(),k=true;while(m&&(i!="table")){switch(i){case"body":return;case"input":var n=m.type.toLowerCase();if(n=="checkbox"){k=j.fireEvent("theadCheckboxClickEvent",{target:m,event:l});}else{if(n=="radio"){k=j.fireEvent("theadRadioClickEvent",{target:m,event:l});}else{if((n=="button")||(n=="image")||(n=="submit")||(n=="reset")){if(!m.disabled){k=j.fireEvent("theadButtonClickEvent",{target:m,event:l});}else{k=false;}}else{if(m.disabled){k=false;}}}}break;case"a":k=j.fireEvent("theadLinkClickEvent",{target:m,event:l});break;case"button":if(!m.disabled){k=j.fireEvent("theadButtonClickEvent",{target:m,event:l});}else{k=false;}break;case"span":if(c.hasClass(m,d.CLASS_LABEL)){k=j.fireEvent("theadLabelClickEvent",{target:m,event:l});k=j.fireEvent("headerLabelClickEvent",{target:m,event:l});}break;case"th":k=j.fireEvent("theadCellClickEvent",{target:m,event:l});k=j.fireEvent("headerCellClickEvent",{target:m,event:l});break;case"tr":k=j.fireEvent("theadRowClickEvent",{target:m,event:l});k=j.fireEvent("headerRowClickEvent",{target:m,event:l});break;default:break;}if(k===false){return;}else{m=m.parentNode;if(m){i=m.nodeName.toLowerCase();}}}j.fireEvent("tableClickEvent",{target:(m||j._elContainer),event:l});},_onTbodyClick:function(l,j){if(j._oCellEditor){if(j._oCellEditor.fireEvent){j._oCellEditor.fireEvent("blurEvent",{editor:j._oCellEditor});
 
}else{if(j._oCellEditor.isActive){j.fireEvent("editorBlurEvent",{editor:j._oCellEditor});}}}var m=g.getTarget(l),i=m.nodeName&&m.nodeName.toLowerCase(),k=true;while(m&&(i!="table")){switch(i){case"body":return;case"input":var n=m.type.toLowerCase();if(n=="checkbox"){k=j.fireEvent("checkboxClickEvent",{target:m,event:l});}else{if(n=="radio"){k=j.fireEvent("radioClickEvent",{target:m,event:l});}else{if((n=="button")||(n=="image")||(n=="submit")||(n=="reset")){if(!m.disabled){k=j.fireEvent("buttonClickEvent",{target:m,event:l});}else{k=false;}}else{if(m.disabled){k=false;}}}}break;case"a":k=j.fireEvent("linkClickEvent",{target:m,event:l});break;case"button":if(!m.disabled){k=j.fireEvent("buttonClickEvent",{target:m,event:l});}else{k=false;}break;case"td":k=j.fireEvent("cellClickEvent",{target:m,event:l});break;case"tr":k=j.fireEvent("rowClickEvent",{target:m,event:l});break;default:break;}if(k===false){return;}else{m=m.parentNode;if(m){i=m.nodeName.toLowerCase();}}}j.fireEvent("tableClickEvent",{target:(m||j._elContainer),event:l});},_onDropdownChange:function(j,i){var k=g.getTarget(j);i.fireEvent("dropdownChangeEvent",{event:j,target:k});},configs:null,getId:function(){return this._sId;},toString:function(){return"DataTable instance "+this._sId;},getDataSource:function(){return this._oDataSource;},getColumnSet:function(){return this._oColumnSet;},getRecordSet:function(){return this._oRecordSet;},getState:function(){return{totalRecords:this.get("paginator")?this.get("paginator").get("totalRecords"):this._oRecordSet.getLength(),pagination:this.get("paginator")?this.get("paginator").getState():null,sortedBy:this.get("sortedBy"),selectedRows:this.getSelectedRows(),selectedCells:this.getSelectedCells()};},getContainerEl:function(){return this._elContainer;},getTableEl:function(){return this._elTable;},getTheadEl:function(){return this._elThead;},getTbodyEl:function(){return this._elTbody;},getMsgTbodyEl:function(){return this._elMsgTbody;},getMsgTdEl:function(){return this._elMsgTd;},getTrEl:function(k){if(k instanceof YAHOO.widget.Record){return document.getElementById(k.getId());}else{if(h.isNumber(k)){var j=c.getElementsByClassName(d.CLASS_REC,"tr",this._elTbody);return j&&j[k]?j[k]:null;}else{if(k){var i=(h.isString(k))?document.getElementById(k):k;if(i&&i.ownerDocument==document){if(i.nodeName.toLowerCase()!="tr"){i=c.getAncestorByTagName(i,"tr");}return i;}}}}return null;},getFirstTrEl:function(){var k=this._elTbody.rows,j=0;while(k[j]){if(this.getRecord(k[j])){return k[j];}j++;}return null;},getLastTrEl:function(){var k=this._elTbody.rows,j=k.length-1;while(j>-1){if(this.getRecord(k[j])){return k[j];}j--;}return null;},getNextTrEl:function(l,i){var j=this.getTrIndex(l);if(j!==null){var k=this._elTbody.rows;if(i){while(j<k.length-1){l=k[j+1];if(this.getRecord(l)){return l;}j++;}}else{if(j<k.length-1){return k[j+1];}}}return null;},getPreviousTrEl:function(l,i){var j=this.getTrIndex(l);if(j!==null){var k=this._elTbody.rows;if(i){while(j>0){l=k[j-1];if(this.getRecord(l)){return l;}j--;}}else{if(j>0){return k[j-1];}}}return null;},getCellIndex:function(k){k=this.getTdEl(k);if(k){if(b.ie>0){var l=0,n=k.parentNode,m=n.childNodes,j=m.length;for(;l<j;l++){if(m[l]==k){return l;}}}else{return k.cellIndex;}}},getTdLinerEl:function(i){var j=this.getTdEl(i);return j.firstChild||null;},getTdEl:function(i){var n;var l=c.get(i);if(l&&(l.ownerDocument==document)){if(l.nodeName.toLowerCase()!="td"){n=c.getAncestorByTagName(l,"td");}else{n=l;}if(n&&((n.parentNode.parentNode==this._elTbody)||(n.parentNode.parentNode===null)||(n.parentNode.parentNode.nodeType===11))){return n;}}else{if(i){var m,k;if(h.isString(i.columnKey)&&h.isString(i.recordId)){m=this.getRecord(i.recordId);var o=this.getColumn(i.columnKey);if(o){k=o.getKeyIndex();}}if(i.record&&i.column&&i.column.getKeyIndex){m=i.record;k=i.column.getKeyIndex();}var j=this.getTrEl(m);if((k!==null)&&j&&j.cells&&j.cells.length>0){return j.cells[k]||null;}}}return null;},getFirstTdEl:function(j){var i=h.isValue(j)?this.getTrEl(j):this.getFirstTrEl();if(i){if(i.cells&&i.cells.length>0){return i.cells[0];}else{if(i.childNodes&&i.childNodes.length>0){return i.childNodes[0];}}}return null;},getLastTdEl:function(j){var i=h.isValue(j)?this.getTrEl(j):this.getLastTrEl();if(i){if(i.cells&&i.cells.length>0){return i.cells[i.cells.length-1];}else{if(i.childNodes&&i.childNodes.length>0){return i.childNodes[i.childNodes.length-1];}}}return null;},getNextTdEl:function(i){var m=this.getTdEl(i);if(m){var k=this.getCellIndex(m);var j=this.getTrEl(m);if(j.cells&&(j.cells.length)>0&&(k<j.cells.length-1)){return j.cells[k+1];}else{if(j.childNodes&&(j.childNodes.length)>0&&(k<j.childNodes.length-1)){return j.childNodes[k+1];}else{var l=this.getNextTrEl(j);if(l){return l.cells[0];}}}}return null;},getPreviousTdEl:function(i){var m=this.getTdEl(i);if(m){var k=this.getCellIndex(m);var j=this.getTrEl(m);if(k>0){if(j.cells&&j.cells.length>0){return j.cells[k-1];}else{if(j.childNodes&&j.childNodes.length>0){return j.childNodes[k-1];}}}else{var l=this.getPreviousTrEl(j);if(l){return this.getLastTdEl(l);}}}return null;},getAboveTdEl:function(j,i){var m=this.getTdEl(j);if(m){var l=this.getPreviousTrEl(m,i);if(l){var k=this.getCellIndex(m);if(l.cells&&l.cells.length>0){return l.cells[k]?l.cells[k]:null;}else{if(l.childNodes&&l.childNodes.length>0){return l.childNodes[k]?l.childNodes[k]:null;}}}}return null;},getBelowTdEl:function(j,i){var m=this.getTdEl(j);if(m){var l=this.getNextTrEl(m,i);if(l){var k=this.getCellIndex(m);if(l.cells&&l.cells.length>0){return l.cells[k]?l.cells[k]:null;}else{if(l.childNodes&&l.childNodes.length>0){return l.childNodes[k]?l.childNodes[k]:null;}}}}return null;},getThLinerEl:function(j){var i=this.getColumn(j);return(i)?i.getThLinerEl():null;},getThEl:function(k){var l;if(k instanceof YAHOO.widget.Column){var j=k;l=j.getThEl();if(l){return l;}}else{var i=c.get(k);if(i&&(i.ownerDocument==document)){if(i.nodeName.toLowerCase()!="th"){l=c.getAncestorByTagName(i,"th");
 
}else{l=i;}return l;}}return null;},getTrIndex:function(m){var i=this.getRecord(m),k=this.getRecordIndex(i),l;if(i){l=this.getTrEl(i);if(l){return l.sectionRowIndex;}else{var j=this.get("paginator");if(j){return j.get("recordOffset")+k;}else{return k;}}}return null;},load:function(i){i=i||{};(i.datasource||this._oDataSource).sendRequest(i.request||this.get("initialRequest"),i.callback||{success:this.onDataReturnInitializeTable,failure:this.onDataReturnInitializeTable,scope:this,argument:this.getState()});},initializeTable:function(){this._bInit=true;this._oRecordSet.reset();var i=this.get("paginator");if(i){i.set("totalRecords",0);}this._unselectAllTrEls();this._unselectAllTdEls();this._aSelections=null;this._oAnchorRecord=null;this._oAnchorCell=null;this.set("sortedBy",null);},_runRenderChain:function(){this._oChainRender.run();},_getViewRecords:function(){var i=this.get("paginator");if(i){return this._oRecordSet.getRecords(i.getStartIndex(),i.getRowsPerPage());}else{return this._oRecordSet.getRecords();}},render:function(){this._oChainRender.stop();this.fireEvent("beforeRenderEvent");var r,p,o,s,l=this._getViewRecords();var m=this._elTbody,q=this.get("renderLoopSize"),t=l.length;if(t>0){m.style.display="none";while(m.lastChild){m.removeChild(m.lastChild);}m.style.display="";this._oChainRender.add({method:function(u){if((this instanceof d)&&this._sId){var k=u.nCurrentRecord,w=((u.nCurrentRecord+u.nLoopLength)>t)?t:(u.nCurrentRecord+u.nLoopLength),j,v;m.style.display="none";for(;k<w;k++){j=c.get(l[k].getId());j=j||this._addTrEl(l[k]);v=m.childNodes[k]||null;m.insertBefore(j,v);}m.style.display="";u.nCurrentRecord=k;}},scope:this,iterations:(q>0)?Math.ceil(t/q):1,argument:{nCurrentRecord:0,nLoopLength:(q>0)?q:t},timeout:(q>0)?0:-1});this._oChainRender.add({method:function(i){if((this instanceof d)&&this._sId){while(m.rows.length>t){m.removeChild(m.lastChild);}this._setFirstRow();this._setLastRow();this._setRowStripes();this._setSelections();}},scope:this,timeout:(q>0)?0:-1});}else{var n=m.rows.length;if(n>0){this._oChainRender.add({method:function(k){if((this instanceof d)&&this._sId){var j=k.nCurrent,v=k.nLoopLength,u=(j-v<0)?0:j-v;m.style.display="none";for(;j>u;j--){m.deleteRow(-1);}m.style.display="";k.nCurrent=j;}},scope:this,iterations:(q>0)?Math.ceil(n/q):1,argument:{nCurrent:n,nLoopLength:(q>0)?q:n},timeout:(q>0)?0:-1});}}this._runRenderChain();},disable:function(){this._disabled=true;var i=this._elTable;var j=this._elMask;j.style.width=i.offsetWidth+"px";j.style.height=i.offsetHeight+"px";j.style.left=i.offsetLeft+"px";j.style.display="";this.fireEvent("disableEvent");},undisable:function(){this._disabled=false;this._elMask.style.display="none";this.fireEvent("undisableEvent");},isDisabled:function(){return this._disabled;},destroy:function(){var k=this.toString();this._oChainRender.stop();this._destroyColumnHelpers();var m;for(var l=0,j=this._oColumnSet.flat.length;l<j;l++){m=this._oColumnSet.flat[l].editor;if(m&&m.destroy){m.destroy();this._oColumnSet.flat[l].editor=null;}}this._destroyPaginator();this._oRecordSet.unsubscribeAll();this.unsubscribeAll();g.removeListener(document,"click",this._onDocumentClick);this._destroyContainerEl(this._elContainer);for(var n in this){if(h.hasOwnProperty(this,n)){this[n]=null;}}d._nCurrentCount--;if(d._nCurrentCount<1){if(d._elDynStyleNode){document.getElementsByTagName("head")[0].removeChild(d._elDynStyleNode);d._elDynStyleNode=null;}}},showTableMessage:function(j,i){var k=this._elMsgTd;if(h.isString(j)){k.firstChild.innerHTML=j;}if(h.isString(i)){k.className=i;}this._elMsgTbody.style.display="";this.fireEvent("tableMsgShowEvent",{html:j,className:i});},hideTableMessage:function(){if(this._elMsgTbody.style.display!="none"){this._elMsgTbody.style.display="none";this._elMsgTbody.parentNode.style.width="";this.fireEvent("tableMsgHideEvent");}},focus:function(){this.focusTbodyEl();},focusTheadEl:function(){this._focusEl(this._elThead);},focusTbodyEl:function(){this._focusEl(this._elTbody);},onShow:function(){this.validateColumnWidths();for(var m=this._oColumnSet.keys,l=0,j=m.length,k;l<j;l++){k=m[l];if(k._ddResizer){k._ddResizer.resetResizerEl();}}},getRecordIndex:function(l){var k;if(!h.isNumber(l)){if(l instanceof YAHOO.widget.Record){return this._oRecordSet.getRecordIndex(l);}else{var j=this.getTrEl(l);if(j){k=j.sectionRowIndex;}}}else{k=l;}if(h.isNumber(k)){var i=this.get("paginator");if(i){return i.get("recordOffset")+k;}else{return k;}}return null;},getRecord:function(k){var j=this._oRecordSet.getRecord(k);if(!j){var i=this.getTrEl(k);if(i){j=this._oRecordSet.getRecord(i.id);}}if(j instanceof YAHOO.widget.Record){return this._oRecordSet.getRecord(j);}else{return null;}},getColumn:function(m){var o=this._oColumnSet.getColumn(m);if(!o){var n=this.getTdEl(m);if(n){o=this._oColumnSet.getColumn(this.getCellIndex(n));}else{n=this.getThEl(m);if(n){var k=this._oColumnSet.flat;for(var l=0,j=k.length;l<j;l++){if(k[l].getThEl().id===n.id){o=k[l];}}}}}if(!o){}return o;},getColumnById:function(i){return this._oColumnSet.getColumnById(i);},getColumnSortDir:function(k,l){if(k.sortOptions&&k.sortOptions.defaultDir){if(k.sortOptions.defaultDir=="asc"){k.sortOptions.defaultDir=d.CLASS_ASC;}else{if(k.sortOptions.defaultDir=="desc"){k.sortOptions.defaultDir=d.CLASS_DESC;}}}var j=(k.sortOptions&&k.sortOptions.defaultDir)?k.sortOptions.defaultDir:d.CLASS_ASC;var i=false;l=l||this.get("sortedBy");if(l&&(l.key===k.key)){i=true;if(l.dir){j=(l.dir===d.CLASS_ASC)?d.CLASS_DESC:d.CLASS_ASC;}else{j=(j===d.CLASS_ASC)?d.CLASS_DESC:d.CLASS_ASC;}}return j;},doBeforeSortColumn:function(j,i){this.showTableMessage(this.get("MSG_LOADING"),d.CLASS_LOADING);return true;},sortColumn:function(m,j){if(m&&(m instanceof YAHOO.widget.Column)){if(!m.sortable){c.addClass(this.getThEl(m),d.CLASS_SORTABLE);}if(j&&(j!==d.CLASS_ASC)&&(j!==d.CLASS_DESC)){j=null;}var n=j||this.getColumnSortDir(m);var l=this.get("sortedBy")||{};var t=(l.key===m.key)?true:false;var p=this.doBeforeSortColumn(m,n);
 
if(p){if(this.get("dynamicData")){var s=this.getState();if(s.pagination){s.pagination.recordOffset=0;}s.sortedBy={key:m.key,dir:n};var k=this.get("generateRequest")(s,this);this.unselectAllRows();this.unselectAllCells();var r={success:this.onDataReturnSetRows,failure:this.onDataReturnSetRows,argument:s,scope:this};this._oDataSource.sendRequest(k,r);}else{var i=(m.sortOptions&&h.isFunction(m.sortOptions.sortFunction))?m.sortOptions.sortFunction:null;if(!t||j||i){i=i||this.get("sortFunction");var q=(m.sortOptions&&m.sortOptions.field)?m.sortOptions.field:m.field;this._oRecordSet.sortRecords(i,((n==d.CLASS_DESC)?true:false),q);}else{this._oRecordSet.reverseRecords();}var o=this.get("paginator");if(o){o.setPage(1,true);}this.render();this.set("sortedBy",{key:m.key,dir:n,column:m});}this.fireEvent("columnSortEvent",{column:m,dir:n});return;}}},setColumnWidth:function(j,i){if(!(j instanceof YAHOO.widget.Column)){j=this.getColumn(j);}if(j){if(h.isNumber(i)){i=(i>j.minWidth)?i:j.minWidth;j.width=i;this._setColumnWidth(j,i+"px");this.fireEvent("columnSetWidthEvent",{column:j,width:i});}else{if(i===null){j.width=i;this._setColumnWidth(j,"auto");this.validateColumnWidths(j);this.fireEvent("columnUnsetWidthEvent",{column:j});}}this._clearTrTemplateEl();}else{}},_setColumnWidth:function(j,i,k){if(j&&(j.getKeyIndex()!==null)){k=k||(((i==="")||(i==="auto"))?"visible":"hidden");if(!d._bDynStylesFallback){this._setColumnWidthDynStyles(j,i,k);}else{this._setColumnWidthDynFunction(j,i,k);}}else{}},_setColumnWidthDynStyles:function(m,l,n){var j=d._elDynStyleNode,k;if(!j){j=document.createElement("style");j.type="text/css";j=document.getElementsByTagName("head").item(0).appendChild(j);d._elDynStyleNode=j;}if(j){var i="."+this.getId()+"-col-"+m.getSanitizedKey()+" ."+d.CLASS_LINER;if(this._elTbody){this._elTbody.style.display="none";}k=d._oDynStyles[i];if(!k){if(j.styleSheet&&j.styleSheet.addRule){j.styleSheet.addRule(i,"overflow:"+n);j.styleSheet.addRule(i,"width:"+l);k=j.styleSheet.rules[j.styleSheet.rules.length-1];d._oDynStyles[i]=k;}else{if(j.sheet&&j.sheet.insertRule){j.sheet.insertRule(i+" {overflow:"+n+";width:"+l+";}",j.sheet.cssRules.length);k=j.sheet.cssRules[j.sheet.cssRules.length-1];d._oDynStyles[i]=k;}}}else{k.style.overflow=n;k.style.width=l;}if(this._elTbody){this._elTbody.style.display="";}}if(!k){d._bDynStylesFallback=true;this._setColumnWidthDynFunction(m,l);}},_setColumnWidthDynFunction:function(r,m,s){if(m=="auto"){m="";}var l=this._elTbody?this._elTbody.rows.length:0;if(!this._aDynFunctions[l]){var q,p,o;var t=["var colIdx=oColumn.getKeyIndex();","oColumn.getThLinerEl().style.overflow="];for(q=l-1,p=2;q>=0;--q){t[p++]="this._elTbody.rows[";t[p++]=q;t[p++]="].cells[colIdx].firstChild.style.overflow=";}t[p]="sOverflow;";t[p+1]="oColumn.getThLinerEl().style.width=";for(q=l-1,o=p+2;q>=0;--q){t[o++]="this._elTbody.rows[";t[o++]=q;t[o++]="].cells[colIdx].firstChild.style.width=";}t[o]="sWidth;";this._aDynFunctions[l]=new Function("oColumn","sWidth","sOverflow",t.join(""));}var n=this._aDynFunctions[l];if(n){n.call(this,r,m,s);}},validateColumnWidths:function(o){var l=this._elColgroup;var q=l.cloneNode(true);var p=false;var n=this._oColumnSet.keys;var k;if(o&&!o.hidden&&!o.width&&(o.getKeyIndex()!==null)){k=o.getThLinerEl();if((o.minWidth>0)&&(k.offsetWidth<o.minWidth)){q.childNodes[o.getKeyIndex()].style.width=o.minWidth+(parseInt(c.getStyle(k,"paddingLeft"),10)|0)+(parseInt(c.getStyle(k,"paddingRight"),10)|0)+"px";p=true;}else{if((o.maxAutoWidth>0)&&(k.offsetWidth>o.maxAutoWidth)){this._setColumnWidth(o,o.maxAutoWidth+"px","hidden");}}}else{for(var m=0,j=n.length;m<j;m++){o=n[m];if(!o.hidden&&!o.width){k=o.getThLinerEl();if((o.minWidth>0)&&(k.offsetWidth<o.minWidth)){q.childNodes[m].style.width=o.minWidth+(parseInt(c.getStyle(k,"paddingLeft"),10)|0)+(parseInt(c.getStyle(k,"paddingRight"),10)|0)+"px";p=true;}else{if((o.maxAutoWidth>0)&&(k.offsetWidth>o.maxAutoWidth)){this._setColumnWidth(o,o.maxAutoWidth+"px","hidden");}}}}}if(p){l.parentNode.replaceChild(q,l);this._elColgroup=q;}},_clearMinWidth:function(i){if(i.getKeyIndex()!==null){this._elColgroup.childNodes[i.getKeyIndex()].style.width="";}},_restoreMinWidth:function(i){if(i.minWidth&&(i.getKeyIndex()!==null)){this._elColgroup.childNodes[i.getKeyIndex()].style.width=i.minWidth+"px";}},hideColumn:function(r){if(!(r instanceof YAHOO.widget.Column)){r=this.getColumn(r);}if(r&&!r.hidden&&r.getTreeIndex()!==null){var o=this.getTbodyEl().rows;var n=o.length;var m=this._oColumnSet.getDescendants(r);for(var q=0,s=m.length;q<s;q++){var t=m[q];t.hidden=true;c.addClass(t.getThEl(),d.CLASS_HIDDEN);var k=t.getKeyIndex();if(k!==null){this._clearMinWidth(r);for(var p=0;p<n;p++){c.addClass(o[p].cells[k],d.CLASS_HIDDEN);}}this.fireEvent("columnHideEvent",{column:t});}this._repaintOpera();this._clearTrTemplateEl();}else{}},showColumn:function(r){if(!(r instanceof YAHOO.widget.Column)){r=this.getColumn(r);}if(r&&r.hidden&&(r.getTreeIndex()!==null)){var o=this.getTbodyEl().rows;var n=o.length;var m=this._oColumnSet.getDescendants(r);for(var q=0,s=m.length;q<s;q++){var t=m[q];t.hidden=false;c.removeClass(t.getThEl(),d.CLASS_HIDDEN);var k=t.getKeyIndex();if(k!==null){this._restoreMinWidth(r);for(var p=0;p<n;p++){c.removeClass(o[p].cells[k],d.CLASS_HIDDEN);}}this.fireEvent("columnShowEvent",{column:t});}this._clearTrTemplateEl();}else{}},removeColumn:function(p){if(!(p instanceof YAHOO.widget.Column)){p=this.getColumn(p);}if(p){var m=p.getTreeIndex();if(m!==null){var o,r,q=p.getKeyIndex();if(q===null){var u=[];var j=this._oColumnSet.getDescendants(p);for(o=0,r=j.length;o<r;o++){var s=j[o].getKeyIndex();if(s!==null){u[u.length]=s;}}if(u.length>0){q=u;}}else{q=[q];}if(q!==null){q.sort(function(v,i){return YAHOO.util.Sort.compare(v,i);});this._destroyTheadEl();var k=this._oColumnSet.getDefinitions();p=k.splice(m,1)[0];this._initColumnSet(k);this._initTheadEl();for(o=q.length-1;o>-1;o--){this._removeColgroupColEl(q[o]);}var t=this._elTbody.rows;if(t.length>0){var n=this.get("renderLoopSize"),l=t.length;
 
this._oChainRender.add({method:function(y){if((this instanceof d)&&this._sId){var x=y.nCurrentRow,v=n>0?Math.min(x+n,t.length):t.length,z=y.aIndexes,w;for(;x<v;++x){for(w=z.length-1;w>-1;w--){t[x].removeChild(t[x].childNodes[z[w]]);}}y.nCurrentRow=x;}},iterations:(n>0)?Math.ceil(l/n):1,argument:{nCurrentRow:0,aIndexes:q},scope:this,timeout:(n>0)?0:-1});this._runRenderChain();}this.fireEvent("columnRemoveEvent",{column:p});return p;}}}},insertColumn:function(r,s){if(r instanceof YAHOO.widget.Column){r=r.getDefinition();}else{if(r.constructor!==Object){return;}}var x=this._oColumnSet;if(!h.isValue(s)||!h.isNumber(s)){s=x.tree[0].length;}this._destroyTheadEl();var z=this._oColumnSet.getDefinitions();z.splice(s,0,r);this._initColumnSet(z);this._initTheadEl();x=this._oColumnSet;var n=x.tree[0][s];var p,t,w=[];var l=x.getDescendants(n);for(p=0,t=l.length;p<t;p++){var u=l[p].getKeyIndex();if(u!==null){w[w.length]=u;}}if(w.length>0){var y=w.sort(function(A,i){return YAHOO.util.Sort.compare(A,i);})[0];for(p=w.length-1;p>-1;p--){this._insertColgroupColEl(w[p]);}var v=this._elTbody.rows;if(v.length>0){var o=this.get("renderLoopSize"),m=v.length;var k=[],q;for(p=0,t=w.length;p<t;p++){var j=w[p];q=this._getTrTemplateEl().childNodes[p].cloneNode(true);q=this._formatTdEl(this._oColumnSet.keys[j],q,j,(j===this._oColumnSet.keys.length-1));k[j]=q;}this._oChainRender.add({method:function(D){if((this instanceof d)&&this._sId){var C=D.nCurrentRow,B,F=D.descKeyIndexes,A=o>0?Math.min(C+o,v.length):v.length,E;for(;C<A;++C){E=v[C].childNodes[y]||null;for(B=F.length-1;B>-1;B--){v[C].insertBefore(D.aTdTemplates[F[B]].cloneNode(true),E);}}D.nCurrentRow=C;}},iterations:(o>0)?Math.ceil(m/o):1,argument:{nCurrentRow:0,aTdTemplates:k,descKeyIndexes:w},scope:this,timeout:(o>0)?0:-1});this._runRenderChain();}this.fireEvent("columnInsertEvent",{column:r,index:s});return n;}},reorderColumn:function(q,r){if(!(q instanceof YAHOO.widget.Column)){q=this.getColumn(q);}if(q&&YAHOO.lang.isNumber(r)){var z=q.getTreeIndex();if((z!==null)&&(z!==r)){var p,s,l=q.getKeyIndex(),k,v=[],t;if(l===null){k=this._oColumnSet.getDescendants(q);for(p=0,s=k.length;p<s;p++){t=k[p].getKeyIndex();if(t!==null){v[v.length]=t;}}if(v.length>0){l=v;}}else{l=[l];}if(l!==null){l.sort(function(A,i){return YAHOO.util.Sort.compare(A,i);});this._destroyTheadEl();var w=this._oColumnSet.getDefinitions();var j=w.splice(z,1)[0];w.splice(r,0,j);this._initColumnSet(w);this._initTheadEl();var n=this._oColumnSet.tree[0][r];var y=n.getKeyIndex();if(y===null){v=[];k=this._oColumnSet.getDescendants(n);for(p=0,s=k.length;p<s;p++){t=k[p].getKeyIndex();if(t!==null){v[v.length]=t;}}if(v.length>0){y=v;}}else{y=[y];}var x=y.sort(function(A,i){return YAHOO.util.Sort.compare(A,i);})[0];this._reorderColgroupColEl(l,x);var u=this._elTbody.rows;if(u.length>0){var o=this.get("renderLoopSize"),m=u.length;this._oChainRender.add({method:function(D){if((this instanceof d)&&this._sId){var C=D.nCurrentRow,B,F,E,A=o>0?Math.min(C+o,u.length):u.length,H=D.aIndexes,G;for(;C<A;++C){F=[];G=u[C];for(B=H.length-1;B>-1;B--){F.push(G.removeChild(G.childNodes[H[B]]));}E=G.childNodes[x]||null;for(B=F.length-1;B>-1;B--){G.insertBefore(F[B],E);}}D.nCurrentRow=C;}},iterations:(o>0)?Math.ceil(m/o):1,argument:{nCurrentRow:0,aIndexes:l},scope:this,timeout:(o>0)?0:-1});this._runRenderChain();}this.fireEvent("columnReorderEvent",{column:n,oldIndex:z});return n;}}}},selectColumn:function(k){k=this.getColumn(k);if(k&&!k.selected){if(k.getKeyIndex()!==null){k.selected=true;var l=k.getThEl();c.addClass(l,d.CLASS_SELECTED);var j=this.getTbodyEl().rows;var i=this._oChainRender;i.add({method:function(m){if((this instanceof d)&&this._sId&&j[m.rowIndex]&&j[m.rowIndex].cells[m.cellIndex]){c.addClass(j[m.rowIndex].cells[m.cellIndex],d.CLASS_SELECTED);}m.rowIndex++;},scope:this,iterations:j.length,argument:{rowIndex:0,cellIndex:k.getKeyIndex()}});this._clearTrTemplateEl();this._elTbody.style.display="none";this._runRenderChain();this._elTbody.style.display="";this.fireEvent("columnSelectEvent",{column:k});}else{}}},unselectColumn:function(k){k=this.getColumn(k);if(k&&k.selected){if(k.getKeyIndex()!==null){k.selected=false;var l=k.getThEl();c.removeClass(l,d.CLASS_SELECTED);var j=this.getTbodyEl().rows;var i=this._oChainRender;i.add({method:function(m){if((this instanceof d)&&this._sId&&j[m.rowIndex]&&j[m.rowIndex].cells[m.cellIndex]){c.removeClass(j[m.rowIndex].cells[m.cellIndex],d.CLASS_SELECTED);}m.rowIndex++;},scope:this,iterations:j.length,argument:{rowIndex:0,cellIndex:k.getKeyIndex()}});this._clearTrTemplateEl();this._elTbody.style.display="none";this._runRenderChain();this._elTbody.style.display="";this.fireEvent("columnUnselectEvent",{column:k});}else{}}},getSelectedColumns:function(n){var k=[];var l=this._oColumnSet.keys;for(var m=0,j=l.length;m<j;m++){if(l[m].selected){k[k.length]=l[m];}}return k;},highlightColumn:function(i){var l=this.getColumn(i);if(l&&(l.getKeyIndex()!==null)){var m=l.getThEl();c.addClass(m,d.CLASS_HIGHLIGHTED);var k=this.getTbodyEl().rows;var j=this._oChainRender;j.add({method:function(n){if((this instanceof d)&&this._sId&&k[n.rowIndex]&&k[n.rowIndex].cells[n.cellIndex]){c.addClass(k[n.rowIndex].cells[n.cellIndex],d.CLASS_HIGHLIGHTED);}n.rowIndex++;},scope:this,iterations:k.length,argument:{rowIndex:0,cellIndex:l.getKeyIndex()},timeout:-1});this._elTbody.style.display="none";this._runRenderChain();this._elTbody.style.display="";this.fireEvent("columnHighlightEvent",{column:l});}else{}},unhighlightColumn:function(i){var l=this.getColumn(i);if(l&&(l.getKeyIndex()!==null)){var m=l.getThEl();c.removeClass(m,d.CLASS_HIGHLIGHTED);var k=this.getTbodyEl().rows;var j=this._oChainRender;j.add({method:function(n){if((this instanceof d)&&this._sId&&k[n.rowIndex]&&k[n.rowIndex].cells[n.cellIndex]){c.removeClass(k[n.rowIndex].cells[n.cellIndex],d.CLASS_HIGHLIGHTED);}n.rowIndex++;},scope:this,iterations:k.length,argument:{rowIndex:0,cellIndex:l.getKeyIndex()},timeout:-1});this._elTbody.style.display="none";
 
this._runRenderChain();this._elTbody.style.display="";this.fireEvent("columnUnhighlightEvent",{column:l});}else{}},addRow:function(o,k){if(h.isNumber(k)&&(k<0||k>this._oRecordSet.getLength())){return;}if(o&&h.isObject(o)){var m=this._oRecordSet.addRecord(o,k);if(m){var i;var j=this.get("paginator");if(j){var n=j.get("totalRecords");if(n!==e.Paginator.VALUE_UNLIMITED){j.set("totalRecords",n+1);}i=this.getRecordIndex(m);var l=(j.getPageRecords())[1];if(i<=l){this.render();}this.fireEvent("rowAddEvent",{record:m});return;}else{i=this.getRecordIndex(m);if(h.isNumber(i)){this._oChainRender.add({method:function(r){if((this instanceof d)&&this._sId){var s=r.record;var p=r.recIndex;var t=this._addTrEl(s);if(t){var q=(this._elTbody.rows[p])?this._elTbody.rows[p]:null;this._elTbody.insertBefore(t,q);if(p===0){this._setFirstRow();}if(q===null){this._setLastRow();}this._setRowStripes();this.hideTableMessage();this.fireEvent("rowAddEvent",{record:s});}}},argument:{record:m,recIndex:i},scope:this,timeout:(this.get("renderLoopSize")>0)?0:-1});this._runRenderChain();return;}}}}},addRows:function(k,n){if(h.isNumber(n)&&(n<0||n>this._oRecordSet.getLength())){return;}if(h.isArray(k)){var o=this._oRecordSet.addRecords(k,n);if(o){var s=this.getRecordIndex(o[0]);var r=this.get("paginator");if(r){var p=r.get("totalRecords");if(p!==e.Paginator.VALUE_UNLIMITED){r.set("totalRecords",p+o.length);}var q=(r.getPageRecords())[1];if(s<=q){this.render();}this.fireEvent("rowsAddEvent",{records:o});return;}else{var m=this.get("renderLoopSize");var j=s+k.length;var i=(j-s);var l=(s>=this._elTbody.rows.length);this._oChainRender.add({method:function(x){if((this instanceof d)&&this._sId){var y=x.aRecords,w=x.nCurrentRow,v=x.nCurrentRecord,t=m>0?Math.min(w+m,j):j,z=document.createDocumentFragment(),u=(this._elTbody.rows[w])?this._elTbody.rows[w]:null;for(;w<t;w++,v++){z.appendChild(this._addTrEl(y[v]));}this._elTbody.insertBefore(z,u);x.nCurrentRow=w;x.nCurrentRecord=v;}},iterations:(m>0)?Math.ceil(j/m):1,argument:{nCurrentRow:s,nCurrentRecord:0,aRecords:o},scope:this,timeout:(m>0)?0:-1});this._oChainRender.add({method:function(u){var t=u.recIndex;if(t===0){this._setFirstRow();}if(u.isLast){this._setLastRow();}this._setRowStripes();this.fireEvent("rowsAddEvent",{records:o});},argument:{recIndex:s,isLast:l},scope:this,timeout:-1});this._runRenderChain();this.hideTableMessage();return;}}}},updateRow:function(u,k){var r=u;if(!h.isNumber(r)){r=this.getRecordIndex(u);}if(h.isNumber(r)&&(r>=0)){var s=this._oRecordSet,q=s.getRecord(r);if(q){var o=this._oRecordSet.setRecord(k,r),j=this.getTrEl(q),p=q?q.getData():null;if(o){var t=this._aSelections||[],n=0,l=q.getId(),m=o.getId();for(;n<t.length;n++){if((t[n]===l)){t[n]=m;}else{if(t[n].recordId===l){t[n].recordId=m;}}}if(this._oAnchorRecord&&this._oAnchorRecord.getId()===l){this._oAnchorRecord=o;}if(this._oAnchorCell&&this._oAnchorCell.record.getId()===l){this._oAnchorCell.record=o;}this._oChainRender.add({method:function(){if((this instanceof d)&&this._sId){var v=this.get("paginator");if(v){var i=(v.getPageRecords())[0],w=(v.getPageRecords())[1];if((r>=i)||(r<=w)){this.render();}}else{if(j){this._updateTrEl(j,o);}else{this.getTbodyEl().appendChild(this._addTrEl(o));}}this.fireEvent("rowUpdateEvent",{record:o,oldData:p});}},scope:this,timeout:(this.get("renderLoopSize")>0)?0:-1});this._runRenderChain();return;}}}return;},updateRows:function(A,m){if(h.isArray(m)){var s=A,l=this._oRecordSet,o=l.getLength();if(!h.isNumber(A)){s=this.getRecordIndex(A);}if(h.isNumber(s)&&(s>=0)&&(s<l.getLength())){var E=s+m.length,B=l.getRecords(s,m.length),G=l.setRecords(m,s);if(G){var t=this._aSelections||[],D=0,C,u,x,z,y=this._oAnchorRecord?this._oAnchorRecord.getId():null,n=this._oAnchorCell?this._oAnchorCell.record.getId():null;for(;D<B.length;D++){z=B[D].getId();u=G[D];x=u.getId();for(C=0;C<t.length;C++){if((t[C]===z)){t[C]=x;}else{if(t[C].recordId===z){t[C].recordId=x;}}}if(y&&y===z){this._oAnchorRecord=u;}if(n&&n===z){this._oAnchorCell.record=u;}}var F=this.get("paginator");if(F){var r=(F.getPageRecords())[0],p=(F.getPageRecords())[1];if((s>=r)||(E<=p)){this.render();}this.fireEvent("rowsAddEvent",{newRecords:G,oldRecords:B});return;}else{var k=this.get("renderLoopSize"),v=m.length,w=(E>=o),q=(E>o);this._oChainRender.add({method:function(K){if((this instanceof d)&&this._sId){var L=K.aRecords,J=K.nCurrentRow,I=K.nDataPointer,H=k>0?Math.min(J+k,s+L.length):s+L.length;for(;J<H;J++,I++){if(q&&(J>=o)){this._elTbody.appendChild(this._addTrEl(L[I]));}else{this._updateTrEl(this._elTbody.rows[J],L[I]);}}K.nCurrentRow=J;K.nDataPointer=I;}},iterations:(k>0)?Math.ceil(v/k):1,argument:{nCurrentRow:s,aRecords:G,nDataPointer:0,isAdding:q},scope:this,timeout:(k>0)?0:-1});this._oChainRender.add({method:function(j){var i=j.recIndex;if(i===0){this._setFirstRow();}if(j.isLast){this._setLastRow();}this._setRowStripes();this.fireEvent("rowsAddEvent",{newRecords:G,oldRecords:B});},argument:{recIndex:s,isLast:w},scope:this,timeout:-1});this._runRenderChain();this.hideTableMessage();return;}}}}},deleteRow:function(s){var k=(h.isNumber(s))?s:this.getRecordIndex(s);if(h.isNumber(k)){var t=this.getRecord(k);if(t){var m=this.getTrIndex(k);var p=t.getId();var r=this._aSelections||[];for(var n=r.length-1;n>-1;n--){if((h.isString(r[n])&&(r[n]===p))||(h.isObject(r[n])&&(r[n].recordId===p))){r.splice(n,1);}}var l=this._oRecordSet.deleteRecord(k);if(l){var q=this.get("paginator");if(q){var o=q.get("totalRecords"),i=q.getPageRecords();if(o!==e.Paginator.VALUE_UNLIMITED){q.set("totalRecords",o-1);}if(!i||k<=i[1]){this.render();}this._oChainRender.add({method:function(){if((this instanceof d)&&this._sId){this.fireEvent("rowDeleteEvent",{recordIndex:k,oldData:l,trElIndex:m});}},scope:this,timeout:(this.get("renderLoopSize")>0)?0:-1});this._runRenderChain();}else{if(h.isNumber(m)){this._oChainRender.add({method:function(){if((this instanceof d)&&this._sId){var j=(k===this._oRecordSet.getLength());this._deleteTrEl(m);if(this._elTbody.rows.length>0){if(m===0){this._setFirstRow();
 
}if(j){this._setLastRow();}if(m!=this._elTbody.rows.length){this._setRowStripes(m);}}this.fireEvent("rowDeleteEvent",{recordIndex:k,oldData:l,trElIndex:m});}},scope:this,timeout:(this.get("renderLoopSize")>0)?0:-1});this._runRenderChain();return;}}}}}return null;},deleteRows:function(y,s){var l=(h.isNumber(y))?y:this.getRecordIndex(y);if(h.isNumber(l)){var z=this.getRecord(l);if(z){var m=this.getTrIndex(l);var u=z.getId();var x=this._aSelections||[];for(var q=x.length-1;q>-1;q--){if((h.isString(x[q])&&(x[q]===u))||(h.isObject(x[q])&&(x[q].recordId===u))){x.splice(q,1);}}var n=l;var w=l;if(s&&h.isNumber(s)){n=(s>0)?l+s-1:l;w=(s>0)?l:l+s+1;s=(s>0)?s:s*-1;if(w<0){w=0;s=n-w+1;}}else{s=1;}var p=this._oRecordSet.deleteRecords(w,s);if(p){var v=this.get("paginator"),r=this.get("renderLoopSize");if(v){var t=v.get("totalRecords"),k=v.getPageRecords();if(t!==e.Paginator.VALUE_UNLIMITED){v.set("totalRecords",t-p.length);}if(!k||w<=k[1]){this.render();}this._oChainRender.add({method:function(j){if((this instanceof d)&&this._sId){this.fireEvent("rowsDeleteEvent",{recordIndex:w,oldData:p,count:s});}},scope:this,timeout:(r>0)?0:-1});this._runRenderChain();return;}else{if(h.isNumber(m)){var o=w;var i=s;this._oChainRender.add({method:function(B){if((this instanceof d)&&this._sId){var A=B.nCurrentRow,j=(r>0)?(Math.max(A-r,o)-1):o-1;for(;A>j;--A){this._deleteTrEl(A);}B.nCurrentRow=A;}},iterations:(r>0)?Math.ceil(s/r):1,argument:{nCurrentRow:n},scope:this,timeout:(r>0)?0:-1});this._oChainRender.add({method:function(){if(this._elTbody.rows.length>0){this._setFirstRow();this._setLastRow();this._setRowStripes();}this.fireEvent("rowsDeleteEvent",{recordIndex:w,oldData:p,count:s});},scope:this,timeout:-1});this._runRenderChain();return;}}}}}return null;},formatCell:function(j,l,m){if(!l){l=this.getRecord(j);}if(!m){m=this.getColumn(this.getCellIndex(j.parentNode));}if(l&&m){var i=m.field;var n=l.getData(i);var k=typeof m.formatter==="function"?m.formatter:d.Formatter[m.formatter+""]||d.Formatter.defaultFormatter;if(k){k.call(this,j,l,m,n);}else{j.innerHTML=n;}this.fireEvent("cellFormatEvent",{record:l,column:m,key:m.key,el:j});}else{}},updateCell:function(k,m,o,j){m=(m instanceof YAHOO.widget.Column)?m:this.getColumn(m);if(m&&m.getField()&&(k instanceof YAHOO.widget.Record)){var l=m.getField(),n=k.getData(l);this._oRecordSet.updateRecordValue(k,l,o);var i=this.getTdEl({record:k,column:m});if(i){this._oChainRender.add({method:function(){if((this instanceof d)&&this._sId){this.formatCell(i.firstChild,k,m);this.fireEvent("cellUpdateEvent",{record:k,column:m,oldData:n});}},scope:this,timeout:(this.get("renderLoopSize")>0)?0:-1});if(!j){this._runRenderChain();}}else{this.fireEvent("cellUpdateEvent",{record:k,column:m,oldData:n});}}},_updatePaginator:function(j){var i=this.get("paginator");if(i&&j!==i){i.unsubscribe("changeRequest",this.onPaginatorChangeRequest,this,true);}if(j){j.subscribe("changeRequest",this.onPaginatorChangeRequest,this,true);}},_handlePaginatorChange:function(l){if(l.prevValue===l.newValue){return;}var n=l.newValue,m=l.prevValue,k=this._defaultPaginatorContainers();if(m){if(m.getContainerNodes()[0]==k[0]){m.set("containers",[]);}m.destroy();if(k[0]){if(n&&!n.getContainerNodes().length){n.set("containers",k);}else{for(var j=k.length-1;j>=0;--j){if(k[j]){k[j].parentNode.removeChild(k[j]);}}}}}if(!this._bInit){this.render();}if(n){this.renderPaginator();}},_defaultPaginatorContainers:function(l){var j=this._sId+"-paginator0",k=this._sId+"-paginator1",i=c.get(j),m=c.get(k);if(l&&(!i||!m)){if(!i){i=document.createElement("div");i.id=j;c.addClass(i,d.CLASS_PAGINATOR);this._elContainer.insertBefore(i,this._elContainer.firstChild);}if(!m){m=document.createElement("div");m.id=k;c.addClass(m,d.CLASS_PAGINATOR);this._elContainer.appendChild(m);}}return[i,m];},_destroyPaginator:function(){var i=this.get("paginator");if(i){i.destroy();}},renderPaginator:function(){var i=this.get("paginator");if(!i){return;}if(!i.getContainerNodes().length){i.set("containers",this._defaultPaginatorContainers(true));}i.render();},doBeforePaginatorChange:function(i){this.showTableMessage(this.get("MSG_LOADING"),d.CLASS_LOADING);return true;},onPaginatorChangeRequest:function(l){var j=this.doBeforePaginatorChange(l);if(j){if(this.get("dynamicData")){var i=this.getState();i.pagination=l;var k=this.get("generateRequest")(i,this);this.unselectAllRows();this.unselectAllCells();var m={success:this.onDataReturnSetRows,failure:this.onDataReturnSetRows,argument:i,scope:this};this._oDataSource.sendRequest(k,m);}else{l.paginator.setStartIndex(l.recordOffset,true);l.paginator.setRowsPerPage(l.rowsPerPage,true);this.render();}}else{}},_elLastHighlightedTd:null,_aSelections:null,_oAnchorRecord:null,_oAnchorCell:null,_unselectAllTrEls:function(){var i=c.getElementsByClassName(d.CLASS_SELECTED,"tr",this._elTbody);c.removeClass(i,d.CLASS_SELECTED);},_getSelectionTrigger:function(){var l=this.get("selectionMode");var k={};var o,i,j,n,m;if((l=="cellblock")||(l=="cellrange")||(l=="singlecell")){o=this.getLastSelectedCell();if(!o){return null;}else{i=this.getRecord(o.recordId);j=this.getRecordIndex(i);n=this.getTrEl(i);m=this.getTrIndex(n);if(m===null){return null;}else{k.record=i;k.recordIndex=j;k.el=this.getTdEl(o);k.trIndex=m;k.column=this.getColumn(o.columnKey);k.colKeyIndex=k.column.getKeyIndex();k.cell=o;return k;}}}else{i=this.getLastSelectedRecord();if(!i){return null;}else{i=this.getRecord(i);j=this.getRecordIndex(i);n=this.getTrEl(i);m=this.getTrIndex(n);if(m===null){return null;}else{k.record=i;k.recordIndex=j;k.el=n;k.trIndex=m;return k;}}}},_getSelectionAnchor:function(k){var j=this.get("selectionMode");var l={};var m,o,i;if((j=="cellblock")||(j=="cellrange")||(j=="singlecell")){var n=this._oAnchorCell;if(!n){if(k){n=this._oAnchorCell=k.cell;}else{return null;}}m=this._oAnchorCell.record;o=this._oRecordSet.getRecordIndex(m);i=this.getTrIndex(m);if(i===null){if(o<this.getRecordIndex(this.getFirstTrEl())){i=0;}else{i=this.getRecordIndex(this.getLastTrEl());
 
}}l.record=m;l.recordIndex=o;l.trIndex=i;l.column=this._oAnchorCell.column;l.colKeyIndex=l.column.getKeyIndex();l.cell=n;return l;}else{m=this._oAnchorRecord;if(!m){if(k){m=this._oAnchorRecord=k.record;}else{return null;}}o=this.getRecordIndex(m);i=this.getTrIndex(m);if(i===null){if(o<this.getRecordIndex(this.getFirstTrEl())){i=0;}else{i=this.getRecordIndex(this.getLastTrEl());}}l.record=m;l.recordIndex=o;l.trIndex=i;return l;}},_handleStandardSelectionByMouse:function(k){var j=k.target;var m=this.getTrEl(j);if(m){var p=k.event;var s=p.shiftKey;var o=p.ctrlKey||((navigator.userAgent.toLowerCase().indexOf("mac")!=-1)&&p.metaKey);var r=this.getRecord(m);var l=this._oRecordSet.getRecordIndex(r);var q=this._getSelectionAnchor();var n;if(s&&o){if(q){if(this.isSelected(q.record)){if(q.recordIndex<l){for(n=q.recordIndex+1;n<=l;n++){if(!this.isSelected(n)){this.selectRow(n);}}}else{for(n=q.recordIndex-1;n>=l;n--){if(!this.isSelected(n)){this.selectRow(n);}}}}else{if(q.recordIndex<l){for(n=q.recordIndex+1;n<=l-1;n++){if(this.isSelected(n)){this.unselectRow(n);}}}else{for(n=l+1;n<=q.recordIndex-1;n++){if(this.isSelected(n)){this.unselectRow(n);}}}this.selectRow(r);}}else{this._oAnchorRecord=r;if(this.isSelected(r)){this.unselectRow(r);}else{this.selectRow(r);}}}else{if(s){this.unselectAllRows();if(q){if(q.recordIndex<l){for(n=q.recordIndex;n<=l;n++){this.selectRow(n);}}else{for(n=q.recordIndex;n>=l;n--){this.selectRow(n);}}}else{this._oAnchorRecord=r;this.selectRow(r);}}else{if(o){this._oAnchorRecord=r;if(this.isSelected(r)){this.unselectRow(r);}else{this.selectRow(r);}}else{this._handleSingleSelectionByMouse(k);return;}}}}},_handleStandardSelectionByKey:function(m){var i=g.getCharCode(m);if((i==38)||(i==40)){var k=m.shiftKey;var j=this._getSelectionTrigger();if(!j){return null;}g.stopEvent(m);var l=this._getSelectionAnchor(j);if(k){if((i==40)&&(l.recordIndex<=j.trIndex)){this.selectRow(this.getNextTrEl(j.el));}else{if((i==38)&&(l.recordIndex>=j.trIndex)){this.selectRow(this.getPreviousTrEl(j.el));}else{this.unselectRow(j.el);}}}else{this._handleSingleSelectionByKey(m);}}},_handleSingleSelectionByMouse:function(k){var l=k.target;var j=this.getTrEl(l);if(j){var i=this.getRecord(j);this._oAnchorRecord=i;this.unselectAllRows();this.selectRow(i);}},_handleSingleSelectionByKey:function(l){var i=g.getCharCode(l);if((i==38)||(i==40)){var j=this._getSelectionTrigger();if(!j){return null;}g.stopEvent(l);var k;if(i==38){k=this.getPreviousTrEl(j.el);if(k===null){k=this.getFirstTrEl();}}else{if(i==40){k=this.getNextTrEl(j.el);if(k===null){k=this.getLastTrEl();}}}this.unselectAllRows();this.selectRow(k);this._oAnchorRecord=this.getRecord(k);}},_handleCellBlockSelectionByMouse:function(A){var B=A.target;var l=this.getTdEl(B);if(l){var z=A.event;var q=z.shiftKey;var m=z.ctrlKey||((navigator.userAgent.toLowerCase().indexOf("mac")!=-1)&&z.metaKey);var s=this.getTrEl(l);var r=this.getTrIndex(s);var v=this.getColumn(l);var w=v.getKeyIndex();var u=this.getRecord(s);var D=this._oRecordSet.getRecordIndex(u);var p={record:u,column:v};var t=this._getSelectionAnchor();var o=this.getTbodyEl().rows;var n,k,C,y,x;if(q&&m){if(t){if(this.isSelected(t.cell)){if(t.recordIndex===D){if(t.colKeyIndex<w){for(y=t.colKeyIndex+1;y<=w;y++){this.selectCell(s.cells[y]);}}else{if(w<t.colKeyIndex){for(y=w;y<t.colKeyIndex;y++){this.selectCell(s.cells[y]);}}}}else{if(t.recordIndex<D){n=Math.min(t.colKeyIndex,w);k=Math.max(t.colKeyIndex,w);for(y=t.trIndex;y<=r;y++){for(x=n;x<=k;x++){this.selectCell(o[y].cells[x]);}}}else{n=Math.min(t.trIndex,w);k=Math.max(t.trIndex,w);for(y=t.trIndex;y>=r;y--){for(x=k;x>=n;x--){this.selectCell(o[y].cells[x]);}}}}}else{if(t.recordIndex===D){if(t.colKeyIndex<w){for(y=t.colKeyIndex+1;y<w;y++){this.unselectCell(s.cells[y]);}}else{if(w<t.colKeyIndex){for(y=w+1;y<t.colKeyIndex;y++){this.unselectCell(s.cells[y]);}}}}if(t.recordIndex<D){for(y=t.trIndex;y<=r;y++){C=o[y];for(x=0;x<C.cells.length;x++){if(C.sectionRowIndex===t.trIndex){if(x>t.colKeyIndex){this.unselectCell(C.cells[x]);}}else{if(C.sectionRowIndex===r){if(x<w){this.unselectCell(C.cells[x]);}}else{this.unselectCell(C.cells[x]);}}}}}else{for(y=r;y<=t.trIndex;y++){C=o[y];for(x=0;x<C.cells.length;x++){if(C.sectionRowIndex==r){if(x>w){this.unselectCell(C.cells[x]);}}else{if(C.sectionRowIndex==t.trIndex){if(x<t.colKeyIndex){this.unselectCell(C.cells[x]);}}else{this.unselectCell(C.cells[x]);}}}}}this.selectCell(l);}}else{this._oAnchorCell=p;if(this.isSelected(p)){this.unselectCell(p);}else{this.selectCell(p);}}}else{if(q){this.unselectAllCells();if(t){if(t.recordIndex===D){if(t.colKeyIndex<w){for(y=t.colKeyIndex;y<=w;y++){this.selectCell(s.cells[y]);}}else{if(w<t.colKeyIndex){for(y=w;y<=t.colKeyIndex;y++){this.selectCell(s.cells[y]);}}}}else{if(t.recordIndex<D){n=Math.min(t.colKeyIndex,w);k=Math.max(t.colKeyIndex,w);for(y=t.trIndex;y<=r;y++){for(x=n;x<=k;x++){this.selectCell(o[y].cells[x]);}}}else{n=Math.min(t.colKeyIndex,w);k=Math.max(t.colKeyIndex,w);for(y=r;y<=t.trIndex;y++){for(x=n;x<=k;x++){this.selectCell(o[y].cells[x]);}}}}}else{this._oAnchorCell=p;this.selectCell(p);}}else{if(m){this._oAnchorCell=p;if(this.isSelected(p)){this.unselectCell(p);}else{this.selectCell(p);}}else{this._handleSingleCellSelectionByMouse(A);}}}}},_handleCellBlockSelectionByKey:function(o){var j=g.getCharCode(o);var t=o.shiftKey;if((j==9)||!t){this._handleSingleCellSelectionByKey(o);return;}if((j>36)&&(j<41)){var u=this._getSelectionTrigger();if(!u){return null;}g.stopEvent(o);var r=this._getSelectionAnchor(u);var k,s,l,q,m;var p=this.getTbodyEl().rows;var n=u.el.parentNode;if(j==40){if(r.recordIndex<=u.recordIndex){m=this.getNextTrEl(u.el);if(m){s=r.colKeyIndex;l=u.colKeyIndex;if(s>l){for(k=s;k>=l;k--){q=m.cells[k];this.selectCell(q);}}else{for(k=s;k<=l;k++){q=m.cells[k];this.selectCell(q);}}}}else{s=Math.min(r.colKeyIndex,u.colKeyIndex);l=Math.max(r.colKeyIndex,u.colKeyIndex);for(k=s;k<=l;k++){this.unselectCell(n.cells[k]);}}}else{if(j==38){if(r.recordIndex>=u.recordIndex){m=this.getPreviousTrEl(u.el);
 
if(m){s=r.colKeyIndex;l=u.colKeyIndex;if(s>l){for(k=s;k>=l;k--){q=m.cells[k];this.selectCell(q);}}else{for(k=s;k<=l;k++){q=m.cells[k];this.selectCell(q);}}}}else{s=Math.min(r.colKeyIndex,u.colKeyIndex);l=Math.max(r.colKeyIndex,u.colKeyIndex);for(k=s;k<=l;k++){this.unselectCell(n.cells[k]);}}}else{if(j==39){if(r.colKeyIndex<=u.colKeyIndex){if(u.colKeyIndex<n.cells.length-1){s=r.trIndex;l=u.trIndex;if(s>l){for(k=s;k>=l;k--){q=p[k].cells[u.colKeyIndex+1];this.selectCell(q);}}else{for(k=s;k<=l;k++){q=p[k].cells[u.colKeyIndex+1];this.selectCell(q);}}}}else{s=Math.min(r.trIndex,u.trIndex);l=Math.max(r.trIndex,u.trIndex);for(k=s;k<=l;k++){this.unselectCell(p[k].cells[u.colKeyIndex]);}}}else{if(j==37){if(r.colKeyIndex>=u.colKeyIndex){if(u.colKeyIndex>0){s=r.trIndex;l=u.trIndex;if(s>l){for(k=s;k>=l;k--){q=p[k].cells[u.colKeyIndex-1];this.selectCell(q);}}else{for(k=s;k<=l;k++){q=p[k].cells[u.colKeyIndex-1];this.selectCell(q);}}}}else{s=Math.min(r.trIndex,u.trIndex);l=Math.max(r.trIndex,u.trIndex);for(k=s;k<=l;k++){this.unselectCell(p[k].cells[u.colKeyIndex]);}}}}}}}},_handleCellRangeSelectionByMouse:function(y){var z=y.target;var k=this.getTdEl(z);if(k){var x=y.event;var o=x.shiftKey;var l=x.ctrlKey||((navigator.userAgent.toLowerCase().indexOf("mac")!=-1)&&x.metaKey);var q=this.getTrEl(k);var p=this.getTrIndex(q);var t=this.getColumn(k);var u=t.getKeyIndex();var s=this.getRecord(q);var B=this._oRecordSet.getRecordIndex(s);var n={record:s,column:t};var r=this._getSelectionAnchor();var m=this.getTbodyEl().rows;var A,w,v;if(o&&l){if(r){if(this.isSelected(r.cell)){if(r.recordIndex===B){if(r.colKeyIndex<u){for(w=r.colKeyIndex+1;w<=u;w++){this.selectCell(q.cells[w]);}}else{if(u<r.colKeyIndex){for(w=u;w<r.colKeyIndex;w++){this.selectCell(q.cells[w]);}}}}else{if(r.recordIndex<B){for(w=r.colKeyIndex+1;w<q.cells.length;w++){this.selectCell(q.cells[w]);}for(w=r.trIndex+1;w<p;w++){for(v=0;v<m[w].cells.length;v++){this.selectCell(m[w].cells[v]);}}for(w=0;w<=u;w++){this.selectCell(q.cells[w]);}}else{for(w=u;w<q.cells.length;w++){this.selectCell(q.cells[w]);}for(w=p+1;w<r.trIndex;w++){for(v=0;v<m[w].cells.length;v++){this.selectCell(m[w].cells[v]);}}for(w=0;w<r.colKeyIndex;w++){this.selectCell(q.cells[w]);}}}}else{if(r.recordIndex===B){if(r.colKeyIndex<u){for(w=r.colKeyIndex+1;w<u;w++){this.unselectCell(q.cells[w]);}}else{if(u<r.colKeyIndex){for(w=u+1;w<r.colKeyIndex;w++){this.unselectCell(q.cells[w]);}}}}if(r.recordIndex<B){for(w=r.trIndex;w<=p;w++){A=m[w];for(v=0;v<A.cells.length;v++){if(A.sectionRowIndex===r.trIndex){if(v>r.colKeyIndex){this.unselectCell(A.cells[v]);}}else{if(A.sectionRowIndex===p){if(v<u){this.unselectCell(A.cells[v]);}}else{this.unselectCell(A.cells[v]);}}}}}else{for(w=p;w<=r.trIndex;w++){A=m[w];for(v=0;v<A.cells.length;v++){if(A.sectionRowIndex==p){if(v>u){this.unselectCell(A.cells[v]);}}else{if(A.sectionRowIndex==r.trIndex){if(v<r.colKeyIndex){this.unselectCell(A.cells[v]);}}else{this.unselectCell(A.cells[v]);}}}}}this.selectCell(k);}}else{this._oAnchorCell=n;if(this.isSelected(n)){this.unselectCell(n);}else{this.selectCell(n);}}}else{if(o){this.unselectAllCells();if(r){if(r.recordIndex===B){if(r.colKeyIndex<u){for(w=r.colKeyIndex;w<=u;w++){this.selectCell(q.cells[w]);}}else{if(u<r.colKeyIndex){for(w=u;w<=r.colKeyIndex;w++){this.selectCell(q.cells[w]);}}}}else{if(r.recordIndex<B){for(w=r.trIndex;w<=p;w++){A=m[w];for(v=0;v<A.cells.length;v++){if(A.sectionRowIndex==r.trIndex){if(v>=r.colKeyIndex){this.selectCell(A.cells[v]);}}else{if(A.sectionRowIndex==p){if(v<=u){this.selectCell(A.cells[v]);}}else{this.selectCell(A.cells[v]);}}}}}else{for(w=p;w<=r.trIndex;w++){A=m[w];for(v=0;v<A.cells.length;v++){if(A.sectionRowIndex==p){if(v>=u){this.selectCell(A.cells[v]);}}else{if(A.sectionRowIndex==r.trIndex){if(v<=r.colKeyIndex){this.selectCell(A.cells[v]);}}else{this.selectCell(A.cells[v]);}}}}}}}else{this._oAnchorCell=n;this.selectCell(n);}}else{if(l){this._oAnchorCell=n;if(this.isSelected(n)){this.unselectCell(n);}else{this.selectCell(n);}}else{this._handleSingleCellSelectionByMouse(y);}}}}},_handleCellRangeSelectionByKey:function(n){var j=g.getCharCode(n);var r=n.shiftKey;if((j==9)||!r){this._handleSingleCellSelectionByKey(n);return;}if((j>36)&&(j<41)){var s=this._getSelectionTrigger();if(!s){return null;}g.stopEvent(n);var q=this._getSelectionAnchor(s);var k,l,p;var o=this.getTbodyEl().rows;var m=s.el.parentNode;if(j==40){l=this.getNextTrEl(s.el);if(q.recordIndex<=s.recordIndex){for(k=s.colKeyIndex+1;k<m.cells.length;k++){p=m.cells[k];this.selectCell(p);}if(l){for(k=0;k<=s.colKeyIndex;k++){p=l.cells[k];this.selectCell(p);}}}else{for(k=s.colKeyIndex;k<m.cells.length;k++){this.unselectCell(m.cells[k]);}if(l){for(k=0;k<s.colKeyIndex;k++){this.unselectCell(l.cells[k]);}}}}else{if(j==38){l=this.getPreviousTrEl(s.el);if(q.recordIndex>=s.recordIndex){for(k=s.colKeyIndex-1;k>-1;k--){p=m.cells[k];this.selectCell(p);}if(l){for(k=m.cells.length-1;k>=s.colKeyIndex;k--){p=l.cells[k];this.selectCell(p);}}}else{for(k=s.colKeyIndex;k>-1;k--){this.unselectCell(m.cells[k]);}if(l){for(k=m.cells.length-1;k>s.colKeyIndex;k--){this.unselectCell(l.cells[k]);}}}}else{if(j==39){l=this.getNextTrEl(s.el);if(q.recordIndex<s.recordIndex){if(s.colKeyIndex<m.cells.length-1){p=m.cells[s.colKeyIndex+1];this.selectCell(p);}else{if(l){p=l.cells[0];this.selectCell(p);}}}else{if(q.recordIndex>s.recordIndex){this.unselectCell(m.cells[s.colKeyIndex]);if(s.colKeyIndex<m.cells.length-1){}else{}}else{if(q.colKeyIndex<=s.colKeyIndex){if(s.colKeyIndex<m.cells.length-1){p=m.cells[s.colKeyIndex+1];this.selectCell(p);}else{if(s.trIndex<o.length-1){p=l.cells[0];this.selectCell(p);}}}else{this.unselectCell(m.cells[s.colKeyIndex]);}}}}else{if(j==37){l=this.getPreviousTrEl(s.el);if(q.recordIndex<s.recordIndex){this.unselectCell(m.cells[s.colKeyIndex]);if(s.colKeyIndex>0){}else{}}else{if(q.recordIndex>s.recordIndex){if(s.colKeyIndex>0){p=m.cells[s.colKeyIndex-1];this.selectCell(p);}else{if(s.trIndex>0){p=l.cells[l.cells.length-1];this.selectCell(p);
 
}}}else{if(q.colKeyIndex>=s.colKeyIndex){if(s.colKeyIndex>0){p=m.cells[s.colKeyIndex-1];this.selectCell(p);}else{if(s.trIndex>0){p=l.cells[l.cells.length-1];this.selectCell(p);}}}else{this.unselectCell(m.cells[s.colKeyIndex]);if(s.colKeyIndex>0){}else{}}}}}}}}}},_handleSingleCellSelectionByMouse:function(n){var o=n.target;var k=this.getTdEl(o);if(k){var j=this.getTrEl(k);var i=this.getRecord(j);var m=this.getColumn(k);var l={record:i,column:m};this._oAnchorCell=l;this.unselectAllCells();this.selectCell(l);}},_handleSingleCellSelectionByKey:function(m){var i=g.getCharCode(m);if((i==9)||((i>36)&&(i<41))){var k=m.shiftKey;var j=this._getSelectionTrigger();if(!j){return null;}var l;if(i==40){l=this.getBelowTdEl(j.el);if(l===null){l=j.el;}}else{if(i==38){l=this.getAboveTdEl(j.el);if(l===null){l=j.el;}}else{if((i==39)||(!k&&(i==9))){l=this.getNextTdEl(j.el);if(l===null){return;}}else{if((i==37)||(k&&(i==9))){l=this.getPreviousTdEl(j.el);if(l===null){return;}}}}}g.stopEvent(m);this.unselectAllCells();this.selectCell(l);this._oAnchorCell={record:this.getRecord(l),column:this.getColumn(l)};}},getSelectedTrEls:function(){return c.getElementsByClassName(d.CLASS_SELECTED,"tr",this._elTbody);},selectRow:function(p){var o,i;if(p instanceof YAHOO.widget.Record){o=this._oRecordSet.getRecord(p);i=this.getTrEl(o);}else{if(h.isNumber(p)){o=this.getRecord(p);i=this.getTrEl(o);}else{i=this.getTrEl(p);o=this.getRecord(i);}}if(o){var n=this._aSelections||[];var m=o.getId();var l=-1;if(n.indexOf){l=n.indexOf(m);}else{for(var k=n.length-1;k>-1;k--){if(n[k]===m){l=k;break;}}}if(l>-1){n.splice(l,1);}n.push(m);this._aSelections=n;if(!this._oAnchorRecord){this._oAnchorRecord=o;}if(i){c.addClass(i,d.CLASS_SELECTED);}this.fireEvent("rowSelectEvent",{record:o,el:i});}else{}},unselectRow:function(p){var i=this.getTrEl(p);var o;if(p instanceof YAHOO.widget.Record){o=this._oRecordSet.getRecord(p);}else{if(h.isNumber(p)){o=this.getRecord(p);}else{o=this.getRecord(i);}}if(o){var n=this._aSelections||[];var m=o.getId();var l=-1;if(n.indexOf){l=n.indexOf(m);}else{for(var k=n.length-1;k>-1;k--){if(n[k]===m){l=k;break;}}}if(l>-1){n.splice(l,1);this._aSelections=n;c.removeClass(i,d.CLASS_SELECTED);this.fireEvent("rowUnselectEvent",{record:o,el:i});return;}}},unselectAllRows:function(){var k=this._aSelections||[],m,l=[];for(var i=k.length-1;i>-1;i--){if(h.isString(k[i])){m=k.splice(i,1);l[l.length]=this.getRecord(h.isArray(m)?m[0]:m);}}this._aSelections=k;this._unselectAllTrEls();this.fireEvent("unselectAllRowsEvent",{records:l});},_unselectAllTdEls:function(){var i=c.getElementsByClassName(d.CLASS_SELECTED,"td",this._elTbody);c.removeClass(i,d.CLASS_SELECTED);},getSelectedTdEls:function(){return c.getElementsByClassName(d.CLASS_SELECTED,"td",this._elTbody);},selectCell:function(i){var p=this.getTdEl(i);if(p){var o=this.getRecord(p);var q=this.getColumn(this.getCellIndex(p));var m=q.getKey();if(o&&m){var n=this._aSelections||[];var l=o.getId();for(var k=n.length-1;k>-1;k--){if((n[k].recordId===l)&&(n[k].columnKey===m)){n.splice(k,1);break;}}n.push({recordId:l,columnKey:m});this._aSelections=n;if(!this._oAnchorCell){this._oAnchorCell={record:o,column:q};}c.addClass(p,d.CLASS_SELECTED);this.fireEvent("cellSelectEvent",{record:o,column:q,key:m,el:p});return;}}},unselectCell:function(i){var o=this.getTdEl(i);if(o){var n=this.getRecord(o);var p=this.getColumn(this.getCellIndex(o));var l=p.getKey();if(n&&l){var m=this._aSelections||[];var q=n.getId();for(var k=m.length-1;k>-1;k--){if((m[k].recordId===q)&&(m[k].columnKey===l)){m.splice(k,1);this._aSelections=m;c.removeClass(o,d.CLASS_SELECTED);this.fireEvent("cellUnselectEvent",{record:n,column:p,key:l,el:o});return;}}}}},unselectAllCells:function(){var k=this._aSelections||[];for(var i=k.length-1;i>-1;i--){if(h.isObject(k[i])){k.splice(i,1);}}this._aSelections=k;this._unselectAllTdEls();this.fireEvent("unselectAllCellsEvent");},isSelected:function(p){if(p&&(p.ownerDocument==document)){return(c.hasClass(this.getTdEl(p),d.CLASS_SELECTED)||c.hasClass(this.getTrEl(p),d.CLASS_SELECTED));}else{var n,k,i;var m=this._aSelections;if(m&&m.length>0){if(p instanceof YAHOO.widget.Record){n=p;}else{if(h.isNumber(p)){n=this.getRecord(p);}}if(n){k=n.getId();if(m.indexOf){if(m.indexOf(k)>-1){return true;}}else{for(i=m.length-1;i>-1;i--){if(m[i]===k){return true;}}}}else{if(p.record&&p.column){k=p.record.getId();var l=p.column.getKey();for(i=m.length-1;i>-1;i--){if((m[i].recordId===k)&&(m[i].columnKey===l)){return true;}}}}}}return false;},getSelectedRows:function(){var i=[];var l=this._aSelections||[];for(var k=0;k<l.length;k++){if(h.isString(l[k])){i.push(l[k]);}}return i;},getSelectedCells:function(){var k=[];var l=this._aSelections||[];for(var i=0;i<l.length;i++){if(l[i]&&h.isObject(l[i])){k.push(l[i]);}}return k;},getLastSelectedRecord:function(){var k=this._aSelections;if(k&&k.length>0){for(var j=k.length-1;j>-1;j--){if(h.isString(k[j])){return k[j];}}}},getLastSelectedCell:function(){var k=this._aSelections;if(k&&k.length>0){for(var j=k.length-1;j>-1;j--){if(k[j].recordId&&k[j].columnKey){return k[j];}}}},highlightRow:function(k){var i=this.getTrEl(k);if(i){var j=this.getRecord(i);c.addClass(i,d.CLASS_HIGHLIGHTED);this.fireEvent("rowHighlightEvent",{record:j,el:i});return;}},unhighlightRow:function(k){var i=this.getTrEl(k);if(i){var j=this.getRecord(i);c.removeClass(i,d.CLASS_HIGHLIGHTED);this.fireEvent("rowUnhighlightEvent",{record:j,el:i});return;}},highlightCell:function(i){var l=this.getTdEl(i);if(l){if(this._elLastHighlightedTd){this.unhighlightCell(this._elLastHighlightedTd);}var k=this.getRecord(l);var m=this.getColumn(this.getCellIndex(l));var j=m.getKey();c.addClass(l,d.CLASS_HIGHLIGHTED);this._elLastHighlightedTd=l;this.fireEvent("cellHighlightEvent",{record:k,column:m,key:j,el:l});return;}},unhighlightCell:function(i){var k=this.getTdEl(i);if(k){var j=this.getRecord(k);c.removeClass(k,d.CLASS_HIGHLIGHTED);this._elLastHighlightedTd=null;this.fireEvent("cellUnhighlightEvent",{record:j,column:this.getColumn(this.getCellIndex(k)),key:this.getColumn(this.getCellIndex(k)).getKey(),el:k});
 
return;}},addCellEditor:function(j,i){j.editor=i;j.editor.subscribe("showEvent",this._onEditorShowEvent,this,true);j.editor.subscribe("keydownEvent",this._onEditorKeydownEvent,this,true);j.editor.subscribe("revertEvent",this._onEditorRevertEvent,this,true);j.editor.subscribe("saveEvent",this._onEditorSaveEvent,this,true);j.editor.subscribe("cancelEvent",this._onEditorCancelEvent,this,true);j.editor.subscribe("blurEvent",this._onEditorBlurEvent,this,true);j.editor.subscribe("blockEvent",this._onEditorBlockEvent,this,true);j.editor.subscribe("unblockEvent",this._onEditorUnblockEvent,this,true);},getCellEditor:function(){return this._oCellEditor;},showCellEditor:function(p,q,l){p=this.getTdEl(p);if(p){l=this.getColumn(p);if(l&&l.editor){var j=this._oCellEditor;if(j){if(this._oCellEditor.cancel){this._oCellEditor.cancel();}else{if(j.isActive){this.cancelCellEditor();}}}if(l.editor instanceof YAHOO.widget.BaseCellEditor){j=l.editor;var n=j.attach(this,p);if(n){j.render();j.move();n=this.doBeforeShowCellEditor(j);if(n){j.show();this._oCellEditor=j;}}}else{if(!q||!(q instanceof YAHOO.widget.Record)){q=this.getRecord(p);}if(!l||!(l instanceof YAHOO.widget.Column)){l=this.getColumn(p);}if(q&&l){if(!this._oCellEditor||this._oCellEditor.container){this._initCellEditorEl();}j=this._oCellEditor;j.cell=p;j.record=q;j.column=l;j.validator=(l.editorOptions&&h.isFunction(l.editorOptions.validator))?l.editorOptions.validator:null;j.value=q.getData(l.key);j.defaultValue=null;var k=j.container;var o=c.getX(p);var m=c.getY(p);if(isNaN(o)||isNaN(m)){o=p.offsetLeft+c.getX(this._elTbody.parentNode)-this._elTbody.scrollLeft;m=p.offsetTop+c.getY(this._elTbody.parentNode)-this._elTbody.scrollTop+this._elThead.offsetHeight;}k.style.left=o+"px";k.style.top=m+"px";this.doBeforeShowCellEditor(this._oCellEditor);k.style.display="";g.addListener(k,"keydown",function(s,r){if((s.keyCode==27)){r.cancelCellEditor();r.focusTbodyEl();}else{r.fireEvent("editorKeydownEvent",{editor:r._oCellEditor,event:s});}},this);var i;if(h.isString(l.editor)){switch(l.editor){case"checkbox":i=d.editCheckbox;break;case"date":i=d.editDate;break;case"dropdown":i=d.editDropdown;break;case"radio":i=d.editRadio;break;case"textarea":i=d.editTextarea;break;case"textbox":i=d.editTextbox;break;default:i=null;}}else{if(h.isFunction(l.editor)){i=l.editor;}}if(i){i(this._oCellEditor,this);if(!l.editorOptions||!l.editorOptions.disableBtns){this.showCellEditorBtns(k);}j.isActive=true;this.fireEvent("editorShowEvent",{editor:j});return;}}}}}},_initCellEditorEl:function(){var i=document.createElement("div");i.id=this._sId+"-celleditor";i.style.display="none";i.tabIndex=0;c.addClass(i,d.CLASS_EDITOR);var k=c.getFirstChild(document.body);if(k){i=c.insertBefore(i,k);}else{i=document.body.appendChild(i);}var j={};j.container=i;j.value=null;j.isActive=false;this._oCellEditor=j;},doBeforeShowCellEditor:function(i){return true;},saveCellEditor:function(){if(this._oCellEditor){if(this._oCellEditor.save){this._oCellEditor.save();}else{if(this._oCellEditor.isActive){var i=this._oCellEditor.value;var j=this._oCellEditor.record.getData(this._oCellEditor.column.key);if(this._oCellEditor.validator){i=this._oCellEditor.value=this._oCellEditor.validator.call(this,i,j,this._oCellEditor);if(i===null){this.resetCellEditor();this.fireEvent("editorRevertEvent",{editor:this._oCellEditor,oldData:j,newData:i});return;}}this._oRecordSet.updateRecordValue(this._oCellEditor.record,this._oCellEditor.column.key,this._oCellEditor.value);this.formatCell(this._oCellEditor.cell.firstChild,this._oCellEditor.record,this._oCellEditor.column);this._oChainRender.add({method:function(){this.validateColumnWidths();},scope:this});this._oChainRender.run();this.resetCellEditor();this.fireEvent("editorSaveEvent",{editor:this._oCellEditor,oldData:j,newData:i});}}}},cancelCellEditor:function(){if(this._oCellEditor){if(this._oCellEditor.cancel){this._oCellEditor.cancel();}else{if(this._oCellEditor.isActive){this.resetCellEditor();this.fireEvent("editorCancelEvent",{editor:this._oCellEditor});}}}},destroyCellEditor:function(){if(this._oCellEditor){this._oCellEditor.destroy();this._oCellEditor=null;}},_onEditorShowEvent:function(i){this.fireEvent("editorShowEvent",i);},_onEditorKeydownEvent:function(i){this.fireEvent("editorKeydownEvent",i);},_onEditorRevertEvent:function(i){this.fireEvent("editorRevertEvent",i);},_onEditorSaveEvent:function(i){this.fireEvent("editorSaveEvent",i);},_onEditorCancelEvent:function(i){this.fireEvent("editorCancelEvent",i);},_onEditorBlurEvent:function(i){this.fireEvent("editorBlurEvent",i);},_onEditorBlockEvent:function(i){this.fireEvent("editorBlockEvent",i);},_onEditorUnblockEvent:function(i){this.fireEvent("editorUnblockEvent",i);},onEditorBlurEvent:function(i){if(i.editor.disableBtns){if(i.editor.save){i.editor.save();}}else{if(i.editor.cancel){i.editor.cancel();}}},onEditorBlockEvent:function(i){this.disable();},onEditorUnblockEvent:function(i){this.undisable();},doBeforeLoadData:function(i,j,k){return true;},onEventSortColumn:function(k){var i=k.event;var m=k.target;var j=this.getThEl(m)||this.getTdEl(m);if(j){var l=this.getColumn(j);if(l.sortable){g.stopEvent(i);this.sortColumn(l);}}else{}},onEventSelectColumn:function(i){this.selectColumn(i.target);},onEventHighlightColumn:function(i){this.highlightColumn(i.target);},onEventUnhighlightColumn:function(i){this.unhighlightColumn(i.target);},onEventSelectRow:function(j){var i=this.get("selectionMode");if(i=="single"){this._handleSingleSelectionByMouse(j);}else{this._handleStandardSelectionByMouse(j);}},onEventSelectCell:function(j){var i=this.get("selectionMode");if(i=="cellblock"){this._handleCellBlockSelectionByMouse(j);}else{if(i=="cellrange"){this._handleCellRangeSelectionByMouse(j);}else{this._handleSingleCellSelectionByMouse(j);}}},onEventHighlightRow:function(i){this.highlightRow(i.target);},onEventUnhighlightRow:function(i){this.unhighlightRow(i.target);},onEventHighlightCell:function(i){this.highlightCell(i.target);
 
},onEventUnhighlightCell:function(i){this.unhighlightCell(i.target);},onEventFormatCell:function(i){var l=i.target;var j=this.getTdEl(l);if(j){var k=this.getColumn(this.getCellIndex(j));this.formatCell(j.firstChild,this.getRecord(j),k);}else{}},onEventShowCellEditor:function(i){if(!this.isDisabled()){this.showCellEditor(i.target);}},onEventSaveCellEditor:function(i){if(this._oCellEditor){if(this._oCellEditor.save){this._oCellEditor.save();}else{this.saveCellEditor();}}},onEventCancelCellEditor:function(i){if(this._oCellEditor){if(this._oCellEditor.cancel){this._oCellEditor.cancel();}else{this.cancelCellEditor();}}},onDataReturnInitializeTable:function(i,j,k){if((this instanceof d)&&this._sId){this.initializeTable();this.onDataReturnSetRows(i,j,k);}},onDataReturnReplaceRows:function(m,l,n){if((this instanceof d)&&this._sId){this.fireEvent("dataReturnEvent",{request:m,response:l,payload:n});var j=this.doBeforeLoadData(m,l,n),k=this.get("paginator"),i=0;if(j&&l&&!l.error&&h.isArray(l.results)){this._oRecordSet.reset();if(this.get("dynamicData")){if(n&&n.pagination&&h.isNumber(n.pagination.recordOffset)){i=n.pagination.recordOffset;}else{if(k){i=k.getStartIndex();}}}this._oRecordSet.setRecords(l.results,i|0);this._handleDataReturnPayload(m,l,n);this.render();}else{if(j&&l.error){this.showTableMessage(this.get("MSG_ERROR"),d.CLASS_ERROR);}}}},onDataReturnAppendRows:function(j,k,l){if((this instanceof d)&&this._sId){this.fireEvent("dataReturnEvent",{request:j,response:k,payload:l});var i=this.doBeforeLoadData(j,k,l);if(i&&k&&!k.error&&h.isArray(k.results)){this.addRows(k.results);this._handleDataReturnPayload(j,k,l);}else{if(i&&k.error){this.showTableMessage(this.get("MSG_ERROR"),d.CLASS_ERROR);}}}},onDataReturnInsertRows:function(j,k,l){if((this instanceof d)&&this._sId){this.fireEvent("dataReturnEvent",{request:j,response:k,payload:l});var i=this.doBeforeLoadData(j,k,l);if(i&&k&&!k.error&&h.isArray(k.results)){this.addRows(k.results,(l?l.insertIndex:0));this._handleDataReturnPayload(j,k,l);}else{if(i&&k.error){this.showTableMessage(this.get("MSG_ERROR"),d.CLASS_ERROR);}}}},onDataReturnUpdateRows:function(j,k,l){if((this instanceof d)&&this._sId){this.fireEvent("dataReturnEvent",{request:j,response:k,payload:l});var i=this.doBeforeLoadData(j,k,l);if(i&&k&&!k.error&&h.isArray(k.results)){this.updateRows((l?l.updateIndex:0),k.results);this._handleDataReturnPayload(j,k,l);}else{if(i&&k.error){this.showTableMessage(this.get("MSG_ERROR"),d.CLASS_ERROR);}}}},onDataReturnSetRows:function(m,l,n){if((this instanceof d)&&this._sId){this.fireEvent("dataReturnEvent",{request:m,response:l,payload:n});var j=this.doBeforeLoadData(m,l,n),k=this.get("paginator"),i=0;if(j&&l&&!l.error&&h.isArray(l.results)){if(this.get("dynamicData")){if(n&&n.pagination&&h.isNumber(n.pagination.recordOffset)){i=n.pagination.recordOffset;}else{if(k){i=k.getStartIndex();}}this._oRecordSet.reset();}this._oRecordSet.setRecords(l.results,i|0);this._handleDataReturnPayload(m,l,n);this.render();}else{if(j&&l.error){this.showTableMessage(this.get("MSG_ERROR"),d.CLASS_ERROR);}}}else{}},handleDataReturnPayload:function(j,i,k){return k||{};},_handleDataReturnPayload:function(k,j,l){l=this.handleDataReturnPayload(k,j,l);if(l){var i=this.get("paginator");if(i){if(this.get("dynamicData")){if(e.Paginator.isNumeric(l.totalRecords)){i.set("totalRecords",l.totalRecords);}}else{i.set("totalRecords",this._oRecordSet.getLength());}if(h.isObject(l.pagination)){i.set("rowsPerPage",l.pagination.rowsPerPage);i.set("recordOffset",l.pagination.recordOffset);}}if(l.sortedBy){this.set("sortedBy",l.sortedBy);}else{if(l.sorting){this.set("sortedBy",l.sorting);}}}},showCellEditorBtns:function(k){var l=k.appendChild(document.createElement("div"));c.addClass(l,d.CLASS_BUTTON);var j=l.appendChild(document.createElement("button"));c.addClass(j,d.CLASS_DEFAULT);j.innerHTML="OK";g.addListener(j,"click",function(n,m){m.onEventSaveCellEditor(n,m);m.focusTbodyEl();},this,true);var i=l.appendChild(document.createElement("button"));i.innerHTML="Cancel";g.addListener(i,"click",function(n,m){m.onEventCancelCellEditor(n,m);m.focusTbodyEl();},this,true);},resetCellEditor:function(){var i=this._oCellEditor.container;i.style.display="none";g.purgeElement(i,true);i.innerHTML="";this._oCellEditor.value=null;this._oCellEditor.isActive=false;},getBody:function(){return this.getTbodyEl();},getCell:function(i){return this.getTdEl(i);},getRow:function(i){return this.getTrEl(i);},refreshView:function(){this.render();},select:function(k){if(!h.isArray(k)){k=[k];}for(var j=0;j<k.length;j++){this.selectRow(k[j]);}},onEventEditCell:function(i){this.onEventShowCellEditor(i);},_syncColWidths:function(){this.validateColumnWidths();}});d.prototype.onDataReturnSetRecords=d.prototype.onDataReturnSetRows;d.prototype.onPaginatorChange=d.prototype.onPaginatorChangeRequest;d.editCheckbox=function(){};d.editDate=function(){};d.editDropdown=function(){};d.editRadio=function(){};d.editTextarea=function(){};d.editTextbox=function(){};})();(function(){var c=YAHOO.lang,f=YAHOO.util,e=YAHOO.widget,a=YAHOO.env.ua,d=f.Dom,j=f.Event,i=f.DataSourceBase,g=e.DataTable,b=e.Paginator;e.ScrollingDataTable=function(n,m,k,l){l=l||{};if(l.scrollable){l.scrollable=false;}this._init();e.ScrollingDataTable.superclass.constructor.call(this,n,m,k,l);this.subscribe("columnShowEvent",this._onColumnChange);};var h=e.ScrollingDataTable;c.augmentObject(h,{CLASS_HEADER:"yui-dt-hd",CLASS_BODY:"yui-dt-bd"});c.extend(h,g,{_elHdContainer:null,_elHdTable:null,_elBdContainer:null,_elBdThead:null,_elTmpContainer:null,_elTmpTable:null,_bScrollbarX:null,initAttributes:function(k){k=k||{};h.superclass.initAttributes.call(this,k);this.setAttributeConfig("width",{value:null,validator:c.isString,method:function(l){if(this._elHdContainer&&this._elBdContainer){this._elHdContainer.style.width=l;this._elBdContainer.style.width=l;this._syncScrollX();this._syncScrollOverhang();}}});this.setAttributeConfig("height",{value:null,validator:c.isString,method:function(l){if(this._elHdContainer&&this._elBdContainer){this._elBdContainer.style.height=l;
 
this._syncScrollX();this._syncScrollY();this._syncScrollOverhang();}}});this.setAttributeConfig("COLOR_COLUMNFILLER",{value:"#F2F2F2",validator:c.isString,method:function(l){if(this._elHdContainer){this._elHdContainer.style.backgroundColor=l;}}});},_init:function(){this._elHdContainer=null;this._elHdTable=null;this._elBdContainer=null;this._elBdThead=null;this._elTmpContainer=null;this._elTmpTable=null;},_initDomElements:function(k){this._initContainerEl(k);if(this._elContainer&&this._elHdContainer&&this._elBdContainer){this._initTableEl();if(this._elHdTable&&this._elTable){this._initColgroupEl(this._elHdTable);this._initTheadEl(this._elHdTable,this._elTable);this._initTbodyEl(this._elTable);this._initMsgTbodyEl(this._elTable);}}if(!this._elContainer||!this._elTable||!this._elColgroup||!this._elThead||!this._elTbody||!this._elMsgTbody||!this._elHdTable||!this._elBdThead){return false;}else{return true;}},_destroyContainerEl:function(k){d.removeClass(k,g.CLASS_SCROLLABLE);h.superclass._destroyContainerEl.call(this,k);this._elHdContainer=null;this._elBdContainer=null;},_initContainerEl:function(l){h.superclass._initContainerEl.call(this,l);if(this._elContainer){l=this._elContainer;d.addClass(l,g.CLASS_SCROLLABLE);var k=document.createElement("div");k.style.width=this.get("width")||"";k.style.backgroundColor=this.get("COLOR_COLUMNFILLER");d.addClass(k,h.CLASS_HEADER);this._elHdContainer=k;l.appendChild(k);var m=document.createElement("div");m.style.width=this.get("width")||"";m.style.height=this.get("height")||"";d.addClass(m,h.CLASS_BODY);j.addListener(m,"scroll",this._onScroll,this);this._elBdContainer=m;l.appendChild(m);}},_initCaptionEl:function(k){},_destroyHdTableEl:function(){var k=this._elHdTable;if(k){j.purgeElement(k,true);k.parentNode.removeChild(k);this._elBdThead=null;}},_initTableEl:function(){if(this._elHdContainer){this._destroyHdTableEl();this._elHdTable=this._elHdContainer.appendChild(document.createElement("table"));j.delegate(this._elHdTable,"mouseenter",this._onTableMouseover,"thead ."+g.CLASS_LABEL,this);j.delegate(this._elHdTable,"mouseleave",this._onTableMouseout,"thead ."+g.CLASS_LABEL,this);}h.superclass._initTableEl.call(this,this._elBdContainer);},_initTheadEl:function(l,k){l=l||this._elHdTable;k=k||this._elTable;this._initBdTheadEl(k);h.superclass._initTheadEl.call(this,l);},_initThEl:function(l,k){h.superclass._initThEl.call(this,l,k);l.id=this.getId()+"-fixedth-"+k.getSanitizedKey();},_destroyBdTheadEl:function(){var k=this._elBdThead;if(k){var l=k.parentNode;j.purgeElement(k,true);l.removeChild(k);this._elBdThead=null;this._destroyColumnHelpers();}},_initBdTheadEl:function(t){if(t){this._destroyBdTheadEl();var p=t.insertBefore(document.createElement("thead"),t.firstChild);var v=this._oColumnSet,u=v.tree,o,l,s,q,n,m,r;for(q=0,m=u.length;q<m;q++){l=p.appendChild(document.createElement("tr"));for(n=0,r=u[q].length;n<r;n++){s=u[q][n];o=l.appendChild(document.createElement("th"));this._initBdThEl(o,s,q,n);}}this._elBdThead=p;}},_initBdThEl:function(n,m){n.id=this.getId()+"-th-"+m.getSanitizedKey();n.rowSpan=m.getRowspan();n.colSpan=m.getColspan();if(m.abbr){n.abbr=m.abbr;}var l=m.getKey();var k=c.isValue(m.label)?m.label:l;n.innerHTML=k;},_initTbodyEl:function(k){h.superclass._initTbodyEl.call(this,k);k.style.marginTop=(this._elTbody.offsetTop>0)?"-"+this._elTbody.offsetTop+"px":0;},_focusEl:function(l){l=l||this._elTbody;var k=this;this._storeScrollPositions();setTimeout(function(){setTimeout(function(){try{l.focus();k._restoreScrollPositions();}catch(m){}},0);},0);},_runRenderChain:function(){this._storeScrollPositions();this._oChainRender.run();},_storeScrollPositions:function(){this._nScrollTop=this._elBdContainer.scrollTop;this._nScrollLeft=this._elBdContainer.scrollLeft;},clearScrollPositions:function(){this._nScrollTop=0;this._nScrollLeft=0;},_restoreScrollPositions:function(){if(this._nScrollTop){this._elBdContainer.scrollTop=this._nScrollTop;this._nScrollTop=null;}if(this._nScrollLeft){this._elBdContainer.scrollLeft=this._nScrollLeft;this._elHdContainer.scrollLeft=this._nScrollLeft;this._nScrollLeft=null;}},_validateColumnWidth:function(n,k){if(!n.width&&!n.hidden){var p=n.getThEl();if(n._calculatedWidth){this._setColumnWidth(n,"auto","visible");}if(p.offsetWidth!==k.offsetWidth){var m=(p.offsetWidth>k.offsetWidth)?n.getThLinerEl():k.firstChild;var l=Math.max(0,(m.offsetWidth-(parseInt(d.getStyle(m,"paddingLeft"),10)|0)-(parseInt(d.getStyle(m,"paddingRight"),10)|0)),n.minWidth);var o="visible";if((n.maxAutoWidth>0)&&(l>n.maxAutoWidth)){l=n.maxAutoWidth;o="hidden";}this._elTbody.style.display="none";this._setColumnWidth(n,l+"px",o);n._calculatedWidth=l;this._elTbody.style.display="";}}},validateColumnWidths:function(s){var u=this._oColumnSet.keys,w=u.length,l=this.getFirstTrEl();if(a.ie){this._setOverhangValue(1);}if(u&&l&&(l.childNodes.length===w)){var m=this.get("width");if(m){this._elHdContainer.style.width="";this._elBdContainer.style.width="";}this._elContainer.style.width="";if(s&&c.isNumber(s.getKeyIndex())){this._validateColumnWidth(s,l.childNodes[s.getKeyIndex()]);}else{var t,k=[],o,q,r;for(q=0;q<w;q++){s=u[q];if(!s.width&&!s.hidden&&s._calculatedWidth){k[k.length]=s;}}this._elTbody.style.display="none";for(q=0,r=k.length;q<r;q++){this._setColumnWidth(k[q],"auto","visible");}this._elTbody.style.display="";k=[];for(q=0;q<w;q++){s=u[q];t=l.childNodes[q];if(!s.width&&!s.hidden){var n=s.getThEl();if(n.offsetWidth!==t.offsetWidth){var v=(n.offsetWidth>t.offsetWidth)?s.getThLinerEl():t.firstChild;var p=Math.max(0,(v.offsetWidth-(parseInt(d.getStyle(v,"paddingLeft"),10)|0)-(parseInt(d.getStyle(v,"paddingRight"),10)|0)),s.minWidth);var x="visible";if((s.maxAutoWidth>0)&&(p>s.maxAutoWidth)){p=s.maxAutoWidth;x="hidden";}k[k.length]=[s,p,x];}}}this._elTbody.style.display="none";for(q=0,r=k.length;q<r;q++){o=k[q];this._setColumnWidth(o[0],o[1]+"px",o[2]);o[0]._calculatedWidth=o[1];}this._elTbody.style.display="";}if(m){this._elHdContainer.style.width=m;this._elBdContainer.style.width=m;
 
}}this._syncScroll();this._restoreScrollPositions();},_syncScroll:function(){this._syncScrollX();this._syncScrollY();this._syncScrollOverhang();if(a.opera){this._elHdContainer.scrollLeft=this._elBdContainer.scrollLeft;if(!this.get("width")){document.body.style+="";}}},_syncScrollY:function(){var k=this._elTbody,l=this._elBdContainer;if(!this.get("width")){this._elContainer.style.width=(l.scrollHeight>l.clientHeight)?(k.parentNode.clientWidth+19)+"px":(k.parentNode.clientWidth+2)+"px";}},_syncScrollX:function(){var k=this._elTbody,l=this._elBdContainer;if(!this.get("height")&&(a.ie)){l.style.height=(l.scrollWidth>l.offsetWidth)?(k.parentNode.offsetHeight+18)+"px":k.parentNode.offsetHeight+"px";}if(this._elTbody.rows.length===0){this._elMsgTbody.parentNode.style.width=this.getTheadEl().parentNode.offsetWidth+"px";}else{this._elMsgTbody.parentNode.style.width="";}},_syncScrollOverhang:function(){var l=this._elBdContainer,k=1;if((l.scrollHeight>l.clientHeight)&&(l.scrollWidth>l.clientWidth)){k=18;}this._setOverhangValue(k);},_setOverhangValue:function(n){var p=this._oColumnSet.headers[this._oColumnSet.headers.length-1]||[],l=p.length,k=this._sId+"-fixedth-",o=n+"px solid "+this.get("COLOR_COLUMNFILLER");this._elThead.style.display="none";for(var m=0;m<l;m++){d.get(k+p[m]).style.borderRight=o;}this._elThead.style.display="";},getHdContainerEl:function(){return this._elHdContainer;},getBdContainerEl:function(){return this._elBdContainer;},getHdTableEl:function(){return this._elHdTable;},getBdTableEl:function(){return this._elTable;},disable:function(){var k=this._elMask;k.style.width=this._elBdContainer.offsetWidth+"px";k.style.height=this._elHdContainer.offsetHeight+this._elBdContainer.offsetHeight+"px";k.style.display="";this.fireEvent("disableEvent");},removeColumn:function(m){var k=this._elHdContainer.scrollLeft;var l=this._elBdContainer.scrollLeft;m=h.superclass.removeColumn.call(this,m);this._elHdContainer.scrollLeft=k;this._elBdContainer.scrollLeft=l;return m;},insertColumn:function(n,l){var k=this._elHdContainer.scrollLeft;var m=this._elBdContainer.scrollLeft;var o=h.superclass.insertColumn.call(this,n,l);this._elHdContainer.scrollLeft=k;this._elBdContainer.scrollLeft=m;return o;},reorderColumn:function(n,l){var k=this._elHdContainer.scrollLeft;var m=this._elBdContainer.scrollLeft;var o=h.superclass.reorderColumn.call(this,n,l);this._elHdContainer.scrollLeft=k;this._elBdContainer.scrollLeft=m;return o;},setColumnWidth:function(l,k){l=this.getColumn(l);if(l){this._storeScrollPositions();if(c.isNumber(k)){k=(k>l.minWidth)?k:l.minWidth;l.width=k;this._setColumnWidth(l,k+"px");this._syncScroll();this.fireEvent("columnSetWidthEvent",{column:l,width:k});}else{if(k===null){l.width=k;this._setColumnWidth(l,"auto");this.validateColumnWidths(l);this.fireEvent("columnUnsetWidthEvent",{column:l});}}this._clearTrTemplateEl();}else{}},scrollTo:function(m){var l=this.getTdEl(m);if(l){this.clearScrollPositions();this.getBdContainerEl().scrollLeft=l.offsetLeft;this.getBdContainerEl().scrollTop=l.parentNode.offsetTop;}else{var k=this.getTrEl(m);if(k){this.clearScrollPositions();this.getBdContainerEl().scrollTop=k.offsetTop;}}},showTableMessage:function(o,k){var p=this._elMsgTd;if(c.isString(o)){p.firstChild.innerHTML=o;}if(c.isString(k)){d.addClass(p.firstChild,k);}var n=this.getTheadEl();var l=n.parentNode;var m=l.offsetWidth;this._elMsgTbody.parentNode.style.width=this.getTheadEl().parentNode.offsetWidth+"px";this._elMsgTbody.style.display="";this.fireEvent("tableMsgShowEvent",{html:o,className:k});},_onColumnChange:function(k){var l=(k.column)?k.column:(k.editor)?k.editor.column:null;this._storeScrollPositions();this.validateColumnWidths(l);},_onScroll:function(m,l){l._elHdContainer.scrollLeft=l._elBdContainer.scrollLeft;if(l._oCellEditor&&l._oCellEditor.isActive){l.fireEvent("editorBlurEvent",{editor:l._oCellEditor});l.cancelCellEditor();}var n=j.getTarget(m);var k=n.nodeName.toLowerCase();l.fireEvent("tableScrollEvent",{event:m,target:n});},_onTheadKeydown:function(n,l){if(j.getCharCode(n)===9){setTimeout(function(){if((l instanceof h)&&l._sId){l._elBdContainer.scrollLeft=l._elHdContainer.scrollLeft;}},0);}var o=j.getTarget(n);var k=o.nodeName.toLowerCase();var m=true;while(o&&(k!="table")){switch(k){case"body":return;case"input":case"textarea":break;case"thead":m=l.fireEvent("theadKeyEvent",{target:o,event:n});break;default:break;}if(m===false){return;}else{o=o.parentNode;if(o){k=o.nodeName.toLowerCase();}}}l.fireEvent("tableKeyEvent",{target:(o||l._elContainer),event:n});}});})();(function(){var c=YAHOO.lang,f=YAHOO.util,e=YAHOO.widget,b=YAHOO.env.ua,d=f.Dom,i=f.Event,h=e.DataTable;e.BaseCellEditor=function(k,j){this._sId=this._sId||d.generateId(null,"yui-ceditor");YAHOO.widget.BaseCellEditor._nCount++;this._sType=k;this._initConfigs(j);this._initEvents();this._needsRender=true;};var a=e.BaseCellEditor;c.augmentObject(a,{_nCount:0,CLASS_CELLEDITOR:"yui-ceditor"});a.prototype={_sId:null,_sType:null,_oDataTable:null,_oColumn:null,_oRecord:null,_elTd:null,_elContainer:null,_elCancelBtn:null,_elSaveBtn:null,_initConfigs:function(k){if(k&&YAHOO.lang.isObject(k)){for(var j in k){if(j){this[j]=k[j];}}}},_initEvents:function(){this.createEvent("showEvent");this.createEvent("keydownEvent");this.createEvent("invalidDataEvent");this.createEvent("revertEvent");this.createEvent("saveEvent");this.createEvent("cancelEvent");this.createEvent("blurEvent");this.createEvent("blockEvent");this.createEvent("unblockEvent");},_initContainerEl:function(){if(this._elContainer){YAHOO.util.Event.purgeElement(this._elContainer,true);this._elContainer.innerHTML="";}var j=document.createElement("div");j.id=this.getId()+"-container";j.style.display="none";j.tabIndex=0;this.className=c.isArray(this.className)?this.className:this.className?[this.className]:[];this.className[this.className.length]=h.CLASS_EDITOR;j.className=this.className.join(" ");document.body.insertBefore(j,document.body.firstChild);this._elContainer=j;},_initShimEl:function(){if(this.useIFrame){if(!this._elIFrame){var j=document.createElement("iframe");
 
j.src="javascript:false";j.frameBorder=0;j.scrolling="no";j.style.display="none";j.className=h.CLASS_EDITOR_SHIM;j.tabIndex=-1;j.role="presentation";j.title="Presentational iframe shim";document.body.insertBefore(j,document.body.firstChild);this._elIFrame=j;}}},_hide:function(){this.getContainerEl().style.display="none";if(this._elIFrame){this._elIFrame.style.display="none";}this.isActive=false;this.getDataTable()._oCellEditor=null;},asyncSubmitter:null,value:null,defaultValue:null,validator:null,resetInvalidData:true,isActive:false,LABEL_SAVE:"Save",LABEL_CANCEL:"Cancel",disableBtns:false,useIFrame:false,className:null,toString:function(){return"CellEditor instance "+this._sId;},getId:function(){return this._sId;},getDataTable:function(){return this._oDataTable;},getColumn:function(){return this._oColumn;},getRecord:function(){return this._oRecord;},getTdEl:function(){return this._elTd;},getContainerEl:function(){return this._elContainer;},destroy:function(){this.unsubscribeAll();var k=this.getColumn();if(k){k.editor=null;}var j=this.getContainerEl();if(j){i.purgeElement(j,true);j.parentNode.removeChild(j);}},render:function(){if(!this._needsRender){return;}this._initContainerEl();this._initShimEl();i.addListener(this.getContainerEl(),"keydown",function(l,j){if((l.keyCode==27)){var k=i.getTarget(l);if(k.nodeName&&k.nodeName.toLowerCase()==="select"){k.blur();}j.cancel();}j.fireEvent("keydownEvent",{editor:j,event:l});},this);this.renderForm();if(!this.disableBtns){this.renderBtns();}this.doAfterRender();this._needsRender=false;},renderBtns:function(){var l=this.getContainerEl().appendChild(document.createElement("div"));l.className=h.CLASS_BUTTON;var k=l.appendChild(document.createElement("button"));k.className=h.CLASS_DEFAULT;k.innerHTML=this.LABEL_SAVE;i.addListener(k,"click",function(m){this.save();},this,true);this._elSaveBtn=k;var j=l.appendChild(document.createElement("button"));j.innerHTML=this.LABEL_CANCEL;i.addListener(j,"click",function(m){this.cancel();},this,true);this._elCancelBtn=j;},attach:function(n,l){if(n instanceof YAHOO.widget.DataTable){this._oDataTable=n;l=n.getTdEl(l);if(l){this._elTd=l;var m=n.getColumn(l);if(m){this._oColumn=m;var j=n.getRecord(l);if(j){this._oRecord=j;var k=j.getData(this.getColumn().getField());this.value=(k!==undefined)?k:this.defaultValue;return true;}}}}return false;},move:function(){var m=this.getContainerEl(),l=this.getTdEl(),j=d.getX(l),n=d.getY(l);if(isNaN(j)||isNaN(n)){var k=this.getDataTable().getTbodyEl();j=l.offsetLeft+d.getX(k.parentNode)-k.scrollLeft;n=l.offsetTop+d.getY(k.parentNode)-k.scrollTop+this.getDataTable().getTheadEl().offsetHeight;}m.style.left=j+"px";m.style.top=n+"px";if(this._elIFrame){this._elIFrame.style.left=j+"px";this._elIFrame.style.top=n+"px";}},show:function(){var k=this.getContainerEl(),j=this._elIFrame;this.resetForm();this.isActive=true;k.style.display="";if(j){j.style.width=k.offsetWidth+"px";j.style.height=k.offsetHeight+"px";j.style.display="";}this.focus();this.fireEvent("showEvent",{editor:this});},block:function(){this.fireEvent("blockEvent",{editor:this});},unblock:function(){this.fireEvent("unblockEvent",{editor:this});},save:function(){var k=this.getInputValue();var l=k;if(this.validator){l=this.validator.call(this.getDataTable(),k,this.value,this);if(l===undefined){if(this.resetInvalidData){this.resetForm();}this.fireEvent("invalidDataEvent",{editor:this,oldData:this.value,newData:k});return;}}var m=this;var j=function(o,n){var p=m.value;if(o){m.value=n;m.getDataTable().updateCell(m.getRecord(),m.getColumn(),n);m._hide();m.fireEvent("saveEvent",{editor:m,oldData:p,newData:m.value});}else{m.resetForm();m.fireEvent("revertEvent",{editor:m,oldData:p,newData:n});}m.unblock();};this.block();if(c.isFunction(this.asyncSubmitter)){this.asyncSubmitter.call(this,j,l);}else{j(true,l);}},cancel:function(){if(this.isActive){this._hide();this.fireEvent("cancelEvent",{editor:this});}else{}},renderForm:function(){},doAfterRender:function(){},handleDisabledBtns:function(){},resetForm:function(){},focus:function(){},getInputValue:function(){}};c.augmentProto(a,f.EventProvider);e.CheckboxCellEditor=function(j){j=j||{};this._sId=this._sId||d.generateId(null,"yui-checkboxceditor");YAHOO.widget.BaseCellEditor._nCount++;e.CheckboxCellEditor.superclass.constructor.call(this,j.type||"checkbox",j);};c.extend(e.CheckboxCellEditor,a,{checkboxOptions:null,checkboxes:null,value:null,renderForm:function(){if(c.isArray(this.checkboxOptions)){var n,o,q,l,m,k;for(m=0,k=this.checkboxOptions.length;m<k;m++){n=this.checkboxOptions[m];o=c.isValue(n.value)?n.value:n;q=this.getId()+"-chk"+m;this.getContainerEl().innerHTML+='<input type="checkbox"'+' id="'+q+'"'+' value="'+o+'" />';l=this.getContainerEl().appendChild(document.createElement("label"));l.htmlFor=q;l.innerHTML=c.isValue(n.label)?n.label:n;}var p=[];for(m=0;m<k;m++){p[p.length]=this.getContainerEl().childNodes[m*2];}this.checkboxes=p;if(this.disableBtns){this.handleDisabledBtns();}}else{}},handleDisabledBtns:function(){i.addListener(this.getContainerEl(),"click",function(j){if(i.getTarget(j).tagName.toLowerCase()==="input"){this.save();}},this,true);},resetForm:function(){var p=c.isArray(this.value)?this.value:[this.value];for(var o=0,n=this.checkboxes.length;o<n;o++){this.checkboxes[o].checked=false;for(var m=0,l=p.length;m<l;m++){if(this.checkboxes[o].value==p[m]){this.checkboxes[o].checked=true;}}}},focus:function(){this.checkboxes[0].focus();},getInputValue:function(){var k=[];for(var m=0,l=this.checkboxes.length;m<l;m++){if(this.checkboxes[m].checked){k[k.length]=this.checkboxes[m].value;}}return k;}});c.augmentObject(e.CheckboxCellEditor,a);e.DateCellEditor=function(j){j=j||{};this._sId=this._sId||d.generateId(null,"yui-dateceditor");YAHOO.widget.BaseCellEditor._nCount++;e.DateCellEditor.superclass.constructor.call(this,j.type||"date",j);};c.extend(e.DateCellEditor,a,{calendar:null,calendarOptions:null,defaultValue:new Date(),renderForm:function(){if(YAHOO.widget.Calendar){var k=this.getContainerEl().appendChild(document.createElement("div"));
 
k.id=this.getId()+"-dateContainer";var l=new YAHOO.widget.Calendar(this.getId()+"-date",k.id,this.calendarOptions);l.render();k.style.cssFloat="none";l.hideEvent.subscribe(function(){this.cancel();},this,true);if(b.ie){var j=this.getContainerEl().appendChild(document.createElement("div"));j.style.clear="both";}this.calendar=l;if(this.disableBtns){this.handleDisabledBtns();}}else{}},handleDisabledBtns:function(){this.calendar.selectEvent.subscribe(function(j){this.save();},this,true);},resetForm:function(){var j=this.value||(new Date());this.calendar.select(j);this.calendar.cfg.setProperty("pagedate",j,false);this.calendar.render();this.calendar.show();},focus:function(){},getInputValue:function(){return this.calendar.getSelectedDates()[0];}});c.augmentObject(e.DateCellEditor,a);e.DropdownCellEditor=function(j){j=j||{};this._sId=this._sId||d.generateId(null,"yui-dropdownceditor");YAHOO.widget.BaseCellEditor._nCount++;e.DropdownCellEditor.superclass.constructor.call(this,j.type||"dropdown",j);};c.extend(e.DropdownCellEditor,a,{dropdownOptions:null,dropdown:null,multiple:false,size:null,renderForm:function(){var n=this.getContainerEl().appendChild(document.createElement("select"));n.style.zoom=1;if(this.multiple){n.multiple="multiple";}if(c.isNumber(this.size)){n.size=this.size;}this.dropdown=n;if(c.isArray(this.dropdownOptions)){var o,m;for(var l=0,k=this.dropdownOptions.length;l<k;l++){o=this.dropdownOptions[l];m=document.createElement("option");m.value=(c.isValue(o.value))?o.value:o;m.innerHTML=(c.isValue(o.label))?o.label:o;m=n.appendChild(m);}if(this.disableBtns){this.handleDisabledBtns();}}},handleDisabledBtns:function(){if(this.multiple){i.addListener(this.dropdown,"blur",function(j){this.save();},this,true);}else{if(!b.ie){i.addListener(this.dropdown,"change",function(j){this.save();},this,true);}else{i.addListener(this.dropdown,"blur",function(j){this.save();},this,true);i.addListener(this.dropdown,"click",function(j){this.save();},this,true);}}},resetForm:function(){var s=this.dropdown.options,p=0,o=s.length;if(c.isArray(this.value)){var l=this.value,k=0,r=l.length,q={};for(;p<o;p++){s[p].selected=false;q[s[p].value]=s[p];}for(;k<r;k++){if(q[l[k]]){q[l[k]].selected=true;}}}else{for(;p<o;p++){if(this.value==s[p].value){s[p].selected=true;}}}},focus:function(){this.getDataTable()._focusEl(this.dropdown);},getInputValue:function(){var n=this.dropdown.options;if(this.multiple){var k=[],m=0,l=n.length;for(;m<l;m++){if(n[m].selected){k.push(n[m].value);}}return k;}else{return n[n.selectedIndex].value;}}});c.augmentObject(e.DropdownCellEditor,a);e.RadioCellEditor=function(j){j=j||{};this._sId=this._sId||d.generateId(null,"yui-radioceditor");YAHOO.widget.BaseCellEditor._nCount++;e.RadioCellEditor.superclass.constructor.call(this,j.type||"radio",j);};c.extend(e.RadioCellEditor,a,{radios:null,radioOptions:null,renderForm:function(){if(c.isArray(this.radioOptions)){var k,l,r,o;for(var n=0,p=this.radioOptions.length;n<p;n++){k=this.radioOptions[n];l=c.isValue(k.value)?k.value:k;r=this.getId()+"-radio"+n;this.getContainerEl().innerHTML+='<input type="radio"'+' name="'+this.getId()+'"'+' value="'+l+'"'+' id="'+r+'" />';o=this.getContainerEl().appendChild(document.createElement("label"));o.htmlFor=r;o.innerHTML=(c.isValue(k.label))?k.label:k;}var q=[],s;for(var m=0;m<p;m++){s=this.getContainerEl().childNodes[m*2];q[q.length]=s;}this.radios=q;if(this.disableBtns){this.handleDisabledBtns();}}else{}},handleDisabledBtns:function(){i.addListener(this.getContainerEl(),"click",function(j){if(i.getTarget(j).tagName.toLowerCase()==="input"){this.save();}},this,true);},resetForm:function(){for(var m=0,l=this.radios.length;m<l;m++){var k=this.radios[m];if(this.value==k.value){k.checked=true;return;}}},focus:function(){for(var l=0,k=this.radios.length;l<k;l++){if(this.radios[l].checked){this.radios[l].focus();return;}}},getInputValue:function(){for(var l=0,k=this.radios.length;l<k;l++){if(this.radios[l].checked){return this.radios[l].value;}}}});c.augmentObject(e.RadioCellEditor,a);e.TextareaCellEditor=function(j){j=j||{};this._sId=this._sId||d.generateId(null,"yui-textareaceditor");YAHOO.widget.BaseCellEditor._nCount++;e.TextareaCellEditor.superclass.constructor.call(this,j.type||"textarea",j);};c.extend(e.TextareaCellEditor,a,{textarea:null,renderForm:function(){var j=this.getContainerEl().appendChild(document.createElement("textarea"));this.textarea=j;if(this.disableBtns){this.handleDisabledBtns();}},handleDisabledBtns:function(){i.addListener(this.textarea,"blur",function(j){this.save();},this,true);},move:function(){this.textarea.style.width=this.getTdEl().offsetWidth+"px";this.textarea.style.height="3em";YAHOO.widget.TextareaCellEditor.superclass.move.call(this);},resetForm:function(){this.textarea.value=this.value;},focus:function(){this.getDataTable()._focusEl(this.textarea);this.textarea.select();},getInputValue:function(){return this.textarea.value;}});c.augmentObject(e.TextareaCellEditor,a);e.TextboxCellEditor=function(j){j=j||{};this._sId=this._sId||d.generateId(null,"yui-textboxceditor");YAHOO.widget.BaseCellEditor._nCount++;e.TextboxCellEditor.superclass.constructor.call(this,j.type||"textbox",j);};c.extend(e.TextboxCellEditor,a,{textbox:null,renderForm:function(){var j;if(b.webkit>420){j=this.getContainerEl().appendChild(document.createElement("form")).appendChild(document.createElement("input"));}else{j=this.getContainerEl().appendChild(document.createElement("input"));}j.type="text";this.textbox=j;i.addListener(j,"keypress",function(k){if((k.keyCode===13)){YAHOO.util.Event.preventDefault(k);this.save();}},this,true);if(this.disableBtns){this.handleDisabledBtns();}},move:function(){this.textbox.style.width=this.getTdEl().offsetWidth+"px";e.TextboxCellEditor.superclass.move.call(this);},resetForm:function(){this.textbox.value=c.isValue(this.value)?this.value.toString():"";},focus:function(){this.getDataTable()._focusEl(this.textbox);this.textbox.select();},getInputValue:function(){return this.textbox.value;
 
}});c.augmentObject(e.TextboxCellEditor,a);h.Editors={checkbox:e.CheckboxCellEditor,"date":e.DateCellEditor,dropdown:e.DropdownCellEditor,radio:e.RadioCellEditor,textarea:e.TextareaCellEditor,textbox:e.TextboxCellEditor};e.CellEditor=function(k,j){if(k&&h.Editors[k]){c.augmentObject(a,h.Editors[k]);return new h.Editors[k](j);}else{return new a(null,j);}};var g=e.CellEditor;c.augmentObject(g,a);})();YAHOO.register("datatable",YAHOO.widget.DataTable,{version:"2.9.0",build:"2800"});
 

	
 

	
 
if("undefined"==typeof YAHOO||!YAHOO)var YAHOO={};YAHOO.namespace=function(){var a=arguments,c=null,b,d,f;for(b=0;b<a.length;b+=1){f=(""+a[b]).split(".");c=YAHOO;for(d="YAHOO"==f[0]?1:0;d<f.length;d+=1)c[f[d]]=c[f[d]]||{},c=c[f[d]]}return c};YAHOO.log=function(a,c,b){var d=YAHOO.widget.Logger;return d&&d.log?d.log(a,c,b):!1};
 
YAHOO.register=function(a,c,b){var d=YAHOO.env.modules,f,g,j;d[a]||(d[a]={versions:[],builds:[]});d=d[a];f=b.version;b=b.build;g=YAHOO.env.listeners;d.name=a;d.version=f;d.build=b;d.versions.push(f);d.builds.push(b);d.mainClass=c;for(j=0;j<g.length;j+=1)g[j](d);c?(c.VERSION=f,c.BUILD=b):YAHOO.log("mainClass is undefined for module "+a,"warn")};YAHOO.env=YAHOO.env||{modules:[],listeners:[]};YAHOO.env.getVersion=function(a){return YAHOO.env.modules[a]||null};
 
YAHOO.env.parseUA=function(a){var c=function(a){var b=0;return parseFloat(a.replace(/\./g,function(){return 1==b++?"":"."}))},b=navigator,b={ie:0,opera:0,gecko:0,webkit:0,chrome:0,mobile:null,air:0,ipad:0,iphone:0,ipod:0,ios:null,android:0,webos:0,caja:b&&b.cajaVersion,secure:!1,os:null},a=a||navigator&&navigator.userAgent,d=window&&window.location,d=d&&d.href;b.secure=d&&0===d.toLowerCase().indexOf("https");if(a){/windows|win32/i.test(a)?b.os="windows":/macintosh/i.test(a)?b.os="macintosh":/rhino/i.test(a)&&
 
(b.os="rhino");/KHTML/.test(a)&&(b.webkit=1);if((d=a.match(/AppleWebKit\/([^\s]*)/))&&d[1]){b.webkit=c(d[1]);if(/ Mobile\//.test(a)){if(b.mobile="Apple",(d=a.match(/OS ([^\s]*)/))&&d[1]&&(d=c(d[1].replace("_","."))),b.ios=d,b.ipad=b.ipod=b.iphone=0,(d=a.match(/iPad|iPod|iPhone/))&&d[0])b[d[0].toLowerCase()]=b.ios}else{if(d=a.match(/NokiaN[^\/]*|Android \d\.\d|webOS\/\d\.\d/))b.mobile=d[0];if(/webOS/.test(a)&&(b.mobile="WebOS",(d=a.match(/webOS\/([^\s]*);/))&&d[1]))b.webos=c(d[1]);if(/ Android/.test(a)&&
 
(b.mobile="Android",(d=a.match(/Android ([^\s]*);/))&&d[1]))b.android=c(d[1])}if((d=a.match(/Chrome\/([^\s]*)/))&&d[1])b.chrome=c(d[1]);else if(d=a.match(/AdobeAIR\/([^\s]*)/))b.air=d[0]}if(!b.webkit)if((d=a.match(/Opera[\s\/]([^\s]*)/))&&d[1]){b.opera=c(d[1]);if((d=a.match(/Version\/([^\s]*)/))&&d[1])b.opera=c(d[1]);if(d=a.match(/Opera Mini[^;]*/))b.mobile=d[0]}else if((d=a.match(/MSIE\s([^;]*)/))&&d[1])b.ie=c(d[1]);else if(d=a.match(/Gecko\/([^\s]*)/))if(b.gecko=1,(d=a.match(/rv:([^\s\)]*)/))&&
 
d[1])b.gecko=c(d[1])}return b};YAHOO.env.ua=YAHOO.env.parseUA();(function(){YAHOO.namespace("util","widget","example");if("undefined"!==typeof YAHOO_config){var a=YAHOO_config.listener,c=YAHOO.env.listeners,b=!0,d;if(a){for(d=0;d<c.length;d++)if(c[d]==a){b=!1;break}b&&c.push(a)}}})();YAHOO.lang=YAHOO.lang||{};
 
(function(){var a=YAHOO.lang,c=Object.prototype,b=[],d={"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#x27;","/":"&#x2F;","`":"&#x60;"},f=["toString","valueOf"],g={isArray:function(a){return"[object Array]"===c.toString.apply(a)},isBoolean:function(a){return"boolean"===typeof a},isFunction:function(a){return"function"===typeof a||"[object Function]"===c.toString.apply(a)},isNull:function(a){return null===a},isNumber:function(a){return"number"===typeof a&&isFinite(a)},isObject:function(b){return b&&
 
("object"===typeof b||a.isFunction(b))||!1},isString:function(a){return"string"===typeof a},isUndefined:function(a){return"undefined"===typeof a},_IEEnumFix:YAHOO.env.ua.ie?function(b,d){var e,i,k;for(e=0;e<f.length;e+=1)i=f[e],k=d[i],a.isFunction(k)&&k!=c[i]&&(b[i]=k)}:function(){},escapeHTML:function(a){return a.replace(/[&<>"'\/`]/g,function(a){return d[a]})},extend:function(b,d,e){if(!d||!b)throw Error("extend failed, please check that all dependencies are included.");var i=function(){},k;i.prototype=
 
d.prototype;b.prototype=new i;b.prototype.constructor=b;b.superclass=d.prototype;d.prototype.constructor==c.constructor&&(d.prototype.constructor=d);if(e){for(k in e)a.hasOwnProperty(e,k)&&(b.prototype[k]=e[k]);a._IEEnumFix(b.prototype,e)}},augmentObject:function(b,d){if(!d||!b)throw Error("Absorb failed, verify dependencies.");var e=arguments,i,k=e[2];if(k&&!0!==k)for(i=2;i<e.length;i+=1)b[e[i]]=d[e[i]];else{for(i in d)if(k||!(i in b))b[i]=d[i];a._IEEnumFix(b,d)}return b},augmentProto:function(b,
 
d){if(!d||!b)throw Error("Augment failed, verify dependencies.");var e=[b.prototype,d.prototype],i;for(i=2;i<arguments.length;i+=1)e.push(arguments[i]);a.augmentObject.apply(this,e);return b},dump:function(b,d){var e,i,k=[];if(a.isObject(b)){if(b instanceof Date||"nodeType"in b&&"tagName"in b)return b;if(a.isFunction(b))return"f(){...}"}else return b+"";d=a.isNumber(d)?d:3;if(a.isArray(b)){k.push("[");e=0;for(i=b.length;e<i;e+=1)a.isObject(b[e])?k.push(0<d?a.dump(b[e],d-1):"{...}"):k.push(b[e]),k.push(", ");
 
1<k.length&&k.pop();k.push("]")}else{k.push("{");for(e in b)a.hasOwnProperty(b,e)&&(k.push(e+" => "),a.isObject(b[e])?k.push(0<d?a.dump(b[e],d-1):"{...}"):k.push(b[e]),k.push(", "));1<k.length&&k.pop();k.push("}")}return k.join("")},substitute:function(b,d,e,i){for(var k,f,c,g,n,o=[],m,r=b.length;;){k=b.lastIndexOf("{",r);if(0>k)break;f=b.indexOf("}",k);if(k+1>f)break;g=m=b.substring(k+1,f);n=null;c=g.indexOf(" ");-1<c&&(n=g.substring(c+1),g=g.substring(0,c));c=d[g];e&&(c=e(g,c,n));a.isObject(c)?
 
a.isArray(c)?c=a.dump(c,parseInt(n,10)):(n=n||"",g=n.indexOf("dump"),-1<g&&(n=n.substring(4)),m=c.toString(),c="[object Object]"===m||-1<g?a.dump(c,parseInt(n,10)):m):!a.isString(c)&&!a.isNumber(c)&&(c="~-"+o.length+"-~",o[o.length]=m);b=b.substring(0,k)+c+b.substring(f+1);!1===i&&(r=k-1)}for(k=o.length-1;0<=k;k-=1)b=b.replace(RegExp("~-"+k+"-~"),"{"+o[k]+"}","g");return b},trim:function(a){try{return a.replace(/^\s+|\s+$/g,"")}catch(b){return a}},merge:function(){var b={},d=arguments,e=d.length,
 
i;for(i=0;i<e;i+=1)a.augmentObject(b,d[i],!0);return b},later:function(d,f,e,i,k){var d=d||0,f=f||{},c=e,g=i,p;a.isString(e)&&(c=f[e]);if(!c)throw new TypeError("method undefined");!a.isUndefined(i)&&!a.isArray(g)&&(g=[i]);e=function(){c.apply(f,g||b)};p=k?setInterval(e,d):setTimeout(e,d);return{interval:k,cancel:function(){this.interval?clearInterval(p):clearTimeout(p)}}},isValue:function(b){return a.isObject(b)||a.isString(b)||a.isNumber(b)||a.isBoolean(b)}};a.hasOwnProperty=c.hasOwnProperty?function(a,
 
b){return a&&a.hasOwnProperty&&a.hasOwnProperty(b)}:function(b,d){return!a.isUndefined(b[d])&&b.constructor.prototype[d]!==b[d]};g.augmentObject(a,g,!0);YAHOO.util.Lang=a;a.augment=a.augmentProto;YAHOO.augment=a.augmentProto;YAHOO.extend=a.extend})();YAHOO.register("yahoo",YAHOO,{version:"2.9.0",build:"2800"});
 
YAHOO.util.Get=function(){var a={},c=0,b=0,d=!1,f=YAHOO.env.ua,g=YAHOO.lang,j,h,e,i=function(e,a,i){var e=(i||window).document.createElement(e),b;for(b in a)a.hasOwnProperty(b)&&e.setAttribute(b,a[b]);return e},k=function(e,a,k){e={id:"yui__dyn_"+b++,type:"text/javascript",src:e};k&&g.augmentObject(e,k);return i("script",e,a)},l=function(e,a){return{tId:e.tId,win:e.win,data:e.data,nodes:e.nodes,msg:a,purge:function(){h(this.tId)}}},q=function(e,i){var b=a[i];(b=g.isString(e)?b.win.document.getElementById(e):
 
e)||j(i,"target node not found: "+e);return b},p=function(e){YAHOO.log("Finishing transaction "+e);var i=a[e];i.finished=!0;i.aborted?j(e,"transaction "+e+" was aborted"):i.onSuccess&&(e=i.scope||i.win,i.onSuccess.call(e,l(i)))},n=function(e){YAHOO.log("Timeout "+e,"info","get");var e=a[e],i;e.onTimeout&&(i=e.scope||e,e.onTimeout.call(i,l(e)))},o=function(d,c){YAHOO.log("_next: "+d+", loaded: "+c,"info","Get");var l=a[d],h=l.win,m=h.document.getElementsByTagName("head")[0],x,v;l.timer&&l.timer.cancel();
 
if(l.aborted)j(d,"transaction "+d+" was aborted");else if(c?(l.url.shift(),l.varName&&l.varName.shift()):(l.url=g.isString(l.url)?[l.url]:l.url,l.varName&&(l.varName=g.isString(l.varName)?[l.varName]:l.varName)),0===l.url.length)"script"===l.type&&f.webkit&&420>f.webkit&&!l.finalpass&&!l.varName?(v=k(null,l.win,l.attributes),v.innerHTML='YAHOO.util.Get._finalize("'+d+'");',l.nodes.push(v),m.appendChild(v)):p(d);else{v=l.url[0];if(!v)return l.url.shift(),YAHOO.log("skipping empty url"),o(d);YAHOO.log("attempting to load "+
 
v,"info","Get");l.timeout&&(l.timer=g.later(l.timeout,l,n,d));if("script"===l.type)x=k(v,h,l.attributes);else{x=l.attributes;var y={id:"yui__dyn_"+b++,type:"text/css",rel:"stylesheet",href:v};x&&g.augmentObject(y,x);x=i("link",y,h)}e(l.type,x,d,v,h,l.url.length);l.nodes.push(x);l.insertBefore?(m=q(l.insertBefore,d))&&m.parentNode.insertBefore(x,m):m.appendChild(x);YAHOO.log("Appending node: "+v,"info","Get");(f.webkit||f.gecko)&&"css"===l.type&&o(d,v)}},m=function(e,i,b){var k="q"+c++,b=b||{};if(0===
 
c%YAHOO.util.Get.PURGE_THRESH&&!d){d=!0;var f,l;for(f in a)a.hasOwnProperty(f)&&(l=a[f],l.autopurge&&l.finished&&(h(l.tId),delete a[f]));d=!1}a[k]=g.merge(b,{tId:k,type:e,url:i,finished:!1,aborted:!1,nodes:[]});i=a[k];i.win=i.win||window;i.scope=i.scope||i.win;i.autopurge="autopurge"in i?i.autopurge:"script"===e?!0:!1;i.attributes=i.attributes||{};i.attributes.charset=b.charset||i.attributes.charset||"utf-8";g.later(0,i,o,k);return{tId:k}};e=function(e,i,b,k,d,l,c){var h=c||o,q,p,m,n,C,z;f.ie?i.onreadystatechange=
 
function(){q=this.readyState;if("loaded"===q||"complete"===q)YAHOO.log(b+" onload "+k,"info","Get"),i.onreadystatechange=null,h(b,k)}:f.webkit?"script"===e&&(420<=f.webkit?i.addEventListener("load",function(){YAHOO.log(b+" DOM2 onload "+k,"info","Get");h(b,k)}):(p=a[b],p.varName?(e=YAHOO.util.Get.POLL_FREQ,YAHOO.log("Polling for "+p.varName[0]),p.maxattempts=YAHOO.util.Get.TIMEOUT/e,p.attempts=0,p._cache=p.varName[0].split("."),p.timer=g.later(e,p,function(){m=this._cache;C=m.length;n=this.win;for(z=
 
0;z<C;z+=1)if(n=n[m[z]],!n){this.attempts++;this.attempts++>this.maxattempts?(p.timer.cancel(),j(b,"Over retry limit, giving up")):YAHOO.log(m[z]+" failed, retrying");return}YAHOO.log("Safari poll complete");p.timer.cancel();h(b,k)},null,!0)):g.later(YAHOO.util.Get.POLL_FREQ,null,h,[b,k]))):i.onload=function(){YAHOO.log(b+" onload "+k,"info","Get");h(b,k)}};j=function(e,i){YAHOO.log("get failure: "+i,"warn","Get");var b=a[e],k;b.onFailure&&(k=b.scope||b.win,b.onFailure.call(k,l(b,i)))};h=function(e){if(a[e]){var i=
 
a[e],b=i.nodes,k=b.length,d=i.win.document.getElementsByTagName("head")[0],f,l;if(i.insertBefore&&(e=q(i.insertBefore,e)))d=e.parentNode;for(e=0;e<k;e+=1){f=b[e];if(f.clearAttributes)f.clearAttributes();else for(l in f)f.hasOwnProperty(l)&&delete f[l];d.removeChild(f)}i.nodes=[]}};return{POLL_FREQ:10,PURGE_THRESH:20,TIMEOUT:2E3,_finalize:function(e){YAHOO.log(e+" finalized ","info","Get");g.later(0,null,p,e)},abort:function(e){var e=g.isString(e)?e:e.tId,i=a[e];i&&(YAHOO.log("Aborting "+e,"info",
 
"Get"),i.aborted=!0)},script:function(e,a){return m("script",e,a)},css:function(e,a){return m("css",e,a)}}}();YAHOO.register("get",YAHOO.util.Get,{version:"2.9.0",build:"2800"});
 
(function(){var a,c,b,d,f,g=YAHOO,j=g.util,h=g.lang,e=g.env;f={yahoo:!0,get:!0};a={defaultSkin:"sam",base:"assets/skins/",path:"skin.css",after:["reset","fonts","grids","base"],rollup:3};c={animation:{type:"js",path:"animation/animation-min.js",requires:["dom","event"]},autocomplete:{type:"js",path:"autocomplete/autocomplete-min.js",requires:["dom","event","datasource"],optional:["connection","animation"],skinnable:!0},base:{type:"css",path:"base/base-min.css",after:["reset","fonts","grids"]},button:{type:"js",
 
path:"button/button-min.js",requires:["element"],optional:["menu"],skinnable:!0},calendar:{type:"js",path:"calendar/calendar-min.js",requires:["event","dom"],supersedes:["datemath"],skinnable:!0},carousel:{type:"js",path:"carousel/carousel-min.js",requires:["element"],optional:["animation"],skinnable:!0},charts:{type:"js",path:"charts/charts-min.js",requires:["element","json","datasource","swf"]},colorpicker:{type:"js",path:"colorpicker/colorpicker-min.js",requires:["slider","element"],optional:["animation"],
 
skinnable:!0},connection:{type:"js",path:"connection/connection-min.js",requires:["event"],supersedes:["connectioncore"]},connectioncore:{type:"js",path:"connection/connection_core-min.js",requires:["event"],pkg:"connection"},container:{type:"js",path:"container/container-min.js",requires:["dom","event"],optional:["dragdrop","animation","connection"],supersedes:["containercore"],skinnable:!0},containercore:{type:"js",path:"container/container_core-min.js",requires:["dom","event"],pkg:"container"},
 
cookie:{type:"js",path:"cookie/cookie-min.js",requires:["yahoo"]},datasource:{type:"js",path:"datasource/datasource-min.js",requires:["event"],optional:["connection"]},datatable:{type:"js",path:"datatable/datatable-min.js",requires:["element","datasource"],optional:["calendar","dragdrop","paginator"],skinnable:!0},datemath:{type:"js",path:"datemath/datemath-min.js",requires:["yahoo"]},dom:{type:"js",path:"dom/dom-min.js",requires:["yahoo"]},dragdrop:{type:"js",path:"dragdrop/dragdrop-min.js",requires:["dom",
 
"event"]},editor:{type:"js",path:"editor/editor-min.js",requires:["menu","element","button"],optional:["animation","dragdrop"],supersedes:["simpleeditor"],skinnable:!0},element:{type:"js",path:"element/element-min.js",requires:["dom","event"],optional:["event-mouseenter","event-delegate"]},"element-delegate":{type:"js",path:"element-delegate/element-delegate-min.js",requires:["element"]},event:{type:"js",path:"event/event-min.js",requires:["yahoo"]},"event-simulate":{type:"js",path:"event-simulate/event-simulate-min.js",
 
requires:["event"]},"event-delegate":{type:"js",path:"event-delegate/event-delegate-min.js",requires:["event"],optional:["selector"]},"event-mouseenter":{type:"js",path:"event-mouseenter/event-mouseenter-min.js",requires:["dom","event"]},fonts:{type:"css",path:"fonts/fonts-min.css"},get:{type:"js",path:"get/get-min.js",requires:["yahoo"]},grids:{type:"css",path:"grids/grids-min.css",requires:["fonts"],optional:["reset"]},history:{type:"js",path:"history/history-min.js",requires:["event"]},imagecropper:{type:"js",
 
path:"imagecropper/imagecropper-min.js",requires:["dragdrop","element","resize"],skinnable:!0},imageloader:{type:"js",path:"imageloader/imageloader-min.js",requires:["event","dom"]},json:{type:"js",path:"json/json-min.js",requires:["yahoo"]},layout:{type:"js",path:"layout/layout-min.js",requires:["element"],optional:["animation","dragdrop","resize","selector"],skinnable:!0},logger:{type:"js",path:"logger/logger-min.js",requires:["event","dom"],optional:["dragdrop"],skinnable:!0},menu:{type:"js",path:"menu/menu-min.js",
 
requires:["containercore"],skinnable:!0},paginator:{type:"js",path:"paginator/paginator-min.js",requires:["element"],skinnable:!0},profiler:{type:"js",path:"profiler/profiler-min.js",requires:["yahoo"]},profilerviewer:{type:"js",path:"profilerviewer/profilerviewer-min.js",requires:["profiler","yuiloader","element"],skinnable:!0},progressbar:{type:"js",path:"progressbar/progressbar-min.js",requires:["element"],optional:["animation"],skinnable:!0},reset:{type:"css",path:"reset/reset-min.css"},"reset-fonts-grids":{type:"css",
 
path:"reset-fonts-grids/reset-fonts-grids.css",supersedes:["reset","fonts","grids","reset-fonts"],rollup:4},"reset-fonts":{type:"css",path:"reset-fonts/reset-fonts.css",supersedes:["reset","fonts"],rollup:2},resize:{type:"js",path:"resize/resize-min.js",requires:["dragdrop","element"],optional:["animation"],skinnable:!0},selector:{type:"js",path:"selector/selector-min.js",requires:["yahoo","dom"]},simpleeditor:{type:"js",path:"editor/simpleeditor-min.js",requires:["element"],optional:["containercore",
 
"menu","button","animation","dragdrop"],skinnable:!0,pkg:"editor"},slider:{type:"js",path:"slider/slider-min.js",requires:["dragdrop"],optional:["animation"],skinnable:!0},storage:{type:"js",path:"storage/storage-min.js",requires:["yahoo","event","cookie"],optional:["swfstore"]},stylesheet:{type:"js",path:"stylesheet/stylesheet-min.js",requires:["yahoo"]},swf:{type:"js",path:"swf/swf-min.js",requires:["element"],supersedes:["swfdetect"]},swfdetect:{type:"js",path:"swfdetect/swfdetect-min.js",requires:["yahoo"]},
 
swfstore:{type:"js",path:"swfstore/swfstore-min.js",requires:["element","cookie","swf"]},tabview:{type:"js",path:"tabview/tabview-min.js",requires:["element"],optional:["connection"],skinnable:!0},treeview:{type:"js",path:"treeview/treeview-min.js",requires:["event","dom"],optional:["json","animation","calendar"],skinnable:!0},uploader:{type:"js",path:"uploader/uploader-min.js",requires:["element"]},utilities:{type:"js",path:"utilities/utilities.js",supersedes:"yahoo event dragdrop animation dom connection element yahoo-dom-event get yuiloader yuiloader-dom-event".split(" "),
 
rollup:8},yahoo:{type:"js",path:"yahoo/yahoo-min.js"},"yahoo-dom-event":{type:"js",path:"yahoo-dom-event/yahoo-dom-event.js",supersedes:["yahoo","event","dom"],rollup:3},yuiloader:{type:"js",path:"yuiloader/yuiloader-min.js",supersedes:["yahoo","get"]},"yuiloader-dom-event":{type:"js",path:"yuiloader-dom-event/yuiloader-dom-event.js",supersedes:"yahoo dom event get yuiloader yahoo-dom-event".split(" "),rollup:5},yuitest:{type:"js",path:"yuitest/yuitest-min.js",requires:["logger"],optional:["event-simulate"],
 
skinnable:!0}};b={appendArray:function(e,a){if(a)for(var b=0;b<a.length;b+=1)e[a[b]]=!0},keys:function(e){var a=[],b;for(b in e)h.hasOwnProperty(e,b)&&a.push(b);return a}};d={appendArray:function(e,a){Array.prototype.push.apply(e,a)},indexOf:function(e,a){for(var b=0;b<e.length;b+=1)if(e[b]===a)return b;return-1},toObject:function(e){for(var a={},b=0;b<e.length;b+=1)a[e[b]]=!0;return a},uniq:function(e){return b.keys(d.toObject(e))}};YAHOO.util.YUILoader=function(i){this._internalCallback=null;this._useYahooListener=
 
!1;this.onSuccess=null;this.onFailure=g.log;this.onTimeout=this.onProgress=null;this.scope=this;this.varName=this.charset=this.insertBefore=this.data=null;this.base="http://yui.yahooapis.com/2.9.0/build/";this.comboBase="http://yui.yahooapis.com/combo?";this.combine=!1;this.root="2.9.0/build/";this.timeout=0;this.force=this.ignore=null;this.allowRollup=!0;this.filter=null;this.required={};this.moduleInfo=h.merge(c);this.rollups=null;this.loadOptional=!1;this.sorted=[];this.loaded={};this.dirty=!0;
 
this.inserted={};var b=this;e.listeners.push(function(e){b._useYahooListener&&b.loadNext(e.name)});this.skin=h.merge(a);this._config(i)};g.util.YUILoader.prototype={FILTERS:{RAW:{searchExp:"-min\\.js",replaceStr:".js"},DEBUG:{searchExp:"-min\\.js",replaceStr:"-debug.js"}},SKIN_PREFIX:"skin-",_config:function(e){if(e)for(var a in e)h.hasOwnProperty(e,a)&&("require"==a?this.require(e[a]):this[a]=e[a]);e=this.filter;h.isString(e)&&(e=e.toUpperCase(),"DEBUG"===e&&this.require("logger"),g.widget.LogWriter||
 
(g.widget.LogWriter=function(){return g}),this.filter=this.FILTERS[e])},addModule:function(e){if(!e||!e.name||!e.type||!e.path&&!e.fullpath)return!1;e.ext="ext"in e?e.ext:!0;e.requires=e.requires||[];this.moduleInfo[e.name]=e;return this.dirty=!0},require:function(e){var a="string"===typeof e?arguments:e;this.dirty=!0;b.appendArray(this.required,a)},_addSkin:function(e,a){var b=this.formatSkin(e),d=this.moduleInfo,f=this.skin,c=d[a]&&d[a].ext;d[b]||this.addModule({name:b,type:"css",path:f.base+e+
 
"/"+f.path,after:f.after,rollup:f.rollup,ext:c});a&&(b=this.formatSkin(e,a),d[b]||this.addModule({name:b,type:"css",after:f.after,path:(d[a].pkg||a)+"/"+f.base+e+"/"+a+".css",ext:c}));return b},getRequires:function(e){if(!e)return[];if(!this.dirty&&e.expanded)return e.expanded;e.requires=e.requires||[];var a,b=[],f=e.requires,c=e.optional,g=this.moduleInfo,h;for(a=0;a<f.length;a+=1)b.push(f[a]),h=g[f[a]],d.appendArray(b,this.getRequires(h));if(c&&this.loadOptional)for(a=0;a<c.length;a+=1)b.push(c[a]),
 
d.appendArray(b,this.getRequires(g[c[a]]));e.expanded=d.uniq(b);return e.expanded},getProvides:function(e,a){var b=!a?"_provides":"_supersedes",d=this.moduleInfo[e],f={};if(!d)return f;if(d[b])return d[b];var c=d.supersedes,g={};if(c)for(var j=0;j<c.length;j+=1){var r=c[j];g[r]||(g[r]=!0,h.augmentObject(f,this.getProvides(r)))}d._supersedes=f;d._provides=h.merge(f);d._provides[e]=!0;return d[b]},calculate:function(e){if(e||this.dirty)this._config(e),this._setup(),this._explode(),this.allowRollup&&
 
this._rollup(),this._reduce(),this._sort(),this.dirty=!1},_setup:function(){var a=this.moduleInfo,k,f,c;for(k in a)if(h.hasOwnProperty(a,k)){var g=a[k];if(g&&g.skinnable){var j=this.skin.overrides,o;if(j&&j[k])for(f=0;f<j[k].length;f+=1)o=this._addSkin(j[k][f],k);else o=this._addSkin(this.skin.defaultSkin,k);-1==d.indexOf(g.requires,o)&&g.requires.push(o)}}a=h.merge(this.inserted);this._sandbox||(a=h.merge(a,e.modules));this.ignore&&b.appendArray(a,this.ignore);if(this.force)for(f=0;f<this.force.length;f+=
 
1)this.force[f]in a&&delete a[this.force[f]];for(c in a)h.hasOwnProperty(a,c)&&h.augmentObject(a,this.getProvides(c));this.loaded=a},_explode:function(){var e=this.required,a,d;for(a in e)if(h.hasOwnProperty(e,a)&&(d=this.moduleInfo[a]))(d=this.getRequires(d))&&b.appendArray(e,d)},_skin:function(){},formatSkin:function(e,a){var b=this.SKIN_PREFIX+e;a&&(b=b+"-"+a);return b},parseSkin:function(e){return 0===e.indexOf(this.SKIN_PREFIX)?(e=e.split("-"),{skin:e[1],module:e[2]}):null},_rollup:function(){var e,
 
a,b,d,c={},g=this.required,j,m=this.moduleInfo;if(this.dirty||!this.rollups){for(e in m)h.hasOwnProperty(m,e)&&(b=m[e])&&b.rollup&&(c[e]=b);this.rollups=c}for(;;){var r=!1;for(e in c)if(!g[e]&&!this.loaded[e]&&(b=m[e],d=b.supersedes,j=!1,b.rollup)){var s=0;if(b.ext?0:this.parseSkin(e))for(a in g){if(h.hasOwnProperty(g,a)&&(e!==a&&this.parseSkin(a))&&(s++,j=s>=b.rollup))break}else for(a=0;a<d.length;a+=1)if(this.loaded[d[a]]&&!f[d[a]]){j=!1;break}else if(g[d[a]]&&(s++,j=s>=b.rollup))break;j&&(r=g[e]=
 
!0,this.getRequires(b))}if(!r)break}},_reduce:function(){var e,a,b,d=this.required;for(e in d)if(e in this.loaded)delete d[e];else if(b=this.parseSkin(e)){if(!b.module){var f=this.SKIN_PREFIX+b.skin;for(a in d)h.hasOwnProperty(d,a)&&(b=this.moduleInfo[a],(!b||!b.ext)&&(a!==e&&-1<a.indexOf(f))&&delete d[a])}}else if(b=(b=this.moduleInfo[e])&&b.supersedes)for(a=0;a<b.length;a+=1)b[a]in d&&delete d[b[a]]},_onFailure:function(e){YAHOO.log("Failure","info","loader");var a=this.onFailure;a&&a.call(this.scope,
 
{msg:"failure: "+e,data:this.data,success:!1})},_onTimeout:function(){YAHOO.log("Timeout","info","loader");var e=this.onTimeout;e&&e.call(this.scope,{msg:"timeout",data:this.data,success:!1})},_sort:function(){var e=[],a=this.moduleInfo,b=this.loaded,f=!this.loadOptional,c=function(e,i){var g=a[e];if(b[i]||!g)return!1;var h;h=g.expanded;var j=g.after,o=a[i],m=g.optional;if(h&&-1<d.indexOf(h,i)||j&&-1<d.indexOf(j,i)||f&&m&&-1<d.indexOf(m,i))return!0;if(j=a[i]&&a[i].supersedes)for(h=0;h<j.length;h+=
 
1)if(c(e,j[h]))return!0;return g.ext&&"css"==g.type&&!o.ext&&"css"==o.type?!0:!1},g;for(g in this.required)h.hasOwnProperty(this.required,g)&&e.push(g);for(g=0;;){var j=e.length,m,r,s,t=!1;for(r=g;r<j;r+=1){m=e[r];for(s=r+1;s<j;s+=1)if(c(m,e[s])){m=e.splice(s,1);e.splice(r,0,m[0]);t=!0;break}if(t)break;else g+=1}if(!t)break}this.sorted=e},toString:function(){h.dump({type:"YUILoader",base:this.base,filter:this.filter,required:this.required,loaded:this.loaded,inserted:this.inserted},1)},_combine:function(){this._combining=
 
[];var e=this,a=this.sorted,b=a.length,d=this.comboBase,f=this.comboBase,c,g=d.length,h,j,s=this.loadType;YAHOO.log("type "+s);for(h=0;h<b;h+=1)if((j=this.moduleInfo[a[h]])&&!j.ext&&(!s||s===j.type))c=this.root+j.path,c+="&","js"==j.type?d+=c:f+=c,this._combining.push(a[h]);if(this._combining.length){YAHOO.log("Attempting to combine: "+this._combining,"info","loader");var t=function(e){var a=this._combining,i=a.length,b;for(b=0;b<i;b+=1)this.inserted[a[b]]=!0;this.loadNext(e.data)},a=function(){d.length>
 
g?YAHOO.util.Get.script(e._filter(d),{data:e._loading,onSuccess:t,onFailure:e._onFailure,onTimeout:e._onTimeout,insertBefore:e.insertBefore,charset:e.charset,timeout:e.timeout,scope:e}):this.loadNext()};f.length>g?YAHOO.util.Get.css(this._filter(f),{data:this._loading,onSuccess:a,onFailure:this._onFailure,onTimeout:this._onTimeout,insertBefore:this.insertBefore,charset:this.charset,timeout:this.timeout,scope:e}):a()}else this.loadNext(this._loading)},insert:function(e,a){this.calculate(e);this._loading=
 
!0;this.loadType=a;if(this.combine)return this._combine();if(a)this.loadNext();else{var b=this;this._internalCallback=function(){b._internalCallback=null;b.insert(null,"js")};this.insert(null,"css")}},sandbox:function(e,a){var b=this,d=function(e){var a=e.argument[2];b._scriptText[e.argument[0]]=e.responseText;b.onProgress&&b.onProgress.call(b.scope,{name:a,scriptText:e.responseText,xhrResponse:e,data:b.data});b._loadCount++;b._loadCount>=b._stopCount&&(e="\nreturn "+(b.varName||"YAHOO")+";\n})();",
 
e=eval("(function() {\n"+b._scriptText.join("\n")+e),b._pushEvents(e),e?b.onSuccess.call(b.scope,{reference:e,data:b.data}):b._onFailure.call(b.varName+" reference failure"))},f=function(e){b.onFailure.call(b.scope,{msg:"XHR failure",xhrResponse:e,data:b.data})};b._config(e);if(!b.onSuccess)throw Error("You must supply an onSuccess handler for your sandbox");b._sandbox=!0;if(!a||"js"!==a)b._internalCallback=function(){b._internalCallback=null;b.sandbox(null,"js")},b.insert(null,"css");else if(j.Connect){b._scriptText=
 
[];b._loadCount=0;b._stopCount=b.sorted.length;b._xhr=[];b.calculate();var c=b.sorted,g=c.length,h,r,s;for(h=0;h<g;h+=1){r=b.moduleInfo[c[h]];if(!r){b._onFailure("undefined module "+r);for(d=0;d<b._xhr.length;d+=1)b._xhr[d].abort();break}"js"!==r.type?b._loadCount++:(s=(s=r.fullpath)?b._filter(s):b._url(r.path),b._xhr.push(j.Connect.asyncRequest("GET",s,{success:d,failure:f,scope:b,argument:[h,s,c[h]]})))}}else(new YAHOO.util.YUILoader).insert({base:b.base,filter:b.filter,require:"connection",insertBefore:b.insertBefore,
 
charset:b.charset,onSuccess:function(){b.sandbox(null,"js")},scope:b},"js")},loadNext:function(a){if(this._loading){var b=this,d=function(e){b.loadNext(e.data)},f=this.sorted,c=f.length,g,h;if(a){if(a!==this._loading)return;this.inserted[a]=!0;this.onProgress&&this.onProgress.call(this.scope,{name:a,data:this.data})}for(a=0;a<c;a+=1)if(!(f[a]in this.inserted)){if(f[a]===this._loading)return;g=this.moduleInfo[f[a]];if(!g){this.onFailure.call(this.scope,{msg:"undefined module "+g,data:this.data});return}if(!this.loadType||
 
this.loadType===g.type){this._loading=f[a];c="css"===g.type?j.Get.css:j.Get.script;h=(h=g.fullpath)?this._filter(h):this._url(g.path);e.ua.webkit&&(420>e.ua.webkit&&"js"===g.type&&!g.varName)&&(d=null,this._useYahooListener=!0);c(h,{data:f[a],onSuccess:d,onFailure:this._onFailure,onTimeout:this._onTimeout,insertBefore:this.insertBefore,charset:this.charset,timeout:this.timeout,varName:g.varName,scope:b});return}}this._loading=null;this._internalCallback?(f=this._internalCallback,this._internalCallback=
 
null,f.call(this)):this.onSuccess&&(this._pushEvents(),this.onSuccess.call(this.scope,{data:this.data}))}},_pushEvents:function(e){e=e||YAHOO;e.util&&e.util.Event&&e.util.Event._load()},_filter:function(e){var a=this.filter;return a?e.replace(RegExp(a.searchExp,"g"),a.replaceStr):e},_url:function(e){return this._filter((this.base||"")+e)}}})();YAHOO.register("yuiloader",YAHOO.util.YUILoader,{version:"2.9.0",build:"2800"});
 
(function(){YAHOO.env._id_counter=YAHOO.env._id_counter||0;var a=YAHOO.util,c=YAHOO.lang,b=YAHOO.env.ua,d=YAHOO.lang.trim,f={},g={},j=/^t(?:able|d|h)$/i,h=/color$/i,e=window.document,i=e.documentElement,k=b.opera,l=b.webkit,q=b.gecko,p=b.ie;a.Dom={CUSTOM_ATTRIBUTES:!i.hasAttribute?{"for":"htmlFor","class":"className"}:{htmlFor:"for",className:"class"},DOT_ATTRIBUTES:{checked:!0},get:function(i){var b,d,f,k;b=null;if(i){if("string"==typeof i||"number"==typeof i){b=i+"";f=(i=e.getElementById(i))?i.attributes:
 
null;if(i&&f&&f.id&&f.id.value===b)return i;if(i&&e.all&&(i=null,(d=e.all[b])&&d.length)){f=0;for(k=d.length;f<k;++f)if(d[f].id===b)return d[f]}}else if(a.Element&&i instanceof a.Element)i=i.get("element");else if(!i.nodeType&&"length"in i){b=[];f=0;for(k=i.length;f<k;++f)b[b.length]=a.Dom.get(i[f]);i=b}b=i}return b},getComputedStyle:function(e,i){if(window.getComputedStyle)return e.ownerDocument.defaultView.getComputedStyle(e,null)[i];if(e.currentStyle)return a.Dom.IE_ComputedStyle.get(e,i)},getStyle:function(e,
 
i){return a.Dom.batch(e,a.Dom._getStyle,i)},_getStyle:function(){if(window.getComputedStyle)return function(e,i){var i="float"===i?i="cssFloat":a.Dom._toCamel(i),b=e.style[i],d;b||(d=e.ownerDocument.defaultView.getComputedStyle(e,null))&&(b=d[i]);return b};if(i.currentStyle)return function(e,i){var b;switch(i){case "opacity":b=100;try{b=e.filters["DXImageTransform.Microsoft.Alpha"].opacity}catch(d){try{b=e.filters("alpha").opacity}catch(f){}}return b/100;case "float":i="styleFloat";default:return i=
 
a.Dom._toCamel(i),b=e.currentStyle?e.currentStyle[i]:null,e.style[i]||b}}}(),setStyle:function(e,i,b){a.Dom.batch(e,a.Dom._setStyle,{prop:i,val:b})},_setStyle:function(){return!window.getComputedStyle&&e.documentElement.currentStyle?function(e,i){var b=a.Dom._toCamel(i.prop),d=i.val;if(e)switch(b){case "opacity":if(""===d||null===d||1===d)e.style.removeAttribute("filter");else if(c.isString(e.style.filter)&&(e.style.filter="alpha(opacity="+100*d+")",!e.currentStyle||!e.currentStyle.hasLayout))e.style.zoom=
 
1;break;case "float":b="styleFloat";default:e.style[b]=d}}:function(e,i){var b=a.Dom._toCamel(i.prop),d=i.val;e&&("float"==b&&(b="cssFloat"),e.style[b]=d)}}(),getXY:function(e){return a.Dom.batch(e,a.Dom._getXY)},_canPosition:function(e){return"none"!==a.Dom._getStyle(e,"display")&&a.Dom._inDoc(e)},_getXY:function(e){var i,b,d=Math.round;b=!1;if(a.Dom._canPosition(e)){b=e.getBoundingClientRect();i=e.ownerDocument;e=a.Dom.getDocumentScrollLeft(i);i=a.Dom.getDocumentScrollTop(i);b=[b.left,b.top];if(i||
 
e)b[0]+=e,b[1]+=i;b[0]=d(b[0]);b[1]=d(b[1])}return b},getX:function(e){return a.Dom.batch(e,function(e){return a.Dom.getXY(e)[0]},a.Dom,!0)},getY:function(e){return a.Dom.batch(e,function(e){return a.Dom.getXY(e)[1]},a.Dom,!0)},setXY:function(e,i,b){a.Dom.batch(e,a.Dom._setXY,{pos:i,noRetry:b})},_setXY:function(e,i){var b=a.Dom._getStyle(e,"position"),d=a.Dom.setStyle,f=i.pos,k=i.noRetry,c=[parseInt(a.Dom.getComputedStyle(e,"left"),10),parseInt(a.Dom.getComputedStyle(e,"top"),10)],g;g=a.Dom._getXY(e);
 
if(!f||!1===g)return!1;"static"==b&&(b="relative",d(e,"position",b));isNaN(c[0])&&(c[0]="relative"==b?0:e.offsetLeft);isNaN(c[1])&&(c[1]="relative"==b?0:e.offsetTop);null!==f[0]&&d(e,"left",f[0]-g[0]+c[0]+"px");null!==f[1]&&d(e,"top",f[1]-g[1]+c[1]+"px");k||(b=a.Dom._getXY(e),(null!==f[0]&&b[0]!=f[0]||null!==f[1]&&b[1]!=f[1])&&a.Dom._setXY(e,{pos:f,noRetry:!0}))},setX:function(e,i){a.Dom.setXY(e,[i,null])},setY:function(e,i){a.Dom.setXY(e,[null,i])},getRegion:function(e){return a.Dom.batch(e,function(e){var i=
 
!1;a.Dom._canPosition(e)&&(i=a.Region.getRegion(e));return i},a.Dom,!0)},getClientWidth:function(){return a.Dom.getViewportWidth()},getClientHeight:function(){return a.Dom.getViewportHeight()},getElementsByClassName:function(i,b,d,f,k,c){b=b||"*";d=d?a.Dom.get(d):e;if(!d)return[];for(var g=[],b=d.getElementsByTagName(b),d=a.Dom.hasClass,l=0,h=b.length;l<h;++l)d(b[l],i)&&(g[g.length]=b[l]);f&&a.Dom.batch(g,f,k,c);return g},hasClass:function(e,i){return a.Dom.batch(e,a.Dom._hasClass,i)},_hasClass:function(e,
 
i){var b=!1;e&&i&&((b=a.Dom._getAttribute(e,"className")||"")&&(b=b.replace(/\s+/g," ")),b=i.exec?i.test(b):i&&-1<(" "+b+" ").indexOf(" "+i+" "));return b},addClass:function(e,i){return a.Dom.batch(e,a.Dom._addClass,i)},_addClass:function(e,i){var b=!1,f;e&&i&&(f=a.Dom._getAttribute(e,"className")||"",a.Dom._hasClass(e,i)||(a.Dom.setAttribute(e,"className",d(f+" "+i)),b=!0));return b},removeClass:function(e,i){return a.Dom.batch(e,a.Dom._removeClass,i)},_removeClass:function(e,i){var b=!1,f,k;e&&
 
i&&(f=a.Dom._getAttribute(e,"className")||"",a.Dom.setAttribute(e,"className",f.replace(a.Dom._getClassRegex(i),"")),k=a.Dom._getAttribute(e,"className"),f!==k&&(a.Dom.setAttribute(e,"className",d(k)),b=!0,""===a.Dom._getAttribute(e,"className")&&(f=e.hasAttribute&&e.hasAttribute("class")?"class":"className",e.removeAttribute(f))));return b},replaceClass:function(e,i,b){return a.Dom.batch(e,a.Dom._replaceClass,{from:i,to:b})},_replaceClass:function(e,i){var b,f,k=!1;e&&i&&(b=i.from,(f=i.to)?b?b!==
 
f&&(k=a.Dom._getAttribute(e,"className")||"",b=(" "+k.replace(a.Dom._getClassRegex(b)," "+f).replace(/\s+/g," ")).split(a.Dom._getClassRegex(f)),b.splice(1,0," "+f),a.Dom.setAttribute(e,"className",d(b.join(""))),k=!0):k=a.Dom._addClass(e,i.to):k=!1);return k},generateId:function(e,i){var i=i||"yui-gen",b=function(e){if(e&&e.id)return e.id;var b=i+YAHOO.env._id_counter++;if(e){if(e.ownerDocument&&e.ownerDocument.getElementById(b))return a.Dom.generateId(e,b+i);e.id=b}return b};return a.Dom.batch(e,
 
b,a.Dom,!0)||b.apply(a.Dom,arguments)},isAncestor:function(e,i){var e=a.Dom.get(e),i=a.Dom.get(i),b=!1;e&&i&&(e.nodeType&&i.nodeType)&&(e.contains&&e!==i?b=e.contains(i):e.compareDocumentPosition&&(b=!!(e.compareDocumentPosition(i)&16)));return b},inDocument:function(e,i){return a.Dom._inDoc(a.Dom.get(e),i)},_inDoc:function(e,i){var b=!1;e&&e.tagName&&(i=i||e.ownerDocument,b=a.Dom.isAncestor(i.documentElement,e));return b},getElementsBy:function(i,b,d,f,k,c,g){var b=b||"*",d=d?a.Dom.get(d):e,l=g?
 
null:[];if(d){for(var b=d.getElementsByTagName(b),d=0,h=b.length;d<h;++d)if(i(b[d]))if(g){l=b[d];break}else l[l.length]=b[d];f&&a.Dom.batch(l,f,k,c)}return l},getElementBy:function(e,i,b){return a.Dom.getElementsBy(e,i,b,null,null,null,!0)},batch:function(e,i,b,d){var f=[],d=d?b:null;if((e=e&&(e.tagName||e.item)?e:a.Dom.get(e))&&i){if(e.tagName||void 0===e.length)return i.call(d,e,b);for(var k=0;k<e.length;++k)f[f.length]=i.call(d||e[k],e[k],b)}else return!1;return f},getDocumentHeight:function(){return Math.max("CSS1Compat"!=
 
e.compatMode||l?e.body.scrollHeight:i.scrollHeight,a.Dom.getViewportHeight())},getDocumentWidth:function(){return Math.max("CSS1Compat"!=e.compatMode||l?e.body.scrollWidth:i.scrollWidth,a.Dom.getViewportWidth())},getViewportHeight:function(){var a=self.innerHeight,b=e.compatMode;if((b||p)&&!k)a="CSS1Compat"==b?i.clientHeight:e.body.clientHeight;return a},getViewportWidth:function(){var a=self.innerWidth,b=e.compatMode;if(b||p)a="CSS1Compat"==b?i.clientWidth:e.body.clientWidth;return a},getAncestorBy:function(e,
 
i){for(;e=e.parentNode;)if(a.Dom._testElement(e,i))return e;return null},getAncestorByClassName:function(e,i){e=a.Dom.get(e);return!e?null:a.Dom.getAncestorBy(e,function(e){return a.Dom.hasClass(e,i)})},getAncestorByTagName:function(e,i){e=a.Dom.get(e);return!e?null:a.Dom.getAncestorBy(e,function(e){return e.tagName&&e.tagName.toUpperCase()==i.toUpperCase()})},getPreviousSiblingBy:function(e,i){for(;e;)if(e=e.previousSibling,a.Dom._testElement(e,i))return e;return null},getPreviousSibling:function(e){e=
 
a.Dom.get(e);return!e?null:a.Dom.getPreviousSiblingBy(e)},getNextSiblingBy:function(e,i){for(;e;)if(e=e.nextSibling,a.Dom._testElement(e,i))return e;return null},getNextSibling:function(e){e=a.Dom.get(e);return!e?null:a.Dom.getNextSiblingBy(e)},getFirstChildBy:function(e,i){return(a.Dom._testElement(e.firstChild,i)?e.firstChild:null)||a.Dom.getNextSiblingBy(e.firstChild,i)},getFirstChild:function(e){e=a.Dom.get(e);return!e?null:a.Dom.getFirstChildBy(e)},getLastChildBy:function(e,i){return!e?null:
 
(a.Dom._testElement(e.lastChild,i)?e.lastChild:null)||a.Dom.getPreviousSiblingBy(e.lastChild,i)},getLastChild:function(e){e=a.Dom.get(e);return a.Dom.getLastChildBy(e)},getChildrenBy:function(e,i){var b=a.Dom.getFirstChildBy(e,i),d=b?[b]:[];a.Dom.getNextSiblingBy(b,function(e){if(!i||i(e))d[d.length]=e;return!1});return d},getChildren:function(e){e=a.Dom.get(e);return a.Dom.getChildrenBy(e)},getDocumentScrollLeft:function(a){a=a||e;return Math.max(a.documentElement.scrollLeft,a.body.scrollLeft)},
 
getDocumentScrollTop:function(a){a=a||e;return Math.max(a.documentElement.scrollTop,a.body.scrollTop)},insertBefore:function(e,i){e=a.Dom.get(e);i=a.Dom.get(i);return!e||!i||!i.parentNode?null:i.parentNode.insertBefore(e,i)},insertAfter:function(e,i){e=a.Dom.get(e);i=a.Dom.get(i);return!e||!i||!i.parentNode?null:i.nextSibling?i.parentNode.insertBefore(e,i.nextSibling):i.parentNode.appendChild(e)},getClientRegion:function(){var e=a.Dom.getDocumentScrollTop(),i=a.Dom.getDocumentScrollLeft(),b=a.Dom.getViewportWidth()+
 
i,d=a.Dom.getViewportHeight()+e;return new a.Region(e,b,d,i)},setAttribute:function(e,i,b){a.Dom.batch(e,a.Dom._setAttribute,{attr:i,val:b})},_setAttribute:function(e,i){var b=a.Dom._toCamel(i.attr),d=i.val;e&&e.setAttribute&&(a.Dom.DOT_ATTRIBUTES[b]&&e.tagName&&"BUTTON"!=e.tagName?e[b]=d:(b=a.Dom.CUSTOM_ATTRIBUTES[b]||b,e.setAttribute(b,d)))},getAttribute:function(e,i){return a.Dom.batch(e,a.Dom._getAttribute,i)},_getAttribute:function(e,i){var b,i=a.Dom.CUSTOM_ATTRIBUTES[i]||i;a.Dom.DOT_ATTRIBUTES[i]?
 
b=e[i]:e&&"getAttribute"in e&&(b=/^(?:href|src)$/.test(i)?e.getAttribute(i,2):e.getAttribute(i));return b},_toCamel:function(e){function a(e,i){return i.toUpperCase()}return f[e]||(f[e]=-1===e.indexOf("-")?e:e.replace(/-([a-z])/gi,a))},_getClassRegex:function(e){var i;void 0!==e&&(e.exec?i=e:(i=g[e],i||(e=e.replace(a.Dom._patterns.CLASS_RE_TOKENS,"\\$1"),e=e.replace(/\s+/g," "),i=g[e]=RegExp("(?:^|\\s)"+e+"(?= |$)","g"))));return i},_patterns:{ROOT_TAG:/^body|html$/i,CLASS_RE_TOKENS:/([\.\(\)\^\$\*\+\?\|\[\]\{\}\\])/g},
 
_testElement:function(e,a){return e&&1==e.nodeType&&(!a||a(e))},_calcBorders:function(e,i){var b=parseInt(a.Dom.getComputedStyle(e,"borderTopWidth"),10)||0,d=parseInt(a.Dom.getComputedStyle(e,"borderLeftWidth"),10)||0;q&&j.test(e.tagName)&&(d=b=0);i[0]+=d;i[1]+=b;return i}};var n=a.Dom.getComputedStyle;b.opera&&(a.Dom.getComputedStyle=function(e,i){var b=n(e,i);h.test(i)&&(b=a.Dom.Color.toRGB(b));return b});b.webkit&&(a.Dom.getComputedStyle=function(e,a){var i=n(e,a);"rgba(0, 0, 0, 0)"===i&&(i="transparent");
 
return i});b.ie&&8<=b.ie&&(a.Dom.DOT_ATTRIBUTES.type=!0)})();YAHOO.util.Region=function(a,c,b,d){this.y=this.top=a;this[1]=a;this.right=c;this.bottom=b;this.x=this.left=d;this[0]=d;this.width=this.right-this.left;this.height=this.bottom-this.top};YAHOO.util.Region.prototype.contains=function(a){return a.left>=this.left&&a.right<=this.right&&a.top>=this.top&&a.bottom<=this.bottom};YAHOO.util.Region.prototype.getArea=function(){return(this.bottom-this.top)*(this.right-this.left)};
 
YAHOO.util.Region.prototype.intersect=function(a){var c=Math.max(this.top,a.top),b=Math.min(this.right,a.right),d=Math.min(this.bottom,a.bottom),a=Math.max(this.left,a.left);return d>=c&&b>=a?new YAHOO.util.Region(c,b,d,a):null};YAHOO.util.Region.prototype.union=function(a){var c=Math.min(this.top,a.top),b=Math.max(this.right,a.right),d=Math.max(this.bottom,a.bottom),a=Math.min(this.left,a.left);return new YAHOO.util.Region(c,b,d,a)};
 
YAHOO.util.Region.prototype.toString=function(){return"Region {top: "+this.top+", right: "+this.right+", bottom: "+this.bottom+", left: "+this.left+", height: "+this.height+", width: "+this.width+"}"};YAHOO.util.Region.getRegion=function(a){var c=YAHOO.util.Dom.getXY(a);return new YAHOO.util.Region(c[1],c[0]+a.offsetWidth,c[1]+a.offsetHeight,c[0])};YAHOO.util.Point=function(a,c){YAHOO.lang.isArray(a)&&(c=a[1],a=a[0]);YAHOO.util.Point.superclass.constructor.call(this,c,a,c,a)};
 
YAHOO.extend(YAHOO.util.Point,YAHOO.util.Region);
 
(function(){var a=YAHOO.util,c=/^width|height$/,b=/^(\d[.\d]*)+(em|ex|px|gd|rem|vw|vh|vm|ch|mm|cm|in|pt|pc|deg|rad|ms|s|hz|khz|%){1}?/i,d={get:function(d,f){var c="",c=d.currentStyle[f];return c="opacity"===f?a.Dom.getStyle(d,"opacity"):!c||c.indexOf&&-1<c.indexOf("px")?c:a.Dom.IE_COMPUTED[f]?a.Dom.IE_COMPUTED[f](d,f):b.test(c)?a.Dom.IE.ComputedStyle.getPixel(d,f):c},getOffset:function(a,b){var d=a.currentStyle[b],e=b.charAt(0).toUpperCase()+b.substr(1),i="offset"+e,f="pixel"+e,e="";"auto"==d?(e=
 
d=a[i],c.test(b)&&(a.style[b]=d,a[i]>d&&(e=d-(a[i]-d)),a.style[b]="auto")):(!a.style[f]&&!a.style[b]&&(a.style[b]=d),e=a.style[f]);return e+"px"},getBorderWidth:function(a,b){var d=null;a.currentStyle.hasLayout||(a.style.zoom=1);switch(b){case "borderTopWidth":d=a.clientTop;break;case "borderBottomWidth":d=a.offsetHeight-a.clientHeight-a.clientTop;break;case "borderLeftWidth":d=a.clientLeft;break;case "borderRightWidth":d=a.offsetWidth-a.clientWidth-a.clientLeft}return d+"px"},getPixel:function(a,
 
b){var d=null,e=a.currentStyle.right;a.style.right=a.currentStyle[b];d=a.style.pixelRight;a.style.right=e;return d+"px"},getMargin:function(b,d){return"auto"==b.currentStyle[d]?"0px":a.Dom.IE.ComputedStyle.getPixel(b,d)},getVisibility:function(a,b){for(var d;(d=a.currentStyle)&&"inherit"==d[b];)a=a.parentNode;return d?d[b]:"visible"},getColor:function(b,d){return a.Dom.Color.toRGB(b.currentStyle[d])||"transparent"},getBorderColor:function(b,d){var f=b.currentStyle;return a.Dom.Color.toRGB(a.Dom.Color.toHex(f[d]||
 
f.color))}},f={};f.top=f.right=f.bottom=f.left=f.width=f.height=d.getOffset;f.color=d.getColor;f.borderTopWidth=f.borderRightWidth=f.borderBottomWidth=f.borderLeftWidth=d.getBorderWidth;f.marginTop=f.marginRight=f.marginBottom=f.marginLeft=d.getMargin;f.visibility=d.getVisibility;f.borderColor=f.borderTopColor=f.borderRightColor=f.borderBottomColor=f.borderLeftColor=d.getBorderColor;a.Dom.IE_COMPUTED=f;a.Dom.IE_ComputedStyle=d})();
 
(function(){var a=parseInt,c=RegExp,b=YAHOO.util;b.Dom.Color={KEYWORDS:{black:"000",silver:"c0c0c0",gray:"808080",white:"fff",maroon:"800000",red:"f00",purple:"800080",fuchsia:"f0f",green:"008000",lime:"0f0",olive:"808000",yellow:"ff0",navy:"000080",blue:"00f",teal:"008080",aqua:"0ff"},re_RGB:/^rgb\(([0-9]+)\s*,\s*([0-9]+)\s*,\s*([0-9]+)\)$/i,re_hex:/^#?([0-9A-F]{2})([0-9A-F]{2})([0-9A-F]{2})$/i,re_hex3:/([0-9A-F])/gi,toRGB:function(d){b.Dom.Color.re_RGB.test(d)||(d=b.Dom.Color.toHex(d));b.Dom.Color.re_hex.exec(d)&&
 
(d="rgb("+[a(c.$1,16),a(c.$2,16),a(c.$3,16)].join(", ")+")");return d},toHex:function(a){a=b.Dom.Color.KEYWORDS[a]||a;if(b.Dom.Color.re_RGB.exec(a)){for(var a=[Number(c.$1).toString(16),Number(c.$2).toString(16),Number(c.$3).toString(16)],f=0;f<a.length;f++)2>a[f].length&&(a[f]="0"+a[f]);a=a.join("")}6>a.length&&(a=a.replace(b.Dom.Color.re_hex3,"$1$1"));"transparent"!==a&&0>a.indexOf("#")&&(a="#"+a);return a.toUpperCase()}}})();YAHOO.register("dom",YAHOO.util.Dom,{version:"2.9.0",build:"2800"});
 
YAHOO.util.CustomEvent=function(a,c,b,d,f){this.type=a;this.scope=c||window;this.silent=b;this.fireOnce=f;this.fired=!1;this.firedWith=null;this.signature=d||YAHOO.util.CustomEvent.LIST;this.subscribers=[];"_YUICEOnSubscribe"!==a&&(this.subscribeEvent=new YAHOO.util.CustomEvent("_YUICEOnSubscribe",this,!0));this.lastError=null};YAHOO.util.CustomEvent.LIST=0;YAHOO.util.CustomEvent.FLAT=1;
 
YAHOO.util.CustomEvent.prototype={subscribe:function(a,c,b){if(!a)throw Error("Invalid callback for subscriber to '"+this.type+"'");this.subscribeEvent&&this.subscribeEvent.fire(a,c,b);a=new YAHOO.util.Subscriber(a,c,b);this.fireOnce&&this.fired?this.notify(a,this.firedWith):this.subscribers.push(a)},unsubscribe:function(a,c){if(!a)return this.unsubscribeAll();for(var b=!1,d=0,f=this.subscribers.length;d<f;++d){var g=this.subscribers[d];g&&g.contains(a,c)&&(this._delete(d),b=!0)}return b},fire:function(){this.lastError=
 
null;var a=this.subscribers.length,c=[].slice.call(arguments,0),b=!0,d;if(this.fireOnce){if(this.fired)return!0;this.firedWith=c}this.fired=!0;if(!a&&this.silent)return!0;var f=this.subscribers.slice();for(d=0;d<a;++d){var g=f[d];if(g&&g.fn&&(b=this.notify(g,c),!1===b))break}return!1!==b},notify:function(a,c){var b,d=null,f=a.getScope(this.scope),g=YAHOO.util.Event.throwErrors;if(this.signature==YAHOO.util.CustomEvent.FLAT){0<c.length&&(d=c[0]);try{b=a.fn.call(f,d,a.obj)}catch(j){if(this.lastError=
 
j,g)throw j;}}else try{b=a.fn.call(f,this.type,c,a.obj)}catch(h){if(this.lastError=h,g)throw h;}return b},unsubscribeAll:function(){var a=this.subscribers.length,c;for(c=a-1;-1<c;c--)this._delete(c);this.subscribers=[];return a},_delete:function(a){var c=this.subscribers[a];c&&(delete c.fn,delete c.obj);this.subscribers.splice(a,1)},toString:function(){return"CustomEvent: '"+this.type+"', context: "+this.scope}};
 
YAHOO.util.Subscriber=function(a,c,b){this.fn=a;this.obj=YAHOO.lang.isUndefined(c)?null:c;this.overrideContext=b};YAHOO.util.Subscriber.prototype.getScope=function(a){return this.overrideContext?!0===this.overrideContext?this.obj:this.overrideContext:a};YAHOO.util.Subscriber.prototype.contains=function(a,c){return c?this.fn==a&&this.obj==c:this.fn==a};YAHOO.util.Subscriber.prototype.toString=function(){return"Subscriber { obj: "+this.obj+", overrideContext: "+(this.overrideContext||"no")+" }"};
 
YAHOO.util.Event||(YAHOO.util.Event=function(){var a=!1,c=[],b=[],d=0,f=[],g=0,j={63232:38,63233:40,63234:37,63235:39,63276:33,63277:34,25:9},h=YAHOO.env.ua.ie;return{POLL_RETRYS:500,POLL_INTERVAL:40,EL:0,TYPE:1,FN:2,WFN:3,UNLOAD_OBJ:3,ADJ_SCOPE:4,OBJ:5,OVERRIDE:6,CAPTURE:7,lastError:null,isSafari:YAHOO.env.ua.webkit,webkit:YAHOO.env.ua.webkit,isIE:h,_interval:null,_dri:null,_specialTypes:{focusin:h?"focusin":"focus",focusout:h?"focusout":"blur"},DOMReady:!1,throwErrors:!1,startInterval:function(){this._interval||
 
(this._interval=YAHOO.lang.later(this.POLL_INTERVAL,this,this._tryPreloadAttach,null,!0))},onAvailable:function(e,a,b,c,g){for(var e=YAHOO.lang.isString(e)?[e]:e,h=0;h<e.length;h+=1)f.push({id:e[h],fn:a,obj:b,overrideContext:c,checkReady:g});d=this.POLL_RETRYS;this.startInterval()},onContentReady:function(e,a,b,d){this.onAvailable(e,a,b,d,!0)},onDOMReady:function(){this.DOMReadyEvent.subscribe.apply(this.DOMReadyEvent,arguments)},_addListener:function(e,a,d,f,g,h){if(!d||!d.call)return!1;if(this._isValidCollection(e)){for(var j=
 
!0,o=0,m=e.length;o<m;++o)j=this.on(e[o],a,d,f,g)&&j;return j}if(YAHOO.lang.isString(e))if(j=this.getEl(e))e=j;else return this.onAvailable(e,function(){YAHOO.util.Event._addListener(e,a,d,f,g,h)}),!0;if(!e)return!1;if("unload"==a&&f!==this)return b[b.length]=[e,a,d,f,g],!0;var r=e;g&&(r=!0===g?f:g);j=function(a){return d.call(r,YAHOO.util.Event.getEvent(a,e),f)};c[c.length]=[e,a,d,j,r,f,g,h];try{this._simpleAdd(e,a,j,h)}catch(s){return this.lastError=s,this.removeListener(e,a,d),!1}return!0},_getType:function(e){return this._specialTypes[e]||
 
e},addListener:function(e,a,b,d,f){var c=("focusin"==a||"focusout"==a)&&!YAHOO.env.ua.ie?!0:!1;return this._addListener(e,this._getType(a),b,d,f,c)},addFocusListener:function(e,a,b,d){return this.on(e,"focusin",a,b,d)},removeFocusListener:function(e,a){return this.removeListener(e,"focusin",a)},addBlurListener:function(e,a,b,d){return this.on(e,"focusout",a,b,d)},removeBlurListener:function(e,a){return this.removeListener(e,"focusout",a)},removeListener:function(e,a,d,f){var g,a=this._getType(a);
 
if("string"==typeof e)e=this.getEl(e);else if(this._isValidCollection(e)){f=!0;for(g=e.length-1;-1<g;g--)f=this.removeListener(e[g],a,d)&&f;return f}if(!d||!d.call)return this.purgeElement(e,!1,a);if("unload"==a){for(g=b.length-1;-1<g;g--)if((f=b[g])&&f[0]==e&&f[1]==a&&f[2]==d)return b.splice(g,1),!0;return!1}g=null;"undefined"===typeof f&&(f=this._getCacheIndex(c,e,a,d));0<=f&&(g=c[f]);if(!e||!g)return!1;d=!0===g[this.CAPTURE]?!0:!1;try{this._simpleRemove(e,a,g[this.WFN],d)}catch(h){return this.lastError=
 
h,!1}delete c[f][this.WFN];delete c[f][this.FN];c.splice(f,1);return!0},getTarget:function(e){return this.resolveTextNode(e.target||e.srcElement)},resolveTextNode:function(e){try{if(e&&3==e.nodeType)return e.parentNode}catch(a){return null}return e},getPageX:function(e){var a=e.pageX;!a&&0!==a&&(a=e.clientX||0,this.isIE&&(a+=this._getScrollLeft()));return a},getPageY:function(e){var a=e.pageY;!a&&0!==a&&(a=e.clientY||0,this.isIE&&(a+=this._getScrollTop()));return a},getXY:function(e){return[this.getPageX(e),
 
this.getPageY(e)]},getRelatedTarget:function(e){var a=e.relatedTarget;a||("mouseout"==e.type?a=e.toElement:"mouseover"==e.type&&(a=e.fromElement));return this.resolveTextNode(a)},getTime:function(e){if(!e.time){var a=(new Date).getTime();try{e.time=a}catch(b){return this.lastError=b,a}}return e.time},stopEvent:function(e){this.stopPropagation(e);this.preventDefault(e)},stopPropagation:function(e){e.stopPropagation?e.stopPropagation():e.cancelBubble=!0},preventDefault:function(e){e.preventDefault?
 
e.preventDefault():e.returnValue=!1},getEvent:function(e){e=e||window.event;if(!e)for(var a=this.getEvent.caller;a&&!((e=a.arguments[0])&&Event==e.constructor);)a=a.caller;return e},getCharCode:function(e){e=e.keyCode||e.charCode||0;YAHOO.env.ua.webkit&&e in j&&(e=j[e]);return e},_getCacheIndex:function(e,a,b,d){for(var f=0,c=e.length;f<c;f+=1){var g=e[f];if(g&&g[this.FN]==d&&g[this.EL]==a&&g[this.TYPE]==b)return f}return-1},generateId:function(e){var a=e.id;a||(a="yuievtautoid-"+g,++g,e.id=a);return a},
 
_isValidCollection:function(e){try{return e&&"string"!==typeof e&&e.length&&!e.tagName&&!e.alert&&"undefined"!==typeof e[0]}catch(a){return!1}},elCache:{},getEl:function(e){return"string"===typeof e?document.getElementById(e):e},clearCache:function(){},DOMReadyEvent:new YAHOO.util.CustomEvent("DOMReady",YAHOO,0,0,1),_load:function(){if(!a){a=!0;var e=YAHOO.util.Event;e._ready();e._tryPreloadAttach()}},_ready:function(){var e=YAHOO.util.Event;e.DOMReady||(e.DOMReady=!0,e.DOMReadyEvent.fire(),e._simpleRemove(document,
 
"DOMContentLoaded",e._ready))},_tryPreloadAttach:function(){if(0===f.length)d=0,this._interval&&(this._interval.cancel(),this._interval=null);else if(!this.locked)if(this.isIE&&!this.DOMReady)this.startInterval();else{this.locked=!0;var e=!a;e||(e=0<d&&0<f.length);var i=[],b=function(e,a){var i=e;a.overrideContext&&(i=!0===a.overrideContext?a.obj:a.overrideContext);a.fn.call(i,a.obj)},c,g,h,j,o=[];c=0;for(g=f.length;c<g;c+=1)if(h=f[c])if(j=this.getEl(h.id))if(h.checkReady){if(a||j.nextSibling||!e)o.push(h),
 
f[c]=null}else b(j,h),f[c]=null;else i.push(h);c=0;for(g=o.length;c<g;c+=1)h=o[c],b(this.getEl(h.id),h);d--;if(e){for(c=f.length-1;-1<c;c--)h=f[c],(!h||!h.id)&&f.splice(c,1);this.startInterval()}else this._interval&&(this._interval.cancel(),this._interval=null);this.locked=!1}},purgeElement:function(e,a,b){var e=YAHOO.lang.isString(e)?this.getEl(e):e,d=this.getListeners(e,b),f;if(d)for(f=d.length-1;-1<f;f--){var c=d[f];this.removeListener(e,c.type,c.fn)}if(a&&e&&e.childNodes){f=0;for(d=e.childNodes.length;f<
 
d;++f)this.purgeElement(e.childNodes[f],a,b)}},getListeners:function(e,a){var d=[],f;a?"unload"===a?f=[b]:(a=this._getType(a),f=[c]):f=[c,b];for(var g=YAHOO.lang.isString(e)?this.getEl(e):e,h=0;h<f.length;h+=1){var j=f[h];if(j)for(var o=0,m=j.length;o<m;++o){var r=j[o];r&&(r[this.EL]===g&&(!a||a===r[this.TYPE]))&&d.push({type:r[this.TYPE],fn:r[this.FN],obj:r[this.OBJ],adjust:r[this.OVERRIDE],scope:r[this.ADJ_SCOPE],index:o})}}return d.length?d:null},_unload:function(e){var a=YAHOO.util.Event,d,f,
 
g,h=b.slice(),j;d=0;for(g=b.length;d<g;++d)if(f=h[d]){try{j=window,f[a.ADJ_SCOPE]&&(j=!0===f[a.ADJ_SCOPE]?f[a.UNLOAD_OBJ]:f[a.ADJ_SCOPE]),f[a.FN].call(j,a.getEvent(e,f[a.EL]),f[a.UNLOAD_OBJ])}catch(o){}h[d]=null}b=null;if(c)for(e=c.length-1;-1<e;e--)if(f=c[e])try{a.removeListener(f[a.EL],f[a.TYPE],f[a.FN],e)}catch(m){}try{a._simpleRemove(window,"unload",a._unload),a._simpleRemove(window,"load",a._load)}catch(r){}},_getScrollLeft:function(){return this._getScroll()[1]},_getScrollTop:function(){return this._getScroll()[0]},
 
_getScroll:function(){var e=document.documentElement,a=document.body;return e&&(e.scrollTop||e.scrollLeft)?[e.scrollTop,e.scrollLeft]:a?[a.scrollTop,a.scrollLeft]:[0,0]},regCE:function(){},_simpleAdd:function(){return window.addEventListener?function(e,a,b,d){e.addEventListener(a,b,d)}:window.attachEvent?function(e,a,b){e.attachEvent("on"+a,b)}:function(){}}(),_simpleRemove:function(){return window.removeEventListener?function(e,a,b,d){e.removeEventListener(a,b,d)}:window.detachEvent?function(e,a,
 
b){e.detachEvent("on"+a,b)}:function(){}}()}}(),function(){var a=YAHOO.util.Event;a.on=a.addListener;a.onFocus=a.addFocusListener;a.onBlur=a.addBlurListener;if(a.isIE)if(self!==self.top)document.onreadystatechange=function(){"complete"==document.readyState&&(document.onreadystatechange=null,a._ready())};else{YAHOO.util.Event.onDOMReady(YAHOO.util.Event._tryPreloadAttach,YAHOO.util.Event,!0);var c=document.createElement("p");a._dri=setInterval(function(){try{c.doScroll("left"),clearInterval(a._dri),
 
a._dri=null,a._ready(),c=null}catch(b){}},a.POLL_INTERVAL)}else a.webkit&&525>a.webkit?a._dri=setInterval(function(){var b=document.readyState;if("loaded"==b||"complete"==b)clearInterval(a._dri),a._dri=null,a._ready()},a.POLL_INTERVAL):a._simpleAdd(document,"DOMContentLoaded",a._ready);a._simpleAdd(window,"load",a._load);a._simpleAdd(window,"unload",a._unload);a._tryPreloadAttach()}());YAHOO.util.EventProvider=function(){};
 
YAHOO.util.EventProvider.prototype={__yui_events:null,__yui_subscribers:null,subscribe:function(a,c,b,d){this.__yui_events=this.__yui_events||{};var f=this.__yui_events[a];if(f)f.subscribe(c,b,d);else{f=this.__yui_subscribers=this.__yui_subscribers||{};f[a]||(f[a]=[]);f[a].push({fn:c,obj:b,overrideContext:d})}},unsubscribe:function(a,c,b){var d=this.__yui_events=this.__yui_events||{};if(a){if(d=d[a])return d.unsubscribe(c,b)}else{var a=true,f;for(f in d)YAHOO.lang.hasOwnProperty(d,f)&&(a=a&&d[f].unsubscribe(c,
 
b));return a}return false},unsubscribeAll:function(a){return this.unsubscribe(a)},createEvent:function(a,c){this.__yui_events=this.__yui_events||{};var b=c||{},d=this.__yui_events,f;if(!d[a]){f=new YAHOO.util.CustomEvent(a,b.scope||this,b.silent,YAHOO.util.CustomEvent.FLAT,b.fireOnce);d[a]=f;b.onSubscribeCallback&&f.subscribeEvent.subscribe(b.onSubscribeCallback);this.__yui_subscribers=this.__yui_subscribers||{};if(b=this.__yui_subscribers[a])for(var g=0;g<b.length;++g)f.subscribe(b[g].fn,b[g].obj,
 
b[g].overrideContext)}return d[a]},fireEvent:function(a){this.__yui_events=this.__yui_events||{};var c=this.__yui_events[a];if(!c)return null;for(var b=[],d=1;d<arguments.length;++d)b.push(arguments[d]);return c.fire.apply(c,b)},hasEvent:function(a){return this.__yui_events&&this.__yui_events[a]?true:false}};
 
(function(){var a=YAHOO.util.Event,c=YAHOO.lang;YAHOO.util.KeyListener=function(b,f,g,j){function h(b){if(!f.shift)f.shift=false;if(!f.alt)f.alt=false;if(!f.ctrl)f.ctrl=false;if(b.shiftKey==f.shift&&b.altKey==f.alt&&b.ctrlKey==f.ctrl){var d,c=f.keys,g;if(YAHOO.lang.isArray(c))for(var h=0;h<c.length;h++){d=c[h];g=a.getCharCode(b);if(d==g){e.fire(g,b);break}}else{g=a.getCharCode(b);c==g&&e.fire(g,b)}}}if(!j)j=YAHOO.util.KeyListener.KEYDOWN;var e=new YAHOO.util.CustomEvent("keyPressed");this.enabledEvent=
 
new YAHOO.util.CustomEvent("enabled");this.disabledEvent=new YAHOO.util.CustomEvent("disabled");c.isString(b)&&(b=document.getElementById(b));c.isFunction(g)?e.subscribe(g):e.subscribe(g.fn,g.scope,g.correctScope);this.enable=function(){if(!this.enabled){a.on(b,j,h);this.enabledEvent.fire(f)}this.enabled=true};this.disable=function(){if(this.enabled){a.removeListener(b,j,h);this.disabledEvent.fire(f)}this.enabled=false};this.toString=function(){return"KeyListener ["+f.keys+"] "+b.tagName+(b.id?"["+
 
b.id+"]":"")}};var b=YAHOO.util.KeyListener;b.KEYDOWN="keydown";b.KEYUP="keyup";b.KEY={ALT:18,BACK_SPACE:8,CAPS_LOCK:20,CONTROL:17,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,LEFT:37,META:224,NUM_LOCK:144,PAGE_DOWN:34,PAGE_UP:33,PAUSE:19,PRINTSCREEN:44,RIGHT:39,SCROLL_LOCK:145,SHIFT:16,SPACE:32,TAB:9,UP:38}})();YAHOO.register("event",YAHOO.util.Event,{version:"2.9.0",build:"2800"});
 
YAHOO.util.Connect={_msxml_progid:["Microsoft.XMLHTTP","MSXML2.XMLHTTP.3.0","MSXML2.XMLHTTP"],_http_headers:{},_has_http_headers:!1,_use_default_post_header:!0,_default_post_header:"application/x-www-form-urlencoded; charset=UTF-8",_default_form_header:"application/x-www-form-urlencoded",_use_default_xhr_header:!0,_default_xhr_header:"XMLHttpRequest",_has_default_headers:!0,_isFormSubmit:!1,_default_headers:{},_poll:{},_timeOut:{},_polling_interval:50,_transaction_id:0,startEvent:new YAHOO.util.CustomEvent("start"),
 
completeEvent:new YAHOO.util.CustomEvent("complete"),successEvent:new YAHOO.util.CustomEvent("success"),failureEvent:new YAHOO.util.CustomEvent("failure"),abortEvent:new YAHOO.util.CustomEvent("abort"),_customEvents:{onStart:["startEvent","start"],onComplete:["completeEvent","complete"],onSuccess:["successEvent","success"],onFailure:["failureEvent","failure"],onUpload:["uploadEvent","upload"],onAbort:["abortEvent","abort"]},setProgId:function(a){this._msxml_progid.unshift(a)},setDefaultPostHeader:function(a){if(typeof a==
 
"string"){this._default_post_header=a;this._use_default_post_header=true}else if(typeof a=="boolean")this._use_default_post_header=a},setDefaultXhrHeader:function(a){typeof a=="string"?this._default_xhr_header=a:this._use_default_xhr_header=a},setPollingInterval:function(a){if(typeof a=="number"&&isFinite(a))this._polling_interval=a},createXhrObject:function(a){var c,b,d;try{b=new XMLHttpRequest;c={conn:b,tId:a,xhr:true}}catch(f){for(d=0;d<this._msxml_progid.length;++d)try{b=new ActiveXObject(this._msxml_progid[d]);
 
c={conn:b,tId:a,xhr:true};break}catch(g){}}finally{return c}},getConnectionObject:function(a){var c,b=this._transaction_id;try{if(a){c={tId:b};if(a==="xdr"){c.conn=this._transport;c.xdr=true}else if(a==="upload")c.upload=true}else c=this.createXhrObject(b);c&&this._transaction_id++}catch(d){}return c},asyncRequest:function(a,c,b,d){var f=b&&b.argument?b.argument:null,g=this,j,h;this._isFileUpload?h="upload":b&&b.xdr&&(h="xdr");j=this.getConnectionObject(h);if(!j)return null;b&&b.customevents&&this.initCustomEvents(j,
 
b);if(this._isFormSubmit){if(this._isFileUpload){window.setTimeout(function(){g.uploadFile(j,b,c,d)},10);return j}a.toUpperCase()=="GET"?this._sFormData.length!==0&&(c=c+((c.indexOf("?")==-1?"?":"&")+this._sFormData)):a.toUpperCase()=="POST"&&(d=d?this._sFormData+"&"+d:this._sFormData)}a.toUpperCase()=="GET"&&(b&&b.cache===false)&&(c=c+((c.indexOf("?")==-1?"?":"&")+"rnd="+(new Date).valueOf().toString()));this._use_default_xhr_header&&(this._default_headers["X-Requested-With"]||this.initHeader("X-Requested-With",
 
this._default_xhr_header,true));a.toUpperCase()==="POST"&&this._use_default_post_header&&this._isFormSubmit===false&&this.initHeader("Content-Type",this._default_post_header);if(j.xdr){this.xdr(j,a,c,b,d);return j}j.conn.open(a,c,true);(this._has_default_headers||this._has_http_headers)&&this.setHeader(j);this.handleReadyState(j,b);j.conn.send(d||"");this._isFormSubmit===true&&this.resetFormState();this.startEvent.fire(j,f);j.startEvent&&j.startEvent.fire(j,f);return j},initCustomEvents:function(a,
 
c){for(var b in c.customevents)if(this._customEvents[b][0]){a[this._customEvents[b][0]]=new YAHOO.util.CustomEvent(this._customEvents[b][1],c.scope?c.scope:null);a[this._customEvents[b][0]].subscribe(c.customevents[b])}},handleReadyState:function(a,c){var b=this,d=c&&c.argument?c.argument:null;c&&c.timeout&&(this._timeOut[a.tId]=window.setTimeout(function(){b.abort(a,c,true)},c.timeout));this._poll[a.tId]=window.setInterval(function(){if(a.conn&&a.conn.readyState===4){window.clearInterval(b._poll[a.tId]);
 
delete b._poll[a.tId];if(c&&c.timeout){window.clearTimeout(b._timeOut[a.tId]);delete b._timeOut[a.tId]}b.completeEvent.fire(a,d);a.completeEvent&&a.completeEvent.fire(a,d);b.handleTransactionResponse(a,c)}},this._polling_interval)},handleTransactionResponse:function(a,c,b){var d,f=c&&c.argument?c.argument:null,g=a.r&&a.r.statusText==="xdr:success"?true:false,j=a.r&&a.r.statusText==="xdr:failure"?true:false;try{d=a.conn.status!==void 0&&a.conn.status!==0||g?a.conn.status:j&&!b?0:13030}catch(h){d=13030}if(d>=
 
200&&d<300||d===1223||g){b=a.xdr?a.r:this.createResponseObject(a,f);c&&c.success&&(c.scope?c.success.apply(c.scope,[b]):c.success(b));this.successEvent.fire(b);a.successEvent&&a.successEvent.fire(b)}else{switch(d){case 12002:case 12029:case 12030:case 12031:case 12152:case 13030:b=this.createExceptionObject(a.tId,f,b?b:false);c&&c.failure&&(c.scope?c.failure.apply(c.scope,[b]):c.failure(b));break;default:b=a.xdr?a.response:this.createResponseObject(a,f);c&&c.failure&&(c.scope?c.failure.apply(c.scope,
 
[b]):c.failure(b))}this.failureEvent.fire(b);a.failureEvent&&a.failureEvent.fire(b)}this.releaseObject(a)},createResponseObject:function(a,c){var b={},d={},f,g,j,h;try{g=a.conn.getAllResponseHeaders();j=g.split("\n");for(f=0;f<j.length;f++){h=j[f].indexOf(":");h!=-1&&(d[j[f].substring(0,h)]=YAHOO.lang.trim(j[f].substring(h+2)))}}catch(e){}b.tId=a.tId;b.status=a.conn.status==1223?204:a.conn.status;b.statusText=a.conn.status==1223?"No Content":a.conn.statusText;b.getResponseHeader=d;b.getAllResponseHeaders=
 
g;b.responseText=a.conn.responseText;b.responseXML=a.conn.responseXML;if(c)b.argument=c;return b},createExceptionObject:function(a,c,b){var d={};d.tId=a;if(b){d.status=-1;d.statusText="transaction aborted"}else{d.status=0;d.statusText="communication failure"}if(c)d.argument=c;return d},initHeader:function(a,c,b){(b?this._default_headers:this._http_headers)[a]=c;b?this._has_default_headers=true:this._has_http_headers=true},setHeader:function(a){var c;if(this._has_default_headers)for(c in this._default_headers)YAHOO.lang.hasOwnProperty(this._default_headers,
 
c)&&a.conn.setRequestHeader(c,this._default_headers[c]);if(this._has_http_headers){for(c in this._http_headers)YAHOO.lang.hasOwnProperty(this._http_headers,c)&&a.conn.setRequestHeader(c,this._http_headers[c]);this._http_headers={};this._has_http_headers=false}},resetDefaultHeaders:function(){this._default_headers={};this._has_default_headers=false},abort:function(a,c,b){var d,f=c&&c.argument?c.argument:null,a=a||{};if(a.conn)if(a.xhr){if(this.isCallInProgress(a)){a.conn.abort();window.clearInterval(this._poll[a.tId]);
 
delete this._poll[a.tId];if(b){window.clearTimeout(this._timeOut[a.tId]);delete this._timeOut[a.tId]}d=true}}else{if(a.xdr){a.conn.abort(a.tId);d=true}}else if(a.upload){var g=document.getElementById("yuiIO"+a.tId);if(g){YAHOO.util.Event.removeListener(g,"load");document.body.removeChild(g);if(b){window.clearTimeout(this._timeOut[a.tId]);delete this._timeOut[a.tId]}d=true}}else d=false;if(d===true){this.abortEvent.fire(a,f);a.abortEvent&&a.abortEvent.fire(a,f);this.handleTransactionResponse(a,c,true)}return d},
 
isCallInProgress:function(a){a=a||{};return a.xhr&&a.conn?a.conn.readyState!==4&&a.conn.readyState!==0:a.xdr&&a.conn?a.conn.isCallInProgress(a.tId):a.upload===true?document.getElementById("yuiIO"+a.tId)?true:false:false},releaseObject:function(a){if(a&&a.conn)a.conn=null}};
 
(function(){function a(a){var a='<object id="YUIConnectionSwf" type="application/x-shockwave-flash" data="'+a+'" width="0" height="0"><param name="movie" value="'+a+'"><param name="allowScriptAccess" value="always"></object>',b=document.createElement("div");document.body.appendChild(b);b.innerHTML=a}var c=YAHOO.util.Connect,b={};c.xdr=function(a,f,c,j,h){b[parseInt(a.tId)]={o:a,c:j};if(h){j.method=f;j.data=h}a.conn.send(c,j,a.tId)};c.swf=a;c.transport=function(b){a(b);c._transport=document.getElementById("YUIConnectionSwf")};
 
c.xdrReadyEvent=new YAHOO.util.CustomEvent("xdrReady");c.xdrReady=function(){c.xdrReadyEvent.fire()};c.handleXdrResponse=function(a){var f=b[a.tId].o,g=b[a.tId].c;if(a.statusText==="xdr:start"){if(f){c.startEvent.fire(f,g.argument);f.startEvent&&f.startEvent.fire(f,g.argument)}}else{a.responseText=decodeURI(a.responseText);f.r=a;if(g.argument)f.r.argument=g.argument;this.handleTransactionResponse(f,g,a.statusText==="xdr:abort"?true:false);delete b[a.tId]}}})();
 
(function(){var a=YAHOO.util.Connect,c=YAHOO.util.Event,b=document.documentMode?document.documentMode:false;a._isFileUpload=false;a._formNode=null;a._sFormData=null;a._submitElementValue=null;a.uploadEvent=new YAHOO.util.CustomEvent("upload");a._hasSubmitListener=function(){if(c){c.addListener(document,"click",function(b){var b=c.getTarget(b),f=b.nodeName.toLowerCase();if((f==="input"||f==="button")&&b.type&&b.type.toLowerCase()=="submit")a._submitElementValue=encodeURIComponent(b.name)+"="+encodeURIComponent(b.value)});
 
return true}return false}();a.setForm=function(a,b,c){var j,h=false,e=[],i=0,k,l,q,p;this.resetFormState();if(typeof a=="string")a=document.getElementById(a)||document.forms[a];else if(typeof a!="object")return;if(b){this.createFrame(c?c:null);this._isFileUpload=this._isFormSubmit=true;this._formNode=a}else{k=0;for(l=a.elements.length;k<l;++k){b=a.elements[k];j=b.disabled;c=b.name;if(!j&&c){c=encodeURIComponent(c)+"=";j=encodeURIComponent(b.value);switch(b.type){case "select-one":if(b.selectedIndex>
 
-1){p=b.options[b.selectedIndex];e[i++]=c+encodeURIComponent(p.attributes.value&&p.attributes.value.specified?p.value:p.text)}break;case "select-multiple":if(b.selectedIndex>-1){j=b.selectedIndex;for(q=b.options.length;j<q;++j){p=b.options[j];p.selected&&(e[i++]=c+encodeURIComponent(p.attributes.value&&p.attributes.value.specified?p.value:p.text))}}break;case "radio":case "checkbox":b.checked&&(e[i++]=c+j);break;case "file":case void 0:case "reset":case "button":break;case "submit":if(h===false){if(this._hasSubmitListener&&
 
this._submitElementValue)e[i++]=this._submitElementValue;h=true}break;default:e[i++]=c+j}}}this._isFormSubmit=true;this._sFormData=e.join("&");this.initHeader("Content-Type",this._default_form_header);return this._sFormData}};a.resetFormState=function(){this._isFileUpload=this._isFormSubmit=false;this._formNode=null;this._sFormData=""};a.createFrame=function(a){var f="yuiIO"+this._transaction_id,c=b===9?true:false;if(YAHOO.env.ua.ie&&!c){c=document.createElement('<iframe id="'+f+'" name="'+f+'" />');
 
if(typeof a=="boolean")c.src="javascript:false"}else{c=document.createElement("iframe");c.id=f;c.name=f}c.style.position="absolute";c.style.top="-1000px";c.style.left="-1000px";document.body.appendChild(c)};a.appendPostData=function(a){var b=[],a=a.split("&"),c,j;for(c=0;c<a.length;c++){j=a[c].indexOf("=");if(j!=-1){b[c]=document.createElement("input");b[c].type="hidden";b[c].name=decodeURIComponent(a[c].substring(0,j));b[c].value=decodeURIComponent(a[c].substring(j+1));this._formNode.appendChild(b[c])}}return b};
 
a.uploadFile=function(a,f,g,j){var h="yuiIO"+a.tId,e=document.getElementById(h),i=b>=8?true:false,k=this,l=f&&f.argument?f.argument:null,q,p,n,o,m;o={action:this._formNode.getAttribute("action"),method:this._formNode.getAttribute("method"),target:this._formNode.getAttribute("target")};this._formNode.setAttribute("action",g);this._formNode.setAttribute("method","POST");this._formNode.setAttribute("target",h);YAHOO.env.ua.ie&&!i?this._formNode.setAttribute("encoding","multipart/form-data"):this._formNode.setAttribute("enctype",
 
"multipart/form-data");j&&(q=this.appendPostData(j));this._formNode.submit();this.startEvent.fire(a,l);a.startEvent&&a.startEvent.fire(a,l);f&&f.timeout&&(this._timeOut[a.tId]=window.setTimeout(function(){k.abort(a,f,true)},f.timeout));if(q&&q.length>0)for(g=0;g<q.length;g++)this._formNode.removeChild(q[g]);for(p in o)YAHOO.lang.hasOwnProperty(o,p)&&(o[p]?this._formNode.setAttribute(p,o[p]):this._formNode.removeAttribute(p));this.resetFormState();m=function(){var b,i,g;if(f&&f.timeout){window.clearTimeout(k._timeOut[a.tId]);
 
delete k._timeOut[a.tId]}k.completeEvent.fire(a,l);a.completeEvent&&a.completeEvent.fire(a,l);n={tId:a.tId,argument:l};try{b=e.contentWindow.document.getElementsByTagName("body")[0];i=e.contentWindow.document.getElementsByTagName("pre")[0];b&&(g=i?i.textContent?i.textContent:i.innerText:b.textContent?b.textContent:b.innerText);n.responseText=g;n.responseXML=e.contentWindow.document.XMLDocument?e.contentWindow.document.XMLDocument:e.contentWindow.document}catch(h){}f&&f.upload&&(f.scope?f.upload.apply(f.scope,
 
[n]):f.upload(n));k.uploadEvent.fire(n);a.uploadEvent&&a.uploadEvent.fire(n);c.removeListener(e,"load",m);setTimeout(function(){document.body.removeChild(e);k.releaseObject(a)},100)};c.addListener(e,"load",m)}})();YAHOO.register("connection",YAHOO.util.Connect,{version:"2.9.0",build:"2800"});
 
(function(){var a=YAHOO.util,c=function(a,d,f,c){this.init(a,d,f,c)};c.NAME="Anim";c.prototype={toString:function(){var a=this.getEl()||{};return this.constructor.NAME+": "+(a.id||a.tagName)},patterns:{noNegatives:/width|height|opacity|padding/i,offsetAttribute:/^((width|height)|(top|left))$/,defaultUnit:/width|height|top$|bottom$|left$|right$/i,offsetUnit:/\d+(em|%|en|ex|pt|in|cm|mm|pc)$/i},doMethod:function(a,d,f){return this.method(this.currentFrame,d,f-d,this.totalFrames)},setAttribute:function(b,
 
d,f){var c=this.getEl();this.patterns.noNegatives.test(b)&&(d=d>0?d:0);b in c&&!("style"in c&&b in c.style)?c[b]=d:a.Dom.setStyle(c,b,d+f)},getAttribute:function(b){var d=this.getEl(),f=a.Dom.getStyle(d,b);if(f!=="auto"&&!this.patterns.offsetUnit.test(f))return parseFloat(f);var c=this.patterns.offsetAttribute.exec(b)||[],j=!!c[3],h=!!c[2];"style"in d?f=h||a.Dom.getStyle(d,"position")=="absolute"&&j?d["offset"+c[0].charAt(0).toUpperCase()+c[0].substr(1)]:0:b in d&&(f=d[b]);return f},getDefaultUnit:function(a){return this.patterns.defaultUnit.test(a)?
 
"px":""},setRuntimeAttribute:function(a){var d,f,c=this.attributes;this.runtimeAttributes[a]={};var j=function(e){return typeof e!=="undefined"};if(!j(c[a].to)&&!j(c[a].by))return false;d=j(c[a].from)?c[a].from:this.getAttribute(a);if(j(c[a].to))f=c[a].to;else if(j(c[a].by))if(d.constructor==Array){f=[];for(var h=0,e=d.length;h<e;++h)f[h]=d[h]+c[a].by[h]*1}else f=d+c[a].by*1;this.runtimeAttributes[a].start=d;this.runtimeAttributes[a].end=f;this.runtimeAttributes[a].unit=j(c[a].unit)?c[a].unit:this.getDefaultUnit(a);
 
return true},init:function(b,d,f,c){var j=false,h=null,e=0,b=a.Dom.get(b);this.attributes=d||{};this.duration=!YAHOO.lang.isUndefined(f)?f:1;this.method=c||a.Easing.easeNone;this.useSeconds=true;this.currentFrame=0;this.totalFrames=a.AnimMgr.fps;this.setEl=function(e){b=a.Dom.get(e)};this.getEl=function(){return b};this.isAnimated=function(){return j};this.getStartTime=function(){return h};this.runtimeAttributes={};this.animate=function(){if(this.isAnimated())return false;this.currentFrame=0;this.totalFrames=
 
this.useSeconds?Math.ceil(a.AnimMgr.fps*this.duration):this.duration;if(this.duration===0&&this.useSeconds)this.totalFrames=1;a.AnimMgr.registerElement(this);return true};this.stop=function(e){if(!this.isAnimated())return false;if(e){this.currentFrame=this.totalFrames;this._onTween.fire()}a.AnimMgr.stop(this)};this._handleStart=function(){this.onStart.fire();this.runtimeAttributes={};for(var a in this.attributes)this.attributes.hasOwnProperty(a)&&this.setRuntimeAttribute(a);j=true;e=0;h=new Date};
 
this._handleTween=function(){var a={duration:new Date-this.getStartTime(),currentFrame:this.currentFrame,toString:function(){return"duration: "+a.duration+", currentFrame: "+a.currentFrame}};this.onTween.fire(a);var b=this.runtimeAttributes,d;for(d in b)b.hasOwnProperty(d)&&this.setAttribute(d,this.doMethod(d,b[d].start,b[d].end),b[d].unit);this.afterTween.fire(a);e=e+1};this._handleComplete=function(){var a=(new Date-h)/1E3,b={duration:a,frames:e,fps:e/a,toString:function(){return"duration: "+b.duration+
 
", frames: "+b.frames+", fps: "+b.fps}};j=false;e=0;this.onComplete.fire(b)};this._onStart=new a.CustomEvent("_start",this,true);this.onStart=new a.CustomEvent("start",this);this.onTween=new a.CustomEvent("tween",this);this.afterTween=new a.CustomEvent("afterTween",this);this._onTween=new a.CustomEvent("_tween",this,true);this.onComplete=new a.CustomEvent("complete",this);this._onComplete=new a.CustomEvent("_complete",this,true);this._onStart.subscribe(this._handleStart);this._onTween.subscribe(this._handleTween);
 
this._onComplete.subscribe(this._handleComplete)}};a.Anim=c})();
 
YAHOO.util.AnimMgr=new function(){var a=null,c=[],b=0;this.fps=1E3;this.delay=20;this.registerElement=function(e){c[c.length]=e;b=b+1;e._onStart.fire();this.start()};var d=[],f=false,g=function(){var e=d.shift();j.apply(YAHOO.util.AnimMgr,e);d.length&&arguments.callee()},j=function(e,a){a=a||h(e);if(!e.isAnimated()||a===-1)return false;e._onComplete.fire();c.splice(a,1);b=b-1;b<=0&&this.stop();return true};this.unRegister=function(){d.push(arguments);if(!f){f=true;g();f=false}};this.start=function(){a===
 
null&&(a=setInterval(this.run,this.delay))};this.stop=function(e){if(e)this.unRegister(e);else{clearInterval(a);for(var e=0,i=c.length;e<i;++e)this.unRegister(c[0],0);c=[];a=null;b=0}};this.run=function(){for(var e=0,a=c.length;e<a;++e){var b=c[e];if(b&&b.isAnimated())if(b.currentFrame<b.totalFrames||b.totalFrames===null){b.currentFrame=b.currentFrame+1;if(b.useSeconds){var d=b,f=d.totalFrames,g=d.currentFrame,h=d.currentFrame*d.duration*1E3/d.totalFrames,j=new Date-d.getStartTime(),m=0,m=j<d.duration*
 
1E3?Math.round((j/h-1)*d.currentFrame):f-(g+1);if(m>0&&isFinite(m)){d.currentFrame+m>=f&&(m=f-(g+1));d.currentFrame=d.currentFrame+m}}b._onTween.fire()}else YAHOO.util.AnimMgr.stop(b,e)}};var h=function(e){for(var a=0,b=c.length;a<b;++a)if(c[a]===e)return a;return-1};this._queue=c;this._getIndex=h};
 
YAHOO.util.Bezier=new function(){this.getPosition=function(a,c){for(var b=a.length,d=[],f=0;f<b;++f)d[f]=[a[f][0],a[f][1]];for(var g=1;g<b;++g)for(f=0;f<b-g;++f){d[f][0]=(1-c)*d[f][0]+c*d[parseInt(f+1,10)][0];d[f][1]=(1-c)*d[f][1]+c*d[parseInt(f+1,10)][1]}return[d[0][0],d[0][1]]}};
 
(function(){var a=function(b,d,c,h){a.superclass.constructor.call(this,b,d,c,h)};a.NAME="ColorAnim";a.DEFAULT_BGCOLOR="#fff";var c=YAHOO.util;YAHOO.extend(a,c.Anim);var b=a.superclass,d=a.prototype;d.patterns.color=/color$/i;d.patterns.rgb=/^rgb\(([0-9]+)\s*,\s*([0-9]+)\s*,\s*([0-9]+)\)$/i;d.patterns.hex=/^#?([0-9A-F]{2})([0-9A-F]{2})([0-9A-F]{2})$/i;d.patterns.hex3=/^#?([0-9A-F]{1})([0-9A-F]{1})([0-9A-F]{1})$/i;d.patterns.transparent=/^transparent|rgba\(0, 0, 0, 0\)$/;d.parseColor=function(a){if(a.length==
 
3)return a;var b=this.patterns.hex.exec(a);if(b&&b.length==4)return[parseInt(b[1],16),parseInt(b[2],16),parseInt(b[3],16)];if((b=this.patterns.rgb.exec(a))&&b.length==4)return[parseInt(b[1],10),parseInt(b[2],10),parseInt(b[3],10)];return(b=this.patterns.hex3.exec(a))&&b.length==4?[parseInt(b[1]+b[1],16),parseInt(b[2]+b[2],16),parseInt(b[3]+b[3],16)]:null};d.getAttribute=function(d){var g=this.getEl();if(this.patterns.color.test(d)){var j=YAHOO.util.Dom.getStyle(g,d),h=this;if(this.patterns.transparent.test(j))j=
 
(g=YAHOO.util.Dom.getAncestorBy(g,function(){return!h.patterns.transparent.test(j)}))?c.Dom.getStyle(g,d):a.DEFAULT_BGCOLOR}else j=b.getAttribute.call(this,d);return j};d.doMethod=function(a,d,c){var h;if(this.patterns.color.test(a)){h=[];for(var e=0,i=d.length;e<i;++e)h[e]=b.doMethod.call(this,a,d[e],c[e]);h="rgb("+Math.floor(h[0])+","+Math.floor(h[1])+","+Math.floor(h[2])+")"}else h=b.doMethod.call(this,a,d,c);return h};d.setRuntimeAttribute=function(a){b.setRuntimeAttribute.call(this,a);if(this.patterns.color.test(a)){var d=
 
this.attributes,c=this.parseColor(this.runtimeAttributes[a].start),h=this.parseColor(this.runtimeAttributes[a].end);if(typeof d[a].to==="undefined"&&typeof d[a].by!=="undefined")for(var h=this.parseColor(d[a].by),d=0,e=c.length;d<e;++d)h[d]=c[d]+h[d];this.runtimeAttributes[a].start=c;this.runtimeAttributes[a].end=h}};c.ColorAnim=a})();
 
YAHOO.util.Easing={easeNone:function(a,c,b,d){return b*a/d+c},easeIn:function(a,c,b,d){return b*(a=a/d)*a+c},easeOut:function(a,c,b,d){return-b*(a=a/d)*(a-2)+c},easeBoth:function(a,c,b,d){return(a=a/(d/2))<1?b/2*a*a+c:-b/2*(--a*(a-2)-1)+c},easeInStrong:function(a,c,b,d){return b*(a=a/d)*a*a*a+c},easeOutStrong:function(a,c,b,d){return-b*((a=a/d-1)*a*a*a-1)+c},easeBothStrong:function(a,c,b,d){return(a=a/(d/2))<1?b/2*a*a*a*a+c:-b/2*((a=a-2)*a*a*a-2)+c},elasticIn:function(a,c,b,d,f,g){if(a==0)return c;
 
if((a=a/d)==1)return c+b;g||(g=d*0.3);if(!f||f<Math.abs(b)){f=b;b=g/4}else b=g/(2*Math.PI)*Math.asin(b/f);return-(f*Math.pow(2,10*(a=a-1))*Math.sin((a*d-b)*2*Math.PI/g))+c},elasticOut:function(a,c,b,d,f,g){if(a==0)return c;if((a=a/d)==1)return c+b;g||(g=d*0.3);if(!f||f<Math.abs(b))var f=b,j=g/4;else j=g/(2*Math.PI)*Math.asin(b/f);return f*Math.pow(2,-10*a)*Math.sin((a*d-j)*2*Math.PI/g)+b+c},elasticBoth:function(a,c,b,d,f,g){if(a==0)return c;if((a=a/(d/2))==2)return c+b;g||(g=d*0.3*1.5);if(!f||f<Math.abs(b))var f=
 
b,j=g/4;else j=g/(2*Math.PI)*Math.asin(b/f);return a<1?-0.5*f*Math.pow(2,10*(a=a-1))*Math.sin((a*d-j)*2*Math.PI/g)+c:f*Math.pow(2,-10*(a=a-1))*Math.sin((a*d-j)*2*Math.PI/g)*0.5+b+c},backIn:function(a,c,b,d,f){typeof f=="undefined"&&(f=1.70158);return b*(a=a/d)*a*((f+1)*a-f)+c},backOut:function(a,c,b,d,f){typeof f=="undefined"&&(f=1.70158);return b*((a=a/d-1)*a*((f+1)*a+f)+1)+c},backBoth:function(a,c,b,d,f){typeof f=="undefined"&&(f=1.70158);return(a=a/(d/2))<1?b/2*a*a*(((f=f*1.525)+1)*a-f)+c:b/2*
 
((a=a-2)*a*(((f=f*1.525)+1)*a+f)+2)+c},bounceIn:function(a,c,b,d){return b-YAHOO.util.Easing.bounceOut(d-a,0,b,d)+c},bounceOut:function(a,c,b,d){return(a=a/d)<1/2.75?b*7.5625*a*a+c:a<2/2.75?b*(7.5625*(a=a-1.5/2.75)*a+0.75)+c:a<2.5/2.75?b*(7.5625*(a=a-2.25/2.75)*a+0.9375)+c:b*(7.5625*(a=a-2.625/2.75)*a+0.984375)+c},bounceBoth:function(a,c,b,d){return a<d/2?YAHOO.util.Easing.bounceIn(a*2,0,b,d)*0.5+c:YAHOO.util.Easing.bounceOut(a*2-d,0,b,d)*0.5+b*0.5+c}};
 
(function(){var a=function(b,d,e,i){b&&a.superclass.constructor.call(this,b,d,e,i)};a.NAME="Motion";var c=YAHOO.util;YAHOO.extend(a,c.ColorAnim);var b=a.superclass,d=a.prototype;d.patterns.points=/^points$/i;d.setAttribute=function(a,d,e){if(this.patterns.points.test(a)){e=e||"px";b.setAttribute.call(this,"left",d[0],e);b.setAttribute.call(this,"top",d[1],e)}else b.setAttribute.call(this,a,d,e)};d.getAttribute=function(a){return this.patterns.points.test(a)?[b.getAttribute.call(this,"left"),b.getAttribute.call(this,
 
"top")]:b.getAttribute.call(this,a)};d.doMethod=function(a,d,e){var i=null;if(this.patterns.points.test(a)){d=this.method(this.currentFrame,0,100,this.totalFrames)/100;i=c.Bezier.getPosition(this.runtimeAttributes[a],d)}else i=b.doMethod.call(this,a,d,e);return i};d.setRuntimeAttribute=function(a){if(this.patterns.points.test(a)){var d=this.getEl(),e=this.attributes,i=e.points.control||[],k,l,q;if(i.length>0&&!(i[0]instanceof Array))i=[i];else{var p=[];l=0;for(q=i.length;l<q;++l)p[l]=i[l];i=p}c.Dom.getStyle(d,
 
"position")=="static"&&c.Dom.setStyle(d,"position","relative");g(e.points.from)?c.Dom.setXY(d,e.points.from):c.Dom.setXY(d,c.Dom.getXY(d));d=this.getAttribute("points");if(g(e.points.to)){k=f.call(this,e.points.to,d);c.Dom.getXY(this.getEl());l=0;for(q=i.length;l<q;++l)i[l]=f.call(this,i[l],d)}else if(g(e.points.by)){k=[d[0]+e.points.by[0],d[1]+e.points.by[1]];l=0;for(q=i.length;l<q;++l)i[l]=[d[0]+i[l][0],d[1]+i[l][1]]}this.runtimeAttributes[a]=[d];i.length>0&&(this.runtimeAttributes[a]=this.runtimeAttributes[a].concat(i));
 
this.runtimeAttributes[a][this.runtimeAttributes[a].length]=k}else b.setRuntimeAttribute.call(this,a)};var f=function(a,b){var e=c.Dom.getXY(this.getEl());return a=[a[0]-e[0]+b[0],a[1]-e[1]+b[1]]},g=function(a){return typeof a!=="undefined"};c.Motion=a})();
 
(function(){var a=function(b,d,c,h){b&&a.superclass.constructor.call(this,b,d,c,h)};a.NAME="Scroll";var c=YAHOO.util;YAHOO.extend(a,c.ColorAnim);var b=a.superclass,d=a.prototype;d.doMethod=function(a,d,c){var h=null;return h=a=="scroll"?[this.method(this.currentFrame,d[0],c[0]-d[0],this.totalFrames),this.method(this.currentFrame,d[1],c[1]-d[1],this.totalFrames)]:b.doMethod.call(this,a,d,c)};d.getAttribute=function(a){var d=null,d=this.getEl();return d=a=="scroll"?[d.scrollLeft,d.scrollTop]:b.getAttribute.call(this,
 
a)};d.setAttribute=function(a,d,c){var h=this.getEl();if(a=="scroll"){h.scrollLeft=d[0];h.scrollTop=d[1]}else b.setAttribute.call(this,a,d,c)};c.Scroll=a})();YAHOO.register("animation",YAHOO.util.Anim,{version:"2.9.0",build:"2800"});
 
YAHOO.util.DragDropMgr||(YAHOO.util.DragDropMgr=function(){var a=YAHOO.util.Event,c=YAHOO.util.Dom;return{useShim:false,_shimActive:false,_shimState:false,_debugShim:false,_createShim:function(){var b=document.createElement("div");b.id="yui-ddm-shim";document.body.firstChild?document.body.insertBefore(b,document.body.firstChild):document.body.appendChild(b);b.style.display="none";b.style.backgroundColor="red";b.style.position="absolute";b.style.zIndex="99999";c.setStyle(b,"opacity","0");this._shim=
 
b;a.on(b,"mouseup",this.handleMouseUp,this,true);a.on(b,"mousemove",this.handleMouseMove,this,true);a.on(window,"scroll",this._sizeShim,this,true)},_sizeShim:function(){if(this._shimActive){var a=this._shim;a.style.height=c.getDocumentHeight()+"px";a.style.width=c.getDocumentWidth()+"px";a.style.top="0";a.style.left="0"}},_activateShim:function(){if(this.useShim){this._shim||this._createShim();this._shimActive=true;var a=this._shim,d="0";this._debugShim&&(d=".5");c.setStyle(a,"opacity",d);this._sizeShim();
 
a.style.display="block"}},_deactivateShim:function(){this._shim.style.display="none";this._shimActive=false},_shim:null,ids:{},handleIds:{},dragCurrent:null,dragOvers:{},deltaX:0,deltaY:0,preventDefault:true,stopPropagation:true,initialized:false,locked:false,interactionInfo:null,init:function(){this.initialized=true},POINT:0,INTERSECT:1,STRICT_INTERSECT:2,mode:0,_execOnAll:function(a,d){for(var f in this.ids)for(var c in this.ids[f]){var j=this.ids[f][c];this.isTypeOfDD(j)&&j[a].apply(j,d)}},_onLoad:function(){this.init();
 
a.on(document,"mouseup",this.handleMouseUp,this,true);a.on(document,"mousemove",this.handleMouseMove,this,true);a.on(window,"unload",this._onUnload,this,true);a.on(window,"resize",this._onResize,this,true)},_onResize:function(){this._execOnAll("resetConstraints",[])},lock:function(){this.locked=true},unlock:function(){this.locked=false},isLocked:function(){return this.locked},locationCache:{},useCache:true,clickPixelThresh:3,clickTimeThresh:1E3,dragThreshMet:false,clickTimeout:null,startX:0,startY:0,
 
fromTimeout:false,regDragDrop:function(a,d){this.initialized||this.init();this.ids[d]||(this.ids[d]={});this.ids[d][a.id]=a},removeDDFromGroup:function(a,d){this.ids[d]||(this.ids[d]={});var f=this.ids[d];f&&f[a.id]&&delete f[a.id]},_remove:function(a){for(var d in a.groups)if(d){var f=this.ids[d];f&&f[a.id]&&delete f[a.id]}delete this.handleIds[a.id]},regHandle:function(a,d){this.handleIds[a]||(this.handleIds[a]={});this.handleIds[a][d]=d},isDragDrop:function(a){return this.getDDById(a)?true:false},
 
getRelated:function(a,d){var f=[],c;for(c in a.groups)for(var j in this.ids[c]){var h=this.ids[c][j];if(this.isTypeOfDD(h)&&(!d||h.isTarget))f[f.length]=h}return f},isLegalTarget:function(a,d){for(var f=this.getRelated(a,true),c=0,j=f.length;c<j;++c)if(f[c].id==d.id)return true;return false},isTypeOfDD:function(a){return a&&a.__ygDragDrop},isHandle:function(a,d){return this.handleIds[a]&&this.handleIds[a][d]},getDDById:function(a){for(var d in this.ids)if(this.ids[d][a])return this.ids[d][a];return null},
 
handleMouseDown:function(a,d){this.currentTarget=YAHOO.util.Event.getTarget(a);this.dragCurrent=d;var f=d.getEl();this.startX=YAHOO.util.Event.getPageX(a);this.startY=YAHOO.util.Event.getPageY(a);this.deltaX=this.startX-f.offsetLeft;this.deltaY=this.startY-f.offsetTop;this.dragThreshMet=false;this.clickTimeout=setTimeout(function(){var a=YAHOO.util.DDM;a.startDrag(a.startX,a.startY);a.fromTimeout=true},this.clickTimeThresh)},startDrag:function(a,d){if(this.dragCurrent&&this.dragCurrent.useShim){this._shimState=
 
this.useShim;this.useShim=true}this._activateShim();clearTimeout(this.clickTimeout);var f=this.dragCurrent;if(f&&f.events.b4StartDrag){f.b4StartDrag(a,d);f.fireEvent("b4StartDragEvent",{x:a,y:d})}if(f&&f.events.startDrag){f.startDrag(a,d);f.fireEvent("startDragEvent",{x:a,y:d})}this.dragThreshMet=true},handleMouseUp:function(a){if(this.dragCurrent){clearTimeout(this.clickTimeout);if(this.dragThreshMet){if(this.fromTimeout){this.fromTimeout=false;this.handleMouseMove(a)}this.fromTimeout=false;this.fireEvents(a,
 
true)}this.stopDrag(a);this.stopEvent(a)}},stopEvent:function(a){this.stopPropagation&&YAHOO.util.Event.stopPropagation(a);this.preventDefault&&YAHOO.util.Event.preventDefault(a)},stopDrag:function(a,d){var f=this.dragCurrent;if(f&&!d){if(this.dragThreshMet){if(f.events.b4EndDrag){f.b4EndDrag(a);f.fireEvent("b4EndDragEvent",{e:a})}if(f.events.endDrag){f.endDrag(a);f.fireEvent("endDragEvent",{e:a})}}if(f.events.mouseUp){f.onMouseUp(a);f.fireEvent("mouseUpEvent",{e:a})}}if(this._shimActive){this._deactivateShim();
 
if(this.dragCurrent&&this.dragCurrent.useShim){this.useShim=this._shimState;this._shimState=false}}this.dragCurrent=null;this.dragOvers={}},handleMouseMove:function(a){var d=this.dragCurrent;if(d){if(YAHOO.env.ua.ie&&YAHOO.env.ua.ie<9&&!a.button){this.stopEvent(a);return this.handleMouseUp(a)}if(!this.dragThreshMet){var f=Math.abs(this.startX-YAHOO.util.Event.getPageX(a)),c=Math.abs(this.startY-YAHOO.util.Event.getPageY(a));(f>this.clickPixelThresh||c>this.clickPixelThresh)&&this.startDrag(this.startX,
 
this.startY)}if(this.dragThreshMet){if(d&&d.events.b4Drag){d.b4Drag(a);d.fireEvent("b4DragEvent",{e:a})}if(d&&d.events.drag){d.onDrag(a);d.fireEvent("dragEvent",{e:a})}d&&this.fireEvents(a,false)}this.stopEvent(a)}},fireEvents:function(a,d){var f=this.dragCurrent;if(f&&!f.isLocked()&&!f.dragOnly){var c=YAHOO.util.Event.getPageX(a),j=YAHOO.util.Event.getPageY(a),h=new YAHOO.util.Point(c,j),j=f.getTargetCoord(h.x,h.y),e=f.getDragEl(),c=["out","over","drop","enter"],i=new YAHOO.util.Region(j.y,j.x+e.offsetWidth,
 
j.y+e.offsetHeight,j.x),k=[],l={},j={},e=[],q={outEvts:[],overEvts:[],dropEvts:[],enterEvts:[]},p;for(p in this.dragOvers){var n=this.dragOvers[p];if(this.isTypeOfDD(n)){this.isOverTarget(h,n,this.mode,i)||q.outEvts.push(n);k[p]=true;delete this.dragOvers[p]}}for(var o in f.groups)if("string"==typeof o)for(p in this.ids[o]){n=this.ids[o][p];if(this.isTypeOfDD(n)&&n.isTarget&&(!n.isLocked()&&n!=f)&&this.isOverTarget(h,n,this.mode,i)){l[o]=true;if(d)q.dropEvts.push(n);else{k[n.id]?q.overEvts.push(n):
 
q.enterEvts.push(n);this.dragOvers[n.id]=n}}}this.interactionInfo={out:q.outEvts,enter:q.enterEvts,over:q.overEvts,drop:q.dropEvts,point:h,draggedRegion:i,sourceRegion:this.locationCache[f.id],validDrop:d};for(var m in l)e.push(m);if(d&&!q.dropEvts.length){this.interactionInfo.validDrop=false;if(f.events.invalidDrop){f.onInvalidDrop(a);f.fireEvent("invalidDropEvent",{e:a})}}for(p=0;p<c.length;p++){o=null;q[c[p]+"Evts"]&&(o=q[c[p]+"Evts"]);if(o&&o.length){k=c[p].charAt(0).toUpperCase()+c[p].substr(1);
 
m="onDrag"+k;h="b4Drag"+k;i="drag"+k+"Event";k="drag"+k;if(this.mode){if(f.events[h]){f[h](a,o,e);j[m]=f.fireEvent(h+"Event",{event:a,info:o,group:e})}if(f.events[k]&&j[m]!==false){f[m](a,o,e);f.fireEvent(i,{event:a,info:o,group:e})}}else{l=0;for(n=o.length;l<n;++l){if(f.events[h]){f[h](a,o[l].id,e[0]);j[m]=f.fireEvent(h+"Event",{event:a,info:o[l].id,group:e[0]})}if(f.events[k]&&j[m]!==false){f[m](a,o[l].id,e[0]);f.fireEvent(i,{event:a,info:o[l].id,group:e[0]})}}}}}}},getBestMatch:function(a){var d=
 
null,f=a.length;if(f==1)d=a[0];else for(var c=0;c<f;++c){var j=a[c];if(this.mode==this.INTERSECT&&j.cursorIsOver){d=j;break}else if(!d||!d.overlap||j.overlap&&d.overlap.getArea()<j.overlap.getArea())d=j}return d},refreshCache:function(a){var a=a||this.ids,d;for(d in a)if("string"==typeof d)for(var f in this.ids[d]){var c=this.ids[d][f];if(this.isTypeOfDD(c)){var j=this.getLocation(c);j?this.locationCache[c.id]=j:delete this.locationCache[c.id]}}},verifyEl:function(a){try{if(a&&a.offsetParent)return true}catch(d){}return false},
 
getLocation:function(a){if(!this.isTypeOfDD(a))return null;var d=a.getEl(),f,c,j;try{f=YAHOO.util.Dom.getXY(d)}catch(h){}if(!f)return null;c=f[0];j=c+d.offsetWidth;f=f[1];return new YAHOO.util.Region(f-a.padding[0],j+a.padding[1],f+d.offsetHeight+a.padding[2],c-a.padding[3])},isOverTarget:function(a,d,f,c){var j=this.locationCache[d.id];if(!j||!this.useCache){j=this.getLocation(d);this.locationCache[d.id]=j}if(!j)return false;d.cursorIsOver=j.contains(a);var h=this.dragCurrent;if(!h||!f&&!h.constrainX&&
 
!h.constrainY)return d.cursorIsOver;d.overlap=null;if(!c){a=h.getTargetCoord(a.x,a.y);h=h.getDragEl();c=new YAHOO.util.Region(a.y,a.x+h.offsetWidth,a.y+h.offsetHeight,a.x)}if(j=c.intersect(j)){d.overlap=j;return f?true:d.cursorIsOver}return false},_onUnload:function(){this.unregAll()},unregAll:function(){if(this.dragCurrent){this.stopDrag();this.dragCurrent=null}this._execOnAll("unreg",[]);this.ids={}},elementCache:{},getElWrapper:function(a){var d=this.elementCache[a];if(!d||!d.el)d=this.elementCache[a]=
 
new this.ElementWrapper(YAHOO.util.Dom.get(a));return d},getElement:function(a){return YAHOO.util.Dom.get(a)},getCss:function(a){return(a=YAHOO.util.Dom.get(a))?a.style:null},ElementWrapper:function(a){this.id=(this.el=a||null)&&a.id;this.css=this.el&&a.style},getPosX:function(a){return YAHOO.util.Dom.getX(a)},getPosY:function(a){return YAHOO.util.Dom.getY(a)},swapNode:function(a,d){if(a.swapNode)a.swapNode(d);else{var f=d.parentNode,c=d.nextSibling;if(c==a)f.insertBefore(a,d);else if(d==a.nextSibling)f.insertBefore(d,
 
a);else{a.parentNode.replaceChild(d,a);f.insertBefore(a,c)}}},getScroll:function(){var a,d,f=document.documentElement,c=document.body;if(f&&(f.scrollTop||f.scrollLeft)){a=f.scrollTop;d=f.scrollLeft}else if(c){a=c.scrollTop;d=c.scrollLeft}return{top:a,left:d}},getStyle:function(a,d){return YAHOO.util.Dom.getStyle(a,d)},getScrollTop:function(){return this.getScroll().top},getScrollLeft:function(){return this.getScroll().left},moveToEl:function(a,d){var f=YAHOO.util.Dom.getXY(d);YAHOO.util.Dom.setXY(a,
 
f)},getClientHeight:function(){return YAHOO.util.Dom.getViewportHeight()},getClientWidth:function(){return YAHOO.util.Dom.getViewportWidth()},numericSort:function(a,d){return a-d},_timeoutCount:0,_addListeners:function(){var a=YAHOO.util.DDM;if(YAHOO.util.Event&&document)a._onLoad();else if(!(a._timeoutCount>2E3)){setTimeout(a._addListeners,10);if(document&&document.body)a._timeoutCount=a._timeoutCount+1}},handleWasClicked:function(a,d){if(this.isHandle(d,a.id))return true;for(var f=a.parentNode;f;){if(this.isHandle(d,
 
f.id))return true;f=f.parentNode}return false}}}(),YAHOO.util.DDM=YAHOO.util.DragDropMgr,YAHOO.util.DDM._addListeners());
 
(function(){var a=YAHOO.util.Event,c=YAHOO.util.Dom;YAHOO.util.DragDrop=function(a,d,f){a&&this.init(a,d,f)};YAHOO.util.DragDrop.prototype={events:null,on:function(){this.subscribe.apply(this,arguments)},id:null,config:null,dragElId:null,handleElId:null,invalidHandleTypes:null,invalidHandleIds:null,invalidHandleClasses:null,startPageX:0,startPageY:0,groups:null,locked:false,lock:function(){this.locked=true},unlock:function(){this.locked=false},isTarget:true,padding:null,dragOnly:false,useShim:false,
 
_domRef:null,__ygDragDrop:true,constrainX:false,constrainY:false,minX:0,maxX:0,minY:0,maxY:0,deltaX:0,deltaY:0,maintainOffset:false,xTicks:null,yTicks:null,primaryButtonOnly:true,available:false,hasOuterHandles:false,cursorIsOver:false,overlap:null,b4StartDrag:function(){},startDrag:function(){},b4Drag:function(){},onDrag:function(){},onDragEnter:function(){},b4DragOver:function(){},onDragOver:function(){},b4DragOut:function(){},onDragOut:function(){},b4DragDrop:function(){},onDragDrop:function(){},
 
onInvalidDrop:function(){},b4EndDrag:function(){},endDrag:function(){},b4MouseDown:function(){},onMouseDown:function(){},onMouseUp:function(){},onAvailable:function(){},getEl:function(){if(!this._domRef)this._domRef=c.get(this.id);return this._domRef},getDragEl:function(){return c.get(this.dragElId)},init:function(b,d,f){this.initTarget(b,d,f);a.on(this._domRef||this.id,"mousedown",this.handleMouseDown,this,true);for(var c in this.events)this.createEvent(c+"Event")},initTarget:function(b,d,f){this.config=
 
f||{};this.events={};this.DDM=YAHOO.util.DDM;this.groups={};if(typeof b!=="string"){this._domRef=b;b=c.generateId(b)}this.id=b;this.addToGroup(d?d:"default");this.handleElId=b;a.onAvailable(b,this.handleOnAvailable,this,true);this.setDragElId(b);this.invalidHandleTypes={A:"A"};this.invalidHandleIds={};this.invalidHandleClasses=[];this.applyConfig()},applyConfig:function(){this.events={mouseDown:true,b4MouseDown:true,mouseUp:true,b4StartDrag:true,startDrag:true,b4EndDrag:true,endDrag:true,drag:true,
 
b4Drag:true,invalidDrop:true,b4DragOut:true,dragOut:true,dragEnter:true,b4DragOver:true,dragOver:true,b4DragDrop:true,dragDrop:true};if(this.config.events)for(var a in this.config.events)this.config.events[a]===false&&(this.events[a]=false);this.padding=this.config.padding||[0,0,0,0];this.isTarget=this.config.isTarget!==false;this.maintainOffset=this.config.maintainOffset;this.primaryButtonOnly=this.config.primaryButtonOnly!==false;this.dragOnly=this.config.dragOnly===true?true:false;this.useShim=
 
this.config.useShim===true?true:false},handleOnAvailable:function(){this.available=true;this.resetConstraints();this.onAvailable()},setPadding:function(a,d,f,c){this.padding=!d&&0!==d?[a,a,a,a]:!f&&0!==f?[a,d,a,d]:[a,d,f,c]},setInitPosition:function(a,d){var f=this.getEl();if(this.DDM.verifyEl(f)){var g=a||0,j=d||0,f=c.getXY(f);this.initPageX=f[0]-g;this.initPageY=f[1]-j;this.lastPageX=f[0];this.lastPageY=f[1];this.setStartPosition(f)}},setStartPosition:function(a){a=a||c.getXY(this.getEl());this.deltaSetXY=
 
null;this.startPageX=a[0];this.startPageY=a[1]},addToGroup:function(a){this.groups[a]=true;this.DDM.regDragDrop(this,a)},removeFromGroup:function(a){this.groups[a]&&delete this.groups[a];this.DDM.removeDDFromGroup(this,a)},setDragElId:function(a){this.dragElId=a},setHandleElId:function(a){typeof a!=="string"&&(a=c.generateId(a));this.handleElId=a;this.DDM.regHandle(this.id,a)},setOuterHandleElId:function(b){typeof b!=="string"&&(b=c.generateId(b));a.on(b,"mousedown",this.handleMouseDown,this,true);
 
this.setHandleElId(b);this.hasOuterHandles=true},unreg:function(){a.removeListener(this.id,"mousedown",this.handleMouseDown);this._domRef=null;this.DDM._remove(this)},isLocked:function(){return this.DDM.isLocked()||this.locked},handleMouseDown:function(b){var d=b.which||b.button;if(!(this.primaryButtonOnly&&d>1)&&!this.isLocked()){var d=this.b4MouseDown(b),f=true;this.events.b4MouseDown&&(f=this.fireEvent("b4MouseDownEvent",b));var c=this.onMouseDown(b),j=true;this.events.mouseDown&&(j=c===false?
 
false:this.fireEvent("mouseDownEvent",b));if(!(d===false||c===false||f===false||j===false)){this.DDM.refreshCache(this.groups);d=new YAHOO.util.Point(a.getPageX(b),a.getPageY(b));if((this.hasOuterHandles||this.DDM.isOverTarget(d,this))&&this.clickValidator(b)){this.setStartPosition();this.DDM.handleMouseDown(b,this);this.DDM.stopEvent(b)}}}},clickValidator:function(a){a=YAHOO.util.Event.getTarget(a);return this.isValidHandleChild(a)&&(this.id==this.handleElId||this.DDM.handleWasClicked(a,this.id))},
 
getTargetCoord:function(a,d){var f=a-this.deltaX,c=d-this.deltaY;if(this.constrainX){if(f<this.minX)f=this.minX;if(f>this.maxX)f=this.maxX}if(this.constrainY){if(c<this.minY)c=this.minY;if(c>this.maxY)c=this.maxY}f=this.getTick(f,this.xTicks);c=this.getTick(c,this.yTicks);return{x:f,y:c}},addInvalidHandleType:function(a){a=a.toUpperCase();this.invalidHandleTypes[a]=a},addInvalidHandleId:function(a){typeof a!=="string"&&(a=c.generateId(a));this.invalidHandleIds[a]=a},addInvalidHandleClass:function(a){this.invalidHandleClasses.push(a)},
 
removeInvalidHandleType:function(a){delete this.invalidHandleTypes[a.toUpperCase()]},removeInvalidHandleId:function(a){typeof a!=="string"&&(a=c.generateId(a));delete this.invalidHandleIds[a]},removeInvalidHandleClass:function(a){for(var d=0,f=this.invalidHandleClasses.length;d<f;++d)this.invalidHandleClasses[d]==a&&delete this.invalidHandleClasses[d]},isValidHandleChild:function(a){var d=true,f;try{f=a.nodeName.toUpperCase()}catch(g){f=a.nodeName}d=(d=d&&!this.invalidHandleTypes[f])&&!this.invalidHandleIds[a.id];
 
f=0;for(var j=this.invalidHandleClasses.length;d&&f<j;++f)d=!c.hasClass(a,this.invalidHandleClasses[f]);return d},setXTicks:function(a,d){this.xTicks=[];this.xTickSize=d;for(var f={},c=this.initPageX;c>=this.minX;c=c-d)if(!f[c]){this.xTicks[this.xTicks.length]=c;f[c]=true}for(c=this.initPageX;c<=this.maxX;c=c+d)if(!f[c]){this.xTicks[this.xTicks.length]=c;f[c]=true}this.xTicks.sort(this.DDM.numericSort)},setYTicks:function(a,d){this.yTicks=[];this.yTickSize=d;for(var f={},c=this.initPageY;c>=this.minY;c=
 
c-d)if(!f[c]){this.yTicks[this.yTicks.length]=c;f[c]=true}for(c=this.initPageY;c<=this.maxY;c=c+d)if(!f[c]){this.yTicks[this.yTicks.length]=c;f[c]=true}this.yTicks.sort(this.DDM.numericSort)},setXConstraint:function(a,d,f){this.leftConstraint=parseInt(a,10);this.rightConstraint=parseInt(d,10);this.minX=this.initPageX-this.leftConstraint;this.maxX=this.initPageX+this.rightConstraint;f&&this.setXTicks(this.initPageX,f);this.constrainX=true},clearConstraints:function(){this.constrainY=this.constrainX=
 
false;this.clearTicks()},clearTicks:function(){this.yTicks=this.xTicks=null;this.yTickSize=this.xTickSize=0},setYConstraint:function(a,d,f){this.topConstraint=parseInt(a,10);this.bottomConstraint=parseInt(d,10);this.minY=this.initPageY-this.topConstraint;this.maxY=this.initPageY+this.bottomConstraint;f&&this.setYTicks(this.initPageY,f);this.constrainY=true},resetConstraints:function(){this.initPageX||this.initPageX===0?this.setInitPosition(this.maintainOffset?this.lastPageX-this.initPageX:0,this.maintainOffset?
 
this.lastPageY-this.initPageY:0):this.setInitPosition();this.constrainX&&this.setXConstraint(this.leftConstraint,this.rightConstraint,this.xTickSize);this.constrainY&&this.setYConstraint(this.topConstraint,this.bottomConstraint,this.yTickSize)},getTick:function(a,d){if(d){if(d[0]>=a)return d[0];for(var f=0,c=d.length;f<c;++f){var j=f+1;if(d[j]&&d[j]>=a)return d[j]-a>a-d[f]?d[f]:d[j]}return d[d.length-1]}return a},toString:function(){return"DragDrop "+this.id}};YAHOO.augment(YAHOO.util.DragDrop,YAHOO.util.EventProvider)})();
 
YAHOO.util.DD=function(a,c,b){a&&this.init(a,c,b)};
 
YAHOO.extend(YAHOO.util.DD,YAHOO.util.DragDrop,{scroll:!0,autoOffset:function(a,c){this.setDelta(a-this.startPageX,c-this.startPageY)},setDelta:function(a,c){this.deltaX=a;this.deltaY=c},setDragElPos:function(a,c){this.alignElWithMouse(this.getDragEl(),a,c)},alignElWithMouse:function(a,c,b){var d=this.getTargetCoord(c,b);if(this.deltaSetXY){YAHOO.util.Dom.setStyle(a,"left",d.x+this.deltaSetXY[0]+"px");YAHOO.util.Dom.setStyle(a,"top",d.y+this.deltaSetXY[1]+"px")}else{YAHOO.util.Dom.setXY(a,[d.x,d.y]);
 
c=parseInt(YAHOO.util.Dom.getStyle(a,"left"),10);b=parseInt(YAHOO.util.Dom.getStyle(a,"top"),10);this.deltaSetXY=[c-d.x,b-d.y]}this.cachePosition(d.x,d.y);var f=this;setTimeout(function(){f.autoScroll.call(f,d.x,d.y,a.offsetHeight,a.offsetWidth)},0)},cachePosition:function(a,c){if(a){this.lastPageX=a;this.lastPageY=c}else{var b=YAHOO.util.Dom.getXY(this.getEl());this.lastPageX=b[0];this.lastPageY=b[1]}},autoScroll:function(a,c,b,d){if(this.scroll){var f=this.DDM.getClientHeight(),g=this.DDM.getClientWidth(),
 
j=this.DDM.getScrollTop(),h=this.DDM.getScrollLeft(),d=d+a,e=f+j-c-this.deltaY,i=g+h-a-this.deltaX,k=document.all?80:30;b+c>f&&e<40&&window.scrollTo(h,j+k);c<j&&(j>0&&c-j<40)&&window.scrollTo(h,j-k);d>g&&i<40&&window.scrollTo(h+k,j);a<h&&(h>0&&a-h<40)&&window.scrollTo(h-k,j)}},applyConfig:function(){YAHOO.util.DD.superclass.applyConfig.call(this);this.scroll=this.config.scroll!==false},b4MouseDown:function(a){this.setStartPosition();this.autoOffset(YAHOO.util.Event.getPageX(a),YAHOO.util.Event.getPageY(a))},
 
b4Drag:function(a){this.setDragElPos(YAHOO.util.Event.getPageX(a),YAHOO.util.Event.getPageY(a))},toString:function(){return"DD "+this.id}});YAHOO.util.DDProxy=function(a,c,b){if(a){this.init(a,c,b);this.initFrame()}};YAHOO.util.DDProxy.dragElId="ygddfdiv";
 
YAHOO.extend(YAHOO.util.DDProxy,YAHOO.util.DD,{resizeFrame:!0,centerFrame:!1,createFrame:function(){var a=this,c=document.body;if(!c||!c.firstChild)setTimeout(function(){a.createFrame()},50);else{var b=this.getDragEl(),d=YAHOO.util.Dom;if(!b){b=document.createElement("div");b.id=this.dragElId;var f=b.style;f.position="absolute";f.visibility="hidden";f.cursor="move";f.border="2px solid #aaa";f.zIndex=999;f.height="25px";f.width="25px";f=document.createElement("div");d.setStyle(f,"height","100%");d.setStyle(f,
 
"width","100%");d.setStyle(f,"background-color","#ccc");d.setStyle(f,"opacity","0");b.appendChild(f);c.insertBefore(b,c.firstChild)}}},initFrame:function(){this.createFrame()},applyConfig:function(){YAHOO.util.DDProxy.superclass.applyConfig.call(this);this.resizeFrame=this.config.resizeFrame!==false;this.centerFrame=this.config.centerFrame;this.setDragElId(this.config.dragElId||YAHOO.util.DDProxy.dragElId)},showFrame:function(a,c){this.getEl();var b=this.getDragEl(),d=b.style;this._resizeProxy();
 
this.centerFrame&&this.setDelta(Math.round(parseInt(d.width,10)/2),Math.round(parseInt(d.height,10)/2));this.setDragElPos(a,c);YAHOO.util.Dom.setStyle(b,"visibility","visible")},_resizeProxy:function(){if(this.resizeFrame){var a=YAHOO.util.Dom,c=this.getEl(),b=this.getDragEl(),d=parseInt(a.getStyle(b,"borderTopWidth"),10),f=parseInt(a.getStyle(b,"borderRightWidth"),10),g=parseInt(a.getStyle(b,"borderBottomWidth"),10),j=parseInt(a.getStyle(b,"borderLeftWidth"),10);isNaN(d)&&(d=0);isNaN(f)&&(f=0);isNaN(g)&&
 
(g=0);isNaN(j)&&(j=0);f=Math.max(0,c.offsetWidth-f-j);c=Math.max(0,c.offsetHeight-d-g);a.setStyle(b,"width",f+"px");a.setStyle(b,"height",c+"px")}},b4MouseDown:function(a){this.setStartPosition();var c=YAHOO.util.Event.getPageX(a),a=YAHOO.util.Event.getPageY(a);this.autoOffset(c,a)},b4StartDrag:function(a,c){this.showFrame(a,c)},b4EndDrag:function(){YAHOO.util.Dom.setStyle(this.getDragEl(),"visibility","hidden")},endDrag:function(){var a=YAHOO.util.Dom,c=this.getEl(),b=this.getDragEl();a.setStyle(b,
 
"visibility","");a.setStyle(c,"visibility","hidden");YAHOO.util.DDM.moveToEl(c,b);a.setStyle(b,"visibility","hidden");a.setStyle(c,"visibility","")},toString:function(){return"DDProxy "+this.id}});YAHOO.util.DDTarget=function(a,c,b){a&&this.initTarget(a,c,b)};YAHOO.extend(YAHOO.util.DDTarget,YAHOO.util.DragDrop,{toString:function(){return"DDTarget "+this.id}});YAHOO.register("dragdrop",YAHOO.util.DragDropMgr,{version:"2.9.0",build:"2800"});
 
YAHOO.util.Attribute=function(a,c){if(c){this.owner=c;this.configure(a,true)}};YAHOO.util.Attribute.INVALID_VALUE={};
 
YAHOO.util.Attribute.prototype={name:void 0,value:null,owner:null,readOnly:!1,writeOnce:!1,_initialConfig:null,_written:!1,method:null,setter:null,getter:null,validator:null,getValue:function(){var a=this.value;this.getter&&(a=this.getter.call(this.owner,this.name,a));return a},setValue:function(a,c){var b,d=this.owner,f=this.name,g=YAHOO.util.Attribute.INVALID_VALUE,j={type:f,prevValue:this.getValue(),newValue:a};if(this.readOnly||this.writeOnce&&this._written||this.validator&&!this.validator.call(d,
 
a))return false;if(!c){b=d.fireBeforeChangeEvent(j);if(b===false)return false}if(this.setter){a=this.setter.call(d,a,this.name);if(a===g)return false}if(this.method&&this.method.call(d,a,this.name)===g)return false;this.value=a;this._written=true;j.type=f;c||this.owner.fireChangeEvent(j);return true},configure:function(a,c){a=a||{};if(c)this._written=false;this._initialConfig=this._initialConfig||{};for(var b in a)if(a.hasOwnProperty(b)){this[b]=a[b];c&&(this._initialConfig[b]=a[b])}},resetValue:function(){return this.setValue(this._initialConfig.value)},
 
resetConfig:function(){this.configure(this._initialConfig,true)},refresh:function(a){this.setValue(this.value,a)}};
 
(function(){var a=YAHOO.util.Lang;YAHOO.util.AttributeProvider=function(){};YAHOO.util.AttributeProvider.prototype={_configs:null,get:function(a){this._configs=this._configs||{};var b=this._configs[a];return!b||!this._configs.hasOwnProperty(a)?null:b.getValue()},set:function(a,b,d){this._configs=this._configs||{};a=this._configs[a];return!a?false:a.setValue(b,d)},getAttributeKeys:function(){this._configs=this._configs;var c=[],b;for(b in this._configs)a.hasOwnProperty(this._configs,b)&&!a.isUndefined(this._configs[b])&&
 
(c[c.length]=b);return c},setAttributes:function(c,b){for(var d in c)a.hasOwnProperty(c,d)&&this.set(d,c[d],b)},resetValue:function(a,b){this._configs=this._configs||{};if(this._configs[a]){this.set(a,this._configs[a]._initialConfig.value,b);return true}return false},refresh:function(c,b){for(var d=this._configs=this._configs||{},c=(a.isString(c)?[c]:c)||this.getAttributeKeys(),f=0,g=c.length;f<g;++f)d.hasOwnProperty(c[f])&&this._configs[c[f]].refresh(b)},register:function(a,b){this.setAttributeConfig(a,
 
b)},getAttributeConfig:function(c){this._configs=this._configs||{};var b=this._configs[c]||{},d={};for(c in b)a.hasOwnProperty(b,c)&&(d[c]=b[c]);return d},setAttributeConfig:function(a,b,d){this._configs=this._configs||{};b=b||{};if(this._configs[a])this._configs[a].configure(b,d);else{b.name=a;this._configs[a]=this.createAttribute(b)}},configureAttribute:function(a,b,d){this.setAttributeConfig(a,b,d)},resetAttributeConfig:function(a){this._configs=this._configs||{};this._configs[a].resetConfig()},
 
subscribe:function(a,b){this._events=this._events||{};a in this._events||(this._events[a]=this.createEvent(a));YAHOO.util.EventProvider.prototype.subscribe.apply(this,arguments)},on:function(){this.subscribe.apply(this,arguments)},addListener:function(){this.subscribe.apply(this,arguments)},fireBeforeChangeEvent:function(a){var b;b="before"+(a.type.charAt(0).toUpperCase()+a.type.substr(1)+"Change");a.type=b;return this.fireEvent(a.type,a)},fireChangeEvent:function(a){a.type=a.type+"Change";return this.fireEvent(a.type,
 
a)},createAttribute:function(a){return new YAHOO.util.Attribute(a,this)}};YAHOO.augment(YAHOO.util.AttributeProvider,YAHOO.util.EventProvider)})();
 
(function(){var a=YAHOO.util.Dom,c=YAHOO.util.AttributeProvider,b={mouseenter:true,mouseleave:true},d=function(a,b){this.init.apply(this,arguments)};d.DOM_EVENTS={click:true,dblclick:true,keydown:true,keypress:true,keyup:true,mousedown:true,mousemove:true,mouseout:true,mouseover:true,mouseup:true,mouseenter:true,mouseleave:true,focus:true,blur:true,submit:true,change:true};d.prototype={DOM_EVENTS:null,DEFAULT_HTML_SETTER:function(a,b){var d=this.get("element");d&&(d[b]=a);return a},DEFAULT_HTML_GETTER:function(a){var b=
 
this.get("element"),d;b&&(d=b[a]);return d},appendChild:function(a){a=a.get?a.get("element"):a;return this.get("element").appendChild(a)},getElementsByTagName:function(a){return this.get("element").getElementsByTagName(a)},hasChildNodes:function(){return this.get("element").hasChildNodes()},insertBefore:function(a,b){a=a.get?a.get("element"):a;b=b&&b.get?b.get("element"):b;return this.get("element").insertBefore(a,b)},removeChild:function(a){a=a.get?a.get("element"):a;return this.get("element").removeChild(a)},
 
replaceChild:function(a,b){a=a.get?a.get("element"):a;b=b.get?b.get("element"):b;return this.get("element").replaceChild(a,b)},initAttributes:function(){},addListener:function(a,d,c,h){var h=h||this,e=YAHOO.util.Event,i=this.get("element")||this.get("id"),k=this;if(b[a]&&!e._createMouseDelegate)return false;if(!this._events[a]){if(i&&this.DOM_EVENTS[a])e.on(i,a,function(b,d){if(b.srcElement&&!b.target)b.target=b.srcElement;if(b.toElement&&!b.relatedTarget||b.fromElement&&!b.relatedTarget)b.relatedTarget=
 
e.getRelatedTarget(b);if(!b.currentTarget)b.currentTarget=i;k.fireEvent(a,b,d)},c,h);this.createEvent(a,{scope:this})}return YAHOO.util.EventProvider.prototype.subscribe.apply(this,arguments)},on:function(){return this.addListener.apply(this,arguments)},subscribe:function(){return this.addListener.apply(this,arguments)},removeListener:function(a,b){return this.unsubscribe.apply(this,arguments)},addClass:function(b){a.addClass(this.get("element"),b)},getElementsByClassName:function(b,d){return a.getElementsByClassName(b,
 
d,this.get("element"))},hasClass:function(b){return a.hasClass(this.get("element"),b)},removeClass:function(b){return a.removeClass(this.get("element"),b)},replaceClass:function(b,d){return a.replaceClass(this.get("element"),b,d)},setStyle:function(b,d){return a.setStyle(this.get("element"),b,d)},getStyle:function(b){return a.getStyle(this.get("element"),b)},fireQueue:function(){for(var a=this._queue,b=0,d=a.length;b<d;++b)this[a[b][0]].apply(this,a[b][1])},appendTo:function(b,d){b=b.get?b.get("element"):
 
a.get(b);this.fireEvent("beforeAppendTo",{type:"beforeAppendTo",target:b});var d=d&&d.get?d.get("element"):a.get(d),c=this.get("element");if(!c||!b)return false;c.parent!=b&&(d?b.insertBefore(c,d):b.appendChild(c));this.fireEvent("appendTo",{type:"appendTo",target:b});return c},get:function(a){var b=this._configs||{},d=b.element;d&&(!b[a]&&!YAHOO.lang.isUndefined(d.value[a]))&&this._setHTMLAttrConfig(a);return c.prototype.get.call(this,a)},setAttributes:function(a,b){for(var d={},c=this._configOrder,
 
e=0,i=c.length;e<i;++e)if(a[c[e]]!==void 0){d[c[e]]=true;this.set(c[e],a[c[e]],b)}for(var k in a)a.hasOwnProperty(k)&&!d[k]&&this.set(k,a[k],b)},set:function(a,b,d){var h=this.get("element");if(h){!this._configs[a]&&!YAHOO.lang.isUndefined(h[a])&&this._setHTMLAttrConfig(a);return c.prototype.set.apply(this,arguments)}this._queue[this._queue.length]=["set",arguments];if(this._configs[a])this._configs[a].value=b},setAttributeConfig:function(a,b,d){this._configOrder.push(a);c.prototype.setAttributeConfig.apply(this,
 
arguments)},createEvent:function(a,b){this._events[a]=true;return c.prototype.createEvent.apply(this,arguments)},init:function(a,b){this._initElement(a,b)},destroy:function(){var a=this.get("element");YAHOO.util.Event.purgeElement(a,true);this.unsubscribeAll();a&&a.parentNode&&a.parentNode.removeChild(a);this._queue=[];this._events={};this._configs={};this._configOrder=[]},_initElement:function(b,c){this._queue=this._queue||[];this._events=this._events||{};this._configs=this._configs||{};this._configOrder=
 
[];c=c||{};c.element=c.element||b||null;var j=false,h=d.DOM_EVENTS;this.DOM_EVENTS=this.DOM_EVENTS||{};for(var e in h)h.hasOwnProperty(e)&&(this.DOM_EVENTS[e]=h[e]);typeof c.element==="string"&&this._setHTMLAttrConfig("id",{value:c.element});if(a.get(c.element)){j=true;this._initHTMLElement(c);this._initContent(c)}YAHOO.util.Event.onAvailable(c.element,function(){j||this._initHTMLElement(c);this.fireEvent("available",{type:"available",target:a.get(c.element)})},this,true);YAHOO.util.Event.onContentReady(c.element,
 
function(){j||this._initContent(c);this.fireEvent("contentReady",{type:"contentReady",target:a.get(c.element)})},this,true)},_initHTMLElement:function(b){this.setAttributeConfig("element",{value:a.get(b.element),readOnly:true})},_initContent:function(a){this.initAttributes(a);this.setAttributes(a,true);this.fireQueue()},_setHTMLAttrConfig:function(a,b){var d=this.get("element"),b=b||{};b.name=a;b.setter=b.setter||this.DEFAULT_HTML_SETTER;b.getter=b.getter||this.DEFAULT_HTML_GETTER;b.value=b.value||
 
d[a];this._configs[a]=new YAHOO.util.Attribute(b,this)}};YAHOO.augment(d,c);YAHOO.util.Element=d})();YAHOO.register("element",YAHOO.util.Element,{version:"2.9.0",build:"2800"});YAHOO.register("utilities",YAHOO,{version:"2.9.0",build:"2800"});
 
(function(){var a=YAHOO.lang,c=YAHOO.util;c.DataSourceBase=function(b,f){if(!(b===null||b===void 0)){this.liveData=b;this._oQueue={interval:null,conn:null,requests:[]};this.responseSchema={};if(f&&f.constructor==Object)for(var g in f)g&&(this[g]=f[g]);a.isNumber(this.maxCacheEntries);this._aIntervals=[];this.createEvent("cacheRequestEvent");this.createEvent("cacheResponseEvent");this.createEvent("requestEvent");this.createEvent("responseEvent");this.createEvent("responseParseEvent");this.createEvent("responseCacheEvent");
 
this.createEvent("dataErrorEvent");this.createEvent("cacheFlushEvent");g=c.DataSourceBase;this._sName="DataSource instance"+g._nIndex;g._nIndex++}};var b=c.DataSourceBase;a.augmentObject(b,{TYPE_UNKNOWN:-1,TYPE_JSARRAY:0,TYPE_JSFUNCTION:1,TYPE_XHR:2,TYPE_JSON:3,TYPE_XML:4,TYPE_TEXT:5,TYPE_HTMLTABLE:6,TYPE_SCRIPTNODE:7,TYPE_LOCAL:8,ERROR_DATAINVALID:"Invalid data",ERROR_DATANULL:"Null data",_nIndex:0,_nTransactionId:0,_cloneObject:function(d){if(!a.isValue(d))return d;var c={};if(Object.prototype.toString.apply(d)===
 
"[object RegExp]")c=d;else if(a.isFunction(d))c=d;else if(a.isArray(d))for(var c=[],g=0,j=d.length;g<j;g++)c[g]=b._cloneObject(d[g]);else if(a.isObject(d))for(g in d)a.hasOwnProperty(d,g)&&(c[g]=a.isValue(d[g])&&a.isObject(d[g])||a.isArray(d[g])?b._cloneObject(d[g]):d[g]);else c=d;return c},_getLocationValue:function(b,c){var g=b.locator||b.key||b,j=c.ownerDocument||c,h,e,i=null;try{if(a.isUndefined(j.evaluate)){j.setProperty("SelectionLanguage","XPath");h=c.selectNodes(g)[0];i=h.value||h.text||null}else for(h=
 
j.evaluate(g,c,j.createNSResolver(!c.ownerDocument?c.documentElement:c.ownerDocument.documentElement),0,null);e=h.iterateNext();)i=e.textContent;return i}catch(k){}},issueCallback:function(b,c,g,j){if(a.isFunction(b))b.apply(j,c);else if(a.isObject(b)){var j=b.scope||j||window,h=b.success;if(g)h=b.failure;h&&h.apply(j,c.concat([b.argument]))}},parseString:function(b){if(!a.isValue(b))return null;b=b+"";return a.isString(b)?b:null},parseNumber:function(b){if(!a.isValue(b)||b==="")return null;b=b*1;
 
return a.isNumber(b)?b:null},convertNumber:function(a){return b.parseNumber(a)},parseDate:function(b){var c=null;if(a.isValue(b)&&!(b instanceof Date))c=new Date(b);else return b;return c instanceof Date?c:null},convertDate:function(a){return b.parseDate(a)}});b.Parser={string:b.parseString,number:b.parseNumber,date:b.parseDate};b.prototype={_sName:null,_aCache:null,_oQueue:null,_aIntervals:null,maxCacheEntries:0,liveData:null,dataType:b.TYPE_UNKNOWN,responseType:b.TYPE_UNKNOWN,responseSchema:null,
 
useXPath:false,cloneBeforeCaching:false,toString:function(){return this._sName},getCachedResponse:function(a,b,c){var j=this._aCache;if(this.maxCacheEntries>0)if(j){var h=j.length;if(h>0){var e=null;this.fireEvent("cacheRequestEvent",{request:a,callback:b,caller:c});for(var i=h-1;i>=0;i--){var k=j[i];if(this.isCacheHit(a,k.request)){e=k.response;this.fireEvent("cacheResponseEvent",{request:a,response:e,callback:b,caller:c});if(i<h-1){j.splice(i,1);this.addToCache(a,e)}e.cached=true;break}}return e}}else this._aCache=
 
[];else if(j)this._aCache=null;return null},isCacheHit:function(a,b){return a===b},addToCache:function(a,c){var g=this._aCache;if(g){for(;g.length>=this.maxCacheEntries;)g.shift();c=this.cloneBeforeCaching?b._cloneObject(c):c;g[g.length]={request:a,response:c};this.fireEvent("responseCacheEvent",{request:a,response:c})}},flushCache:function(){if(this._aCache){this._aCache=[];this.fireEvent("cacheFlushEvent")}},setInterval:function(b,c,g,j){if(a.isNumber(b)&&b>=0){var h=this,b=setInterval(function(){h.makeConnection(c,
 
g,j)},b);this._aIntervals.push(b);return b}},clearInterval:function(a){for(var b=this._aIntervals||[],c=b.length-1;c>-1;c--)if(b[c]===a){b.splice(c,1);clearInterval(a)}},clearAllIntervals:function(){for(var a=this._aIntervals||[],b=a.length-1;b>-1;b--)clearInterval(a[b])},sendRequest:function(a,c,g){var j=this.getCachedResponse(a,c,g);if(j){b.issueCallback(c,[a,j],false,g);return null}return this.makeConnection(a,c,g)},makeConnection:function(a,c,g){var j=b._nTransactionId++;this.fireEvent("requestEvent",
 
{tId:j,request:a,callback:c,caller:g});this.handleResponse(a,this.liveData,c,g,j);return j},handleResponse:function(d,c,g,j,h){this.fireEvent("responseEvent",{tId:h,request:d,response:c,callback:g,caller:j});var e=this.dataType==b.TYPE_XHR?true:false,i=null,k=c;if(this.responseType===b.TYPE_UNKNOWN)if(i=c&&c.getResponseHeader?c.getResponseHeader["Content-Type"]:null)if(i.indexOf("text/xml")>-1)this.responseType=b.TYPE_XML;else if(i.indexOf("application/json")>-1)this.responseType=b.TYPE_JSON;else{if(i.indexOf("text/plain")>
 
-1)this.responseType=b.TYPE_TEXT}else if(YAHOO.lang.isArray(c))this.responseType=b.TYPE_JSARRAY;else if(c&&c.nodeType&&(c.nodeType===9||c.nodeType===1||c.nodeType===11))this.responseType=b.TYPE_XML;else if(c&&c.nodeName&&c.nodeName.toLowerCase()=="table")this.responseType=b.TYPE_HTMLTABLE;else if(YAHOO.lang.isObject(c))this.responseType=b.TYPE_JSON;else if(YAHOO.lang.isString(c))this.responseType=b.TYPE_TEXT;switch(this.responseType){case b.TYPE_JSARRAY:if(e&&c&&c.responseText)k=c.responseText;try{if(a.isString(k)){var l=
 
[k].concat(this.parseJSONArgs);if(a.JSON)k=a.JSON.parse.apply(a.JSON,l);else if(window.JSON&&JSON.parse)k=JSON.parse.apply(JSON,l);else if(k.parseJSON)k=k.parseJSON.apply(k,l.slice(1));else{for(;k.length>0&&k.charAt(0)!="{"&&k.charAt(0)!="[";)k=k.substring(1,k.length);if(k.length>0)var q=Math.max(k.lastIndexOf("]"),k.lastIndexOf("}")),k=k.substring(0,q+1),k=eval("("+k+")")}}}catch(p){}k=this.doBeforeParseData(d,k,g);i=this.parseArrayData(d,k);break;case b.TYPE_JSON:if(e&&c&&c.responseText)k=c.responseText;
 
try{if(a.isString(k)){l=[k].concat(this.parseJSONArgs);if(a.JSON)k=a.JSON.parse.apply(a.JSON,l);else if(window.JSON&&JSON.parse)k=JSON.parse.apply(JSON,l);else if(k.parseJSON)k=k.parseJSON.apply(k,l.slice(1));else{for(;k.length>0&&k.charAt(0)!="{"&&k.charAt(0)!="[";)k=k.substring(1,k.length);if(k.length>0)var n=Math.max(k.lastIndexOf("]"),k.lastIndexOf("}")),k=k.substring(0,n+1),k=eval("("+k+")")}}}catch(o){}k=this.doBeforeParseData(d,k,g);i=this.parseJSONData(d,k);break;case b.TYPE_HTMLTABLE:if(e&&
 
c.responseText){e=document.createElement("div");e.innerHTML=c.responseText;k=e.getElementsByTagName("table")[0]}k=this.doBeforeParseData(d,k,g);i=this.parseHTMLTableData(d,k);break;case b.TYPE_XML:if(e&&c.responseXML)k=c.responseXML;k=this.doBeforeParseData(d,k,g);i=this.parseXMLData(d,k);break;case b.TYPE_TEXT:if(e&&a.isString(c.responseText))k=c.responseText;k=this.doBeforeParseData(d,k,g);i=this.parseTextData(d,k);break;default:k=this.doBeforeParseData(d,k,g);i=this.parseData(d,k)}i=i||{};if(!i.results)i.results=
 
[];if(!i.meta)i.meta={};if(i.error){i.error=true;this.fireEvent("dataErrorEvent",{request:d,response:c,callback:g,caller:j,message:b.ERROR_DATANULL})}else{i=this.doBeforeCallback(d,k,i,g);this.fireEvent("responseParseEvent",{request:d,response:i,callback:g,caller:j});this.addToCache(d,i)}i.tId=h;b.issueCallback(g,[d,i],i.error,j)},doBeforeParseData:function(a,b){return b},doBeforeCallback:function(a,b,c){return c},parseData:function(b,c){return a.isValue(c)?{results:c,meta:{}}:null},parseArrayData:function(d,
 
c){if(a.isArray(c)){var g=[],j,h,e,i,k;if(a.isArray(this.responseSchema.fields)){var l=this.responseSchema.fields;for(j=l.length-1;j>=0;--j)typeof l[j]!=="object"&&(l[j]={key:l[j]});var q={};for(j=l.length-1;j>=0;--j)(h=(typeof l[j].parser==="function"?l[j].parser:b.Parser[l[j].parser+""])||l[j].converter)&&(q[l[j].key]=h);var p=a.isArray(c[0]);for(j=c.length-1;j>-1;j--){var n={};e=c[j];if(typeof e==="object")for(h=l.length-1;h>-1;h--){i=l[h];k=p?e[h]:e[i.key];q[i.key]&&(k=q[i.key].call(this,k));
 
k===void 0&&(k=null);n[i.key]=k}else if(a.isString(e))for(h=l.length-1;h>-1;h--){i=l[h];k=e;q[i.key]&&(k=q[i.key].call(this,k));k===void 0&&(k=null);n[i.key]=k}g[j]=n}}else g=c;return{results:g}}return null},parseTextData:function(d,c){if(a.isString(c)&&a.isString(this.responseSchema.recordDelim)&&a.isString(this.responseSchema.fieldDelim)){var g={results:[]},j=this.responseSchema.recordDelim,h=this.responseSchema.fieldDelim;if(c.length>0){var e=c.length-j.length;c.substr(e)==j&&(c=c.substr(0,e));
 
if(c.length>0)for(var j=c.split(j),e=0,i=j.length,k=0;e<i;++e){var l=false,q=j[e];if(a.isString(q)&&q.length>0){var q=j[e].split(h),p={};if(a.isArray(this.responseSchema.fields))for(var n=this.responseSchema.fields,o=n.length-1;o>-1;o--)try{var m=q[o];if(a.isString(m)){m.charAt(0)=='"'&&(m=m.substr(1));m.charAt(m.length-1)=='"'&&(m=m.substr(0,m.length-1));var r=n[o],s=a.isValue(r.key)?r.key:r;if(!r.parser&&r.converter)r.parser=r.converter;var t=typeof r.parser==="function"?r.parser:b.Parser[r.parser+
 
""];t&&(m=t.call(this,m));m===void 0&&(m=null);p[s]=m}else l=true}catch(u){l=true}else p=q;l||(g.results[k++]=p)}}}return g}return null},parseXMLResult:function(d){var c={},g=this.responseSchema;try{for(var j=g.fields.length-1;j>=0;j--){var h=g.fields[j],e=a.isValue(h.key)?h.key:h,i=null;if(this.useXPath)i=YAHOO.util.DataSource._getLocationValue(h,d);else{var k=d.attributes.getNamedItem(e);if(k)i=k.value;else{var l=d.getElementsByTagName(e);if(l&&l.item(0)){var q=l.item(0),i=q?q.text?q.text:q.textContent?
 
q.textContent:null:null;if(!i){for(var p=[],n=0,o=q.childNodes.length;n<o;n++)if(q.childNodes[n].nodeValue)p[p.length]=q.childNodes[n].nodeValue;p.length>0&&(i=p.join(""))}}}}i===null&&(i="");if(!h.parser&&h.converter)h.parser=h.converter;var m=typeof h.parser==="function"?h.parser:b.Parser[h.parser+""];m&&(i=m.call(this,i));i===void 0&&(i=null);c[e]=i}}catch(r){}return c},parseXMLData:function(b,c){var g=false,j=this.responseSchema,h={meta:{}},e=null,i=j.metaNode,k=j.metaFields||{},l,q,p;try{if(this.useXPath)for(l in k)h.meta[l]=
 
YAHOO.util.DataSource._getLocationValue(k[l],c);else if(i=i?c.getElementsByTagName(i)[0]:c)for(l in k)if(a.hasOwnProperty(k,l)){q=k[l];if(p=i.getElementsByTagName(q)[0])p=p.firstChild.nodeValue;else if(p=i.attributes.getNamedItem(q))p=p.value;a.isValue(p)&&(h.meta[l]=p)}e=j.resultNode?c.getElementsByTagName(j.resultNode):null}catch(n){}if(!e||!a.isArray(j.fields))g=true;else{h.results=[];for(j=e.length-1;j>=0;--j){i=this.parseXMLResult(e.item(j));h.results[j]=i}}if(g)h.error=true;return h},parseJSONData:function(d,
 
c){var g={results:[],meta:{}};if(a.isObject(c)&&this.responseSchema.resultsList){var j=this.responseSchema,h=j.fields,e=c,i=[],k=j.metaFields||{},l=[],q=[],p=[],n=false,o,m,r,s=function(e){var a=null,b=[],i=0;if(e){e=e.replace(/\[(['"])(.*?)\1\]/g,function(e,a,d){b[i]=d;return".@"+i++}).replace(/\[(\d+)\]/g,function(e,a){b[i]=parseInt(a,10)|0;return".@"+i++}).replace(/^\./,"");if(!/[^\w\.\$@]/.test(e)){a=e.split(".");for(i=a.length-1;i>=0;--i)a[i].charAt(0)==="@"&&(a[i]=b[parseInt(a[i].substr(1),
 
10)])}}return a},t=function(e,a){for(var b=a,i=0,d=e.length;i<d&&b;++i)b=b[e[i]];return b};if(r=s(j.resultsList)){e=t(r,c);e===void 0&&(n=true)}else n=true;e||(e=[]);a.isArray(e)||(e=[e]);if(n)g.error=true;else{if(j.fields){j=0;for(n=h.length;j<n;j++){r=h[j];o=r.key||r;m=(typeof r.parser==="function"?r.parser:b.Parser[r.parser+""])||r.converter;r=s(o);m&&(l[l.length]={key:o,parser:m});r&&(r.length>1?q[q.length]={key:o,path:r}:p[p.length]={key:o,path:r[0]})}for(j=e.length-1;j>=0;--j){n=e[j];r={};if(n){for(h=
 
p.length-1;h>=0;--h)r[p[h].key]=n[p[h].path]!==void 0?n[p[h].path]:n[h];for(h=q.length-1;h>=0;--h)r[q[h].key]=t(q[h].path,n);for(h=l.length-1;h>=0;--h){n=l[h].key;r[n]=l[h].parser.call(this,r[n]);r[n]===void 0&&(r[n]=null)}}i[j]=r}}else i=e;for(o in k)if(a.hasOwnProperty(k,o))if(r=s(k[o])){e=t(r,c);g.meta[o]=e}}g.results=i}else g.error=true;return g},parseHTMLTableData:function(d,c){var g=false,j=this.responseSchema.fields,h={results:[]};if(a.isArray(j))for(var e=0;e<c.tBodies.length;e++)for(var i=
 
c.tBodies[e],k=i.rows.length-1;k>-1;k--){for(var l=i.rows[k],q={},p=j.length-1;p>-1;p--){var n=j[p],o=a.isValue(n.key)?n.key:n,m=l.cells[p].innerHTML;if(!n.parser&&n.converter)n.parser=n.converter;(n=typeof n.parser==="function"?n.parser:b.Parser[n.parser+""])&&(m=n.call(this,m));m===void 0&&(m=null);q[o]=m}h.results[k]=q}else g=true;if(g)h.error=true;return h}};a.augmentProto(b,c.EventProvider);c.LocalDataSource=function(a,f){this.dataType=b.TYPE_LOCAL;if(a)if(YAHOO.lang.isArray(a))this.responseType=
 
b.TYPE_JSARRAY;else if(a.nodeType&&a.nodeType==9)this.responseType=b.TYPE_XML;else if(a.nodeName&&a.nodeName.toLowerCase()=="table"){this.responseType=b.TYPE_HTMLTABLE;a=a.cloneNode(true)}else if(YAHOO.lang.isString(a))this.responseType=b.TYPE_TEXT;else{if(YAHOO.lang.isObject(a))this.responseType=b.TYPE_JSON}else{a=[];this.responseType=b.TYPE_JSARRAY}c.LocalDataSource.superclass.constructor.call(this,a,f)};a.extend(c.LocalDataSource,b);a.augmentObject(c.LocalDataSource,b);c.FunctionDataSource=function(a,
 
f){this.dataType=b.TYPE_JSFUNCTION;c.FunctionDataSource.superclass.constructor.call(this,a||function(){},f)};a.extend(c.FunctionDataSource,b,{scope:null,makeConnection:function(a,c,g){var j=b._nTransactionId++;this.fireEvent("requestEvent",{tId:j,request:a,callback:c,caller:g});var h=this.scope?this.liveData.call(this.scope,a,this,c):this.liveData(a,c);if(this.responseType===b.TYPE_UNKNOWN)if(YAHOO.lang.isArray(h))this.responseType=b.TYPE_JSARRAY;else if(h&&h.nodeType&&h.nodeType==9)this.responseType=
 
b.TYPE_XML;else if(h&&h.nodeName&&h.nodeName.toLowerCase()=="table")this.responseType=b.TYPE_HTMLTABLE;else if(YAHOO.lang.isObject(h))this.responseType=b.TYPE_JSON;else if(YAHOO.lang.isString(h))this.responseType=b.TYPE_TEXT;this.handleResponse(a,h,c,g,j);return j}});a.augmentObject(c.FunctionDataSource,b);c.ScriptNodeDataSource=function(a,f){this.dataType=b.TYPE_SCRIPTNODE;c.ScriptNodeDataSource.superclass.constructor.call(this,a||"",f)};a.extend(c.ScriptNodeDataSource,b,{getUtility:c.Get,asyncMode:"allowAll",
 
scriptCallbackParam:"callback",generateRequestCallback:function(a){return"&"+this.scriptCallbackParam+"=YAHOO.util.ScriptNodeDataSource.callbacks["+a+"]"},doBeforeGetScriptNode:function(a){return a},makeConnection:function(a,f,g){var j=b._nTransactionId++;this.fireEvent("requestEvent",{tId:j,request:a,callback:f,caller:g});if(c.ScriptNodeDataSource._nPending===0){c.ScriptNodeDataSource.callbacks=[];c.ScriptNodeDataSource._nId=0}var h=c.ScriptNodeDataSource._nId;c.ScriptNodeDataSource._nId++;var e=
 
this;c.ScriptNodeDataSource.callbacks[h]=function(i){if(e.asyncMode!=="ignoreStaleResponses"||h===c.ScriptNodeDataSource.callbacks.length-1){if(e.responseType===b.TYPE_UNKNOWN)if(YAHOO.lang.isArray(i))e.responseType=b.TYPE_JSARRAY;else if(i.nodeType&&i.nodeType==9)e.responseType=b.TYPE_XML;else if(i.nodeName&&i.nodeName.toLowerCase()=="table")e.responseType=b.TYPE_HTMLTABLE;else if(YAHOO.lang.isObject(i))e.responseType=b.TYPE_JSON;else if(YAHOO.lang.isString(i))e.responseType=b.TYPE_TEXT;e.handleResponse(a,
 
i,f,g,j)}delete c.ScriptNodeDataSource.callbacks[h]};c.ScriptNodeDataSource._nPending++;var i=this.liveData+a+this.generateRequestCallback(h),i=this.doBeforeGetScriptNode(i);this.getUtility.script(i,{autopurge:true,onsuccess:c.ScriptNodeDataSource._bumpPendingDown,onfail:c.ScriptNodeDataSource._bumpPendingDown});return j}});a.augmentObject(c.ScriptNodeDataSource,b);a.augmentObject(c.ScriptNodeDataSource,{_nId:0,_nPending:0,callbacks:[]});c.XHRDataSource=function(a,f){this.dataType=b.TYPE_XHR;this.connMgr=
 
this.connMgr||c.Connect;c.XHRDataSource.superclass.constructor.call(this,a||"",f)};a.extend(c.XHRDataSource,b,{connMgr:null,connXhrMode:"allowAll",connMethodPost:false,connTimeout:0,makeConnection:function(d,c,g){var j=b._nTransactionId++;this.fireEvent("requestEvent",{tId:j,request:d,callback:c,caller:g});var h=this.connMgr,e=this._oQueue,i={success:function(a){if(a&&this.connXhrMode=="ignoreStaleResponses"&&a.tId!=e.conn.tId)return null;if(a){if(this.responseType===b.TYPE_UNKNOWN){var i=a.getResponseHeader?
 
a.getResponseHeader["Content-Type"]:null;if(i)if(i.indexOf("text/xml")>-1)this.responseType=b.TYPE_XML;else if(i.indexOf("application/json")>-1)this.responseType=b.TYPE_JSON;else if(i.indexOf("text/plain")>-1)this.responseType=b.TYPE_TEXT}this.handleResponse(d,a,c,g,j)}else{this.fireEvent("dataErrorEvent",{request:d,response:null,callback:c,caller:g,message:b.ERROR_DATANULL});b.issueCallback(c,[d,{error:true}],true,g);return null}},failure:function(e){this.fireEvent("dataErrorEvent",{request:d,response:e,
 
callback:c,caller:g,message:b.ERROR_DATAINVALID});a.isString(this.liveData)&&a.isString(d)&&this.liveData.lastIndexOf("?")!==this.liveData.length-1&&d.indexOf("?");e=e||{};e.error=true;b.issueCallback(c,[d,e],true,g);return null},scope:this};if(a.isNumber(this.connTimeout))i.timeout=this.connTimeout;if(this.connXhrMode=="cancelStaleRequests"&&e.conn&&h.abort){h.abort(e.conn);e.conn=null}if(h&&h.asyncRequest){var k=this.liveData,l=this.connMethodPost,q=l?"POST":"GET",p=l||!a.isValue(d)?k:k+d,n=l?d:
 
null;if(this.connXhrMode!="queueRequests")e.conn=h.asyncRequest(q,p,i,n);else if(e.conn){var o=e.requests;o.push({request:d,callback:i});if(!e.interval)e.interval=setInterval(function(){if(!h.isCallInProgress(e.conn))if(o.length>0){p=l||!a.isValue(o[0].request)?k:k+o[0].request;n=l?o[0].request:null;e.conn=h.asyncRequest(q,p,o[0].callback,n);o.shift()}else{clearInterval(e.interval);e.interval=null}},50)}else e.conn=h.asyncRequest(q,p,i,n)}else b.issueCallback(c,[d,{error:true}],true,g);return j}});
 
a.augmentObject(c.XHRDataSource,b);c.DataSource=function(a,f){var f=f||{},g=f.dataType;if(g){if(g==b.TYPE_LOCAL)return new c.LocalDataSource(a,f);if(g==b.TYPE_XHR)return new c.XHRDataSource(a,f);if(g==b.TYPE_SCRIPTNODE)return new c.ScriptNodeDataSource(a,f);if(g==b.TYPE_JSFUNCTION)return new c.FunctionDataSource(a,f)}return YAHOO.lang.isString(a)?new c.XHRDataSource(a,f):YAHOO.lang.isFunction(a)?new c.FunctionDataSource(a,f):new c.LocalDataSource(a,f)};a.augmentObject(c.DataSource,b)})();
 
YAHOO.util.Number={format:function(a,c){if(a===""||a===null||!isFinite(a))return"";var a=+a,c=YAHOO.lang.merge(YAHOO.util.Number.format.defaults,c||{}),b=Math.abs(a),d=c.decimalPlaces||0,f=c.thousandsSeparator,g=c.negativeFormat||"-"+c.format,j;g.indexOf("#")>-1&&(g=g.replace(/#/,c.format));if(d<0){j=b-b%1+"";d=j.length+d;j=d>0?Number("."+j).toFixed(d).slice(2)+Array(j.length-d+1).join("0"):"0"}else if(d>0||(b+"").indexOf(".")>0){j=Math.pow(10,d);j=Math.round(b*j)/j+"";var h=j.indexOf(".");if(h<0){h=
 
(Math.pow(10,d)+"").substring(1);d>0&&(j=j+"."+h)}else{d=d-(j.length-h-1);h=(Math.pow(10,d)+"").substring(1);j=j+h}}else j=b.toFixed(d)+"";j=j.split(/\D/);if(b>=1E3){d=j[0].length%3||3;j[0]=j[0].slice(0,d)+j[0].slice(d).replace(/(\d{3})/g,f+"$1")}return YAHOO.util.Number.format._applyFormat(a<0?g:c.format,j.join(c.decimalSeparator),c)}};YAHOO.util.Number.format.defaults={format:"{prefix}{number}{suffix}",negativeFormat:null,decimalSeparator:".",decimalPlaces:null,thousandsSeparator:""};
 
YAHOO.util.Number.format._applyFormat=function(a,c,b){return a.replace(/\{(\w+)\}/g,function(a,f){return f==="number"?c:f in b?b[f]:""})};
 
(function(){var a=function(a,d,c){for(typeof c==="undefined"&&(c=10);parseInt(a,10)<c&&c>1;c=c/10)a=d.toString()+a;return a.toString()},c={formats:{a:function(a,d){return d.a[a.getDay()]},A:function(a,d){return d.A[a.getDay()]},b:function(a,d){return d.b[a.getMonth()]},B:function(a,d){return d.B[a.getMonth()]},C:function(b){return a(parseInt(b.getFullYear()/100,10),0)},d:["getDate","0"],e:["getDate"," "],g:function(b){return a(parseInt(c.formats.G(b)%100,10),0)},G:function(a){var d=a.getFullYear(),
 
f=parseInt(c.formats.V(a),10),a=parseInt(c.formats.W(a),10);a>f?d++:a===0&&f>=52&&d--;return d},H:["getHours","0"],I:function(b){b=b.getHours()%12;return a(b===0?12:b,0)},j:function(b){var d=new Date(""+b.getFullYear()+"/1/1 GMT"),b=new Date(""+b.getFullYear()+"/"+(b.getMonth()+1)+"/"+b.getDate()+" GMT")-d,b=parseInt(b/6E4/60/24,10)+1;return a(b,0,100)},k:["getHours"," "],l:function(b){b=b.getHours()%12;return a(b===0?12:b," ")},m:function(b){return a(b.getMonth()+1,0)},M:["getMinutes","0"],p:function(a,
 
d){return d.p[a.getHours()>=12?1:0]},P:function(a,d){return d.P[a.getHours()>=12?1:0]},s:function(a){return parseInt(a.getTime()/1E3,10)},S:["getSeconds","0"],u:function(a){a=a.getDay();return a===0?7:a},U:function(b){var d=parseInt(c.formats.j(b),10),b=6-b.getDay(),d=parseInt((d+b)/7,10);return a(d,0)},V:function(b){var d=parseInt(c.formats.W(b),10),f=(new Date(""+b.getFullYear()+"/1/1")).getDay(),d=d+(f>4||f<=1?0:1);d===53&&(new Date(""+b.getFullYear()+"/12/31")).getDay()<4?d=1:d===0&&(d=c.formats.V(new Date(""+
 
(b.getFullYear()-1)+"/12/31")));return a(d,0)},w:"getDay",W:function(b){var d=parseInt(c.formats.j(b),10),b=7-c.formats.u(b),d=parseInt((d+b)/7,10);return a(d,0,10)},y:function(b){return a(b.getFullYear()%100,0)},Y:"getFullYear",z:function(b){var b=b.getTimezoneOffset(),d=a(parseInt(Math.abs(b/60),10),0),c=a(Math.abs(b%60),0);return(b>0?"-":"+")+d+c},Z:function(a){var d=a.toString().replace(/^.*:\d\d( GMT[+-]\d+)? \(?([A-Za-z ]+)\)?\d*$/,"$2").replace(/[a-z ]/g,"");d.length>4&&(d=c.formats.z(a));
 
return d},"%":function(){return"%"}},aggregates:{c:"locale",D:"%m/%d/%y",F:"%Y-%m-%d",h:"%b",n:"\n",r:"locale",R:"%H:%M",t:"\t",T:"%H:%M:%S",x:"locale",X:"locale"},format:function(b,d,f){d=d||{};if(!(b instanceof Date))return YAHOO.lang.isValue(b)?b:"";d=d.format||"%m/%d/%Y";d==="YYYY/MM/DD"?d="%Y/%m/%d":d==="DD/MM/YYYY"?d="%d/%m/%Y":d==="MM/DD/YYYY"&&(d="%m/%d/%Y");f=f||"en";f in YAHOO.util.DateLocale||(f=f.replace(/-[a-zA-Z]+$/,"")in YAHOO.util.DateLocale?f.replace(/-[a-zA-Z]+$/,""):"en");for(var g=
 
YAHOO.util.DateLocale[f],f=function(a,e){var b=c.aggregates[e];return b==="locale"?g[e]:b},j=function(d,e){var i=c.formats[e];return typeof i==="string"?b[i]():typeof i==="function"?i.call(b,b,g):typeof i==="object"&&typeof i[0]==="string"?a(b[i[0]](),i[1]):e};d.match(/%[cDFhnrRtTxX]/);)d=d.replace(/%([cDFhnrRtTxX])/g,f);d=d.replace(/%([aAbBCdegGHIjklmMpPsSuUVwWyYzZ%])/g,j);f=j=void 0;return d}};YAHOO.namespace("YAHOO.util");YAHOO.util.Date=c;YAHOO.util.DateLocale={a:["Sun","Mon","Tue","Wed","Thu",
 
"Fri","Sat"],A:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],b:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],B:["January","February","March","April","May","June","July","August","September","October","November","December"],c:"%a %d %b %Y %T %Z",p:["AM","PM"],P:["am","pm"],r:"%I:%M:%S %p",x:"%d/%m/%y",X:"%T"};YAHOO.util.DateLocale.en=YAHOO.lang.merge(YAHOO.util.DateLocale,{});YAHOO.util.DateLocale["en-US"]=YAHOO.lang.merge(YAHOO.util.DateLocale.en,
 
{c:"%a %d %b %Y %I:%M:%S %p %Z",x:"%m/%d/%Y",X:"%I:%M:%S %p"});YAHOO.util.DateLocale["en-GB"]=YAHOO.lang.merge(YAHOO.util.DateLocale.en,{r:"%l:%M:%S %P %Z"});YAHOO.util.DateLocale["en-AU"]=YAHOO.lang.merge(YAHOO.util.DateLocale.en)})();YAHOO.register("datasource",YAHOO.util.DataSource,{version:"2.9.0",build:"2800"});YAHOO.widget.DS_JSArray=YAHOO.util.LocalDataSource;YAHOO.widget.DS_JSFunction=YAHOO.util.FunctionDataSource;
 
YAHOO.widget.DS_XHR=function(a,c,b){a=new YAHOO.util.XHRDataSource(a,b);a._aDeprecatedSchema=c;return a};YAHOO.widget.DS_ScriptNode=function(a,c,b){a=new YAHOO.util.ScriptNodeDataSource(a,b);a._aDeprecatedSchema=c;return a};YAHOO.widget.DS_XHR.TYPE_JSON=YAHOO.util.DataSourceBase.TYPE_JSON;YAHOO.widget.DS_XHR.TYPE_XML=YAHOO.util.DataSourceBase.TYPE_XML;YAHOO.widget.DS_XHR.TYPE_FLAT=YAHOO.util.DataSourceBase.TYPE_TEXT;
 
YAHOO.widget.AutoComplete=function(a,c,b,d){if(a&&c&&b&&b&&YAHOO.lang.isFunction(b.sendRequest)){this.dataSource=b;this.key=0;var f=b.responseSchema;if(b._aDeprecatedSchema){var g=b._aDeprecatedSchema;if(YAHOO.lang.isArray(g)){if(b.responseType===YAHOO.util.DataSourceBase.TYPE_JSON||b.responseType===YAHOO.util.DataSourceBase.TYPE_UNKNOWN){f.resultsList=g[0];this.key=g[1];f.fields=g.length<3?null:g.slice(1)}else if(b.responseType===YAHOO.util.DataSourceBase.TYPE_XML){f.resultNode=g[0];this.key=g[1];
 
f.fields=g.slice(1)}else if(b.responseType===YAHOO.util.DataSourceBase.TYPE_TEXT){f.recordDelim=g[0];f.fieldDelim=g[1]}b.responseSchema=f}}if(YAHOO.util.Dom.inDocument(a)){if(YAHOO.lang.isString(a)){this._sName="instance"+YAHOO.widget.AutoComplete._nIndex+" "+a;this._elTextbox=document.getElementById(a)}else{this._sName=a.id?"instance"+YAHOO.widget.AutoComplete._nIndex+" "+a.id:"instance"+YAHOO.widget.AutoComplete._nIndex;this._elTextbox=a}YAHOO.util.Dom.addClass(this._elTextbox,"yui-ac-input");if(YAHOO.util.Dom.inDocument(c)){this._elContainer=
 
YAHOO.lang.isString(c)?document.getElementById(c):c;a=this._elContainer.parentNode;a.tagName.toLowerCase()=="div"&&YAHOO.util.Dom.addClass(a,"yui-ac");if(this.dataSource.dataType===YAHOO.util.DataSourceBase.TYPE_LOCAL)this.applyLocalFilter=true;if(d&&d.constructor==Object)for(var j in d)j&&(this[j]=d[j]);this._initContainerEl();this._initProps();this._initListEl();this._initContainerHelperEls();d=this._elTextbox;YAHOO.util.Event.addListener(d,"keyup",this._onTextboxKeyUp,this);YAHOO.util.Event.addListener(d,
 
"keydown",this._onTextboxKeyDown,this);YAHOO.util.Event.addListener(d,"focus",this._onTextboxFocus,this);YAHOO.util.Event.addListener(d,"blur",this._onTextboxBlur,this);YAHOO.util.Event.addListener(c,"mouseover",this._onContainerMouseover,this);YAHOO.util.Event.addListener(c,"mouseout",this._onContainerMouseout,this);YAHOO.util.Event.addListener(c,"click",this._onContainerClick,this);YAHOO.util.Event.addListener(c,"scroll",this._onContainerScroll,this);YAHOO.util.Event.addListener(c,"resize",this._onContainerResize,
 
this);YAHOO.util.Event.addListener(d,"keypress",this._onTextboxKeyPress,this);YAHOO.util.Event.addListener(window,"unload",this._onWindowUnload,this);this.textboxFocusEvent=new YAHOO.util.CustomEvent("textboxFocus",this);this.textboxKeyEvent=new YAHOO.util.CustomEvent("textboxKey",this);this.textboxKeyUpEvent=new YAHOO.util.CustomEvent("textboxKeyUp",this);this.dataRequestEvent=new YAHOO.util.CustomEvent("dataRequest",this);this.dataRequestCancelEvent=new YAHOO.util.CustomEvent("dataRequestCancel",
 
this);this.dataReturnEvent=new YAHOO.util.CustomEvent("dataReturn",this);this.dataErrorEvent=new YAHOO.util.CustomEvent("dataError",this);this.containerPopulateEvent=new YAHOO.util.CustomEvent("containerPopulate",this);this.containerExpandEvent=new YAHOO.util.CustomEvent("containerExpand",this);this.typeAheadEvent=new YAHOO.util.CustomEvent("typeAhead",this);this.itemMouseOverEvent=new YAHOO.util.CustomEvent("itemMouseOver",this);this.itemMouseOutEvent=new YAHOO.util.CustomEvent("itemMouseOut",this);
 
this.itemArrowToEvent=new YAHOO.util.CustomEvent("itemArrowTo",this);this.itemArrowFromEvent=new YAHOO.util.CustomEvent("itemArrowFrom",this);this.itemSelectEvent=new YAHOO.util.CustomEvent("itemSelect",this);this.unmatchedItemSelectEvent=new YAHOO.util.CustomEvent("unmatchedItemSelect",this);this.selectionEnforceEvent=new YAHOO.util.CustomEvent("selectionEnforce",this);this.containerCollapseEvent=new YAHOO.util.CustomEvent("containerCollapse",this);this.textboxBlurEvent=new YAHOO.util.CustomEvent("textboxBlur",
 
this);this.textboxChangeEvent=new YAHOO.util.CustomEvent("textboxChange",this);d.setAttribute("autocomplete","off");YAHOO.widget.AutoComplete._nIndex++}}}};YAHOO.widget.AutoComplete.prototype.dataSource=null;YAHOO.widget.AutoComplete.prototype.applyLocalFilter=null;YAHOO.widget.AutoComplete.prototype.queryMatchCase=!1;YAHOO.widget.AutoComplete.prototype.queryMatchContains=!1;YAHOO.widget.AutoComplete.prototype.queryMatchSubset=!1;YAHOO.widget.AutoComplete.prototype.minQueryLength=1;
 
YAHOO.widget.AutoComplete.prototype.maxResultsDisplayed=10;YAHOO.widget.AutoComplete.prototype.queryDelay=0.2;YAHOO.widget.AutoComplete.prototype.typeAheadDelay=0.5;YAHOO.widget.AutoComplete.prototype.queryInterval=500;YAHOO.widget.AutoComplete.prototype.highlightClassName="yui-ac-highlight";YAHOO.widget.AutoComplete.prototype.prehighlightClassName=null;YAHOO.widget.AutoComplete.prototype.delimChar=null;YAHOO.widget.AutoComplete.prototype.autoHighlight=!0;
 
YAHOO.widget.AutoComplete.prototype.typeAhead=!1;YAHOO.widget.AutoComplete.prototype.animHoriz=!1;YAHOO.widget.AutoComplete.prototype.animVert=!0;YAHOO.widget.AutoComplete.prototype.animSpeed=0.3;YAHOO.widget.AutoComplete.prototype.forceSelection=!1;YAHOO.widget.AutoComplete.prototype.allowBrowserAutocomplete=!0;YAHOO.widget.AutoComplete.prototype.alwaysShowContainer=!1;YAHOO.widget.AutoComplete.prototype.useIFrame=!1;YAHOO.widget.AutoComplete.prototype.useShadow=!1;
 
YAHOO.widget.AutoComplete.prototype.suppressInputUpdate=!1;YAHOO.widget.AutoComplete.prototype.resultTypeList=!0;YAHOO.widget.AutoComplete.prototype.queryQuestionMark=!0;YAHOO.widget.AutoComplete.prototype.autoSnapContainer=!0;YAHOO.widget.AutoComplete.prototype.toString=function(){return"AutoComplete "+this._sName};YAHOO.widget.AutoComplete.prototype.getInputEl=function(){return this._elTextbox};YAHOO.widget.AutoComplete.prototype.getContainerEl=function(){return this._elContainer};
 
YAHOO.widget.AutoComplete.prototype.isFocused=function(){return this._bFocused};YAHOO.widget.AutoComplete.prototype.isContainerOpen=function(){return this._bContainerOpen};YAHOO.widget.AutoComplete.prototype.getListEl=function(){return this._elList};YAHOO.widget.AutoComplete.prototype.getListItemMatch=function(a){return a._sResultMatch?a._sResultMatch:null};YAHOO.widget.AutoComplete.prototype.getListItemData=function(a){return a._oResultData?a._oResultData:null};
 
YAHOO.widget.AutoComplete.prototype.getListItemIndex=function(a){return YAHOO.lang.isNumber(a._nItemIndex)?a._nItemIndex:null};YAHOO.widget.AutoComplete.prototype.setHeader=function(a){if(this._elHeader){var c=this._elHeader;if(a){c.innerHTML=a;c.style.display=""}else{c.innerHTML="";c.style.display="none"}}};YAHOO.widget.AutoComplete.prototype.setFooter=function(a){if(this._elFooter){var c=this._elFooter;if(a){c.innerHTML=a;c.style.display=""}else{c.innerHTML="";c.style.display="none"}}};
 
YAHOO.widget.AutoComplete.prototype.setBody=function(a){if(this._elBody){var c=this._elBody;YAHOO.util.Event.purgeElement(c,true);if(a){c.innerHTML=a;c.style.display=""}else{c.innerHTML="";c.style.display="none"}this._elList=null}};
 
YAHOO.widget.AutoComplete.prototype.generateRequest=function(a){var c=this.dataSource.dataType;c===YAHOO.util.DataSourceBase.TYPE_XHR?a=this.dataSource.connMethodPost?(this.dataSource.scriptQueryParam||"query")+"="+a+(this.dataSource.scriptQueryAppend?"&"+this.dataSource.scriptQueryAppend:""):(this.queryQuestionMark?"?":"")+(this.dataSource.scriptQueryParam||"query")+"="+a+(this.dataSource.scriptQueryAppend?"&"+this.dataSource.scriptQueryAppend:""):c===YAHOO.util.DataSourceBase.TYPE_SCRIPTNODE&&(a=
 
"&"+(this.dataSource.scriptQueryParam||"query")+"="+a+(this.dataSource.scriptQueryAppend?"&"+this.dataSource.scriptQueryAppend:""));return a};YAHOO.widget.AutoComplete.prototype.sendQuery=function(a){this._bFocused=true;this._sendQuery(this.delimChar?this._elTextbox.value+a:a)};YAHOO.widget.AutoComplete.prototype.snapContainer=function(){var a=this._elTextbox,c=YAHOO.util.Dom.getXY(a);c[1]=c[1]+(YAHOO.util.Dom.get(a).offsetHeight+2);YAHOO.util.Dom.setXY(this._elContainer,c)};
 
YAHOO.widget.AutoComplete.prototype.expandContainer=function(){this._toggleContainer(true)};YAHOO.widget.AutoComplete.prototype.collapseContainer=function(){this._toggleContainer(false)};YAHOO.widget.AutoComplete.prototype.clearList=function(){for(var a=this._elList.childNodes,c=a.length-1;c>-1;c--)a[c].style.display="none"};
 
YAHOO.widget.AutoComplete.prototype.getSubsetMatches=function(a){for(var c,b=a.length;b>=this.minQueryLength;b--){c=this.generateRequest(a.substr(0,b));this.dataRequestEvent.fire(this,void 0,c);if(c=this.dataSource.getCachedResponse(c))return this.filterResults.apply(this.dataSource,[a,c,c,{scope:this}])}return null};
 
YAHOO.widget.AutoComplete.prototype.preparseRawResponse=function(a,c){var b=this.responseStripAfter!==""&&c.indexOf?c.indexOf(this.responseStripAfter):-1;b!=-1&&(c=c.substring(0,b));return c};
 
YAHOO.widget.AutoComplete.prototype.filterResults=function(a,c,b,d){if(d&&d.argument&&YAHOO.lang.isValue(d.argument.query))a=d.argument.query;if(a&&a!==""){for(var b=YAHOO.widget.AutoComplete._cloneObject(b),f=d.scope,c=b.results,d=[],g=f.maxResultsDisplayed,j=this.queryMatchCase||f.queryMatchCase,f=this.queryMatchContains||f.queryMatchContains,h=0,e=c.length;h<e;h++){var i=c[h],k=null;YAHOO.lang.isString(i)?k=i:YAHOO.lang.isArray(i)?k=i[0]:this.responseSchema.fields?k=i[this.responseSchema.fields[0].key||
 
this.responseSchema.fields[0]]:this.key&&(k=i[this.key]);if(YAHOO.lang.isString(k)){k=j?k.indexOf(decodeURIComponent(a)):k.toLowerCase().indexOf(decodeURIComponent(a).toLowerCase());(!f&&k===0||f&&k>-1)&&d.push(i)}if(e>g&&d.length===g)break}b.results=d}return b};YAHOO.widget.AutoComplete.prototype.handleResponse=function(a,c,b){this instanceof YAHOO.widget.AutoComplete&&this._sName&&this._populateList(a,c,b)};YAHOO.widget.AutoComplete.prototype.doBeforeLoadData=function(){return true};
 
YAHOO.widget.AutoComplete.prototype.formatResult=function(a,c,b){return b?b:""};YAHOO.widget.AutoComplete.prototype.formatEscapedResult=function(a,c,b){return YAHOO.lang.escapeHTML(b?b:"")};YAHOO.widget.AutoComplete.prototype.doBeforeExpandContainer=function(){return true};
 
YAHOO.widget.AutoComplete.prototype.destroy=function(){var a=this._elTextbox,c=this._elContainer;this.textboxFocusEvent.unsubscribeAll();this.textboxKeyEvent.unsubscribeAll();this.textboxKeyUpEvent.unsubscribeAll();this.dataRequestEvent.unsubscribeAll();this.dataReturnEvent.unsubscribeAll();this.dataErrorEvent.unsubscribeAll();this.containerPopulateEvent.unsubscribeAll();this.containerExpandEvent.unsubscribeAll();this.typeAheadEvent.unsubscribeAll();this.itemMouseOverEvent.unsubscribeAll();this.itemMouseOutEvent.unsubscribeAll();
 
this.itemArrowToEvent.unsubscribeAll();this.itemArrowFromEvent.unsubscribeAll();this.itemSelectEvent.unsubscribeAll();this.unmatchedItemSelectEvent.unsubscribeAll();this.selectionEnforceEvent.unsubscribeAll();this.containerCollapseEvent.unsubscribeAll();this.textboxBlurEvent.unsubscribeAll();this.textboxChangeEvent.unsubscribeAll();YAHOO.util.Event.purgeElement(a,true);YAHOO.util.Event.purgeElement(c,true);c.innerHTML="";for(var b in this)YAHOO.lang.hasOwnProperty(this,b)&&(this[b]=null)};
 
YAHOO.widget.AutoComplete.prototype.textboxFocusEvent=null;YAHOO.widget.AutoComplete.prototype.textboxKeyEvent=null;YAHOO.widget.AutoComplete.prototype.textboxKeyUpEvent=null;YAHOO.widget.AutoComplete.prototype.dataRequestEvent=null;YAHOO.widget.AutoComplete.prototype.dataRequestCancelEvent=null;YAHOO.widget.AutoComplete.prototype.dataReturnEvent=null;YAHOO.widget.AutoComplete.prototype.dataErrorEvent=null;YAHOO.widget.AutoComplete.prototype.containerPopulateEvent=null;
 
YAHOO.widget.AutoComplete.prototype.containerExpandEvent=null;YAHOO.widget.AutoComplete.prototype.typeAheadEvent=null;YAHOO.widget.AutoComplete.prototype.itemMouseOverEvent=null;YAHOO.widget.AutoComplete.prototype.itemMouseOutEvent=null;YAHOO.widget.AutoComplete.prototype.itemArrowToEvent=null;YAHOO.widget.AutoComplete.prototype.itemArrowFromEvent=null;YAHOO.widget.AutoComplete.prototype.itemSelectEvent=null;YAHOO.widget.AutoComplete.prototype.unmatchedItemSelectEvent=null;
 
YAHOO.widget.AutoComplete.prototype.selectionEnforceEvent=null;YAHOO.widget.AutoComplete.prototype.containerCollapseEvent=null;YAHOO.widget.AutoComplete.prototype.textboxBlurEvent=null;YAHOO.widget.AutoComplete.prototype.textboxChangeEvent=null;YAHOO.widget.AutoComplete._nIndex=0;YAHOO.widget.AutoComplete.prototype._sName=null;YAHOO.widget.AutoComplete.prototype._elTextbox=null;YAHOO.widget.AutoComplete.prototype._elContainer=null;YAHOO.widget.AutoComplete.prototype._elContent=null;
 
YAHOO.widget.AutoComplete.prototype._elHeader=null;YAHOO.widget.AutoComplete.prototype._elBody=null;YAHOO.widget.AutoComplete.prototype._elFooter=null;YAHOO.widget.AutoComplete.prototype._elShadow=null;YAHOO.widget.AutoComplete.prototype._elIFrame=null;YAHOO.widget.AutoComplete.prototype._bFocused=!1;YAHOO.widget.AutoComplete.prototype._oAnim=null;YAHOO.widget.AutoComplete.prototype._bContainerOpen=!1;YAHOO.widget.AutoComplete.prototype._bOverContainer=!1;
 
YAHOO.widget.AutoComplete.prototype._elList=null;YAHOO.widget.AutoComplete.prototype._nDisplayedItems=0;YAHOO.widget.AutoComplete.prototype._sCurQuery=null;YAHOO.widget.AutoComplete.prototype._sPastSelections="";YAHOO.widget.AutoComplete.prototype._sInitInputValue=null;YAHOO.widget.AutoComplete.prototype._elCurListItem=null;YAHOO.widget.AutoComplete.prototype._elCurPrehighlightItem=null;YAHOO.widget.AutoComplete.prototype._bItemSelected=!1;YAHOO.widget.AutoComplete.prototype._nKeyCode=null;
 
YAHOO.widget.AutoComplete.prototype._nDelayID=-1;YAHOO.widget.AutoComplete.prototype._nTypeAheadDelayID=-1;YAHOO.widget.AutoComplete.prototype._iFrameSrc="javascript:false;";YAHOO.widget.AutoComplete.prototype._queryInterval=null;YAHOO.widget.AutoComplete.prototype._sLastTextboxValue=null;
 
YAHOO.widget.AutoComplete.prototype._initProps=function(){if(!YAHOO.lang.isNumber(this.minQueryLength))this.minQueryLength=1;var a=this.maxResultsDisplayed;if(!YAHOO.lang.isNumber(a)||a<1)this.maxResultsDisplayed=10;a=this.queryDelay;if(!YAHOO.lang.isNumber(a)||a<0)this.queryDelay=0.2;a=this.typeAheadDelay;if(!YAHOO.lang.isNumber(a)||a<0)this.typeAheadDelay=0.2;a=this.delimChar;if(YAHOO.lang.isString(a)&&a.length>0)this.delimChar=[a];else if(!YAHOO.lang.isArray(a))this.delimChar=null;a=this.animSpeed;
 
if((this.animHoriz||this.animVert)&&YAHOO.util.Anim){if(!YAHOO.lang.isNumber(a)||a<0)this.animSpeed=0.3;this._oAnim?this._oAnim.duration=this.animSpeed:this._oAnim=new YAHOO.util.Anim(this._elContent,{},this.animSpeed)}};
 
YAHOO.widget.AutoComplete.prototype._initContainerHelperEls=function(){if(this.useShadow&&!this._elShadow){var a=document.createElement("div");a.className="yui-ac-shadow";a.style.width=0;a.style.height=0;this._elShadow=this._elContainer.appendChild(a)}if(this.useIFrame&&!this._elIFrame){a=document.createElement("iframe");a.src=this._iFrameSrc;a.frameBorder=0;a.scrolling="no";a.style.position="absolute";a.style.width=0;a.style.height=0;a.style.padding=0;a.tabIndex=-1;a.role="presentation";a.title=
 
"Presentational iframe shim";this._elIFrame=this._elContainer.appendChild(a)}};
 
YAHOO.widget.AutoComplete.prototype._initContainerEl=function(){YAHOO.util.Dom.addClass(this._elContainer,"yui-ac-container");if(!this._elContent){var a=document.createElement("div");a.className="yui-ac-content";a.style.display="none";this._elContent=this._elContainer.appendChild(a);a=document.createElement("div");a.className="yui-ac-hd";a.style.display="none";this._elHeader=this._elContent.appendChild(a);a=document.createElement("div");a.className="yui-ac-bd";this._elBody=this._elContent.appendChild(a);
 
a=document.createElement("div");a.className="yui-ac-ft";a.style.display="none";this._elFooter=this._elContent.appendChild(a)}};
 
YAHOO.widget.AutoComplete.prototype._initListEl=function(){for(var a=this.maxResultsDisplayed,c=this._elList||document.createElement("ul"),b;c.childNodes.length<a;){b=document.createElement("li");b.style.display="none";b._nItemIndex=c.childNodes.length;c.appendChild(b)}if(!this._elList){a=this._elBody;YAHOO.util.Event.purgeElement(a,true);a.innerHTML="";this._elList=a.appendChild(c)}this._elBody.style.display=""};
 
YAHOO.widget.AutoComplete.prototype._focus=function(){var a=this;setTimeout(function(){try{a._elTextbox.focus()}catch(c){}},0)};YAHOO.widget.AutoComplete.prototype._enableIntervalDetection=function(){var a=this;if(!a._queryInterval&&a.queryInterval)a._queryInterval=setInterval(function(){a._onInterval()},a.queryInterval)};YAHOO.widget.AutoComplete.prototype.enableIntervalDetection=YAHOO.widget.AutoComplete.prototype._enableIntervalDetection;
 
YAHOO.widget.AutoComplete.prototype._onInterval=function(){var a=this._elTextbox.value;if(a!=this._sLastTextboxValue){this._sLastTextboxValue=a;this._sendQuery(a)}};YAHOO.widget.AutoComplete.prototype._clearInterval=function(){if(this._queryInterval){clearInterval(this._queryInterval);this._queryInterval=null}};YAHOO.widget.AutoComplete.prototype._isIgnoreKey=function(a){return a==9||a==13||a==16||a==17||a>=18&&a<=20||a==27||a>=33&&a<=35||a>=36&&a<=40||a>=44&&a<=45||a==229?true:false};
 
YAHOO.widget.AutoComplete.prototype._sendQuery=function(a){if(this.minQueryLength<0)this._toggleContainer(false);else{if(this.delimChar){var c=this._extractQuery(a),a=c.query;this._sPastSelections=c.previous}if(a&&a.length<this.minQueryLength||!a&&this.minQueryLength>0){this._nDelayID!=-1&&clearTimeout(this._nDelayID);this._toggleContainer(false)}else{a=encodeURIComponent(a);this._nDelayID=-1;if(this.dataSource.queryMatchSubset||this.queryMatchSubset)if(c=this.getSubsetMatches(a)){this.handleResponse(a,
 
c,{query:a});return}if(this.dataSource.responseStripAfter)this.dataSource.doBeforeParseData=this.preparseRawResponse;if(this.applyLocalFilter)this.dataSource.doBeforeCallback=this.filterResults;c=this.generateRequest(a);if(c!==void 0){this.dataRequestEvent.fire(this,a,c);this.dataSource.sendRequest(c,{success:this.handleResponse,failure:this.handleResponse,scope:this,argument:{query:a}})}else this.dataRequestCancelEvent.fire(this,a)}}};
 
YAHOO.widget.AutoComplete.prototype._populateListItem=function(a,c,b){a.innerHTML=this.formatResult(c,b,a._sResultMatch)};
 
YAHOO.widget.AutoComplete.prototype._populateList=function(a,c,b){this._nTypeAheadDelayID!=-1&&clearTimeout(this._nTypeAheadDelayID);a=b&&b.query?b.query:a;if((b=this.doBeforeLoadData(a,c,b))&&!c.error){this.dataReturnEvent.fire(this,a,c.results);if(this._bFocused){var d=decodeURIComponent(a);this._sCurQuery=d;this._bItemSelected=false;var c=c.results,b=Math.min(c.length,this.maxResultsDisplayed),f=this.dataSource.responseSchema.fields?this.dataSource.responseSchema.fields[0].key||this.dataSource.responseSchema.fields[0]:
 
0;if(b>0){(!this._elList||this._elList.childNodes.length<b)&&this._initListEl();this._initContainerHelperEls();for(var g=this._elList.childNodes,j=b-1;j>=0;j--){var h=g[j],e=c[j];if(this.resultTypeList){var i=[];i[0]=YAHOO.lang.isString(e)?e:e[f]||e[this.key];var k=this.dataSource.responseSchema.fields;if(YAHOO.lang.isArray(k)&&k.length>1)for(var l=1,q=k.length;l<q;l++)i[i.length]=e[k[l].key||k[l]];else YAHOO.lang.isArray(e)?i=e:YAHOO.lang.isString(e)?i=[e]:i[1]=e;e=i}h._sResultMatch=YAHOO.lang.isString(e)?
 
e:YAHOO.lang.isArray(e)?e[0]:e[f]||"";h._oResultData=e;this._populateListItem(h,e,d);h.style.display=""}if(b<g.length)for(f=g.length-1;f>=b;f--){d=g[f];d.style.display="none"}this._nDisplayedItems=b;this.containerPopulateEvent.fire(this,a,c);if(this.autoHighlight){b=this._elList.firstChild;this._toggleHighlight(b,"to");this.itemArrowToEvent.fire(this,b);this._typeAhead(b,a)}else this._toggleHighlight(this._elCurListItem,"from");b=this._doBeforeExpandContainer(this._elTextbox,this._elContainer,a,c);
 
this._toggleContainer(b)}else this._toggleContainer(false)}}else this.dataErrorEvent.fire(this,a,c)};YAHOO.widget.AutoComplete.prototype._doBeforeExpandContainer=function(a,c,b,d){this.autoSnapContainer&&this.snapContainer();return this.doBeforeExpandContainer(a,c,b,d)};
 
YAHOO.widget.AutoComplete.prototype._clearSelection=function(){var a=this.delimChar?this._extractQuery(this._elTextbox.value):{previous:"",query:this._elTextbox.value};this._elTextbox.value=a.previous;this.selectionEnforceEvent.fire(this,a.query)};YAHOO.widget.AutoComplete.prototype._textMatchesOption=function(){for(var a=null,c=0;c<this._nDisplayedItems;c++){var b=this._elList.childNodes[c];if((""+b._sResultMatch).toLowerCase()==this._sCurQuery.toLowerCase()){a=b;break}}return a};
 
YAHOO.widget.AutoComplete.prototype._typeAhead=function(a,c){if(this.typeAhead&&this._nKeyCode!=8){var b=this,d=this._elTextbox;if(d.setSelectionRange||d.createTextRange)this._nTypeAheadDelayID=setTimeout(function(){var f=d.value.length;b._updateValue(a);var g=d.value.length;b._selectText(d,f,g);f=d.value.substr(f,g);b._sCurQuery=a._sResultMatch;b.typeAheadEvent.fire(b,c,f)},this.typeAheadDelay*1E3)}};
 
YAHOO.widget.AutoComplete.prototype._selectText=function(a,c,b){if(a.setSelectionRange)a.setSelectionRange(c,b);else if(a.createTextRange){var d=a.createTextRange();d.moveStart("character",c);d.moveEnd("character",b-a.value.length);d.select()}else a.select()};
 
YAHOO.widget.AutoComplete.prototype._extractQuery=function(a){for(var c=this.delimChar,b=-1,d,f=c.length-1;f>=0;f--){d=a.lastIndexOf(c[f]);d>b&&(b=d)}if(c[f]==" ")for(d=c.length-1;d>=0;d--)if(a[b-1]==c[d]){b--;break}if(b>-1){for(c=b+1;a.charAt(c)==" ";)c=c+1;b=a.substring(0,c);a=a.substr(c)}else b="";return{previous:b,query:a}};
 
YAHOO.widget.AutoComplete.prototype._toggleContainerHelpers=function(a){var c=this._elContent.offsetWidth+"px",b=this._elContent.offsetHeight+"px";if(this.useIFrame&&this._elIFrame){var d=this._elIFrame;if(a){d.style.width=c;d.style.height=b;d.style.padding=""}else{d.style.width=0;d.style.height=0;d.style.padding=0}}if(this.useShadow&&this._elShadow){d=this._elShadow;if(a){d.style.width=c;d.style.height=b}else{d.style.width=0;d.style.height=0}}};
 
YAHOO.widget.AutoComplete.prototype._toggleContainer=function(a){var c=this._elContainer;if(!this.alwaysShowContainer||!this._bContainerOpen){if(!a){this._toggleHighlight(this._elCurListItem,"from");this._nDisplayedItems=0;this._sCurQuery=null;if(this._elContent.style.display=="none")return}var b=this._oAnim;if(b&&b.getEl()&&(this.animHoriz||this.animVert)){b.isAnimated()&&b.stop(true);var d=this._elContent.cloneNode(true);c.appendChild(d);d.style.top="-9000px";d.style.width="";d.style.height="";
 
d.style.display="";var f=d.offsetWidth,g=d.offsetHeight,j=this.animHoriz?0:f,h=this.animVert?0:g;b.attributes=a?{width:{to:f},height:{to:g}}:{width:{to:j},height:{to:h}};if(a&&!this._bContainerOpen){this._elContent.style.width=j+"px";this._elContent.style.height=h+"px"}else{this._elContent.style.width=f+"px";this._elContent.style.height=g+"px"}c.removeChild(d);var d=null,e=this;this._toggleContainerHelpers(false);this._elContent.style.display="";b.onComplete.subscribe(function(){b.onComplete.unsubscribeAll();
 
if(a){e._toggleContainerHelpers(true);e._bContainerOpen=a;e.containerExpandEvent.fire(e)}else{e._elContent.style.display="none";e._bContainerOpen=a;e.containerCollapseEvent.fire(e)}});b.animate()}else if(a){this._elContent.style.display="";this._toggleContainerHelpers(true);this._bContainerOpen=a;this.containerExpandEvent.fire(this)}else{this._toggleContainerHelpers(false);this._elContent.style.display="none";this._bContainerOpen=a;this.containerCollapseEvent.fire(this)}}};
 
YAHOO.widget.AutoComplete.prototype._toggleHighlight=function(a,c){if(a){var b=this.highlightClassName;if(this._elCurListItem){YAHOO.util.Dom.removeClass(this._elCurListItem,b);this._elCurListItem=null}if(c=="to"&&b){YAHOO.util.Dom.addClass(a,b);this._elCurListItem=a}}};
 
YAHOO.widget.AutoComplete.prototype._togglePrehighlight=function(a,c){var b=this.prehighlightClassName;this._elCurPrehighlightItem&&YAHOO.util.Dom.removeClass(this._elCurPrehighlightItem,b);if(a!=this._elCurListItem)if(c=="mouseover"&&b){YAHOO.util.Dom.addClass(a,b);this._elCurPrehighlightItem=a}else YAHOO.util.Dom.removeClass(a,b)};
 
YAHOO.widget.AutoComplete.prototype._updateValue=function(a){if(!this.suppressInputUpdate){var c=this._elTextbox,b=this.delimChar?this.delimChar[0]||this.delimChar:null,d=a._sResultMatch,f="";if(b){f=this._sPastSelections;f=f+(d+b);b!=" "&&(f=f+" ")}else f=d;c.value=f;if(c.type=="textarea")c.scrollTop=c.scrollHeight;b=c.value.length;this._selectText(c,b,b);this._elCurListItem=a}};
 
YAHOO.widget.AutoComplete.prototype._selectItem=function(a){this._bItemSelected=true;this._updateValue(a);this._sPastSelections=this._elTextbox.value;this._clearInterval();this.itemSelectEvent.fire(this,a,a._oResultData);this._toggleContainer(false)};YAHOO.widget.AutoComplete.prototype._jumpSelection=function(){this._elCurListItem?this._selectItem(this._elCurListItem):this._toggleContainer(false)};
 
YAHOO.widget.AutoComplete.prototype._moveSelection=function(a){if(this._bContainerOpen){var c=this._elCurListItem,b=-1;if(c)b=c._nItemIndex;b=a==40?b+1:b-1;if(!(b<-2||b>=this._nDisplayedItems)){if(c){this._toggleHighlight(c,"from");this.itemArrowFromEvent.fire(this,c)}if(b==-1)this._elTextbox.value=this.delimChar?this._sPastSelections+this._sCurQuery:this._sCurQuery;else if(b==-2)this._toggleContainer(false);else{var c=this._elList.childNodes[b],d=this._elContent,f=YAHOO.util.Dom.getStyle(d,"overflow"),
 
g=YAHOO.util.Dom.getStyle(d,"overflowY");if((f=="auto"||f=="scroll"||g=="auto"||g=="scroll")&&b>-1&&b<this._nDisplayedItems)if(a==40)if(c.offsetTop+c.offsetHeight>d.scrollTop+d.offsetHeight)d.scrollTop=c.offsetTop+c.offsetHeight-d.offsetHeight;else{if(c.offsetTop+c.offsetHeight<d.scrollTop)d.scrollTop=c.offsetTop}else if(c.offsetTop<d.scrollTop)this._elContent.scrollTop=c.offsetTop;else if(c.offsetTop>d.scrollTop+d.offsetHeight)this._elContent.scrollTop=c.offsetTop+c.offsetHeight-d.offsetHeight;this._toggleHighlight(c,
 
"to");this.itemArrowToEvent.fire(this,c);if(this.typeAhead){this._updateValue(c);this._sCurQuery=c._sResultMatch}}}}};
 
YAHOO.widget.AutoComplete.prototype._onContainerMouseover=function(a,c){for(var b=YAHOO.util.Event.getTarget(a),d=b.nodeName.toLowerCase();b&&d!="table";){switch(d){case "body":return;case "li":c.prehighlightClassName?c._togglePrehighlight(b,"mouseover"):c._toggleHighlight(b,"to");c.itemMouseOverEvent.fire(c,b);break;case "div":if(YAHOO.util.Dom.hasClass(b,"yui-ac-container")){c._bOverContainer=true;return}}(b=b.parentNode)&&(d=b.nodeName.toLowerCase())}};
 
YAHOO.widget.AutoComplete.prototype._onContainerMouseout=function(a,c){for(var b=YAHOO.util.Event.getTarget(a),d=b.nodeName.toLowerCase();b&&d!="table";){switch(d){case "body":return;case "li":c.prehighlightClassName?c._togglePrehighlight(b,"mouseout"):c._toggleHighlight(b,"from");c.itemMouseOutEvent.fire(c,b);break;case "ul":c._toggleHighlight(c._elCurListItem,"to");break;case "div":if(YAHOO.util.Dom.hasClass(b,"yui-ac-container")){c._bOverContainer=false;return}}(b=b.parentNode)&&(d=b.nodeName.toLowerCase())}};
 
YAHOO.widget.AutoComplete.prototype._onContainerClick=function(a,c){for(var b=YAHOO.util.Event.getTarget(a),d=b.nodeName.toLowerCase();b&&d!="table";){switch(d){case "body":return;case "li":c._toggleHighlight(b,"to");c._selectItem(b);return}(b=b.parentNode)&&(d=b.nodeName.toLowerCase())}};YAHOO.widget.AutoComplete.prototype._onContainerScroll=function(a,c){c._focus()};YAHOO.widget.AutoComplete.prototype._onContainerResize=function(a,c){c._toggleContainerHelpers(c._bContainerOpen)};
 
YAHOO.widget.AutoComplete.prototype._onTextboxKeyDown=function(a,c){var b=a.keyCode;c._nTypeAheadDelayID!=-1&&clearTimeout(c._nTypeAheadDelayID);switch(b){case 9:if(!YAHOO.env.ua.opera&&navigator.userAgent.toLowerCase().indexOf("mac")==-1||YAHOO.env.ua.webkit>420)if(c._elCurListItem){c.delimChar&&c._nKeyCode!=b&&c._bContainerOpen&&YAHOO.util.Event.stopEvent(a);c._selectItem(c._elCurListItem)}else c._toggleContainer(false);break;case 13:if(!YAHOO.env.ua.opera&&navigator.userAgent.toLowerCase().indexOf("mac")==
 
-1||YAHOO.env.ua.webkit>420)if(c._elCurListItem){c._nKeyCode!=b&&c._bContainerOpen&&YAHOO.util.Event.stopEvent(a);c._selectItem(c._elCurListItem)}else c._toggleContainer(false);break;case 27:c._toggleContainer(false);return;case 39:c._jumpSelection();break;case 38:if(c._bContainerOpen){YAHOO.util.Event.stopEvent(a);c._moveSelection(b)}break;case 40:if(c._bContainerOpen){YAHOO.util.Event.stopEvent(a);c._moveSelection(b)}break;default:c._bItemSelected=false;c._toggleHighlight(c._elCurListItem,"from");
 
c.textboxKeyEvent.fire(c,b)}b===18&&c._enableIntervalDetection();c._nKeyCode=b};
 
YAHOO.widget.AutoComplete.prototype._onTextboxKeyPress=function(a,c){var b=a.keyCode;if(YAHOO.env.ua.opera||navigator.userAgent.toLowerCase().indexOf("mac")!=-1&&YAHOO.env.ua.webkit<420)switch(b){case 9:if(c._bContainerOpen){c.delimChar&&YAHOO.util.Event.stopEvent(a);c._elCurListItem?c._selectItem(c._elCurListItem):c._toggleContainer(false)}break;case 13:if(c._bContainerOpen){YAHOO.util.Event.stopEvent(a);c._elCurListItem?c._selectItem(c._elCurListItem):c._toggleContainer(false)}}else b==229&&c._enableIntervalDetection()};
 
YAHOO.widget.AutoComplete.prototype._onTextboxKeyUp=function(a,c){var b=this.value;c._initProps();if(!c._isIgnoreKey(a.keyCode)){c._nDelayID!=-1&&clearTimeout(c._nDelayID);c._nDelayID=setTimeout(function(){c._sendQuery(b)},c.queryDelay*1E3);c.textboxKeyUpEvent.fire(c,b)}};YAHOO.widget.AutoComplete.prototype._onTextboxFocus=function(a,c){if(!c._bFocused){c._elTextbox.setAttribute("autocomplete","off");c._bFocused=true;c._sInitInputValue=c._elTextbox.value;c.textboxFocusEvent.fire(c)}};
 
YAHOO.widget.AutoComplete.prototype._onTextboxBlur=function(a,c){if(!c._bOverContainer||c._nKeyCode==9){if(!c._bItemSelected){var b=c._textMatchesOption();!c._bContainerOpen||c._bContainerOpen&&b===null?c.forceSelection?c._clearSelection():c.unmatchedItemSelectEvent.fire(c,c._sCurQuery):c.forceSelection&&c._selectItem(b)}c._clearInterval();c._bFocused=false;c._sInitInputValue!==c._elTextbox.value&&c.textboxChangeEvent.fire(c);c.textboxBlurEvent.fire(c);c._toggleContainer(false)}else c._focus()};
 
YAHOO.widget.AutoComplete.prototype._onWindowUnload=function(a,c){c&&(c._elTextbox&&c.allowBrowserAutocomplete)&&c._elTextbox.setAttribute("autocomplete","on")};YAHOO.widget.AutoComplete.prototype.doBeforeSendQuery=function(a){return this.generateRequest(a)};YAHOO.widget.AutoComplete.prototype.getListItems=function(){for(var a=[],c=this._elList.childNodes,b=c.length-1;b>=0;b--)a[b]=c[b];return a};
 
YAHOO.widget.AutoComplete._cloneObject=function(a){if(!YAHOO.lang.isValue(a))return a;var c={};if(YAHOO.lang.isFunction(a))c=a;else if(YAHOO.lang.isArray(a))for(var c=[],b=0,d=a.length;b<d;b++)c[b]=YAHOO.widget.AutoComplete._cloneObject(a[b]);else if(YAHOO.lang.isObject(a))for(b in a)YAHOO.lang.hasOwnProperty(a,b)&&(c[b]=YAHOO.lang.isValue(a[b])&&YAHOO.lang.isObject(a[b])||YAHOO.lang.isArray(a[b])?YAHOO.widget.AutoComplete._cloneObject(a[b]):a[b]);else c=a;return c};
 
YAHOO.register("autocomplete",YAHOO.widget.AutoComplete,{version:"2.9.0",build:"2800"});
 
(function(){YAHOO.util.Config=function(a){a&&this.init(a)};var a=YAHOO.lang,c=YAHOO.util.CustomEvent,b=YAHOO.util.Config;b.CONFIG_CHANGED_EVENT="configChanged";b.BOOLEAN_TYPE="boolean";b.prototype={owner:null,queueInProgress:false,config:null,initialConfig:null,eventQueue:null,configChangedEvent:null,init:function(a){this.owner=a;this.configChangedEvent=this.createEvent(b.CONFIG_CHANGED_EVENT);this.configChangedEvent.signature=c.LIST;this.queueInProgress=false;this.config={};this.initialConfig={};
 
this.eventQueue=[]},checkBoolean:function(a){return typeof a==b.BOOLEAN_TYPE},checkNumber:function(a){return!isNaN(a)},fireEvent:function(a,b){var c=this.config[a];c&&c.event&&c.event.fire(b)},addProperty:function(a,b){a=a.toLowerCase();this.config[a]=b;b.event=this.createEvent(a,{scope:this.owner});b.event.signature=c.LIST;b.key=a;b.handler&&b.event.subscribe(b.handler,this.owner);this.setProperty(a,b.value,true);b.suppressEvent||this.queueProperty(a,b.value)},getConfig:function(){var b={},c=this.config,
 
g,j;for(g in c)if(a.hasOwnProperty(c,g))if((j=c[g])&&j.event)b[g]=j.value;return b},getProperty:function(a){if((a=this.config[a.toLowerCase()])&&a.event)return a.value},resetProperty:function(a){var a=a.toLowerCase(),b=this.config[a];if(b&&b.event){if(a in this.initialConfig){this.setProperty(a,this.initialConfig[a]);return true}}else return false},setProperty:function(a,b,c){var j,a=a.toLowerCase();if(this.queueInProgress&&!c){this.queueProperty(a,b);return true}if((j=this.config[a])&&j.event){if(j.validator&&
 
!j.validator(b))return false;j.value=b;if(!c){this.fireEvent(a,b);this.configChangedEvent.fire([a,b])}return true}return false},queueProperty:function(b,c){var b=b.toLowerCase(),g=this.config[b],j=false,h,e,i,k,l,q;if(g&&g.event){if(!a.isUndefined(c)&&g.validator&&!g.validator(c))return false;a.isUndefined(c)?c=g.value:g.value=c;j=false;h=this.eventQueue.length;for(l=0;l<h;l++)if(e=this.eventQueue[l]){i=e[0];e=e[1];if(i==b){this.eventQueue[l]=null;this.eventQueue.push([b,!a.isUndefined(c)?c:e]);j=
 
true;break}}!j&&!a.isUndefined(c)&&this.eventQueue.push([b,c]);if(g.supercedes){j=g.supercedes.length;for(e=0;e<j;e++){h=g.supercedes[e];i=this.eventQueue.length;for(q=0;q<i;q++)if(k=this.eventQueue[q]){l=k[0];k=k[1];if(l==h.toLowerCase()){this.eventQueue.push([l,k]);this.eventQueue[q]=null;break}}}}return true}return false},refireEvent:function(b){var b=b.toLowerCase(),c=this.config[b];c&&(c.event&&!a.isUndefined(c.value))&&(this.queueInProgress?this.queueProperty(b):this.fireEvent(b,c.value))},
 
applyConfig:function(b,c){var g,j;if(c){j={};for(g in b)a.hasOwnProperty(b,g)&&(j[g.toLowerCase()]=b[g]);this.initialConfig=j}for(g in b)a.hasOwnProperty(b,g)&&this.queueProperty(g,b[g])},refresh:function(){for(var b in this.config)a.hasOwnProperty(this.config,b)&&this.refireEvent(b)},fireQueue:function(){var a,b,c,j;this.queueInProgress=true;for(a=0;a<this.eventQueue.length;a++)if(b=this.eventQueue[a]){c=b[0];b=b[1];j=this.config[c];j.value=b;this.eventQueue[a]=null;this.fireEvent(c,b)}this.queueInProgress=
 
false;this.eventQueue=[]},subscribeToConfigEvent:function(a,c,g,j){if((a=this.config[a.toLowerCase()])&&a.event){b.alreadySubscribed(a.event,c,g)||a.event.subscribe(c,g,j);return true}return false},unsubscribeFromConfigEvent:function(a,b,c){return(a=this.config[a.toLowerCase()])&&a.event?a.event.unsubscribe(b,c):false},toString:function(){var a="Config";this.owner&&(a=a+(" ["+this.owner.toString()+"]"));return a},outputEventQueue:function(){var a="",b,c,j=this.eventQueue.length;for(c=0;c<j;c++)(b=
 
this.eventQueue[c])&&(a=a+(b[0]+"="+b[1]+", "));return a},destroy:function(){var b=this.config,c,g;for(c in b)if(a.hasOwnProperty(b,c)){g=b[c];g.event.unsubscribeAll();g.event=null}this.configChangedEvent.unsubscribeAll();this.eventQueue=this.initialConfig=this.config=this.owner=this.configChangedEvent=null}};b.alreadySubscribed=function(a,b,c){var j=a.subscribers.length,h;if(j>0){h=j-1;do if((j=a.subscribers[h])&&j.obj==c&&j.fn==b)return true;while(h--)}return false};YAHOO.lang.augmentProto(b,YAHOO.util.EventProvider)})();
 
(function(){function a(){if(!k){k=document.createElement("div");k.innerHTML='<div class="'+e.CSS_HEADER+'"></div><div class="'+e.CSS_BODY+'"></div><div class="'+e.CSS_FOOTER+'"></div>';l=k.firstChild;q=l.nextSibling;p=q.nextSibling}return k}function c(){l||a();return l.cloneNode(false)}function b(){q||a();return q.cloneNode(false)}function d(){p||a();return p.cloneNode(false)}YAHOO.widget.Module=function(a,e){a&&this.init(a,e)};var f=YAHOO.util.Dom,g=YAHOO.util.Config,j=YAHOO.util.Event,h=YAHOO.util.CustomEvent,
 
e=YAHOO.widget.Module,i=YAHOO.env.ua,k,l,q,p,n=YAHOO.lang.isBoolean,o=["visible"];e.IMG_ROOT=null;e.IMG_ROOT_SSL=null;e.CSS_MODULE="yui-module";e.CSS_HEADER="hd";e.CSS_BODY="bd";e.CSS_FOOTER="ft";e.RESIZE_MONITOR_SECURE_URL="javascript:false;";e.RESIZE_MONITOR_BUFFER=1;e.textResizeEvent=new h("textResize");e.forceDocumentRedraw=function(){var a=document.documentElement;if(a){a.className=a.className+" ";a.className=YAHOO.lang.trim(a.className)}};var m=e,r=e,s=e.IMG_ROOT,t=function(){var a=navigator.userAgent.toLowerCase();
 
return a.indexOf("windows")!=-1||a.indexOf("win32")!=-1?"windows":a.indexOf("macintosh")!=-1?"mac":false}(),u=function(){var a=navigator.userAgent.toLowerCase();return a.indexOf("opera")!=-1?"opera":a.indexOf("msie 7")!=-1?"ie7":a.indexOf("msie")!=-1?"ie":a.indexOf("safari")!=-1?"safari":a.indexOf("gecko")!=-1?"gecko":false}(),w;w=window.location.href.toLowerCase().indexOf("https")===0?true:false;m.prototype={constructor:r,element:null,header:null,body:null,footer:null,id:null,imageRoot:s,initEvents:function(){var a=
 
h.LIST;this.beforeInitEvent=this.createEvent("beforeInit");this.beforeInitEvent.signature=a;this.initEvent=this.createEvent("init");this.initEvent.signature=a;this.appendEvent=this.createEvent("append");this.appendEvent.signature=a;this.beforeRenderEvent=this.createEvent("beforeRender");this.beforeRenderEvent.signature=a;this.renderEvent=this.createEvent("render");this.renderEvent.signature=a;this.changeHeaderEvent=this.createEvent("changeHeader");this.changeHeaderEvent.signature=a;this.changeBodyEvent=
 
this.createEvent("changeBody");this.changeBodyEvent.signature=a;this.changeFooterEvent=this.createEvent("changeFooter");this.changeFooterEvent.signature=a;this.changeContentEvent=this.createEvent("changeContent");this.changeContentEvent.signature=a;this.destroyEvent=this.createEvent("destroy");this.destroyEvent.signature=a;this.beforeShowEvent=this.createEvent("beforeShow");this.beforeShowEvent.signature=a;this.showEvent=this.createEvent("show");this.showEvent.signature=a;this.beforeHideEvent=this.createEvent("beforeHide");
 
this.beforeHideEvent.signature=a;this.hideEvent=this.createEvent("hide");this.hideEvent.signature=a},platform:t,browser:u,isSecure:w,initDefaultConfig:function(){this.cfg.addProperty("visible",{handler:this.configVisible,value:true,validator:n});this.cfg.addProperty("effect",{handler:this.configEffect,suppressEvent:true,supercedes:o});this.cfg.addProperty("monitorresize",{handler:this.configMonitorResize,value:true});this.cfg.addProperty("appendtodocumentbody",{value:false})},init:function(b,i){var c;
 
this.initEvents();this.beforeInitEvent.fire(e);this.cfg=new g(this);if(this.isSecure)this.imageRoot=e.IMG_ROOT_SSL;if(typeof b=="string"){c=b;b=document.getElementById(b);if(!b){b=a().cloneNode(false);b.id=c}}this.id=f.generateId(b);this.element=b;if(c=this.element.firstChild){var d=false,k=false,l=false;do if(1==c.nodeType)if(!d&&f.hasClass(c,e.CSS_HEADER)){this.header=c;d=true}else if(!k&&f.hasClass(c,e.CSS_BODY)){this.body=c;k=true}else if(!l&&f.hasClass(c,e.CSS_FOOTER)){this.footer=c;l=true}while(c=
 
c.nextSibling)}this.initDefaultConfig();f.addClass(this.element,e.CSS_MODULE);i&&this.cfg.applyConfig(i,true);g.alreadySubscribed(this.renderEvent,this.cfg.fireQueue,this.cfg)||this.renderEvent.subscribe(this.cfg.fireQueue,this.cfg,true);this.initEvent.fire(e)},initResizeMonitor:function(){if(i.gecko&&this.platform=="windows"){var a=this;setTimeout(function(){a._initResizeMonitor()},0)}else this._initResizeMonitor()},_initResizeMonitor:function(){function a(){e.textResizeEvent.fire()}var b,c;if(!i.opera){c=
 
f.get("_yuiResizeMonitor");var d=this._supportsCWResize();if(!c){c=document.createElement("iframe");if(this.isSecure&&e.RESIZE_MONITOR_SECURE_URL&&i.ie)c.src=e.RESIZE_MONITOR_SECURE_URL;if(!d)c.src="data:text/html;charset=utf-8,"+encodeURIComponent('<html><head><script type="text/javascript">window.onresize=function(){window.parent.YAHOO.widget.Module.textResizeEvent.fire();};<\/script></head><body></body></html>');c.id="_yuiResizeMonitor";c.title="Text Resize Monitor";c.tabIndex=-1;c.setAttribute("role",
 
"presentation");c.style.position="absolute";c.style.visibility="hidden";b=document.body;var k=b.firstChild;k?b.insertBefore(c,k):b.appendChild(c);c.style.backgroundColor="transparent";c.style.borderWidth="0";c.style.width="2em";c.style.height="2em";c.style.left="0";c.style.top=-1*(c.offsetHeight+e.RESIZE_MONITOR_BUFFER)+"px";c.style.visibility="visible";if(i.webkit){b=c.contentWindow.document;b.open();b.close()}}if(c&&c.contentWindow){e.textResizeEvent.subscribe(this.onDomResize,this,true);if(!e.textResizeInitialized){if(d&&
 
!j.on(c.contentWindow,"resize",a))j.on(c,"resize",a);e.textResizeInitialized=true}this.resizeMonitor=c}}},_supportsCWResize:function(){var a=true;i.gecko&&i.gecko<=1.8&&(a=false);return a},onDomResize:function(){this.resizeMonitor.style.top=-1*(this.resizeMonitor.offsetHeight+e.RESIZE_MONITOR_BUFFER)+"px";this.resizeMonitor.style.left="0"},setHeader:function(a){var e=this.header||(this.header=c());if(a.nodeName){e.innerHTML="";e.appendChild(a)}else e.innerHTML=a;this._rendered&&this._renderHeader();
 
this.changeHeaderEvent.fire(a);this.changeContentEvent.fire()},appendToHeader:function(a){(this.header||(this.header=c())).appendChild(a);this.changeHeaderEvent.fire(a);this.changeContentEvent.fire()},setBody:function(a){var e=this.body||(this.body=b());if(a.nodeName){e.innerHTML="";e.appendChild(a)}else e.innerHTML=a;this._rendered&&this._renderBody();this.changeBodyEvent.fire(a);this.changeContentEvent.fire()},appendToBody:function(a){(this.body||(this.body=b())).appendChild(a);this.changeBodyEvent.fire(a);
 
this.changeContentEvent.fire()},setFooter:function(a){var e=this.footer||(this.footer=d());if(a.nodeName){e.innerHTML="";e.appendChild(a)}else e.innerHTML=a;this._rendered&&this._renderFooter();this.changeFooterEvent.fire(a);this.changeContentEvent.fire()},appendToFooter:function(a){(this.footer||(this.footer=d())).appendChild(a);this.changeFooterEvent.fire(a);this.changeContentEvent.fire()},render:function(a,e){this.beforeRenderEvent.fire();if(!e)e=this.element;if(a){var b=a;typeof b=="string"&&
 
(b=document.getElementById(b));if(b){this._addToParent(b,this.element);this.appendEvent.fire()}}else if(!f.inDocument(this.element))return false;this._renderHeader(e);this._renderBody(e);this._renderFooter(e);this._rendered=true;this.renderEvent.fire();return true},_renderHeader:function(a){a=a||this.element;if(this.header&&!f.inDocument(this.header)){var e=a.firstChild;e?a.insertBefore(this.header,e):a.appendChild(this.header)}},_renderBody:function(a){a=a||this.element;this.body&&!f.inDocument(this.body)&&
 
(this.footer&&f.isAncestor(a,this.footer)?a.insertBefore(this.body,this.footer):a.appendChild(this.body))},_renderFooter:function(a){a=a||this.element;this.footer&&!f.inDocument(this.footer)&&a.appendChild(this.footer)},destroy:function(a){var b,a=!a;if(this.element){j.purgeElement(this.element,a);b=this.element.parentNode}b&&b.removeChild(this.element);this.footer=this.body=this.header=this.element=null;e.textResizeEvent.unsubscribe(this.onDomResize,this);this.cfg.destroy();this.cfg=null;this.destroyEvent.fire()},
 
show:function(){this.cfg.setProperty("visible",true)},hide:function(){this.cfg.setProperty("visible",false)},configVisible:function(a,e){if(e[0]){if(this.beforeShowEvent.fire()){f.setStyle(this.element,"display","block");this.showEvent.fire()}}else if(this.beforeHideEvent.fire()){f.setStyle(this.element,"display","none");this.hideEvent.fire()}},configEffect:function(a,e){this._cachedEffects=this.cacheEffects?this._createEffects(e[0]):null},cacheEffects:true,_createEffects:function(a){var e=null,b,
 
i,c;if(a)if(a instanceof Array){e=[];b=a.length;for(i=0;i<b;i++){c=a[i];c.effect&&(e[e.length]=c.effect(this,c.duration))}}else a.effect&&(e=[a.effect(this,a.duration)]);return e},configMonitorResize:function(a,b){if(b[0])this.initResizeMonitor();else{e.textResizeEvent.unsubscribe(this.onDomResize,this,true);this.resizeMonitor=null}},_addToParent:function(a,e){!this.cfg.getProperty("appendtodocumentbody")&&a===document.body&&a.firstChild?a.insertBefore(e,a.firstChild):a.appendChild(e)},toString:function(){return"Module "+
 
this.id}};YAHOO.lang.augmentProto(e,YAHOO.util.EventProvider)})();
 
(function(){YAHOO.widget.Overlay=function(a,e){YAHOO.widget.Overlay.superclass.constructor.call(this,a,e)};var a=YAHOO.lang,c=YAHOO.util.CustomEvent,b=YAHOO.widget.Module,d=YAHOO.util.Event,f=YAHOO.util.Dom,g=YAHOO.util.Config,j=YAHOO.env.ua,h=YAHOO.widget.Overlay,e,i=a.isNumber,k=["iframe"],l=a.isNumber,q=["iframe"],p=["iframe"],n=["iframe"],o=["iframe","visible"],m=["context","fixedcenter","iframe"],r=["context","fixedcenter","iframe"],s=["height"],t=a.isBoolean,u=["iframe","x","y","xy"],w=j.ie==
 
6?true:false,x=a.isBoolean,v=["zindex"],y=a.isBoolean,B=["constraintoviewport"];h.IFRAME_SRC="javascript:false;";h.IFRAME_OFFSET=3;h.VIEWPORT_OFFSET=10;h.TOP_LEFT="tl";h.TOP_RIGHT="tr";h.BOTTOM_LEFT="bl";h.BOTTOM_RIGHT="br";h.PREVENT_OVERLAP_X={tltr:true,blbr:true,brbl:true,trtl:true};h.PREVENT_OVERLAP_Y={trbr:true,tlbl:true,bltl:true,brtr:true};h.CSS_OVERLAY="yui-overlay";h.CSS_HIDDEN="yui-overlay-hidden";h.CSS_IFRAME="yui-overlay-iframe";h.STD_MOD_RE=/^\s*?(body|footer|header)\s*?$/i;h.windowScrollEvent=
 
new c("windowScroll");h.windowResizeEvent=new c("windowResize");h.windowScrollHandler=function(a){a=d.getTarget(a);if(!a||a===window||a===window.document)if(j.ie){if(!window.scrollEnd)window.scrollEnd=-1;clearTimeout(window.scrollEnd);window.scrollEnd=setTimeout(function(){h.windowScrollEvent.fire()},1)}else h.windowScrollEvent.fire()};h.windowResizeHandler=function(){if(j.ie){if(!window.resizeEnd)window.resizeEnd=-1;clearTimeout(window.resizeEnd);window.resizeEnd=setTimeout(function(){h.windowResizeEvent.fire()},
 
100)}else h.windowResizeEvent.fire()};h._initialized=null;if(h._initialized===null){d.on(window,"scroll",h.windowScrollHandler);d.on(window,"resize",h.windowResizeHandler);h._initialized=true}h._TRIGGER_MAP={windowScroll:h.windowScrollEvent,windowResize:h.windowResizeEvent,textResize:b.textResizeEvent};YAHOO.extend(h,b,{CONTEXT_TRIGGERS:[],init:function(a,e){h.superclass.init.call(this,a);this.beforeInitEvent.fire(h);f.addClass(this.element,h.CSS_OVERLAY);e&&this.cfg.applyConfig(e,true);if(this.platform==
 
"mac"&&j.gecko){g.alreadySubscribed(this.showEvent,this.showMacGeckoScrollbars,this)||this.showEvent.subscribe(this.showMacGeckoScrollbars,this,true);g.alreadySubscribed(this.hideEvent,this.hideMacGeckoScrollbars,this)||this.hideEvent.subscribe(this.hideMacGeckoScrollbars,this,true)}this.initEvent.fire(h)},initEvents:function(){h.superclass.initEvents.call(this);var a=c.LIST;this.beforeMoveEvent=this.createEvent("beforeMove");this.beforeMoveEvent.signature=a;this.moveEvent=this.createEvent("move");
 
this.moveEvent.signature=a},initDefaultConfig:function(){h.superclass.initDefaultConfig.call(this);var a=this.cfg;a.addProperty("x",{handler:this.configX,validator:i,suppressEvent:true,supercedes:k});a.addProperty("y",{handler:this.configY,validator:l,suppressEvent:true,supercedes:q});a.addProperty("xy",{handler:this.configXY,suppressEvent:true,supercedes:p});a.addProperty("context",{handler:this.configContext,suppressEvent:true,supercedes:n});a.addProperty("fixedcenter",{handler:this.configFixedCenter,
 
value:false,validator:void 0,supercedes:o});a.addProperty("width",{handler:this.configWidth,suppressEvent:true,supercedes:m});a.addProperty("height",{handler:this.configHeight,suppressEvent:true,supercedes:r});a.addProperty("autofillheight",{handler:this.configAutoFillHeight,value:"body",validator:this._validateAutoFill,supercedes:s});a.addProperty("zindex",{handler:this.configzIndex,value:null});a.addProperty("constraintoviewport",{handler:this.configConstrainToViewport,value:false,validator:t,supercedes:u});
 
a.addProperty("iframe",{handler:this.configIframe,value:w,validator:x,supercedes:v});a.addProperty("preventcontextoverlap",{value:false,validator:y,supercedes:B})},moveTo:function(a,e){this.cfg.setProperty("xy",[a,e])},hideMacGeckoScrollbars:function(){f.replaceClass(this.element,"show-scrollbars","hide-scrollbars")},showMacGeckoScrollbars:function(){f.replaceClass(this.element,"hide-scrollbars","show-scrollbars")},_setDomVisibility:function(a){f.setStyle(this.element,"visibility",a?"visible":"hidden");
 
var e=h.CSS_HIDDEN;a?f.removeClass(this.element,e):f.addClass(this.element,e)},configVisible:function(a,e){var b=e[0],i=f.getStyle(this.element,"visibility"),c=this._cachedEffects||this._createEffects(this.cfg.getProperty("effect")),d=this.platform=="mac"&&j.gecko,k=g.alreadySubscribed,l;if(i=="inherit"){for(l=this.element.parentNode;l.nodeType!=9&&l.nodeType!=11;){i=f.getStyle(l,"visibility");if(i!="inherit")break;l=l.parentNode}i=="inherit"&&(i="visible")}if(b){d&&this.showMacGeckoScrollbars();
 
if(c){if(b&&(i!="visible"||i===""||this._fadingOut)&&this.beforeShowEvent.fire()){b=c.length;for(d=0;d<b;d++){i=c[d];d===0&&!k(i.animateInCompleteEvent,this.showEvent.fire,this.showEvent)&&i.animateInCompleteEvent.subscribe(this.showEvent.fire,this.showEvent,true);i.animateIn()}}}else if(i!="visible"||i===""){if(this.beforeShowEvent.fire()){this._setDomVisibility(true);this.cfg.refireEvent("iframe");this.showEvent.fire()}}else this._setDomVisibility(true)}else{d&&this.hideMacGeckoScrollbars();if(c)if(i==
 
"visible"||this._fadingIn){if(this.beforeHideEvent.fire()){b=c.length;for(i=0;i<b;i++){d=c[i];i===0&&!k(d.animateOutCompleteEvent,this.hideEvent.fire,this.hideEvent)&&d.animateOutCompleteEvent.subscribe(this.hideEvent.fire,this.hideEvent,true);d.animateOut()}}}else i===""&&this._setDomVisibility(false);else if(i=="visible"||i===""){if(this.beforeHideEvent.fire()){this._setDomVisibility(false);this.hideEvent.fire()}}else this._setDomVisibility(false)}},doCenterOnDOMEvent:function(){var a=this.cfg,
 
e=a.getProperty("fixedcenter");a.getProperty("visible")&&e&&(e!=="contained"||this.fitsInViewport())&&this.center()},fitsInViewport:function(){var a=h.VIEWPORT_OFFSET,e=this.element,b=e.offsetWidth,e=e.offsetHeight,i=f.getViewportWidth(),c=f.getViewportHeight();return b+a<i&&e+a<c},configFixedCenter:function(a,e){var b=g.alreadySubscribed,i=h.windowResizeEvent,c=h.windowScrollEvent;if(e[0]){this.center();b(this.beforeShowEvent,this.center)||this.beforeShowEvent.subscribe(this.center);b(i,this.doCenterOnDOMEvent,
 
this)||i.subscribe(this.doCenterOnDOMEvent,this,true);b(c,this.doCenterOnDOMEvent,this)||c.subscribe(this.doCenterOnDOMEvent,this,true)}else{this.beforeShowEvent.unsubscribe(this.center);i.unsubscribe(this.doCenterOnDOMEvent,this);c.unsubscribe(this.doCenterOnDOMEvent,this)}},configHeight:function(a,e){f.setStyle(this.element,"height",e[0]);this.cfg.refireEvent("iframe")},configAutoFillHeight:function(e,i){var c=i[0],d=this.cfg,k=d.getProperty("autofillheight"),l=this._autoFillOnHeightChange;d.unsubscribeFromConfigEvent("height",
 
l);b.textResizeEvent.unsubscribe(l);this.changeContentEvent.unsubscribe(l);k&&(c!==k&&this[k])&&f.setStyle(this[k],"height","");if(c){c=a.trim(c.toLowerCase());d.subscribeToConfigEvent("height",l,this[c],this);b.textResizeEvent.subscribe(l,this[c],this);this.changeContentEvent.subscribe(l,this[c],this);d.setProperty("autofillheight",c,true)}},configWidth:function(a,e){f.setStyle(this.element,"width",e[0]);this.cfg.refireEvent("iframe")},configzIndex:function(a,e){var b=e[0],i=this.element;if(!b){b=
 
f.getStyle(i,"zIndex");if(!b||isNaN(b))b=0}if(this.iframe||this.cfg.getProperty("iframe")===true)b<=0&&(b=1);f.setStyle(i,"zIndex",b);this.cfg.setProperty("zIndex",b,true);this.iframe&&this.stackIframe()},configXY:function(a,e){var b=e[0],i=b[0],b=b[1];this.cfg.setProperty("x",i);this.cfg.setProperty("y",b);this.beforeMoveEvent.fire([i,b]);i=this.cfg.getProperty("x");b=this.cfg.getProperty("y");this.cfg.refireEvent("iframe");this.moveEvent.fire([i,b])},configX:function(a,e){var b=e[0],i=this.cfg.getProperty("y");
 
this.cfg.setProperty("x",b,true);this.cfg.setProperty("y",i,true);this.beforeMoveEvent.fire([b,i]);b=this.cfg.getProperty("x");i=this.cfg.getProperty("y");f.setX(this.element,b,true);this.cfg.setProperty("xy",[b,i],true);this.cfg.refireEvent("iframe");this.moveEvent.fire([b,i])},configY:function(a,e){var b=this.cfg.getProperty("x"),i=e[0];this.cfg.setProperty("x",b,true);this.cfg.setProperty("y",i,true);this.beforeMoveEvent.fire([b,i]);b=this.cfg.getProperty("x");i=this.cfg.getProperty("y");f.setY(this.element,
 
i,true);this.cfg.setProperty("xy",[b,i],true);this.cfg.refireEvent("iframe");this.moveEvent.fire([b,i])},showIframe:function(){var a=this.iframe,e;if(a){e=this.element.parentNode;e!=a.parentNode&&this._addToParent(e,a);a.style.display="block"}},hideIframe:function(){if(this.iframe)this.iframe.style.display="none"},syncIframe:function(){var e=this.iframe,b=this.element,i=h.IFRAME_OFFSET,c=i*2;if(e){e.style.width=b.offsetWidth+c+"px";e.style.height=b.offsetHeight+c+"px";b=this.cfg.getProperty("xy");
 
if(!a.isArray(b)||isNaN(b[0])||isNaN(b[1])){this.syncPosition();b=this.cfg.getProperty("xy")}f.setXY(e,[b[0]-i,b[1]-i])}},stackIframe:function(){if(this.iframe){var a=f.getStyle(this.element,"zIndex");!YAHOO.lang.isUndefined(a)&&!isNaN(a)&&f.setStyle(this.iframe,"zIndex",a-1)}},configIframe:function(a,b){function i(){var a=this.iframe,b=this.element;if(!a){if(!e){e=document.createElement("iframe");if(this.isSecure)e.src=h.IFRAME_SRC;if(j.ie){e.style.filter="alpha(opacity=0)";e.frameBorder=0}else e.style.opacity=
 
"0";e.style.position="absolute";e.style.border="none";e.style.margin="0";e.style.padding="0";e.style.display="none";e.tabIndex=-1;e.className=h.CSS_IFRAME}a=e.cloneNode(false);a.id=this.id+"_f";b=b.parentNode;this._addToParent(b||document.body,a);this.iframe=a}this.showIframe();this.syncIframe();this.stackIframe();if(!this._hasIframeEventListeners){this.showEvent.subscribe(this.showIframe);this.hideEvent.subscribe(this.hideIframe);this.changeContentEvent.subscribe(this.syncIframe);this._hasIframeEventListeners=
 
true}}function c(){i.call(this);this.beforeShowEvent.unsubscribe(c);this._iframeDeferred=false}if(b[0])if(this.cfg.getProperty("visible"))i.call(this);else{if(!this._iframeDeferred){this.beforeShowEvent.subscribe(c);this._iframeDeferred=true}}else{this.hideIframe();if(this._hasIframeEventListeners){this.showEvent.unsubscribe(this.showIframe);this.hideEvent.unsubscribe(this.hideIframe);this.changeContentEvent.unsubscribe(this.syncIframe);this._hasIframeEventListeners=false}}},_primeXYFromDOM:function(){if(YAHOO.lang.isUndefined(this.cfg.getProperty("xy"))){this.syncPosition();
 
this.cfg.refireEvent("xy");this.beforeShowEvent.unsubscribe(this._primeXYFromDOM)}},configConstrainToViewport:function(a,e){if(e[0]){g.alreadySubscribed(this.beforeMoveEvent,this.enforceConstraints,this)||this.beforeMoveEvent.subscribe(this.enforceConstraints,this,true);g.alreadySubscribed(this.beforeShowEvent,this._primeXYFromDOM)||this.beforeShowEvent.subscribe(this._primeXYFromDOM)}else{this.beforeShowEvent.unsubscribe(this._primeXYFromDOM);this.beforeMoveEvent.unsubscribe(this.enforceConstraints,
 
this)}},configContext:function(a,e){var b=e[0],i,c,d,k,f=this.CONTEXT_TRIGGERS;if(b){i=b[0];c=b[1];d=b[2];k=b[3];b=b[4];f&&f.length>0&&(k=(k||[]).concat(f));if(i){typeof i=="string"&&this.cfg.setProperty("context",[document.getElementById(i),c,d,k,b],true);c&&d&&this.align(c,d,b);this._contextTriggers&&this._processTriggers(this._contextTriggers,"unsubscribe",this._alignOnTrigger);if(k){this._processTriggers(k,"subscribe",this._alignOnTrigger);this._contextTriggers=k}}}},_alignOnTrigger:function(){this.align()},
 
_findTriggerCE:function(a){var e=null;a instanceof c?e=a:h._TRIGGER_MAP[a]&&(e=h._TRIGGER_MAP[a]);return e},_processTriggers:function(a,e,b){for(var i,c,d=0,k=a.length;d<k;++d){i=a[d];if(c=this._findTriggerCE(i))c[e](b,this,true);else this[e](i,b)}},align:function(a,e,b){function i(e,c){var k=null,f=null;switch(a){case h.TOP_LEFT:k=c;f=e;break;case h.TOP_RIGHT:k=c-l.offsetWidth;f=e;break;case h.BOTTOM_LEFT:k=c;f=e-l.offsetHeight;break;case h.BOTTOM_RIGHT:k=c-l.offsetWidth;f=e-l.offsetHeight}if(k!==
 
null&&f!==null){if(b){k=k+b[0];f=f+b[1]}d.moveTo(k,f)}}var c=this.cfg.getProperty("context"),d=this,k,l;if(c){k=c[0];l=this.element;d=this;a||(a=c[1]);e||(e=c[2]);!b&&c[4]&&(b=c[4]);if(l&&k){c=f.getRegion(k);switch(e){case h.TOP_LEFT:i(c.top,c.left);break;case h.TOP_RIGHT:i(c.top,c.right);break;case h.BOTTOM_LEFT:i(c.bottom,c.left);break;case h.BOTTOM_RIGHT:i(c.bottom,c.right)}}}},enforceConstraints:function(a,e){var b=e[0],b=this.getConstrainedXY(b[0],b[1]);this.cfg.setProperty("x",b[0],true);this.cfg.setProperty("y",
 
b[1],true);this.cfg.setProperty("xy",b,true)},_getConstrainedPos:function(a,e){var b=this.element,i=h.VIEWPORT_OFFSET,c=a=="x",b=c?b.offsetWidth:b.offsetHeight,d=c?f.getViewportWidth():f.getViewportHeight(),k=c?f.getDocumentScrollLeft():f.getDocumentScrollTop(),l=c?h.PREVENT_OVERLAP_X:h.PREVENT_OVERLAP_Y,c=this.cfg.getProperty("context"),g=b+i<d,l=this.cfg.getProperty("preventcontextoverlap")&&c&&l[c[1]+c[2]],j=k+i,i=k+d-b-i,q=e;if(e<j||e>i)l?q=this._preventOverlap(a,c[0],b,d,k):g?e<j?q=j:e>i&&(q=
 
i):q=j;return q},_preventOverlap:function(a,e,b,i,c){var d=a=="x",k=h.VIEWPORT_OFFSET,l=this,g=(d?f.getX(e):f.getY(e))-c,j=d?e.offsetWidth:e.offsetHeight,q=g-k,p=i-(g+j)-k,n=false,o=function(){var e;e=l.cfg.getProperty(a)-c>g?g-b:g+j;l.cfg.setProperty(a,e+c,true);return e},m=function(){var e=l.cfg.getProperty(a)-c>g?p:q,i;if(b>e)if(n)o();else{o();n=true;i=m()}return i};m();return this.cfg.getProperty(a)},getConstrainedX:function(a){return this._getConstrainedPos("x",a)},getConstrainedY:function(a){return this._getConstrainedPos("y",
 
a)},getConstrainedXY:function(a,e){return[this.getConstrainedX(a),this.getConstrainedY(e)]},center:function(){var a=h.VIEWPORT_OFFSET,e=this.element.offsetWidth,b=this.element.offsetHeight,i=f.getViewportWidth(),c=f.getViewportHeight(),e=e<i?i/2-e/2+f.getDocumentScrollLeft():a+f.getDocumentScrollLeft(),a=b<c?c/2-b/2+f.getDocumentScrollTop():a+f.getDocumentScrollTop();this.cfg.setProperty("xy",[parseInt(e,10),parseInt(a,10)]);this.cfg.refireEvent("iframe");j.webkit&&this.forceContainerRedraw()},syncPosition:function(){var a=
 
f.getXY(this.element);this.cfg.setProperty("x",a[0],true);this.cfg.setProperty("y",a[1],true);this.cfg.setProperty("xy",a,true)},onDomResize:function(a,e){var b=this;h.superclass.onDomResize.call(this,a,e);setTimeout(function(){b.syncPosition();b.cfg.refireEvent("iframe");b.cfg.refireEvent("context")},0)},_getComputedHeight:function(){return document.defaultView&&document.defaultView.getComputedStyle?function(e){var b=null;if(e.ownerDocument&&e.ownerDocument.defaultView)(e=e.ownerDocument.defaultView.getComputedStyle(e,
 
""))&&(b=parseInt(e.height,10));return a.isNumber(b)?b:null}:function(e){var b=null;if(e.style.pixelHeight)b=e.style.pixelHeight;return a.isNumber(b)?b:null}}(),_validateAutoFillHeight:function(e){return!e||a.isString(e)&&h.STD_MOD_RE.test(e)},_autoFillOnHeightChange:function(a,e,b){((a=this.cfg.getProperty("height"))&&a!=="auto"||a===0)&&this.fillHeight(b)},_getPreciseHeight:function(a){var e=a.offsetHeight;if(a.getBoundingClientRect){a=a.getBoundingClientRect();e=a.bottom-a.top}return e},fillHeight:function(a){if(a){var e=
 
this.innerElement||this.element,b=[this.header,this.body,this.footer],i,c=i=0;i=0;for(var d=false,k=0,l=b.length;k<l;k++)(i=b[k])&&(a!==i?c=c+this._getPreciseHeight(i):d=true);if(d){(j.ie||j.opera)&&f.setStyle(a,"height","0px");i=this._getComputedHeight(e);if(i===null){f.addClass(e,"yui-override-padding");i=e.clientHeight;f.removeClass(e,"yui-override-padding")}i=Math.max(i-c,0);f.setStyle(a,"height",i+"px");a.offsetHeight!=i&&(i=Math.max(i-(a.offsetHeight-i),0));f.setStyle(a,"height",i+"px")}}},
 
bringToTop:function(){var a=[],e=this.element;f.getElementsBy(function(b){var i=f.hasClass(b,h.CSS_OVERLAY),c=YAHOO.widget.Panel;i&&!f.isAncestor(e,b)&&(a[a.length]=c&&f.hasClass(b,c.CSS_PANEL)?b.parentNode:b)},"div",document.body);a.sort(function(a,e){var b=f.getStyle(a,"zIndex"),i=f.getStyle(e,"zIndex"),b=!b||isNaN(b)?0:parseInt(b,10),i=!i||isNaN(i)?0:parseInt(i,10);return b>i?-1:b<i?1:0});var b=a[0],i;if(b){i=f.getStyle(b,"zIndex");if(!isNaN(i)){var c=false;if(b!=e)c=true;else if(a.length>1){b=
 
f.getStyle(a[1],"zIndex");!isNaN(b)&&i==b&&(c=true)}c&&this.cfg.setProperty("zindex",parseInt(i,10)+2)}}},destroy:function(a){this.iframe&&this.iframe.parentNode.removeChild(this.iframe);this.iframe=null;h.windowResizeEvent.unsubscribe(this.doCenterOnDOMEvent,this);h.windowScrollEvent.unsubscribe(this.doCenterOnDOMEvent,this);b.textResizeEvent.unsubscribe(this._autoFillOnHeightChange);this._contextTriggers&&this._processTriggers(this._contextTriggers,"unsubscribe",this._alignOnTrigger);h.superclass.destroy.call(this,
 
a)},forceContainerRedraw:function(){var a=this;f.addClass(a.element,"yui-force-redraw");setTimeout(function(){f.removeClass(a.element,"yui-force-redraw")},0)},toString:function(){return"Overlay "+this.id}})})();
 
(function(){YAHOO.widget.OverlayManager=function(a){this.init(a)};var a=YAHOO.widget.Overlay,c=YAHOO.util.Event,b=YAHOO.util.Dom,d=YAHOO.util.Config,f=YAHOO.util.CustomEvent,g=YAHOO.widget.OverlayManager;g.CSS_FOCUSED="focused";g.prototype={constructor:g,overlays:null,initDefaultConfig:function(){this.cfg.addProperty("overlays",{suppressEvent:true});this.cfg.addProperty("focusevent",{value:"mousedown"})},init:function(a){this.cfg=new d(this);this.initDefaultConfig();a&&this.cfg.applyConfig(a,true);
 
this.cfg.fireQueue();var f=null;this.getActive=function(){return f};this.focus=function(a){(a=this.find(a))&&a.focus()};this.remove=function(a){var a=this.find(a),i;if(a){f==a&&(f=null);var d=a.element===null&&a.cfg===null?true:false;if(!d){i=b.getStyle(a.element,"zIndex");a.cfg.setProperty("zIndex",-1E3,true)}this.overlays.sort(this.compareZIndexDesc);this.overlays=this.overlays.slice(0,this.overlays.length-1);a.hideEvent.unsubscribe(a.blur);a.destroyEvent.unsubscribe(this._onOverlayDestroy,a);a.focusEvent.unsubscribe(this._onOverlayFocusHandler,
 
a);a.blurEvent.unsubscribe(this._onOverlayBlurHandler,a);if(!d){c.removeListener(a.element,this.cfg.getProperty("focusevent"),this._onOverlayElementFocus);a.cfg.setProperty("zIndex",i,true);a.cfg.setProperty("manager",null)}if(a.focusEvent._managed)a.focusEvent=null;if(a.blurEvent._managed)a.blurEvent=null;if(a.focus._managed)a.focus=null;if(a.blur._managed)a.blur=null}};this.blurAll=function(){var a=this.overlays.length;if(a>0){a=a-1;do this.overlays[a].blur();while(a--)}};this._manageBlur=function(a){var i=
 
false;if(f==a){b.removeClass(f.element,g.CSS_FOCUSED);f=null;i=true}return i};this._manageFocus=function(a){var i=false;if(f!=a){f&&f.blur();f=a;this.bringToTop(f);b.addClass(f.element,g.CSS_FOCUSED);i=true}return i};a=this.cfg.getProperty("overlays");if(!this.overlays)this.overlays=[];if(a){this.register(a);this.overlays.sort(this.compareZIndexDesc)}},_onOverlayElementFocus:function(a){var a=c.getTarget(a),d=this.close;d&&(a==d||b.isAncestor(d,a))?this.blur():this.focus()},_onOverlayDestroy:function(a,
 
b,e){this.remove(e)},_onOverlayFocusHandler:function(a,b,e){this._manageFocus(e)},_onOverlayBlurHandler:function(a,b,e){this._manageBlur(e)},_bindFocus:function(a){var b=this;if(a.focusEvent)a.focusEvent.subscribe(b._onOverlayFocusHandler,a,b);else{a.focusEvent=a.createEvent("focus");a.focusEvent.signature=f.LIST;a.focusEvent._managed=true}if(!a.focus){c.on(a.element,b.cfg.getProperty("focusevent"),b._onOverlayElementFocus,null,a);a.focus=function(){if(b._manageFocus(this)){this.cfg.getProperty("visible")&&
 
this.focusFirst&&this.focusFirst();this.focusEvent.fire()}};a.focus._managed=true}},_bindBlur:function(a){var b=this;if(a.blurEvent)a.blurEvent.subscribe(b._onOverlayBlurHandler,a,b);else{a.blurEvent=a.createEvent("blur");a.blurEvent.signature=f.LIST;a.focusEvent._managed=true}if(!a.blur){a.blur=function(){b._manageBlur(this)&&this.blurEvent.fire()};a.blur._managed=true}a.hideEvent.subscribe(a.blur)},_bindDestroy:function(a){a.destroyEvent.subscribe(this._onOverlayDestroy,a,this)},_syncZIndex:function(a){var c=
 
b.getStyle(a.element,"zIndex");isNaN(c)?a.cfg.setProperty("zIndex",0):a.cfg.setProperty("zIndex",parseInt(c,10))},register:function(b){var c=false,e,i;if(b instanceof a){b.cfg.addProperty("manager",{value:this});this._bindFocus(b);this._bindBlur(b);this._bindDestroy(b);this._syncZIndex(b);this.overlays.push(b);this.bringToTop(b);c=true}else if(b instanceof Array){e=0;for(i=b.length;e<i;e++)c=this.register(b[e])||c}return c},bringToTop:function(a){var a=this.find(a),c,e,i;if(a){i=this.overlays;i.sort(this.compareZIndexDesc);
 
if(e=i[0]){c=b.getStyle(e.element,"zIndex");if(!isNaN(c)){var d=false;if(e!==a)d=true;else if(i.length>1){e=b.getStyle(i[1].element,"zIndex");!isNaN(e)&&c==e&&(d=true)}d&&a.cfg.setProperty("zindex",parseInt(c,10)+2)}i.sort(this.compareZIndexDesc)}}},find:function(b){var c=b instanceof a,e=this.overlays,i=e.length,d=null,f;if(c||typeof b=="string")for(f=i-1;f>=0;f--){i=e[f];if(c&&i===b||i.id==b){d=i;break}}return d},compareZIndexDesc:function(a,b){var e=a.cfg?a.cfg.getProperty("zIndex"):null,i=b.cfg?
 
b.cfg.getProperty("zIndex"):null;return e===null&&i===null?0:e===null?1:i===null?-1:e>i?-1:e<i?1:0},showAll:function(){var a=this.overlays,b;for(b=a.length-1;b>=0;b--)a[b].show()},hideAll:function(){var a=this.overlays,b;for(b=a.length-1;b>=0;b--)a[b].hide()},toString:function(){return"OverlayManager"}}})();
 
(function(){function a(){if("_originalWidth"in this){var a=this._originalWidth,e=this._forcedWidth,b=this.cfg;b.getProperty("width")==e&&b.setProperty("width",a)}var a=document.body,e=this.cfg,b=e.getProperty("width"),i,c;if((!b||b=="auto")&&(e.getProperty("container")!=a||e.getProperty("x")>=j.getViewportWidth()||e.getProperty("y")>=j.getViewportHeight())){c=this.element.cloneNode(true);c.style.visibility="hidden";c.style.top="0px";c.style.left="0px";a.appendChild(c);i=c.offsetWidth+"px";a.removeChild(c);
 
e.setProperty("width",i);e.refireEvent("xy");this._originalWidth=b||"";this._forcedWidth=i}}function c(a,e,b){this.render(b)}function b(){f.onDOMReady(c,this.cfg.getProperty("container"),this)}YAHOO.widget.Tooltip=function(a,e){YAHOO.widget.Tooltip.superclass.constructor.call(this,a,e)};var d=YAHOO.lang,f=YAHOO.util.Event,g=YAHOO.util.CustomEvent,j=YAHOO.util.Dom,h=YAHOO.widget.Tooltip,e=YAHOO.env.ua,i=e.ie&&(e.ie<=6||document.compatMode=="BackCompat"),k,l=d.isBoolean,q=["x","y","xy"],p=d.isNumber,
 
n=d.isNumber,o=d.isNumber,m=[0,25];h.CSS_TOOLTIP="yui-tt";YAHOO.extend(h,YAHOO.widget.Overlay,{init:function(e,i){h.superclass.init.call(this,e);this.beforeInitEvent.fire(h);j.addClass(this.element,h.CSS_TOOLTIP);i&&this.cfg.applyConfig(i,true);this.cfg.queueProperty("visible",false);this.cfg.queueProperty("constraintoviewport",true);this.setBody("");this.subscribe("changeContent",a);this.subscribe("init",b);this.subscribe("render",this.onRender);this.initEvent.fire(h)},initEvents:function(){h.superclass.initEvents.call(this);
 
var a=g.LIST;this.contextMouseOverEvent=this.createEvent("contextMouseOver");this.contextMouseOverEvent.signature=a;this.contextMouseOutEvent=this.createEvent("contextMouseOut");this.contextMouseOutEvent.signature=a;this.contextTriggerEvent=this.createEvent("contextTrigger");this.contextTriggerEvent.signature=a},initDefaultConfig:function(){h.superclass.initDefaultConfig.call(this);this.cfg.addProperty("preventoverlap",{value:true,validator:l,supercedes:q});this.cfg.addProperty("showdelay",{handler:this.configShowDelay,
 
value:200,validator:p});this.cfg.addProperty("autodismissdelay",{handler:this.configAutoDismissDelay,value:5E3,validator:n});this.cfg.addProperty("hidedelay",{handler:this.configHideDelay,value:250,validator:o});this.cfg.addProperty("text",{handler:this.configText,suppressEvent:true});this.cfg.addProperty("container",{handler:this.configContainer,value:document.body});this.cfg.addProperty("disabled",{handler:this.configContainer,value:false,supressEvent:true});this.cfg.addProperty("xyoffset",{value:m.concat(),
 
supressEvent:true})},configText:function(a,e){var b=e[0];b&&this.setBody(b)},configContainer:function(a,e){var b=e[0];typeof b=="string"&&this.cfg.setProperty("container",document.getElementById(b),true)},_removeEventListeners:function(){var a=this._context,e,b;if(a){e=a.length;if(e>0){b=e-1;do{e=a[b];f.removeListener(e,"mouseover",this.onContextMouseOver);f.removeListener(e,"mousemove",this.onContextMouseMove);f.removeListener(e,"mouseout",this.onContextMouseOut)}while(b--)}}},configContext:function(a,
 
e){var b=e[0],i,c;if(b){if(!(b instanceof Array)){typeof b=="string"?this.cfg.setProperty("context",[document.getElementById(b)],true):this.cfg.setProperty("context",[b],true);b=this.cfg.getProperty("context")}this._removeEventListeners();if(b=this._context=b){i=b.length;if(i>0){c=i-1;do{i=b[c];f.on(i,"mouseover",this.onContextMouseOver,this);f.on(i,"mousemove",this.onContextMouseMove,this);f.on(i,"mouseout",this.onContextMouseOut,this)}while(c--)}}}},onContextMouseMove:function(a,e){e.pageX=f.getPageX(a);
 
e.pageY=f.getPageY(a)},onContextMouseOver:function(a,e){if(this.title){e._tempTitle=this.title;this.title=""}if(e.fireEvent("contextMouseOver",this,a)!==false&&!e.cfg.getProperty("disabled")){if(e.hideProcId){clearTimeout(e.hideProcId);e.hideProcId=null}f.on(this,"mousemove",e.onContextMouseMove,e);e.showProcId=e.doShow(a,this)}},onContextMouseOut:function(a,e){if(e._tempTitle){this.title=e._tempTitle;e._tempTitle=null}if(e.showProcId){clearTimeout(e.showProcId);e.showProcId=null}if(e.hideProcId){clearTimeout(e.hideProcId);
 
e.hideProcId=null}e.fireEvent("contextMouseOut",this,a);e.hideProcId=setTimeout(function(){e.hide()},e.cfg.getProperty("hidedelay"))},doShow:function(a,b){var i=this.cfg.getProperty("xyoffset"),c=i[0],d=i[1],k=this;e.opera&&(b.tagName&&b.tagName.toUpperCase()=="A")&&(d=d+12);return setTimeout(function(){var a=k.cfg.getProperty("text");k._tempTitle&&(a===""||YAHOO.lang.isUndefined(a)||YAHOO.lang.isNull(a))?k.setBody(k._tempTitle):k.cfg.refireEvent("text");k.moveTo(k.pageX+c,k.pageY+d);k.cfg.getProperty("preventoverlap")&&
 
k.preventOverlap(k.pageX,k.pageY);f.removeListener(b,"mousemove",k.onContextMouseMove);k.contextTriggerEvent.fire(b);k.show();k.hideProcId=k.doHide()},this.cfg.getProperty("showdelay"))},doHide:function(){var a=this;return setTimeout(function(){a.hide()},this.cfg.getProperty("autodismissdelay"))},preventOverlap:function(a,e){var b=this.element.offsetHeight,i=new YAHOO.util.Point(a,e),c=j.getRegion(this.element);c.top=c.top-5;c.left=c.left-5;c.right=c.right+5;c.bottom=c.bottom+5;c.contains(i)&&this.cfg.setProperty("y",
 
e-b-5)},onRender:function(){function a(){var e=this.element,b=this.underlay;if(b){b.style.width=e.offsetWidth+6+"px";b.style.height=e.offsetHeight+1+"px"}}function b(){j.addClass(this.underlay,"yui-tt-shadow-visible");e.ie&&this.forceUnderlayRedraw()}function c(){j.removeClass(this.underlay,"yui-tt-shadow-visible")}function d(){var e=this.underlay,f,l,h;if(!e){f=this.element;l=YAHOO.widget.Module;h=this;if(!k){k=document.createElement("div");k.className="yui-tt-shadow"}e=k.cloneNode(false);f.appendChild(e);
 
this._shadow=this.underlay=e;b.call(this);this.subscribe("beforeShow",b);this.subscribe("hide",c);if(i){window.setTimeout(function(){a.call(h)},0);this.cfg.subscribeToConfigEvent("width",a);this.cfg.subscribeToConfigEvent("height",a);this.subscribe("changeContent",a);l.textResizeEvent.subscribe(a,this,true);this.subscribe("destroy",function(){l.textResizeEvent.unsubscribe(a,this)})}}}function f(){d.call(this);this.unsubscribe("beforeShow",f)}this.cfg.getProperty("visible")?d.call(this):this.subscribe("beforeShow",
 
f)},forceUnderlayRedraw:function(){var a=this;j.addClass(a.underlay,"yui-force-redraw");setTimeout(function(){j.removeClass(a.underlay,"yui-force-redraw")},0)},destroy:function(){this._removeEventListeners();h.superclass.destroy.call(this)},toString:function(){return"Tooltip "+this.id}})})();
 
(function(){function a(){!this.header&&this.cfg.getProperty("draggable")&&this.setHeader("&#160;")}function c(a,e,b){var a=b[0],e=b[1],i=this.cfg;i.getProperty("width")==e&&i.setProperty("width",a);this.unsubscribe("hide",c,b)}function b(){var a,e,b;if(n){a=this.cfg;e=a.getProperty("width");if(!e||e=="auto"){b=this.element.offsetWidth+"px";a.setProperty("width",b);this.subscribe("hide",c,[e||"",b])}}}YAHOO.widget.Panel=function(a,e){YAHOO.widget.Panel.superclass.constructor.call(this,a,e)};var d=
 
null,f=YAHOO.lang,g=YAHOO.util,j=g.Dom,h=g.Event,e=g.CustomEvent,i=YAHOO.util.KeyListener,k=g.Config,l=YAHOO.widget.Overlay,q=YAHOO.widget.Panel,p=YAHOO.env.ua,n=p.ie&&(p.ie<=6||document.compatMode=="BackCompat"),o,m,r,s=f.isBoolean,t=["visible"],u=f.isBoolean,w=["visible"],x=f.isBoolean,v=["draggable"],y=["visible"],B=f.isBoolean,A=["visible","zindex"],D=["visible"],E=["close"],C=f.isObject,z={close:"Close"};q.CSS_PANEL="yui-panel";q.CSS_PANEL_CONTAINER="yui-panel-container";q.FOCUSABLE=["a","button",
 
"select","textarea","input","iframe"];YAHOO.extend(q,l,{init:function(e,b){q.superclass.init.call(this,e);this.beforeInitEvent.fire(q);j.addClass(this.element,q.CSS_PANEL);this.buildWrapper();b&&this.cfg.applyConfig(b,true);this.subscribe("showMask",this._addFocusHandlers);this.subscribe("hideMask",this._removeFocusHandlers);this.subscribe("beforeRender",a);this.subscribe("render",function(){this.setFirstLastFocusable();this.subscribe("changeContent",this.setFirstLastFocusable)});this.subscribe("show",
 
this._focusOnShow);this.initEvent.fire(q)},_onElementFocus:function(a){if(d===this){var a=h.getTarget(a),e=a!==document.documentElement&&a!==window;if(e&&a!==this.element&&a!==this.mask&&!j.isAncestor(this.element,a))try{this._focusFirstModal()}catch(b){try{e&&a!==document.body&&a.blur()}catch(i){}}}},_focusFirstModal:function(){var a=this.firstElement;a?a.focus():this._modalFocus?this._modalFocus.focus():this.innerElement.focus()},_addFocusHandlers:function(){if(!this.firstElement)p.webkit||p.opera?
 
this._modalFocus||this._createHiddenFocusElement():this.innerElement.tabIndex=0;this._setTabLoop(this.firstElement,this.lastElement);h.onFocus(document.documentElement,this._onElementFocus,this,true);d=this},_createHiddenFocusElement:function(){var a=document.createElement("button");a.style.height="1px";a.style.width="1px";a.style.position="absolute";a.style.left="-10000em";a.style.opacity=0;a.tabIndex=-1;this.innerElement.appendChild(a);this._modalFocus=a},_removeFocusHandlers:function(){h.removeFocusListener(document.documentElement,
 
this._onElementFocus,this);d==this&&(d=null)},_focusOnShow:function(a,e,b){e&&e[1]&&h.stopEvent(e[1]);this.focusFirst(a,e,b)||this.cfg.getProperty("modal")&&this._focusFirstModal()},focusFirst:function(a,e){var b=this.firstElement,i=false;e&&e[1]&&h.stopEvent(e[1]);if(b)try{b.focus();i=true}catch(c){}return i},focusLast:function(a,e){var b=this.lastElement,i=false;e&&e[1]&&h.stopEvent(e[1]);if(b)try{b.focus();i=true}catch(c){}return i},_setTabLoop:function(a,e){this.setTabLoop(a,e)},setTabLoop:function(a,
 
e){var b=this.preventBackTab,c=this.preventTabOut,d=this.showEvent,k=this.hideEvent;if(b){b.disable();d.unsubscribe(b.enable,b);k.unsubscribe(b.disable,b);this.preventBackTab=null}if(c){c.disable();d.unsubscribe(c.enable,c);k.unsubscribe(c.disable,c);this.preventTabOut=null}if(a){b=this.preventBackTab=new i(a,{shift:true,keys:9},{fn:this.focusLast,scope:this,correctScope:true});d.subscribe(b.enable,b,true);k.subscribe(b.disable,b,true)}if(e){c=this.preventTabOut=new i(e,{shift:false,keys:9},{fn:this.focusFirst,
 
scope:this,correctScope:true});d.subscribe(c.enable,c,true);k.subscribe(c.disable,c,true)}},getFocusableElements:function(a){for(var a=a||this.innerElement,e={},b=this,i=0;i<q.FOCUSABLE.length;i++)e[q.FOCUSABLE[i]]=true;return j.getElementsBy(function(a){return b._testIfFocusable(a,e)},null,a)},_testIfFocusable:function(a,e){return a.focus&&a.type!=="hidden"&&!a.disabled&&e[a.tagName.toLowerCase()]?true:false},setFirstLastFocusable:function(){this.lastElement=this.firstElement=null;var a=this.getFocusableElements();
 
this.focusableElements=a;if(a.length>0){this.firstElement=a[0];this.lastElement=a[a.length-1]}this.cfg.getProperty("modal")&&this._setTabLoop(this.firstElement,this.lastElement)},initEvents:function(){q.superclass.initEvents.call(this);var a=e.LIST;this.showMaskEvent=this.createEvent("showMask");this.showMaskEvent.signature=a;this.beforeShowMaskEvent=this.createEvent("beforeShowMask");this.beforeShowMaskEvent.signature=a;this.hideMaskEvent=this.createEvent("hideMask");this.hideMaskEvent.signature=
 
a;this.beforeHideMaskEvent=this.createEvent("beforeHideMask");this.beforeHideMaskEvent.signature=a;this.dragEvent=this.createEvent("drag");this.dragEvent.signature=a},initDefaultConfig:function(){q.superclass.initDefaultConfig.call(this);this.cfg.addProperty("close",{handler:this.configClose,value:true,validator:s,supercedes:t});this.cfg.addProperty("draggable",{handler:this.configDraggable,value:g.DD?true:false,validator:u,supercedes:w});this.cfg.addProperty("dragonly",{value:false,validator:x,supercedes:v});
 
this.cfg.addProperty("underlay",{handler:this.configUnderlay,value:"shadow",supercedes:y});this.cfg.addProperty("modal",{handler:this.configModal,value:false,validator:B,supercedes:A});this.cfg.addProperty("keylisteners",{handler:this.configKeyListeners,suppressEvent:true,supercedes:D});this.cfg.addProperty("strings",{value:z,handler:this.configStrings,validator:C,supercedes:E})},configClose:function(a,e){var b=e[0],i=this.close,c=this.cfg.getProperty("strings");if(b)if(i)i.style.display="block";
 
else{if(!r){r=document.createElement("a");r.className="container-close";r.href="#"}i=r.cloneNode(true);(b=this.innerElement.firstChild)?this.innerElement.insertBefore(i,b):this.innerElement.appendChild(i);i.innerHTML=c&&c.close?c.close:"&#160;";h.on(i,"click",this._doClose,this,true);this.close=i}else if(i)i.style.display="none"},_doClose:function(a){h.preventDefault(a);this.hide()},configDraggable:function(a,e){if(e[0])if(g.DD){if(this.header){j.setStyle(this.header,"cursor","move");this.registerDragDrop()}this.subscribe("beforeShow",
 
b)}else this.cfg.setProperty("draggable",false);else{this.dd&&this.dd.unreg();this.header&&j.setStyle(this.header,"cursor","auto");this.unsubscribe("beforeShow",b)}},configUnderlay:function(a,e){function b(){if(!f){if(!m){m=document.createElement("div");m.className="underlay"}f=m.cloneNode(false);this.element.appendChild(f);this.underlay=f;if(n){this.sizeUnderlay();this.cfg.subscribeToConfigEvent("width",this.sizeUnderlay);this.cfg.subscribeToConfigEvent("height",this.sizeUnderlay);this.changeContentEvent.subscribe(this.sizeUnderlay);
 
YAHOO.widget.Module.textResizeEvent.subscribe(this.sizeUnderlay,this,true)}p.webkit&&p.webkit<420&&this.changeContentEvent.subscribe(this.forceUnderlayRedraw)}}function i(){!b.call(this)&&n&&this.sizeUnderlay();this._underlayDeferred=false;this.beforeShowEvent.unsubscribe(i)}function c(){if(this._underlayDeferred){this.beforeShowEvent.unsubscribe(i);this._underlayDeferred=false}if(f){this.cfg.unsubscribeFromConfigEvent("width",this.sizeUnderlay);this.cfg.unsubscribeFromConfigEvent("height",this.sizeUnderlay);
 
this.changeContentEvent.unsubscribe(this.sizeUnderlay);this.changeContentEvent.unsubscribe(this.forceUnderlayRedraw);YAHOO.widget.Module.textResizeEvent.unsubscribe(this.sizeUnderlay,this,true);this.element.removeChild(f);this.underlay=null}}var d=this.platform=="mac"&&p.gecko,k=e[0].toLowerCase(),f=this.underlay,l=this.element;switch(k){case "shadow":j.removeClass(l,"matte");j.addClass(l,"shadow");break;case "matte":d||c.call(this);j.removeClass(l,"shadow");j.addClass(l,"matte");break;default:d||
 
c.call(this);j.removeClass(l,"shadow");j.removeClass(l,"matte")}if(k=="shadow"||d&&!f)if(this.cfg.getProperty("visible"))!b.call(this)&&n&&this.sizeUnderlay();else if(!this._underlayDeferred){this.beforeShowEvent.subscribe(i);this._underlayDeferred=true}},configModal:function(a,e){if(e[0]){if(!this._hasModalityEventListeners){this.subscribe("beforeShow",this.buildMask);this.subscribe("beforeShow",this.bringToTop);this.subscribe("beforeShow",this.showMask);this.subscribe("hide",this.hideMask);l.windowResizeEvent.subscribe(this.sizeMask,
 
this,true);this._hasModalityEventListeners=true}}else if(this._hasModalityEventListeners){if(this.cfg.getProperty("visible")){this.hideMask();this.removeMask()}this.unsubscribe("beforeShow",this.buildMask);this.unsubscribe("beforeShow",this.bringToTop);this.unsubscribe("beforeShow",this.showMask);this.unsubscribe("hide",this.hideMask);l.windowResizeEvent.unsubscribe(this.sizeMask,this);this._hasModalityEventListeners=false}},removeMask:function(){var a=this.mask,e;if(a){this.hideMask();(e=a.parentNode)&&
 
e.removeChild(a);this.mask=null}},configKeyListeners:function(a,e){var b=e[0],i,c,d;if(b)if(b instanceof Array){c=b.length;for(d=0;d<c;d++){i=b[d];k.alreadySubscribed(this.showEvent,i.enable,i)||this.showEvent.subscribe(i.enable,i,true);if(!k.alreadySubscribed(this.hideEvent,i.disable,i)){this.hideEvent.subscribe(i.disable,i,true);this.destroyEvent.subscribe(i.disable,i,true)}}}else{k.alreadySubscribed(this.showEvent,b.enable,b)||this.showEvent.subscribe(b.enable,b,true);if(!k.alreadySubscribed(this.hideEvent,
 
b.disable,b)){this.hideEvent.subscribe(b.disable,b,true);this.destroyEvent.subscribe(b.disable,b,true)}}},configStrings:function(a,e){this.cfg.setProperty("strings",f.merge(z,e[0]),true)},configHeight:function(a,e){j.setStyle(this.innerElement,"height",e[0]);this.cfg.refireEvent("iframe")},_autoFillOnHeightChange:function(a,e,b){q.superclass._autoFillOnHeightChange.apply(this,arguments);if(n){var i=this;setTimeout(function(){i.sizeUnderlay()},0)}},configWidth:function(a,e){j.setStyle(this.innerElement,
 
"width",e[0]);this.cfg.refireEvent("iframe")},configzIndex:function(a,e,b){q.superclass.configzIndex.call(this,a,e,b);if(this.mask||this.cfg.getProperty("modal")===true){a=j.getStyle(this.element,"zIndex");if(!a||isNaN(a))a=0;a===0?this.cfg.setProperty("zIndex",1):this.stackMask()}},buildWrapper:function(){var a=this.element.parentNode,e=this.element,b=document.createElement("div");b.className=q.CSS_PANEL_CONTAINER;b.id=e.id+"_c";a&&a.insertBefore(b,e);b.appendChild(e);this.element=b;this.innerElement=
 
e;j.setStyle(this.innerElement,"visibility","inherit")},sizeUnderlay:function(){var a=this.underlay,e;if(a){e=this.element;a.style.width=e.offsetWidth+"px";a.style.height=e.offsetHeight+"px"}},registerDragDrop:function(){var a=this;if(this.header&&g.DD){var e=this.cfg.getProperty("dragonly")===true;this.dd=new g.DD(this.element.id,this.id,{dragOnly:e});if(!this.header.id)this.header.id=this.id+"_h";this.dd.startDrag=function(){var e,b,i,c,d,k;YAHOO.env.ua.ie==6&&j.addClass(a.element,"drag");if(a.cfg.getProperty("constraintoviewport")){var f=
 
l.VIEWPORT_OFFSET;e=a.element.offsetHeight;b=a.element.offsetWidth;i=j.getViewportWidth();c=j.getViewportHeight();d=j.getDocumentScrollLeft();k=j.getDocumentScrollTop();if(e+f<c){this.minY=k+f;this.maxY=k+c-e-f}else{this.minY=k+f;this.maxY=k+f}if(b+f<i){this.minX=d+f;this.maxX=d+i-b-f}else{this.minX=d+f;this.maxX=d+f}this.constrainY=this.constrainX=true}else this.constrainY=this.constrainX=false;a.dragEvent.fire("startDrag",arguments)};this.dd.onDrag=function(){a.syncPosition();a.cfg.refireEvent("iframe");
 
this.platform=="mac"&&YAHOO.env.ua.gecko&&this.showMacGeckoScrollbars();a.dragEvent.fire("onDrag",arguments)};this.dd.endDrag=function(){YAHOO.env.ua.ie==6&&j.removeClass(a.element,"drag");a.dragEvent.fire("endDrag",arguments);a.moveEvent.fire(a.cfg.getProperty("xy"))};this.dd.setHandleElId(this.header.id);this.dd.addInvalidHandleType("INPUT");this.dd.addInvalidHandleType("SELECT");this.dd.addInvalidHandleType("TEXTAREA")}},buildMask:function(){var a=this.mask;if(!a){if(!o){o=document.createElement("div");
 
o.className="mask";o.innerHTML="&#160;"}a=o.cloneNode(true);a.id=this.id+"_mask";document.body.insertBefore(a,document.body.firstChild);this.mask=a;YAHOO.env.ua.gecko&&this.platform=="mac"&&j.addClass(this.mask,"block-scrollbars");this.stackMask()}},hideMask:function(){if(this.cfg.getProperty("modal")&&this.mask&&this.beforeHideMaskEvent.fire()){this.mask.style.display="none";j.removeClass(document.body,"masked");this.hideMaskEvent.fire()}},showMask:function(){if(this.cfg.getProperty("modal")&&this.mask&&
 
this.beforeShowMaskEvent.fire()){j.addClass(document.body,"masked");this.sizeMask();this.mask.style.display="block";this.showMaskEvent.fire()}},sizeMask:function(){if(this.mask){var a=this.mask,e=j.getViewportWidth(),b=j.getViewportHeight();if(a.offsetHeight>b)a.style.height=b+"px";if(a.offsetWidth>e)a.style.width=e+"px";a.style.height=j.getDocumentHeight()+"px";a.style.width=j.getDocumentWidth()+"px"}},stackMask:function(){if(this.mask){var a=j.getStyle(this.element,"zIndex");!YAHOO.lang.isUndefined(a)&&
 
!isNaN(a)&&j.setStyle(this.mask,"zIndex",a-1)}},render:function(a){return q.superclass.render.call(this,a,this.innerElement)},_renderHeader:function(a){a=a||this.innerElement;q.superclass._renderHeader.call(this,a)},_renderBody:function(a){a=a||this.innerElement;q.superclass._renderBody.call(this,a)},_renderFooter:function(a){a=a||this.innerElement;q.superclass._renderFooter.call(this,a)},destroy:function(a){l.windowResizeEvent.unsubscribe(this.sizeMask,this);this.removeMask();this.close&&h.purgeElement(this.close);
 
q.superclass.destroy.call(this,a)},forceUnderlayRedraw:function(){var a=this.underlay;j.addClass(a,"yui-force-redraw");setTimeout(function(){j.removeClass(a,"yui-force-redraw")},0)},toString:function(){return"Panel "+this.id}})})();
 
(function(){function a(){var a=this._aButtons,e,b;if(g.isArray(a)){e=a.length;if(e>0){b=e-1;do{e=a[b];if(YAHOO.widget.Button&&e instanceof YAHOO.widget.Button)e.destroy();else if(e.tagName.toUpperCase()=="BUTTON"){c.purgeElement(e);c.purgeElement(e,false)}}while(b--)}}}YAHOO.widget.Dialog=function(a,e){YAHOO.widget.Dialog.superclass.constructor.call(this,a,e)};var c=YAHOO.util.Event,b=YAHOO.util.CustomEvent,d=YAHOO.util.Dom,f=YAHOO.widget.Dialog,g=YAHOO.lang,j=["visible"];f.CSS_DIALOG="yui-dialog";
 
YAHOO.extend(f,YAHOO.widget.Panel,{form:null,initDefaultConfig:function(){f.superclass.initDefaultConfig.call(this);this.callback={success:null,failure:null,argument:null};this.cfg.addProperty("postmethod",{handler:this.configPostMethod,value:"async",validator:function(a){return a!="form"&&a!="async"&&a!="none"&&a!="manual"?false:true}});this.cfg.addProperty("postdata",{value:null});this.cfg.addProperty("hideaftersubmit",{value:true});this.cfg.addProperty("buttons",{handler:this.configButtons,value:"none",
 
supercedes:j})},initEvents:function(){f.superclass.initEvents.call(this);var a=b.LIST;this.beforeSubmitEvent=this.createEvent("beforeSubmit");this.beforeSubmitEvent.signature=a;this.submitEvent=this.createEvent("submit");this.submitEvent.signature=a;this.manualSubmitEvent=this.createEvent("manualSubmit");this.manualSubmitEvent.signature=a;this.asyncSubmitEvent=this.createEvent("asyncSubmit");this.asyncSubmitEvent.signature=a;this.formSubmitEvent=this.createEvent("formSubmit");this.formSubmitEvent.signature=
 
a;this.cancelEvent=this.createEvent("cancel");this.cancelEvent.signature=a},init:function(a,e){f.superclass.init.call(this,a);this.beforeInitEvent.fire(f);d.addClass(this.element,f.CSS_DIALOG);this.cfg.setProperty("visible",false);e&&this.cfg.applyConfig(e,true);this.beforeHideEvent.subscribe(this.blurButtons,this,true);this.subscribe("changeBody",this.registerForm);this.initEvent.fire(f)},doSubmit:function(){var a=YAHOO.util.Connect,e=this.form,b=false,c=false,d,f;switch(this.cfg.getProperty("postmethod")){case "async":d=
 
e.elements;f=d.length;if(f>0){f=f-1;do if(d[f].type=="file"){b=true;break}while(f--)}b&&(YAHOO.env.ua.ie&&this.isSecure)&&(c=true);d=this._getFormAttributes(e);a.setForm(e,b,c);e=this.cfg.getProperty("postdata");this.asyncSubmitEvent.fire(a.asyncRequest(d.method,d.action,this.callback,e));break;case "form":e.submit();this.formSubmitEvent.fire();break;case "none":case "manual":this.manualSubmitEvent.fire()}},_getFormAttributes:function(a){var e={method:null,action:null};if(a)if(a.getAttributeNode){var b=
 
a.getAttributeNode("action"),a=a.getAttributeNode("method");if(b)e.action=b.value;if(a)e.method=a.value}else{e.action=a.getAttribute("action");e.method=a.getAttribute("method")}e.method=(g.isString(e.method)?e.method:"POST").toUpperCase();e.action=g.isString(e.action)?e.action:"";return e},registerForm:function(){var a=this.element.getElementsByTagName("form")[0];if(this.form){if(this.form==a&&d.isAncestor(this.element,this.form))return;c.purgeElement(this.form);this.form=null}if(!a){a=document.createElement("form");
 
a.name="frm_"+this.id;this.body.appendChild(a)}if(a){this.form=a;c.on(a,"submit",this._submitHandler,this,true)}},_submitHandler:function(a){c.stopEvent(a);this.submit();this.form.blur()},setTabLoop:function(a,e){a=a||this.firstButton;e=e||this.lastButton;f.superclass.setTabLoop.call(this,a,e)},_setTabLoop:function(a,e){a=a||this.firstButton;e=this.lastButton||e;this.setTabLoop(a,e)},setFirstLastFocusable:function(){f.superclass.setFirstLastFocusable.call(this);var a,e,b,c=this.focusableElements;
 
this.lastFormElement=this.firstFormElement=null;if(this.form&&c&&c.length>0){e=c.length;for(a=0;a<e;++a){b=c[a];if(this.form===b.form){this.firstFormElement=b;break}}for(a=e-1;a>=0;--a){b=c[a];if(this.form===b.form){this.lastFormElement=b;break}}}},configClose:function(a,e,b){f.superclass.configClose.apply(this,arguments)},_doClose:function(a){c.preventDefault(a);this.cancel()},configButtons:function(b,e){var i=YAHOO.widget.Button,k=e[0],f=this.innerElement,j,p,n,o,m,r;a.call(this);this._aButtons=
 
null;if(g.isArray(k)){m=document.createElement("span");m.className="button-group";o=k.length;this._aButtons=[];this.defaultHtmlButton=null;for(r=0;r<o;r++){j=k[r];if(i){n=new i({label:j.text,type:j.type});n.appendTo(m);p=n.get("element");if(j.isDefault){n.addClass("default");this.defaultHtmlButton=p}g.isFunction(j.handler)?n.set("onclick",{fn:j.handler,obj:this,scope:this}):g.isObject(j.handler)&&g.isFunction(j.handler.fn)&&n.set("onclick",{fn:j.handler.fn,obj:!g.isUndefined(j.handler.obj)?j.handler.obj:
 
this,scope:j.handler.scope||this});this._aButtons[this._aButtons.length]=n}else{p=document.createElement("button");p.setAttribute("type","button");if(j.isDefault){p.className="default";this.defaultHtmlButton=p}p.innerHTML=j.text;if(g.isFunction(j.handler))c.on(p,"click",j.handler,this,true);else if(g.isObject(j.handler)&&g.isFunction(j.handler.fn))c.on(p,"click",j.handler.fn,!g.isUndefined(j.handler.obj)?j.handler.obj:this,j.handler.scope||this);m.appendChild(p);this._aButtons[this._aButtons.length]=
 
p}j.htmlButton=p;if(r===0)this.firstButton=p;if(r==o-1)this.lastButton=p}this.setFooter(m);i=this.footer;d.inDocument(this.element)&&!d.isAncestor(f,i)&&f.appendChild(i);this.buttonSpan=m}else{m=this.buttonSpan;i=this.footer;if(m&&i){i.removeChild(m);this.defaultHtmlButton=this.lastButton=this.firstButton=this.buttonSpan=null}}this.changeContentEvent.fire()},getButtons:function(){return this._aButtons||null},focusFirst:function(a,e){var b=this.firstFormElement,d=false;if(e&&e[1]){c.stopEvent(e[1]);
 
if(e[0]===9&&this.firstElement)b=this.firstElement}if(b)try{b.focus();d=true}catch(f){}else d=this.defaultHtmlButton?this.focusDefaultButton():this.focusFirstButton();return d},focusLast:function(a,e){var b=this.cfg.getProperty("buttons"),d=this.lastFormElement,f=false;if(e&&e[1]){c.stopEvent(e[1]);if(e[0]===9&&this.lastElement)d=this.lastElement}if(b&&g.isArray(b))f=this.focusLastButton();else if(d)try{d.focus();f=true}catch(j){}return f},_getButton:function(a){var e=YAHOO.widget.Button;e&&(a&&a.nodeName&&
 
a.id)&&(a=e.getButton(a.id)||a);return a},focusDefaultButton:function(){var a=this._getButton(this.defaultHtmlButton),e=false;if(a)try{a.focus();e=true}catch(b){}return e},blurButtons:function(){var a=this.cfg.getProperty("buttons"),e,b;if(a&&g.isArray(a)){e=a.length;if(e>0){e=e-1;do if(b=a[e])if(b=this._getButton(b.htmlButton))try{b.blur()}catch(c){}while(e--)}}},focusFirstButton:function(){var a=this.cfg.getProperty("buttons"),e=false;if(a&&g.isArray(a))if(a=a[0])if(a=this._getButton(a.htmlButton))try{a.focus();
 
e=true}catch(b){}return e},focusLastButton:function(){var a=this.cfg.getProperty("buttons"),e,b=false;if(a&&g.isArray(a)){e=a.length;if(e>0)if(a=a[e-1])if(a=this._getButton(a.htmlButton))try{a.focus();b=true}catch(c){}}return b},configPostMethod:function(){this.registerForm()},validate:function(){return true},submit:function(){if(this.validate()&&this.beforeSubmitEvent.fire()){this.doSubmit();this.submitEvent.fire();this.cfg.getProperty("hideaftersubmit")&&this.hide();return true}return false},cancel:function(){this.cancelEvent.fire();
 
this.hide()},getData:function(){function a(e){var b=e.tagName.toUpperCase();return(b=="INPUT"||b=="TEXTAREA"||b=="SELECT")&&e.name==g}var e=this.form,b,c,f,g,j,n,o,m,r,s,t;if(e){b=e.elements;c=b.length;f={};for(t=0;t<c;t++){g=b[t].name;j=d.getElementsBy(a,"*",e);n=j.length;if(n>0)if(n==1){j=j[0];o=j.type;m=j.tagName.toUpperCase();switch(m){case "INPUT":if(o=="checkbox")f[g]=j.checked;else if(o!="radio")f[g]=j.value;break;case "TEXTAREA":f[g]=j.value;break;case "SELECT":j=j.options;n=j.length;m=[];
 
for(o=0;o<n;o++){r=j[o];if(r.selected){s=r.attributes.value;m[m.length]=s&&s.specified?r.value:r.text}}f[g]=m}}else{o=j[0].type;switch(o){case "radio":for(o=0;o<n;o++){m=j[o];if(m.checked){f[g]=m.value;break}}break;case "checkbox":m=[];for(o=0;o<n;o++){r=j[o];if(r.checked)m[m.length]=r.value}f[g]=m}}}}return f},destroy:function(b){a.call(this);this._aButtons=null;var e=this.element.getElementsByTagName("form");if(e.length>0)if(e=e[0]){c.purgeElement(e);e.parentNode&&e.parentNode.removeChild(e);this.form=
 
null}f.superclass.destroy.call(this,b)},toString:function(){return"Dialog "+this.id}})})();
 
(function(){YAHOO.widget.SimpleDialog=function(a,b){YAHOO.widget.SimpleDialog.superclass.constructor.call(this,a,b)};var a=YAHOO.util.Dom,c=YAHOO.widget.SimpleDialog,b=["icon"];c.ICON_BLOCK="blckicon";c.ICON_ALARM="alrticon";c.ICON_HELP="hlpicon";c.ICON_INFO="infoicon";c.ICON_WARN="warnicon";c.ICON_TIP="tipicon";c.ICON_CSS_CLASSNAME="yui-icon";c.CSS_SIMPLEDIALOG="yui-simple-dialog";YAHOO.extend(c,YAHOO.widget.Dialog,{initDefaultConfig:function(){c.superclass.initDefaultConfig.call(this);this.cfg.addProperty("icon",
 
{handler:this.configIcon,value:"none",suppressEvent:true});this.cfg.addProperty("text",{handler:this.configText,value:"",suppressEvent:true,supercedes:b})},init:function(b,f){c.superclass.init.call(this,b);this.beforeInitEvent.fire(c);a.addClass(this.element,c.CSS_SIMPLEDIALOG);this.cfg.queueProperty("postmethod","manual");f&&this.cfg.applyConfig(f,true);this.beforeRenderEvent.subscribe(function(){this.body||this.setBody("")},this,true);this.initEvent.fire(c)},registerForm:function(){c.superclass.registerForm.call(this);
 
var a=this.form.ownerDocument.createElement("input");a.type="hidden";a.name=this.id;a.value="";this.form.appendChild(a)},configIcon:function(b,f){var g=f[0],j=this.body,h=c.ICON_CSS_CLASSNAME,e,i;if(g&&g!="none"){e=a.getElementsByClassName(h,"*",j);if(e.length===1){e=e[0];(i=e.parentNode)&&i.removeChild(e)}if(g.indexOf(".")==-1){e=document.createElement("span");e.className=h+" "+g;e.innerHTML="&#160;"}else{e=document.createElement("img");e.src=this.imageRoot+g;e.className=h}e&&j.insertBefore(e,j.firstChild)}},
 
configText:function(a,b){var c=b[0];if(c){this.setBody(c);this.cfg.refireEvent("icon")}},toString:function(){return"SimpleDialog "+this.id}})})();
 
(function(){YAHOO.widget.ContainerEffect=function(a,b,c,j,h){if(!h)h=YAHOO.util.Anim;this.overlay=a;this.attrIn=b;this.attrOut=c;this.targetElement=j||a.element;this.animClass=h};var a=YAHOO.util.Dom,c=YAHOO.util.CustomEvent,b=YAHOO.widget.ContainerEffect;b.FADE=function(c,f){var g=YAHOO.util.Easing,g=new b(c,{attributes:{opacity:{from:0,to:1}},duration:f,method:g.easeIn},{attributes:{opacity:{to:0}},duration:f,method:g.easeOut},c.element);g.handleUnderlayStart=function(){var b=this.overlay.underlay;
 
b&&YAHOO.env.ua.ie&&b.filters&&b.filters.length>0&&a.addClass(c.element,"yui-effect-fade")};g.handleUnderlayComplete=function(){this.overlay.underlay&&YAHOO.env.ua.ie&&a.removeClass(c.element,"yui-effect-fade")};g.handleStartAnimateIn=function(b,c,e){e.overlay._fadingIn=true;a.addClass(e.overlay.element,"hide-select");e.overlay.underlay||e.overlay.cfg.refireEvent("underlay");e.handleUnderlayStart();e.overlay._setDomVisibility(true);a.setStyle(e.overlay.element,"opacity",0)};g.handleCompleteAnimateIn=
 
function(b,c,e){e.overlay._fadingIn=false;a.removeClass(e.overlay.element,"hide-select");if(e.overlay.element.style.filter)e.overlay.element.style.filter=null;e.handleUnderlayComplete();e.overlay.cfg.refireEvent("iframe");e.animateInCompleteEvent.fire()};g.handleStartAnimateOut=function(b,c,e){e.overlay._fadingOut=true;a.addClass(e.overlay.element,"hide-select");e.handleUnderlayStart()};g.handleCompleteAnimateOut=function(b,c,e){e.overlay._fadingOut=false;a.removeClass(e.overlay.element,"hide-select");
 
if(e.overlay.element.style.filter)e.overlay.element.style.filter=null;e.overlay._setDomVisibility(false);a.setStyle(e.overlay.element,"opacity",1);e.handleUnderlayComplete();e.overlay.cfg.refireEvent("iframe");e.animateOutCompleteEvent.fire()};g.init();return g};b.SLIDE=function(c,f){var g=YAHOO.util.Easing,j=c.cfg.getProperty("x")||a.getX(c.element),h=c.cfg.getProperty("y")||a.getY(c.element),e=a.getClientWidth(),i=c.element.offsetWidth,g=new b(c,{attributes:{points:{to:[j,h]}},duration:f,method:g.easeIn},
 
{attributes:{points:{to:[e+25,h]}},duration:f,method:g.easeOut},c.element,YAHOO.util.Motion);g.handleStartAnimateIn=function(a,e,b){b.overlay.element.style.left=-25-i+"px";b.overlay.element.style.top=h+"px"};g.handleTweenAnimateIn=function(e,b,i){b=a.getXY(i.overlay.element);e=b[0];b=b[1];a.getStyle(i.overlay.element,"visibility")=="hidden"&&e<j&&i.overlay._setDomVisibility(true);i.overlay.cfg.setProperty("xy",[e,b],true);i.overlay.cfg.refireEvent("iframe")};g.handleCompleteAnimateIn=function(a,e,
 
b){b.overlay.cfg.setProperty("xy",[j,h],true);b.startX=j;b.startY=h;b.overlay.cfg.refireEvent("iframe");b.animateInCompleteEvent.fire()};g.handleStartAnimateOut=function(e,b,i){e=a.getViewportWidth();b=a.getXY(i.overlay.element)[1];i.animOut.attributes.points.to=[e+25,b]};g.handleTweenAnimateOut=function(e,b,i){e=a.getXY(i.overlay.element);i.overlay.cfg.setProperty("xy",[e[0],e[1]],true);i.overlay.cfg.refireEvent("iframe")};g.handleCompleteAnimateOut=function(a,e,b){b.overlay._setDomVisibility(false);
 
b.overlay.cfg.setProperty("xy",[j,h]);b.animateOutCompleteEvent.fire()};g.init();return g};b.prototype={init:function(){this.beforeAnimateInEvent=this.createEvent("beforeAnimateIn");this.beforeAnimateInEvent.signature=c.LIST;this.beforeAnimateOutEvent=this.createEvent("beforeAnimateOut");this.beforeAnimateOutEvent.signature=c.LIST;this.animateInCompleteEvent=this.createEvent("animateInComplete");this.animateInCompleteEvent.signature=c.LIST;this.animateOutCompleteEvent=this.createEvent("animateOutComplete");
 
this.animateOutCompleteEvent.signature=c.LIST;this.animIn=new this.animClass(this.targetElement,this.attrIn.attributes,this.attrIn.duration,this.attrIn.method);this.animIn.onStart.subscribe(this.handleStartAnimateIn,this);this.animIn.onTween.subscribe(this.handleTweenAnimateIn,this);this.animIn.onComplete.subscribe(this.handleCompleteAnimateIn,this);this.animOut=new this.animClass(this.targetElement,this.attrOut.attributes,this.attrOut.duration,this.attrOut.method);this.animOut.onStart.subscribe(this.handleStartAnimateOut,
 
this);this.animOut.onTween.subscribe(this.handleTweenAnimateOut,this);this.animOut.onComplete.subscribe(this.handleCompleteAnimateOut,this)},animateIn:function(){this._stopAnims(this.lastFrameOnStop);this.beforeAnimateInEvent.fire();this.animIn.animate()},animateOut:function(){this._stopAnims(this.lastFrameOnStop);this.beforeAnimateOutEvent.fire();this.animOut.animate()},lastFrameOnStop:true,_stopAnims:function(a){this.animOut&&this.animOut.isAnimated()&&this.animOut.stop(a);this.animIn&&this.animIn.isAnimated()&&
 
this.animIn.stop(a)},handleStartAnimateIn:function(){},handleTweenAnimateIn:function(){},handleCompleteAnimateIn:function(){},handleStartAnimateOut:function(){},handleTweenAnimateOut:function(){},handleCompleteAnimateOut:function(){},toString:function(){var a="ContainerEffect";this.overlay&&(a=a+(" ["+this.overlay.toString()+"]"));return a}};YAHOO.lang.augmentProto(b,YAHOO.util.EventProvider)})();YAHOO.register("container",YAHOO.widget.Module,{version:"2.9.0",build:"2800"});
 
var Y=YAHOO,Y_DOM=YAHOO.util.Dom,EMPTY_ARRAY=[],Y_UA=Y.env.ua,Y_Lang=Y.lang,Y_DOC=document,Y_DOCUMENT_ELEMENT=Y_DOC.documentElement,Y_DOM_inDoc=Y_DOM.inDocument,Y_mix=Y_Lang.augmentObject,Y_guid=Y_DOM.generateId,Y_getDoc=function(a){var c=Y_DOC;a&&(c=a.nodeType===9?a:a.ownerDocument||a.document||Y_DOC);return c},Y_Array=function(a,c){var b,d,f=c||0;try{return Array.prototype.slice.call(a,f)}catch(g){d=[];for(b=a.length;f<b;f++)d.push(a[f]);return d}},Y_DOM_allById=function(a,c){var c=c||Y_DOC,b=[],
 
d=[],f,g;if(c.querySelectorAll)d=c.querySelectorAll('[id="'+a+'"]');else if(c.all){if(b=c.all(a)){if(b.nodeName)if(b.id===a){d.push(b);b=EMPTY_ARRAY}else b=[b];if(b.length)for(f=0;g=b[f++];)(g.id===a||g.attributes&&g.attributes.id&&g.attributes.id.value===a)&&d.push(g)}}else d=[Y_getDoc(c).getElementById(a)];return d},COMPARE_DOCUMENT_POSITION="compareDocumentPosition",OWNER_DOCUMENT="ownerDocument",Selector={_foundCache:[],useNative:!0,_compare:"sourceIndex"in Y_DOCUMENT_ELEMENT?function(a,c){var b=
 
a.sourceIndex,d=c.sourceIndex;return b===d?0:b>d?1:-1}:Y_DOCUMENT_ELEMENT[COMPARE_DOCUMENT_POSITION]?function(a,c){return a[COMPARE_DOCUMENT_POSITION](c)&4?-1:1}:function(a,c){var b,d;if(a&&c){b=a[OWNER_DOCUMENT].createRange();b.setStart(a,0);d=c[OWNER_DOCUMENT].createRange();d.setStart(c,0);b=b.compareBoundaryPoints(1,d)}return b},_sort:function(a){if(a){a=Y_Array(a,0,true);a.sort&&a.sort(Selector._compare)}return a},_deDupe:function(a){var c=[],b,d;for(b=0;d=a[b++];)if(!d._found){c[c.length]=d;
 
d._found=true}for(b=0;d=c[b++];){d._found=null;d.removeAttribute("_found")}return c},query:function(a,c,b,d){if(c&&typeof c=="string"){c=Y_DOM.get(c);if(!c)return b?null:[]}else c=c||Y_DOC;var f=[],g=Selector.useNative&&Y_DOC.querySelector&&!d,j=[[a,c]],h=g?Selector._nativeQuery:Selector._bruteQuery;if(a&&h){if(!d&&(!g||c.tagName))j=Selector._splitQueries(a,c);for(a=0;c=j[a++];){c=h(c[0],c[1],b);b||(c=Y_Array(c,0,true));c&&(f=f.concat(c))}j.length>1&&(f=Selector._sort(Selector._deDupe(f)))}return b?
 
f[0]||null:f},_splitQueries:function(a,c){var b=a.split(","),d=[],f="",g,j;if(c){if(c.tagName){c.id=c.id||Y_guid();f='[id="'+c.id+'"] '}g=0;for(j=b.length;g<j;++g){a=f+b[g];d.push([a,c])}}return d},_nativeQuery:function(a,c,b){if(Y_UA.webkit&&a.indexOf(":checked")>-1&&Selector.pseudos&&Selector.pseudos.checked)return Selector.query(a,c,b,true);try{return c["querySelector"+(b?"":"All")](a)}catch(d){return Selector.query(a,c,b,true)}},filter:function(a,c){var b=[],d,f;if(a&&c)for(d=0;f=a[d++];)Selector.test(f,
 
c)&&(b[b.length]=f);return b},test:function(a,c,b){var d=false,c=c.split(","),f=false,g,j,h,e,i;if(a&&a.tagName){if(!b&&!Y_DOM_inDoc(a)){b=a.parentNode;if(!b){h=a[OWNER_DOCUMENT].createDocumentFragment();h.appendChild(a);b=h;f=true}}b=b||a[OWNER_DOCUMENT];if(!a.id)a.id=Y_guid();for(e=0;g=c[e++];){g=g+('[id="'+a.id+'"]');j=Selector.query(g,b);for(i=0;g=j[i++];)if(g===a){d=true;break}if(d)break}f&&h.removeChild(a)}return d}};YAHOO.util.Selector=Selector;
 
var PARENT_NODE="parentNode",TAG_NAME="tagName",ATTRIBUTES="attributes",COMBINATOR="combinator",PSEUDOS="pseudos",SelectorCSS2={_reRegExpTokens:/([\^\$\?\[\]\*\+\-\.\(\)\|\\])/,SORT_RESULTS:!0,_children:function(a,c){var b=a.children,d,f,g;if(a.children&&c&&a.children.tags)a.children.tags(c);else if(!b&&a[TAG_NAME]||b&&c){f=b||a.childNodes;b=[];for(d=0;g=f[d++];)g.tagName&&(!c||c===g.tagName)&&b.push(g)}return b||[]},_re:{attr:/(\[[^\]]*\])/g,esc:/\\[:\[\]\(\)#\.\'\>+~"]/gi,pseudos:/(\([^\)]*\))/g},
 
shorthand:{"\\#(-?[_a-z]+[-\\w\\uE000]*)":"[id=$1]","\\.(-?[_a-z]+[-\\w\\uE000]*)":"[className~=$1]"},operators:{"":function(a,c){return!!a.getAttribute(c)},"~=":"(?:^|\\s+){val}(?:\\s+|$)","|=":"^{val}(?:-|$)"},pseudos:{"first-child":function(a){return Selector._children(a[PARENT_NODE])[0]===a}},_bruteQuery:function(a,c,b){var d=[],f=[],a=Selector._tokenize(a),g=a[a.length-1];Y_getDoc(c);var j,h;if(g){j=g.id;h=g.className;g=g.tagName||"*";if(c.getElementsByTagName)f=j&&(c.all||c.nodeType===9||Y_DOM_inDoc(c))?
 
Y_DOM_allById(j,c):h?c.getElementsByClassName(h):c.getElementsByTagName(g);else for(c=c.firstChild;c;){c.tagName&&f.push(c);c=c.nextSilbing||c.firstChild}f.length&&(d=Selector._filterNodes(f,a,b))}return d},_filterNodes:function(a,c,b){for(var d=0,f,g=c.length,j=g-1,h=[],e=a[0],i=e,k=Selector.getters,l,q,p,n,o,m,d=0;i=e=a[d++];){j=g-1;p=null;a:for(;i&&i.tagName;){q=c[j];o=q.tests;if(f=o.length)for(;m=o[--f];){l=m[1];if(k[m[0]])n=k[m[0]](i,m[0]);else{n=i[m[0]];n===void 0&&i.getAttribute&&(n=i.getAttribute(m[0]))}if(l===
 
"="&&n!==m[2]||typeof l!=="string"&&l.test&&!l.test(n)||!l.test&&typeof l==="function"&&!l(i,m[0],m[2])){if(i=i[p])for(;i&&(!i.tagName||q.tagName&&q.tagName!==i.tagName);)i=i[p];continue a}}j--;if(f=q.combinator){p=f.axis;for(i=i[p];i&&!i.tagName;)i=i[p];f.direct&&(p=null)}else{h.push(e);if(b)return h;break}}}return h},combinators:{" ":{axis:"parentNode"},">":{axis:"parentNode",direct:!0},"+":{axis:"previousSibling",direct:!0}},_parsers:[{name:ATTRIBUTES,re:/^\uE003(-?[a-z]+[\w\-]*)+([~\|\^\$\*!=]=?)?['"]?([^\uE004'"]*)['"]?\uE004/i,
 
fn:function(a,c){var b=a[2]||"",d=Selector.operators,f=a[3]?a[3].replace(/\\/g,""):"";if(a[1]==="id"&&b==="="||a[1]==="className"&&Y_DOCUMENT_ELEMENT.getElementsByClassName&&(b==="~="||b==="=")){c.prefilter=a[1];a[3]=f;c[a[1]]=a[1]==="id"?a[3]:f}if(b in d){b=d[b];if(typeof b==="string"){a[3]=f.replace(Selector._reRegExpTokens,"\\$1");b=RegExp(b.replace("{val}",a[3]))}a[2]=b}if(!c.last||c.prefilter!==a[1])return a.slice(1)}},{name:TAG_NAME,re:/^((?:-?[_a-z]+[\w-]*)|\*)/i,fn:function(a,c){var b=a[1].toUpperCase();
 
c.tagName=b;if(b!=="*"&&(!c.last||c.prefilter))return[TAG_NAME,"=",b];if(!c.prefilter)c.prefilter="tagName"}},{name:COMBINATOR,re:/^\s*([>+~]|\s)\s*/,fn:function(){}},{name:PSEUDOS,re:/^:([\-\w]+)(?:\uE005['"]?([^\uE005]*)['"]?\uE006)*/i,fn:function(a){var c=Selector[PSEUDOS][a[1]];if(c){a[2]&&(a[2]=a[2].replace(/\\/g,""));return[a[2],c]}return false}}],_getToken:function(){return{tagName:null,id:null,className:null,attributes:{},combinator:null,tests:[]}},_tokenize:function(a){var a=Selector._replaceShorthand(Y_Lang.trim(a||
 
"")),c=Selector._getToken(),b=[],d=false,f,g,j;a:do{d=false;for(g=0;j=Selector._parsers[g++];)if(f=j.re.exec(a)){if(j.name!==COMBINATOR)c.selector=a;a=a.replace(f[0],"");if(!a.length)c.last=true;Selector._attrFilters[f[1]]&&(f[1]=Selector._attrFilters[f[1]]);d=j.fn(f,c);if(d===false){d=false;break a}else d&&c.tests.push(d);if(!a.length||j.name===COMBINATOR){b.push(c);c=Selector._getToken(c);if(j.name===COMBINATOR)c.combinator=Selector.combinators[f[1]]}d=true}}while(d&&a.length);if(!d||a.length)b=
 
[];return b},_replaceShorthand:function(a){var c=Selector.shorthand,b=a.match(Selector._re.esc),d,f,g;b&&(a=a.replace(Selector._re.esc,"\ue000"));d=a.match(Selector._re.attr);f=a.match(Selector._re.pseudos);d&&(a=a.replace(Selector._re.attr,"\ue001"));f&&(a=a.replace(Selector._re.pseudos,"\ue002"));for(g in c)c.hasOwnProperty(g)&&(a=a.replace(RegExp(g,"gi"),c[g]));if(d){c=0;for(g=d.length;c<g;++c)a=a.replace(/\uE001/,d[c])}if(f){c=0;for(g=f.length;c<g;++c)a=a.replace(/\uE002/,f[c])}a=a.replace(/\[/g,
 
"\ue003");a=a.replace(/\]/g,"\ue004");a=a.replace(/\(/g,"\ue005");a=a.replace(/\)/g,"\ue006");if(b){c=0;for(g=b.length;c<g;++c)a=a.replace("\ue000",b[c])}return a},_attrFilters:{"class":"className","for":"htmlFor"},getters:{href:function(a,c){return Y_DOM.getAttribute(a,c)}}};Y_mix(Selector,SelectorCSS2,!0);Selector.getters.src=Selector.getters.rel=Selector.getters.href;Selector.useNative&&Y_DOC.querySelector&&(Selector.shorthand["\\.([^\\s\\\\(\\[:]*)"]="[class~=$1]");Selector._reNth=/^(?:([\-]?\d*)(n){1}|(odd|even)$)*([\-+]?\d*)$/;
 
Selector._getNth=function(a,c,b,d){Selector._reNth.test(c);var c=parseInt(RegExp.$1,10),f=RegExp.$2,g=RegExp.$3,j=parseInt(RegExp.$4,10)||0,b=Selector._children(a.parentNode,b);if(g){c=2;j=g==="odd"?1:0}else isNaN(c)&&(c=f?1:0);if(c===0){d&&(j=b.length-j+1);return b[j-1]===a?true:false}if(c<0){d=!!d;c=Math.abs(c)}if(d){d=b.length-j;for(f=b.length;d>=0;d=d-c)if(d<f&&b[d]===a)return true}else{d=j-1;for(f=b.length;d<f;d=d+c)if(d>=0&&b[d]===a)return true}return false};
 
Y_mix(Selector.pseudos,{root:function(a){return a===a.ownerDocument.documentElement},"nth-child":function(a,c){return Selector._getNth(a,c)},"nth-last-child":function(a,c){return Selector._getNth(a,c,null,true)},"nth-of-type":function(a,c){return Selector._getNth(a,c,a.tagName)},"nth-last-of-type":function(a,c){return Selector._getNth(a,c,a.tagName,true)},"last-child":function(a){var c=Selector._children(a.parentNode);return c[c.length-1]===a},"first-of-type":function(a){return Selector._children(a.parentNode,
 
a.tagName)[0]===a},"last-of-type":function(a){var c=Selector._children(a.parentNode,a.tagName);return c[c.length-1]===a},"only-child":function(a){var c=Selector._children(a.parentNode);return c.length===1&&c[0]===a},"only-of-type":function(a){var c=Selector._children(a.parentNode,a.tagName);return c.length===1&&c[0]===a},empty:function(a){return a.childNodes.length===0},not:function(a,c){return!Selector.test(a,c)},contains:function(a,c){return(a.innerText||a.textContent||"").indexOf(c)>-1},checked:function(a){return a.checked===
 
true||a.selected===true},enabled:function(a){return a.disabled!==void 0&&!a.disabled},disabled:function(a){return a.disabled}});Y_mix(Selector.operators,{"^=":"^{val}","!=":function(a,c,b){return a[c]!==b},"$=":"{val}$","*=":"{val}"});Selector.combinators["~"]={axis:"previousSibling"};YAHOO.register("selector",YAHOO.util.Selector,{version:"2.9.0",build:"2800"});
 
(function(){var a=YAHOO.util.Event,c=YAHOO.lang,b=[],d=function(a,b,c){return!a||a===c?false:YAHOO.util.Selector.test(a,b)?a:d(a.parentNode,b,c)};c.augmentObject(a,{_createDelegate:function(b,g,j,h){return function(e){var i=a.getTarget(e),k=g,l=this.nodeType===9,q;if(c.isFunction(g))q=g(i);else if(c.isString(g)){if(!l){(k=this.id)||(k=a.generateId(this));k="#"+k+" ";k=(k+g).replace(/,/gi,","+k)}YAHOO.util.Selector.test(i,k)?q=i:YAHOO.util.Selector.test(i,k.replace(/,/gi," *,")+" *")&&(q=d(i,k,this))}if(q){i=
 
q;h&&(i=h===true?j:h);return b.call(i,e,q,this,j)}}},delegate:function(d,g,j,h,e,i){var k=g,l;if(c.isString(h)&&!YAHOO.util.Selector)return false;if(g=="mouseenter"||g=="mouseleave"){if(!a._createMouseDelegate)return false;k=a._getType(g);l=a._createMouseDelegate(j,e,i);g=a._createDelegate(function(a,e,b){return l.call(e,a,b)},h,e,i)}else g=a._createDelegate(j,h,e,i);b.push([d,k,j,g]);return a.on(d,k,g)},removeDelegate:function(c,d,j){var h=d,e=false,i;if(d=="mouseenter"||d=="mouseleave")h=a._getType(d);
 
d=a._getCacheIndex(b,c,h,j);d>=0&&(i=b[d]);if(c&&i)if(e=a.removeListener(i[0],i[1],i[3])){delete b[d][2];delete b[d][3];b.splice(d,1)}return e}})})();YAHOO.register("event-delegate",YAHOO.util.Event,{version:"2.9.0",build:"2800"});
 
(function(){function a(a){s[a]||(s[a]="\\u"+("0000"+(+a.charCodeAt(0)).toString(16)).slice(-4));return s[a]}function c(a,e){var b=function(a,i){var c,d,k=a[i];if(k&&typeof k==="object")for(c in k)if(j.hasOwnProperty(k,c)){d=b(k,c);d===void 0?delete k[c]:k[c]=d}return e.call(a,i,k)};return typeof e==="function"?b({"":a},""):a}function b(a){return j.isString(a)&&!m.test(a.replace(p,"@").replace(n,"]").replace(o,""))}function d(e,i){e=e.replace(q,a);if(b(e))return c(eval("("+e+")"),i);throw new SyntaxError("JSON.parse");
 
}function f(a){var e=typeof a;return A[e]||A[k.call(a)]||(e===u?a?u:w:t)}function g(b,c,d){function l(b,k){var q=b[k],o=f(q),m=[],s=d?N:H,t,I,A,M;e(q)&&h(q.toJSON)?q=q.toJSON(k):o===B&&(q=p(q));h(g)&&(q=g.call(b,k,q));q!==b[k]&&(o=f(q));switch(o){case B:case u:break;case x:return G+q.replace(r,a)+G;case v:return isFinite(q)?q+D:w;case y:return q+D;case w:return w;default:return}for(t=n.length-1;t>=0;--t)if(n[t]===q)throw Error("JSON.stringify. Cyclical reference");o=i(q);n.push(q);if(o)for(t=q.length-
 
1;t>=0;--t)m[t]=l(q,t)||w;else{I=c||q;t=0;for(A in I)if(j.hasOwnProperty(I,A))(M=l(q,A))&&(m[t++]=G+A.replace(r,a)+G+s+M)}n.pop();if(d&&m.length){if(o){q=z+F;m=m.join(L).replace(/^/gm,d);m=q+m+F+J}else{q=E+F;m=m.join(L).replace(/^/gm,d);m=q+m+F+C}return m}return o?z+m.join(K)+J:E+m.join(K)+C}if(b!==void 0){var g=h(c)?c:null,q=k.call(d).match(/String|Number/)||[],p=YAHOO.lang.JSON.dateToString,n=[],o,m,s;if(g||!i(c))c=void 0;if(c){o={};m=0;for(s=c.length;m<s;++m)o[c[m]]=true;c=o}d=q[0]==="Number"?
 
Array(Math.min(Math.max(0,d),10)+1).join(" "):(d||D).slice(0,10);return l({"":b},"")}}var j=YAHOO.lang,h=j.isFunction,e=j.isObject,i=j.isArray,k=Object.prototype.toString,l=(YAHOO.env.ua.caja?window:this).JSON,q=/[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,p=/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,n=/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,o=/(?:^|:|,)(?:\s*\[)+/g,m=/[^\],:{}\s]/,r=/[\\\"\x00-\x1f\x7f-\x9f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,
 
s={"\u0008":"\\b","\t":"\\t","\n":"\\n","\u000c":"\\f","\r":"\\r",'"':'\\"',"\\":"\\\\"},t="undefined",u="object",w="null",x="string",v="number",y="boolean",B="date",A={undefined:t,string:x,"[object String]":x,number:v,"[object Number]":v,"boolean":y,"[object Boolean]":y,"[object Date]":B,"[object RegExp]":u},D="",E="{",C="}",z="[",J="]",K=",",L=",\n",F="\n",H=":",N=": ",G='"',l=k.call(l)==="[object JSON]"&&l;YAHOO.lang.JSON={useNativeParse:!!l,useNativeStringify:!!l,isSafe:function(e){return b(e.replace(q,
 
a))},parse:function(a,e){typeof a!=="string"&&(a=a+"");return l&&YAHOO.lang.JSON.useNativeParse?l.parse(a,e):d(a,e)},stringify:function(a,e,b){return l&&YAHOO.lang.JSON.useNativeStringify?l.stringify(a,e,b):g(a,e,b)},dateToString:function(a){function e(a){return a<10?"0"+a:a}return a.getUTCFullYear()+"-"+e(a.getUTCMonth()+1)+"-"+e(a.getUTCDate())+"T"+e(a.getUTCHours())+H+e(a.getUTCMinutes())+H+e(a.getUTCSeconds())+"Z"},stringToDate:function(a){var e=a.match(/^(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2})(?:\.(\d{3}))?Z$/);
 
if(e){a=new Date;a.setUTCFullYear(e[1],e[2]-1,e[3]);a.setUTCHours(e[4],e[5],e[6],e[7]||0)}return a}};YAHOO.lang.JSON.isValid=YAHOO.lang.JSON.isSafe})();YAHOO.register("json",YAHOO.lang.JSON,{version:"2.9.0",build:"2800"});
 
(function(){var a=YAHOO.util.Event,c=YAHOO.lang,b=a.addListener,d=a.removeListener,f=a.getListeners,g=[],j={mouseenter:"mouseover",mouseleave:"mouseout"},h=function(e,b,c){var c=a._getCacheIndex(g,e,b,c),f,h;c>=0&&(f=g[c]);if(e&&f)if(h=d.call(a,f[0],b,f[3])){delete g[c][2];delete g[c][3];g.splice(c,1)}return h};c.augmentObject(a._specialTypes,j);c.augmentObject(a,{_createMouseDelegate:function(e,b,c){return function(d,f){var g=a.getRelatedTarget(d),h;if(this!=g&&!YAHOO.util.Dom.isAncestor(this,g)){g=
 
this;c&&(g=c===true?b:c);h=[d,b];f&&h.splice(1,0,this,f);return e.apply(g,h)}}},addListener:function(e,i,c,d,f){var h;if(j[i]){h=a._createMouseDelegate(c,d,f);h.mouseDelegate=true;g.push([e,i,c,h]);h=b.call(a,e,i,h)}else h=b.apply(a,arguments);return h},removeListener:function(e,b,c){return j[b]?h.apply(a,arguments):d.apply(a,arguments)},getListeners:function(e,b){var c=[],d,g=b==="mouseover"||b==="mouseout",h,n,o;if(b&&(g||j[b])){if(d=f.call(a,e,this._getType(b)))for(n=d.length-1;n>-1;n--){o=d[n];
 
h=o.fn.mouseDelegate;(j[b]&&h||g&&!h)&&c.push(o)}}else c=f.apply(a,arguments);return c&&c.length?c:null}},true);a.on=a.addListener})();YAHOO.register("event-mouseenter",YAHOO.util.Event,{version:"2.9.0",build:"2800"});
 
(function(){var a=YAHOO.lang,c=YAHOO.util;c.DataSourceBase=function(b,f){if(!(b===null||b===void 0)){this.liveData=b;this._oQueue={interval:null,conn:null,requests:[]};this.responseSchema={};if(f&&f.constructor==Object)for(var g in f)g&&(this[g]=f[g]);a.isNumber(this.maxCacheEntries);this._aIntervals=[];this.createEvent("cacheRequestEvent");this.createEvent("cacheResponseEvent");this.createEvent("requestEvent");this.createEvent("responseEvent");this.createEvent("responseParseEvent");this.createEvent("responseCacheEvent");
 
this.createEvent("dataErrorEvent");this.createEvent("cacheFlushEvent");g=c.DataSourceBase;this._sName="DataSource instance"+g._nIndex;g._nIndex++}};var b=c.DataSourceBase;a.augmentObject(b,{TYPE_UNKNOWN:-1,TYPE_JSARRAY:0,TYPE_JSFUNCTION:1,TYPE_XHR:2,TYPE_JSON:3,TYPE_XML:4,TYPE_TEXT:5,TYPE_HTMLTABLE:6,TYPE_SCRIPTNODE:7,TYPE_LOCAL:8,ERROR_DATAINVALID:"Invalid data",ERROR_DATANULL:"Null data",_nIndex:0,_nTransactionId:0,_cloneObject:function(c){if(!a.isValue(c))return c;var f={};if(Object.prototype.toString.apply(c)===
 
"[object RegExp]")f=c;else if(a.isFunction(c))f=c;else if(a.isArray(c))for(var f=[],g=0,j=c.length;g<j;g++)f[g]=b._cloneObject(c[g]);else if(a.isObject(c))for(g in c)a.hasOwnProperty(c,g)&&(f[g]=a.isValue(c[g])&&a.isObject(c[g])||a.isArray(c[g])?b._cloneObject(c[g]):c[g]);else f=c;return f},_getLocationValue:function(b,c){var g=b.locator||b.key||b,j=c.ownerDocument||c,h,e,i=null;try{if(a.isUndefined(j.evaluate)){j.setProperty("SelectionLanguage","XPath");h=c.selectNodes(g)[0];i=h.value||h.text||null}else for(h=
 
j.evaluate(g,c,j.createNSResolver(!c.ownerDocument?c.documentElement:c.ownerDocument.documentElement),0,null);e=h.iterateNext();)i=e.textContent;return i}catch(k){}},issueCallback:function(b,c,g,j){if(a.isFunction(b))b.apply(j,c);else if(a.isObject(b)){var j=b.scope||j||window,h=b.success;if(g)h=b.failure;h&&h.apply(j,c.concat([b.argument]))}},parseString:function(b){if(!a.isValue(b))return null;b=b+"";return a.isString(b)?b:null},parseNumber:function(b){if(!a.isValue(b)||b==="")return null;b=b*1;
 
return a.isNumber(b)?b:null},convertNumber:function(a){return b.parseNumber(a)},parseDate:function(b){var c=null;if(a.isValue(b)&&!(b instanceof Date))c=new Date(b);else return b;return c instanceof Date?c:null},convertDate:function(a){return b.parseDate(a)}});b.Parser={string:b.parseString,number:b.parseNumber,date:b.parseDate};b.prototype={_sName:null,_aCache:null,_oQueue:null,_aIntervals:null,maxCacheEntries:0,liveData:null,dataType:b.TYPE_UNKNOWN,responseType:b.TYPE_UNKNOWN,responseSchema:null,
 
useXPath:false,cloneBeforeCaching:false,toString:function(){return this._sName},getCachedResponse:function(a,b,c){var j=this._aCache;if(this.maxCacheEntries>0)if(j){var h=j.length;if(h>0){var e=null;this.fireEvent("cacheRequestEvent",{request:a,callback:b,caller:c});for(var i=h-1;i>=0;i--){var k=j[i];if(this.isCacheHit(a,k.request)){e=k.response;this.fireEvent("cacheResponseEvent",{request:a,response:e,callback:b,caller:c});if(i<h-1){j.splice(i,1);this.addToCache(a,e)}e.cached=true;break}}return e}}else this._aCache=
 
[];else if(j)this._aCache=null;return null},isCacheHit:function(a,b){return a===b},addToCache:function(a,c){var g=this._aCache;if(g){for(;g.length>=this.maxCacheEntries;)g.shift();c=this.cloneBeforeCaching?b._cloneObject(c):c;g[g.length]={request:a,response:c};this.fireEvent("responseCacheEvent",{request:a,response:c})}},flushCache:function(){if(this._aCache){this._aCache=[];this.fireEvent("cacheFlushEvent")}},setInterval:function(b,c,g,j){if(a.isNumber(b)&&b>=0){var h=this,b=setInterval(function(){h.makeConnection(c,
 
g,j)},b);this._aIntervals.push(b);return b}},clearInterval:function(a){for(var b=this._aIntervals||[],c=b.length-1;c>-1;c--)if(b[c]===a){b.splice(c,1);clearInterval(a)}},clearAllIntervals:function(){for(var a=this._aIntervals||[],b=a.length-1;b>-1;b--)clearInterval(a[b])},sendRequest:function(a,c,g){var j=this.getCachedResponse(a,c,g);if(j){b.issueCallback(c,[a,j],false,g);return null}return this.makeConnection(a,c,g)},makeConnection:function(a,c,g){var j=b._nTransactionId++;this.fireEvent("requestEvent",
 
{tId:j,request:a,callback:c,caller:g});this.handleResponse(a,this.liveData,c,g,j);return j},handleResponse:function(c,f,g,j,h){this.fireEvent("responseEvent",{tId:h,request:c,response:f,callback:g,caller:j});var e=this.dataType==b.TYPE_XHR?true:false,i=null,k=f;if(this.responseType===b.TYPE_UNKNOWN)if(i=f&&f.getResponseHeader?f.getResponseHeader["Content-Type"]:null)if(i.indexOf("text/xml")>-1)this.responseType=b.TYPE_XML;else if(i.indexOf("application/json")>-1)this.responseType=b.TYPE_JSON;else{if(i.indexOf("text/plain")>
 
-1)this.responseType=b.TYPE_TEXT}else if(YAHOO.lang.isArray(f))this.responseType=b.TYPE_JSARRAY;else if(f&&f.nodeType&&(f.nodeType===9||f.nodeType===1||f.nodeType===11))this.responseType=b.TYPE_XML;else if(f&&f.nodeName&&f.nodeName.toLowerCase()=="table")this.responseType=b.TYPE_HTMLTABLE;else if(YAHOO.lang.isObject(f))this.responseType=b.TYPE_JSON;else if(YAHOO.lang.isString(f))this.responseType=b.TYPE_TEXT;switch(this.responseType){case b.TYPE_JSARRAY:if(e&&f&&f.responseText)k=f.responseText;try{if(a.isString(k)){var l=
 
[k].concat(this.parseJSONArgs);if(a.JSON)k=a.JSON.parse.apply(a.JSON,l);else if(window.JSON&&JSON.parse)k=JSON.parse.apply(JSON,l);else if(k.parseJSON)k=k.parseJSON.apply(k,l.slice(1));else{for(;k.length>0&&k.charAt(0)!="{"&&k.charAt(0)!="[";)k=k.substring(1,k.length);if(k.length>0)var q=Math.max(k.lastIndexOf("]"),k.lastIndexOf("}")),k=k.substring(0,q+1),k=eval("("+k+")")}}}catch(p){}k=this.doBeforeParseData(c,k,g);i=this.parseArrayData(c,k);break;case b.TYPE_JSON:if(e&&f&&f.responseText)k=f.responseText;
 
try{if(a.isString(k)){l=[k].concat(this.parseJSONArgs);if(a.JSON)k=a.JSON.parse.apply(a.JSON,l);else if(window.JSON&&JSON.parse)k=JSON.parse.apply(JSON,l);else if(k.parseJSON)k=k.parseJSON.apply(k,l.slice(1));else{for(;k.length>0&&k.charAt(0)!="{"&&k.charAt(0)!="[";)k=k.substring(1,k.length);if(k.length>0)var n=Math.max(k.lastIndexOf("]"),k.lastIndexOf("}")),k=k.substring(0,n+1),k=eval("("+k+")")}}}catch(o){}k=this.doBeforeParseData(c,k,g);i=this.parseJSONData(c,k);break;case b.TYPE_HTMLTABLE:if(e&&
 
f.responseText){e=document.createElement("div");e.innerHTML=f.responseText;k=e.getElementsByTagName("table")[0]}k=this.doBeforeParseData(c,k,g);i=this.parseHTMLTableData(c,k);break;case b.TYPE_XML:if(e&&f.responseXML)k=f.responseXML;k=this.doBeforeParseData(c,k,g);i=this.parseXMLData(c,k);break;case b.TYPE_TEXT:if(e&&a.isString(f.responseText))k=f.responseText;k=this.doBeforeParseData(c,k,g);i=this.parseTextData(c,k);break;default:k=this.doBeforeParseData(c,k,g);i=this.parseData(c,k)}i=i||{};if(!i.results)i.results=
 
[];if(!i.meta)i.meta={};if(i.error){i.error=true;this.fireEvent("dataErrorEvent",{request:c,response:f,callback:g,caller:j,message:b.ERROR_DATANULL})}else{i=this.doBeforeCallback(c,k,i,g);this.fireEvent("responseParseEvent",{request:c,response:i,callback:g,caller:j});this.addToCache(c,i)}i.tId=h;b.issueCallback(g,[c,i],i.error,j)},doBeforeParseData:function(a,b){return b},doBeforeCallback:function(a,b,c){return c},parseData:function(b,c){return a.isValue(c)?{results:c,meta:{}}:null},parseArrayData:function(c,
 
f){if(a.isArray(f)){var g=[],j,h,e,i,k;if(a.isArray(this.responseSchema.fields)){var l=this.responseSchema.fields;for(j=l.length-1;j>=0;--j)typeof l[j]!=="object"&&(l[j]={key:l[j]});var q={};for(j=l.length-1;j>=0;--j)(h=(typeof l[j].parser==="function"?l[j].parser:b.Parser[l[j].parser+""])||l[j].converter)&&(q[l[j].key]=h);var p=a.isArray(f[0]);for(j=f.length-1;j>-1;j--){var n={};e=f[j];if(typeof e==="object")for(h=l.length-1;h>-1;h--){i=l[h];k=p?e[h]:e[i.key];q[i.key]&&(k=q[i.key].call(this,k));
 
k===void 0&&(k=null);n[i.key]=k}else if(a.isString(e))for(h=l.length-1;h>-1;h--){i=l[h];k=e;q[i.key]&&(k=q[i.key].call(this,k));k===void 0&&(k=null);n[i.key]=k}g[j]=n}}else g=f;return{results:g}}return null},parseTextData:function(c,f){if(a.isString(f)&&a.isString(this.responseSchema.recordDelim)&&a.isString(this.responseSchema.fieldDelim)){var g={results:[]},j=this.responseSchema.recordDelim,h=this.responseSchema.fieldDelim;if(f.length>0){var e=f.length-j.length;f.substr(e)==j&&(f=f.substr(0,e));
 
if(f.length>0)for(var j=f.split(j),e=0,i=j.length,k=0;e<i;++e){var l=false,q=j[e];if(a.isString(q)&&q.length>0){var q=j[e].split(h),p={};if(a.isArray(this.responseSchema.fields))for(var n=this.responseSchema.fields,o=n.length-1;o>-1;o--)try{var m=q[o];if(a.isString(m)){m.charAt(0)=='"'&&(m=m.substr(1));m.charAt(m.length-1)=='"'&&(m=m.substr(0,m.length-1));var r=n[o],s=a.isValue(r.key)?r.key:r;if(!r.parser&&r.converter)r.parser=r.converter;var t=typeof r.parser==="function"?r.parser:b.Parser[r.parser+
 
""];t&&(m=t.call(this,m));m===void 0&&(m=null);p[s]=m}else l=true}catch(u){l=true}else p=q;l||(g.results[k++]=p)}}}return g}return null},parseXMLResult:function(c){var f={},g=this.responseSchema;try{for(var j=g.fields.length-1;j>=0;j--){var h=g.fields[j],e=a.isValue(h.key)?h.key:h,i=null;if(this.useXPath)i=YAHOO.util.DataSource._getLocationValue(h,c);else{var k=c.attributes.getNamedItem(e);if(k)i=k.value;else{var l=c.getElementsByTagName(e);if(l&&l.item(0)){var q=l.item(0),i=q?q.text?q.text:q.textContent?
 
q.textContent:null:null;if(!i){for(var p=[],n=0,o=q.childNodes.length;n<o;n++)if(q.childNodes[n].nodeValue)p[p.length]=q.childNodes[n].nodeValue;p.length>0&&(i=p.join(""))}}}}i===null&&(i="");if(!h.parser&&h.converter)h.parser=h.converter;var m=typeof h.parser==="function"?h.parser:b.Parser[h.parser+""];m&&(i=m.call(this,i));i===void 0&&(i=null);f[e]=i}}catch(r){}return f},parseXMLData:function(b,c){var g=false,j=this.responseSchema,h={meta:{}},e=null,i=j.metaNode,k=j.metaFields||{},l,q,p;try{if(this.useXPath)for(l in k)h.meta[l]=
 
YAHOO.util.DataSource._getLocationValue(k[l],c);else if(i=i?c.getElementsByTagName(i)[0]:c)for(l in k)if(a.hasOwnProperty(k,l)){q=k[l];if(p=i.getElementsByTagName(q)[0])p=p.firstChild.nodeValue;else if(p=i.attributes.getNamedItem(q))p=p.value;a.isValue(p)&&(h.meta[l]=p)}e=j.resultNode?c.getElementsByTagName(j.resultNode):null}catch(n){}if(!e||!a.isArray(j.fields))g=true;else{h.results=[];for(j=e.length-1;j>=0;--j){i=this.parseXMLResult(e.item(j));h.results[j]=i}}if(g)h.error=true;return h},parseJSONData:function(c,
 
f){var g={results:[],meta:{}};if(a.isObject(f)&&this.responseSchema.resultsList){var j=this.responseSchema,h=j.fields,e=f,i=[],k=j.metaFields||{},l=[],q=[],p=[],n=false,o,m,r,s=function(a){var e=null,b=[],i=0;if(a){a=a.replace(/\[(['"])(.*?)\1\]/g,function(a,e,c){b[i]=c;return".@"+i++}).replace(/\[(\d+)\]/g,function(a,e){b[i]=parseInt(e,10)|0;return".@"+i++}).replace(/^\./,"");if(!/[^\w\.\$@]/.test(a)){e=a.split(".");for(i=e.length-1;i>=0;--i)e[i].charAt(0)==="@"&&(e[i]=b[parseInt(e[i].substr(1),
 
10)])}}return e},t=function(a,e){for(var b=e,i=0,c=a.length;i<c&&b;++i)b=b[a[i]];return b};if(r=s(j.resultsList)){e=t(r,f);e===void 0&&(n=true)}else n=true;e||(e=[]);a.isArray(e)||(e=[e]);if(n)g.error=true;else{if(j.fields){j=0;for(n=h.length;j<n;j++){r=h[j];o=r.key||r;m=(typeof r.parser==="function"?r.parser:b.Parser[r.parser+""])||r.converter;r=s(o);m&&(l[l.length]={key:o,parser:m});r&&(r.length>1?q[q.length]={key:o,path:r}:p[p.length]={key:o,path:r[0]})}for(j=e.length-1;j>=0;--j){n=e[j];r={};if(n){for(h=
 
p.length-1;h>=0;--h)r[p[h].key]=n[p[h].path]!==void 0?n[p[h].path]:n[h];for(h=q.length-1;h>=0;--h)r[q[h].key]=t(q[h].path,n);for(h=l.length-1;h>=0;--h){n=l[h].key;r[n]=l[h].parser.call(this,r[n]);r[n]===void 0&&(r[n]=null)}}i[j]=r}}else i=e;for(o in k)if(a.hasOwnProperty(k,o))if(r=s(k[o])){e=t(r,f);g.meta[o]=e}}g.results=i}else g.error=true;return g},parseHTMLTableData:function(c,f){var g=false,j=this.responseSchema.fields,h={results:[]};if(a.isArray(j))for(var e=0;e<f.tBodies.length;e++)for(var i=
 
f.tBodies[e],k=i.rows.length-1;k>-1;k--){for(var l=i.rows[k],q={},p=j.length-1;p>-1;p--){var n=j[p],o=a.isValue(n.key)?n.key:n,m=l.cells[p].innerHTML;if(!n.parser&&n.converter)n.parser=n.converter;(n=typeof n.parser==="function"?n.parser:b.Parser[n.parser+""])&&(m=n.call(this,m));m===void 0&&(m=null);q[o]=m}h.results[k]=q}else g=true;if(g)h.error=true;return h}};a.augmentProto(b,c.EventProvider);c.LocalDataSource=function(a,f){this.dataType=b.TYPE_LOCAL;if(a)if(YAHOO.lang.isArray(a))this.responseType=
 
b.TYPE_JSARRAY;else if(a.nodeType&&a.nodeType==9)this.responseType=b.TYPE_XML;else if(a.nodeName&&a.nodeName.toLowerCase()=="table"){this.responseType=b.TYPE_HTMLTABLE;a=a.cloneNode(true)}else if(YAHOO.lang.isString(a))this.responseType=b.TYPE_TEXT;else{if(YAHOO.lang.isObject(a))this.responseType=b.TYPE_JSON}else{a=[];this.responseType=b.TYPE_JSARRAY}c.LocalDataSource.superclass.constructor.call(this,a,f)};a.extend(c.LocalDataSource,b);a.augmentObject(c.LocalDataSource,b);c.FunctionDataSource=function(a,
 
f){this.dataType=b.TYPE_JSFUNCTION;c.FunctionDataSource.superclass.constructor.call(this,a||function(){},f)};a.extend(c.FunctionDataSource,b,{scope:null,makeConnection:function(a,c,g){var j=b._nTransactionId++;this.fireEvent("requestEvent",{tId:j,request:a,callback:c,caller:g});var h=this.scope?this.liveData.call(this.scope,a,this,c):this.liveData(a,c);if(this.responseType===b.TYPE_UNKNOWN)if(YAHOO.lang.isArray(h))this.responseType=b.TYPE_JSARRAY;else if(h&&h.nodeType&&h.nodeType==9)this.responseType=
 
b.TYPE_XML;else if(h&&h.nodeName&&h.nodeName.toLowerCase()=="table")this.responseType=b.TYPE_HTMLTABLE;else if(YAHOO.lang.isObject(h))this.responseType=b.TYPE_JSON;else if(YAHOO.lang.isString(h))this.responseType=b.TYPE_TEXT;this.handleResponse(a,h,c,g,j);return j}});a.augmentObject(c.FunctionDataSource,b);c.ScriptNodeDataSource=function(a,f){this.dataType=b.TYPE_SCRIPTNODE;c.ScriptNodeDataSource.superclass.constructor.call(this,a||"",f)};a.extend(c.ScriptNodeDataSource,b,{getUtility:c.Get,asyncMode:"allowAll",
 
scriptCallbackParam:"callback",generateRequestCallback:function(a){return"&"+this.scriptCallbackParam+"=YAHOO.util.ScriptNodeDataSource.callbacks["+a+"]"},doBeforeGetScriptNode:function(a){return a},makeConnection:function(a,f,g){var j=b._nTransactionId++;this.fireEvent("requestEvent",{tId:j,request:a,callback:f,caller:g});if(c.ScriptNodeDataSource._nPending===0){c.ScriptNodeDataSource.callbacks=[];c.ScriptNodeDataSource._nId=0}var h=c.ScriptNodeDataSource._nId;c.ScriptNodeDataSource._nId++;var e=
 
this;c.ScriptNodeDataSource.callbacks[h]=function(i){if(e.asyncMode!=="ignoreStaleResponses"||h===c.ScriptNodeDataSource.callbacks.length-1){if(e.responseType===b.TYPE_UNKNOWN)if(YAHOO.lang.isArray(i))e.responseType=b.TYPE_JSARRAY;else if(i.nodeType&&i.nodeType==9)e.responseType=b.TYPE_XML;else if(i.nodeName&&i.nodeName.toLowerCase()=="table")e.responseType=b.TYPE_HTMLTABLE;else if(YAHOO.lang.isObject(i))e.responseType=b.TYPE_JSON;else if(YAHOO.lang.isString(i))e.responseType=b.TYPE_TEXT;e.handleResponse(a,
 
i,f,g,j)}delete c.ScriptNodeDataSource.callbacks[h]};c.ScriptNodeDataSource._nPending++;var i=this.liveData+a+this.generateRequestCallback(h),i=this.doBeforeGetScriptNode(i);this.getUtility.script(i,{autopurge:true,onsuccess:c.ScriptNodeDataSource._bumpPendingDown,onfail:c.ScriptNodeDataSource._bumpPendingDown});return j}});a.augmentObject(c.ScriptNodeDataSource,b);a.augmentObject(c.ScriptNodeDataSource,{_nId:0,_nPending:0,callbacks:[]});c.XHRDataSource=function(a,f){this.dataType=b.TYPE_XHR;this.connMgr=
 
this.connMgr||c.Connect;c.XHRDataSource.superclass.constructor.call(this,a||"",f)};a.extend(c.XHRDataSource,b,{connMgr:null,connXhrMode:"allowAll",connMethodPost:false,connTimeout:0,makeConnection:function(c,f,g){var j=b._nTransactionId++;this.fireEvent("requestEvent",{tId:j,request:c,callback:f,caller:g});var h=this.connMgr,e=this._oQueue,i={success:function(a){if(a&&this.connXhrMode=="ignoreStaleResponses"&&a.tId!=e.conn.tId)return null;if(a){if(this.responseType===b.TYPE_UNKNOWN){var i=a.getResponseHeader?
 
a.getResponseHeader["Content-Type"]:null;if(i)if(i.indexOf("text/xml")>-1)this.responseType=b.TYPE_XML;else if(i.indexOf("application/json")>-1)this.responseType=b.TYPE_JSON;else if(i.indexOf("text/plain")>-1)this.responseType=b.TYPE_TEXT}this.handleResponse(c,a,f,g,j)}else{this.fireEvent("dataErrorEvent",{request:c,response:null,callback:f,caller:g,message:b.ERROR_DATANULL});b.issueCallback(f,[c,{error:true}],true,g);return null}},failure:function(e){this.fireEvent("dataErrorEvent",{request:c,response:e,
 
callback:f,caller:g,message:b.ERROR_DATAINVALID});a.isString(this.liveData)&&a.isString(c)&&this.liveData.lastIndexOf("?")!==this.liveData.length-1&&c.indexOf("?");e=e||{};e.error=true;b.issueCallback(f,[c,e],true,g);return null},scope:this};if(a.isNumber(this.connTimeout))i.timeout=this.connTimeout;if(this.connXhrMode=="cancelStaleRequests"&&e.conn&&h.abort){h.abort(e.conn);e.conn=null}if(h&&h.asyncRequest){var k=this.liveData,l=this.connMethodPost,q=l?"POST":"GET",p=l||!a.isValue(c)?k:k+c,n=l?c:
 
null;if(this.connXhrMode!="queueRequests")e.conn=h.asyncRequest(q,p,i,n);else if(e.conn){var o=e.requests;o.push({request:c,callback:i});if(!e.interval)e.interval=setInterval(function(){if(!h.isCallInProgress(e.conn))if(o.length>0){p=l||!a.isValue(o[0].request)?k:k+o[0].request;n=l?o[0].request:null;e.conn=h.asyncRequest(q,p,o[0].callback,n);o.shift()}else{clearInterval(e.interval);e.interval=null}},50)}else e.conn=h.asyncRequest(q,p,i,n)}else b.issueCallback(f,[c,{error:true}],true,g);return j}});
 
a.augmentObject(c.XHRDataSource,b);c.DataSource=function(a,f){var f=f||{},g=f.dataType;if(g){if(g==b.TYPE_LOCAL)return new c.LocalDataSource(a,f);if(g==b.TYPE_XHR)return new c.XHRDataSource(a,f);if(g==b.TYPE_SCRIPTNODE)return new c.ScriptNodeDataSource(a,f);if(g==b.TYPE_JSFUNCTION)return new c.FunctionDataSource(a,f)}return YAHOO.lang.isString(a)?new c.XHRDataSource(a,f):YAHOO.lang.isFunction(a)?new c.FunctionDataSource(a,f):new c.LocalDataSource(a,f)};a.augmentObject(c.DataSource,b)})();
 
YAHOO.util.Number={format:function(a,c){if(a===""||a===null||!isFinite(a))return"";var a=+a,c=YAHOO.lang.merge(YAHOO.util.Number.format.defaults,c||{}),b=Math.abs(a),d=c.decimalPlaces||0,f=c.thousandsSeparator,g=c.negativeFormat||"-"+c.format,j;g.indexOf("#")>-1&&(g=g.replace(/#/,c.format));if(d<0){j=b-b%1+"";d=j.length+d;j=d>0?Number("."+j).toFixed(d).slice(2)+Array(j.length-d+1).join("0"):"0"}else if(d>0||(b+"").indexOf(".")>0){j=Math.pow(10,d);j=Math.round(b*j)/j+"";var h=j.indexOf(".");if(h<0){h=
 
(Math.pow(10,d)+"").substring(1);d>0&&(j=j+"."+h)}else{d=d-(j.length-h-1);h=(Math.pow(10,d)+"").substring(1);j=j+h}}else j=b.toFixed(d)+"";j=j.split(/\D/);if(b>=1E3){d=j[0].length%3||3;j[0]=j[0].slice(0,d)+j[0].slice(d).replace(/(\d{3})/g,f+"$1")}return YAHOO.util.Number.format._applyFormat(a<0?g:c.format,j.join(c.decimalSeparator),c)}};YAHOO.util.Number.format.defaults={format:"{prefix}{number}{suffix}",negativeFormat:null,decimalSeparator:".",decimalPlaces:null,thousandsSeparator:""};
 
YAHOO.util.Number.format._applyFormat=function(a,c,b){return a.replace(/\{(\w+)\}/g,function(a,f){return f==="number"?c:f in b?b[f]:""})};
 
(function(){var a=function(a,c,f){for(typeof f==="undefined"&&(f=10);parseInt(a,10)<f&&f>1;f=f/10)a=c.toString()+a;return a.toString()},c={formats:{a:function(a,c){return c.a[a.getDay()]},A:function(a,c){return c.A[a.getDay()]},b:function(a,c){return c.b[a.getMonth()]},B:function(a,c){return c.B[a.getMonth()]},C:function(b){return a(parseInt(b.getFullYear()/100,10),0)},d:["getDate","0"],e:["getDate"," "],g:function(b){return a(parseInt(c.formats.G(b)%100,10),0)},G:function(a){var d=a.getFullYear(),
 
f=parseInt(c.formats.V(a),10),a=parseInt(c.formats.W(a),10);a>f?d++:a===0&&f>=52&&d--;return d},H:["getHours","0"],I:function(b){b=b.getHours()%12;return a(b===0?12:b,0)},j:function(b){var c=new Date(""+b.getFullYear()+"/1/1 GMT"),b=new Date(""+b.getFullYear()+"/"+(b.getMonth()+1)+"/"+b.getDate()+" GMT")-c,b=parseInt(b/6E4/60/24,10)+1;return a(b,0,100)},k:["getHours"," "],l:function(b){b=b.getHours()%12;return a(b===0?12:b," ")},m:function(b){return a(b.getMonth()+1,0)},M:["getMinutes","0"],p:function(a,
 
c){return c.p[a.getHours()>=12?1:0]},P:function(a,c){return c.P[a.getHours()>=12?1:0]},s:function(a){return parseInt(a.getTime()/1E3,10)},S:["getSeconds","0"],u:function(a){a=a.getDay();return a===0?7:a},U:function(b){var d=parseInt(c.formats.j(b),10),b=6-b.getDay(),d=parseInt((d+b)/7,10);return a(d,0)},V:function(b){var d=parseInt(c.formats.W(b),10),f=(new Date(""+b.getFullYear()+"/1/1")).getDay(),d=d+(f>4||f<=1?0:1);d===53&&(new Date(""+b.getFullYear()+"/12/31")).getDay()<4?d=1:d===0&&(d=c.formats.V(new Date(""+
 
(b.getFullYear()-1)+"/12/31")));return a(d,0)},w:"getDay",W:function(b){var d=parseInt(c.formats.j(b),10),b=7-c.formats.u(b),d=parseInt((d+b)/7,10);return a(d,0,10)},y:function(b){return a(b.getFullYear()%100,0)},Y:"getFullYear",z:function(b){var b=b.getTimezoneOffset(),c=a(parseInt(Math.abs(b/60),10),0),f=a(Math.abs(b%60),0);return(b>0?"-":"+")+c+f},Z:function(a){var d=a.toString().replace(/^.*:\d\d( GMT[+-]\d+)? \(?([A-Za-z ]+)\)?\d*$/,"$2").replace(/[a-z ]/g,"");d.length>4&&(d=c.formats.z(a));
 
return d},"%":function(){return"%"}},aggregates:{c:"locale",D:"%m/%d/%y",F:"%Y-%m-%d",h:"%b",n:"\n",r:"locale",R:"%H:%M",t:"\t",T:"%H:%M:%S",x:"locale",X:"locale"},format:function(b,d,f){d=d||{};if(!(b instanceof Date))return YAHOO.lang.isValue(b)?b:"";d=d.format||"%m/%d/%Y";d==="YYYY/MM/DD"?d="%Y/%m/%d":d==="DD/MM/YYYY"?d="%d/%m/%Y":d==="MM/DD/YYYY"&&(d="%m/%d/%Y");f=f||"en";f in YAHOO.util.DateLocale||(f=f.replace(/-[a-zA-Z]+$/,"")in YAHOO.util.DateLocale?f.replace(/-[a-zA-Z]+$/,""):"en");for(var g=
 
YAHOO.util.DateLocale[f],f=function(a,e){var b=c.aggregates[e];return b==="locale"?g[e]:b},j=function(d,e){var i=c.formats[e];return typeof i==="string"?b[i]():typeof i==="function"?i.call(b,b,g):typeof i==="object"&&typeof i[0]==="string"?a(b[i[0]](),i[1]):e};d.match(/%[cDFhnrRtTxX]/);)d=d.replace(/%([cDFhnrRtTxX])/g,f);d=d.replace(/%([aAbBCdegGHIjklmMpPsSuUVwWyYzZ%])/g,j);f=j=void 0;return d}};YAHOO.namespace("YAHOO.util");YAHOO.util.Date=c;YAHOO.util.DateLocale={a:["Sun","Mon","Tue","Wed","Thu",
 
"Fri","Sat"],A:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],b:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],B:["January","February","March","April","May","June","July","August","September","October","November","December"],c:"%a %d %b %Y %T %Z",p:["AM","PM"],P:["am","pm"],r:"%I:%M:%S %p",x:"%d/%m/%y",X:"%T"};YAHOO.util.DateLocale.en=YAHOO.lang.merge(YAHOO.util.DateLocale,{});YAHOO.util.DateLocale["en-US"]=YAHOO.lang.merge(YAHOO.util.DateLocale.en,
 
{c:"%a %d %b %Y %I:%M:%S %p %Z",x:"%m/%d/%Y",X:"%I:%M:%S %p"});YAHOO.util.DateLocale["en-GB"]=YAHOO.lang.merge(YAHOO.util.DateLocale.en,{r:"%l:%M:%S %P %Z"});YAHOO.util.DateLocale["en-AU"]=YAHOO.lang.merge(YAHOO.util.DateLocale.en)})();YAHOO.register("datasource",YAHOO.util.DataSource,{version:"2.9.0",build:"2800"});YAHOO.util.Chain=function(){this.q=[].slice.call(arguments);this.createEvent("end")};
 
YAHOO.util.Chain.prototype={id:0,run:function(){var a=this.q[0],c;if(a){if(this.id)return this}else{this.fireEvent("end");return this}c=a.method||a;if(typeof c==="function"){var b=a.scope||{},d=a.argument||[],f=a.timeout||0,g=this;d instanceof Array||(d=[d]);if(f<0){this.id=f;if(a.until)for(;!a.until();)c.apply(b,d);else if(a.iterations)for(;a.iterations-- >0;)c.apply(b,d);else c.apply(b,d);this.q.shift();this.id=0;return this.run()}if(a.until){if(a.until()){this.q.shift();return this.run()}}else(!a.iterations||
 
!--a.iterations)&&this.q.shift();this.id=setTimeout(function(){c.apply(b,d);if(g.id){g.id=0;g.run()}},f)}return this},add:function(a){this.q.push(a);return this},pause:function(){this.id>0&&clearTimeout(this.id);this.id=0;return this},stop:function(){this.pause();this.q=[];return this}};YAHOO.lang.augmentProto(YAHOO.util.Chain,YAHOO.util.EventProvider);
 
(function(){var a=YAHOO.util.Event,c=YAHOO.lang,b=[],d=function(a,b,c){return!a||a===c?false:YAHOO.util.Selector.test(a,b)?a:d(a.parentNode,b,c)};c.augmentObject(a,{_createDelegate:function(b,g,j,h){return function(e){var i=a.getTarget(e),k=g,l=this.nodeType===9,q;if(c.isFunction(g))q=g(i);else if(c.isString(g)){if(!l){(k=this.id)||(k=a.generateId(this));k="#"+k+" ";k=(k+g).replace(/,/gi,","+k)}YAHOO.util.Selector.test(i,k)?q=i:YAHOO.util.Selector.test(i,k.replace(/,/gi," *,")+" *")&&(q=d(i,k,this))}if(q){i=
 
q;h&&(i=h===true?j:h);return b.call(i,e,q,this,j)}}},delegate:function(d,g,j,h,e,i){var k=g,l;if(c.isString(h)&&!YAHOO.util.Selector)return false;if(g=="mouseenter"||g=="mouseleave"){if(!a._createMouseDelegate)return false;k=a._getType(g);l=a._createMouseDelegate(j,e,i);g=a._createDelegate(function(a,e,b){return l.call(e,a,b)},h,e,i)}else g=a._createDelegate(j,h,e,i);b.push([d,k,j,g]);return a.on(d,k,g)},removeDelegate:function(c,d,j){var h=d,e=false,i;if(d=="mouseenter"||d=="mouseleave")h=a._getType(d);
 
d=a._getCacheIndex(b,c,h,j);d>=0&&(i=b[d]);if(c&&i)if(e=a.removeListener(i[0],i[1],i[3])){delete b[d][2];delete b[d][3];b.splice(d,1)}return e}})})();
 
(function(){var a=YAHOO.util.Event,c=YAHOO.lang,b=a.addListener,d=a.removeListener,f=a.getListeners,g=[],j={mouseenter:"mouseover",mouseleave:"mouseout"},h=function(e,b,c){var c=a._getCacheIndex(g,e,b,c),f,h;c>=0&&(f=g[c]);if(e&&f)if(h=d.call(a,f[0],b,f[3])){delete g[c][2];delete g[c][3];g.splice(c,1)}return h};c.augmentObject(a._specialTypes,j);c.augmentObject(a,{_createMouseDelegate:function(e,b,c){return function(d,f){var g=a.getRelatedTarget(d),h;if(this!=g&&!YAHOO.util.Dom.isAncestor(this,g)){g=
 
this;c&&(g=c===true?b:c);h=[d,b];f&&h.splice(1,0,this,f);return e.apply(g,h)}}},addListener:function(e,c,d,f,h){var p;if(j[c]){p=a._createMouseDelegate(d,f,h);p.mouseDelegate=true;g.push([e,c,d,p]);p=b.call(a,e,c,p)}else p=b.apply(a,arguments);return p},removeListener:function(e,b,c){return j[b]?h.apply(a,arguments):d.apply(a,arguments)},getListeners:function(e,b){var c=[],d,g=b==="mouseover"||b==="mouseout",h,n,o;if(b&&(g||j[b])){if(d=f.call(a,e,this._getType(b)))for(n=d.length-1;n>-1;n--){o=d[n];
 
h=o.fn.mouseDelegate;(j[b]&&h||g&&!h)&&c.push(o)}}else c=f.apply(a,arguments);return c&&c.length?c:null}},true);a.on=a.addListener})();YAHOO.register("event-mouseenter",YAHOO.util.Event,{version:"2.9.0",build:"2800"});Y=YAHOO;Y_DOM=YAHOO.util.Dom;EMPTY_ARRAY=[];Y_UA=Y.env.ua;Y_Lang=Y.lang;Y_DOC=document;Y_DOCUMENT_ELEMENT=Y_DOC.documentElement;Y_DOM_inDoc=Y_DOM.inDocument;Y_mix=Y_Lang.augmentObject;Y_guid=Y_DOM.generateId;
 
Y_getDoc=function(a){var c=Y_DOC;a&&(c=a.nodeType===9?a:a.ownerDocument||a.document||Y_DOC);return c};Y_Array=function(a,c){var b,d,f=c||0;try{return Array.prototype.slice.call(a,f)}catch(g){d=[];for(b=a.length;f<b;f++)d.push(a[f]);return d}};
 
Y_DOM_allById=function(a,c){var c=c||Y_DOC,b=[],d=[],f,g;if(c.querySelectorAll)d=c.querySelectorAll('[id="'+a+'"]');else if(c.all){if(b=c.all(a)){if(b.nodeName)if(b.id===a){d.push(b);b=EMPTY_ARRAY}else b=[b];if(b.length)for(f=0;g=b[f++];)(g.id===a||g.attributes&&g.attributes.id&&g.attributes.id.value===a)&&d.push(g)}}else d=[Y_getDoc(c).getElementById(a)];return d};COMPARE_DOCUMENT_POSITION="compareDocumentPosition";OWNER_DOCUMENT="ownerDocument";
 
Selector={_foundCache:[],useNative:!0,_compare:"sourceIndex"in Y_DOCUMENT_ELEMENT?function(a,c){var b=a.sourceIndex,d=c.sourceIndex;return b===d?0:b>d?1:-1}:Y_DOCUMENT_ELEMENT[COMPARE_DOCUMENT_POSITION]?function(a,c){return a[COMPARE_DOCUMENT_POSITION](c)&4?-1:1}:function(a,c){var b,d;if(a&&c){b=a[OWNER_DOCUMENT].createRange();b.setStart(a,0);d=c[OWNER_DOCUMENT].createRange();d.setStart(c,0);b=b.compareBoundaryPoints(1,d)}return b},_sort:function(a){if(a){a=Y_Array(a,0,true);a.sort&&a.sort(Selector._compare)}return a},
 
_deDupe:function(a){var c=[],b,d;for(b=0;d=a[b++];)if(!d._found){c[c.length]=d;d._found=true}for(b=0;d=c[b++];){d._found=null;d.removeAttribute("_found")}return c},query:function(a,c,b,d){if(typeof c=="string"){c=Y_DOM.get(c);if(!c)return b?null:[]}else c=c||Y_DOC;var f=[],g=Selector.useNative&&Y_DOC.querySelector&&!d,j=[[a,c]],h=g?Selector._nativeQuery:Selector._bruteQuery;if(a&&h){if(!d&&(!g||c.tagName))j=Selector._splitQueries(a,c);for(c=0;d=j[c++];){d=h(d[0],d[1],b);b||(d=Y_Array(d,0,true));d&&
 
(f=f.concat(d))}j.length>1&&(f=Selector._sort(Selector._deDupe(f)))}Y.log("query: "+a+" returning: "+f.length,"info","Selector");return b?f[0]||null:f},_splitQueries:function(a,c){var b=a.split(","),d=[],f="",g,j;if(c){if(c.tagName){c.id=c.id||Y_guid();f='[id="'+c.id+'"] '}g=0;for(j=b.length;g<j;++g){a=f+b[g];d.push([a,c])}}return d},_nativeQuery:function(a,c,b){if(Y_UA.webkit&&a.indexOf(":checked")>-1&&Selector.pseudos&&Selector.pseudos.checked)return Selector.query(a,c,b,true);try{return c["querySelector"+
 
(b?"":"All")](a)}catch(d){return Selector.query(a,c,b,true)}},filter:function(a,c){var b=[],d,f;if(a&&c)for(d=0;f=a[d++];)Selector.test(f,c)&&(b[b.length]=f);else Y.log("invalid filter input (nodes: "+a+", selector: "+c+")","warn","Selector");return b},test:function(a,c,b){var d=false,c=c.split(","),f=false,g,j,h,e,i;if(a&&a.tagName){if(!b&&!Y_DOM_inDoc(a)){b=a.parentNode;if(!b){h=a[OWNER_DOCUMENT].createDocumentFragment();h.appendChild(a);b=h;f=true}}b=b||a[OWNER_DOCUMENT];if(!a.id)a.id=Y_guid();
 
for(e=0;g=c[e++];){g=g+('[id="'+a.id+'"]');j=Selector.query(g,b);for(i=0;g=j[i++];)if(g===a){d=true;break}if(d)break}f&&h.removeChild(a)}return d}};YAHOO.util.Selector=Selector;PARENT_NODE="parentNode";TAG_NAME="tagName";ATTRIBUTES="attributes";COMBINATOR="combinator";PSEUDOS="pseudos";
 
SelectorCSS2={_reRegExpTokens:/([\^\$\?\[\]\*\+\-\.\(\)\|\\])/,SORT_RESULTS:!0,_children:function(a,c){var b=a.children,d,f,g;if(a.children&&c&&a.children.tags)a.children.tags(c);else if(!b&&a[TAG_NAME]||b&&c){f=b||a.childNodes;b=[];for(d=0;g=f[d++];)g.tagName&&(!c||c===g.tagName)&&b.push(g)}return b||[]},_re:{attr:/(\[[^\]]*\])/g,esc:/\\[:\[\]\(\)#\.\'\>+~"]/gi,pseudos:/(\([^\)]*\))/g},shorthand:{"\\#(-?[_a-z]+[-\\w\\uE000]*)":"[id=$1]","\\.(-?[_a-z]+[-\\w\\uE000]*)":"[className~=$1]"},operators:{"":function(a,
 
c){return!!a.getAttribute(c)},"~=":"(?:^|\\s+){val}(?:\\s+|$)","|=":"^{val}(?:-|$)"},pseudos:{"first-child":function(a){return Selector._children(a[PARENT_NODE])[0]===a}},_bruteQuery:function(a,c,b){var d=[],f=[],a=Selector._tokenize(a),g=a[a.length-1];Y_getDoc(c);var j,h;if(g){j=g.id;h=g.className;g=g.tagName||"*";if(c.getElementsByTagName)f=j&&(c.all||c.nodeType===9||Y_DOM_inDoc(c))?Y_DOM_allById(j,c):h?c.getElementsByClassName(h):c.getElementsByTagName(g);else for(c=c.firstChild;c;){c.tagName&&
 
f.push(c);c=c.nextSilbing||c.firstChild}f.length&&(d=Selector._filterNodes(f,a,b))}return d},_filterNodes:function(a,c,b){for(var d=0,f,g=c.length,j=g-1,h=[],e=a[0],i=e,k=Selector.getters,l,q,p,n,o,m,d=0;i=e=a[d++];){j=g-1;p=null;a:for(;i&&i.tagName;){q=c[j];o=q.tests;if(f=o.length)for(;m=o[--f];){l=m[1];if(k[m[0]])n=k[m[0]](i,m[0]);else{n=i[m[0]];n===void 0&&i.getAttribute&&(n=i.getAttribute(m[0]))}if(l==="="&&n!==m[2]||typeof l!=="string"&&l.test&&!l.test(n)||!l.test&&typeof l==="function"&&!l(i,
 
m[0],m[2])){if(i=i[p])for(;i&&(!i.tagName||q.tagName&&q.tagName!==i.tagName);)i=i[p];continue a}}j--;if(f=q.combinator){p=f.axis;for(i=i[p];i&&!i.tagName;)i=i[p];f.direct&&(p=null)}else{h.push(e);if(b)return h;break}}}return h},combinators:{" ":{axis:"parentNode"},">":{axis:"parentNode",direct:!0},"+":{axis:"previousSibling",direct:!0}},_parsers:[{name:ATTRIBUTES,re:/^\uE003(-?[a-z]+[\w\-]*)+([~\|\^\$\*!=]=?)?['"]?([^\uE004'"]*)['"]?\uE004/i,fn:function(a,c){var b=a[2]||"",d=Selector.operators,f=
 
a[3]?a[3].replace(/\\/g,""):"";if(a[1]==="id"&&b==="="||a[1]==="className"&&Y_DOCUMENT_ELEMENT.getElementsByClassName&&(b==="~="||b==="=")){c.prefilter=a[1];a[3]=f;c[a[1]]=a[1]==="id"?a[3]:f}if(b in d){b=d[b];if(typeof b==="string"){a[3]=f.replace(Selector._reRegExpTokens,"\\$1");b=RegExp(b.replace("{val}",a[3]))}a[2]=b}if(!c.last||c.prefilter!==a[1])return a.slice(1)}},{name:TAG_NAME,re:/^((?:-?[_a-z]+[\w-]*)|\*)/i,fn:function(a,c){var b=a[1].toUpperCase();c.tagName=b;if(b!=="*"&&(!c.last||c.prefilter))return[TAG_NAME,
 
"=",b];if(!c.prefilter)c.prefilter="tagName"}},{name:COMBINATOR,re:/^\s*([>+~]|\s)\s*/,fn:function(){}},{name:PSEUDOS,re:/^:([\-\w]+)(?:\uE005['"]?([^\uE005]*)['"]?\uE006)*/i,fn:function(a){var c=Selector[PSEUDOS][a[1]];if(c){a[2]&&(a[2]=a[2].replace(/\\/g,""));return[a[2],c]}return false}}],_getToken:function(){return{tagName:null,id:null,className:null,attributes:{},combinator:null,tests:[]}},_tokenize:function(a){var a=Selector._replaceShorthand(Y_Lang.trim(a||"")),c=Selector._getToken(),b=a,d=
 
[],f=false,g,j,h;a:do{f=false;for(j=0;h=Selector._parsers[j++];)if(g=h.re.exec(a)){if(h.name!==COMBINATOR)c.selector=a;a=a.replace(g[0],"");if(!a.length)c.last=true;Selector._attrFilters[g[1]]&&(g[1]=Selector._attrFilters[g[1]]);f=h.fn(g,c);if(f===false){f=false;break a}else f&&c.tests.push(f);if(!a.length||h.name===COMBINATOR){d.push(c);c=Selector._getToken(c);if(h.name===COMBINATOR)c.combinator=Selector.combinators[g[1]]}f=true}}while(f&&a.length);if(!f||a.length){Y.log("query: "+b+" contains unsupported token in: "+
 
a,"warn","Selector");d=[]}return d},_replaceShorthand:function(a){var c=Selector.shorthand,b=a.match(Selector._re.esc),d,f,g;b&&(a=a.replace(Selector._re.esc,"\ue000"));d=a.match(Selector._re.attr);f=a.match(Selector._re.pseudos);d&&(a=a.replace(Selector._re.attr,"\ue001"));f&&(a=a.replace(Selector._re.pseudos,"\ue002"));for(g in c)c.hasOwnProperty(g)&&(a=a.replace(RegExp(g,"gi"),c[g]));if(d){c=0;for(g=d.length;c<g;++c)a=a.replace(/\uE001/,d[c])}if(f){c=0;for(g=f.length;c<g;++c)a=a.replace(/\uE002/,
 
f[c])}a=a.replace(/\[/g,"\ue003");a=a.replace(/\]/g,"\ue004");a=a.replace(/\(/g,"\ue005");a=a.replace(/\)/g,"\ue006");if(b){c=0;for(g=b.length;c<g;++c)a=a.replace("\ue000",b[c])}return a},_attrFilters:{"class":"className","for":"htmlFor"},getters:{href:function(a,c){return Y_DOM.getAttribute(a,c)}}};Y_mix(Selector,SelectorCSS2,!0);Selector.getters.src=Selector.getters.rel=Selector.getters.href;Selector.useNative&&Y_DOC.querySelector&&(Selector.shorthand["\\.([^\\s\\\\(\\[:]*)"]="[class~=$1]");
 
Selector._reNth=/^(?:([\-]?\d*)(n){1}|(odd|even)$)*([\-+]?\d*)$/;
 
Selector._getNth=function(a,c,b,d){Selector._reNth.test(c);var c=parseInt(RegExp.$1,10),f=RegExp.$2,g=RegExp.$3,j=parseInt(RegExp.$4,10)||0,b=Selector._children(a.parentNode,b);if(g){c=2;j=g==="odd"?1:0}else isNaN(c)&&(c=f?1:0);if(c===0){d&&(j=b.length-j+1);return b[j-1]===a?true:false}if(c<0){d=!!d;c=Math.abs(c)}if(d){d=b.length-j;for(f=b.length;d>=0;d=d-c)if(d<f&&b[d]===a)return true}else{d=j-1;for(f=b.length;d<f;d=d+c)if(d>=0&&b[d]===a)return true}return false};
 
Y_mix(Selector.pseudos,{root:function(a){return a===a.ownerDocument.documentElement},"nth-child":function(a,c){return Selector._getNth(a,c)},"nth-last-child":function(a,c){return Selector._getNth(a,c,null,true)},"nth-of-type":function(a,c){return Selector._getNth(a,c,a.tagName)},"nth-last-of-type":function(a,c){return Selector._getNth(a,c,a.tagName,true)},"last-child":function(a){var c=Selector._children(a.parentNode);return c[c.length-1]===a},"first-of-type":function(a){return Selector._children(a.parentNode,
 
a.tagName)[0]===a},"last-of-type":function(a){var c=Selector._children(a.parentNode,a.tagName);return c[c.length-1]===a},"only-child":function(a){var c=Selector._children(a.parentNode);return c.length===1&&c[0]===a},"only-of-type":function(a){var c=Selector._children(a.parentNode,a.tagName);return c.length===1&&c[0]===a},empty:function(a){return a.childNodes.length===0},not:function(a,c){return!Selector.test(a,c)},contains:function(a,c){return(a.innerText||a.textContent||"").indexOf(c)>-1},checked:function(a){return a.checked===
 
true||a.selected===true},enabled:function(a){return a.disabled!==void 0&&!a.disabled},disabled:function(a){return a.disabled}});Y_mix(Selector.operators,{"^=":"^{val}","!=":function(a,c,b){return a[c]!==b},"$=":"{val}$","*=":"{val}"});Selector.combinators["~"]={axis:"previousSibling"};YAHOO.register("selector",YAHOO.util.Selector,{version:"2.9.0",build:"2800"});var Dom=YAHOO.util.Dom;
 
YAHOO.widget.ColumnSet=function(a){this._sId=Dom.generateId(null,"yui-cs");a=YAHOO.widget.DataTable._cloneObject(a);this._init(a);YAHOO.widget.ColumnSet._nCount++};YAHOO.widget.ColumnSet._nCount=0;
 
YAHOO.widget.ColumnSet.prototype={_sId:null,_aDefinitions:null,tree:null,flat:null,keys:null,headers:null,_init:function(a){var c=[],b=[],d=[],f=[],g=-1,j=function(a,i){g++;c[g]||(c[g]=[]);for(var k=0;k<a.length;k++){var f=a[k],h=new YAHOO.widget.Column(f);f.yuiColumnId=h._sId;b.push(h);if(i)h._oParent=i;if(YAHOO.lang.isArray(f.children)){h.children=f.children;var p=0,n=function(a){for(var a=a.children,e=0;e<a.length;e++)YAHOO.lang.isArray(a[e].children)?n(a[e]):p++};n(f);h._nColspan=p;for(var f=
 
f.children,o=0;o<f.length;o++){var m=f[o];if(h.className&&m.className===void 0)m.className=h.className;if(h.editor&&m.editor===void 0)m.editor=h.editor;if(h.editorOptions&&m.editorOptions===void 0)m.editorOptions=h.editorOptions;if(h.formatter&&m.formatter===void 0)m.formatter=h.formatter;if(h.resizeable&&m.resizeable===void 0)m.resizeable=h.resizeable;if(h.sortable&&m.sortable===void 0)m.sortable=h.sortable;if(h.hidden)m.hidden=true;if(h.width&&m.width===void 0)m.width=h.width;if(h.minWidth&&m.minWidth===
 
void 0)m.minWidth=h.minWidth;if(h.maxAutoWidth&&m.maxAutoWidth===void 0)m.maxAutoWidth=h.maxAutoWidth;if(h.type&&m.type===void 0)m.type=h.type;if(h.type&&!h.formatter)h.formatter=h.type;if(h.text&&!YAHOO.lang.isValue(h.label))h.label=h.text}c[g+1]||(c[g+1]=[]);j(f,h)}else{h._nKeyIndex=d.length;h._nColspan=1;d.push(h)}c[g].push(h)}g--};if(YAHOO.lang.isArray(a)){j(a);this._aDefinitions=a}else return null;(function(a){for(var b=1,c,d,f=function(a,e){for(var e=e||1,c=0;c<a.length;c++){var d=a[c];if(YAHOO.lang.isArray(d.children)){e++;
 
f(d.children,e);e--}else e>b&&(b=e)}},g=0;g<a.length;g++){c=a[g];f(c);for(var h=0;h<c.length;h++){d=c[h];d._nRowspan=YAHOO.lang.isArray(d.children)?1:b}b=1}})(c);for(a=0;a<c[0].length;a++)c[0][a]._nTreeIndex=a;for(var h=function(a,b){f[a].push(b.getSanitizedKey());b._oParent&&h(a,b._oParent)},a=0;a<d.length;a++){f[a]=[];h(a,d[a]);f[a]=f[a].reverse()}this.tree=c;this.flat=b;this.keys=d;this.headers=f},getId:function(){return this._sId},toString:function(){return"ColumnSet instance "+this._sId},getDefinitions:function(){var a=
 
this._aDefinitions,c=function(a,d){for(var f=0;f<a.length;f++){var g=a[f],j=d.getColumnById(g.yuiColumnId);if(j){var j=j.getDefinition(),h;for(h in j)YAHOO.lang.hasOwnProperty(j,h)&&(g[h]=j[h])}YAHOO.lang.isArray(g.children)&&c(g.children,d)}};c(a,this);return this._aDefinitions=a},getColumnById:function(a){if(YAHOO.lang.isString(a))for(var c=this.flat,b=c.length-1;b>-1;b--)if(c[b]._sId===a)return c[b];return null},getColumn:function(a){if(YAHOO.lang.isNumber(a)&&this.keys[a])return this.keys[a];
 
if(YAHOO.lang.isString(a)){for(var c=this.flat,b=[],d=0;d<c.length;d++)c[d].key===a&&b.push(c[d]);if(b.length===1)return b[0];if(b.length>1)return b}return null},getDescendants:function(a){var c=this,b=[],d,f=function(a){b.push(a);if(a.children)for(d=0;d<a.children.length;d++)f(c.getColumn(a.children[d].key))};f(a);return b}};
 
YAHOO.widget.Column=function(a){this._sId=Dom.generateId(null,"yui-col");if(a&&YAHOO.lang.isObject(a))for(var c in a)c&&(this[c]=a[c]);if(!YAHOO.lang.isValue(this.key))this.key=Dom.generateId(null,"yui-dt-col");if(!YAHOO.lang.isValue(this.field))this.field=this.key;YAHOO.widget.Column._nCount++;if(this.width&&!YAHOO.lang.isNumber(this.width))this.width=null;if(this.editor&&YAHOO.lang.isString(this.editor))this.editor=new YAHOO.widget.CellEditor(this.editor,this.editorOptions)};
 
YAHOO.lang.augmentObject(YAHOO.widget.Column,{_nCount:0,formatCheckbox:function(a,c,b,d){YAHOO.widget.DataTable.formatCheckbox(a,c,b,d)},formatCurrency:function(a,c,b,d){YAHOO.widget.DataTable.formatCurrency(a,c,b,d)},formatDate:function(a,c,b,d){YAHOO.widget.DataTable.formatDate(a,c,b,d)},formatEmail:function(a,c,b,d){YAHOO.widget.DataTable.formatEmail(a,c,b,d)},formatLink:function(a,c,b,d){YAHOO.widget.DataTable.formatLink(a,c,b,d)},formatNumber:function(a,c,b,d){YAHOO.widget.DataTable.formatNumber(a,
 
c,b,d)},formatSelect:function(a,c,b,d){YAHOO.widget.DataTable.formatDropdown(a,c,b,d)}});
 
YAHOO.widget.Column.prototype={_sId:null,_nKeyIndex:null,_nTreeIndex:null,_nColspan:1,_nRowspan:1,_oParent:null,_elTh:null,_elThLiner:null,_elThLabel:null,_elResizer:null,_nWidth:null,_dd:null,_ddResizer:null,key:null,field:null,label:null,abbr:null,children:null,width:null,minWidth:null,maxAutoWidth:null,hidden:!1,selected:!1,className:null,formatter:null,currencyOptions:null,dateOptions:null,dropdownOptions:null,editor:null,resizeable:!1,sortable:!1,sortOptions:null,getId:function(){return this._sId},
 
toString:function(){return"Column instance "+this._sId},getDefinition:function(){var a={};a.abbr=this.abbr;a.className=this.className;a.editor=this.editor;a.editorOptions=this.editorOptions;a.field=this.field;a.formatter=this.formatter;a.hidden=this.hidden;a.key=this.key;a.label=this.label;a.minWidth=this.minWidth;a.maxAutoWidth=this.maxAutoWidth;a.resizeable=this.resizeable;a.selected=this.selected;a.sortable=this.sortable;a.sortOptions=this.sortOptions;a.width=this.width;a._calculatedWidth=this._calculatedWidth;
 
return a},getKey:function(){return this.key},getField:function(){return this.field},getSanitizedKey:function(){return this.getKey().replace(/[^\w\-]/g,"")},getKeyIndex:function(){return this._nKeyIndex},getTreeIndex:function(){return this._nTreeIndex},getParent:function(){return this._oParent},getColspan:function(){return this._nColspan},getColSpan:function(){return this.getColspan()},getRowspan:function(){return this._nRowspan},getThEl:function(){return this._elTh},getThLinerEl:function(){return this._elThLiner},
 
getResizerEl:function(){return this._elResizer},getColEl:function(){return this.getThEl()},getIndex:function(){return this.getKeyIndex()},format:function(){}};YAHOO.util.Sort={compare:function(a,c,b){if(a===null||typeof a=="undefined")return c===null||typeof c=="undefined"?0:1;if(c===null||typeof c=="undefined")return-1;a.constructor==String&&(a=a.toLowerCase());c.constructor==String&&(c=c.toLowerCase());return a<c?b?1:-1:a>c?b?-1:1:0}};
 
YAHOO.widget.ColumnDD=function(a,c,b,d){if(a&&c&&b&&d){this.datatable=a;this.table=a.getTableEl();this.column=c;this.headCell=b;this.pointer=d;this.newIndex=null;this.init(b);this.initFrame();this.invalidHandleTypes={};this.setPadding(10,0,this.datatable.getTheadEl().offsetHeight+10,0);YAHOO.util.Event.on(window,"resize",function(){this.initConstraints()},this,true)}};
 
YAHOO.util.DDProxy&&YAHOO.extend(YAHOO.widget.ColumnDD,YAHOO.util.DDProxy,{initConstraints:function(){var a=YAHOO.util.Dom.getRegion(this.table),c=this.getEl(),b=YAHOO.util.Dom.getXY(c),d=parseInt(YAHOO.util.Dom.getStyle(c,"width"),10);parseInt(YAHOO.util.Dom.getStyle(c,"height"),10);this.setXConstraint(b[0]-a.left+15,a.right-b[0]-d+15);this.setYConstraint(10,10)},_resizeProxy:function(){YAHOO.widget.ColumnDD.superclass._resizeProxy.apply(this,arguments);var a=this.getDragEl(),c=this.getEl();YAHOO.util.Dom.setStyle(this.pointer,
 
"height",this.table.parentNode.offsetHeight+10+"px");YAHOO.util.Dom.setStyle(this.pointer,"display","block");c=YAHOO.util.Dom.getXY(c);YAHOO.util.Dom.setXY(this.pointer,[c[0],c[1]-5]);YAHOO.util.Dom.setStyle(a,"height",this.datatable.getContainerEl().offsetHeight+"px");YAHOO.util.Dom.setStyle(a,"width",parseInt(YAHOO.util.Dom.getStyle(a,"width"),10)+4+"px");YAHOO.util.Dom.setXY(this.dragEl,c)},onMouseDown:function(){this.initConstraints();this.resetConstraints()},clickValidator:function(a){if(!this.column.hidden){a=
 
YAHOO.util.Event.getTarget(a);return this.isValidHandleChild(a)&&(this.id==this.handleElId||this.DDM.handleWasClicked(a,this.id))}},onDragOver:function(a,c){var b=this.datatable.getColumn(c);if(b){for(var d=b.getTreeIndex();d===null&&b.getParent();){b=b.getParent();d=b.getTreeIndex()}if(d!==null){var f=b.getThEl(),b=d,g=YAHOO.util.Event.getPageX(a),j=YAHOO.util.Dom.getX(f),h=j+YAHOO.util.Dom.get(f).offsetWidth/2,e=this.column.getTreeIndex();if(g<h)YAHOO.util.Dom.setX(this.pointer,j);else{f=parseInt(f.offsetWidth,
 
10);YAHOO.util.Dom.setX(this.pointer,j+f);b++}d>e&&b--;if(b<0)b=0;else if(b>this.datatable.getColumnSet().tree[0].length)b=this.datatable.getColumnSet().tree[0].length;this.newIndex=b}}},onDragDrop:function(){this.datatable.reorderColumn(this.column,this.newIndex)},endDrag:function(){this.newIndex=null;YAHOO.util.Dom.setStyle(this.pointer,"display","none")}});
 
YAHOO.util.ColumnResizer=function(a,c,b,d,f){if(a&&c&&b&&d){this.datatable=a;this.column=c;this.headCell=b;this.headCellLiner=c.getThLinerEl();this.resizerLiner=b.firstChild;this.init(d,d,{dragOnly:true,dragElId:f.id});this.initFrame();this.resetResizerEl();this.setPadding(0,1,0,0)}};
 
YAHOO.util.DD&&YAHOO.extend(YAHOO.util.ColumnResizer,YAHOO.util.DDProxy,{resetResizerEl:function(){var a=YAHOO.util.Dom.get(this.handleElId).style;a.left="auto";a.right=0;a.top="auto";a.bottom=0;a.height=this.headCell.offsetHeight+"px"},onMouseUp:function(){for(var a=this.datatable.getColumnSet().keys,c,b=0,d=a.length;b<d;b++){c=a[b];c._ddResizer&&c._ddResizer.resetResizerEl()}this.resetResizerEl();a=this.headCellLiner;this.datatable.fireEvent("columnResizeEvent",{column:this.column,target:this.headCell,
 
width:a.offsetWidth-(parseInt(YAHOO.util.Dom.getStyle(a,"paddingLeft"),10)|0)-(parseInt(YAHOO.util.Dom.getStyle(a,"paddingRight"),10)|0)})},onMouseDown:function(a){this.startWidth=this.headCellLiner.offsetWidth;this.startX=YAHOO.util.Event.getXY(a)[0];this.nLinerPadding=(parseInt(YAHOO.util.Dom.getStyle(this.headCellLiner,"paddingLeft"),10)|0)+(parseInt(YAHOO.util.Dom.getStyle(this.headCellLiner,"paddingRight"),10)|0)},clickValidator:function(a){if(!this.column.hidden){a=YAHOO.util.Event.getTarget(a);
 
return this.isValidHandleChild(a)&&(this.id==this.handleElId||this.DDM.handleWasClicked(a,this.id))}},startDrag:function(){var a=this.datatable.getColumnSet().keys;this.column.getKeyIndex();for(var c,b=0,d=a.length;b<d;b++){c=a[b];if(c._ddResizer)YAHOO.util.Dom.get(c._ddResizer.handleElId).style.height="1em"}},onDrag:function(a){a=YAHOO.util.Event.getXY(a)[0];if(a>YAHOO.util.Dom.getX(this.headCellLiner)){a=this.startWidth+(a-this.startX)-this.nLinerPadding;a>0&&this.datatable.setColumnWidth(this.column,
 
a)}}});
 
(function(){var a=YAHOO.lang,c=YAHOO.util,b=YAHOO.widget,d=c.Dom;YAHOO.widget.RecordSet=function(a){this._init(a)};var f=b.RecordSet;f._nCount=0;f.prototype={_sId:null,_init:function(c){this._sId=d.generateId(null,"yui-rs");b.RecordSet._nCount++;this._records=[];this._initEvents();c&&(a.isArray(c)?this.addRecords(c):a.isObject(c)&&this.addRecord(c))},_initEvents:function(){this.createEvent("recordAddEvent");this.createEvent("recordsAddEvent");this.createEvent("recordSetEvent");this.createEvent("recordsSetEvent");this.createEvent("recordUpdateEvent");
 
this.createEvent("recordDeleteEvent");this.createEvent("recordsDeleteEvent");this.createEvent("resetEvent");this.createEvent("recordValueUpdateEvent")},_addRecord:function(a,b){var c=new YAHOO.widget.Record(a);YAHOO.lang.isNumber(b)&&b>-1?this._records.splice(b,0,c):this._records[this._records.length]=c;return c},_setRecord:function(c,d){if(!a.isNumber(d)||d<0)d=this._records.length;return this._records[d]=new b.Record(c)},_deleteRecord:function(b,c){if(!a.isNumber(c)||c<0)c=1;this._records.splice(b,
 
c)},getId:function(){return this._sId},toString:function(){return"RecordSet instance "+this._sId},getLength:function(){return this._records.length},getRecord:function(c){var d;if(c instanceof b.Record)for(d=0;d<this._records.length;d++){if(this._records[d]&&this._records[d]._sId===c._sId)return c}else if(a.isNumber(c)){if(c>-1&&c<this.getLength())return this._records[c]}else if(a.isString(c))for(d=0;d<this._records.length;d++)if(this._records[d]&&this._records[d]._sId===c)return this._records[d];
 
return null},getRecords:function(b,c){return!a.isNumber(b)?this._records:!a.isNumber(c)?this._records.slice(b):this._records.slice(b,b+c)},hasRecords:function(a,b){for(var c=this.getRecords(a,b),e=0;e<b;++e)if(typeof c[e]==="undefined")return false;return true},getRecordIndex:function(a){if(a)for(var b=this._records.length-1;b>-1;b--)if(this._records[b]&&a.getId()===this._records[b].getId())return b;return null},addRecord:function(b,c){if(a.isObject(b)){var d=this._addRecord(b,c);this.fireEvent("recordAddEvent",
 
{record:d,data:b});return d}return null},addRecords:function(b,c){if(a.isArray(b)){var d=[],e,i,k;e=c=a.isNumber(c)?c:this._records.length;i=0;for(k=b.length;i<k;++i)if(a.isObject(b[i])){var f=this._addRecord(b[i],e++);d.push(f)}this.fireEvent("recordsAddEvent",{records:d,data:b});return d}if(a.isObject(b)){d=this._addRecord(b);this.fireEvent("recordsAddEvent",{records:[d],data:b});return d}return null},setRecord:function(b,c){if(a.isObject(b)){var d=this._setRecord(b,c);this.fireEvent("recordSetEvent",
 
{record:d,data:b});return d}return null},setRecords:function(c,d){for(var f=b.Record,e=a.isArray(c)?c:[c],i=[],k=0,l=e.length,q=0,d=parseInt(d,10)|0;k<l;++k)typeof e[k]==="object"&&e[k]&&(i[q++]=this._records[d+k]=new f(e[k]));this.fireEvent("recordsSetEvent",{records:i,data:c});this.fireEvent("recordsSet",{records:i,data:c});return i},updateRecord:function(b,c){var d=this.getRecord(b);if(d&&a.isObject(c)){var e={},i;for(i in d._oData)a.hasOwnProperty(d._oData,i)&&(e[i]=d._oData[i]);d._oData=c;this.fireEvent("recordUpdateEvent",
 
{record:d,newData:c,oldData:e});return d}return null},updateKey:function(a,b,c){this.updateRecordValue(a,b,c)},updateRecordValue:function(b,c,d){if(b=this.getRecord(b)){var e=null,i=b._oData[c];if(i&&a.isObject(i)){var e={},k;for(k in i)a.hasOwnProperty(i,k)&&(e[k]=i[k])}else e=i;b._oData[c]=d;this.fireEvent("keyUpdateEvent",{record:b,key:c,newData:d,oldData:e});this.fireEvent("recordValueUpdateEvent",{record:b,key:c,newData:d,oldData:e})}},replaceRecords:function(a){this.reset();return this.addRecords(a)},
 
sortRecords:function(a,b,c){return this._records.sort(function(e,i){return a(e,i,b,c)})},reverseRecords:function(){return this._records.reverse()},deleteRecord:function(b){if(a.isNumber(b)&&b>-1&&b<this.getLength()){var c=this.getRecord(b).getData();this._deleteRecord(b);this.fireEvent("recordDeleteEvent",{data:c,index:b});return c}return null},deleteRecords:function(b,c){a.isNumber(c)||(c=1);if(a.isNumber(b)&&b>-1&&b<this.getLength()){for(var d=this.getRecords(b,c),e=[],i=[],k=0;k<d.length;k++){e[e.length]=
 
d[k];i[i.length]=d[k].getData()}this._deleteRecord(b,c);this.fireEvent("recordsDeleteEvent",{data:e,deletedData:i,index:b});return e}return null},reset:function(){this._records=[];this.fireEvent("resetEvent")}};a.augmentProto(f,c.EventProvider);YAHOO.widget.Record=function(c){this._nCount=b.Record._nCount;this._sId=d.generateId(null,"yui-rec");b.Record._nCount++;this._oData={};if(a.isObject(c))for(var f in c)a.hasOwnProperty(c,f)&&(this._oData[f]=c[f])};YAHOO.widget.Record._nCount=0;YAHOO.widget.Record.prototype=
 
{_nCount:null,_sId:null,_oData:null,getCount:function(){return this._nCount},getId:function(){return this._sId},getData:function(b){return a.isString(b)?this._oData[b]:this._oData},setData:function(a,b){this._oData[a]=b}}})();
 
(function(){var a=YAHOO.lang,c=YAHOO.util,b=YAHOO.widget,d=YAHOO.env.ua,f=c.Dom,g=c.Event,j=c.DataSourceBase;YAHOO.widget.DataTable=function(a,c,d,l){var h=b.DataTable;if(l&&l.scrollable)return new YAHOO.widget.ScrollingDataTable(a,c,d,l);this._nIndex=h._nCount;this._sId=f.generateId(null,"yui-dt");this._oChainRender=new YAHOO.util.Chain;this._oChainRender.subscribe("end",this._onRenderChainEnd,this,true);this._initConfigs(l);this._initDataSource(d);if(this._oDataSource){this._initColumnSet(c);if(this._oColumnSet){this._initRecordSet();
 
h.superclass.constructor.call(this,a,this.configs);if(this._initDomElements(a)){this.showTableMessage(this.get("MSG_LOADING"),h.CLASS_LOADING);this._initEvents();h._nCount++;h._nCurrentCount++;a={success:this.onDataReturnSetRows,failure:this.onDataReturnSetRows,scope:this,argument:this.getState()};c=this.get("initialLoad");if(c===true)this._oDataSource.sendRequest(this.get("initialRequest"),a);else if(c===false)this.showTableMessage(this.get("MSG_EMPTY"),h.CLASS_EMPTY);else{h=c||{};a.argument=h.argument||
 
{};this._oDataSource.sendRequest(h.request,a)}}}}};var h=b.DataTable;a.augmentObject(h,{CLASS_DATATABLE:"yui-dt",CLASS_LINER:"yui-dt-liner",CLASS_LABEL:"yui-dt-label",CLASS_MESSAGE:"yui-dt-message",CLASS_MASK:"yui-dt-mask",CLASS_DATA:"yui-dt-data",CLASS_COLTARGET:"yui-dt-coltarget",CLASS_RESIZER:"yui-dt-resizer",CLASS_RESIZERLINER:"yui-dt-resizerliner",CLASS_RESIZERPROXY:"yui-dt-resizerproxy",CLASS_EDITOR:"yui-dt-editor",CLASS_EDITOR_SHIM:"yui-dt-editor-shim",CLASS_PAGINATOR:"yui-dt-paginator",CLASS_PAGE:"yui-dt-page",
 
CLASS_DEFAULT:"yui-dt-default",CLASS_PREVIOUS:"yui-dt-previous",CLASS_NEXT:"yui-dt-next",CLASS_FIRST:"yui-dt-first",CLASS_LAST:"yui-dt-last",CLASS_REC:"yui-dt-rec",CLASS_EVEN:"yui-dt-even",CLASS_ODD:"yui-dt-odd",CLASS_SELECTED:"yui-dt-selected",CLASS_HIGHLIGHTED:"yui-dt-highlighted",CLASS_HIDDEN:"yui-dt-hidden",CLASS_DISABLED:"yui-dt-disabled",CLASS_EMPTY:"yui-dt-empty",CLASS_LOADING:"yui-dt-loading",CLASS_ERROR:"yui-dt-error",CLASS_EDITABLE:"yui-dt-editable",CLASS_DRAGGABLE:"yui-dt-draggable",CLASS_RESIZEABLE:"yui-dt-resizeable",
 
CLASS_SCROLLABLE:"yui-dt-scrollable",CLASS_SORTABLE:"yui-dt-sortable",CLASS_ASC:"yui-dt-asc",CLASS_DESC:"yui-dt-desc",CLASS_BUTTON:"yui-dt-button",CLASS_CHECKBOX:"yui-dt-checkbox",CLASS_DROPDOWN:"yui-dt-dropdown",CLASS_RADIO:"yui-dt-radio",_nCount:0,_nCurrentCount:0,_elDynStyleNode:null,_bDynStylesFallback:d.ie?true:false,_oDynStyles:{},_cloneObject:function(e){if(!a.isValue(e))return e;var b={};if(e instanceof YAHOO.widget.BaseCellEditor)b=e;else if(Object.prototype.toString.apply(e)==="[object RegExp]")b=
 
e;else if(a.isFunction(e))b=e;else if(a.isArray(e))for(var b=[],c=0,d=e.length;c<d;c++)b[c]=h._cloneObject(e[c]);else if(a.isObject(e))for(c in e)a.hasOwnProperty(e,c)&&(b[c]=a.isValue(e[c])&&a.isObject(e[c])||a.isArray(e[c])?h._cloneObject(e[c]):e[c]);else b=e;return b},formatButton:function(e,b,c,d){b=a.isValue(d)?d:"Click";e.innerHTML='<button type="button" class="'+h.CLASS_BUTTON+'">'+b+"</button>"},formatCheckbox:function(a,b,c,d){a.innerHTML='<input type="checkbox"'+(d?' checked="checked"':
 
"")+' class="'+h.CLASS_CHECKBOX+'" />'},formatCurrency:function(a,b,d,f,h){a.innerHTML=c.Number.format(f,d.currencyOptions||(h||this).get("currencyOptions"))},formatDate:function(a,b,d,f,h){b=d.dateOptions||(h||this).get("dateOptions");a.innerHTML=c.Date.format(f,b,b.locale)},formatDropdown:function(e,b,c,d,f){var j=f||this,b=a.isValue(d)?d:b.getData(c.field),c=a.isArray(c.dropdownOptions)?c.dropdownOptions:null,n=e.getElementsByTagName("select");if(n.length===0){f=document.createElement("select");
 
f.className=h.CLASS_DROPDOWN;f=e.appendChild(f);g.addListener(f,"change",j._onDropdownChange,j)}if(f=n[0]){f.innerHTML="";if(c)for(e=0;e<c.length;e++){d=c[e];j=document.createElement("option");j.value=a.isValue(d.value)?d.value:d;j.innerHTML=a.isValue(d.text)?d.text:a.isValue(d.label)?d.label:d;j=f.appendChild(j);if(j.value==b)j.selected=true}else f.innerHTML='<option selected value="'+b+'">'+b+"</option>"}else e.innerHTML=a.isValue(d)?d:""},formatEmail:function(e,b,c,d){if(a.isString(d)){d=a.escapeHTML(d);
 
e.innerHTML='<a href="mailto:'+d+'">'+d+"</a>"}else e.innerHTML=a.isValue(d)?a.escapeHTML(d.toString()):""},formatLink:function(e,b,c,d){if(a.isString(d)){d=a.escapeHTML(d);e.innerHTML='<a href="'+d+'">'+d+"</a>"}else e.innerHTML=a.isValue(d)?a.escapeHTML(d.toString()):""},formatNumber:function(a,b,d,f,h){a.innerHTML=c.Number.format(f,d.numberOptions||(h||this).get("numberOptions"))},formatRadio:function(a,b,c,d,f){a.innerHTML='<input type="radio"'+(d?' checked="checked"':"")+' name="'+(f||this).getId()+
 
"-col-"+c.getSanitizedKey()+'" class="'+h.CLASS_RADIO+'" />'},formatText:function(e,b,c,d){b=a.isValue(d)?d:"";e.innerHTML=a.escapeHTML(b.toString())},formatTextarea:function(e,b,c,d){b="<textarea>"+(a.isValue(d)?a.escapeHTML(d.toString()):"")+"</textarea>";e.innerHTML=b},formatTextbox:function(e,b,c,d){b='<input type="text" value="'+(a.isValue(d)?a.escapeHTML(d.toString()):"")+'" />';e.innerHTML=b},formatDefault:function(e,b,c,d){e.innerHTML=a.isValue(d)&&d!==""?d.toString():"&#160;"},validateNumber:function(e){e=
 
e*1;if(a.isNumber(e))return e}});h.Formatter={button:h.formatButton,checkbox:h.formatCheckbox,currency:h.formatCurrency,date:h.formatDate,dropdown:h.formatDropdown,email:h.formatEmail,link:h.formatLink,number:h.formatNumber,radio:h.formatRadio,text:h.formatText,textarea:h.formatTextarea,textbox:h.formatTextbox,defaultFormatter:h.formatDefault};a.extend(h,c.Element,{initAttributes:function(e){e=e||{};h.superclass.initAttributes.call(this,e);this.setAttributeConfig("summary",{value:"",validator:a.isString,
 
method:function(a){if(this._elTable)this._elTable.summary=a}});this.setAttributeConfig("selectionMode",{value:"standard",validator:a.isString});this.setAttributeConfig("sortedBy",{value:null,validator:function(e){return e?a.isObject(e)&&e.key:e===null},method:function(a){var e=this.get("sortedBy");this._configs.sortedBy.value=a;var b,c,d;if(this._elThead){if(e&&e.key&&e.dir){b=this._oColumnSet.getColumn(e.key);c=b.getKeyIndex();var g=b.getThEl();f.removeClass(g,e.dir);this.formatTheadCell(b.getThLinerEl().firstChild,
 
b,a)}if(a){b=a.column?a.column:this._oColumnSet.getColumn(a.key);d=b.getKeyIndex();g=b.getThEl();a.dir&&(a.dir=="asc"||a.dir=="desc")?f.addClass(g,a.dir=="desc"?h.CLASS_DESC:h.CLASS_ASC):f.addClass(g,a.dir||h.CLASS_ASC);this.formatTheadCell(b.getThLinerEl().firstChild,b,a)}}if(this._elTbody){this._elTbody.style.display="none";b=this._elTbody.rows;for(var j=b.length-1;j>-1;j--){g=b[j].childNodes;g[c]&&f.removeClass(g[c],e.dir);g[d]&&f.addClass(g[d],a.dir)}this._elTbody.style.display=""}this._clearTrTemplateEl()}});
 
this.setAttributeConfig("paginator",{value:null,validator:function(a){return a===null||a instanceof b.Paginator},method:function(){this._updatePaginator.apply(this,arguments)}});this.setAttributeConfig("caption",{value:null,validator:a.isString,method:function(a){this._initCaptionEl(a)}});this.setAttributeConfig("draggableColumns",{value:false,validator:a.isBoolean,method:function(a){this._elThead&&(a?this._initDraggableColumns():this._destroyDraggableColumns())}});this.setAttributeConfig("renderLoopSize",
 
{value:0,validator:a.isNumber});this.setAttributeConfig("sortFunction",{value:function(a,e,b,c){var d=YAHOO.util.Sort.compare,c=d(a.getData(c),e.getData(c),b);return c===0?d(a.getCount(),e.getCount(),b):c}});this.setAttributeConfig("formatRow",{value:null,validator:a.isFunction});this.setAttributeConfig("generateRequest",{value:function(a,e){var a=a||{pagination:null,sortedBy:null},b=encodeURIComponent(a.sortedBy?a.sortedBy.key:e.getColumnSet().keys[0].getKey()),c=a.pagination?a.pagination.rowsPerPage:
 
null;return"sort="+b+"&dir="+(a.sortedBy&&a.sortedBy.dir===YAHOO.widget.DataTable.CLASS_DESC?"desc":"asc")+"&startIndex="+(a.pagination?a.pagination.recordOffset:0)+(c!==null?"&results="+c:"")},validator:a.isFunction});this.setAttributeConfig("initialRequest",{value:null});this.setAttributeConfig("initialLoad",{value:true});this.setAttributeConfig("dynamicData",{value:false,validator:a.isBoolean});this.setAttributeConfig("MSG_EMPTY",{value:"No records found.",validator:a.isString});this.setAttributeConfig("MSG_LOADING",
 
{value:"Loading...",validator:a.isString});this.setAttributeConfig("MSG_ERROR",{value:"Data error.",validator:a.isString});this.setAttributeConfig("MSG_SORTASC",{value:"Click to sort ascending",validator:a.isString,method:function(a){if(this._elThead)for(var e=0,b=this.getColumnSet().keys,c=b.length;e<c;e++)if(b[e].sortable&&this.getColumnSortDir(b[e])===h.CLASS_ASC)b[e]._elThLabel.firstChild.title=a}});this.setAttributeConfig("MSG_SORTDESC",{value:"Click to sort descending",validator:a.isString,
 
method:function(a){if(this._elThead)for(var e=0,b=this.getColumnSet().keys,c=b.length;e<c;e++)if(b[e].sortable&&this.getColumnSortDir(b[e])===h.CLASS_DESC)b[e]._elThLabel.firstChild.title=a}});this.setAttributeConfig("currencySymbol",{value:"$",validator:a.isString});this.setAttributeConfig("currencyOptions",{value:{prefix:this.get("currencySymbol"),decimalPlaces:2,decimalSeparator:".",thousandsSeparator:","}});this.setAttributeConfig("dateOptions",{value:{format:"%m/%d/%Y",locale:"en"}});this.setAttributeConfig("numberOptions",
 
{value:{decimalPlaces:0,thousandsSeparator:","}})},_bInit:true,_nIndex:null,_nTrCount:0,_nTdCount:0,_sId:null,_oChainRender:null,_elContainer:null,_elMask:null,_elTable:null,_elCaption:null,_elColgroup:null,_elThead:null,_elTbody:null,_elMsgTbody:null,_elMsgTr:null,_elMsgTd:null,_elColumnDragTarget:null,_elColumnResizerProxy:null,_oDataSource:null,_oColumnSet:null,_oRecordSet:null,_oCellEditor:null,_sFirstTrId:null,_sLastTrId:null,_elTrTemplate:null,_aDynFunctions:[],_disabled:false,clearTextSelection:function(){var a;
 
if(window.getSelection)a=window.getSelection();else if(document.getSelection)a=document.getSelection();else if(document.selection)a=document.selection;a&&(a.empty?a.empty():a.removeAllRanges?a.removeAllRanges():a.collapse&&a.collapse())},_focusEl:function(a){a=a||this._elTbody;setTimeout(function(){try{a.focus()}catch(b){}},0)},_repaintGecko:d.gecko?function(a){var a=a||this._elContainer,b=a.parentNode,c=a.nextSibling;b.insertBefore(b.removeChild(a),c)}:function(){},_repaintOpera:d.opera?function(){if(d.opera){document.documentElement.className=
 
document.documentElement.className+" ";document.documentElement.className=YAHOO.lang.trim(document.documentElement.className)}}:function(){},_repaintWebkit:d.webkit?function(a){var a=a||this._elContainer,b=a.parentNode,c=a.nextSibling;b.insertBefore(b.removeChild(a),c)}:function(){},_initConfigs:function(e){if(!e||!a.isObject(e))e={};this.configs=e},_initColumnSet:function(e){var b,c,d;if(this._oColumnSet){c=0;for(d=this._oColumnSet.keys.length;c<d;c++){b=this._oColumnSet.keys[c];h._oDynStyles["."+
 
this.getId()+"-col-"+b.getSanitizedKey()+" ."+h.CLASS_LINER]=void 0;b.editor&&b.editor.unsubscribeAll&&b.editor.unsubscribeAll()}this._oColumnSet=null;this._clearTrTemplateEl()}if(a.isArray(e))this._oColumnSet=new YAHOO.widget.ColumnSet(e);else if(e instanceof YAHOO.widget.ColumnSet)this._oColumnSet=e;e=this._oColumnSet.keys;c=0;for(d=e.length;c<d;c++){b=e[c];if(b.editor&&b.editor.subscribe){b.editor.subscribe("showEvent",this._onEditorShowEvent,this,true);b.editor.subscribe("keydownEvent",this._onEditorKeydownEvent,
 
this,true);b.editor.subscribe("revertEvent",this._onEditorRevertEvent,this,true);b.editor.subscribe("saveEvent",this._onEditorSaveEvent,this,true);b.editor.subscribe("cancelEvent",this._onEditorCancelEvent,this,true);b.editor.subscribe("blurEvent",this._onEditorBlurEvent,this,true);b.editor.subscribe("blockEvent",this._onEditorBlockEvent,this,true);b.editor.subscribe("unblockEvent",this._onEditorUnblockEvent,this,true)}}},_initDataSource:function(e){this._oDataSource=null;if(e&&a.isFunction(e.sendRequest))this._oDataSource=
 
e;else{var e=null,b=this._elContainer,c=0;if(b.hasChildNodes()){b=b.childNodes;for(c=0;c<b.length;c++)if(b[c].nodeName&&b[c].nodeName.toLowerCase()=="table"){e=b[c];break}if(e){for(b=[];c<this._oColumnSet.keys.length;c++)b.push({key:this._oColumnSet.keys[c].key});this._oDataSource=new j(e);this._oDataSource.responseType=j.TYPE_HTMLTABLE;this._oDataSource.responseSchema={fields:b}}}}},_initRecordSet:function(){this._oRecordSet?this._oRecordSet.reset():this._oRecordSet=new YAHOO.widget.RecordSet},_initDomElements:function(a){this._initContainerEl(a);
 
this._initTableEl(this._elContainer);this._initColgroupEl(this._elTable);this._initTheadEl(this._elTable);this._initMsgTbodyEl(this._elTable);this._initTbodyEl(this._elTable);return!this._elContainer||!this._elTable||!this._elColgroup||!this._elThead||!this._elTbody||!this._elMsgTbody?false:true},_destroyContainerEl:function(a){var b=this._oColumnSet.keys,c;f.removeClass(a,h.CLASS_DATATABLE);g.purgeElement(a);g.purgeElement(this._elThead,true);g.purgeElement(this._elTbody);g.purgeElement(this._elMsgTbody);
 
c=a.getElementsByTagName("select");c.length&&g.detachListener(c,"change");for(c=b.length-1;c>=0;--c)b[c].editor&&g.purgeElement(b[c].editor._elContainer);a.innerHTML="";this._elTbody=this._elThead=this._elColgroup=this._elContainer=null},_initContainerEl:function(a){if((a=f.get(a))&&a.nodeName&&a.nodeName.toLowerCase()=="div"){this._destroyContainerEl(a);f.addClass(a,h.CLASS_DATATABLE);g.addListener(a,"focus",this._onTableFocus,this);g.addListener(a,"dblclick",this._onTableDblclick,this);this._elContainer=
 
a;var b=document.createElement("div");b.className=h.CLASS_MASK;b.style.display="none";this._elMask=a.appendChild(b)}},_destroyTableEl:function(){var a=this._elTable;if(a){g.purgeElement(a,true);a.parentNode.removeChild(a);this._elTbody=this._elThead=this._elColgroup=this._elCaption=null}},_initCaptionEl:function(a){if(this._elTable&&a){if(!this._elCaption)this._elCaption=this._elTable.createCaption();this._elCaption.innerHTML=a}else this._elCaption&&this._elCaption.parentNode.removeChild(this._elCaption)},
 
_initTableEl:function(a){if(a){this._destroyTableEl();this._elTable=a.appendChild(document.createElement("table"));this._elTable.summary=this.get("summary");this.get("caption")&&this._initCaptionEl(this.get("caption"));g.delegate(this._elTable,"mouseenter",this._onTableMouseover,"thead ."+h.CLASS_LABEL,this);g.delegate(this._elTable,"mouseleave",this._onTableMouseout,"thead ."+h.CLASS_LABEL,this);g.delegate(this._elTable,"mouseenter",this._onTableMouseover,"tbody.yui-dt-data>tr>td",this);g.delegate(this._elTable,
 
"mouseleave",this._onTableMouseout,"tbody.yui-dt-data>tr>td",this);g.delegate(this._elTable,"mouseenter",this._onTableMouseover,"tbody.yui-dt-message>tr>td",this);g.delegate(this._elTable,"mouseleave",this._onTableMouseout,"tbody.yui-dt-message>tr>td",this)}},_destroyColgroupEl:function(){var a=this._elColgroup;if(a){var b=a.parentNode;g.purgeElement(a,true);b.removeChild(a);this._elColgroup=null}},_initColgroupEl:function(a){if(a){this._destroyColgroupEl();for(var b=this._oColumnSet.keys,c=0,d=(this._aColIds||
 
[]).length,f=document.createDocumentFragment(),h=document.createElement("col"),c=0,d=b.length;c<d;c++)f.appendChild(h.cloneNode(false));a=a.insertBefore(document.createElement("colgroup"),a.firstChild);a.appendChild(f);this._elColgroup=a}},_insertColgroupColEl:function(e){if(a.isNumber(e)&&this._elColgroup){e=this._elColgroup.childNodes[e]||null;this._elColgroup.insertBefore(document.createElement("col"),e)}},_removeColgroupColEl:function(e){a.isNumber(e)&&(this._elColgroup&&this._elColgroup.childNodes[e])&&
 
this._elColgroup.removeChild(this._elColgroup.childNodes[e])},_reorderColgroupColEl:function(e,b){if(a.isArray(e)&&a.isNumber(b)&&this._elColgroup&&this._elColgroup.childNodes.length>e[e.length-1]){var c,d=[];for(c=e.length-1;c>-1;c--)d.push(this._elColgroup.removeChild(this._elColgroup.childNodes[e[c]]));var f=this._elColgroup.childNodes[b]||null;for(c=d.length-1;c>-1;c--)this._elColgroup.insertBefore(d[c],f)}},_destroyTheadEl:function(){var a=this._elThead;if(a){var b=a.parentNode;g.purgeElement(a,
 
true);this._destroyColumnHelpers();b.removeChild(a);this._elThead=null}},_initTheadEl:function(a){if(a=a||this._elTable){this._destroyTheadEl();var b=this._elColgroup?a.insertBefore(document.createElement("thead"),this._elColgroup.nextSibling):a.appendChild(document.createElement("thead"));g.addListener(b,"focus",this._onTheadFocus,this);g.addListener(b,"keydown",this._onTheadKeydown,this);g.addListener(b,"mousedown",this._onTableMousedown,this);g.addListener(b,"mouseup",this._onTableMouseup,this);
 
g.addListener(b,"click",this._onTheadClick,this);for(var c=this._oColumnSet,l,j,p=c.tree,n,a=0;a<p.length;a++){var o=b.appendChild(document.createElement("tr"));for(j=0;j<p[a].length;j++){l=p[a][j];n=o.appendChild(document.createElement("th"));this._initThEl(n,l)}a===0&&f.addClass(o,h.CLASS_FIRST);a===p.length-1&&f.addClass(o,h.CLASS_LAST)}l=c.headers[0]||[];for(a=0;a<l.length;a++)f.addClass(f.get(this.getId()+"-th-"+l[a]),h.CLASS_FIRST);c=c.headers[c.headers.length-1]||[];for(a=0;a<c.length;a++)f.addClass(f.get(this.getId()+
 
"-th-"+c[a]),h.CLASS_LAST);if(d.webkit&&d.webkit<420){setTimeout(function(){b.style.display=""},0);b.style.display="none"}this._elThead=b;this._initColumnHelpers()}},_initThEl:function(a,b){a.id=this.getId()+"-th-"+b.getSanitizedKey();a.innerHTML="";a.rowSpan=b.getRowspan();a.colSpan=b.getColspan();b._elTh=a;var c=a.appendChild(document.createElement("div"));c.id=a.id+"-liner";c.className=h.CLASS_LINER;b._elThLiner=c;c=c.appendChild(document.createElement("span"));c.className=h.CLASS_LABEL;if(b.abbr)a.abbr=
 
b.abbr;b.hidden&&this._clearMinWidth(b);a.className=this._getColumnClassNames(b);if(b.width){var d=b.minWidth&&b.width<b.minWidth?b.minWidth:b.width;if(h._bDynStylesFallback){a.firstChild.style.overflow="hidden";a.firstChild.style.width=d+"px"}else this._setColumnWidthDynStyles(b,d+"px","hidden")}this.formatTheadCell(c,b,this.get("sortedBy"));b._elThLabel=c},formatTheadCell:function(e,b,c){var d=b.getKey(),d=a.isValue(b.label)?b.label:d;if(b.sortable){var f=this.getColumnSortDir(b,c)===h.CLASS_DESC;
 
c&&b.key===c.key&&(f=c.dir!==h.CLASS_DESC);b=this.getId()+"-href-"+b.getSanitizedKey();c=f?this.get("MSG_SORTDESC"):this.get("MSG_SORTASC");e.innerHTML='<a href="'+b+'" title="'+c+'" class="'+h.CLASS_SORTABLE+'">'+d+"</a>"}else e.innerHTML=d},_destroyDraggableColumns:function(){for(var a,b=0,c=this._oColumnSet.tree[0].length;b<c;b++){a=this._oColumnSet.tree[0][b];if(a._dd){a._dd=a._dd.unreg();f.removeClass(a.getThEl(),h.CLASS_DRAGGABLE)}}this._destroyColumnDragTargetEl()},_initDraggableColumns:function(){this._destroyDraggableColumns();
 
if(c.DD)for(var a,b,d,l=0,g=this._oColumnSet.tree[0].length;l<g;l++){a=this._oColumnSet.tree[0][l];b=a.getThEl();f.addClass(b,h.CLASS_DRAGGABLE);d=this._initColumnDragTargetEl();a._dd=new YAHOO.widget.ColumnDD(this,a,b,d)}},_destroyColumnDragTargetEl:function(){if(this._elColumnDragTarget){var a=this._elColumnDragTarget;YAHOO.util.Event.purgeElement(a);a.parentNode.removeChild(a);this._elColumnDragTarget=null}},_initColumnDragTargetEl:function(){if(!this._elColumnDragTarget){var a=document.createElement("div");
 
a.id=this.getId()+"-coltarget";a.className=h.CLASS_COLTARGET;a.style.display="none";document.body.insertBefore(a,document.body.firstChild);this._elColumnDragTarget=a}return this._elColumnDragTarget},_destroyResizeableColumns:function(){for(var a=this._oColumnSet.keys,b=0,c=a.length;b<c;b++)if(a[b]._ddResizer){a[b]._ddResizer=a[b]._ddResizer.unreg();f.removeClass(a[b].getThEl(),h.CLASS_RESIZEABLE)}this._destroyColumnResizerProxyEl()},_initResizeableColumns:function(){this._destroyResizeableColumns();
 
if(c.DD)for(var a,b,d,l,j=0,p=this._oColumnSet.keys.length;j<p;j++){a=this._oColumnSet.keys[j];if(a.resizeable){b=a.getThEl();f.addClass(b,h.CLASS_RESIZEABLE);d=a.getThLinerEl();l=b.appendChild(document.createElement("div"));l.className=h.CLASS_RESIZERLINER;l.appendChild(d);d=l.appendChild(document.createElement("div"));d.id=b.id+"-resizer";d.className=h.CLASS_RESIZER;a._elResizer=d;l=this._initColumnResizerProxyEl();a._ddResizer=new YAHOO.util.ColumnResizer(this,a,b,d,l);a=function(a){g.stopPropagation(a)};
 
g.addListener(d,"click",a)}}},_destroyColumnResizerProxyEl:function(){if(this._elColumnResizerProxy){var a=this._elColumnResizerProxy;YAHOO.util.Event.purgeElement(a);a.parentNode.removeChild(a);this._elColumnResizerProxy=null}},_initColumnResizerProxyEl:function(){if(!this._elColumnResizerProxy){var a=document.createElement("div");a.id=this.getId()+"-colresizerproxy";a.className=h.CLASS_RESIZERPROXY;document.body.insertBefore(a,document.body.firstChild);this._elColumnResizerProxy=a}return this._elColumnResizerProxy},
 
_destroyColumnHelpers:function(){this._destroyDraggableColumns();this._destroyResizeableColumns()},_initColumnHelpers:function(){this.get("draggableColumns")&&this._initDraggableColumns();this._initResizeableColumns()},_destroyTbodyEl:function(){var a=this._elTbody;if(a){var b=a.parentNode;g.purgeElement(a,true);b.removeChild(a);this._elTbody=null}},_initTbodyEl:function(a){if(a){this._destroyTbodyEl();a=a.appendChild(document.createElement("tbody"));a.tabIndex=0;a.className=h.CLASS_DATA;g.addListener(a,
 
"focus",this._onTbodyFocus,this);g.addListener(a,"mousedown",this._onTableMousedown,this);g.addListener(a,"mouseup",this._onTableMouseup,this);g.addListener(a,"keydown",this._onTbodyKeydown,this);g.addListener(a,"click",this._onTbodyClick,this);if(d.ie)a.hideFocus=true;this._elTbody=a}},_destroyMsgTbodyEl:function(){var a=this._elMsgTbody;if(a){var b=a.parentNode;g.purgeElement(a,true);b.removeChild(a);this._elTbody=null}},_initMsgTbodyEl:function(a){if(a){var b=document.createElement("tbody");b.className=
 
h.CLASS_MESSAGE;var c=b.appendChild(document.createElement("tr"));c.className=h.CLASS_FIRST+" "+h.CLASS_LAST;this._elMsgTr=c;c=c.appendChild(document.createElement("td"));c.colSpan=this._oColumnSet.keys.length||1;c.className=h.CLASS_FIRST+" "+h.CLASS_LAST;this._elMsgTd=c;b=a.insertBefore(b,this._elTbody);c.appendChild(document.createElement("div")).className=h.CLASS_LINER;this._elMsgTbody=b;g.addListener(b,"focus",this._onTbodyFocus,this);g.addListener(b,"mousedown",this._onTableMousedown,this);g.addListener(b,
 
"mouseup",this._onTableMouseup,this);g.addListener(b,"keydown",this._onTbodyKeydown,this);g.addListener(b,"click",this._onTbodyClick,this)}},_initEvents:function(){this._initColumnSort();YAHOO.util.Event.addListener(document,"click",this._onDocumentClick,this);this.subscribe("paginatorChange",function(){this._handlePaginatorChange.apply(this,arguments)});this.subscribe("initEvent",function(){this.renderPaginator()});this._initCellEditing()},_initColumnSort:function(){this.subscribe("theadCellClickEvent",
 
this.onEventSortColumn);var a=this.get("sortedBy");if(a)if(a.dir=="desc")this._configs.sortedBy.value.dir=h.CLASS_DESC;else if(a.dir=="asc")this._configs.sortedBy.value.dir=h.CLASS_ASC},_initCellEditing:function(){this.subscribe("editorBlurEvent",function(){this.onEditorBlurEvent.apply(this,arguments)});this.subscribe("editorBlockEvent",function(){this.onEditorBlockEvent.apply(this,arguments)});this.subscribe("editorUnblockEvent",function(){this.onEditorUnblockEvent.apply(this,arguments)})},_getColumnClassNames:function(e,
 
b){var c;c=a.isString(e.className)?[e.className]:a.isArray(e.className)?e.className:[];c[c.length]=this.getId()+"-col-"+e.getSanitizedKey();c[c.length]="yui-dt-col-"+e.getSanitizedKey();var d=this.get("sortedBy")||{};e.key===d.key&&(c[c.length]=d.dir||"");if(e.hidden)c[c.length]=h.CLASS_HIDDEN;if(e.selected)c[c.length]=h.CLASS_SELECTED;if(e.sortable)c[c.length]=h.CLASS_SORTABLE;if(e.resizeable)c[c.length]=h.CLASS_RESIZEABLE;if(e.editor)c[c.length]=h.CLASS_EDITABLE;b&&(c=c.concat(b));return c.join(" ")},
 
_clearTrTemplateEl:function(){this._elTrTemplate=null},_getTrTemplateEl:function(){if(this._elTrTemplate)return this._elTrTemplate;var a=document,b=a.createElement("tr"),c=a.createElement("td"),a=a.createElement("div");c.appendChild(a);for(var a=document.createDocumentFragment(),d=this._oColumnSet.keys,f,g=0,j=d.length;g<j;g++){f=c.cloneNode(true);f=this._formatTdEl(d[g],f,g,g===j-1);a.appendChild(f)}b.appendChild(a);b.className=h.CLASS_REC;return this._elTrTemplate=b},_formatTdEl:function(a,b,c,
 
d){for(var f=this._oColumnSet.headers[c],g="",j,o=0,m=f.length;o<m;o++){j=this._sId+"-th-"+f[o]+" ";g=g+j}b.headers=g;f=[];if(c===0)f[f.length]=h.CLASS_FIRST;if(d)f[f.length]=h.CLASS_LAST;b.className=this._getColumnClassNames(a,f);b.firstChild.className=h.CLASS_LINER;if(a.width&&h._bDynStylesFallback){a=a.minWidth&&a.width<a.minWidth?a.minWidth:a.width;b.firstChild.style.overflow="hidden";b.firstChild.style.width=a+"px"}return b},_addTrEl:function(a){return this._updateTrEl(this._getTrTemplateEl().cloneNode(true),
 
a)},_updateTrEl:function(a,b){if(this.get("formatRow")?this.get("formatRow").call(this,a,b):1){a.style.display="none";for(var c=a.childNodes,d=0,f=c.length;d<f;++d)this.formatCell(c[d].firstChild,b,this._oColumnSet.keys[d]);a.style.display=""}c=a.id;d=b.getId();if(this._sFirstTrId===c)this._sFirstTrId=d;if(this._sLastTrId===c)this._sLastTrId=d;a.id=d;return a},_deleteTrEl:function(e){var b;b=a.isNumber(e)?e:f.get(e).sectionRowIndex;return a.isNumber(b)&&b>-2&&b<this._elTbody.rows.length?this._elTbody.removeChild(this._elTbody.rows[e]):
 
null},_unsetFirstRow:function(){if(this._sFirstTrId){f.removeClass(this._sFirstTrId,h.CLASS_FIRST);this._sFirstTrId=null}},_setFirstRow:function(){this._unsetFirstRow();var a=this.getFirstTrEl();if(a){f.addClass(a,h.CLASS_FIRST);this._sFirstTrId=a.id}},_unsetLastRow:function(){if(this._sLastTrId){f.removeClass(this._sLastTrId,h.CLASS_LAST);this._sLastTrId=null}},_setLastRow:function(){this._unsetLastRow();var a=this.getLastTrEl();if(a){f.addClass(a,h.CLASS_LAST);this._sLastTrId=a.id}},_setRowStripes:function(e,
 
b){var c=this._elTbody.rows,d=0,g=c.length,j=[],n=0,o=[],m=0;if(e!==null&&e!==void 0){var r=this.getTrEl(e);if(r){d=r.sectionRowIndex;a.isNumber(b)&&b>1&&(g=d+b)}}for(;d<g;d++)d%2?j[n++]=c[d]:o[m++]=c[d];j.length&&f.replaceClass(j,h.CLASS_EVEN,h.CLASS_ODD);o.length&&f.replaceClass(o,h.CLASS_ODD,h.CLASS_EVEN)},_setSelections:function(){var a=this.getSelectedRows(),b=this.getSelectedCells();if(a.length>0||b.length>0){for(var c=this._oColumnSet,d,g=0;g<a.length;g++)(d=f.get(a[g]))&&f.addClass(d,h.CLASS_SELECTED);
 
for(g=0;g<b.length;g++)(d=f.get(b[g].recordId))&&f.addClass(d.childNodes[c.getColumn(b[g].columnKey).getKeyIndex()],h.CLASS_SELECTED)}},_onRenderChainEnd:function(){this.hideTableMessage();this._elTbody.rows.length===0&&this.showTableMessage(this.get("MSG_EMPTY"),h.CLASS_EMPTY);var a=this;setTimeout(function(){if(a instanceof h&&a._sId){if(a._bInit){a._bInit=false;a.fireEvent("initEvent")}a.fireEvent("renderEvent");a.fireEvent("refreshEvent");a.validateColumnWidths();a.fireEvent("postRenderEvent")}},
 
0)},_onDocumentClick:function(a,b){var c=g.getTarget(a);c.nodeName.toLowerCase();if(!f.isAncestor(b._elContainer,c)){b.fireEvent("tableBlurEvent");if(b._oCellEditor)if(b._oCellEditor.getContainerEl){var d=b._oCellEditor.getContainerEl();!f.isAncestor(d,c)&&d.id!==c.id&&b._oCellEditor.fireEvent("blurEvent",{editor:b._oCellEditor})}else b._oCellEditor.isActive&&!f.isAncestor(b._oCellEditor.container,c)&&b._oCellEditor.container.id!==c.id&&b.fireEvent("editorBlurEvent",{editor:b._oCellEditor})}},_onTableFocus:function(a,
 
b){b.fireEvent("tableFocusEvent")},_onTheadFocus:function(a,b){b.fireEvent("theadFocusEvent");b.fireEvent("tableFocusEvent")},_onTbodyFocus:function(a,b){b.fireEvent("tbodyFocusEvent");b.fireEvent("tableFocusEvent")},_onTableMouseover:function(a,b,c,d){for(var c=b.nodeName&&b.nodeName.toLowerCase(),g=true;b&&c!="table";){switch(c){case "body":return;case "td":g=d.fireEvent("cellMouseoverEvent",{target:b,event:a});break;case "span":if(f.hasClass(b,h.CLASS_LABEL)){d.fireEvent("theadLabelMouseoverEvent",
 
{target:b,event:a});g=d.fireEvent("headerLabelMouseoverEvent",{target:b,event:a})}break;case "th":d.fireEvent("theadCellMouseoverEvent",{target:b,event:a});g=d.fireEvent("headerCellMouseoverEvent",{target:b,event:a});break;case "tr":if(b.parentNode.nodeName.toLowerCase()=="thead"){d.fireEvent("theadRowMouseoverEvent",{target:b,event:a});g=d.fireEvent("headerRowMouseoverEvent",{target:b,event:a})}else g=d.fireEvent("rowMouseoverEvent",{target:b,event:a})}if(g===false)return;(b=b.parentNode)&&(c=b.nodeName.toLowerCase())}d.fireEvent("tableMouseoverEvent",
 
{target:b||d._elContainer,event:a})},_onTableMouseout:function(a,b,c,d){for(var c=b.nodeName&&b.nodeName.toLowerCase(),g=true;b&&c!="table";){switch(c){case "body":return;case "td":g=d.fireEvent("cellMouseoutEvent",{target:b,event:a});break;case "span":if(f.hasClass(b,h.CLASS_LABEL)){d.fireEvent("theadLabelMouseoutEvent",{target:b,event:a});g=d.fireEvent("headerLabelMouseoutEvent",{target:b,event:a})}break;case "th":d.fireEvent("theadCellMouseoutEvent",{target:b,event:a});g=d.fireEvent("headerCellMouseoutEvent",
 
{target:b,event:a});break;case "tr":if(b.parentNode.nodeName.toLowerCase()=="thead"){d.fireEvent("theadRowMouseoutEvent",{target:b,event:a});g=d.fireEvent("headerRowMouseoutEvent",{target:b,event:a})}else g=d.fireEvent("rowMouseoutEvent",{target:b,event:a})}if(g===false)return;(b=b.parentNode)&&(c=b.nodeName.toLowerCase())}d.fireEvent("tableMouseoutEvent",{target:b||d._elContainer,event:a})},_onTableMousedown:function(a,b){for(var c=g.getTarget(a),d=c.nodeName&&c.nodeName.toLowerCase(),j=true;c&&
 
d!="table";){switch(d){case "body":return;case "td":j=b.fireEvent("cellMousedownEvent",{target:c,event:a});break;case "span":if(f.hasClass(c,h.CLASS_LABEL)){b.fireEvent("theadLabelMousedownEvent",{target:c,event:a});j=b.fireEvent("headerLabelMousedownEvent",{target:c,event:a})}break;case "th":b.fireEvent("theadCellMousedownEvent",{target:c,event:a});j=b.fireEvent("headerCellMousedownEvent",{target:c,event:a});break;case "tr":if(c.parentNode.nodeName.toLowerCase()=="thead"){b.fireEvent("theadRowMousedownEvent",
 
{target:c,event:a});j=b.fireEvent("headerRowMousedownEvent",{target:c,event:a})}else j=b.fireEvent("rowMousedownEvent",{target:c,event:a})}if(j===false)return;(c=c.parentNode)&&(d=c.nodeName.toLowerCase())}b.fireEvent("tableMousedownEvent",{target:c||b._elContainer,event:a})},_onTableMouseup:function(a,b){for(var c=g.getTarget(a),d=c.nodeName&&c.nodeName.toLowerCase(),j=true;c&&d!="table";){switch(d){case "body":return;case "td":j=b.fireEvent("cellMouseupEvent",{target:c,event:a});break;case "span":if(f.hasClass(c,
 
h.CLASS_LABEL)){b.fireEvent("theadLabelMouseupEvent",{target:c,event:a});j=b.fireEvent("headerLabelMouseupEvent",{target:c,event:a})}break;case "th":b.fireEvent("theadCellMouseupEvent",{target:c,event:a});j=b.fireEvent("headerCellMouseupEvent",{target:c,event:a});break;case "tr":if(c.parentNode.nodeName.toLowerCase()=="thead"){b.fireEvent("theadRowMouseupEvent",{target:c,event:a});j=b.fireEvent("headerRowMouseupEvent",{target:c,event:a})}else j=b.fireEvent("rowMouseupEvent",{target:c,event:a})}if(j===
 
false)return;(c=c.parentNode)&&(d=c.nodeName.toLowerCase())}b.fireEvent("tableMouseupEvent",{target:c||b._elContainer,event:a})},_onTableDblclick:function(a,b){for(var c=g.getTarget(a),d=c.nodeName&&c.nodeName.toLowerCase(),j=true;c&&d!="table";){switch(d){case "body":return;case "td":j=b.fireEvent("cellDblclickEvent",{target:c,event:a});break;case "span":if(f.hasClass(c,h.CLASS_LABEL)){b.fireEvent("theadLabelDblclickEvent",{target:c,event:a});j=b.fireEvent("headerLabelDblclickEvent",{target:c,event:a})}break;
 
case "th":b.fireEvent("theadCellDblclickEvent",{target:c,event:a});j=b.fireEvent("headerCellDblclickEvent",{target:c,event:a});break;case "tr":if(c.parentNode.nodeName.toLowerCase()=="thead"){b.fireEvent("theadRowDblclickEvent",{target:c,event:a});j=b.fireEvent("headerRowDblclickEvent",{target:c,event:a})}else j=b.fireEvent("rowDblclickEvent",{target:c,event:a})}if(j===false)return;(c=c.parentNode)&&(d=c.nodeName.toLowerCase())}b.fireEvent("tableDblclickEvent",{target:c||b._elContainer,event:a})},
 
_onTheadKeydown:function(a,b){for(var c=g.getTarget(a),d=c.nodeName&&c.nodeName.toLowerCase(),f=true;c&&d!="table";){switch(d){case "body":return;case "thead":f=b.fireEvent("theadKeyEvent",{target:c,event:a})}if(f===false)return;(c=c.parentNode)&&(d=c.nodeName.toLowerCase())}b.fireEvent("tableKeyEvent",{target:c||b._elContainer,event:a})},_onTbodyKeydown:function(a,b){var c=b.get("selectionMode");c=="standard"?b._handleStandardSelectionByKey(a):c=="single"?b._handleSingleSelectionByKey(a):c=="cellblock"?
 
b._handleCellBlockSelectionByKey(a):c=="cellrange"?b._handleCellRangeSelectionByKey(a):c=="singlecell"&&b._handleSingleCellSelectionByKey(a);b._oCellEditor&&(b._oCellEditor.fireEvent?b._oCellEditor.fireEvent("blurEvent",{editor:b._oCellEditor}):b._oCellEditor.isActive&&b.fireEvent("editorBlurEvent",{editor:b._oCellEditor}));for(var c=g.getTarget(a),d=c.nodeName&&c.nodeName.toLowerCase(),f=true;c&&d!="table";){switch(d){case "body":return;case "tbody":f=b.fireEvent("tbodyKeyEvent",{target:c,event:a})}if(f===
 
false)return;(c=c.parentNode)&&(d=c.nodeName.toLowerCase())}b.fireEvent("tableKeyEvent",{target:c||b._elContainer,event:a})},_onTheadClick:function(a,b){b._oCellEditor&&(b._oCellEditor.fireEvent?b._oCellEditor.fireEvent("blurEvent",{editor:b._oCellEditor}):b._oCellEditor.isActive&&b.fireEvent("editorBlurEvent",{editor:b._oCellEditor}));for(var c=g.getTarget(a),d=c.nodeName&&c.nodeName.toLowerCase(),j=true;c&&d!="table";){switch(d){case "body":return;case "input":var p=c.type.toLowerCase();p=="checkbox"?
 
j=b.fireEvent("theadCheckboxClickEvent",{target:c,event:a}):p=="radio"?j=b.fireEvent("theadRadioClickEvent",{target:c,event:a}):p=="button"||p=="image"||p=="submit"||p=="reset"?j=c.disabled?false:b.fireEvent("theadButtonClickEvent",{target:c,event:a}):c.disabled&&(j=false);break;case "a":j=b.fireEvent("theadLinkClickEvent",{target:c,event:a});break;case "button":j=c.disabled?false:b.fireEvent("theadButtonClickEvent",{target:c,event:a});break;case "span":if(f.hasClass(c,h.CLASS_LABEL)){b.fireEvent("theadLabelClickEvent",
 
{target:c,event:a});j=b.fireEvent("headerLabelClickEvent",{target:c,event:a})}break;case "th":b.fireEvent("theadCellClickEvent",{target:c,event:a});j=b.fireEvent("headerCellClickEvent",{target:c,event:a});break;case "tr":b.fireEvent("theadRowClickEvent",{target:c,event:a});j=b.fireEvent("headerRowClickEvent",{target:c,event:a})}if(j===false)return;(c=c.parentNode)&&(d=c.nodeName.toLowerCase())}b.fireEvent("tableClickEvent",{target:c||b._elContainer,event:a})},_onTbodyClick:function(a,b){b._oCellEditor&&
 
(b._oCellEditor.fireEvent?b._oCellEditor.fireEvent("blurEvent",{editor:b._oCellEditor}):b._oCellEditor.isActive&&b.fireEvent("editorBlurEvent",{editor:b._oCellEditor}));for(var c=g.getTarget(a),d=c.nodeName&&c.nodeName.toLowerCase(),f=true;c&&d!="table";){switch(d){case "body":return;case "input":var h=c.type.toLowerCase();h=="checkbox"?f=b.fireEvent("checkboxClickEvent",{target:c,event:a}):h=="radio"?f=b.fireEvent("radioClickEvent",{target:c,event:a}):h=="button"||h=="image"||h=="submit"||h=="reset"?
 
f=c.disabled?false:b.fireEvent("buttonClickEvent",{target:c,event:a}):c.disabled&&(f=false);break;case "a":f=b.fireEvent("linkClickEvent",{target:c,event:a});break;case "button":f=c.disabled?false:b.fireEvent("buttonClickEvent",{target:c,event:a});break;case "td":f=b.fireEvent("cellClickEvent",{target:c,event:a});break;case "tr":f=b.fireEvent("rowClickEvent",{target:c,event:a})}if(f===false)return;(c=c.parentNode)&&(d=c.nodeName.toLowerCase())}b.fireEvent("tableClickEvent",{target:c||b._elContainer,
 
event:a})},_onDropdownChange:function(a,b){var c=g.getTarget(a);b.fireEvent("dropdownChangeEvent",{event:a,target:c})},configs:null,getId:function(){return this._sId},toString:function(){return"DataTable instance "+this._sId},getDataSource:function(){return this._oDataSource},getColumnSet:function(){return this._oColumnSet},getRecordSet:function(){return this._oRecordSet},getState:function(){return{totalRecords:this.get("paginator")?this.get("paginator").get("totalRecords"):this._oRecordSet.getLength(),
 
pagination:this.get("paginator")?this.get("paginator").getState():null,sortedBy:this.get("sortedBy"),selectedRows:this.getSelectedRows(),selectedCells:this.getSelectedCells()}},getContainerEl:function(){return this._elContainer},getTableEl:function(){return this._elTable},getTheadEl:function(){return this._elThead},getTbodyEl:function(){return this._elTbody},getMsgTbodyEl:function(){return this._elMsgTbody},getMsgTdEl:function(){return this._elMsgTd},getTrEl:function(e){if(e instanceof YAHOO.widget.Record)return document.getElementById(e.getId());
 
if(a.isNumber(e)){var b=f.getElementsByClassName(h.CLASS_REC,"tr",this._elTbody);return b&&b[e]?b[e]:null}if(e)if((e=a.isString(e)?document.getElementById(e):e)&&e.ownerDocument==document){e.nodeName.toLowerCase()!="tr"&&(e=f.getAncestorByTagName(e,"tr"));return e}return null},getFirstTrEl:function(){for(var a=this._elTbody.rows,b=0;a[b];){if(this.getRecord(a[b]))return a[b];b++}return null},getLastTrEl:function(){for(var a=this._elTbody.rows,b=a.length-1;b>-1;){if(this.getRecord(a[b]))return a[b];
 
b--}return null},getNextTrEl:function(a,b){var c=this.getTrIndex(a);if(c!==null){var d=this._elTbody.rows;if(b)for(;c<d.length-1;){a=d[c+1];if(this.getRecord(a))return a;c++}else if(c<d.length-1)return d[c+1]}return null},getPreviousTrEl:function(a,b){var c=this.getTrIndex(a);if(c!==null){var d=this._elTbody.rows;if(b)for(;c>0;){a=d[c-1];if(this.getRecord(a))return a;c--}else if(c>0)return d[c-1]}return null},getCellIndex:function(a){if(a=this.getTdEl(a))if(d.ie>0)for(var b=0,c=a.parentNode.childNodes,
 
f=c.length;b<f;b++){if(c[b]==a)return b}else return a.cellIndex},getTdLinerEl:function(a){return this.getTdEl(a).firstChild||null},getTdEl:function(e){var b,c=f.get(e);if(c&&c.ownerDocument==document){if((b=c.nodeName.toLowerCase()!="td"?f.getAncestorByTagName(c,"td"):c)&&(b.parentNode.parentNode==this._elTbody||b.parentNode.parentNode===null||b.parentNode.parentNode.nodeType===11))return b}else if(e){var d;if(a.isString(e.columnKey)&&a.isString(e.recordId)){d=this.getRecord(e.recordId);(c=this.getColumn(e.columnKey))&&
 
(b=c.getKeyIndex())}if(e.record&&e.column&&e.column.getKeyIndex){d=e.record;b=e.column.getKeyIndex()}e=this.getTrEl(d);if(b!==null&&e&&e.cells&&e.cells.length>0)return e.cells[b]||null}return null},getFirstTdEl:function(e){if(e=a.isValue(e)?this.getTrEl(e):this.getFirstTrEl()){if(e.cells&&e.cells.length>0)return e.cells[0];if(e.childNodes&&e.childNodes.length>0)return e.childNodes[0]}return null},getLastTdEl:function(e){if(e=a.isValue(e)?this.getTrEl(e):this.getLastTrEl()){if(e.cells&&e.cells.length>
 
0)return e.cells[e.cells.length-1];if(e.childNodes&&e.childNodes.length>0)return e.childNodes[e.childNodes.length-1]}return null},getNextTdEl:function(a){var b=this.getTdEl(a);if(b){a=this.getCellIndex(b);b=this.getTrEl(b);if(b.cells&&b.cells.length>0&&a<b.cells.length-1)return b.cells[a+1];if(b.childNodes&&b.childNodes.length>0&&a<b.childNodes.length-1)return b.childNodes[a+1];if(a=this.getNextTrEl(b))return a.cells[0]}return null},getPreviousTdEl:function(a){var b=this.getTdEl(a);if(b){a=this.getCellIndex(b);
 
b=this.getTrEl(b);if(a>0){if(b.cells&&b.cells.length>0)return b.cells[a-1];if(b.childNodes&&b.childNodes.length>0)return b.childNodes[a-1]}else if(a=this.getPreviousTrEl(b))return this.getLastTdEl(a)}return null},getAboveTdEl:function(a,b){var c=this.getTdEl(a);if(c){var d=this.getPreviousTrEl(c,b);if(d){c=this.getCellIndex(c);if(d.cells&&d.cells.length>0)return d.cells[c]?d.cells[c]:null;if(d.childNodes&&d.childNodes.length>0)return d.childNodes[c]?d.childNodes[c]:null}}return null},getBelowTdEl:function(a,
 
b){var c=this.getTdEl(a);if(c){var d=this.getNextTrEl(c,b);if(d){c=this.getCellIndex(c);if(d.cells&&d.cells.length>0)return d.cells[c]?d.cells[c]:null;if(d.childNodes&&d.childNodes.length>0)return d.childNodes[c]?d.childNodes[c]:null}}return null},getThLinerEl:function(a){return(a=this.getColumn(a))?a.getThLinerEl():null},getThEl:function(a){if(a instanceof YAHOO.widget.Column){if(a=a.getThEl())return a}else if((a=f.get(a))&&a.ownerDocument==document)return a=a.nodeName.toLowerCase()!="th"?f.getAncestorByTagName(a,
 
"th"):a;return null},getTrIndex:function(a){var b=this.getRecord(a),a=this.getRecordIndex(b);if(b){if(b=this.getTrEl(b))return b.sectionRowIndex;return(b=this.get("paginator"))?b.get("recordOffset")+a:a}return null},load:function(a){a=a||{};(a.datasource||this._oDataSource).sendRequest(a.request||this.get("initialRequest"),a.callback||{success:this.onDataReturnInitializeTable,failure:this.onDataReturnInitializeTable,scope:this,argument:this.getState()})},initializeTable:function(){this._bInit=true;
 
this._oRecordSet.reset();var a=this.get("paginator");a&&a.set("totalRecords",0);this._unselectAllTrEls();this._unselectAllTdEls();this._oAnchorCell=this._oAnchorRecord=this._aSelections=null;this.set("sortedBy",null)},_runRenderChain:function(){this._oChainRender.run()},_getViewRecords:function(){var a=this.get("paginator");return a?this._oRecordSet.getRecords(a.getStartIndex(),a.getRowsPerPage()):this._oRecordSet.getRecords()},render:function(){this._oChainRender.stop();this.fireEvent("beforeRenderEvent");
 
var a=this._getViewRecords(),b=this._elTbody,c=this.get("renderLoopSize"),d=a.length;if(d>0){for(b.style.display="none";b.lastChild;)b.removeChild(b.lastChild);b.style.display="";this._oChainRender.add({method:function(c){if(this instanceof h&&this._sId){var k=c.nCurrentRecord,g=c.nCurrentRecord+c.nLoopLength>d?d:c.nCurrentRecord+c.nLoopLength,j,q;for(b.style.display="none";k<g;k++){j=(j=f.get(a[k].getId()))||this._addTrEl(a[k]);q=b.childNodes[k]||null;b.insertBefore(j,q)}b.style.display="";c.nCurrentRecord=
 
k}},scope:this,iterations:c>0?Math.ceil(d/c):1,argument:{nCurrentRecord:0,nLoopLength:c>0?c:d},timeout:c>0?0:-1});this._oChainRender.add({method:function(){if(this instanceof h&&this._sId){for(;b.rows.length>d;)b.removeChild(b.lastChild);this._setFirstRow();this._setLastRow();this._setRowStripes();this._setSelections()}},scope:this,timeout:c>0?0:-1})}else{var g=b.rows.length;g>0&&this._oChainRender.add({method:function(a){if(this instanceof h&&this._sId){var e=a.nCurrent,c=a.nLoopLength,c=e-c<0?0:
 
e-c;for(b.style.display="none";e>c;e--)b.deleteRow(-1);b.style.display="";a.nCurrent=e}},scope:this,iterations:c>0?Math.ceil(g/c):1,argument:{nCurrent:g,nLoopLength:c>0?c:g},timeout:c>0?0:-1})}this._runRenderChain()},disable:function(){this._disabled=true;var a=this._elTable,b=this._elMask;b.style.width=a.offsetWidth+"px";b.style.height=a.offsetHeight+"px";b.style.left=a.offsetLeft+"px";b.style.display="";this.fireEvent("disableEvent")},undisable:function(){this._disabled=false;this._elMask.style.display=
 
"none";this.fireEvent("undisableEvent")},isDisabled:function(){return this._disabled},destroy:function(){this._oChainRender.stop();this._destroyColumnHelpers();for(var b,c=0,d=this._oColumnSet.flat.length;c<d;c++)if((b=this._oColumnSet.flat[c].editor)&&b.destroy){b.destroy();this._oColumnSet.flat[c].editor=null}this._destroyPaginator();this._oRecordSet.unsubscribeAll();this.unsubscribeAll();g.removeListener(document,"click",this._onDocumentClick);this._destroyContainerEl(this._elContainer);for(var f in this)a.hasOwnProperty(this,
 
f)&&(this[f]=null);h._nCurrentCount--;if(h._nCurrentCount<1&&h._elDynStyleNode){document.getElementsByTagName("head")[0].removeChild(h._elDynStyleNode);h._elDynStyleNode=null}},showTableMessage:function(b,c){var d=this._elMsgTd;if(a.isString(b))d.firstChild.innerHTML=b;if(a.isString(c))d.className=c;this._elMsgTbody.style.display="";this.fireEvent("tableMsgShowEvent",{html:b,className:c})},hideTableMessage:function(){if(this._elMsgTbody.style.display!="none"){this._elMsgTbody.style.display="none";
 
this._elMsgTbody.parentNode.style.width="";this.fireEvent("tableMsgHideEvent")}},focus:function(){this.focusTbodyEl()},focusTheadEl:function(){this._focusEl(this._elThead)},focusTbodyEl:function(){this._focusEl(this._elTbody)},onShow:function(){this.validateColumnWidths();for(var a=this._oColumnSet.keys,b=0,c=a.length,d;b<c;b++){d=a[b];d._ddResizer&&d._ddResizer.resetResizerEl()}},getRecordIndex:function(b){var c;if(a.isNumber(b))c=b;else{if(b instanceof YAHOO.widget.Record)return this._oRecordSet.getRecordIndex(b);
 
if(b=this.getTrEl(b))c=b.sectionRowIndex}if(a.isNumber(c))return(b=this.get("paginator"))?b.get("recordOffset")+c:c;return null},getRecord:function(a){var b=this._oRecordSet.getRecord(a);if(!b)(a=this.getTrEl(a))&&(b=this._oRecordSet.getRecord(a.id));return b instanceof YAHOO.widget.Record?this._oRecordSet.getRecord(b):null},getColumn:function(a){var b=this._oColumnSet.getColumn(a);if(!b){var c=this.getTdEl(a);if(c)b=this._oColumnSet.getColumn(this.getCellIndex(c));else if(c=this.getThEl(a))for(var a=
 
this._oColumnSet.flat,d=0,f=a.length;d<f;d++)a[d].getThEl().id===c.id&&(b=a[d])}return b},getColumnById:function(a){return this._oColumnSet.getColumnById(a)},getColumnSortDir:function(a,b){if(a.sortOptions&&a.sortOptions.defaultDir)if(a.sortOptions.defaultDir=="asc")a.sortOptions.defaultDir=h.CLASS_ASC;else if(a.sortOptions.defaultDir=="desc")a.sortOptions.defaultDir=h.CLASS_DESC;var c=a.sortOptions&&a.sortOptions.defaultDir?a.sortOptions.defaultDir:h.CLASS_ASC;(b=b||this.get("sortedBy"))&&b.key===
 
a.key&&(c=b.dir?b.dir===h.CLASS_ASC?h.CLASS_DESC:h.CLASS_ASC:c===h.CLASS_ASC?h.CLASS_DESC:h.CLASS_ASC);return c},doBeforeSortColumn:function(){this.showTableMessage(this.get("MSG_LOADING"),h.CLASS_LOADING);return true},sortColumn:function(b,c){if(b&&b instanceof YAHOO.widget.Column){b.sortable||f.addClass(this.getThEl(b),h.CLASS_SORTABLE);c&&(c!==h.CLASS_ASC&&c!==h.CLASS_DESC)&&(c=null);var d=c||this.getColumnSortDir(b),g=(this.get("sortedBy")||{}).key===b.key?true:false;if(this.doBeforeSortColumn(b,
 
d)){if(this.get("dynamicData")){g=this.getState();if(g.pagination)g.pagination.recordOffset=0;g.sortedBy={key:b.key,dir:d};var j=this.get("generateRequest")(g,this);this.unselectAllRows();this.unselectAllCells();this._oDataSource.sendRequest(j,{success:this.onDataReturnSetRows,failure:this.onDataReturnSetRows,argument:g,scope:this})}else{j=b.sortOptions&&a.isFunction(b.sortOptions.sortFunction)?b.sortOptions.sortFunction:null;if(!g||c||j){j=j||this.get("sortFunction");this._oRecordSet.sortRecords(j,
 
d==h.CLASS_DESC?true:false,b.sortOptions&&b.sortOptions.field?b.sortOptions.field:b.field)}else this._oRecordSet.reverseRecords();(g=this.get("paginator"))&&g.setPage(1,true);this.render();this.set("sortedBy",{key:b.key,dir:d,column:b})}this.fireEvent("columnSortEvent",{column:b,dir:d})}}},setColumnWidth:function(b,c){b instanceof YAHOO.widget.Column||(b=this.getColumn(b));if(b){if(a.isNumber(c)){c=c>b.minWidth?c:b.minWidth;b.width=c;this._setColumnWidth(b,c+"px");this.fireEvent("columnSetWidthEvent",
 
{column:b,width:c})}else if(c===null){b.width=c;this._setColumnWidth(b,"auto");this.validateColumnWidths(b);this.fireEvent("columnUnsetWidthEvent",{column:b})}this._clearTrTemplateEl()}},_setColumnWidth:function(a,b,c){if(a&&a.getKeyIndex()!==null){c=c||(b===""||b==="auto"?"visible":"hidden");h._bDynStylesFallback?this._setColumnWidthDynFunction(a,b,c):this._setColumnWidthDynStyles(a,b,c)}},_setColumnWidthDynStyles:function(a,b,c){var d=h._elDynStyleNode,f;if(!d){d=document.createElement("style");
 
d.type="text/css";d=document.getElementsByTagName("head").item(0).appendChild(d);h._elDynStyleNode=d}if(d){var g="."+this.getId()+"-col-"+a.getSanitizedKey()+" ."+h.CLASS_LINER;if(this._elTbody)this._elTbody.style.display="none";if(f=h._oDynStyles[g]){f.style.overflow=c;f.style.width=b}else if(d.styleSheet&&d.styleSheet.addRule){d.styleSheet.addRule(g,"overflow:"+c);d.styleSheet.addRule(g,"width:"+b);f=d.styleSheet.rules[d.styleSheet.rules.length-1];h._oDynStyles[g]=f}else if(d.sheet&&d.sheet.insertRule){d.sheet.insertRule(g+
 
" {overflow:"+c+";width:"+b+";}",d.sheet.cssRules.length);f=d.sheet.cssRules[d.sheet.cssRules.length-1];h._oDynStyles[g]=f}if(this._elTbody)this._elTbody.style.display=""}if(!f){h._bDynStylesFallback=true;this._setColumnWidthDynFunction(a,b)}},_setColumnWidthDynFunction:function(a,b,c){b=="auto"&&(b="");var d=this._elTbody?this._elTbody.rows.length:0;if(!this._aDynFunctions[d]){var f,h,g=["var colIdx=oColumn.getKeyIndex();","oColumn.getThLinerEl().style.overflow="];f=d-1;for(h=2;f>=0;--f){g[h++]=
 
"this._elTbody.rows[";g[h++]=f;g[h++]="].cells[colIdx].firstChild.style.overflow="}g[h]="sOverflow;";g[h+1]="oColumn.getThLinerEl().style.width=";f=d-1;for(h=h+2;f>=0;--f){g[h++]="this._elTbody.rows[";g[h++]=f;g[h++]="].cells[colIdx].firstChild.style.width="}g[h]="sWidth;";this._aDynFunctions[d]=new Function("oColumn","sWidth","sOverflow",g.join(""))}(d=this._aDynFunctions[d])&&d.call(this,a,b,c)},validateColumnWidths:function(a){var b=this._elColgroup,c=b.cloneNode(true),d=false,h=this._oColumnSet.keys,
 
g;if(a&&!a.hidden&&!a.width&&a.getKeyIndex()!==null){g=a.getThLinerEl();if(a.minWidth>0&&g.offsetWidth<a.minWidth){c.childNodes[a.getKeyIndex()].style.width=a.minWidth+(parseInt(f.getStyle(g,"paddingLeft"),10)|0)+(parseInt(f.getStyle(g,"paddingRight"),10)|0)+"px";d=true}else a.maxAutoWidth>0&&g.offsetWidth>a.maxAutoWidth&&this._setColumnWidth(a,a.maxAutoWidth+"px","hidden")}else for(var j=0,o=h.length;j<o;j++){a=h[j];if(!a.hidden&&!a.width){g=a.getThLinerEl();if(a.minWidth>0&&g.offsetWidth<a.minWidth){c.childNodes[j].style.width=
 
a.minWidth+(parseInt(f.getStyle(g,"paddingLeft"),10)|0)+(parseInt(f.getStyle(g,"paddingRight"),10)|0)+"px";d=true}else a.maxAutoWidth>0&&g.offsetWidth>a.maxAutoWidth&&this._setColumnWidth(a,a.maxAutoWidth+"px","hidden")}}if(d){b.parentNode.replaceChild(c,b);this._elColgroup=c}},_clearMinWidth:function(a){if(a.getKeyIndex()!==null)this._elColgroup.childNodes[a.getKeyIndex()].style.width=""},_restoreMinWidth:function(a){if(a.minWidth&&a.getKeyIndex()!==null)this._elColgroup.childNodes[a.getKeyIndex()].style.width=
 
a.minWidth+"px"},hideColumn:function(a){a instanceof YAHOO.widget.Column||(a=this.getColumn(a));if(a&&!a.hidden&&a.getTreeIndex()!==null){for(var b=this.getTbodyEl().rows,c=b.length,d=this._oColumnSet.getDescendants(a),g=0,j=d.length;g<j;g++){var n=d[g];n.hidden=true;f.addClass(n.getThEl(),h.CLASS_HIDDEN);var o=n.getKeyIndex();if(o!==null){this._clearMinWidth(a);for(var m=0;m<c;m++)f.addClass(b[m].cells[o],h.CLASS_HIDDEN)}this.fireEvent("columnHideEvent",{column:n})}this._repaintOpera();this._clearTrTemplateEl()}},
 
showColumn:function(a){a instanceof YAHOO.widget.Column||(a=this.getColumn(a));if(a&&a.hidden&&a.getTreeIndex()!==null){for(var b=this.getTbodyEl().rows,c=b.length,d=this._oColumnSet.getDescendants(a),g=0,j=d.length;g<j;g++){var n=d[g];n.hidden=false;f.removeClass(n.getThEl(),h.CLASS_HIDDEN);var o=n.getKeyIndex();if(o!==null){this._restoreMinWidth(a);for(var m=0;m<c;m++)f.removeClass(b[m].cells[o],h.CLASS_HIDDEN)}this.fireEvent("columnShowEvent",{column:n})}this._clearTrTemplateEl()}},removeColumn:function(a){a instanceof
 
YAHOO.widget.Column||(a=this.getColumn(a));if(a){var b=a.getTreeIndex();if(b!==null){var c,d=a.getKeyIndex();if(d===null){var f=[],g=this._oColumnSet.getDescendants(a);c=0;for(a=g.length;c<a;c++){var j=g[c].getKeyIndex();j!==null&&(f[f.length]=j)}f.length>0&&(d=f)}else d=[d];if(d!==null){d.sort(function(a,b){return YAHOO.util.Sort.compare(a,b)});this._destroyTheadEl();c=this._oColumnSet.getDefinitions();a=c.splice(b,1)[0];this._initColumnSet(c);this._initTheadEl();for(c=d.length-1;c>-1;c--)this._removeColgroupColEl(d[c]);
 
var o=this._elTbody.rows;if(o.length>0){var m=this.get("renderLoopSize"),b=o.length;this._oChainRender.add({method:function(a){if(this instanceof h&&this._sId){for(var b=a.nCurrentRow,e=m>0?Math.min(b+m,o.length):o.length,c=a.aIndexes,d;b<e;++b)for(d=c.length-1;d>-1;d--)o[b].removeChild(o[b].childNodes[c[d]]);a.nCurrentRow=b}},iterations:m>0?Math.ceil(b/m):1,argument:{nCurrentRow:0,aIndexes:d},scope:this,timeout:m>0?0:-1});this._runRenderChain()}this.fireEvent("columnRemoveEvent",{column:a});return a}}}},
 
insertColumn:function(b,c){if(b instanceof YAHOO.widget.Column)b=b.getDefinition();else if(b.constructor!==Object)return;var d=this._oColumnSet;if(!a.isValue(c)||!a.isNumber(c))c=d.tree[0].length;this._destroyTheadEl();var f=this._oColumnSet.getDefinitions();f.splice(c,0,b);this._initColumnSet(f);this._initTheadEl();var d=this._oColumnSet,f=d.tree[0][c],g,j=[],n=d.getDescendants(f),d=0;for(g=n.length;d<g;d++){var o=n[d].getKeyIndex();o!==null&&(j[j.length]=o)}if(j.length>0){for(var m=j.sort(function(a,
 
b){return YAHOO.util.Sort.compare(a,b)})[0],d=j.length-1;d>-1;d--)this._insertColgroupColEl(j[d]);var r=this._elTbody.rows;if(r.length>0){var s=this.get("renderLoopSize"),n=r.length,o=[],t,d=0;for(g=j.length;d<g;d++){var u=j[d];t=this._getTrTemplateEl().childNodes[d].cloneNode(true);t=this._formatTdEl(this._oColumnSet.keys[u],t,u,u===this._oColumnSet.keys.length-1);o[u]=t}this._oChainRender.add({method:function(a){if(this instanceof h&&this._sId){for(var b=a.nCurrentRow,e,c=a.descKeyIndexes,d=s>0?
 
Math.min(b+s,r.length):r.length,i;b<d;++b){i=r[b].childNodes[m]||null;for(e=c.length-1;e>-1;e--)r[b].insertBefore(a.aTdTemplates[c[e]].cloneNode(true),i)}a.nCurrentRow=b}},iterations:s>0?Math.ceil(n/s):1,argument:{nCurrentRow:0,aTdTemplates:o,descKeyIndexes:j},scope:this,timeout:s>0?0:-1});this._runRenderChain()}this.fireEvent("columnInsertEvent",{column:b,index:c});return f}},reorderColumn:function(a,b){a instanceof YAHOO.widget.Column||(a=this.getColumn(a));if(a&&YAHOO.lang.isNumber(b)){var c=a.getTreeIndex();
 
if(c!==null&&c!==b){var d,f,g=a.getKeyIndex(),j,o=[],m;if(g===null){j=this._oColumnSet.getDescendants(a);d=0;for(f=j.length;d<f;d++){m=j[d].getKeyIndex();m!==null&&(o[o.length]=m)}o.length>0&&(g=o)}else g=[g];if(g!==null){g.sort(function(a,b){return YAHOO.util.Sort.compare(a,b)});this._destroyTheadEl();var r=this._oColumnSet.getDefinitions();d=r.splice(c,1)[0];r.splice(b,0,d);this._initColumnSet(r);this._initTheadEl();var r=this._oColumnSet.tree[0][b],s=r.getKeyIndex();if(s===null){o=[];j=this._oColumnSet.getDescendants(r);
 
d=0;for(f=j.length;d<f;d++){m=j[d].getKeyIndex();m!==null&&(o[o.length]=m)}o.length>0&&(s=o)}else s=[s];var t=s.sort(function(a,b){return YAHOO.util.Sort.compare(a,b)})[0];this._reorderColgroupColEl(g,t);var u=this._elTbody.rows;if(u.length>0){var w=this.get("renderLoopSize");d=u.length;this._oChainRender.add({method:function(a){if(this instanceof h&&this._sId){for(var b=a.nCurrentRow,e,c,d,i=w>0?Math.min(b+w,u.length):u.length,f=a.aIndexes,k;b<i;++b){c=[];k=u[b];for(e=f.length-1;e>-1;e--)c.push(k.removeChild(k.childNodes[f[e]]));
 
d=k.childNodes[t]||null;for(e=c.length-1;e>-1;e--)k.insertBefore(c[e],d)}a.nCurrentRow=b}},iterations:w>0?Math.ceil(d/w):1,argument:{nCurrentRow:0,aIndexes:g},scope:this,timeout:w>0?0:-1});this._runRenderChain()}this.fireEvent("columnReorderEvent",{column:r,oldIndex:c});return r}}}},selectColumn:function(a){if((a=this.getColumn(a))&&!a.selected&&a.getKeyIndex()!==null){a.selected=true;var b=a.getThEl();f.addClass(b,h.CLASS_SELECTED);var c=this.getTbodyEl().rows;this._oChainRender.add({method:function(a){this instanceof
 
h&&(this._sId&&c[a.rowIndex]&&c[a.rowIndex].cells[a.cellIndex])&&f.addClass(c[a.rowIndex].cells[a.cellIndex],h.CLASS_SELECTED);a.rowIndex++},scope:this,iterations:c.length,argument:{rowIndex:0,cellIndex:a.getKeyIndex()}});this._clearTrTemplateEl();this._elTbody.style.display="none";this._runRenderChain();this._elTbody.style.display="";this.fireEvent("columnSelectEvent",{column:a})}},unselectColumn:function(a){if((a=this.getColumn(a))&&a.selected&&a.getKeyIndex()!==null){a.selected=false;var b=a.getThEl();
 
f.removeClass(b,h.CLASS_SELECTED);var c=this.getTbodyEl().rows;this._oChainRender.add({method:function(a){this instanceof h&&(this._sId&&c[a.rowIndex]&&c[a.rowIndex].cells[a.cellIndex])&&f.removeClass(c[a.rowIndex].cells[a.cellIndex],h.CLASS_SELECTED);a.rowIndex++},scope:this,iterations:c.length,argument:{rowIndex:0,cellIndex:a.getKeyIndex()}});this._clearTrTemplateEl();this._elTbody.style.display="none";this._runRenderChain();this._elTbody.style.display="";this.fireEvent("columnUnselectEvent",{column:a})}},
 
getSelectedColumns:function(){for(var a=[],b=this._oColumnSet.keys,c=0,d=b.length;c<d;c++)b[c].selected&&(a[a.length]=b[c]);return a},highlightColumn:function(a){if((a=this.getColumn(a))&&a.getKeyIndex()!==null){var b=a.getThEl();f.addClass(b,h.CLASS_HIGHLIGHTED);var c=this.getTbodyEl().rows;this._oChainRender.add({method:function(a){this instanceof h&&(this._sId&&c[a.rowIndex]&&c[a.rowIndex].cells[a.cellIndex])&&f.addClass(c[a.rowIndex].cells[a.cellIndex],h.CLASS_HIGHLIGHTED);a.rowIndex++},scope:this,
 
iterations:c.length,argument:{rowIndex:0,cellIndex:a.getKeyIndex()},timeout:-1});this._elTbody.style.display="none";this._runRenderChain();this._elTbody.style.display="";this.fireEvent("columnHighlightEvent",{column:a})}},unhighlightColumn:function(a){if((a=this.getColumn(a))&&a.getKeyIndex()!==null){var b=a.getThEl();f.removeClass(b,h.CLASS_HIGHLIGHTED);var c=this.getTbodyEl().rows;this._oChainRender.add({method:function(a){this instanceof h&&(this._sId&&c[a.rowIndex]&&c[a.rowIndex].cells[a.cellIndex])&&
 
f.removeClass(c[a.rowIndex].cells[a.cellIndex],h.CLASS_HIGHLIGHTED);a.rowIndex++},scope:this,iterations:c.length,argument:{rowIndex:0,cellIndex:a.getKeyIndex()},timeout:-1});this._elTbody.style.display="none";this._runRenderChain();this._elTbody.style.display="";this.fireEvent("columnUnhighlightEvent",{column:a})}},addRow:function(e,c){if((!a.isNumber(c)||!(c<0||c>this._oRecordSet.getLength()))&&e&&a.isObject(e)){var d=this._oRecordSet.addRecord(e,c);if(d){var f,g=this.get("paginator");if(g){f=g.get("totalRecords");
 
f!==b.Paginator.VALUE_UNLIMITED&&g.set("totalRecords",f+1);f=this.getRecordIndex(d);g=g.getPageRecords()[1];f<=g&&this.render();this.fireEvent("rowAddEvent",{record:d})}else{f=this.getRecordIndex(d);if(a.isNumber(f)){this._oChainRender.add({method:function(a){if(this instanceof h&&this._sId){var b=a.record,a=a.recIndex,e=this._addTrEl(b);if(e){var c=this._elTbody.rows[a]?this._elTbody.rows[a]:null;this._elTbody.insertBefore(e,c);a===0&&this._setFirstRow();c===null&&this._setLastRow();this._setRowStripes();
 
this.hideTableMessage();this.fireEvent("rowAddEvent",{record:b})}}},argument:{record:d,recIndex:f},scope:this,timeout:this.get("renderLoopSize")>0?0:-1});this._runRenderChain()}}}}},addRows:function(e,c){if((!a.isNumber(c)||!(c<0||c>this._oRecordSet.getLength()))&&a.isArray(e)){var d=this._oRecordSet.addRecords(e,c);if(d){var f=this.getRecordIndex(d[0]),g=this.get("paginator");if(g){var j=g.get("totalRecords");j!==b.Paginator.VALUE_UNLIMITED&&g.set("totalRecords",j+d.length);g=g.getPageRecords()[1];
 
f<=g&&this.render();this.fireEvent("rowsAddEvent",{records:d})}else{var n=this.get("renderLoopSize"),o=f+e.length,g=f>=this._elTbody.rows.length;this._oChainRender.add({method:function(a){if(this instanceof h&&this._sId){for(var b=a.aRecords,e=a.nCurrentRow,c=a.nCurrentRecord,d=n>0?Math.min(e+n,o):o,i=document.createDocumentFragment(),f=this._elTbody.rows[e]?this._elTbody.rows[e]:null;e<d;e++,c++)i.appendChild(this._addTrEl(b[c]));this._elTbody.insertBefore(i,f);a.nCurrentRow=e;a.nCurrentRecord=c}},
 
iterations:n>0?Math.ceil(o/n):1,argument:{nCurrentRow:f,nCurrentRecord:0,aRecords:d},scope:this,timeout:n>0?0:-1});this._oChainRender.add({method:function(a){a.recIndex===0&&this._setFirstRow();a.isLast&&this._setLastRow();this._setRowStripes();this.fireEvent("rowsAddEvent",{records:d})},argument:{recIndex:f,isLast:g},scope:this,timeout:-1});this._runRenderChain();this.hideTableMessage()}}}},updateRow:function(b,c){var d=b;a.isNumber(d)||(d=this.getRecordIndex(b));if(a.isNumber(d)&&d>=0){var f=this._oRecordSet.getRecord(d);
 
if(f){var g=this._oRecordSet.setRecord(c,d),j=this.getTrEl(f),n=f?f.getData():null;if(g){for(var o=this._aSelections||[],m=0,f=f.getId(),r=g.getId();m<o.length;m++)if(o[m]===f)o[m]=r;else if(o[m].recordId===f)o[m].recordId=r;if(this._oAnchorRecord&&this._oAnchorRecord.getId()===f)this._oAnchorRecord=g;if(this._oAnchorCell&&this._oAnchorCell.record.getId()===f)this._oAnchorCell.record=g;this._oChainRender.add({method:function(){if(this instanceof h&&this._sId){var a=this.get("paginator");if(a){var b=
 
a.getPageRecords()[0],a=a.getPageRecords()[1];(d>=b||d<=a)&&this.render()}else j?this._updateTrEl(j,g):this.getTbodyEl().appendChild(this._addTrEl(g));this.fireEvent("rowUpdateEvent",{record:g,oldData:n})}},scope:this,timeout:this.get("renderLoopSize")>0?0:-1});this._runRenderChain()}}}},updateRows:function(b,c){if(a.isArray(c)){var d=b,f=this._oRecordSet,g=f.getLength();a.isNumber(b)||(d=this.getRecordIndex(b));if(a.isNumber(d)&&d>=0&&d<f.getLength()){var j=d+c.length,n=f.getRecords(d,c.length),
 
o=f.setRecords(c,d);if(o){for(var f=this._aSelections||[],m=0,r,s,t,u,w=this._oAnchorRecord?this._oAnchorRecord.getId():null,x=this._oAnchorCell?this._oAnchorCell.record.getId():null;m<n.length;m++){u=n[m].getId();s=o[m];t=s.getId();for(r=0;r<f.length;r++)if(f[r]===u)f[r]=t;else if(f[r].recordId===u)f[r].recordId=t;if(w&&w===u)this._oAnchorRecord=s;if(x&&x===u)this._oAnchorCell.record=s}if(m=this.get("paginator")){f=m.getPageRecords()[0];m=m.getPageRecords()[1];(d>=f||j<=m)&&this.render();this.fireEvent("rowsAddEvent",
 
{newRecords:o,oldRecords:n})}else{var v=this.get("renderLoopSize"),f=c.length,m=j>=g,y=j>g;this._oChainRender.add({method:function(a){if(this instanceof h&&this._sId){for(var b=a.aRecords,e=a.nCurrentRow,c=a.nDataPointer,i=v>0?Math.min(e+v,d+b.length):d+b.length;e<i;e++,c++)y&&e>=g?this._elTbody.appendChild(this._addTrEl(b[c])):this._updateTrEl(this._elTbody.rows[e],b[c]);a.nCurrentRow=e;a.nDataPointer=c}},iterations:v>0?Math.ceil(f/v):1,argument:{nCurrentRow:d,aRecords:o,nDataPointer:0,isAdding:y},
 
scope:this,timeout:v>0?0:-1});this._oChainRender.add({method:function(a){a.recIndex===0&&this._setFirstRow();a.isLast&&this._setLastRow();this._setRowStripes();this.fireEvent("rowsAddEvent",{newRecords:o,oldRecords:n})},argument:{recIndex:d,isLast:m},scope:this,timeout:-1});this._runRenderChain();this.hideTableMessage()}}}}},deleteRow:function(e){var c=a.isNumber(e)?e:this.getRecordIndex(e);if(a.isNumber(c))if(e=this.getRecord(c)){for(var d=this.getTrIndex(c),e=e.getId(),f=this._aSelections||[],g=
 
f.length-1;g>-1;g--)(a.isString(f[g])&&f[g]===e||a.isObject(f[g])&&f[g].recordId===e)&&f.splice(g,1);var j=this._oRecordSet.deleteRecord(c);if(j)if(e=this.get("paginator")){f=e.get("totalRecords");g=e.getPageRecords();f!==b.Paginator.VALUE_UNLIMITED&&e.set("totalRecords",f-1);(!g||c<=g[1])&&this.render();this._oChainRender.add({method:function(){this instanceof h&&this._sId&&this.fireEvent("rowDeleteEvent",{recordIndex:c,oldData:j,trElIndex:d})},scope:this,timeout:this.get("renderLoopSize")>0?0:-1});
 
this._runRenderChain()}else if(a.isNumber(d)){this._oChainRender.add({method:function(){if(this instanceof h&&this._sId){var a=c===this._oRecordSet.getLength();this._deleteTrEl(d);if(this._elTbody.rows.length>0){d===0&&this._setFirstRow();a&&this._setLastRow();d!=this._elTbody.rows.length&&this._setRowStripes(d)}this.fireEvent("rowDeleteEvent",{recordIndex:c,oldData:j,trElIndex:d})}},scope:this,timeout:this.get("renderLoopSize")>0?0:-1});this._runRenderChain();return}}return null},deleteRows:function(e,
 
c){var d=a.isNumber(e)?e:this.getRecordIndex(e);if(a.isNumber(d)){var f=this.getRecord(d);if(f){for(var g=this.getTrIndex(d),f=f.getId(),j=this._aSelections||[],n=j.length-1;n>-1;n--)(a.isString(j[n])&&j[n]===f||a.isObject(j[n])&&j[n].recordId===f)&&j.splice(n,1);var o=f=d;if(c&&a.isNumber(c)){f=c>0?d+c-1:d;o=c>0?d:d+c+1;c=c>0?c:c*-1;if(o<0){o=0;c=f-o+1}}else c=1;var m=this._oRecordSet.deleteRecords(o,c);if(m){var d=this.get("paginator"),r=this.get("renderLoopSize");if(d){g=d.get("totalRecords");
 
f=d.getPageRecords();g!==b.Paginator.VALUE_UNLIMITED&&d.set("totalRecords",g-m.length);(!f||o<=f[1])&&this.render();this._oChainRender.add({method:function(){this instanceof h&&this._sId&&this.fireEvent("rowsDeleteEvent",{recordIndex:o,oldData:m,count:c})},scope:this,timeout:r>0?0:-1});this._runRenderChain();return}if(a.isNumber(g)){var s=o;this._oChainRender.add({method:function(a){if(this instanceof h&&this._sId){for(var b=a.nCurrentRow,e=r>0?Math.max(b-r,s)-1:s-1;b>e;--b)this._deleteTrEl(b);a.nCurrentRow=
 
b}},iterations:r>0?Math.ceil(c/r):1,argument:{nCurrentRow:f},scope:this,timeout:r>0?0:-1});this._oChainRender.add({method:function(){if(this._elTbody.rows.length>0){this._setFirstRow();this._setLastRow();this._setRowStripes()}this.fireEvent("rowsDeleteEvent",{recordIndex:o,oldData:m,count:c})},scope:this,timeout:-1});this._runRenderChain();return}}}}return null},formatCell:function(a,b,c){b||(b=this.getRecord(a));c||(c=this.getColumn(this.getCellIndex(a.parentNode)));if(b&&c){var d=b.getData(c.field),
 
f=typeof c.formatter==="function"?c.formatter:h.Formatter[c.formatter+""]||h.Formatter.defaultFormatter;f?f.call(this,a,b,c,d):a.innerHTML=d;this.fireEvent("cellFormatEvent",{record:b,column:c,key:c.key,el:a})}},updateCell:function(a,b,c,d){if((b=b instanceof YAHOO.widget.Column?b:this.getColumn(b))&&b.getField()&&a instanceof YAHOO.widget.Record){var f=b.getField(),g=a.getData(f);this._oRecordSet.updateRecordValue(a,f,c);var j=this.getTdEl({record:a,column:b});if(j){this._oChainRender.add({method:function(){if(this instanceof
 
h&&this._sId){this.formatCell(j.firstChild,a,b);this.fireEvent("cellUpdateEvent",{record:a,column:b,oldData:g})}},scope:this,timeout:this.get("renderLoopSize")>0?0:-1});d||this._runRenderChain()}else this.fireEvent("cellUpdateEvent",{record:a,column:b,oldData:g})}},_updatePaginator:function(a){var b=this.get("paginator");b&&a!==b&&b.unsubscribe("changeRequest",this.onPaginatorChangeRequest,this,true);a&&a.subscribe("changeRequest",this.onPaginatorChangeRequest,this,true)},_handlePaginatorChange:function(a){if(a.prevValue!==
 
a.newValue){var b=a.newValue,c=a.prevValue,a=this._defaultPaginatorContainers();if(c){c.getContainerNodes()[0]==a[0]&&c.set("containers",[]);c.destroy();if(a[0])if(b&&!b.getContainerNodes().length)b.set("containers",a);else for(c=a.length-1;c>=0;--c)a[c]&&a[c].parentNode.removeChild(a[c])}this._bInit||this.render();b&&this.renderPaginator()}},_defaultPaginatorContainers:function(a){var b=this._sId+"-paginator0",c=this._sId+"-paginator1",d=f.get(b),g=f.get(c);if(a&&(!d||!g)){if(!d){d=document.createElement("div");
 
d.id=b;f.addClass(d,h.CLASS_PAGINATOR);this._elContainer.insertBefore(d,this._elContainer.firstChild)}if(!g){g=document.createElement("div");g.id=c;f.addClass(g,h.CLASS_PAGINATOR);this._elContainer.appendChild(g)}}return[d,g]},_destroyPaginator:function(){var a=this.get("paginator");a&&a.destroy()},renderPaginator:function(){var a=this.get("paginator");if(a){a.getContainerNodes().length||a.set("containers",this._defaultPaginatorContainers(true));a.render()}},doBeforePaginatorChange:function(){this.showTableMessage(this.get("MSG_LOADING"),
 
h.CLASS_LOADING);return true},onPaginatorChangeRequest:function(a){if(this.doBeforePaginatorChange(a))if(this.get("dynamicData")){var b=this.getState();b.pagination=a;a=this.get("generateRequest")(b,this);this.unselectAllRows();this.unselectAllCells();this._oDataSource.sendRequest(a,{success:this.onDataReturnSetRows,failure:this.onDataReturnSetRows,argument:b,scope:this})}else{a.paginator.setStartIndex(a.recordOffset,true);a.paginator.setRowsPerPage(a.rowsPerPage,true);this.render()}},_elLastHighlightedTd:null,
 
_aSelections:null,_oAnchorRecord:null,_oAnchorCell:null,_unselectAllTrEls:function(){var a=f.getElementsByClassName(h.CLASS_SELECTED,"tr",this._elTbody);f.removeClass(a,h.CLASS_SELECTED)},_getSelectionTrigger:function(){var a=this.get("selectionMode"),b={},c,d,f,g;if(a=="cellblock"||a=="cellrange"||a=="singlecell"){if(a=this.getLastSelectedCell()){c=this.getRecord(a.recordId);d=this.getRecordIndex(c);f=this.getTrEl(c);g=this.getTrIndex(f);if(g===null)return null;b.record=c;b.recordIndex=d;b.el=this.getTdEl(a);
 
b.trIndex=g;b.column=this.getColumn(a.columnKey);b.colKeyIndex=b.column.getKeyIndex();b.cell=a;return b}}else if(c=this.getLastSelectedRecord()){c=this.getRecord(c);d=this.getRecordIndex(c);f=this.getTrEl(c);g=this.getTrIndex(f);if(g===null)return null;b.record=c;b.recordIndex=d;b.el=f;b.trIndex=g;return b}return null},_getSelectionAnchor:function(a){var b=this.get("selectionMode"),c={},d;if(b=="cellblock"||b=="cellrange"||b=="singlecell"){var f=this._oAnchorCell;if(!f)if(a)f=this._oAnchorCell=a.cell;
 
else return null;b=this._oAnchorCell.record;a=this._oRecordSet.getRecordIndex(b);d=this.getTrIndex(b);d===null&&(d=a<this.getRecordIndex(this.getFirstTrEl())?0:this.getRecordIndex(this.getLastTrEl()));c.record=b;c.recordIndex=a;c.trIndex=d;c.column=this._oAnchorCell.column;c.colKeyIndex=c.column.getKeyIndex();c.cell=f}else{b=this._oAnchorRecord;if(!b)if(a)b=this._oAnchorRecord=a.record;else return null;a=this.getRecordIndex(b);d=this.getTrIndex(b);d===null&&(d=a<this.getRecordIndex(this.getFirstTrEl())?
 
0:this.getRecordIndex(this.getLastTrEl()));c.record=b;c.recordIndex=a;c.trIndex=d}return c},_handleStandardSelectionByMouse:function(a){var b=this.getTrEl(a.target);if(b){var c=a.event,d=c.shiftKey,c=c.ctrlKey||navigator.userAgent.toLowerCase().indexOf("mac")!=-1&&c.metaKey,b=this.getRecord(b),f=this._oRecordSet.getRecordIndex(b),g=this._getSelectionAnchor();if(d&&c)if(g)if(this.isSelected(g.record))if(g.recordIndex<f)for(a=g.recordIndex+1;a<=f;a++)this.isSelected(a)||this.selectRow(a);else for(a=
 
g.recordIndex-1;a>=f;a--)this.isSelected(a)||this.selectRow(a);else{if(g.recordIndex<f)for(a=g.recordIndex+1;a<=f-1;a++)this.isSelected(a)&&this.unselectRow(a);else for(a=f+1;a<=g.recordIndex-1;a++)this.isSelected(a)&&this.unselectRow(a);this.selectRow(b)}else{this._oAnchorRecord=b;this.isSelected(b)?this.unselectRow(b):this.selectRow(b)}else if(d){this.unselectAllRows();if(g)if(g.recordIndex<f)for(a=g.recordIndex;a<=f;a++)this.selectRow(a);else for(a=g.recordIndex;a>=f;a--)this.selectRow(a);else{this._oAnchorRecord=
 
b;this.selectRow(b)}}else if(c){this._oAnchorRecord=b;this.isSelected(b)?this.unselectRow(b):this.selectRow(b)}else this._handleSingleSelectionByMouse(a)}},_handleStandardSelectionByKey:function(a){var b=g.getCharCode(a);if(b==38||b==40){var c=a.shiftKey,d=this._getSelectionTrigger();if(!d)return null;g.stopEvent(a);var f=this._getSelectionAnchor(d);c?b==40&&f.recordIndex<=d.trIndex?this.selectRow(this.getNextTrEl(d.el)):b==38&&f.recordIndex>=d.trIndex?this.selectRow(this.getPreviousTrEl(d.el)):this.unselectRow(d.el):
 
this._handleSingleSelectionByKey(a)}},_handleSingleSelectionByMouse:function(a){if(a=this.getTrEl(a.target)){this._oAnchorRecord=a=this.getRecord(a);this.unselectAllRows();this.selectRow(a)}},_handleSingleSelectionByKey:function(a){var b=g.getCharCode(a);if(b==38||b==40){var c=this._getSelectionTrigger();if(!c)return null;g.stopEvent(a);var d;if(b==38){d=this.getPreviousTrEl(c.el);d===null&&(d=this.getFirstTrEl())}else if(b==40){d=this.getNextTrEl(c.el);d===null&&(d=this.getLastTrEl())}this.unselectAllRows();
 
this.selectRow(d);this._oAnchorRecord=this.getRecord(d)}},_handleCellBlockSelectionByMouse:function(a){var b=this.getTdEl(a.target);if(b){var c=a.event,d=c.shiftKey,f=c.ctrlKey||navigator.userAgent.toLowerCase().indexOf("mac")!=-1&&c.metaKey,g=this.getTrEl(b),c=this.getTrIndex(g),h=this.getColumn(b),j=h.getKeyIndex(),m=this.getRecord(g),r=this._oRecordSet.getRecordIndex(m),s={record:m,column:h},h=this._getSelectionAnchor(),m=this.getTbodyEl().rows;if(d&&f)if(h)if(this.isSelected(h.cell))if(h.recordIndex===
 
r)if(h.colKeyIndex<j)for(a=h.colKeyIndex+1;a<=j;a++)this.selectCell(g.cells[a]);else{if(j<h.colKeyIndex)for(a=j;a<h.colKeyIndex;a++)this.selectCell(g.cells[a])}else if(h.recordIndex<r){b=Math.min(h.colKeyIndex,j);j=Math.max(h.colKeyIndex,j);for(a=h.trIndex;a<=c;a++)for(d=b;d<=j;d++)this.selectCell(m[a].cells[d])}else{b=Math.min(h.trIndex,j);j=Math.max(h.trIndex,j);for(a=h.trIndex;a>=c;a--)for(d=j;d>=b;d--)this.selectCell(m[a].cells[d])}else{if(h.recordIndex===r)if(h.colKeyIndex<j)for(a=h.colKeyIndex+
 
1;a<j;a++)this.unselectCell(g.cells[a]);else if(j<h.colKeyIndex)for(a=j+1;a<h.colKeyIndex;a++)this.unselectCell(g.cells[a]);if(h.recordIndex<r)for(a=h.trIndex;a<=c;a++){g=m[a];for(d=0;d<g.cells.length;d++)g.sectionRowIndex===h.trIndex?d>h.colKeyIndex&&this.unselectCell(g.cells[d]):g.sectionRowIndex===c?d<j&&this.unselectCell(g.cells[d]):this.unselectCell(g.cells[d])}else for(a=c;a<=h.trIndex;a++){g=m[a];for(d=0;d<g.cells.length;d++)g.sectionRowIndex==c?d>j&&this.unselectCell(g.cells[d]):g.sectionRowIndex==
 
h.trIndex?d<h.colKeyIndex&&this.unselectCell(g.cells[d]):this.unselectCell(g.cells[d])}this.selectCell(b)}else{this._oAnchorCell=s;this.isSelected(s)?this.unselectCell(s):this.selectCell(s)}else if(d){this.unselectAllCells();if(h)if(h.recordIndex===r)if(h.colKeyIndex<j)for(a=h.colKeyIndex;a<=j;a++)this.selectCell(g.cells[a]);else{if(j<h.colKeyIndex)for(a=j;a<=h.colKeyIndex;a++)this.selectCell(g.cells[a])}else if(h.recordIndex<r){b=Math.min(h.colKeyIndex,j);j=Math.max(h.colKeyIndex,j);for(a=h.trIndex;a<=
 
c;a++)for(d=b;d<=j;d++)this.selectCell(m[a].cells[d])}else{b=Math.min(h.colKeyIndex,j);j=Math.max(h.colKeyIndex,j);for(a=c;a<=h.trIndex;a++)for(d=b;d<=j;d++)this.selectCell(m[a].cells[d])}else{this._oAnchorCell=s;this.selectCell(s)}}else if(f){this._oAnchorCell=s;this.isSelected(s)?this.unselectCell(s):this.selectCell(s)}else this._handleSingleCellSelectionByMouse(a)}},_handleCellBlockSelectionByKey:function(a){var b=g.getCharCode(a),c=a.shiftKey;if(b==9||!c)this._handleSingleCellSelectionByKey(a);
 
else if(b>36&&b<41){c=this._getSelectionTrigger();if(!c)return null;g.stopEvent(a);var d=this._getSelectionAnchor(c),f,h,a=this.getTbodyEl().rows;h=c.el.parentNode;if(b==40)if(d.recordIndex<=c.recordIndex){if(a=this.getNextTrEl(c.el)){f=d.colKeyIndex;b=c.colKeyIndex;if(f>b)for(d=f;d>=b;d--){h=a.cells[d];this.selectCell(h)}else for(d=f;d<=b;d++){h=a.cells[d];this.selectCell(h)}}}else{f=Math.min(d.colKeyIndex,c.colKeyIndex);b=Math.max(d.colKeyIndex,c.colKeyIndex);for(d=f;d<=b;d++)this.unselectCell(h.cells[d])}else if(b==
 
38)if(d.recordIndex>=c.recordIndex){if(a=this.getPreviousTrEl(c.el)){f=d.colKeyIndex;b=c.colKeyIndex;if(f>b)for(d=f;d>=b;d--){h=a.cells[d];this.selectCell(h)}else for(d=f;d<=b;d++){h=a.cells[d];this.selectCell(h)}}}else{f=Math.min(d.colKeyIndex,c.colKeyIndex);b=Math.max(d.colKeyIndex,c.colKeyIndex);for(d=f;d<=b;d++)this.unselectCell(h.cells[d])}else if(b==39)if(d.colKeyIndex<=c.colKeyIndex){if(c.colKeyIndex<h.cells.length-1){f=d.trIndex;b=c.trIndex;if(f>b)for(d=f;d>=b;d--){h=a[d].cells[c.colKeyIndex+
 
1];this.selectCell(h)}else for(d=f;d<=b;d++){h=a[d].cells[c.colKeyIndex+1];this.selectCell(h)}}}else{f=Math.min(d.trIndex,c.trIndex);b=Math.max(d.trIndex,c.trIndex);for(d=f;d<=b;d++)this.unselectCell(a[d].cells[c.colKeyIndex])}else if(b==37)if(d.colKeyIndex>=c.colKeyIndex){if(c.colKeyIndex>0){f=d.trIndex;b=c.trIndex;if(f>b)for(d=f;d>=b;d--){h=a[d].cells[c.colKeyIndex-1];this.selectCell(h)}else for(d=f;d<=b;d++){h=a[d].cells[c.colKeyIndex-1];this.selectCell(h)}}}else{f=Math.min(d.trIndex,c.trIndex);
 
b=Math.max(d.trIndex,c.trIndex);for(d=f;d<=b;d++)this.unselectCell(a[d].cells[c.colKeyIndex])}}},_handleCellRangeSelectionByMouse:function(a){var b=this.getTdEl(a.target);if(b){var c=a.event,d=c.shiftKey,f=c.ctrlKey||navigator.userAgent.toLowerCase().indexOf("mac")!=-1&&c.metaKey,g=this.getTrEl(b),c=this.getTrIndex(g),h=this.getColumn(b),j=h.getKeyIndex(),m=this.getRecord(g),r=this._oRecordSet.getRecordIndex(m),s={record:m,column:h},h=this._getSelectionAnchor(),m=this.getTbodyEl().rows;if(d&&f)if(h)if(this.isSelected(h.cell))if(h.recordIndex===
 
r)if(h.colKeyIndex<j)for(a=h.colKeyIndex+1;a<=j;a++)this.selectCell(g.cells[a]);else{if(j<h.colKeyIndex)for(a=j;a<h.colKeyIndex;a++)this.selectCell(g.cells[a])}else if(h.recordIndex<r){for(a=h.colKeyIndex+1;a<g.cells.length;a++)this.selectCell(g.cells[a]);for(a=h.trIndex+1;a<c;a++)for(d=0;d<m[a].cells.length;d++)this.selectCell(m[a].cells[d]);for(a=0;a<=j;a++)this.selectCell(g.cells[a])}else{for(a=j;a<g.cells.length;a++)this.selectCell(g.cells[a]);for(a=c+1;a<h.trIndex;a++)for(d=0;d<m[a].cells.length;d++)this.selectCell(m[a].cells[d]);
 
for(a=0;a<h.colKeyIndex;a++)this.selectCell(g.cells[a])}else{if(h.recordIndex===r)if(h.colKeyIndex<j)for(a=h.colKeyIndex+1;a<j;a++)this.unselectCell(g.cells[a]);else if(j<h.colKeyIndex)for(a=j+1;a<h.colKeyIndex;a++)this.unselectCell(g.cells[a]);if(h.recordIndex<r)for(a=h.trIndex;a<=c;a++){g=m[a];for(d=0;d<g.cells.length;d++)g.sectionRowIndex===h.trIndex?d>h.colKeyIndex&&this.unselectCell(g.cells[d]):g.sectionRowIndex===c?d<j&&this.unselectCell(g.cells[d]):this.unselectCell(g.cells[d])}else for(a=
 
c;a<=h.trIndex;a++){g=m[a];for(d=0;d<g.cells.length;d++)g.sectionRowIndex==c?d>j&&this.unselectCell(g.cells[d]):g.sectionRowIndex==h.trIndex?d<h.colKeyIndex&&this.unselectCell(g.cells[d]):this.unselectCell(g.cells[d])}this.selectCell(b)}else{this._oAnchorCell=s;this.isSelected(s)?this.unselectCell(s):this.selectCell(s)}else if(d){this.unselectAllCells();if(h)if(h.recordIndex===r)if(h.colKeyIndex<j)for(a=h.colKeyIndex;a<=j;a++)this.selectCell(g.cells[a]);else{if(j<h.colKeyIndex)for(a=j;a<=h.colKeyIndex;a++)this.selectCell(g.cells[a])}else if(h.recordIndex<
 
r)for(a=h.trIndex;a<=c;a++){g=m[a];for(d=0;d<g.cells.length;d++)g.sectionRowIndex==h.trIndex?d>=h.colKeyIndex&&this.selectCell(g.cells[d]):g.sectionRowIndex==c?d<=j&&this.selectCell(g.cells[d]):this.selectCell(g.cells[d])}else for(a=c;a<=h.trIndex;a++){g=m[a];for(d=0;d<g.cells.length;d++)g.sectionRowIndex==c?d>=j&&this.selectCell(g.cells[d]):g.sectionRowIndex==h.trIndex?d<=h.colKeyIndex&&this.selectCell(g.cells[d]):this.selectCell(g.cells[d])}else{this._oAnchorCell=s;this.selectCell(s)}}else if(f){this._oAnchorCell=
 
s;this.isSelected(s)?this.unselectCell(s):this.selectCell(s)}else this._handleSingleCellSelectionByMouse(a)}},_handleCellRangeSelectionByKey:function(a){var b=g.getCharCode(a),c=a.shiftKey;if(b==9||!c)this._handleSingleCellSelectionByKey(a);else if(b>36&&b<41){c=this._getSelectionTrigger();if(!c)return null;g.stopEvent(a);var d=this._getSelectionAnchor(c),f;f=this.getTbodyEl().rows;a=c.el.parentNode;if(b==40){b=this.getNextTrEl(c.el);if(d.recordIndex<=c.recordIndex){for(d=c.colKeyIndex+1;d<a.cells.length;d++){f=
 
a.cells[d];this.selectCell(f)}if(b)for(d=0;d<=c.colKeyIndex;d++){f=b.cells[d];this.selectCell(f)}}else{for(d=c.colKeyIndex;d<a.cells.length;d++)this.unselectCell(a.cells[d]);if(b)for(d=0;d<c.colKeyIndex;d++)this.unselectCell(b.cells[d])}}else if(b==38){b=this.getPreviousTrEl(c.el);if(d.recordIndex>=c.recordIndex){for(d=c.colKeyIndex-1;d>-1;d--){f=a.cells[d];this.selectCell(f)}if(b)for(d=a.cells.length-1;d>=c.colKeyIndex;d--){f=b.cells[d];this.selectCell(f)}}else{for(d=c.colKeyIndex;d>-1;d--)this.unselectCell(a.cells[d]);
 
if(b)for(d=a.cells.length-1;d>c.colKeyIndex;d--)this.unselectCell(b.cells[d])}}else if(b==39){b=this.getNextTrEl(c.el);if(d.recordIndex<c.recordIndex)if(c.colKeyIndex<a.cells.length-1){f=a.cells[c.colKeyIndex+1];this.selectCell(f)}else{if(b){f=b.cells[0];this.selectCell(f)}}else if(d.recordIndex>c.recordIndex)this.unselectCell(a.cells[c.colKeyIndex]);else if(d.colKeyIndex<=c.colKeyIndex)if(c.colKeyIndex<a.cells.length-1){f=a.cells[c.colKeyIndex+1];this.selectCell(f)}else{if(c.trIndex<f.length-1){f=
 
b.cells[0];this.selectCell(f)}}else this.unselectCell(a.cells[c.colKeyIndex])}else if(b==37){b=this.getPreviousTrEl(c.el);if(d.recordIndex<c.recordIndex)this.unselectCell(a.cells[c.colKeyIndex]);else if(d.recordIndex>c.recordIndex)if(c.colKeyIndex>0){f=a.cells[c.colKeyIndex-1];this.selectCell(f)}else{if(c.trIndex>0){f=b.cells[b.cells.length-1];this.selectCell(f)}}else if(d.colKeyIndex>=c.colKeyIndex)if(c.colKeyIndex>0){f=a.cells[c.colKeyIndex-1];this.selectCell(f)}else{if(c.trIndex>0){f=b.cells[b.cells.length-
 
1];this.selectCell(f)}}else this.unselectCell(a.cells[c.colKeyIndex])}}},_handleSingleCellSelectionByMouse:function(a){var b=this.getTdEl(a.target);if(b){a=this.getRecord(this.getTrEl(b));b=this.getColumn(b);this._oAnchorCell=a={record:a,column:b};this.unselectAllCells();this.selectCell(a)}},_handleSingleCellSelectionByKey:function(a){var b=g.getCharCode(a);if(b==9||b>36&&b<41){var c=a.shiftKey,d=this._getSelectionTrigger();if(!d)return null;var f;if(b==40){f=this.getBelowTdEl(d.el);if(f===null)f=
 
d.el}else if(b==38){f=this.getAboveTdEl(d.el);if(f===null)f=d.el}else if(b==39||!c&&b==9){f=this.getNextTdEl(d.el);if(f===null)return}else if(b==37||c&&b==9){f=this.getPreviousTdEl(d.el);if(f===null)return}g.stopEvent(a);this.unselectAllCells();this.selectCell(f);this._oAnchorCell={record:this.getRecord(f),column:this.getColumn(f)}}},getSelectedTrEls:function(){return f.getElementsByClassName(h.CLASS_SELECTED,"tr",this._elTbody)},selectRow:function(b){var c;if(b instanceof YAHOO.widget.Record){b=
 
this._oRecordSet.getRecord(b);c=this.getTrEl(b)}else if(a.isNumber(b)){b=this.getRecord(b);c=this.getTrEl(b)}else{c=this.getTrEl(b);b=this.getRecord(c)}if(b){var d=this._aSelections||[],g=b.getId(),j=-1;if(d.indexOf)j=d.indexOf(g);else for(var p=d.length-1;p>-1;p--)if(d[p]===g){j=p;break}j>-1&&d.splice(j,1);d.push(g);this._aSelections=d;if(!this._oAnchorRecord)this._oAnchorRecord=b;c&&f.addClass(c,h.CLASS_SELECTED);this.fireEvent("rowSelectEvent",{record:b,el:c})}},unselectRow:function(b){var c=this.getTrEl(b);
 
if(b=b instanceof YAHOO.widget.Record?this._oRecordSet.getRecord(b):a.isNumber(b)?this.getRecord(b):this.getRecord(c)){var d=this._aSelections||[],g=b.getId(),j=-1;if(d.indexOf)j=d.indexOf(g);else for(var p=d.length-1;p>-1;p--)if(d[p]===g){j=p;break}if(j>-1){d.splice(j,1);this._aSelections=d;f.removeClass(c,h.CLASS_SELECTED);this.fireEvent("rowUnselectEvent",{record:b,el:c})}}},unselectAllRows:function(){for(var b=this._aSelections||[],c,d=[],f=b.length-1;f>-1;f--)if(a.isString(b[f])){c=b.splice(f,
 
1);d[d.length]=this.getRecord(a.isArray(c)?c[0]:c)}this._aSelections=b;this._unselectAllTrEls();this.fireEvent("unselectAllRowsEvent",{records:d})},_unselectAllTdEls:function(){var a=f.getElementsByClassName(h.CLASS_SELECTED,"td",this._elTbody);f.removeClass(a,h.CLASS_SELECTED)},getSelectedTdEls:function(){return f.getElementsByClassName(h.CLASS_SELECTED,"td",this._elTbody)},selectCell:function(a){if(a=this.getTdEl(a)){var b=this.getRecord(a),c=this.getColumn(this.getCellIndex(a)),d=c.getKey();if(b&&
 
d){for(var g=this._aSelections||[],j=b.getId(),n=g.length-1;n>-1;n--)if(g[n].recordId===j&&g[n].columnKey===d){g.splice(n,1);break}g.push({recordId:j,columnKey:d});this._aSelections=g;if(!this._oAnchorCell)this._oAnchorCell={record:b,column:c};f.addClass(a,h.CLASS_SELECTED);this.fireEvent("cellSelectEvent",{record:b,column:c,key:d,el:a})}}},unselectCell:function(a){if(a=this.getTdEl(a)){var b=this.getRecord(a),c=this.getColumn(this.getCellIndex(a)),d=c.getKey();if(b&&d)for(var g=this._aSelections||
 
[],j=b.getId(),n=g.length-1;n>-1;n--)if(g[n].recordId===j&&g[n].columnKey===d){g.splice(n,1);this._aSelections=g;f.removeClass(a,h.CLASS_SELECTED);this.fireEvent("cellUnselectEvent",{record:b,column:c,key:d,el:a});break}}},unselectAllCells:function(){for(var b=this._aSelections||[],c=b.length-1;c>-1;c--)a.isObject(b[c])&&b.splice(c,1);this._aSelections=b;this._unselectAllTdEls();this.fireEvent("unselectAllCellsEvent")},isSelected:function(b){if(b&&b.ownerDocument==document)return f.hasClass(this.getTdEl(b),
 
h.CLASS_SELECTED)||f.hasClass(this.getTrEl(b),h.CLASS_SELECTED);var c,d=this._aSelections;if(d&&d.length>0){b instanceof YAHOO.widget.Record?c=b:a.isNumber(b)&&(c=this.getRecord(b));if(c){c=c.getId();if(d.indexOf){if(d.indexOf(c)>-1)return true}else for(b=d.length-1;b>-1;b--)if(d[b]===c)return true}else if(b.record&&b.column){c=b.record.getId();for(var g=b.column.getKey(),b=d.length-1;b>-1;b--)if(d[b].recordId===c&&d[b].columnKey===g)return true}}return false},getSelectedRows:function(){for(var b=
 
[],c=this._aSelections||[],d=0;d<c.length;d++)a.isString(c[d])&&b.push(c[d]);return b},getSelectedCells:function(){for(var b=[],c=this._aSelections||[],d=0;d<c.length;d++)c[d]&&a.isObject(c[d])&&b.push(c[d]);return b},getLastSelectedRecord:function(){var b=this._aSelections;if(b&&b.length>0)for(var c=b.length-1;c>-1;c--)if(a.isString(b[c]))return b[c]},getLastSelectedCell:function(){var a=this._aSelections;if(a&&a.length>0)for(var b=a.length-1;b>-1;b--)if(a[b].recordId&&a[b].columnKey)return a[b]},
 
highlightRow:function(a){if(a=this.getTrEl(a)){var b=this.getRecord(a);f.addClass(a,h.CLASS_HIGHLIGHTED);this.fireEvent("rowHighlightEvent",{record:b,el:a})}},unhighlightRow:function(a){if(a=this.getTrEl(a)){var b=this.getRecord(a);f.removeClass(a,h.CLASS_HIGHLIGHTED);this.fireEvent("rowUnhighlightEvent",{record:b,el:a})}},highlightCell:function(a){if(a=this.getTdEl(a)){this._elLastHighlightedTd&&this.unhighlightCell(this._elLastHighlightedTd);var b=this.getRecord(a),c=this.getColumn(this.getCellIndex(a)),
 
d=c.getKey();f.addClass(a,h.CLASS_HIGHLIGHTED);this._elLastHighlightedTd=a;this.fireEvent("cellHighlightEvent",{record:b,column:c,key:d,el:a})}},unhighlightCell:function(a){if(a=this.getTdEl(a)){var b=this.getRecord(a);f.removeClass(a,h.CLASS_HIGHLIGHTED);this._elLastHighlightedTd=null;this.fireEvent("cellUnhighlightEvent",{record:b,column:this.getColumn(this.getCellIndex(a)),key:this.getColumn(this.getCellIndex(a)).getKey(),el:a})}},addCellEditor:function(a,b){a.editor=b;a.editor.subscribe("showEvent",
 
this._onEditorShowEvent,this,true);a.editor.subscribe("keydownEvent",this._onEditorKeydownEvent,this,true);a.editor.subscribe("revertEvent",this._onEditorRevertEvent,this,true);a.editor.subscribe("saveEvent",this._onEditorSaveEvent,this,true);a.editor.subscribe("cancelEvent",this._onEditorCancelEvent,this,true);a.editor.subscribe("blurEvent",this._onEditorBlurEvent,this,true);a.editor.subscribe("blockEvent",this._onEditorBlockEvent,this,true);a.editor.subscribe("unblockEvent",this._onEditorUnblockEvent,
 
this,true)},getCellEditor:function(){return this._oCellEditor},showCellEditor:function(b,c,d){if(b=this.getTdEl(b))if((d=this.getColumn(b))&&d.editor){var j=this._oCellEditor;j&&(this._oCellEditor.cancel?this._oCellEditor.cancel():j.isActive&&this.cancelCellEditor());if(d.editor instanceof YAHOO.widget.BaseCellEditor){j=d.editor;if(b=j.attach(this,b)){j.render();j.move();if(b=this.doBeforeShowCellEditor(j)){j.show();this._oCellEditor=j}}}else{if(!c||!(c instanceof YAHOO.widget.Record))c=this.getRecord(b);
 
if(!d||!(d instanceof YAHOO.widget.Column))d=this.getColumn(b);if(c&&d){(!this._oCellEditor||this._oCellEditor.container)&&this._initCellEditorEl();j=this._oCellEditor;j.cell=b;j.record=c;j.column=d;j.validator=d.editorOptions&&a.isFunction(d.editorOptions.validator)?d.editorOptions.validator:null;j.value=c.getData(d.key);j.defaultValue=null;var c=j.container,q=f.getX(b),p=f.getY(b);if(isNaN(q)||isNaN(p)){q=b.offsetLeft+f.getX(this._elTbody.parentNode)-this._elTbody.scrollLeft;p=b.offsetTop+f.getY(this._elTbody.parentNode)-
 
this._elTbody.scrollTop+this._elThead.offsetHeight}c.style.left=q+"px";c.style.top=p+"px";this.doBeforeShowCellEditor(this._oCellEditor);c.style.display="";g.addListener(c,"keydown",function(a,b){if(a.keyCode==27){b.cancelCellEditor();b.focusTbodyEl()}else b.fireEvent("editorKeydownEvent",{editor:b._oCellEditor,event:a})},this);var n;if(a.isString(d.editor))switch(d.editor){case "checkbox":n=h.editCheckbox;break;case "date":n=h.editDate;break;case "dropdown":n=h.editDropdown;break;case "radio":n=
 
h.editRadio;break;case "textarea":n=h.editTextarea;break;case "textbox":n=h.editTextbox;break;default:n=null}else if(a.isFunction(d.editor))n=d.editor;if(n){n(this._oCellEditor,this);(!d.editorOptions||!d.editorOptions.disableBtns)&&this.showCellEditorBtns(c);j.isActive=true;this.fireEvent("editorShowEvent",{editor:j})}}}}},_initCellEditorEl:function(){var a=document.createElement("div");a.id=this._sId+"-celleditor";a.style.display="none";a.tabIndex=0;f.addClass(a,h.CLASS_EDITOR);var b=f.getFirstChild(document.body),
 
a=b?f.insertBefore(a,b):document.body.appendChild(a),b={};b.container=a;b.value=null;b.isActive=false;this._oCellEditor=b},doBeforeShowCellEditor:function(){return true},saveCellEditor:function(){if(this._oCellEditor)if(this._oCellEditor.save)this._oCellEditor.save();else if(this._oCellEditor.isActive){var a=this._oCellEditor.value,b=this._oCellEditor.record.getData(this._oCellEditor.column.key);if(this._oCellEditor.validator){a=this._oCellEditor.value=this._oCellEditor.validator.call(this,a,b,this._oCellEditor);
 
if(a===null){this.resetCellEditor();this.fireEvent("editorRevertEvent",{editor:this._oCellEditor,oldData:b,newData:a});return}}this._oRecordSet.updateRecordValue(this._oCellEditor.record,this._oCellEditor.column.key,this._oCellEditor.value);this.formatCell(this._oCellEditor.cell.firstChild,this._oCellEditor.record,this._oCellEditor.column);this._oChainRender.add({method:function(){this.validateColumnWidths()},scope:this});this._oChainRender.run();this.resetCellEditor();this.fireEvent("editorSaveEvent",
 
{editor:this._oCellEditor,oldData:b,newData:a})}},cancelCellEditor:function(){if(this._oCellEditor)if(this._oCellEditor.cancel)this._oCellEditor.cancel();else if(this._oCellEditor.isActive){this.resetCellEditor();this.fireEvent("editorCancelEvent",{editor:this._oCellEditor})}},destroyCellEditor:function(){if(this._oCellEditor){this._oCellEditor.destroy();this._oCellEditor=null}},_onEditorShowEvent:function(a){this.fireEvent("editorShowEvent",a)},_onEditorKeydownEvent:function(a){this.fireEvent("editorKeydownEvent",
 
a)},_onEditorRevertEvent:function(a){this.fireEvent("editorRevertEvent",a)},_onEditorSaveEvent:function(a){this.fireEvent("editorSaveEvent",a)},_onEditorCancelEvent:function(a){this.fireEvent("editorCancelEvent",a)},_onEditorBlurEvent:function(a){this.fireEvent("editorBlurEvent",a)},_onEditorBlockEvent:function(a){this.fireEvent("editorBlockEvent",a)},_onEditorUnblockEvent:function(a){this.fireEvent("editorUnblockEvent",a)},onEditorBlurEvent:function(a){a.editor.disableBtns?a.editor.save&&a.editor.save():
 
a.editor.cancel&&a.editor.cancel()},onEditorBlockEvent:function(){this.disable()},onEditorUnblockEvent:function(){this.undisable()},doBeforeLoadData:function(){return true},onEventSortColumn:function(a){var b=a.event,a=a.target;if(a=this.getThEl(a)||this.getTdEl(a)){a=this.getColumn(a);if(a.sortable){g.stopEvent(b);this.sortColumn(a)}}},onEventSelectColumn:function(a){this.selectColumn(a.target)},onEventHighlightColumn:function(a){this.highlightColumn(a.target)},onEventUnhighlightColumn:function(a){this.unhighlightColumn(a.target)},
 
onEventSelectRow:function(a){this.get("selectionMode")=="single"?this._handleSingleSelectionByMouse(a):this._handleStandardSelectionByMouse(a)},onEventSelectCell:function(a){var b=this.get("selectionMode");b=="cellblock"?this._handleCellBlockSelectionByMouse(a):b=="cellrange"?this._handleCellRangeSelectionByMouse(a):this._handleSingleCellSelectionByMouse(a)},onEventHighlightRow:function(a){this.highlightRow(a.target)},onEventUnhighlightRow:function(a){this.unhighlightRow(a.target)},onEventHighlightCell:function(a){this.highlightCell(a.target)},
 
onEventUnhighlightCell:function(a){this.unhighlightCell(a.target)},onEventFormatCell:function(a){if(a=this.getTdEl(a.target)){var b=this.getColumn(this.getCellIndex(a));this.formatCell(a.firstChild,this.getRecord(a),b)}},onEventShowCellEditor:function(a){this.isDisabled()||this.showCellEditor(a.target)},onEventSaveCellEditor:function(){this._oCellEditor&&(this._oCellEditor.save?this._oCellEditor.save():this.saveCellEditor())},onEventCancelCellEditor:function(){this._oCellEditor&&(this._oCellEditor.cancel?
 
this._oCellEditor.cancel():this.cancelCellEditor())},onDataReturnInitializeTable:function(a,b,c){if(this instanceof h&&this._sId){this.initializeTable();this.onDataReturnSetRows(a,b,c)}},onDataReturnReplaceRows:function(b,c,d){if(this instanceof h&&this._sId){this.fireEvent("dataReturnEvent",{request:b,response:c,payload:d});var f=this.doBeforeLoadData(b,c,d),g=this.get("paginator"),j=0;if(f&&c&&!c.error&&a.isArray(c.results)){this._oRecordSet.reset();if(this.get("dynamicData"))d&&d.pagination&&a.isNumber(d.pagination.recordOffset)?
 
j=d.pagination.recordOffset:g&&(j=g.getStartIndex());this._oRecordSet.setRecords(c.results,j|0);this._handleDataReturnPayload(b,c,d);this.render()}else f&&c.error&&this.showTableMessage(this.get("MSG_ERROR"),h.CLASS_ERROR)}},onDataReturnAppendRows:function(b,c,d){if(this instanceof h&&this._sId){this.fireEvent("dataReturnEvent",{request:b,response:c,payload:d});var f=this.doBeforeLoadData(b,c,d);if(f&&c&&!c.error&&a.isArray(c.results)){this.addRows(c.results);this._handleDataReturnPayload(b,c,d)}else f&&
 
c.error&&this.showTableMessage(this.get("MSG_ERROR"),h.CLASS_ERROR)}},onDataReturnInsertRows:function(b,c,d){if(this instanceof h&&this._sId){this.fireEvent("dataReturnEvent",{request:b,response:c,payload:d});var f=this.doBeforeLoadData(b,c,d);if(f&&c&&!c.error&&a.isArray(c.results)){this.addRows(c.results,d?d.insertIndex:0);this._handleDataReturnPayload(b,c,d)}else f&&c.error&&this.showTableMessage(this.get("MSG_ERROR"),h.CLASS_ERROR)}},onDataReturnUpdateRows:function(b,c,d){if(this instanceof h&&
 
this._sId){this.fireEvent("dataReturnEvent",{request:b,response:c,payload:d});var f=this.doBeforeLoadData(b,c,d);if(f&&c&&!c.error&&a.isArray(c.results)){this.updateRows(d?d.updateIndex:0,c.results);this._handleDataReturnPayload(b,c,d)}else f&&c.error&&this.showTableMessage(this.get("MSG_ERROR"),h.CLASS_ERROR)}},onDataReturnSetRows:function(b,c,d){if(this instanceof h&&this._sId){this.fireEvent("dataReturnEvent",{request:b,response:c,payload:d});var f=this.doBeforeLoadData(b,c,d),g=this.get("paginator"),
 
j=0;if(f&&c&&!c.error&&a.isArray(c.results)){if(this.get("dynamicData")){d&&d.pagination&&a.isNumber(d.pagination.recordOffset)?j=d.pagination.recordOffset:g&&(j=g.getStartIndex());this._oRecordSet.reset()}this._oRecordSet.setRecords(c.results,j|0);this._handleDataReturnPayload(b,c,d);this.render()}else f&&c.error&&this.showTableMessage(this.get("MSG_ERROR"),h.CLASS_ERROR)}},handleDataReturnPayload:function(a,b,c){return c||{}},_handleDataReturnPayload:function(c,d,f){if(f=this.handleDataReturnPayload(c,
 
d,f)){if(c=this.get("paginator")){this.get("dynamicData")?b.Paginator.isNumeric(f.totalRecords)&&c.set("totalRecords",f.totalRecords):c.set("totalRecords",this._oRecordSet.getLength());if(a.isObject(f.pagination)){c.set("rowsPerPage",f.pagination.rowsPerPage);c.set("recordOffset",f.pagination.recordOffset)}}f.sortedBy?this.set("sortedBy",f.sortedBy):f.sorting&&this.set("sortedBy",f.sorting)}},showCellEditorBtns:function(a){a=a.appendChild(document.createElement("div"));f.addClass(a,h.CLASS_BUTTON);
 
var b=a.appendChild(document.createElement("button"));f.addClass(b,h.CLASS_DEFAULT);b.innerHTML="OK";g.addListener(b,"click",function(a,b){b.onEventSaveCellEditor(a,b);b.focusTbodyEl()},this,true);a=a.appendChild(document.createElement("button"));a.innerHTML="Cancel";g.addListener(a,"click",function(a,b){b.onEventCancelCellEditor(a,b);b.focusTbodyEl()},this,true)},resetCellEditor:function(){var a=this._oCellEditor.container;a.style.display="none";g.purgeElement(a,true);a.innerHTML="";this._oCellEditor.value=
 
null;this._oCellEditor.isActive=false},getBody:function(){return this.getTbodyEl()},getCell:function(a){return this.getTdEl(a)},getRow:function(a){return this.getTrEl(a)},refreshView:function(){this.render()},select:function(b){a.isArray(b)||(b=[b]);for(var c=0;c<b.length;c++)this.selectRow(b[c])},onEventEditCell:function(a){this.onEventShowCellEditor(a)},_syncColWidths:function(){this.validateColumnWidths()}});h.prototype.onDataReturnSetRecords=h.prototype.onDataReturnSetRows;h.prototype.onPaginatorChange=
 
h.prototype.onPaginatorChangeRequest;h.editCheckbox=function(){};h.editDate=function(){};h.editDropdown=function(){};h.editRadio=function(){};h.editTextarea=function(){};h.editTextbox=function(){}})();
 
(function(){var a=YAHOO.lang,c=YAHOO.util,b=YAHOO.widget,d=YAHOO.env.ua,f=c.Dom,g=c.Event,j=b.DataTable;b.ScrollingDataTable=function(a,c,d,f){f=f||{};if(f.scrollable)f.scrollable=false;this._init();b.ScrollingDataTable.superclass.constructor.call(this,a,c,d,f);this.subscribe("columnShowEvent",this._onColumnChange)};var h=b.ScrollingDataTable;a.augmentObject(h,{CLASS_HEADER:"yui-dt-hd",CLASS_BODY:"yui-dt-bd"});a.extend(h,j,{_elHdContainer:null,_elHdTable:null,_elBdContainer:null,_elBdThead:null,_elTmpContainer:null,
 
_elTmpTable:null,_bScrollbarX:null,initAttributes:function(b){b=b||{};h.superclass.initAttributes.call(this,b);this.setAttributeConfig("width",{value:null,validator:a.isString,method:function(a){if(this._elHdContainer&&this._elBdContainer){this._elHdContainer.style.width=a;this._elBdContainer.style.width=a;this._syncScrollX();this._syncScrollOverhang()}}});this.setAttributeConfig("height",{value:null,validator:a.isString,method:function(a){if(this._elHdContainer&&this._elBdContainer){this._elBdContainer.style.height=
 
a;this._syncScrollX();this._syncScrollY();this._syncScrollOverhang()}}});this.setAttributeConfig("COLOR_COLUMNFILLER",{value:"#F2F2F2",validator:a.isString,method:function(a){if(this._elHdContainer)this._elHdContainer.style.backgroundColor=a}})},_init:function(){this._elTmpTable=this._elTmpContainer=this._elBdThead=this._elBdContainer=this._elHdTable=this._elHdContainer=null},_initDomElements:function(a){this._initContainerEl(a);if(this._elContainer&&this._elHdContainer&&this._elBdContainer){this._initTableEl();
 
if(this._elHdTable&&this._elTable){this._initColgroupEl(this._elHdTable);this._initTheadEl(this._elHdTable,this._elTable);this._initTbodyEl(this._elTable);this._initMsgTbodyEl(this._elTable)}}return!this._elContainer||!this._elTable||!this._elColgroup||!this._elThead||!this._elTbody||!this._elMsgTbody||!this._elHdTable||!this._elBdThead?false:true},_destroyContainerEl:function(a){f.removeClass(a,j.CLASS_SCROLLABLE);h.superclass._destroyContainerEl.call(this,a);this._elBdContainer=this._elHdContainer=
 
null},_initContainerEl:function(a){h.superclass._initContainerEl.call(this,a);if(this._elContainer){a=this._elContainer;f.addClass(a,j.CLASS_SCROLLABLE);var b=document.createElement("div");b.style.width=this.get("width")||"";b.style.backgroundColor=this.get("COLOR_COLUMNFILLER");f.addClass(b,h.CLASS_HEADER);this._elHdContainer=b;a.appendChild(b);b=document.createElement("div");b.style.width=this.get("width")||"";b.style.height=this.get("height")||"";f.addClass(b,h.CLASS_BODY);g.addListener(b,"scroll",
 
this._onScroll,this);this._elBdContainer=b;a.appendChild(b)}},_initCaptionEl:function(){},_destroyHdTableEl:function(){var a=this._elHdTable;if(a){g.purgeElement(a,true);a.parentNode.removeChild(a);this._elBdThead=null}},_initTableEl:function(){if(this._elHdContainer){this._destroyHdTableEl();this._elHdTable=this._elHdContainer.appendChild(document.createElement("table"));g.delegate(this._elHdTable,"mouseenter",this._onTableMouseover,"thead ."+j.CLASS_LABEL,this);g.delegate(this._elHdTable,"mouseleave",
 
this._onTableMouseout,"thead ."+j.CLASS_LABEL,this)}h.superclass._initTableEl.call(this,this._elBdContainer)},_initTheadEl:function(a,b){a=a||this._elHdTable;b=b||this._elTable;this._initBdTheadEl(b);h.superclass._initTheadEl.call(this,a)},_initThEl:function(a,b){h.superclass._initThEl.call(this,a,b);a.id=this.getId()+"-fixedth-"+b.getSanitizedKey()},_destroyBdTheadEl:function(){var a=this._elBdThead;if(a){var b=a.parentNode;g.purgeElement(a,true);b.removeChild(a);this._elBdThead=null;this._destroyColumnHelpers()}},
 
_initBdTheadEl:function(a){if(a){this._destroyBdTheadEl();var a=a.insertBefore(document.createElement("thead"),a.firstChild),b=this._oColumnSet.tree,c,d,f,g,h,j,m;g=0;for(j=b.length;g<j;g++){d=a.appendChild(document.createElement("tr"));h=0;for(m=b[g].length;h<m;h++){f=b[g][h];c=d.appendChild(document.createElement("th"));this._initBdThEl(c,f,g,h)}}this._elBdThead=a}},_initBdThEl:function(b,c){b.id=this.getId()+"-th-"+c.getSanitizedKey();b.rowSpan=c.getRowspan();b.colSpan=c.getColspan();if(c.abbr)b.abbr=
 
c.abbr;var d=c.getKey(),d=a.isValue(c.label)?c.label:d;b.innerHTML=d},_initTbodyEl:function(a){h.superclass._initTbodyEl.call(this,a);a.style.marginTop=this._elTbody.offsetTop>0?"-"+this._elTbody.offsetTop+"px":0},_focusEl:function(a){var a=a||this._elTbody,b=this;this._storeScrollPositions();setTimeout(function(){setTimeout(function(){try{a.focus();b._restoreScrollPositions()}catch(c){}},0)},0)},_runRenderChain:function(){this._storeScrollPositions();this._oChainRender.run()},_storeScrollPositions:function(){this._nScrollTop=
 
this._elBdContainer.scrollTop;this._nScrollLeft=this._elBdContainer.scrollLeft},clearScrollPositions:function(){this._nScrollLeft=this._nScrollTop=0},_restoreScrollPositions:function(){if(this._nScrollTop){this._elBdContainer.scrollTop=this._nScrollTop;this._nScrollTop=null}if(this._nScrollLeft){this._elBdContainer.scrollLeft=this._nScrollLeft;this._elHdContainer.scrollLeft=this._nScrollLeft;this._nScrollLeft=null}},_validateColumnWidth:function(a,b){if(!a.width&&!a.hidden){var c=a.getThEl();a._calculatedWidth&&
 
this._setColumnWidth(a,"auto","visible");if(c.offsetWidth!==b.offsetWidth){var c=c.offsetWidth>b.offsetWidth?a.getThLinerEl():b.firstChild,c=Math.max(0,c.offsetWidth-(parseInt(f.getStyle(c,"paddingLeft"),10)|0)-(parseInt(f.getStyle(c,"paddingRight"),10)|0),a.minWidth),d="visible";if(a.maxAutoWidth>0&&c>a.maxAutoWidth){c=a.maxAutoWidth;d="hidden"}this._elTbody.style.display="none";this._setColumnWidth(a,c+"px",d);a._calculatedWidth=c;this._elTbody.style.display=""}}},validateColumnWidths:function(b){var c=
 
this._oColumnSet.keys,g=c.length,h=this.getFirstTrEl();d.ie&&this._setOverhangValue(1);if(c&&h&&h.childNodes.length===g){var j=this.get("width");if(j){this._elHdContainer.style.width="";this._elBdContainer.style.width=""}this._elContainer.style.width="";if(b&&a.isNumber(b.getKeyIndex()))this._validateColumnWidth(b,h.childNodes[b.getKeyIndex()]);else{var p,n=[],o;for(o=0;o<g;o++){b=c[o];!b.width&&(!b.hidden&&b._calculatedWidth)&&(n[n.length]=b)}this._elTbody.style.display="none";o=0;for(b=n.length;o<
 
b;o++)this._setColumnWidth(n[o],"auto","visible");this._elTbody.style.display="";n=[];for(o=0;o<g;o++){b=c[o];p=h.childNodes[o];if(!b.width&&!b.hidden){var m=b.getThEl();if(m.offsetWidth!==p.offsetWidth){p=m.offsetWidth>p.offsetWidth?b.getThLinerEl():p.firstChild;p=Math.max(0,p.offsetWidth-(parseInt(f.getStyle(p,"paddingLeft"),10)|0)-(parseInt(f.getStyle(p,"paddingRight"),10)|0),b.minWidth);m="visible";if(b.maxAutoWidth>0&&p>b.maxAutoWidth){p=b.maxAutoWidth;m="hidden"}n[n.length]=[b,p,m]}}}this._elTbody.style.display=
 
"none";o=0;for(b=n.length;o<b;o++){c=n[o];this._setColumnWidth(c[0],c[1]+"px",c[2]);c[0]._calculatedWidth=c[1]}this._elTbody.style.display=""}if(j){this._elHdContainer.style.width=j;this._elBdContainer.style.width=j}}this._syncScroll();this._restoreScrollPositions()},_syncScroll:function(){this._syncScrollX();this._syncScrollY();this._syncScrollOverhang();if(d.opera){this._elHdContainer.scrollLeft=this._elBdContainer.scrollLeft;if(!this.get("width"))document.body.style=document.body.style+""}},_syncScrollY:function(){var a=
 
this._elTbody,b=this._elBdContainer;if(!this.get("width"))this._elContainer.style.width=b.scrollHeight>b.clientHeight?a.parentNode.clientWidth+19+"px":a.parentNode.clientWidth+2+"px"},_syncScrollX:function(){var a=this._elTbody,b=this._elBdContainer;if(!this.get("height")&&d.ie)b.style.height=b.scrollWidth>b.offsetWidth?a.parentNode.offsetHeight+18+"px":a.parentNode.offsetHeight+"px";this._elMsgTbody.parentNode.style.width=this._elTbody.rows.length===0?this.getTheadEl().parentNode.offsetWidth+"px":
 
""},_syncScrollOverhang:function(){var a=this._elBdContainer,b=1;a.scrollHeight>a.clientHeight&&a.scrollWidth>a.clientWidth&&(b=18);this._setOverhangValue(b)},_setOverhangValue:function(a){var b=this._oColumnSet.headers[this._oColumnSet.headers.length-1]||[],c=b.length,d=this._sId+"-fixedth-",a=a+"px solid "+this.get("COLOR_COLUMNFILLER");this._elThead.style.display="none";for(var g=0;g<c;g++)f.get(d+b[g]).style.borderRight=a;this._elThead.style.display=""},getHdContainerEl:function(){return this._elHdContainer},
 
getBdContainerEl:function(){return this._elBdContainer},getHdTableEl:function(){return this._elHdTable},getBdTableEl:function(){return this._elTable},disable:function(){var a=this._elMask;a.style.width=this._elBdContainer.offsetWidth+"px";a.style.height=this._elHdContainer.offsetHeight+this._elBdContainer.offsetHeight+"px";a.style.display="";this.fireEvent("disableEvent")},removeColumn:function(a){var b=this._elHdContainer.scrollLeft,c=this._elBdContainer.scrollLeft,a=h.superclass.removeColumn.call(this,
 
a);this._elHdContainer.scrollLeft=b;this._elBdContainer.scrollLeft=c;return a},insertColumn:function(a,b){var c=this._elHdContainer.scrollLeft,d=this._elBdContainer.scrollLeft,f=h.superclass.insertColumn.call(this,a,b);this._elHdContainer.scrollLeft=c;this._elBdContainer.scrollLeft=d;return f},reorderColumn:function(a,b){var c=this._elHdContainer.scrollLeft,d=this._elBdContainer.scrollLeft,f=h.superclass.reorderColumn.call(this,a,b);this._elHdContainer.scrollLeft=c;this._elBdContainer.scrollLeft=
 
d;return f},setColumnWidth:function(b,c){if(b=this.getColumn(b)){this._storeScrollPositions();if(a.isNumber(c)){c=c>b.minWidth?c:b.minWidth;b.width=c;this._setColumnWidth(b,c+"px");this._syncScroll();this.fireEvent("columnSetWidthEvent",{column:b,width:c})}else if(c===null){b.width=c;this._setColumnWidth(b,"auto");this.validateColumnWidths(b);this.fireEvent("columnUnsetWidthEvent",{column:b})}this._clearTrTemplateEl()}},scrollTo:function(a){var b=this.getTdEl(a);if(b){this.clearScrollPositions();
 
this.getBdContainerEl().scrollLeft=b.offsetLeft;this.getBdContainerEl().scrollTop=b.parentNode.offsetTop}else if(a=this.getTrEl(a)){this.clearScrollPositions();this.getBdContainerEl().scrollTop=a.offsetTop}},showTableMessage:function(b,c){var d=this._elMsgTd;if(a.isString(b))d.firstChild.innerHTML=b;a.isString(c)&&f.addClass(d.firstChild,c);this.getTheadEl();this._elMsgTbody.parentNode.style.width=this.getTheadEl().parentNode.offsetWidth+"px";this._elMsgTbody.style.display="";this.fireEvent("tableMsgShowEvent",
 
{html:b,className:c})},_onColumnChange:function(a){a=a.column?a.column:a.editor?a.editor.column:null;this._storeScrollPositions();this.validateColumnWidths(a)},_onScroll:function(a,b){b._elHdContainer.scrollLeft=b._elBdContainer.scrollLeft;if(b._oCellEditor&&b._oCellEditor.isActive){b.fireEvent("editorBlurEvent",{editor:b._oCellEditor});b.cancelCellEditor()}var c=g.getTarget(a);c.nodeName.toLowerCase();b.fireEvent("tableScrollEvent",{event:a,target:c})},_onTheadKeydown:function(a,b){g.getCharCode(a)===
 
9&&setTimeout(function(){if(b instanceof h&&b._sId)b._elBdContainer.scrollLeft=b._elHdContainer.scrollLeft},0);for(var c=g.getTarget(a),d=c.nodeName.toLowerCase(),f=true;c&&d!="table";){switch(d){case "body":return;case "thead":f=b.fireEvent("theadKeyEvent",{target:c,event:a})}if(f===false)return;(c=c.parentNode)&&(d=c.nodeName.toLowerCase())}b.fireEvent("tableKeyEvent",{target:c||b._elContainer,event:a})}})})();
 
(function(){var a=YAHOO.lang,c=YAHOO.util,b=YAHOO.widget,d=YAHOO.env.ua,f=c.Dom,g=c.Event,j=b.DataTable;b.BaseCellEditor=function(a,b){this._sId=this._sId||f.generateId(null,"yui-ceditor");YAHOO.widget.BaseCellEditor._nCount++;this._sType=a;this._initConfigs(b);this._initEvents();this._needsRender=true};var h=b.BaseCellEditor;a.augmentObject(h,{_nCount:0,CLASS_CELLEDITOR:"yui-ceditor"});h.prototype={_sId:null,_sType:null,_oDataTable:null,_oColumn:null,_oRecord:null,_elTd:null,_elContainer:null,_elCancelBtn:null,
 
_elSaveBtn:null,_initConfigs:function(a){if(a&&YAHOO.lang.isObject(a))for(var b in a)b&&(this[b]=a[b])},_initEvents:function(){this.createEvent("showEvent");this.createEvent("keydownEvent");this.createEvent("invalidDataEvent");this.createEvent("revertEvent");this.createEvent("saveEvent");this.createEvent("cancelEvent");this.createEvent("blurEvent");this.createEvent("blockEvent");this.createEvent("unblockEvent")},_initContainerEl:function(){if(this._elContainer){YAHOO.util.Event.purgeElement(this._elContainer,
 
true);this._elContainer.innerHTML=""}var b=document.createElement("div");b.id=this.getId()+"-container";b.style.display="none";b.tabIndex=0;this.className=a.isArray(this.className)?this.className:this.className?[this.className]:[];this.className[this.className.length]=j.CLASS_EDITOR;b.className=this.className.join(" ");document.body.insertBefore(b,document.body.firstChild);this._elContainer=b},_initShimEl:function(){if(this.useIFrame&&!this._elIFrame){var a=document.createElement("iframe");a.src=
 
"javascript:false";a.frameBorder=0;a.scrolling="no";a.style.display="none";a.className=j.CLASS_EDITOR_SHIM;a.tabIndex=-1;a.role="presentation";a.title="Presentational iframe shim";document.body.insertBefore(a,document.body.firstChild);this._elIFrame=a}},_hide:function(){this.getContainerEl().style.display="none";if(this._elIFrame)this._elIFrame.style.display="none";this.isActive=false;this.getDataTable()._oCellEditor=null},asyncSubmitter:null,value:null,defaultValue:null,validator:null,resetInvalidData:true,
 
isActive:false,LABEL_SAVE:"Save",LABEL_CANCEL:"Cancel",disableBtns:false,useIFrame:false,className:null,toString:function(){return"CellEditor instance "+this._sId},getId:function(){return this._sId},getDataTable:function(){return this._oDataTable},getColumn:function(){return this._oColumn},getRecord:function(){return this._oRecord},getTdEl:function(){return this._elTd},getContainerEl:function(){return this._elContainer},destroy:function(){this.unsubscribeAll();var a=this.getColumn();if(a)a.editor=
 
null;if(a=this.getContainerEl()){g.purgeElement(a,true);a.parentNode.removeChild(a)}},render:function(){if(this._needsRender){this._initContainerEl();this._initShimEl();g.addListener(this.getContainerEl(),"keydown",function(a,b){if(a.keyCode==27){var c=g.getTarget(a);c.nodeName&&c.nodeName.toLowerCase()==="select"&&c.blur();b.cancel()}b.fireEvent("keydownEvent",{editor:b,event:a})},this);this.renderForm();this.disableBtns||this.renderBtns();this.doAfterRender();this._needsRender=false}},renderBtns:function(){var a=
 
this.getContainerEl().appendChild(document.createElement("div"));a.className=j.CLASS_BUTTON;var b=a.appendChild(document.createElement("button"));b.className=j.CLASS_DEFAULT;b.innerHTML=this.LABEL_SAVE;g.addListener(b,"click",function(){this.save()},this,true);this._elSaveBtn=b;a=a.appendChild(document.createElement("button"));a.innerHTML=this.LABEL_CANCEL;g.addListener(a,"click",function(){this.cancel()},this,true);this._elCancelBtn=a},attach:function(a,b){if(a instanceof YAHOO.widget.DataTable){this._oDataTable=
 
a;if(b=a.getTdEl(b)){this._elTd=b;var c=a.getColumn(b);if(c){this._oColumn=c;if(c=a.getRecord(b)){this._oRecord=c;c=c.getData(this.getColumn().getField());this.value=c!==void 0?c:this.defaultValue;return true}}}}return false},move:function(){var a=this.getContainerEl(),b=this.getTdEl(),c=f.getX(b),d=f.getY(b);if(isNaN(c)||isNaN(d)){d=this.getDataTable().getTbodyEl();c=b.offsetLeft+f.getX(d.parentNode)-d.scrollLeft;d=b.offsetTop+f.getY(d.parentNode)-d.scrollTop+this.getDataTable().getTheadEl().offsetHeight}a.style.left=
 
c+"px";a.style.top=d+"px";if(this._elIFrame){this._elIFrame.style.left=c+"px";this._elIFrame.style.top=d+"px"}},show:function(){var a=this.getContainerEl(),b=this._elIFrame;this.resetForm();this.isActive=true;a.style.display="";if(b){b.style.width=a.offsetWidth+"px";b.style.height=a.offsetHeight+"px";b.style.display=""}this.focus();this.fireEvent("showEvent",{editor:this})},block:function(){this.fireEvent("blockEvent",{editor:this})},unblock:function(){this.fireEvent("unblockEvent",{editor:this})},
 
save:function(){var b=this.getInputValue(),c=b;if(this.validator){c=this.validator.call(this.getDataTable(),b,this.value,this);if(c===void 0){this.resetInvalidData&&this.resetForm();this.fireEvent("invalidDataEvent",{editor:this,oldData:this.value,newData:b});return}}var d=this,b=function(a,b){var c=d.value;if(a){d.value=b;d.getDataTable().updateCell(d.getRecord(),d.getColumn(),b);d._hide();d.fireEvent("saveEvent",{editor:d,oldData:c,newData:d.value})}else{d.resetForm();d.fireEvent("revertEvent",
 
{editor:d,oldData:c,newData:b})}d.unblock()};this.block();a.isFunction(this.asyncSubmitter)?this.asyncSubmitter.call(this,b,c):b(true,c)},cancel:function(){if(this.isActive){this._hide();this.fireEvent("cancelEvent",{editor:this})}},renderForm:function(){},doAfterRender:function(){},handleDisabledBtns:function(){},resetForm:function(){},focus:function(){},getInputValue:function(){}};a.augmentProto(h,c.EventProvider);b.CheckboxCellEditor=function(a){a=a||{};this._sId=this._sId||f.generateId(null,"yui-checkboxceditor");
 
YAHOO.widget.BaseCellEditor._nCount++;b.CheckboxCellEditor.superclass.constructor.call(this,a.type||"checkbox",a)};a.extend(b.CheckboxCellEditor,h,{checkboxOptions:null,checkboxes:null,value:null,renderForm:function(){if(a.isArray(this.checkboxOptions)){var b,c,d,f,g;f=0;for(g=this.checkboxOptions.length;f<g;f++){b=this.checkboxOptions[f];c=a.isValue(b.value)?b.value:b;d=this.getId()+"-chk"+f;this.getContainerEl().innerHTML+='<input type="checkbox" id="'+d+'" value="'+c+'" />';c=this.getContainerEl().appendChild(document.createElement("label"));
 
c.htmlFor=d;c.innerHTML=a.isValue(b.label)?b.label:b}b=[];for(f=0;f<g;f++)b[b.length]=this.getContainerEl().childNodes[f*2];this.checkboxes=b;this.disableBtns&&this.handleDisabledBtns()}},handleDisabledBtns:function(){g.addListener(this.getContainerEl(),"click",function(a){g.getTarget(a).tagName.toLowerCase()==="input"&&this.save()},this,true)},resetForm:function(){for(var b=a.isArray(this.value)?this.value:[this.value],c=0,d=this.checkboxes.length;c<d;c++){this.checkboxes[c].checked=false;for(var f=
 
0,g=b.length;f<g;f++)if(this.checkboxes[c].value==b[f])this.checkboxes[c].checked=true}},focus:function(){this.checkboxes[0].focus()},getInputValue:function(){for(var a=[],b=0,c=this.checkboxes.length;b<c;b++)if(this.checkboxes[b].checked)a[a.length]=this.checkboxes[b].value;return a}});a.augmentObject(b.CheckboxCellEditor,h);b.DateCellEditor=function(a){a=a||{};this._sId=this._sId||f.generateId(null,"yui-dateceditor");YAHOO.widget.BaseCellEditor._nCount++;b.DateCellEditor.superclass.constructor.call(this,
 
a.type||"date",a)};a.extend(b.DateCellEditor,h,{calendar:null,calendarOptions:null,defaultValue:new Date,renderForm:function(){if(YAHOO.widget.Calendar){var a=this.getContainerEl().appendChild(document.createElement("div"));a.id=this.getId()+"-dateContainer";var b=new YAHOO.widget.Calendar(this.getId()+"-date",a.id,this.calendarOptions);b.render();a.style.cssFloat="none";b.hideEvent.subscribe(function(){this.cancel()},this,true);if(d.ie)this.getContainerEl().appendChild(document.createElement("div")).style.clear=
 
"both";this.calendar=b;this.disableBtns&&this.handleDisabledBtns()}},handleDisabledBtns:function(){this.calendar.selectEvent.subscribe(function(){this.save()},this,true)},resetForm:function(){var a=this.value||new Date;this.calendar.select(a);this.calendar.cfg.setProperty("pagedate",a,false);this.calendar.render();this.calendar.show()},focus:function(){},getInputValue:function(){return this.calendar.getSelectedDates()[0]}});a.augmentObject(b.DateCellEditor,h);b.DropdownCellEditor=function(a){a=a||
 
{};this._sId=this._sId||f.generateId(null,"yui-dropdownceditor");YAHOO.widget.BaseCellEditor._nCount++;b.DropdownCellEditor.superclass.constructor.call(this,a.type||"dropdown",a)};a.extend(b.DropdownCellEditor,h,{dropdownOptions:null,dropdown:null,multiple:false,size:null,renderForm:function(){var b=this.getContainerEl().appendChild(document.createElement("select"));b.style.zoom=1;if(this.multiple)b.multiple="multiple";if(a.isNumber(this.size))b.size=this.size;this.dropdown=b;if(a.isArray(this.dropdownOptions)){for(var c,
 
d,f=0,g=this.dropdownOptions.length;f<g;f++){c=this.dropdownOptions[f];d=document.createElement("option");d.value=a.isValue(c.value)?c.value:c;d.innerHTML=a.isValue(c.label)?c.label:c;b.appendChild(d)}this.disableBtns&&this.handleDisabledBtns()}},handleDisabledBtns:function(){if(this.multiple)g.addListener(this.dropdown,"blur",function(){this.save()},this,true);else if(d.ie){g.addListener(this.dropdown,"blur",function(){this.save()},this,true);g.addListener(this.dropdown,"click",function(){this.save()},
 
this,true)}else g.addListener(this.dropdown,"change",function(){this.save()},this,true)},resetForm:function(){var b=this.dropdown.options,c=0,d=b.length;if(a.isArray(this.value)){for(var f=this.value,g=0,h=f.length,j={};c<d;c++){b[c].selected=false;j[b[c].value]=b[c]}for(;g<h;g++)if(j[f[g]])j[f[g]].selected=true}else for(;c<d;c++)if(this.value==b[c].value)b[c].selected=true},focus:function(){this.getDataTable()._focusEl(this.dropdown)},getInputValue:function(){var a=this.dropdown.options;if(this.multiple){for(var b=
 
[],c=0,d=a.length;c<d;c++)a[c].selected&&b.push(a[c].value);return b}return a[a.selectedIndex].value}});a.augmentObject(b.DropdownCellEditor,h);b.RadioCellEditor=function(a){a=a||{};this._sId=this._sId||f.generateId(null,"yui-radioceditor");YAHOO.widget.BaseCellEditor._nCount++;b.RadioCellEditor.superclass.constructor.call(this,a.type||"radio",a)};a.extend(b.RadioCellEditor,h,{radios:null,radioOptions:null,renderForm:function(){if(a.isArray(this.radioOptions)){for(var b,c,d,f=0,g=this.radioOptions.length;f<
 
g;f++){b=this.radioOptions[f];c=a.isValue(b.value)?b.value:b;d=this.getId()+"-radio"+f;this.getContainerEl().innerHTML+='<input type="radio" name="'+this.getId()+'" value="'+c+'" id="'+d+'" />';c=this.getContainerEl().appendChild(document.createElement("label"));c.htmlFor=d;c.innerHTML=a.isValue(b.label)?b.label:b}b=[];for(f=0;f<g;f++){d=this.getContainerEl().childNodes[f*2];b[b.length]=d}this.radios=b;this.disableBtns&&this.handleDisabledBtns()}},handleDisabledBtns:function(){g.addListener(this.getContainerEl(),
 
"click",function(a){g.getTarget(a).tagName.toLowerCase()==="input"&&this.save()},this,true)},resetForm:function(){for(var a=0,b=this.radios.length;a<b;a++){var c=this.radios[a];if(this.value==c.value){c.checked=true;break}}},focus:function(){for(var a=0,b=this.radios.length;a<b;a++)if(this.radios[a].checked){this.radios[a].focus();break}},getInputValue:function(){for(var a=0,b=this.radios.length;a<b;a++)if(this.radios[a].checked)return this.radios[a].value}});a.augmentObject(b.RadioCellEditor,h);
 
b.TextareaCellEditor=function(a){a=a||{};this._sId=this._sId||f.generateId(null,"yui-textareaceditor");YAHOO.widget.BaseCellEditor._nCount++;b.TextareaCellEditor.superclass.constructor.call(this,a.type||"textarea",a)};a.extend(b.TextareaCellEditor,h,{textarea:null,renderForm:function(){this.textarea=this.getContainerEl().appendChild(document.createElement("textarea"));this.disableBtns&&this.handleDisabledBtns()},handleDisabledBtns:function(){g.addListener(this.textarea,"blur",function(){this.save()},
 
this,true)},move:function(){this.textarea.style.width=this.getTdEl().offsetWidth+"px";this.textarea.style.height="3em";YAHOO.widget.TextareaCellEditor.superclass.move.call(this)},resetForm:function(){this.textarea.value=this.value},focus:function(){this.getDataTable()._focusEl(this.textarea);this.textarea.select()},getInputValue:function(){return this.textarea.value}});a.augmentObject(b.TextareaCellEditor,h);b.TextboxCellEditor=function(a){a=a||{};this._sId=this._sId||f.generateId(null,"yui-textboxceditor");
 
YAHOO.widget.BaseCellEditor._nCount++;b.TextboxCellEditor.superclass.constructor.call(this,a.type||"textbox",a)};a.extend(b.TextboxCellEditor,h,{textbox:null,renderForm:function(){var a;a=d.webkit>420?this.getContainerEl().appendChild(document.createElement("form")).appendChild(document.createElement("input")):this.getContainerEl().appendChild(document.createElement("input"));a.type="text";this.textbox=a;g.addListener(a,"keypress",function(a){if(a.keyCode===13){YAHOO.util.Event.preventDefault(a);
 
this.save()}},this,true);this.disableBtns&&this.handleDisabledBtns()},move:function(){this.textbox.style.width=this.getTdEl().offsetWidth+"px";b.TextboxCellEditor.superclass.move.call(this)},resetForm:function(){this.textbox.value=a.isValue(this.value)?this.value.toString():""},focus:function(){this.getDataTable()._focusEl(this.textbox);this.textbox.select()},getInputValue:function(){return this.textbox.value}});a.augmentObject(b.TextboxCellEditor,h);j.Editors={checkbox:b.CheckboxCellEditor,date:b.DateCellEditor,
 
dropdown:b.DropdownCellEditor,radio:b.RadioCellEditor,textarea:b.TextareaCellEditor,textbox:b.TextboxCellEditor};b.CellEditor=function(b,c){if(b&&j.Editors[b]){a.augmentObject(h,j.Editors[b]);return new j.Editors[b](c)}return new h(null,c)};a.augmentObject(b.CellEditor,h)})();YAHOO.register("datatable",YAHOO.widget.DataTable,{version:"2.9.0",build:"2800"});
 
\ No newline at end of file
rhodecode/templates/admin/admin_log.html
Show inline comments
 
## -*- coding: utf-8 -*-
 
%if c.users_log:
 
<table>
 
	<tr>
 
		<th class="left">${_('Username')}</th>
 
		<th class="left">${_('Action')}</th>
 
		<th class="left">${_('Repository')}</th>
 
		<th class="left">${_('Date')}</th>
 
		<th class="left">${_('From IP')}</th>
 
	</tr>
 

	
 
	%for cnt,l in enumerate(c.users_log):
 
	<tr class="parity${cnt%2}">
 
		<td>${h.link_to(l.user.username,h.url('edit_user', id=l.user.user_id))}</td>
 
		<td>${h.action_parser(l)[0]}
 
		<td>${h.action_parser(l)[0]()}
 
		  <div class="journal_action_params">
 
		  ${h.literal(h.action_parser(l)[1]())}</div>
 
            ${h.literal(h.action_parser(l)[1]())}
 
          </div>
 
		</td>
 
		<td>
 
		%if l.repository:
 
		%if l.repository is not None:
 
		  ${h.link_to(l.repository.repo_name,h.url('summary_home',repo_name=l.repository.repo_name))}
 
		%else:
 
		  ${l.repository_name}
 
		%endif
 
		</td>
 

	
 
		<td>${l.action_date}</td>
 
		<td>${l.user_ip}</td>
 
	</tr>
 
	%endfor
 
</table>
 

	
 
<script type="text/javascript">
 
  YUE.onDOMReady(function(){
 
	YUE.delegate("user_log","click",function(e, matchedEl, container){
 
		ypjax(e.target.href,"user_log",function(){show_more_event();tooltip_activate();});
 
		YUE.preventDefault(e);
 
	},'.pager_link');
 

	
 
	YUE.delegate("user_log","click",function(e,matchedEl,container){
 
	      var el = e.target;
 
	      YUD.setStyle(YUD.get(el.id.substring(1)),'display','');
 
	      YUD.setStyle(el.parentNode,'display','none');
 
	  },'.show_more');
 
  });
 
</script>
 

	
 
<div class="pagination-wh pagination-left">
 
${c.users_log.pager('$link_previous ~2~ $link_next')}
 
</div>
 
%else:
 
	${_('No actions yet')}
 
%endif
rhodecode/templates/admin/repos/repo_edit_perms.html
Show inline comments
 
<table id="permissions_manage" class="noborder">
 
    <tr>
 
        <td>${_('none')}</td>
 
        <td>${_('read')}</td>
 
        <td>${_('write')}</td>
 
        <td>${_('admin')}</td>
 
        <td>${_('member')}</td>
 
        <td></td>
 
    </tr>
 
    ## USERS
 
    %for r2p in c.repo_info.repo_to_perm:
 
        %if r2p.user.username =='default' and c.repo_info.private:
 
            <tr>
 
                <td colspan="4">
 
                    <span class="private_repo_msg">
 
                    ${_('private repository')}
 
                    </span>
 
                </td>
 
                <td class="private_repo_msg"><img style="vertical-align:bottom" src="${h.url('/images/icons/user.png')}"/>${r2p.user.username}</td>
 
            </tr>
 
        %else:
 
        <tr id="id${id(r2p.user.username)}">
 
            <td>${h.radio('u_perm_%s' % r2p.user.username,'repository.none')}</td>
 
            <td>${h.radio('u_perm_%s' % r2p.user.username,'repository.read')}</td>
 
            <td>${h.radio('u_perm_%s' % r2p.user.username,'repository.write')}</td>
 
            <td>${h.radio('u_perm_%s' % r2p.user.username,'repository.admin')}</td>
 
            <td style="white-space: nowrap;">
 
                <img class="perm-gravatar" src="${h.gravatar_url(r2p.user.email,14)}"/>${r2p.user.username}
 
            </td>
 
            <td>
 
              %if r2p.user.username !='default':
 
                <span class="delete_icon action_button" onclick="ajaxActionUser(${r2p.user.user_id},'${'id%s'%id(r2p.user.username)}')">
 
                ${_('revoke')}
 
                </span>
 
              %endif
 
            </td>
 
        </tr>
 
        %endif
 
    %endfor
 

	
 
    ## USERS GROUPS
 
    %for g2p in c.repo_info.users_group_to_perm:
 
        <tr id="id${id(g2p.users_group.users_group_name)}">
 
            <td>${h.radio('g_perm_%s' % g2p.users_group.users_group_name,'repository.none')}</td>
 
            <td>${h.radio('g_perm_%s' % g2p.users_group.users_group_name,'repository.read')}</td>
 
            <td>${h.radio('g_perm_%s' % g2p.users_group.users_group_name,'repository.write')}</td>
 
            <td>${h.radio('g_perm_%s' % g2p.users_group.users_group_name,'repository.admin')}</td>
 
            <td style="white-space: nowrap;">
 
                <img class="perm-gravatar" src="${h.url('/images/icons/group.png')}"/>${g2p.users_group.users_group_name}
 
                <img class="perm-gravatar" src="${h.url('/images/icons/group.png')}"/>
 
                %if h.HasPermissionAny('hg.admin')():
 
                 <a href="${h.url('edit_users_group',id=g2p.users_group.users_group_id)}">${g2p.users_group.users_group_name}</a>
 
                %else:
 
                 ${g2p.users_group.users_group_name}
 
                %endif
 
            </td>
 
            <td>
 
                <span class="delete_icon action_button" onclick="ajaxActionUsersGroup(${g2p.users_group.users_group_id},'${'id%s'%id(g2p.users_group.users_group_name)}')">
 
                ${_('revoke')}
 
                </span>
 
            </td>
 
        </tr>
 
    %endfor
 
    <tr id="add_perm_input">
 
        <td>${h.radio('perm_new_member','repository.none')}</td>
 
        <td>${h.radio('perm_new_member','repository.read')}</td>
 
        <td>${h.radio('perm_new_member','repository.write')}</td>
 
        <td>${h.radio('perm_new_member','repository.admin')}</td>
 
        <td class='ac'>
 
            <div class="perm_ac" id="perm_ac">
 
                ${h.text('perm_new_member_name',class_='yui-ac-input')}
 
                ${h.hidden('perm_new_member_type')}
 
                <div id="perm_container"></div>
 
            </div>
 
        </td>
 
        <td></td>
 
    </tr>
 
    <tr>
 
        <td colspan="6">
 
            <span id="add_perm" class="add_icon" style="cursor: pointer;">
 
            ${_('Add another member')}
 
            </span>
 
        </td>
 
    </tr>
 
</table>
 
<script type="text/javascript">
 
function ajaxActionUser(user_id, field_id) {
 
    var sUrl = "${h.url('delete_repo_user',repo_name=c.repo_name)}";
 
    var callback = {
 
        success: function (o) {
 
            var tr = YUD.get(String(field_id));
 
            tr.parentNode.removeChild(tr);
 
        },
 
        failure: function (o) {
 
            alert("${_('Failed to remove user')}");
 
        },
 
    };
 
    var postData = '_method=delete&user_id=' + user_id;
 
    var request = YAHOO.util.Connect.asyncRequest('POST', sUrl, callback, postData);
 
};
 

	
 
function ajaxActionUsersGroup(users_group_id,field_id){
 
    var sUrl = "${h.url('delete_repo_users_group',repo_name=c.repo_name)}";
 
    var callback = {
 
    	success:function(o){
 
    	    var tr = YUD.get(String(field_id));
 
    		tr.parentNode.removeChild(tr);
 
    	},
 
        failure:function(o){
 
            alert("${_('Failed to remove users group')}");
 
        },
 
    };
 
    var postData = '_method=delete&users_group_id='+users_group_id;
 
    var request = YAHOO.util.Connect.asyncRequest('POST', sUrl, callback, postData);
 
};
 

	
 
YUE.onDOMReady(function () {
 
    if (!YUD.hasClass('perm_new_member_name', 'error')) {
 
        YUD.setStyle('add_perm_input', 'display', 'none');
 
    }
 
    YAHOO.util.Event.addListener('add_perm', 'click', function () {
 
        YUD.setStyle('add_perm_input', 'display', '');
 
        YUD.setStyle('add_perm', 'opacity', '0.6');
 
        YUD.setStyle('add_perm', 'cursor', 'default');
 
    });
 
    MembersAutoComplete(
 
    		  ${c.users_array|n},
 
    		  ${c.users_groups_array|n},
 
    		  "${_('Group')}",
 
    		  "${_('members')}"
 
    		);
 
    MembersAutoComplete(${c.users_array|n}, ${c.users_groups_array|n});
 
});
 

	
 
</script>
rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html
Show inline comments
 
@@ -61,57 +61,52 @@
 
    <tr>
 
        <td colspan="6">
 
            <span id="add_perm" class="add_icon" style="cursor: pointer;">
 
            ${_('Add another member')}
 
            </span>
 
        </td>
 
    </tr>
 
</table>
 
<script type="text/javascript">
 
function ajaxActionUser(user_id, field_id) {
 
    var sUrl = "${h.url('delete_repos_group_user_perm',group_name=c.repos_group.group_name)}";
 
    var callback = {
 
        success: function (o) {
 
            var tr = YUD.get(String(field_id));
 
            tr.parentNode.removeChild(tr);
 
        },
 
        failure: function (o) {
 
            alert("${_('Failed to remove user')}");
 
        },
 
    };
 
    var postData = '_method=delete&user_id=' + user_id;
 
    var request = YAHOO.util.Connect.asyncRequest('POST', sUrl, callback, postData);
 
};
 

	
 
function ajaxActionUsersGroup(users_group_id,field_id){
 
    var sUrl = "${h.url('delete_repos_group_users_group_perm',group_name=c.repos_group.group_name)}";
 
    var callback = {
 
        success:function(o){
 
            var tr = YUD.get(String(field_id));
 
            tr.parentNode.removeChild(tr);
 
        },
 
        failure:function(o){
 
            alert("${_('Failed to remove users group')}");
 
        },
 
    };
 
    var postData = '_method=delete&users_group_id='+users_group_id;
 
    var request = YAHOO.util.Connect.asyncRequest('POST', sUrl, callback, postData);
 
};
 

	
 
YUE.onDOMReady(function () {
 
    if (!YUD.hasClass('perm_new_member_name', 'error')) {
 
        YUD.setStyle('add_perm_input', 'display', 'none');
 
    }
 
    YAHOO.util.Event.addListener('add_perm', 'click', function () {
 
        YUD.setStyle('add_perm_input', 'display', '');
 
        YUD.setStyle('add_perm', 'opacity', '0.6');
 
        YUD.setStyle('add_perm', 'cursor', 'default');
 
    });
 
    MembersAutoComplete(
 
            ${c.users_array|n},
 
            ${c.users_groups_array|n},
 
            "${_('Group')}",
 
            "${_('members')}"
 
          );
 
    MembersAutoComplete(${c.users_array|n}, ${c.users_groups_array|n});
 
});
 

	
 
</script>
rhodecode/templates/admin/users/user_edit_my_account_form.html
Show inline comments
 
@@ -37,49 +37,49 @@
 
                    <div class="input">
 
                        ${h.password('new_password',class_="medium",autocomplete="off")}
 
                    </div>
 
                 </div>
 

	
 
                 <div class="field">
 
                    <div class="label">
 
                        <label for="password_confirmation">${_('New password confirmation')}:</label>
 
                    </div>
 
                    <div class="input">
 
                        ${h.password('password_confirmation',class_="medium",autocomplete="off")}
 
                    </div>
 
                 </div>
 

	
 
                 <div class="field">
 
                    <div class="label">
 
                        <label for="name">${_('First Name')}:</label>
 
                    </div>
 
                    <div class="input">
 
                        ${h.text('name',class_="medium")}
 
                    </div>
 
                 </div>
 

	
 
                 <div class="field">
 
                    <div class="label">
 
                        <label for="lastname">${_('Last Name')}:</label>
 
                    </div>
 
                    <div class="input">
 
                        ${h.text('lastname',class_="medium")}
 
                    </div>
 
                 </div>
 

	
 
                 <div class="field">
 
                    <div class="label">
 
                        <label for="email">${_('Email')}:</label>
 
                    </div>
 
                    <div class="input">
 
                        ${h.text('email',class_="medium")}
 
                    </div>
 
                 </div>
 

	
 
                <div class="buttons">
 
                  ${h.submit('save',_('Save'),class_="ui-button")}
 
                  ${h.reset('reset',_('Reset'),class_="ui-button")}
 
                </div>
 
            </div>
 
        </div>
 
    ${h.end_form()}
 
    </div>
 
\ No newline at end of file
 
    </div>
rhodecode/templates/base/root.html
Show inline comments
 
## -*- coding: utf-8 -*-
 
<!DOCTYPE html>
 
<html xmlns="http://www.w3.org/1999/xhtml">
 
    <head>
 
        <title>${self.title()}</title>
 
        <meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
 
        <meta name="robots" content="index, nofollow"/>
 
        <link rel="icon" href="${h.url('/images/icons/database_gear.png')}" type="image/png" />
 

	
 
        ## CSS ###
 
        <%def name="css()">
 
            <link rel="stylesheet" type="text/css" href="${h.url('/css/style.css')}" media="screen"/>
 
            <link rel="stylesheet" type="text/css" href="${h.url('/css/pygments.css')}"/>
 
            ## EXTRA FOR CSS
 
            ${self.css_extra()}
 
        </%def>
 
        <%def name="css_extra()">
 
        </%def>
 

	
 
        ${self.css()}
 

	
 
        %if c.ga_code:
 
        <!-- Analytics -->
 
	     <script type="text/javascript">
 
	      var _gaq = _gaq || [];
 
	      _gaq.push(['_setAccount', '${c.ga_code}']);
 
	      _gaq.push(['_trackPageview']);
 

	
 
	      (function() {
 
	        var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
 
	        ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
 
	        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
 
	      })();
 
	     </script>
 
	    %endif
 

	
 
        ## JAVASCRIPT ##
 
        <%def name="js()">
 
            <script type="text/javascript">
 
            //JS translations map
 
            var TRANSLATION_MAP = {
 
                'add another comment':'${_("add another comment")}',
 
                'Stop following this repository':"${_('Stop following this repository')}",
 
                'Start following this repository':"${_('Start following this repository')}",
 
                'Group':"${_('Group')}",
 
                'members':"${_('members')}"
 

	
 
            };
 
            var _TM = TRANSLATION_MAP;
 
            </script>
 
            <script type="text/javascript" src="${h.url('/js/yui.2.9.js')}"></script>
 
            <!--[if lt IE 9]>
 
               <script language="javascript" type="text/javascript" src="${h.url('/js/excanvas.min.js')}"></script>
 
            <![endif]-->
 
            <script type="text/javascript" src="${h.url('/js/yui.flot.js')}"></script>
 
            <script type="text/javascript" src="${h.url('/js/rhodecode.js')}"></script>
 
           ## EXTRA FOR JS
 
           ${self.js_extra()}
 

	
 
            <script type="text/javascript">
 
            var follow_base_url  = "${h.url('toggle_following')}";
 

	
 
            //JS translations map
 
            var TRANSLATION_MAP = {
 
            	'add another comment':'${_("add another comment")}',
 
                'Stop following this repository':"${_('Stop following this repository')}",
 
                'Start following this repository':"${_('Start following this repository')}",
 
            };
 

	
 
            var onSuccessFollow = function(target){
 
                var f = YUD.get(target.id);
 
                var f_cnt = YUD.get('current_followers_count');
 

	
 
                if(f.getAttribute('class')=='follow'){
 
                    f.setAttribute('class','following');
 
                    f.setAttribute('title',TRANSLATION_MAP['Stop following this repository']);
 
                    f.setAttribute('title',_TM['Stop following this repository']);
 

	
 
                    if(f_cnt){
 
                        var cnt = Number(f_cnt.innerHTML)+1;
 
                        f_cnt.innerHTML = cnt;
 
                    }
 
                }
 
                else{
 
                    f.setAttribute('class','follow');
 
                    f.setAttribute('title',TRANSLATION_MAP['Start following this repository']);
 
                    f.setAttribute('title',_TM['Start following this repository']);
 
                    if(f_cnt){
 
                        var cnt = Number(f_cnt.innerHTML)+1;
 
                        f_cnt.innerHTML = cnt;
 
                    }
 
                }
 
            }
 

	
 
            var toggleFollowingUser = function(target,fallows_user_id,token,user_id){
 
                args = 'follows_user_id='+fallows_user_id;
 
                args+= '&amp;auth_token='+token;
 
                if(user_id != undefined){
 
                    args+="&amp;user_id="+user_id;
 
                }
 
                YUC.asyncRequest('POST',follow_base_url,{
 
                    success:function(o){
 
                    	onSuccessFollow(target);
 
                    }
 
                },args);
 
                return false;
 
            }
 

	
 
            var toggleFollowingRepo = function(target,fallows_repo_id,token,user_id){
 

	
 
                args = 'follows_repo_id='+fallows_repo_id;
 
                args+= '&amp;auth_token='+token;
 
                if(user_id != undefined){
 
                    args+="&amp;user_id="+user_id;
 
                }
 
                YUC.asyncRequest('POST',follow_base_url,{
 
                    success:function(o){
 
                    	onSuccessFollow(target);
 
                    }
 
                },args);
 
                return false;
 
            }
 
           YUE.onDOMReady(function(){
 
             tooltip_activate();
 
             show_more_event();
 

	
 
             YUE.on('quick_login_link','click',function(e){
 
                 // make sure we don't redirect
 
                 YUE.preventDefault(e);
 

	
 
                 if(YUD.hasClass('quick_login_link','enabled')){
 
                     YUD.setStyle('quick_login','display','none');
 
                     YUD.removeClass('quick_login_link','enabled');
 
                 }
 
                 else{
rhodecode/templates/changeset/changeset.html
Show inline comments
 
@@ -77,97 +77,100 @@
 
		             %for p_cs in reversed(c.changeset.parents):
 
		                 <div class="parent">${_('Parent')}
 
                     <span class="changeset_id">${p_cs.revision}:<span class="changeset_hash">${h.link_to(h.short_id(p_cs.raw_id),
 
		                     h.url('changeset_home',repo_name=c.repo_name,revision=p_cs.raw_id),title=p_cs.message)}</span></span>
 
		                 </div>
 
		             %endfor
 
                    %else:
 
                        <div class="parent">${_('No parents')}</div>
 
                    %endif
 
		         <span class="logtags">
 
                 %if len(c.changeset.parents)>1:
 
                 <span class="merge">${_('merge')}</span>
 
                 %endif
 
		             %if c.changeset.branch:
 
                     <span class="branchtag" title="${'%s %s' % (_('branch'),c.changeset.branch)}">
 
		             ${h.link_to(c.changeset.branch,h.url('files_home',repo_name=c.repo_name,revision=c.changeset.raw_id))}
 
                     </span>
 
                     %endif
 
		             %for tag in c.changeset.tags:
 
		                 <span class="tagtag"  title="${'%s %s' % (_('tag'),tag)}">
 
		                 ${h.link_to(tag,h.url('files_home',repo_name=c.repo_name,revision=c.changeset.raw_id))}</span>
 
		             %endfor
 
		         </span>
 
	                </div>
 
	        </div>
 
	        <span>
 
	        ${_('%s files affected with %s insertions and %s deletions:') % (len(c.changeset.affected_files),c.lines_added,c.lines_deleted)}
 
	        </span>
 
	        <div class="cs_files">
 
	                %for change,filenode,diff,cs1,cs2,stat in c.changes:
 
	                    <div class="cs_${change}">
 
                            <div class="node">
 
                            %if change != 'removed':
 
                                ${h.link_to(h.safe_unicode(filenode.path),c.anchor_url(filenode.changeset.raw_id,filenode.path,request.GET)+"_target")}
 
                            %else:
 
                                ${h.link_to(h.safe_unicode(filenode.path),h.url.current(anchor=h.FID('',filenode.path)))}
 
                            %endif
 
                            </div>
 
		                    <div class="changes">${h.fancy_file_stats(stat)}</div>
 
	                    </div>
 
	                %endfor
 
	                % if c.cut_off:
 
	                  ${_('Changeset was too big and was cut off...')}
 
	                % endif
 
	        </div>
 
	    </div>
 

	
 
    </div>
 

	
 
    <script>
 
    var _USERS_AC_DATA = ${c.users_array|n};
 
    var _GROUPS_AC_DATA = ${c.users_groups_array|n};
 
    </script>
 
    ## diff block
 
    <%namespace name="diff_block" file="/changeset/diff_block.html"/>
 
    ${diff_block.diff_block(c.changes)}
 

	
 
    ## template for inline comment form
 
    <%namespace name="comment" file="/changeset/changeset_file_comment.html"/>
 
    ${comment.comment_inline_form(c.changeset)}
 

	
 
    ## render comments
 
    ${comment.comments(c.changeset)}
 
    <script type="text/javascript">
 
      YUE.onDOMReady(function(){
 
    	  AJAX_COMMENT_URL = "${url('changeset_comment',repo_name=c.repo_name,revision=c.changeset.raw_id)}";
 
    	  AJAX_COMMENT_DELETE_URL = "${url('changeset_comment_delete',repo_name=c.repo_name,comment_id='__COMMENT_ID__')}"
 
          YUE.on(YUQ('.show-inline-comments'),'change',function(e){
 
              var show = 'none';
 
              var target = e.currentTarget;
 
              if(target.checked){
 
                  var show = ''
 
              }
 
              var boxid = YUD.getAttribute(target,'id_for');
 
              var comments = YUQ('#{0} .inline-comments'.format(boxid));
 
              for(c in comments){
 
                 YUD.setStyle(comments[c],'display',show);
 
              }
 
              var btns = YUQ('#{0} .inline-comments-button'.format(boxid));
 
              for(c in btns){
 
                  YUD.setStyle(btns[c],'display',show);
 
               }
 
          })
 

	
 
          YUE.on(YUQ('.line'),'click',function(e){
 
              var tr = e.currentTarget;
 
              injectInlineForm(tr);
 
          });
 

	
 
          // inject comments into they proper positions
 
          var file_comments = YUQ('.inline-comment-placeholder');
 
          renderInlineComments(file_comments);
 
          
 
          YUE.on(YUD.get('show_changeset_status_box'),'change',function(e){
 
        	  if(e.currentTarget.checked){
 
        		  YUD.setStyle('status_block_container','display','');  
 
        	  }
 
        	  else{
 
        		  YUD.setStyle('status_block_container','display','none');
 
        	  }
 
          })
rhodecode/templates/changeset/changeset_comment_block.html
Show inline comments
 
## this is a dummy html file for partial rendering on server and sending
 
## generated output via ajax after comment submit
 
<%namespace name="comment" file="/changeset/changeset_file_comment.html"/>
 
${comment.comment_block(c.co)}
rhodecode/templates/changeset/changeset_file_comment.html
Show inline comments
 
## -*- coding: utf-8 -*-
 
## usage:
 
## <%namespace name="comment" file="/changeset/changeset_file_comment.html"/>
 
## ${comment.comment_block(co)}
 
##
 
<%def name="comment_block(co)">
 
  <div class="comment" id="comment-${co.comment_id}" line="${co.line_no}">
 
    <div class="comment-wrapp">
 
  	<div class="meta">
 
        <div style="float:left"> <img src="${h.gravatar_url(co.author.email, 20)}" /> </div>
 
  		<div class="user">
 
  			${co.author.username}
 
  		</div>
 
  		<div class="date">
 
  			${h.age(co.modified_at)}
 
  		</div>
 
        %if co.status_change:
 
           <div  style="float:left" class="changeset-status-container">
 
             <div style="float:left;padding:0px 2px 0px 2px"><span style="font-size: 18px;">&rsaquo;</span></div>
 
             <div title="${_('Changeset status')}" class="changeset-status-lbl"> ${co.status_change.status_lbl}</div>
 
             <div class="changeset-status-ico"><img src="${h.url(str('/images/icons/flag_status_%s.png' % co.status_change.status))}" /></div>             
 
           </div>
 
        %endif      
 
      %if h.HasPermissionAny('hg.admin', 'repository.admin')() or co.author.user_id == c.rhodecode_user.user_id:
 
        <div class="buttons">
 
          <span onClick="deleteComment(${co.comment_id})" class="delete-comment ui-btn">${_('Delete')}</span>
 
        </div>
 
      %endif
 
  	</div>
 
  	<div class="text">
 
  		${h.rst_w_mentions(co.text)|n}
 
  	</div>
 
    </div>
 
  </div>
 
</%def>
 

	
 

	
 
<%def name="comment_inline_form(changeset)">
 
<div id='comment-inline-form-template' style="display:none">
 
  <div class="comment-inline-form">
 
  <div class="comment-inline-form ac">
 
  %if c.rhodecode_user.username != 'default':
 
    <div class="overlay"><div class="overlay-text">${_('Submitting...')}</div></div>
 
      ${h.form(h.url('changeset_comment', repo_name=c.repo_name, revision=changeset.raw_id),class_='inline-form')}
 
      <div class="clearfix">
 
          <div class="comment-help">${_('Commenting on line {1}.')}
 
          ${(_('Comments parsed using %s syntax with %s support.') % (('<a href="%s">RST</a>' % h.url('rst_help')),
 
          	'<span style="color:#003367" class="tooltip" title="%s">@mention</span>' %
 
          	_('Use @username inside this text to send notification to this RhodeCode user')))|n}</div>
 
          <textarea id="text_{1}" name="text"></textarea>
 
          	_('Use @username inside this text to send notification to this RhodeCode user')))|n}
 
          </div>
 
            <div class="mentions-container" id="mentions_container_{1}"></div>
 
            <textarea id="text_{1}" name="text" class="yui-ac-input"></textarea>
 
      </div>
 
      <div class="comment-button">
 
      <input type="hidden" name="f_path" value="{0}">
 
      <input type="hidden" name="line" value="{1}">
 
      ${h.submit('save', _('Comment'), class_='ui-btn save-inline-form')}
 
      ${h.reset('hide-inline-form', _('Hide'), class_='ui-btn hide-inline-form')}
 
      </div>
 
      ${h.end_form()}
 
  %else:
 
      ${h.form('')}
 
      <div class="clearfix">
 
          <div class="comment-help">
 
            ${_('You need to be logged in to comment.')} <a href="${h.url('login_home',came_from=h.url.current())}">${_('Login now')}</a>
 
          </div>
 
      </div>
 
      <div class="comment-button">
 
      ${h.reset('hide-inline-form', _('Hide'), class_='ui-btn hide-inline-form')}
 
      </div>
 
      ${h.end_form()}
 
  %endif
 
  </div>
 
</div>
 
</%def>
 

	
 

	
 
<%def name="inlines(changeset)">
 
    <div class="comments-number">${ungettext("%d comment", "%d comments", len(c.comments)) % len(c.comments)} ${ungettext("(%d inline)", "(%d inline)", c.inline_cnt) % c.inline_cnt}</div>
 
    %for path, lines in c.inline_comments:
 
        % for line,comments in lines.iteritems():
 
            <div style="display:none" class="inline-comment-placeholder" path="${path}" target_id="${h.safeid(h.safe_unicode(path))}">
 
            %for co in comments:
 
                ${comment_block(co)}
 
            %endfor
 
            </div>
 
        %endfor
 
    %endfor
 

	
 
</%def>
 

	
 
## MAIN COMMENT FORM
 
<%def name="comments(changeset)">
 

	
 
<div class="comments">
 
    <div id="inline-comments-container">
 
     ${inlines(changeset)}
 
    </div>
 

	
 
    %for co in c.comments:
 
        <div id="comment-tr-${co.comment_id}">
 
          ${comment_block(co)}
 
        </div>
 
    %endfor
 
    %if c.rhodecode_user.username != 'default':
 
    <div class="comment-form">
 
    <div class="comment-form ac">
 
        ${h.form(h.url('changeset_comment', repo_name=c.repo_name, revision=changeset.raw_id))}
 
        <strong>${_('Leave a comment')}</strong>
 
        <div class="clearfix">
 
            <div class="comment-help">
 
                ${(_('Comments parsed using %s syntax with %s support.') % (('<a href="%s">RST</a>' % h.url('rst_help')),
 
          		'<span style="color:#003367" class="tooltip" title="%s">@mention</span>' %
 
          		_('Use @username inside this text to send notification to this RhodeCode user')))|n}
 
                | <span class="tooltip" title="${_('Check this to change current status of code-review for this changeset')}"> ${_('change status')}
 
                  <input style="vertical-align: bottom;margin-bottom:-2px" id="show_changeset_status_box" type="checkbox" name="change_changeset_status" />
 
                  </span> 
 
            </div>
 
            <div id="status_block_container" class="status-block" style="display:none">
 
                %for status,lbl in c.changeset_statuses:
 
                    <div class="">
 
                        <img src="${h.url('/images/icons/flag_status_%s.png' % status)}" /> <input ${'checked="checked"' if status == h.changeset_status(c.rhodecode_db_repo, c.changeset.raw_id) else ''}" type="radio" name="changeset_status" value="${status}"> <label>${lbl}</label>
 
                    </div>                    
 
                %endfor
 
            </div>                 
 
            <div class="mentions-container" id="mentions_container"></div>
 
            ${h.textarea('text')}
 
        </div>
 
        <div class="comment-button">
 
        ${h.submit('save', _('Comment'), class_='ui-button')}
 
        </div>
 
        ${h.end_form()}
 
    </div>
 
    %endif
 
</div>
 
<script>
 
YUE.onDOMReady(function () {
 
   MentionsAutoComplete('text', 'mentions_container', _USERS_AC_DATA, _GROUPS_AC_DATA);
 
});
 
</script>
 
</%def>
rhodecode/templates/journal/journal_data.html
Show inline comments
 
## -*- coding: utf-8 -*-
 

	
 
%if c.journal_day_aggreagate:
 
    %for day,items in c.journal_day_aggreagate:
 
    <div class="journal_day">${day}</div>
 
        % for user,entries in items:
 
	        <div class="journal_container">
 
	            <div class="gravatar">
 
	                <img alt="gravatar" src="${h.gravatar_url(user.email,24)}"/>
 
	            </div>
 
	            <div class="journal_user">${user.name} ${user.lastname}</div>
 
	            <div class="journal_action_container">
 
	            % for entry in entries:
 
		            <div class="journal_icon"> ${h.action_parser_icon(entry)}</div>
 
		            <div class="journal_action">${h.action_parser(entry)[0]}</div>
 
		            <div class="journal_icon"> ${h.action_parser(entry)[2]()}</div>
 
		            <div class="journal_action">${h.action_parser(entry)[0]()}</div>
 
		            <div class="journal_repo">
 
		                <span class="journal_repo_name">
 
		                %if entry.repository is not None:
 
		                  ${h.link_to(entry.repository.repo_name,
 
		                              h.url('summary_home',repo_name=entry.repository.repo_name))}
 
		                %else:
 
		                  ${entry.repository_name}
 
		                %endif
 
		                </span>
 
		            </div>
 
		            <div class="journal_action_params">${h.literal(h.action_parser(entry)[1]())}</div>
 
		            <div class="date"><span class="tooltip" title="${entry.action_date}">${h.age(entry.action_date)}</span></div>
 
	            %endfor
 
	            </div>
 
	        </div>
 
        %endfor
 
    %endfor
 

	
 
  <div class="pagination-wh pagination-left">
 
    <script type="text/javascript">
 
    YUE.onDOMReady(function(){
 
        YUE.delegate("journal","click",function(e, matchedEl, container){
 
        	ypjax(e.target.href,"journal",function(){show_more_event();tooltip_activate();});
 
            YUE.preventDefault(e);
 
        },'.pager_link');
 
    });
 
    </script>
 
  ${c.journal_pager.pager('$link_previous ~2~ $link_next')}
 
  </div>
 
%else:
 
  <div style="padding:5px 0px 10px 10px;">
 
      ${_('No entries yet')}
 
  </div>
 
%endif
rhodecode/templates/search/search.html
Show inline comments
 
@@ -20,61 +20,62 @@
 

	
 
<div class="box">
 
	<!-- box / title -->
 
	<div class="title">
 
		<h5>${_('Search')}
 
		%if c.repo_name:
 
			${_('in repository: ') + c.repo_name}
 
		%else:
 
			${_('in all repositories')}
 
		%endif
 
		</h5>
 
	</div>
 
	<!-- end box / title -->
 
	%if c.repo_name:
 
		${h.form(h.url('search_repo',search_repo=c.repo_name),method='get')}
 
	%else:
 
		${h.form(h.url('search'),method='get')}
 
	%endif
 
	<div class="form">
 
		<div class="fields">
 
			<div class="field field-first field-noborder">
 
             <div class="label">
 
                 <label for="q">${_('Search term')}</label>
 
             </div>
 
				<div class="input">${h.text('q',c.cur_query,class_="small")}
 
					<div class="button highlight">
 
						<input type="submit" value="${_('Search')}" class="ui-button"/>
 
					</div>
 
				</div>
 
				<div style="font-weight: bold;clear:Both;margin-left:200px">${c.runtime}</div>
 
			</div>
 

	
 
			<div class="field">
 
	            <div class="label">
 
	                <label for="type">${_('Search in')}</label>
 
	            </div>
 
                <div class="select">
 
                    ${h.select('type',c.cur_type,[('content',_('File contents')),
 
                        ##('commit',_('Commit messages')),
 
                        ('path',_('File names')),
 
                        ##('repository',_('Repository names')),
 
                        ])}
 
                </div>
 
             </div>
 

	
 
		</div>
 
	</div>
 
	${h.end_form()}
 

	
 
    <div class="search">
 
    %if c.cur_search == 'content':
 
        <%include file='search_content.html'/>
 
    %elif c.cur_search == 'path':
 
        <%include file='search_path.html'/>
 
    %elif c.cur_search == 'commit':
 
        <%include file='search_commit.html'/>
 
    %elif c.cur_search == 'repository':
 
        <%include file='search_repository.html'/>
 
    %endif
 
</div>
 
</div>
 

	
 
</%def>
rhodecode/templates/summary/summary.html
Show inline comments
 
@@ -175,101 +175,101 @@
 
    <!-- box / title -->
 
    <div class="title">
 
        <h5>${_('Commit activity by day / author')}</h5>
 
    </div>
 

	
 
    <div class="graph">
 
         <div style="padding:0 10px 10px 17px;">
 
         %if c.no_data:
 
           ${c.no_data_msg}
 
           %if h.HasPermissionAll('hg.admin')('enable stats on from summary'):
 
                ${h.link_to(_('enable'),h.url('edit_repo',repo_name=c.repo_name),class_="ui-btn")}
 
           %endif
 
        %else:
 
            ${_('Stats gathered: ')} ${c.stats_percentage}%
 
        %endif
 
        </div>
 
        <div id="commit_history" style="width:450px;height:300px;float:left"></div>
 
        <div style="clear: both;height: 10px"></div>
 
        <div id="overview" style="width:450px;height:100px;float:left"></div>
 

	
 
    	<div id="legend_data" style="clear:both;margin-top:10px;">
 
	    	<div id="legend_container"></div>
 
	    	<div id="legend_choices">
 
				<table id="legend_choices_tables" class="noborder" style="font-size:smaller;color:#545454"></table>
 
	    	</div>
 
    	</div>
 
    </div>
 
</div>
 
%endif
 

	
 
<div class="box">
 
    <div class="title">
 
        <div class="breadcrumbs">
 
        %if c.repo_changesets:
 
            ${h.link_to(_('Shortlog'),h.url('shortlog_home',repo_name=c.repo_name))}
 
        %else:
 
            ${_('Quick start')}
 
         %endif
 
        </div>
 
    </div>
 
    <div class="table">
 
        <div id="shortlog_data">
 
            <%include file='../shortlog/shortlog_data.html'/>
 
        </div>
 
    </div>
 
</div>
 

	
 
%if c.readme_data:
 
<div class="box" style="background-color: #FAFAFA">
 
<div id="readme" class="box header-pos-fix" style="background-color: #FAFAFA">
 
    <div id="readme" class="title">
 
        <div class="breadcrumbs"><a href="${h.url('files_home',repo_name=c.repo_name,revision='tip',f_path=c.readme_file)}">${c.readme_file}</a></div>
 
    </div>
 
    <div class="readme">
 
    <div id="readme" class="readme">
 
      <div class="readme_box">
 
        ${c.readme_data|n}
 
      </div>
 
    </div>
 
</div>
 
%endif
 

	
 
<script type="text/javascript">
 
var clone_url = 'clone_url';
 
YUE.on(clone_url,'click',function(e){
 
    if(YUD.hasClass(clone_url,'selected')){
 
        return
 
    }
 
    else{
 
        YUD.addClass(clone_url,'selected');
 
        YUD.get(clone_url).select();
 
    }
 
})
 

	
 
YUE.on('clone_by_name','click',function(e){
 
    // show url by name and hide name button
 
    YUD.setStyle('clone_url','display','');
 
    YUD.setStyle('clone_by_name','display','none');
 

	
 
    // hide url by id and show name button
 
    YUD.setStyle('clone_by_id','display','');
 
    YUD.setStyle('clone_url_id','display','none');
 

	
 
})
 
YUE.on('clone_by_id','click',function(e){
 

	
 
	// show url by id and hide id button
 
	YUD.setStyle('clone_by_id','display','none');
 
    YUD.setStyle('clone_url_id','display','');
 

	
 
    // hide url by name and show id button
 
	YUD.setStyle('clone_by_name','display','');
 
	YUD.setStyle('clone_url','display','none');
 
})
 

	
 

	
 
var tmpl_links = {};
 
%for cnt,archive in enumerate(c.rhodecode_repo._get_archives()):
 
  tmpl_links["${archive['type']}"] = '${h.link_to('__NAME__', h.url('files_archive_home',repo_name=c.dbrepo.repo_name, fname='__CS__'+archive['extension'],subrepos='__SUB__'),class_='archive_icon ui-btn')}';
 
%endfor
 

	
 
YUE.on(['download_options','archive_subrepos'],'change',function(e){
 
   var sm = YUD.get('download_options');
rhodecode/tests/test_libs.py
Show inline comments
 
@@ -73,59 +73,61 @@ class TestLibs(unittest.TestCase):
 

	
 
    def test_credentials_filter(self):
 
        from rhodecode.lib.utils2 import credentials_filter
 

	
 
        for url in TEST_URLS:
 
            self.assertEqual(credentials_filter(url[0]), url[2])
 

	
 
    def test_str2bool(self):
 
        from rhodecode.lib.utils2 import str2bool
 
        test_cases = [
 
            ('t', True),
 
            ('true', True),
 
            ('y', True),
 
            ('yes', True),
 
            ('on', True),
 
            ('1', True),
 
            ('Y', True),
 
            ('yeS', True),
 
            ('Y', True),
 
            ('TRUE', True),
 
            ('T', True),
 
            ('False', False),
 
            ('F', False),
 
            ('FALSE', False),
 
            ('0', False),
 
            ('-1', False),
 
            ('', False), ]
 

	
 
        for case in test_cases:
 
            self.assertEqual(str2bool(case[0]), case[1])
 

	
 
    def test_mention_extractor(self):
 
        from rhodecode.lib.utils2 import extract_mentioned_users
 
        sample = (
 
            "@first hi there @marcink here's my email marcin@email.com "
 
            "@lukaszb check @one_more22 it pls @ ttwelve @D[] @one@two@three "
 
            "@MARCIN    @maRCiN @2one_more22 @john please see this http://org.pl "
 
            "@marian.user just do it @marco-polo and next extract @marco_polo "
 
            "user.dot  hej ! not-needed maril@domain.org"
 
        )
 

	
 
        s = sorted([
 
        'first', 'marcink', 'lukaszb', 'one_more22', 'MARCIN', 'maRCiN', 'john',
 
        'marian.user', 'marco-polo', 'marco_polo'
 
        ], key=lambda k: k.lower())
 
        self.assertEqual(s, extract_mentioned_users(sample))
 

	
 
    def test_age(self):
 
        import calendar
 
        from rhodecode.lib.utils2 import age
 
        n = datetime.datetime.now()
 
        delt = lambda *args, **kwargs: datetime.timedelta(*args, **kwargs)
 
        self.assertEqual(age(n), u'just now')
 
        self.assertEqual(age(n - delt(seconds=1)), u'1 second ago')
 
        self.assertEqual(age(n - delt(seconds=60 * 2)), u'2 minutes ago')
 
        self.assertEqual(age(n - delt(hours=1)), u'1 hour ago')
 
        self.assertEqual(age(n - delt(hours=24)), u'1 day ago')
 
        self.assertEqual(age(n - delt(hours=24 * 5)), u'5 days ago')
 
        self.assertEqual(age(n - delt(hours=24 * 32)), u'1 month and 2 days ago')
 
        self.assertEqual(age(n - delt(hours=24 * (calendar.mdays[n.month-1] + 2))),
 
                         u'1 month and 2 days ago')
 
        self.assertEqual(age(n - delt(hours=24 * 400)), u'1 year and 1 month ago')
setup.py
Show inline comments
 
@@ -42,62 +42,65 @@ try:
 
    readme_file = 'README.rst'
 
    changelog_file = 'docs/changelog.rst'
 
    long_description = open(readme_file).read() + '\n\n' + \
 
        open(changelog_file).read()
 

	
 
except IOError, err:
 
    sys.stderr.write("[WARNING] Cannot find file specified as "
 
        "long_description (%s)\n or changelog (%s) skipping that file" \
 
            % (readme_file, changelog_file))
 
    long_description = description
 

	
 

	
 
try:
 
    from setuptools import setup, find_packages
 
except ImportError:
 
    from ez_setup import use_setuptools
 
    use_setuptools()
 
    from setuptools import setup, find_packages
 
# packages
 
packages = find_packages(exclude=['ez_setup'])
 

	
 
setup(
 
    name='RhodeCode',
 
    version=get_version(),
 
    description=description,
 
    long_description=long_description,
 
    keywords=keywords,
 
    license=__license__,
 
    author='Marcin Kuzminski',
 
    author_email='marcin@python-works.com',
 
    dependency_links=dependency_links,
 
    url='http://rhodecode.org',
 
    install_requires=requirements,
 
    classifiers=classifiers,
 
    setup_requires=["PasteScript>=1.6.3"],
 
    data_files=data_files,
 
    packages=packages,
 
    include_package_data=True,
 
    test_suite='nose.collector',
 
    package_data=package_data,
 
    message_extractors={'rhodecode': [
 
            ('**.py', 'python', None),
 
            ('templates/**.mako', 'mako', {'input_encoding': 'utf-8'}),
 
            ('templates/**.html', 'mako', {'input_encoding': 'utf-8'}),
 
            ('public/**', 'ignore', None)]},
 
    zip_safe=False,
 
    paster_plugins=['PasteScript', 'Pylons'],
 
    entry_points="""
 
    [console_scripts]
 
    rhodecode-api =  rhodecode.bin.rhodecode_api:main
 

	
 
    [paste.app_factory]
 
    main = rhodecode.config.middleware:make_app
 

	
 
    [paste.app_install]
 
    main = pylons.util:PylonsInstaller
 

	
 
    [paste.global_paster_command]
 
    setup-rhodecode=rhodecode.config.setup_rhodecode:SetupCommand
 
    make-index=rhodecode.lib.indexers:MakeIndex
 
    make-rcext=rhodecode.config.rcextensions.make_rcextensions:MakeRcExt
 
    upgrade-db=rhodecode.lib.dbmigrate:UpgradeDb
 
    celeryd=rhodecode.lib.celerypylons.commands:CeleryDaemonCommand
 
    """,
 
)
0 comments (0 inline, 0 general)