From 1fb46fbf9f6c5e1454e0873939e1acc4887bd795 Mon Sep 17 00:00:00 2001 From: Jens Klaer Date: Fri, 30 Oct 2015 10:25:32 +0100 Subject: allow (anonymous) functions for TJuiControlOptions, changed TJuiDatepicker widget events to options --- framework/Web/UI/JuiControls/TJuiControlAdapter.php | 2 ++ framework/Web/UI/JuiControls/TJuiDatePicker.php | 5 +++-- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/framework/Web/UI/JuiControls/TJuiControlAdapter.php b/framework/Web/UI/JuiControls/TJuiControlAdapter.php index 638f60f1..6c326739 100644 --- a/framework/Web/UI/JuiControls/TJuiControlAdapter.php +++ b/framework/Web/UI/JuiControls/TJuiControlAdapter.php @@ -194,6 +194,8 @@ class TJuiControlOptions } elseif(is_numeric($value)) { // trick to get float or integer automatically when needed $this->_options[$option] = $value + 0; + } elseif(substr($low,0,8)=='function') { + $this->_options[$option] = new TJavaScriptLiteral($value); } else { $this->_options[$option] = $value; } diff --git a/framework/Web/UI/JuiControls/TJuiDatePicker.php b/framework/Web/UI/JuiControls/TJuiDatePicker.php index d894e07d..1f6e7619 100644 --- a/framework/Web/UI/JuiControls/TJuiDatePicker.php +++ b/framework/Web/UI/JuiControls/TJuiDatePicker.php @@ -93,7 +93,8 @@ class TJuiDatePicker extends TActiveTextBox implements INamingContainer, IJuiOpt 'dayNamesShort', 'defaultDate', 'duration', 'firstDay', 'gotoCurrent', 'hideIfNoPrevNext', 'isRTL', 'maxDate', 'minDate', 'monthNames', 'monthNamesShort', 'navigationAsDateFormat', 'nextText', 'numberOfMonths', 'prevText', 'selectOtherMonths', 'shortYearCutoff', 'showAnim', 'showButtonPanel', 'showCurrentAtPos', 'showMonthAfterYear', - 'showOn', 'showOptions', 'showOtherMonths', 'showWeek', 'stepMonths', 'weekHeader', 'yearRange', 'yearSuffix'); + 'showOn', 'showOptions', 'showOtherMonths', 'showWeek', 'stepMonths', 'weekHeader', 'yearRange', 'yearSuffix', + 'beforeShow', 'beforeShowDay', 'onChangeMonthYear', 'onClose', 'onSelect'); } /** @@ -102,7 +103,7 @@ class TJuiDatePicker extends TActiveTextBox implements INamingContainer, IJuiOpt */ public function getValidEvents() { - return array('beforeShow', 'beforeShowDay', 'onChangeMonthYear', 'onClose', 'onSelect'); + return array(); } /** -- cgit v1.2.3 From 6bea6c78024e0ee7a06a3267b3d434f196cffdc7 Mon Sep 17 00:00:00 2001 From: ctrlaltca Date: Thu, 5 Nov 2015 20:00:33 +0100 Subject: Update README.md --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index e9ec1a9a..a5636356 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,7 @@ # Prado PHP Framework +### NEWS: our website suffered a server crash; we are currently rebuilding it, have a look at http://www.pradoframework.net/ for updates. Thank you for your patience. + PRADO is a component-based and event-driven programming framework for developing Web applications in PHP 5. PRADO stands for PHP Rapid Application Development Object-oriented. -- cgit v1.2.3 From 11666237dbdc0eb9e01d5d739994bdd88a551168 Mon Sep 17 00:00:00 2001 From: Fabio Bas Date: Sat, 7 Nov 2015 15:06:50 +0100 Subject: Prepare for release: update (c) year to 2015, version to 3.3 --- HISTORY | 42 ++++++ README.md | 2 +- UPGRADE | 8 +- bin/prado-cli.php | 2 +- build.xml | 2 +- buildscripts/apigen/pradosoft/@layout.latte | 2 +- buildscripts/texbuilder/quickstart/quickstart.tex | 6 +- composer.json | 2 +- framework/Caching/TAPCCache.php | 2 +- framework/Caching/TCache.php | 2 +- framework/Caching/TDbCache.php | 2 +- framework/Caching/TEACache.php | 2 +- framework/Caching/TMemCache.php | 2 +- framework/Caching/TSqliteCache.php | 2 +- framework/Caching/TXCache.php | 2 +- framework/Collections/TAttributeCollection.php | 2 +- framework/Collections/TDummyDataSource.php | 2 +- framework/Collections/TList.php | 2 +- framework/Collections/TListItemCollection.php | 2 +- framework/Collections/TMap.php | 2 +- framework/Collections/TPagedDataSource.php | 2 +- framework/Collections/TPagedList.php | 2 +- framework/Collections/TPriorityList.php | 2 +- framework/Collections/TPriorityMap.php | 2 +- framework/Collections/TQueue.php | 2 +- framework/Collections/TStack.php | 2 +- .../Exceptions/TActiveRecordException.php | 2 +- .../Relations/TActiveRecordBelongsTo.php | 2 +- .../Relations/TActiveRecordHasMany.php | 2 +- .../Relations/TActiveRecordHasManyAssociation.php | 2 +- .../ActiveRecord/Relations/TActiveRecordHasOne.php | 2 +- .../Relations/TActiveRecordRelation.php | 2 +- .../Relations/TActiveRecordRelationContext.php | 2 +- .../Scaffold/InputBuilder/TIbmScaffoldInput.php | 2 +- .../Scaffold/InputBuilder/TMssqlScaffoldInput.php | 2 +- .../Scaffold/InputBuilder/TMysqlScaffoldInput.php | 2 +- .../Scaffold/InputBuilder/TPgsqlScaffoldInput.php | 2 +- .../Scaffold/InputBuilder/TScaffoldInputBase.php | 2 +- .../Scaffold/InputBuilder/TScaffoldInputCommon.php | 2 +- .../Scaffold/InputBuilder/TSqliteScaffoldInput.php | 2 +- .../Data/ActiveRecord/Scaffold/TScaffoldBase.php | 2 +- .../ActiveRecord/Scaffold/TScaffoldEditView.php | 2 +- .../ActiveRecord/Scaffold/TScaffoldListView.php | 2 +- .../Data/ActiveRecord/Scaffold/TScaffoldSearch.php | 2 +- .../Data/ActiveRecord/Scaffold/TScaffoldView.php | 2 +- framework/Data/ActiveRecord/TActiveRecord.php | 2 +- .../Data/ActiveRecord/TActiveRecordConfig.php | 2 +- .../Data/ActiveRecord/TActiveRecordCriteria.php | 2 +- .../Data/ActiveRecord/TActiveRecordGateway.php | 2 +- .../Data/ActiveRecord/TActiveRecordManager.php | 2 +- .../Data/Common/Mssql/TMssqlCommandBuilder.php | 2 +- framework/Data/Common/Mssql/TMssqlMetaData.php | 2 +- framework/Data/Common/Mssql/TMssqlTableColumn.php | 2 +- framework/Data/Common/Mssql/TMssqlTableInfo.php | 2 +- .../Data/Common/Mysql/TMysqlCommandBuilder.php | 2 +- framework/Data/Common/Mysql/TMysqlMetaData.php | 2 +- framework/Data/Common/Mysql/TMysqlTableColumn.php | 2 +- framework/Data/Common/Mysql/TMysqlTableInfo.php | 2 +- .../Data/Common/Oracle/TOracleCommandBuilder.php | 2 +- framework/Data/Common/Oracle/TOracleMetaData.php | 2 +- .../Data/Common/Oracle/TOracleTableColumn.php | 2 +- framework/Data/Common/Oracle/TOracleTableInfo.php | 2 +- .../Data/Common/Pgsql/TPgsqlCommandBuilder.php | 2 +- framework/Data/Common/Pgsql/TPgsqlMetaData.php | 2 +- framework/Data/Common/Pgsql/TPgsqlTableColumn.php | 2 +- framework/Data/Common/Pgsql/TPgsqlTableInfo.php | 2 +- .../Data/Common/Sqlite/TSqliteCommandBuilder.php | 2 +- framework/Data/Common/Sqlite/TSqliteMetaData.php | 2 +- .../Data/Common/Sqlite/TSqliteTableColumn.php | 2 +- framework/Data/Common/Sqlite/TSqliteTableInfo.php | 2 +- framework/Data/Common/TDbCommandBuilder.php | 2 +- framework/Data/Common/TDbMetaData.php | 2 +- framework/Data/Common/TDbTableColumn.php | 2 +- framework/Data/Common/TDbTableInfo.php | 2 +- framework/Data/DataGateway/TDataGatewayCommand.php | 2 +- framework/Data/DataGateway/TSqlCriteria.php | 2 +- framework/Data/DataGateway/TTableGateway.php | 2 +- .../Data/SqlMap/Configuration/TDiscriminator.php | 2 +- .../Configuration/TInlineParameterMapParser.php | 2 +- .../Data/SqlMap/Configuration/TParameterMap.php | 2 +- .../SqlMap/Configuration/TParameterProperty.php | 2 +- framework/Data/SqlMap/Configuration/TResultMap.php | 2 +- .../Data/SqlMap/Configuration/TResultProperty.php | 2 +- .../SqlMap/Configuration/TSimpleDynamicParser.php | 2 +- .../SqlMap/Configuration/TSqlMapCacheModel.php | 2 +- .../Data/SqlMap/Configuration/TSqlMapStatement.php | 2 +- .../Configuration/TSqlMapXmlConfiguration.php | 2 +- .../DataMapper/TFastSqlMapApplicationCache.php | 2 +- framework/Data/SqlMap/DataMapper/TLazyLoadList.php | 2 +- .../Data/SqlMap/DataMapper/TPropertyAccess.php | 2 +- framework/Data/SqlMap/DataMapper/TSqlMapCache.php | 2 +- .../Data/SqlMap/DataMapper/TSqlMapPagedList.php | 2 +- .../DataMapper/TSqlMapTypeHandlerRegistry.php | 2 +- .../Data/SqlMap/Statements/TCachingStatement.php | 2 +- .../SqlMap/Statements/TDeleteMappedStatement.php | 2 +- .../SqlMap/Statements/TInsertMappedStatement.php | 2 +- .../Data/SqlMap/Statements/TMappedStatement.php | 2 +- .../Data/SqlMap/Statements/TPreparedCommand.php | 2 +- .../Data/SqlMap/Statements/TPreparedStatement.php | 2 +- .../Statements/TPreparedStatementFactory.php | 2 +- .../SqlMap/Statements/TSelectMappedStatement.php | 2 +- .../Data/SqlMap/Statements/TSimpleDynamicSql.php | 2 +- framework/Data/SqlMap/Statements/TStaticSql.php | 2 +- .../SqlMap/Statements/TUpdateMappedStatement.php | 2 +- framework/Data/SqlMap/TSqlMapConfig.php | 2 +- framework/Data/SqlMap/TSqlMapGateway.php | 2 +- framework/Data/SqlMap/TSqlMapManager.php | 2 +- framework/Data/TDataSourceConfig.php | 2 +- framework/Data/TDbCommand.php | 2 +- framework/Data/TDbConnection.php | 2 +- framework/Data/TDbDataReader.php | 2 +- framework/Data/TDbTransaction.php | 2 +- framework/Exceptions/TErrorHandler.php | 2 +- framework/Exceptions/TException.php | 2 +- framework/I18N/TChoiceFormat.php | 2 +- framework/I18N/TDateFormat.php | 2 +- framework/I18N/TGlobalization.php | 2 +- framework/I18N/TGlobalizationAutoDetect.php | 2 +- framework/I18N/TI18NControl.php | 2 +- framework/I18N/TNumberFormat.php | 2 +- framework/I18N/TTranslate.php | 2 +- framework/I18N/TTranslateParameter.php | 2 +- framework/I18N/Translation.php | 2 +- framework/IO/TTextWriter.php | 2 +- framework/PradoBase.php | 4 +- framework/Security/IUserManager.php | 2 +- framework/Security/TAuthManager.php | 2 +- framework/Security/TAuthorizationRule.php | 2 +- framework/Security/TDbUserManager.php | 2 +- framework/Security/TSecurityManager.php | 2 +- framework/Security/TUser.php | 2 +- framework/Security/TUserManager.php | 2 +- framework/TApplication.php | 2 +- framework/TApplicationComponent.php | 2 +- framework/TComponent.php | 2 +- framework/TModule.php | 2 +- framework/TService.php | 2 +- framework/TShellApplication.php | 2 +- framework/Util/TCallChain.php | 2 +- framework/Util/TDataFieldAccessor.php | 2 +- framework/Util/TDateTimeStamp.php | 2 +- framework/Util/TLogRouter.php | 2 +- framework/Util/TLogger.php | 2 +- framework/Util/TParameterModule.php | 2 +- framework/Util/TSimpleDateFormatter.php | 2 +- framework/Util/TVarDumper.php | 2 +- framework/Web/Javascripts/TJavaScript.php | 2 +- framework/Web/Javascripts/packages.php | 26 ++-- framework/Web/Javascripts/source/prado/prado.js | 2 +- framework/Web/Services/TFeedService.php | 2 +- framework/Web/Services/TJsonService.php | 2 +- framework/Web/Services/TPageService.php | 2 +- framework/Web/Services/TSoapService.php | 2 +- framework/Web/TAssetManager.php | 2 +- framework/Web/TCacheHttpSession.php | 2 +- framework/Web/THttpRequest.php | 2 +- framework/Web/THttpResponse.php | 2 +- framework/Web/THttpResponseAdapter.php | 2 +- framework/Web/THttpSession.php | 2 +- framework/Web/THttpUtility.php | 2 +- framework/Web/TUrlManager.php | 2 +- framework/Web/TUrlMapping.php | 2 +- framework/Web/UI/ActiveControls/TActiveButton.php | 2 +- .../Web/UI/ActiveControls/TActiveCheckBox.php | 2 +- .../Web/UI/ActiveControls/TActiveCheckBoxList.php | 2 +- .../Web/UI/ActiveControls/TActiveClientScript.php | 2 +- .../UI/ActiveControls/TActiveControlAdapter.php | 2 +- .../UI/ActiveControls/TActiveCustomValidator.php | 2 +- .../Web/UI/ActiveControls/TActiveDatePicker.php | 2 +- .../Web/UI/ActiveControls/TActiveDropDownList.php | 2 +- .../Web/UI/ActiveControls/TActiveHiddenField.php | 2 +- .../Web/UI/ActiveControls/TActiveHyperLink.php | 2 +- framework/Web/UI/ActiveControls/TActiveImage.php | 2 +- .../Web/UI/ActiveControls/TActiveImageButton.php | 2 +- framework/Web/UI/ActiveControls/TActiveLabel.php | 2 +- .../Web/UI/ActiveControls/TActiveLinkButton.php | 2 +- framework/Web/UI/ActiveControls/TActiveListBox.php | 2 +- .../ActiveControls/TActiveListControlAdapter.php | 2 +- .../Web/UI/ActiveControls/TActivePageAdapter.php | 2 +- framework/Web/UI/ActiveControls/TActivePager.php | 2 +- framework/Web/UI/ActiveControls/TActivePanel.php | 2 +- .../Web/UI/ActiveControls/TActiveRadioButton.php | 2 +- .../UI/ActiveControls/TActiveRadioButtonList.php | 2 +- .../Web/UI/ActiveControls/TActiveRatingList.php | 2 +- framework/Web/UI/ActiveControls/TActiveTextBox.php | 2 +- framework/Web/UI/ActiveControls/TAutoComplete.php | 2 +- .../Web/UI/ActiveControls/TBaseActiveControl.php | 2 +- framework/Web/UI/ActiveControls/TCallback.php | 2 +- .../UI/ActiveControls/TCallbackClientScript.php | 2 +- .../Web/UI/ActiveControls/TCallbackClientSide.php | 2 +- .../UI/ActiveControls/TCallbackEventParameter.php | 2 +- .../Web/UI/ActiveControls/TCallbackOptions.php | 2 +- .../UI/ActiveControls/TCallbackResponseAdapter.php | 2 +- .../UI/ActiveControls/TEventTriggeredCallback.php | 2 +- .../Web/UI/ActiveControls/TInPlaceTextBox.php | 2 +- .../UI/ActiveControls/TTimeTriggeredCallback.php | 2 +- .../Web/UI/ActiveControls/TTriggeredCallback.php | 2 +- .../UI/ActiveControls/TValueTriggeredCallback.php | 2 +- framework/Web/UI/JuiControls/TJuiAutoComplete.php | 2 +- .../Web/UI/JuiControls/TJuiControlAdapter.php | 2 +- framework/Web/UI/JuiControls/TJuiDialog.php | 2 +- framework/Web/UI/JuiControls/TJuiDraggable.php | 2 +- framework/Web/UI/JuiControls/TJuiDroppable.php | 2 +- framework/Web/UI/JuiControls/TJuiProgressbar.php | 2 +- framework/Web/UI/JuiControls/TJuiResizable.php | 2 +- framework/Web/UI/JuiControls/TJuiSelectable.php | 2 +- framework/Web/UI/JuiControls/TJuiSortable.php | 2 +- framework/Web/UI/TCachePageStatePersister.php | 2 +- framework/Web/UI/TClientScriptManager.php | 2 +- framework/Web/UI/TCompositeControl.php | 2 +- framework/Web/UI/TControl.php | 2 +- framework/Web/UI/TControlAdapter.php | 2 +- framework/Web/UI/TForm.php | 2 +- framework/Web/UI/THtmlWriter.php | 2 +- framework/Web/UI/TPage.php | 2 +- framework/Web/UI/TPageStatePersister.php | 2 +- framework/Web/UI/TSessionPageStatePersister.php | 2 +- framework/Web/UI/TTemplateControl.php | 2 +- framework/Web/UI/TTemplateManager.php | 2 +- framework/Web/UI/TThemeManager.php | 2 +- framework/Web/UI/WebControls/TAccordion.php | 2 +- framework/Web/UI/WebControls/TBaseDataList.php | 2 +- framework/Web/UI/WebControls/TBaseValidator.php | 2 +- framework/Web/UI/WebControls/TBoundColumn.php | 2 +- framework/Web/UI/WebControls/TBulletedList.php | 2 +- framework/Web/UI/WebControls/TButton.php | 2 +- framework/Web/UI/WebControls/TButtonColumn.php | 2 +- framework/Web/UI/WebControls/TCaptcha.php | 2 +- framework/Web/UI/WebControls/TCaptchaValidator.php | 2 +- framework/Web/UI/WebControls/TCheckBox.php | 2 +- framework/Web/UI/WebControls/TCheckBoxColumn.php | 2 +- framework/Web/UI/WebControls/TCheckBoxList.php | 2 +- framework/Web/UI/WebControls/TClientScript.php | 2 +- framework/Web/UI/WebControls/TColorPicker.php | 2 +- framework/Web/UI/WebControls/TCompareValidator.php | 2 +- framework/Web/UI/WebControls/TConditional.php | 2 +- framework/Web/UI/WebControls/TContent.php | 2 +- .../Web/UI/WebControls/TContentPlaceHolder.php | 2 +- framework/Web/UI/WebControls/TCustomValidator.php | 2 +- framework/Web/UI/WebControls/TDataBoundControl.php | 2 +- framework/Web/UI/WebControls/TDataGrid.php | 2 +- framework/Web/UI/WebControls/TDataGridColumn.php | 2 +- .../Web/UI/WebControls/TDataGridItemRenderer.php | 2 +- .../Web/UI/WebControls/TDataGridPagerStyle.php | 2 +- framework/Web/UI/WebControls/TDataList.php | 2 +- .../Web/UI/WebControls/TDataListItemRenderer.php | 2 +- framework/Web/UI/WebControls/TDataRenderer.php | 2 +- .../Web/UI/WebControls/TDataSourceControl.php | 2 +- framework/Web/UI/WebControls/TDataSourceView.php | 2 +- .../Web/UI/WebControls/TDataTypeValidator.php | 2 +- framework/Web/UI/WebControls/TDatePicker.php | 2 +- framework/Web/UI/WebControls/TDropDownList.php | 2 +- .../Web/UI/WebControls/TDropDownListColumn.php | 2 +- .../Web/UI/WebControls/TEditCommandColumn.php | 2 +- .../Web/UI/WebControls/TEmailAddressValidator.php | 2 +- framework/Web/UI/WebControls/TExpression.php | 2 +- framework/Web/UI/WebControls/TFileUpload.php | 2 +- framework/Web/UI/WebControls/TFont.php | 2 +- framework/Web/UI/WebControls/THead.php | 2 +- framework/Web/UI/WebControls/THeader1.php | 2 +- framework/Web/UI/WebControls/THeader2.php | 2 +- framework/Web/UI/WebControls/THeader3.php | 2 +- framework/Web/UI/WebControls/THeader4.php | 2 +- framework/Web/UI/WebControls/THeader5.php | 2 +- framework/Web/UI/WebControls/THeader6.php | 2 +- framework/Web/UI/WebControls/THiddenField.php | 2 +- framework/Web/UI/WebControls/THtmlArea.php | 2 +- framework/Web/UI/WebControls/THtmlArea4.php | 2 +- framework/Web/UI/WebControls/THtmlElement.php | 2 +- framework/Web/UI/WebControls/THyperLink.php | 2 +- framework/Web/UI/WebControls/THyperLinkColumn.php | 2 +- framework/Web/UI/WebControls/TImage.php | 2 +- framework/Web/UI/WebControls/TImageButton.php | 2 +- framework/Web/UI/WebControls/TImageMap.php | 2 +- framework/Web/UI/WebControls/TInlineFrame.php | 2 +- framework/Web/UI/WebControls/TItemDataRenderer.php | 2 +- framework/Web/UI/WebControls/TJavascriptLogger.php | 2 +- framework/Web/UI/WebControls/TKeyboard.php | 2 +- framework/Web/UI/WebControls/TLabel.php | 2 +- framework/Web/UI/WebControls/TLinkButton.php | 2 +- framework/Web/UI/WebControls/TListBox.php | 2 +- framework/Web/UI/WebControls/TListControl.php | 2 +- .../Web/UI/WebControls/TListControlValidator.php | 2 +- framework/Web/UI/WebControls/TListItem.php | 2 +- framework/Web/UI/WebControls/TLiteral.php | 2 +- framework/Web/UI/WebControls/TLiteralColumn.php | 2 +- framework/Web/UI/WebControls/TMarkdown.php | 2 +- framework/Web/UI/WebControls/TMultiView.php | 2 +- framework/Web/UI/WebControls/TOutputCache.php | 2 +- framework/Web/UI/WebControls/TPager.php | 2 +- framework/Web/UI/WebControls/TPanel.php | 2 +- framework/Web/UI/WebControls/TPanelStyle.php | 2 +- framework/Web/UI/WebControls/TPlaceHolder.php | 2 +- framework/Web/UI/WebControls/TRadioButton.php | 2 +- framework/Web/UI/WebControls/TRadioButtonList.php | 2 +- framework/Web/UI/WebControls/TRangeValidator.php | 2 +- framework/Web/UI/WebControls/TRatingList.php | 2 +- .../UI/WebControls/TRegularExpressionValidator.php | 2 +- framework/Web/UI/WebControls/TRepeatInfo.php | 2 +- framework/Web/UI/WebControls/TRepeater.php | 2 +- .../Web/UI/WebControls/TRepeaterItemRenderer.php | 2 +- .../Web/UI/WebControls/TRequiredFieldValidator.php | 2 +- framework/Web/UI/WebControls/TSafeHtml.php | 2 +- framework/Web/UI/WebControls/TSlider.php | 2 +- framework/Web/UI/WebControls/TStatements.php | 2 +- framework/Web/UI/WebControls/TStyle.php | 2 +- framework/Web/UI/WebControls/TStyleSheet.php | 2 +- framework/Web/UI/WebControls/TTabPanel.php | 2 +- framework/Web/UI/WebControls/TTable.php | 2 +- framework/Web/UI/WebControls/TTableCell.php | 2 +- framework/Web/UI/WebControls/TTableFooterRow.php | 2 +- framework/Web/UI/WebControls/TTableHeaderCell.php | 2 +- framework/Web/UI/WebControls/TTableHeaderRow.php | 2 +- framework/Web/UI/WebControls/TTableRow.php | 2 +- framework/Web/UI/WebControls/TTemplateColumn.php | 2 +- framework/Web/UI/WebControls/TTextBox.php | 2 +- framework/Web/UI/WebControls/TTextHighlighter.php | 2 +- framework/Web/UI/WebControls/TTextProcessor.php | 2 +- .../Web/UI/WebControls/TValidationSummary.php | 2 +- framework/Web/UI/WebControls/TWebControl.php | 2 +- .../Web/UI/WebControls/TWebControlAdapter.php | 2 +- .../Web/UI/WebControls/TWebControlDecorator.php | 2 +- framework/Web/UI/WebControls/TWizard.php | 2 +- .../WebControls/TWizardNavigationButtonStyle.php | 2 +- framework/Web/UI/WebControls/TXmlTransform.php | 2 +- framework/Web/UI/WebControls/assets/captcha.php | 2 +- framework/Wsat/TWsatARGenerator.php | 2 +- framework/Wsat/TWsatBaseGenerator.php | 2 +- framework/Wsat/TWsatScaffoldingGenerator.php | 2 +- framework/Wsat/TWsatService.php | 2 +- framework/Wsat/pages/TWsatGenerateAR.php | 2 +- framework/Wsat/pages/TWsatHome.php | 2 +- framework/Wsat/pages/TWsatLogin.php | 2 +- framework/Wsat/pages/TWsatScaffolding.php | 13 +- framework/Xml/TXmlDocument.php | 2 +- framework/interfaces.php | 2 +- framework/prado.php | 2 +- framework/pradolite.php | 153 ++++++++++++++++----- index.html | 6 +- 339 files changed, 532 insertions(+), 388 deletions(-) diff --git a/HISTORY b/HISTORY index ef7b7d60..17c6bb84 100644 --- a/HISTORY +++ b/HISTORY @@ -1,3 +1,45 @@ +Version 3.3.0 November ??, 2015 + +CHG: Added jQuery and rebased PRADO's effect and controls on it (ctrlaltca) +ENH: Added jQueryUI and created new controls (ctrlaltca) +ENH: Added Bootstrap3 (daniel) +BUG: Issue #550 - TActivePager not working correctly on XAMP 5.6.3 (LCSKJ) +BUG: Issue #549 - TSqlCriteria, not possible to reset value of condition (majuca) +BUG: Issue #542 - Fix clientside validation in TActiveCustomValidator (majuca) +BUG: Issue #546 - Wrong exception messages in TAccordion (david0) +ENH: Issue #545 - Make Prado.Callback return the request (majuca, david0) +BUG: Issue #543 - Can't set a url mapping pattern class in php config (plachance) +BUG: Issue #541 - Security - HttpOnly parameter in THttpSession and THttpCookie (ctrlaltca) +BUG: Issue #539 - Status Code not send when throwing a THttpException (ctrlaltca) +BUG: Issues #528, 538 - Fix errors in Prado.Validation.validateControl (majuca, david0) + +Version 3.2.4 Aug 26, 2014 + +BUG: Issue #492 - Prado generates json_error when encoding an exception with non UTF-8 data (david0) +ENH: Issue #494 - Adding toArray() and toJSON() to TActiveRecord (dmarko484) +BUG: Issue #498 - Typo in TActiveFileUpload (Jens-mB) +BUG: Issue #499 - Avoid scrolling when calling TControl::focus() (david0) +BUG: Issue #502 - TSlider behaves strangely in TTabView (ctrlaltca) +BUG: Issue #504 - Default Button cannot be referenced by . (ctrlaltca) +BUG: Issue #506 - Unused lines of code in TLiteralColumn::initializeCell (cross) +BUG: Issue #511 - TActivePager's ButtonCssClass property is not rendered in buttons (ctrlaltca) +BUG: Issue #515 - THtmlArea should override Readonly property (ctrlaltca) +BUG: Issue #516 - Check Validators in TActiveEditCommandColumn (ctrlaltca) +BUG: Issue #517 - TXmlDocument adjustment (gnit) +BUG: Issue #518 - Runtime Notice in Gettext::factory() (ctrlaltca) +BUG: Issue #519 - For MySQL in case PDO::CASE_LOWER creating table info does not work (ganiuszka) +BUG: Issue #246 - Refix: User date() instead of gmdate() in TLogRoute (drigolin) +BUG: Issue #520 - Unknown runtime error with Internet Explorer 8 (david0) +BUG: Issue #524 - JSON error (5): Malformed UTF-8 characters when encoding callback response (david0) +BUG: Issue #526 - TJsonRpcProtocol::callMethod, requested method is called twice (jojoinside) +BUG: Issue #527 - TJsonRpcProtocol::callMethod, semicolon must be removed (jojoinside) +ENH: Ported tests to Selenium2 +BUG: Avoid an exception loop on callback error when headers have already been sent (ctrlaltca) +BUG: Avoid rendering - -

- Another nice thing about this function is that you can pass either the id string or the element object itself, - which makes this function very useful when creating other functions that can also take either form of argument. -

- -

Using the $F() function

- -

- The $F() function is a another welcome shortcut. It returns the value of any field input control, - like text boxes or drop-down lists. The function can take as argument either the element id or the element object itself. -

- - - - - - - - diff --git a/demos/quickstart/protected/pages/Advanced/Scripts2.page b/demos/quickstart/protected/pages/Advanced/Scripts2.page deleted file mode 100755 index 5d88b065..00000000 --- a/demos/quickstart/protected/pages/Advanced/Scripts2.page +++ /dev/null @@ -1,253 +0,0 @@ - -

DOM Events and Javascript

- -

Basic event handling

- -

The syntax for working with events looks like the code below.

- - -Event.observe(element, name, observer, [useCapture]); - - -

Assuming for a moment that we want to observe when a link was clicked, -we could do the following:

- - -// <a id="clicker" href="http://foo.com">Click me</a> -Event.observe('clicker', 'click', function(event) -{ - alert('clicked!'); -}); - - -

If we wanted to get the element that fired the event, we'd do this:

- - -Event.observe('clicker', 'click', function(event) -{ - alert(Event.element(event)); -}); - - -

Observing keystrokes

- -

If we wanted to observe keystrokes for the entire document, we could do the following:

- - -Event.observe(document, 'keypress', function(event) -{ - if(Event.keyCode(event) == Event.KEY_TAB) - alert('Tab Pressed'); -}); - - -

And lets say we wanted to keep track of what has been typed :

- - -Event.observe('search', 'keypress', function(event) -{ - Element.update('search-results', $F(Event.element(event))); -}); - - -

Prototype defines properties inside the event object for some -of the more common keys, so feel free to dig around in Prototype to -see which ones those are.

- -

A final note on keypress events; If you'd like to detect a -left click you can use Event.isLeftClick(event).

- -

Getting the coordinates of the mouse pointer

- -

Drag and drop, dynamic element resizing, games, and -much more all require the ability to track the X and Y location of -the mouse. Prototype makes this fairly simple. The code below tracks -the X and Y position of the mouse and spits out those values into -an input box named mouse.

- - -Event.observe(document, 'mousemove', function(event) -{ - $('mouse').value = "X: " + Event.pointerX(event) + - "px Y: " + Event.pointerY(event) + "px"; -}); - - -

If we wanted to observe the mouse location when it was -hovering over a certain element, we'd just change the document argument to -the id or element that was relevant.

- -

Stopping Propagation

- -

Event.stop(event) will stop the propagation of an event .

- -

Events, Binding, and Objects

- -

Everything has been fairly straight forward so far, but things -start getting a little trickier when you need to work with events in -and object-oriented environment. You have to deal with binding and funky -looking syntax that might take a moment to get your head around.

- -

Lets look at some code so you can get a better understanding of what I'm talking about.

- -EventDispenser = Class.create(); -EventDispenser.prototype = -{ - initialize: function(list) - { - this.list = list; - - // Observe clicks on our list items - $$(this.list + " li").each(function(item) - { - Event.observe(item, 'click', this.showTagName.bindEvent(this)); - }.bind(this)); - - // Observe when a key on the keyboard is pressed. - // In the observer, we check for - // the tab key and alert a message if it is pressed. - Event.observe(document, 'keypress', this.onKeyPress.bindEvent(this)); - - // Observe our fake live search box. When a user types - // something into the box, the observer will take that - // value(-1) and update our search-results div with it. - Event.observe('search', 'keypress', this.onSearch.bindEvent(this)); - - Event.observe(document, 'mousemove', this.onMouseMove.bindEvent(this)); - }, - - // Arbitrary functions to respond to events - showTagName: function(event) - { - alert(Event.element(event).tagName); - }, - - onKeyPress: function(event) - { - var code = event.keyCode; - if(code == Event.KEY_TAB) - alert('Tab key was pressed'); - }, - - onSearch: function(event) - { - Element.update('search-results', $F(Event.element(event))); - }, - - onMouseMove: function(event) - { - $('mouse').value = "X: " + Event.pointerX(event) + - "px Y: " + Event.pointerY(event) + "px"; - } -} - -

Whoa! What's going on here? Well, we've defined our a -custom class EventDispenser. We're going to be using this class -to setup events for our document. Most of this code is a -rewrite of the code we looked at earlier except this time, we -are working from inside an object.

- -

Looking at the initialize method, we can really see how -things are different now. Take a look at the code below:

- -// Observe clicks on our list items -$$(this.list + " li").each(function(item) -{ - Event.observe(item, 'click', this.showTagName.bindEvent(this)); -}.bind(this)); - - -

We've got iterators, binding and all sorts of stuff going on. -Lets break down what this chunk of code is doing.

- -

First we are hunting for a collection of elements based on -it's CSS selector. This uses the Prototype selector function $$(). -After we've found the list items we are dealing with we send -those into an each iteration where we will add our observers.

- - -Event.observe(item, 'click', this.showTagName.bindEvent(this)); - - -

Now looking at the code above, you'll notice the bindEvent function. -This takes the method before it showTagName and treats it as the -method that will be triggered when, in this case, -someone clicks one of our list items.

- -

You'll also notice we pass this as an argument to the bindEvent function. -This simply allows us to reference the object in context EventDispenser -inside our function showTagName(event). If the showTagName function -requires additional parameters, you can attach them to the later parameters of bindEvent. For example

- -this.showTagName.bindEvent(this, param1, param2); - -//where the showTagName function is defined as -showTime : function (event, param1, param2) { ... } - - -

Moving on, you'll see bind(this) attached to our iterator function. -This really has nothing to do with events, it is only here to allow me to -use this inside the iterator. If we did not use bind(this), I could not -reference the method showTagName inside the iterator.

- -

Ok, so we'll move on to looking at our methods that actually get -called when an event occurs. Since we've been dealing with showTagName, lets look at it.

- - -showTagName: function(event) -{ - alert(Event.element(event).tagName); -} - - -

As you can see, this function accepts one argument--the event. -In order for us to get the element which fired the event we need to -pass that argument to Event.element. Now we can manipulate it at will.

- -

This covers the most confusing parts of our code. The text above is also -relevant to the remaining parts of our code. If there is anything about -this you don't understand, feel free to ask questions in the forum.

- -

Removing Event Listeners

- -

This one threw me for a loop the first time I tried to use it. -I tried something similar to what I did in the Event.observe -call with the exception of using stopObserving, but nothing seemed -to change. In other words, the code below does NOT work.

- - -$$(this.list + " li").each(function(item) -{ - Event.stopObserving(item, 'click', this.showTagName); -}.bind(this)); - - -

What's the deal here? The reason this does not work is because there -is no pointer to the observer. This means that when we passed this.showTagName -in the Event.observe method before hand, we passed it as an -anonymous function. We can't reference an anonymous function -because it simply does not have a pointer.

- -

So how do we get the job done? All we need to do is give the -observing function a pointer, or the jargon free version: Set a variable -that points to this.showTagName. Ok, lets change our code a bit.

- - -this.showTagObserver = this.showTagName.bindEvent(this); - -// Observe clicks on our list items -$$(this.list + " li").each(function(item) -{ - Event.observe(item, 'click', this.showTagObserver); -}.bind(this)); - - -

Now we can remove the event listeners from our list like this:

- -$$(this.list + " li").each(function(item) -{ - Event.stopObserving(item, 'click', this.showTagObserver); -}.bind(this)); - - -
diff --git a/demos/quickstart/protected/pages/Advanced/Scripts3.page b/demos/quickstart/protected/pages/Advanced/Scripts3.page index 3f41abe1..b937e274 100755 --- a/demos/quickstart/protected/pages/Advanced/Scripts3.page +++ b/demos/quickstart/protected/pages/Advanced/Scripts3.page @@ -19,22 +19,31 @@ $this->getPage()->getClientScript()->registerPradoScript("effects"); The available packaged libraries included in Prado are
    -
  • prado : basic PRADO javascript framework based on Prototype
  • -
  • effects : visual effects from script.aculo.us
  • -
  • ajax : ajax and callback related based on Prototype
  • -
  • validator : validation
  • +
  • jquery : jQuery javascript framework
  • +
  • prado : basic PRADO javascript framework based on jQuery
  • +
  • bootstrap : Bootstrap front-end framework
  • +
  • effects : visual effects based on jQueryUI
  • +
  • ajax : ajax and callback related based on jQuery
  • +
  • validator : widgets validation
  • logger : javascript logger and object browser
  • -
  • datepicker : datepicker control
  • -
  • colorpicker : colorpicker control
  • +
  • datepicker : TDatepicker control
  • +
  • colorpicker : TColorPicker control
  • dragdrop : basic support for "drag and drop" control
  • dragdropextra : extra support for "drag and drop" controls
  • -
  • slider : slider control
  • +
  • slider : TSlider control
  • keyboard : software keyboard control
  • -
  • tabpanel : tabpanel control
  • +
  • tabpanel : TTabPanel control
  • +
  • inlineeditor : TInPlaceTextBox. control
  • activedatepicker : ajax version of the datepicker control
  • activefileupload : ajax version of the fileupload control
  • -
  • accordion : accordion control
  • -
  • htmlarea : tinymce control
  • +
  • accordion : TAccordion control
  • +
  • ratings : TRatingList control
  • +
  • htmlarea : tinyMCE version 3 editor
  • +
  • htmlarea4 : tinyMCE version 4 editor
  • +
  • prototype : prototype javascript framework (only for compatibility with old custom controls)
  • +
  • dragdrop : compatibility package for old, prototype-based drag&drop controls
  • +
  • dragdropextra : compatiblity package for old, prototype-based drag&drop controls
  • +
  • autocomplete : compatibility package for prototype-based TAutoComplete control

The dependencies for each library are automatically resolved. Components diff --git a/demos/quickstart/protected/pages/Advanced/es/Scripts1.page b/demos/quickstart/protected/pages/Advanced/es/Scripts1.page deleted file mode 100755 index 96ab7760..00000000 --- a/demos/quickstart/protected/pages/Advanced/es/Scripts1.page +++ /dev/null @@ -1,96 +0,0 @@ - - -

Developer Notes for prototype.js

-This guide is based on the -Developer Notes for prototype.js by Sergio Pereira. - -

What is that?

-

-In case you haven't already used it, prototype.js is a - JavaScript library written by Sam Stephenson. - This amazingly well thought and well written piece of standards-compliant code takes a lot of - the burden associated with creating rich, highly interactive web pages that characterize the Web 2.0 off your back. -

- -

- If you tried to use this library recently, you probably noticed that documentation is not one - of its strongest points. As many other developers before me, I got my head around prototype.js by - reading the source code and experimenting with it. I thought it would be nice to take notes while - I learned and share with everybody else. -

-

- As you read the examples and the reference, developers familiar with the Ruby - programming language will notice an intentional similarity between Ruby's - built-in classes and many of the extensions implemented by this library. -

- - -

Using the $() function

-

- The $() function is a handy shortcut to the all-too-frequent document.getElementById() function - of the DOM. Like the DOM function, this one returns the element that has the id passed as an argument. -

- -

- Unlike the DOM function, though, this one goes further. You can pass more than one id and - $() will return an Array object with - all the requested elements. The example below should illustrate this. -

- -<com:TClientScript UsingClientScripts="prado" /> -
-

This is a paragraph

-
- -
-

This is another paragraph

-
- - - - - -
-

- Another nice thing about this function is that you can pass either the id string or the element object itself, - which makes this function very useful when creating other functions that can also take either form of argument. -

- -

Using the $F() function

- -

- The $F() function is a another welcome shortcut. It returns the value of any field input control, - like text boxes or drop-down lists. The function can take as argument either the element id or the element object itself. -

- - - - - - - - diff --git a/demos/quickstart/protected/pages/Advanced/es/Scripts2.page b/demos/quickstart/protected/pages/Advanced/es/Scripts2.page deleted file mode 100755 index 5d88b065..00000000 --- a/demos/quickstart/protected/pages/Advanced/es/Scripts2.page +++ /dev/null @@ -1,253 +0,0 @@ - -

DOM Events and Javascript

- -

Basic event handling

- -

The syntax for working with events looks like the code below.

- - -Event.observe(element, name, observer, [useCapture]); - - -

Assuming for a moment that we want to observe when a link was clicked, -we could do the following:

- - -// <a id="clicker" href="http://foo.com">Click me</a> -Event.observe('clicker', 'click', function(event) -{ - alert('clicked!'); -}); - - -

If we wanted to get the element that fired the event, we'd do this:

- - -Event.observe('clicker', 'click', function(event) -{ - alert(Event.element(event)); -}); - - -

Observing keystrokes

- -

If we wanted to observe keystrokes for the entire document, we could do the following:

- - -Event.observe(document, 'keypress', function(event) -{ - if(Event.keyCode(event) == Event.KEY_TAB) - alert('Tab Pressed'); -}); - - -

And lets say we wanted to keep track of what has been typed :

- - -Event.observe('search', 'keypress', function(event) -{ - Element.update('search-results', $F(Event.element(event))); -}); - - -

Prototype defines properties inside the event object for some -of the more common keys, so feel free to dig around in Prototype to -see which ones those are.

- -

A final note on keypress events; If you'd like to detect a -left click you can use Event.isLeftClick(event).

- -

Getting the coordinates of the mouse pointer

- -

Drag and drop, dynamic element resizing, games, and -much more all require the ability to track the X and Y location of -the mouse. Prototype makes this fairly simple. The code below tracks -the X and Y position of the mouse and spits out those values into -an input box named mouse.

- - -Event.observe(document, 'mousemove', function(event) -{ - $('mouse').value = "X: " + Event.pointerX(event) + - "px Y: " + Event.pointerY(event) + "px"; -}); - - -

If we wanted to observe the mouse location when it was -hovering over a certain element, we'd just change the document argument to -the id or element that was relevant.

- -

Stopping Propagation

- -

Event.stop(event) will stop the propagation of an event .

- -

Events, Binding, and Objects

- -

Everything has been fairly straight forward so far, but things -start getting a little trickier when you need to work with events in -and object-oriented environment. You have to deal with binding and funky -looking syntax that might take a moment to get your head around.

- -

Lets look at some code so you can get a better understanding of what I'm talking about.

- -EventDispenser = Class.create(); -EventDispenser.prototype = -{ - initialize: function(list) - { - this.list = list; - - // Observe clicks on our list items - $$(this.list + " li").each(function(item) - { - Event.observe(item, 'click', this.showTagName.bindEvent(this)); - }.bind(this)); - - // Observe when a key on the keyboard is pressed. - // In the observer, we check for - // the tab key and alert a message if it is pressed. - Event.observe(document, 'keypress', this.onKeyPress.bindEvent(this)); - - // Observe our fake live search box. When a user types - // something into the box, the observer will take that - // value(-1) and update our search-results div with it. - Event.observe('search', 'keypress', this.onSearch.bindEvent(this)); - - Event.observe(document, 'mousemove', this.onMouseMove.bindEvent(this)); - }, - - // Arbitrary functions to respond to events - showTagName: function(event) - { - alert(Event.element(event).tagName); - }, - - onKeyPress: function(event) - { - var code = event.keyCode; - if(code == Event.KEY_TAB) - alert('Tab key was pressed'); - }, - - onSearch: function(event) - { - Element.update('search-results', $F(Event.element(event))); - }, - - onMouseMove: function(event) - { - $('mouse').value = "X: " + Event.pointerX(event) + - "px Y: " + Event.pointerY(event) + "px"; - } -} - -

Whoa! What's going on here? Well, we've defined our a -custom class EventDispenser. We're going to be using this class -to setup events for our document. Most of this code is a -rewrite of the code we looked at earlier except this time, we -are working from inside an object.

- -

Looking at the initialize method, we can really see how -things are different now. Take a look at the code below:

- -// Observe clicks on our list items -$$(this.list + " li").each(function(item) -{ - Event.observe(item, 'click', this.showTagName.bindEvent(this)); -}.bind(this)); - - -

We've got iterators, binding and all sorts of stuff going on. -Lets break down what this chunk of code is doing.

- -

First we are hunting for a collection of elements based on -it's CSS selector. This uses the Prototype selector function $$(). -After we've found the list items we are dealing with we send -those into an each iteration where we will add our observers.

- - -Event.observe(item, 'click', this.showTagName.bindEvent(this)); - - -

Now looking at the code above, you'll notice the bindEvent function. -This takes the method before it showTagName and treats it as the -method that will be triggered when, in this case, -someone clicks one of our list items.

- -

You'll also notice we pass this as an argument to the bindEvent function. -This simply allows us to reference the object in context EventDispenser -inside our function showTagName(event). If the showTagName function -requires additional parameters, you can attach them to the later parameters of bindEvent. For example

- -this.showTagName.bindEvent(this, param1, param2); - -//where the showTagName function is defined as -showTime : function (event, param1, param2) { ... } - - -

Moving on, you'll see bind(this) attached to our iterator function. -This really has nothing to do with events, it is only here to allow me to -use this inside the iterator. If we did not use bind(this), I could not -reference the method showTagName inside the iterator.

- -

Ok, so we'll move on to looking at our methods that actually get -called when an event occurs. Since we've been dealing with showTagName, lets look at it.

- - -showTagName: function(event) -{ - alert(Event.element(event).tagName); -} - - -

As you can see, this function accepts one argument--the event. -In order for us to get the element which fired the event we need to -pass that argument to Event.element. Now we can manipulate it at will.

- -

This covers the most confusing parts of our code. The text above is also -relevant to the remaining parts of our code. If there is anything about -this you don't understand, feel free to ask questions in the forum.

- -

Removing Event Listeners

- -

This one threw me for a loop the first time I tried to use it. -I tried something similar to what I did in the Event.observe -call with the exception of using stopObserving, but nothing seemed -to change. In other words, the code below does NOT work.

- - -$$(this.list + " li").each(function(item) -{ - Event.stopObserving(item, 'click', this.showTagName); -}.bind(this)); - - -

What's the deal here? The reason this does not work is because there -is no pointer to the observer. This means that when we passed this.showTagName -in the Event.observe method before hand, we passed it as an -anonymous function. We can't reference an anonymous function -because it simply does not have a pointer.

- -

So how do we get the job done? All we need to do is give the -observing function a pointer, or the jargon free version: Set a variable -that points to this.showTagName. Ok, lets change our code a bit.

- - -this.showTagObserver = this.showTagName.bindEvent(this); - -// Observe clicks on our list items -$$(this.list + " li").each(function(item) -{ - Event.observe(item, 'click', this.showTagObserver); -}.bind(this)); - - -

Now we can remove the event listeners from our list like this:

- -$$(this.list + " li").each(function(item) -{ - Event.stopObserving(item, 'click', this.showTagObserver); -}.bind(this)); - - -
diff --git a/demos/quickstart/protected/pages/Advanced/id/Scripts1.page b/demos/quickstart/protected/pages/Advanced/id/Scripts1.page deleted file mode 100755 index 51535de1..00000000 --- a/demos/quickstart/protected/pages/Advanced/id/Scripts1.page +++ /dev/null @@ -1,86 +0,0 @@ - - -

Catatan Pengembang untuk prototype.js

-Bimbingan ini didasarkan pada -Catatan Pengembang untuk prototype.js oleh Sergio Pereira. - -

Apa itu?

-

-Dalam hal Anda tidak pernah menggunakannya, prototype.js adalah librari - JavaScript yang ditulis oleh Sam Stephenson. - Pemikiran yang hebat ini dan kode sesuai-standar yang ditulis dengan baik mengambil banyak beban terkait dengan pembuatan halaman web sangat interaktif dan kaya yang mengkarakterkan Web 2.0 di belakang Anda. -

- -

- Jika Anda baru saja mencoba menggunakan librari ini, Anda mungkin mencatat bahwa dokumentasi bukanlah salah satu titik yang terkuat. Seperti banyak pengembang lain sebelum saya, saya mempelajari prototype.js dengan membaca kode sumber dan melakukan percobaan denganya. Saya pikir akan baik jika mengambil catatan selama saya mempelajari dan berbagi dengan orang lain. -

-

- Setelah Anda membaca contoh dan referensi, para pengembang yang terbiasa dengan bahasa pemrograman Ruby akan mencatat kesamaan maksud antara kelas built-in Ruby dan banyak ekstensi diimplementasikan oleh librari ini. -

- - -

Menggunakan fungsi $()

-

- Fungsi $() adalah jalan pintas yang siap digunakan untuk fungsi yang semua-terlalu-sering document.getElementById() terhadap DOM. Seperti fungsi DOM, fungsi ini mengembalikan elemen yang id-nya dikirimkan sebagai sebuah argumen. -

- -

- Tidak seperti fungsi DOM, bagaimanapun juga, yang satu ini melampauinya. Anda dapat mengirimkan lebih dari satu id dan - $() akan mengembalikan obyek Array dengan semua elemen yang diminta. Contoh di bawah seharunya menggambarkan ini. -

- -<com:TClientScript UsingClientScripts="prado" /> -
-

This is a paragraph

-
- -
-

This is another paragraph

-
- - - - - -
-

- Hal baik lainnya dari fungsi ini adalah bahwa Anda bisa mengirimkan baik string id ataupun elemen obyek itu sendiri, yang menjadikan fungsi ini sangat berguna ketika membuat fungsi lain yang juga mengambil bentuk argumen. -

- -

Menggunakan fungsi $F()

- -

- Fungsi $F() adalah jalan pintas penyambutan lainnya. Ia mengembalikan nilai dari setiap kontrol input field, seperti kotak teks atau daftar drop-down. Fungsi bisa diambil sebagai argumen baik elemen id ataupun elemen obyek itu sendiri. -

- - - - - - - -
diff --git a/demos/quickstart/protected/pages/Advanced/id/Scripts2.page b/demos/quickstart/protected/pages/Advanced/id/Scripts2.page deleted file mode 100755 index 80277628..00000000 --- a/demos/quickstart/protected/pages/Advanced/id/Scripts2.page +++ /dev/null @@ -1,214 +0,0 @@ - -

Event DOM dan Javascript

- -

Penanganan event dasar

- -

Sintaks untuk bekerja dengan event terlihat seperti kode di bawah.

- - -Event.observe(element, name, observer, [useCapture]); - - -

Menganggap untuk saat ini kita ingin mengamati sebuah link yang diklik, kita dapat melakukan yang berikut:

- - -// <a id="clicker" href="http://foo.com">Click me</a> -Event.observe('clicker', 'click', function(event) -{ - alert('clicked!'); -}); - - -

Jika kita menginginkan untuk mendapatkan elemen yang memicu event, kita melakukan ini:

- - -Event.observe('clicker', 'click', function(event) -{ - alert(Event.element(event)); -}); - - -

Mengamati tekanan tombol

- -

Jika kita ingin mengamati tekanan tombol untuk seluruh dokumen, kita dapat melakukan yang berikut:

- - -Event.observe(document, 'keypress', function(event) -{ - if(Event.keyCode(event) == Event.KEY_TAB) - alert('Tab Pressed'); -}); - - -

Dan katakanlah kita ingin melacak apa yang telak diketikan:

- - -Event.observe('search', 'keypress', function(event) -{ - Element.update('search-results', $F(Event.element(event))); -}); - - -

Prototipe mendefinisikan properti di dalam obyek event untuk beberapa dari tombol yang lebih umum, maka jangan ragu-ragu untuk mencari di sekitar Prototype guna melihat yang mana saja itu.

- -

Catatan terakhir pada event tekanan tombol; Jika Anda ingin mendeteksi klik kiri, Anda bisa menggunakan Event.isLeftClick(event).

- -

Mendapatkan koordinat dari penunjuk mouse

- -

Tarik dan jatuhkan, pengukuran ulang elemen dinamis, permainan, dan lebih banyak lagi, semuanya memerlukan kemampuan untuk melacak lokasi X dan Y dari mouse. Prototipe menjadikan hal ini cukup sederhana. Kode di bawah melacak posisi X dan Y dari mouse dan memindahkan nilainya ke dalam kotak input bernama mouse.

- - -Event.observe(document, 'mousemove', function(event) -{ - $('mouse').value = "X: " + Event.pointerX(event) + - "px Y: " + Event.pointerY(event) + "px"; -}); - - -

Jika kita ingin mengamati lokasi mouse saat ia melewati elemen tertentu, cukup ubah argumen dokumen ke id atau elemen yang relevan.

- -

Menghentikan Propagasi

- -

Event.stop(event) akan menghentikan propagasi sebuah event .

- -

Event, Penyatuan, dan Obyek

- -

Sejauh ini semuanya sudah jelas, tapi sesuatu mulai menjadi sedikit lebih rumit ketika Anda perlu bekerja dengan event dalam lingkungan obyek-terorientasi. Anda harus berhadapan dengan penyatuan dan sintaks yang terlihat aneh yang memerlukan beberapa waktu bagi Anda untuk mengetahuinya.

- -

Mari kita lihat pada beberapa kode agar Anda bisa mendapatkan pengertian yang lebih baik atas apa yang sedang saya bicarakan.

- -EventDispenser = Class.create(); -EventDispenser.prototype = -{ - initialize: function(list) - { - this.list = list; - - // Amati klik pada item list kita - $$(this.list + " li").each(function(item) - { - Event.observe(item, 'click', this.showTagName.bindEvent(this)); - }.bind(this)); - - // Amati saat tombol pada keyboard ditekan. - // Dalam pengamat, kita memeriksa - // tombol tab dan memunculkan pesan jika ditekan. - Event.observe(document, 'keypress', this.onKeyPress.bindEvent(this)); - - // Amati kotak pencarian kita yang palsu. Ketika pengguna mengetik - // sesuatu ke dalam kotak, pengamat akan mengambil nilai (-1) itu - // dan memutakhirkan hasil pencarian div dengannya. - Event.observe('search', 'keypress', this.onSearch.bindEvent(this)); - - Event.observe(document, 'mousemove', this.onMouseMove.bindEvent(this)); - }, - - // Fungsi bebas untuk merespon event - showTagName: function(event) - { - alert(Event.element(event).tagName); - }, - - onKeyPress: function(event) - { - var code = event.keyCode; - if(code == Event.KEY_TAB) - alert('Tab key was pressed'); - }, - - onSearch: function(event) - { - Element.update('search-results', $F(Event.element(event))); - }, - - onMouseMove: function(event) - { - $('mouse').value = "X: " + Event.pointerX(event) + - "px Y: " + Event.pointerY(event) + "px"; - } -} - -

Wah! Apa yang terjadi di sini? Kita telah mendefinisikan kelas kustom kita EventDispenser. Kita akan menggunakan kelas ini untuk menyiapkan event untuk dokumenkita. Banyak dari kode ini ditulis ulang yang kita lihat di awal kecuali kali ini, kita bekerja dari dalam sebuah obyek.

- -

Melihat metode initialize, sebenarnya kita dapat melihat bagaimana sesuatu menjadi berbeda sekarang. Lihat kode di bawah ini:

- -// Observe clicks on our list items -$$(this.list + " li").each(function(item) -{ - Event.observe(item, 'click', this.showTagName.bindEvent(this)); -}.bind(this)); - - -

Kita mendapatkan iterator, penyatuan dan semua hal lainnya. Mari kita rinci apa yang dikerjakan kode ini.

- -

Pertama kita memburu koleksi elemen berdasarkan selektor CSS. Ini menggunakan fungsi selektor Prototipe $$(). -Setelah kita menemukan daftar item kita berhadapan dengan apa yang kita kirim ke dalam setiap iterasi di mana kita akan menambahkan pengamat kita.

- - -Event.observe(item, 'click', this.showTagName.bindEvent(this)); - - -

Sekarang, melihat kode di atas, Anda akan mencatat fungsi bindEvent. Ini mengambil metode sebelumnya showTagName dan memperlakukannya sebagai metode yang akan dipicu ketika seseorang mengklik salah satu dari item daftar kita.

- -

Anda juga akan mencatat bahwa kita mengirimkan ini sebagai argumen ke fungsi bindEvent. -Ini membolehkan kita untuk mereferensi obyek dalam konteks EventDispenser -di dalam fungsi showTagName(event) kita. Jika fungsi showTagName memerlukan parameter tambahan, Anda melampirkannya ke parameter terakhir dari bindEvent. Sebagai contoh

- -this.showTagName.bindEvent(this, param1, param2); - -//di mana fungsi showTagName didefinisikan seperti -showTime : function (event, param1, param2) { ... } - - -

Selanjutnya, Anda akan melihat bind(this) yang dilampirkan ke fungsi iterator. -Ini sama sekali tidak berkaitan dengan event, ia berada di sini untuk membolehkan saya menggunakan this di dalam iterator. Jika kita tidak menggunakan bind(this), saya tidak bisa mereferensi metode showTagName di dalam iterator.

- -

Ok, kita berlanjut untuk melihat metode kita yang sebenarnya dipanggil saat terjadi event. Karena kita sudah berhadapan dengan showTagName, mari kita lihat itu.

- - -showTagName: function(event) -{ - alert(Event.element(event).tagName); -} - - -

Seperti yang Anda lihat, fungsi ini menerima satu argumen--event. -Agar kita mendapatkan elemen yang memicu event kita perlu mengirimkan argumen ke Event.element. Sekarang kita dapat memanipulasinya kapan saja.

- -

Ini mencakup bagian yang paling membingungkan dari kode kita. Teks di atas juga relevan untuk bagian sisa dari kode kita. Jika ada sesuatu mengenai ini yang tidak Anda mengerti, jangan ragu-ragu untuk mengajukan pertanyaan dalam forum.

- -

Menghapus Pendengar Event

- -

Yang satu ini melontarkan saya dari lingkaran untuk pertama kali saya mencoba menggunakannya. -Saya mencoba sesuatu yang mirip dengan apa yang saya lakukan dalam pemanggilan Event.observe dengan kekecualian penggunaan stopObserving, tapi tidak ada yang berubah. Dengan kata lain, kode di bawah ini TIDAK bekerja.

- - -$$(this.list + " li").each(function(item) -{ - Event.stopObserving(item, 'click', this.showTagName); -}.bind(this)); - - -

Apa yang terjadi di sini? Alasan ini tidak bekerja karena tidak ada penunjuk ke pengamat. Ini berarti bahwa ketika kita mengirimkan this.showTagName dalam metode Event.observe sebelumnya, kita mengirimkannya sebagai fungsi anonim. Kita tidak bisa mereferensi fungsi anonim karena ia tidak mempunyai penunjuk.

- -

Lalu bagaimana kita yakin pekerjaan diselesaikan? Semua yang kita perlukan adalah memberikan fungsi mengamati penunjuk, atau kelompok versi bebas: Setel variabel yang mengarah ke this.showTagName. Ok, mari kita ubah kode kita sedikit.

- - -this.showTagObserver = this.showTagName.bindEvent(this); - -// Amati klik pada item list kita -$$(this.list + " li").each(function(item) -{ - Event.observe(item, 'click', this.showTagObserver); -}.bind(this)); - - -

Sekarang kita bisa menghapus pendengar event dari daftar kita seperti ini:

- -$$(this.list + " li").each(function(item) -{ - Event.stopObserving(item, 'click', this.showTagObserver); -}.bind(this)); - - -
diff --git a/demos/quickstart/protected/pages/Controls/HtmlArea4.page b/demos/quickstart/protected/pages/Controls/HtmlArea4.page index 1fa33424..17c87e18 100755 --- a/demos/quickstart/protected/pages/Controls/HtmlArea4.page +++ b/demos/quickstart/protected/pages/Controls/HtmlArea4.page @@ -1,6 +1,6 @@ -

THtmlArea4

+

THtmlArea4

diff --git a/demos/quickstart/protected/pages/Controls/Markdown.page b/demos/quickstart/protected/pages/Controls/Markdown.page index d7cc00c6..0285ed32 100644 --- a/demos/quickstart/protected/pages/Controls/Markdown.page +++ b/demos/quickstart/protected/pages/Controls/Markdown.page @@ -1,6 +1,6 @@ -

TMarkdown

+

TMarkdown

diff --git a/demos/quickstart/protected/pages/Database/ViewsArUpdate.page b/demos/quickstart/protected/pages/Database/ViewsArUpdate.page index 5dd084c4..2df1d3d7 100644 --- a/demos/quickstart/protected/pages/Database/ViewsArUpdate.page +++ b/demos/quickstart/protected/pages/Database/ViewsArUpdate.page @@ -1,6 +1,6 @@

Views - AR Classes Update

- +

Usually when you use Active Records Classes to interact with your Data Base you also build some proper views to handle them. To save every element of your views in your Data Base @@ -9,9 +9,9 @@ Thats why Prado offers an automatic mechanism to update your views from your AR Classes and vice versa.

-

Updating views from AR Classes

+

Updating views from AR Classes

-

Instead of assign each attribute in your AR Class to your view controls like this:

+

Instead of assign each attribute in your AR Class to your view controls like this:

$student = AR_Student::finder()->findByPk(1); $this->name->Text = $student->name; @@ -20,7 +20,7 @@ $this->gender->Text = $student->gender; $this->average->Text = $student->average; -

You can do the same as follows:

+

You can do the same as follows:

$student = AR_Student::finder()->findByPk(1); @@ -28,8 +28,8 @@ $this->tryToUpdateView($student); -

Updating AR Classes from views

-

Instead of assign each attribute in your views to your AR Classes like this:

+

Updating AR Classes from views

+

Instead of assign each attribute in your views to your AR Classes like this:

$student = new AR_Student(); $student->name = $this->name->Text; @@ -39,7 +39,7 @@ $student->average = $this->average->Text; $student->save(); -

You can do the same as follows:

+

You can do the same as follows:

$student = new AR_Student(); diff --git a/demos/quickstart/protected/pages/Fundamentals/Pages.page b/demos/quickstart/protected/pages/Fundamentals/Pages.page index 58f4f06d..3e03a24c 100755 --- a/demos/quickstart/protected/pages/Fundamentals/Pages.page +++ b/demos/quickstart/protected/pages/Fundamentals/Pages.page @@ -15,7 +15,7 @@ A form submission is called postback if the submission is made to the pag TPage has a IsPostBack property exposing whether the current request being handled is the first request for this page or the consequence of a postback.

-

CallBack

+

CallBack

A callback is a special form submission that, instead of requiring a full page reload on the browser, gets executed in the background through an ajax call. So, a callback is considered a postback too, but not vice versa.
diff --git a/demos/quickstart/protected/pages/GettingStarted/CommandLine.page b/demos/quickstart/protected/pages/GettingStarted/CommandLine.page index 3619d3d9..9e919212 100644 --- a/demos/quickstart/protected/pages/GettingStarted/CommandLine.page +++ b/demos/quickstart/protected/pages/GettingStarted/CommandLine.page @@ -110,22 +110,22 @@ PostRecord#1

-

Creating Active Record Classes

-

+

Creating Active Record Classes

+

In the blog demo project, we need to create two Active Record classes, UserRecord and PostRecord, to represent data records in the users and posts tables, respectively. Active Record classes must extend from the base class ActiveRecord, and must define property names that matches with the field names of the corresponding table.

-

+

To better organize our directories, we create a new directory protected/database to hold the class files. We also modify our application configuration by inserting the following lines. It is equivalent to adding the directory protected/database to PHP include_path, which allows us to use the classes without explicitly including them.

- + -

+

At the prompt, enter the following two commands to create UserRecord and PostRecord classes:

@@ -135,7 +135,7 @@ At the prompt, enter the following two commands to create UserRecord an >> generate posts Application.database.PostRecord
-

+

Here we used the namespace format again to specify the classes to be created. The path Application.database.UserRecord indicates that we want the UserRecord class file to be protected/database/UserRecord.php.

diff --git a/demos/quickstart/protected/pages/GettingStarted/Installation.page b/demos/quickstart/protected/pages/GettingStarted/Installation.page index 956f53c2..f59eed70 100755 --- a/demos/quickstart/protected/pages/GettingStarted/Installation.page +++ b/demos/quickstart/protected/pages/GettingStarted/Installation.page @@ -13,7 +13,7 @@ The minimum requirement by PRADO is that the Web server support PHP 5.3.3. PRADO PRADO can be installed as a standalone package or using composer

-

Standalone package

+

Standalone package

  1. Go to pradosoft.com to grab the latest version of PRADO.
  2. Unpack the PRADO release file to a Web-accessible directory. @@ -28,7 +28,7 @@ If you encounter any problems with the demo applications, please use the PRADO r

    -

    Composer install

    +

    Composer install

    1. If you don't have installed composer already, install it globally: diff --git a/demos/quickstart/protected/pages/GettingStarted/Upgrading32.page b/demos/quickstart/protected/pages/GettingStarted/Upgrading32.page index e2378ed5..7e630488 100644 --- a/demos/quickstart/protected/pages/GettingStarted/Upgrading32.page +++ b/demos/quickstart/protected/pages/GettingStarted/Upgrading32.page @@ -1,6 +1,6 @@ -

      Upgrading from v3.2

      +

      Upgrading from v3.2

      @@ -17,7 +17,7 @@ We summarize in the following the most significant changes in v3.3 to help devel

      -

      Basic Prototype to jQuery javascript porting

      +

      Basic Prototype to jQuery javascript porting

      The number one rule on writing jQuery javascript code is to read the jQuery documentation. Porting code from Prototype to jQuery needs some effort: here's a basic lookup table to port existing code:

      @@ -168,7 +168,7 @@ The number one rule on writing jQuery javascript code is to read the PRADO specific code changes

      PRADO Porting prado to jQuery some method signatures has changed, or have been adapted: @@ -207,7 +207,7 @@ Porting prado to jQuery some method signatures has changed, or have been adapted -

      Specific controls changes

      +

      Specific controls changes

      Some Prado controls were based on specific extensions of the Prototype + Scriptaculous javascript framework, and they have been deprecated now that jQuery has become the primary js framework in PRADO. PRADO 3.3 introduces jQuery-based counterpart for these controls and encourage everyone to port their code to the new controls, but the old controls are still supposed to work with some minor annoyance: diff --git a/demos/quickstart/protected/pages/GettingStarted/Wsat.page b/demos/quickstart/protected/pages/GettingStarted/Wsat.page index 3d07e6f2..a76ca163 100644 --- a/demos/quickstart/protected/pages/GettingStarted/Wsat.page +++ b/demos/quickstart/protected/pages/GettingStarted/Wsat.page @@ -1,5 +1,5 @@ -

      Web Site Administration Tool

      +

      Web Site Administration Tool

      Web Site Administration Tool (WSAT) is a development tool which allows you to perform several tedious tasks of a PRADO project in a GUI fashion. Its inspired in both Asp.Net - Web Site Administration Tool and Yii's Gii. @@ -12,12 +12,12 @@

      -

      Requirements

      +

      Requirements

      To use WSAT, you need to add in your project configuration file: application.xml, in the services section the wsat service like follows: - + ... @@ -25,7 +25,7 @@

      -

      Usage

      +

      Usage

      Then you are ready to go to: http://localhost/yoursite/index.php?wsat=TWsatLogin and doing so you should see the following page: @@ -36,7 +36,7 @@ is part of a basic security system to avoid undesirable persons to use this tool.

      -

      Active Record classes generation

      +

      Active Record classes generation

      In order to generate AR classes you need to go to: http://localhost/divermania/index.php?wsat=TWsatGenerateAR by clicking the proper links in the welcome page. Then you should see the following page: diff --git a/demos/quickstart/protected/pages/JuiControls/Home.page b/demos/quickstart/protected/pages/JuiControls/Home.page index 7c0c065f..f997e573 100644 --- a/demos/quickstart/protected/pages/JuiControls/Home.page +++ b/demos/quickstart/protected/pages/JuiControls/Home.page @@ -1,9 +1,9 @@ -

      Jui Controls (jQuery UI)

      +

      Jui Controls (jQuery UI)

      Jui controls are the PRADO port of the standard jQuery UI widgets. They can be used as standard Active Controls, but will automatically load the needed jQuery-UI javascript libraries.

      -

      Options

      +

      Options

      The Options property of PRADO Jui controls is used to pass options to the underlying javascript object. Each subproperty set on Options will be translated to a javascript property added to the object. The complete list of options available for each widget is availble at jQuery-UI's API Documentation.

      @@ -24,7 +24,7 @@ jQuery-UI's Resizable adds an handl />
      -

      Events

      +

      Events

      jQuery-UI widgets offers a lot of events that PRADO can hook up and trasmit to the serverside using a callback request. Event available for PRADO Jui controls inherits their names from their jQuery-UI counterparts, prefixed with "On". Jui controls doesn't make use of the AutoPostback property anymore, but only triggers a callback when an event handler is associated to the corresponding event. @@ -42,7 +42,7 @@ jQuery's Draggable allows a target /> -

      PRADO Jui interactions controls

      +

      PRADO Jui interactions controls

      Jui interactions adds basic mouse-based interactions to elements like moving, resizing or sorting. PRADO Jui interactions controls applies there interactions to a TActivePanel For informations of the specific options of each interaction, follow jQuery-UI Interaction API Documentation for the specific interaction. @@ -74,7 +74,7 @@ For informations of the specific options of each interaction, follow jQuery-UI I

    2. -

      PRADO Jui widgets controls

      +

      PRADO Jui widgets controls

      • TJuiProgressbar diff --git a/demos/quickstart/protected/pages/JuiControls/Interactions.page b/demos/quickstart/protected/pages/JuiControls/Interactions.page index 2b48da68..b2be141f 100644 --- a/demos/quickstart/protected/pages/JuiControls/Interactions.page +++ b/demos/quickstart/protected/pages/JuiControls/Interactions.page @@ -1,12 +1,12 @@ -

        Jui interactions controls

        +

        Jui interactions controls

        Jui interactions adds basic mouse-based interactions to elements like moving, resizing or sorting. PRADO Jui interactions controls applies these interactions to a TActivePanel For informations of the specific options of each interaction, follow jQuery-UI Interaction API Documentation for the specific interaction.

        -

        TJuiDraggable

        +

        TJuiDraggable

        - jQuery UI API

        @@ -22,7 +22,7 @@ The panel can be moved using the mouse, and eventually dropped over a -

        TJuiDroppable

        +

        TJuiDroppable

        - jQuery UI API

        @@ -37,7 +37,7 @@ When a TJuiDraggable
        -

        TJuiResizable

        +

        TJuiResizable

        - jQuery UI API

        TJuiResizable is an extension to TActivePanel based on jQuery-UI's Resizable interaction. @@ -52,7 +52,7 @@ A small handle is shown on the bottom right corner of the panel, that permits th -

        TJuiSelectable

        +

        TJuiSelectable

        - jQuery UI API

        TJuiSelectable is an extension to TActivePanel based on jQuery-UI's Selectable interaction. @@ -67,7 +67,7 @@ A small handle is shown on the bottom right corner of the panel, that permits th -

        TJuiSortable

        +

        TJuiSortable

        - jQuery UI API

        TJuiSortable is an extension to TActivePanel based on jQuery-UI's Sortable interaction. diff --git a/demos/quickstart/protected/pages/JuiControls/Widgets.page b/demos/quickstart/protected/pages/JuiControls/Widgets.page index 63c6aa32..5bf8b083 100644 --- a/demos/quickstart/protected/pages/JuiControls/Widgets.page +++ b/demos/quickstart/protected/pages/JuiControls/Widgets.page @@ -1,5 +1,5 @@ -

        Jui widgets controls

        +

        Jui widgets controls

        Jui widgets are complex controls built on the foundations of jQuery effects and jQueryUI interactions. PRADO Jui widgets controls can be divided in two groups: @@ -11,7 +11,7 @@ For informations of the specific options of each widget, follow jQuery-UI Widget

        -

        TJuiProgressbar

        +

        TJuiProgressbar

        -
        jQuery UI API

        @@ -26,7 +26,7 @@ The panel takes the aspect of a progressbar ranging from a value of 0 to the val
        -

        TJuiAutoComplete

        +

        TJuiAutoComplete

        -
        jQuery UI API

        @@ -50,7 +50,7 @@ When a suggestion is selected the OnSuggestionSelected event is raised, -

        TJuiDialog

        +

        TJuiDialog

        -
        jQuery UI API

        @@ -72,7 +72,7 @@ The buttons may contain a callback that will be fired when they are clicked. -

        TJuiDatePicker

        +

        TJuiDatePicker

        -
        jQuery UI API

        diff --git a/demos/site/.htaccess b/demos/site/.htaccess new file mode 100644 index 00000000..cd03b45e --- /dev/null +++ b/demos/site/.htaccess @@ -0,0 +1,8 @@ + +RewriteEngine on + +RewriteCond %{REQUEST_FILENAME} !-d +RewriteCond %{REQUEST_FILENAME} !-f +RewriteRule ^(.*)$ index.php/$1 [L] + + \ No newline at end of file diff --git a/demos/site/assets/.gitignore b/demos/site/assets/.gitignore new file mode 100755 index 00000000..d6b7ef32 --- /dev/null +++ b/demos/site/assets/.gitignore @@ -0,0 +1,2 @@ +* +!.gitignore diff --git a/demos/site/index.php b/demos/site/index.php new file mode 100755 index 00000000..0192f1cb --- /dev/null +++ b/demos/site/index.php @@ -0,0 +1,17 @@ +run(); + diff --git a/demos/site/protected/.htaccess b/demos/site/protected/.htaccess new file mode 100755 index 00000000..8d2f2563 --- /dev/null +++ b/demos/site/protected/.htaccess @@ -0,0 +1 @@ +deny from all diff --git a/demos/site/protected/Common/SimpleMenu.php b/demos/site/protected/Common/SimpleMenu.php new file mode 100644 index 00000000..bcbc94cf --- /dev/null +++ b/demos/site/protected/Common/SimpleMenu.php @@ -0,0 +1,86 @@ +renderBeginTag("ul"); + parent::renderChildren($writer); + $writer->renderEndTag(); + } + +} + +class SimpleMenuItem extends TControl +{ + + public function getPath() + { + return $this->getControlState("Path", null); + } + + public function setPath($value) + { + $this->setControlState("Path", TPropertyValue::ensureString($value)); + } + + public function getUrl() + { + return $this->getControlState("Url", null); + } + + public function setUrl($value) + { + $this->setControlState("Url", TPropertyValue::ensureString($value)); + } + + public function getTarget() + { + return $this->getControlState("Target", null); + } + + public function setTarget($value) + { + $this->setControlState("Target", TPropertyValue::ensureString($value)); + } + + public function getText() + { + return $this->getControlState("Text", $this->getID()); + } + + public function setText($value) { + $this->setControlState("Text", TPropertyValue::ensureString($value)); + } + + public function render($writer) + { + $writer->renderBeginTag("li"); + + if(null !== $path = $this->getPath()) + { + $writer->addAttribute('href', $this->Service->constructUrl($path)); + + if($path == $this->Page->getPagePath()) + $writer->addAttribute('class', 'active'); + } elseif(null !== $url = $this->getUrl()) { + $writer->addAttribute('href', $url); + } + + if($this->getTarget() !== null) + $writer->addAttribute('target', $this->getTarget()); + + $writer->renderBeginTag("a"); + + $writer->write(THttpUtility::htmlEncode($this->getText())); + + $writer->renderEndTag(); + $writer->renderEndTag(); + } +} diff --git a/demos/site/protected/Layouts/MainLayout.php b/demos/site/protected/Layouts/MainLayout.php new file mode 100644 index 00000000..15302dfc --- /dev/null +++ b/demos/site/protected/Layouts/MainLayout.php @@ -0,0 +1,5 @@ + + + + + + + + + + + + + +

        + + +
        + +
        + + + \ No newline at end of file diff --git a/demos/site/protected/Pages/About.page b/demos/site/protected/Pages/About.page new file mode 100644 index 00000000..62d3af2d --- /dev/null +++ b/demos/site/protected/Pages/About.page @@ -0,0 +1,55 @@ + + +
        +

        The PRADO Group

        +

        +The PRADO group is a team of PRADO enthusiasts who develop and promote the PRADO framework and the related projects. +

        +

        Team Members

        +
          +
        • Fabio Bas - development, testing
        • +
        • Ciro Mattia Gonano - github/packagist maintainer
        • +
        • Daniel Sampedro Bello - wsat development
        • +
        • David Otto - development, testing
        • +
        • Jens Klaer - development, testing
        • +
        +

        The following Team Members are currently inactive.

        +
          +
        • Qiang Xue - founder of PRADO framework, core development
        • +
        • Xiang Wei Zhuo - core development (javascripts, active controls, DB controls, tests)
        • +
        • Jason Ragsdale - site and forum administration
        • +
        • Knut Urdalen - test, marketing
        • +
        • Eirik Hoem - core development
        • +
        • Yves Berkholz - core development
        • +
        • Michael Hartl - component development, testing
        • +
        • Carl G. Mathisen - design and document comment system
        • +
        • Christophe Boulain - component development, testing
        • +
        • Robin J. Rogge - site and forum adminitration, core development
        • +
        +

        Past Team Members

        +

        +Alex Flint, Brian Luft, John Teague, Todd Patrick, Pim van der Zwet, Tim Evans, Alban Hanry, Marcus Nyeholt +

        + +

        History of PRADO

        +

        +The very original inspiration of PRADO came from Apache Tapestry. During the design and implementation, Qiang Xue borrowed many ideas from Borland Delphi and Microsoft ASP.NET. The first version of PRADO came out in June 2004 and was written in PHP 4. Driven by the Zend PHP 5 coding contest, Qiang rewrote PRADO in PHP 5, which proved to be a wise move, thanks to the new object model provided by PHP 5. PRADO won the grand prize in the Zend contest, earning high votes both from the public and from the judges' panel. +

        +

        +In August 2004, PRADO was hosted on SourceForge as an open source project. Soon after, the project site xisc.com was announced to public. With the fantastic support of PRADO developer team and PRADO users, PRADO evolved to version 2.0 in mid 2005. In this version, Wei Zhuo contributed to PRADO with the excellent I18 and L10N support. +

        +

        +In May 2005, developers decided to completely rewrite the PRADO framework to resolve a few fundamental issues found in version 2.0 and to catch up with some cool features available in Microsoft ASP.NET 2.0. After nearly a year's hard work with over 50,000 lines of new code, version 3.0 was finally made available in April 2006. +

        +

        +In October 2008, the original development team released a new framework called Yii. Inheriting most of the PRADO code, Yii left the pages/events concept, focusing on a pure MVC design pattern. Since 2009 a lot of people contributed to PRADO fixing issues, developing new features or backporting them from Yii. +

        +

        +To promote a model of community-driven development, the project repositories were moved first on Google Code and then, in September 2013, on GitHub. +

        +

        +Starting from version 3.0, significant efforts are allocated to ensure the quality and stability of PRADO. If we say PRADO v2.x and v1.x are proof-of-concept work, we can say PRADO 3.x has grown up to a project that is suitable for serious business application development. +

        + +
        +
        \ No newline at end of file diff --git a/demos/site/protected/Pages/Demos.page b/demos/site/protected/Pages/Demos.page new file mode 100644 index 00000000..dbc7635d --- /dev/null +++ b/demos/site/protected/Pages/Demos.page @@ -0,0 +1,31 @@ + + +
        + +

        Online Demos

        +

        +The following demos are developed using the PRADO framework. They are also available under the demos directory in the PRADO release. +

        +
        +
        \ No newline at end of file diff --git a/demos/site/protected/Pages/Documentation.page b/demos/site/protected/Pages/Documentation.page new file mode 100644 index 00000000..0a4dd73f --- /dev/null +++ b/demos/site/protected/Pages/Documentation.page @@ -0,0 +1,42 @@ + + +
        + + + + +

        API Manual

        + +The API Manual contains the documentation for all the classes declared in PRADO. + +
        +
        +

        Tutorials

        + +
          +
        • The QuickStart Tutorial - This tutorial is a definitive guidance showing every aspect of PRADO. It is written in PRADO and contains many demos to show the usage of various PRADO controls. The tutorial is also available as a PDF file.
        • +
        • The PRADO Blog Tutorial - This tutorial shows how to use PRADO to build a complete Web application. Prior PRADO knowledge is not required.
        • +
        • The SQLMap Tutorial - This tutorial is a definitive guidance on how to use SQLMap (available since v3.1.0).
        • +
        + + +
        + +
        \ No newline at end of file diff --git a/demos/site/protected/Pages/Download.page b/demos/site/protected/Pages/Download.page new file mode 100644 index 00000000..bdc21221 --- /dev/null +++ b/demos/site/protected/Pages/Download.page @@ -0,0 +1,116 @@ + + +
        + +

        Download

        +

        PRADO is an open source project hosted on GitHub. It is released under the terms of +.

        +

        The latest stable version of PRADO is <%= Prado::getVersion() %>.

        + + + + + +$(document).ready(function () { + $.getJSON("https://api.github.com/repos/pradosoft/prado/releases").done(function (json) { + var release = json[0]; + + var releaseVer = release.tag_name; + var releaseDate = new Date(release.published_at); + var downloadURL = release.assets[0].browser_download_url; + + var monthNames = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"]; + var day = releaseDate.getDate(); + var monthIndex = releaseDate.getMonth(); + var year = releaseDate.getFullYear(); + + $("#lastVersion").text(releaseVer); + $("#lastVersionDate").text(' (' + day + ' ' + monthNames[monthIndex] + ' ' + year + ')'); + $("#downloadLink").attr("href", downloadURL); + }); + + $.get("https://raw.githubusercontent.com/pradosoft/prado/master/HISTORY", function(data) { + $("#changeLog").text(data); + }); +}); + + +
        +

        Latest changelog entries

        +
        loading...
        + +
        +

        Previous PRADO v3.x releases

        + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        VersionDate Files
        3.2.4Aug 26, 2014Source code and documentation
        3.2.3Nov 26, 2013Source code and documentation
        3.2.2July 20, 2013Source code, documentation
        3.2.1January 19, 2013Source code, documentation
        3.2.0June 25, 2012Source code, documentation
        3.1.10July 27, 2011Source code, documentation
        3.1.9June 3, 2011Source code, documentation
        3.1.8May 29, 2011Source code, documentation
        3.1.7February 22, 2010Source code, documentation
        3.1.6July 22, 2009Source code, documentation
        3.1.5May 24, 2009Source code, documentation
        3.1.4January 11, 2009Source code, documentation
        3.1.3November 1, 2008Source code, documentation
        3.1.2April 21, 2008Source code
        3.1.1October 1, 2007Source code
        3.1.0July 2, 2007Source code
        3.0.7April 2, 2007Source code
        3.0.6December 4, 2006Source code
        3.0.5October 23, 2006Source code
        3.0.4September 4, 2006Source code
        3.0.3August 6, 2006Source code
        3.0.2July 2, 2006Source code
        3.0.1June 4, 2006Source code
        3.0.0May 1, 2006Source code
        +
        +
        +

        PRADO Tools

        + + + + + + + + + + + + + + + + + + + + + + + + + + +
        FileDescriptionRelease date
        Dreamweaver ExtensionPRADO Dreamweaver Extension (r2764)February 14, 2010
        InType BundlePRADO InType Bundle (r2854)June 23, 2010
        Notepad++ PluginPRADO Notepad++ Plugin (r2793)April 6, 2010
        Textmate BundlePRADO TextMate Bundle, suitable also for Sublime Text 2 (r3193)July 24, 2012
        +
        +
        +

        Git Access

        +

        You can obtain the latest development version of PRADO from our Git repository.

        +
        WARNING: Unreleased Source code in Git may contain known bugs and are subject to changes without prior notice.
        +

        The Source code repository can be accessed anonymously using the following command,

        +
        git clone https://github.com/pradosoft/prado.git
        + +
        + +
        \ No newline at end of file diff --git a/demos/site/protected/Pages/Home.page b/demos/site/protected/Pages/Home.page new file mode 100755 index 00000000..b9cc49b7 --- /dev/null +++ b/demos/site/protected/Pages/Home.page @@ -0,0 +1,37 @@ + + + + +
        +
        +

        What is PRADO?

        +

        PRADOTM is a component-based and event-driven programming framework for developing Web applications in PHP 5. PRADO stands for PHP Rapid Application Development Object-oriented.

        +
        +
        +

        What does PRADO require?

        +

        The sole requirement to run PRADO-based applications is a Web server supporting PHP 5.3.0 or higher. PRADO is free. You can use it to develop either open source or commercial applications.

        +
        +
        +

        Quick facts about PRADO

        +

        + First release: August 2004
        + License: revised BSD
        + Lines of core code: > 150,000 lines
        + Number of classes: > 700
        + Downloads: > 430,000 15/09/2013
        +

        +
        +
        + +
        +
        + +
        \ No newline at end of file diff --git a/demos/site/protected/Pages/License.page b/demos/site/protected/Pages/License.page new file mode 100644 index 00000000..9636acf9 --- /dev/null +++ b/demos/site/protected/Pages/License.page @@ -0,0 +1,28 @@ + + +
        + +

        License of PRADO

        + +

        +The PRADO framework and the included demos are free software. They are released under the terms of the following BSD License. +

        +

        +Copyright 2004-<%= date('Y') %> by The PRADO Group (http://www.pradosoft.com)
        +All rights reserved. +

        +

        +Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: +

        +
          +
        • Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
        • +
        • Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
        • +
        • Neither the name of the PRADO Group nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.
        • +
        +

        +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +

        + +
        + +
        \ No newline at end of file diff --git a/demos/site/protected/Pages/Tos.page b/demos/site/protected/Pages/Tos.page new file mode 100644 index 00000000..18f4750c --- /dev/null +++ b/demos/site/protected/Pages/Tos.page @@ -0,0 +1,42 @@ + + +
        + +

        Terms of Service

        + +

        +This web site is owned and operated by Prado Software Group, (PradoSoft or we). We have created this page to share with you our privacy and legal policies regarding to your personal information and the contents on this site. +

        + +

        Privacy Policy

        +

        +We do not collect personal information about you unless you voluntarily provide it to us or authorize us to collect it. We consider the following to be personal information: your name, email address, phone number, date of birth, job, personal interests, your e-mail address. We treat personal information confidentially. +

        +

        +We do collect and track certain non-personally information, including but not limited to, user IP numbers and browser type, access times, domain names, usage habits and other information which does not specifically identify any individual. +

        +

        +We may use cookies to customize your use of the web site and for other purposes to improve your use of the service, and may also use web beacons, web bugs, action tags and third party cookies. You may stop or restrict the placement of cookies on your computer or flush them from your browser by adjusting your web browser preferences, in which case you may still use our Service, but it may interfere with some of its functionality. We do not use cookies to automatically retrieve personal information from your computer without your knowledge. +

        + +

        Legal Disclaimer

        +

        +All the information and contents posted on this web site are the property of PradoSoft, and are protected by U.S. and foreign copyright laws. By accessing this web site, you agree to the following terms and conditions. You shall not use this web site if you do not agree. +

        +
          +
        1. This web site and its contents may NOT be copied or distributed in any manner without the prior written consent of PradoSoft.
        2. +
        3. PradoSoft MAKES NO REPRESENTATIONS OR WARRANTIES WITH RESPECT TO THIS WEB SITE, ITS CONTENTS OR THE MANUSCRIPT, WHICH ARE PROVIDED FOR USE "AS IS" AND IS WITHOUT WARRANTY OF ANY KIND.
        4. +
        5. Portions of this web site may publish readers comments and opinion. PradoSoft does not assume or have any responsibility or any liability for the readers comments or opinions.
        6. +
        + +

        Change of Policies

        +

        +The above policies may change from time to time. PradoSoft will post those changes on this page. +

        +

        +This page was last updated on May 2, 2006. +

        + +
        + +
        \ No newline at end of file diff --git a/demos/site/protected/application.xml b/demos/site/protected/application.xml new file mode 100644 index 00000000..b937e82b --- /dev/null +++ b/demos/site/protected/application.xml @@ -0,0 +1,40 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/demos/site/protected/runtime/.gitignore b/demos/site/protected/runtime/.gitignore new file mode 100755 index 00000000..d6b7ef32 --- /dev/null +++ b/demos/site/protected/runtime/.gitignore @@ -0,0 +1,2 @@ +* +!.gitignore diff --git a/demos/site/themes/Prado/favicon.ico b/demos/site/themes/Prado/favicon.ico new file mode 100644 index 00000000..28d63172 Binary files /dev/null and b/demos/site/themes/Prado/favicon.ico differ diff --git a/demos/site/themes/Prado/imgs/bg.gif b/demos/site/themes/Prado/imgs/bg.gif new file mode 100644 index 00000000..d4ce965e Binary files /dev/null and b/demos/site/themes/Prado/imgs/bg.gif differ diff --git a/demos/site/themes/Prado/imgs/bigmantis.jpg b/demos/site/themes/Prado/imgs/bigmantis.jpg new file mode 100644 index 00000000..7520aab4 Binary files /dev/null and b/demos/site/themes/Prado/imgs/bigmantis.jpg differ diff --git a/demos/site/themes/Prado/imgs/bigmantis.jpg.1 b/demos/site/themes/Prado/imgs/bigmantis.jpg.1 new file mode 100644 index 00000000..7520aab4 Binary files /dev/null and b/demos/site/themes/Prado/imgs/bigmantis.jpg.1 differ diff --git a/demos/site/themes/Prado/imgs/bottomgradient.gif b/demos/site/themes/Prado/imgs/bottomgradient.gif new file mode 100644 index 00000000..4309dc30 Binary files /dev/null and b/demos/site/themes/Prado/imgs/bottomgradient.gif differ diff --git a/demos/site/themes/Prado/imgs/bullet_one.gif b/demos/site/themes/Prado/imgs/bullet_one.gif new file mode 100644 index 00000000..8d42c689 Binary files /dev/null and b/demos/site/themes/Prado/imgs/bullet_one.gif differ diff --git a/demos/site/themes/Prado/imgs/bullet_three.gif b/demos/site/themes/Prado/imgs/bullet_three.gif new file mode 100644 index 00000000..099522c2 Binary files /dev/null and b/demos/site/themes/Prado/imgs/bullet_three.gif differ diff --git a/demos/site/themes/Prado/imgs/bullet_two.gif b/demos/site/themes/Prado/imgs/bullet_two.gif new file mode 100644 index 00000000..cd8001a8 Binary files /dev/null and b/demos/site/themes/Prado/imgs/bullet_two.gif differ diff --git a/demos/site/themes/Prado/imgs/mainmenu_active.gif b/demos/site/themes/Prado/imgs/mainmenu_active.gif new file mode 100644 index 00000000..47974274 Binary files /dev/null and b/demos/site/themes/Prado/imgs/mainmenu_active.gif differ diff --git a/demos/site/themes/Prado/imgs/mainmenu_hover.gif b/demos/site/themes/Prado/imgs/mainmenu_hover.gif new file mode 100644 index 00000000..26355b3c Binary files /dev/null and b/demos/site/themes/Prado/imgs/mainmenu_hover.gif differ diff --git a/demos/site/themes/Prado/imgs/pradodownload.gif b/demos/site/themes/Prado/imgs/pradodownload.gif new file mode 100644 index 00000000..4b063dbb Binary files /dev/null and b/demos/site/themes/Prado/imgs/pradodownload.gif differ diff --git a/demos/site/themes/Prado/imgs/pradoheader.gif b/demos/site/themes/Prado/imgs/pradoheader.gif new file mode 100755 index 00000000..40ca5d29 Binary files /dev/null and b/demos/site/themes/Prado/imgs/pradoheader.gif differ diff --git a/demos/site/themes/Prado/imgs/statementsbg.gif b/demos/site/themes/Prado/imgs/statementsbg.gif new file mode 100644 index 00000000..85836a2e Binary files /dev/null and b/demos/site/themes/Prado/imgs/statementsbg.gif differ diff --git a/demos/site/themes/Prado/style.css b/demos/site/themes/Prado/style.css new file mode 100755 index 00000000..798451c0 --- /dev/null +++ b/demos/site/themes/Prado/style.css @@ -0,0 +1,765 @@ + +/** + * PradoSoft profile by Carl G. Mathisen and Stefan A. Petrov + * http://decart.no + */ + +body +{ + background-color: #ECEDE5; + background-image: url('imgs/bg.gif'); + background-repeat: repeat-x; + background-position: top left; + margin: 0px; + padding: 0px; + text-align: center; +} + +body, div, span, p, input +{ + font-family: Verdana, sans-serif, Arial; + font-size: 10pt; + color: #333333; +} + +h1, h2, h3, h4 +{ + font-family: Verdana, Helvetica, Arial, Lucida Grande, Trebuchet MS; + padding: 0px; + margin: 0px; + margin-bottom: 10px; + color: #821B18; + font-weight: normal; +} + +h2 +{ + font-size: 18px; +} + +h3 +{ + font-size: 16px; +} + +div +{ + text-align: left; +} + +.instructions +{ + background-color: #EEEEEE; + padding: 5px; +} + +img +{ + border: none; +} + +a +{ + color: #CD2C27; + text-decoration: none; +} + +a:hover +{ + color: #821B18; + text-decoration: underline; +} + +#page +{ + margin: 0 auto; + padding: 0; + width: 841px; + position: relative; +} + +#header +{ + position: relative; + height: 98px; +} + +#logo +{ + height: 99px; +} + +#mainmenu +{ + position: absolute; + top: 69px; +} + +#mainmenu ul +{ + margin-left: 0; + padding-left: 0; + display: inline; +} + +#mainmenu ul li +{ + margin-left: 0px; + list-style: none; + display: inline; +} + +#mainmenu ul li a +{ + display: block; + float: left; + font-size: 14px; + font-weight: bold; + padding-left: 7px; + padding-right: 7px; + padding-top: 5px; + color: #FFFFCC; + text-decoration: none; + height: 29px; +} + +#mainmenu ul li a:hover +{ + background-image: url('imgs/mainmenu_hover.gif'); + background-repeat: repeat-x; + background-position: top left; + color: #fff; +} + +#mainmenu ul li a.active +{ + background-image: url('imgs/mainmenu_active.gif'); + background-repeat: repeat-x; + background-position: top left; + color: #91A412; +} + +/* main page */ + +div.intro +{ + height: 190px; + background-image: url('imgs/bigmantis.jpg'); + background-repeat: no-repeat; + background-position: top right; + background-color: #fff; +} + +div.statements +{ + height: 165px; + background-image: url('imgs/statementsbg.gif'); + background-repeat: repeat-x; + position: relative; + border-bottom : 1px solid #EEE; +} + +div.statements div +{ + position: absolute; + width: 250px; + top: 20px; +} + +div.statements div p +{ + font-size: 13px; + color: #818181; +} + +div.statements div.whatis +{ + left: 20px; +} + +div.statements div.whatreq +{ + left: 310px; +} + +div.statements div.cani +{ + left: 590px; + width: 250px; +} + +/* navbar */ +#navbar +{ + border-bottom: 2px solid #E9EEEF; + height: 30px; + margin-bottom: 20px; +} + +#navbar ul +{ + margin-left: 0; + padding-left: 0; + display: inline; +} + +#navbar ul li +{ + margin-left: 0px; + list-style: none; + display: inline; +} + +#navbar ul li a +{ + display: block; + float: left; + font-size: 14px; + font-weight: bold; + padding-right: 14px; + padding-top: 5px; + color: #CD2B26; + height: 29px; +} + +#navbar ul li a.active, #navbar ul li a.hover +{ + color: #821B18; +} + +#navbar ul li a.hover +{ + text-decoration: underline; +} + +/* infobar */ +div#infobar +{ + float: right; + width: 200px; + padding-left: 20px; + border-left: 2px solid #E9EEEF; +} + +div#infobar div +{ + margin-bottom: 20px; +} + +div#infobar div#featured img +{ + margin-top: 10px; +} + +/* articles */ + +div#articles +{ + width: 560px; + float: left; +} + +/* article */ + +div.article +{ + margin-bottom: 40px; +} + +div.article .date +{ + color: #9F9291; +} + +div.article .more +{ + margin-right: 10px; + display: block; + text-align: right; +} + +.logo +{ + position: absolute; + margin-left: 15px; + margin-top: 0px; + z-index: 1; +} + +#main +{ + padding: 20px; + padding-top: 20px; + background-color: #fff; +} + +div.mantis +{ + height: 190px; + background-color: #fff; + background-image: url('imgs/bigmantis.jpg'); + background-repeat: no-repeat; + background-position: top right; + border-bottom: 1px solid #DCDCDC; +} + +div.releases +{ + float: left; + width: 240px; + height: 190px; + background-image: url('imgs/pradodownload.gif'); + background-repeat: no-repeat; +} + +div.releases div.official +{ + width: 190px; + position: relative; + left: 52px; + top: 128px; + font-size: 8pt; + color: #6D6D6D; +} + +div.releases div.official a +{ + display: block; +} + +div.whyprado +{ + display: block; + float: left; +} + +div.whyprado ul.list +{ + margin-top: 40px; + margin-left: 40px; +} + +div.whyprado ul.list li +{ + display: block; + margin: 5px; + padding: 0px; + font-size: 18px; + background-repeat: no-repeat; + background-position: bottom left; + padding-left: 30px; + list-style: none; +} + +div.whyprado ul.list li.one +{ + background-image: url('imgs/bullet_one.gif'); +} + +div.whyprado ul.list li.two +{ + background-image: url('imgs/bullet_two.gif'); +} + +div.whyprado ul.list li.three +{ + background-image: url('imgs/bullet_three.gif'); +} + +div.whyprado ul.list li a +{ + color: #9F9291; + text-decoration: none; +} + +#footer +{ + border-top: 1px solid #e9eeef; + background-color: #fff; + clear: both; + color: #A7A7A7; + font-size: 8pt; + text-align: center; + padding-top: 10px; + padding-bottom: 30px; + background-image: url('imgs/bottomgradient.gif'); + background-repeat: repeat-x; + background-position: bottom; +} + +#ads +{ + font-size: 8pt; + text-align: center; +} +#features +{ + margin-left: 610px; + padding: 10px; + padding-left: 10px; + padding-right: 10px; + background-color: #BEDD75; + color: #344A1E; + font-size: 9pt; +} + +#features ul +{ + margin: 10px; + padding: 0px; +} + +#features ul li +{ + font-size: 8pt; + padding: 0px; + margin: 0px; + margin-top: 8px; +} + +#features h3 +{ + margin: 0px; + padding: 0px; + font-size: 10pt; + color: #292E1D; + text-align: center; + border-bottom: 1px solid silver; +} + +#news +{ + float: left; + width: 590px; +} + +.newstitle +{ + font-size: 12pt; + font-weight: bold; + color: #555; + margin-top: 10px; + margin-bottom: 0px; + border-bottom: 1px solid silver; +} + +.newscontentmore +{ + margin-right: 10px; + display: block; + color: #50811A; + text-align: right; +} + +.newscontentmore:hover +{ + color: red; +} + +.newstime +{ + margin: 0px; + font-size:0.8em; + color:#aaa; + padding-left:10px; + text-align: right; +} + +.newscontent +{ + margin-top: 5px; +} + +#leftpanel +{ + float: left; + width: 550px; +} + +#topics +{ + border: 1px solid #804040; + margin-left: 610px; + padding-bottom: 10px; +} + +#topicsheader +{ + text-align:center; + font-weight:bold; + background-color:#804040; + color:#FFFFBC; + padding: 3px; + margin-bottom:0px; +} + +.topicitem +{ + padding: 5px; +} + +.topicitem a:hover +{ + text-decoration: underline; +} + +.topicitem p +{ + margin: 0px; + font-size:0.8em; + color:#aaa; + padding-left:10px; + white-space:nowrap; +} + +.reference +{ +} + +.reference img +{ + margin: 10px; +} + +.reference h3 +{ +} + + +.download +{ + width: 100%; + background-color: #aaa; +} + +.download td +{ + background-color: #FFFFFF; + padding: 2px 5px; + font-size: 9pt; +} + +.download td a +{ + font-weight: bold; +} + +.download td.type +{ + font-family: "courier new", courier; + text-align: right; + vertical-align: top; +} + +.download div.declaration +{ + font-family: "courier new", courier; +} + + +.download th +{ + background-color: #F0F0F0; + font-weight: bold; + font-size: 9pt; + padding: 5px; + text-align: left; +} + +.download th.small +{ + font-size: 1.0em; +} + +.download tr.reference td { + background-color: #FFEDED; +} + + +.doc-title +{ + font-size: 14pt; + font-weight: bold; + margin-top: 10px; + margin-bottom: 10px; +} + +.doc-subtitle +{ + font-size: 11pt; + font-weight: bold; + background-color: #EEE; + padding: 5px; + margin-top: 20px; +} + +.doc-namespace +{ + font-size: 8pt; +} + + +.doc-menu +{ +} + +.doc-classes +{ +} + +.doc-ancestors +{ + font-size: 8pt; +} + +.doc-properties +{ + font-size: 9pt; +} + +.doc-properties table +{ + border-collapse: collapse; + background-color: silver; + width: 100%; +} + +.doc-properties td, .doc-properties th +{ + padding: 3px; + vertical-align: top; + background-color: white; + border: 1px solid silver; +} + +.doc-events +{ + font-size: 9pt; +} + +.doc-events table +{ + border-collapse: collapse; + background-color: silver; + width: 100%; +} + +.doc-events td, .doc-events th +{ + padding: 3px; + vertical-align: top; + background-color: white; + border: 1px solid silver; +} + +.doc-methods +{ + font-size: 9pt; +} + +.doc-methods table +{ + border-collapse: collapse; + background-color: silver; + width: 100%; +} + +.doc-methods td, .doc-methods th +{ + padding: 3px; + vertical-align: top; + background-color: white; + border: 1px solid silver; +} + +.doc-derived +{ +} + +.doc-inherited +{ +} + +.doc-native td +{ + background-color: lightyellow; +} + +.forum-topic +{ + padding: 10px; + border:1px solid silver; + margin-bottom: 10px; +} + + +.demo-list li +{ + margin-bottom: 1em; +} + +.autocomplete +{ + border:1px solid #ccc; + background-color:white; +} +.autocomplete ul, .autocomplete li +{ + margin: 0; + padding: 0; + list-style: none; + font-size: 11px; + font-family: Tahoma, Arial, Helvetica, sans-serif; + color: #333; +} + +ul.different +{ + background-color: pink; +} + +.autocomplete li +{ + padding: 5px; + background-color: #ffe; +} +.autocomplete .selected +{ + background-color: #eec; +} + +#ads ul +{ + list-style-type: none; + margin: 5px; + margin-left: 0px; + padding: 0; + font-size: 10px; +} + +#ads li +{ + margin-bottom: 7px; +} + +#ads a +{ + color: black; + border-bottom: 1px dashed silver; +} + +#changelog +{ + overflow:scroll; + height: 250px; + border:1px solid #ccc; + white-space: pre-wrap; /* CSS 3 */ + white-space: -moz-pre-wrap; /* Mozilla, since 1999 */ + white-space: -pre-wrap; /* Opera 4-6 */ + white-space: -o-pre-wrap; /* Opera 7 */ + word-wrap: break-word; /* Internet Explorer 5.5+ */ + padding: 10px; + -webkit-box-shadow: inset 0px -10px 10px -5px rgba(0,0,0,0.75); + -moz-box-shadow: inset 0px -10px 10px -5px rgba(0,0,0,0.75); + box-shadow: inset 0px -10px 10px -5px rgba(0,0,0,0.75); +} diff --git a/framework/pradolite.php b/framework/pradolite.php index af6026ae..bb055e30 100644 --- a/framework/pradolite.php +++ b/framework/pradolite.php @@ -1,7 +1,7 @@ Date: Mon, 9 Nov 2015 01:15:12 +0100 Subject: Created theme for apigen4, wsat doc fixes --- build.xml | 9 +- buildscripts/apigen/pradosoft/404.latte | 16 +- buildscripts/apigen/pradosoft/@elementlist.latte | 26 +- buildscripts/apigen/pradosoft/@layout.latte | 161 ++- .../apigen/pradosoft/annotation-group.latte | 117 ++ buildscripts/apigen/pradosoft/class.latte | 149 +-- buildscripts/apigen/pradosoft/combined.js.latte | 13 +- buildscripts/apigen/pradosoft/config.neon | 57 +- buildscripts/apigen/pradosoft/constant.latte | 32 +- buildscripts/apigen/pradosoft/deprecated.latte | 120 -- buildscripts/apigen/pradosoft/elementlist.js.latte | 10 - buildscripts/apigen/pradosoft/function.latte | 45 +- .../apigen/pradosoft/js/jquery.autocomplete.js | 178 +-- buildscripts/apigen/pradosoft/js/jquery.cookie.js | 202 ++-- buildscripts/apigen/pradosoft/js/jquery.min.js | 9 +- buildscripts/apigen/pradosoft/js/main.js | 92 +- buildscripts/apigen/pradosoft/namespace.latte | 16 +- buildscripts/apigen/pradosoft/opensearch.xml.latte | 13 +- buildscripts/apigen/pradosoft/overview.latte | 68 +- buildscripts/apigen/pradosoft/package.latte | 16 +- .../apigen/pradosoft/resources/collapsed.png | Bin 271 -> 2881 bytes .../apigen/pradosoft/resources/combined.js | 1219 -------------------- buildscripts/apigen/pradosoft/resources/footer.png | Bin 8232 -> 7948 bytes buildscripts/apigen/pradosoft/resources/style.css | 86 +- buildscripts/apigen/pradosoft/robots.txt.latte | 11 +- buildscripts/apigen/pradosoft/sitemap.xml.latte | 25 +- buildscripts/apigen/pradosoft/source.latte | 20 +- buildscripts/apigen/pradosoft/todo.latte | 112 -- buildscripts/apigen/pradosoft/tree.latte | 41 +- composer.json | 2 +- framework/Wsat/TWsatARGenerator.php | 2 +- framework/Wsat/TWsatBaseGenerator.php | 2 +- framework/Wsat/TWsatScaffoldingGenerator.php | 2 +- framework/Wsat/TWsatService.php | 2 +- 34 files changed, 712 insertions(+), 2161 deletions(-) create mode 100644 buildscripts/apigen/pradosoft/annotation-group.latte delete mode 100644 buildscripts/apigen/pradosoft/deprecated.latte delete mode 100644 buildscripts/apigen/pradosoft/resources/combined.js delete mode 100644 buildscripts/apigen/pradosoft/todo.latte diff --git a/build.xml b/build.xml index 90ca164c..cd8e665f 100644 --- a/build.xml +++ b/build.xml @@ -191,14 +191,15 @@ executable="bin/apigen" source="${build.src.dir}/framework" destination="${build.doc.dir}/manual" - exclude="*pradolite.php,*prado-cli.php,*3rdParty/*,*Javascripts/source/*,*packages.php,*JSMin.php,*I18N/core/*,*WebControls/assets/*" + exclude="*pradolite.php,*prado-cli.php,*3rdParty/*,*Javascripts/source/*,*packages.php,*JSMin.php,*I18N/core/*,*WebControls/assets/*,*Wsat/pages,*Wsat/themes" title="PRADO v${prado.version} API Manual" deprecated="true" todo="true" sourcecode="false" php="false" + templateconfig="buildscripts/apigen/pradosoft/config.neon" /> - + Indexing API manuals... @@ -225,11 +226,11 @@ Moving doc files to build... - + - + Generating compressed distribution files... diff --git a/buildscripts/apigen/pradosoft/404.latte b/buildscripts/apigen/pradosoft/404.latte index 9d91dafe..58e538f1 100644 --- a/buildscripts/apigen/pradosoft/404.latte +++ b/buildscripts/apigen/pradosoft/404.latte @@ -1,21 +1,11 @@ -{* -ApiGen 2.8.0 - API documentation generator for PHP 5.3+ - -Copyright (c) 2010-2011 David Grudl (http://davidgrudl.com) -Copyright (c) 2011-2012 Jaroslav Hanslík (https://github.com/kukulich) -Copyright (c) 2011-2012 Ondřej Nešpor (https://github.com/Andrewsville) - -For the full copyright and license information, please view -the file LICENSE.md that was distributed with this source code. -*} {layout '@layout.latte'} {var $robots = false} -{block #title}Page not found{/block} +{block title}Page not found{/block} -{block #content} +{block content}
        -

        {include #title}

        +

        {include title}

        The requested page could not be found.

        You have probably clicked on a link that is outdated and points to a page that does not exist any more or you have made an typing error in the address.

        To continue please try to find requested page in the menu,{if $config->tree} take a look at the tree view of the whole project{/if} or use search field on the top.

        diff --git a/buildscripts/apigen/pradosoft/@elementlist.latte b/buildscripts/apigen/pradosoft/@elementlist.latte index 4ffdd5b6..99881989 100644 --- a/buildscripts/apigen/pradosoft/@elementlist.latte +++ b/buildscripts/apigen/pradosoft/@elementlist.latte @@ -1,46 +1,36 @@ -{* -ApiGen 2.8.0 - API documentation generator for PHP 5.3+ - -Copyright (c) 2010-2011 David Grudl (http://davidgrudl.com) -Copyright (c) 2011-2012 Jaroslav Hanslík (https://github.com/kukulich) -Copyright (c) 2011-2012 Ondřej Nešpor (https://github.com/Andrewsville) - -For the full copyright and license information, please view -the file LICENSE.md that was distributed with this source code. -*} -{define #elements} +{define elements} {if $namespace}{$element->shortName}{else}{$element->name}{/if} - {!$element|shortDescription} + {$element|shortDescription|noescape} {/define} -{include #elements, elements => $classes} +{include elements, elements => $classes}
        Classes summary
        -{include #elements, elements => $interfaces} +{include elements, elements => $interfaces}
        Interfaces summary
        -{include #elements, elements => $traits} +{include elements, elements => $traits}
        Traits summary
        -{include #elements, elements => $exceptions} +{include elements, elements => $exceptions}
        Exceptions summary
        -{include #elements, elements => $constants} +{include elements, elements => $constants}
        Constants summary
        -{include #elements, elements => $functions} +{include elements, elements => $functions}
        Functions summary
        diff --git a/buildscripts/apigen/pradosoft/@layout.latte b/buildscripts/apigen/pradosoft/@layout.latte index 9001fc75..01479827 100644 --- a/buildscripts/apigen/pradosoft/@layout.latte +++ b/buildscripts/apigen/pradosoft/@layout.latte @@ -1,13 +1,3 @@ -{* -ApiGen 2.8.0 - API documentation generator for PHP 5.3+ - -Copyright (c) 2010-2011 David Grudl (http://davidgrudl.com) -Copyright (c) 2011-2012 Jaroslav Hanslík (https://github.com/kukulich) -Copyright (c) 2011-2012 Ondřej Nešpor (https://github.com/Andrewsville) - -For the full copyright and license information, please view -the file LICENSE.md that was distributed with this source code. -*} {default $robots = true} {default $active = ''} @@ -15,10 +5,11 @@ the file LICENSE.md that was distributed with this source code. + - + @@ -26,18 +17,14 @@ the file LICENSE.md that was distributed with this source code. + - {include #title}{if 'overview' !== $active && $config->title} | {$config->title}{/if} + {include title}{if 'overview' !== $active && $config->title} | {$config->title}{/if} - {var combinedJs = 'resources/combined.js'} - - {var elementListJs = 'elementlist.js'} - - {var styleCss = 'resources/style.css'} - + - - + + diff --git a/buildscripts/apigen/pradosoft/annotation-group.latte b/buildscripts/apigen/pradosoft/annotation-group.latte new file mode 100644 index 00000000..39c49769 --- /dev/null +++ b/buildscripts/apigen/pradosoft/annotation-group.latte @@ -0,0 +1,117 @@ +{layout '@layout.latte'} +{var $active = 'annotation-group-' . $annotation} + +{block title}{$annotation|firstUpper}{/block} + +{block content} +
        +

        {include title}

        + + {if $hasElements} + + + {include classes, items => $annotationClasses} +
        Classes summary
        + + + + {include classes, items => $annotationInterfaces} +
        Interfaces summary
        + + + + {include classes, items => $annotationTraits} +
        Traits summary
        + + + + {include classes, items => $annotationExceptions} +
        Exceptions summary
        + + + + + + + + +
        Methods summary
        {$method->declaringClassName}{$method->name}() + {if $method->hasAnnotation($annotation)} + {foreach $method->annotations[$annotation] as $description} + {if $description} + {$description|annotation:$annotation:$method|noescape}
        + {/if} + {/foreach} + {/if} +
        + + + + + {if $constant->declaringClassName} + + + + {else} + + + {/if} + + +
        Constants summary
        {$constant->declaringClassName}{$constant->name}{$constant->namespaceName}{$constant->shortName} + {foreach $constant->annotations[$annotation] as $description} + {if $description} + {$description|annotation:$annotation:$constant|noescape}
        + {/if} + {/foreach} +
        + + + + + + + + +
        Properties summary
        {$property->declaringClassName}${$property->name} + {foreach $property->annotations[$annotation] as $description} + {if $description} + {$description|annotation:$annotation:$property|noescape}
        + {/if} + {/foreach} +
        + + + + + + + + +
        Functions summary
        {$function->namespaceName}{$function->shortName} + {foreach $function->annotations[$annotation] as $description} + {if $description} + {$description|annotation:$annotation:$function|noescape}
        + {/if} + {/foreach} +
        + + {else} +

        No elements with @{$annotation} annotation found.

        + {/if} +
        +{/block} + + +{define classes} + + {$class->name} + + {foreach $class->annotations[$annotation] as $description} + {if $description} + {$description|annotation:$annotation:$class|noescape}
        + {/if} + {/foreach} + + +{/define} diff --git a/buildscripts/apigen/pradosoft/class.latte b/buildscripts/apigen/pradosoft/class.latte index 36b3804c..4555d79d 100644 --- a/buildscripts/apigen/pradosoft/class.latte +++ b/buildscripts/apigen/pradosoft/class.latte @@ -1,26 +1,16 @@ -{* -ApiGen 2.8.0 - API documentation generator for PHP 5.3+ - -Copyright (c) 2010-2011 David Grudl (http://davidgrudl.com) -Copyright (c) 2011-2012 Jaroslav Hanslík (https://github.com/kukulich) -Copyright (c) 2011-2012 Ondřej Nešpor (https://github.com/Andrewsville) - -For the full copyright and license information, please view -the file LICENSE.md that was distributed with this source code. -*} {layout '@layout.latte'} {var $active = 'class'} -{block #title}{if $class->deprecated}Deprecated {/if}{if $class->interface}Interface{elseif $class->trait}Trait{else}Class{/if} {$class->name}{/block} +{block title}{if $class->deprecated}Deprecated {/if}{if $class->interface}Interface{elseif $class->trait}Trait{else}Class{/if} {$class->name}{/block} -{block #content} +{block content}

        {if $class->interface}Interface{elseif $class->trait}Trait{else}Class{/if} {$class->shortName}

        {if $class->valid}
        - {!$class|longDescription} + {$class|longDescription|noescape}
        @@ -35,12 +25,17 @@ the file LICENSE.md that was distributed with this source code. {/foreach}{/if} {var $itemOwnTraits = $item->ownTraits} {if $itemOwnTraits} uses {foreach $itemOwnTraits as $trait} - {$trait->name}{sep}, {/sep} + {if is_string($trait)} + {$trait} (not available) + + {else} + {$trait->name}{sep}, {/sep} + {/} {/foreach}{/if}
        - {define #children} + {define children} {foreach $children as $child} {$child->name}{sep}, {/sep} {/foreach} @@ -48,59 +43,65 @@ the file LICENSE.md that was distributed with this source code.

        Direct known subclasses

        - {include #children, children => $directSubClasses} + {include children, children => $directSubClasses}

        Indirect known subclasses

        - {include #children, children => $indirectSubClasses} + {include children, children => $indirectSubClasses}

        Direct known implementers

        - {include #children, children => $directImplementers} + {include children, children => $directImplementers}

        Indirect known implementers

        - {include #children, children => $indirectImplementers} + {include children, children => $indirectImplementers}

        Direct Known Users

        - {include #children, children => $directUsers} + {include children, children => $directUsers}

        Indirect Known Users

        - {include #children, children => $indirectUsers} + {include children, children => $indirectUsers}
        {if !$class->interface && !$class->trait && ($class->abstract || $class->final)}{if $class->abstract}Abstract{else}Final{/if}
        {/if} {if $class->internal}PHP Extension: {$class->extension->name|firstUpper}
        {/if} - {if $class->inNamespace()}Namespace: {!$class->namespaceName|namespaceLinks}
        {/if} - {if $class->inPackage()}Package: {!$class->packageName|packageLinks}
        {/if} + {if $class->inNamespace()}Namespace: {$class->namespaceName|namespaceLinks|noescape}
        {/if} + {if $class->inPackage()}Package: {$class->packageName|packageLinks|noescape}
        {/if} {foreach $template->annotationSort($template->annotationFilter($class->annotations)) as $annotation => $values} {foreach $values as $value} {$annotation|annotationBeautify}{if $value}:{/if} - {!$value|annotation:$annotation:$class}
        + {$value|annotation:$annotation:$class|noescape}
        {/foreach} {/foreach} - {if $class->internal}Documented at php.net{else}Located at {$class->fileName|relativePath}{/if}
        + {if $class->internal} + Documented at php.net + {else} + Located at {$class->fileName|relativePath} + {/if} +
        {var $ownMethods = $class->ownMethods} {var $ownMagicMethods = $class->ownMagicMethods} - {define #method} - + {define method} + {var $annotations = $method->annotations} {if !$class->interface && $method->abstract}abstract{elseif $method->final}final{/if} {if $method->protected}protected{elseif $method->private}private{else}public{/if} {if $method->static}static{/if} - {ifset $annotations['return']}{!$annotations['return'][0]|typeLinks:$method}{/ifset} + + {ifset $annotations['return']}{$annotations['return'][0]|typeLinks:$method|noescape}{/ifset} {if $method->returnsReference()}&{/if} @@ -114,19 +115,19 @@ the file LICENSE.md that was distributed with this source code. {$method->name}( {/if} {foreach $method->parameters as $parameter} - {!$parameter->typeHint|typeLinks:$method} - {if $parameter->passedByReference}& {/if}${$parameter->name}{if $parameter->defaultValueAvailable} = {!$parameter->defaultValueDefinition|highlightPHP:$class}{elseif $parameter->unlimited},…{/if}{sep}, {/sep} + {$parameter->typeHint|typeLinks:$method|noescape} + {if $parameter->passedByReference}& {/if}${$parameter->name}{if $parameter->defaultValueAvailable} = {$parameter->defaultValueDefinition|highlightPHP:$class|noescape}{elseif $parameter->unlimited},…{/if}{sep}, {/sep} {/foreach} ){/block} {if $config->template['options']['elementDetailsCollapsed']}
        - {!$method|shortDescription:true} + {$method|shortDescription:true|noescape}
        {/if}
        - {!$method|longDescription} + {$method|longDescription|noescape} {if !$class->deprecated && $method->deprecated}

        Deprecated

        @@ -134,7 +135,7 @@ the file LICENSE.md that was distributed with this source code.
        {foreach $annotations['deprecated'] as $description} {if $description} - {!$description|annotation:'deprecated':$method}
        + {$description|annotation:'deprecated':$method|noescape}
        {/if} {/foreach}
        @@ -146,7 +147,7 @@ the file LICENSE.md that was distributed with this source code.
        {foreach $method->parameters as $parameter}
        ${$parameter->name}{if $parameter->unlimited},…{/if}
        -
        {ifset $annotations['param'][$parameter->position]}{!$annotations['param'][$parameter->position]|annotation:'param':$method}{/ifset}
        +
        {$parameter->description|description:$method|noescape}
        {/foreach}
        {/if} @@ -155,7 +156,7 @@ the file LICENSE.md that was distributed with this source code.

        Returns

        {foreach $annotations['return'] as $description} - {!$description|annotation:'return':$method}
        + {$description|annotation:'return':$method|noescape}{sep}
        {/} {/foreach}
        {/if} @@ -164,7 +165,7 @@ the file LICENSE.md that was distributed with this source code.

        Throws

        {foreach $annotations['throws'] as $description} - {!$description|annotation:'throws':$method}
        + {$description|annotation:'throws':$method|noescape}{sep}
        {/} {/foreach}
        {/ifset} @@ -174,7 +175,7 @@ the file LICENSE.md that was distributed with this source code.
        {foreach $descriptions as $description} {if $description} - {!$description|annotation:$annotation:$method}
        + {$description|annotation:$annotation:$method|noescape}
        {/if} {/foreach}
        @@ -196,10 +197,10 @@ the file LICENSE.md that was distributed with this source code. {/define} - +
        {foreach $ownMethods as $method} - {include #method, method => $method} + {include method, method => $method} {/foreach}
        Methods summary
        @@ -219,16 +220,16 @@ the file LICENSE.md that was distributed with this source code. {foreach $methods as $data} - {$data['method']->originalName}(){if $data['aliases']}(as {foreach $data['aliases'] as $alias}{$alias->name}(){sep}, {/sep}{/foreach}){/if}{sep}, {/sep} + {$data['method']->name}(){if $data['aliases']}(as {foreach $data['aliases'] as $alias}{$alias->name}(){sep}, {/sep}{/foreach}){/if}{sep}, {/sep} {/foreach} - +
        {foreach $ownMagicMethods as $method} - {include #method, method => $method} + {include method, method => $method} {/foreach}
        Magic methods summary
        @@ -257,44 +258,46 @@ the file LICENSE.md that was distributed with this source code. {var $ownConstants = $class->ownConstants} - +
        {var $annotations = $constant->annotations} - - + - - + +
        Constants summary
        {!$constant->typeHint|typeLinks:$constant} + {$constant->typeHint|typeLinks:$constant|noescape} + {if $class->internal} {$constant->name} {else} {$constant->name} {/if} - {!$constant->valueDefinition|highlightValue:$class}
        - # + - {if $config->template['options']['elementDetailsCollapsed']} -
        - {!$constant|shortDescription:true} +
        + {$constant|shortDescription:true|noescape}
        - {/if}
        - {!$constant|longDescription} + {$constant|longDescription|noescape} {foreach $template->annotationSort($template->annotationFilter($annotations, array('var'))) as $annotation => $descriptions}

        {$annotation|annotationBeautify}

        {foreach $descriptions as $description} {if $description} - {!$description|annotation:$annotation:$constant}
        + {$description|annotation:$annotation:$constant|noescape}
        {/if} {/foreach}
        {/foreach}
        -
        +
        + # + {$constant->valueDefinition|highlightValue:$class|noescape} +
        +
        @@ -309,11 +312,11 @@ the file LICENSE.md that was distributed with this source code. - {define #property} + {define property} {if $property->protected}protected{elseif $property->private}private{else}public{/if} {if $property->static}static{/if} {if $property->readOnly}read-only{elseif $property->writeOnly}write-only{/if} - {!$property->typeHint|typeLinks:$property} + {$property->typeHint|typeLinks:$property|noescape} @@ -322,42 +325,42 @@ the file LICENSE.md that was distributed with this source code. {else} ${$property->name} {/if} - - {!$property->defaultValueDefinition|highlightValue:$class} -
        - # - {if $config->template['options']['elementDetailsCollapsed']} -
        - {!$property|shortDescription:true} +
        + {$property|shortDescription:true|noescape}
        - {/if}
        - {!$property|longDescription} + {$property|longDescription|noescape} {foreach $template->annotationSort($template->annotationFilter($property->annotations, array('var'))) as $annotation => $descriptions}

        {$annotation|annotationBeautify}

        {foreach $descriptions as $description} {if $description} - {!$description|annotation:$annotation:$property}
        + {$description|annotation:$annotation:$property|noescape}
        {/if} {/foreach}
        {/foreach}
        -
        + + +
        + # + {$property->defaultValueDefinition|highlightValue:$class|noescape} +
        + {/define} {var $ownProperties = $class->ownProperties} {var $ownMagicProperties = $class->ownMagicProperties} - +
        {foreach $ownProperties as $property} - {include #property, property => $property} + {include property, property => $property} {/foreach}
        Properties summary
        @@ -383,10 +386,10 @@ the file LICENSE.md that was distributed with this source code. - +
        {foreach $ownMagicProperties as $property} - {include #property, property => $property} + {include property, property => $property} {/foreach}
        Magic properties summary
        diff --git a/buildscripts/apigen/pradosoft/combined.js.latte b/buildscripts/apigen/pradosoft/combined.js.latte index 73b12686..93ba3e4d 100644 --- a/buildscripts/apigen/pradosoft/combined.js.latte +++ b/buildscripts/apigen/pradosoft/combined.js.latte @@ -1,21 +1,10 @@ -{* -ApiGen 2.8.0 - API documentation generator for PHP 5.3+ - -Copyright (c) 2010-2011 David Grudl (http://davidgrudl.com) -Copyright (c) 2011-2012 Jaroslav Hanslík (https://github.com/kukulich) -Copyright (c) 2011-2012 Ondřej Nešpor (https://github.com/Andrewsville) - -For the full copyright and license information, please view -the file LICENSE.md that was distributed with this source code. -*} {contentType javascript} var ApiGen = ApiGen || {}; ApiGen.config = {$config->template}; {var $scripts = ['jquery.min.js', 'jquery.cookie.js', 'jquery.sprintf.js', 'jquery.autocomplete.js', 'jquery.sortElements.js', 'main.js']} -{var $dir = dirname($template->getFile())} {foreach $scripts as $script} -{!file_get_contents("$dir/js/$script")} + {file_get_contents("$basePath/js/$script")|noescape} {/foreach} diff --git a/buildscripts/apigen/pradosoft/config.neon b/buildscripts/apigen/pradosoft/config.neon index 6ddc2f69..e165b8bd 100644 --- a/buildscripts/apigen/pradosoft/config.neon +++ b/buildscripts/apigen/pradosoft/config.neon @@ -1,56 +1 @@ -require: - min: 2.8.0 - -resources: - resources: resources - -templates: - common: - overview.latte: index.html - combined.js.latte: resources/combined.js - elementlist.js.latte: elementlist.js - 404.latte: 404.html - - main: - package: - filename: package-%s.html - template: package.latte - namespace: - filename: namespace-%s.html - template: namespace.latte - class: - filename: class-%s.html - template: class.latte - constant: - filename: constant-%s.html - template: constant.latte - function: - filename: function-%s.html - template: function.latte - source: - filename: source-%s.html - template: source.latte - tree: - filename: tree.html - template: tree.latte - deprecated: - filename: deprecated.html - template: deprecated.latte - todo: - filename: todo.html - template: todo.latte - - optional: - sitemap: - filename: sitemap.xml - template: sitemap.xml.latte - opensearch: - filename: opensearch.xml - template: opensearch.xml.latte - robots: - filename: robots.txt - template: robots.txt.latte - -options: - elementDetailsCollapsed: Yes - elementsOrder: natural # alphabetical +name: "ApiGen theme" diff --git a/buildscripts/apigen/pradosoft/constant.latte b/buildscripts/apigen/pradosoft/constant.latte index 441c245d..8552446d 100644 --- a/buildscripts/apigen/pradosoft/constant.latte +++ b/buildscripts/apigen/pradosoft/constant.latte @@ -1,38 +1,31 @@ -{* -ApiGen 2.8.0 - API documentation generator for PHP 5.3+ - -Copyright (c) 2010-2011 David Grudl (http://davidgrudl.com) -Copyright (c) 2011-2012 Jaroslav Hanslík (https://github.com/kukulich) -Copyright (c) 2011-2012 Ondřej Nešpor (https://github.com/Andrewsville) - -For the full copyright and license information, please view -the file LICENSE.md that was distributed with this source code. -*} {layout '@layout.latte'} {var $active = 'constant'} -{block #title}{if $constant->deprecated}Deprecated {/if}Constant {$constant->name}{/block} +{block title}{if $constant->deprecated}Deprecated {/if}Constant {$constant->name}{/block} -{block #content} +{block content}

        Constant {$constant->shortName}

        {if $constant->valid}
        - {!$constant|longDescription} + {$constant|longDescription|noescape}
        - {if $constant->inNamespace()}Namespace: {!$constant->namespaceName|namespaceLinks}
        {/if} - {if $constant->inPackage()}Package: {!$constant->packageName|packageLinks}
        {/if} + {if $constant->inNamespace()}Namespace: {$constant->namespaceName|namespaceLinks|noescape}
        {/if} + {if $constant->inPackage()}Package: {$constant->packageName|packageLinks|noescape}
        {/if} {foreach $template->annotationSort($template->annotationFilter($constant->annotations, array('var'))) as $annotation => $values} {foreach $values as $value} {$annotation|annotationBeautify}{if $value}:{/if} - {!$value|annotation:$annotation:$constant}
        + {$value|annotation:$annotation:$constant|noescape}
        {/foreach} {/foreach} - Located at {$constant->fileName|relativePath}
        + Located at + + {$constant->fileName|relativePath} +
        {var $annotations = $constant->annotations} @@ -40,12 +33,11 @@ the file LICENSE.md that was distributed with this source code. - + -
        Value summary
        {!$constant->typeHint|typeLinks:$constant}{$constant->typeHint|typeLinks:$constant|noescape} {block|strip} {var $element = $template->resolveElement($constant->valueDefinition, $constant)} - {if $element}{$constant->valueDefinition}{else}{!$constant->valueDefinition|highlightValue:$constant}{/if} + {if $element}{$constant->valueDefinition}{else}{$constant->valueDefinition|highlightValue:$constant|noescape}{/if} {/block}{ifset $annotations['var']}{!$annotations['var'][0]|description:$constant}{/ifset}
        diff --git a/buildscripts/apigen/pradosoft/deprecated.latte b/buildscripts/apigen/pradosoft/deprecated.latte deleted file mode 100644 index 477e8c55..00000000 --- a/buildscripts/apigen/pradosoft/deprecated.latte +++ /dev/null @@ -1,120 +0,0 @@ -{* -ApiGen 2.8.0 - API documentation generator for PHP 5.3+ - -Copyright (c) 2010-2011 David Grudl (http://davidgrudl.com) -Copyright (c) 2011-2012 Jaroslav Hanslík (https://github.com/kukulich) -Copyright (c) 2011-2012 Ondřej Nešpor (https://github.com/Andrewsville) - -For the full copyright and license information, please view -the file LICENSE.md that was distributed with this source code. -*} -{layout '@layout.latte'} -{var $active = 'deprecated'} - -{block #title}Deprecated{/block} - -{block #content} -
        -

        {include #title}

        - - {define #classes} - - {$class->name} - - {foreach $class->annotations['deprecated'] as $description} - {if $description} - {!$description|annotation:'deprecated':$class}
        - {/if} - {/foreach} - - - {/define} - - - - {include #classes, items => $deprecatedClasses} -
        Classes summary
        - - - - {include #classes, items => $deprecatedInterfaces} -
        Interfaces summary
        - - - - {include #classes, items => $deprecatedTraits} -
        Traits summary
        - - - - {include #classes, items => $deprecatedExceptions} -
        Exceptions summary
        - - - - - - - - -
        Methods summary
        {$method->declaringClassName}{$method->name}() - {if $method->hasAnnotation('deprecated')} - {foreach $method->annotations['deprecated'] as $description} - {if $description} - {!$description|annotation:'deprecated':$method}
        - {/if} - {/foreach} - {/if} -
        - - - - - {if $constant->declaringClassName} - - - {else} - - - {/if} - - -
        Constants summary
        {$constant->declaringClassName}{$constant->name}{$constant->namespaceName}{$constant->shortName} - {foreach $constant->annotations['deprecated'] as $description} - {if $description} - {!$description|annotation:'deprecated':$constant}
        - {/if} - {/foreach} -
        - - - - - - - - -
        Properties summary
        {$property->declaringClassName}${$property->name} - {foreach $property->annotations['deprecated'] as $description} - {if $description} - {!$description|annotation:'deprecated':$property}
        - {/if} - {/foreach} -
        - - - - - - - - -
        Functions summary
        {$function->namespaceName}{$function->shortName} - {foreach $function->annotations['deprecated'] as $description} - {if $description} - {!$description|annotation:'deprecated':$function}
        - {/if} - {/foreach} -
        -
        -{/block} diff --git a/buildscripts/apigen/pradosoft/elementlist.js.latte b/buildscripts/apigen/pradosoft/elementlist.js.latte index 6272ba10..8becc227 100644 --- a/buildscripts/apigen/pradosoft/elementlist.js.latte +++ b/buildscripts/apigen/pradosoft/elementlist.js.latte @@ -1,13 +1,3 @@ -{* -ApiGen 2.8.0 - API documentation generator for PHP 5.3+ - -Copyright (c) 2010-2011 David Grudl (http://davidgrudl.com) -Copyright (c) 2011-2012 Jaroslav Hanslík (https://github.com/kukulich) -Copyright (c) 2011-2012 Ondřej Nešpor (https://github.com/Andrewsville) - -For the full copyright and license information, please view -the file LICENSE.md that was distributed with this source code. -*} {contentType javascript} var ApiGen = ApiGen || {}; diff --git a/buildscripts/apigen/pradosoft/function.latte b/buildscripts/apigen/pradosoft/function.latte index 6c4c3238..5797cf17 100644 --- a/buildscripts/apigen/pradosoft/function.latte +++ b/buildscripts/apigen/pradosoft/function.latte @@ -1,52 +1,43 @@ -{* -ApiGen 2.8.0 - API documentation generator for PHP 5.3+ - -Copyright (c) 2010-2011 David Grudl (http://davidgrudl.com) -Copyright (c) 2011-2012 Jaroslav Hanslík (https://github.com/kukulich) -Copyright (c) 2011-2012 Ondřej Nešpor (https://github.com/Andrewsville) - -For the full copyright and license information, please view -the file LICENSE.md that was distributed with this source code. -*} {layout '@layout.latte'} {var $active = 'function'} -{block #title}{if $function->deprecated}Deprecated {/if}Function {$function->name}{/block} +{block title}{if $function->deprecated}Deprecated {/if}Function {$function->name}{/block} -{block #content} +{block content}

        Function {$function->shortName}

        {if $function->valid}
        - {!$function|longDescription} + {$function|longDescription|noescape}
        - {if $function->inNamespace()}Namespace: {!$function->namespaceName|namespaceLinks}
        {/if} - {if $function->inPackage()}Package: {!$function->packageName|packageLinks}
        {/if} + {if $function->inNamespace()}Namespace: {$function->namespaceName|namespaceLinks|noescape}
        {/if} + {if $function->inPackage()}Package: {$function->packageName|packageLinks|noescape}
        {/if} {foreach $template->annotationSort($template->annotationFilter($function->annotations, array('param', 'return', 'throws'))) as $annotation => $values} {foreach $values as $value} {$annotation|annotationBeautify}{if $value}:{/if} - {!$value|annotation:$annotation:$function}
        + {$value|annotation:$annotation:$function|noescape}
        {/foreach} {/foreach} - Located at {$function->fileName|relativePath}
        + Located at + + {$function->fileName|relativePath} +
        {var $annotations = $function->annotations} - +
        - + - +
        Parameters summary
        {!$parameter->typeHint|typeLinks:$function}{$parameter->typeHint|typeLinks:$function|noescape} {block|strip} - {if $parameter->passedByReference}& {/if}${$parameter->name}{if $parameter->defaultValueAvailable} = {!$parameter->defaultValueDefinition|highlightPHP:$function}{elseif $parameter->unlimited},…{/if} + {if $parameter->passedByReference}& {/if}${$parameter->name}{if $parameter->defaultValueAvailable} = {$parameter->defaultValueDefinition|highlightPHP:$function|noescape}{elseif $parameter->unlimited},…{/if} {/block} - {ifset $annotations['param'][$parameter->position]}{!$annotations['param'][$parameter->position]|description:$parameter}{/ifset} - {$parameter->description|description:$function}
        @@ -54,10 +45,10 @@ the file LICENSE.md that was distributed with this source code. Return value summary - {!$annotations['return'][0]|typeLinks:$function} + {$annotations['return'][0]|typeLinks:$function|noescape} - {!$annotations['return'][0]|description:$function} + {$annotations['return'][0]|description:$function|noescape} @@ -66,10 +57,10 @@ the file LICENSE.md that was distributed with this source code. Thrown exceptions summary - {!$throws|typeLinks:$function} + {$throws|typeLinks:$function|noescape} - {!$throws|description:$function} + {$throws|description:$function|noescape} diff --git a/buildscripts/apigen/pradosoft/js/jquery.autocomplete.js b/buildscripts/apigen/pradosoft/js/jquery.autocomplete.js index b8bec34d..ecc032da 100644 --- a/buildscripts/apigen/pradosoft/js/jquery.autocomplete.js +++ b/buildscripts/apigen/pradosoft/js/jquery.autocomplete.js @@ -1,5 +1,5 @@ -/*! - * jQuery Autocomplete plugin 1.1 +/* + * jQuery Autocomplete plugin 1.2.3 * * Copyright (c) 2009 Jörn Zaefferer * @@ -7,7 +7,9 @@ * http://www.opensource.org/licenses/mit-license.php * http://www.gnu.org/licenses/gpl.html * - * Revision: $Id: jquery.autocomplete.js 15 2009-08-22 10:30:27Z joern.zaefferer $ + * With small modifications by Alfonso Gómez-Arzola. + * See changelog for details. + * */ ;(function($) { @@ -19,7 +21,8 @@ $.fn.extend({ url: isUrl ? urlOrData : null, data: isUrl ? null : urlOrData, delay: isUrl ? $.Autocompleter.defaults.delay : 10, - max: options && !options.scroll ? 10 : 150 + max: options && !options.scroll ? 10 : 150, + noRecord: "No Records." }, options); // if highlight is set to false, replace it with a do-nothing function @@ -28,8 +31,6 @@ $.fn.extend({ // if the formatMatch option is not specified, then use formatItem for backwards compatibility options.formatMatch = options.formatMatch || options.formatItem; - options.show = options.show || function(list) {}; - return this.each(function() { new $.Autocompleter(this, options); }); @@ -66,6 +67,11 @@ $.Autocompleter = function(input, options) { BACKSPACE: 8 }; + var globalFailure = null; + if(options.failure != null && typeof options.failure == "function") { + globalFailure = options.failure; + } + // Create $ object for input element var $input = $(input).attr("autocomplete", "off").addClass(options.inputClass); @@ -79,8 +85,18 @@ $.Autocompleter = function(input, options) { }; var select = $.Autocompleter.Select(options, input, selectCurrent, config); - // only opera doesn't trigger keydown multiple times while pressed, others don't work with keypress at all - $input.bind(($.browser.opera ? "keypress" : "keydown") + ".autocomplete", function(event) { + var blockSubmit; + + // prevent form submit in opera when selecting with return key + navigator.userAgent.indexOf("Opera") != -1 && $(input.form).bind("submit.autocomplete", function() { + if (blockSubmit) { + blockSubmit = false; + return false; + } + }); + + // older versions of opera don't trigger keydown multiple times while pressed, others don't work with keypress at all + $input.bind((navigator.userAgent.indexOf("Opera") != -1 && !'KeyboardEvent' in window ? "keypress" : "keydown") + ".autocomplete", function(event) { // a keypress means the input has focus // avoids issue where input had focus before the autocomplete was applied hasFocus = 1; @@ -89,8 +105,8 @@ $.Autocompleter = function(input, options) { switch(event.keyCode) { case KEY.UP: - event.preventDefault(); if ( select.visible() ) { + event.preventDefault(); select.prev(); } else { onChange(0, true); @@ -98,8 +114,8 @@ $.Autocompleter = function(input, options) { break; case KEY.DOWN: - event.preventDefault(); if ( select.visible() ) { + event.preventDefault(); select.next(); } else { onChange(0, true); @@ -107,8 +123,8 @@ $.Autocompleter = function(input, options) { break; case KEY.PAGEUP: - event.preventDefault(); if ( select.visible() ) { + event.preventDefault(); select.pageUp(); } else { onChange(0, true); @@ -116,8 +132,8 @@ $.Autocompleter = function(input, options) { break; case KEY.PAGEDOWN: - event.preventDefault(); if ( select.visible() ) { + event.preventDefault(); select.pageDown(); } else { onChange(0, true); @@ -129,8 +145,10 @@ $.Autocompleter = function(input, options) { case KEY.TAB: case KEY.RETURN: if( selectCurrent() ) { - //event.preventDefault(); - //return false; + // stop default to prevent a form submit, Opera needs special handling + event.preventDefault(); + blockSubmit = true; + return false; } break; @@ -148,17 +166,24 @@ $.Autocompleter = function(input, options) { // results if the field no longer has focus hasFocus++; }).blur(function() { - hasFocus = 0; + hasFocus = 0; if (!config.mouseDownOnSelect) { hideResults(); } }).click(function() { // show select when clicking in a focused field - if ( hasFocus++ > 1 && !select.visible() ) { - onChange(0, true); + // but if clickFire is true, don't require field + // to be focused to begin with; just show select + if( options.clickFire ) { + if ( !select.visible() ) { + onChange(0, true); + } + } else { + if ( hasFocus++ > 1 && !select.visible() ) { + onChange(0, true); + } } }).bind("search", function() { - // TODO why not just specifying both arguments? var fn = (arguments.length > 1) ? arguments[1] : null; function findValueCallback(q, data) { var result; @@ -179,7 +204,7 @@ $.Autocompleter = function(input, options) { }).bind("flushCache", function() { cache.flush(); }).bind("setOptions", function() { - $.extend(options, arguments[1]); + $.extend(true, options, arguments[1]); // if we've updated the data, repopulate if ( "data" in arguments[1] ) cache.populate(); @@ -213,7 +238,6 @@ $.Autocompleter = function(input, options) { progress += seperator; }); words[wordAt] = v; - // TODO this should set the cursor to the right position, but it gets overriden somewhere //$.Autocompleter.Selection(input, progress + seperator, progress + seperator); v = words.join( options.multipleSeparator ); } @@ -336,8 +360,14 @@ $.Autocompleter = function(input, options) { term = term.toLowerCase(); var data = cache.load(term); // recieve the cached data - if (data && data.length) { - success(term, data); + if (data) { + if(data.length) { + success(term, data); + } + else{ + var parsed = options.parse && options.parse(options.noRecord) || parse(options.noRecord); + success(term,parsed); + } // if an AJAX url has been supplied, try loading the data now } else if( (typeof options.url == "string") && (options.url.length > 0) ){ @@ -368,7 +398,12 @@ $.Autocompleter = function(input, options) { } else { // if we have a failure, we need to empty the list -- this prevents the the [TAB] key from selecting the last successful match select.emptyList(); - failure(term); + if(globalFailure != null) { + globalFailure(); + } + else { + failure(term); + } } }; @@ -404,8 +439,8 @@ $.Autocompleter.defaults = { matchCase: false, matchSubset: true, matchContains: false, - cacheLength: 10, - max: 100, + cacheLength: 100, + max: 1000, mustMatch: false, extraParams: {}, selectFirst: true, @@ -414,12 +449,15 @@ $.Autocompleter.defaults = { autoFill: false, width: 0, multiple: false, - multipleSeparator: ", ", + multipleSeparator: " ", + inputFocus: true, + clickFire: false, highlight: function(value, term) { return value.replace(new RegExp("(?![^&;]+;)(?!<[^<>]*)(" + term.replace(/([\^\$\(\)\[\]\{\}\*\.\+\?\|\\])/gi, "\\$1") + ")(?![^<>]*>)(?![^&;]+;)", "gi"), "$1"); }, - scroll: true, - scrollHeight: 180 + scroll: true, + scrollHeight: 180, + scrollJumpPosition: true }; $.Autocompleter.Cache = function(options) { @@ -428,14 +466,9 @@ $.Autocompleter.Cache = function(options) { var length = 0; function matchSubset(s, sub) { - if (!options.matchCase) - s = s.toLowerCase(); - var i = s.indexOf(sub); - if (options.matchContains == "word"){ - i = s.toLowerCase().search("\\b" + sub.toLowerCase()); - } - if (i == -1) return false; - return i == 0 || options.matchContains; + return (new RegExp(sub.toUpperCase().replace(/([\^\$\(\)\[\]\{\}\*\.\+\?\|\\])/gi, "\\$1").replace(/[A-Z0-9]/g, function(m, offset) { + return offset === 0 ? '(?:' + m + '|^' + m.toLowerCase() + ')' : '(?:.*' + m + '|' + m.toLowerCase() + ')'; + }))).test(s); // find by initials }; function add(q, value) { @@ -467,7 +500,7 @@ $.Autocompleter.Cache = function(options) { rawValue = (typeof rawValue == "string") ? [rawValue] : rawValue; var value = options.formatMatch(rawValue, i+1, options.data.length); - if ( value === false ) + if ( typeof(value) === 'undefined' || value === false ) continue; var firstChar = value.charAt(0).toLowerCase(); @@ -582,18 +615,25 @@ $.Autocompleter.Select = function (options, input, select, config) { .hide() .addClass(options.resultsClass) .css("position", "absolute") - .appendTo(document.body); + .appendTo(document.body) + .hover(function(event) { + // Browsers except FF do not fire mouseup event on scrollbars, resulting in mouseDownOnSelect remaining true, and results list not always hiding. + if($(this).is(":visible")) { + input.focus(); + } + config.mouseDownOnSelect = false; + }); list = $("
          ").appendTo(element).mouseover( function(event) { if(target(event).nodeName && target(event).nodeName.toUpperCase() == 'LI') { - active = $("li", list).removeClass(CLASSES.ACTIVE).index(target(event)); - $(target(event)).addClass(CLASSES.ACTIVE); - } + active = $("li", list).removeClass(CLASSES.ACTIVE).index(target(event)); + $(target(event)).addClass(CLASSES.ACTIVE); + } }).click(function(event) { $(target(event)).addClass(CLASSES.ACTIVE); select(); - // TODO provide option to avoid setting focus again after selection? useful for cleanup-on-focus - input.focus(); + if( options.inputFocus ) + input.focus(); return false; }).mousedown(function() { config.mouseDownOnSelect = true; @@ -620,29 +660,32 @@ $.Autocompleter.Select = function (options, input, select, config) { function moveSelect(step) { listItems.slice(active, active + 1).removeClass(CLASSES.ACTIVE); movePosition(step); - var activeItem = listItems.slice(active, active + 1).addClass(CLASSES.ACTIVE); - if(options.scroll) { - var offset = 0; - listItems.slice(0, active).each(function() { + var activeItem = listItems.slice(active, active + 1).addClass(CLASSES.ACTIVE); + if(options.scroll) { + var offset = 0; + listItems.slice(0, active).each(function() { offset += this.offsetHeight; }); - if((offset + activeItem[0].offsetHeight - list.scrollTop()) > list[0].clientHeight) { - list.scrollTop(offset + activeItem[0].offsetHeight - list.innerHeight()); - } else if(offset < list.scrollTop()) { - list.scrollTop(offset); - } - } + if((offset + activeItem[0].offsetHeight - list.scrollTop()) > list[0].clientHeight) { + list.scrollTop(offset + activeItem[0].offsetHeight - list.innerHeight()); + } else if(offset < list.scrollTop()) { + list.scrollTop(offset); + } + } }; function movePosition(step) { - active += step; - if (active < 0) { - active = listItems.size() - 1; - } else if (active >= listItems.size()) { - active = 0; + if (options.scrollJumpPosition || (!options.scrollJumpPosition && !((step < 0 && active == 0) || (step > 0 && active == listItems.size() - 1)) )) { + active += step; + if (active < 0) { + active = listItems.size() - 1; + } else if (active >= listItems.size()) { + active = 0; + } } } + function limitNumberOfItems(available) { return options.max && options.max < available ? options.max @@ -712,32 +755,31 @@ $.Autocompleter.Select = function (options, input, select, config) { show: function() { var offset = $(input).offset(); element.css({ - width: typeof options.width == "string" || options.width > 0 ? options.width : $(input).innerWidth(), + width: typeof options.width == "string" || options.width > 0 ? options.width : $(input).width(), top: offset.top + input.offsetHeight, left: offset.left }).show(); - options.show(element); - if(options.scroll) { - list.scrollTop(0); - list.css({ + if(options.scroll) { + list.scrollTop(0); + list.css({ maxHeight: options.scrollHeight, overflow: 'auto' }); - if($.browser.msie && typeof document.body.style.maxHeight === "undefined") { + if(navigator.userAgent.indexOf("MSIE") != -1 && typeof document.body.style.maxHeight === "undefined") { var listHeight = 0; listItems.each(function() { listHeight += this.offsetHeight; }); var scrollbarsVisible = listHeight > options.scrollHeight; - list.css('height', scrollbarsVisible ? options.scrollHeight : listHeight ); + list.css('height', scrollbarsVisible ? options.scrollHeight : listHeight ); if (!scrollbarsVisible) { // IE doesn't recalculate width when scrollbar disappears listItems.width( list.width() - parseInt(listItems.css("padding-left")) - parseInt(listItems.css("padding-right")) ); } - } + } - } + } }, selected: function() { var selected = listItems && listItems.filter("." + CLASSES.ACTIVE).removeClass(CLASSES.ACTIVE); @@ -796,4 +838,4 @@ $.fn.selection = function(start, end) { } }; -})(jQuery); \ No newline at end of file +})(jQuery); diff --git a/buildscripts/apigen/pradosoft/js/jquery.cookie.js b/buildscripts/apigen/pradosoft/js/jquery.cookie.js index 6df1faca..3838d7ed 100644 --- a/buildscripts/apigen/pradosoft/js/jquery.cookie.js +++ b/buildscripts/apigen/pradosoft/js/jquery.cookie.js @@ -1,96 +1,114 @@ -/** - * Cookie plugin - * - * Copyright (c) 2006 Klaus Hartl (stilbuero.de) - * Dual licensed under the MIT and GPL licenses: - * http://www.opensource.org/licenses/mit-license.php - * http://www.gnu.org/licenses/gpl.html +/*! + * jQuery Cookie Plugin v1.4.1 + * https://github.com/carhartl/jquery-cookie * + * Copyright 2006, 2014 Klaus Hartl + * Released under the MIT license */ +(function (factory) { + if (typeof define === 'function' && define.amd) { + // AMD (Register as an anonymous module) + define(['jquery'], factory); + } else if (typeof exports === 'object') { + // Node/CommonJS + module.exports = factory(require('jquery')); + } else { + // Browser globals + factory(jQuery); + } +}(function ($) { -/** - * Create a cookie with the given name and value and other optional parameters. - * - * @example $.cookie('the_cookie', 'the_value'); - * @desc Set the value of a cookie. - * @example $.cookie('the_cookie', 'the_value', { expires: 7, path: '/', domain: 'jquery.com', secure: true }); - * @desc Create a cookie with all available options. - * @example $.cookie('the_cookie', 'the_value'); - * @desc Create a session cookie. - * @example $.cookie('the_cookie', null); - * @desc Delete a cookie by passing null as value. Keep in mind that you have to use the same path and domain - * used when the cookie was set. - * - * @param String name The name of the cookie. - * @param String value The value of the cookie. - * @param Object options An object literal containing key/value pairs to provide optional cookie attributes. - * @option Number|Date expires Either an integer specifying the expiration date from now on in days or a Date object. - * If a negative value is specified (e.g. a date in the past), the cookie will be deleted. - * If set to null or omitted, the cookie will be a session cookie and will not be retained - * when the the browser exits. - * @option String path The value of the path atribute of the cookie (default: path of page that created the cookie). - * @option String domain The value of the domain attribute of the cookie (default: domain of page that created the cookie). - * @option Boolean secure If true, the secure attribute of the cookie will be set and the cookie transmission will - * require a secure protocol (like HTTPS). - * @type undefined - * - * @name $.cookie - * @cat Plugins/Cookie - * @author Klaus Hartl/klaus.hartl@stilbuero.de - */ + var pluses = /\+/g; -/** - * Get the value of a cookie with the given name. - * - * @example $.cookie('the_cookie'); - * @desc Get the value of a cookie. - * - * @param String name The name of the cookie. - * @return The value of the cookie. - * @type String - * - * @name $.cookie - * @cat Plugins/Cookie - * @author Klaus Hartl/klaus.hartl@stilbuero.de - */ -jQuery.cookie = function(name, value, options) { - if (typeof value != 'undefined') { // name and value given, set cookie - options = options || {}; - if (value === null) { - value = ''; - options.expires = -1; - } - var expires = ''; - if (options.expires && (typeof options.expires == 'number' || options.expires.toUTCString)) { - var date; - if (typeof options.expires == 'number') { - date = new Date(); - date.setTime(date.getTime() + (options.expires * 24 * 60 * 60 * 1000)); - } else { - date = options.expires; - } - expires = '; expires=' + date.toUTCString(); // use expires attribute, max-age is not supported by IE - } - // CAUTION: Needed to parenthesize options.path and options.domain - // in the following expressions, otherwise they evaluate to undefined - // in the packed version for some reason... - var path = options.path ? '; path=' + (options.path) : ''; - var domain = options.domain ? '; domain=' + (options.domain) : ''; - var secure = options.secure ? '; secure' : ''; - document.cookie = [name, '=', encodeURIComponent(value), expires, path, domain, secure].join(''); - } else { // only name given, get cookie - var cookieValue = null; - if (document.cookie && document.cookie != '') { - var cookies = document.cookie.split(';'); - for (var i = 0; i < cookies.length; i++) { - var cookie = jQuery.trim(cookies[i]); - // Does this cookie string begin with the name we want? - if (cookie.substring(0, name.length + 1) == (name + '=')) { - cookieValue = decodeURIComponent(cookie.substring(name.length + 1)); - break; - } - } - } - return cookieValue; - } -}; \ No newline at end of file + function encode(s) { + return config.raw ? s : encodeURIComponent(s); + } + + function decode(s) { + return config.raw ? s : decodeURIComponent(s); + } + + function stringifyCookieValue(value) { + return encode(config.json ? JSON.stringify(value) : String(value)); + } + + function parseCookieValue(s) { + if (s.indexOf('"') === 0) { + // This is a quoted cookie as according to RFC2068, unescape... + s = s.slice(1, -1).replace(/\\"/g, '"').replace(/\\\\/g, '\\'); + } + + try { + // Replace server-side written pluses with spaces. + // If we can't decode the cookie, ignore it, it's unusable. + // If we can't parse the cookie, ignore it, it's unusable. + s = decodeURIComponent(s.replace(pluses, ' ')); + return config.json ? JSON.parse(s) : s; + } catch(e) {} + } + + function read(s, converter) { + var value = config.raw ? s : parseCookieValue(s); + return $.isFunction(converter) ? converter(value) : value; + } + + var config = $.cookie = function (key, value, options) { + + // Write + + if (arguments.length > 1 && !$.isFunction(value)) { + options = $.extend({}, config.defaults, options); + + if (typeof options.expires === 'number') { + var days = options.expires, t = options.expires = new Date(); + t.setMilliseconds(t.getMilliseconds() + days * 864e+5); + } + + return (document.cookie = [ + encode(key), '=', stringifyCookieValue(value), + options.expires ? '; expires=' + options.expires.toUTCString() : '', // use expires attribute, max-age is not supported by IE + options.path ? '; path=' + options.path : '', + options.domain ? '; domain=' + options.domain : '', + options.secure ? '; secure' : '' + ].join('')); + } + + // Read + + var result = key ? undefined : {}, + // To prevent the for loop in the first place assign an empty array + // in case there are no cookies at all. Also prevents odd result when + // calling $.cookie(). + cookies = document.cookie ? document.cookie.split('; ') : [], + i = 0, + l = cookies.length; + + for (; i < l; i++) { + var parts = cookies[i].split('='), + name = decode(parts.shift()), + cookie = parts.join('='); + + if (key === name) { + // If second argument (value) is a function it's a converter... + result = read(cookie, value); + break; + } + + // Prevent storing a cookie that we couldn't decode. + if (!key && (cookie = read(cookie)) !== undefined) { + result[name] = cookie; + } + } + + return result; + }; + + config.defaults = {}; + + $.removeCookie = function (key, options) { + // Must not alter options, thus extending a fresh object... + $.cookie(key, '', $.extend({}, options, { expires: -1 })); + return !$.cookie(key); + }; + +})); diff --git a/buildscripts/apigen/pradosoft/js/jquery.min.js b/buildscripts/apigen/pradosoft/js/jquery.min.js index 3ca5e0f5..ce1b6b6e 100644 --- a/buildscripts/apigen/pradosoft/js/jquery.min.js +++ b/buildscripts/apigen/pradosoft/js/jquery.min.js @@ -1,4 +1,5 @@ -/*! jQuery v1.7 jquery.com | jquery.org/license */ -(function(a,b){function cA(a){return f.isWindow(a)?a:a.nodeType===9?a.defaultView||a.parentWindow:!1}function cx(a){if(!cm[a]){var b=c.body,d=f("<"+a+">").appendTo(b),e=d.css("display");d.remove();if(e==="none"||e===""){cn||(cn=c.createElement("iframe"),cn.frameBorder=cn.width=cn.height=0),b.appendChild(cn);if(!co||!cn.createElement)co=(cn.contentWindow||cn.contentDocument).document,co.write((c.compatMode==="CSS1Compat"?"":"")+""),co.close();d=co.createElement(a),co.body.appendChild(d),e=f.css(d,"display"),b.removeChild(cn)}cm[a]=e}return cm[a]}function cw(a,b){var c={};f.each(cs.concat.apply([],cs.slice(0,b)),function(){c[this]=a});return c}function cv(){ct=b}function cu(){setTimeout(cv,0);return ct=f.now()}function cl(){try{return new a.ActiveXObject("Microsoft.XMLHTTP")}catch(b){}}function ck(){try{return new a.XMLHttpRequest}catch(b){}}function ce(a,c){a.dataFilter&&(c=a.dataFilter(c,a.dataType));var d=a.dataTypes,e={},g,h,i=d.length,j,k=d[0],l,m,n,o,p;for(g=1;g0){c!=="border"&&f.each(e,function(){c||(d-=parseFloat(f.css(a,"padding"+this))||0),c==="margin"?d+=parseFloat(f.css(a,c+this))||0:d-=parseFloat(f.css(a,"border"+this+"Width"))||0});return d+"px"}d=bB(a,b,b);if(d<0||d==null)d=a.style[b]||0;d=parseFloat(d)||0,c&&f.each(e,function(){d+=parseFloat(f.css(a,"padding"+this))||0,c!=="padding"&&(d+=parseFloat(f.css(a,"border"+this+"Width"))||0),c==="margin"&&(d+=parseFloat(f.css(a,c+this))||0)});return d+"px"}function br(a,b){b.src?f.ajax({url:b.src,async:!1,dataType:"script"}):f.globalEval((b.text||b.textContent||b.innerHTML||"").replace(bi,"/*$0*/")),b.parentNode&&b.parentNode.removeChild(b)}function bq(a){var b=(a.nodeName||"").toLowerCase();b==="input"?bp(a):b!=="script"&&typeof a.getElementsByTagName!="undefined"&&f.grep(a.getElementsByTagName("input"),bp)}function bp(a){if(a.type==="checkbox"||a.type==="radio")a.defaultChecked=a.checked}function bo(a){return typeof a.getElementsByTagName!="undefined"?a.getElementsByTagName("*"):typeof a.querySelectorAll!="undefined"?a.querySelectorAll("*"):[]}function bn(a,b){var c;if(b.nodeType===1){b.clearAttributes&&b.clearAttributes(),b.mergeAttributes&&b.mergeAttributes(a),c=b.nodeName.toLowerCase();if(c==="object")b.outerHTML=a.outerHTML;else if(c!=="input"||a.type!=="checkbox"&&a.type!=="radio"){if(c==="option")b.selected=a.defaultSelected;else if(c==="input"||c==="textarea")b.defaultValue=a.defaultValue}else a.checked&&(b.defaultChecked=b.checked=a.checked),b.value!==a.value&&(b.value=a.value);b.removeAttribute(f.expando)}}function bm(a,b){if(b.nodeType===1&&!!f.hasData(a)){var c,d,e,g=f._data(a),h=f._data(b,g),i=g.events;if(i){delete h.handle,h.events={};for(c in i)for(d=0,e=i[c].length;d=0===c})}function V(a){return!a||!a.parentNode||a.parentNode.nodeType===11}function N(){return!0}function M(){return!1}function n(a,b,c){var d=b+"defer",e=b+"queue",g=b+"mark",h=f._data(a,d);h&&(c==="queue"||!f._data(a,e))&&(c==="mark"||!f._data(a,g))&&setTimeout(function(){!f._data(a,e)&&!f._data(a,g)&&(f.removeData(a,d,!0),h.fire())},0)}function m(a){for(var b in a){if(b==="data"&&f.isEmptyObject(a[b]))continue;if(b!=="toJSON")return!1}return!0}function l(a,c,d){if(d===b&&a.nodeType===1){var e="data-"+c.replace(k,"-$1").toLowerCase();d=a.getAttribute(e);if(typeof d=="string"){try{d=d==="true"?!0:d==="false"?!1:d==="null"?null:f.isNumeric(d)?parseFloat(d):j.test(d)?f.parseJSON(d):d}catch(g){}f.data(a,c,d)}else d=b}return d}function h(a){var b=g[a]={},c,d;a=a.split(/\s+/);for(c=0,d=a.length;c)[^>]*$|#([\w\-]*)$)/,j=/\S/,k=/^\s+/,l=/\s+$/,m=/\d/,n=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,o=/^[\],:{}\s]*$/,p=/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,q=/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,r=/(?:^|:|,)(?:\s*\[)+/g,s=/(webkit)[ \/]([\w.]+)/,t=/(opera)(?:.*version)?[ \/]([\w.]+)/,u=/(msie) ([\w.]+)/,v=/(mozilla)(?:.*? rv:([\w.]+))?/,w=/-([a-z]|[0-9])/ig,x=/^-ms-/,y=function(a,b){return(b+"").toUpperCase()},z=d.userAgent,A,B,C,D=Object.prototype.toString,E=Object.prototype.hasOwnProperty,F=Array.prototype.push,G=Array.prototype.slice,H=String.prototype.trim,I=Array.prototype.indexOf,J={};e.fn=e.prototype={constructor:e,init:function(a,d,f){var g,h,j,k;if(!a)return this;if(a.nodeType){this.context=this[0]=a,this.length=1;return this}if(a==="body"&&!d&&c.body){this.context=c,this[0]=c.body,this.selector=a,this.length=1;return this}if(typeof a=="string"){a.charAt(0)!=="<"||a.charAt(a.length-1)!==">"||a.length<3?g=i.exec(a):g=[null,a,null];if(g&&(g[1]||!d)){if(g[1]){d=d instanceof e?d[0]:d,k=d?d.ownerDocument||d:c,j=n.exec(a),j?e.isPlainObject(d)?(a=[c.createElement(j[1])],e.fn.attr.call(a,d,!0)):a=[k.createElement(j[1])]:(j=e.buildFragment([g[1]],[k]),a=(j.cacheable?e.clone(j.fragment):j.fragment).childNodes);return e.merge(this,a)}h=c.getElementById(g[2]);if(h&&h.parentNode){if(h.id!==g[2])return f.find(a);this.length=1,this[0]=h}this.context=c,this.selector=a;return this}return!d||d.jquery?(d||f).find(a):this.constructor(d).find(a)}if(e.isFunction(a))return f.ready(a);a.selector!==b&&(this.selector=a.selector,this.context=a.context);return e.makeArray(a,this)},selector:"",jquery:"1.7",length:0,size:function(){return this.length},toArray:function(){return G.call(this,0)},get:function(a){return a==null?this.toArray():a<0?this[this.length+a]:this[a]},pushStack:function(a,b,c){var d=this.constructor();e.isArray(a)?F.apply(d,a):e.merge(d,a),d.prevObject=this,d.context=this.context,b==="find"?d.selector=this.selector+(this.selector?" ":"")+c:b&&(d.selector=this.selector+"."+b+"("+c+")");return d},each:function(a,b){return e.each(this,a,b)},ready:function(a){e.bindReady(),B.add(a);return this},eq:function(a){return a===-1?this.slice(a):this.slice(a,+a+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(G.apply(this,arguments),"slice",G.call(arguments).join(","))},map:function(a){return this.pushStack(e.map(this,function(b,c){return a.call(b,c,b)}))},end:function(){return this.prevObject||this.constructor(null)},push:F,sort:[].sort,splice:[].splice},e.fn.init.prototype=e.fn,e.extend=e.fn.extend=function(){var a,c,d,f,g,h,i=arguments[0]||{},j=1,k=arguments.length,l=!1;typeof i=="boolean"&&(l=i,i=arguments[1]||{},j=2),typeof i!="object"&&!e.isFunction(i)&&(i={}),k===j&&(i=this,--j);for(;j0)return;B.fireWith(c,[e]),e.fn.trigger&&e(c).trigger("ready").unbind("ready")}},bindReady:function(){if(!B){B=e.Callbacks("once memory");if(c.readyState==="complete")return setTimeout(e.ready,1);if(c.addEventListener)c.addEventListener("DOMContentLoaded",C,!1),a.addEventListener("load",e.ready,!1);else if(c.attachEvent){c.attachEvent("onreadystatechange",C),a.attachEvent("onload",e.ready);var b=!1;try{b=a.frameElement==null}catch(d){}c.documentElement.doScroll&&b&&K()}}},isFunction:function(a){return e.type(a)==="function"},isArray:Array.isArray||function(a){return e.type(a)==="array"},isWindow:function(a){return a&&typeof a=="object"&&"setInterval"in a},isNumeric:function(a){return a!=null&&m.test(a)&&!isNaN(a)},type:function(a){return a==null?String(a):J[D.call(a)]||"object"},isPlainObject:function(a){if(!a||e.type(a)!=="object"||a.nodeType||e.isWindow(a))return!1;try{if(a.constructor&&!E.call(a,"constructor")&&!E.call(a.constructor.prototype,"isPrototypeOf"))return!1}catch(c){return!1}var d;for(d in a);return d===b||E.call(a,d)},isEmptyObject:function(a){for(var b in a)return!1;return!0},error:function(a){throw a},parseJSON:function(b){if(typeof b!="string"||!b)return null;b=e.trim(b);if(a.JSON&&a.JSON.parse)return a.JSON.parse(b);if(o.test(b.replace(p,"@").replace(q,"]").replace(r,"")))return(new Function("return "+b))();e.error("Invalid JSON: "+b)},parseXML:function(c){var d,f;try{a.DOMParser?(f=new DOMParser,d=f.parseFromString(c,"text/xml")):(d=new ActiveXObject("Microsoft.XMLDOM"),d.async="false",d.loadXML(c))}catch(g){d=b}(!d||!d.documentElement||d.getElementsByTagName("parsererror").length)&&e.error("Invalid XML: "+c);return d},noop:function(){},globalEval:function(b){b&&j.test(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},camelCase:function(a){return a.replace(x,"ms-").replace(w,y)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toUpperCase()===b.toUpperCase()},each:function(a,c,d){var f,g=0,h=a.length,i=h===b||e.isFunction(a);if(d){if(i){for(f in a)if(c.apply(a[f],d)===!1)break}else for(;g0&&a[0]&&a[j-1]||j===0||e.isArray(a));if(k)for(;i1?i.call(arguments,0):b,j.notifyWith(k,e)}}function l(a){return function(c){b[a]=arguments.length>1?i.call(arguments,0):c,--g||j.resolveWith(j,b)}}var b=i.call(arguments,0),c=0,d=b.length,e=Array(d),g=d,h=d,j=d<=1&&a&&f.isFunction(a.promise)?a:f.Deferred(),k=j.promise();if(d>1){for(;c
          a",d=a.getElementsByTagName("*"),e=a.getElementsByTagName("a")[0];if(!d||!d.length||!e)return{};g=c.createElement("select"),h=g.appendChild(c.createElement("option")),i=a.getElementsByTagName("input")[0],k={leadingWhitespace:a.firstChild.nodeType===3,tbody:!a.getElementsByTagName("tbody").length,htmlSerialize:!!a.getElementsByTagName("link").length,style:/top/.test(e.getAttribute("style")),hrefNormalized:e.getAttribute("href")==="/a",opacity:/^0.55/.test(e.style.opacity),cssFloat:!!e.style.cssFloat,unknownElems:!!a.getElementsByTagName("nav").length,checkOn:i.value==="on",optSelected:h.selected,getSetAttribute:a.className!=="t",enctype:!!c.createElement("form").enctype,submitBubbles:!0,changeBubbles:!0,focusinBubbles:!1,deleteExpando:!0,noCloneEvent:!0,inlineBlockNeedsLayout:!1,shrinkWrapBlocks:!1,reliableMarginRight:!0},i.checked=!0,k.noCloneChecked=i.cloneNode(!0).checked,g.disabled=!0,k.optDisabled=!h.disabled;try{delete a.test}catch(v){k.deleteExpando=!1}!a.addEventListener&&a.attachEvent&&a.fireEvent&&(a.attachEvent("onclick",function(){k.noCloneEvent=!1}),a.cloneNode(!0).fireEvent("onclick")),i=c.createElement("input"),i.value="t",i.setAttribute("type","radio"),k.radioValue=i.value==="t",i.setAttribute("checked","checked"),a.appendChild(i),l=c.createDocumentFragment(),l.appendChild(a.lastChild),k.checkClone=l.cloneNode(!0).cloneNode(!0).lastChild.checked,a.innerHTML="",a.style.width=a.style.paddingLeft="1px",m=c.getElementsByTagName("body")[0],o=c.createElement(m?"div":"body"),p={visibility:"hidden",width:0,height:0,border:0,margin:0,background:"none"},m&&f.extend(p,{position:"absolute",left:"-999px",top:"-999px"});for(t in p)o.style[t]=p[t];o.appendChild(a),n=m||b,n.insertBefore(o,n.firstChild),k.appendChecked=i.checked,k.boxModel=a.offsetWidth===2,"zoom"in a.style&&(a.style.display="inline",a.style.zoom=1,k.inlineBlockNeedsLayout=a.offsetWidth===2,a.style.display="",a.innerHTML="
          ",k.shrinkWrapBlocks=a.offsetWidth!==2),a.innerHTML="
          t
          ",q=a.getElementsByTagName("td"),u=q[0].offsetHeight===0,q[0].style.display="",q[1].style.display="none",k.reliableHiddenOffsets=u&&q[0].offsetHeight===0,a.innerHTML="",c.defaultView&&c.defaultView.getComputedStyle&&(j=c.createElement("div"),j.style.width="0",j.style.marginRight="0",a.appendChild(j),k.reliableMarginRight=(parseInt((c.defaultView.getComputedStyle(j,null)||{marginRight:0}).marginRight,10)||0)===0);if(a.attachEvent)for(t in{submit:1,change:1,focusin:1})s="on"+t,u=s in a,u||(a.setAttribute(s,"return;"),u=typeof a[s]=="function"),k[t+"Bubbles"]=u;f(function(){var a,b,d,e,g,h,i=1,j="position:absolute;top:0;left:0;width:1px;height:1px;margin:0;",l="visibility:hidden;border:0;",n="style='"+j+"border:5px solid #000;padding:0;'",p="
          "+""+"
          ";m=c.getElementsByTagName("body")[0];!m||(a=c.createElement("div"),a.style.cssText=l+"width:0;height:0;position:static;top:0;margin-top:"+i+"px",m.insertBefore(a,m.firstChild),o=c.createElement("div"),o.style.cssText=j+l,o.innerHTML=p,a.appendChild(o),b=o.firstChild,d=b.firstChild,g=b.nextSibling.firstChild.firstChild,h={doesNotAddBorder:d.offsetTop!==5,doesAddBorderForTableAndCells:g.offsetTop===5},d.style.position="fixed",d.style.top="20px",h.fixedPosition=d.offsetTop===20||d.offsetTop===15,d.style.position=d.style.top="",b.style.overflow="hidden",b.style.position="relative",h.subtractsBorderForOverflowNotVisible=d.offsetTop===-5,h.doesNotIncludeMarginInBodyOffset=m.offsetTop!==i,m.removeChild(a),o=a=null,f.extend(k,h))}),o.innerHTML="",n.removeChild(o),o=l=g=h=m=j=a=i=null;return k}(),f.boxModel=f.support.boxModel;var j=/^(?:\{.*\}|\[.*\])$/,k=/([A-Z])/g;f.extend({cache:{},uuid:0,expando:"jQuery"+(f.fn.jquery+Math.random()).replace(/\D/g,""),noData:{embed:!0,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:!0},hasData:function(a){a=a.nodeType?f.cache[a[f.expando]]:a[f.expando];return!!a&&!m(a)},data:function(a,c,d,e){if(!!f.acceptData(a)){var g,h,i,j=f.expando,k=typeof c=="string",l=a.nodeType,m=l?f.cache:a,n=l?a[f.expando]:a[f.expando]&&f.expando,o=c==="events";if((!n||!m[n]||!o&&!e&&!m[n].data)&&k&&d===b)return;n||(l?a[f.expando]=n=++f.uuid:n=f.expando),m[n]||(m[n]={},l||(m[n].toJSON=f.noop));if(typeof c=="object"||typeof c=="function")e?m[n]=f.extend(m[n],c):m[n].data=f.extend(m[n].data,c);g=h=m[n],e||(h.data||(h.data={}),h=h.data),d!==b&&(h[f.camelCase(c)]=d);if(o&&!h[c])return g.events;k?(i=h[c],i==null&&(i=h[f.camelCase(c)])):i=h;return i}},removeData:function(a,b,c){if(!!f.acceptData(a)){var d,e,g,h=f.expando,i=a.nodeType,j=i?f.cache:a,k=i?a[f.expando]:f.expando;if(!j[k])return;if(b){d=c?j[k]:j[k].data;if(d){f.isArray(b)?b=b:b in d?b=[b]:(b=f.camelCase(b),b in d?b=[b]:b=b.split(" "));for(e=0,g=b.length;e-1)return!0;return!1},val:function(a){var c,d,e,g=this[0];if(!arguments.length){if(g){c=f.valHooks[g.nodeName.toLowerCase()]||f.valHooks[g.type];if(c&&"get"in c&&(d=c.get(g,"value"))!==b)return d;d=g.value;return typeof d=="string"?d.replace(q,""):d==null?"":d}return b}e=f.isFunction(a);return this.each(function(d){var g=f(this),h;if(this.nodeType===1){e?h=a.call(this,d,g.val()):h=a,h==null?h="":typeof h=="number"?h+="":f.isArray(h)&&(h=f.map(h,function(a){return a==null?"":a+""})),c=f.valHooks[this.nodeName.toLowerCase()]||f.valHooks[this.type];if(!c||!("set"in c)||c.set(this,h,"value")===b)this.value=h}})}}),f.extend({valHooks:{option:{get:function(a){var b=a.attributes.value;return!b||b.specified?a.value:a.text}},select:{get:function(a){var b,c,d,e,g=a.selectedIndex,h=[],i=a.options,j=a.type==="select-one";if(g<0)return null;c=j?g:0,d=j?g+1:i.length;for(;c=0}),c.length||(a.selectedIndex=-1);return c}}},attrFn:{val:!0,css:!0,html:!0,text:!0,data:!0,width:!0,height:!0,offset:!0},attr:function(a,c,d,e){var g,h,i,j=a.nodeType;if(!a||j===3||j===8||j===2)return b;if(e&&c in f.attrFn)return f(a)[c](d);if(!("getAttribute"in a))return f.prop(a,c,d);i=j!==1||!f.isXMLDoc(a),i&&(c=c.toLowerCase(),h=f.attrHooks[c]||(u.test(c)?x:w));if(d!==b){if(d===null){f.removeAttr(a,c);return b}if(h&&"set"in h&&i&&(g=h.set(a,d,c))!==b)return g;a.setAttribute(c,""+d);return d}if(h&&"get"in h&&i&&(g=h.get(a,c))!==null)return g;g=a.getAttribute(c);return g===null?b:g},removeAttr:function(a,b){var c,d,e,g,h=0;if(a.nodeType===1){d=(b||"").split(p),g=d.length;for(;h=0}})});var z=/\.(.*)$/,A=/^(?:textarea|input|select)$/i,B=/\./g,C=/ /g,D=/[^\w\s.|`]/g,E=/^([^\.]*)?(?:\.(.+))?$/,F=/\bhover(\.\S+)?/,G=/^key/,H=/^(?:mouse|contextmenu)|click/,I=/^(\w*)(?:#([\w\-]+))?(?:\.([\w\-]+))?$/,J=function(a){var b=I.exec(a);b&& -(b[1]=(b[1]||"").toLowerCase(),b[3]=b[3]&&new RegExp("(?:^|\\s)"+b[3]+"(?:\\s|$)"));return b},K=function(a,b){return(!b[1]||a.nodeName.toLowerCase()===b[1])&&(!b[2]||a.id===b[2])&&(!b[3]||b[3].test(a.className))},L=function(a){return f.event.special.hover?a:a.replace(F,"mouseenter$1 mouseleave$1")};f.event={add:function(a,c,d,e,g){var h,i,j,k,l,m,n,o,p,q,r,s;if(!(a.nodeType===3||a.nodeType===8||!c||!d||!(h=f._data(a)))){d.handler&&(p=d,d=p.handler),d.guid||(d.guid=f.guid++),j=h.events,j||(h.events=j={}),i=h.handle,i||(h.handle=i=function(a){return typeof f!="undefined"&&(!a||f.event.triggered!==a.type)?f.event.dispatch.apply(i.elem,arguments):b},i.elem=a),c=L(c).split(" ");for(k=0;k=0&&(h=h.slice(0,-1),k=!0),h.indexOf(".")>=0&&(i=h.split("."),h=i.shift(),i.sort());if((!e||f.event.customEvent[h])&&!f.event.global[h])return;c=typeof c=="object"?c[f.expando]?c:new f.Event(h,c):new f.Event(h),c.type=h,c.isTrigger=!0,c.exclusive=k,c.namespace=i.join("."),c.namespace_re=c.namespace?new RegExp("(^|\\.)"+i.join("\\.(?:.*\\.)?")+"(\\.|$)"):null,o=h.indexOf(":")<0?"on"+h:"",(g||!e)&&c.preventDefault();if(!e){j=f.cache;for(l in j)j[l].events&&j[l].events[h]&&f.event.trigger(c,d,j[l].handle.elem,!0);return}c.result=b,c.target||(c.target=e),d=d!=null?f.makeArray(d):[],d.unshift(c),p=f.event.special[h]||{};if(p.trigger&&p.trigger.apply(e,d)===!1)return;r=[[e,p.bindType||h]];if(!g&&!p.noBubble&&!f.isWindow(e)){s=p.delegateType||h,n=null;for(m=e.parentNode;m;m=m.parentNode)r.push([m,s]),n=m;n&&n===e.ownerDocument&&r.push([n.defaultView||n.parentWindow||a,s])}for(l=0;l=0:t===b&&(t=o[s]=r.quick?K(m,r.quick):f(m).is(s)),t&&q.push(r);q.length&&j.push({elem:m,matches:q})}d.length>e&&j.push({elem:this,matches:d.slice(e)});for(k=0;k0?this.bind(b,a,c):this.trigger(b)},f.attrFn&&(f.attrFn[b]=!0),G.test(b)&&(f.event.fixHooks[b]=f.event.keyHooks),H.test(b)&&(f.event.fixHooks[b]=f.event.mouseHooks)}),function(){function x(a,b,c,e,f,g){for(var h=0,i=e.length;h0){k=j;break}}j=j[a]}e[h]=k}}}function w(a,b,c,e,f,g){for(var h=0,i=e.length;h+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,d="sizcache"+(Math.random()+"").replace(".",""),e=0,g=Object.prototype.toString,h=!1,i=!0,j=/\\/g,k=/\r\n/g,l=/\W/;[0,0].sort(function(){i=!1;return 0});var m=function(b,d,e,f){e=e||[],d=d||c;var h=d;if(d.nodeType!==1&&d.nodeType!==9)return[];if(!b||typeof b!="string")return e;var i,j,k,l,n,q,r,t,u=!0,v=m.isXML(d),w=[],x=b;do{a.exec(""),i=a.exec(x);if(i){x=i[3],w.push(i[1]);if(i[2]){l=i[3];break}}}while(i);if(w.length>1&&p.exec(b))if(w.length===2&&o.relative[w[0]])j=y(w[0]+w[1],d,f);else{j=o.relative[w[0]]?[d]:m(w.shift(),d);while(w.length)b=w.shift(),o.relative[b]&&(b+=w.shift()),j=y(b,j,f)}else{!f&&w.length>1&&d.nodeType===9&&!v&&o.match.ID.test(w[0])&&!o.match.ID.test(w[w.length-1])&&(n=m.find(w.shift(),d,v),d=n.expr?m.filter(n.expr,n.set)[0]:n.set[0]);if(d){n=f?{expr:w.pop(),set:s(f)}:m.find(w.pop(),w.length===1&&(w[0]==="~"||w[0]==="+")&&d.parentNode?d.parentNode:d,v),j=n.expr?m.filter(n.expr,n.set):n.set,w.length>0?k=s(j):u=!1;while(w.length)q=w.pop(),r=q,o.relative[q]?r=w.pop():q="",r==null&&(r=d),o.relative[q](k,r,v)}else k=w=[]}k||(k=j),k||m.error(q||b);if(g.call(k)==="[object Array]")if(!u)e.push.apply(e,k);else if(d&&d.nodeType===1)for(t=0;k[t]!=null;t++)k[t]&&(k[t]===!0||k[t].nodeType===1&&m.contains(d,k[t]))&&e.push(j[t]);else for(t=0;k[t]!=null;t++)k[t]&&k[t].nodeType===1&&e.push(j[t]);else s(k,e);l&&(m(l,h,e,f),m.uniqueSort(e));return e};m.uniqueSort=function(a){if(u){h=i,a.sort(u);if(h)for(var b=1;b0},m.find=function(a,b,c){var d,e,f,g,h,i;if(!a)return[];for(e=0,f=o.order.length;e":function(a,b){var c,d=typeof b=="string",e=0,f=a.length;if(d&&!l.test(b)){b=b.toLowerCase();for(;e=0)?c||d.push(h):c&&(b[g]=!1));return!1},ID:function(a){return a[1].replace(j,"")},TAG:function(a,b){return a[1].replace(j,"").toLowerCase()},CHILD:function(a){if(a[1]==="nth"){a[2]||m.error(a[0]),a[2]=a[2].replace(/^\+|\s*/g,"");var b=/(-?)(\d*)(?:n([+\-]?\d*))?/.exec(a[2]==="even"&&"2n"||a[2]==="odd"&&"2n+1"||!/\D/.test(a[2])&&"0n+"+a[2]||a[2]);a[2]=b[1]+(b[2]||1)-0,a[3]=b[3]-0}else a[2]&&m.error(a[0]);a[0]=e++;return a},ATTR:function(a,b,c,d,e,f){var g=a[1]=a[1].replace(j,"");!f&&o.attrMap[g]&&(a[1]=o.attrMap[g]),a[4]=(a[4]||a[5]||"").replace(j,""),a[2]==="~="&&(a[4]=" "+a[4]+" ");return a},PSEUDO:function(b,c,d,e,f){if(b[1]==="not")if((a.exec(b[3])||"").length>1||/^\w/.test(b[3]))b[3]=m(b[3],null,null,c);else{var g=m.filter(b[3],c,d,!0^f);d||e.push.apply(e,g);return!1}else if(o.match.POS.test(b[0])||o.match.CHILD.test(b[0]))return!0;return b},POS:function(a){a.unshift(!0);return a}},filters:{enabled:function(a){return a.disabled===!1&&a.type!=="hidden"},disabled:function(a){return a.disabled===!0},checked:function(a){return a.checked===!0},selected:function(a){a.parentNode&&a.parentNode.selectedIndex;return a.selected===!0},parent:function(a){return!!a.firstChild},empty:function(a){return!a.firstChild},has:function(a,b,c){return!!m(c[3],a).length},header:function(a){return/h\d/i.test(a.nodeName)},text:function(a){var b=a.getAttribute("type"),c=a.type;return a.nodeName.toLowerCase()==="input"&&"text"===c&&(b===c||b===null)},radio:function(a){return a.nodeName.toLowerCase()==="input"&&"radio"===a.type},checkbox:function(a){return a.nodeName.toLowerCase()==="input"&&"checkbox"===a.type},file:function(a){return a.nodeName.toLowerCase()==="input"&&"file"===a.type},password:function(a){return a.nodeName.toLowerCase()==="input"&&"password"===a.type},submit:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"submit"===a.type},image:function(a){return a.nodeName.toLowerCase()==="input"&&"image"===a.type},reset:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"reset"===a.type},button:function(a){var b=a.nodeName.toLowerCase();return b==="input"&&"button"===a.type||b==="button"},input:function(a){return/input|select|textarea|button/i.test(a.nodeName)},focus:function(a){return a===a.ownerDocument.activeElement}},setFilters:{first:function(a,b){return b===0},last:function(a,b,c,d){return b===d.length-1},even:function(a,b){return b%2===0},odd:function(a,b){return b%2===1},lt:function(a,b,c){return bc[3]-0},nth:function(a,b,c){return c[3]-0===b},eq:function(a,b,c){return c[3]-0===b}},filter:{PSEUDO:function(a,b,c,d){var e=b[1],f=o.filters[e];if(f)return f(a,c,b,d);if(e==="contains")return(a.textContent||a.innerText||n([a])||"").indexOf(b[3])>=0;if(e==="not"){var g=b[3];for(var h=0,i=g.length;h=0}},ID:function(a,b){return a.nodeType===1&&a.getAttribute("id")===b},TAG:function(a,b){return b==="*"&&a.nodeType===1||!!a.nodeName&&a.nodeName.toLowerCase()===b},CLASS:function(a,b){return(" "+(a.className||a.getAttribute("class"))+" ").indexOf(b)>-1},ATTR:function(a,b){var c=b[1],d=m.attr?m.attr(a,c):o.attrHandle[c]?o.attrHandle[c](a):a[c]!=null?a[c]:a.getAttribute(c),e=d+"",f=b[2],g=b[4];return d==null?f==="!=":!f&&m.attr?d!=null:f==="="?e===g:f==="*="?e.indexOf(g)>=0:f==="~="?(" "+e+" ").indexOf(g)>=0:g?f==="!="?e!==g:f==="^="?e.indexOf(g)===0:f==="$="?e.substr(e.length-g.length)===g:f==="|="?e===g||e.substr(0,g.length+1)===g+"-":!1:e&&d!==!1},POS:function(a,b,c,d){var e=b[2],f=o.setFilters[e];if(f)return f(a,c,b,d)}}},p=o.match.POS,q=function(a,b){return"\\"+(b-0+1)};for(var r in o.match)o.match[r]=new RegExp(o.match[r].source+/(?![^\[]*\])(?![^\(]*\))/.source),o.leftMatch[r]=new RegExp(/(^(?:.|\r|\n)*?)/.source+o.match[r].source.replace(/\\(\d+)/g,q));var s=function(a,b){a=Array.prototype.slice.call(a,0);if(b){b.push.apply(b,a);return b}return a};try{Array.prototype.slice.call(c.documentElement.childNodes,0)[0].nodeType}catch(t){s=function(a,b){var c=0,d=b||[];if(g.call(a)==="[object Array]")Array.prototype.push.apply(d,a);else if(typeof a.length=="number")for(var e=a.length;c",e.insertBefore(a,e.firstChild),c.getElementById(d)&&(o.find.ID=function(a,c,d){if(typeof c.getElementById!="undefined"&&!d){var e=c.getElementById(a[1]);return e?e.id===a[1]||typeof e.getAttributeNode!="undefined"&&e.getAttributeNode("id").nodeValue===a[1]?[e]:b:[]}},o.filter.ID=function(a,b){var c=typeof a.getAttributeNode!="undefined"&&a.getAttributeNode("id");return a.nodeType===1&&c&&c.nodeValue===b}),e.removeChild(a),e=a=null}(),function(){var a=c.createElement("div");a.appendChild(c.createComment("")),a.getElementsByTagName("*").length>0&&(o.find.TAG=function(a,b){var c=b.getElementsByTagName(a[1]);if(a[1]==="*"){var d=[];for(var e=0;c[e];e++)c[e].nodeType===1&&d.push(c[e]);c=d}return c}),a.innerHTML="",a.firstChild&&typeof a.firstChild.getAttribute!="undefined"&&a.firstChild.getAttribute("href")!=="#"&&(o.attrHandle.href=function(a){return a.getAttribute("href",2)}),a=null}(),c.querySelectorAll&&function(){var a=m,b=c.createElement("div"),d="__sizzle__";b.innerHTML="

          ";if(!b.querySelectorAll||b.querySelectorAll(".TEST").length!==0){m=function(b,e,f,g){e=e||c;if(!g&&!m.isXML(e)){var h=/^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec(b);if(h&&(e.nodeType===1||e.nodeType===9)){if(h[1])return s(e.getElementsByTagName(b),f);if(h[2]&&o.find.CLASS&&e.getElementsByClassName)return s(e.getElementsByClassName(h[2]),f)}if(e.nodeType===9){if(b==="body"&&e.body)return s([e.body],f);if(h&&h[3]){var i=e.getElementById(h[3]);if(!i||!i.parentNode)return s([],f);if(i.id===h[3])return s([i],f)}try{return s(e.querySelectorAll(b),f)}catch(j){}}else if(e.nodeType===1&&e.nodeName.toLowerCase()!=="object"){var k=e,l=e.getAttribute("id"),n=l||d,p=e.parentNode,q=/^\s*[+~]/.test(b);l?n=n.replace(/'/g,"\\$&"):e.setAttribute("id",n),q&&p&&(e=e.parentNode);try{if(!q||p)return s(e.querySelectorAll("[id='"+n+"'] "+b),f)}catch(r){}finally{l||k.removeAttribute("id")}}}return a(b,e,f,g)};for(var e in a)m[e]=a[e];b=null}}(),function(){var a=c.documentElement,b=a.matchesSelector||a.mozMatchesSelector||a.webkitMatchesSelector||a.msMatchesSelector;if(b){var d=!b.call(c.createElement("div"),"div"),e=!1;try{b.call(c.documentElement,"[test!='']:sizzle")}catch(f){e=!0}m.matchesSelector=function(a,c){c=c.replace(/\=\s*([^'"\]]*)\s*\]/g,"='$1']");if(!m.isXML(a))try{if(e||!o.match.PSEUDO.test(c)&&!/!=/.test(c)){var f=b.call(a,c);if(f||!d||a.document&&a.document.nodeType!==11)return f}}catch(g){}return m(c,null,null,[a]).length>0}}}(),function(){var a=c.createElement("div");a.innerHTML="
          ";if(!!a.getElementsByClassName&&a.getElementsByClassName("e").length!==0){a.lastChild.className="e";if(a.getElementsByClassName("e").length===1)return;o.order.splice(1,0,"CLASS"),o.find.CLASS=function(a,b,c){if(typeof b.getElementsByClassName!="undefined"&&!c)return b.getElementsByClassName(a[1])},a=null}}(),c.documentElement.contains?m.contains=function(a,b){return a!==b&&(a.contains?a.contains(b):!0)}:c.documentElement.compareDocumentPosition?m.contains=function(a,b){return!!(a.compareDocumentPosition(b)&16)}:m.contains=function(){return!1},m.isXML=function(a){var b=(a?a.ownerDocument||a:0).documentElement;return b?b.nodeName!=="HTML":!1};var y=function(a,b,c){var d,e=[],f="",g=b.nodeType?[b]:b;while(d=o.match.PSEUDO.exec(a))f+=d[0],a=a.replace(o.match.PSEUDO,"");a=o.relative[a]?a+"*":a;for(var h=0,i=g.length;h0)for(h=g;h=0:f.filter(a,this).length>0:this.filter(a).length>0)},closest:function(a,b){var c=[],d,e,g=this[0];if(f.isArray(a)){var h=1;while(g&&g.ownerDocument&&g!==b){for(d=0;d-1:f.find.matchesSelector(g,a)){c.push(g);break}g=g.parentNode;if(!g||!g.ownerDocument||g===b||g.nodeType===11)break}}c=c.length>1?f.unique(c):c;return this.pushStack(c,"closest",a)},index:function(a){if(!a)return this[0]&&this[0].parentNode?this.prevAll().length:-1;if(typeof a=="string")return f.inArray(this[0],f(a));return f.inArray(a.jquery?a[0]:a,this)},add:function(a,b){var c=typeof a=="string"?f(a,b):f.makeArray(a&&a.nodeType?[a]:a),d=f.merge(this.get(),c);return this.pushStack(V(c[0])||V(d[0])?d:f.unique(d))},andSelf:function(){return this.add(this.prevObject)}}),f.each({parent:function(a){var b=a.parentNode;return b&&b.nodeType!==11?b:null},parents:function(a){return f.dir(a,"parentNode")},parentsUntil:function(a,b,c){return f.dir(a,"parentNode",c)},next:function(a){return f.nth(a,2,"nextSibling")},prev:function(a){return f.nth(a,2,"previousSibling")},nextAll:function(a){return f.dir(a,"nextSibling")},prevAll:function(a){return f.dir(a,"previousSibling")},nextUntil:function(a,b,c){return f.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return f.dir(a,"previousSibling",c)},siblings:function(a){return f.sibling(a.parentNode.firstChild,a)},children:function(a){return f.sibling(a.firstChild)},contents:function(a){return f.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:f.makeArray(a.childNodes)}},function(a,b){f.fn[a]=function(c,d){var e=f.map(this,b,c),g=S.call(arguments);O.test(a)||(d=c),d&&typeof d=="string"&&(e=f.filter(d,e)),e=this.length>1&&!U[a]?f.unique(e):e,(this.length>1||Q.test(d))&&P.test(a)&&(e=e.reverse());return this.pushStack(e,a,g.join(","))}}),f.extend({filter:function(a,b,c){c&&(a=":not("+a+")");return b.length===1?f.find.matchesSelector(b[0],a)?[b[0]]:[]:f.find.matches(a,b)},dir:function(a,c,d){var e=[],g=a[c];while(g&&g.nodeType!==9&&(d===b||g.nodeType!==1||!f(g).is(d)))g.nodeType===1&&e.push(g),g=g[c];return e},nth:function(a,b,c,d){b=b||1;var e=0;for(;a;a=a[c])if(a.nodeType===1&&++e===b)break;return a},sibling:function(a,b){var c=[];for(;a;a=a.nextSibling)a.nodeType===1&&a!==b&&c.push(a);return c}});var Y="abbr article aside audio canvas datalist details figcaption figure footer header hgroup mark meter nav output progress section summary time video",Z=/ jQuery\d+="(?:\d+|null)"/g,$=/^\s+/,_=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,ba=/<([\w:]+)/,bb=/",""],legend:[1,"
          ","
          "],thead:[1,"","
          "],tr:[2,"","
          "],td:[3,"","
          "],col:[2,"","
          "],area:[1,"",""],_default:[0,"",""]},bk=X(c);bj.optgroup=bj.option,bj.tbody=bj.tfoot=bj.colgroup=bj.caption=bj.thead,bj.th=bj.td,f.support.htmlSerialize||(bj._default=[1,"div
          ","
          "]),f.fn.extend({text:function(a){if(f.isFunction(a))return this.each(function(b){var c=f(this);c.text(a.call(this,b,c.text()))});if(typeof a!="object"&&a!==b)return this.empty().append((this[0]&&this[0].ownerDocument||c).createTextNode(a));return f.text(this)},wrapAll:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapAll(a.call(this,b))});if(this[0]){var b=f(a,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstChild&&a.firstChild.nodeType===1)a=a.firstChild;return a}).append(this)}return this},wrapInner:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapInner(a.call(this,b))});return this.each(function(){var b=f(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){return this.each(function(){f(this).wrapAll(a)})},unwrap:function(){return this.parent().each(function(){f.nodeName(this,"body")||f(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.appendChild(a)})},prepend:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.insertBefore(a,this.firstChild)})},before:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this)});if(arguments.length){var a=f(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,!1,function(a){this.parentNode.insertBefore(a,this.nextSibling)});if(arguments.length){var a=this.pushStack(this,"after" -,arguments);a.push.apply(a,f(arguments[0]).toArray());return a}},remove:function(a,b){for(var c=0,d;(d=this[c])!=null;c++)if(!a||f.filter(a,[d]).length)!b&&d.nodeType===1&&(f.cleanData(d.getElementsByTagName("*")),f.cleanData([d])),d.parentNode&&d.parentNode.removeChild(d);return this},empty:function(){for(var a=0,b;(b=this[a])!=null;a++){b.nodeType===1&&f.cleanData(b.getElementsByTagName("*"));while(b.firstChild)b.removeChild(b.firstChild)}return this},clone:function(a,b){a=a==null?!1:a,b=b==null?a:b;return this.map(function(){return f.clone(this,a,b)})},html:function(a){if(a===b)return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(Z,""):null;if(typeof a=="string"&&!bd.test(a)&&(f.support.leadingWhitespace||!$.test(a))&&!bj[(ba.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(_,"<$1>");try{for(var c=0,d=this.length;c1&&l0?this.clone(!0):this).get();f(e[h])[b](j),d=d.concat(j)}return this.pushStack(d,a,e.selector)}}),f.extend({clone:function(a,b,c){var d=a.cloneNode(!0),e,g,h;if((!f.support.noCloneEvent||!f.support.noCloneChecked)&&(a.nodeType===1||a.nodeType===11)&&!f.isXMLDoc(a)){bn(a,d),e=bo(a),g=bo(d);for(h=0;e[h];++h)g[h]&&bn(e[h],g[h])}if(b){bm(a,d);if(c){e=bo(a),g=bo(d);for(h=0;e[h];++h)bm(e[h],g[h])}}e=g=null;return d},clean:function(a,b,d,e){var g;b=b||c,typeof b.createElement=="undefined"&&(b=b.ownerDocument||b[0]&&b[0].ownerDocument||c);var h=[],i;for(var j=0,k;(k=a[j])!=null;j++){typeof k=="number"&&(k+="");if(!k)continue;if(typeof k=="string")if(!bc.test(k))k=b.createTextNode(k);else{k=k.replace(_,"<$1>");var l=(ba.exec(k)||["",""])[1].toLowerCase(),m=bj[l]||bj._default,n=m[0],o=b.createElement("div");b===c?bk.appendChild(o):X(b).appendChild(o),o.innerHTML=m[1]+k+m[2];while(n--)o=o.lastChild;if(!f.support.tbody){var p=bb.test(k),q=l==="table"&&!p?o.firstChild&&o.firstChild.childNodes:m[1]===""&&!p?o.childNodes:[];for(i=q.length-1;i>=0;--i)f.nodeName(q[i],"tbody")&&!q[i].childNodes.length&&q[i].parentNode.removeChild(q[i])}!f.support.leadingWhitespace&&$.test(k)&&o.insertBefore(b.createTextNode($.exec(k)[0]),o.firstChild),k=o.childNodes}var r;if(!f.support.appendChecked)if(k[0]&&typeof (r=k.length)=="number")for(i=0;i=0)return b+"px"}}}),f.support.opacity||(f.cssHooks.opacity={get:function(a,b){return bt.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||"")?parseFloat(RegExp.$1)/100+"":b?"1":""},set:function(a,b){var c=a.style,d=a.currentStyle,e=f.isNumeric(b)?"alpha(opacity="+b*100+")":"",g=d&&d.filter||c.filter||"";c.zoom=1;if(b>=1&&f.trim(g.replace(bs,""))===""){c.removeAttribute("filter");if(d&&!d.filter)return}c.filter=bs.test(g)?g.replace(bs,e):g+" "+e}}),f(function(){f.support.reliableMarginRight||(f.cssHooks.marginRight={get:function(a,b){var c;f.swap(a,{display:"inline-block"},function(){b?c=bB(a,"margin-right","marginRight"):c=a.style.marginRight});return c}})}),c.defaultView&&c.defaultView.getComputedStyle&&(bC=function(a,c){var d,e,g;c=c.replace(bu,"-$1").toLowerCase();if(!(e=a.ownerDocument.defaultView))return b;if(g=e.getComputedStyle(a,null))d=g.getPropertyValue(c),d===""&&!f.contains(a.ownerDocument.documentElement,a)&&(d=f.style(a,c));return d}),c.documentElement.currentStyle&&(bD=function(a,b){var c,d,e,f=a.currentStyle&&a.currentStyle[b],g=a.style;f===null&&g&&(e=g[b])&&(f=e),!bv.test(f)&&bw.test(f)&&(c=g.left,d=a.runtimeStyle&&a.runtimeStyle.left,d&&(a.runtimeStyle.left=a.currentStyle.left),g.left=b==="fontSize"?"1em":f||0,f=g.pixelLeft+"px",g.left=c,d&&(a.runtimeStyle.left=d));return f===""?"auto":f}),bB=bC||bD,f.expr&&f.expr.filters&&(f.expr.filters.hidden=function(a){var b=a.offsetWidth,c=a.offsetHeight;return b===0&&c===0||!f.support.reliableHiddenOffsets&&(a.style&&a.style.display||f.css(a,"display"))==="none"},f.expr.filters.visible=function(a){return!f.expr.filters.hidden(a)});var bF=/%20/g,bG=/\[\]$/,bH=/\r?\n/g,bI=/#.*$/,bJ=/^(.*?):[ \t]*([^\r\n]*)\r?$/mg,bK=/^(?:color|date|datetime|datetime-local|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,bL=/^(?:about|app|app\-storage|.+\-extension|file|res|widget):$/,bM=/^(?:GET|HEAD)$/,bN=/^\/\//,bO=/\?/,bP=/)<[^<]*)*<\/script>/gi,bQ=/^(?:select|textarea)/i,bR=/\s+/,bS=/([?&])_=[^&]*/,bT=/^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+))?)?/,bU=f.fn.load,bV={},bW={},bX,bY,bZ=["*/"]+["*"];try{bX=e.href}catch(b$){bX=c.createElement("a"),bX.href="",bX=bX.href}bY=bT.exec(bX.toLowerCase())||[],f.fn.extend({load:function(a,c,d){if(typeof a!="string"&&bU)return bU.apply(this,arguments);if(!this.length)return this;var e=a.indexOf(" ");if(e>=0){var g=a.slice(e,a.length);a=a.slice(0,e)}var h="GET";c&&(f.isFunction(c)?(d=c,c=b):typeof c=="object"&&(c=f.param(c,f.ajaxSettings.traditional),h="POST"));var i=this;f.ajax({url:a,type:h,dataType:"html",data:c,complete:function(a,b,c){c=a.responseText,a.isResolved()&&(a.done(function(a){c=a}),i.html(g?f("
          ").append(c.replace(bP,"")).find(g):c)),d&&i.each(d,[c,b,a])}});return this},serialize:function(){return f.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?f.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||bQ.test(this.nodeName)||bK.test(this.type))}).map(function(a,b){var c=f(this).val();return c==null?null:f.isArray(c)?f.map(c,function(a,c){return{name:b.name,value:a.replace(bH,"\r\n")}}):{name:b.name,value:c.replace(bH,"\r\n")}}).get()}}),f.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(a,b){f.fn[b]=function(a){return this.bind(b,a)}}),f.each(["get","post"],function(a,c){f[c]=function(a,d,e,g){f.isFunction(d)&&(g=g||e,e=d,d=b);return f.ajax({type:c,url:a,data:d,success:e,dataType:g})}}),f.extend({getScript:function(a,c){return f.get(a,b,c,"script")},getJSON:function(a,b,c){return f.get(a,b,c,"json")},ajaxSetup:function(a,b){b?cb(a,f.ajaxSettings):(b=a,a=f.ajaxSettings),cb(a,b);return a},ajaxSettings:{url:bX,isLocal:bL.test(bY[1]),global:!0,type:"GET",contentType:"application/x-www-form-urlencoded",processData:!0,async:!0,accepts:{xml:"application/xml, text/xml",html:"text/html",text:"text/plain",json:"application/json, text/javascript","*":bZ},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText"},converters:{"* text":a.String,"text html":!0,"text json":f.parseJSON,"text xml":f.parseXML},flatOptions:{context:!0,url:!0}},ajaxPrefilter:b_(bV),ajaxTransport:b_(bW),ajax:function(a,c){function w(a,c,l,m){if(s!==2){s=2,q&&clearTimeout(q),p=b,n=m||"",v.readyState=a>0?4:0;var o,r,u,w=c,x=l?cd(d,v,l):b,y,z;if(a>=200&&a<300||a===304){if(d.ifModified){if(y=v.getResponseHeader("Last-Modified"))f.lastModified[k]=y;if(z=v.getResponseHeader("Etag"))f.etag[k]=z}if(a===304)w="notmodified",o=!0;else try{r=ce(d,x),w="success",o=!0}catch(A){w="parsererror",u=A}}else{u=w;if(!w||a)w="error",a<0&&(a=0)}v.status=a,v.statusText=""+(c||w),o?h.resolveWith(e,[r,w,v]):h.rejectWith(e,[v,w,u]),v.statusCode(j),j=b,t&&g.trigger("ajax"+(o?"Success":"Error"),[v,d,o?r:u]),i.fireWith(e,[v,w]),t&&(g.trigger("ajaxComplete",[v,d]),--f.active||f.event.trigger("ajaxStop"))}}typeof a=="object"&&(c=a,a=b),c=c||{};var d=f.ajaxSetup({},c),e=d.context||d,g=e!==d&&(e.nodeType||e instanceof f)?f(e):f.event,h=f.Deferred(),i=f.Callbacks("once memory"),j=d.statusCode||{},k,l={},m={},n,o,p,q,r,s=0,t,u,v={readyState:0,setRequestHeader:function(a,b){if(!s){var c=a.toLowerCase();a=m[c]=m[c]||a,l[a]=b}return this},getAllResponseHeaders:function(){return s===2?n:null},getResponseHeader:function(a){var c;if(s===2){if(!o){o={};while(c=bJ.exec(n))o[c[1].toLowerCase()]=c[2]}c=o[a.toLowerCase()]}return c===b?null:c},overrideMimeType:function(a){s||(d.mimeType=a);return this},abort:function(a){a=a||"abort",p&&p.abort(a),w(0,a);return this}};h.promise(v),v.success=v.done,v.error=v.fail,v.complete=i.add,v.statusCode=function(a){if(a){var b;if(s<2)for(b in a)j[b]=[j[b],a[b]];else b=a[v.status],v.then(b,b)}return this},d.url=((a||d.url)+"").replace(bI,"").replace(bN,bY[1]+"//"),d.dataTypes=f.trim(d.dataType||"*").toLowerCase().split(bR),d.crossDomain==null&&(r=bT.exec(d.url.toLowerCase()),d.crossDomain=!(!r||r[1]==bY[1]&&r[2]==bY[2]&&(r[3]||(r[1]==="http:"?80:443))==(bY[3]||(bY[1]==="http:"?80:443)))),d.data&&d.processData&&typeof d.data!="string"&&(d.data=f.param(d.data,d.traditional)),ca(bV,d,c,v);if(s===2)return!1;t=d.global,d.type=d.type.toUpperCase(),d.hasContent=!bM.test(d.type),t&&f.active++===0&&f.event.trigger("ajaxStart");if(!d.hasContent){d.data&&(d.url+=(bO.test(d.url)?"&":"?")+d.data,delete d.data),k=d.url;if(d.cache===!1){var x=f.now(),y=d.url.replace(bS,"$1_="+x);d.url=y+(y===d.url?(bO.test(d.url)?"&":"?")+"_="+x:"")}}(d.data&&d.hasContent&&d.contentType!==!1||c.contentType)&&v.setRequestHeader("Content-Type",d.contentType),d.ifModified&&(k=k||d.url,f.lastModified[k]&&v.setRequestHeader("If-Modified-Since",f.lastModified[k]),f.etag[k]&&v.setRequestHeader("If-None-Match",f.etag[k])),v.setRequestHeader("Accept",d.dataTypes[0]&&d.accepts[d.dataTypes[0]]?d.accepts[d.dataTypes[0]]+(d.dataTypes[0]!=="*"?", "+bZ+"; q=0.01":""):d.accepts["*"]);for(u in d.headers)v.setRequestHeader(u,d.headers[u]);if(d.beforeSend&&(d.beforeSend.call(e,v,d)===!1||s===2)){v.abort();return!1}for(u in{success:1,error:1,complete:1})v[u](d[u]);p=ca(bW,d,c,v);if(!p)w(-1,"No Transport");else{v.readyState=1,t&&g.trigger("ajaxSend",[v,d]),d.async&&d.timeout>0&&(q=setTimeout(function(){v.abort("timeout")},d.timeout));try{s=1,p.send(l,w)}catch(z){s<2?w(-1,z):f.error(z)}}return v},param:function(a,c){var d=[],e=function(a,b){b=f.isFunction(b)?b():b,d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};c===b&&(c=f.ajaxSettings.traditional);if(f.isArray(a)||a.jquery&&!f.isPlainObject(a))f.each(a,function(){e(this.name,this.value)});else for(var g in a)cc(g,a[g],c,e);return d.join("&").replace(bF,"+")}}),f.extend({active:0,lastModified:{},etag:{}});var cf=f.now(),cg=/(\=)\?(&|$)|\?\?/i;f.ajaxSetup({jsonp:"callback",jsonpCallback:function(){return f.expando+"_"+cf++}}),f.ajaxPrefilter("json jsonp",function(b,c,d){var e=b.contentType==="application/x-www-form-urlencoded"&&typeof b.data=="string";if(b.dataTypes[0]==="jsonp"||b.jsonp!==!1&&(cg.test(b.url)||e&&cg.test(b.data))){var g,h=b.jsonpCallback=f.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,i=a[h],j=b.url,k=b.data,l="$1"+h+"$2";b.jsonp!==!1&&(j=j.replace(cg,l),b.url===j&&(e&&(k=k.replace(cg,l)),b.data===k&&(j+=(/\?/.test(j)?"&":"?")+b.jsonp+"="+h))),b.url=j,b.data=k,a[h]=function(a){g=[a]},d.always(function(){a[h]=i,g&&f.isFunction(i)&&a[h](g[0])}),b.converters["script json"]=function(){g||f.error(h+" was not called");return g[0]},b.dataTypes[0]="json";return"script"}}),f.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/javascript|ecmascript/},converters:{"text script":function(a){f.globalEval(a);return a}}}),f.ajaxPrefilter("script",function(a){a.cache===b&&(a.cache=!1),a.crossDomain&&(a.type="GET",a.global=!1)}),f.ajaxTransport("script",function(a){if(a.crossDomain){var d,e=c.head||c.getElementsByTagName("head")[0]||c.documentElement;return{send:function(f,g){d=c.createElement("script"),d.async="async",a.scriptCharset&&(d.charset=a.scriptCharset),d.src=a.url,d.onload=d.onreadystatechange=function(a,c){if(c||!d.readyState||/loaded|complete/.test(d.readyState))d.onload=d.onreadystatechange=null,e&&d.parentNode&&e.removeChild(d),d=b,c||g(200,"success")},e.insertBefore(d,e.firstChild)},abort:function(){d&&d.onload(0,1)}}}});var ch=a.ActiveXObject?function(){for(var a in cj)cj[a](0,1)}:!1,ci=0,cj;f.ajaxSettings.xhr=a.ActiveXObject?function(){return!this.isLocal&&ck()||cl()}:ck,function(a){f.extend(f.support,{ajax:!!a,cors:!!a&&"withCredentials"in a})}(f.ajaxSettings.xhr()),f.support.ajax&&f.ajaxTransport(function(c){if(!c.crossDomain||f.support.cors){var d;return{send:function(e,g){var h=c.xhr(),i,j;c.username?h.open(c.type,c.url,c.async,c.username,c.password):h.open(c.type,c.url,c.async);if(c.xhrFields)for(j in c.xhrFields)h[j]=c.xhrFields[j];c.mimeType&&h.overrideMimeType&&h.overrideMimeType(c.mimeType),!c.crossDomain&&!e["X-Requested-With"]&&(e["X-Requested-With"]="XMLHttpRequest");try{for(j in e)h.setRequestHeader(j,e[j])}catch(k){}h.send(c.hasContent&&c.data||null),d=function(a,e){var j,k,l,m,n;try{if(d&&(e||h.readyState===4)){d=b,i&&(h.onreadystatechange=f.noop,ch&&delete cj[i]);if(e)h.readyState!==4&&h.abort();else{j=h.status,l=h.getAllResponseHeaders(),m={},n=h.responseXML,n&&n.documentElement&&(m.xml=n),m.text=h.responseText;try{k=h.statusText}catch(o){k=""}!j&&c.isLocal&&!c.crossDomain?j=m.text?200:404:j===1223&&(j=204)}}}catch(p){e||g(-1,p)}m&&g(j,k,m,l)},!c.async||h.readyState===4?d():(i=++ci,ch&&(cj||(cj={},f(a).unload(ch)),cj[i]=d),h.onreadystatechange=d)},abort:function(){d&&d(0,1)}}}});var cm={},cn,co,cp=/^(?:toggle|show|hide)$/,cq=/^([+\-]=)?([\d+.\-]+)([a-z%]*)$/i,cr,cs=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]],ct;f.fn.extend({show:function(a,b,c){var d,e;if(a||a===0)return this.animate(cw("show",3),a,b,c);for(var g=0,h=this.length;g=i.duration+this.startTime){this.now=this.end,this.pos=this.state=1,this.update(),i.animatedProperties[this.prop]=!0;for(b in i.animatedProperties)i.animatedProperties[b]!==!0&&(g=!1);if(g){i.overflow!=null&&!f.support.shrinkWrapBlocks&&f.each(["","X","Y"],function(a,b){h.style["overflow"+b]=i.overflow[a]}),i.hide&&f(h).hide();if(i.hide||i.show)for(b in i.animatedProperties)f.style(h,b,i.orig[b]),f.removeData(h,"fxshow"+b,!0),f.removeData(h,"toggle"+b,!0);d=i.complete,d&&(i.complete=!1,d.call(h))}return!1}i.duration==Infinity?this.now=e:(c=e-this.startTime,this.state=c/i.duration,this.pos=f.easing[i.animatedProperties[this.prop]](this.state,c,0,1,i.duration),this.now=this.start+(this.end-this.start)*this.pos),this.update();return!0}},f.extend(f.fx,{tick:function(){var a,b=f.timers,c=0;for(;c-1,k={},l={},m,n;j?(l=e.position(),m=l.top,n=l.left):(m=parseFloat(h)||0,n=parseFloat(i)||0),f.isFunction(b)&&(b=b.call(a,c,g)),b.top!=null&&(k.top=b.top-g.top+m),b.left!=null&&(k.left=b.left-g.left+n),"using"in b?b.using.call(a,k):e.css(k)}},f.fn.extend({position:function(){if(!this[0])return null;var a=this[0],b=this.offsetParent(),c=this.offset(),d=cz.test(b[0].nodeName)?{top:0,left:0}:b.offset();c.top-=parseFloat(f.css(a,"marginTop"))||0,c.left-=parseFloat(f.css(a,"marginLeft"))||0,d.top+=parseFloat(f.css(b[0],"borderTopWidth"))||0,d.left+=parseFloat(f.css(b[0],"borderLeftWidth"))||0;return{top:c.top-d.top,left:c.left-d.left}},offsetParent:function(){return this.map(function(){var a=this.offsetParent||c.body;while(a&&!cz.test(a.nodeName)&&f.css(a,"position")==="static")a=a.offsetParent;return a})}}),f.each(["Left","Top"],function(a,c){var d="scroll"+c;f.fn[d]=function(c){var e,g;if(c===b){e=this[0];if(!e)return null;g=cA(e);return g?"pageXOffset"in g?g[a?"pageYOffset":"pageXOffset"]:f.support.boxModel&&g.document.documentElement[d]||g.document.body[d]:e[d]}return this.each(function(){g=cA(this),g?g.scrollTo(a?f(g).scrollLeft():c,a?c:f(g).scrollTop()):this[d]=c})}}),f.each(["Height","Width"],function(a,c){var d=c.toLowerCase();f.fn["inner"+c]=function(){var a=this[0];return a?a.style?parseFloat(f.css(a,d,"padding")):this[d]():null},f.fn["outer"+c]=function(a){var b=this[0];return b?b.style?parseFloat(f.css(b,d,a?"margin":"border")):this[d]():null},f.fn[d]=function(a){var e=this[0];if(!e)return a==null?null:this;if(f.isFunction(a))return this.each(function(b){var c=f(this);c[d](a.call(this,b,c[d]()))});if(f.isWindow(e)){var g=e.document.documentElement["client"+c],h=e.document.body;return e.document.compatMode==="CSS1Compat"&&g||h&&h["client"+c]||g}if(e.nodeType===9)return Math.max(e.documentElement["client"+c],e.body["scroll"+c],e.documentElement["scroll"+c],e.body["offset"+c],e.documentElement["offset"+c]);if(a===b){var i=f.css(e,d),j=parseFloat(i);return f.isNumeric(j)?j:i}return this.css(d,typeof a=="string"?a:a+"px")}}),a.jQuery=a.$=f})(window); \ No newline at end of file +/*! jQuery v1.10.2 | (c) 2005, 2013 jQuery Foundation, Inc. | jquery.org/license +*/ +(function(e,t){var n,r,i=typeof t,o=e.location,a=e.document,s=a.documentElement,l=e.jQuery,u=e.$,c={},p=[],f="1.10.2",d=p.concat,h=p.push,g=p.slice,m=p.indexOf,y=c.toString,v=c.hasOwnProperty,b=f.trim,x=function(e,t){return new x.fn.init(e,t,r)},w=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,T=/\S+/g,C=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,N=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,k=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,E=/^[\],:{}\s]*$/,S=/(?:^|:|,)(?:\s*\[)+/g,A=/\\(?:["\\\/bfnrt]|u[\da-fA-F]{4})/g,j=/"[^"\\\r\n]*"|true|false|null|-?(?:\d+\.|)\d+(?:[eE][+-]?\d+|)/g,D=/^-ms-/,L=/-([\da-z])/gi,H=function(e,t){return t.toUpperCase()},q=function(e){(a.addEventListener||"load"===e.type||"complete"===a.readyState)&&(_(),x.ready())},_=function(){a.addEventListener?(a.removeEventListener("DOMContentLoaded",q,!1),e.removeEventListener("load",q,!1)):(a.detachEvent("onreadystatechange",q),e.detachEvent("onload",q))};x.fn=x.prototype={jquery:f,constructor:x,init:function(e,n,r){var i,o;if(!e)return this;if("string"==typeof e){if(i="<"===e.charAt(0)&&">"===e.charAt(e.length-1)&&e.length>=3?[null,e,null]:N.exec(e),!i||!i[1]&&n)return!n||n.jquery?(n||r).find(e):this.constructor(n).find(e);if(i[1]){if(n=n instanceof x?n[0]:n,x.merge(this,x.parseHTML(i[1],n&&n.nodeType?n.ownerDocument||n:a,!0)),k.test(i[1])&&x.isPlainObject(n))for(i in n)x.isFunction(this[i])?this[i](n[i]):this.attr(i,n[i]);return this}if(o=a.getElementById(i[2]),o&&o.parentNode){if(o.id!==i[2])return r.find(e);this.length=1,this[0]=o}return this.context=a,this.selector=e,this}return e.nodeType?(this.context=this[0]=e,this.length=1,this):x.isFunction(e)?r.ready(e):(e.selector!==t&&(this.selector=e.selector,this.context=e.context),x.makeArray(e,this))},selector:"",length:0,toArray:function(){return g.call(this)},get:function(e){return null==e?this.toArray():0>e?this[this.length+e]:this[e]},pushStack:function(e){var t=x.merge(this.constructor(),e);return t.prevObject=this,t.context=this.context,t},each:function(e,t){return x.each(this,e,t)},ready:function(e){return x.ready.promise().done(e),this},slice:function(){return this.pushStack(g.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(e){var t=this.length,n=+e+(0>e?t:0);return this.pushStack(n>=0&&t>n?[this[n]]:[])},map:function(e){return this.pushStack(x.map(this,function(t,n){return e.call(t,n,t)}))},end:function(){return this.prevObject||this.constructor(null)},push:h,sort:[].sort,splice:[].splice},x.fn.init.prototype=x.fn,x.extend=x.fn.extend=function(){var e,n,r,i,o,a,s=arguments[0]||{},l=1,u=arguments.length,c=!1;for("boolean"==typeof s&&(c=s,s=arguments[1]||{},l=2),"object"==typeof s||x.isFunction(s)||(s={}),u===l&&(s=this,--l);u>l;l++)if(null!=(o=arguments[l]))for(i in o)e=s[i],r=o[i],s!==r&&(c&&r&&(x.isPlainObject(r)||(n=x.isArray(r)))?(n?(n=!1,a=e&&x.isArray(e)?e:[]):a=e&&x.isPlainObject(e)?e:{},s[i]=x.extend(c,a,r)):r!==t&&(s[i]=r));return s},x.extend({expando:"jQuery"+(f+Math.random()).replace(/\D/g,""),noConflict:function(t){return e.$===x&&(e.$=u),t&&e.jQuery===x&&(e.jQuery=l),x},isReady:!1,readyWait:1,holdReady:function(e){e?x.readyWait++:x.ready(!0)},ready:function(e){if(e===!0?!--x.readyWait:!x.isReady){if(!a.body)return setTimeout(x.ready);x.isReady=!0,e!==!0&&--x.readyWait>0||(n.resolveWith(a,[x]),x.fn.trigger&&x(a).trigger("ready").off("ready"))}},isFunction:function(e){return"function"===x.type(e)},isArray:Array.isArray||function(e){return"array"===x.type(e)},isWindow:function(e){return null!=e&&e==e.window},isNumeric:function(e){return!isNaN(parseFloat(e))&&isFinite(e)},type:function(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?c[y.call(e)]||"object":typeof e},isPlainObject:function(e){var n;if(!e||"object"!==x.type(e)||e.nodeType||x.isWindow(e))return!1;try{if(e.constructor&&!v.call(e,"constructor")&&!v.call(e.constructor.prototype,"isPrototypeOf"))return!1}catch(r){return!1}if(x.support.ownLast)for(n in e)return v.call(e,n);for(n in e);return n===t||v.call(e,n)},isEmptyObject:function(e){var t;for(t in e)return!1;return!0},error:function(e){throw Error(e)},parseHTML:function(e,t,n){if(!e||"string"!=typeof e)return null;"boolean"==typeof t&&(n=t,t=!1),t=t||a;var r=k.exec(e),i=!n&&[];return r?[t.createElement(r[1])]:(r=x.buildFragment([e],t,i),i&&x(i).remove(),x.merge([],r.childNodes))},parseJSON:function(n){return e.JSON&&e.JSON.parse?e.JSON.parse(n):null===n?n:"string"==typeof n&&(n=x.trim(n),n&&E.test(n.replace(A,"@").replace(j,"]").replace(S,"")))?Function("return "+n)():(x.error("Invalid JSON: "+n),t)},parseXML:function(n){var r,i;if(!n||"string"!=typeof n)return null;try{e.DOMParser?(i=new DOMParser,r=i.parseFromString(n,"text/xml")):(r=new ActiveXObject("Microsoft.XMLDOM"),r.async="false",r.loadXML(n))}catch(o){r=t}return r&&r.documentElement&&!r.getElementsByTagName("parsererror").length||x.error("Invalid XML: "+n),r},noop:function(){},globalEval:function(t){t&&x.trim(t)&&(e.execScript||function(t){e.eval.call(e,t)})(t)},camelCase:function(e){return e.replace(D,"ms-").replace(L,H)},nodeName:function(e,t){return e.nodeName&&e.nodeName.toLowerCase()===t.toLowerCase()},each:function(e,t,n){var r,i=0,o=e.length,a=M(e);if(n){if(a){for(;o>i;i++)if(r=t.apply(e[i],n),r===!1)break}else for(i in e)if(r=t.apply(e[i],n),r===!1)break}else if(a){for(;o>i;i++)if(r=t.call(e[i],i,e[i]),r===!1)break}else for(i in e)if(r=t.call(e[i],i,e[i]),r===!1)break;return e},trim:b&&!b.call("\ufeff\u00a0")?function(e){return null==e?"":b.call(e)}:function(e){return null==e?"":(e+"").replace(C,"")},makeArray:function(e,t){var n=t||[];return null!=e&&(M(Object(e))?x.merge(n,"string"==typeof e?[e]:e):h.call(n,e)),n},inArray:function(e,t,n){var r;if(t){if(m)return m.call(t,e,n);for(r=t.length,n=n?0>n?Math.max(0,r+n):n:0;r>n;n++)if(n in t&&t[n]===e)return n}return-1},merge:function(e,n){var r=n.length,i=e.length,o=0;if("number"==typeof r)for(;r>o;o++)e[i++]=n[o];else while(n[o]!==t)e[i++]=n[o++];return e.length=i,e},grep:function(e,t,n){var r,i=[],o=0,a=e.length;for(n=!!n;a>o;o++)r=!!t(e[o],o),n!==r&&i.push(e[o]);return i},map:function(e,t,n){var r,i=0,o=e.length,a=M(e),s=[];if(a)for(;o>i;i++)r=t(e[i],i,n),null!=r&&(s[s.length]=r);else for(i in e)r=t(e[i],i,n),null!=r&&(s[s.length]=r);return d.apply([],s)},guid:1,proxy:function(e,n){var r,i,o;return"string"==typeof n&&(o=e[n],n=e,e=o),x.isFunction(e)?(r=g.call(arguments,2),i=function(){return e.apply(n||this,r.concat(g.call(arguments)))},i.guid=e.guid=e.guid||x.guid++,i):t},access:function(e,n,r,i,o,a,s){var l=0,u=e.length,c=null==r;if("object"===x.type(r)){o=!0;for(l in r)x.access(e,n,l,r[l],!0,a,s)}else if(i!==t&&(o=!0,x.isFunction(i)||(s=!0),c&&(s?(n.call(e,i),n=null):(c=n,n=function(e,t,n){return c.call(x(e),n)})),n))for(;u>l;l++)n(e[l],r,s?i:i.call(e[l],l,n(e[l],r)));return o?e:c?n.call(e):u?n(e[0],r):a},now:function(){return(new Date).getTime()},swap:function(e,t,n,r){var i,o,a={};for(o in t)a[o]=e.style[o],e.style[o]=t[o];i=n.apply(e,r||[]);for(o in t)e.style[o]=a[o];return i}}),x.ready.promise=function(t){if(!n)if(n=x.Deferred(),"complete"===a.readyState)setTimeout(x.ready);else if(a.addEventListener)a.addEventListener("DOMContentLoaded",q,!1),e.addEventListener("load",q,!1);else{a.attachEvent("onreadystatechange",q),e.attachEvent("onload",q);var r=!1;try{r=null==e.frameElement&&a.documentElement}catch(i){}r&&r.doScroll&&function o(){if(!x.isReady){try{r.doScroll("left")}catch(e){return setTimeout(o,50)}_(),x.ready()}}()}return n.promise(t)},x.each("Boolean Number String Function Array Date RegExp Object Error".split(" "),function(e,t){c["[object "+t+"]"]=t.toLowerCase()});function M(e){var t=e.length,n=x.type(e);return x.isWindow(e)?!1:1===e.nodeType&&t?!0:"array"===n||"function"!==n&&(0===t||"number"==typeof t&&t>0&&t-1 in e)}r=x(a),function(e,t){var n,r,i,o,a,s,l,u,c,p,f,d,h,g,m,y,v,b="sizzle"+-new Date,w=e.document,T=0,C=0,N=st(),k=st(),E=st(),S=!1,A=function(e,t){return e===t?(S=!0,0):0},j=typeof t,D=1<<31,L={}.hasOwnProperty,H=[],q=H.pop,_=H.push,M=H.push,O=H.slice,F=H.indexOf||function(e){var t=0,n=this.length;for(;n>t;t++)if(this[t]===e)return t;return-1},B="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",P="[\\x20\\t\\r\\n\\f]",R="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",W=R.replace("w","w#"),$="\\["+P+"*("+R+")"+P+"*(?:([*^$|!~]?=)"+P+"*(?:(['\"])((?:\\\\.|[^\\\\])*?)\\3|("+W+")|)|)"+P+"*\\]",I=":("+R+")(?:\\(((['\"])((?:\\\\.|[^\\\\])*?)\\3|((?:\\\\.|[^\\\\()[\\]]|"+$.replace(3,8)+")*)|.*)\\)|)",z=RegExp("^"+P+"+|((?:^|[^\\\\])(?:\\\\.)*)"+P+"+$","g"),X=RegExp("^"+P+"*,"+P+"*"),U=RegExp("^"+P+"*([>+~]|"+P+")"+P+"*"),V=RegExp(P+"*[+~]"),Y=RegExp("="+P+"*([^\\]'\"]*)"+P+"*\\]","g"),J=RegExp(I),G=RegExp("^"+W+"$"),Q={ID:RegExp("^#("+R+")"),CLASS:RegExp("^\\.("+R+")"),TAG:RegExp("^("+R.replace("w","w*")+")"),ATTR:RegExp("^"+$),PSEUDO:RegExp("^"+I),CHILD:RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+P+"*(even|odd|(([+-]|)(\\d*)n|)"+P+"*(?:([+-]|)"+P+"*(\\d+)|))"+P+"*\\)|)","i"),bool:RegExp("^(?:"+B+")$","i"),needsContext:RegExp("^"+P+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+P+"*((?:-\\d)?\\d*)"+P+"*\\)|)(?=[^-]|$)","i")},K=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,et=/^(?:input|select|textarea|button)$/i,tt=/^h\d$/i,nt=/'|\\/g,rt=RegExp("\\\\([\\da-f]{1,6}"+P+"?|("+P+")|.)","ig"),it=function(e,t,n){var r="0x"+t-65536;return r!==r||n?t:0>r?String.fromCharCode(r+65536):String.fromCharCode(55296|r>>10,56320|1023&r)};try{M.apply(H=O.call(w.childNodes),w.childNodes),H[w.childNodes.length].nodeType}catch(ot){M={apply:H.length?function(e,t){_.apply(e,O.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function at(e,t,n,i){var o,a,s,l,u,c,d,m,y,x;if((t?t.ownerDocument||t:w)!==f&&p(t),t=t||f,n=n||[],!e||"string"!=typeof e)return n;if(1!==(l=t.nodeType)&&9!==l)return[];if(h&&!i){if(o=Z.exec(e))if(s=o[1]){if(9===l){if(a=t.getElementById(s),!a||!a.parentNode)return n;if(a.id===s)return n.push(a),n}else if(t.ownerDocument&&(a=t.ownerDocument.getElementById(s))&&v(t,a)&&a.id===s)return n.push(a),n}else{if(o[2])return M.apply(n,t.getElementsByTagName(e)),n;if((s=o[3])&&r.getElementsByClassName&&t.getElementsByClassName)return M.apply(n,t.getElementsByClassName(s)),n}if(r.qsa&&(!g||!g.test(e))){if(m=d=b,y=t,x=9===l&&e,1===l&&"object"!==t.nodeName.toLowerCase()){c=mt(e),(d=t.getAttribute("id"))?m=d.replace(nt,"\\$&"):t.setAttribute("id",m),m="[id='"+m+"'] ",u=c.length;while(u--)c[u]=m+yt(c[u]);y=V.test(e)&&t.parentNode||t,x=c.join(",")}if(x)try{return M.apply(n,y.querySelectorAll(x)),n}catch(T){}finally{d||t.removeAttribute("id")}}}return kt(e.replace(z,"$1"),t,n,i)}function st(){var e=[];function t(n,r){return e.push(n+=" ")>o.cacheLength&&delete t[e.shift()],t[n]=r}return t}function lt(e){return e[b]=!0,e}function ut(e){var t=f.createElement("div");try{return!!e(t)}catch(n){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function ct(e,t){var n=e.split("|"),r=e.length;while(r--)o.attrHandle[n[r]]=t}function pt(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&(~t.sourceIndex||D)-(~e.sourceIndex||D);if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function ft(e){return function(t){var n=t.nodeName.toLowerCase();return"input"===n&&t.type===e}}function dt(e){return function(t){var n=t.nodeName.toLowerCase();return("input"===n||"button"===n)&&t.type===e}}function ht(e){return lt(function(t){return t=+t,lt(function(n,r){var i,o=e([],n.length,t),a=o.length;while(a--)n[i=o[a]]&&(n[i]=!(r[i]=n[i]))})})}s=at.isXML=function(e){var t=e&&(e.ownerDocument||e).documentElement;return t?"HTML"!==t.nodeName:!1},r=at.support={},p=at.setDocument=function(e){var n=e?e.ownerDocument||e:w,i=n.defaultView;return n!==f&&9===n.nodeType&&n.documentElement?(f=n,d=n.documentElement,h=!s(n),i&&i.attachEvent&&i!==i.top&&i.attachEvent("onbeforeunload",function(){p()}),r.attributes=ut(function(e){return e.className="i",!e.getAttribute("className")}),r.getElementsByTagName=ut(function(e){return e.appendChild(n.createComment("")),!e.getElementsByTagName("*").length}),r.getElementsByClassName=ut(function(e){return e.innerHTML="
          ",e.firstChild.className="i",2===e.getElementsByClassName("i").length}),r.getById=ut(function(e){return d.appendChild(e).id=b,!n.getElementsByName||!n.getElementsByName(b).length}),r.getById?(o.find.ID=function(e,t){if(typeof t.getElementById!==j&&h){var n=t.getElementById(e);return n&&n.parentNode?[n]:[]}},o.filter.ID=function(e){var t=e.replace(rt,it);return function(e){return e.getAttribute("id")===t}}):(delete o.find.ID,o.filter.ID=function(e){var t=e.replace(rt,it);return function(e){var n=typeof e.getAttributeNode!==j&&e.getAttributeNode("id");return n&&n.value===t}}),o.find.TAG=r.getElementsByTagName?function(e,n){return typeof n.getElementsByTagName!==j?n.getElementsByTagName(e):t}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},o.find.CLASS=r.getElementsByClassName&&function(e,n){return typeof n.getElementsByClassName!==j&&h?n.getElementsByClassName(e):t},m=[],g=[],(r.qsa=K.test(n.querySelectorAll))&&(ut(function(e){e.innerHTML="",e.querySelectorAll("[selected]").length||g.push("\\["+P+"*(?:value|"+B+")"),e.querySelectorAll(":checked").length||g.push(":checked")}),ut(function(e){var t=n.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("t",""),e.querySelectorAll("[t^='']").length&&g.push("[*^$]="+P+"*(?:''|\"\")"),e.querySelectorAll(":enabled").length||g.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),g.push(",.*:")})),(r.matchesSelector=K.test(y=d.webkitMatchesSelector||d.mozMatchesSelector||d.oMatchesSelector||d.msMatchesSelector))&&ut(function(e){r.disconnectedMatch=y.call(e,"div"),y.call(e,"[s!='']:x"),m.push("!=",I)}),g=g.length&&RegExp(g.join("|")),m=m.length&&RegExp(m.join("|")),v=K.test(d.contains)||d.compareDocumentPosition?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},A=d.compareDocumentPosition?function(e,t){if(e===t)return S=!0,0;var i=t.compareDocumentPosition&&e.compareDocumentPosition&&e.compareDocumentPosition(t);return i?1&i||!r.sortDetached&&t.compareDocumentPosition(e)===i?e===n||v(w,e)?-1:t===n||v(w,t)?1:c?F.call(c,e)-F.call(c,t):0:4&i?-1:1:e.compareDocumentPosition?-1:1}:function(e,t){var r,i=0,o=e.parentNode,a=t.parentNode,s=[e],l=[t];if(e===t)return S=!0,0;if(!o||!a)return e===n?-1:t===n?1:o?-1:a?1:c?F.call(c,e)-F.call(c,t):0;if(o===a)return pt(e,t);r=e;while(r=r.parentNode)s.unshift(r);r=t;while(r=r.parentNode)l.unshift(r);while(s[i]===l[i])i++;return i?pt(s[i],l[i]):s[i]===w?-1:l[i]===w?1:0},n):f},at.matches=function(e,t){return at(e,null,null,t)},at.matchesSelector=function(e,t){if((e.ownerDocument||e)!==f&&p(e),t=t.replace(Y,"='$1']"),!(!r.matchesSelector||!h||m&&m.test(t)||g&&g.test(t)))try{var n=y.call(e,t);if(n||r.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(i){}return at(t,f,null,[e]).length>0},at.contains=function(e,t){return(e.ownerDocument||e)!==f&&p(e),v(e,t)},at.attr=function(e,n){(e.ownerDocument||e)!==f&&p(e);var i=o.attrHandle[n.toLowerCase()],a=i&&L.call(o.attrHandle,n.toLowerCase())?i(e,n,!h):t;return a===t?r.attributes||!h?e.getAttribute(n):(a=e.getAttributeNode(n))&&a.specified?a.value:null:a},at.error=function(e){throw Error("Syntax error, unrecognized expression: "+e)},at.uniqueSort=function(e){var t,n=[],i=0,o=0;if(S=!r.detectDuplicates,c=!r.sortStable&&e.slice(0),e.sort(A),S){while(t=e[o++])t===e[o]&&(i=n.push(o));while(i--)e.splice(n[i],1)}return e},a=at.getText=function(e){var t,n="",r=0,i=e.nodeType;if(i){if(1===i||9===i||11===i){if("string"==typeof e.textContent)return e.textContent;for(e=e.firstChild;e;e=e.nextSibling)n+=a(e)}else if(3===i||4===i)return e.nodeValue}else for(;t=e[r];r++)n+=a(t);return n},o=at.selectors={cacheLength:50,createPseudo:lt,match:Q,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(rt,it),e[3]=(e[4]||e[5]||"").replace(rt,it),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||at.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&at.error(e[0]),e},PSEUDO:function(e){var n,r=!e[5]&&e[2];return Q.CHILD.test(e[0])?null:(e[3]&&e[4]!==t?e[2]=e[4]:r&&J.test(r)&&(n=mt(r,!0))&&(n=r.indexOf(")",r.length-n)-r.length)&&(e[0]=e[0].slice(0,n),e[2]=r.slice(0,n)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(rt,it).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=N[e+" "];return t||(t=RegExp("(^|"+P+")"+e+"("+P+"|$)"))&&N(e,function(e){return t.test("string"==typeof e.className&&e.className||typeof e.getAttribute!==j&&e.getAttribute("class")||"")})},ATTR:function(e,t,n){return function(r){var i=at.attr(r,e);return null==i?"!="===t:t?(i+="","="===t?i===n:"!="===t?i!==n:"^="===t?n&&0===i.indexOf(n):"*="===t?n&&i.indexOf(n)>-1:"$="===t?n&&i.slice(-n.length)===n:"~="===t?(" "+i+" ").indexOf(n)>-1:"|="===t?i===n||i.slice(0,n.length+1)===n+"-":!1):!0}},CHILD:function(e,t,n,r,i){var o="nth"!==e.slice(0,3),a="last"!==e.slice(-4),s="of-type"===t;return 1===r&&0===i?function(e){return!!e.parentNode}:function(t,n,l){var u,c,p,f,d,h,g=o!==a?"nextSibling":"previousSibling",m=t.parentNode,y=s&&t.nodeName.toLowerCase(),v=!l&&!s;if(m){if(o){while(g){p=t;while(p=p[g])if(s?p.nodeName.toLowerCase()===y:1===p.nodeType)return!1;h=g="only"===e&&!h&&"nextSibling"}return!0}if(h=[a?m.firstChild:m.lastChild],a&&v){c=m[b]||(m[b]={}),u=c[e]||[],d=u[0]===T&&u[1],f=u[0]===T&&u[2],p=d&&m.childNodes[d];while(p=++d&&p&&p[g]||(f=d=0)||h.pop())if(1===p.nodeType&&++f&&p===t){c[e]=[T,d,f];break}}else if(v&&(u=(t[b]||(t[b]={}))[e])&&u[0]===T)f=u[1];else while(p=++d&&p&&p[g]||(f=d=0)||h.pop())if((s?p.nodeName.toLowerCase()===y:1===p.nodeType)&&++f&&(v&&((p[b]||(p[b]={}))[e]=[T,f]),p===t))break;return f-=i,f===r||0===f%r&&f/r>=0}}},PSEUDO:function(e,t){var n,r=o.pseudos[e]||o.setFilters[e.toLowerCase()]||at.error("unsupported pseudo: "+e);return r[b]?r(t):r.length>1?(n=[e,e,"",t],o.setFilters.hasOwnProperty(e.toLowerCase())?lt(function(e,n){var i,o=r(e,t),a=o.length;while(a--)i=F.call(e,o[a]),e[i]=!(n[i]=o[a])}):function(e){return r(e,0,n)}):r}},pseudos:{not:lt(function(e){var t=[],n=[],r=l(e.replace(z,"$1"));return r[b]?lt(function(e,t,n,i){var o,a=r(e,null,i,[]),s=e.length;while(s--)(o=a[s])&&(e[s]=!(t[s]=o))}):function(e,i,o){return t[0]=e,r(t,null,o,n),!n.pop()}}),has:lt(function(e){return function(t){return at(e,t).length>0}}),contains:lt(function(e){return function(t){return(t.textContent||t.innerText||a(t)).indexOf(e)>-1}}),lang:lt(function(e){return G.test(e||"")||at.error("unsupported lang: "+e),e=e.replace(rt,it).toLowerCase(),function(t){var n;do if(n=h?t.lang:t.getAttribute("xml:lang")||t.getAttribute("lang"))return n=n.toLowerCase(),n===e||0===n.indexOf(e+"-");while((t=t.parentNode)&&1===t.nodeType);return!1}}),target:function(t){var n=e.location&&e.location.hash;return n&&n.slice(1)===t.id},root:function(e){return e===d},focus:function(e){return e===f.activeElement&&(!f.hasFocus||f.hasFocus())&&!!(e.type||e.href||~e.tabIndex)},enabled:function(e){return e.disabled===!1},disabled:function(e){return e.disabled===!0},checked:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&!!e.checked||"option"===t&&!!e.selected},selected:function(e){return e.parentNode&&e.parentNode.selectedIndex,e.selected===!0},empty:function(e){for(e=e.firstChild;e;e=e.nextSibling)if(e.nodeName>"@"||3===e.nodeType||4===e.nodeType)return!1;return!0},parent:function(e){return!o.pseudos.empty(e)},header:function(e){return tt.test(e.nodeName)},input:function(e){return et.test(e.nodeName)},button:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&"button"===e.type||"button"===t},text:function(e){var t;return"input"===e.nodeName.toLowerCase()&&"text"===e.type&&(null==(t=e.getAttribute("type"))||t.toLowerCase()===e.type)},first:ht(function(){return[0]}),last:ht(function(e,t){return[t-1]}),eq:ht(function(e,t,n){return[0>n?n+t:n]}),even:ht(function(e,t){var n=0;for(;t>n;n+=2)e.push(n);return e}),odd:ht(function(e,t){var n=1;for(;t>n;n+=2)e.push(n);return e}),lt:ht(function(e,t,n){var r=0>n?n+t:n;for(;--r>=0;)e.push(r);return e}),gt:ht(function(e,t,n){var r=0>n?n+t:n;for(;t>++r;)e.push(r);return e})}},o.pseudos.nth=o.pseudos.eq;for(n in{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})o.pseudos[n]=ft(n);for(n in{submit:!0,reset:!0})o.pseudos[n]=dt(n);function gt(){}gt.prototype=o.filters=o.pseudos,o.setFilters=new gt;function mt(e,t){var n,r,i,a,s,l,u,c=k[e+" "];if(c)return t?0:c.slice(0);s=e,l=[],u=o.preFilter;while(s){(!n||(r=X.exec(s)))&&(r&&(s=s.slice(r[0].length)||s),l.push(i=[])),n=!1,(r=U.exec(s))&&(n=r.shift(),i.push({value:n,type:r[0].replace(z," ")}),s=s.slice(n.length));for(a in o.filter)!(r=Q[a].exec(s))||u[a]&&!(r=u[a](r))||(n=r.shift(),i.push({value:n,type:a,matches:r}),s=s.slice(n.length));if(!n)break}return t?s.length:s?at.error(e):k(e,l).slice(0)}function yt(e){var t=0,n=e.length,r="";for(;n>t;t++)r+=e[t].value;return r}function vt(e,t,n){var r=t.dir,o=n&&"parentNode"===r,a=C++;return t.first?function(t,n,i){while(t=t[r])if(1===t.nodeType||o)return e(t,n,i)}:function(t,n,s){var l,u,c,p=T+" "+a;if(s){while(t=t[r])if((1===t.nodeType||o)&&e(t,n,s))return!0}else while(t=t[r])if(1===t.nodeType||o)if(c=t[b]||(t[b]={}),(u=c[r])&&u[0]===p){if((l=u[1])===!0||l===i)return l===!0}else if(u=c[r]=[p],u[1]=e(t,n,s)||i,u[1]===!0)return!0}}function bt(e){return e.length>1?function(t,n,r){var i=e.length;while(i--)if(!e[i](t,n,r))return!1;return!0}:e[0]}function xt(e,t,n,r,i){var o,a=[],s=0,l=e.length,u=null!=t;for(;l>s;s++)(o=e[s])&&(!n||n(o,r,i))&&(a.push(o),u&&t.push(s));return a}function wt(e,t,n,r,i,o){return r&&!r[b]&&(r=wt(r)),i&&!i[b]&&(i=wt(i,o)),lt(function(o,a,s,l){var u,c,p,f=[],d=[],h=a.length,g=o||Nt(t||"*",s.nodeType?[s]:s,[]),m=!e||!o&&t?g:xt(g,f,e,s,l),y=n?i||(o?e:h||r)?[]:a:m;if(n&&n(m,y,s,l),r){u=xt(y,d),r(u,[],s,l),c=u.length;while(c--)(p=u[c])&&(y[d[c]]=!(m[d[c]]=p))}if(o){if(i||e){if(i){u=[],c=y.length;while(c--)(p=y[c])&&u.push(m[c]=p);i(null,y=[],u,l)}c=y.length;while(c--)(p=y[c])&&(u=i?F.call(o,p):f[c])>-1&&(o[u]=!(a[u]=p))}}else y=xt(y===a?y.splice(h,y.length):y),i?i(null,a,y,l):M.apply(a,y)})}function Tt(e){var t,n,r,i=e.length,a=o.relative[e[0].type],s=a||o.relative[" "],l=a?1:0,c=vt(function(e){return e===t},s,!0),p=vt(function(e){return F.call(t,e)>-1},s,!0),f=[function(e,n,r){return!a&&(r||n!==u)||((t=n).nodeType?c(e,n,r):p(e,n,r))}];for(;i>l;l++)if(n=o.relative[e[l].type])f=[vt(bt(f),n)];else{if(n=o.filter[e[l].type].apply(null,e[l].matches),n[b]){for(r=++l;i>r;r++)if(o.relative[e[r].type])break;return wt(l>1&&bt(f),l>1&&yt(e.slice(0,l-1).concat({value:" "===e[l-2].type?"*":""})).replace(z,"$1"),n,r>l&&Tt(e.slice(l,r)),i>r&&Tt(e=e.slice(r)),i>r&&yt(e))}f.push(n)}return bt(f)}function Ct(e,t){var n=0,r=t.length>0,a=e.length>0,s=function(s,l,c,p,d){var h,g,m,y=[],v=0,b="0",x=s&&[],w=null!=d,C=u,N=s||a&&o.find.TAG("*",d&&l.parentNode||l),k=T+=null==C?1:Math.random()||.1;for(w&&(u=l!==f&&l,i=n);null!=(h=N[b]);b++){if(a&&h){g=0;while(m=e[g++])if(m(h,l,c)){p.push(h);break}w&&(T=k,i=++n)}r&&((h=!m&&h)&&v--,s&&x.push(h))}if(v+=b,r&&b!==v){g=0;while(m=t[g++])m(x,y,l,c);if(s){if(v>0)while(b--)x[b]||y[b]||(y[b]=q.call(p));y=xt(y)}M.apply(p,y),w&&!s&&y.length>0&&v+t.length>1&&at.uniqueSort(p)}return w&&(T=k,u=C),x};return r?lt(s):s}l=at.compile=function(e,t){var n,r=[],i=[],o=E[e+" "];if(!o){t||(t=mt(e)),n=t.length;while(n--)o=Tt(t[n]),o[b]?r.push(o):i.push(o);o=E(e,Ct(i,r))}return o};function Nt(e,t,n){var r=0,i=t.length;for(;i>r;r++)at(e,t[r],n);return n}function kt(e,t,n,i){var a,s,u,c,p,f=mt(e);if(!i&&1===f.length){if(s=f[0]=f[0].slice(0),s.length>2&&"ID"===(u=s[0]).type&&r.getById&&9===t.nodeType&&h&&o.relative[s[1].type]){if(t=(o.find.ID(u.matches[0].replace(rt,it),t)||[])[0],!t)return n;e=e.slice(s.shift().value.length)}a=Q.needsContext.test(e)?0:s.length;while(a--){if(u=s[a],o.relative[c=u.type])break;if((p=o.find[c])&&(i=p(u.matches[0].replace(rt,it),V.test(s[0].type)&&t.parentNode||t))){if(s.splice(a,1),e=i.length&&yt(s),!e)return M.apply(n,i),n;break}}}return l(e,f)(i,t,!h,n,V.test(e)),n}r.sortStable=b.split("").sort(A).join("")===b,r.detectDuplicates=S,p(),r.sortDetached=ut(function(e){return 1&e.compareDocumentPosition(f.createElement("div"))}),ut(function(e){return e.innerHTML="","#"===e.firstChild.getAttribute("href")})||ct("type|href|height|width",function(e,n,r){return r?t:e.getAttribute(n,"type"===n.toLowerCase()?1:2)}),r.attributes&&ut(function(e){return e.innerHTML="",e.firstChild.setAttribute("value",""),""===e.firstChild.getAttribute("value")})||ct("value",function(e,n,r){return r||"input"!==e.nodeName.toLowerCase()?t:e.defaultValue}),ut(function(e){return null==e.getAttribute("disabled")})||ct(B,function(e,n,r){var i;return r?t:(i=e.getAttributeNode(n))&&i.specified?i.value:e[n]===!0?n.toLowerCase():null}),x.find=at,x.expr=at.selectors,x.expr[":"]=x.expr.pseudos,x.unique=at.uniqueSort,x.text=at.getText,x.isXMLDoc=at.isXML,x.contains=at.contains}(e);var O={};function F(e){var t=O[e]={};return x.each(e.match(T)||[],function(e,n){t[n]=!0}),t}x.Callbacks=function(e){e="string"==typeof e?O[e]||F(e):x.extend({},e);var n,r,i,o,a,s,l=[],u=!e.once&&[],c=function(t){for(r=e.memory&&t,i=!0,a=s||0,s=0,o=l.length,n=!0;l&&o>a;a++)if(l[a].apply(t[0],t[1])===!1&&e.stopOnFalse){r=!1;break}n=!1,l&&(u?u.length&&c(u.shift()):r?l=[]:p.disable())},p={add:function(){if(l){var t=l.length;(function i(t){x.each(t,function(t,n){var r=x.type(n);"function"===r?e.unique&&p.has(n)||l.push(n):n&&n.length&&"string"!==r&&i(n)})})(arguments),n?o=l.length:r&&(s=t,c(r))}return this},remove:function(){return l&&x.each(arguments,function(e,t){var r;while((r=x.inArray(t,l,r))>-1)l.splice(r,1),n&&(o>=r&&o--,a>=r&&a--)}),this},has:function(e){return e?x.inArray(e,l)>-1:!(!l||!l.length)},empty:function(){return l=[],o=0,this},disable:function(){return l=u=r=t,this},disabled:function(){return!l},lock:function(){return u=t,r||p.disable(),this},locked:function(){return!u},fireWith:function(e,t){return!l||i&&!u||(t=t||[],t=[e,t.slice?t.slice():t],n?u.push(t):c(t)),this},fire:function(){return p.fireWith(this,arguments),this},fired:function(){return!!i}};return p},x.extend({Deferred:function(e){var t=[["resolve","done",x.Callbacks("once memory"),"resolved"],["reject","fail",x.Callbacks("once memory"),"rejected"],["notify","progress",x.Callbacks("memory")]],n="pending",r={state:function(){return n},always:function(){return i.done(arguments).fail(arguments),this},then:function(){var e=arguments;return x.Deferred(function(n){x.each(t,function(t,o){var a=o[0],s=x.isFunction(e[t])&&e[t];i[o[1]](function(){var e=s&&s.apply(this,arguments);e&&x.isFunction(e.promise)?e.promise().done(n.resolve).fail(n.reject).progress(n.notify):n[a+"With"](this===r?n.promise():this,s?[e]:arguments)})}),e=null}).promise()},promise:function(e){return null!=e?x.extend(e,r):r}},i={};return r.pipe=r.then,x.each(t,function(e,o){var a=o[2],s=o[3];r[o[1]]=a.add,s&&a.add(function(){n=s},t[1^e][2].disable,t[2][2].lock),i[o[0]]=function(){return i[o[0]+"With"](this===i?r:this,arguments),this},i[o[0]+"With"]=a.fireWith}),r.promise(i),e&&e.call(i,i),i},when:function(e){var t=0,n=g.call(arguments),r=n.length,i=1!==r||e&&x.isFunction(e.promise)?r:0,o=1===i?e:x.Deferred(),a=function(e,t,n){return function(r){t[e]=this,n[e]=arguments.length>1?g.call(arguments):r,n===s?o.notifyWith(t,n):--i||o.resolveWith(t,n)}},s,l,u;if(r>1)for(s=Array(r),l=Array(r),u=Array(r);r>t;t++)n[t]&&x.isFunction(n[t].promise)?n[t].promise().done(a(t,u,n)).fail(o.reject).progress(a(t,l,s)):--i;return i||o.resolveWith(u,n),o.promise()}}),x.support=function(t){var n,r,o,s,l,u,c,p,f,d=a.createElement("div");if(d.setAttribute("className","t"),d.innerHTML="
          a",n=d.getElementsByTagName("*")||[],r=d.getElementsByTagName("a")[0],!r||!r.style||!n.length)return t;s=a.createElement("select"),u=s.appendChild(a.createElement("option")),o=d.getElementsByTagName("input")[0],r.style.cssText="top:1px;float:left;opacity:.5",t.getSetAttribute="t"!==d.className,t.leadingWhitespace=3===d.firstChild.nodeType,t.tbody=!d.getElementsByTagName("tbody").length,t.htmlSerialize=!!d.getElementsByTagName("link").length,t.style=/top/.test(r.getAttribute("style")),t.hrefNormalized="/a"===r.getAttribute("href"),t.opacity=/^0.5/.test(r.style.opacity),t.cssFloat=!!r.style.cssFloat,t.checkOn=!!o.value,t.optSelected=u.selected,t.enctype=!!a.createElement("form").enctype,t.html5Clone="<:nav>"!==a.createElement("nav").cloneNode(!0).outerHTML,t.inlineBlockNeedsLayout=!1,t.shrinkWrapBlocks=!1,t.pixelPosition=!1,t.deleteExpando=!0,t.noCloneEvent=!0,t.reliableMarginRight=!0,t.boxSizingReliable=!0,o.checked=!0,t.noCloneChecked=o.cloneNode(!0).checked,s.disabled=!0,t.optDisabled=!u.disabled;try{delete d.test}catch(h){t.deleteExpando=!1}o=a.createElement("input"),o.setAttribute("value",""),t.input=""===o.getAttribute("value"),o.value="t",o.setAttribute("type","radio"),t.radioValue="t"===o.value,o.setAttribute("checked","t"),o.setAttribute("name","t"),l=a.createDocumentFragment(),l.appendChild(o),t.appendChecked=o.checked,t.checkClone=l.cloneNode(!0).cloneNode(!0).lastChild.checked,d.attachEvent&&(d.attachEvent("onclick",function(){t.noCloneEvent=!1}),d.cloneNode(!0).click());for(f in{submit:!0,change:!0,focusin:!0})d.setAttribute(c="on"+f,"t"),t[f+"Bubbles"]=c in e||d.attributes[c].expando===!1;d.style.backgroundClip="content-box",d.cloneNode(!0).style.backgroundClip="",t.clearCloneStyle="content-box"===d.style.backgroundClip;for(f in x(t))break;return t.ownLast="0"!==f,x(function(){var n,r,o,s="padding:0;margin:0;border:0;display:block;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;",l=a.getElementsByTagName("body")[0];l&&(n=a.createElement("div"),n.style.cssText="border:0;width:0;height:0;position:absolute;top:0;left:-9999px;margin-top:1px",l.appendChild(n).appendChild(d),d.innerHTML="
          t
          ",o=d.getElementsByTagName("td"),o[0].style.cssText="padding:0;margin:0;border:0;display:none",p=0===o[0].offsetHeight,o[0].style.display="",o[1].style.display="none",t.reliableHiddenOffsets=p&&0===o[0].offsetHeight,d.innerHTML="",d.style.cssText="box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;padding:1px;border:1px;display:block;width:4px;margin-top:1%;position:absolute;top:1%;",x.swap(l,null!=l.style.zoom?{zoom:1}:{},function(){t.boxSizing=4===d.offsetWidth}),e.getComputedStyle&&(t.pixelPosition="1%"!==(e.getComputedStyle(d,null)||{}).top,t.boxSizingReliable="4px"===(e.getComputedStyle(d,null)||{width:"4px"}).width,r=d.appendChild(a.createElement("div")),r.style.cssText=d.style.cssText=s,r.style.marginRight=r.style.width="0",d.style.width="1px",t.reliableMarginRight=!parseFloat((e.getComputedStyle(r,null)||{}).marginRight)),typeof d.style.zoom!==i&&(d.innerHTML="",d.style.cssText=s+"width:1px;padding:1px;display:inline;zoom:1",t.inlineBlockNeedsLayout=3===d.offsetWidth,d.style.display="block",d.innerHTML="
          ",d.firstChild.style.width="5px",t.shrinkWrapBlocks=3!==d.offsetWidth,t.inlineBlockNeedsLayout&&(l.style.zoom=1)),l.removeChild(n),n=d=o=r=null)}),n=s=l=u=r=o=null,t +}({});var B=/(?:\{[\s\S]*\}|\[[\s\S]*\])$/,P=/([A-Z])/g;function R(e,n,r,i){if(x.acceptData(e)){var o,a,s=x.expando,l=e.nodeType,u=l?x.cache:e,c=l?e[s]:e[s]&&s;if(c&&u[c]&&(i||u[c].data)||r!==t||"string"!=typeof n)return c||(c=l?e[s]=p.pop()||x.guid++:s),u[c]||(u[c]=l?{}:{toJSON:x.noop}),("object"==typeof n||"function"==typeof n)&&(i?u[c]=x.extend(u[c],n):u[c].data=x.extend(u[c].data,n)),a=u[c],i||(a.data||(a.data={}),a=a.data),r!==t&&(a[x.camelCase(n)]=r),"string"==typeof n?(o=a[n],null==o&&(o=a[x.camelCase(n)])):o=a,o}}function W(e,t,n){if(x.acceptData(e)){var r,i,o=e.nodeType,a=o?x.cache:e,s=o?e[x.expando]:x.expando;if(a[s]){if(t&&(r=n?a[s]:a[s].data)){x.isArray(t)?t=t.concat(x.map(t,x.camelCase)):t in r?t=[t]:(t=x.camelCase(t),t=t in r?[t]:t.split(" ")),i=t.length;while(i--)delete r[t[i]];if(n?!I(r):!x.isEmptyObject(r))return}(n||(delete a[s].data,I(a[s])))&&(o?x.cleanData([e],!0):x.support.deleteExpando||a!=a.window?delete a[s]:a[s]=null)}}}x.extend({cache:{},noData:{applet:!0,embed:!0,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"},hasData:function(e){return e=e.nodeType?x.cache[e[x.expando]]:e[x.expando],!!e&&!I(e)},data:function(e,t,n){return R(e,t,n)},removeData:function(e,t){return W(e,t)},_data:function(e,t,n){return R(e,t,n,!0)},_removeData:function(e,t){return W(e,t,!0)},acceptData:function(e){if(e.nodeType&&1!==e.nodeType&&9!==e.nodeType)return!1;var t=e.nodeName&&x.noData[e.nodeName.toLowerCase()];return!t||t!==!0&&e.getAttribute("classid")===t}}),x.fn.extend({data:function(e,n){var r,i,o=null,a=0,s=this[0];if(e===t){if(this.length&&(o=x.data(s),1===s.nodeType&&!x._data(s,"parsedAttrs"))){for(r=s.attributes;r.length>a;a++)i=r[a].name,0===i.indexOf("data-")&&(i=x.camelCase(i.slice(5)),$(s,i,o[i]));x._data(s,"parsedAttrs",!0)}return o}return"object"==typeof e?this.each(function(){x.data(this,e)}):arguments.length>1?this.each(function(){x.data(this,e,n)}):s?$(s,e,x.data(s,e)):null},removeData:function(e){return this.each(function(){x.removeData(this,e)})}});function $(e,n,r){if(r===t&&1===e.nodeType){var i="data-"+n.replace(P,"-$1").toLowerCase();if(r=e.getAttribute(i),"string"==typeof r){try{r="true"===r?!0:"false"===r?!1:"null"===r?null:+r+""===r?+r:B.test(r)?x.parseJSON(r):r}catch(o){}x.data(e,n,r)}else r=t}return r}function I(e){var t;for(t in e)if(("data"!==t||!x.isEmptyObject(e[t]))&&"toJSON"!==t)return!1;return!0}x.extend({queue:function(e,n,r){var i;return e?(n=(n||"fx")+"queue",i=x._data(e,n),r&&(!i||x.isArray(r)?i=x._data(e,n,x.makeArray(r)):i.push(r)),i||[]):t},dequeue:function(e,t){t=t||"fx";var n=x.queue(e,t),r=n.length,i=n.shift(),o=x._queueHooks(e,t),a=function(){x.dequeue(e,t)};"inprogress"===i&&(i=n.shift(),r--),i&&("fx"===t&&n.unshift("inprogress"),delete o.stop,i.call(e,a,o)),!r&&o&&o.empty.fire()},_queueHooks:function(e,t){var n=t+"queueHooks";return x._data(e,n)||x._data(e,n,{empty:x.Callbacks("once memory").add(function(){x._removeData(e,t+"queue"),x._removeData(e,n)})})}}),x.fn.extend({queue:function(e,n){var r=2;return"string"!=typeof e&&(n=e,e="fx",r--),r>arguments.length?x.queue(this[0],e):n===t?this:this.each(function(){var t=x.queue(this,e,n);x._queueHooks(this,e),"fx"===e&&"inprogress"!==t[0]&&x.dequeue(this,e)})},dequeue:function(e){return this.each(function(){x.dequeue(this,e)})},delay:function(e,t){return e=x.fx?x.fx.speeds[e]||e:e,t=t||"fx",this.queue(t,function(t,n){var r=setTimeout(t,e);n.stop=function(){clearTimeout(r)}})},clearQueue:function(e){return this.queue(e||"fx",[])},promise:function(e,n){var r,i=1,o=x.Deferred(),a=this,s=this.length,l=function(){--i||o.resolveWith(a,[a])};"string"!=typeof e&&(n=e,e=t),e=e||"fx";while(s--)r=x._data(a[s],e+"queueHooks"),r&&r.empty&&(i++,r.empty.add(l));return l(),o.promise(n)}});var z,X,U=/[\t\r\n\f]/g,V=/\r/g,Y=/^(?:input|select|textarea|button|object)$/i,J=/^(?:a|area)$/i,G=/^(?:checked|selected)$/i,Q=x.support.getSetAttribute,K=x.support.input;x.fn.extend({attr:function(e,t){return x.access(this,x.attr,e,t,arguments.length>1)},removeAttr:function(e){return this.each(function(){x.removeAttr(this,e)})},prop:function(e,t){return x.access(this,x.prop,e,t,arguments.length>1)},removeProp:function(e){return e=x.propFix[e]||e,this.each(function(){try{this[e]=t,delete this[e]}catch(n){}})},addClass:function(e){var t,n,r,i,o,a=0,s=this.length,l="string"==typeof e&&e;if(x.isFunction(e))return this.each(function(t){x(this).addClass(e.call(this,t,this.className))});if(l)for(t=(e||"").match(T)||[];s>a;a++)if(n=this[a],r=1===n.nodeType&&(n.className?(" "+n.className+" ").replace(U," "):" ")){o=0;while(i=t[o++])0>r.indexOf(" "+i+" ")&&(r+=i+" ");n.className=x.trim(r)}return this},removeClass:function(e){var t,n,r,i,o,a=0,s=this.length,l=0===arguments.length||"string"==typeof e&&e;if(x.isFunction(e))return this.each(function(t){x(this).removeClass(e.call(this,t,this.className))});if(l)for(t=(e||"").match(T)||[];s>a;a++)if(n=this[a],r=1===n.nodeType&&(n.className?(" "+n.className+" ").replace(U," "):"")){o=0;while(i=t[o++])while(r.indexOf(" "+i+" ")>=0)r=r.replace(" "+i+" "," ");n.className=e?x.trim(r):""}return this},toggleClass:function(e,t){var n=typeof e;return"boolean"==typeof t&&"string"===n?t?this.addClass(e):this.removeClass(e):x.isFunction(e)?this.each(function(n){x(this).toggleClass(e.call(this,n,this.className,t),t)}):this.each(function(){if("string"===n){var t,r=0,o=x(this),a=e.match(T)||[];while(t=a[r++])o.hasClass(t)?o.removeClass(t):o.addClass(t)}else(n===i||"boolean"===n)&&(this.className&&x._data(this,"__className__",this.className),this.className=this.className||e===!1?"":x._data(this,"__className__")||"")})},hasClass:function(e){var t=" "+e+" ",n=0,r=this.length;for(;r>n;n++)if(1===this[n].nodeType&&(" "+this[n].className+" ").replace(U," ").indexOf(t)>=0)return!0;return!1},val:function(e){var n,r,i,o=this[0];{if(arguments.length)return i=x.isFunction(e),this.each(function(n){var o;1===this.nodeType&&(o=i?e.call(this,n,x(this).val()):e,null==o?o="":"number"==typeof o?o+="":x.isArray(o)&&(o=x.map(o,function(e){return null==e?"":e+""})),r=x.valHooks[this.type]||x.valHooks[this.nodeName.toLowerCase()],r&&"set"in r&&r.set(this,o,"value")!==t||(this.value=o))});if(o)return r=x.valHooks[o.type]||x.valHooks[o.nodeName.toLowerCase()],r&&"get"in r&&(n=r.get(o,"value"))!==t?n:(n=o.value,"string"==typeof n?n.replace(V,""):null==n?"":n)}}}),x.extend({valHooks:{option:{get:function(e){var t=x.find.attr(e,"value");return null!=t?t:e.text}},select:{get:function(e){var t,n,r=e.options,i=e.selectedIndex,o="select-one"===e.type||0>i,a=o?null:[],s=o?i+1:r.length,l=0>i?s:o?i:0;for(;s>l;l++)if(n=r[l],!(!n.selected&&l!==i||(x.support.optDisabled?n.disabled:null!==n.getAttribute("disabled"))||n.parentNode.disabled&&x.nodeName(n.parentNode,"optgroup"))){if(t=x(n).val(),o)return t;a.push(t)}return a},set:function(e,t){var n,r,i=e.options,o=x.makeArray(t),a=i.length;while(a--)r=i[a],(r.selected=x.inArray(x(r).val(),o)>=0)&&(n=!0);return n||(e.selectedIndex=-1),o}}},attr:function(e,n,r){var o,a,s=e.nodeType;if(e&&3!==s&&8!==s&&2!==s)return typeof e.getAttribute===i?x.prop(e,n,r):(1===s&&x.isXMLDoc(e)||(n=n.toLowerCase(),o=x.attrHooks[n]||(x.expr.match.bool.test(n)?X:z)),r===t?o&&"get"in o&&null!==(a=o.get(e,n))?a:(a=x.find.attr(e,n),null==a?t:a):null!==r?o&&"set"in o&&(a=o.set(e,r,n))!==t?a:(e.setAttribute(n,r+""),r):(x.removeAttr(e,n),t))},removeAttr:function(e,t){var n,r,i=0,o=t&&t.match(T);if(o&&1===e.nodeType)while(n=o[i++])r=x.propFix[n]||n,x.expr.match.bool.test(n)?K&&Q||!G.test(n)?e[r]=!1:e[x.camelCase("default-"+n)]=e[r]=!1:x.attr(e,n,""),e.removeAttribute(Q?n:r)},attrHooks:{type:{set:function(e,t){if(!x.support.radioValue&&"radio"===t&&x.nodeName(e,"input")){var n=e.value;return e.setAttribute("type",t),n&&(e.value=n),t}}}},propFix:{"for":"htmlFor","class":"className"},prop:function(e,n,r){var i,o,a,s=e.nodeType;if(e&&3!==s&&8!==s&&2!==s)return a=1!==s||!x.isXMLDoc(e),a&&(n=x.propFix[n]||n,o=x.propHooks[n]),r!==t?o&&"set"in o&&(i=o.set(e,r,n))!==t?i:e[n]=r:o&&"get"in o&&null!==(i=o.get(e,n))?i:e[n]},propHooks:{tabIndex:{get:function(e){var t=x.find.attr(e,"tabindex");return t?parseInt(t,10):Y.test(e.nodeName)||J.test(e.nodeName)&&e.href?0:-1}}}}),X={set:function(e,t,n){return t===!1?x.removeAttr(e,n):K&&Q||!G.test(n)?e.setAttribute(!Q&&x.propFix[n]||n,n):e[x.camelCase("default-"+n)]=e[n]=!0,n}},x.each(x.expr.match.bool.source.match(/\w+/g),function(e,n){var r=x.expr.attrHandle[n]||x.find.attr;x.expr.attrHandle[n]=K&&Q||!G.test(n)?function(e,n,i){var o=x.expr.attrHandle[n],a=i?t:(x.expr.attrHandle[n]=t)!=r(e,n,i)?n.toLowerCase():null;return x.expr.attrHandle[n]=o,a}:function(e,n,r){return r?t:e[x.camelCase("default-"+n)]?n.toLowerCase():null}}),K&&Q||(x.attrHooks.value={set:function(e,n,r){return x.nodeName(e,"input")?(e.defaultValue=n,t):z&&z.set(e,n,r)}}),Q||(z={set:function(e,n,r){var i=e.getAttributeNode(r);return i||e.setAttributeNode(i=e.ownerDocument.createAttribute(r)),i.value=n+="","value"===r||n===e.getAttribute(r)?n:t}},x.expr.attrHandle.id=x.expr.attrHandle.name=x.expr.attrHandle.coords=function(e,n,r){var i;return r?t:(i=e.getAttributeNode(n))&&""!==i.value?i.value:null},x.valHooks.button={get:function(e,n){var r=e.getAttributeNode(n);return r&&r.specified?r.value:t},set:z.set},x.attrHooks.contenteditable={set:function(e,t,n){z.set(e,""===t?!1:t,n)}},x.each(["width","height"],function(e,n){x.attrHooks[n]={set:function(e,r){return""===r?(e.setAttribute(n,"auto"),r):t}}})),x.support.hrefNormalized||x.each(["href","src"],function(e,t){x.propHooks[t]={get:function(e){return e.getAttribute(t,4)}}}),x.support.style||(x.attrHooks.style={get:function(e){return e.style.cssText||t},set:function(e,t){return e.style.cssText=t+""}}),x.support.optSelected||(x.propHooks.selected={get:function(e){var t=e.parentNode;return t&&(t.selectedIndex,t.parentNode&&t.parentNode.selectedIndex),null}}),x.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){x.propFix[this.toLowerCase()]=this}),x.support.enctype||(x.propFix.enctype="encoding"),x.each(["radio","checkbox"],function(){x.valHooks[this]={set:function(e,n){return x.isArray(n)?e.checked=x.inArray(x(e).val(),n)>=0:t}},x.support.checkOn||(x.valHooks[this].get=function(e){return null===e.getAttribute("value")?"on":e.value})});var Z=/^(?:input|select|textarea)$/i,et=/^key/,tt=/^(?:mouse|contextmenu)|click/,nt=/^(?:focusinfocus|focusoutblur)$/,rt=/^([^.]*)(?:\.(.+)|)$/;function it(){return!0}function ot(){return!1}function at(){try{return a.activeElement}catch(e){}}x.event={global:{},add:function(e,n,r,o,a){var s,l,u,c,p,f,d,h,g,m,y,v=x._data(e);if(v){r.handler&&(c=r,r=c.handler,a=c.selector),r.guid||(r.guid=x.guid++),(l=v.events)||(l=v.events={}),(f=v.handle)||(f=v.handle=function(e){return typeof x===i||e&&x.event.triggered===e.type?t:x.event.dispatch.apply(f.elem,arguments)},f.elem=e),n=(n||"").match(T)||[""],u=n.length;while(u--)s=rt.exec(n[u])||[],g=y=s[1],m=(s[2]||"").split(".").sort(),g&&(p=x.event.special[g]||{},g=(a?p.delegateType:p.bindType)||g,p=x.event.special[g]||{},d=x.extend({type:g,origType:y,data:o,handler:r,guid:r.guid,selector:a,needsContext:a&&x.expr.match.needsContext.test(a),namespace:m.join(".")},c),(h=l[g])||(h=l[g]=[],h.delegateCount=0,p.setup&&p.setup.call(e,o,m,f)!==!1||(e.addEventListener?e.addEventListener(g,f,!1):e.attachEvent&&e.attachEvent("on"+g,f))),p.add&&(p.add.call(e,d),d.handler.guid||(d.handler.guid=r.guid)),a?h.splice(h.delegateCount++,0,d):h.push(d),x.event.global[g]=!0);e=null}},remove:function(e,t,n,r,i){var o,a,s,l,u,c,p,f,d,h,g,m=x.hasData(e)&&x._data(e);if(m&&(c=m.events)){t=(t||"").match(T)||[""],u=t.length;while(u--)if(s=rt.exec(t[u])||[],d=g=s[1],h=(s[2]||"").split(".").sort(),d){p=x.event.special[d]||{},d=(r?p.delegateType:p.bindType)||d,f=c[d]||[],s=s[2]&&RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"),l=o=f.length;while(o--)a=f[o],!i&&g!==a.origType||n&&n.guid!==a.guid||s&&!s.test(a.namespace)||r&&r!==a.selector&&("**"!==r||!a.selector)||(f.splice(o,1),a.selector&&f.delegateCount--,p.remove&&p.remove.call(e,a));l&&!f.length&&(p.teardown&&p.teardown.call(e,h,m.handle)!==!1||x.removeEvent(e,d,m.handle),delete c[d])}else for(d in c)x.event.remove(e,d+t[u],n,r,!0);x.isEmptyObject(c)&&(delete m.handle,x._removeData(e,"events"))}},trigger:function(n,r,i,o){var s,l,u,c,p,f,d,h=[i||a],g=v.call(n,"type")?n.type:n,m=v.call(n,"namespace")?n.namespace.split("."):[];if(u=f=i=i||a,3!==i.nodeType&&8!==i.nodeType&&!nt.test(g+x.event.triggered)&&(g.indexOf(".")>=0&&(m=g.split("."),g=m.shift(),m.sort()),l=0>g.indexOf(":")&&"on"+g,n=n[x.expando]?n:new x.Event(g,"object"==typeof n&&n),n.isTrigger=o?2:3,n.namespace=m.join("."),n.namespace_re=n.namespace?RegExp("(^|\\.)"+m.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,n.result=t,n.target||(n.target=i),r=null==r?[n]:x.makeArray(r,[n]),p=x.event.special[g]||{},o||!p.trigger||p.trigger.apply(i,r)!==!1)){if(!o&&!p.noBubble&&!x.isWindow(i)){for(c=p.delegateType||g,nt.test(c+g)||(u=u.parentNode);u;u=u.parentNode)h.push(u),f=u;f===(i.ownerDocument||a)&&h.push(f.defaultView||f.parentWindow||e)}d=0;while((u=h[d++])&&!n.isPropagationStopped())n.type=d>1?c:p.bindType||g,s=(x._data(u,"events")||{})[n.type]&&x._data(u,"handle"),s&&s.apply(u,r),s=l&&u[l],s&&x.acceptData(u)&&s.apply&&s.apply(u,r)===!1&&n.preventDefault();if(n.type=g,!o&&!n.isDefaultPrevented()&&(!p._default||p._default.apply(h.pop(),r)===!1)&&x.acceptData(i)&&l&&i[g]&&!x.isWindow(i)){f=i[l],f&&(i[l]=null),x.event.triggered=g;try{i[g]()}catch(y){}x.event.triggered=t,f&&(i[l]=f)}return n.result}},dispatch:function(e){e=x.event.fix(e);var n,r,i,o,a,s=[],l=g.call(arguments),u=(x._data(this,"events")||{})[e.type]||[],c=x.event.special[e.type]||{};if(l[0]=e,e.delegateTarget=this,!c.preDispatch||c.preDispatch.call(this,e)!==!1){s=x.event.handlers.call(this,e,u),n=0;while((o=s[n++])&&!e.isPropagationStopped()){e.currentTarget=o.elem,a=0;while((i=o.handlers[a++])&&!e.isImmediatePropagationStopped())(!e.namespace_re||e.namespace_re.test(i.namespace))&&(e.handleObj=i,e.data=i.data,r=((x.event.special[i.origType]||{}).handle||i.handler).apply(o.elem,l),r!==t&&(e.result=r)===!1&&(e.preventDefault(),e.stopPropagation()))}return c.postDispatch&&c.postDispatch.call(this,e),e.result}},handlers:function(e,n){var r,i,o,a,s=[],l=n.delegateCount,u=e.target;if(l&&u.nodeType&&(!e.button||"click"!==e.type))for(;u!=this;u=u.parentNode||this)if(1===u.nodeType&&(u.disabled!==!0||"click"!==e.type)){for(o=[],a=0;l>a;a++)i=n[a],r=i.selector+" ",o[r]===t&&(o[r]=i.needsContext?x(r,this).index(u)>=0:x.find(r,this,null,[u]).length),o[r]&&o.push(i);o.length&&s.push({elem:u,handlers:o})}return n.length>l&&s.push({elem:this,handlers:n.slice(l)}),s},fix:function(e){if(e[x.expando])return e;var t,n,r,i=e.type,o=e,s=this.fixHooks[i];s||(this.fixHooks[i]=s=tt.test(i)?this.mouseHooks:et.test(i)?this.keyHooks:{}),r=s.props?this.props.concat(s.props):this.props,e=new x.Event(o),t=r.length;while(t--)n=r[t],e[n]=o[n];return e.target||(e.target=o.srcElement||a),3===e.target.nodeType&&(e.target=e.target.parentNode),e.metaKey=!!e.metaKey,s.filter?s.filter(e,o):e},props:"altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),fixHooks:{},keyHooks:{props:"char charCode key keyCode".split(" "),filter:function(e,t){return null==e.which&&(e.which=null!=t.charCode?t.charCode:t.keyCode),e}},mouseHooks:{props:"button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "),filter:function(e,n){var r,i,o,s=n.button,l=n.fromElement;return null==e.pageX&&null!=n.clientX&&(i=e.target.ownerDocument||a,o=i.documentElement,r=i.body,e.pageX=n.clientX+(o&&o.scrollLeft||r&&r.scrollLeft||0)-(o&&o.clientLeft||r&&r.clientLeft||0),e.pageY=n.clientY+(o&&o.scrollTop||r&&r.scrollTop||0)-(o&&o.clientTop||r&&r.clientTop||0)),!e.relatedTarget&&l&&(e.relatedTarget=l===e.target?n.toElement:l),e.which||s===t||(e.which=1&s?1:2&s?3:4&s?2:0),e}},special:{load:{noBubble:!0},focus:{trigger:function(){if(this!==at()&&this.focus)try{return this.focus(),!1}catch(e){}},delegateType:"focusin"},blur:{trigger:function(){return this===at()&&this.blur?(this.blur(),!1):t},delegateType:"focusout"},click:{trigger:function(){return x.nodeName(this,"input")&&"checkbox"===this.type&&this.click?(this.click(),!1):t},_default:function(e){return x.nodeName(e.target,"a")}},beforeunload:{postDispatch:function(e){e.result!==t&&(e.originalEvent.returnValue=e.result)}}},simulate:function(e,t,n,r){var i=x.extend(new x.Event,n,{type:e,isSimulated:!0,originalEvent:{}});r?x.event.trigger(i,null,t):x.event.dispatch.call(t,i),i.isDefaultPrevented()&&n.preventDefault()}},x.removeEvent=a.removeEventListener?function(e,t,n){e.removeEventListener&&e.removeEventListener(t,n,!1)}:function(e,t,n){var r="on"+t;e.detachEvent&&(typeof e[r]===i&&(e[r]=null),e.detachEvent(r,n))},x.Event=function(e,n){return this instanceof x.Event?(e&&e.type?(this.originalEvent=e,this.type=e.type,this.isDefaultPrevented=e.defaultPrevented||e.returnValue===!1||e.getPreventDefault&&e.getPreventDefault()?it:ot):this.type=e,n&&x.extend(this,n),this.timeStamp=e&&e.timeStamp||x.now(),this[x.expando]=!0,t):new x.Event(e,n)},x.Event.prototype={isDefaultPrevented:ot,isPropagationStopped:ot,isImmediatePropagationStopped:ot,preventDefault:function(){var e=this.originalEvent;this.isDefaultPrevented=it,e&&(e.preventDefault?e.preventDefault():e.returnValue=!1)},stopPropagation:function(){var e=this.originalEvent;this.isPropagationStopped=it,e&&(e.stopPropagation&&e.stopPropagation(),e.cancelBubble=!0)},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=it,this.stopPropagation()}},x.each({mouseenter:"mouseover",mouseleave:"mouseout"},function(e,t){x.event.special[e]={delegateType:t,bindType:t,handle:function(e){var n,r=this,i=e.relatedTarget,o=e.handleObj;return(!i||i!==r&&!x.contains(r,i))&&(e.type=o.origType,n=o.handler.apply(this,arguments),e.type=t),n}}}),x.support.submitBubbles||(x.event.special.submit={setup:function(){return x.nodeName(this,"form")?!1:(x.event.add(this,"click._submit keypress._submit",function(e){var n=e.target,r=x.nodeName(n,"input")||x.nodeName(n,"button")?n.form:t;r&&!x._data(r,"submitBubbles")&&(x.event.add(r,"submit._submit",function(e){e._submit_bubble=!0}),x._data(r,"submitBubbles",!0))}),t)},postDispatch:function(e){e._submit_bubble&&(delete e._submit_bubble,this.parentNode&&!e.isTrigger&&x.event.simulate("submit",this.parentNode,e,!0))},teardown:function(){return x.nodeName(this,"form")?!1:(x.event.remove(this,"._submit"),t)}}),x.support.changeBubbles||(x.event.special.change={setup:function(){return Z.test(this.nodeName)?(("checkbox"===this.type||"radio"===this.type)&&(x.event.add(this,"propertychange._change",function(e){"checked"===e.originalEvent.propertyName&&(this._just_changed=!0)}),x.event.add(this,"click._change",function(e){this._just_changed&&!e.isTrigger&&(this._just_changed=!1),x.event.simulate("change",this,e,!0)})),!1):(x.event.add(this,"beforeactivate._change",function(e){var t=e.target;Z.test(t.nodeName)&&!x._data(t,"changeBubbles")&&(x.event.add(t,"change._change",function(e){!this.parentNode||e.isSimulated||e.isTrigger||x.event.simulate("change",this.parentNode,e,!0)}),x._data(t,"changeBubbles",!0))}),t)},handle:function(e){var n=e.target;return this!==n||e.isSimulated||e.isTrigger||"radio"!==n.type&&"checkbox"!==n.type?e.handleObj.handler.apply(this,arguments):t},teardown:function(){return x.event.remove(this,"._change"),!Z.test(this.nodeName)}}),x.support.focusinBubbles||x.each({focus:"focusin",blur:"focusout"},function(e,t){var n=0,r=function(e){x.event.simulate(t,e.target,x.event.fix(e),!0)};x.event.special[t]={setup:function(){0===n++&&a.addEventListener(e,r,!0)},teardown:function(){0===--n&&a.removeEventListener(e,r,!0)}}}),x.fn.extend({on:function(e,n,r,i,o){var a,s;if("object"==typeof e){"string"!=typeof n&&(r=r||n,n=t);for(a in e)this.on(a,n,r,e[a],o);return this}if(null==r&&null==i?(i=n,r=n=t):null==i&&("string"==typeof n?(i=r,r=t):(i=r,r=n,n=t)),i===!1)i=ot;else if(!i)return this;return 1===o&&(s=i,i=function(e){return x().off(e),s.apply(this,arguments)},i.guid=s.guid||(s.guid=x.guid++)),this.each(function(){x.event.add(this,e,i,r,n)})},one:function(e,t,n,r){return this.on(e,t,n,r,1)},off:function(e,n,r){var i,o;if(e&&e.preventDefault&&e.handleObj)return i=e.handleObj,x(e.delegateTarget).off(i.namespace?i.origType+"."+i.namespace:i.origType,i.selector,i.handler),this;if("object"==typeof e){for(o in e)this.off(o,n,e[o]);return this}return(n===!1||"function"==typeof n)&&(r=n,n=t),r===!1&&(r=ot),this.each(function(){x.event.remove(this,e,r,n)})},trigger:function(e,t){return this.each(function(){x.event.trigger(e,t,this)})},triggerHandler:function(e,n){var r=this[0];return r?x.event.trigger(e,n,r,!0):t}});var st=/^.[^:#\[\.,]*$/,lt=/^(?:parents|prev(?:Until|All))/,ut=x.expr.match.needsContext,ct={children:!0,contents:!0,next:!0,prev:!0};x.fn.extend({find:function(e){var t,n=[],r=this,i=r.length;if("string"!=typeof e)return this.pushStack(x(e).filter(function(){for(t=0;i>t;t++)if(x.contains(r[t],this))return!0}));for(t=0;i>t;t++)x.find(e,r[t],n);return n=this.pushStack(i>1?x.unique(n):n),n.selector=this.selector?this.selector+" "+e:e,n},has:function(e){var t,n=x(e,this),r=n.length;return this.filter(function(){for(t=0;r>t;t++)if(x.contains(this,n[t]))return!0})},not:function(e){return this.pushStack(ft(this,e||[],!0))},filter:function(e){return this.pushStack(ft(this,e||[],!1))},is:function(e){return!!ft(this,"string"==typeof e&&ut.test(e)?x(e):e||[],!1).length},closest:function(e,t){var n,r=0,i=this.length,o=[],a=ut.test(e)||"string"!=typeof e?x(e,t||this.context):0;for(;i>r;r++)for(n=this[r];n&&n!==t;n=n.parentNode)if(11>n.nodeType&&(a?a.index(n)>-1:1===n.nodeType&&x.find.matchesSelector(n,e))){n=o.push(n);break}return this.pushStack(o.length>1?x.unique(o):o)},index:function(e){return e?"string"==typeof e?x.inArray(this[0],x(e)):x.inArray(e.jquery?e[0]:e,this):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(e,t){var n="string"==typeof e?x(e,t):x.makeArray(e&&e.nodeType?[e]:e),r=x.merge(this.get(),n);return this.pushStack(x.unique(r))},addBack:function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}});function pt(e,t){do e=e[t];while(e&&1!==e.nodeType);return e}x.each({parent:function(e){var t=e.parentNode;return t&&11!==t.nodeType?t:null},parents:function(e){return x.dir(e,"parentNode")},parentsUntil:function(e,t,n){return x.dir(e,"parentNode",n)},next:function(e){return pt(e,"nextSibling")},prev:function(e){return pt(e,"previousSibling")},nextAll:function(e){return x.dir(e,"nextSibling")},prevAll:function(e){return x.dir(e,"previousSibling")},nextUntil:function(e,t,n){return x.dir(e,"nextSibling",n)},prevUntil:function(e,t,n){return x.dir(e,"previousSibling",n)},siblings:function(e){return x.sibling((e.parentNode||{}).firstChild,e)},children:function(e){return x.sibling(e.firstChild)},contents:function(e){return x.nodeName(e,"iframe")?e.contentDocument||e.contentWindow.document:x.merge([],e.childNodes)}},function(e,t){x.fn[e]=function(n,r){var i=x.map(this,t,n);return"Until"!==e.slice(-5)&&(r=n),r&&"string"==typeof r&&(i=x.filter(r,i)),this.length>1&&(ct[e]||(i=x.unique(i)),lt.test(e)&&(i=i.reverse())),this.pushStack(i)}}),x.extend({filter:function(e,t,n){var r=t[0];return n&&(e=":not("+e+")"),1===t.length&&1===r.nodeType?x.find.matchesSelector(r,e)?[r]:[]:x.find.matches(e,x.grep(t,function(e){return 1===e.nodeType}))},dir:function(e,n,r){var i=[],o=e[n];while(o&&9!==o.nodeType&&(r===t||1!==o.nodeType||!x(o).is(r)))1===o.nodeType&&i.push(o),o=o[n];return i},sibling:function(e,t){var n=[];for(;e;e=e.nextSibling)1===e.nodeType&&e!==t&&n.push(e);return n}});function ft(e,t,n){if(x.isFunction(t))return x.grep(e,function(e,r){return!!t.call(e,r,e)!==n});if(t.nodeType)return x.grep(e,function(e){return e===t!==n});if("string"==typeof t){if(st.test(t))return x.filter(t,e,n);t=x.filter(t,e)}return x.grep(e,function(e){return x.inArray(e,t)>=0!==n})}function dt(e){var t=ht.split("|"),n=e.createDocumentFragment();if(n.createElement)while(t.length)n.createElement(t.pop());return n}var ht="abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",gt=/ jQuery\d+="(?:null|\d+)"/g,mt=RegExp("<(?:"+ht+")[\\s/>]","i"),yt=/^\s+/,vt=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,bt=/<([\w:]+)/,xt=/\s*$/g,At={option:[1,""],legend:[1,"
          ","
          "],area:[1,"",""],param:[1,"",""],thead:[1,"","
          "],tr:[2,"","
          "],col:[2,"","
          "],td:[3,"","
          "],_default:x.support.htmlSerialize?[0,"",""]:[1,"X
          ","
          "]},jt=dt(a),Dt=jt.appendChild(a.createElement("div"));At.optgroup=At.option,At.tbody=At.tfoot=At.colgroup=At.caption=At.thead,At.th=At.td,x.fn.extend({text:function(e){return x.access(this,function(e){return e===t?x.text(this):this.empty().append((this[0]&&this[0].ownerDocument||a).createTextNode(e))},null,e,arguments.length)},append:function(){return this.domManip(arguments,function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=Lt(this,e);t.appendChild(e)}})},prepend:function(){return this.domManip(arguments,function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=Lt(this,e);t.insertBefore(e,t.firstChild)}})},before:function(){return this.domManip(arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this)})},after:function(){return this.domManip(arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this.nextSibling)})},remove:function(e,t){var n,r=e?x.filter(e,this):this,i=0;for(;null!=(n=r[i]);i++)t||1!==n.nodeType||x.cleanData(Ft(n)),n.parentNode&&(t&&x.contains(n.ownerDocument,n)&&_t(Ft(n,"script")),n.parentNode.removeChild(n));return this},empty:function(){var e,t=0;for(;null!=(e=this[t]);t++){1===e.nodeType&&x.cleanData(Ft(e,!1));while(e.firstChild)e.removeChild(e.firstChild);e.options&&x.nodeName(e,"select")&&(e.options.length=0)}return this},clone:function(e,t){return e=null==e?!1:e,t=null==t?e:t,this.map(function(){return x.clone(this,e,t)})},html:function(e){return x.access(this,function(e){var n=this[0]||{},r=0,i=this.length;if(e===t)return 1===n.nodeType?n.innerHTML.replace(gt,""):t;if(!("string"!=typeof e||Tt.test(e)||!x.support.htmlSerialize&&mt.test(e)||!x.support.leadingWhitespace&&yt.test(e)||At[(bt.exec(e)||["",""])[1].toLowerCase()])){e=e.replace(vt,"<$1>");try{for(;i>r;r++)n=this[r]||{},1===n.nodeType&&(x.cleanData(Ft(n,!1)),n.innerHTML=e);n=0}catch(o){}}n&&this.empty().append(e)},null,e,arguments.length)},replaceWith:function(){var e=x.map(this,function(e){return[e.nextSibling,e.parentNode]}),t=0;return this.domManip(arguments,function(n){var r=e[t++],i=e[t++];i&&(r&&r.parentNode!==i&&(r=this.nextSibling),x(this).remove(),i.insertBefore(n,r))},!0),t?this:this.remove()},detach:function(e){return this.remove(e,!0)},domManip:function(e,t,n){e=d.apply([],e);var r,i,o,a,s,l,u=0,c=this.length,p=this,f=c-1,h=e[0],g=x.isFunction(h);if(g||!(1>=c||"string"!=typeof h||x.support.checkClone)&&Nt.test(h))return this.each(function(r){var i=p.eq(r);g&&(e[0]=h.call(this,r,i.html())),i.domManip(e,t,n)});if(c&&(l=x.buildFragment(e,this[0].ownerDocument,!1,!n&&this),r=l.firstChild,1===l.childNodes.length&&(l=r),r)){for(a=x.map(Ft(l,"script"),Ht),o=a.length;c>u;u++)i=l,u!==f&&(i=x.clone(i,!0,!0),o&&x.merge(a,Ft(i,"script"))),t.call(this[u],i,u);if(o)for(s=a[a.length-1].ownerDocument,x.map(a,qt),u=0;o>u;u++)i=a[u],kt.test(i.type||"")&&!x._data(i,"globalEval")&&x.contains(s,i)&&(i.src?x._evalUrl(i.src):x.globalEval((i.text||i.textContent||i.innerHTML||"").replace(St,"")));l=r=null}return this}});function Lt(e,t){return x.nodeName(e,"table")&&x.nodeName(1===t.nodeType?t:t.firstChild,"tr")?e.getElementsByTagName("tbody")[0]||e.appendChild(e.ownerDocument.createElement("tbody")):e}function Ht(e){return e.type=(null!==x.find.attr(e,"type"))+"/"+e.type,e}function qt(e){var t=Et.exec(e.type);return t?e.type=t[1]:e.removeAttribute("type"),e}function _t(e,t){var n,r=0;for(;null!=(n=e[r]);r++)x._data(n,"globalEval",!t||x._data(t[r],"globalEval"))}function Mt(e,t){if(1===t.nodeType&&x.hasData(e)){var n,r,i,o=x._data(e),a=x._data(t,o),s=o.events;if(s){delete a.handle,a.events={};for(n in s)for(r=0,i=s[n].length;i>r;r++)x.event.add(t,n,s[n][r])}a.data&&(a.data=x.extend({},a.data))}}function Ot(e,t){var n,r,i;if(1===t.nodeType){if(n=t.nodeName.toLowerCase(),!x.support.noCloneEvent&&t[x.expando]){i=x._data(t);for(r in i.events)x.removeEvent(t,r,i.handle);t.removeAttribute(x.expando)}"script"===n&&t.text!==e.text?(Ht(t).text=e.text,qt(t)):"object"===n?(t.parentNode&&(t.outerHTML=e.outerHTML),x.support.html5Clone&&e.innerHTML&&!x.trim(t.innerHTML)&&(t.innerHTML=e.innerHTML)):"input"===n&&Ct.test(e.type)?(t.defaultChecked=t.checked=e.checked,t.value!==e.value&&(t.value=e.value)):"option"===n?t.defaultSelected=t.selected=e.defaultSelected:("input"===n||"textarea"===n)&&(t.defaultValue=e.defaultValue)}}x.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(e,t){x.fn[e]=function(e){var n,r=0,i=[],o=x(e),a=o.length-1;for(;a>=r;r++)n=r===a?this:this.clone(!0),x(o[r])[t](n),h.apply(i,n.get());return this.pushStack(i)}});function Ft(e,n){var r,o,a=0,s=typeof e.getElementsByTagName!==i?e.getElementsByTagName(n||"*"):typeof e.querySelectorAll!==i?e.querySelectorAll(n||"*"):t;if(!s)for(s=[],r=e.childNodes||e;null!=(o=r[a]);a++)!n||x.nodeName(o,n)?s.push(o):x.merge(s,Ft(o,n));return n===t||n&&x.nodeName(e,n)?x.merge([e],s):s}function Bt(e){Ct.test(e.type)&&(e.defaultChecked=e.checked)}x.extend({clone:function(e,t,n){var r,i,o,a,s,l=x.contains(e.ownerDocument,e);if(x.support.html5Clone||x.isXMLDoc(e)||!mt.test("<"+e.nodeName+">")?o=e.cloneNode(!0):(Dt.innerHTML=e.outerHTML,Dt.removeChild(o=Dt.firstChild)),!(x.support.noCloneEvent&&x.support.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||x.isXMLDoc(e)))for(r=Ft(o),s=Ft(e),a=0;null!=(i=s[a]);++a)r[a]&&Ot(i,r[a]);if(t)if(n)for(s=s||Ft(e),r=r||Ft(o),a=0;null!=(i=s[a]);a++)Mt(i,r[a]);else Mt(e,o);return r=Ft(o,"script"),r.length>0&&_t(r,!l&&Ft(e,"script")),r=s=i=null,o},buildFragment:function(e,t,n,r){var i,o,a,s,l,u,c,p=e.length,f=dt(t),d=[],h=0;for(;p>h;h++)if(o=e[h],o||0===o)if("object"===x.type(o))x.merge(d,o.nodeType?[o]:o);else if(wt.test(o)){s=s||f.appendChild(t.createElement("div")),l=(bt.exec(o)||["",""])[1].toLowerCase(),c=At[l]||At._default,s.innerHTML=c[1]+o.replace(vt,"<$1>")+c[2],i=c[0];while(i--)s=s.lastChild;if(!x.support.leadingWhitespace&&yt.test(o)&&d.push(t.createTextNode(yt.exec(o)[0])),!x.support.tbody){o="table"!==l||xt.test(o)?""!==c[1]||xt.test(o)?0:s:s.firstChild,i=o&&o.childNodes.length;while(i--)x.nodeName(u=o.childNodes[i],"tbody")&&!u.childNodes.length&&o.removeChild(u)}x.merge(d,s.childNodes),s.textContent="";while(s.firstChild)s.removeChild(s.firstChild);s=f.lastChild}else d.push(t.createTextNode(o));s&&f.removeChild(s),x.support.appendChecked||x.grep(Ft(d,"input"),Bt),h=0;while(o=d[h++])if((!r||-1===x.inArray(o,r))&&(a=x.contains(o.ownerDocument,o),s=Ft(f.appendChild(o),"script"),a&&_t(s),n)){i=0;while(o=s[i++])kt.test(o.type||"")&&n.push(o)}return s=null,f},cleanData:function(e,t){var n,r,o,a,s=0,l=x.expando,u=x.cache,c=x.support.deleteExpando,f=x.event.special;for(;null!=(n=e[s]);s++)if((t||x.acceptData(n))&&(o=n[l],a=o&&u[o])){if(a.events)for(r in a.events)f[r]?x.event.remove(n,r):x.removeEvent(n,r,a.handle); +u[o]&&(delete u[o],c?delete n[l]:typeof n.removeAttribute!==i?n.removeAttribute(l):n[l]=null,p.push(o))}},_evalUrl:function(e){return x.ajax({url:e,type:"GET",dataType:"script",async:!1,global:!1,"throws":!0})}}),x.fn.extend({wrapAll:function(e){if(x.isFunction(e))return this.each(function(t){x(this).wrapAll(e.call(this,t))});if(this[0]){var t=x(e,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&t.insertBefore(this[0]),t.map(function(){var e=this;while(e.firstChild&&1===e.firstChild.nodeType)e=e.firstChild;return e}).append(this)}return this},wrapInner:function(e){return x.isFunction(e)?this.each(function(t){x(this).wrapInner(e.call(this,t))}):this.each(function(){var t=x(this),n=t.contents();n.length?n.wrapAll(e):t.append(e)})},wrap:function(e){var t=x.isFunction(e);return this.each(function(n){x(this).wrapAll(t?e.call(this,n):e)})},unwrap:function(){return this.parent().each(function(){x.nodeName(this,"body")||x(this).replaceWith(this.childNodes)}).end()}});var Pt,Rt,Wt,$t=/alpha\([^)]*\)/i,It=/opacity\s*=\s*([^)]*)/,zt=/^(top|right|bottom|left)$/,Xt=/^(none|table(?!-c[ea]).+)/,Ut=/^margin/,Vt=RegExp("^("+w+")(.*)$","i"),Yt=RegExp("^("+w+")(?!px)[a-z%]+$","i"),Jt=RegExp("^([+-])=("+w+")","i"),Gt={BODY:"block"},Qt={position:"absolute",visibility:"hidden",display:"block"},Kt={letterSpacing:0,fontWeight:400},Zt=["Top","Right","Bottom","Left"],en=["Webkit","O","Moz","ms"];function tn(e,t){if(t in e)return t;var n=t.charAt(0).toUpperCase()+t.slice(1),r=t,i=en.length;while(i--)if(t=en[i]+n,t in e)return t;return r}function nn(e,t){return e=t||e,"none"===x.css(e,"display")||!x.contains(e.ownerDocument,e)}function rn(e,t){var n,r,i,o=[],a=0,s=e.length;for(;s>a;a++)r=e[a],r.style&&(o[a]=x._data(r,"olddisplay"),n=r.style.display,t?(o[a]||"none"!==n||(r.style.display=""),""===r.style.display&&nn(r)&&(o[a]=x._data(r,"olddisplay",ln(r.nodeName)))):o[a]||(i=nn(r),(n&&"none"!==n||!i)&&x._data(r,"olddisplay",i?n:x.css(r,"display"))));for(a=0;s>a;a++)r=e[a],r.style&&(t&&"none"!==r.style.display&&""!==r.style.display||(r.style.display=t?o[a]||"":"none"));return e}x.fn.extend({css:function(e,n){return x.access(this,function(e,n,r){var i,o,a={},s=0;if(x.isArray(n)){for(o=Rt(e),i=n.length;i>s;s++)a[n[s]]=x.css(e,n[s],!1,o);return a}return r!==t?x.style(e,n,r):x.css(e,n)},e,n,arguments.length>1)},show:function(){return rn(this,!0)},hide:function(){return rn(this)},toggle:function(e){return"boolean"==typeof e?e?this.show():this.hide():this.each(function(){nn(this)?x(this).show():x(this).hide()})}}),x.extend({cssHooks:{opacity:{get:function(e,t){if(t){var n=Wt(e,"opacity");return""===n?"1":n}}}},cssNumber:{columnCount:!0,fillOpacity:!0,fontWeight:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":x.support.cssFloat?"cssFloat":"styleFloat"},style:function(e,n,r,i){if(e&&3!==e.nodeType&&8!==e.nodeType&&e.style){var o,a,s,l=x.camelCase(n),u=e.style;if(n=x.cssProps[l]||(x.cssProps[l]=tn(u,l)),s=x.cssHooks[n]||x.cssHooks[l],r===t)return s&&"get"in s&&(o=s.get(e,!1,i))!==t?o:u[n];if(a=typeof r,"string"===a&&(o=Jt.exec(r))&&(r=(o[1]+1)*o[2]+parseFloat(x.css(e,n)),a="number"),!(null==r||"number"===a&&isNaN(r)||("number"!==a||x.cssNumber[l]||(r+="px"),x.support.clearCloneStyle||""!==r||0!==n.indexOf("background")||(u[n]="inherit"),s&&"set"in s&&(r=s.set(e,r,i))===t)))try{u[n]=r}catch(c){}}},css:function(e,n,r,i){var o,a,s,l=x.camelCase(n);return n=x.cssProps[l]||(x.cssProps[l]=tn(e.style,l)),s=x.cssHooks[n]||x.cssHooks[l],s&&"get"in s&&(a=s.get(e,!0,r)),a===t&&(a=Wt(e,n,i)),"normal"===a&&n in Kt&&(a=Kt[n]),""===r||r?(o=parseFloat(a),r===!0||x.isNumeric(o)?o||0:a):a}}),e.getComputedStyle?(Rt=function(t){return e.getComputedStyle(t,null)},Wt=function(e,n,r){var i,o,a,s=r||Rt(e),l=s?s.getPropertyValue(n)||s[n]:t,u=e.style;return s&&(""!==l||x.contains(e.ownerDocument,e)||(l=x.style(e,n)),Yt.test(l)&&Ut.test(n)&&(i=u.width,o=u.minWidth,a=u.maxWidth,u.minWidth=u.maxWidth=u.width=l,l=s.width,u.width=i,u.minWidth=o,u.maxWidth=a)),l}):a.documentElement.currentStyle&&(Rt=function(e){return e.currentStyle},Wt=function(e,n,r){var i,o,a,s=r||Rt(e),l=s?s[n]:t,u=e.style;return null==l&&u&&u[n]&&(l=u[n]),Yt.test(l)&&!zt.test(n)&&(i=u.left,o=e.runtimeStyle,a=o&&o.left,a&&(o.left=e.currentStyle.left),u.left="fontSize"===n?"1em":l,l=u.pixelLeft+"px",u.left=i,a&&(o.left=a)),""===l?"auto":l});function on(e,t,n){var r=Vt.exec(t);return r?Math.max(0,r[1]-(n||0))+(r[2]||"px"):t}function an(e,t,n,r,i){var o=n===(r?"border":"content")?4:"width"===t?1:0,a=0;for(;4>o;o+=2)"margin"===n&&(a+=x.css(e,n+Zt[o],!0,i)),r?("content"===n&&(a-=x.css(e,"padding"+Zt[o],!0,i)),"margin"!==n&&(a-=x.css(e,"border"+Zt[o]+"Width",!0,i))):(a+=x.css(e,"padding"+Zt[o],!0,i),"padding"!==n&&(a+=x.css(e,"border"+Zt[o]+"Width",!0,i)));return a}function sn(e,t,n){var r=!0,i="width"===t?e.offsetWidth:e.offsetHeight,o=Rt(e),a=x.support.boxSizing&&"border-box"===x.css(e,"boxSizing",!1,o);if(0>=i||null==i){if(i=Wt(e,t,o),(0>i||null==i)&&(i=e.style[t]),Yt.test(i))return i;r=a&&(x.support.boxSizingReliable||i===e.style[t]),i=parseFloat(i)||0}return i+an(e,t,n||(a?"border":"content"),r,o)+"px"}function ln(e){var t=a,n=Gt[e];return n||(n=un(e,t),"none"!==n&&n||(Pt=(Pt||x("