Просмотр исходного кода

js updates. captcha + change password base

Malishev Dmitry 14 лет назад
Родитель
Сommit
80822252af

BIN
web/images/vesta-logo.png


+ 83 - 40
web/index.html

@@ -2,13 +2,16 @@
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ru">
 
     <head>
-        <title>Vesta | IP</title>
+        <title>Vesta Control Panel</title>
         <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
         <meta http-equiv="imagetoolbar" content="false" />
+        
+        <link rel="shortcut icon" href="images/fav.ico" type="image/x-icon">
 
         <link rel="stylesheet" media="all" type="text/css" href="css/reset2.css" />
-        <link rel="stylesheet" media="all" type="text/css" href="css/main.css" />
+        <link rel="stylesheet" media="all" type="text/css" href="css/main.css" />        
         <link rel="stylesheet" media="all" type="text/css" href="css/popup.css" />
+        <link rel="stylesheet" media="all" type="text/css" href="css/vesta-login-form.css" />
 
         <!--[if lt IE 8]>
 		<link rel="stylesheet" type="text/css" href="http://dl.dropbox.com/u/1750887/projects/vesta2/css/ie.css" />
@@ -46,17 +49,30 @@
     </head>
 
     <body>
-        <div id="page">
+        <div id="page" class="hidden">
             <div class="outer">
                 <div id="header">
                     <div class="logo-box">
                         <h1 class="logo"><a href="#">Vesta panel <span>&nbsp;</span></a></h1>
                     </div>            
                     <ul class="settings">
-                        <li><a href="#">settings</a></li>
-                        <li><a href="#">exit</a></li>
-                    </ul>            
+                        <li class="settings-item"><a href="#" class="item-title logged-as" id="user-name">...</a></li>
+                        <li class="settings-item"><a href="#" class="item-title">profile</a></li>
+                        <li class="settings-item"><a href="#" class="item-title do_action_view_profile_settings">settings</a></li>
+                        <li class="settings-item"><a href="#" class="item-title do_action_profile_exit">exit</a></li>
+                    </ul>       
+                    <ul class="extra-services">
+						<li class="service-item service-item_backups">
+							<span class="item-title">Backups</span>
+							<i class="item-devider"></i>
+						</li>
+						<li class="service-item">
+							<span class="item-title">Stats</span>
+							<i class="item-devider"></i>
+						</li>
+				    </ul> 
                 </div>
+                
                 <div id="primary-nav-box">
                     <ul class="primary-nav cc">
                         <li class="section"  id="USER">
@@ -68,26 +84,27 @@
                                         </dt>
                                         <dd class="section-contains">
                                                 <span class="def"><span class="num-total">0</span> users</span>
-                                                <span class="def"><span class="num-blocked">0</span> blocked</span>
+                                                <span class="def"><span class="num-blocked">0</span> suspended</span>
                                         </dd>
                                     </dl>
                             </div>
-                        </li>
-                        
-
+                            
+                            <i class="section-devider"></i>
+                        </li>                        
                         <li class="section"  id="WEB_DOMAIN">
                             <div class="section-inner">
                                     <dl class="users-nav-item">
                                         <dt class="section-title cc">
-                                                <span class="to-section">Web Domain</span> 
+                                                <span class="to-section">Web</span> 
                                                 <i class="add-entry do_action_new_entry">&nbsp;</i>
                                         </dt>
                                         <dd class="section-contains">
                                                <span class="def"><span class="num-total">0</span> web domains</span>
-                                               <span class="def"><span class="num-blocked">0</span> blocked</span>
+                                               <span class="def"><span class="num-blocked">0</span> suspended</span>
                                         </dd>
                                     </dl>
                             </div>
+                            <i class="section-devider"></i>
                         </li>
                         <li class="section"  id="MAIL">
                             <div class="section-inner">
@@ -97,10 +114,11 @@
                                                 <i class="add-entry do_action_new_entry">&nbsp;</i>
                                         </dt>
                                         <dd class="section-contains">
-                                               <span class="def"><span class="num-total">0</span> mails</span>                                               
+                                               <span class="def"><span class="num-total">0</span> mail domain(s)</span>                                               
                                         </dd>
                                     </dl>
                             </div>
+                            <i class="section-devider"></i>
                         </li>
                         <li class="section"  id="DB">
                             <div class="section-inner">
@@ -111,10 +129,11 @@
                                         </dt>
                                         <dd class="section-contains">
                                                <span class="def"><span class="num-total">0</span> databases</span>
-                                               <span class="def"><span class="num-blocked">0</span> blocked</span>
+                                               <span class="def"><span class="num-blocked">0</span> suspended</span>
                                         </dd>
                                     </dl>
                             </div>
+                            <i class="section-devider"></i>
                         </li>
                         <li class="section active"  id="DNS">
                             <div class="section-inner">
@@ -124,10 +143,11 @@
                                                 <i class="add-entry do_action_new_entry">&nbsp;</i>
                                         </dt>
                                         <dd class="section-contains">
-                                                <span class="def"><span class="num-total">0</span> total records</span>
+                                                <span class="def"><span class="num-total">0</span> dns domain(s)</span>
                                         </dd>
                                     </dl>
                             </div>
+                            <i class="section-devider"></i>
                         </li>
                         <li class="section"  id="IP">
                             <div class="section-inner">
@@ -137,11 +157,12 @@
                                                 <i class="add-entry do_action_new_entry">&nbsp;</i>
                                         </dt>
                                         <dd class="section-contains">
-                                               <span class="def"><span class="num-total">0</span> ip entries</span>
-                                               <span class="def"><span class="num-blocked">0</span> blocked</span>
+                                               <span class="def"><span class="num-total">0</span> ip address(es)</span>
+                                               <span class="def"><span class="num-blocked">0</span> suspended</span>
                                         </dd>
                                     </dl>
                             </div>
+                            <i class="section-devider"></i>
                         </li>
                         <li class="section last-section" id="CRON">
                             <div class="section-inner">
@@ -151,11 +172,12 @@
                                                 <i class="add-entry do_action_new_entry">&nbsp;</i>
                                         </dt>
                                         <dd class="section-contains">
-                                               <span class="def"><span class="num-total">0</span> cron records</span>
-                                               <span class="def"><span class="num-blocked">0</span> blocked</span>
+                                               <span class="def"><span class="num-total">0</span> cron job(s)</span>
+                                               <span class="def"><span class="num-blocked">0</span> suspended</span>
                                         </dd>
                                     </dl>
                             </div>
+                            <i class="section-devider"></i>
                         </li>
                     </ul>
                 </div>
@@ -163,16 +185,16 @@
                     <div class="b-console">
 
                         <div class="b-console-wrap">
-                            <form class="b-console-form cc" action="#" method="post">
+                            <form class="b-console-form cc" action="" method="post">
                                 <fieldset>
                                     <input class="b-console-field" type="text" value="/"/>
-                                    <input class="b-console-btn" type="submit" value="Go" />
+                                    <input class="b-console-btn do_action_exec_v_console" type="submit" value="Go"/>
                                 </fieldset>
                             </form>
                             <div class="b-console-statuses hidden">
                                 <div class="b-console-status cc">
 
-                                    <p class="b-console-status-message">domain <b>google.com</b> have been added <br />
+                                    <p class="b-console-status-message">domain <b>test.com</b> have been added <br />
                                         
                                     </p>
                                     <span class="b-console-status-action">cancel</span>
@@ -189,30 +211,53 @@
                         <i class="icon do_action_new_entry">&nbsp;</i>
                         add new <span id="new-entry-keyword" class="do_action_new_entry">entry</span>
                     </a>
+                    <div class="row-filters cc">
+						<div class="b-row-selector">
+							<div class="checkbox-selector cc">
+								<input class="styled" type="checkbox" value="" />
+								<span class="selector-title">385 Selected</span>
+							</div>
+							<div class="context-actions c-s-box">
+								<div class="b-cust-sel complex-select c-s-opt">
+									<input type="hidden" name="" value="" class="c-s-value-ref">
+									<span class="title c-s-opt c-s-title do_action_toggle_custom_select">Action</span>
+									<div class="cust-sel-arrow do_action_toggle_custom_select c-s-opt"><i>&nbsp;</i></div>
+									<div class="cust-sel-options complex-select-content c-s-opt hidden">
+										<div class="cust-sel-option ico_gray c-s-opt do_action_update_cs_value">
+											<input type="hidden" class="c-s-value" value="Suspend">
+											Suspend
+										</div>
+										<div class="cust-sel-option ico_green c-s-opt do_action_update_cs_value">
+											<input type="hidden" class="c-s-value" value="Unsuspended">
+											Unsuspend
+										</div>
+										<div class="cust-sel-option ico_red c-s-opt do_action_update_cs_value">
+											<input type="hidden" class="c-s-value" value="Delete">
+											Delete
+										</div>
+									</div>
+								</div>
+							</div>
+						</div>
+					</div>
                 </div>
 
-                <div id="content">
-                    
-                     <!--  -->
-        
-        <!-- -->
-                    
-                </div>        
+               <div id="content">
+                <div class="content-inner">
+                
+                </div>
             </div>
-        </div>
-        
-       
-        
+            </div>
+        </div>                            
         <script type="text/javascript" src="js/lib/cookie.js"></script>
         <script type="text/javascript" src="js/lib/jquery-1.6.1.js"></script>
         <script type="text/javascript" src="js/lib/jquery-ui-1.8.13.custom.min.js"></script>
+        <script type="text/javascript" src="js/lib/auth.js"></script>
         <script type="text/javascript" src="js/date_format.js"></script>
         <script type="text/javascript" src="js/lib/custom-form-elements.js"></script>
         <script type="text/javascript" src="js/lib/browser.js"></script>
-        <script type="text/javascript" src="js/lib/popup.js"></script>
-        <script type="text/javascript" src="js/tech.js"></script>
-        <script type="text/javascript" src="js/app.js"></script>
-        <script type="text/javascript" src="js/tech.js"></script>
+        <script type="text/javascript" src="js/lib/popup.js"></script>        
+        <script type="text/javascript" src="js/app.js"></script>        
         <script type="text/javascript" src="js/_settings.js"></script>
         <script type="text/javascript" src="js/actions.js"></script>
         <script type="text/javascript" src="js/helpers.js"></script>
@@ -223,9 +268,7 @@
         <script type="text/javascript" src="js/pages.js"></script>
         <script type="text/javascript" src="js/model.js"></script>
         <script type="text/javascript" src="js/core.js"></script>
-        <script type="text/javascript" src="js/validators.js"></script>
-        
+        <script type="text/javascript" src="js/validators.js"></script>        
         <script type="text/javascript" src="js/__init__.js"></script>
     </body>
-
 </html>

+ 21 - 10
web/js/__init__.js

@@ -1,8 +1,19 @@
-$(document).ready(function(){
-    try{
+App.Ajax.request('MAIN.about', {}, function(reply) {
+    if (reply) {
+        App.Settings.VestaAbout.company_name  = reply.data.company_name;
+        App.Settings.VestaAbout.company_email = reply.data.company_email;
+        App.Settings.VestaAbout.version       = reply.data.version;
+        App.Settings.VestaAbout.version_name  = reply.data.version_name;
+    }
+});
+$('document').ready(function() {
+    try {
         App.Utils.detectBrowser();
+        App.Ref.init();    
         
-        if ('undefined' != typeof App.Tmp.loadTAB) {
+        App.Env.world = 'USER';
+        // Disabled cookie tab restoring. Enable if needed
+        /*if ('undefined' != typeof App.Tmp.loadTAB) {
             App.Env.world = App.Tmp.loadTAB;
         }
         
@@ -14,17 +25,17 @@ $(document).ready(function(){
             else {
                 App.Env.world = App.Constants.TABS[0];
             }
-        }
+        }*/
         
-        App.Pages.init();
-        App.Ref.init();
-
-        //App.View.start();
+        App.Pages.init();        
         App.Core.listen();
         App.Core.initMenu();
         App.Helpers.liveValidate();
-
-    }catch(e){
+        $(document).bind('submit', function(evt) {
+           evt.preventDefault(); 
+        });
+    }
+    catch(e) {
         fb.error(e);
     }
 });

+ 26 - 13
web/js/_settings.js

@@ -20,21 +20,34 @@ App.Constants.DNS                   = 'DNS';
 App.Constants.SUSPENDED_YES         = 'yes';
 App.Constants.DNS_TEMPLATES         = {'default': 'Default'};
 
+App.Constants.KEY                   = {};
+App.Constants.KEY.ESC               = 27;
+App.Constants.KEY.ENTER             = 13;
+App.Constants.KEY.SPACE             = 32;
+App.Constants.KEY.BACKSPACE         = 8;
+App.Constants.KEY.UP                = 38;
+App.Constants.KEY.DOWN              = 40;
+App.Constants.KEY.CODED_NAME        = {'27':'ESC', '13':'ENTER','32':'SPACE','8':'BACKSPACE','38':'UP','40':'DOWN'};
+
 // Settings
-App.Settings.FIELD_MAX_LEN      = 32;
-App.Settings.DAY_MAX_LEN        = 2;
-App.Settings.MONTH_MAX_LEN      = 2;
-App.Settings.WDAY_MAX_LEN       = 2;
-App.Settings.HOURS_MAX_LEN      = 2;
-App.Settings.MINUTE_MAX_LEN     = 2;
-App.Settings.USER_VISIBLE_NS    = 2;
-App.Settings.NS_MIN             = 2;
-App.Settings.NS_MAX             = 8;
-App.Settings.ajax_url           = 1;
-App.Settings.uri                = location.href.replace('index.html', '');
-App.Settings.popup_conf         = { 'centered' : true, 'bgcolor' : '#FF0000', 'lightboxSpeed' : 'fast', 'destroyOnClose': true };
+App.Settings.PSW_MIN_LEN            = 6;
+App.Settings.FIELD_MAX_LEN          = 32;
+App.Settings.DAY_MAX_LEN            = 2;
+App.Settings.MONTH_MAX_LEN          = 2;
+App.Settings.WDAY_MAX_LEN           = 2;
+App.Settings.HOURS_MAX_LEN          = 2;
+App.Settings.MINUTE_MAX_LEN         = 2;
+App.Settings.USER_VISIBLE_NS        = 2;
+App.Settings.USER_VISIBLE_WEB_TPL   = 2;
+App.Settings.NS_MIN                 = 2;
+App.Settings.NS_MAX                 = 8;
+App.Settings.ajax_url               = 1;
+App.Settings.uri                    = location.href.replace('index.html', '');
+App.Settings.popup_conf             = { 'centered' : true, 'bgcolor' : '#FF0000', 'lightboxSpeed' : 'fast', 'destroyOnClose': true };
+
+App.Settings.PASSWORD_IMMUTE        = '********';
 
-App.Settings.PASSWORD_IMMUTE    = '********';
+App.Settings.AJAX_SYNCRONOUS = ['MAIN.getInitial'];
 
 // Messages
 App.Messages.total_dns_records = {single: 'total record', plural: 'total records'};

+ 208 - 39
web/js/actions.js

@@ -1,22 +1,152 @@
+App.Actions.toggle_custom_select = function(evt)
+{
+    var elm = $(evt.target);
+    elm     = elm.hasClass('complex-select') ? elm : elm.parents('.complex-select');
+    var ref = elm.find('.complex-select-content');
+    $('.s-c-highlighted').removeClass('s-c-highlighted');
+    if (ref.hasClass('hidden')) {
+        ref.removeClass('hidden');
+        App.Tmp.focusedComplexSelect = elm;
+    }
+    else {
+        ref.addClass('hidden');
+    }
+}
+
+App.Actions.update_cs_value = function(evt)
+{
+    var elm = $(evt.target);
+    elm = elm.hasClass('cust-sel-option') ? elm : elm.parents('.cust-sel-option');
+
+    var val = elm.find('.c-s-value').val();fb.log(val);
+    elm.parents('.c-s-box').find('.c-s-title').text(val);
+    elm.parents('.c-s-box').find('.c-s-value-ref').val(val);
+    $('.complex-select-content').addClass('hidden');
+}
+
+App.Actions.do_change_password = function()
+{
+    
+    var params = {
+        email: $('#change-email').val(),
+        captcha: $('#captcha').val()
+    }
+    
+    App.Ajax.request('MAIN.requestPassword', params, function(reply){
+        $('#captcha-img').attr('src', App.Helpers.generateUrl('captcha.php?')+Math.floor(Math.random() * 9999));
+        $('#captcha').val('');
+        if (reply.result) {
+            $('#change-psw-error').html('');           
+            $('#change-psw-error').addClass('hidden');
+            $('#change-psw-success').html('Reset link was sent to email box provided by you.'
+            + ' You will need to provide <strong>"'+reply.data.key_code+'"</strong> code to for resetting the password. Please copy it.'); 
+            $('#change-psw-success').removeClass('hidden');
+            $('.form-row').remove();            
+        }
+        else {
+            $('#change-psw-error').html(reply.message);           
+            $('#change-psw-error').removeClass('hidden');
+        }
+    }); 
+}
+
+App.Actions.back_to_login = function()
+{    
+    $('body').addClass('page-auth');
+    var tpl = App.Templates.get('login', 'popup');
+    tpl.set(':LOGO_URL', App.Helpers.generateUrl('images/vesta-logo.png'));
+    tpl.set(':YEAR', new Date().getFullYear());
+    tpl.set(':EMAIL_REAL', App.Settings.VestaAbout.company_email);
+    tpl.set(':EMAIL', App.Settings.VestaAbout.company_name);
+    tpl.set(':VERSION', App.Settings.VestaAbout.version_name + ' ' + App.Settings.VestaAbout.version);
+    $('body').prepend(tpl.finalize());
+    $('#change-psw-block').remove();    
+    $('.remember-me').checkBox();
+}
+
+App.Actions.change_password = function(evt)
+{
+    evt.preventDefault();
+    
+    if ($('#change-psw-block').length > 0) {
+        return $('#change-psw-block').show();
+    }  
+    
+    var tpl = App.Templates.get('change_psw', 'popup');
+    tpl.set(':LOGO_URL', App.Helpers.generateUrl('images/vesta-logo.png'));
+    tpl.set(':YEAR', new Date().getFullYear());
+    tpl.set(':CAPTCHA_URL', App.Helpers.generateUrl('captcha.php?')+Math.floor(Math.random() * 9999));
+    tpl.set(':CAPTCHA_URL_2', App.Helpers.generateUrl('captcha.php'));  
+    tpl.set(':EMAIL_REAL', App.Settings.VestaAbout.company_email);
+    tpl.set(':EMAIL', App.Settings.VestaAbout.company_name);
+    tpl.set(':VERSION', App.Settings.VestaAbout.version_name + ' ' + App.Settings.VestaAbout.version);  
+    $('#auth-block').remove();
+    $('body').prepend(tpl.finalize()); 
+    $('#change-psw-error').html('');           
+    $('#change-psw-error').addClass('hidden');       
+}
+
+App.Actions.profile_exit = function(evt)
+{
+    evt.preventDefault();
+    App.Ajax.request('MAIN.logoff', {}, function(reply) {
+        location.href = '';
+    });
+}
+
+// show auth form
 App.Actions.authorize = function()
 {
-    if ($('#authorize-form').length > 0) {
+    $('#change-psw-block').remove();
+    if ($('#auth-block').length > 0) {
         return;
+    }    
+    $('#page').addClass('hidden');
+    $('body').addClass('page-auth');
+    var tpl = App.Templates.get('login', 'popup');
+    tpl.set(':LOGO_URL', App.Helpers.generateUrl('images/vesta-logo.png'));
+    tpl.set(':YEAR', new Date().getFullYear());
+    tpl.set(':EMAIL_REAL', App.Settings.VestaAbout.company_email);
+    tpl.set(':EMAIL', App.Settings.VestaAbout.company_name);
+    tpl.set(':VERSION', App.Settings.VestaAbout.version_name + ' ' + App.Settings.VestaAbout.version);
+    $('body').prepend(tpl.finalize());
+    $(document).ready(function(){
+        $('.remember-me').checkBox();
+    });
+}
+
+/**
+* Embeds new item form
+* if exits custom method (App.Pages[ENVIRONMENT_NAME].newForm)
+* custom method will be executes instead of default one
+*/
+App.Actions.new_entry = function() {
+    if ('undefined' != typeof App.Pages[App.Env.world].new_entry) {fb.log(1);
+        App.Pages[App.Env.world].new_entry();
+    } else {fb.log(2);
+        var form_id = App.Constants[App.Env.world + '_FORM_ID'];
+        $('#'+form_id).remove();
+        var build_method = App.Env.getWorldName() + '_form';
+        var tpl = App.HTML.Build[build_method]({}, form_id);
+        App.Ref.CONTENT.prepend(tpl);
+        App.Helpers.updateScreen();
     }
-    
-    App.View.popup('login');
 }
 
+// execute authorisation
 App.Actions.do_authorize = function()
 {
-    $('#authorize-error').text('');
-    App.Ajax.request('MAIN.signin', {'login':$('#authorize-login').val(), 'password':$('#authorize-login'.val())}, function(reply)
+    $('#auth-error').text('');
+    $('#auth-form-content').hide();
+    App.Ajax.request('MAIN.signin', {'login':$('#authorize-login').val(), 'password':$('#authorize-password').val()}, function(reply)
     {
-        if (reply.result) {
+        if (reply.result == true) {
             location.href = '';
         }
         else {
-            $('#authorize-error').text(reply.message);
+            $('#auth-error').text(reply.data.error_msg);
+            $('#auth-form-content').show();
+            $('#auth-error').removeClass('hidden');
         }
     });
 }
@@ -49,7 +179,20 @@ App.Actions.show_subform = function(evt)
 
 App.Actions.view_template_settings = function(evt) 
 {
-    alert('TODO');
+    var elm = $(evt.target);    
+    var ref = elm.hasClass('tpl-item') ? elm : elm.prev('.tpl-item');
+    var tpl_name = $(ref).val() || $(ref).text();    
+    fb.log(tpl_name);
+    App.Helpers.openInnerPopup(elm, App.Env.initialParams.WEB_DOMAIN.TPL[tpl_name].DESCR || tpl_name);
+}
+
+App.Actions.view_dns_template_settings = function(evt) 
+{
+    var elm = $(evt.target);    
+    var ref = elm.prev('.tpl-item');        
+    var tpl_name = $(ref).val() || $(ref).text();    
+    fb.log(tpl_name);
+    App.Helpers.openInnerPopup(elm, App.Env.initialParams.DNS.TPL[tpl_name].DESCR || tpl_name);
 }
 
 App.Actions.add_subrecord_dns = function(evt)
@@ -63,24 +206,6 @@ App.Actions.add_subrecord_dns = function(evt)
     }
 }
 
-/**
- * Embeds new item form
- * if exits custom method (App.Pages[ENVIRONMENT_NAME].newForm) 
- * custom method will be executes instead of default one
- */
-App.Actions.new_entry = function() {
-    if ('undefined' != typeof App.Pages[App.Env.world].new_entry) {
-        App.Pages[App.Env.world].new_entry();
-    } else {
-        var form_id = App.Constants[App.Env.world + '_FORM_ID'];
-        $('#'+form_id).remove();
-        var build_method = App.Env.getWorldName() + '_form';
-        var tpl = App.HTML.Build[build_method]({}, form_id);
-        App.Ref.CONTENT.prepend(tpl);
-        App.Helpers.updateScreen();
-    }
-}
-
 // do_action_save
 App.Actions.save_form = function(evt) {
     var elm = $(evt.target);
@@ -111,10 +236,13 @@ App.Actions.save_form = function(evt) {
 }
 
 // do_action_edit
-App.Actions.edit = function(evt) {
-    if ('undefined' != typeof App.Pages[App.Env.world].edit) {
+App.Actions.edit = function(evt) 
+{
+
+    if ('undefined' != typeof App.Pages[App.Env.world].edit) {        
         App.Pages[App.Env.world].edit(evt);
-    } else {
+    } 
+    else {
         var elm = $(evt.target);
         elm = elm.hasClass('row') ? elm : elm.parents('.row');
         
@@ -123,8 +251,8 @@ App.Actions.edit = function(evt) {
         var tpl = App.HTML.Build[build_method](options);
         elm.replaceWith(tpl);
         
-        App.Helpers.disbleNotEditable();
-        //App.Helpers.updateScreen();
+        App.Helpers.disableNotEditable();
+        App.Helpers.updateScreen();
     }
 }
 
@@ -157,9 +285,7 @@ App.Actions.suspend = function(evt)
     
     var options = row.find('.source').val();    
     App.Ajax.request(App.Env.world+'.suspend', {spell: options}, function(reply) {
-        if (reply.result) {
-            //var tpl = App.Templates.get('SUSPENDED_TPL_SUSPENDED', 'general');
-            //$(elm).replaceWith(tpl.finalize());
+        if (reply.result) {           
             App.Pages.prepareHTML();
             App.Helpers.updateScreen();
         }
@@ -181,9 +307,7 @@ App.Actions.unsuspend = function(evt)
     
     var options = row.find('.source').val();    
     App.Ajax.request(App.Env.world+'.unsuspend', {spell: options}, function(reply) {
-        if (reply.result) {
-            //var tpl = App.Templates.get('SUSPENDED_TPL_NOT_SUSPENDED', 'general');
-            //$(elm).replaceWith(tpl.finalize());
+        if (reply.result) {           
             App.Pages.prepareHTML();
             App.Helpers.updateScreen();
         }
@@ -322,7 +446,8 @@ App.Actions.add_form_ns = function(evt)
     var tpl = App.Templates.get('NS_INPUT', 'user');
     tpl.set(':NAME', '');
     tpl.set(':NS_LABEL', 'NS');
-    elm.before(tpl.finalize());
+    var ref = $(elm).hasClass('form-row') ? elm : $(elm).parents('.form-row');
+    $(ref).before(tpl.finalize());
     
     if ((total_nses + 1) == App.Settings.NS_MAX ) { // added last NS
         $('.additional-ns-add', form).addClass('hidden');
@@ -337,6 +462,10 @@ App.Actions.add_form_ns = function(evt)
 
 App.Actions.delete_ns = function(evt)
 {
+    var sure = confirm(App.i18n.getMessage('confirm'));
+    if (!sure) {
+        return;
+    }
     var elm = $(evt.target);
     
     form = elm.parents('.form:first');
@@ -370,7 +499,11 @@ App.Actions.view_template_info = function(evt)
     var options = ref.find('.source').val(); 
     App.Ajax.request('DNS.getTemplateInfo', {spell: options}, function(reply) {
         if (reply.result) {
-            App.Helpers.openInnerPopup(elm, reply.data);
+            var html = '';
+            $.each(reply.data, function(key) {
+                html += '<li><strong>'+key+':</strong> '+reply.data[key]+'</li>';
+            });
+            App.Helpers.openInnerPopup(elm, '<ul>'+html+'</ul>');
         }        
     });
 }
@@ -385,3 +518,39 @@ App.Actions.toggle_stats_block = function(evt)
         elm.parents('.stats-settings').find('.stats-block').addClass('hidden');
     }
 }
+
+App.Actions.exec_v_console = function(evt)
+{
+    evt.preventDefault();
+    App.Helpers.openInnerPopup(evt.target, 'This functionality will be available in next releases');
+}
+
+App.Actions.view_profile_settings = function(evt)
+{
+    evt.preventDefault();
+    App.Helpers.openInnerPopup(evt.target, 'This functionality will be available in next releases');
+}
+
+App.Actions.select_all = function(evt) 
+{
+    $('.row').addClass('checked-row')
+}
+
+App.Actions.deselect_all = function(evt) 
+{
+    $('.row').removeClass('checked-row')
+}
+
+App.Actions.delete_selected = function(evt)
+{
+    var selected = $('.checked-row');
+    if (selected.length == 0) {
+        return App.Helpers.alert('No entry selected. Please select at least one.');
+    }
+    var confirmed = confirm('You are about to delete ' + selected.length + ' entrie(s). Are you sure?');
+    if (!confirmed) {
+        return;
+    }
+    
+    
+}

+ 40 - 25
web/js/app.js

@@ -4,8 +4,6 @@ window.jsonParse=function(){var r="(?:-?\\b(?:0|[1-9][0-9]*)(?:\\.[0-9]+)?(?:[eE
 j){h=h.match(s);var e,c=h[0],l=false;if("{"===c)e={};else if("["===c)e=[];else{e=[];l=true}for(var b,d=[e],m=1-l,y=h.length;m<y;++m){c=h[m];var a;switch(c.charCodeAt(0)){default:a=d[0];a[b||a.length]=+c;b=void 0;break;case 34:c=c.substring(1,c.length-1);if(c.indexOf("\\")!==-1)c=c.replace(t,v);a=d[0];if(!b)if(a instanceof Array)b=a.length;else{b=c||w;break}a[b]=c;b=void 0;break;case 91:a=d[0];d.unshift(a[b||a.length]=[]);b=void 0;break;case 93:d.shift();break;case 102:a=d[0];a[b||a.length]=false;
 b=void 0;break;case 110:a=d[0];a[b||a.length]=null;b=void 0;break;case 116:a=d[0];a[b||a.length]=true;b=void 0;break;case 123:a=d[0];d.unshift(a[b||a.length]={});b=void 0;break;case 125:d.shift();break}}if(l){if(d.length!==1)throw new Error;e=e[0]}else if(d.length)throw new Error;if(j){var p=function(n,o){var f=n[o];if(f&&typeof f==="object"){var i=null;for(var g in f)if(x.call(f,g)&&f!==n){var q=p(f,g);if(q!==void 0)f[g]=q;else{i||(i=[]);i.push(g)}}if(i)for(g=i.length;--g>=0;)delete f[i[g]]}return j.call(n,
 o,f)};e=p({"":e},"")}return e}}();
-
-
 (function($){$.toJSON=function(o)
 {if(typeof(JSON)=='object'&&JSON.stringify)
 return JSON.stringify(o);var type=typeof(o);if(o===null)
@@ -85,11 +83,8 @@ var App = {
     Helpers: {},
     Filters: {},
     i18n: {},
-    HTML: {
-            Build: {}
-        },
-    View:{
-        
+    HTML: { Build: {}},
+    View:{        
         // pages related views
         Pages: {
             USER: {},
@@ -112,7 +107,7 @@ var App = {
         CRON: {}
     },
     Cache: {
-        clear: function(){} // stub method, will be used later
+        clear: function() {} // stub method, will be used later
     },
     Pages: {
         USER: {},
@@ -124,17 +119,15 @@ var App = {
         CRON: {}
     },
     Ref: {},
-    Tmp: {},
+    Tmp: { AJAX_SYNCRONOUS:{} },
     Thread: {
-        run: function(delay, ref)
-        {
-            setTimeout(function()
-            {
+        run: function(delay, ref) {
+            setTimeout(function() {
                 ref();
             }, delay*10);
         }
     },
-    Settings: {},
+    Settings: { VestaAbout: { version: '2-1', version_name: 'OGRE', company_email: 'support@vestacp.com', company_name: 'VestaCP' } },
     Templates: {
         Templator: null,
         Tpl: {},
@@ -147,7 +140,7 @@ var App = {
 // Internals
 Array.prototype.set = function(key, value)
 {
-    var index = this[0][key];
+    var index      = this[0][key];
     this[1][index] = value;
 }
 Array.prototype.get = function(key){
@@ -173,8 +166,29 @@ String.prototype.wrapperize = function(key, ns)
     return tpl.finalize();
 }
 
+String.prototype.trim = function()
+{
+    var str = this;
+    str = str.replace(/^\s+/, '');
+    for (var i = str.length - 1; i >= 0; i--) {
+        if (/\S/.test(str.charAt(i))) {
+            str = str.substring(0, i + 1);
+            break;
+        }
+    }
+    return str;
+}
+
 App.Ajax.request = function(jedi_method, data, callback)
 {   
+    if ($.inArray(jedi_method, App.Settings.AJAX_SYNCRONOUS) != -1) {
+        if (App.Tmp.AJAX_SYNCRONOUS[jedi_method] == true) {
+            return false;
+        }
+        else {
+            App.Tmp.AJAX_SYNCRONOUS[jedi_method] = true;
+        }
+    }
     App.Helpers.beforeAjax(jedi_method);
     $.ajax({
         url: App.Helpers.getBackendUrl(),
@@ -184,22 +198,23 @@ App.Ajax.request = function(jedi_method, data, callback)
         dataType: "text",
         async: true,
         success: function(reply)
-        {                     
+        {         
+            if ($.inArray(jedi_method, App.Settings.AJAX_SYNCRONOUS) != -1) {                
+                App.Tmp.AJAX_SYNCRONOUS[jedi_method] = false;
+            }            
             reply = reply.replace(/\\'/gi, '');
-            reply = reply.replace(/\'/gi, '');
+            reply = reply.replace(/\'/gi,  '');
             
             reply = jsonParse(reply);
-            
+
             if (reply.result == 'NOT_AUTHORISED') {
                 $('#content').html('<center><h1 style="font-size: 18px;color:red;">Not Authorized</h1></center>');
                 App.Helpers.afterAjax();
-                return App.Actions.authorize();                
+                return App.Actions.authorize();
             }
             
-            //timer.start();        
             callback && callback(reply);
             App.Helpers.afterAjax();
-            //timer.stop(jedi_method);            
         },
         error: function() 
         {
@@ -218,16 +233,16 @@ timer.start = function()
     timer.start_time = new Date();
 }
 
-timer.stop = function( msg )
+timer.stop = function(msg)
 {
     timer.stop_time = new Date();
-    timer.print( msg );
+    timer.print(msg);
 }
 
-timer.print = function( msg )
+timer.print = function(msg)
 {
     var passed = timer.stop_time - timer.start_time;
-    fb.info( (msg || '') + ': ' + passed / 1000 );
+    fb.info((msg || '') + ': ' + passed / 1000);
 }
 
 

+ 35 - 43
web/js/core.js

@@ -1,51 +1,40 @@
-/*App.Core.action_reflector = {
-    'new_entry': App.Actions.newForm,
-    'cancel_form': App.Actions.cancelForm,
-    'save_form': App.Actions.saveForm,//App.Pages.IP.saveIpForm,
-    'remove': App.Actions.remove,//App.Pages.IP.deleteIp,
-           
-    'cancel_dns_form': App.Pages.DNS.closeForm,
-    'save_dns_form': App.Pages.DNS.saveForm,
-    
-    'edit': App.Actions.edit,
-    'embed_subform': App.Actions.embedSubform,
-    
-    'form_help': App.Actions.showFormHelp,
-    'entry_help': App.Actions.showEntryHelp,
-    
-    'close_popup': App.View.closePopup
-};*/
 //
 //  CORE
 //
-App.Core.listen = function(){
+App.Core.listen = function() 
+{    
     fb.log('start listening');
-    $(document).bind('click', function(evt){
-        //App.Pages.IP.customListen && App.Pages.IP.customListen(evt);
-        var elm = $(evt.target);        
+    $(document).bind('click', function(evt) { 
+        App.Helpers.handleItemsRegisteredInBackground(evt);  
+        var elm    = $(evt.target);        
         var action = $(elm).attr('class');
         if (!action) {
-            return fb.log(':)');
+            return fb.log('No action passed');
         } 
         action = action.split('do_action_');
-        if(action.length < 2){
+        if (action.length < 2) {
             if (elm.hasClass('check-this')) {
                 var ref = $(elm).parents('.row');
                 ref.hasClass('checked-row') ? ref.removeClass('checked-row') : ref.addClass('checked-row');
             }    
             return; // no action found attached to the dom object
         }
-        try{
-            // retrieve the action itself
-            action_with_params = action[1].split(' ');
-            action = action_with_params[0];
-            params = elm.find('.prm-'+action).value || null;        
-            // TODO: filter params here
-            // Call the action
-            App.Core.__CALL__(evt, action, params);
-        }catch(e){
-            fb.error(e)
-        }  
+        try {            
+            action_with_params = action[1].split(' ');// retrieve the action itself
+            action = action_with_params[0];            
+            App.Core.__CALL__(evt, action);// Call the action
+        }
+        catch(e) {
+            fb.error(e);
+        }
+    });
+    
+    $(document).bind('keyup', function(evt) {
+        fb.log(evt.keyCode);
+        if ('undefined' != typeof App.Constants.KEY.CODED_NAME[evt.keyCode]) {
+            var method_name = 'keyboard_' + App.Constants.KEY.CODED_NAME[evt.keyCode];
+            App.Helpers[method_name] && App.Helpers[method_name](evt);
+        }
     });
 }
 
@@ -53,22 +42,25 @@ App.Core.listen = function(){
  * Action caller
  * if no action registered, execution will stop
  */
-App.Core.__CALL__ = function(evt, action, params){
-    if('undefined' == typeof App.Actions[action]){
-        return fb.warn('No action registered for: "'+action+'". Stop propagation');
-    }else{
-        return App.Actions[action](evt, params);
+App.Core.__CALL__ = function(evt, action)
+{
+    if ('undefined' == typeof App.Actions[action]) {
+        return alert('No action registered for: "'+action+'". Stop propagation');
+    }
+    else{
+        return App.Actions[action](evt);
     }
 
     
 }
 
-App.Core.initMenu = function(){
-    $('.section').bind('click', function(evt){
+App.Core.initMenu = function()
+{
+    $('.section').bind('click', function(evt) {
         var elm = $(evt.target);
         !elm.hasClass('section') ? elm = elm.parents('.section') : -1;
-        if(App.Env.world != elm.attr('id')){
-            App.Env.world = elm.attr('id');            
+        if (App.Env.world != elm.attr('id')) {
+            App.Env.world  = elm.attr('id');            
             App.Pages.init();            
             fb.warn('Switch page to: ' + App.Env.world);
         }

+ 155 - 75
web/js/helpers.js

@@ -1,6 +1,48 @@
-App.Helpers.scrollTo = function(elm)
+App.Helpers.formatNumber = function(number, no_commas){
+    no_commas = no_commas || false;
+    number = number.toString().replace(/,/g, '');
+       
+    var nStr = parseFloat(number).toFixed(2);
+    fb.info(nStr);
+    nStr = nStr.toString();
+    nStr += '';
+    x = nStr.split('.');
+    x1 = x[0];
+    x2 = x.length > 1 ? '.' + x[1] : '';
+    if(!no_commas){
+        var rgx = /(\d+)(\d{3})/;
+        while (rgx.test(x1)) {
+            x1 = x1.replace(rgx, '$1' + ',' + '$2');
+        }
+    }
+    return x1 + x2;
+}
+
+App.Helpers.getHumanTabName = function()
 {
-    fb.log(elm);
+    if (App.Env.world == 'WEB_DOMAIN') {
+        return 'WEB DOMAIN';
+    }
+    if (App.Env.world == 'MAIL') {
+        return 'MAIL DOMAIN';
+    }
+    if (App.Env.world == 'DNS') {
+        return 'DNS DOMAIN';
+    }
+    if (App.Env.world == 'IP') {
+        return 'IP ADDRESS';
+    }
+    if (App.Env.world == 'CRON') {
+        return 'CRON JOB';
+    }
+    if (App.Env.world == 'DB') {
+        return 'DATABASE';
+    }
+    return App.Env.world;
+}
+
+App.Helpers.scrollTo = function(elm)
+{    
     var scroll_to = $(elm).offset().top;
     if (scroll_to > 1000) {
         var scroll_time = 300;
@@ -8,9 +50,7 @@ App.Helpers.scrollTo = function(elm)
     else {
         var scroll_time = 550;
     }
-    $('html, body').animate({
-        'scrollTop': scroll_to
-    }, scroll_time);
+    $('html, body').animate({ 'scrollTop': scroll_to }, scroll_time);
 }
 
 App.Helpers.getMbHumanMeasure = function(val)
@@ -31,6 +71,8 @@ App.Helpers.getMbHuman = function(val, only_measure)
     var terabyte  = gigabyte * 1024;
     var precision = 0;
    
+   
+    return only_measure ? 'MB' : (bytes / megabyte).toFixed(precision);
     /*if ((bytes >= 0) && (bytes < kilobyte)) {
         return bytes + ' B';
  
@@ -53,36 +95,21 @@ App.Helpers.getMbHuman = function(val, only_measure)
 }
 
 App.Helpers.getFirst = function(obj)
-{
-    try{ // TODO: remove try / catch
-        var first = {};
-        var key = App.Helpers.getFirstKey(obj);
-        first[key] = obj[key];
-        return first;
-    }
-    catch(e){
-        fb.error(e);
-    }
-    
-    return false;
+{    
+    var first = {};
+    var key = App.Helpers.getFirstKey(obj);
+    first[key] = obj[key];
+    return first;
 }
 
 App.Helpers.getFirstKey = function(obj)
-{
-    try{ // TODO: remove try / catch
-        for (key in obj) break;
-        return key;       
-    }
-    catch(e){
-        fb.error(e);
-    }
-    
-    return false;
+{ 
+    for (key in obj) break;
+    return key;       
 }
 
 App.Helpers.updateInitial = function()
-{
-    // TODO: need api method
+{    
     $.each(App.Env.initialParams.totals, function(key) {
         var item = App.Env.initialParams.totals[key];
         var expr_id = '#'+key;
@@ -99,6 +126,8 @@ App.Helpers.updateInitial = function()
             }
         }        
     });
+    $('#user-name').html(App.Env.initialParams.PROFILE.uid);
+    $('#page').removeClass('hidden');
 }
 
 App.Helpers.beforeAjax = function(jedi_method) 
@@ -137,7 +166,7 @@ App.Helpers.showLoading = function()
 App.Helpers.getFirstValue = function(obj)
 {
     var first = '';
-    $.each(obj, function(key, i){
+    $.each(obj, function(key, i) {
         return first = obj[key];
     });
     
@@ -145,15 +174,12 @@ App.Helpers.getFirstValue = function(obj)
 }
 
 App.Helpers.evalJSON = function(str) 
-{
-    /*str = str.replace(/\\'/gi, '');
-    str = str.replace(/\'/gi, '');
-    fb.warn(str);*/
+{       
     return $.parseJSON(str);
 }
 
 App.Helpers.toJSON = function(object) 
-{    
+{        
     return ($.toJSON(object).replace(/\\'/gi, ''));
 }
 
@@ -170,10 +196,10 @@ App.Helpers.markBrowserDetails = function()
 {
     var b = App.Env.BROWSER;
     var classes = [
-    b.type.toLowerCase(),
-    b.type.toLowerCase() + b.version,
-    b.os.toLowerCase()
-    ];
+            b.type.toLowerCase(),
+            b.type.toLowerCase() + b.version,
+            b.os.toLowerCase()
+        ];
     $(document.body).addClass(classes.join(' '));
 }
 
@@ -214,14 +240,13 @@ App.Helpers.getFormValuesFromElement = function(ref)
 
 App.Helpers.updateScreen = function()
 {
-    //Custom.init();
+    
     App.Ajax.request('MAIN.getInitial', {}, function(reply){
         App.Env.initialParams = reply.data;
         App.Helpers.updateInitial();
     });
-    //$(document.body).find('select').each(function(i, o){
-    //   $(o).selectbox(); 
-    //});
+    $('.row:first').addClass('first-row');    
+    Custom.init();
 }
 
 App.Helpers.alert = function(msg) 
@@ -231,18 +256,12 @@ App.Helpers.alert = function(msg)
 
 App.Helpers.isEmpty = function(o) 
 {
-    return '({})' == o.toSource() || '[]' == o.toSource();
+    return jQuery.isEmptyObject(o);
 }
 
 App.Helpers.liveValidate = function()
-{
-    //return;
-    $('input').live('blur', function(evt)
-    {
-        fb.log('BLUR');
-        var elm = $(evt.target);
-        fb.log(elm.attr('TAGNAME'));
-    });
+{    
+    
 }
 
 App.Helpers.generatePassword = function()
@@ -284,28 +303,15 @@ App.Helpers.closeInnerPopup = function(evt)
 
 App.Helpers.getUploadUrl = function()
 {
-    var url_parts = location.href.split('#');
-    if (url_parts.length > 1) {
-        var tab = url_parts[url_parts.length - 1];
-        if ($.inArray(tab, App.Constants.TABS) != -1) {
-            App.Tmp.loadTAB = tab;
-        }
-    }
-
-    var url_parts = location.href.split('?', 1);
-    var url = url_parts[0];
-    url_parts = url.split('/');
-    if (url_parts[url_parts.length -1] == 'index.html') {
-        url_parts[url_parts.length -1] = 'vesta/upload.php';
-    }
-    else {
-        url_parts.push('vesta/upload.php');
-    }
-
-    return url_parts.join('/');
+    return App.Helpers.generateUrl('vesta/upload.php');
 }
 
 App.Helpers.getBackendUrl = function()
+{
+    return App.Helpers.generateUrl('dispatch.php');
+}
+
+App.Helpers.generateUrl = function(to_file)
 {
     var url_parts = location.href.split('#');
     if (url_parts.length > 1) {
@@ -319,16 +325,16 @@ App.Helpers.getBackendUrl = function()
     var url = url_parts[0];
     url_parts = url.split('/');
     if (url_parts[url_parts.length -1] == 'index.html') {
-        url_parts[url_parts.length -1] = 'dispatch.php';
+        url_parts[url_parts.length -1] = to_file;
     }
     else {
-        url_parts.push('dispatch.php');
+        url_parts.push(to_file);
     }
 
-    return url_parts.join('/');
+    return url_parts.join('/').replace('#', '');
 }
 
-App.Helpers.disbleNotEditable = function()
+App.Helpers.disableNotEditable = function()
 {
     if ('undefined' == typeof App.Settings.Imutable[App.Env.world]) {
         return false;
@@ -345,3 +351,77 @@ App.Helpers.disbleNotEditable = function()
         }
     });
 }
+
+App.Helpers.handleItemsRegisteredInBackground = function(evt)
+{
+    // complex selects
+    if (!$(evt.target).hasClass('c-s-opt')) { // complex select option
+        $('.complex-select-content').addClass('hidden');
+    }
+}
+
+//
+//      HELPERS
+//
+App.Helpers.keyboard_ESC = function()
+{
+    $('.complex-select-content').addClass('hidden');
+    App.Tmp.focusedComplexSelect = null;
+}
+
+App.Helpers.keyboard_ENTER = function()
+{
+    if (null != App.Tmp.focusedComplexSelectInput) {
+        var val = App.Tmp.focusedComplexSelectInput.find('.c-s-value').val();
+        App.Tmp.focusedComplexSelect.find('.c-s-title').text(val);
+        App.Tmp.focusedComplexSelect.find('.c-s-value-ref').val(val);
+        $('.complex-select-content').addClass('hidden');
+    }
+}
+
+App.Helpers.keyboard_DOWN = function(evt)
+{
+    if (null != App.Tmp.focusedComplexSelect) {
+        App.Tmp.focusedComplexSelect.find('.complex-select-content').removeClass('hidden');
+        $('.s-c-highlighted').removeClass('s-c-highlighted');
+        if (null == App.Tmp.focusedComplexSelectInput) {
+            App.Tmp.focusedComplexSelectInput = App.Tmp.focusedComplexSelect.find('.cust-sel-option:first');
+            App.Tmp.focusedComplexSelectInput.addClass('s-c-highlighted');
+        }
+        else {
+            var ref = App.Tmp.focusedComplexSelectInput.next();
+            App.Tmp.focusedComplexSelectInput = ref;
+            if (ref.length == 1) {
+                ref.addClass('s-c-highlighted');
+            }
+            else {
+                App.Tmp.focusedComplexSelectInput = App.Tmp.focusedComplexSelect.find('.cust-sel-option:first');
+                App.Tmp.focusedComplexSelectInput.addClass('s-c-highlighted');
+            }
+        }
+    }
+}
+
+App.Helpers.keyboard_UP = function(evt)
+{
+    if (null != App.Tmp.focusedComplexSelect) {
+        App.Tmp.focusedComplexSelect.find('.complex-select-content').removeClass('hidden');
+        $('.s-c-highlighted').removeClass('s-c-highlighted');
+        if (null == App.Tmp.focusedComplexSelectInput) {
+            App.Tmp.focusedComplexSelectInput = App.Tmp.focusedComplexSelect.find('.cust-sel-option:last');
+            App.Tmp.focusedComplexSelectInput.addClass('s-c-highlighted');
+        }
+        else {
+            var ref = App.Tmp.focusedComplexSelectInput.prev();
+            App.Tmp.focusedComplexSelectInput = ref;
+            if (ref.length == 1) {
+                ref.addClass('s-c-highlighted');
+            }
+            else {
+                App.Tmp.focusedComplexSelectInput = App.Tmp.focusedComplexSelect.find('.cust-sel-option:last');
+                App.Tmp.focusedComplexSelectInput.addClass('s-c-highlighted');
+            }
+        }
+    }
+}
+

+ 129 - 49
web/js/html.js

@@ -95,7 +95,7 @@ App.HTML.Build.dns_form = function(options, id)
 }
 
 App.HTML.Build.ip_form = function(options, id) 
-{try{
+{
     if('undefined' == typeof App.Env.initialParams) {
         return alert('PLease wait a bit. Some background processes are not yet executed. Thank you for patience.');
     }
@@ -118,7 +118,7 @@ App.HTML.Build.ip_form = function(options, id)
     tpl.set(':NAME', options.NAME || '');
     
     tpl = App.HTML.Build.ip_selects(tpl, options);
-}catch(e){fb.error(e);}
+
     return tpl.finalize();
 }
 
@@ -162,31 +162,39 @@ App.HTML.Build.dns_entry = function(o, is_new)
         var now = new Date();
         tpl.set(':DATE', now.format("d.mm.yyyy"));
     }
-
+    tpl.set(':TPL_VAL', o.TPL);
     /*if (App.Constants.SUSPENDED_YES == o.SUSPEND) {
         var sub_tpl = App.Templates.get('SUSPENDED_TPL_NOT_SUSPENDED', 'general');
     }
     else {
         var sub_tpl = App.Templates.get('SUSPENDED_TPL_SUSPENDED', 'general');
     }*/
-
+    
     tpl.set(':SUSPENDED_TPL', '');
 
     return tpl.finalize();
 }
 
 App.HTML.Build.user_entry = function(o, key)
-{
+{   
     var processed_data = {
         'NICKNAME'              : key, 
-        'U_DISK_PERCENTAGE'     : o.U_DISK > 0 ? o.U_DISK / o.DISK_QUOTA * 100 : 0.01,
-        'U_BANDWIDTH_PERCENTAGE': o.U_BANDWIDTH > 0 ? o.U_BANDWIDTH / o.BANDWIDTH * 100 : 0.01,
+        'U_DISK_PERCENTAGE'     : o.U_DISK > 0 ? o.U_DISK / o.DISK_QUOTA * 100 : 1,
+        'U_BANDWIDTH_PERCENTAGE': o.U_BANDWIDTH > 0 ? o.U_BANDWIDTH / o.BANDWIDTH * 100 : 1,
+        'U_DISK'                : o.U_DISK == 0 ? 1 : App.Helpers.formatNumber(o.U_DISK),
+        'U_BANDWIDTH'           : o.U_BANDWIDTH == 0 ? 1 : App.Helpers.formatNumber(o.U_BANDWIDTH),
         'DISK_QUOTA_MEASURE'    : App.Helpers.getMbHumanMeasure(o.DISK_QUOTA),
         'BANDWIDTH_MEASURE'     : App.Helpers.getMbHumanMeasure(o.BANDWIDTH),
         'BANDWIDTH'             : App.Helpers.getMbHuman(o.BANDWIDTH),
         'DISK_QUOTA'            : App.Helpers.getMbHuman(o.DISK_QUOTA)
     };
     var o = $.extend(o, processed_data);
+    o.U_DISK_PERCENTAGE_2 = o.U_DISK_PERCENTAGE;
+    o.U_DISK_PERCENTAGE_3 = o.U_DISK_PERCENTAGE;
+    o.BANDWIDTH_MEASURE_2 = o.BANDWIDTH_MEASURE;
+    o.DISK_QUOTA_MEASURE_2 = o.DISK_QUOTA_MEASURE;
+    o.U_BANDWIDTH_PERCENTAGE_2 = o.U_BANDWIDTH_PERCENTAGE;
+    o.U_BANDWIDTH_PERCENTAGE_3 = o.U_BANDWIDTH_PERCENTAGE;
     var tpl = App.Templates.get('ENTRY', 'user');  
     tpl = App.HTML.setTplKeys(tpl, o);
        
@@ -197,15 +205,18 @@ App.HTML.Build.user_entry = function(o, key)
     
     $([1,2,3,4,5,6,7,8]).each(function(i, index)
     {
-        if (o['NS'+index].trim() != '') {
-            var tpl_ns = App.Templates.get('NS_RECORD', 'user');
-            tpl_ns.set(':NAME', o['NS'+index]);
-            var tpl_finalized = tpl_ns.finalize();
-            ns_full[ns_full.length++] = tpl_finalized;
-            if (i < App.Settings.USER_VISIBLE_NS) {
-                ns[ns.length++] = tpl_finalized;
+        var key = 'NS'+index;
+        if ('undefined' != typeof o[key]) {
+            if (o[key].trim() != '') {
+                var tpl_ns = App.Templates.get('NS_RECORD', 'user');
+                tpl_ns.set(':NAME', o[key]);
+                var tpl_finalized = tpl_ns.finalize();
+                ns_full[ns_full.length++] = tpl_finalized;
+                if (i < App.Settings.USER_VISIBLE_NS) {
+                    ns[ns.length++] = tpl_finalized;
+                }
             }
-        }                      
+        }        
     });
         
     if (ns_full.length <= App.Settings.USER_VISIBLE_NS) {
@@ -219,7 +230,36 @@ App.HTML.Build.user_entry = function(o, key)
         tpl.set(':NS', ns_custom.finalize());
     }
     
+    tpl = App.HTML.Build.user_web_tpl(tpl, o);
     tpl.set(':REPORTS_ENABLED', o.REPORTS_ENABLED == 'yes' ? 'enabled' : 'DISABLED');    
+    if (o.U_DISK_PERCENTAGE > 100) {
+        var tpl_over = App.Templates.get('over_bar', 'general');
+        var difference = parseInt(o.U_DISK_PERCENTAGE, 10) - 100;             
+        tpl_over.set(':OVER_PERCENTS', difference);
+        tpl_over.set(':OVER_PERCENTS_2', difference);
+        tpl.set(':OVER_BAR', tpl_over.finalize());
+        tpl.set(':U_DISK_PERCENTAGE_3', 100);
+        tpl.set(':OVER_DRAFT_VALUE', 'overdraft');
+    }
+    else {
+        tpl.set(':OVER_BAR', '');
+        tpl.set(':OVER_DRAFT_VALUE', '');
+    }
+    // OVER BANDWIDTH
+    if (o.U_BANDWIDTH_PERCENTAGE > 100) {
+        var tpl_over = App.Templates.get('over_bar', 'general');
+        var difference = parseInt(o.U_BANDWIDTH_PERCENTAGE, 10) - 100;       
+        tpl_over.set(':OVER_PERCENTS', difference);
+        tpl_over.set(':OVER_PERCENTS_2', difference);
+        tpl.set(':OVER_BAR_2', tpl_over.finalize());
+        tpl.set(':U_BANDWIDTH_PERCENTAGE_3', 100);
+        tpl.set(':OVER_DRAFT_VALUE_2', 'overdraft');
+    }
+    else {
+        tpl.set(':OVER_BAR_2', '');
+        tpl.set(':OVER_DRAFT_VALUE_2', '');
+    }
+    
         
     return tpl.finalize();
 }
@@ -249,23 +289,28 @@ App.HTML.Build.user_form = function(options, id)
     
     options = !App.Helpers.isEmpty(options) ? options : App.Empty.USER;
     
-    // NS
-    var ns = [];
-    $([3,4,5,6,7,8]).each(function(i, index)
-    {
-        if (options['NS'+index].trim() != '') {
-            var tpl_ns = App.Templates.get('NS_INPUT', 'user');
-            tpl_ns.set(':NS_LABEL', 'NS #' + (index));
-            tpl_ns.set(':NAME', options['NS'+index]);
-            ns[ns.length++] = tpl_ns.finalize();
-        }
-    });
-    ns[ns.length++] = App.Templates.get('PLUS_ONE_NS', 'user').finalize();
     
-    tpl.set(':NS', ns.done());
+    
     if (in_edit == true) {
         options.PASSWORD = App.Settings.PASSWORD_IMMUTE;
-    }  
+        // NS
+        var ns = [];
+        $([3,4,5,6,7,8]).each(function(i, index)
+        {
+            if (options['NS'+index].trim() != '') {
+                var tpl_ns = App.Templates.get('NS_INPUT', 'user');
+                tpl_ns.set(':NS_LABEL', 'NS #' + (index));
+                tpl_ns.set(':NAME', options['NS'+index]);
+                ns[ns.length++] = tpl_ns.finalize();
+            }
+        });
+        ns[ns.length++] = App.Templates.get('PLUS_ONE_NS', 'user').finalize();
+        
+        tpl.set(':NS', ns.done());
+    }
+    else {
+        tpl.set(':NS', '');
+    }
     tpl = App.HTML.setTplKeys(tpl, options, true);        
     tpl = App.HTML.Build.user_selects(tpl, options);
     
@@ -276,6 +321,10 @@ App.HTML.Build.user_form = function(options, id)
         tpl.set(':CHECKED', '');
     }
     
+    if (!in_edit) {
+        tpl.set(':REPORTS_ENABLED_EDITABLE', 'hidden');
+    }
+    
     return tpl.finalize();
 }
 
@@ -303,6 +352,9 @@ App.HTML.Build.web_domain_entry = function(o, key)
         tpl.set(':STATS_AUTH', '');
     }
     
+    tpl.set(':DISK',      App.Env.initialParams.PROFILE.BANDWIDTH);
+    tpl.set(':BANDWIDTH', App.Env.initialParams.PROFILE.DISK);
+    
     return tpl.finalize();
 }
 
@@ -452,7 +504,7 @@ App.HTML.Build.cron_entry = function(o, key)
      
 
 App.HTML.Build.cron_form = function(options, id) 
-{try{
+{
     if('undefined' == typeof App.Env.initialParams) {
         return alert('PLease wait a bit. Some background processes are not yet executed. Thank you for patience.');
     }
@@ -470,15 +522,8 @@ App.HTML.Build.cron_form = function(options, id)
     }
     
     options = !App.Helpers.isEmpty(options) ? options : {DAY:'', MONTH: '', WDAY:'',HOUR:'',CMD:'',MIN:''};    
-    tpl = App.HTML.setTplKeys(tpl, options);  
+    tpl = App.HTML.setTplKeys(tpl, options);     
 
-    /*tpl.set(':id', id || ''); 
-    tpl.set(':IP_ADDRESS', options.IP_ADDRESS || '');
-    tpl.set(':NETMASK', options.NETMASK || '');
-    tpl.set(':NAME', options.NAME || '');*/
-    
-    //tpl = App.HTML.Build.ip_selects(tpl, options);
-}catch(e){fb.error(e);}
     return tpl.finalize();
 }
     
@@ -502,7 +547,6 @@ App.HTML.Build.dns_subrecord = function(record)
     tpl.set(':RECORD', record.RECORD || '');
     tpl.set(':RECORD_VALUE', record.RECORD_VALUE || '');
     tpl.set(':RECORD_ID', record.RECORD_ID || '');
-    //tpl.set(':RECORD_TYPE_VALUE', '');
     tpl.set(':RECORD_TYPE', App.HTML.Build.options(App.Env.initialParams.DNS.record.RECORD_TYPE, (record.RECORD_TYPE || -1)));
     
     return tpl;
@@ -612,8 +656,11 @@ App.HTML.Build.dns_selects = function(tpl, options)
 {    
     try {
         // TPL
-        var obj = App.Env.initialParams.DNS.TPL;
-        var opts = App.HTML.Build.options(obj, options.TPL);
+        var obj = {};
+        $.each(App.Env.initialParams.DNS.TPL, function(key) {
+            obj[key] = key;
+        });        
+        var opts = App.HTML.Build.options(obj, options.PACKAGE);
         tpl.set(':TPL', opts);
         tpl.set(':TPL_DEFAULT_VALUE', options.TPL || App.Helpers.getFirstKey(obj));
     }
@@ -632,18 +679,19 @@ App.HTML.Build.web_domain_selects = function(tpl, options)
         var opts = App.HTML.Build.options(obj, options.IP);
         tpl.set(':IP_OPTIONS', opts);        
         
-        // TPL
-        var obj = App.Env.initialParams.WEB_DOMAIN.TPL;
+        // TPL        
+        var obj = {};
+        $.each(App.Env.initialParams.WEB_DOMAIN.TPL, function(key) {
+            obj[key] = key;
+        });   
+        //var obj = App.Env.initialParams.WEB_DOMAIN.TPL;
         var opts = App.HTML.Build.options(obj, options.TPL);
         tpl.set(':TPL_OPTIONS', opts);        
         
-        // TPL
+        // STAT
         var obj = App.Env.initialParams.WEB_DOMAIN.STAT;
         var opts = App.HTML.Build.options(obj, options.STAT);
-        tpl.set(':STAT_OPTIONS', opts);        
-        
-        
-        //<input type="checkbox" name="STATS" ~!:stats_checked~!="" value="~!:STATS~!" class="not-styled">\
+        tpl.set(':STAT_OPTIONS', opts);                
     }
     catch (e) {        
         return tpl;
@@ -652,6 +700,38 @@ App.HTML.Build.web_domain_selects = function(tpl, options)
     return tpl;
 }
 
-
+App.HTML.Build.user_web_tpl = function(tpl, o)
+{
+    var wt = [];
+    var wt_full = [];
+    var templates = o.WEB_TPL;
+    templates = templates.split(',');
+    if (templates.length == 0) {
+        templates = templates.split(' ');
+    }
+    
+    $(templates).each(function(i, web_tpl) {
+        var tpl_wt = App.Templates.get('WEB_TPL', 'user');
+        tpl_wt.set(':NAME', web_tpl);
+        var tpl_finalized = tpl_wt.finalize();
+        wt_full[wt_full.length++] = tpl_finalized;
+        if (i < App.Settings.USER_VISIBLE_WEB_TPL) {
+            wt[wt.length++] = tpl_finalized;
+        }
+    });
+    
+    if (templates.length <= App.Settings.USER_VISIBLE_NS) {
+        tpl.set(':WEB_TPL', wt.done());
+    }
+    else {
+        var wt_custom = App.Templates.get('WEB_TPL_MINIMIZED', 'user');
+        wt_custom.set(':WEB_TPL_MINI', wt.done());
+        wt_custom.set(':WEB_TPL_FULL', wt_full.done());
+        wt_custom.set(':MORE_NUMBER', Math.abs(App.Settings.USER_VISIBLE_NS - wt_full.length));
+        tpl.set(':WEB_TPL', wt_custom.finalize());
+    }
+    
+    return tpl;
+}
 
 

+ 0 - 132
web/js/lib/.svn/entries

@@ -1,132 +0,0 @@
-10
-
-dir
-86
-svn://svn.vestacp.com/vesta/trunk/web/js/lib
-svn://svn.vestacp.com/vesta
-
-
-
-2011-05-21T18:39:29.042444Z
-76
-twi
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-32c52990-e6da-4f1f-8224-85171b9c7084
-
-custom-form-elements.js
-file
-
-
-
-
-2011-05-21T16:20:27.000000Z
-c32b7ce65d7f5916a3a7ad767bbeeac8
-2011-05-21T17:53:21.905711Z
-75
-twi
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-5866
-
-jquery-ui-1.8.13.custom.min.js
-file
-
-
-
-
-2011-05-21T17:06:36.000000Z
-305afec5286e0380016fda3c0afa88f3
-2011-05-21T18:39:29.042444Z
-76
-twi
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-41841
-
-jquery-1.4.4.min.js
-file
-
-
-
-
-2011-01-12T10:13:30.000000Z
-73a9c334c5ca71d70d092b42064f6476
-2011-01-12T11:14:22.700688Z
-11
-twi
-
-popup.js
-file
-
-
-
-
-2011-01-12T10:13:30.000000Z
-03b53e40755b05328a0c2cfe7174c0e0
-2011-01-12T11:14:22.700688Z
-11
-twi
-
-browser.js
-file
-
-
-
-
-2011-01-12T11:32:02.000000Z
-99d606a8337f5ba58bcee7729fa08676
-2011-01-12T12:31:57.745881Z
-21
-twi
-

+ 0 - 396
web/js/lib/.svn/text-base/browser.js.svn-base

@@ -1,396 +0,0 @@
-/**
- * jQBrowser v0.2 - Extend jQuery's browser detection capabilities
- *   * http://davecardwell.co.uk/javascript/jquery/plugins/jquery-browserdetect/0.2/
- *
- * Dave Cardwell <http://davecardwell.co.uk/>
- *
- * Built on the shoulders of giants:
- *   * John Resig <http://jquery.com/>
- *   * Peter-Paul Koch <http://www.quirksmode.org/?/js/detect.html>
- *
- *
- * Copyright (c) 2006 Dave Cardwell, dual licensed under the MIT and GPL
- * licenses:
- *   * http://www.opensource.org/licenses/mit-license.php
- *   * http://www.gnu.org/licenses/gpl.txt
- */
-
-
-/**
- * For the latest version of this plugin, and a discussion of its usage and
- * implementation, visit:
- *   * http://davecardwell.co.uk/javascript/jquery/plugins/jquery-browserdetect/
- */
-
-new function() {
-    /**
-     * The following functions and attributes form the Public interface of the
-     * jQBrowser plugin, accessed externally through the $.browser object.
-     * See the relevant function definition later in the source for further
-     * information.
-     *
-     * $.browser.browser()
-     * $.browser.version.number()
-     * $.browser.version.string()
-     * $.browser.OS()
-     *
-     * $.browser.aol()
-     * $.browser.camino()
-     * $.browser.firefox()
-     * $.browser.flock()
-     * $.browser.icab()
-     * $.browser.konqueror()
-     * $.browser.mozilla()
-     * $.browser.msie()
-     * $.browser.netscape()
-     * $.browser.opera()
-     * $.browser.safari()
-     *
-     * $.browser.linux()
-     * $.browser.mac()
-     * $.browser.win()
-     */
-    var Public = {
-        // The current browser, its version as a number or a string, and the
-        // operating system its running on.
-        'browser': function() {
-            return Private.browser;
-        },
-        'version': {
-            'number': function() {
-                return Math.floor(Private.version.number);
-            },
-            'string': function() {
-                return Private.version.string;
-            }
-        },
-        'OS': function() {
-            return Private.OS;
-        },
-
-        // A boolean value indicating whether or not the given browser was
-        // detected.
-        'chrome': function() {
-            return Private.chrome;
-        },
-        'aol': function() {
-            return Private.aol;
-        },
-        'camino': function() {
-            return Private.camino;
-        },
-        'firefox': function() {
-            return Private.firefox;
-        },
-        'flock': function() {
-            return Private.flock;
-        },
-        'icab': function() {
-            return Private.icab;
-        },
-        'konqueror': function() {
-            return Private.konqueror;
-        },
-        'mozilla': function() {
-            return Private.mozilla;
-        },
-        'msie': function() {
-            return Private.msie;
-        },
-        'netscape': function() {
-            return Private.netscape;
-        },
-        'opera': function() {
-            return Private.opera;
-        },
-        'safari': function() {
-            return Private.safari;
-        },
-
-        // A boolean value indicating whether or not the given OS was
-        // detected.
-        'linux': function() {
-            return Private.linux;
-        },
-        'mac': function() {
-            return Private.mac;
-        },
-        'win': function() {
-            return Private.win;
-        }
-    };
-
-    // Allow external access to the 'Public' interface through the $.browser
-    // object.
-    $.browser = Public;
-
-
-
-    /**
-     * The following functions and attributes form the internal methods and
-     * state of the jQBrowser plugin.  See the relevant function definition
-     * later in the source for further information.
-     *
-     * Private.browser
-     * Private.version
-     * Private.OS
-     *
-     * Private.aol
-     * Private.camino
-     * Private.firefox
-     * Private.flock
-     * Private.icab
-     * Private.konqueror
-     * Private.mozilla
-     * Private.msie
-     * Private.netscape
-     * Private.opera
-     * Private.safari
-     *
-     * Private.linux
-     * Private.mac
-     * Private.win
-     */
-    var Private = {
-        // Initially set to 'Unknown', if detected each of these properties will
-        // be updated.
-        'browser': 'Unknown',
-        'version': {
-            'number': undefined,
-            'string': 'Unknown'
-        },
-        'OS': 'Unknown',
-
-        // Initially set to false, if detected one of the following browsers
-        // will be updated.
-        'chrome': false,
-        'aol': false,
-        'camino': false,
-        'firefox': false,
-        'flock': false,
-        'icab': false,
-        'konqueror': false,
-        'mozilla': false,
-        'msie': false,
-        'netscape': false,
-        'opera': false,
-        'safari': false,
-
-        // Initially set to false, if detected one of the following operating
-        // systems will be updated.
-        'linux': false,
-        'mac': false,
-        'win': false
-    };
-
-
-
-    /**
-     * Loop over the items in 'data' trying to find a browser match with the
-     * test in data[i].browser().  Once found, attempt to determine the
-     * browser version.
-     *
-     *       'name': A string containing the full name of the browser.
-     * 'identifier': By default this is a lowercase version of 'name', but
-     *               this can be overwritten by explicitly defining an
-     *               'identifier'.
-     *    'browser': A function that returns a boolean value indicating
-     *               whether or not the given browser is detected.
-     *    'version': An optional function that overwrites the default version
-     *               testing.  Must return the result of a .match().
-     *
-     * Please note that the order of the data array is important, as some
-     * browsers contain details of others in their navigator.userAgent string.
-     * For example, Flock's contains 'Firefox' so much come before Firefox's
-     * test to avoid false positives.
-     */
-    for( var  i = 0,                    // counter
-        ua = navigator.userAgent,  // the navigator's user agent string
-        ve = navigator.vendor,     // the navigator's vendor string
-        data = [                     // browser tests and data
-        { // Safari <http://www.apple.com/safari/>
-            'name': 'Chrome',
-            'browser': function() {
-                return /Google/.test(ve)
-            }
-        },
-        { // Safari <http://www.apple.com/safari/>
-            'name': 'Safari',
-            'browser': function() {
-                return /Apple/.test(ve)
-            }
-        },
-        { // Opera <http://www.opera.com/>
-            'name': 'Opera',
-            'browser': function() {
-                return window.opera != undefined
-            }
-        },
-        { // iCab <http://www.icab.de/>
-            'name': 'iCab',
-            'browser': function() {
-                return /iCab/.test(ve)
-            }
-        },
-        { // Konqueror <http://www.konqueror.org/>
-            'name': 'Konqueror',
-            'browser': function() {
-                return /KDE/.test(ve)
-            }
-        },
-        { // AOL Explorer <http://downloads.channel.aol.com/browser>
-            'identifier': 'aol',
-            'name': 'AOL Explorer',
-            'browser': function() {
-                return /America Online Browser/.test(ua)
-            },
-            'version': function() {
-                return ua.match(/rev(\d+(?:\.\d+)+)/)
-            }
-        },
-        { // Flock <http://www.flock.com/>
-            'name': 'Flock',
-            'browser': function() {
-                return /Flock/.test(ua)
-            }
-        },
-        { // Camino <http://www.caminobrowser.org/>
-            'name': 'Camino',
-            'browser': function() {
-                return /Camino/.test(ve)
-            }
-        },
-        { // Firefox <http://www.mozilla.com/firefox/>
-            'name': 'Firefox',
-            'browser': function() {
-                return /Firefox/.test(ua)
-            }
-        },
-        { // Netscape <http://browser.netscape.com/>
-            'name': 'Netscape',
-            'browser': function() {
-                return /Netscape/.test(ua)
-            }
-        },
-        { // Internet Explorer <http://www.microsoft.com/windows/ie/>
-            //                   <http://www.microsoft.com/mac/ie/>
-            'identifier': 'msie',
-            'name': 'Internet Explorer',
-            'browser': function() {
-                return /MSIE/.test(ua)
-            },
-            'version': function() {
-                return ua.match(
-                    /MSIE (\d+(?:\.\d+)+(?:b\d*)?)/
-                    )
-            }
-        },
-        { // Mozilla <http://www.mozilla.org/products/mozilla1.x/>
-            'name': 'Mozilla',
-            'browser': function() {
-                return /Gecko|Mozilla/.test(ua)
-            },
-            'version': function() {
-                return ua.match(/rv:(\d+(?:\.\d+)+)/);
-            }
-        }
-        ];
-        i < data.length;
-        i++
-        ) {
-        if( data[i].browser() ) { // we have a match
-            // If the identifier is not explicitly set, use a lowercase
-            // version of the given name.
-            var identifier = data[i].identifier ? data[i].identifier
-            : data[i].name.toLowerCase();
-
-            // Make a note that this browser was detected.
-            Private[ identifier ] = true;
-
-            // $.browser.browser() will now return the correct browser.
-            Private.browser = data[i].name;
-
-            var result;
-            if( data[i].version != undefined && (result = data[i].version()) ) {
-                // Use the explicitly set test for browser version.
-                Private.version.string = result[1];
-                Private.version.number = parseFloat( result[1] );
-            } else {
-                // Otherwise use the default test which searches for the
-                // version number after the browser name in the user agent
-                // string.
-                var re = new RegExp(
-                    data[i].name + '(?:\\s|\\/)(\\d+(?:\\.\\d+)+(?:(?:a|b)\\d*)?)'
-                    );
-
-                result = ua.match(re);
-                if( result != undefined ) {
-                    Private.version.string = result[1];
-                    Private.version.number = parseFloat( result[1] );
-                }
-            }
-
-            // Once we've detected the browser there is no need to check the
-            // others.
-            break;
-        }
-    };
-
-
-
-    /**
-     * Loop over the items in 'data' trying to find a operating system match
-     * with the test in data[i].os().
-     *
-     *       'name': A string containing the full name of the operating
-     *               system.
-     * 'identifier': By default this is a lowercase version of 'name', but
-     *               this can be overwritten by explicitly defining an
-     *               'identifier'.
-     *         'OS': A function that returns a boolean value indicating
-     *               whether or not the given operating system is detected.
-     */
-    for( var  i = 0,                  // counter
-        pl = navigator.platform, // the navigator's platform string
-        data = [                   // OS data and tests
-        { // Microsoft Windows <http://www.microsoft.com/windows/>
-            'identifier': 'win',
-            'name': 'Windows',
-            'OS': function() {
-                return /Win/.test(pl)
-            }
-        },
-        { // Apple Mac OS <http://www.apple.com/macos/>
-            'name': 'Mac',
-            'OS': function() {
-                return /Mac/.test(pl)
-            }
-        },
-        { // Linux <http://www.linux.org/>
-            'name': 'Linux',
-            'OS': function() {
-                return /Linux/.test(pl)
-            }
-        }
-        ];
-        i < data.length;
-        i++
-        ) {
-        if( data[i].OS() ) { // we have a match
-            // If the identifier is not explicitly set, use a lowercase
-            // version of the given name.
-            var identifier = data[i].identifier ? data[i].identifier
-            : data[i].name.toLowerCase();
-
-            // Make a note that the OS was detected.
-            Private[ identifier ] = true;
-
-            // $.browser.OS() will now return the correct OS.
-            Private.OS = data[i].name;
-
-            // Once we've detected the browser there is no need to check the
-            // others.
-            break;
-        }
-    };
-}();

+ 0 - 153
web/js/lib/.svn/text-base/custom-form-elements.js.svn-base

@@ -1,153 +0,0 @@
-/*
-
-CUSTOM FORM ELEMENTS
-
-Created by Ryan Fait
-www.ryanfait.com
-
-The only things you may need to change in this file are the following
-variables: checkboxHeight, radioHeight and selectWidth (lines 24, 25, 26)
-
-The numbers you set for checkboxHeight and radioHeight should be one quarter
-of the total height of the image want to use for checkboxes and radio
-buttons. Both images should contain the four stages of both inputs stacked
-on top of each other in this order: unchecked, unchecked-clicked, checked,
-checked-clicked.
-
-You may need to adjust your images a bit if there is a slight vertical
-movement during the different stages of the button activation.
-
-The value of selectWidth should be the width of your select list image.
-
-Visit http://ryanfait.com/ for more information.
-
-*/
-
-var checkboxHeight = "25";
-var radioHeight = "25";
-var selectWidth = "210";
-
-
-/* No need to change anything after this */
-
-
-document.write('<style type="text/css">input.styled { display: none; } select.styled { position: relative; width: ' + selectWidth + 'px; opacity: 0; filter: alpha(opacity=0); z-index: 5; } .disabled { opacity: 0.5; filter: alpha(opacity=50); }</style>');
-
-var Custom = {
-	init: function() {
-		var inputs = document.getElementsByTagName("input"), span = Array(), textnode, option, active;
-		for(a = 0; a < inputs.length; a++) {
-			if((inputs[a].type == "checkbox" || inputs[a].type == "radio") && inputs[a].className == "styled") {
-				span[a] = document.createElement("span");
-				span[a].className = inputs[a].type;
-
-				if(inputs[a].checked == true) {
-					if(inputs[a].type == "checkbox") {
-						position = "0 -" + (checkboxHeight*2) + "px";
-						span[a].style.backgroundPosition = position;
-					} else {
-						position = "0 -" + (radioHeight*2) + "px";
-						span[a].style.backgroundPosition = position;
-					}
-				}
-				inputs[a].parentNode.insertBefore(span[a], inputs[a]);
-				inputs[a].onchange = Custom.clear;
-				if(!inputs[a].getAttribute("disabled")) {
-					span[a].onmousedown = Custom.pushed;
-					span[a].onmouseup = Custom.check;
-				} else {
-					span[a].className = span[a].className += " disabled";
-				}
-			}
-		}
-		inputs = document.getElementsByTagName("select");
-		for(a = 0; a < inputs.length; a++) {
-                    try{
-                        fb.log($(inputs[a]).hasClass("styled"));
-			if($(inputs[a]).hasClass("styled")) {
-				option = inputs[a].getElementsByTagName("option");
-				active = option[0].childNodes[0].nodeValue;
-				textnode = document.createTextNode(active);
-				for(b = 0; b < option.length; b++) {
-					if(option[b].selected == true) {
-						textnode = document.createTextNode(option[b].childNodes[0].nodeValue);
-					}
-				}
-				span[a] = document.createElement("span");
-				span[a].className = "select";
-				span[a].id = "select-" + inputs[a].name + a;
-				span[a].appendChild(textnode);
-				inputs[a].parentNode.insertBefore(span[a], inputs[a]);
-                                inputs[a].id = inputs[a].name + a;
-				if(!inputs[a].getAttribute("disabled")) {
-					inputs[a].onchange = Custom.choose;
-				} else {
-					inputs[a].previousSibling.className = inputs[a].previousSibling.className += " disabled";
-				}
-			}
-                    }catch(e){fb.error(e);}
-		}
-		document.onmouseup = Custom.clear;
-	},
-	pushed: function() {
-		element = this.nextSibling;
-		if(element.checked == true && element.type == "checkbox") {
-			this.style.backgroundPosition = "0 -" + checkboxHeight*3 + "px";
-		} else if(element.checked == true && element.type == "radio") {
-			this.style.backgroundPosition = "0 -" + radioHeight*3 + "px";
-		} else if(element.checked != true && element.type == "checkbox") {
-			this.style.backgroundPosition = "0 -" + checkboxHeight + "px";
-		} else {
-			this.style.backgroundPosition = "0 -" + radioHeight + "px";
-		}
-	},
-	check: function() {
-		element = this.nextSibling;
-		if(element.checked == true && element.type == "checkbox") {
-			this.style.backgroundPosition = "0 0";
-			element.checked = false;
-		} else {
-			if(element.type == "checkbox") {
-				this.style.backgroundPosition = "0 -" + checkboxHeight*2 + "px";
-			} else {
-				this.style.backgroundPosition = "0 -" + radioHeight*2 + "px";
-				group = this.nextSibling.name;
-				inputs = document.getElementsByTagName("input");
-				for(a = 0; a < inputs.length; a++) {
-					if(inputs[a].name == group && inputs[a] != this.nextSibling) {
-						inputs[a].previousSibling.style.backgroundPosition = "0 0";
-					}
-				}
-			}
-			element.checked = true;
-		}
-	},
-	clear: function() {
-		inputs = document.getElementsByTagName("input");
-		for(var b = 0; b < inputs.length; b++) {
-			if(inputs[b].type == "checkbox" && inputs[b].checked == true && inputs[b].className == "styled") {
-				inputs[b].previousSibling.style.backgroundPosition = "0 -" + checkboxHeight*2 + "px";
-			} else if(inputs[b].type == "checkbox" && inputs[b].className == "styled") {
-				inputs[b].previousSibling.style.backgroundPosition = "0 0";
-			} else if(inputs[b].type == "radio" && inputs[b].checked == true && inputs[b].className == "styled") {
-				inputs[b].previousSibling.style.backgroundPosition = "0 -" + radioHeight*2 + "px";
-			} else if(inputs[b].type == "radio" && inputs[b].className == "styled") {
-				inputs[b].previousSibling.style.backgroundPosition = "0 0";
-			}
-		}
-	},
-	choose: function() {
-		option = this.getElementsByTagName("option");
-		for(d = 0; d < option.length; d++) {
-			if(option[d].selected == true) {
-                            //
-                            var expr = '#select-' + this.id;
-                            fb.log(expr);
-                            $(expr).text(option[d].childNodes[0].nodeValue);
-                            // bad!
-                            //document.getElementById("select" + this.name).childNodes[0].nodeValue = option[d].childNodes[0].nodeValue;
-			}
-		}
-	}
-}
-window.onload = Custom.init;

+ 0 - 167
web/js/lib/.svn/text-base/jquery-1.4.4.min.js.svn-base

@@ -1,167 +0,0 @@
-/*!
- * jQuery JavaScript Library v1.4.4
- * http://jquery.com/
- *
- * Copyright 2010, John Resig
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * Includes Sizzle.js
- * http://sizzlejs.com/
- * Copyright 2010, The Dojo Foundation
- * Released under the MIT, BSD, and GPL Licenses.
- *
- * Date: Thu Nov 11 19:04:53 2010 -0500
- */
-(function(E,B){function ka(a,b,d){if(d===B&&a.nodeType===1){d=a.getAttribute("data-"+b);if(typeof d==="string"){try{d=d==="true"?true:d==="false"?false:d==="null"?null:!c.isNaN(d)?parseFloat(d):Ja.test(d)?c.parseJSON(d):d}catch(e){}c.data(a,b,d)}else d=B}return d}function U(){return false}function ca(){return true}function la(a,b,d){d[0].type=a;return c.event.handle.apply(b,d)}function Ka(a){var b,d,e,f,h,l,k,o,x,r,A,C=[];f=[];h=c.data(this,this.nodeType?"events":"__events__");if(typeof h==="function")h=
-h.events;if(!(a.liveFired===this||!h||!h.live||a.button&&a.type==="click")){if(a.namespace)A=RegExp("(^|\\.)"+a.namespace.split(".").join("\\.(?:.*\\.)?")+"(\\.|$)");a.liveFired=this;var J=h.live.slice(0);for(k=0;k<J.length;k++){h=J[k];h.origType.replace(X,"")===a.type?f.push(h.selector):J.splice(k--,1)}f=c(a.target).closest(f,a.currentTarget);o=0;for(x=f.length;o<x;o++){r=f[o];for(k=0;k<J.length;k++){h=J[k];if(r.selector===h.selector&&(!A||A.test(h.namespace))){l=r.elem;e=null;if(h.preType==="mouseenter"||
-h.preType==="mouseleave"){a.type=h.preType;e=c(a.relatedTarget).closest(h.selector)[0]}if(!e||e!==l)C.push({elem:l,handleObj:h,level:r.level})}}}o=0;for(x=C.length;o<x;o++){f=C[o];if(d&&f.level>d)break;a.currentTarget=f.elem;a.data=f.handleObj.data;a.handleObj=f.handleObj;A=f.handleObj.origHandler.apply(f.elem,arguments);if(A===false||a.isPropagationStopped()){d=f.level;if(A===false)b=false;if(a.isImmediatePropagationStopped())break}}return b}}function Y(a,b){return(a&&a!=="*"?a+".":"")+b.replace(La,
-"`").replace(Ma,"&")}function ma(a,b,d){if(c.isFunction(b))return c.grep(a,function(f,h){return!!b.call(f,h,f)===d});else if(b.nodeType)return c.grep(a,function(f){return f===b===d});else if(typeof b==="string"){var e=c.grep(a,function(f){return f.nodeType===1});if(Na.test(b))return c.filter(b,e,!d);else b=c.filter(b,e)}return c.grep(a,function(f){return c.inArray(f,b)>=0===d})}function na(a,b){var d=0;b.each(function(){if(this.nodeName===(a[d]&&a[d].nodeName)){var e=c.data(a[d++]),f=c.data(this,
-e);if(e=e&&e.events){delete f.handle;f.events={};for(var h in e)for(var l in e[h])c.event.add(this,h,e[h][l],e[h][l].data)}}})}function Oa(a,b){b.src?c.ajax({url:b.src,async:false,dataType:"script"}):c.globalEval(b.text||b.textContent||b.innerHTML||"");b.parentNode&&b.parentNode.removeChild(b)}function oa(a,b,d){var e=b==="width"?a.offsetWidth:a.offsetHeight;if(d==="border")return e;c.each(b==="width"?Pa:Qa,function(){d||(e-=parseFloat(c.css(a,"padding"+this))||0);if(d==="margin")e+=parseFloat(c.css(a,
-"margin"+this))||0;else e-=parseFloat(c.css(a,"border"+this+"Width"))||0});return e}function da(a,b,d,e){if(c.isArray(b)&&b.length)c.each(b,function(f,h){d||Ra.test(a)?e(a,h):da(a+"["+(typeof h==="object"||c.isArray(h)?f:"")+"]",h,d,e)});else if(!d&&b!=null&&typeof b==="object")c.isEmptyObject(b)?e(a,""):c.each(b,function(f,h){da(a+"["+f+"]",h,d,e)});else e(a,b)}function S(a,b){var d={};c.each(pa.concat.apply([],pa.slice(0,b)),function(){d[this]=a});return d}function qa(a){if(!ea[a]){var b=c("<"+
-a+">").appendTo("body"),d=b.css("display");b.remove();if(d==="none"||d==="")d="block";ea[a]=d}return ea[a]}function fa(a){return c.isWindow(a)?a:a.nodeType===9?a.defaultView||a.parentWindow:false}var t=E.document,c=function(){function a(){if(!b.isReady){try{t.documentElement.doScroll("left")}catch(j){setTimeout(a,1);return}b.ready()}}var b=function(j,s){return new b.fn.init(j,s)},d=E.jQuery,e=E.$,f,h=/^(?:[^<]*(<[\w\W]+>)[^>]*$|#([\w\-]+)$)/,l=/\S/,k=/^\s+/,o=/\s+$/,x=/\W/,r=/\d/,A=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,
-C=/^[\],:{}\s]*$/,J=/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,w=/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,I=/(?:^|:|,)(?:\s*\[)+/g,L=/(webkit)[ \/]([\w.]+)/,g=/(opera)(?:.*version)?[ \/]([\w.]+)/,i=/(msie) ([\w.]+)/,n=/(mozilla)(?:.*? rv:([\w.]+))?/,m=navigator.userAgent,p=false,q=[],u,y=Object.prototype.toString,F=Object.prototype.hasOwnProperty,M=Array.prototype.push,N=Array.prototype.slice,O=String.prototype.trim,D=Array.prototype.indexOf,R={};b.fn=b.prototype={init:function(j,
-s){var v,z,H;if(!j)return this;if(j.nodeType){this.context=this[0]=j;this.length=1;return this}if(j==="body"&&!s&&t.body){this.context=t;this[0]=t.body;this.selector="body";this.length=1;return this}if(typeof j==="string")if((v=h.exec(j))&&(v[1]||!s))if(v[1]){H=s?s.ownerDocument||s:t;if(z=A.exec(j))if(b.isPlainObject(s)){j=[t.createElement(z[1])];b.fn.attr.call(j,s,true)}else j=[H.createElement(z[1])];else{z=b.buildFragment([v[1]],[H]);j=(z.cacheable?z.fragment.cloneNode(true):z.fragment).childNodes}return b.merge(this,
-j)}else{if((z=t.getElementById(v[2]))&&z.parentNode){if(z.id!==v[2])return f.find(j);this.length=1;this[0]=z}this.context=t;this.selector=j;return this}else if(!s&&!x.test(j)){this.selector=j;this.context=t;j=t.getElementsByTagName(j);return b.merge(this,j)}else return!s||s.jquery?(s||f).find(j):b(s).find(j);else if(b.isFunction(j))return f.ready(j);if(j.selector!==B){this.selector=j.selector;this.context=j.context}return b.makeArray(j,this)},selector:"",jquery:"1.4.4",length:0,size:function(){return this.length},
-toArray:function(){return N.call(this,0)},get:function(j){return j==null?this.toArray():j<0?this.slice(j)[0]:this[j]},pushStack:function(j,s,v){var z=b();b.isArray(j)?M.apply(z,j):b.merge(z,j);z.prevObject=this;z.context=this.context;if(s==="find")z.selector=this.selector+(this.selector?" ":"")+v;else if(s)z.selector=this.selector+"."+s+"("+v+")";return z},each:function(j,s){return b.each(this,j,s)},ready:function(j){b.bindReady();if(b.isReady)j.call(t,b);else q&&q.push(j);return this},eq:function(j){return j===
--1?this.slice(j):this.slice(j,+j+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(N.apply(this,arguments),"slice",N.call(arguments).join(","))},map:function(j){return this.pushStack(b.map(this,function(s,v){return j.call(s,v,s)}))},end:function(){return this.prevObject||b(null)},push:M,sort:[].sort,splice:[].splice};b.fn.init.prototype=b.fn;b.extend=b.fn.extend=function(){var j,s,v,z,H,G=arguments[0]||{},K=1,Q=arguments.length,ga=false;
-if(typeof G==="boolean"){ga=G;G=arguments[1]||{};K=2}if(typeof G!=="object"&&!b.isFunction(G))G={};if(Q===K){G=this;--K}for(;K<Q;K++)if((j=arguments[K])!=null)for(s in j){v=G[s];z=j[s];if(G!==z)if(ga&&z&&(b.isPlainObject(z)||(H=b.isArray(z)))){if(H){H=false;v=v&&b.isArray(v)?v:[]}else v=v&&b.isPlainObject(v)?v:{};G[s]=b.extend(ga,v,z)}else if(z!==B)G[s]=z}return G};b.extend({noConflict:function(j){E.$=e;if(j)E.jQuery=d;return b},isReady:false,readyWait:1,ready:function(j){j===true&&b.readyWait--;
-if(!b.readyWait||j!==true&&!b.isReady){if(!t.body)return setTimeout(b.ready,1);b.isReady=true;if(!(j!==true&&--b.readyWait>0))if(q){var s=0,v=q;for(q=null;j=v[s++];)j.call(t,b);b.fn.trigger&&b(t).trigger("ready").unbind("ready")}}},bindReady:function(){if(!p){p=true;if(t.readyState==="complete")return setTimeout(b.ready,1);if(t.addEventListener){t.addEventListener("DOMContentLoaded",u,false);E.addEventListener("load",b.ready,false)}else if(t.attachEvent){t.attachEvent("onreadystatechange",u);E.attachEvent("onload",
-b.ready);var j=false;try{j=E.frameElement==null}catch(s){}t.documentElement.doScroll&&j&&a()}}},isFunction:function(j){return b.type(j)==="function"},isArray:Array.isArray||function(j){return b.type(j)==="array"},isWindow:function(j){return j&&typeof j==="object"&&"setInterval"in j},isNaN:function(j){return j==null||!r.test(j)||isNaN(j)},type:function(j){return j==null?String(j):R[y.call(j)]||"object"},isPlainObject:function(j){if(!j||b.type(j)!=="object"||j.nodeType||b.isWindow(j))return false;if(j.constructor&&
-!F.call(j,"constructor")&&!F.call(j.constructor.prototype,"isPrototypeOf"))return false;for(var s in j);return s===B||F.call(j,s)},isEmptyObject:function(j){for(var s in j)return false;return true},error:function(j){throw j;},parseJSON:function(j){if(typeof j!=="string"||!j)return null;j=b.trim(j);if(C.test(j.replace(J,"@").replace(w,"]").replace(I,"")))return E.JSON&&E.JSON.parse?E.JSON.parse(j):(new Function("return "+j))();else b.error("Invalid JSON: "+j)},noop:function(){},globalEval:function(j){if(j&&
-l.test(j)){var s=t.getElementsByTagName("head")[0]||t.documentElement,v=t.createElement("script");v.type="text/javascript";if(b.support.scriptEval)v.appendChild(t.createTextNode(j));else v.text=j;s.insertBefore(v,s.firstChild);s.removeChild(v)}},nodeName:function(j,s){return j.nodeName&&j.nodeName.toUpperCase()===s.toUpperCase()},each:function(j,s,v){var z,H=0,G=j.length,K=G===B||b.isFunction(j);if(v)if(K)for(z in j){if(s.apply(j[z],v)===false)break}else for(;H<G;){if(s.apply(j[H++],v)===false)break}else if(K)for(z in j){if(s.call(j[z],
-z,j[z])===false)break}else for(v=j[0];H<G&&s.call(v,H,v)!==false;v=j[++H]);return j},trim:O?function(j){return j==null?"":O.call(j)}:function(j){return j==null?"":j.toString().replace(k,"").replace(o,"")},makeArray:function(j,s){var v=s||[];if(j!=null){var z=b.type(j);j.length==null||z==="string"||z==="function"||z==="regexp"||b.isWindow(j)?M.call(v,j):b.merge(v,j)}return v},inArray:function(j,s){if(s.indexOf)return s.indexOf(j);for(var v=0,z=s.length;v<z;v++)if(s[v]===j)return v;return-1},merge:function(j,
-s){var v=j.length,z=0;if(typeof s.length==="number")for(var H=s.length;z<H;z++)j[v++]=s[z];else for(;s[z]!==B;)j[v++]=s[z++];j.length=v;return j},grep:function(j,s,v){var z=[],H;v=!!v;for(var G=0,K=j.length;G<K;G++){H=!!s(j[G],G);v!==H&&z.push(j[G])}return z},map:function(j,s,v){for(var z=[],H,G=0,K=j.length;G<K;G++){H=s(j[G],G,v);if(H!=null)z[z.length]=H}return z.concat.apply([],z)},guid:1,proxy:function(j,s,v){if(arguments.length===2)if(typeof s==="string"){v=j;j=v[s];s=B}else if(s&&!b.isFunction(s)){v=
-s;s=B}if(!s&&j)s=function(){return j.apply(v||this,arguments)};if(j)s.guid=j.guid=j.guid||s.guid||b.guid++;return s},access:function(j,s,v,z,H,G){var K=j.length;if(typeof s==="object"){for(var Q in s)b.access(j,Q,s[Q],z,H,v);return j}if(v!==B){z=!G&&z&&b.isFunction(v);for(Q=0;Q<K;Q++)H(j[Q],s,z?v.call(j[Q],Q,H(j[Q],s)):v,G);return j}return K?H(j[0],s):B},now:function(){return(new Date).getTime()},uaMatch:function(j){j=j.toLowerCase();j=L.exec(j)||g.exec(j)||i.exec(j)||j.indexOf("compatible")<0&&n.exec(j)||
-[];return{browser:j[1]||"",version:j[2]||"0"}},browser:{}});b.each("Boolean Number String Function Array Date RegExp Object".split(" "),function(j,s){R["[object "+s+"]"]=s.toLowerCase()});m=b.uaMatch(m);if(m.browser){b.browser[m.browser]=true;b.browser.version=m.version}if(b.browser.webkit)b.browser.safari=true;if(D)b.inArray=function(j,s){return D.call(s,j)};if(!/\s/.test("\u00a0")){k=/^[\s\xA0]+/;o=/[\s\xA0]+$/}f=b(t);if(t.addEventListener)u=function(){t.removeEventListener("DOMContentLoaded",u,
-false);b.ready()};else if(t.attachEvent)u=function(){if(t.readyState==="complete"){t.detachEvent("onreadystatechange",u);b.ready()}};return E.jQuery=E.$=b}();(function(){c.support={};var a=t.documentElement,b=t.createElement("script"),d=t.createElement("div"),e="script"+c.now();d.style.display="none";d.innerHTML="   <link/><table></table><a href='/a' style='color:red;float:left;opacity:.55;'>a</a><input type='checkbox'/>";var f=d.getElementsByTagName("*"),h=d.getElementsByTagName("a")[0],l=t.createElement("select"),
-k=l.appendChild(t.createElement("option"));if(!(!f||!f.length||!h)){c.support={leadingWhitespace:d.firstChild.nodeType===3,tbody:!d.getElementsByTagName("tbody").length,htmlSerialize:!!d.getElementsByTagName("link").length,style:/red/.test(h.getAttribute("style")),hrefNormalized:h.getAttribute("href")==="/a",opacity:/^0.55$/.test(h.style.opacity),cssFloat:!!h.style.cssFloat,checkOn:d.getElementsByTagName("input")[0].value==="on",optSelected:k.selected,deleteExpando:true,optDisabled:false,checkClone:false,
-scriptEval:false,noCloneEvent:true,boxModel:null,inlineBlockNeedsLayout:false,shrinkWrapBlocks:false,reliableHiddenOffsets:true};l.disabled=true;c.support.optDisabled=!k.disabled;b.type="text/javascript";try{b.appendChild(t.createTextNode("window."+e+"=1;"))}catch(o){}a.insertBefore(b,a.firstChild);if(E[e]){c.support.scriptEval=true;delete E[e]}try{delete b.test}catch(x){c.support.deleteExpando=false}a.removeChild(b);if(d.attachEvent&&d.fireEvent){d.attachEvent("onclick",function r(){c.support.noCloneEvent=
-false;d.detachEvent("onclick",r)});d.cloneNode(true).fireEvent("onclick")}d=t.createElement("div");d.innerHTML="<input type='radio' name='radiotest' checked='checked'/>";a=t.createDocumentFragment();a.appendChild(d.firstChild);c.support.checkClone=a.cloneNode(true).cloneNode(true).lastChild.checked;c(function(){var r=t.createElement("div");r.style.width=r.style.paddingLeft="1px";t.body.appendChild(r);c.boxModel=c.support.boxModel=r.offsetWidth===2;if("zoom"in r.style){r.style.display="inline";r.style.zoom=
-1;c.support.inlineBlockNeedsLayout=r.offsetWidth===2;r.style.display="";r.innerHTML="<div style='width:4px;'></div>";c.support.shrinkWrapBlocks=r.offsetWidth!==2}r.innerHTML="<table><tr><td style='padding:0;display:none'></td><td>t</td></tr></table>";var A=r.getElementsByTagName("td");c.support.reliableHiddenOffsets=A[0].offsetHeight===0;A[0].style.display="";A[1].style.display="none";c.support.reliableHiddenOffsets=c.support.reliableHiddenOffsets&&A[0].offsetHeight===0;r.innerHTML="";t.body.removeChild(r).style.display=
-"none"});a=function(r){var A=t.createElement("div");r="on"+r;var C=r in A;if(!C){A.setAttribute(r,"return;");C=typeof A[r]==="function"}return C};c.support.submitBubbles=a("submit");c.support.changeBubbles=a("change");a=b=d=f=h=null}})();var ra={},Ja=/^(?:\{.*\}|\[.*\])$/;c.extend({cache:{},uuid:0,expando:"jQuery"+c.now(),noData:{embed:true,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:true},data:function(a,b,d){if(c.acceptData(a)){a=a==E?ra:a;var e=a.nodeType,f=e?a[c.expando]:null,h=
-c.cache;if(!(e&&!f&&typeof b==="string"&&d===B)){if(e)f||(a[c.expando]=f=++c.uuid);else h=a;if(typeof b==="object")if(e)h[f]=c.extend(h[f],b);else c.extend(h,b);else if(e&&!h[f])h[f]={};a=e?h[f]:h;if(d!==B)a[b]=d;return typeof b==="string"?a[b]:a}}},removeData:function(a,b){if(c.acceptData(a)){a=a==E?ra:a;var d=a.nodeType,e=d?a[c.expando]:a,f=c.cache,h=d?f[e]:e;if(b){if(h){delete h[b];d&&c.isEmptyObject(h)&&c.removeData(a)}}else if(d&&c.support.deleteExpando)delete a[c.expando];else if(a.removeAttribute)a.removeAttribute(c.expando);
-else if(d)delete f[e];else for(var l in a)delete a[l]}},acceptData:function(a){if(a.nodeName){var b=c.noData[a.nodeName.toLowerCase()];if(b)return!(b===true||a.getAttribute("classid")!==b)}return true}});c.fn.extend({data:function(a,b){var d=null;if(typeof a==="undefined"){if(this.length){var e=this[0].attributes,f;d=c.data(this[0]);for(var h=0,l=e.length;h<l;h++){f=e[h].name;if(f.indexOf("data-")===0){f=f.substr(5);ka(this[0],f,d[f])}}}return d}else if(typeof a==="object")return this.each(function(){c.data(this,
-a)});var k=a.split(".");k[1]=k[1]?"."+k[1]:"";if(b===B){d=this.triggerHandler("getData"+k[1]+"!",[k[0]]);if(d===B&&this.length){d=c.data(this[0],a);d=ka(this[0],a,d)}return d===B&&k[1]?this.data(k[0]):d}else return this.each(function(){var o=c(this),x=[k[0],b];o.triggerHandler("setData"+k[1]+"!",x);c.data(this,a,b);o.triggerHandler("changeData"+k[1]+"!",x)})},removeData:function(a){return this.each(function(){c.removeData(this,a)})}});c.extend({queue:function(a,b,d){if(a){b=(b||"fx")+"queue";var e=
-c.data(a,b);if(!d)return e||[];if(!e||c.isArray(d))e=c.data(a,b,c.makeArray(d));else e.push(d);return e}},dequeue:function(a,b){b=b||"fx";var d=c.queue(a,b),e=d.shift();if(e==="inprogress")e=d.shift();if(e){b==="fx"&&d.unshift("inprogress");e.call(a,function(){c.dequeue(a,b)})}}});c.fn.extend({queue:function(a,b){if(typeof a!=="string"){b=a;a="fx"}if(b===B)return c.queue(this[0],a);return this.each(function(){var d=c.queue(this,a,b);a==="fx"&&d[0]!=="inprogress"&&c.dequeue(this,a)})},dequeue:function(a){return this.each(function(){c.dequeue(this,
-a)})},delay:function(a,b){a=c.fx?c.fx.speeds[a]||a:a;b=b||"fx";return this.queue(b,function(){var d=this;setTimeout(function(){c.dequeue(d,b)},a)})},clearQueue:function(a){return this.queue(a||"fx",[])}});var sa=/[\n\t]/g,ha=/\s+/,Sa=/\r/g,Ta=/^(?:href|src|style)$/,Ua=/^(?:button|input)$/i,Va=/^(?:button|input|object|select|textarea)$/i,Wa=/^a(?:rea)?$/i,ta=/^(?:radio|checkbox)$/i;c.props={"for":"htmlFor","class":"className",readonly:"readOnly",maxlength:"maxLength",cellspacing:"cellSpacing",rowspan:"rowSpan",
-colspan:"colSpan",tabindex:"tabIndex",usemap:"useMap",frameborder:"frameBorder"};c.fn.extend({attr:function(a,b){return c.access(this,a,b,true,c.attr)},removeAttr:function(a){return this.each(function(){c.attr(this,a,"");this.nodeType===1&&this.removeAttribute(a)})},addClass:function(a){if(c.isFunction(a))return this.each(function(x){var r=c(this);r.addClass(a.call(this,x,r.attr("class")))});if(a&&typeof a==="string")for(var b=(a||"").split(ha),d=0,e=this.length;d<e;d++){var f=this[d];if(f.nodeType===
-1)if(f.className){for(var h=" "+f.className+" ",l=f.className,k=0,o=b.length;k<o;k++)if(h.indexOf(" "+b[k]+" ")<0)l+=" "+b[k];f.className=c.trim(l)}else f.className=a}return this},removeClass:function(a){if(c.isFunction(a))return this.each(function(o){var x=c(this);x.removeClass(a.call(this,o,x.attr("class")))});if(a&&typeof a==="string"||a===B)for(var b=(a||"").split(ha),d=0,e=this.length;d<e;d++){var f=this[d];if(f.nodeType===1&&f.className)if(a){for(var h=(" "+f.className+" ").replace(sa," "),
-l=0,k=b.length;l<k;l++)h=h.replace(" "+b[l]+" "," ");f.className=c.trim(h)}else f.className=""}return this},toggleClass:function(a,b){var d=typeof a,e=typeof b==="boolean";if(c.isFunction(a))return this.each(function(f){var h=c(this);h.toggleClass(a.call(this,f,h.attr("class"),b),b)});return this.each(function(){if(d==="string")for(var f,h=0,l=c(this),k=b,o=a.split(ha);f=o[h++];){k=e?k:!l.hasClass(f);l[k?"addClass":"removeClass"](f)}else if(d==="undefined"||d==="boolean"){this.className&&c.data(this,
-"__className__",this.className);this.className=this.className||a===false?"":c.data(this,"__className__")||""}})},hasClass:function(a){a=" "+a+" ";for(var b=0,d=this.length;b<d;b++)if((" "+this[b].className+" ").replace(sa," ").indexOf(a)>-1)return true;return false},val:function(a){if(!arguments.length){var b=this[0];if(b){if(c.nodeName(b,"option")){var d=b.attributes.value;return!d||d.specified?b.value:b.text}if(c.nodeName(b,"select")){var e=b.selectedIndex;d=[];var f=b.options;b=b.type==="select-one";
-if(e<0)return null;var h=b?e:0;for(e=b?e+1:f.length;h<e;h++){var l=f[h];if(l.selected&&(c.support.optDisabled?!l.disabled:l.getAttribute("disabled")===null)&&(!l.parentNode.disabled||!c.nodeName(l.parentNode,"optgroup"))){a=c(l).val();if(b)return a;d.push(a)}}return d}if(ta.test(b.type)&&!c.support.checkOn)return b.getAttribute("value")===null?"on":b.value;return(b.value||"").replace(Sa,"")}return B}var k=c.isFunction(a);return this.each(function(o){var x=c(this),r=a;if(this.nodeType===1){if(k)r=
-a.call(this,o,x.val());if(r==null)r="";else if(typeof r==="number")r+="";else if(c.isArray(r))r=c.map(r,function(C){return C==null?"":C+""});if(c.isArray(r)&&ta.test(this.type))this.checked=c.inArray(x.val(),r)>=0;else if(c.nodeName(this,"select")){var A=c.makeArray(r);c("option",this).each(function(){this.selected=c.inArray(c(this).val(),A)>=0});if(!A.length)this.selectedIndex=-1}else this.value=r}})}});c.extend({attrFn:{val:true,css:true,html:true,text:true,data:true,width:true,height:true,offset:true},
-attr:function(a,b,d,e){if(!a||a.nodeType===3||a.nodeType===8)return B;if(e&&b in c.attrFn)return c(a)[b](d);e=a.nodeType!==1||!c.isXMLDoc(a);var f=d!==B;b=e&&c.props[b]||b;var h=Ta.test(b);if((b in a||a[b]!==B)&&e&&!h){if(f){b==="type"&&Ua.test(a.nodeName)&&a.parentNode&&c.error("type property can't be changed");if(d===null)a.nodeType===1&&a.removeAttribute(b);else a[b]=d}if(c.nodeName(a,"form")&&a.getAttributeNode(b))return a.getAttributeNode(b).nodeValue;if(b==="tabIndex")return(b=a.getAttributeNode("tabIndex"))&&
-b.specified?b.value:Va.test(a.nodeName)||Wa.test(a.nodeName)&&a.href?0:B;return a[b]}if(!c.support.style&&e&&b==="style"){if(f)a.style.cssText=""+d;return a.style.cssText}f&&a.setAttribute(b,""+d);if(!a.attributes[b]&&a.hasAttribute&&!a.hasAttribute(b))return B;a=!c.support.hrefNormalized&&e&&h?a.getAttribute(b,2):a.getAttribute(b);return a===null?B:a}});var X=/\.(.*)$/,ia=/^(?:textarea|input|select)$/i,La=/\./g,Ma=/ /g,Xa=/[^\w\s.|`]/g,Ya=function(a){return a.replace(Xa,"\\$&")},ua={focusin:0,focusout:0};
-c.event={add:function(a,b,d,e){if(!(a.nodeType===3||a.nodeType===8)){if(c.isWindow(a)&&a!==E&&!a.frameElement)a=E;if(d===false)d=U;else if(!d)return;var f,h;if(d.handler){f=d;d=f.handler}if(!d.guid)d.guid=c.guid++;if(h=c.data(a)){var l=a.nodeType?"events":"__events__",k=h[l],o=h.handle;if(typeof k==="function"){o=k.handle;k=k.events}else if(!k){a.nodeType||(h[l]=h=function(){});h.events=k={}}if(!o)h.handle=o=function(){return typeof c!=="undefined"&&!c.event.triggered?c.event.handle.apply(o.elem,
-arguments):B};o.elem=a;b=b.split(" ");for(var x=0,r;l=b[x++];){h=f?c.extend({},f):{handler:d,data:e};if(l.indexOf(".")>-1){r=l.split(".");l=r.shift();h.namespace=r.slice(0).sort().join(".")}else{r=[];h.namespace=""}h.type=l;if(!h.guid)h.guid=d.guid;var A=k[l],C=c.event.special[l]||{};if(!A){A=k[l]=[];if(!C.setup||C.setup.call(a,e,r,o)===false)if(a.addEventListener)a.addEventListener(l,o,false);else a.attachEvent&&a.attachEvent("on"+l,o)}if(C.add){C.add.call(a,h);if(!h.handler.guid)h.handler.guid=
-d.guid}A.push(h);c.event.global[l]=true}a=null}}},global:{},remove:function(a,b,d,e){if(!(a.nodeType===3||a.nodeType===8)){if(d===false)d=U;var f,h,l=0,k,o,x,r,A,C,J=a.nodeType?"events":"__events__",w=c.data(a),I=w&&w[J];if(w&&I){if(typeof I==="function"){w=I;I=I.events}if(b&&b.type){d=b.handler;b=b.type}if(!b||typeof b==="string"&&b.charAt(0)==="."){b=b||"";for(f in I)c.event.remove(a,f+b)}else{for(b=b.split(" ");f=b[l++];){r=f;k=f.indexOf(".")<0;o=[];if(!k){o=f.split(".");f=o.shift();x=RegExp("(^|\\.)"+
-c.map(o.slice(0).sort(),Ya).join("\\.(?:.*\\.)?")+"(\\.|$)")}if(A=I[f])if(d){r=c.event.special[f]||{};for(h=e||0;h<A.length;h++){C=A[h];if(d.guid===C.guid){if(k||x.test(C.namespace)){e==null&&A.splice(h--,1);r.remove&&r.remove.call(a,C)}if(e!=null)break}}if(A.length===0||e!=null&&A.length===1){if(!r.teardown||r.teardown.call(a,o)===false)c.removeEvent(a,f,w.handle);delete I[f]}}else for(h=0;h<A.length;h++){C=A[h];if(k||x.test(C.namespace)){c.event.remove(a,r,C.handler,h);A.splice(h--,1)}}}if(c.isEmptyObject(I)){if(b=
-w.handle)b.elem=null;delete w.events;delete w.handle;if(typeof w==="function")c.removeData(a,J);else c.isEmptyObject(w)&&c.removeData(a)}}}}},trigger:function(a,b,d,e){var f=a.type||a;if(!e){a=typeof a==="object"?a[c.expando]?a:c.extend(c.Event(f),a):c.Event(f);if(f.indexOf("!")>=0){a.type=f=f.slice(0,-1);a.exclusive=true}if(!d){a.stopPropagation();c.event.global[f]&&c.each(c.cache,function(){this.events&&this.events[f]&&c.event.trigger(a,b,this.handle.elem)})}if(!d||d.nodeType===3||d.nodeType===
-8)return B;a.result=B;a.target=d;b=c.makeArray(b);b.unshift(a)}a.currentTarget=d;(e=d.nodeType?c.data(d,"handle"):(c.data(d,"__events__")||{}).handle)&&e.apply(d,b);e=d.parentNode||d.ownerDocument;try{if(!(d&&d.nodeName&&c.noData[d.nodeName.toLowerCase()]))if(d["on"+f]&&d["on"+f].apply(d,b)===false){a.result=false;a.preventDefault()}}catch(h){}if(!a.isPropagationStopped()&&e)c.event.trigger(a,b,e,true);else if(!a.isDefaultPrevented()){var l;e=a.target;var k=f.replace(X,""),o=c.nodeName(e,"a")&&k===
-"click",x=c.event.special[k]||{};if((!x._default||x._default.call(d,a)===false)&&!o&&!(e&&e.nodeName&&c.noData[e.nodeName.toLowerCase()])){try{if(e[k]){if(l=e["on"+k])e["on"+k]=null;c.event.triggered=true;e[k]()}}catch(r){}if(l)e["on"+k]=l;c.event.triggered=false}}},handle:function(a){var b,d,e,f;d=[];var h=c.makeArray(arguments);a=h[0]=c.event.fix(a||E.event);a.currentTarget=this;b=a.type.indexOf(".")<0&&!a.exclusive;if(!b){e=a.type.split(".");a.type=e.shift();d=e.slice(0).sort();e=RegExp("(^|\\.)"+
-d.join("\\.(?:.*\\.)?")+"(\\.|$)")}a.namespace=a.namespace||d.join(".");f=c.data(this,this.nodeType?"events":"__events__");if(typeof f==="function")f=f.events;d=(f||{})[a.type];if(f&&d){d=d.slice(0);f=0;for(var l=d.length;f<l;f++){var k=d[f];if(b||e.test(k.namespace)){a.handler=k.handler;a.data=k.data;a.handleObj=k;k=k.handler.apply(this,h);if(k!==B){a.result=k;if(k===false){a.preventDefault();a.stopPropagation()}}if(a.isImmediatePropagationStopped())break}}}return a.result},props:"altKey attrChange attrName bubbles button cancelable charCode clientX clientY ctrlKey currentTarget data detail eventPhase fromElement handler keyCode layerX layerY metaKey newValue offsetX offsetY pageX pageY prevValue relatedNode relatedTarget screenX screenY shiftKey srcElement target toElement view wheelDelta which".split(" "),
-fix:function(a){if(a[c.expando])return a;var b=a;a=c.Event(b);for(var d=this.props.length,e;d;){e=this.props[--d];a[e]=b[e]}if(!a.target)a.target=a.srcElement||t;if(a.target.nodeType===3)a.target=a.target.parentNode;if(!a.relatedTarget&&a.fromElement)a.relatedTarget=a.fromElement===a.target?a.toElement:a.fromElement;if(a.pageX==null&&a.clientX!=null){b=t.documentElement;d=t.body;a.pageX=a.clientX+(b&&b.scrollLeft||d&&d.scrollLeft||0)-(b&&b.clientLeft||d&&d.clientLeft||0);a.pageY=a.clientY+(b&&b.scrollTop||
-d&&d.scrollTop||0)-(b&&b.clientTop||d&&d.clientTop||0)}if(a.which==null&&(a.charCode!=null||a.keyCode!=null))a.which=a.charCode!=null?a.charCode:a.keyCode;if(!a.metaKey&&a.ctrlKey)a.metaKey=a.ctrlKey;if(!a.which&&a.button!==B)a.which=a.button&1?1:a.button&2?3:a.button&4?2:0;return a},guid:1E8,proxy:c.proxy,special:{ready:{setup:c.bindReady,teardown:c.noop},live:{add:function(a){c.event.add(this,Y(a.origType,a.selector),c.extend({},a,{handler:Ka,guid:a.handler.guid}))},remove:function(a){c.event.remove(this,
-Y(a.origType,a.selector),a)}},beforeunload:{setup:function(a,b,d){if(c.isWindow(this))this.onbeforeunload=d},teardown:function(a,b){if(this.onbeforeunload===b)this.onbeforeunload=null}}}};c.removeEvent=t.removeEventListener?function(a,b,d){a.removeEventListener&&a.removeEventListener(b,d,false)}:function(a,b,d){a.detachEvent&&a.detachEvent("on"+b,d)};c.Event=function(a){if(!this.preventDefault)return new c.Event(a);if(a&&a.type){this.originalEvent=a;this.type=a.type}else this.type=a;this.timeStamp=
-c.now();this[c.expando]=true};c.Event.prototype={preventDefault:function(){this.isDefaultPrevented=ca;var a=this.originalEvent;if(a)if(a.preventDefault)a.preventDefault();else a.returnValue=false},stopPropagation:function(){this.isPropagationStopped=ca;var a=this.originalEvent;if(a){a.stopPropagation&&a.stopPropagation();a.cancelBubble=true}},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=ca;this.stopPropagation()},isDefaultPrevented:U,isPropagationStopped:U,isImmediatePropagationStopped:U};
-var va=function(a){var b=a.relatedTarget;try{for(;b&&b!==this;)b=b.parentNode;if(b!==this){a.type=a.data;c.event.handle.apply(this,arguments)}}catch(d){}},wa=function(a){a.type=a.data;c.event.handle.apply(this,arguments)};c.each({mouseenter:"mouseover",mouseleave:"mouseout"},function(a,b){c.event.special[a]={setup:function(d){c.event.add(this,b,d&&d.selector?wa:va,a)},teardown:function(d){c.event.remove(this,b,d&&d.selector?wa:va)}}});if(!c.support.submitBubbles)c.event.special.submit={setup:function(){if(this.nodeName.toLowerCase()!==
-"form"){c.event.add(this,"click.specialSubmit",function(a){var b=a.target,d=b.type;if((d==="submit"||d==="image")&&c(b).closest("form").length){a.liveFired=B;return la("submit",this,arguments)}});c.event.add(this,"keypress.specialSubmit",function(a){var b=a.target,d=b.type;if((d==="text"||d==="password")&&c(b).closest("form").length&&a.keyCode===13){a.liveFired=B;return la("submit",this,arguments)}})}else return false},teardown:function(){c.event.remove(this,".specialSubmit")}};if(!c.support.changeBubbles){var V,
-xa=function(a){var b=a.type,d=a.value;if(b==="radio"||b==="checkbox")d=a.checked;else if(b==="select-multiple")d=a.selectedIndex>-1?c.map(a.options,function(e){return e.selected}).join("-"):"";else if(a.nodeName.toLowerCase()==="select")d=a.selectedIndex;return d},Z=function(a,b){var d=a.target,e,f;if(!(!ia.test(d.nodeName)||d.readOnly)){e=c.data(d,"_change_data");f=xa(d);if(a.type!=="focusout"||d.type!=="radio")c.data(d,"_change_data",f);if(!(e===B||f===e))if(e!=null||f){a.type="change";a.liveFired=
-B;return c.event.trigger(a,b,d)}}};c.event.special.change={filters:{focusout:Z,beforedeactivate:Z,click:function(a){var b=a.target,d=b.type;if(d==="radio"||d==="checkbox"||b.nodeName.toLowerCase()==="select")return Z.call(this,a)},keydown:function(a){var b=a.target,d=b.type;if(a.keyCode===13&&b.nodeName.toLowerCase()!=="textarea"||a.keyCode===32&&(d==="checkbox"||d==="radio")||d==="select-multiple")return Z.call(this,a)},beforeactivate:function(a){a=a.target;c.data(a,"_change_data",xa(a))}},setup:function(){if(this.type===
-"file")return false;for(var a in V)c.event.add(this,a+".specialChange",V[a]);return ia.test(this.nodeName)},teardown:function(){c.event.remove(this,".specialChange");return ia.test(this.nodeName)}};V=c.event.special.change.filters;V.focus=V.beforeactivate}t.addEventListener&&c.each({focus:"focusin",blur:"focusout"},function(a,b){function d(e){e=c.event.fix(e);e.type=b;return c.event.trigger(e,null,e.target)}c.event.special[b]={setup:function(){ua[b]++===0&&t.addEventListener(a,d,true)},teardown:function(){--ua[b]===
-0&&t.removeEventListener(a,d,true)}}});c.each(["bind","one"],function(a,b){c.fn[b]=function(d,e,f){if(typeof d==="object"){for(var h in d)this[b](h,e,d[h],f);return this}if(c.isFunction(e)||e===false){f=e;e=B}var l=b==="one"?c.proxy(f,function(o){c(this).unbind(o,l);return f.apply(this,arguments)}):f;if(d==="unload"&&b!=="one")this.one(d,e,f);else{h=0;for(var k=this.length;h<k;h++)c.event.add(this[h],d,l,e)}return this}});c.fn.extend({unbind:function(a,b){if(typeof a==="object"&&!a.preventDefault)for(var d in a)this.unbind(d,
-a[d]);else{d=0;for(var e=this.length;d<e;d++)c.event.remove(this[d],a,b)}return this},delegate:function(a,b,d,e){return this.live(b,d,e,a)},undelegate:function(a,b,d){return arguments.length===0?this.unbind("live"):this.die(b,null,d,a)},trigger:function(a,b){return this.each(function(){c.event.trigger(a,b,this)})},triggerHandler:function(a,b){if(this[0]){var d=c.Event(a);d.preventDefault();d.stopPropagation();c.event.trigger(d,b,this[0]);return d.result}},toggle:function(a){for(var b=arguments,d=
-1;d<b.length;)c.proxy(a,b[d++]);return this.click(c.proxy(a,function(e){var f=(c.data(this,"lastToggle"+a.guid)||0)%d;c.data(this,"lastToggle"+a.guid,f+1);e.preventDefault();return b[f].apply(this,arguments)||false}))},hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)}});var ya={focus:"focusin",blur:"focusout",mouseenter:"mouseover",mouseleave:"mouseout"};c.each(["live","die"],function(a,b){c.fn[b]=function(d,e,f,h){var l,k=0,o,x,r=h||this.selector;h=h?this:c(this.context);if(typeof d===
-"object"&&!d.preventDefault){for(l in d)h[b](l,e,d[l],r);return this}if(c.isFunction(e)){f=e;e=B}for(d=(d||"").split(" ");(l=d[k++])!=null;){o=X.exec(l);x="";if(o){x=o[0];l=l.replace(X,"")}if(l==="hover")d.push("mouseenter"+x,"mouseleave"+x);else{o=l;if(l==="focus"||l==="blur"){d.push(ya[l]+x);l+=x}else l=(ya[l]||l)+x;if(b==="live"){x=0;for(var A=h.length;x<A;x++)c.event.add(h[x],"live."+Y(l,r),{data:e,selector:r,handler:f,origType:l,origHandler:f,preType:o})}else h.unbind("live."+Y(l,r),f)}}return this}});
-c.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error".split(" "),function(a,b){c.fn[b]=function(d,e){if(e==null){e=d;d=null}return arguments.length>0?this.bind(b,d,e):this.trigger(b)};if(c.attrFn)c.attrFn[b]=true});E.attachEvent&&!E.addEventListener&&c(E).bind("unload",function(){for(var a in c.cache)if(c.cache[a].handle)try{c.event.remove(c.cache[a].handle.elem)}catch(b){}});
-(function(){function a(g,i,n,m,p,q){p=0;for(var u=m.length;p<u;p++){var y=m[p];if(y){var F=false;for(y=y[g];y;){if(y.sizcache===n){F=m[y.sizset];break}if(y.nodeType===1&&!q){y.sizcache=n;y.sizset=p}if(y.nodeName.toLowerCase()===i){F=y;break}y=y[g]}m[p]=F}}}function b(g,i,n,m,p,q){p=0;for(var u=m.length;p<u;p++){var y=m[p];if(y){var F=false;for(y=y[g];y;){if(y.sizcache===n){F=m[y.sizset];break}if(y.nodeType===1){if(!q){y.sizcache=n;y.sizset=p}if(typeof i!=="string"){if(y===i){F=true;break}}else if(k.filter(i,
-[y]).length>0){F=y;break}}y=y[g]}m[p]=F}}}var d=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,e=0,f=Object.prototype.toString,h=false,l=true;[0,0].sort(function(){l=false;return 0});var k=function(g,i,n,m){n=n||[];var p=i=i||t;if(i.nodeType!==1&&i.nodeType!==9)return[];if(!g||typeof g!=="string")return n;var q,u,y,F,M,N=true,O=k.isXML(i),D=[],R=g;do{d.exec("");if(q=d.exec(R)){R=q[3];D.push(q[1]);if(q[2]){F=q[3];
-break}}}while(q);if(D.length>1&&x.exec(g))if(D.length===2&&o.relative[D[0]])u=L(D[0]+D[1],i);else for(u=o.relative[D[0]]?[i]:k(D.shift(),i);D.length;){g=D.shift();if(o.relative[g])g+=D.shift();u=L(g,u)}else{if(!m&&D.length>1&&i.nodeType===9&&!O&&o.match.ID.test(D[0])&&!o.match.ID.test(D[D.length-1])){q=k.find(D.shift(),i,O);i=q.expr?k.filter(q.expr,q.set)[0]:q.set[0]}if(i){q=m?{expr:D.pop(),set:C(m)}:k.find(D.pop(),D.length===1&&(D[0]==="~"||D[0]==="+")&&i.parentNode?i.parentNode:i,O);u=q.expr?k.filter(q.expr,
-q.set):q.set;if(D.length>0)y=C(u);else N=false;for(;D.length;){q=M=D.pop();if(o.relative[M])q=D.pop();else M="";if(q==null)q=i;o.relative[M](y,q,O)}}else y=[]}y||(y=u);y||k.error(M||g);if(f.call(y)==="[object Array]")if(N)if(i&&i.nodeType===1)for(g=0;y[g]!=null;g++){if(y[g]&&(y[g]===true||y[g].nodeType===1&&k.contains(i,y[g])))n.push(u[g])}else for(g=0;y[g]!=null;g++)y[g]&&y[g].nodeType===1&&n.push(u[g]);else n.push.apply(n,y);else C(y,n);if(F){k(F,p,n,m);k.uniqueSort(n)}return n};k.uniqueSort=function(g){if(w){h=
-l;g.sort(w);if(h)for(var i=1;i<g.length;i++)g[i]===g[i-1]&&g.splice(i--,1)}return g};k.matches=function(g,i){return k(g,null,null,i)};k.matchesSelector=function(g,i){return k(i,null,null,[g]).length>0};k.find=function(g,i,n){var m;if(!g)return[];for(var p=0,q=o.order.length;p<q;p++){var u,y=o.order[p];if(u=o.leftMatch[y].exec(g)){var F=u[1];u.splice(1,1);if(F.substr(F.length-1)!=="\\"){u[1]=(u[1]||"").replace(/\\/g,"");m=o.find[y](u,i,n);if(m!=null){g=g.replace(o.match[y],"");break}}}}m||(m=i.getElementsByTagName("*"));
-return{set:m,expr:g}};k.filter=function(g,i,n,m){for(var p,q,u=g,y=[],F=i,M=i&&i[0]&&k.isXML(i[0]);g&&i.length;){for(var N in o.filter)if((p=o.leftMatch[N].exec(g))!=null&&p[2]){var O,D,R=o.filter[N];D=p[1];q=false;p.splice(1,1);if(D.substr(D.length-1)!=="\\"){if(F===y)y=[];if(o.preFilter[N])if(p=o.preFilter[N](p,F,n,y,m,M)){if(p===true)continue}else q=O=true;if(p)for(var j=0;(D=F[j])!=null;j++)if(D){O=R(D,p,j,F);var s=m^!!O;if(n&&O!=null)if(s)q=true;else F[j]=false;else if(s){y.push(D);q=true}}if(O!==
-B){n||(F=y);g=g.replace(o.match[N],"");if(!q)return[];break}}}if(g===u)if(q==null)k.error(g);else break;u=g}return F};k.error=function(g){throw"Syntax error, unrecognized expression: "+g;};var o=k.selectors={order:["ID","NAME","TAG"],match:{ID:/#((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,CLASS:/\.((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,NAME:/\[name=['"]*((?:[\w\u00c0-\uFFFF\-]|\\.)+)['"]*\]/,ATTR:/\[\s*((?:[\w\u00c0-\uFFFF\-]|\\.)+)\s*(?:(\S?=)\s*(['"]*)(.*?)\3|)\s*\]/,TAG:/^((?:[\w\u00c0-\uFFFF\*\-]|\\.)+)/,CHILD:/:(only|nth|last|first)-child(?:\((even|odd|[\dn+\-]*)\))?/,
-POS:/:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^\-]|$)/,PSEUDO:/:((?:[\w\u00c0-\uFFFF\-]|\\.)+)(?:\((['"]?)((?:\([^\)]+\)|[^\(\)]*)+)\2\))?/},leftMatch:{},attrMap:{"class":"className","for":"htmlFor"},attrHandle:{href:function(g){return g.getAttribute("href")}},relative:{"+":function(g,i){var n=typeof i==="string",m=n&&!/\W/.test(i);n=n&&!m;if(m)i=i.toLowerCase();m=0;for(var p=g.length,q;m<p;m++)if(q=g[m]){for(;(q=q.previousSibling)&&q.nodeType!==1;);g[m]=n||q&&q.nodeName.toLowerCase()===
-i?q||false:q===i}n&&k.filter(i,g,true)},">":function(g,i){var n,m=typeof i==="string",p=0,q=g.length;if(m&&!/\W/.test(i))for(i=i.toLowerCase();p<q;p++){if(n=g[p]){n=n.parentNode;g[p]=n.nodeName.toLowerCase()===i?n:false}}else{for(;p<q;p++)if(n=g[p])g[p]=m?n.parentNode:n.parentNode===i;m&&k.filter(i,g,true)}},"":function(g,i,n){var m,p=e++,q=b;if(typeof i==="string"&&!/\W/.test(i)){m=i=i.toLowerCase();q=a}q("parentNode",i,p,g,m,n)},"~":function(g,i,n){var m,p=e++,q=b;if(typeof i==="string"&&!/\W/.test(i)){m=
-i=i.toLowerCase();q=a}q("previousSibling",i,p,g,m,n)}},find:{ID:function(g,i,n){if(typeof i.getElementById!=="undefined"&&!n)return(g=i.getElementById(g[1]))&&g.parentNode?[g]:[]},NAME:function(g,i){if(typeof i.getElementsByName!=="undefined"){for(var n=[],m=i.getElementsByName(g[1]),p=0,q=m.length;p<q;p++)m[p].getAttribute("name")===g[1]&&n.push(m[p]);return n.length===0?null:n}},TAG:function(g,i){return i.getElementsByTagName(g[1])}},preFilter:{CLASS:function(g,i,n,m,p,q){g=" "+g[1].replace(/\\/g,
-"")+" ";if(q)return g;q=0;for(var u;(u=i[q])!=null;q++)if(u)if(p^(u.className&&(" "+u.className+" ").replace(/[\t\n]/g," ").indexOf(g)>=0))n||m.push(u);else if(n)i[q]=false;return false},ID:function(g){return g[1].replace(/\\/g,"")},TAG:function(g){return g[1].toLowerCase()},CHILD:function(g){if(g[1]==="nth"){var i=/(-?)(\d*)n((?:\+|-)?\d*)/.exec(g[2]==="even"&&"2n"||g[2]==="odd"&&"2n+1"||!/\D/.test(g[2])&&"0n+"+g[2]||g[2]);g[2]=i[1]+(i[2]||1)-0;g[3]=i[3]-0}g[0]=e++;return g},ATTR:function(g,i,n,
-m,p,q){i=g[1].replace(/\\/g,"");if(!q&&o.attrMap[i])g[1]=o.attrMap[i];if(g[2]==="~=")g[4]=" "+g[4]+" ";return g},PSEUDO:function(g,i,n,m,p){if(g[1]==="not")if((d.exec(g[3])||"").length>1||/^\w/.test(g[3]))g[3]=k(g[3],null,null,i);else{g=k.filter(g[3],i,n,true^p);n||m.push.apply(m,g);return false}else if(o.match.POS.test(g[0])||o.match.CHILD.test(g[0]))return true;return g},POS:function(g){g.unshift(true);return g}},filters:{enabled:function(g){return g.disabled===false&&g.type!=="hidden"},disabled:function(g){return g.disabled===
-true},checked:function(g){return g.checked===true},selected:function(g){return g.selected===true},parent:function(g){return!!g.firstChild},empty:function(g){return!g.firstChild},has:function(g,i,n){return!!k(n[3],g).length},header:function(g){return/h\d/i.test(g.nodeName)},text:function(g){return"text"===g.type},radio:function(g){return"radio"===g.type},checkbox:function(g){return"checkbox"===g.type},file:function(g){return"file"===g.type},password:function(g){return"password"===g.type},submit:function(g){return"submit"===
-g.type},image:function(g){return"image"===g.type},reset:function(g){return"reset"===g.type},button:function(g){return"button"===g.type||g.nodeName.toLowerCase()==="button"},input:function(g){return/input|select|textarea|button/i.test(g.nodeName)}},setFilters:{first:function(g,i){return i===0},last:function(g,i,n,m){return i===m.length-1},even:function(g,i){return i%2===0},odd:function(g,i){return i%2===1},lt:function(g,i,n){return i<n[3]-0},gt:function(g,i,n){return i>n[3]-0},nth:function(g,i,n){return n[3]-
-0===i},eq:function(g,i,n){return n[3]-0===i}},filter:{PSEUDO:function(g,i,n,m){var p=i[1],q=o.filters[p];if(q)return q(g,n,i,m);else if(p==="contains")return(g.textContent||g.innerText||k.getText([g])||"").indexOf(i[3])>=0;else if(p==="not"){i=i[3];n=0;for(m=i.length;n<m;n++)if(i[n]===g)return false;return true}else k.error("Syntax error, unrecognized expression: "+p)},CHILD:function(g,i){var n=i[1],m=g;switch(n){case "only":case "first":for(;m=m.previousSibling;)if(m.nodeType===1)return false;if(n===
-"first")return true;m=g;case "last":for(;m=m.nextSibling;)if(m.nodeType===1)return false;return true;case "nth":n=i[2];var p=i[3];if(n===1&&p===0)return true;var q=i[0],u=g.parentNode;if(u&&(u.sizcache!==q||!g.nodeIndex)){var y=0;for(m=u.firstChild;m;m=m.nextSibling)if(m.nodeType===1)m.nodeIndex=++y;u.sizcache=q}m=g.nodeIndex-p;return n===0?m===0:m%n===0&&m/n>=0}},ID:function(g,i){return g.nodeType===1&&g.getAttribute("id")===i},TAG:function(g,i){return i==="*"&&g.nodeType===1||g.nodeName.toLowerCase()===
-i},CLASS:function(g,i){return(" "+(g.className||g.getAttribute("class"))+" ").indexOf(i)>-1},ATTR:function(g,i){var n=i[1];n=o.attrHandle[n]?o.attrHandle[n](g):g[n]!=null?g[n]:g.getAttribute(n);var m=n+"",p=i[2],q=i[4];return n==null?p==="!=":p==="="?m===q:p==="*="?m.indexOf(q)>=0:p==="~="?(" "+m+" ").indexOf(q)>=0:!q?m&&n!==false:p==="!="?m!==q:p==="^="?m.indexOf(q)===0:p==="$="?m.substr(m.length-q.length)===q:p==="|="?m===q||m.substr(0,q.length+1)===q+"-":false},POS:function(g,i,n,m){var p=o.setFilters[i[2]];
-if(p)return p(g,n,i,m)}}},x=o.match.POS,r=function(g,i){return"\\"+(i-0+1)},A;for(A in o.match){o.match[A]=RegExp(o.match[A].source+/(?![^\[]*\])(?![^\(]*\))/.source);o.leftMatch[A]=RegExp(/(^(?:.|\r|\n)*?)/.source+o.match[A].source.replace(/\\(\d+)/g,r))}var C=function(g,i){g=Array.prototype.slice.call(g,0);if(i){i.push.apply(i,g);return i}return g};try{Array.prototype.slice.call(t.documentElement.childNodes,0)}catch(J){C=function(g,i){var n=0,m=i||[];if(f.call(g)==="[object Array]")Array.prototype.push.apply(m,
-g);else if(typeof g.length==="number")for(var p=g.length;n<p;n++)m.push(g[n]);else for(;g[n];n++)m.push(g[n]);return m}}var w,I;if(t.documentElement.compareDocumentPosition)w=function(g,i){if(g===i){h=true;return 0}if(!g.compareDocumentPosition||!i.compareDocumentPosition)return g.compareDocumentPosition?-1:1;return g.compareDocumentPosition(i)&4?-1:1};else{w=function(g,i){var n,m,p=[],q=[];n=g.parentNode;m=i.parentNode;var u=n;if(g===i){h=true;return 0}else if(n===m)return I(g,i);else if(n){if(!m)return 1}else return-1;
-for(;u;){p.unshift(u);u=u.parentNode}for(u=m;u;){q.unshift(u);u=u.parentNode}n=p.length;m=q.length;for(u=0;u<n&&u<m;u++)if(p[u]!==q[u])return I(p[u],q[u]);return u===n?I(g,q[u],-1):I(p[u],i,1)};I=function(g,i,n){if(g===i)return n;for(g=g.nextSibling;g;){if(g===i)return-1;g=g.nextSibling}return 1}}k.getText=function(g){for(var i="",n,m=0;g[m];m++){n=g[m];if(n.nodeType===3||n.nodeType===4)i+=n.nodeValue;else if(n.nodeType!==8)i+=k.getText(n.childNodes)}return i};(function(){var g=t.createElement("div"),
-i="script"+(new Date).getTime(),n=t.documentElement;g.innerHTML="<a name='"+i+"'/>";n.insertBefore(g,n.firstChild);if(t.getElementById(i)){o.find.ID=function(m,p,q){if(typeof p.getElementById!=="undefined"&&!q)return(p=p.getElementById(m[1]))?p.id===m[1]||typeof p.getAttributeNode!=="undefined"&&p.getAttributeNode("id").nodeValue===m[1]?[p]:B:[]};o.filter.ID=function(m,p){var q=typeof m.getAttributeNode!=="undefined"&&m.getAttributeNode("id");return m.nodeType===1&&q&&q.nodeValue===p}}n.removeChild(g);
-n=g=null})();(function(){var g=t.createElement("div");g.appendChild(t.createComment(""));if(g.getElementsByTagName("*").length>0)o.find.TAG=function(i,n){var m=n.getElementsByTagName(i[1]);if(i[1]==="*"){for(var p=[],q=0;m[q];q++)m[q].nodeType===1&&p.push(m[q]);m=p}return m};g.innerHTML="<a href='#'></a>";if(g.firstChild&&typeof g.firstChild.getAttribute!=="undefined"&&g.firstChild.getAttribute("href")!=="#")o.attrHandle.href=function(i){return i.getAttribute("href",2)};g=null})();t.querySelectorAll&&
-function(){var g=k,i=t.createElement("div");i.innerHTML="<p class='TEST'></p>";if(!(i.querySelectorAll&&i.querySelectorAll(".TEST").length===0)){k=function(m,p,q,u){p=p||t;m=m.replace(/\=\s*([^'"\]]*)\s*\]/g,"='$1']");if(!u&&!k.isXML(p))if(p.nodeType===9)try{return C(p.querySelectorAll(m),q)}catch(y){}else if(p.nodeType===1&&p.nodeName.toLowerCase()!=="object"){var F=p.getAttribute("id"),M=F||"__sizzle__";F||p.setAttribute("id",M);try{return C(p.querySelectorAll("#"+M+" "+m),q)}catch(N){}finally{F||
-p.removeAttribute("id")}}return g(m,p,q,u)};for(var n in g)k[n]=g[n];i=null}}();(function(){var g=t.documentElement,i=g.matchesSelector||g.mozMatchesSelector||g.webkitMatchesSelector||g.msMatchesSelector,n=false;try{i.call(t.documentElement,"[test!='']:sizzle")}catch(m){n=true}if(i)k.matchesSelector=function(p,q){q=q.replace(/\=\s*([^'"\]]*)\s*\]/g,"='$1']");if(!k.isXML(p))try{if(n||!o.match.PSEUDO.test(q)&&!/!=/.test(q))return i.call(p,q)}catch(u){}return k(q,null,null,[p]).length>0}})();(function(){var g=
-t.createElement("div");g.innerHTML="<div class='test e'></div><div class='test'></div>";if(!(!g.getElementsByClassName||g.getElementsByClassName("e").length===0)){g.lastChild.className="e";if(g.getElementsByClassName("e").length!==1){o.order.splice(1,0,"CLASS");o.find.CLASS=function(i,n,m){if(typeof n.getElementsByClassName!=="undefined"&&!m)return n.getElementsByClassName(i[1])};g=null}}})();k.contains=t.documentElement.contains?function(g,i){return g!==i&&(g.contains?g.contains(i):true)}:t.documentElement.compareDocumentPosition?
-function(g,i){return!!(g.compareDocumentPosition(i)&16)}:function(){return false};k.isXML=function(g){return(g=(g?g.ownerDocument||g:0).documentElement)?g.nodeName!=="HTML":false};var L=function(g,i){for(var n,m=[],p="",q=i.nodeType?[i]:i;n=o.match.PSEUDO.exec(g);){p+=n[0];g=g.replace(o.match.PSEUDO,"")}g=o.relative[g]?g+"*":g;n=0;for(var u=q.length;n<u;n++)k(g,q[n],m);return k.filter(p,m)};c.find=k;c.expr=k.selectors;c.expr[":"]=c.expr.filters;c.unique=k.uniqueSort;c.text=k.getText;c.isXMLDoc=k.isXML;
-c.contains=k.contains})();var Za=/Until$/,$a=/^(?:parents|prevUntil|prevAll)/,ab=/,/,Na=/^.[^:#\[\.,]*$/,bb=Array.prototype.slice,cb=c.expr.match.POS;c.fn.extend({find:function(a){for(var b=this.pushStack("","find",a),d=0,e=0,f=this.length;e<f;e++){d=b.length;c.find(a,this[e],b);if(e>0)for(var h=d;h<b.length;h++)for(var l=0;l<d;l++)if(b[l]===b[h]){b.splice(h--,1);break}}return b},has:function(a){var b=c(a);return this.filter(function(){for(var d=0,e=b.length;d<e;d++)if(c.contains(this,b[d]))return true})},
-not:function(a){return this.pushStack(ma(this,a,false),"not",a)},filter:function(a){return this.pushStack(ma(this,a,true),"filter",a)},is:function(a){return!!a&&c.filter(a,this).length>0},closest:function(a,b){var d=[],e,f,h=this[0];if(c.isArray(a)){var l,k={},o=1;if(h&&a.length){e=0;for(f=a.length;e<f;e++){l=a[e];k[l]||(k[l]=c.expr.match.POS.test(l)?c(l,b||this.context):l)}for(;h&&h.ownerDocument&&h!==b;){for(l in k){e=k[l];if(e.jquery?e.index(h)>-1:c(h).is(e))d.push({selector:l,elem:h,level:o})}h=
-h.parentNode;o++}}return d}l=cb.test(a)?c(a,b||this.context):null;e=0;for(f=this.length;e<f;e++)for(h=this[e];h;)if(l?l.index(h)>-1:c.find.matchesSelector(h,a)){d.push(h);break}else{h=h.parentNode;if(!h||!h.ownerDocument||h===b)break}d=d.length>1?c.unique(d):d;return this.pushStack(d,"closest",a)},index:function(a){if(!a||typeof a==="string")return c.inArray(this[0],a?c(a):this.parent().children());return c.inArray(a.jquery?a[0]:a,this)},add:function(a,b){var d=typeof a==="string"?c(a,b||this.context):
-c.makeArray(a),e=c.merge(this.get(),d);return this.pushStack(!d[0]||!d[0].parentNode||d[0].parentNode.nodeType===11||!e[0]||!e[0].parentNode||e[0].parentNode.nodeType===11?e:c.unique(e))},andSelf:function(){return this.add(this.prevObject)}});c.each({parent:function(a){return(a=a.parentNode)&&a.nodeType!==11?a:null},parents:function(a){return c.dir(a,"parentNode")},parentsUntil:function(a,b,d){return c.dir(a,"parentNode",d)},next:function(a){return c.nth(a,2,"nextSibling")},prev:function(a){return c.nth(a,
-2,"previousSibling")},nextAll:function(a){return c.dir(a,"nextSibling")},prevAll:function(a){return c.dir(a,"previousSibling")},nextUntil:function(a,b,d){return c.dir(a,"nextSibling",d)},prevUntil:function(a,b,d){return c.dir(a,"previousSibling",d)},siblings:function(a){return c.sibling(a.parentNode.firstChild,a)},children:function(a){return c.sibling(a.firstChild)},contents:function(a){return c.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:c.makeArray(a.childNodes)}},function(a,
-b){c.fn[a]=function(d,e){var f=c.map(this,b,d);Za.test(a)||(e=d);if(e&&typeof e==="string")f=c.filter(e,f);f=this.length>1?c.unique(f):f;if((this.length>1||ab.test(e))&&$a.test(a))f=f.reverse();return this.pushStack(f,a,bb.call(arguments).join(","))}});c.extend({filter:function(a,b,d){if(d)a=":not("+a+")";return b.length===1?c.find.matchesSelector(b[0],a)?[b[0]]:[]:c.find.matches(a,b)},dir:function(a,b,d){var e=[];for(a=a[b];a&&a.nodeType!==9&&(d===B||a.nodeType!==1||!c(a).is(d));){a.nodeType===1&&
-e.push(a);a=a[b]}return e},nth:function(a,b,d){b=b||1;for(var e=0;a;a=a[d])if(a.nodeType===1&&++e===b)break;return a},sibling:function(a,b){for(var d=[];a;a=a.nextSibling)a.nodeType===1&&a!==b&&d.push(a);return d}});var za=/ jQuery\d+="(?:\d+|null)"/g,$=/^\s+/,Aa=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,Ba=/<([\w:]+)/,db=/<tbody/i,eb=/<|&#?\w+;/,Ca=/<(?:script|object|embed|option|style)/i,Da=/checked\s*(?:[^=]|=\s*.checked.)/i,fb=/\=([^="'>\s]+\/)>/g,P={option:[1,
-"<select multiple='multiple'>","</select>"],legend:[1,"<fieldset>","</fieldset>"],thead:[1,"<table>","</table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],col:[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"],area:[1,"<map>","</map>"],_default:[0,"",""]};P.optgroup=P.option;P.tbody=P.tfoot=P.colgroup=P.caption=P.thead;P.th=P.td;if(!c.support.htmlSerialize)P._default=[1,"div<div>","</div>"];c.fn.extend({text:function(a){if(c.isFunction(a))return this.each(function(b){var d=
-c(this);d.text(a.call(this,b,d.text()))});if(typeof a!=="object"&&a!==B)return this.empty().append((this[0]&&this[0].ownerDocument||t).createTextNode(a));return c.text(this)},wrapAll:function(a){if(c.isFunction(a))return this.each(function(d){c(this).wrapAll(a.call(this,d))});if(this[0]){var b=c(a,this[0].ownerDocument).eq(0).clone(true);this[0].parentNode&&b.insertBefore(this[0]);b.map(function(){for(var d=this;d.firstChild&&d.firstChild.nodeType===1;)d=d.firstChild;return d}).append(this)}return this},
-wrapInner:function(a){if(c.isFunction(a))return this.each(function(b){c(this).wrapInner(a.call(this,b))});return this.each(function(){var b=c(this),d=b.contents();d.length?d.wrapAll(a):b.append(a)})},wrap:function(a){return this.each(function(){c(this).wrapAll(a)})},unwrap:function(){return this.parent().each(function(){c.nodeName(this,"body")||c(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,true,function(a){this.nodeType===1&&this.appendChild(a)})},
-prepend:function(){return this.domManip(arguments,true,function(a){this.nodeType===1&&this.insertBefore(a,this.firstChild)})},before:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,false,function(b){this.parentNode.insertBefore(b,this)});else if(arguments.length){var a=c(arguments[0]);a.push.apply(a,this.toArray());return this.pushStack(a,"before",arguments)}},after:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,false,function(b){this.parentNode.insertBefore(b,
-this.nextSibling)});else if(arguments.length){var a=this.pushStack(this,"after",arguments);a.push.apply(a,c(arguments[0]).toArray());return a}},remove:function(a,b){for(var d=0,e;(e=this[d])!=null;d++)if(!a||c.filter(a,[e]).length){if(!b&&e.nodeType===1){c.cleanData(e.getElementsByTagName("*"));c.cleanData([e])}e.parentNode&&e.parentNode.removeChild(e)}return this},empty:function(){for(var a=0,b;(b=this[a])!=null;a++)for(b.nodeType===1&&c.cleanData(b.getElementsByTagName("*"));b.firstChild;)b.removeChild(b.firstChild);
-return this},clone:function(a){var b=this.map(function(){if(!c.support.noCloneEvent&&!c.isXMLDoc(this)){var d=this.outerHTML,e=this.ownerDocument;if(!d){d=e.createElement("div");d.appendChild(this.cloneNode(true));d=d.innerHTML}return c.clean([d.replace(za,"").replace(fb,'="$1">').replace($,"")],e)[0]}else return this.cloneNode(true)});if(a===true){na(this,b);na(this.find("*"),b.find("*"))}return b},html:function(a){if(a===B)return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(za,""):null;
-else if(typeof a==="string"&&!Ca.test(a)&&(c.support.leadingWhitespace||!$.test(a))&&!P[(Ba.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(Aa,"<$1></$2>");try{for(var b=0,d=this.length;b<d;b++)if(this[b].nodeType===1){c.cleanData(this[b].getElementsByTagName("*"));this[b].innerHTML=a}}catch(e){this.empty().append(a)}}else c.isFunction(a)?this.each(function(f){var h=c(this);h.html(a.call(this,f,h.html()))}):this.empty().append(a);return this},replaceWith:function(a){if(this[0]&&this[0].parentNode){if(c.isFunction(a))return this.each(function(b){var d=
-c(this),e=d.html();d.replaceWith(a.call(this,b,e))});if(typeof a!=="string")a=c(a).detach();return this.each(function(){var b=this.nextSibling,d=this.parentNode;c(this).remove();b?c(b).before(a):c(d).append(a)})}else return this.pushStack(c(c.isFunction(a)?a():a),"replaceWith",a)},detach:function(a){return this.remove(a,true)},domManip:function(a,b,d){var e,f,h,l=a[0],k=[];if(!c.support.checkClone&&arguments.length===3&&typeof l==="string"&&Da.test(l))return this.each(function(){c(this).domManip(a,
-b,d,true)});if(c.isFunction(l))return this.each(function(x){var r=c(this);a[0]=l.call(this,x,b?r.html():B);r.domManip(a,b,d)});if(this[0]){e=l&&l.parentNode;e=c.support.parentNode&&e&&e.nodeType===11&&e.childNodes.length===this.length?{fragment:e}:c.buildFragment(a,this,k);h=e.fragment;if(f=h.childNodes.length===1?h=h.firstChild:h.firstChild){b=b&&c.nodeName(f,"tr");f=0;for(var o=this.length;f<o;f++)d.call(b?c.nodeName(this[f],"table")?this[f].getElementsByTagName("tbody")[0]||this[f].appendChild(this[f].ownerDocument.createElement("tbody")):
-this[f]:this[f],f>0||e.cacheable||this.length>1?h.cloneNode(true):h)}k.length&&c.each(k,Oa)}return this}});c.buildFragment=function(a,b,d){var e,f,h;b=b&&b[0]?b[0].ownerDocument||b[0]:t;if(a.length===1&&typeof a[0]==="string"&&a[0].length<512&&b===t&&!Ca.test(a[0])&&(c.support.checkClone||!Da.test(a[0]))){f=true;if(h=c.fragments[a[0]])if(h!==1)e=h}if(!e){e=b.createDocumentFragment();c.clean(a,b,e,d)}if(f)c.fragments[a[0]]=h?e:1;return{fragment:e,cacheable:f}};c.fragments={};c.each({appendTo:"append",
-prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){c.fn[a]=function(d){var e=[];d=c(d);var f=this.length===1&&this[0].parentNode;if(f&&f.nodeType===11&&f.childNodes.length===1&&d.length===1){d[b](this[0]);return this}else{f=0;for(var h=d.length;f<h;f++){var l=(f>0?this.clone(true):this).get();c(d[f])[b](l);e=e.concat(l)}return this.pushStack(e,a,d.selector)}}});c.extend({clean:function(a,b,d,e){b=b||t;if(typeof b.createElement==="undefined")b=b.ownerDocument||
-b[0]&&b[0].ownerDocument||t;for(var f=[],h=0,l;(l=a[h])!=null;h++){if(typeof l==="number")l+="";if(l){if(typeof l==="string"&&!eb.test(l))l=b.createTextNode(l);else if(typeof l==="string"){l=l.replace(Aa,"<$1></$2>");var k=(Ba.exec(l)||["",""])[1].toLowerCase(),o=P[k]||P._default,x=o[0],r=b.createElement("div");for(r.innerHTML=o[1]+l+o[2];x--;)r=r.lastChild;if(!c.support.tbody){x=db.test(l);k=k==="table"&&!x?r.firstChild&&r.firstChild.childNodes:o[1]==="<table>"&&!x?r.childNodes:[];for(o=k.length-
-1;o>=0;--o)c.nodeName(k[o],"tbody")&&!k[o].childNodes.length&&k[o].parentNode.removeChild(k[o])}!c.support.leadingWhitespace&&$.test(l)&&r.insertBefore(b.createTextNode($.exec(l)[0]),r.firstChild);l=r.childNodes}if(l.nodeType)f.push(l);else f=c.merge(f,l)}}if(d)for(h=0;f[h];h++)if(e&&c.nodeName(f[h],"script")&&(!f[h].type||f[h].type.toLowerCase()==="text/javascript"))e.push(f[h].parentNode?f[h].parentNode.removeChild(f[h]):f[h]);else{f[h].nodeType===1&&f.splice.apply(f,[h+1,0].concat(c.makeArray(f[h].getElementsByTagName("script"))));
-d.appendChild(f[h])}return f},cleanData:function(a){for(var b,d,e=c.cache,f=c.event.special,h=c.support.deleteExpando,l=0,k;(k=a[l])!=null;l++)if(!(k.nodeName&&c.noData[k.nodeName.toLowerCase()]))if(d=k[c.expando]){if((b=e[d])&&b.events)for(var o in b.events)f[o]?c.event.remove(k,o):c.removeEvent(k,o,b.handle);if(h)delete k[c.expando];else k.removeAttribute&&k.removeAttribute(c.expando);delete e[d]}}});var Ea=/alpha\([^)]*\)/i,gb=/opacity=([^)]*)/,hb=/-([a-z])/ig,ib=/([A-Z])/g,Fa=/^-?\d+(?:px)?$/i,
-jb=/^-?\d/,kb={position:"absolute",visibility:"hidden",display:"block"},Pa=["Left","Right"],Qa=["Top","Bottom"],W,Ga,aa,lb=function(a,b){return b.toUpperCase()};c.fn.css=function(a,b){if(arguments.length===2&&b===B)return this;return c.access(this,a,b,true,function(d,e,f){return f!==B?c.style(d,e,f):c.css(d,e)})};c.extend({cssHooks:{opacity:{get:function(a,b){if(b){var d=W(a,"opacity","opacity");return d===""?"1":d}else return a.style.opacity}}},cssNumber:{zIndex:true,fontWeight:true,opacity:true,
-zoom:true,lineHeight:true},cssProps:{"float":c.support.cssFloat?"cssFloat":"styleFloat"},style:function(a,b,d,e){if(!(!a||a.nodeType===3||a.nodeType===8||!a.style)){var f,h=c.camelCase(b),l=a.style,k=c.cssHooks[h];b=c.cssProps[h]||h;if(d!==B){if(!(typeof d==="number"&&isNaN(d)||d==null)){if(typeof d==="number"&&!c.cssNumber[h])d+="px";if(!k||!("set"in k)||(d=k.set(a,d))!==B)try{l[b]=d}catch(o){}}}else{if(k&&"get"in k&&(f=k.get(a,false,e))!==B)return f;return l[b]}}},css:function(a,b,d){var e,f=c.camelCase(b),
-h=c.cssHooks[f];b=c.cssProps[f]||f;if(h&&"get"in h&&(e=h.get(a,true,d))!==B)return e;else if(W)return W(a,b,f)},swap:function(a,b,d){var e={},f;for(f in b){e[f]=a.style[f];a.style[f]=b[f]}d.call(a);for(f in b)a.style[f]=e[f]},camelCase:function(a){return a.replace(hb,lb)}});c.curCSS=c.css;c.each(["height","width"],function(a,b){c.cssHooks[b]={get:function(d,e,f){var h;if(e){if(d.offsetWidth!==0)h=oa(d,b,f);else c.swap(d,kb,function(){h=oa(d,b,f)});if(h<=0){h=W(d,b,b);if(h==="0px"&&aa)h=aa(d,b,b);
-if(h!=null)return h===""||h==="auto"?"0px":h}if(h<0||h==null){h=d.style[b];return h===""||h==="auto"?"0px":h}return typeof h==="string"?h:h+"px"}},set:function(d,e){if(Fa.test(e)){e=parseFloat(e);if(e>=0)return e+"px"}else return e}}});if(!c.support.opacity)c.cssHooks.opacity={get:function(a,b){return gb.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||"")?parseFloat(RegExp.$1)/100+"":b?"1":""},set:function(a,b){var d=a.style;d.zoom=1;var e=c.isNaN(b)?"":"alpha(opacity="+b*100+")",f=
-d.filter||"";d.filter=Ea.test(f)?f.replace(Ea,e):d.filter+" "+e}};if(t.defaultView&&t.defaultView.getComputedStyle)Ga=function(a,b,d){var e;d=d.replace(ib,"-$1").toLowerCase();if(!(b=a.ownerDocument.defaultView))return B;if(b=b.getComputedStyle(a,null)){e=b.getPropertyValue(d);if(e===""&&!c.contains(a.ownerDocument.documentElement,a))e=c.style(a,d)}return e};if(t.documentElement.currentStyle)aa=function(a,b){var d,e,f=a.currentStyle&&a.currentStyle[b],h=a.style;if(!Fa.test(f)&&jb.test(f)){d=h.left;
-e=a.runtimeStyle.left;a.runtimeStyle.left=a.currentStyle.left;h.left=b==="fontSize"?"1em":f||0;f=h.pixelLeft+"px";h.left=d;a.runtimeStyle.left=e}return f===""?"auto":f};W=Ga||aa;if(c.expr&&c.expr.filters){c.expr.filters.hidden=function(a){var b=a.offsetHeight;return a.offsetWidth===0&&b===0||!c.support.reliableHiddenOffsets&&(a.style.display||c.css(a,"display"))==="none"};c.expr.filters.visible=function(a){return!c.expr.filters.hidden(a)}}var mb=c.now(),nb=/<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi,
-ob=/^(?:select|textarea)/i,pb=/^(?:color|date|datetime|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,qb=/^(?:GET|HEAD)$/,Ra=/\[\]$/,T=/\=\?(&|$)/,ja=/\?/,rb=/([?&])_=[^&]*/,sb=/^(\w+:)?\/\/([^\/?#]+)/,tb=/%20/g,ub=/#.*$/,Ha=c.fn.load;c.fn.extend({load:function(a,b,d){if(typeof a!=="string"&&Ha)return Ha.apply(this,arguments);else if(!this.length)return this;var e=a.indexOf(" ");if(e>=0){var f=a.slice(e,a.length);a=a.slice(0,e)}e="GET";if(b)if(c.isFunction(b)){d=b;b=null}else if(typeof b===
-"object"){b=c.param(b,c.ajaxSettings.traditional);e="POST"}var h=this;c.ajax({url:a,type:e,dataType:"html",data:b,complete:function(l,k){if(k==="success"||k==="notmodified")h.html(f?c("<div>").append(l.responseText.replace(nb,"")).find(f):l.responseText);d&&h.each(d,[l.responseText,k,l])}});return this},serialize:function(){return c.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?c.makeArray(this.elements):this}).filter(function(){return this.name&&
-!this.disabled&&(this.checked||ob.test(this.nodeName)||pb.test(this.type))}).map(function(a,b){var d=c(this).val();return d==null?null:c.isArray(d)?c.map(d,function(e){return{name:b.name,value:e}}):{name:b.name,value:d}}).get()}});c.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(a,b){c.fn[b]=function(d){return this.bind(b,d)}});c.extend({get:function(a,b,d,e){if(c.isFunction(b)){e=e||d;d=b;b=null}return c.ajax({type:"GET",url:a,data:b,success:d,dataType:e})},
-getScript:function(a,b){return c.get(a,null,b,"script")},getJSON:function(a,b,d){return c.get(a,b,d,"json")},post:function(a,b,d,e){if(c.isFunction(b)){e=e||d;d=b;b={}}return c.ajax({type:"POST",url:a,data:b,success:d,dataType:e})},ajaxSetup:function(a){c.extend(c.ajaxSettings,a)},ajaxSettings:{url:location.href,global:true,type:"GET",contentType:"application/x-www-form-urlencoded",processData:true,async:true,xhr:function(){return new E.XMLHttpRequest},accepts:{xml:"application/xml, text/xml",html:"text/html",
-script:"text/javascript, application/javascript",json:"application/json, text/javascript",text:"text/plain",_default:"*/*"}},ajax:function(a){var b=c.extend(true,{},c.ajaxSettings,a),d,e,f,h=b.type.toUpperCase(),l=qb.test(h);b.url=b.url.replace(ub,"");b.context=a&&a.context!=null?a.context:b;if(b.data&&b.processData&&typeof b.data!=="string")b.data=c.param(b.data,b.traditional);if(b.dataType==="jsonp"){if(h==="GET")T.test(b.url)||(b.url+=(ja.test(b.url)?"&":"?")+(b.jsonp||"callback")+"=?");else if(!b.data||
-!T.test(b.data))b.data=(b.data?b.data+"&":"")+(b.jsonp||"callback")+"=?";b.dataType="json"}if(b.dataType==="json"&&(b.data&&T.test(b.data)||T.test(b.url))){d=b.jsonpCallback||"jsonp"+mb++;if(b.data)b.data=(b.data+"").replace(T,"="+d+"$1");b.url=b.url.replace(T,"="+d+"$1");b.dataType="script";var k=E[d];E[d]=function(m){if(c.isFunction(k))k(m);else{E[d]=B;try{delete E[d]}catch(p){}}f=m;c.handleSuccess(b,w,e,f);c.handleComplete(b,w,e,f);r&&r.removeChild(A)}}if(b.dataType==="script"&&b.cache===null)b.cache=
-false;if(b.cache===false&&l){var o=c.now(),x=b.url.replace(rb,"$1_="+o);b.url=x+(x===b.url?(ja.test(b.url)?"&":"?")+"_="+o:"")}if(b.data&&l)b.url+=(ja.test(b.url)?"&":"?")+b.data;b.global&&c.active++===0&&c.event.trigger("ajaxStart");o=(o=sb.exec(b.url))&&(o[1]&&o[1].toLowerCase()!==location.protocol||o[2].toLowerCase()!==location.host);if(b.dataType==="script"&&h==="GET"&&o){var r=t.getElementsByTagName("head")[0]||t.documentElement,A=t.createElement("script");if(b.scriptCharset)A.charset=b.scriptCharset;
-A.src=b.url;if(!d){var C=false;A.onload=A.onreadystatechange=function(){if(!C&&(!this.readyState||this.readyState==="loaded"||this.readyState==="complete")){C=true;c.handleSuccess(b,w,e,f);c.handleComplete(b,w,e,f);A.onload=A.onreadystatechange=null;r&&A.parentNode&&r.removeChild(A)}}}r.insertBefore(A,r.firstChild);return B}var J=false,w=b.xhr();if(w){b.username?w.open(h,b.url,b.async,b.username,b.password):w.open(h,b.url,b.async);try{if(b.data!=null&&!l||a&&a.contentType)w.setRequestHeader("Content-Type",
-b.contentType);if(b.ifModified){c.lastModified[b.url]&&w.setRequestHeader("If-Modified-Since",c.lastModified[b.url]);c.etag[b.url]&&w.setRequestHeader("If-None-Match",c.etag[b.url])}o||w.setRequestHeader("X-Requested-With","XMLHttpRequest");w.setRequestHeader("Accept",b.dataType&&b.accepts[b.dataType]?b.accepts[b.dataType]+", */*; q=0.01":b.accepts._default)}catch(I){}if(b.beforeSend&&b.beforeSend.call(b.context,w,b)===false){b.global&&c.active--===1&&c.event.trigger("ajaxStop");w.abort();return false}b.global&&
-c.triggerGlobal(b,"ajaxSend",[w,b]);var L=w.onreadystatechange=function(m){if(!w||w.readyState===0||m==="abort"){J||c.handleComplete(b,w,e,f);J=true;if(w)w.onreadystatechange=c.noop}else if(!J&&w&&(w.readyState===4||m==="timeout")){J=true;w.onreadystatechange=c.noop;e=m==="timeout"?"timeout":!c.httpSuccess(w)?"error":b.ifModified&&c.httpNotModified(w,b.url)?"notmodified":"success";var p;if(e==="success")try{f=c.httpData(w,b.dataType,b)}catch(q){e="parsererror";p=q}if(e==="success"||e==="notmodified")d||
-c.handleSuccess(b,w,e,f);else c.handleError(b,w,e,p);d||c.handleComplete(b,w,e,f);m==="timeout"&&w.abort();if(b.async)w=null}};try{var g=w.abort;w.abort=function(){w&&Function.prototype.call.call(g,w);L("abort")}}catch(i){}b.async&&b.timeout>0&&setTimeout(function(){w&&!J&&L("timeout")},b.timeout);try{w.send(l||b.data==null?null:b.data)}catch(n){c.handleError(b,w,null,n);c.handleComplete(b,w,e,f)}b.async||L();return w}},param:function(a,b){var d=[],e=function(h,l){l=c.isFunction(l)?l():l;d[d.length]=
-encodeURIComponent(h)+"="+encodeURIComponent(l)};if(b===B)b=c.ajaxSettings.traditional;if(c.isArray(a)||a.jquery)c.each(a,function(){e(this.name,this.value)});else for(var f in a)da(f,a[f],b,e);return d.join("&").replace(tb,"+")}});c.extend({active:0,lastModified:{},etag:{},handleError:function(a,b,d,e){a.error&&a.error.call(a.context,b,d,e);a.global&&c.triggerGlobal(a,"ajaxError",[b,a,e])},handleSuccess:function(a,b,d,e){a.success&&a.success.call(a.context,e,d,b);a.global&&c.triggerGlobal(a,"ajaxSuccess",
-[b,a])},handleComplete:function(a,b,d){a.complete&&a.complete.call(a.context,b,d);a.global&&c.triggerGlobal(a,"ajaxComplete",[b,a]);a.global&&c.active--===1&&c.event.trigger("ajaxStop")},triggerGlobal:function(a,b,d){(a.context&&a.context.url==null?c(a.context):c.event).trigger(b,d)},httpSuccess:function(a){try{return!a.status&&location.protocol==="file:"||a.status>=200&&a.status<300||a.status===304||a.status===1223}catch(b){}return false},httpNotModified:function(a,b){var d=a.getResponseHeader("Last-Modified"),
-e=a.getResponseHeader("Etag");if(d)c.lastModified[b]=d;if(e)c.etag[b]=e;return a.status===304},httpData:function(a,b,d){var e=a.getResponseHeader("content-type")||"",f=b==="xml"||!b&&e.indexOf("xml")>=0;a=f?a.responseXML:a.responseText;f&&a.documentElement.nodeName==="parsererror"&&c.error("parsererror");if(d&&d.dataFilter)a=d.dataFilter(a,b);if(typeof a==="string")if(b==="json"||!b&&e.indexOf("json")>=0)a=c.parseJSON(a);else if(b==="script"||!b&&e.indexOf("javascript")>=0)c.globalEval(a);return a}});
-if(E.ActiveXObject)c.ajaxSettings.xhr=function(){if(E.location.protocol!=="file:")try{return new E.XMLHttpRequest}catch(a){}try{return new E.ActiveXObject("Microsoft.XMLHTTP")}catch(b){}};c.support.ajax=!!c.ajaxSettings.xhr();var ea={},vb=/^(?:toggle|show|hide)$/,wb=/^([+\-]=)?([\d+.\-]+)(.*)$/,ba,pa=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]];c.fn.extend({show:function(a,b,d){if(a||a===0)return this.animate(S("show",
-3),a,b,d);else{d=0;for(var e=this.length;d<e;d++){a=this[d];b=a.style.display;if(!c.data(a,"olddisplay")&&b==="none")b=a.style.display="";b===""&&c.css(a,"display")==="none"&&c.data(a,"olddisplay",qa(a.nodeName))}for(d=0;d<e;d++){a=this[d];b=a.style.display;if(b===""||b==="none")a.style.display=c.data(a,"olddisplay")||""}return this}},hide:function(a,b,d){if(a||a===0)return this.animate(S("hide",3),a,b,d);else{a=0;for(b=this.length;a<b;a++){d=c.css(this[a],"display");d!=="none"&&c.data(this[a],"olddisplay",
-d)}for(a=0;a<b;a++)this[a].style.display="none";return this}},_toggle:c.fn.toggle,toggle:function(a,b,d){var e=typeof a==="boolean";if(c.isFunction(a)&&c.isFunction(b))this._toggle.apply(this,arguments);else a==null||e?this.each(function(){var f=e?a:c(this).is(":hidden");c(this)[f?"show":"hide"]()}):this.animate(S("toggle",3),a,b,d);return this},fadeTo:function(a,b,d,e){return this.filter(":hidden").css("opacity",0).show().end().animate({opacity:b},a,d,e)},animate:function(a,b,d,e){var f=c.speed(b,
-d,e);if(c.isEmptyObject(a))return this.each(f.complete);return this[f.queue===false?"each":"queue"](function(){var h=c.extend({},f),l,k=this.nodeType===1,o=k&&c(this).is(":hidden"),x=this;for(l in a){var r=c.camelCase(l);if(l!==r){a[r]=a[l];delete a[l];l=r}if(a[l]==="hide"&&o||a[l]==="show"&&!o)return h.complete.call(this);if(k&&(l==="height"||l==="width")){h.overflow=[this.style.overflow,this.style.overflowX,this.style.overflowY];if(c.css(this,"display")==="inline"&&c.css(this,"float")==="none")if(c.support.inlineBlockNeedsLayout)if(qa(this.nodeName)===
-"inline")this.style.display="inline-block";else{this.style.display="inline";this.style.zoom=1}else this.style.display="inline-block"}if(c.isArray(a[l])){(h.specialEasing=h.specialEasing||{})[l]=a[l][1];a[l]=a[l][0]}}if(h.overflow!=null)this.style.overflow="hidden";h.curAnim=c.extend({},a);c.each(a,function(A,C){var J=new c.fx(x,h,A);if(vb.test(C))J[C==="toggle"?o?"show":"hide":C](a);else{var w=wb.exec(C),I=J.cur()||0;if(w){var L=parseFloat(w[2]),g=w[3]||"px";if(g!=="px"){c.style(x,A,(L||1)+g);I=(L||
-1)/J.cur()*I;c.style(x,A,I+g)}if(w[1])L=(w[1]==="-="?-1:1)*L+I;J.custom(I,L,g)}else J.custom(I,C,"")}});return true})},stop:function(a,b){var d=c.timers;a&&this.queue([]);this.each(function(){for(var e=d.length-1;e>=0;e--)if(d[e].elem===this){b&&d[e](true);d.splice(e,1)}});b||this.dequeue();return this}});c.each({slideDown:S("show",1),slideUp:S("hide",1),slideToggle:S("toggle",1),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(a,b){c.fn[a]=function(d,e,f){return this.animate(b,
-d,e,f)}});c.extend({speed:function(a,b,d){var e=a&&typeof a==="object"?c.extend({},a):{complete:d||!d&&b||c.isFunction(a)&&a,duration:a,easing:d&&b||b&&!c.isFunction(b)&&b};e.duration=c.fx.off?0:typeof e.duration==="number"?e.duration:e.duration in c.fx.speeds?c.fx.speeds[e.duration]:c.fx.speeds._default;e.old=e.complete;e.complete=function(){e.queue!==false&&c(this).dequeue();c.isFunction(e.old)&&e.old.call(this)};return e},easing:{linear:function(a,b,d,e){return d+e*a},swing:function(a,b,d,e){return(-Math.cos(a*
-Math.PI)/2+0.5)*e+d}},timers:[],fx:function(a,b,d){this.options=b;this.elem=a;this.prop=d;if(!b.orig)b.orig={}}});c.fx.prototype={update:function(){this.options.step&&this.options.step.call(this.elem,this.now,this);(c.fx.step[this.prop]||c.fx.step._default)(this)},cur:function(){if(this.elem[this.prop]!=null&&(!this.elem.style||this.elem.style[this.prop]==null))return this.elem[this.prop];var a=parseFloat(c.css(this.elem,this.prop));return a&&a>-1E4?a:0},custom:function(a,b,d){function e(l){return f.step(l)}
-var f=this,h=c.fx;this.startTime=c.now();this.start=a;this.end=b;this.unit=d||this.unit||"px";this.now=this.start;this.pos=this.state=0;e.elem=this.elem;if(e()&&c.timers.push(e)&&!ba)ba=setInterval(h.tick,h.interval)},show:function(){this.options.orig[this.prop]=c.style(this.elem,this.prop);this.options.show=true;this.custom(this.prop==="width"||this.prop==="height"?1:0,this.cur());c(this.elem).show()},hide:function(){this.options.orig[this.prop]=c.style(this.elem,this.prop);this.options.hide=true;
-this.custom(this.cur(),0)},step:function(a){var b=c.now(),d=true;if(a||b>=this.options.duration+this.startTime){this.now=this.end;this.pos=this.state=1;this.update();this.options.curAnim[this.prop]=true;for(var e in this.options.curAnim)if(this.options.curAnim[e]!==true)d=false;if(d){if(this.options.overflow!=null&&!c.support.shrinkWrapBlocks){var f=this.elem,h=this.options;c.each(["","X","Y"],function(k,o){f.style["overflow"+o]=h.overflow[k]})}this.options.hide&&c(this.elem).hide();if(this.options.hide||
-this.options.show)for(var l in this.options.curAnim)c.style(this.elem,l,this.options.orig[l]);this.options.complete.call(this.elem)}return false}else{a=b-this.startTime;this.state=a/this.options.duration;b=this.options.easing||(c.easing.swing?"swing":"linear");this.pos=c.easing[this.options.specialEasing&&this.options.specialEasing[this.prop]||b](this.state,a,0,1,this.options.duration);this.now=this.start+(this.end-this.start)*this.pos;this.update()}return true}};c.extend(c.fx,{tick:function(){for(var a=
-c.timers,b=0;b<a.length;b++)a[b]()||a.splice(b--,1);a.length||c.fx.stop()},interval:13,stop:function(){clearInterval(ba);ba=null},speeds:{slow:600,fast:200,_default:400},step:{opacity:function(a){c.style(a.elem,"opacity",a.now)},_default:function(a){if(a.elem.style&&a.elem.style[a.prop]!=null)a.elem.style[a.prop]=(a.prop==="width"||a.prop==="height"?Math.max(0,a.now):a.now)+a.unit;else a.elem[a.prop]=a.now}}});if(c.expr&&c.expr.filters)c.expr.filters.animated=function(a){return c.grep(c.timers,function(b){return a===
-b.elem}).length};var xb=/^t(?:able|d|h)$/i,Ia=/^(?:body|html)$/i;c.fn.offset="getBoundingClientRect"in t.documentElement?function(a){var b=this[0],d;if(a)return this.each(function(l){c.offset.setOffset(this,a,l)});if(!b||!b.ownerDocument)return null;if(b===b.ownerDocument.body)return c.offset.bodyOffset(b);try{d=b.getBoundingClientRect()}catch(e){}var f=b.ownerDocument,h=f.documentElement;if(!d||!c.contains(h,b))return d||{top:0,left:0};b=f.body;f=fa(f);return{top:d.top+(f.pageYOffset||c.support.boxModel&&
-h.scrollTop||b.scrollTop)-(h.clientTop||b.clientTop||0),left:d.left+(f.pageXOffset||c.support.boxModel&&h.scrollLeft||b.scrollLeft)-(h.clientLeft||b.clientLeft||0)}}:function(a){var b=this[0];if(a)return this.each(function(x){c.offset.setOffset(this,a,x)});if(!b||!b.ownerDocument)return null;if(b===b.ownerDocument.body)return c.offset.bodyOffset(b);c.offset.initialize();var d,e=b.offsetParent,f=b.ownerDocument,h=f.documentElement,l=f.body;d=(f=f.defaultView)?f.getComputedStyle(b,null):b.currentStyle;
-for(var k=b.offsetTop,o=b.offsetLeft;(b=b.parentNode)&&b!==l&&b!==h;){if(c.offset.supportsFixedPosition&&d.position==="fixed")break;d=f?f.getComputedStyle(b,null):b.currentStyle;k-=b.scrollTop;o-=b.scrollLeft;if(b===e){k+=b.offsetTop;o+=b.offsetLeft;if(c.offset.doesNotAddBorder&&!(c.offset.doesAddBorderForTableAndCells&&xb.test(b.nodeName))){k+=parseFloat(d.borderTopWidth)||0;o+=parseFloat(d.borderLeftWidth)||0}e=b.offsetParent}if(c.offset.subtractsBorderForOverflowNotVisible&&d.overflow!=="visible"){k+=
-parseFloat(d.borderTopWidth)||0;o+=parseFloat(d.borderLeftWidth)||0}d=d}if(d.position==="relative"||d.position==="static"){k+=l.offsetTop;o+=l.offsetLeft}if(c.offset.supportsFixedPosition&&d.position==="fixed"){k+=Math.max(h.scrollTop,l.scrollTop);o+=Math.max(h.scrollLeft,l.scrollLeft)}return{top:k,left:o}};c.offset={initialize:function(){var a=t.body,b=t.createElement("div"),d,e,f,h=parseFloat(c.css(a,"marginTop"))||0;c.extend(b.style,{position:"absolute",top:0,left:0,margin:0,border:0,width:"1px",
-height:"1px",visibility:"hidden"});b.innerHTML="<div style='position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;'><div></div></div><table style='position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;' cellpadding='0' cellspacing='0'><tr><td></td></tr></table>";a.insertBefore(b,a.firstChild);d=b.firstChild;e=d.firstChild;f=d.nextSibling.firstChild.firstChild;this.doesNotAddBorder=e.offsetTop!==5;this.doesAddBorderForTableAndCells=
-f.offsetTop===5;e.style.position="fixed";e.style.top="20px";this.supportsFixedPosition=e.offsetTop===20||e.offsetTop===15;e.style.position=e.style.top="";d.style.overflow="hidden";d.style.position="relative";this.subtractsBorderForOverflowNotVisible=e.offsetTop===-5;this.doesNotIncludeMarginInBodyOffset=a.offsetTop!==h;a.removeChild(b);c.offset.initialize=c.noop},bodyOffset:function(a){var b=a.offsetTop,d=a.offsetLeft;c.offset.initialize();if(c.offset.doesNotIncludeMarginInBodyOffset){b+=parseFloat(c.css(a,
-"marginTop"))||0;d+=parseFloat(c.css(a,"marginLeft"))||0}return{top:b,left:d}},setOffset:function(a,b,d){var e=c.css(a,"position");if(e==="static")a.style.position="relative";var f=c(a),h=f.offset(),l=c.css(a,"top"),k=c.css(a,"left"),o=e==="absolute"&&c.inArray("auto",[l,k])>-1;e={};var x={};if(o)x=f.position();l=o?x.top:parseInt(l,10)||0;k=o?x.left:parseInt(k,10)||0;if(c.isFunction(b))b=b.call(a,d,h);if(b.top!=null)e.top=b.top-h.top+l;if(b.left!=null)e.left=b.left-h.left+k;"using"in b?b.using.call(a,
-e):f.css(e)}};c.fn.extend({position:function(){if(!this[0])return null;var a=this[0],b=this.offsetParent(),d=this.offset(),e=Ia.test(b[0].nodeName)?{top:0,left:0}:b.offset();d.top-=parseFloat(c.css(a,"marginTop"))||0;d.left-=parseFloat(c.css(a,"marginLeft"))||0;e.top+=parseFloat(c.css(b[0],"borderTopWidth"))||0;e.left+=parseFloat(c.css(b[0],"borderLeftWidth"))||0;return{top:d.top-e.top,left:d.left-e.left}},offsetParent:function(){return this.map(function(){for(var a=this.offsetParent||t.body;a&&!Ia.test(a.nodeName)&&
-c.css(a,"position")==="static";)a=a.offsetParent;return a})}});c.each(["Left","Top"],function(a,b){var d="scroll"+b;c.fn[d]=function(e){var f=this[0],h;if(!f)return null;if(e!==B)return this.each(function(){if(h=fa(this))h.scrollTo(!a?e:c(h).scrollLeft(),a?e:c(h).scrollTop());else this[d]=e});else return(h=fa(f))?"pageXOffset"in h?h[a?"pageYOffset":"pageXOffset"]:c.support.boxModel&&h.document.documentElement[d]||h.document.body[d]:f[d]}});c.each(["Height","Width"],function(a,b){var d=b.toLowerCase();
-c.fn["inner"+b]=function(){return this[0]?parseFloat(c.css(this[0],d,"padding")):null};c.fn["outer"+b]=function(e){return this[0]?parseFloat(c.css(this[0],d,e?"margin":"border")):null};c.fn[d]=function(e){var f=this[0];if(!f)return e==null?null:this;if(c.isFunction(e))return this.each(function(l){var k=c(this);k[d](e.call(this,l,k[d]()))});if(c.isWindow(f))return f.document.compatMode==="CSS1Compat"&&f.document.documentElement["client"+b]||f.document.body["client"+b];else if(f.nodeType===9)return Math.max(f.documentElement["client"+
-b],f.body["scroll"+b],f.documentElement["scroll"+b],f.body["offset"+b],f.documentElement["offset"+b]);else if(e===B){f=c.css(f,d);var h=parseFloat(f);return c.isNaN(h)?f:h}else return this.css(d,typeof e==="string"?e:e+"px")}})})(window);

+ 0 - 285
web/js/lib/.svn/text-base/jquery-ui-1.8.13.custom.min.js.svn-base

@@ -1,285 +0,0 @@
-/*!
- * jQuery UI 1.8.13
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI
- */
-(function(c,j){function k(a,b){var d=a.nodeName.toLowerCase();if("area"===d){b=a.parentNode;d=b.name;if(!a.href||!d||b.nodeName.toLowerCase()!=="map")return false;a=c("img[usemap=#"+d+"]")[0];return!!a&&l(a)}return(/input|select|textarea|button|object/.test(d)?!a.disabled:"a"==d?a.href||b:b)&&l(a)}function l(a){return!c(a).parents().andSelf().filter(function(){return c.curCSS(this,"visibility")==="hidden"||c.expr.filters.hidden(this)}).length}c.ui=c.ui||{};if(!c.ui.version){c.extend(c.ui,{version:"1.8.13",
-keyCode:{ALT:18,BACKSPACE:8,CAPS_LOCK:20,COMMA:188,COMMAND:91,COMMAND_LEFT:91,COMMAND_RIGHT:93,CONTROL:17,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,INSERT:45,LEFT:37,MENU:93,NUMPAD_ADD:107,NUMPAD_DECIMAL:110,NUMPAD_DIVIDE:111,NUMPAD_ENTER:108,NUMPAD_MULTIPLY:106,NUMPAD_SUBTRACT:109,PAGE_DOWN:34,PAGE_UP:33,PERIOD:190,RIGHT:39,SHIFT:16,SPACE:32,TAB:9,UP:38,WINDOWS:91}});c.fn.extend({_focus:c.fn.focus,focus:function(a,b){return typeof a==="number"?this.each(function(){var d=this;setTimeout(function(){c(d).focus();
-b&&b.call(d)},a)}):this._focus.apply(this,arguments)},scrollParent:function(){var a;a=c.browser.msie&&/(static|relative)/.test(this.css("position"))||/absolute/.test(this.css("position"))?this.parents().filter(function(){return/(relative|absolute|fixed)/.test(c.curCSS(this,"position",1))&&/(auto|scroll)/.test(c.curCSS(this,"overflow",1)+c.curCSS(this,"overflow-y",1)+c.curCSS(this,"overflow-x",1))}).eq(0):this.parents().filter(function(){return/(auto|scroll)/.test(c.curCSS(this,"overflow",1)+c.curCSS(this,
-"overflow-y",1)+c.curCSS(this,"overflow-x",1))}).eq(0);return/fixed/.test(this.css("position"))||!a.length?c(document):a},zIndex:function(a){if(a!==j)return this.css("zIndex",a);if(this.length){a=c(this[0]);for(var b;a.length&&a[0]!==document;){b=a.css("position");if(b==="absolute"||b==="relative"||b==="fixed"){b=parseInt(a.css("zIndex"),10);if(!isNaN(b)&&b!==0)return b}a=a.parent()}}return 0},disableSelection:function(){return this.bind((c.support.selectstart?"selectstart":"mousedown")+".ui-disableSelection",
-function(a){a.preventDefault()})},enableSelection:function(){return this.unbind(".ui-disableSelection")}});c.each(["Width","Height"],function(a,b){function d(f,g,m,n){c.each(e,function(){g-=parseFloat(c.curCSS(f,"padding"+this,true))||0;if(m)g-=parseFloat(c.curCSS(f,"border"+this+"Width",true))||0;if(n)g-=parseFloat(c.curCSS(f,"margin"+this,true))||0});return g}var e=b==="Width"?["Left","Right"]:["Top","Bottom"],h=b.toLowerCase(),i={innerWidth:c.fn.innerWidth,innerHeight:c.fn.innerHeight,outerWidth:c.fn.outerWidth,
-outerHeight:c.fn.outerHeight};c.fn["inner"+b]=function(f){if(f===j)return i["inner"+b].call(this);return this.each(function(){c(this).css(h,d(this,f)+"px")})};c.fn["outer"+b]=function(f,g){if(typeof f!=="number")return i["outer"+b].call(this,f);return this.each(function(){c(this).css(h,d(this,f,true,g)+"px")})}});c.extend(c.expr[":"],{data:function(a,b,d){return!!c.data(a,d[3])},focusable:function(a){return k(a,!isNaN(c.attr(a,"tabindex")))},tabbable:function(a){var b=c.attr(a,"tabindex"),d=isNaN(b);
-return(d||b>=0)&&k(a,!d)}});c(function(){var a=document.body,b=a.appendChild(b=document.createElement("div"));c.extend(b.style,{minHeight:"100px",height:"auto",padding:0,borderWidth:0});c.support.minHeight=b.offsetHeight===100;c.support.selectstart="onselectstart"in b;a.removeChild(b).style.display="none"});c.extend(c.ui,{plugin:{add:function(a,b,d){a=c.ui[a].prototype;for(var e in d){a.plugins[e]=a.plugins[e]||[];a.plugins[e].push([b,d[e]])}},call:function(a,b,d){if((b=a.plugins[b])&&a.element[0].parentNode)for(var e=
-0;e<b.length;e++)a.options[b[e][0]]&&b[e][1].apply(a.element,d)}},contains:function(a,b){return document.compareDocumentPosition?a.compareDocumentPosition(b)&16:a!==b&&a.contains(b)},hasScroll:function(a,b){if(c(a).css("overflow")==="hidden")return false;b=b&&b==="left"?"scrollLeft":"scrollTop";var d=false;if(a[b]>0)return true;a[b]=1;d=a[b]>0;a[b]=0;return d},isOverAxis:function(a,b,d){return a>b&&a<b+d},isOver:function(a,b,d,e,h,i){return c.ui.isOverAxis(a,d,h)&&c.ui.isOverAxis(b,e,i)}})}})(jQuery);
-;/*!
- * jQuery UI Widget 1.8.13
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Widget
- */
-(function(b,j){if(b.cleanData){var k=b.cleanData;b.cleanData=function(a){for(var c=0,d;(d=a[c])!=null;c++)b(d).triggerHandler("remove");k(a)}}else{var l=b.fn.remove;b.fn.remove=function(a,c){return this.each(function(){if(!c)if(!a||b.filter(a,[this]).length)b("*",this).add([this]).each(function(){b(this).triggerHandler("remove")});return l.call(b(this),a,c)})}}b.widget=function(a,c,d){var e=a.split(".")[0],f;a=a.split(".")[1];f=e+"-"+a;if(!d){d=c;c=b.Widget}b.expr[":"][f]=function(h){return!!b.data(h,
-a)};b[e]=b[e]||{};b[e][a]=function(h,g){arguments.length&&this._createWidget(h,g)};c=new c;c.options=b.extend(true,{},c.options);b[e][a].prototype=b.extend(true,c,{namespace:e,widgetName:a,widgetEventPrefix:b[e][a].prototype.widgetEventPrefix||a,widgetBaseClass:f},d);b.widget.bridge(a,b[e][a])};b.widget.bridge=function(a,c){b.fn[a]=function(d){var e=typeof d==="string",f=Array.prototype.slice.call(arguments,1),h=this;d=!e&&f.length?b.extend.apply(null,[true,d].concat(f)):d;if(e&&d.charAt(0)==="_")return h;
-e?this.each(function(){var g=b.data(this,a),i=g&&b.isFunction(g[d])?g[d].apply(g,f):g;if(i!==g&&i!==j){h=i;return false}}):this.each(function(){var g=b.data(this,a);g?g.option(d||{})._init():b.data(this,a,new c(d,this))});return h}};b.Widget=function(a,c){arguments.length&&this._createWidget(a,c)};b.Widget.prototype={widgetName:"widget",widgetEventPrefix:"",options:{disabled:false},_createWidget:function(a,c){b.data(c,this.widgetName,this);this.element=b(c);this.options=b.extend(true,{},this.options,
-this._getCreateOptions(),a);var d=this;this.element.bind("remove."+this.widgetName,function(){d.destroy()});this._create();this._trigger("create");this._init()},_getCreateOptions:function(){return b.metadata&&b.metadata.get(this.element[0])[this.widgetName]},_create:function(){},_init:function(){},destroy:function(){this.element.unbind("."+this.widgetName).removeData(this.widgetName);this.widget().unbind("."+this.widgetName).removeAttr("aria-disabled").removeClass(this.widgetBaseClass+"-disabled ui-state-disabled")},
-widget:function(){return this.element},option:function(a,c){var d=a;if(arguments.length===0)return b.extend({},this.options);if(typeof a==="string"){if(c===j)return this.options[a];d={};d[a]=c}this._setOptions(d);return this},_setOptions:function(a){var c=this;b.each(a,function(d,e){c._setOption(d,e)});return this},_setOption:function(a,c){this.options[a]=c;if(a==="disabled")this.widget()[c?"addClass":"removeClass"](this.widgetBaseClass+"-disabled ui-state-disabled").attr("aria-disabled",c);return this},
-enable:function(){return this._setOption("disabled",false)},disable:function(){return this._setOption("disabled",true)},_trigger:function(a,c,d){var e=this.options[a];c=b.Event(c);c.type=(a===this.widgetEventPrefix?a:this.widgetEventPrefix+a).toLowerCase();d=d||{};if(c.originalEvent){a=b.event.props.length;for(var f;a;){f=b.event.props[--a];c[f]=c.originalEvent[f]}}this.element.trigger(c,d);return!(b.isFunction(e)&&e.call(this.element[0],c,d)===false||c.isDefaultPrevented())}}})(jQuery);
-;/*!
- * jQuery UI Mouse 1.8.13
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Mouse
- *
- * Depends:
- *	jquery.ui.widget.js
- */
-(function(b){var d=false;b(document).mousedown(function(){d=false});b.widget("ui.mouse",{options:{cancel:":input,option",distance:1,delay:0},_mouseInit:function(){var a=this;this.element.bind("mousedown."+this.widgetName,function(c){return a._mouseDown(c)}).bind("click."+this.widgetName,function(c){if(true===b.data(c.target,a.widgetName+".preventClickEvent")){b.removeData(c.target,a.widgetName+".preventClickEvent");c.stopImmediatePropagation();return false}});this.started=false},_mouseDestroy:function(){this.element.unbind("."+
-this.widgetName)},_mouseDown:function(a){if(!d){this._mouseStarted&&this._mouseUp(a);this._mouseDownEvent=a;var c=this,f=a.which==1,g=typeof this.options.cancel=="string"?b(a.target).parents().add(a.target).filter(this.options.cancel).length:false;if(!f||g||!this._mouseCapture(a))return true;this.mouseDelayMet=!this.options.delay;if(!this.mouseDelayMet)this._mouseDelayTimer=setTimeout(function(){c.mouseDelayMet=true},this.options.delay);if(this._mouseDistanceMet(a)&&this._mouseDelayMet(a)){this._mouseStarted=
-this._mouseStart(a)!==false;if(!this._mouseStarted){a.preventDefault();return true}}true===b.data(a.target,this.widgetName+".preventClickEvent")&&b.removeData(a.target,this.widgetName+".preventClickEvent");this._mouseMoveDelegate=function(e){return c._mouseMove(e)};this._mouseUpDelegate=function(e){return c._mouseUp(e)};b(document).bind("mousemove."+this.widgetName,this._mouseMoveDelegate).bind("mouseup."+this.widgetName,this._mouseUpDelegate);a.preventDefault();return d=true}},_mouseMove:function(a){if(b.browser.msie&&
-!(document.documentMode>=9)&&!a.button)return this._mouseUp(a);if(this._mouseStarted){this._mouseDrag(a);return a.preventDefault()}if(this._mouseDistanceMet(a)&&this._mouseDelayMet(a))(this._mouseStarted=this._mouseStart(this._mouseDownEvent,a)!==false)?this._mouseDrag(a):this._mouseUp(a);return!this._mouseStarted},_mouseUp:function(a){b(document).unbind("mousemove."+this.widgetName,this._mouseMoveDelegate).unbind("mouseup."+this.widgetName,this._mouseUpDelegate);if(this._mouseStarted){this._mouseStarted=
-false;a.target==this._mouseDownEvent.target&&b.data(a.target,this.widgetName+".preventClickEvent",true);this._mouseStop(a)}return false},_mouseDistanceMet:function(a){return Math.max(Math.abs(this._mouseDownEvent.pageX-a.pageX),Math.abs(this._mouseDownEvent.pageY-a.pageY))>=this.options.distance},_mouseDelayMet:function(){return this.mouseDelayMet},_mouseStart:function(){},_mouseDrag:function(){},_mouseStop:function(){},_mouseCapture:function(){return true}})})(jQuery);
-;/*
- * jQuery UI Position 1.8.13
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Position
- */
-(function(c){c.ui=c.ui||{};var n=/left|center|right/,o=/top|center|bottom/,t=c.fn.position,u=c.fn.offset;c.fn.position=function(b){if(!b||!b.of)return t.apply(this,arguments);b=c.extend({},b);var a=c(b.of),d=a[0],g=(b.collision||"flip").split(" "),e=b.offset?b.offset.split(" "):[0,0],h,k,j;if(d.nodeType===9){h=a.width();k=a.height();j={top:0,left:0}}else if(d.setTimeout){h=a.width();k=a.height();j={top:a.scrollTop(),left:a.scrollLeft()}}else if(d.preventDefault){b.at="left top";h=k=0;j={top:b.of.pageY,
-left:b.of.pageX}}else{h=a.outerWidth();k=a.outerHeight();j=a.offset()}c.each(["my","at"],function(){var f=(b[this]||"").split(" ");if(f.length===1)f=n.test(f[0])?f.concat(["center"]):o.test(f[0])?["center"].concat(f):["center","center"];f[0]=n.test(f[0])?f[0]:"center";f[1]=o.test(f[1])?f[1]:"center";b[this]=f});if(g.length===1)g[1]=g[0];e[0]=parseInt(e[0],10)||0;if(e.length===1)e[1]=e[0];e[1]=parseInt(e[1],10)||0;if(b.at[0]==="right")j.left+=h;else if(b.at[0]==="center")j.left+=h/2;if(b.at[1]==="bottom")j.top+=
-k;else if(b.at[1]==="center")j.top+=k/2;j.left+=e[0];j.top+=e[1];return this.each(function(){var f=c(this),l=f.outerWidth(),m=f.outerHeight(),p=parseInt(c.curCSS(this,"marginLeft",true))||0,q=parseInt(c.curCSS(this,"marginTop",true))||0,v=l+p+(parseInt(c.curCSS(this,"marginRight",true))||0),w=m+q+(parseInt(c.curCSS(this,"marginBottom",true))||0),i=c.extend({},j),r;if(b.my[0]==="right")i.left-=l;else if(b.my[0]==="center")i.left-=l/2;if(b.my[1]==="bottom")i.top-=m;else if(b.my[1]==="center")i.top-=
-m/2;i.left=Math.round(i.left);i.top=Math.round(i.top);r={left:i.left-p,top:i.top-q};c.each(["left","top"],function(s,x){c.ui.position[g[s]]&&c.ui.position[g[s]][x](i,{targetWidth:h,targetHeight:k,elemWidth:l,elemHeight:m,collisionPosition:r,collisionWidth:v,collisionHeight:w,offset:e,my:b.my,at:b.at})});c.fn.bgiframe&&f.bgiframe();f.offset(c.extend(i,{using:b.using}))})};c.ui.position={fit:{left:function(b,a){var d=c(window);d=a.collisionPosition.left+a.collisionWidth-d.width()-d.scrollLeft();b.left=
-d>0?b.left-d:Math.max(b.left-a.collisionPosition.left,b.left)},top:function(b,a){var d=c(window);d=a.collisionPosition.top+a.collisionHeight-d.height()-d.scrollTop();b.top=d>0?b.top-d:Math.max(b.top-a.collisionPosition.top,b.top)}},flip:{left:function(b,a){if(a.at[0]!=="center"){var d=c(window);d=a.collisionPosition.left+a.collisionWidth-d.width()-d.scrollLeft();var g=a.my[0]==="left"?-a.elemWidth:a.my[0]==="right"?a.elemWidth:0,e=a.at[0]==="left"?a.targetWidth:-a.targetWidth,h=-2*a.offset[0];b.left+=
-a.collisionPosition.left<0?g+e+h:d>0?g+e+h:0}},top:function(b,a){if(a.at[1]!=="center"){var d=c(window);d=a.collisionPosition.top+a.collisionHeight-d.height()-d.scrollTop();var g=a.my[1]==="top"?-a.elemHeight:a.my[1]==="bottom"?a.elemHeight:0,e=a.at[1]==="top"?a.targetHeight:-a.targetHeight,h=-2*a.offset[1];b.top+=a.collisionPosition.top<0?g+e+h:d>0?g+e+h:0}}}};if(!c.offset.setOffset){c.offset.setOffset=function(b,a){if(/static/.test(c.curCSS(b,"position")))b.style.position="relative";var d=c(b),
-g=d.offset(),e=parseInt(c.curCSS(b,"top",true),10)||0,h=parseInt(c.curCSS(b,"left",true),10)||0;g={top:a.top-g.top+e,left:a.left-g.left+h};"using"in a?a.using.call(b,g):d.css(g)};c.fn.offset=function(b){var a=this[0];if(!a||!a.ownerDocument)return null;if(b)return this.each(function(){c.offset.setOffset(this,b)});return u.call(this)}}})(jQuery);
-;/*
- * jQuery UI Effects 1.8.13
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Effects/
- */
-jQuery.effects||function(f,j){function m(c){var a;if(c&&c.constructor==Array&&c.length==3)return c;if(a=/rgb\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*\)/.exec(c))return[parseInt(a[1],10),parseInt(a[2],10),parseInt(a[3],10)];if(a=/rgb\(\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*\)/.exec(c))return[parseFloat(a[1])*2.55,parseFloat(a[2])*2.55,parseFloat(a[3])*2.55];if(a=/#([a-fA-F0-9]{2})([a-fA-F0-9]{2})([a-fA-F0-9]{2})/.exec(c))return[parseInt(a[1],
-16),parseInt(a[2],16),parseInt(a[3],16)];if(a=/#([a-fA-F0-9])([a-fA-F0-9])([a-fA-F0-9])/.exec(c))return[parseInt(a[1]+a[1],16),parseInt(a[2]+a[2],16),parseInt(a[3]+a[3],16)];if(/rgba\(0, 0, 0, 0\)/.exec(c))return n.transparent;return n[f.trim(c).toLowerCase()]}function s(c,a){var b;do{b=f.curCSS(c,a);if(b!=""&&b!="transparent"||f.nodeName(c,"body"))break;a="backgroundColor"}while(c=c.parentNode);return m(b)}function o(){var c=document.defaultView?document.defaultView.getComputedStyle(this,null):this.currentStyle,
-a={},b,d;if(c&&c.length&&c[0]&&c[c[0]])for(var e=c.length;e--;){b=c[e];if(typeof c[b]=="string"){d=b.replace(/\-(\w)/g,function(g,h){return h.toUpperCase()});a[d]=c[b]}}else for(b in c)if(typeof c[b]==="string")a[b]=c[b];return a}function p(c){var a,b;for(a in c){b=c[a];if(b==null||f.isFunction(b)||a in t||/scrollbar/.test(a)||!/color/i.test(a)&&isNaN(parseFloat(b)))delete c[a]}return c}function u(c,a){var b={_:0},d;for(d in a)if(c[d]!=a[d])b[d]=a[d];return b}function k(c,a,b,d){if(typeof c=="object"){d=
-a;b=null;a=c;c=a.effect}if(f.isFunction(a)){d=a;b=null;a={}}if(typeof a=="number"||f.fx.speeds[a]){d=b;b=a;a={}}if(f.isFunction(b)){d=b;b=null}a=a||{};b=b||a.duration;b=f.fx.off?0:typeof b=="number"?b:b in f.fx.speeds?f.fx.speeds[b]:f.fx.speeds._default;d=d||a.complete;return[c,a,b,d]}function l(c){if(!c||typeof c==="number"||f.fx.speeds[c])return true;if(typeof c==="string"&&!f.effects[c])return true;return false}f.effects={};f.each(["backgroundColor","borderBottomColor","borderLeftColor","borderRightColor",
-"borderTopColor","borderColor","color","outlineColor"],function(c,a){f.fx.step[a]=function(b){if(!b.colorInit){b.start=s(b.elem,a);b.end=m(b.end);b.colorInit=true}b.elem.style[a]="rgb("+Math.max(Math.min(parseInt(b.pos*(b.end[0]-b.start[0])+b.start[0],10),255),0)+","+Math.max(Math.min(parseInt(b.pos*(b.end[1]-b.start[1])+b.start[1],10),255),0)+","+Math.max(Math.min(parseInt(b.pos*(b.end[2]-b.start[2])+b.start[2],10),255),0)+")"}});var n={aqua:[0,255,255],azure:[240,255,255],beige:[245,245,220],black:[0,
-0,0],blue:[0,0,255],brown:[165,42,42],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgrey:[169,169,169],darkgreen:[0,100,0],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkviolet:[148,0,211],fuchsia:[255,0,255],gold:[255,215,0],green:[0,128,0],indigo:[75,0,130],khaki:[240,230,140],lightblue:[173,216,230],lightcyan:[224,255,255],lightgreen:[144,238,144],lightgrey:[211,
-211,211],lightpink:[255,182,193],lightyellow:[255,255,224],lime:[0,255,0],magenta:[255,0,255],maroon:[128,0,0],navy:[0,0,128],olive:[128,128,0],orange:[255,165,0],pink:[255,192,203],purple:[128,0,128],violet:[128,0,128],red:[255,0,0],silver:[192,192,192],white:[255,255,255],yellow:[255,255,0],transparent:[255,255,255]},q=["add","remove","toggle"],t={border:1,borderBottom:1,borderColor:1,borderLeft:1,borderRight:1,borderTop:1,borderWidth:1,margin:1,padding:1};f.effects.animateClass=function(c,a,b,
-d){if(f.isFunction(b)){d=b;b=null}return this.queue(function(){var e=f(this),g=e.attr("style")||" ",h=p(o.call(this)),r,v=e.attr("class");f.each(q,function(w,i){c[i]&&e[i+"Class"](c[i])});r=p(o.call(this));e.attr("class",v);e.animate(u(h,r),{queue:false,duration:a,easding:b,complete:function(){f.each(q,function(w,i){c[i]&&e[i+"Class"](c[i])});if(typeof e.attr("style")=="object"){e.attr("style").cssText="";e.attr("style").cssText=g}else e.attr("style",g);d&&d.apply(this,arguments);f.dequeue(this)}})})};
-f.fn.extend({_addClass:f.fn.addClass,addClass:function(c,a,b,d){return a?f.effects.animateClass.apply(this,[{add:c},a,b,d]):this._addClass(c)},_removeClass:f.fn.removeClass,removeClass:function(c,a,b,d){return a?f.effects.animateClass.apply(this,[{remove:c},a,b,d]):this._removeClass(c)},_toggleClass:f.fn.toggleClass,toggleClass:function(c,a,b,d,e){return typeof a=="boolean"||a===j?b?f.effects.animateClass.apply(this,[a?{add:c}:{remove:c},b,d,e]):this._toggleClass(c,a):f.effects.animateClass.apply(this,
-[{toggle:c},a,b,d])},switchClass:function(c,a,b,d,e){return f.effects.animateClass.apply(this,[{add:a,remove:c},b,d,e])}});f.extend(f.effects,{version:"1.8.13",save:function(c,a){for(var b=0;b<a.length;b++)a[b]!==null&&c.data("ec.storage."+a[b],c[0].style[a[b]])},restore:function(c,a){for(var b=0;b<a.length;b++)a[b]!==null&&c.css(a[b],c.data("ec.storage."+a[b]))},setMode:function(c,a){if(a=="toggle")a=c.is(":hidden")?"show":"hide";return a},getBaseline:function(c,a){var b;switch(c[0]){case "top":b=
-0;break;case "middle":b=0.5;break;case "bottom":b=1;break;default:b=c[0]/a.height}switch(c[1]){case "left":c=0;break;case "center":c=0.5;break;case "right":c=1;break;default:c=c[1]/a.width}return{x:c,y:b}},createWrapper:function(c){if(c.parent().is(".ui-effects-wrapper"))return c.parent();var a={width:c.outerWidth(true),height:c.outerHeight(true),"float":c.css("float")},b=f("<div></div>").addClass("ui-effects-wrapper").css({fontSize:"100%",background:"transparent",border:"none",margin:0,padding:0});
-c.wrap(b);b=c.parent();if(c.css("position")=="static"){b.css({position:"relative"});c.css({position:"relative"})}else{f.extend(a,{position:c.css("position"),zIndex:c.css("z-index")});f.each(["top","left","bottom","right"],function(d,e){a[e]=c.css(e);if(isNaN(parseInt(a[e],10)))a[e]="auto"});c.css({position:"relative",top:0,left:0,right:"auto",bottom:"auto"})}return b.css(a).show()},removeWrapper:function(c){if(c.parent().is(".ui-effects-wrapper"))return c.parent().replaceWith(c);return c},setTransition:function(c,
-a,b,d){d=d||{};f.each(a,function(e,g){unit=c.cssUnit(g);if(unit[0]>0)d[g]=unit[0]*b+unit[1]});return d}});f.fn.extend({effect:function(c){var a=k.apply(this,arguments),b={options:a[1],duration:a[2],callback:a[3]};a=b.options.mode;var d=f.effects[c];if(f.fx.off||!d)return a?this[a](b.duration,b.callback):this.each(function(){b.callback&&b.callback.call(this)});return d.call(this,b)},_show:f.fn.show,show:function(c){if(l(c))return this._show.apply(this,arguments);else{var a=k.apply(this,arguments);
-a[1].mode="show";return this.effect.apply(this,a)}},_hide:f.fn.hide,hide:function(c){if(l(c))return this._hide.apply(this,arguments);else{var a=k.apply(this,arguments);a[1].mode="hide";return this.effect.apply(this,a)}},__toggle:f.fn.toggle,toggle:function(c){if(l(c)||typeof c==="boolean"||f.isFunction(c))return this.__toggle.apply(this,arguments);else{var a=k.apply(this,arguments);a[1].mode="toggle";return this.effect.apply(this,a)}},cssUnit:function(c){var a=this.css(c),b=[];f.each(["em","px","%",
-"pt"],function(d,e){if(a.indexOf(e)>0)b=[parseFloat(a),e]});return b}});f.easing.jswing=f.easing.swing;f.extend(f.easing,{def:"easeOutQuad",swing:function(c,a,b,d,e){return f.easing[f.easing.def](c,a,b,d,e)},easeInQuad:function(c,a,b,d,e){return d*(a/=e)*a+b},easeOutQuad:function(c,a,b,d,e){return-d*(a/=e)*(a-2)+b},easeInOutQuad:function(c,a,b,d,e){if((a/=e/2)<1)return d/2*a*a+b;return-d/2*(--a*(a-2)-1)+b},easeInCubic:function(c,a,b,d,e){return d*(a/=e)*a*a+b},easeOutCubic:function(c,a,b,d,e){return d*
-((a=a/e-1)*a*a+1)+b},easeInOutCubic:function(c,a,b,d,e){if((a/=e/2)<1)return d/2*a*a*a+b;return d/2*((a-=2)*a*a+2)+b},easeInQuart:function(c,a,b,d,e){return d*(a/=e)*a*a*a+b},easeOutQuart:function(c,a,b,d,e){return-d*((a=a/e-1)*a*a*a-1)+b},easeInOutQuart:function(c,a,b,d,e){if((a/=e/2)<1)return d/2*a*a*a*a+b;return-d/2*((a-=2)*a*a*a-2)+b},easeInQuint:function(c,a,b,d,e){return d*(a/=e)*a*a*a*a+b},easeOutQuint:function(c,a,b,d,e){return d*((a=a/e-1)*a*a*a*a+1)+b},easeInOutQuint:function(c,a,b,d,e){if((a/=
-e/2)<1)return d/2*a*a*a*a*a+b;return d/2*((a-=2)*a*a*a*a+2)+b},easeInSine:function(c,a,b,d,e){return-d*Math.cos(a/e*(Math.PI/2))+d+b},easeOutSine:function(c,a,b,d,e){return d*Math.sin(a/e*(Math.PI/2))+b},easeInOutSine:function(c,a,b,d,e){return-d/2*(Math.cos(Math.PI*a/e)-1)+b},easeInExpo:function(c,a,b,d,e){return a==0?b:d*Math.pow(2,10*(a/e-1))+b},easeOutExpo:function(c,a,b,d,e){return a==e?b+d:d*(-Math.pow(2,-10*a/e)+1)+b},easeInOutExpo:function(c,a,b,d,e){if(a==0)return b;if(a==e)return b+d;if((a/=
-e/2)<1)return d/2*Math.pow(2,10*(a-1))+b;return d/2*(-Math.pow(2,-10*--a)+2)+b},easeInCirc:function(c,a,b,d,e){return-d*(Math.sqrt(1-(a/=e)*a)-1)+b},easeOutCirc:function(c,a,b,d,e){return d*Math.sqrt(1-(a=a/e-1)*a)+b},easeInOutCirc:function(c,a,b,d,e){if((a/=e/2)<1)return-d/2*(Math.sqrt(1-a*a)-1)+b;return d/2*(Math.sqrt(1-(a-=2)*a)+1)+b},easeInElastic:function(c,a,b,d,e){c=1.70158;var g=0,h=d;if(a==0)return b;if((a/=e)==1)return b+d;g||(g=e*0.3);if(h<Math.abs(d)){h=d;c=g/4}else c=g/(2*Math.PI)*Math.asin(d/
-h);return-(h*Math.pow(2,10*(a-=1))*Math.sin((a*e-c)*2*Math.PI/g))+b},easeOutElastic:function(c,a,b,d,e){c=1.70158;var g=0,h=d;if(a==0)return b;if((a/=e)==1)return b+d;g||(g=e*0.3);if(h<Math.abs(d)){h=d;c=g/4}else c=g/(2*Math.PI)*Math.asin(d/h);return h*Math.pow(2,-10*a)*Math.sin((a*e-c)*2*Math.PI/g)+d+b},easeInOutElastic:function(c,a,b,d,e){c=1.70158;var g=0,h=d;if(a==0)return b;if((a/=e/2)==2)return b+d;g||(g=e*0.3*1.5);if(h<Math.abs(d)){h=d;c=g/4}else c=g/(2*Math.PI)*Math.asin(d/h);if(a<1)return-0.5*
-h*Math.pow(2,10*(a-=1))*Math.sin((a*e-c)*2*Math.PI/g)+b;return h*Math.pow(2,-10*(a-=1))*Math.sin((a*e-c)*2*Math.PI/g)*0.5+d+b},easeInBack:function(c,a,b,d,e,g){if(g==j)g=1.70158;return d*(a/=e)*a*((g+1)*a-g)+b},easeOutBack:function(c,a,b,d,e,g){if(g==j)g=1.70158;return d*((a=a/e-1)*a*((g+1)*a+g)+1)+b},easeInOutBack:function(c,a,b,d,e,g){if(g==j)g=1.70158;if((a/=e/2)<1)return d/2*a*a*(((g*=1.525)+1)*a-g)+b;return d/2*((a-=2)*a*(((g*=1.525)+1)*a+g)+2)+b},easeInBounce:function(c,a,b,d,e){return d-f.easing.easeOutBounce(c,
-e-a,0,d,e)+b},easeOutBounce:function(c,a,b,d,e){return(a/=e)<1/2.75?d*7.5625*a*a+b:a<2/2.75?d*(7.5625*(a-=1.5/2.75)*a+0.75)+b:a<2.5/2.75?d*(7.5625*(a-=2.25/2.75)*a+0.9375)+b:d*(7.5625*(a-=2.625/2.75)*a+0.984375)+b},easeInOutBounce:function(c,a,b,d,e){if(a<e/2)return f.easing.easeInBounce(c,a*2,0,d,e)*0.5+b;return f.easing.easeOutBounce(c,a*2-e,0,d,e)*0.5+d*0.5+b}})}(jQuery);
-;/*
- * jQuery UI Effects Blind 1.8.13
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Effects/Blind
- *
- * Depends:
- *	jquery.effects.core.js
- */
-(function(b){b.effects.blind=function(c){return this.queue(function(){var a=b(this),g=["position","top","bottom","left","right"],f=b.effects.setMode(a,c.options.mode||"hide"),d=c.options.direction||"vertical";b.effects.save(a,g);a.show();var e=b.effects.createWrapper(a).css({overflow:"hidden"}),h=d=="vertical"?"height":"width";d=d=="vertical"?e.height():e.width();f=="show"&&e.css(h,0);var i={};i[h]=f=="show"?d:0;e.animate(i,c.duration,c.options.easing,function(){f=="hide"&&a.hide();b.effects.restore(a,
-g);b.effects.removeWrapper(a);c.callback&&c.callback.apply(a[0],arguments);a.dequeue()})})}})(jQuery);
-;/*
- * jQuery UI Effects Bounce 1.8.13
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Effects/Bounce
- *
- * Depends:
- *	jquery.effects.core.js
- */
-(function(e){e.effects.bounce=function(b){return this.queue(function(){var a=e(this),l=["position","top","bottom","left","right"],h=e.effects.setMode(a,b.options.mode||"effect"),d=b.options.direction||"up",c=b.options.distance||20,m=b.options.times||5,i=b.duration||250;/show|hide/.test(h)&&l.push("opacity");e.effects.save(a,l);a.show();e.effects.createWrapper(a);var f=d=="up"||d=="down"?"top":"left";d=d=="up"||d=="left"?"pos":"neg";c=b.options.distance||(f=="top"?a.outerHeight({margin:true})/3:a.outerWidth({margin:true})/
-3);if(h=="show")a.css("opacity",0).css(f,d=="pos"?-c:c);if(h=="hide")c/=m*2;h!="hide"&&m--;if(h=="show"){var g={opacity:1};g[f]=(d=="pos"?"+=":"-=")+c;a.animate(g,i/2,b.options.easing);c/=2;m--}for(g=0;g<m;g++){var j={},k={};j[f]=(d=="pos"?"-=":"+=")+c;k[f]=(d=="pos"?"+=":"-=")+c;a.animate(j,i/2,b.options.easing).animate(k,i/2,b.options.easing);c=h=="hide"?c*2:c/2}if(h=="hide"){g={opacity:0};g[f]=(d=="pos"?"-=":"+=")+c;a.animate(g,i/2,b.options.easing,function(){a.hide();e.effects.restore(a,l);e.effects.removeWrapper(a);
-b.callback&&b.callback.apply(this,arguments)})}else{j={};k={};j[f]=(d=="pos"?"-=":"+=")+c;k[f]=(d=="pos"?"+=":"-=")+c;a.animate(j,i/2,b.options.easing).animate(k,i/2,b.options.easing,function(){e.effects.restore(a,l);e.effects.removeWrapper(a);b.callback&&b.callback.apply(this,arguments)})}a.queue("fx",function(){a.dequeue()});a.dequeue()})}})(jQuery);
-;/*
- * jQuery UI Effects Clip 1.8.13
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Effects/Clip
- *
- * Depends:
- *	jquery.effects.core.js
- */
-(function(b){b.effects.clip=function(e){return this.queue(function(){var a=b(this),i=["position","top","bottom","left","right","height","width"],f=b.effects.setMode(a,e.options.mode||"hide"),c=e.options.direction||"vertical";b.effects.save(a,i);a.show();var d=b.effects.createWrapper(a).css({overflow:"hidden"});d=a[0].tagName=="IMG"?d:a;var g={size:c=="vertical"?"height":"width",position:c=="vertical"?"top":"left"};c=c=="vertical"?d.height():d.width();if(f=="show"){d.css(g.size,0);d.css(g.position,
-c/2)}var h={};h[g.size]=f=="show"?c:0;h[g.position]=f=="show"?0:c/2;d.animate(h,{queue:false,duration:e.duration,easing:e.options.easing,complete:function(){f=="hide"&&a.hide();b.effects.restore(a,i);b.effects.removeWrapper(a);e.callback&&e.callback.apply(a[0],arguments);a.dequeue()}})})}})(jQuery);
-;/*
- * jQuery UI Effects Drop 1.8.13
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Effects/Drop
- *
- * Depends:
- *	jquery.effects.core.js
- */
-(function(c){c.effects.drop=function(d){return this.queue(function(){var a=c(this),h=["position","top","bottom","left","right","opacity"],e=c.effects.setMode(a,d.options.mode||"hide"),b=d.options.direction||"left";c.effects.save(a,h);a.show();c.effects.createWrapper(a);var f=b=="up"||b=="down"?"top":"left";b=b=="up"||b=="left"?"pos":"neg";var g=d.options.distance||(f=="top"?a.outerHeight({margin:true})/2:a.outerWidth({margin:true})/2);if(e=="show")a.css("opacity",0).css(f,b=="pos"?-g:g);var i={opacity:e==
-"show"?1:0};i[f]=(e=="show"?b=="pos"?"+=":"-=":b=="pos"?"-=":"+=")+g;a.animate(i,{queue:false,duration:d.duration,easing:d.options.easing,complete:function(){e=="hide"&&a.hide();c.effects.restore(a,h);c.effects.removeWrapper(a);d.callback&&d.callback.apply(this,arguments);a.dequeue()}})})}})(jQuery);
-;/*
- * jQuery UI Effects Explode 1.8.13
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Effects/Explode
- *
- * Depends:
- *	jquery.effects.core.js
- */
-(function(j){j.effects.explode=function(a){return this.queue(function(){var c=a.options.pieces?Math.round(Math.sqrt(a.options.pieces)):3,d=a.options.pieces?Math.round(Math.sqrt(a.options.pieces)):3;a.options.mode=a.options.mode=="toggle"?j(this).is(":visible")?"hide":"show":a.options.mode;var b=j(this).show().css("visibility","hidden"),g=b.offset();g.top-=parseInt(b.css("marginTop"),10)||0;g.left-=parseInt(b.css("marginLeft"),10)||0;for(var h=b.outerWidth(true),i=b.outerHeight(true),e=0;e<c;e++)for(var f=
-0;f<d;f++)b.clone().appendTo("body").wrap("<div></div>").css({position:"absolute",visibility:"visible",left:-f*(h/d),top:-e*(i/c)}).parent().addClass("ui-effects-explode").css({position:"absolute",overflow:"hidden",width:h/d,height:i/c,left:g.left+f*(h/d)+(a.options.mode=="show"?(f-Math.floor(d/2))*(h/d):0),top:g.top+e*(i/c)+(a.options.mode=="show"?(e-Math.floor(c/2))*(i/c):0),opacity:a.options.mode=="show"?0:1}).animate({left:g.left+f*(h/d)+(a.options.mode=="show"?0:(f-Math.floor(d/2))*(h/d)),top:g.top+
-e*(i/c)+(a.options.mode=="show"?0:(e-Math.floor(c/2))*(i/c)),opacity:a.options.mode=="show"?1:0},a.duration||500);setTimeout(function(){a.options.mode=="show"?b.css({visibility:"visible"}):b.css({visibility:"visible"}).hide();a.callback&&a.callback.apply(b[0]);b.dequeue();j("div.ui-effects-explode").remove()},a.duration||500)})}})(jQuery);
-;/*
- * jQuery UI Effects Fade 1.8.13
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Effects/Fade
- *
- * Depends:
- *	jquery.effects.core.js
- */
-(function(b){b.effects.fade=function(a){return this.queue(function(){var c=b(this),d=b.effects.setMode(c,a.options.mode||"hide");c.animate({opacity:d},{queue:false,duration:a.duration,easing:a.options.easing,complete:function(){a.callback&&a.callback.apply(this,arguments);c.dequeue()}})})}})(jQuery);
-;/*
- * jQuery UI Effects Fold 1.8.13
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Effects/Fold
- *
- * Depends:
- *	jquery.effects.core.js
- */
-(function(c){c.effects.fold=function(a){return this.queue(function(){var b=c(this),j=["position","top","bottom","left","right"],d=c.effects.setMode(b,a.options.mode||"hide"),g=a.options.size||15,h=!!a.options.horizFirst,k=a.duration?a.duration/2:c.fx.speeds._default/2;c.effects.save(b,j);b.show();var e=c.effects.createWrapper(b).css({overflow:"hidden"}),f=d=="show"!=h,l=f?["width","height"]:["height","width"];f=f?[e.width(),e.height()]:[e.height(),e.width()];var i=/([0-9]+)%/.exec(g);if(i)g=parseInt(i[1],
-10)/100*f[d=="hide"?0:1];if(d=="show")e.css(h?{height:0,width:g}:{height:g,width:0});h={};i={};h[l[0]]=d=="show"?f[0]:g;i[l[1]]=d=="show"?f[1]:0;e.animate(h,k,a.options.easing).animate(i,k,a.options.easing,function(){d=="hide"&&b.hide();c.effects.restore(b,j);c.effects.removeWrapper(b);a.callback&&a.callback.apply(b[0],arguments);b.dequeue()})})}})(jQuery);
-;/*
- * jQuery UI Effects Highlight 1.8.13
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Effects/Highlight
- *
- * Depends:
- *	jquery.effects.core.js
- */
-(function(b){b.effects.highlight=function(c){return this.queue(function(){var a=b(this),e=["backgroundImage","backgroundColor","opacity"],d=b.effects.setMode(a,c.options.mode||"show"),f={backgroundColor:a.css("backgroundColor")};if(d=="hide")f.opacity=0;b.effects.save(a,e);a.show().css({backgroundImage:"none",backgroundColor:c.options.color||"#ffff99"}).animate(f,{queue:false,duration:c.duration,easing:c.options.easing,complete:function(){d=="hide"&&a.hide();b.effects.restore(a,e);d=="show"&&!b.support.opacity&&
-this.style.removeAttribute("filter");c.callback&&c.callback.apply(this,arguments);a.dequeue()}})})}})(jQuery);
-;/*
- * jQuery UI Effects Pulsate 1.8.13
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Effects/Pulsate
- *
- * Depends:
- *	jquery.effects.core.js
- */
-(function(d){d.effects.pulsate=function(a){return this.queue(function(){var b=d(this),c=d.effects.setMode(b,a.options.mode||"show");times=(a.options.times||5)*2-1;duration=a.duration?a.duration/2:d.fx.speeds._default/2;isVisible=b.is(":visible");animateTo=0;if(!isVisible){b.css("opacity",0).show();animateTo=1}if(c=="hide"&&isVisible||c=="show"&&!isVisible)times--;for(c=0;c<times;c++){b.animate({opacity:animateTo},duration,a.options.easing);animateTo=(animateTo+1)%2}b.animate({opacity:animateTo},duration,
-a.options.easing,function(){animateTo==0&&b.hide();a.callback&&a.callback.apply(this,arguments)});b.queue("fx",function(){b.dequeue()}).dequeue()})}})(jQuery);
-;/*
- * jQuery UI Effects Scale 1.8.13
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Effects/Scale
- *
- * Depends:
- *	jquery.effects.core.js
- */
-(function(c){c.effects.puff=function(b){return this.queue(function(){var a=c(this),e=c.effects.setMode(a,b.options.mode||"hide"),g=parseInt(b.options.percent,10)||150,h=g/100,i={height:a.height(),width:a.width()};c.extend(b.options,{fade:true,mode:e,percent:e=="hide"?g:100,from:e=="hide"?i:{height:i.height*h,width:i.width*h}});a.effect("scale",b.options,b.duration,b.callback);a.dequeue()})};c.effects.scale=function(b){return this.queue(function(){var a=c(this),e=c.extend(true,{},b.options),g=c.effects.setMode(a,
-b.options.mode||"effect"),h=parseInt(b.options.percent,10)||(parseInt(b.options.percent,10)==0?0:g=="hide"?0:100),i=b.options.direction||"both",f=b.options.origin;if(g!="effect"){e.origin=f||["middle","center"];e.restore=true}f={height:a.height(),width:a.width()};a.from=b.options.from||(g=="show"?{height:0,width:0}:f);h={y:i!="horizontal"?h/100:1,x:i!="vertical"?h/100:1};a.to={height:f.height*h.y,width:f.width*h.x};if(b.options.fade){if(g=="show"){a.from.opacity=0;a.to.opacity=1}if(g=="hide"){a.from.opacity=
-1;a.to.opacity=0}}e.from=a.from;e.to=a.to;e.mode=g;a.effect("size",e,b.duration,b.callback);a.dequeue()})};c.effects.size=function(b){return this.queue(function(){var a=c(this),e=["position","top","bottom","left","right","width","height","overflow","opacity"],g=["position","top","bottom","left","right","overflow","opacity"],h=["width","height","overflow"],i=["fontSize"],f=["borderTopWidth","borderBottomWidth","paddingTop","paddingBottom"],k=["borderLeftWidth","borderRightWidth","paddingLeft","paddingRight"],
-p=c.effects.setMode(a,b.options.mode||"effect"),n=b.options.restore||false,m=b.options.scale||"both",l=b.options.origin,j={height:a.height(),width:a.width()};a.from=b.options.from||j;a.to=b.options.to||j;if(l){l=c.effects.getBaseline(l,j);a.from.top=(j.height-a.from.height)*l.y;a.from.left=(j.width-a.from.width)*l.x;a.to.top=(j.height-a.to.height)*l.y;a.to.left=(j.width-a.to.width)*l.x}var d={from:{y:a.from.height/j.height,x:a.from.width/j.width},to:{y:a.to.height/j.height,x:a.to.width/j.width}};
-if(m=="box"||m=="both"){if(d.from.y!=d.to.y){e=e.concat(f);a.from=c.effects.setTransition(a,f,d.from.y,a.from);a.to=c.effects.setTransition(a,f,d.to.y,a.to)}if(d.from.x!=d.to.x){e=e.concat(k);a.from=c.effects.setTransition(a,k,d.from.x,a.from);a.to=c.effects.setTransition(a,k,d.to.x,a.to)}}if(m=="content"||m=="both")if(d.from.y!=d.to.y){e=e.concat(i);a.from=c.effects.setTransition(a,i,d.from.y,a.from);a.to=c.effects.setTransition(a,i,d.to.y,a.to)}c.effects.save(a,n?e:g);a.show();c.effects.createWrapper(a);
-a.css("overflow","hidden").css(a.from);if(m=="content"||m=="both"){f=f.concat(["marginTop","marginBottom"]).concat(i);k=k.concat(["marginLeft","marginRight"]);h=e.concat(f).concat(k);a.find("*[width]").each(function(){child=c(this);n&&c.effects.save(child,h);var o={height:child.height(),width:child.width()};child.from={height:o.height*d.from.y,width:o.width*d.from.x};child.to={height:o.height*d.to.y,width:o.width*d.to.x};if(d.from.y!=d.to.y){child.from=c.effects.setTransition(child,f,d.from.y,child.from);
-child.to=c.effects.setTransition(child,f,d.to.y,child.to)}if(d.from.x!=d.to.x){child.from=c.effects.setTransition(child,k,d.from.x,child.from);child.to=c.effects.setTransition(child,k,d.to.x,child.to)}child.css(child.from);child.animate(child.to,b.duration,b.options.easing,function(){n&&c.effects.restore(child,h)})})}a.animate(a.to,{queue:false,duration:b.duration,easing:b.options.easing,complete:function(){a.to.opacity===0&&a.css("opacity",a.from.opacity);p=="hide"&&a.hide();c.effects.restore(a,
-n?e:g);c.effects.removeWrapper(a);b.callback&&b.callback.apply(this,arguments);a.dequeue()}})})}})(jQuery);
-;/*
- * jQuery UI Effects Shake 1.8.13
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Effects/Shake
- *
- * Depends:
- *	jquery.effects.core.js
- */
-(function(d){d.effects.shake=function(a){return this.queue(function(){var b=d(this),j=["position","top","bottom","left","right"];d.effects.setMode(b,a.options.mode||"effect");var c=a.options.direction||"left",e=a.options.distance||20,l=a.options.times||3,f=a.duration||a.options.duration||140;d.effects.save(b,j);b.show();d.effects.createWrapper(b);var g=c=="up"||c=="down"?"top":"left",h=c=="up"||c=="left"?"pos":"neg";c={};var i={},k={};c[g]=(h=="pos"?"-=":"+=")+e;i[g]=(h=="pos"?"+=":"-=")+e*2;k[g]=
-(h=="pos"?"-=":"+=")+e*2;b.animate(c,f,a.options.easing);for(e=1;e<l;e++)b.animate(i,f,a.options.easing).animate(k,f,a.options.easing);b.animate(i,f,a.options.easing).animate(c,f/2,a.options.easing,function(){d.effects.restore(b,j);d.effects.removeWrapper(b);a.callback&&a.callback.apply(this,arguments)});b.queue("fx",function(){b.dequeue()});b.dequeue()})}})(jQuery);
-;/*
- * jQuery UI Effects Slide 1.8.13
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Effects/Slide
- *
- * Depends:
- *	jquery.effects.core.js
- */
-(function(c){c.effects.slide=function(d){return this.queue(function(){var a=c(this),h=["position","top","bottom","left","right"],f=c.effects.setMode(a,d.options.mode||"show"),b=d.options.direction||"left";c.effects.save(a,h);a.show();c.effects.createWrapper(a).css({overflow:"hidden"});var g=b=="up"||b=="down"?"top":"left";b=b=="up"||b=="left"?"pos":"neg";var e=d.options.distance||(g=="top"?a.outerHeight({margin:true}):a.outerWidth({margin:true}));if(f=="show")a.css(g,b=="pos"?isNaN(e)?"-"+e:-e:e);
-var i={};i[g]=(f=="show"?b=="pos"?"+=":"-=":b=="pos"?"-=":"+=")+e;a.animate(i,{queue:false,duration:d.duration,easing:d.options.easing,complete:function(){f=="hide"&&a.hide();c.effects.restore(a,h);c.effects.removeWrapper(a);d.callback&&d.callback.apply(this,arguments);a.dequeue()}})})}})(jQuery);
-;/*
- * jQuery UI Effects Transfer 1.8.13
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Effects/Transfer
- *
- * Depends:
- *	jquery.effects.core.js
- */
-(function(e){e.effects.transfer=function(a){return this.queue(function(){var b=e(this),c=e(a.options.to),d=c.offset();c={top:d.top,left:d.left,height:c.innerHeight(),width:c.innerWidth()};d=b.offset();var f=e('<div class="ui-effects-transfer"></div>').appendTo(document.body).addClass(a.options.className).css({top:d.top,left:d.left,height:b.innerHeight(),width:b.innerWidth(),position:"absolute"}).animate(c,a.duration,a.options.easing,function(){f.remove();a.callback&&a.callback.apply(b[0],arguments);
-b.dequeue()})})}})(jQuery);
-;

+ 0 - 209
web/js/lib/.svn/text-base/popup.js.svn-base

@@ -1,209 +0,0 @@
-/*
- * $Revision$
- * $Date$
- *
- * Copyright (C) 1999-2009 Jive Software. All rights reserved.
- *
- * This software is the proprietary information of Jive Software. Use is subject to license terms.
- */
-
-/*
-* $ lightbox_me
-* By: Buck Wilson
-* Version : 2.0
-*
-* Licensed under the Apache License, Version 2.0 (the "License");
-* you may not use this file except in compliance with the License.
-* You may obtain a copy of the License at
-*
-*     http://www.apache.org/licenses/LICENSE-2.0
-*
-* Unless required by applicable law or agreed to in writing, software
-* distributed under the License is distributed on an "AS IS" BASIS,
-* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-* See the License for the specific language governing permissions and
-* limitations under the License.
-*/
-
-
-(function($) {
-
-    $.fn.lightbox_me = function(options) {
-
-
-
-        return this.each(function() {
-
-            var
-                opts = $.extend({}, $.fn.lightbox_me.defaults, options),
-                $overlay = $('<div class="' + opts.classPrefix + '_overlay"/>'),
-                $self = $(this),
-
-                $iframe = $('<iframe src="' +  /^https/i.test(window.location.href || '') ? 'javascript:false' : 'about:blank' + '" style="z-index: ' + (opts.zIndex + 1) + '; display: none; border: none; margin: 0; padding: 0; position: absolute; width: 100%; height: 100%; top: 0; left: 0;"/>'),
-                ie6 = ($.browser.msie && $.browser.version < 7);
-
-
-            /*----------------------------------------------------
-               DOM Building
-            ---------------------------------------------------- */
-            if (ie6) { $('body').append($iframe) } // iframe shim for ie6, to hide select elements
-            $('body').append($self).append($overlay);
-
-
-            /*----------------------------------------------------
-               CSS stuffs
-            ---------------------------------------------------- */
-
-            // set css of the modal'd window
-
-            setSelfPosition();
-            $self.css({left: '50%', marginLeft: ($self.outerWidth() / 2) * -1,  zIndex: (opts.zIndex + 3) });
-
-
-            // set css of the overlay
-
-            setOverlayHeight(); // pulled this into a function because it is called on window resize.
-            $overlay
-                    .css({ position: 'absolute', width: '100%', top: 0, left: 0, right: 0, bottom: 0, zIndex: (opts.zIndex + 2), display: 'none' })
-                    .css(opts.overlayCSS);
-
-
-            /*----------------------------------------------------
-               Animate it in.
-            ---------------------------------------------------- */
-
-            $overlay.fadeIn(opts.overlaySpeed, function() {
-                $self[opts.appearEffect](opts.lightboxSpeed, function() { setOverlayHeight(); opts.onLoad()});
-            });
-
-
-
-            /*----------------------------------------------------
-               Bind Events
-            ---------------------------------------------------- */
-
-            $(window).resize(setOverlayHeight)
-                     .resize(setSelfPosition)
-                     .scroll(setSelfPosition)
-                     .keypress(observeEscapePress);
-            $self.find(opts.closeSelector).add($overlay).click(function() { closeLightbox(); return false; });
-            $self.bind('close', closeLightbox);
-            $self.bind('resize', setSelfPosition);
-
-            
-
-            /*--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
-              -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- */
-
-
-            /*----------------------------------------------------
-               Private Functions
-            ---------------------------------------------------- */
-
-            /* Remove or hide all elements */
-            function closeLightbox() {
-                if (opts.destroyOnClose) {
-                    $self.add($overlay).remove();
-                } else {
-                    $self.add($overlay).hide();
-                }
-
-                $iframe.remove();
-
-                $(window).unbind('resize', setOverlayHeight);
-                $(window).unbind('resize', setSelfPosition);
-
-                opts.onClose();
-            }
-
-
-            /* Function to bind to the window to observe the escape key press */
-            function observeEscapePress(e) {
-                if(e.keyCode == 27 || (e.DOM_VK_ESCAPE == 27 && e.which==0)) closeLightbox();
-            }
-
-
-            /* Set the height of the overlay
-                    : if the document height is taller than the window, then set the overlay height to the document height.
-                    : otherwise, just set overlay height: 100%
-            */
-            function setOverlayHeight() {
-                if ($(window).height() < $(document).height()) {
-                    $overlay.css({height: $(document).height() + 'px'});
-                } else {
-                    $overlay.css({height: '100%'});
-                    if (ie6) {$('html,body').css('height','100%'); } // ie6 hack for height: 100%; TODO: handle this in IE7
-                }
-            }
-
-
-            /* Set the position of the modal'd window ($self)
-                    : if $self is taller than the window, then make it absolutely positioned
-                    : otherwise fixed
-            */
-            function setSelfPosition() {
-                var s = $self[0].style;
-
-                if (($self.height() + 80  >= $(window).height()) && ($self.css('position') != 'absolute' || ie6)) {
-                    var topOffset = $(document).scrollTop() + 40;
-                    $self.css({position: 'absolute', top: topOffset + 'px', marginTop: 0})
-                    if (ie6) {
-                        s.removeExpression('top');
-                    }
-                } else if ($self.height()+ 80  < $(window).height()) {
-                    if (ie6) {
-                        s.position = 'absolute';
-                        if (opts.centered) {
-                            s.setExpression('top', '(document.documentElement.clientHeight || document.body.clientHeight) / 2 - (this.offsetHeight / 2) + (blah = document.documentElement.scrollTop ? document.documentElement.scrollTop : document.body.scrollTop) + "px"')
-                            s.marginTop = 0;
-                        } else {
-                            var top = (opts.modalCSS && opts.modalCSS.top) ? parseInt(opts.modalCSS.top) : 0;
-                            s.setExpression('top', '((blah = document.documentElement.scrollTop ? document.documentElement.scrollTop : document.body.scrollTop) + '+top+') + "px"')
-                        }
-                    } else {
-                        if (opts.centered) {
-                            $self.css({ position: 'fixed', top: '50%', marginTop: ($self.outerHeight() / 2) * -1})
-                        } else {
-                            $self.css({ position: 'fixed'}).css(opts.modalCSS);
-                        }
-
-                    }
-                }
-            }
-
-        });
-
-
-
-    };
-
-
-    $.fn.lightbox_me.defaults = {
-
-        // animation
-        appearEffect: "fadeIn",
-        overlaySpeed: 300,
-        lightboxSpeed: "fast",
-
-        // close
-        closeSelector: ".close",
-        closeClick: true,
-        closeEsc: true,
-
-        // behavior
-        destroyOnClose: false,
-
-        // callbacks
-        onLoad: function() {},
-        onClose: function() {},
-
-        // style
-        classPrefix: 'lb',
-        zIndex: 999,
-        centered: false,
-        modalCSS: {top: '40px'},
-        overlayCSS: {background: 'black', opacity: .6}
-    }
-
-
-})(jQuery);

+ 152 - 0
web/js/lib/custom-form-elements.js

@@ -1 +1,153 @@
+/*
 
+CUSTOM FORM ELEMENTS
+
+Created by Ryan Fait
+www.ryanfait.com
+
+The only things you may need to change in this file are the following
+variables: checkboxHeight, radioHeight and selectWidth (lines 24, 25, 26)
+
+The numbers you set for checkboxHeight and radioHeight should be one quarter
+of the total height of the image want to use for checkboxes and radio
+buttons. Both images should contain the four stages of both inputs stacked
+on top of each other in this order: unchecked, unchecked-clicked, checked,
+checked-clicked.
+
+You may need to adjust your images a bit if there is a slight vertical
+movement during the different stages of the button activation.
+
+The value of selectWidth should be the width of your select list image.
+
+Visit http://ryanfait.com/ for more information.
+
+*/
+
+var checkboxHeight = "25";
+var radioHeight = "25";
+var selectWidth = "210";
+
+
+/* No need to change anything after this */
+
+
+document.write('<style type="text/css">input.styled { display: none; } select.styled { position: relative; width: ' + selectWidth + 'px; opacity: 0; filter: alpha(opacity=0); z-index: 5; } .disabled { opacity: 0.5; filter: alpha(opacity=50); }</style>');
+
+var Custom = {
+	init: function() {
+		var inputs = document.getElementsByTagName("input"), span = Array(), textnode, option, active;
+		for(a = 0; a < inputs.length; a++) {
+			if((inputs[a].type == "checkbox" || inputs[a].type == "radio") && $(inputs[a]).hasClass("styled")) {
+				span[a] = document.createElement("span");
+				span[a].className = inputs[a].type;
+
+				if(inputs[a].checked == true) {
+					if(inputs[a].type == "checkbox") {
+						position = "0 -" + (checkboxHeight*2) + "px";
+						span[a].style.backgroundPosition = position;
+					} else {
+						position = "0 -" + (radioHeight*2) + "px";
+						span[a].style.backgroundPosition = position;
+					}
+				}
+				inputs[a].parentNode.insertBefore(span[a], inputs[a]);
+				inputs[a].onchange = Custom.clear;
+				if(!inputs[a].getAttribute("disabled")) {
+					span[a].onmousedown = Custom.pushed;
+					span[a].onmouseup = Custom.check;
+				} else {
+					span[a].className = span[a].className += " disabled";
+				}
+			}
+		}
+		inputs = document.getElementsByTagName("select");
+		for(a = 0; a < inputs.length; a++) {
+                    try{
+                        fb.log($(inputs[a]).hasClass("styled"));
+			if($(inputs[a]).hasClass("styled")) {
+				option = inputs[a].getElementsByTagName("option");
+				active = option[0].childNodes[0].nodeValue;
+				textnode = document.createTextNode(active);
+				for(b = 0; b < option.length; b++) {
+					if(option[b].selected == true) {
+						textnode = document.createTextNode(option[b].childNodes[0].nodeValue);
+					}
+				}
+				span[a] = document.createElement("span");
+				span[a].className = "select";
+				span[a].id = "select-" + inputs[a].name + a;
+				span[a].appendChild(textnode);
+				inputs[a].parentNode.insertBefore(span[a], inputs[a]);
+                                inputs[a].id = inputs[a].name + a;
+				if(!inputs[a].getAttribute("disabled")) {
+					inputs[a].onchange = Custom.choose;
+				} else {
+					inputs[a].previousSibling.className = inputs[a].previousSibling.className += " disabled";
+				}
+			}
+                    }catch(e){fb.error(e);}
+		}
+		document.onmouseup = Custom.clear;
+	},
+	pushed: function() {
+		element = this.nextSibling;
+		if(element.checked == true && element.type == "checkbox") {
+			this.style.backgroundPosition = "0 -" + checkboxHeight*3 + "px";
+		} else if(element.checked == true && element.type == "radio") {
+			this.style.backgroundPosition = "0 -" + radioHeight*3 + "px";
+		} else if(element.checked != true && element.type == "checkbox") {
+			this.style.backgroundPosition = "0 -" + checkboxHeight + "px";
+		} else {
+			this.style.backgroundPosition = "0 -" + radioHeight + "px";
+		}
+	},
+	check: function() {
+		element = this.nextSibling;
+		if(element.checked == true && element.type == "checkbox") {
+			this.style.backgroundPosition = "0 0";
+			element.checked = false;
+		} else {
+			if(element.type == "checkbox") {
+				this.style.backgroundPosition = "0 -" + checkboxHeight*2 + "px";
+			} else {
+				this.style.backgroundPosition = "0 -" + radioHeight*2 + "px";
+				group = this.nextSibling.name;
+				inputs = document.getElementsByTagName("input");
+				for(a = 0; a < inputs.length; a++) {
+					if(inputs[a].name == group && inputs[a] != this.nextSibling) {
+						inputs[a].previousSibling.style.backgroundPosition = "0 0";
+					}
+				}
+			}
+			element.checked = true;
+		}
+	},
+	clear: function() {
+		inputs = document.getElementsByTagName("input");
+		for(var b = 0; b < inputs.length; b++) {
+			if(inputs[b].type == "checkbox" && inputs[b].checked == true && inputs[b].className == "styled") {
+				inputs[b].previousSibling.style.backgroundPosition = "0 -" + checkboxHeight*2 + "px";
+			} else if(inputs[b].type == "checkbox" && inputs[b].className == "styled") {
+				inputs[b].previousSibling.style.backgroundPosition = "0 0";
+			} else if(inputs[b].type == "radio" && inputs[b].checked == true && inputs[b].className == "styled") {
+				inputs[b].previousSibling.style.backgroundPosition = "0 -" + radioHeight*2 + "px";
+			} else if(inputs[b].type == "radio" && inputs[b].className == "styled") {
+				inputs[b].previousSibling.style.backgroundPosition = "0 0";
+			}
+		}
+	},
+	choose: function() {
+		option = this.getElementsByTagName("option");
+		for(d = 0; d < option.length; d++) {
+			if(option[d].selected == true) {
+                            //
+                            var expr = '#select-' + this.id;
+                            fb.log(expr);
+                            $(expr).text(option[d].childNodes[0].nodeValue);
+                            // bad!
+                            //document.getElementById("select" + this.name).childNodes[0].nodeValue = option[d].childNodes[0].nodeValue;
+			}
+		}
+	}
+}
+window.onload = Custom.init;

+ 1 - 1
web/js/model.js

@@ -21,7 +21,7 @@ App.Model.WEB_DOMAIN.loadList = function()
 App.Model.MAIL.loadList = function()
 {
     //App.Ajax.request('MAIL.getList', {}, App.View.listItems);
-    App.Ref.CONTENT.html('<center><h1 style="padding-top: 20px; font-size: 28px; position: absolute; margin-left: 351px; color: white; text-shadow: 2px 1px 1px rgb(65, 124, 213);">Under maintanance</h1><img width="900px" src="http://dev.vestacp.com:8083/images/Asteroid_Vesta.jpg"></center>');
+    App.Ref.CONTENT.html('<center><h1 style="padding-top: 20px; font-size: 28px; position: absolute; margin-left: 351px; color: white; text-shadow: 2px 1px 1px rgb(65, 124, 213);">Under maintanance</h1><img width="900px" src="'+App.Helpers.generateUrl('images/Asteroid_Vesta.jpg')+'"></center>');
 }
 
 App.Model.DB.loadList = function()

+ 27 - 16
web/js/pages.js

@@ -1,11 +1,10 @@
-App.Pages.init = function(){
-    App.Ajax.request('MAIN.getInitial', {}, function(reply){
+App.Pages.init = function()
+{
+    App.Ajax.request('MAIN.getInitial', {}, function(reply) {
         App.Env.initialParams = reply.data;
         App.Helpers.updateInitial();
-    });
-        
-    App.Pages.prepareHTML();
-    
+    });    
+    App.Pages.prepareHTML();    
     $('.section.active').removeClass('active');
     $('#'+App.Env.world).addClass('active');
     
@@ -22,7 +21,8 @@ App.Pages.prepareHTML = function()
     else {        
         App.Model[App.Env.world].loadList();
     }
-    $('#new-entry-keyword').text(App.Env.world.toLowerCase().replace('_', ' '));
+    $('#new-entry-keyword').text(App.Helpers.getHumanTabName());
+    document.title = 'Vesta | ' + App.Helpers.getHumanTabName();
 }
 
 App.Pages.DNS.showSubform = function(ref) 
@@ -42,14 +42,6 @@ App.Pages.DNS.showSubform = function(ref)
     });
 }
 
-App.Pages.DNS.edit = function(elm) {
-    var options = elm.find('.source').val();
-    fb.warn(elm);
-    fb.warn(options);
-    var tpl = App.HTML.Build.dns_form(options);
-    elm.replaceWith(tpl);
-}
-
 App.Pages.USER.new_entry = function(evt)
 { 
     var form_id = App.Constants[App.Env.world + '_FORM_ID'];
@@ -70,12 +62,31 @@ App.Pages.WEB_DOMAIN.new_entry = function(evt)
     App.Ref.CONTENT.prepend(tpl);
     App.Helpers.updateScreen(); 
     $('#'+form_id).find('.ns-entry, .additional-ns-add').addClass('hidden');   
-    var ssl_key_upload = App.HTML.Build.ssl_key_file();
+    var ssl_key_upload  = App.HTML.Build.ssl_key_file();
     var ssl_cert_upload = App.HTML.Build.ssl_cert_file();
     $('#'+form_id).find('.ssl-key-input-dummy:first').replaceWith(ssl_key_upload);
     $('#'+form_id).find('.ssl-cert-input-dummy:first').replaceWith(ssl_cert_upload);
 }
 
+App.Pages.WEB_DOMAIN.edit = function(evt) 
+{      
+    var elm = $(evt.target);
+    elm = elm.hasClass('row') ? elm : elm.parents('.row');
+    
+    var options = elm.find('.source').val();    
+    var build_method = App.Env.getWorldName() + '_form';    
+    var tpl = App.HTML.Build[build_method](options);
+    // ssls uploads
+    var ssl_key_upload  = App.HTML.Build.ssl_key_file();
+    var ssl_cert_upload = App.HTML.Build.ssl_cert_file();
+    tpl = tpl.replace('<span class="ssl-key-input-dummy">...</span>', ssl_key_upload);
+    tpl = tpl.replace('<span class="ssl-cert-input-dummy">...</span>', ssl_cert_upload);
+    elm.replaceWith(tpl);
+    
+    App.Helpers.disableNotEditable();
+    App.Helpers.updateScreen();
+}
+
 App.Pages.WEB_DOMAIN.setSSL = function(type, frame)
 {
     var txt = App.Helpers.evalJSON(content);

+ 1 - 1
web/js/ref.js

@@ -1,4 +1,4 @@
 App.Ref.init = function(){
     App.Ref.CONSOLE_INPUT = $('#console').find('.b-console-field');
-    App.Ref.CONTENT = $('#content');
+    App.Ref.CONTENT = $('#content .content-inner');
 }

+ 180 - 99
web/js/templates.js

@@ -16,8 +16,9 @@ App.Templates.html = {
             "Well," the farmer said, "I didn\'t have anymore rope, so I took off my belt and tied her tail to the rafter. In that moment, my pants fell down and my wife walked in ... Some things you just can\'t explain."']
     },
     general: {
-        loading: ['<div id="loading" style="top: 0;font-size:19px;font-weight: bol;position:fixed;width: 150px; background-color:yellow;z-index: 9999; padding: 8px;left: 50%;margin-left:-75px;">\
-                <center>Loading...</center>\
+	over_bar: ['<span style="width:~!:OVER_PERCENTS~!%;right:-~!:OVER_PERCENTS_2~!%;" class="bar_overdraft"></span>'],
+        loading: ['<div id="loading" style="border-radius: 0 0 6px 6px;top: 0;font-size:19px;font-weight: bol;position:fixed;width: 150px; background-color:#6E6E62;z-index: 9999; padding: 8px;left: 50%;margin-left:-75px;">\
+                <center><div style="width: 105px; height:30px;background-image: url(\'../images/loading.png\');"></center>\
                 </div>'],
         popup: ['<div class="black_overlay" id="popup-bg"></div>\
                 <div class="popup_content" id="popup"><button class="do_action_close_popup">close</button>~!:content~!</div>'],
@@ -36,7 +37,74 @@ App.Templates.html = {
     },
     popup: {
         error: ['<div class="error"><center><h1 style="color: red;">Important: An Error Has Occured.</h1><hr></center>&nbsp;&nbsp;&nbsp;&nbsp;Something went wrong and some of your actions can be not saved in system. Mostly, it happens when you have network connection errors.<br>,&nbsp;&nbsp;&nbsp;&nbsp;However, please notify us about the situation. It would be helpfull if you will write us approximate time the error occured and last actions you were performing. You send your petition on <a href="mail_to">this email: BLABLA</a>,<br><br><center><span style="color: rgb(92, 92, 92);">Sorry for inconvinience. (We recommend you to reload the page)</span></center></div>'],
-        login: ['<div class="error" id="authorize-form"><center><h1 style="color: red;">Please authorize.</h1><hr><div id="auth-error" style="color:red"></div>Login: <input type="text" id="authorize-login" / ><br/>Password: <input type="password" id="authorize-password"/><br /><button class="do_action_do_authorize">Log in</button></center></center></div>']
+        change_psw: [
+            '<div id="change-psw-block" class="page2">\
+                <div class="b-auth-form">\
+                    <div class="b-auth-form-wrap">\
+                        <img width="72" height="24" alt="" src="~!:LOGO_URL~!" class="vesta-logo">\
+                        <div class="b-client-title">\
+                            <span class="client-title-wrap">~!:VERSION~!<i class="planets">&nbsp;</i></span>\
+                        </div>\
+                        <form id="change_psw-form" method="post" action="#" class="auth">\
+                            <div class="form-row cc">\
+                                <label for="change-email" class="field-label">Email</label>\
+                                <input type="text" tabindex="1" id="change-email" class="field-text">\
+                            </div>\
+                            <div class="form-row cc">\
+                                <label class="field-label"><img id="captcha-img" width="127px;" src="~!:CAPTCHA_URL~!"  style="cursor: pointer" onClick="this.src = \'~!:CAPTCHA_URL_2~!?\'+Math.floor(Math.random() * 9999)"/></label>\
+                                <input type="text" id="captcha" class="field-text" style="margin-left: 50px; width: 240px;">\
+                            </div>\
+                            <div id="change-psw-success" class="success-box hidden"></div>\
+                            <div id="change-psw-error" class="error-box hidden"></div>\
+                            <div class="form-row cc" style="width: 438px">\
+                                <div class="b-remember">\
+                                    <span class="remember-me">&nbsp;</span>\
+                                </div>\
+                                <input type="submit" tabindex="4" value="Send confirmation" class="sumbit-btn do_action_do_change_password">\
+                            </div>\
+                        </form>\
+                        <p class="forgot-pwd"><a href="#" class="forgot-pwd-url do_action_back_to_login">Back to login?</a></p>\
+                        <div class="footnotes cc">\
+                            <p class="additional-info">For questions please contact <a href="mailto:~!:EMAIL_REAL~!" class="questions-url">~!:EMAIL~!</a></p>\
+                            <address class="imprint">&copy; ~!:YEAR~! Vesta Control Panel</address>\
+                        </div>\
+                    </div>\
+                 </div>\
+            </div>'
+        ],
+        login: ['<div id="auth-block" class="page2">\
+        <div class="b-auth-form">\
+            <div class="b-auth-form-wrap">\
+                <img width="72" height="24" alt="" src="~!:LOGO_URL~!" class="vesta-logo">\
+                <div class="b-client-title">\
+                    <span class="client-title-wrap">~!:VERSION~!<i class="planets">&nbsp;</i></span>\
+                </div>\
+                <form id="login-form" method="post" action="#" class="auth">\
+                    <div class="form-row cc">\
+                        <label for="email" class="field-label">Email</label>\
+                        <input type="text" tabindex="1" id="authorize-login" class="field-text">\
+                    </div>\
+                    <div class="form-row cc">\
+                        <label for="password" class="field-label">Password</label>\
+                        <input type="password" tabindex="2" id="authorize-password" class="field-text">\
+                    </div>\
+                    <div id="auth-error" class="error-box hidden"></div>\
+                    <div class="form-row last-row cc">\
+                        <div class="b-remember">\
+                            <input type="checkbox" tabindex="3" value="1" name="remember_me" id="remember-me" class="remember-me ui-helper-hidden-accessible">\
+                            <label for="remember-me" class="remember-label ui-checkbox">remember me</label>\
+                        </div>\
+                        <input type="submit" tabindex="4" value="enter" class="sumbit-btn do_action_do_authorize">\
+                    </div>\
+                </form>\
+                <p class="forgot-pwd"><a href="#" class="forgot-pwd-url do_action_change_password">forgot password?</a></p>\
+                <div class="footnotes cc">\
+                    <p class="additional-info">For questions please contact <a href="mailto:~!:EMAIL_REAL~!" class="questions-url">~!:EMAIL~!</a></p>\
+                    <address class="imprint">&copy; ~!:YEAR~! Vesta Control Panel</address>\
+                </div>\
+            </div>\
+        </div>\
+    </div>']
     },
     dates: {
         'lock_plan_date' : ['<button class="do.savePlanDate(~!:task_id~!)">Lock plan dates</button><button class="do.lockPlanDate(~!:task_id~!)">Lock plan dates</button>'],
@@ -65,7 +133,7 @@ App.Templates.html = {
                     <div class="form-row dns-template-box cc">\
                             <label for="#" class="field-label">template:</label>\
                             <span class="select" id="selecttemplate">~!:TPL_DEFAULT_VALUE~!</span>\
-                                <select name="TPL" class="styled">\
+                                <select name="TPL" class="styled tpl-item">\
                                        ~!:TPL~!\
                                 </select>\
                             <span class="context-settings do_action_view_template_settings">View template settings</span>\
@@ -111,7 +179,8 @@ App.Templates.html = {
                                                         <span class="ip-adr">~!:IP~!</span>\
                                                         <span class="prop-box template-box">\
                                                                 <span class="prop-title">template:</span>\
-                                                                <span class="prop-value do_action_view_template_info">~!:TPL~!</span>\
+                                                                <input type="hidden" class="tpl-item" value="~!:TPL_VAL~!"/>\
+                                                                <span class="prop-value do_action_view_dns_template_settings">~!:TPL~!</span>\
                                                         </span>\
                                                 </div>\
                                         </div>\
@@ -155,7 +224,7 @@ App.Templates.html = {
                             <div class="field-box dns-type-box">\
                                     <label for="#" class="field-label">type:</label>\
                                     <!-- span class="select RECORD_TYPE" id="selectRECORD_TYPE">~!:RECORD_TYPE_VALUE~!</span -->\
-                                    <select name="RECORD_TYPE" class="not-styled" style="width:70px">\
+                                    <select name="RECORD_TYPE" class="styled">\
                                         ~!:RECORD_TYPE~!\
                                     </select>\
                             </div>\
@@ -180,14 +249,14 @@ App.Templates.html = {
                 </div>\
                 <div class="form-row cc">\
                         <label for="#" class="field-label">owner:</label>\
-                        <select name="OWNER" class="not-styled OWNER">\
+                        <select name="OWNER" class="styled OWNER">\
                                 ~!:owner_options~!\
                         </select>\
                 </div>\
                 <div class="form-row cc">\
                         <label for="#" class="field-label">status:</label>\
                         <!-- span class="select" id="select">shared</span -->\
-                        <select class="not-styled status" name="STATUS">\
+                        <select class="styled status" name="STATUS">\
                                 ~!:status_options~!\
                         </select>\
                 </div>\
@@ -198,7 +267,7 @@ App.Templates.html = {
                 <div class="form-row cc">\
                         <label for="#" class="field-label">interface:</label>\
                         <!-- span class="select" id="select">eth1</span -->\
-                        <select class="not-styled interface" name="INTERFACE">\
+                        <select class="styled interface" name="INTERFACE">\
                                 ~!:interface_options~!\
                         </select>\
                 </div>\
@@ -217,7 +286,7 @@ App.Templates.html = {
          '],
         DOT: ['<span class="dot">.</span>'],
         ENTRY: ['\
-            <div class="row first-row ip-details-row">\
+            <div class="row ip-details-row">\
                 <input type="hidden" class="source" name="source" value=\'~!:source~!\' />\
                 <input type="hidden" class="target" name="target" value="" />\
                 <div class="row-actions-box cc">\
@@ -228,7 +297,7 @@ App.Templates.html = {
                         </div>\
                 </div>\
                 <div class="row-meta">\
-                        <div class="ip-created">~!:DATE~!</div>\
+                        <div class="entry-created">~!:DATE~!</div>\
                 </div>\
                 <div class="row-details cc">\
                         <div class="ip-props-main">\
@@ -277,18 +346,27 @@ App.Templates.html = {
         SUSPENDED_TPL_DISABLED : ['<span class="ip-status-info ip-suspended-status do_action_delete_ip"><span class="ip-status-text">suspended</span></span>']
     },
     user: {
+        WEB_TPL_MINIMIZED: ['~!:WEB_TPL_MINI~!\
+                        <span class="group-switcher">\
+                            <span class="group-values-count do_action_view_full_ns_list">~!:MORE_NUMBER~! more</span>\
+                        </span><span class="hidden ns-full-list"><span class="group-values group-values__bullet">~!:WEB_TPL_FULL~!</span></span>'],
+        WEB_TPL: ['<span class="prop-value">~!:NAME~!</span>'],
         NS_MINIMIZED: ['~!:NS_MINI~!\
                         <span class="group-switcher">\
                             <span class="group-values-count do_action_view_full_ns_list">~!:MORE_NUMBER~! more</span>\
-                        </span><span class="hidden ns-full-list"><span class="group-values group-values__bullet">~!:NS_FULL~!</span></span>'],
-        /*NS_RECORD_POPUP_WRAP: ['<ul class="d-popup-items">~!:CONTENT~!</ul>'],
-        NS_RECORD_POPUP: ['<li class="item">~!:NAME~!</li>'],*/
+                        </span><span class="hidden ns-full-list"><span class="group-values group-values__bullet">~!:NS_FULL~!</span></span>'],        
         NS_RECORD: ['<span class="prop-value">~!:NAME~!</span>'],
-        NS_INPUT: ['<div class="form-row ns-entry cc"><label for="#" class="field-label">~!:NS_LABEL~!:</label>\
-                        <input type="text" value="~!:NAME~!" name="" class="text-field ns-input rule-required rule-ns">\
-                        <button class="do_action_delete_ns">Delete</button>\
-                    </div>'],
-        PLUS_ONE_NS: ['<button class="additional-ns-add do_action_add_form_ns">Add additional NS</button>'],
+        NS_INPUT: ['<div class="form-row ns-entry cc">\
+							<label for="#" class="field-label">~!:NS_LABEL~!:</label>\
+							<input type="text" value="~!:NAME~!" name="" class="text-field ns-input rule-required rule-ns">\
+							<b class="do_action_delete_ns delete-record"></b>\
+						</div>'],
+        PLUS_ONE_NS: ['<div class="form-row cc do_action_add_form_ns additional-ns-add">\
+							<a href="javascript:void(0);" class="add-ns do_action_add_form_ns">\
+								<i class="icon do_action_add_form_ns">&nbsp;</i>\
+								<span class="btn-title do_action_add_form_ns">Add additional NS</span>\
+							</a>\
+						</div>'],
         ENTRIES_WRAPPER: ['<div class="users-list items-list">~!:content~!</div>'],
         FORM:  ['<div id="~!:id~!" class="b-new-entry b-new-entry_user form">\
                         <input type="hidden" name="source" class="source" value=\'~!:source~!\'>\
@@ -307,19 +385,19 @@ App.Templates.html = {
 						</div>\
 						<div class="form-row cc">\
 							<label for="#" class="field-label">package:</label>\
-							<select name="PACKAGE" class="not-styled">\
+							<select name="PACKAGE" class="styled">\
 								~!:PACKAGE_OPTIONS~!\
 							</select>\
 						</div>\
                         <div class="form-row cc">\
 							<label for="#" class="field-label">shell:</label>\
-							<select class="not-styled" name="SHELL">\
+							<select class="styled" name="SHELL">\
 								~!:SHELL_OPTIONS~!\
 							</select>\
 						</div>\
 						<div class="form-row cc">\
 							<label for="#" class="field-label">role:</label>\
-							<select class="not-styled" name="ROLE">\
+							<select class="styled" name="ROLE">\
 								~!:ROLE_OPTIONS~!\
 							</select>\
 						</div>\
@@ -327,19 +405,19 @@ App.Templates.html = {
 							<label for="#" class="field-label">contact email:</label>\
 							<input type="text" name="CONTACT" class="text-field rule-email rule-required" value="~!:CONTACT~!">\
 						</div>\
-						<div class="form-row cc">\
+						<div class="form-row ~!:REPORTS_ENABLED_EDITABLE~! cc">\
 							<label for="#" class="field-label">reports:</label>\
-							<input type="checkbox" name="REPORTS_ENABLED" ~!:CHECKED~! class="not-styled" value="~!:REPORTS_ENABLED~!">\
+							<input type="checkbox" name="REPORTS_ENABLED" ~!:CHECKED~! class="styled" value="~!:REPORTS_ENABLED~!">\
 						</div>\
-                        <div class="form-row cc">\
+                    		<div class="form-row cc">\
 							<label for="#" class="field-label">Firstname:</label>\
-							<input type="text" name="FNAME" class="not-styled text-field rule-abc  rule-required" value="~!:FNAME~!">\
+							<input type="text" name="FNAME" class="text-field rule-abc  rule-required" value="~!:FNAME~!">\
 						</div>\
 						<div class="form-row cc">\
 							<label for="#" class="field-label">Lastname:</label>\
-							<input type="text" name="LNAME" class="not-styled text-field rule-abc rule-required" value="~!:LNAME~!">\
+							<input type="text" name="LNAME" class="text-field rule-abc rule-required" value="~!:LNAME~!">\
 						</div>\
-                        <div class="form-row ns-entry cc">\
+                        <!-- div class="form-row ns-entry cc">\
 							<label for="#" class="field-label">NS #1:</label>\
 							<input type="text" value="~!:NS1~!" name="NS1" class="text-field rule-required rule-ns">\
 						</div>\
@@ -347,14 +425,14 @@ App.Templates.html = {
 							<label for="#" class="field-label">NS #2:</label>\
 							<input type="text" value="~!:NS2~!" name="NS2" class="text-field rule-required rule-ns">\
 						</div>\
-                        ~!:NS~!\
+                        ~!:NS~!\ -->\
                         <div class="form-row buttons-row cc">\
 							<input type="submit" value="~!:save_button~!" name="save" class="add-entry-btn do_action_save_form">\
 							<span class="cancel-btn do_action_cancel_form">Cancel</span>\
 							<a class="help-btn" href="http://vestacp.com/docs/user/" target="_blank">Help</a>\
 						</div>\
 					</div>'],
-        ENTRY: ['<div class="row first-row user-details-row">\
+        ENTRY: ['<div class="row user-details-row">\
                     <input type="hidden" class="source" name="source" value=\'~!:source~!\' />\
                     <input type="hidden" class="target" name="target" value="" />\
 						<div class="row-actions-box cc">\
@@ -405,36 +483,39 @@ App.Templates.html = {
 									</div>\
 								</div>\
 								<!-- disk usage block -->\
-								<div class="b-usage-box disk-usage cc">\
-									<span class="prop-title">disk usage:</span>\
-									<div class="usage-box">\
-										<div class="value-box">\
-											<span class="value">~!:U_DISK~!</span>\
-											<div class="graph low">\
-												<span style="width:~!:U_DISK_PERCENTAGE~!%;" class="bar"></span>\
-											</div>\
-										</div>\
-										<div class="max-size">~!:DISK_QUOTA~!<span class="units">~!:DISK_QUOTA_MEASURE~!</span></div>\
-									</div>\
-								</div><!-- // disk usage block -->\
-								<!-- bandwidth usage block -->\
-								<div style="margin-bottom:25px;" class="b-usage-box bandwidth-box cc">\
-									<span class="prop-title">bandwidth:</span>\
-									<div class="usage-box" style="margin-left: -1px">\
-										<div class="value-box">\
-											<span class="value">~!:U_BANDWIDTH~!</span>\
-											<div class="graph low">\
-												<span style="width:~!:U_BANDWIDTH_PERCENTAGE~!%;" class="bar"></span>\
-											</div>\
-										</div>\
-										<div class="max-size">~!:BANDWIDTH~!<span class="units">~!:BANDWIDTH_MEASURE~!</span></div>\
-									</div>\
-								</div><!-- // bandwidth usage block -->\
-								<!-- disk usage block -->\
-								 <!-- // disk usage block -->\
-								<!-- bandwidth usage block -->\
-								 <!-- // bandwidth usage block -->\
-                                 </div>\
+                                \
+                                <div class="b-stats-box">\
+									<div class="stats-box-title">stats</div>	\
+                                    <!-- disk usage block -->\
+                                    <div class="b-usage-box2 disk-usage cc">\
+                                        <span class="prop-title">disk usage:</span>\
+                                        <div class="usage-box ~!:OVER_DRAFT_VALUE~!">\
+                                            <div class="value-box">\
+                                                <div class="graph">\
+                                                    <span style="left:~!:U_DISK_PERCENTAGE_2~!%;" class="value">~!:U_DISK_PERCENTAGE~!% <span class="value-size">(~!:U_DISK~! ~!:DISK_QUOTA_MEASURE~!)</span></span>\
+                                                    <span style="width:~!:U_DISK_PERCENTAGE_3~!%;" class="bar"></span>\
+                                                    ~!:OVER_BAR~!\
+                                                </div>\
+                                            </div>\
+                                            <div class="max-size">~!:DISK_QUOTA~! <span class="units">~!:DISK_QUOTA_MEASURE_2~!</span></div>\
+                                        </div>\
+                                    </div><!-- // disk usage block -->\
+								</div>\
+                                \
+                                <div class="b-usage-box2 bandwidth-box cc">\
+                                        <span class="prop-title">bandwidth:</span>\
+                                        <div class="usage-box">\
+                                            <div class="value-box ~!:OVER_DRAFT_VALUE_2~!">\
+                                                <div class="graph">\
+                                                    <span style="left:~!:U_BANDWIDTH_PERCENTAGE_2~!%;" class="value">~!:U_BANDWIDTH_PERCENTAGE~!% <span class="value-size">(~!:U_BANDWIDTH~! ~!:BANDWIDTH_MEASURE~!)</span></span>\
+                                                    <span style="width:~!:U_BANDWIDTH_PERCENTAGE_3~!%;" class="bar"></span>\
+                                                    ~!:OVER_BAR_2~!\
+                                                </div>\
+                                            </div>\
+                                            <div class="max-size">~!:BANDWIDTH~! <span class="units">~!:BANDWIDTH_MEASURE_2~!</span></div>\
+                                        </div>\
+                                    </div>\
+                            </div>\
 							<div class="props-additional">\
 								<span class="prop-box websl-box">\
 									<span class="prop-title">web ssl:</span>\
@@ -507,14 +588,14 @@ App.Templates.html = {
 						<div class="form-row cc">\
 							<label for="#" class="field-label">ip:</label>\
 							<div class="">\
-								<select name="IP">\
+								<select name="IP" class="styled">\
                                 ~!:IP_OPTIONS~!\
                                 </select>\
 							</div>\
 						</div>\
 						<div class="form-row cc adv_opts">\
 								<label for="#" class="field-label">template:</label>\
-								<select class="not-styled" name="TPL">\
+								<select class="styled" name="TPL">\
 								~!:TPL_OPTIONS~!\
 								</select>\
 							</div>\
@@ -528,24 +609,24 @@ App.Templates.html = {
                             <div class="sub_section hidden">\
 							<div class="form-row cc">\
 								<label for="#" class="field-label">CGI:</label>\
-								<input type="checkbox" value="~!:CGI~!" ~!:CHECKED_CGI~! name="CGI" class="not-styled">\
+								<input type="checkbox" value="~!:CGI~!" ~!:CHECKED_CGI~! name="CGI" class="styled">\
 							</div>\
                         <div class="form-row cc">\
 								<label for="#" class="field-label">ELOG:</label>\
-								<input type="checkbox" value="~!:ELOG~!" ~!:CHECKED_ELOG~! name="ELOG" class="not-styled">\
+								<input type="checkbox" value="~!:ELOG~!" ~!:CHECKED_ELOG~! name="ELOG" class="styled">\
 							</div>\
                             <div class="form-row cc">\
 								<label for="#" class="field-label">alias list:</label>\
-								<textarea name="ALIAS" class="textarea">~!:ALIAS~!</textarea>\
+								<textarea name="ALIAS" class="textarea rule-alias">~!:ALIAS~!</textarea>\
 							</div>\
 							<div class="form-row cc">\
 								<label for="#" class="field-label">statistics:</label>\
-								<select name="STAT">~!:STAT_OPTIONS~!</select>\
+								<select name="STAT" class="styled">~!:STAT_OPTIONS~!</select>\
 							</div>\
 							<div class="stats-settings">\
 								<div class="form-row cc">\
 									<label for="#" class="field-label">stats auth:</label>\
-									<input id="stats-auth-enable" type="checkbox" name="STATS_AUTH" ~!:stats_auth_checked~!="" value="~!:STATS_AUTH~!" class="not-styled do_action_toggle_stats_block">\
+									<input id="stats-auth-enable" type="checkbox" name="STATS_AUTH" ~!:stats_auth_checked~!="" value="~!:STATS_AUTH~!" class="styled do_action_toggle_stats_block">\
 								</div>\
 								<div class="form-row stats-block ~!:ACTIVE_LOGIN~! cc">\
 									<label for="#" class="field-label">stats login:</label>\
@@ -586,7 +667,7 @@ App.Templates.html = {
 							<div class="sub_section hidden">\
                             <div class="form-row cc">\
 								<label for="#" class="field-label">create dns domain:</label>\
-								<input type="checkbox" value="~!:DNS~!" ~!:CHECKED_DNS~! name="DNS" class="not-styled">\
+								<input type="checkbox" value="~!:DNS~!" ~!:CHECKED_DNS~! name="DNS" class="styled">\
 							</div>\
 						</div><!-- DNS options -->\
 						<div class="form-options-group hidden">\
@@ -598,7 +679,7 @@ App.Templates.html = {
 							<div class="sub_section hidden">\
                                 <div class="form-row cc">\
                                     <label for="#" class="field-label">create mail domain:</label>\
-                                    <input type="checkbox" value="~!:MAIL~!" ~!:CHECKED_MAIL~! name="MAIL" class="not-styled">\
+                                    <input type="checkbox" value="~!:MAIL~!" ~!:CHECKED_MAIL~! name="MAIL" class="styled">\
                                 </div>\
                             </div>\
                         </div>\
@@ -610,7 +691,7 @@ App.Templates.html = {
 						</div>\
 					</div>'],
         ENTRIES_WRAPPER: ['<div class="domains-list items-list">~!:content~!</div>'],
-        ENTRY: ['<div class="row first-row domain-details-row">\
+        ENTRY: ['<div class="row domain-details-row">\
                         <input type="hidden" class="source" name="source" value=\'~!:source~!\' />\
                         <input type="hidden" class="target" name="target" value="" />\
 						<div class="row-actions-box cc">\
@@ -634,7 +715,7 @@ App.Templates.html = {
 									<span class="ip-adr">~!:IP~!</span>\
 									<span class="prop-box template-box">\
 										<span class="prop-title">template:</span>\
-										<span class="prop-value">~!:TPL~!</span>\
+										<span class="prop-value tpl-item do_action_view_template_settings">~!:TPL~!</span>\
 									</span>\
 								</div>\
 								<!-- disk usage block -->\
@@ -721,7 +802,7 @@ App.Templates.html = {
 						</div>\
 						<div class="form-row cc">\
 							<label for="#" class="field-label">db type:</label>\
-							<select name="TYPE" class="not-styled">~!:TYPE_OPTIONS~!</select>\
+							<select name="TYPE" class="styled">~!:TYPE_OPTIONS~!</select>\
 						</div>\
 						<div class="form-row cc">\
 							<label for="#" class="field-label">db name:</label>\
@@ -740,7 +821,7 @@ App.Templates.html = {
 						</div>\
 						<div class="form-row hidden cc">\
 							<label for="#" class="field-label">db host:</label>\
-							<select name="HOST">~!:HOST_OPTIONS~!</select>\
+							<select name="HOST" class="styled">~!:HOST_OPTIONS~!</select>\
 						</div>\
 						<div class="form-row buttons-row cc">\
 							<input type="submit" value="~!:save_button~!" class="add-entry-btn do_action_save_form">\
@@ -748,7 +829,7 @@ App.Templates.html = {
 							<a target="_blank" href="http://vestacp.com/docs/db/" class="help-btn">Help</a>\
 						</div>\
 					</div>'],
-        ENTRY: ['<div class="row ~!:FIRST_ROW_CLASS~! db-details-row">\
+        ENTRY: ['<div class="row db-details-row">\
 						<input type="hidden" name="source" class="source" value=\'~!:source~!\'>\
                         <input type="hidden" name="target" class="target" value=\'\'>\
                         <div class="row-actions-box cc">\
@@ -854,8 +935,8 @@ App.Templates.html = {
 							<a target="_blank" href="http://vestacp.com/docs/cron/" class="help-btn">Help</a>\
 						</div>\
 					</div>'],
-        ENTRIES_WRAPPER: ['<div class="db-list">~!:content~!</div>'],
-        ENTRY: ['<div class="row first-row cron-details-row">\
+        ENTRIES_WRAPPER: ['<div class="cron-list">~!:content~!</div>'],
+        ENTRY: ['<div class="row cron-details-row">\
 						<input type="hidden" name="source" class="source" value=\'~!:source~!\'>\
                         <input type="hidden" name="target" class="target" value=\'\'>\
                         <div class="row-actions-box cc">\
@@ -898,9 +979,7 @@ App.Templates.html = {
 								<span class="prop-box cron-report-box">\
 									<span class="prop-title">reported to:</span>\
 									<span class="prop-value">naumov.socolov@gmail.com,</span>\
-									<span class="prop-value">vasysualiy.pupkin@gmail.com,</span>\
-									<span class="prop-value">na-derevniu-dedushke@dachniy-poselok-za-mkadom.com,</span>\
-									<span class="prop-value">vasysualiy.pupkin@gmail.com</span>\
+                                    <span class="prop-value">naumov.socolov@gmail.com,</span>\
 								</span>\
 							</div>\
 						</div><!-- // .row-details -->\
@@ -912,23 +991,23 @@ App.Templates.html = {
 
 // Internals
 var Tpl = App.Templates;
-
-var Templator = function(){
-    var init = function(){
+var Templator = function()
+{
+    var init = function() {
         fb.info('Templator work');
         Templator.splitThemAll();
         Templator.freezeTplIndexes();        
     };
 
-
     /**
      * Split the tpl strings into arrays
      */
-    Templator.splitThemAll = function(){
+    Templator.splitThemAll = function()
+    {
         fb.info('splitting tpls');
-        $.each(App.Templates.html, function(o){
+        $.each(App.Templates.html, function(o) {
             var tpls = App.Templates.html[o];
-            $.each(tpls, function(t){
+            $.each(tpls, function(t) {
                 tpls[t] = tpls[t][0].split('~!');
             });
         });
@@ -937,7 +1016,8 @@ var Templator = function(){
     /**
      * Iterates tpls
      */
-    Templator.freezeTplIndexes = function(){
+    Templator.freezeTplIndexes = function()
+    {
         fb.info('freezing tpl keys');
         $.each(App.Templates.html, Templator.cacheTplIndexes);
     },
@@ -945,10 +1025,10 @@ var Templator = function(){
     /**
      * Grab the tpl group key and process it
      */
-    Templator.cacheTplIndexes = function(key){
+    Templator.cacheTplIndexes = function(key)
+    {
         var tpls = App.Templates.html[key];
-
-        $.each(tpls, function(o){
+        $.each(tpls, function(o) {
             var tpl = tpls[o];
             Templator.catchIndex(key, o, tpl);
         });
@@ -957,11 +1037,11 @@ var Templator = function(){
     /**
      * Set the indexes
      */
-    Templator.catchIndex = function(key, ref_key, tpl){
-        'undefined' == typeof App.Templates._indexes[key] ? App.Templates._indexes[key] = {} : false;
+    Templator.catchIndex = function(key, ref_key, tpl)
+    {
+        'undefined' == typeof App.Templates._indexes[key]          ? App.Templates._indexes[key]          = {} : false;
         'undefined' == typeof App.Templates._indexes[key][ref_key] ? App.Templates._indexes[key][ref_key] = {} : false;
-
-        $(tpl).each(function(index, o){
+        $(tpl).each(function(index, o) {
             if(':' == o.charAt(0)){
                 App.Templates._indexes[key][ref_key][o.toString()] = index;
             }
@@ -974,15 +1054,16 @@ var Templator = function(){
     init();
     return Templator;
 };
-Templator.getTemplate = function(ns, key){
+Templator.getTemplate = function(ns, key)
+{
     return [
-    App.Templates._indexes[ns][key],
-    App.Templates.html[ns][key].slice(0)
+        App.Templates._indexes[ns][key],
+        App.Templates.html[ns][key].slice(0)
     ];
 }
 // init templator
 Tpl.Templator = Templator();
-
-Tpl.get = function(key, group){
+Tpl.get = function(key, group)
+{
     return Tpl.Templator.getTemplate(group, key);
 }

+ 18 - 20
web/js/validators.js

@@ -1,21 +1,5 @@
-/*App.Validate.form = function(values){
-    if(values.IP_ADDRESS == '') {
-        return alert('Not correct ip');
-    }
-    
-    return true;
-}*/
-
-App.Validate.Is = {
-    ip: function(object) {
-        var ip_regexp = new RegExp(/\b(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\b/);
-        return ip_regexp.test() ? false : App.i18n.getMessage('incorrect_ip');
-    }
-};
-
 App.Validate.getFieldName = function(elm)
 {
-    fb.log(elm);
     var txt_label = $(elm).prev('label').text();
     if (txt_label.trim() == '') {
         txt_label = $(elm).parents('.field-box').select('label:first').text();
@@ -25,9 +9,20 @@ App.Validate.getFieldName = function(elm)
 }
 
 App.Validate.Rule = {
+    'alias' : function(elm) {   
+        if (!!$('#stats-auth-enable').attr('checked') == true) {
+            if ($(elm).val().trim() == '' || $(elm).val().search(/[^a-zA-Z\.\-\*\,\ ]+/) != -1) {
+                return {VALID: false, ERROR: App.Validate.getFieldName(elm) + ' is invalid'};
+            }
+            if ($(elm).val().trim() != '' && $(elm).val().length > App.Settings.FIELD_MAX_LEN) {
+                return {VALID: false, ERROR: App.Validate.getFieldName(elm) + ' too long'};
+            }
+        }
+        return {VALID: true};
+    },
     'statslogin' : function(elm) {   
         if (!!$('#stats-auth-enable').attr('checked') == true) {
-            if ($(elm).val().trim() == '' || $(elm).val().search(/[^a-zA-Z_]+/) != -1) {
+            if ($(elm).val().trim() == '' || $(elm).val().search(/[^a-zA-Z_0-9]+/) != -1) {
                 return {VALID: false, ERROR: App.Validate.getFieldName(elm) + ' is invalid'};
             }
             if ($(elm).val().trim() != '' && $(elm).val().length > App.Settings.FIELD_MAX_LEN) {
@@ -44,11 +39,14 @@ App.Validate.Rule = {
             if ($(elm).val().trim() != '' && $(elm).val().length > App.Settings.FIELD_MAX_LEN) {
                 return {VALID: false, ERROR: App.Validate.getFieldName(elm) + ' too long'};
             }
+            if ($(elm).val().trim() != '' && $(elm).val().length < App.Settings.PSW_MIN_LEN) {
+                return {VALID: false, ERROR: App.Validate.getFieldName(elm) + ' too short'};
+            }
         }
         return {VALID: true};
     },
     'username' : function(elm) {   
-        if ($(elm).val().trim() != '' && $(elm).val().search(/[^a-zA-Z_]+/) != -1) {
+        if ($(elm).val().trim() != '' && $(elm).val().search(/[^a-zA-Z_0-9\.\-]+/) != -1) {
             return {VALID: false, ERROR: App.Validate.getFieldName(elm) + ' is invalid'};
         }
         if ($(elm).val().trim() != '' && $(elm).val().length > App.Settings.FIELD_MAX_LEN) {
@@ -100,13 +98,13 @@ App.Validate.Rule = {
         return {VALID: true};
     },
     'domain':         function(elm) {        
-        if ($(elm).val().trim() != '' && (/^([a-z0-9\.])*[a-z0-9][a-z0-9\-]+[a-z0-9](\.[a-z]{2,4})+$/).test($(elm).val()) == false) {
+        if ($(elm).val().trim() != '' && $(elm).val().search(/[^a-zA-Z0-9\.\-\*]+/) != -1) {
             return {VALID: false, ERROR: App.Validate.getFieldName(elm) + ' not a valid domain name'};
         }
         return {VALID: true};
     },
     'ns':         function(elm) {        
-        if ($(elm).val().trim() != '' && (/^([a-z0-9\.])*[a-z0-9][a-z0-9\-]+[a-z0-9](\.[a-z]{2,4})+$/).test($(elm).val()) == false) {
+        if ($(elm).val().trim() != '' && $(elm).val().search(/[^a-zA-Z0-9\.\-\*]+/) != -1) {
             return {VALID: false, ERROR: App.Validate.getFieldName(elm) + ' not a valid NS name'};
         }
         if ($(elm).val().trim() == '' && $(elm).val().length > App.Settings.FIELD_MAX_LEN) {

+ 0 - 58
web/js/view.js

@@ -40,61 +40,3 @@ App.View.listItems = function(reply){
     App.Ref.CONTENT.html(html);
     App.Helpers.updateScreen();
 }
-/*App.View.start = function(){
-    
-};
-
-App.View.showDatabases = function(databases){
-    var tpl = App.HTML.makeDatabases(databases);
-    $('#navigation').html(tpl.wrapperize('database_wrap', 'database'));
-}
-
-App.View.openDatabase = function(data, ref, db_name){
-    var tpl = App.HTML.makeDbTableList(data);
-    $('.databases .tables').remove();
-    $('.databases .active').removeClass('active');
-    $(ref).after(tpl.wrapperize('database_table_wrap', 'database'));
-    
-    $(ref).attr('className', 'active do.closeDatabase('+db_name+')"');
-}
-
-App.View.openTable = function(data, ref, table_name){
-    var tpl = App.HTML.makeDbFieldsList(data);
-    $(ref).next('.fields').remove();
-    $(ref).after(tpl.wrapperize('database_field_wrap', 'database'));
-    
-    $(ref).attr('className', 'active do.closeTable('+table_name+')"');
-    
-    App.Helpers.updateScreen();
-}
-
-App.View.resultReturned = function(reply){
-    if(reply.result){
-        $('#results').text(reply.data);
-    }else{
-        $('#results').text(reply.message);
-    }
-}
-
-App.View.Pages.IP.list = function(reply){
-    var acc = [];
-    $(reply.data).each(function(i, o){
-        acc[acc.length++] = App.HTML.Build.ip_entry(o);
-    });
-    
-    var html = acc.done().wrapperize('ENTRIES_WRAPPER', 'ip');
-    App.Ref.CONTENT.html(html);
-    App.Helpers.updateScreen();
-}
-
-App.View.Pages.DNS.list = function(reply){
-    var acc = [];
-    $(reply.data).each(function(i, o){
-        acc[acc.length++] = App.HTML.Build.dns_entry(o);
-    });
-    
-    var html = acc.done().wrapperize('ENTRIES_WRAPPER', 'dns');
-    App.Ref.CONTENT.html(html);
-    App.Helpers.updateScreen();
-}
-*/

+ 21 - 8
web/vesta/api/AjaxHandler.php

@@ -41,10 +41,19 @@ class AjaxHandler {
      */
     public function dispatch(Request $request) 
     {
+        VestaSession::start();
+        
+        $allowed_actions = array(
+                                'MAIN.signin', 
+                                'MAIN.logout', 
+                                'MAIN.requestpassword',
+                                'MAIN.resetpassword',
+                                'MAIN.about');
         $method = Request::parseAjaxMethod($request);
-	if (!in_array($method['namespace'].'.'.$method['function'], array('MAIN.signin', 'MAIN.logout'))) {
-	    $user = $this->getLoggedUser();
-	}
+        
+        if (!in_array($method['namespace'].'.'.$method['function'], $allowed_actions)) {
+            $user = $this->getLoggedUser();
+        }
 
         $inc_file = V_ROOT_DIR . 'api' . DIRECTORY_SEPARATOR . $method['namespace'] . '.class.php';
         if (!is_readable($inc_file)) {
@@ -67,7 +76,7 @@ class AjaxHandler {
      */
     public function reply($result, $data, $message = '', $extra = array()) 
     {
-      return json_encode(array('result' => $result,
+        return json_encode(array('result' => $result,
                    'data' => $data,
                    'message' => $message,
                    'extra' => $extra,
@@ -84,19 +93,23 @@ class AjaxHandler {
     // Error handlers
     //
     
-    static function generalError($error) {
+    static function generalError($error) 
+    {
         self::renderGlobalError(Message::ERROR, Message::GENERAL_ERROR, $error);
     }
 
-    static function protectionError($error) {
+    static function protectionError($error) 
+    {
         self::renderGlobalError(Message::ERROR, Message::PROTECTION_ERROR, $error);
     }
 
-    static function systemError($error) {
+    static function systemError($error) 
+    {
         self::renderGlobalError(Message::ERROR, Message::SYSTEM_ERROR, $error);
     }
 
-    static function renderGlobalError($type, $message, $error) {
+    static function renderGlobalError($type, $message, $error) 
+    {
         /*$trace = $error->getTrace();
         AjaxHandler::makeReply(
                         AjaxHandler::getInstance()->reply(false, $type, $message . ': ' . $error->getMessage(), $trace[0]['file'] . ' / ' . $trace[0]['line'])

+ 8 - 3
web/vesta/api/DNS.class.php

@@ -369,9 +369,14 @@ class DNS extends AjaxHandler
 
     public function getTemplateInfoExecute($request)
     {
-	$spell = $request->getParameter('spell');
-	$result = Vesta::execute('v_list_sys_user_packages', null, self::TEXT);
-	return $this->reply(true, $result['data']);
+        $spell  = $request->getParameter('spell');
+        $result = Vesta::execute('v_list_sys_user_packages', null, self::JSON);
+        $reply = $result['data'];
+        if (isset($spell['PACKAGE'])) {
+            $reply = $result['data'][$spell['PACKAGE']];
+        }
+        
+        return $this->reply(true, $reply);
     }
 
 }

+ 198 - 110
web/vesta/api/MAIN.class.php

@@ -19,35 +19,114 @@ class MAIN extends AjaxHandler
 
     protected $templates = null;
 
-    /**
-     * Get Version
-     * 
-     * @param Request $request
-     * @return string - Ajax Reply
-     */ 
-    public function versionExecute(Request $request) 
+    public function aboutExecute($request)
     {
-        $result = array(
-                    'version' => '1.0',
-                    'author'  => 'http://vestacp.com/',
-                    'docs'    => 'http://vestacp.com/docs'
-                  );
+        $about  = array('version' => '0', 'company_email' => 'support@vestacp.com', 
+                        'version_name' => 'OGRE-23-1', 'company_name' => 'vestacp.com');
+        $config = Vesta::execute(Vesta::V_LIST_SYS_CONFIG, 'json');
+        if (!empty($config['data']) && !empty($config['data']['config'])) {
+            $config = $config['data']['config'];
+            $about['version'] = $config['VERSION'];
+            $about['version_name']  = $config['VERSION_NAME'];
+            $about['company_email'] = $config['COMPANY_EMAIL'];
+            $about['company_name']  = $config['COMPANY_NAME'];
+        }
+        
+        return $this->reply(true, $about);
+    }
+
+    public function requestPasswordExecute($request)
+    {        
+        if (empty($_SESSION['captcha_key']) 
+                || $_SESSION['captcha_key'] != $request->getParameter('captcha')) {
+            return $this->reply(false, null, 'Captcha is invalid ');
+        }
+        
+        // TODO: captcha
+        $users = Vesta::execute(Vesta::V_LIST_SYS_USERS, 'json');
+        $email_matched_count = array();
+        
+        if (!preg_match("/^([a-zA-Z0-9])+([a-zA-Z0-9\._-])*@([a-zA-Z0-9_-])+([a-zA-Z0-9\._-]+)+$/",$request->getParameter('email'))) {
+            return $this->reply(false, null, 'Email is invalid');
+        }
+        
+        foreach ($users['data'] as $user) {           
+            if ($user['CONTACT'] == trim($request->getParameter('email'))) {
+                $email_matched_count[] = $user;
+            }
+        }
+        
+        if (empty($email_matched_count)) {
+            return $this->reply(false, null, 'There is no such user.');
+        }
 
-        return $this->reply(true, $result);
+        $secret_key = $this->generateResetPasswordKey();
+        $reset_link = 'https://'.$_SERVER['HTTP_HOST'].'/change_password.php?v='.$secret_key;
+        
+        $mail_body = <<<MAIL
+            <div lang="en" style="background-color:#fff;color:#222">  
+                <a target="_blank" href="" style="color:#FFF">
+                    <img width="81" height="22" style="display:block;border:0" src="http://vestacp.com/i/logo.png" alt="Twitter">
+                </a>  
+                <div style="font-family:'Helvetica Neue', Arial, Helvetica, sans-serif;font-size:13px;margin:14px">
+                <h2 style="font-family:'Helvetica Neue', Arial, Helvetica, sans-serif;margin:0 0 16px;font-size:18px;font-weight:normal">
+                    Vesta received a request to reset the password for your account {$user['FNAME']} {$user['LNAME']}?
+                </h2>
+                <p>
+                    If you want to reset your password, click on the link below (or copy and paste the URL into your browser):<br>
+                    <a target="_blank" href="{$reset_link}">{$reset_link}</a>
+                </p>
+                <p>
+                    If you don't want to reset your password, please ignore this message.
+                    Your password will not be reset.
+                    If you have any concerns, please contact us at support@vestacp.com.
+                </p>
+                <p style="font-family:'Helvetica Neue', Arial, Helvetica, sans-serif;font-size:13px;line-height:18px;border-bottom:1px solid rgb(238, 238, 238);padding-bottom:10px;margin:0 0 10px">
+                    <span style="font:italic 13px Georgia,serif;color:rgb(102, 102, 102)">VestaCP</span>
+                </p>
+                <p style="font-family:'Helvetica Neue', Arial, Helvetica, sans-serif;margin-top:5px;font-size:10px;color:#888888">
+                    Please do not reply to this message; it was sent from an unmonitored email address.      
+                </p>
+                </div>
+            </div>
+MAIL;
+        
+        $headers           = 'MIME-Version: 1.0' . "\n";
+        $headers           .= 'Content-type: text/html; charset=UTF-8' . "\n";
+        $to                 = $request->getParameter('email');
+        $subject            = 'Reset your Vesta password';
+        $message            = $mail_body;
+        mail($to, $subject, $message, $headers);
+       
+        return $this->reply(true, array('key_code' => substr($secret_key, 0, 5) . $_SERVER['REQUEST_TIME'] . substr($secret_key, -5)));
+    }
+    
+    public function generateResetPasswordKey()
+    {
+        $key = sha1($_SERVER['HTTP_USER_AGENT'].$_SERVER['REMOTE_ADDR']);
+        $key = substr($key, 0, 10) . $_SERVER['REQUEST_TIME'] . substr($key, 10, strlen($key));
+        
+        return $key;
     }
 
     public function signinExecute($request)
     {
-	$login = $request->getParameter('login');
-	$password = $request->getParameter('password');
+        $login    = $request->getParameter('login');
+        $password = $request->getParameter('password');
+        $result   = Vesta::execute('v_check_sys_user_password', array('USER' => $login, 'PASSWORD' => $password), self::TEXT);
 
-	$result = Vesta::execute('v_check_sys_user_password', array('USER' => $login, 'PASSWORD' => $password));
-	if ($result['status'] == true) {
-	    return $this->reply(VestaSession::authorize($login));
-	}
-	else {
-	    return $this->reply(false, 'Incorrect login / password');
-	}
+        if ($result['status'] == true) {
+            return $this->reply(true, array('v_sd' => VestaSession::authorize($login)));
+        }
+        else {
+            return $this->reply(false, array('error_msg' => 'Incorrect login or password'));
+        }
+    }
+    
+    public function logoffExecute($request)
+    {
+        VestaSession::logoff();
+        return $this->reply(true);
     }
 
     /**
@@ -59,74 +138,75 @@ class MAIN extends AjaxHandler
      */ 
     public function getInitialExecute(Request $request) 
     {
-	$user = VestaSession::getInstance()->getUser();
-	$global_data = array();
-	$totals = array(
-	    	    'USER'       => array('total' => 0, 'blocked' => 0),
+        $user = VestaSession::getInstance()->getUser();
+        $global_data = array();
+        $totals = array(
+                    'USER'       => array('total' => 0, 'blocked' => 0),
                     'WEB_DOMAIN' => array('total' => 0, 'blocked' => 0),
-	            'MAIL'       => array('total' => 0),
+                    'MAIL'       => array('total' => 0),
                     'DB'         => array('total' => 0, 'blocked' => 0),
                     'DNS'        => array('total' => 0, 'blocked' => 0),
                     'IP'         => array('total' => 0, 'blocked' => 0),
                     'CRON'       => array('total' => 0, 'blocked' => 0)                
                 );
     
-	// users
-	$rs = Vesta::execute(Vesta::V_LIST_SYS_USERS, null, self::JSON);
-	$data_user = $rs['data'];
-	$global_data['users'] = array();
-	foreach ($data_user as $login_name => $usr) {
-	    $totals['USER']['total'] += 1;
-	    if ($usr['SUSPENDED'] != 'yes') {		
-		$global_data['users'][$login_name] = $login_name;
-	    }
-	    else {
-		$totals['USER']['blocked'] += 1;
-	    }
-	}
-	// web_domains
-	$rs = Vesta::execute(Vesta::V_LIST_WEB_DOMAINS, array('USER' => $user['uid']), self::JSON);
-	$data_web_domain = $rs['data'];
-	foreach ($data_web_domain as $web) {
-	    $totals['WEB_DOMAIN']['total'] += 1;
-	}
-	// db
-	$rs = Vesta::execute(Vesta::V_LIST_DB_BASES, array('USER' => $user['uid']), self::JSON);
-	$data_db = $rs['data'];
-	foreach ($data_db as $db) {
-	    $totals['DB']['total'] += 1;
-	    //$db['SUSPENDED'] == 'yes' ? $totals['DB']['blocked'] += 1 : false;
-	}
-	// dns
-	$rs = Vesta::execute(Vesta::V_LIST_DNS_DOMAINS, array('USER' => $user['uid']), self::JSON);
-	$data_dns = $rs['data'];
-	foreach ($data_dns as $dns) {
-	    $totals['DNS']['total'] += 1;
-	}
-	// ip
-	$global_data['ips'] = array();
-	$rs = Vesta::execute(Vesta::V_LIST_SYS_IPS, null, self::JSON);
-	$data_ip = $rs['data'];
-	foreach ($data_ip as $ip => $obj) {
-	    $totals['IP']['total'] += 1;
-	    $global_data['ips'][$ip] = $ip;
-	}
-	// cron
-	$rs = Vesta::execute(Vesta::V_LIST_CRON_JOBS, array('USER' => $user['uid']), self::JSON);
-	$data_cron = $rs['data'];
-	foreach ($data_cron as $cron) {
-	    $totals['CRON']['total'] += 1;
-	    $cron['SUSPEND'] == 'yes' ? $totals['CRON']['blocked'] += 1 : false;
-	}
+        // users
+        $rs = Vesta::execute(Vesta::V_LIST_SYS_USERS, null, self::JSON);
+        $data_user = $rs['data'];
+        $global_data['users'] = array();
+        foreach ($data_user as $login_name => $usr) {
+            $totals['USER']['total'] += 1;
+            if ($usr['SUSPENDED'] != 'yes') {		
+                $global_data['users'][$login_name] = $login_name;
+            }
+            else {
+                $totals['USER']['blocked'] += 1;
+            }            
+        }
+        // web_domains
+        $rs = Vesta::execute(Vesta::V_LIST_WEB_DOMAINS, array('USER' => $user['uid']), self::JSON);
+        $data_web_domain = $rs['data'];
+        foreach ($data_web_domain as $web) {
+            $totals['WEB_DOMAIN']['total'] += 1;
+        }
+        // db
+        $rs = Vesta::execute(Vesta::V_LIST_DB_BASES, array('USER' => $user['uid']), self::JSON);
+        $data_db = $rs['data'];
+        foreach ($data_db as $db) {
+            $totals['DB']['total'] += 1;            
+        }
+        // dns
+        $rs = Vesta::execute(Vesta::V_LIST_DNS_DOMAINS, array('USER' => $user['uid']), self::JSON);
+        $data_dns = $rs['data'];
+        foreach ($data_dns as $dns) {
+            $totals['DNS']['total'] += 1;
+        }
+        // ip
+        $global_data['ips'] = array();
+        $rs = Vesta::execute(Vesta::V_LIST_SYS_IPS, null, self::JSON);
+        $data_ip = $rs['data'];
+        foreach ($data_ip as $ip => $obj) {
+            $totals['IP']['total'] += 1;
+            $global_data['ips'][$ip] = $ip;
+        }
+        // cron
+        $rs = Vesta::execute(Vesta::V_LIST_CRON_JOBS, array('USER' => $user['uid']), self::JSON);
+        $data_cron = $rs['data'];
+        foreach ($data_cron as $cron) {
+            $totals['CRON']['total'] += 1;
+            $cron['SUSPEND'] == 'yes' ? $totals['CRON']['blocked'] += 1 : false;
+        }
 
-	$reply = array(
+        $reply = array(
+                    'auth_user'  => array('uid' => $this->getLog),
                     'WEB_DOMAIN' => $this->getWebDomainParams($data_web_domin, $global_data),
                     'CRON'       => $this->getCronParams(),
                     'IP'         => $this->getIpParams($data_ip, $global_data),
                     'DNS'        => $this->getDnsParams(),
                     'DB'         => $this->getDbParams($data_db),
                     'USERS'      => $this->getUsersParams($data_user),
-                    'totals'     => $totals
+                    'totals'     => $totals,
+                    'PROFILE'    => $user
                 );
 
         return $this->reply(true, $reply);
@@ -134,21 +214,20 @@ class MAIN extends AjaxHandler
 
     protected function getTemplates()
     {
-	if (null != $this->templates) {
-	    return $this->templates;
-	}
-	else {
-	    $user = $this->getLoggedUser();
-	    $this->templates = array();
-	    //v_list_web_templates vesta json
-	    $result = Vesta::execute('v_list_web_templates', array('USER' => $user['uid']), self::JSON);
-	    // TODO: handle errors!
-	    foreach ($result['data'] as $tpl => $description) {
-		$this->templates[$tpl] = $tpl;
-	    }
+        if (null != $this->templates) {
+            return $this->templates;
+        }
+        else {
+            $user = $this->getLoggedUser();
+            $this->templates = array();
+            $result = Vesta::execute(Vesta::V_LIST_WEB_TEMPLATES, array('USER' => $user['uid']), self::JSON);
+            // TODO: handle errors!
+            foreach ($result['data'] as $tpl => $description) {
+                $this->templates[$tpl] = $description;
+            }
 
-	    return $this->templates;
-	}
+            return $this->templates;
+        }
     }
     
     /**
@@ -159,16 +238,16 @@ class MAIN extends AjaxHandler
      */
     public function getWebDomainParams($data, $global_data)
     {
-	$user = $this->getLoggedUser();
-	$ips = array();
-        $result	= Vesta::execute(Vesta::V_LIST_SYS_USER_IPS, array('USER' => $user['uid']), self::JSON);
-	foreach ($result['data'] as $sys_ip => $ip_data) {
-	    $ips[$sys_ip] = $sys_ip;
-	}
+        $user = $this->getLoggedUser();
+        $ips = array();
+            $result	= Vesta::execute(Vesta::V_LIST_SYS_USER_IPS, array('USER' => $user['uid']), self::JSON);
+        foreach ($result['data'] as $sys_ip => $ip_data) {
+            $ips[$sys_ip] = $sys_ip;
+        }
 
-	if (empty($ips)) {
-	    $ips['No available IP'] = 'No available IP';
-	}
+        if (empty($ips)) {
+            $ips['No available IP'] = 'No available IP';
+        }
 
         return array(
                 'TPL' => $this->getTemplates(),
@@ -201,7 +280,7 @@ class MAIN extends AjaxHandler
      */
     public function getIpParams($data = array(), $global_data = array())
     {
-	$ifaces  = array();                                                                                                                                                                                                            
+        $ifaces  = array();                                                                                                                                                                                                            
         $result = Vesta::execute(Vesta::V_LIST_SYS_INTERFACES, array(Config::get('response_type')));                                                                                                                                  
                                                                                                                                                                                                                                       
         foreach ($result['data'] as $iface) {                                                                                                                                                                                         
@@ -215,7 +294,7 @@ class MAIN extends AjaxHandler
                                 'exclusive' => 'exclusive'
                               ),
                 'INTERFACES' => $ifaces,
-		'OWNER' => $global_data['users'],
+                'OWNER' => $global_data['users'],
                 'MASK' => array(
                             '255.255.255.0' => '255.255.255.0',
                             '255.255.255.128' => '255.255.255.128',
@@ -237,9 +316,18 @@ class MAIN extends AjaxHandler
      */
     public function getDnsParams($data = array())
     {
+        $dns_templates = array();
+        $user = $this->getLoggedUser();
+        $this->templates = array();
+        $result = Vesta::execute(Vesta::V_LIST_DNS_TEMPLATES, null, self::JSON);
+        // TODO: handle errors!
+        foreach ($result['data'] as $tpl => $description) {
+            $dns_templates[$tpl] = $description;
+        }
+
         return  array(
                 'IP' => @$data['ips'],
-                'TPL' => $this->getTemplates(),
+                'TPL' => $dns_templates,
                 'EXP' => array(),
                 'SOA' => array(),
                 'TTL' => array(),
@@ -277,14 +365,14 @@ class MAIN extends AjaxHandler
      * @params array $data
      * @return array
      */
-    public function getUsersParams($data = array())
-    {
-	$pckg = array();
-	// json
-	$result = Vesta::execute('v_list_sys_user_packages', null, self::JSON);
-	foreach ($result['data'] as $pckg_name => $pckg_data) {
-	    $pckg[$pckg_name] = $pckg_name;
-	}
+    public function getUsersParams($data = array(), $global_data)
+    {        
+        $pckg = array();
+        // json
+        $result = Vesta::execute('v_list_sys_user_packages', null, self::JSON);
+        foreach ($result['data'] as $pckg_name => $pckg_data) {
+            $pckg[$pckg_name] = $pckg_name;
+        }
         return array(
                 'ROLE'      => array('user' => 'user'),
                 'OWNER'     => $data['user_names'],

+ 24 - 35
web/vesta/api/USER.class.php

@@ -23,14 +23,14 @@ class USER extends AjaxHandler
         $result = Vesta::execute(Vesta::V_LIST_SYS_USERS, array(Config::get('response_type')));
 
         foreach ($result['data'] as $user => $details) {
-	    // get reports attribute
-	    $result_report = Vesta::execute(Vesta::V_GET_SYS_USER_VALUE, array('USER' => $user, 'VALUE' => 'reports'), self::TEXT);
-	    if ($result_report['status'] != true) {
-		$report = null;
-	    } 
-	    else {
-		$report = $result_report['data'];
-	    }
+            // get reports attribute
+            $result_report = Vesta::execute(Vesta::V_GET_SYS_USER_VALUE, array('USER' => $user, 'VALUE' => 'reports'), self::TEXT);
+            if ($result_report['status'] != true) {
+            $report = null;
+        } 
+        else {
+            $report = $result_report['data'];
+        }
             $fullname_id = rand(0, count($users)-1);
             $fullname    = implode('', array($details['FNAME'], ' ', $details['LNAME']));
         
@@ -72,7 +72,7 @@ class USER extends AjaxHandler
                                 "U_MAIL_BOXES"          => rand(1, 10),  // TODO: skid
                                 "U_MAIL_FORWARDERS"     => rand(1, 10),  // TODO: skid
                                 "REPORTS_ENABLED"       => $report,
-				"U_WEB_DOMAINS"		=> $details['U_WEB_DOMAINS']
+                                "U_WEB_DOMAINS"         => $details['U_WEB_DOMAINS']
                             );
             $reply[$user] = array_merge($user_details, $nses);
         }
@@ -104,11 +104,9 @@ class USER extends AjaxHandler
         $result = Vesta::execute(Vesta::V_ADD_SYS_USER, $params);      
         // Reports
         $enable_reports = Utils::getCheckboxBooleanValue($spell['REPORTS_ENABLED']);
-        $reports_result = $this->setUserReports($spell['LOGIN_NAME'], $spell['REPORTS_ENABLED']);
-        // NS
-        //$ns_result = $this->setNSentries($spell['LOGIN_NAME'], $spell);
-	// Set SHELL
-	$this->setShell($spell['LOGIN_NAME'], $spell['SHELL']);
+        $reports_result = $this->setUserReports($spell['LOGIN_NAME'], $spell['REPORTS_ENABLED']);              
+        // Set SHELL
+        $this->setShell($spell['LOGIN_NAME'], $spell['SHELL']);
 
         if (!$result['status']) {
             $this->errors[] = array($result['error_code'] => $result['error_message']);
@@ -180,8 +178,8 @@ class USER extends AjaxHandler
             }
         }
 
-	// Set SHELL
-	$this->setShell($_USER, $_new['SHELL']);
+        // Set SHELL
+        $this->setShell($_USER, $_new['SHELL']);
 
         $this->setNSentries($_USER, $_new);
 
@@ -195,16 +193,7 @@ class USER extends AjaxHandler
         if (!$result['status']) {
             $this->status = FALSE;
             $this->errors['NAMES'] = array($result['error_code'] => $result['error_message']);
-        }
-
-        /*if ($_old['SHELL'] != $_new['SHELL']) {
-            $result = array();
-            $result = Vesta::execute(Vesta::V_CHANGE_SYS_USER_SHELL, array('USER' => $_USER, 'SHELL' => $_new['SHELL']));
-            if (!$result['status']) {
-                $this->status = FALSE;
-                $this->errors['SHELL'] = array($result['error_code'] => $result['error_message']);
-            }
-        }*/
+        }        
 
         if (!$this->status) {
             Vesta::execute(Vesta::V_CHANGE_SYS_USER_PASSWORD, array('USER' => $_USER, 'PASSWORD' => $_old['PASSWORD']));
@@ -233,14 +222,14 @@ class USER extends AjaxHandler
     {
         $ns = array();
         $ns['USER'] = $user;
-        $ns['NS1'] = $data['NS1'];
-        $ns['NS2'] = $data['NS2'];
-        $ns['NS3'] = isset($data['NS3']) ? $data['NS3'] : '';
-        $ns['NS4'] = isset($data['NS4']) ? $data['NS4'] : '';
-        $ns['NS5'] = isset($data['NS5']) ? $data['NS5'] : '';
-        $ns['NS6'] = isset($data['NS6']) ? $data['NS6'] : '';
-        $ns['NS7'] = isset($data['NS7']) ? $data['NS7'] : '';
-        $ns['NS8'] = isset($data['NS8']) ? $data['NS8'] : '';
+        $ns['NS1']  = $data['NS1'];
+        $ns['NS2']  = $data['NS2'];
+        $ns['NS3']  = isset($data['NS3']) ? $data['NS3'] : '';
+        $ns['NS4']  = isset($data['NS4']) ? $data['NS4'] : '';
+        $ns['NS5']  = isset($data['NS5']) ? $data['NS5'] : '';
+        $ns['NS6']  = isset($data['NS6']) ? $data['NS6'] : '';
+        $ns['NS7']  = isset($data['NS7']) ? $data['NS7'] : '';
+        $ns['NS8']  = isset($data['NS8']) ? $data['NS8'] : '';
 
         $result = Vesta::execute(Vesta::V_CHANGE_SYS_USER_NS, $ns);
 
@@ -265,6 +254,6 @@ class USER extends AjaxHandler
      */
     protected function setShell($user, $shell)
     {
-	$result = Vesta::execute(Vesta::V_CHANGE_SYS_USER_SHELL, array('USER' => $user, 'SHELL' => $shell));
+        $result = Vesta::execute(Vesta::V_CHANGE_SYS_USER_SHELL, array('USER' => $user, 'SHELL' => $shell));
     }
 }

+ 25 - 25
web/vesta/api/WEB_DOMAIN.class.php

@@ -26,24 +26,24 @@ class WEB_DOMAIN extends AjaxHandler
         foreach($result['data'] as $web_domain => $record)
         {
             $web_details = array(
-                                      'IP'          => $record['IP'],
-                                      'U_DISK'      => $record['U_DISK'],
-                                      'U_BANDWIDTH' => $record['U_BANDWIDTH'],
-                                      'TPL'         => $record['TPL'],
-                                      'ALIAS'       => $record['ALIAS'],
-                                      'PHP'         => $record['PHP'],
-                                      'CGI'         => $record['CGI'],
-                                      'ELOG'        => $record['ELOG'],
-                                      'STAT'        => $record['STATS'],
-                                      'STATS_LOGIN' => $record['STATS_AUTH'],
-                                      'SSL'         => $record['SSL'],
-                                      'SSL_HOME'    => $record['SSL_HOME'],
-                                      'SSL_CERT'    => $record['SSL_CERT'],
-                                      'NGINX'       => $record['NGINX'],
-                                      'NGINX_EXT'   => $record['NGINX_EXT'],
-                                      'SUSPEND'     => $record['SUSPEND'],
-                                      'DATE'        => date(Config::get('ui_date_format', strtotime($record['DATE'])))
-                                  );
+                              'IP'          => $record['IP'],
+                              'U_DISK'      => $record['U_DISK'],
+                              'U_BANDWIDTH' => $record['U_BANDWIDTH'],
+                              'TPL'         => $record['TPL'],
+                              'ALIAS'       => $record['ALIAS'],
+                              'PHP'         => $record['PHP'],
+                              'CGI'         => $record['CGI'],
+                              'ELOG'        => $record['ELOG'],
+                              'STAT'        => $record['STATS'],
+                              'STATS_LOGIN' => $record['STATS_AUTH'],
+                              'SSL'         => $record['SSL'],
+                              'SSL_HOME'    => $record['SSL_HOME'],
+                              'SSL_CERT'    => $record['SSL_CERT'],
+                              'NGINX'       => $record['NGINX'],
+                              'NGINX_EXT'   => $record['NGINX_EXT'],
+                              'SUSPEND'     => $record['SUSPEND'],
+                              'DATE'        => date(Config::get('ui_date_format', strtotime($record['DATE'])))
+                          );
 	    $web_details['STAT'] == '' ? $web_details['STAT'] = 'none' : true;
 	    $reply[$web_domain] = $web_details;
         }
@@ -135,7 +135,7 @@ class WEB_DOMAIN extends AjaxHandler
                 $this->errors['STAT_AUTH'] = array($result['error_code'] => $result['error_message']);
             }
 
-	if (!empty($_new['CGI'])) {
+        if (!empty($_new['CGI'])) {
             if (Utils::getCheckboxBooleanValue($_new['CGI'])) {
                 $result = array();
                 $result = Vesta::execute(Vesta::V_ADD_WEB_DOMAIN_CGI, array('USER' => $user['uid'], 'DOMAIN' => $_DOMAIN));
@@ -248,10 +248,10 @@ class WEB_DOMAIN extends AjaxHandler
         $_old = $request->getParameter('old');
         $_new = $request->getParameter('new');
 
-	$_old['ELOG'] = $_old['ELOG'] == 'yes' ? 'on' : 'off';
-	$_old['CGI']  = $_old['CGI']  == 'yes' ? 'on' : 'off';
-	$_old['AUTH']  = $_old['AUTH']  == 'yes' ? 'on' : 'off';
-	$_old['SSL']  = $_old['SSL']  == 'yes' ? 'on' : 'off';
+        $_old['ELOG'] = $_old['ELOG'] == 'yes' ? 'on' : 'off';
+        $_old['CGI']  = $_old['CGI']  == 'yes' ? 'on' : 'off';
+        $_old['AUTH']  = $_old['AUTH']  == 'yes' ? 'on' : 'off';
+        $_old['SSL']  = $_old['SSL']  == 'yes' ? 'on' : 'off';
 
         $user = $this->getLoggedUser();
         $_DOMAIN = $_new['DOMAIN'];
@@ -301,7 +301,7 @@ class WEB_DOMAIN extends AjaxHandler
         }
 
 
-	if (($_old['STATH_AUTH'] != $_new['STAT_AUTH']) && !empty($_s['STAT_AUTH']) && @Utils::getCheckboxBooleanValue($_s['STATS_AUTH'])) {
+        if (($_old['STATH_AUTH'] != $_new['STAT_AUTH']) && !empty($_s['STAT_AUTH']) && @Utils::getCheckboxBooleanValue($_s['STATS_AUTH'])) {
             $params = array(
                         'USER'          => $user['uid'],
                         'DOMAIN'        => $_DOMAIN,
@@ -314,7 +314,7 @@ class WEB_DOMAIN extends AjaxHandler
             if(!$result['status']) {
                 $this->errors['STAT_AUTH'] = array($result['error_code'] => $result['error_message']);
             }
-	}
+        }
 
         if (($_old['STAT'] != $_new['STAT'])) {
             if ($_new['STAT'] != 'none') {

+ 1 - 2
web/vesta/app.init.php

@@ -1,5 +1,6 @@
 <?php
 
+define('VESTA_DIR',  dirname(__FILE__) . DIRECTORY_SEPARATOR . '..' . DIRECTORY_SEPARATOR . '..' . DIRECTORY_SEPARATOR);
 define('V_ROOT_DIR', dirname(__FILE__) . DIRECTORY_SEPARATOR);
 
 require_once V_ROOT_DIR . 'config/Config.class.php';
@@ -12,8 +13,6 @@ require_once V_ROOT_DIR . 'core/utils/Message.class.php';
 require_once V_ROOT_DIR . 'core/Request.class.php';
 require_once V_ROOT_DIR . 'api/AjaxHandler.php';
 
-VestaSession::start();
-
 /**
  * App execution 
  * 

+ 1 - 1
web/vesta/config/Config.class.php

@@ -12,7 +12,7 @@
 class Config 
 {
     
-    protected $_config = array();   
+    protected $_config      = array();   
     static public $instance = null;
     
     /**

+ 2 - 1
web/vesta/config/vesta_config.ini

@@ -8,4 +8,5 @@ vesta_functions_path = /usr/local/vesta/bin/
 
 ; common
 ui_date_format = 'd.m.Y'
-
+; session
+session_dirname = 'vesta_sessions'

+ 6 - 4
web/vesta/core/Vesta.class.php

@@ -11,8 +11,9 @@
  */
 class Vesta 
 {
-    const SAME_PASSWORD			    = '********'; 
+    const SAME_PASSWORD			            = '********'; 
 
+    const V_LIST_SYS_CONFIG                 = 'v_list_sys_config';
     // IP
     const V_LIST_SYS_IPS                    = 'v_list_sys_ips';
     const V_ADD_SYS_IP                      = 'v_add_sys_ip';
@@ -26,6 +27,7 @@ class Vesta
     // DNS
     const V_LIST_DNS_DOMAINS                = 'v_list_dns_domains';
     const V_LIST_DNS_DOMAIN_RECORDS         = 'v_list_dns_domain';
+    const V_LIST_DNS_TEMPLATES              = 'v_list_dns_templates';
     const V_ADD_DNS_DOMAIN                  = 'v_add_dns_domain';
     const V_ADD_DNS_DOMAIN_RECORD           = 'v_add_dns_domain_record';
     const V_CHANGE_DNS_DOMAIN_IP            = 'v_change_dns_domain_ip';
@@ -48,7 +50,7 @@ class Vesta
     const V_DEL_CRON_JOB                    = 'v_del_sys_cron';
     const V_DEL_SYS_USER_REPORTS            = 'v_del_sys_user_reports';
     // USER
-    const V_GET_SYS_USER_VALUE		    = 'v_get_sys_user_value';
+    const V_GET_SYS_USER_VALUE		        = 'v_get_sys_user_value';
     const V_LIST_SYS_USERS                  = 'v_list_sys_users';
     const V_ADD_SYS_USER                    = 'v_add_sys_user';
     const V_CHANGE_SYS_USER_CONTACT         = 'v_change_sys_user_contact';
@@ -58,9 +60,9 @@ class Vesta
     const V_CHANGE_SYS_USER_SHELL           = 'v_change_sys_user_shell';
     const V_CHANGE_SYS_USER_ROLE            = 'v_change_sys_user_role';
     const V_DEL_SYS_USER                    = 'v_del_sys_user';
-    const V_CHANGE_SYS_USER_NAME	    = 'v_change_sys_user_name';
+    const V_CHANGE_SYS_USER_NAME	        = 'v_change_sys_user_name';
     // WEB_DOMAIN
-    const V_LIST_SYS_USER_IPS 		    = 'v_list_sys_user_ips';
+    const V_LIST_SYS_USER_IPS 		        = 'v_list_sys_user_ips';
     const V_LIST_WEB_DOMAINS                = 'v_list_web_domains';
     const V_LIST_WEB_DOMAINS_ALIAS          = 'v_list_web_domains_alias';
     const V_LIST_WEB_DOMAINS_ELOG           = 'v_list_web_domains_elog';

+ 31 - 11
web/vesta/core/VestaSession.class.php

@@ -5,9 +5,22 @@ class VestaSession
     
     static public $instance = null;
     
-    static function start()
+    static function start($request = null)
     {
-	session_start();
+        self::initSessionPath();
+        session_start();        
+        /*if ($request->hasParameter('v_sd')) {            
+            session_id($request->getParameter('v_sd'));
+        }*/
+    }
+    
+    static function initSessionPath()
+    {
+        $sessions_dir = '/tmp/'.Config::get('session_dirname');
+        if (!is_readable($sessions_dir)) {
+            mkdir($sessions_dir);
+        }
+        session_save_path($sessions_dir);
     }
     
     /**
@@ -22,19 +35,26 @@ class VestaSession
      
     static function authorize($username)
     {
-	$_SESSION['user'] = $username;
-	return true;
+        $_SESSION['user'] = $username;
+        return session_id();
+    }
+    
+    static function logoff()
+    {
+        session_destroy();
     }
 
     public function getUser()
-    {
-	//var_dump($_SESSION);die();
-	if (isset($_SESSION['user'])) {
-	    return array('uid' => $_SESSION['user']);
-	}
+    {       
+        if (isset($_SESSION['user'])) {
+            $user = array('uid' => $_SESSION['user']);
+            $user['DISK'] = 10000;
+            $user['BANDWIDTH'] = 10000;
+            return $user;
+        }
 
-	print '{"result": "NOT_AUTHORISED"}';
-	exit;
+        print json_encode(array('result' => "NOT_AUTHORISED"));
+        exit;        
     }
     
 }