aboutsummaryrefslogtreecommitdiff
path: root/h-source
diff options
context:
space:
mode:
Diffstat (limited to 'h-source')
-rwxr-xr-xh-source/.htaccess7
-rw-r--r--h-source/Application/Controllers/BaseController.php34
-rw-r--r--h-source/Application/Controllers/ManagerController.php72
-rw-r--r--h-source/Application/Controllers/UsersController.php4
-rw-r--r--h-source/Application/Controllers/WikiController.php3
-rwxr-xr-x[-rw-r--r--]h-source/Application/Hooks/AfterInitialization.php0
-rwxr-xr-x[-rw-r--r--]h-source/Application/Hooks/BeforeChecks.php7
-rwxr-xr-x[-rw-r--r--]h-source/Application/Hooks/BeforeInitialization.php0
-rwxr-xr-x[-rw-r--r--]h-source/Application/Hooks/index.html0
-rw-r--r--h-source/Application/Include/hardware.php2
-rw-r--r--h-source/Application/Include/params.php228
-rw-r--r--h-source/Application/Include/vendors.php4191
-rw-r--r--h-source/Application/Views/Desktop/Contact/index.php39
-rw-r--r--h-source/Application/Views/Desktop/Contact/index_de.php (renamed from h-source/Template/Desktop/Contact/index.php)22
-rw-r--r--h-source/Application/Views/Desktop/Contact/index_es.php (renamed from h-source/Template/Desktop/Contact/index_es.php)22
-rw-r--r--h-source/Application/Views/Desktop/Contact/index_fr.php39
-rw-r--r--h-source/Application/Views/Desktop/Contact/index_gr.php39
-rw-r--r--h-source/Application/Views/Desktop/Contact/index_it.php (renamed from h-source/Template/Desktop/Contact/index_it.php)22
-rw-r--r--h-source/Application/Views/Desktop/Credits/index_gr.php65
-rw-r--r--h-source/Application/Views/Desktop/Help/index.php449
-rw-r--r--h-source/Application/Views/Desktop/Help/index_de.php445
-rw-r--r--h-source/Application/Views/Desktop/Help/index_es.php442
-rw-r--r--h-source/Application/Views/Desktop/Help/index_fr.php434
-rw-r--r--h-source/Application/Views/Desktop/Help/index_it.php438
-rw-r--r--h-source/Application/Views/Desktop/Home/left.php85
-rw-r--r--h-source/Application/Views/Desktop/Home/left_de.php87
-rw-r--r--h-source/Application/Views/Desktop/Home/left_es.php86
-rw-r--r--h-source/Application/Views/Desktop/Home/left_fr.php89
-rw-r--r--h-source/Application/Views/Desktop/Home/left_gr.php88
-rw-r--r--h-source/Application/Views/Desktop/Home/left_it.php89
-rw-r--r--h-source/Application/Views/Desktop/Notebooks/.svn/entries96
-rw-r--r--h-source/Application/Views/Desktop/Notebooks/.svn/text-base/form.php.svn-base156
-rw-r--r--h-source/Application/Views/Desktop/Notebooks/.svn/text-base/page.php.svn-base120
-rw-r--r--h-source/Application/Views/Desktop/Project/index.php47
-rw-r--r--h-source/Application/Views/Desktop/Project/index_de.php49
-rw-r--r--h-source/Application/Views/Desktop/Project/index_es.php49
-rw-r--r--h-source/Application/Views/Desktop/Project/index_fr.php48
-rw-r--r--h-source/Application/Views/Desktop/Project/index_gr.php48
-rw-r--r--h-source/Application/Views/Desktop/Project/index_it.php48
-rw-r--r--h-source/Application/Views/Desktop/Search/lspci_results.php2
-rw-r--r--h-source/Application/Views/Desktop/Wiki/not_found.php (renamed from h-source/Application/Views/Desktop/Manager/distros.php)15
-rw-r--r--h-source/Application/Views/Desktop/Wiki/page.php154
-rw-r--r--h-source/Application/Views/Desktop/footer.php27
-rw-r--r--h-source/Application/Views/Desktop/header.php9
-rw-r--r--h-source/Application/Views/Desktop/wiki_page.php5
-rw-r--r--h-source/Application/Views/Mobile/Contact/index.php29
-rw-r--r--h-source/Application/Views/Mobile/Contact/index_de.php (renamed from h-source/Template/Mobile/Contact/index_es.php)12
-rw-r--r--h-source/Application/Views/Mobile/Contact/index_es.php (renamed from h-source/Template/Mobile/Contact/index.php)12
-rw-r--r--h-source/Application/Views/Mobile/Contact/index_fr.php (renamed from h-source/Template/Mobile/Project/index.php)14
-rw-r--r--h-source/Application/Views/Mobile/Contact/index_gr.php41
-rw-r--r--h-source/Application/Views/Mobile/Contact/index_it.php (renamed from h-source/Template/Mobile/Contact/index_it.php)12
-rw-r--r--h-source/Application/Views/Mobile/Credits/index_gr.php65
-rw-r--r--h-source/Application/Views/Mobile/Home/left.php76
-rw-r--r--h-source/Application/Views/Mobile/Home/left_de.php87
-rw-r--r--h-source/Application/Views/Mobile/Home/left_es.php87
-rw-r--r--h-source/Application/Views/Mobile/Home/left_fr.php89
-rw-r--r--h-source/Application/Views/Mobile/Home/left_gr.php88
-rw-r--r--h-source/Application/Views/Mobile/Home/left_it.php89
-rw-r--r--h-source/Application/Views/Mobile/Project/index.php38
-rw-r--r--h-source/Application/Views/Mobile/Project/index_de.php51
-rw-r--r--h-source/Application/Views/Mobile/Project/index_es.php51
-rw-r--r--h-source/Application/Views/Mobile/Project/index_fr.php50
-rw-r--r--h-source/Application/Views/Mobile/Project/index_gr.php50
-rw-r--r--h-source/Application/Views/Mobile/Project/index_it.php50
-rw-r--r--h-source/Application/Views/Mobile/footer.php6
-rw-r--r--h-source/Application/Views/Mobile/header.php4
-rwxr-xr-x[-rw-r--r--]h-source/Application/index.html0
-rwxr-xr-xh-source/COPYRIGHT.txt18
-rwxr-xr-xh-source/Config/Config.php58
-rwxr-xr-xh-source/Config/Reporting.php29
-rwxr-xr-xh-source/Config/Restricted.php19
-rw-r--r--h-source/Config/Route.php1
-rw-r--r--h-source/Contributors.txt14
-rwxr-xr-x[-rw-r--r--]h-source/Credits.txt16
-rw-r--r--h-source/Css/comune.css130
-rwxr-xr-xh-source/Css/explorer6.css112
-rw-r--r--h-source/Css/explorer7.css25
-rw-r--r--h-source/Css/files.css113
-rwxr-xr-xh-source/Css/form.css31
-rw-r--r--[-rwxr-xr-x]h-source/Css/index.html (renamed from h-source/Library/Lang/En/Formats/From/index.html)0
-rw-r--r--h-source/Css/login.css21
-rw-r--r--h-source/Css/main.css2249
-rwxr-xr-xh-source/Css/mainmenu.css78
-rw-r--r--h-source/Css/mobile.css271
-rw-r--r--h-source/Css/pagelist.css29
-rw-r--r--h-source/Css/panel.css74
-rwxr-xr-xh-source/Css/popupmenu.css49
-rwxr-xr-xh-source/Css/scaffold.css105
-rwxr-xr-x[-rw-r--r--]h-source/External/Fonts/FreeFont/AUTHORS0
-rwxr-xr-x[-rw-r--r--]h-source/External/Fonts/FreeFont/COPYING0
-rwxr-xr-x[-rw-r--r--]h-source/External/Fonts/FreeFont/CREDITS0
-rwxr-xr-x[-rw-r--r--]h-source/External/Fonts/FreeFont/ChangeLog0
-rwxr-xr-x[-rw-r--r--]h-source/External/Fonts/FreeFont/FreeMono.ttfbin314348 -> 314348 bytes
-rwxr-xr-x[-rw-r--r--]h-source/External/Fonts/FreeFont/INSTALL0
-rwxr-xr-x[-rw-r--r--]h-source/External/Fonts/FreeFont/README0
-rwxr-xr-x[-rw-r--r--]h-source/External/swiftmailer/lib/classes/Swift.php0
-rwxr-xr-x[-rw-r--r--]h-source/External/swiftmailer/lib/classes/Swift/Attachment.php0
-rwxr-xr-x[-rw-r--r--]h-source/External/swiftmailer/lib/classes/Swift/ByteStream/AbstractFilterableInputStream.php0
-rwxr-xr-x[-rw-r--r--]h-source/External/swiftmailer/lib/classes/Swift/ByteStream/ArrayByteStream.php0
-rwxr-xr-x[-rw-r--r--]h-source/External/swiftmailer/lib/classes/Swift/ByteStream/FileByteStream.php0
-rwxr-xr-x[-rw-r--r--]h-source/External/swiftmailer/lib/classes/Swift/CharacterReader.php0
-rwxr-xr-x[-rw-r--r--]h-source/External/swiftmailer/lib/classes/Swift/CharacterReader/GenericFixedWidthReader.php0
-rwxr-xr-x[-rw-r--r--]h-source/External/swiftmailer/lib/classes/Swift/CharacterReader/UsAsciiReader.php0
-rwxr-xr-x[-rw-r--r--]h-source/External/swiftmailer/lib/classes/Swift/CharacterReader/Utf8Reader.php0
-rwxr-xr-x[-rw-r--r--]h-source/External/swiftmailer/lib/classes/Swift/CharacterReaderFactory.php0
-rwxr-xr-x[-rw-r--r--]h-source/External/swiftmailer/lib/classes/Swift/CharacterReaderFactory/SimpleCharacterReaderFactory.php0
-rwxr-xr-x[-rw-r--r--]h-source/External/swiftmailer/lib/classes/Swift/CharacterStream.php0
-rwxr-xr-x[-rw-r--r--]h-source/External/swiftmailer/lib/classes/Swift/CharacterStream/ArrayCharacterStream.php0
-rwxr-xr-x[-rw-r--r--]h-source/External/swiftmailer/lib/classes/Swift/CharacterStream/NgCharacterStream.php0
-rwxr-xr-x[-rw-r--r--]h-source/External/swiftmailer/lib/classes/Swift/DependencyContainer.php0
-rwxr-xr-x[-rw-r--r--]h-source/External/swiftmailer/lib/classes/Swift/DependencyException.php0
-rwxr-xr-x[-rw-r--r--]h-source/External/swiftmailer/lib/classes/Swift/EmbeddedFile.php0
-rwxr-xr-x[-rw-r--r--]h-source/External/swiftmailer/lib/classes/Swift/Encoder.php0
-rwxr-xr-x[-rw-r--r--]h-source/External/swiftmailer/lib/classes/Swift/Encoder/Base64Encoder.php0
-rwxr-xr-x[-rw-r--r--]h-source/External/swiftmailer/lib/classes/Swift/Encoder/QpEncoder.php0
-rwxr-xr-x[-rw-r--r--]h-source/External/swiftmailer/lib/classes/Swift/Encoder/Rfc2231Encoder.php0
-rwxr-xr-x[-rw-r--r--]h-source/External/swiftmailer/lib/classes/Swift/Encoding.php0
-rwxr-xr-x[-rw-r--r--]h-source/External/swiftmailer/lib/classes/Swift/Events/CommandEvent.php0
-rwxr-xr-x[-rw-r--r--]h-source/External/swiftmailer/lib/classes/Swift/Events/CommandListener.php0
-rwxr-xr-x[-rw-r--r--]h-source/External/swiftmailer/lib/classes/Swift/Events/Event.php0
-rwxr-xr-x[-rw-r--r--]h-source/External/swiftmailer/lib/classes/Swift/Events/EventDispatcher.php0
-rwxr-xr-x[-rw-r--r--]h-source/External/swiftmailer/lib/classes/Swift/Events/EventListener.php0
-rwxr-xr-x[-rw-r--r--]h-source/External/swiftmailer/lib/classes/Swift/Events/EventObject.php0
-rwxr-xr-x[-rw-r--r--]h-source/External/swiftmailer/lib/classes/Swift/Events/ResponseEvent.php0
-rwxr-xr-x[-rw-r--r--]h-source/External/swiftmailer/lib/classes/Swift/Events/ResponseListener.php0
-rwxr-xr-x[-rw-r--r--]h-source/External/swiftmailer/lib/classes/Swift/Events/SendEvent.php0
-rwxr-xr-x[-rw-r--r--]h-source/External/swiftmailer/lib/classes/Swift/Events/SendListener.php0
-rwxr-xr-x[-rw-r--r--]h-source/External/swiftmailer/lib/classes/Swift/Events/SimpleEventDispatcher.php0
-rwxr-xr-x[-rw-r--r--]h-source/External/swiftmailer/lib/classes/Swift/Events/TransportChangeEvent.php0
-rwxr-xr-x[-rw-r--r--]h-source/External/swiftmailer/lib/classes/Swift/Events/TransportChangeListener.php0
-rwxr-xr-x[-rw-r--r--]h-source/External/swiftmailer/lib/classes/Swift/Events/TransportExceptionEvent.php0
-rwxr-xr-x[-rw-r--r--]h-source/External/swiftmailer/lib/classes/Swift/Events/TransportExceptionListener.php0
-rwxr-xr-x[-rw-r--r--]h-source/External/swiftmailer/lib/classes/Swift/FailoverTransport.php0
-rwxr-xr-x[-rw-r--r--]h-source/External/swiftmailer/lib/classes/Swift/FileStream.php0
-rwxr-xr-x[-rw-r--r--]h-source/External/swiftmailer/lib/classes/Swift/Filterable.php0
-rwxr-xr-x[-rw-r--r--]h-source/External/swiftmailer/lib/classes/Swift/Image.php0
-rwxr-xr-x[-rw-r--r--]h-source/External/swiftmailer/lib/classes/Swift/InputByteStream.php0
-rwxr-xr-x[-rw-r--r--]h-source/External/swiftmailer/lib/classes/Swift/IoException.php0
-rwxr-xr-x[-rw-r--r--]h-source/External/swiftmailer/lib/classes/Swift/KeyCache.php0
-rwxr-xr-x[-rw-r--r--]h-source/External/swiftmailer/lib/classes/Swift/KeyCache/ArrayKeyCache.php0
-rwxr-xr-x[-rw-r--r--]h-source/External/swiftmailer/lib/classes/Swift/KeyCache/DiskKeyCache.php0
-rwxr-xr-x[-rw-r--r--]h-source/External/swiftmailer/lib/classes/Swift/KeyCache/KeyCacheInputStream.php0
-rwxr-xr-x[-rw-r--r--]h-source/External/swiftmailer/lib/classes/Swift/KeyCache/NullKeyCache.php0
-rwxr-xr-x[-rw-r--r--]h-source/External/swiftmailer/lib/classes/Swift/KeyCache/SimpleKeyCacheInputStream.php0
-rwxr-xr-x[-rw-r--r--]h-source/External/swiftmailer/lib/classes/Swift/LoadBalancedTransport.php0
-rwxr-xr-x[-rw-r--r--]h-source/External/swiftmailer/lib/classes/Swift/MailTransport.php0
-rwxr-xr-x[-rw-r--r--]h-source/External/swiftmailer/lib/classes/Swift/Mailer.php0
-rwxr-xr-x[-rw-r--r--]h-source/External/swiftmailer/lib/classes/Swift/Mailer/ArrayRecipientIterator.php0
-rwxr-xr-x[-rw-r--r--]h-source/External/swiftmailer/lib/classes/Swift/Mailer/RecipientIterator.php0
-rwxr-xr-x[-rw-r--r--]h-source/External/swiftmailer/lib/classes/Swift/Message.php0
-rwxr-xr-x[-rw-r--r--]h-source/External/swiftmailer/lib/classes/Swift/Mime/Attachment.php0
-rwxr-xr-x[-rw-r--r--]h-source/External/swiftmailer/lib/classes/Swift/Mime/CharsetObserver.php0
-rwxr-xr-x[-rw-r--r--]h-source/External/swiftmailer/lib/classes/Swift/Mime/ContentEncoder.php0
-rwxr-xr-x[-rw-r--r--]h-source/External/swiftmailer/lib/classes/Swift/Mime/ContentEncoder/Base64ContentEncoder.php0
-rwxr-xr-x[-rw-r--r--]h-source/External/swiftmailer/lib/classes/Swift/Mime/ContentEncoder/PlainContentEncoder.php0
-rwxr-xr-x[-rw-r--r--]h-source/External/swiftmailer/lib/classes/Swift/Mime/ContentEncoder/QpContentEncoder.php0
-rwxr-xr-x[-rw-r--r--]h-source/External/swiftmailer/lib/classes/Swift/Mime/EmbeddedFile.php0
-rwxr-xr-x[-rw-r--r--]h-source/External/swiftmailer/lib/classes/Swift/Mime/EncodingObserver.php0
-rwxr-xr-x[-rw-r--r--]h-source/External/swiftmailer/lib/classes/Swift/Mime/Header.php0
-rwxr-xr-x[-rw-r--r--]h-source/External/swiftmailer/lib/classes/Swift/Mime/HeaderEncoder.php0
-rwxr-xr-x[-rw-r--r--]h-source/External/swiftmailer/lib/classes/Swift/Mime/HeaderEncoder/Base64HeaderEncoder.php0
-rwxr-xr-x[-rw-r--r--]h-source/External/swiftmailer/lib/classes/Swift/Mime/HeaderEncoder/QpHeaderEncoder.php0
-rwxr-xr-x[-rw-r--r--]h-source/External/swiftmailer/lib/classes/Swift/Mime/HeaderFactory.php0
-rwxr-xr-x[-rw-r--r--]h-source/External/swiftmailer/lib/classes/Swift/Mime/HeaderSet.php0
-rwxr-xr-x[-rw-r--r--]h-source/External/swiftmailer/lib/classes/Swift/Mime/Headers/AbstractHeader.php0
-rwxr-xr-x[-rw-r--r--]h-source/External/swiftmailer/lib/classes/Swift/Mime/Headers/DateHeader.php0
-rwxr-xr-x[-rw-r--r--]h-source/External/swiftmailer/lib/classes/Swift/Mime/Headers/IdentificationHeader.php0
-rwxr-xr-x[-rw-r--r--]h-source/External/swiftmailer/lib/classes/Swift/Mime/Headers/MailboxHeader.php0
-rwxr-xr-x[-rw-r--r--]h-source/External/swiftmailer/lib/classes/Swift/Mime/Headers/ParameterizedHeader.php0
-rwxr-xr-x[-rw-r--r--]h-source/External/swiftmailer/lib/classes/Swift/Mime/Headers/PathHeader.php0
-rwxr-xr-x[-rw-r--r--]h-source/External/swiftmailer/lib/classes/Swift/Mime/Headers/UnstructuredHeader.php0
-rwxr-xr-x[-rw-r--r--]h-source/External/swiftmailer/lib/classes/Swift/Mime/Message.php0
-rwxr-xr-x[-rw-r--r--]h-source/External/swiftmailer/lib/classes/Swift/Mime/MimeEntity.php0
-rwxr-xr-x[-rw-r--r--]h-source/External/swiftmailer/lib/classes/Swift/Mime/MimePart.php0
-rwxr-xr-x[-rw-r--r--]h-source/External/swiftmailer/lib/classes/Swift/Mime/ParameterizedHeader.php0
-rwxr-xr-x[-rw-r--r--]h-source/External/swiftmailer/lib/classes/Swift/Mime/SimpleHeaderFactory.php0
-rwxr-xr-x[-rw-r--r--]h-source/External/swiftmailer/lib/classes/Swift/Mime/SimpleHeaderSet.php0
-rwxr-xr-x[-rw-r--r--]h-source/External/swiftmailer/lib/classes/Swift/Mime/SimpleMessage.php0
-rwxr-xr-x[-rw-r--r--]h-source/External/swiftmailer/lib/classes/Swift/Mime/SimpleMimeEntity.php0
-rwxr-xr-x[-rw-r--r--]h-source/External/swiftmailer/lib/classes/Swift/MimePart.php0
-rwxr-xr-x[-rw-r--r--]h-source/External/swiftmailer/lib/classes/Swift/OutputByteStream.php0
-rwxr-xr-x[-rw-r--r--]h-source/External/swiftmailer/lib/classes/Swift/Plugins/AntiFloodPlugin.php0
-rwxr-xr-x[-rw-r--r--]h-source/External/swiftmailer/lib/classes/Swift/Plugins/BandwidthMonitorPlugin.php0
-rwxr-xr-x[-rw-r--r--]h-source/External/swiftmailer/lib/classes/Swift/Plugins/Decorator/Replacements.php0
-rwxr-xr-x[-rw-r--r--]h-source/External/swiftmailer/lib/classes/Swift/Plugins/DecoratorPlugin.php0
-rwxr-xr-x[-rw-r--r--]h-source/External/swiftmailer/lib/classes/Swift/Plugins/Logger.php0
-rwxr-xr-x[-rw-r--r--]h-source/External/swiftmailer/lib/classes/Swift/Plugins/LoggerPlugin.php0
-rwxr-xr-x[-rw-r--r--]h-source/External/swiftmailer/lib/classes/Swift/Plugins/Loggers/ArrayLogger.php0
-rwxr-xr-x[-rw-r--r--]h-source/External/swiftmailer/lib/classes/Swift/Plugins/Loggers/EchoLogger.php0
-rwxr-xr-x[-rw-r--r--]h-source/External/swiftmailer/lib/classes/Swift/Plugins/Pop/Pop3Connection.php0
-rwxr-xr-x[-rw-r--r--]h-source/External/swiftmailer/lib/classes/Swift/Plugins/Pop/Pop3Exception.php0
-rwxr-xr-x[-rw-r--r--]h-source/External/swiftmailer/lib/classes/Swift/Plugins/PopBeforeSmtpPlugin.php0
-rwxr-xr-x[-rw-r--r--]h-source/External/swiftmailer/lib/classes/Swift/Plugins/Reporter.php0
-rwxr-xr-x[-rw-r--r--]h-source/External/swiftmailer/lib/classes/Swift/Plugins/ReporterPlugin.php0
-rwxr-xr-x[-rw-r--r--]h-source/External/swiftmailer/lib/classes/Swift/Plugins/Reporters/HitReporter.php0
-rwxr-xr-x[-rw-r--r--]h-source/External/swiftmailer/lib/classes/Swift/Plugins/Reporters/HtmlReporter.php0
-rwxr-xr-x[-rw-r--r--]h-source/External/swiftmailer/lib/classes/Swift/Plugins/Sleeper.php0
-rwxr-xr-x[-rw-r--r--]h-source/External/swiftmailer/lib/classes/Swift/Plugins/ThrottlerPlugin.php0
-rwxr-xr-x[-rw-r--r--]h-source/External/swiftmailer/lib/classes/Swift/Plugins/Timer.php0
-rwxr-xr-x[-rw-r--r--]h-source/External/swiftmailer/lib/classes/Swift/Preferences.php0
-rwxr-xr-x[-rw-r--r--]h-source/External/swiftmailer/lib/classes/Swift/ReplacementFilterFactory.php0
-rwxr-xr-x[-rw-r--r--]h-source/External/swiftmailer/lib/classes/Swift/RfcComplianceException.php0
-rwxr-xr-x[-rw-r--r--]h-source/External/swiftmailer/lib/classes/Swift/SendmailTransport.php0
-rwxr-xr-x[-rw-r--r--]h-source/External/swiftmailer/lib/classes/Swift/SmtpTransport.php0
-rwxr-xr-x[-rw-r--r--]h-source/External/swiftmailer/lib/classes/Swift/StreamFilter.php0
-rwxr-xr-x[-rw-r--r--]h-source/External/swiftmailer/lib/classes/Swift/StreamFilters/ByteArrayReplacementFilter.php0
-rwxr-xr-x[-rw-r--r--]h-source/External/swiftmailer/lib/classes/Swift/StreamFilters/StringReplacementFilter.php0
-rwxr-xr-x[-rw-r--r--]h-source/External/swiftmailer/lib/classes/Swift/StreamFilters/StringReplacementFilterFactory.php0
-rwxr-xr-x[-rw-r--r--]h-source/External/swiftmailer/lib/classes/Swift/SwiftException.php0
-rwxr-xr-x[-rw-r--r--]h-source/External/swiftmailer/lib/classes/Swift/Transport.php0
-rwxr-xr-x[-rw-r--r--]h-source/External/swiftmailer/lib/classes/Swift/Transport/AbstractSmtpTransport.php0
-rwxr-xr-x[-rw-r--r--]h-source/External/swiftmailer/lib/classes/Swift/Transport/Esmtp/Auth/CramMd5Authenticator.php0
-rwxr-xr-x[-rw-r--r--]h-source/External/swiftmailer/lib/classes/Swift/Transport/Esmtp/Auth/LoginAuthenticator.php0
-rwxr-xr-x[-rw-r--r--]h-source/External/swiftmailer/lib/classes/Swift/Transport/Esmtp/Auth/PlainAuthenticator.php0
-rwxr-xr-x[-rw-r--r--]h-source/External/swiftmailer/lib/classes/Swift/Transport/Esmtp/AuthHandler.php0
-rwxr-xr-x[-rw-r--r--]h-source/External/swiftmailer/lib/classes/Swift/Transport/Esmtp/Authenticator.php0
-rwxr-xr-x[-rw-r--r--]h-source/External/swiftmailer/lib/classes/Swift/Transport/EsmtpHandler.php0
-rwxr-xr-x[-rw-r--r--]h-source/External/swiftmailer/lib/classes/Swift/Transport/EsmtpTransport.php0
-rwxr-xr-x[-rw-r--r--]h-source/External/swiftmailer/lib/classes/Swift/Transport/FailoverTransport.php0
-rwxr-xr-x[-rw-r--r--]h-source/External/swiftmailer/lib/classes/Swift/Transport/IoBuffer.php0
-rwxr-xr-x[-rw-r--r--]h-source/External/swiftmailer/lib/classes/Swift/Transport/LoadBalancedTransport.php0
-rwxr-xr-x[-rw-r--r--]h-source/External/swiftmailer/lib/classes/Swift/Transport/MailInvoker.php0
-rwxr-xr-x[-rw-r--r--]h-source/External/swiftmailer/lib/classes/Swift/Transport/MailTransport.php0
-rwxr-xr-x[-rw-r--r--]h-source/External/swiftmailer/lib/classes/Swift/Transport/SendmailTransport.php0
-rwxr-xr-x[-rw-r--r--]h-source/External/swiftmailer/lib/classes/Swift/Transport/SimpleMailInvoker.php0
-rwxr-xr-x[-rw-r--r--]h-source/External/swiftmailer/lib/classes/Swift/Transport/SmtpAgent.php0
-rwxr-xr-x[-rw-r--r--]h-source/External/swiftmailer/lib/classes/Swift/Transport/StreamBuffer.php1
-rwxr-xr-x[-rw-r--r--]h-source/External/swiftmailer/lib/classes/Swift/TransportException.php0
-rwxr-xr-x[-rw-r--r--]h-source/External/swiftmailer/lib/dependency_maps/cache_deps.php0
-rwxr-xr-x[-rw-r--r--]h-source/External/swiftmailer/lib/dependency_maps/mime_deps.php0
-rwxr-xr-x[-rw-r--r--]h-source/External/swiftmailer/lib/dependency_maps/transport_deps.php0
-rwxr-xr-x[-rw-r--r--]h-source/External/swiftmailer/lib/mime_types.php0
-rwxr-xr-x[-rw-r--r--]h-source/External/swiftmailer/lib/preferences.php0
-rwxr-xr-x[-rw-r--r--]h-source/External/swiftmailer/lib/swift_init.php0
-rwxr-xr-x[-rw-r--r--]h-source/External/swiftmailer/lib/swift_required.php0
-rwxr-xr-x[-rw-r--r--]h-source/External/swiftmailer/lib/swift_required_pear.php0
-rwxr-xr-xh-source/Img/Acun/book.pngbin0 -> 11591 bytes
-rwxr-xr-xh-source/Img/Acun/document_properties.pngbin0 -> 8274 bytes
-rwxr-xr-xh-source/Img/Acun/filenew.pngbin0 -> 9174 bytes
-rwxr-xr-xh-source/Img/Acun/go_previous.pngbin0 -> 10751 bytes
-rw-r--r--h-source/Img/Acun/help_hint.pngbin0 -> 13318 bytes
-rwxr-xr-xh-source/Img/Acun/note.pngbin0 -> 6045 bytes
-rw-r--r--h-source/Img/Crystal/1282042718_hardware.pngbin0 -> 20291 bytes
-rw-r--r--h-source/Img/Crystal/1282042976_hardware.pngbin0 -> 3855 bytes
-rwxr-xr-xh-source/Img/Crystal/agt_forward.pngbin0 -> 729 bytes
-rwxr-xr-xh-source/Img/Crystal/button_cancel.pngbin0 -> 792 bytes
-rwxr-xr-xh-source/Img/Crystal/button_ok.pngbin0 -> 612 bytes
-rwxr-xr-xh-source/Img/Crystal/cam_mount-22.pngbin0 -> 4075 bytes
-rwxr-xr-xh-source/Img/Crystal/cam_mount.pngbin0 -> 18928 bytes
-rwxr-xr-xh-source/Img/Crystal/clear.pngbin0 -> 1120 bytes
-rwxr-xr-xh-source/Img/Crystal/hardware.pngbin0 -> 3478 bytes
-rwxr-xr-xh-source/Img/Crystal/home.pngbin0 -> 867 bytes
-rwxr-xr-xh-source/Img/Crystal/lock.pngbin0 -> 3604 bytes
-rwxr-xr-xh-source/Img/Crystal/modem.pngbin0 -> 5434 bytes
-rwxr-xr-xh-source/Img/Crystal/modem_22.pngbin0 -> 3744 bytes
-rwxr-xr-xh-source/Img/Crystal/rss.pngbin0 -> 2110 bytes
-rwxr-xr-xh-source/Img/Crystal/unlock.pngbin0 -> 3995 bytes
-rwxr-xr-xh-source/Img/Crystal/usb.pngbin0 -> 8059 bytes
-rwxr-xr-xh-source/Img/Crystal/usb_22.pngbin0 -> 1123 bytes
-rwxr-xr-xh-source/Img/Famfamfam/de.pngbin0 -> 545 bytes
-rwxr-xr-xh-source/Img/Famfamfam/es.pngbin0 -> 469 bytes
-rwxr-xr-xh-source/Img/Famfamfam/fr.pngbin0 -> 545 bytes
-rw-r--r--h-source/Img/Famfamfam/gb.pngbin0 -> 599 bytes
-rwxr-xr-xh-source/Img/Famfamfam/gr.pngbin0 -> 487 bytes
-rwxr-xr-xh-source/Img/Famfamfam/it.pngbin0 -> 420 bytes
-rwxr-xr-xh-source/Img/Glaze/folder_blue.pngbin0 -> 1150 bytes
-rwxr-xr-xh-source/Img/Glaze/folder_blue_open.pngbin0 -> 1260 bytes
-rwxr-xr-xh-source/Img/Glaze/viewmag.pngbin0 -> 980 bytes
-rwxr-xr-xh-source/Img/H2O/applications-internet.pngbin0 -> 8330 bytes
-rwxr-xr-xh-source/Img/H2O/audio-card.pngbin0 -> 4588 bytes
-rwxr-xr-xh-source/Img/H2O/audio-card_22.pngbin0 -> 1051 bytes
-rwxr-xr-xh-source/Img/H2O/camera-web.pngbin0 -> 4956 bytes
-rwxr-xr-xh-source/Img/H2O/camera-web_22.pngbin0 -> 1236 bytes
-rwxr-xr-xh-source/Img/H2O/computer-laptop.pngbin0 -> 3315 bytes
-rwxr-xr-xh-source/Img/H2O/computer-laptop_22.pngbin0 -> 946 bytes
-rwxr-xr-xh-source/Img/H2O/download.pngbin0 -> 2445 bytes
-rwxr-xr-xh-source/Img/H2O/download_48.pngbin0 -> 4482 bytes
-rwxr-xr-xh-source/Img/H2O/im-ban-user.pngbin0 -> 1258 bytes
-rwxr-xr-xh-source/Img/H2O/im-user.pngbin0 -> 1109 bytes
-rwxr-xr-xh-source/Img/H2O/media-flash-sd-mmc.pngbin0 -> 4272 bytes
-rwxr-xr-xh-source/Img/H2O/media-flash-sd-mmc_22.pngbin0 -> 1081 bytes
-rwxr-xr-xh-source/Img/H2O/network-wired.pngbin0 -> 2735 bytes
-rwxr-xr-xh-source/Img/H2O/network-wired_22.pngbin0 -> 860 bytes
-rwxr-xr-xh-source/Img/H2O/network-wireless.pngbin0 -> 6942 bytes
-rwxr-xr-xh-source/Img/H2O/network-wireless_22.pngbin0 -> 1331 bytes
-rwxr-xr-xh-source/Img/H2O/preferences-system-bluetooth-22.pngbin0 -> 1046 bytes
-rwxr-xr-xh-source/Img/H2O/preferences-system-bluetooth.pngbin0 -> 4558 bytes
-rwxr-xr-xh-source/Img/H2O/printer.pngbin0 -> 2790 bytes
-rwxr-xr-xh-source/Img/H2O/printer_22.pngbin0 -> 877 bytes
-rwxr-xr-xh-source/Img/H2O/scanner.pngbin0 -> 7684 bytes
-rwxr-xr-xh-source/Img/H2O/scanner_22.pngbin0 -> 856 bytes
-rw-r--r--h-source/Img/Icons/back.pngbin0 -> 1145 bytes
-rw-r--r--h-source/Img/Icons/delete.pngbin0 -> 2599 bytes
-rwxr-xr-xh-source/Img/Icons/elementary_2_5/AUTHORS28
-rwxr-xr-xh-source/Img/Icons/elementary_2_5/CONTRIBUTORS3
-rwxr-xr-xh-source/Img/Icons/elementary_2_5/COPYING340
-rwxr-xr-xh-source/Img/Icons/elementary_2_5/ChangeLog6
-rwxr-xr-xh-source/Img/Icons/elementary_2_5/add.pngbin0 -> 717 bytes
-rwxr-xr-xh-source/Img/Icons/elementary_2_5/clear_filter.pngbin0 -> 1030 bytes
-rwxr-xr-xh-source/Img/Icons/elementary_2_5/delete.pngbin0 -> 1030 bytes
-rwxr-xr-xh-source/Img/Icons/elementary_2_5/down.pngbin0 -> 858 bytes
-rwxr-xr-xh-source/Img/Icons/elementary_2_5/edit.pngbin0 -> 958 bytes
-rwxr-xr-xh-source/Img/Icons/elementary_2_5/find.pngbin0 -> 864 bytes
-rwxr-xr-xh-source/Img/Icons/elementary_2_5/left.pngbin0 -> 852 bytes
-rwxr-xr-xh-source/Img/Icons/elementary_2_5/link.pngbin0 -> 1127 bytes
-rwxr-xr-xh-source/Img/Icons/elementary_2_5/panel.pngbin0 -> 791 bytes
-rwxr-xr-xh-source/Img/Icons/elementary_2_5/up.pngbin0 -> 824 bytes
-rw-r--r--h-source/Img/Icons/file.pngbin0 -> 2963 bytes
-rw-r--r--h-source/Img/Icons/folder.pngbin0 -> 1545 bytes
-rw-r--r--h-source/Img/Icons/image.pngbin0 -> 1220 bytes
-rw-r--r--[-rwxr-xr-x]h-source/Img/Icons/index.html (renamed from h-source/Library/Lang/En/Formats/To/index.html)0
-rw-r--r--h-source/Img/back-60.pngbin0 -> 2477 bytes
-rw-r--r--h-source/Img/back_last.pngbin0 -> 2576 bytes
-rw-r--r--h-source/Img/back_wiki.pngbin0 -> 2548 bytes
-rw-r--r--h-source/Img/discover.pngbin0 -> 12231 bytes
-rw-r--r--h-source/Img/download.pngbin0 -> 10514 bytes
-rwxr-xr-xh-source/Img/download_code.pngbin0 -> 12232 bytes
-rw-r--r--h-source/Img/download_code_gpl3.pngbin0 -> 14218 bytes
-rw-r--r--h-source/Img/edit-60.pngbin0 -> 2483 bytes
-rw-r--r--h-source/Img/fingerprint_icon-22.pngbin0 -> 1314 bytes
-rw-r--r--h-source/Img/fingerprint_icon.pngbin0 -> 5032 bytes
-rwxr-xr-xh-source/Img/fsf_logo.pngbin0 -> 5768 bytes
-rw-r--r--h-source/Img/history-60.pngbin0 -> 3428 bytes
-rw-r--r--h-source/Img/link.pngbin0 -> 283 bytes
-rw-r--r--h-source/Img/mobile.pngbin0 -> 8201 bytes
-rw-r--r--h-source/Img/new-60.pngbin0 -> 2098 bytes
-rw-r--r--h-source/Img/popup_back.pngbin0 -> 722 bytes
-rw-r--r--h-source/Img/rss.pngbin0 -> 9114 bytes
-rw-r--r--h-source/Img/search_back.pngbin0 -> 3404 bytes
-rw-r--r--h-source/Img/tab_icon_2.icobin0 -> 1406 bytes
-rw-r--r--h-source/Img/talk-60.pngbin0 -> 2163 bytes
-rw-r--r--h-source/Img/talk_messages.pngbin0 -> 536 bytes
-rw-r--r--h-source/Img/title.pngbin0 -> 7924 bytes
-rwxr-xr-xh-source/Js/DisplayTag.js10
-rwxr-xr-xh-source/Js/TinyMCE.js34
-rw-r--r--h-source/Js/functions.js189
-rw-r--r--[-rwxr-xr-x]h-source/Js/index.html (renamed from h-source/Library/Lang/En/Formats/index.html)0
-rwxr-xr-xh-source/Js/jquery/dialog/css/excite-bike/images/ui-bg_diagonals-small_25_c5ddfc_40x40.pngbin0 -> 157 bytes
-rwxr-xr-xh-source/Js/jquery/dialog/css/excite-bike/images/ui-bg_diagonals-thick_20_e69700_40x40.pngbin0 -> 257 bytes
-rwxr-xr-xh-source/Js/jquery/dialog/css/excite-bike/images/ui-bg_diagonals-thick_22_1484e6_40x40.pngbin0 -> 259 bytes
-rwxr-xr-xh-source/Js/jquery/dialog/css/excite-bike/images/ui-bg_diagonals-thick_26_2293f7_40x40.pngbin0 -> 259 bytes
-rwxr-xr-xh-source/Js/jquery/dialog/css/excite-bike/images/ui-bg_flat_0_e69700_40x100.pngbin0 -> 181 bytes
-rwxr-xr-xh-source/Js/jquery/dialog/css/excite-bike/images/ui-bg_flat_0_e6b900_40x100.pngbin0 -> 181 bytes
-rwxr-xr-xh-source/Js/jquery/dialog/css/excite-bike/images/ui-bg_highlight-soft_100_f9f9f9_1x100.pngbin0 -> 88 bytes
-rwxr-xr-xh-source/Js/jquery/dialog/css/excite-bike/images/ui-bg_inset-hard_100_eeeeee_1x100.pngbin0 -> 91 bytes
-rwxr-xr-xh-source/Js/jquery/dialog/css/excite-bike/images/ui-icons_0a82eb_256x240.pngbin0 -> 4369 bytes
-rwxr-xr-xh-source/Js/jquery/dialog/css/excite-bike/images/ui-icons_0b54d5_256x240.pngbin0 -> 4369 bytes
-rwxr-xr-xh-source/Js/jquery/dialog/css/excite-bike/images/ui-icons_5fa5e3_256x240.pngbin0 -> 4369 bytes
-rwxr-xr-xh-source/Js/jquery/dialog/css/excite-bike/images/ui-icons_fcdd4a_256x240.pngbin0 -> 4369 bytes
-rwxr-xr-xh-source/Js/jquery/dialog/css/excite-bike/images/ui-icons_ffffff_256x240.pngbin0 -> 4369 bytes
-rwxr-xr-xh-source/Js/jquery/dialog/css/excite-bike/jquery-ui-1.8.4.custom.css315
-rwxr-xr-xh-source/Js/jquery/dialog/js/jquery-ui-1.8.4.custom.min.js87
-rw-r--r--h-source/Js/jquery/images/ajax-loader.pngbin0 -> 503 bytes
-rw-r--r--h-source/Js/jquery/images/icon-search-black.pngbin0 -> 1245 bytes
-rw-r--r--h-source/Js/jquery/images/icons-18-black.pngbin0 -> 2064 bytes
-rw-r--r--h-source/Js/jquery/images/icons-18-white.pngbin0 -> 2200 bytes
-rw-r--r--h-source/Js/jquery/images/icons-36-black.pngbin0 -> 3403 bytes
-rw-r--r--h-source/Js/jquery/images/icons-36-white.pngbin0 -> 4020 bytes
-rw-r--r--h-source/Js/jquery/jquery-1.7.1.min.js4
-rw-r--r--h-source/Js/jquery/jquery.mobile-1.1.0.css2053
-rw-r--r--h-source/Js/jquery/jquery.mobile-1.1.0.js7551
-rwxr-xr-xh-source/Js/jquery/ui/css/excite-bike/images/ui-bg_diagonals-small_25_c5ddfc_40x40.pngbin0 -> 157 bytes
-rwxr-xr-xh-source/Js/jquery/ui/css/excite-bike/images/ui-bg_diagonals-thick_20_e69700_40x40.pngbin0 -> 257 bytes
-rwxr-xr-xh-source/Js/jquery/ui/css/excite-bike/images/ui-bg_diagonals-thick_22_1484e6_40x40.pngbin0 -> 259 bytes
-rwxr-xr-xh-source/Js/jquery/ui/css/excite-bike/images/ui-bg_diagonals-thick_26_2293f7_40x40.pngbin0 -> 259 bytes
-rwxr-xr-xh-source/Js/jquery/ui/css/excite-bike/images/ui-bg_flat_0_e69700_40x100.pngbin0 -> 181 bytes
-rwxr-xr-xh-source/Js/jquery/ui/css/excite-bike/images/ui-bg_flat_0_e6b900_40x100.pngbin0 -> 181 bytes
-rwxr-xr-xh-source/Js/jquery/ui/css/excite-bike/images/ui-bg_highlight-soft_100_f9f9f9_1x100.pngbin0 -> 88 bytes
-rwxr-xr-xh-source/Js/jquery/ui/css/excite-bike/images/ui-bg_inset-hard_100_eeeeee_1x100.pngbin0 -> 91 bytes
-rwxr-xr-xh-source/Js/jquery/ui/css/excite-bike/images/ui-icons_0a82eb_256x240.pngbin0 -> 4369 bytes
-rwxr-xr-xh-source/Js/jquery/ui/css/excite-bike/images/ui-icons_0b54d5_256x240.pngbin0 -> 4369 bytes
-rwxr-xr-xh-source/Js/jquery/ui/css/excite-bike/images/ui-icons_5fa5e3_256x240.pngbin0 -> 4369 bytes
-rwxr-xr-xh-source/Js/jquery/ui/css/excite-bike/images/ui-icons_fcdd4a_256x240.pngbin0 -> 4369 bytes
-rwxr-xr-xh-source/Js/jquery/ui/css/excite-bike/images/ui-icons_ffffff_256x240.pngbin0 -> 4369 bytes
-rw-r--r--h-source/Js/jquery/ui/css/excite-bike/jquery-ui-1.8.14.custom.css328
-rw-r--r--h-source/Js/jquery/ui/js/jquery-ui-1.8.21.custom.js1937
-rw-r--r--h-source/Js/markitup/jquery.markitup.js559
-rw-r--r--h-source/Js/markitup/sets/bbcode/images/bold.pngbin0 -> 304 bytes
-rw-r--r--h-source/Js/markitup/sets/bbcode/images/clean.pngbin0 -> 667 bytes
-rw-r--r--h-source/Js/markitup/sets/bbcode/images/code.pngbin0 -> 859 bytes
-rw-r--r--h-source/Js/markitup/sets/bbcode/images/fonts.pngbin0 -> 567 bytes
-rw-r--r--h-source/Js/markitup/sets/bbcode/images/h1.pngbin0 -> 276 bytes
-rw-r--r--h-source/Js/markitup/sets/bbcode/images/h2.pngbin0 -> 304 bytes
-rw-r--r--h-source/Js/markitup/sets/bbcode/images/h3.pngbin0 -> 306 bytes
-rw-r--r--h-source/Js/markitup/sets/bbcode/images/italic.pngbin0 -> 223 bytes
-rw-r--r--h-source/Js/markitup/sets/bbcode/images/link.pngbin0 -> 343 bytes
-rw-r--r--h-source/Js/markitup/sets/bbcode/images/list-bullet.pngbin0 -> 344 bytes
-rw-r--r--h-source/Js/markitup/sets/bbcode/images/list-item.pngbin0 -> 248 bytes
-rw-r--r--h-source/Js/markitup/sets/bbcode/images/list-numeric.pngbin0 -> 357 bytes
-rw-r--r--h-source/Js/markitup/sets/bbcode/images/paragraph.pngbin0 -> 361 bytes
-rw-r--r--h-source/Js/markitup/sets/bbcode/images/picture.pngbin0 -> 606 bytes
-rw-r--r--h-source/Js/markitup/sets/bbcode/images/preview.pngbin0 -> 537 bytes
-rw-r--r--h-source/Js/markitup/sets/bbcode/images/quotes.pngbin0 -> 743 bytes
-rw-r--r--h-source/Js/markitup/sets/bbcode/images/stroke.pngbin0 -> 269 bytes
-rw-r--r--h-source/Js/markitup/sets/bbcode/images/underline.pngbin0 -> 273 bytes
-rw-r--r--h-source/Js/markitup/sets/bbcode/readme.txt11
-rw-r--r--h-source/Js/markitup/sets/bbcode/set.js32
-rw-r--r--h-source/Js/markitup/sets/bbcode/style.css72
-rw-r--r--h-source/Js/markitup/skins/simple/images/handle.pngbin0 -> 258 bytes
-rw-r--r--h-source/Js/markitup/skins/simple/images/menu.pngbin0 -> 27151 bytes
-rw-r--r--h-source/Js/markitup/skins/simple/images/submenu.pngbin0 -> 240 bytes
-rw-r--r--h-source/Js/markitup/skins/simple/style.css118
-rw-r--r--h-source/Js/stats.js35
-rw-r--r--h-source/Library/Array/Validate/Base.php106
-rw-r--r--h-source/Library/Array/Validate/Soft.php76
-rw-r--r--h-source/Library/Array/Validate/Strong.php90
-rw-r--r--h-source/Library/Array/Validate/Values.php36
-rwxr-xr-xh-source/Library/ArrayExt.php4
-rwxr-xr-xh-source/Library/Bootstrap.php2
-rw-r--r--h-source/Library/BoxParser.php2
-rwxr-xr-xh-source/Library/Call.php208
-rwxr-xr-xh-source/Library/Controller.php29
-rwxr-xr-xh-source/Library/Db/Mysql.php178
-rw-r--r--h-source/Library/Db/Mysqli.php264
-rw-r--r--h-source/Library/Email.php2
-rw-r--r--h-source/Library/ErrorReporting.php2
-rwxr-xr-xh-source/Library/Factory/Db.php2
-rw-r--r--h-source/Library/Factory/Strings.php2
-rw-r--r--h-source/Library/Files/Log.php2
-rwxr-xr-xh-source/Library/Files/Upload.php24
-rwxr-xr-xh-source/Library/Form/Checkbox.php4
-rwxr-xr-xh-source/Library/Form/Entry.php3
-rw-r--r--h-source/Library/Form/File.php4
-rwxr-xr-xh-source/Library/Form/Form.php120
-rwxr-xr-xh-source/Library/Form/Hidden.php4
-rw-r--r--h-source/Library/Form/Html.php2
-rwxr-xr-xh-source/Library/Form/InputText.php4
-rw-r--r--h-source/Library/Form/Password.php4
-rwxr-xr-xh-source/Library/Form/Radio.php4
-rwxr-xr-xh-source/Library/Form/Select.php4
-rwxr-xr-xh-source/Library/Form/Textarea.php4
-rwxr-xr-xh-source/Library/Functions.php186
-rw-r--r--h-source/Library/HeaderObj.php2
-rwxr-xr-xh-source/Library/Helper/Array.php2
-rwxr-xr-xh-source/Library/Helper/Html.php2
-rwxr-xr-xh-source/Library/Helper/List.php288
-rwxr-xr-xh-source/Library/Helper/Menu.php40
-rwxr-xr-xh-source/Library/Helper/Pages.php15
-rwxr-xr-xh-source/Library/Helper/Popup.php46
-rw-r--r--h-source/Library/Hooks.php2
-rw-r--r--h-source/Library/Html/Form.php48
-rw-r--r--h-source/Library/Image/Gd/Captcha.php2
-rw-r--r--h-source/Library/Image/Gd/Thumbnail.php246
-rw-r--r--h-source/Library/Lang/En/DbCondStrings.php6
-rw-r--r--h-source/Library/Lang/En/Formats/From/Mysql.php64
-rw-r--r--h-source/Library/Lang/En/Formats/To/Mysql.php62
-rw-r--r--h-source/Library/Lang/En/Generic.php5
-rw-r--r--h-source/Library/Lang/En/ModelStrings.php24
-rw-r--r--h-source/Library/Lang/En/UploadStrings.php2
-rw-r--r--h-source/Library/Lang/En/ValCondStrings.php68
-rw-r--r--h-source/Library/Lang/Eng/DbCondStrings.php2
-rw-r--r--h-source/Library/Lang/Eng/Generic.php21
-rw-r--r--h-source/Library/Lang/Eng/ModelStrings.php5
-rw-r--r--h-source/Library/Lang/Eng/UploadStrings.php2
-rw-r--r--h-source/Library/Lang/Eng/ValCondStrings.php52
-rw-r--r--h-source/Library/Lang/ResultStrings.php2
-rw-r--r--h-source/Library/ModAbstract.php2
-rwxr-xr-xh-source/Library/Model/#Base.php#1273
-rwxr-xr-xh-source/Library/Model/Base.php607
-rwxr-xr-xh-source/Library/Model/Map.php2
-rwxr-xr-xh-source/Library/Model/Tree.php560
-rw-r--r--h-source/Library/Params.php68
-rwxr-xr-xh-source/Library/Popup.php2
-rw-r--r--h-source/Library/Request.php2
-rwxr-xr-xh-source/Library/Scaffold.php123
-rw-r--r--h-source/Library/Strings/Functions.php2
-rwxr-xr-xh-source/Library/Theme.php40
-rwxr-xr-xh-source/Library/Url.php24
-rwxr-xr-xh-source/Library/Users/CheckAdmin.php12
-rw-r--r--h-source/Logs/Errors.log73
-rwxr-xr-x[-rw-r--r--]h-source/Logs/index.html0
-rwxr-xr-xh-source/Logs/where.log1821
-rw-r--r--h-source/MySQL_changelog/412_to_413_update_sql.sql36
-rw-r--r--h-source/MySQL_changelog/413_to_419_update_sql.sql4
-rw-r--r--h-source/MySQL_changelog/419_to_420_update_sql.sql40
-rw-r--r--h-source/MySQL_changelog/420_to_422_update_sql.sql40
-rw-r--r--h-source/MySQL_changelog/422_to_423_update_sql.sql41
-rw-r--r--h-source/MySQL_changelog/423_to_429_update_sql.sql41
-rw-r--r--h-source/MySQL_changelog/429_to_430_update_sql.sql42
-rw-r--r--h-source/MySQL_changelog/430_to_436_update_sql.sql45
-rw-r--r--h-source/MySQL_changelog/436_to_442_update_sql.sql47
-rw-r--r--h-source/MySQL_changelog/443_to_446_update_sql.sql51
-rw-r--r--h-source/MySQL_changelog/446_to_449_update_sql.sql51
-rwxr-xr-xh-source/MySQL_changelog/449_to_450_update_sql.sql52
-rwxr-xr-xh-source/MySQL_changelog/450_to_451_update_sql.sql52
-rwxr-xr-xh-source/Public/Css/explorer6.css112
-rw-r--r--h-source/Public/Css/main.css157
-rwxr-xr-xh-source/Public/Img/Acun/book.pngbin0 -> 11591 bytes
-rwxr-xr-xh-source/Public/Img/Acun/document_properties.pngbin0 -> 8274 bytes
-rwxr-xr-xh-source/Public/Img/Acun/filenew.pngbin0 -> 9174 bytes
-rwxr-xr-xh-source/Public/Img/Acun/go_previous.pngbin0 -> 10751 bytes
-rwxr-xr-xh-source/Public/Img/Acun/note.pngbin0 -> 6045 bytes
-rw-r--r--[-rwxr-xr-x]h-source/Public/Img/Famfamfam/pt.pngbin554 -> 554 bytes
-rwxr-xr-xh-source/Public/Img/download_code.pngbin0 -> 12232 bytes
-rwxr-xr-xh-source/Public/Img/fsf_logo.pngbin0 -> 5768 bytes
-rw-r--r--h-source/Public/Img/mailing.pngbin0 -> 7480 bytes
-rw-r--r--h-source/Public/Img/title.pngbin7924 -> 8537 bytes
-rwxr-xr-xh-source/Public/Js/TinyMCE.js34
-rw-r--r--h-source/README.txt179
-rw-r--r--h-source/Template/Desktop/Home/left.php36
-rw-r--r--h-source/Template/Desktop/Home/left_es.php38
-rw-r--r--h-source/Template/Desktop/Home/left_fr.php32
-rw-r--r--h-source/Template/Desktop/Home/left_it.php32
-rw-r--r--h-source/Template/Desktop/Project/index.php31
-rw-r--r--h-source/Template/Desktop/Project/index_es.php31
-rw-r--r--h-source/Template/Desktop/Project/index_it.php31
-rw-r--r--h-source/Template/Mobile/Home/left.php36
-rw-r--r--h-source/Template/Mobile/Home/left_es.php33
-rw-r--r--h-source/Template/Mobile/Home/left_fr.php32
-rw-r--r--h-source/Template/Mobile/Home/left_it.php32
-rw-r--r--h-source/Template/Mobile/Project/index_es.php31
-rw-r--r--h-source/Template/Mobile/Project/index_it.php31
-rwxr-xr-xh-source/admin/.htaccess9
-rw-r--r--h-source/admin/Application/Controllers/AdminboxesController.php78
-rw-r--r--h-source/admin/Application/Controllers/AdmindeletionController.php66
-rw-r--r--h-source/admin/Application/Controllers/AdminhardwareController.php121
-rw-r--r--h-source/admin/Application/Controllers/AdminhistoryController.php68
-rw-r--r--h-source/admin/Application/Controllers/AdminissuesController.php88
-rw-r--r--h-source/admin/Application/Controllers/AdminmessagesController.php86
-rw-r--r--h-source/admin/Application/Controllers/AdminnewsController.php78
-rw-r--r--h-source/admin/Application/Controllers/AdminparamsController.php68
-rw-r--r--h-source/admin/Application/Controllers/AdminpasswordController.php88
-rw-r--r--h-source/admin/Application/Controllers/AdminregusersController.php101
-rw-r--r--h-source/admin/Application/Controllers/AdmintalkController.php59
-rw-r--r--h-source/admin/Application/Controllers/AdminusersController.php200
-rwxr-xr-xh-source/admin/Application/Controllers/PanelController.php43
-rw-r--r--h-source/admin/Application/Hooks/AfterInitialization.php10
-rw-r--r--h-source/admin/Application/Hooks/BeforeChecks.php16
-rw-r--r--h-source/admin/Application/Hooks/BeforeInitialization.php10
-rw-r--r--h-source/admin/Application/Hooks/index.html1
-rw-r--r--h-source/admin/Application/Include/distributions.php88
-rw-r--r--h-source/admin/Application/Include/hardware.php216
-rw-r--r--h-source/admin/Application/Include/languages.php192
-rw-r--r--h-source/admin/Application/Include/myFunctions.php318
-rwxr-xr-xh-source/admin/Application/Models/AdminusersModel.php37
-rw-r--r--h-source/admin/Application/Models/BaseModel.php68
-rw-r--r--h-source/admin/Application/Models/BoxesModel.php42
-rw-r--r--h-source/admin/Application/Models/DeletionModel.php53
-rw-r--r--h-source/admin/Application/Models/HardwareModel.php200
-rw-r--r--h-source/admin/Application/Models/HistoryModel.php55
-rw-r--r--h-source/admin/Application/Models/IssuesModel.php96
-rw-r--r--h-source/admin/Application/Models/MessagesModel.php58
-rw-r--r--h-source/admin/Application/Models/NewsModel.php44
-rw-r--r--h-source/admin/Application/Models/NotebooksModel.php71
-rw-r--r--h-source/admin/Application/Models/ParamsModel.php48
-rw-r--r--h-source/admin/Application/Models/PrintersModel.php70
-rw-r--r--h-source/admin/Application/Models/ProfileModel.php72
-rw-r--r--h-source/admin/Application/Models/RevisionsModel.php50
-rw-r--r--h-source/admin/Application/Models/ScannersModel.php70
-rw-r--r--h-source/admin/Application/Models/TalkModel.php54
-rwxr-xr-xh-source/admin/Application/Models/UsersModel.php223
-rw-r--r--h-source/admin/Application/Models/VideocardsModel.php66
-rw-r--r--h-source/admin/Application/Models/WifiModel.php69
-rw-r--r--h-source/admin/Application/Modules/ModBase.php41
-rw-r--r--h-source/admin/Application/Modules/ModImage.php45
-rw-r--r--h-source/admin/Application/Modules/ModLink.php18
-rw-r--r--h-source/admin/Application/Modules/ModLinkimage.php18
-rw-r--r--h-source/admin/Application/Modules/ModRaw.php18
-rw-r--r--h-source/admin/Application/Modules/index.html1
-rw-r--r--h-source/admin/Application/Strings/Lang/It/DbCondStrings.php17
-rw-r--r--h-source/admin/Application/Strings/Lang/It/ModelStrings.php19
-rw-r--r--h-source/admin/Application/Strings/Lang/It/UploadStrings.php26
-rw-r--r--h-source/admin/Application/Strings/Lang/It/ValCondStrings.php69
-rw-r--r--h-source/admin/Application/Strings/Lang/It/index.html1
-rw-r--r--h-source/admin/Application/Strings/Lang/index.html1
-rw-r--r--h-source/admin/Application/Strings/index.html1
-rw-r--r--h-source/admin/Application/Views/Adminboxes/main.php25
-rw-r--r--h-source/admin/Application/Views/Admindeletion/main.php25
-rw-r--r--h-source/admin/Application/Views/Adminhardware/ask.php53
-rw-r--r--h-source/admin/Application/Views/Adminhardware/main.php25
-rw-r--r--h-source/admin/Application/Views/Adminhistory/main.php25
-rw-r--r--h-source/admin/Application/Views/Adminissues/main.php36
-rw-r--r--h-source/admin/Application/Views/Adminmessages/main.php35
-rw-r--r--h-source/admin/Application/Views/Adminnews/main.php35
-rwxr-xr-xh-source/admin/Application/Views/Adminparams/form.php25
-rwxr-xr-xh-source/admin/Application/Views/Adminpassword/form.php9
-rw-r--r--h-source/admin/Application/Views/Adminregusers/associate.php54
-rw-r--r--h-source/admin/Application/Views/Adminregusers/main.php25
-rw-r--r--h-source/admin/Application/Views/Admintalk/main.php25
-rw-r--r--h-source/admin/Application/Views/Adminusers/associate.php54
-rwxr-xr-xh-source/admin/Application/Views/Adminusers/forceout.php29
-rwxr-xr-xh-source/admin/Application/Views/Adminusers/login.php45
-rwxr-xr-xh-source/admin/Application/Views/Adminusers/logout.php29
-rw-r--r--h-source/admin/Application/Views/Adminusers/main.php25
-rwxr-xr-xh-source/admin/Application/Views/footer_back.php27
-rwxr-xr-xh-source/admin/Application/Views/header_back.php94
-rwxr-xr-xh-source/admin/Application/Views/panel.php55
-rw-r--r--h-source/admin/Application/index.html1
-rwxr-xr-xh-source/admin/COPYRIGHT.txt24
-rw-r--r--h-source/admin/Config/Autoload.php23
-rwxr-xr-xh-source/admin/Config/Reporting.php41
-rwxr-xr-xh-source/admin/Config/Restricted.php94
-rw-r--r--h-source/admin/Config/Route.php50
-rw-r--r--h-source/admin/External/Fonts/FreeFont/AUTHORS208
-rw-r--r--h-source/admin/External/Fonts/FreeFont/COPYING674
-rw-r--r--h-source/admin/External/Fonts/FreeFont/CREDITS528
-rw-r--r--h-source/admin/External/Fonts/FreeFont/ChangeLog4525
-rw-r--r--h-source/admin/External/Fonts/FreeFont/FreeMono.ttfbin0 -> 314348 bytes
-rw-r--r--h-source/admin/External/Fonts/FreeFont/INSTALL86
-rw-r--r--h-source/admin/External/Fonts/FreeFont/README108
-rw-r--r--h-source/admin/Library/Array/Validate/Base.php241
-rw-r--r--h-source/admin/Library/Array/Validate/Soft.php85
-rw-r--r--h-source/admin/Library/Array/Validate/Strong.php180
-rw-r--r--h-source/admin/Library/Array/Validate/index.html1
-rw-r--r--h-source/admin/Library/Array/index.html1
-rwxr-xr-xh-source/admin/Library/ArrayExt.php63
-rwxr-xr-xh-source/admin/Library/Bootstrap.php14
-rw-r--r--h-source/admin/Library/BoxParser.php69
-rwxr-xr-xh-source/admin/Library/Call.php321
-rwxr-xr-xh-source/admin/Library/Controller.php291
-rwxr-xr-xh-source/admin/Library/Db/Mysql.php394
-rw-r--r--h-source/admin/Library/Db/Mysqli.php400
-rw-r--r--h-source/admin/Library/Db/index.html1
-rw-r--r--h-source/admin/Library/Email.php229
-rw-r--r--h-source/admin/Library/ErrorReporting.php (renamed from h-source/Library/Lang/En/Formats/Fields.php)33
-rwxr-xr-xh-source/admin/Library/Factory/Db.php52
-rw-r--r--h-source/admin/Library/Factory/index.html1
-rw-r--r--h-source/admin/Library/Files/Log.php97
-rwxr-xr-xh-source/admin/Library/Files/Upload.php451
-rw-r--r--h-source/admin/Library/Files/index.html1
-rwxr-xr-xh-source/admin/Library/Form/Checkbox.php41
-rwxr-xr-xh-source/admin/Library/Form/Entry.php45
-rwxr-xr-xh-source/admin/Library/Form/Form.php116
-rwxr-xr-xh-source/admin/Library/Form/Hidden.php23
-rw-r--r--h-source/admin/Library/Form/Html.php23
-rwxr-xr-xh-source/admin/Library/Form/InputText.php30
-rw-r--r--h-source/admin/Library/Form/Password.php30
-rwxr-xr-xh-source/admin/Library/Form/Radio.php30
-rwxr-xr-xh-source/admin/Library/Form/Select.php30
-rwxr-xr-xh-source/admin/Library/Form/Textarea.php30
-rw-r--r--h-source/admin/Library/Form/index.html1
-rwxr-xr-xh-source/admin/Library/Functions.php279
-rw-r--r--h-source/admin/Library/HeaderObj.php28
-rwxr-xr-xh-source/admin/Library/Helper/Array.php11
-rwxr-xr-xh-source/admin/Library/Helper/Html.php14
-rwxr-xr-xh-source/admin/Library/Helper/List.php278
-rwxr-xr-xh-source/admin/Library/Helper/Menu.php75
-rwxr-xr-xh-source/admin/Library/Helper/Pages.php108
-rwxr-xr-xh-source/admin/Library/Helper/Popup.php87
-rw-r--r--h-source/admin/Library/Helper/index.html1
-rw-r--r--h-source/admin/Library/Hooks.php21
-rw-r--r--h-source/admin/Library/Html/Form.php168
-rw-r--r--h-source/admin/Library/Html/index.html1
-rw-r--r--h-source/admin/Library/Image/Gd/Captcha.php85
-rw-r--r--h-source/admin/Library/Image/Gd/Thumbnail.php151
-rw-r--r--h-source/admin/Library/Image/Gd/index.html1
-rw-r--r--h-source/admin/Library/Image/index.html1
-rw-r--r--h-source/admin/Library/Lang/Eng/DbCondStrings.php17
-rw-r--r--h-source/admin/Library/Lang/Eng/ModelStrings.php19
-rw-r--r--h-source/admin/Library/Lang/Eng/UploadStrings.php27
-rw-r--r--h-source/admin/Library/Lang/Eng/ValCondStrings.php76
-rw-r--r--h-source/admin/Library/Lang/Eng/index.html1
-rw-r--r--h-source/admin/Library/Lang/ResultStrings.php25
-rw-r--r--h-source/admin/Library/Lang/index.html1
-rw-r--r--h-source/admin/Library/ModAbstract.php25
-rwxr-xr-xh-source/admin/Library/Model/Base.php1140
-rwxr-xr-xh-source/admin/Library/Model/Map.php439
-rwxr-xr-xh-source/admin/Library/Model/Tree.php287
-rw-r--r--h-source/admin/Library/Model/index.html1
-rw-r--r--h-source/admin/Library/Params.php37
-rwxr-xr-xh-source/admin/Library/Popup.php15
-rw-r--r--h-source/admin/Library/Request.php39
-rwxr-xr-xh-source/admin/Library/Scaffold.php272
-rw-r--r--h-source/admin/Library/Strings/Functions.php30
-rwxr-xr-xh-source/admin/Library/Theme.php79
-rwxr-xr-xh-source/admin/Library/Url.php36
-rwxr-xr-xh-source/admin/Library/Users/CheckAdmin.php369
-rw-r--r--h-source/admin/Library/Users/index.html1
-rw-r--r--h-source/admin/Library/index.html1
-rwxr-xr-xh-source/admin/License.txt201
-rw-r--r--h-source/admin/Logs/index.html1
-rw-r--r--h-source/admin/Public/Css/comune.css130
-rw-r--r--h-source/admin/Public/Css/explorer.css91
-rw-r--r--h-source/admin/Public/Css/files.css113
-rwxr-xr-xh-source/admin/Public/Css/form.css31
-rw-r--r--h-source/admin/Public/Css/index.html1
-rw-r--r--h-source/admin/Public/Css/login.css21
-rwxr-xr-xh-source/admin/Public/Css/mainmenu.css78
-rw-r--r--h-source/admin/Public/Css/pagelist.css29
-rw-r--r--h-source/admin/Public/Css/panel.css74
-rwxr-xr-xh-source/admin/Public/Css/popupmenu.css49
-rwxr-xr-xh-source/admin/Public/Css/scaffold.css105
-rwxr-xr-xh-source/admin/Public/Css/website.css1414
-rw-r--r--h-source/admin/Public/Img/Icons/back.pngbin0 -> 1145 bytes
-rw-r--r--h-source/admin/Public/Img/Icons/delete.pngbin0 -> 2599 bytes
-rw-r--r--h-source/admin/Public/Img/Icons/file.pngbin0 -> 2963 bytes
-rw-r--r--h-source/admin/Public/Img/Icons/folder.pngbin0 -> 1545 bytes
-rw-r--r--h-source/admin/Public/Img/Icons/image.pngbin0 -> 1220 bytes
-rw-r--r--h-source/admin/Public/Img/Icons/index.html1
-rwxr-xr-xh-source/admin/Public/Js/DisplayTag.js10
-rwxr-xr-xh-source/admin/Public/Js/TinyMCE.js34
-rw-r--r--h-source/admin/Public/Js/functions.js122
-rw-r--r--h-source/admin/Public/Js/index.html1
-rwxr-xr-xh-source/admin/Public/Js/jquery/dialog/css/excite-bike/images/ui-bg_diagonals-small_25_c5ddfc_40x40.pngbin0 -> 157 bytes
-rwxr-xr-xh-source/admin/Public/Js/jquery/dialog/css/excite-bike/images/ui-bg_diagonals-thick_20_e69700_40x40.pngbin0 -> 257 bytes
-rwxr-xr-xh-source/admin/Public/Js/jquery/dialog/css/excite-bike/images/ui-bg_diagonals-thick_22_1484e6_40x40.pngbin0 -> 259 bytes
-rwxr-xr-xh-source/admin/Public/Js/jquery/dialog/css/excite-bike/images/ui-bg_diagonals-thick_26_2293f7_40x40.pngbin0 -> 259 bytes
-rwxr-xr-xh-source/admin/Public/Js/jquery/dialog/css/excite-bike/images/ui-bg_flat_0_e69700_40x100.pngbin0 -> 181 bytes
-rwxr-xr-xh-source/admin/Public/Js/jquery/dialog/css/excite-bike/images/ui-bg_flat_0_e6b900_40x100.pngbin0 -> 181 bytes
-rwxr-xr-xh-source/admin/Public/Js/jquery/dialog/css/excite-bike/images/ui-bg_highlight-soft_100_f9f9f9_1x100.pngbin0 -> 88 bytes
-rwxr-xr-xh-source/admin/Public/Js/jquery/dialog/css/excite-bike/images/ui-bg_inset-hard_100_eeeeee_1x100.pngbin0 -> 91 bytes
-rwxr-xr-xh-source/admin/Public/Js/jquery/dialog/css/excite-bike/images/ui-icons_0a82eb_256x240.pngbin0 -> 4369 bytes
-rwxr-xr-xh-source/admin/Public/Js/jquery/dialog/css/excite-bike/images/ui-icons_0b54d5_256x240.pngbin0 -> 4369 bytes
-rwxr-xr-xh-source/admin/Public/Js/jquery/dialog/css/excite-bike/images/ui-icons_5fa5e3_256x240.pngbin0 -> 4369 bytes
-rwxr-xr-xh-source/admin/Public/Js/jquery/dialog/css/excite-bike/images/ui-icons_fcdd4a_256x240.pngbin0 -> 4369 bytes
-rwxr-xr-xh-source/admin/Public/Js/jquery/dialog/css/excite-bike/images/ui-icons_ffffff_256x240.pngbin0 -> 4369 bytes
-rwxr-xr-xh-source/admin/Public/Js/jquery/dialog/css/excite-bike/jquery-ui-1.8.4.custom.css315
-rwxr-xr-xh-source/admin/Public/Js/jquery/dialog/js/jquery-ui-1.8.4.custom.min.js87
-rw-r--r--h-source/admin/Public/Js/jquery/jquery-1.4.2.min.js154
-rw-r--r--h-source/admin/Public/Js/markitup/jquery.markitup.js559
-rw-r--r--h-source/admin/Public/Js/markitup/sets/bbcode/images/bold.pngbin0 -> 304 bytes
-rw-r--r--h-source/admin/Public/Js/markitup/sets/bbcode/images/clean.pngbin0 -> 667 bytes
-rw-r--r--h-source/admin/Public/Js/markitup/sets/bbcode/images/code.pngbin0 -> 859 bytes
-rw-r--r--h-source/admin/Public/Js/markitup/sets/bbcode/images/fonts.pngbin0 -> 567 bytes
-rw-r--r--h-source/admin/Public/Js/markitup/sets/bbcode/images/h1.pngbin0 -> 276 bytes
-rw-r--r--h-source/admin/Public/Js/markitup/sets/bbcode/images/h2.pngbin0 -> 304 bytes
-rw-r--r--h-source/admin/Public/Js/markitup/sets/bbcode/images/h3.pngbin0 -> 306 bytes
-rw-r--r--h-source/admin/Public/Js/markitup/sets/bbcode/images/italic.pngbin0 -> 223 bytes
-rw-r--r--h-source/admin/Public/Js/markitup/sets/bbcode/images/link.pngbin0 -> 343 bytes
-rw-r--r--h-source/admin/Public/Js/markitup/sets/bbcode/images/list-bullet.pngbin0 -> 344 bytes
-rw-r--r--h-source/admin/Public/Js/markitup/sets/bbcode/images/list-item.pngbin0 -> 248 bytes
-rw-r--r--h-source/admin/Public/Js/markitup/sets/bbcode/images/list-numeric.pngbin0 -> 357 bytes
-rw-r--r--h-source/admin/Public/Js/markitup/sets/bbcode/images/paragraph.pngbin0 -> 361 bytes
-rw-r--r--h-source/admin/Public/Js/markitup/sets/bbcode/images/picture.pngbin0 -> 606 bytes
-rw-r--r--h-source/admin/Public/Js/markitup/sets/bbcode/images/preview.pngbin0 -> 537 bytes
-rw-r--r--h-source/admin/Public/Js/markitup/sets/bbcode/images/quotes.pngbin0 -> 743 bytes
-rw-r--r--h-source/admin/Public/Js/markitup/sets/bbcode/images/stroke.pngbin0 -> 269 bytes
-rw-r--r--h-source/admin/Public/Js/markitup/sets/bbcode/images/underline.pngbin0 -> 273 bytes
-rw-r--r--h-source/admin/Public/Js/markitup/sets/bbcode/readme.txt11
-rw-r--r--h-source/admin/Public/Js/markitup/sets/bbcode/set.js32
-rw-r--r--h-source/admin/Public/Js/markitup/sets/bbcode/style.css72
-rw-r--r--h-source/admin/Public/Js/markitup/skins/simple/images/handle.pngbin0 -> 258 bytes
-rw-r--r--h-source/admin/Public/Js/markitup/skins/simple/images/menu.pngbin0 -> 27151 bytes
-rw-r--r--h-source/admin/Public/Js/markitup/skins/simple/images/submenu.pngbin0 -> 240 bytes
-rw-r--r--h-source/admin/Public/Js/markitup/skins/simple/style.css118
-rw-r--r--h-source/admin/Public/Js/stats.js35
-rw-r--r--h-source/admin/Public/index.html1
-rw-r--r--h-source/admin/README.txt62
-rw-r--r--h-source/admin/h-admin-copyright.txt16
-rwxr-xr-xh-source/admin/index.php16
-rw-r--r--h-source/admin/tables.sql64
-rw-r--r--h-source/config.xml202
-rwxr-xr-xh-source/dafare.txt12
-rwxr-xr-x[-rw-r--r--]h-source/h-source-copyright.txt6
-rwxr-xr-xh-source/index.php2
-rwxr-xr-xh-source/modifiche.txt17
-rw-r--r--h-source/source/h-admin_0_2.tar.gzbin0 -> 402071 bytes
-rw-r--r--h-source/source/ht/ismyhwok_25thSep2010-1.tar.gzbin0 -> 354350 bytes
-rw-r--r--h-source/source/notes_0.2.html19
-rwxr-xr-xh-source/static/en/cancelled.html46
-rwxr-xr-xh-source/static/en/donations.html55
-rwxr-xr-xh-source/static/en/thanks.html46
-rwxr-xr-xh-source/tabelle.txt160
-rw-r--r--h-source/tables.sql616
754 files changed, 50945 insertions, 7694 deletions
diff --git a/h-source/.htaccess b/h-source/.htaccess
index d27d849..56ccf22 100755
--- a/h-source/.htaccess
+++ b/h-source/.htaccess
@@ -1,6 +1,11 @@
+RewriteEngine On
+
+RewriteCond %{HTTPS} !^on$
+RewriteRule (.*) https://www.h-node.org/$1 [R,L]
+
# <IfModule mod_rewrite.c>
# Options +FollowSymlinks
- RewriteEngine on
+# RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?url=$1 [QSA,L]
diff --git a/h-source/Application/Controllers/BaseController.php b/h-source/Application/Controllers/BaseController.php
index 5c5a197..ac2be1f 100644
--- a/h-source/Application/Controllers/BaseController.php
+++ b/h-source/Application/Controllers/BaseController.php
@@ -119,7 +119,7 @@ class BaseController extends Controller
//check ft they are updating the website
$updating = $this->m['ParamsModel']->select('updating')->where(array('id_par'=>1))->toList('updating')->send();
-
+
$data['updating_flag'] = 'no';
if (count($updating)>0)
{
@@ -128,30 +128,28 @@ class BaseController extends Controller
}
//get the configuration xml
- if (Website::$useXmlConfigFile)
+ $xmlRes = $this->m['ParamsModel']->select('boxes_xml')->where(array('id_par'=>1))->toList('boxes_xml')->send();
+ if (count($xmlRes)>0)
{
- $xmlConfigFile = rtrim(Website::$xmlConfigFileFolder,'/') . '/config.xml';
-
- if (@simplexml_load_file($xmlConfigFile))
+ $configXml = htmlspecialchars_decode($xmlRes[0],ENT_QUOTES);
+
+ if (Website::$useXmlConfigFile)
{
- $this->_configXml = simplexml_load_file($xmlConfigFile);
+ $xmlConfigFile = rtrim(Website::$xmlConfigFileFolder,'/') . '/config.xml';
+ if (@simplexml_load_file($xmlConfigFile))
+ {
+ $this->_configXml = simplexml_load_file($xmlConfigFile);
+ }
}
- }
- else
- {
- $xmlRes = $this->m['ParamsModel']->select('boxes_xml')->where(array('id_par'=>1))->toList('boxes_xml')->send();
-
- if (count($xmlRes)>0)
+ else
{
- $configXml = htmlspecialchars_decode($xmlRes[0],ENT_QUOTES);
-
if (@simplexml_load_string($configXml))
{
$this->_configXml = simplexml_load_string($configXml);
}
}
-
}
+
//elements of the top menu from the config.xml file
//help link
$mod = new BoxParser($this->getBox(array("top_menu","help_page_link")));
@@ -162,9 +160,9 @@ class BaseController extends Controller
//link to the "discover your hardware" wiki page
$data['discoverYourHardwareLink'] = $this->getModule(array('right_column','discover_your_hardware'));
-
+
Distributions::setAllowedList();
-
+
$this->append($data);
}
@@ -302,4 +300,4 @@ class BaseController extends Controller
}
}
-} \ No newline at end of file
+}
diff --git a/h-source/Application/Controllers/ManagerController.php b/h-source/Application/Controllers/ManagerController.php
deleted file mode 100644
index b178ea6..0000000
--- a/h-source/Application/Controllers/ManagerController.php
+++ /dev/null
@@ -1,72 +0,0 @@
-<?php
-
-// h-source, a web software to build a community of people that want to share their hardware information.
-// Copyright (C) 2010 Antonio Gallo (h-source-copyright.txt)
-//
-// This file is part of h-source
-//
-// h-source is free software: you can redistribute it and/or modify
-// it under the terms of the GNU General Public License as published by
-// the Free Software Foundation, either version 3 of the License, or
-// (at your option) any later version.
-//
-// h-source is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License
-// along with h-source. If not, see <http://www.gnu.org/licenses/>.
-
-if (!defined('EG')) die('Direct access not allowed!');
-
-//this controller is used to carry out the actions of the superadmin
-class ManagerController extends BaseController
-{
-
- public function __construct($model, $controller, $queryString)
- {
- parent::__construct($model, $controller, $queryString);
-
- $this->model('DistrosModel');
- $this->modelName = 'DistrosModel';
-
- $data['title'] = 'Manager - '.Website::$generalName;
- $this->append($data);
-
- $this->setArgKeys(array('page:forceInt'=>1));
-
- $this->s['registered']->check('manager');
- }
-
- public function distros($lang = 'en') { //view all the users
-
- $this->shift(1);
-
- $this->loadScaffold('main',array('popup'=>true,'popupType'=>'inclusive','recordPerPage'=>30, 'mainAction'=>'distros/'.$this->lang, "mainMenu" => "add"));
-
- $this->scaffold->loadMain('distros.full_name,distros.clean_name','distros.id_distro','moveup,movedown,ledit,del');
- $this->scaffold->setHead(gtext('TITLE').','.gtext('DISTRO-CODE'));
-
- $this->scaffold->mainMenu->links['add']['url'] = 'form/insert/0';
- $this->scaffold->mainMenu->links['add']['title'] = gtext('Insert a new distro');
-
- $this->scaffold->update('del');
-
- $this->scaffold->model->clear();
-
- $this->scaffold->model->orderBy("id_order");
-
- $this->scaffold->update('moveup,movedown');
-
- $data['scaffold'] = $this->scaffold->render();
-// echo $this->scaffold->model->getQuery();
-
- $data['notice'] = $this->scaffold->model->notice;
-
- $this->append($data);
- $this->cleverLoad('distros');
- $this->right($this->lang);
- }
-
-} \ No newline at end of file
diff --git a/h-source/Application/Controllers/UsersController.php b/h-source/Application/Controllers/UsersController.php
index c324804..741eaf4 100644
--- a/h-source/Application/Controllers/UsersController.php
+++ b/h-source/Application/Controllers/UsersController.php
@@ -136,8 +136,8 @@ class UsersController extends BaseController
);
$this->m['UsersModel']->databaseConditions['insert'] = array(
- "checkUnique" => "username|the username is already present",
- "+checkUnique" => "e_mail|the e-mail address is already present"
+ "checkUnique" => "username",
+ "+checkUnique" => "e_mail"
);
if ($this->s['registered']->status['status'] === 'logged')
diff --git a/h-source/Application/Controllers/WikiController.php b/h-source/Application/Controllers/WikiController.php
index 6304d77..5dc05b8 100644
--- a/h-source/Application/Controllers/WikiController.php
+++ b/h-source/Application/Controllers/WikiController.php
@@ -259,8 +259,7 @@ class WikiController extends BaseController
$data['title'] = 'history - '.Website::$generalName;
//get the first revision
- $res = $this->m['WikirevisionsModel']->db->select('wiki_revisions','id_rev','id_wiki='.$clean['id'],null,'id_rev',1);
-// echo $this->m['WikirevisionsModel']->getQuery();
+ $res = $this->m['WikirevisionsModel']->db->select('revisions','id_rev','id_wiki='.$clean['id'],null,'id_rev',1);
if (count($res) > 0)
{
$data['firstRev'] = $res[0]['wiki_revisions']['id_rev'];
diff --git a/h-source/Application/Hooks/AfterInitialization.php b/h-source/Application/Hooks/AfterInitialization.php
index a369309..a369309 100644..100755
--- a/h-source/Application/Hooks/AfterInitialization.php
+++ b/h-source/Application/Hooks/AfterInitialization.php
diff --git a/h-source/Application/Hooks/BeforeChecks.php b/h-source/Application/Hooks/BeforeChecks.php
index 0cbf220..6f200e6 100644..100755
--- a/h-source/Application/Hooks/BeforeChecks.php
+++ b/h-source/Application/Hooks/BeforeChecks.php
@@ -13,11 +13,8 @@ if (!defined('EG')) die('Direct access not allowed!');
Params::$htmlentititiesCharset = "UTF-8";
+Params::$useHttps = true;
+
Params::$allowedSanitizeFunc .= ",sanitizeString,sanitizeAlphanum";
Params::$language = "En";
-
-if (Version::get() === 'mobile')
-{
- Route::$allowed = Version::$mobileAllowed;
-} \ No newline at end of file
diff --git a/h-source/Application/Hooks/BeforeInitialization.php b/h-source/Application/Hooks/BeforeInitialization.php
index 6d1851b..6d1851b 100644..100755
--- a/h-source/Application/Hooks/BeforeInitialization.php
+++ b/h-source/Application/Hooks/BeforeInitialization.php
diff --git a/h-source/Application/Hooks/index.html b/h-source/Application/Hooks/index.html
index 8d1c8b6..8d1c8b6 100644..100755
--- a/h-source/Application/Hooks/index.html
+++ b/h-source/Application/Hooks/index.html
diff --git a/h-source/Application/Include/hardware.php b/h-source/Application/Include/hardware.php
index 3995a40..bd83987 100644
--- a/h-source/Application/Include/hardware.php
+++ b/h-source/Application/Include/hardware.php
@@ -346,7 +346,7 @@ class Notebooks extends Hardware
"Purism" => "Purism",
"Qbex" => "Qbex",
"SAMSUNG" => "SAMSUNG",
- "Slimbook" => "Slimbook",
+ "Slimbook" => "Slimbook",
"Sony" => "Sony",
"System76" => "System76",
"ThinkPenguin" => "ThinkPenguin",
diff --git a/h-source/Application/Include/params.php b/h-source/Application/Include/params.php
deleted file mode 100644
index 19f1ed7..0000000
--- a/h-source/Application/Include/params.php
+++ /dev/null
@@ -1,228 +0,0 @@
-<?php
-
-// h-source, a web software to build a community of people that want to share their hardware information.
-// Copyright (C) 2010 Antonio Gallo (h-source-copyright.txt)
-//
-// This file is part of h-source
-//
-// h-source is free software: you can redistribute it and/or modify
-// it under the terms of the GNU General Public License as published by
-// the Free Software Foundation, either version 3 of the License, or
-// (at your option) any later version.
-//
-// h-source is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License
-// along with h-source. If not, see <http://www.gnu.org/licenses/>.
-
-if (!defined('EG')) die('Direct access not allowed!');
-
-class Website
-{
- static public $generalMail = "";
-
- static public $fromEmail = "noreply@h-node.org";
-
- static public $generalName = "h-node.org";
-
- static public $projectName = "h-node";
-
- static public $mailServer = "";
-
- static public $mailPassword = "";
-
- static public $allowAnonymousSubmission = "yes";
-
- static public $statusnetGroupText = "";
-
- static public $useSMTP = true;
-
- //use a xml file the modules of the website?
- static public $useXmlConfigFile = true;
-
- //folder of the xml configuration file
- //the constant ROOT contains the path to the root folder of your installaton of h-source
- static public $xmlConfigFileFolder = ROOT;
-}
-
-class Account
-{
-
- static public $confirmTime = 3600;
-
- public static function getTransport()
- {
- if (Website::$useSMTP)
- {
- return Swift_SmtpTransport::newInstance(Website::$mailServer, 25)->setUsername(Website::$generalMail)->setPassword(Website::$mailPassword);
- }
- else
- {
- return Swift_MailTransport::newInstance();
- }
- }
-
- static public function confirm($username,$e_mail,$id_user,$token)
- {
- require_once (ROOT.'/External/swiftmailer/lib/swift_required.php');
-
- $clean['username'] = sanitizeAll($username);
- $clean['id_user'] = (int)$id_user;
- $clean['token'] = sanitizeAll($token);
-
- $siteName = Website::$generalName;
- $siteMail = Website::$generalMail;
-
- $mess = gtext("Hello,\n\nyou have registered an account at")." $siteName ".gtext("with the following data:\nusername: ").$clean['username']."\n\n".gtext("in order to confirm the registration of the new account please follow the link below")."\n".Url::getRoot()."users/confirm/".Lang::$current."/".$clean['id_user']."/".$clean['token']."\n\n".gtext("If you don't want to confirm the account registration\nthen wait one hour and your username and e-mail will be deleted from the database")."\n\n".gtext("If you received this e-mail for error, please simply disregard this message");
-
- $message = Swift_Message::newInstance()->setSubject('['.Website::$projectName.'] '.gtext("account registration"))->setFrom(array(Website::$fromEmail => $siteName))->setTo(array($e_mail))->setBody($mess);
-
- //Create the Transport
- $transport = self::getTransport();
-
- //Create the Mailer using your created Transport
- $mailer = Swift_Mailer::newInstance($transport);
-
- //Send the message
- $result = $mailer->send($message);
-
- if ($result)
- {
- return true;
- }
- else
- {
- return false;
- }
-
- }
-
- static public function sendnew($username,$e_mail,$id_user,$token)
- {
- require_once (ROOT.'/External/swiftmailer/lib/swift_required.php');
-
- $clean['username'] = sanitizeAll($username);
- $clean['id_user'] = (int)$id_user;
- $clean['token'] = sanitizeAll($token);
-
- $siteName = Website::$generalName;
- $siteMail = Website::$generalMail;
-
- $mess = "Hello,\n\nyou have requested a new password for your account at $siteName.\nYour username is:\n".$clean['username']."\n\nin order to obtain a new password for your account follow the link below\n".Url::getRoot()."users/change/".Lang::$current."/".$clean['id_user']."/".$clean['token']."\n\nIf you don't want to change the password then disregard this mail\n";
-
- $message = Swift_Message::newInstance()->setSubject('['.Website::$projectName.'] request a new password')->setFrom(array(Website::$fromEmail => $siteName))->setTo(array($e_mail))->setBody($mess);
-
- //Create the Transport
- $transport = self::getTransport();
-
- //Create the Mailer using your created Transport
- $mailer = Swift_Mailer::newInstance($transport);
-
- //Send the message
- $result = $mailer->send($message);
-
- if ($result)
- {
- return true;
- }
- else
- {
- return false;
- }
-
- }
-
- static public function sendpassword($username,$e_mail,$password)
- {
- require_once (ROOT.'/External/swiftmailer/lib/swift_required.php');
-
- $clean['username'] = sanitizeAll($username);
- $clean['password'] = sanitizeAll($password);
-
- $siteName = Website::$generalName;
- $siteMail = Website::$generalMail;
-
- $mess = "Hello,\n\nyou have requested a new password for your account to $siteName.\nYour username is:\n".$clean['username']."\n\nYour new password is:\n".$clean['password']."\n";
-
- $message = Swift_Message::newInstance()->setSubject('['.Website::$projectName.'] get your new password ')->setFrom(array(Website::$fromEmail => $siteName))->setTo(array($e_mail))->setBody($mess);
-
- //Create the Transport
- $transport = self::getTransport();
-
- //Create the Mailer using your created Transport
- $mailer = Swift_Mailer::newInstance($transport);
-
- //Send the message
- $result = $mailer->send($message);
-
- if ($result)
- {
- return true;
- }
- else
- {
- return false;
- }
-
- }
-
- static public function sendTalkNotice($who,$e_mails,$id_hard)
- {
- require_once (ROOT.'/External/swiftmailer/lib/swift_required.php');
-
- $who = sanitizeAll($who);
- $id_hard = (int)$id_hard;
-
- $siteName = Website::$generalName;
- $siteMail = Website::$generalMail;
-
- $urls = getUrlsFromIdHard($id_hard);
-
- $mess = "$who has added a message to the talk page of a device you have contributed to maintain at $siteName\n\nThe whole conversation is here:\n\n".$urls['urlTalk']."\n\nThe device page is here:\n\n".$urls['urlView']."\n\nBest regards\nthe ".Website::$projectName." team\n\nP.S: you can disable the mail notifications in the profile page of your control panel";
-
- $message = Swift_Message::newInstance()->setSubject("[".Website::$projectName."] $who sent a notice to your attention")->setFrom(array(Website::$fromEmail => $siteName))->setTo($e_mails)->setBody($mess);
-
- //Create the Transport
- $transport = self::getTransport();
-
- //Create the Mailer using your created Transport
- $mailer = Swift_Mailer::newInstance($transport);
-
- //Send the message
- $result = $mailer->batchSend($message);
-
- }
-
- static public function sendWikiTalkNotice($who,$e_mails,$id_wiki)
- {
- require_once (ROOT.'/External/swiftmailer/lib/swift_required.php');
-
- $who = sanitizeAll($who);
- $id_wiki = (int)$id_wiki;
-
- $siteName = Website::$generalName;
- $siteMail = Website::$generalMail;
-
- $wiki = new WikiModel();
- $pageUrl = $wiki->toWikiPage($id_wiki);
- $domainName = rtrim(Url::getRoot(),"/");
- $talkUrl = $domainName."/wiki/talk/".Lang::$current."/$id_wiki";
-
- $mess = "$who has added a message to the talk page of a wiki page you have contributed to maintain at $siteName\n\nThe whole conversation is here:\n\n".$talkUrl."\n\nThe wiki page is here:\n\n".$pageUrl."\n\nBest regards\nthe ".Website::$projectName." team\n\nP.S: you can disable the mail notifications in the profile page of your control panel";
-
- $message = Swift_Message::newInstance()->setSubject("[".Website::$projectName."] $who sent a notice to your attention")->setFrom(array(Website::$fromEmail => $siteName))->setTo($e_mails)->setBody($mess);
-
- //Create the Transport
- $transport = self::getTransport();
-
- //Create the Mailer using your created Transport
- $mailer = Swift_Mailer::newInstance($transport);
-
- //Send the message
- $result = $mailer->batchSend($message);
-
- }
-} \ No newline at end of file
diff --git a/h-source/Application/Include/vendors.php b/h-source/Application/Include/vendors.php
new file mode 100644
index 0000000..1f2bcc3
--- /dev/null
+++ b/h-source/Application/Include/vendors.php
@@ -0,0 +1,4191 @@
+<?php
+
+// h-source, a web software to build a community of people that want to share their hardware information.
+// Copyright (C) 2010 Antonio Gallo (h-source-copyright.txt)
+//
+// This file is part of h-source
+//
+// h-source is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// h-source is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with h-source. If not, see <http://www.gnu.org/licenses/>.
+
+if (!defined('EG')) die('Direct access not allowed!');
+
+class Vendors
+{
+
+ public static function getName($id,$interface)
+ {
+ if (self::check($id,$interface))
+ {
+ $idArray = strcmp($interface,'USB') === 0 ? self::$usbId : self::$pciId;
+
+ $temp = explode(':',$id);
+ $vendorId = $temp[0];
+ return $idArray[$vendorId];
+ }
+ return 'not-known';
+ }
+
+ public static function check($id,$interface = 'USB')
+ {
+ if (preg_match('/^[a-zA-Z0-9]{4}(\:)[a-zA-Z0-9]{4}$/',$id))
+ {
+ $idArray = strcmp($interface,'USB') === 0 ? self::$usbId : self::$pciId;
+
+ $temp = explode(':',$id);
+ $vendorId = $temp[0];
+ if (array_key_exists($vendorId,$idArray))
+ {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ public static $pciId = array(
+ '0010' => 'Allied-Telesis-Inc',
+ '001a' => 'Ascend-Communications-Inc.',
+ '001c' => 'PEAK-System-Technik-GmbH',
+ '0033' => 'Paradyne-corp.',
+ '003d' => 'Lockheed-Martin-Marietta-Corp',
+ '0070' => 'Hauppauge-computer-works-Inc.',
+ '0071' => 'Nebula-Electronics-Ltd.',
+ '00f5' => 'BFG-Technologies-Inc.',
+ '0100' => 'Ncipher-Corp-Ltd',
+ '0123' => 'General-Dynamics',
+ '0291' => 'Davicom-Semiconductor-Inc.',
+ '02e0' => 'XFX-Pine-Group-Inc',
+ '0315' => 'SK-Electronics-Co.-Ltd.',
+ '0357' => 'TTTech-AG',
+ '036f' => 'Trigem-Computer-Inc.',
+ '03f0' => 'Hewlett-Packard',
+ '0432' => 'SCM-Microsystems-Inc.',
+ '045e' => 'Microsoft',
+ '0482' => 'Kyocera',
+ '04cf' => 'Myson-Century-Inc',
+ '050d' => 'Belkin',
+ '058f' => 'Alcor-Micro-Corporation',
+ '05a9' => 'OmniVision',
+ '05e3' => 'CyberDoor',
+ '066f' => 'Sigmatel-Inc.',
+ '0675' => 'Dynalink',
+ '069d' => 'Hughes-Network-Systems-HNS',
+ '0721' => 'Sapphire-Inc.',
+ '0795' => 'Wired-Inc.',
+ '07ca' => 'AVerMedia-Technologies-Inc.',
+ '07d0' => 'ITT-Geospatial-Systems',
+ '08ff' => 'AuthenTec',
+ '093a' => 'PixArt-Imaging-Inc.',
+ '09c1' => 'Arris',
+ '0a89' => 'BREA-Technologies-Inc',
+ '0ace' => 'ZyDAS',
+ '0b0b' => 'Rhino-Equipment-Corp.',
+ '0b3d' => 'Brontes-Technologies',
+ '0b49' => 'ASCII-Corporation',
+ '0ccd' => 'TerraTec-Electronic-GmbH',
+ '0e11' => 'Compaq-Computer-Corporation',
+ '0e21' => 'Cowon-Systems-Inc.',
+ '0e55' => 'HaSoTec-GmbH',
+ '0f62' => 'Acrox-Technologies-Co.-Ltd.',
+ '1001' => 'Kolter-Electronic',
+ '1002' => 'Advanced-Micro-Devices-AMD',
+ '1003' => 'ULSI-Systems',
+ '1004' => 'VLSI-Technology-Inc',
+ '1005' => 'Avance-Logic-Inc.-ALI',
+ '1006' => 'Reply-Group',
+ '1007' => 'NetFrame-Systems-Inc',
+ '1008' => 'EPSON',
+ '100a' => 'Phoenix-Technologies',
+ '100b' => 'National-Semiconductor-Corp.',
+ '100c' => 'Tseng-Labs-Inc',
+ '100d' => 'AST-Research-Inc',
+ '100e' => 'Weitek',
+ '1010' => 'Video-Logic-Ltd.',
+ '1011' => 'Digital-Equipment-Corporation',
+ '1012' => 'Micronics-Computers-Inc',
+ '1013' => 'Cirrus-Logic',
+ '1014' => 'IBM',
+ '1015' => 'LSI-Logic-Corp-of-Canada',
+ '1016' => 'ICL-Personal-Systems',
+ '1017' => 'SPEA-Software-AG',
+ '1018' => 'Unisys-Systems',
+ '1019' => 'Elitegroup-Computer-Systems',
+ '101a' => 'AT-T-GIS-NCR',
+ '101b' => 'Vitesse-Semiconductor',
+ '101c' => 'Western-Digital',
+ '101e' => 'American-Megatrends-Inc.',
+ '101f' => 'PictureTel',
+ '1020' => 'Hitachi-Computer-Products',
+ '1022' => 'Advanced-Micro-Devices-AMD',
+ '1023' => 'Trident-Microsystems',
+ '1024' => 'Zenith-Data-Systems',
+ '1025' => 'Acer',
+ '1028' => 'Dell',
+ '1029' => 'Siemens-Nixdorf-IS',
+ '102a' => 'LSI-Logic',
+ '102b' => 'Matrox-Graphics-Inc.',
+ '102c' => 'Chips-and-Technologies',
+ '102d' => 'Wyse-Technology-Inc.',
+ '102e' => 'Olivetti-Advanced-Technology',
+ '102f' => 'Toshiba-America',
+ '1030' => 'TMC-Research',
+ '1031' => 'Miro-Computer-Products-AG',
+ '1032' => 'Compaq',
+ '1033' => 'NEC-Corporation',
+ '1034' => 'Framatome-Connectors-USA-Inc.',
+ '1035' => 'Comp.---Comm.-Research-Lab',
+ '1036' => 'Future-Domain-Corp.',
+ '1037' => 'Hitachi-Micro-Systems',
+ '1038' => 'AMP-Inc',
+ '103a' => 'Seiko-Epson-Corporation',
+ '103b' => 'Tatung-Corp.-Of-America',
+ '103c' => 'Hewlett-Packard',
+ '103e' => 'Solliday-Engineering',
+ '103f' => 'Synopsys-Logic-Modeling-Group',
+ '1040' => 'Accelgraphics-Inc.',
+ '1041' => 'Computrend',
+ '1042' => 'Micron',
+ '1043' => 'ASUSTeK-Computer-Inc.',
+ '1044' => 'Adaptec-formerly-DPT',
+ '1045' => 'OPTi-Inc.',
+ '1046' => 'IPC-Corporation-Ltd.',
+ '1047' => 'Genoa-Systems-Corp',
+ '1048' => 'Elsa-AG',
+ '1049' => 'Fountain-Technologies-Inc.',
+ '104b' => 'BusLogic',
+ '104c' => 'Texas-Instruments',
+ '104d' => 'Sony-Corporation',
+ '104e' => 'Oak-Technology-Inc',
+ '104f' => 'Co-time-Computer-Ltd',
+ '1050' => 'Winbond-Electronics-Corp',
+ '1051' => 'Anigma-Inc.',
+ '1052' => '-Young-Micro-Systems',
+ '1053' => 'Young-Micro-Systems',
+ '1054' => 'Hitachi-Ltd',
+ '1055' => 'Efar-Microsystems',
+ '1056' => 'ICL',
+ '105a' => 'Promise-Technology-Inc.',
+ '105b' => 'Foxconn-International-Inc.',
+ '105c' => 'Wipro-Infotech-Limited',
+ '105d' => 'Number-9-Computer-Company',
+ '105e' => 'Vtech-Computers-Ltd',
+ '105f' => 'Infotronic-America-Inc',
+ '1060' => 'United-Microelectronics-UMC',
+ '1061' => 'I.I.T.',
+ '1062' => 'Maspar-Computer-Corp',
+ '1063' => 'Ocean-Office-Automation',
+ '1064' => 'Alcatel',
+ '1065' => 'Texas-Microsystems',
+ '1066' => 'PicoPower-Technology',
+ '1067' => 'Mitsubishi-Electric',
+ '1068' => 'Diversified-Technology',
+ '1069' => 'Mylex-Corporation',
+ '106a' => 'Aten-Research-Inc',
+ '106b' => 'Apple-Computer-Inc.',
+ '106c' => 'Hynix-Semiconductor',
+ '106d' => 'Sequent-Computer-Systems',
+ '106e' => 'DFI-Inc',
+ '106f' => 'City-Gate-Development-Ltd',
+ '1070' => 'Daewoo-Telecom-Ltd',
+ '1071' => 'Mitac',
+ '1072' => 'GIT-Co-Ltd',
+ '1073' => 'Yamaha-Corporation',
+ '1074' => 'NexGen-Microsystems',
+ '1076' => 'Chaintech-Computer-Co.-Ltd',
+ '1077' => 'QLogic-Corp.',
+ '1078' => 'Cyrix-Corporation',
+ '1079' => 'I-Bus',
+ '107a' => 'NetWorth',
+ '107b' => 'Gateway-2000',
+ '107d' => 'LeadTek-Research-Inc.',
+ '107e' => 'Interphase-Corporation',
+ '107f' => 'Data-Technology-Corporation',
+ '1080' => 'Contaq-Microsystems',
+ '1081' => 'Supermac-Technology',
+ '1082' => 'EFA-Corporation-of-America',
+ '1083' => 'Forex-Computer-Corporation',
+ '1084' => 'Parador',
+ '1085' => 'Tulip-Computers-Int.B.V.',
+ '1086' => 'J.-Bond-Computer-Systems',
+ '1087' => 'Cache-Computer',
+ '1088' => 'Microcomputer-Systems-M-Son',
+ '1089' => 'Data-General-Corporation',
+ '108c' => 'Oakleigh-Systems-Inc.',
+ '108d' => 'Olicom',
+ '108f' => 'Systemsoft',
+ '1091' => 'Intergraph-Corporation',
+ '1092' => 'Diamond-Multimedia-Systems',
+ '1093' => 'National-Instruments',
+ '1096' => 'Alacron',
+ '1097' => 'Appian-Technology',
+ '1098' => 'Quantum-Designs-H.K.-Ltd',
+ '1099' => 'Samsung-Electronics-Co.-Ltd',
+ '109a' => 'Packard-Bell',
+ '109b' => 'Gemlight-Computer-Ltd.',
+ '109c' => 'Megachips-Corporation',
+ '109d' => 'Zida-Technologies-Ltd.',
+ '109e' => 'Brooktree-Corporation',
+ '109f' => 'Trigem-Computer-Inc.',
+ '10a0' => 'Meidensha-Corporation',
+ '10a1' => 'Juko-Electronics-Ind.-Co.-Ltd',
+ '10a2' => 'Quantum-Corporation',
+ '10a3' => 'Everex-Systems-Inc',
+ '10a4' => 'Globe-Manufacturing-Sales',
+ '10a5' => 'Smart-Link-Ltd.',
+ '10a6' => 'Informtech-Industrial-Ltd.',
+ '10a7' => 'Benchmarq-Microelectronics',
+ '10a8' => 'Sierra-Semiconductor',
+ '10a9' => 'Silicon-Graphics-Inc.',
+ '10aa' => 'ACC-Microelectronics',
+ '10ab' => 'Digicom',
+ '10ac' => 'Honeywell-IAC',
+ '10ad' => 'Symphony-Labs',
+ '10ae' => 'Cornerstone-Technology',
+ '10af' => 'Micro-Computer-Systems-Inc',
+ '10b0' => 'CardExpert-Technology',
+ '10b1' => 'Cabletron-Systems-Inc',
+ '10b2' => 'Raytheon-Company',
+ '10b3' => 'Databook-Inc',
+ '10b4' => 'STB-Systems-Inc',
+ '10b5' => 'PLX-Technology-Inc.',
+ '10b6' => 'Madge-Networks',
+ '10b7' => '3Com-Corporation',
+ '10b9' => 'ALi-Corporation',
+ '10ba' => 'Mitsubishi-Electric-Corp.',
+ '10bb' => 'Dapha-Electronics-Corporation',
+ '10bc' => 'Advanced-Logic-Research',
+ '10bd' => 'Surecom-Technology',
+ '10be' => 'Tseng-Labs-International-Co.',
+ '10bf' => 'Most-Inc',
+ '10c0' => 'Boca-Research-Inc.',
+ '10c1' => 'ICM-Co.-Ltd.',
+ '10c2' => 'Auspex-Systems-Inc.',
+ '10c3' => 'Samsung-Semiconductors-Inc.',
+ '10c5' => 'Xerox-Corporation',
+ '10c6' => 'Rambus-Inc.',
+ '10c7' => 'Media-Vision',
+ '10c8' => 'Neomagic-Corporation',
+ '10c9' => 'Dataexpert-Corporation',
+ '10ca' => 'Fujitsu-Microelectr.-Inc.',
+ '10cb' => 'Omron-Corporation',
+ '10cd' => 'Advanced-System-Products-Inc',
+ '10ce' => 'Radius',
+ '10d1' => 'FuturePlus-Systems-Corp.',
+ '10d2' => 'Molex-Incorporated',
+ '10d3' => 'Jabil-Circuit-Inc',
+ '10d4' => 'Hualon-Microelectronics',
+ '10d5' => 'Autologic-Inc.',
+ '10d6' => 'Cetia',
+ '10d7' => 'BCM-Advanced-Research',
+ '10d8' => 'Advanced-Peripherals-Labs',
+ '10d9' => 'Macronix-Inc.-MXIC',
+ '10da' => 'Compaq-IPG-Austin',
+ '10db' => 'Rohm-LSI-Systems-Inc.',
+ '10dc' => 'CERN-ECP-EDU',
+ '10dd' => 'Evans---Sutherland',
+ '10de' => 'NVIDIA',
+ '10df' => 'Emulex-Corporation',
+ '10e1' => 'Tekram-Technology-Co.Ltd.',
+ '10e2' => 'Aptix-Corporation',
+ '10e3' => 'Tundra-Semiconductor-Corp.',
+ '10e4' => 'Tandem-Computers',
+ '10e5' => 'Micro-Industries-Corporation',
+ '10e7' => 'Vadem',
+ '10e8' => 'Applied-Micro-Circuits-Corp.',
+ '10e9' => 'Alps-Electric-Co.-Ltd.',
+ '10ea' => 'Integraphics',
+ '10ec' => 'Realtek',
+ '10eb' => 'Artists-Graphics',
+ '10ed' => 'Ascii-Corporation',
+ '10ee' => 'Xilinx-Corporation',
+ '10f0' => 'Peritek-Corporation',
+ '10f1' => 'Tyan-Computer',
+ '10f2' => 'Achme-Computer-Inc.',
+ '10f3' => 'Alaris-Inc.',
+ '10f4' => 'S-MOS-Systems-Inc.',
+ '10f5' => 'NKK-Corporation',
+ '10f8' => 'Altos-India-Ltd',
+ '10f9' => 'PC-Direct',
+ '10fa' => 'Truevision',
+ '10fc' => 'I-O-Data-Device-Inc.',
+ '10fd' => 'Soyo-Computer-Inc',
+ '10fe' => 'Fast-Multimedia-AG',
+ '10ff' => 'NCube',
+ '1100' => 'Jazz-Multimedia',
+ '1101' => 'Initio-Corporation',
+ '1102' => 'Creative-Labs',
+ '1104' => 'RasterOps-Corp.',
+ '1105' => 'Sigma-Designs-Inc.',
+ '1106' => 'VIA-Technologies-Inc.',
+ '1107' => 'Stratus-Computers',
+ '1108' => 'Proteon-Inc.',
+ '110a' => 'Siemens-Nixdorf-AG',
+ '110b' => 'Chromatic-Research-Inc.',
+ '110c' => 'Mini-Max-Technology-Inc.',
+ '110d' => 'Znyx-Advanced-Systems',
+ '110e' => 'CPU-Technology',
+ '110f' => 'Ross-Technology',
+ '1110' => 'Powerhouse-Systems',
+ '1111' => 'Santa-Cruz-Operation',
+ '1113' => 'Accton-Technology-Corporation',
+ '1114' => 'Atmel-Corporation',
+ '1115' => '3D-Labs',
+ '1116' => 'Data-Translation',
+ '1117' => 'Datacube-Inc',
+ '1118' => 'Berg-Electronics',
+ '111a' => 'Efficient-Networks-Inc',
+ '111b' => 'Teledyne-Electronic-Systems',
+ '111c' => 'Tricord-Systems-Inc.',
+ '111e' => 'Eldec',
+ '111f' => 'Precision-Digital-Images',
+ '1120' => 'EMC-Corporation',
+ '1121' => 'Zilog',
+ '1122' => 'Multi-tech-Systems-Inc.',
+ '1123' => 'Excellent-Design-Inc.',
+ '1124' => 'Leutron-Vision-AG',
+ '1125' => 'Eurocore',
+ '1126' => 'Vigra',
+ '1127' => 'FORE-Systems-Inc',
+ '1129' => 'Firmworks',
+ '112b' => 'Linotype---Hell-AG',
+ '112c' => 'Zenith-Data-Systems',
+ '112d' => 'Ravicad',
+ '112f' => 'Dalsa-Inc.',
+ '1130' => 'Computervision',
+ '1131' => 'Philips',
+ '1132' => 'Mitel-Corp.',
+ '1133' => 'Dialogic-Corporation',
+ '1134' => 'Mercury-Computer-Systems',
+ '1135' => 'Fuji-Xerox-Co-Ltd',
+ '1136' => 'Momentum-Data-Systems',
+ '1137' => 'Cisco-Systems-Inc',
+ '1138' => 'Ziatech-Corporation',
+ '1139' => 'Dynamic-Pictures-Inc',
+ '113a' => 'FWB-Inc',
+ '113b' => 'Network-Computing-Devices',
+ '113c' => 'Cyclone-Microsystems-Inc.',
+ '113d' => 'Leading-Edge-Products-Inc',
+ '113f' => 'Equinox-Systems-Inc.',
+ '1140' => 'Intervoice-Inc',
+ '1141' => 'Crest-Microsystem-Inc',
+ '1143' => 'NetPower-Inc',
+ '1144' => 'Cincinnati-Milacron',
+ '1145' => 'Workbit-Corporation',
+ '1146' => 'Force-Computers',
+ '1147' => 'Interface-Corp',
+ '1149' => 'Win-System-Corporation',
+ '114a' => 'VMIC',
+ '114b' => 'Canopus-Co.-Ltd',
+ '114c' => 'Annabooks',
+ '114d' => 'IC-Corporation',
+ '114e' => 'Nikon-Systems-Inc',
+ '114f' => 'Digi-International',
+ '1150' => 'Thinking-Machines-Corp',
+ '1151' => 'JAE-Electronics-Inc.',
+ '1152' => 'Megatek',
+ '1153' => 'Land-Win-Electronic-Corp',
+ '1154' => 'Melco-Inc',
+ '1155' => 'Pine-Technology-Ltd',
+ '1156' => 'Periscope-Engineering',
+ '1157' => 'Avsys-Corporation',
+ '1158' => 'Voarx-R---D-Inc',
+ '1159' => 'Mutech-Corp',
+ '115a' => 'Harlequin-Ltd',
+ '115b' => 'Parallax-Graphics',
+ '115c' => 'Photron-Ltd.',
+ '115d' => 'Xircom',
+ '115e' => 'Peer-Protocols-Inc',
+ '115f' => 'Maxtor-Corporation',
+ '1160' => 'Megasoft-Inc',
+ '1161' => 'PFU-Limited',
+ '1162' => 'OA-Laboratory-Co-Ltd',
+ '1163' => 'Rendition',
+ '1165' => 'Imagraph-Corporation',
+ '1166' => 'Broadcom',
+ '1167' => 'Mutoh-Industries-Inc',
+ '1168' => 'Thine-Electronics-Inc',
+ '116b' => 'Connectware-Inc',
+ '116d' => 'Martin-Marietta',
+ '116e' => 'Electronics-for-Imaging',
+ '116f' => 'Workstation-Technology',
+ '1170' => 'Inventec-Corporation',
+ '1171' => 'Loughborough-Sound-Images-Plc',
+ '1172' => 'Altera-Corporation',
+ '1173' => 'Adobe-Systems-Inc',
+ '1174' => 'Bridgeport-Machines',
+ '1175' => 'Mitron-Computer-Inc.',
+ '1176' => 'SBE-Incorporated',
+ '1177' => 'Silicon-Engineering',
+ '1178' => 'Alfa-Inc.',
+ '1179' => 'Toshiba-America-Info-Systems',
+ '117a' => 'A-Trend-Technology',
+ '117b' => 'L-G-Electronics-Inc.',
+ '117c' => 'Atto-Technology',
+ '117d' => 'Becton---Dickinson',
+ '117e' => 'T-R-Systems',
+ '117f' => 'Integrated-Circuit-Systems',
+ '1180' => 'Ricoh-Co-Ltd',
+ '1181' => 'Telmatics-International',
+ '1183' => 'Fujikura-Ltd',
+ '1184' => 'Forks-Inc',
+ '1185' => 'Dataworld-International-Ltd',
+ '1186' => 'D-Link',
+ '1189' => 'Matsushita-Electronics-Co-Ltd',
+ '118a' => 'Hilevel-Technology',
+ '118b' => 'Hypertec-Pty-Limited',
+ '118c' => 'Corollary-Inc',
+ '118d' => 'BitFlow-Inc',
+ '118e' => 'Hermstedt-GmbH',
+ '118f' => 'Green-Logic',
+ '1190' => 'Tripace',
+ '1191' => 'Artop-Electronic-Corp',
+ '1192' => 'Densan-Company-Ltd',
+ '1193' => 'Zeitnet-Inc.',
+ '1194' => 'Toucan-Technology',
+ '1195' => 'Ratoc-System-Inc',
+ '1196' => 'Hytec-Electronics-Ltd',
+ '1197' => 'Gage-Applied-Sciences-Inc.',
+ '1198' => 'Lambda-Systems-Inc',
+ '1199' => 'Attachmate-Corporation',
+ '119a' => 'Mind-Share-Inc.',
+ '119b' => 'Omega-Micro-Inc.',
+ '119c' => 'Information-Technology-Inst.',
+ '119d' => 'Bug-Inc.-Sapporo-Japan',
+ '119e' => 'Fujitsu-Microelectronics-Ltd.',
+ '119f' => 'Bull-HN-Information-Systems',
+ '11a0' => 'Convex-Computer-Corporation',
+ '11a1' => 'Hamamatsu-Photonics-K.K.',
+ '11a4' => 'Barco-Graphics-NV',
+ '11a5' => 'Microunity-Systems-Eng.-Inc',
+ '11a6' => 'Pure-Data-Ltd.',
+ '11a7' => 'Power-Computing-Corp.',
+ '11a8' => 'Systech-Corp.',
+ '11a9' => 'InnoSys-Inc.',
+ '11aa' => 'Actel',
+ '11ab' => 'Marvell-Technology-Group-Ltd.',
+ '11ad' => 'Lite-On-Communications-Inc',
+ '11ae' => 'Aztech-System-Ltd',
+ '11af' => 'Avid-Technology-Inc.',
+ '11b0' => 'V3-Semiconductor-Inc.',
+ '11b1' => 'Apricot-Computers',
+ '11b2' => 'Eastman-Kodak',
+ '11b3' => 'Barr-Systems-Inc.',
+ '11b5' => 'Radstone-Technology-Plc',
+ '11b6' => 'United-Video-Corp',
+ '11b7' => 'Motorola',
+ '11b8' => 'XPoint-Technologies-Inc',
+ '11b9' => 'Pathlight-Technology-Inc.',
+ '11ba' => 'Videotron-Corp',
+ '11bb' => 'Pyramid-Technology',
+ '11bc' => 'Network-Peripherals-Inc',
+ '11bd' => 'Pinnacle-Systems-Inc.',
+ '11bf' => 'Astrodesign-Inc.',
+ '11c0' => 'Hewlett-Packard',
+ '11c2' => 'Sand-Microelectronics',
+ '11c3' => 'NEC-Corporation',
+ '11c4' => 'Document-Technologies-Inc',
+ '11c5' => 'Shiva-Corporation',
+ '11c6' => 'Dainippon-Screen-Mfg.-Co.-Ltd',
+ '11c7' => 'D.C.M.-Data-Systems',
+ '11c9' => 'Magma',
+ '11ca' => 'LSI-Systems-Inc',
+ '11cb' => 'Specialix-Research-Ltd.',
+ '11cd' => 'HAL-Computer-Systems-Inc.',
+ '11ce' => 'Netaccess',
+ '11d1' => 'Auravision',
+ '11d2' => 'Intercom-Inc.',
+ '11d3' => 'Trancell-Systems-Inc',
+ '11d4' => 'Analog-Devices',
+ '11d5' => 'Ikon-Corporation',
+ '11d6' => 'Tekelec-Telecom',
+ '11d7' => 'Trenton-Technology-Inc.',
+ '11d9' => 'TEC-Corporation',
+ '11da' => 'Novell',
+ '11db' => 'Sega-Enterprises-Ltd',
+ '11dc' => 'Questra-Corporation',
+ '11dd' => 'Crosfield-Electronics-Limited',
+ '11de' => 'Zoran-Corporation',
+ '11df' => 'New-Wave-PDG',
+ '11e0' => 'Cray-Communications-A-S',
+ '11e1' => 'GEC-Plessey-Semi-Inc.',
+ '11e3' => 'Quicklogic-Corporation',
+ '11e4' => 'Second-Wave-Inc',
+ '11e5' => 'IIX-Consulting',
+ '11e6' => 'Mitsui-Zosen-System-Research',
+ '11e9' => 'Highwater-Designs-Ltd.',
+ '11ea' => 'Elsag-Bailey',
+ '11eb' => 'Formation-Inc.',
+ '11ec' => 'Coreco-Inc',
+ '11ed' => 'Mediamatics',
+ '11ee' => 'Dome-Imaging-Systems-Inc',
+ '11ef' => 'Nicolet-Technologies-B.V.',
+ '11f0' => 'Compu-Shack',
+ '11f1' => 'Symbios-Logic-Inc',
+ '11f2' => 'Picture-Tel-Japan-K.K.',
+ '11f3' => 'Keithley-Metrabyte',
+ '11f4' => 'Kinetic-Systems-Corporation',
+ '11f6' => 'Compex',
+ '11f7' => 'Scientific-Atlanta',
+ '11f8' => 'PMC-Sierra-Inc.',
+ '11f9' => 'I-Cube-Inc',
+ '11fb' => 'Datel-Inc',
+ '11fc' => 'Silicon-Magic',
+ '11fd' => 'High-Street-Consultants',
+ '11fe' => 'Comtrol-Corporation',
+ '11ff' => 'Scion-Corporation',
+ '1200' => 'CSS-Corporation',
+ '1201' => 'Vista-Controls-Corp',
+ '1202' => 'Network-General-Corp.',
+ '1205' => 'Array-Corporation',
+ '1206' => 'Amdahl-Corporation',
+ '1208' => 'Parsytec-GmbH',
+ '1209' => 'SCI-Systems-Inc',
+ '120a' => 'Synaptel',
+ '120b' => 'Adaptive-Solutions',
+ '120c' => 'Technical-Corp.',
+ '120d' => 'Compression-Labs-Inc.',
+ '120e' => 'Cyclades-Corporation',
+ '120f' => 'Essential-Communications',
+ '1210' => 'Hyperparallel-Technologies',
+ '1211' => 'Braintech-Inc',
+ '1212' => 'Kingston-Technology-Corp.',
+ '1215' => 'Interware-Co.-Ltd',
+ '1216' => 'Purup-Prepress-A-S',
+ '1217' => 'O2-Micro-Inc.',
+ '1218' => 'Hybricon-Corp.',
+ '1219' => 'First-Virtual-Corporation',
+ '121a' => '3Dfx-Interactive-Inc.',
+ '121c' => 'Nippon-Texaco.-Ltd',
+ '121e' => 'CSPI',
+ '121f' => 'Arcus-Technology-Inc.',
+ '1220' => 'Ariel-Corporation',
+ '1221' => 'Contec-Co.-Ltd',
+ '1222' => 'Ancor-Communications-Inc.',
+ '1224' => 'Interactive-Images',
+ '1225' => 'Power-I-O-Inc.',
+ '1227' => 'Tech-Source',
+ '1228' => 'Norsk-Elektro-Optikk-A-S',
+ '1229' => 'Data-Kinesis-Inc.',
+ '122a' => 'Integrated-Telecom',
+ '122c' => 'Sican-GmbH',
+ '122d' => 'Aztech-System-Ltd',
+ '122e' => 'Xyratex',
+ '122f' => 'Andrew-Corporation',
+ '1230' => 'Fishcamp-Engineering',
+ '1231' => 'Woodward-McCoach-Inc.',
+ '1232' => 'GPT-Limited',
+ '1233' => 'Bus-Tech-Inc.',
+ '1235' => 'Risq-Modular-Systems-Inc.',
+ '1236' => 'Sigma-Designs-Corporation',
+ '1237' => 'Alta-Technology-Corporation',
+ '1238' => 'Adtran',
+ '1239' => '3DO-Company',
+ '123a' => 'Visicom-Laboratories-Inc.',
+ '123b' => 'Seeq-Technology-Inc.',
+ '123c' => 'Century-Systems-Inc.',
+ '123d' => 'Engineering-Design-Team-Inc.',
+ '123e' => 'Simutech-Inc.',
+ '123f' => 'C-Cube-Microsystems',
+ '1240' => 'Marathon-Technologies-Corp.',
+ '1241' => 'DSC-Communications',
+ '1243' => 'Delphax',
+ '1245' => 'A.P.D.-S.A.',
+ '1246' => 'Dipix-Technologies-Inc.',
+ '1247' => 'Xylon-Research-Inc.',
+ '1248' => 'Central-Data-Corporation',
+ '1249' => 'Samsung-Electronics-Co.-Ltd.',
+ '124a' => 'AEG-Electrocom-GmbH',
+ '124b' => 'SBS-Greenspring-Modular-I-O',
+ '124c' => 'Solitron-Technologies-Inc.',
+ '124d' => 'Stallion-Technologies-Inc.',
+ '124e' => 'Cylink',
+ '124f' => 'Infortrend-Technology-Inc.',
+ '1251' => 'VLSI-Solutions-Oy',
+ '1253' => 'Guzik-Technical-Enterprises',
+ '1254' => 'Linear-Systems-Ltd.',
+ '1255' => 'Optibase-Ltd',
+ '1256' => 'Perceptive-Solutions-Inc.',
+ '1257' => 'Vertex-Networks-Inc.',
+ '1258' => 'Gilbarco-Inc.',
+ '1259' => 'Allied-Telesyn-International',
+ '125a' => 'ABB-Power-Systems',
+ '125b' => 'Asix-Electronics-Corporation',
+ '125c' => 'Aurora-Technologies-Inc.',
+ '125d' => 'ESS-Technology',
+ '125e' => 'Specialvideo-Engineering-SRL',
+ '125f' => 'Concurrent-Technologies-Inc.',
+ '1260' => 'Intersil-Corporation',
+ '1262' => 'ES-Computer-Company-Ltd.',
+ '1263' => 'Sonic-Solutions',
+ '1264' => 'Aval-Nagasaki-Corporation',
+ '1265' => 'Casio-Computer-Co.-Ltd.',
+ '1266' => 'Microdyne-Corporation',
+ '1267' => 'S.-A.-Telecommunications',
+ '1268' => 'Tektronix',
+ '1269' => 'Thomson-CSF-TTM',
+ '126a' => 'Lexmark',
+ '126b' => 'Adax-Inc.',
+ '126c' => 'Northern-Telecom',
+ '126d' => 'Splash-Technology-Inc.',
+ '126f' => 'Silicon-Motion-Inc.',
+ '1270' => 'Olympus-Optical-Co.-Ltd.',
+ '1271' => 'GW-Instruments',
+ '1272' => 'Telematics-International',
+ '1273' => 'Hughes-Network-Systems',
+ '1274' => 'Ensoniq',
+ '1275' => 'Network-Appliance-Corporation',
+ '1277' => 'Comstream',
+ '1279' => 'Transmeta-Corporation',
+ '127a' => 'Rockwell-International',
+ '127b' => 'Pixera-Corporation',
+ '127c' => 'Crosspoint-Solutions-Inc.',
+ '127d' => 'Vela-Research',
+ '127e' => 'Winnov-L.P.',
+ '127f' => 'Fujifilm',
+ '1280' => 'Photoscript-Group-Ltd.',
+ '1281' => 'Yokogawa-Electric-Corporation',
+ '1282' => 'Davicom-Semiconductor-Inc.',
+ '1284' => 'Sahara-Networks-Inc.',
+ '1285' => 'Platform-Technologies-Inc.',
+ '1286' => 'Mazet-GmbH',
+ '1287' => 'M-Pact-Inc.',
+ '1288' => 'Timestep-Corporation',
+ '1289' => 'AVC-Technology-Inc.',
+ '128a' => 'Asante-Technologies-Inc.',
+ '128b' => 'Transwitch-Corporation',
+ '128c' => 'Retix-Corporation',
+ '128d' => 'G2-Networks-Inc.',
+ '128f' => 'Tateno-Dennou-Inc.',
+ '1290' => 'Sord-Computer-Corporation',
+ '1291' => 'NCS-Computer-Italia',
+ '1292' => 'Tritech-Microelectronics-Inc',
+ '1293' => 'Media-Reality-Technology',
+ '1294' => 'Rhetorex-Inc.',
+ '1295' => 'Imagenation-Corporation',
+ '1296' => 'Kofax-Image-Products',
+ '1299' => 'Knowledge-Technology-Lab.',
+ '129a' => 'VMetro-inc.',
+ '129b' => 'Image-Access',
+ '129c' => 'Jaycor',
+ '129d' => 'Compcore-Multimedia-Inc.',
+ '129e' => 'Victor-Company-of-Japan-Ltd.',
+ '129f' => 'OEC-Medical-Systems-Inc.',
+ '12a0' => 'Allen-Bradley-Company',
+ '12a1' => 'Simpact-Associates-Inc.',
+ '12a2' => 'Newgen-Systems-Corporation',
+ '12a3' => 'Lucent-Technologies',
+ '12a5' => 'Vision-Dynamics-Ltd.',
+ '12a6' => 'Scalable-Networks-Inc.',
+ '12a7' => 'AMO-GmbH',
+ '12a8' => 'News-Datacom',
+ '12a9' => 'Xiotech-Corporation',
+ '12aa' => 'SDL-Communications-Inc.',
+ '12ac' => 'Measurex-Corporation',
+ '12ad' => 'Multidata-GmbH',
+ '12ae' => 'Alteon-Networks-Inc.',
+ '12af' => 'TDK-USA-Corp',
+ '12b0' => 'Jorge-Scientific-Corp',
+ '12b1' => 'GammaLink',
+ '12b2' => 'General-Signal-Networks',
+ '12b3' => 'Inter-Face-Co-Ltd',
+ '12b4' => 'FutureTel-Inc',
+ '12b5' => 'Granite-Systems-Inc.',
+ '12b6' => 'Natural-Microsystems',
+ '12b8' => 'Korg',
+ '12ba' => 'BittWare-Inc.',
+ '12bb' => 'Nippon-Unisoft-Corporation',
+ '12bc' => 'Array-Microsystems',
+ '12bd' => 'Computerm-Corp.',
+ '12be' => 'Anchor-Chips-Inc.',
+ '12bf' => 'Fujifilm-Microdevices',
+ '12c0' => 'Infimed',
+ '12c1' => 'GMM-Research-Corp',
+ '12c2' => 'Mentec-Limited',
+ '12c3' => 'Holtek-Microelectronics-Inc',
+ '12c4' => 'Connect-Tech-Inc',
+ '12c5' => 'Picture-Elements-Incorporated',
+ '12c6' => 'Mitani-Corporation',
+ '12c7' => 'Dialogic-Corp',
+ '12c8' => 'G-Force-Co-Ltd',
+ '12c9' => 'Gigi-Operations',
+ '12ca' => 'Integrated-Computing-Engines',
+ '12cb' => 'Antex-Electronics-Corporation',
+ '12cd' => 'Aims-Lab',
+ '12ce' => 'Netspeed-Inc.',
+ '12cf' => 'Prophet-Systems-Inc.',
+ '12d0' => 'GDE-Systems-Inc.',
+ '12d1' => 'PSITech',
+ '12d3' => 'Vingmed-Sound-A-S',
+ '12d4' => 'Ulticom-Formerly-DGM-S',
+ '12d5' => 'Equator-Technologies-Inc',
+ '12d6' => 'Analogic-Corp',
+ '12d7' => 'Biotronic-SRL',
+ '12d8' => 'Pericom-Semiconductor',
+ '12d9' => 'Aculab-PLC',
+ '12da' => 'True-Time-Inc.',
+ '12db' => 'Annapolis-Micro-Systems-Inc',
+ '12dd' => 'Management-Graphics',
+ '12de' => 'Rainbow-Technologies',
+ '12df' => 'SBS-Technologies-Inc',
+ '12e0' => 'Chase-Research',
+ '12e1' => 'Nintendo-Co-Ltd',
+ '12e4' => 'Brooktrout-Technology-Inc',
+ '12e5' => 'Apex-Semiconductor-Inc',
+ '12e6' => 'Cirel-Systems',
+ '12e7' => 'Sunsgroup-Corporation',
+ '12e8' => 'Crisc-Corp',
+ '12e9' => 'GE-Spacenet',
+ '12ea' => 'Zuken',
+ '12eb' => 'Aureal-Semiconductor',
+ '12ec' => '3A-International-Inc.',
+ '12ed' => 'Optivision-Inc.',
+ '12ee' => 'Orange-Micro',
+ '12ef' => 'Vienna-Systems',
+ '12f0' => 'Pentek',
+ '12f1' => 'Sorenson-Vision-Inc',
+ '12f2' => 'Gammagraphx-Inc.',
+ '12f3' => 'Radstone-Technology',
+ '12f4' => 'Megatel',
+ '12f5' => 'Forks',
+ '12f6' => 'Dawson-France',
+ '12f7' => 'Cognex',
+ '12f8' => 'Electronic-Design-GmbH',
+ '12f9' => 'Four-Fold-Ltd',
+ '12fb' => 'Spectrum-Signal-Processing',
+ '12fc' => 'Capital-Equipment-Corp',
+ '12fd' => 'I2S',
+ '12ff' => 'Lexicon',
+ '1302' => 'Computer-Sciences-Corp',
+ '1303' => 'Innovative-Integration',
+ '1304' => 'Juniper-Networks',
+ '1305' => 'Netphone-Inc',
+ '1306' => 'Duet-Technologies',
+ '1308' => 'Jato-Technologies-Inc.',
+ '1309' => 'AB-Semiconductor-Ltd',
+ '130c' => 'Ambex-Technologies-Inc',
+ '130d' => 'Accelerix-Inc',
+ '130e' => 'Yamatake-Honeywell-Co.-Ltd',
+ '130f' => 'Advanet-Inc',
+ '1310' => 'Gespac',
+ '1311' => 'Videoserver-Inc',
+ '1312' => 'Acuity-Imaging-Inc',
+ '1313' => 'Yaskawa-Electric-Co.',
+ '1315' => 'Wavesat',
+ '1316' => 'Teradyne-Inc',
+ '1317' => 'ADMtek',
+ '1318' => 'Packet-Engines-Inc.',
+ '1319' => 'Fortemedia-Inc',
+ '131a' => 'Finisar-Corp.',
+ '131d' => 'Sysmic-Inc.',
+ '131e' => 'Xinex-Networks-Inc',
+ '131f' => 'Siig-Inc',
+ '1320' => 'Crypto-AG',
+ '1321' => 'Arcobel-Graphics-BV',
+ '1322' => 'MTT-Co.-Ltd',
+ '1323' => 'Dome-Inc',
+ '1324' => 'Sphere-Communications',
+ '1325' => 'Salix-Technologies-Inc',
+ '1326' => 'Seachange-international',
+ '1327' => 'Voss-scientific',
+ '1328' => 'quadrant-international',
+ '1329' => 'Productivity-Enhancement',
+ '132a' => 'Microcom-Inc.',
+ '132b' => 'Broadband-Technologies',
+ '132c' => 'Micrel-Inc',
+ '1330' => 'MMC-Networks',
+ '1331' => 'RadiSys-Corporation',
+ '1332' => 'Micro-Memory',
+ '1334' => 'Redcreek-Communications-Inc',
+ '1335' => 'Videomail-Inc',
+ '1337' => 'Third-Planet-Publishing',
+ '1338' => 'BT-Electronics',
+ '133a' => 'Vtel-Corp',
+ '133b' => 'Softcom-Microsystems',
+ '133c' => 'Holontech-Corp',
+ '133d' => 'SS-Technologies',
+ '133e' => 'Virtual-Computer-Corp',
+ '133f' => 'SCM-Microsystems',
+ '1340' => 'Atalla-Corp',
+ '1341' => 'Kyoto-Microcomputer-Co',
+ '1342' => 'Promax-Systems-Inc',
+ '1343' => 'Phylon-Communications-Inc',
+ '1345' => 'Arescom-Inc',
+ '1347' => 'Odetics',
+ '134a' => 'DTC-Technology-Corp.',
+ '134b' => 'ARK-Research-Corp.',
+ '134c' => 'Chori-Joho-System-Co.-Ltd',
+ '134d' => 'PCTel-Inc',
+ '134e' => 'CSTI',
+ '134f' => 'Algo-System-Co-Ltd',
+ '1350' => 'Systec-Co.-Ltd',
+ '1351' => 'Sonix-Inc',
+ '1353' => 'Thales-Idatys',
+ '1354' => 'Dwave-System-Inc',
+ '1355' => 'Kratos-Analytical-Ltd',
+ '1356' => 'The-Logical-Co',
+ '1359' => 'Prisa-Networks',
+ '135a' => 'Brain-Boxes',
+ '135b' => 'Giganet-Inc',
+ '135c' => 'Quatech-Inc',
+ '135d' => 'ABB-Network-Partner-AB',
+ '135e' => 'Sealevel-Systems-Inc',
+ '135f' => 'I-Data-International-A-S',
+ '1360' => 'Meinberg-Funkuhren',
+ '1361' => 'Soliton-Systems-K.K.',
+ '1362' => 'Fujifacom-Corporation',
+ '1363' => 'Phoenix-Technology-Ltd',
+ '1364' => 'ATM-Communications-Inc',
+ '1365' => 'Hypercope-GmbH',
+ '1366' => 'Teijin-Seiki-Co.-Ltd',
+ '1367' => 'Hitachi-Zosen-Corporation',
+ '1368' => 'Skyware-Corporation',
+ '1369' => 'Digigram',
+ '136a' => 'High-Soft-Tech',
+ '136b' => 'Kawasaki-Steel-Corporation',
+ '136c' => 'Adtek-System-Science-Co-Ltd',
+ '136d' => 'Gigalabs-Inc',
+ '136f' => 'Applied-Magic-Inc',
+ '1370' => 'ATL-Products',
+ '1371' => 'CNet-Technology-Inc',
+ '1373' => 'Silicon-Vision-Inc',
+ '1374' => 'Silicom-Ltd.',
+ '1375' => 'Argosystems-Inc',
+ '1376' => 'LMC',
+ '1378' => 'Telemann-Co.-Ltd',
+ '137a' => 'Mark-of-the-Unicorn-Inc',
+ '137b' => 'PPT-Vision',
+ '137c' => 'Iwatsu-Electric-Co-Ltd',
+ '137d' => 'Dynachip-Corporation',
+ '137f' => 'Japan-Satellite-Systems-Inc',
+ '1380' => 'Sanritz-Automation-Co-Ltd',
+ '1381' => 'Brains-Co.-Ltd',
+ '1383' => 'Controlnet-Inc',
+ '1385' => 'Netgear',
+ '1386' => 'Video-Domain-Technologies',
+ '1387' => 'Systran-Corp',
+ '1389' => 'Applicom-International',
+ '138a' => 'Fusion-Micromedia-Corp',
+ '138b' => 'Tokimec-Inc',
+ '138c' => 'Silicon-Reality',
+ '138d' => 'Future-Techno-Designs-pte-Ltd',
+ '138e' => 'Basler-GmbH',
+ '138f' => 'Patapsco-Designs-Inc',
+ '1390' => 'Concept-Development-Inc',
+ '1391' => 'Development-Concepts-Inc',
+ '1392' => 'Medialight-Inc',
+ '1393' => 'Moxa-Technologies-Co-Ltd',
+ '1394' => 'Level-One-Communications',
+ '1395' => 'Ambicom-Inc',
+ '1396' => 'Cipher-Systems-Inc',
+ '1397' => 'Cologne-Chip-Designs-GmbH',
+ '1398' => 'Clarion-co.-Ltd',
+ '1399' => 'Rios-systems-Co-Ltd',
+ '139a' => 'Alacritech-Inc',
+ '139c' => 'Quantum-3d-Inc',
+ '139d' => 'EPL-limited',
+ '139e' => 'Media4',
+ '139f' => 'Aethra-s.r.l.',
+ '13a0' => 'Crystal-Group-Inc',
+ '13a1' => 'Kawasaki-Heavy-Industries-Ltd',
+ '13a2' => 'Ositech-Communications-Inc',
+ '13a3' => 'Hifn-Inc.',
+ '13a4' => 'Rascom-Inc',
+ '13a5' => 'Audio-Digital-Imaging-Inc',
+ '13a6' => 'Videonics-Inc',
+ '13a7' => 'Teles-AG',
+ '13a8' => 'Exar-Corp.',
+ '13aa' => 'Broadband-Networks-Inc',
+ '13ab' => 'Arcom-Control-Systems-Ltd',
+ '13ac' => 'Motion-Media-Technology-Ltd',
+ '13ad' => 'Nexus-Inc',
+ '13ae' => 'ALD-Technology-Ltd',
+ '13af' => 'T.Sqware',
+ '13b0' => 'Maxspeed-Corp',
+ '13b1' => 'Tamura-corporation',
+ '13b2' => 'Techno-Chips-Co.-Ltd',
+ '13b3' => 'Lanart-Corporation',
+ '13b4' => 'Wellbean-Co-Inc',
+ '13b5' => 'ARM',
+ '13b6' => 'Dlog-GmbH',
+ '13b7' => 'Logic-Devices-Inc',
+ '13b8' => 'Nokia-Telecommunications-oy',
+ '13b9' => 'Elecom-Co-Ltd',
+ '13ba' => 'Oxford-Instruments',
+ '13bb' => 'Sanyo-Technosound-Co-Ltd',
+ '13bc' => 'Bitran-Corporation',
+ '13bd' => 'SHARP',
+ '13be' => 'Miroku-Jyoho-Service-Co.-Ltd',
+ '13bf' => 'Sharewave-Inc',
+ '13c0' => 'Microgate-Corporation',
+ '13c1' => '3ware-Inc',
+ '13c3' => 'Janz-Computer-AG',
+ '13c4' => 'Phase-Metrics',
+ '13c5' => 'Alphi-Technology-Corp',
+ '13c6' => 'Condor-Engineering-Inc',
+ '13c7' => 'Blue-Chip-Technology-Ltd',
+ '13c8' => 'Apptech-Inc',
+ '13c9' => 'Eaton-Corporation',
+ '13ca' => 'Iomega-Corporation',
+ '13cb' => 'Yano-Electric-Co-Ltd',
+ '13cc' => 'Metheus-Corporation',
+ '13ce' => 'Cocom-A-S',
+ '13cf' => 'Studio-Audio---Video-Ltd',
+ '13d0' => 'Techsan-Electronics-Co-Ltd',
+ '13d1' => 'Abocom-Systems-Inc',
+ '13d2' => 'Shark-Multimedia-Inc',
+ '13d3' => 'IMC-Networks',
+ '13d4' => 'Graphics-Microsystems-Inc',
+ '13d5' => 'Media-100-Inc',
+ '13d6' => 'K.I.-Technology-Co-Ltd',
+ '13d8' => 'Phobos-corporation',
+ '13d9' => 'Apex-PC-Solutions-Inc',
+ '13da' => 'Intresource-Systems-pte-Ltd',
+ '13dc' => 'Netboost-Corporation',
+ '13dd' => 'Multimedia-Bundle-Inc',
+ '13de' => 'ABB-Robotics-Products-AB',
+ '13df' => 'E-Tech-Inc',
+ '13e0' => 'GVC-Corporation',
+ '13e2' => 'Dynamics-Research-Corporation',
+ '13e3' => 'Nest-Inc',
+ '13e4' => 'Calculex-Inc',
+ '13e5' => 'Telesoft-Design-Ltd',
+ '13e6' => 'Argosy-research-Inc',
+ '13e7' => 'NAC-Incorporated',
+ '13e8' => 'Chip-Express-Corporation',
+ '13e9' => 'Intraserver-Technology-Inc',
+ '13ea' => 'Dallas-Semiconductor',
+ '13eb' => 'Hauppauge-Computer-Works-Inc',
+ '13ec' => 'Zydacron-Inc',
+ '13ed' => 'Raytheion-E-Systems',
+ '13ef' => 'Coppercom-Inc',
+ '13f0' => 'Sundance-Technology-Inc---IC-Plus-Corp',
+ '13f1' => 'Oce---Technologies-B.V.',
+ '13f2' => 'Ford-Microelectronics-Inc',
+ '13f3' => 'Mcdata-Corporation',
+ '13f4' => 'Troika-Networks-Inc.',
+ '13f5' => 'Kansai-Electric-Co.-Ltd',
+ '13f6' => 'C-Media-Electronics-Inc',
+ '13f7' => 'Wildfire-Communications',
+ '13f8' => 'Ad-Lib-Multimedia-Inc',
+ '13f9' => 'NTT-Advanced-Technology-Corp.',
+ '13fa' => 'Pentland-Systems-Ltd',
+ '13fb' => 'Aydin-Corp',
+ '13fd' => 'Micro-Science-Inc',
+ '13fe' => 'Advantech-Co.-Ltd',
+ '13ff' => 'Silicon-Spice-Inc',
+ '1400' => 'Artx-Inc',
+ '1401' => 'CR-Systems-A-S',
+ '1402' => 'Meilhaus-Electronic-GmbH',
+ '1403' => 'Ascor-Inc',
+ '1404' => 'Fundamental-Software-Inc',
+ '1405' => 'Excalibur-Systems-Inc',
+ '1406' => 'Oce-Printing-Systems-GmbH',
+ '1407' => 'Lava-Computer-mfg-Inc',
+ '1408' => 'Aloka-Co.-Ltd',
+ '1409' => 'Timedia-Technology-Co-Ltd',
+ '140a' => 'DSP-Research-Inc',
+ '140c' => 'Elmic-Systems-Inc',
+ '140d' => 'Matsushita-Electric-Works-Ltd',
+ '140e' => 'Goepel-Electronic-GmbH',
+ '140f' => 'Salient-Systems-Corp',
+ '1410' => 'Midas-lab-Inc',
+ '1411' => 'Ikos-Systems-Inc',
+ '1412' => 'VIA-Technologies-Inc.',
+ '1413' => 'Addonics',
+ '1414' => 'Microsoft',
+ '1415' => 'Oxford-Semiconductor-Ltd',
+ '1416' => 'Multiwave-Innovation-pte-Ltd',
+ '1417' => 'Convergenet-Technologies-Inc',
+ '1419' => 'Excel-Switching-Corp',
+ '141a' => 'Apache-Micro-Peripherals-Inc',
+ '141b' => 'Zoom-Telephonics-Inc',
+ '141d' => 'Digitan-Systems-Inc',
+ '141e' => 'Fanuc-Ltd',
+ '141f' => 'Visiontech-Ltd',
+ '1420' => 'Psion-Dacom-plc',
+ '1421' => 'Ads-Technologies-Inc',
+ '1422' => 'Ygrec-Systems-Co-Ltd',
+ '1423' => 'Custom-Technology-Corp.',
+ '1424' => 'Videoserver-Connections',
+ '1425' => 'Chelsio-Communications-Inc',
+ '1426' => 'Storage-Technology-Corp.',
+ '1427' => 'Better-On-Line-Solutions',
+ '1428' => 'Edec-Co-Ltd',
+ '1429' => 'Unex-Technology-Corp.',
+ '142a' => 'Kingmax-Technology-Inc',
+ '142b' => 'Radiolan',
+ '142c' => 'Minton-Optic-Industry-Co-Ltd',
+ '142d' => 'Pix-stream-Inc',
+ '142e' => 'Vitec-Multimedia',
+ '142f' => 'Radicom-Research-Inc',
+ '1431' => 'Gilat-Satellite-Networks',
+ '1432' => 'Edimax-Computer-Co.',
+ '1433' => 'Eltec-Elektronik-GmbH',
+ '1436' => 'CIS-Technology-Inc',
+ '1437' => 'Nissin-Inc-Co',
+ '1438' => 'Atmel-dream',
+ '143a' => 'Stargate-Solutions-Inc',
+ '143c' => 'Amlogic-Inc',
+ '143d' => 'Tamarack-Microelectronics-Inc',
+ '143e' => 'Jones-Futurex-Inc',
+ '1440' => 'ALGOL-Corp.',
+ '1441' => 'AGIE-Ltd',
+ '1442' => 'Phoenix-Contact-GmbH---Co.',
+ '1443' => 'Unibrain-S.A.',
+ '1444' => 'TRW',
+ '1445' => 'Logical-DO-Ltd',
+ '1446' => 'Graphin-Co-Ltd',
+ '1447' => 'AIM-GmBH',
+ '1448' => 'Alesis-Studio-Electronics',
+ '1449' => 'TUT-Systems-Inc',
+ '144a' => 'Adlink-Technology',
+ '144c' => 'Catalina-Research-Inc',
+ '144d' => 'Samsung-Electronics-Co-Ltd',
+ '144e' => 'OLITEC',
+ '144f' => 'Askey-Computer-Corp.',
+ '1450' => 'Octave-Communications-Ind.',
+ '1451' => 'SP3D-Chip-Design-GmBH',
+ '1453' => 'MYCOM-Inc',
+ '1454' => 'Altiga-Networks',
+ '1455' => 'Logic-Plus-Plus-Inc',
+ '1457' => 'Nuera-Communications-Inc',
+ '1458' => 'Giga-byte-Technology',
+ '1459' => 'DOOIN-Electronics',
+ '145a' => 'Escalate-Networks-Inc',
+ '145b' => 'PRAIM-SRL',
+ '145c' => 'Cryptek',
+ '145d' => 'Gallant-Computer-Inc',
+ '145e' => 'Aashima-Technology-B.V.',
+ '145f' => 'Baldor-Electric-Company',
+ '1460' => 'DYNARC-INC',
+ '1461' => 'Avermedia-Technologies-Inc',
+ '1463' => 'Fast-Corporation',
+ '1465' => 'GN-NETTEST-Telecom-DIV.',
+ '1466' => 'Designpro-Inc.',
+ '1467' => 'DIGICOM-SPA',
+ '1468' => 'AMBIT-Microsystem-Corp.',
+ '1469' => 'Cleveland-Motion-Controls',
+ '146a' => 'IFR',
+ '146b' => 'Parascan-Technologies-Ltd',
+ '146c' => 'Ruby-Tech-Corp.',
+ '146d' => 'Tachyon-INC.',
+ '1470' => 'Bay-Networks',
+ '1472' => 'DAIKIN-Industries-Ltd',
+ '1473' => 'ZAPEX-Technologies-Inc',
+ '1474' => 'Doug-Carson---Associates',
+ '1475' => 'PICAZO-Communications',
+ '1476' => 'MORTARA-Instrument-Inc',
+ '1477' => 'Net-Insight',
+ '1478' => 'DIATREND-Corporation',
+ '1479' => 'TORAY-Industries-Inc',
+ '147a' => 'FORMOSA-Industrial-Computing',
+ '147b' => 'ABIT-Computer-Corp.',
+ '147c' => 'AWARE-Inc.',
+ '147d' => 'Interworks-Computer-Products',
+ '147f' => 'NIHON-UNISYS-Ltd.',
+ '1480' => 'SCII-Telecom',
+ '1481' => 'BIOPAC-Systems-Inc',
+ '1483' => 'LABWAY-Corporation',
+ '1484' => 'Logic-Corporation',
+ '1485' => 'ERMA---Electronic-GmBH',
+ '1487' => 'MARQUETTE-Medical-Systems',
+ '1488' => 'KONTRON-Electronik-GmBH',
+ '1489' => 'KYE-Systems-Corp',
+ '148a' => 'OPTO',
+ '148b' => 'INNOMEDIALOGIC-Inc.',
+ '148c' => 'C.P.-Technology-Co.-Ltd',
+ '148d' => 'DIGICOM-Systems-Inc.',
+ '148e' => 'OSI-Plus-Corporation',
+ '148f' => 'Plant-Equipment-Inc.',
+ '1490' => 'Stone-Microsystems-PTY-Ltd.',
+ '1491' => 'ZEAL-Corporation',
+ '1492' => 'Time-Logic-Corporation',
+ '1493' => 'MAKER-Communications',
+ '1494' => 'WINTOP-Technology-Inc.',
+ '1496' => 'JOYTECH-Computer-Co.-Ltd.',
+ '1497' => 'SMA-Regelsysteme-GmBH',
+ '1498' => 'TEWS-Technologies-GmbH',
+ '1499' => 'EMTEC-CO.-Ltd',
+ '149a' => 'ANDOR-Technology-Ltd',
+ '149b' => 'SEIKO-Instruments-Inc',
+ '149c' => 'OVISLINK-Corp.',
+ '149d' => 'NEWTEK-Inc',
+ '149e' => 'Mapletree-Networks-Inc.',
+ '149f' => 'LECTRON-Co-Ltd',
+ '14a0' => 'SOFTING-GmBH',
+ '14a1' => 'Systembase-Co-Ltd',
+ '14a2' => 'Millennium-Engineering-Inc',
+ '14a3' => 'Maverick-Networks',
+ '14a4' => 'GVC-BCM-Advanced-Research',
+ '14a6' => 'INOVA-Computers-GmBH---Co-KG',
+ '14a7' => 'MYTHOS-Systems-Inc',
+ '14a9' => 'HIVERTEC-Inc',
+ '14aa' => 'Advanced-MOS-Technology-Inc',
+ '14ab' => 'Mentor-Graphics-Corp.',
+ '14ac' => 'Novaweb-Technologies-Inc',
+ '14ad' => 'Time-Space-Radio-AB',
+ '14ae' => 'CTI-Inc',
+ '14af' => 'Guillemot-Corporation',
+ '14b1' => 'Nextcom-K.K.',
+ '14b2' => 'ENNOVATE-Networks-Inc',
+ '14b3' => 'XPEED-Inc',
+ '14b5' => 'Creamware-GmBH',
+ '14b6' => 'Quantum-Data-Corp.',
+ '14b7' => 'PROXIM-Inc',
+ '14b8' => 'Techsoft-Technology-Co-Ltd',
+ '14b9' => 'Cisco-Systems-Inc.',
+ '14ba' => 'INTERNIX-Inc.',
+ '14bb' => 'SEMTECH-Corporation',
+ '14bc' => 'Globespan-Semiconductor-Inc.',
+ '14bd' => 'CARDIO-Control-N.V.',
+ '14be' => 'L3-Communications',
+ '14bf' => 'SPIDER-Communications-Inc.',
+ '14c0' => 'COMPAL-Electronics-Inc',
+ '14c1' => 'MYRICOM-Inc.',
+ '14c2' => 'DTK-Computer',
+ '14c3' => 'MEDIATEK-Corp.',
+ '14c5' => 'Automation-Products-AB',
+ '14c6' => 'Data-Race-Inc',
+ '14c8' => 'Turbocomm-Tech.-Inc.',
+ '14c9' => 'ODIN-Telesystems-Inc',
+ '14ca' => 'PE-Logic-Corp.',
+ '14cb' => 'Billionton-Systems-Inc',
+ '14cc' => 'NAKAYO-Telecommunications-Inc',
+ '14cd' => 'Universal-Scientific-Ind.',
+ '14ce' => 'Whistle-Communications',
+ '14cf' => 'TEK-Microsystems-Inc.',
+ '14d0' => 'Ericsson-Axe-R---D',
+ '14d1' => 'Computer-Hi-Tech-Co-Ltd',
+ '14d2' => 'Titan-Electronics-Inc',
+ '14d3' => 'CIRTECH-UK-Ltd',
+ '14d4' => 'Panacom-Technology-Corp',
+ '14d5' => 'Nitsuko-Corporation',
+ '14d6' => 'Accusys-Inc',
+ '14d7' => 'Hirakawa-Hewtech-Corp',
+ '14d8' => 'HOPF-Elektronik-GmBH',
+ '14db' => 'AFAVLAB-Technology-Inc',
+ '14dc' => 'Amplicon-Liveline-Ltd',
+ '14dd' => 'Boulder-Design-Labs-Inc',
+ '14df' => 'ASIC-Communications-Corp',
+ '14e1' => 'INVERTEX',
+ '14e2' => 'INFOLIBRIA',
+ '14e3' => 'AMTELCO',
+ '14e4' => 'Broadcom',
+ '14e5' => 'Pixelfusion-Ltd',
+ '14e6' => 'SHINING-Technology-Inc',
+ '14e7' => '3CX',
+ '14e8' => 'RAYCER-Inc',
+ '14e9' => 'GARNETS-System-CO-Ltd',
+ '14ea' => 'Planex-Communications-Inc',
+ '14eb' => 'SEIKO-EPSON-Corp',
+ '14ec' => 'ACQIRIS',
+ '14ed' => 'DATAKINETICS-Ltd',
+ '14ee' => 'MASPRO-KENKOH-Corp',
+ '14ef' => 'CARRY-Computer-ENG.-CO-Ltd',
+ '14f0' => 'CANON-RESEACH-CENTRE-FRANCE',
+ '14f1' => 'Conexant-Systems-Inc.',
+ '14f2' => 'MOBILITY-Electronics',
+ '14f3' => 'BroadLogic',
+ '14f5' => 'SOPAC-Ltd',
+ '14f6' => 'COYOTE-Technologies-LLC',
+ '14f7' => 'WOLF-Technology-Inc',
+ '14f8' => 'AUDIOCODES-Inc',
+ '14f9' => 'AG-COMMUNICATIONS',
+ '14fa' => 'WANDEL---GOLTERMANN',
+ '14fb' => 'TRANSAS-MARINE-UK-Ltd',
+ '14fc' => 'Quadrics-Ltd',
+ '14fd' => 'JAPAN-Computer-Industry-Inc',
+ '14fe' => 'ARCHTEK-TELECOM-Corp',
+ '14ff' => 'TWINHEAD-INTERNATIONAL-Corp',
+ '1500' => 'DELTA-Electronics-Inc',
+ '1501' => 'BANKSOFT-CANADA-Ltd',
+ '1503' => 'KAWASAKI-LSI-USA-Inc',
+ '1504' => 'KAISER-Electronics',
+ '1506' => 'CHAMELEON-Systems-Inc',
+ '150a' => 'FORVUS-RESEARCH-Inc',
+ '150b' => 'YAMASHITA-Systems-Corp',
+ '150c' => 'KYOPAL-CO-Ltd',
+ '150d' => 'WARPSPPED-Inc',
+ '150e' => 'C-PORT-Corp',
+ '150f' => 'INTEC-GmbH',
+ '1510' => 'BEHAVIOR-TECH-Computer-Corp',
+ '1511' => 'CENTILLIUM-Technology-Corp',
+ '1512' => 'ROSUN-Technologies-Inc',
+ '1513' => 'Raychem',
+ '1514' => 'TFL-LAN-Inc',
+ '1515' => 'Advent-design',
+ '1516' => 'MYSON-Technology-Inc',
+ '1517' => 'ECHOTEK-Corp',
+ '151a' => 'Globetek',
+ '151b' => 'COMBOX-Ltd',
+ '151c' => 'DIGITAL-AUDIO-LABS-Inc',
+ '151e' => 'MATRIX-Corp',
+ '151f' => 'TOPIC-SEMICONDUCTOR-Corp',
+ '1520' => 'CHAPLET-System-Inc',
+ '1521' => 'BELL-Corp',
+ '1522' => 'MainPine-Ltd',
+ '1523' => 'MUSIC-Semiconductors',
+ '1524' => 'ENE-Technology-Inc',
+ '1525' => 'IMPACT-Technologies',
+ '1526' => 'ISS-Inc',
+ '1527' => 'SOLECTRON',
+ '1528' => 'ACKSYS',
+ '1529' => 'AMERICAN-MICROSystems-Inc',
+ '152a' => 'QUICKTURN-DESIGN-Systems',
+ '152b' => 'FLYTECH-Technology-CO-Ltd',
+ '152c' => 'MACRAIGOR-Systems-LLC',
+ '152d' => 'QUANTA-Computer-Inc',
+ '152e' => 'MELEC-Inc',
+ '152f' => 'Philips---CRYPTO',
+ '1530' => 'ACQIS-Technology-Inc',
+ '1531' => 'CHRYON-Corp',
+ '1532' => 'ECHELON-Corp',
+ '1533' => 'BALTIMORE',
+ '1534' => 'ROAD-Corp',
+ '1535' => 'EVERGREEN-Technologies-Inc',
+ '1536' => 'ACTIS-Computer',
+ '1537' => 'DATALEX-COMMUNCATIONS',
+ '1538' => 'ARALION-Inc',
+ '153a' => 'ONO-SOKKI',
+ '153b' => 'TERRATEC-Electronic-GmbH',
+ '153c' => 'ANTAL-Electronic',
+ '153d' => 'FILANET-Corp',
+ '153e' => 'TECHWELL-Inc',
+ '153f' => 'MIPS-Technologies-Inc.',
+ '1540' => 'PROVIDEO-MULTIMEDIA-Co-Ltd',
+ '1541' => 'MACHONE-Communications',
+ '1543' => 'SILICON-Laboratories',
+ '1544' => 'DCM-DATA-Systems',
+ '1545' => 'VISIONTEK',
+ '1546' => 'IOI-Technology-Corp',
+ '1547' => 'MITUTOYO-Corp',
+ '1548' => 'JET-PROPULSION-Laboratory',
+ '154a' => 'MAX-Technologies-Inc',
+ '154b' => 'COMPUTEX-Co-Ltd',
+ '154c' => 'VISUAL-Technology-Inc',
+ '154e' => 'SERVOTEST-Ltd',
+ '154f' => 'STRATABEAM-Technology',
+ '1550' => 'OPEN-NETWORK-Co-Ltd',
+ '1552' => 'RACAL-AIRTECH-Ltd',
+ '1553' => 'Chicony-Electronics-CO',
+ '1554' => 'PROLINK-Microsystems-Corp',
+ '1555' => 'GESYTEC-GmBH',
+ '1556' => 'PLD-APPLICATIONS',
+ '1557' => 'MEDIASTAR-Co-Ltd',
+ '1558' => 'CLEVO-KAPOK-Computer',
+ '1559' => 'SI-LOGIC-Ltd',
+ '155a' => 'INNOMEDIA-Inc',
+ '155b' => 'PROTAC-INTERNATIONAL-Corp',
+ '155c' => 'Cemax-Icon-Inc',
+ '155d' => 'Mac-System-Co-Ltd',
+ '155e' => 'LP-Elektronik-GmbH',
+ '155f' => 'Perle-Systems-Ltd',
+ '1561' => 'Viewgraphics-Inc',
+ '1562' => 'Symbol-Technologies',
+ '1563' => 'A-Trend-Technology-Co-Ltd',
+ '1565' => 'Biostar-Microtech-Intl-Corp',
+ '1566' => 'Ardent-Technologies-Inc',
+ '1567' => 'Jungsoft',
+ '1568' => 'DDK-Electronics-Inc',
+ '1569' => 'Palit-Microsystems-Inc.',
+ '156a' => 'Avtec-Systems',
+ '156b' => '2wire-Inc',
+ '156c' => 'Vidac-Electronics-GmbH',
+ '156d' => 'Alpha-Top-Corp',
+ '156e' => 'Alfa-Inc',
+ '1570' => 'Lecroy-Corp',
+ '1571' => 'Contemporary-Controls',
+ '1572' => 'Otis-Elevator-Company',
+ '1573' => 'Lattice---Vantis',
+ '1574' => 'Fairchild-Semiconductor',
+ '1576' => 'Viewcast-COM',
+ '1578' => 'HITT',
+ '1579' => 'Dual-Technology-Corp',
+ '157a' => 'Japan-Elecronics-Ind-Inc',
+ '157b' => 'Star-Multimedia-Corp',
+ '157c' => 'Eurosoft-UK',
+ '157d' => 'Gemflex-Networks',
+ '157e' => 'Transition-Networks',
+ '157f' => 'PX-Instruments-Technology-Ltd',
+ '1580' => 'Primex-Aerospace-Co',
+ '1581' => 'SEH-Computertechnik-GmbH',
+ '1582' => 'Cytec-Corp',
+ '1583' => 'Inet-Technologies-Inc',
+ '1584' => 'Uniwill-Computer-Corp',
+ '1585' => 'Logitron',
+ '1586' => 'Lancast-Inc',
+ '1587' => 'Konica-Corp',
+ '1588' => 'Solidum-Systems-Corp',
+ '1589' => 'Atlantek-Microsystems-Pty-Ltd',
+ '158a' => 'Digalog-Systems-Inc',
+ '158b' => 'Allied-Data-Technologies',
+ '158d' => 'Point-Multimedia-Systems',
+ '158e' => 'Lara-Technology-Inc',
+ '158f' => 'Ditect-Coop',
+ '1590' => '3PAR-Inc.',
+ '1591' => 'ARN',
+ '1592' => 'Syba-Tech-Ltd',
+ '1593' => 'Bops-Inc',
+ '1594' => 'Netgame-Ltd',
+ '1595' => 'Diva-Systems-Corp',
+ '1596' => 'Folsom-Research-Inc',
+ '1597' => 'Memec-Design-Services',
+ '1598' => 'Granite-Microsystems',
+ '1599' => 'Delta-Electronics-Inc',
+ '159a' => 'General-Instrument',
+ '159b' => 'Faraday-Technology-Corp',
+ '159c' => 'Stratus-Computer-Systems',
+ '159e' => 'A-Max-Technology-Co-Ltd',
+ '159f' => 'Galea-Network-Security',
+ '15a0' => 'Compumaster-SRL',
+ '15a1' => 'Geocast-Network-Systems',
+ '15a2' => 'Catalyst-Enterprises-Inc',
+ '15a3' => 'Italtel',
+ '15a4' => 'X-Net-OY',
+ '15a5' => 'Toyota-Macs-Inc',
+ '15a7' => 'SSE-Telecom-Inc',
+ '15aa' => 'Moreton-Bay',
+ '15ab' => 'Bluesteel-Networks-Inc',
+ '15ac' => 'North-Atlantic-Instruments',
+ '15ad' => 'VMware',
+ '15ae' => 'Amersham-Pharmacia-Biotech',
+ '15b0' => 'Zoltrix-International-Ltd',
+ '15b1' => 'Source-Technology-Inc',
+ '15b2' => 'Mosaid-Technologies-Inc',
+ '15b3' => 'Mellanox-Technologies',
+ '15b4' => 'CCI-TRIAD',
+ '15b5' => 'Cimetrics-Inc',
+ '15b6' => 'Texas-Memory-Systems-Inc',
+ '15b7' => 'Sandisk-Corp',
+ '15b8' => 'ADDI-DATA-GmbH',
+ '15ba' => 'Impacct-Technology-Corp',
+ '15bb' => 'Portwell-Inc',
+ '15bc' => 'Agilent-Technologies',
+ '15bd' => 'DFI-Inc',
+ '15be' => 'Sola-Electronics',
+ '15bf' => 'High-Tech-Computer-Corp-HTC',
+ '15c0' => 'BVM-Ltd',
+ '15c1' => 'Quantel',
+ '15c2' => 'Newer-Technology-Inc',
+ '15c3' => 'Taiwan-Mycomp-Co-Ltd',
+ '15c4' => 'EVSX-Inc',
+ '15c5' => 'Procomp-Informatics-Ltd',
+ '15c8' => 'Penta-Media-Co-Ltd',
+ '15c9' => 'Serome-Technology-Inc',
+ '15ca' => 'Bitboys-OY',
+ '15cb' => 'AG-Electronics-Ltd',
+ '15cc' => 'Hotrail-Inc',
+ '15cd' => 'Dreamtech-Co-Ltd',
+ '15ce' => 'Genrad-Inc',
+ '15cf' => 'Hilscher-GmbH',
+ '15d1' => 'Infineon-Technologies-AG',
+ '15d3' => 'NDS-Technologies-Israel-Ltd',
+ '15d4' => 'Iwill-Corp',
+ '15d5' => 'Tatung-Co',
+ '15d6' => 'Entridia-Corp',
+ '15d7' => 'Rockwell-Collins-Inc',
+ '15d8' => 'Cybernetics-Technology-Co-Ltd',
+ '15d9' => 'Super-Micro-Computer-Inc',
+ '15da' => 'Cyberfirm-Inc',
+ '15db' => 'Applied-Computing-Systems-Inc',
+ '15dc' => 'Litronic-Inc',
+ '15dd' => 'Sigmatel-Inc',
+ '15de' => 'Malleable-Technologies-Inc',
+ '15df' => 'Infinilink-Corp',
+ '15e0' => 'Cacheflow-Inc',
+ '15e1' => 'Voice-Technologies-Group-Inc',
+ '15e2' => 'Quicknet-Technologies-Inc',
+ '15e3' => 'Networth-Technologies-Inc',
+ '15e4' => 'VSN-Systemen-BV',
+ '15e5' => 'Valley-technologies-Inc',
+ '15e6' => 'Agere-Inc',
+ '15e7' => 'Get-Engineering-Corp',
+ '15e8' => 'National-Datacomm-Corp',
+ '15e9' => 'Pacific-Digital-Corp',
+ '15ea' => 'Tokyo-Denshi-Sekei-K.K.',
+ '15ec' => 'Beckhoff-GmbH',
+ '15ed' => 'Macrolink-Inc',
+ '15ee' => 'In-Win-Development-Inc',
+ '15ef' => 'Intelligent-Paradigm-Inc',
+ '15f0' => 'B-Tree-Systems-Inc',
+ '15f1' => 'Times-N-Systems-Inc',
+ '15f2' => 'Diagnostic-Instruments-Inc',
+ '15f3' => 'Digitmedia-Corp',
+ '15f4' => 'Valuesoft',
+ '15f5' => 'Power-Micro-Research',
+ '15f6' => 'Extreme-Packet-Device-Inc',
+ '15f7' => 'Banctec',
+ '15f8' => 'Koga-Electronics-Co',
+ '15f9' => 'Zenith-Electronics-Corp',
+ '15fa' => 'J.P.-Axzam-Corp',
+ '15fb' => 'Zilog-Inc',
+ '15fc' => 'Techsan-Electronics-Co-Ltd',
+ '15fd' => 'N-CUBED.NET',
+ '15fe' => 'Kinpo-Electronics-Inc',
+ '15ff' => 'Fastpoint-Technologies-Inc',
+ '1600' => 'Northrop-Grumman---Canada-Ltd',
+ '1601' => 'Tenta-Technology',
+ '1602' => 'Prosys-tec-Inc',
+ '1603' => 'Nokia-Wireless-Communications',
+ '1605' => 'Pairgain-Technologies',
+ '1606' => 'Europop-AG',
+ '1609' => 'Scimetric-Instruments-Inc',
+ '1612' => 'Telesynergy-Research-Inc.',
+ '1618' => 'Stone-Ridge-Technology',
+ '1619' => 'FarSite-Communications-Ltd',
+ '161f' => 'Rioworks',
+ '1626' => 'TDK-Semiconductor-Corp.',
+ '1629' => 'Kongsberg-Spacetec-AS',
+ '1631' => 'Packard-Bell-B.V.',
+ '163c' => 'Smart-Link-Ltd.',
+ '1641' => 'MKNet-Corp.',
+ '165a' => 'Epix-Inc',
+ '165f' => 'Linux-Media-Labs-LLC',
+ '1661' => 'Worldspace-Corp.',
+ '1668' => 'Actiontec-Electronics-Inc',
+ '1677' => 'Bernecker-+-Rainer',
+ '1678' => 'NetEffect',
+ '1679' => 'Tokyo-Electron-Device-Ltd.',
+ '167b' => 'ZyDAS-Technology-Corp.',
+ '167e' => 'ONNTO-Corp.',
+ '1681' => 'Hercules',
+ '1682' => 'XFX-Pine-Group-Inc.',
+ '1688' => 'CastleNet-Technology-Inc.',
+ '168c' => 'Atheros',
+ '1695' => 'EPoX-Computer-Co.-Ltd.',
+ '169c' => 'Netcell-Corporation',
+ '16a5' => 'Tekram-Technology-Co.Ltd.',
+ '16ab' => 'Global-Sun-Technology-Inc',
+ '16ae' => 'SafeNet-Inc',
+ '16af' => 'SparkLAN-Communications-Inc.',
+ '16b4' => 'Aspex-Semiconductor-Ltd',
+ '16b8' => 'Sonnet-Technologies-Inc.',
+ '16be' => 'Creatix-Polymedia-GmbH',
+ '16c6' => 'Micrel-Kendin',
+ '16c8' => 'Octasic-Inc.',
+ '16c9' => 'EONIC-B.V.-The-Netherlands',
+ '16ca' => 'CENATEK-Inc',
+ '16cd' => 'Densitron-Technologies',
+ '16ce' => 'Roland-Corp.',
+ '16d5' => 'Acromag-Inc.',
+ '16da' => 'Advantech-Co.-Ltd.',
+ '16df' => 'PIKA-Technologies-Inc.',
+ '16e2' => 'Geotest-MTS',
+ '16e3' => 'European-Space-Agency',
+ '16e5' => 'Intellon-Corp.',
+ '16ec' => 'U.S.-Robotics',
+ '16ed' => 'Sycron-N.-V.',
+ '16f3' => 'Jetway-Information-Co.-Ltd.',
+ '16f4' => 'Vweb-Corp',
+ '16f6' => 'VideoTele.com-Inc.',
+ '1705' => 'Digital-First-Inc.',
+ '170b' => 'NetOctave',
+ '170c' => 'YottaYotta-Inc.',
+ '1719' => 'EZChip-Technologies',
+ '172a' => 'Accelerated-Encryption',
+ '1734' => 'Fujitsu-Technology-Solutions',
+ '1735' => 'Aten-International-Co.-Ltd.',
+ '1737' => 'Linksys',
+ '173b' => 'Altima-nee-Broadcom',
+ '1743' => 'Peppercon-AG',
+ '1745' => 'ViXS-Systems-Inc.',
+ '1749' => 'RLX-Technologies',
+ '174b' => 'PC-Partner-Limited',
+ '174d' => 'WellX-Telecom-SA',
+ '175c' => 'AudioScience-Inc',
+ '175e' => 'Sanera-Systems-Inc.',
+ '1760' => 'TEDIA-spol.-s-r.-o.',
+ '1771' => 'InnoVISION-Multimedia-Ltd.',
+ '177d' => 'Cavium-Networks',
+ '1789' => 'Ennyah-Technologies-Corp.',
+ '1797' => 'Techwell-Inc.',
+ '1799' => 'Belkin',
+ '179a' => 'id-Quantique',
+ '179c' => 'Data-Patterns',
+ '17a0' => 'Genesys-Logic-Inc',
+ '17aa' => 'Lenovo',
+ '17ab' => 'Phillips-Components',
+ '17b3' => 'Hawking-Technologies',
+ '17b4' => 'Indra-Networks-Inc.',
+ '17c0' => 'Wistron-Corp.',
+ '17c2' => 'Newisys-Inc.',
+ '17cb' => 'Airgo-Networks-Inc',
+ '17cc' => 'NetChip-Technology-Inc',
+ '17cf' => 'Z-Com-Inc.',
+ '17d3' => 'Areca-Technology-Corp.',
+ '17db' => 'Cray-Inc',
+ '17de' => 'KWorld-Computer-Co.-Ltd.',
+ '17e4' => 'Sectra-AB',
+ '17e6' => 'Entropic-Communications-Inc.',
+ '17ee' => 'Connect-Components-Ltd',
+ '17f2' => 'Albatron-Corp.',
+ '17f3' => 'RDC-Semiconductor-Inc.',
+ '17f7' => 'Topdek-Semiconductor-Inc.',
+ '17fe' => 'InProComm-Inc.',
+ '17ff' => 'Benq-Corporation',
+ '1803' => 'ProdaSafe-GmbH',
+ '1805' => 'Euresys-S.A.',
+ '1809' => 'Lumanate-Inc.',
+ '1813' => 'Ambient-Technologies-Inc',
+ '1814' => 'RaLink',
+ '1815' => 'Devolo-AG',
+ '1820' => 'InfiniCon-Systems-Inc.',
+ '1822' => 'Twinhan-Technology-Co.-Ltd',
+ '182d' => 'SiteCom-Europe-BV',
+ '182e' => 'Raza-Microelectronics-Inc.',
+ '1830' => 'Credence-Systems-Corporation',
+ '183b' => 'MikroM-GmbH',
+ '1849' => 'ASRock-Incorporation',
+ '184a' => 'Thales-Computers',
+ '1851' => 'Microtune-Inc.',
+ '1852' => 'Anritsu-Corp.',
+ '1854' => 'LG-Electronics-Inc.',
+ '185b' => 'Compro-Technology-Inc.',
+ '185f' => 'Wistron-NeWeb-Corp.',
+ '1864' => 'SilverBack',
+ '1867' => 'Topspin-Communications',
+ '186c' => 'Humusoft-s.r.o.',
+ '186f' => 'WiNRADiO-Communications',
+ '1876' => 'L-3-Communications',
+ '1885' => 'Avvida-Systems-Inc.',
+ '1888' => 'Varisys-Ltd',
+ '188a' => 'Ample-Communications-Inc',
+ '1890' => 'Egenera-Inc.',
+ '1894' => 'KNC-One',
+ '1897' => 'AMtek',
+ '18a1' => 'Astute-Networks-Inc.',
+ '18a2' => 'Stretch-Inc.',
+ '18a3' => 'AT-T',
+ '18ac' => 'DViCO-Corporation',
+ '18b8' => 'Ammasso',
+ '18bc' => 'Info-Tek-Corp.',
+ '18c8' => 'Cray-Inc Nee-Octigabay-System',
+ '18c9' => 'ARVOO-Engineering-BV',
+ '18d2' => 'Sitecom',
+ '18d8' => 'Dialogue-Technology-Corp.',
+ '18dd' => 'Artimi-Inc',
+ '18e6' => 'MPL-AG',
+ '18ec' => 'Cesnet-z.s.p.o.',
+ '18ee' => 'Chenming-Mold-Ind.-Corp.',
+ '18f1' => 'Spectrum-GmbH',
+ '18f4' => 'Napatech-A-S',
+ '18f6' => 'NextIO',
+ '18f7' => 'Commtech-Inc.',
+ '18fb' => 'Resilience-Corporation',
+ '1905' => 'Micronas-USA-Inc.',
+ '1912' => 'Renesas-Technology-Corp.',
+ '1919' => 'Soltek-Computer-Inc.',
+ '1923' => 'Sangoma-Technologies-Corp.',
+ '1924' => 'Solarflare-Communications',
+ '192e' => 'TransDimension',
+ '1931' => 'Option-N.V.',
+ '1932' => 'DiBcom',
+ '193c' => 'MAXIM-Integrated-Products',
+ '193f' => 'Comtech-AHA-Corp.',
+ '1942' => 'ClearSpeed-Technology-plc',
+ '1947' => 'C-guys-Inc.',
+ '1948' => 'Enterasys-Networks',
+ '194a' => 'DapTechnology-B.V.',
+ '1954' => 'Curtis-Inc.',
+ '1957' => 'Freescale-Semiconductor-Inc',
+ '1958' => 'Faster-Technology-LLC.',
+ '1959' => 'PA-Semi-Inc',
+ '1966' => 'Orad-Hi-Tec-Systems',
+ '1969' => 'Atheros',
+ '196a' => 'Sensory-Networks-Inc.',
+ '196d' => 'Club-3D-BV',
+ '1971' => 'AGEIA-Technologies-Inc.',
+ '1977' => 'Parsec',
+ '197b' => 'JMicron-Technology-Corp.',
+ '1989' => 'Montilio-Inc.',
+ '198a' => 'Nallatech-Ltd.',
+ '199a' => 'Pulse-LINK-Inc.',
+ '199d' => 'Xsigo-Systems',
+ '199f' => 'Auvitek',
+ '19a8' => 'DAQDATA-GmbH',
+ '19ac' => 'Kasten-Chase-Applied-Research',
+ '19ae' => 'Progeny-Systems-Corporation',
+ '19c1' => 'Exegy-Inc.',
+ '19d4' => 'Quixant-Limited',
+ '19de' => 'Pico-Computing',
+ '19e2' => 'Vector-Informatik-GmbH',
+ '19e3' => 'DDRdrive-LLC',
+ '19ee' => 'Netronome-Systems-Inc.',
+ '1a03' => 'ASPEED-Technology-Inc.',
+ '1a07' => 'Kvaser-AB',
+ '1a08' => 'Sierra-semiconductor',
+ '1a0e' => 'DekTec-Digital-Video-B.V.',
+ '1a17' => 'Force10-Networks-Inc.',
+ '1a1d' => 'GFaI-e.V.',
+ '1a1e' => '3Leaf-Systems-Inc.',
+ '1a22' => 'Ambric-Inc.',
+ '1a29' => 'Fortinet-Inc.',
+ '1a2b' => 'Ascom-AG',
+ '1a3b' => 'AzureWave',
+ '1a51' => 'Hectronic-AB',
+ '1a56' => 'Bigfoot-Networks-Inc.',
+ '1a57' => 'Highly-Reliable-Systems',
+ '1a58' => 'Razer-USA-Ltd.',
+ '1a5d' => 'Celoxica',
+ '1a5e' => 'Aprius-Inc.',
+ '1a5f' => 'System-TALKS-Inc.',
+ '1a68' => 'VirtenSys-Limited',
+ '1a71' => 'XenSource-Inc.',
+ '1a73' => 'Violin-Memory-Inc',
+ '1a76' => 'Wavesat',
+ '1a77' => 'Lightfleet-Corporation',
+ '1a78' => 'Virident-Systems-Inc.',
+ '1a84' => 'Commex-Technologies',
+ '1a88' => 'MEN-Mikro-Elektronik',
+ '1a8c' => 'Verigy-Pte.-Ltd.',
+ '1a8e' => 'DRS-Technologies',
+ '1aa8' => 'Ciprico-Inc.',
+ '1aae' => 'Global-Velocity-Inc.',
+ '1ab6' => 'CalDigit-Inc.',
+ '1ab9' => 'Espia-Srl',
+ '1ad7' => 'Spectracom-Corporation',
+ '1ade' => 'Spin-Master-Ltd.',
+ '1ae0' => 'Google-Inc.',
+ '1ae8' => 'Silicon-Software-GmbH',
+ '1aec' => 'Wolfson-Microelectronics',
+ '1aed' => 'Fusion-io',
+ '1aee' => 'Caustic-Graphics-Inc.',
+ '1af5' => 'Netezza-Corp.',
+ '1afa' => 'J---W-Electronics-Co.-Ltd.',
+ '1b03' => 'Magnum-Semiconductor-Inc',
+ '1b13' => 'Jaton-Corp',
+ '1b1a' => 'K-F-Computing-Research-Co.',
+ '1b36' => 'Red-Hat-Inc.',
+ '1b3a' => 'Westar-Display-Technologies',
+ '1b3e' => 'Teradata-Corp.',
+ '1b4b' => 'Marvell-Technology-Group-Ltd.',
+ '1b55' => 'NetUP-Inc.',
+ '1b73' => 'Fresco-Logic',
+ '1bad' => 'ReFLEX-CES',
+ '1bb3' => 'Bluecherry',
+ '1bf4' => 'VTI-Instruments-Corporation',
+ '1c1c' => 'Symphony',
+ '1d44' => 'DPT',
+ '1de1' => 'Tekram-Technology-Co.Ltd.',
+ '1fc9' => 'Tehuti-Networks-Ltd.',
+ '1fce' => 'Cognio-Inc.',
+ '1fd4' => 'SUNIX-Co.-Ltd.',
+ '2000' => 'Smart-Link-Ltd.',
+ '2001' => 'Temporal-Research-Ltd',
+ '2003' => 'Smart-Link-Ltd.',
+ '2004' => 'Smart-Link-Ltd.',
+ '2116' => 'ZyDAS-Technology-Corp.',
+ '21c3' => '21st-Century-Computer-Corp.',
+ '2348' => 'Racore',
+ '2646' => 'Kingston-Technologies',
+ '270b' => 'Xantel-Corporation',
+ '270f' => 'Chaintech-Computer-Co.-Ltd',
+ '2711' => 'AVID-Technology-Inc.',
+ '29b4' => '82q35-Express-MEI-Controller',
+ '2a15' => '3D-Vision---',
+ '3000' => 'Hansol-Electronics-Inc.',
+ '3142' => 'Post-Impression-Systems.',
+ '3388' => 'Hint-Corp',
+ '3411' => 'Quantum-Designs-H.K.-Inc',
+ '3442' => 'Bihl+Wiedemann-GmbH',
+ '3475' => 'Arastra-Inc.',
+ '3513' => 'ARCOM-Control-Systems-Ltd',
+ '3842' => 'eVga.com.-Corp.',
+ '38ef' => '4Links',
+ '3d3d' => '3DLabs',
+ '4005' => 'Avance-Logic-Inc.',
+ '4033' => 'Addtron-Technology-Co-Inc.',
+ '4040' => 'NetXen-Incorporated',
+ '4143' => 'Digital-Equipment-Corp',
+ '4144' => 'Alpha-Data',
+ '4150' => 'ONA-Electroerosion',
+ '415a' => 'Auzentech-Inc.',
+ '416c' => 'Aladdin-Knowledge-Systems',
+ '434e' => 'CAST-Navigation-LLC',
+ '4444' => 'Internext-Compression-Inc',
+ '4468' => 'Bridgeport-machines',
+ '4594' => 'Cogetec-Informatique-Inc',
+ '45fb' => 'Baldor-Electric-Company',
+ '4680' => 'Umax-Computer-Corp',
+ '4916' => 'RedCreek-Communications-Inc',
+ '4943' => 'Growth-Networks',
+ '494f' => 'ACCES-I-O-Products-Inc.',
+ '4978' => 'Axil-Computer-Inc',
+ '4a14' => 'NetVin',
+ '4b10' => 'Buslogic-Inc.',
+ '4c48' => 'LUNG-HWA-Electronics',
+ '4c53' => 'SBS-Technologies',
+ '4ca1' => 'Seanix-Technology-Inc',
+ '4d51' => 'MediaQ-Inc.',
+ '4d54' => 'Microtechnica-Co-Ltd',
+ '4d56' => 'MATRIX-VISION-GmbH',
+ '4ddc' => 'ILC-Data-Device-Corp',
+ '5045' => 'University-of-Toronto',
+ '5046' => 'GemTek-Technology-Corporation',
+ '5053' => 'Voyetra-Technologies',
+ '50b2' => 'TerraTec-Electronic-GmbH',
+ '5136' => 'S-S-Technologies',
+ '5143' => 'Qualcomm-Inc',
+ '5145' => 'Ensoniq-Old',
+ '5168' => 'Animation-Technologies-Inc.',
+ '5301' => 'Alliance-Semiconductor-Corp.',
+ '5333' => 'S3-Inc.',
+ '5431' => 'AuzenTech-Inc.',
+ '544c' => 'Teralogic-Inc',
+ '5455' => 'Technische-University-Berlin',
+ '5456' => 'GoTView',
+ '5519' => 'Cnet-Technologies-Inc.',
+ '5544' => 'Dunord-Technologies',
+ '5555' => 'Genroco-Inc',
+ '5646' => 'Vector-Fabrics-BV',
+ '5654' => 'VoiceTronix-Pty-Ltd',
+ '5700' => 'Netpower',
+ '584d' => 'AuzenTech-Co.-Ltd.',
+ '5851' => 'Exacq-Technologies',
+ '5853' => 'XenSource-Inc.',
+ '5ace' => 'Beholder-International-Ltd.',
+ '631c' => 'SmartInfra-Ltd',
+ '6356' => 'UltraStor',
+ '6409' => 'Logitec-Corp.',
+ '6549' => 'Teradici-Corp.',
+ '6900' => 'Red-Hat-Inc. nee-Qumranet',
+ '7063' => 'pcHDTV',
+ '7284' => 'HT-OMEGA-Inc.',
+ '7604' => 'O.N.-Electronic-Co-Ltd.',
+ '7bde' => 'MIDAC-Corporation',
+ '7fed' => 'PowerTV',
+ '8008' => 'Quancom-Electronic-GmbH',
+ '8086' => 'Intel',
+ '80ee' => 'InnoTek-Systemberatung-GmbH',
+ '8322' => 'Sodick-America-Corp.',
+ '8384' => 'SigmaTel',
+ '8401' => 'TRENDware-International-Inc.',
+ '8686' => 'ScaleMP',
+ '8800' => 'Trigem-Computer-Inc.',
+ '8866' => 'T-Square-Design-Inc.',
+ '8888' => 'Silicon-Magic',
+ '8912' => 'TRX',
+ '8e0e' => 'Computone-Corporation',
+ '8e2e' => 'KTI',
+ '9004' => 'Adaptec',
+ '9005' => 'Adaptec',
+ '907f' => 'Atronics',
+ '919a' => 'Gigapixel-Corp',
+ '9412' => 'Holtek',
+ '9699' => 'Omni-Media-Technology-Inc',
+ '9710' => 'NetMos-Technology',
+ '9902' => 'Stargen-Inc.',
+ 'a0a0' => 'AOPEN-Inc.',
+ 'a0f1' => 'UNISYS-Corporation',
+ 'a200' => 'NEC-Corporation',
+ 'a259' => 'Hewlett-Packard',
+ 'a25b' => 'Hewlett-Packard',
+ 'a304' => 'Sony',
+ 'a727' => '3Com-Corporation',
+ 'aa42' => 'Scitex-Digital-Video',
+ 'aa55' => 'Ncomputing-X300-PCI-Engine',
+ 'aaaa' => 'Adnaco-Technology-Inc.',
+ 'abcd' => 'Vadatech-Inc.',
+ 'ac3d' => 'Actuality-Systems',
+ 'ad00' => 'Alta-Data-Technologies-LLC',
+ 'b1b3' => 'Shiva-Europe-Limited',
+ 'bdbd' => 'Blackmagic-Design',
+ 'c001' => 'TSI-Telsys',
+ 'c0a9' => 'Micron-Crucial-Technology',
+ 'c0de' => 'Motorola',
+ 'c0fe' => 'Motion-Engineering-Inc.',
+ 'ca50' => 'Varian-Australia-Pty-Ltd',
+ 'cace' => 'CACE-Technologies-Inc.',
+ 'cafe' => 'Chrysalis-ITS',
+ 'cccc' => 'Catapult-Communications',
+ 'cddd' => 'Tyzx-Inc.',
+ 'ceba' => 'KEBA-AG',
+ 'd161' => 'Digium-Inc.',
+ 'd4d4' => 'Dy4-Systems-Inc',
+ 'd531' => 'I+ME-ACTIA-GmbH',
+ 'd84d' => 'Exsys',
+ 'db10' => 'Diablo-Technologies',
+ 'dead' => 'Indigita-Corporation',
+ 'deaf' => 'Middle-Digital-Inc.',
+ 'deda' => 'SoftHard-Technology-Ltd.',
+ 'e000' => 'Winbond',
+ 'e159' => 'Tiger-Jet-Network-Inc.',
+ 'e4bf' => 'EKF-Elektronik-GmbH',
+ 'e55e' => 'Essence-Technology-Inc.',
+ 'ea01' => 'Eagle-Technology',
+ 'eabb' => 'Aashima-Technology-B.V.',
+ 'ec80' => 'Belkin-Corporation',
+ 'edd8' => 'ARK-Logic-Inc',
+ 'f1d0' => 'AJA-Video',
+ 'f5f5' => 'F5-Networks-Inc.',
+ 'fa57' => 'Interagon-AS',
+ 'fab7' => 'Fabric7-Systems-Inc.',
+ 'febd' => 'Ultraview-Corp.',
+ 'feda' => 'Broadcom',
+ 'fede' => 'Fedetec-Inc.',
+ 'fffd' => 'XenSource-Inc.',
+ '1039' => 'Silicon-Integrated-Systems',
+ 'A259' => 'Hewlett-Packard',
+ );
+
+ public static $usbId = array(
+ '0001' => 'Frys-Electronics',
+ '0002' => 'Ingram',
+ '0003' => 'Club-Mac',
+ '0004' => 'Nebraska-Furniture-Mart',
+ '0053' => 'Planex',
+ '0079' => 'DragonRise-Inc.',
+ '0105' => 'Trust-International-B.V.',
+ '0145' => 'Unknown',
+ '0154' => 'LW154-Wireless-150N-Adapter',
+ '0218' => 'Hangzhou-Worlde',
+ '02ad' => 'HUMAX-Co.-Ltd.',
+ '0300' => 'MM300-eBook-Reader',
+ '0324' => 'OCZ-Technology-Inc',
+ '0325' => 'OCZ-Technology-Inc',
+ '0386' => 'LTS',
+ '03e8' => 'EndPoints-Inc.',
+ '03e9' => 'Thesys-Microelectronics',
+ '03ea' => 'Data-Broadcasting-Corp.',
+ '03eb' => 'Atmel-Corp.',
+ '03ec' => 'Iwatsu-America-Inc.',
+ '03ed' => 'Mitel-Corp.',
+ '03ee' => 'Mitsumi',
+ '03f0' => 'Hewlett-Packard',
+ '03f1' => 'Genoa-Technology',
+ '03f2' => 'Oak-Technology-Inc.',
+ '03f3' => 'Adaptec-Inc.',
+ '03f4' => 'Diebold-Inc.',
+ '03f5' => 'Siemens-Electromechanical',
+ '03f9' => 'KeyTronic-Corp.',
+ '03fb' => 'OPTi-Inc.',
+ '03fc' => 'Elitegroup-Computer-Systems',
+ '03fd' => 'Xilinx-Inc.',
+ '03fe' => 'Farallon-Comunications',
+ '0400' => 'National-Semiconductor-Corp.',
+ '0401' => 'National-Registry-Inc.',
+ '0402' => 'ALi-Corp.',
+ '0404' => 'NCR-Corp.',
+ '0405' => 'Synopsys-Inc.',
+ '0406' => 'Fujitsu-ICL-Computers',
+ '0408' => 'Quanta-Computer-Inc.',
+ '0409' => 'NEC-Corp.',
+ '040a' => 'Kodak-Co.',
+ '040b' => 'Weltrend-Semiconductor',
+ '040c' => 'VTech-Computers-Ltd',
+ '040d' => 'VIA-Technologies-Inc.',
+ '040e' => 'MCCI',
+ '040f' => 'Echo-Speech-Corp.',
+ '0411' => 'BUFFALO-INC---formerly-MelCo---Inc--',
+ '0412' => 'Award-Software-International',
+ '0413' => 'Leadtek-Research-Inc.',
+ '0414' => 'Giga-Byte-Technology-Co.-Ltd',
+ '0416' => 'Winbond-Electronics-Corp.',
+ '0417' => 'Symbios-Logic',
+ '0418' => 'AST-Research',
+ '041a' => 'Phoenix-Technologies-Ltd',
+ '041b' => 'dTV',
+ '041d' => 'S3-Inc.',
+ '041e' => 'Creative-Technology-Ltd',
+ '041f' => 'LCS-Telegraphics',
+ '0420' => 'Chips-and-Technologies',
+ '0421' => 'Nokia-Mobile-Phones',
+ '0422' => 'ADI-Systems-Inc.',
+ '0424' => 'Standard-Microsystems-Corp.',
+ '0429' => 'Cirrus-Logic',
+ '042a' => 'Ericsson-Austrian-AG',
+ '042b' => 'Intel',
+ '042d' => 'Micronics',
+ '042e' => 'Acer',
+ '042f' => 'Molex-Inc.',
+ '0430' => 'Sun-Microsystems-Inc.',
+ '0431' => 'Itac-Systems-Inc.',
+ '0432' => 'Unisys-Corp.',
+ '0433' => 'Alps-Electric-Inc.',
+ '0435' => 'Hyundai-Electronics-America',
+ '0436' => 'Taugagreining-HF',
+ '0437' => 'Framatome-Connectors-USA',
+ '0438' => 'Advanced-Micro-Devices-Inc.',
+ '0439' => 'Voice-Technologies-Group',
+ '043d' => 'Lexmark-International-Inc.',
+ '043e' => 'LG-Electronics-USA-Inc.',
+ '043f' => 'RadiSys-Corp.',
+ '0440' => 'Eizo-Nanao-Corp.',
+ '0441' => 'Winbond-Systems-Lab.',
+ '0442' => 'Ericsson-Inc.',
+ '0443' => 'Gateway-Inc.',
+ '0445' => 'Lucent-Technologies-Inc.',
+ '0446' => 'NMB-Technologies-Corp.',
+ '0447' => 'Momentum-Microsystems',
+ '044a' => 'Shamrock-Tech.-Co.-Ltd',
+ '044b' => 'WSI',
+ '044c' => 'CCL-ITRI',
+ '044d' => 'Siemens-Nixdorf-AG',
+ '044e' => 'Alps-Electric-Co.-Ltd',
+ '044f' => 'ThrustMaster-Inc.',
+ '0450' => 'DFI-Inc.',
+ '0451' => 'Texas-Instruments-Inc.',
+ '0453' => 'CMD-Technology',
+ '0454' => 'Vobis-Microcomputer-AG',
+ '0456' => 'Analog-Devices-Inc.',
+ '0457' => 'Silicon-Integrated-Systems',
+ '0459' => 'Adobe-Systems-Inc.',
+ '045a' => 'SONICblue-Inc.',
+ '045b' => 'Hitachi-Ltd',
+ '045d' => 'Nortel-Networks-Ltd',
+ '045e' => 'Microsoft',
+ '0460' => 'Ace-Cad-Enterprise-Co.-Ltd',
+ '0461' => 'Primax-Electronics-Ltd',
+ '0463' => 'MGE-UPS-Systems',
+ '0464' => 'AMP-Tycoelectronics-Corp.',
+ '0467' => 'AT-T-Paradyne',
+ '0468' => 'Wieson-Technologies-Co.-Ltd',
+ '046a' => 'Cherry-GmbH',
+ '046b' => 'American-Megatrends-Inc.',
+ '046d' => 'Logitech',
+ '046e' => 'Behavior-Tech.-Computer-Corp.',
+ '046f' => 'Crystal-Semiconductor',
+ '0471' => 'Philips-or-NXP',
+ '0472' => 'Chicony-Electronics-CO',
+ '0474' => 'Sanyo-Electric-Co.-Ltd',
+ '0476' => 'AESP',
+ '0477' => 'Seagate-Technology-Inc.',
+ '0478' => 'Connectix-Corp.',
+ '047a' => 'Semtech-Corp.',
+ '047b' => 'Silitek-Corp.',
+ '047c' => 'Dell-Computer-Corp.',
+ '047d' => 'Kensington',
+ '047e' => 'Agere-Systems-Inc.-Lucent',
+ '047f' => 'Plantronics-Inc.',
+ '0481' => 'Zenith-Data-Systems',
+ '0482' => 'Kyocera-Corp.',
+ '0483' => 'SGS-Thomson-Microelectronics',
+ '0484' => 'Specialix',
+ '0485' => 'Nokia-Monitors',
+ '0486' => 'ASUS-Computers-Inc.',
+ '0487' => 'Stewart-Connector',
+ '0488' => 'Cirque-Corp.',
+ '0489' => 'Foxconn---Hon-Hai',
+ '048a' => 'S-MOS-Systems-Inc.',
+ '048c' => 'Alps-Electric-Ireland-Ltd',
+ '048f' => 'Eicon-Tech.',
+ '0490' => 'United-Microelectronics-Corp.',
+ '0491' => 'Capetronic',
+ '0492' => 'Samsung-SemiConductor-Inc.',
+ '0493' => 'MAG-Technology-Co.-Ltd',
+ '0495' => 'ESS-Technology-Inc.',
+ '0496' => 'Micron-Electronics',
+ '0497' => 'Smile-International',
+ '0498' => 'Capetronic-Kaohsiung-Corp.',
+ '0499' => 'Yamaha-Corp.',
+ '049a' => 'Gandalf-Technologies-Ltd',
+ '049b' => 'Curtis-Computer-Products',
+ '049c' => 'Acer',
+ '049d' => 'VLSI-Technology',
+ '049f' => 'Compaq-Computer-Corp.',
+ '04a0' => 'Digital-Equipment-Corp.',
+ '04a1' => 'SystemSoft-Corp.',
+ '04a2' => 'FirePower-Systems',
+ '04a3' => 'Trident-Microsystems-Inc.',
+ '04a4' => 'Hitachi-Ltd',
+ '04a6' => 'Nokia-Display-Products',
+ '04a7' => 'Visioneer',
+ '04a8' => 'Multivideo-Labs-Inc.',
+ '04a9' => 'Canon-Inc.',
+ '04aa' => 'DaeWoo-Telecom-Ltd',
+ '04ab' => 'Chromatic-Research',
+ '04ac' => 'Micro-Audiometrics-Corp.',
+ '04ad' => 'Dooin-Electronics',
+ '04af' => 'Winnov-L.P.',
+ '04b0' => 'Nikon-Corp.',
+ '04b1' => 'Pan-International',
+ '04b3' => 'IBM-Corp.',
+ '04b4' => 'Cypress-Semiconductor-Corp.',
+ '04b5' => 'ROHM-LSI-Systems-USA-LLC',
+ '04b6' => 'Hint-Corp.',
+ '04b7' => 'Compal-Electronics-Inc.',
+ '04b8' => 'Seiko-Epson-Corp.',
+ '04b9' => 'Rainbow-Technologies-Inc.',
+ '04ba' => 'Toucan-Systems-Ltd',
+ '04bb' => 'I-O-Data-Device-Inc.',
+ '04be' => 'Telia-Research-AB',
+ '04bf' => 'TDK-Corp.',
+ '04c1' => 'U.S.-Robotics-3Com',
+ '04c3' => 'Maxi-Switch-Inc.',
+ '04c5' => 'Fujitsu-Ltd',
+ '04c7' => 'Micro-Macro-Technologies',
+ '04c8' => 'Konica-Corp.',
+ '04ca' => 'Lite-On-Technology-Corp.',
+ '04cb' => 'Fuji-Photo-Film-Co.-Ltd',
+ '04cc' => 'ST-Ericsson',
+ '04cd' => 'Tatung-Co.-Of-America',
+ '04ce' => 'ScanLogic-Corp.',
+ '04cf' => 'Myson-Century-Inc.',
+ '04d0' => 'Digi-International',
+ '04d1' => 'ITT-Canon',
+ '04d2' => 'Altec-Lansing-Technologies',
+ '04d3' => 'VidUS-Inc.',
+ '04d4' => 'LSI-Logic-Inc.',
+ '04d5' => 'Forte-Technologies-Inc.',
+ '04d6' => 'Mentor-Graphics',
+ '04d7' => 'Oki-Semiconductor',
+ '04d8' => 'Microchip-Technology-Inc.',
+ '04d9' => 'Holtek-Semiconductor-Inc.',
+ '04da' => 'Panasonic',
+ '04db' => 'Hypertec-Pty-Ltd',
+ '04dc' => 'Huan-Hsin-Holdings-Ltd',
+ '04dd' => 'SHARP',
+ '04de' => 'MindShare-Inc.',
+ '04df' => 'Interlink-Electronics',
+ '04e1' => 'Iiyama-North-America-Inc.',
+ '04e2' => 'Exar-Corp.',
+ '04e3' => 'Zilog-Inc.',
+ '04e4' => 'ACC-Microelectronics',
+ '04e5' => 'Promise-Technology',
+ '04e6' => 'SCM-Microsystems-Inc.',
+ '04e7' => 'Elo-TouchSystems',
+ '04e8' => 'Samsung-Electronics-Co.-Ltd',
+ '04e9' => 'PC-Tel-Inc.',
+ '04ea' => 'Brooktree-Corp.',
+ '04eb' => 'Northstar-Systems-Inc.',
+ '04ec' => 'Tokyo-Electron-Device-Ltd',
+ '04ed' => 'Annabooks',
+ '04f0' => 'Daewoo-Electronics-Co.-Ltd',
+ '04f1' => 'Victor-Company-of-Japan-Ltd',
+ '04f2' => 'Chicony-Electronics-CO',
+ '04f3' => 'Elan-Microelectronics-Corp.',
+ '04f4' => 'Harting-Elektronik-Inc.',
+ '04f5' => 'Fujitsu-ICL-Systems-Inc.',
+ '04f6' => 'Norand-Corp.',
+ '04f7' => 'Newnex-Technology-Corp.',
+ '04f8' => 'FuturePlus-Systems',
+ '04f9' => 'brother',
+ '04fa' => 'Dallas-Semiconductor',
+ '04fc' => 'Sunplus-Technology-Co.-Ltd',
+ '04fd' => 'Soliton-Systems-K.K.',
+ '04fe' => 'PFU-Ltd',
+ '04ff' => 'E-CMOS-Corp.',
+ '0500' => 'Siam-United-Hi-Tech',
+ '0501' => 'Fujikura-DDK-Ltd',
+ '0502' => 'Acer',
+ '0503' => 'Hitachi-America-Ltd',
+ '0504' => 'Hayes-Microcomputer-Products',
+ '0506' => '3Com-Corp.',
+ '0507' => 'Hosiden-Corp.',
+ '0508' => 'Clarion-Co.-Ltd',
+ '0509' => 'Aztech-Systems-Ltd',
+ '050a' => 'Cinch-Connectors',
+ '050b' => 'Cable-System-International',
+ '050c' => 'InnoMedia-Inc.',
+ '050d' => 'Belkin-Components',
+ '050e' => 'Neon-Technology-Inc.',
+ '050f' => 'KC-Technology-Inc.',
+ '0510' => 'Sejin-Electron-Inc.',
+ '0512' => 'Hualon-Microelectronics-Corp.',
+ '0513' => 'digital-X-Inc.',
+ '0514' => 'FCI-Electronics',
+ '0515' => 'ACTC',
+ '0516' => 'Longwell-Electronics',
+ '0517' => 'Butterfly-Communications',
+ '0518' => 'EzKEY-Corp.',
+ '0519' => 'Star-Micronics-Co.-Ltd',
+ '051a' => 'WYSE-Technology',
+ '051b' => 'Silicon-Graphics',
+ '051c' => 'Shuttle-Inc.',
+ '051d' => 'American-Power-Conversion',
+ '051e' => 'Scientific-Atlanta-Inc.',
+ '0521' => 'Airborn-Connectors',
+ '0522' => 'Advanced-Connectek-Inc.',
+ '0523' => 'ATEN-GmbH',
+ '0524' => 'Sola-Electronics',
+ '0525' => 'Netchip-Technology-Inc.',
+ '0526' => 'Temic-MHS-S.A.',
+ '0527' => 'ALTRA',
+ '0528' => 'ATI',
+ '0529' => 'Aladdin-Knowledge-Systems',
+ '052a' => 'Crescent-Heart-Software',
+ '052b' => 'Tekom-Technologies-Inc.',
+ '052d' => 'Avid-Electronics-Corp.',
+ '052e' => 'Standard-Microsystems-Corp.',
+ '052f' => 'Unicore-Software-Inc.',
+ '0530' => 'American-Microsystems-Inc.',
+ '0531' => 'Wacom-Technology-Corp.',
+ '0532' => 'Systech-Corp.',
+ '0533' => 'Alcatel-Mobile-Phones',
+ '0534' => 'Motorola-Inc.',
+ '0535' => 'LIH-TZU-Electric-Co.-Ltd',
+ '0537' => 'Inventec-Corp.',
+ '0539' => 'Shyh-Shiun-Terminals-Co.-Ltd',
+ '053a' => 'PrehKeyTec-GmbH',
+ '053b' => 'Global-Village-Communication',
+ '053d' => 'Silicon-Architect',
+ '053e' => 'Mobility-Electronics',
+ '053f' => 'Synopsys-Inc.',
+ '0540' => 'UniAccess-AB',
+ '0541' => 'Sirf-Technology-Inc.',
+ '0543' => 'ViewSonic-Corp.',
+ '0544' => 'Cristie-Electronics-Ltd',
+ '0545' => 'Xirlink-Inc.',
+ '0546' => 'Polaroid-Corp.',
+ '0547' => 'Anchor-Chips-Inc.',
+ '0548' => 'Tyan-Computer-Corp.',
+ '0549' => 'Pixera-Corp.',
+ '054b' => 'New-Media-Corp.',
+ '054c' => 'Sony-Corp.',
+ '054d' => 'Try-Corp.',
+ '054e' => 'Proside-Corp.',
+ '054f' => 'WYSE-Technology-Taiwan',
+ '0550' => 'Fuji-Xerox-Co.-Ltd',
+ '0551' => 'CompuTrend-Systems-Inc.',
+ '0552' => 'Philips-Monitors',
+ '0554' => 'Dictaphone-Corp.',
+ '0555' => 'ANAM-S-T-Co.-Ltd',
+ '0557' => 'ATEN-International-Co.-Ltd',
+ '0558' => 'Truevision-Inc.',
+ '0559' => 'Cadence-Design-Systems-Inc.',
+ '055a' => 'Kenwood-USA',
+ '055b' => 'KnowledgeTek-Inc.',
+ '055c' => 'Proton-Electronic-Ind.',
+ '055d' => 'Samsung-Electro-Mechanics-Co.',
+ '055e' => 'CTX-Opto-Electronics-Corp.',
+ '055f' => 'Mustek-Systems-Inc.',
+ '0560' => 'Interface-Corp.',
+ '0561' => 'Oasis-Design-Inc.',
+ '0562' => 'Telex-Communications-Inc.',
+ '0563' => 'Immersion-Corp.',
+ '0565' => 'Peracom-Networks-Inc.',
+ '0566' => 'Monterey-International-Corp.',
+ '0567' => 'Xyratex-International-Ltd',
+ '0568' => 'Quartz-Ingenierie',
+ '0569' => 'SegaSoft',
+ '056a' => 'Wacom-Co.-Ltd',
+ '056b' => 'Decicon-Inc.',
+ '056c' => 'eTEK-Labs',
+ '056d' => 'EIZO-Corp.',
+ '056e' => 'Elecom-Co.-Ltd',
+ '056f' => 'Korea-Data-Systems-Co.-Ltd',
+ '0570' => 'Epson-America',
+ '0571' => 'Interex-Inc.',
+ '0574' => 'City-University-of-Hong-Kong',
+ '0577' => 'ELSA',
+ '0578' => 'Intrinsix-Corp.',
+ '0579' => 'GVC-Corp.',
+ '057a' => 'Samsung-Electronics-America',
+ '057b' => 'Y-E-Data-Inc.',
+ '057c' => 'AVM-GmbH',
+ '057d' => 'Shark-Multimedia-Inc.',
+ '057e' => 'Nintendo-Co.-Ltd',
+ '057f' => 'QuickShot-Ltd',
+ '0580' => 'Denron-Inc.',
+ '0581' => 'Racal-Data-Group',
+ '0582' => 'Roland-Corp.',
+ '0583' => 'Padix-Co.-Ltd-Rockfire',
+ '0584' => 'RATOC-System-Inc.',
+ '0585' => 'FlashPoint-Technology-Inc.',
+ '0586' => 'ZyXEL-Communications-Corp.',
+ '0588' => 'Sapien-Design',
+ '0589' => 'Victron',
+ '058a' => 'Nohau-Corp.',
+ '058b' => 'Infineon-Technologies',
+ '058c' => 'In-Focus-Systems',
+ '058d' => 'Micrel-Semiconductor',
+ '058e' => 'Tripath-Technology-Inc.',
+ '058f' => 'Alcor-Micro-Corp.',
+ '0590' => 'Omron-Corp.',
+ '0591' => 'Questra-Consulting',
+ '0592' => 'Powerware-Corp.',
+ '0593' => 'Incite',
+ '0594' => 'Princeton-Graphic-Systems',
+ '0595' => 'Zoran-Microelectronics-Ltd',
+ '0596' => 'MicroTouch-Systems-Inc.',
+ '0597' => 'Trisignal-Communications',
+ '0598' => 'Niigata-Canotec-Co.-Inc.',
+ '059b' => 'Iomega-Corp.',
+ '059c' => 'A-Trend-Technology-Co.-Ltd',
+ '059d' => 'Advanced-Input-Devices',
+ '059e' => 'Intelligent-Instrumentation',
+ '059f' => 'LaCie-Ltd',
+ '05a0' => 'Vetronix-Corp.',
+ '05a1' => 'USC-Corp.',
+ '05a3' => 'ARC-International',
+ '05a4' => 'Ortek-Technology-Inc.',
+ '05a5' => 'Sampo-Technology-Corp.',
+ '05a6' => 'Cisco-Systems-Inc.',
+ '05a7' => 'Bose-Corp.',
+ '05a8' => 'Spacetec-IMC-Corp.',
+ '05a9' => 'OmniVision-Technologies-Inc.',
+ '05aa' => 'Utilux-South-China-Ltd',
+ '05ab' => 'In-System-Design',
+ '05ac' => 'Apple-Inc.',
+ '05ad' => 'Y.C.-Cable-U.S.A.-Inc.',
+ '05ae' => 'Synopsys-Inc.',
+ '05af' => 'Jing-Mold-Enterprise-Co.-Ltd',
+ '05b0' => 'Fountain-Technologies-Inc.',
+ '05b4' => 'LG-Semicon-Co.-Ltd',
+ '05b5' => 'Dialogic-Corp.',
+ '05b6' => 'Proxima-Corp.',
+ '05b7' => 'Medianix-Semiconductor-Inc.',
+ '05b8' => 'Agiler-Inc.',
+ '05b9' => 'Philips-Research-Laboratories',
+ '05ba' => 'DigitalPersona-Inc.',
+ '05bb' => 'Grey-Cell-Systems',
+ '05bc' => '3G-Green-Green-Globe-Co.-Ltd',
+ '05bd' => 'RAFI-GmbH---Co.-KG',
+ '05be' => 'Tyco-Electronics-Raychem',
+ '05bf' => 'S---S-Research',
+ '05c0' => 'Keil-Software',
+ '05c2' => 'Media-Phonics-Suisse-S.A.',
+ '05c5' => 'Digi-International-Inc.',
+ '05c6' => 'Qualcomm-Inc.',
+ '05c7' => 'Qtronix-Corp.',
+ '05c9' => 'Semtech-Corp.',
+ '05ca' => 'Ricoh-Co.-Ltd',
+ '05cc' => 'ELSA-AG',
+ '05cd' => 'Silicom-Ltd',
+ '05ce' => 'sci-worx-GmbH',
+ '05cf' => 'Sung-Forn-Co.-Ltd',
+ '05d0' => 'GE-Medical-Systems-Lunar',
+ '05d1' => 'Brainboxes-Ltd',
+ '05d2' => 'Wave-Systems-Corp.',
+ '05d3' => 'Tohoku-Ricoh-Co.-Ltd',
+ '05d6' => 'Philips-Semiconductors-CICT',
+ '05d7' => 'Thomas---Betts-Corp.',
+ '05d8' => 'Ultima-Electronics-Corp.',
+ '05d9' => 'Axiohm-Transaction-Solutions',
+ '05da' => 'Microtek-International-Inc.',
+ '05db' => 'Sun-Corp.-Suntac-',
+ '05dc' => 'Lexar-Media-Inc.',
+ '05dd' => 'Delta-Electronics-Inc.',
+ '05df' => 'Silicon-Vision-Inc.',
+ '05e0' => 'Symbol-Technologies',
+ '05e1' => 'Syntek-Semiconductor-Co.-Ltd',
+ '05e2' => 'ElecVision-Inc.',
+ '05e3' => 'Genesys-Logic-Inc.',
+ '05e4' => 'Red-Wing-Corp.',
+ '05e5' => 'Fuji-Electric-Co.-Ltd',
+ '05e6' => 'Keithley-Instruments',
+ '05e8' => 'ICC-Inc.',
+ '05e9' => 'Kawasaki-LSI',
+ '05eb' => 'FFC-Ltd',
+ '05ec' => 'COM21-Inc.',
+ '05ee' => 'Cytechinfo-Inc.',
+ '05ef' => 'AVB-Inc.-anko-',
+ '05f0' => 'Canopus-Co.-Ltd',
+ '05f1' => 'Compass-Communications',
+ '05f2' => 'Dexin-Corp.-Ltd',
+ '05f3' => 'PI-Engineering-Inc.',
+ '05f5' => 'Unixtar-Technology-Inc.',
+ '05f6' => 'AOC-International',
+ '05f7' => 'RFC-Distributions-PTE-Ltd',
+ '05f9' => 'PSC-Scanning-Inc.',
+ '05fc' => 'Harman-Multimedia',
+ '05fd' => 'InterAct-Inc.',
+ '05fe' => 'Chic-Technology-Corp.',
+ '05ff' => 'LeCroy-Corp.',
+ '0600' => 'Barco-Display-Systems',
+ '0601' => 'Jazz-Hipster-Corp.',
+ '0602' => 'Vista-Imaging-Inc.',
+ '0604' => 'Jean-Co.-Ltd',
+ '0605' => 'Anchor-C-C-Co.-Ltd',
+ '0607' => 'Bridge-Information-Co.-Ltd',
+ '0608' => 'Genrad-Ads',
+ '0609' => 'SMK-Manufacturing-Inc.',
+ '060b' => 'Solid-Year',
+ '060c' => 'EEH-Datalink-GmbH',
+ '060d' => 'Auctor-Corp.',
+ '060e' => 'Transmonde-Technologies-Inc.',
+ '0610' => 'Costar-Electronics-Inc.',
+ '0611' => 'Totoku-Electric-Co.-Ltd',
+ '0613' => 'TransAct-Technologies-Inc.',
+ '0614' => 'Bio-Rad-Laboratories',
+ '0618' => 'MacAlly',
+ '0619' => 'Seiko-Instruments-Inc.',
+ '061a' => 'Veridicom-International-Inc.',
+ '061b' => 'Promptus-Communications-Inc.',
+ '061c' => 'Act-Labs-Ltd',
+ '061d' => 'Quatech-Inc.',
+ '061e' => 'Nissei-Electric-Co.',
+ '0620' => 'Alaris-Inc.',
+ '0622' => 'Iotech-Inc.',
+ '0623' => 'Littelfuse-Inc.',
+ '0624' => 'Avocent-Corp.',
+ '0625' => 'TiMedia-Technology-Co.-Ltd',
+ '0627' => 'Adomax-Technology-Co.-Ltd',
+ '0628' => 'Tasking-Software-Inc.',
+ '0629' => 'Zida-Technologies-Ltd',
+ '062a' => 'Creative-Labs',
+ '0631' => 'JUJO-Electronics-Corp.',
+ '0633' => 'Cyrix-Corp.',
+ '0634' => 'Micron-Technology-Inc.',
+ '0635' => 'Methode-Electronics-Inc.',
+ '0636' => 'Sierra-Imaging-Inc.',
+ '0638' => 'Avision-Inc.',
+ '0639' => 'Chrontel-Inc.',
+ '063a' => 'Techwin-Corp.',
+ '063b' => 'Taugagreining-HF',
+ '063d' => 'Fong-Kai-Industrial-Co.-Ltd',
+ '063e' => 'RealMedia-Technology-Inc.',
+ '063f' => 'New-Technology-Cable-Ltd',
+ '0640' => 'Hitex-Development-Tools',
+ '0641' => 'Woods-Industries-Inc.',
+ '0642' => 'VIA-Medical-Corp.',
+ '0644' => 'TEAC-Corp.',
+ '0645' => 'Who--Vision-Systems-Inc.',
+ '0646' => 'UMAX',
+ '0647' => 'Acton-Research-Corp.',
+ '0648' => 'Inside-Out-Networks',
+ '0649' => 'Weli-Science-Co.-Ltd',
+ '064c' => 'Ji-Haw-Industrial-Co.-Ltd',
+ '064d' => 'TriTech-Microelectronics-Ltd',
+ '064e' => 'Suyin-Corp.',
+ '064f' => 'WIBU-Systems-AG',
+ '0650' => 'Dynapro-Systems',
+ '0651' => 'Likom-Technology-Sdn.-Bhd.',
+ '0652' => 'Stargate-Solutions-Inc.',
+ '0653' => 'CNF-Inc.',
+ '0654' => 'Granite-Microsystems-Inc.',
+ '0656' => 'Glory-Mark-Electronic-Ltd',
+ '0657' => 'Tekcon-Electronics-Corp.',
+ '0658' => 'Sigma-Designs-Inc.',
+ '0659' => 'Aethra',
+ '065a' => 'Optoelectronics-Co.-Ltd',
+ '065b' => 'Tracewell-Systems',
+ '065e' => 'Silicon-Graphics',
+ '0661' => 'Hamamatsu-Photonics-K.K.',
+ '0662' => 'Kansai-Electric-Co.-Ltd',
+ '0663' => 'Topmax-Electronic-Co.-Ltd',
+ '0664' => 'Groovy-Technology-Corp.',
+ '0665' => 'Cypress-Semiconductor',
+ '0667' => 'Aiwa-Co.-Ltd',
+ '0668' => 'WordWand',
+ '0669' => 'Oce-Printing-Systems-GmbH',
+ '066a' => 'Total-Technologies-Ltd',
+ '066b' => 'Linksys',
+ '066d' => 'Entrega-Inc.',
+ '066f' => 'SigmaTel-Inc.',
+ '0670' => 'Sequel-Imaging',
+ '0672' => 'Labtec-Inc.',
+ '0673' => 'HCL',
+ '0675' => 'DrayTek-Corp.',
+ '0676' => 'Teles-AG',
+ '0677' => 'Aiwa-Co.-Ltd',
+ '0678' => 'ACard-Technology-Corp.',
+ '067b' => 'Prolific-Technology-Inc.',
+ '067c' => 'Efficient-Networks-Inc.',
+ '067d' => 'Hohner-Corp.',
+ '067e' => 'Intermec-Technologies-Corp.',
+ '067f' => 'Virata-Ltd',
+ '0682' => 'Victor-Company-of-Japan-Ltd',
+ '0684' => 'Actiontec-Electronics-Inc.',
+ '0686' => 'Minolta-Co.-Ltd',
+ '068a' => 'Pertech-Inc.',
+ '068b' => 'Potrans-International-Inc.',
+ '068e' => 'CH-Products-Inc.',
+ '0690' => 'Golden-Bridge-Electech-Inc.',
+ '0693' => 'Hagiwara-Sys-Com-Co.-Ltd',
+ '0694' => 'Lego-Group',
+ '0698' => 'Chuntex-CTX',
+ '0699' => 'Tektronix-Inc.',
+ '069a' => 'Askey-Computer-Corp.',
+ '069b' => 'Thomson-Inc.',
+ '069d' => 'Hughes-Network-Systems-HNS',
+ '069e' => 'Marx',
+ '069f' => 'Allied-Data-Technologies-BV',
+ '06a2' => 'Topro-Technology-Inc.',
+ '06a3' => 'Saitek-PLC',
+ '06a5' => 'Divio',
+ '06a7' => 'MicroStore-Inc.',
+ '06a8' => 'Topaz-Systems-Inc.',
+ '06a9' => 'Westell',
+ '06aa' => 'Sysgration-Ltd',
+ '06b8' => 'Pixela-Corp.',
+ '06b9' => 'Alcatel-Telecom',
+ '06bb' => 'EDA-Inc.',
+ '06bc' => 'Oki-Data-Corp.',
+ '06bd' => 'AGFA-Gevaert-NV',
+ '06bf' => 'Leoco-Corp.',
+ '06c2' => 'Phidgets-Inc.-formerly-GLAB',
+ '06c4' => 'Bizlink-International-Corp.',
+ '06c5' => 'Hagenuk-GmbH',
+ '06c6' => 'Infowave-Software-Inc.',
+ '06c8' => 'SIIG-Inc.',
+ '06c9' => 'Taxan-Europe-Ltd',
+ '06ca' => 'Newer-Technology-Inc.',
+ '06cb' => 'Synaptics-Inc.',
+ '06cc' => 'Terayon-Communication-Systems',
+ '06cd' => 'Keyspan',
+ '06cf' => 'SpheronVR-AG',
+ '06d0' => 'LapLink-Inc.',
+ '06d1' => 'Daewoo-Electronics-Co.-Ltd',
+ '06d3' => 'Mitsubishi-Electric-Corp.',
+ '06d4' => 'Cisco-Systems',
+ '06d5' => 'TOSHIBA',
+ '06d6' => 'Aashima-Technology-B.V.',
+ '06da' => 'Phoenixtec-Power-Co.-Ltd',
+ '06db' => 'Paradyne',
+ '06de' => 'Heisei-Electronics-Co.-Ltd',
+ '06e0' => 'Multi-Tech-Systems-Inc.',
+ '06e1' => 'ADS-Technologies-Inc.',
+ '06e4' => 'Alcatel-Microelectronics',
+ '06e6' => 'Tiger-Jet-Network-Inc.',
+ '06ea' => 'Sirius-Technologies',
+ '06eb' => 'PC-Expert-Tech.-Co.-Ltd',
+ '06f0' => 'T.N.C-Industrial-Co.-Ltd',
+ '06f1' => 'Opcode-Systems-Inc.',
+ '06f2' => 'Emine-Technology-Co.',
+ '06f6' => 'Wintrend-Technology-Co.-Ltd',
+ '06f7' => 'Wailly-Technology-Ltd',
+ '06f8' => 'Guillemot-Corp.',
+ '06f9' => 'ASYST-electronic-d.o.o.',
+ '06fa' => 'HSD-S.r.L',
+ '06fd' => 'Boston-Acoustics',
+ '06fe' => 'Gallant-Computer-Inc.',
+ '0703' => 'Bvtech-Industry-Inc.',
+ '0705' => 'NKK-Corp.',
+ '0706' => 'Ariel-Corp.',
+ '0707' => 'Standard-Microsystems-Corp.',
+ '0708' => 'Putercom-Co.-Ltd',
+ '0709' => 'Silicon-Systems-Ltd-SSL',
+ '070d' => 'Comoss-Electronic-Co.-Ltd',
+ '0710' => 'Connect-Tech-Inc.',
+ '0713' => 'Interval-Research-Corp.',
+ '0714' => 'NewMotion-Inc.',
+ '0717' => 'ZNK-Corp.',
+ '0718' => 'Imation-Corp.',
+ '0719' => 'Tremon-Enterprises-Co.-Ltd',
+ '071b' => 'Domain-Technologies-Inc.',
+ '071d' => 'Eicon-Networks-Corp.',
+ '071e' => 'Ariston-Technologies',
+ '0729' => 'Amitm',
+ '072e' => 'Sunix-Co.-Ltd',
+ '072f' => 'Advanced-Card-Systems-Ltd',
+ '0731' => 'Susteen-Inc.',
+ '0733' => 'ViewQuest-Technologies-Inc.',
+ '0734' => 'Lasat-Communications-A-S',
+ '0735' => 'Asuscom-Network',
+ '0736' => 'Lorom-Industrial-Co.-Ltd',
+ '0738' => 'Mad-Catz-Inc.',
+ '073a' => 'Chaplet-Systems-Inc.',
+ '073b' => 'Suncom-Technologies',
+ '073d' => 'Eutron-S.p.a.',
+ '073e' => 'NEC-Inc.',
+ '0745' => 'Syntech-Information-Co.-Ltd',
+ '0746' => 'Onkyo-Corp.',
+ '0747' => 'Labway-Corp.',
+ '0749' => 'EVer-Electronics-Corp.',
+ '074b' => 'Polestar-Tech.-Corp.',
+ '074c' => 'C-C-C-Group-PLC',
+ '074d' => 'Micronas-GmbH',
+ '074e' => 'Digital-Stream-Corp.',
+ '0755' => 'Aureal-Semiconductor',
+ '0757' => 'Network-Technologies-Inc.',
+ '075b' => 'Sophisticated-Circuits-Inc.',
+ '0763' => 'Midiman',
+ '0764' => 'Cyber-Power-System-Inc.',
+ '0765' => 'X-Rite-Inc.',
+ '0766' => 'Jess-Link-Products-Co.-Ltd',
+ '0767' => 'Tokheim-Corp.',
+ '0768' => 'Camtel-Technology-Corp.',
+ '0769' => 'Surecom-Technology-Corp.',
+ '076b' => 'OmniKey-AG',
+ '076c' => 'Partner-Tech',
+ '076d' => 'Denso-Corp.',
+ '076e' => 'Kuan-Tech-Enterprise-Co.-Ltd',
+ '076f' => 'Jhen-Vei-Electronic-Co.-Ltd',
+ '0771' => 'Observator-Instruments-BV',
+ '0774' => 'AmTRAN-Technology-Co.-Ltd',
+ '0775' => 'Longshine-Electronics-Corp.',
+ '0776' => 'Inalways-Corp.',
+ '0777' => 'Comda-Enterprise-Corp.',
+ '0778' => 'Volex-Inc.',
+ '0779' => 'Fairchild-Semiconductor',
+ '077a' => 'Sankyo-Seiki-Mfg.-Co.-Ltd',
+ '077b' => 'Linksys',
+ '077c' => 'Forward-Electronics-Co.-Ltd',
+ '077d' => 'Griffin-Technology',
+ '077f' => 'Well-Excellent---Most-Corp.',
+ '0780' => 'Sagem-Monetel-GmbH',
+ '0781' => 'SanDisk-Corp.',
+ '0782' => 'Trackerball',
+ '0783' => 'C3PO',
+ '0784' => 'Vivitar-Inc.',
+ '0785' => 'NTT-ME',
+ '0789' => 'Logitec-Corp.',
+ '078b' => 'Happ-Controls-Inc.',
+ '078c' => 'GTCO-CalComp',
+ '078e' => 'Brincom-Inc.',
+ '0792' => 'Axis-Communications-AB',
+ '0793' => 'Wha-Yu-Industrial-Co.-Ltd',
+ '0794' => 'ABL-Electronics-Corp.',
+ '0795' => 'RealChip-Inc.',
+ '0796' => 'Certicom-Corp.',
+ '0797' => 'Grandtech-Semiconductor-Corp.',
+ '0798' => 'Optelec',
+ '0799' => 'Altera',
+ '079b' => 'Sagem',
+ '079d' => 'Alfadata-Computer-Corp.',
+ '07a1' => 'Digicom-S.p.A.',
+ '07a2' => 'National-Technical-Systems',
+ '07a3' => 'Onnto-Corp.',
+ '07a4' => 'Be-Inc.',
+ '07a6' => 'ADMtek-Inc.',
+ '07aa' => 'Corega-K.K.',
+ '07ab' => 'Freecom-Technologies',
+ '07af' => 'Microtech',
+ '07b0' => 'Trust-Technologies',
+ '07b1' => 'IMP-Inc.',
+ '07b2' => 'Motorola-BCS-Inc.',
+ '07b3' => 'Plustek-Inc.',
+ '07b4' => 'Olympus-Optical-Co.-Ltd',
+ '07b5' => 'Mega-World-International-Ltd',
+ '07b6' => 'Marubun-Corp.',
+ '07b7' => 'TIME-Interconnect-Ltd',
+ '07b8' => 'AboCom-Systems-Inc',
+ '07bc' => 'Canon',
+ '07bd' => 'Webgear-Inc.',
+ '07be' => 'Veridicom',
+ '07c1' => 'Keisokugiken',
+ '07c4' => 'Datafab-Systems-Inc.',
+ '07c5' => 'APG-Cash-Drawer',
+ '07c6' => 'ShareWave-Inc.',
+ '07c7' => 'Powertech-Industrial-Co.-Ltd',
+ '07c8' => 'B.U.G.-Inc.',
+ '07c9' => 'Allied-Telesyn-International',
+ '07ca' => 'AVerMedia-Technologies-Inc.',
+ '07cb' => 'Kingmax-Technology-Inc.',
+ '07cc' => 'Carry-Computer-Eng.-Co.-Ltd',
+ '07cd' => 'Elektor',
+ '07cf' => 'Casio-Computer-Co.-Ltd',
+ '07d0' => 'Dazzle',
+ '07d1' => 'D-Link',
+ '07d2' => 'Aptio-Products-Inc.',
+ '07d3' => 'Cyberdata-Corp.',
+ '07d5' => 'Radiant-Systems',
+ '07d7' => 'GCC-Technologies-Inc.',
+ '07da' => 'Arasan-Chip-Systems',
+ '07de' => 'Diamond-Multimedia',
+ '07df' => 'David-Electronics-Co.-Ltd',
+ '07e1' => 'Ambient-Technologies-Inc.',
+ '07e2' => 'Elmeg-GmbH---Co.-Ltd',
+ '07e3' => 'Planex-Communications-Inc.',
+ '07e4' => 'Movado-Enterprise-Co.-Ltd',
+ '07e5' => 'QPS-Inc.',
+ '07e6' => 'Allied-Cable-Corp.',
+ '07e7' => 'Mirvo-Toys-Inc.',
+ '07e8' => 'Labsystems',
+ '07ea' => 'Iwatsu-Electric-Co.-Ltd',
+ '07eb' => 'Double-H-Technology-Co.-Ltd',
+ '07ef' => 'STSN',
+ '07f6' => 'Circuit-Assembly-Corp.',
+ '07f7' => 'Century-Corp.',
+ '07f9' => 'Dotop-Technology-Inc.',
+ '07fa' => 'DrayTek-Corp.',
+ '07fd' => 'Mark-of-the-Unicorn',
+ '07ff' => 'Unknown',
+ '0801' => 'Mag-Tek',
+ '0802' => 'Mako-Technologies-LLC',
+ '0803' => 'Zoom-Telephonics-Inc.',
+ '0809' => 'Genicom-Technology-Inc.',
+ '080a' => 'Evermuch-Technology-Co.-Ltd',
+ '080b' => 'Cross-Match-Technologies',
+ '080c' => 'Datalogic-S.p.A.',
+ '080d' => 'Teco-Image-Systems-Co.-Ltd',
+ '0813' => 'Mattel-Inc.',
+ '0819' => 'eLicenser',
+ '081a' => 'MG-Logic',
+ '081b' => 'Indigita-Corp.',
+ '081c' => 'Mipsys',
+ '081e' => 'AlphaSmart-Inc.',
+ '0822' => 'Reudo-Corp.',
+ '0825' => 'GC-Protronics',
+ '0826' => 'Data-Transit',
+ '0827' => 'BroadLogic-Inc.',
+ '0828' => 'Sato-Corp.',
+ '082d' => 'Handspring',
+ '0830' => 'Palm-Inc.',
+ '0832' => 'Kouwell-Electronics-Corp.',
+ '0833' => 'Sourcenext-Corp.',
+ '0839' => 'Samsung-Techwin-Co.-Ltd',
+ '083a' => 'Accton-Technology-Corp.',
+ '083f' => 'Global-Village',
+ '0840' => 'Argosy-Research-Inc.',
+ '0841' => 'Rioport.com-Inc.',
+ '0844' => 'Welland-Industrial-Co.-Ltd',
+ '0846' => 'NetGear',
+ '084e' => 'KB-Gear',
+ '084f' => 'Empeg',
+ '0850' => 'Fast-Point-Technologies-Inc.',
+ '0852' => 'CSEM',
+ '0853' => 'Topre-Corporation',
+ '0854' => 'ActiveWire-Inc.',
+ '0856' => 'B-B-Electronics',
+ '0858' => 'Hitachi-Maxell-Ltd',
+ '085a' => 'Xircom',
+ '085c' => 'ColorVision-Inc.',
+ '0862' => 'Teletrol-Systems-Inc.',
+ '0863' => 'Filanet-Corp.',
+ '0864' => 'NetGear',
+ '0867' => 'Data-Translation-Inc.',
+ '086e' => 'System-TALKS-Inc.',
+ '086f' => 'MEC-IMEX-Inc.',
+ '0870' => 'Metricom',
+ '0871' => 'SanDisk-Inc.',
+ '0873' => 'Xpeed-Inc.',
+ '0874' => 'A-Tec-Subsystem-Inc.',
+ '0879' => 'Comtrol-Corp.',
+ '087c' => 'Adesso-Kbtek-America-Inc.',
+ '087d' => 'Jaton-Corp.',
+ '087f' => 'Virtual-IP-Group-Inc.',
+ '0880' => 'APT-Technologies-Inc.',
+ '0885' => 'Boca-Research-Inc.',
+ '0886' => 'XAC-Automation-Corp.',
+ '0887' => 'Hannstar-Electronics-Corp.',
+ '088b' => 'MassWorks-Inc.',
+ '088c' => 'Swecoin-AB',
+ '088e' => 'iLok',
+ '0892' => 'DioGraphy-Inc.',
+ '0897' => 'Lauterbach',
+ '089d' => 'Icron-Technologies-Corp.',
+ '089e' => 'NST-Co.-Ltd',
+ '089f' => 'Primex-Aerospace-Co.',
+ '08a5' => 'e9-Inc.',
+ '08a8' => 'Andrea-Electronics',
+ '08ae' => 'Macally-Mace-Group-Inc.',
+ '08b4' => 'Sorenson-Vision-Inc.',
+ '08b7' => 'NATSU',
+ '08b9' => 'RadioShack-Corp.-Tandy',
+ '08bb' => 'Texas-Instruments-Japan',
+ '08bd' => 'Citizen-Watch-Co.-Ltd',
+ '08c3' => 'Precise-Biometrics',
+ '08c4' => 'Proxim-Inc.',
+ '08c7' => 'Key-Nice-Enterprise-Co.-Ltd',
+ '08c8' => '2Wire-Inc.',
+ '08ca' => 'Aiptek-International-Inc.',
+ '08cd' => 'Jue-Hsun-Ind.-Corp.',
+ '08ce' => 'Long-Well-Electronics-Corp.',
+ '08d1' => 'smartBridges-Inc.',
+ '08d3' => 'Virtual-Ink',
+ '08d4' => 'Fujitsu-Siemens-Computers',
+ '08d8' => 'IXXAT-Automation-GmbH',
+ '08d9' => 'Increment-P-Corp.',
+ '08dd' => 'Billionton-Systems-Inc.',
+ '08de' => '---',
+ '08df' => 'Spyrus-Inc.',
+ '08e3' => 'Olitec-Inc.',
+ '08e4' => 'Pioneer-Corp.',
+ '08e5' => 'Litronic',
+ '08e6' => 'Gemplus',
+ '08e8' => 'Integrated-Memory-Logic',
+ '08e9' => 'Extended-Systems-Inc.',
+ '08ec' => 'M-Systems-Flash-Disk-Pioneers',
+ '08ed' => 'MediaTek-Inc.',
+ '08ee' => 'CCSI-Hesso',
+ '08f0' => 'Corex-Technologies',
+ '08f1' => 'CTI-Electronics-Corp.',
+ '08f2' => 'Gotop-Information-Inc.',
+ '08f5' => 'SysTec-Co.-Ltd',
+ '08f6' => 'Logic-3-International-Ltd',
+ '08f7' => 'Vernier',
+ '08f9' => 'Wipro-Technologies',
+ '08fa' => 'Caere',
+ '08fb' => 'Socket-Communications',
+ '08fd' => 'Digianswer-A-S',
+ '08ff' => 'AuthenTec-Inc.',
+ '0900' => 'Pinnacle-Systems-Inc.',
+ '0901' => 'VST-Technologies',
+ '0906' => 'Faraday-Technology-Corp.',
+ '0909' => 'Audio-Technica-Corp.',
+ '090b' => 'Neurosmith',
+ '090c' => 'Feiya-Technology-Corp',
+ '090e' => 'Shining-Technology-Inc.',
+ '090f' => 'Fujitsu-Devices-Inc.',
+ '0910' => 'Alation-Systems-Inc.',
+ '0911' => 'Philips-Speech-Processing',
+ '0912' => 'Voquette-Inc.',
+ '0915' => 'GlobeSpan-Inc.',
+ '0917' => 'SmartDisk-Corp.',
+ '0919' => 'Tiger-Electronics',
+ '091e' => 'Garmin-International',
+ '0920' => 'Echelon-Co.',
+ '0921' => 'GoHubs-Inc.',
+ '0922' => 'Dymo-CoStar-Corp.',
+ '0923' => 'IC-Media-Corp.',
+ '0924' => 'XEROX',
+ '0925' => 'Lakeview-Research',
+ '0927' => 'Summus-Ltd',
+ '0928' => 'Oxford-Semiconductor-Ltd',
+ '0929' => 'American-Biometric-Co.',
+ '092b' => 'Sena-Technologies-Inc.',
+ '0930' => 'Toshiba-Corp.',
+ '0931' => 'Harmonic-Data-Systems-Ltd',
+ '0932' => 'Crescentec-Corp.',
+ '0933' => 'Quantum-Corp.',
+ '0934' => 'Netcom-Systems',
+ '0936' => 'NuTesla',
+ '0939' => 'Lumberg-Inc.',
+ '093a' => 'Pixart-Imaging-Inc.',
+ '093b' => 'Plextor-Corp.',
+ '093d' => 'InnoSync-Inc.',
+ '093e' => 'J.S.T.-Mfg.-Co.-Ltd',
+ '0941' => 'Photobit-Corp.',
+ '0942' => 'i2Go.com-LLC',
+ '0944' => 'KORG-Inc.',
+ '0945' => 'Pasco-Scientific',
+ '0948' => 'Kronauer-music-in-digital',
+ '094b' => 'Linkup-Systems-Corp.',
+ '094d' => 'Cable-Television-Laboratories',
+ '094f' => 'Yano',
+ '0951' => 'Kingston-Technology',
+ '0954' => 'RPM-Systems-Corp.',
+ '0955' => 'NVIDIA',
+ '0956' => 'BSquare-Corp.',
+ '0957' => 'Agilent-Technologies-Inc.',
+ '0958' => 'CompuLink-Research-Inc.',
+ '0959' => 'Cologne-Chip-AG',
+ '095a' => 'Portsmith',
+ '095b' => 'Medialogic-Corp.',
+ '095c' => 'K-Tec-Electronics',
+ '095d' => 'Polycom-Inc.',
+ '0967' => 'Acer',
+ '0968' => 'Catalyst-Enterprises-Inc.',
+ '096e' => 'Feitian-Technologies-Inc.',
+ '0971' => 'Gretag-Macbeth-AG',
+ '0973' => 'Schlumberger',
+ '0975' => 'OLE-Communications-Inc.',
+ '0976' => 'Adirondack-Wire---Cable',
+ '0977' => 'Lightsurf-Technologies',
+ '0978' => 'Beckhoff-GmbH',
+ '0979' => 'Jeilin-Technology-Corp.-Ltd',
+ '097a' => 'Minds-At-Work-LLC',
+ '097b' => 'Knudsen-Engineering-Ltd',
+ '097c' => 'Marunix-Co.-Ltd',
+ '097d' => 'Rosun-Technologies-Inc.',
+ '097f' => 'Barun-Electronics-Co.-Ltd',
+ '0981' => 'Oak-Technology-Ltd',
+ '0984' => 'Apricorn',
+ '098c' => 'Vitana-Corp.',
+ '098d' => 'INDesign',
+ '098f' => 'Kenwood-TMI-Corp.',
+ '0993' => 'Gemstar-eBook-Group-Ltd',
+ '099a' => 'Zippy-Technology-Corp.',
+ '09a3' => 'PairGain-Technologies',
+ '09a4' => 'Contech-Research-Inc.',
+ '09a5' => 'VCON-Telecommunications',
+ '09a6' => 'Poinchips',
+ '09aa' => 'Intersil-Corp.',
+ '09ab' => 'Japan-Cash-Machine-Co.-Ltd.',
+ '09ae' => 'Tripp-Lite',
+ '09b3' => 'Altius-Solutions-Inc.',
+ '09b4' => 'MDS-Telephone-Systems',
+ '09b5' => 'Celltrix-Technology-Co.-Ltd',
+ '09bc' => 'Grundig',
+ '09be' => 'MySmart.Com',
+ '09bf' => 'Auerswald-GmbH---Co.-KG',
+ '09c1' => 'Arris-Interactive-LLC',
+ '09c2' => 'Nisca-Corp.',
+ '09c3' => 'ActivCard-Inc.',
+ '09c4' => 'ACTiSYS-Corp.',
+ '09c5' => 'Memory-Corp.',
+ '09cc' => 'Workbit-Corp.',
+ '09ce' => 'City-Electronics-Ltd',
+ '09d1' => 'NeoMagic-Inc.',
+ '09d2' => 'Vreelin-Engineering-Inc.',
+ '09d3' => 'Com-One',
+ '09d7' => 'Novatel-Wireless',
+ '09d9' => 'KRF-Tech-Ltd',
+ '09da' => 'A4-Tech-Co.-Ltd',
+ '09db' => 'Measurement-Computing-Corp.',
+ '09dc' => 'Aimex-Corp.',
+ '09dd' => 'Fellowes-Inc.',
+ '09df' => 'Addonics-Technologies-Corp.',
+ '09e1' => 'Intellon-Corp.',
+ '09e5' => 'Jo-Dan-International-Inc.',
+ '09e6' => 'Silutia-Inc.',
+ '09e7' => 'Real-3D-Inc.',
+ '09e8' => 'AKAI-Professional-M.I.-Corp.',
+ '09e9' => 'Chen-Source-Inc.',
+ '09eb' => 'IM-Networks-Inc.',
+ '09ef' => 'Xitel',
+ '09f3' => 'GoFlight-Inc.',
+ '09f5' => 'AresCom',
+ '09f6' => 'RocketChips-Inc.',
+ '09f7' => 'Edu-Science-H.K.-Ltd',
+ '09f8' => 'SoftConnex-Technologies-Inc.',
+ '09f9' => 'Bay-Associates',
+ '09fa' => 'Mtek-Vision',
+ '09fb' => 'Altera',
+ '09ff' => 'Gain-Technology-Corp.',
+ '0a00' => 'Liquid-Audio',
+ '0a01' => 'ViA-Inc.',
+ '0a07' => 'Ontrak-Control-Systems-Inc.',
+ '0a0b' => 'Cybex-Computer-Products-Co.',
+ '0a11' => 'Xentec-Inc.',
+ '0a12' => 'Cambridge-Silicon-Radio-Ltd',
+ '0a13' => 'Telebyte-Inc.',
+ '0a14' => 'Spacelabs-Medical-Inc.',
+ '0a15' => 'Scalar-Corp.',
+ '0a16' => 'Trek-Technology-S-PTE-Ltd',
+ '0a17' => 'Pentax-Corp.',
+ '0a19' => 'Hua-Geng-Technologies-Inc.',
+ '0a27' => 'Datacard-Group',
+ '0a2c' => 'AK-Modul-Bus-Computer-GmbH',
+ '0a34' => 'TG3-Electronics-Inc.',
+ '0a35' => 'Radikal-Technologies',
+ '0a39' => 'Gilat-Satellite-Networks-Ltd',
+ '0a3a' => 'PentaMedia-Co.-Ltd',
+ '0a3c' => 'NTT-DoCoMo-Inc.',
+ '0a3d' => 'Varo-Vision',
+ '0a3f' => 'Swissonic-AG',
+ '0a43' => 'Boca-Systems-Inc.',
+ '0a46' => 'Davicom-Semiconductor-Inc.',
+ '0a47' => 'Hirose-Electric',
+ '0a48' => 'I-O-Interconnect',
+ '0a4b' => 'Fujitsu-Media-Devices-Ltd',
+ '0a4c' => 'Computex-Co.-Ltd',
+ '0a4d' => 'Evolution-Electronics-Ltd',
+ '0a4f' => 'Litton-Systems-Inc.',
+ '0a50' => 'Mimaki-Engineering-Co.-Ltd',
+ '0a51' => 'Sony-Electronics-Inc.',
+ '0a52' => 'Jebsee-Electronics-Co.-Ltd',
+ '0a53' => 'Portable-Peripheral-Co.-Ltd',
+ '0a5a' => 'Electronics-For-Imaging-Inc.',
+ '0a5b' => 'EAsics-NV',
+ '0a5c' => 'Broadcom',
+ '0a5d' => 'Diatrend-Corp.',
+ '0a5f' => 'Zebra',
+ '0a62' => 'MPMan',
+ '0a66' => 'ClearCube-Technology',
+ '0a67' => 'Medeli-Electronics-Co.-Ltd',
+ '0a68' => 'Comaide-Corp.',
+ '0a69' => 'Chroma-ate-Inc.',
+ '0a6b' => 'Green-House-Co.-Ltd',
+ '0a6d' => 'UPS-Manufacturing',
+ '0a6e' => 'Benwin',
+ '0a6f' => 'Core-Technology-Inc.',
+ '0a70' => 'International-Game-Technology',
+ '0a72' => 'Sanwa-Denshi',
+ '0a7d' => 'NSTL-Inc.',
+ '0a7e' => 'Octagon-Systems-Corp.',
+ '0a80' => 'Rexon-Technology-Corp.-Ltd',
+ '0a81' => 'Chesen-Electronics-Corp.',
+ '0a82' => 'Syscan',
+ '0a83' => 'NextComm-Inc.',
+ '0a84' => 'Maui-Innovative-Peripherals',
+ '0a85' => 'Idexx-Labs',
+ '0a86' => 'NITGen-Co.-Ltd',
+ '0a8d' => 'Picturetel',
+ '0a90' => 'Candy-Technology-Co.-Ltd',
+ '0a91' => 'Globlink-Technology-Inc.',
+ '0a92' => 'EGO-SYStems-Inc.',
+ '0a93' => 'C-Technologies-AB',
+ '0a94' => 'Intersense',
+ '0aa3' => 'Lava-Computer-Mfg.-Inc.',
+ '0aa4' => 'Develco-Elektronik',
+ '0aa5' => 'First-International-Digital',
+ '0aa6' => 'Perception-Digital-Ltd',
+ '0aa8' => 'TriGem-Computer-Inc.',
+ '0aa9' => 'Baromtec-Co.',
+ '0aaa' => 'Japan-CBM-Corp.',
+ '0aab' => 'Vision-Shape-Europe-SA',
+ '0aac' => 'iCompression-Inc.',
+ '0aad' => 'Rohde---Schwarz-GmbH---Co.-KG',
+ '0aae' => 'NEC-infrontia-Corp.-Nitsuko',
+ '0aaf' => 'Digitalway-Co.-Ltd',
+ '0ab1' => 'FEIG-ELECTRONIC-GmbH',
+ '0aba' => 'Ellisys',
+ '0abe' => 'Stereo-Link',
+ '0abf' => 'Diolan',
+ '0ac4' => 'Leco-Corp.',
+ '0ac5' => 'I---C-Corp.',
+ '0ac6' => 'Singing-Electrons-Inc.',
+ '0ac7' => 'Panwest-Corp.',
+ '0ac8' => 'Z-Star-Microelectronics-Corp.',
+ '0ac9' => 'Micro-Solutions-Inc.',
+ '0aca' => 'OPEN-Networks-Ltd',
+ '0acc' => 'Koga-Electronics-Co.',
+ '0acd' => 'ID-Tech',
+ '0ace' => 'ZyDAS',
+ '0acf' => 'Intoto-Inc.',
+ '0ad0' => 'Intellix-Corp.',
+ '0ad1' => 'Remotec-Technology-Ltd',
+ '0ada' => 'Data-Encryption-Systems-Ltd.',
+ '0ae3' => 'Allion-Computer-Inc.',
+ '0ae4' => 'Taito-Corp.',
+ '0ae7' => 'Neodym-Systems-Inc.',
+ '0ae8' => 'System-Support-Co.-Ltd',
+ '0aea' => 'SciEssence-LLC',
+ '0aeb' => 'TTP-Communications-Ltd',
+ '0aec' => 'Neodio-Technologies-Corp.',
+ '0af0' => 'Option',
+ '0af6' => 'Silver-I-Co.-Ltd',
+ '0af7' => 'B2C2-Inc.',
+ '0af9' => 'Hama-Inc.',
+ '0afc' => 'Zaptronix-Ltd',
+ '0afd' => 'Tateno-Dennou-Inc.',
+ '0afe' => 'Cummins-Engine-Co.',
+ '0b00' => 'INGENICO',
+ '0b05' => 'ASUSTek-Computer-Inc.',
+ '0b0b' => 'Datamax-ONeil',
+ '0b0c' => 'Todos-AB',
+ '0b0d' => 'ProjectLab',
+ '0b0e' => 'GN-Netcom',
+ '0b0f' => 'AVID-Technology',
+ '0b10' => 'Pcally',
+ '0b11' => 'I-Tech-Solutions-Co.-Ltd',
+ '0b1f' => 'Insyde-Software-Corp.',
+ '0b20' => 'TransDimension-Inc.',
+ '0b21' => 'Yokogawa-Electric-Corp.',
+ '0b23' => 'Pan-Asia-Electronics-Co.-Ltd',
+ '0b24' => 'Link-Evolution-Corp.',
+ '0b27' => 'Ritek-Corp.',
+ '0b28' => 'Kenwood-Corp.',
+ '0b2c' => 'Village-Center-Inc.',
+ '0b30' => 'PNY-Technologies-Inc.',
+ '0b33' => 'Contour-Design-Inc.',
+ '0b37' => 'Hitachi-ULSI-Systems-Co.-Ltd',
+ '0b38' => 'Gear-Head',
+ '0b3a' => 'IPaxess',
+ '0b3b' => 'Tekram-Technology-Co.-Ltd',
+ '0b3c' => 'Olivetti-Techcenter',
+ '0b3e' => 'Kikusui-Electronics-Corp.',
+ '0b41' => 'Hal-Corp.',
+ '0b43' => 'Play.com-Inc.',
+ '0b47' => 'Sportbug.com-Inc.',
+ '0b48' => 'TechnoTrend-AG',
+ '0b49' => 'ASCII-Corp.',
+ '0b4b' => 'Pine-Corp.-Ltd.',
+ '0b4d' => 'Graphtec-America-Inc.',
+ '0b4e' => 'Musical-Electronics-Ltd',
+ '0b50' => 'Dumpries-Co.-Ltd',
+ '0b51' => 'Comfort-Keyboard-Co.',
+ '0b52' => 'Colorado-MicroDisplay-Inc.',
+ '0b54' => 'Sinbon-Electronics-Co.-Ltd',
+ '0b56' => 'TYI-Systems-Ltd',
+ '0b59' => 'Lake-Communications-Ltd',
+ '0b5a' => 'Corel-Corp.',
+ '0b5f' => 'Green-Electronics-Co.-Ltd',
+ '0b60' => 'Nsine-Ltd',
+ '0b61' => 'NEC-Viewtechnology-Ltd',
+ '0b62' => 'Orange-Micro-Inc.',
+ '0b63' => 'ADLink-Technology-Inc.',
+ '0b64' => 'Wonderful-Wire-Cable-Co.-Ltd',
+ '0b65' => 'Expert-Magnetics-Corp.',
+ '0b69' => 'CacheVision',
+ '0b6a' => 'Maxim-Integrated-Products',
+ '0b6f' => 'Nagano-Japan-Radio-Co.-Ltd',
+ '0b70' => 'PortalPlayer-Inc.',
+ '0b71' => 'SHIN-EI-Sangyo-Co.-Ltd',
+ '0b73' => 'Computone-Corp.',
+ '0b75' => 'Roland-DG-Corp.',
+ '0b79' => 'Sunrise-Telecom-Inc.',
+ '0b7a' => 'Zeevo-Inc.',
+ '0b7b' => 'Taiko-Denki-Co.-Ltd',
+ '0b7c' => 'ITRAN-Communications-Ltd',
+ '0b7d' => 'Astrodesign-Inc.',
+ '0b81' => 'id3-Semiconductors',
+ '0b84' => 'Rextron-Technology-Inc.',
+ '0b85' => 'Elkat-Electronics-Sdn.-Bhd.',
+ '0b86' => 'Exputer-Systems-Inc.',
+ '0b87' => 'Plus-One-I---T-Inc.',
+ '0b8c' => 'SMART-Technologies-Inc.',
+ '0b95' => 'ASIX-Electronics-Corp.',
+ '0b96' => 'Sewon-Telecom',
+ '0b97' => 'O2-Micro-Inc.',
+ '0b98' => 'Playmates-Toys-Inc.',
+ '0b99' => 'Audio-International-Inc.',
+ '0b9b' => 'Dipl.-Ing.-Stefan-Kunde',
+ '0b9d' => 'Softprotec-Co.',
+ '0b9f' => 'Chippo-Technologies',
+ '0baf' => 'U.S.-Robotics',
+ '0bb0' => 'Concord-Camera-Corp.',
+ '0bb1' => 'Infinilink-Corp.',
+ '0bb2' => 'Ambit-Microsystems-Corp.',
+ '0bb3' => 'Ofuji-Technology',
+ '0bb4' => 'High-Tech-Computer-Corp.',
+ '0bb5' => 'Murata-Manufacturing-Co.-Ltd',
+ '0bb6' => 'Network-Alchemy',
+ '0bb7' => 'Joytech-Computer-Co.-Ltd',
+ '0bb9' => 'Eiger-M-C-Co.-Ltd',
+ '0bba' => 'ZAccess-Systems',
+ '0bbb' => 'General-Meters-Corp.',
+ '0bbc' => 'Assistive-Technology-Inc.',
+ '0bbd' => 'System-Connection-Inc.',
+ '0bc0' => 'Knilink-Technology-Inc.',
+ '0bc1' => 'Fuw-Yng-Electronics-Co.-Ltd',
+ '0bc2' => 'Seagate-RSS-LLC',
+ '0bc3' => 'IPWireless-Inc.',
+ '0bc4' => 'Microcube-Corp.',
+ '0bc5' => 'JCN-Co.-Ltd',
+ '0bc6' => 'ExWAY-Inc.',
+ '0bc7' => 'X10-Wireless-Technology-Inc.',
+ '0bc8' => 'Telmax-Communications',
+ '0bc9' => 'ECI-Telecom-Ltd',
+ '0bca' => 'Startek-Engineering-Inc.',
+ '0bd7' => 'Andrew-Pargeter---Associates',
+ '0bda' => 'Realtek',
+ '0bdc' => 'Y-Media-Corp.',
+ '0bdd' => 'Orange-PCS',
+ '0be2' => 'Kanda-Tsushin-Kogyo-Co.-Ltd',
+ '0be3' => 'TOYO-Corp.',
+ '0be4' => 'Elka-International-Ltd',
+ '0be5' => 'DOME-imaging-systems-Inc.',
+ '0bed' => 'Silicon-Labs',
+ '0bee' => 'LTK-Industries-Ltd',
+ '0bef' => 'Way2Call-Communications',
+ '0bf0' => 'Pace-Micro-Technology-PLC',
+ '0bf1' => 'Intracom-S.A.',
+ '0bf2' => 'Konexx',
+ '0bf6' => 'Addonics-Technologies-Inc.',
+ '0bf7' => 'Sunny-Giken-Inc.',
+ '0bf8' => 'Fujitsu-Siemens-Computers',
+ '0c04' => 'MOTO-Development-Group-Inc.',
+ '0c05' => 'Appian-Graphics',
+ '0c06' => 'Hasbro-Games-Inc.',
+ '0c07' => 'Infinite-Data-Storage-Ltd',
+ '0c08' => 'Agate',
+ '0c09' => 'Comjet-Information-System',
+ '0c0a' => 'Highpoint-Technologies-Inc.',
+ '0c0b' => 'Dura-Micro-Inc.-Acomdata',
+ '0c12' => 'Zeroplus',
+ '0c15' => 'Iris-Graphics',
+ '0c16' => 'Gyration-Inc.',
+ '0c17' => 'Cyberboard-A-S',
+ '0c18' => 'SynerTek-Korea-Inc.',
+ '0c19' => 'cyberPIXIE-Inc.',
+ '0c1a' => 'Silicon-Motion-Inc.',
+ '0c1b' => 'MIPS-Technologies',
+ '0c22' => 'Tally-Printer-Corp.',
+ '0c23' => 'Lernout-+-Hauspie',
+ '0c24' => 'Taiyo-Yuden',
+ '0c25' => 'Sampo-Corp.',
+ '0c26' => 'Prolific-Technology-Inc.',
+ '0c27' => 'RFIDeas-Inc',
+ '0c2e' => 'Metro',
+ '0c35' => 'Eagletron-Inc.',
+ '0c36' => 'E-Ink-Corp.',
+ '0c37' => 'e.Digital',
+ '0c39' => 'IFR',
+ '0c3b' => 'Komatsu-Ltd',
+ '0c3c' => 'Radius-Co.-Ltd',
+ '0c3d' => 'Innocom-Inc.',
+ '0c3e' => 'Nextcell-Inc.',
+ '0c44' => 'Motorola-iDEN',
+ '0c45' => 'Microdia-Ltd',
+ '0c4b' => 'Reiner-SCT-Kartensysteme-GmbH',
+ '0c52' => 'Sealevel-Systems-Inc.',
+ '0c53' => 'ViewPLUS-Inc.',
+ '0c54' => 'Glory-Ltd',
+ '0c55' => 'Spectrum-Digital-Inc.',
+ '0c56' => 'Billion-Bright-Ltd',
+ '0c58' => 'Vidar-Systems-Corp.',
+ '0c5a' => 'TRS-International-Mfg.-Inc.',
+ '0c5e' => 'Xytronix-Research---Design',
+ '0c60' => 'Apogee-Electronics-Corp.',
+ '0c62' => 'Chant-Sincere-Co.-Ltd',
+ '0c63' => 'Toko-Inc.',
+ '0c65' => 'Eminence-Enterprise-Co.-Ltd',
+ '0c66' => 'Rexon-Electronics-Corp.',
+ '0c67' => 'Concept-Telecom-Ltd',
+ '0c70' => 'MCT-Elektronikladen',
+ '0c74' => 'Optronic-Laboratories-Inc.',
+ '0c76' => 'JMTek-LLC.',
+ '0c77' => 'Sipix-Group-Ltd',
+ '0c78' => 'Detto-Corp.',
+ '0c7a' => 'Wing-Span-Enterprise-Co.-Ltd',
+ '0c86' => 'NDA-Technologies-Inc.',
+ '0c88' => 'Kyocera-Wireless-Corp.',
+ '0c89' => 'Honda-Tsushin-Kogyo-Co.-Ltd',
+ '0c8a' => 'Pathway-Connectivity-Inc.',
+ '0c8b' => 'Wavefly-Corp.',
+ '0c8c' => 'Coactive-Networks',
+ '0c8d' => 'Tempo',
+ '0c8e' => 'Cesscom-Co.-Ltd',
+ '0c8f' => 'Applied-Microsystems',
+ '0c98' => 'Berkshire-Products-Inc.',
+ '0c99' => 'Innochips-Co.-Ltd',
+ '0c9a' => 'Hanwool-Robotics-Corp.',
+ '0c9b' => 'Jobin-Yvon-Inc.',
+ '0c9d' => 'SemTek',
+ '0ca2' => 'Zyfer',
+ '0ca3' => 'Sega-Corp.',
+ '0ca4' => 'ST-T-Instrument-Corp.',
+ '0ca5' => 'BAE-Systems-Canada-Inc.',
+ '0ca6' => 'Castles-Technology-Co.-Ltd',
+ '0cad' => 'Motorola-CGISS',
+ '0cae' => 'Ascom-Business-Systems-Ltd',
+ '0caf' => 'Buslink',
+ '0cb0' => 'Flying-Pig-Systems',
+ '0cb1' => 'Innovonics-Inc.',
+ '0cb6' => 'Celestix-Networks-Pte.-Ltd',
+ '0cb7' => 'Singatron-Enterprise-Co.-Ltd',
+ '0cb8' => 'Opticis-Co.-Ltd',
+ '0cbc' => 'Palmax-Technology-Co.-Ltd',
+ '0cbe' => 'Keryx-Technologies-Inc.',
+ '0cc0' => 'Kuon-Yi-Industrial-Corp.',
+ '0cc1' => 'Given-Imaging-Ltd',
+ '0cc2' => 'Timex-Corp.',
+ '0cc3' => 'Rimage-Corp.',
+ '0cc4' => 'emsys-GmbH',
+ '0cc5' => 'Sendo',
+ '0cc6' => 'Intermagic-Corp.',
+ '0cc7' => 'Kontron-Medical-AG',
+ '0cc8' => 'Technotools-Corp.',
+ '0cc9' => 'BroadMAX-Technologies-Inc.',
+ '0cca' => 'Amphenol',
+ '0ccb' => 'SKNet-Co.-Ltd',
+ '0ccc' => 'Domex-Technology-Corp.',
+ '0ccd' => 'TerraTec-Electronic-GmbH',
+ '0cd4' => 'Bang-Olufsen',
+ '0cd5' => 'LabJack-Corporation',
+ '0cd7' => 'NewChip-S.r.l.',
+ '0cd8' => 'JS-Digitech-Inc.',
+ '0cd9' => 'Hitachi-Shin-Din-Cable-Ltd',
+ '0cde' => 'Z-Com',
+ '0ce9' => 'pico-Technology',
+ '0cf1' => 'e-Conn-Electronic-Co.-Ltd',
+ '0cf2' => 'ENE-Technology-Inc.',
+ '0cf3' => 'Atheros',
+ '0cf4' => 'Fomtex-Corp.',
+ '0cf5' => 'Cellink-Co.-Ltd',
+ '0cf6' => 'Compucable-Corp.',
+ '0cf7' => 'ishoni-Networks',
+ '0cf8' => 'Clarisys-Inc.',
+ '0cfa' => 'Inviso-Inc.',
+ '0cfc' => 'Minolta-QMS-Inc.',
+ '0cff' => 'SAFA-MEDIA-Co.-Ltd.',
+ '0d08' => 'UTStarcom',
+ '0d0b' => 'Contemporary-Controls',
+ '0d0c' => 'Astron-Electronics-Co.-Ltd',
+ '0d0d' => 'MKNet-Corp.',
+ '0d0e' => 'Hybrid-Networks-Inc.',
+ '0d0f' => 'Feng-Shin-Cable-Co.-Ltd',
+ '0d10' => 'Elastic-Networks',
+ '0d11' => 'Maspro-Denkoh-Corp.',
+ '0d12' => 'Hansol-Electronics-Inc.',
+ '0d13' => 'BMF-Corp.',
+ '0d14' => 'Array-Comm-Inc.',
+ '0d15' => 'OnStream-b.v.',
+ '0d17' => 'NALTEC-Inc.',
+ '0d18' => 'coaXmedia',
+ '0d28' => 'NXP',
+ '0d33' => 'AirSpeak-Inc.',
+ '0d34' => 'Rearden-Steel-Technologies',
+ '0d35' => 'Dah-Kun-Co.-Ltd',
+ '0d3a' => 'Posiflex-Technologies-Inc.',
+ '0d3c' => 'Sri-Cable-Technology-Ltd',
+ '0d3d' => 'Tangtop-Technology-Co.-Ltd',
+ '0d3e' => 'Fitcom-inc.',
+ '0d3f' => 'MTS-Systems-Corp.',
+ '0d40' => 'Ascor-Inc.',
+ '0d42' => 'Full-Der-Co.-Ltd',
+ '0d46' => 'Kobil-Systems-GmbH',
+ '0d49' => 'Maxtor',
+ '0d4a' => 'NF-Corp.',
+ '0d4b' => 'Grape-Systems-Inc.',
+ '0d4c' => 'Tedas-AG',
+ '0d4d' => 'Coherent-Inc.',
+ '0d4e' => 'Agere-Systems-Netherland-BV',
+ '0d4f' => 'EADS-Airbus-France',
+ '0d50' => 'Cleware-GmbH',
+ '0d51' => 'Volex-Asia-Pte.-Ltd',
+ '0d53' => 'HMI-Co.-Ltd',
+ '0d54' => 'Holon-Corp.',
+ '0d55' => 'ASKA-Technologies-Inc.',
+ '0d56' => 'AVLAB-Technology-Inc.',
+ '0d57' => 'Solomon-Microtech-Ltd',
+ '0d5c' => 'SMC-Networks-Inc.',
+ '0d5e' => 'Myacom-Ltd',
+ '0d5f' => 'CSI-Inc.',
+ '0d60' => 'IVL-Technologies-Ltd',
+ '0d62' => 'Darfon-Electronics-Corp.',
+ '0d63' => 'Fritz-Gegauf-AG',
+ '0d64' => 'DXG-Technology-Corp.',
+ '0d65' => 'KMJP-Co.-Ltd',
+ '0d66' => 'TMT',
+ '0d67' => 'Advanet-Inc.',
+ '0d69' => 'NSI',
+ '0d6a' => 'Megapower-International-Corp.',
+ '0d6b' => 'And-Or-Logic',
+ '0d70' => 'Try-Computer-Co.-Ltd',
+ '0d71' => 'Hirakawa-Hewtech-Corp.',
+ '0d72' => 'Winmate-Communication-Inc.',
+ '0d73' => 'Hits-Communications-Inc.',
+ '0d76' => 'MFP-Korea-Inc.',
+ '0d77' => 'Power-Sentry-Newpoint',
+ '0d78' => 'Japan-Distributor-Corp.',
+ '0d7a' => 'MARX-Datentechnik-GmbH',
+ '0d7b' => 'Wellco-Technology-Co.-Ltd',
+ '0d7d' => 'Phison-Electronics-Corp.',
+ '0d7f' => 'Essential-Reality-LLC',
+ '0d81' => 'TechnoVision',
+ '0d83' => 'Think-Outside-Inc.',
+ '0d87' => 'Dolby-Laboratories-Inc.',
+ '0d89' => 'Oz-Software',
+ '0d8a' => 'King-Jim-Co.-Ltd',
+ '0d8b' => 'Ascom-Telecommunications-Ltd',
+ '0d8c' => 'C-Media-Electronics-Inc.',
+ '0d8e' => 'Global-Sun-Technology-Inc.',
+ '0d8f' => 'Pitney-Bowes',
+ '0d90' => 'Sure-Fire-Electrical-Corp.',
+ '0d96' => 'Skanhex-Technology-Inc.',
+ '0d98' => 'Mars-Semiconductor-Corp.',
+ '0d99' => 'Trazer-Technologies-Inc.',
+ '0d9a' => 'RTX-Telecom-AS',
+ '0d9b' => 'Tat-Shing-Electrical-Co.',
+ '0d9d' => 'Sanwa-Supply-Inc.',
+ '0d9e' => 'Avaya',
+ '0d9f' => 'Powercom-Co.-Ltd',
+ '0da0' => 'Danger-Research',
+ '0da4' => 'Polar-Electro-OY',
+ '0da7' => 'IOGear-Inc.',
+ '0da8' => 'softDSP-Co.-Ltd',
+ '0dab' => 'Cubig-Group',
+ '0dad' => 'Westover-Scientific',
+ '0db0' => 'Micro-Star-International',
+ '0db1' => 'Wen-Te-Electronics-Co.-Ltd',
+ '0db3' => 'Tekram-Technology-Co.-Ltd',
+ '0db7' => 'ELCON-Systemtechnik',
+ '0dbc' => 'A-D-Medical',
+ '0dbf' => 'Quik-Tech-Solutions',
+ '0dc1' => 'Tamagawa-Seiki-Co.-Ltd',
+ '0dc4' => 'Macpower-Peripherals-Ltd',
+ '0dc5' => 'SDK-Co.-Ltd',
+ '0dc7' => 'First-Cable-Line-Inc.',
+ '0dcd' => 'NetworkFab-Corp.',
+ '0dd0' => 'Access-Solutions',
+ '0dd1' => 'Contek-Electronics-Co.-Ltd',
+ '0dd3' => 'MediaQ',
+ '0dd4' => 'Custom-Engineering-SPA',
+ '0dd5' => 'California-Micro-Devices',
+ '0dd7' => 'Kocom-Co.-Ltd',
+ '0dd8' => 'Netac-Technology-Co.-Ltd',
+ '0dd9' => 'HighSpeed-Surfing',
+ '0ddb' => 'Tamarack-Inc.',
+ '0ddd' => 'Datelink-Technology-Co.-Ltd',
+ '0dde' => 'Ubicom-Inc.',
+ '0de0' => 'BD-Consumer-Healthcare',
+ '0ded' => 'Novasonics',
+ '0dee' => 'Lifetime-Memory-Products',
+ '0def' => 'Full-Rise-Electronic-Co.-Ltd',
+ '0df4' => 'NET-SYS',
+ '0df6' => 'Sitecom-Europe-B.V.',
+ '0e03' => 'Nippon-Systemware-Co.-Ltd',
+ '0e08' => 'Winbest-Technology-Co.-Ltd',
+ '0e0b' => 'Amigo-Technology-Inc.',
+ '0e0c' => 'Gesytec',
+ '0e0f' => 'VMware-Inc.',
+ '0e16' => 'JMTek-LLC',
+ '0e17' => 'Walex-Electronic-Ltd',
+ '0e1b' => 'Crewave',
+ '0e20' => 'Pegasus-Technologies-Ltd.',
+ '0e21' => 'Cowon-Systems-Inc.',
+ '0e22' => 'Symbian-Ltd.',
+ '0e25' => 'VinChip-Systems-Inc.',
+ '0e26' => 'J-Phone-East-Co.-Ltd',
+ '0e30' => 'HeartMath-LLC',
+ '0e34' => 'Micro-Computer-Control-Corp.',
+ '0e35' => '3Pea-Technologies-Inc.',
+ '0e36' => 'TiePie-engineering',
+ '0e38' => 'Stratitec-Inc.',
+ '0e3a' => 'Neostar-Technology-Co.-Ltd',
+ '0e3b' => 'Mansella-Ltd',
+ '0e41' => 'Line6-Inc.',
+ '0e48' => 'Julia-Corp.-Ltd',
+ '0e4c' => 'Radica-Games-Ltd',
+ '0e55' => 'Speed-Dragon-Multimedia-Ltd',
+ '0e5a' => 'Active-Co.-Ltd',
+ '0e5d' => 'Neltron-Industrial-Co.-Ltd',
+ '0e5e' => 'Conwise-Technology-Co.-Ltd.',
+ '0e66' => 'Hawking-Technologies',
+ '0e67' => 'Fossil-Inc.',
+ '0e6a' => 'Megawin-Technology-Co.-Ltd',
+ '0e6f' => 'Logic3',
+ '0e72' => 'Hsi-Chin-Electronics-Co.-Ltd',
+ '0e75' => 'TVS-Electronics-Ltd',
+ '0e79' => 'Archos-Inc.',
+ '0e7b' => 'On-Tech-Industry-Co.-Ltd',
+ '0e7e' => 'Gmate-Inc.',
+ '0e83' => 'Shin-An-Wire---Cable-Co.',
+ '0e8d' => 'MediaTek-Inc.',
+ '0e8f' => 'GreenAsia-Inc.',
+ '0e90' => 'WiebeTech-LLC',
+ '0e91' => 'VTech-Engineering-Canada-Ltd',
+ '0e92' => 'Cs-Glory-Enterprise-Co.-Ltd',
+ '0e93' => 'eM-Technics-Co.-Ltd',
+ '0e95' => 'Future-Technology-Co.-Ltd',
+ '0e96' => 'Aplux-Communications-Ltd',
+ '0e97' => 'Fingerworks-Inc.',
+ '0e99' => 'Parallel-Dice-Co.-Ltd',
+ '0e9a' => 'TA-HSING-Industries-Ltd',
+ '0e9b' => 'ADTEC-Corp.',
+ '0e9c' => 'Streamzap-Inc.',
+ '0e9f' => 'Tamura-Corp.',
+ '0ea0' => 'Ours-Technology-Inc.',
+ '0ea6' => 'Nihon-Computer-Co.-Ltd',
+ '0ea7' => 'MSL-Enterprises-Corp.',
+ '0ea8' => 'CenDyne-Inc.',
+ '0ead' => 'Humax-Co.-Ltd',
+ '0eb0' => 'NovaTech',
+ '0eb1' => 'WIS-Technologies-Inc.',
+ '0eb2' => 'Y-S-Electronic-Co.-Ltd',
+ '0eb3' => 'Saint-Technology-Corp.',
+ '0eb7' => 'Endor-AG',
+ '0ebe' => 'VWeb-Corp.',
+ '0ec1' => 'Abit-Computer-Corp.',
+ '0ec2' => 'Sweetray-Industrial-Ltd',
+ '0ec3' => 'Axell-Co.-Ltd',
+ '0ec4' => 'Ballracing-Developments-Ltd',
+ '0ec6' => 'InnoVISION-Multimedia-Ltd',
+ '0ec7' => 'Theta-Link-Corp.',
+ '0ecd' => 'Lite-On-IT-Corp.',
+ '0ece' => 'TaiSol-Electronics-Co.-Ltd',
+ '0ecf' => 'Phogenix-Imaging-LLC',
+ '0ed1' => 'WinMaxGroup',
+ '0ed2' => 'Kyoto-Micro-Computer-Co.-Ltd',
+ '0ed3' => 'Wing-Tech-Enterprise-Co.-Ltd',
+ '0ed5' => 'Fiberbyte',
+ '0eda' => 'Noriake-Itron-Corp.',
+ '0edf' => 'e-MDT-Co.-Ltd',
+ '0ee0' => 'Shima-Seiki-Mfg.-Ltd',
+ '0ee1' => 'Sarotech-Co.-Ltd',
+ '0ee2' => 'AMI-Semiconductor-Inc.',
+ '0ee3' => 'ComTrue-Technology-Corp.',
+ '0ee4' => 'Sunrich-Technology-Ltd',
+ '0eef' => 'D-WAV-Scientific-Co.-Ltd',
+ '0ef0' => 'Hitachi-Cable-Ltd',
+ '0ef1' => 'Aichi-Micro-Intelligent-Corp.',
+ '0ef2' => 'I-O-Magic-Corp.',
+ '0ef3' => 'Lynn-Products-Inc.',
+ '0ef4' => 'DSI-Datotech',
+ '0ef5' => 'PointChips',
+ '0ef6' => 'Yield-Microelectronics-Corp.',
+ '0ef7' => 'SM-Tech-Co.-Ltd-Tulip',
+ '0efd' => 'Oasis-Semiconductor',
+ '0efe' => 'Wem-Technology-Inc.',
+ '0f0c' => 'CAS-Corp.',
+ '0f0d' => 'Hori-Co.-Ltd',
+ '0f0e' => 'Energy-Full-Corp.',
+ '0f11' => 'LD-Didactic-GmbH',
+ '0f12' => 'Mars-Engineering-Corp.',
+ '0f13' => 'Acetek-Technology-Co.-Ltd',
+ '0f18' => 'Finger-Lakes-Instrumentation',
+ '0f19' => 'Oracom-Co.-Ltd',
+ '0f1b' => 'Onset-Computer-Corp.',
+ '0f1c' => 'Funai-Electric-Co.-Ltd',
+ '0f1d' => 'Iwill-Corp.',
+ '0f21' => 'IOI-Technology-Corp.',
+ '0f22' => 'Senior-Industries-Inc.',
+ '0f24' => 'Flex-P-Industries-Snd.-Bhd.',
+ '0f2d' => 'ViPower-Inc.',
+ '0f2f' => 'Priva-Design-Services',
+ '0f30' => 'Jess-Technology-Co.-Ltd',
+ '0f31' => 'Chrysalis-Development',
+ '0f37' => 'Kokuyo-Co.-Ltd',
+ '0f38' => 'Nien-Yi-Industrial-Corp.',
+ '0f3d' => 'Airprime-Incorporated',
+ '0f41' => 'RDC-Semiconductor-Co.-Ltd',
+ '0f44' => 'Polhemus',
+ '0f4b' => 'St.-John-Technology-Co.-Ltd',
+ '0f4c' => 'WorldWide-Cable-Opto-Corp.',
+ '0f4d' => 'Microtune-Inc.',
+ '0f4e' => 'Freedom-Scientific',
+ '0f52' => 'Wing-Key-Electrical-Co.-Ltd',
+ '0f55' => 'AmbiCom-Inc.',
+ '0f5c' => 'Prairiecomm-Inc.',
+ '0f5d' => 'NewAge-International-LLC',
+ '0f5f' => 'Key-Technology-Corp.',
+ '0f60' => 'NTK-Ltd',
+ '0f61' => 'Varian-Inc.',
+ '0f62' => 'Acrox-Technologies-Co.-Ltd',
+ '0f63' => 'LeapFrog-Enterprises',
+ '0f68' => 'Kobe-Steel-Ltd',
+ '0f69' => 'Dionex-Corp.',
+ '0f6a' => 'Vibren-Technologies-Inc.',
+ '0f6e' => 'INTELLIGENT-SYSTEMS',
+ '0f73' => 'DFI',
+ '0f7c' => 'DQ-Technology-Inc.',
+ '0f7d' => 'NetBotz-Inc.',
+ '0f7e' => 'Fluke-Corp.',
+ '0f88' => 'VTech-Holdings-Ltd',
+ '0f8b' => 'Yazaki-Corp.',
+ '0f8d' => 'Uniwill-Computer-Corp.',
+ '0f8e' => 'Kingnet-Technology-Co.-Ltd',
+ '0f8f' => 'Soma-Networks',
+ '0f97' => 'CviLux-Corp.',
+ '0f98' => 'CyberBank-Corp.',
+ '0f9c' => 'Hyun-Won-Inc.',
+ '0f9e' => 'Lucent-Technologies',
+ '0fa3' => 'Starconn-Electronic-Co.-Ltd',
+ '0fa4' => 'ATL-Technology',
+ '0fa5' => 'Sotec-Co.-Ltd',
+ '0fa7' => 'Epox-Computer-Co.-Ltd',
+ '0fa8' => 'Logic-Controls-Inc.',
+ '0faf' => 'Winpoint-Electronic-Corp.',
+ '0fb1' => 'Inclose-Design-Inc.',
+ '0fb8' => 'Wistron-Corp.',
+ '0fb9' => 'AACom-Corp.',
+ '0fbb' => 'Bitwise-Systems-Inc.',
+ '0fc1' => 'Mitac-Internatinal-Corp.',
+ '0fc5' => 'Delcom-Engineering',
+ '0fc6' => 'Dataplus-Supplies-Inc.',
+ '0fca' => 'Research-In-Motion-Ltd.',
+ '0fcf' => 'Dynastream-Innovations-Inc.',
+ '0fd0' => 'Tulip-Computers-B.V.',
+ '0fd1' => 'Giant-Electronics-Ltd.',
+ '0fd4' => 'Tenovis-GmbH---Co.-KG',
+ '0fdc' => 'Micro-Plus',
+ '0fe4' => 'IN-Tech-Electronics-Ltd',
+ '0fe5' => 'Greenconn-U.S.A.-Inc.',
+ '0fe9' => 'DVICO',
+ '0fea' => 'United-Computer-Accessories',
+ '0feb' => 'CRS-Electronic-Co.-Ltd',
+ '0fec' => 'UMC-Electronics-Co.-Ltd',
+ '0fed' => 'Access-Co.-Ltd',
+ '0fee' => 'Xsido-Corp.',
+ '0fef' => 'MJ-Research-Inc.',
+ '0ff6' => 'Core-Valley-Co.-Ltd',
+ '0fff' => 'Aopen-Inc.',
+ '1000' => 'Speed-Tech-Corp.',
+ '1003' => 'Sigma-Corp.',
+ '1004' => 'LG-Electronics-Inc.',
+ '1005' => 'Apacer-Technology-Inc.',
+ '1006' => 'iRiver-Ltd.',
+ '1009' => 'Emuzed-Inc.',
+ '100a' => 'AV-Chaseway-Ltd',
+ '100b' => 'Chou-Chin-Industrial-Co.-Ltd',
+ '100d' => 'Netopia-Inc.',
+ '1010' => 'Fukuda-Denshi-Co.-Ltd',
+ '1011' => 'Mobile-Media-Tech.',
+ '1014' => 'Densitron-Technologies-PLC',
+ '1015' => 'Softronics-Pty.-Ltd',
+ '1020' => 'Labtec',
+ '1022' => 'Shinko-Shoji-Co.-Ltd',
+ '1025' => 'Hyper-Paltek',
+ '1026' => 'Newly-Corp.',
+ '1027' => 'Time-Domain',
+ '1028' => 'Inovys-Corp.',
+ '1029' => 'Atlantic-Coast-Telesys',
+ '102a' => 'Ramos-Technology-Co.-Ltd',
+ '102b' => 'Infotronic-America-Inc.',
+ '102c' => 'Etoms-Electronics-Corp.',
+ '102d' => 'Winic-Corp.',
+ '1031' => 'Comax-Technology-Inc.',
+ '1032' => 'C-One-Technology-Corp.',
+ '1033' => 'Nucam-Corp.',
+ '1038' => 'Ideazon-Inc.',
+ '1039' => 'Silicon-Integrated-Systems',
+ '103d' => 'Stanton',
+ '1043' => 'iCreate-Technologies-Corp.',
+ '1044' => 'Chu-Yuen-Enterprise-Co.-Ltd',
+ '1048' => 'Targus-Group-International',
+ '104b' => 'Mylex---Buslogic',
+ '104c' => 'AMCO-TEC-International-Inc.',
+ '104d' => 'Newport-Corporation',
+ '104f' => 'WB-Electronics',
+ '1050' => 'Yubico.com',
+ '1053' => 'Immanuel-Electronics-Co.-Ltd',
+ '1054' => 'BMS-International-Beheer-N.V.',
+ '1056' => 'Hsin-Chen-Ent-Co.-Ltd',
+ '1057' => 'ON-Semiconductor',
+ '1059' => 'Giesecke---Devrient-GmbH',
+ '105d' => 'Delkin-Devices-Inc.',
+ '1060' => 'Easthome-Industrial-Co.-Ltd',
+ '1065' => 'CCYU-Technology',
+ '106a' => 'Loyal-Legend-Ltd',
+ '106c' => 'Curitel-Communications-Inc.',
+ '106d' => 'San-Chieh-Manufacturing-Ltd',
+ '106e' => 'ConectL',
+ '106f' => 'Money-Controls',
+ '1076' => 'GCT-Semiconductor-Inc.',
+ '107b' => 'Gateway-Inc.',
+ '107d' => 'Arlec-Australia-Ltd',
+ '107e' => 'Midoriya-Electric-Co.-Ltd',
+ '107f' => 'KidzMouse-Inc.',
+ '1082' => 'Shin-Etsukaken-Co.-Ltd',
+ '1083' => 'Canon-Electronics-Inc.',
+ '1084' => 'Pantech-Co.-Ltd',
+ '108a' => 'Chloride-Power-Protection',
+ '108b' => 'Grand-tek-Technology-Co.-Ltd',
+ '108c' => 'Robert-Bosch-GmbH',
+ '108e' => 'Lotes-Co.-Ltd.',
+ '1099' => 'Surface-Optics-Corp.',
+ '109a' => 'DATASOFT-Systems-GmbH',
+ '109f' => 'eSOL-Co.-Ltd',
+ '10a0' => 'Hirotech-Inc.',
+ '10a3' => 'Mitsubishi-Materials-Corp.',
+ '10a9' => 'SK-Teletech-Co.-Ltd',
+ '10aa' => 'Cables-To-Go',
+ '10ab' => 'USI-Co.-Ltd',
+ '10ac' => 'Honeywell-Inc.',
+ '10ae' => 'Princeton-Technology-Corp.',
+ '10af' => 'Liebert-Corp.',
+ '10b5' => 'Comodo-PLX-',
+ '10b8' => 'DiBcom',
+ '10bb' => 'TM-Technology-Inc.',
+ '10bc' => 'Dinging-Technology-Co.-Ltd',
+ '10bd' => 'TMT-Technology-Inc.',
+ '10bf' => 'SmartHome',
+ '10c5' => 'Sanei-Electric-Inc.',
+ '10c6' => 'Intec-Inc.',
+ '10cb' => 'Eratech',
+ '10cc' => 'GBM-Connector-Co.-Ltd',
+ '10cd' => 'Kycon-Inc.',
+ '10ce' => 'Silicon-Labs',
+ '10cf' => 'Velleman-Components-Inc.',
+ '10d1' => 'Hottinger-Baldwin-Measurement',
+ '10d4' => 'Man-Boon-Manufactory-Ltd',
+ '10d5' => 'Uni-Class-Technology-Co.-Ltd',
+ '10de' => 'Authenex-Inc.',
+ '10df' => 'In-Win-Development-Inc.',
+ '10e0' => 'Post-Op-Video-Inc.',
+ '10e1' => 'CablePlus-Ltd',
+ '10e2' => 'Nada-Electronics-Ltd',
+ '10ec' => 'Vast-Technologies-Inc.',
+ '10f0' => 'Nexio-Co.-Ltd',
+ '10f1' => 'Importek',
+ '10f5' => 'Turtle-Beach',
+ '10fb' => 'Pictos-Technologies-Inc.',
+ '10fd' => 'Anubis-Electronics-Ltd',
+ '1100' => 'VirTouch-Ltd',
+ '1101' => 'EasyPass-Industrial-Co.-Ltd',
+ '1108' => 'Brightcom-Technologies-Ltd',
+ '110a' => 'Moxa-Technologies-Co.-Ltd.',
+ '1111' => 'Pandora-International-Ltd.',
+ '1112' => 'YM-ELECTRIC-CO.-Ltd',
+ '1113' => 'Medion-AG',
+ '111e' => 'VSO-Electric-Co.-Ltd',
+ '112a' => 'RedRat',
+ '112f' => 'Cellon-International-Inc.',
+ '1130' => 'Tenx-Technology-Inc.',
+ '1136' => 'CTS-Electronincs',
+ '113c' => 'Arin-Tech-Co.-Ltd',
+ '113d' => 'Mapower-Electronics-Co.-Ltd',
+ '1141' => 'V-One-Multimedia-Pte.-Ltd',
+ '1142' => 'CyberScan-Technologies-Inc.',
+ '1145' => 'Japan-Radio-Company',
+ '114b' => 'Sphairon-Access-Systems-GmbH',
+ '114f' => 'Wavecom',
+ '115b' => 'Salix-Technology-Co.-Ltd.',
+ '1162' => 'Secugen-Corp.',
+ '1163' => 'DeLorme-Publishing-Inc.',
+ '1165' => 'Telson-Electronics-Co.-Ltd',
+ '1167' => 'Salient-Systems-Corp.',
+ '1168' => 'BizConn-International-Corp.',
+ '116e' => 'Gigastorage-Corp.',
+ '116f' => 'Silicon-10-Technology-Corp.',
+ '1175' => 'Shengyih-Steel-Mold-Co.-Ltd',
+ '117d' => 'Santa-Electronic-Inc.',
+ '117e' => 'JNC-Inc.',
+ '1182' => 'Venture-Corp.-Ltd',
+ '1184' => 'Kyocera-Elco-Corp.',
+ '1188' => 'Bloomberg-L.P.',
+ '118f' => 'You-Yang-Technology-Co.-Ltd',
+ '1190' => 'Tripace',
+ '1196' => 'Yankee-Robotics-LLC',
+ '1197' => 'Technoimagia-Co.-Ltd',
+ '1198' => 'StarShine-Technology-Corp.',
+ '1199' => 'Sierra-Wireless-Inc.',
+ '119a' => 'ZHAN-QI-Technology-Co.-Ltd',
+ '119b' => 'ruwido-austria-GmbH',
+ '11a0' => 'Chipcon-AS',
+ '11a3' => 'Technovas-Co.-Ltd',
+ '11aa' => 'GlobalMedia-Group-LLC',
+ '11ab' => 'Exito-Electronics-Co.-Ltd',
+ '11b0' => 'ATECH-FLASH-TECHNOLOGY',
+ '11c5' => 'Inmax',
+ '11db' => 'Topfield-Co.-Ltd.',
+ '11e6' => 'K.I.-Technology-Co.-Ltd.',
+ '11f5' => 'Siemens-AG',
+ '11f6' => 'Prolific',
+ '11f7' => 'Alcatel--',
+ '1209' => 'InterBiometrics',
+ '120e' => 'Hudson-Soft-Co.-Ltd',
+ '120f' => 'Magellan',
+ '1210' => 'DigiTech',
+ '121e' => 'Jungsoft-Co.-Ltd',
+ '1233' => 'Denver-Electronics',
+ '1234' => 'Unknown',
+ '1235' => 'Novation-EMS',
+ '1241' => 'Belkin',
+ '124a' => 'AirVast',
+ '124b' => 'Nyko-Honey-Bee',
+ '125c' => 'Apogee-Inc.',
+ '125f' => 'A-DATA-Technology-Co.-Ltd.',
+ '1260' => 'Standard-Microsystems-Corp.',
+ '1264' => 'Covidien-Energy-based-Devices',
+ '1266' => 'Pirelli-Broadband-Solutions',
+ '1267' => 'Logic3---SpectraVideo-plc',
+ '126c' => 'Aristocrat-Technologies',
+ '126d' => 'Bel-Stewart',
+ '126e' => 'Strobe-Data-Inc.',
+ '126f' => 'TwinMOS',
+ '1274' => 'Ensoniq',
+ '1283' => 'zebris-Medical-GmbH',
+ '1286' => 'Marvell-Semiconductor-Inc.',
+ '1292' => 'Innomedia',
+ '1293' => 'Belkin-Components-hex',
+ '1294' => 'RISO-KAGAKU-CORP.',
+ '129b' => 'CyberTAN-Technology',
+ '12a7' => 'Trendchip-Technologies-Corp.',
+ '12c4' => 'Autocue-Group-Ltd',
+ '12d1' => 'Huawei-Technologies-Co.-Ltd.',
+ '12d6' => 'EMS-Dr.-Thomas-Wuensche',
+ '12d7' => 'BETTER-WIRE-FACTORY-CO.-LTD.',
+ '12e6' => 'Waldorf-Music-GmbH',
+ '12ef' => 'Tapwave-Inc.',
+ '12f7' => 'Memorex-Products-Inc.',
+ '12fd' => 'AIN-Comm.-Technology-Co.-Ltd',
+ '12ff' => 'Fascinating-Electronics-Inc.',
+ '1307' => 'Transcend-Information-Inc.',
+ '1308' => 'Shuttle-Inc.',
+ '1310' => 'Roper',
+ '1312' => 'ICS-Electronics',
+ '131d' => 'Natural-Point',
+ '132a' => 'Envara-Inc.',
+ '132b' => 'KONICA-MINOLTA',
+ '1342' => 'Mobility',
+ '1345' => 'Sino-Lite-Technology-Corp.',
+ '1347' => 'Moravian-Instruments',
+ '134c' => 'PanJit-International-Inc.',
+ '1357' => 'P-E-Microcomputer-Systems',
+ '1366' => 'SEGGER',
+ '136b' => 'STEC',
+ '1370' => 'Swissbit',
+ '1371' => 'CNet-Technology-Inc.',
+ '1376' => 'Vimtron-Electronics-Co.-Ltd.',
+ '137b' => 'SCAPS-GmbH',
+ '1385' => 'Netgear',
+ '138a' => 'Validity-Sensors-Inc.',
+ '138e' => 'Jungo-LTD',
+ '1390' => 'TOMTOM-B.V.',
+ '1391' => 'IdealTEK-Inc.',
+ '1395' => 'Sennheiser-Communications',
+ '1397' => 'BEHRINGER-International-GmbH',
+ '1398' => 'Q-tec',
+ '13ad' => 'Baltech',
+ '13b0' => 'PerkinElmer-Optoelectronics',
+ '13b1' => 'Linksys',
+ '13b2' => 'Alesis',
+ '13b3' => 'Nippon-Dics-Co.-Ltd.',
+ '13ba' => 'Unknown',
+ '13be' => 'Ricoh-Printing-Systems-Ltd.',
+ '13cf' => 'Wisair-Ltd.',
+ '13d0' => 'Techsan-Electronics-Co.-Ltd.',
+ '13d2' => 'Shark-Multimedia',
+ '13d3' => 'IMC-Networks',
+ '13dc' => 'ALEREON-INC.',
+ '13dd' => 'i.Tech-Dynamic-Limited',
+ '13e5' => 'Rane',
+ '13e6' => 'TechnoScope-Co.-Ltd.',
+ '13ec' => 'Zydacron',
+ '13fd' => 'Initio-Corporation',
+ '1400' => 'Axxion-Group-Corp.',
+ '1402' => 'Bowe-Bell---Howell',
+ '1403' => 'Sitronix',
+ '140e' => 'Telechips-Inc.',
+ '1410' => 'Novatel-Wireless',
+ '1419' => 'ABILITY-ENTERPRISE-CO.-LTD.',
+ '142a' => 'Thales-E-Transactions',
+ '142b' => 'Arbiter-Systems-Inc.',
+ '1430' => 'RedOctane',
+ '1431' => 'Pertech-Resources-Inc.',
+ '1435' => 'Wistron-NeWeb',
+ '1436' => 'Denali-Software-Inc.',
+ '143c' => 'Altek-Corporation',
+ '1443' => 'Digilent',
+ '1453' => 'Radio-Shack',
+ '145f' => 'Trust',
+ '1460' => 'Tatung-Co.',
+ '1461' => 'Staccato-Communications',
+ '1462' => 'Micro-Star-International',
+ '1472' => 'Huawei-3Com',
+ '147e' => 'Upek',
+ '147f' => 'Hama-GmbH---Co.-KG',
+ '1482' => 'Vaillant',
+ '1484' => 'Elsa-AG-hex',
+ '1485' => 'Silicom',
+ '1487' => 'DSP-Group-Ltd.',
+ '148e' => 'EVATRONIX-SA',
+ '148f' => 'Ralink',
+ '1497' => 'Panstrong-Company-Ltd.',
+ '1498' => 'Microtek-International-Inc.',
+ '149a' => 'Imagination-Technologies',
+ '14aa' => 'WideView-Technology-Inc.',
+ '14ad' => 'CTK-Corporation',
+ '14ae' => 'Printronix-Inc.',
+ '14af' => 'ATP-Electronics-Inc.',
+ '14b0' => 'StarTech.com-Ltd.',
+ '14b2' => 'Ralink',
+ '14c0' => 'Rockwell-Automation-Inc.',
+ '14c2' => 'Gemlight-Computer-Ltd',
+ '14cd' => 'Super-Top',
+ '14d8' => 'JAMER-INDUSTRIES-CO.-LTD.',
+ '14dd' => 'Raritan-Computer-Inc.',
+ '14e1' => 'Dialogue-Technology-Corp.',
+ '14ea' => 'Planex-Communications',
+ '14ed' => 'Shure-Inc.',
+ '14f7' => 'TechniSat-Digital-GmbH',
+ '1500' => 'Ellisys',
+ '1501' => 'Pine-Tum-Enterprise-Co.-Ltd.',
+ '1513' => 'medMobile',
+ '1514' => 'Actel',
+ '1516' => 'CompUSA',
+ '1518' => 'Cheshire-Engineering-Corp.',
+ '1520' => 'Bitwire-Corp.',
+ '1524' => 'ENE-Technology-Inc',
+ '1527' => 'Silicon-Portals',
+ '1529' => 'UBIQUAM-Co.-Ltd.',
+ '152e' => 'LG-HLDS',
+ '1532' => 'Razer-USA-Ltd',
+ '1546' => 'U-Blox-AG',
+ '154a' => 'Celectronic-GmbH',
+ '154b' => 'PNY',
+ '154d' => 'ConnectCounty-Holdings-Berhad',
+ '1554' => 'Prolink-Microsystems-Corp.',
+ '1557' => 'OQO',
+ '1568' => 'Sunf-Pu-Technology-Co.-Ltd',
+ '156f' => 'Quantum-Corporation',
+ '1570' => 'ALLTOP-TECHNOLOGY-CO.-LTD.',
+ '157b' => 'Ketron-SRL',
+ '157e' => 'TRENDnet',
+ '1582' => 'Fiberline',
+ '1587' => 'SMA-Technologie-AG',
+ '158d' => 'Oakley-Inc.',
+ '15a2' => 'Freescale-Semiconductor-Inc.',
+ '15a4' => 'Afatech-Technologies-Inc.',
+ '15a8' => 'Teams-Power-Limited',
+ '15a9' => 'Gemtek',
+ '15ad' => 'VMware-Inc.',
+ '15ba' => 'Olimex-Ltd.',
+ '15c0' => 'XL-Imaging',
+ '15c2' => 'SoundGraph-Inc.',
+ '15c6' => 'Laboratoires-MXM',
+ '15c8' => 'KTF-Technologies',
+ '15c9' => 'D-Box-Technologies',
+ '15ca' => 'Textech-International-Ltd.',
+ '15d5' => 'Coulomb-Electronics-Ltd.',
+ '15d9' => 'Trust-International-B.V.',
+ '15dc' => 'Hynix-Semiconductor-Inc.',
+ '15e0' => 'Seong-Ji-Industrial-Co.-Ltd.',
+ '15e1' => 'RSA',
+ '15e8' => 'SohoWare',
+ '15e9' => 'Pacific-Digital-Corp.',
+ '15ec' => 'Belcarra-Technologies-Corp.',
+ '15f4' => 'HanfTek',
+ '1604' => 'Tascam',
+ '1606' => 'Umax',
+ '1608' => 'Inside-Out-Networks-hex',
+ '160a' => 'VIA-Technologies-Inc.',
+ '1614' => 'Amoi-Electronics',
+ '1621' => 'Wionics-Research',
+ '1628' => 'Stonestreet-One-Inc.',
+ '162a' => 'Airgo-Networks-Inc.',
+ '162f' => 'WiQuest-Communications-Inc.',
+ '1630' => '2Wire-Inc.',
+ '1631' => 'Good-Way-Technology',
+ '1645' => 'Cross-Match-Technologies-GmbH',
+ '1649' => 'SofTec-Microsystems',
+ '164a' => 'ChipX',
+ '164c' => 'Matrix-Vision-GmbH',
+ '165b' => 'Frontier-Design-Group',
+ '1660' => 'Creatix-Polymedia-GmbH',
+ '1668' => 'Actiontec-Electronics-Inc',
+ '1669' => 'PiKRON-Ltd.-hex',
+ '1679' => 'Total-Phase',
+ '1680' => 'Golden-Bridge-Electech-Inc.',
+ '1681' => 'Prevo-Technologies-Inc.',
+ '1684' => 'Godspeed-Computer-Corp.',
+ '1685' => 'Delock',
+ '1686' => 'ZOOM-Corporation',
+ '1687' => 'Kingmax-Digital-Inc.',
+ '1688' => 'Saab-AB',
+ '168c' => 'Atheros',
+ '1690' => 'Askey-Computer-Corp.-hex',
+ '1697' => 'VTec-Test-Inc.',
+ '16a6' => 'Unigraf',
+ '16ab' => 'Global-Sun-Technology',
+ '16b4' => 'iStation',
+ '16b5' => 'Persentec-Inc.',
+ '16c0' => 'VOTI',
+ '16ca' => 'Wireless-Cables-Inc.',
+ '16cc' => 'silex-technology-Inc.',
+ '16d0' => 'GrauTec',
+ '16d5' => 'AnyDATA-Corporation',
+ '16d6' => 'JABLOCOM-s.r.o.',
+ '16d8' => 'CMOTECH-Co.-Ltd.',
+ '16dc' => 'Wiener-Plein---Baus',
+ '16f0' => 'GN-ReSound-A-S',
+ '16f5' => 'Futurelogic-Inc.',
+ '1706' => 'BlueView-Technologies-Inc.',
+ '1707' => 'ARTIMI',
+ '170b' => 'Swissonic',
+ '170d' => 'Avnera',
+ '1725' => 'Vitesse-Semiconductor',
+ '1726' => 'Axesstel-Inc.',
+ '172f' => 'Waltop-International-Corp.',
+ '1733' => 'Cellink-Technology-Co.-Ltd',
+ '1737' => 'Linksys',
+ '1740' => 'Senao',
+ '1743' => 'General-Atomics',
+ '174c' => 'ASMedia-Technology-Inc.',
+ '174f' => 'Syntek',
+ '1753' => 'GERTEC-Telecomunicacoes-Ltda.',
+ '1759' => 'LucidPort-Technology-Inc.',
+ '1772' => 'System-Level-Solutions-Inc.',
+ '1776' => 'Arowana',
+ '177f' => 'Sweex',
+ '1781' => 'Multiple-Vendors',
+ '1784' => 'TopSeed-Technology-Corp.',
+ '1787' => 'ATI-AIB',
+ '1796' => 'Printrex-Inc.',
+ '1797' => 'JALCO-CO.-LTD.',
+ '1799' => 'Belkin-Components',
+ '17a0' => 'Samson-Technologies-Corp.',
+ '17a4' => 'Concept2',
+ '17a7' => 'MICOMSOFT-CO.-LTD.',
+ '17b3' => 'Grey-Innovation',
+ '17c3' => 'Singim-International-Corp.',
+ '17cc' => 'Native-Instruments',
+ '17d0' => 'Sanford-L.P.',
+ '17d3' => 'Korea-Techtron-Co.-Ltd.',
+ '17e9' => 'Newnham-Research',
+ '17eb' => 'Cornice-Inc.',
+ '17ef' => 'Lenovo',
+ '17f5' => 'K.K.-Rocky',
+ '17f6' => 'Unicomp-Inc',
+ '1809' => 'Advantech',
+ '1822' => 'Twinhan',
+ '1831' => 'Gwo-Jinn-Industries-Co.-Ltd.',
+ '183d' => 'VIVOphone',
+ '1843' => 'Vaisala',
+ '1849' => 'ASRock-Incorporation',
+ '1852' => 'GYROCOM-C-C-Co.-LTD',
+ '1854' => 'Memory-Devices-Ltd.',
+ '185b' => 'Compro',
+ '1862' => 'Teridian-Semiconductor-Corp.',
+ '1870' => 'Nexio-Co.-Ltd',
+ '1871' => 'Aveo-Technology-Corp.',
+ '187c' => 'Alienware-Corporation',
+ '187f' => 'Siano-Mobile-Silicon',
+ '1892' => 'Vast-Technologies-Inc.',
+ '1894' => 'Topseed',
+ '1897' => 'Evertop-Wire-Cable-Co.',
+ '18a5' => 'Verbatim-Ltd',
+ '18b1' => 'Petalynx',
+ '18b4' => 'e3C-Technologies',
+ '18b6' => 'Mikkon-Technology-Limited',
+ '18b7' => 'Zotek-Electronic-Co.-Ltd.',
+ '18c5' => 'amit-Inc',
+ '18cd' => 'Ecamm',
+ '18d1' => 'Google-Inc.',
+ '18d9' => 'Kaba',
+ '18dd' => 'Planon-System-Solutions-Inc.',
+ '18e8' => 'Qcom',
+ '18ea' => 'Matrox-Graphics-Inc.',
+ '18ec' => 'Arkmicro-Technologies-Inc.',
+ '18fd' => 'FineArch-Inc.',
+ '1908' => 'GEMBIRD',
+ '190d' => 'Motorola-GSG',
+ '1914' => 'Alco-Digital-Devices-Limited',
+ '1915' => 'Nordic-Semiconductor-ASA',
+ '1926' => 'NextWindow',
+ '192f' => 'Avago-Technologies-Pte.',
+ '1941' => 'Dream-Link',
+ '1943' => 'Sensoray-Co.-Inc.',
+ '1949' => 'Lab126',
+ '1951' => 'Hyperstone-AG',
+ '1953' => 'Ironkey-Inc.',
+ '1954' => 'Radiient-Technologies',
+ '195d' => 'Itron-Technology-iONE',
+ '196b' => 'Wispro-Technology-Inc.',
+ '1970' => 'Dane-Elec-Corp.-USA',
+ '1977' => 'T-Logic',
+ '1989' => 'Nuconn-Technology-Corp.',
+ '198f' => 'Beceem-Communications-Inc.',
+ '1995' => 'Trillium-Technology-Pty.-Ltd.',
+ '199f' => 'Benica-Corporation',
+ '19a8' => 'Biforst-Technology-Inc.',
+ '19ab' => 'Bodelin',
+ '19af' => 'S-Life',
+ '19b2' => 'Batronix',
+ '19b4' => 'Celestron',
+ '19b5' => 'B---W-Group',
+ '19b6' => 'Infotech-Logistic-LLC',
+ '19b9' => 'Data-Robotics',
+ '19ca' => 'Mindtribe',
+ '19cf' => 'Parrot-SA',
+ '19d2' => 'ONDA-Communication-S.p.A.',
+ '19f7' => 'RODE-Microphones',
+ '19fa' => 'Gampaq-Co.Ltd',
+ '19ff' => 'Dynex',
+ '1a08' => 'Bellwood-International-Inc.',
+ '1a0a' => 'USB-IF-non-workshop',
+ '1a12' => 'KES-Co.-Ltd.',
+ '1a25' => 'Amphenol-East-Asia-Ltd.',
+ '1a2a' => 'Seagate-Branded-Solutions',
+ '1a32' => 'Quanta-Microsystems-Inc.',
+ '1a36' => 'Biwin-Technology-Ltd.',
+ '1a40' => 'TERMINUS-TECHNOLOGY-INC.',
+ '1a41' => 'Action-Electronics-Co.-Ltd.',
+ '1a4a' => 'Silicon-Image',
+ '1a4b' => 'SafeBoot-International-B.V.',
+ '1a61' => 'Abbott-Diabetes-Care',
+ '1a6a' => 'Spansion-Inc.',
+ '1a6d' => 'SamYoung-Electronics-Co.-Ltd',
+ '1a6e' => 'Global-Unichip-Corp.',
+ '1a6f' => 'Sagem-Orga-GmbH',
+ '1a79' => 'Bayer-Health-Care-LLC',
+ '1a7b' => 'Lumberg-Connect-GmbH---Co.-KG',
+ '1a7c' => 'Evoluent',
+ '1a86' => 'QinHeng-Electronics',
+ '1a89' => 'Dynalith-Systems-Co.-Ltd.',
+ '1a8b' => 'SGS-Taiwan-Ltd.',
+ '1a8d' => 'BandRich-Inc.',
+ '1a90' => 'Corsair-Voyager-GT-16GB',
+ '1a98' => 'Leica-Camera-AG',
+ '1aa4' => 'Data-Drive-Thru-Inc.',
+ '1aa5' => 'UBeacon-Technologies-Inc.',
+ '1aa6' => 'eFortune-Technology-Corp.',
+ '1acb' => 'Salcomp-Plc',
+ '1ad1' => 'Desay-Wire-Co.-Ltd.',
+ '1ae7' => 'X-TENSIONS',
+ '1b04' => 'Meilhaus-Electronic-GmBH',
+ '1b20' => 'MStar-Semiconductor-Inc.',
+ '1b22' => 'WiLinx-Corp.',
+ '1b26' => 'Cellex-Power-Products-Inc.',
+ '1b27' => 'Current-Electronics-Inc.',
+ '1b28' => 'NAVIsis-Inc.',
+ '1b32' => 'Ugobe-Life-Forms-Inc.',
+ '1b36' => 'ViXS-Systems-Inc.',
+ '1b3b' => 'iPassion-Technology-Inc.',
+ '1b3f' => 'Generalplus-Technology-Inc.',
+ '1b47' => 'Energizer-Holdings-Inc.',
+ '1b48' => 'Plastron-Precision-Co.-Ltd.',
+ '1b59' => 'K.S.-Terminals-Inc.',
+ '1b72' => 'ATERGI-TECHNOLOGY-CO.-LTD.',
+ '1b73' => 'Fresco-Logic',
+ '1b75' => 'Ovislink-Corp.',
+ '1b76' => 'Legend-Silicon-Corp.',
+ '1b80' => 'Afatech',
+ '1b8c' => 'Altium-Limited',
+ '1b8d' => 'e-MOVE-Technology-Co.-Ltd.',
+ '1b8e' => 'Amlogic-Inc.',
+ '1b8f' => 'MA-LABS-Inc.',
+ '1b96' => 'N-Trig',
+ '1b98' => 'YMax-Communications-Corp.',
+ '1b99' => 'Shenzhen-Yuanchuan-Electronic',
+ '1ba4' => 'Ember-Corporation',
+ '1ba6' => 'Abilis-Systems',
+ '1bad' => 'Harmonix-Music',
+ '1bae' => 'Vuzix-Corporation',
+ '1bbb' => 'T---A-Mobile-Phones',
+ '1bc4' => 'Ford-Motor-Co.',
+ '1bc5' => 'AVIXE-Technology-China-Ltd.',
+ '1bcf' => 'Sunplus-Innovation-Technology-Inc',
+ '1bde' => 'P-TWO-INDUSTRIES-INC.',
+ '1bf0' => 'RealVision-Inc.',
+ '1bf5' => 'Extranet-Systems-Inc.',
+ '1bfd' => 'TouchPack',
+ '1c02' => 'Kreton-Corporation',
+ '1c04' => 'QNAP-System-Inc.',
+ '1c0d' => 'Relm-Wireless',
+ '1c10' => 'Lanterra-Industrial-Co.-Ltd.',
+ '1c13' => 'ALECTRONIC-LIMITED',
+ '1c1a' => 'Datel-Electronics-Ltd.',
+ '1c1b' => 'Volkswagen-of-America-Inc.',
+ '1c1f' => 'Goldvish-S.A.',
+ '1c21' => 'ADDMM-LLC',
+ '1c27' => 'HuiYang-D---S-Cable-Co.-Ltd.',
+ '1c31' => 'LS-Cable-Ltd.',
+ '1c34' => 'SpringCard',
+ '1c37' => 'Authorizer-Technologies-Inc.',
+ '1c3d' => 'NONIN-MEDICAL-INC.',
+ '1c3e' => 'Wep-Peripherals',
+ '1c49' => 'Cherng-Weei-Technology-Corp.',
+ '1c4f' => 'SiGma-Micro',
+ '1c6c' => 'Skydigital-Inc.',
+ '1c73' => 'AMT',
+ '1c77' => 'Kaetat-Industrial-Co.-Ltd.',
+ '1c78' => 'Datascope-Corp.',
+ '1c79' => 'Unigen-Corporation',
+ '1c7a' => 'LighTuning-Technology-Inc.',
+ '1c87' => '2N-TELEKOMUNIKACE-a.s.',
+ '1c88' => 'Somagic-Inc.',
+ '1c8e' => 'ASTRON-INTERNATIONAL-CORP.',
+ '1c98' => 'ALPINE-ELECTRONICS-INC.',
+ '1ca0' => 'ACCARIO-Inc.',
+ '1cac' => 'Kinstone',
+ '1cb3' => 'Aces-Electronic-Co.-Ltd.',
+ '1cb4' => 'OPEX-CORPORATION',
+ '1cbe' => 'Luminary-Micro-Inc.',
+ '1cc0' => 'PlantSense',
+ '1cca' => 'NextWave-Broadband-Inc.',
+ '1cd4' => 'adp-corporation',
+ '1cd5' => 'Firecomms-Ltd.',
+ '1cdf' => 'WonTen-Technology-Co.-Ltd.',
+ '1ce0' => 'EDIMAX-TECHNOLOGY-CO.-LTD.',
+ '1ce1' => 'Amphenol-KAE',
+ '1cfc' => 'ANDES-TECHNOLOGY-CORPORATION',
+ '1d07' => 'Solid-Motion',
+ '1d14' => 'ALPHA-SAT-TECHNOLOGY-LIMITED',
+ '1d17' => 'C-Thru-Music-Ltd.',
+ '1d19' => 'Dexatek-Technology-Ltd.',
+ '1d1f' => 'Diostech-Co.-Ltd.',
+ '1d20' => 'SAMTACK-INC.',
+ '1d4d' => 'PEGATRON-CORPORATION',
+ '1d50' => 'OpenMoko-Inc.',
+ '1d5b' => 'Smartronix-Inc.',
+ '1d6b' => 'Linux-Foundation',
+ '1e0e' => 'Qualcomm---Option',
+ '1e10' => 'Point-Grey-Research-Inc.',
+ '1e1d' => 'Lumension-Security',
+ '1e1f' => 'INVIA',
+ '1e29' => 'Festo-AG---Co.-KG',
+ '1e41' => 'Cleverscope',
+ '1e54' => 'TypeMatrix',
+ '1e68' => 'TrekStor-GmbH---Co.-KG',
+ '1e71' => 'NZXT',
+ '1e74' => 'Coby-Electronics-Corporation',
+ '1e7d' => 'ROCCAT',
+ '1ebb' => 'NuCORE-Technology-Inc.',
+ '1eda' => 'AirTies-Wireless-Networks',
+ '1ef6' => 'EADS-Deutschland-GmbH',
+ '1f28' => 'Cal-Comp',
+ '1f4d' => 'G-Tek-Electronics-Group',
+ '1f82' => 'TANDBERG',
+ '1f84' => 'Alere-Inc.',
+ '1f87' => 'Stantum',
+ '1fbd' => 'Delphin-Technology-AG',
+ '1fc9' => 'NXP-Semiconductors',
+ '1fe7' => 'Vertex-Wireless-Co.-Ltd.',
+ '2001' => 'D-Link',
+ '2013' => 'Unknown-Pinnacle-',
+ '2019' => 'PLANEX',
+ '2040' => 'Hauppauge',
+ '2047' => 'Texas-Instruments',
+ '2080' => 'Barnes---Noble',
+ '2087' => 'Cando',
+ '20a0' => 'Clay-Logic',
+ '20b1' => 'XMOS-Ltd',
+ '20b3' => 'Hanvon',
+ '20b7' => 'Qi-Hardware',
+ '20df' => 'Simtec-Electronics',
+ '2101' => 'ActionStar',
+ '2162' => 'Creative--',
+ '2184' => 'GW-Instek',
+ '21a1' => 'Emotiv-Systems-Pty.-Ltd.',
+ '21d6' => 'Agecodagis-SARL',
+ '2222' => 'MacAlly',
+ '2227' => 'SAMWOO-Enterprise',
+ '2233' => 'RadioShack-Corporation',
+ '2237' => 'Kobo-Inc.',
+ '22a6' => 'Pie-Digital-Inc.',
+ '22b8' => 'Motorola-PCS',
+ '22b9' => 'eTurboTouch-Technology-Inc.',
+ '2304' => 'Pinnacle-Systems-Inc.',
+ '2373' => 'Pumatronix-Ltda',
+ '2375' => 'Digit-at-lway-Inc.',
+ '2478' => 'Tripp-Lite',
+ '2632' => 'TwinMOS',
+ '2730' => 'Citizen',
+ '2735' => 'DigitalWay',
+ '2770' => 'NHJ-Ltd',
+ '2821' => 'ASUSTek-Computer-Inc.',
+ '2899' => 'Toptronic-Industrial-Co.-Ltd',
+ '2c02' => 'Planex-Communications',
+ '2c1a' => 'Dolphin-Peripherals',
+ '2fb2' => 'Fujitsu-Ltd',
+ '3125' => 'Eagletron',
+ '3176' => 'Whanam-Electronics-Co.-Ltd',
+ '3275' => 'VidzMedia-Pte-Ltd',
+ '3334' => 'AEI',
+ '3340' => 'Yakumo',
+ '3504' => 'Micro-Star',
+ '3579' => 'DIVA',
+ '3636' => 'InVibro',
+ '3838' => 'WEM',
+ '3923' => 'National-Instruments-Corp.',
+ '40bb' => 'I-O-Data',
+ '4101' => 'i-rocks',
+ '4102' => 'iRiver-Ltd.',
+ '413c' => 'Dell-Computer-Corp.',
+ '4146' => 'USBest-Technology',
+ '4242' => 'USB-Design-by-Example',
+ '4317' => 'Broadcom',
+ '4348' => 'WinChipHead',
+ '4572' => 'Shuttle-Inc.',
+ '4586' => 'Panram',
+ '4670' => 'EMS-Production',
+ '4752' => 'Miditech',
+ '4757' => 'GW-Instek',
+ '4766' => 'Aceeca',
+ '4855' => 'Memorex',
+ '4971' => 'SimpleTech',
+ '5032' => 'Grandtec',
+ '5041' => 'Linksys',
+ '50c2' => 'Averatec--',
+ '5173' => 'Sweex',
+ '5219' => 'I-Tetra',
+ '5345' => 'Owon',
+ '544d' => 'Transmeta-Corp.',
+ '5543' => 'UC-Logic-Technology-Corp.',
+ '5555' => 'Epiphan-Systems-Inc.',
+ '55aa' => 'OnSpec-Electronic-Inc.',
+ '5656' => 'Uni-Trend-Group-Limited',
+ '595a' => 'IRTOUCHSYSTEMS-Co.-Ltd.',
+ '5986' => 'Acer',
+ '5a57' => 'Zinwell',
+ '6000' => 'Beholder-International-Ltd.',
+ '601a' => 'Ingenic-Semiconductor-Ltd.',
+ '6189' => 'Sitecom',
+ '6253' => 'TwinHan-Technology-Co.-Ltd',
+ '636c' => 'CoreLogic-Inc.',
+ '6472' => 'Unknown-Sony-',
+ '6547' => 'Arkmicro-Technologies-Inc.',
+ '6615' => 'IRTOUCHSYSTEMS-Co.-Ltd.',
+ '6666' => 'Prototype-product-Vendor-ID',
+ '6677' => 'WiseGroup-Ltd.',
+ '6891' => '3Com',
+ '695c' => 'Opera1',
+ '7104' => 'CME-Central-Music-Co.',
+ '726c' => 'StackFoundry-LLC',
+ '734c' => 'TBS-Technologies-China',
+ '7392' => 'Edimax-Technology-Co.-Ltd',
+ '8086' => 'Intel-Corp.',
+ '8087' => 'Intel-Corp.',
+ '80ee' => 'VirtualBox',
+ '8282' => 'Keio',
+ '8341' => 'EGO-Systems-Inc.',
+ '9016' => 'Sitecom',
+ '9022' => 'TeVii-Technology-Ltd.',
+ '9148' => 'GeoLab-Ltd',
+ '9710' => 'MosChip-Semiconductor',
+ '99fa' => 'Grandtec',
+ '9ac4' => 'J.-Westhues',
+ 'a168' => 'AnMo-Electronics-Corporation',
+ 'a600' => 'Asix',
+ 'a727' => '3Com',
+ 'abcd' => 'Unknown',
+ 'c251' => 'Keil-Software-Inc.',
+ 'cace' => 'CACE-Technologies-Inc.',
+ 'd209' => 'Ultimarc',
+ 'e4e4' => 'Xorcom-Ltd.',
+ 'eb03' => 'MakingThings',
+ 'eb1a' => 'eMPIA-Technology-Inc.',
+ 'eb2a' => 'KWorld',
+ 'f003' => 'Hewlett-Packard',
+ '1412' => 'ESI',
+ '7012' => 'VIA-Technologies-Inc',
+ );
+
+} \ No newline at end of file
diff --git a/h-source/Application/Views/Desktop/Contact/index.php b/h-source/Application/Views/Desktop/Contact/index.php
index 9d4d806..62822d8 100644
--- a/h-source/Application/Views/Desktop/Contact/index.php
+++ b/h-source/Application/Views/Desktop/Contact/index.php
@@ -3,30 +3,37 @@
<?php
// h-source, a web software to build a community of people that want to share their hardware information.
// Copyright (C) 2010 Antonio Gallo (h-source-copyright.txt)
-//
-// This file is part of h-source
-//
-// h-source is free software: you can redistribute it and/or modify
+//
+// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
-// h-source is distributed in the hope that it will be useful,
+// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
-// along with h-source. If not, see <http://www.gnu.org/licenses/>.
+// along with this program. If not, see <http://www.gnu.org/licenses/>.
?>
-<?php
- if (file_exists(ROOT."/Template/".Params::$viewSubfolder."/Contact/index_$lang.php"))
- {
- include(ROOT."/Template/".Params::$viewSubfolder."/Contact/index_$lang.php");
- }
- else
- {
- include(ROOT."/Template/".Params::$viewSubfolder."/Contact/index.php");
- }
-?>
+ <div id="left">
+
+ <div class="position_tree_box">
+ <a href="<?php echo $this->baseUrl."/home/index/$lang";?>">Home</a> &raquo; contact
+ </div>
+
+ <div class="credits_external_box">
+
+ <div class="contact_div">
+ You can suggest to implement new features or add new types of hardware in the <a href="<?php echo $this->baseUrl."/issues/viewall/$lang/1/$token";?>">issues</a> page
+ </div>
+
+ <div class="contact_div">
+ If you want to directly contact the <b><?php echo Website::$generalName;?></b> team use this e-mail address: <b>info@h-node.com</b>
+ </div>
+
+ </div>
+
+ </div>
diff --git a/h-source/Template/Desktop/Contact/index.php b/h-source/Application/Views/Desktop/Contact/index_de.php
index 67904f9..ab8710a 100644
--- a/h-source/Template/Desktop/Contact/index.php
+++ b/h-source/Application/Views/Desktop/Contact/index_de.php
@@ -3,21 +3,19 @@
<?php
// h-source, a web software to build a community of people that want to share their hardware information.
// Copyright (C) 2010 Antonio Gallo (h-source-copyright.txt)
-//
-// This file is part of h-source
-//
-// h-source is free software: you can redistribute it and/or modify
+//
+// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
-// h-source is distributed in the hope that it will be useful,
+// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
-// along with h-source. If not, see <http://www.gnu.org/licenses/>.
+// along with this program. If not, see <http://www.gnu.org/licenses/>.
?>
<div id="left">
@@ -26,6 +24,16 @@
<a href="<?php echo $this->baseUrl."/home/index/$lang";?>">Home</a> &raquo; contact
</div>
- <p>write in the file <b>Template/Desktop/Contact/index.php</b> your contact information</p>
+ <div class="credits_external_box">
+
+ <div class="contact_div">
+ Sie können neu zu implementierende Funktionen vorschlagen oder neue Hardware-Typen in der Seite <a href="<?php echo $this->baseUrl."/issues/viewall/$lang/1/$token";?>">Web-Log</a> hinzufügen
+ </div>
+
+ <div class="contact_div">
+ Wenn Sie das <b>h-node-Team</b> direkt kontaktieren möchten: <b>info@h-node.com</b>
+ </div>
+
+ </div>
</div>
diff --git a/h-source/Template/Desktop/Contact/index_es.php b/h-source/Application/Views/Desktop/Contact/index_es.php
index 28d91c6..af5c022 100644
--- a/h-source/Template/Desktop/Contact/index_es.php
+++ b/h-source/Application/Views/Desktop/Contact/index_es.php
@@ -3,21 +3,19 @@
<?php
// h-source, a web software to build a community of people that want to share their hardware information.
// Copyright (C) 2010 Antonio Gallo (h-source-copyright.txt)
-//
-// This file is part of h-source
-//
-// h-source is free software: you can redistribute it and/or modify
+//
+// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
-// h-source is distributed in the hope that it will be useful,
+// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
-// along with h-source. If not, see <http://www.gnu.org/licenses/>.
+// along with this program. If not, see <http://www.gnu.org/licenses/>.
?>
<div id="left">
@@ -26,6 +24,16 @@
<a href="<?php echo $this->baseUrl."/home/index/$lang";?>">Home</a> &raquo; contact
</div>
-
+ <div class="credits_external_box">
+
+ <div class="contact_div">
+ Puede sugerir el implementar nuevas caracteriticas o agregar nuevo hardware en la página de <a href="<?php echo $this->baseUrl."/issues/viewall/$lang/1/$token";?>">incidencias</a>
+ </div>
+
+ <div class="contact_div">
+ Si desea contactar directamente al equipo de <b><?php echo Website::$generalName;?></b> use esta dirección de correo electronico: <b>info@h-node.com</b>
+ </div>
+
+ </div>
</div>
diff --git a/h-source/Application/Views/Desktop/Contact/index_fr.php b/h-source/Application/Views/Desktop/Contact/index_fr.php
new file mode 100644
index 0000000..2255258
--- /dev/null
+++ b/h-source/Application/Views/Desktop/Contact/index_fr.php
@@ -0,0 +1,39 @@
+<?php if (!defined('EG')) die('Direct access not allowed!'); ?>
+
+<?php
+// h-source, a web software to build a community of people that want to share their hardware information.
+// Copyright (C) 2010 Antonio Gallo (h-source-copyright.txt)
+//
+// This program is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program. If not, see <http://www.gnu.org/licenses/>.
+?>
+
+ <div id="left">
+
+ <div class="position_tree_box">
+ <a href="<?php echo $this->baseUrl."/home/index/$lang";?>">Home</a> &raquo; contact
+ </div>
+
+ <div class="credits_external_box">
+
+ <div class="contact_div">
+ Vous pouvez suggérez l’implémentation de nouvelles fonctionnalitée ou l’ajout d’un nouveau type de matériel dans la page <a href="<?php echo $this->baseUrl."/issues/viewall/$lang/1/$token";?>">problème</a>.
+ </div>
+
+ <div class="contact_div">
+ Si vous voulez contatez directement l’équipe <b><?php echo Website::$generalName;?></b>, utilisez cette adresse mail : <b>info@h-node.com</b>
+ </div>
+
+ </div>
+
+ </div>
diff --git a/h-source/Application/Views/Desktop/Contact/index_gr.php b/h-source/Application/Views/Desktop/Contact/index_gr.php
new file mode 100644
index 0000000..2b6a1bb
--- /dev/null
+++ b/h-source/Application/Views/Desktop/Contact/index_gr.php
@@ -0,0 +1,39 @@
+<?php if (!defined('EG')) die('Direct access not allowed!'); ?>
+
+<?php
+// h-source, a web software to build a community of people that want to share their hardware information.
+// Copyright (C) 2010 Antonio Gallo (h-source-copyright.txt)
+//
+// This program is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program. If not, see <http://www.gnu.org/licenses/>.
+?>
+
+ <div id="left">
+
+ <div class="position_tree_box">
+ <a href="<?php echo $this->baseUrl."/home/index/$lang";?>">Home</a> &raquo; contact
+ </div>
+
+ <div class="credits_external_box">
+
+ <div class="contact_div">
+ Μπορείτε να εισηγηθείτε την υλοποίηση νέων χαρακτηριστικών ή την προσθήκη νέων τύπων υλικού (hardware) στην ιστοσελίδα <a href="<?php echo $this->baseUrl."/issues/viewall/$lang/1/$token";?>">issues</a>
+ </div>
+
+ <div class="contact_div">
+ Αν θέλετε να έρθετε σε άμεση επαφή με την ομάδα του <b><?php echo Website::$generalName;?></b>, χρησιμοποιείστε αυτή την ηλεκτρονική διεύθυνση: <b>info@h-node.com</b>
+ </div>
+
+ </div>
+
+ </div>
diff --git a/h-source/Template/Desktop/Contact/index_it.php b/h-source/Application/Views/Desktop/Contact/index_it.php
index 28d91c6..48355d7 100644
--- a/h-source/Template/Desktop/Contact/index_it.php
+++ b/h-source/Application/Views/Desktop/Contact/index_it.php
@@ -3,21 +3,19 @@
<?php
// h-source, a web software to build a community of people that want to share their hardware information.
// Copyright (C) 2010 Antonio Gallo (h-source-copyright.txt)
-//
-// This file is part of h-source
-//
-// h-source is free software: you can redistribute it and/or modify
+//
+// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
-// h-source is distributed in the hope that it will be useful,
+// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
-// along with h-source. If not, see <http://www.gnu.org/licenses/>.
+// along with this program. If not, see <http://www.gnu.org/licenses/>.
?>
<div id="left">
@@ -26,6 +24,16 @@
<a href="<?php echo $this->baseUrl."/home/index/$lang";?>">Home</a> &raquo; contact
</div>
-
+ <div class="credits_external_box">
+
+ <div class="contact_div">
+ Potete suggerire nuove caratteristiche da implementare o aggiungere nuovi tipi di hardware nella pagina <a href="<?php echo $this->baseUrl."/issues/viewall/$lang/1/$token";?>">issues</a>
+ </div>
+
+ <div class="contact_div">
+ Se volete direttamente contattare il team di <b><?php echo Website::$generalName;?></b> potete farlo a questo indirizzo e-mail: <b>info@h-node.com</b>
+ </div>
+
+ </div>
</div>
diff --git a/h-source/Application/Views/Desktop/Credits/index_gr.php b/h-source/Application/Views/Desktop/Credits/index_gr.php
new file mode 100644
index 0000000..077d337
--- /dev/null
+++ b/h-source/Application/Views/Desktop/Credits/index_gr.php
@@ -0,0 +1,65 @@
+<?php if (!defined('EG')) die('Direct access not allowed!'); ?>
+
+<?php
+// h-source, a web software to build a community of people that want to share their hardware information.
+// Copyright (C) 2010 Antonio Gallo (h-source-copyright.txt)
+//
+// This file is part of h-source
+//
+// h-source is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// h-source is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with h-source. If not, see <http://www.gnu.org/licenses/>.
+?>
+
+ <div id="left">
+
+ <div class="position_tree_box">
+ <a href="<?php echo $this->baseUrl."/home/index/$lang";?>">Home</a> &raquo; credits
+ </div>
+
+ <div class="credits_external_box">
+
+ <div class="credits_item_title">
+ Εικόνες:
+ </div>
+
+ <div class="credits_item_description">
+ Οι εικόνες που χρησιμοποιούνται μέσα στο <?php echo Website::$generalName;?> πάρθηκαν από το θέμα εικόνας <a href="http://kde-look.org/content/show.php/ACUN+Simgeleri?content=83018">ACUN Simgeleri 0.7</a> και από το <a href="http://kde-look.org/content/show.php/H2O+Icon+Theme?content=127149">H2O Icon Theme 0.0.5</a>, που είναι αδειοδοτημένα και τα δύο υπό την Άδεια GNU GPL, από τις εικόνες <a href="http://www.everaldo.com/crystal/?action=downloads">Crystal Projects</a>, που είναι αδειοδοτημένες υπό την LGPL, από το <a href="http://www.notmart.org/index.php/Graphics">glaze icons set</a> (LGPL) και από το <a href="http://kde-look.org/content/show.php/Dark-Glass+reviewed?content=67902">DarkGlass_Reworked icons theme</a> (GPL). Οι εικόνες flag πάρθηκαν από το <a href="http://www.famfamfam.com/lab/icons/flags/">FAMFAMFAM flag icons set</a> (Public Domain).
+ </div>
+
+ <div class="credits_item_title">
+ jQuery:
+ </div>
+
+ <div class="credits_item_description">
+ Σε όλο τον ιστότοπο χρησιμοποιήθηκαν οι βιβλιοθήκες javascript <a href="http://jquery.com/">jQuery</a> και η <a href="http://jqueryui.com/home">jQuery UI</a> (που αδειοδοτούνται υπό την MIT/GPL).
+ </div>
+
+ <div class="credits_item_title">
+ markitup:
+ </div>
+
+ <div class="credits_item_description">
+ Χρησιμοποιήθηκε το <a href="http://markitup.jaysalvat.com/home/">markitup</a> jQuery plugin (που αδειοδοτείται υπό την MIT/GPL), για να βοηθηθεί ο χρήστης να εισαγάγει wiki tags
+ </div>
+
+ <div class="credits_item_title">
+ php diff algorithm:
+ </div>
+
+ <div class="credits_item_description">
+ Χρησιμοποιήθηκε ο αλγόριθμος <a href="http://compsci.ca/v3/viewtopic.php?p=142539">This</a> algorithm (που αδειοδοτείται υπό την ελεύθερη άδεια zlib), για να αναδειχθούν οι διαφορές ανάμεσα στις δύο διαφορετικές αναθεωρήσεις του ίδιου μοντέλου υλικού (hadrware).
+ </div>
+
+ </div>
+
+ </div>
diff --git a/h-source/Application/Views/Desktop/Help/index.php b/h-source/Application/Views/Desktop/Help/index.php
new file mode 100644
index 0000000..bec0d54
--- /dev/null
+++ b/h-source/Application/Views/Desktop/Help/index.php
@@ -0,0 +1,449 @@
+<?php if (!defined('EG')) die('Direct access not allowed!'); ?>
+
+<?php
+// h-source, a web software to build a community of people that want to share their hardware information.
+// Copyright (C) 2010, 2011 Antonio Gallo (h-source-copyright.txt)
+// Copyright (C) 2011 Joerg Kohne
+//
+// This file is part of h-source
+//
+// h-source is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// h-source is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with h-source. If not, see <http://www.gnu.org/licenses/>.
+?>
+
+<div class="help_external_box">
+
+ <div class="position_tree_box">
+ <a href="<?php echo $this->baseUrl."/home/index/$lang";?>">Home</a> &raquo; <?php echo gtext("Help");?>
+ </div>
+
+ <div class="help_tables_of_contents">
+ Table of contents
+ <ul>
+ <li><a href="<?php echo $this->currPage."/$lang#wiki-syntax";?>">Wiki syntax</a></li>
+ <li><a href="<?php echo $this->currPage."/$lang#compatibility";?>">Compatibility classes</a></li>
+ <li><a href="<?php echo $this->currPage."/$lang#discover-hardware";?>">Discover your hardware</a></li>
+ <li><a href="<?php echo $this->currPage."/$lang#fully-free";?>">List of fully free GNU/Linux distributions</a></li>
+ </ul>
+ </div>
+
+ <a name="wiki-syntax"></a><h2>Wiki Syntax</h2>
+
+ <h3>List of <?php echo Website::$generalName;?>
+ Wiki Tags</h3>
+
+ <table class="wiki">
+ <thead>
+ <tr>
+ <th>Name</th>
+ <th>Tag</th>
+ <th>Result</th>
+ <th>Description</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td>bold</td>
+ <td>text [b]bold[/b]</td>
+ <td>text <b>bold</b></td>
+ <td>text bold</td>
+ </tr>
+ <tr>
+ <td>italic</td>
+ <td>text [i]italic[/i]</td>
+ <td>text <i>italic</i></td>
+ <td>text italic</td>
+ </tr>
+ <tr>
+ <td>del</td>
+ <td>text [del]deleted[/del]</td>
+ <td>text <del>deleted</del></td>
+ <td>text deleted</td>
+ </tr>
+ <tr>
+ <td>underline</td>
+ <td>text [u]underlined[/u]</td>
+ <td>text <u>underlined</u></td>
+ <td>text underlined</td>
+ </tr>
+ <tr>
+ <td>head 1</td>
+ <td>[h1]heading[/h1]</td>
+ <td>
+ <div class="div_h1">
+ heading</div>
+ </td>
+ <td>head 1</td>
+ </tr>
+ <tr>
+ <td>head 2</td>
+ <td>[h2]heading[/h2]</td>
+ <td>
+ <div class="div_h2">
+ heading</div>
+ </td>
+ <td>head 2</td>
+ </tr>
+ <tr>
+ <td>head 3</td>
+ <td>[h3]heading[/h3]</td>
+ <td>
+ <div class="div_h3">
+ heading</div>
+ </td>
+ <td>head 3</td>
+ </tr>
+ <tr>
+ <td>paragraph</td>
+ <td>…[p]new paragraph[/p]</td>
+ <td>…
+
+ <p>new paragraph</p>
+ </td>
+ <td>new paragraph</td>
+ </tr>
+ <tr>
+ <td>Ordered Lists </td>
+ <td><ul style="list-style-type:none;">
+ <li>[list]</li>
+ <li><ul style="list-style-type:none;">
+ <li>[*]first item[/*]</li>
+ <li>[*]second item[/*]</li>
+ </ul>
+ </li>
+ <li>[/list]</li>
+ </ul>
+ </td>
+ <td><ul>
+ <li>first item</li>
+ <li>second item</li>
+ </ul>
+ </td>
+ <td>make a list of items</td>
+ </tr>
+ <tr>
+ <td>Numbered List </td>
+ <td><ul style="list-style-type:none;">
+ <li>[enum]</li>
+ <li><ul style="list-style-type:none;">
+ <li>[*]first item[/*]</li>
+ <li>[*]second item[/*]</li>
+ </ul>
+ </li>
+ <li>[/enum]</li>
+ </ul>
+ </td>
+ <td><ol>
+ <li>first item</li>
+ <li>second item</li>
+ </ol>
+ </td>
+ <td>make a numbered list of items</td>
+ </tr>
+ <tr>
+ <td>list item</td>
+ <td>[*]item[/*]</td>
+ <td><ul>
+ <li>item</li>
+ </ul>
+ </td>
+ <td>add an item to a list</td>
+ </tr>
+ <tr>
+ <td>code</td>
+ <td>[code]some code[/code]</td>
+ <td><pre class="code_pre">some code</pre>
+ </td>
+ <td>some code</td>
+ </tr>
+ <tr>
+ <td>simple link</td>
+ <td>[a]url[/a]</td>
+ <td><a href="url">url</a></td>
+ <td>simple link</td>
+ </tr>
+ <tr>
+ <td>link with text</td>
+ <td>[a]url|text[/a]</td>
+ <td><a href="url">text</a></td>
+ <td>link with text</td>
+ </tr>
+ <tr>
+ <td>notebook</td>
+ <td>[notebook]id[/notebook]</td>
+ <td><samp>id</samp></td>
+ <td>link to the notebook with the identifier equal to id (the identifier of each device model is written in the
+ page of the device itself, next to the model name)</td>
+ </tr>
+ <tr>
+ <td>wifi</td>
+ <td>[wifi]id[/wifi]</td>
+ <td><samp>id</samp></td>
+ <td>link to the wifi with the identifier equal to id (the identifier of each device model is written in the page
+ of the device itself, next to the model name)</td>
+ </tr>
+ <tr>
+ <td>videocard</td>
+ <td>[videocard]id[/videocard]</td>
+ <td class="sample"><samp>id</samp></td>
+ <td>link to the videocard with the identifier equal to id (the identifier of each device model is written in the
+ page of the device itself, next to the model name)</td>
+ </tr>
+ </tbody>
+ </table>
+
+ <p> </p>
+
+ <a name="compatibility"></a><h2>Compatibility classes</h2>
+
+ <a name="notebook-compatibility"></a><h3>Notebooks</h3>
+ <dl>
+ <dt>Class A (Platinum)</dt>
+ <dd>All the notebook devices work with a very good performance. </dd>
+ <dd class="example">Example: all the devices work, the 3D acceleration is supported</dd>
+ <dt>Class B (Gold)</dt>
+ <dd>All the notebook devices work but not at full performance. </dd>
+ <dd class="example">A typical example: all the devices work, but the 3D acceleration is not supported</dd>
+ <dt>Class C (Silver)</dt>
+ <dd>One main device is not supported. </dd>
+ <dd class="example">Example: the internal wifi card does not work. You need an external USB card</dd>
+ <dt>Class D (Bronze)</dt>
+ <dd>More than one device is not supported</dd>
+ <dt>Class E (Garbage)</dt>
+ <dd>The notebook does not work with free software</dd>
+ </dl>
+
+ <a name="printer-compatibility"></a><h3>Printers</h3>
+ <dl>
+ <dt>Class A (Full)</dt>
+ <dd>All device functions and features are supported</dd>
+ <dt>Class B (Partial)</dt>
+ <dd>Printing supported but possibly at limited speed or print quality; scanning and/or faxing on some multifunction
+ devices may not be supported</dd>
+ <dt>Class C (None)</dt>
+ <dd>The printer does not work with free software</dd>
+ </dl>
+
+ <a name="scanner-compatibility"></a><h3>Scanners</h3>
+ <dl>
+ <dt>Class A (Full)</dt>
+ <dd>All device functions and features are supported</dd>
+ <dt>Class B (Partial)</dt>
+ <dd>Scanning supported but possibly at limited speed or quality; some other features may not be supported</dd>
+ <dt>Class C (None)</dt>
+ <dd>The scanner does not work with free software</dd>
+ </dl>
+
+ <p> </p>
+
+ <a name="discover-hardware"></a><h2>Discover your hardware</h2>
+
+ <p><cite>(Thanks <a href="<?php echo $this->baseUrl;?>/issues/view/en/3/1/token">lluvia</a>)</cite></p>
+
+ <p>In order to know the details of your hardware you can carry out the following actions:</p>
+ <dl>
+ <dt>How to discover the model name of your notebook</dt>
+ <dd>See below your notebook or netbook<dd>
+ <a name="model-name"></a><dt>How to discover the model name of your device (if it is not a notebook)</dt>
+ <dd class="opt"><strong>If the device is integrated (example: a video card)</strong></dd>
+ <dd>Open a terminal and type the following command:</dd>
+ <dd><pre class="terminal">lspci</pre>
+ </dd>
+ <dd>or</dd>
+ <dd><pre class="terminal">lspci &gt; FILENAME # output to a file</pre>
+ </dd>
+ <!-- dd>where "filename" is the name of the file</dd -->
+ <dd>You will obtain the list of your PCI devices, similar to the one written below</dd>
+ <dd><pre class="terminal">
+00:18.3 Host bridge: <b>Advanced Micro Devices [AMD] K8 [Athlon64/Opteron] Miscellaneous Control</b>
+03:00.0 Network controller: <b>Broadcom Corporation BCM4311 802.11b/g WLAN (rev 02)</b>
+05:00.0 VGA compatible controller: <b>nVidia Corporation G86 [GeForce 8400M GS] (rev a1)</b>
+ </pre>
+ </dd>
+ <dd class="note"><b>Note:</b> The name of each device is written after the colon (see the text
+ in bold in the above list)</dd>
+ <dd>If the device is an USB device (example: an external USB wifi card)</dd>
+ <dd>Open a terminal and type the following command:</dd>
+ <dd><pre class="terminal">lsusb -v</pre>
+ </dd>
+ <dd>or</dd>
+ <dd><pre class="terminal">lsusb -v &gt; FILENAME # output to a file</pre>
+ </dd>
+ <!-- dd>where "filename" is the name of the file</dd -->
+ <dd>You will obtain the list of your USB devices, similar to the one written below</dd>
+ <dd><pre class="terminal">
+Bus 001 Device 002: ID 0846:4260 NetGear, Inc. WG111v3 54 Mbps Wireless [realtek RTL8187B]
+Device Descriptor:
+ bLength 18
+ bDescriptorType 1
+ bcdUSB 2.00
+ bDeviceClass 0 (Defined at Interface level)
+ bDeviceSubClass 0
+ bDeviceProtocol 0
+ bMaxPacketSize0 64
+ idVendor 0x0846 NetGear, Inc.
+ idProduct 0x4260 <b>WG111v3 54 Mbps Wireless [realtek RTL8187B]</b>
+ bcdDevice 2.00
+ iManufacturer 1
+ iProduct 2
+ iSerial 3
+ ...
+ ...
+
+Bus 002 Device 003: ID 08ff:2580 AuthenTec, Inc. AES2501 Fingerprint Sensor
+Device Descriptor:
+ bLength 18
+ bDescriptorType 1
+ bcdUSB 1.10
+ bDeviceClass 255 Vendor Specific Class
+ bDeviceSubClass 255 Vendor Specific Subclass
+ bDeviceProtocol 255 Vendor Specific Protocol
+ bMaxPacketSize0 8
+ idVendor 0x08ff AuthenTec, Inc.
+ idProduct 0x2580 <b>AES2501 Fingerprint Sensor</b>
+ bcdDevice 6.23
+ iManufacturer 0
+ iProduct 1 Fingerprint Sensor
+ iSerial 0
+ bNumConfigurations 1
+ ...
+ ...
+ </pre>
+ </dd>
+ <dd class="note"><b>Note:</b> The name of each device is written at the row starting with "idProduct" (see the text
+ in bold in the above list)</dd>
+ <dl>
+ <dt>How to discover the model name of your notebook</dt>
+ <dd>See below your notebook or netbook<dd>
+ <a name="model-name"></a><dt>How to discover the model name of your device (if it is not a notebook)</dt>
+ <dd class="opt"><strong>If the device is integrated (example: a video card)</strong></dd>
+ <dd>Open a terminal and type the following command:</dd>
+ <dd><pre class="terminal">lspci</pre>
+ </dd>
+ <dd>or</dd>
+ <dd><pre class="terminal">lspci &gt; FILENAME # output to a file</pre>
+ </dd>
+ <dt>How to discover the kernel libre version you are using</dt>
+ <dd>Open a terminal and type the following command:</dd>
+ <dd> <pre class="terminal">uname -r</pre>
+ </dd>
+ <dt>How to discover the name of your video card</dt>
+ <dd>Open a terminal and type the following command:</dd>
+ <dd><pre class="terminal">sudo lspci</pre>
+ </dd>
+ <dd>Then look for the row containing the string <b>VGA</b> or <b>Display controller</b>. You can also try one of
+ the following commands:</dd>
+ <dd><pre class="terminal">lspci | grep "Display controller"</pre>
+ </dd>
+ <dd>or</dd>
+ <dd><pre class="terminal">lspci | grep "VGA"</pre>
+ </dd>
+ <a name="vendoridproductid"></a><dt>How to discover the VendorID and the ProductID of your device (VendorID:ProductID
+ code)</dt>
+ <dd><cite>(Thanks <a
+ href="http://trisquel.info/en/forum/h-nodecom-new-website-hardware-database#comment-5839">Michał
+ Masłowski</a> and <a
+ href="http://trisquel.info/en/forum/h-nodecom-new-website-hardware-database#comment-5837">Julius22</a>)</cite></dd>
+ <dd>If the device is integrated (example: a video card) </dd>
+ <dd>Open a terminal and type the following command:</dd>
+ <dd><pre class="terminal">sudo lspci -nnk</pre></dd>
+ <dd>You should obtain a list of hardware similar to the one written below</dd>
+ <dd><pre class="terminal">
+03:00.0 Network controller [0280]: Broadcom Corporation BCM4311 802.11b/g WLAN [<b>14e4:4311</b>] (rev 02)
+ Kernel driver in use: b43-pci-bridge
+ Kernel modules: ssb
+05:00.0 VGA compatible controller [0300]: nVidia Corporation G86 [GeForce 8400M GS] [<b>10de:0427</b>] (rev a1)
+ Kernel modules: nouveau, nvidiafb</pre>
+ </dd>
+ <dd>The strings in <b>bold</b> and placed inside the square brackets (in the above list) are the code you are
+ looking for. The first set of digits (before the colon) are the <b>VendorID</b>, the second set of digits are
+ the <b>ProductID</b>. In the above example: the VendorID:ProductID code of the wifi card (note the strings
+ "Network controller" and "WLAN") is <b>14e4:4311</b> while the VendorID:ProductID code of the video card (note
+ the string "VGA") is <b>10de:0427</b></dd>
+ <dd class="opt">If the device is an USB device (example: an external USB wifi card) </dd>
+ <dd>Open a terminal and type the following command:</dd>
+ <dd><pre class="terminal">sudo lsusb</pre>
+ </dd>
+ <dd>You should obtain a list of hardware similar to the one written below</dd>
+ <dd><pre class="terminal">
+Bus 001 Device 002: ID <b>0846:4260</b> NetGear, Inc. WG111v3 54 Mbps Wireless [realtek RTL8187B]
+Bus 001 Device 001: ID <b>1d6b:0002</b> Linux Foundation 2.0 root hub
+Bus 002 Device 003: ID <b>08ff:2580</b> AuthenTec, Inc. AES2501 Fingerprint Sensor</pre>
+ </dd>
+ <dd>The strings in <b>bold</b> (in the above list) are the code you are looking for. The first set of digits
+ (before the colon) are the <b>VendorID</b>, the second set of digits are the <b>ProductID</b>. In the above
+ example: the VendorID:ProductID code of the external USB wifi card (note the strings "Wireless") is
+ <b>0846:4260</b></dd>
+ <dt>How to discover if the video card works</dt>
+ <dd>Install <a href="http://rss-glx.sourceforge.net/"><code>rss-glx</code></a> by means of the package manager of
+ your distribution or compiling it from source and try some screensavers (for example <b>Skyrocket</b> or
+ <b>Solarwinds</b>). Check if you can play the screensaver (and/or if you can play it smoothly)</dd>
+ <dt>How to discover if the 3D acceleration works</dt>
+ <dd>Try to enable compiz</dd>
+ <dt>How to discover the name of your wifi card</dt>
+ <dd><p>Open a terminal and type the following command:</p>
+ </dd>
+ <dd><pre class="terminal">sudo lspci</pre>
+ </dd>
+ <dd>Then look for the row containing the string <b>Wireless</b> or <b>Network controller</b>. You can also try
+ one of the following commands:</dd>
+ <dd><pre class="terminal">lspci | grep "Wireless" </pre>
+ </dd>
+ <dd>or</dd>
+ <dd><pre class="terminal">lspci | grep "Network" </pre>
+ </dd>
+ <dt>How to discover the printer driver you are using</dt>
+ <dd class="opt"><strong>If you are using cups</strong></dd>
+ <dd>Open a terminal and type the following command:</dd>
+ <dd><pre class="terminal">dpkg-query -W -f '${Version}\n' cups</pre>
+ </dd>
+ <dt>How to discover the architecture of your notebook</dt>
+ <dd>Open a terminal and type the following command:</dd>
+ <dd><pre class="terminal">cat /proc/cpuinfo | grep "lm"</pre>
+ </dd>
+ <dd>If you get a message like this:</dd>
+ <dd><pre class="terminal">flags : fpu vme de pse tsc msr pae mce cx8 apic mtrr pge mca cmov pat pse36 clflush dts<br/>acpi mmx fxsr sse sse2 ss ht tm pbe nx lm constant_tsc arch_perfmon pebs bts aperfmperf pni dtes64<br/>monitor ds_cpl est tm2 ssse3 cx16 xtpr pdcm lahf_lm</pre>
+ </dd>
+ <dd>then you machine is x86-64/amd64 capable and you could choose a x86-64/amd64 distro to run on it</dd>
+ </dl>
+ <p> </p>
+
+ <a name="fully-free"></a><h2>Fully free GNU/Linux Distributions</h2>
+
+ <p>Following are the <a href="http://www.gnu.org/gnu/linux-and-gnu.html">GNU/Linux</a> distributions we know of which have a firm policy
+ commitment to only include and only propose free software. They reject non-free applications, non-free programming
+ platforms, non-free drivers, or non-free firmware “blobs”. If by mistake they do include any, they remove it. To
+ learn more about what makes for a <a href="http://www.gnu.org/distros/free-distros.html">free GNU/Linux
+ distribution</a>, see GNU <a href="http://www.gnu.org/distros/free-system-distribution-guidelines.html">Guidelines for
+ Free System Distributions</a>.</p>
+
+ <p><strong>All of the distributions that follow are installable to a computer's hard drive and most can be run
+ live.</strong></p>
+
+ <p>(listed in alphabetical order)</p>
+
+ <!-- p>They are listed in alphabetical order</p -->
+ <ul>
+ <li><a href="http://www.blagblagblag.org/">BLAG GNU/Linux</a></li>
+ <li><a href="http://www.dragora.org">Dragora GNU/Linux</a></li>
+ <li><a href="http://dynebolic.org/">Dynebolic GNU/Linux</a></li>
+ <li><a href="http://www.gnewsense.org/">gNewSense GNU/Linux</a></li>
+ <li><a href="http://www.musix.org.ar/">Musix GNU+Linux</a></li>
+ <li><a href="https://parabolagnulinux.org/">Parabola GNU/Linux</a></li>
+ <li><a href="http://trisquel.info/">Trisquel GNU/Linux</a></li>
+ <li><a href="http://www.ututo.org/www/">Ututo GNU/Linux</a></li>
+ <li><a href="http://venenux.org/">Venenux GNU/Linux</a></li>
+ </ul>
+ </dl>
+ </div>
+
diff --git a/h-source/Application/Views/Desktop/Help/index_de.php b/h-source/Application/Views/Desktop/Help/index_de.php
new file mode 100644
index 0000000..8301eda
--- /dev/null
+++ b/h-source/Application/Views/Desktop/Help/index_de.php
@@ -0,0 +1,445 @@
+<?php if (!defined('EG')) die('Direct access not allowed!'); ?>
+
+<?php
+// h-source, a web software to build a community of people that want to share their hardware information.
+// Copyright (C) 2010, 2011 Antonio Gallo (h-source-copyright.txt)
+// Copyright (C) 2011 Joerg Kohne
+//
+// This file is part of h-source
+//
+// h-source is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// h-source is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with h-source. If not, see <http://www.gnu.org/licenses/>.
+?>
+
+<div class="help_external_box">
+
+ <div class="position_tree_box">
+ <a href="<?php echo $this->baseUrl."/home/index/$lang";?>">Startseite</a> &raquo; <?php echo gtext("Help");?>
+ </div>
+
+ <div class="help_tables_of_contents">
+ Inhalt
+ <ul>
+ <li><a href="<?php echo $this->currPage."/$lang#wiki-syntax";?>">Wiki-Syntax</a></li>
+ <li><a href="<?php echo $this->currPage."/$lang#compatibility";?>">Kompatibilitätsklassen</a></li>
+ <li><a href="<?php echo $this->currPage."/$lang#discover-hardware";?>">Entdecken Sie Ihre Hardware</a></li>
+ <li><a href="<?php echo $this->currPage."/$lang#fully-free";?>">Vollständig Freie GNU/Linux-Distributionen</a></li>
+ </ul>
+ </div>
+
+ <a name="wiki-syntax"></a><h2>Wiki-Syntax</h2>
+
+ <h3><?php echo Website::$generalName;?>
+ Wiki-Elemente</h3>
+
+ <table class="help_wiki_table">
+ <thead>
+ <tr>
+ <th>Name</th>
+ <th>Element</th>
+ <th>Ergebnis</th>
+ <th>Beschreibung</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td>Fett</td>
+ <td>[b]Fette[/b] Schrift</td>
+ <td><b>Fette</b> Schrift</td>
+ <td>Fettschrift</td>
+ </tr>
+ <tr>
+ <td>Kursiv</td>
+ <td>[i]Kursive[/i] Schrift</td>
+ <td><i>Kursive</i> Schrift</td>
+ <td>Kursivschrift</td>
+ </tr>
+ <tr>
+ <td>Gelöschter Text</td>
+ <td>[del]Gelöschter[/del] Text</td>
+ <td><del>Gelöschter</del> Text</td>
+ <td>Gelöschter Text</td>
+ </tr>
+ <tr>
+ <td>Unterstrichen</td>
+ <td>[u]Unterstrichener[/u] Text</td>
+ <td><u>Unterstrichener</u> Text</td>
+ <td>Unterstrichener Text</td>
+ </tr>
+ <tr>
+ <td>Überschrift 1</td>
+ <td>[h1]Überschrift[/h1]</td>
+ <td>
+ <div class="div_h1">
+ Überschrift</div>
+ </td>
+ <td>Überschrift Ebene 1</td>
+ </tr>
+ <tr>
+ <td>Überschrift 2</td>
+ <td>[h2]Überschrift[/h2]</td>
+ <td>
+ <div class="div_h2">
+ Überschrift</div>
+ </td>
+ <td>Überschrift Ebene 2</td>
+ </tr>
+ <tr>
+ <td>Überschrift 3</td>
+ <td>[h3]Überschrift[/h3]</td>
+ <td>
+ <div class="div_h3">
+ Überschrift</div>
+ </td>
+ <td>Überschrift Ebene 3</td>
+ </tr>
+ <tr>
+ <td>Absatz</td>
+ <td>…[p](Neuer) Absatz[/p]</td>
+ <td>…
+
+ <p>(Neuer) Absatz</p>
+ </td>
+ <td>(Neuer) Absatz</td>
+ </tr>
+ <tr>
+ <td>Auflistung</td>
+ <td><ul style="list-style-type:none;">
+ <li>[list]</li>
+ <li><ul style="list-style-type:none;">
+ <li>[*]Erstes Element[/*]</li>
+ <li>[*]Zweites Element[/*]</li>
+ </ul>
+ </li>
+ <li>[/list]</li>
+ </ul>
+ </td>
+ <td><ul>
+ <li>Erstes Element</li>
+ <li>Zweites Element</li>
+ </ul>
+ </td>
+ <td>Auflistung</td>
+ </tr>
+ <tr>
+ <td>Nummerierung</td>
+ <td><ul style="list-style-type:none;">
+ <li>[enum]</li>
+ <li><ul style="list-style-type:none;">
+ <li>[*]Erstes Element[/*]</li>
+ <li>[*]Zweites Element[/*]</li>
+ </ul>
+ </li>
+ <li>[/enum]</li>
+ </ul>
+ </td>
+ <td><ol>
+ <li>Erstes Element</li>
+ <li>Zweites Element</li>
+ </ol>
+ </td>
+ <td>Geordnete Liste</td>
+ </tr>
+ <tr>
+ <td>Listenelement</td>
+ <td>[*]Listenelement[/*]</td>
+ <td><ul>
+ <li>Listenelement</li>
+ </ul>
+ </td>
+ <td>Listenelement hinzufügen</td>
+ </tr>
+ <tr>
+ <td>Quelltext</td>
+ <td>[code]Quelltext[/code]</td>
+ <td><pre class="code_pre">Quelltext</pre>
+ </td>
+ <td>Codefragment</td>
+ </tr>
+ <tr>
+ <td>Verweis (einfach)</td>
+ <td>[a]Internetadresse[/a]</td>
+ <td><a href="http://Internetadresse">Internetadresse</a></td>
+ <td>Verweis (einfach)</td>
+ </tr>
+ <tr>
+ <td>Verweis (mit Text)</td>
+ <td>[a]Internetadresse|mit Text[/a]</td>
+ <td><a href="http://Internetadresse">mit Text</a></td>
+ <td>Verweis (mit Text)</td>
+ </tr>
+ <tr>
+ <td>Notebook</td>
+ <td>[notebook]ID[/notebook]</td>
+ <td><samp>ID</samp></td>
+ <td>Verweis auf das Notebook mit der Kennung gleich ID (die jeweilige Geräte-Modellkennung wird auf der Seite
+ des Gerätes selbst, unter „Modellbezeichnung“, eingepflegt)</td>
+ </tr>
+ <tr>
+ <td>WLAN</td>
+ <td>[wifi]ID[/wifi]</td>
+ <td><samp>ID</samp></td>
+ <td>Verweis auf das WLAN mit der Kennung gleich ID (die jeweilige Geräte-Modellkennung wird auf der Seite des
+ Gerätes selbst, unter „Modellbezeichnung“, eingepflegt)</td>
+ </tr>
+ <tr>
+ <td>Grafikkarte</td>
+ <td>[videocard]ID/videocard]</td>
+ <td><samp>ID</samp></td>
+ <td>Verweis auf die Grafikkarte mit der Kennung gleich ID (die jeweilige Geräte-Modellkennung wird auf der Seite
+ des Gerätes selbst, unter „Modellbezeichnung“, eingepflegt)</td>
+ </tr>
+ </tbody>
+ </table>
+
+ <p> </p>
+
+ <a name="compatibility"></a><h2>Kompatibilitätsklassen</h2>
+
+ <a name="notebook-compatibility"></a><h3>Notebooks</h3>
+ <dl title="Notebook-Kompatibilität">
+ <dt class="label">Klasse A (Platin)</dt>
+ <dd>Alle Notebook-Geräte arbeiten mit sehr guter Leistung.</dd>
+ <dd class="sample"><strong>Beispiel</strong>: Alle Geräte funktionieren, auch die 3D-Beschleunigung wird
+ unterstützt.</dd>
+ <dt>Klasse B (Gold)</dt>
+ <dd>Alle Notebook-Geräte funktionieren, jedoch nicht mit voller Leistung. </dd>
+ <dd class="sample"><strong>Beispiel</strong>: Alle Geräte funktionieren, aber die 3D-Beschleunigung wird nicht
+ unterstützt.</dd>
+ <dt>Klasse C (Silber)</dt>
+ <dd>Ein wichtiges Gerät wird nicht unterstützt.</dd>
+ <dd class="sample"><strong>Beispiel</strong>: Die interne WLAN-Karte funktioniert nicht. Sie benötigen eine
+ externe USB-Karte.</dd>
+ <dt>Klasse D (Bronze)</dt>
+ <dd>Mehr als ein Gerät wird nicht unterstützt.</dd>
+ <dt>Klasse E (E-Schrott)</dt>
+ <dd>Das Notebook kann von Freie Software nicht unterstützt werden.</dd>
+ </dl>
+
+ <a name="printer-compatibility"></a><h3>Drucker</h3>
+ <dl title="Drucker-Kompatibilität">
+ <dt>Klasse A (Vollständig)</dt>
+ <dd>Alle Gerätefunktionen und -merkmale werden unterstützt.</dd>
+ <dt>Klasse B (Teilweise)</dt>
+ <dd>Drucken wird unterstützt, aber möglicherweise mit eingeschränkter Geschwindigkeit oder Druckqualität;
+ Scannen und/oder Faxen wird (bei einigen Multifunktionsgeräten möglicherweise) nicht unterstützt</dd>
+ <dt>Klasse C (E-Schrott)</dt>
+ <dd>Der Drucker kann von Freie Software nicht unterstützt werden.</dd>
+ </dl>
+
+ <a name="scanner-compatibility"></a><h3>Scanner</h3>
+ <dl title="Scanner-Kompatibilität">
+ <dt>Klasse A (Vollständig)</dt>
+ <dd>Alle Gerätefunktionen und -merkmale werden unterstützt.</dd>
+ <dt>Klasse B (Teilweise)</dt>
+ <dd>Scannen unterstützt, aber möglicherweise bei eingeschränkter Geschwindigkeit oder Qualität, einige andere
+ Funktionen werden nicht unterstützt.</dd>
+ <dt>Klasse C (E-Schrott)</dt>
+ <dd>Der Scanner kann von Freie Software nicht unterstützt werden.</dd>
+ </dl>
+
+ <p> </p>
+
+ <a name="discover-hardware"></a><h2>Entdecken Sie Ihre Hardware</h2>
+ <cite>(Vielen Dank <a href="<?php echo $this->baseUrl;?>/issues/view/en/3/1/token">lluvia</a>)</cite>
+
+ <p>Um mehr Details über Ihre Hardware zu erfahren, beachten Sie bitte folgende Punkte:</p>
+ <dl>
+ <dt>Wie man die Modellbezeichnung des Notebooks herausfindet</dt>
+ <dd>Siehe das Typenschild unterhalb Ihres tragbaren Klapprechners.</dd>
+ <a name="model-name"></a><dt>Wie man den Modellnamen der Geräte herausfindet (wenn kein tragbarer Klapprechner)</dt>
+ <dd class="opt">Wenn das Gerät eingebaut ist (z. B. eine Grafikkarte)</dd>
+ <dd>Öffnen Sie ein Terminal („Eingabeaufforderung“) und geben Sie folgenden Befehl ein:</dd>
+ <dd><pre class="terminal">lspci</pre>
+ </dd>
+ <dd>oder</dd>
+ <dd><pre class="terminal">lspci &gt; DATEINAME # Ausgabe als Datei speichern</pre>
+ </dd>
+ <!--<dd>where "filename" is the name of the file</dd>-->
+ <dd>Es sollten PCI-Geräte ähnlich der folgenden angezeigt werden:</dd>
+ <dd><pre class="terminal">
+00:18.3 Host bridge: <b>Advanced Micro Devices [AMD] K8 [Athlon64/Opteron] Miscellaneous Control</b>
+03:00.0 Network controller: <b>Broadcom Corporation BCM4311 802.11b/g WLAN (rev 02)</b>
+05:00.0 VGA compatible controller: <b>nVidia Corporation G86 [GeForce 8400M GS] (rev a1)</b></pre>
+ </dd>
+ <dd class="note"><b>Hinweis:</b> The name of each device is written after the colon (see the text
+ in bold in the above list).</dd>
+ <dd class="opt">Wenn das Gerät ein USB-Gerät ist (bspw. ein externer WLAN-Stick)</dd>
+ <dd>Öffnen Sie ein Terminal („Eingabeaufforderung“) und geben Sie folgenden Befehl ein:</dd>
+ <dd><pre class="terminal">lsusb -v</pre>
+ </dd>
+ <dd>oder</dd>
+ <dd><pre class="terminal">lsusb -v &gt; DATEINAME # Ausgabe als Datei speichern</pre>
+ </dd>
+ <!-- dd>where "filename" is the name of the file.</dd -->
+ <dd>Es sollten USB-Geräte ähnlich der folgenden angezeigt werden:</dd>
+ <dd><pre class="terminal">
+Bus 001 Device 002: ID 0846:4260 NetGear, Inc. WG111v3 54 Mbps Wireless [realtek RTL8187B]
+Device Descriptor:
+ bLength 18
+ bDescriptorType 1
+ bcdUSB 2.00
+ bDeviceClass 0 (Defined at Interface level)
+ bDeviceSubClass 0
+ bDeviceProtocol 0
+ bMaxPacketSize0 64
+ idVendor 0x0846 NetGear, Inc.
+ idProduct 0x4260 <b>WG111v3 54 Mbps Wireless [realtek RTL8187B]</b>
+ bcdDevice 2.00
+ iManufacturer 1
+ iProduct 2
+ iSerial 3
+ ...
+ ...
+
+Bus 002 Device 003: ID 08ff:2580 AuthenTec, Inc. AES2501 Fingerprint Sensor
+Device Descriptor:
+ bLength 18
+ bDescriptorType 1
+ bcdUSB 1.10
+ bDeviceClass 255 Vendor Specific Class
+ bDeviceSubClass 255 Vendor Specific Subclass
+ bDeviceProtocol 255 Vendor Specific Protocol
+ bMaxPacketSize0 8
+ idVendor 0x08ff AuthenTec, Inc.
+ idProduct 0x2580 <b>AES2501 Fingerprint Sensor</b>
+ bcdDevice 6.23
+ iManufacturer 0
+ iProduct 1 Fingerprint Sensor
+ iSerial 0
+ bNumConfigurations 1
+ ...
+ ...
+ </pre>
+ </dd>
+ <dd class="note"><b>Hinweis:</b> Die Gerätebezeichnung wird in der Zeile „idProduct“ nach dem Doppelpunkt
+ angegeben (siehe Text in Fettdruck).</dd>
+ <!-- <dt>Wie man das Jahr der Vermarktung des Notebooks herausfindet</dt>
+ <dd>Öffnen Sie ein Terminal („Eingabeaufforderung“) und geben Sie folgenden Befehl ein:</dd>
+ <dd><pre class="terminal">sudo dmidecode| grep "Release Date"</pre></dd>
+ <dd class="sample">Es sollte ein Datum ähnlich dem <code>Release Date: 05/28/2011</code> (MM/TT/JJJJ) angezeigt werden.</dd -->
+ <dt>Wie man den verwendeten Betriebssystemkern („Kernel“) herausfindet</dt>
+ <dd>Öffnen Sie ein Terminal („Eingabeaufforderung“) und geben Sie folgenden Befehl ein:</dd>
+ <dd><pre class="terminal">uname -r</pre>
+ </dd>
+ <dt name="video-card">Wie man den Namen der Grafikkarte herausfindet</dt>
+ <dd>Öffnen Sie ein Terminal („Eingabeaufforderung“) und geben Sie folgenden Befehl ein:</dd>
+ <dd><pre class="terminal">sudo lspci</pre>
+ </dd>
+ <dd>Suchen Sie dann nach der Zeile mit der Zeichenfolge <strong><code>VGA</code></strong> oder
+ <strong><code>Display Controller</code></strong>. Alternativ können Sie auch folgenden Befehl versuchen:
+ </dd>
+ <dd><pre class="terminal">lspci | grep "Display controller"</pre>
+ </dd>
+ <dd>oder</dd>
+ <dd><pre class="terminal">lspci | grep "VGA"</pre>
+ </dd>
+ <a name="vendoridproductid"></a><dt>Wie man Anbieter- und Produkt-ID des Geräts herausfindet (VendorID:ProductID)</dt>
+ <dd><cite>(Vielen Dank an <a
+ href="http://trisquel.info/de/forum/h-nodecom-new-website-hardware-database#comment-5839">Michał Masłowski</a>
+ und <a href="http://trisquel.info/de/forum/h-nodecom-new-website-hardware-database#comment-5837">Julius22</a>)
+ </cite></dd>
+ <dd class="opt">Wenn das Gerät eingebaut ist (z. B. eine Grafikkarte)</dd>
+ <dd>Öffnen Sie ein Terminal („Eingabeaufforderung“) und geben Sie folgenden Befehl ein:</dd>
+ <dd><pre class="terminal">sudo lspci -nnk</pre>
+ </dd>
+ <dd>Es sollte eine Hardwareliste ähnlich der folgenden angezeigt werden:</dd>
+ <dd><pre class="terminal">
+03:00.0 Network controller [0280]: Broadcom Corporation BCM4311 802.11b/g WLAN [<b>14e4:4311</b>] (rev 02)
+ Kernel driver in use: b43-pci-bridge
+ Kernel modules: ssb
+05:00.0 VGA compatible controller [0300]: nVidia Corporation G86 [GeForce 8400M GS] [<b>10de:0427</b>] (rev a1)
+ Kernel modules: nouveau, nvidiafb</pre>
+ </dd>
+ <dd class="note"><b>Hinweis:</b> Die Zeichenfolgen in <b>fetter Schrift</b> und in den eckigen Klammern […
+ <strong>:</strong> …] sind die Daten, nach denen Sie gesucht haben. Die erste Zeichengruppe (vor dem
+ Doppelpunkt) ist die <b>Anbieter-ID</b>, die zweite Zeichengruppe (nach dem Doppelpunkt) die <b>Produkt-ID</b>.
+ Im obigen Beispiel wären Anbieter- und Produkt-ID-Code der WLAN-Karte (beachten Sie die Zeichenfolgen „Network
+ Controller“ und „WLAN“) <b>14e4:4311</b>, die der Grafikkarte (beachten Sie die Zeichenfolge „VGA“)
+ <b>10DE:0427</b>.</dd>
+ <dd class="opt">Wenn das Gerät ein USB-Gerät ist (bspw. ein externer USB-WLAN-Stick)</dd>
+ <dd>Öffnen Sie ein Terminal („Eingabeaufforderung“) und geben Sie folgenden Befehl ein:</dd>
+ <dd><pre class="terminal">sudo lsusb</pre>
+ </dd>
+ <dd>Es sollte eine Hardwareliste ähnlich der folgenden angezeigt werden:</dd>
+ <dd><pre class="terminal">Bus 001 Device 002: ID <b>0846:4260</b> NetGear, Inc. WG111v3 54 Mbps Wireless [realtek RTL8187B]<br>Bus 001 Device 001: ID <b>1d6b:0002</b> Linux Foundation 2.0 root hub<br>Bus 002 Device 003: ID <b>08ff:2580</b> AuthenTec, Inc. AES2501 Fingerprint Sensor<br></pre>
+ </dd>
+ <dd class="note"><b>Hinweis:</b> Die Zeichenfolgen in <b>fetter Schrift</b> und in den eckigen Klammern […] sind
+ die Daten, nach denen Sie gesucht haben. Die erste Zeichengruppe (vor dem Doppelpunkt) ist die
+ <b>Anbieter-ID</b>, die zweite Zeichengruppe (nach dem Doppelpunkt) die <b>Produkt-ID</b>. Im obigen Beispiel
+ wären Anbieter- und Produkt-ID-Code des externen USB-WLAN-Sticks (beachten Sie die Zeichenfolge „Wireless“)
+ <b>0846:4260</b>.</dd>
+ <dt name="vga">Wie man herausfindet, ob die Grafikkarte (über den VGA-Standard hinaus) funktioniert</dt>
+ <dd>Installieren Sie das Paket <code><a href="http://rss-glx.sourceforge.net/">rss-glx</a></code> mittels
+ Paketverwaltung Ihrer Distribution oder Kompilieren Sie den Quellcode und testen einige Bildschirmschoner (z. B.
+ <b>Skyrocket</b> oder <b>Solarwinds</b>). Überprüfen Sie, ob die Bildschirmschoner angezeigt werden können
+ (und/oder ruckelfrei wiedergegeben werden).
+ </dd>
+ <dt>Wie man herausfindet, ob die 3D-Beschleunigung funktioniert</dt>
+ <dd>Versuchen Sie, „compiz“ zu aktivieren.</dd>
+ <dt>Wie man den Namen Ihrer WLAN-Karte herausfindet</dt>
+ <dd>Öffnen Sie ein Terminal („Eingabeaufforderung“) und geben Sie folgenden Befehl ein:</dd>
+ <dd><pre class="terminal">sudo lspci</pre>
+ </dd>
+ <dd>Suchen Sie dann nach der Zeile mit der Zeichenfolge <b><samp>Wireless</samp></b> oder <b><samp>Network
+ Controller</samp></b>. Alternativ können Sie auch folgenden Befehle versuchen:
+ </dd>
+ <dd><pre class="terminal">lspci | grep "Wireless"</pre></dd>
+ <dd>oder</dd>
+ <dd><pre class="terminal">lspci | grep "Network"</pre>
+ </dd>
+ <dt>Wie man den verwendeten Druckertreiber herausfindet</dt>
+ <dd class="opt">Wenn Sie „cups“ verwenden</dd>
+ <dd>Öffnen Sie ein Terminal („Eingabeaufforderung“) und geben Sie folgenden Befehl ein:</dd>
+ <dd><pre class="terminal">dpkg-query -W -f '${Version}\n' cups</pre>
+ </dd>
+ <dt>How to discover the architecture of your notebook</dt>
+ <dd>Open a terminal and type the following command:</dd>
+ <dd><pre class="terminal">cat /proc/cpuinfo | grep "lm"</pre>
+ </dd>
+ <dd>If you get a message like this:</dd>
+ <dd><pre class="terminal">flags : fpu vme de pse tsc msr pae mce cx8 apic mtrr pge mca cmov pat pse36 clflush dts<br/>acpi mmx fxsr sse sse2 ss ht tm pbe nx lm constant_tsc arch_perfmon pebs bts aperfmperf pni dtes64<br/>monitor ds_cpl est tm2 ssse3 cx16 xtpr pdcm lahf_lm</pre>
+ </dd>
+ <dd>then you machine is x86-64/amd64 capable and you could choose a x86-64/amd64 distro to run on it</dd>
+ </dl>
+
+ <p> </p>
+
+ <a name="fully-free"></a><h2>Freie GNU/Linux-Distributionen</h2>
+
+ <p>Dies sind <a href="http://www.gnu.org/gnu/linux-and-gnu.de.html">GNU/Linux</a>-Distributionen, von denen wir von einer
+ festgelegten Richtlinie wissen, ausschließlich Freie Software zu verwenden und anzubieten. Unfreie Anwendungen,
+ unfreie Programmierplattformen, unfreie Treiber oder unfreie Firmware („BLOBs“) werden, auch wenn versehentlich
+ enthalten, entfernt. Weitere Informationen über <a href="http://www.gnu.org/distros/free-distros.html">Freie
+ GNU/Linux-Distribution</a> finden Sie unter <a
+ href="http://www.gnu.org/distros/free-system-distribution-guidelines.html">Richtlinien für Freie
+ Distributionen</a>.</p>
+
+ <p><strong>Alle Distributionen können auf der Festplatte Ihres Rechners installiert und die meisten Live ausgeführt
+ werden.</strong></p>
+
+ <p>(In alphabetischer Reihenfolge)</p>
+
+ <ul>
+ <li><a href="http://www.blagblagblag.org/">BLAG GNU/Linux</a></li>
+ <li><a href="http://www.dragora.org">Dragora GNU/Linux</a></li>
+ <li><a href="http://dynebolic.org/">Dynebolic GNU/Linux</a></li>
+ <li><a href="http://www.gnewsense.org/">gNewSense GNU/Linux</a></li>
+ <li><a href="http://www.musix.org.ar/">Musix GNU+Linux</a></li>
+ <li><a href="https://parabolagnulinux.org/">Parabola GNU/Linux</a></li>
+ <li><a href="http://trisquel.info/">Trisquel GNU/Linux</a></li>
+ <li><a href="http://www.ututo.org/www/">Ututo GNU/Linux</a></li>
+ <li><a href="http://venenux.org/">Venenux GNU/Linux</a></li>
+ </ul>
+ </div>
+ \ No newline at end of file
diff --git a/h-source/Application/Views/Desktop/Help/index_es.php b/h-source/Application/Views/Desktop/Help/index_es.php
new file mode 100644
index 0000000..c3ceb02
--- /dev/null
+++ b/h-source/Application/Views/Desktop/Help/index_es.php
@@ -0,0 +1,442 @@
+<?php if (!defined('EG')) die('Direct access not allowed!'); ?>
+
+<?php
+// h-source, a web software to build a community of people that want to share their hardware information.
+// Copyright (C) 2010, 2011 Antonio Gallo (h-source-copyright.txt)
+// Copyright (C) 2011 Joerg Kohne
+//
+// This file is part of h-source
+//
+// h-source is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// h-source is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with h-source. If not, see <http://www.gnu.org/licenses/>.
+?>
+
+<div class="help_external_box">
+
+ <div class="position_tree_box">
+ <a href="<?php echo $this->baseUrl."/home/index/$lang";?>">Inicio</a> &raquo; <?php echo gtext("Help");?>
+ </div>
+
+ <div class="help_tables_of_contents">
+ Tabla de contenidos
+ <ul>
+ <li><a href="<?php echo $this->currPage."/$lang#wiki-syntax";?>">Sintaxis del Wiki</a></li>
+ <li><a href="<?php echo $this->currPage."/$lang#compatibility";?>">Clases de Compatibilidad</a></li>
+ <li><a href="<?php echo $this->currPage."/$lang#discover-hardware";?>">Descubra su hardware</a></li>
+ <li><a href="<?php echo $this->currPage."/$lang#fully-free";?>">Lista de las distribuciones GNU/Linux completamente libres</a></li>
+ </ul>
+ </div>
+
+ <a name="wiki-syntax"></a><h2>Sintaxis del Wiki</h2>
+
+ <h3>Lista de las etiquetas wiki de <?php echo Website::$generalName;?>
+ </h3>
+
+ <table class="wiki">
+ <thead>
+ <tr>
+ <th>nombre</th>
+ <th>etiqueta</th>
+ <th>resultado</th>
+ <th>descripción</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td>bold</td>
+ <td>[b]texto[/b]</td>
+ <td><b>texto</b></td>
+ <td>texto en negrita</td>
+ </tr>
+ <tr>
+ <td>italic</td>
+ <td>[i]texto[/i]</td>
+ <td><i>texto</i></td>
+ <td>texto en cursiva</td>
+ </tr>
+ <tr>
+ <td>del</td>
+ <td>[del]texto[/del]</td>
+ <td><del>texto</del></td>
+ <td>texto eliminado</td>
+ </tr>
+ <tr>
+ <td>underline</td>
+ <td>[u]texto[/u]</td>
+ <td><u>texto</u></td>
+ <td>texto subrayado</td>
+ </tr>
+ <tr>
+ <td>head 1</td>
+ <td>[h1]texto[/h1]</td>
+ <td>
+ <div class="div_h1">
+ texto</div>
+ </td>
+ <td>encabezado 1</td>
+ </tr>
+ <tr>
+ <td>head 2</td>
+ <td>[h2]texto[/h2]</td>
+ <td>
+ <div class="div_h2">
+ texto</div>
+ </td>
+ <td>encabezado 2</td>
+ </tr>
+ <tr>
+ <td>head 3</td>
+ <td>[h3]texto[/h3]</td>
+ <td>
+ <div class="div_h3">
+ texto</div>
+ </td>
+ <td>encabezado 3</td>
+ </tr>
+ <tr>
+ <td>paragraph</td>
+ <td>[p]texto[/p]</td>
+ <td><p>texto</p>
+ </td>
+ <td>nuevo párrafo</td>
+ </tr>
+ <tr>
+ <td>list item</td>
+ <td>[*]objeto[/*]</td>
+ <td><ul>
+ <li>objeto</li>
+ </ul>
+ </td>
+ <td>agrega un objeto a la lista</td>
+ </tr>
+ <tr>
+ <td>lista </td>
+ <td><ul style="list-style-type:none;">
+ <li>[list]</li>
+ <li><ul style="list-style-type:none;">
+ <li>[*]first item[/*]</li>
+ <li>[*]second item[/*]</li>
+ </ul>
+ </li>
+ <li>[/list]</li>
+ </ul>
+ </td>
+ <td><ul>
+ <li>first item</li>
+ <li>second item</li>
+ </ul>
+ </td>
+ <td>hace una lista de objetos</td>
+ </tr>
+ <tr>
+ <td>numbered list</td>
+ <td><ul style="list-style-type:none;">
+ <li>[enum]</li>
+ <li><ul style="list-style-type:none;">
+ <li>[*]first item[/*]</li>
+ <li>[*]second item[/*]</li>
+ </ul>
+ </li>
+ <li>[/enum]</li>
+ </ul>
+ </td>
+ <td><ol>
+ <li>first item</li>
+ <li>second item</li>
+ </ol>
+ </td>
+ <td>hace una lista numerada de objetos</td>
+ </tr>
+ <tr>
+ <td>code</td>
+ <td>[code]código[/code]</td>
+ <td><pre class="code_pre">código</pre>
+ </td>
+ <td>agrega código</td>
+ </tr>
+ <!--
+ <tr>
+ <td>simple link</td>
+ <td>[a]url[/a]</td>
+ <td>&lt;a href="url"&gt;url&lt;/a&gt;</td>
+ <td>enlace simple</td>
+ </tr>
+ -->
+ <tr>
+ <td>link with text</td>
+ <td>[a]url|text[/a]</td>
+ <td><a href="url">text</a></td>
+ <td>enlace con texto</td>
+ </tr>
+ <tr>
+ <td>notebook</td>
+ <td>[notebook]1234:5678[/notebook]</td>
+ <td>1234:5678</td>
+ <td>enlace al computador portátil con el identificador id (el identificador de cada modelo de dispositivo esta escrito en la
+ página del dispositivo mismo, seguido del nombre del modelo)</td>
+ </tr>
+ <tr>
+ <td>wifi</td>
+ <td>[wifi]1234:5678[/wifi]</td>
+ <td>1234:5678</td>
+ <td>enlace al wifi con el identificador id (el identificador de cada modelo de dispositivo esta escrito en la
+ página del dispositivo mismo, seguido del nombre del modelo)</td>
+ </tr>
+ <tr>
+ <td>videocard</td>
+ <td>[videocard]1234:5678/videocard]</td>
+ <td>1234:5678</td>
+ <td>enlace a la tarjeta de video con el identificador id (el identificador de cada modelo de dispositivo esta
+ escrito en la página del dispositivo mismo, seguido del nombre del modelo)</td>
+ </tr>
+ </tbody>
+ </table>
+
+ <p></p>
+
+ <a name="compatibility"></a><h2>Clases de Compatibilidad</h2>
+
+ <a name="notebook-compatibility"></a><h3>Computadores portátiles</h3>
+ <dl>
+ <dt>Clase A (Platino)</dt>
+ <dd>Todos los dispositivos funcionan con un buen desempeño. </dd>
+ <dd class="example">Ejemplo: todos los dispositivos funcionan, la aceleración 3D esta soportada</dd>
+ <dt>Clase B (Oro)</dt>
+ <dd>Todos los dispositivos funcionan pero no a su rendimiento completo. </dd>
+ <dd class="example">Un ejemplo típico es: todos los dispositivos funcionan, pero la aceleración 3D no esta
+ soportada</dd>
+ <dt>Clase C (Plata)</dt>
+ <dd>Un dispositivo principal no esta soportado. </dd>
+ <dd class="example">Ejemplo: la tarjeta inalámbrica interna no funciona. Necesita una tarjeta USB externa</dd>
+ <dt>Clase D (Bronce)</dt>
+ <dd>Más de un dispositivo no esta soportado</dd>
+ <dt>Clase E (Basura)</dt>
+ <dd>El equipo no funciona con software libre</dd>
+ </dl>
+
+ <a name="printer-compatibility"></a><h3>Impresoras</h3>
+ <dl>
+ <dt>Clase A (Completo)</dt>
+ <dd>Todos los dispositivos funcionan y las características soportadas</dd>
+ <dt>Clase B (Parcial)</dt>
+ <dd>La impresión esta soportada pero a velocidad o calidad limitada; escaneo y/o envío por fax en algunos
+ dispositivos multifuncionales pueden no estar soportados</dd>
+ <dt>Clase C (Ninguno)</dt>
+ <dd>La impresora no funciona con software libre</dd>
+ </dl>
+
+ <a name="scanner-compatibility"></a><h3>Escáners</h3>
+ <dl>
+ <dt>Clase A (Completo)</dt>
+ <dd>Todos los dispositivos funcionan y las características soportadas</dd>
+ <dt>Clase B (Parcial)</dt>
+ <dd>El escanéo es soportado pero a velocidad o calidad limitada; otras características pueden no estar soportadas</dd>
+ <dt>Clase C (Ninguno)</dt>
+ <dd>El escaner no funciona con software libre</dd>
+ </dl>
+
+ <p> </p>
+
+ <a name="discover-hardware"></a><h2>Descubra su hardware</h2>
+ <cite>(Gracias <a href="<?php echo $this->baseUrl;?>/issues/view/en/3/1/token">lluvia</a>)</cite>
+
+ <p>En orden de conocer los detalles de su hardware puede seguir las siguientes acciones:</p>
+ <dl>
+ <dt>Como descubrir el modelo de su computador portátil</dt>
+ <dd>Vea debajo de su computador portátil o subportátil</dd>
+ <a name="model-name"></a><dt>Como descubrir el nombre del modelo de su dispositivo (si no es un computador portátil)</dt>
+ <dd class="opt">Si el dispositivo es integrado (ejemplo: una tarjeta de video)</dd>
+ <dd>Abra una terminal y escriba la siguiente orden:</dd>
+ <dd><pre class="terminal">lspci</pre>
+ </dd>
+ <dd>o</dd>
+ <dd><pre class="terminal">lspci &gt; FILENAME # output to a file</pre>
+ </dd>
+ <!-- dd>where "filename" is the name of the file</dd -->
+ <dd>Obtendrá la lista de sus dispositivos PCI, similar a la mostrada debajo</dd>
+ <dd><pre class="terminal">
+00:18.3 Host bridge: <b>Advanced Micro Devices [AMD] K8 [Athlon64/Opteron] Miscellaneous Control</b>
+03:00.0 Network controller: <b>Broadcom Corporation BCM4311 802.11b/g WLAN (rev 02)</b>
+05:00.0 VGA compatible controller: <b>nVidia Corporation G86 [GeForce 8400M GS] (rev a1)</b>
+ </pre>
+ </dd>
+ <dd>El nombre de cada dispositivo esta escrito después de los dos puntos (vea el texto en negrita en la lista superior)</dd>
+ <dd class="opt">Si el dispositivo es un dispositivo USB (ejemplo: una tarjeta externa USB de red inalámbrica)</dd>
+ <dd>Abra una terminal y escriba la siguiente orden:</dd>
+ <dd><pre class="terminal">lsusb -v</pre>
+ </dd>
+ <dd>o</dd>
+ <dd><pre class="terminal">lsusb -v &gt; filename # write the output to a file</pre>
+ </dd>
+ <!-- dd>where "filename" is the name of the file</dd -->
+ <dd>Obtendrá la lista de sus dispositivos USB, similar a la mostrada debajo</dd>
+ <dd><pre class="terminal">
+Bus 001 Device 002: ID 0846:4260 NetGear, Inc. WG111v3 54 Mbps Wireless [realtek RTL8187B]
+Device Descriptor:
+ bLength 18
+ bDescriptorType 1
+ bcdUSB 2.00
+ bDeviceClass 0 (Defined at Interface level)
+ bDeviceSubClass 0
+ bDeviceProtocol 0
+ bMaxPacketSize0 64
+ idVendor 0x0846 NetGear, Inc.
+ idProduct 0x4260 <b>WG111v3 54 Mbps Wireless [realtek RTL8187B]</b>
+ bcdDevice 2.00
+ iManufacturer 1
+ iProduct 2
+ iSerial 3
+ ...
+ ...
+
+Bus 002 Device 003: ID 08ff:2580 AuthenTec, Inc. AES2501 Fingerprint Sensor
+Device Descriptor:
+ bLength 18
+ bDescriptorType 1
+ bcdUSB 1.10
+ bDeviceClass 255 Vendor Specific Class
+ bDeviceSubClass 255 Vendor Specific Subclass
+ bDeviceProtocol 255 Vendor Specific Protocol
+ bMaxPacketSize0 8
+ idVendor 0x08ff AuthenTec, Inc.
+ idProduct 0x2580 <b>AES2501 Fingerprint Sensor</b>
+ bcdDevice 6.23
+ iManufacturer 0
+ iProduct 1 Fingerprint Sensor
+ iSerial 0
+ bNumConfigurations 1
+ ...
+ ...
+ </pre>
+ </dd>
+ <dd>El nombre de cada disposiitivo es escrito en la fila comenzando con "idProduct" (vea el texto en negritas en la lista superior)</dd>
+ <dt>Como descubrir el año de comercialización de su computador portátil</dt>
+ <dd>Abra una terminal y escriba la siguiente orden:</dd>
+ <dd><pre class="terminal">sudo dmidecode| grep "Release Date"</pre>
+ </dd>
+ <dt>Como descubrir la versión de kernel que esta usando</dt>
+ <dd>Abra una terminal y escriba la siguiente orden:</dd>
+ <dd><pre class="terminal">uname -r</pre>
+ </dd>
+ <dt>Como descubrir el nombre de su tarjeta de video</dt>
+ <dd>Abra una terminal y escriba la siguiente orden:</dd>
+ <dd><pre class="terminal">sudo lspci</pre>
+ </dd>
+ <dd>Después busque por la linea que contenga la cadena VGA o Display controller. También puede usar uno de las
+ siguientes ordenes:</dd>
+ <dd><pre class="terminal">lspci | grep "Display controller"</pre>
+ </dd>
+ <dd>o</dd>
+ <dd><pre class="terminal">lspci | grep "VGA"</pre>
+ </dd>
+ <a name="vendoridproductid"></a><dt>Como descubrir el ID del vendedor y el ID del producto de su dispositivo (código
+ VendorID:ProductID)</dt>
+ <dd><cite>(Gracias <a
+ href="http://trisquel.info/es/forum/h-nodecom-new-website-hardware-database#comment-5839">Michał Masłowski</a>
+ y <a
+ href="http://trisquel.info/es/forum/h-nodecom-new-website-hardware-database#comment-5837">Julius22</a>)</cite>
+ </dd>
+ <dd class="opt">Si el dispositivo es integrado (ejemplo: una tarjeta de video)</dd>
+ <dd>Abra una terminal y escriba la siguiente orden:</dd>
+ <dd><pre class="terminal">sudo lspci -nnk</pre>
+ </dd>
+ <dd>Debe de obtener una lista de hardware similar a la escriba debajo</dd>
+ <dd><pre class="terminal">
+03:00.0 Network controller [0280]: Broadcom Corporation BCM4311 802.11b/g WLAN [<b>14e4:4311</b>] (rev 02)
+ Kernel driver in use: b43-pci-bridge
+ Kernel modules: ssb
+05:00.0 VGA compatible controller [0300]: nVidia Corporation G86 [GeForce 8400M GS] [<b>10de:0427</b>] (rev a1)
+ Kernel modules: nouveau, nvidiafb</pre>
+ </dd>
+ <dd>Las cadenas en <b>negritas</b> y colocadas en los corchetes (en la lista superior) son los códigos que esta
+ buscando. El primer grupo de dígitos (antes de los dos puntos) son el <b>VendorID</b>, el segundo grupo de
+ dígitos son el <b>ProductID</b>. En el ejemplo superior: el código VendorID:ProductID de la tarjeta
+ inalámbrica (note las cadenas "Network controller" y "WLAN") es <b>14e4:4311</b> mientras el código
+ VendorID:ProductID de la tarjeta de video (note la cadena "VGA") es <b>10de:0427</b></dd>
+ <dd class="opt">Si el dispositivo es un dispositivo USB (ejemplo: una tarjeta USB externa)</dd>
+ <dd>Abra una terminal y escriba la siguiente orden:</dd>
+ <dd><pre class="terminal">sudo lsusb</pre>
+ </dd>
+ <dd>Debe de obtener una lista de hardware similar a la descrita a continuación</dd>
+ <dd><pre class="terminal">
+Bus 001 Device 002: ID <b>0846:4260</b> NetGear, Inc. WG111v3 54 Mbps Wireless [realtek RTL8187B]
+Bus 001 Device 001: ID <b>1d6b:0002</b> Linux Foundation 2.0 root hub
+Bus 002 Device 003: ID <b>08ff:2580</b> AuthenTec, Inc. AES2501 Fingerprint Sensor</pre>
+ </dd>
+ <dd>Las cadenas en <b>negritas</b> (en la lista superior) son el código que busca. El primer grupo de dígitos
+ (antes de los dos puntos) son el <b>VendorID</b>, el segundo grupo de dígitos son el <b>ProductID</b>. En el
+ ejemplo superior: el código VendorID:ProductID de la tarjeta inalámbrica USB externa (note la cadena
+ "Wireless") es <b>0846:4260</b></dd>
+ <dt>Como descubrir si la tarjeta de video funciona</dt>
+ <dd>Instale <code><a href="http://rss-glx.sourceforge.net/">rss-glx</a></code> por lo medios del administrador
+ de paquetes de su distribución o por medio de compilar el código fuente y pruebe algunos protectores de
+ pantalla (por ejemplo <b>Skyrocket</b> o <b>Solarwinds</b>). Revise si puede ejecutar el protector de pantalla
+ (y/o si puede mostrarlo suavemente)
+ </dd>
+ <dt>Como descubrir si la aceleración 3D funciona</dt>
+ <dd>Intente activar compiz</dd>
+ <dt>Como descubrir el nombre de su tarjeta de inalámbrica</dt>
+ <dd>Abra una terminal y escriba la siguiente orden:</dd>
+ <dd><pre class="terminal">sudo lspci</pre>
+ </dd>
+ <dd>Después busque por la linea que contenga la cadena <samp><b>Wireless</b></samp> o <samp><b>Network
+ controller</b></samp>. También puede intentar una de las siguientes ordenes</dd>
+ <dd><pre class="terminal">lspci | grep "Wireless"</pre>
+ </dd>
+ <dd>o</dd>
+ <dd><pre class="terminal">lspci | grep "Network"</pre>
+ </dd>
+ <dt>Como descubrir el driver de la impresora que esta usando</dt>
+ <dd class="opt">Si usa cups</dd>
+ <dd>Abra una terminal y escriba la orden siguiente:</dd>
+ <dd><pre class="terminal">dpkg-query -W -f '${Version}\n' cups</pre>
+ </dd>
+ <dt>Como descubrir la arquitectura de su computador portátil</dt>
+ <dd>Abra una terminal y escriba la orden siguiente:</dd>
+ <dd><pre class="terminal">cat /proc/cpuinfo | grep "lm"</pre>
+ </dd>
+ <dd>Si obtiene un mensaje como este:</dd>
+ <dd><pre class="terminal">flags : fpu vme de pse tsc msr pae mce cx8 apic mtrr pge mca cmov pat pse36 clflush dts<br/>acpi mmx fxsr sse sse2 ss ht tm pbe nx lm constant_tsc arch_perfmon pebs bts aperfmperf pni dtes64<br/>monitor ds_cpl est tm2 ssse3 cx16 xtpr pdcm lahf_lm</pre>
+ </dd>
+ <dd>entonces su equipo es compatible con x86-64/amd64 y podría elegir una distro x86-64/amd64 para correr en él.</dd>
+ </dl>
+
+ <p> </p>
+
+ <a name="fully-free"></a><h2>Lista de las distribuciones GNU/Linux completamente libres</h2>
+
+ <p>A continuación se enlistan las distribuciones <a href="http://www.gnu.org/gnu/linux-and-gnu.es.html">GNU/Linux</a> que sabemos tiene un
+ compromiso firme en su política para solo incluir y solo proponer software libre. Estas rechazan aplicaciones no libres, plataformas de
+ programación no libres, controladores no libres, o “blobs” de firmware no libre. Si por error llegan a incluirlo, lo eliminarán. Para
+ aprender más acerca de que hace una <a href="http://www.gnu.org/distros/free-distros.es.html">distribución GNU/Linux libre</a>,
+ vea las <a href="http://www.gnu.org/distros/free-system-distribution-guidelines.es.html">pautas para distribuciones de sistemas
+ libres</a> de GNU.</p>
+
+ <p><strong>Todas las distribuciones que aparecen a continuación se pueden instalar en el disco duro y muchas funcionan
+ sin instalación.</strong></p>
+
+ <p>(En orden alfabético)</p>
+
+ <ul>
+ <li><a href="http://www.blagblagblag.org/">BLAG GNU/Linux</a></li>
+ <li><a href="http://www.dragora.org">Dragora GNU/Linux</a></li>
+ <li><a href="http://dynebolic.org/">Dynebolic GNU/Linux</a></li>
+ <li><a href="http://www.gnewsense.org/">gNewSense GNU/Linux</a></li>
+ <li><a href="http://www.musix.org.ar/">Musix GNU+Linux</a></li>
+ <li><a href="https://parabolagnulinux.org/">Parabola GNU/Linux</a></li>
+ <li><a href="http://trisquel.info/">Trisquel GNU/Linux</a></li>
+ <li><a href="http://www.ututo.org/www/">Ututo GNU/Linux</a></li>
+ <li><a href="http://venenux.org/">Venenux GNU/Linux</a></li>
+ </ul>
+ </div>
+
diff --git a/h-source/Application/Views/Desktop/Help/index_fr.php b/h-source/Application/Views/Desktop/Help/index_fr.php
new file mode 100644
index 0000000..c3a507b
--- /dev/null
+++ b/h-source/Application/Views/Desktop/Help/index_fr.php
@@ -0,0 +1,434 @@
+<?php if (!defined('EG')) die('Direct access not allowed!'); ?>
+
+<?php
+// h-source, a web software to build a community of people that want to share their hardware information.
+// Copyright (C) 2010, 2011 Antonio Gallo (h-source-copyright.txt)
+// Copyright (C) 2011 Joerg Kohne
+//
+// This file is part of h-source
+//
+// h-source is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// h-source is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with h-source. If not, see <http://www.gnu.org/licenses/>.
+?>
+
+<div class="help_external_box">
+
+ <div class="position_tree_box">
+ <a href="<?php echo $this->baseUrl."/home/index/$lang";?>">Home</a> &raquo; <?php echo gtext("Help");?>
+ </div>
+
+ <div class="help_tables_of_contents">
+ Sommaire
+ <ul>
+ <li><a href="<?php echo $this->currPage."/$lang#wiki-syntax";?>">Syntaxe Wiki</a></li>
+ <li><a href="<?php echo $this->currPage."/$lang#compatibility";?>">Niveau de compatibilitée</a></li>
+ <li><a href="<?php echo $this->currPage."/$lang#discover-hardware";?>">Découvrez votre matériel</a></li>
+ <li><a href="<?php echo $this->currPage."/$lang#fully-free";?>">Liste de distribution GNU/Linux entièrement libre</a></li>
+ </ul>
+ </div>
+
+ <a name="wiki-syntax"></a><h2>Syntaxe Wiki</h2>
+
+ <h3>Liste des tags Wiki sur <?php echo Website::$generalName;?>
+ </h3>
+
+ <table class="help_wiki_table" width="100%" border="1">
+ <thead>
+ <tr>
+ <th>name</th>
+ <th>tag</th>
+ <th>result</th>
+ <th width="40%">description</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td>bold</td>
+ <td>[b]text[/b]</td>
+ <td><b>text</b></td>
+ <td>text bold</td>
+ </tr>
+ <tr>
+ <td>italic</td>
+ <td>[i]text[/i]</td>
+ <td><i>text</i></td>
+ <td>text italic</td>
+ </tr>
+ <tr>
+ <td>del</td>
+ <td>[del]text[/del]</td>
+ <td><del>text</del></td>
+ <td>text deleted</td>
+ </tr>
+ <tr>
+ <td>underline</td>
+ <td>[u]text[/u]</td>
+ <td><u>text</u></td>
+ <td>text underlined</td>
+ </tr>
+ <tr>
+ <td>head 1</td>
+ <td>[h1]text[/h1]</td>
+ <td>
+ <div class="div_h1">
+ text</div>
+ </td>
+ <td>head 1</td>
+ </tr>
+ <tr>
+ <td>head 2</td>
+ <td>[h2]text[/h2]</td>
+ <td>
+ <div class="div_h2">
+ text</div>
+ </td>
+ <td>head 2</td>
+ </tr>
+ <tr>
+ <td>head 3</td>
+ <td>[h3]text[/h3]</td>
+ <td>
+ <div class="div_h3">
+ text</div>
+ </td>
+ <td>head 3</td>
+ </tr>
+ <tr>
+ <td>paragraph</td>
+ <td>[p]text[/p]</td>
+ <td><p>text</p>
+ </td>
+ <td>new paragraph</td>
+ </tr>
+ <tr>
+ <td>list item</td>
+ <td>[*]item[/*]</td>
+ <td><ul>
+ <li>item</li>
+ </ul>
+ </td>
+ <td>ad an item to a list</td>
+ </tr>
+ <tr>
+ <td>List </td>
+ <td><ul style="list-style-type:none;">
+ <li>[list]</li>
+ <li><ul style="list-style-type:none;">
+ <li>[*]first item[/*]</li>
+ <li>[*]second item[/*]</li>
+ </ul>
+ </li>
+ <li>[/list]</li>
+ </ul>
+ </td>
+ <td><ul>
+ <li>first item</li>
+ <li>second item</li>
+ </ul>
+ </td>
+ <td>make a list of items</td>
+ </tr>
+ <tr>
+ <td>Numbered list </td>
+ <td><ul style="list-style-type:none;">
+ <li>[enum]</li>
+ <li><ul style="list-style-type:none;">
+ <li>[*]first item[/*]</li>
+ <li>[*]second item[/*]</li>
+ </ul>
+ </li>
+ <li>[/enum]</li>
+ </ul>
+ </td>
+ <td><ol>
+ <li>first item</li>
+ <li>second item</li>
+ </ol>
+ </td>
+ <td>make a numbered list of items</td>
+ </tr>
+ <tr>
+ <td>code</td>
+ <td>[code]some code[/code]</td>
+ <td><pre class="code_pre">some code</pre>
+ </td>
+ <td>ad some code</td>
+ </tr>
+ <tr>
+ <td>simple link</td>
+ <td>[a]url[/a]</td>
+ <td><a href="url">url</a></td>
+ <td>simple link</td>
+ </tr>
+ <tr>
+ <td>link with text</td>
+ <td>[a]url|text[/a]</td>
+ <td><a href="url">text</a></td>
+ <td>link with text</td>
+ </tr>
+ <tr>
+ <td>notebook</td>
+ <td>[notebook]id[/notebook]</td>
+ <td> </td>
+ <td>link to the notebook with the identifier equal to id (the identifier of each device model is written in the
+ page of the device itself, next to the model name)</td>
+ </tr>
+ <tr>
+ <td>wifi</td>
+ <td>[wifi]id[/wifi]</td>
+ <td> </td>
+ <td>link to the wifi with the identifier equal to id (the identifier of each device model is written in the page
+ of the device itself, next to the model name)</td>
+ </tr>
+ <tr>
+ <td>videocard</td>
+ <td>[videocard]id[/videocard]</td>
+ <td> </td>
+ <td>link to the videocard with the identifier equal to id (the identifier of each device model is written in the
+ page of the device itself, next to the model name)</td>
+ </tr>
+ </tbody>
+ </table>
+
+ <p> </p>
+
+ <a name="compatibility"></a><h2>Niveau de compatibilitée</h2>
+
+ <a name="notebook-compatibility"></a><h3>Notebooks</h3>
+ <dl>
+ <dt>Classe A (Platinium)</dt>
+ <dd>Tout le matériel du notebook fonctionne avec du logiciel libre. </dd>
+ <dd class="example">Exemple : la 3D fonctionne, le son et la wifi également</dd>
+ <dt>Classe B (Or)</dt>
+ <dd>Tout le matériel du notebook fonctionne, mais avec des performances réduites. </dd>
+ <dd class="example">Exemple : la carte graphique est reconnues mais la 3D ne fonctionne pas</dd>
+ <dt>Classe C (Argent)</dt>
+ <dd>Un matériel principal ne fonctionne pas. </dd>
+ <dd class="example">Exemple : La carte wifi ne fonctionne pas</dd>
+ <dt>Classe D (Bronze)</dt>
+ <dd>Plus d'un matériel ne fonctionne pas avec du logiciel libre</dd>
+ <dt>Classe E (Poubelle)</dt>
+ <dd>Aucun matériel ne fonctionne avec du logiciel libre</dd>
+ </dl>
+
+ <a name="printer-compatibility"></a><h3>Imprimantes</h3>
+ <dl>
+ <dt>Classe A (Complet)</dt>
+ <dd>Toutes les fonctionnalitées de l'imprimante fonctionne avec du logiciel libre</dd>
+ <dt>Classe B (Partielle)</dt>
+ <dd>La fonction d'impression fonctionne, mais à une vitesse ou qualitée limitée. </dd>
+ <dd class="example">Exemple : Le scan ou le fax sur certains appareils peut ne pas être supportés</dd>
+ <dt>Classe C (Aucun)</dt>
+ <dd>L'imprimante ne fonctionne pas avec du logiciel libre</dd>
+ </dl>
+
+ <a name="scanner-compatibility"></a><h3>Scanners</h3>
+ <dl>
+ <dt>Classe A (Complet)</dt>
+ <dd>Toutes les fonctionnalitées du scanner sont supportées</dd>
+ <dt>Classe B (Partielle)</dt>
+ <dd>Le scanner fonctionne mais à une vitesse ou qualitée limitée, d'autres fonctionnalitées peuvent ne pas
+ fonctionner</dd>
+ <dt>Classe C (Aucun)</dt>
+ <dd>Le scanner ne fonctionne pas avec du logiciel libre</dd>
+ </dl>
+
+ <a name="discover-hardware"></a><h2>Découvrez votre matériel</h2>
+ <cite>(Merci <a href="<?php echo $this->baseUrl;?>/issues/view/en/3/1/token">lluvia</a>) </cite>
+
+ <p>Pour connaitre votre matériel en détails, vous pouviez faire les choses suivantes:</p>
+ <dl>
+ <dt>Comment découvrir le modèle de votre notebook</dt>
+ <dd>See below your notebook or netbook</dd>
+ <a name="model-name"></a><dt>How to discover the model name of your device (if it is not a notebook)</dt>
+ <dd class="opt">If the device is integrated (example: a video card)</dd>
+ <dd>Open a terminal and type the following command:</dd>
+ <dd><pre class="terminal">lspci</pre>
+ </dd>
+ <dd>or</dd>
+ <dd><pre class="terminal">lspci &gt; FILENAME # output to a file</pre>
+ </dd>
+ <!-- dd>where "filename" is the name of the file</dd -->
+ <dd>You will obtain the list of your PCI devices, similar to the one written below</dd>
+ <dd><pre class="terminal">
+00:18.3 Host bridge: <b>Advanced Micro Devices [AMD] K8 [Athlon64/Opteron] Miscellaneous Control</b>
+03:00.0 Network controller: <b>Broadcom Corporation BCM4311 802.11b/g WLAN (rev 02)</b>
+05:00.0 VGA compatible controller: <b>nVidia Corporation G86 [GeForce 8400M GS] (rev a1)</b>
+ </pre>
+ </dd>
+ <dd>The name of each device is written after the colon (see the text in bold in the above
+ list)</dd>
+ <dd class="opt">If the device is an USB device (example: an external USB wifi card)</dd>
+ <dd>Open a terminal and type the following command:</dd>
+ <dd><pre class="terminal">lsusb -v</pre>
+ </dd>
+ <dd>or</dd>
+ <dd><pre class="terminal">lsusb -v &gt; FILENAME # output to a file</pre>
+ </dd>
+ <!-- dd>where "filename" is the name of the file</dd -->
+ <dd>You will obtain the list of your USB devices, similar to the one written below</dd>
+ <dd><pre class="terminal">
+Bus 001 Device 002: ID 0846:4260 NetGear, Inc. WG111v3 54 Mbps Wireless [realtek RTL8187B]
+Device Descriptor:
+ bLength 18
+ bDescriptorType 1
+ bcdUSB 2.00
+ bDeviceClass 0 (Defined at Interface level)
+ bDeviceSubClass 0
+ bDeviceProtocol 0
+ bMaxPacketSize0 64
+ idVendor 0x0846 NetGear, Inc.
+ idProduct 0x4260 <b>WG111v3 54 Mbps Wireless [realtek RTL8187B]</b>
+ bcdDevice 2.00
+ iManufacturer 1
+ iProduct 2
+ iSerial 3
+ ...
+ ...
+
+Bus 002 Device 003: ID 08ff:2580 AuthenTec, Inc. AES2501 Fingerprint Sensor
+Device Descriptor:
+ bLength 18
+ bDescriptorType 1
+ bcdUSB 1.10
+ bDeviceClass 255 Vendor Specific Class
+ bDeviceSubClass 255 Vendor Specific Subclass
+ bDeviceProtocol 255 Vendor Specific Protocol
+ bMaxPacketSize0 8
+ idVendor 0x08ff AuthenTec, Inc.
+ idProduct 0x2580 <b>AES2501 Fingerprint Sensor</b>
+ bcdDevice 6.23
+ iManufacturer 0
+ iProduct 1 Fingerprint Sensor
+ iSerial 0
+ bNumConfigurations 1
+ ...
+ ...
+ </pre>
+ </dd>
+ <dd>The name of each device is written at the row starting with "idProduct" (see the text in bold in the above
+ list)</dd>
+ <dt>Trouver la version du noyau linux libre que vous utilisez</dt>
+ <dd>Ouvrez un terminal et tapez la commande suivant:</dd>
+ <dd><pre class="terminal">uname -r</pre>
+ </dd>
+ <dt>Comment trouver le modèle de votre carte graphique</dt>
+ <dd>Ouvrez un terminal et taper la commande suivante:</dd>
+ <dd><pre class="terminal">sudo lspci</pre>
+ </dd>
+ <dd>Chercher la ligne qui contient le mot <b>VGA</b> ou <b>Display Controller</b>. Vous pouvez aussi essayer l'une
+ des commandes suivantes:</dd>
+ <dd><pre class="terminal">lspci | grep "Display controller"</pre>
+ </dd>
+ <dd>ou</dd>
+ <dd><pre class="terminal">lspci | grep "VGA"</pre>
+ </dd>
+ <a name="vendoridproductid"></a><dt>Comment connaitre le VendorID ou le ProductID (VendorID:ProductID code)</dt>
+ <dd><cite>(Merci à <a
+ href="http://trisquel.info/en/forum/h-nodecom-new-website-hardware-database#comment-5839">Michał Masłowski</a>
+ et <a
+ href="http://trisquel.info/en/forum/h-nodecom-new-website-hardware-database#comment-5837">Julius22</a>)</cite>
+ </dd>
+ <dd class="opt">Si le matériel est intégré (example : une puce vidéo)</dd>
+ <dd>Ouvrez un terminal sudo et taper la commande suivante:</dd>
+ <dd><pre class="terminal">sudo lspci -nnk</pre>
+ </dd>
+ <dd>Vous devriez obtenir une liste de matériel similaire à celle-ci</dd>
+ <dd><pre class="terminal">
+03:00.0 Network controller [0280]: Broadcom Corporation BCM4311 802.11b/g WLAN [<b>14e4:4311</b>] (rev 02)
+ Kernel driver in use: b43-pci-bridge
+ Kernel modules: ssb
+05:00.0 VGA compatible controller [0300]: nVidia Corporation G86 [GeForce 8400M GS] [<b>10de:0427</b>] (rev a1)
+ Kernel modules: nouveau, nvidiafb</pre>
+ </dd>
+ <dd class="note"><span class="note">Note :</span>Les lignes en <b>gras</b> et placée entre crochet (dans la liste
+ ci-dessus) sont les lignes que vous recherchez. Le premier packet de numéros (avant la virgule) sont le
+ <b>VendorID</b>, le second sont le <b>ProductID</b>. Dans l’exemple ci dessus, le code VendorID:ProductID de la
+ carte wifi ( vous pouvez la remarquez grace aux mots "Network Controller" et "WLAN" ) est <b>14e4:4311</b></dd>
+ <dd class="opt">Si le périphérique est un périphérique USB : (exemple : une clé usb wifi)</dd>
+ <dd>Ouvrez un terminal et tapez:</dd>
+ <dd><pre class="terminal">sudo lsusb</pre>
+ </dd>
+ <dd>Vous devriez obtenir une liste de matériel similaire à celle ci</dd>
+ <dd><pre class="terminal">
+Bus 001 Device 002: ID <b>0846:4260</b> NetGear, Inc. WG111v3 54 Mbps Wireless [realtek RTL8187B]
+Bus 001 Device 001: ID <b>1d6b:0002</b> Linux Foundation 2.0 root hub
+Bus 002 Device 003: ID <b>08ff:2580</b> AuthenTec, Inc. AES2501 Fingerprint Sensor</pre>
+ </dd>
+ <dd class="note"><span class="note">Note :</span> Les lignes en <b>gras</b> (dans la liste du dessus) sont les
+ lignes que vous recherchez. Les premiers nombres (avant les deux points) sont le <b>VendorID</b>, les autres sont
+ le <b>ProductID</b>. Dans l'exemple ci-dessus : le code VendorID:ProductID de la carte usb wifi externe
+ (Remarquez la ligne Wireless) est <b>0846:4260</b></dd>
+ <dt>Comment savoir si votre carte graphique fonctionne</dt>
+ <dd>Installer <code><a href="http://rss-glx.sourceforge.net/">rss-glx</a></code> en utilisant le gestionnaire de
+ paquet de votre distribution ou en le compilant depuis les sources et essayez certains écran de veille (par
+ exemple <b>Skyrocket</b> ou <b>Solarwinds</b>). Essayer de faire fonctionner le fond d'écran, et/ou le faire
+ fonctionner fluidement.</dd>
+ <dt>Comment savoir si l'accélération 3D fonctionne</dt>
+ <dd>Essayer d’activer compiz</dd>
+ <dt>Comment decouvrir le nom de votre carte wifi</dt>
+ <dd>Ouvrez un terminal et taper la commande suivante:</dd>
+ <dd><pre class="terminal">sudo lspci</pre>
+ </dd>
+ <dd>Regardez ensuite les lignes <samp><b>Wireless</b></samp> ou <samp><b>Network controller</b></samp>. Vous pouvez
+ aussi essayer l'une de ses commandes:</dd>
+ <dd><pre class="terminal">lspci | grep "Wireless"</pre>
+ </dd>
+ <dd>ou</dd>
+ <dd><pre class="terminal">lspci | grep "Network"</pre>
+ </dd>
+ <dt>Comment connaitre le pilote d’imprimante que vous utilisez</dt>
+ <dd class="opt">Si vous utilisez cups</dd>
+ <dd>Ouvrez un terminal et taper ceci:</dd>
+ <dd><pre class="terminal">dpkg-query -W -f '${Version}\n' cups</pre>
+ </dd>
+ <dt>How to discover the architecture of your notebook</dt>
+ <dd>Open a terminal and type the following command:</dd>
+ <dd><pre class="terminal">cat /proc/cpuinfo | grep "lm"</pre>
+ </dd>
+ <dd>If you get a message like this:</dd>
+ <dd><pre class="terminal">flags : fpu vme de pse tsc msr pae mce cx8 apic mtrr pge mca cmov pat pse36 clflush dts<br/>acpi mmx fxsr sse sse2 ss ht tm pbe nx lm constant_tsc arch_perfmon pebs bts aperfmperf pni dtes64<br/>monitor ds_cpl est tm2 ssse3 cx16 xtpr pdcm lahf_lm</pre>
+ </dd>
+ <dd>then you machine is x86-64/amd64 capable and you could choose a x86-64/amd64 distro to run on it</dd>
+ </dl>
+
+ <p> </p>
+
+ <a name="fully-free"></a><h2>Liste de dristributions GNU/Linux entièrement libre</h2>
+
+ <p>Following are the <a href="/gnu/linux-and-gnu.html">GNU/Linux</a> distributions we know of which have a firm policy
+ commitment to only include and only propose free software. They reject non-free applications, non-free programming
+ platforms, non-free drivers, or non-free firmware “blobs”. If by mistake they do include any, they remove it. To
+ learn more about what makes for a <a href="http://www.gnu.org/distros/free-distros.html">free GNU/Linux
+ distribution</a>, see GNU <a href="http://www.gnu.org/distros/free-system-distribution-guidelines.html">Guidelines for
+ Free System Distributions</a>.</p>
+
+ <p>Toutes les distributions qui suivent sont installables sur un disque dur d'ordinateur et la plupart peuvent être
+ exécutées à partir d'un CD.</p>
+
+ <p>(Dans l'ordre alphabétique)</p>
+
+ <ul>
+ <li><a href="http://www.blagblagblag.org/">BLAG GNU/Linux</a></li>
+ <li><a href="http://www.dragora.org">Dragora GNU/Linux</a></li>
+ <li><a href="http://dynebolic.org/">Dynebolic GNU/Linux</a></li>
+ <li><a href="http://www.gnewsense.org/">gNewSense GNU/Linux</a></li>
+ <li><a href="http://www.musix.org.ar/">Musix GNU+Linux</a></li>
+ <li><a href="https://parabolagnulinux.org/">Parabola GNU/Linux</a></li>
+ <li><a href="http://trisquel.info/">Trisquel GNU/Linux</a></li>
+ <li><a href="http://www.ututo.org/www/">Ututo GNU/Linux</a></li>
+ <li><a href="http://venenux.org/">Venenux GNU/Linux</a></li>
+ </ul>
+
+ </div>
+ \ No newline at end of file
diff --git a/h-source/Application/Views/Desktop/Help/index_it.php b/h-source/Application/Views/Desktop/Help/index_it.php
new file mode 100644
index 0000000..6183d18
--- /dev/null
+++ b/h-source/Application/Views/Desktop/Help/index_it.php
@@ -0,0 +1,438 @@
+<?php if (!defined('EG')) die('Direct access not allowed!'); ?>
+
+<?php
+// h-source, a web software to build a community of people that want to share their hardware information.
+// Copyright (C) 2010, 2011 Antonio Gallo (h-source-copyright.txt)
+// Copyright (C) 2011 Joerg Kohne
+//
+// This file is part of h-source
+//
+// h-source is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// h-source is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with h-source. If not, see <http://www.gnu.org/licenses/>.
+?>
+
+<div class="help_external_box">
+
+ <div class="position_tree_box">
+ <a href="<?php echo $this->baseUrl."/home/index/$lang";?>">Home</a> &raquo; <?php echo gtext("Help");?>
+ </div>
+
+ <div class="help_tables_of_contents">
+ Table of contents
+ <ul>
+ <li><a href="<?php echo $this->currPage."/$lang#wiki-syntax";?>">Sintassi della Wiki</a></li>
+ <li><a href="<?php echo $this->currPage."/$lang#compatibility";?>">Classi di compatibilità</a></li>
+ <li><a href="<?php echo $this->currPage."/$lang#discover-hardware";?>">Scopri il tuo hardware</a></li>
+ <li><a href="<?php echo $this->currPage."/$lang#fully-free";?>">Lista delle distribuzioni Gnu/Linux completamente libere</a></li>
+ </ul>
+ </div>
+
+ <a name="wiki-syntax"></a><h2>Sintassi della Wiki</h2>
+
+ <h3 name="wiki-tag">Lista dei tag della wiki di <?php echo Website::$generalName;?>
+ </h3>
+
+ <table class="help_wiki_table" width="100%" border="1">
+ <thead>
+ <tr>
+ <th>nome</th>
+ <th>tag</th>
+ <th>risultato</th>
+ <th width="40%">descrizione</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td>grassetto</td>
+ <td>[b]text[/b]</td>
+ <td><b>text</b></td>
+ <td>testo in grassetto</td>
+ </tr>
+ <tr>
+ <td>corsivo</td>
+ <td>[i]text[/i]</td>
+ <td><i>text</i></td>
+ <td>testo corsivo</td>
+ </tr>
+ <tr>
+ <td>cancellare</td>
+ <td>[del]text[/del]</td>
+ <td><del>text</del></td>
+ <td>testo cancellato</td>
+ </tr>
+ <tr>
+ <td>sottolineare</td>
+ <td>[u]text[/u]</td>
+ <td><u>text</u></td>
+ <td>testo sottolineato</td>
+ </tr>
+ <tr>
+ <td>head 1</td>
+ <td>[h1]text[/h1]</td>
+ <td>
+ <div class="div_h1">
+ text</div>
+ </td>
+ <td>head 1</td>
+ </tr>
+ <tr>
+ <td>head 2</td>
+ <td>[h2]text[/h2]</td>
+ <td>
+ <div class="div_h2">
+ text</div>
+ </td>
+ <td>head 2</td>
+ </tr>
+ <tr>
+ <td>head 3</td>
+ <td>[h3]text[/h3]</td>
+ <td>
+ <div class="div_h3">
+ text</div>
+ </td>
+ <td>head 3</td>
+ </tr>
+ <tr>
+ <td>paragrafo</td>
+ <td>…[p]nuovo paragrafo[/p]</td>
+ <td>… <p>nuovo paragrafo</p>
+ </td>
+ <td>crea un nuovo paragrafo</td>
+ </tr>
+ <tr>
+ <td>Lista </td>
+ <td><ul style="list-style-type:none;">
+ <li>[list]</li>
+ <li><ul style="list-style-type:none;">
+ <li>[*]primo elemento[/*]</li>
+ <li>[*]secondo elemento[/*]</li>
+ </ul>
+ </li>
+ <li>[/list]</li>
+ </ul>
+ </td>
+ <td><ul>
+ <li>primo elemento</li>
+ <li>secondo elemento</li>
+ </ul>
+ </td>
+ <td>crea un elenco di item</td>
+ </tr>
+ <tr>
+ <td>Lista numerata </td>
+ <td><ul style="list-style-type:none;">
+ <li>[enum]</li>
+ <li><ul style="list-style-type:none;">
+ <li>[*]primo elemento[/*]</li>
+ <li>[*]secondo elemento[/*]</li>
+ </ul>
+ </li>
+ <li>[/enum]</li>
+ </ul>
+ </td>
+ <td><ol>
+ <li>primo elemento</li>
+ <li>secondo elemento</li>
+ </ol>
+ </td>
+ <td>crea un elenco numerato di item</td>
+ </tr>
+ <tr>
+ <td>item di un elenco</td>
+ <td>[*]elemento[/*]</td>
+ <td><ul>
+ <li>elemento</li>
+ </ul>
+ </td>
+ <td>aggiungi un item a un elenco</td>
+ </tr>
+ <tr>
+ <td>codice</td>
+ <td>[code]some code[/code]</td>
+ <td><pre class="code_pre">some code</pre>
+ </td>
+ <td>aggiungi del codice</td>
+ </tr>
+ <tr>
+ <td>link semplice</td>
+ <td>[a]url[/a]</td>
+ <td><a href="url">url</a></td>
+ <td>crea un link semplice</td>
+ </tr>
+ <tr>
+ <td>link con testo</td>
+ <td>[a]url|text[/a]</td>
+ <td><a href="url">text</a></td>
+ <td>crea un link con testo</td>
+ </tr>
+ <tr>
+ <td>notebook</td>
+ <td>[notebook]id[/notebook]</td>
+ <td>id</td>
+ <td>crea un link al notebook con l'identificatore corrispondente a id (l'identificatore di ogni modello di
+ dispositivo si trova nella pagina del dispositivo stesso, accanto al nome del modello</td>
+ </tr>
+ <tr>
+ <td>wifi</td>
+ <td>[wifi]id[/wifi]</td>
+ <td>id</td>
+ <td>crea un link alla wifi con l'identificatore corrispondente a id (l'identificatore di ogni modello di
+ dispositivo si trova nella pagina del dispositivo stesso, accanto al nome del modello)</td>
+ </tr>
+ <tr>
+ <td>scheda video</td>
+ <td>[videocard]id[/videocard]</td>
+ <td>id</td>
+ <td>crea un link alla scheda video con l'identificatore corrispondente a id (l'identificatore di ogni modello di
+ dispositivo si trova nella pagina del dispositivo stesso, accanto al nome del modello)</td>
+ </tr>
+ </tbody>
+ </table>
+
+ <p>&nbsp;</p>
+
+ <a name="compatibility"></a><h2>Classi di compatibilità</h2>
+
+ <a name="notebook-compatibility"></a><h3>Notebooks</h3>
+ <dl>
+ <dt>Classe A (Platino)</dt>
+ <dd>Tutti i dispositivi del portatile funzionano ad alte prestazioni. </dd>
+ <dd class="example">Per esempio: funzionano tutti i dispositivi, l'accelerazione 3D è supportata.</dd>
+ <dt>Classe B (Oro)</dt>
+ <dd>Tutti i dispositivi del portatile funzionano ma non a piene prestazioni. </dd>
+ <dd class="example">Esempio tipico: funzionano tutti i dispositivi, ma l'accelerazione 3D non è supportata.</dd>
+ <dt>Classe C (Argento)</dt>
+ <dd>Uno dei dispositivi principali non è supportato. </dd>
+ <dd class="example">Per esempio: la scheda wifi interna non funziona e serve una wifi esterna USB.</dd>
+ <dt>Classe D (Bronzo)</dt>
+ <dd>Più di uno dei dispositivi principali non è supportato.</dd>
+ <dt>Classe E (Spazzatura)</dt>
+ <dd>Il portatile non funziona con software libero.</dd>
+ </dl>
+
+ <a name="printer-compatibility"></a><h3>Stampanti</h3>
+ <dl>
+ <dt>Classe A (Piena)</dt>
+ <dd>Sono supportate tutte le funzioni e le caratteristiche della stampante.</dd>
+ <dt>Classe B (Parziale)</dt>
+ <dd>La funzione di stampa è supportata, ma a velocità limitata o a scarsa qualità. Su alcune stampanti
+ multifunzione possono non essere supportate le funzioni di scanner e/o di fax.</dd>
+ <dt>Classe C (Nessuna)</dt>
+ <dd>La stampante non funziona con software libero.</dd>
+ </dl>
+
+ <a name="scanner-compatibility"></a><h3>Scanner</h3>
+ <dl>
+ <dt>Classe A (Piena)</dt>
+ <dd>Sono supportate tutte le funzioni e le caratteristiche dello scanner.</dd>
+ <dt>Classe B (Parziale)</dt>
+ <dd>La funzione di scannerizzazione è supportata, ma a velocità limitata o a scarsa qualità. Qualche altra
+ caratteristica può non essere supportata.</dd>
+ <dt>Classe C (Nessuna)</dt>
+ <dd>Lo scanner non funziona con software libero.</dd>
+ </dl>
+
+ <p></p>
+
+ <a name="discover-hardware"></a><h2>Scopri il tuo hardware</h2>
+ <cite>(Grazie <a href="<?php echo $this->baseUrl;?>/issues/view/en/3/1/token">lluvia</a>)</cite>
+
+ <p>Per sapere le caratteristiche e i dettagli del tuo hardware puoi seguire queste istruzioni:</p>
+ <dl>
+ <dt>Come scoprire il nome del modello del portatile</dt>
+ <dd>Guarda sotto al tuo notebook o al tuo netbook</dd>
+ <a name="model-name"></a><dt>Come scoprire il nome del modello del tuo hardware (se non è un portatile)</dt>
+ <dd class="opt">Se il dispositivo è integrato (ad esempio: una scheda video)</dd>
+ <dd>Apri un terminale e digita il seguente comando:</dd>
+ <dd><pre class="terminal">lspci</pre>
+ </dd>
+ <dd>o</dd>
+ <dd><pre class="terminal">lspci &gt; FILENAME # Puoi anche scrivere l'output del comandi lspci su un file digitando<!-- l'output del comandi un file digitando :)--></pre>
+ </dd>
+ <!-- dd>dove "filename" è il nome del file</dd -->
+ <dd>Otterrai la lista di tutti i tuoi dispositivi PCI, simile a quella scritta sotto</dd>
+ <dd><pre class="terminal">
+00:18.3 Host bridge: <b>Advanced Micro Devices [AMD] K8 [Athlon64/Opteron] Miscellaneous Control</b>
+03:00.0 Network controller: <b>Broadcom Corporation BCM4311 802.11b/g WLAN (rev 02)</b>
+05:00.0 VGA compatible controller: <b>nVidia Corporation G86 [GeForce 8400M GS] (rev a1)</b>
+ </pre>
+ </dd>
+ <dd>Il nome di ogni dispositivo è scritto dopo i due punti (guarda il testo in grassetto nella
+ lista superiore)</dd>
+ <dd class="opt">Se è un dispositivo USB (ad esempio: una stampante USB)</dd>
+ <dd>Apri un terminale e digita il seguente comando:</dd>
+ <dd><pre class="terminal">lsusb -v</pre>
+ </dd>
+ <dd>o</dd>
+ <dd><pre class="terminal">lsusb -v &gt; FILENAME # l'output del comandi un file digitando</pre>
+ </dd>
+ <!-- dd>dove "filename" è il nome del file</dd -->
+ <dd>Otterrai la lista di tutti i dispositivi USB, simile a quella scritta sotto</dd>
+ <dd><pre class="terminal">
+Bus 001 Device 002: ID 0846:4260 NetGear, Inc. WG111v3 54 Mbps Wireless [realtek RTL8187B]
+Device Descriptor:
+ bLength 18
+ bDescriptorType 1
+ bcdUSB 2.00
+ bDeviceClass 0 (Defined at Interface level)
+ bDeviceSubClass 0
+ bDeviceProtocol 0
+ bMaxPacketSize0 64
+ idVendor 0x0846 NetGear, Inc.
+ idProduct 0x4260 <b>WG111v3 54 Mbps Wireless [realtek RTL8187B]</b>
+ bcdDevice 2.00
+ iManufacturer 1
+ iProduct 2
+ iSerial 3
+ ...
+ ...
+
+Bus 002 Device 003: ID 08ff:2580 AuthenTec, Inc. AES2501 Fingerprint Sensor
+Device Descriptor:
+ bLength 18
+ bDescriptorType 1
+ bcdUSB 1.10
+ bDeviceClass 255 Vendor Specific Class
+ bDeviceSubClass 255 Vendor Specific Subclass
+ bDeviceProtocol 255 Vendor Specific Protocol
+ bMaxPacketSize0 8
+ idVendor 0x08ff AuthenTec, Inc.
+ idProduct 0x2580 <b>AES2501 Fingerprint Sensor</b>
+ bcdDevice 6.23
+ iManufacturer 0
+ iProduct 1 Fingerprint Sensor
+ iSerial 0
+ bNumConfigurations 1
+ ...
+ ...
+ </pre>
+ </dd>
+ <dd>Il nome di ogni dispositivo è scritto alla riga che inizia con la stringa "idProduct" (guarda il testo in
+ grassetto nella lista superiore)</dd>
+ <dt>Come scoprire che versione del kernel libre stai usando</dt>
+ <dd>Apri un terminale e digita questo comando</dd>
+ <dd><pre class="terminal">uname -r</pre>
+ </dd>
+ <dt>Come scoprire il nome della tua scheda video</dt>
+ <dd>Apri un terminale e digita questo comando:</dd>
+ <dd><pre class="terminal">sudo lspci</pre>
+ </dd>
+ <dd>Poi cerca la riga contenente la stringa <b>VGA</b> o <b>Display controller</b>. Puoi anche provare con uno di
+ questi comandi:</dd>
+ <dd><pre class="terminal">lspci | grep "Display controller"</pre>
+ </dd>
+ <dd>o</dd>
+ <dd><pre class="terminal">lspci | grep "VGA"</pre>
+ </dd>
+ <a name="vendoridproductid"></a><dt>Come scoprire il VendorID e il ProductID del tuo dispositivo (VendorID:ProductID
+ code)</dt>
+ <dd><cite>(Grazie <a
+ href="http://trisquel.info/en/forum/h-nodecom-new-website-hardware-database#comment-5839">Michał Masłowski</a>
+ e <a href="http://trisquel.info/en/forum/h-nodecom-new-website-hardware-database#comment-5837">Julius22</a>)
+ </cite></dd>
+ <dd class="opt">Se il dispositivo è integrato (per esempio una scheda video)</dd>
+ <dd>Apri un terminale e digita il seguente comando:</dd>
+ <dd><pre class="terminal">sudo lspci -nnk</pre>
+ </dd>
+ <dd>Dovresti ottenere una lista di hardware simile a quella scritta qui sotto</dd>
+ <dd><pre class="terminal">
+03:00.0 Network controller [0280]: Broadcom Corporation BCM4311 802.11b/g WLAN [<b>14e4:4311</b>] (rev 02)
+ Kernel driver in use: b43-pci-bridge
+ Kernel modules: ssb
+05:00.0 VGA compatible controller [0300]: nVidia Corporation G86 [GeForce 8400M GS] [<b>10de:0427</b>] (rev a1)
+ Kernel modules: nouveau, nvidiafb</pre>
+ <dd class="note"><span class="note">Note:</span> Le stringhe in <b>grassetto</b> e tra parentesi quadre (nella
+ lista qui sopra) sono il codice che stai cercando. Il primo gruppo di cifre (prima dei due punti) è il
+ <b>VendorID</b>, il secondo gruppo è il <b>ProductID</b>. Nell'esempio qui sopra: il codice VendorID:ProductID
+ della scheda wifi (nota le stringhe "Network controller" e "WLAN") è <b>14e4:4311</b> mentre il codice
+ VendorID:ProductID della scheda video (nota la stringa "VGA") è <b>10de:0427</b></dd>
+ <dd class="opt">Se si tratta di un dispositivo USB (per esempio una wifi esterna USB)</dd>
+ <dd>Apri un terminale e digita questo comando:</dd>
+ <dd><pre class="terminal">sudo lsusb</pre>
+ </dd>
+ <dd>Dovresti ottenere una lista di hardware simile a quella scritta qui sotto</dd>
+ <dd><pre class="terminal">
+Bus 001 Device 002: ID <b>0846:4260</b> NetGear, Inc. WG111v3 54 Mbps Wireless [realtek RTL8187B]
+Bus 001 Device 001: ID <b>1d6b:0002</b> Linux Foundation 2.0 root hub
+Bus 002 Device 003: ID <b>08ff:2580</b> AuthenTec, Inc. AES2501 Fingerprint Sensor</pre>
+ </dd>
+ <dd class="note"><span class="note">Note:</span> Le stringhe in <b>grassetto</b> (nella lista qui sopra) sono il
+ codice che stai cercando. Il primo gruppo di cifre (prima dei due punti) è il <b>VendorID</b>, il secondo gruppo
+ è il <b>ProductID</b>. Nell'esempio qui sopra: il codice VendorID:ProductID della wifi esterna USB (nota la
+ stringa "Wireless") è <b>0846:4260</b></dd>
+ <dt>Come scoprire se funziona la scheda video</dt>
+ <dd>Installa <code><a href="http://rss-glx.sourceforge.net/">rss-glx</a></code> tramite il gestore di pacchetti
+ della tua distribuzione o compilando dai sorgenti e prova degli screensaver (per esempio <b>Skyrocket</b> o
+ <b>Solarwinds</b>). Controlla se parte lo screensaver (e/o se si vede "fluido")</dd>
+ <dt>Come scoprire se funziona l'accelerazione 3D</dt>
+ <dd>Prova ad attivare compiz</dd>
+ <dt>Come scoprire il nome della tua scheda wifi</dt>
+ <dd>Apri un terminale e digita questo comando:</dd>
+ <dd><pre class="terminal">sudo lspci</pre>
+ </dd>
+ <dd>Poi cerca la riga contenente la stringa <samp><b>Wireless</b></samp> o <samp><b>Network controller</b></samp>.
+ Puoi anche provare uno dei seguenti comandi:</dd>
+ <dd><pre class="terminal">lspci | grep "Wireless"</pre>
+ </dd>
+ <dd>o</dd>
+ <dd><pre class="terminal">lspci | grep "Network"</pre>
+ </dd>
+ <dt>Come scoprire che driver per la stampante stai usando</dt>
+ <dd class="opt">Se stai usando cups</dd>
+ <dd>Apri un terminale e digita il seguente comando:</dd>
+ <dd><pre class="terminal">dpkg-query -W -f '${Version}\n' cups</pre>
+ </dd>
+ <dt>Come scoprire l'architettura del tuo portatile:</dt>
+ <dd>Apri un terminale e digita il seguente comando:</dd>
+ <dd><pre class="terminal">cat /proc/cpuinfo | grep "lm"</pre>
+ </dd>
+ <dd>Se ottieni un messaggio come il seguente:</dd>
+ <dd><pre class="terminal">flags : fpu vme de pse tsc msr pae mce cx8 apic mtrr pge mca cmov pat pse36 clflush dts<br/>acpi mmx fxsr sse sse2 ss ht tm pbe nx lm constant_tsc arch_perfmon pebs bts aperfmperf pni dtes64<br/>monitor ds_cpl est tm2 ssse3 cx16 xtpr pdcm lahf_lm</pre>
+ </dd>
+ <dd>allora il tuo portatile è x86-64/amd64 e puoi usare una distribuzione x86-64/amd64</dd>
+ </dl>
+
+ <p> </p>
+
+ <a name="fully-free"></a><h2>Lista di distribuzioni GNU/Linux completamente libere</h2>
+
+ <!-- p class="attention"><span class="highlight">La <strong>h-node</strong> non è responsabile del contenuto di altri siti
+ web, né di quanto il contenuto di tali siti sia aggiornato.</span></p -->
+
+ <p>Le seguenti sono le distribuzioni <a href="http://www.gnu.org/gnu/linux-and-gnu.it.html">GNU/Linux</a> a noi note
+ che hanno una rigorosa politica di inclusione e indicazione di solo software libero. Queste distribuzioni escludono
+ applicazioni, piattaforme di programmazione, driver e firmware ("blob") che non siano liberi, e rimuovono quelli
+ inclusi per errore. Per saperne di più su cosa rende <a href="http://www.gnu.org/distros/free-distros.it.html">libera
+ una distribuzione GNU/Linux</a>, si vedano le GNU <a
+ href="http://www.gnu.org/distros/free-system-distribution-guidelines.it.html">linee guida per le distribuzioni
+ libere</a>.</p>
+
+ <p><strong>Tutte le distribuzioni che seguono sono installabili sul disco di un computer e la maggior parte può essere
+ eseguita da un supporto</strong> (CD, memoria USB) senza che nulla debba essere installato sul computer.</p>
+
+ <p>In ordine alfabetico</p>
+
+ <ul>
+ <li><a href="http://www.blagblagblag.org/">BLAG GNU/Linux</a></li>
+ <li><a href="http://www.dragora.org">Dragora GNU/Linux</a></li>
+ <li><a href="http://dynebolic.org/">Dynebolic GNU/Linux</a></li>
+ <li><a href="http://www.gnewsense.org/">gNewSense GNU/Linux</a></li>
+ <li><a href="http://www.musix.org.ar/">Musix GNU+Linux</a></li>
+ <li><a href="https://parabolagnulinux.org/">Parabola GNU/Linux</a></li>
+ <li><a href="http://trisquel.info/">Trisquel GNU/Linux</a></li>
+ <li><a href="http://www.ututo.org/www/">Ututo GNU/Linux</a></li>
+ <li><a href="http://venenux.org/">Venenux GNU/Linux</a></li>
+ </ul>
+ </div>
+ \ No newline at end of file
diff --git a/h-source/Application/Views/Desktop/Home/left.php b/h-source/Application/Views/Desktop/Home/left.php
index 01b7f7f..8635564 100644
--- a/h-source/Application/Views/Desktop/Home/left.php
+++ b/h-source/Application/Views/Desktop/Home/left.php
@@ -3,31 +3,84 @@
<?php
// h-source, a web software to build a community of people that want to share their hardware information.
// Copyright (C) 2010 Antonio Gallo (h-source-copyright.txt)
-//
-// This file is part of h-source
-//
-// h-source is free software: you can redistribute it and/or modify
+//
+// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
-// h-source is distributed in the hope that it will be useful,
+// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
-// along with h-source. If not, see <http://www.gnu.org/licenses/>.
+// along with this program. If not, see <http://www.gnu.org/licenses/>.
?>
-<?php
- if (file_exists(ROOT."/Template/".Params::$viewSubfolder."/Home/left_$lang.php"))
- {
- include(ROOT."/Template/".Params::$viewSubfolder."/Home/left_$lang.php");
- }
- else
- {
- include(ROOT."/Template/".Params::$viewSubfolder."/Home/left.php");
- }
-?>
+ <div id="left">
+
+ <div class="position_tree_box">
+ Home
+ </div>
+
+ <?php echo $htmlNewsBox;?>
+
+ <div class="home_container">
+ <div class="home_objectives_title">
+ Objectives:
+ </div>
+ <div class="home_objectives_description">
+ <img src="<?php echo $this->baseUrl;?>/Public/Img/H2O/applications-internet.png"> The <b><?php echo Website::$projectName;?></b> project aims at the construction of a hardware database in order to identify what devices work with a <a href="http://www.gnu.org/distros/free-distros.html">fully free operating system</a>. The <?php echo Website::$generalName;?> website is structured like a wiki in which all the users can modify or insert new contents. The h-node project is developed in collaboration and as an activity of the <a href="http://www.fsf.org">FSF</a>.
+ </div>
+
+ <div class="home_objectives_title">
+ Contribute:
+ </div>
+ <div class="home_objectives_description">
+ You can contribute by creating an account at <?php echo Website::$generalName;?> and editing its user-generated contents. All your modification will be saved in the history of the product you are editing/adding. Each revision (the current one or the old ones) will be marked by the name of the user who created it.<br />You can also contribute by <b>suggesting new hardware</b> that should be added to the database or <b>features that should be implemented</b>.
+ </div>
+
+ <div class="home_objectives_title">
+ Free software:
+ </div>
+ <div class="home_objectives_description">
+ <img height="100px" src="https://savannah.nongnu.org/images/Savannah.theme/floating.png">
+
+ In order to add a device to the h-node database, you must verify that it works using only free software. For this purpose, you must be running either:
+
+ <p>1) A GNU/Linux distribution that is on the <a href="http://www.gnu.org/distros/free-distros.html">FSF's list of endorsed distributions</a></p>
+
+ <p>2) <a href="http://www.debian.org">Debian GNU/Linux</a>, <strong>with only the main archive area enabled</strong>. The "contrib" and "non-free" areas must not be enabled when testing hardware. Double-check this by running <code>apt-cache policy</code>. The only package archive area mentioned in the output should be <strong>main</strong>.</p>
+
+ <p>h-node lists only hardware that works with free drivers and without non-free firmware. Other GNU/Linux distributions (or Debian with contrib, non-free, or some 3rd-party archives enabled) include non-free firmware files, so they cannot be used for testing.</p>
+ </div>
+
+ <div class="home_objectives_title">
+ License:
+ </div>
+ <div class="home_objectives_description">
+ Any text submitted by you will be put in the Public Domain (see the <a href="http://creativecommons.org/publicdomain/zero/1.0/">CC0 page</a> for detailed information). Anyone is free to copy, modify, publish, use, sell, or distribute the text you have submitted to h-node.org, for any purpose, commercial or non-commercial, and by any means.
+ </div>
+ <div class="home_objectives_title">
+ Other resources on the net:
+ </div>
+ <div class="home_objectives_description">
+ <p>Here is a list of other archives collecting information about hardware working with free software:</p>
+ <ul>
+ <!--<li><a href="http://www.fsf.org/resources/hw">Free Software Foundation archive</a></li>-->
+ <li><a href="http://libreplanet.org/wiki/Hardware/Freest">LibrePlanet Freest Hardware Page</a></li>
+ <li><a href="http://www.gnewsense.org/Main/LaptopGuide">gNewSense Laptop Guide</a></li>
+ <li><a href="http://libreplanet.org/wiki/Group:LibrePlanet_Italia/Progetti/hardware_libero">LibrePlanet Italia - progetti hardware database</a></li>
+ </ul>
+ </div>
+
+ <div class="home_objectives_title">
+ About the <?php echo Website::$generalName;?> website:
+ </div>
+ <div class="home_objectives_description">
+ The <?php echo Website::$generalName;?> has to be considered in <b>beta version</b>. It is constantly growing and many features have not been implemented yet (for example new hardware devices have to be inserted in the database). Some problems may occur: if you find out a bug please add an issue <a href="<?php echo $this->baseUrl."/issues/viewall/$lang/1/$token";?>">here</a> with the topic <b>maybe a bug</b>.
+ </div>
+ </div>
+ </div>
diff --git a/h-source/Application/Views/Desktop/Home/left_de.php b/h-source/Application/Views/Desktop/Home/left_de.php
new file mode 100644
index 0000000..42bfff7
--- /dev/null
+++ b/h-source/Application/Views/Desktop/Home/left_de.php
@@ -0,0 +1,87 @@
+<?php if (!defined('EG')) die('Direct access not allowed!'); ?>
+
+<?php
+// h-source, a web software to build a community of people that want to share their hardware information.
+// Copyright (C) 2010 Antonio Gallo (h-source-copyright.txt)
+//
+// This program is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program. If not, see <http://www.gnu.org/licenses/>.
+?>
+
+ <div id="left">
+
+ <div class="position_tree_box">
+ Home
+ </div>
+
+ <?php echo $htmlNewsBox;?>
+
+ <div class="home_container">
+ <div class="home_objectives_title">
+ Ziele:
+ </div>
+ <div class="home_objectives_description">
+ <img src="<?php echo $this->baseUrl;?>/Public/Img/H2O/applications-internet.png"> Mit dem Projekt <b><?php echo Website::$projectName;?></b> soll eine Hardwaredatenbank mit Peripheriegeräten aufgebaut werdem, die mit einem <a href="http://www.gnu.org/distros/free-distros.html">vollständig freien Betriebssystem</a> arbeiten. Die Webseite von h-node.org ist wie ein Wiki aufgebaut, dessen Inhalte von allen Benutzer geändert und ergänzt werden können. Das Projekt <b>h-node</b> wird in Zusammenarbeit und als eine Aktivität der <a href="http://www.fsf.org">FSF</a> entwickelt.
+ </div>
+
+ <div class="home_objectives_title">
+ Mithelfen:
+ </div>
+ <div class="home_objectives_description">
+ Sie können nach Ihrer Anmeldung bei h-node.org dazu beitragen und die benutzergenerierten Inhalte bearbeiten. Alle Änderungen die Sie bearbeiten oder hinzufügen, werden im Produktverlauf protokolliert. Jede Version (die aktuelle oder die alte) wird der/dem BenutzerIn zugeordnet, die/der sie erstellte.<br />
+ <b>Neue Hardware</b>, die in die Datenbank aufgenommen, oder <b>neue Funktionen</b>, die hinzugefügt werden sollten, können Sie ebenfalls vorschlagen.
+ </div>
+
+ <div class="home_objectives_title">
+ Freie Software:
+ </div>
+ <div class="home_objectives_description">
+ <img height="100px" src="https://savannah.nongnu.org/images/Savannah.theme/floating.png">
+
+ In order to add a device to the h-node database, you must verify that it works using only free software. For this purpose, you must be running either:
+
+ <p>1) A GNU/Linux distribution that is on the <a href="http://www.gnu.org/distros/free-distros.html">FSF's list of endorsed distributions</a></p>
+
+ <p>2) <a href="http://www.debian.org">Debian GNU/Linux</a>, <strong>with only the main archive area enabled</strong>. The "contrib" and "non-free" areas must not be enabled when testing hardware. Double-check this by running <code>apt-cache policy</code>. The only package archive area mentioned in the output should be <strong>main</strong>.</p>
+
+ <p>h-node lists only hardware that works with free drivers and without non-free firmware. Other GNU/Linux distributions (or Debian with contrib, non-free, or some 3rd-party archives enabled) include non-free firmware files, so they cannot be used for testing.</p>
+ </div>
+
+ <div class="home_objectives_title">
+ Lizenz:
+ </div>
+ <div class="home_objectives_description">
+ Jeder von Ihnen übermittelte Text wird in die Gemeinfreiheit („Public Domain“) entlassen (siehe <a href="http://creativecommons.org/publicdomain/zero/1.0/deed.de">CC0 1.0 Universell (CC0 1.0)</a> für detaillierte Informationen). Jede Person darf das Werk/den Inhalt, den Sie an h-node.org übermittelt haben, kopieren, verändern, verbreiten und aufführen, sogar zu kommerziellen Zwecken, ohne um weitere Erlaubnis bitten zu müssen und auf jedem Medium.
+ </div>
+
+ <div class="home_objectives_title">
+ Weitere Ressourcen im Internet:
+ </div>
+ <div class="home_objectives_description">
+ <p>Weitere Archive mit gesammelten Informationen über Hardware, die mit Freie Software arbeitet:</p>
+ <ul>
+<!-- <li><a href="http://www.fsf.org/resources/hw">Free Software Foundation archive</a></li> -->
+ <li><a href="http://libreplanet.org/wiki/Hardware/Freest">LibrePlanet Freest Hardware Page</a></li>
+ <li><a href="http://www.gnewsense.org/Main/LaptopGuide">gNewSense Laptop Guide</a></li>
+ <li><a href="http://libreplanet.org/wiki/Group:LibrePlanet_Italia/Progetti/hardware_libero">LibrePlanet Italia - progetti hardware database</a></li>
+ </ul>
+ </div>
+
+ <div class="home_objectives_title">
+ Über h-node.org:
+ </div>
+ <div class="home_objectives_description">
+ <b>h-node</b> muss als im Beta-Stadium betrachtet werden. Es wird ständig ergänzt haben und viele Funktionen wurden noch nicht implementiert (z. B. müssen neue Hardware-Geräte in die Datenbank eingepflegt werden). Es können Probleme auftreten: Wenn Sie einen Fehler finden, melden Sie diesen bitte im <a href="<?php echo $this->baseUrl."/issues/viewall/$lang/1/$token";?>">Web-Log</a> mit dem Thema <b>evtl. ein Fehler</b>.
+ </div>
+ </div>
+ </div>
diff --git a/h-source/Application/Views/Desktop/Home/left_es.php b/h-source/Application/Views/Desktop/Home/left_es.php
new file mode 100644
index 0000000..0ac26d0
--- /dev/null
+++ b/h-source/Application/Views/Desktop/Home/left_es.php
@@ -0,0 +1,86 @@
+<?php if (!defined('EG')) die('Direct access not allowed!'); ?>
+
+<?php
+// h-source, a web software to build a community of people that want to share their hardware information.
+// Copyright (C) 2010 Antonio Gallo (h-source-copyright.txt)
+//
+// This program is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program. If not, see <http://www.gnu.org/licenses/>.
+?>
+
+ <div id="left">
+
+ <div class="position_tree_box">
+ Home
+ </div>
+
+ <?php echo $htmlNewsBox;?>
+
+ <div class="home_container">
+ <div class="home_objectives_title">
+ Objetivos:
+ </div>
+ <div class="home_objectives_description">
+ <img src="<?php echo $this->baseUrl;?>/Public/Img/H2O/applications-internet.png"> El proyecto <b><?php echo Website::$projectName;?></b> tiene como meta la construcción de una base de datos de todo el hardware de manera que se pueda identificar que dispositivos funcionan con un <a href="http://www.gnu.org/distros/free-distros.es.html">sistema operativo completamente libre</a>. El sitio <?php echo Website::$generalName;?> esta estructurado como un wiki, en el cual todos los usuarios pueden modificar o integrar nuevos contenidos. El proyecto h-node es desarrollado en colaboración y como una actividad de la <a href="http://www.fsf.org">FSF</a>.
+ </div>
+
+ <div class="home_objectives_title">
+ Contribuir:
+ </div>
+ <div class="home_objectives_description">
+ Puede contribuir creando una cuenta en <?php echo Website::$generalName;?> y editar los contenidos generados. Todas sus modificaciones serás guardadas en el historial del producto que edite/agregue. Cada revisión (actual o previa) será marcada con el nombre del usuario que la creo.<br />También puede contribuir al <b>sugerir nuevo hardware</b> que deba ser agregado a la base de datos o <b>características que deberían ser implementadas.</b>
+ </div>
+
+ <div class="home_objectives_title">
+ Software Libre:
+ </div>
+ <div class="home_objectives_description">
+ <img height="100px" src="https://savannah.nongnu.org/images/Savannah.theme/floating.png">
+
+ In order to add a device to the h-node database, you must verify that it works using only free software. For this purpose, you must be running either:
+
+ <p>1) A GNU/Linux distribution that is on the <a href="http://www.gnu.org/distros/free-distros.html">FSF's list of endorsed distributions</a></p>
+
+ <p>2) <a href="http://www.debian.org">Debian GNU/Linux</a>, <strong>with only the main archive area enabled</strong>. The "contrib" and "non-free" areas must not be enabled when testing hardware. Double-check this by running <code>apt-cache policy</code>. The only package archive area mentioned in the output should be <strong>main</strong>.</p>
+
+ <p>h-node lists only hardware that works with free drivers and without non-free firmware. Other GNU/Linux distributions (or Debian with contrib, non-free, or some 3rd-party archives enabled) include non-free firmware files, so they cannot be used for testing.</p>
+ </div>
+
+ <div class="home_objectives_title">
+ Licencias:
+ </div>
+ <div class="home_objectives_description">
+ Cualquier texto agregado por usted sera colocado en Dominio Publico (vea la <a href="http://creativecommons.org/publicdomain/zero/1.0/deed.es_CL">página CC0</a> para información detallada). Cualquiera es libre de copiar, modificar, publicar, usar, vender o distribuir el texto que ha integrado a h-node.org, para cualquier propósito, comercial o no comercial, y por cualquier método.
+ </div>
+
+ <div class="home_objectives_title">
+ Otros recursos en la red:
+ </div>
+ <div class="home_objectives_description">
+ <p>Aquí una lista de otras actividades recolectando información acerca de hardware funcionando con software libre:</p>
+ <ul>
+<!-- <li><a href="http://www.fsf.org/resources/hw">Free Software Foundation archive</a></li> -->
+ <li><a href="http://libreplanet.org/wiki/Hardware/Freest">LibrePlanet Freest Hardware Page</a></li>
+ <li><a href="http://www.gnewsense.org/Main/LaptopGuide">gNewSense Laptop Guide</a></li>
+ <li><a href="http://libreplanet.org/wiki/Group:LibrePlanet_Italia/Progetti/hardware_libero">LibrePlanet Italia - progetti hardware database</a></li>
+ </ul>
+ </div>
+
+ <div class="home_objectives_title">
+ Acerca del sitio <?php echo Website::$generalName;?>:
+ </div>
+ <div class="home_objectives_description">
+ El sitio <?php echo Website::$generalName;?> debe ser considerado una <b>versión beta</b>. Esta en constantemente crecimiento y varias características no han sido implementadas aun (por ejemplo, nuevos dispositivos de hardware tienen que ser incluidos en la base de datos). Algunos problemas pueden ocurrir: Si encuentra un error por favor agregue una incidencia <a href="<?php echo $this->baseUrl."/issues/viewall/$lang/1/$token";?>">aquí</a> bajo el tema <b>maybe a bug</b>.
+ </div>
+ </div>
+ </div>
diff --git a/h-source/Application/Views/Desktop/Home/left_fr.php b/h-source/Application/Views/Desktop/Home/left_fr.php
new file mode 100644
index 0000000..2e17468
--- /dev/null
+++ b/h-source/Application/Views/Desktop/Home/left_fr.php
@@ -0,0 +1,89 @@
+<?php if (!defined('EG')) die('Direct access not allowed!'); ?>
+
+<?php
+// h-source, a web software to build a community of people that want to share their hardware information.
+// Copyright (C) 2010 Antonio Gallo (h-source-copyright.txt)
+//
+// This program is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program. If not, see <http://www.gnu.org/licenses/>.
+?>
+
+ <div id="left">
+
+ <div class="position_tree_box">
+ Home
+ </div>
+
+ <?php echo $htmlNewsBox;?>
+
+ <div class="home_container">
+ <div class="home_objectives_title">
+ Objectifs:
+ </div>
+
+ <div class="home_objectives_description">
+ <img src="https://www.h-node.org/Public/Img/H2O/applications-internet.png"> Le but du projet <b>h-node est</b> de créer une base de données de matériel afin d'identifier les dispositifs qui fonctionne avec un <a href="http://www.gnu.org/distros/free-distros.fr.html">système d’exploitation entièrement libre</a>. Le site h-node est structuré comme un wiki, dont tout les utilisateurs peuvent modifier ou insérer des contenus. Le projet h-node est dévellopé en collaboration et en tant qu'activitée de la <a href="http://www.fsf.org">FSF</a>.
+ </div>
+
+ <div class="home_objectives_title">
+ Contribution:
+ </div>
+ <div class="home_objectives_description">
+ Vous pouvez contribuer en créant un compte sur h-node et modifier le contenus créé par les utilisateurs. Toutes vos modifications seront enregistrées dans l’historique de l’élément que vous modifiez ou ajouter. Toutes versions (l’actuelle ou les précédentes) seront marquées au nom de l’utilisateur qui les a crées. <br />Vous pouvez aussi contribuer en <b>suggérant un autre type de matériel</b> qui devrais être ajouté à la base de données ou une nouvelle <b>fonctionnalitée qui devrais être implémentée</b>
+ </div>
+
+ <div class="home_objectives_title">
+ Logiciel libre:
+ </div>
+ <div class="home_objectives_description">
+ <img height="100px" src="https://savannah.nongnu.org/images/Savannah.theme/floating.png">
+
+ In order to add a device to the h-node database, you must verify that it works using only free software. For this purpose, you must be running either:
+
+ <p>1) A GNU/Linux distribution that is on the <a href="http://www.gnu.org/distros/free-distros.html">FSF's list of endorsed distributions</a></p>
+
+ <p>2) <a href="http://www.debian.org">Debian GNU/Linux</a>, <strong>with only the main archive area enabled</strong>. The "contrib" and "non-free" areas must not be enabled when testing hardware. Double-check this by running <code>apt-cache policy</code>. The only package archive area mentioned in the output should be <strong>main</strong>.</p>
+
+ <p>h-node lists only hardware that works with free drivers and without non-free firmware. Other GNU/Linux distributions (or Debian with contrib, non-free, or some 3rd-party archives enabled) include non-free firmware files, so they cannot be used for testing.</p>
+
+ </div>
+
+ <div class="home_objectives_title">
+ License:
+ </div>
+
+ <div class="home_objectives_description">
+ Tout les textes que vous publierez sur le site seront dans le Domain public (Consultez la <a href="http://creativecommons.org/publicdomain/zero/1.0/deed.fr">page CC0</a> pour plus d'informations). Tout un chacun est autorisé à copier, modifier, publier, utiliser, vendre ou distribuer le texte que vous avez envoyé sur h-node.org, pour quelque utilisation que ce soit et par tout les moyens.
+ </div>
+
+ <div class="home_objectives_title">
+ Ressource supplémentaire sur Internet:
+ </div>
+ <div class="home_objectives_description">
+ <p>Voici une liste d'autres archives qui collecte des informations à propos du matériel fonctionnant avec du logiciel libre:</p>
+ <ul>
+<!-- <li><a href="http://www.fsf.org/resources/hw">Free Software Foundation archive</a></li> -->
+ <li><a href="http://libreplanet.org/wiki/Hardware/Freest">LibrePlanet Freest Hardware Page</a></li>
+ <li><a href="http://www.gnewsense.org/Main/LaptopGuide">gNewSense Laptop Guide</a></li>
+ <li><a href="http://libreplanet.org/wiki/Group:LibrePlanet_Italia/Progetti/hardware_libero">LibrePlanet Italia - progetti hardware database</a></li>
+ </ul>
+ </div>
+
+ <div class="home_objectives_title">
+ A propos du site <?php echo Website::$generalName;?>:
+ </div>
+ <div class="home_objectives_description">
+ Le site doit être considéré comme en <b>version beta</b>, il s’aggrandit constamment et beaucoup de fonctionnalitée n’ont pas encore été implémentée ( par exemple, de nouveau type d’appareil doivent être ajouter dans la base de données) . Des problèmes peuvent arriver, si vous trouver un bug, merci de remplir un <a href="<?php echo $this->baseUrl."/issues/viewall/$lang/1/$token";?>">ticket bug</a> (<b>maybe a bug</b>).
+ </div>
+ </div>
+ </div>
diff --git a/h-source/Application/Views/Desktop/Home/left_gr.php b/h-source/Application/Views/Desktop/Home/left_gr.php
new file mode 100644
index 0000000..26fc83a
--- /dev/null
+++ b/h-source/Application/Views/Desktop/Home/left_gr.php
@@ -0,0 +1,88 @@
+<?php if (!defined('EG')) die('Direct access not allowed!'); ?>
+
+<?php
+// h-source, a web software to build a community of people that want to share their hardware information.
+// Copyright (C) 2010 Antonio Gallo (h-source-copyright.txt)
+//
+// This program is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program. If not, see <http://www.gnu.org/licenses/>.
+?>
+
+ <div id="left">
+
+ <div class="position_tree_box">
+ Home
+ </div>
+
+ <?php echo $htmlNewsBox;?>
+
+ <div class="home_container">
+ <div class="home_objectives_title">
+ Σκοποί:
+ </div>
+ <div class="home_objectives_description">
+ <img src="<?php echo $this->baseUrl;?>/Public/Img/H2O/applications-internet.png">
+ Το <b><?php echo Website::$projectName;?></b> project έχει ως σκοπό την κατασκευή μίας βάσης δεδομένων υλικού, έτσι ώστε να μπορεί να εντοπισθεί ποιες συσκευές δουλεύουν με ένα <a href="http://www.gnu.org/distros/free-distros.html">πλήρως ελεύθερο Λειτουργικό Σύστημα</a>. Ο ιστότοπος <?php echo Website::$generalName;?> είναι δομημένος σαν ένα wiki, εντός του οποίου όλοι οι χρήστες μπορούν να τροποποιούν ή να εισαγάγουν νέα περιεχόμενα. Το h-node project αναπτύχθηκε σε συνεργασία με και σαν δραστηριότητα του <a href="http://www.fsf.org">FSF</a>.
+ </div>
+
+ <div class="home_objectives_title">
+ Συνεισφέρετε:
+ </div>
+ <div class="home_objectives_description">
+ Μπορείτε να συνεισφέρετε φτιάχνοντας έναν λογαριασμό στο <?php echo Website::$generalName;?> και τροποποιώντας τα περιεχόμενα που δημιούργησαν οι ίδιοι οι χρήστες. Όλες σας οι τροποποιήσεις θα αποθηκεύονται στο ιστορικό του προϊόντος το οποίο επεξεργάζεσθε/εμπλουτίζετε. Κάθε αναθεώρηση (τόσο η τρέχουσα όσο και οι παλιές) θα επισημαίνεται με το όνομα του χρήστη που την δημιούργησε. Μπορείτε, επίσης, να συνεισφέρετε <b>προτείνοντας νέο υλικό</b> που θα έπρεπε να προστεθεί στη βάση δεδομένων, ή <b>εισηγούμενοι χαρακτηριστικά που θα έπρεπε να υλοποιηθούν</b>.
+ </div>
+
+ <div class="home_objectives_title">
+ Ελεύθερο Λογισμικό
+ </div>
+ <div class="home_objectives_description">
+ <img height="100px" src="https://savannah.nongnu.org/images/Savannah.theme/floating.png">
+
+ In order to add a device to the h-node database, you must verify that it works using only free software. For this purpose, you must be running either:
+
+ <p>1) A GNU/Linux distribution that is on the <a href="http://www.gnu.org/distros/free-distros.html">FSF's list of endorsed distributions</a></p>
+
+ <p>2) <a href="http://www.debian.org">Debian GNU/Linux</a>, <strong>with only the main archive area enabled</strong>. The "contrib" and "non-free" areas must not be enabled when testing hardware. Double-check this by running <code>apt-cache policy</code>. The only package archive area mentioned in the output should be <strong>main</strong>.</p>
+
+ <p>h-node lists only hardware that works with free drivers and without non-free firmware. Other GNU/Linux distributions (or Debian with contrib, non-free, or some 3rd-party archives enabled) include non-free firmware files, so they cannot be used for testing.</p>
+
+ </div>
+
+ <div class="home_objectives_title">
+ Άδεια:
+ </div>
+ <div class="home_objectives_description">
+ Οποιοδήποτε κείμενο που υποβάλετε, θα μπαίνει σε Δημόσια Διάθεση/Public Domain (δείτε τη σελίδα <a href="http://creativecommons.org/publicdomain/zero/1.0/">CC0 page</a> για πιο λεπτομερείς πληροφορίες). Οποιοσδήποτε είναι ελεύθερος να αντιγράφει, να τροποποιεί, να δημοσιεύει, να χρησιμοποιεί, να πωλεί, ή και να ανδιανέμει το κείμενο που εσείς υποβάλλατε στο h-node.com, για οποιοδήποτε λόγο, εμπορικό ή μη-εμπορικό, και με οποιονδήποτε τρόπο.
+ </div>
+
+ <div class="home_objectives_title">
+ Άλλοι πόροι στο Διαδίκτυο:
+ </div>
+ <div class="home_objectives_description">
+ <p>Ακολουθεί, εδώ, ένας κατάλογος άλλων αρχείων που συγκεντρώνουν πληροφορίες σχετικά με υλικό που δουλεύει με ελεύθερο λογισμικό:</p>
+ <ul>
+<!-- <li><a href="http://www.fsf.org/resources/hw">Free Software Foundation archive</a></li> -->
+ <li><a href="http://libreplanet.org/wiki/Hardware/Freest">LibrePlanet Freest Hardware Page</a></li>
+ <li><a href="http://www.gnewsense.org/Main/LaptopGuide">gNewSense Laptop Guide</a></li>
+ <li><a href="http://libreplanet.org/wiki/Group:LibrePlanet_Italia/Progetti/hardware_libero">LibrePlanet Italia - progetti hardware database</a></li>
+ </ul>
+ </div>
+
+ <div class="home_objectives_title">
+ Σχετικά με τον ιστότοπο <?php echo Website::$generalName;?>:
+ </div>
+ <div class="home_objectives_description">
+ Το <?php echo Website::$generalName;?> πρέπει να θεωρείται πως βρίκεται σε <b>έκδοση beta</b>. Αναπτύσσεται συνεχώς και πολλά χαρακτηριστικά δεν έχουν ακόμη υλοποιηθεί (π.χ. πρέπει ακόμη να προστεθούν νέες συσκευές υλικού στη βάση δεδομένων). Μπορεί να παρατηρηθούν ορισμένα προβλήματα: αν εντοπίσετε ένα σφάλμα (bug), παρακαλώ προσθέστε μία αναφορά προβλήματος <a href="<?php echo $this->baseUrl."/issues/viewall/$lang/1/$token";?>">εδώ</a> με θέμα <b>ίσως να πρόκειται για ένα bug</b>.
+ </div>
+ </div>
+ </div>
diff --git a/h-source/Application/Views/Desktop/Home/left_it.php b/h-source/Application/Views/Desktop/Home/left_it.php
new file mode 100644
index 0000000..fe74850
--- /dev/null
+++ b/h-source/Application/Views/Desktop/Home/left_it.php
@@ -0,0 +1,89 @@
+<?php if (!defined('EG')) die('Direct access not allowed!'); ?>
+
+<?php
+// h-source, a web software to build a community of people that want to share their hardware information.
+// Copyright (C) 2010 Antonio Gallo (h-source-copyright.txt)
+//
+// This program is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program. If not, see <http://www.gnu.org/licenses/>.
+?>
+
+ <div id="left">
+
+ <div class="position_tree_box">
+ Home
+ </div>
+
+ <?php echo $htmlNewsBox;?>
+
+ <div class="home_container">
+ <div class="home_objectives_title">
+ Obiettivi:
+ </div>
+
+ <div class="home_objectives_description">
+ <img src="https://www.h-node.org/Public/Img/H2O/applications-internet.png"> Il progetto <b>h-node</b> mira alla costruzione di un database di hardware allo scopo di identificare quali dispositivi funzionino con un <a href="http://www.gnu.org/distros/free-distros.it.html">sistema operativo completamente libero</a>. Il sito h-node.org è strutturato come una wiki in cui tutti gli utenti possono inserire nuovi contenuti o modificare i contenuti già presenti. Il progetto h-node è sviluppato in collaborazione e come attività della <a href="http://www.fsf.org">FSF</a>.
+ </div>
+
+ <div class="home_objectives_title">
+ Contribuire:
+ </div>
+ <div class="home_objectives_description">
+ Puoi contribuire creandoti un account su h-node.org e modificando i suoi contenuti generati dagli utenti. Tutte le tue modifiche saranno salvate nella storia del prodotto che stai modificando/aggiungendo. Ogni revisione (quella attuale o le precedenti) sarà contrassegnata col nome dell'utente che l'ha creata.<br />Puoi inoltre contribuire <b>suggerendo del nuovo hardware</b> da aggiungere al database o delle <b>caratteristiche da implementare</b>.
+ </div>
+
+ <div class="home_objectives_title">
+ Software libero:
+ </div>
+ <div class="home_objectives_description">
+ <img height="100px" src="https://savannah.nongnu.org/images/Savannah.theme/floating.png">
+
+ Per poter aggiungere un dispositivo nel database di h-node, devi verificare che funzioni usando solo software libero. Per questo scopo, puoi unicamente utilizzare:
+
+ <p>1) Una delle distribuzioni GNU/Linux elencate <a href="http://www.gnu.org/distros/free-distros.html">nella lista delle distribuzioni approvate dalla FSF</a></p>
+
+ <p>2) <a href="http://www.debian.org">Debian GNU/Linux</a>, <strong>con solo la zona archivio main attivata</strong>. Le aree "contrib" e "non-free" non devono essere abilitate durante il test dell'hardware. Controlla che sia così lanciando <code>apt-cache policy</code>. La sola zona archivio dei pacchetti deve essere <strong>main</strong>.</p>
+
+ <p>h-node elenca solo hardware che funziona con driver liberi e senza firmware non libero. Le altre distribuzioni GNU/Linux (oppure Debian con contrib, non-free, o archivi di terze parti abilitati) includono file di firmware non liberi, quindi non possono essere utilizzate per i test.</p>
+
+ </div>
+
+ <div class="home_objectives_title">
+ Licenza:
+ </div>
+
+ <div class="home_objectives_description">
+ Qualsiasi testo da te inserito diventerà di Pubblico Dominio (visita la <a href="http://creativecommons.org/publicdomain/zero/1.0/deed.it">pagina CC0</a> per informazioni dettagliate). Chiunque è libero di copiare, modificare, pubblicare, usare, vendere o distribuire il testo che hai inserito su h-node.org, per qualsiasi fine, commerciale o non commerciale, e con ogni mezzo.
+ </div>
+
+ <div class="home_objectives_title">
+ Altre risorse in rete:
+ </div>
+ <div class="home_objectives_description">
+ <p>Di seguito una lista di altri archivi contenenti informazioni sull' hardware funzionante con software libero:</p>
+ <ul>
+<!-- <li><a href="http://www.fsf.org/resources/hw">Free Software Foundation archive</a></li> -->
+ <li><a href="http://libreplanet.org/wiki/Hardware/Freest">LibrePlanet Freest Hardware Page</a></li>
+ <li><a href="http://www.gnewsense.org/Main/LaptopGuide">gNewSense Laptop Guide</a></li>
+ <li><a href="http://libreplanet.org/wiki/Group:LibrePlanet_Italia/Progetti/hardware_libero">LibrePlanet Italia - progetti hardware database</a></li>
+ </ul>
+ </div>
+
+ <div class="home_objectives_title">
+ A proposito del sito <?php echo Website::$generalName;?>:
+ </div>
+ <div class="home_objectives_description">
+ <?php echo Website::$generalName;?> deve essere considerato una <b>versione beta</b>. E' in costante sviluppo e molte caratteristiche non sono ancora state implementate (per esempio nuovi dispositivi hardware devono essere aggiunti al database). Potrebbero esserci dei problemi: se scopri un bug per favore invia una segnalazione <a href="<?php echo $this->baseUrl."/issues/viewall/$lang/1/$token";?>">qui</a> con l'argomento <b>maybe a bug</b>.
+ </div>
+ </div>
+ </div>
diff --git a/h-source/Application/Views/Desktop/Notebooks/.svn/entries b/h-source/Application/Views/Desktop/Notebooks/.svn/entries
new file mode 100644
index 0000000..334d6af
--- /dev/null
+++ b/h-source/Application/Views/Desktop/Notebooks/.svn/entries
@@ -0,0 +1,96 @@
+10
+
+dir
+388
+svn+ssh://tonicucoz@svn.savannah.nongnu.org/h-source/trunk/h-source/Application/Views/Desktop/Notebooks
+svn+ssh://tonicucoz@svn.savannah.nongnu.org/h-source
+
+
+
+2012-10-16T05:40:07.156193Z
+388
+tonicucoz
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+cdff7dbb-30cd-47f4-9d9c-15594cd9e55c
+
+page.php
+file
+389
+
+
+
+2012-10-16T13:45:45.142595Z
+ac86850a999353cbf3fdd926063fe271
+2012-10-16T13:51:26.763024Z
+389
+tonicucoz
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+6813
+
+form.php
+file
+389
+
+
+
+2012-10-16T13:46:11.783840Z
+4d6c57cb69df2c9c7c736471ace8cbe4
+2012-10-16T13:51:26.763024Z
+389
+tonicucoz
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+7117
+
diff --git a/h-source/Application/Views/Desktop/Notebooks/.svn/text-base/form.php.svn-base b/h-source/Application/Views/Desktop/Notebooks/.svn/text-base/form.php.svn-base
new file mode 100644
index 0000000..79a9419
--- /dev/null
+++ b/h-source/Application/Views/Desktop/Notebooks/.svn/text-base/form.php.svn-base
@@ -0,0 +1,156 @@
+<?php if (!defined('EG')) die('Direct access not allowed!'); ?>
+
+<?php
+// h-source, a web software to build a community of people that want to share their hardware information.
+// Copyright (C) 2010 Antonio Gallo (h-source-copyright.txt)
+//
+// This file is part of h-source
+//
+// h-source is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// h-source is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with h-source. If not, see <http://www.gnu.org/licenses/>.
+?>
+
+ <script>
+
+ $(document).ready(function() {
+
+ dist_list_helper();
+
+ $("#bb_code").markItUp(mySettings);
+
+ });
+
+ </script>
+
+ <?php echo $notice;?>
+
+ <div class="notebooks_insert_form">
+ <form action="<?php echo $this->baseUrl."/notebooks/".$this->action."/$lang/$token".$this->viewStatus;?>" method="POST">
+
+ <div class="edit_form">
+
+ <div class="form_entry">
+ <div class="entry_label"><?php echo gtext("vendor");?>:</div>
+ <?php echo Html_Form::select('vendor',$values['vendor'],Notebooks::$vendors,"select_entry");?>
+ <a href="<?php echo $this->baseUrl."/issues/viewall/$lang/1/$token";?>">Vendor not present?</a>
+ </div>
+
+ <div class="form_entry">
+ <div class="entry_label"><?php echo gtext("model name");?>: <b>*</b><?php echo $modelNameLabel;?></div>
+ <?php echo Html_Form::input('model',$values['model'],'input_entry');?>
+ </div>
+
+ <div class="form_entry">
+ <div class="entry_label"><?php echo gtext("subtype (notebook, netbook, tablet)");?>:</div>
+ <?php echo Html_Form::select('subtype',$values['subtype'],Notebooks::$subtypeSelect,"select_entry");?>
+ </div>
+
+ <div class="form_entry">
+ <div class="entry_label"><?php echo gtext("architecture");?>:</div>
+ <?php echo Html_Form::select('architecture',$values['architecture'],Notebooks::$architectureSelect,"select_entry");?>
+ </div>
+
+ <div class="form_entry">
+ <div class="entry_label"><?php echo gtext("does it have a free boot firmware (BIOS,UEFI,...) ?");?></div>
+ <?php echo Html_Form::select('bios',$values['bios'],Notebooks::$biosSelect,"select_entry");?>
+ </div>
+
+ <div class="form_entry">
+ <div class="entry_label"><?php echo gtext("can free operating systems be installed?");?></div>
+ <?php echo Html_Form::select('can_free_systems_be_installed',$values['can_free_systems_be_installed'],Notebooks::$installableSelect,"select_entry");?>
+ </div>
+
+ <div class="form_entry">
+ <div class="entry_label"><?php echo gtext("does the device prevent installing wifi cards not-approved by the vendor?");?><?php echo $preventWifiLabel;?></div>
+ <?php echo Html_Form::select('prevent_wifi',$values['prevent_wifi'],Notebooks::$preventWifiSelect,"select_entry");?>
+ </div>
+
+ <div class="form_entry">
+ <div class="entry_label"><?php echo gtext("year of commercialization");?>:</div>
+ <?php echo Html_Form::select('comm_year',$values['comm_year'],Hardware::getCommYears(),"select_entry");?>
+ </div>
+
+ <div class="form_entry td_with_distribution_checkboxes">
+ <div class="entry_label"><?php echo gtext("GNU/Linux distribution used for the test");?>: <b>*</b></div>
+ <?php include(ROOT . DS . APPLICATION_PATH . DS . 'Views' . DS . Params::$viewSubfolder. DS . 'noscript_distributions.php');?>
+ <?php echo Html_Form::input('distribution',$values['distribution'],'input_entry input_distribution');?>
+ <?php echo Distributions::getFormHtml();?>
+ </div>
+
+ <div class="form_entry hidden_x_explorer">
+ <div class="entry_label"><?php echo gtext("compatibility with free software");?>:</div>
+ <?php echo Html_Form::select('compatibility',$values['compatibility'],Notebooks::$compatibility,"select_entry");?>
+ <a class="open_help_window" title="compatibility help page" target="blank" href="<?php echo $this->baseUrl."/wiki/page/$lang/Compatibility-classes#Notebooks";?>"><img class="top_left_images_help" src="<?php echo $this->baseUrl;?>/Public/Img/Acun/help_hint.png"></a>
+ </div>
+
+ <div class="form_entry">
+ <div class="entry_label"><?php echo gtext("tested with the following kernel libre");?>:<br /><span class="entry_label_small"><?php echo gtext("Write a comma-separated list of kernel versions");?><br /><?php echo gtext("Example");?>: 2.6.35-28-generic, 2.6.38-11 </span></div>
+ <?php echo Html_Form::input('kernel',$values['kernel'],'input_entry');?>
+ </div>
+
+ <div class="form_entry">
+ <div class="entry_label"><?php echo gtext("video card model");?>:</div>
+ <?php echo Html_Form::input('video_card_type',$values['video_card_type'],'input_entry');?>
+ </div>
+
+ <div class="form_entry">
+ <div class="entry_label"><?php echo gtext("does the video card work?");?></div>
+ <?php echo Html_Form::select('video_card_works',$values['video_card_works'],Notebooks::$videoSelect,"select_entry");?>
+ </div>
+
+ <div class="form_entry">
+ <div class="entry_label"><?php echo gtext("wifi model");?>:</div>
+ <?php echo Html_Form::input('wifi_type',$values['wifi_type'],'input_entry');?>
+ </div>
+
+ <div class="form_entry">
+ <div class="entry_label"><?php echo gtext("does the wifi card work?");?></div>
+ <?php echo Html_Form::select('wifi_works',$values['wifi_works'],Notebooks::$wifiSelect,"select_entry");?>
+ </div>
+
+ <div class="form_entry">
+ <div class="entry_label"><?php echo gtext("webcam model");?>:</div>
+ <?php echo Html_Form::input('webcam_type',$values['webcam_type'],'input_entry');?>
+ </div>
+
+ <div class="form_entry">
+ <div class="entry_label"><?php echo gtext("does the webcam work?");?></div>
+ <?php echo Html_Form::select('webcam_works',$values['webcam_works'],Notebooks::$webcamSelect,"select_entry");?>
+ </div>
+
+ <div class="form_entry">
+ <div class="entry_label"><?php echo gtext("Description: (write here all the useful information)");?><?php echo $descriptionLabel;?></div>
+
+ <?php if (isset($descriptionPreview)) { ?>
+ <div class="description_preview_title"><?php echo gtext("Description entry preview");?>:</div>
+ <div class="description_preview">
+ <?php echo decodeWikiText($descriptionPreview); ?>
+ </div>
+ <?php } ?>
+
+ <?php echo Html_Form::textarea('description',$values['description'],'textarea_entry','bb_code');?>
+ </div>
+
+ <?php echo $hiddenInput;?>
+
+ <input type="submit" name="previewAction" value="Preview">
+ <input type="submit" name="<?php echo $submitName;?>" value="Save">
+
+ <div class="mandatory_fields_notice">
+ <?php echo gtext("Fields marked with <b>*</b> are mandatory");?>
+ </div>
+
+ </div>
+
+ </form>
+ </div> \ No newline at end of file
diff --git a/h-source/Application/Views/Desktop/Notebooks/.svn/text-base/page.php.svn-base b/h-source/Application/Views/Desktop/Notebooks/.svn/text-base/page.php.svn-base
new file mode 100644
index 0000000..09bc80f
--- /dev/null
+++ b/h-source/Application/Views/Desktop/Notebooks/.svn/text-base/page.php.svn-base
@@ -0,0 +1,120 @@
+<?php if (!defined('EG')) die('Direct access not allowed!'); ?>
+
+<?php
+// h-source, a web software to build a community of people that want to share their hardware information.
+// Copyright (C) 2010 Antonio Gallo (h-source-copyright.txt)
+//
+// This file is part of h-source
+//
+// h-source is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// h-source is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with h-source. If not, see <http://www.gnu.org/licenses/>.
+?>
+
+ <?php if (!$isDeleted or $isadmin) { ?>
+
+ <?php
+ $tableName = (strcmp($this->action,'view') === 0) ? 'hardware' : 'revisions';
+ $displayClass = ($isDeleted and $isadmin) ? 'display_none' : null;
+ ?>
+
+ <?php foreach ($table as $item) { ?>
+ <div class="notebooks_viewall <?php echo $displayClass;?>">
+
+ <!--if revision-->
+ <?php if (strcmp($this->action,'revision') === 0) { ?>
+ <div class="revision_alert">
+ <?php echo gtext("This is an old revision of this page, as edited by");?> <b><?php echo $u->getLinkToUserFromId($updated_by);?></b> <?php echo gtext('at');?> <b><?php echo smartDate($update_date); ?></b>. <?php echo gtext("It may differ significantly from the");?> <a href="<?php echo $this->baseUrl."/".$this->controller."/view/$lang/$id_hard/".$name.$this->viewStatus;?>"><?php echo gtext("Current revision");?></a>.
+ </div>
+ <?php } ?>
+
+ <div class="notebook_model">
+ <img align="top" class="catalogue_item_icon" src="<?php echo Hardware::getIconFromType($item[$tableName]['type']);?>"> <span class="span_model_name"><?php echo gtext("model");?>: <b><?php echo $item[$tableName]['model'];?></b><span class="model_id">(<?php echo gtext("model id");?>: <?php echo $id_hard;?>)</span></span>
+ <?php if (strcmp($islogged,'yes') === 0 and strcmp($this->action,'view') === 0) { ?>
+ <span class="ask_for_removal_class"><a class="ask_for_removal_class_link" href="<?php echo $this->baseUrl;?>">ask for removal</a></span>
+ <?php } ?>
+ </div>
+
+ <div class="notebook_vendor">
+ <div class="inner_label"><?php echo gtext("subtype");?> (<?php echo gtext("notebook");?>, <?php echo gtext("netbook");?>, <?php echo gtext("motherboard");?>, <?php echo gtext("tablet");?>):</div>
+ <div class="inner_value"><b><?php echo gtext($item[$tableName]['subtype']);?></b></div>
+ </div>
+
+ <div class="notebook_vendor">
+ <div class="inner_label"><?php echo gtext("vendor");?>:</div>
+ <div class="inner_value"><b><?php echo betterVendor($item[$tableName]['vendor']);?></b></div>
+ </div>
+
+ <div class="notebook_vendor">
+ <div class="inner_label"><?php echo gtext("architecture");?>:</div>
+ <div class="inner_value"><b><?php echo gtext(translate($item[$tableName]['architecture']));?></b></div>
+ </div>
+
+ <div class="notebook_vendor">
+ <div class="inner_label"><?php echo gtext("does it have a free boot firmware (BIOS,UEFI,...) ?");?></div>
+ <div class="inner_value"><b><?php echo translate_and_gtext($item[$tableName]['bios']);?></b></div>
+ </div>
+
+ <div class="notebook_vendor">
+ <div class="inner_label"><?php echo gtext("can free operating systems be installed?");?></div>
+ <div class="inner_value"><b><?php echo gtext($item[$tableName]['can_free_systems_be_installed']);?></b> <?php if (strcmp($item[$tableName]['can_free_systems_be_installed'],'no') === 0) echo "<span class='no_bold'>(".gtext("see the details inside the description entry").")</span>";?></div>
+ </div>
+
+ <div class="notebook_vendor">
+ <div class="inner_label"><?php echo gtext("does the device prevent installing wifi cards not-approved by the vendor?");?></div>
+ <div class="inner_value"><b><?php echo translate_and_gtext($item[$tableName]['prevent_wifi']);?></b> <?php if (strcmp($item[$tableName]['prevent_wifi'],'yes') === 0) echo "<span class='no_bold'>(".gtext("see the details inside the description entry").")</span>";?></div>
+ </div>
+
+ <div class="notebook_vendor">
+ <div class="inner_label"><?php echo gtext("year of commercialization");?>:</div>
+ <div class="inner_value"><b><?php echo gtext($item[$tableName]['comm_year']);?></b></div>
+ </div>
+
+ <div class="notebook_compatibility">
+ <div class="inner_label"><?php echo gtext("compatibility with free software");?>:</div>
+ <div class="inner_value"><b><?php echo gtext($item[$tableName]['compatibility']);?></b> <a class="open_help_window" target="blank" title="compatibility help page" href="<?php echo $this->baseUrl."/wiki/page/$lang/Compatibility-classes#Notebooks";?>"><img class="top_left_images_help" src="<?php echo $this->baseUrl;?>/Public/Img/Acun/help_hint.png"></a></div>
+ </div>
+
+ <div class="model_tested_on">
+ <div class="inner_label"><?php echo gtext("tested on");?>:</div>
+ <div class="inner_value"><b><?php echo Distributions::getName($item[$tableName]['distribution']);?></b></div>
+ </div>
+
+ <div class="notebook_kernel">
+ <div class="inner_label"><?php echo gtext("tested with the following kernel libre");?>:</div>
+ <div class="inner_value"><b><?php echo implode("<br />",explode(',',$item[$tableName]['kernel']));?></b></div>
+ </div>
+
+ <div class="notebook_kernel">
+ <div class="inner_label"><?php echo gtext("video card model");?>:</div>
+ <div class="inner_value"><b><?php echo $item[$tableName]['video_card_type'];?></b> (<?php echo gtext(Notebooks::$videoReverse[$item[$tableName]['video_card_works']]);?>)</div>
+ </div>
+
+ <div class="notebook_kernel">
+ <div class="inner_label"><?php echo gtext("wifi model");?>:</div>
+ <div class="inner_value"><b><?php echo $item[$tableName]['wifi_type'];?></b> (<?php echo gtext(Notebooks::$wifiReverse[$item[$tableName]['wifi_works']]);?>)</div>
+ </div>
+
+ <div class="notebook_kernel">
+ <div class="inner_label"><?php echo gtext("webcam model");?>:</div>
+ <div class="inner_value"><b><?php echo $item[$tableName]['webcam_type'];?></b> (<?php echo gtext(Notebooks::$webcamReverse[$item[$tableName]['webcam_works']]);?>)</div>
+ </div>
+
+ <div class="notebook_description">
+ <div class="notebook_description_label"><?php echo gtext("Description");?>:</div>
+ <div class="notebook_description_value"><?php echo decodeWikiText($item[$tableName]['description']);?></div>
+ </div>
+
+ </div>
+ <?php } ?>
+
+ <?php } ?> \ No newline at end of file
diff --git a/h-source/Application/Views/Desktop/Project/index.php b/h-source/Application/Views/Desktop/Project/index.php
index 0ca0dad..cf6fc96 100644
--- a/h-source/Application/Views/Desktop/Project/index.php
+++ b/h-source/Application/Views/Desktop/Project/index.php
@@ -3,31 +3,46 @@
<?php
// h-source, a web software to build a community of people that want to share their hardware information.
// Copyright (C) 2010 Antonio Gallo (h-source-copyright.txt)
-//
-// This file is part of h-source
-//
-// h-source is free software: you can redistribute it and/or modify
+//
+// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
-// h-source is distributed in the hope that it will be useful,
+// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
-// along with h-source. If not, see <http://www.gnu.org/licenses/>.
+// along with this program. If not, see <http://www.gnu.org/licenses/>.
?>
-<?php
- if (file_exists(ROOT."/Template/".Params::$viewSubfolder."/Project/index_$lang.php"))
- {
- include(ROOT."/Template/".Params::$viewSubfolder."/Project/index_$lang.php");
- }
- else
- {
- include(ROOT."/Template/".Params::$viewSubfolder."/Project/index.php");
- }
-?>
+ <div id="left">
+
+ <div class="position_tree_box">
+ <a href="<?php echo $this->baseUrl."/home/index/$lang";?>">Home</a> &raquo; h-project
+ </div>
+
+ <div class="credits_external_box">
+
+ <div class="credits_item_title">
+ Why:
+ </div>
+
+ <div class="credits_item_description">
+ The h-node project has been created to help the free software movement by creating an archive of all the hardware that can work with a <a href="http://www.gnu.org/distros/free-distros.html">fully free operating system</a>.
+ </div>
+
+ <div class="credits_item_title">
+ Who:
+ </div>
+
+ <div class="credits_item_description">
+ Antonio Gallo (<a href="<?php echo $this->baseUrl."/meet/user/$lang/";?>tonicucoz">tonicucoz</a>), h-node.com source code developer, Giulia Fanin (<a href="<?php echo $this->baseUrl."/meet/user/$lang/";?>Julia">Julia</a>), designer of the website layout and icons (thanks for your advice and support), Luis Alberto Guzman Garcia (<a href="<?php echo $this->baseUrl."/meet/user/$lang/";?>Ark74">Ark74</a>), member of the Spanish translation team (thanks for all of your useful ideas and suggestions), Henri (<a href="<?php echo $this->baseUrl."/meet/user/$lang/";?>Hardisk">Hardisk</a>), member of the French translation team, Joerg Kohne (<a href="<?php echo $this->baseUrl."/meet/user/$lang/";?>joeko">joeko</a>), member of the German translation team, Benjamin Rochefort (<a href="<?php echo $this->baseUrl."/meet/user/$lang/";?>oysterboy">oysterboy</a>), member of the French translation team, Kostas Mousafiris (<a href="<?php echo $this->baseUrl."/meet/user/$lang/";?>kosmous">kosmous</a>), member of the Greek translation team.
+ <br />Also thanks to all of you who have believed in the project since it was born and to all of you who gave, give and will give their contribution.
+ </div>
+ </div>
+
+ </div>
diff --git a/h-source/Application/Views/Desktop/Project/index_de.php b/h-source/Application/Views/Desktop/Project/index_de.php
new file mode 100644
index 0000000..4c996a9
--- /dev/null
+++ b/h-source/Application/Views/Desktop/Project/index_de.php
@@ -0,0 +1,49 @@
+<?php if (!defined('EG')) die('Direct access not allowed!'); ?>
+
+<?php
+// h-source, a web software to build a community of people that want to share their hardware information.
+// Copyright (C) 2010 Antonio Gallo (h-source-copyright.txt)
+//
+// This program is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program. If not, see <http://www.gnu.org/licenses/>.
+?>
+
+ <div id="left">
+
+ <div class="position_tree_box">
+ <a href="<?php echo $this->baseUrl."/home/index/$lang";?>">Home</a> &raquo; h-project
+ </div>
+
+ <div class="credits_external_box">
+
+ <div class="credits_item_title">
+ Warum:
+ </div>
+
+ <div class="credits_item_description">
+ Das Projekt „h-node“ wurde ins Leben gerufen, um für die Freie-Software-Bewegung ein umfassendes Hardware-Archiv für <a href="http://www.gnu.org/distros/free-distros.html">vollkommen Freie Betriebssysteme</a> aufzubauen.
+ </div>
+
+ <div class="credits_item_title">
+ Wer:
+ </div>
+
+ <div class="credits_item_description">
+ Antonio Gallo (<a href="<?php echo $this->baseUrl."/meet/user/$lang/";?>tonicucoz">tonicucoz</a>), h-node.com source code developer, Giulia Fanin (<a href="<?php echo $this->baseUrl."/meet/user/$lang/";?>Julia">Julia</a>), Designer des Website-Layout und Symbole (Danke für die Ratschläge und Unterstützung), Luis Alberto Guzman Garcia (<a href="<?php echo $this->baseUrl."/meet/user/$lang/";?>Ark74">Ark74</a>), Mitglied des spanischen Übersetzungsteams (Danke für all die Ideen und nützlichen Anregungen), Henri (<a href="<?php echo $this->baseUrl."/meet/user/$lang/";?>Hardisk">Hardisk</a>), Mitglied des französischen Übersetzungsteams, Joerg Kohne (<a href="<?php echo $this->baseUrl."/meet/user/$lang/";?>joeko">joeko</a>), Mitglied des deutschen Übersetzungsteams, Benjamin Rochefort (<a href="<?php echo $this->baseUrl."/meet/user/$lang/";?>oysterboy">oysterboy</a>), Mitglied des französischen Übersetzungsteams, , Kostas Mousafiris (<a href="<?php echo $this->baseUrl."/meet/user/$lang/";?>kosmous">kosmous</a>), member of the Greek translation team.
+ <br />
+ Vielen Dank auch an alle, die an das Projekt, seit es ins Leben gerufen wurde, geglaubt haben und an alle, die ihren Beitrag geleistet haben, leisten und leisten werden.
+ </div>
+
+ </div>
+
+ </div>
diff --git a/h-source/Application/Views/Desktop/Project/index_es.php b/h-source/Application/Views/Desktop/Project/index_es.php
new file mode 100644
index 0000000..7e9217c
--- /dev/null
+++ b/h-source/Application/Views/Desktop/Project/index_es.php
@@ -0,0 +1,49 @@
+<?php if (!defined('EG')) die('Direct access not allowed!'); ?>
+
+<?php
+// h-source, a web software to build a community of people that want to share their hardware information.
+// Copyright (C) 2010 Antonio Gallo (h-source-copyright.txt)
+//
+// This program is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program. If not, see <http://www.gnu.org/licenses/>.
+?>
+
+ <div id="left">
+
+ <div class="position_tree_box">
+ <a href="<?php echo $this->baseUrl."/home/index/$lang";?>">Home</a> &raquo; h-project
+ </div>
+
+ <div class="credits_external_box">
+
+ <div class="credits_item_title">
+ Por que:
+ </div>
+
+ <div class="credits_item_description">
+ El proyecto h-node ha sido creado para ayudar al movimiento de software libre al crear un archivo de todo el hardware que puede funcionar con un <a href="http://www.gnu.org/distros/free-distros.es.html">sistema operativo completamente libre</a>.
+ </div>
+
+ <div class="credits_item_title">
+ Quien:
+ </div>
+
+ <div class="credits_item_description">
+ Antonio Gallo (<a href="<?php echo $this->baseUrl."/meet/user/$lang/";?>tonicucoz">tonicucoz</a>), h-node.com source code developer, Giulia Fanin (<a href="<?php echo $this->baseUrl."/meet/user/$lang/";?>Julia">Julia</a>), diseñadora del tema e iconos del sitio, (gracias por su consejo y apoyo), Luis Alberto Guzman Garcia (<a href="<?php echo $this->baseUrl."/meet/user/$lang/";?>Ark74">Ark74</a>), miembro del equipo de traducción al Español (gracias por sus útiles ideas y sugerencias), Henri (<a href="<?php echo $this->baseUrl."/meet/user/$lang/";?>Hardisk">Hardisk</a>), miembro del equipo de traducción al Francés, Joerg Kohne (<a href="<?php echo $this->baseUrl."/meet/user/$lang/";?>joeko">joeko</a>), miembro del equipo de traducción al Alemán, Benjamin Rochefort (<a href="<?php echo $this->baseUrl."/meet/user/$lang/";?>oysterboy">oysterboy</a>), miembro del equipo de traducción al Francés, , Kostas Mousafiris (<a href="<?php echo $this->baseUrl."/meet/user/$lang/";?>kosmous">kosmous</a>), member of the Greek translation team.
+ <br />
+ También gracias a todos aquellos que han creído en el proyecto desde que nació y a todos aquellos que dieron, dan y darán su contribución.
+ </div>
+
+ </div>
+
+ </div>
diff --git a/h-source/Application/Views/Desktop/Project/index_fr.php b/h-source/Application/Views/Desktop/Project/index_fr.php
new file mode 100644
index 0000000..3e0e6ad
--- /dev/null
+++ b/h-source/Application/Views/Desktop/Project/index_fr.php
@@ -0,0 +1,48 @@
+<?php if (!defined('EG')) die('Direct access not allowed!'); ?>
+
+<?php
+// h-source, a web software to build a community of people that want to share their hardware information.
+// Copyright (C) 2010 Antonio Gallo (h-source-copyright.txt)
+//
+// This program is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program. If not, see <http://www.gnu.org/licenses/>.
+?>
+
+ <div id="left">
+
+ <div class="position_tree_box">
+ <a href="<?php echo $this->baseUrl."/home/index/$lang";?>">Home</a> &raquo; h-project
+ </div>
+
+ <div class="credits_external_box">
+
+ <div class="credits_item_title">
+ Pourquoi:
+ </div>
+
+ <div class="credits_item_description">
+ Le projet h-node a été créer pour aider le mouvement du logiciel libre en créant une archive de matériel fonctionnel avec des <a href="http://www.gnu.org/distros/free-distros.fr.html">systèmes entièrement libres</a>.
+ </div>
+
+ <div class="credits_item_title">
+ Qui:
+ </div>
+
+ <div class="credits_item_description">
+ Antonio Gallo (<a href="<?php echo $this->baseUrl."/meet/user/$lang/";?>tonicucoz">tonicucoz</a>), h-node.com source code developer, Giulia Fanin (<a href="<?php echo $this->baseUrl."/meet/user/$lang/";?>Julia">Julia</a>), graphiste du site et des icones (merci pour tes conseils et ton support), Luis Alberto Guzman Garcia (<a href="<?php echo $this->baseUrl."/meet/user/$lang/";?>Ark74">Ark74</a>), membre de l’équipe de traduction espagnole (merci pour toutes vos bonnes idée et suggestion), Henri (<a href="<?php echo $this->baseUrl."/meet/user/$lang/";?>Hardisk">Hardisk</a>), membre de l’équipe de traduction française, Joerg Kohne (<a href="<?php echo $this->baseUrl."/meet/user/$lang/";?>joeko">joeko</a>), membre de l’équipe de traduction allemande, Benjamin Rochefort (<a href="<?php echo $this->baseUrl."/meet/user/$lang/";?>oysterboy">oysterboy</a>), membre de l’équipe de traduction française, Kostas Mousafiris (<a href="<?php echo $this->baseUrl."/meet/user/$lang/";?>kosmous">kosmous</a>), member of the Greek translation team.
+ <br />Remerciement également à tout ceux qui ont crus à ce projet depuis sa naissance et à tout ceux qui ont donné, donne ou donnerons leurs contributions.
+ </div>
+
+ </div>
+
+ </div>
diff --git a/h-source/Application/Views/Desktop/Project/index_gr.php b/h-source/Application/Views/Desktop/Project/index_gr.php
new file mode 100644
index 0000000..2b964da
--- /dev/null
+++ b/h-source/Application/Views/Desktop/Project/index_gr.php
@@ -0,0 +1,48 @@
+<?php if (!defined('EG')) die('Direct access not allowed!'); ?>
+
+<?php
+// h-source, a web software to build a community of people that want to share their hardware information.
+// Copyright (C) 2010 Antonio Gallo (h-source-copyright.txt)
+//
+// This program is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program. If not, see <http://www.gnu.org/licenses/>.
+?>
+
+ <div id="left">
+
+ <div class="position_tree_box">
+ <a href="<?php echo $this->baseUrl."/home/index/$lang";?>">Home</a> &raquo; h-project
+ </div>
+
+ <div class="credits_external_box">
+
+ <div class="credits_item_title">
+ Γιατί:
+ </div>
+
+ <div class="credits_item_description">
+ Το h-node project στήθηκε για να βοηθήσει το Κίνημα Ελεύθερου Λογισμικού, με τη δημιουργία ενός αρχείου για όλο το υλικό (hardware) που μπορεί να δουλέψει με ένα <a href="http://www.gnu.org/distros/free-distros.html">πλήρως ελεύθερο Λειτουργικό Σύστημα</a>.
+ </div>
+
+ <div class="credits_item_title">
+ Ποιος:
+ </div>
+
+ <div class="credits_item_description">
+ Ο Antonio Gallo (<a href="<?php echo $this->baseUrl."/meet/user/$lang/";?>tonicucoz">tonicucoz</a>), h-node.com developer πηγαίου κώδικα, η Giulia Fanin (<a href="<?php echo $this->baseUrl."/meet/user/$lang/";?>Julia">Julia</a>, designer του layout και των εικόνων αυτού του ιστοτόπου (ευχαριστούμε για τις συμβουλές σου και την υποστήριξή σου), ο Luis Alberto Guzman Garcia (<a href="<?php echo $this->baseUrl."/meet/user/$lang/";?>Ark74">Ark74</a>), μέλος της Ισπανικής μεταφραστικής ομάδας (ευχαριστούμε για όλες τις χρήσιμες ιδέες σου και τις προτάσεις σου), ο Henri (<a href="<?php echo $this->baseUrl."/meet/user/$lang/";?>Hardisk">Hardisk</a>), μέλος της Γαλλικής μεταφραστικής ομάδας, ο Joerg Kohne (<a href="<?php echo $this->baseUrl."/meet/user/$lang/";?>joeko">joeko</a>), μέλος της Γερμανικής μεταφραστικής ομάδας, ο Benjamin Rochefort (<a href="<?php echo $this->baseUrl."/meet/user/$lang/";?>oysterboy">oysterboy</a>), μέλος της Γαλλικής μεταφραστικής ομάδας, Kostas Mousafiris (<a href="<?php echo $this->baseUrl."/meet/user/$lang/";?>kosmous">kosmous</a>), member of the Greek translation team.
+ <br />Ευχαριστούμε, επίσης, όλους εσάς που πιστέψατε σε αυτό το project από τη γέννησή του, καθώς και όλους εσάς που δώσατε, δίνετε και θα δίνετε την συνεισφορά σας.
+ </div>
+
+ </div>
+
+ </div>
diff --git a/h-source/Application/Views/Desktop/Project/index_it.php b/h-source/Application/Views/Desktop/Project/index_it.php
new file mode 100644
index 0000000..aa142f8
--- /dev/null
+++ b/h-source/Application/Views/Desktop/Project/index_it.php
@@ -0,0 +1,48 @@
+<?php if (!defined('EG')) die('Direct access not allowed!'); ?>
+
+<?php
+// h-source, a web software to build a community of people that want to share their hardware information.
+// Copyright (C) 2010 Antonio Gallo (h-source-copyright.txt)
+//
+// This program is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program. If not, see <http://www.gnu.org/licenses/>.
+?>
+
+ <div id="left">
+
+ <div class="position_tree_box">
+ <a href="<?php echo $this->baseUrl."/home/index/$lang";?>">Home</a> &raquo; h-project
+ </div>
+
+ <div class="credits_external_box">
+
+ <div class="credits_item_title">
+ Why:
+ </div>
+
+ <div class="credits_item_description">
+ Il progetto h-node è stato creato per aiutare il movimento del software libero creando un archivio di tutto l' hardware che funzioni con un <a href="http://www.gnu.org/distros/free-distros.it.html">sistema operativo completamente libero</a>.
+ </div>
+
+ <div class="credits_item_title">
+ Who:
+ </div>
+
+ <div class="credits_item_description">
+ Antonio Gallo (<a href="<?php echo $this->baseUrl."/meet/user/$lang/";?>tonicucoz">tonicucoz</a>), sviluppatore del codice di h-node.com, Giulia Fanin (<a href="<?php echo $this->baseUrl."/meet/user/$lang/";?>Julia">Julia</a>), designer del layout del sito e delle icone (grazie per i consigli e il supporto), Luis Alberto Guzman Garcia (<a href="<?php echo $this->baseUrl."/meet/user/$lang/";?>Ark74">Ark74</a>), membro del team di traduzione spagnolo (grazie per tutte le idee e gli utili suggerimenti), Henri (<a href="<?php echo $this->baseUrl."/meet/user/$lang/";?>Hardisk">Hardisk</a>), membro del team di traduzione francese, Joerg Kohne (<a href="<?php echo $this->baseUrl."/meet/user/$lang/";?>joeko">joeko</a>), membro del team di traduzione tedesco, Benjamin Rochefort (<a href="<?php echo $this->baseUrl."/meet/user/$lang/";?>oysterboy">oysterboy</a>), membro del team di traduzione francese, , Kostas Mousafiris (<a href="<?php echo $this->baseUrl."/meet/user/$lang/";?>kosmous">kosmous</a>), membro del team di traduzione greco.
+ <br />Grazie anche a tutti Voi che avete creduto nel progetto sin dalla sua nascita e a tutti quelli che hanno dato, danno e daranno il loro contributo.
+ </div>
+
+ </div>
+
+ </div>
diff --git a/h-source/Application/Views/Desktop/Search/lspci_results.php b/h-source/Application/Views/Desktop/Search/lspci_results.php
index c8da509..970789b 100644
--- a/h-source/Application/Views/Desktop/Search/lspci_results.php
+++ b/h-source/Application/Views/Desktop/Search/lspci_results.php
@@ -78,7 +78,7 @@
<li><b><?php echo gtext("vendor");?>:</b><?php echo $device['vendorName'];?></li>
<li><b><?php echo gtext("VendorID:ProductID code of the device");?></b>: <?php echo $device['vendorId'].":".$device['deviceId'];?></li>
</ul>
- <a href="<?php echo $this->baseUrl."/".Hardware::getControllerFromType(Hardware::getTypeFromClass($device['classId']))."/insert/$lang";?>"><img align="top" src="<?php echo $this->baseUrl;?>/Public/Img/Crystal/agt_forward.png"> <?php echo gtext("insert");?></a>
+ <a href="<?php echo Go::toHardwareType(Hardware::getTypeFromClass($device['classId']));?>"><img align="top" src="<?php echo $this->baseUrl;?>/Public/Img/Crystal/agt_forward.png"> insert</a>
</div>
</div>
</div>
diff --git a/h-source/Application/Views/Desktop/Manager/distros.php b/h-source/Application/Views/Desktop/Wiki/not_found.php
index 79d60ea..cd435de 100644
--- a/h-source/Application/Views/Desktop/Manager/distros.php
+++ b/h-source/Application/Views/Desktop/Wiki/not_found.php
@@ -23,13 +23,12 @@
<div id="left">
<div class="position_tree_box">
- <a href="<?php echo $this->baseUrl."/home/index/$lang";?>">Home</a> &raquo; <?php echo gtext('List of allowed fully free distributions');?>
+ <a href="<?php echo $this->baseUrl."/home/index/$lang";?>">Home</a> &raquo; <a href="<?php echo $this->baseUrl."/wiki/page/$lang";?>">Wiki</a> &raquo; <?php echo gtext('Page not-found'); ?>
</div>
-
- <div class="contrib_explain_box">
- <?php echo gtext('List of allowed fully free distributions');?>
+
+ <div class="wiki_external_box">
+ <div>
+ <?php echo gtext('the wiki page has not been found');?>. <a href="<?php echo $this->baseUrl."/wiki/insert/$lang";?>"><?php echo gtext('Would you like to insert it?');?></a>
+ </div>
</div>
-
- <?php echo $scaffold;?>
-
- </div>
+
diff --git a/h-source/Application/Views/Desktop/Wiki/page.php b/h-source/Application/Views/Desktop/Wiki/page.php
new file mode 100644
index 0000000..1716edc
--- /dev/null
+++ b/h-source/Application/Views/Desktop/Wiki/page.php
@@ -0,0 +1,154 @@
+<?php if (!defined('EG')) die('Direct access not allowed!'); ?>
+
+<?php
+// h-source, a web software to build a community of people that want to share their hardware information.
+// Copyright (C) 2010 Antonio Gallo (h-source-copyright.txt)
+//
+// This file is part of h-source
+//
+// h-source is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// h-source is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with h-source. If not, see <http://www.gnu.org/licenses/>.
+?>
+
+ <div id="left">
+
+ <?php
+ $tableName = strcmp($this->action,'page') === 0 ? 'wiki' : 'wiki_revisions';
+ $displayClass = ($isDeleted) ? 'display_none' : null;
+ ?>
+
+ <?php if ( strcmp($this->action,'page') === 0 ) { ?>
+
+ <div class="position_tree_box">
+ <a href="<?php echo $this->baseUrl."/home/index/$lang";?>">Home</a> &raquo; <a href="<?php echo $this->baseUrl."/wiki/page/$lang/Main-Page";?>">Wiki</a> &raquo; <?php echo $tree_name;?>
+ </div>
+
+ <!--block the page-->
+ <?php if ($isadmin) { ?>
+ <div class="moderator_box_deleted">
+ <?php if ($isBlocked) { ?>
+ <?php echo gtext('This wiki page has been blocked'); ?>
+
+ <a id="<?php echo $id_wiki;?>" class="pageunblock_page block_general" href="<?php echo $this->baseUrl."/home/index/$lang";?>"><img src="<?php echo $this->baseUrl;?>/Public/Img/Crystal/unlock.png"><?php echo gtext('unblock the wiki page'); ?></a>
+
+ <?php } else { ?>
+
+ <a id="<?php echo $id_wiki;?>" class="pageblock_page block_general" href="<?php echo $this->baseUrl."/home/index/$lang";?>"><img src="<?php echo $this->baseUrl;?>/Public/Img/Crystal/lock.png"><?php echo gtext('block the wiki page'); ?></a>
+
+ <?php } ?>
+
+ <?php if ($isDeleted) { ?>
+ <div class="wiki_hidden_notice"><?php echo gtext('This wiki page has been deleted'); ?></div>
+
+ <a id="<?php echo $id_wiki;?>" class="pageshow_page_del block_general" href="<?php echo $this->baseUrl."/home/index/$lang";?>"><img src="<?php echo $this->baseUrl;?>/Public/Img/Crystal/button_ok.png"><?php echo gtext('restore the wiki page'); ?></a>
+
+ <?php } else { ?>
+
+ <a id="<?php echo $id_wiki;?>" class="pagehide_page_del block_general" href="<?php echo $this->baseUrl."/home/index/$lang";?>"><img src="<?php echo $this->baseUrl;?>/Public/Img/Crystal/button_cancel.png"><?php echo gtext('delete the wiki page'); ?></a>
+
+ <?php } ?>
+
+ <!--view details-->
+ <div class="show_hidden_box_ext">
+ <div class="md_type">page</div>
+ <?php if ($isDeleted) { ?>
+ <a class="hidden_message_view_page" href="<?php echo $this->baseUrl."/home/index/$lang";?>"><?php echo gtext("see the page");?></a> |
+ <?php } ?>
+ <a id="<?php echo $id_wiki;?>" class="hidden_message_view_details" href="<?php echo $this->baseUrl."/home/index/$lang";?>">view details</a>
+ <div class="moderation_details_box"></div>
+ </div>
+
+ </div>
+ <?php } ?>
+
+ <div class="notebook_insert_link">
+ <div class="view_page_back_button">
+ <a title="Insert a new wiki page" href="<?php echo $this->baseUrl."/".$this->controller."/insert/$lang";?>"><img class="top_left_images" src="<?php echo $this->baseUrl;?>/Public/Img/new-60.png"></a>
+ </div>
+
+ <?php if (!$isDeleted) { ?>
+ <div class="view_page_history_button">
+ <a title="talk page" href="<?php echo $this->baseUrl."/".$this->controller."/talk/$lang/$id_wiki";?>"><img class="top_left_note_image" src="<?php echo $this->baseUrl;?>/Public/Img/talk-60.png"></a>
+ </div>
+
+ <div class="view_page_history_button">
+ <a title="history page" href="<?php echo $this->baseUrl."/".$this->controller."/history/$lang/$id_wiki";?>"><img class="top_left_note_image" src="<?php echo $this->baseUrl;?>/Public/Img/history-60.png"></a>
+ </div>
+ <?php } ?>
+
+ <?php if (!$isDeleted and !$isBlocked) { ?>
+ <div class="view_page_update_button">
+ <form action="<?php echo $this->baseUrl."/".$this->controller."/update/$lang";?>" method="POST">
+ <input title="edit page" class="update_submit_class" type="image" src="<?php echo $this->baseUrl;?>/Public/Img/edit-60.png" value="xedit">
+ <input type="hidden" name="id_wiki" value="<?php echo $id_wiki;?>">
+ </form>
+ </div>
+ <?php } ?>
+ </div>
+
+ <?php if (!$isDeleted) { ?>
+ <div class="talk_numb_ext_wiki">
+ <a href="<?php echo $this->baseUrl."/".$this->controller."/talk/$lang/$id_wiki";?>"><?php echo gtext("talk messages");?>: <?php echo $talk_number;?></a>
+ </div>
+ <?php } ?>
+
+ <?php } else if ( strcmp($this->action,'revision') === 0 ) { ?>
+
+ <div class="position_tree_box">
+ <a href="<?php echo $this->baseUrl."/home/index/$lang";?>">Home</a> &raquo; <?php echo $tree; ?>
+ </div>
+
+ <div class="notebook_view_title">
+ <?php echo gtext("Revision of the wiki page");?> <b><?php echo $tree_name;?></b>
+ </div>
+
+ <div class="notebook_insert_link">
+ <a title="Back to the history of the page <?php echo $tree_name;?>" href="<?php echo $this->baseUrl."/".$this->controller."/history/$lang/".$id_wiki.$this->viewStatus;?>"><img class="top_left_images" src="<?php echo $this->baseUrl;?>/Public/Img/back-60.png"></a>
+ </div>
+
+ <?php } ?>
+
+ <div class="wiki_external_box <?php echo $displayClass;?>">
+
+ <?php if (!$isDeleted or $isadmin) { ?>
+
+ <!--if revision-->
+ <?php if (strcmp($this->action,'revision') === 0) { ?>
+ <div class="revision_alert">
+ <?php echo gtext("This is an old revision of this page, as edited by");?> <b><?php echo $u->getLinkToUserFromId($created_by);?></b> <?php echo gtext('at');?> <b><?php echo smartDate($update_date); ?></b>. <?php echo gtext("It may differ significantly from the");?> <a href="<?php echo $this->baseUrl."/wiki/page/$lang/".encodeUrl($tree_name);?>"><?php echo gtext("Current revision");?></a></a>.
+ </div>
+ <?php } ?>
+
+ <?php foreach ($table as $page) { ?>
+ <div class="wiki_page_title">
+ <?php echo $page[$tableName]['title']?>
+ <?php if ( strcmp($this->action,'page') === 0 ) { ?>
+ <?php if ($isBlocked) { ?>
+ <span class="blocked_notice"><?php echo gtext('This wiki page has been blocked'); ?></span>
+ <?php } ?>
+ <?php } ?>
+ </div>
+ <div class="wiki_page_content">
+ <?php echo decodeWikiText($page[$tableName]['page'])?>
+ </div>
+ <?php } ?>
+
+ <? } ?>
+
+ </div>
+
+ <?php if ($isDeleted) { ?>
+ <div class="revision_alert">
+ <?php echo gtext('This wiki page has been deleted'); ?>
+ </div>
+ <?php } ?>
diff --git a/h-source/Application/Views/Desktop/footer.php b/h-source/Application/Views/Desktop/footer.php
index a9012bd..8970590 100644
--- a/h-source/Application/Views/Desktop/footer.php
+++ b/h-source/Application/Views/Desktop/footer.php
@@ -3,40 +3,43 @@
<?php
// h-source, a web software to build a community of people that want to share their hardware information.
// Copyright (C) 2010 Antonio Gallo (h-source-copyright.txt)
-//
-// This file is part of h-source
-//
-// h-source is free software: you can redistribute it and/or modify
+//
+// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
-// h-source is distributed in the hope that it will be useful,
+// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
-// along with h-source. If not, see <http://www.gnu.org/licenses/>.
+// along with this program. If not, see <http://www.gnu.org/licenses/>.
?>
- <div id="footer">
+ <div id="footer">
<div class="copyright_notice_box">
The <a href="<?php echo $this->baseUrl."/project/index/$lang";?>"><?php echo Website::$projectName;?></a> Project
</div>
<div class="footer_credits_box">
- <a href="<?php echo $this->baseUrl."/credits/index/$lang";?>"><?php echo gtext("credits");?></a>
+ <a href="<?php echo $this->baseUrl."/credits/index/$lang";?>">credits</a>
</div>
<div class="footer_credits_box">
- <a href="<?php echo $this->baseUrl."/contact/index/$lang";?>"><?php echo gtext("contact us");?></a>
+ <a href="<?php echo $this->baseUrl."/contact/index/$lang";?>">contact</a>
</div>
</div> <!--fine footer-->
-
- <div style="padding:5px 0px;font-size:12px;"><a href="<?php echo $this->baseUrl;?>/static/licenses.html" rel="jslicense"><?php echo gtext("JavaScript license information");?></a>
+ <div style="padding:5px 0px;font-size:12px;">h-node.org is a hardware database project. It runs the <a href="http://savannah.nongnu.org/projects/h-source/">h-source</a> PHP software, version SVN-387, available under the GNU General Public (GPLv3) License.</div>
+ <div style="padding:5px 0px;font-size:12px;"><a href="<?php echo $this->baseUrl;?>/static/licenses.html" rel="jslicense">JavaScript license information</a>
</div>
</div> <!--fine container-->
+<?php
+//$sid="23552";
+//include("/var/www/h-node.org/traffica/write_logs.php");
+?>
+
</body>
-</html>
+</html>
diff --git a/h-source/Application/Views/Desktop/header.php b/h-source/Application/Views/Desktop/header.php
index 5532691..d153840 100644
--- a/h-source/Application/Views/Desktop/header.php
+++ b/h-source/Application/Views/Desktop/header.php
@@ -55,7 +55,7 @@ $currPos = $querySanitized ? $this->controller."/".$this->action : 'home/index';
<!-- jQuery ui -->
<link rel="stylesheet" href="<?php echo $this->baseUrl;?>/Public/Js/jquery/ui/css/excite-bike/jquery-ui-1.8.14.custom.css" rel="stylesheet" />
<script type="text/javascript" src="<?php echo $this->baseUrl;?>/Public/Js/jquery/ui/js/jquery-ui-1.8.21.custom.js"></script>
-
+
<script type="text/javascript">
/*
@licstart The following is the entire license notice for the
@@ -85,7 +85,7 @@ $currPos = $querySanitized ? $this->controller."/".$this->action : 'home/index';
</script>
<script type="text/javascript">
-
+
var base_url = "<?php echo $this->baseUrl;?>";
var curr_lang = "<?php echo $lang;?>";
var csrf_token = "<?php echo $token;?>";
@@ -95,7 +95,7 @@ $currPos = $querySanitized ? $this->controller."/".$this->action : 'home/index';
animateTabs(curr_lang);
});
-
+
</script>
</head>
@@ -104,7 +104,8 @@ $currPos = $querySanitized ? $this->controller."/".$this->action : 'home/index';
<div id="external_header">
<div id="header">
- <img src="<?php echo $this->baseUrl;?>/Public/Img/title.png">
+ <img style="float:left;" src="<?php echo $this->baseUrl;?>/Public/Img/title.png">
+ <a href="http://www.fsf.org"><img style="float:right;" src="<?php echo $this->baseUrl;?>/Public/Img/fsf_logo.png"></a>
</div>
</div>
diff --git a/h-source/Application/Views/Desktop/wiki_page.php b/h-source/Application/Views/Desktop/wiki_page.php
index 2316f10..48f7b96 100644
--- a/h-source/Application/Views/Desktop/wiki_page.php
+++ b/h-source/Application/Views/Desktop/wiki_page.php
@@ -1,5 +1,4 @@
<?php if (!defined('EG')) die('Direct access not allowed!'); ?>
-
<?php
// h-source, a web software to build a community of people that want to share their hardware information.
// Copyright (C) 2010 Antonio Gallo (h-source-copyright.txt)
@@ -19,7 +18,7 @@
// You should have received a copy of the GNU General Public License
// along with h-source. If not, see <http://www.gnu.org/licenses/>.
?>
-
+
<div id="left">
<?php
@@ -139,7 +138,7 @@
<?php } ?>
</div>
<div class="wiki_page_content">
- <?php echo decodeWikiText($page[$tableName]['page'])?>
+ <?php echo decodeWikiText($page[$tableName]['page']);?>
</div>
<?php } ?>
diff --git a/h-source/Application/Views/Mobile/Contact/index.php b/h-source/Application/Views/Mobile/Contact/index.php
index 9d4d806..51e0466 100644
--- a/h-source/Application/Views/Mobile/Contact/index.php
+++ b/h-source/Application/Views/Mobile/Contact/index.php
@@ -20,13 +20,22 @@
// along with h-source. If not, see <http://www.gnu.org/licenses/>.
?>
-<?php
- if (file_exists(ROOT."/Template/".Params::$viewSubfolder."/Contact/index_$lang.php"))
- {
- include(ROOT."/Template/".Params::$viewSubfolder."/Contact/index_$lang.php");
- }
- else
- {
- include(ROOT."/Template/".Params::$viewSubfolder."/Contact/index.php");
- }
-?>
+ <div data-role="content">
+
+ <div class="position_tree_box">
+ <a href="<?php echo $this->baseUrl."/home/index/$lang";?>">Home</a> &raquo; contact
+ </div>
+
+ <div class="credits_external_box">
+
+ <div class="contact_div">
+ You can suggest to implement new features or add new types of hardware in the <a href="<?php echo $this->baseUrl."/issues/viewall/$lang/1/$token";?>">issues</a> page
+ </div>
+
+ <div class="contact_div">
+ If you want to directly contact the <b><?php echo Website::$generalName;?></b> team use this e-mail address: <b>info@h-node.com</b>
+ </div>
+
+ </div>
+
+ </div>
diff --git a/h-source/Template/Mobile/Contact/index_es.php b/h-source/Application/Views/Mobile/Contact/index_de.php
index a38814c..cb273af 100644
--- a/h-source/Template/Mobile/Contact/index_es.php
+++ b/h-source/Application/Views/Mobile/Contact/index_de.php
@@ -26,6 +26,16 @@
<a href="<?php echo $this->baseUrl."/home/index/$lang";?>">Home</a> &raquo; contact
</div>
-
+ <div class="credits_external_box">
+
+ <div class="contact_div">
+ Sie können neu zu implementierende Funktionen vorschlagen oder neue Hardware-Typen in der Seite <a href="<?php echo $this->baseUrl."/issues/viewall/$lang/1/$token";?>">Web-Log</a> hinzufügen
+ </div>
+
+ <div class="contact_div">
+ Wenn Sie das <b>h-node-Team</b> direkt kontaktieren möchten: <b>info@h-node.com</b>
+ </div>
+
+ </div>
</div>
diff --git a/h-source/Template/Mobile/Contact/index.php b/h-source/Application/Views/Mobile/Contact/index_es.php
index b3d502f..8c79aa8 100644
--- a/h-source/Template/Mobile/Contact/index.php
+++ b/h-source/Application/Views/Mobile/Contact/index_es.php
@@ -26,6 +26,16 @@
<a href="<?php echo $this->baseUrl."/home/index/$lang";?>">Home</a> &raquo; contact
</div>
- <p>write in the file <b>Template/Mobile/Contact/index.php</b> your contact information</p>
+ <div class="credits_external_box">
+
+ <div class="contact_div">
+ Puede sugerir el implementar nuevas caracteriticas o agregar nuevo hardware en la página de <a href="<?php echo $this->baseUrl."/issues/viewall/$lang/1/$token";?>">incidencias</a>
+ </div>
+
+ <div class="contact_div">
+ Si desea contactar directamente al equipo de <b><?php echo Website::$generalName;?></b> use esta dirección de correo electronico: <b>info@h-node.com</b>
+ </div>
+
+ </div>
</div>
diff --git a/h-source/Template/Mobile/Project/index.php b/h-source/Application/Views/Mobile/Contact/index_fr.php
index 0aefcc0..2b2b7dd 100644
--- a/h-source/Template/Mobile/Project/index.php
+++ b/h-source/Application/Views/Mobile/Contact/index_fr.php
@@ -23,9 +23,19 @@
<div data-role="content">
<div class="position_tree_box">
- <a href="<?php echo $this->baseUrl."/home/index/$lang";?>">Home</a> &raquo; h-project
+ <a href="<?php echo $this->baseUrl."/home/index/$lang";?>">Home</a> &raquo; contact
</div>
- <p>write in the file <b>Template/Mobile/Project/index.php</b> your project information</p>
+ <div class="credits_external_box">
+
+ <div class="contact_div">
+ Vous pouvez suggérez l’implémentation de nouvelles fonctionnalitée ou l’ajout d’un nouveau type de matériel dans la page <a href="<?php echo $this->baseUrl."/issues/viewall/$lang/1/$token";?>">problème</a>.
+ </div>
+
+ <div class="contact_div">
+ Si vous voulez contatez directement l’équipe <b><?php echo Website::$generalName;?></b>, utilisez cette adresse mail : <b>info@h-node.com</b>
+ </div>
+
+ </div>
</div>
diff --git a/h-source/Application/Views/Mobile/Contact/index_gr.php b/h-source/Application/Views/Mobile/Contact/index_gr.php
new file mode 100644
index 0000000..069d14d
--- /dev/null
+++ b/h-source/Application/Views/Mobile/Contact/index_gr.php
@@ -0,0 +1,41 @@
+<?php if (!defined('EG')) die('Direct access not allowed!'); ?>
+
+<?php
+// h-source, a web software to build a community of people that want to share their hardware information.
+// Copyright (C) 2010 Antonio Gallo (h-source-copyright.txt)
+//
+// This file is part of h-source
+//
+// h-source is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// h-source is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with h-source. If not, see <http://www.gnu.org/licenses/>.
+?>
+
+ <div data-role="content">
+
+ <div class="position_tree_box">
+ <a href="<?php echo $this->baseUrl."/home/index/$lang";?>">Home</a> &raquo; contact
+ </div>
+
+ <div class="credits_external_box">
+
+ <div class="contact_div">
+ Μπορείτε να εισηγηθείτε την υλοποίηση νέων χαρακτηριστικών ή την προσθήκη νέων τύπων υλικού (hardware) στην ιστοσελίδα <a href="<?php echo $this->baseUrl."/issues/viewall/$lang/1/$token";?>">issues</a>
+ </div>
+
+ <div class="contact_div">
+ Αν θέλετε να έρθετε σε άμεση επαφή με την ομάδα του <b><?php echo Website::$generalName;?></b>, χρησιμοποιείστε αυτή την ηλεκτρονική διεύθυνση: <b>info@h-node.com</b>
+ </div>
+
+ </div>
+
+ </div>
diff --git a/h-source/Template/Mobile/Contact/index_it.php b/h-source/Application/Views/Mobile/Contact/index_it.php
index a38814c..d96d767 100644
--- a/h-source/Template/Mobile/Contact/index_it.php
+++ b/h-source/Application/Views/Mobile/Contact/index_it.php
@@ -26,6 +26,16 @@
<a href="<?php echo $this->baseUrl."/home/index/$lang";?>">Home</a> &raquo; contact
</div>
-
+ <div class="credits_external_box">
+
+ <div class="contact_div">
+ Potete suggerire nuove caratteristiche da implementare o aggiungere nuovi tipi di hardware nella pagina <a href="<?php echo $this->baseUrl."/issues/viewall/$lang/1/$token";?>">issues</a>
+ </div>
+
+ <div class="contact_div">
+ Se volete direttamente contattare il team di <b><?php echo Website::$generalName;?></b> potete farlo a questo indirizzo e-mail: <b>info@h-node.com</b>
+ </div>
+
+ </div>
</div>
diff --git a/h-source/Application/Views/Mobile/Credits/index_gr.php b/h-source/Application/Views/Mobile/Credits/index_gr.php
new file mode 100644
index 0000000..424ded1
--- /dev/null
+++ b/h-source/Application/Views/Mobile/Credits/index_gr.php
@@ -0,0 +1,65 @@
+<?php if (!defined('EG')) die('Direct access not allowed!'); ?>
+
+<?php
+// h-source, a web software to build a community of people that want to share their hardware information.
+// Copyright (C) 2010 Antonio Gallo (h-source-copyright.txt)
+//
+// This file is part of h-source
+//
+// h-source is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// h-source is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with h-source. If not, see <http://www.gnu.org/licenses/>.
+?>
+
+ <div data-role="content">
+
+ <div class="position_tree_box">
+ <a href="<?php echo $this->baseUrl."/home/index/$lang";?>">Home</a> &raquo; credits
+ </div>
+
+ <div class="credits_external_box">
+
+ <div class="credits_item_title">
+ Εικόνες:
+ </div>
+
+ <div class="credits_item_description">
+ Οι εικόνες που χρησιμοποιούνται μέσα στο <?php echo Website::$generalName;?> πάρθηκαν από το θέμα εικόνας <a href="http://kde-look.org/content/show.php/ACUN+Simgeleri?content=83018">ACUN Simgeleri 0.7</a> και από το <a href="http://kde-look.org/content/show.php/H2O+Icon+Theme?content=127149">H2O Icon Theme 0.0.5</a>, που είναι αδειοδοτημένα και τα δύο υπό την Άδεια GNU GPL, από τις εικόνες <a href="http://www.everaldo.com/crystal/?action=downloads">Crystal Projects</a>, που είναι αδειοδοτημένες υπό την LGPL, από το <a href="http://www.notmart.org/index.php/Graphics">glaze icons set</a> (LGPL) και από το <a href="http://kde-look.org/content/show.php/Dark-Glass+reviewed?content=67902">DarkGlass_Reworked icons theme</a> (GPL). Οι εικόνες flag πάρθηκαν από το <a href="http://www.famfamfam.com/lab/icons/flags/">FAMFAMFAM flag icons set</a> (Public Domain).
+ </div>
+
+ <div class="credits_item_title">
+ jQuery:
+ </div>
+
+ <div class="credits_item_description">
+ Σε όλο τον ιστότοπο χρησιμοποιήθηκαν οι βιβλιοθήκες javascript <a href="http://jquery.com/">jQuery</a> και η <a href="http://jqueryui.com/home">jQuery UI</a> (που αδειοδοτούνται υπό την MIT/GPL).
+ </div>
+
+ <div class="credits_item_title">
+ markitup:
+ </div>
+
+ <div class="credits_item_description">
+ Χρησιμοποιήθηκε το <a href="http://markitup.jaysalvat.com/home/">markitup</a> jQuery plugin (που αδειοδοτείται υπό την MIT/GPL), για να βοηθηθεί ο χρήστης να εισαγάγει wiki tags
+ </div>
+
+ <div class="credits_item_title">
+ php diff algorithm:
+ </div>
+
+ <div class="credits_item_description">
+ Χρησιμοποιήθηκε ο αλγόριθμος <a href="http://compsci.ca/v3/viewtopic.php?p=142539">This</a> algorithm (που αδειοδοτείται υπό την ελεύθερη άδεια zlib), για να αναδειχθούν οι διαφορές ανάμεσα στις δύο διαφορετικές αναθεωρήσεις του ίδιου μοντέλου υλικού (hadrware).
+ </div>
+
+ </div>
+
+ </div>
diff --git a/h-source/Application/Views/Mobile/Home/left.php b/h-source/Application/Views/Mobile/Home/left.php
index 156ec85..21a62f9 100644
--- a/h-source/Application/Views/Mobile/Home/left.php
+++ b/h-source/Application/Views/Mobile/Home/left.php
@@ -20,13 +20,69 @@
// along with h-source. If not, see <http://www.gnu.org/licenses/>.
?>
-<?php
- if (file_exists(ROOT."/Template/".Params::$viewSubfolder."/Home/left_$lang.php"))
- {
- include(ROOT."/Template/".Params::$viewSubfolder."/Home/left_$lang.php");
- }
- else
- {
- include(ROOT."/Template/".Params::$viewSubfolder."/Home/left.php");
- }
-?>
+ <div data-role="content">
+
+ <div class="position_tree_box">
+ Home
+ </div>
+
+ <?php echo $htmlNewsBox;?>
+
+ <div class="home_container">
+ <div class="home_objectives_title">
+ Objectives:
+ </div>
+ <div class="home_objectives_description">
+ <img src="<?php echo $this->baseUrl;?>/Public/Img/H2O/applications-internet.png"> The <b><?php echo Website::$projectName;?></b> project aims at the construction of a hardware database in order to identify what devices work with a <a href="http://www.gnu.org/distros/free-distros.html">fully free operating system</a>. The <?php echo Website::$generalName;?> website is structured like a wiki in which all the users can modify or insert new contents. The h-node project is developed in collaboration and as an activity of the <a href="http://www.fsf.org">FSF</a>.
+ </div>
+
+ <div class="home_objectives_title">
+ Contribute:
+ </div>
+ <div class="home_objectives_description">
+ You can contribute by creating an account at <?php echo Website::$generalName;?> and editing its user-generated contents. All your modification will be saved in the history of the product you are editing/adding. Each revision (the current one or the old ones) will be marked by the name of the user who created it.<br />You can also contribute by <b>suggesting new hardware</b> that should be added to the database or <b>features that should be implemented</b>.
+ </div>
+
+ <div class="home_objectives_title">
+ Free software:
+ </div>
+ <div class="home_objectives_description">
+ <img height="100px" src="https://savannah.nongnu.org/images/Savannah.theme/floating.png">
+
+ In order to add a device to the h-node database, you must verify that it works using only free software. For this purpose, you must be running either:
+
+ <p>1) A GNU/Linux distribution that is on the <a href="http://www.gnu.org/distros/free-distros.html">FSF's list of endorsed distributions</a></p>
+
+ <p>2) <a href="http://www.debian.org">Debian GNU/Linux</a>, <strong>with only the main archive area enabled</strong>. The "contrib" and "non-free" areas must not be enabled when testing hardware. Double-check this by running <code>apt-cache policy</code>. The only package archive area mentioned in the output should be <strong>main</strong>.</p>
+
+ <p>h-node lists only hardware that works with free drivers and without non-free firmware. Other GNU/Linux distributions (or Debian with contrib, non-free, or some 3rd-party archives enabled) include non-free firmware files, so they cannot be used for testing.</p>
+ </div>
+
+ <div class="home_objectives_title">
+ License:
+ </div>
+ <div class="home_objectives_description">
+ Any text submitted by you will be put in the Public Domain (see the <a href="http://creativecommons.org/publicdomain/zero/1.0/">CC0 page</a> for detailed information). Anyone is free to copy, modify, publish, use, sell, or distribute the text you have submitted to h-node.org, for any purpose, commercial or non-commercial, and by any means.
+ </div>
+
+ <div class="home_objectives_title">
+ Other resources on the net:
+ </div>
+ <div class="home_objectives_description">
+ <p>Here is a list of other archives collecting information about hardware working with free software:</p>
+ <ul>
+<!-- <li><a href="http://www.fsf.org/resources/hw">Free Software Foundation archive</a></li> -->
+ <li><a href="http://libreplanet.org/wiki/Hardware/Freest">LibrePlanet Freest Hardware Page</a></li>
+ <li><a href="http://www.gnewsense.org/Main/LaptopGuide">gNewSense Laptop Guide</a></li>
+ <li><a href="http://libreplanet.org/wiki/Group:LibrePlanet_Italia/Progetti/hardware_libero">LibrePlanet Italia - progetti hardware database</a></li>
+ </ul>
+ </div>
+
+ <div class="home_objectives_title">
+ About the <?php echo Website::$generalName;?> website:
+ </div>
+ <div class="home_objectives_description">
+ The <?php echo Website::$generalName;?> has to be considered in <b>beta version</b>. It is constantly growing and many features have not been implemented yet (for example new hardware devices have to be inserted in the database). Some problems may occur: if you find out a bug please add an issue <a href="<?php echo $this->baseUrl."/issues/viewall/$lang/1/$token";?>">here</a> with the topic <b>maybe a bug</b>.
+ </div>
+ </div>
+ </div>
diff --git a/h-source/Application/Views/Mobile/Home/left_de.php b/h-source/Application/Views/Mobile/Home/left_de.php
new file mode 100644
index 0000000..5f99701
--- /dev/null
+++ b/h-source/Application/Views/Mobile/Home/left_de.php
@@ -0,0 +1,87 @@
+<?php if (!defined('EG')) die('Direct access not allowed!'); ?>
+
+<?php
+// h-source, a web software to build a community of people that want to share their hardware information.
+// Copyright (C) 2010 Antonio Gallo (h-source-copyright.txt)
+//
+// This file is part of h-source
+//
+// h-source is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// h-source is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with h-source. If not, see <http://www.gnu.org/licenses/>.
+?>
+
+ <div data-role="content">
+
+ <div class="position_tree_box">
+ Home
+ </div>
+
+ <?php echo $htmlNewsBox;?>
+
+ <div class="home_container">
+ <div class="home_objectives_title">
+ Ziele:
+ </div>
+ <div class="home_objectives_description">
+ <img src="<?php echo $this->baseUrl;?>/Public/Img/H2O/applications-internet.png"> Mit dem Projekt <b><?php echo Website::$projectName;?></b> soll eine Hardwaredatenbank mit Peripheriegeräten aufgebaut werdem, die mit einem <a href="http://www.gnu.org/distros/free-distros.html">vollständig freien Betriebssystem</a> arbeiten. Die Webseite von h-node.org ist wie ein Wiki aufgebaut, dessen Inhalte von allen Benutzer geändert und ergänzt werden können. Das Projekt <b>h-node</b> wird in Zusammenarbeit und als eine Aktivität der <a href="http://www.fsf.org">FSF</a> entwickelt.
+ </div>
+
+ <div class="home_objectives_title">
+ Mithelfen:
+ </div>
+ <div class="home_objectives_description">
+ Sie können nach Ihrer Anmeldung bei h-node.org dazu beitragen und die benutzergenerierten Inhalte bearbeiten. Alle Änderungen die Sie bearbeiten oder hinzufügen, werden im Produktverlauf protokolliert. Jede Version (die aktuelle oder die alte) wird der/dem BenutzerIn zugeordnet, die/der sie erstellte.<br />
+ <b>Neue Hardware</b>, die in die Datenbank aufgenommen, oder <b>neue Funktionen</b>, die hinzugefügt werden sollten, können Sie ebenfalls vorschlagen.
+ </div>
+
+ <div class="home_objectives_title">
+ Freie Software:
+ </div>
+ <div class="home_objectives_description">
+ <img height="100px" src="https://savannah.nongnu.org/images/Savannah.theme/floating.png">In order to add a device to the h-node database, you must verify that it works using only free software. For this purpose, you must be running either:
+
+ <p>1) A GNU/Linux distribution that is on the <a href="http://www.gnu.org/distros/free-distros.html">FSF's list of endorsed distributions</a></p>
+
+ <p>2) <a href="http://www.debian.org">Debian GNU/Linux</a>, <strong>with only the main archive area enabled</strong>. The "contrib" and "non-free" areas must not be enabled when testing hardware. Double-check this by running <code>apt-cache policy</code>. The only package archive area mentioned in the output should be <strong>main</strong>.</p>
+
+ <p>h-node lists only hardware that works with free drivers and without non-free firmware. Other GNU/Linux distributions (or Debian with contrib, non-free, or some 3rd-party archives enabled) include non-free firmware files, so they cannot be used for testing.</p>
+ </div>
+
+ <div class="home_objectives_title">
+ Lizenz:
+ </div>
+ <div class="home_objectives_description">
+ Jeder von Ihnen übermittelte Text wird in die Gemeinfreiheit („Public Domain“) entlassen (siehe <a href="http://creativecommons.org/publicdomain/zero/1.0/deed.de">CC0 1.0 Universell (CC0 1.0)</a> für detaillierte Informationen). Jede Person darf das Werk/den Inhalt, den Sie an h-node.org übermittelt haben, kopieren, verändern, verbreiten und aufführen, sogar zu kommerziellen Zwecken, ohne um weitere Erlaubnis bitten zu müssen und auf jedem Medium.
+ </div>
+
+ <div class="home_objectives_title">
+ Weitere Ressourcen im Internet:
+ </div>
+ <div class="home_objectives_description">
+ <p>Weitere Archive mit gesammelten Informationen über Hardware, die mit Freie Software arbeitet:</p>
+ <ul>
+<!-- <li><a href="http://www.fsf.org/resources/hw">Free Software Foundation archive</a></li> -->
+ <li><a href="http://libreplanet.org/wiki/Hardware/Freest">LibrePlanet Freest Hardware Page</a></li>
+ <li><a href="http://www.gnewsense.org/Main/LaptopGuide">gNewSense Laptop Guide</a></li>
+ <li><a href="http://libreplanet.org/wiki/Group:LibrePlanet_Italia/Progetti/hardware_libero">LibrePlanet Italia - progetti hardware database</a></li>
+ </ul>
+ </div>
+
+ <div class="home_objectives_title">
+ Über h-node.org:
+ </div>
+ <div class="home_objectives_description">
+ <b>h-node</b> muss als im Beta-Stadium betrachtet werden. Es wird ständig ergänzt haben und viele Funktionen wurden noch nicht implementiert (z. B. müssen neue Hardware-Geräte in die Datenbank eingepflegt werden). Es können Probleme auftreten: Wenn Sie einen Fehler finden, melden Sie diesen bitte im <a href="<?php echo $this->baseUrl."/issues/viewall/$lang/1/$token";?>">Web-Log</a> mit dem Thema <b>evtl. ein Fehler</b>.
+ </div>
+ </div>
+ </div>
diff --git a/h-source/Application/Views/Mobile/Home/left_es.php b/h-source/Application/Views/Mobile/Home/left_es.php
new file mode 100644
index 0000000..e17a448
--- /dev/null
+++ b/h-source/Application/Views/Mobile/Home/left_es.php
@@ -0,0 +1,87 @@
+<?php if (!defined('EG')) die('Direct access not allowed!'); ?>
+
+<?php
+// h-source, a web software to build a community of people that want to share their hardware information.
+// Copyright (C) 2010 Antonio Gallo (h-source-copyright.txt)
+//
+// This file is part of h-source
+//
+// h-source is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// h-source is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with h-source. If not, see <http://www.gnu.org/licenses/>.
+?>
+
+ <div data-role="content">
+
+ <div class="position_tree_box">
+ Home
+ </div>
+
+ <?php echo $htmlNewsBox;?>
+
+ <div class="home_container">
+ <div class="home_objectives_title">
+ Objetivos:
+ </div>
+ <div class="home_objectives_description">
+ <img src="<?php echo $this->baseUrl;?>/Public/Img/H2O/applications-internet.png"> El proyecto <b><?php echo Website::$projectName;?></b> tiene como meta la construcción de una base de datos de todo el hardware de manera que se pueda identificar que dispositivos funcionan con un <a href="http://www.gnu.org/distros/free-distros.es.html">sistema operativo completamente libre</a>. El sitio <?php echo Website::$generalName;?> esta estructurado como un wiki, en el cual todos los usuarios pueden modificar o integrar nuevos contenidos. El proyecto h-node es desarrollado en colaboración y como una actividad de la <a href="http://www.fsf.org">FSF</a>.
+ </div>
+
+ <div class="home_objectives_title">
+ Contribuir:
+ </div>
+ <div class="home_objectives_description">
+ Puede contribuir creando una cuenta en <?php echo Website::$generalName;?> y editar los contenidos generados. Todas sus modificaciones serás guardadas en el historial del producto que edite/agregue. Cada revisión (actual o previa) será marcada con el nombre del usuario que la creo.<br />También puede contribuir al <b>sugerir nuevo hardware</b> que deba ser agregado a la base de datos o <b>características que deberían ser implementadas.</b>
+ </div>
+
+ <div class="home_objectives_title">
+ Software Libre:
+ </div>
+ <div class="home_objectives_description">
+ <img height="100px" src="https://savannah.nongnu.org/images/Savannah.theme/floating.png">In order to add a device to the h-node database, you must verify that it works using only free software. For this purpose, you must be running either:
+
+ <p>1) A GNU/Linux distribution that is on the <a href="http://www.gnu.org/distros/free-distros.html">FSF's list of endorsed distributions</a></p>
+
+ <p>2) <a href="http://www.debian.org">Debian GNU/Linux</a>, <strong>with only the main archive area enabled</strong>. The "contrib" and "non-free" areas must not be enabled when testing hardware. Double-check this by running <code>apt-cache policy</code>. The only package archive area mentioned in the output should be <strong>main</strong>.</p>
+
+ <p>h-node lists only hardware that works with free drivers and without non-free firmware. Other GNU/Linux distributions (or Debian with contrib, non-free, or some 3rd-party archives enabled) include non-free firmware files, so they cannot be used for testing.</p>
+ </div>
+
+ <div class="home_objectives_title">
+ Licencias:
+ </div>
+ <div class="home_objectives_description">
+ Cualquier texto agregado por usted sera colocado en Dominio Publico (vea la <a href="http://creativecommons.org/publicdomain/zero/1.0/deed.es_CL">página CC0</a> para información detallada). Cualquiera es libre de copiar, modificar, publicar, usar, vender o distribuir el texto que ha integrado a h-node.org, para cualquier propósito, comercial o no comercial, y por cualquier método.
+ </div>
+
+ <div class="home_objectives_title">
+ Otros recursos en la red:
+ </div>
+ <div class="home_objectives_description">
+ <p>Aquí una lista de otras actividades recolectando información acerca de hardware funcionando con software libre:</p>
+ <ul>
+<!-- <li><a href="http://www.fsf.org/resources/hw">Free Software Foundation archive</a></li> -->
+ <li><a href="http://libreplanet.org/wiki/Hardware/Freest">LibrePlanet Freest Hardware Page</a></li>
+ <li><a href="http://www.gnewsense.org/Main/LaptopGuide">gNewSense Laptop Guide</a></li>
+ <li><a href="http://libreplanet.org/wiki/Group:LibrePlanet_Italia/Progetti/hardware_libero">LibrePlanet Italia - progetti hardware database</a></li>
+ </ul>
+ </div>
+
+ <div class="home_objectives_title">
+ Acerca del sitio <?php echo Website::$generalName;?>:
+ </div>
+ <div class="home_objectives_description">
+ El sitio <?php echo Website::$generalName;?> debe ser considerado una <b>versión beta</b>. Esta en constantemente crecimiento y varias características no han sido implementadas aun (por ejemplo, nuevos dispositivos de hardware tienen que ser incluidos en la base de datos). Algunos problemas pueden ocurrir: Si encuentra un error por favor agregue una incidencia <a href="<?php echo $this->baseUrl."/issues/viewall/$lang/1/$token";?>">aquí</a> bajo el tema <b>maybe a bug</b>.
+ </div>
+ </div>
+
+ </div>
diff --git a/h-source/Application/Views/Mobile/Home/left_fr.php b/h-source/Application/Views/Mobile/Home/left_fr.php
new file mode 100644
index 0000000..db51f4a
--- /dev/null
+++ b/h-source/Application/Views/Mobile/Home/left_fr.php
@@ -0,0 +1,89 @@
+<?php if (!defined('EG')) die('Direct access not allowed!'); ?>
+
+<?php
+// h-source, a web software to build a community of people that want to share their hardware information.
+// Copyright (C) 2010 Antonio Gallo (h-source-copyright.txt)
+//
+// This file is part of h-source
+//
+// h-source is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// h-source is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with h-source. If not, see <http://www.gnu.org/licenses/>.
+?>
+
+ <div data-role="content">
+
+ <div class="position_tree_box">
+ Home
+ </div>
+
+ <?php echo $htmlNewsBox;?>
+
+ <div class="home_container">
+ <div class="home_objectives_title">
+ Objectifs:
+ </div>
+
+ <div class="home_objectives_description">
+ <img src="https://www.h-node.org/Public/Img/H2O/applications-internet.png"> Le but du projet <b>h-node est</b> de créer une base de données de matériel afin d'identifier les dispositifs qui fonctionne avec un <a href="http://www.gnu.org/distros/free-distros.fr.html">système d’exploitation entièrement libre</a>. Le site h-node est structuré comme un wiki, dont tout les utilisateurs peuvent modifier ou insérer des contenus. Le projet h-node est dévellopé en collaboration et en tant qu'activitée de la <a href="http://www.fsf.org">FSF</a>.
+ </div>
+
+ <div class="home_objectives_title">
+ Contribution:
+ </div>
+ <div class="home_objectives_description">
+ Vous pouvez contribuer en créant un compte sur h-node et modifier le contenus créé par les utilisateurs. Toutes vos modifications seront enregistrées dans l’historique de l’élément que vous modifiez ou ajouter. Toutes versions (l’actuelle ou les précédentes) seront marquées au nom de l’utilisateur qui les a crées. <br />Vous pouvez aussi contribuer en <b>suggérant un autre type de matériel</b> qui devrais être ajouté à la base de données ou une nouvelle <b>fonctionnalitée qui devrais être implémentée</b>
+ </div>
+
+ <div class="home_objectives_title">
+ Logiciel libre:
+ </div>
+ <div class="home_objectives_description">
+ <img height="100px" src="https://savannah.nongnu.org/images/Savannah.theme/floating.png">In order to add a device to the h-node database, you must verify that it works using only free software. For this purpose, you must be running either:
+
+ <p>1) A GNU/Linux distribution that is on the <a href="http://www.gnu.org/distros/free-distros.html">FSF's list of endorsed distributions</a></p>
+
+ <p>2) <a href="http://www.debian.org">Debian GNU/Linux</a>, <strong>with only the main archive area enabled</strong>. The "contrib" and "non-free" areas must not be enabled when testing hardware. Double-check this by running <code>apt-cache policy</code>. The only package archive area mentioned in the output should be <strong>main</strong>.</p>
+
+ <p>h-node lists only hardware that works with free drivers and without non-free firmware. Other GNU/Linux distributions (or Debian with contrib, non-free, or some 3rd-party archives enabled) include non-free firmware files, so they cannot be used for testing.</p>
+ </div>
+
+ <div class="home_objectives_title">
+ License:
+ </div>
+
+ <div class="home_objectives_description">
+ Tout les textes que vous publierez sur le site seront dans le Domain public (Consultez la <a href="http://creativecommons.org/publicdomain/zero/1.0/deed.fr">page CC0</a> pour plus d'informations). Tout un chacun est autorisé à copier, modifier, publier, utiliser, vendre ou distribuer le texte que vous avez envoyé sur h-node.org, pour quelque utilisation que ce soit et par tout les moyens.
+ </div>
+
+ <div class="home_objectives_title">
+ Ressource supplémentaire sur Internet:
+ </div>
+ <div class="home_objectives_description">
+ <p>Voici une liste d'autres archives qui collecte des informations à propos du matériel fonctionnant avec du logiciel libre:</p>
+ <ul>
+<!-- <li><a href="http://www.fsf.org/resources/hw">Free Software Foundation archive</a></li> -->
+ <li><a href="http://libreplanet.org/wiki/Hardware/Freest">LibrePlanet Freest Hardware Page</a></li>
+ <li><a href="http://www.gnewsense.org/Main/LaptopGuide">gNewSense Laptop Guide</a></li>
+ <li><a href="http://libreplanet.org/wiki/Group:LibrePlanet_Italia/Progetti/hardware_libero">LibrePlanet Italia - progetti hardware database</a></li>
+ </ul>
+ </div>
+
+ <div class="home_objectives_title">
+ A propos du site <?php echo Website::$generalName;?>:
+ </div>
+ <div class="home_objectives_description">
+ Le site doit être considéré comme en <b>version beta</b>, il s’aggrandit constamment et beaucoup de fonctionnalitée n’ont pas encore été implémentée ( par exemple, de nouveau type d’appareil doivent être ajouter dans la base de données) . Des problèmes peuvent arriver, si vous trouver un bug, merci de remplir un <a href="<?php echo $this->baseUrl."/issues/viewall/$lang/1/$token";?>">ticket bug</a> (<b>maybe a bug</b>).
+ </div>
+ </div>
+
+ </div>
diff --git a/h-source/Application/Views/Mobile/Home/left_gr.php b/h-source/Application/Views/Mobile/Home/left_gr.php
new file mode 100644
index 0000000..38cb594
--- /dev/null
+++ b/h-source/Application/Views/Mobile/Home/left_gr.php
@@ -0,0 +1,88 @@
+<?php if (!defined('EG')) die('Direct access not allowed!'); ?>
+
+<?php
+// h-source, a web software to build a community of people that want to share their hardware information.
+// Copyright (C) 2010 Antonio Gallo (h-source-copyright.txt)
+//
+// This file is part of h-source
+//
+// h-source is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// h-source is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with h-source. If not, see <http://www.gnu.org/licenses/>.
+?>
+
+ <div data-role="content">
+
+ <div class="position_tree_box">
+ Home
+ </div>
+
+ <?php echo $htmlNewsBox;?>
+
+ <div class="home_container">
+ <div class="home_objectives_title">
+ Σκοποί:
+ </div>
+ <div class="home_objectives_description">
+ <img src="<?php echo $this->baseUrl;?>/Public/Img/H2O/applications-internet.png">
+ Το <b><?php echo Website::$projectName;?></b> project έχει ως σκοπό την κατασκευή μίας βάσης δεδομένων υλικού, έτσι ώστε να μπορεί να εντοπισθεί ποιες συσκευές δουλεύουν με ένα <a href="http://www.gnu.org/distros/free-distros.html">πλήρως ελεύθερο Λειτουργικό Σύστημα</a>. Ο ιστότοπος <?php echo Website::$generalName;?> είναι δομημένος σαν ένα wiki, εντός του οποίου όλοι οι χρήστες μπορούν να τροποποιούν ή να εισαγάγουν νέα περιεχόμενα. Το h-node project αναπτύχθηκε σε συνεργασία με και σαν δραστηριότητα του <a href="http://www.fsf.org">FSF</a>.
+ </div>
+
+ <div class="home_objectives_title">
+ Συνεισφέρετε:
+ </div>
+ <div class="home_objectives_description">
+ Μπορείτε να συνεισφέρετε φτιάχνοντας έναν λογαριασμό στο <?php echo Website::$generalName;?> και τροποποιώντας τα περιεχόμενα που δημιούργησαν οι ίδιοι οι χρήστες. Όλες σας οι τροποποιήσεις θα αποθηκεύονται στο ιστορικό του προϊόντος το οποίο επεξεργάζεσθε/εμπλουτίζετε. Κάθε αναθεώρηση (τόσο η τρέχουσα όσο και οι παλιές) θα επισημαίνεται με το όνομα του χρήστη που την δημιούργησε. Μπορείτε, επίσης, να συνεισφέρετε <b>προτείνοντας νέο υλικό</b> που θα έπρεπε να προστεθεί στη βάση δεδομένων, ή <b>εισηγούμενοι χαρακτηριστικά που θα έπρεπε να υλοποιηθούν</b>.
+ </div>
+
+ <div class="home_objectives_title">
+ Ελεύθερο Λογισμικό
+ </div>
+ <div class="home_objectives_description">
+ <img height="100px" src="https://savannah.nongnu.org/images/Savannah.theme/floating.png">
+ In order to add a device to the h-node database, you must verify that it works using only free software. For this purpose, you must be running either:
+
+ <p>1) A GNU/Linux distribution that is on the <a href="http://www.gnu.org/distros/free-distros.html">FSF's list of endorsed distributions</a></p>
+
+ <p>2) <a href="http://www.debian.org">Debian GNU/Linux</a>, <strong>with only the main archive area enabled</strong>. The "contrib" and "non-free" areas must not be enabled when testing hardware. Double-check this by running <code>apt-cache policy</code>. The only package archive area mentioned in the output should be <strong>main</strong>.</p>
+
+ <p>h-node lists only hardware that works with free drivers and without non-free firmware. Other GNU/Linux distributions (or Debian with contrib, non-free, or some 3rd-party archives enabled) include non-free firmware files, so they cannot be used for testing.</p>
+ </div>
+
+ <div class="home_objectives_title">
+ Άδεια:
+ </div>
+ <div class="home_objectives_description">
+ Οποιοδήποτε κείμενο που υποβάλετε, θα μπαίνει σε Δημόσια Διάθεση/Public Domain (δείτε τη σελίδα <a href="http://creativecommons.org/publicdomain/zero/1.0/">CC0 page</a> για πιο λεπτομερείς πληροφορίες). Οποιοσδήποτε είναι ελεύθερος να αντιγράφει, να τροποποιεί, να δημοσιεύει, να χρησιμοποιεί, να πωλεί, ή και να ανδιανέμει το κείμενο που εσείς υποβάλλατε στο h-node.com, για οποιοδήποτε λόγο, εμπορικό ή μη-εμπορικό, και με οποιονδήποτε τρόπο.
+ </div>
+
+ <div class="home_objectives_title">
+ Άλλοι πόροι στο Διαδίκτυο:
+ </div>
+ <div class="home_objectives_description">
+ <p>Ακολουθεί, εδώ, ένας κατάλογος άλλων αρχείων που συγκεντρώνουν πληροφορίες σχετικά με υλικό που δουλεύει με ελεύθερο λογισμικό:</p>
+ <ul>
+<!-- <li><a href="http://www.fsf.org/resources/hw">Free Software Foundation archive</a></li> -->
+ <li><a href="http://libreplanet.org/wiki/Hardware/Freest">LibrePlanet Freest Hardware Page</a></li>
+ <li><a href="http://www.gnewsense.org/Main/LaptopGuide">gNewSense Laptop Guide</a></li>
+ <li><a href="http://libreplanet.org/wiki/Group:LibrePlanet_Italia/Progetti/hardware_libero">LibrePlanet Italia - progetti hardware database</a></li>
+ </ul>
+ </div>
+
+ <div class="home_objectives_title">
+ Σχετικά με τον ιστότοπο <?php echo Website::$generalName;?>:
+ </div>
+ <div class="home_objectives_description">
+ Το <?php echo Website::$generalName;?> πρέπει να θεωρείται πως βρίκεται σε <b>έκδοση beta</b>. Αναπτύσσεται συνεχώς και πολλά χαρακτηριστικά δεν έχουν ακόμη υλοποιηθεί (π.χ. πρέπει ακόμη να προστεθούν νέες συσκευές υλικού στη βάση δεδομένων). Μπορεί να παρατηρηθούν ορισμένα προβλήματα: αν εντοπίσετε ένα σφάλμα (bug), παρακαλώ προσθέστε μία αναφορά προβλήματος <a href="<?php echo $this->baseUrl."/issues/viewall/$lang/1/$token";?>">εδώ</a> με θέμα <b>ίσως να πρόκειται για ένα bug</b>.
+ </div>
+ </div>
+ </div>
diff --git a/h-source/Application/Views/Mobile/Home/left_it.php b/h-source/Application/Views/Mobile/Home/left_it.php
new file mode 100644
index 0000000..1be8bf0
--- /dev/null
+++ b/h-source/Application/Views/Mobile/Home/left_it.php
@@ -0,0 +1,89 @@
+<?php if (!defined('EG')) die('Direct access not allowed!'); ?>
+
+<?php
+// h-source, a web software to build a community of people that want to share their hardware information.
+// Copyright (C) 2010 Antonio Gallo (h-source-copyright.txt)
+//
+// This file is part of h-source
+//
+// h-source is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// h-source is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with h-source. If not, see <http://www.gnu.org/licenses/>.
+?>
+
+ <div data-role="content">
+
+ <div class="position_tree_box">
+ Home
+ </div>
+
+ <?php echo $htmlNewsBox;?>
+
+ <div class="home_container">
+ <div class="home_objectives_title">
+ Obiettivi:
+ </div>
+
+ <div class="home_objectives_description">
+ <img src="https://www.h-node.org/Public/Img/H2O/applications-internet.png"> Il progetto <b>h-node</b> mira alla costruzione di un database di hardware allo scopo di identificare quali dispositivi funzionino con un <a href="http://www.gnu.org/distros/free-distros.it.html">sistema operativo completamente libero</a>. Il sito h-node.org è strutturato come una wiki in cui tutti gli utenti possono inserire nuovi contenuti o modificare i contenuti già presenti. Il progetto h-node è sviluppato in collaborazione e come attività della <a href="http://www.fsf.org">FSF</a>.
+ </div>
+
+ <div class="home_objectives_title">
+ Contribuire:
+ </div>
+ <div class="home_objectives_description">
+ Puoi contribuire creandoti un account su h-node.org e modificando i suoi contenuti generati dagli utenti. Tutte le tue modifiche saranno salvate nella storia del prodotto che stai modificando/aggiungendo. Ogni revisione (quella attuale o le precedenti) sarà contrassegnata col nome dell'utente che l'ha creata.<br />Puoi inoltre contribuire <b>suggerendo del nuovo hardware</b> da aggiungere al database o delle <b>caratteristiche da implementare</b>.
+ </div>
+
+ <div class="home_objectives_title">
+ Software libero:
+ </div>
+ <div class="home_objectives_description">
+ <img height="100px" src="https://savannah.nongnu.org/images/Savannah.theme/floating.png">Per poter aggiungere un dispositivo nel database di h-node, devi verificare che funzioni usando solo software libero. Per questo scopo, puoi unicamente utilizzare:
+
+ <p>1) Una delle distribuzioni GNU/Linux elencate <a href="http://www.gnu.org/distros/free-distros.html">nella lista delle distribuzioni approvate dalla FSF</a></p>
+
+ <p>2) <a href="http://www.debian.org">Debian GNU/Linux</a>, <strong>con solo la zona archivio main attivata</strong>. Le aree "contrib" e "non-free" non devono essere abilitate durante il test dell'hardware. Controlla che sia così lanciando <code>apt-cache policy</code>. La sola zona archivio dei pacchetti deve essere <strong>main</strong>.</p>
+
+ <p>h-node elenca solo hardware che funziona con driver liberi e senza firmware non libero. Le altre distribuzioni GNU/Linux (oppure Debian con contrib, non-free, o archivi di terze parti abilitati) includono file di firmware non liberi, quindi non possono essere utilizzate per i test.</p>
+ </div>
+
+ <div class="home_objectives_title">
+ Licenza:
+ </div>
+
+ <div class="home_objectives_description">
+ Qualsiasi testo da te inserito diventerà di Pubblico Dominio (visita la <a href="http://creativecommons.org/publicdomain/zero/1.0/deed.it">pagina CC0</a> per informazioni dettagliate). Chiunque è libero di copiare, modificare, pubblicare, usare, vendere o distribuire il testo che hai inserito su h-node.org, per qualsiasi fine, commerciale o non commerciale, e con ogni mezzo.
+ </div>
+
+ <div class="home_objectives_title">
+ Altre risorse in rete:
+ </div>
+ <div class="home_objectives_description">
+ <p>Di seguito una lista di altri archivi contenenti informazioni sull' hardware funzionante con software libero:</p>
+ <ul>
+<!-- <li><a href="http://www.fsf.org/resources/hw">Free Software Foundation archive</a></li> -->
+ <li><a href="http://libreplanet.org/wiki/Hardware/Freest">LibrePlanet Freest Hardware Page</a></li>
+ <li><a href="http://www.gnewsense.org/Main/LaptopGuide">gNewSense Laptop Guide</a></li>
+ <li><a href="http://libreplanet.org/wiki/Group:LibrePlanet_Italia/Progetti/hardware_libero">LibrePlanet Italia - progetti hardware database</a></li>
+ </ul>
+ </div>
+
+ <div class="home_objectives_title">
+ A proposito del sito <?php echo Website::$generalName;?>:
+ </div>
+ <div class="home_objectives_description">
+ <?php echo Website::$generalName;?> deve essere considerato una <b>versione beta</b>. E' in costante sviluppo e molte caratteristiche non sono ancora state implementate (per esempio nuovi dispositivi hardware devono essere aggiunti al database). Potrebbero esserci dei problemi: se scopri un bug per favore invia una segnalazione <a href="<?php echo $this->baseUrl."/issues/viewall/$lang/1/$token";?>">qui</a> con l'argomento <b>maybe a bug</b>.
+ </div>
+ </div>
+
+ </div>
diff --git a/h-source/Application/Views/Mobile/Project/index.php b/h-source/Application/Views/Mobile/Project/index.php
index 3fa494d..c194a3b 100644
--- a/h-source/Application/Views/Mobile/Project/index.php
+++ b/h-source/Application/Views/Mobile/Project/index.php
@@ -20,13 +20,31 @@
// along with h-source. If not, see <http://www.gnu.org/licenses/>.
?>
-<?php
- if (file_exists(ROOT."/Template/".Params::$viewSubfolder."/Project/index_$lang.php"))
- {
- include(ROOT."/Template/".Params::$viewSubfolder."/Project/index_$lang.php");
- }
- else
- {
- include(ROOT."/Template/".Params::$viewSubfolder."/Project/index.php");
- }
-?>
+ <div data-role="content">
+
+ <div class="position_tree_box">
+ <a href="<?php echo $this->baseUrl."/home/index/$lang";?>">Home</a> &raquo; h-project
+ </div>
+
+ <div class="credits_external_box">
+
+ <div class="credits_item_title">
+ Why:
+ </div>
+
+ <div class="credits_item_description">
+ The h-node project has been created to help the free software movement by creating an archive of all the hardware that can work with a <a href="http://www.gnu.org/distros/free-distros.html">fully free operating system</a>.
+ </div>
+
+ <div class="credits_item_title">
+ Who:
+ </div>
+
+ <div class="credits_item_description">
+ Antonio Gallo (<a href="<?php echo $this->baseUrl."/meet/user/$lang/";?>tonicucoz">tonicucoz</a>), h-node.com source code developer, Giulia Fanin (<a href="<?php echo $this->baseUrl."/meet/user/$lang/";?>Julia">Julia</a>), designer of the website layout and icons (thanks for your advice and support), Luis Alberto Guzman Garcia (<a href="<?php echo $this->baseUrl."/meet/user/$lang/";?>Ark74">Ark74</a>), member of the Spanish translation team (thanks for all of your useful ideas and suggestions), Henri (<a href="<?php echo $this->baseUrl."/meet/user/$lang/";?>Hardisk">Hardisk</a>), member of the French translation team, Joerg Kohne (<a href="<?php echo $this->baseUrl."/meet/user/$lang/";?>joeko">joeko</a>), member of the German translation team, Benjamin Rochefort (<a href="<?php echo $this->baseUrl."/meet/user/$lang/";?>oysterboy">oysterboy</a>), member of the French translation team, Kostas Mousafiris (<a href="<?php echo $this->baseUrl."/meet/user/$lang/";?>kosmous">kosmous</a>), member of the Greek translation team.
+ <br />Also thanks to all of you who have believed in the project since it was born and to all of you who gave, give and will give their contribution.
+ </div>
+
+ </div>
+
+ </div>
diff --git a/h-source/Application/Views/Mobile/Project/index_de.php b/h-source/Application/Views/Mobile/Project/index_de.php
new file mode 100644
index 0000000..ea32f1f
--- /dev/null
+++ b/h-source/Application/Views/Mobile/Project/index_de.php
@@ -0,0 +1,51 @@
+<?php if (!defined('EG')) die('Direct access not allowed!'); ?>
+
+<?php
+// h-source, a web software to build a community of people that want to share their hardware information.
+// Copyright (C) 2010 Antonio Gallo (h-source-copyright.txt)
+//
+// This file is part of h-source
+//
+// h-source is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// h-source is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with h-source. If not, see <http://www.gnu.org/licenses/>.
+?>
+
+ <div data-role="content">
+
+ <div class="position_tree_box">
+ <a href="<?php echo $this->baseUrl."/home/index/$lang";?>">Home</a> &raquo; h-project
+ </div>
+
+ <div class="credits_external_box">
+
+ <div class="credits_item_title">
+ Warum:
+ </div>
+
+ <div class="credits_item_description">
+ Das Projekt „h-node“ wurde ins Leben gerufen, um für die Freie-Software-Bewegung ein umfassendes Hardware-Archiv für <a href="http://www.gnu.org/distros/free-distros.html">vollkommen Freie Betriebssysteme</a> aufzubauen.
+ </div>
+
+ <div class="credits_item_title">
+ Wer:
+ </div>
+
+ <div class="credits_item_description">
+ Antonio Gallo (<a href="<?php echo $this->baseUrl."/meet/user/$lang/";?>tonicucoz">tonicucoz</a>), h-node.com source code developer, Giulia Fanin (<a href="<?php echo $this->baseUrl."/meet/user/$lang/";?>Julia">Julia</a>), Designer des Website-Layout und Symbole (Danke für die Ratschläge und Unterstützung), Luis Alberto Guzman Garcia (<a href="<?php echo $this->baseUrl."/meet/user/$lang/";?>Ark74">Ark74</a>), Mitglied des spanischen Übersetzungsteams (Danke für all die Ideen und nützlichen Anregungen), Henri (<a href="<?php echo $this->baseUrl."/meet/user/$lang/";?>Hardisk">Hardisk</a>), Mitglied des französischen Übersetzungsteams, Joerg Kohne (<a href="<?php echo $this->baseUrl."/meet/user/$lang/";?>joeko">joeko</a>), Mitglied des deutschen Übersetzungsteams, Benjamin Rochefort (<a href="<?php echo $this->baseUrl."/meet/user/$lang/";?>oysterboy">oysterboy</a>), Mitglied des französischen Übersetzungsteams, , Kostas Mousafiris (<a href="<?php echo $this->baseUrl."/meet/user/$lang/";?>kosmous">kosmous</a>), member of the Greek translation team.
+ <br />
+ Vielen Dank auch an alle, die an das Projekt, seit es ins Leben gerufen wurde, geglaubt haben und an alle, die ihren Beitrag geleistet haben, leisten und leisten werden.
+ </div>
+
+ </div>
+
+ </div>
diff --git a/h-source/Application/Views/Mobile/Project/index_es.php b/h-source/Application/Views/Mobile/Project/index_es.php
new file mode 100644
index 0000000..1520ae5
--- /dev/null
+++ b/h-source/Application/Views/Mobile/Project/index_es.php
@@ -0,0 +1,51 @@
+<?php if (!defined('EG')) die('Direct access not allowed!'); ?>
+
+<?php
+// h-source, a web software to build a community of people that want to share their hardware information.
+// Copyright (C) 2010 Antonio Gallo (h-source-copyright.txt)
+//
+// This file is part of h-source
+//
+// h-source is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// h-source is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with h-source. If not, see <http://www.gnu.org/licenses/>.
+?>
+
+ <div data-role="content">
+
+ <div class="position_tree_box">
+ <a href="<?php echo $this->baseUrl."/home/index/$lang";?>">Home</a> &raquo; h-project
+ </div>
+
+ <div class="credits_external_box">
+
+ <div class="credits_item_title">
+ Por que:
+ </div>
+
+ <div class="credits_item_description">
+ El proyecto h-node ha sido creado para ayudar al movimiento de software libre al crear un archivo de todo el hardware que puede funcionar con un <a href="http://www.gnu.org/distros/free-distros.es.html">sistema operativo completamente libre</a>.
+ </div>
+
+ <div class="credits_item_title">
+ Quien:
+ </div>
+
+ <div class="credits_item_description">
+ Antonio Gallo (<a href="<?php echo $this->baseUrl."/meet/user/$lang/";?>tonicucoz">tonicucoz</a>), h-node.com source code developer, Giulia Fanin (<a href="<?php echo $this->baseUrl."/meet/user/$lang/";?>Julia">Julia</a>), diseñadora del tema e iconos del sitio, (gracias por su consejo y apoyo), Luis Alberto Guzman Garcia (<a href="<?php echo $this->baseUrl."/meet/user/$lang/";?>Ark74">Ark74</a>), miembro del equipo de traducción al Español (gracias por sus útiles ideas y sugerencias), Henri (<a href="<?php echo $this->baseUrl."/meet/user/$lang/";?>Hardisk">Hardisk</a>), miembro del equipo de traducción al Francés, Joerg Kohne (<a href="<?php echo $this->baseUrl."/meet/user/$lang/";?>joeko">joeko</a>), miembro del equipo de traducción al Alemán, Benjamin Rochefort (<a href="<?php echo $this->baseUrl."/meet/user/$lang/";?>oysterboy">oysterboy</a>), miembro del equipo de traducción al Francés, , Kostas Mousafiris (<a href="<?php echo $this->baseUrl."/meet/user/$lang/";?>kosmous">kosmous</a>), member of the Greek translation team.
+ <br />
+ También gracias a todos aquellos que han creído en el proyecto desde que nació y a todos aquellos que dieron, dan y darán su contribución.
+ </div>
+
+ </div>
+
+ </div>
diff --git a/h-source/Application/Views/Mobile/Project/index_fr.php b/h-source/Application/Views/Mobile/Project/index_fr.php
new file mode 100644
index 0000000..90e3706
--- /dev/null
+++ b/h-source/Application/Views/Mobile/Project/index_fr.php
@@ -0,0 +1,50 @@
+<?php if (!defined('EG')) die('Direct access not allowed!'); ?>
+
+<?php
+// h-source, a web software to build a community of people that want to share their hardware information.
+// Copyright (C) 2010 Antonio Gallo (h-source-copyright.txt)
+//
+// This file is part of h-source
+//
+// h-source is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// h-source is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with h-source. If not, see <http://www.gnu.org/licenses/>.
+?>
+
+ <div data-role="content">
+
+ <div class="position_tree_box">
+ <a href="<?php echo $this->baseUrl."/home/index/$lang";?>">Home</a> &raquo; h-project
+ </div>
+
+ <div class="credits_external_box">
+
+ <div class="credits_item_title">
+ Pourquoi:
+ </div>
+
+ <div class="credits_item_description">
+ Le projet h-node a été créer pour aider le mouvement du logiciel libre en créant une archive de matériel fonctionnel avec des <a href="http://www.gnu.org/distros/free-distros.fr.html">systèmes entièrement libres</a>.
+ </div>
+
+ <div class="credits_item_title">
+ Qui:
+ </div>
+
+ <div class="credits_item_description">
+ Antonio Gallo (<a href="<?php echo $this->baseUrl."/meet/user/$lang/";?>tonicucoz">tonicucoz</a>), h-node.com source code developer, Giulia Fanin (<a href="<?php echo $this->baseUrl."/meet/user/$lang/";?>Julia">Julia</a>), graphiste du site et des icones (merci pour tes conseils et ton support), Luis Alberto Guzman Garcia (<a href="<?php echo $this->baseUrl."/meet/user/$lang/";?>Ark74">Ark74</a>), membre de l’équipe de traduction espagnole (merci pour toutes vos bonnes idée et suggestion), Henri (<a href="<?php echo $this->baseUrl."/meet/user/$lang/";?>Hardisk">Hardisk</a>), membre de l’équipe de traduction française, Joerg Kohne (<a href="<?php echo $this->baseUrl."/meet/user/$lang/";?>joeko">joeko</a>), membre de l’équipe de traduction allemande, Benjamin Rochefort (<a href="<?php echo $this->baseUrl."/meet/user/$lang/";?>oysterboy">oysterboy</a>), membre de l’équipe de traduction française, Kostas Mousafiris (<a href="<?php echo $this->baseUrl."/meet/user/$lang/";?>kosmous">kosmous</a>), member of the Greek translation team.
+ <br />Remerciement également à tout ceux qui ont crus à ce projet depuis sa naissance et à tout ceux qui ont donné, donne ou donnerons leurs contributions.
+ </div>
+
+ </div>
+
+ </div>
diff --git a/h-source/Application/Views/Mobile/Project/index_gr.php b/h-source/Application/Views/Mobile/Project/index_gr.php
new file mode 100644
index 0000000..ddcee3f
--- /dev/null
+++ b/h-source/Application/Views/Mobile/Project/index_gr.php
@@ -0,0 +1,50 @@
+<?php if (!defined('EG')) die('Direct access not allowed!'); ?>
+
+<?php
+// h-source, a web software to build a community of people that want to share their hardware information.
+// Copyright (C) 2010 Antonio Gallo (h-source-copyright.txt)
+//
+// This file is part of h-source
+//
+// h-source is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// h-source is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with h-source. If not, see <http://www.gnu.org/licenses/>.
+?>
+
+ <div data-role="content">
+
+ <div class="position_tree_box">
+ <a href="<?php echo $this->baseUrl."/home/index/$lang";?>">Home</a> &raquo; h-project
+ </div>
+
+ <div class="credits_external_box">
+
+ <div class="credits_item_title">
+ Γιατί:
+ </div>
+
+ <div class="credits_item_description">
+ Το h-node project στήθηκε για να βοηθήσει το Κίνημα Ελεύθερου Λογισμικού, με τη δημιουργία ενός αρχείου για όλο το υλικό (hardware) που μπορεί να δουλέψει με ένα <a href="http://www.gnu.org/distros/free-distros.html">πλήρως ελεύθερο Λειτουργικό Σύστημα</a>.
+ </div>
+
+ <div class="credits_item_title">
+ Ποιος:
+ </div>
+
+ <div class="credits_item_description">
+ Ο Antonio Gallo (<a href="<?php echo $this->baseUrl."/meet/user/$lang/";?>tonicucoz">tonicucoz</a>), h-node.com developer πηγαίου κώδικα, η Giulia Fanin (<a href="<?php echo $this->baseUrl."/meet/user/$lang/";?>Julia">Julia</a>, designer του layout και των εικόνων αυτού του ιστοτόπου (ευχαριστούμε για τις συμβουλές σου και την υποστήριξή σου), ο Luis Alberto Guzman Garcia (<a href="<?php echo $this->baseUrl."/meet/user/$lang/";?>Ark74">Ark74</a>), μέλος της Ισπανικής μεταφραστικής ομάδας (ευχαριστούμε για όλες τις χρήσιμες ιδέες σου και τις προτάσεις σου), ο Henri (<a href="<?php echo $this->baseUrl."/meet/user/$lang/";?>Hardisk">Hardisk</a>), μέλος της Γαλλικής μεταφραστικής ομάδας, ο Joerg Kohne (<a href="<?php echo $this->baseUrl."/meet/user/$lang/";?>joeko">joeko</a>), μέλος της Γερμανικής μεταφραστικής ομάδας, ο Benjamin Rochefort (<a href="<?php echo $this->baseUrl."/meet/user/$lang/";?>oysterboy">oysterboy</a>), μέλος της Γαλλικής μεταφραστικής ομάδας, Kostas Mousafiris (<a href="<?php echo $this->baseUrl."/meet/user/$lang/";?>kosmous">kosmous</a>), member of the Greek translation team.
+ <br />Ευχαριστούμε, επίσης, όλους εσάς που πιστέψατε σε αυτό το project από τη γέννησή του, καθώς και όλους εσάς που δώσατε, δίνετε και θα δίνετε την συνεισφορά σας.
+ </div>
+
+ </div>
+
+ </div>
diff --git a/h-source/Application/Views/Mobile/Project/index_it.php b/h-source/Application/Views/Mobile/Project/index_it.php
new file mode 100644
index 0000000..44fb50d
--- /dev/null
+++ b/h-source/Application/Views/Mobile/Project/index_it.php
@@ -0,0 +1,50 @@
+<?php if (!defined('EG')) die('Direct access not allowed!'); ?>
+
+<?php
+// h-source, a web software to build a community of people that want to share their hardware information.
+// Copyright (C) 2010 Antonio Gallo (h-source-copyright.txt)
+//
+// This file is part of h-source
+//
+// h-source is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// h-source is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with h-source. If not, see <http://www.gnu.org/licenses/>.
+?>
+
+ <div data-role="content">
+
+ <div class="position_tree_box">
+ <a href="<?php echo $this->baseUrl."/home/index/$lang";?>">Home</a> &raquo; h-project
+ </div>
+
+ <div class="credits_external_box">
+
+ <div class="credits_item_title">
+ Why:
+ </div>
+
+ <div class="credits_item_description">
+ Il progetto h-node è stato creato per aiutare il movimento del software libero creando un archivio di tutto l' hardware che funzioni con un <a href="http://www.gnu.org/distros/free-distros.it.html">sistema operativo completamente libero</a>.
+ </div>
+
+ <div class="credits_item_title">
+ Who:
+ </div>
+
+ <div class="credits_item_description">
+ Antonio Gallo (<a href="<?php echo $this->baseUrl."/meet/user/$lang/";?>tonicucoz">tonicucoz</a>), sviluppatore del codice di h-node.com, Giulia Fanin (<a href="<?php echo $this->baseUrl."/meet/user/$lang/";?>Julia">Julia</a>), designer del layout del sito e delle icone (grazie per i consigli e il supporto), Luis Alberto Guzman Garcia (<a href="<?php echo $this->baseUrl."/meet/user/$lang/";?>Ark74">Ark74</a>), membro del team di traduzione spagnolo (grazie per tutte le idee e gli utili suggerimenti), Henri (<a href="<?php echo $this->baseUrl."/meet/user/$lang/";?>Hardisk">Hardisk</a>), membro del team di traduzione francese, Joerg Kohne (<a href="<?php echo $this->baseUrl."/meet/user/$lang/";?>joeko">joeko</a>), membro del team di traduzione tedesco, Benjamin Rochefort (<a href="<?php echo $this->baseUrl."/meet/user/$lang/";?>oysterboy">oysterboy</a>), membro del team di traduzione francese, , Kostas Mousafiris (<a href="<?php echo $this->baseUrl."/meet/user/$lang/";?>kosmous">kosmous</a>), membro del team di traduzione greco.
+ <br />Grazie anche a tutti Voi che avete creduto nel progetto sin dalla sua nascita e a tutti quelli che hanno dato, danno e daranno il loro contributo.
+ </div>
+
+ </div>
+
+ </div>
diff --git a/h-source/Application/Views/Mobile/footer.php b/h-source/Application/Views/Mobile/footer.php
index 383bac1..8a414f2 100644
--- a/h-source/Application/Views/Mobile/footer.php
+++ b/h-source/Application/Views/Mobile/footer.php
@@ -34,6 +34,12 @@
<li><a href="<?php echo $this->baseUrl."/home/index/$lang?version=desktop";?>"><?php echo gtext("desktop version");?></a></li>
</ul>
</div><!-- /navbar -->
+
+<?php
+//$sid="23552";
+//include("/var/www/h-node.org/traffica/write_logs.php");
+?>
+
</div> <!--fine footer-->
</div> <!--fine page-->
diff --git a/h-source/Application/Views/Mobile/header.php b/h-source/Application/Views/Mobile/header.php
index 735a2f0..446f820 100644
--- a/h-source/Application/Views/Mobile/header.php
+++ b/h-source/Application/Views/Mobile/header.php
@@ -89,8 +89,8 @@ $currPos = $querySanitized ? $this->controller."/".$this->action : 'home/index';
<div data-role="page" data-theme="d">
<div data-role="header">
<div class="ui-grid-a">
- <div class="ui-block-a"><img width="150px" src="<?php echo $this->baseUrl;?>/Public/Img/title.png"></div>
- <div class="ui-block-b"></div>
+ <div class="ui-block-a"><img style="padding-top:5px;" width="110px" src="<?php echo $this->baseUrl;?>/Public/Img/title.png"></div>
+ <div class="ui-block-b"><a href="http://www.fsf.org"><img style="padding-top:10px;" width="150px" src="<?php echo $this->baseUrl;?>/Public/Img/fsf_logo.png"></a></div>
</div><!-- /grid-a -->
<div data-theme='b' data-role="navbar" data-iconpos="left">
diff --git a/h-source/Application/index.html b/h-source/Application/index.html
index 8d1c8b6..8d1c8b6 100644..100755
--- a/h-source/Application/index.html
+++ b/h-source/Application/index.html
diff --git a/h-source/COPYRIGHT.txt b/h-source/COPYRIGHT.txt
index e8c5c1f..63dbdc9 100755
--- a/h-source/COPYRIGHT.txt
+++ b/h-source/COPYRIGHT.txt
@@ -1,21 +1,18 @@
EasyGiant is a PHP framework for creating and managing dynamic content
-Copyright (C) 2009 - 2011 Antonio Gallo
-See LICENSE.txt.
+Copyright (C) 2009 - 2010 Antonio Gallo
-This file is part of EasyGiant
-
-EasyGiant is free software: you can redistribute it and/or modify
+This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
-EasyGiant is distributed in the hope that it will be useful,
+This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
-along with EasyGiant. If not, see <http://www.gnu.org/licenses/>.
+along with this program. If not, see <http://www.gnu.org/licenses/>.
EasyGiant includes works distributed under the licenses listed below.
@@ -25,10 +22,3 @@ FreeFont
License: GNU GPL version 3 or later
Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
link: http://savannah.gnu.org/projects/freefont/
-
-
-Elementary icon theme
----------------------
-License: GNU GPL version 2
-elementary is designed and developed by Daniel Foré <Daniel.p.Fore@gmail.com>
-link: https://launchpad.net/elementaryicons/+milestone/2.5
diff --git a/h-source/Config/Config.php b/h-source/Config/Config.php
deleted file mode 100755
index bea5562..0000000
--- a/h-source/Config/Config.php
+++ /dev/null
@@ -1,58 +0,0 @@
-<?php
-
-// EasyGiant is a PHP framework for creating and managing dynamic content
-//
-// Copyright (C) 2009 - 2011 Antonio Gallo
-// See COPYRIGHT.txt and LICENSE.txt.
-//
-// This file is part of EasyGiant
-//
-// EasyGiant is free software: you can redistribute it and/or modify
-// it under the terms of the GNU General Public License as published by
-// the Free Software Foundation, either version 3 of the License, or
-// (at your option) any later version.
-//
-// EasyGiant is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License
-// along with EasyGiant. If not, see <http://www.gnu.org/licenses/>.
-
-if (!defined('EG')) die('Direct access not allowed!');
-
-
-define('DB', '');
-define('USER', '');
-define('PWD', '');
-define('HOST', '');
-
-/*default controller name*/
-define('DEFAULT_CONTROLLER','home');
-
-/*default action*/
-define('DEFAULT_ACTION','index');
-
-/*website parameters*/
-define('DOMAIN_NAME','h-source');
-
-/*type of database.*/
-//it can be: Mysql, Mysqli or None (first letter in uppercase)
-define('DATABASE_TYPE','Mysqli');
-
-/*error controller*/
-/*if you set ERROR_CONTROLLER to false, than EasyGiant will set ERROR_CONTROLLER equal to DEFAULT_CONTROLLER*/
-define('ERROR_CONTROLLER','home');
-
-/*error action*/
-/*if you set ERROR_ACTION to false, than EasyGiant will set ERROR_ACTION equal to DEFAULT_ACTION*/
-define('ERROR_ACTION','index');
-
-/*charset*/
-// set the charset used by all the functions that manage multi byte strings (mb_string functions, htmlentitites, etc)
-define('DEFAULT_CHARSET','UTF-8');
-
-/*rewrite settings*/
-//set MOD_REWRITE_MODULE to true if you have installed the mod_rewrite module of the server, otherwise MOD_REWRITE_MODULE to false
-define('MOD_REWRITE_MODULE',true);
diff --git a/h-source/Config/Reporting.php b/h-source/Config/Reporting.php
index 9f2e75b..5a2405f 100755
--- a/h-source/Config/Reporting.php
+++ b/h-source/Config/Reporting.php
@@ -1,24 +1,7 @@
<?php
-// EasyGiant is a PHP framework for creating and managing dynamic content
-//
-// Copyright (C) 2009 - 2011 Antonio Gallo
+// All EasyGiant code is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
// See COPYRIGHT.txt and LICENSE.txt.
-//
-// This file is part of EasyGiant
-//
-// EasyGiant is free software: you can redistribute it and/or modify
-// it under the terms of the GNU General Public License as published by
-// the Free Software Foundation, either version 3 of the License, or
-// (at your option) any later version.
-//
-// EasyGiant is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License
-// along with EasyGiant. If not, see <http://www.gnu.org/licenses/>.
if (!defined('EG')) die('Direct access not allowed!');
@@ -32,15 +15,15 @@ define ('RUNTIME_CONFIGURATION',true);
// !!! the following four directives will be applied only if RUNTIME_CONFIGURATION has been set to true !!!
//set the php.ini error_reporting directive
-define ('ERROR_REPORTING_DIRECTIVE',E_ALL);
+define ('ERROR_REPORTING_DIRECTIVE','E_ALL & ~E_DEPRECATED & ~E_STRICT');
//set the php.ini display_errors directive
//set to On or Off
-define ('DISPLAY_ERRORS','On');
+define ('DISPLAY_ERRORS','Off');
//set if the error file (see the next directive) has to be created or not
//set ERROR_REPORTING_FILE to true if you want that EasyGiant saves the errors in the LOG_ERROR_FILE (next), otherwise set ERROR_REPORTING_FILE to false
-define ('ERROR_REPORTING_FILE',true);
+define ('ERROR_REPORTING_FILE',false);
//only if ERROR_REPORTING_FILE has been set to true
//set the file where the errors will be saved
@@ -51,8 +34,8 @@ define ('LOG_ERROR_FILE','default');
//max length of each $_POST element
//set MAX_POST_LENGTH equal to 0 if you don't want any checks upon the $_POST elements
-define ('MAX_POST_LENGTH',50000);
+define ('MAX_POST_LENGTH',100000);
//max length of the REQUEST_URI
//set MAX_REQUEST_URI_LENGTH equal to 0 if you don't want to set an upper limit in the length of the REQUEST_URI
-define ('MAX_REQUEST_URI_LENGTH',300); \ No newline at end of file
+define ('MAX_REQUEST_URI_LENGTH',400);
diff --git a/h-source/Config/Restricted.php b/h-source/Config/Restricted.php
index ce4bdb1..4008967 100755
--- a/h-source/Config/Restricted.php
+++ b/h-source/Config/Restricted.php
@@ -1,24 +1,7 @@
<?php
-// EasyGiant is a PHP framework for creating and managing dynamic content
-//
-// Copyright (C) 2009 - 2011 Antonio Gallo
+// All EasyGiant code is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
// See COPYRIGHT.txt and LICENSE.txt.
-//
-// This file is part of EasyGiant
-//
-// EasyGiant is free software: you can redistribute it and/or modify
-// it under the terms of the GNU General Public License as published by
-// the Free Software Foundation, either version 3 of the License, or
-// (at your option) any later version.
-//
-// EasyGiant is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License
-// along with EasyGiant. If not, see <http://www.gnu.org/licenses/>.
if (!defined('EG')) die('Direct access not allowed!');
diff --git a/h-source/Config/Route.php b/h-source/Config/Route.php
index 2aa6720..9086b08 100644
--- a/h-source/Config/Route.php
+++ b/h-source/Config/Route.php
@@ -267,7 +267,6 @@ class Route
'hostcontrollers,differences',
'hostcontrollers,climb',
'hostcontrollers,talk',
- 'manager,distros',
);
//it can be 'yes' or 'no'
diff --git a/h-source/Contributors.txt b/h-source/Contributors.txt
deleted file mode 100644
index 1cecbf4..0000000
--- a/h-source/Contributors.txt
+++ /dev/null
@@ -1,14 +0,0 @@
-Giulia Fanin:
- designer of the website layout
- Italian translator
-
-Luis Alberto Guzman Garcia:
- Spanish translator
-
-Henri:
- French translator
-
-Joerg Kohne:
- designer of the layout of the help pages
- German translator
- \ No newline at end of file
diff --git a/h-source/Credits.txt b/h-source/Credits.txt
index 1ac9e9c..0e2adb1 100644..100755
--- a/h-source/Credits.txt
+++ b/h-source/Credits.txt
@@ -1,5 +1,5 @@
jQuery:
-The jQuery JavaScript Library v1.7.1 have been used through the website (see Public/Js/jquery)
+The jQuery JavaScript Library v1.4.2 have been used through the website (see Public/Js/jquery)
http://jquery.com/
Copyright 2010, John Resig
Dual licensed under the MIT or GPL Version 2 licenses (http://jquery.org/license)
@@ -7,17 +7,11 @@ Includes Sizzle.js (http://sizzlejs.com/)
Copyright 2010, The Dojo Foundation
Released under the MIT, BSD, and GPL Licenses.
-jQuery UI 1.8.14
+jQuery UI 1.8.4
Copyright 2010 (http://jqueryui.com/about)
Dual licensed under the MIT or GPL Version 2 licenses (http://jquery.org/license)
http://docs.jquery.com/UI
-jQuery Mobile Framework 1.0
-http://jquerymobile.com
-Copyright 2011 (c) jQuery Project
-Dual licensed under the MIT or GPL Version 2 licenses (http://jquery.org/license)
-http://jquery.org/license
-
markitup:
The markitup jQuery plugin (licensed under MIT/GPL) has been used in order to help the user to insert wiki tags (see Public/Js/jquery/markitup)
Copyright (C) 2007-2010 Jay Salvat
@@ -25,7 +19,7 @@ Dual licensed under the MIT and GPL licenses.
http://markitup.jaysalvat.com/
php diff algoritm:
-Paul's Simple Diff Algorithm v 0.1 algorithm (licensed under the zlib free license) has been used in order to highlight the differences between two different revisions of the same hardware model (<http://www.paulbutler.org/>)
+Paul's Simple Diff Algorithm v 0.1 algorithm (licensed under the zlib free license) has been used in order to highlight the differences between two different revisions of the same hadrware model (<http://www.paulbutler.org/>)
(C) Paul Butler 2007 <http://www.paulbutler.org/>
May be used and distributed under the zlib/libpng license.
@@ -38,7 +32,3 @@ license: GNU LESSER GENERAL PUBLIC LICENSE Version 3, 29 June 2007
Icons:
The icons used inside h-node.com are taken from the ACUN Simgeleri 0.7 incon theme (http://kde-look.org/content/show.php/ACUN+Simgeleri?content=83018) and from the H2O Icon Theme 0.0.5 (http://kde-look.org/content/show.php/ACUN+Simgeleri?content=83018), both licensed under the GNU GPL license, from the Crystal Projects icons (http://www.everaldo.com/crystal/?action=downloads), licensed under the LGPL, from the glaze icons set (http://www.notmart.org/index.php/Graphics) (LGPL) and from the DarkGlass_Reworked icons theme (http://kde-look.org/content/show.php/Dark-Glass+reviewed?content=67902) (GPL). The flag icons are taken from the FAMFAMFAM (http://www.famfamfam.com/lab/icons/flags/) icons set (Public Domain)
-Fingerprint icons:
-The fingerprint icons (listed below) are a derived work from a wikipedia fingerprint icon (http://en.wikipedia.org/wiki/File:Fingerprint_picture.svg) licensed under Creative Commons Attribution-Share Alike 3.0 Unported (http://creativecommons.org/licenses/by-sa/3.0/deed.en)
-Public/Img/fingerprint_icon.png
-Public/Img/fingerprint_icon-22.png
diff --git a/h-source/Css/comune.css b/h-source/Css/comune.css
new file mode 100644
index 0000000..b6ecdd3
--- /dev/null
+++ b/h-source/Css/comune.css
@@ -0,0 +1,130 @@
+/*parte di login.css*/
+
+/*controller:users*/
+/*action:login*/
+.login_box {
+ margin:10px 10px 20px 10px;
+}
+.login_box input {
+ border:1px solid orange;
+}
+
+/*action:logout*/
+.logout_box {
+ margin:10px 10px 20px 10px;
+}
+
+.logout_button a{
+ margin:20px;
+ padding:10px;
+ background:orange;
+ border:1px solid black;
+/* width:30px; */
+}
+
+
+/*parte di scaffold.css*/
+
+td {
+ font-size: 12px;
+}
+
+td.editForm, td.delForm, td.associateForm, td.moveupForm, td.movedownForm {
+ width:3%;
+}
+
+td.editForm input, td.delForm input, td.associateForm input, td.moveupForm input, td.movedownForm input
+{
+ height:30px;
+}
+
+/*alert string*/
+.alert {
+ font:bold 12px/1.5 Verdana,arial;
+ padding:5px;
+ margin:5px 5px 15px 5px;
+ background:TOMATO;
+ border-top:2px solid MAROON;
+ border-bottom:2px solid MAROON;
+ color:MAROON;
+}
+
+/*executed operation string*/
+.executed {
+ font:bold 12px/1.5 Verdana,arial;
+ padding:5px;
+ margin:5px 5px 15px 5px;
+ background:#E0FFFF;
+ border-top:2px solid #ADD8E6;
+ border-bottom:2px solid #ADD8E6;
+ color:#4169E1;
+}
+
+/*action:main*/
+tr.listRow {
+ background:#E6E6FA;
+}
+
+tr.listHead {
+ font-weight: bold;
+ background:#d1deed;
+ border:1px solid #4169E1;
+ border-bottom:1px solid #4169E1;
+}
+
+tr.listHead td {
+/* font-weight: bold; */
+/* background:#d1deed; */
+ border-top:1px solid #4169E1;
+ border-bottom:1px solid #4169E1;
+}
+
+.recordsBox {
+ margin:10px 0px;
+}
+
+.recordsBox table {
+ width:100%;
+}
+
+.listItemForm {
+ margin:0px;
+}
+
+a.linkItem {
+/* background:red; */
+ font:bold 12px/1 Verdana,arial;
+}
+
+/*controller:panel
+/*action:main*/
+.main_box {
+ padding:50px 20px;
+ width:700px;
+ height:250px;
+}
+.top_color {
+ text-align:center;
+ width:160px;
+ height:35px;
+ margin:0;
+ padding:0;
+}
+.bottom_color {
+ background:lavender;
+ text-align:center;
+ width:160px;
+ margin:0;
+ padding:5px 0;
+}
+
+
+
+/*box che dice dove ti trovi, in che controller*/
+.controller_info_header
+{
+ background:#E6E6FA;
+ padding:5px;
+ font: bold 16px/1.75em sans-serif;
+ border-bottom:1px solid #4169E1;
+} \ No newline at end of file
diff --git a/h-source/Css/explorer6.css b/h-source/Css/explorer6.css
new file mode 100755
index 0000000..29b6456
--- /dev/null
+++ b/h-source/Css/explorer6.css
@@ -0,0 +1,112 @@
+ul#menuBlock li {
+ height:24px;
+}
+
+ul#menuBlock li ul {
+ top:25px;
+ margin-left:3px;
+}
+
+ul#menuBlock li ul li {
+ margin-top:-1px;
+}
+
+.view_page_top_box
+{
+ height:32px;
+}
+
+.update_submit_class
+{
+ padding:7px;
+}
+
+.view_page_update_button
+{
+ width:35px;
+}
+
+/*div that contains the update form*/
+.view_page_update_button
+{
+ margin-top:2px;
+ margin-right:5px;
+}
+.update_submit_class
+{
+ padding:2px;
+ width:45px;
+}
+.notebooks_insert_form
+{
+ margin-right:-30px;
+}
+
+.notebook_insert_link
+{
+ margin:0px 0px 0px 5px;
+ padding-right:0px;
+ width:245px;
+}
+.view_page_history_button
+{
+ margin-left:10px;
+}
+.top_left_images_help
+{
+ height:22px;
+ margin-bottom:-3px;
+}
+ul#menuBlock li {
+ height:26px;
+}
+ul#menuBlock li ul {
+ left:-6px;
+}
+.user_logged
+{
+ margin-left:62px;
+}
+.viewall_popup_menu_status_item
+{
+ padding-left:2px;
+/* background:red; */
+}
+.copyright_notice_box
+{
+ width:140px;
+}
+.language_links_box ul
+{
+ width:100%;
+ margin:-1px 5px 30px 5px;
+}
+.language_links_box ul li
+{
+ margin-bottom:5px;
+}
+.language_links_box ul li a
+{
+ height:30px;
+}
+.talk_numb_ext
+{
+ margin-top:-30px;
+}
+.talk_numb_ext a, .talk_numb_ext_wiki a
+{
+ margin-bottom:0px;
+}
+.talk_numb_ext_wiki
+{
+ width:130px;
+}
+.language_links_box a.current_lang
+{
+ background:#6495ED;
+}
+
+.last_modifications ul
+{
+ margin-left:0px;
+} \ No newline at end of file
diff --git a/h-source/Css/explorer7.css b/h-source/Css/explorer7.css
new file mode 100644
index 0000000..f63bf5b
--- /dev/null
+++ b/h-source/Css/explorer7.css
@@ -0,0 +1,25 @@
+.viewall_popup_menu_status_item
+{
+ width:129px;
+}
+.talk_numb_ext
+{
+ margin-top:-30px;
+}
+.language_links_box a.current_lang
+{
+ background:#6495ED;
+}
+
+.last_modifications ul
+{
+ margin-left:0px;
+}
+.talk_numb_ext a, .talk_numb_ext_wiki a
+{
+ margin-bottom:0px;
+}
+.talk_numb_ext_wiki
+{
+ width:130px;
+} \ No newline at end of file
diff --git a/h-source/Css/files.css b/h-source/Css/files.css
new file mode 100644
index 0000000..e98e681
--- /dev/null
+++ b/h-source/Css/files.css
@@ -0,0 +1,113 @@
+form
+{
+ padding:0px;
+ margin:0px;
+}
+
+/*external box*/
+.EGexternalBox
+{
+ height:500px;
+ overflow:scroll;
+}
+
+/*top box containing the forms: upload,create folder,got to folder*/
+.EGformBox
+{
+ padding-left:10px;
+ padding-right:10px;
+ height:35px;
+ margin:5px;
+ border-top:1px solid #DC143C;
+ border-bottom:1px solid #DC143C;
+ background:#FF7F50;
+}
+
+/*item box: folder*/
+.EGfolderBox
+{
+ padding-left:10px;
+ padding-right:10px;
+ height:55px;
+ margin:5px;
+/* border-top:1px solid black; */
+ background:#E6E6FA;
+}
+
+/*item box: file*/
+.EGfileBox
+{
+ padding-left:10px;
+ padding-right:10px;
+ height:55px;
+ margin:5px;
+/* border-top:1px solid black; */
+ background:#E0FFFF;
+}
+
+/*back box*/
+.EGbackBox
+{
+ padding-left:10px;
+ padding-right:10px;
+ height:50px;
+ margin:5px;
+ border-top:1px solid #6495ED;
+ border-bottom:1px solid #6495ED;
+ background:#ADD8E6;
+}
+
+/*folder image and back image*/
+.EGfolderImage, .EGbackImage, .EGfileImage
+{
+ margin:3px;
+/* padding:2px; */
+ width:55px;
+/* background:red; */
+ float:left;
+}
+
+/*box containing the form to create a new folder*/
+.EGcreateFolderBox
+{
+ margin:5px;
+ width:300px;
+ float:left;
+}
+
+/*box containing the form to upload a file*/
+.EGuploadFileBox
+{
+ margin:5px;
+ margin-left:50px;
+ width:400px;
+ float:left;
+}
+
+.EGcreateFolderBox input:text
+{
+ width:150px;
+}
+
+/*name of the folder*/
+.EGfolderName, .EGfileName, .EGcurrentDirectory
+{
+ width:500px;
+ float:left;
+ font:normal 12px/1 Verdana,arial;
+ margin:10px;
+}
+
+/*del image*/
+.EGfolderDelImage, .EGfileDelImage
+{
+ float:right;
+ margin:2px;
+}
+
+/*preview of the image in upload file*/
+#imagePreview
+{
+ margin:10px;
+ height:120px;
+}
diff --git a/h-source/Css/form.css b/h-source/Css/form.css
new file mode 100755
index 0000000..911af19
--- /dev/null
+++ b/h-source/Css/form.css
@@ -0,0 +1,31 @@
+.entryLabel {
+ display:block;
+ font:bold 12px/1em Verdana,arial;
+ padding:3px 0px;
+ margin-top:10px;
+ background:#E6E6FA;
+ width:500px;
+}
+
+.formEntry textarea{
+ width:500px;
+ height:300px;
+}
+
+.formEntry input,.formEntry textarea {
+ width:500px;
+ padding:3px;
+ border: 1px solid #4169E1;
+}
+
+.formClass {
+ margin:10px;
+}
+
+.inputEntry {
+ margin:10px 0px;
+}
+
+.formEntry #abstract {
+ height:100px;
+} \ No newline at end of file
diff --git a/h-source/Library/Lang/En/Formats/From/index.html b/h-source/Css/index.html
index 8d1c8b6..8d1c8b6 100755..100644
--- a/h-source/Library/Lang/En/Formats/From/index.html
+++ b/h-source/Css/index.html
diff --git a/h-source/Css/login.css b/h-source/Css/login.css
new file mode 100644
index 0000000..7c42964
--- /dev/null
+++ b/h-source/Css/login.css
@@ -0,0 +1,21 @@
+/*controller:users*/
+/*action:login*/
+.login_box {
+ margin:10px 10px 20px 10px;
+}
+.login_box input {
+ border:1px solid orange;
+}
+
+/*action:logout*/
+.logout_box {
+ margin:10px 10px 20px 10px;
+}
+
+.logout_button a{
+ margin:20px;
+ padding:10px;
+ background:orange;
+ border:1px solid black;
+/* width:30px; */
+} \ No newline at end of file
diff --git a/h-source/Css/main.css b/h-source/Css/main.css
new file mode 100644
index 0000000..080e613
--- /dev/null
+++ b/h-source/Css/main.css
@@ -0,0 +1,2249 @@
+/*stili per il layout fisso*/
+html, body
+{
+ margin: 0;
+ padding:0;
+}
+
+body
+{
+ font:normal 15px/1.3 sans-serif,arial;
+ text-align: center;
+ background:#ffffff;
+}
+
+img
+{
+ border:0px;
+}
+
+.message_view_description li, .issues_view_description li, .talk_message_item_content li, .message_view_description_hidden li
+{
+ margin-left:1em;
+}
+
+
+div#container
+{
+ width: 950px;
+ margin: 0px auto;
+ text-align: left;
+ background:white;
+}
+
+
+/*stile header grande*/
+div#external_header {
+ background:#b7f18c;
+ text-align:center;
+ height:80px;
+}
+div#header {
+ background:#b7f18c;
+ width: 950px;
+ margin: 0px auto;
+ text-align:left;
+ height:80px;
+}
+
+div#top_menu_external
+{
+ text-align:center;
+ background:#015512;
+ margin-bottom:50px;
+/* border-top:1px solid #4169E1; */
+/* border-bottom:1px solid #4169E1; */
+}
+
+div#top_menu
+{
+ font:bold 15px sans-serif,arial;
+ text-align:left;
+ padding:0.4em 0px;
+ background:#015512;
+ width: 950px;
+ margin: 0px auto;
+}
+#top_menu .currentitem a
+{
+ background:#DC143C;
+ color:#FFF;
+}
+
+div#top_menu a
+{
+ font:bold 16px sans-serif,arial;
+ padding:0.4em 10px;
+ text-decoration:none;
+ font-weight:bold;
+ color:#FFF;
+/* border-left:1px solid #4169E1; */
+}
+#top_menu a:hover,
+#top_menu a:focus,
+#top_menu a:active
+{
+ background:#61c418;
+}
+
+div#top_menu ul
+{
+ list-style-type: none;
+ display:inline;
+ margin:0px;
+ padding:0px;
+}
+
+div#top_menu li
+{
+ display:inline;
+/* padding:10px; */
+}
+
+
+div#left
+{
+ width:730px;
+ float:left;
+}
+
+div#right
+{
+ width:198px;
+ float:right;
+}
+
+.login_username_input,.login_password_input
+{
+ width:150px;
+}
+
+.login_table_box
+{
+ clear:left;
+ margin:5px;
+ margin-bottom:35px;
+/* border:1px solid #B7F18C; */
+/* padding:5px; */
+}
+.statistics_ext_box
+{
+ margin:5px;
+ margin-bottom:30px;
+}
+.statistics_int_title
+{
+ margin:5px 0px 15px 0px;
+ padding:3px 0px;
+/* background-color:#B7F18C; */
+ border-bottom:2px solid #DC143C;
+ font-weight:bold;
+}
+.statistics_hard_title
+{
+ margin:5px 0px;
+ color:#808080;
+}
+.user_logged
+{
+ margin-left:55px;
+ color:black;
+ font-weight:bold;
+}
+.login_right_label
+{
+ font-weight:bold;
+}
+.login_right_form input
+{
+ border:1px solid #6495ED;
+ width:180px;
+ padding:2px;
+ margin:3px 0px;
+}
+
+.login_input
+{
+ width:100px;
+}
+
+.login_form_title
+{
+ color:black;
+
+/* padding:10px; */
+/* background:#5c98dc; */
+}
+
+.login_box
+{
+ margin-bottom:400px;
+}
+
+.hardware_element
+{
+ width:335px;
+ float:left;
+ -moz-border-radius: 8px;
+ -webkit-border-radius: 8px;
+ border-radius: 8px;
+ margin:2px;
+ margin-left:5px;
+ margin-bottom:5px;
+ padding:10px;
+ background:#c7daef;
+/* border-bottom:1px solid #6495ED; */
+}
+.hardware_element_link
+{
+ display:block;
+ width:250px;
+ float:left;
+ margin:0px 10px;
+ margin-top:10px;
+}
+.notebook_view_title
+{
+ width:400px;
+ height:50px;
+ float:left;
+ overflow:hidden;
+/* background:red; */
+ margin:10px 0px 10px 10px;
+ font:normal 14px/1 sans-serif,arial;
+}
+
+.notebook_insert_link
+{
+/* border:1px solid black; */
+/* background-color:#c1e3ef; */
+ width:200px;
+/* background:orange; */
+ float:right;
+ padding:3px 6px 1px 3px;
+ margin:0px 5px 30px 5px;
+ text-align:right;
+ overflow:hidden;
+ height:48px;
+}
+
+.select_entry
+{
+/* width:400px; */
+ padding:2px;
+/* border:1px solid #6495ED; */
+}
+.input_entry, .talk_input_entry
+{
+ width:400px;
+ padding:2px;
+ border:1px solid #6495ED;
+}
+.textarea_entry, .talk_textarea_entry, .device_textarea_entry
+{
+ width:630px;
+ height:300px;
+ padding:2px;
+ border:1px solid #6495ED;
+}
+.device_textarea_entry
+{
+ width:400px;
+ height:50px;
+}
+/*.talk_input_entry
+{
+ border:1px solid #CECECE;
+}*/
+.form_entry .talk_textarea_entry
+{
+ width:400px;
+ height:200px;
+ border:1px solid #6495ED;
+}
+.notebooks_insert_form
+{
+ width:710px;
+ margin-left:10px;
+}
+.notebooks_insert_form .entry_label
+{
+ display:block;
+ padding:3px 0px;
+/* background:#E6E6FA; */
+ width:600px;
+ font-weight:bold;
+}
+.form_entry
+{
+ margin:20px 0px;
+}
+
+
+div#footer{
+ margin:0px;
+ color: #000;
+ height:40px;
+ background:#b7f18c;
+ clear:both;
+}
+
+/*div#navigation li{background: url(immagini/tabella1.png) no-repeat left center;}*/
+a.link_menu
+{
+ font: bold 16px/1.75em sans-serif,arial;
+ text-decoration: none;
+ color:#4169E1;
+ margin-left:10px;
+}
+
+
+/*box contenente i link per tornare nel pannello utente e per sloggarsi*/
+.your_status_box
+{
+ background:#E6E6FA;
+ padding:5px;
+}
+
+.login_note
+{
+ color:#8080a6;
+ margin:10px;
+ padding:5px 0px;
+ border-top:2px solid #8080a6;
+ border-bottom:2px solid #8080a6;
+
+ font: normal 16px/1.3 sans-serif,arial;
+}
+
+/*singolo box contentente un portatile in view all*/
+.notebooks_viewall
+{
+ clear:both;
+ clear:right;
+ margin:40px 0px;
+ padding:3px;
+/* border:2px solid #7dafe7; */
+ font: normal 14px/1.5 sans-serif,arial;
+
+}
+.model_viewall
+{
+ margin:40px 10px;
+ margin-left:0px;
+/* background-color:#F7F7F7; */
+/* border:1px solid #CECECE; */
+/* padding:10px; */
+}
+.notebook_model
+{
+/* background:orange; */
+ padding:5px 0px;
+ margin:0px 5px;
+ overflow:hidden;
+ width:100%;
+/* margin-bottom:10px; */
+ font:normal 14px/1 sans-serif,arial;
+ border-bottom:1px solid #7e0000;
+}
+.notebook_vendor, .notebook_compatibility, .notebook_kernel, .model_tested_on
+{
+ margin:5px 0px;
+/* background:#eaebec; */
+ padding:5px;
+ width:654px;
+ overflow:hidden;
+/* border-top:2px solid #a4c8f1; */
+}
+.inner_label
+{
+ float:left;
+ width:320px;
+}
+.inner_value
+{
+ float:left;
+ width:280px;
+ color:#1f538e;
+ font-weight:bold;
+}
+.notebook_description_label
+{
+/* background:#B7F18C; */
+ padding:5px 0px;
+ margin:0px 5px;
+ margin-top:1.5em;
+/* margin-bottom:10px; */
+ font:bold 14px/1 sans-serif,arial;
+ border-bottom:1px solid #7e0000;
+/* border-bottom:1px solid #228B22; */
+}
+.notebook_description_value
+{
+/* border-top:2px solid #a4c8f1; */
+ margin:5px 0px;
+/* background:#eaebec; */
+ padding:5px 5px;
+ width:704px;
+ overflow:hidden;
+}
+.notebook_view_link
+{
+ margin-top:10px;
+ margin-left:5px;
+}
+
+
+/*alert string*/
+.alert {
+ clear:left;
+ clear:right;
+ font:bold 12px/1.5 sans-serif,arial;
+ padding:10px;
+ margin:5px 0px 15px 0px;
+/* background:TOMATO; */
+ border-top:2px solid MAROON;
+ border-bottom:2px solid MAROON;
+ color:MAROON;
+}
+
+/*executed operation string*/
+.executed {
+ font:bold 12px/1.5 sans-serif,arial;
+ padding:5px;
+ margin:5px 5px 15px 5px;
+ background:#E0FFFF;
+ border-top:2px solid #ADD8E6;
+ border-bottom:2px solid #ADD8E6;
+ color:#4169E1;
+}
+
+.view_page_top_box
+{
+ overflow:hidden;
+ width:664px;
+}
+/*div that contains the update form*/
+.view_page_update_button
+{
+ float:right;
+}
+/*.view_page_update_button input
+{
+ height:35px;
+}*/
+.view_page_update_button form
+{
+ width:38px;
+ padding:0px;
+}
+.view_page_back_button
+{
+ float:left;
+ width:50px;
+}
+/*the update submit button*/
+.update_submit_class
+{
+ padding:2px;
+ width:45px;
+ font:normal 14px/1 sans-serif,arial;
+ cursor:pointer;
+}
+/*div that contains the link to the history page*/
+.view_page_history_button
+{
+ float:right;
+ width:30px;
+ padding:3px;
+ margin-left:17px;
+/* border:1px solid #a4c8f1; */
+/* height:30px; */
+}
+.view_page_history_button a
+{
+ text-decoration:none;
+ color:#000;
+}
+
+.page_history
+{
+ margin:0px;
+ padding:0px;
+}
+.page_history_item
+{
+ list-style-type: none;
+ padding:5px;
+ margin:2px;
+ border-top:1px dashed #a4c8f1;
+}
+.page_history_current_item
+{
+ list-style-type: none;
+ padding:5px;
+ margin:5px 0px;
+/* background:#ADD8E6; */
+}
+.history_title
+{
+ font:normal 14px/1 sans-serif;
+ margin:10px;
+ padding:3px;
+}
+
+.revision_alert
+{
+ background:#f1d8d8;
+ padding:8px;
+ margin:5px;
+ margin-bottom:20px;
+ border-bottom:1px solid #d26262;
+ border-top:1px solid #d26262;
+ clear:both;
+}
+
+/*page list in history*/
+.history_page_list, .history_page_list_news {
+ text-align:left;
+ font:normal 14px/1 sans-serif,arial;
+ padding:10px;
+ margin-bottom:15px;
+}
+.history_page_list_news
+{
+ background:#C7DAEF;
+ margin:5px;
+}
+div.history_page_list a, div.history_page_list_news a {
+ padding:5px 10px;
+ border-left:1px outset #000;
+/* border:1px outset #708090; */
+/* color:#B0E0E6; */
+/* background:#4169E1; */
+}
+
+div.history_page_list a.currentPage, div.history_page_list_news a.currentPage
+{
+ font-weight:bold;
+ background:#DCDCDC;
+}
+div.history_page_list_news a
+{
+ border-left:none;
+ color:#4169E1;
+ font-weight:bold;
+}
+
+.viewall_no_items_found
+{
+ font:normal 14px/1 sans-serif,arial;
+ margin:20px 5px;
+ padding:5px;
+/* color: #FF4500; */
+ border-top:1px solid #FF4500;
+ border-bottom:1px solid #FF4500;
+}
+
+
+
+.viewall_popup_menu_box {
+ width:725px;
+ height:30px;
+ margin-bottom:0px;
+ margin-top:10px;
+ margin-left:0px;
+ position:relative;
+ z-index:4;
+}
+.more_filters
+{
+ position:relative;
+ z-index:3;
+}
+
+.viewall_popup_menu_status
+{
+ clear:left;
+ width:725px;
+/* overflow:hidden; */
+ margin-left:0px;
+ text-align:center;
+}
+.viewall_popup_menu_status_item
+{
+ width:139px;
+ float:left;
+ margin-left:3px;
+ color:#FF4500;
+ font-weight:bold;
+ font: bold 13px/1 sans-serif,arial;
+}
+
+ul#menuBlock {
+/* float:right; */
+ float:left;
+ margin:0px;
+ padding:0px;
+ list-style:none;
+ height:25px;
+}
+ul#menuBlock li.innerItem
+{
+ height:22px;
+ padding-top:5px;
+ font-size:12px;
+}
+ul#menuBlock li {
+ position:relative;
+ display:block;
+ float:left;
+ margin-left:3px;
+ width:139px;
+/* height:22px; */
+ text-align:center;
+ background: url('../Img/popup_back.png') no-repeat top left;
+/* background:#FFA500; */
+}
+
+ul#menuBlock li a {
+ color:#000000;
+ font: normal 12px/1 sans-serif,arial;
+}
+
+ul#menuBlock li ul {
+ margin:0px;
+ padding:0px;
+ list-style:none;
+ position:absolute;
+ top:24px;
+ left:-3px;
+ display:none;
+}
+ul#menuBlock:hover li ul
+{
+ display:block;
+}
+ul#menuBlock li ul li {
+ background:#ffef84;
+ border-top:1px solid #ec8459;
+ padding:3px 0;
+}
+
+
+/*view files with differences*/
+.diff_ext_box
+{
+ margin:0px 5px 30px 5px;
+}
+.diff_item_label
+{
+/* background:#ADD8E6; */
+/* padding:3px; */
+ border-bottom:1px solid black;
+}
+.diff_item_text
+{
+ color:#7c7a7a;
+ background:#F0FFF0;
+ padding:3px;
+}
+del
+{
+ color:red;
+}
+ins
+{
+ color:green;
+}
+
+
+
+/*tree navigation*/
+.position_tree_box
+{
+ margin:5px 5px 25px 5px;
+ padding:5px;
+ font:normal 14px/1 sans-serif,arial;
+ border-top:1px solid #DC143C;
+ border-bottom:1px solid #DC143C;
+}
+.position_tree_box a
+{
+ text-decoration:none;
+ color:#DC143C;
+}
+.last_tree_element
+{
+ font-weight:bold;
+}
+
+
+
+.td_with_distribution_checkboxes
+{
+ position:relative;
+ display:block;
+}
+.dist_checkboxes_hidden_box
+{
+ display:none;
+ position:absolute;
+ background:#C1E3EF;
+ top:20px;
+ left:0px;
+ width:400px;
+ padding:3px;
+}
+.dist_checkboxes_hidden_box_inner
+{
+ height:150px;
+ overflow:auto;
+ z-index:400;
+}
+.hidden_box_item
+{
+ margin-bottom:10px;
+}
+.tables_of_contents
+{
+ margin:20px 0;
+ padding:5px;
+ background-color:#EAF2F4;
+ border:1px solid #C7DAEF;
+ -moz-border-radius: 15px;
+ -webkit-border-radius: 15px;
+ border-radius: 15px;
+}
+.tables_of_contents a
+{
+ font-size:14px;
+}
+.tables_of_contents_title
+{
+ margin:10px 25px;
+ font-weight:bold;
+}
+/*wiki code*/
+.code_pre
+{
+/* width:650px; */
+ max-height:300px;
+ overflow:auto;
+ background:#f9f4a7;
+ padding:5px 0 5px 5px;
+ font-size:12px;
+/* color:#4169E1; */
+ border:1px dashed #d4cb3b;
+}
+
+.div_h1
+{
+ font:bold 18px/1 sans-serif,arial;
+ border-bottom:1px solid gray;
+ padding:3px 0px;
+ margin:20px 0px 10px 0px;
+ color:gray;
+}
+.div_h2
+{
+ font:bold 17px/1 sans-serif,arial;
+ color:gray;
+ padding:2px 0;
+}
+.div_h3
+{
+ font:bold 16px/1 sans-serif,arial;
+ color:gray;
+ padding:2px 0;
+}
+.div_lang
+{
+ margin-top:4em;
+ padding:8px;
+ background:#cfe2ff;
+ /*border-top:1px solid #FFA500;
+ border-bottom:1px solid #FFA500;*/
+}
+.div_lang a
+{
+ padding:0px 3px;
+}
+.talk_login_notice
+{
+ margin:5px 5px;
+ padding:5px;
+ font:bold 14px/1 sans-serif,arial;
+/* border:1px solid #4169E1; */
+/* color:#4169E1; */
+/* background:#9acee3; */
+}
+.talk_message_item
+{
+ margin:5px 0px 35px 5px;
+}
+.talk_message_item_title_date
+{
+ border-bottom:1px solid gray;
+ padding-bottom:5px;
+/* width:300px; */
+}
+.talk_message_item_title
+{
+ font:bold 14px/1 sans-serif,arial;
+ margin-bottom:5px;
+}
+.talk_message_item_date
+{
+ font:normal 12px/1 sans-serif,arial;
+ color:gray;
+}
+.talk_message_item_content
+{
+ padding:5px 0px;
+}
+.talk_form_external_box
+{
+ margin-bottom:20px;
+}
+
+.model_id
+{
+ font:normal 12px/1 sans-serif,arial;
+/* color:gray; */
+ margin:5px 3px;
+ padding:3px;
+}
+
+.top_left_images
+{
+ height:45px;
+ margin-top:2px;
+}
+.top_left_note_image
+{
+ height:45px;
+}
+.top_left_images_help
+{
+ height:30px;
+ margin-bottom:-10px;
+}
+
+.who_you_are_and_logout, .your_panel_link
+{
+ margin:0px 0px 10px 0px;
+ padding:5px 10px;
+ background-color:#B7F18C;
+/* font-weight:bold; */
+/* border-top:1px solid #015512; */
+/* border-bottom:1px solid #015512; */
+}
+.your_panel_link
+{
+ background:#DC143C;
+ margin-bottom:0px;
+/* color:#FFF; */
+}
+.your_panel_link a
+{
+ font-weight:bold;
+ color:#FFF;
+}
+
+/*form*/
+.entryLabel {
+ display:block;
+ font:bold 12px/1em sans-serif,arial;
+ padding:3px 0px;
+ margin-top:10px;
+/* background:#E6E6FA; */
+ width:450px;
+}
+
+.formEntry {
+ margin:20px 0px;
+}
+
+.formEntry input, .formEntry textarea {
+ width:450px;
+ padding:3px;
+ border: 1px solid #CECECE;
+}
+
+.form_input_text input,.form_textarea textarea {
+ width:450px;
+ padding:3px;
+ border: 1px solid #CECECE;
+}
+.form_textarea textarea
+{
+ height:100px;
+}
+.formClass {
+ margin:10px;
+ margin-right:-40px;
+ width:450px;
+}
+
+.inputEntry {
+ margin:10px 0px;
+ float:left;
+ width:80px;
+ height:30px;
+}
+
+.panel_top_box
+{
+ background-color:#C1E3EF;
+ margin:5px 5px 35px 5px;
+ padding:10px;
+ font:bold 14px/1 sans-serif,arial;
+ border-bottom:1px solid #097fbc;
+}
+.panel_top_box a
+{
+ color:#097fbc;
+}
+
+/*list of application in the panel main action*/
+.panelApplicationList
+{
+ padding:0px;
+ margin:0px;
+}
+.panelApplicationList li
+{
+ display:block;
+ width:450px;
+ height:30px;
+ margin:5px;
+ padding-top:9px;
+}
+
+.panelApplicationList li a
+{
+ margin:5px;
+ font: bold 14px/1 sans-serif,arial;
+ color:#097fbc;
+}
+
+.confirm_notice
+{
+ margin:10px;
+/* padding:10px; */
+ font:normal 14px/1.5 sans-serif,arial;
+}
+
+.meet_item
+{
+ margin:20px 0px;
+}
+.meet_item_inner
+{
+ border-bottom:1px dashed #ed9f4a;
+ font-weight:bold;
+/* color:#8f0754; */
+}
+.meet_contrib_link, .contrib_explain_box
+{
+ margin:10px;
+}
+.users_contrib_item
+{
+ margin:10px;
+ padding:2px 0px;
+ border-bottom:1px dashed #ed9f4a;
+/* color:#8f0754; */
+}
+.external_users_contrib
+{
+ margin-bottom:40px;
+}
+.contrib_explain_box
+{
+ font-weight:bold;
+ margin-bottom:30px;
+}
+.users_meet_box
+{
+ margin:25px 30px;
+ padding:5px 20px;
+ background:#f6ea99;
+ border-bottom:1px solid #ed9f4a;
+ border-top:1px solid #ed9f4a;
+}
+.delete_account_notice_box
+{
+ margin:25px 10px;
+}
+.climb_form_ext_box
+{
+ margin:25px 10px;
+}
+
+.new_account_title
+{
+ margin:10px;
+}
+
+.viewall_popup_menu_box_external, .edit_form
+{
+ clear:left;
+ clear:right;
+ margin-bottom:30px;
+/* background:#E0FFFF; */
+ padding:0px 10px 10px 0px;
+}
+
+.manage_account_link_box
+{
+ margin-top:5px;
+}
+.manage_account_link_box a
+{
+ color:#000;
+}
+.login_right_box
+{
+ margin-bottom:15px;
+}
+
+.mandatory_fields_notice
+{
+ margin:10px 0px;
+}
+
+.help_tables_of_contents
+{
+ margin:10px;
+ padding:10px;
+}
+
+.bottom_licence_notice
+{
+ clear:left;
+ clear:right;
+ font:normal 12px/1.2 sans-serif,arial;
+ padding:10px;
+ background:#E0FFFF;
+ margin:25px 0px 5px 0px;
+}
+.top_licence_notice
+{
+ clear:left;
+ clear:right;
+ font:normal 12px/1.2 sans-serif,arial;
+ padding:10px;
+ background:#E0FFFF;
+ margin:25px 0px 5px 0px;
+ text-align:left;
+}
+
+/*.copyright_notice_box
+{
+ text-align:right;
+ font: normal 12px/1 sans-serif,arial;
+ padding:14px;
+}*/
+
+.copyright_notice_box, .footer_credits_box
+{
+ text-align:center;
+ width:120px;
+ float:right;
+ font: normal 12px/1 sans-serif,arial;
+ padding:14px;
+ border-left:3px solid #FFF;
+}
+.footer_credits_box
+{
+ width:60px;
+ border-left:3px solid #FFF;
+}
+.home_objectives_description
+{
+ margin:5px;
+ overflow:hidden;
+ width:100%;
+}
+.home_objectives_description img
+{
+ float:left;
+ margin-right:5px;
+}
+.home_objectives_title
+{
+ margin:15px 5px 5px 5px;
+/* background:#90EE90; */
+ font-weight:bold;
+ padding:5px 0px;
+ border-bottom:1px solid #228B22;
+}
+
+.credits_item_title
+{
+ margin:15px 5px 5px 5px;
+/* background:#90EE90; */
+ padding:5px;
+ border-bottom:1px solid #228B22;
+ font-weight:bold;
+}
+.credits_item_description
+{
+ padding:5px;
+ margin:5px;
+ overflow:hidden;
+ width:100%;
+}
+
+.home_container
+{
+ margin:20px 0px;
+}
+
+.issues_external_box
+{
+ margin:40px 5px;
+}
+.issues_viewall_title
+{
+ margin:10px 2px;
+ font-weight:bold;
+}
+.issues_viewall_table
+{
+ font:normal 13px/1 sans-serif,arial;
+}
+
+.issues_viewall_table td
+{
+/* background:#F0FFFF; */
+ padding:5px;
+/* border-bottom:1px solid #E6E6FA; */
+}
+.issues_viewall_table td a
+{
+ color:#3E3E3E;
+}
+.issue_deleted_yes td
+{
+ background-color:#E6E6FA;
+}
+
+.issue_deleted_yes span
+{
+ color:red;
+ padding-left:5px;
+ font-size:10px;
+}
+
+.issue_deleted_no span
+{
+ display:none;
+}
+
+.issue_deleted_yes,
+.issue_deleted_yes td a
+{
+ color:#808080;
+}
+
+.issues_viewall_table th
+{
+ background:#ADD8E6;
+/* font-weight:normal; */
+/* border-top:1px solid #4169E1; */
+/* border-left:4px solid #4169E1; */
+/* border-bottom:1px solid #4169E1; */
+ padding:5px;
+}
+
+.issues_view_title, .issues_view_description_title
+{
+ font:bold 14px/1 sans-serif,arial;
+ padding:5px 0px;
+ border-bottom:1px solid black;
+}
+.issues_view_status_and_priority
+{
+ margin:20px 0px;
+ font:normal 12px/1 sans-serif,arial;
+}
+.issues_view_description
+{
+ margin:20px 0px;
+}
+
+.add_issue_form_title
+{
+ margin:30px 5px;
+ font-weight:bold;
+}
+.add_issue_form
+{
+ margin:30px 5px;
+}
+
+.contact_div
+{
+ margin:10px;
+}
+
+.help_external_box
+{
+ margin:5px;
+}
+.help_wiki_table thead
+{
+ text-align:left;
+}
+
+.hardware_element_image
+{
+ height:50px;
+ float:left;
+}
+.markItUpContainer
+{
+ z-index:0;
+}
+
+.search_form
+{
+ clear:both;
+ margin:5px 5px 50px 5px;
+}
+.search_form_pciid
+{
+ clear:both;
+ margin:5px 5px 50px 5px;
+}
+.search_form_label
+{
+ overflow:hidden;
+ height:22px;
+ margin:15px 5px 20px 5px;
+/* background:#90EE90; */
+ padding:5px 0px;
+ border-bottom:1px solid #228B22;
+ font-weight:bold;
+}
+.input_entry_search
+{
+ width:250px;
+ border: 1px solid #CECECE;
+ padding:2px;
+}
+
+.search_result_item
+{
+ margin:5px 5px 15px 5px;
+ border-top:1px solid #CECECE;
+ padding:5px 0px;
+}
+.search_result_item .first_level
+{
+ overflow:hidden;
+}
+
+.search_result_item_left
+{
+ width:300px;
+ float:left;
+}
+.search_result_item_right
+{
+ width:400px;
+ float:left;
+}
+.diff_color_notice
+{
+ background:#f1d8d8;
+ padding:8px;
+ margin:5px;
+ margin-bottom:20px;
+ border-bottom:1px solid #d26262;
+ border-top:1px solid #d26262;
+}
+
+.gray_text_notice
+{
+ color:#7c7a7a;
+}
+.credits_external_box
+{
+ margin-bottom:40px;
+}
+.notebook_model img
+{
+ float:left;
+}
+.span_model_name
+{
+ float:left;
+ margin-left:10px;
+ padding-top:5px;
+}
+
+/*dialog*/
+#dialog-form, #delete_dialog
+{
+ display:none;
+}
+#suggest_dialog
+{
+ display:none;
+}
+#dialog-form table
+{
+ text-align:left;
+}
+#dialog-form input
+{
+ width:300px;
+ border:1px solid #CECECE;
+}
+#dialog-form textarea, #delete_dialog textarea
+{
+ width:300px;
+ height:100px;
+ border:1px solid #CECECE;
+}
+.ask_for_removal_class
+{
+ float:right;
+ padding-top:5px;
+}
+.deletion_motivations_title
+{
+ margin:15px 5px;
+ border-bottom:1px solid #D26262;
+}
+
+.deletion_motivations_iternal
+{
+ margin:15px 5px;
+ padding:5px;
+ border:1px dashed #D26262;
+}
+.deletion_motivations_iternal_message
+{
+
+}
+
+.news_external_box
+{
+ margin:5px;
+ margin-bottom:40px;
+}
+.news_item
+{
+/* background:#f8f1b2; */
+/* padding:5px; */
+ margin:30px 0px;
+/* border:1px solid #f99f4f; */
+}
+.news_item_title
+{
+ font-weight:bold;
+ margin:0px 0px 4px 0px;
+ padding-bottom:5px;
+ border-bottom:1px solid #9d1d04;
+ color:#9d1d04;
+}
+.news_item_date
+{
+ font: normal 13px/1 sans-serif,arial;
+/* color:#e86a17; */
+ color:gray;
+ margin:0px 0px 10px 0px;
+}
+
+.discover_hardware, .download_database
+{
+ text-align:center;
+ margin-bottom:5px;
+}
+.download_database
+{
+ margin-bottom:30px;
+}
+
+.download_table
+{
+ margin:10px 0px;
+ padding:5px;
+}
+.download_table td
+{
+ padding:5px 5px;
+ background:#E0FFFF;
+}
+
+.help_external_box h1
+{
+ background:#FFD700;
+ padding:5px 10px;
+ color:#800000;
+ border-top:1px solid #800000;
+ border-bottom:1px solid #800000;
+ font:normal 20px/1 sans-serif,arial;
+}
+
+.right_box_ext_box
+{
+ margin:5px;
+ margin-bottom:300px;
+}
+
+.add_message_form_title
+{
+ margin:15px 0px;
+ font-weight:bold;
+ padding:5px 0px;
+ color:#4169E1;
+}
+
+.issues_message_item, .issues_message_item_preview, .issues_message_item_hidden, .talk_message_item_hidden
+{
+ -moz-border-radius: 12px;
+ -webkit-border-radius: 12px;
+ border-radius: 12px;
+ padding:10px;
+ margin:20px 0px;
+ background:#eaf2f4;
+/* border-top:1px solid #4169E1; */
+/* border-bottom:1px solid #4169E1; */
+}
+.issues_message_item_hidden, .talk_message_item_hidden
+{
+ background:#FFF;
+/* background:#b5d6e0; */
+ border-top:1px dashed #bcbcbc;
+ border-bottom:1px dashed #bcbcbc;
+}
+.issues_message_item_preview
+{
+ margin:5px 0px 20px 0px;
+ background:#FFF;
+ border:1px dashed #f9a92b;
+}
+.description_preview
+{
+ padding:10px;
+ margin:0px 0px;
+ border:2px dashed #f9a92b;
+}
+.description_preview_title
+{
+ padding:5px 0px;
+ margin:0px 0px;
+ font-style:italic;
+ color:#f9a92b;
+ font-weight:bold;
+}
+.talk_message_item_hidden
+{
+ margin-bottom:40px;
+/* background:#f1f1f1; */
+}
+.message_view_description
+{
+ clear:both;
+ margin-bottom:5px;
+}
+.message_view_description_hidden
+{
+ margin-top:5px;
+}
+.message_preview_notice
+{
+ color:#f9a92b;
+ margin:3px 3px;
+ font:italic 14px/1 sans-serif,arial;
+}
+.useful_links_ext div
+{
+ margin:3px 0px;
+ padding:1px;
+ padding-left:20px;
+ background: url(../Img/link.png) no-repeat left center;
+}
+.useful_links_ext div a
+{
+ color:#000;
+ text-decoration:none;
+ font:normal 14px/1 sans-serif,arial;
+}
+.issues_message_item_user
+{
+ overflow:hidden;
+ font-weight:bold;
+ margin-bottom:1em;
+}
+.issues_message_item_user_inner
+{
+ float:left;
+ width:500px;
+}
+
+.hide_general, .block_general
+{
+ clear:right;
+ float:right;
+ margin-left:10px;
+ font-weight:bold;
+ text-decoration:none;
+ color:#000;
+ font-size:13px;
+ padding-bottom:4px;
+}
+.hide_general img
+{
+ margin-right:5px;
+ margin-bottom:-2px;
+}
+.block_general img
+{
+ margin-right:5px;
+ margin-bottom:-5px;
+}
+.language_links_box ul
+{
+ overflow:hidden;
+ margin:4px 5px 20px 5px;
+ padding:0px;
+ list-style-type:none;
+}
+.language_links_box ul li
+{
+ float:left;
+ width:92px;
+/* background:red; */
+ margin-bottom:10px;
+/* margin-right:10px; */
+ margin-top:5px;
+}
+.language_links_box ul li a
+{
+ padding:5px;
+ text-decoration:none;
+ color:black;
+}
+.language_links_box ul li a span
+{
+ margin-left:3px;
+}
+.language_links_box a.current_lang
+{
+ border-top:1px dashed #6495ED;
+ border-bottom:1px dashed #6495ED;
+}
+
+.talk_numb_ext
+{
+ clear:both;
+ text-align:left;
+ margin-left:10px;
+}
+.talk_numb_ext a, .talk_numb_ext_wiki a
+{
+ display:block;
+ width:150px;
+ text-align:center;
+ padding:10px 0px;
+ text-decoration:none;
+ color:black;
+ background: url(../Img/talk_messages.png) no-repeat left center;
+ margin-bottom:10px;
+ float:right;
+ overflow:hidden;
+}
+
+.details_of_hidden_message
+{
+ display:none;
+}
+.details_of_hidden_message_inner, .details_of_actions_inner, .details_of_actions_inner_user
+{
+ margin:10px 0px;
+ background:#fbfbfb;
+ padding:5px;
+ border:1px solid #BCBCBC;
+}
+.details_of_actions_inner
+{
+ background:#ecfffe;
+ border:1px solid #7ed0cb;
+}
+.details_of_actions_inner_user
+{
+/* background:#F6EA99; */
+/* border:1px solid #F65637; */
+}
+.md_type
+{
+ display:none;
+}
+.hidden_message_view_details, .hidden_message_view_page
+{
+ font:normal 12px/1 sans-serif,arial;
+}
+.deleted_message_show
+{
+ margin:8px 0px 0px 0px;
+ font:normal 13px/1 sans-serif,arial;
+}
+
+.noscript_dist_alert
+{
+ margin-bottom:5px;
+}
+.noscript_dist_alert span
+{
+ color:#6495ED;
+}
+
+.isp_notice
+{
+ background:#dff1f8;
+ border:1px solid #6495ED;
+ padding:5px;
+ font:normal 14px/1.5 sans-serif,arial;
+}
+
+.user_hardware_pages
+{
+ margin:10px 5px;
+ padding:10px;
+ background:#F1D8D8;
+ /*border-bottom:1px solid #DC143C;
+ border-top:1px solid #DC143C;*/
+}
+
+.moderator_box, .moderator_box_deleted
+{
+ -moz-border-radius: 10px;
+ -webkit-border-radius: 10px;
+ border-radius: 10px;
+ overflow:hidden;
+ padding:10px;
+ margin:5px 5px 25px 5px;
+ background:#fbd59a;
+/* border:1px solid #f65637; */
+}
+.moderator_box_deleted
+{
+ background:#C7DAEF;
+/* border:1px solid #ADD8E6; */
+}
+
+.listTable
+{
+ margin:20px 5px;
+ width:100%;
+}
+
+/*MODERATORS' PAGE*/
+tr.listRow td
+{
+ font: normal 13px/1 sans-serif,arial;
+ padding:5px 5px;
+}
+tr.listRow td.type_column
+{
+ width:15%;
+}
+tr.listHead {
+ font: bold 13px/1 sans-serif,arial;
+}
+
+tr.listHead td {
+ padding:8px 4px;
+ background:#ADD8E6;
+/* border-top:1px solid #4169E1; */
+/* border-bottom:1px solid #4169E1; */
+}
+
+.recordsBox {
+ margin:10px 5px;
+}
+
+.recordsBox table {
+ width:100%;
+}
+
+a.linkItem {
+/* background:red; */
+ font:bold 12px/1 sans-serif,arial;
+}
+
+td.text_item_date
+{
+ width:25%;
+}
+.moderator_panel_link, .admin_panel_link
+{
+ margin:5px;
+ padding:10px;
+/* border:1px solid #ED9F4A; */
+/* background:#F6EA99; */
+}
+.admin_panel_link
+{
+/* border:1px solid #DA70D6; */
+/* background:#F6EA99; */
+}
+.noscript_notice
+{
+ margin:10px 5px;
+ padding:5px 10px;
+ background:#B0E0E6;
+ border:1px solid #4169E1;
+ color:#4169E1;
+}
+.search_img
+{
+ float:left;
+}
+.span_search_desc
+{
+ float:left;
+ margin-left:10px;
+ padding-top:0px;
+}
+.textarea_entry_search
+{
+ width:430px;
+ height:200px;
+ padding:3px;
+ border: 1px solid #CECECE;
+}
+.lspci_notice
+{
+ margin:10px 0px;
+ padding:5px 10px;
+ background:#B7F18C;
+ font-weight:bold;
+/* border: 1px solid #CECECE; */
+}
+
+.lspci_item_found, .lspci_item_not_found
+{
+ margin:20px 5px;
+ background: url('../Img/search_back.png') no-repeat top left;
+/* background: #C7DAEF; */
+ padding:12px 15px;
+ border-bottom:3px solid #8eb5df;
+ border-right:1px solid #8eb5df;
+}
+.lspci_item_found_compat
+{
+ padding-left:37px;
+}
+
+.search_result_model_name
+{
+ padding-left:10px;
+}
+
+.search_item_found
+{
+ margin:5px;
+}
+
+.lspci_item_not_found
+{
+ background: #ffe170;
+ border-bottom:3px solid #e8c224;
+ border-right:1px solid #e8c224;
+}
+.lspci_item_found_compat ul li
+{
+ list-style-type:none;
+}
+.lspci_item_found_compat ul
+{
+ margin:10px 20px;
+ padding:0px;
+}
+.found_ext
+{
+ margin-bottom:2em;
+}
+
+.lspci_item_found_compat a
+{
+ text-decoration:none;
+ font:normal 16px/1 sans-serif;
+}
+
+.last_modifications, .wiki_control_box
+{
+ margin:5px;
+ width:190px;
+ margin-bottom:2em;
+ background: url(../Img/back_last.png) no-repeat top left;
+}
+.wiki_control_box
+{
+ background: url(../Img/back_wiki.png) no-repeat top left;
+}
+.last_modifications ul, .wiki_control_box ul
+{
+ padding:8px;
+ padding-top:0px;
+}
+.wiki_control_box ul
+{
+ background: url(../Img/back_wiki.png) no-repeat bottom left;
+}
+.last_modifications li, .wiki_control_box li
+{
+ list-style-type:none;
+ margin:10px 5px;
+}
+.last_modifications_title
+{
+ padding-top:10px;
+ padding-left:14px;
+ font:bold 15px/1 sans-serif;
+}
+.last_modifications a
+{
+
+}
+.last_modifications_model
+{
+ color:#3e3e3e;
+ text-decoration:none;
+}
+.last_modifications_all
+{
+ background: url(../Img/back_last.png) no-repeat bottom left;
+ padding-bottom:10px;
+}
+.last_modifications_all span
+{
+ margin-left:10px;
+ font:normal 14px/1 sans-serif;
+}
+
+.wiki_external_box
+{
+ margin:4em 5px;
+ clear:both;
+ clear:right;
+}
+.wiki_page_title
+{
+ font:bold 18px/1 sans-serif,arial;
+ color:gray;
+ margin:20px 0px;
+ padding-bottom:4px;
+ border-bottom:1px solid #000;
+}
+.wiki_page_content
+{
+ margin:2em 0px;
+}
+
+.talk_numb_ext_wiki
+{
+ float:left;
+ text-align:left;
+ margin-left:10px;
+}
+.blocked_notice
+{
+ float:right;
+ font:normal 12px/1 sans-serif;
+ color:#000;
+}
+.entry_label_small
+{
+ font-weight:normal;
+ font-size:12px;
+ color:#808080;
+}
+
+.clear_right
+{
+ clear:right;
+}
+#admin_box, #moderator_box
+{
+ margin:20px 10px;
+/* border-bottom:1px solid #DC143C; */
+/* border-top:1px solid #DC143C; */
+ border-left:10px solid #DC143C;
+/* background-color:#F0FFFF; */
+ padding:10px;
+}
+#moderator_box
+{
+/* background-color:#fffc8e; */
+/* border-bottom:1px solid #FFA500; */
+ border-left:10px solid #FFA500;
+}
+.admin_box_title, .moderator_box_title
+{
+ margin-bottom:10px;
+ font-size:12px;
+ font-weight:bold;
+/* color:#FFF; */
+}
+#admin_box ul, #moderator_box ul
+{
+ margin:0px;
+ padding:0px;
+ margin-left:15px;
+}
+#admin_box ul li, #moderator_box ul li
+{
+ list-style-type:none;
+ padding:5px 0px;
+}
+#admin_box ul li a, #moderator_box ul li a
+{
+ color:#DC143C;
+ font-weight:bold;
+}
+#admin_box ul li a.not_bold
+{
+ color:#000;
+ font-weight:normal;
+}
+#moderator_box ul li a
+{
+ color:#FF4500;
+}
+.display_none
+{
+ display:none;
+}
+
+.moderation_details_box
+{
+ clear:right;
+ margin-top:5px;
+}
+
+.not_logged_license
+{
+ padding:10px;
+ background-color:#F1D8D8;
+ font-size:12px;
+}
+.rss_right_box
+{
+ text-align:center;
+ padding:5px;
+ margin-bottom:15px;
+/* margin-bottom:25px;
+ padding:5px;
+ overflow:hidden;
+ height:32px;
+ background-color:#C7DAEF;
+ color:#FFF;*/
+}
+
+/*.rss_right_box img
+{
+ float:left;
+}
+.rss_right_box_text
+{
+ float:left;
+ margin:5px 10px;
+ font-weight:bold;
+}
+.rss_right_box_text a
+{
+ color:#000;
+/* text-decoration:none; */
+ font-weight:normal;
+}*/
+
+/*tabs*/
+.description_tabs
+{
+ margin-top:10px;
+}
+div#description_tabs_content
+{
+ clear:left;
+/* width:707px; */
+/* padding-left:5px; */
+ border:1px solid #DCDCDC;
+ position:relative;
+ z-index:1;
+}
+.description_tabs_page
+{
+ margin:10px;
+}
+.description_tabs ul.desc_menu
+{
+ width:700px;
+/* border-bottom:1px solid #DCDCDC; */
+/* overflow:hidden; */
+ margin:0px;
+/* height:34px; */
+ padding:0px;
+ position:relative;
+ z-index:4;
+/* background-color:red; */
+ top:1px;
+/* padding-left:10px; */
+}
+.description_tabs li.desc_tabs
+{
+ display:block;
+ float:left;
+ width:70px;
+ text-align:center;
+ padding:6px 8px;
+ border:1px solid #DCDCDC;
+ background-color:#E6E6FA;
+ position:relative;
+ margin-right:8px;
+ margin-left:0px;
+ z-index:5;
+}
+.description_tabs li.current_tab
+{
+ background-color:#FFF;
+ border-bottom:1px solid #FFF;
+}
+.description_tabs li.desc_tabs a
+{
+/* text-decoration:none; */
+ color:#000;
+/* font-weight:bold; */
+}
+.separation_line
+{
+ background-color:#DCDCDC;
+ padding:6px 8px;
+ margin:20px 0;
+}
+.lspci_item_not_found_inner
+{
+ margin:10px 0 5px 0;
+ font-weight:bold;
+}
+.insert_suggestion_list
+{
+ list-style-type:none;
+}
+.insert_suggestion_list li
+{
+ margin:10px 0;
+}
+
+.issue_hidden_notice, .wiki_hidden_notice
+{
+ width:450px;
+ float:left;
+ margin-bottom:10px;
+ color:red;
+}
+.wiki_hidden_notice
+{
+ color:#000;
+}
+.show_hidden_box_ext
+{
+ clear:left;
+}
+.box_module_how_to_compile
+{
+/* height:30px; */
+ background-color:#F0E68C;
+/* clear:left; */
+ margin-top:5px;
+ padding:10px;
+ font-size:12px;
+}
+.box_module_label a
+{
+ color:#FF4500;
+ font-size:12px;
+}
+
+.track_alert
+{
+ border:10px solid red;
+ padding:5px;
+}
+
+.catalogue_top_notice
+{
+ clear:right;
+ margin:0 5px;
+}
+
+.version_div
+{
+ margin-bottom:30px;
+ text-align:center;
+}
+
+.model_string_search_form
+{
+ margin:5px;
+ padding:8px;
+ background-color:#C7DAEF;
+ border: 1px solid #6495ED;
+ width:685px;
+}
+
+.model_string_search_form img
+{
+ vertical-align:-3px;
+}
+
+.user_action_filter
+{
+ width:190px;
+}
+.user_action_filter img, .user_action_filter_submit
+{
+ vertical-align:middle;
+}
+.user_action_filter_text
+{
+ width:130px;
+}
+
+.no_bold
+{
+ font-weight:normal;
+}
+
+/*.version_div a
+{
+ display:block;
+ background-color: #C7DAEF;
+ margin: 5px 5px;
+ margin-bottom:20px;
+ padding: 5px 10px;
+ padding-left:5px;
+ color:#000;
+ text-decoration:none;
+ font-weight:bold;
+}
+.version_div a img
+{
+ vertical-align:middle;
+}*/
+/*.version_div a div
+{
+ padding-top:14px;
+}*/
+/*
+Start - temporarily added due to transformation of help pages
+2011-05-29 joeko
+*/
+.help_external_box ul {
+ line-height: 1.5em;
+ list-style-type: square;
+ margin: .3em 0 0 1.5em;
+ padding: 0;
+}
+.help_external_box ol {
+ line-height: 1.5em;
+ margin: .3em 0 0 3.2em;
+ padding: 0;
+ list-style-image: none;
+}
+.help_external_box li {
+ margin-bottom: .1em;
+}
+.help_external_box dt {
+ font-weight: bold;
+ margin-top: .5em;
+ margin-bottom: .3em;
+ color: #3D6300;
+}
+.help_external_box dl {
+ margin-top: .4em;
+ margin-bottom: .2em;
+}
+.help_external_box dd {
+ line-height: 1.5em;
+ margin-top: .5em;
+ margin-left: 2em;
+ margin-top: .5em;
+ margin-bottom: .5em;
+}
+.help_external_box p, .help_external_box dd {
+ margin-top: .5em;
+ margin-bottom: .5em;
+}
+.help_external_box p.attention {
+ /* taken from home page */
+ padding: 0.5em;
+ background: none repeat scroll 0% 0% rgb(255, 160, 122);
+ margin: 0.5em;
+ border-top: 1px solid rgb(220, 20, 60);
+ border-bottom: 1px solid rgb(220, 20, 60);
+ font-size: 16px;
+}
+.help_external_box p.example, dd.example {
+ border-bottom: 0;
+ color: #3d6300;
+}
+.help_external_box p.note dd.note {
+ margin-left: 2em;
+ margin-right: 0;
+ font-weight: bolder;
+ color: #3d6300; /* background: #CFC bottom right no-repeat;*/;
+ font-style: normal;
+ font-style: italic;
+}
+.help_external_box p.opt, dd.opt {
+ color: #3d6300;
+ font-weight: bold;
+ font-style: italic;
+}
+
+.help_external_box h2,.help_external_box h3,.help_external_box h4
+{
+ margin: 0 4px 0 0;
+ padding: 0.2em 0 0.3em 1.25em;
+ font-size: 1.4em;
+ color: #353535;
+ background: #D8FF9E;
+}
+.help_external_box h2
+{
+ font-size: 1.3em;
+ color: #3D6300;
+}
+.help_external_box h3
+{
+ font-size: 1.2em;
+ color: #3D6300;
+ background-color: White;
+}
+.help_external_box h4
+{
+ font-size: 1.1em;
+ color: #3D6300;
+ background-color: White;
+}
+.help_external_box p.terminal,.help_external_box pre.terminal
+{
+ font-family: monospace;
+ padding: .5em 1em;
+ background-color: rgb(50,50,50);
+ border-left: 2px solid rgb(97,97,97);
+ color: white;
+}
+
+/*
+End
+*/
diff --git a/h-source/Css/mainmenu.css b/h-source/Css/mainmenu.css
new file mode 100755
index 0000000..615c8bf
--- /dev/null
+++ b/h-source/Css/mainmenu.css
@@ -0,0 +1,78 @@
+/*stile header di ogni view*/
+.mainMenu {
+ height:50px;
+/* border-top:1px solid #ADD8E6; */
+ border-bottom:1px solid #4169E1;
+ padding-top:6px;
+ margin-bottom:10px;
+ background:#d1deed;
+}
+.mainMenuItem {
+ float:left;
+ width:60px;
+ height:40px;
+ margin-left:5px;
+ border:1px outset #708090;
+ background:#4169E1;
+ text-align:center;
+}
+
+.mainMenuItem a {
+/* margin:8px 5px 1px 10px; */
+ display:block;
+ margin-top:12px;
+ color:#B0E0E6;
+ font:bold 14px/1 Verdana,arial;
+}
+
+.verticalMenu {
+ margin-bottom:30px;
+ margin-left:10px;
+/* text-align:right;*/
+}
+
+ul#menuBlock {
+/* float:right; */
+ float:left;
+ margin:0px;
+ padding:0px;
+ list-style:none;
+ height:24px;
+}
+
+ul#menuBlock li {
+ position:relative;
+ display:block;
+ float:left;
+ width:100px;
+ border:1px outset #D3D3D3;
+ height:21px;
+# height:24px;
+ text-align:center;
+ background:#E6E6FA;
+ padding-top:3px;
+}
+
+ul#menuBlock li a {
+ color:#696969;
+ font: bold 12px/1 Verdana,arial;
+}
+
+ul#menuBlock li ul {
+ margin:0px;
+ padding:0px;
+ list-style:none;
+ position:absolute;
+ top:24px;
+# top:25px;
+ left:-1px;
+ display:none;
+}
+
+ul#menuBlock li ul li {
+# margin-top:-3px;
+}
+
+/*ul#menuBlock li:hover ul{
+ display:block;
+}*/ \ No newline at end of file
diff --git a/h-source/Css/mobile.css b/h-source/Css/mobile.css
new file mode 100644
index 0000000..4fa4c83
--- /dev/null
+++ b/h-source/Css/mobile.css
@@ -0,0 +1,271 @@
+/*stili per il layout fisso*/
+html, body
+{
+ margin: 0;
+ padding:0;
+}
+
+body
+{
+ font:normal 15px/1.3 sans-serif,arial;
+ text-align: left;
+ background:#ffffff;
+}
+
+img
+{
+ border:0px;
+}
+
+#footer
+{
+ /*padding-bottom:5px;
+ padding-top:5px;*/
+}
+#footer div
+{
+ text-align:center;
+}
+#footer a
+{
+/* color: #DC143C; */
+}
+
+.navigation-bar
+{
+ background-color: #015512;
+ height:35px;
+ padding-top:5px;
+ padding-right:5px;
+}
+
+/*tree navigation*/
+.position_tree_box
+{
+ margin:5px 0px 25px 0px;
+ padding:5px;
+ font:normal 14px/1 sans-serif,arial;
+ border-top:1px solid #DC143C;
+ border-bottom:1px solid #DC143C;
+}
+.position_tree_box a, .position_tree_box a.ui-link:visited, .position_tree_box .ui-link
+{
+ text-decoration:none;
+ color:#DC143C;
+}
+/*.ui-body-d .ui-link {
+ color:#DC143C;
+ font-weight: bold;
+}*/
+.last_tree_element
+{
+ font-weight:bold;
+}
+
+.credits_item_title
+{
+ margin:15px 5px 5px 5px;
+ padding:5px;
+ padding-left:0px;
+ border-bottom:1px solid #228B22;
+ font-weight:bold;
+}
+.credits_item_description
+{
+ padding:5px;
+ padding-left:0px;
+ margin:5px;
+ overflow:hidden;
+ width:100%;
+}
+
+#hardware_list
+{
+/* padding:0 15px; */
+ margin-top:20px;
+ margin-bottom:20px;
+}
+.bottom_licence_notice
+{
+ clear:left;
+ clear:right;
+ font:normal 12px/1.2 sans-serif,arial;
+ padding:10px;
+ background:#E0FFFF;
+ margin:25px 0px 5px 0px;
+}
+.page_list
+{
+ margin-top:28px;
+}
+
+.notebook_view_title
+{
+ margin-bottom:28px;
+}
+/*jquery mobile*/
+.ui-header {
+ background: #B7F18C;
+}
+
+.ui-li-thumb {
+ left: 5px;
+ max-height: 70px;
+ max-width: 70px;
+ position: absolute;
+ top: 5px;
+}
+
+.ui-content .ui-listview {
+ margin: 15px -15px;
+}
+
+#language-dialog .ui-header .ui-title
+{
+ display: block;
+ font-size: 16px;
+ margin: 0.7em 0;
+ margin-left:30px;
+ margin-top:0.8em;
+ text-align: left;
+}
+.main_content_element
+{
+ padding:5px 0;
+ border-top:1px dashed #000;
+}
+
+.track_alert
+{
+ border:10px solid red;
+ padding:5px;
+}
+
+.device_description
+{
+ background-color:#E6E6FA;
+ padding:5px;
+}
+
+.viewall_no_items_found
+{
+ font:normal 14px/1 sans-serif,arial;
+ margin:20px 5px;
+ padding:5px;
+/* color: #FF4500; */
+ border-top:1px solid #FF4500;
+ border-bottom:1px solid #FF4500;
+}
+
+.home_objectives_description
+{
+ margin:5px;
+ overflow:hidden;
+ width:100%;
+}
+.home_objectives_description img
+{
+ float:left;
+ margin-right:5px;
+}
+.home_objectives_title
+{
+ margin:15px 5px 5px 5px;
+/* background:#90EE90; */
+ font-weight:bold;
+ padding:5px 0px;
+ border-bottom:1px solid #228B22;
+}
+
+.home_container
+{
+ margin:20px 0px;
+}
+
+.tables_of_contents
+{
+ margin:20px 0;
+ padding:5px;
+ background-color:#EAF2F4;
+ border:1px solid #C7DAEF;
+ -moz-border-radius: 15px;
+ -webkit-border-radius: 15px;
+}
+.tables_of_contents a
+{
+ font-size:14px;
+}
+.tables_of_contents_title
+{
+ margin:10px 25px;
+ font-weight:bold;
+}
+/*wiki code*/
+.code_pre
+{
+/* width:650px; */
+ max-height:300px;
+ overflow:scroll;
+ background:#f9f4a7;
+ padding:5px 0 5px 5px;
+ font-size:12px;
+/* color:#4169E1; */
+ border:1px dashed #d4cb3b;
+}
+
+.div_h1
+{
+ font:bold 18px/1 sans-serif,arial;
+ border-bottom:1px solid gray;
+ padding:3px 0px;
+ margin:20px 0px 10px 0px;
+ color:gray;
+}
+.div_h2
+{
+ font:bold 17px/1 sans-serif,arial;
+ color:gray;
+ padding:2px 0;
+}
+.div_h3
+{
+ font:bold 16px/1 sans-serif,arial;
+ color:gray;
+ padding:2px 0;
+}
+.div_lang
+{
+ margin-top:4em;
+ padding:8px;
+ background:#cfe2ff;
+ /*border-top:1px solid #FFA500;
+ border-bottom:1px solid #FFA500;*/
+}
+.div_lang a
+{
+ padding:0px 3px;
+}
+
+.ui-body {
+ padding-top: 0.8em;
+ margin-top:10px;
+}
+
+.ui-li-desc { white-space: normal; }
+.ui-li-heading { white-space: normal; }
+.ui-li .ui-btn-text a.ui-link-inherit { white-space: normal; }
+
+.devices_list .ui-li-desc
+{
+/* border-bottom:1px dashed #A9A9A9; */
+}
+
+.ui-listview .ui-li-icon {
+ top: 1.3em;
+}
+
+/*.ui-icon, .ui-icon-searchfield:after {
+ -moz-border-radius: 0px;
+ -webkit-border-radius: 0px;
+ background: url("images/icons-18-white.png") no-repeat scroll 0 0 rgba(0, 0, 0, 0.4);
+}*/
diff --git a/h-source/Css/pagelist.css b/h-source/Css/pagelist.css
new file mode 100644
index 0000000..93c8454
--- /dev/null
+++ b/h-source/Css/pagelist.css
@@ -0,0 +1,29 @@
+/*page division*/
+.pageList {
+ text-align:left;
+ font:normal 14px/1 Verdana,arial;
+ padding:10px;
+}
+
+div.pageList a {
+ padding:5px 10px;
+ border:1px outset #708090;
+ color:#B0E0E6;
+ background:#4169E1;
+ margin-right:5px;
+}
+
+/*view footer*/
+.viewFooter {
+ height:50px;
+ border-top:1px solid #4169E1;
+ padding-top:6px;
+ margin-bottom:10px;
+ background:#d1deed;
+}
+
+div.pageList a.currentPage
+{
+ font-weight:bold;
+ background:#0000CD;
+} \ No newline at end of file
diff --git a/h-source/Css/panel.css b/h-source/Css/panel.css
new file mode 100644
index 0000000..8b9f9a9
--- /dev/null
+++ b/h-source/Css/panel.css
@@ -0,0 +1,74 @@
+ul {
+ list-style-type: none;
+}
+
+div.mainPanel {
+
+}
+
+/*logout button*/
+.logoutButton
+{
+ float:left;
+ width:70px;
+ height:40px;
+ margin-left:5px;
+ border:1px outset #708090;
+ background:#4169E1;
+ text-align:center;
+}
+.logoutButton a
+{
+ display:block;
+ margin-top:13px;
+ color:#B0E0E6;
+ font:bold 12px/1 Verdana,arial;
+}
+
+/*list of application in the panel main action*/
+.panelApplicationList
+{
+ padding:0px;
+}
+.panelApplicationList li
+{
+ display:block;
+ width:200px;
+ height:30px;
+ border:1px outset #708090;
+ margin:5px;
+ background:#4169E1;
+ padding-top:9px;
+}
+
+.panelApplicationList li a
+{
+ margin:5px;
+ font: bold 14px/1 Verdana,arial;
+ color:#B0E0E6;
+}
+
+/*list of groups an user is inserted within*/
+.groupsList
+{
+ margin:20px 5px 5px 5px;
+ font:normal 14px/1 Verdana,arial;
+}
+.groupsList li
+{
+ margin:5px 0px;
+ padding:0px;
+ font:bold 14px/1 Verdana,arial;
+}
+.groupsList ul
+{
+ padding:10px;
+}
+
+/*list of logged users in panel*/
+.usersLoggedList
+{
+ margin:5px;
+ text-align:right;
+ font:normal 14px/1 Verdana,arial;
+} \ No newline at end of file
diff --git a/h-source/Css/popupmenu.css b/h-source/Css/popupmenu.css
new file mode 100755
index 0000000..66a202e
--- /dev/null
+++ b/h-source/Css/popupmenu.css
@@ -0,0 +1,49 @@
+.verticalMenu {
+ margin-bottom:50px;
+ margin-left:10px;
+/* text-align:right;*/
+}
+
+ul#menuBlock {
+/* float:right; */
+ float:left;
+ margin:0px;
+ padding:0px;
+ list-style:none;
+ height:24px;
+}
+
+ul#menuBlock li {
+ position:relative;
+ display:block;
+ float:left;
+ width:150px;
+ border:1px outset #D3D3D3;
+ height:21px;
+ text-align:center;
+ background:#E6E6FA;
+ padding-top:5px;
+ padding-bottom:-2px;
+}
+
+ul#menuBlock li a {
+ color:#696969;
+ font: bold 12px/1 Verdana,arial;
+}
+
+ul#menuBlock li ul {
+ margin:0px;
+ padding:0px;
+ list-style:none;
+ position:absolute;
+ top:24px;
+ left:-1px;
+ display:none;
+}
+
+ul#menuBlock li ul li {
+}
+
+/*ul#menuBlock li:hover ul{
+ display:block;
+}*/ \ No newline at end of file
diff --git a/h-source/Css/scaffold.css b/h-source/Css/scaffold.css
new file mode 100755
index 0000000..8cc7529
--- /dev/null
+++ b/h-source/Css/scaffold.css
@@ -0,0 +1,105 @@
+html, body{margin: 0;padding:0}
+
+body{
+ font-family: Verdana,arial,sans-serif;
+ font-size: 11px;
+ text-align: center;
+/* background: #93045a; */
+}
+
+td {
+ font-size: 12px;
+}
+
+img {
+ border:none;
+}
+
+td.editForm, td.delForm, td.associateForm, td.moveupForm, td.movedownForm {
+ width:3%;
+}
+
+td.editForm input, td.delForm input, td.associateForm input, td.moveupForm input, td.movedownForm input
+{
+ height:30px;
+}
+
+/*alert string*/
+.alert {
+ font:bold 12px/1.5 Verdana,arial;
+ padding:5px;
+ margin:5px 5px 15px 5px;
+ background:TOMATO;
+ border-top:2px solid MAROON;
+ border-bottom:2px solid MAROON;
+ color:MAROON;
+}
+
+/*executed operation string*/
+.executed {
+ font:bold 12px/1.5 Verdana,arial;
+ padding:5px;
+ margin:5px 5px 15px 5px;
+ background:#E0FFFF;
+ border-top:2px solid #ADD8E6;
+ border-bottom:2px solid #ADD8E6;
+ color:#4169E1;
+}
+
+/*action:main*/
+tr.listRow {
+ background:#E6E6FA;
+}
+
+tr.listHead {
+ font-weight: bold;
+ background:#d1deed;
+ border:1px solid #4169E1;
+ border-bottom:1px solid #4169E1;
+}
+
+tr.listHead td {
+/* font-weight: bold; */
+/* background:#d1deed; */
+ border-top:1px solid #4169E1;
+ border-bottom:1px solid #4169E1;
+}
+
+.recordsBox {
+ margin:10px 0px;
+}
+
+.recordsBox table {
+ width:100%;
+}
+
+.listItemForm {
+ margin:0px;
+}
+
+a.linkItem {
+/* background:red; */
+ font:bold 12px/1 Verdana,arial;
+}
+
+/*controller:panel
+/*action:main*/
+.main_box {
+ padding:50px 20px;
+ width:700px;
+ height:250px;
+}
+.top_color {
+ text-align:center;
+ width:160px;
+ height:35px;
+ margin:0;
+ padding:0;
+}
+.bottom_color {
+ background:lavender;
+ text-align:center;
+ width:160px;
+ margin:0;
+ padding:5px 0;
+} \ No newline at end of file
diff --git a/h-source/External/Fonts/FreeFont/AUTHORS b/h-source/External/Fonts/FreeFont/AUTHORS
index 4148c93..4148c93 100644..100755
--- a/h-source/External/Fonts/FreeFont/AUTHORS
+++ b/h-source/External/Fonts/FreeFont/AUTHORS
diff --git a/h-source/External/Fonts/FreeFont/COPYING b/h-source/External/Fonts/FreeFont/COPYING
index 94a9ed0..94a9ed0 100644..100755
--- a/h-source/External/Fonts/FreeFont/COPYING
+++ b/h-source/External/Fonts/FreeFont/COPYING
diff --git a/h-source/External/Fonts/FreeFont/CREDITS b/h-source/External/Fonts/FreeFont/CREDITS
index 0f47440..0f47440 100644..100755
--- a/h-source/External/Fonts/FreeFont/CREDITS
+++ b/h-source/External/Fonts/FreeFont/CREDITS
diff --git a/h-source/External/Fonts/FreeFont/ChangeLog b/h-source/External/Fonts/FreeFont/ChangeLog
index d5345d0..d5345d0 100644..100755
--- a/h-source/External/Fonts/FreeFont/ChangeLog
+++ b/h-source/External/Fonts/FreeFont/ChangeLog
diff --git a/h-source/External/Fonts/FreeFont/FreeMono.ttf b/h-source/External/Fonts/FreeFont/FreeMono.ttf
index ba90adb..ba90adb 100644..100755
--- a/h-source/External/Fonts/FreeFont/FreeMono.ttf
+++ b/h-source/External/Fonts/FreeFont/FreeMono.ttf
Binary files differ
diff --git a/h-source/External/Fonts/FreeFont/INSTALL b/h-source/External/Fonts/FreeFont/INSTALL
index fbbbe80..fbbbe80 100644..100755
--- a/h-source/External/Fonts/FreeFont/INSTALL
+++ b/h-source/External/Fonts/FreeFont/INSTALL
diff --git a/h-source/External/Fonts/FreeFont/README b/h-source/External/Fonts/FreeFont/README
index 60e67f2..60e67f2 100644..100755
--- a/h-source/External/Fonts/FreeFont/README
+++ b/h-source/External/Fonts/FreeFont/README
diff --git a/h-source/External/swiftmailer/lib/classes/Swift.php b/h-source/External/swiftmailer/lib/classes/Swift.php
index 77abbbf..77abbbf 100644..100755
--- a/h-source/External/swiftmailer/lib/classes/Swift.php
+++ b/h-source/External/swiftmailer/lib/classes/Swift.php
diff --git a/h-source/External/swiftmailer/lib/classes/Swift/Attachment.php b/h-source/External/swiftmailer/lib/classes/Swift/Attachment.php
index d3779bf..d3779bf 100644..100755
--- a/h-source/External/swiftmailer/lib/classes/Swift/Attachment.php
+++ b/h-source/External/swiftmailer/lib/classes/Swift/Attachment.php
diff --git a/h-source/External/swiftmailer/lib/classes/Swift/ByteStream/AbstractFilterableInputStream.php b/h-source/External/swiftmailer/lib/classes/Swift/ByteStream/AbstractFilterableInputStream.php
index 71bc3f1..71bc3f1 100644..100755
--- a/h-source/External/swiftmailer/lib/classes/Swift/ByteStream/AbstractFilterableInputStream.php
+++ b/h-source/External/swiftmailer/lib/classes/Swift/ByteStream/AbstractFilterableInputStream.php
diff --git a/h-source/External/swiftmailer/lib/classes/Swift/ByteStream/ArrayByteStream.php b/h-source/External/swiftmailer/lib/classes/Swift/ByteStream/ArrayByteStream.php
index f918889..f918889 100644..100755
--- a/h-source/External/swiftmailer/lib/classes/Swift/ByteStream/ArrayByteStream.php
+++ b/h-source/External/swiftmailer/lib/classes/Swift/ByteStream/ArrayByteStream.php
diff --git a/h-source/External/swiftmailer/lib/classes/Swift/ByteStream/FileByteStream.php b/h-source/External/swiftmailer/lib/classes/Swift/ByteStream/FileByteStream.php
index 14773c2..14773c2 100644..100755
--- a/h-source/External/swiftmailer/lib/classes/Swift/ByteStream/FileByteStream.php
+++ b/h-source/External/swiftmailer/lib/classes/Swift/ByteStream/FileByteStream.php
diff --git a/h-source/External/swiftmailer/lib/classes/Swift/CharacterReader.php b/h-source/External/swiftmailer/lib/classes/Swift/CharacterReader.php
index 53d39ec..53d39ec 100644..100755
--- a/h-source/External/swiftmailer/lib/classes/Swift/CharacterReader.php
+++ b/h-source/External/swiftmailer/lib/classes/Swift/CharacterReader.php
diff --git a/h-source/External/swiftmailer/lib/classes/Swift/CharacterReader/GenericFixedWidthReader.php b/h-source/External/swiftmailer/lib/classes/Swift/CharacterReader/GenericFixedWidthReader.php
index 26b13ff..26b13ff 100644..100755
--- a/h-source/External/swiftmailer/lib/classes/Swift/CharacterReader/GenericFixedWidthReader.php
+++ b/h-source/External/swiftmailer/lib/classes/Swift/CharacterReader/GenericFixedWidthReader.php
diff --git a/h-source/External/swiftmailer/lib/classes/Swift/CharacterReader/UsAsciiReader.php b/h-source/External/swiftmailer/lib/classes/Swift/CharacterReader/UsAsciiReader.php
index 3e0228a..3e0228a 100644..100755
--- a/h-source/External/swiftmailer/lib/classes/Swift/CharacterReader/UsAsciiReader.php
+++ b/h-source/External/swiftmailer/lib/classes/Swift/CharacterReader/UsAsciiReader.php
diff --git a/h-source/External/swiftmailer/lib/classes/Swift/CharacterReader/Utf8Reader.php b/h-source/External/swiftmailer/lib/classes/Swift/CharacterReader/Utf8Reader.php
index 54ea9a4..54ea9a4 100644..100755
--- a/h-source/External/swiftmailer/lib/classes/Swift/CharacterReader/Utf8Reader.php
+++ b/h-source/External/swiftmailer/lib/classes/Swift/CharacterReader/Utf8Reader.php
diff --git a/h-source/External/swiftmailer/lib/classes/Swift/CharacterReaderFactory.php b/h-source/External/swiftmailer/lib/classes/Swift/CharacterReaderFactory.php
index 9e01de1..9e01de1 100644..100755
--- a/h-source/External/swiftmailer/lib/classes/Swift/CharacterReaderFactory.php
+++ b/h-source/External/swiftmailer/lib/classes/Swift/CharacterReaderFactory.php
diff --git a/h-source/External/swiftmailer/lib/classes/Swift/CharacterReaderFactory/SimpleCharacterReaderFactory.php b/h-source/External/swiftmailer/lib/classes/Swift/CharacterReaderFactory/SimpleCharacterReaderFactory.php
index a6f9f94..a6f9f94 100644..100755
--- a/h-source/External/swiftmailer/lib/classes/Swift/CharacterReaderFactory/SimpleCharacterReaderFactory.php
+++ b/h-source/External/swiftmailer/lib/classes/Swift/CharacterReaderFactory/SimpleCharacterReaderFactory.php
diff --git a/h-source/External/swiftmailer/lib/classes/Swift/CharacterStream.php b/h-source/External/swiftmailer/lib/classes/Swift/CharacterStream.php
index bf91528..bf91528 100644..100755
--- a/h-source/External/swiftmailer/lib/classes/Swift/CharacterStream.php
+++ b/h-source/External/swiftmailer/lib/classes/Swift/CharacterStream.php
diff --git a/h-source/External/swiftmailer/lib/classes/Swift/CharacterStream/ArrayCharacterStream.php b/h-source/External/swiftmailer/lib/classes/Swift/CharacterStream/ArrayCharacterStream.php
index 9612365..9612365 100644..100755
--- a/h-source/External/swiftmailer/lib/classes/Swift/CharacterStream/ArrayCharacterStream.php
+++ b/h-source/External/swiftmailer/lib/classes/Swift/CharacterStream/ArrayCharacterStream.php
diff --git a/h-source/External/swiftmailer/lib/classes/Swift/CharacterStream/NgCharacterStream.php b/h-source/External/swiftmailer/lib/classes/Swift/CharacterStream/NgCharacterStream.php
index f090aa7..f090aa7 100644..100755
--- a/h-source/External/swiftmailer/lib/classes/Swift/CharacterStream/NgCharacterStream.php
+++ b/h-source/External/swiftmailer/lib/classes/Swift/CharacterStream/NgCharacterStream.php
diff --git a/h-source/External/swiftmailer/lib/classes/Swift/DependencyContainer.php b/h-source/External/swiftmailer/lib/classes/Swift/DependencyContainer.php
index b6ba554..b6ba554 100644..100755
--- a/h-source/External/swiftmailer/lib/classes/Swift/DependencyContainer.php
+++ b/h-source/External/swiftmailer/lib/classes/Swift/DependencyContainer.php
diff --git a/h-source/External/swiftmailer/lib/classes/Swift/DependencyException.php b/h-source/External/swiftmailer/lib/classes/Swift/DependencyException.php
index bb1681c..bb1681c 100644..100755
--- a/h-source/External/swiftmailer/lib/classes/Swift/DependencyException.php
+++ b/h-source/External/swiftmailer/lib/classes/Swift/DependencyException.php
diff --git a/h-source/External/swiftmailer/lib/classes/Swift/EmbeddedFile.php b/h-source/External/swiftmailer/lib/classes/Swift/EmbeddedFile.php
index 34d096c..34d096c 100644..100755
--- a/h-source/External/swiftmailer/lib/classes/Swift/EmbeddedFile.php
+++ b/h-source/External/swiftmailer/lib/classes/Swift/EmbeddedFile.php
diff --git a/h-source/External/swiftmailer/lib/classes/Swift/Encoder.php b/h-source/External/swiftmailer/lib/classes/Swift/Encoder.php
index 32aa96a..32aa96a 100644..100755
--- a/h-source/External/swiftmailer/lib/classes/Swift/Encoder.php
+++ b/h-source/External/swiftmailer/lib/classes/Swift/Encoder.php
diff --git a/h-source/External/swiftmailer/lib/classes/Swift/Encoder/Base64Encoder.php b/h-source/External/swiftmailer/lib/classes/Swift/Encoder/Base64Encoder.php
index 09c71ba..09c71ba 100644..100755
--- a/h-source/External/swiftmailer/lib/classes/Swift/Encoder/Base64Encoder.php
+++ b/h-source/External/swiftmailer/lib/classes/Swift/Encoder/Base64Encoder.php
diff --git a/h-source/External/swiftmailer/lib/classes/Swift/Encoder/QpEncoder.php b/h-source/External/swiftmailer/lib/classes/Swift/Encoder/QpEncoder.php
index 6914f6c..6914f6c 100644..100755
--- a/h-source/External/swiftmailer/lib/classes/Swift/Encoder/QpEncoder.php
+++ b/h-source/External/swiftmailer/lib/classes/Swift/Encoder/QpEncoder.php
diff --git a/h-source/External/swiftmailer/lib/classes/Swift/Encoder/Rfc2231Encoder.php b/h-source/External/swiftmailer/lib/classes/Swift/Encoder/Rfc2231Encoder.php
index febc6ba..febc6ba 100644..100755
--- a/h-source/External/swiftmailer/lib/classes/Swift/Encoder/Rfc2231Encoder.php
+++ b/h-source/External/swiftmailer/lib/classes/Swift/Encoder/Rfc2231Encoder.php
diff --git a/h-source/External/swiftmailer/lib/classes/Swift/Encoding.php b/h-source/External/swiftmailer/lib/classes/Swift/Encoding.php
index 1849a82..1849a82 100644..100755
--- a/h-source/External/swiftmailer/lib/classes/Swift/Encoding.php
+++ b/h-source/External/swiftmailer/lib/classes/Swift/Encoding.php
diff --git a/h-source/External/swiftmailer/lib/classes/Swift/Events/CommandEvent.php b/h-source/External/swiftmailer/lib/classes/Swift/Events/CommandEvent.php
index 73eb585..73eb585 100644..100755
--- a/h-source/External/swiftmailer/lib/classes/Swift/Events/CommandEvent.php
+++ b/h-source/External/swiftmailer/lib/classes/Swift/Events/CommandEvent.php
diff --git a/h-source/External/swiftmailer/lib/classes/Swift/Events/CommandListener.php b/h-source/External/swiftmailer/lib/classes/Swift/Events/CommandListener.php
index 2fd7117..2fd7117 100644..100755
--- a/h-source/External/swiftmailer/lib/classes/Swift/Events/CommandListener.php
+++ b/h-source/External/swiftmailer/lib/classes/Swift/Events/CommandListener.php
diff --git a/h-source/External/swiftmailer/lib/classes/Swift/Events/Event.php b/h-source/External/swiftmailer/lib/classes/Swift/Events/Event.php
index c6726a7..c6726a7 100644..100755
--- a/h-source/External/swiftmailer/lib/classes/Swift/Events/Event.php
+++ b/h-source/External/swiftmailer/lib/classes/Swift/Events/Event.php
diff --git a/h-source/External/swiftmailer/lib/classes/Swift/Events/EventDispatcher.php b/h-source/External/swiftmailer/lib/classes/Swift/Events/EventDispatcher.php
index aaf1211..aaf1211 100644..100755
--- a/h-source/External/swiftmailer/lib/classes/Swift/Events/EventDispatcher.php
+++ b/h-source/External/swiftmailer/lib/classes/Swift/Events/EventDispatcher.php
diff --git a/h-source/External/swiftmailer/lib/classes/Swift/Events/EventListener.php b/h-source/External/swiftmailer/lib/classes/Swift/Events/EventListener.php
index 00fb799..00fb799 100644..100755
--- a/h-source/External/swiftmailer/lib/classes/Swift/Events/EventListener.php
+++ b/h-source/External/swiftmailer/lib/classes/Swift/Events/EventListener.php
diff --git a/h-source/External/swiftmailer/lib/classes/Swift/Events/EventObject.php b/h-source/External/swiftmailer/lib/classes/Swift/Events/EventObject.php
index 5d494fe..5d494fe 100644..100755
--- a/h-source/External/swiftmailer/lib/classes/Swift/Events/EventObject.php
+++ b/h-source/External/swiftmailer/lib/classes/Swift/Events/EventObject.php
diff --git a/h-source/External/swiftmailer/lib/classes/Swift/Events/ResponseEvent.php b/h-source/External/swiftmailer/lib/classes/Swift/Events/ResponseEvent.php
index addf9e7..addf9e7 100644..100755
--- a/h-source/External/swiftmailer/lib/classes/Swift/Events/ResponseEvent.php
+++ b/h-source/External/swiftmailer/lib/classes/Swift/Events/ResponseEvent.php
diff --git a/h-source/External/swiftmailer/lib/classes/Swift/Events/ResponseListener.php b/h-source/External/swiftmailer/lib/classes/Swift/Events/ResponseListener.php
index 092385b..092385b 100644..100755
--- a/h-source/External/swiftmailer/lib/classes/Swift/Events/ResponseListener.php
+++ b/h-source/External/swiftmailer/lib/classes/Swift/Events/ResponseListener.php
diff --git a/h-source/External/swiftmailer/lib/classes/Swift/Events/SendEvent.php b/h-source/External/swiftmailer/lib/classes/Swift/Events/SendEvent.php
index 49a8351..49a8351 100644..100755
--- a/h-source/External/swiftmailer/lib/classes/Swift/Events/SendEvent.php
+++ b/h-source/External/swiftmailer/lib/classes/Swift/Events/SendEvent.php
diff --git a/h-source/External/swiftmailer/lib/classes/Swift/Events/SendListener.php b/h-source/External/swiftmailer/lib/classes/Swift/Events/SendListener.php
index a8f0cc3..a8f0cc3 100644..100755
--- a/h-source/External/swiftmailer/lib/classes/Swift/Events/SendListener.php
+++ b/h-source/External/swiftmailer/lib/classes/Swift/Events/SendListener.php
diff --git a/h-source/External/swiftmailer/lib/classes/Swift/Events/SimpleEventDispatcher.php b/h-source/External/swiftmailer/lib/classes/Swift/Events/SimpleEventDispatcher.php
index 3e6c0be..3e6c0be 100644..100755
--- a/h-source/External/swiftmailer/lib/classes/Swift/Events/SimpleEventDispatcher.php
+++ b/h-source/External/swiftmailer/lib/classes/Swift/Events/SimpleEventDispatcher.php
diff --git a/h-source/External/swiftmailer/lib/classes/Swift/Events/TransportChangeEvent.php b/h-source/External/swiftmailer/lib/classes/Swift/Events/TransportChangeEvent.php
index f069a4c..f069a4c 100644..100755
--- a/h-source/External/swiftmailer/lib/classes/Swift/Events/TransportChangeEvent.php
+++ b/h-source/External/swiftmailer/lib/classes/Swift/Events/TransportChangeEvent.php
diff --git a/h-source/External/swiftmailer/lib/classes/Swift/Events/TransportChangeListener.php b/h-source/External/swiftmailer/lib/classes/Swift/Events/TransportChangeListener.php
index ba729d0..ba729d0 100644..100755
--- a/h-source/External/swiftmailer/lib/classes/Swift/Events/TransportChangeListener.php
+++ b/h-source/External/swiftmailer/lib/classes/Swift/Events/TransportChangeListener.php
diff --git a/h-source/External/swiftmailer/lib/classes/Swift/Events/TransportExceptionEvent.php b/h-source/External/swiftmailer/lib/classes/Swift/Events/TransportExceptionEvent.php
index a1bf7d2..a1bf7d2 100644..100755
--- a/h-source/External/swiftmailer/lib/classes/Swift/Events/TransportExceptionEvent.php
+++ b/h-source/External/swiftmailer/lib/classes/Swift/Events/TransportExceptionEvent.php
diff --git a/h-source/External/swiftmailer/lib/classes/Swift/Events/TransportExceptionListener.php b/h-source/External/swiftmailer/lib/classes/Swift/Events/TransportExceptionListener.php
index d6dce94..d6dce94 100644..100755
--- a/h-source/External/swiftmailer/lib/classes/Swift/Events/TransportExceptionListener.php
+++ b/h-source/External/swiftmailer/lib/classes/Swift/Events/TransportExceptionListener.php
diff --git a/h-source/External/swiftmailer/lib/classes/Swift/FailoverTransport.php b/h-source/External/swiftmailer/lib/classes/Swift/FailoverTransport.php
index 6e6b7a8..6e6b7a8 100644..100755
--- a/h-source/External/swiftmailer/lib/classes/Swift/FailoverTransport.php
+++ b/h-source/External/swiftmailer/lib/classes/Swift/FailoverTransport.php
diff --git a/h-source/External/swiftmailer/lib/classes/Swift/FileStream.php b/h-source/External/swiftmailer/lib/classes/Swift/FileStream.php
index a7f894d..a7f894d 100644..100755
--- a/h-source/External/swiftmailer/lib/classes/Swift/FileStream.php
+++ b/h-source/External/swiftmailer/lib/classes/Swift/FileStream.php
diff --git a/h-source/External/swiftmailer/lib/classes/Swift/Filterable.php b/h-source/External/swiftmailer/lib/classes/Swift/Filterable.php
index c047967..c047967 100644..100755
--- a/h-source/External/swiftmailer/lib/classes/Swift/Filterable.php
+++ b/h-source/External/swiftmailer/lib/classes/Swift/Filterable.php
diff --git a/h-source/External/swiftmailer/lib/classes/Swift/Image.php b/h-source/External/swiftmailer/lib/classes/Swift/Image.php
index c161d7a..c161d7a 100644..100755
--- a/h-source/External/swiftmailer/lib/classes/Swift/Image.php
+++ b/h-source/External/swiftmailer/lib/classes/Swift/Image.php
diff --git a/h-source/External/swiftmailer/lib/classes/Swift/InputByteStream.php b/h-source/External/swiftmailer/lib/classes/Swift/InputByteStream.php
index e8f45f4..e8f45f4 100644..100755
--- a/h-source/External/swiftmailer/lib/classes/Swift/InputByteStream.php
+++ b/h-source/External/swiftmailer/lib/classes/Swift/InputByteStream.php
diff --git a/h-source/External/swiftmailer/lib/classes/Swift/IoException.php b/h-source/External/swiftmailer/lib/classes/Swift/IoException.php
index 88a5b0d..88a5b0d 100644..100755
--- a/h-source/External/swiftmailer/lib/classes/Swift/IoException.php
+++ b/h-source/External/swiftmailer/lib/classes/Swift/IoException.php
diff --git a/h-source/External/swiftmailer/lib/classes/Swift/KeyCache.php b/h-source/External/swiftmailer/lib/classes/Swift/KeyCache.php
index b942663..b942663 100644..100755
--- a/h-source/External/swiftmailer/lib/classes/Swift/KeyCache.php
+++ b/h-source/External/swiftmailer/lib/classes/Swift/KeyCache.php
diff --git a/h-source/External/swiftmailer/lib/classes/Swift/KeyCache/ArrayKeyCache.php b/h-source/External/swiftmailer/lib/classes/Swift/KeyCache/ArrayKeyCache.php
index fe3b7c9..fe3b7c9 100644..100755
--- a/h-source/External/swiftmailer/lib/classes/Swift/KeyCache/ArrayKeyCache.php
+++ b/h-source/External/swiftmailer/lib/classes/Swift/KeyCache/ArrayKeyCache.php
diff --git a/h-source/External/swiftmailer/lib/classes/Swift/KeyCache/DiskKeyCache.php b/h-source/External/swiftmailer/lib/classes/Swift/KeyCache/DiskKeyCache.php
index 599fd6c..599fd6c 100644..100755
--- a/h-source/External/swiftmailer/lib/classes/Swift/KeyCache/DiskKeyCache.php
+++ b/h-source/External/swiftmailer/lib/classes/Swift/KeyCache/DiskKeyCache.php
diff --git a/h-source/External/swiftmailer/lib/classes/Swift/KeyCache/KeyCacheInputStream.php b/h-source/External/swiftmailer/lib/classes/Swift/KeyCache/KeyCacheInputStream.php
index a1f4440..a1f4440 100644..100755
--- a/h-source/External/swiftmailer/lib/classes/Swift/KeyCache/KeyCacheInputStream.php
+++ b/h-source/External/swiftmailer/lib/classes/Swift/KeyCache/KeyCacheInputStream.php
diff --git a/h-source/External/swiftmailer/lib/classes/Swift/KeyCache/NullKeyCache.php b/h-source/External/swiftmailer/lib/classes/Swift/KeyCache/NullKeyCache.php
index 2646522..2646522 100644..100755
--- a/h-source/External/swiftmailer/lib/classes/Swift/KeyCache/NullKeyCache.php
+++ b/h-source/External/swiftmailer/lib/classes/Swift/KeyCache/NullKeyCache.php
diff --git a/h-source/External/swiftmailer/lib/classes/Swift/KeyCache/SimpleKeyCacheInputStream.php b/h-source/External/swiftmailer/lib/classes/Swift/KeyCache/SimpleKeyCacheInputStream.php
index 87cdced..87cdced 100644..100755
--- a/h-source/External/swiftmailer/lib/classes/Swift/KeyCache/SimpleKeyCacheInputStream.php
+++ b/h-source/External/swiftmailer/lib/classes/Swift/KeyCache/SimpleKeyCacheInputStream.php
diff --git a/h-source/External/swiftmailer/lib/classes/Swift/LoadBalancedTransport.php b/h-source/External/swiftmailer/lib/classes/Swift/LoadBalancedTransport.php
index 14ae292..14ae292 100644..100755
--- a/h-source/External/swiftmailer/lib/classes/Swift/LoadBalancedTransport.php
+++ b/h-source/External/swiftmailer/lib/classes/Swift/LoadBalancedTransport.php
diff --git a/h-source/External/swiftmailer/lib/classes/Swift/MailTransport.php b/h-source/External/swiftmailer/lib/classes/Swift/MailTransport.php
index afe29c6..afe29c6 100644..100755
--- a/h-source/External/swiftmailer/lib/classes/Swift/MailTransport.php
+++ b/h-source/External/swiftmailer/lib/classes/Swift/MailTransport.php
diff --git a/h-source/External/swiftmailer/lib/classes/Swift/Mailer.php b/h-source/External/swiftmailer/lib/classes/Swift/Mailer.php
index c92feb4..c92feb4 100644..100755
--- a/h-source/External/swiftmailer/lib/classes/Swift/Mailer.php
+++ b/h-source/External/swiftmailer/lib/classes/Swift/Mailer.php
diff --git a/h-source/External/swiftmailer/lib/classes/Swift/Mailer/ArrayRecipientIterator.php b/h-source/External/swiftmailer/lib/classes/Swift/Mailer/ArrayRecipientIterator.php
index 65d60c1..65d60c1 100644..100755
--- a/h-source/External/swiftmailer/lib/classes/Swift/Mailer/ArrayRecipientIterator.php
+++ b/h-source/External/swiftmailer/lib/classes/Swift/Mailer/ArrayRecipientIterator.php
diff --git a/h-source/External/swiftmailer/lib/classes/Swift/Mailer/RecipientIterator.php b/h-source/External/swiftmailer/lib/classes/Swift/Mailer/RecipientIterator.php
index 2713841..2713841 100644..100755
--- a/h-source/External/swiftmailer/lib/classes/Swift/Mailer/RecipientIterator.php
+++ b/h-source/External/swiftmailer/lib/classes/Swift/Mailer/RecipientIterator.php
diff --git a/h-source/External/swiftmailer/lib/classes/Swift/Message.php b/h-source/External/swiftmailer/lib/classes/Swift/Message.php
index e8183ea..e8183ea 100644..100755
--- a/h-source/External/swiftmailer/lib/classes/Swift/Message.php
+++ b/h-source/External/swiftmailer/lib/classes/Swift/Message.php
diff --git a/h-source/External/swiftmailer/lib/classes/Swift/Mime/Attachment.php b/h-source/External/swiftmailer/lib/classes/Swift/Mime/Attachment.php
index 25ef68b..25ef68b 100644..100755
--- a/h-source/External/swiftmailer/lib/classes/Swift/Mime/Attachment.php
+++ b/h-source/External/swiftmailer/lib/classes/Swift/Mime/Attachment.php
diff --git a/h-source/External/swiftmailer/lib/classes/Swift/Mime/CharsetObserver.php b/h-source/External/swiftmailer/lib/classes/Swift/Mime/CharsetObserver.php
index c26009f..c26009f 100644..100755
--- a/h-source/External/swiftmailer/lib/classes/Swift/Mime/CharsetObserver.php
+++ b/h-source/External/swiftmailer/lib/classes/Swift/Mime/CharsetObserver.php
diff --git a/h-source/External/swiftmailer/lib/classes/Swift/Mime/ContentEncoder.php b/h-source/External/swiftmailer/lib/classes/Swift/Mime/ContentEncoder.php
index e1c99c5..e1c99c5 100644..100755
--- a/h-source/External/swiftmailer/lib/classes/Swift/Mime/ContentEncoder.php
+++ b/h-source/External/swiftmailer/lib/classes/Swift/Mime/ContentEncoder.php
diff --git a/h-source/External/swiftmailer/lib/classes/Swift/Mime/ContentEncoder/Base64ContentEncoder.php b/h-source/External/swiftmailer/lib/classes/Swift/Mime/ContentEncoder/Base64ContentEncoder.php
index e89938e..e89938e 100644..100755
--- a/h-source/External/swiftmailer/lib/classes/Swift/Mime/ContentEncoder/Base64ContentEncoder.php
+++ b/h-source/External/swiftmailer/lib/classes/Swift/Mime/ContentEncoder/Base64ContentEncoder.php
diff --git a/h-source/External/swiftmailer/lib/classes/Swift/Mime/ContentEncoder/PlainContentEncoder.php b/h-source/External/swiftmailer/lib/classes/Swift/Mime/ContentEncoder/PlainContentEncoder.php
index 4a725d8..4a725d8 100644..100755
--- a/h-source/External/swiftmailer/lib/classes/Swift/Mime/ContentEncoder/PlainContentEncoder.php
+++ b/h-source/External/swiftmailer/lib/classes/Swift/Mime/ContentEncoder/PlainContentEncoder.php
diff --git a/h-source/External/swiftmailer/lib/classes/Swift/Mime/ContentEncoder/QpContentEncoder.php b/h-source/External/swiftmailer/lib/classes/Swift/Mime/ContentEncoder/QpContentEncoder.php
index 3beeb63..3beeb63 100644..100755
--- a/h-source/External/swiftmailer/lib/classes/Swift/Mime/ContentEncoder/QpContentEncoder.php
+++ b/h-source/External/swiftmailer/lib/classes/Swift/Mime/ContentEncoder/QpContentEncoder.php
diff --git a/h-source/External/swiftmailer/lib/classes/Swift/Mime/EmbeddedFile.php b/h-source/External/swiftmailer/lib/classes/Swift/Mime/EmbeddedFile.php
index 983b78d..983b78d 100644..100755
--- a/h-source/External/swiftmailer/lib/classes/Swift/Mime/EmbeddedFile.php
+++ b/h-source/External/swiftmailer/lib/classes/Swift/Mime/EmbeddedFile.php
diff --git a/h-source/External/swiftmailer/lib/classes/Swift/Mime/EncodingObserver.php b/h-source/External/swiftmailer/lib/classes/Swift/Mime/EncodingObserver.php
index 50472db..50472db 100644..100755
--- a/h-source/External/swiftmailer/lib/classes/Swift/Mime/EncodingObserver.php
+++ b/h-source/External/swiftmailer/lib/classes/Swift/Mime/EncodingObserver.php
diff --git a/h-source/External/swiftmailer/lib/classes/Swift/Mime/Header.php b/h-source/External/swiftmailer/lib/classes/Swift/Mime/Header.php
index 38fc40c..38fc40c 100644..100755
--- a/h-source/External/swiftmailer/lib/classes/Swift/Mime/Header.php
+++ b/h-source/External/swiftmailer/lib/classes/Swift/Mime/Header.php
diff --git a/h-source/External/swiftmailer/lib/classes/Swift/Mime/HeaderEncoder.php b/h-source/External/swiftmailer/lib/classes/Swift/Mime/HeaderEncoder.php
index cc70c5f..cc70c5f 100644..100755
--- a/h-source/External/swiftmailer/lib/classes/Swift/Mime/HeaderEncoder.php
+++ b/h-source/External/swiftmailer/lib/classes/Swift/Mime/HeaderEncoder.php
diff --git a/h-source/External/swiftmailer/lib/classes/Swift/Mime/HeaderEncoder/Base64HeaderEncoder.php b/h-source/External/swiftmailer/lib/classes/Swift/Mime/HeaderEncoder/Base64HeaderEncoder.php
index feaba98..feaba98 100644..100755
--- a/h-source/External/swiftmailer/lib/classes/Swift/Mime/HeaderEncoder/Base64HeaderEncoder.php
+++ b/h-source/External/swiftmailer/lib/classes/Swift/Mime/HeaderEncoder/Base64HeaderEncoder.php
diff --git a/h-source/External/swiftmailer/lib/classes/Swift/Mime/HeaderEncoder/QpHeaderEncoder.php b/h-source/External/swiftmailer/lib/classes/Swift/Mime/HeaderEncoder/QpHeaderEncoder.php
index d727da0..d727da0 100644..100755
--- a/h-source/External/swiftmailer/lib/classes/Swift/Mime/HeaderEncoder/QpHeaderEncoder.php
+++ b/h-source/External/swiftmailer/lib/classes/Swift/Mime/HeaderEncoder/QpHeaderEncoder.php
diff --git a/h-source/External/swiftmailer/lib/classes/Swift/Mime/HeaderFactory.php b/h-source/External/swiftmailer/lib/classes/Swift/Mime/HeaderFactory.php
index 83bb35a..83bb35a 100644..100755
--- a/h-source/External/swiftmailer/lib/classes/Swift/Mime/HeaderFactory.php
+++ b/h-source/External/swiftmailer/lib/classes/Swift/Mime/HeaderFactory.php
diff --git a/h-source/External/swiftmailer/lib/classes/Swift/Mime/HeaderSet.php b/h-source/External/swiftmailer/lib/classes/Swift/Mime/HeaderSet.php
index 81e7a97..81e7a97 100644..100755
--- a/h-source/External/swiftmailer/lib/classes/Swift/Mime/HeaderSet.php
+++ b/h-source/External/swiftmailer/lib/classes/Swift/Mime/HeaderSet.php
diff --git a/h-source/External/swiftmailer/lib/classes/Swift/Mime/Headers/AbstractHeader.php b/h-source/External/swiftmailer/lib/classes/Swift/Mime/Headers/AbstractHeader.php
index c3049c2..c3049c2 100644..100755
--- a/h-source/External/swiftmailer/lib/classes/Swift/Mime/Headers/AbstractHeader.php
+++ b/h-source/External/swiftmailer/lib/classes/Swift/Mime/Headers/AbstractHeader.php
diff --git a/h-source/External/swiftmailer/lib/classes/Swift/Mime/Headers/DateHeader.php b/h-source/External/swiftmailer/lib/classes/Swift/Mime/Headers/DateHeader.php
index 598c0c5..598c0c5 100644..100755
--- a/h-source/External/swiftmailer/lib/classes/Swift/Mime/Headers/DateHeader.php
+++ b/h-source/External/swiftmailer/lib/classes/Swift/Mime/Headers/DateHeader.php
diff --git a/h-source/External/swiftmailer/lib/classes/Swift/Mime/Headers/IdentificationHeader.php b/h-source/External/swiftmailer/lib/classes/Swift/Mime/Headers/IdentificationHeader.php
index 55ff737..55ff737 100644..100755
--- a/h-source/External/swiftmailer/lib/classes/Swift/Mime/Headers/IdentificationHeader.php
+++ b/h-source/External/swiftmailer/lib/classes/Swift/Mime/Headers/IdentificationHeader.php
diff --git a/h-source/External/swiftmailer/lib/classes/Swift/Mime/Headers/MailboxHeader.php b/h-source/External/swiftmailer/lib/classes/Swift/Mime/Headers/MailboxHeader.php
index 77d3bba..77d3bba 100644..100755
--- a/h-source/External/swiftmailer/lib/classes/Swift/Mime/Headers/MailboxHeader.php
+++ b/h-source/External/swiftmailer/lib/classes/Swift/Mime/Headers/MailboxHeader.php
diff --git a/h-source/External/swiftmailer/lib/classes/Swift/Mime/Headers/ParameterizedHeader.php b/h-source/External/swiftmailer/lib/classes/Swift/Mime/Headers/ParameterizedHeader.php
index 974b44e..974b44e 100644..100755
--- a/h-source/External/swiftmailer/lib/classes/Swift/Mime/Headers/ParameterizedHeader.php
+++ b/h-source/External/swiftmailer/lib/classes/Swift/Mime/Headers/ParameterizedHeader.php
diff --git a/h-source/External/swiftmailer/lib/classes/Swift/Mime/Headers/PathHeader.php b/h-source/External/swiftmailer/lib/classes/Swift/Mime/Headers/PathHeader.php
index 0a8a100..0a8a100 100644..100755
--- a/h-source/External/swiftmailer/lib/classes/Swift/Mime/Headers/PathHeader.php
+++ b/h-source/External/swiftmailer/lib/classes/Swift/Mime/Headers/PathHeader.php
diff --git a/h-source/External/swiftmailer/lib/classes/Swift/Mime/Headers/UnstructuredHeader.php b/h-source/External/swiftmailer/lib/classes/Swift/Mime/Headers/UnstructuredHeader.php
index fdcc21e..fdcc21e 100644..100755
--- a/h-source/External/swiftmailer/lib/classes/Swift/Mime/Headers/UnstructuredHeader.php
+++ b/h-source/External/swiftmailer/lib/classes/Swift/Mime/Headers/UnstructuredHeader.php
diff --git a/h-source/External/swiftmailer/lib/classes/Swift/Mime/Message.php b/h-source/External/swiftmailer/lib/classes/Swift/Mime/Message.php
index 0496c08..0496c08 100644..100755
--- a/h-source/External/swiftmailer/lib/classes/Swift/Mime/Message.php
+++ b/h-source/External/swiftmailer/lib/classes/Swift/Mime/Message.php
diff --git a/h-source/External/swiftmailer/lib/classes/Swift/Mime/MimeEntity.php b/h-source/External/swiftmailer/lib/classes/Swift/Mime/MimeEntity.php
index 2b08009..2b08009 100644..100755
--- a/h-source/External/swiftmailer/lib/classes/Swift/Mime/MimeEntity.php
+++ b/h-source/External/swiftmailer/lib/classes/Swift/Mime/MimeEntity.php
diff --git a/h-source/External/swiftmailer/lib/classes/Swift/Mime/MimePart.php b/h-source/External/swiftmailer/lib/classes/Swift/Mime/MimePart.php
index 78c6fe0..78c6fe0 100644..100755
--- a/h-source/External/swiftmailer/lib/classes/Swift/Mime/MimePart.php
+++ b/h-source/External/swiftmailer/lib/classes/Swift/Mime/MimePart.php
diff --git a/h-source/External/swiftmailer/lib/classes/Swift/Mime/ParameterizedHeader.php b/h-source/External/swiftmailer/lib/classes/Swift/Mime/ParameterizedHeader.php
index da65ca9..da65ca9 100644..100755
--- a/h-source/External/swiftmailer/lib/classes/Swift/Mime/ParameterizedHeader.php
+++ b/h-source/External/swiftmailer/lib/classes/Swift/Mime/ParameterizedHeader.php
diff --git a/h-source/External/swiftmailer/lib/classes/Swift/Mime/SimpleHeaderFactory.php b/h-source/External/swiftmailer/lib/classes/Swift/Mime/SimpleHeaderFactory.php
index 6954ac5..6954ac5 100644..100755
--- a/h-source/External/swiftmailer/lib/classes/Swift/Mime/SimpleHeaderFactory.php
+++ b/h-source/External/swiftmailer/lib/classes/Swift/Mime/SimpleHeaderFactory.php
diff --git a/h-source/External/swiftmailer/lib/classes/Swift/Mime/SimpleHeaderSet.php b/h-source/External/swiftmailer/lib/classes/Swift/Mime/SimpleHeaderSet.php
index eeb0221..eeb0221 100644..100755
--- a/h-source/External/swiftmailer/lib/classes/Swift/Mime/SimpleHeaderSet.php
+++ b/h-source/External/swiftmailer/lib/classes/Swift/Mime/SimpleHeaderSet.php
diff --git a/h-source/External/swiftmailer/lib/classes/Swift/Mime/SimpleMessage.php b/h-source/External/swiftmailer/lib/classes/Swift/Mime/SimpleMessage.php
index bbe1e8f..bbe1e8f 100644..100755
--- a/h-source/External/swiftmailer/lib/classes/Swift/Mime/SimpleMessage.php
+++ b/h-source/External/swiftmailer/lib/classes/Swift/Mime/SimpleMessage.php
diff --git a/h-source/External/swiftmailer/lib/classes/Swift/Mime/SimpleMimeEntity.php b/h-source/External/swiftmailer/lib/classes/Swift/Mime/SimpleMimeEntity.php
index 1615822..1615822 100644..100755
--- a/h-source/External/swiftmailer/lib/classes/Swift/Mime/SimpleMimeEntity.php
+++ b/h-source/External/swiftmailer/lib/classes/Swift/Mime/SimpleMimeEntity.php
diff --git a/h-source/External/swiftmailer/lib/classes/Swift/MimePart.php b/h-source/External/swiftmailer/lib/classes/Swift/MimePart.php
index 60b6d56..60b6d56 100644..100755
--- a/h-source/External/swiftmailer/lib/classes/Swift/MimePart.php
+++ b/h-source/External/swiftmailer/lib/classes/Swift/MimePart.php
diff --git a/h-source/External/swiftmailer/lib/classes/Swift/OutputByteStream.php b/h-source/External/swiftmailer/lib/classes/Swift/OutputByteStream.php
index 951b838..951b838 100644..100755
--- a/h-source/External/swiftmailer/lib/classes/Swift/OutputByteStream.php
+++ b/h-source/External/swiftmailer/lib/classes/Swift/OutputByteStream.php
diff --git a/h-source/External/swiftmailer/lib/classes/Swift/Plugins/AntiFloodPlugin.php b/h-source/External/swiftmailer/lib/classes/Swift/Plugins/AntiFloodPlugin.php
index 46a7f44..46a7f44 100644..100755
--- a/h-source/External/swiftmailer/lib/classes/Swift/Plugins/AntiFloodPlugin.php
+++ b/h-source/External/swiftmailer/lib/classes/Swift/Plugins/AntiFloodPlugin.php
diff --git a/h-source/External/swiftmailer/lib/classes/Swift/Plugins/BandwidthMonitorPlugin.php b/h-source/External/swiftmailer/lib/classes/Swift/Plugins/BandwidthMonitorPlugin.php
index 501cd80..501cd80 100644..100755
--- a/h-source/External/swiftmailer/lib/classes/Swift/Plugins/BandwidthMonitorPlugin.php
+++ b/h-source/External/swiftmailer/lib/classes/Swift/Plugins/BandwidthMonitorPlugin.php
diff --git a/h-source/External/swiftmailer/lib/classes/Swift/Plugins/Decorator/Replacements.php b/h-source/External/swiftmailer/lib/classes/Swift/Plugins/Decorator/Replacements.php
index 9735d0a..9735d0a 100644..100755
--- a/h-source/External/swiftmailer/lib/classes/Swift/Plugins/Decorator/Replacements.php
+++ b/h-source/External/swiftmailer/lib/classes/Swift/Plugins/Decorator/Replacements.php
diff --git a/h-source/External/swiftmailer/lib/classes/Swift/Plugins/DecoratorPlugin.php b/h-source/External/swiftmailer/lib/classes/Swift/Plugins/DecoratorPlugin.php
index da1a307..da1a307 100644..100755
--- a/h-source/External/swiftmailer/lib/classes/Swift/Plugins/DecoratorPlugin.php
+++ b/h-source/External/swiftmailer/lib/classes/Swift/Plugins/DecoratorPlugin.php
diff --git a/h-source/External/swiftmailer/lib/classes/Swift/Plugins/Logger.php b/h-source/External/swiftmailer/lib/classes/Swift/Plugins/Logger.php
index 9864da0..9864da0 100644..100755
--- a/h-source/External/swiftmailer/lib/classes/Swift/Plugins/Logger.php
+++ b/h-source/External/swiftmailer/lib/classes/Swift/Plugins/Logger.php
diff --git a/h-source/External/swiftmailer/lib/classes/Swift/Plugins/LoggerPlugin.php b/h-source/External/swiftmailer/lib/classes/Swift/Plugins/LoggerPlugin.php
index d595f26..d595f26 100644..100755
--- a/h-source/External/swiftmailer/lib/classes/Swift/Plugins/LoggerPlugin.php
+++ b/h-source/External/swiftmailer/lib/classes/Swift/Plugins/LoggerPlugin.php
diff --git a/h-source/External/swiftmailer/lib/classes/Swift/Plugins/Loggers/ArrayLogger.php b/h-source/External/swiftmailer/lib/classes/Swift/Plugins/Loggers/ArrayLogger.php
index 930eca2..930eca2 100644..100755
--- a/h-source/External/swiftmailer/lib/classes/Swift/Plugins/Loggers/ArrayLogger.php
+++ b/h-source/External/swiftmailer/lib/classes/Swift/Plugins/Loggers/ArrayLogger.php
diff --git a/h-source/External/swiftmailer/lib/classes/Swift/Plugins/Loggers/EchoLogger.php b/h-source/External/swiftmailer/lib/classes/Swift/Plugins/Loggers/EchoLogger.php
index 83dd54b..83dd54b 100644..100755
--- a/h-source/External/swiftmailer/lib/classes/Swift/Plugins/Loggers/EchoLogger.php
+++ b/h-source/External/swiftmailer/lib/classes/Swift/Plugins/Loggers/EchoLogger.php
diff --git a/h-source/External/swiftmailer/lib/classes/Swift/Plugins/Pop/Pop3Connection.php b/h-source/External/swiftmailer/lib/classes/Swift/Plugins/Pop/Pop3Connection.php
index 1c96dcf..1c96dcf 100644..100755
--- a/h-source/External/swiftmailer/lib/classes/Swift/Plugins/Pop/Pop3Connection.php
+++ b/h-source/External/swiftmailer/lib/classes/Swift/Plugins/Pop/Pop3Connection.php
diff --git a/h-source/External/swiftmailer/lib/classes/Swift/Plugins/Pop/Pop3Exception.php b/h-source/External/swiftmailer/lib/classes/Swift/Plugins/Pop/Pop3Exception.php
index e0205f4..e0205f4 100644..100755
--- a/h-source/External/swiftmailer/lib/classes/Swift/Plugins/Pop/Pop3Exception.php
+++ b/h-source/External/swiftmailer/lib/classes/Swift/Plugins/Pop/Pop3Exception.php
diff --git a/h-source/External/swiftmailer/lib/classes/Swift/Plugins/PopBeforeSmtpPlugin.php b/h-source/External/swiftmailer/lib/classes/Swift/Plugins/PopBeforeSmtpPlugin.php
index fd1cf46..fd1cf46 100644..100755
--- a/h-source/External/swiftmailer/lib/classes/Swift/Plugins/PopBeforeSmtpPlugin.php
+++ b/h-source/External/swiftmailer/lib/classes/Swift/Plugins/PopBeforeSmtpPlugin.php
diff --git a/h-source/External/swiftmailer/lib/classes/Swift/Plugins/Reporter.php b/h-source/External/swiftmailer/lib/classes/Swift/Plugins/Reporter.php
index 00d5765..00d5765 100644..100755
--- a/h-source/External/swiftmailer/lib/classes/Swift/Plugins/Reporter.php
+++ b/h-source/External/swiftmailer/lib/classes/Swift/Plugins/Reporter.php
diff --git a/h-source/External/swiftmailer/lib/classes/Swift/Plugins/ReporterPlugin.php b/h-source/External/swiftmailer/lib/classes/Swift/Plugins/ReporterPlugin.php
index 1beac5b..1beac5b 100644..100755
--- a/h-source/External/swiftmailer/lib/classes/Swift/Plugins/ReporterPlugin.php
+++ b/h-source/External/swiftmailer/lib/classes/Swift/Plugins/ReporterPlugin.php
diff --git a/h-source/External/swiftmailer/lib/classes/Swift/Plugins/Reporters/HitReporter.php b/h-source/External/swiftmailer/lib/classes/Swift/Plugins/Reporters/HitReporter.php
index 0022f5e..0022f5e 100644..100755
--- a/h-source/External/swiftmailer/lib/classes/Swift/Plugins/Reporters/HitReporter.php
+++ b/h-source/External/swiftmailer/lib/classes/Swift/Plugins/Reporters/HitReporter.php
diff --git a/h-source/External/swiftmailer/lib/classes/Swift/Plugins/Reporters/HtmlReporter.php b/h-source/External/swiftmailer/lib/classes/Swift/Plugins/Reporters/HtmlReporter.php
index 7370078..7370078 100644..100755
--- a/h-source/External/swiftmailer/lib/classes/Swift/Plugins/Reporters/HtmlReporter.php
+++ b/h-source/External/swiftmailer/lib/classes/Swift/Plugins/Reporters/HtmlReporter.php
diff --git a/h-source/External/swiftmailer/lib/classes/Swift/Plugins/Sleeper.php b/h-source/External/swiftmailer/lib/classes/Swift/Plugins/Sleeper.php
index 148cbd3..148cbd3 100644..100755
--- a/h-source/External/swiftmailer/lib/classes/Swift/Plugins/Sleeper.php
+++ b/h-source/External/swiftmailer/lib/classes/Swift/Plugins/Sleeper.php
diff --git a/h-source/External/swiftmailer/lib/classes/Swift/Plugins/ThrottlerPlugin.php b/h-source/External/swiftmailer/lib/classes/Swift/Plugins/ThrottlerPlugin.php
index 43bb1f4..43bb1f4 100644..100755
--- a/h-source/External/swiftmailer/lib/classes/Swift/Plugins/ThrottlerPlugin.php
+++ b/h-source/External/swiftmailer/lib/classes/Swift/Plugins/ThrottlerPlugin.php
diff --git a/h-source/External/swiftmailer/lib/classes/Swift/Plugins/Timer.php b/h-source/External/swiftmailer/lib/classes/Swift/Plugins/Timer.php
index 92207bf..92207bf 100644..100755
--- a/h-source/External/swiftmailer/lib/classes/Swift/Plugins/Timer.php
+++ b/h-source/External/swiftmailer/lib/classes/Swift/Plugins/Timer.php
diff --git a/h-source/External/swiftmailer/lib/classes/Swift/Preferences.php b/h-source/External/swiftmailer/lib/classes/Swift/Preferences.php
index 20a2e5f..20a2e5f 100644..100755
--- a/h-source/External/swiftmailer/lib/classes/Swift/Preferences.php
+++ b/h-source/External/swiftmailer/lib/classes/Swift/Preferences.php
diff --git a/h-source/External/swiftmailer/lib/classes/Swift/ReplacementFilterFactory.php b/h-source/External/swiftmailer/lib/classes/Swift/ReplacementFilterFactory.php
index db29e6d..db29e6d 100644..100755
--- a/h-source/External/swiftmailer/lib/classes/Swift/ReplacementFilterFactory.php
+++ b/h-source/External/swiftmailer/lib/classes/Swift/ReplacementFilterFactory.php
diff --git a/h-source/External/swiftmailer/lib/classes/Swift/RfcComplianceException.php b/h-source/External/swiftmailer/lib/classes/Swift/RfcComplianceException.php
index 5bb394b..5bb394b 100644..100755
--- a/h-source/External/swiftmailer/lib/classes/Swift/RfcComplianceException.php
+++ b/h-source/External/swiftmailer/lib/classes/Swift/RfcComplianceException.php
diff --git a/h-source/External/swiftmailer/lib/classes/Swift/SendmailTransport.php b/h-source/External/swiftmailer/lib/classes/Swift/SendmailTransport.php
index 60a7000..60a7000 100644..100755
--- a/h-source/External/swiftmailer/lib/classes/Swift/SendmailTransport.php
+++ b/h-source/External/swiftmailer/lib/classes/Swift/SendmailTransport.php
diff --git a/h-source/External/swiftmailer/lib/classes/Swift/SmtpTransport.php b/h-source/External/swiftmailer/lib/classes/Swift/SmtpTransport.php
index 65180d5..65180d5 100644..100755
--- a/h-source/External/swiftmailer/lib/classes/Swift/SmtpTransport.php
+++ b/h-source/External/swiftmailer/lib/classes/Swift/SmtpTransport.php
diff --git a/h-source/External/swiftmailer/lib/classes/Swift/StreamFilter.php b/h-source/External/swiftmailer/lib/classes/Swift/StreamFilter.php
index 6c262ce..6c262ce 100644..100755
--- a/h-source/External/swiftmailer/lib/classes/Swift/StreamFilter.php
+++ b/h-source/External/swiftmailer/lib/classes/Swift/StreamFilter.php
diff --git a/h-source/External/swiftmailer/lib/classes/Swift/StreamFilters/ByteArrayReplacementFilter.php b/h-source/External/swiftmailer/lib/classes/Swift/StreamFilters/ByteArrayReplacementFilter.php
index 2df52be..2df52be 100644..100755
--- a/h-source/External/swiftmailer/lib/classes/Swift/StreamFilters/ByteArrayReplacementFilter.php
+++ b/h-source/External/swiftmailer/lib/classes/Swift/StreamFilters/ByteArrayReplacementFilter.php
diff --git a/h-source/External/swiftmailer/lib/classes/Swift/StreamFilters/StringReplacementFilter.php b/h-source/External/swiftmailer/lib/classes/Swift/StreamFilters/StringReplacementFilter.php
index 9ab6c30..9ab6c30 100644..100755
--- a/h-source/External/swiftmailer/lib/classes/Swift/StreamFilters/StringReplacementFilter.php
+++ b/h-source/External/swiftmailer/lib/classes/Swift/StreamFilters/StringReplacementFilter.php
diff --git a/h-source/External/swiftmailer/lib/classes/Swift/StreamFilters/StringReplacementFilterFactory.php b/h-source/External/swiftmailer/lib/classes/Swift/StreamFilters/StringReplacementFilterFactory.php
index fcd4b83..fcd4b83 100644..100755
--- a/h-source/External/swiftmailer/lib/classes/Swift/StreamFilters/StringReplacementFilterFactory.php
+++ b/h-source/External/swiftmailer/lib/classes/Swift/StreamFilters/StringReplacementFilterFactory.php
diff --git a/h-source/External/swiftmailer/lib/classes/Swift/SwiftException.php b/h-source/External/swiftmailer/lib/classes/Swift/SwiftException.php
index bd3b656..bd3b656 100644..100755
--- a/h-source/External/swiftmailer/lib/classes/Swift/SwiftException.php
+++ b/h-source/External/swiftmailer/lib/classes/Swift/SwiftException.php
diff --git a/h-source/External/swiftmailer/lib/classes/Swift/Transport.php b/h-source/External/swiftmailer/lib/classes/Swift/Transport.php
index 9b54752..9b54752 100644..100755
--- a/h-source/External/swiftmailer/lib/classes/Swift/Transport.php
+++ b/h-source/External/swiftmailer/lib/classes/Swift/Transport.php
diff --git a/h-source/External/swiftmailer/lib/classes/Swift/Transport/AbstractSmtpTransport.php b/h-source/External/swiftmailer/lib/classes/Swift/Transport/AbstractSmtpTransport.php
index 3329d34..3329d34 100644..100755
--- a/h-source/External/swiftmailer/lib/classes/Swift/Transport/AbstractSmtpTransport.php
+++ b/h-source/External/swiftmailer/lib/classes/Swift/Transport/AbstractSmtpTransport.php
diff --git a/h-source/External/swiftmailer/lib/classes/Swift/Transport/Esmtp/Auth/CramMd5Authenticator.php b/h-source/External/swiftmailer/lib/classes/Swift/Transport/Esmtp/Auth/CramMd5Authenticator.php
index 4c7e0f2..4c7e0f2 100644..100755
--- a/h-source/External/swiftmailer/lib/classes/Swift/Transport/Esmtp/Auth/CramMd5Authenticator.php
+++ b/h-source/External/swiftmailer/lib/classes/Swift/Transport/Esmtp/Auth/CramMd5Authenticator.php
diff --git a/h-source/External/swiftmailer/lib/classes/Swift/Transport/Esmtp/Auth/LoginAuthenticator.php b/h-source/External/swiftmailer/lib/classes/Swift/Transport/Esmtp/Auth/LoginAuthenticator.php
index bd22617..bd22617 100644..100755
--- a/h-source/External/swiftmailer/lib/classes/Swift/Transport/Esmtp/Auth/LoginAuthenticator.php
+++ b/h-source/External/swiftmailer/lib/classes/Swift/Transport/Esmtp/Auth/LoginAuthenticator.php
diff --git a/h-source/External/swiftmailer/lib/classes/Swift/Transport/Esmtp/Auth/PlainAuthenticator.php b/h-source/External/swiftmailer/lib/classes/Swift/Transport/Esmtp/Auth/PlainAuthenticator.php
index ddd8094..ddd8094 100644..100755
--- a/h-source/External/swiftmailer/lib/classes/Swift/Transport/Esmtp/Auth/PlainAuthenticator.php
+++ b/h-source/External/swiftmailer/lib/classes/Swift/Transport/Esmtp/Auth/PlainAuthenticator.php
diff --git a/h-source/External/swiftmailer/lib/classes/Swift/Transport/Esmtp/AuthHandler.php b/h-source/External/swiftmailer/lib/classes/Swift/Transport/Esmtp/AuthHandler.php
index a223169..a223169 100644..100755
--- a/h-source/External/swiftmailer/lib/classes/Swift/Transport/Esmtp/AuthHandler.php
+++ b/h-source/External/swiftmailer/lib/classes/Swift/Transport/Esmtp/AuthHandler.php
diff --git a/h-source/External/swiftmailer/lib/classes/Swift/Transport/Esmtp/Authenticator.php b/h-source/External/swiftmailer/lib/classes/Swift/Transport/Esmtp/Authenticator.php
index bf166d3..bf166d3 100644..100755
--- a/h-source/External/swiftmailer/lib/classes/Swift/Transport/Esmtp/Authenticator.php
+++ b/h-source/External/swiftmailer/lib/classes/Swift/Transport/Esmtp/Authenticator.php
diff --git a/h-source/External/swiftmailer/lib/classes/Swift/Transport/EsmtpHandler.php b/h-source/External/swiftmailer/lib/classes/Swift/Transport/EsmtpHandler.php
index e96f95f..e96f95f 100644..100755
--- a/h-source/External/swiftmailer/lib/classes/Swift/Transport/EsmtpHandler.php
+++ b/h-source/External/swiftmailer/lib/classes/Swift/Transport/EsmtpHandler.php
diff --git a/h-source/External/swiftmailer/lib/classes/Swift/Transport/EsmtpTransport.php b/h-source/External/swiftmailer/lib/classes/Swift/Transport/EsmtpTransport.php
index c7833c3..c7833c3 100644..100755
--- a/h-source/External/swiftmailer/lib/classes/Swift/Transport/EsmtpTransport.php
+++ b/h-source/External/swiftmailer/lib/classes/Swift/Transport/EsmtpTransport.php
diff --git a/h-source/External/swiftmailer/lib/classes/Swift/Transport/FailoverTransport.php b/h-source/External/swiftmailer/lib/classes/Swift/Transport/FailoverTransport.php
index e62491c..e62491c 100644..100755
--- a/h-source/External/swiftmailer/lib/classes/Swift/Transport/FailoverTransport.php
+++ b/h-source/External/swiftmailer/lib/classes/Swift/Transport/FailoverTransport.php
diff --git a/h-source/External/swiftmailer/lib/classes/Swift/Transport/IoBuffer.php b/h-source/External/swiftmailer/lib/classes/Swift/Transport/IoBuffer.php
index ac66ef0..ac66ef0 100644..100755
--- a/h-source/External/swiftmailer/lib/classes/Swift/Transport/IoBuffer.php
+++ b/h-source/External/swiftmailer/lib/classes/Swift/Transport/IoBuffer.php
diff --git a/h-source/External/swiftmailer/lib/classes/Swift/Transport/LoadBalancedTransport.php b/h-source/External/swiftmailer/lib/classes/Swift/Transport/LoadBalancedTransport.php
index 367981b..367981b 100644..100755
--- a/h-source/External/swiftmailer/lib/classes/Swift/Transport/LoadBalancedTransport.php
+++ b/h-source/External/swiftmailer/lib/classes/Swift/Transport/LoadBalancedTransport.php
diff --git a/h-source/External/swiftmailer/lib/classes/Swift/Transport/MailInvoker.php b/h-source/External/swiftmailer/lib/classes/Swift/Transport/MailInvoker.php
index dda882f..dda882f 100644..100755
--- a/h-source/External/swiftmailer/lib/classes/Swift/Transport/MailInvoker.php
+++ b/h-source/External/swiftmailer/lib/classes/Swift/Transport/MailInvoker.php
diff --git a/h-source/External/swiftmailer/lib/classes/Swift/Transport/MailTransport.php b/h-source/External/swiftmailer/lib/classes/Swift/Transport/MailTransport.php
index eca59e1..eca59e1 100644..100755
--- a/h-source/External/swiftmailer/lib/classes/Swift/Transport/MailTransport.php
+++ b/h-source/External/swiftmailer/lib/classes/Swift/Transport/MailTransport.php
diff --git a/h-source/External/swiftmailer/lib/classes/Swift/Transport/SendmailTransport.php b/h-source/External/swiftmailer/lib/classes/Swift/Transport/SendmailTransport.php
index aae8bde..aae8bde 100644..100755
--- a/h-source/External/swiftmailer/lib/classes/Swift/Transport/SendmailTransport.php
+++ b/h-source/External/swiftmailer/lib/classes/Swift/Transport/SendmailTransport.php
diff --git a/h-source/External/swiftmailer/lib/classes/Swift/Transport/SimpleMailInvoker.php b/h-source/External/swiftmailer/lib/classes/Swift/Transport/SimpleMailInvoker.php
index 271ba84..271ba84 100644..100755
--- a/h-source/External/swiftmailer/lib/classes/Swift/Transport/SimpleMailInvoker.php
+++ b/h-source/External/swiftmailer/lib/classes/Swift/Transport/SimpleMailInvoker.php
diff --git a/h-source/External/swiftmailer/lib/classes/Swift/Transport/SmtpAgent.php b/h-source/External/swiftmailer/lib/classes/Swift/Transport/SmtpAgent.php
index ee9b8ed..ee9b8ed 100644..100755
--- a/h-source/External/swiftmailer/lib/classes/Swift/Transport/SmtpAgent.php
+++ b/h-source/External/swiftmailer/lib/classes/Swift/Transport/SmtpAgent.php
diff --git a/h-source/External/swiftmailer/lib/classes/Swift/Transport/StreamBuffer.php b/h-source/External/swiftmailer/lib/classes/Swift/Transport/StreamBuffer.php
index 1a20b0c..01ae8a5 100644..100755
--- a/h-source/External/swiftmailer/lib/classes/Swift/Transport/StreamBuffer.php
+++ b/h-source/External/swiftmailer/lib/classes/Swift/Transport/StreamBuffer.php
@@ -23,7 +23,6 @@ class Swift_Transport_StreamBuffer
extends Swift_ByteStream_AbstractFilterableInputStream
implements Swift_Transport_IoBuffer
{
- private $_sequence;
/** A primary socket */
private $_stream;
diff --git a/h-source/External/swiftmailer/lib/classes/Swift/TransportException.php b/h-source/External/swiftmailer/lib/classes/Swift/TransportException.php
index b7cd658..b7cd658 100644..100755
--- a/h-source/External/swiftmailer/lib/classes/Swift/TransportException.php
+++ b/h-source/External/swiftmailer/lib/classes/Swift/TransportException.php
diff --git a/h-source/External/swiftmailer/lib/dependency_maps/cache_deps.php b/h-source/External/swiftmailer/lib/dependency_maps/cache_deps.php
index 6058206..6058206 100644..100755
--- a/h-source/External/swiftmailer/lib/dependency_maps/cache_deps.php
+++ b/h-source/External/swiftmailer/lib/dependency_maps/cache_deps.php
diff --git a/h-source/External/swiftmailer/lib/dependency_maps/mime_deps.php b/h-source/External/swiftmailer/lib/dependency_maps/mime_deps.php
index e03927a..e03927a 100644..100755
--- a/h-source/External/swiftmailer/lib/dependency_maps/mime_deps.php
+++ b/h-source/External/swiftmailer/lib/dependency_maps/mime_deps.php
diff --git a/h-source/External/swiftmailer/lib/dependency_maps/transport_deps.php b/h-source/External/swiftmailer/lib/dependency_maps/transport_deps.php
index 32881d6..32881d6 100644..100755
--- a/h-source/External/swiftmailer/lib/dependency_maps/transport_deps.php
+++ b/h-source/External/swiftmailer/lib/dependency_maps/transport_deps.php
diff --git a/h-source/External/swiftmailer/lib/mime_types.php b/h-source/External/swiftmailer/lib/mime_types.php
index 65c9aa0..65c9aa0 100644..100755
--- a/h-source/External/swiftmailer/lib/mime_types.php
+++ b/h-source/External/swiftmailer/lib/mime_types.php
diff --git a/h-source/External/swiftmailer/lib/preferences.php b/h-source/External/swiftmailer/lib/preferences.php
index 0b9e4b1..0b9e4b1 100644..100755
--- a/h-source/External/swiftmailer/lib/preferences.php
+++ b/h-source/External/swiftmailer/lib/preferences.php
diff --git a/h-source/External/swiftmailer/lib/swift_init.php b/h-source/External/swiftmailer/lib/swift_init.php
index fe624a9..fe624a9 100644..100755
--- a/h-source/External/swiftmailer/lib/swift_init.php
+++ b/h-source/External/swiftmailer/lib/swift_init.php
diff --git a/h-source/External/swiftmailer/lib/swift_required.php b/h-source/External/swiftmailer/lib/swift_required.php
index ad1a4ad..ad1a4ad 100644..100755
--- a/h-source/External/swiftmailer/lib/swift_required.php
+++ b/h-source/External/swiftmailer/lib/swift_required.php
diff --git a/h-source/External/swiftmailer/lib/swift_required_pear.php b/h-source/External/swiftmailer/lib/swift_required_pear.php
index 20a6159..20a6159 100644..100755
--- a/h-source/External/swiftmailer/lib/swift_required_pear.php
+++ b/h-source/External/swiftmailer/lib/swift_required_pear.php
diff --git a/h-source/Img/Acun/book.png b/h-source/Img/Acun/book.png
new file mode 100755
index 0000000..0245944
--- /dev/null
+++ b/h-source/Img/Acun/book.png
Binary files differ
diff --git a/h-source/Img/Acun/document_properties.png b/h-source/Img/Acun/document_properties.png
new file mode 100755
index 0000000..bf4686f
--- /dev/null
+++ b/h-source/Img/Acun/document_properties.png
Binary files differ
diff --git a/h-source/Img/Acun/filenew.png b/h-source/Img/Acun/filenew.png
new file mode 100755
index 0000000..66d34b3
--- /dev/null
+++ b/h-source/Img/Acun/filenew.png
Binary files differ
diff --git a/h-source/Img/Acun/go_previous.png b/h-source/Img/Acun/go_previous.png
new file mode 100755
index 0000000..39685ad
--- /dev/null
+++ b/h-source/Img/Acun/go_previous.png
Binary files differ
diff --git a/h-source/Img/Acun/help_hint.png b/h-source/Img/Acun/help_hint.png
new file mode 100644
index 0000000..aed2f70
--- /dev/null
+++ b/h-source/Img/Acun/help_hint.png
Binary files differ
diff --git a/h-source/Img/Acun/note.png b/h-source/Img/Acun/note.png
new file mode 100755
index 0000000..5b4b248
--- /dev/null
+++ b/h-source/Img/Acun/note.png
Binary files differ
diff --git a/h-source/Img/Crystal/1282042718_hardware.png b/h-source/Img/Crystal/1282042718_hardware.png
new file mode 100644
index 0000000..b971732
--- /dev/null
+++ b/h-source/Img/Crystal/1282042718_hardware.png
Binary files differ
diff --git a/h-source/Img/Crystal/1282042976_hardware.png b/h-source/Img/Crystal/1282042976_hardware.png
new file mode 100644
index 0000000..efffd46
--- /dev/null
+++ b/h-source/Img/Crystal/1282042976_hardware.png
Binary files differ
diff --git a/h-source/Img/Crystal/agt_forward.png b/h-source/Img/Crystal/agt_forward.png
new file mode 100755
index 0000000..13a59ad
--- /dev/null
+++ b/h-source/Img/Crystal/agt_forward.png
Binary files differ
diff --git a/h-source/Img/Crystal/button_cancel.png b/h-source/Img/Crystal/button_cancel.png
new file mode 100755
index 0000000..e2db55f
--- /dev/null
+++ b/h-source/Img/Crystal/button_cancel.png
Binary files differ
diff --git a/h-source/Img/Crystal/button_ok.png b/h-source/Img/Crystal/button_ok.png
new file mode 100755
index 0000000..2f86f0a
--- /dev/null
+++ b/h-source/Img/Crystal/button_ok.png
Binary files differ
diff --git a/h-source/Img/Crystal/cam_mount-22.png b/h-source/Img/Crystal/cam_mount-22.png
new file mode 100755
index 0000000..d4d2595
--- /dev/null
+++ b/h-source/Img/Crystal/cam_mount-22.png
Binary files differ
diff --git a/h-source/Img/Crystal/cam_mount.png b/h-source/Img/Crystal/cam_mount.png
new file mode 100755
index 0000000..2da5732
--- /dev/null
+++ b/h-source/Img/Crystal/cam_mount.png
Binary files differ
diff --git a/h-source/Img/Crystal/clear.png b/h-source/Img/Crystal/clear.png
new file mode 100755
index 0000000..4ad6a58
--- /dev/null
+++ b/h-source/Img/Crystal/clear.png
Binary files differ
diff --git a/h-source/Img/Crystal/hardware.png b/h-source/Img/Crystal/hardware.png
new file mode 100755
index 0000000..7e90419
--- /dev/null
+++ b/h-source/Img/Crystal/hardware.png
Binary files differ
diff --git a/h-source/Img/Crystal/home.png b/h-source/Img/Crystal/home.png
new file mode 100755
index 0000000..816a0c3
--- /dev/null
+++ b/h-source/Img/Crystal/home.png
Binary files differ
diff --git a/h-source/Img/Crystal/lock.png b/h-source/Img/Crystal/lock.png
new file mode 100755
index 0000000..d1d0706
--- /dev/null
+++ b/h-source/Img/Crystal/lock.png
Binary files differ
diff --git a/h-source/Img/Crystal/modem.png b/h-source/Img/Crystal/modem.png
new file mode 100755
index 0000000..f2f9c5b
--- /dev/null
+++ b/h-source/Img/Crystal/modem.png
Binary files differ
diff --git a/h-source/Img/Crystal/modem_22.png b/h-source/Img/Crystal/modem_22.png
new file mode 100755
index 0000000..da7e61d
--- /dev/null
+++ b/h-source/Img/Crystal/modem_22.png
Binary files differ
diff --git a/h-source/Img/Crystal/rss.png b/h-source/Img/Crystal/rss.png
new file mode 100755
index 0000000..3214cb6
--- /dev/null
+++ b/h-source/Img/Crystal/rss.png
Binary files differ
diff --git a/h-source/Img/Crystal/unlock.png b/h-source/Img/Crystal/unlock.png
new file mode 100755
index 0000000..13b1090
--- /dev/null
+++ b/h-source/Img/Crystal/unlock.png
Binary files differ
diff --git a/h-source/Img/Crystal/usb.png b/h-source/Img/Crystal/usb.png
new file mode 100755
index 0000000..88c7c80
--- /dev/null
+++ b/h-source/Img/Crystal/usb.png
Binary files differ
diff --git a/h-source/Img/Crystal/usb_22.png b/h-source/Img/Crystal/usb_22.png
new file mode 100755
index 0000000..97da84a
--- /dev/null
+++ b/h-source/Img/Crystal/usb_22.png
Binary files differ
diff --git a/h-source/Img/Famfamfam/de.png b/h-source/Img/Famfamfam/de.png
new file mode 100755
index 0000000..ac4a977
--- /dev/null
+++ b/h-source/Img/Famfamfam/de.png
Binary files differ
diff --git a/h-source/Img/Famfamfam/es.png b/h-source/Img/Famfamfam/es.png
new file mode 100755
index 0000000..c2de2d7
--- /dev/null
+++ b/h-source/Img/Famfamfam/es.png
Binary files differ
diff --git a/h-source/Img/Famfamfam/fr.png b/h-source/Img/Famfamfam/fr.png
new file mode 100755
index 0000000..8332c4e
--- /dev/null
+++ b/h-source/Img/Famfamfam/fr.png
Binary files differ
diff --git a/h-source/Img/Famfamfam/gb.png b/h-source/Img/Famfamfam/gb.png
new file mode 100644
index 0000000..ff701e1
--- /dev/null
+++ b/h-source/Img/Famfamfam/gb.png
Binary files differ
diff --git a/h-source/Img/Famfamfam/gr.png b/h-source/Img/Famfamfam/gr.png
new file mode 100755
index 0000000..8651ade
--- /dev/null
+++ b/h-source/Img/Famfamfam/gr.png
Binary files differ
diff --git a/h-source/Img/Famfamfam/it.png b/h-source/Img/Famfamfam/it.png
new file mode 100755
index 0000000..89692f7
--- /dev/null
+++ b/h-source/Img/Famfamfam/it.png
Binary files differ
diff --git a/h-source/Img/Glaze/folder_blue.png b/h-source/Img/Glaze/folder_blue.png
new file mode 100755
index 0000000..98eadea
--- /dev/null
+++ b/h-source/Img/Glaze/folder_blue.png
Binary files differ
diff --git a/h-source/Img/Glaze/folder_blue_open.png b/h-source/Img/Glaze/folder_blue_open.png
new file mode 100755
index 0000000..4938afc
--- /dev/null
+++ b/h-source/Img/Glaze/folder_blue_open.png
Binary files differ
diff --git a/h-source/Img/Glaze/viewmag.png b/h-source/Img/Glaze/viewmag.png
new file mode 100755
index 0000000..c3976ee
--- /dev/null
+++ b/h-source/Img/Glaze/viewmag.png
Binary files differ
diff --git a/h-source/Img/H2O/applications-internet.png b/h-source/Img/H2O/applications-internet.png
new file mode 100755
index 0000000..193c46f
--- /dev/null
+++ b/h-source/Img/H2O/applications-internet.png
Binary files differ
diff --git a/h-source/Img/H2O/audio-card.png b/h-source/Img/H2O/audio-card.png
new file mode 100755
index 0000000..bf7445d
--- /dev/null
+++ b/h-source/Img/H2O/audio-card.png
Binary files differ
diff --git a/h-source/Img/H2O/audio-card_22.png b/h-source/Img/H2O/audio-card_22.png
new file mode 100755
index 0000000..d5a7ad4
--- /dev/null
+++ b/h-source/Img/H2O/audio-card_22.png
Binary files differ
diff --git a/h-source/Img/H2O/camera-web.png b/h-source/Img/H2O/camera-web.png
new file mode 100755
index 0000000..c95f65c
--- /dev/null
+++ b/h-source/Img/H2O/camera-web.png
Binary files differ
diff --git a/h-source/Img/H2O/camera-web_22.png b/h-source/Img/H2O/camera-web_22.png
new file mode 100755
index 0000000..8a0b339
--- /dev/null
+++ b/h-source/Img/H2O/camera-web_22.png
Binary files differ
diff --git a/h-source/Img/H2O/computer-laptop.png b/h-source/Img/H2O/computer-laptop.png
new file mode 100755
index 0000000..b5d8bde
--- /dev/null
+++ b/h-source/Img/H2O/computer-laptop.png
Binary files differ
diff --git a/h-source/Img/H2O/computer-laptop_22.png b/h-source/Img/H2O/computer-laptop_22.png
new file mode 100755
index 0000000..f33ca30
--- /dev/null
+++ b/h-source/Img/H2O/computer-laptop_22.png
Binary files differ
diff --git a/h-source/Img/H2O/download.png b/h-source/Img/H2O/download.png
new file mode 100755
index 0000000..ec888b8
--- /dev/null
+++ b/h-source/Img/H2O/download.png
Binary files differ
diff --git a/h-source/Img/H2O/download_48.png b/h-source/Img/H2O/download_48.png
new file mode 100755
index 0000000..e81619b
--- /dev/null
+++ b/h-source/Img/H2O/download_48.png
Binary files differ
diff --git a/h-source/Img/H2O/im-ban-user.png b/h-source/Img/H2O/im-ban-user.png
new file mode 100755
index 0000000..3771291
--- /dev/null
+++ b/h-source/Img/H2O/im-ban-user.png
Binary files differ
diff --git a/h-source/Img/H2O/im-user.png b/h-source/Img/H2O/im-user.png
new file mode 100755
index 0000000..69de2e4
--- /dev/null
+++ b/h-source/Img/H2O/im-user.png
Binary files differ
diff --git a/h-source/Img/H2O/media-flash-sd-mmc.png b/h-source/Img/H2O/media-flash-sd-mmc.png
new file mode 100755
index 0000000..ff41fd8
--- /dev/null
+++ b/h-source/Img/H2O/media-flash-sd-mmc.png
Binary files differ
diff --git a/h-source/Img/H2O/media-flash-sd-mmc_22.png b/h-source/Img/H2O/media-flash-sd-mmc_22.png
new file mode 100755
index 0000000..cd97b66
--- /dev/null
+++ b/h-source/Img/H2O/media-flash-sd-mmc_22.png
Binary files differ
diff --git a/h-source/Img/H2O/network-wired.png b/h-source/Img/H2O/network-wired.png
new file mode 100755
index 0000000..2981c5b
--- /dev/null
+++ b/h-source/Img/H2O/network-wired.png
Binary files differ
diff --git a/h-source/Img/H2O/network-wired_22.png b/h-source/Img/H2O/network-wired_22.png
new file mode 100755
index 0000000..7e22be7
--- /dev/null
+++ b/h-source/Img/H2O/network-wired_22.png
Binary files differ
diff --git a/h-source/Img/H2O/network-wireless.png b/h-source/Img/H2O/network-wireless.png
new file mode 100755
index 0000000..747edc9
--- /dev/null
+++ b/h-source/Img/H2O/network-wireless.png
Binary files differ
diff --git a/h-source/Img/H2O/network-wireless_22.png b/h-source/Img/H2O/network-wireless_22.png
new file mode 100755
index 0000000..94c4058
--- /dev/null
+++ b/h-source/Img/H2O/network-wireless_22.png
Binary files differ
diff --git a/h-source/Img/H2O/preferences-system-bluetooth-22.png b/h-source/Img/H2O/preferences-system-bluetooth-22.png
new file mode 100755
index 0000000..c0b3f06
--- /dev/null
+++ b/h-source/Img/H2O/preferences-system-bluetooth-22.png
Binary files differ
diff --git a/h-source/Img/H2O/preferences-system-bluetooth.png b/h-source/Img/H2O/preferences-system-bluetooth.png
new file mode 100755
index 0000000..f64ecb0
--- /dev/null
+++ b/h-source/Img/H2O/preferences-system-bluetooth.png
Binary files differ
diff --git a/h-source/Img/H2O/printer.png b/h-source/Img/H2O/printer.png
new file mode 100755
index 0000000..fd48f9f
--- /dev/null
+++ b/h-source/Img/H2O/printer.png
Binary files differ
diff --git a/h-source/Img/H2O/printer_22.png b/h-source/Img/H2O/printer_22.png
new file mode 100755
index 0000000..6e110de
--- /dev/null
+++ b/h-source/Img/H2O/printer_22.png
Binary files differ
diff --git a/h-source/Img/H2O/scanner.png b/h-source/Img/H2O/scanner.png
new file mode 100755
index 0000000..7a50365
--- /dev/null
+++ b/h-source/Img/H2O/scanner.png
Binary files differ
diff --git a/h-source/Img/H2O/scanner_22.png b/h-source/Img/H2O/scanner_22.png
new file mode 100755
index 0000000..d7b57e0
--- /dev/null
+++ b/h-source/Img/H2O/scanner_22.png
Binary files differ
diff --git a/h-source/Img/Icons/back.png b/h-source/Img/Icons/back.png
new file mode 100644
index 0000000..6ceb852
--- /dev/null
+++ b/h-source/Img/Icons/back.png
Binary files differ
diff --git a/h-source/Img/Icons/delete.png b/h-source/Img/Icons/delete.png
new file mode 100644
index 0000000..9b192fe
--- /dev/null
+++ b/h-source/Img/Icons/delete.png
Binary files differ
diff --git a/h-source/Img/Icons/elementary_2_5/AUTHORS b/h-source/Img/Icons/elementary_2_5/AUTHORS
new file mode 100755
index 0000000..dd652c4
--- /dev/null
+++ b/h-source/Img/Icons/elementary_2_5/AUTHORS
@@ -0,0 +1,28 @@
+####################
+ABOUT: #
+####################
+These icons are taken from the elementary theme. The delete.png file has been modified by Antonio Gallo (tonicucoz@yahoo.com)
+
+elementary is designed and developed by Daniel Foré <Daniel.p.Fore@gmail.com>
+
+GNOME icons, Humanity icons, and elementary icons are all licensed under the GPL.
+
+This package is licensed under GNU General Public License version 2.
+
+Icons based on GNOME and other GNOME projects are licensed GPL.
+ You can visit the GNOME website here:
+ http://www.gnome.org/
+
+Icons based on Tango sources or taken from the Tango project are public domain.
+ You can visit the Tango project website here:
+ http://tango.freedesktop.org/Tango_Desktop_Project
+
+Icons based on Humanity sources or taken from the elementary project are licensed GPL.
+ You can visit the Humanity website here:
+ http://launchpad.net/humanity
+
+####################
+Special Thanks: #
+####################
+
+The awesome Humanity team for their hard work!
diff --git a/h-source/Img/Icons/elementary_2_5/CONTRIBUTORS b/h-source/Img/Icons/elementary_2_5/CONTRIBUTORS
new file mode 100755
index 0000000..801c4cc
--- /dev/null
+++ b/h-source/Img/Icons/elementary_2_5/CONTRIBUTORS
@@ -0,0 +1,3 @@
+Sebastian Porta <sebastianporta@gmail.com>
+Oliver Scholtz <scholli_tz@yahoo.de>
+Dennis Fisher, for his amazing work with emblems to make them look beautiful.
diff --git a/h-source/Img/Icons/elementary_2_5/COPYING b/h-source/Img/Icons/elementary_2_5/COPYING
new file mode 100755
index 0000000..d60c31a
--- /dev/null
+++ b/h-source/Img/Icons/elementary_2_5/COPYING
@@ -0,0 +1,340 @@
+ GNU GENERAL PUBLIC LICENSE
+ Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.
+ 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+ Preamble
+
+ The licenses for most software are designed to take away your
+freedom to share and change it. By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users. This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it. (Some other Free Software Foundation software is covered by
+the GNU Library General Public License instead.) You can apply it to
+your programs, too.
+
+ When we speak of free software, we are referring to freedom, not
+price. Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+ To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+ For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have. You must make sure that they, too, receive or can get the
+source code. And you must show them these terms so they know their
+rights.
+
+ We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+ Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software. If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+ Finally, any free program is threatened constantly by software
+patents. We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary. To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+ The precise terms and conditions for copying, distribution and
+modification follow.
+
+ GNU GENERAL PUBLIC LICENSE
+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+ 0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License. The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language. (Hereinafter, translation is included without limitation in
+the term "modification".) Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope. The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+ 1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+ 2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+ a) You must cause the modified files to carry prominent notices
+ stating that you changed the files and the date of any change.
+
+ b) You must cause any work that you distribute or publish, that in
+ whole or in part contains or is derived from the Program or any
+ part thereof, to be licensed as a whole at no charge to all third
+ parties under the terms of this License.
+
+ c) If the modified program normally reads commands interactively
+ when run, you must cause it, when started running for such
+ interactive use in the most ordinary way, to print or display an
+ announcement including an appropriate copyright notice and a
+ notice that there is no warranty (or else, saying that you provide
+ a warranty) and that users may redistribute the program under
+ these conditions, and telling the user how to view a copy of this
+ License. (Exception: if the Program itself is interactive but
+ does not normally print such an announcement, your work based on
+ the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole. If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works. But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+ 3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+ a) Accompany it with the complete corresponding machine-readable
+ source code, which must be distributed under the terms of Sections
+ 1 and 2 above on a medium customarily used for software interchange; or,
+
+ b) Accompany it with a written offer, valid for at least three
+ years, to give any third party, for a charge no more than your
+ cost of physically performing source distribution, a complete
+ machine-readable copy of the corresponding source code, to be
+ distributed under the terms of Sections 1 and 2 above on a medium
+ customarily used for software interchange; or,
+
+ c) Accompany it with the information you received as to the offer
+ to distribute corresponding source code. (This alternative is
+ allowed only for noncommercial distribution and only if you
+ received the program in object code or executable form with such
+ an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it. For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable. However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+ 4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License. Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+ 5. You are not required to accept this License, since you have not
+signed it. However, nothing else grants you permission to modify or
+distribute the Program or its derivative works. These actions are
+prohibited by law if you do not accept this License. Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+ 6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions. You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+ 7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License. If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all. For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices. Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+ 8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded. In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+ 9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time. Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number. If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation. If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+ 10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission. For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this. Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+ NO WARRANTY
+
+ 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+ 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+ END OF TERMS AND CONDITIONS
+
+ How to Apply These Terms to Your New Programs
+
+ If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+ To do so, attach the following notices to the program. It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+ <one line to give the program's name and a brief idea of what it does.>
+ Copyright (C) <year> <name of author>
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+ Gnomovision version 69, Copyright (C) year name of author
+ Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+ This is free software, and you are welcome to redistribute it
+ under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License. Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary. Here is a sample; alter the names:
+
+ Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+ `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+ <signature of Ty Coon>, 1 April 1989
+ Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs. If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library. If this is what you want to do, use the GNU Library General
+Public License instead of this License.
diff --git a/h-source/Img/Icons/elementary_2_5/ChangeLog b/h-source/Img/Icons/elementary_2_5/ChangeLog
new file mode 100755
index 0000000..2ba7169
--- /dev/null
+++ b/h-source/Img/Icons/elementary_2_5/ChangeLog
@@ -0,0 +1,6 @@
+Elementary icons 2.5 kde port - by jetpack, changelog:
+
+0.1
+===
+* Initial Version.
+* Elementary icons by Dan Rabbit v2.5 \ No newline at end of file
diff --git a/h-source/Img/Icons/elementary_2_5/add.png b/h-source/Img/Icons/elementary_2_5/add.png
new file mode 100755
index 0000000..e6c9c9c
--- /dev/null
+++ b/h-source/Img/Icons/elementary_2_5/add.png
Binary files differ
diff --git a/h-source/Img/Icons/elementary_2_5/clear_filter.png b/h-source/Img/Icons/elementary_2_5/clear_filter.png
new file mode 100755
index 0000000..c4b47db
--- /dev/null
+++ b/h-source/Img/Icons/elementary_2_5/clear_filter.png
Binary files differ
diff --git a/h-source/Img/Icons/elementary_2_5/delete.png b/h-source/Img/Icons/elementary_2_5/delete.png
new file mode 100755
index 0000000..c4b47db
--- /dev/null
+++ b/h-source/Img/Icons/elementary_2_5/delete.png
Binary files differ
diff --git a/h-source/Img/Icons/elementary_2_5/down.png b/h-source/Img/Icons/elementary_2_5/down.png
new file mode 100755
index 0000000..21c6d58
--- /dev/null
+++ b/h-source/Img/Icons/elementary_2_5/down.png
Binary files differ
diff --git a/h-source/Img/Icons/elementary_2_5/edit.png b/h-source/Img/Icons/elementary_2_5/edit.png
new file mode 100755
index 0000000..ed0d0ef
--- /dev/null
+++ b/h-source/Img/Icons/elementary_2_5/edit.png
Binary files differ
diff --git a/h-source/Img/Icons/elementary_2_5/find.png b/h-source/Img/Icons/elementary_2_5/find.png
new file mode 100755
index 0000000..382cc98
--- /dev/null
+++ b/h-source/Img/Icons/elementary_2_5/find.png
Binary files differ
diff --git a/h-source/Img/Icons/elementary_2_5/left.png b/h-source/Img/Icons/elementary_2_5/left.png
new file mode 100755
index 0000000..316d4c1
--- /dev/null
+++ b/h-source/Img/Icons/elementary_2_5/left.png
Binary files differ
diff --git a/h-source/Img/Icons/elementary_2_5/link.png b/h-source/Img/Icons/elementary_2_5/link.png
new file mode 100755
index 0000000..625a1fb
--- /dev/null
+++ b/h-source/Img/Icons/elementary_2_5/link.png
Binary files differ
diff --git a/h-source/Img/Icons/elementary_2_5/panel.png b/h-source/Img/Icons/elementary_2_5/panel.png
new file mode 100755
index 0000000..464149f
--- /dev/null
+++ b/h-source/Img/Icons/elementary_2_5/panel.png
Binary files differ
diff --git a/h-source/Img/Icons/elementary_2_5/up.png b/h-source/Img/Icons/elementary_2_5/up.png
new file mode 100755
index 0000000..14d3603
--- /dev/null
+++ b/h-source/Img/Icons/elementary_2_5/up.png
Binary files differ
diff --git a/h-source/Img/Icons/file.png b/h-source/Img/Icons/file.png
new file mode 100644
index 0000000..443765f
--- /dev/null
+++ b/h-source/Img/Icons/file.png
Binary files differ
diff --git a/h-source/Img/Icons/folder.png b/h-source/Img/Icons/folder.png
new file mode 100644
index 0000000..89fb6d5
--- /dev/null
+++ b/h-source/Img/Icons/folder.png
Binary files differ
diff --git a/h-source/Img/Icons/image.png b/h-source/Img/Icons/image.png
new file mode 100644
index 0000000..bbc8c82
--- /dev/null
+++ b/h-source/Img/Icons/image.png
Binary files differ
diff --git a/h-source/Library/Lang/En/Formats/To/index.html b/h-source/Img/Icons/index.html
index 8d1c8b6..8d1c8b6 100755..100644
--- a/h-source/Library/Lang/En/Formats/To/index.html
+++ b/h-source/Img/Icons/index.html
diff --git a/h-source/Img/back-60.png b/h-source/Img/back-60.png
new file mode 100644
index 0000000..225df8e
--- /dev/null
+++ b/h-source/Img/back-60.png
Binary files differ
diff --git a/h-source/Img/back_last.png b/h-source/Img/back_last.png
new file mode 100644
index 0000000..6411e49
--- /dev/null
+++ b/h-source/Img/back_last.png
Binary files differ
diff --git a/h-source/Img/back_wiki.png b/h-source/Img/back_wiki.png
new file mode 100644
index 0000000..b34a9b9
--- /dev/null
+++ b/h-source/Img/back_wiki.png
Binary files differ
diff --git a/h-source/Img/discover.png b/h-source/Img/discover.png
new file mode 100644
index 0000000..28c799a
--- /dev/null
+++ b/h-source/Img/discover.png
Binary files differ
diff --git a/h-source/Img/download.png b/h-source/Img/download.png
new file mode 100644
index 0000000..d2f81dc
--- /dev/null
+++ b/h-source/Img/download.png
Binary files differ
diff --git a/h-source/Img/download_code.png b/h-source/Img/download_code.png
new file mode 100755
index 0000000..f40fc74
--- /dev/null
+++ b/h-source/Img/download_code.png
Binary files differ
diff --git a/h-source/Img/download_code_gpl3.png b/h-source/Img/download_code_gpl3.png
new file mode 100644
index 0000000..7349d11
--- /dev/null
+++ b/h-source/Img/download_code_gpl3.png
Binary files differ
diff --git a/h-source/Img/edit-60.png b/h-source/Img/edit-60.png
new file mode 100644
index 0000000..254ce23
--- /dev/null
+++ b/h-source/Img/edit-60.png
Binary files differ
diff --git a/h-source/Img/fingerprint_icon-22.png b/h-source/Img/fingerprint_icon-22.png
new file mode 100644
index 0000000..5593419
--- /dev/null
+++ b/h-source/Img/fingerprint_icon-22.png
Binary files differ
diff --git a/h-source/Img/fingerprint_icon.png b/h-source/Img/fingerprint_icon.png
new file mode 100644
index 0000000..989ba28
--- /dev/null
+++ b/h-source/Img/fingerprint_icon.png
Binary files differ
diff --git a/h-source/Img/fsf_logo.png b/h-source/Img/fsf_logo.png
new file mode 100755
index 0000000..90ac03d
--- /dev/null
+++ b/h-source/Img/fsf_logo.png
Binary files differ
diff --git a/h-source/Img/history-60.png b/h-source/Img/history-60.png
new file mode 100644
index 0000000..c726964
--- /dev/null
+++ b/h-source/Img/history-60.png
Binary files differ
diff --git a/h-source/Img/link.png b/h-source/Img/link.png
new file mode 100644
index 0000000..12f9bce
--- /dev/null
+++ b/h-source/Img/link.png
Binary files differ
diff --git a/h-source/Img/mobile.png b/h-source/Img/mobile.png
new file mode 100644
index 0000000..4fbf1de
--- /dev/null
+++ b/h-source/Img/mobile.png
Binary files differ
diff --git a/h-source/Img/new-60.png b/h-source/Img/new-60.png
new file mode 100644
index 0000000..d484867
--- /dev/null
+++ b/h-source/Img/new-60.png
Binary files differ
diff --git a/h-source/Img/popup_back.png b/h-source/Img/popup_back.png
new file mode 100644
index 0000000..4cb7139
--- /dev/null
+++ b/h-source/Img/popup_back.png
Binary files differ
diff --git a/h-source/Img/rss.png b/h-source/Img/rss.png
new file mode 100644
index 0000000..f744669
--- /dev/null
+++ b/h-source/Img/rss.png
Binary files differ
diff --git a/h-source/Img/search_back.png b/h-source/Img/search_back.png
new file mode 100644
index 0000000..6fd3b01
--- /dev/null
+++ b/h-source/Img/search_back.png
Binary files differ
diff --git a/h-source/Img/tab_icon_2.ico b/h-source/Img/tab_icon_2.ico
new file mode 100644
index 0000000..1adece3
--- /dev/null
+++ b/h-source/Img/tab_icon_2.ico
Binary files differ
diff --git a/h-source/Img/talk-60.png b/h-source/Img/talk-60.png
new file mode 100644
index 0000000..d892a8d
--- /dev/null
+++ b/h-source/Img/talk-60.png
Binary files differ
diff --git a/h-source/Img/talk_messages.png b/h-source/Img/talk_messages.png
new file mode 100644
index 0000000..6a753d5
--- /dev/null
+++ b/h-source/Img/talk_messages.png
Binary files differ
diff --git a/h-source/Img/title.png b/h-source/Img/title.png
new file mode 100644
index 0000000..fb0b38d
--- /dev/null
+++ b/h-source/Img/title.png
Binary files differ
diff --git a/h-source/Js/DisplayTag.js b/h-source/Js/DisplayTag.js
new file mode 100755
index 0000000..1ba1fb7
--- /dev/null
+++ b/h-source/Js/DisplayTag.js
@@ -0,0 +1,10 @@
+<!--
+
+// this simple function is necessary to obtain the hover effect in the popup menu (because IE doesn't support hover)
+
+function DisplayTag(obj,propertyValue) {
+ var a = obj.firstChild.childNodes[1];
+ a.style.display= propertyValue;
+}
+
+//--> \ No newline at end of file
diff --git a/h-source/Js/TinyMCE.js b/h-source/Js/TinyMCE.js
new file mode 100755
index 0000000..b0f994e
--- /dev/null
+++ b/h-source/Js/TinyMCE.js
@@ -0,0 +1,34 @@
+tinyMCE.init({
+ // General options
+ mode : "textareas",
+ theme : "advanced",
+ editor_selector : "contentArea",
+// editor_deselector : "mceNoEditor",
+ plugins : "safari,pagebreak,style,layer,table,save,advhr,advimage,advlink,emotions,iespell,inlinepopups,insertdatetime,preview,media,searchreplace,print,contextmenu,paste,directionality,fullscreen,noneditable,visualchars,nonbreaking,xhtmlxtras,template",
+
+ // Theme options
+ theme_advanced_buttons1 : "justifyleft,justifycenter,justifyright,justifyfull,styleselect,formatselect,fontselect,fontsizeselect",
+ theme_advanced_buttons2 : "cut,copy,paste,pastetext,pasteword,|,search,replace,|,bullist,numlist,|,outdent,indent,blockquote,|,undo,redo,|,link,unlink,anchor,image,cleanup,code",
+ theme_advanced_buttons3 : "tablecontrols,|,hr,removeformat,visualaid,|,sub,sup,|,charmap,emotions,iespell,media",
+ theme_advanced_buttons4 : "styleprops,|,cite,abbr,acronym,del,ins,attribs,|,visualchars,template,|,forecolor,backcolor,bold,italic,underline,strikethrough,|,insertdate,inserttime,preview",
+ theme_advanced_toolbar_location : "top",
+ theme_advanced_toolbar_align : "left",
+ theme_advanced_statusbar_location : "bottom",
+ theme_advanced_resizing : true,
+
+ // Example content CSS (should be your site CSS)
+ content_css : "../stili_editor.css",
+
+ // Drop lists for link/image/media/template dialogs
+ template_external_list_url : "lists/template_list.js",
+ external_link_list_url : "lists/link_list.js",
+ external_image_list_url : "lists/image_list.js",
+ media_external_list_url : "lists/media_list.js",
+
+ // Replace values for the template plugin
+ template_replace_values : {
+ username : "Some User",
+ staffid : "991234"
+ }
+ });
+
diff --git a/h-source/Js/functions.js b/h-source/Js/functions.js
new file mode 100644
index 0000000..5b426d2
--- /dev/null
+++ b/h-source/Js/functions.js
@@ -0,0 +1,189 @@
+<!--
+
+// @licstart The following is the entire license notice for the
+// JavaScript code in this page.
+
+// h-source, a web software to build a community of people that want to share their hardware information.
+// Copyright (C) 2010 Antonio Gallo (h-source-copyright.txt)
+//
+// This file is part of h-source
+//
+// h-source is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// h-source is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with h-source. If not, see <http://www.gnu.org/licenses/>.
+
+// @licend The above is the entire license notice
+// for the JavaScript code in this page.
+
+function dist_list_helper()
+{
+ var dist_list = "";
+
+ $(".input_distribution").click(function(){
+
+ //show the form
+ $(".dist_checkboxes_hidden_box").css({"display" : "block","z-index" : "500"});
+
+ $(".hidden_x_explorer").css({"visibility" : "hidden"});
+
+// $(".hidden_x_explorer").css({"visibility" : "hidden"});
+
+ //remove checked attribute
+ $(".hidden_box_input").each(function(){
+
+ $(this).removeAttr("checked");
+
+ });
+
+ dist_list = $(".input_distribution").attr("value");
+
+ //build the array by splitting the distribution string
+ var dist_array = dist_list.split(",");
+
+ for (i=0; i < dist_array.length; i++)
+ {
+ var this_class = dist_array[i].replace(/^\s*/, "").replace(/\s*$/, "");
+ $("." + this_class).attr({"checked" : "checked"});
+ }
+
+ });
+
+ $(".hidden_box_distribution_submit").click(function(){
+
+ $(".hidden_x_explorer").css({"visibility" : "visible"});
+
+ dist_list = "";
+
+ $(".hidden_box_input:checked").each(function(){
+
+ dist_list += $(this).attr("value") + " , ";
+
+ });
+
+ $(".dist_checkboxes_hidden_box").css({"display" : "none"});
+
+ if (dist_list.slice(-2) === ", ")
+ {
+ dist_list = dist_list.slice(0,dist_list.length-2);
+ }
+
+ $(".input_distribution").attr({"value" : dist_list});
+
+ return false;
+ });
+
+ //click cancel
+ $(".hidden_box_distribution_cancel").click(function(){
+
+ $(".hidden_x_explorer").css({"visibility" : "visible"});
+
+ $(".dist_checkboxes_hidden_box").css({"display" : "none"});
+
+ return false;
+ });
+}
+
+//md_type: message,issue,talk
+//md_action:hide,show
+function moderator_dialog(md_action,md_type)
+{
+ // Dialog Link
+ $("." + md_action + "_" + md_type).click(function() {
+
+ $("#delete_dialog").css("display","block");
+
+ var md_id = $(this).attr("id");
+
+ $('#notice_dialog').dialog({
+ autoOpen: false,
+ width: 500
+ });
+
+ $("#delete_dialog").dialog({
+ autoOpen: false,
+ width: 350,
+ buttons: {
+ "Send": function() {
+
+ var md_message = encodeURIComponent($("#md_message").attr("value"));
+
+ $.ajax({
+ type: "POST",
+ url: base_url + "/history/" + md_action + "/" + curr_lang + "/" + csrf_token,
+ data: "id="+md_id+"&message="+md_message+"&type="+md_type+"&insertAction=save",
+ async: false,
+ cache:false,
+ dataType: "html",
+ success: function(html){
+ $(".notice_dialog_inner").text(html);
+ $('#notice_dialog').dialog('open');
+ }
+ });
+
+ $(this).dialog("close");
+ },
+ "Cancel": function() {
+ $(this).dialog("close");
+ }
+ }
+ });
+
+ $("#delete_dialog").dialog('open');
+
+ return false;
+ });
+}
+
+function animateTabs(defaultTag)
+{
+ $(".description_tabs").each(function(){
+
+ var that = $(this);
+ showTab(that,defaultTag);
+ $(this).find("li.desc_tabs a").click(function(){
+
+ var t_ref = $(this).attr("href").replace(/\#/, "");
+ showTab(that,t_ref);
+ return false;
+ });
+ });
+
+}
+
+//show a single tab
+function showTab(descObject,tagLabel)
+{
+ $(".separation_line").css("display","none");
+ descObject.find(".description_tabs_page").css("display","none");
+ descObject.find(".desc_tabs").removeClass("current_tab");
+ if (descObject.find("#description_tabs_content").find("#"+tagLabel).length > 0)
+ {
+ descObject.find("#description_tabs_content").find("#"+tagLabel).css("display","block");
+ descObject.find(".desc_menu").find("."+tagLabel).addClass("current_tab");
+ }
+ else
+ {
+ if (descObject.find("#description_tabs_content").find("#en").length > 0)
+ {
+ descObject.find("#description_tabs_content").find("#en").css("display","block");
+ descObject.find(".desc_menu").find(".en").addClass("current_tab");
+ }
+ else
+ {
+ descObject.find("#description_tabs_content").find(".description_tabs_page").first().css("display","block");
+ descObject.find(".desc_menu li").first().addClass("current_tab");
+ }
+ }
+// $("#description_tabs_content").find("#"+tagLabel).css("display","block");
+}
+
+//--> \ No newline at end of file
diff --git a/h-source/Library/Lang/En/Formats/index.html b/h-source/Js/index.html
index 8d1c8b6..8d1c8b6 100755..100644
--- a/h-source/Library/Lang/En/Formats/index.html
+++ b/h-source/Js/index.html
diff --git a/h-source/Js/jquery/dialog/css/excite-bike/images/ui-bg_diagonals-small_25_c5ddfc_40x40.png b/h-source/Js/jquery/dialog/css/excite-bike/images/ui-bg_diagonals-small_25_c5ddfc_40x40.png
new file mode 100755
index 0000000..82524ab
--- /dev/null
+++ b/h-source/Js/jquery/dialog/css/excite-bike/images/ui-bg_diagonals-small_25_c5ddfc_40x40.png
Binary files differ
diff --git a/h-source/Js/jquery/dialog/css/excite-bike/images/ui-bg_diagonals-thick_20_e69700_40x40.png b/h-source/Js/jquery/dialog/css/excite-bike/images/ui-bg_diagonals-thick_20_e69700_40x40.png
new file mode 100755
index 0000000..6aed97a
--- /dev/null
+++ b/h-source/Js/jquery/dialog/css/excite-bike/images/ui-bg_diagonals-thick_20_e69700_40x40.png
Binary files differ
diff --git a/h-source/Js/jquery/dialog/css/excite-bike/images/ui-bg_diagonals-thick_22_1484e6_40x40.png b/h-source/Js/jquery/dialog/css/excite-bike/images/ui-bg_diagonals-thick_22_1484e6_40x40.png
new file mode 100755
index 0000000..f11ca67
--- /dev/null
+++ b/h-source/Js/jquery/dialog/css/excite-bike/images/ui-bg_diagonals-thick_22_1484e6_40x40.png
Binary files differ
diff --git a/h-source/Js/jquery/dialog/css/excite-bike/images/ui-bg_diagonals-thick_26_2293f7_40x40.png b/h-source/Js/jquery/dialog/css/excite-bike/images/ui-bg_diagonals-thick_26_2293f7_40x40.png
new file mode 100755
index 0000000..68306d1
--- /dev/null
+++ b/h-source/Js/jquery/dialog/css/excite-bike/images/ui-bg_diagonals-thick_26_2293f7_40x40.png
Binary files differ
diff --git a/h-source/Js/jquery/dialog/css/excite-bike/images/ui-bg_flat_0_e69700_40x100.png b/h-source/Js/jquery/dialog/css/excite-bike/images/ui-bg_flat_0_e69700_40x100.png
new file mode 100755
index 0000000..f567c28
--- /dev/null
+++ b/h-source/Js/jquery/dialog/css/excite-bike/images/ui-bg_flat_0_e69700_40x100.png
Binary files differ
diff --git a/h-source/Js/jquery/dialog/css/excite-bike/images/ui-bg_flat_0_e6b900_40x100.png b/h-source/Js/jquery/dialog/css/excite-bike/images/ui-bg_flat_0_e6b900_40x100.png
new file mode 100755
index 0000000..29e9965
--- /dev/null
+++ b/h-source/Js/jquery/dialog/css/excite-bike/images/ui-bg_flat_0_e6b900_40x100.png
Binary files differ
diff --git a/h-source/Js/jquery/dialog/css/excite-bike/images/ui-bg_highlight-soft_100_f9f9f9_1x100.png b/h-source/Js/jquery/dialog/css/excite-bike/images/ui-bg_highlight-soft_100_f9f9f9_1x100.png
new file mode 100755
index 0000000..9a46d19
--- /dev/null
+++ b/h-source/Js/jquery/dialog/css/excite-bike/images/ui-bg_highlight-soft_100_f9f9f9_1x100.png
Binary files differ
diff --git a/h-source/Js/jquery/dialog/css/excite-bike/images/ui-bg_inset-hard_100_eeeeee_1x100.png b/h-source/Js/jquery/dialog/css/excite-bike/images/ui-bg_inset-hard_100_eeeeee_1x100.png
new file mode 100755
index 0000000..f811f30
--- /dev/null
+++ b/h-source/Js/jquery/dialog/css/excite-bike/images/ui-bg_inset-hard_100_eeeeee_1x100.png
Binary files differ
diff --git a/h-source/Js/jquery/dialog/css/excite-bike/images/ui-icons_0a82eb_256x240.png b/h-source/Js/jquery/dialog/css/excite-bike/images/ui-icons_0a82eb_256x240.png
new file mode 100755
index 0000000..755fe99
--- /dev/null
+++ b/h-source/Js/jquery/dialog/css/excite-bike/images/ui-icons_0a82eb_256x240.png
Binary files differ
diff --git a/h-source/Js/jquery/dialog/css/excite-bike/images/ui-icons_0b54d5_256x240.png b/h-source/Js/jquery/dialog/css/excite-bike/images/ui-icons_0b54d5_256x240.png
new file mode 100755
index 0000000..98705f9
--- /dev/null
+++ b/h-source/Js/jquery/dialog/css/excite-bike/images/ui-icons_0b54d5_256x240.png
Binary files differ
diff --git a/h-source/Js/jquery/dialog/css/excite-bike/images/ui-icons_5fa5e3_256x240.png b/h-source/Js/jquery/dialog/css/excite-bike/images/ui-icons_5fa5e3_256x240.png
new file mode 100755
index 0000000..2179078
--- /dev/null
+++ b/h-source/Js/jquery/dialog/css/excite-bike/images/ui-icons_5fa5e3_256x240.png
Binary files differ
diff --git a/h-source/Js/jquery/dialog/css/excite-bike/images/ui-icons_fcdd4a_256x240.png b/h-source/Js/jquery/dialog/css/excite-bike/images/ui-icons_fcdd4a_256x240.png
new file mode 100755
index 0000000..de76ce2
--- /dev/null
+++ b/h-source/Js/jquery/dialog/css/excite-bike/images/ui-icons_fcdd4a_256x240.png
Binary files differ
diff --git a/h-source/Js/jquery/dialog/css/excite-bike/images/ui-icons_ffffff_256x240.png b/h-source/Js/jquery/dialog/css/excite-bike/images/ui-icons_ffffff_256x240.png
new file mode 100755
index 0000000..42f8f99
--- /dev/null
+++ b/h-source/Js/jquery/dialog/css/excite-bike/images/ui-icons_ffffff_256x240.png
Binary files differ
diff --git a/h-source/Js/jquery/dialog/css/excite-bike/jquery-ui-1.8.4.custom.css b/h-source/Js/jquery/dialog/css/excite-bike/jquery-ui-1.8.4.custom.css
new file mode 100755
index 0000000..c4ed3ea
--- /dev/null
+++ b/h-source/Js/jquery/dialog/css/excite-bike/jquery-ui-1.8.4.custom.css
@@ -0,0 +1,315 @@
+/*
+ * jQuery UI CSS Framework @VERSION
+ *
+ * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Theming/API
+ */
+
+/* Layout helpers
+----------------------------------*/
+.ui-helper-hidden { display: none; }
+.ui-helper-hidden-accessible { position: absolute; left: -99999999px; }
+.ui-helper-reset { margin: 0; padding: 0; border: 0; outline: 0; line-height: 1.3; text-decoration: none; font-size: 100%; list-style: none; }
+.ui-helper-clearfix:after { content: "."; display: block; height: 0; clear: both; visibility: hidden; }
+.ui-helper-clearfix { display: inline-block; }
+/* required comment for clearfix to work in Opera \*/
+* html .ui-helper-clearfix { height:1%; }
+.ui-helper-clearfix { display:block; }
+/* end clearfix */
+.ui-helper-zfix { width: 100%; height: 100%; top: 0; left: 0; position: absolute; opacity: 0; filter:Alpha(Opacity=0); }
+
+
+/* Interaction Cues
+----------------------------------*/
+.ui-state-disabled { cursor: default !important; }
+
+
+/* Icons
+----------------------------------*/
+
+/* states and images */
+.ui-icon { display: block; text-indent: -99999px; overflow: hidden; background-repeat: no-repeat; }
+
+
+/* Misc visuals
+----------------------------------*/
+
+/* Overlays */
+.ui-widget-overlay { position: absolute; top: 0; left: 0; width: 100%; height: 100%; }
+
+
+/*
+ * jQuery UI CSS Framework @VERSION
+ *
+ * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Theming/API
+ *
+ * To view and modify this theme, visit http://jqueryui.com/themeroller/?ffDefault=segoe%20ui,%20Arial,%20sans-serif&fwDefault=bold&fsDefault=1.1em&cornerRadius=3px&bgColorHeader=f9f9f9&bgTextureHeader=03_highlight_soft.png&bgImgOpacityHeader=100&borderColorHeader=cccccc&fcHeader=e69700&iconColorHeader=5fa5e3&bgColorContent=eeeeee&bgTextureContent=06_inset_hard.png&bgImgOpacityContent=100&borderColorContent=aaaaaa&fcContent=222222&iconColorContent=0a82eb&bgColorDefault=1484e6&bgTextureDefault=08_diagonals_thick.png&bgImgOpacityDefault=22&borderColorDefault=ffffff&fcDefault=ffffff&iconColorDefault=fcdd4a&bgColorHover=2293f7&bgTextureHover=08_diagonals_thick.png&bgImgOpacityHover=26&borderColorHover=2293f7&fcHover=ffffff&iconColorHover=ffffff&bgColorActive=e69700&bgTextureActive=08_diagonals_thick.png&bgImgOpacityActive=20&borderColorActive=e69700&fcActive=ffffff&iconColorActive=ffffff&bgColorHighlight=c5ddfc&bgTextureHighlight=07_diagonals_small.png&bgImgOpacityHighlight=25&borderColorHighlight=ffffff&fcHighlight=333333&iconColorHighlight=0b54d5&bgColorError=e69700&bgTextureError=08_diagonals_thick.png&bgImgOpacityError=20&borderColorError=e69700&fcError=ffffff&iconColorError=ffffff&bgColorOverlay=e6b900&bgTextureOverlay=01_flat.png&bgImgOpacityOverlay=0&opacityOverlay=30&bgColorShadow=e69700&bgTextureShadow=01_flat.png&bgImgOpacityShadow=0&opacityShadow=20&thicknessShadow=0px&offsetTopShadow=6px&offsetLeftShadow=6px&cornerRadiusShadow=3px
+ */
+
+
+/* Component containers
+----------------------------------*/
+.ui-widget { font-family: segoe ui, Arial, sans-serif; font-size: 1.1em; }
+.ui-widget .ui-widget { font-size: 1em; }
+.ui-widget input, .ui-widget select, .ui-widget textarea, .ui-widget button { font-family: segoe ui, Arial, sans-serif; font-size: 1em; }
+.ui-widget-content { border: 1px solid #aaaaaa; background: #eeeeee url(images/ui-bg_inset-hard_100_eeeeee_1x100.png) 50% bottom repeat-x; color: #222222; }
+.ui-widget-content a { color: #222222; }
+.ui-widget-header { border: 1px solid #cccccc; background: #f9f9f9 url(images/ui-bg_highlight-soft_100_f9f9f9_1x100.png) 50% 50% repeat-x; color: #e69700; font-weight: bold; }
+.ui-widget-header a { color: #e69700; }
+
+/* Interaction states
+----------------------------------*/
+.ui-state-default, .ui-widget-content .ui-state-default, .ui-widget-header .ui-state-default { border: 1px solid #ffffff; background: #1484e6 url(images/ui-bg_diagonals-thick_22_1484e6_40x40.png) 50% 50% repeat; font-weight: bold; color: #ffffff; }
+.ui-state-default a, .ui-state-default a:link, .ui-state-default a:visited { color: #ffffff; text-decoration: none; }
+.ui-state-hover, .ui-widget-content .ui-state-hover, .ui-widget-header .ui-state-hover, .ui-state-focus, .ui-widget-content .ui-state-focus, .ui-widget-header .ui-state-focus { border: 1px solid #2293f7; background: #2293f7 url(images/ui-bg_diagonals-thick_26_2293f7_40x40.png) 50% 50% repeat; font-weight: bold; color: #ffffff; }
+.ui-state-hover a, .ui-state-hover a:hover { color: #ffffff; text-decoration: none; }
+.ui-state-active, .ui-widget-content .ui-state-active, .ui-widget-header .ui-state-active { border: 1px solid #e69700; background: #e69700 url(images/ui-bg_diagonals-thick_20_e69700_40x40.png) 50% 50% repeat; font-weight: bold; color: #ffffff; }
+.ui-state-active a, .ui-state-active a:link, .ui-state-active a:visited { color: #ffffff; text-decoration: none; }
+.ui-widget :active { outline: none; }
+
+/* Interaction Cues
+----------------------------------*/
+.ui-state-highlight, .ui-widget-content .ui-state-highlight, .ui-widget-header .ui-state-highlight {border: 1px solid #ffffff; background: #c5ddfc url(images/ui-bg_diagonals-small_25_c5ddfc_40x40.png) 50% 50% repeat; color: #333333; }
+.ui-state-highlight a, .ui-widget-content .ui-state-highlight a,.ui-widget-header .ui-state-highlight a { color: #333333; }
+.ui-state-error, .ui-widget-content .ui-state-error, .ui-widget-header .ui-state-error {border: 1px solid #e69700; background: #e69700 url(images/ui-bg_diagonals-thick_20_e69700_40x40.png) 50% 50% repeat; color: #ffffff; }
+.ui-state-error a, .ui-widget-content .ui-state-error a, .ui-widget-header .ui-state-error a { color: #ffffff; }
+.ui-state-error-text, .ui-widget-content .ui-state-error-text, .ui-widget-header .ui-state-error-text { color: #ffffff; }
+.ui-priority-primary, .ui-widget-content .ui-priority-primary, .ui-widget-header .ui-priority-primary { font-weight: bold; }
+.ui-priority-secondary, .ui-widget-content .ui-priority-secondary, .ui-widget-header .ui-priority-secondary { opacity: .7; filter:Alpha(Opacity=70); font-weight: normal; }
+.ui-state-disabled, .ui-widget-content .ui-state-disabled, .ui-widget-header .ui-state-disabled { opacity: .35; filter:Alpha(Opacity=35); background-image: none; }
+
+/* Icons
+----------------------------------*/
+
+/* states and images */
+.ui-icon { width: 16px; height: 16px; background-image: url(images/ui-icons_0a82eb_256x240.png); }
+.ui-widget-content .ui-icon {background-image: url(images/ui-icons_0a82eb_256x240.png); }
+.ui-widget-header .ui-icon {background-image: url(images/ui-icons_5fa5e3_256x240.png); }
+.ui-state-default .ui-icon { background-image: url(images/ui-icons_fcdd4a_256x240.png); }
+.ui-state-hover .ui-icon, .ui-state-focus .ui-icon {background-image: url(images/ui-icons_ffffff_256x240.png); }
+.ui-state-active .ui-icon {background-image: url(images/ui-icons_ffffff_256x240.png); }
+.ui-state-highlight .ui-icon {background-image: url(images/ui-icons_0b54d5_256x240.png); }
+.ui-state-error .ui-icon, .ui-state-error-text .ui-icon {background-image: url(images/ui-icons_ffffff_256x240.png); }
+
+/* positioning */
+.ui-icon-carat-1-n { background-position: 0 0; }
+.ui-icon-carat-1-ne { background-position: -16px 0; }
+.ui-icon-carat-1-e { background-position: -32px 0; }
+.ui-icon-carat-1-se { background-position: -48px 0; }
+.ui-icon-carat-1-s { background-position: -64px 0; }
+.ui-icon-carat-1-sw { background-position: -80px 0; }
+.ui-icon-carat-1-w { background-position: -96px 0; }
+.ui-icon-carat-1-nw { background-position: -112px 0; }
+.ui-icon-carat-2-n-s { background-position: -128px 0; }
+.ui-icon-carat-2-e-w { background-position: -144px 0; }
+.ui-icon-triangle-1-n { background-position: 0 -16px; }
+.ui-icon-triangle-1-ne { background-position: -16px -16px; }
+.ui-icon-triangle-1-e { background-position: -32px -16px; }
+.ui-icon-triangle-1-se { background-position: -48px -16px; }
+.ui-icon-triangle-1-s { background-position: -64px -16px; }
+.ui-icon-triangle-1-sw { background-position: -80px -16px; }
+.ui-icon-triangle-1-w { background-position: -96px -16px; }
+.ui-icon-triangle-1-nw { background-position: -112px -16px; }
+.ui-icon-triangle-2-n-s { background-position: -128px -16px; }
+.ui-icon-triangle-2-e-w { background-position: -144px -16px; }
+.ui-icon-arrow-1-n { background-position: 0 -32px; }
+.ui-icon-arrow-1-ne { background-position: -16px -32px; }
+.ui-icon-arrow-1-e { background-position: -32px -32px; }
+.ui-icon-arrow-1-se { background-position: -48px -32px; }
+.ui-icon-arrow-1-s { background-position: -64px -32px; }
+.ui-icon-arrow-1-sw { background-position: -80px -32px; }
+.ui-icon-arrow-1-w { background-position: -96px -32px; }
+.ui-icon-arrow-1-nw { background-position: -112px -32px; }
+.ui-icon-arrow-2-n-s { background-position: -128px -32px; }
+.ui-icon-arrow-2-ne-sw { background-position: -144px -32px; }
+.ui-icon-arrow-2-e-w { background-position: -160px -32px; }
+.ui-icon-arrow-2-se-nw { background-position: -176px -32px; }
+.ui-icon-arrowstop-1-n { background-position: -192px -32px; }
+.ui-icon-arrowstop-1-e { background-position: -208px -32px; }
+.ui-icon-arrowstop-1-s { background-position: -224px -32px; }
+.ui-icon-arrowstop-1-w { background-position: -240px -32px; }
+.ui-icon-arrowthick-1-n { background-position: 0 -48px; }
+.ui-icon-arrowthick-1-ne { background-position: -16px -48px; }
+.ui-icon-arrowthick-1-e { background-position: -32px -48px; }
+.ui-icon-arrowthick-1-se { background-position: -48px -48px; }
+.ui-icon-arrowthick-1-s { background-position: -64px -48px; }
+.ui-icon-arrowthick-1-sw { background-position: -80px -48px; }
+.ui-icon-arrowthick-1-w { background-position: -96px -48px; }
+.ui-icon-arrowthick-1-nw { background-position: -112px -48px; }
+.ui-icon-arrowthick-2-n-s { background-position: -128px -48px; }
+.ui-icon-arrowthick-2-ne-sw { background-position: -144px -48px; }
+.ui-icon-arrowthick-2-e-w { background-position: -160px -48px; }
+.ui-icon-arrowthick-2-se-nw { background-position: -176px -48px; }
+.ui-icon-arrowthickstop-1-n { background-position: -192px -48px; }
+.ui-icon-arrowthickstop-1-e { background-position: -208px -48px; }
+.ui-icon-arrowthickstop-1-s { background-position: -224px -48px; }
+.ui-icon-arrowthickstop-1-w { background-position: -240px -48px; }
+.ui-icon-arrowreturnthick-1-w { background-position: 0 -64px; }
+.ui-icon-arrowreturnthick-1-n { background-position: -16px -64px; }
+.ui-icon-arrowreturnthick-1-e { background-position: -32px -64px; }
+.ui-icon-arrowreturnthick-1-s { background-position: -48px -64px; }
+.ui-icon-arrowreturn-1-w { background-position: -64px -64px; }
+.ui-icon-arrowreturn-1-n { background-position: -80px -64px; }
+.ui-icon-arrowreturn-1-e { background-position: -96px -64px; }
+.ui-icon-arrowreturn-1-s { background-position: -112px -64px; }
+.ui-icon-arrowrefresh-1-w { background-position: -128px -64px; }
+.ui-icon-arrowrefresh-1-n { background-position: -144px -64px; }
+.ui-icon-arrowrefresh-1-e { background-position: -160px -64px; }
+.ui-icon-arrowrefresh-1-s { background-position: -176px -64px; }
+.ui-icon-arrow-4 { background-position: 0 -80px; }
+.ui-icon-arrow-4-diag { background-position: -16px -80px; }
+.ui-icon-extlink { background-position: -32px -80px; }
+.ui-icon-newwin { background-position: -48px -80px; }
+.ui-icon-refresh { background-position: -64px -80px; }
+.ui-icon-shuffle { background-position: -80px -80px; }
+.ui-icon-transfer-e-w { background-position: -96px -80px; }
+.ui-icon-transferthick-e-w { background-position: -112px -80px; }
+.ui-icon-folder-collapsed { background-position: 0 -96px; }
+.ui-icon-folder-open { background-position: -16px -96px; }
+.ui-icon-document { background-position: -32px -96px; }
+.ui-icon-document-b { background-position: -48px -96px; }
+.ui-icon-note { background-position: -64px -96px; }
+.ui-icon-mail-closed { background-position: -80px -96px; }
+.ui-icon-mail-open { background-position: -96px -96px; }
+.ui-icon-suitcase { background-position: -112px -96px; }
+.ui-icon-comment { background-position: -128px -96px; }
+.ui-icon-person { background-position: -144px -96px; }
+.ui-icon-print { background-position: -160px -96px; }
+.ui-icon-trash { background-position: -176px -96px; }
+.ui-icon-locked { background-position: -192px -96px; }
+.ui-icon-unlocked { background-position: -208px -96px; }
+.ui-icon-bookmark { background-position: -224px -96px; }
+.ui-icon-tag { background-position: -240px -96px; }
+.ui-icon-home { background-position: 0 -112px; }
+.ui-icon-flag { background-position: -16px -112px; }
+.ui-icon-calendar { background-position: -32px -112px; }
+.ui-icon-cart { background-position: -48px -112px; }
+.ui-icon-pencil { background-position: -64px -112px; }
+.ui-icon-clock { background-position: -80px -112px; }
+.ui-icon-disk { background-position: -96px -112px; }
+.ui-icon-calculator { background-position: -112px -112px; }
+.ui-icon-zoomin { background-position: -128px -112px; }
+.ui-icon-zoomout { background-position: -144px -112px; }
+.ui-icon-search { background-position: -160px -112px; }
+.ui-icon-wrench { background-position: -176px -112px; }
+.ui-icon-gear { background-position: -192px -112px; }
+.ui-icon-heart { background-position: -208px -112px; }
+.ui-icon-star { background-position: -224px -112px; }
+.ui-icon-link { background-position: -240px -112px; }
+.ui-icon-cancel { background-position: 0 -128px; }
+.ui-icon-plus { background-position: -16px -128px; }
+.ui-icon-plusthick { background-position: -32px -128px; }
+.ui-icon-minus { background-position: -48px -128px; }
+.ui-icon-minusthick { background-position: -64px -128px; }
+.ui-icon-close { background-position: -80px -128px; }
+.ui-icon-closethick { background-position: -96px -128px; }
+.ui-icon-key { background-position: -112px -128px; }
+.ui-icon-lightbulb { background-position: -128px -128px; }
+.ui-icon-scissors { background-position: -144px -128px; }
+.ui-icon-clipboard { background-position: -160px -128px; }
+.ui-icon-copy { background-position: -176px -128px; }
+.ui-icon-contact { background-position: -192px -128px; }
+.ui-icon-image { background-position: -208px -128px; }
+.ui-icon-video { background-position: -224px -128px; }
+.ui-icon-script { background-position: -240px -128px; }
+.ui-icon-alert { background-position: 0 -144px; }
+.ui-icon-info { background-position: -16px -144px; }
+.ui-icon-notice { background-position: -32px -144px; }
+.ui-icon-help { background-position: -48px -144px; }
+.ui-icon-check { background-position: -64px -144px; }
+.ui-icon-bullet { background-position: -80px -144px; }
+.ui-icon-radio-off { background-position: -96px -144px; }
+.ui-icon-radio-on { background-position: -112px -144px; }
+.ui-icon-pin-w { background-position: -128px -144px; }
+.ui-icon-pin-s { background-position: -144px -144px; }
+.ui-icon-play { background-position: 0 -160px; }
+.ui-icon-pause { background-position: -16px -160px; }
+.ui-icon-seek-next { background-position: -32px -160px; }
+.ui-icon-seek-prev { background-position: -48px -160px; }
+.ui-icon-seek-end { background-position: -64px -160px; }
+.ui-icon-seek-start { background-position: -80px -160px; }
+/* ui-icon-seek-first is deprecated, use ui-icon-seek-start instead */
+.ui-icon-seek-first { background-position: -80px -160px; }
+.ui-icon-stop { background-position: -96px -160px; }
+.ui-icon-eject { background-position: -112px -160px; }
+.ui-icon-volume-off { background-position: -128px -160px; }
+.ui-icon-volume-on { background-position: -144px -160px; }
+.ui-icon-power { background-position: 0 -176px; }
+.ui-icon-signal-diag { background-position: -16px -176px; }
+.ui-icon-signal { background-position: -32px -176px; }
+.ui-icon-battery-0 { background-position: -48px -176px; }
+.ui-icon-battery-1 { background-position: -64px -176px; }
+.ui-icon-battery-2 { background-position: -80px -176px; }
+.ui-icon-battery-3 { background-position: -96px -176px; }
+.ui-icon-circle-plus { background-position: 0 -192px; }
+.ui-icon-circle-minus { background-position: -16px -192px; }
+.ui-icon-circle-close { background-position: -32px -192px; }
+.ui-icon-circle-triangle-e { background-position: -48px -192px; }
+.ui-icon-circle-triangle-s { background-position: -64px -192px; }
+.ui-icon-circle-triangle-w { background-position: -80px -192px; }
+.ui-icon-circle-triangle-n { background-position: -96px -192px; }
+.ui-icon-circle-arrow-e { background-position: -112px -192px; }
+.ui-icon-circle-arrow-s { background-position: -128px -192px; }
+.ui-icon-circle-arrow-w { background-position: -144px -192px; }
+.ui-icon-circle-arrow-n { background-position: -160px -192px; }
+.ui-icon-circle-zoomin { background-position: -176px -192px; }
+.ui-icon-circle-zoomout { background-position: -192px -192px; }
+.ui-icon-circle-check { background-position: -208px -192px; }
+.ui-icon-circlesmall-plus { background-position: 0 -208px; }
+.ui-icon-circlesmall-minus { background-position: -16px -208px; }
+.ui-icon-circlesmall-close { background-position: -32px -208px; }
+.ui-icon-squaresmall-plus { background-position: -48px -208px; }
+.ui-icon-squaresmall-minus { background-position: -64px -208px; }
+.ui-icon-squaresmall-close { background-position: -80px -208px; }
+.ui-icon-grip-dotted-vertical { background-position: 0 -224px; }
+.ui-icon-grip-dotted-horizontal { background-position: -16px -224px; }
+.ui-icon-grip-solid-vertical { background-position: -32px -224px; }
+.ui-icon-grip-solid-horizontal { background-position: -48px -224px; }
+.ui-icon-gripsmall-diagonal-se { background-position: -64px -224px; }
+.ui-icon-grip-diagonal-se { background-position: -80px -224px; }
+
+
+/* Misc visuals
+----------------------------------*/
+
+/* Corner radius */
+.ui-corner-tl { -moz-border-radius-topleft: 3px; -webkit-border-top-left-radius: 3px; border-top-left-radius: 3px; }
+.ui-corner-tr { -moz-border-radius-topright: 3px; -webkit-border-top-right-radius: 3px; border-top-right-radius: 3px; }
+.ui-corner-bl { -moz-border-radius-bottomleft: 3px; -webkit-border-bottom-left-radius: 3px; border-bottom-left-radius: 3px; }
+.ui-corner-br { -moz-border-radius-bottomright: 3px; -webkit-border-bottom-right-radius: 3px; border-bottom-right-radius: 3px; }
+.ui-corner-top { -moz-border-radius-topleft: 3px; -webkit-border-top-left-radius: 3px; border-top-left-radius: 3px; -moz-border-radius-topright: 3px; -webkit-border-top-right-radius: 3px; border-top-right-radius: 3px; }
+.ui-corner-bottom { -moz-border-radius-bottomleft: 3px; -webkit-border-bottom-left-radius: 3px; border-bottom-left-radius: 3px; -moz-border-radius-bottomright: 3px; -webkit-border-bottom-right-radius: 3px; border-bottom-right-radius: 3px; }
+.ui-corner-right { -moz-border-radius-topright: 3px; -webkit-border-top-right-radius: 3px; border-top-right-radius: 3px; -moz-border-radius-bottomright: 3px; -webkit-border-bottom-right-radius: 3px; border-bottom-right-radius: 3px; }
+.ui-corner-left { -moz-border-radius-topleft: 3px; -webkit-border-top-left-radius: 3px; border-top-left-radius: 3px; -moz-border-radius-bottomleft: 3px; -webkit-border-bottom-left-radius: 3px; border-bottom-left-radius: 3px; }
+.ui-corner-all { -moz-border-radius: 3px; -webkit-border-radius: 3px; border-radius: 3px; }
+
+/* Overlays */
+.ui-widget-overlay { background: #e6b900 url(images/ui-bg_flat_0_e6b900_40x100.png) 50% 50% repeat-x; opacity: .30;filter:Alpha(Opacity=30); }
+.ui-widget-shadow { margin: 6px 0 0 6px; padding: 0px; background: #e69700 url(images/ui-bg_flat_0_e69700_40x100.png) 50% 50% repeat-x; opacity: .20;filter:Alpha(Opacity=20); -moz-border-radius: 3px; -webkit-border-radius: 3px; border-radius: 3px; }/*
+ * jQuery UI Dialog @VERSION
+ *
+ * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Dialog#theming
+ */
+.ui-dialog { position: absolute; padding: .2em; width: 300px; overflow: hidden; }
+.ui-dialog .ui-dialog-titlebar { padding: .5em 1em .3em; position: relative; }
+.ui-dialog .ui-dialog-title { float: left; margin: .1em 16px .2em 0; }
+.ui-dialog .ui-dialog-titlebar-close { position: absolute; right: .3em; top: 50%; width: 19px; margin: -10px 0 0 0; padding: 1px; height: 18px; }
+.ui-dialog .ui-dialog-titlebar-close span { display: block; margin: 1px; }
+.ui-dialog .ui-dialog-titlebar-close:hover, .ui-dialog .ui-dialog-titlebar-close:focus { padding: 0; }
+.ui-dialog .ui-dialog-content { position: relative; border: 0; padding: .5em 1em; background: none; overflow: auto; zoom: 1; }
+.ui-dialog .ui-dialog-buttonpane { text-align: left; border-width: 1px 0 0 0; background-image: none; margin: .5em 0 0 0; padding: .3em 1em .5em .4em; }
+.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset { float: right; }
+.ui-dialog .ui-dialog-buttonpane button { margin: .5em .4em .5em 0; cursor: pointer; }
+.ui-dialog .ui-resizable-se { width: 14px; height: 14px; right: 3px; bottom: 3px; }
+.ui-draggable .ui-dialog-titlebar { cursor: move; }
diff --git a/h-source/Js/jquery/dialog/js/jquery-ui-1.8.4.custom.min.js b/h-source/Js/jquery/dialog/js/jquery-ui-1.8.4.custom.min.js
new file mode 100755
index 0000000..7469ef3
--- /dev/null
+++ b/h-source/Js/jquery/dialog/js/jquery-ui-1.8.4.custom.min.js
@@ -0,0 +1,87 @@
+/*!
+ * jQuery UI 1.8.4
+ *
+ * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI
+ */
+(function(c,j){function k(a){return!c(a).parents().andSelf().filter(function(){return c.curCSS(this,"visibility")==="hidden"||c.expr.filters.hidden(this)}).length}c.ui=c.ui||{};if(!c.ui.version){c.extend(c.ui,{version:"1.8.4",plugin:{add:function(a,b,d){a=c.ui[a].prototype;for(var e in d){a.plugins[e]=a.plugins[e]||[];a.plugins[e].push([b,d[e]])}},call:function(a,b,d){if((b=a.plugins[b])&&a.element[0].parentNode)for(var e=0;e<b.length;e++)a.options[b[e][0]]&&b[e][1].apply(a.element,d)}},contains:function(a,
+b){return document.compareDocumentPosition?a.compareDocumentPosition(b)&16:a!==b&&a.contains(b)},hasScroll:function(a,b){if(c(a).css("overflow")==="hidden")return false;b=b&&b==="left"?"scrollLeft":"scrollTop";var d=false;if(a[b]>0)return true;a[b]=1;d=a[b]>0;a[b]=0;return d},isOverAxis:function(a,b,d){return a>b&&a<b+d},isOver:function(a,b,d,e,h,i){return c.ui.isOverAxis(a,d,h)&&c.ui.isOverAxis(b,e,i)},keyCode:{ALT:18,BACKSPACE:8,CAPS_LOCK:20,COMMA:188,COMMAND:91,COMMAND_LEFT:91,COMMAND_RIGHT:93,
+CONTROL:17,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,INSERT:45,LEFT:37,MENU:93,NUMPAD_ADD:107,NUMPAD_DECIMAL:110,NUMPAD_DIVIDE:111,NUMPAD_ENTER:108,NUMPAD_MULTIPLY:106,NUMPAD_SUBTRACT:109,PAGE_DOWN:34,PAGE_UP:33,PERIOD:190,RIGHT:39,SHIFT:16,SPACE:32,TAB:9,UP:38,WINDOWS:91}});c.fn.extend({_focus:c.fn.focus,focus:function(a,b){return typeof a==="number"?this.each(function(){var d=this;setTimeout(function(){c(d).focus();b&&b.call(d)},a)}):this._focus.apply(this,arguments)},enableSelection:function(){return this.attr("unselectable",
+"off").css("MozUserSelect","")},disableSelection:function(){return this.attr("unselectable","on").css("MozUserSelect","none")},scrollParent:function(){var a;a=c.browser.msie&&/(static|relative)/.test(this.css("position"))||/absolute/.test(this.css("position"))?this.parents().filter(function(){return/(relative|absolute|fixed)/.test(c.curCSS(this,"position",1))&&/(auto|scroll)/.test(c.curCSS(this,"overflow",1)+c.curCSS(this,"overflow-y",1)+c.curCSS(this,"overflow-x",1))}).eq(0):this.parents().filter(function(){return/(auto|scroll)/.test(c.curCSS(this,
+"overflow",1)+c.curCSS(this,"overflow-y",1)+c.curCSS(this,"overflow-x",1))}).eq(0);return/fixed/.test(this.css("position"))||!a.length?c(document):a},zIndex:function(a){if(a!==j)return this.css("zIndex",a);if(this.length){a=c(this[0]);for(var b;a.length&&a[0]!==document;){b=a.css("position");if(b==="absolute"||b==="relative"||b==="fixed"){b=parseInt(a.css("zIndex"));if(!isNaN(b)&&b!=0)return b}a=a.parent()}}return 0}});c.each(["Width","Height"],function(a,b){function d(f,g,l,m){c.each(e,function(){g-=
+parseFloat(c.curCSS(f,"padding"+this,true))||0;if(l)g-=parseFloat(c.curCSS(f,"border"+this+"Width",true))||0;if(m)g-=parseFloat(c.curCSS(f,"margin"+this,true))||0});return g}var e=b==="Width"?["Left","Right"]:["Top","Bottom"],h=b.toLowerCase(),i={innerWidth:c.fn.innerWidth,innerHeight:c.fn.innerHeight,outerWidth:c.fn.outerWidth,outerHeight:c.fn.outerHeight};c.fn["inner"+b]=function(f){if(f===j)return i["inner"+b].call(this);return this.each(function(){c.style(this,h,d(this,f)+"px")})};c.fn["outer"+
+b]=function(f,g){if(typeof f!=="number")return i["outer"+b].call(this,f);return this.each(function(){c.style(this,h,d(this,f,true,g)+"px")})}});c.extend(c.expr[":"],{data:function(a,b,d){return!!c.data(a,d[3])},focusable:function(a){var b=a.nodeName.toLowerCase(),d=c.attr(a,"tabindex");if("area"===b){b=a.parentNode;d=b.name;if(!a.href||!d||b.nodeName.toLowerCase()!=="map")return false;a=c("img[usemap=#"+d+"]")[0];return!!a&&k(a)}return(/input|select|textarea|button|object/.test(b)?!a.disabled:"a"==
+b?a.href||!isNaN(d):!isNaN(d))&&k(a)},tabbable:function(a){var b=c.attr(a,"tabindex");return(isNaN(b)||b>=0)&&c(a).is(":focusable")}})}})(jQuery);
+;/*!
+ * jQuery UI Widget 1.8.4
+ *
+ * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Widget
+ */
+(function(b,j){var k=b.fn.remove;b.fn.remove=function(a,c){return this.each(function(){if(!c)if(!a||b.filter(a,[this]).length)b("*",this).add([this]).each(function(){b(this).triggerHandler("remove")});return k.call(b(this),a,c)})};b.widget=function(a,c,d){var e=a.split(".")[0],f;a=a.split(".")[1];f=e+"-"+a;if(!d){d=c;c=b.Widget}b.expr[":"][f]=function(h){return!!b.data(h,a)};b[e]=b[e]||{};b[e][a]=function(h,g){arguments.length&&this._createWidget(h,g)};c=new c;c.options=b.extend(true,{},c.options);
+b[e][a].prototype=b.extend(true,c,{namespace:e,widgetName:a,widgetEventPrefix:b[e][a].prototype.widgetEventPrefix||a,widgetBaseClass:f},d);b.widget.bridge(a,b[e][a])};b.widget.bridge=function(a,c){b.fn[a]=function(d){var e=typeof d==="string",f=Array.prototype.slice.call(arguments,1),h=this;d=!e&&f.length?b.extend.apply(null,[true,d].concat(f)):d;if(e&&d.substring(0,1)==="_")return h;e?this.each(function(){var g=b.data(this,a),i=g&&b.isFunction(g[d])?g[d].apply(g,f):g;if(i!==g&&i!==j){h=i;return false}}):
+this.each(function(){var g=b.data(this,a);if(g){d&&g.option(d);g._init()}else b.data(this,a,new c(d,this))});return h}};b.Widget=function(a,c){arguments.length&&this._createWidget(a,c)};b.Widget.prototype={widgetName:"widget",widgetEventPrefix:"",options:{disabled:false},_createWidget:function(a,c){b.data(c,this.widgetName,this);this.element=b(c);this.options=b.extend(true,{},this.options,b.metadata&&b.metadata.get(c)[this.widgetName],a);var d=this;this.element.bind("remove."+this.widgetName,function(){d.destroy()});
+this._create();this._init()},_create:function(){},_init:function(){},destroy:function(){this.element.unbind("."+this.widgetName).removeData(this.widgetName);this.widget().unbind("."+this.widgetName).removeAttr("aria-disabled").removeClass(this.widgetBaseClass+"-disabled ui-state-disabled")},widget:function(){return this.element},option:function(a,c){var d=a,e=this;if(arguments.length===0)return b.extend({},e.options);if(typeof a==="string"){if(c===j)return this.options[a];d={};d[a]=c}b.each(d,function(f,
+h){e._setOption(f,h)});return e},_setOption:function(a,c){this.options[a]=c;if(a==="disabled")this.widget()[c?"addClass":"removeClass"](this.widgetBaseClass+"-disabled ui-state-disabled").attr("aria-disabled",c);return this},enable:function(){return this._setOption("disabled",false)},disable:function(){return this._setOption("disabled",true)},_trigger:function(a,c,d){var e=this.options[a];c=b.Event(c);c.type=(a===this.widgetEventPrefix?a:this.widgetEventPrefix+a).toLowerCase();d=d||{};if(c.originalEvent){a=
+b.event.props.length;for(var f;a;){f=b.event.props[--a];c[f]=c.originalEvent[f]}}this.element.trigger(c,d);return!(b.isFunction(e)&&e.call(this.element[0],c,d)===false||c.isDefaultPrevented())}}})(jQuery);
+;/*
+ * jQuery UI Position 1.8.4
+ *
+ * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Position
+ */
+(function(c){c.ui=c.ui||{};var m=/left|center|right/,n=/top|center|bottom/,p=c.fn.position,q=c.fn.offset;c.fn.position=function(a){if(!a||!a.of)return p.apply(this,arguments);a=c.extend({},a);var b=c(a.of),d=(a.collision||"flip").split(" "),e=a.offset?a.offset.split(" "):[0,0],g,h,i;if(a.of.nodeType===9){g=b.width();h=b.height();i={top:0,left:0}}else if(a.of.scrollTo&&a.of.document){g=b.width();h=b.height();i={top:b.scrollTop(),left:b.scrollLeft()}}else if(a.of.preventDefault){a.at="left top";g=h=
+0;i={top:a.of.pageY,left:a.of.pageX}}else{g=b.outerWidth();h=b.outerHeight();i=b.offset()}c.each(["my","at"],function(){var f=(a[this]||"").split(" ");if(f.length===1)f=m.test(f[0])?f.concat(["center"]):n.test(f[0])?["center"].concat(f):["center","center"];f[0]=m.test(f[0])?f[0]:"center";f[1]=n.test(f[1])?f[1]:"center";a[this]=f});if(d.length===1)d[1]=d[0];e[0]=parseInt(e[0],10)||0;if(e.length===1)e[1]=e[0];e[1]=parseInt(e[1],10)||0;if(a.at[0]==="right")i.left+=g;else if(a.at[0]==="center")i.left+=
+g/2;if(a.at[1]==="bottom")i.top+=h;else if(a.at[1]==="center")i.top+=h/2;i.left+=e[0];i.top+=e[1];return this.each(function(){var f=c(this),k=f.outerWidth(),l=f.outerHeight(),j=c.extend({},i);if(a.my[0]==="right")j.left-=k;else if(a.my[0]==="center")j.left-=k/2;if(a.my[1]==="bottom")j.top-=l;else if(a.my[1]==="center")j.top-=l/2;j.left=parseInt(j.left);j.top=parseInt(j.top);c.each(["left","top"],function(o,r){c.ui.position[d[o]]&&c.ui.position[d[o]][r](j,{targetWidth:g,targetHeight:h,elemWidth:k,
+elemHeight:l,offset:e,my:a.my,at:a.at})});c.fn.bgiframe&&f.bgiframe();f.offset(c.extend(j,{using:a.using}))})};c.ui.position={fit:{left:function(a,b){var d=c(window);b=a.left+b.elemWidth-d.width()-d.scrollLeft();a.left=b>0?a.left-b:Math.max(0,a.left)},top:function(a,b){var d=c(window);b=a.top+b.elemHeight-d.height()-d.scrollTop();a.top=b>0?a.top-b:Math.max(0,a.top)}},flip:{left:function(a,b){if(b.at[0]!=="center"){var d=c(window);d=a.left+b.elemWidth-d.width()-d.scrollLeft();var e=b.my[0]==="left"?
+-b.elemWidth:b.my[0]==="right"?b.elemWidth:0,g=-2*b.offset[0];a.left+=a.left<0?e+b.targetWidth+g:d>0?e-b.targetWidth+g:0}},top:function(a,b){if(b.at[1]!=="center"){var d=c(window);d=a.top+b.elemHeight-d.height()-d.scrollTop();var e=b.my[1]==="top"?-b.elemHeight:b.my[1]==="bottom"?b.elemHeight:0,g=b.at[1]==="top"?b.targetHeight:-b.targetHeight,h=-2*b.offset[1];a.top+=a.top<0?e+b.targetHeight+h:d>0?e+g+h:0}}}};if(!c.offset.setOffset){c.offset.setOffset=function(a,b){if(/static/.test(c.curCSS(a,"position")))a.style.position=
+"relative";var d=c(a),e=d.offset(),g=parseInt(c.curCSS(a,"top",true),10)||0,h=parseInt(c.curCSS(a,"left",true),10)||0;e={top:b.top-e.top+g,left:b.left-e.left+h};"using"in b?b.using.call(a,e):d.css(e)};c.fn.offset=function(a){var b=this[0];if(!b||!b.ownerDocument)return null;if(a)return this.each(function(){c.offset.setOffset(this,a)});return q.call(this)}}})(jQuery);
+;/*
+ * jQuery UI Dialog 1.8.4
+ *
+ * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Dialog
+ *
+ * Depends:
+ * jquery.ui.core.js
+ * jquery.ui.widget.js
+ * jquery.ui.button.js
+ * jquery.ui.draggable.js
+ * jquery.ui.mouse.js
+ * jquery.ui.position.js
+ * jquery.ui.resizable.js
+ */
+(function(c,j){c.widget("ui.dialog",{options:{autoOpen:true,buttons:{},closeOnEscape:true,closeText:"close",dialogClass:"",draggable:true,hide:null,height:"auto",maxHeight:false,maxWidth:false,minHeight:150,minWidth:150,modal:false,position:{my:"center",at:"center",of:window,collision:"fit",using:function(a){var b=c(this).css(a).offset().top;b<0&&c(this).css("top",a.top-b)}},resizable:true,show:null,stack:true,title:"",width:300,zIndex:1E3},_create:function(){this.originalTitle=this.element.attr("title");
+if(typeof this.originalTitle!=="string")this.originalTitle="";var a=this,b=a.options,d=b.title||a.originalTitle||"&#160;",f=c.ui.dialog.getTitleId(a.element),g=(a.uiDialog=c("<div></div>")).appendTo(document.body).hide().addClass("ui-dialog ui-widget ui-widget-content ui-corner-all "+b.dialogClass).css({zIndex:b.zIndex}).attr("tabIndex",-1).css("outline",0).keydown(function(i){if(b.closeOnEscape&&i.keyCode&&i.keyCode===c.ui.keyCode.ESCAPE){a.close(i);i.preventDefault()}}).attr({role:"dialog","aria-labelledby":f}).mousedown(function(i){a.moveToTop(false,
+i)});a.element.show().removeAttr("title").addClass("ui-dialog-content ui-widget-content").appendTo(g);var e=(a.uiDialogTitlebar=c("<div></div>")).addClass("ui-dialog-titlebar ui-widget-header ui-corner-all ui-helper-clearfix").prependTo(g),h=c('<a href="#"></a>').addClass("ui-dialog-titlebar-close ui-corner-all").attr("role","button").hover(function(){h.addClass("ui-state-hover")},function(){h.removeClass("ui-state-hover")}).focus(function(){h.addClass("ui-state-focus")}).blur(function(){h.removeClass("ui-state-focus")}).click(function(i){a.close(i);
+return false}).appendTo(e);(a.uiDialogTitlebarCloseText=c("<span></span>")).addClass("ui-icon ui-icon-closethick").text(b.closeText).appendTo(h);c("<span></span>").addClass("ui-dialog-title").attr("id",f).html(d).prependTo(e);if(c.isFunction(b.beforeclose)&&!c.isFunction(b.beforeClose))b.beforeClose=b.beforeclose;e.find("*").add(e).disableSelection();b.draggable&&c.fn.draggable&&a._makeDraggable();b.resizable&&c.fn.resizable&&a._makeResizable();a._createButtons(b.buttons);a._isOpen=false;c.fn.bgiframe&&
+g.bgiframe()},_init:function(){this.options.autoOpen&&this.open()},destroy:function(){var a=this;a.overlay&&a.overlay.destroy();a.uiDialog.hide();a.element.unbind(".dialog").removeData("dialog").removeClass("ui-dialog-content ui-widget-content").hide().appendTo("body");a.uiDialog.remove();a.originalTitle&&a.element.attr("title",a.originalTitle);return a},widget:function(){return this.uiDialog},close:function(a){var b=this,d;if(false!==b._trigger("beforeClose",a)){b.overlay&&b.overlay.destroy();b.uiDialog.unbind("keypress.ui-dialog");
+b._isOpen=false;if(b.options.hide)b.uiDialog.hide(b.options.hide,function(){b._trigger("close",a)});else{b.uiDialog.hide();b._trigger("close",a)}c.ui.dialog.overlay.resize();if(b.options.modal){d=0;c(".ui-dialog").each(function(){if(this!==b.uiDialog[0])d=Math.max(d,c(this).css("z-index"))});c.ui.dialog.maxZ=d}return b}},isOpen:function(){return this._isOpen},moveToTop:function(a,b){var d=this,f=d.options;if(f.modal&&!a||!f.stack&&!f.modal)return d._trigger("focus",b);if(f.zIndex>c.ui.dialog.maxZ)c.ui.dialog.maxZ=
+f.zIndex;if(d.overlay){c.ui.dialog.maxZ+=1;d.overlay.$el.css("z-index",c.ui.dialog.overlay.maxZ=c.ui.dialog.maxZ)}a={scrollTop:d.element.attr("scrollTop"),scrollLeft:d.element.attr("scrollLeft")};c.ui.dialog.maxZ+=1;d.uiDialog.css("z-index",c.ui.dialog.maxZ);d.element.attr(a);d._trigger("focus",b);return d},open:function(){if(!this._isOpen){var a=this,b=a.options,d=a.uiDialog;a.overlay=b.modal?new c.ui.dialog.overlay(a):null;d.next().length&&d.appendTo("body");a._size();a._position(b.position);d.show(b.show);
+a.moveToTop(true);b.modal&&d.bind("keypress.ui-dialog",function(f){if(f.keyCode===c.ui.keyCode.TAB){var g=c(":tabbable",this),e=g.filter(":first");g=g.filter(":last");if(f.target===g[0]&&!f.shiftKey){e.focus(1);return false}else if(f.target===e[0]&&f.shiftKey){g.focus(1);return false}}});c(a.element.find(":tabbable").get().concat(d.find(".ui-dialog-buttonpane :tabbable").get().concat(d.get()))).eq(0).focus();a._trigger("open");a._isOpen=true;return a}},_createButtons:function(a){var b=this,d=false,
+f=c("<div></div>").addClass("ui-dialog-buttonpane ui-widget-content ui-helper-clearfix"),g=c("<div></div>").addClass("ui-dialog-buttonset").appendTo(f);b.uiDialog.find(".ui-dialog-buttonpane").remove();typeof a==="object"&&a!==null&&c.each(a,function(){return!(d=true)});if(d){c.each(a,function(e,h){e=c('<button type="button"></button>').text(e).click(function(){h.apply(b.element[0],arguments)}).appendTo(g);c.fn.button&&e.button()});f.appendTo(b.uiDialog)}},_makeDraggable:function(){function a(e){return{position:e.position,
+offset:e.offset}}var b=this,d=b.options,f=c(document),g;b.uiDialog.draggable({cancel:".ui-dialog-content, .ui-dialog-titlebar-close",handle:".ui-dialog-titlebar",containment:"document",start:function(e,h){g=d.height==="auto"?"auto":c(this).height();c(this).height(c(this).height()).addClass("ui-dialog-dragging");b._trigger("dragStart",e,a(h))},drag:function(e,h){b._trigger("drag",e,a(h))},stop:function(e,h){d.position=[h.position.left-f.scrollLeft(),h.position.top-f.scrollTop()];c(this).removeClass("ui-dialog-dragging").height(g);
+b._trigger("dragStop",e,a(h));c.ui.dialog.overlay.resize()}})},_makeResizable:function(a){function b(e){return{originalPosition:e.originalPosition,originalSize:e.originalSize,position:e.position,size:e.size}}a=a===j?this.options.resizable:a;var d=this,f=d.options,g=d.uiDialog.css("position");a=typeof a==="string"?a:"n,e,s,w,se,sw,ne,nw";d.uiDialog.resizable({cancel:".ui-dialog-content",containment:"document",alsoResize:d.element,maxWidth:f.maxWidth,maxHeight:f.maxHeight,minWidth:f.minWidth,minHeight:d._minHeight(),
+handles:a,start:function(e,h){c(this).addClass("ui-dialog-resizing");d._trigger("resizeStart",e,b(h))},resize:function(e,h){d._trigger("resize",e,b(h))},stop:function(e,h){c(this).removeClass("ui-dialog-resizing");f.height=c(this).height();f.width=c(this).width();d._trigger("resizeStop",e,b(h));c.ui.dialog.overlay.resize()}}).css("position",g).find(".ui-resizable-se").addClass("ui-icon ui-icon-grip-diagonal-se")},_minHeight:function(){var a=this.options;return a.height==="auto"?a.minHeight:Math.min(a.minHeight,
+a.height)},_position:function(a){var b=[],d=[0,0],f;if(a){if(typeof a==="string"||typeof a==="object"&&"0"in a){b=a.split?a.split(" "):[a[0],a[1]];if(b.length===1)b[1]=b[0];c.each(["left","top"],function(g,e){if(+b[g]===b[g]){d[g]=b[g];b[g]=e}});a={my:b.join(" "),at:b.join(" "),offset:d.join(" ")}}a=c.extend({},c.ui.dialog.prototype.options.position,a)}else a=c.ui.dialog.prototype.options.position;(f=this.uiDialog.is(":visible"))||this.uiDialog.show();this.uiDialog.css({top:0,left:0}).position(a);
+f||this.uiDialog.hide()},_setOption:function(a,b){var d=this,f=d.uiDialog,g=f.is(":data(resizable)"),e=false;switch(a){case "beforeclose":a="beforeClose";break;case "buttons":d._createButtons(b);e=true;break;case "closeText":d.uiDialogTitlebarCloseText.text(""+b);break;case "dialogClass":f.removeClass(d.options.dialogClass).addClass("ui-dialog ui-widget ui-widget-content ui-corner-all "+b);break;case "disabled":b?f.addClass("ui-dialog-disabled"):f.removeClass("ui-dialog-disabled");break;case "draggable":b?
+d._makeDraggable():f.draggable("destroy");break;case "height":e=true;break;case "maxHeight":g&&f.resizable("option","maxHeight",b);e=true;break;case "maxWidth":g&&f.resizable("option","maxWidth",b);e=true;break;case "minHeight":g&&f.resizable("option","minHeight",b);e=true;break;case "minWidth":g&&f.resizable("option","minWidth",b);e=true;break;case "position":d._position(b);break;case "resizable":g&&!b&&f.resizable("destroy");g&&typeof b==="string"&&f.resizable("option","handles",b);!g&&b!==false&&
+d._makeResizable(b);break;case "title":c(".ui-dialog-title",d.uiDialogTitlebar).html(""+(b||"&#160;"));break;case "width":e=true;break}c.Widget.prototype._setOption.apply(d,arguments);e&&d._size()},_size:function(){var a=this.options,b;this.element.css({width:"auto",minHeight:0,height:0});if(a.minWidth>a.width)a.width=a.minWidth;b=this.uiDialog.css({height:"auto",width:a.width}).height();this.element.css(a.height==="auto"?{minHeight:Math.max(a.minHeight-b,0),height:"auto"}:{minHeight:0,height:Math.max(a.height-
+b,0)}).show();this.uiDialog.is(":data(resizable)")&&this.uiDialog.resizable("option","minHeight",this._minHeight())}});c.extend(c.ui.dialog,{version:"1.8.4",uuid:0,maxZ:0,getTitleId:function(a){a=a.attr("id");if(!a){this.uuid+=1;a=this.uuid}return"ui-dialog-title-"+a},overlay:function(a){this.$el=c.ui.dialog.overlay.create(a)}});c.extend(c.ui.dialog.overlay,{instances:[],oldInstances:[],maxZ:0,events:c.map("focus,mousedown,mouseup,keydown,keypress,click".split(","),function(a){return a+".dialog-overlay"}).join(" "),
+create:function(a){if(this.instances.length===0){setTimeout(function(){c.ui.dialog.overlay.instances.length&&c(document).bind(c.ui.dialog.overlay.events,function(d){return c(d.target).zIndex()>=c.ui.dialog.overlay.maxZ})},1);c(document).bind("keydown.dialog-overlay",function(d){if(a.options.closeOnEscape&&d.keyCode&&d.keyCode===c.ui.keyCode.ESCAPE){a.close(d);d.preventDefault()}});c(window).bind("resize.dialog-overlay",c.ui.dialog.overlay.resize)}var b=(this.oldInstances.pop()||c("<div></div>").addClass("ui-widget-overlay")).appendTo(document.body).css({width:this.width(),
+height:this.height()});c.fn.bgiframe&&b.bgiframe();this.instances.push(b);return b},destroy:function(a){this.oldInstances.push(this.instances.splice(c.inArray(a,this.instances),1)[0]);this.instances.length===0&&c([document,window]).unbind(".dialog-overlay");a.remove();var b=0;c.each(this.instances,function(){b=Math.max(b,this.css("z-index"))});this.maxZ=b},height:function(){var a,b;if(c.browser.msie&&c.browser.version<7){a=Math.max(document.documentElement.scrollHeight,document.body.scrollHeight);
+b=Math.max(document.documentElement.offsetHeight,document.body.offsetHeight);return a<b?c(window).height()+"px":a+"px"}else return c(document).height()+"px"},width:function(){var a,b;if(c.browser.msie&&c.browser.version<7){a=Math.max(document.documentElement.scrollWidth,document.body.scrollWidth);b=Math.max(document.documentElement.offsetWidth,document.body.offsetWidth);return a<b?c(window).width()+"px":a+"px"}else return c(document).width()+"px"},resize:function(){var a=c([]);c.each(c.ui.dialog.overlay.instances,
+function(){a=a.add(this)});a.css({width:0,height:0}).css({width:c.ui.dialog.overlay.width(),height:c.ui.dialog.overlay.height()})}});c.extend(c.ui.dialog.overlay.prototype,{destroy:function(){c.ui.dialog.overlay.destroy(this.$el)}})})(jQuery);
+; \ No newline at end of file
diff --git a/h-source/Js/jquery/images/ajax-loader.png b/h-source/Js/jquery/images/ajax-loader.png
new file mode 100644
index 0000000..811a2cd
--- /dev/null
+++ b/h-source/Js/jquery/images/ajax-loader.png
Binary files differ
diff --git a/h-source/Js/jquery/images/icon-search-black.png b/h-source/Js/jquery/images/icon-search-black.png
new file mode 100644
index 0000000..5721120
--- /dev/null
+++ b/h-source/Js/jquery/images/icon-search-black.png
Binary files differ
diff --git a/h-source/Js/jquery/images/icons-18-black.png b/h-source/Js/jquery/images/icons-18-black.png
new file mode 100644
index 0000000..1ecfd26
--- /dev/null
+++ b/h-source/Js/jquery/images/icons-18-black.png
Binary files differ
diff --git a/h-source/Js/jquery/images/icons-18-white.png b/h-source/Js/jquery/images/icons-18-white.png
new file mode 100644
index 0000000..0c70831
--- /dev/null
+++ b/h-source/Js/jquery/images/icons-18-white.png
Binary files differ
diff --git a/h-source/Js/jquery/images/icons-36-black.png b/h-source/Js/jquery/images/icons-36-black.png
new file mode 100644
index 0000000..4c72adf
--- /dev/null
+++ b/h-source/Js/jquery/images/icons-36-black.png
Binary files differ
diff --git a/h-source/Js/jquery/images/icons-36-white.png b/h-source/Js/jquery/images/icons-36-white.png
new file mode 100644
index 0000000..84ea9fb
--- /dev/null
+++ b/h-source/Js/jquery/images/icons-36-white.png
Binary files differ
diff --git a/h-source/Js/jquery/jquery-1.7.1.min.js b/h-source/Js/jquery/jquery-1.7.1.min.js
new file mode 100644
index 0000000..198b3ff
--- /dev/null
+++ b/h-source/Js/jquery/jquery-1.7.1.min.js
@@ -0,0 +1,4 @@
+/*! jQuery v1.7.1 jquery.com | jquery.org/license */
+(function(a,b){function cy(a){return f.isWindow(a)?a:a.nodeType===9?a.defaultView||a.parentWindow:!1}function cv(a){if(!ck[a]){var b=c.body,d=f("<"+a+">").appendTo(b),e=d.css("display");d.remove();if(e==="none"||e===""){cl||(cl=c.createElement("iframe"),cl.frameBorder=cl.width=cl.height=0),b.appendChild(cl);if(!cm||!cl.createElement)cm=(cl.contentWindow||cl.contentDocument).document,cm.write((c.compatMode==="CSS1Compat"?"<!doctype html>":"")+"<html><body>"),cm.close();d=cm.createElement(a),cm.body.appendChild(d),e=f.css(d,"display"),b.removeChild(cl)}ck[a]=e}return ck[a]}function cu(a,b){var c={};f.each(cq.concat.apply([],cq.slice(0,b)),function(){c[this]=a});return c}function ct(){cr=b}function cs(){setTimeout(ct,0);return cr=f.now()}function cj(){try{return new a.ActiveXObject("Microsoft.XMLHTTP")}catch(b){}}function ci(){try{return new a.XMLHttpRequest}catch(b){}}function cc(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;g<i;g++){if(g===1)for(h in a.converters)typeof h=="string"&&(e[h.toLowerCase()]=a.converters[h]);l=k,k=d[g];if(k==="*")k=l;else if(l!=="*"&&l!==k){m=l+" "+k,n=e[m]||e["* "+k];if(!n){p=b;for(o in e){j=o.split(" ");if(j[0]===l||j[0]==="*"){p=e[j[1]+" "+k];if(p){o=e[o],o===!0?n=p:p===!0&&(n=o);break}}}}!n&&!p&&f.error("No conversion from "+m.replace(" "," to ")),n!==!0&&(c=n?n(c):p(o(c)))}}return c}function cb(a,c,d){var e=a.contents,f=a.dataTypes,g=a.responseFields,h,i,j,k;for(i in g)i in d&&(c[g[i]]=d[i]);while(f[0]==="*")f.shift(),h===b&&(h=a.mimeType||c.getResponseHeader("content-type"));if(h)for(i in e)if(e[i]&&e[i].test(h)){f.unshift(i);break}if(f[0]in d)j=f[0];else{for(i in d){if(!f[0]||a.converters[i+" "+f[0]]){j=i;break}k||(k=i)}j=j||k}if(j){j!==f[0]&&f.unshift(j);return d[j]}}function ca(a,b,c,d){if(f.isArray(b))f.each(b,function(b,e){c||bE.test(a)?d(a,e):ca(a+"["+(typeof e=="object"||f.isArray(e)?b:"")+"]",e,c,d)});else if(!c&&b!=null&&typeof b=="object")for(var e in b)ca(a+"["+e+"]",b[e],c,d);else d(a,b)}function b_(a,c){var d,e,g=f.ajaxSettings.flatOptions||{};for(d in c)c[d]!==b&&((g[d]?a:e||(e={}))[d]=c[d]);e&&f.extend(!0,a,e)}function b$(a,c,d,e,f,g){f=f||c.dataTypes[0],g=g||{},g[f]=!0;var h=a[f],i=0,j=h?h.length:0,k=a===bT,l;for(;i<j&&(k||!l);i++)l=h[i](c,d,e),typeof l=="string"&&(!k||g[l]?l=b:(c.dataTypes.unshift(l),l=b$(a,c,d,e,l,g)));(k||!l)&&!g["*"]&&(l=b$(a,c,d,e,"*",g));return l}function bZ(a){return function(b,c){typeof b!="string"&&(c=b,b="*");if(f.isFunction(c)){var d=b.toLowerCase().split(bP),e=0,g=d.length,h,i,j;for(;e<g;e++)h=d[e],j=/^\+/.test(h),j&&(h=h.substr(1)||"*"),i=a[h]=a[h]||[],i[j?"unshift":"push"](c)}}}function bC(a,b,c){var d=b==="width"?a.offsetWidth:a.offsetHeight,e=b==="width"?bx:by,g=0,h=e.length;if(d>0){if(c!=="border")for(;g<h;g++)c||(d-=parseFloat(f.css(a,"padding"+e[g]))||0),c==="margin"?d+=parseFloat(f.css(a,c+e[g]))||0:d-=parseFloat(f.css(a,"border"+e[g]+"Width"))||0;return d+"px"}d=bz(a,b,b);if(d<0||d==null)d=a.style[b]||0;d=parseFloat(d)||0;if(c)for(;g<h;g++)d+=parseFloat(f.css(a,"padding"+e[g]))||0,c!=="padding"&&(d+=parseFloat(f.css(a,"border"+e[g]+"Width"))||0),c==="margin"&&(d+=parseFloat(f.css(a,c+e[g]))||0);return d+"px"}function bp(a,b){b.src?f.ajax({url:b.src,async:!1,dataType:"script"}):f.globalEval((b.text||b.textContent||b.innerHTML||"").replace(bf,"/*$0*/")),b.parentNode&&b.parentNode.removeChild(b)}function bo(a){var b=c.createElement("div");bh.appendChild(b),b.innerHTML=a.outerHTML;return b.firstChild}function bn(a){var b=(a.nodeName||"").toLowerCase();b==="input"?bm(a):b!=="script"&&typeof a.getElementsByTagName!="undefined"&&f.grep(a.getElementsByTagName("input"),bm)}function bm(a){if(a.type==="checkbox"||a.type==="radio")a.defaultChecked=a.checked}function bl(a){return typeof a.getElementsByTagName!="undefined"?a.getElementsByTagName("*"):typeof a.querySelectorAll!="undefined"?a.querySelectorAll("*"):[]}function bk(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 bj(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<e;d++)f.event.add(b,c+(i[c][d].namespace?".":"")+i[c][d].namespace,i[c][d],i[c][d].data)}h.data&&(h.data=f.extend({},h.data))}}function bi(a,b){return f.nodeName(a,"table")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function U(a){var b=V.split("|"),c=a.createDocumentFragment();if(c.createElement)while(b.length)c.createElement(b.pop());return c}function T(a,b,c){b=b||0;if(f.isFunction(b))return f.grep(a,function(a,d){var e=!!b.call(a,d,a);return e===c});if(b.nodeType)return f.grep(a,function(a,d){return a===b===c});if(typeof b=="string"){var d=f.grep(a,function(a){return a.nodeType===1});if(O.test(b))return f.filter(b,d,!c);b=f.filter(b,d)}return f.grep(a,function(a,d){return f.inArray(a,b)>=0===c})}function S(a){return!a||!a.parentNode||a.parentNode.nodeType===11}function K(){return!0}function J(){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<d;c++)b[a[c]]=!0;return b}var c=a.document,d=a.navigator,e=a.location,f=function(){function J(){if(!e.isReady){try{c.documentElement.doScroll("left")}catch(a){setTimeout(J,1);return}e.ready()}}var e=function(a,b){return new e.fn.init(a,b,h)},f=a.jQuery,g=a.$,h,i=/^(?:[^#<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/,j=/\S/,k=/^\s+/,l=/\s+$/,m=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,n=/^[\],:{}\s]*$/,o=/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,p=/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,q=/(?:^|:|,)(?:\s*\[)+/g,r=/(webkit)[ \/]([\w.]+)/,s=/(opera)(?:.*version)?[ \/]([\w.]+)/,t=/(msie) ([\w.]+)/,u=/(mozilla)(?:.*? rv:([\w.]+))?/,v=/-([a-z]|[0-9])/ig,w=/^-ms-/,x=function(a,b){return(b+"").toUpperCase()},y=d.userAgent,z,A,B,C=Object.prototype.toString,D=Object.prototype.hasOwnProperty,E=Array.prototype.push,F=Array.prototype.slice,G=String.prototype.trim,H=Array.prototype.indexOf,I={};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=m.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.1",length:0,size:function(){return this.length},toArray:function(){return F.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)?E.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(),A.add(a);return this},eq:function(a){a=+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(F.apply(this,arguments),"slice",F.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:E,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(;j<k;j++)if((a=arguments[j])!=null)for(c in a){d=i[c],f=a[c];if(i===f)continue;l&&f&&(e.isPlainObject(f)||(g=e.isArray(f)))?(g?(g=!1,h=d&&e.isArray(d)?d:[]):h=d&&e.isPlainObject(d)?d:{},i[c]=e.extend(l,h,f)):f!==b&&(i[c]=f)}return i},e.extend({noConflict:function(b){a.$===e&&(a.$=g),b&&a.jQuery===e&&(a.jQuery=f);return e},isReady:!1,readyWait:1,holdReady:function(a){a?e.readyWait++:e.ready(!0)},ready:function(a){if(a===!0&&!--e.readyWait||a!==!0&&!e.isReady){if(!c.body)return setTimeout(e.ready,1);e.isReady=!0;if(a!==!0&&--e.readyWait>0)return;A.fireWith(c,[e]),e.fn.trigger&&e(c).trigger("ready").off("ready")}},bindReady:function(){if(!A){A=e.Callbacks("once memory");if(c.readyState==="complete")return setTimeout(e.ready,1);if(c.addEventListener)c.addEventListener("DOMContentLoaded",B,!1),a.addEventListener("load",e.ready,!1);else if(c.attachEvent){c.attachEvent("onreadystatechange",B),a.attachEvent("onload",e.ready);var b=!1;try{b=a.frameElement==null}catch(d){}c.documentElement.doScroll&&b&&J()}}},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!isNaN(parseFloat(a))&&isFinite(a)},type:function(a){return a==null?String(a):I[C.call(a)]||"object"},isPlainObject:function(a){if(!a||e.type(a)!=="object"||a.nodeType||e.isWindow(a))return!1;try{if(a.constructor&&!D.call(a,"constructor")&&!D.call(a.constructor.prototype,"isPrototypeOf"))return!1}catch(c){return!1}var d;for(d in a);return d===b||D.call(a,d)},isEmptyObject:function(a){for(var b in a)return!1;return!0},error:function(a){throw new Error(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(n.test(b.replace(o,"@").replace(p,"]").replace(q,"")))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(w,"ms-").replace(v,x)},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(;g<h;)if(c.apply(a[g++],d)===!1)break}else if(i){for(f in a)if(c.call(a[f],f,a[f])===!1)break}else for(;g<h;)if(c.call(a[g],g,a[g++])===!1)break;return a},trim:G?function(a){return a==null?"":G.call(a)}:function(a){return a==null?"":(a+"").replace(k,"").replace(l,"")},makeArray:function(a,b){var c=b||[];if(a!=null){var d=e.type(a);a.length==null||d==="string"||d==="function"||d==="regexp"||e.isWindow(a)?E.call(c,a):e.merge(c,a)}return c},inArray:function(a,b,c){var d;if(b){if(H)return H.call(b,a,c);d=b.length,c=c?c<0?Math.max(0,d+c):c:0;for(;c<d;c++)if(c in b&&b[c]===a)return c}return-1},merge:function(a,c){var d=a.length,e=0;if(typeof c.length=="number")for(var f=c.length;e<f;e++)a[d++]=c[e];else while(c[e]!==b)a[d++]=c[e++];a.length=d;return a},grep:function(a,b,c){var d=[],e;c=!!c;for(var f=0,g=a.length;f<g;f++)e=!!b(a[f],f),c!==e&&d.push(a[f]);return d},map:function(a,c,d){var f,g,h=[],i=0,j=a.length,k=a instanceof e||j!==b&&typeof j=="number"&&(j>0&&a[0]&&a[j-1]||j===0||e.isArray(a));if(k)for(;i<j;i++)f=c(a[i],i,d),f!=null&&(h[h.length]=f);else for(g in a)f=c(a[g],g,d),f!=null&&(h[h.length]=f);return h.concat.apply([],h)},guid:1,proxy:function(a,c){if(typeof c=="string"){var d=a[c];c=a,a=d}if(!e.isFunction(a))return b;var f=F.call(arguments,2),g=function(){return a.apply(c,f.concat(F.call(arguments)))};g.guid=a.guid=a.guid||g.guid||e.guid++;return g},access:function(a,c,d,f,g,h){var i=a.length;if(typeof c=="object"){for(var j in c)e.access(a,j,c[j],f,g,d);return a}if(d!==b){f=!h&&f&&e.isFunction(d);for(var k=0;k<i;k++)g(a[k],c,f?d.call(a[k],k,g(a[k],c)):d,h);return a}return i?g(a[0],c):b},now:function(){return(new Date).getTime()},uaMatch:function(a){a=a.toLowerCase();var b=r.exec(a)||s.exec(a)||t.exec(a)||a.indexOf("compatible")<0&&u.exec(a)||[];return{browser:b[1]||"",version:b[2]||"0"}},sub:function(){function a(b,c){return new a.fn.init(b,c)}e.extend(!0,a,this),a.superclass=this,a.fn=a.prototype=this(),a.fn.constructor=a,a.sub=this.sub,a.fn.init=function(d,f){f&&f instanceof e&&!(f instanceof a)&&(f=a(f));return e.fn.init.call(this,d,f,b)},a.fn.init.prototype=a.fn;var b=a(c);return a},browser:{}}),e.each("Boolean Number String Function Array Date RegExp Object".split(" "),function(a,b){I["[object "+b+"]"]=b.toLowerCase()}),z=e.uaMatch(y),z.browser&&(e.browser[z.browser]=!0,e.browser.version=z.version),e.browser.webkit&&(e.browser.safari=!0),j.test(" ")&&(k=/^[\s\xA0]+/,l=/[\s\xA0]+$/),h=e(c),c.addEventListener?B=function(){c.removeEventListener("DOMContentLoaded",B,!1),e.ready()}:c.attachEvent&&(B=function(){c.readyState==="complete"&&(c.detachEvent("onreadystatechange",B),e.ready())});return e}(),g={};f.Callbacks=function(a){a=a?g[a]||h(a):{};var c=[],d=[],e,i,j,k,l,m=function(b){var d,e,g,h,i;for(d=0,e=b.length;d<e;d++)g=b[d],h=f.type(g),h==="array"?m(g):h==="function"&&(!a.unique||!o.has(g))&&c.push(g)},n=function(b,f){f=f||[],e=!a.memory||[b,f],i=!0,l=j||0,j=0,k=c.length;for(;c&&l<k;l++)if(c[l].apply(b,f)===!1&&a.stopOnFalse){e=!0;break}i=!1,c&&(a.once?e===!0?o.disable():c=[]:d&&d.length&&(e=d.shift(),o.fireWith(e[0],e[1])))},o={add:function(){if(c){var a=c.length;m(arguments),i?k=c.length:e&&e!==!0&&(j=a,n(e[0],e[1]))}return this},remove:function(){if(c){var b=arguments,d=0,e=b.length;for(;d<e;d++)for(var f=0;f<c.length;f++)if(b[d]===c[f]){i&&f<=k&&(k--,f<=l&&l--),c.splice(f--,1);if(a.unique)break}}return this},has:function(a){if(c){var b=0,d=c.length;for(;b<d;b++)if(a===c[b])return!0}return!1},empty:function(){c=[];return this},disable:function(){c=d=e=b;return this},disabled:function(){return!c},lock:function(){d=b,(!e||e===!0)&&o.disable();return this},locked:function(){return!d},fireWith:function(b,c){d&&(i?a.once||d.push([b,c]):(!a.once||!e)&&n(b,c));return this},fire:function(){o.fireWith(this,arguments);return this},fired:function(){return!!e}};return o};var i=[].slice;f.extend({Deferred:function(a){var b=f.Callbacks("once memory"),c=f.Callbacks("once memory"),d=f.Callbacks("memory"),e="pending",g={resolve:b,reject:c,notify:d},h={done:b.add,fail:c.add,progress:d.add,state:function(){return e},isResolved:b.fired,isRejected:c.fired,then:function(a,b,c){i.done(a).fail(b).progress(c);return this},always:function(){i.done.apply(i,arguments).fail.apply(i,arguments);return this},pipe:function(a,b,c){return f.Deferred(function(d){f.each({done:[a,"resolve"],fail:[b,"reject"],progress:[c,"notify"]},function(a,b){var c=b[0],e=b[1],g;f.isFunction(c)?i[a](function(){g=c.apply(this,arguments),g&&f.isFunction(g.promise)?g.promise().then(d.resolve,d.reject,d.notify):d[e+"With"](this===i?d:this,[g])}):i[a](d[e])})}).promise()},promise:function(a){if(a==null)a=h;else for(var b in h)a[b]=h[b];return a}},i=h.promise({}),j;for(j in g)i[j]=g[j].fire,i[j+"With"]=g[j].fireWith;i.done(function(){e="resolved"},c.disable,d.lock).fail(function(){e="rejected"},b.disable,d.lock),a&&a.call(i,i);return i},when:function(a){function m(a){return function(b){e[a]=arguments.length>1?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<d;c++)b[c]&&b[c].promise&&f.isFunction(b[c].promise)?b[c].promise().then(l(c),j.reject,m(c)):--g;g||j.resolveWith(j,b)}else j!==a&&j.resolveWith(j,d?[a]:[]);return k}}),f.support=function(){var b,d,e,g,h,i,j,k,l,m,n,o,p,q=c.createElement("div"),r=c.documentElement;q.setAttribute("className","t"),q.innerHTML=" <link/><table></table><a href='/a' style='top:1px;float:left;opacity:.55;'>a</a><input type='checkbox'/>",d=q.getElementsByTagName("*"),e=q.getElementsByTagName("a")[0];if(!d||!d.length||!e)return{};g=c.createElement("select"),h=g.appendChild(c.createElement("option")),i=q.getElementsByTagName("input")[0],b={leadingWhitespace:q.firstChild.nodeType===3,tbody:!q.getElementsByTagName("tbody").length,htmlSerialize:!!q.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,checkOn:i.value==="on",optSelected:h.selected,getSetAttribute:q.className!=="t",enctype:!!c.createElement("form").enctype,html5Clone:c.createElement("nav").cloneNode(!0).outerHTML!=="<:nav></:nav>",submitBubbles:!0,changeBubbles:!0,focusinBubbles:!1,deleteExpando:!0,noCloneEvent:!0,inlineBlockNeedsLayout:!1,shrinkWrapBlocks:!1,reliableMarginRight:!0},i.checked=!0,b.noCloneChecked=i.cloneNode(!0).checked,g.disabled=!0,b.optDisabled=!h.disabled;try{delete q.test}catch(s){b.deleteExpando=!1}!q.addEventListener&&q.attachEvent&&q.fireEvent&&(q.attachEvent("onclick",function(){b.noCloneEvent=!1}),q.cloneNode(!0).fireEvent("onclick")),i=c.createElement("input"),i.value="t",i.setAttribute("type","radio"),b.radioValue=i.value==="t",i.setAttribute("checked","checked"),q.appendChild(i),k=c.createDocumentFragment(),k.appendChild(q.lastChild),b.checkClone=k.cloneNode(!0).cloneNode(!0).lastChild.checked,b.appendChecked=i.checked,k.removeChild(i),k.appendChild(q),q.innerHTML="",a.getComputedStyle&&(j=c.createElement("div"),j.style.width="0",j.style.marginRight="0",q.style.width="2px",q.appendChild(j),b.reliableMarginRight=(parseInt((a.getComputedStyle(j,null)||{marginRight:0}).marginRight,10)||0)===0);if(q.attachEvent)for(o in{submit:1,change:1,focusin:1})n="on"+o,p=n in q,p||(q.setAttribute(n,"return;"),p=typeof q[n]=="function"),b[o+"Bubbles"]=p;k.removeChild(q),k=g=h=j=q=i=null,f(function(){var a,d,e,g,h,i,j,k,m,n,o,r=c.getElementsByTagName("body")[0];!r||(j=1,k="position:absolute;top:0;left:0;width:1px;height:1px;margin:0;",m="visibility:hidden;border:0;",n="style='"+k+"border:5px solid #000;padding:0;'",o="<div "+n+"><div></div></div>"+"<table "+n+" cellpadding='0' cellspacing='0'>"+"<tr><td></td></tr></table>",a=c.createElement("div"),a.style.cssText=m+"width:0;height:0;position:static;top:0;margin-top:"+j+"px",r.insertBefore(a,r.firstChild),q=c.createElement("div"),a.appendChild(q),q.innerHTML="<table><tr><td style='padding:0;border:0;display:none'></td><td>t</td></tr></table>",l=q.getElementsByTagName("td"),p=l[0].offsetHeight===0,l[0].style.display="",l[1].style.display="none",b.reliableHiddenOffsets=p&&l[0].offsetHeight===0,q.innerHTML="",q.style.width=q.style.paddingLeft="1px",f.boxModel=b.boxModel=q.offsetWidth===2,typeof q.style.zoom!="undefined"&&(q.style.display="inline",q.style.zoom=1,b.inlineBlockNeedsLayout=q.offsetWidth===2,q.style.display="",q.innerHTML="<div style='width:4px;'></div>",b.shrinkWrapBlocks=q.offsetWidth!==2),q.style.cssText=k+m,q.innerHTML=o,d=q.firstChild,e=d.firstChild,h=d.nextSibling.firstChild.firstChild,i={doesNotAddBorder:e.offsetTop!==5,doesAddBorderForTableAndCells:h.offsetTop===5},e.style.position="fixed",e.style.top="20px",i.fixedPosition=e.offsetTop===20||e.offsetTop===15,e.style.position=e.style.top="",d.style.overflow="hidden",d.style.position="relative",i.subtractsBorderForOverflowNotVisible=e.offsetTop===-5,i.doesNotIncludeMarginInBodyOffset=r.offsetTop!==j,r.removeChild(a),q=a=null,f.extend(b,i))});return b}();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[j]:a[j]&&j,o=c==="events";if((!n||!m[n]||!o&&!e&&!m[n].data)&&k&&d===b)return;n||(l?a[j]=n=++f.uuid:n=j),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[h]:h;if(!j[k])return;if(b){d=c?j[k]:j[k].data;if(d){f.isArray(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<g;e++)delete d[b[e]];if(!(c?m:f.isEmptyObject)(d))return}}if(!c){delete j[k].data;if(!m(j[k]))return}f.support.deleteExpando||!j.setInterval?delete j[k]:j[k]=null,i&&(f.support.deleteExpando?delete a[h]:a.removeAttribute?a.removeAttribute(h):a[h]=null)}},_data:function(a,b,c){return f.data(a,b,c,!0)},acceptData:function(a){if(a.nodeName){var b=f.noData[a.nodeName.toLowerCase()];if(b)return b!==!0&&a.getAttribute("classid")===b}return!0}}),f.fn.extend({data:function(a,c){var d,e,g,h=null;if(typeof a=="undefined"){if(this.length){h=f.data(this[0]);if(this[0].nodeType===1&&!f._data(this[0],"parsedAttrs")){e=this[0].attributes;for(var i=0,j=e.length;i<j;i++)g=e[i].name,g.indexOf("data-")===0&&(g=f.camelCase(g.substring(5)),l(this[0],g,h[g]));f._data(this[0],"parsedAttrs",!0)}}return h}if(typeof a=="object")return this.each(function(){f.data(this,a)});d=a.split("."),d[1]=d[1]?"."+d[1]:"";if(c===b){h=this.triggerHandler("getData"+d[1]+"!",[d[0]]),h===b&&this.length&&(h=f.data(this[0],a),h=l(this[0],a,h));return h===b&&d[1]?this.data(d[0]):h}return this.each(function(){var b=f(this),e=[d[0],c];b.triggerHandler("setData"+d[1]+"!",e),f.data(this,a,c),b.triggerHandler("changeData"+d[1]+"!",e)})},removeData:function(a){return this.each(function(){f.removeData(this,a)})}}),f.extend({_mark:function(a,b){a&&(b=(b||"fx")+"mark",f._data(a,b,(f._data(a,b)||0)+1))},_unmark:function(a,b,c){a!==!0&&(c=b,b=a,a=!1);if(b){c=c||"fx";var d=c+"mark",e=a?0:(f._data(b,d)||1)-1;e?f._data(b,d,e):(f.removeData(b,d,!0),n(b,c,"mark"))}},queue:function(a,b,c){var d;if(a){b=(b||"fx")+"queue",d=f._data(a,b),c&&(!d||f.isArray(c)?d=f._data(a,b,f.makeArray(c)):d.push(c));return d||[]}},dequeue:function(a,b){b=b||"fx";var c=f.queue(a,b),d=c.shift(),e={};d==="inprogress"&&(d=c.shift()),d&&(b==="fx"&&c.unshift("inprogress"),f._data(a,b+".run",e),d.call(a,function(){f.dequeue(a,b)},e)),c.length||(f.removeData(a,b+"queue "+b+".run",!0),n(a,b,"queue"))}}),f.fn.extend({queue:function(a,c){typeof a!="string"&&(c=a,a="fx");if(c===b)return f.queue(this[0],a);return this.each(function(){var b=f.queue(this,a,c);a==="fx"&&b[0]!=="inprogress"&&f.dequeue(this,a)})},dequeue:function(a){return this.each(function(){f.dequeue(this,a)})},delay:function(a,b){a=f.fx?f.fx.speeds[a]||a:a,b=b||"fx";return this.queue(b,function(b,c){var d=setTimeout(b,a);c.stop=function(){clearTimeout(d)}})},clearQueue:function(a){return this.queue(a||"fx",[])},promise:function(a,c){function m(){--h||d.resolveWith(e,[e])}typeof a!="string"&&(c=a,a=b),a=a||"fx";var d=f.Deferred(),e=this,g=e.length,h=1,i=a+"defer",j=a+"queue",k=a+"mark",l;while(g--)if(l=f.data(e[g],i,b,!0)||(f.data(e[g],j,b,!0)||f.data(e[g],k,b,!0))&&f.data(e[g],i,f.Callbacks("once memory"),!0))h++,l.add(m);m();return d.promise()}});var o=/[\n\t\r]/g,p=/\s+/,q=/\r/g,r=/^(?:button|input)$/i,s=/^(?:button|input|object|select|textarea)$/i,t=/^a(?:rea)?$/i,u=/^(?:autofocus|autoplay|async|checked|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped|selected)$/i,v=f.support.getSetAttribute,w,x,y;f.fn.extend({attr:function(a,b){return f.access(this,a,b,!0,f.attr)},removeAttr:function(a){return this.each(function(){f.removeAttr(this,a)})},prop:function(a,b){return f.access(this,a,b,!0,f.prop)},removeProp:function(a){a=f.propFix[a]||a;return this.each(function(){try{this[a]=b,delete this[a]}catch(c){}})},addClass:function(a){var b,c,d,e,g,h,i;if(f.isFunction(a))return this.each(function(b){f(this).addClass(a.call(this,b,this.className))});if(a&&typeof a=="string"){b=a.split(p);for(c=0,d=this.length;c<d;c++){e=this[c];if(e.nodeType===1)if(!e.className&&b.length===1)e.className=a;else{g=" "+e.className+" ";for(h=0,i=b.length;h<i;h++)~g.indexOf(" "+b[h]+" ")||(g+=b[h]+" ");e.className=f.trim(g)}}}return this},removeClass:function(a){var c,d,e,g,h,i,j;if(f.isFunction(a))return this.each(function(b){f(this).removeClass(a.call(this,b,this.className))});if(a&&typeof a=="string"||a===b){c=(a||"").split(p);for(d=0,e=this.length;d<e;d++){g=this[d];if(g.nodeType===1&&g.className)if(a){h=(" "+g.className+" ").replace(o," ");for(i=0,j=c.length;i<j;i++)h=h.replace(" "+c[i]+" "," ");g.className=f.trim(h)}else g.className=""}}return this},toggleClass:function(a,b){var c=typeof a,d=typeof b=="boolean";if(f.isFunction(a))return this.each(function(c){f(this).toggleClass(a.call(this,c,this.className,b),b)});return this.each(function(){if(c==="string"){var e,g=0,h=f(this),i=b,j=a.split(p);while(e=j[g++])i=d?i:!h.hasClass(e),h[i?"addClass":"removeClass"](e)}else if(c==="undefined"||c==="boolean")this.className&&f._data(this,"__className__",this.className),this.className=this.className||a===!1?"":f._data(this,"__className__")||""})},hasClass:function(a){var b=" "+a+" ",c=0,d=this.length;for(;c<d;c++)if(this[c].nodeType===1&&(" "+this[c].className+" ").replace(o," ").indexOf(b)>-1)return!0;return!1},val:function(a){var c,d,e,g=this[0];{if(!!arguments.length){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}})}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}}}}),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<d;c++){e=i[c];if(e.selected&&(f.support.optDisabled?!e.disabled:e.getAttribute("disabled")===null)&&(!e.parentNode.disabled||!f.nodeName(e.parentNode,"optgroup"))){b=f(e).val();if(j)return b;h.push(b)}}if(j&&!h.length&&i.length)return f(i[g]).val();return h},set:function(a,b){var c=f.makeArray(b);f(a).find("option").each(function(){this.selected=f.inArray(f(this).val(),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){if(e&&c in f.attrFn)return f(a)[c](d);if(typeof a.getAttribute=="undefined")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}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(b&&a.nodeType===1){d=b.toLowerCase().split(p),g=d.length;for(;h<g;h++)e=d[h],e&&(c=f.propFix[e]||e,f.attr(a,e,""),a.removeAttribute(v?e:c),u.test(e)&&c in a&&(a[c]=!1))}},attrHooks:{type:{set:function(a,b){if(r.test(a.nodeName)&&a.parentNode)f.error("type property can't be changed");else if(!f.support.radioValue&&b==="radio"&&f.nodeName(a,"input")){var c=a.value;a.setAttribute("type",b),c&&(a.value=c);return b}}},value:{get:function(a,b){if(w&&f.nodeName(a,"button"))return w.get(a,b);return b in a?a.value:null},set:function(a,b,c){if(w&&f.nodeName(a,"button"))return w.set(a,b,c);a.value=b}}},propFix:{tabindex:"tabIndex",readonly:"readOnly","for":"htmlFor","class":"className",maxlength:"maxLength",cellspacing:"cellSpacing",cellpadding:"cellPadding",rowspan:"rowSpan",colspan:"colSpan",usemap:"useMap",frameborder:"frameBorder",contenteditable:"contentEditable"},prop:function(a,c,d){var e,g,h,i=a.nodeType;if(!!a&&i!==3&&i!==8&&i!==2){h=i!==1||!f.isXMLDoc(a),h&&(c=f.propFix[c]||c,g=f.propHooks[c]);return d!==b?g&&"set"in g&&(e=g.set(a,d,c))!==b?e:a[c]=d:g&&"get"in g&&(e=g.get(a,c))!==null?e:a[c]}},propHooks:{tabIndex:{get:function(a){var c=a.getAttributeNode("tabindex");return c&&c.specified?parseInt(c.value,10):s.test(a.nodeName)||t.test(a.nodeName)&&a.href?0:b}}}}),f.attrHooks.tabindex=f.propHooks.tabIndex,x={get:function(a,c){var d,e=f.prop(a,c);return e===!0||typeof e!="boolean"&&(d=a.getAttributeNode(c))&&d.nodeValue!==!1?c.toLowerCase():b},set:function(a,b,c){var d;b===!1?f.removeAttr(a,c):(d=f.propFix[c]||c,d in a&&(a[d]=!0),a.setAttribute(c,c.toLowerCase()));return c}},v||(y={name:!0,id:!0},w=f.valHooks.button={get:function(a,c){var d;d=a.getAttributeNode(c);return d&&(y[c]?d.nodeValue!=="":d.specified)?d.nodeValue:b},set:function(a,b,d){var e=a.getAttributeNode(d);e||(e=c.createAttribute(d),a.setAttributeNode(e));return e.nodeValue=b+""}},f.attrHooks.tabindex.set=w.set,f.each(["width","height"],function(a,b){f.attrHooks[b]=f.extend(f.attrHooks[b],{set:function(a,c){if(c===""){a.setAttribute(b,"auto");return c}}})}),f.attrHooks.contenteditable={get:w.get,set:function(a,b,c){b===""&&(b="false"),w.set(a,b,c)}}),f.support.hrefNormalized||f.each(["href","src","width","height"],function(a,c){f.attrHooks[c]=f.extend(f.attrHooks[c],{get:function(a){var d=a.getAttribute(c,2);return d===null?b:d}})}),f.support.style||(f.attrHooks.style={get:function(a){return a.style.cssText.toLowerCase()||b},set:function(a,b){return a.style.cssText=""+b}}),f.support.optSelected||(f.propHooks.selected=f.extend(f.propHooks.selected,{get:function(a){var b=a.parentNode;b&&(b.selectedIndex,b.parentNode&&b.parentNode.selectedIndex);return null}})),f.support.enctype||(f.propFix.enctype="encoding"),f.support.checkOn||f.each(["radio","checkbox"],function(){f.valHooks[this]={get:function(a){return a.getAttribute("value")===null?"on":a.value}}}),f.each(["radio","checkbox"],function(){f.valHooks[this]=f.extend(f.valHooks[this],{set:function(a,b){if(f.isArray(b))return a.checked=f.inArray(f(a).val(),b)>=0}})});var z=/^(?:textarea|input|select)$/i,A=/^([^\.]*)?(?:\.(.+))?$/,B=/\bhover(\.\S+)?\b/,C=/^key/,D=/^(?:mouse|contextmenu)|click/,E=/^(?:focusinfocus|focusoutblur)$/,F=/^(\w*)(?:#([\w\-]+))?(?:\.([\w\-]+))?$/,G=function(a){var b=F.exec(a);b&&(b[1]=(b[1]||"").toLowerCase(),b[3]=b[3]&&new RegExp("(?:^|\\s)"+b[3]+"(?:\\s|$)"));return b},H=function(a,b){var c=a.attributes||{};return(!b[1]||a.nodeName.toLowerCase()===b[1])&&(!b[2]||(c.id||{}).value===b[2])&&(!b[3]||b[3].test((c["class"]||{}).value))},I=function(a){return f.event.special.hover?a:a.replace(B,"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=f.trim(I(c)).split(" ");for(k=0;k<c.length;k++){l=A.exec(c[k])||[],m=l[1],n=(l[2]||"").split(".").sort(),s=f.event.special[m]||{},m=(g?s.delegateType:s.bindType)||m,s=f.event.special[m]||{},o=f.extend({type:m,origType:l[1],data:e,handler:d,guid:d.guid,selector:g,quick:G(g),namespace:n.join(".")},p),r=j[m];if(!r){r=j[m]=[],r.delegateCount=0;if(!s.setup||s.setup.call(a,e,n,i)===!1)a.addEventListener?a.addEventListener(m,i,!1):a.attachEvent&&a.attachEvent("on"+m,i)}s.add&&(s.add.call(a,o),o.handler.guid||(o.handler.guid=d.guid)),g?r.splice(r.delegateCount++,0,o):r.push(o),f.event.global[m]=!0}a=null}},global:{},remove:function(a,b,c,d,e){var g=f.hasData(a)&&f._data(a),h,i,j,k,l,m,n,o,p,q,r,s;if(!!g&&!!(o=g.events)){b=f.trim(I(b||"")).split(" ");for(h=0;h<b.length;h++){i=A.exec(b[h])||[],j=k=i[1],l=i[2];if(!j){for(j in o)f.event.remove(a,j+b[h],c,d,!0);continue}p=f.event.special[j]||{},j=(d?p.delegateType:p.bindType)||j,r=o[j]||[],m=r.length,l=l?new RegExp("(^|\\.)"+l.split(".").sort().join("\\.(?:.*\\.)?")+"(\\.|$)"):null;for(n=0;n<r.length;n++)s=r[n],(e||k===s.origType)&&(!c||c.guid===s.guid)&&(!l||l.test(s.namespace))&&(!d||d===s.selector||d==="**"&&s.selector)&&(r.splice(n--,1),s.selector&&r.delegateCount--,p.remove&&p.remove.call(a,s));r.length===0&&m!==r.length&&((!p.teardown||p.teardown.call(a,l)===!1)&&f.removeEvent(a,j,g.handle),delete o[j])}f.isEmptyObject(o)&&(q=g.handle,q&&(q.elem=null),f.removeData(a,["events","handle"],!0))}},customEvent:{getData:!0,setData:!0,changeData:!0},trigger:function(c,d,e,g){if(!e||e.nodeType!==3&&e.nodeType!==8){var h=c.type||c,i=[],j,k,l,m,n,o,p,q,r,s;if(E.test(h+f.event.triggered))return;h.indexOf("!")>=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:"";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,m=E.test(s+h)?e:e.parentNode,n=null;for(;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<r.length&&!c.isPropagationStopped();l++)m=r[l][0],c.type=r[l][1],q=(f._data(m,"events")||{})[c.type]&&f._data(m,"handle"),q&&q.apply(m,d),q=o&&m[o],q&&f.acceptData(m)&&q.apply(m,d)===!1&&c.preventDefault();c.type=h,!g&&!c.isDefaultPrevented()&&(!p._default||p._default.apply(e.ownerDocument,d)===!1)&&(h!=="click"||!f.nodeName(e,"a"))&&f.acceptData(e)&&o&&e[h]&&(h!=="focus"&&h!=="blur"||c.target.offsetWidth!==0)&&!f.isWindow(e)&&(n=e[o],n&&(e[o]=null),f.event.triggered=h,e[h](),f.event.triggered=b,n&&(e[o]=n));return c.result}},dispatch:function(c){c=f.event.fix(c||a.event);var d=(f._data(this,"events")||{})[c.type]||[],e=d.delegateCount,g=[].slice.call(arguments,0),h=!c.exclusive&&!c.namespace,i=[],j,k,l,m,n,o,p,q,r,s,t;g[0]=c,c.delegateTarget=this;if(e&&!c.target.disabled&&(!c.button||c.type!=="click")){m=f(this),m.context=this.ownerDocument||this;for(l=c.target;l!=this;l=l.parentNode||this){o={},q=[],m[0]=l;for(j=0;j<e;j++)r=d[j],s=r.selector,o[s]===b&&(o[s]=r.quick?H(l,r.quick):m.is(s)),o[s]&&q.push(r);q.length&&i.push({elem:l,matches:q})}}d.length>e&&i.push({elem:this,matches:d.slice(e)});for(j=0;j<i.length&&!c.isPropagationStopped();j++){p=i[j],c.currentTarget=p.elem;for(k=0;k<p.matches.length&&!c.isImmediatePropagationStopped();k++){r=p.matches[k];if(h||!c.namespace&&!r.namespace||c.namespace_re&&c.namespace_re.test(r.namespace))c.data=r.data,c.handleObj=r,n=((f.event.special[r.origType]||{}).handle||r.handler).apply(p.elem,g),n!==b&&(c.result=n,n===!1&&(c.preventDefault(),c.stopPropagation()))}}return c.result},props:"attrChange attrName relatedNode srcElement altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),fixHooks:{},keyHooks:{props:"char charCode key keyCode".split(" "),filter:function(a,b){a.which==null&&(a.which=b.charCode!=null?b.charCode:b.keyCode);return a}},mouseHooks:{props:"button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "),filter:function(a,d){var e,f,g,h=d.button,i=d.fromElement;a.pageX==null&&d.clientX!=null&&(e=a.target.ownerDocument||c,f=e.documentElement,g=e.body,a.pageX=d.clientX+(f&&f.scrollLeft||g&&g.scrollLeft||0)-(f&&f.clientLeft||g&&g.clientLeft||0),a.pageY=d.clientY+(f&&f.scrollTop||g&&g.scrollTop||0)-(f&&f.clientTop||g&&g.clientTop||0)),!a.relatedTarget&&i&&(a.relatedTarget=i===a.target?d.toElement:i),!a.which&&h!==b&&(a.which=h&1?1:h&2?3:h&4?2:0);return a}},fix:function(a){if(a[f.expando])return a;var d,e,g=a,h=f.event.fixHooks[a.type]||{},i=h.props?this.props.concat(h.props):this.props;a=f.Event(g);for(d=i.length;d;)e=i[--d],a[e]=g[e];a.target||(a.target=g.srcElement||c),a.target.nodeType===3&&(a.target=a.target.parentNode),a.metaKey===b&&(a.metaKey=a.ctrlKey);return h.filter?h.filter(a,g):a},special:{ready:{setup:f.bindReady},load:{noBubble:!0},focus:{delegateType:"focusin"},blur:{delegateType:"focusout"},beforeunload:{setup:function(a,b,c){f.isWindow(this)&&(this.onbeforeunload=c)},teardown:function(a,b){this.onbeforeunload===b&&(this.onbeforeunload=null)}}},simulate:function(a,b,c,d){var e=f.extend(new f.Event,c,{type:a,isSimulated:!0,originalEvent:{}});d?f.event.trigger(e,null,b):f.event.dispatch.call(b,e),e.isDefaultPrevented()&&c.preventDefault()}},f.event.handle=f.event.dispatch,f.removeEvent=c.removeEventListener?function(a,b,c){a.removeEventListener&&a.removeEventListener(b,c,!1)}:function(a,b,c){a.detachEvent&&a.detachEvent("on"+b,c)},f.Event=function(a,b){if(!(this instanceof f.Event))return new f.Event(a,b);a&&a.type?(this.originalEvent=a,this.type=a.type,this.isDefaultPrevented=a.defaultPrevented||a.returnValue===!1||a.getPreventDefault&&a.getPreventDefault()?K:J):this.type=a,b&&f.extend(this,b),this.timeStamp=a&&a.timeStamp||f.now(),this[f.expando]=!0},f.Event.prototype={preventDefault:function(){this.isDefaultPrevented=K;var a=this.originalEvent;!a||(a.preventDefault?a.preventDefault():a.returnValue=!1)},stopPropagation:function(){this.isPropagationStopped=K;var a=this.originalEvent;!a||(a.stopPropagation&&a.stopPropagation(),a.cancelBubble=!0)},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=K,this.stopPropagation()},isDefaultPrevented:J,isPropagationStopped:J,isImmediatePropagationStopped:J},f.each({mouseenter:"mouseover",mouseleave:"mouseout"},function(a,b){f.event.special[a]={delegateType:b,bindType:b,handle:function(a){var c=this,d=a.relatedTarget,e=a.handleObj,g=e.selector,h;if(!d||d!==c&&!f.contains(c,d))a.type=e.origType,h=e.handler.apply(this,arguments),a.type=b;return h}}}),f.support.submitBubbles||(f.event.special.submit={setup:function(){if(f.nodeName(this,"form"))return!1;f.event.add(this,"click._submit keypress._submit",function(a){var c=a.target,d=f.nodeName(c,"input")||f.nodeName(c,"button")?c.form:b;d&&!d._submit_attached&&(f.event.add(d,"submit._submit",function(a){this.parentNode&&!a.isTrigger&&f.event.simulate("submit",this.parentNode,a,!0)}),d._submit_attached=!0)})},teardown:function(){if(f.nodeName(this,"form"))return!1;f.event.remove(this,"._submit")}}),f.support.changeBubbles||(f.event.special.change={setup:function(){if(z.test(this.nodeName)){if(this.type==="checkbox"||this.type==="radio")f.event.add(this,"propertychange._change",function(a){a.originalEvent.propertyName==="checked"&&(this._just_changed=!0)}),f.event.add(this,"click._change",function(a){this._just_changed&&!a.isTrigger&&(this._just_changed=!1,f.event.simulate("change",this,a,!0))});return!1}f.event.add(this,"beforeactivate._change",function(a){var b=a.target;z.test(b.nodeName)&&!b._change_attached&&(f.event.add(b,"change._change",function(a){this.parentNode&&!a.isSimulated&&!a.isTrigger&&f.event.simulate("change",this.parentNode,a,!0)}),b._change_attached=!0)})},handle:function(a){var b=a.target;if(this!==b||a.isSimulated||a.isTrigger||b.type!=="radio"&&b.type!=="checkbox")return a.handleObj.handler.apply(this,arguments)},teardown:function(){f.event.remove(this,"._change");return z.test(this.nodeName)}}),f.support.focusinBubbles||f.each({focus:"focusin",blur:"focusout"},function(a,b){var d=0,e=function(a){f.event.simulate(b,a.target,f.event.fix(a),!0)};f.event.special[b]={setup:function(){d++===0&&c.addEventListener(a,e,!0)},teardown:function(){--d===0&&c.removeEventListener(a,e,!0)}}}),f.fn.extend({on:function(a,c,d,e,g){var h,i;if(typeof a=="object"){typeof c!="string"&&(d=c,c=b);for(i in a)this.on(i,c,d,a[i],g);return this}d==null&&e==null?(e=c,d=c=b):e==null&&(typeof c=="string"?(e=d,d=b):(e=d,d=c,c=b));if(e===!1)e=J;else if(!e)return this;g===1&&(h=e,e=function(a){f().off(a);return h.apply(this,arguments)},e.guid=h.guid||(h.guid=f.guid++));return this.each(function(){f.event.add(this,a,e,d,c)})},one:function(a,b,c,d){return this.on.call(this,a,b,c,d,1)},off:function(a,c,d){if(a&&a.preventDefault&&a.handleObj){var e=a.handleObj;f(a.delegateTarget).off(e.namespace?e.type+"."+e.namespace:e.type,e.selector,e.handler);return this}if(typeof a=="object"){for(var g in a)this.off(g,c,a[g]);return this}if(c===!1||typeof c=="function")d=c,c=b;d===!1&&(d=J);return this.each(function(){f.event.remove(this,a,d,c)})},bind:function(a,b,c){return this.on(a,null,b,c)},unbind:function(a,b){return this.off(a,null,b)},live:function(a,b,c){f(this.context).on(a,this.selector,b,c);return this},die:function(a,b){f(this.context).off(a,this.selector||"**",b);return this},delegate:function(a,b,c,d){return this.on(b,a,c,d)},undelegate:function(a,b,c){return arguments.length==1?this.off(a,"**"):this.off(b,a,c)},trigger:function(a,b){return this.each(function(){f.event.trigger(a,b,this)})},triggerHandler:function(a,b){if(this[0])return f.event.trigger(a,b,this[0],!0)},toggle:function(a){var b=arguments,c=a.guid||f.guid++,d=0,e=function(c){var e=(f._data(this,"lastToggle"+a.guid)||0)%d;f._data(this,"lastToggle"+a.guid,e+1),c.preventDefault();return b[e].apply(this,arguments)||!1};e.guid=c;while(d<b.length)b[d++].guid=c;return this.click(e)},hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)}}),f.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu".split(" "),function(a,b){f.fn[b]=function(a,c){c==null&&(c=a,a=null);return arguments.length>0?this.on(b,null,a,c):this.trigger(b)},f.attrFn&&(f.attrFn[b]=!0),C.test(b)&&(f.event.fixHooks[b]=f.event.keyHooks),D.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;h<i;h++){var j=e[h];if(j){var k=!1;j=j[a];while(j){if(j[d]===c){k=e[j.sizset];break}if(j.nodeType===1){g||(j[d]=c,j.sizset=h);if(typeof b!="string"){if(j===b){k=!0;break}}else if(m.filter(b,[j]).length>0){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<i;h++){var j=e[h];if(j){var k=!1;j=j[a];while(j){if(j[d]===c){k=e[j.sizset];break}j.nodeType===1&&!g&&(j[d]=c,j.sizset=h);if(j.nodeName.toLowerCase()===b){k=j;break}j=j[a]}e[h]=k}}}var a=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\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;b<a.length;b++)a[b]===a[b-1]&&a.splice(b--,1)}return a},m.matches=function(a,b){return m(a,null,null,b)},m.matchesSelector=function(a,b){return m(b,null,null,[a]).length>0},m.find=function(a,b,c){var d,e,f,g,h,i;if(!a)return[];for(e=0,f=o.order.length;e<f;e++){h=o.order[e];if(g=o.leftMatch[h].exec(a)){i=g[1],g.splice(1,1);if(i.substr(i.length-1)!=="\\"){g[1]=(g[1]||"").replace(j,""),d=o.find[h](g,b,c);if(d!=null){a=a.replace(o.match[h],"");break}}}}d||(d=typeof b.getElementsByTagName!="undefined"?b.getElementsByTagName("*"):[]);return{set:d,expr:a}},m.filter=function(a,c,d,e){var f,g,h,i,j,k,l,n,p,q=a,r=[],s=c,t=c&&c[0]&&m.isXML(c[0]);while(a&&c.length){for(h in o.filter)if((f=o.leftMatch[h].exec(a))!=null&&f[2]){k=o.filter[h],l=f[1],g=!1,f.splice(1,1);if(l.substr(l.length-1)==="\\")continue;s===r&&(r=[]);if(o.preFilter[h]){f=o.preFilter[h](f,s,d,r,e,t);if(!f)g=i=!0;else if(f===!0)continue}if(f)for(n=0;(j=s[n])!=null;n++)j&&(i=k(j,f,n,s),p=e^i,d&&i!=null?p?g=!0:s[n]=!1:p&&(r.push(j),g=!0));if(i!==b){d||(s=r),a=a.replace(o.match[h],"");if(!g)return[];break}}if(a===q)if(g==null)m.error(a);else break;q=a}return s},m.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)};var n=m.getText=function(a){var b,c,d=a.nodeType,e="";if(d){if(d===1||d===9){if(typeof a.textContent=="string")return a.textContent;if(typeof a.innerText=="string")return a.innerText.replace(k,"");for(a=a.firstChild;a;a=a.nextSibling)e+=n(a)}else if(d===3||d===4)return a.nodeValue}else for(b=0;c=a[b];b++)c.nodeType!==8&&(e+=n(c));return e},o=m.selectors={order:["ID","NAME","TAG"],match:{ID:/#((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,CLASS:/\.((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,NAME:/\[name=['"]*((?:[\w\u00c0-\uFFFF\-]|\\.)+)['"]*\]/,ATTR:/\[\s*((?:[\w\u00c0-\uFFFF\-]|\\.)+)\s*(?:(\S?=)\s*(?:(['"])(.*?)\3|(#?(?:[\w\u00c0-\uFFFF\-]|\\.)*)|)|)\s*\]/,TAG:/^((?:[\w\u00c0-\uFFFF\*\-]|\\.)+)/,CHILD:/:(only|nth|last|first)-child(?:\(\s*(even|odd|(?:[+\-]?\d+|(?:[+\-]?\d*)?n\s*(?:[+\-]\s*\d+)?))\s*\))?/,POS:/:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^\-]|$)/,PSEUDO:/:((?:[\w\u00c0-\uFFFF\-]|\\.)+)(?:\((['"]?)((?:\([^\)]+\)|[^\(\)]*)+)\2\))?/},leftMatch:{},attrMap:{"class":"className","for":"htmlFor"},attrHandle:{href:function(a){return a.getAttribute("href")},type:function(a){return a.getAttribute("type")}},relative:{"+":function(a,b){var c=typeof b=="string",d=c&&!l.test(b),e=c&&!d;d&&(b=b.toLowerCase());for(var f=0,g=a.length,h;f<g;f++)if(h=a[f]){while((h=h.previousSibling)&&h.nodeType!==1);a[f]=e||h&&h.nodeName.toLowerCase()===b?h||!1:h===b}e&&m.filter(b,a,!0)},">":function(a,b){var c,d=typeof b=="string",e=0,f=a.length;if(d&&!l.test(b)){b=b.toLowerCase();for(;e<f;e++){c=a[e];if(c){var g=c.parentNode;a[e]=g.nodeName.toLowerCase()===b?g:!1}}}else{for(;e<f;e++)c=a[e],c&&(a[e]=d?c.parentNode:c.parentNode===b);d&&m.filter(b,a,!0)}},"":function(a,b,c){var d,f=e++,g=x;typeof b=="string"&&!l.test(b)&&(b=b.toLowerCase(),d=b,g=w),g("parentNode",b,f,a,d,c)},"~":function(a,b,c){var d,f=e++,g=x;typeof b=="string"&&!l.test(b)&&(b=b.toLowerCase(),d=b,g=w),g("previousSibling",b,f,a,d,c)}},find:{ID:function(a,b,c){if(typeof b.getElementById!="undefined"&&!c){var d=b.getElementById(a[1]);return d&&d.parentNode?[d]:[]}},NAME:function(a,b){if(typeof b.getElementsByName!="undefined"){var c=[],d=b.getElementsByName(a[1]);for(var e=0,f=d.length;e<f;e++)d[e].getAttribute("name")===a[1]&&c.push(d[e]);return c.length===0?null:c}},TAG:function(a,b){if(typeof b.getElementsByTagName!="undefined")return b.getElementsByTagName(a[1])}},preFilter:{CLASS:function(a,b,c,d,e,f){a=" "+a[1].replace(j,"")+" ";if(f)return a;for(var g=0,h;(h=b[g])!=null;g++)h&&(e^(h.className&&(" "+h.className+" ").replace(/[\t\n\r]/g," ").indexOf(a)>=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 b<c[3]-0},gt:function(a,b,c){return b>c[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<i;h++)if(g[h]===a)return!1;return!0}m.error(e)},CHILD:function(a,b){var c,e,f,g,h,i,j,k=b[1],l=a;switch(k){case"only":case"first":while(l=l.previousSibling)if(l.nodeType===1)return!1;if(k==="first")return!0;l=a;case"last":while(l=l.nextSibling)if(l.nodeType===1)return!1;return!0;case"nth":c=b[2],e=b[3];if(c===1&&e===0)return!0;f=b[0],g=a.parentNode;if(g&&(g[d]!==f||!a.nodeIndex)){i=0;for(l=g.firstChild;l;l=l.nextSibling)l.nodeType===1&&(l.nodeIndex=++i);g[d]=f}j=a.nodeIndex-e;return c===0?j===0:j%c===0&&j/c>=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;c++)d.push(a[c]);else for(;a[c];c++)d.push(a[c]);return d}}var u,v;c.documentElement.compareDocumentPosition?u=function(a,b){if(a===b){h=!0;return 0}if(!a.compareDocumentPosition||!b.compareDocumentPosition)return a.compareDocumentPosition?-1:1;return a.compareDocumentPosition(b)&4?-1:1}:(u=function(a,b){if(a===b){h=!0;return 0}if(a.sourceIndex&&b.sourceIndex)return a.sourceIndex-b.sourceIndex;var c,d,e=[],f=[],g=a.parentNode,i=b.parentNode,j=g;if(g===i)return v(a,b);if(!g)return-1;if(!i)return 1;while(j)e.unshift(j),j=j.parentNode;j=i;while(j)f.unshift(j),j=j.parentNode;c=e.length,d=f.length;for(var k=0;k<c&&k<d;k++)if(e[k]!==f[k])return v(e[k],f[k]);return k===c?v(a,f[k],-1):v(e[k],b,1)},v=function(a,b,c){if(a===b)return c;var d=a.nextSibling;while(d){if(d===b)return-1;d=d.nextSibling}return 1}),function(){var a=c.createElement("div"),d="script"+(new Date).getTime(),e=c.documentElement;a.innerHTML="<a name='"+d+"'/>",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 href='#'></a>",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="<p class='TEST'></p>";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="<div class='test e'></div><div class='test'></div>";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;h<i;h++)m(a,g[h],e,c);return m.filter(f,e)};m.attr=f.attr,m.selectors.attrMap={},f.find=m,f.expr=m.selectors,f.expr[":"]=f.expr.filters,f.unique=m.uniqueSort,f.text=m.getText,f.isXMLDoc=m.isXML,f.contains=m.contains}();var L=/Until$/,M=/^(?:parents|prevUntil|prevAll)/,N=/,/,O=/^.[^:#\[\.,]*$/,P=Array.prototype.slice,Q=f.expr.match.POS,R={children:!0,contents:!0,next:!0,prev:!0};f.fn.extend({find:function(a){var b=this,c,d;if(typeof a!="string")return f(a).filter(function(){for(c=0,d=b.length;c<d;c++)if(f.contains(b[c],this))return!0});var e=this.pushStack("","find",a),g,h,i;for(c=0,d=this.length;c<d;c++){g=e.length,f.find(a,this[c],e);if(c>0)for(h=g;h<e.length;h++)for(i=0;i<g;i++)if(e[i]===e[h]){e.splice(h--,1);break}}return e},has:function(a){var b=f(a);return this.filter(function(){for(var a=0,c=b.length;a<c;a++)if(f.contains(this,b[a]))return!0})},not:function(a){return this.pushStack(T(this,a,!1),"not",a)},filter:function(a){return this.pushStack(T(this,a,!0),"filter",a)},is:function(a){return!!a&&(typeof a=="string"?Q.test(a)?f(a,this.context).index(this[0])>=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<a.length;d++)f(g).is(a[d])&&c.push({selector:a[d],elem:g,level:h});g=g.parentNode,h++}return c}var i=Q.test(a)||typeof a!="string"?f(a,b||this.context):0;for(d=0,e=this.length;d<e;d++){g=this[d];while(g){if(i?i.index(g)>-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(S(c[0])||S(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);L.test(a)||(d=c),d&&typeof d=="string"&&(e=f.filter(d,e)),e=this.length>1&&!R[a]?f.unique(e):e,(this.length>1||N.test(d))&&M.test(a)&&(e=e.reverse());return this.pushStack(e,a,P.call(arguments).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 V="abbr|article|aside|audio|canvas|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",W=/ jQuery\d+="(?:\d+|null)"/g,X=/^\s+/,Y=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,Z=/<([\w:]+)/,$=/<tbody/i,_=/<|&#?\w+;/,ba=/<(?:script|style)/i,bb=/<(?:script|object|embed|option|style)/i,bc=new RegExp("<(?:"+V+")","i"),bd=/checked\s*(?:[^=]|=\s*.checked.)/i,be=/\/(java|ecma)script/i,bf=/^\s*<!(?:\[CDATA\[|\-\-)/,bg={option:[1,"<select multiple='multiple'>","</select>"],legend:[1,"<fieldset>","</fieldset>"],thead:[1,"<table>","</table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],col:[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"],area:[1,"<map>","</map>"],_default:[0,"",""]},bh=U(c);bg.optgroup=bg.option,bg.tbody=bg.tfoot=bg.colgroup=bg.caption=bg.thead,bg.th=bg.td,f.support.htmlSerialize||(bg._default=[1,"div<div>","</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){var b=f.isFunction(a);return this.each(function(c){f(this).wrapAll(b?a.call(this,c):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.clean(arguments);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.clean(arguments));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(W,""):null;if(typeof a=="string"&&!ba.test(a)&&(f.support.leadingWhitespace||!X.test(a))&&!bg[(Z.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(Y,"<$1></$2>");try{for(var c=0,d=this.length;c<d;c++)this[c].nodeType===1&&(f.cleanData(this[c].getElementsByTagName("*")),this[c].innerHTML=a)}catch(e){this.empty().append(a)}}else f.isFunction(a)?this.each(function(b){var c=f(this);c.html(a.call(this,b,c.html()))}):this.empty().append(a);return this},replaceWith:function(a){if(this[0]&&this[0].parentNode){if(f.isFunction(a))return this.each(function(b){var c=f(this),d=c.html();c.replaceWith(a.call(this,b,d))});typeof a!="string"&&(a=f(a).detach());return this.each(function(){var b=this.nextSibling,c=this.parentNode;f(this).remove(),b?f(b).before(a):f(c).append(a)})}return this.length?this.pushStack(f(f.isFunction(a)?a():a),"replaceWith",a):this},detach:function(a){return this.remove(a,!0)},domManip:function(a,c,d){var e,g,h,i,j=a[0],k=[];if(!f.support.checkClone&&arguments.length===3&&typeof j=="string"&&bd.test(j))return this.each(function(){f(this).domManip(a,c,d,!0)});if(f.isFunction(j))return this.each(function(e){var g=f(this);a[0]=j.call(this,e,c?g.html():b),g.domManip(a,c,d)});if(this[0]){i=j&&j.parentNode,f.support.parentNode&&i&&i.nodeType===11&&i.childNodes.length===this.length?e={fragment:i}:e=f.buildFragment(a,this,k),h=e.fragment,h.childNodes.length===1?g=h=h.firstChild:g=h.firstChild;if(g){c=c&&f.nodeName(g,"tr");for(var l=0,m=this.length,n=m-1;l<m;l++)d.call(c?bi(this[l],g):this[l],e.cacheable||m>1&&l<n?f.clone(h,!0,!0):h)}k.length&&f.each(k,bp)}return this}}),f.buildFragment=function(a,b,d){var e,g,h,i,j=a[0];b&&b[0]&&(i=b[0].ownerDocument||b[0]),i.createDocumentFragment||(i=c),a.length===1&&typeof j=="string"&&j.length<512&&i===c&&j.charAt(0)==="<"&&!bb.test(j)&&(f.support.checkClone||!bd.test(j))&&(f.support.html5Clone||!bc.test(j))&&(g=!0,h=f.fragments[j],h&&h!==1&&(e=h)),e||(e=i.createDocumentFragment(),f.clean(a,i,e,d)),g&&(f.fragments[j]=h?e:1);return{fragment:e,cacheable:g}},f.fragments={},f.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){f.fn[a]=function(c){var d=[],e=f(c),g=this.length===1&&this[0].parentNode;if(g&&g.nodeType===11&&g.childNodes.length===1&&e.length===1){e[b](this[0]);return this}for(var h=0,i=e.length;h<i;h++){var j=(h>0?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,e,g,h=f.support.html5Clone||!bc.test("<"+a.nodeName)?a.cloneNode(!0):bo(a);if((!f.support.noCloneEvent||!f.support.noCloneChecked)&&(a.nodeType===1||a.nodeType===11)&&!f.isXMLDoc(a)){bk(a,h),d=bl(a),e=bl(h);for(g=0;d[g];++g)e[g]&&bk(d[g],e[g])}if(b){bj(a,h);if(c){d=bl(a),e=bl(h);for(g=0;d[g];++g)bj(d[g],e[g])}}d=e=null;return h},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(!_.test(k))k=b.createTextNode(k);else{k=k.replace(Y,"<$1></$2>");var l=(Z.exec(k)||["",""])[1].toLowerCase(),m=bg[l]||bg._default,n=m[0],o=b.createElement("div");b===c?bh.appendChild(o):U(b).appendChild(o),o.innerHTML=m[1]+k+m[2];while(n--)o=o.lastChild;if(!f.support.tbody){var p=$.test(k),q=l==="table"&&!p?o.firstChild&&o.firstChild.childNodes:m[1]==="<table>"&&!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&&X.test(k)&&o.insertBefore(b.createTextNode(X.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<r;i++)bn(k[i]);else bn(k);k.nodeType?h.push(k):h=f.merge(h,k)}if(d){g=function(a){return!a.type||be.test(a.type)};for(j=0;h[j];j++)if(e&&f.nodeName(h[j],"script")&&(!h[j].type||h[j].type.toLowerCase()==="text/javascript"))e.push(h[j].parentNode?h[j].parentNode.removeChild(h[j]):h[j]);else{if(h[j].nodeType===1){var s=f.grep(h[j].getElementsByTagName("script"),g);h.splice.apply(h,[j+1,0].concat(s))}d.appendChild(h[j])}}return h},cleanData:function(a){var b,c,d=f.cache,e=f.event.special,g=f.support.deleteExpando;for(var h=0,i;(i=a[h])!=null;h++){if(i.nodeName&&f.noData[i.nodeName.toLowerCase()])continue;c=i[f.expando];if(c){b=d[c];if(b&&b.events){for(var j in b.events)e[j]?f.event.remove(i,j):f.removeEvent(i,j,b.handle);b.handle&&(b.handle.elem=null)}g?delete i[f.expando]:i.removeAttribute&&i.removeAttribute(f.expando),delete d[c]}}}});var bq=/alpha\([^)]*\)/i,br=/opacity=([^)]*)/,bs=/([A-Z]|^ms)/g,bt=/^-?\d+(?:px)?$/i,bu=/^-?\d/,bv=/^([\-+])=([\-+.\de]+)/,bw={position:"absolute",visibility:"hidden",display:"block"},bx=["Left","Right"],by=["Top","Bottom"],bz,bA,bB;f.fn.css=function(a,c){if(arguments.length===2&&c===b)return this;return f.access(this,a,c,!0,function(a,c,d){return d!==b?f.style(a,c,d):f.css(a,c)})},f.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=bz(a,"opacity","opacity");return c===""?"1":c}return a.style.opacity}}},cssNumber:{fillOpacity:!0,fontWeight:!0,lineHeight:!0,opacity:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":f.support.cssFloat?"cssFloat":"styleFloat"},style:function(a,c,d,e){if(!!a&&a.nodeType!==3&&a.nodeType!==8&&!!a.style){var g,h,i=f.camelCase(c),j=a.style,k=f.cssHooks[i];c=f.cssProps[i]||i;if(d===b){if(k&&"get"in k&&(g=k.get(a,!1,e))!==b)return g;return j[c]}h=typeof d,h==="string"&&(g=bv.exec(d))&&(d=+(g[1]+1)*+g[2]+parseFloat(f.css(a,c)),h="number");if(d==null||h==="number"&&isNaN(d))return;h==="number"&&!f.cssNumber[i]&&(d+="px");if(!k||!("set"in k)||(d=k.set(a,d))!==b)try{j[c]=d}catch(l){}}},css:function(a,c,d){var e,g;c=f.camelCase(c),g=f.cssHooks[c],c=f.cssProps[c]||c,c==="cssFloat"&&(c="float");if(g&&"get"in g&&(e=g.get(a,!0,d))!==b)return e;if(bz)return bz(a,c)},swap:function(a,b,c){var d={};for(var e in b)d[e]=a.style[e],a.style[e]=b[e];c.call(a);for(e in b)a.style[e]=d[e]}}),f.curCSS=f.css,f.each(["height","width"],function(a,b){f.cssHooks[b]={get:function(a,c,d){var e;if(c){if(a.offsetWidth!==0)return bC(a,b,d);f.swap(a,bw,function(){e=bC(a,b,d)});return e}},set:function(a,b){if(!bt.test(b))return b;b=parseFloat(b);if(b>=0)return b+"px"}}}),f.support.opacity||(f.cssHooks.opacity={get:function(a,b){return br.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(bq,""))===""){c.removeAttribute("filter");if(d&&!d.filter)return}c.filter=bq.test(g)?g.replace(bq,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=bz(a,"margin-right","marginRight"):c=a.style.marginRight});return c}})}),c.defaultView&&c.defaultView.getComputedStyle&&(bA=function(a,b){var c,d,e;b=b.replace(bs,"-$1").toLowerCase(),(d=a.ownerDocument.defaultView)&&(e=d.getComputedStyle(a,null))&&(c=e.getPropertyValue(b),c===""&&!f.contains(a.ownerDocument.documentElement,a)&&(c=f.style(a,b)));return c}),c.documentElement.currentStyle&&(bB=function(a,b){var c,d,e,f=a.currentStyle&&a.currentStyle[b],g=a.style;f===null&&g&&(e=g[b])&&(f=e),!bt.test(f)&&bu.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}),bz=bA||bB,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 bD=/%20/g,bE=/\[\]$/,bF=/\r?\n/g,bG=/#.*$/,bH=/^(.*?):[ \t]*([^\r\n]*)\r?$/mg,bI=/^(?:color|date|datetime|datetime-local|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,bJ=/^(?:about|app|app\-storage|.+\-extension|file|res|widget):$/,bK=/^(?:GET|HEAD)$/,bL=/^\/\//,bM=/\?/,bN=/<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi,bO=/^(?:select|textarea)/i,bP=/\s+/,bQ=/([?&])_=[^&]*/,bR=/^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+))?)?/,bS=f.fn.load,bT={},bU={},bV,bW,bX=["*/"]+["*"];try{bV=e.href}catch(bY){bV=c.createElement("a"),bV.href="",bV=bV.href}bW=bR.exec(bV.toLowerCase())||[],f.fn.extend({load:function(a,c,d){if(typeof a!="string"&&bS)return bS.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("<div>").append(c.replace(bN,"")).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||bO.test(this.nodeName)||bI.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(bF,"\r\n")}}):{name:b.name,value:c.replace(bF,"\r\n")}}).get()}}),f.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(a,b){f.fn[b]=function(a){return this.on(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?b_(a,f.ajaxSettings):(b=a,a=f.ajaxSettings),b_(a,b);return a},ajaxSettings:{url:bV,isLocal:bJ.test(bW[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","*":bX},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:bZ(bT),ajaxTransport:bZ(bU),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?cb(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=cc(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=bH.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(bG,"").replace(bL,bW[1]+"//"),d.dataTypes=f.trim(d.dataType||"*").toLowerCase().split(bP),d.crossDomain==null&&(r=bR.exec(d.url.toLowerCase()),d.crossDomain=!(!r||r[1]==bW[1]&&r[2]==bW[2]&&(r[3]||(r[1]==="http:"?80:443))==(bW[3]||(bW[1]==="http:"?80:443)))),d.data&&d.processData&&typeof d.data!="string"&&(d.data=f.param(d.data,d.traditional)),b$(bT,d,c,v);if(s===2)return!1;t=d.global,d.type=d.type.toUpperCase(),d.hasContent=!bK.test(d.type),t&&f.active++===0&&f.event.trigger("ajaxStart");if(!d.hasContent){d.data&&(d.url+=(bM.test(d.url)?"&":"?")+d.data,delete d.data),k=d.url;if(d.cache===!1){var x=f.now(),y=d.url.replace(bQ,"$1_="+x);d.url=y+(y===d.url?(bM.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]!=="*"?", "+bX+"; 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=b$(bU,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){if(s<2)w(-1,z);else throw 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)ca(g,a[g],c,e);return d.join("&").replace(bD,"+")}}),f.extend({active:0,lastModified:{},etag:{}});var cd=f.now(),ce=/(\=)\?(&|$)|\?\?/i;f.ajaxSetup({jsonp:"callback",jsonpCallback:function(){return f.expando+"_"+cd++}}),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&&(ce.test(b.url)||e&&ce.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(ce,l),b.url===j&&(e&&(k=k.replace(ce,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 cf=a.ActiveXObject?function(){for(var a in ch)ch[a](0,1)}:!1,cg=0,ch;f.ajaxSettings.xhr=a.ActiveXObject?function(){return!this.isLocal&&ci()||cj()}:ci,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,cf&&delete ch[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=++cg,cf&&(ch||(ch={},f(a).unload(cf)),ch[i]=d),h.onreadystatechange=d)},abort:function(){d&&d(0,1)}}}});var ck={},cl,cm,cn=/^(?:toggle|show|hide)$/,co=/^([+\-]=)?([\d+.\-]+)([a-z%]*)$/i,cp,cq=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]],cr;f.fn.extend({show:function(a,b,c){var d,e;if(a||a===0)return this.animate(cu("show",3),a,b,c);for(var g=0,h=this.length;g<h;g++)d=this[g],d.style&&(e=d.style.display,!f._data(d,"olddisplay")&&e==="none"&&(e=d.style.display=""),e===""&&f.css(d,"display")==="none"&&f._data(d,"olddisplay",cv(d.nodeName)));for(g=0;g<h;g++){d=this[g];if(d.style){e=d.style.display;if(e===""||e==="none")d.style.display=f._data(d,"olddisplay")||""}}return this},hide:function(a,b,c){if(a||a===0)return this.animate(cu("hide",3),a,b,c);var d,e,g=0,h=this.length;for(;g<h;g++)d=this[g],d.style&&(e=f.css(d,"display"),e!=="none"&&!f._data(d,"olddisplay")&&f._data(d,"olddisplay",e));for(g=0;g<h;g++)this[g].style&&(this[g].style.display="none");return this},_toggle:f.fn.toggle,toggle:function(a,b,c){var d=typeof a=="boolean";f.isFunction(a)&&f.isFunction(b)?this._toggle.apply(this,arguments):a==null||d?this.each(function(){var b=d?a:f(this).is(":hidden");f(this)[b?"show":"hide"]()}):this.animate(cu("toggle",3),a,b,c);return this},fadeTo:function(a,b,c,d){return this.filter(":hidden").css("opacity",0).show().end().animate({opacity:b},a,c,d)},animate:function(a,b,c,d){function g(){e.queue===!1&&f._mark(this);var b=f.extend({},e),c=this.nodeType===1,d=c&&f(this).is(":hidden"),g,h,i,j,k,l,m,n,o;b.animatedProperties={};for(i in a){g=f.camelCase(i),i!==g&&(a[g]=a[i],delete a[i]),h=a[g],f.isArray(h)?(b.animatedProperties[g]=h[1],h=a[g]=h[0]):b.animatedProperties[g]=b.specialEasing&&b.specialEasing[g]||b.easing||"swing";if(h==="hide"&&d||h==="show"&&!d)return b.complete.call(this);c&&(g==="height"||g==="width")&&(b.overflow=[this.style.overflow,this.style.overflowX,this.style.overflowY],f.css(this,"display")==="inline"&&f.css(this,"float")==="none"&&(!f.support.inlineBlockNeedsLayout||cv(this.nodeName)==="inline"?this.style.display="inline-block":this.style.zoom=1))}b.overflow!=null&&(this.style.overflow="hidden");for(i in a)j=new f.fx(this,b,i),h=a[i],cn.test(h)?(o=f._data(this,"toggle"+i)||(h==="toggle"?d?"show":"hide":0),o?(f._data(this,"toggle"+i,o==="show"?"hide":"show"),j[o]()):j[h]()):(k=co.exec(h),l=j.cur(),k?(m=parseFloat(k[2]),n=k[3]||(f.cssNumber[i]?"":"px"),n!=="px"&&(f.style(this,i,(m||1)+n),l=(m||1)/j.cur()*l,f.style(this,i,l+n)),k[1]&&(m=(k[1]==="-="?-1:1)*m+l),j.custom(l,m,n)):j.custom(l,h,""));return!0}var e=f.speed(b,c,d);if(f.isEmptyObject(a))return this.each(e.complete,[!1]);a=f.extend({},a);return e.queue===!1?this.each(g):this.queue(e.queue,g)},stop:function(a,c,d){typeof a!="string"&&(d=c,c=a,a=b),c&&a!==!1&&this.queue(a||"fx",[]);return this.each(function(){function h(a,b,c){var e=b[c];f.removeData(a,c,!0),e.stop(d)}var b,c=!1,e=f.timers,g=f._data(this);d||f._unmark(!0,this);if(a==null)for(b in g)g[b]&&g[b].stop&&b.indexOf(".run")===b.length-4&&h(this,g,b);else g[b=a+".run"]&&g[b].stop&&h(this,g,b);for(b=e.length;b--;)e[b].elem===this&&(a==null||e[b].queue===a)&&(d?e[b](!0):e[b].saveState(),c=!0,e.splice(b,1));(!d||!c)&&f.dequeue(this,a)})}}),f.each({slideDown:cu("show",1),slideUp:cu("hide",1),slideToggle:cu("toggle",1),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(a,b){f.fn[a]=function(a,c,d){return this.animate(b,a,c,d)}}),f.extend({speed:function(a,b,c){var d=a&&typeof a=="object"?f.extend({},a):{complete:c||!c&&b||f.isFunction(a)&&a,duration:a,easing:c&&b||b&&!f.isFunction(b)&&b};d.duration=f.fx.off?0:typeof d.duration=="number"?d.duration:d.duration in f.fx.speeds?f.fx.speeds[d.duration]:f.fx.speeds._default;if(d.queue==null||d.queue===!0)d.queue="fx";d.old=d.complete,d.complete=function(a){f.isFunction(d.old)&&d.old.call(this),d.queue?f.dequeue(this,d.queue):a!==!1&&f._unmark(this)};return d},easing:{linear:function(a,b,c,d){return c+d*a},swing:function(a,b,c,d){return(-Math.cos(a*Math.PI)/2+.5)*d+c}},timers:[],fx:function(a,b,c){this.options=b,this.elem=a,this.prop=c,b.orig=b.orig||{}}}),f.fx.prototype={update:function(){this.options.step&&this.options.step.call(this.elem,this.now,this),(f.fx.step[this.prop]||f.fx.step._default)(this)},cur:function(){if(this.elem[this.prop]!=null&&(!this.elem.style||this.elem.style[this.prop]==null))return this.elem[this.prop];var a,b=f.css(this.elem,this.prop);return isNaN(a=parseFloat(b))?!b||b==="auto"?0:b:a},custom:function(a,c,d){function h(a){return e.step(a)}var e=this,g=f.fx;this.startTime=cr||cs(),this.end=c,this.now=this.start=a,this.pos=this.state=0,this.unit=d||this.unit||(f.cssNumber[this.prop]?"":"px"),h.queue=this.options.queue,h.elem=this.elem,h.saveState=function(){e.options.hide&&f._data(e.elem,"fxshow"+e.prop)===b&&f._data(e.elem,"fxshow"+e.prop,e.start)},h()&&f.timers.push(h)&&!cp&&(cp=setInterval(g.tick,g.interval))},show:function(){var a=f._data(this.elem,"fxshow"+this.prop);this.options.orig[this.prop]=a||f.style(this.elem,this.prop),this.options.show=!0,a!==b?this.custom(this.cur(),a):this.custom(this.prop==="width"||this.prop==="height"?1:0,this.cur()),f(this.elem).show()},hide:function(){this.options.orig[this.prop]=f._data(this.elem,"fxshow"+this.prop)||f.style(this.elem,this.prop),this.options.hide=!0,this.custom(this.cur(),0)},step:function(a){var b,c,d,e=cr||cs(),g=!0,h=this.elem,i=this.options;if(a||e>=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<b.length;c++)a=b[c],!a()&&b[c]===a&&b.splice(c--,1);b.length||f.fx.stop()},interval:13,stop:function(){clearInterval(cp),cp=null},speeds:{slow:600,fast:200,_default:400},step:{opacity:function(a){f.style(a.elem,"opacity",a.now)},_default:function(a){a.elem.style&&a.elem.style[a.prop]!=null?a.elem.style[a.prop]=a.now+a.unit:a.elem[a.prop]=a.now}}}),f.each(["width","height"],function(a,b){f.fx.step[b]=function(a){f.style(a.elem,b,Math.max(0,a.now)+a.unit)}}),f.expr&&f.expr.filters&&(f.expr.filters.animated=function(a){return f.grep(f.timers,function(b){return a===b.elem}).length});var cw=/^t(?:able|d|h)$/i,cx=/^(?:body|html)$/i;"getBoundingClientRect"in c.documentElement?f.fn.offset=function(a){var b=this[0],c;if(a)return this.each(function(b){f.offset.setOffset(this,a,b)});if(!b||!b.ownerDocument)return null;if(b===b.ownerDocument.body)return f.offset.bodyOffset(b);try{c=b.getBoundingClientRect()}catch(d){}var e=b.ownerDocument,g=e.documentElement;if(!c||!f.contains(g,b))return c?{top:c.top,left:c.left}:{top:0,left:0};var h=e.body,i=cy(e),j=g.clientTop||h.clientTop||0,k=g.clientLeft||h.clientLeft||0,l=i.pageYOffset||f.support.boxModel&&g.scrollTop||h.scrollTop,m=i.pageXOffset||f.support.boxModel&&g.scrollLeft||h.scrollLeft,n=c.top+l-j,o=c.left+m-k;return{top:n,left:o}}:f.fn.offset=function(a){var b=this[0];if(a)return this.each(function(b){f.offset.setOffset(this,a,b)});if(!b||!b.ownerDocument)return null;if(b===b.ownerDocument.body)return f.offset.bodyOffset(b);var c,d=b.offsetParent,e=b,g=b.ownerDocument,h=g.documentElement,i=g.body,j=g.defaultView,k=j?j.getComputedStyle(b,null):b.currentStyle,l=b.offsetTop,m=b.offsetLeft;while((b=b.parentNode)&&b!==i&&b!==h){if(f.support.fixedPosition&&k.position==="fixed")break;c=j?j.getComputedStyle(b,null):b.currentStyle,l-=b.scrollTop,m-=b.scrollLeft,b===d&&(l+=b.offsetTop,m+=b.offsetLeft,f.support.doesNotAddBorder&&(!f.support.doesAddBorderForTableAndCells||!cw.test(b.nodeName))&&(l+=parseFloat(c.borderTopWidth)||0,m+=parseFloat(c.borderLeftWidth)||0),e=d,d=b.offsetParent),f.support.subtractsBorderForOverflowNotVisible&&c.overflow!=="visible"&&(l+=parseFloat(c.borderTopWidth)||0,m+=parseFloat(c.borderLeftWidth)||0),k=c}if(k.position==="relative"||k.position==="static")l+=i.offsetTop,m+=i.offsetLeft;f.support.fixedPosition&&k.position==="fixed"&&(l+=Math.max(h.scrollTop,i.scrollTop),m+=Math.max(h.scrollLeft,i.scrollLeft));return{top:l,left:m}},f.offset={bodyOffset:function(a){var b=a.offsetTop,c=a.offsetLeft;f.support.doesNotIncludeMarginInBodyOffset&&(b+=parseFloat(f.css(a,"marginTop"))||0,c+=parseFloat(f.css(a,"marginLeft"))||0);return{top:b,left:c}},setOffset:function(a,b,c){var d=f.css(a,"position");d==="static"&&(a.style.position="relative");var e=f(a),g=e.offset(),h=f.css(a,"top"),i=f.css(a,"left"),j=(d==="absolute"||d==="fixed")&&f.inArray("auto",[h,i])>-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=cx.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&&!cx.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=cy(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=cy(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,typeof define=="function"&&define.amd&&define.amd.jQuery&&define("jquery",[],function(){return f})})(window); \ No newline at end of file
diff --git a/h-source/Js/jquery/jquery.mobile-1.1.0.css b/h-source/Js/jquery/jquery.mobile-1.1.0.css
new file mode 100644
index 0000000..06dbf8f
--- /dev/null
+++ b/h-source/Js/jquery/jquery.mobile-1.1.0.css
@@ -0,0 +1,2053 @@
+/*
+* jQuery Mobile Framework 1.1.0 db342b1f315c282692791aa870455901fdb46a55
+* http://jquerymobile.com
+*
+* Copyright 2011 (c) jQuery Project
+* Dual licensed under the MIT or GPL Version 2 licenses.
+* http://jquery.org/license
+*
+*/
+/* Swatches */
+/* A
+-----------------------------------------------------------------------------------------------------------*/
+.ui-bar-a {
+ border: 1px solid #333 /*{a-bar-border}*/;
+ background: #111111 /*{a-bar-background-color}*/;
+ color: #ffffff /*{a-bar-color}*/;
+ font-weight: bold;
+ text-shadow: 0 /*{a-bar-shadow-x}*/ -1px /*{a-bar-shadow-y}*/ 1px /*{a-bar-shadow-radius}*/ #000000 /*{a-bar-shadow-color}*/;
+ background-image: -webkit-gradient(linear, left top, left bottom, from( #3c3c3c /*{a-bar-background-start}*/), to( #111 /*{a-bar-background-end}*/)); /* Saf4+, Chrome */
+ background-image: -webkit-linear-gradient( #3c3c3c /*{a-bar-background-start}*/, #111 /*{a-bar-background-end}*/); /* Chrome 10+, Saf5.1+ */
+ background-image: -moz-linear-gradient( #3c3c3c /*{a-bar-background-start}*/, #111 /*{a-bar-background-end}*/); /* FF3.6 */
+ background-image: -ms-linear-gradient( #3c3c3c /*{a-bar-background-start}*/, #111 /*{a-bar-background-end}*/); /* IE10 */
+ background-image: -o-linear-gradient( #3c3c3c /*{a-bar-background-start}*/, #111 /*{a-bar-background-end}*/); /* Opera 11.10+ */
+ background-image: linear-gradient( #3c3c3c /*{a-bar-background-start}*/, #111 /*{a-bar-background-end}*/);
+}
+.ui-bar-a,
+.ui-bar-a input,
+.ui-bar-a select,
+.ui-bar-a textarea,
+.ui-bar-a button {
+ font-family: Helvetica, Arial, sans-serif /*{global-font-family}*/;
+}
+.ui-bar-a .ui-link-inherit {
+ color: #fff /*{a-bar-color}*/;
+}
+.ui-bar-a .ui-link {
+ color: #7cc4e7 /*{a-bar-link-color}*/;
+ font-weight: bold;
+}
+.ui-bar-a .ui-link:hover {
+ color: #2489CE /*{a-bar-link-hover}*/;
+}
+.ui-bar-a .ui-link:active {
+ color: #2489CE /*{a-bar-link-active}*/;
+}
+.ui-bar-a .ui-link:visited {
+ color: #2489CE /*{a-bar-link-visited}*/;
+}
+.ui-body-a,
+.ui-overlay-a {
+ border: 1px solid #444 /*{a-body-border}*/;
+ background: #222 /*{a-body-background-color}*/;
+ color: #fff /*{a-body-color}*/;
+ text-shadow: 0 /*{a-body-shadow-x}*/ 1px /*{a-body-shadow-y}*/ 1px /*{a-body-shadow-radius}*/ #111 /*{a-body-shadow-color}*/;
+ font-weight: normal;
+ background-image: -webkit-gradient(linear, left top, left bottom, from( #444 /*{a-body-background-start}*/), to( #222 /*{a-body-background-end}*/)); /* Saf4+, Chrome */
+ background-image: -webkit-linear-gradient( #444 /*{a-body-background-start}*/, #222 /*{a-body-background-end}*/); /* Chrome 10+, Saf5.1+ */
+ background-image: -moz-linear-gradient( #444 /*{a-body-background-start}*/, #222 /*{a-body-background-end}*/); /* FF3.6 */
+ background-image: -ms-linear-gradient( #444 /*{a-body-background-start}*/, #222 /*{a-body-background-end}*/); /* IE10 */
+ background-image: -o-linear-gradient( #444 /*{a-body-background-start}*/, #222 /*{a-body-background-end}*/); /* Opera 11.10+ */
+ background-image: linear-gradient( #444 /*{a-body-background-start}*/, #222 /*{a-body-background-end}*/);
+}
+.ui-overlay-a {
+ background-image: none;
+ border-width: 0;
+}
+.ui-body-a,
+.ui-body-a input,
+.ui-body-a select,
+.ui-body-a textarea,
+.ui-body-a button {
+ font-family: Helvetica, Arial, sans-serif /*{global-font-family}*/;
+}
+.ui-body-a .ui-link-inherit {
+ color: #fff /*{a-body-color}*/;
+}
+.ui-body-a .ui-link {
+ color: #2489CE /*{a-body-link-color}*/;
+ font-weight: bold;
+}
+.ui-body-a .ui-link:hover {
+ color: #2489CE /*{a-body-link-hover}*/;
+}
+.ui-body-a .ui-link:active {
+ color: #2489CE /*{a-body-link-active}*/;
+}
+.ui-body-a .ui-link:visited {
+ color: #2489CE /*{a-body-link-visited}*/;
+}
+.ui-btn-up-a {
+ border: 1px solid #111 /*{a-bup-border}*/;
+ background: #333 /*{a-bup-background-color}*/;
+ font-weight: bold;
+ color: #fff /*{a-bup-color}*/;
+ text-shadow: 0 /*{a-bup-shadow-x}*/ 1px /*{a-bup-shadow-y}*/ 1px /*{a-bup-shadow-radius}*/ #111 /*{a-bup-shadow-color}*/;
+ background-image: -webkit-gradient(linear, left top, left bottom, from( #444444 /*{a-bup-background-start}*/), to( #2d2d2d /*{a-bup-background-end}*/)); /* Saf4+, Chrome */
+ background-image: -webkit-linear-gradient( #444444 /*{a-bup-background-start}*/, #2d2d2d /*{a-bup-background-end}*/); /* Chrome 10+, Saf5.1+ */
+ background-image: -moz-linear-gradient( #444444 /*{a-bup-background-start}*/, #2d2d2d /*{a-bup-background-end}*/); /* FF3.6 */
+ background-image: -ms-linear-gradient( #444444 /*{a-bup-background-start}*/, #2d2d2d /*{a-bup-background-end}*/); /* IE10 */
+ background-image: -o-linear-gradient( #444444 /*{a-bup-background-start}*/, #2d2d2d /*{a-bup-background-end}*/); /* Opera 11.10+ */
+ background-image: linear-gradient( #444444 /*{a-bup-background-start}*/, #2d2d2d /*{a-bup-background-end}*/);
+}
+.ui-btn-up-a a.ui-link-inherit {
+ color: #fff /*{a-bup-color}*/;
+}
+.ui-btn-hover-a {
+ border: 1px solid #000 /*{a-bhover-border}*/;
+ background: #444444 /*{a-bhover-background-color}*/;
+ font-weight: bold;
+ color: #fff /*{a-bhover-color}*/;
+ text-shadow: 0 /*{a-bhover-shadow-x}*/ 1px /*{a-bhover-shadow-y}*/ 1px /*{a-bhover-shadow-radius}*/ #111 /*{a-bhover-shadow-color}*/;
+ background-image: -webkit-gradient(linear, left top, left bottom, from( #555555 /*{a-bhover-background-start}*/), to( #383838 /*{a-bhover-background-end}*/)); /* Saf4+, Chrome */
+ background-image: -webkit-linear-gradient( #555555 /*{a-bhover-background-start}*/, #383838 /*{a-bhover-background-end}*/); /* Chrome 10+, Saf5.1+ */
+ background-image: -moz-linear-gradient( #555555 /*{a-bhover-background-start}*/, #383838 /*{a-bhover-background-end}*/); /* FF3.6 */
+ background-image: -ms-linear-gradient( #555555 /*{a-bhover-background-start}*/, #383838 /*{a-bhover-background-end}*/); /* IE10 */
+ background-image: -o-linear-gradient( #555555 /*{a-bhover-background-start}*/, #383838 /*{a-bhover-background-end}*/); /* Opera 11.10+ */
+ background-image: linear-gradient( #555555 /*{a-bhover-background-start}*/, #383838 /*{a-bhover-background-end}*/);
+}
+.ui-btn-hover-a a.ui-link-inherit {
+ color: #fff /*{a-bhover-color}*/;
+}
+.ui-btn-down-a {
+ border: 1px solid #000 /*{a-bdown-border}*/;
+ background: #222 /*{a-bdown-background-color}*/;
+ font-weight: bold;
+ color: #fff /*{a-bdown-color}*/;
+ text-shadow: 0 /*{a-bdown-shadow-x}*/ 1px /*{a-bdown-shadow-y}*/ 1px /*{a-bdown-shadow-radius}*/ #111 /*{a-bdown-shadow-color}*/;
+ background-image: -webkit-gradient(linear, left top, left bottom, from( #202020 /*{a-bdown-background-start}*/), to( #2c2c2c /*{a-bdown-background-end}*/)); /* Saf4+, Chrome */
+ background-image: -webkit-linear-gradient( #202020 /*{a-bdown-background-start}*/, #2c2c2c /*{a-bdown-background-end}*/); /* Chrome 10+, Saf5.1+ */
+ background-image: -moz-linear-gradient( #202020 /*{a-bdown-background-start}*/, #2c2c2c /*{a-bdown-background-end}*/); /* FF3.6 */
+ background-image: -ms-linear-gradient( #202020 /*{a-bdown-background-start}*/, #2c2c2c /*{a-bdown-background-end}*/); /* IE10 */
+ background-image: -o-linear-gradient( #202020 /*{a-bdown-background-start}*/, #2c2c2c /*{a-bdown-background-end}*/); /* Opera 11.10+ */
+ background-image: linear-gradient( #202020 /*{a-bdown-background-start}*/, #2c2c2c /*{a-bdown-background-end}*/);
+}
+.ui-btn-down-a a.ui-link-inherit {
+ color: #fff /*{a-bdown-color}*/;
+}
+.ui-btn-up-a,
+.ui-btn-hover-a,
+.ui-btn-down-a {
+ font-family: Helvetica, Arial, sans-serif /*{global-font-family}*/;
+ text-decoration: none;
+}
+/* B
+-----------------------------------------------------------------------------------------------------------*/
+.ui-bar-b {
+ border: 1px solid #456f9a /*{b-bar-border}*/;
+ background: #5e87b0 /*{b-bar-background-color}*/;
+ color: #fff /*{b-bar-color}*/;
+ font-weight: bold;
+ text-shadow: 0 /*{b-bar-shadow-x}*/ 1px /*{b-bar-shadow-y}*/ 1px /*{b-bar-shadow-radius}*/ #3e6790 /*{b-bar-shadow-color}*/;
+ background-image: -webkit-gradient(linear, left top, left bottom, from( #6facd5 /*{b-bar-background-start}*/), to( #497bae /*{b-bar-background-end}*/)); /* Saf4+, Chrome */
+ background-image: -webkit-linear-gradient( #6facd5 /*{b-bar-background-start}*/, #497bae /*{b-bar-background-end}*/); /* Chrome 10+, Saf5.1+ */
+ background-image: -moz-linear-gradient( #6facd5 /*{b-bar-background-start}*/, #497bae /*{b-bar-background-end}*/); /* FF3.6 */
+ background-image: -ms-linear-gradient( #6facd5 /*{b-bar-background-start}*/, #497bae /*{b-bar-background-end}*/); /* IE10 */
+ background-image: -o-linear-gradient( #6facd5 /*{b-bar-background-start}*/, #497bae /*{b-bar-background-end}*/); /* Opera 11.10+ */
+ background-image: linear-gradient( #6facd5 /*{b-bar-background-start}*/, #497bae /*{b-bar-background-end}*/);
+}
+.ui-bar-b,
+.ui-bar-b input,
+.ui-bar-b select,
+.ui-bar-b textarea,
+.ui-bar-b button {
+ font-family: Helvetica, Arial, sans-serif /*{global-font-family}*/;
+}
+.ui-bar-b .ui-link-inherit {
+ color: #fff /*{b-bar-color}*/;
+}
+.ui-bar-b .ui-link {
+ color: #ddf0f8 /*{b-bar-link-color}*/;
+ font-weight: bold;
+}
+.ui-bar-b .ui-link:hover {
+ color: #ddf0f8 /*{b-bar-link-hover}*/;
+}
+.ui-bar-b .ui-link:active {
+ color: #ddf0f8 /*{b-bar-link-active}*/;
+}
+.ui-bar-b .ui-link:visited {
+ color: #ddf0f8 /*{b-bar-link-visited}*/;
+}
+.ui-body-b,
+.ui-overlay-b {
+ border: 1px solid #999 /*{b-body-border}*/;
+ background: #f3f3f3 /*{b-body-background-color}*/;
+ color: #222222 /*{b-body-color}*/;
+ text-shadow: 0 /*{b-body-shadow-x}*/ 1px /*{b-body-shadow-y}*/ 0 /*{b-body-shadow-radius}*/ #fff /*{b-body-shadow-color}*/;
+ font-weight: normal;
+ background-image: -webkit-gradient(linear, left top, left bottom, from( #ddd /*{b-body-background-start}*/), to( #ccc /*{b-body-background-end}*/)); /* Saf4+, Chrome */
+ background-image: -webkit-linear-gradient( #ddd /*{b-body-background-start}*/, #ccc /*{b-body-background-end}*/); /* Chrome 10+, Saf5.1+ */
+ background-image: -moz-linear-gradient( #ddd /*{b-body-background-start}*/, #ccc /*{b-body-background-end}*/); /* FF3.6 */
+ background-image: -ms-linear-gradient( #ddd /*{b-body-background-start}*/, #ccc /*{b-body-background-end}*/); /* IE10 */
+ background-image: -o-linear-gradient( #ddd /*{b-body-background-start}*/, #ccc /*{b-body-background-end}*/); /* Opera 11.10+ */
+ background-image: linear-gradient( #ddd /*{b-body-background-start}*/, #ccc /*{b-body-background-end}*/);
+}
+.ui-overlay-b {
+ background-image: none;
+ border-width: 0;
+}
+.ui-body-b,
+.ui-body-b input,
+.ui-body-b select,
+.ui-body-b textarea,
+.ui-body-b button {
+ font-family: Helvetica, Arial, sans-serif /*{global-font-family}*/;
+}
+.ui-body-b .ui-link-inherit {
+ color: #333333 /*{b-body-color}*/;
+}
+.ui-body-b .ui-link {
+ color: #2489CE /*{b-body-link-color}*/;
+ font-weight: bold;
+}
+.ui-body-b .ui-link:hover {
+ color: #2489CE /*{b-body-link-hover}*/;
+}
+.ui-body-b .ui-link:active {
+ color: #2489CE /*{b-body-link-active}*/;
+}
+.ui-body-b .ui-link:visited {
+ color: #2489CE /*{b-body-link-visited}*/;
+}
+.ui-btn-up-b {
+ border: 1px solid #044062 /*{b-bup-border}*/;
+ background: #396b9e /*{b-bup-background-color}*/;
+ font-weight: bold;
+ color: #fff /*{b-bup-color}*/;
+ text-shadow: 0 /*{b-bup-shadow-x}*/ 1px /*{b-bup-shadow-y}*/ 1px /*{b-bup-shadow-radius}*/ #194b7e /*{b-bup-shadow-color}*/;
+ background-image: -webkit-gradient(linear, left top, left bottom, from( #5f9cc5 /*{b-bup-background-start}*/), to( #396b9e /*{b-bup-background-end}*/)); /* Saf4+, Chrome */
+ background-image: -webkit-linear-gradient( #5f9cc5 /*{b-bup-background-start}*/, #396b9e /*{b-bup-background-end}*/); /* Chrome 10+, Saf5.1+ */
+ background-image: -moz-linear-gradient( #5f9cc5 /*{b-bup-background-start}*/, #396b9e /*{b-bup-background-end}*/); /* FF3.6 */
+ background-image: -ms-linear-gradient( #5f9cc5 /*{b-bup-background-start}*/, #396b9e /*{b-bup-background-end}*/); /* IE10 */
+ background-image: -o-linear-gradient( #5f9cc5 /*{b-bup-background-start}*/, #396b9e /*{b-bup-background-end}*/); /* Opera 11.10+ */
+ background-image: linear-gradient( #5f9cc5 /*{b-bup-background-start}*/, #396b9e /*{b-bup-background-end}*/);
+}
+.ui-btn-up-b a.ui-link-inherit {
+ color: #fff /*{b-bup-color}*/;
+}
+.ui-btn-hover-b {
+ border: 1px solid #00415e /*{b-bhover-border}*/;
+ background: #4b88b6 /*{b-bhover-background-color}*/;
+ font-weight: bold;
+ color: #fff /*{b-bhover-color}*/;
+ text-shadow: 0 /*{b-bhover-shadow-x}*/ 1px /*{b-bhover-shadow-y}*/ 1px /*{b-bhover-shadow-radius}*/ #194b7e /*{b-bhover-shadow-color}*/;
+ background-image: -webkit-gradient(linear, left top, left bottom, from( #6facd5 /*{b-bhover-background-start}*/), to( #4272a4 /*{b-bhover-background-end}*/)); /* Saf4+, Chrome */
+ background-image: -webkit-linear-gradient( #6facd5 /*{b-bhover-background-start}*/, #4272a4 /*{b-bhover-background-end}*/); /* Chrome 10+, Saf5.1+ */
+ background-image: -moz-linear-gradient( #6facd5 /*{b-bhover-background-start}*/, #4272a4 /*{b-bhover-background-end}*/); /* FF3.6 */
+ background-image: -ms-linear-gradient( #6facd5 /*{b-bhover-background-start}*/, #4272a4 /*{b-bhover-background-end}*/); /* IE10 */
+ background-image: -o-linear-gradient( #6facd5 /*{b-bhover-background-start}*/, #4272a4 /*{b-bhover-background-end}*/); /* Opera 11.10+ */
+ background-image: linear-gradient( #6facd5 /*{b-bhover-background-start}*/, #4272a4 /*{b-bhover-background-end}*/);
+}
+.ui-btn-hover-b a.ui-link-inherit {
+ color: #fff /*{b-bhover-color}*/;
+}
+.ui-btn-down-b {
+ border: 1px solid #225377 /*{b-bdown-border}*/;
+ background: #4e89c5 /*{b-bdown-background-color}*/;
+ font-weight: bold;
+ color: #fff /*{b-bdown-color}*/;
+ text-shadow: 0 /*{b-bdown-shadow-x}*/ 1px /*{b-bdown-shadow-y}*/ 1px /*{b-bdown-shadow-radius}*/ #194b7e /*{b-bdown-shadow-color}*/;
+ background-image: -webkit-gradient(linear, left top, left bottom, from( #295b8e /*{b-bdown-background-start}*/), to( #3e79b5 /*{b-bdown-background-end}*/)); /* Saf4+, Chrome */
+ background-image: -webkit-linear-gradient( #295b8e /*{b-bdown-background-start}*/, #3e79b5 /*{b-bdown-background-end}*/); /* Chrome 10+, Saf5.1+ */
+ background-image: -moz-linear-gradient( #295b8e /*{b-bdown-background-start}*/, #3e79b5 /*{b-bdown-background-end}*/); /* FF3.6 */
+ background-image: -ms-linear-gradient( #295b8e /*{b-bdown-background-start}*/, #3e79b5 /*{b-bdown-background-end}*/); /* IE10 */
+ background-image: -o-linear-gradient( #295b8e /*{b-bdown-background-start}*/, #3e79b5 /*{b-bdown-background-end}*/); /* Opera 11.10+ */
+ background-image: linear-gradient( #295b8e /*{b-bdown-background-start}*/, #3e79b5 /*{b-bdown-background-end}*/);
+}
+.ui-btn-down-b a.ui-link-inherit {
+ color: #fff /*{b-bdown-color}*/;
+}
+.ui-btn-up-b,
+.ui-btn-hover-b,
+.ui-btn-down-b {
+ font-family: Helvetica, Arial, sans-serif /*{global-font-family}*/;
+ text-decoration: none;
+}
+/* C
+-----------------------------------------------------------------------------------------------------------*/
+.ui-bar-c {
+ border: 1px solid #B3B3B3 /*{c-bar-border}*/;
+ background: #eeeeee /*{c-bar-background-color}*/;
+ color: #3E3E3E /*{c-bar-color}*/;
+ font-weight: bold;
+ text-shadow: 0 /*{c-bar-shadow-x}*/ 1px /*{c-bar-shadow-y}*/ 1px /*{c-bar-shadow-radius}*/ #fff /*{c-bar-shadow-color}*/;
+ background-image: -webkit-gradient(linear, left top, left bottom, from( #f0f0f0 /*{c-bar-background-start}*/), to( #ddd /*{c-bar-background-end}*/)); /* Saf4+, Chrome */
+ background-image: -webkit-linear-gradient( #f0f0f0 /*{c-bar-background-start}*/, #ddd /*{c-bar-background-end}*/); /* Chrome 10+, Saf5.1+ */
+ background-image: -moz-linear-gradient( #f0f0f0 /*{c-bar-background-start}*/, #ddd /*{c-bar-background-end}*/); /* FF3.6 */
+ background-image: -ms-linear-gradient( #f0f0f0 /*{c-bar-background-start}*/, #ddd /*{c-bar-background-end}*/); /* IE10 */
+ background-image: -o-linear-gradient( #f0f0f0 /*{c-bar-background-start}*/, #ddd /*{c-bar-background-end}*/); /* Opera 11.10+ */
+ background-image: linear-gradient( #f0f0f0 /*{c-bar-background-start}*/, #ddd /*{c-bar-background-end}*/);
+}
+.ui-bar-c .ui-link-inherit {
+ color: #3E3E3E /*{c-bar-color}*/;
+}
+.ui-bar-c .ui-link {
+ color: #7cc4e7 /*{c-bar-link-color}*/;
+ font-weight: bold;
+}
+.ui-bar-c .ui-link:hover {
+ color: #2489CE /*{c-bar-link-hover}*/;
+}
+.ui-bar-c .ui-link:active {
+ color: #2489CE /*{c-bar-link-active}*/;
+}
+.ui-bar-c .ui-link:visited {
+ color: #2489CE /*{c-bar-link-visited}*/;
+}
+.ui-bar-c,
+.ui-bar-c input,
+.ui-bar-c select,
+.ui-bar-c textarea,
+.ui-bar-c button {
+ font-family: Helvetica, Arial, sans-serif /*{global-font-family}*/;
+}
+.ui-body-c,
+.ui-overlay-c {
+ border: 1px solid #aaa /*{c-body-border}*/;
+ color: #333333 /*{c-body-color}*/;
+ text-shadow: 0 /*{c-body-shadow-x}*/ 1px /*{c-body-shadow-y}*/ 0 /*{c-body-shadow-radius}*/ #fff /*{c-body-shadow-color}*/;
+ background: #f9f9f9 /*{c-body-background-color}*/;
+ background-image: -webkit-gradient(linear, left top, left bottom, from( #f9f9f9 /*{c-body-background-start}*/), to( #eeeeee /*{c-body-background-end}*/)); /* Saf4+, Chrome */
+ background-image: -webkit-linear-gradient( #f9f9f9 /*{c-body-background-start}*/, #eeeeee /*{c-body-background-end}*/); /* Chrome 10+, Saf5.1+ */
+ background-image: -moz-linear-gradient( #f9f9f9 /*{c-body-background-start}*/, #eeeeee /*{c-body-background-end}*/); /* FF3.6 */
+ background-image: -ms-linear-gradient( #f9f9f9 /*{c-body-background-start}*/, #eeeeee /*{c-body-background-end}*/); /* IE10 */
+ background-image: -o-linear-gradient( #f9f9f9 /*{c-body-background-start}*/, #eeeeee /*{c-body-background-end}*/); /* Opera 11.10+ */
+ background-image: linear-gradient( #f9f9f9 /*{c-body-background-start}*/, #eeeeee /*{c-body-background-end}*/);
+}
+.ui-overlay-c {
+ background-image: none;
+ border-width: 0;
+}
+.ui-body-c,
+.ui-body-c input,
+.ui-body-c select,
+.ui-body-c textarea,
+.ui-body-c button {
+ font-family: Helvetica, Arial, sans-serif /*{global-font-family}*/;
+}
+.ui-body-c .ui-link-inherit {
+ color: #333333 /*{c-body-color}*/;
+}
+.ui-body-c .ui-link {
+ color: #2489CE /*{c-body-link-color}*/;
+ font-weight: bold;
+}
+.ui-body-c .ui-link:hover {
+ color: #2489CE /*{c-body-link-hover}*/;
+}
+.ui-body-c .ui-link:active {
+ color: #2489CE /*{c-body-link-active}*/;
+}
+.ui-body-c .ui-link:visited {
+ color: #2489CE /*{c-body-link-visited}*/;
+}
+.ui-btn-up-c {
+ border: 1px solid #ccc /*{c-bup-border}*/;
+ background: #eee /*{c-bup-background-color}*/;
+ font-weight: bold;
+ color: #222 /*{c-bup-color}*/;
+ text-shadow: 0 /*{c-bup-shadow-x}*/ 1px /*{c-bup-shadow-y}*/ 0 /*{c-bup-shadow-radius}*/ #ffffff /*{c-bup-shadow-color}*/;
+ background-image: -webkit-gradient(linear, left top, left bottom, from( #ffffff /*{c-bup-background-start}*/), to( #f1f1f1 /*{c-bup-background-end}*/)); /* Saf4+, Chrome */
+ background-image: -webkit-linear-gradient( #ffffff /*{c-bup-background-start}*/, #f1f1f1 /*{c-bup-background-end}*/); /* Chrome 10+, Saf5.1+ */
+ background-image: -moz-linear-gradient( #ffffff /*{c-bup-background-start}*/, #f1f1f1 /*{c-bup-background-end}*/); /* FF3.6 */
+ background-image: -ms-linear-gradient( #ffffff /*{c-bup-background-start}*/, #f1f1f1 /*{c-bup-background-end}*/); /* IE10 */
+ background-image: -o-linear-gradient( #ffffff /*{c-bup-background-start}*/, #f1f1f1 /*{c-bup-background-end}*/); /* Opera 11.10+ */
+ background-image: linear-gradient( #ffffff /*{c-bup-background-start}*/, #f1f1f1 /*{c-bup-background-end}*/);
+}
+.ui-btn-up-c a.ui-link-inherit {
+ color: #2F3E46 /*{c-bup-color}*/;
+}
+.ui-btn-hover-c {
+ border: 1px solid #bbb /*{c-bhover-border}*/;
+ background: #dfdfdf /*{c-bhover-background-color}*/;
+ font-weight: bold;
+ color: #222 /*{c-bhover-color}*/;
+ text-shadow: 0 /*{c-bhover-shadow-x}*/ 1px /*{c-bhover-shadow-y}*/ 0 /*{c-bhover-shadow-radius}*/ #ffffff /*{c-bhover-shadow-color}*/;
+ background-image: -webkit-gradient(linear, left top, left bottom, from( #f6f6f6 /*{c-bhover-background-start}*/), to( #e0e0e0 /*{c-bhover-background-end}*/)); /* Saf4+, Chrome */
+ background-image: -webkit-linear-gradient( #f9f9f9 /*{c-bhover-background-start}*/, #e0e0e0 /*{c-bhover-background-end}*/); /* Chrome 10+, Saf5.1+ */
+ background-image: -moz-linear-gradient( #f6f6f6 /*{c-bhover-background-start}*/, #e0e0e0 /*{c-bhover-background-end}*/); /* FF3.6 */
+ background-image: -ms-linear-gradient( #f6f6f6 /*{c-bhover-background-start}*/, #e0e0e0 /*{c-bhover-background-end}*/); /* IE10 */
+ background-image: -o-linear-gradient( #f6f6f6 /*{c-bhover-background-start}*/, #e0e0e0 /*{c-bhover-background-end}*/); /* Opera 11.10+ */
+ background-image: linear-gradient( #f6f6f6 /*{c-bhover-background-start}*/, #e0e0e0 /*{c-bhover-background-end}*/);
+}
+.ui-btn-hover-c a.ui-link-inherit {
+ color: #2F3E46 /*{c-bhover-color}*/;
+}
+.ui-btn-down-c {
+ border: 1px solid #bbb /*{c-bdown-border}*/;
+ background: #d6d6d6 /*{c-bdown-background-color}*/;
+ font-weight: bold;
+ color: #222 /*{c-bdown-color}*/;
+ text-shadow: 0 /*{c-bdown-shadow-x}*/ 1px /*{c-bdown-shadow-y}*/ 0 /*{c-bdown-shadow-radius}*/ #ffffff /*{c-bdown-shadow-color}*/;
+ background-image: -webkit-gradient(linear, left top, left bottom, from( #d0d0d0 /*{c-bdown-background-start}*/), to( #dfdfdf /*{c-bdown-background-end}*/)); /* Saf4+, Chrome */
+ background-image: -webkit-linear-gradient( #d0d0d0 /*{c-bdown-background-start}*/, #dfdfdf /*{c-bdown-background-end}*/); /* Chrome 10+, Saf5.1+ */
+ background-image: -moz-linear-gradient( #d0d0d0 /*{c-bdown-background-start}*/, #dfdfdf /*{c-bdown-background-end}*/); /* FF3.6 */
+ background-image: -ms-linear-gradient( #d0d0d0 /*{c-bdown-background-start}*/, #dfdfdf /*{c-bdown-background-end}*/); /* IE10 */
+ background-image: -o-linear-gradient( #d0d0d0 /*{c-bdown-background-start}*/, #dfdfdf /*{c-bdown-background-end}*/); /* Opera 11.10+ */
+ background-image: linear-gradient( #d0d0d0 /*{c-bdown-background-start}*/, #dfdfdf /*{c-bdown-background-end}*/);
+}
+.ui-btn-down-c a.ui-link-inherit {
+ color: #2F3E46 /*{c-bdown-color}*/;
+}
+.ui-btn-up-c,
+.ui-btn-hover-c,
+.ui-btn-down-c {
+ font-family: Helvetica, Arial, sans-serif /*{global-font-family}*/;
+ text-decoration: none;
+}
+/* D
+-----------------------------------------------------------------------------------------------------------*/
+.ui-bar-d {
+ border: 1px solid #bbb /*{d-bar-border}*/;
+ background: #bbb /*{d-bar-background-color}*/;
+ color: #333 /*{d-bar-color}*/;
+ text-shadow: 0 /*{d-bar-shadow-x}*/ 1px /*{d-bar-shadow-y}*/ 0 /*{d-bar-shadow-radius}*/ #eee /*{d-bar-shadow-color}*/;
+ background-image: -webkit-gradient(linear, left top, left bottom, from( #ddd /*{d-bar-background-start}*/), to( #bbb /*{d-bar-background-end}*/)); /* Saf4+, Chrome */
+ background-image: -webkit-linear-gradient( #ddd /*{d-bar-background-start}*/, #bbb /*{d-bar-background-end}*/); /* Chrome 10+, Saf5.1+ */
+ background-image: -moz-linear-gradient( #ddd /*{d-bar-background-start}*/, #bbb /*{d-bar-background-end}*/); /* FF3.6 */
+ background-image: -ms-linear-gradient( #ddd /*{d-bar-background-start}*/, #bbb /*{d-bar-background-end}*/); /* IE10 */
+ background-image: -o-linear-gradient( #ddd /*{d-bar-background-start}*/, #bbb /*{d-bar-background-end}*/); /* Opera 11.10+ */
+ background-image: linear-gradient( #ddd /*{d-bar-background-start}*/, #bbb /*{d-bar-background-end}*/);
+}
+.ui-bar-d,
+.ui-bar-d input,
+.ui-bar-d select,
+.ui-bar-d textarea,
+.ui-bar-d button {
+ font-family: Helvetica, Arial, sans-serif /*{global-font-family}*/;
+}
+.ui-bar-d .ui-link-inherit {
+ color: #333333 /*{d-bar-color}*/;
+}
+.ui-bar-d .ui-link {
+ color: #2489CE /*{d-bar-link-color}*/;
+ font-weight: bold;
+}
+.ui-bar-d .ui-link:hover {
+ color: #2489CE /*{d-bar-link-hover}*/;
+}
+.ui-bar-d .ui-link:active {
+ color: #2489CE /*{d-bar-link-active}*/;
+}
+.ui-bar-d .ui-link:visited {
+ color: #2489CE /*{d-bar-link-visited}*/;
+}
+.ui-body-d,
+.ui-overlay-d {
+ border: 1px solid #bbb /*{d-body-border}*/;
+ color: #333333 /*{d-body-color}*/;
+ text-shadow: 0 /*{d-body-shadow-x}*/ 1px /*{d-body-shadow-y}*/ 0 /*{d-body-shadow-radius}*/ #fff /*{d-body-shadow-color}*/;
+ background: #ffffff /*{d-body-background-color}*/;
+ background-image: -webkit-gradient(linear, left top, left bottom, from( #fff), to( #fff /*{d-body-background-end}*/)); /* Saf4+, Chrome */
+ background-image: -webkit-linear-gradient( #fff /*{d-body-background-start}*/, #fff /*{d-body-background-end}*/); /* Chrome 10+, Saf5.1+ */
+ background-image: -moz-linear-gradient( #fff /*{d-body-background-start}*/, #fff /*{d-body-background-end}*/); /* FF3.6 */
+ background-image: -ms-linear-gradient( #fff /*{d-body-background-start}*/, #fff /*{d-body-background-end}*/); /* IE10 */
+ background-image: -o-linear-gradient( #fff /*{d-body-background-start}*/, #fff /*{d-body-background-end}*/); /* Opera 11.10+ */
+ background-image: linear-gradient( #fff /*{d-body-background-start}*/, #fff /*{d-body-background-end}*/);
+}
+.ui-overlay-d {
+ background-image: none;
+ border-width: 0;
+}
+.ui-body-d,
+.ui-body-d input,
+.ui-body-d select,
+.ui-body-d textarea,
+.ui-body-d button {
+ font-family: Helvetica, Arial, sans-serif /*{global-font-family}*/;
+}
+.ui-body-d .ui-link-inherit {
+ color: #333333 /*{d-body-color}*/;
+}
+.ui-body-d .ui-link {
+ color: #2489CE /*{d-body-link-color}*/;
+ font-weight: bold;
+}
+.ui-body-d .ui-link:hover {
+ color: #2489CE /*{d-body-link-hover}*/;
+}
+.ui-body-d .ui-link:active {
+ color: #2489CE /*{d-body-link-active}*/;
+}
+.ui-body-d .ui-link:visited {
+ color: #2489CE /*{d-body-link-visited}*/;
+}
+.ui-btn-up-d {
+ border: 1px solid #bbb /*{d-bup-border}*/;
+ background: #fff /*{d-bup-background-color}*/;
+ font-weight: bold;
+ color: #333 /*{d-bup-color}*/;
+ text-shadow: 0 /*{d-bup-shadow-x}*/ 1px /*{d-bup-shadow-y}*/ 0 /*{d-bup-shadow-radius}*/ #fff /*{d-bup-shadow-color}*/;
+ background-image: -webkit-gradient(linear, left top, left bottom, from( #fafafa), to( #f6f6f6 /*{d-bup-background-end}*/)); /* Saf4+, Chrome */
+ background-image: -webkit-linear-gradient( #fafafa /*{d-bup-background-start}*/, #f6f6f6 /*{d-bup-background-end}*/); /* Chrome 10+, Saf5.1+ */
+ background-image: -moz-linear-gradient( #fafafa /*{d-bup-background-start}*/, #f6f6f6 /*{d-bup-background-end}*/); /* FF3.6 */
+ background-image: -ms-linear-gradient( #fafafa /*{d-bup-background-start}*/, #f6f6f6 /*{d-bup-background-end}*/); /* IE10 */
+ background-image: -o-linear-gradient( #fafafa /*{d-bup-background-start}*/, #f6f6f6 /*{d-bup-background-end}*/); /* Opera 11.10+ */
+ background-image: linear-gradient( #fafafa /*{d-bup-background-start}*/, #f6f6f6 /*{d-bup-background-end}*/);
+}
+.ui-btn-up-d a.ui-link-inherit {
+ color: #333 /*{d-bup-color}*/;
+}
+.ui-btn-hover-d {
+ border: 1px solid #aaa /*{d-bhover-border}*/;
+ background: #eeeeee /*{d-bhover-background-color}*/;
+ font-weight: bold;
+ color: #333 /*{d-bhover-color}*/;
+ cursor: pointer;
+ text-shadow: 0 /*{d-bhover-shadow-x}*/ 1px /*{d-bhover-shadow-y}*/ 0 /*{d-bhover-shadow-radius}*/ #fff /*{d-bhover-shadow-color}*/;
+ background-image: -webkit-gradient(linear, left top, left bottom, from( #eee), to( #fff /*{d-bhover-background-end}*/)); /* Saf4+, Chrome */
+ background-image: -webkit-linear-gradient( #eee /*{d-bhover-background-start}*/, #fff /*{d-bhover-background-end}*/); /* Chrome 10+, Saf5.1+ */
+ background-image: -moz-linear-gradient( #eee /*{d-bhover-background-start}*/, #fff /*{d-bhover-background-end}*/); /* FF3.6 */
+ background-image: -ms-linear-gradient( #eee /*{d-bhover-background-start}*/, #fff /*{d-bhover-background-end}*/); /* IE10 */
+ background-image: -o-linear-gradient( #eee /*{d-bhover-background-start}*/, #fff /*{d-bhover-background-end}*/); /* Opera 11.10+ */
+ background-image: linear-gradient( #eee /*{d-bhover-background-start}*/, #fff /*{d-bhover-background-end}*/);
+}
+.ui-btn-hover-d a.ui-link-inherit {
+ color: #333 /*{d-bhover-color}*/;
+}
+.ui-btn-down-d {
+ border: 1px solid #aaa /*{d-bdown-border}*/;
+ background: #eee /*{d-bdown-background-color}*/;
+ font-weight: bold;
+ color: #333 /*{d-bdown-color}*/;
+ text-shadow: 0 /*{d-bdown-shadow-x}*/ 1px /*{d-bdown-shadow-y}*/ 0 /*{d-bdown-shadow-radius}*/ #ffffff /*{d-bdown-shadow-color}*/;
+ background-image: -webkit-gradient(linear, left top, left bottom, from( #e5e5e5 /*{d-bdown-background-start}*/), to( #f2f2f2 /*{d-bdown-background-end}*/)); /* Saf4+, Chrome */
+ background-image: -webkit-linear-gradient( #e5e5e5 /*{d-bdown-background-start}*/, #f2f2f2 /*{d-bdown-background-end}*/); /* Chrome 10+, Saf5.1+ */
+ background-image: -moz-linear-gradient( #e5e5e5 /*{d-bdown-background-start}*/, #f2f2f2 /*{d-bdown-background-end}*/); /* FF3.6 */
+ background-image: -ms-linear-gradient( #e5e5e5 /*{d-bdown-background-start}*/, #f2f2f2 /*{d-bdown-background-end}*/); /* IE10 */
+ background-image: -o-linear-gradient( #e5e5e5 /*{d-bdown-background-start}*/, #f2f2f2 /*{d-bdown-background-end}*/); /* Opera 11.10+ */
+ background-image: linear-gradient( #e5e5e5 /*{d-bdown-background-start}*/, #f2f2f2 /*{d-bdown-background-end}*/);
+}
+.ui-btn-down-d a.ui-link-inherit {
+ color: #333 /*{d-bdown-color}*/;
+}
+.ui-btn-up-d,
+.ui-btn-hover-d,
+.ui-btn-down-d {
+ font-family: Helvetica, Arial, sans-serif /*{global-font-family}*/;
+ text-decoration: none;
+}
+/* E
+-----------------------------------------------------------------------------------------------------------*/
+.ui-bar-e {
+ border: 1px solid #F7C942 /*{e-bar-border}*/;
+ background: #fadb4e /*{e-bar-background-color}*/;
+ color: #333 /*{e-bar-color}*/;
+ text-shadow: 0 /*{e-bar-shadow-x}*/ 1px /*{e-bar-shadow-y}*/ 0 /*{e-bar-shadow-radius}*/ #fff /*{e-bar-shadow-color}*/;
+ background-image: -webkit-gradient(linear, left top, left bottom, from( #fceda7 /*{e-bar-background-start}*/), to( #fbef7e /*{e-bar-background-end}*/)); /* Saf4+, Chrome */
+ background-image: -webkit-linear-gradient( #fceda7 /*{e-bar-background-start}*/, #fbef7e /*{e-bar-background-end}*/); /* Chrome 10+, Saf5.1+ */
+ background-image: -moz-linear-gradient( #fceda7 /*{e-bar-background-start}*/, #fbef7e /*{e-bar-background-end}*/); /* FF3.6 */
+ background-image: -ms-linear-gradient( #fceda7 /*{e-bar-background-start}*/, #fbef7e /*{e-bar-background-end}*/); /* IE10 */
+ background-image: -o-linear-gradient( #fceda7 /*{e-bar-background-start}*/, #fbef7e /*{e-bar-background-end}*/); /* Opera 11.10+ */
+ background-image: linear-gradient( #fceda7 /*{e-bar-background-start}*/, #fbef7e /*{e-bar-background-end}*/);
+}
+.ui-bar-e,
+.ui-bar-e input,
+.ui-bar-e select,
+.ui-bar-e textarea,
+.ui-bar-e button {
+ font-family: Helvetica, Arial, sans-serif /*{global-font-family}*/;
+}
+.ui-bar-e .ui-link-inherit {
+ color: #333333 /*{e-bar-color}*/;
+}
+.ui-bar-e .ui-link {
+ color: #2489CE /*{e-bar-link-color}*/;
+ font-weight: bold;
+}
+.ui-bar-e .ui-link:hover {
+ color: #2489CE /*{e-bar-link-hover}*/;
+}
+.ui-bar-e .ui-link:active {
+ color: #2489CE /*{e-bar-link-active}*/;
+}
+.ui-bar-e .ui-link:visited {
+ color: #2489CE /*{e-bar-link-visited}*/;
+}
+.ui-body-e,
+.ui-overlay-e {
+ border: 1px solid #F7C942 /*{e-body-border}*/;
+ color: #222222 /*{e-body-color}*/;
+ text-shadow: 0 /*{e-body-shadow-x}*/ 1px /*{e-body-shadow-y}*/ 0 /*{e-body-shadow-radius}*/ #fff /*{e-body-shadow-color}*/;
+ background: #fff9df /*{e-body-background-color}*/;
+ background-image: -webkit-gradient(linear, left top, left bottom, from( #fffadf /*{e-body-background-start}*/), to( #fff3a5 /*{e-body-background-end}*/)); /* Saf4+, Chrome */
+ background-image: -webkit-linear-gradient( #fffadf /*{e-body-background-start}*/, #fff3a5 /*{e-body-background-end}*/); /* Chrome 10+, Saf5.1+ */
+ background-image: -moz-linear-gradient( #fffadf /*{e-body-background-start}*/, #fff3a5 /*{e-body-background-end}*/); /* FF3.6 */
+ background-image: -ms-linear-gradient( #fffadf /*{e-body-background-start}*/, #fff3a5 /*{e-body-background-end}*/); /* IE10 */
+ background-image: -o-linear-gradient( #fffadf /*{e-body-background-start}*/, #fff3a5 /*{e-body-background-end}*/); /* Opera 11.10+ */
+ background-image: linear-gradient( #fffadf /*{e-body-background-start}*/, #fff3a5 /*{e-body-background-end}*/);
+}
+.ui-overlay-e {
+ background-image: none;
+ border-width: 0;
+}
+.ui-body-e,
+.ui-body-e input,
+.ui-body-e select,
+.ui-body-e textarea,
+.ui-body-e button {
+ font-family: Helvetica, Arial, sans-serif /*{global-font-family}*/;
+}
+.ui-body-e .ui-link-inherit {
+ color: #333333 /*{e-body-color}*/;
+}
+.ui-body-e .ui-link {
+ color: #2489CE /*{e-body-link-color}*/;
+ font-weight: bold;
+}
+.ui-body-e .ui-link:hover {
+ color: #2489CE /*{e-body-link-hover}*/;
+}
+.ui-body-e .ui-link:active {
+ color: #2489CE /*{e-body-link-active}*/;
+}
+.ui-body-e .ui-link:visited {
+ color: #2489CE /*{e-body-link-visited}*/;
+}
+.ui-btn-up-e {
+ border: 1px solid #F4C63f /*{e-bup-border}*/;
+ background: #fadb4e /*{e-bup-background-color}*/;
+ font-weight: bold;
+ color: #222 /*{e-bup-color}*/;
+ text-shadow: 0 /*{e-bup-shadow-x}*/ 1px /*{e-bup-shadow-y}*/ 0 /*{e-bup-shadow-radius}*/ #fff /*{e-bup-shadow-color}*/;
+ background-image: -webkit-gradient(linear, left top, left bottom, from( #ffefaa /*{e-bup-background-start}*/), to( #ffe155 /*{e-bup-background-end}*/)); /* Saf4+, Chrome */
+ background-image: -webkit-linear-gradient( #ffefaa /*{e-bup-background-start}*/, #ffe155 /*{e-bup-background-end}*/); /* Chrome 10+, Saf5.1+ */
+ background-image: -moz-linear-gradient( #ffefaa /*{e-bup-background-start}*/, #ffe155 /*{e-bup-background-end}*/); /* FF3.6 */
+ background-image: -ms-linear-gradient( #ffefaa /*{e-bup-background-start}*/, #ffe155 /*{e-bup-background-end}*/); /* IE10 */
+ background-image: -o-linear-gradient( #ffefaa /*{e-bup-background-start}*/, #ffe155 /*{e-bup-background-end}*/); /* Opera 11.10+ */
+ background-image: linear-gradient( #ffefaa /*{e-bup-background-start}*/, #ffe155 /*{e-bup-background-end}*/);
+}
+.ui-btn-up-e a.ui-link-inherit {
+ color: #222 /*{e-bup-color}*/;
+}
+.ui-btn-hover-e {
+ border: 1px solid #F2C43d /*{e-bhover-border}*/;
+ background: #fbe26f /*{e-bhover-background-color}*/;
+ font-weight: bold;
+ color: #111 /*{e-bhover-color}*/;
+ text-shadow: 0 /*{e-bhover-shadow-x}*/ 1px /*{e-bhover-shadow-y}*/ 0 /*{e-bhover-shadow-radius}*/ #fff /*{e-bhover-shadow-color}*/;
+ background-image: -webkit-gradient(linear, left top, left bottom, from( #fff5ba /*{e-bhover-background-start}*/), to( #fbdd52 /*{e-bhover-background-end}*/)); /* Saf4+, Chrome */
+ background-image: -webkit-linear-gradient( #fff5ba /*{e-bhover-background-start}*/, #fbdd52 /*{e-bhover-background-end}*/); /* Chrome 10+, Saf5.1+ */
+ background-image: -moz-linear-gradient( #fff5ba /*{e-bhover-background-start}*/, #fbdd52 /*{e-bhover-background-end}*/); /* FF3.6 */
+ background-image: -ms-linear-gradient( #fff5ba /*{e-bhover-background-start}*/, #fbdd52 /*{e-bhover-background-end}*/); /* IE10 */
+ background-image: -o-linear-gradient( #fff5ba /*{e-bhover-background-start}*/, #fbdd52 /*{e-bhover-background-end}*/); /* Opera 11.10+ */
+ background-image: linear-gradient( #fff5ba /*{e-bhover-background-start}*/, #fbdd52 /*{e-bhover-background-end}*/);
+}
+.ui-btn-hover-e a.ui-link-inherit {
+ color: #333 /*{e-bhover-color}*/;
+}
+.ui-btn-down-e {
+ border: 1px solid #F2C43d /*{e-bdown-border}*/;
+ background: #fceda7 /*{e-bdown-background-color}*/;
+ font-weight: bold;
+ color: #111 /*{e-bdown-color}*/;
+ text-shadow: 0 /*{e-bdown-shadow-x}*/ 1px /*{e-bdown-shadow-y}*/ 0 /*{e-bdown-shadow-radius}*/ #ffffff /*{e-bdown-shadow-color}*/;
+ background-image: -webkit-gradient(linear, left top, left bottom, from( #f8d94c /*{e-bdown-background-start}*/), to( #fadb4e /*{e-bdown-background-end}*/)); /* Saf4+, Chrome */
+ background-image: -webkit-linear-gradient( #f8d94c /*{e-bdown-background-start}*/, #fadb4e /*{e-bdown-background-end}*/); /* Chrome 10+, Saf5.1+ */
+ background-image: -moz-linear-gradient( #f8d94c /*{e-bdown-background-start}*/, #fadb4e /*{e-bdown-background-end}*/); /* FF3.6 */
+ background-image: -ms-linear-gradient( #f8d94c /*{e-bdown-background-start}*/, #fadb4e /*{e-bdown-background-end}*/); /* IE10 */
+ background-image: -o-linear-gradient( #f8d94c /*{e-bdown-background-start}*/, #fadb4e /*{e-bdown-background-end}*/); /* Opera 11.10+ */
+ background-image: linear-gradient( #f8d94c /*{e-bdown-background-start}*/, #fadb4e /*{e-bdown-background-end}*/);
+}
+.ui-btn-down-e a.ui-link-inherit {
+ color: #333 /*{e-bdown-color}*/;
+}
+.ui-btn-up-e,
+.ui-btn-hover-e,
+.ui-btn-down-e {
+ font-family: Helvetica, Arial, sans-serif /*{global-font-family}*/;
+ text-decoration: none;
+}
+/* Structure */
+/* links within "buttons"
+-----------------------------------------------------------------------------------------------------------*/
+a.ui-link-inherit {
+ text-decoration: none !important;
+}
+/* Active class used as the "on" state across all themes
+-----------------------------------------------------------------------------------------------------------*/
+.ui-btn-active {
+ border: 1px solid #2373a5 /*{global-active-border}*/;
+ background: #5393c5 /*{global-active-background-color}*/;
+ font-weight: bold;
+ color: #fff /*{global-active-color}*/;
+ cursor: pointer;
+ text-shadow: 0 /*{global-active-shadow-x}*/ 1px /*{global-active-shadow-y}*/ 1px /*{global-active-shadow-radius}*/ #3373a5 /*{global-active-shadow-color}*/;
+ text-decoration: none;
+ background-image: -webkit-gradient(linear, left top, left bottom, from( #5393c5 /*{global-active-background-start}*/), to( #6facd5 /*{global-active-background-end}*/)); /* Saf4+, Chrome */
+ background-image: -webkit-linear-gradient( #5393c5 /*{global-active-background-start}*/, #6facd5 /*{global-active-background-end}*/); /* Chrome 10+, Saf5.1+ */
+ background-image: -moz-linear-gradient( #5393c5 /*{global-active-background-start}*/, #6facd5 /*{global-active-background-end}*/); /* FF3.6 */
+ background-image: -ms-linear-gradient( #5393c5 /*{global-active-background-start}*/, #6facd5 /*{global-active-background-end}*/); /* IE10 */
+ background-image: -o-linear-gradient( #5393c5 /*{global-active-background-start}*/, #6facd5 /*{global-active-background-end}*/); /* Opera 11.10+ */
+ background-image: linear-gradient( #5393c5 /*{global-active-background-start}*/, #6facd5 /*{global-active-background-end}*/);
+ font-family: Helvetica, Arial, sans-serif /*{global-font-family}*/;
+}
+.ui-btn-active a.ui-link-inherit {
+ color: #fff /*{global-active-color}*/;
+}
+/* button inner top highlight
+-----------------------------------------------------------------------------------------------------------*/
+.ui-btn-inner {
+ border-top: 1px solid #fff;
+ border-color: rgba(255,255,255,.3);
+}
+/* corner rounding classes
+-----------------------------------------------------------------------------------------------------------*/
+.ui-corner-tl {
+ -moz-border-radius-topleft: .6em /*{global-radii-blocks}*/;
+ -webkit-border-top-left-radius: .6em /*{global-radii-blocks}*/;
+ border-top-left-radius: .6em /*{global-radii-blocks}*/;
+}
+.ui-corner-tr {
+ -moz-border-radius-topright: .6em /*{global-radii-blocks}*/;
+ -webkit-border-top-right-radius: .6em /*{global-radii-blocks}*/;
+ border-top-right-radius: .6em /*{global-radii-blocks}*/;
+}
+.ui-corner-bl {
+ -moz-border-radius-bottomleft: .6em /*{global-radii-blocks}*/;
+ -webkit-border-bottom-left-radius: .6em /*{global-radii-blocks}*/;
+ border-bottom-left-radius: .6em /*{global-radii-blocks}*/;
+}
+.ui-corner-br {
+ -moz-border-radius-bottomright: .6em /*{global-radii-blocks}*/;
+ -webkit-border-bottom-right-radius: .6em /*{global-radii-blocks}*/;
+ border-bottom-right-radius: .6em /*{global-radii-blocks}*/;
+}
+.ui-corner-top {
+ -moz-border-radius-topleft: .6em /*{global-radii-blocks}*/;
+ -webkit-border-top-left-radius: .6em /*{global-radii-blocks}*/;
+ border-top-left-radius: .6em /*{global-radii-blocks}*/;
+ -moz-border-radius-topright: .6em /*{global-radii-blocks}*/;
+ -webkit-border-top-right-radius: .6em /*{global-radii-blocks}*/;
+ border-top-right-radius: .6em /*{global-radii-blocks}*/;
+}
+.ui-corner-bottom {
+ -moz-border-radius-bottomleft: .6em /*{global-radii-blocks}*/;
+ -webkit-border-bottom-left-radius: .6em /*{global-radii-blocks}*/;
+ border-bottom-left-radius: .6em /*{global-radii-blocks}*/;
+ -moz-border-radius-bottomright: .6em /*{global-radii-blocks}*/;
+ -webkit-border-bottom-right-radius: .6em /*{global-radii-blocks}*/;
+ border-bottom-right-radius: .6em /*{global-radii-blocks}*/;
+ }
+.ui-corner-right {
+ -moz-border-radius-topright: .6em /*{global-radii-blocks}*/;
+ -webkit-border-top-right-radius: .6em /*{global-radii-blocks}*/;
+ border-top-right-radius: .6em /*{global-radii-blocks}*/;
+ -moz-border-radius-bottomright: .6em /*{global-radii-blocks}*/;
+ -webkit-border-bottom-right-radius: .6em /*{global-radii-blocks}*/;
+ border-bottom-right-radius: .6em /*{global-radii-blocks}*/;
+}
+.ui-corner-left {
+ -moz-border-radius-topleft: .6em /*{global-radii-blocks}*/;
+ -webkit-border-top-left-radius: .6em /*{global-radii-blocks}*/;
+ border-top-left-radius: .6em /*{global-radii-blocks}*/;
+ -moz-border-radius-bottomleft: .6em /*{global-radii-blocks}*/;
+ -webkit-border-bottom-left-radius: .6em /*{global-radii-blocks}*/;
+ border-bottom-left-radius: .6em /*{global-radii-blocks}*/;
+}
+.ui-corner-all {
+ -moz-border-radius: .6em /*{global-radii-blocks}*/;
+ -webkit-border-radius: .6em /*{global-radii-blocks}*/;
+ border-radius: .6em /*{global-radii-blocks}*/;
+}
+.ui-corner-none {
+ -moz-border-radius: 0;
+ -webkit-border-radius: 0;
+ border-radius: 0;
+}
+/* Form field separator
+-----------------------------------------------------------------------------------------------------------*/
+.ui-br {
+ border-bottom: rgb(130,130,130);
+ border-bottom: rgba(130,130,130,.3);
+ border-bottom-width: 1px;
+ border-bottom-style: solid;
+}
+/* Interaction cues
+-----------------------------------------------------------------------------------------------------------*/
+.ui-disabled {
+ opacity: .3;
+}
+.ui-disabled,
+.ui-disabled a {
+ cursor: default !important;
+ pointer-events: none;
+}
+.ui-disabled .ui-btn-text {
+ -ms-filter:"progid:DXImageTransform.Microsoft.Alpha(opacity=30)";
+ filter: alpha(opacity=30);
+ zoom: 1;
+}
+/* Icons
+-----------------------------------------------------------------------------------------------------------*/
+.ui-icon,
+.ui-icon-searchfield:after {
+ background: #666 /*{global-icon-color}*/;
+ background: rgba(0,0,0,.4) /*{global-icon-disc}*/;
+ background-image: url(images/icons-18-white.png) /*{global-icon-set}*/;
+ background-repeat: no-repeat;
+ -moz-border-radius: 9px;
+ -webkit-border-radius: 9px;
+ border-radius: 9px;
+}
+/* Alt icon color
+-----------------------------------------------------------------------------------------------------------*/
+.ui-icon-alt {
+ background: #fff;
+ background: rgba(255,255,255,.3);
+ background-image: url(images/icons-18-black.png);
+ background-repeat: no-repeat;
+}
+/* HD/"retina" sprite
+-----------------------------------------------------------------------------------------------------------*/
+@media only screen and (-webkit-min-device-pixel-ratio: 1.5),
+ only screen and (min--moz-device-pixel-ratio: 1.5),
+ only screen and (min-resolution: 240dpi) {
+
+ .ui-icon-plus, .ui-icon-minus, .ui-icon-delete, .ui-icon-arrow-r,
+ .ui-icon-arrow-l, .ui-icon-arrow-u, .ui-icon-arrow-d, .ui-icon-check,
+ .ui-icon-gear, .ui-icon-refresh, .ui-icon-forward, .ui-icon-back,
+ .ui-icon-grid, .ui-icon-star, .ui-icon-alert, .ui-icon-info, .ui-icon-home, .ui-icon-search, .ui-icon-searchfield:after,
+ .ui-icon-checkbox-off, .ui-icon-checkbox-on, .ui-icon-radio-off, .ui-icon-radio-on {
+ background-image: url(images/icons-36-white.png);
+ -moz-background-size: 776px 18px;
+ -o-background-size: 776px 18px;
+ -webkit-background-size: 776px 18px;
+ background-size: 776px 18px;
+ }
+ .ui-icon-alt {
+ background-image: url(images/icons-36-black.png);
+ }
+}
+/* plus minus */
+.ui-icon-plus {
+ background-position: -0 50%;
+}
+.ui-icon-minus {
+ background-position: -36px 50%;
+}
+/* delete/close */
+.ui-icon-delete {
+ background-position: -72px 50%;
+}
+/* arrows */
+.ui-icon-arrow-r {
+ background-position: -108px 50%;
+}
+.ui-icon-arrow-l {
+ background-position: -144px 50%;
+}
+.ui-icon-arrow-u {
+ background-position: -180px 50%;
+}
+.ui-icon-arrow-d {
+ background-position: -216px 50%;
+}
+/* misc */
+.ui-icon-check {
+ background-position: -252px 50%;
+}
+.ui-icon-gear {
+ background-position: -288px 50%;
+}
+.ui-icon-refresh {
+ background-position: -324px 50%;
+}
+.ui-icon-forward {
+ background-position: -360px 50%;
+}
+.ui-icon-back {
+ background-position: -396px 50%;
+}
+.ui-icon-grid {
+ background-position: -432px 50%;
+}
+.ui-icon-star {
+ background-position: -468px 50%;
+}
+.ui-icon-alert {
+ background-position: -504px 50%;
+}
+.ui-icon-info {
+ background-position: -540px 50%;
+}
+.ui-icon-home {
+ background-position: -576px 50%;
+}
+.ui-icon-search,
+.ui-icon-searchfield:after {
+ background-position: -612px 50%;
+}
+.ui-icon-checkbox-off {
+ background-position: -684px 50%;
+}
+.ui-icon-checkbox-on {
+ background-position: -648px 50%;
+}
+.ui-icon-radio-off {
+ background-position: -756px 50%;
+}
+.ui-icon-radio-on {
+ background-position: -720px 50%;
+}
+/* checks,radios */
+.ui-checkbox .ui-icon {
+ -moz-border-radius: 3px;
+ -webkit-border-radius: 3px;
+ border-radius: 3px;
+}
+.ui-icon-checkbox-off,
+.ui-icon-radio-off {
+ background-color: transparent;
+}
+.ui-checkbox-on .ui-icon,
+.ui-radio-on .ui-icon {
+ background-color: #4596ce /*{global-active-background-color}*/; /* NOTE: this hex should match the active state color. It's repeated here for cascade */
+}
+/* loading icon */
+.ui-icon-loading {
+ background: url(images/ajax-loader.gif);
+ background-size: 46px 46px;
+}
+/* Button corner classes
+-----------------------------------------------------------------------------------------------------------*/
+.ui-btn-corner-tl {
+ -moz-border-radius-topleft: 1em /*{global-radii-buttons}*/;
+ -webkit-border-top-left-radius: 1em /*{global-radii-buttons}*/;
+ border-top-left-radius: 1em /*{global-radii-buttons}*/;
+}
+.ui-btn-corner-tr {
+ -moz-border-radius-topright: 1em /*{global-radii-buttons}*/;
+ -webkit-border-top-right-radius: 1em /*{global-radii-buttons}*/;
+ border-top-right-radius: 1em /*{global-radii-buttons}*/;
+}
+.ui-btn-corner-bl {
+ -moz-border-radius-bottomleft: 1em /*{global-radii-buttons}*/;
+ -webkit-border-bottom-left-radius: 1em /*{global-radii-buttons}*/;
+ border-bottom-left-radius: 1em /*{global-radii-buttons}*/;
+}
+.ui-btn-corner-br {
+ -moz-border-radius-bottomright: 1em /*{global-radii-buttons}*/;
+ -webkit-border-bottom-right-radius: 1em /*{global-radii-buttons}*/;
+ border-bottom-right-radius: 1em /*{global-radii-buttons}*/;
+}
+.ui-btn-corner-top {
+ -moz-border-radius-topleft: 1em /*{global-radii-buttons}*/;
+ -webkit-border-top-left-radius: 1em /*{global-radii-buttons}*/;
+ border-top-left-radius: 1em /*{global-radii-buttons}*/;
+ -moz-border-radius-topright: 1em /*{global-radii-buttons}*/;
+ -webkit-border-top-right-radius: 1em /*{global-radii-buttons}*/;
+ border-top-right-radius: 1em /*{global-radii-buttons}*/;
+}
+.ui-btn-corner-bottom {
+ -moz-border-radius-bottomleft: 1em /*{global-radii-buttons}*/;
+ -webkit-border-bottom-left-radius: 1em /*{global-radii-buttons}*/;
+ border-bottom-left-radius: 1em /*{global-radii-buttons}*/;
+ -moz-border-radius-bottomright: 1em /*{global-radii-buttons}*/;
+ -webkit-border-bottom-right-radius: 1em /*{global-radii-buttons}*/;
+ border-bottom-right-radius: 1em /*{global-radii-buttons}*/;
+}
+.ui-btn-corner-right {
+ -moz-border-radius-topright: 1em /*{global-radii-buttons}*/;
+ -webkit-border-top-right-radius: 1em /*{global-radii-buttons}*/;
+ border-top-right-radius: 1em /*{global-radii-buttons}*/;
+ -moz-border-radius-bottomright: 1em /*{global-radii-buttons}*/;
+ -webkit-border-bottom-right-radius: 1em /*{global-radii-buttons}*/;
+ border-bottom-right-radius: 1em /*{global-radii-buttons}*/;
+}
+.ui-btn-corner-left {
+ -moz-border-radius-topleft: 1em /*{global-radii-buttons}*/;
+ -webkit-border-top-left-radius: 1em /*{global-radii-buttons}*/;
+ border-top-left-radius: 1em /*{global-radii-buttons}*/;
+ -moz-border-radius-bottomleft: 1em /*{global-radii-buttons}*/;
+ -webkit-border-bottom-left-radius: 1em /*{global-radii-buttons}*/;
+ border-bottom-left-radius: 1em /*{global-radii-buttons}*/;
+}
+.ui-btn-corner-all {
+ -moz-border-radius: 1em /*{global-radii-buttons}*/;
+ -webkit-border-radius: 1em /*{global-radii-buttons}*/;
+ border-radius: 1em /*{global-radii-buttons}*/;
+}
+/* radius clip workaround for cleaning up corner trapping */
+.ui-corner-tl,
+.ui-corner-tr,
+.ui-corner-bl,
+.ui-corner-br,
+.ui-corner-top,
+.ui-corner-bottom,
+.ui-corner-right,
+.ui-corner-left,
+.ui-corner-all,
+.ui-btn-corner-tl,
+.ui-btn-corner-tr,
+.ui-btn-corner-bl,
+.ui-btn-corner-br,
+.ui-btn-corner-top,
+.ui-btn-corner-bottom,
+.ui-btn-corner-right,
+.ui-btn-corner-left,
+.ui-btn-corner-all {
+ -webkit-background-clip: padding-box;
+ -moz-background-clip: padding;
+ background-clip: padding-box;
+}
+/* Overlay / modal
+-----------------------------------------------------------------------------------------------------------*/
+.ui-overlay {
+ background: #666;
+ opacity: .5;
+ filter: Alpha(Opacity=50);
+ position: absolute;
+ width: 100%;
+ height: 100%;
+}
+.ui-overlay-shadow {
+ -moz-box-shadow: 0px 0px 12px rgba(0,0,0,.6);
+ -webkit-box-shadow: 0px 0px 12px rgba(0,0,0,.6);
+ box-shadow: 0px 0px 12px rgba(0,0,0,.6);
+}
+.ui-shadow {
+ -moz-box-shadow: 0px 1px 4px /*{global-box-shadow-size}*/ rgba(0,0,0,.3) /*{global-box-shadow-color}*/;
+ -webkit-box-shadow: 0px 1px 4px /*{global-box-shadow-size}*/ rgba(0,0,0,.3) /*{global-box-shadow-color}*/;
+ box-shadow: 0px 1px 4px /*{global-box-shadow-size}*/ rgba(0,0,0,.3) /*{global-box-shadow-color}*/;
+}
+.ui-bar-a .ui-shadow,
+.ui-bar-b .ui-shadow ,
+.ui-bar-c .ui-shadow {
+ -moz-box-shadow: 0px 1px 0 rgba(255,255,255,.3);
+ -webkit-box-shadow: 0px 1px 0 rgba(255,255,255,.3);
+ box-shadow: 0px 1px 0 rgba(255,255,255,.3);
+}
+.ui-shadow-inset {
+ -moz-box-shadow: inset 0px 1px 4px rgba(0,0,0,.2);
+ -webkit-box-shadow: inset 0px 1px 4px rgba(0,0,0,.2);
+ box-shadow: inset 0px 1px 4px rgba(0,0,0,.2);
+}
+.ui-icon-shadow {
+ -moz-box-shadow: 0px 1px 0 rgba(255,255,255,.4) /*{global-icon-shadow}*/;
+ -webkit-box-shadow: 0px 1px 0 rgba(255,255,255,.4) /*{global-icon-shadow}*/;
+ box-shadow: 0px 1px 0 rgba(255,255,255,.4) /*{global-icon-shadow}*/;
+}
+/* Focus state - set here for specificity (note: these classes are added by JavaScript)
+-----------------------------------------------------------------------------------------------------------*/
+.ui-btn:focus {
+ outline: 0;
+}
+.ui-focus,
+.ui-btn:focus {
+ -moz-box-shadow: 0px 0px 12px #387bbe /*{global-active-background-color}*/;
+ -webkit-box-shadow: 0px 0px 12px #387bbe /*{global-active-background-color}*/;
+ box-shadow: 0px 0px 12px #387bbe /*{global-active-background-color}*/;
+}
+/* unset box shadow in browsers that don't do it right
+-----------------------------------------------------------------------------------------------------------*/
+.ui-mobile-nosupport-boxshadow * {
+ -moz-box-shadow: none !important;
+ -webkit-box-shadow: none !important;
+ box-shadow: none !important;
+}
+/* ...and bring back focus */
+.ui-mobile-nosupport-boxshadow .ui-focus,
+.ui-mobile-nosupport-boxshadow .ui-btn:focus {
+ outline-width: 1px;
+ outline-style: dotted;
+}
+/* some unsets - more probably needed */
+.ui-mobile, .ui-mobile body { height: 99.9%; }
+.ui-mobile fieldset, .ui-page { padding: 0; margin: 0; }
+.ui-mobile a img, .ui-mobile fieldset { border-width: 0; }
+/* responsive page widths */
+.ui-mobile-viewport { margin: 0; overflow-x: visible; -webkit-text-size-adjust: none; -ms-text-size-adjust:none; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); }
+/* Issue #2066 */
+body.ui-mobile-viewport,
+div.ui-mobile-viewport { overflow-x: hidden; }
+/* "page" containers - full-screen views, one should always be in view post-pageload */
+.ui-mobile [data-role=page], .ui-mobile [data-role=dialog], .ui-page { top: 0; left: 0; width: 100%; min-height: 100%; position: absolute; display: none; border: 0; }
+.ui-mobile .ui-page-active { display: block; overflow: visible; }
+/* on ios4, setting focus on the page element causes flashing during transitions when there is an outline, so we turn off outlines */
+.ui-page { outline: none; }
+/*orientations from js are available */
+@media screen and (orientation: portrait){
+.ui-mobile, .ui-mobile .ui-page { min-height: 420px; }
+}
+@media screen and (orientation: landscape){
+.ui-mobile, .ui-mobile .ui-page { min-height: 300px; }
+}
+/* loading screen */
+.ui-loading .ui-loader { display: block; }
+.ui-loader { display: none; z-index: 9999999; position: fixed; top: 50%; box-shadow: 0 1px 1px -1px #fff; left: 50%; border:0; }
+.ui-loader-default { background: none; opacity: .18; width: 46px; height: 46px; margin-left: -23px; margin-top: -23px; }
+.ui-loader-verbose { width: 200px; opacity: .88; height: auto; margin-left: -110px; margin-top: -43px; padding: 10px; }
+.ui-loader-default h1 { font-size: 0; width: 0; height: 0; overflow: hidden; }
+.ui-loader-verbose h1 { font-size: 16px; margin: 0; text-align: center; }
+.ui-loader .ui-icon { background-color: #000; display: block; margin: 0; width: 44px; height: 44px; padding: 1px; -webkit-border-radius: 36px; -moz-border-radius: 36px; border-radius: 36px; }
+.ui-loader-verbose .ui-icon { margin: 0 auto 10px; opacity: .75; }
+.ui-loader-textonly { padding: 15px; margin-left: -115px; }
+.ui-loader-textonly .ui-icon { display: none; }
+.ui-loader-fakefix { position: absolute; }
+/*fouc*/
+.ui-mobile-rendering > * { visibility: hidden; }
+/*headers, content panels*/
+.ui-bar, .ui-body { position: relative; padding: .4em 15px; overflow: hidden; display: block; clear:both; }
+.ui-bar { font-size: 16px; margin: 0; }
+.ui-bar h1, .ui-bar h2, .ui-bar h3, .ui-bar h4, .ui-bar h5, .ui-bar h6 { margin: 0; padding: 0; font-size: 16px; display: inline-block; }
+.ui-header, .ui-footer { position: relative; border-left-width: 0; border-right-width: 0; }
+.ui-header .ui-btn-left,
+.ui-header .ui-btn-right,
+.ui-footer .ui-btn-left,
+.ui-footer .ui-btn-right { position: absolute; top: 3px; }
+.ui-header .ui-btn-left,
+.ui-footer .ui-btn-left { left: 5px; }
+.ui-header .ui-btn-right,
+.ui-footer .ui-btn-right { right: 5px; }
+.ui-footer .ui-btn-icon-notext,
+.ui-header .ui-btn-icon-notext { top: 6px; }
+.ui-header .ui-title, .ui-footer .ui-title { min-height: 1.1em; text-align: center; font-size: 16px; display: block; margin: .6em 30% .8em; padding: 0; text-overflow: ellipsis; overflow: hidden; white-space: nowrap; outline: 0 !important; }
+.ui-footer .ui-title { margin: .6em 15px .8em; }
+/*content area*/
+.ui-content { border-width: 0; overflow: visible; overflow-x: hidden; padding: 15px; }
+/* icons sizing */
+.ui-icon { width: 18px; height: 18px; }
+/* non-js content hiding */
+.ui-nojs { position: absolute; left: -9999px; }
+/* accessible content hiding */
+.ui-hide-label label,
+.ui-hidden-accessible { position: absolute !important; left: -9999px; clip: rect(1px 1px 1px 1px); clip: rect(1px,1px,1px,1px); }
+/* Transitions originally inspired by those from jQtouch, nice work, folks */
+.ui-mobile-viewport-transitioning,
+.ui-mobile-viewport-transitioning .ui-page {
+ width: 100%;
+ height: 100%;
+ overflow: hidden;
+}
+.in {
+ -webkit-animation-timing-function: ease-out;
+ -webkit-animation-duration: 350ms;
+ -moz-animation-timing-function: ease-out;
+ -moz-animation-duration: 350ms;
+}
+.out {
+ -webkit-animation-timing-function: ease-in;
+ -webkit-animation-duration: 225ms;
+ -moz-animation-timing-function: ease-in;
+ -moz-animation-duration: 225;
+}
+@-webkit-keyframes fadein {
+ from { opacity: 0; }
+ to { opacity: 1; }
+}
+@-moz-keyframes fadein {
+ from { opacity: 0; }
+ to { opacity: 1; }
+}
+@-webkit-keyframes fadeout {
+ from { opacity: 1; }
+ to { opacity: 0; }
+}
+@-moz-keyframes fadeout {
+ from { opacity: 1; }
+ to { opacity: 0; }
+}
+.fade.out {
+ opacity: 0;
+ -webkit-animation-duration: 125ms;
+ -webkit-animation-name: fadeout;
+ -moz-animation-duration: 125ms;
+ -moz-animation-name: fadeout;
+}
+.fade.in {
+ opacity: 1;
+ -webkit-animation-duration: 225ms;
+ -webkit-animation-name: fadein;
+ -moz-animation-duration: 225ms;
+ -moz-animation-name: fadein;
+}
+.pop {
+ -webkit-transform-origin: 50% 50%;
+ -moz-transform-origin: 50% 50%;
+}
+.pop.in {
+ -webkit-transform: scale(1);
+ -moz-transform: scale(1);
+ opacity: 1;
+ -webkit-animation-name: popin;
+ -moz-animation-name: popin;
+ -webkit-animation-duration: 350ms;
+ -moz-animation-duration: 350ms;
+}
+.pop.out {
+ -webkit-animation-name: fadeout;
+ -moz-animation-name: fadeout;
+ opacity: 0;
+ -webkit-animation-duration: 100ms;
+ -moz-animation-duration: 100ms;
+}
+.pop.in.reverse {
+ -webkit-animation-name: fadein;
+ -moz-animation-name: fadein;
+}
+.pop.out.reverse {
+ -webkit-transform: scale(.8);
+ -moz-transform: scale(.8);
+ -webkit-animation-name: popout;
+ -moz-animation-name: popout;
+}
+@-webkit-keyframes popin {
+ from {
+ -webkit-transform: scale(.8);
+ opacity: 0;
+ }
+ to {
+ -webkit-transform: scale(1);
+ opacity: 1;
+ }
+}
+@-moz-keyframes popin {
+ from {
+ -moz-transform: scale(.8);
+ opacity: 0;
+ }
+ to {
+ -moz-transform: scale(1);
+ opacity: 1;
+ }
+}
+@-webkit-keyframes popout {
+ from {
+ -webkit-transform: scale(1);
+ opacity: 1;
+ }
+ to {
+ -webkit-transform: scale(.8);
+ opacity: 0;
+ }
+}
+@-moz-keyframes popout {
+ from {
+ -moz-transform: scale(1);
+ opacity: 1;
+ }
+ to {
+ -moz-transform: scale(.8);
+ opacity: 0;
+ }
+}
+/* keyframes for slidein from sides */
+@-webkit-keyframes slideinfromright {
+ from { -webkit-transform: translateX(100%); }
+ to { -webkit-transform: translateX(0); }
+}
+@-moz-keyframes slideinfromright {
+ from { -moz-transform: translateX(100%); }
+ to { -moz-transform: translateX(0); }
+}
+@-webkit-keyframes slideinfromleft {
+ from { -webkit-transform: translateX(-100%); }
+ to { -webkit-transform: translateX(0); }
+}
+@-moz-keyframes slideinfromleft {
+ from { -moz-transform: translateX(-100%); }
+ to { -moz-transform: translateX(0); }
+}
+/* keyframes for slideout to sides */
+@-webkit-keyframes slideouttoleft {
+ from { -webkit-transform: translateX(0); }
+ to { -webkit-transform: translateX(-100%); }
+}
+@-moz-keyframes slideouttoleft {
+ from { -moz-transform: translateX(0); }
+ to { -moz-transform: translateX(-100%); }
+}
+@-webkit-keyframes slideouttoright {
+ from { -webkit-transform: translateX(0); }
+ to { -webkit-transform: translateX(100%); }
+}
+@-moz-keyframes slideouttoright {
+ from { -moz-transform: translateX(0); }
+ to { -moz-transform: translateX(100%); }
+}
+.slide.out, .slide.in {
+ -webkit-animation-timing-function: ease-out;
+ -webkit-animation-duration: 350ms;
+ -moz-animation-timing-function: ease-out;
+ -moz-animation-duration: 350ms;
+}
+.slide.out {
+ -webkit-transform: translateX(-100%);
+ -webkit-animation-name: slideouttoleft;
+ -moz-transform: translateX(-100%);
+ -moz-animation-name: slideouttoleft;
+}
+.slide.in {
+ -webkit-transform: translateX(0);
+ -webkit-animation-name: slideinfromright;
+ -moz-transform: translateX(0);
+ -moz-animation-name: slideinfromright;
+}
+.slide.out.reverse {
+ -webkit-transform: translateX(100%);
+ -webkit-animation-name: slideouttoright;
+ -moz-transform: translateX(100%);
+ -moz-animation-name: slideouttoright;
+}
+.slide.in.reverse {
+ -webkit-transform: translateX(0);
+ -webkit-animation-name: slideinfromleft;
+ -moz-transform: translateX(0);
+ -moz-animation-name: slideinfromleft;
+}
+.slidefade.out {
+ -webkit-transform: translateX(-100%);
+ -webkit-animation-name: slideouttoleft;
+ -moz-transform: translateX(-100%);
+ -moz-animation-name: slideouttoleft;
+ -webkit-animation-duration: 225ms;
+ -moz-animation-duration: 225ms;
+}
+.slidefade.in {
+ -webkit-transform: translateX(0);
+ -webkit-animation-name: fadein;
+ -moz-transform: translateX(0);
+ -moz-animation-name: fadein;
+ -webkit-animation-duration: 200ms;
+ -moz-animation-duration: 200ms;
+}
+.slidefade.out.reverse {
+ -webkit-transform: translateX(100%);
+ -webkit-animation-name: slideouttoright;
+ -moz-transform: translateX(100%);
+ -moz-animation-name: slideouttoright;
+ -webkit-animation-duration: 200ms;
+ -moz-animation-duration: 200ms;
+}
+.slidefade.in.reverse {
+ -webkit-transform: translateX(0);
+ -webkit-animation-name: fadein;
+ -moz-transform: translateX(0);
+ -moz-animation-name: fadein;
+ -webkit-animation-duration: 200ms;
+ -moz-animation-duration: 200ms;
+}
+/* slide down */
+.slidedown.out {
+ -webkit-animation-name: fadeout;
+ -moz-animation-name: fadeout;
+ -webkit-animation-duration: 100ms;
+ -moz-animation-duration: 100ms;
+}
+.slidedown.in {
+ -webkit-transform: translateY(0);
+ -webkit-animation-name: slideinfromtop;
+ -moz-transform: translateY(0);
+ -moz-animation-name: slideinfromtop;
+ -webkit-animation-duration: 250ms;
+ -moz-animation-duration: 250ms;
+}
+.slidedown.in.reverse {
+ -webkit-animation-name: fadein;
+ -moz-animation-name: fadein;
+ -webkit-animation-duration: 150ms;
+ -moz-animation-duration: 150ms;
+}
+.slidedown.out.reverse {
+ -webkit-transform: translateY(-100%);
+ -moz-transform: translateY(-100%);
+ -webkit-animation-name: slideouttotop;
+ -moz-animation-name: slideouttotop;
+ -webkit-animation-duration: 200ms;
+ -moz-animation-duration: 200ms;
+}
+@-webkit-keyframes slideinfromtop {
+ from { -webkit-transform: translateY(-100%); }
+ to { -webkit-transform: translateY(0); }
+}
+@-moz-keyframes slideinfromtop {
+ from { -moz-transform: translateY(-100%); }
+ to { -moz-transform: translateY(0); }
+}
+@-webkit-keyframes slideouttotop {
+ from { -webkit-transform: translateY(0); }
+ to { -webkit-transform: translateY(-100%); }
+}
+@-moz-keyframes slideouttotop {
+ from { -moz-transform: translateY(0); }
+ to { -moz-transform: translateY(-100%); }
+}
+/* slide up */
+.slideup.out {
+ -webkit-animation-name: fadeout;
+ -moz-animation-name: fadeout;
+ -webkit-animation-duration: 100ms;
+ -moz-animation-duration: 100ms;
+}
+.slideup.in {
+ -webkit-transform: translateY(0);
+ -webkit-animation-name: slideinfrombottom;
+ -moz-transform: translateY(0);
+ -moz-animation-name: slideinfrombottom;
+ -webkit-animation-duration: 250ms;
+ -moz-animation-duration: 250ms;
+}
+.slideup.in.reverse {
+ -webkit-animation-name: fadein;
+ -moz-animation-name: fadein;
+ -webkit-animation-duration: 150ms;
+ -moz-animation-duration: 150ms;
+}
+.slideup.out.reverse {
+ -webkit-transform: translateY(100%);
+ -moz-transform: translateY(100%);
+ -webkit-animation-name: slideouttobottom;
+ -moz-animation-name: slideouttobottom;
+ -webkit-animation-duration: 200ms;
+ -moz-animation-duration: 200ms;
+}
+@-webkit-keyframes slideinfrombottom {
+ from { -webkit-transform: translateY(100%); }
+ to { -webkit-transform: translateY(0); }
+}
+@-moz-keyframes slideinfrombottom {
+ from { -moz-transform: translateY(100%); }
+ to { -moz-transform: translateY(0); }
+}
+@-webkit-keyframes slideouttobottom {
+ from { -webkit-transform: translateY(0); }
+ to { -webkit-transform: translateY(100%); }
+}
+@-moz-keyframes slideouttobottom {
+ from { -moz-transform: translateY(0); }
+ to { -moz-transform: translateY(100%); }
+}
+/* The properties in this rule are only necessary for the 'flip' transition.
+ * We need specify the perspective to create a projection matrix. This will add
+ * some depth as the element flips. The depth number represents the distance of
+ * the viewer from the z-plane. According to the CSS3 spec, 1000 is a moderate
+ * value.
+ */
+.viewport-flip {
+ -webkit-perspective: 1000;
+ -moz-perspective: 1000;
+ position: absolute;
+}
+.flip {
+ -webkit-backface-visibility:hidden;
+ -webkit-transform:translateX(0); /* Needed to work around an iOS 3.1 bug that causes listview thumbs to disappear when -webkit-visibility:hidden is used. */
+ -moz-backface-visibility:hidden;
+ -moz-transform:translateX(0);
+}
+.flip.out {
+ -webkit-transform: rotateY(-90deg) scale(.9);
+ -webkit-animation-name: flipouttoleft;
+ -webkit-animation-duration: 175ms;
+ -moz-transform: rotateY(-90deg) scale(.9);
+ -moz-animation-name: flipouttoleft;
+ -moz-animation-duration: 175ms;
+}
+.flip.in {
+ -webkit-animation-name: flipintoright;
+ -webkit-animation-duration: 225ms;
+ -moz-animation-name: flipintoright;
+ -moz-animation-duration: 225ms;
+}
+.flip.out.reverse {
+ -webkit-transform: rotateY(90deg) scale(.9);
+ -webkit-animation-name: flipouttoright;
+ -moz-transform: rotateY(90deg) scale(.9);
+ -moz-animation-name: flipouttoright;
+}
+.flip.in.reverse {
+ -webkit-animation-name: flipintoleft;
+ -moz-animation-name: flipintoleft;
+}
+@-webkit-keyframes flipouttoleft {
+ from { -webkit-transform: rotateY(0); }
+ to { -webkit-transform: rotateY(-90deg) scale(.9); }
+}
+@-moz-keyframes flipouttoleft {
+ from { -moz-transform: rotateY(0); }
+ to { -moz-transform: rotateY(-90deg) scale(.9); }
+}
+@-webkit-keyframes flipouttoright {
+ from { -webkit-transform: rotateY(0) ; }
+ to { -webkit-transform: rotateY(90deg) scale(.9); }
+}
+@-moz-keyframes flipouttoright {
+ from { -moz-transform: rotateY(0); }
+ to { -moz-transform: rotateY(90deg) scale(.9); }
+}
+@-webkit-keyframes flipintoleft {
+ from { -webkit-transform: rotateY(-90deg) scale(.9); }
+ to { -webkit-transform: rotateY(0); }
+}
+@-moz-keyframes flipintoleft {
+ from { -moz-transform: rotateY(-90deg) scale(.9); }
+ to { -moz-transform: rotateY(0); }
+}
+@-webkit-keyframes flipintoright {
+ from { -webkit-transform: rotateY(90deg) scale(.9); }
+ to { -webkit-transform: rotateY(0); }
+}
+@-moz-keyframes flipintoright {
+ from { -moz-transform: rotateY(90deg) scale(.9); }
+ to { -moz-transform: rotateY(0); }
+}
+/* The properties in this rule are only necessary for the 'flip' transition.
+ * We need specify the perspective to create a projection matrix. This will add
+ * some depth as the element flips. The depth number represents the distance of
+ * the viewer from the z-plane. According to the CSS3 spec, 1000 is a moderate
+ * value.
+ */
+.viewport-turn {
+ -webkit-perspective: 1000;
+ -moz-perspective: 1000;
+ position: absolute;
+}
+.turn {
+ -webkit-backface-visibility:hidden;
+ -webkit-transform:translateX(0); /* Needed to work around an iOS 3.1 bug that causes listview thumbs to disappear when -webkit-visibility:hidden is used. */
+ -webkit-transform-origin: 0;
+
+ -moz-backface-visibility:hidden;
+ -moz-transform:translateX(0); /* Needed to work around an iOS 3.1 bug that causes listview thumbs to disappear when -webkit-visibility:hidden is used. */
+ -moz-transform-origin: 0;
+}
+.turn.out {
+ -webkit-transform: rotateY(-90deg) scale(.9);
+ -webkit-animation-name: flipouttoleft;
+ -moz-transform: rotateY(-90deg) scale(.9);
+ -moz-animation-name: flipouttoleft;
+ -webkit-animation-duration: 125ms;
+ -moz-animation-duration: 125ms;
+}
+.turn.in {
+ -webkit-animation-name: flipintoright;
+ -moz-animation-name: flipintoright;
+ -webkit-animation-duration: 250ms;
+ -moz-animation-duration: 250ms;
+
+}
+.turn.out.reverse {
+ -webkit-transform: rotateY(90deg) scale(.9);
+ -webkit-animation-name: flipouttoright;
+ -moz-transform: rotateY(90deg) scale(.9);
+ -moz-animation-name: flipouttoright;
+}
+.turn.in.reverse {
+ -webkit-animation-name: flipintoleft;
+ -moz-animation-name: flipintoleft;
+}
+@-webkit-keyframes flipouttoleft {
+ from { -webkit-transform: rotateY(0); }
+ to { -webkit-transform: rotateY(-90deg) scale(.9); }
+}
+@-moz-keyframes flipouttoleft {
+ from { -moz-transform: rotateY(0); }
+ to { -moz-transform: rotateY(-90deg) scale(.9); }
+}
+@-webkit-keyframes flipouttoright {
+ from { -webkit-transform: rotateY(0) ; }
+ to { -webkit-transform: rotateY(90deg) scale(.9); }
+}
+@-moz-keyframes flipouttoright {
+ from { -moz-transform: rotateY(0); }
+ to { -moz-transform: rotateY(90deg) scale(.9); }
+}
+@-webkit-keyframes flipintoleft {
+ from { -webkit-transform: rotateY(-90deg) scale(.9); }
+ to { -webkit-transform: rotateY(0); }
+}
+@-moz-keyframes flipintoleft {
+ from { -moz-transform: rotateY(-90deg) scale(.9); }
+ to { -moz-transform: rotateY(0); }
+}
+@-webkit-keyframes flipintoright {
+ from { -webkit-transform: rotateY(90deg) scale(.9); }
+ to { -webkit-transform: rotateY(0); }
+}
+@-moz-keyframes flipintoright {
+ from { -moz-transform: rotateY(90deg) scale(.9); }
+ to { -moz-transform: rotateY(0); }
+}
+/* flow transition */
+.flow {
+ -webkit-transform-origin: 50% 30%;
+ -moz-transform-origin: 50% 30%;
+ -webkit-box-shadow: 0 0 20px rgba(0,0,0,.4);
+ -moz-box-shadow: 0 0 20px rgba(0,0,0,.4);
+}
+.ui-dialog.flow {
+ -webkit-transform-origin: none;
+ -moz-transform-origin: none;
+ -webkit-box-shadow: none;
+ -moz-box-shadow: none;
+}
+.flow.out {
+ -webkit-transform: translateX(-100%) scale(.7);
+ -webkit-animation-name: flowouttoleft;
+ -webkit-animation-timing-function: ease;
+ -webkit-animation-duration: 350ms;
+ -moz-transform: translateX(-100%) scale(.7);
+ -moz-animation-name: flowouttoleft;
+ -moz-animation-timing-function: ease;
+ -moz-animation-duration: 350ms;
+}
+.flow.in {
+ -webkit-transform: translateX(0) scale(1);
+ -webkit-animation-name: flowinfromright;
+ -webkit-animation-timing-function: ease;
+ -webkit-animation-duration: 350ms;
+ -moz-transform: translateX(0) scale(1);
+ -moz-animation-name: flowinfromright;
+ -moz-animation-timing-function: ease;
+ -moz-animation-duration: 350ms;
+}
+.flow.out.reverse {
+ -webkit-transform: translateX(100%);
+ -webkit-animation-name: flowouttoright;
+ -moz-transform: translateX(100%);
+ -moz-animation-name: flowouttoright;
+}
+.flow.in.reverse {
+ -webkit-animation-name: flowinfromleft;
+ -moz-animation-name: flowinfromleft;
+}
+@-webkit-keyframes flowouttoleft {
+ 0% { -webkit-transform: translateX(0) scale(1); }
+ 60%, 70% { -webkit-transform: translateX(0) scale(.7); }
+ 100% { -webkit-transform: translateX(-100%) scale(.7); }
+}
+@-moz-keyframes flowouttoleft {
+ 0% { -moz-transform: translateX(0) scale(1); }
+ 60%, 70% { -moz-transform: translateX(0) scale(.7); }
+ 100% { -moz-transform: translateX(-100%) scale(.7); }
+}
+@-webkit-keyframes flowouttoright {
+ 0% { -webkit-transform: translateX(0) scale(1); }
+ 60%, 70% { -webkit-transform: translateX(0) scale(.7); }
+ 100% { -webkit-transform: translateX(100%) scale(.7); }
+}
+@-moz-keyframes flowouttoright {
+ 0% { -moz-transform: translateX(0) scale(1); }
+ 60%, 70% { -moz-transform: translateX(0) scale(.7); }
+ 100% { -moz-transform: translateX(100%) scale(.7); }
+}
+@-webkit-keyframes flowinfromleft {
+ 0% { -webkit-transform: translateX(-100%) scale(.7); }
+ 30%, 40% { -webkit-transform: translateX(0) scale(.7); }
+ 100% { -webkit-transform: translateX(0) scale(1); }
+}
+@-moz-keyframes flowinfromleft {
+ 0% { -moz-transform: translateX(-100%) scale(.7); }
+ 30%, 40% { -moz-transform: translateX(0) scale(.7); }
+ 100% { -moz-transform: translateX(0) scale(1); }
+}
+@-webkit-keyframes flowinfromright {
+ 0% { -webkit-transform: translateX(100%) scale(.7); }
+ 30%, 40% { -webkit-transform: translateX(0) scale(.7); }
+ 100% { -webkit-transform: translateX(0) scale(1); }
+}
+@-moz-keyframes flowinfromright {
+ 0% { -moz-transform: translateX(100%) scale(.7); }
+ 30%, 40% { -moz-transform: translateX(0) scale(.7); }
+ 100% { -moz-transform: translateX(0) scale(1); }
+}
+/* content configurations. */
+.ui-grid-a, .ui-grid-b, .ui-grid-c, .ui-grid-d { overflow: hidden; }
+.ui-block-a, .ui-block-b, .ui-block-c, .ui-block-d, .ui-block-e { margin: 0; padding: 0; border: 0; float: left; min-height:1px;}
+/* grid solo: 100 - single item fallback */
+.ui-grid-solo .ui-block-a { width: 100%; float: none; }
+/* grid a: 50/50 */
+.ui-grid-a .ui-block-a, .ui-grid-a .ui-block-b { width: 50%; }
+.ui-grid-a .ui-block-a { clear: left; }
+/* grid b: 33/33/33 */
+.ui-grid-b .ui-block-a, .ui-grid-b .ui-block-b, .ui-grid-b .ui-block-c { width: 33.333%; }
+.ui-grid-b .ui-block-a { clear: left; }
+/* grid c: 25/25/25/25 */
+.ui-grid-c .ui-block-a, .ui-grid-c .ui-block-b, .ui-grid-c .ui-block-c, .ui-grid-c .ui-block-d { width: 25%; }
+.ui-grid-c .ui-block-a { clear: left; }
+/* grid d: 20/20/20/20/20 */
+.ui-grid-d .ui-block-a, .ui-grid-d .ui-block-b, .ui-grid-d .ui-block-c, .ui-grid-d .ui-block-d, .ui-grid-d .ui-block-e { width: 20%; }
+.ui-grid-d .ui-block-a { clear: left; }
+/* fixed page header & footer configuration */
+.ui-header-fixed,
+.ui-footer-fixed {
+ left: 0;
+ right: 0;
+ width: 100%;
+ position: fixed;
+ z-index: 1000;
+}
+.ui-header-fixed {
+ top: 0;
+}
+.ui-footer-fixed {
+ bottom: 0;
+}
+.ui-header-fullscreen,
+.ui-footer-fullscreen {
+ opacity: .9;
+}
+.ui-page-header-fixed {
+ padding-top: 2.5em;
+}
+.ui-page-footer-fixed {
+ padding-bottom: 3em;
+}
+.ui-page-header-fullscreen .ui-content,
+.ui-page-footer-fullscreen .ui-content {
+ padding: 0;
+}
+.ui-fixed-hidden {
+ position: absolute;
+}
+.ui-page-header-fullscreen .ui-fixed-hidden,
+.ui-page-footer-fullscreen .ui-fixed-hidden {
+ left: -99999em;
+}
+.ui-header-fixed .ui-btn,
+.ui-footer-fixed .ui-btn {
+ z-index: 10;
+}
+.ui-navbar { overflow: hidden; }
+.ui-navbar ul, .ui-navbar-expanded ul { list-style:none; padding: 0; margin: 0; position: relative; display: block; border: 0;}
+.ui-navbar-collapsed ul { float: left; width: 75%; margin-right: -2px; }
+.ui-navbar-collapsed .ui-navbar-toggle { float: left; width: 25%; }
+.ui-navbar li.ui-navbar-truncate { position: absolute; left: -9999px; top: -9999px; }
+.ui-navbar li .ui-btn, .ui-navbar .ui-navbar-toggle .ui-btn { display: block; font-size: 12px; text-align: center; margin: 0; border-right-width: 0; max-width: 100%; }
+.ui-navbar li .ui-btn { margin-right: -1px; }
+.ui-navbar li .ui-btn:last-child { margin-right: 0; }
+.ui-header .ui-navbar li .ui-btn, .ui-header .ui-navbar .ui-navbar-toggle .ui-btn,
+.ui-footer .ui-navbar li .ui-btn, .ui-footer .ui-navbar .ui-navbar-toggle .ui-btn { border-top-width: 0; border-bottom-width: 0; }
+.ui-navbar .ui-btn-inner { padding-left: 2px; padding-right: 2px; }
+.ui-navbar-noicons li .ui-btn .ui-btn-inner, .ui-navbar-noicons .ui-navbar-toggle .ui-btn-inner { padding-top: .8em; padding-bottom: .9em; }
+/*expanded page styles*/
+.ui-navbar-expanded .ui-btn { margin: 0; font-size: 14px; }
+.ui-navbar-expanded .ui-btn-inner { padding-left: 5px; padding-right: 5px; }
+.ui-navbar-expanded .ui-btn-icon-top .ui-btn-inner { padding: 45px 5px 15px; text-align: center; }
+.ui-navbar-expanded .ui-btn-icon-top .ui-icon { top: 15px; }
+.ui-navbar-expanded .ui-btn-icon-bottom .ui-btn-inner { padding: 15px 5px 45px; text-align: center; }
+.ui-navbar-expanded .ui-btn-icon-bottom .ui-icon { bottom: 15px; }
+.ui-navbar-expanded li .ui-btn .ui-btn-inner { min-height: 2.5em; }
+.ui-navbar-expanded .ui-navbar-noicons .ui-btn .ui-btn-inner { padding-top: 1.8em; padding-bottom: 1.9em; }
+.ui-btn { display: block; text-align: center; cursor:pointer; position: relative; margin: .5em 5px; padding: 0; }
+.ui-mini { margin: .25em 5px; }
+.ui-btn-inner { padding: .6em 20px; min-width: .75em; display: block; text-overflow: ellipsis; overflow: hidden; white-space: nowrap; position: relative; zoom: 1; }
+.ui-btn input, .ui-btn button { z-index: 2; }
+.ui-btn-left, .ui-btn-right, .ui-btn-inline { display: inline-block; }
+.ui-btn-block { display: block; }
+.ui-header .ui-btn,
+.ui-footer .ui-btn { display: inline-block; margin: 0; }
+.ui-header .ui-btn-inner,
+.ui-footer .ui-btn-inner,
+.ui-mini .ui-btn-inner { font-size: 12.5px; padding: .55em 11px .5em; }
+.ui-header .ui-fullsize .ui-btn-inner,
+.ui-footer .ui-fullsize .ui-btn-inner { font-size: 16px; padding: .6em 25px; }
+.ui-btn-icon-notext { width: 24px; height: 24px; }
+.ui-btn-icon-notext .ui-btn-inner { padding: 0; height: 100%; }
+.ui-btn-icon-notext .ui-btn-inner .ui-icon { margin: 2px 1px 2px 3px; }
+.ui-btn-text { position: relative; z-index: 1; width: 100%; }
+.ui-btn-icon-notext .ui-btn-text { position: absolute; left: -9999px; }
+.ui-btn-icon-left .ui-btn-inner { padding-left: 40px; }
+.ui-btn-icon-right .ui-btn-inner { padding-right: 40px; }
+.ui-btn-icon-top .ui-btn-inner { padding-top: 40px; }
+.ui-btn-icon-bottom .ui-btn-inner { padding-bottom: 40px; }
+.ui-header .ui-btn-icon-left .ui-btn-inner,
+.ui-footer .ui-btn-icon-left .ui-btn-inner,
+.ui-mini .ui-btn-icon-left .ui-btn-inner { padding-left: 30px; }
+.ui-header .ui-btn-icon-right .ui-btn-inner,
+.ui-footer .ui-btn-icon-right .ui-btn-inner,
+.ui-mini .ui-btn-icon-right .ui-btn-inner { padding-right: 30px; }
+.ui-header .ui-btn-icon-top .ui-btn-inner,
+.ui-footer .ui-btn-icon-top .ui-btn-inner,
+.ui-mini .ui-btn-icon-top .ui-btn-inner { padding: 30px 3px .5em 3px; }
+.ui-header .ui-btn-icon-bottom .ui-btn-inner,
+.ui-footer .ui-btn-icon-bottom .ui-btn-inner,
+.ui-mini .ui-btn-icon-bottom .ui-btn-inner { padding: .55em 3px 30px 3px; }
+/*btn icon positioning*/
+.ui-btn-icon-notext .ui-icon { display: block; z-index: 0;}
+.ui-btn-icon-left .ui-btn-inner .ui-icon, .ui-btn-icon-right .ui-btn-inner .ui-icon { position: absolute; top: 50%; margin-top: -9px; }
+.ui-btn-icon-top .ui-btn-inner .ui-icon, .ui-btn-icon-bottom .ui-btn-inner .ui-icon { position: absolute; left: 50%; margin-left: -9px; }
+.ui-btn-icon-left .ui-icon { left: 10px; }
+.ui-btn-icon-right .ui-icon { right: 10px; }
+.ui-btn-icon-top .ui-icon { top: 10px; }
+.ui-btn-icon-bottom .ui-icon { top: auto; bottom: 10px; }
+.ui-header .ui-btn-icon-left .ui-icon,
+.ui-footer .ui-btn-icon-left .ui-icon,
+.ui-mini.ui-btn-icon-left .ui-icon,
+.ui-mini .ui-btn-icon-left .ui-icon { left: 5px; }
+.ui-header .ui-btn-icon-right .ui-icon,
+.ui-footer .ui-btn-icon-right .ui-icon,
+.ui-mini.ui-btn-icon-right .ui-icon,
+.ui-mini .ui-btn-icon-right .ui-icon { right: 5px; }
+.ui-header .ui-btn-icon-top .ui-icon,
+.ui-footer .ui-btn-icon-top .ui-icon,
+.ui-mini.ui-btn-icon-top .ui-icon,
+.ui-mini .ui-btn-icon-top .ui-icon { top: 5px; }
+.ui-header .ui-btn-icon-bottom .ui-icon,
+.ui-footer .ui-btn-icon-bottom .ui-icon,
+.ui-mini.ui-btn-icon-bottom .ui-icon,
+.ui-mini .ui-btn-icon-bottom .ui-icon { bottom: 5px; }
+/*hiding native button,inputs */
+.ui-btn-hidden { position: absolute; top: 0; left: 0; width: 100%; height: 100%; -webkit-appearance: button; opacity: .1; cursor: pointer; background: #fff; background: rgba(255,255,255,0); filter: Alpha(Opacity=.0001); font-size: 1px; border: none; text-indent: -9999px; }
+.ui-collapsible { margin: .5em 0; }
+.ui-collapsible-heading { font-size: 16px; display: block; margin: 0 -8px; padding: 0; border-width: 0 0 1px 0; position: relative; }
+.ui-collapsible-heading a { text-align: left; margin: 0; }
+.ui-collapsible-heading .ui-btn-inner,
+.ui-collapsible-heading .ui-btn-icon-left .ui-btn-inner { padding-left: 40px; }
+.ui-collapsible-heading .ui-btn-icon-right .ui-btn-inner { padding-left: 12px; padding-right: 40px; }
+.ui-collapsible-heading .ui-btn-icon-top .ui-btn-inner,
+.ui-collapsible-heading .ui-btn-icon-bottom .ui-btn-inner { padding-right: 40px; text-align: center; }
+.ui-collapsible-heading a span.ui-btn { position: absolute; left: 6px; top: 50%; margin: -12px 0 0 0; width: 20px; height: 20px; padding: 1px 0px 1px 2px; text-indent: -9999px; }
+.ui-collapsible-heading a span.ui-btn .ui-btn-inner { padding: 10px 0; }
+.ui-collapsible-heading a span.ui-btn .ui-icon { left: 0; margin-top: -10px; }
+.ui-collapsible-heading-status { position: absolute; top: -9999px; left:0px; }
+.ui-collapsible-content {
+ display: block;
+ margin: 0 -8px;
+ padding: 10px 16px;
+ border-top: none; /* Overrides ui-btn-up-* */
+ background-image: none; /* Overrides ui-btn-up-* */
+ font-weight: normal; /* Overrides ui-btn-up-* */
+}
+.ui-collapsible-content-collapsed { display: none; }
+.ui-collapsible-set { margin: .5em 0; }
+.ui-collapsible-set .ui-collapsible { margin: -1px 0 0; }
+.ui-controlgroup, fieldset.ui-controlgroup { padding: 0; margin: 0em 0 .5em; zoom: 1; }
+.ui-bar .ui-controlgroup { margin: 0 .3em; }
+.ui-controlgroup-label { font-size: 16px; line-height: 1.4; font-weight: normal; margin: 0 0 .4em; }
+.ui-controlgroup-controls { display: block; width: 100%;}
+.ui-controlgroup li { list-style: none; }
+.ui-controlgroup-vertical .ui-btn,
+.ui-controlgroup-vertical .ui-checkbox, .ui-controlgroup-vertical .ui-radio { margin: 0; border-bottom-width: 0; }
+.ui-controlgroup-controls label.ui-select { position: absolute; left: -9999px; }
+.ui-controlgroup-vertical .ui-controlgroup-last { border-bottom-width: 1px; }
+.ui-controlgroup-horizontal { padding: 0; }
+.ui-controlgroup-horizontal .ui-btn-inner { text-align:center; }
+.ui-controlgroup-horizontal .ui-btn, .ui-controlgroup-horizontal .ui-select { display: inline-block; margin: 0 -6px 0 0; }
+.ui-controlgroup-horizontal .ui-checkbox, .ui-controlgroup-horizontal .ui-radio { float: left; clear: none; margin: 0 -1px 0 0; }
+.ui-controlgroup-horizontal .ui-checkbox .ui-btn, .ui-controlgroup-horizontal .ui-radio .ui-btn,
+.ui-controlgroup-horizontal .ui-checkbox:last-child, .ui-controlgroup-horizontal .ui-radio:last-child { margin-right: 0; }
+.ui-controlgroup-horizontal .ui-controlgroup-last { margin-right: 0; }
+.ui-controlgroup .ui-checkbox label, .ui-controlgroup .ui-radio label { font-size: 16px; }
+/* conflicts with listview..
+.ui-controlgroup .ui-btn-icon-notext { width: 30px; height: 30px; text-indent: -9999px; }
+.ui-controlgroup .ui-btn-icon-notext .ui-btn-inner { padding: 5px 6px 5px 5px; }
+*/
+@media all and (min-width: 450px){
+ .ui-field-contain .ui-controlgroup-label { vertical-align: top; display: inline-block; width: 20%; margin: 0 2% 0 0; }
+ .ui-field-contain .ui-controlgroup-controls { width: 60%; display: inline-block; }
+ .ui-field-contain .ui-controlgroup .ui-select { width: 100%; }
+ .ui-field-contain .ui-controlgroup-horizontal .ui-select { width: auto; }
+}
+.ui-dialog {
+ background: none !important; /* this is to ensure that dialog theming does not apply (by default at least) on the page div */
+}
+.ui-dialog-contain { width: 92.5%; max-width: 500px; margin: 10% auto 15px auto; padding: 0; }
+.ui-dialog .ui-header {
+ margin-top: 15%;
+ border: none;
+ overflow: hidden;
+}
+.ui-dialog .ui-header,
+.ui-dialog .ui-content,
+.ui-dialog .ui-footer {
+ display: block;
+ position: relative;
+ width: auto;
+}
+.ui-dialog .ui-header,
+.ui-dialog .ui-footer {
+ z-index: 10;
+ padding: 0;
+}
+.ui-dialog .ui-footer {
+ padding: 0 15px;
+}
+.ui-dialog .ui-content {
+ padding: 15px;
+}
+.ui-dialog {
+ margin-top: -15px;
+}
+.ui-checkbox, .ui-radio { position: relative; clear: both; margin: .2em 0 .5em; z-index: 1; }
+.ui-checkbox .ui-btn, .ui-radio .ui-btn { margin: 0; text-align: left; z-index: 2; }
+.ui-checkbox .ui-btn-inner, .ui-radio .ui-btn-inner { white-space: normal; }
+.ui-checkbox .ui-btn-icon-left .ui-btn-inner,.ui-radio .ui-btn-icon-left .ui-btn-inner { padding-left: 45px; }
+.ui-checkbox .ui-mini.ui-btn-icon-left .ui-btn-inner,.ui-radio .ui-mini.ui-btn-icon-left .ui-btn-inner { padding-left: 36px; }
+.ui-checkbox .ui-btn-icon-right .ui-btn-inner, .ui-radio .ui-btn-icon-right .ui-btn-inner { padding-right: 45px; }
+.ui-checkbox .ui-mini.ui-btn-icon-right .ui-btn-inner, .ui-radio .ui-mini.ui-btn-icon-right .ui-btn-inner { padding-right: 36px; }
+.ui-checkbox .ui-btn-icon-top .ui-btn-inner,.ui-radio .ui-btn-icon-top .ui-btn-inner { padding-right: 0; padding-left: 0; text-align: center; }
+.ui-checkbox .ui-btn-icon-bottom .ui-btn-inner, .ui-radio .ui-btn-icon-bottom .ui-btn-inner { padding-right: 0; padding-left: 0; text-align: center; }
+.ui-checkbox .ui-icon, .ui-radio .ui-icon { top: 1.1em; }
+.ui-checkbox .ui-btn-icon-left .ui-icon, .ui-radio .ui-btn-icon-left .ui-icon { left: 15px; }
+.ui-checkbox .ui-mini.ui-btn-icon-left .ui-icon, .ui-radio .ui-mini.ui-btn-icon-left .ui-icon { left: 9px; }
+.ui-checkbox .ui-btn-icon-right .ui-icon, .ui-radio .ui-btn-icon-right .ui-icon { right: 15px; }
+.ui-checkbox .ui-mini.ui-btn-icon-right .ui-icon, .ui-radio .ui-mini.ui-btn-icon-right .ui-icon { right: 9px; }
+.ui-checkbox .ui-btn-icon-top .ui-icon, .ui-radio .ui-btn-icon-top .ui-icon { top: 10px; }
+.ui-checkbox .ui-btn-icon-bottom .ui-icon, .ui-radio .ui-btn-icon-bottom .ui-icon { top: auto; bottom: 10px; }
+.ui-checkbox .ui-btn-icon-right .ui-icon, .ui-radio .ui-btn-icon-right .ui-icon { right: 15px; }
+.ui-checkbox .ui-mini.ui-btn-icon-right .ui-icon, .ui-radio .ui-mini.ui-btn-icon-right .ui-icon { right: 9px; }
+/* input, label positioning */
+.ui-checkbox input,.ui-radio input { position:absolute; left:20px; top:50%; width: 10px; height: 10px; margin:-5px 0 0 0; outline: 0 !important; z-index: 1; }
+.ui-field-contain, fieldset.ui-field-contain { padding: .8em 0; margin: 0; border-width: 0 0 1px 0; overflow: visible; }
+.ui-field-contain:first-child { border-top-width: 0; }
+.ui-header .ui-field-contain-left,
+.ui-header .ui-field-contain-right {
+ position: absolute;
+ top: 0;
+ width: 25%;
+}
+.ui-header .ui-field-contain-left {
+ left: 1em;
+}
+.ui-header .ui-field-contain-right {
+ right: 1em;
+}
+@media all and (min-width: 450px){
+ .ui-field-contain, .ui-mobile fieldset.ui-field-contain { border-width: 0; padding: 0; margin: 1em 0; }
+}
+.ui-select { display: block; position: relative; }
+.ui-select select { position: absolute; left: -9999px; top: -9999px; }
+.ui-select .ui-btn { overflow: hidden; opacity: 1; margin: 0; }
+/* Fixes #2588 — When Windows Phone 7.5 (Mango) tries to calculate a numeric opacity for a select—including “inherit”—without explicitly specifying an opacity on the parent to give it context, a bug appears where clicking elsewhere on the page after opening the select will open the select again. */
+.ui-select .ui-btn select { cursor: pointer; -webkit-appearance: button; left: 0; top:0; width: 100%; min-height: 1.5em; min-height: 100%; height: 3em; max-height: 100%; opacity: 0; -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; filter: alpha(opacity=0); z-index: 2; }
+.ui-select .ui-disabled { opacity: .3; }
+@-moz-document url-prefix() {.ui-select .ui-btn select { opacity: 0.0001; }}
+.ui-select .ui-btn select.ui-select-nativeonly { opacity: 1; text-indent: 0; }
+.ui-select .ui-btn-icon-right .ui-btn-inner { padding-right: 45px; }
+.ui-select .ui-btn-icon-right .ui-icon { right: 15px; }
+.ui-select .ui-mini.ui-btn-icon-right .ui-icon { right: 7px; }
+/* labels */
+label.ui-select { font-size: 16px; line-height: 1.4; font-weight: normal; margin: 0 0 .3em; display: block; }
+/*listbox*/
+.ui-select .ui-btn-text, .ui-selectmenu .ui-btn-text { display: block; min-height: 1em; overflow: hidden !important;
+/* This !important is required for iPad Safari specifically. See https://github.com/jquery/jquery-mobile/issues/2647 */ }
+.ui-select .ui-btn-text { text-overflow: ellipsis; }
+.ui-selectmenu { position: absolute; padding: 0; z-index: 1100 !important; width: 80%; max-width: 350px; padding: 6px; }
+.ui-selectmenu .ui-listview { margin: 0; }
+.ui-selectmenu .ui-btn.ui-li-divider { cursor: default; }
+.ui-selectmenu-hidden { top: -9999px; left: -9999px; }
+.ui-selectmenu-screen { position: absolute; top: 0; left: 0; width: 100%; height: 100%; z-index: 99; }
+.ui-screen-hidden, .ui-selectmenu-list .ui-li .ui-icon { display: none; }
+.ui-selectmenu-list .ui-li .ui-icon { display: block; }
+.ui-li.ui-selectmenu-placeholder { display: none; }
+.ui-selectmenu .ui-header .ui-title { margin: 0.6em 46px 0.8em; }
+@media all and (min-width: 450px){
+ .ui-field-contain label.ui-select { vertical-align: top; display: inline-block; width: 20%; margin: 0 2% 0 0; }
+ .ui-field-contain .ui-select { width: 60%; display: inline-block; }
+}
+/* when no placeholder is defined in a multiple select, the header height doesn't even extend past the close button. this shim's content in there */
+.ui-selectmenu .ui-header h1:after { content: '.'; visibility: hidden; }
+label.ui-input-text { font-size: 16px; line-height: 1.4; display: block; font-weight: normal; margin: 0 0 .3em; }
+input.ui-input-text, textarea.ui-input-text { background-image: none; padding: .4em; line-height: 1.4; font-size: 16px; display: block; width: 97%; outline: 0; }
+.ui-header input.ui-input-text,
+.ui-footer input.ui-input-text { margin-left: 1.25%; padding: .4em 1%; width: 95.5% } /* Note that padding left/right on text inputs is factored into how the element is displayed in Firefox, but does not actually pad the text inside it. */
+ input.ui-input-text { -webkit-appearance: none; }
+textarea.ui-input-text { height: 50px; -webkit-transition: height 200ms linear; -moz-transition: height 200ms linear; -o-transition: height 200ms linear; transition: height 200ms linear; }
+.ui-input-search { padding: 0 30px; background-image: none; position: relative; }
+.ui-icon-searchfield:after { position: absolute; left: 7px; top: 50%; margin-top: -9px; content: ""; width: 18px; height: 18px; opacity: .5; }
+.ui-input-search input.ui-input-text { border: none; width: 98%; padding: .4em 0; margin: 0; display: block; background: transparent none; outline: 0 !important; }
+.ui-input-search .ui-input-clear { position: absolute; right: 0; top: 50%; margin-top: -13px; }
+.ui-mini .ui-input-clear { right: -3px; }
+.ui-input-search .ui-input-clear-hidden { display: none; }
+input.ui-mini, .ui-mini input, textarea.ui-mini { font-size: 14px; }
+textarea.ui-mini { height: 45px; }
+/* orientation adjustments - incomplete!*/
+@media all and (min-width: 450px){
+ .ui-field-contain label.ui-input-text { vertical-align: top; display: inline-block; width: 20%; margin: 0 2% 0 0 }
+ .ui-field-contain input.ui-input-text,
+ .ui-field-contain textarea.ui-input-text,
+ .ui-field-contain .ui-input-search { width: 60%; display: inline-block; }
+ .ui-field-contain .ui-input-search { width: 50%; }
+ .ui-hide-label input.ui-input-text,
+ .ui-hide-label textarea.ui-input-text,
+ .ui-hide-label .ui-input-search { padding: .4em; width: 97%; }
+ .ui-input-search input.ui-input-text { width: 98%; /*echos rule from above*/ }
+}
+.ui-listview { margin: 0; counter-reset: listnumbering; }
+.ui-content .ui-listview { margin: -15px; }
+.ui-content .ui-listview-inset { margin: 1em 0; }
+.ui-listview, .ui-li { list-style:none; padding:0; }
+.ui-li, .ui-li.ui-field-contain { display: block; margin:0; position: relative; overflow: visible; text-align: left; border-width: 0; border-top-width: 1px; }
+.ui-li .ui-btn-text a.ui-link-inherit { text-overflow: ellipsis; overflow: hidden; white-space: nowrap; }
+.ui-li-divider, .ui-li-static { padding: .5em 15px; font-size: 14px; font-weight: bold; }
+.ui-li-divider { counter-reset: listnumbering; }
+ol.ui-listview .ui-link-inherit:before, ol.ui-listview .ui-li-static:before, .ui-li-dec { font-size: .8em; display: inline-block; padding-right: .3em; font-weight: normal;counter-increment: listnumbering; content: counter(listnumbering) ". "; }
+ol.ui-listview .ui-li-jsnumbering:before { content: "" !important; } /* to avoid chance of duplication */
+.ui-listview-inset .ui-li { border-right-width: 1px; border-left-width: 1px; }
+.ui-li:last-child, .ui-li.ui-field-contain:last-child { border-bottom-width: 1px; }
+.ui-li>.ui-btn-inner { display: block; position: relative; padding: 0; }
+.ui-li .ui-btn-inner a.ui-link-inherit, .ui-li-static.ui-li { padding: .7em 15px .7em 15px; display: block; }
+.ui-li-has-thumb .ui-btn-inner a.ui-link-inherit, .ui-li-static.ui-li-has-thumb { min-height: 60px; padding-left: 100px; }
+.ui-li-has-icon .ui-btn-inner a.ui-link-inherit, .ui-li-static.ui-li-has-icon { min-height: 20px; padding-left: 40px; }
+.ui-li-has-count .ui-btn-inner a.ui-link-inherit, .ui-li-static.ui-li-has-count { padding-right: 45px; }
+.ui-li-has-arrow .ui-btn-inner a.ui-link-inherit, .ui-li-static.ui-li-has-arrow { padding-right: 30px; }
+.ui-li-has-arrow.ui-li-has-count .ui-btn-inner a.ui-link-inherit, .ui-li-static.ui-li-has-arrow.ui-li-has-count { padding-right: 75px; }
+.ui-li-has-count .ui-btn-text { padding-right: 15px; }
+.ui-li-heading { font-size: 16px; font-weight: bold; display: block; margin: .6em 0; text-overflow: ellipsis; overflow: hidden; white-space: nowrap; }
+.ui-li-desc { font-size: 12px; font-weight: normal; display: block; margin: -.5em 0 .6em; text-overflow: ellipsis; overflow: hidden; white-space: nowrap; }
+.ui-li-thumb, .ui-listview .ui-li-icon { position: absolute; left: 1px; top: 0; max-height: 80px; max-width: 80px; }
+.ui-listview .ui-li-icon { max-height: 40px; max-width: 40px; left: 10px; top: .9em; }
+.ui-li-thumb, .ui-listview .ui-li-icon, .ui-li-content { float: left; margin-right: 10px; }
+.ui-li-aside { float: right; width: 50%; text-align: right; margin: .3em 0; }
+@media all and (min-width: 480px){
+ .ui-li-aside { width: 45%; }
+}
+.ui-li-divider { cursor: default; }
+.ui-li-has-alt .ui-btn-inner a.ui-link-inherit, .ui-li-static.ui-li-has-alt { padding-right: 95px; }
+.ui-li-has-count .ui-li-count { position: absolute; font-size: 11px; font-weight: bold; padding: .2em .5em; top: 50%; margin-top: -.9em; right: 48px; }
+.ui-li-divider .ui-li-count, .ui-li-static .ui-li-count { right: 10px; }
+.ui-li-has-alt .ui-li-count { right: 55px; }
+.ui-li-link-alt { position: absolute; width: 40px; height: 100%; border-width: 0; border-left-width: 1px; top: 0; right: 0; margin: 0; padding: 0; z-index: 2; }
+.ui-li-link-alt .ui-btn { overflow: hidden; position: absolute; right: 8px; top: 50%; margin: -11px 0 0 0; border-bottom-width: 1px; z-index: -1;}
+.ui-li-link-alt .ui-btn-inner { padding: 0; height: 100%; position: absolute; width: 100%; top: 0; left: 0;}
+.ui-li-link-alt .ui-btn .ui-icon { right: 50%; margin-right: -9px; }
+.ui-listview * .ui-btn-inner > .ui-btn > .ui-btn-inner { border-top: 0px; }
+.ui-listview-filter { border-width: 0; overflow: hidden; margin: -15px -15px 15px -15px }
+.ui-listview-filter .ui-input-search { margin: 5px; width: auto; display: block; }
+.ui-listview-filter-inset { margin: -15px -5px -15px -5px; background: transparent; }
+.ui-li.ui-screen-hidden{display:none;}
+/* Odd iPad positioning issue. */
+@media only screen and (min-device-width: 768px) and (max-device-width: 1024px) {
+ .ui-li .ui-btn-text { overflow: visible; }
+}
+label.ui-slider { font-size: 16px; line-height: 1.4; font-weight: normal; margin: 0 0 .3em; display: block; }
+input.ui-slider-input,
+.ui-field-contain input.ui-slider-input { display: inline-block; width: 50px; }
+select.ui-slider-switch { display: none; }
+div.ui-slider { position: relative; display: inline-block; overflow: visible; height: 15px; padding: 0; margin: 0 2% 0 20px; top: 4px; width: 65%; }
+div.ui-slider-mini { height: 12px; margin-left: 10px; }
+div.ui-slider-bg { border: none; height: 100%; padding-right: 8px; }
+.ui-controlgroup a.ui-slider-handle, a.ui-slider-handle { position: absolute; z-index: 1; top: 50%; width: 28px; height: 28px; margin-top: -15px; margin-left: -15px; outline: 0; }
+a.ui-slider-handle .ui-btn-inner { padding: 0; height: 100%; }
+div.ui-slider-mini a.ui-slider-handle { height: 14px; width: 14px; margin: -8px 0 0 -7px; }
+div.ui-slider-mini a.ui-slider-handle .ui-btn-inner { height: 30px; width: 30px; padding: 0; margin: -9px 0 0 -9px; }
+@media all and (min-width: 450px){
+ .ui-field-contain label.ui-slider { vertical-align: top; display: inline-block; width: 20%; margin: 0 2% 0 0; }
+ .ui-field-contain div.ui-slider { width: 43%; }
+ .ui-field-contain div.ui-slider-switch { width: 5.5em; }
+}
+div.ui-slider-switch { height: 32px; margin-left: 0; width: 5.8em; }
+a.ui-slider-handle-snapping { -webkit-transition: left 70ms linear; -moz-transition: left 70ms linear; }
+div.ui-slider-switch .ui-slider-handle { margin-top: 1px; }
+.ui-slider-inneroffset { margin: 0 16px; position: relative; z-index: 1; }
+div.ui-slider-switch.ui-slider-mini { width: 5em; height: 29px; }
+div.ui-slider-switch.ui-slider-mini .ui-slider-inneroffset { margin: 0 15px 0 14px; }
+div.ui-slider-switch.ui-slider-mini .ui-slider-handle { width: 25px; height: 25px; margin: 1px 0 0 -13px; }
+div.ui-slider-switch.ui-slider-mini a.ui-slider-handle .ui-btn-inner { height: 30px; width: 30px; padding: 0; margin: 0; }
+span.ui-slider-label { position: absolute; text-align: center; width: 100%; overflow: hidden; font-size: 16px; top: 0; line-height: 2; min-height: 100%; border-width: 0; white-space: nowrap; }
+.ui-slider-mini span.ui-slider-label { font-size: 14px; }
+span.ui-slider-label-a { z-index: 1; left: 0; text-indent: -1.5em; }
+span.ui-slider-label-b { z-index: 0; right: 0; text-indent: 1.5em;}
+.ui-slider-inline { width: 120px; display: inline-block; }
diff --git a/h-source/Js/jquery/jquery.mobile-1.1.0.js b/h-source/Js/jquery/jquery.mobile-1.1.0.js
new file mode 100644
index 0000000..c12426c
--- /dev/null
+++ b/h-source/Js/jquery/jquery.mobile-1.1.0.js
@@ -0,0 +1,7551 @@
+/*
+* jQuery Mobile Framework 1.1.0 db342b1f315c282692791aa870455901fdb46a55
+* http://jquerymobile.com
+*
+* Copyright 2011 (c) jQuery Project
+* Dual licensed under the MIT or GPL Version 2 licenses.
+* http://jquery.org/license
+*
+*/
+(function ( root, doc, factory ) {
+ if ( typeof define === "function" && define.amd ) {
+ // AMD. Register as an anonymous module.
+ define( [ "jquery" ], function ( $ ) {
+ factory( $, root, doc );
+ return $.mobile;
+ });
+ } else {
+ // Browser globals
+ factory( root.jQuery, root, doc );
+ }
+}( this, document, function ( $, window, document, undefined ) {
+
+
+// This plugin is an experiment for abstracting away the touch and mouse
+// events so that developers don't have to worry about which method of input
+// the device their document is loaded on supports.
+//
+// The idea here is to allow the developer to register listeners for the
+// basic mouse events, such as mousedown, mousemove, mouseup, and click,
+// and the plugin will take care of registering the correct listeners
+// behind the scenes to invoke the listener at the fastest possible time
+// for that device, while still retaining the order of event firing in
+// the traditional mouse environment, should multiple handlers be registered
+// on the same element for different events.
+//
+// The current version exposes the following virtual events to jQuery bind methods:
+// "vmouseover vmousedown vmousemove vmouseup vclick vmouseout vmousecancel"
+
+(function( $, window, document, undefined ) {
+
+var dataPropertyName = "virtualMouseBindings",
+ touchTargetPropertyName = "virtualTouchID",
+ virtualEventNames = "vmouseover vmousedown vmousemove vmouseup vclick vmouseout vmousecancel".split( " " ),
+ touchEventProps = "clientX clientY pageX pageY screenX screenY".split( " " ),
+ mouseHookProps = $.event.mouseHooks ? $.event.mouseHooks.props : [],
+ mouseEventProps = $.event.props.concat( mouseHookProps ),
+ activeDocHandlers = {},
+ resetTimerID = 0,
+ startX = 0,
+ startY = 0,
+ didScroll = false,
+ clickBlockList = [],
+ blockMouseTriggers = false,
+ blockTouchTriggers = false,
+ eventCaptureSupported = "addEventListener" in document,
+ $document = $( document ),
+ nextTouchID = 1,
+ lastTouchID = 0;
+
+$.vmouse = {
+ moveDistanceThreshold: 10,
+ clickDistanceThreshold: 10,
+ resetTimerDuration: 1500
+};
+
+function getNativeEvent( event ) {
+
+ while ( event && typeof event.originalEvent !== "undefined" ) {
+ event = event.originalEvent;
+ }
+ return event;
+}
+
+function createVirtualEvent( event, eventType ) {
+
+ var t = event.type,
+ oe, props, ne, prop, ct, touch, i, j;
+
+ event = $.Event(event);
+ event.type = eventType;
+
+ oe = event.originalEvent;
+ props = $.event.props;
+
+ // addresses separation of $.event.props in to $.event.mouseHook.props and Issue 3280
+ // https://github.com/jquery/jquery-mobile/issues/3280
+ if ( t.search( /^(mouse|click)/ ) > -1 ) {
+ props = mouseEventProps;
+ }
+
+ // copy original event properties over to the new event
+ // this would happen if we could call $.event.fix instead of $.Event
+ // but we don't have a way to force an event to be fixed multiple times
+ if ( oe ) {
+ for ( i = props.length, prop; i; ) {
+ prop = props[ --i ];
+ event[ prop ] = oe[ prop ];
+ }
+ }
+
+ // make sure that if the mouse and click virtual events are generated
+ // without a .which one is defined
+ if ( t.search(/mouse(down|up)|click/) > -1 && !event.which ){
+ event.which = 1;
+ }
+
+ if ( t.search(/^touch/) !== -1 ) {
+ ne = getNativeEvent( oe );
+ t = ne.touches;
+ ct = ne.changedTouches;
+ touch = ( t && t.length ) ? t[0] : ( (ct && ct.length) ? ct[ 0 ] : undefined );
+
+ if ( touch ) {
+ for ( j = 0, len = touchEventProps.length; j < len; j++){
+ prop = touchEventProps[ j ];
+ event[ prop ] = touch[ prop ];
+ }
+ }
+ }
+
+ return event;
+}
+
+function getVirtualBindingFlags( element ) {
+
+ var flags = {},
+ b, k;
+
+ while ( element ) {
+
+ b = $.data( element, dataPropertyName );
+
+ for ( k in b ) {
+ if ( b[ k ] ) {
+ flags[ k ] = flags.hasVirtualBinding = true;
+ }
+ }
+ element = element.parentNode;
+ }
+ return flags;
+}
+
+function getClosestElementWithVirtualBinding( element, eventType ) {
+ var b;
+ while ( element ) {
+
+ b = $.data( element, dataPropertyName );
+
+ if ( b && ( !eventType || b[ eventType ] ) ) {
+ return element;
+ }
+ element = element.parentNode;
+ }
+ return null;
+}
+
+function enableTouchBindings() {
+ blockTouchTriggers = false;
+}
+
+function disableTouchBindings() {
+ blockTouchTriggers = true;
+}
+
+function enableMouseBindings() {
+ lastTouchID = 0;
+ clickBlockList.length = 0;
+ blockMouseTriggers = false;
+
+ // When mouse bindings are enabled, our
+ // touch bindings are disabled.
+ disableTouchBindings();
+}
+
+function disableMouseBindings() {
+ // When mouse bindings are disabled, our
+ // touch bindings are enabled.
+ enableTouchBindings();
+}
+
+function startResetTimer() {
+ clearResetTimer();
+ resetTimerID = setTimeout(function(){
+ resetTimerID = 0;
+ enableMouseBindings();
+ }, $.vmouse.resetTimerDuration );
+}
+
+function clearResetTimer() {
+ if ( resetTimerID ){
+ clearTimeout( resetTimerID );
+ resetTimerID = 0;
+ }
+}
+
+function triggerVirtualEvent( eventType, event, flags ) {
+ var ve;
+
+ if ( ( flags && flags[ eventType ] ) ||
+ ( !flags && getClosestElementWithVirtualBinding( event.target, eventType ) ) ) {
+
+ ve = createVirtualEvent( event, eventType );
+
+ $( event.target).trigger( ve );
+ }
+
+ return ve;
+}
+
+function mouseEventCallback( event ) {
+ var touchID = $.data(event.target, touchTargetPropertyName);
+
+ if ( !blockMouseTriggers && ( !lastTouchID || lastTouchID !== touchID ) ){
+ var ve = triggerVirtualEvent( "v" + event.type, event );
+ if ( ve ) {
+ if ( ve.isDefaultPrevented() ) {
+ event.preventDefault();
+ }
+ if ( ve.isPropagationStopped() ) {
+ event.stopPropagation();
+ }
+ if ( ve.isImmediatePropagationStopped() ) {
+ event.stopImmediatePropagation();
+ }
+ }
+ }
+}
+
+function handleTouchStart( event ) {
+
+ var touches = getNativeEvent( event ).touches,
+ target, flags;
+
+ if ( touches && touches.length === 1 ) {
+
+ target = event.target;
+ flags = getVirtualBindingFlags( target );
+
+ if ( flags.hasVirtualBinding ) {
+
+ lastTouchID = nextTouchID++;
+ $.data( target, touchTargetPropertyName, lastTouchID );
+
+ clearResetTimer();
+
+ disableMouseBindings();
+ didScroll = false;
+
+ var t = getNativeEvent( event ).touches[ 0 ];
+ startX = t.pageX;
+ startY = t.pageY;
+
+ triggerVirtualEvent( "vmouseover", event, flags );
+ triggerVirtualEvent( "vmousedown", event, flags );
+ }
+ }
+}
+
+function handleScroll( event ) {
+ if ( blockTouchTriggers ) {
+ return;
+ }
+
+ if ( !didScroll ) {
+ triggerVirtualEvent( "vmousecancel", event, getVirtualBindingFlags( event.target ) );
+ }
+
+ didScroll = true;
+ startResetTimer();
+}
+
+function handleTouchMove( event ) {
+ if ( blockTouchTriggers ) {
+ return;
+ }
+
+ var t = getNativeEvent( event ).touches[ 0 ],
+ didCancel = didScroll,
+ moveThreshold = $.vmouse.moveDistanceThreshold;
+ didScroll = didScroll ||
+ ( Math.abs(t.pageX - startX) > moveThreshold ||
+ Math.abs(t.pageY - startY) > moveThreshold ),
+ flags = getVirtualBindingFlags( event.target );
+
+ if ( didScroll && !didCancel ) {
+ triggerVirtualEvent( "vmousecancel", event, flags );
+ }
+
+ triggerVirtualEvent( "vmousemove", event, flags );
+ startResetTimer();
+}
+
+function handleTouchEnd( event ) {
+ if ( blockTouchTriggers ) {
+ return;
+ }
+
+ disableTouchBindings();
+
+ var flags = getVirtualBindingFlags( event.target ),
+ t;
+ triggerVirtualEvent( "vmouseup", event, flags );
+
+ if ( !didScroll ) {
+ var ve = triggerVirtualEvent( "vclick", event, flags );
+ if ( ve && ve.isDefaultPrevented() ) {
+ // The target of the mouse events that follow the touchend
+ // event don't necessarily match the target used during the
+ // touch. This means we need to rely on coordinates for blocking
+ // any click that is generated.
+ t = getNativeEvent( event ).changedTouches[ 0 ];
+ clickBlockList.push({
+ touchID: lastTouchID,
+ x: t.clientX,
+ y: t.clientY
+ });
+
+ // Prevent any mouse events that follow from triggering
+ // virtual event notifications.
+ blockMouseTriggers = true;
+ }
+ }
+ triggerVirtualEvent( "vmouseout", event, flags);
+ didScroll = false;
+
+ startResetTimer();
+}
+
+function hasVirtualBindings( ele ) {
+ var bindings = $.data( ele, dataPropertyName ),
+ k;
+
+ if ( bindings ) {
+ for ( k in bindings ) {
+ if ( bindings[ k ] ) {
+ return true;
+ }
+ }
+ }
+ return false;
+}
+
+function dummyMouseHandler(){}
+
+function getSpecialEventObject( eventType ) {
+ var realType = eventType.substr( 1 );
+
+ return {
+ setup: function( data, namespace ) {
+ // If this is the first virtual mouse binding for this element,
+ // add a bindings object to its data.
+
+ if ( !hasVirtualBindings( this ) ) {
+ $.data( this, dataPropertyName, {});
+ }
+
+ // If setup is called, we know it is the first binding for this
+ // eventType, so initialize the count for the eventType to zero.
+ var bindings = $.data( this, dataPropertyName );
+ bindings[ eventType ] = true;
+
+ // If this is the first virtual mouse event for this type,
+ // register a global handler on the document.
+
+ activeDocHandlers[ eventType ] = ( activeDocHandlers[ eventType ] || 0 ) + 1;
+
+ if ( activeDocHandlers[ eventType ] === 1 ) {
+ $document.bind( realType, mouseEventCallback );
+ }
+
+ // Some browsers, like Opera Mini, won't dispatch mouse/click events
+ // for elements unless they actually have handlers registered on them.
+ // To get around this, we register dummy handlers on the elements.
+
+ $( this ).bind( realType, dummyMouseHandler );
+
+ // For now, if event capture is not supported, we rely on mouse handlers.
+ if ( eventCaptureSupported ) {
+ // If this is the first virtual mouse binding for the document,
+ // register our touchstart handler on the document.
+
+ activeDocHandlers[ "touchstart" ] = ( activeDocHandlers[ "touchstart" ] || 0) + 1;
+
+ if (activeDocHandlers[ "touchstart" ] === 1) {
+ $document.bind( "touchstart", handleTouchStart )
+ .bind( "touchend", handleTouchEnd )
+
+ // On touch platforms, touching the screen and then dragging your finger
+ // causes the window content to scroll after some distance threshold is
+ // exceeded. On these platforms, a scroll prevents a click event from being
+ // dispatched, and on some platforms, even the touchend is suppressed. To
+ // mimic the suppression of the click event, we need to watch for a scroll
+ // event. Unfortunately, some platforms like iOS don't dispatch scroll
+ // events until *AFTER* the user lifts their finger (touchend). This means
+ // we need to watch both scroll and touchmove events to figure out whether
+ // or not a scroll happenens before the touchend event is fired.
+
+ .bind( "touchmove", handleTouchMove )
+ .bind( "scroll", handleScroll );
+ }
+ }
+ },
+
+ teardown: function( data, namespace ) {
+ // If this is the last virtual binding for this eventType,
+ // remove its global handler from the document.
+
+ --activeDocHandlers[ eventType ];
+
+ if ( !activeDocHandlers[ eventType ] ) {
+ $document.unbind( realType, mouseEventCallback );
+ }
+
+ if ( eventCaptureSupported ) {
+ // If this is the last virtual mouse binding in existence,
+ // remove our document touchstart listener.
+
+ --activeDocHandlers[ "touchstart" ];
+
+ if ( !activeDocHandlers[ "touchstart" ] ) {
+ $document.unbind( "touchstart", handleTouchStart )
+ .unbind( "touchmove", handleTouchMove )
+ .unbind( "touchend", handleTouchEnd )
+ .unbind( "scroll", handleScroll );
+ }
+ }
+
+ var $this = $( this ),
+ bindings = $.data( this, dataPropertyName );
+
+ // teardown may be called when an element was
+ // removed from the DOM. If this is the case,
+ // jQuery core may have already stripped the element
+ // of any data bindings so we need to check it before
+ // using it.
+ if ( bindings ) {
+ bindings[ eventType ] = false;
+ }
+
+ // Unregister the dummy event handler.
+
+ $this.unbind( realType, dummyMouseHandler );
+
+ // If this is the last virtual mouse binding on the
+ // element, remove the binding data from the element.
+
+ if ( !hasVirtualBindings( this ) ) {
+ $this.removeData( dataPropertyName );
+ }
+ }
+ };
+}
+
+// Expose our custom events to the jQuery bind/unbind mechanism.
+
+for ( var i = 0; i < virtualEventNames.length; i++ ){
+ $.event.special[ virtualEventNames[ i ] ] = getSpecialEventObject( virtualEventNames[ i ] );
+}
+
+// Add a capture click handler to block clicks.
+// Note that we require event capture support for this so if the device
+// doesn't support it, we punt for now and rely solely on mouse events.
+if ( eventCaptureSupported ) {
+ document.addEventListener( "click", function( e ){
+ var cnt = clickBlockList.length,
+ target = e.target,
+ x, y, ele, i, o, touchID;
+
+ if ( cnt ) {
+ x = e.clientX;
+ y = e.clientY;
+ threshold = $.vmouse.clickDistanceThreshold;
+
+ // The idea here is to run through the clickBlockList to see if
+ // the current click event is in the proximity of one of our
+ // vclick events that had preventDefault() called on it. If we find
+ // one, then we block the click.
+ //
+ // Why do we have to rely on proximity?
+ //
+ // Because the target of the touch event that triggered the vclick
+ // can be different from the target of the click event synthesized
+ // by the browser. The target of a mouse/click event that is syntehsized
+ // from a touch event seems to be implementation specific. For example,
+ // some browsers will fire mouse/click events for a link that is near
+ // a touch event, even though the target of the touchstart/touchend event
+ // says the user touched outside the link. Also, it seems that with most
+ // browsers, the target of the mouse/click event is not calculated until the
+ // time it is dispatched, so if you replace an element that you touched
+ // with another element, the target of the mouse/click will be the new
+ // element underneath that point.
+ //
+ // Aside from proximity, we also check to see if the target and any
+ // of its ancestors were the ones that blocked a click. This is necessary
+ // because of the strange mouse/click target calculation done in the
+ // Android 2.1 browser, where if you click on an element, and there is a
+ // mouse/click handler on one of its ancestors, the target will be the
+ // innermost child of the touched element, even if that child is no where
+ // near the point of touch.
+
+ ele = target;
+
+ while ( ele ) {
+ for ( i = 0; i < cnt; i++ ) {
+ o = clickBlockList[ i ];
+ touchID = 0;
+
+ if ( ( ele === target && Math.abs( o.x - x ) < threshold && Math.abs( o.y - y ) < threshold ) ||
+ $.data( ele, touchTargetPropertyName ) === o.touchID ) {
+ // XXX: We may want to consider removing matches from the block list
+ // instead of waiting for the reset timer to fire.
+ e.preventDefault();
+ e.stopPropagation();
+ return;
+ }
+ }
+ ele = ele.parentNode;
+ }
+ }
+ }, true);
+}
+})( jQuery, window, document );
+
+
+
+// Script: jQuery hashchange event
+//
+// *Version: 1.3, Last updated: 7/21/2010*
+//
+// Project Home - http://benalman.com/projects/jquery-hashchange-plugin/
+// GitHub - http://github.com/cowboy/jquery-hashchange/
+// Source - http://github.com/cowboy/jquery-hashchange/raw/master/jquery.ba-hashchange.js
+// (Minified) - http://github.com/cowboy/jquery-hashchange/raw/master/jquery.ba-hashchange.min.js (0.8kb gzipped)
+//
+// About: License
+//
+// Copyright (c) 2010 "Cowboy" Ben Alman,
+// Dual licensed under the MIT and GPL licenses.
+// http://benalman.com/about/license/
+//
+// About: Examples
+//
+// These working examples, complete with fully commented code, illustrate a few
+// ways in which this plugin can be used.
+//
+// hashchange event - http://benalman.com/code/projects/jquery-hashchange/examples/hashchange/
+// document.domain - http://benalman.com/code/projects/jquery-hashchange/examples/document_domain/
+//
+// About: Support and Testing
+//
+// Information about what version or versions of jQuery this plugin has been
+// tested with, what browsers it has been tested in, and where the unit tests
+// reside (so you can test it yourself).
+//
+// jQuery Versions - 1.2.6, 1.3.2, 1.4.1, 1.4.2
+// Browsers Tested - Internet Explorer 6-8, Firefox 2-4, Chrome 5-6, Safari 3.2-5,
+// Opera 9.6-10.60, iPhone 3.1, Android 1.6-2.2, BlackBerry 4.6-5.
+// Unit Tests - http://benalman.com/code/projects/jquery-hashchange/unit/
+//
+// About: Known issues
+//
+// While this jQuery hashchange event implementation is quite stable and
+// robust, there are a few unfortunate browser bugs surrounding expected
+// hashchange event-based behaviors, independent of any JavaScript
+// window.onhashchange abstraction. See the following examples for more
+// information:
+//
+// Chrome: Back Button - http://benalman.com/code/projects/jquery-hashchange/examples/bug-chrome-back-button/
+// Firefox: Remote XMLHttpRequest - http://benalman.com/code/projects/jquery-hashchange/examples/bug-firefox-remote-xhr/
+// WebKit: Back Button in an Iframe - http://benalman.com/code/projects/jquery-hashchange/examples/bug-webkit-hash-iframe/
+// Safari: Back Button from a different domain - http://benalman.com/code/projects/jquery-hashchange/examples/bug-safari-back-from-diff-domain/
+//
+// Also note that should a browser natively support the window.onhashchange
+// event, but not report that it does, the fallback polling loop will be used.
+//
+// About: Release History
+//
+// 1.3 - (7/21/2010) Reorganized IE6/7 Iframe code to make it more
+// "removable" for mobile-only development. Added IE6/7 document.title
+// support. Attempted to make Iframe as hidden as possible by using
+// techniques from http://www.paciellogroup.com/blog/?p=604. Added
+// support for the "shortcut" format $(window).hashchange( fn ) and
+// $(window).hashchange() like jQuery provides for built-in events.
+// Renamed jQuery.hashchangeDelay to <jQuery.fn.hashchange.delay> and
+// lowered its default value to 50. Added <jQuery.fn.hashchange.domain>
+// and <jQuery.fn.hashchange.src> properties plus document-domain.html
+// file to address access denied issues when setting document.domain in
+// IE6/7.
+// 1.2 - (2/11/2010) Fixed a bug where coming back to a page using this plugin
+// from a page on another domain would cause an error in Safari 4. Also,
+// IE6/7 Iframe is now inserted after the body (this actually works),
+// which prevents the page from scrolling when the event is first bound.
+// Event can also now be bound before DOM ready, but it won't be usable
+// before then in IE6/7.
+// 1.1 - (1/21/2010) Incorporated document.documentMode test to fix IE8 bug
+// where browser version is incorrectly reported as 8.0, despite
+// inclusion of the X-UA-Compatible IE=EmulateIE7 meta tag.
+// 1.0 - (1/9/2010) Initial Release. Broke out the jQuery BBQ event.special
+// window.onhashchange functionality into a separate plugin for users
+// who want just the basic event & back button support, without all the
+// extra awesomeness that BBQ provides. This plugin will be included as
+// part of jQuery BBQ, but also be available separately.
+
+(function($,window,undefined){
+ // Reused string.
+ var str_hashchange = 'hashchange',
+
+ // Method / object references.
+ doc = document,
+ fake_onhashchange,
+ special = $.event.special,
+
+ // Does the browser support window.onhashchange? Note that IE8 running in
+ // IE7 compatibility mode reports true for 'onhashchange' in window, even
+ // though the event isn't supported, so also test document.documentMode.
+ doc_mode = doc.documentMode,
+ supports_onhashchange = 'on' + str_hashchange in window && ( doc_mode === undefined || doc_mode > 7 );
+
+ // Get location.hash (or what you'd expect location.hash to be) sans any
+ // leading #. Thanks for making this necessary, Firefox!
+ function get_fragment( url ) {
+ url = url || location.href;
+ return '#' + url.replace( /^[^#]*#?(.*)$/, '$1' );
+ };
+
+ // Method: jQuery.fn.hashchange
+ //
+ // Bind a handler to the window.onhashchange event or trigger all bound
+ // window.onhashchange event handlers. This behavior is consistent with
+ // jQuery's built-in event handlers.
+ //
+ // Usage:
+ //
+ // > jQuery(window).hashchange( [ handler ] );
+ //
+ // Arguments:
+ //
+ // handler - (Function) Optional handler to be bound to the hashchange
+ // event. This is a "shortcut" for the more verbose form:
+ // jQuery(window).bind( 'hashchange', handler ). If handler is omitted,
+ // all bound window.onhashchange event handlers will be triggered. This
+ // is a shortcut for the more verbose
+ // jQuery(window).trigger( 'hashchange' ). These forms are described in
+ // the <hashchange event> section.
+ //
+ // Returns:
+ //
+ // (jQuery) The initial jQuery collection of elements.
+
+ // Allow the "shortcut" format $(elem).hashchange( fn ) for binding and
+ // $(elem).hashchange() for triggering, like jQuery does for built-in events.
+ $.fn[ str_hashchange ] = function( fn ) {
+ return fn ? this.bind( str_hashchange, fn ) : this.trigger( str_hashchange );
+ };
+
+ // Property: jQuery.fn.hashchange.delay
+ //
+ // The numeric interval (in milliseconds) at which the <hashchange event>
+ // polling loop executes. Defaults to 50.
+
+ // Property: jQuery.fn.hashchange.domain
+ //
+ // If you're setting document.domain in your JavaScript, and you want hash
+ // history to work in IE6/7, not only must this property be set, but you must
+ // also set document.domain BEFORE jQuery is loaded into the page. This
+ // property is only applicable if you are supporting IE6/7 (or IE8 operating
+ // in "IE7 compatibility" mode).
+ //
+ // In addition, the <jQuery.fn.hashchange.src> property must be set to the
+ // path of the included "document-domain.html" file, which can be renamed or
+ // modified if necessary (note that the document.domain specified must be the
+ // same in both your main JavaScript as well as in this file).
+ //
+ // Usage:
+ //
+ // jQuery.fn.hashchange.domain = document.domain;
+
+ // Property: jQuery.fn.hashchange.src
+ //
+ // If, for some reason, you need to specify an Iframe src file (for example,
+ // when setting document.domain as in <jQuery.fn.hashchange.domain>), you can
+ // do so using this property. Note that when using this property, history
+ // won't be recorded in IE6/7 until the Iframe src file loads. This property
+ // is only applicable if you are supporting IE6/7 (or IE8 operating in "IE7
+ // compatibility" mode).
+ //
+ // Usage:
+ //
+ // jQuery.fn.hashchange.src = 'path/to/file.html';
+
+ $.fn[ str_hashchange ].delay = 50;
+ /*
+ $.fn[ str_hashchange ].domain = null;
+ $.fn[ str_hashchange ].src = null;
+ */
+
+ // Event: hashchange event
+ //
+ // Fired when location.hash changes. In browsers that support it, the native
+ // HTML5 window.onhashchange event is used, otherwise a polling loop is
+ // initialized, running every <jQuery.fn.hashchange.delay> milliseconds to
+ // see if the hash has changed. In IE6/7 (and IE8 operating in "IE7
+ // compatibility" mode), a hidden Iframe is created to allow the back button
+ // and hash-based history to work.
+ //
+ // Usage as described in <jQuery.fn.hashchange>:
+ //
+ // > // Bind an event handler.
+ // > jQuery(window).hashchange( function(e) {
+ // > var hash = location.hash;
+ // > ...
+ // > });
+ // >
+ // > // Manually trigger the event handler.
+ // > jQuery(window).hashchange();
+ //
+ // A more verbose usage that allows for event namespacing:
+ //
+ // > // Bind an event handler.
+ // > jQuery(window).bind( 'hashchange', function(e) {
+ // > var hash = location.hash;
+ // > ...
+ // > });
+ // >
+ // > // Manually trigger the event handler.
+ // > jQuery(window).trigger( 'hashchange' );
+ //
+ // Additional Notes:
+ //
+ // * The polling loop and Iframe are not created until at least one handler
+ // is actually bound to the 'hashchange' event.
+ // * If you need the bound handler(s) to execute immediately, in cases where
+ // a location.hash exists on page load, via bookmark or page refresh for
+ // example, use jQuery(window).hashchange() or the more verbose
+ // jQuery(window).trigger( 'hashchange' ).
+ // * The event can be bound before DOM ready, but since it won't be usable
+ // before then in IE6/7 (due to the necessary Iframe), recommended usage is
+ // to bind it inside a DOM ready handler.
+
+ // Override existing $.event.special.hashchange methods (allowing this plugin
+ // to be defined after jQuery BBQ in BBQ's source code).
+ special[ str_hashchange ] = $.extend( special[ str_hashchange ], {
+
+ // Called only when the first 'hashchange' event is bound to window.
+ setup: function() {
+ // If window.onhashchange is supported natively, there's nothing to do..
+ if ( supports_onhashchange ) { return false; }
+
+ // Otherwise, we need to create our own. And we don't want to call this
+ // until the user binds to the event, just in case they never do, since it
+ // will create a polling loop and possibly even a hidden Iframe.
+ $( fake_onhashchange.start );
+ },
+
+ // Called only when the last 'hashchange' event is unbound from window.
+ teardown: function() {
+ // If window.onhashchange is supported natively, there's nothing to do..
+ if ( supports_onhashchange ) { return false; }
+
+ // Otherwise, we need to stop ours (if possible).
+ $( fake_onhashchange.stop );
+ }
+
+ });
+
+ // fake_onhashchange does all the work of triggering the window.onhashchange
+ // event for browsers that don't natively support it, including creating a
+ // polling loop to watch for hash changes and in IE 6/7 creating a hidden
+ // Iframe to enable back and forward.
+ fake_onhashchange = (function(){
+ var self = {},
+ timeout_id,
+
+ // Remember the initial hash so it doesn't get triggered immediately.
+ last_hash = get_fragment(),
+
+ fn_retval = function(val){ return val; },
+ history_set = fn_retval,
+ history_get = fn_retval;
+
+ // Start the polling loop.
+ self.start = function() {
+ timeout_id || poll();
+ };
+
+ // Stop the polling loop.
+ self.stop = function() {
+ timeout_id && clearTimeout( timeout_id );
+ timeout_id = undefined;
+ };
+
+ // This polling loop checks every $.fn.hashchange.delay milliseconds to see
+ // if location.hash has changed, and triggers the 'hashchange' event on
+ // window when necessary.
+ function poll() {
+ var hash = get_fragment(),
+ history_hash = history_get( last_hash );
+
+ if ( hash !== last_hash ) {
+ history_set( last_hash = hash, history_hash );
+
+ $(window).trigger( str_hashchange );
+
+ } else if ( history_hash !== last_hash ) {
+ location.href = location.href.replace( /#.*/, '' ) + history_hash;
+ }
+
+ timeout_id = setTimeout( poll, $.fn[ str_hashchange ].delay );
+ };
+
+ // vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
+ // vvvvvvvvvvvvvvvvvvv REMOVE IF NOT SUPPORTING IE6/7/8 vvvvvvvvvvvvvvvvvvv
+ // vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
+ $.browser.msie && !supports_onhashchange && (function(){
+ // Not only do IE6/7 need the "magical" Iframe treatment, but so does IE8
+ // when running in "IE7 compatibility" mode.
+
+ var iframe,
+ iframe_src;
+
+ // When the event is bound and polling starts in IE 6/7, create a hidden
+ // Iframe for history handling.
+ self.start = function(){
+ if ( !iframe ) {
+ iframe_src = $.fn[ str_hashchange ].src;
+ iframe_src = iframe_src && iframe_src + get_fragment();
+
+ // Create hidden Iframe. Attempt to make Iframe as hidden as possible
+ // by using techniques from http://www.paciellogroup.com/blog/?p=604.
+ iframe = $('<iframe tabindex="-1" title="empty"/>').hide()
+
+ // When Iframe has completely loaded, initialize the history and
+ // start polling.
+ .one( 'load', function(){
+ iframe_src || history_set( get_fragment() );
+ poll();
+ })
+
+ // Load Iframe src if specified, otherwise nothing.
+ .attr( 'src', iframe_src || 'javascript:0' )
+
+ // Append Iframe after the end of the body to prevent unnecessary
+ // initial page scrolling (yes, this works).
+ .insertAfter( 'body' )[0].contentWindow;
+
+ // Whenever `document.title` changes, update the Iframe's title to
+ // prettify the back/next history menu entries. Since IE sometimes
+ // errors with "Unspecified error" the very first time this is set
+ // (yes, very useful) wrap this with a try/catch block.
+ doc.onpropertychange = function(){
+ try {
+ if ( event.propertyName === 'title' ) {
+ iframe.document.title = doc.title;
+ }
+ } catch(e) {}
+ };
+
+ }
+ };
+
+ // Override the "stop" method since an IE6/7 Iframe was created. Even
+ // if there are no longer any bound event handlers, the polling loop
+ // is still necessary for back/next to work at all!
+ self.stop = fn_retval;
+
+ // Get history by looking at the hidden Iframe's location.hash.
+ history_get = function() {
+ return get_fragment( iframe.location.href );
+ };
+
+ // Set a new history item by opening and then closing the Iframe
+ // document, *then* setting its location.hash. If document.domain has
+ // been set, update that as well.
+ history_set = function( hash, history_hash ) {
+ var iframe_doc = iframe.document,
+ domain = $.fn[ str_hashchange ].domain;
+
+ if ( hash !== history_hash ) {
+ // Update Iframe with any initial `document.title` that might be set.
+ iframe_doc.title = doc.title;
+
+ // Opening the Iframe's document after it has been closed is what
+ // actually adds a history entry.
+ iframe_doc.open();
+
+ // Set document.domain for the Iframe document as well, if necessary.
+ domain && iframe_doc.write( '<script>document.domain="' + domain + '"</script>' );
+
+ iframe_doc.close();
+
+ // Update the Iframe's hash, for great justice.
+ iframe.location.hash = hash;
+ }
+ };
+
+ })();
+ // ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+ // ^^^^^^^^^^^^^^^^^^^ REMOVE IF NOT SUPPORTING IE6/7/8 ^^^^^^^^^^^^^^^^^^^
+ // ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+ return self;
+ })();
+
+})(jQuery,this);
+
+/*!
+ * jQuery UI Widget @VERSION
+ *
+ * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Widget
+ */
+
+(function( $, undefined ) {
+
+// jQuery 1.4+
+if ( $.cleanData ) {
+ var _cleanData = $.cleanData;
+ $.cleanData = function( elems ) {
+ for ( var i = 0, elem; (elem = elems[i]) != null; i++ ) {
+ $( elem ).triggerHandler( "remove" );
+ }
+ _cleanData( elems );
+ };
+} else {
+ var _remove = $.fn.remove;
+ $.fn.remove = function( selector, keepData ) {
+ return this.each(function() {
+ if ( !keepData ) {
+ if ( !selector || $.filter( selector, [ this ] ).length ) {
+ $( "*", this ).add( [ this ] ).each(function() {
+ $( this ).triggerHandler( "remove" );
+ });
+ }
+ }
+ return _remove.call( $(this), selector, keepData );
+ });
+ };
+}
+
+$.widget = function( name, base, prototype ) {
+ var namespace = name.split( "." )[ 0 ],
+ fullName;
+ name = name.split( "." )[ 1 ];
+ fullName = namespace + "-" + name;
+
+ if ( !prototype ) {
+ prototype = base;
+ base = $.Widget;
+ }
+
+ // create selector for plugin
+ $.expr[ ":" ][ fullName ] = function( elem ) {
+ return !!$.data( elem, name );
+ };
+
+ $[ namespace ] = $[ namespace ] || {};
+ $[ namespace ][ name ] = function( options, element ) {
+ // allow instantiation without initializing for simple inheritance
+ if ( arguments.length ) {
+ this._createWidget( options, element );
+ }
+ };
+
+ var basePrototype = new base();
+ // we need to make the options hash a property directly on the new instance
+ // otherwise we'll modify the options hash on the prototype that we're
+ // inheriting from
+// $.each( basePrototype, function( key, val ) {
+// if ( $.isPlainObject(val) ) {
+// basePrototype[ key ] = $.extend( {}, val );
+// }
+// });
+ basePrototype.options = $.extend( true, {}, basePrototype.options );
+ $[ namespace ][ name ].prototype = $.extend( true, basePrototype, {
+ namespace: namespace,
+ widgetName: name,
+ widgetEventPrefix: $[ namespace ][ name ].prototype.widgetEventPrefix || name,
+ widgetBaseClass: fullName
+ }, prototype );
+
+ $.widget.bridge( name, $[ namespace ][ name ] );
+};
+
+$.widget.bridge = function( name, object ) {
+ $.fn[ name ] = function( options ) {
+ var isMethodCall = typeof options === "string",
+ args = Array.prototype.slice.call( arguments, 1 ),
+ returnValue = this;
+
+ // allow multiple hashes to be passed on init
+ options = !isMethodCall && args.length ?
+ $.extend.apply( null, [ true, options ].concat(args) ) :
+ options;
+
+ // prevent calls to internal methods
+ if ( isMethodCall && options.charAt( 0 ) === "_" ) {
+ return returnValue;
+ }
+
+ if ( isMethodCall ) {
+ this.each(function() {
+ var instance = $.data( this, name );
+ if ( !instance ) {
+ throw "cannot call methods on " + name + " prior to initialization; " +
+ "attempted to call method '" + options + "'";
+ }
+ if ( !$.isFunction( instance[options] ) ) {
+ throw "no such method '" + options + "' for " + name + " widget instance";
+ }
+ var methodValue = instance[ options ].apply( instance, args );
+ if ( methodValue !== instance && methodValue !== undefined ) {
+ returnValue = methodValue;
+ return false;
+ }
+ });
+ } else {
+ this.each(function() {
+ var instance = $.data( this, name );
+ if ( instance ) {
+ instance.option( options || {} )._init();
+ } else {
+ $.data( this, name, new object( options, this ) );
+ }
+ });
+ }
+
+ return returnValue;
+ };
+};
+
+$.Widget = function( options, element ) {
+ // allow instantiation without initializing for simple inheritance
+ if ( arguments.length ) {
+ this._createWidget( options, element );
+ }
+};
+
+$.Widget.prototype = {
+ widgetName: "widget",
+ widgetEventPrefix: "",
+ options: {
+ disabled: false
+ },
+ _createWidget: function( options, element ) {
+ // $.widget.bridge stores the plugin instance, but we do it anyway
+ // so that it's stored even before the _create function runs
+ $.data( element, this.widgetName, this );
+ this.element = $( element );
+ this.options = $.extend( true, {},
+ this.options,
+ this._getCreateOptions(),
+ options );
+
+ var self = this;
+ this.element.bind( "remove." + this.widgetName, function() {
+ self.destroy();
+ });
+
+ this._create();
+ this._trigger( "create" );
+ this._init();
+ },
+ _getCreateOptions: function() {
+ var options = {};
+ if ( $.metadata ) {
+ options = $.metadata.get( element )[ this.widgetName ];
+ }
+ return options;
+ },
+ _create: function() {},
+ _init: function() {},
+
+ destroy: function() {
+ this.element
+ .unbind( "." + this.widgetName )
+ .removeData( this.widgetName );
+ this.widget()
+ .unbind( "." + this.widgetName )
+ .removeAttr( "aria-disabled" )
+ .removeClass(
+ this.widgetBaseClass + "-disabled " +
+ "ui-state-disabled" );
+ },
+
+ widget: function() {
+ return this.element;
+ },
+
+ option: function( key, value ) {
+ var options = key;
+
+ if ( arguments.length === 0 ) {
+ // don't return a reference to the internal hash
+ return $.extend( {}, this.options );
+ }
+
+ if (typeof key === "string" ) {
+ if ( value === undefined ) {
+ return this.options[ key ];
+ }
+ options = {};
+ options[ key ] = value;
+ }
+
+ this._setOptions( options );
+
+ return this;
+ },
+ _setOptions: function( options ) {
+ var self = this;
+ $.each( options, function( key, value ) {
+ self._setOption( key, value );
+ });
+
+ return this;
+ },
+ _setOption: function( key, value ) {
+ this.options[ key ] = value;
+
+ if ( key === "disabled" ) {
+ this.widget()
+ [ value ? "addClass" : "removeClass"](
+ this.widgetBaseClass + "-disabled" + " " +
+ "ui-state-disabled" )
+ .attr( "aria-disabled", value );
+ }
+
+ return this;
+ },
+
+ enable: function() {
+ return this._setOption( "disabled", false );
+ },
+ disable: function() {
+ return this._setOption( "disabled", true );
+ },
+
+ _trigger: function( type, event, data ) {
+ var callback = this.options[ type ];
+
+ event = $.Event( event );
+ event.type = ( type === this.widgetEventPrefix ?
+ type :
+ this.widgetEventPrefix + type ).toLowerCase();
+ data = data || {};
+
+ // copy original event properties over to the new event
+ // this would happen if we could call $.event.fix instead of $.Event
+ // but we don't have a way to force an event to be fixed multiple times
+ if ( event.originalEvent ) {
+ for ( var i = $.event.props.length, prop; i; ) {
+ prop = $.event.props[ --i ];
+ event[ prop ] = event.originalEvent[ prop ];
+ }
+ }
+
+ this.element.trigger( event, data );
+
+ return !( $.isFunction(callback) &&
+ callback.call( this.element[0], event, data ) === false ||
+ event.isDefaultPrevented() );
+ }
+};
+
+})( jQuery );
+
+(function( $, undefined ) {
+
+$.widget( "mobile.widget", {
+ // decorate the parent _createWidget to trigger `widgetinit` for users
+ // who wish to do post post `widgetcreate` alterations/additions
+ //
+ // TODO create a pull request for jquery ui to trigger this event
+ // in the original _createWidget
+ _createWidget: function() {
+ $.Widget.prototype._createWidget.apply( this, arguments );
+ this._trigger( 'init' );
+ },
+
+ _getCreateOptions: function() {
+
+ var elem = this.element,
+ options = {};
+
+ $.each( this.options, function( option ) {
+
+ var value = elem.jqmData( option.replace( /[A-Z]/g, function( c ) {
+ return "-" + c.toLowerCase();
+ })
+ );
+
+ if ( value !== undefined ) {
+ options[ option ] = value;
+ }
+ });
+
+ return options;
+ },
+
+ enhanceWithin: function( target, useKeepNative ) {
+ this.enhance( $( this.options.initSelector, $( target )), useKeepNative );
+ },
+
+ enhance: function( targets, useKeepNative ) {
+ var page, keepNative, $widgetElements = $( targets ), self = this;
+
+ // if ignoreContentEnabled is set to true the framework should
+ // only enhance the selected elements when they do NOT have a
+ // parent with the data-namespace-ignore attribute
+ $widgetElements = $.mobile.enhanceable( $widgetElements );
+
+ if ( useKeepNative && $widgetElements.length ) {
+ // TODO remove dependency on the page widget for the keepNative.
+ // Currently the keepNative value is defined on the page prototype so
+ // the method is as well
+ page = $.mobile.closestPageData( $widgetElements );
+ keepNative = (page && page.keepNativeSelector()) || "";
+
+ $widgetElements = $widgetElements.not( keepNative );
+ }
+
+ $widgetElements[ this.widgetName ]();
+ },
+
+ raise: function( msg ) {
+ throw "Widget [" + this.widgetName + "]: " + msg;
+ }
+});
+
+})( jQuery );
+
+(function( $, window, undefined ) {
+
+ var nsNormalizeDict = {};
+
+ // jQuery.mobile configurable options
+ $.mobile = $.extend( {}, {
+
+ // Version of the jQuery Mobile Framework
+ version: "1.1.0",
+
+ // Namespace used framework-wide for data-attrs. Default is no namespace
+ ns: "",
+
+ // Define the url parameter used for referencing widget-generated sub-pages.
+ // Translates to to example.html&ui-page=subpageIdentifier
+ // hash segment before &ui-page= is used to make Ajax request
+ subPageUrlKey: "ui-page",
+
+ // Class assigned to page currently in view, and during transitions
+ activePageClass: "ui-page-active",
+
+ // Class used for "active" button state, from CSS framework
+ activeBtnClass: "ui-btn-active",
+
+ // Class used for "focus" form element state, from CSS framework
+ focusClass: "ui-focus",
+
+ // Automatically handle clicks and form submissions through Ajax, when same-domain
+ ajaxEnabled: true,
+
+ // Automatically load and show pages based on location.hash
+ hashListeningEnabled: true,
+
+ // disable to prevent jquery from bothering with links
+ linkBindingEnabled: true,
+
+ // Set default page transition - 'none' for no transitions
+ defaultPageTransition: "fade",
+
+ // Set maximum window width for transitions to apply - 'false' for no limit
+ maxTransitionWidth: false,
+
+ // Minimum scroll distance that will be remembered when returning to a page
+ minScrollBack: 250,
+
+ // DEPRECATED: the following property is no longer in use, but defined until 2.0 to prevent conflicts
+ touchOverflowEnabled: false,
+
+ // Set default dialog transition - 'none' for no transitions
+ defaultDialogTransition: "pop",
+
+ // Show loading message during Ajax requests
+ // if false, message will not appear, but loading classes will still be toggled on html el
+ loadingMessage: "loading",
+
+ // Error response message - appears when an Ajax page request fails
+ pageLoadErrorMessage: "Error Loading Page",
+
+ // Should the text be visble in the loading message?
+ loadingMessageTextVisible: false,
+
+ // When the text is visible, what theme does the loading box use?
+ loadingMessageTheme: "a",
+
+ // For error messages, which theme does the box uses?
+ pageLoadErrorMessageTheme: "e",
+
+ //automatically initialize the DOM when it's ready
+ autoInitializePage: true,
+
+ pushStateEnabled: true,
+
+ // allows users to opt in to ignoring content by marking a parent element as
+ // data-ignored
+ ignoreContentEnabled: false,
+
+ // turn of binding to the native orientationchange due to android orientation behavior
+ orientationChangeEnabled: true,
+
+ buttonMarkup: {
+ hoverDelay: 200
+ },
+
+ // TODO might be useful upstream in jquery itself ?
+ keyCode: {
+ ALT: 18,
+ BACKSPACE: 8,
+ CAPS_LOCK: 20,
+ COMMA: 188,
+ COMMAND: 91,
+ COMMAND_LEFT: 91, // COMMAND
+ COMMAND_RIGHT: 93,
+ CONTROL: 17,
+ DELETE: 46,
+ DOWN: 40,
+ END: 35,
+ ENTER: 13,
+ ESCAPE: 27,
+ HOME: 36,
+ INSERT: 45,
+ LEFT: 37,
+ MENU: 93, // COMMAND_RIGHT
+ NUMPAD_ADD: 107,
+ NUMPAD_DECIMAL: 110,
+ NUMPAD_DIVIDE: 111,
+ NUMPAD_ENTER: 108,
+ NUMPAD_MULTIPLY: 106,
+ NUMPAD_SUBTRACT: 109,
+ PAGE_DOWN: 34,
+ PAGE_UP: 33,
+ PERIOD: 190,
+ RIGHT: 39,
+ SHIFT: 16,
+ SPACE: 32,
+ TAB: 9,
+ UP: 38,
+ WINDOWS: 91 // COMMAND
+ },
+
+ // Scroll page vertically: scroll to 0 to hide iOS address bar, or pass a Y value
+ silentScroll: function( ypos ) {
+ if ( $.type( ypos ) !== "number" ) {
+ ypos = $.mobile.defaultHomeScroll;
+ }
+
+ // prevent scrollstart and scrollstop events
+ $.event.special.scrollstart.enabled = false;
+
+ setTimeout(function() {
+ window.scrollTo( 0, ypos );
+ $( document ).trigger( "silentscroll", { x: 0, y: ypos });
+ }, 20 );
+
+ setTimeout(function() {
+ $.event.special.scrollstart.enabled = true;
+ }, 150 );
+ },
+
+ // Expose our cache for testing purposes.
+ nsNormalizeDict: nsNormalizeDict,
+
+ // Take a data attribute property, prepend the namespace
+ // and then camel case the attribute string. Add the result
+ // to our nsNormalizeDict so we don't have to do this again.
+ nsNormalize: function( prop ) {
+ if ( !prop ) {
+ return;
+ }
+
+ return nsNormalizeDict[ prop ] || ( nsNormalizeDict[ prop ] = $.camelCase( $.mobile.ns + prop ) );
+ },
+
+ getInheritedTheme: function( el, defaultTheme ) {
+
+ // Find the closest parent with a theme class on it. Note that
+ // we are not using $.fn.closest() on purpose here because this
+ // method gets called quite a bit and we need it to be as fast
+ // as possible.
+
+ var e = el[ 0 ],
+ ltr = "",
+ re = /ui-(bar|body|overlay)-([a-z])\b/,
+ c, m;
+
+ while ( e ) {
+ var c = e.className || "";
+ if ( ( m = re.exec( c ) ) && ( ltr = m[ 2 ] ) ) {
+ // We found a parent with a theme class
+ // on it so bail from this loop.
+ break;
+ }
+ e = e.parentNode;
+ }
+
+ // Return the theme letter we found, if none, return the
+ // specified default.
+
+ return ltr || defaultTheme || "a";
+ },
+
+ // TODO the following $ and $.fn extensions can/probably should be moved into jquery.mobile.core.helpers
+ //
+ // Find the closest javascript page element to gather settings data jsperf test
+ // http://jsperf.com/single-complex-selector-vs-many-complex-selectors/edit
+ // possibly naive, but it shows that the parsing overhead for *just* the page selector vs
+ // the page and dialog selector is negligable. This could probably be speed up by
+ // doing a similar parent node traversal to the one found in the inherited theme code above
+ closestPageData: function( $target ) {
+ return $target
+ .closest(':jqmData(role="page"), :jqmData(role="dialog")')
+ .data("page");
+ },
+
+ enhanceable: function( $set ) {
+ return this.haveParents( $set, "enhance" );
+ },
+
+ hijackable: function( $set ) {
+ return this.haveParents( $set, "ajax" );
+ },
+
+ haveParents: function( $set, attr ) {
+ if( !$.mobile.ignoreContentEnabled ){
+ return $set;
+ }
+
+ var count = $set.length,
+ $newSet = $(),
+ e, $element, excluded;
+
+ for ( var i = 0; i < count; i++ ) {
+ $element = $set.eq( i );
+ excluded = false;
+ e = $set[ i ];
+
+ while ( e ) {
+ var c = e.getAttribute ? e.getAttribute( "data-" + $.mobile.ns + attr ) : "";
+
+ if ( c === "false" ) {
+ excluded = true;
+ break;
+ }
+
+ e = e.parentNode;
+ }
+
+ if ( !excluded ) {
+ $newSet = $newSet.add( $element );
+ }
+ }
+
+ return $newSet;
+ }
+ }, $.mobile );
+
+ // Mobile version of data and removeData and hasData methods
+ // ensures all data is set and retrieved using jQuery Mobile's data namespace
+ $.fn.jqmData = function( prop, value ) {
+ var result;
+ if ( typeof prop != "undefined" ) {
+ if ( prop ) {
+ prop = $.mobile.nsNormalize( prop );
+ }
+ result = this.data.apply( this, arguments.length < 2 ? [ prop ] : [ prop, value ] );
+ }
+ return result;
+ };
+
+ $.jqmData = function( elem, prop, value ) {
+ var result;
+ if ( typeof prop != "undefined" ) {
+ result = $.data( elem, prop ? $.mobile.nsNormalize( prop ) : prop, value );
+ }
+ return result;
+ };
+
+ $.fn.jqmRemoveData = function( prop ) {
+ return this.removeData( $.mobile.nsNormalize( prop ) );
+ };
+
+ $.jqmRemoveData = function( elem, prop ) {
+ return $.removeData( elem, $.mobile.nsNormalize( prop ) );
+ };
+
+ $.fn.removeWithDependents = function() {
+ $.removeWithDependents( this );
+ };
+
+ $.removeWithDependents = function( elem ) {
+ var $elem = $( elem );
+
+ ( $elem.jqmData('dependents') || $() ).remove();
+ $elem.remove();
+ };
+
+ $.fn.addDependents = function( newDependents ) {
+ $.addDependents( $(this), newDependents );
+ };
+
+ $.addDependents = function( elem, newDependents ) {
+ var dependents = $(elem).jqmData( 'dependents' ) || $();
+
+ $(elem).jqmData( 'dependents', $.merge(dependents, newDependents) );
+ };
+
+ // note that this helper doesn't attempt to handle the callback
+ // or setting of an html elements text, its only purpose is
+ // to return the html encoded version of the text in all cases. (thus the name)
+ $.fn.getEncodedText = function() {
+ return $( "<div/>" ).text( $(this).text() ).html();
+ };
+
+ // fluent helper function for the mobile namespaced equivalent
+ $.fn.jqmEnhanceable = function() {
+ return $.mobile.enhanceable( this );
+ };
+
+ $.fn.jqmHijackable = function() {
+ return $.mobile.hijackable( this );
+ };
+
+ // Monkey-patching Sizzle to filter the :jqmData selector
+ var oldFind = $.find,
+ jqmDataRE = /:jqmData\(([^)]*)\)/g;
+
+ $.find = function( selector, context, ret, extra ) {
+ selector = selector.replace( jqmDataRE, "[data-" + ( $.mobile.ns || "" ) + "$1]" );
+
+ return oldFind.call( this, selector, context, ret, extra );
+ };
+
+ $.extend( $.find, oldFind );
+
+ $.find.matches = function( expr, set ) {
+ return $.find( expr, null, null, set );
+ };
+
+ $.find.matchesSelector = function( node, expr ) {
+ return $.find( expr, null, null, [ node ] ).length > 0;
+ };
+})( jQuery, this );
+
+
+(function( $, undefined ) {
+
+var $window = $( window ),
+ $html = $( "html" );
+
+/* $.mobile.media method: pass a CSS media type or query and get a bool return
+ note: this feature relies on actual media query support for media queries, though types will work most anywhere
+ examples:
+ $.mobile.media('screen') // tests for screen media type
+ $.mobile.media('screen and (min-width: 480px)') // tests for screen media type with window width > 480px
+ $.mobile.media('@media screen and (-webkit-min-device-pixel-ratio: 2)') // tests for webkit 2x pixel ratio (iPhone 4)
+*/
+$.mobile.media = (function() {
+ // TODO: use window.matchMedia once at least one UA implements it
+ var cache = {},
+ testDiv = $( "<div id='jquery-mediatest'>" ),
+ fakeBody = $( "<body>" ).append( testDiv );
+
+ return function( query ) {
+ if ( !( query in cache ) ) {
+ var styleBlock = document.createElement( "style" ),
+ cssrule = "@media " + query + " { #jquery-mediatest { position:absolute; } }";
+
+ //must set type for IE!
+ styleBlock.type = "text/css";
+
+ if ( styleBlock.styleSheet ){
+ styleBlock.styleSheet.cssText = cssrule;
+ } else {
+ styleBlock.appendChild( document.createTextNode(cssrule) );
+ }
+
+ $html.prepend( fakeBody ).prepend( styleBlock );
+ cache[ query ] = testDiv.css( "position" ) === "absolute";
+ fakeBody.add( styleBlock ).remove();
+ }
+ return cache[ query ];
+ };
+})();
+
+})(jQuery);
+
+(function( $, undefined ) {
+
+var fakeBody = $( "<body>" ).prependTo( "html" ),
+ fbCSS = fakeBody[ 0 ].style,
+ vendors = [ "Webkit", "Moz", "O" ],
+ webos = "palmGetResource" in window, //only used to rule out scrollTop
+ operamini = window.operamini && ({}).toString.call( window.operamini ) === "[object OperaMini]",
+ bb = window.blackberry; //only used to rule out box shadow, as it's filled opaque on BB
+
+// thx Modernizr
+function propExists( prop ) {
+ var uc_prop = prop.charAt( 0 ).toUpperCase() + prop.substr( 1 ),
+ props = ( prop + " " + vendors.join( uc_prop + " " ) + uc_prop ).split( " " );
+
+ for ( var v in props ){
+ if ( fbCSS[ props[ v ] ] !== undefined ) {
+ return true;
+ }
+ }
+}
+
+function validStyle( prop, value, check_vend ) {
+ var div = document.createElement('div'),
+ uc = function( txt ) {
+ return txt.charAt( 0 ).toUpperCase() + txt.substr( 1 )
+ },
+ vend_pref = function( vend ) {
+ return "-" + vend.charAt( 0 ).toLowerCase() + vend.substr( 1 ) + "-";
+ },
+ check_style = function( vend ) {
+ var vend_prop = vend_pref( vend ) + prop + ": " + value + ";",
+ uc_vend = uc( vend ),
+ propStyle = uc_vend + uc( prop );
+
+ div.setAttribute( "style", vend_prop );
+
+ if( !!div.style[ propStyle ] ) {
+ ret = true;
+ }
+ },
+ check_vends = check_vend ? [ check_vend ] : vendors,
+ ret;
+
+ for( i = 0; i < check_vends.length; i++ ) {
+ check_style( check_vends[i] );
+ }
+ return !!ret;
+}
+
+// Thanks to Modernizr src for this test idea. `perspective` check is limited to Moz to prevent a false positive for 3D transforms on Android.
+function transform3dTest() {
+ var prop = "transform-3d";
+ return validStyle( 'perspective', '10px', 'moz' ) || $.mobile.media( "(-" + vendors.join( "-" + prop + "),(-" ) + "-" + prop + "),(" + prop + ")" );
+}
+
+// Test for dynamic-updating base tag support ( allows us to avoid href,src attr rewriting )
+function baseTagTest() {
+ var fauxBase = location.protocol + "//" + location.host + location.pathname + "ui-dir/",
+ base = $( "head base" ),
+ fauxEle = null,
+ href = "",
+ link, rebase;
+
+ if ( !base.length ) {
+ base = fauxEle = $( "<base>", { "href": fauxBase }).appendTo( "head" );
+ } else {
+ href = base.attr( "href" );
+ }
+
+ link = $( "<a href='testurl' />" ).prependTo( fakeBody );
+ rebase = link[ 0 ].href;
+ base[ 0 ].href = href || location.pathname;
+
+ if ( fauxEle ) {
+ fauxEle.remove();
+ }
+ return rebase.indexOf( fauxBase ) === 0;
+}
+
+
+// non-UA-based IE version check by James Padolsey, modified by jdalton - from http://gist.github.com/527683
+// allows for inclusion of IE 6+, including Windows Mobile 7
+$.extend( $.mobile, { browser: {} } );
+$.mobile.browser.ie = (function() {
+ var v = 3,
+ div = document.createElement( "div" ),
+ a = div.all || [];
+
+ // added {} to silence closure compiler warnings. registering my dislike of all things
+ // overly clever here for future reference
+ while ( div.innerHTML = "<!--[if gt IE " + ( ++v ) + "]><br><![endif]-->", a[ 0 ] ){};
+
+ return v > 4 ? v : !v;
+})();
+
+
+$.extend( $.support, {
+ orientation: "orientation" in window && "onorientationchange" in window,
+ touch: "ontouchend" in document,
+ cssTransitions: "WebKitTransitionEvent" in window || validStyle( 'transition', 'height 100ms linear' ),
+ pushState: "pushState" in history && "replaceState" in history,
+ mediaquery: $.mobile.media( "only all" ),
+ cssPseudoElement: !!propExists( "content" ),
+ touchOverflow: !!propExists( "overflowScrolling" ),
+ cssTransform3d: transform3dTest(),
+ boxShadow: !!propExists( "boxShadow" ) && !bb,
+ scrollTop: ( "pageXOffset" in window || "scrollTop" in document.documentElement || "scrollTop" in fakeBody[ 0 ] ) && !webos && !operamini,
+ dynamicBaseTag: baseTagTest()
+});
+
+fakeBody.remove();
+
+
+// $.mobile.ajaxBlacklist is used to override ajaxEnabled on platforms that have known conflicts with hash history updates (BB5, Symbian)
+// or that generally work better browsing in regular http for full page refreshes (Opera Mini)
+// Note: This detection below is used as a last resort.
+// We recommend only using these detection methods when all other more reliable/forward-looking approaches are not possible
+var nokiaLTE7_3 = (function(){
+
+ var ua = window.navigator.userAgent;
+
+ //The following is an attempt to match Nokia browsers that are running Symbian/s60, with webkit, version 7.3 or older
+ return ua.indexOf( "Nokia" ) > -1 &&
+ ( ua.indexOf( "Symbian/3" ) > -1 || ua.indexOf( "Series60/5" ) > -1 ) &&
+ ua.indexOf( "AppleWebKit" ) > -1 &&
+ ua.match( /(BrowserNG|NokiaBrowser)\/7\.[0-3]/ );
+})();
+
+// Support conditions that must be met in order to proceed
+// default enhanced qualifications are media query support OR IE 7+
+$.mobile.gradeA = function(){
+ return $.support.mediaquery || $.mobile.browser.ie && $.mobile.browser.ie >= 7;
+};
+
+$.mobile.ajaxBlacklist =
+ // BlackBerry browsers, pre-webkit
+ window.blackberry && !window.WebKitPoint ||
+ // Opera Mini
+ operamini ||
+ // Symbian webkits pre 7.3
+ nokiaLTE7_3;
+
+// Lastly, this workaround is the only way we've found so far to get pre 7.3 Symbian webkit devices
+// to render the stylesheets when they're referenced before this script, as we'd recommend doing.
+// This simply reappends the CSS in place, which for some reason makes it apply
+if ( nokiaLTE7_3 ) {
+ $(function() {
+ $( "head link[rel='stylesheet']" ).attr( "rel", "alternate stylesheet" ).attr( "rel", "stylesheet" );
+ });
+}
+
+// For ruling out shadows via css
+if ( !$.support.boxShadow ) {
+ $( "html" ).addClass( "ui-mobile-nosupport-boxshadow" );
+}
+
+})( jQuery );
+
+(function( $, window, undefined ) {
+
+// add new event shortcuts
+$.each( ( "touchstart touchmove touchend orientationchange throttledresize " +
+ "tap taphold swipe swipeleft swiperight scrollstart scrollstop" ).split( " " ), function( i, name ) {
+
+ $.fn[ name ] = function( fn ) {
+ return fn ? this.bind( name, fn ) : this.trigger( name );
+ };
+
+ $.attrFn[ name ] = true;
+});
+
+var supportTouch = $.support.touch,
+ scrollEvent = "touchmove scroll",
+ touchStartEvent = supportTouch ? "touchstart" : "mousedown",
+ touchStopEvent = supportTouch ? "touchend" : "mouseup",
+ touchMoveEvent = supportTouch ? "touchmove" : "mousemove";
+
+function triggerCustomEvent( obj, eventType, event ) {
+ var originalType = event.type;
+ event.type = eventType;
+ $.event.handle.call( obj, event );
+ event.type = originalType;
+}
+
+// also handles scrollstop
+$.event.special.scrollstart = {
+
+ enabled: true,
+
+ setup: function() {
+
+ var thisObject = this,
+ $this = $( thisObject ),
+ scrolling,
+ timer;
+
+ function trigger( event, state ) {
+ scrolling = state;
+ triggerCustomEvent( thisObject, scrolling ? "scrollstart" : "scrollstop", event );
+ }
+
+ // iPhone triggers scroll after a small delay; use touchmove instead
+ $this.bind( scrollEvent, function( event ) {
+
+ if ( !$.event.special.scrollstart.enabled ) {
+ return;
+ }
+
+ if ( !scrolling ) {
+ trigger( event, true );
+ }
+
+ clearTimeout( timer );
+ timer = setTimeout(function() {
+ trigger( event, false );
+ }, 50 );
+ });
+ }
+};
+
+// also handles taphold
+$.event.special.tap = {
+ setup: function() {
+ var thisObject = this,
+ $this = $( thisObject );
+
+ $this.bind( "vmousedown", function( event ) {
+
+ if ( event.which && event.which !== 1 ) {
+ return false;
+ }
+
+ var origTarget = event.target,
+ origEvent = event.originalEvent,
+ timer;
+
+ function clearTapTimer() {
+ clearTimeout( timer );
+ }
+
+ function clearTapHandlers() {
+ clearTapTimer();
+
+ $this.unbind( "vclick", clickHandler )
+ .unbind( "vmouseup", clearTapTimer );
+ $( document ).unbind( "vmousecancel", clearTapHandlers );
+ }
+
+ function clickHandler(event) {
+ clearTapHandlers();
+
+ // ONLY trigger a 'tap' event if the start target is
+ // the same as the stop target.
+ if ( origTarget == event.target ) {
+ triggerCustomEvent( thisObject, "tap", event );
+ }
+ }
+
+ $this.bind( "vmouseup", clearTapTimer )
+ .bind( "vclick", clickHandler );
+ $( document ).bind( "vmousecancel", clearTapHandlers );
+
+ timer = setTimeout(function() {
+ triggerCustomEvent( thisObject, "taphold", $.Event( "taphold", { target: origTarget } ) );
+ }, 750 );
+ });
+ }
+};
+
+// also handles swipeleft, swiperight
+$.event.special.swipe = {
+ scrollSupressionThreshold: 10, // More than this horizontal displacement, and we will suppress scrolling.
+
+ durationThreshold: 1000, // More time than this, and it isn't a swipe.
+
+ horizontalDistanceThreshold: 30, // Swipe horizontal displacement must be more than this.
+
+ verticalDistanceThreshold: 75, // Swipe vertical displacement must be less than this.
+
+ setup: function() {
+ var thisObject = this,
+ $this = $( thisObject );
+
+ $this.bind( touchStartEvent, function( event ) {
+ var data = event.originalEvent.touches ?
+ event.originalEvent.touches[ 0 ] : event,
+ start = {
+ time: ( new Date() ).getTime(),
+ coords: [ data.pageX, data.pageY ],
+ origin: $( event.target )
+ },
+ stop;
+
+ function moveHandler( event ) {
+
+ if ( !start ) {
+ return;
+ }
+
+ var data = event.originalEvent.touches ?
+ event.originalEvent.touches[ 0 ] : event;
+
+ stop = {
+ time: ( new Date() ).getTime(),
+ coords: [ data.pageX, data.pageY ]
+ };
+
+ // prevent scrolling
+ if ( Math.abs( start.coords[ 0 ] - stop.coords[ 0 ] ) > $.event.special.swipe.scrollSupressionThreshold ) {
+ event.preventDefault();
+ }
+ }
+
+ $this.bind( touchMoveEvent, moveHandler )
+ .one( touchStopEvent, function( event ) {
+ $this.unbind( touchMoveEvent, moveHandler );
+
+ if ( start && stop ) {
+ if ( stop.time - start.time < $.event.special.swipe.durationThreshold &&
+ Math.abs( start.coords[ 0 ] - stop.coords[ 0 ] ) > $.event.special.swipe.horizontalDistanceThreshold &&
+ Math.abs( start.coords[ 1 ] - stop.coords[ 1 ] ) < $.event.special.swipe.verticalDistanceThreshold ) {
+
+ start.origin.trigger( "swipe" )
+ .trigger( start.coords[0] > stop.coords[ 0 ] ? "swipeleft" : "swiperight" );
+ }
+ }
+ start = stop = undefined;
+ });
+ });
+ }
+};
+
+(function( $, window ) {
+ // "Cowboy" Ben Alman
+
+ var win = $( window ),
+ special_event,
+ get_orientation,
+ last_orientation,
+ initial_orientation_is_landscape,
+ initial_orientation_is_default,
+ portrait_map = { "0": true, "180": true };
+
+ // It seems that some device/browser vendors use window.orientation values 0 and 180 to
+ // denote the "default" orientation. For iOS devices, and most other smart-phones tested,
+ // the default orientation is always "portrait", but in some Android and RIM based tablets,
+ // the default orientation is "landscape". The following code attempts to use the window
+ // dimensions to figure out what the current orientation is, and then makes adjustments
+ // to the to the portrait_map if necessary, so that we can properly decode the
+ // window.orientation value whenever get_orientation() is called.
+ //
+ // Note that we used to use a media query to figure out what the orientation the browser
+ // thinks it is in:
+ //
+ // initial_orientation_is_landscape = $.mobile.media("all and (orientation: landscape)");
+ //
+ // but there was an iPhone/iPod Touch bug beginning with iOS 4.2, up through iOS 5.1,
+ // where the browser *ALWAYS* applied the landscape media query. This bug does not
+ // happen on iPad.
+
+ if ( $.support.orientation ) {
+
+ // Check the window width and height to figure out what the current orientation
+ // of the device is at this moment. Note that we've initialized the portrait map
+ // values to 0 and 180, *AND* we purposely check for landscape so that if we guess
+ // wrong, , we default to the assumption that portrait is the default orientation.
+ // We use a threshold check below because on some platforms like iOS, the iPhone
+ // form-factor can report a larger width than height if the user turns on the
+ // developer console. The actual threshold value is somewhat arbitrary, we just
+ // need to make sure it is large enough to exclude the developer console case.
+
+ var ww = window.innerWidth || $( window ).width(),
+ wh = window.innerHeight || $( window ).height(),
+ landscape_threshold = 50;
+
+ initial_orientation_is_landscape = ww > wh && ( ww - wh ) > landscape_threshold;
+
+
+ // Now check to see if the current window.orientation is 0 or 180.
+ initial_orientation_is_default = portrait_map[ window.orientation ];
+
+ // If the initial orientation is landscape, but window.orientation reports 0 or 180, *OR*
+ // if the initial orientation is portrait, but window.orientation reports 90 or -90, we
+ // need to flip our portrait_map values because landscape is the default orientation for
+ // this device/browser.
+ if ( ( initial_orientation_is_landscape && initial_orientation_is_default ) || ( !initial_orientation_is_landscape && !initial_orientation_is_default ) ) {
+ portrait_map = { "-90": true, "90": true };
+ }
+ }
+
+ $.event.special.orientationchange = special_event = {
+ setup: function() {
+ // If the event is supported natively, return false so that jQuery
+ // will bind to the event using DOM methods.
+ if ( $.support.orientation && $.mobile.orientationChangeEnabled ) {
+ return false;
+ }
+
+ // Get the current orientation to avoid initial double-triggering.
+ last_orientation = get_orientation();
+
+ // Because the orientationchange event doesn't exist, simulate the
+ // event by testing window dimensions on resize.
+ win.bind( "throttledresize", handler );
+ },
+ teardown: function(){
+ // If the event is not supported natively, return false so that
+ // jQuery will unbind the event using DOM methods.
+ if ( $.support.orientation && $.mobile.orientationChangeEnabled ) {
+ return false;
+ }
+
+ // Because the orientationchange event doesn't exist, unbind the
+ // resize event handler.
+ win.unbind( "throttledresize", handler );
+ },
+ add: function( handleObj ) {
+ // Save a reference to the bound event handler.
+ var old_handler = handleObj.handler;
+
+
+ handleObj.handler = function( event ) {
+ // Modify event object, adding the .orientation property.
+ event.orientation = get_orientation();
+
+ // Call the originally-bound event handler and return its result.
+ return old_handler.apply( this, arguments );
+ };
+ }
+ };
+
+ // If the event is not supported natively, this handler will be bound to
+ // the window resize event to simulate the orientationchange event.
+ function handler() {
+ // Get the current orientation.
+ var orientation = get_orientation();
+
+ if ( orientation !== last_orientation ) {
+ // The orientation has changed, so trigger the orientationchange event.
+ last_orientation = orientation;
+ win.trigger( "orientationchange" );
+ }
+ }
+
+ // Get the current page orientation. This method is exposed publicly, should it
+ // be needed, as jQuery.event.special.orientationchange.orientation()
+ $.event.special.orientationchange.orientation = get_orientation = function() {
+ var isPortrait = true, elem = document.documentElement;
+
+ // prefer window orientation to the calculation based on screensize as
+ // the actual screen resize takes place before or after the orientation change event
+ // has been fired depending on implementation (eg android 2.3 is before, iphone after).
+ // More testing is required to determine if a more reliable method of determining the new screensize
+ // is possible when orientationchange is fired. (eg, use media queries + element + opacity)
+ if ( $.support.orientation ) {
+ // if the window orientation registers as 0 or 180 degrees report
+ // portrait, otherwise landscape
+ isPortrait = portrait_map[ window.orientation ];
+ } else {
+ isPortrait = elem && elem.clientWidth / elem.clientHeight < 1.1;
+ }
+
+ return isPortrait ? "portrait" : "landscape";
+ };
+
+})( jQuery, window );
+
+
+// throttled resize event
+(function() {
+
+ $.event.special.throttledresize = {
+ setup: function() {
+ $( this ).bind( "resize", handler );
+ },
+ teardown: function(){
+ $( this ).unbind( "resize", handler );
+ }
+ };
+
+ var throttle = 250,
+ handler = function() {
+ curr = ( new Date() ).getTime();
+ diff = curr - lastCall;
+
+ if ( diff >= throttle ) {
+
+ lastCall = curr;
+ $( this ).trigger( "throttledresize" );
+
+ } else {
+
+ if ( heldCall ) {
+ clearTimeout( heldCall );
+ }
+
+ // Promise a held call will still execute
+ heldCall = setTimeout( handler, throttle - diff );
+ }
+ },
+ lastCall = 0,
+ heldCall,
+ curr,
+ diff;
+})();
+
+
+$.each({
+ scrollstop: "scrollstart",
+ taphold: "tap",
+ swipeleft: "swipe",
+ swiperight: "swipe"
+}, function( event, sourceEvent ) {
+
+ $.event.special[ event ] = {
+ setup: function() {
+ $( this ).bind( sourceEvent, $.noop );
+ }
+ };
+});
+
+})( jQuery, this );
+
+(function( $, undefined ) {
+
+$.widget( "mobile.page", $.mobile.widget, {
+ options: {
+ theme: "c",
+ domCache: false,
+ keepNativeDefault: ":jqmData(role='none'), :jqmData(role='nojs')"
+ },
+
+ _create: function() {
+
+ var self = this;
+
+ // if false is returned by the callbacks do not create the page
+ if( self._trigger( "beforecreate" ) === false ){
+ return false;
+ }
+
+ self.element
+ .attr( "tabindex", "0" )
+ .addClass( "ui-page ui-body-" + self.options.theme )
+ .bind( "pagebeforehide", function(){
+ self.removeContainerBackground();
+ } )
+ .bind( "pagebeforeshow", function(){
+ self.setContainerBackground();
+ } );
+
+ },
+
+ removeContainerBackground: function(){
+ $.mobile.pageContainer.removeClass( "ui-overlay-" + $.mobile.getInheritedTheme( this.element.parent() ) );
+ },
+
+ // set the page container background to the page theme
+ setContainerBackground: function( theme ){
+ if( this.options.theme ){
+ $.mobile.pageContainer.addClass( "ui-overlay-" + ( theme || this.options.theme ) );
+ }
+ },
+
+ keepNativeSelector: function() {
+ var options = this.options,
+ keepNativeDefined = options.keepNative && $.trim(options.keepNative);
+
+ if( keepNativeDefined && options.keepNative !== options.keepNativeDefault ){
+ return [options.keepNative, options.keepNativeDefault].join(", ");
+ }
+
+ return options.keepNativeDefault;
+ }
+});
+})( jQuery );
+
+
+(function( $, window, undefined ) {
+
+var createHandler = function( sequential ){
+
+ // Default to sequential
+ if( sequential === undefined ){
+ sequential = true;
+ }
+
+ return function( name, reverse, $to, $from ) {
+
+ var deferred = new $.Deferred(),
+ reverseClass = reverse ? " reverse" : "",
+ active = $.mobile.urlHistory.getActive(),
+ toScroll = active.lastScroll || $.mobile.defaultHomeScroll,
+ screenHeight = $.mobile.getScreenHeight(),
+ maxTransitionOverride = $.mobile.maxTransitionWidth !== false && $( window ).width() > $.mobile.maxTransitionWidth,
+ none = !$.support.cssTransitions || maxTransitionOverride || !name || name === "none",
+ toggleViewportClass = function(){
+ $.mobile.pageContainer.toggleClass( "ui-mobile-viewport-transitioning viewport-" + name );
+ },
+ scrollPage = function(){
+ // By using scrollTo instead of silentScroll, we can keep things better in order
+ // Just to be precautios, disable scrollstart listening like silentScroll would
+ $.event.special.scrollstart.enabled = false;
+
+ window.scrollTo( 0, toScroll );
+
+ // reenable scrollstart listening like silentScroll would
+ setTimeout(function() {
+ $.event.special.scrollstart.enabled = true;
+ }, 150 );
+ },
+ cleanFrom = function(){
+ $from
+ .removeClass( $.mobile.activePageClass + " out in reverse " + name )
+ .height( "" );
+ },
+ startOut = function(){
+ // if it's not sequential, call the doneOut transition to start the TO page animating in simultaneously
+ if( !sequential ){
+ doneOut();
+ }
+ else {
+ $from.animationComplete( doneOut );
+ }
+
+ // Set the from page's height and start it transitioning out
+ // Note: setting an explicit height helps eliminate tiling in the transitions
+ $from
+ .height( screenHeight + $(window ).scrollTop() )
+ .addClass( name + " out" + reverseClass );
+ },
+
+ doneOut = function() {
+
+ if ( $from && sequential ) {
+ cleanFrom();
+ }
+
+ startIn();
+ },
+
+ startIn = function(){
+
+ $to.addClass( $.mobile.activePageClass );
+
+ // Send focus to page as it is now display: block
+ $.mobile.focusPage( $to );
+
+ // Set to page height
+ $to.height( screenHeight + toScroll );
+
+ scrollPage();
+
+ if( !none ){
+ $to.animationComplete( doneIn );
+ }
+
+ $to.addClass( name + " in" + reverseClass );
+
+ if( none ){
+ doneIn();
+ }
+
+ },
+
+ doneIn = function() {
+
+ if ( !sequential ) {
+
+ if( $from ){
+ cleanFrom();
+ }
+ }
+
+ $to
+ .removeClass( "out in reverse " + name )
+ .height( "" );
+
+ toggleViewportClass();
+
+ // In some browsers (iOS5), 3D transitions block the ability to scroll to the desired location during transition
+ // This ensures we jump to that spot after the fact, if we aren't there already.
+ if( $( window ).scrollTop() !== toScroll ){
+ scrollPage();
+ }
+
+ deferred.resolve( name, reverse, $to, $from, true );
+ };
+
+ toggleViewportClass();
+
+ if ( $from && !none ) {
+ startOut();
+ }
+ else {
+ doneOut();
+ }
+
+ return deferred.promise();
+ };
+}
+
+// generate the handlers from the above
+var sequentialHandler = createHandler(),
+ simultaneousHandler = createHandler( false );
+
+// Make our transition handler the public default.
+$.mobile.defaultTransitionHandler = sequentialHandler;
+
+//transition handler dictionary for 3rd party transitions
+$.mobile.transitionHandlers = {
+ "default": $.mobile.defaultTransitionHandler,
+ "sequential": sequentialHandler,
+ "simultaneous": simultaneousHandler
+};
+
+$.mobile.transitionFallbacks = {};
+
+})( jQuery, this );
+
+( function( $, undefined ) {
+
+ //define vars for interal use
+ var $window = $( window ),
+ $html = $( 'html' ),
+ $head = $( 'head' ),
+
+ //url path helpers for use in relative url management
+ path = {
+
+ // This scary looking regular expression parses an absolute URL or its relative
+ // variants (protocol, site, document, query, and hash), into the various
+ // components (protocol, host, path, query, fragment, etc that make up the
+ // URL as well as some other commonly used sub-parts. When used with RegExp.exec()
+ // or String.match, it parses the URL into a results array that looks like this:
+ //
+ // [0]: http://jblas:password@mycompany.com:8080/mail/inbox?msg=1234&type=unread#msg-content
+ // [1]: http://jblas:password@mycompany.com:8080/mail/inbox?msg=1234&type=unread
+ // [2]: http://jblas:password@mycompany.com:8080/mail/inbox
+ // [3]: http://jblas:password@mycompany.com:8080
+ // [4]: http:
+ // [5]: //
+ // [6]: jblas:password@mycompany.com:8080
+ // [7]: jblas:password
+ // [8]: jblas
+ // [9]: password
+ // [10]: mycompany.com:8080
+ // [11]: mycompany.com
+ // [12]: 8080
+ // [13]: /mail/inbox
+ // [14]: /mail/
+ // [15]: inbox
+ // [16]: ?msg=1234&type=unread
+ // [17]: #msg-content
+ //
+ urlParseRE: /^(((([^:\/#\?]+:)?(?:(\/\/)((?:(([^:@\/#\?]+)(?:\:([^:@\/#\?]+))?)@)?(([^:\/#\?\]\[]+|\[[^\/\]@#?]+\])(?:\:([0-9]+))?))?)?)?((\/?(?:[^\/\?#]+\/+)*)([^\?#]*)))?(\?[^#]+)?)(#.*)?/,
+
+ //Parse a URL into a structure that allows easy access to
+ //all of the URL components by name.
+ parseUrl: function( url ) {
+ // If we're passed an object, we'll assume that it is
+ // a parsed url object and just return it back to the caller.
+ if ( $.type( url ) === "object" ) {
+ return url;
+ }
+
+ var matches = path.urlParseRE.exec( url || "" ) || [];
+
+ // Create an object that allows the caller to access the sub-matches
+ // by name. Note that IE returns an empty string instead of undefined,
+ // like all other browsers do, so we normalize everything so its consistent
+ // no matter what browser we're running on.
+ return {
+ href: matches[ 0 ] || "",
+ hrefNoHash: matches[ 1 ] || "",
+ hrefNoSearch: matches[ 2 ] || "",
+ domain: matches[ 3 ] || "",
+ protocol: matches[ 4 ] || "",
+ doubleSlash: matches[ 5 ] || "",
+ authority: matches[ 6 ] || "",
+ username: matches[ 8 ] || "",
+ password: matches[ 9 ] || "",
+ host: matches[ 10 ] || "",
+ hostname: matches[ 11 ] || "",
+ port: matches[ 12 ] || "",
+ pathname: matches[ 13 ] || "",
+ directory: matches[ 14 ] || "",
+ filename: matches[ 15 ] || "",
+ search: matches[ 16 ] || "",
+ hash: matches[ 17 ] || ""
+ };
+ },
+
+ //Turn relPath into an asbolute path. absPath is
+ //an optional absolute path which describes what
+ //relPath is relative to.
+ makePathAbsolute: function( relPath, absPath ) {
+ if ( relPath && relPath.charAt( 0 ) === "/" ) {
+ return relPath;
+ }
+
+ relPath = relPath || "";
+ absPath = absPath ? absPath.replace( /^\/|(\/[^\/]*|[^\/]+)$/g, "" ) : "";
+
+ var absStack = absPath ? absPath.split( "/" ) : [],
+ relStack = relPath.split( "/" );
+ for ( var i = 0; i < relStack.length; i++ ) {
+ var d = relStack[ i ];
+ switch ( d ) {
+ case ".":
+ break;
+ case "..":
+ if ( absStack.length ) {
+ absStack.pop();
+ }
+ break;
+ default:
+ absStack.push( d );
+ break;
+ }
+ }
+ return "/" + absStack.join( "/" );
+ },
+
+ //Returns true if both urls have the same domain.
+ isSameDomain: function( absUrl1, absUrl2 ) {
+ return path.parseUrl( absUrl1 ).domain === path.parseUrl( absUrl2 ).domain;
+ },
+
+ //Returns true for any relative variant.
+ isRelativeUrl: function( url ) {
+ // All relative Url variants have one thing in common, no protocol.
+ return path.parseUrl( url ).protocol === "";
+ },
+
+ //Returns true for an absolute url.
+ isAbsoluteUrl: function( url ) {
+ return path.parseUrl( url ).protocol !== "";
+ },
+
+ //Turn the specified realtive URL into an absolute one. This function
+ //can handle all relative variants (protocol, site, document, query, fragment).
+ makeUrlAbsolute: function( relUrl, absUrl ) {
+ if ( !path.isRelativeUrl( relUrl ) ) {
+ return relUrl;
+ }
+
+ var relObj = path.parseUrl( relUrl ),
+ absObj = path.parseUrl( absUrl ),
+ protocol = relObj.protocol || absObj.protocol,
+ doubleSlash = relObj.protocol ? relObj.doubleSlash : ( relObj.doubleSlash || absObj.doubleSlash ),
+ authority = relObj.authority || absObj.authority,
+ hasPath = relObj.pathname !== "",
+ pathname = path.makePathAbsolute( relObj.pathname || absObj.filename, absObj.pathname ),
+ search = relObj.search || ( !hasPath && absObj.search ) || "",
+ hash = relObj.hash;
+
+ return protocol + doubleSlash + authority + pathname + search + hash;
+ },
+
+ //Add search (aka query) params to the specified url.
+ addSearchParams: function( url, params ) {
+ var u = path.parseUrl( url ),
+ p = ( typeof params === "object" ) ? $.param( params ) : params,
+ s = u.search || "?";
+ return u.hrefNoSearch + s + ( s.charAt( s.length - 1 ) !== "?" ? "&" : "" ) + p + ( u.hash || "" );
+ },
+
+ convertUrlToDataUrl: function( absUrl ) {
+ var u = path.parseUrl( absUrl );
+ if ( path.isEmbeddedPage( u ) ) {
+ // For embedded pages, remove the dialog hash key as in getFilePath(),
+ // otherwise the Data Url won't match the id of the embedded Page.
+ return u.hash.split( dialogHashKey )[0].replace( /^#/, "" );
+ } else if ( path.isSameDomain( u, documentBase ) ) {
+ return u.hrefNoHash.replace( documentBase.domain, "" );
+ }
+ return absUrl;
+ },
+
+ //get path from current hash, or from a file path
+ get: function( newPath ) {
+ if( newPath === undefined ) {
+ newPath = location.hash;
+ }
+ return path.stripHash( newPath ).replace( /[^\/]*\.[^\/*]+$/, '' );
+ },
+
+ //return the substring of a filepath before the sub-page key, for making a server request
+ getFilePath: function( path ) {
+ var splitkey = '&' + $.mobile.subPageUrlKey;
+ return path && path.split( splitkey )[0].split( dialogHashKey )[0];
+ },
+
+ //set location hash to path
+ set: function( path ) {
+ location.hash = path;
+ },
+
+ //test if a given url (string) is a path
+ //NOTE might be exceptionally naive
+ isPath: function( url ) {
+ return ( /\// ).test( url );
+ },
+
+ //return a url path with the window's location protocol/hostname/pathname removed
+ clean: function( url ) {
+ return url.replace( documentBase.domain, "" );
+ },
+
+ //just return the url without an initial #
+ stripHash: function( url ) {
+ return url.replace( /^#/, "" );
+ },
+
+ //remove the preceding hash, any query params, and dialog notations
+ cleanHash: function( hash ) {
+ return path.stripHash( hash.replace( /\?.*$/, "" ).replace( dialogHashKey, "" ) );
+ },
+
+ //check whether a url is referencing the same domain, or an external domain or different protocol
+ //could be mailto, etc
+ isExternal: function( url ) {
+ var u = path.parseUrl( url );
+ return u.protocol && u.domain !== documentUrl.domain ? true : false;
+ },
+
+ hasProtocol: function( url ) {
+ return ( /^(:?\w+:)/ ).test( url );
+ },
+
+ //check if the specified url refers to the first page in the main application document.
+ isFirstPageUrl: function( url ) {
+ // We only deal with absolute paths.
+ var u = path.parseUrl( path.makeUrlAbsolute( url, documentBase ) ),
+
+ // Does the url have the same path as the document?
+ samePath = u.hrefNoHash === documentUrl.hrefNoHash || ( documentBaseDiffers && u.hrefNoHash === documentBase.hrefNoHash ),
+
+ // Get the first page element.
+ fp = $.mobile.firstPage,
+
+ // Get the id of the first page element if it has one.
+ fpId = fp && fp[0] ? fp[0].id : undefined;
+
+ // The url refers to the first page if the path matches the document and
+ // it either has no hash value, or the hash is exactly equal to the id of the
+ // first page element.
+ return samePath && ( !u.hash || u.hash === "#" || ( fpId && u.hash.replace( /^#/, "" ) === fpId ) );
+ },
+
+ isEmbeddedPage: function( url ) {
+ var u = path.parseUrl( url );
+
+ //if the path is absolute, then we need to compare the url against
+ //both the documentUrl and the documentBase. The main reason for this
+ //is that links embedded within external documents will refer to the
+ //application document, whereas links embedded within the application
+ //document will be resolved against the document base.
+ if ( u.protocol !== "" ) {
+ return ( u.hash && ( u.hrefNoHash === documentUrl.hrefNoHash || ( documentBaseDiffers && u.hrefNoHash === documentBase.hrefNoHash ) ) );
+ }
+ return (/^#/).test( u.href );
+ }
+ },
+
+ //will be defined when a link is clicked and given an active class
+ $activeClickedLink = null,
+
+ //urlHistory is purely here to make guesses at whether the back or forward button was clicked
+ //and provide an appropriate transition
+ urlHistory = {
+ // Array of pages that are visited during a single page load.
+ // Each has a url and optional transition, title, and pageUrl (which represents the file path, in cases where URL is obscured, such as dialogs)
+ stack: [],
+
+ //maintain an index number for the active page in the stack
+ activeIndex: 0,
+
+ //get active
+ getActive: function() {
+ return urlHistory.stack[ urlHistory.activeIndex ];
+ },
+
+ getPrev: function() {
+ return urlHistory.stack[ urlHistory.activeIndex - 1 ];
+ },
+
+ getNext: function() {
+ return urlHistory.stack[ urlHistory.activeIndex + 1 ];
+ },
+
+ // addNew is used whenever a new page is added
+ addNew: function( url, transition, title, pageUrl, role ) {
+ //if there's forward history, wipe it
+ if( urlHistory.getNext() ) {
+ urlHistory.clearForward();
+ }
+
+ urlHistory.stack.push( {url : url, transition: transition, title: title, pageUrl: pageUrl, role: role } );
+
+ urlHistory.activeIndex = urlHistory.stack.length - 1;
+ },
+
+ //wipe urls ahead of active index
+ clearForward: function() {
+ urlHistory.stack = urlHistory.stack.slice( 0, urlHistory.activeIndex + 1 );
+ },
+
+ directHashChange: function( opts ) {
+ var back , forward, newActiveIndex, prev = this.getActive();
+
+ // check if url isp in history and if it's ahead or behind current page
+ $.each( urlHistory.stack, function( i, historyEntry ) {
+
+ //if the url is in the stack, it's a forward or a back
+ if( opts.currentUrl === historyEntry.url ) {
+ //define back and forward by whether url is older or newer than current page
+ back = i < urlHistory.activeIndex;
+ forward = !back;
+ newActiveIndex = i;
+ }
+ });
+
+ // save new page index, null check to prevent falsey 0 result
+ this.activeIndex = newActiveIndex !== undefined ? newActiveIndex : this.activeIndex;
+
+ if( back ) {
+ ( opts.either || opts.isBack )( true );
+ } else if( forward ) {
+ ( opts.either || opts.isForward )( false );
+ }
+ },
+
+ //disable hashchange event listener internally to ignore one change
+ //toggled internally when location.hash is updated to match the url of a successful page load
+ ignoreNextHashChange: false
+ },
+
+ //define first selector to receive focus when a page is shown
+ focusable = "[tabindex],a,button:visible,select:visible,input",
+
+ //queue to hold simultanious page transitions
+ pageTransitionQueue = [],
+
+ //indicates whether or not page is in process of transitioning
+ isPageTransitioning = false,
+
+ //nonsense hash change key for dialogs, so they create a history entry
+ dialogHashKey = "&ui-state=dialog",
+
+ //existing base tag?
+ $base = $head.children( "base" ),
+
+ //tuck away the original document URL minus any fragment.
+ documentUrl = path.parseUrl( location.href ),
+
+ //if the document has an embedded base tag, documentBase is set to its
+ //initial value. If a base tag does not exist, then we default to the documentUrl.
+ documentBase = $base.length ? path.parseUrl( path.makeUrlAbsolute( $base.attr( "href" ), documentUrl.href ) ) : documentUrl,
+
+ //cache the comparison once.
+ documentBaseDiffers = ( documentUrl.hrefNoHash !== documentBase.hrefNoHash );
+
+ //base element management, defined depending on dynamic base tag support
+ var base = $.support.dynamicBaseTag ? {
+
+ //define base element, for use in routing asset urls that are referenced in Ajax-requested markup
+ element: ( $base.length ? $base : $( "<base>", { href: documentBase.hrefNoHash } ).prependTo( $head ) ),
+
+ //set the generated BASE element's href attribute to a new page's base path
+ set: function( href ) {
+ base.element.attr( "href", path.makeUrlAbsolute( href, documentBase ) );
+ },
+
+ //set the generated BASE element's href attribute to a new page's base path
+ reset: function() {
+ base.element.attr( "href", documentBase.hrefNoHash );
+ }
+
+ } : undefined;
+
+/*
+ internal utility functions
+--------------------------------------*/
+
+
+ //direct focus to the page title, or otherwise first focusable element
+ $.mobile.focusPage = function ( page ) {
+ var autofocus = page.find("[autofocus]"),
+ pageTitle = page.find( ".ui-title:eq(0)" );
+
+ if( autofocus.length ) {
+ autofocus.focus();
+ return;
+ }
+
+ if( pageTitle.length ) {
+ pageTitle.focus();
+ }
+ else{
+ page.focus();
+ }
+ }
+
+ //remove active classes after page transition or error
+ function removeActiveLinkClass( forceRemoval ) {
+ if( !!$activeClickedLink && ( !$activeClickedLink.closest( '.ui-page-active' ).length || forceRemoval ) ) {
+ $activeClickedLink.removeClass( $.mobile.activeBtnClass );
+ }
+ $activeClickedLink = null;
+ }
+
+ function releasePageTransitionLock() {
+ isPageTransitioning = false;
+ if( pageTransitionQueue.length > 0 ) {
+ $.mobile.changePage.apply( null, pageTransitionQueue.pop() );
+ }
+ }
+
+ // Save the last scroll distance per page, before it is hidden
+ var setLastScrollEnabled = true,
+ setLastScroll, delayedSetLastScroll;
+
+ setLastScroll = function() {
+ // this barrier prevents setting the scroll value based on the browser
+ // scrolling the window based on a hashchange
+ if( !setLastScrollEnabled ) {
+ return;
+ }
+
+ var active = $.mobile.urlHistory.getActive();
+
+ if( active ) {
+ var lastScroll = $window.scrollTop();
+
+ // Set active page's lastScroll prop.
+ // If the location we're scrolling to is less than minScrollBack, let it go.
+ active.lastScroll = lastScroll < $.mobile.minScrollBack ? $.mobile.defaultHomeScroll : lastScroll;
+ }
+ };
+
+ // bind to scrollstop to gather scroll position. The delay allows for the hashchange
+ // event to fire and disable scroll recording in the case where the browser scrolls
+ // to the hash targets location (sometimes the top of the page). once pagechange fires
+ // getLastScroll is again permitted to operate
+ delayedSetLastScroll = function() {
+ setTimeout( setLastScroll, 100 );
+ };
+
+ // disable an scroll setting when a hashchange has been fired, this only works
+ // because the recording of the scroll position is delayed for 100ms after
+ // the browser might have changed the position because of the hashchange
+ $window.bind( $.support.pushState ? "popstate" : "hashchange", function() {
+ setLastScrollEnabled = false;
+ });
+
+ // handle initial hashchange from chrome :(
+ $window.one( $.support.pushState ? "popstate" : "hashchange", function() {
+ setLastScrollEnabled = true;
+ });
+
+ // wait until the mobile page container has been determined to bind to pagechange
+ $window.one( "pagecontainercreate", function(){
+ // once the page has changed, re-enable the scroll recording
+ $.mobile.pageContainer.bind( "pagechange", function() {
+
+ setLastScrollEnabled = true;
+
+ // remove any binding that previously existed on the get scroll
+ // which may or may not be different than the scroll element determined for
+ // this page previously
+ $window.unbind( "scrollstop", delayedSetLastScroll );
+
+ // determine and bind to the current scoll element which may be the window
+ // or in the case of touch overflow the element with touch overflow
+ $window.bind( "scrollstop", delayedSetLastScroll );
+ });
+ });
+
+ // bind to scrollstop for the first page as "pagechange" won't be fired in that case
+ $window.bind( "scrollstop", delayedSetLastScroll );
+
+ //function for transitioning between two existing pages
+ function transitionPages( toPage, fromPage, transition, reverse ) {
+
+ if( fromPage ) {
+ //trigger before show/hide events
+ fromPage.data( "page" )._trigger( "beforehide", null, { nextPage: toPage } );
+ }
+
+ toPage.data( "page" )._trigger( "beforeshow", null, { prevPage: fromPage || $( "" ) } );
+
+ //clear page loader
+ $.mobile.hidePageLoadingMsg();
+
+ // If transition is defined, check if css 3D transforms are supported, and if not, if a fallback is specified
+ if( transition && !$.support.cssTransform3d && $.mobile.transitionFallbacks[ transition ] ){
+ transition = $.mobile.transitionFallbacks[ transition ];
+ }
+
+ //find the transition handler for the specified transition. If there
+ //isn't one in our transitionHandlers dictionary, use the default one.
+ //call the handler immediately to kick-off the transition.
+ var th = $.mobile.transitionHandlers[ transition || "default" ] || $.mobile.defaultTransitionHandler,
+ promise = th( transition, reverse, toPage, fromPage );
+
+ promise.done(function() {
+
+ //trigger show/hide events
+ if( fromPage ) {
+ fromPage.data( "page" )._trigger( "hide", null, { nextPage: toPage } );
+ }
+
+ //trigger pageshow, define prevPage as either fromPage or empty jQuery obj
+ toPage.data( "page" )._trigger( "show", null, { prevPage: fromPage || $( "" ) } );
+ });
+
+ return promise;
+ }
+
+ //simply set the active page's minimum height to screen height, depending on orientation
+ function getScreenHeight(){
+ // Native innerHeight returns more accurate value for this across platforms,
+ // jQuery version is here as a normalized fallback for platforms like Symbian
+ return window.innerHeight || $( window ).height();
+ }
+
+ $.mobile.getScreenHeight = getScreenHeight;
+
+ //simply set the active page's minimum height to screen height, depending on orientation
+ function resetActivePageHeight(){
+ var aPage = $( "." + $.mobile.activePageClass ),
+ aPagePadT = parseFloat( aPage.css( "padding-top" ) ),
+ aPagePadB = parseFloat( aPage.css( "padding-bottom" ) );
+
+ aPage.css( "min-height", getScreenHeight() - aPagePadT - aPagePadB );
+ }
+
+ //shared page enhancements
+ function enhancePage( $page, role ) {
+ // If a role was specified, make sure the data-role attribute
+ // on the page element is in sync.
+ if( role ) {
+ $page.attr( "data-" + $.mobile.ns + "role", role );
+ }
+
+ //run page plugin
+ $page.page();
+ }
+
+/* exposed $.mobile methods */
+
+ //animation complete callback
+ $.fn.animationComplete = function( callback ) {
+ if( $.support.cssTransitions ) {
+ return $( this ).one( 'webkitAnimationEnd animationend', callback );
+ }
+ else{
+ // defer execution for consistency between webkit/non webkit
+ setTimeout( callback, 0 );
+ return $( this );
+ }
+ };
+
+ //expose path object on $.mobile
+ $.mobile.path = path;
+
+ //expose base object on $.mobile
+ $.mobile.base = base;
+
+ //history stack
+ $.mobile.urlHistory = urlHistory;
+
+ $.mobile.dialogHashKey = dialogHashKey;
+
+
+
+ //enable cross-domain page support
+ $.mobile.allowCrossDomainPages = false;
+
+ //return the original document url
+ $.mobile.getDocumentUrl = function(asParsedObject) {
+ return asParsedObject ? $.extend( {}, documentUrl ) : documentUrl.href;
+ };
+
+ //return the original document base url
+ $.mobile.getDocumentBase = function(asParsedObject) {
+ return asParsedObject ? $.extend( {}, documentBase ) : documentBase.href;
+ };
+
+ $.mobile._bindPageRemove = function() {
+ var page = $(this);
+
+ // when dom caching is not enabled or the page is embedded bind to remove the page on hide
+ if( !page.data("page").options.domCache
+ && page.is(":jqmData(external-page='true')") ) {
+
+ page.bind( 'pagehide.remove', function() {
+ var $this = $( this ),
+ prEvent = new $.Event( "pageremove" );
+
+ $this.trigger( prEvent );
+
+ if( !prEvent.isDefaultPrevented() ){
+ $this.removeWithDependents();
+ }
+ });
+ }
+ };
+
+ // Load a page into the DOM.
+ $.mobile.loadPage = function( url, options ) {
+ // This function uses deferred notifications to let callers
+ // know when the page is done loading, or if an error has occurred.
+ var deferred = $.Deferred(),
+
+ // The default loadPage options with overrides specified by
+ // the caller.
+ settings = $.extend( {}, $.mobile.loadPage.defaults, options ),
+
+ // The DOM element for the page after it has been loaded.
+ page = null,
+
+ // If the reloadPage option is true, and the page is already
+ // in the DOM, dupCachedPage will be set to the page element
+ // so that it can be removed after the new version of the
+ // page is loaded off the network.
+ dupCachedPage = null,
+
+ // determine the current base url
+ findBaseWithDefault = function(){
+ var closestBase = ( $.mobile.activePage && getClosestBaseUrl( $.mobile.activePage ) );
+ return closestBase || documentBase.hrefNoHash;
+ },
+
+ // The absolute version of the URL passed into the function. This
+ // version of the URL may contain dialog/subpage params in it.
+ absUrl = path.makeUrlAbsolute( url, findBaseWithDefault() );
+
+
+ // If the caller provided data, and we're using "get" request,
+ // append the data to the URL.
+ if ( settings.data && settings.type === "get" ) {
+ absUrl = path.addSearchParams( absUrl, settings.data );
+ settings.data = undefined;
+ }
+
+ // If the caller is using a "post" request, reloadPage must be true
+ if( settings.data && settings.type === "post" ){
+ settings.reloadPage = true;
+ }
+
+ // The absolute version of the URL minus any dialog/subpage params.
+ // In otherwords the real URL of the page to be loaded.
+ var fileUrl = path.getFilePath( absUrl ),
+
+ // The version of the Url actually stored in the data-url attribute of
+ // the page. For embedded pages, it is just the id of the page. For pages
+ // within the same domain as the document base, it is the site relative
+ // path. For cross-domain pages (Phone Gap only) the entire absolute Url
+ // used to load the page.
+ dataUrl = path.convertUrlToDataUrl( absUrl );
+
+ // Make sure we have a pageContainer to work with.
+ settings.pageContainer = settings.pageContainer || $.mobile.pageContainer;
+
+ // Check to see if the page already exists in the DOM.
+ page = settings.pageContainer.children( ":jqmData(url='" + dataUrl + "')" );
+
+ // If we failed to find the page, check to see if the url is a
+ // reference to an embedded page. If so, it may have been dynamically
+ // injected by a developer, in which case it would be lacking a data-url
+ // attribute and in need of enhancement.
+ if ( page.length === 0 && dataUrl && !path.isPath( dataUrl ) ) {
+ page = settings.pageContainer.children( "#" + dataUrl )
+ .attr( "data-" + $.mobile.ns + "url", dataUrl );
+ }
+
+ // If we failed to find a page in the DOM, check the URL to see if it
+ // refers to the first page in the application. If it isn't a reference
+ // to the first page and refers to non-existent embedded page, error out.
+ if ( page.length === 0 ) {
+ if ( $.mobile.firstPage && path.isFirstPageUrl( fileUrl ) ) {
+ // Check to make sure our cached-first-page is actually
+ // in the DOM. Some user deployed apps are pruning the first
+ // page from the DOM for various reasons, we check for this
+ // case here because we don't want a first-page with an id
+ // falling through to the non-existent embedded page error
+ // case. If the first-page is not in the DOM, then we let
+ // things fall through to the ajax loading code below so
+ // that it gets reloaded.
+ if ( $.mobile.firstPage.parent().length ) {
+ page = $( $.mobile.firstPage );
+ }
+ } else if ( path.isEmbeddedPage( fileUrl ) ) {
+ deferred.reject( absUrl, options );
+ return deferred.promise();
+ }
+ }
+
+ // Reset base to the default document base.
+ if ( base ) {
+ base.reset();
+ }
+
+ // If the page we are interested in is already in the DOM,
+ // and the caller did not indicate that we should force a
+ // reload of the file, we are done. Otherwise, track the
+ // existing page as a duplicated.
+ if ( page.length ) {
+ if ( !settings.reloadPage ) {
+ enhancePage( page, settings.role );
+ deferred.resolve( absUrl, options, page );
+ return deferred.promise();
+ }
+ dupCachedPage = page;
+ }
+
+ var mpc = settings.pageContainer,
+ pblEvent = new $.Event( "pagebeforeload" ),
+ triggerData = { url: url, absUrl: absUrl, dataUrl: dataUrl, deferred: deferred, options: settings };
+
+ // Let listeners know we're about to load a page.
+ mpc.trigger( pblEvent, triggerData );
+
+ // If the default behavior is prevented, stop here!
+ if( pblEvent.isDefaultPrevented() ){
+ return deferred.promise();
+ }
+
+ if ( settings.showLoadMsg ) {
+
+ // This configurable timeout allows cached pages a brief delay to load without showing a message
+ var loadMsgDelay = setTimeout(function(){
+ $.mobile.showPageLoadingMsg();
+ }, settings.loadMsgDelay ),
+
+ // Shared logic for clearing timeout and removing message.
+ hideMsg = function(){
+
+ // Stop message show timer
+ clearTimeout( loadMsgDelay );
+
+ // Hide loading message
+ $.mobile.hidePageLoadingMsg();
+ };
+ }
+
+ if ( !( $.mobile.allowCrossDomainPages || path.isSameDomain( documentUrl, absUrl ) ) ) {
+ deferred.reject( absUrl, options );
+ } else {
+ // Load the new page.
+ $.ajax({
+ url: fileUrl,
+ type: settings.type,
+ data: settings.data,
+ dataType: "html",
+ success: function( html, textStatus, xhr ) {
+ //pre-parse html to check for a data-url,
+ //use it as the new fileUrl, base path, etc
+ var all = $( "<div></div>" ),
+
+ //page title regexp
+ newPageTitle = html.match( /<title[^>]*>([^<]*)/ ) && RegExp.$1,
+
+ // TODO handle dialogs again
+ pageElemRegex = new RegExp( "(<[^>]+\\bdata-" + $.mobile.ns + "role=[\"']?page[\"']?[^>]*>)" ),
+ dataUrlRegex = new RegExp( "\\bdata-" + $.mobile.ns + "url=[\"']?([^\"'>]*)[\"']?" );
+
+
+ // data-url must be provided for the base tag so resource requests can be directed to the
+ // correct url. loading into a temprorary element makes these requests immediately
+ if( pageElemRegex.test( html )
+ && RegExp.$1
+ && dataUrlRegex.test( RegExp.$1 )
+ && RegExp.$1 ) {
+ url = fileUrl = path.getFilePath( RegExp.$1 );
+ }
+
+ if ( base ) {
+ base.set( fileUrl );
+ }
+
+ //workaround to allow scripts to execute when included in page divs
+ all.get( 0 ).innerHTML = html;
+ page = all.find( ":jqmData(role='page'), :jqmData(role='dialog')" ).first();
+
+ //if page elem couldn't be found, create one and insert the body element's contents
+ if( !page.length ){
+ page = $( "<div data-" + $.mobile.ns + "role='page'>" + html.split( /<\/?body[^>]*>/gmi )[1] + "</div>" );
+ }
+
+ if ( newPageTitle && !page.jqmData( "title" ) ) {
+ if ( ~newPageTitle.indexOf( "&" ) ) {
+ newPageTitle = $( "<div>" + newPageTitle + "</div>" ).text();
+ }
+ page.jqmData( "title", newPageTitle );
+ }
+
+ //rewrite src and href attrs to use a base url
+ if( !$.support.dynamicBaseTag ) {
+ var newPath = path.get( fileUrl );
+ page.find( "[src], link[href], a[rel='external'], :jqmData(ajax='false'), a[target]" ).each(function() {
+ var thisAttr = $( this ).is( '[href]' ) ? 'href' :
+ $(this).is('[src]') ? 'src' : 'action',
+ thisUrl = $( this ).attr( thisAttr );
+
+ // XXX_jblas: We need to fix this so that it removes the document
+ // base URL, and then prepends with the new page URL.
+ //if full path exists and is same, chop it - helps IE out
+ thisUrl = thisUrl.replace( location.protocol + '//' + location.host + location.pathname, '' );
+
+ if( !/^(\w+:|#|\/)/.test( thisUrl ) ) {
+ $( this ).attr( thisAttr, newPath + thisUrl );
+ }
+ });
+ }
+
+ //append to page and enhance
+ // TODO taging a page with external to make sure that embedded pages aren't removed
+ // by the various page handling code is bad. Having page handling code in many
+ // places is bad. Solutions post 1.0
+ page
+ .attr( "data-" + $.mobile.ns + "url", path.convertUrlToDataUrl( fileUrl ) )
+ .attr( "data-" + $.mobile.ns + "external-page", true )
+ .appendTo( settings.pageContainer );
+
+ // wait for page creation to leverage options defined on widget
+ page.one( 'pagecreate', $.mobile._bindPageRemove );
+
+ enhancePage( page, settings.role );
+
+ // Enhancing the page may result in new dialogs/sub pages being inserted
+ // into the DOM. If the original absUrl refers to a sub-page, that is the
+ // real page we are interested in.
+ if ( absUrl.indexOf( "&" + $.mobile.subPageUrlKey ) > -1 ) {
+ page = settings.pageContainer.children( ":jqmData(url='" + dataUrl + "')" );
+ }
+
+ //bind pageHide to removePage after it's hidden, if the page options specify to do so
+
+ // Remove loading message.
+ if ( settings.showLoadMsg ) {
+ hideMsg();
+ }
+
+ // Add the page reference and xhr to our triggerData.
+ triggerData.xhr = xhr;
+ triggerData.textStatus = textStatus;
+ triggerData.page = page;
+
+ // Let listeners know the page loaded successfully.
+ settings.pageContainer.trigger( "pageload", triggerData );
+
+ deferred.resolve( absUrl, options, page, dupCachedPage );
+ },
+ error: function( xhr, textStatus, errorThrown ) {
+ //set base back to current path
+ if( base ) {
+ base.set( path.get() );
+ }
+
+ // Add error info to our triggerData.
+ triggerData.xhr = xhr;
+ triggerData.textStatus = textStatus;
+ triggerData.errorThrown = errorThrown;
+
+ var plfEvent = new $.Event( "pageloadfailed" );
+
+ // Let listeners know the page load failed.
+ settings.pageContainer.trigger( plfEvent, triggerData );
+
+ // If the default behavior is prevented, stop here!
+ // Note that it is the responsibility of the listener/handler
+ // that called preventDefault(), to resolve/reject the
+ // deferred object within the triggerData.
+ if( plfEvent.isDefaultPrevented() ){
+ return;
+ }
+
+ // Remove loading message.
+ if ( settings.showLoadMsg ) {
+
+ // Remove loading message.
+ hideMsg();
+
+ // show error message
+ $.mobile.showPageLoadingMsg( $.mobile.pageLoadErrorMessageTheme, $.mobile.pageLoadErrorMessage, true );
+
+ // hide after delay
+ setTimeout( $.mobile.hidePageLoadingMsg, 1500 );
+ }
+
+ deferred.reject( absUrl, options );
+ }
+ });
+ }
+
+ return deferred.promise();
+ };
+
+ $.mobile.loadPage.defaults = {
+ type: "get",
+ data: undefined,
+ reloadPage: false,
+ role: undefined, // By default we rely on the role defined by the @data-role attribute.
+ showLoadMsg: false,
+ pageContainer: undefined,
+ loadMsgDelay: 50 // This delay allows loads that pull from browser cache to occur without showing the loading message.
+ };
+
+ // Show a specific page in the page container.
+ $.mobile.changePage = function( toPage, options ) {
+ // If we are in the midst of a transition, queue the current request.
+ // We'll call changePage() once we're done with the current transition to
+ // service the request.
+ if( isPageTransitioning ) {
+ pageTransitionQueue.unshift( arguments );
+ return;
+ }
+
+ var settings = $.extend( {}, $.mobile.changePage.defaults, options );
+
+ // Make sure we have a pageContainer to work with.
+ settings.pageContainer = settings.pageContainer || $.mobile.pageContainer;
+
+ // Make sure we have a fromPage.
+ settings.fromPage = settings.fromPage || $.mobile.activePage;
+
+ var mpc = settings.pageContainer,
+ pbcEvent = new $.Event( "pagebeforechange" ),
+ triggerData = { toPage: toPage, options: settings };
+
+ // Let listeners know we're about to change the current page.
+ mpc.trigger( pbcEvent, triggerData );
+
+ // If the default behavior is prevented, stop here!
+ if( pbcEvent.isDefaultPrevented() ){
+ return;
+ }
+
+ // We allow "pagebeforechange" observers to modify the toPage in the trigger
+ // data to allow for redirects. Make sure our toPage is updated.
+
+ toPage = triggerData.toPage;
+
+ // Set the isPageTransitioning flag to prevent any requests from
+ // entering this method while we are in the midst of loading a page
+ // or transitioning.
+
+ isPageTransitioning = true;
+
+ // If the caller passed us a url, call loadPage()
+ // to make sure it is loaded into the DOM. We'll listen
+ // to the promise object it returns so we know when
+ // it is done loading or if an error ocurred.
+ if ( typeof toPage == "string" ) {
+ $.mobile.loadPage( toPage, settings )
+ .done(function( url, options, newPage, dupCachedPage ) {
+ isPageTransitioning = false;
+ options.duplicateCachedPage = dupCachedPage;
+ $.mobile.changePage( newPage, options );
+ })
+ .fail(function( url, options ) {
+ isPageTransitioning = false;
+
+ //clear out the active button state
+ removeActiveLinkClass( true );
+
+ //release transition lock so navigation is free again
+ releasePageTransitionLock();
+ settings.pageContainer.trigger( "pagechangefailed", triggerData );
+ });
+ return;
+ }
+
+ // If we are going to the first-page of the application, we need to make
+ // sure settings.dataUrl is set to the application document url. This allows
+ // us to avoid generating a document url with an id hash in the case where the
+ // first-page of the document has an id attribute specified.
+ if ( toPage[ 0 ] === $.mobile.firstPage[ 0 ] && !settings.dataUrl ) {
+ settings.dataUrl = documentUrl.hrefNoHash;
+ }
+
+ // The caller passed us a real page DOM element. Update our
+ // internal state and then trigger a transition to the page.
+ var fromPage = settings.fromPage,
+ url = ( settings.dataUrl && path.convertUrlToDataUrl( settings.dataUrl ) ) || toPage.jqmData( "url" ),
+ // The pageUrl var is usually the same as url, except when url is obscured as a dialog url. pageUrl always contains the file path
+ pageUrl = url,
+ fileUrl = path.getFilePath( url ),
+ active = urlHistory.getActive(),
+ activeIsInitialPage = urlHistory.activeIndex === 0,
+ historyDir = 0,
+ pageTitle = document.title,
+ isDialog = settings.role === "dialog" || toPage.jqmData( "role" ) === "dialog";
+
+ // By default, we prevent changePage requests when the fromPage and toPage
+ // are the same element, but folks that generate content manually/dynamically
+ // and reuse pages want to be able to transition to the same page. To allow
+ // this, they will need to change the default value of allowSamePageTransition
+ // to true, *OR*, pass it in as an option when they manually call changePage().
+ // It should be noted that our default transition animations assume that the
+ // formPage and toPage are different elements, so they may behave unexpectedly.
+ // It is up to the developer that turns on the allowSamePageTransitiona option
+ // to either turn off transition animations, or make sure that an appropriate
+ // animation transition is used.
+ if( fromPage && fromPage[0] === toPage[0] && !settings.allowSamePageTransition ) {
+ isPageTransitioning = false;
+ mpc.trigger( "pagechange", triggerData );
+ return;
+ }
+
+ // We need to make sure the page we are given has already been enhanced.
+ enhancePage( toPage, settings.role );
+
+ // If the changePage request was sent from a hashChange event, check to see if the
+ // page is already within the urlHistory stack. If so, we'll assume the user hit
+ // the forward/back button and will try to match the transition accordingly.
+ if( settings.fromHashChange ) {
+ urlHistory.directHashChange({
+ currentUrl: url,
+ isBack: function() { historyDir = -1; },
+ isForward: function() { historyDir = 1; }
+ });
+ }
+
+ // Kill the keyboard.
+ // XXX_jblas: We need to stop crawling the entire document to kill focus. Instead,
+ // we should be tracking focus with a delegate() handler so we already have
+ // the element in hand at this point.
+ // Wrap this in a try/catch block since IE9 throw "Unspecified error" if document.activeElement
+ // is undefined when we are in an IFrame.
+ try {
+ if(document.activeElement && document.activeElement.nodeName.toLowerCase() != 'body') {
+ $(document.activeElement).blur();
+ } else {
+ $( "input:focus, textarea:focus, select:focus" ).blur();
+ }
+ } catch(e) {}
+
+ // If we're displaying the page as a dialog, we don't want the url
+ // for the dialog content to be used in the hash. Instead, we want
+ // to append the dialogHashKey to the url of the current page.
+ if ( isDialog && active ) {
+ // on the initial page load active.url is undefined and in that case should
+ // be an empty string. Moving the undefined -> empty string back into
+ // urlHistory.addNew seemed imprudent given undefined better represents
+ // the url state
+ url = ( active.url || "" ) + dialogHashKey;
+ }
+
+ // Set the location hash.
+ if( settings.changeHash !== false && url ) {
+ //disable hash listening temporarily
+ urlHistory.ignoreNextHashChange = true;
+ //update hash and history
+ path.set( url );
+ }
+
+ // if title element wasn't found, try the page div data attr too
+ // If this is a deep-link or a reload ( active === undefined ) then just use pageTitle
+ var newPageTitle = ( !active )? pageTitle : toPage.jqmData( "title" ) || toPage.children(":jqmData(role='header')").find(".ui-title" ).getEncodedText();
+ if( !!newPageTitle && pageTitle == document.title ) {
+ pageTitle = newPageTitle;
+ }
+ if ( !toPage.jqmData( "title" ) ) {
+ toPage.jqmData( "title", pageTitle );
+ }
+
+ // Make sure we have a transition defined.
+ settings.transition = settings.transition
+ || ( ( historyDir && !activeIsInitialPage ) ? active.transition : undefined )
+ || ( isDialog ? $.mobile.defaultDialogTransition : $.mobile.defaultPageTransition );
+
+ //add page to history stack if it's not back or forward
+ if( !historyDir ) {
+ urlHistory.addNew( url, settings.transition, pageTitle, pageUrl, settings.role );
+ }
+
+ //set page title
+ document.title = urlHistory.getActive().title;
+
+ //set "toPage" as activePage
+ $.mobile.activePage = toPage;
+
+ // If we're navigating back in the URL history, set reverse accordingly.
+ settings.reverse = settings.reverse || historyDir < 0;
+
+ transitionPages( toPage, fromPage, settings.transition, settings.reverse )
+ .done(function( name, reverse, $to, $from, alreadyFocused ) {
+ removeActiveLinkClass();
+
+ //if there's a duplicateCachedPage, remove it from the DOM now that it's hidden
+ if ( settings.duplicateCachedPage ) {
+ settings.duplicateCachedPage.remove();
+ }
+
+ // Send focus to the newly shown page. Moved from promise .done binding in transitionPages
+ // itself to avoid ie bug that reports offsetWidth as > 0 (core check for visibility)
+ // despite visibility: hidden addresses issue #2965
+ // https://github.com/jquery/jquery-mobile/issues/2965
+ if( !alreadyFocused ){
+ $.mobile.focusPage( toPage );
+ }
+
+ releasePageTransitionLock();
+
+ // Let listeners know we're all done changing the current page.
+ mpc.trigger( "pagechange", triggerData );
+ });
+ };
+
+ $.mobile.changePage.defaults = {
+ transition: undefined,
+ reverse: false,
+ changeHash: true,
+ fromHashChange: false,
+ role: undefined, // By default we rely on the role defined by the @data-role attribute.
+ duplicateCachedPage: undefined,
+ pageContainer: undefined,
+ showLoadMsg: true, //loading message shows by default when pages are being fetched during changePage
+ dataUrl: undefined,
+ fromPage: undefined,
+ allowSamePageTransition: false
+ };
+
+/* Event Bindings - hashchange, submit, and click */
+ function findClosestLink( ele )
+ {
+ while ( ele ) {
+ // Look for the closest element with a nodeName of "a".
+ // Note that we are checking if we have a valid nodeName
+ // before attempting to access it. This is because the
+ // node we get called with could have originated from within
+ // an embedded SVG document where some symbol instance elements
+ // don't have nodeName defined on them, or strings are of type
+ // SVGAnimatedString.
+ if ( ( typeof ele.nodeName === "string" ) && ele.nodeName.toLowerCase() == "a" ) {
+ break;
+ }
+ ele = ele.parentNode;
+ }
+ return ele;
+ }
+
+ // The base URL for any given element depends on the page it resides in.
+ function getClosestBaseUrl( ele )
+ {
+ // Find the closest page and extract out its url.
+ var url = $( ele ).closest( ".ui-page" ).jqmData( "url" ),
+ base = documentBase.hrefNoHash;
+
+ if ( !url || !path.isPath( url ) ) {
+ url = base;
+ }
+
+ return path.makeUrlAbsolute( url, base);
+ }
+
+
+ //The following event bindings should be bound after mobileinit has been triggered
+ //the following function is called in the init file
+ $.mobile._registerInternalEvents = function(){
+
+ //bind to form submit events, handle with Ajax
+ $( document ).delegate( "form", "submit", function( event ) {
+ var $this = $( this );
+
+ if( !$.mobile.ajaxEnabled ||
+ // test that the form is, itself, ajax false
+ $this.is(":jqmData(ajax='false')") ||
+ // test that $.mobile.ignoreContentEnabled is set and
+ // the form or one of it's parents is ajax=false
+ !$this.jqmHijackable().length ) {
+ return;
+ }
+
+ var type = $this.attr( "method" ),
+ target = $this.attr( "target" ),
+ url = $this.attr( "action" );
+
+ // If no action is specified, browsers default to using the
+ // URL of the document containing the form. Since we dynamically
+ // pull in pages from external documents, the form should submit
+ // to the URL for the source document of the page containing
+ // the form.
+ if ( !url ) {
+ // Get the @data-url for the page containing the form.
+ url = getClosestBaseUrl( $this );
+ if ( url === documentBase.hrefNoHash ) {
+ // The url we got back matches the document base,
+ // which means the page must be an internal/embedded page,
+ // so default to using the actual document url as a browser
+ // would.
+ url = documentUrl.hrefNoSearch;
+ }
+ }
+
+ url = path.makeUrlAbsolute( url, getClosestBaseUrl($this) );
+
+ //external submits use regular HTTP
+ if( path.isExternal( url ) || target ) {
+ return;
+ }
+
+ $.mobile.changePage(
+ url,
+ {
+ type: type && type.length && type.toLowerCase() || "get",
+ data: $this.serialize(),
+ transition: $this.jqmData( "transition" ),
+ direction: $this.jqmData( "direction" ),
+ reloadPage: true
+ }
+ );
+ event.preventDefault();
+ });
+
+ //add active state on vclick
+ $( document ).bind( "vclick", function( event ) {
+ // if this isn't a left click we don't care. Its important to note
+ // that when the virtual event is generated it will create the which attr
+ if ( event.which > 1 || !$.mobile.linkBindingEnabled ) {
+ return;
+ }
+
+ var link = findClosestLink( event.target );
+
+ // split from the previous return logic to avoid find closest where possible
+ // TODO teach $.mobile.hijackable to operate on raw dom elements so the link wrapping
+ // can be avoided
+ if ( !$(link).jqmHijackable().length ) {
+ return;
+ }
+
+ if ( link ) {
+ if ( path.parseUrl( link.getAttribute( "href" ) || "#" ).hash !== "#" ) {
+ removeActiveLinkClass( true );
+ $activeClickedLink = $( link ).closest( ".ui-btn" ).not( ".ui-disabled" );
+ $activeClickedLink.addClass( $.mobile.activeBtnClass );
+ $( "." + $.mobile.activePageClass + " .ui-btn" ).not( link ).blur();
+
+ // By caching the href value to data and switching the href to a #, we can avoid address bar showing in iOS. The click handler resets the href during its initial steps if this data is present
+ $( link )
+ .jqmData( "href", $( link ).attr( "href" ) )
+ .attr( "href", "#" );
+ }
+ }
+ });
+
+ // click routing - direct to HTTP or Ajax, accordingly
+ $( document ).bind( "click", function( event ) {
+ if( !$.mobile.linkBindingEnabled ){
+ return;
+ }
+
+ var link = findClosestLink( event.target ), $link = $( link ), httpCleanup;
+
+ // If there is no link associated with the click or its not a left
+ // click we want to ignore the click
+ // TODO teach $.mobile.hijackable to operate on raw dom elements so the link wrapping
+ // can be avoided
+ if ( !link || event.which > 1 || !$link.jqmHijackable().length ) {
+ return;
+ }
+
+ //remove active link class if external (then it won't be there if you come back)
+ httpCleanup = function(){
+ window.setTimeout( function() { removeActiveLinkClass( true ); }, 200 );
+ };
+
+ // If there's data cached for the real href value, set the link's href back to it again. This pairs with an address bar workaround from the vclick handler
+ if( $link.jqmData( "href" ) ){
+ $link.attr( "href", $link.jqmData( "href" ) );
+ }
+
+ //if there's a data-rel=back attr, go back in history
+ if( $link.is( ":jqmData(rel='back')" ) ) {
+ window.history.back();
+ return false;
+ }
+
+ var baseUrl = getClosestBaseUrl( $link ),
+
+ //get href, if defined, otherwise default to empty hash
+ href = path.makeUrlAbsolute( $link.attr( "href" ) || "#", baseUrl );
+
+ //if ajax is disabled, exit early
+ if( !$.mobile.ajaxEnabled && !path.isEmbeddedPage( href ) ){
+ httpCleanup();
+ //use default click handling
+ return;
+ }
+
+ // XXX_jblas: Ideally links to application pages should be specified as
+ // an url to the application document with a hash that is either
+ // the site relative path or id to the page. But some of the
+ // internal code that dynamically generates sub-pages for nested
+ // lists and select dialogs, just write a hash in the link they
+ // create. This means the actual URL path is based on whatever
+ // the current value of the base tag is at the time this code
+ // is called. For now we are just assuming that any url with a
+ // hash in it is an application page reference.
+ if ( href.search( "#" ) != -1 ) {
+ href = href.replace( /[^#]*#/, "" );
+ if ( !href ) {
+ //link was an empty hash meant purely
+ //for interaction, so we ignore it.
+ event.preventDefault();
+ return;
+ } else if ( path.isPath( href ) ) {
+ //we have apath so make it the href we want to load.
+ href = path.makeUrlAbsolute( href, baseUrl );
+ } else {
+ //we have a simple id so use the documentUrl as its base.
+ href = path.makeUrlAbsolute( "#" + href, documentUrl.hrefNoHash );
+ }
+ }
+
+ // Should we handle this link, or let the browser deal with it?
+ var useDefaultUrlHandling = $link.is( "[rel='external']" ) || $link.is( ":jqmData(ajax='false')" ) || $link.is( "[target]" ),
+
+ // Some embedded browsers, like the web view in Phone Gap, allow cross-domain XHR
+ // requests if the document doing the request was loaded via the file:// protocol.
+ // This is usually to allow the application to "phone home" and fetch app specific
+ // data. We normally let the browser handle external/cross-domain urls, but if the
+ // allowCrossDomainPages option is true, we will allow cross-domain http/https
+ // requests to go through our page loading logic.
+ isCrossDomainPageLoad = ( $.mobile.allowCrossDomainPages && documentUrl.protocol === "file:" && href.search( /^https?:/ ) != -1 ),
+
+ //check for protocol or rel and its not an embedded page
+ //TODO overlap in logic from isExternal, rel=external check should be
+ // moved into more comprehensive isExternalLink
+ isExternal = useDefaultUrlHandling || ( path.isExternal( href ) && !isCrossDomainPageLoad );
+
+ if( isExternal ) {
+ httpCleanup();
+ //use default click handling
+ return;
+ }
+
+ //use ajax
+ var transition = $link.jqmData( "transition" ),
+ direction = $link.jqmData( "direction" ),
+ reverse = ( direction && direction === "reverse" ) ||
+ // deprecated - remove by 1.0
+ $link.jqmData( "back" ),
+
+ //this may need to be more specific as we use data-rel more
+ role = $link.attr( "data-" + $.mobile.ns + "rel" ) || undefined;
+
+ $.mobile.changePage( href, { transition: transition, reverse: reverse, role: role } );
+ event.preventDefault();
+ });
+
+ //prefetch pages when anchors with data-prefetch are encountered
+ $( document ).delegate( ".ui-page", "pageshow.prefetch", function() {
+ var urls = [];
+ $( this ).find( "a:jqmData(prefetch)" ).each(function(){
+ var $link = $(this),
+ url = $link.attr( "href" );
+
+ if ( url && $.inArray( url, urls ) === -1 ) {
+ urls.push( url );
+
+ $.mobile.loadPage( url, {role: $link.attr("data-" + $.mobile.ns + "rel")} );
+ }
+ });
+ });
+
+ $.mobile._handleHashChange = function( hash ) {
+ //find first page via hash
+ var to = path.stripHash( hash ),
+ //transition is false if it's the first page, undefined otherwise (and may be overridden by default)
+ transition = $.mobile.urlHistory.stack.length === 0 ? "none" : undefined,
+
+ // default options for the changPage calls made after examining the current state
+ // of the page and the hash
+ changePageOptions = {
+ transition: transition,
+ changeHash: false,
+ fromHashChange: true
+ };
+
+ //if listening is disabled (either globally or temporarily), or it's a dialog hash
+ if( !$.mobile.hashListeningEnabled || urlHistory.ignoreNextHashChange ) {
+ urlHistory.ignoreNextHashChange = false;
+ return;
+ }
+
+ // special case for dialogs
+ if( urlHistory.stack.length > 1 && to.indexOf( dialogHashKey ) > -1 ) {
+
+ // If current active page is not a dialog skip the dialog and continue
+ // in the same direction
+ if(!$.mobile.activePage.is( ".ui-dialog" )) {
+ //determine if we're heading forward or backward and continue accordingly past
+ //the current dialog
+ urlHistory.directHashChange({
+ currentUrl: to,
+ isBack: function() { window.history.back(); },
+ isForward: function() { window.history.forward(); }
+ });
+
+ // prevent changePage()
+ return;
+ } else {
+ // if the current active page is a dialog and we're navigating
+ // to a dialog use the dialog objected saved in the stack
+ urlHistory.directHashChange({
+ currentUrl: to,
+
+ // regardless of the direction of the history change
+ // do the following
+ either: function( isBack ) {
+ var active = $.mobile.urlHistory.getActive();
+
+ to = active.pageUrl;
+
+ // make sure to set the role, transition and reversal
+ // as most of this is lost by the domCache cleaning
+ $.extend( changePageOptions, {
+ role: active.role,
+ transition: active.transition,
+ reverse: isBack
+ });
+ }
+ });
+ }
+ }
+
+ //if to is defined, load it
+ if ( to ) {
+ // At this point, 'to' can be one of 3 things, a cached page element from
+ // a history stack entry, an id, or site-relative/absolute URL. If 'to' is
+ // an id, we need to resolve it against the documentBase, not the location.href,
+ // since the hashchange could've been the result of a forward/backward navigation
+ // that crosses from an external page/dialog to an internal page/dialog.
+ to = ( typeof to === "string" && !path.isPath( to ) ) ? ( path.makeUrlAbsolute( '#' + to, documentBase ) ) : to;
+ $.mobile.changePage( to, changePageOptions );
+ } else {
+ //there's no hash, go to the first page in the dom
+ $.mobile.changePage( $.mobile.firstPage, changePageOptions );
+ }
+ };
+
+ //hashchange event handler
+ $window.bind( "hashchange", function( e, triggered ) {
+ $.mobile._handleHashChange( location.hash );
+ });
+
+ //set page min-heights to be device specific
+ $( document ).bind( "pageshow", resetActivePageHeight );
+ $( window ).bind( "throttledresize", resetActivePageHeight );
+
+ };//_registerInternalEvents callback
+
+})( jQuery );
+
+( function( $, window ) {
+ // For now, let's Monkeypatch this onto the end of $.mobile._registerInternalEvents
+ // Scope self to pushStateHandler so we can reference it sanely within the
+ // methods handed off as event handlers
+ var pushStateHandler = {},
+ self = pushStateHandler,
+ $win = $( window ),
+ url = $.mobile.path.parseUrl( location.href );
+
+ $.extend( pushStateHandler, {
+ // TODO move to a path helper, this is rather common functionality
+ initialFilePath: (function() {
+ return url.pathname + url.search;
+ })(),
+
+ initialHref: url.hrefNoHash,
+
+ state: function() {
+ return {
+ hash: location.hash || "#" + self.initialFilePath,
+ title: document.title,
+
+ // persist across refresh
+ initialHref: self.initialHref
+ };
+ },
+
+ resetUIKeys: function( url ) {
+ var dialog = $.mobile.dialogHashKey,
+ subkey = "&" + $.mobile.subPageUrlKey,
+ dialogIndex = url.indexOf( dialog );
+
+ if( dialogIndex > -1 ) {
+ url = url.slice( 0, dialogIndex ) + "#" + url.slice( dialogIndex );
+ } else if( url.indexOf( subkey ) > -1 ) {
+ url = url.split( subkey ).join( "#" + subkey );
+ }
+
+ return url;
+ },
+
+ hashValueAfterReset: function( url ) {
+ var resetUrl = self.resetUIKeys( url );
+ return $.mobile.path.parseUrl( resetUrl ).hash;
+ },
+
+ // TODO sort out a single barrier to hashchange functionality
+ nextHashChangePrevented: function( value ) {
+ $.mobile.urlHistory.ignoreNextHashChange = value;
+ self.onHashChangeDisabled = value;
+ },
+
+ // on hash change we want to clean up the url
+ // NOTE this takes place *after* the vanilla navigation hash change
+ // handling has taken place and set the state of the DOM
+ onHashChange: function( e ) {
+ // disable this hash change
+ if( self.onHashChangeDisabled ){
+ return;
+ }
+
+ var href, state,
+ hash = location.hash,
+ isPath = $.mobile.path.isPath( hash ),
+ resolutionUrl = isPath ? location.href : $.mobile.getDocumentUrl();
+
+ hash = isPath ? hash.replace( "#", "" ) : hash;
+
+
+ // propulate the hash when its not available
+ state = self.state();
+
+ // make the hash abolute with the current href
+ href = $.mobile.path.makeUrlAbsolute( hash, resolutionUrl );
+
+ if ( isPath ) {
+ href = self.resetUIKeys( href );
+ }
+
+ // replace the current url with the new href and store the state
+ // Note that in some cases we might be replacing an url with the
+ // same url. We do this anyways because we need to make sure that
+ // all of our history entries have a state object associated with
+ // them. This allows us to work around the case where window.history.back()
+ // is called to transition from an external page to an embedded page.
+ // In that particular case, a hashchange event is *NOT* generated by the browser.
+ // Ensuring each history entry has a state object means that onPopState()
+ // will always trigger our hashchange callback even when a hashchange event
+ // is not fired.
+ history.replaceState( state, document.title, href );
+ },
+
+ // on popstate (ie back or forward) we need to replace the hash that was there previously
+ // cleaned up by the additional hash handling
+ onPopState: function( e ) {
+ var poppedState = e.originalEvent.state,
+ timeout, fromHash, toHash, hashChanged;
+
+ // if there's no state its not a popstate we care about, eg chrome's initial popstate
+ if( poppedState ) {
+ // the active url in the history stack will still be from the previous state
+ // so we can use it to verify if a hashchange will be fired from the popstate
+ fromHash = self.hashValueAfterReset( $.mobile.urlHistory.getActive().url );
+
+ // the hash stored in the state popped off the stack will be our currenturl or
+ // the url to which we wish to navigate
+ toHash = self.hashValueAfterReset( poppedState.hash.replace("#", "") );
+
+ // if the hashes of the urls are different we must assume that the browser
+ // will fire a hashchange
+ hashChanged = fromHash !== toHash;
+
+ // unlock hash handling once the hashchange caused be the popstate has fired
+ if( hashChanged ) {
+ $win.one( "hashchange.pushstate", function() {
+ self.nextHashChangePrevented( false );
+ });
+ }
+
+ // enable hash handling for the the _handleHashChange call
+ self.nextHashChangePrevented( false );
+
+ // change the page based on the hash
+ $.mobile._handleHashChange( poppedState.hash );
+
+ // only prevent another hash change handling if a hash change will be fired
+ // by the browser
+ if( hashChanged ) {
+ // disable hash handling until one of the above timers fires
+ self.nextHashChangePrevented( true );
+ }
+ }
+ },
+
+ init: function() {
+ $win.bind( "hashchange", self.onHashChange );
+
+ // Handle popstate events the occur through history changes
+ $win.bind( "popstate", self.onPopState );
+
+ // if there's no hash, we need to replacestate for returning to home
+ if ( location.hash === "" ) {
+ history.replaceState( self.state(), document.title, location.href );
+ }
+ }
+ });
+
+ $( function() {
+ if( $.mobile.pushStateEnabled && $.support.pushState ){
+ pushStateHandler.init();
+ }
+ });
+})( jQuery, this );
+
+/*
+* fallback transition for pop in non-3D supporting browsers (which tend to handle complex transitions poorly in general
+*/
+
+(function( $, window, undefined ) {
+
+$.mobile.transitionFallbacks.pop = "fade";
+
+})( jQuery, this );
+
+/*
+* fallback transition for slide in non-3D supporting browsers (which tend to handle complex transitions poorly in general
+*/
+
+(function( $, window, undefined ) {
+
+// Use the simultaneous transition handler for slide transitions
+$.mobile.transitionHandlers.slide = $.mobile.transitionHandlers.simultaneous;
+
+// Set the slide transition's fallback to "fade"
+$.mobile.transitionFallbacks.slide = "fade";
+
+})( jQuery, this );
+
+/*
+* fallback transition for slidedown in non-3D supporting browsers (which tend to handle complex transitions poorly in general
+*/
+
+(function( $, window, undefined ) {
+
+$.mobile.transitionFallbacks.slidedown = "fade";
+
+})( jQuery, this );
+
+/*
+* fallback transition for slideup in non-3D supporting browsers (which tend to handle complex transitions poorly in general
+*/
+
+(function( $, window, undefined ) {
+
+$.mobile.transitionFallbacks.slideup = "fade";
+
+})( jQuery, this );
+
+/*
+* fallback transition for flip in non-3D supporting browsers (which tend to handle complex transitions poorly in general
+*/
+
+(function( $, window, undefined ) {
+
+$.mobile.transitionFallbacks.flip = "fade";
+
+})( jQuery, this );
+
+/*
+* fallback transition for flow in non-3D supporting browsers (which tend to handle complex transitions poorly in general
+*/
+
+(function( $, window, undefined ) {
+
+$.mobile.transitionFallbacks.flow = "fade";
+
+})( jQuery, this );
+
+/*
+* fallback transition for turn in non-3D supporting browsers (which tend to handle complex transitions poorly in general
+*/
+
+(function( $, window, undefined ) {
+
+$.mobile.transitionFallbacks.turn = "fade";
+
+})( jQuery, this );
+
+(function( $, undefined ) {
+
+$.mobile.page.prototype.options.degradeInputs = {
+ color: false,
+ date: false,
+ datetime: false,
+ "datetime-local": false,
+ email: false,
+ month: false,
+ number: false,
+ range: "number",
+ search: "text",
+ tel: false,
+ time: false,
+ url: false,
+ week: false
+};
+
+
+//auto self-init widgets
+$( document ).bind( "pagecreate create", function( e ){
+
+ var page = $.mobile.closestPageData($(e.target)), options;
+
+ if( !page ) {
+ return;
+ }
+
+ options = page.options;
+
+ // degrade inputs to avoid poorly implemented native functionality
+ $( e.target ).find( "input" ).not( page.keepNativeSelector() ).each(function() {
+ var $this = $( this ),
+ type = this.getAttribute( "type" ),
+ optType = options.degradeInputs[ type ] || "text";
+
+ if ( options.degradeInputs[ type ] ) {
+ var html = $( "<div>" ).html( $this.clone() ).html(),
+ // In IE browsers, the type sometimes doesn't exist in the cloned markup, so we replace the closing tag instead
+ hasType = html.indexOf( " type=" ) > -1,
+ findstr = hasType ? /\s+type=["']?\w+['"]?/ : /\/?>/,
+ repstr = " type=\"" + optType + "\" data-" + $.mobile.ns + "type=\"" + type + "\"" + ( hasType ? "" : ">" );
+
+ $this.replaceWith( html.replace( findstr, repstr ) );
+ }
+ });
+
+});
+
+})( jQuery );
+
+(function( $, window, undefined ) {
+
+$.widget( "mobile.dialog", $.mobile.widget, {
+ options: {
+ closeBtnText : "Close",
+ overlayTheme : "a",
+ initSelector : ":jqmData(role='dialog')"
+ },
+ _create: function() {
+ var self = this,
+ $el = this.element,
+ headerCloseButton = $( "<a href='#' data-" + $.mobile.ns + "icon='delete' data-" + $.mobile.ns + "iconpos='notext'>"+ this.options.closeBtnText + "</a>" ),
+ dialogWrap = $("<div/>", {
+ "role" : "dialog",
+ "class" : "ui-dialog-contain ui-corner-all ui-overlay-shadow"
+ });
+
+ $el.addClass( "ui-dialog ui-overlay-" + this.options.overlayTheme );
+
+ // Class the markup for dialog styling
+ // Set aria role
+ $el
+ .wrapInner( dialogWrap )
+ .children()
+ .find( ":jqmData(role='header')" )
+ .prepend( headerCloseButton )
+ .end()
+ .children( ':first-child')
+ .addClass( "ui-corner-top" )
+ .end()
+ .children( ":last-child" )
+ .addClass( "ui-corner-bottom" );
+
+ // this must be an anonymous function so that select menu dialogs can replace
+ // the close method. This is a change from previously just defining data-rel=back
+ // on the button and letting nav handle it
+ //
+ // Use click rather than vclick in order to prevent the possibility of unintentionally
+ // reopening the dialog if the dialog opening item was directly under the close button.
+ headerCloseButton.bind( "click", function() {
+ self.close();
+ });
+
+ /* bind events
+ - clicks and submits should use the closing transition that the dialog opened with
+ unless a data-transition is specified on the link/form
+ - if the click was on the close button, or the link has a data-rel="back" it'll go back in history naturally
+ */
+ $el.bind( "vclick submit", function( event ) {
+ var $target = $( event.target ).closest( event.type === "vclick" ? "a" : "form" ),
+ active;
+
+ if ( $target.length && !$target.jqmData( "transition" ) ) {
+
+ active = $.mobile.urlHistory.getActive() || {};
+
+ $target.attr( "data-" + $.mobile.ns + "transition", ( active.transition || $.mobile.defaultDialogTransition ) )
+ .attr( "data-" + $.mobile.ns + "direction", "reverse" );
+ }
+ })
+ .bind( "pagehide", function( e, ui ) {
+ $( this ).find( "." + $.mobile.activeBtnClass ).removeClass( $.mobile.activeBtnClass );
+ })
+ // Override the theme set by the page plugin on pageshow
+ .bind( "pagebeforeshow", function(){
+ if( self.options.overlayTheme ){
+ self.element
+ .page( "removeContainerBackground" )
+ .page( "setContainerBackground", self.options.overlayTheme );
+ }
+ });
+ },
+
+ // Close method goes back in history
+ close: function() {
+ window.history.back();
+ }
+});
+
+//auto self-init widgets
+$( document ).delegate( $.mobile.dialog.prototype.options.initSelector, "pagecreate", function(){
+ $.mobile.dialog.prototype.enhance( this );
+});
+
+})( jQuery, this );
+
+(function( $, undefined ) {
+
+$.fn.fieldcontain = function( options ) {
+ return this.addClass( "ui-field-contain ui-body ui-br" );
+};
+
+//auto self-init widgets
+$( document ).bind( "pagecreate create", function( e ){
+ $( ":jqmData(role='fieldcontain')", e.target ).jqmEnhanceable().fieldcontain();
+});
+
+})( jQuery );
+
+(function( $, undefined ) {
+
+$.fn.grid = function( options ) {
+ return this.each(function() {
+
+ var $this = $( this ),
+ o = $.extend({
+ grid: null
+ },options),
+ $kids = $this.children(),
+ gridCols = {solo:1, a:2, b:3, c:4, d:5},
+ grid = o.grid,
+ iterator;
+
+ if ( !grid ) {
+ if ( $kids.length <= 5 ) {
+ for ( var letter in gridCols ) {
+ if ( gridCols[ letter ] === $kids.length ) {
+ grid = letter;
+ }
+ }
+ } else {
+ grid = "a";
+ }
+ }
+ iterator = gridCols[grid];
+
+ $this.addClass( "ui-grid-" + grid );
+
+ $kids.filter( ":nth-child(" + iterator + "n+1)" ).addClass( "ui-block-a" );
+
+ if ( iterator > 1 ) {
+ $kids.filter( ":nth-child(" + iterator + "n+2)" ).addClass( "ui-block-b" );
+ }
+ if ( iterator > 2 ) {
+ $kids.filter( ":nth-child(3n+3)" ).addClass( "ui-block-c" );
+ }
+ if ( iterator > 3 ) {
+ $kids.filter( ":nth-child(4n+4)" ).addClass( "ui-block-d" );
+ }
+ if ( iterator > 4 ) {
+ $kids.filter( ":nth-child(5n+5)" ).addClass( "ui-block-e" );
+ }
+ });
+};
+})( jQuery );
+
+(function( $, undefined ) {
+
+$( document ).bind( "pagecreate create", function( e ){
+ $( ":jqmData(role='nojs')", e.target ).addClass( "ui-nojs" );
+
+});
+
+})( jQuery );
+
+( function( $, undefined ) {
+
+$.fn.buttonMarkup = function( options ) {
+ var $workingSet = this;
+
+ // Enforce options to be of type string
+ options = ( options && ( $.type( options ) == "object" ) )? options : {};
+ for ( var i = 0; i < $workingSet.length; i++ ) {
+ var el = $workingSet.eq( i ),
+ e = el[ 0 ],
+ o = $.extend( {}, $.fn.buttonMarkup.defaults, {
+ icon: options.icon !== undefined ? options.icon : el.jqmData( "icon" ),
+ iconpos: options.iconpos !== undefined ? options.iconpos : el.jqmData( "iconpos" ),
+ theme: options.theme !== undefined ? options.theme : el.jqmData( "theme" ) || $.mobile.getInheritedTheme( el, "c" ),
+ inline: options.inline !== undefined ? options.inline : el.jqmData( "inline" ),
+ shadow: options.shadow !== undefined ? options.shadow : el.jqmData( "shadow" ),
+ corners: options.corners !== undefined ? options.corners : el.jqmData( "corners" ),
+ iconshadow: options.iconshadow !== undefined ? options.iconshadow : el.jqmData( "iconshadow" ),
+ mini: options.mini !== undefined ? options.mini : el.jqmData( "mini" )
+ }, options ),
+
+ // Classes Defined
+ innerClass = "ui-btn-inner",
+ textClass = "ui-btn-text",
+ buttonClass, iconClass,
+ // Button inner markup
+ buttonInner,
+ buttonText,
+ buttonIcon,
+ buttonElements;
+
+ $.each(o, function(key, value) {
+ e.setAttribute( "data-" + $.mobile.ns + key, value );
+ el.jqmData(key, value);
+ });
+
+ // Check if this element is already enhanced
+ buttonElements = $.data(((e.tagName === "INPUT" || e.tagName === "BUTTON") ? e.parentNode : e), "buttonElements");
+
+ if (buttonElements) {
+ e = buttonElements.outer;
+ el = $(e);
+ buttonInner = buttonElements.inner;
+ buttonText = buttonElements.text;
+ // We will recreate this icon below
+ $(buttonElements.icon).remove();
+ buttonElements.icon = null;
+ }
+ else {
+ buttonInner = document.createElement( o.wrapperEls );
+ buttonText = document.createElement( o.wrapperEls );
+ }
+ buttonIcon = o.icon ? document.createElement( "span" ) : null;
+
+ if ( attachEvents && !buttonElements) {
+ attachEvents();
+ }
+
+ // if not, try to find closest theme container
+ if ( !o.theme ) {
+ o.theme = $.mobile.getInheritedTheme( el, "c" );
+ }
+
+ buttonClass = "ui-btn ui-btn-up-" + o.theme;
+ buttonClass += o.inline ? " ui-btn-inline" : "";
+ buttonClass += o.shadow ? " ui-shadow" : "";
+ buttonClass += o.corners ? " ui-btn-corner-all" : "";
+
+ if ( o.mini !== undefined ) {
+ // Used to control styling in headers/footers, where buttons default to `mini` style.
+ buttonClass += o.mini ? " ui-mini" : " ui-fullsize";
+ }
+
+ if ( o.inline !== undefined ) {
+ // Used to control styling in headers/footers, where buttons default to `mini` style.
+ buttonClass += o.inline === false ? " ui-btn-block" : " ui-btn-inline";
+ }
+
+
+ if ( o.icon ) {
+ o.icon = "ui-icon-" + o.icon;
+ o.iconpos = o.iconpos || "left";
+
+ iconClass = "ui-icon " + o.icon;
+
+ if ( o.iconshadow ) {
+ iconClass += " ui-icon-shadow";
+ }
+ }
+
+ if ( o.iconpos ) {
+ buttonClass += " ui-btn-icon-" + o.iconpos;
+
+ if ( o.iconpos == "notext" && !el.attr( "title" ) ) {
+ el.attr( "title", el.getEncodedText() );
+ }
+ }
+
+ innerClass += o.corners ? " ui-btn-corner-all" : "";
+
+ if ( o.iconpos && o.iconpos === "notext" && !el.attr( "title" ) ) {
+ el.attr( "title", el.getEncodedText() );
+ }
+
+ if ( buttonElements ) {
+ el.removeClass( buttonElements.bcls || "" );
+ }
+ el.removeClass( "ui-link" ).addClass( buttonClass );
+
+ buttonInner.className = innerClass;
+
+ buttonText.className = textClass;
+ if ( !buttonElements ) {
+ buttonInner.appendChild( buttonText );
+ }
+ if ( buttonIcon ) {
+ buttonIcon.className = iconClass;
+ if ( !(buttonElements && buttonElements.icon) ) {
+ buttonIcon.appendChild( document.createTextNode("\u00a0") );
+ buttonInner.appendChild( buttonIcon );
+ }
+ }
+
+ while ( e.firstChild && !buttonElements) {
+ buttonText.appendChild( e.firstChild );
+ }
+
+ if ( !buttonElements ) {
+ e.appendChild( buttonInner );
+ }
+
+ // Assign a structure containing the elements of this button to the elements of this button. This
+ // will allow us to recognize this as an already-enhanced button in future calls to buttonMarkup().
+ buttonElements = {
+ bcls : buttonClass,
+ outer : e,
+ inner : buttonInner,
+ text : buttonText,
+ icon : buttonIcon
+ };
+
+ $.data(e, 'buttonElements', buttonElements);
+ $.data(buttonInner, 'buttonElements', buttonElements);
+ $.data(buttonText, 'buttonElements', buttonElements);
+ if (buttonIcon) {
+ $.data(buttonIcon, 'buttonElements', buttonElements);
+ }
+ }
+
+ return this;
+};
+
+$.fn.buttonMarkup.defaults = {
+ corners: true,
+ shadow: true,
+ iconshadow: true,
+ wrapperEls: "span"
+};
+
+function closestEnabledButton( element ) {
+ var cname;
+
+ while ( element ) {
+ // Note that we check for typeof className below because the element we
+ // handed could be in an SVG DOM where className on SVG elements is defined to
+ // be of a different type (SVGAnimatedString). We only operate on HTML DOM
+ // elements, so we look for plain "string".
+ cname = ( typeof element.className === 'string' ) && (element.className + ' ');
+ if ( cname && cname.indexOf("ui-btn ") > -1 && cname.indexOf("ui-disabled ") < 0 ) {
+ break;
+ }
+
+ element = element.parentNode;
+ }
+
+ return element;
+}
+
+var attachEvents = function() {
+ var hoverDelay = $.mobile.buttonMarkup.hoverDelay, hov, foc;
+
+ $( document ).bind( {
+ "vmousedown vmousecancel vmouseup vmouseover vmouseout focus blur scrollstart": function( event ) {
+ var theme,
+ $btn = $( closestEnabledButton( event.target ) ),
+ evt = event.type;
+
+ if ( $btn.length ) {
+ theme = $btn.attr( "data-" + $.mobile.ns + "theme" );
+
+ if ( evt === "vmousedown" ) {
+ if ( $.support.touch ) {
+ hov = setTimeout(function() {
+ $btn.removeClass( "ui-btn-up-" + theme ).addClass( "ui-btn-down-" + theme );
+ }, hoverDelay );
+ } else {
+ $btn.removeClass( "ui-btn-up-" + theme ).addClass( "ui-btn-down-" + theme );
+ }
+ } else if ( evt === "vmousecancel" || evt === "vmouseup" ) {
+ $btn.removeClass( "ui-btn-down-" + theme ).addClass( "ui-btn-up-" + theme );
+ } else if ( evt === "vmouseover" || evt === "focus" ) {
+ if ( $.support.touch ) {
+ foc = setTimeout(function() {
+ $btn.removeClass( "ui-btn-up-" + theme ).addClass( "ui-btn-hover-" + theme );
+ }, hoverDelay );
+ } else {
+ $btn.removeClass( "ui-btn-up-" + theme ).addClass( "ui-btn-hover-" + theme );
+ }
+ } else if ( evt === "vmouseout" || evt === "blur" || evt === "scrollstart" ) {
+ $btn.removeClass( "ui-btn-hover-" + theme + " ui-btn-down-" + theme ).addClass( "ui-btn-up-" + theme );
+ if ( hov ) {
+ clearTimeout( hov );
+ }
+ if ( foc ) {
+ clearTimeout( foc );
+ }
+ }
+ }
+ },
+ "focusin focus": function( event ){
+ $( closestEnabledButton( event.target ) ).addClass( $.mobile.focusClass );
+ },
+ "focusout blur": function( event ){
+ $( closestEnabledButton( event.target ) ).removeClass( $.mobile.focusClass );
+ }
+ });
+
+ attachEvents = null;
+};
+
+//links in bars, or those with data-role become buttons
+//auto self-init widgets
+$( document ).bind( "pagecreate create", function( e ){
+
+ $( ":jqmData(role='button'), .ui-bar > a, .ui-header > a, .ui-footer > a, .ui-bar > :jqmData(role='controlgroup') > a", e.target )
+ .not( ".ui-btn, :jqmData(role='none'), :jqmData(role='nojs')" )
+ .buttonMarkup();
+});
+
+})( jQuery );
+
+
+(function( $, undefined ) {
+
+$.mobile.page.prototype.options.backBtnText = "Back";
+$.mobile.page.prototype.options.addBackBtn = false;
+$.mobile.page.prototype.options.backBtnTheme = null;
+$.mobile.page.prototype.options.headerTheme = "a";
+$.mobile.page.prototype.options.footerTheme = "a";
+$.mobile.page.prototype.options.contentTheme = null;
+
+$( document ).delegate( ":jqmData(role='page'), :jqmData(role='dialog')", "pagecreate", function( e ) {
+
+ var $page = $( this ),
+ o = $page.data( "page" ).options,
+ pageRole = $page.jqmData( "role" ),
+ pageTheme = o.theme;
+
+ $( ":jqmData(role='header'), :jqmData(role='footer'), :jqmData(role='content')", this )
+ .jqmEnhanceable()
+ .each(function() {
+
+ var $this = $( this ),
+ role = $this.jqmData( "role" ),
+ theme = $this.jqmData( "theme" ),
+ contentTheme = theme || o.contentTheme || ( pageRole === "dialog" && pageTheme ),
+ $headeranchors,
+ leftbtn,
+ rightbtn,
+ backBtn;
+
+ $this.addClass( "ui-" + role );
+
+ //apply theming and markup modifications to page,header,content,footer
+ if ( role === "header" || role === "footer" ) {
+
+ var thisTheme = theme || ( role === "header" ? o.headerTheme : o.footerTheme ) || pageTheme;
+
+ $this
+ //add theme class
+ .addClass( "ui-bar-" + thisTheme )
+ // Add ARIA role
+ .attr( "role", role === "header" ? "banner" : "contentinfo" );
+
+ if( role === "header") {
+ // Right,left buttons
+ $headeranchors = $this.children( "a" );
+ leftbtn = $headeranchors.hasClass( "ui-btn-left" );
+ rightbtn = $headeranchors.hasClass( "ui-btn-right" );
+
+ leftbtn = leftbtn || $headeranchors.eq( 0 ).not( ".ui-btn-right" ).addClass( "ui-btn-left" ).length;
+
+ rightbtn = rightbtn || $headeranchors.eq( 1 ).addClass( "ui-btn-right" ).length;
+ }
+
+ // Auto-add back btn on pages beyond first view
+ if ( o.addBackBtn &&
+ role === "header" &&
+ $( ".ui-page" ).length > 1 &&
+ $page.jqmData( "url" ) !== $.mobile.path.stripHash( location.hash ) &&
+ !leftbtn ) {
+
+ backBtn = $( "<a href='#' class='ui-btn-left' data-"+ $.mobile.ns +"rel='back' data-"+ $.mobile.ns +"icon='arrow-l'>"+ o.backBtnText +"</a>" )
+ // If theme is provided, override default inheritance
+ .attr( "data-"+ $.mobile.ns +"theme", o.backBtnTheme || thisTheme )
+ .prependTo( $this );
+ }
+
+ // Page title
+ $this.children( "h1, h2, h3, h4, h5, h6" )
+ .addClass( "ui-title" )
+ // Regardless of h element number in src, it becomes h1 for the enhanced page
+ .attr({
+ "role": "heading",
+ "aria-level": "1"
+ });
+
+ } else if ( role === "content" ) {
+ if ( contentTheme ) {
+ $this.addClass( "ui-body-" + ( contentTheme ) );
+ }
+
+ // Add ARIA role
+ $this.attr( "role", "main" );
+ }
+ });
+});
+
+})( jQuery );
+
+(function( $, undefined ) {
+
+$.widget( "mobile.collapsible", $.mobile.widget, {
+ options: {
+ expandCueText: " click to expand contents",
+ collapseCueText: " click to collapse contents",
+ collapsed: true,
+ heading: "h1,h2,h3,h4,h5,h6,legend",
+ theme: null,
+ contentTheme: null,
+ iconTheme: "d",
+ mini: false,
+ initSelector: ":jqmData(role='collapsible')"
+ },
+ _create: function() {
+
+ var $el = this.element,
+ o = this.options,
+ collapsible = $el.addClass( "ui-collapsible" ),
+ collapsibleHeading = $el.children( o.heading ).first(),
+ collapsibleContent = collapsible.wrapInner( "<div class='ui-collapsible-content'></div>" ).find( ".ui-collapsible-content" ),
+ collapsibleSet = $el.closest( ":jqmData(role='collapsible-set')" ).addClass( "ui-collapsible-set" );
+
+ // Replace collapsibleHeading if it's a legend
+ if ( collapsibleHeading.is( "legend" ) ) {
+ collapsibleHeading = $( "<div role='heading'>"+ collapsibleHeading.html() +"</div>" ).insertBefore( collapsibleHeading );
+ collapsibleHeading.next().remove();
+ }
+
+ // If we are in a collapsible set
+ if ( collapsibleSet.length ) {
+ // Inherit the theme from collapsible-set
+ if ( !o.theme ) {
+ o.theme = collapsibleSet.jqmData("theme") || $.mobile.getInheritedTheme( collapsibleSet, "c" );
+ }
+ // Inherit the content-theme from collapsible-set
+ if ( !o.contentTheme ) {
+ o.contentTheme = collapsibleSet.jqmData( "content-theme" );
+ }
+
+ // Gets the preference icon position in the set
+ if ( !o.iconPos ) {
+ o.iconPos = collapsibleSet.jqmData( "iconpos" );
+ }
+
+ if( !o.mini ) {
+ o.mini = collapsibleSet.jqmData( "mini" );
+ }
+ }
+ collapsibleContent.addClass( ( o.contentTheme ) ? ( "ui-body-" + o.contentTheme ) : "");
+
+ collapsibleHeading
+ //drop heading in before content
+ .insertBefore( collapsibleContent )
+ //modify markup & attributes
+ .addClass( "ui-collapsible-heading" )
+ .append( "<span class='ui-collapsible-heading-status'></span>" )
+ .wrapInner( "<a href='#' class='ui-collapsible-heading-toggle'></a>" )
+ .find( "a" )
+ .first()
+ .buttonMarkup({
+ shadow: false,
+ corners: false,
+ iconpos: $el.jqmData( "iconpos" ) || o.iconPos || "left",
+ icon: "plus",
+ mini: o.mini,
+ theme: o.theme
+ })
+ .add( ".ui-btn-inner", $el )
+ .addClass( "ui-corner-top ui-corner-bottom" );
+
+ //events
+ collapsible
+ .bind( "expand collapse", function( event ) {
+ if ( !event.isDefaultPrevented() ) {
+
+ event.preventDefault();
+
+ var $this = $( this ),
+ isCollapse = ( event.type === "collapse" ),
+ contentTheme = o.contentTheme;
+
+ collapsibleHeading
+ .toggleClass( "ui-collapsible-heading-collapsed", isCollapse)
+ .find( ".ui-collapsible-heading-status" )
+ .text( isCollapse ? o.expandCueText : o.collapseCueText )
+ .end()
+ .find( ".ui-icon" )
+ .toggleClass( "ui-icon-minus", !isCollapse )
+ .toggleClass( "ui-icon-plus", isCollapse );
+
+ $this.toggleClass( "ui-collapsible-collapsed", isCollapse );
+ collapsibleContent.toggleClass( "ui-collapsible-content-collapsed", isCollapse ).attr( "aria-hidden", isCollapse );
+
+ if ( contentTheme && ( !collapsibleSet.length || collapsible.jqmData( "collapsible-last" ) ) ) {
+ collapsibleHeading
+ .find( "a" ).first().add( collapsibleHeading.find( ".ui-btn-inner" ) )
+ .toggleClass( "ui-corner-bottom", isCollapse );
+ collapsibleContent.toggleClass( "ui-corner-bottom", !isCollapse );
+ }
+ collapsibleContent.trigger( "updatelayout" );
+ }
+ })
+ .trigger( o.collapsed ? "collapse" : "expand" );
+
+ collapsibleHeading
+ .bind( "click", function( event ) {
+
+ var type = collapsibleHeading.is( ".ui-collapsible-heading-collapsed" ) ?
+ "expand" : "collapse";
+
+ collapsible.trigger( type );
+
+ event.preventDefault();
+ });
+ }
+});
+
+//auto self-init widgets
+$( document ).bind( "pagecreate create", function( e ){
+ $.mobile.collapsible.prototype.enhanceWithin( e.target );
+});
+
+})( jQuery );
+
+(function( $, undefined ) {
+
+$.widget( "mobile.collapsibleset", $.mobile.widget, {
+ options: {
+ initSelector: ":jqmData(role='collapsible-set')"
+ },
+ _create: function() {
+ var $el = this.element.addClass( "ui-collapsible-set" ),
+ o = this.options;
+
+ // Inherit the theme from collapsible-set
+ if ( !o.theme ) {
+ o.theme = $.mobile.getInheritedTheme( $el, "c" );
+ }
+ // Inherit the content-theme from collapsible-set
+ if ( !o.contentTheme ) {
+ o.contentTheme = $el.jqmData( "content-theme" );
+ }
+
+ if ( !o.corners ) {
+ o.corners = $el.jqmData( "corners" ) === undefined ? true : false;
+ }
+
+ // Initialize the collapsible set if it's not already initialized
+ if ( !$el.jqmData( "collapsiblebound" ) ) {
+ $el
+ .jqmData( "collapsiblebound", true )
+ .bind( "expand collapse", function( event ) {
+ var isCollapse = ( event.type === "collapse" ),
+ collapsible = $( event.target ).closest( ".ui-collapsible" ),
+ widget = collapsible.data( "collapsible" ),
+ contentTheme = widget.options.contentTheme;
+ if ( contentTheme && collapsible.jqmData( "collapsible-last" ) ) {
+ collapsible.find( widget.options.heading ).first()
+ .find( "a" ).first()
+ .add( ".ui-btn-inner" )
+ .toggleClass( "ui-corner-bottom", isCollapse );
+ collapsible.find( ".ui-collapsible-content" ).toggleClass( "ui-corner-bottom", !isCollapse );
+ }
+ })
+ .bind( "expand", function( event ) {
+ $( event.target )
+ .closest( ".ui-collapsible" )
+ .siblings( ".ui-collapsible" )
+ .trigger( "collapse" );
+ });
+ }
+ },
+
+ _init: function() {
+ this.refresh();
+ },
+
+ refresh: function() {
+ var $el = this.element,
+ o = this.options,
+ collapsiblesInSet = $el.children( ":jqmData(role='collapsible')" );
+
+ $.mobile.collapsible.prototype.enhance( collapsiblesInSet.not( ".ui-collapsible" ) );
+
+ // clean up borders
+ collapsiblesInSet.each( function() {
+ $( this ).find( $.mobile.collapsible.prototype.options.heading )
+ .find( "a" ).first()
+ .add( ".ui-btn-inner" )
+ .removeClass( "ui-corner-top ui-corner-bottom" );
+ });
+
+ collapsiblesInSet.first()
+ .find( "a" )
+ .first()
+ .addClass( o.corners ? "ui-corner-top" : "" )
+ .find( ".ui-btn-inner" )
+ .addClass( "ui-corner-top" );
+
+ collapsiblesInSet.last()
+ .jqmData( "collapsible-last", true )
+ .find( "a" )
+ .first()
+ .addClass( o.corners ? "ui-corner-bottom" : "" )
+ .find( ".ui-btn-inner" )
+ .addClass( "ui-corner-bottom" );
+ }
+});
+
+//auto self-init widgets
+$( document ).bind( "pagecreate create", function( e ){
+ $.mobile.collapsibleset.prototype.enhanceWithin( e.target );
+});
+
+})( jQuery );
+
+(function( $, undefined ) {
+
+$.widget( "mobile.navbar", $.mobile.widget, {
+ options: {
+ iconpos: "top",
+ grid: null,
+ initSelector: ":jqmData(role='navbar')"
+ },
+
+ _create: function(){
+
+ var $navbar = this.element,
+ $navbtns = $navbar.find( "a" ),
+ iconpos = $navbtns.filter( ":jqmData(icon)" ).length ?
+ this.options.iconpos : undefined;
+
+ $navbar.addClass( "ui-navbar" )
+ .attr( "role","navigation" )
+ .find( "ul" )
+ .jqmEnhanceable()
+ .grid({ grid: this.options.grid });
+
+ if ( !iconpos ) {
+ $navbar.addClass( "ui-navbar-noicons" );
+ }
+
+ $navbtns.buttonMarkup({
+ corners: false,
+ shadow: false,
+ inline: true,
+ iconpos: iconpos
+ });
+
+ $navbar.delegate( "a", "vclick", function( event ) {
+ if( !$(event.target).hasClass("ui-disabled") ) {
+ $navbtns.removeClass( $.mobile.activeBtnClass );
+ $( this ).addClass( $.mobile.activeBtnClass );
+ }
+ });
+
+ // Buttons in the navbar with ui-state-persist class should regain their active state before page show
+ $navbar.closest( ".ui-page" ).bind( "pagebeforeshow", function() {
+ $navbtns.filter( ".ui-state-persist" ).addClass( $.mobile.activeBtnClass );
+ });
+ }
+});
+
+//auto self-init widgets
+$( document ).bind( "pagecreate create", function( e ){
+ $.mobile.navbar.prototype.enhanceWithin( e.target );
+});
+
+})( jQuery );
+
+(function( $, undefined ) {
+
+//Keeps track of the number of lists per page UID
+//This allows support for multiple nested list in the same page
+//https://github.com/jquery/jquery-mobile/issues/1617
+var listCountPerPage = {};
+
+$.widget( "mobile.listview", $.mobile.widget, {
+
+ options: {
+ theme: null,
+ countTheme: "c",
+ headerTheme: "b",
+ dividerTheme: "b",
+ splitIcon: "arrow-r",
+ splitTheme: "b",
+ mini: false,
+ inset: false,
+ initSelector: ":jqmData(role='listview')"
+ },
+
+ _create: function() {
+ var t = this,
+ listviewClasses = "";
+
+ listviewClasses += t.options.inset ? " ui-listview-inset ui-corner-all ui-shadow " : "";
+ listviewClasses += t.element.jqmData( "mini" ) || t.options.mini === true ? " ui-mini" : "";
+
+ // create listview markup
+ t.element.addClass(function( i, orig ) {
+ return orig + " ui-listview " + listviewClasses;
+ });
+
+ t.refresh( true );
+ },
+
+ _removeCorners: function( li, which ) {
+ var top = "ui-corner-top ui-corner-tr ui-corner-tl",
+ bot = "ui-corner-bottom ui-corner-br ui-corner-bl";
+
+ li = li.add( li.find( ".ui-btn-inner, .ui-li-link-alt, .ui-li-thumb" ) );
+
+ if ( which === "top" ) {
+ li.removeClass( top );
+ } else if ( which === "bottom" ) {
+ li.removeClass( bot );
+ } else {
+ li.removeClass( top + " " + bot );
+ }
+ },
+
+ _refreshCorners: function( create ) {
+ var $li,
+ $visibleli,
+ $topli,
+ $bottomli;
+
+ if ( this.options.inset ) {
+ $li = this.element.children( "li" );
+ // at create time the li are not visible yet so we need to rely on .ui-screen-hidden
+ $visibleli = create?$li.not( ".ui-screen-hidden" ):$li.filter( ":visible" );
+
+ this._removeCorners( $li );
+
+ // Select the first visible li element
+ $topli = $visibleli.first()
+ .addClass( "ui-corner-top" );
+
+ $topli.add( $topli.find( ".ui-btn-inner" )
+ .not( ".ui-li-link-alt span:first-child" ) )
+ .addClass( "ui-corner-top" )
+ .end()
+ .find( ".ui-li-link-alt, .ui-li-link-alt span:first-child" )
+ .addClass( "ui-corner-tr" )
+ .end()
+ .find( ".ui-li-thumb" )
+ .not(".ui-li-icon")
+ .addClass( "ui-corner-tl" );
+
+ // Select the last visible li element
+ $bottomli = $visibleli.last()
+ .addClass( "ui-corner-bottom" );
+
+ $bottomli.add( $bottomli.find( ".ui-btn-inner" ) )
+ .find( ".ui-li-link-alt" )
+ .addClass( "ui-corner-br" )
+ .end()
+ .find( ".ui-li-thumb" )
+ .not(".ui-li-icon")
+ .addClass( "ui-corner-bl" );
+ }
+ if ( !create ) {
+ this.element.trigger( "updatelayout" );
+ }
+ },
+
+ // This is a generic utility method for finding the first
+ // node with a given nodeName. It uses basic DOM traversal
+ // to be fast and is meant to be a substitute for simple
+ // $.fn.closest() and $.fn.children() calls on a single
+ // element. Note that callers must pass both the lowerCase
+ // and upperCase version of the nodeName they are looking for.
+ // The main reason for this is that this function will be
+ // called many times and we want to avoid having to lowercase
+ // the nodeName from the element every time to ensure we have
+ // a match. Note that this function lives here for now, but may
+ // be moved into $.mobile if other components need a similar method.
+ _findFirstElementByTagName: function( ele, nextProp, lcName, ucName )
+ {
+ var dict = {};
+ dict[ lcName ] = dict[ ucName ] = true;
+ while ( ele ) {
+ if ( dict[ ele.nodeName ] ) {
+ return ele;
+ }
+ ele = ele[ nextProp ];
+ }
+ return null;
+ },
+ _getChildrenByTagName: function( ele, lcName, ucName )
+ {
+ var results = [],
+ dict = {};
+ dict[ lcName ] = dict[ ucName ] = true;
+ ele = ele.firstChild;
+ while ( ele ) {
+ if ( dict[ ele.nodeName ] ) {
+ results.push( ele );
+ }
+ ele = ele.nextSibling;
+ }
+ return $( results );
+ },
+
+ _addThumbClasses: function( containers )
+ {
+ var i, img, len = containers.length;
+ for ( i = 0; i < len; i++ ) {
+ img = $( this._findFirstElementByTagName( containers[ i ].firstChild, "nextSibling", "img", "IMG" ) );
+ if ( img.length ) {
+ img.addClass( "ui-li-thumb" );
+ $( this._findFirstElementByTagName( img[ 0 ].parentNode, "parentNode", "li", "LI" ) ).addClass( img.is( ".ui-li-icon" ) ? "ui-li-has-icon" : "ui-li-has-thumb" );
+ }
+ }
+ },
+
+ refresh: function( create ) {
+ this.parentPage = this.element.closest( ".ui-page" );
+ this._createSubPages();
+
+ var o = this.options,
+ $list = this.element,
+ self = this,
+ dividertheme = $list.jqmData( "dividertheme" ) || o.dividerTheme,
+ listsplittheme = $list.jqmData( "splittheme" ),
+ listspliticon = $list.jqmData( "spliticon" ),
+ li = this._getChildrenByTagName( $list[ 0 ], "li", "LI" ),
+ counter = $.support.cssPseudoElement || !$.nodeName( $list[ 0 ], "ol" ) ? 0 : 1,
+ itemClassDict = {},
+ item, itemClass, itemTheme,
+ a, last, splittheme, countParent, icon, imgParents, img, linkIcon;
+
+ if ( counter ) {
+ $list.find( ".ui-li-dec" ).remove();
+ }
+
+ if ( !o.theme ) {
+ o.theme = $.mobile.getInheritedTheme( this.element, "c" );
+ }
+
+ for ( var pos = 0, numli = li.length; pos < numli; pos++ ) {
+ item = li.eq( pos );
+ itemClass = "ui-li";
+
+ // If we're creating the element, we update it regardless
+ if ( create || !item.hasClass( "ui-li" ) ) {
+ itemTheme = item.jqmData("theme") || o.theme;
+ a = this._getChildrenByTagName( item[ 0 ], "a", "A" );
+
+ if ( a.length ) {
+ icon = item.jqmData("icon");
+
+ item.buttonMarkup({
+ wrapperEls: "div",
+ shadow: false,
+ corners: false,
+ iconpos: "right",
+ icon: a.length > 1 || icon === false ? false : icon || "arrow-r",
+ theme: itemTheme
+ });
+
+ if ( ( icon != false ) && ( a.length == 1 ) ) {
+ item.addClass( "ui-li-has-arrow" );
+ }
+
+ a.first().removeClass( "ui-link" ).addClass( "ui-link-inherit" );
+
+ if ( a.length > 1 ) {
+ itemClass += " ui-li-has-alt";
+
+ last = a.last();
+ splittheme = listsplittheme || last.jqmData( "theme" ) || o.splitTheme;
+ linkIcon = last.jqmData("icon");
+
+ last.appendTo(item)
+ .attr( "title", last.getEncodedText() )
+ .addClass( "ui-li-link-alt" )
+ .empty()
+ .buttonMarkup({
+ shadow: false,
+ corners: false,
+ theme: itemTheme,
+ icon: false,
+ iconpos: false
+ })
+ .find( ".ui-btn-inner" )
+ .append(
+ $( document.createElement( "span" ) ).buttonMarkup({
+ shadow: true,
+ corners: true,
+ theme: splittheme,
+ iconpos: "notext",
+ // link icon overrides list item icon overrides ul element overrides options
+ icon: linkIcon || icon || listspliticon || o.splitIcon
+ })
+ );
+ }
+ } else if ( item.jqmData( "role" ) === "list-divider" ) {
+
+ itemClass += " ui-li-divider ui-bar-" + dividertheme;
+ item.attr( "role", "heading" );
+
+ //reset counter when a divider heading is encountered
+ if ( counter ) {
+ counter = 1;
+ }
+
+ } else {
+ itemClass += " ui-li-static ui-body-" + itemTheme;
+ }
+ }
+
+ if ( counter && itemClass.indexOf( "ui-li-divider" ) < 0 ) {
+ countParent = item.is( ".ui-li-static:first" ) ? item : item.find( ".ui-link-inherit" );
+
+ countParent.addClass( "ui-li-jsnumbering" )
+ .prepend( "<span class='ui-li-dec'>" + (counter++) + ". </span>" );
+ }
+
+ // Instead of setting item class directly on the list item and its
+ // btn-inner at this point in time, push the item into a dictionary
+ // that tells us what class to set on it so we can do this after this
+ // processing loop is finished.
+
+ if ( !itemClassDict[ itemClass ] ) {
+ itemClassDict[ itemClass ] = [];
+ }
+
+ itemClassDict[ itemClass ].push( item[ 0 ] );
+ }
+
+ // Set the appropriate listview item classes on each list item
+ // and their btn-inner elements. The main reason we didn't do this
+ // in the for-loop above is because we can eliminate per-item function overhead
+ // by calling addClass() and children() once or twice afterwards. This
+ // can give us a significant boost on platforms like WP7.5.
+
+ for ( itemClass in itemClassDict ) {
+ $( itemClassDict[ itemClass ] ).addClass( itemClass ).children( ".ui-btn-inner" ).addClass( itemClass );
+ }
+
+ $list.find( "h1, h2, h3, h4, h5, h6" ).addClass( "ui-li-heading" )
+ .end()
+
+ .find( "p, dl" ).addClass( "ui-li-desc" )
+ .end()
+
+ .find( ".ui-li-aside" ).each(function() {
+ var $this = $(this);
+ $this.prependTo( $this.parent() ); //shift aside to front for css float
+ })
+ .end()
+
+ .find( ".ui-li-count" ).each( function() {
+ $( this ).closest( "li" ).addClass( "ui-li-has-count" );
+ }).addClass( "ui-btn-up-" + ( $list.jqmData( "counttheme" ) || this.options.countTheme) + " ui-btn-corner-all" );
+
+ // The idea here is to look at the first image in the list item
+ // itself, and any .ui-link-inherit element it may contain, so we
+ // can place the appropriate classes on the image and list item.
+ // Note that we used to use something like:
+ //
+ // li.find(">img:eq(0), .ui-link-inherit>img:eq(0)").each( ... );
+ //
+ // But executing a find() like that on Windows Phone 7.5 took a
+ // really long time. Walking things manually with the code below
+ // allows the 400 listview item page to load in about 3 seconds as
+ // opposed to 30 seconds.
+
+ this._addThumbClasses( li );
+ this._addThumbClasses( $list.find( ".ui-link-inherit" ) );
+
+ this._refreshCorners( create );
+ },
+
+ //create a string for ID/subpage url creation
+ _idStringEscape: function( str ) {
+ return str.replace(/[^a-zA-Z0-9]/g, '-');
+ },
+
+ _createSubPages: function() {
+ var parentList = this.element,
+ parentPage = parentList.closest( ".ui-page" ),
+ parentUrl = parentPage.jqmData( "url" ),
+ parentId = parentUrl || parentPage[ 0 ][ $.expando ],
+ parentListId = parentList.attr( "id" ),
+ o = this.options,
+ dns = "data-" + $.mobile.ns,
+ self = this,
+ persistentFooterID = parentPage.find( ":jqmData(role='footer')" ).jqmData( "id" ),
+ hasSubPages;
+
+ if ( typeof listCountPerPage[ parentId ] === "undefined" ) {
+ listCountPerPage[ parentId ] = -1;
+ }
+
+ parentListId = parentListId || ++listCountPerPage[ parentId ];
+
+ $( parentList.find( "li>ul, li>ol" ).toArray().reverse() ).each(function( i ) {
+ var self = this,
+ list = $( this ),
+ listId = list.attr( "id" ) || parentListId + "-" + i,
+ parent = list.parent(),
+ nodeEls = $( list.prevAll().toArray().reverse() ),
+ nodeEls = nodeEls.length ? nodeEls : $( "<span>" + $.trim(parent.contents()[ 0 ].nodeValue) + "</span>" ),
+ title = nodeEls.first().getEncodedText(),//url limits to first 30 chars of text
+ id = ( parentUrl || "" ) + "&" + $.mobile.subPageUrlKey + "=" + listId,
+ theme = list.jqmData( "theme" ) || o.theme,
+ countTheme = list.jqmData( "counttheme" ) || parentList.jqmData( "counttheme" ) || o.countTheme,
+ newPage, anchor;
+
+ //define hasSubPages for use in later removal
+ hasSubPages = true;
+
+ newPage = list.detach()
+ .wrap( "<div " + dns + "role='page' " + dns + "url='" + id + "' " + dns + "theme='" + theme + "' " + dns + "count-theme='" + countTheme + "'><div " + dns + "role='content'></div></div>" )
+ .parent()
+ .before( "<div " + dns + "role='header' " + dns + "theme='" + o.headerTheme + "'><div class='ui-title'>" + title + "</div></div>" )
+ .after( persistentFooterID ? $( "<div " + dns + "role='footer' " + dns + "id='"+ persistentFooterID +"'>") : "" )
+ .parent()
+ .appendTo( $.mobile.pageContainer );
+
+ newPage.page();
+
+ anchor = parent.find('a:first');
+
+ if ( !anchor.length ) {
+ anchor = $( "<a/>" ).html( nodeEls || title ).prependTo( parent.empty() );
+ }
+
+ anchor.attr( "href", "#" + id );
+
+ }).listview();
+
+ // on pagehide, remove any nested pages along with the parent page, as long as they aren't active
+ // and aren't embedded
+ if( hasSubPages &&
+ parentPage.is( ":jqmData(external-page='true')" ) &&
+ parentPage.data("page").options.domCache === false ) {
+
+ var newRemove = function( e, ui ){
+ var nextPage = ui.nextPage, npURL;
+
+ if( ui.nextPage ){
+ npURL = nextPage.jqmData( "url" );
+ if( npURL.indexOf( parentUrl + "&" + $.mobile.subPageUrlKey ) !== 0 ){
+ self.childPages().remove();
+ parentPage.remove();
+ }
+ }
+ };
+
+ // unbind the original page remove and replace with our specialized version
+ parentPage
+ .unbind( "pagehide.remove" )
+ .bind( "pagehide.remove", newRemove);
+ }
+ },
+
+ // TODO sort out a better way to track sub pages of the listview this is brittle
+ childPages: function(){
+ var parentUrl = this.parentPage.jqmData( "url" );
+
+ return $( ":jqmData(url^='"+ parentUrl + "&" + $.mobile.subPageUrlKey +"')");
+ }
+});
+
+//auto self-init widgets
+$( document ).bind( "pagecreate create", function( e ){
+ $.mobile.listview.prototype.enhanceWithin( e.target );
+});
+
+})( jQuery );
+
+/*
+* "checkboxradio" plugin
+*/
+
+(function( $, undefined ) {
+
+$.widget( "mobile.checkboxradio", $.mobile.widget, {
+ options: {
+ theme: null,
+ initSelector: "input[type='checkbox'],input[type='radio']"
+ },
+ _create: function() {
+ var self = this,
+ input = this.element,
+ inheritAttr = function( input, dataAttr ) {
+ return input.jqmData( dataAttr ) || input.closest( "form,fieldset" ).jqmData( dataAttr )
+ },
+ // NOTE: Windows Phone could not find the label through a selector
+ // filter works though.
+ parentLabel = $( input ).closest( "label" ),
+ label = parentLabel.length ? parentLabel : $( input ).closest( "form,fieldset,:jqmData(role='page'),:jqmData(role='dialog')" ).find( "label" ).filter( "[for='" + input[0].id + "']" ),
+ inputtype = input[0].type,
+ mini = inheritAttr( input, "mini" ),
+ checkedState = inputtype + "-on",
+ uncheckedState = inputtype + "-off",
+ icon = input.parents( ":jqmData(type='horizontal')" ).length ? undefined : uncheckedState,
+ iconpos = inheritAttr( input, "iconpos" ),
+ activeBtn = icon ? "" : " " + $.mobile.activeBtnClass,
+ checkedClass = "ui-" + checkedState + activeBtn,
+ uncheckedClass = "ui-" + uncheckedState,
+ checkedicon = "ui-icon-" + checkedState,
+ uncheckedicon = "ui-icon-" + uncheckedState;
+
+ if ( inputtype !== "checkbox" && inputtype !== "radio" ) {
+ return;
+ }
+
+ // Expose for other methods
+ $.extend( this, {
+ label: label,
+ inputtype: inputtype,
+ checkedClass: checkedClass,
+ uncheckedClass: uncheckedClass,
+ checkedicon: checkedicon,
+ uncheckedicon: uncheckedicon
+ });
+
+ // If there's no selected theme check the data attr
+ if( !this.options.theme ) {
+ this.options.theme = $.mobile.getInheritedTheme( this.element, "c" );
+ }
+
+ label.buttonMarkup({
+ theme: this.options.theme,
+ icon: icon,
+ shadow: false,
+ mini: mini,
+ iconpos: iconpos
+ });
+
+ // Wrap the input + label in a div
+ var wrapper = document.createElement('div');
+ wrapper.className = 'ui-' + inputtype;
+
+ input.add( label ).wrapAll( wrapper );
+
+ label.bind({
+ vmouseover: function( event ) {
+ if ( $( this ).parent().is( ".ui-disabled" ) ) {
+ event.stopPropagation();
+ }
+ },
+
+ vclick: function( event ) {
+ if ( input.is( ":disabled" ) ) {
+ event.preventDefault();
+ return;
+ }
+
+ self._cacheVals();
+
+ input.prop( "checked", inputtype === "radio" && true || !input.prop( "checked" ) );
+
+ // trigger click handler's bound directly to the input as a substitute for
+ // how label clicks behave normally in the browsers
+ // TODO: it would be nice to let the browser's handle the clicks and pass them
+ // through to the associate input. we can swallow that click at the parent
+ // wrapper element level
+ input.triggerHandler( 'click' );
+
+ // Input set for common radio buttons will contain all the radio
+ // buttons, but will not for checkboxes. clearing the checked status
+ // of other radios ensures the active button state is applied properly
+ self._getInputSet().not( input ).prop( "checked", false );
+
+ self._updateAll();
+ return false;
+ }
+ });
+
+ input
+ .bind({
+ vmousedown: function() {
+ self._cacheVals();
+ },
+
+ vclick: function() {
+ var $this = $(this);
+
+ // Adds checked attribute to checked input when keyboard is used
+ if ( $this.is( ":checked" ) ) {
+
+ $this.prop( "checked", true);
+ self._getInputSet().not($this).prop( "checked", false );
+ } else {
+
+ $this.prop( "checked", false );
+ }
+
+ self._updateAll();
+ },
+
+ focus: function() {
+ label.addClass( $.mobile.focusClass );
+ },
+
+ blur: function() {
+ label.removeClass( $.mobile.focusClass );
+ }
+ });
+
+ this.refresh();
+ },
+
+ _cacheVals: function() {
+ this._getInputSet().each(function() {
+ $(this).jqmData( "cacheVal", this.checked );
+ });
+ },
+
+ //returns either a set of radios with the same name attribute, or a single checkbox
+ _getInputSet: function(){
+ if(this.inputtype === "checkbox") {
+ return this.element;
+ }
+
+ return this.element.closest( "form,fieldset,:jqmData(role='page')" )
+ .find( "input[name='"+ this.element[0].name +"'][type='"+ this.inputtype +"']" );
+ },
+
+ _updateAll: function() {
+ var self = this;
+
+ this._getInputSet().each(function() {
+ var $this = $(this);
+
+ if ( this.checked || self.inputtype === "checkbox" ) {
+ $this.trigger( "change" );
+ }
+ })
+ .checkboxradio( "refresh" );
+ },
+
+ refresh: function() {
+ var input = this.element[0],
+ label = this.label,
+ icon = label.find( ".ui-icon" );
+
+ if ( input.checked ) {
+ label.addClass( this.checkedClass ).removeClass( this.uncheckedClass );
+ icon.addClass( this.checkedicon ).removeClass( this.uncheckedicon );
+ } else {
+ label.removeClass( this.checkedClass ).addClass( this.uncheckedClass );
+ icon.removeClass( this.checkedicon ).addClass( this.uncheckedicon );
+ }
+
+ if ( input.disabled ) {
+ this.disable();
+ } else {
+ this.enable();
+ }
+ },
+
+ disable: function() {
+ this.element.prop( "disabled", true ).parent().addClass( "ui-disabled" );
+ },
+
+ enable: function() {
+ this.element.prop( "disabled", false ).parent().removeClass( "ui-disabled" );
+ }
+});
+
+//auto self-init widgets
+$( document ).bind( "pagecreate create", function( e ){
+ $.mobile.checkboxradio.prototype.enhanceWithin( e.target, true );
+});
+
+})( jQuery );
+
+(function( $, undefined ) {
+
+$.widget( "mobile.button", $.mobile.widget, {
+ options: {
+ theme: null,
+ icon: null,
+ iconpos: null,
+ inline: false,
+ corners: true,
+ shadow: true,
+ iconshadow: true,
+ initSelector: "button, [type='button'], [type='submit'], [type='reset'], [type='image']",
+ mini: false
+ },
+ _create: function() {
+ var $el = this.element,
+ $button,
+ o = this.options,
+ type,
+ name,
+ classes = "",
+ $buttonPlaceholder;
+
+ // if this is a link, check if it's been enhanced and, if not, use the right function
+ if( $el[ 0 ].tagName === "A" ) {
+ !$el.hasClass( "ui-btn" ) && $el.buttonMarkup();
+ return;
+ }
+
+ // get the inherited theme
+ // TODO centralize for all widgets
+ if ( !this.options.theme ) {
+ this.options.theme = $.mobile.getInheritedTheme( this.element, "c" );
+ }
+
+ // TODO: Post 1.1--once we have time to test thoroughly--any classes manually applied to the original element should be carried over to the enhanced element, with an `-enhanced` suffix. See https://github.com/jquery/jquery-mobile/issues/3577
+ /* if( $el[0].className.length ) {
+ classes = $el[0].className;
+ } */
+ if( !!~$el[0].className.indexOf( "ui-btn-left" ) ) {
+ classes = "ui-btn-left";
+ }
+
+ if( !!~$el[0].className.indexOf( "ui-btn-right" ) ) {
+ classes = "ui-btn-right";
+ }
+
+ // Add ARIA role
+ this.button = $( "<div></div>" )
+ .text( $el.text() || $el.val() )
+ .insertBefore( $el )
+ .buttonMarkup({
+ theme: o.theme,
+ icon: o.icon,
+ iconpos: o.iconpos,
+ inline: o.inline,
+ corners: o.corners,
+ shadow: o.shadow,
+ iconshadow: o.iconshadow,
+ mini: o.mini
+ })
+ .addClass( classes )
+ .append( $el.addClass( "ui-btn-hidden" ) );
+
+ $button = this.button;
+ type = $el.attr( "type" );
+ name = $el.attr( "name" );
+
+ // Add hidden input during submit if input type="submit" has a name.
+ if ( type !== "button" && type !== "reset" && name ) {
+ $el.bind( "vclick", function() {
+ // Add hidden input if it doesn’t already exist.
+ if( $buttonPlaceholder === undefined ) {
+ $buttonPlaceholder = $( "<input>", {
+ type: "hidden",
+ name: $el.attr( "name" ),
+ value: $el.attr( "value" )
+ }).insertBefore( $el );
+
+ // Bind to doc to remove after submit handling
+ $( document ).one("submit", function(){
+ $buttonPlaceholder.remove();
+
+ // reset the local var so that the hidden input
+ // will be re-added on subsequent clicks
+ $buttonPlaceholder = undefined;
+ });
+ }
+ });
+ }
+
+ $el.bind({
+ focus: function() {
+ $button.addClass( $.mobile.focusClass );
+ },
+
+ blur: function() {
+ $button.removeClass( $.mobile.focusClass );
+ }
+ });
+
+ this.refresh();
+ },
+
+ enable: function() {
+ this.element.attr( "disabled", false );
+ this.button.removeClass( "ui-disabled" ).attr( "aria-disabled", false );
+ return this._setOption( "disabled", false );
+ },
+
+ disable: function() {
+ this.element.attr( "disabled", true );
+ this.button.addClass( "ui-disabled" ).attr( "aria-disabled", true );
+ return this._setOption( "disabled", true );
+ },
+
+ refresh: function() {
+ var $el = this.element;
+
+ if ( $el.prop("disabled") ) {
+ this.disable();
+ } else {
+ this.enable();
+ }
+
+ // Grab the button's text element from its implementation-independent data item
+ $( this.button.data( 'buttonElements' ).text ).text( $el.text() || $el.val() );
+ }
+});
+
+//auto self-init widgets
+$( document ).bind( "pagecreate create", function( e ){
+ $.mobile.button.prototype.enhanceWithin( e.target, true );
+});
+
+})( jQuery );
+
+(function( $, undefined ) {
+
+$.fn.controlgroup = function( options ) {
+ function flipClasses( els, flCorners ) {
+ els.removeClass( "ui-btn-corner-all ui-shadow" )
+ .eq( 0 ).addClass( flCorners[ 0 ] )
+ .end()
+ .last().addClass( flCorners[ 1 ] ).addClass( "ui-controlgroup-last" );
+ }
+
+ return this.each(function() {
+ var $el = $( this ),
+ o = $.extend({
+ direction: $el.jqmData( "type" ) || "vertical",
+ shadow: false,
+ excludeInvisible: true,
+ mini: $el.jqmData( "mini" )
+ }, options ),
+ groupheading = $el.children( "legend" ),
+ flCorners = o.direction == "horizontal" ? [ "ui-corner-left", "ui-corner-right" ] : [ "ui-corner-top", "ui-corner-bottom" ],
+ type = $el.find( "input" ).first().attr( "type" );
+
+ // Replace legend with more stylable replacement div
+ if ( groupheading.length ) {
+ $el.wrapInner( "<div class='ui-controlgroup-controls'></div>" );
+ $( "<div role='heading' class='ui-controlgroup-label'>" + groupheading.html() + "</div>" ).insertBefore( $el.children(0) );
+ groupheading.remove();
+ }
+
+ $el.addClass( "ui-corner-all ui-controlgroup ui-controlgroup-" + o.direction );
+
+ flipClasses( $el.find( ".ui-btn" + ( o.excludeInvisible ? ":visible" : "" ) ).not('.ui-slider-handle'), flCorners );
+ flipClasses( $el.find( ".ui-btn-inner" ), flCorners );
+
+ if ( o.shadow ) {
+ $el.addClass( "ui-shadow" );
+ }
+
+ if ( o.mini ) {
+ $el.addClass( "ui-mini" );
+ }
+
+ });
+};
+
+// The pagecreate handler for controlgroup is in jquery.mobile.init because of the soft-dependency on the wrapped widgets
+
+})(jQuery);
+
+(function( $, undefined ) {
+
+$( document ).bind( "pagecreate create", function( e ){
+
+ //links within content areas, tests included with page
+ $( e.target )
+ .find( "a" )
+ .jqmEnhanceable()
+ .not( ".ui-btn, .ui-link-inherit, :jqmData(role='none'), :jqmData(role='nojs')" )
+ .addClass( "ui-link" );
+
+});
+
+})( jQuery );
+
+
+( function( $ ) {
+ var meta = $( "meta[name=viewport]" ),
+ initialContent = meta.attr( "content" ),
+ disabledZoom = initialContent + ",maximum-scale=1, user-scalable=no",
+ enabledZoom = initialContent + ",maximum-scale=10, user-scalable=yes",
+ disabledInitially = /(user-scalable[\s]*=[\s]*no)|(maximum-scale[\s]*=[\s]*1)[$,\s]/.test( initialContent );
+
+ $.mobile.zoom = $.extend( {}, {
+ enabled: !disabledInitially,
+ locked: false,
+ disable: function( lock ) {
+ if( !disabledInitially && !$.mobile.zoom.locked ){
+ meta.attr( "content", disabledZoom );
+ $.mobile.zoom.enabled = false;
+ $.mobile.zoom.locked = lock || false;
+ }
+ },
+ enable: function( unlock ) {
+ if( !disabledInitially && ( !$.mobile.zoom.locked || unlock === true ) ){
+ meta.attr( "content", enabledZoom );
+ $.mobile.zoom.enabled = true;
+ $.mobile.zoom.locked = false;
+ }
+ },
+ restore: function() {
+ if( !disabledInitially ){
+ meta.attr( "content", initialContent );
+ $.mobile.zoom.enabled = true;
+ }
+ }
+ });
+
+}( jQuery ));
+
+(function( $, undefined ) {
+
+$.widget( "mobile.textinput", $.mobile.widget, {
+ options: {
+ theme: null,
+ // This option defaults to true on iOS devices.
+ preventFocusZoom: /iPhone|iPad|iPod/.test( navigator.platform ) && navigator.userAgent.indexOf( "AppleWebKit" ) > -1,
+ initSelector: "input[type='text'], input[type='search'], :jqmData(type='search'), input[type='number'], :jqmData(type='number'), input[type='password'], input[type='email'], input[type='url'], input[type='tel'], textarea, input[type='time'], input[type='date'], input[type='month'], input[type='week'], input[type='datetime'], input[type='datetime-local'], input[type='color'], input:not([type])",
+ clearSearchButtonText: "clear text"
+ },
+
+ _create: function() {
+
+ var input = this.element,
+ o = this.options,
+ theme = o.theme || $.mobile.getInheritedTheme( this.element, "c" ),
+ themeclass = " ui-body-" + theme,
+ mini = input.jqmData("mini") == true,
+ miniclass = mini ? " ui-mini" : "",
+ focusedEl, clearbtn;
+
+ $( "label[for='" + input.attr( "id" ) + "']" ).addClass( "ui-input-text" );
+
+ focusedEl = input.addClass("ui-input-text ui-body-"+ theme );
+
+ // XXX: Temporary workaround for issue 785 (Apple bug 8910589).
+ // Turn off autocorrect and autocomplete on non-iOS 5 devices
+ // since the popup they use can't be dismissed by the user. Note
+ // that we test for the presence of the feature by looking for
+ // the autocorrect property on the input element. We currently
+ // have no test for iOS 5 or newer so we're temporarily using
+ // the touchOverflow support flag for jQM 1.0. Yes, I feel dirty. - jblas
+ if ( typeof input[0].autocorrect !== "undefined" && !$.support.touchOverflow ) {
+ // Set the attribute instead of the property just in case there
+ // is code that attempts to make modifications via HTML.
+ input[0].setAttribute( "autocorrect", "off" );
+ input[0].setAttribute( "autocomplete", "off" );
+ }
+
+
+ //"search" input widget
+ if ( input.is( "[type='search'],:jqmData(type='search')" ) ) {
+
+ focusedEl = input.wrap( "<div class='ui-input-search ui-shadow-inset ui-btn-corner-all ui-btn-shadow ui-icon-searchfield" + themeclass + miniclass + "'></div>" ).parent();
+ clearbtn = $( "<a href='#' class='ui-input-clear' title='" + o.clearSearchButtonText + "'>" + o.clearSearchButtonText + "</a>" )
+ .bind('click', function( event ) {
+ input
+ .val( "" )
+ .focus()
+ .trigger( "change" );
+ clearbtn.addClass( "ui-input-clear-hidden" );
+ event.preventDefault();
+ })
+ .appendTo( focusedEl )
+ .buttonMarkup({
+ icon: "delete",
+ iconpos: "notext",
+ corners: true,
+ shadow: true,
+ mini: mini
+ });
+
+ function toggleClear() {
+ setTimeout(function() {
+ clearbtn.toggleClass( "ui-input-clear-hidden", !input.val() );
+ }, 0);
+ }
+
+ toggleClear();
+
+ input.bind('paste cut keyup focus change blur', toggleClear);
+
+ } else {
+ input.addClass( "ui-corner-all ui-shadow-inset" + themeclass + miniclass );
+ }
+
+ input.focus(function() {
+ focusedEl.addClass( $.mobile.focusClass );
+ })
+ .blur(function(){
+ focusedEl.removeClass( $.mobile.focusClass );
+ })
+ // In many situations, iOS will zoom into the select upon tap, this prevents that from happening
+ .bind( "focus", function() {
+ if( o.preventFocusZoom ){
+ $.mobile.zoom.disable( true );
+ }
+ })
+ .bind( "blur", function() {
+ if( o.preventFocusZoom ){
+ $.mobile.zoom.enable( true );
+ }
+ });
+
+ // Autogrow
+ if ( input.is( "textarea" ) ) {
+ var extraLineHeight = 15,
+ keyupTimeoutBuffer = 100,
+ keyup = function() {
+ var scrollHeight = input[ 0 ].scrollHeight,
+ clientHeight = input[ 0 ].clientHeight;
+
+ if ( clientHeight < scrollHeight ) {
+ input.height(scrollHeight + extraLineHeight);
+ }
+ },
+ keyupTimeout;
+
+ input.keyup(function() {
+ clearTimeout( keyupTimeout );
+ keyupTimeout = setTimeout( keyup, keyupTimeoutBuffer );
+ });
+
+ // binding to pagechange here ensures that for pages loaded via
+ // ajax the height is recalculated without user input
+ $( document ).one( "pagechange", keyup );
+
+ // Issue 509: the browser is not providing scrollHeight properly until the styles load
+ if ( $.trim( input.val() ) ) {
+ // bind to the window load to make sure the height is calculated based on BOTH
+ // the DOM and CSS
+ $( window ).load( keyup );
+ }
+ }
+ },
+
+ disable: function(){
+ ( this.element.attr( "disabled", true ).is( "[type='search'],:jqmData(type='search')" ) ?
+ this.element.parent() : this.element ).addClass( "ui-disabled" );
+ },
+
+ enable: function(){
+ ( this.element.attr( "disabled", false).is( "[type='search'],:jqmData(type='search')" ) ?
+ this.element.parent() : this.element ).removeClass( "ui-disabled" );
+ }
+});
+
+//auto self-init widgets
+$( document ).bind( "pagecreate create", function( e ){
+ $.mobile.textinput.prototype.enhanceWithin( e.target, true );
+});
+
+})( jQuery );
+
+(function( $, undefined ) {
+
+$.mobile.listview.prototype.options.filter = false;
+$.mobile.listview.prototype.options.filterPlaceholder = "Filter items...";
+$.mobile.listview.prototype.options.filterTheme = "c";
+$.mobile.listview.prototype.options.filterCallback = function( text, searchValue ){
+ return text.toLowerCase().indexOf( searchValue ) === -1;
+};
+
+$( document ).delegate( ":jqmData(role='listview')", "listviewcreate", function() {
+
+ var list = $( this ),
+ listview = list.data( "listview" );
+
+ if ( !listview.options.filter ) {
+ return;
+ }
+
+ var wrapper = $( "<form>", {
+ "class": "ui-listview-filter ui-bar-" + listview.options.filterTheme,
+ "role": "search"
+ }),
+ search = $( "<input>", {
+ placeholder: listview.options.filterPlaceholder
+ })
+ .attr( "data-" + $.mobile.ns + "type", "search" )
+ .jqmData( "lastval", "" )
+ .bind( "keyup change", function() {
+
+ var $this = $(this),
+ val = this.value.toLowerCase(),
+ listItems = null,
+ lastval = $this.jqmData( "lastval" ) + "",
+ childItems = false,
+ itemtext = "",
+ item;
+
+ // Change val as lastval for next execution
+ $this.jqmData( "lastval" , val );
+ if ( val.length < lastval.length || val.indexOf(lastval) !== 0 ) {
+
+ // Removed chars or pasted something totally different, check all items
+ listItems = list.children();
+ } else {
+
+ // Only chars added, not removed, only use visible subset
+ listItems = list.children( ":not(.ui-screen-hidden)" );
+ }
+
+ if ( val ) {
+
+ // This handles hiding regular rows without the text we search for
+ // and any list dividers without regular rows shown under it
+
+ for ( var i = listItems.length - 1; i >= 0; i-- ) {
+ item = $( listItems[ i ] );
+ itemtext = item.jqmData( "filtertext" ) || item.text();
+
+ if ( item.is( "li:jqmData(role=list-divider)" ) ) {
+
+ item.toggleClass( "ui-filter-hidequeue" , !childItems );
+
+ // New bucket!
+ childItems = false;
+
+ } else if ( listview.options.filterCallback( itemtext, val ) ) {
+
+ //mark to be hidden
+ item.toggleClass( "ui-filter-hidequeue" , true );
+ } else {
+
+ // There's a shown item in the bucket
+ childItems = true;
+ }
+ }
+
+ // Show items, not marked to be hidden
+ listItems
+ .filter( ":not(.ui-filter-hidequeue)" )
+ .toggleClass( "ui-screen-hidden", false );
+
+ // Hide items, marked to be hidden
+ listItems
+ .filter( ".ui-filter-hidequeue" )
+ .toggleClass( "ui-screen-hidden", true )
+ .toggleClass( "ui-filter-hidequeue", false );
+
+ } else {
+
+ //filtervalue is empty => show all
+ listItems.toggleClass( "ui-screen-hidden", false );
+ }
+ listview._refreshCorners();
+ })
+ .appendTo( wrapper )
+ .textinput();
+
+ if ( listview.options.inset ) {
+ wrapper.addClass( "ui-listview-filter-inset" );
+ }
+
+ wrapper.bind( "submit", function() {
+ return false;
+ })
+ .insertBefore( list );
+});
+
+})( jQuery );
+
+( function( $, undefined ) {
+
+$.widget( "mobile.slider", $.mobile.widget, {
+ options: {
+ theme: null,
+ trackTheme: null,
+ disabled: false,
+ initSelector: "input[type='range'], :jqmData(type='range'), :jqmData(role='slider')",
+ mini: false
+ },
+
+ _create: function() {
+
+ // TODO: Each of these should have comments explain what they're for
+ var self = this,
+
+ control = this.element,
+
+ parentTheme = $.mobile.getInheritedTheme( control, "c" ),
+
+ theme = this.options.theme || parentTheme,
+
+ trackTheme = this.options.trackTheme || parentTheme,
+
+ cType = control[ 0 ].nodeName.toLowerCase(),
+
+ selectClass = ( cType == "select" ) ? "ui-slider-switch" : "",
+
+ controlID = control.attr( "id" ),
+
+ labelID = controlID + "-label",
+
+ label = $( "[for='"+ controlID +"']" ).attr( "id", labelID ),
+
+ val = function() {
+ return cType == "input" ? parseFloat( control.val() ) : control[0].selectedIndex;
+ },
+
+ min = cType == "input" ? parseFloat( control.attr( "min" ) ) : 0,
+
+ max = cType == "input" ? parseFloat( control.attr( "max" ) ) : control.find( "option" ).length-1,
+
+ step = window.parseFloat( control.attr( "step" ) || 1 ),
+
+ inlineClass = ( this.options.inline || control.jqmData("inline") == true ) ? " ui-slider-inline" : "",
+
+ miniClass = ( this.options.mini || control.jqmData("mini") ) ? " ui-slider-mini" : "",
+
+
+ domHandle = document.createElement('a'),
+ handle = $( domHandle ),
+ domSlider = document.createElement('div'),
+ slider = $( domSlider ),
+
+ valuebg = control.jqmData("highlight") && cType != "select" ? (function() {
+ var bg = document.createElement('div');
+ bg.className = 'ui-slider-bg ui-btn-active ui-btn-corner-all';
+ return $( bg ).prependTo( slider );
+ })() : false,
+
+ options;
+
+ domHandle.setAttribute( 'href', "#" );
+ domSlider.setAttribute('role','application');
+ domSlider.className = ['ui-slider ',selectClass," ui-btn-down-",trackTheme,' ui-btn-corner-all', inlineClass, miniClass].join("");
+ domHandle.className = 'ui-slider-handle';
+ domSlider.appendChild(domHandle);
+
+ handle.buttonMarkup({ corners: true, theme: theme, shadow: true })
+ .attr({
+ "role": "slider",
+ "aria-valuemin": min,
+ "aria-valuemax": max,
+ "aria-valuenow": val(),
+ "aria-valuetext": val(),
+ "title": val(),
+ "aria-labelledby": labelID
+ });
+
+ $.extend( this, {
+ slider: slider,
+ handle: handle,
+ valuebg: valuebg,
+ dragging: false,
+ beforeStart: null,
+ userModified: false,
+ mouseMoved: false
+ });
+
+ if ( cType == "select" ) {
+ var wrapper = document.createElement('div');
+ wrapper.className = 'ui-slider-inneroffset';
+
+ for(var j = 0,length = domSlider.childNodes.length;j < length;j++){
+ wrapper.appendChild(domSlider.childNodes[j]);
+ }
+
+ domSlider.appendChild(wrapper);
+
+ // slider.wrapInner( "<div class='ui-slider-inneroffset'></div>" );
+
+ // make the handle move with a smooth transition
+ handle.addClass( "ui-slider-handle-snapping" );
+
+ options = control.find( "option" );
+
+ for(var i = 0, optionsCount = options.length; i < optionsCount; i++){
+ var side = !i ? "b":"a",
+ sliderTheme = !i ? " ui-btn-down-" + trackTheme :( " " + $.mobile.activeBtnClass ),
+ sliderLabel = document.createElement('div'),
+ sliderImg = document.createElement('span');
+
+ sliderImg.className = ['ui-slider-label ui-slider-label-',side,sliderTheme," ui-btn-corner-all"].join("");
+ sliderImg.setAttribute('role','img');
+ sliderImg.appendChild(document.createTextNode(options[i].innerHTML));
+ $(sliderImg).prependTo( slider );
+ }
+
+ self._labels = $( ".ui-slider-label", slider );
+
+ }
+
+ label.addClass( "ui-slider" );
+
+ // monitor the input for updated values
+ control.addClass( cType === "input" ? "ui-slider-input" : "ui-slider-switch" )
+ .change( function() {
+ // if the user dragged the handle, the "change" event was triggered from inside refresh(); don't call refresh() again
+ if (!self.mouseMoved) {
+ self.refresh( val(), true );
+ }
+ })
+ .keyup( function() { // necessary?
+ self.refresh( val(), true, true );
+ })
+ .blur( function() {
+ self.refresh( val(), true );
+ });
+
+ // prevent screen drag when slider activated
+ $( document ).bind( "vmousemove", function( event ) {
+ if ( self.dragging ) {
+ // self.mouseMoved must be updated before refresh() because it will be used in the control "change" event
+ self.mouseMoved = true;
+
+ if ( cType === "select" ) {
+ // make the handle move in sync with the mouse
+ handle.removeClass( "ui-slider-handle-snapping" );
+ }
+
+ self.refresh( event );
+
+ // only after refresh() you can calculate self.userModified
+ self.userModified = self.beforeStart !== control[0].selectedIndex;
+ return false;
+ }
+ });
+
+ slider.bind( "vmousedown", function( event ) {
+ self.dragging = true;
+ self.userModified = false;
+ self.mouseMoved = false;
+
+ if ( cType === "select" ) {
+ self.beforeStart = control[0].selectedIndex;
+ }
+
+ self.refresh( event );
+ return false;
+ })
+ .bind( "vclick", false );
+
+ slider.add( document )
+ .bind( "vmouseup", function() {
+ if ( self.dragging ) {
+
+ self.dragging = false;
+
+ if ( cType === "select") {
+
+ // make the handle move with a smooth transition
+ handle.addClass( "ui-slider-handle-snapping" );
+
+ if ( self.mouseMoved ) {
+
+ // this is a drag, change the value only if user dragged enough
+ if ( self.userModified ) {
+ self.refresh( self.beforeStart == 0 ? 1 : 0 );
+ }
+ else {
+ self.refresh( self.beforeStart );
+ }
+
+ }
+ else {
+ // this is just a click, change the value
+ self.refresh( self.beforeStart == 0 ? 1 : 0 );
+ }
+
+ }
+
+ self.mouseMoved = false;
+
+ return false;
+ }
+ });
+
+ slider.insertAfter( control );
+
+ // Only add focus class to toggle switch, sliders get it automatically from ui-btn
+ if( cType == 'select' ) {
+ this.handle.bind({
+ focus: function() {
+ slider.addClass( $.mobile.focusClass );
+ },
+
+ blur: function() {
+ slider.removeClass( $.mobile.focusClass );
+ }
+ });
+ }
+
+ this.handle.bind({
+ // NOTE force focus on handle
+ vmousedown: function() {
+ $( this ).focus();
+ },
+
+ vclick: false,
+
+ keydown: function( event ) {
+ var index = val();
+
+ if ( self.options.disabled ) {
+ return;
+ }
+
+ // In all cases prevent the default and mark the handle as active
+ switch ( event.keyCode ) {
+ case $.mobile.keyCode.HOME:
+ case $.mobile.keyCode.END:
+ case $.mobile.keyCode.PAGE_UP:
+ case $.mobile.keyCode.PAGE_DOWN:
+ case $.mobile.keyCode.UP:
+ case $.mobile.keyCode.RIGHT:
+ case $.mobile.keyCode.DOWN:
+ case $.mobile.keyCode.LEFT:
+ event.preventDefault();
+
+ if ( !self._keySliding ) {
+ self._keySliding = true;
+ $( this ).addClass( "ui-state-active" );
+ }
+ break;
+ }
+
+ // move the slider according to the keypress
+ switch ( event.keyCode ) {
+ case $.mobile.keyCode.HOME:
+ self.refresh( min );
+ break;
+ case $.mobile.keyCode.END:
+ self.refresh( max );
+ break;
+ case $.mobile.keyCode.PAGE_UP:
+ case $.mobile.keyCode.UP:
+ case $.mobile.keyCode.RIGHT:
+ self.refresh( index + step );
+ break;
+ case $.mobile.keyCode.PAGE_DOWN:
+ case $.mobile.keyCode.DOWN:
+ case $.mobile.keyCode.LEFT:
+ self.refresh( index - step );
+ break;
+ }
+ }, // remove active mark
+
+ keyup: function( event ) {
+ if ( self._keySliding ) {
+ self._keySliding = false;
+ $( this ).removeClass( "ui-state-active" );
+ }
+ }
+ });
+
+ this.refresh(undefined, undefined, true);
+ },
+
+ refresh: function( val, isfromControl, preventInputUpdate ) {
+
+ if ( this.options.disabled || this.element.attr('disabled')) {
+ this.disable();
+ }
+
+ var control = this.element, percent,
+ cType = control[0].nodeName.toLowerCase(),
+ min = cType === "input" ? parseFloat( control.attr( "min" ) ) : 0,
+ max = cType === "input" ? parseFloat( control.attr( "max" ) ) : control.find( "option" ).length - 1,
+ step = (cType === "input" && parseFloat( control.attr( "step" ) ) > 0) ? parseFloat(control.attr("step")) : 1;
+
+ if ( typeof val === "object" ) {
+ var data = val,
+ // a slight tolerance helped get to the ends of the slider
+ tol = 8;
+ if ( !this.dragging ||
+ data.pageX < this.slider.offset().left - tol ||
+ data.pageX > this.slider.offset().left + this.slider.width() + tol ) {
+ return;
+ }
+ percent = Math.round( ( ( data.pageX - this.slider.offset().left ) / this.slider.width() ) * 100 );
+ } else {
+ if ( val == null ) {
+ val = cType === "input" ? parseFloat( control.val() || 0 ) : control[0].selectedIndex;
+ }
+ percent = ( parseFloat( val ) - min ) / ( max - min ) * 100;
+ }
+
+ if ( isNaN( percent ) ) {
+ return;
+ }
+
+ if ( percent < 0 ) {
+ percent = 0;
+ }
+
+ if ( percent > 100 ) {
+ percent = 100;
+ }
+
+ var newval = ( percent / 100 ) * ( max - min ) + min;
+
+ //from jQuery UI slider, the following source will round to the nearest step
+ var valModStep = ( newval - min ) % step;
+ var alignValue = newval - valModStep;
+
+ if ( Math.abs( valModStep ) * 2 >= step ) {
+ alignValue += ( valModStep > 0 ) ? step : ( -step );
+ }
+ // Since JavaScript has problems with large floats, round
+ // the final value to 5 digits after the decimal point (see jQueryUI: #4124)
+ newval = parseFloat( alignValue.toFixed(5) );
+
+ if ( newval < min ) {
+ newval = min;
+ }
+
+ if ( newval > max ) {
+ newval = max;
+ }
+
+ this.handle.css( "left", percent + "%" );
+ this.handle.attr( {
+ "aria-valuenow": cType === "input" ? newval : control.find( "option" ).eq( newval ).attr( "value" ),
+ "aria-valuetext": cType === "input" ? newval : control.find( "option" ).eq( newval ).getEncodedText(),
+ title: cType === "input" ? newval : control.find( "option" ).eq( newval ).getEncodedText()
+ });
+ this.valuebg && this.valuebg.css( "width", percent + "%" );
+
+ // drag the label widths
+ if ( this._labels ) {
+ var handlePercent = this.handle.width() / this.slider.width() * 100,
+ aPercent = percent && handlePercent + ( 100 - handlePercent ) * percent / 100,
+ bPercent = percent === 100 ? 0 : Math.min( handlePercent + 100 - aPercent, 100 );
+
+ this._labels.each(function(){
+ var ab = $(this).is( ".ui-slider-label-a" );
+ $( this ).width( ( ab ? aPercent : bPercent ) + "%" );
+ });
+ }
+
+ if ( !preventInputUpdate ) {
+ var valueChanged = false;
+
+ // update control"s value
+ if ( cType === "input" ) {
+ valueChanged = control.val() !== newval;
+ control.val( newval );
+ } else {
+ valueChanged = control[ 0 ].selectedIndex !== newval;
+ control[ 0 ].selectedIndex = newval;
+ }
+ if ( !isfromControl && valueChanged ) {
+ control.trigger( "change" );
+ }
+ }
+ },
+
+ enable: function() {
+ this.element.attr( "disabled", false );
+ this.slider.removeClass( "ui-disabled" ).attr( "aria-disabled", false );
+ return this._setOption( "disabled", false );
+ },
+
+ disable: function() {
+ this.element.attr( "disabled", true );
+ this.slider.addClass( "ui-disabled" ).attr( "aria-disabled", true );
+ return this._setOption( "disabled", true );
+ }
+
+});
+
+//auto self-init widgets
+$( document ).bind( "pagecreate create", function( e ){
+ $.mobile.slider.prototype.enhanceWithin( e.target, true );
+});
+
+})( jQuery );
+
+(function( $, undefined ) {
+
+$.widget( "mobile.selectmenu", $.mobile.widget, {
+ options: {
+ theme: null,
+ disabled: false,
+ icon: "arrow-d",
+ iconpos: "right",
+ inline: false,
+ corners: true,
+ shadow: true,
+ iconshadow: true,
+ overlayTheme: "a",
+ hidePlaceholderMenuItems: true,
+ closeText: "Close",
+ nativeMenu: true,
+ // This option defaults to true on iOS devices.
+ preventFocusZoom: /iPhone|iPad|iPod/.test( navigator.platform ) && navigator.userAgent.indexOf( "AppleWebKit" ) > -1,
+ initSelector: "select:not(:jqmData(role='slider'))",
+ mini: false
+ },
+
+ _button: function(){
+ return $( "<div/>" );
+ },
+
+ _setDisabled: function( value ) {
+ this.element.attr( "disabled", value );
+ this.button.attr( "aria-disabled", value );
+ return this._setOption( "disabled", value );
+ },
+
+ _focusButton : function() {
+ var self = this;
+
+ setTimeout( function() {
+ self.button.focus();
+ }, 40);
+ },
+
+ _selectOptions: function() {
+ return this.select.find( "option" );
+ },
+
+ // setup items that are generally necessary for select menu extension
+ _preExtension: function(){
+ var classes = "";
+ // TODO: Post 1.1--once we have time to test thoroughly--any classes manually applied to the original element should be carried over to the enhanced element, with an `-enhanced` suffix. See https://github.com/jquery/jquery-mobile/issues/3577
+ /* if( $el[0].className.length ) {
+ classes = $el[0].className;
+ } */
+ if( !!~this.element[0].className.indexOf( "ui-btn-left" ) ) {
+ classes = " ui-btn-left";
+ }
+
+ if( !!~this.element[0].className.indexOf( "ui-btn-right" ) ) {
+ classes = " ui-btn-right";
+ }
+
+ this.select = this.element.wrap( "<div class='ui-select" + classes + "'>" );
+ this.selectID = this.select.attr( "id" );
+ this.label = $( "label[for='"+ this.selectID +"']" ).addClass( "ui-select" );
+ this.isMultiple = this.select[ 0 ].multiple;
+ if ( !this.options.theme ) {
+ this.options.theme = $.mobile.getInheritedTheme( this.select, "c" );
+ }
+ },
+
+ _create: function() {
+ this._preExtension();
+
+ // Allows for extension of the native select for custom selects and other plugins
+ // see select.custom for example extension
+ // TODO explore plugin registration
+ this._trigger( "beforeCreate" );
+
+ this.button = this._button();
+
+ var self = this,
+
+ options = this.options,
+
+ // IE throws an exception at options.item() function when
+ // there is no selected item
+ // select first in this case
+ selectedIndex = this.select[ 0 ].selectedIndex == -1 ? 0 : this.select[ 0 ].selectedIndex,
+
+ // TODO values buttonId and menuId are undefined here
+ button = this.button
+ .text( $( this.select[ 0 ].options.item( selectedIndex ) ).text() )
+ .insertBefore( this.select )
+ .buttonMarkup( {
+ theme: options.theme,
+ icon: options.icon,
+ iconpos: options.iconpos,
+ inline: options.inline,
+ corners: options.corners,
+ shadow: options.shadow,
+ iconshadow: options.iconshadow,
+ mini: options.mini
+ });
+
+ // Opera does not properly support opacity on select elements
+ // In Mini, it hides the element, but not its text
+ // On the desktop,it seems to do the opposite
+ // for these reasons, using the nativeMenu option results in a full native select in Opera
+ if ( options.nativeMenu && window.opera && window.opera.version ) {
+ this.select.addClass( "ui-select-nativeonly" );
+ }
+
+ // Add counter for multi selects
+ if ( this.isMultiple ) {
+ this.buttonCount = $( "<span>" )
+ .addClass( "ui-li-count ui-btn-up-c ui-btn-corner-all" )
+ .hide()
+ .appendTo( button.addClass('ui-li-has-count') );
+ }
+
+ // Disable if specified
+ if ( options.disabled || this.element.attr('disabled')) {
+ this.disable();
+ }
+
+ // Events on native select
+ this.select.change( function() {
+ self.refresh();
+ });
+
+ this.build();
+ },
+
+ build: function() {
+ var self = this;
+
+ this.select
+ .appendTo( self.button )
+ .bind( "vmousedown", function() {
+ // Add active class to button
+ self.button.addClass( $.mobile.activeBtnClass );
+ })
+ .bind( "focus", function() {
+ self.button.addClass( $.mobile.focusClass );
+ })
+ .bind( "blur", function() {
+ self.button.removeClass( $.mobile.focusClass );
+ })
+ .bind( "focus vmouseover", function() {
+ self.button.trigger( "vmouseover" );
+ })
+ .bind( "vmousemove", function() {
+ // Remove active class on scroll/touchmove
+ self.button.removeClass( $.mobile.activeBtnClass );
+ })
+ .bind( "change blur vmouseout", function() {
+ self.button.trigger( "vmouseout" )
+ .removeClass( $.mobile.activeBtnClass );
+ })
+ .bind( "change blur", function() {
+ self.button.removeClass( "ui-btn-down-" + self.options.theme );
+ });
+
+ // In many situations, iOS will zoom into the select upon tap, this prevents that from happening
+ self.button.bind( "vmousedown", function() {
+ if( self.options.preventFocusZoom ){
+ $.mobile.zoom.disable( true );
+ }
+ })
+ .bind( "mouseup", function() {
+ if( self.options.preventFocusZoom ){
+ $.mobile.zoom.enable( true );
+ }
+ });
+ },
+
+ selected: function() {
+ return this._selectOptions().filter( ":selected" );
+ },
+
+ selectedIndices: function() {
+ var self = this;
+
+ return this.selected().map( function() {
+ return self._selectOptions().index( this );
+ }).get();
+ },
+
+ setButtonText: function() {
+ var self = this, selected = this.selected();
+
+ this.button.find( ".ui-btn-text" ).text( function() {
+ if ( !self.isMultiple ) {
+ return selected.text();
+ }
+
+ return selected.length ? selected.map( function() {
+ return $( this ).text();
+ }).get().join( ", " ) : self.placeholder;
+ });
+ },
+
+ setButtonCount: function() {
+ var selected = this.selected();
+
+ // multiple count inside button
+ if ( this.isMultiple ) {
+ this.buttonCount[ selected.length > 1 ? "show" : "hide" ]().text( selected.length );
+ }
+ },
+
+ refresh: function() {
+ this.setButtonText();
+ this.setButtonCount();
+ },
+
+ // open and close preserved in native selects
+ // to simplify users code when looping over selects
+ open: $.noop,
+ close: $.noop,
+
+ disable: function() {
+ this._setDisabled( true );
+ this.button.addClass( "ui-disabled" );
+ },
+
+ enable: function() {
+ this._setDisabled( false );
+ this.button.removeClass( "ui-disabled" );
+ }
+});
+
+//auto self-init widgets
+$( document ).bind( "pagecreate create", function( e ){
+ $.mobile.selectmenu.prototype.enhanceWithin( e.target, true );
+});
+})( jQuery );
+
+/*
+* custom "selectmenu" plugin
+*/
+
+(function( $, undefined ) {
+ var extendSelect = function( widget ){
+
+ var select = widget.select,
+ selectID = widget.selectID,
+ label = widget.label,
+ thisPage = widget.select.closest( ".ui-page" ),
+ screen = $( "<div>", {"class": "ui-selectmenu-screen ui-screen-hidden"} ).appendTo( thisPage ),
+ selectOptions = widget._selectOptions(),
+ isMultiple = widget.isMultiple = widget.select[ 0 ].multiple,
+ buttonId = selectID + "-button",
+ menuId = selectID + "-menu",
+ menuPage = $( "<div data-" + $.mobile.ns + "role='dialog' data-" +$.mobile.ns + "theme='"+ widget.options.theme +"' data-" +$.mobile.ns + "overlay-theme='"+ widget.options.overlayTheme +"'>" +
+ "<div data-" + $.mobile.ns + "role='header'>" +
+ "<div class='ui-title'>" + label.getEncodedText() + "</div>"+
+ "</div>"+
+ "<div data-" + $.mobile.ns + "role='content'></div>"+
+ "</div>" ),
+
+ listbox = $("<div>", { "class": "ui-selectmenu ui-selectmenu-hidden ui-overlay-shadow ui-corner-all ui-body-" + widget.options.overlayTheme + " " + $.mobile.defaultDialogTransition } ).insertAfter(screen),
+
+ list = $( "<ul>", {
+ "class": "ui-selectmenu-list",
+ "id": menuId,
+ "role": "listbox",
+ "aria-labelledby": buttonId
+ }).attr( "data-" + $.mobile.ns + "theme", widget.options.theme ).appendTo( listbox ),
+
+ header = $( "<div>", {
+ "class": "ui-header ui-bar-" + widget.options.theme
+ }).prependTo( listbox ),
+
+ headerTitle = $( "<h1>", {
+ "class": "ui-title"
+ }).appendTo( header ),
+
+ menuPageContent,
+ menuPageClose,
+ headerClose;
+
+ if( widget.isMultiple ) {
+ headerClose = $( "<a>", {
+ "text": widget.options.closeText,
+ "href": "#",
+ "class": "ui-btn-left"
+ }).attr( "data-" + $.mobile.ns + "iconpos", "notext" ).attr( "data-" + $.mobile.ns + "icon", "delete" ).appendTo( header ).buttonMarkup();
+ }
+
+ $.extend( widget, {
+ select: widget.select,
+ selectID: selectID,
+ buttonId: buttonId,
+ menuId: menuId,
+ thisPage: thisPage,
+ menuPage: menuPage,
+ label: label,
+ screen: screen,
+ selectOptions: selectOptions,
+ isMultiple: isMultiple,
+ theme: widget.options.theme,
+ listbox: listbox,
+ list: list,
+ header: header,
+ headerTitle: headerTitle,
+ headerClose: headerClose,
+ menuPageContent: menuPageContent,
+ menuPageClose: menuPageClose,
+ placeholder: "",
+
+ build: function() {
+ var self = this;
+
+ // Create list from select, update state
+ self.refresh();
+
+ self.select.attr( "tabindex", "-1" ).focus(function() {
+ $( this ).blur();
+ self.button.focus();
+ });
+
+ // Button events
+ self.button.bind( "vclick keydown" , function( event ) {
+ if ( event.type == "vclick" ||
+ event.keyCode && ( event.keyCode === $.mobile.keyCode.ENTER ||
+ event.keyCode === $.mobile.keyCode.SPACE ) ) {
+
+ self.open();
+ event.preventDefault();
+ }
+ });
+
+ // Events for list items
+ self.list.attr( "role", "listbox" )
+ .bind( "focusin", function( e ){
+ $( e.target )
+ .attr( "tabindex", "0" )
+ .trigger( "vmouseover" );
+
+ })
+ .bind( "focusout", function( e ){
+ $( e.target )
+ .attr( "tabindex", "-1" )
+ .trigger( "vmouseout" );
+ })
+ .delegate( "li:not(.ui-disabled, .ui-li-divider)", "click", function( event ) {
+
+ // index of option tag to be selected
+ var oldIndex = self.select[ 0 ].selectedIndex,
+ newIndex = self.list.find( "li:not(.ui-li-divider)" ).index( this ),
+ option = self._selectOptions().eq( newIndex )[ 0 ];
+
+ // toggle selected status on the tag for multi selects
+ option.selected = self.isMultiple ? !option.selected : true;
+
+ // toggle checkbox class for multiple selects
+ if ( self.isMultiple ) {
+ $( this ).find( ".ui-icon" )
+ .toggleClass( "ui-icon-checkbox-on", option.selected )
+ .toggleClass( "ui-icon-checkbox-off", !option.selected );
+ }
+
+ // trigger change if value changed
+ if ( self.isMultiple || oldIndex !== newIndex ) {
+ self.select.trigger( "change" );
+ }
+
+ //hide custom select for single selects only
+ if ( !self.isMultiple ) {
+ self.close();
+ }
+
+ event.preventDefault();
+ })
+ .keydown(function( event ) { //keyboard events for menu items
+ var target = $( event.target ),
+ li = target.closest( "li" ),
+ prev, next;
+
+ // switch logic based on which key was pressed
+ switch ( event.keyCode ) {
+ // up or left arrow keys
+ case 38:
+ prev = li.prev().not( ".ui-selectmenu-placeholder" );
+
+ if( prev.is( ".ui-li-divider" ) ) {
+ prev = prev.prev();
+ }
+
+ // if there's a previous option, focus it
+ if ( prev.length ) {
+ target
+ .blur()
+ .attr( "tabindex", "-1" );
+
+ prev.addClass( "ui-btn-down-" + widget.options.theme ).find( "a" ).first().focus();
+ }
+
+ return false;
+ break;
+
+ // down or right arrow keys
+ case 40:
+ next = li.next();
+
+ if( next.is( ".ui-li-divider" ) ) {
+ next = next.next();
+ }
+
+ // if there's a next option, focus it
+ if ( next.length ) {
+ target
+ .blur()
+ .attr( "tabindex", "-1" );
+
+ next.addClass( "ui-btn-down-" + widget.options.theme ).find( "a" ).first().focus();
+ }
+
+ return false;
+ break;
+
+ // If enter or space is pressed, trigger click
+ case 13:
+ case 32:
+ target.trigger( "click" );
+
+ return false;
+ break;
+ }
+ });
+
+ // button refocus ensures proper height calculation
+ // by removing the inline style and ensuring page inclusion
+ self.menuPage.bind( "pagehide", function() {
+ self.list.appendTo( self.listbox );
+ self._focusButton();
+
+ // TODO centralize page removal binding / handling in the page plugin.
+ // Suggestion from @jblas to do refcounting
+ //
+ // TODO extremely confusing dependency on the open method where the pagehide.remove
+ // bindings are stripped to prevent the parent page from disappearing. The way
+ // we're keeping pages in the DOM right now sucks
+ //
+ // rebind the page remove that was unbound in the open function
+ // to allow for the parent page removal from actions other than the use
+ // of a dialog sized custom select
+ //
+ // doing this here provides for the back button on the custom select dialog
+ $.mobile._bindPageRemove.call( self.thisPage );
+ });
+
+ // Events on "screen" overlay
+ self.screen.bind( "vclick", function( event ) {
+ self.close();
+ });
+
+ // Close button on small overlays
+ if( self.isMultiple ){
+ self.headerClose.click( function() {
+ if ( self.menuType == "overlay" ) {
+ self.close();
+ return false;
+ }
+ });
+ }
+
+ // track this dependency so that when the parent page
+ // is removed on pagehide it will also remove the menupage
+ self.thisPage.addDependents( this.menuPage );
+ },
+
+ _isRebuildRequired: function() {
+ var list = this.list.find( "li" ),
+ options = this._selectOptions();
+
+ // TODO exceedingly naive method to determine difference
+ // ignores value changes etc in favor of a forcedRebuild
+ // from the user in the refresh method
+ return options.text() !== list.text();
+ },
+
+ refresh: function( forceRebuild , foo ){
+ var self = this,
+ select = this.element,
+ isMultiple = this.isMultiple,
+ options = this._selectOptions(),
+ selected = this.selected(),
+ // return an array of all selected index's
+ indicies = this.selectedIndices();
+
+ if ( forceRebuild || this._isRebuildRequired() ) {
+ self._buildList();
+ }
+
+ self.setButtonText();
+ self.setButtonCount();
+
+ self.list.find( "li:not(.ui-li-divider)" )
+ .removeClass( $.mobile.activeBtnClass )
+ .attr( "aria-selected", false )
+ .each(function( i ) {
+
+ if ( $.inArray( i, indicies ) > -1 ) {
+ var item = $( this );
+
+ // Aria selected attr
+ item.attr( "aria-selected", true );
+
+ // Multiple selects: add the "on" checkbox state to the icon
+ if ( self.isMultiple ) {
+ item.find( ".ui-icon" ).removeClass( "ui-icon-checkbox-off" ).addClass( "ui-icon-checkbox-on" );
+ } else {
+ if( item.is( ".ui-selectmenu-placeholder" ) ) {
+ item.next().addClass( $.mobile.activeBtnClass );
+ } else {
+ item.addClass( $.mobile.activeBtnClass );
+ }
+ }
+ }
+ });
+ },
+
+ close: function() {
+ if ( this.options.disabled || !this.isOpen ) {
+ return;
+ }
+
+ var self = this;
+
+ if ( self.menuType == "page" ) {
+ // doesn't solve the possible issue with calling change page
+ // where the objects don't define data urls which prevents dialog key
+ // stripping - changePage has incoming refactor
+ window.history.back();
+ } else {
+ self.screen.addClass( "ui-screen-hidden" );
+ self.listbox.addClass( "ui-selectmenu-hidden" ).removeAttr( "style" ).removeClass( "in" );
+ self.list.appendTo( self.listbox );
+ self._focusButton();
+ }
+
+ // allow the dialog to be closed again
+ self.isOpen = false;
+ },
+
+ open: function() {
+ if ( this.options.disabled ) {
+ return;
+ }
+
+ var self = this,
+ $window = $( window ),
+ selfListParent = self.list.parent(),
+ menuHeight = selfListParent.outerHeight(),
+ menuWidth = selfListParent.outerWidth(),
+ activePage = $( ".ui-page-active" ),
+ tScrollElem = activePage,
+ scrollTop = $window.scrollTop(),
+ btnOffset = self.button.offset().top,
+ screenHeight = $window.height(),
+ screenWidth = $window.width();
+
+ //add active class to button
+ self.button.addClass( $.mobile.activeBtnClass );
+
+ //remove after delay
+ setTimeout( function() {
+ self.button.removeClass( $.mobile.activeBtnClass );
+ }, 300);
+
+ function focusMenuItem() {
+ self.list.find( "." + $.mobile.activeBtnClass + " a" ).focus();
+ }
+
+ if ( menuHeight > screenHeight - 80 || !$.support.scrollTop ) {
+
+ self.menuPage.appendTo( $.mobile.pageContainer ).page();
+ self.menuPageContent = menuPage.find( ".ui-content" );
+ self.menuPageClose = menuPage.find( ".ui-header a" );
+
+ // prevent the parent page from being removed from the DOM,
+ // otherwise the results of selecting a list item in the dialog
+ // fall into a black hole
+ self.thisPage.unbind( "pagehide.remove" );
+
+ //for WebOS/Opera Mini (set lastscroll using button offset)
+ if ( scrollTop == 0 && btnOffset > screenHeight ) {
+ self.thisPage.one( "pagehide", function() {
+ $( this ).jqmData( "lastScroll", btnOffset );
+ });
+ }
+
+ self.menuPage.one( "pageshow", function() {
+ focusMenuItem();
+ self.isOpen = true;
+ });
+
+ self.menuType = "page";
+ self.menuPageContent.append( self.list );
+ self.menuPage.find("div .ui-title").text(self.label.text());
+ $.mobile.changePage( self.menuPage, {
+ transition: $.mobile.defaultDialogTransition
+ });
+ } else {
+ self.menuType = "overlay";
+
+ self.screen.height( $(document).height() )
+ .removeClass( "ui-screen-hidden" );
+
+ // Try and center the overlay over the button
+ var roomtop = btnOffset - scrollTop,
+ roombot = scrollTop + screenHeight - btnOffset,
+ halfheight = menuHeight / 2,
+ maxwidth = parseFloat( self.list.parent().css( "max-width" ) ),
+ newtop, newleft;
+
+ if ( roomtop > menuHeight / 2 && roombot > menuHeight / 2 ) {
+ newtop = btnOffset + ( self.button.outerHeight() / 2 ) - halfheight;
+ } else {
+ // 30px tolerance off the edges
+ newtop = roomtop > roombot ? scrollTop + screenHeight - menuHeight - 30 : scrollTop + 30;
+ }
+
+ // If the menuwidth is smaller than the screen center is
+ if ( menuWidth < maxwidth ) {
+ newleft = ( screenWidth - menuWidth ) / 2;
+ } else {
+
+ //otherwise insure a >= 30px offset from the left
+ newleft = self.button.offset().left + self.button.outerWidth() / 2 - menuWidth / 2;
+
+ // 30px tolerance off the edges
+ if ( newleft < 30 ) {
+ newleft = 30;
+ } else if ( (newleft + menuWidth) > screenWidth ) {
+ newleft = screenWidth - menuWidth - 30;
+ }
+ }
+
+ self.listbox.append( self.list )
+ .removeClass( "ui-selectmenu-hidden" )
+ .css({
+ top: newtop,
+ left: newleft
+ })
+ .addClass( "in" );
+
+ focusMenuItem();
+
+ // duplicate with value set in page show for dialog sized selects
+ self.isOpen = true;
+ }
+ },
+
+ _buildList: function() {
+ var self = this,
+ o = this.options,
+ placeholder = this.placeholder,
+ needPlaceholder = true,
+ optgroups = [],
+ lis = [],
+ dataIcon = self.isMultiple ? "checkbox-off" : "false";
+
+ self.list.empty().filter( ".ui-listview" ).listview( "destroy" );
+
+ var $options = self.select.find("option"),
+ numOptions = $options.length,
+ select = this.select[ 0 ],
+ dataPrefix = 'data-' + $.mobile.ns,
+ dataIndexAttr = dataPrefix + 'option-index',
+ dataIconAttr = dataPrefix + 'icon',
+ dataRoleAttr = dataPrefix + 'role',
+ fragment = document.createDocumentFragment(),
+ optGroup;
+
+ for (var i = 0; i < numOptions;i++){
+ var option = $options[i],
+ $option = $(option),
+ parent = option.parentNode,
+ text = $option.text(),
+ anchor = document.createElement('a'),
+ classes = [];
+
+ anchor.setAttribute('href','#');
+ anchor.appendChild(document.createTextNode(text));
+
+ // Are we inside an optgroup?
+ if (parent !== select && parent.nodeName.toLowerCase() === "optgroup"){
+ var optLabel = parent.getAttribute('label');
+ if ( optLabel != optGroup) {
+ var divider = document.createElement('li');
+ divider.setAttribute(dataRoleAttr,'list-divider');
+ divider.setAttribute('role','option');
+ divider.setAttribute('tabindex','-1');
+ divider.appendChild(document.createTextNode(optLabel));
+ fragment.appendChild(divider);
+ optGroup = optLabel;
+ }
+ }
+
+ if (needPlaceholder && (!option.getAttribute( "value" ) || text.length == 0 || $option.jqmData( "placeholder" ))) {
+ needPlaceholder = false;
+ if ( o.hidePlaceholderMenuItems ) {
+ classes.push( "ui-selectmenu-placeholder" );
+ }
+ if (!placeholder) {
+ placeholder = self.placeholder = text;
+ }
+ }
+
+ var item = document.createElement('li');
+ if ( option.disabled ) {
+ classes.push( "ui-disabled" );
+ item.setAttribute('aria-disabled',true);
+ }
+ item.setAttribute(dataIndexAttr,i);
+ item.setAttribute(dataIconAttr,dataIcon);
+ item.className = classes.join(" ");
+ item.setAttribute('role','option');
+ anchor.setAttribute('tabindex','-1');
+ item.appendChild(anchor);
+ fragment.appendChild(item);
+ }
+
+ self.list[0].appendChild(fragment);
+
+ // Hide header if it's not a multiselect and there's no placeholder
+ if ( !this.isMultiple && !placeholder.length ) {
+ this.header.hide();
+ } else {
+ this.headerTitle.text( this.placeholder );
+ }
+
+ // Now populated, create listview
+ self.list.listview();
+ },
+
+ _button: function(){
+ return $( "<a>", {
+ "href": "#",
+ "role": "button",
+ // TODO value is undefined at creation
+ "id": this.buttonId,
+ "aria-haspopup": "true",
+
+ // TODO value is undefined at creation
+ "aria-owns": this.menuId
+ });
+ }
+ });
+ };
+
+ // issue #3894 - core doesn't triggered events on disabled delegates
+ $( document ).bind( "selectmenubeforecreate", function( event ){
+ var selectmenuWidget = $( event.target ).data( "selectmenu" );
+
+ if( !selectmenuWidget.options.nativeMenu ){
+ extendSelect( selectmenuWidget );
+ }
+ });
+})( jQuery );
+
+(function( $, undefined ) {
+
+
+ $.widget( "mobile.fixedtoolbar", $.mobile.widget, {
+ options: {
+ visibleOnPageShow: true,
+ disablePageZoom: true,
+ transition: "slide", //can be none, fade, slide (slide maps to slideup or slidedown)
+ fullscreen: false,
+ tapToggle: true,
+ tapToggleBlacklist: "a, input, select, textarea, .ui-header-fixed, .ui-footer-fixed",
+ hideDuringFocus: "input, textarea, select",
+ updatePagePadding: true,
+ trackPersistentToolbars: true,
+
+ // Browser detection! Weeee, here we go...
+ // Unfortunately, position:fixed is costly, not to mention probably impossible, to feature-detect accurately.
+ // Some tests exist, but they currently return false results in critical devices and browsers, which could lead to a broken experience.
+ // Testing fixed positioning is also pretty obtrusive to page load, requiring injected elements and scrolling the window
+ // The following function serves to rule out some popular browsers with known fixed-positioning issues
+ // This is a plugin option like any other, so feel free to improve or overwrite it
+ supportBlacklist: function(){
+ var w = window,
+ ua = navigator.userAgent,
+ platform = navigator.platform,
+ // Rendering engine is Webkit, and capture major version
+ wkmatch = ua.match( /AppleWebKit\/([0-9]+)/ ),
+ wkversion = !!wkmatch && wkmatch[ 1 ],
+ ffmatch = ua.match( /Fennec\/([0-9]+)/ ),
+ ffversion = !!ffmatch && ffmatch[ 1 ],
+ operammobilematch = ua.match( /Opera Mobi\/([0-9]+)/ ),
+ omversion = !!operammobilematch && operammobilematch[ 1 ];
+
+ if(
+ // iOS 4.3 and older : Platform is iPhone/Pad/Touch and Webkit version is less than 534 (ios5)
+ ( ( platform.indexOf( "iPhone" ) > -1 || platform.indexOf( "iPad" ) > -1 || platform.indexOf( "iPod" ) > -1 ) && wkversion && wkversion < 534 )
+ ||
+ // Opera Mini
+ ( w.operamini && ({}).toString.call( w.operamini ) === "[object OperaMini]" )
+ ||
+ ( operammobilematch && omversion < 7458 )
+ ||
+ //Android lte 2.1: Platform is Android and Webkit version is less than 533 (Android 2.2)
+ ( ua.indexOf( "Android" ) > -1 && wkversion && wkversion < 533 )
+ ||
+ // Firefox Mobile before 6.0 -
+ ( ffversion && ffversion < 6 )
+ ||
+ // WebOS less than 3
+ ( "palmGetResource" in window && wkversion && wkversion < 534 )
+ ||
+ // MeeGo
+ ( ua.indexOf( "MeeGo" ) > -1 && ua.indexOf( "NokiaBrowser/8.5.0" ) > -1 )
+ ){
+ return true;
+ }
+
+ return false;
+ },
+ initSelector: ":jqmData(position='fixed')"
+ },
+
+ _create: function() {
+
+ var self = this,
+ o = self.options,
+ $el = self.element,
+ tbtype = $el.is( ":jqmData(role='header')" ) ? "header" : "footer",
+ $page = $el.closest(".ui-page");
+
+ // Feature detecting support for
+ if( o.supportBlacklist() ){
+ self.destroy();
+ return;
+ }
+
+ $el.addClass( "ui-"+ tbtype +"-fixed" );
+
+ // "fullscreen" overlay positioning
+ if( o.fullscreen ){
+ $el.addClass( "ui-"+ tbtype +"-fullscreen" );
+ $page.addClass( "ui-page-" + tbtype + "-fullscreen" );
+ }
+ // If not fullscreen, add class to page to set top or bottom padding
+ else{
+ $page.addClass( "ui-page-" + tbtype + "-fixed" );
+ }
+
+ self._addTransitionClass();
+ self._bindPageEvents();
+ self._bindToggleHandlers();
+ },
+
+ _addTransitionClass: function(){
+ var tclass = this.options.transition;
+
+ if( tclass && tclass !== "none" ){
+ // use appropriate slide for header or footer
+ if( tclass === "slide" ){
+ tclass = this.element.is( ".ui-header" ) ? "slidedown" : "slideup";
+ }
+
+ this.element.addClass( tclass );
+ }
+ },
+
+ _bindPageEvents: function(){
+ var self = this,
+ o = self.options,
+ $el = self.element;
+
+ //page event bindings
+ // Fixed toolbars require page zoom to be disabled, otherwise usability issues crop up
+ // This method is meant to disable zoom while a fixed-positioned toolbar page is visible
+ $el.closest( ".ui-page" )
+ .bind( "pagebeforeshow", function(){
+ if( o.disablePageZoom ){
+ $.mobile.zoom.disable( true );
+ }
+ if( !o.visibleOnPageShow ){
+ self.hide( true );
+ }
+ } )
+ .bind( "webkitAnimationStart animationstart updatelayout", function(){
+ if( o.updatePagePadding ){
+ self.updatePagePadding();
+ }
+ })
+ .bind( "pageshow", function(){
+ self.updatePagePadding();
+ if( o.updatePagePadding ){
+ $( window ).bind( "throttledresize." + self.widgetName, function(){
+ self.updatePagePadding();
+ });
+ }
+ })
+ .bind( "pagebeforehide", function( e, ui ){
+ if( o.disablePageZoom ){
+ $.mobile.zoom.enable( true );
+ }
+ if( o.updatePagePadding ){
+ $( window ).unbind( "throttledresize." + self.widgetName );
+ }
+
+ if( o.trackPersistentToolbars ){
+ var thisFooter = $( ".ui-footer-fixed:jqmData(id)", this ),
+ thisHeader = $( ".ui-header-fixed:jqmData(id)", this ),
+ nextFooter = thisFooter.length && ui.nextPage && $( ".ui-footer-fixed:jqmData(id='" + thisFooter.jqmData( "id" ) + "')", ui.nextPage ),
+ nextHeader = thisHeader.length && ui.nextPage && $( ".ui-header-fixed:jqmData(id='" + thisHeader.jqmData( "id" ) + "')", ui.nextPage );
+
+ nextFooter = nextFooter || $();
+
+ if( nextFooter.length || nextHeader.length ){
+
+ nextFooter.add( nextHeader ).appendTo( $.mobile.pageContainer );
+
+ ui.nextPage.one( "pageshow", function(){
+ nextFooter.add( nextHeader ).appendTo( this );
+ });
+ }
+ }
+ });
+ },
+
+ _visible: true,
+
+ // This will set the content element's top or bottom padding equal to the toolbar's height
+ updatePagePadding: function() {
+ var $el = this.element,
+ header = $el.is( ".ui-header" );
+
+ // This behavior only applies to "fixed", not "fullscreen"
+ if( this.options.fullscreen ){ return; }
+
+ $el.closest( ".ui-page" ).css( "padding-" + ( header ? "top" : "bottom" ), $el.outerHeight() );
+ },
+
+ _useTransition: function( notransition ){
+ var $win = $( window ),
+ $el = this.element,
+ scroll = $win.scrollTop(),
+ elHeight = $el.height(),
+ pHeight = $el.closest( ".ui-page" ).height(),
+ viewportHeight = $.mobile.getScreenHeight(),
+ tbtype = $el.is( ":jqmData(role='header')" ) ? "header" : "footer";
+
+ return !notransition &&
+ ( this.options.transition && this.options.transition !== "none" &&
+ (
+ ( tbtype === "header" && !this.options.fullscreen && scroll > elHeight ) ||
+ ( tbtype === "footer" && !this.options.fullscreen && scroll + viewportHeight < pHeight - elHeight )
+ ) || this.options.fullscreen
+ );
+ },
+
+ show: function( notransition ){
+ var hideClass = "ui-fixed-hidden",
+ $el = this.element;
+
+ if( this._useTransition( notransition ) ){
+ $el
+ .removeClass( "out " + hideClass )
+ .addClass( "in" );
+ }
+ else {
+ $el.removeClass( hideClass );
+ }
+ this._visible = true;
+ },
+
+ hide: function( notransition ){
+ var hideClass = "ui-fixed-hidden",
+ $el = this.element,
+ // if it's a slide transition, our new transitions need the reverse class as well to slide outward
+ outclass = "out" + ( this.options.transition === "slide" ? " reverse" : "" );
+
+ if( this._useTransition( notransition ) ){
+ $el
+ .addClass( outclass )
+ .removeClass( "in" )
+ .animationComplete( function(){
+ $el.addClass( hideClass ).removeClass( outclass );
+ });
+ }
+ else {
+ $el.addClass( hideClass ).removeClass( outclass );
+ }
+ this._visible = false;
+ },
+
+ toggle: function(){
+ this[ this._visible ? "hide" : "show" ]();
+ },
+
+ _bindToggleHandlers: function(){
+ var self = this,
+ o = self.options,
+ $el = self.element;
+
+ // tap toggle
+ $el.closest( ".ui-page" )
+ .bind( "vclick", function( e ){
+ if( o.tapToggle && !$( e.target ).closest( o.tapToggleBlacklist ).length ){
+ self.toggle();
+ }
+ })
+ .bind( "focusin focusout", function( e ){
+ if( screen.width < 500 && $( e.target ).is( o.hideDuringFocus ) && !$( e.target ).closest( ".ui-header-fixed, .ui-footer-fixed" ).length ){
+ self[ ( e.type === "focusin" && self._visible ) ? "hide" : "show" ]();
+ }
+ });
+ },
+
+ destroy: function(){
+ this.element.removeClass( "ui-header-fixed ui-footer-fixed ui-header-fullscreen ui-footer-fullscreen in out fade slidedown slideup ui-fixed-hidden" );
+ this.element.closest( ".ui-page" ).removeClass( "ui-page-header-fixed ui-page-footer-fixed ui-page-header-fullscreen ui-page-footer-fullscreen" );
+ }
+
+ });
+
+ //auto self-init widgets
+ $( document )
+ .bind( "pagecreate create", function( e ){
+
+ // DEPRECATED in 1.1: support for data-fullscreen=true|false on the page element.
+ // This line ensures it still works, but we recommend moving the attribute to the toolbars themselves.
+ if( $( e.target ).jqmData( "fullscreen" ) ){
+ $( $.mobile.fixedtoolbar.prototype.options.initSelector, e.target ).not( ":jqmData(fullscreen)" ).jqmData( "fullscreen", true );
+ }
+
+ $.mobile.fixedtoolbar.prototype.enhanceWithin( e.target );
+ });
+
+})( jQuery );
+
+( function( $, window ) {
+
+ // This fix addresses an iOS bug, so return early if the UA claims it's something else.
+ if( !(/iPhone|iPad|iPod/.test( navigator.platform ) && navigator.userAgent.indexOf( "AppleWebKit" ) > -1 ) ){
+ return;
+ }
+
+ var zoom = $.mobile.zoom,
+ evt, x, y, z, aig;
+
+ function checkTilt( e ){
+ evt = e.originalEvent;
+ aig = evt.accelerationIncludingGravity;
+
+ x = Math.abs( aig.x );
+ y = Math.abs( aig.y );
+ z = Math.abs( aig.z );
+
+ // If portrait orientation and in one of the danger zones
+ if( !window.orientation && ( x > 7 || ( ( z > 6 && y < 8 || z < 8 && y > 6 ) && x > 5 ) ) ){
+ if( zoom.enabled ){
+ zoom.disable();
+ }
+ }
+ else if( !zoom.enabled ){
+ zoom.enable();
+ }
+ }
+
+ $( window )
+ .bind( "orientationchange.iosorientationfix", zoom.enable )
+ .bind( "devicemotion.iosorientationfix", checkTilt );
+
+}( jQuery, this ));
+
+( function( $, window, undefined ) {
+ var $html = $( "html" ),
+ $head = $( "head" ),
+ $window = $( window );
+
+ // trigger mobileinit event - useful hook for configuring $.mobile settings before they're used
+ $( window.document ).trigger( "mobileinit" );
+
+ // support conditions
+ // if device support condition(s) aren't met, leave things as they are -> a basic, usable experience,
+ // otherwise, proceed with the enhancements
+ if ( !$.mobile.gradeA() ) {
+ return;
+ }
+
+ // override ajaxEnabled on platforms that have known conflicts with hash history updates
+ // or generally work better browsing in regular http for full page refreshes (BB5, Opera Mini)
+ if ( $.mobile.ajaxBlacklist ) {
+ $.mobile.ajaxEnabled = false;
+ }
+
+ // Add mobile, initial load "rendering" classes to docEl
+ $html.addClass( "ui-mobile ui-mobile-rendering" );
+
+ // This is a fallback. If anything goes wrong (JS errors, etc), or events don't fire,
+ // this ensures the rendering class is removed after 5 seconds, so content is visible and accessible
+ setTimeout( hideRenderingClass, 5000 );
+
+ // loading div which appears during Ajax requests
+ // will not appear if $.mobile.loadingMessage is false
+ var loaderClass = "ui-loader",
+ $loader = $( "<div class='" + loaderClass + "'><span class='ui-icon ui-icon-loading'></span><h1></h1></div>" );
+
+ // For non-fixed supportin browsers. Position at y center (if scrollTop supported), above the activeBtn (if defined), or just 100px from top
+ function fakeFixLoader(){
+ var activeBtn = $( "." + $.mobile.activeBtnClass ).first();
+
+ $loader
+ .css({
+ top: $.support.scrollTop && $window.scrollTop() + $window.height() / 2 ||
+ activeBtn.length && activeBtn.offset().top || 100
+ });
+ }
+
+ // check position of loader to see if it appears to be "fixed" to center
+ // if not, use abs positioning
+ function checkLoaderPosition(){
+ var offset = $loader.offset(),
+ scrollTop = $window.scrollTop(),
+ screenHeight = $.mobile.getScreenHeight();
+
+ if( offset.top < scrollTop || (offset.top - scrollTop) > screenHeight ) {
+ $loader.addClass( "ui-loader-fakefix" );
+ fakeFixLoader();
+ $window
+ .unbind( "scroll", checkLoaderPosition )
+ .bind( "scroll", fakeFixLoader );
+ }
+ }
+
+ //remove initial build class (only present on first pageshow)
+ function hideRenderingClass(){
+ $html.removeClass( "ui-mobile-rendering" );
+ }
+
+ $.extend($.mobile, {
+ // turn on/off page loading message.
+ showPageLoadingMsg: function( theme, msgText, textonly ) {
+ $html.addClass( "ui-loading" );
+
+ if ( $.mobile.loadingMessage ) {
+ // text visibility from argument takes priority
+ var textVisible = textonly || $.mobile.loadingMessageTextVisible;
+
+ theme = theme || $.mobile.loadingMessageTheme,
+
+ $loader
+ .attr( "class", loaderClass + " ui-corner-all ui-body-" + ( theme || "a" ) + " ui-loader-" + ( textVisible ? "verbose" : "default" ) + ( textonly ? " ui-loader-textonly" : "" ) )
+ .find( "h1" )
+ .text( msgText || $.mobile.loadingMessage )
+ .end()
+ .appendTo( $.mobile.pageContainer );
+
+ checkLoaderPosition();
+ $window.bind( "scroll", checkLoaderPosition );
+ }
+ },
+
+ hidePageLoadingMsg: function() {
+ $html.removeClass( "ui-loading" );
+
+ if( $.mobile.loadingMessage ){
+ $loader.removeClass( "ui-loader-fakefix" );
+ }
+
+ $( window ).unbind( "scroll", fakeFixLoader );
+ $( window ).unbind( "scroll", checkLoaderPosition );
+ },
+
+ // find and enhance the pages in the dom and transition to the first page.
+ initializePage: function() {
+ // find present pages
+ var $pages = $( ":jqmData(role='page'), :jqmData(role='dialog')" );
+
+ // if no pages are found, create one with body's inner html
+ if ( !$pages.length ) {
+ $pages = $( "body" ).wrapInner( "<div data-" + $.mobile.ns + "role='page'></div>" ).children( 0 );
+ }
+
+ // add dialogs, set data-url attrs
+ $pages.each(function() {
+ var $this = $(this);
+
+ // unless the data url is already set set it to the pathname
+ if ( !$this.jqmData("url") ) {
+ $this.attr( "data-" + $.mobile.ns + "url", $this.attr( "id" ) || location.pathname + location.search );
+ }
+ });
+
+ // define first page in dom case one backs out to the directory root (not always the first page visited, but defined as fallback)
+ $.mobile.firstPage = $pages.first();
+
+ // define page container
+ $.mobile.pageContainer = $pages.first().parent().addClass( "ui-mobile-viewport" );
+
+ // alert listeners that the pagecontainer has been determined for binding
+ // to events triggered on it
+ $window.trigger( "pagecontainercreate" );
+
+ // cue page loading message
+ $.mobile.showPageLoadingMsg();
+
+ //remove initial build class (only present on first pageshow)
+ hideRenderingClass();
+
+ // if hashchange listening is disabled or there's no hash deeplink, change to the first page in the DOM
+ if ( !$.mobile.hashListeningEnabled || !$.mobile.path.stripHash( location.hash ) ) {
+ $.mobile.changePage( $.mobile.firstPage, { transition: "none", reverse: true, changeHash: false, fromHashChange: true } );
+ }
+ // otherwise, trigger a hashchange to load a deeplink
+ else {
+ $window.trigger( "hashchange", [ true ] );
+ }
+ }
+ });
+
+ // initialize events now, after mobileinit has occurred
+ $.mobile._registerInternalEvents();
+
+ // check which scrollTop value should be used by scrolling to 1 immediately at domready
+ // then check what the scroll top is. Android will report 0... others 1
+ // note that this initial scroll won't hide the address bar. It's just for the check.
+ $(function() {
+ window.scrollTo( 0, 1 );
+
+ // if defaultHomeScroll hasn't been set yet, see if scrollTop is 1
+ // it should be 1 in most browsers, but android treats 1 as 0 (for hiding addr bar)
+ // so if it's 1, use 0 from now on
+ $.mobile.defaultHomeScroll = ( !$.support.scrollTop || $(window).scrollTop() === 1 ) ? 0 : 1;
+
+
+ // TODO: Implement a proper registration mechanism with dependency handling in order to not have exceptions like the one below
+ //auto self-init widgets for those widgets that have a soft dependency on others
+ if ( $.fn.controlgroup ) {
+ $( document ).bind( "pagecreate create", function( e ){
+ $( ":jqmData(role='controlgroup')", e.target )
+ .jqmEnhanceable()
+ .controlgroup({ excludeInvisible: false });
+ });
+ }
+
+ //dom-ready inits
+ if( $.mobile.autoInitializePage ){
+ $.mobile.initializePage();
+ }
+
+ // window load event
+ // hide iOS browser chrome on load
+ $window.load( $.mobile.silentScroll );
+ });
+}( jQuery, this ));
+
+
+}));
diff --git a/h-source/Js/jquery/ui/css/excite-bike/images/ui-bg_diagonals-small_25_c5ddfc_40x40.png b/h-source/Js/jquery/ui/css/excite-bike/images/ui-bg_diagonals-small_25_c5ddfc_40x40.png
new file mode 100755
index 0000000..82524ab
--- /dev/null
+++ b/h-source/Js/jquery/ui/css/excite-bike/images/ui-bg_diagonals-small_25_c5ddfc_40x40.png
Binary files differ
diff --git a/h-source/Js/jquery/ui/css/excite-bike/images/ui-bg_diagonals-thick_20_e69700_40x40.png b/h-source/Js/jquery/ui/css/excite-bike/images/ui-bg_diagonals-thick_20_e69700_40x40.png
new file mode 100755
index 0000000..6aed97a
--- /dev/null
+++ b/h-source/Js/jquery/ui/css/excite-bike/images/ui-bg_diagonals-thick_20_e69700_40x40.png
Binary files differ
diff --git a/h-source/Js/jquery/ui/css/excite-bike/images/ui-bg_diagonals-thick_22_1484e6_40x40.png b/h-source/Js/jquery/ui/css/excite-bike/images/ui-bg_diagonals-thick_22_1484e6_40x40.png
new file mode 100755
index 0000000..f11ca67
--- /dev/null
+++ b/h-source/Js/jquery/ui/css/excite-bike/images/ui-bg_diagonals-thick_22_1484e6_40x40.png
Binary files differ
diff --git a/h-source/Js/jquery/ui/css/excite-bike/images/ui-bg_diagonals-thick_26_2293f7_40x40.png b/h-source/Js/jquery/ui/css/excite-bike/images/ui-bg_diagonals-thick_26_2293f7_40x40.png
new file mode 100755
index 0000000..68306d1
--- /dev/null
+++ b/h-source/Js/jquery/ui/css/excite-bike/images/ui-bg_diagonals-thick_26_2293f7_40x40.png
Binary files differ
diff --git a/h-source/Js/jquery/ui/css/excite-bike/images/ui-bg_flat_0_e69700_40x100.png b/h-source/Js/jquery/ui/css/excite-bike/images/ui-bg_flat_0_e69700_40x100.png
new file mode 100755
index 0000000..f567c28
--- /dev/null
+++ b/h-source/Js/jquery/ui/css/excite-bike/images/ui-bg_flat_0_e69700_40x100.png
Binary files differ
diff --git a/h-source/Js/jquery/ui/css/excite-bike/images/ui-bg_flat_0_e6b900_40x100.png b/h-source/Js/jquery/ui/css/excite-bike/images/ui-bg_flat_0_e6b900_40x100.png
new file mode 100755
index 0000000..29e9965
--- /dev/null
+++ b/h-source/Js/jquery/ui/css/excite-bike/images/ui-bg_flat_0_e6b900_40x100.png
Binary files differ
diff --git a/h-source/Js/jquery/ui/css/excite-bike/images/ui-bg_highlight-soft_100_f9f9f9_1x100.png b/h-source/Js/jquery/ui/css/excite-bike/images/ui-bg_highlight-soft_100_f9f9f9_1x100.png
new file mode 100755
index 0000000..9a46d19
--- /dev/null
+++ b/h-source/Js/jquery/ui/css/excite-bike/images/ui-bg_highlight-soft_100_f9f9f9_1x100.png
Binary files differ
diff --git a/h-source/Js/jquery/ui/css/excite-bike/images/ui-bg_inset-hard_100_eeeeee_1x100.png b/h-source/Js/jquery/ui/css/excite-bike/images/ui-bg_inset-hard_100_eeeeee_1x100.png
new file mode 100755
index 0000000..f811f30
--- /dev/null
+++ b/h-source/Js/jquery/ui/css/excite-bike/images/ui-bg_inset-hard_100_eeeeee_1x100.png
Binary files differ
diff --git a/h-source/Js/jquery/ui/css/excite-bike/images/ui-icons_0a82eb_256x240.png b/h-source/Js/jquery/ui/css/excite-bike/images/ui-icons_0a82eb_256x240.png
new file mode 100755
index 0000000..755fe99
--- /dev/null
+++ b/h-source/Js/jquery/ui/css/excite-bike/images/ui-icons_0a82eb_256x240.png
Binary files differ
diff --git a/h-source/Js/jquery/ui/css/excite-bike/images/ui-icons_0b54d5_256x240.png b/h-source/Js/jquery/ui/css/excite-bike/images/ui-icons_0b54d5_256x240.png
new file mode 100755
index 0000000..98705f9
--- /dev/null
+++ b/h-source/Js/jquery/ui/css/excite-bike/images/ui-icons_0b54d5_256x240.png
Binary files differ
diff --git a/h-source/Js/jquery/ui/css/excite-bike/images/ui-icons_5fa5e3_256x240.png b/h-source/Js/jquery/ui/css/excite-bike/images/ui-icons_5fa5e3_256x240.png
new file mode 100755
index 0000000..2179078
--- /dev/null
+++ b/h-source/Js/jquery/ui/css/excite-bike/images/ui-icons_5fa5e3_256x240.png
Binary files differ
diff --git a/h-source/Js/jquery/ui/css/excite-bike/images/ui-icons_fcdd4a_256x240.png b/h-source/Js/jquery/ui/css/excite-bike/images/ui-icons_fcdd4a_256x240.png
new file mode 100755
index 0000000..de76ce2
--- /dev/null
+++ b/h-source/Js/jquery/ui/css/excite-bike/images/ui-icons_fcdd4a_256x240.png
Binary files differ
diff --git a/h-source/Js/jquery/ui/css/excite-bike/images/ui-icons_ffffff_256x240.png b/h-source/Js/jquery/ui/css/excite-bike/images/ui-icons_ffffff_256x240.png
new file mode 100755
index 0000000..42f8f99
--- /dev/null
+++ b/h-source/Js/jquery/ui/css/excite-bike/images/ui-icons_ffffff_256x240.png
Binary files differ
diff --git a/h-source/Js/jquery/ui/css/excite-bike/jquery-ui-1.8.14.custom.css b/h-source/Js/jquery/ui/css/excite-bike/jquery-ui-1.8.14.custom.css
new file mode 100644
index 0000000..dc3c9bc
--- /dev/null
+++ b/h-source/Js/jquery/ui/css/excite-bike/jquery-ui-1.8.14.custom.css
@@ -0,0 +1,328 @@
+/*
+ * jQuery UI CSS Framework 1.8.14
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Theming/API
+ */
+
+/* Layout helpers
+----------------------------------*/
+.ui-helper-hidden { display: none; }
+.ui-helper-hidden-accessible { position: absolute !important; clip: rect(1px 1px 1px 1px); clip: rect(1px,1px,1px,1px); }
+.ui-helper-reset { margin: 0; padding: 0; border: 0; outline: 0; line-height: 1.3; text-decoration: none; font-size: 100%; list-style: none; }
+.ui-helper-clearfix:after { content: "."; display: block; height: 0; clear: both; visibility: hidden; }
+.ui-helper-clearfix { display: inline-block; }
+/* required comment for clearfix to work in Opera \*/
+* html .ui-helper-clearfix { height:1%; }
+.ui-helper-clearfix { display:block; }
+/* end clearfix */
+.ui-helper-zfix { width: 100%; height: 100%; top: 0; left: 0; position: absolute; opacity: 0; filter:Alpha(Opacity=0); }
+
+
+/* Interaction Cues
+----------------------------------*/
+.ui-state-disabled { cursor: default !important; }
+
+
+/* Icons
+----------------------------------*/
+
+/* states and images */
+.ui-icon { display: block; text-indent: -99999px; overflow: hidden; background-repeat: no-repeat; }
+
+
+/* Misc visuals
+----------------------------------*/
+
+/* Overlays */
+.ui-widget-overlay { position: absolute; top: 0; left: 0; width: 100%; height: 100%; }
+
+
+/*
+ * jQuery UI CSS Framework 1.8.14
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Theming/API
+ *
+ * To view and modify this theme, visit http://jqueryui.com/themeroller/?ffDefault=segoe%20ui,%20Arial,%20sans-serif&fwDefault=bold&fsDefault=1.1em&cornerRadius=3px&bgColorHeader=f9f9f9&bgTextureHeader=03_highlight_soft.png&bgImgOpacityHeader=100&borderColorHeader=cccccc&fcHeader=e69700&iconColorHeader=5fa5e3&bgColorContent=eeeeee&bgTextureContent=06_inset_hard.png&bgImgOpacityContent=100&borderColorContent=aaaaaa&fcContent=222222&iconColorContent=0a82eb&bgColorDefault=1484e6&bgTextureDefault=08_diagonals_thick.png&bgImgOpacityDefault=22&borderColorDefault=ffffff&fcDefault=ffffff&iconColorDefault=fcdd4a&bgColorHover=2293f7&bgTextureHover=08_diagonals_thick.png&bgImgOpacityHover=26&borderColorHover=2293f7&fcHover=ffffff&iconColorHover=ffffff&bgColorActive=e69700&bgTextureActive=08_diagonals_thick.png&bgImgOpacityActive=20&borderColorActive=e69700&fcActive=ffffff&iconColorActive=ffffff&bgColorHighlight=c5ddfc&bgTextureHighlight=07_diagonals_small.png&bgImgOpacityHighlight=25&borderColorHighlight=ffffff&fcHighlight=333333&iconColorHighlight=0b54d5&bgColorError=e69700&bgTextureError=08_diagonals_thick.png&bgImgOpacityError=20&borderColorError=e69700&fcError=ffffff&iconColorError=ffffff&bgColorOverlay=e6b900&bgTextureOverlay=01_flat.png&bgImgOpacityOverlay=0&opacityOverlay=30&bgColorShadow=e69700&bgTextureShadow=01_flat.png&bgImgOpacityShadow=0&opacityShadow=20&thicknessShadow=0px&offsetTopShadow=6px&offsetLeftShadow=6px&cornerRadiusShadow=3px
+ */
+
+
+/* Component containers
+----------------------------------*/
+.ui-widget { font-family: segoe ui, Arial, sans-serif; font-size: 1.1em; }
+.ui-widget .ui-widget { font-size: 1em; }
+.ui-widget input, .ui-widget select, .ui-widget textarea, .ui-widget button { font-family: segoe ui, Arial, sans-serif; font-size: 1em; }
+.ui-widget-content { border: 1px solid #aaaaaa; background: #eeeeee url(images/ui-bg_inset-hard_100_eeeeee_1x100.png) 50% bottom repeat-x; color: #222222; }
+.ui-widget-content a { color: #222222; }
+.ui-widget-header { border: 1px solid #cccccc; background: #f9f9f9 url(images/ui-bg_highlight-soft_100_f9f9f9_1x100.png) 50% 50% repeat-x; color: #e69700; font-weight: bold; }
+.ui-widget-header a { color: #e69700; }
+
+/* Interaction states
+----------------------------------*/
+.ui-state-default, .ui-widget-content .ui-state-default, .ui-widget-header .ui-state-default { border: 1px solid #ffffff; background: #1484e6; font-weight: bold; color: #ffffff; }
+.ui-state-default a, .ui-state-default a:link, .ui-state-default a:visited { color: #ffffff; text-decoration: none; }
+.ui-state-hover, .ui-widget-content .ui-state-hover, .ui-widget-header .ui-state-hover, .ui-state-focus, .ui-widget-content .ui-state-focus, .ui-widget-header .ui-state-focus { border: 1px solid #2293f7; background: #2293f7 url(images/ui-bg_diagonals-thick_26_2293f7_40x40.png) 50% 50% repeat; font-weight: bold; color: #ffffff; }
+.ui-state-hover a, .ui-state-hover a:hover { color: #ffffff; text-decoration: none; }
+.ui-state-active, .ui-widget-content .ui-state-active, .ui-widget-header .ui-state-active { border: 1px solid #e69700; background: #e69700; font-weight: bold; color: #ffffff; }
+.ui-state-active a, .ui-state-active a:link, .ui-state-active a:visited { color: #ffffff; text-decoration: none; }
+.ui-widget :active { outline: none; }
+
+/* Interaction Cues
+----------------------------------*/
+.ui-state-highlight, .ui-widget-content .ui-state-highlight, .ui-widget-header .ui-state-highlight {border: 1px solid #ffffff; background: #c5ddfc url(images/ui-bg_diagonals-small_25_c5ddfc_40x40.png) 50% 50% repeat; color: #333333; }
+.ui-state-highlight a, .ui-widget-content .ui-state-highlight a,.ui-widget-header .ui-state-highlight a { color: #333333; }
+.ui-state-error, .ui-widget-content .ui-state-error, .ui-widget-header .ui-state-error {border: 1px solid #e69700; background: #e69700 url(images/ui-bg_diagonals-thick_20_e69700_40x40.png) 50% 50% repeat; color: #ffffff; }
+.ui-state-error a, .ui-widget-content .ui-state-error a, .ui-widget-header .ui-state-error a { color: #ffffff; }
+.ui-state-error-text, .ui-widget-content .ui-state-error-text, .ui-widget-header .ui-state-error-text { color: #ffffff; }
+.ui-priority-primary, .ui-widget-content .ui-priority-primary, .ui-widget-header .ui-priority-primary { font-weight: bold; }
+.ui-priority-secondary, .ui-widget-content .ui-priority-secondary, .ui-widget-header .ui-priority-secondary { opacity: .7; filter:Alpha(Opacity=70); font-weight: normal; }
+.ui-state-disabled, .ui-widget-content .ui-state-disabled, .ui-widget-header .ui-state-disabled { opacity: .35; filter:Alpha(Opacity=35); background-image: none; }
+
+/* Icons
+----------------------------------*/
+
+/* states and images */
+.ui-icon { width: 16px; height: 16px; background-image: url(images/ui-icons_0a82eb_256x240.png); }
+.ui-widget-content .ui-icon {background-image: url(images/ui-icons_0a82eb_256x240.png); }
+.ui-widget-header .ui-icon {background-image: url(images/ui-icons_5fa5e3_256x240.png); }
+.ui-state-default .ui-icon { background-image: url(images/ui-icons_fcdd4a_256x240.png); }
+.ui-state-hover .ui-icon, .ui-state-focus .ui-icon {background-image: url(images/ui-icons_ffffff_256x240.png); }
+.ui-state-active .ui-icon {background-image: url(images/ui-icons_ffffff_256x240.png); }
+.ui-state-highlight .ui-icon {background-image: url(images/ui-icons_0b54d5_256x240.png); }
+.ui-state-error .ui-icon, .ui-state-error-text .ui-icon {background-image: url(images/ui-icons_ffffff_256x240.png); }
+
+/* positioning */
+.ui-icon-carat-1-n { background-position: 0 0; }
+.ui-icon-carat-1-ne { background-position: -16px 0; }
+.ui-icon-carat-1-e { background-position: -32px 0; }
+.ui-icon-carat-1-se { background-position: -48px 0; }
+.ui-icon-carat-1-s { background-position: -64px 0; }
+.ui-icon-carat-1-sw { background-position: -80px 0; }
+.ui-icon-carat-1-w { background-position: -96px 0; }
+.ui-icon-carat-1-nw { background-position: -112px 0; }
+.ui-icon-carat-2-n-s { background-position: -128px 0; }
+.ui-icon-carat-2-e-w { background-position: -144px 0; }
+.ui-icon-triangle-1-n { background-position: 0 -16px; }
+.ui-icon-triangle-1-ne { background-position: -16px -16px; }
+.ui-icon-triangle-1-e { background-position: -32px -16px; }
+.ui-icon-triangle-1-se { background-position: -48px -16px; }
+.ui-icon-triangle-1-s { background-position: -64px -16px; }
+.ui-icon-triangle-1-sw { background-position: -80px -16px; }
+.ui-icon-triangle-1-w { background-position: -96px -16px; }
+.ui-icon-triangle-1-nw { background-position: -112px -16px; }
+.ui-icon-triangle-2-n-s { background-position: -128px -16px; }
+.ui-icon-triangle-2-e-w { background-position: -144px -16px; }
+.ui-icon-arrow-1-n { background-position: 0 -32px; }
+.ui-icon-arrow-1-ne { background-position: -16px -32px; }
+.ui-icon-arrow-1-e { background-position: -32px -32px; }
+.ui-icon-arrow-1-se { background-position: -48px -32px; }
+.ui-icon-arrow-1-s { background-position: -64px -32px; }
+.ui-icon-arrow-1-sw { background-position: -80px -32px; }
+.ui-icon-arrow-1-w { background-position: -96px -32px; }
+.ui-icon-arrow-1-nw { background-position: -112px -32px; }
+.ui-icon-arrow-2-n-s { background-position: -128px -32px; }
+.ui-icon-arrow-2-ne-sw { background-position: -144px -32px; }
+.ui-icon-arrow-2-e-w { background-position: -160px -32px; }
+.ui-icon-arrow-2-se-nw { background-position: -176px -32px; }
+.ui-icon-arrowstop-1-n { background-position: -192px -32px; }
+.ui-icon-arrowstop-1-e { background-position: -208px -32px; }
+.ui-icon-arrowstop-1-s { background-position: -224px -32px; }
+.ui-icon-arrowstop-1-w { background-position: -240px -32px; }
+.ui-icon-arrowthick-1-n { background-position: 0 -48px; }
+.ui-icon-arrowthick-1-ne { background-position: -16px -48px; }
+.ui-icon-arrowthick-1-e { background-position: -32px -48px; }
+.ui-icon-arrowthick-1-se { background-position: -48px -48px; }
+.ui-icon-arrowthick-1-s { background-position: -64px -48px; }
+.ui-icon-arrowthick-1-sw { background-position: -80px -48px; }
+.ui-icon-arrowthick-1-w { background-position: -96px -48px; }
+.ui-icon-arrowthick-1-nw { background-position: -112px -48px; }
+.ui-icon-arrowthick-2-n-s { background-position: -128px -48px; }
+.ui-icon-arrowthick-2-ne-sw { background-position: -144px -48px; }
+.ui-icon-arrowthick-2-e-w { background-position: -160px -48px; }
+.ui-icon-arrowthick-2-se-nw { background-position: -176px -48px; }
+.ui-icon-arrowthickstop-1-n { background-position: -192px -48px; }
+.ui-icon-arrowthickstop-1-e { background-position: -208px -48px; }
+.ui-icon-arrowthickstop-1-s { background-position: -224px -48px; }
+.ui-icon-arrowthickstop-1-w { background-position: -240px -48px; }
+.ui-icon-arrowreturnthick-1-w { background-position: 0 -64px; }
+.ui-icon-arrowreturnthick-1-n { background-position: -16px -64px; }
+.ui-icon-arrowreturnthick-1-e { background-position: -32px -64px; }
+.ui-icon-arrowreturnthick-1-s { background-position: -48px -64px; }
+.ui-icon-arrowreturn-1-w { background-position: -64px -64px; }
+.ui-icon-arrowreturn-1-n { background-position: -80px -64px; }
+.ui-icon-arrowreturn-1-e { background-position: -96px -64px; }
+.ui-icon-arrowreturn-1-s { background-position: -112px -64px; }
+.ui-icon-arrowrefresh-1-w { background-position: -128px -64px; }
+.ui-icon-arrowrefresh-1-n { background-position: -144px -64px; }
+.ui-icon-arrowrefresh-1-e { background-position: -160px -64px; }
+.ui-icon-arrowrefresh-1-s { background-position: -176px -64px; }
+.ui-icon-arrow-4 { background-position: 0 -80px; }
+.ui-icon-arrow-4-diag { background-position: -16px -80px; }
+.ui-icon-extlink { background-position: -32px -80px; }
+.ui-icon-newwin { background-position: -48px -80px; }
+.ui-icon-refresh { background-position: -64px -80px; }
+.ui-icon-shuffle { background-position: -80px -80px; }
+.ui-icon-transfer-e-w { background-position: -96px -80px; }
+.ui-icon-transferthick-e-w { background-position: -112px -80px; }
+.ui-icon-folder-collapsed { background-position: 0 -96px; }
+.ui-icon-folder-open { background-position: -16px -96px; }
+.ui-icon-document { background-position: -32px -96px; }
+.ui-icon-document-b { background-position: -48px -96px; }
+.ui-icon-note { background-position: -64px -96px; }
+.ui-icon-mail-closed { background-position: -80px -96px; }
+.ui-icon-mail-open { background-position: -96px -96px; }
+.ui-icon-suitcase { background-position: -112px -96px; }
+.ui-icon-comment { background-position: -128px -96px; }
+.ui-icon-person { background-position: -144px -96px; }
+.ui-icon-print { background-position: -160px -96px; }
+.ui-icon-trash { background-position: -176px -96px; }
+.ui-icon-locked { background-position: -192px -96px; }
+.ui-icon-unlocked { background-position: -208px -96px; }
+.ui-icon-bookmark { background-position: -224px -96px; }
+.ui-icon-tag { background-position: -240px -96px; }
+.ui-icon-home { background-position: 0 -112px; }
+.ui-icon-flag { background-position: -16px -112px; }
+.ui-icon-calendar { background-position: -32px -112px; }
+.ui-icon-cart { background-position: -48px -112px; }
+.ui-icon-pencil { background-position: -64px -112px; }
+.ui-icon-clock { background-position: -80px -112px; }
+.ui-icon-disk { background-position: -96px -112px; }
+.ui-icon-calculator { background-position: -112px -112px; }
+.ui-icon-zoomin { background-position: -128px -112px; }
+.ui-icon-zoomout { background-position: -144px -112px; }
+.ui-icon-search { background-position: -160px -112px; }
+.ui-icon-wrench { background-position: -176px -112px; }
+.ui-icon-gear { background-position: -192px -112px; }
+.ui-icon-heart { background-position: -208px -112px; }
+.ui-icon-star { background-position: -224px -112px; }
+.ui-icon-link { background-position: -240px -112px; }
+.ui-icon-cancel { background-position: 0 -128px; }
+.ui-icon-plus { background-position: -16px -128px; }
+.ui-icon-plusthick { background-position: -32px -128px; }
+.ui-icon-minus { background-position: -48px -128px; }
+.ui-icon-minusthick { background-position: -64px -128px; }
+.ui-icon-close { background-position: -80px -128px; }
+.ui-icon-closethick { background-position: -96px -128px; }
+.ui-icon-key { background-position: -112px -128px; }
+.ui-icon-lightbulb { background-position: -128px -128px; }
+.ui-icon-scissors { background-position: -144px -128px; }
+.ui-icon-clipboard { background-position: -160px -128px; }
+.ui-icon-copy { background-position: -176px -128px; }
+.ui-icon-contact { background-position: -192px -128px; }
+.ui-icon-image { background-position: -208px -128px; }
+.ui-icon-video { background-position: -224px -128px; }
+.ui-icon-script { background-position: -240px -128px; }
+.ui-icon-alert { background-position: 0 -144px; }
+.ui-icon-info { background-position: -16px -144px; }
+.ui-icon-notice { background-position: -32px -144px; }
+.ui-icon-help { background-position: -48px -144px; }
+.ui-icon-check { background-position: -64px -144px; }
+.ui-icon-bullet { background-position: -80px -144px; }
+.ui-icon-radio-off { background-position: -96px -144px; }
+.ui-icon-radio-on { background-position: -112px -144px; }
+.ui-icon-pin-w { background-position: -128px -144px; }
+.ui-icon-pin-s { background-position: -144px -144px; }
+.ui-icon-play { background-position: 0 -160px; }
+.ui-icon-pause { background-position: -16px -160px; }
+.ui-icon-seek-next { background-position: -32px -160px; }
+.ui-icon-seek-prev { background-position: -48px -160px; }
+.ui-icon-seek-end { background-position: -64px -160px; }
+.ui-icon-seek-start { background-position: -80px -160px; }
+/* ui-icon-seek-first is deprecated, use ui-icon-seek-start instead */
+.ui-icon-seek-first { background-position: -80px -160px; }
+.ui-icon-stop { background-position: -96px -160px; }
+.ui-icon-eject { background-position: -112px -160px; }
+.ui-icon-volume-off { background-position: -128px -160px; }
+.ui-icon-volume-on { background-position: -144px -160px; }
+.ui-icon-power { background-position: 0 -176px; }
+.ui-icon-signal-diag { background-position: -16px -176px; }
+.ui-icon-signal { background-position: -32px -176px; }
+.ui-icon-battery-0 { background-position: -48px -176px; }
+.ui-icon-battery-1 { background-position: -64px -176px; }
+.ui-icon-battery-2 { background-position: -80px -176px; }
+.ui-icon-battery-3 { background-position: -96px -176px; }
+.ui-icon-circle-plus { background-position: 0 -192px; }
+.ui-icon-circle-minus { background-position: -16px -192px; }
+.ui-icon-circle-close { background-position: -32px -192px; }
+.ui-icon-circle-triangle-e { background-position: -48px -192px; }
+.ui-icon-circle-triangle-s { background-position: -64px -192px; }
+.ui-icon-circle-triangle-w { background-position: -80px -192px; }
+.ui-icon-circle-triangle-n { background-position: -96px -192px; }
+.ui-icon-circle-arrow-e { background-position: -112px -192px; }
+.ui-icon-circle-arrow-s { background-position: -128px -192px; }
+.ui-icon-circle-arrow-w { background-position: -144px -192px; }
+.ui-icon-circle-arrow-n { background-position: -160px -192px; }
+.ui-icon-circle-zoomin { background-position: -176px -192px; }
+.ui-icon-circle-zoomout { background-position: -192px -192px; }
+.ui-icon-circle-check { background-position: -208px -192px; }
+.ui-icon-circlesmall-plus { background-position: 0 -208px; }
+.ui-icon-circlesmall-minus { background-position: -16px -208px; }
+.ui-icon-circlesmall-close { background-position: -32px -208px; }
+.ui-icon-squaresmall-plus { background-position: -48px -208px; }
+.ui-icon-squaresmall-minus { background-position: -64px -208px; }
+.ui-icon-squaresmall-close { background-position: -80px -208px; }
+.ui-icon-grip-dotted-vertical { background-position: 0 -224px; }
+.ui-icon-grip-dotted-horizontal { background-position: -16px -224px; }
+.ui-icon-grip-solid-vertical { background-position: -32px -224px; }
+.ui-icon-grip-solid-horizontal { background-position: -48px -224px; }
+.ui-icon-gripsmall-diagonal-se { background-position: -64px -224px; }
+.ui-icon-grip-diagonal-se { background-position: -80px -224px; }
+
+
+/* Misc visuals
+----------------------------------*/
+
+/* Corner radius */
+.ui-corner-all, .ui-corner-top, .ui-corner-left, .ui-corner-tl { -moz-border-radius-topleft: 3px; -webkit-border-top-left-radius: 3px; -khtml-border-top-left-radius: 3px; border-top-left-radius: 3px; }
+.ui-corner-all, .ui-corner-top, .ui-corner-right, .ui-corner-tr { -moz-border-radius-topright: 3px; -webkit-border-top-right-radius: 3px; -khtml-border-top-right-radius: 3px; border-top-right-radius: 3px; }
+.ui-corner-all, .ui-corner-bottom, .ui-corner-left, .ui-corner-bl { -moz-border-radius-bottomleft: 3px; -webkit-border-bottom-left-radius: 3px; -khtml-border-bottom-left-radius: 3px; border-bottom-left-radius: 3px; }
+.ui-corner-all, .ui-corner-bottom, .ui-corner-right, .ui-corner-br { -moz-border-radius-bottomright: 3px; -webkit-border-bottom-right-radius: 3px; -khtml-border-bottom-right-radius: 3px; border-bottom-right-radius: 3px; }
+
+/* Overlays */
+.ui-widget-overlay { background: #e6b900 url(images/ui-bg_flat_0_e6b900_40x100.png) 50% 50% repeat-x; opacity: .30;filter:Alpha(Opacity=30); }
+.ui-widget-shadow { margin: 6px 0 0 6px; padding: 0px; background: #e69700 url(images/ui-bg_flat_0_e69700_40x100.png) 50% 50% repeat-x; opacity: .20;filter:Alpha(Opacity=20); -moz-border-radius: 3px; -khtml-border-radius: 3px; -webkit-border-radius: 3px; border-radius: 3px; }/*
+ * jQuery UI Dialog 1.8.14
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Dialog#theming
+ */
+.ui-dialog { position: absolute; padding: .2em; width: 300px; overflow: hidden; }
+.ui-dialog .ui-dialog-titlebar { padding: .4em 1em; position: relative; }
+.ui-dialog .ui-dialog-title { float: left; margin: .1em 16px .1em 0; }
+.ui-dialog .ui-dialog-titlebar-close { position: absolute; right: .3em; top: 50%; width: 19px; margin: -10px 0 0 0; padding: 1px; height: 18px; }
+.ui-dialog .ui-dialog-titlebar-close span { display: block; margin: 1px; }
+.ui-dialog .ui-dialog-titlebar-close:hover, .ui-dialog .ui-dialog-titlebar-close:focus { padding: 0; }
+.ui-dialog .ui-dialog-content { position: relative; border: 0; padding: .5em 1em; background: none; overflow: auto; zoom: 1; }
+.ui-dialog .ui-dialog-buttonpane { text-align: left; border-width: 1px 0 0 0; background-image: none; margin: .5em 0 0 0; padding: .3em 1em .5em .4em; }
+.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset { float: right; }
+.ui-dialog .ui-dialog-buttonpane button { margin: .5em .4em .5em 0; cursor: pointer; }
+.ui-dialog .ui-resizable-se { width: 14px; height: 14px; right: 3px; bottom: 3px; }
+.ui-draggable .ui-dialog-titlebar { cursor: move; }
+/*
+ * jQuery UI Tabs 1.8.14
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Tabs#theming
+ */
+.ui-tabs { position: relative; padding: .2em; zoom: 1; } /* position: relative prevents IE scroll bug (element with position: relative inside container with overflow: auto appear as "fixed") */
+.ui-tabs .ui-tabs-nav { margin: 0; padding: .2em .2em 0; }
+.ui-tabs .ui-tabs-nav li { list-style: none; float: left; position: relative; top: 1px; margin: 0 .2em 1px 0; border-bottom: 0 !important; padding: 0; white-space: nowrap; }
+.ui-tabs .ui-tabs-nav li a { float: left; padding: .5em 1em; text-decoration: none; }
+.ui-tabs .ui-tabs-nav li.ui-tabs-selected { margin-bottom: 0; padding-bottom: 1px; }
+.ui-tabs .ui-tabs-nav li.ui-tabs-selected a, .ui-tabs .ui-tabs-nav li.ui-state-disabled a, .ui-tabs .ui-tabs-nav li.ui-state-processing a { cursor: text; }
+.ui-tabs .ui-tabs-nav li a, .ui-tabs.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-selected a { cursor: pointer; } /* first selector in group seems obsolete, but required to overcome bug in Opera applying cursor: text overall if defined elsewhere... */
+.ui-tabs .ui-tabs-panel { display: block; border-width: 0; padding: 0.6em 0.4em; background: none; }
+.ui-tabs .ui-tabs-hide { display: none !important; }
diff --git a/h-source/Js/jquery/ui/js/jquery-ui-1.8.21.custom.js b/h-source/Js/jquery/ui/js/jquery-ui-1.8.21.custom.js
new file mode 100644
index 0000000..42413ed
--- /dev/null
+++ b/h-source/Js/jquery/ui/js/jquery-ui-1.8.21.custom.js
@@ -0,0 +1,1937 @@
+/*!
+ * jQuery UI 1.8.21
+ *
+ * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI
+ */
+(function( $, undefined ) {
+
+// prevent duplicate loading
+// this is only a problem because we proxy existing functions
+// and we don't want to double proxy them
+$.ui = $.ui || {};
+if ( $.ui.version ) {
+ return;
+}
+
+$.extend( $.ui, {
+ version: "1.8.21",
+
+ keyCode: {
+ ALT: 18,
+ BACKSPACE: 8,
+ CAPS_LOCK: 20,
+ COMMA: 188,
+ COMMAND: 91,
+ COMMAND_LEFT: 91, // COMMAND
+ COMMAND_RIGHT: 93,
+ CONTROL: 17,
+ DELETE: 46,
+ DOWN: 40,
+ END: 35,
+ ENTER: 13,
+ ESCAPE: 27,
+ HOME: 36,
+ INSERT: 45,
+ LEFT: 37,
+ MENU: 93, // COMMAND_RIGHT
+ NUMPAD_ADD: 107,
+ NUMPAD_DECIMAL: 110,
+ NUMPAD_DIVIDE: 111,
+ NUMPAD_ENTER: 108,
+ NUMPAD_MULTIPLY: 106,
+ NUMPAD_SUBTRACT: 109,
+ PAGE_DOWN: 34,
+ PAGE_UP: 33,
+ PERIOD: 190,
+ RIGHT: 39,
+ SHIFT: 16,
+ SPACE: 32,
+ TAB: 9,
+ UP: 38,
+ WINDOWS: 91 // COMMAND
+ }
+});
+
+// plugins
+$.fn.extend({
+ propAttr: $.fn.prop || $.fn.attr,
+
+ _focus: $.fn.focus,
+ focus: function( delay, fn ) {
+ return typeof delay === "number" ?
+ this.each(function() {
+ var elem = this;
+ setTimeout(function() {
+ $( elem ).focus();
+ if ( fn ) {
+ fn.call( elem );
+ }
+ }, delay );
+ }) :
+ this._focus.apply( this, arguments );
+ },
+
+ scrollParent: function() {
+ var scrollParent;
+ if (($.browser.msie && (/(static|relative)/).test(this.css('position'))) || (/absolute/).test(this.css('position'))) {
+ scrollParent = this.parents().filter(function() {
+ return (/(relative|absolute|fixed)/).test($.curCSS(this,'position',1)) && (/(auto|scroll)/).test($.curCSS(this,'overflow',1)+$.curCSS(this,'overflow-y',1)+$.curCSS(this,'overflow-x',1));
+ }).eq(0);
+ } else {
+ scrollParent = this.parents().filter(function() {
+ return (/(auto|scroll)/).test($.curCSS(this,'overflow',1)+$.curCSS(this,'overflow-y',1)+$.curCSS(this,'overflow-x',1));
+ }).eq(0);
+ }
+
+ return (/fixed/).test(this.css('position')) || !scrollParent.length ? $(document) : scrollParent;
+ },
+
+ zIndex: function( zIndex ) {
+ if ( zIndex !== undefined ) {
+ return this.css( "zIndex", zIndex );
+ }
+
+ if ( this.length ) {
+ var elem = $( this[ 0 ] ), position, value;
+ while ( elem.length && elem[ 0 ] !== document ) {
+ // Ignore z-index if position is set to a value where z-index is ignored by the browser
+ // This makes behavior of this function consistent across browsers
+ // WebKit always returns auto if the element is positioned
+ position = elem.css( "position" );
+ if ( position === "absolute" || position === "relative" || position === "fixed" ) {
+ // IE returns 0 when zIndex is not specified
+ // other browsers return a string
+ // we ignore the case of nested elements with an explicit value of 0
+ // <div style="z-index: -10;"><div style="z-index: 0;"></div></div>
+ value = parseInt( elem.css( "zIndex" ), 10 );
+ if ( !isNaN( value ) && value !== 0 ) {
+ return value;
+ }
+ }
+ elem = elem.parent();
+ }
+ }
+
+ return 0;
+ },
+
+ disableSelection: function() {
+ return this.bind( ( $.support.selectstart ? "selectstart" : "mousedown" ) +
+ ".ui-disableSelection", function( event ) {
+ event.preventDefault();
+ });
+ },
+
+ enableSelection: function() {
+ return this.unbind( ".ui-disableSelection" );
+ }
+});
+
+$.each( [ "Width", "Height" ], function( i, name ) {
+ var side = name === "Width" ? [ "Left", "Right" ] : [ "Top", "Bottom" ],
+ type = name.toLowerCase(),
+ orig = {
+ innerWidth: $.fn.innerWidth,
+ innerHeight: $.fn.innerHeight,
+ outerWidth: $.fn.outerWidth,
+ outerHeight: $.fn.outerHeight
+ };
+
+ function reduce( elem, size, border, margin ) {
+ $.each( side, function() {
+ size -= parseFloat( $.curCSS( elem, "padding" + this, true) ) || 0;
+ if ( border ) {
+ size -= parseFloat( $.curCSS( elem, "border" + this + "Width", true) ) || 0;
+ }
+ if ( margin ) {
+ size -= parseFloat( $.curCSS( elem, "margin" + this, true) ) || 0;
+ }
+ });
+ return size;
+ }
+
+ $.fn[ "inner" + name ] = function( size ) {
+ if ( size === undefined ) {
+ return orig[ "inner" + name ].call( this );
+ }
+
+ return this.each(function() {
+ $( this ).css( type, reduce( this, size ) + "px" );
+ });
+ };
+
+ $.fn[ "outer" + name] = function( size, margin ) {
+ if ( typeof size !== "number" ) {
+ return orig[ "outer" + name ].call( this, size );
+ }
+
+ return this.each(function() {
+ $( this).css( type, reduce( this, size, true, margin ) + "px" );
+ });
+ };
+});
+
+// selectors
+function focusable( element, isTabIndexNotNaN ) {
+ var nodeName = element.nodeName.toLowerCase();
+ if ( "area" === nodeName ) {
+ var map = element.parentNode,
+ mapName = map.name,
+ img;
+ if ( !element.href || !mapName || map.nodeName.toLowerCase() !== "map" ) {
+ return false;
+ }
+ img = $( "img[usemap=#" + mapName + "]" )[0];
+ return !!img && visible( img );
+ }
+ return ( /input|select|textarea|button|object/.test( nodeName )
+ ? !element.disabled
+ : "a" == nodeName
+ ? element.href || isTabIndexNotNaN
+ : isTabIndexNotNaN)
+ // the element and all of its ancestors must be visible
+ && visible( element );
+}
+
+function visible( element ) {
+ return !$( element ).parents().andSelf().filter(function() {
+ return $.curCSS( this, "visibility" ) === "hidden" ||
+ $.expr.filters.hidden( this );
+ }).length;
+}
+
+$.extend( $.expr[ ":" ], {
+ data: function( elem, i, match ) {
+ return !!$.data( elem, match[ 3 ] );
+ },
+
+ focusable: function( element ) {
+ return focusable( element, !isNaN( $.attr( element, "tabindex" ) ) );
+ },
+
+ tabbable: function( element ) {
+ var tabIndex = $.attr( element, "tabindex" ),
+ isTabIndexNaN = isNaN( tabIndex );
+ return ( isTabIndexNaN || tabIndex >= 0 ) && focusable( element, !isTabIndexNaN );
+ }
+});
+
+// support
+$(function() {
+ var body = document.body,
+ div = body.appendChild( div = document.createElement( "div" ) );
+
+ // access offsetHeight before setting the style to prevent a layout bug
+ // in IE 9 which causes the elemnt to continue to take up space even
+ // after it is removed from the DOM (#8026)
+ div.offsetHeight;
+
+ $.extend( div.style, {
+ minHeight: "100px",
+ height: "auto",
+ padding: 0,
+ borderWidth: 0
+ });
+
+ $.support.minHeight = div.offsetHeight === 100;
+ $.support.selectstart = "onselectstart" in div;
+
+ // set display to none to avoid a layout bug in IE
+ // http://dev.jquery.com/ticket/4014
+ body.removeChild( div ).style.display = "none";
+});
+
+
+
+
+
+// deprecated
+$.extend( $.ui, {
+ // $.ui.plugin is deprecated. Use the proxy pattern instead.
+ plugin: {
+ add: function( module, option, set ) {
+ var proto = $.ui[ module ].prototype;
+ for ( var i in set ) {
+ proto.plugins[ i ] = proto.plugins[ i ] || [];
+ proto.plugins[ i ].push( [ option, set[ i ] ] );
+ }
+ },
+ call: function( instance, name, args ) {
+ var set = instance.plugins[ name ];
+ if ( !set || !instance.element[ 0 ].parentNode ) {
+ return;
+ }
+
+ for ( var i = 0; i < set.length; i++ ) {
+ if ( instance.options[ set[ i ][ 0 ] ] ) {
+ set[ i ][ 1 ].apply( instance.element, args );
+ }
+ }
+ }
+ },
+
+ // will be deprecated when we switch to jQuery 1.4 - use jQuery.contains()
+ contains: function( a, b ) {
+ return document.compareDocumentPosition ?
+ a.compareDocumentPosition( b ) & 16 :
+ a !== b && a.contains( b );
+ },
+
+ // only used by resizable
+ hasScroll: function( el, a ) {
+
+ //If overflow is hidden, the element might have extra content, but the user wants to hide it
+ if ( $( el ).css( "overflow" ) === "hidden") {
+ return false;
+ }
+
+ var scroll = ( a && a === "left" ) ? "scrollLeft" : "scrollTop",
+ has = false;
+
+ if ( el[ scroll ] > 0 ) {
+ return true;
+ }
+
+ // TODO: determine which cases actually cause this to happen
+ // if the element doesn't have the scroll set, see if it's possible to
+ // set the scroll
+ el[ scroll ] = 1;
+ has = ( el[ scroll ] > 0 );
+ el[ scroll ] = 0;
+ return has;
+ },
+
+ // these are odd functions, fix the API or move into individual plugins
+ isOverAxis: function( x, reference, size ) {
+ //Determines when x coordinate is over "b" element axis
+ return ( x > reference ) && ( x < ( reference + size ) );
+ },
+ isOver: function( y, x, top, left, height, width ) {
+ //Determines when x, y coordinates is over "b" element
+ return $.ui.isOverAxis( y, top, height ) && $.ui.isOverAxis( x, left, width );
+ }
+});
+
+})( jQuery );
+/*!
+ * jQuery UI Widget 1.8.21
+ *
+ * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Widget
+ */
+(function( $, undefined ) {
+
+// jQuery 1.4+
+if ( $.cleanData ) {
+ var _cleanData = $.cleanData;
+ $.cleanData = function( elems ) {
+ for ( var i = 0, elem; (elem = elems[i]) != null; i++ ) {
+ try {
+ $( elem ).triggerHandler( "remove" );
+ // http://bugs.jquery.com/ticket/8235
+ } catch( e ) {}
+ }
+ _cleanData( elems );
+ };
+} else {
+ var _remove = $.fn.remove;
+ $.fn.remove = function( selector, keepData ) {
+ return this.each(function() {
+ if ( !keepData ) {
+ if ( !selector || $.filter( selector, [ this ] ).length ) {
+ $( "*", this ).add( [ this ] ).each(function() {
+ try {
+ $( this ).triggerHandler( "remove" );
+ // http://bugs.jquery.com/ticket/8235
+ } catch( e ) {}
+ });
+ }
+ }
+ return _remove.call( $(this), selector, keepData );
+ });
+ };
+}
+
+$.widget = function( name, base, prototype ) {
+ var namespace = name.split( "." )[ 0 ],
+ fullName;
+ name = name.split( "." )[ 1 ];
+ fullName = namespace + "-" + name;
+
+ if ( !prototype ) {
+ prototype = base;
+ base = $.Widget;
+ }
+
+ // create selector for plugin
+ $.expr[ ":" ][ fullName ] = function( elem ) {
+ return !!$.data( elem, name );
+ };
+
+ $[ namespace ] = $[ namespace ] || {};
+ $[ namespace ][ name ] = function( options, element ) {
+ // allow instantiation without initializing for simple inheritance
+ if ( arguments.length ) {
+ this._createWidget( options, element );
+ }
+ };
+
+ var basePrototype = new base();
+ // we need to make the options hash a property directly on the new instance
+ // otherwise we'll modify the options hash on the prototype that we're
+ // inheriting from
+// $.each( basePrototype, function( key, val ) {
+// if ( $.isPlainObject(val) ) {
+// basePrototype[ key ] = $.extend( {}, val );
+// }
+// });
+ basePrototype.options = $.extend( true, {}, basePrototype.options );
+ $[ namespace ][ name ].prototype = $.extend( true, basePrototype, {
+ namespace: namespace,
+ widgetName: name,
+ widgetEventPrefix: $[ namespace ][ name ].prototype.widgetEventPrefix || name,
+ widgetBaseClass: fullName
+ }, prototype );
+
+ $.widget.bridge( name, $[ namespace ][ name ] );
+};
+
+$.widget.bridge = function( name, object ) {
+ $.fn[ name ] = function( options ) {
+ var isMethodCall = typeof options === "string",
+ args = Array.prototype.slice.call( arguments, 1 ),
+ returnValue = this;
+
+ // allow multiple hashes to be passed on init
+ options = !isMethodCall && args.length ?
+ $.extend.apply( null, [ true, options ].concat(args) ) :
+ options;
+
+ // prevent calls to internal methods
+ if ( isMethodCall && options.charAt( 0 ) === "_" ) {
+ return returnValue;
+ }
+
+ if ( isMethodCall ) {
+ this.each(function() {
+ var instance = $.data( this, name ),
+ methodValue = instance && $.isFunction( instance[options] ) ?
+ instance[ options ].apply( instance, args ) :
+ instance;
+ // TODO: add this back in 1.9 and use $.error() (see #5972)
+// if ( !instance ) {
+// throw "cannot call methods on " + name + " prior to initialization; " +
+// "attempted to call method '" + options + "'";
+// }
+// if ( !$.isFunction( instance[options] ) ) {
+// throw "no such method '" + options + "' for " + name + " widget instance";
+// }
+// var methodValue = instance[ options ].apply( instance, args );
+ if ( methodValue !== instance && methodValue !== undefined ) {
+ returnValue = methodValue;
+ return false;
+ }
+ });
+ } else {
+ this.each(function() {
+ var instance = $.data( this, name );
+ if ( instance ) {
+ instance.option( options || {} )._init();
+ } else {
+ $.data( this, name, new object( options, this ) );
+ }
+ });
+ }
+
+ return returnValue;
+ };
+};
+
+$.Widget = function( options, element ) {
+ // allow instantiation without initializing for simple inheritance
+ if ( arguments.length ) {
+ this._createWidget( options, element );
+ }
+};
+
+$.Widget.prototype = {
+ widgetName: "widget",
+ widgetEventPrefix: "",
+ options: {
+ disabled: false
+ },
+ _createWidget: function( options, element ) {
+ // $.widget.bridge stores the plugin instance, but we do it anyway
+ // so that it's stored even before the _create function runs
+ $.data( element, this.widgetName, this );
+ this.element = $( element );
+ this.options = $.extend( true, {},
+ this.options,
+ this._getCreateOptions(),
+ options );
+
+ var self = this;
+ this.element.bind( "remove." + this.widgetName, function() {
+ self.destroy();
+ });
+
+ this._create();
+ this._trigger( "create" );
+ this._init();
+ },
+ _getCreateOptions: function() {
+ return $.metadata && $.metadata.get( this.element[0] )[ this.widgetName ];
+ },
+ _create: function() {},
+ _init: function() {},
+
+ destroy: function() {
+ this.element
+ .unbind( "." + this.widgetName )
+ .removeData( this.widgetName );
+ this.widget()
+ .unbind( "." + this.widgetName )
+ .removeAttr( "aria-disabled" )
+ .removeClass(
+ this.widgetBaseClass + "-disabled " +
+ "ui-state-disabled" );
+ },
+
+ widget: function() {
+ return this.element;
+ },
+
+ option: function( key, value ) {
+ var options = key;
+
+ if ( arguments.length === 0 ) {
+ // don't return a reference to the internal hash
+ return $.extend( {}, this.options );
+ }
+
+ if (typeof key === "string" ) {
+ if ( value === undefined ) {
+ return this.options[ key ];
+ }
+ options = {};
+ options[ key ] = value;
+ }
+
+ this._setOptions( options );
+
+ return this;
+ },
+ _setOptions: function( options ) {
+ var self = this;
+ $.each( options, function( key, value ) {
+ self._setOption( key, value );
+ });
+
+ return this;
+ },
+ _setOption: function( key, value ) {
+ this.options[ key ] = value;
+
+ if ( key === "disabled" ) {
+ this.widget()
+ [ value ? "addClass" : "removeClass"](
+ this.widgetBaseClass + "-disabled" + " " +
+ "ui-state-disabled" )
+ .attr( "aria-disabled", value );
+ }
+
+ return this;
+ },
+
+ enable: function() {
+ return this._setOption( "disabled", false );
+ },
+ disable: function() {
+ return this._setOption( "disabled", true );
+ },
+
+ _trigger: function( type, event, data ) {
+ var prop, orig,
+ callback = this.options[ type ];
+
+ data = data || {};
+ event = $.Event( event );
+ event.type = ( type === this.widgetEventPrefix ?
+ type :
+ this.widgetEventPrefix + type ).toLowerCase();
+ // the original event may come from any element
+ // so we need to reset the target on the new event
+ event.target = this.element[ 0 ];
+
+ // copy original event properties over to the new event
+ orig = event.originalEvent;
+ if ( orig ) {
+ for ( prop in orig ) {
+ if ( !( prop in event ) ) {
+ event[ prop ] = orig[ prop ];
+ }
+ }
+ }
+
+ this.element.trigger( event, data );
+
+ return !( $.isFunction(callback) &&
+ callback.call( this.element[0], event, data ) === false ||
+ event.isDefaultPrevented() );
+ }
+};
+
+})( jQuery );
+/*!
+ * jQuery UI Mouse 1.8.21
+ *
+ * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Mouse
+ *
+ * Depends:
+ * jquery.ui.widget.js
+ */
+(function( $, undefined ) {
+
+var mouseHandled = false;
+$( document ).mouseup( function( e ) {
+ mouseHandled = false;
+});
+
+$.widget("ui.mouse", {
+ options: {
+ cancel: ':input,option',
+ distance: 1,
+ delay: 0
+ },
+ _mouseInit: function() {
+ var self = this;
+
+ this.element
+ .bind('mousedown.'+this.widgetName, function(event) {
+ return self._mouseDown(event);
+ })
+ .bind('click.'+this.widgetName, function(event) {
+ if (true === $.data(event.target, self.widgetName + '.preventClickEvent')) {
+ $.removeData(event.target, self.widgetName + '.preventClickEvent');
+ event.stopImmediatePropagation();
+ return false;
+ }
+ });
+
+ this.started = false;
+ },
+
+ // TODO: make sure destroying one instance of mouse doesn't mess with
+ // other instances of mouse
+ _mouseDestroy: function() {
+ this.element.unbind('.'+this.widgetName);
+ $(document)
+ .unbind('mousemove.'+this.widgetName, this._mouseMoveDelegate)
+ .unbind('mouseup.'+this.widgetName, this._mouseUpDelegate);
+ },
+
+ _mouseDown: function(event) {
+ // don't let more than one widget handle mouseStart
+ if( mouseHandled ) { return };
+
+ // we may have missed mouseup (out of window)
+ (this._mouseStarted && this._mouseUp(event));
+
+ this._mouseDownEvent = event;
+
+ var self = this,
+ btnIsLeft = (event.which == 1),
+ // event.target.nodeName works around a bug in IE 8 with
+ // disabled inputs (#7620)
+ elIsCancel = (typeof this.options.cancel == "string" && event.target.nodeName ? $(event.target).closest(this.options.cancel).length : false);
+ if (!btnIsLeft || elIsCancel || !this._mouseCapture(event)) {
+ return true;
+ }
+
+ this.mouseDelayMet = !this.options.delay;
+ if (!this.mouseDelayMet) {
+ this._mouseDelayTimer = setTimeout(function() {
+ self.mouseDelayMet = true;
+ }, this.options.delay);
+ }
+
+ if (this._mouseDistanceMet(event) && this._mouseDelayMet(event)) {
+ this._mouseStarted = (this._mouseStart(event) !== false);
+ if (!this._mouseStarted) {
+ event.preventDefault();
+ return true;
+ }
+ }
+
+ // Click event may never have fired (Gecko & Opera)
+ if (true === $.data(event.target, this.widgetName + '.preventClickEvent')) {
+ $.removeData(event.target, this.widgetName + '.preventClickEvent');
+ }
+
+ // these delegates are required to keep context
+ this._mouseMoveDelegate = function(event) {
+ return self._mouseMove(event);
+ };
+ this._mouseUpDelegate = function(event) {
+ return self._mouseUp(event);
+ };
+ $(document)
+ .bind('mousemove.'+this.widgetName, this._mouseMoveDelegate)
+ .bind('mouseup.'+this.widgetName, this._mouseUpDelegate);
+
+ event.preventDefault();
+
+ mouseHandled = true;
+ return true;
+ },
+
+ _mouseMove: function(event) {
+ // IE mouseup check - mouseup happened when mouse was out of window
+ if ($.browser.msie && !(document.documentMode >= 9) && !event.button) {
+ return this._mouseUp(event);
+ }
+
+ if (this._mouseStarted) {
+ this._mouseDrag(event);
+ return event.preventDefault();
+ }
+
+ if (this._mouseDistanceMet(event) && this._mouseDelayMet(event)) {
+ this._mouseStarted =
+ (this._mouseStart(this._mouseDownEvent, event) !== false);
+ (this._mouseStarted ? this._mouseDrag(event) : this._mouseUp(event));
+ }
+
+ return !this._mouseStarted;
+ },
+
+ _mouseUp: function(event) {
+ $(document)
+ .unbind('mousemove.'+this.widgetName, this._mouseMoveDelegate)
+ .unbind('mouseup.'+this.widgetName, this._mouseUpDelegate);
+
+ if (this._mouseStarted) {
+ this._mouseStarted = false;
+
+ if (event.target == this._mouseDownEvent.target) {
+ $.data(event.target, this.widgetName + '.preventClickEvent', true);
+ }
+
+ this._mouseStop(event);
+ }
+
+ return false;
+ },
+
+ _mouseDistanceMet: function(event) {
+ return (Math.max(
+ Math.abs(this._mouseDownEvent.pageX - event.pageX),
+ Math.abs(this._mouseDownEvent.pageY - event.pageY)
+ ) >= this.options.distance
+ );
+ },
+
+ _mouseDelayMet: function(event) {
+ return this.mouseDelayMet;
+ },
+
+ // These are placeholder methods, to be overriden by extending plugin
+ _mouseStart: function(event) {},
+ _mouseDrag: function(event) {},
+ _mouseStop: function(event) {},
+ _mouseCapture: function(event) { return true; }
+});
+
+})(jQuery);
+/*!
+ * jQuery UI Position 1.8.21
+ *
+ * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Position
+ */
+(function( $, undefined ) {
+
+$.ui = $.ui || {};
+
+var horizontalPositions = /left|center|right/,
+ verticalPositions = /top|center|bottom/,
+ center = "center",
+ support = {},
+ _position = $.fn.position,
+ _offset = $.fn.offset;
+
+$.fn.position = function( options ) {
+ if ( !options || !options.of ) {
+ return _position.apply( this, arguments );
+ }
+
+ // make a copy, we don't want to modify arguments
+ options = $.extend( {}, options );
+
+ var target = $( options.of ),
+ targetElem = target[0],
+ collision = ( options.collision || "flip" ).split( " " ),
+ offset = options.offset ? options.offset.split( " " ) : [ 0, 0 ],
+ targetWidth,
+ targetHeight,
+ basePosition;
+
+ if ( targetElem.nodeType === 9 ) {
+ targetWidth = target.width();
+ targetHeight = target.height();
+ basePosition = { top: 0, left: 0 };
+ // TODO: use $.isWindow() in 1.9
+ } else if ( targetElem.setTimeout ) {
+ targetWidth = target.width();
+ targetHeight = target.height();
+ basePosition = { top: target.scrollTop(), left: target.scrollLeft() };
+ } else if ( targetElem.preventDefault ) {
+ // force left top to allow flipping
+ options.at = "left top";
+ targetWidth = targetHeight = 0;
+ basePosition = { top: options.of.pageY, left: options.of.pageX };
+ } else {
+ targetWidth = target.outerWidth();
+ targetHeight = target.outerHeight();
+ basePosition = target.offset();
+ }
+
+ // force my and at to have valid horizontal and veritcal positions
+ // if a value is missing or invalid, it will be converted to center
+ $.each( [ "my", "at" ], function() {
+ var pos = ( options[this] || "" ).split( " " );
+ if ( pos.length === 1) {
+ pos = horizontalPositions.test( pos[0] ) ?
+ pos.concat( [center] ) :
+ verticalPositions.test( pos[0] ) ?
+ [ center ].concat( pos ) :
+ [ center, center ];
+ }
+ pos[ 0 ] = horizontalPositions.test( pos[0] ) ? pos[ 0 ] : center;
+ pos[ 1 ] = verticalPositions.test( pos[1] ) ? pos[ 1 ] : center;
+ options[ this ] = pos;
+ });
+
+ // normalize collision option
+ if ( collision.length === 1 ) {
+ collision[ 1 ] = collision[ 0 ];
+ }
+
+ // normalize offset option
+ offset[ 0 ] = parseInt( offset[0], 10 ) || 0;
+ if ( offset.length === 1 ) {
+ offset[ 1 ] = offset[ 0 ];
+ }
+ offset[ 1 ] = parseInt( offset[1], 10 ) || 0;
+
+ if ( options.at[0] === "right" ) {
+ basePosition.left += targetWidth;
+ } else if ( options.at[0] === center ) {
+ basePosition.left += targetWidth / 2;
+ }
+
+ if ( options.at[1] === "bottom" ) {
+ basePosition.top += targetHeight;
+ } else if ( options.at[1] === center ) {
+ basePosition.top += targetHeight / 2;
+ }
+
+ basePosition.left += offset[ 0 ];
+ basePosition.top += offset[ 1 ];
+
+ return this.each(function() {
+ var elem = $( this ),
+ elemWidth = elem.outerWidth(),
+ elemHeight = elem.outerHeight(),
+ marginLeft = parseInt( $.curCSS( this, "marginLeft", true ) ) || 0,
+ marginTop = parseInt( $.curCSS( this, "marginTop", true ) ) || 0,
+ collisionWidth = elemWidth + marginLeft +
+ ( parseInt( $.curCSS( this, "marginRight", true ) ) || 0 ),
+ collisionHeight = elemHeight + marginTop +
+ ( parseInt( $.curCSS( this, "marginBottom", true ) ) || 0 ),
+ position = $.extend( {}, basePosition ),
+ collisionPosition;
+
+ if ( options.my[0] === "right" ) {
+ position.left -= elemWidth;
+ } else if ( options.my[0] === center ) {
+ position.left -= elemWidth / 2;
+ }
+
+ if ( options.my[1] === "bottom" ) {
+ position.top -= elemHeight;
+ } else if ( options.my[1] === center ) {
+ position.top -= elemHeight / 2;
+ }
+
+ // prevent fractions if jQuery version doesn't support them (see #5280)
+ if ( !support.fractions ) {
+ position.left = Math.round( position.left );
+ position.top = Math.round( position.top );
+ }
+
+ collisionPosition = {
+ left: position.left - marginLeft,
+ top: position.top - marginTop
+ };
+
+ $.each( [ "left", "top" ], function( i, dir ) {
+ if ( $.ui.position[ collision[i] ] ) {
+ $.ui.position[ collision[i] ][ dir ]( position, {
+ targetWidth: targetWidth,
+ targetHeight: targetHeight,
+ elemWidth: elemWidth,
+ elemHeight: elemHeight,
+ collisionPosition: collisionPosition,
+ collisionWidth: collisionWidth,
+ collisionHeight: collisionHeight,
+ offset: offset,
+ my: options.my,
+ at: options.at
+ });
+ }
+ });
+
+ if ( $.fn.bgiframe ) {
+ elem.bgiframe();
+ }
+ elem.offset( $.extend( position, { using: options.using } ) );
+ });
+};
+
+$.ui.position = {
+ fit: {
+ left: function( position, data ) {
+ var win = $( window ),
+ over = data.collisionPosition.left + data.collisionWidth - win.width() - win.scrollLeft();
+ position.left = over > 0 ? position.left - over : Math.max( position.left - data.collisionPosition.left, position.left );
+ },
+ top: function( position, data ) {
+ var win = $( window ),
+ over = data.collisionPosition.top + data.collisionHeight - win.height() - win.scrollTop();
+ position.top = over > 0 ? position.top - over : Math.max( position.top - data.collisionPosition.top, position.top );
+ }
+ },
+
+ flip: {
+ left: function( position, data ) {
+ if ( data.at[0] === center ) {
+ return;
+ }
+ var win = $( window ),
+ over = data.collisionPosition.left + data.collisionWidth - win.width() - win.scrollLeft(),
+ myOffset = data.my[ 0 ] === "left" ?
+ -data.elemWidth :
+ data.my[ 0 ] === "right" ?
+ data.elemWidth :
+ 0,
+ atOffset = data.at[ 0 ] === "left" ?
+ data.targetWidth :
+ -data.targetWidth,
+ offset = -2 * data.offset[ 0 ];
+ position.left += data.collisionPosition.left < 0 ?
+ myOffset + atOffset + offset :
+ over > 0 ?
+ myOffset + atOffset + offset :
+ 0;
+ },
+ top: function( position, data ) {
+ if ( data.at[1] === center ) {
+ return;
+ }
+ var win = $( window ),
+ over = data.collisionPosition.top + data.collisionHeight - win.height() - win.scrollTop(),
+ myOffset = data.my[ 1 ] === "top" ?
+ -data.elemHeight :
+ data.my[ 1 ] === "bottom" ?
+ data.elemHeight :
+ 0,
+ atOffset = data.at[ 1 ] === "top" ?
+ data.targetHeight :
+ -data.targetHeight,
+ offset = -2 * data.offset[ 1 ];
+ position.top += data.collisionPosition.top < 0 ?
+ myOffset + atOffset + offset :
+ over > 0 ?
+ myOffset + atOffset + offset :
+ 0;
+ }
+ }
+};
+
+// offset setter from jQuery 1.4
+if ( !$.offset.setOffset ) {
+ $.offset.setOffset = function( elem, options ) {
+ // set position first, in-case top/left are set even on static elem
+ if ( /static/.test( $.curCSS( elem, "position" ) ) ) {
+ elem.style.position = "relative";
+ }
+ var curElem = $( elem ),
+ curOffset = curElem.offset(),
+ curTop = parseInt( $.curCSS( elem, "top", true ), 10 ) || 0,
+ curLeft = parseInt( $.curCSS( elem, "left", true ), 10) || 0,
+ props = {
+ top: (options.top - curOffset.top) + curTop,
+ left: (options.left - curOffset.left) + curLeft
+ };
+
+ if ( 'using' in options ) {
+ options.using.call( elem, props );
+ } else {
+ curElem.css( props );
+ }
+ };
+
+ $.fn.offset = function( options ) {
+ var elem = this[ 0 ];
+ if ( !elem || !elem.ownerDocument ) { return null; }
+ if ( options ) {
+ if ( $.isFunction( options ) ) {
+ return this.each(function( i ) {
+ $( this ).offset( options.call( this, i, $( this ).offset() ) );
+ });
+ }
+ return this.each(function() {
+ $.offset.setOffset( this, options );
+ });
+ }
+ return _offset.call( this );
+ };
+}
+
+// fraction support test (older versions of jQuery don't support fractions)
+(function () {
+ var body = document.getElementsByTagName( "body" )[ 0 ],
+ div = document.createElement( "div" ),
+ testElement, testElementParent, testElementStyle, offset, offsetTotal;
+
+ //Create a "fake body" for testing based on method used in jQuery.support
+ testElement = document.createElement( body ? "div" : "body" );
+ testElementStyle = {
+ visibility: "hidden",
+ width: 0,
+ height: 0,
+ border: 0,
+ margin: 0,
+ background: "none"
+ };
+ if ( body ) {
+ $.extend( testElementStyle, {
+ position: "absolute",
+ left: "-1000px",
+ top: "-1000px"
+ });
+ }
+ for ( var i in testElementStyle ) {
+ testElement.style[ i ] = testElementStyle[ i ];
+ }
+ testElement.appendChild( div );
+ testElementParent = body || document.documentElement;
+ testElementParent.insertBefore( testElement, testElementParent.firstChild );
+
+ div.style.cssText = "position: absolute; left: 10.7432222px; top: 10.432325px; height: 30px; width: 201px;";
+
+ offset = $( div ).offset( function( _, offset ) {
+ return offset;
+ }).offset();
+
+ testElement.innerHTML = "";
+ testElementParent.removeChild( testElement );
+
+ offsetTotal = offset.top + offset.left + ( body ? 2000 : 0 );
+ support.fractions = offsetTotal > 21 && offsetTotal < 22;
+})();
+
+}( jQuery ));
+/*!
+ * jQuery UI Dialog 1.8.21
+ *
+ * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Dialog
+ *
+ * Depends:
+ * jquery.ui.core.js
+ * jquery.ui.widget.js
+ * jquery.ui.button.js
+ * jquery.ui.draggable.js
+ * jquery.ui.mouse.js
+ * jquery.ui.position.js
+ * jquery.ui.resizable.js
+ */
+(function( $, undefined ) {
+
+var uiDialogClasses =
+ 'ui-dialog ' +
+ 'ui-widget ' +
+ 'ui-widget-content ' +
+ 'ui-corner-all ',
+ sizeRelatedOptions = {
+ buttons: true,
+ height: true,
+ maxHeight: true,
+ maxWidth: true,
+ minHeight: true,
+ minWidth: true,
+ width: true
+ },
+ resizableRelatedOptions = {
+ maxHeight: true,
+ maxWidth: true,
+ minHeight: true,
+ minWidth: true
+ },
+ // support for jQuery 1.3.2 - handle common attrFn methods for dialog
+ attrFn = $.attrFn || {
+ val: true,
+ css: true,
+ html: true,
+ text: true,
+ data: true,
+ width: true,
+ height: true,
+ offset: true,
+ click: true
+ };
+
+$.widget("ui.dialog", {
+ options: {
+ autoOpen: true,
+ buttons: {},
+ closeOnEscape: true,
+ closeText: 'close',
+ dialogClass: '',
+ draggable: true,
+ hide: null,
+ height: 'auto',
+ maxHeight: false,
+ maxWidth: false,
+ minHeight: 150,
+ minWidth: 150,
+ modal: false,
+ position: {
+ my: 'center',
+ at: 'center',
+ collision: 'fit',
+ // ensure that the titlebar is never outside the document
+ using: function(pos) {
+ var topOffset = $(this).css(pos).offset().top;
+ if (topOffset < 0) {
+ $(this).css('top', pos.top - topOffset);
+ }
+ }
+ },
+ resizable: true,
+ show: null,
+ stack: true,
+ title: '',
+ width: 300,
+ zIndex: 1000
+ },
+
+ _create: function() {
+ this.originalTitle = this.element.attr('title');
+ // #5742 - .attr() might return a DOMElement
+ if ( typeof this.originalTitle !== "string" ) {
+ this.originalTitle = "";
+ }
+
+ this.options.title = this.options.title || this.originalTitle;
+ var self = this,
+ options = self.options,
+
+ title = options.title || '&#160;',
+ titleId = $.ui.dialog.getTitleId(self.element),
+
+ uiDialog = (self.uiDialog = $('<div></div>'))
+ .appendTo(document.body)
+ .hide()
+ .addClass(uiDialogClasses + options.dialogClass)
+ .css({
+ zIndex: options.zIndex
+ })
+ // setting tabIndex makes the div focusable
+ // setting outline to 0 prevents a border on focus in Mozilla
+ .attr('tabIndex', -1).css('outline', 0).keydown(function(event) {
+ if (options.closeOnEscape && !event.isDefaultPrevented() && event.keyCode &&
+ event.keyCode === $.ui.keyCode.ESCAPE) {
+
+ self.close(event);
+ event.preventDefault();
+ }
+ })
+ .attr({
+ role: 'dialog',
+ 'aria-labelledby': titleId
+ })
+ .mousedown(function(event) {
+ self.moveToTop(false, event);
+ }),
+
+ uiDialogContent = self.element
+ .show()
+ .removeAttr('title')
+ .addClass(
+ 'ui-dialog-content ' +
+ 'ui-widget-content')
+ .appendTo(uiDialog),
+
+ uiDialogTitlebar = (self.uiDialogTitlebar = $('<div></div>'))
+ .addClass(
+ 'ui-dialog-titlebar ' +
+ 'ui-widget-header ' +
+ 'ui-corner-all ' +
+ 'ui-helper-clearfix'
+ )
+ .prependTo(uiDialog),
+
+ uiDialogTitlebarClose = $('<a href="#"></a>')
+ .addClass(
+ 'ui-dialog-titlebar-close ' +
+ 'ui-corner-all'
+ )
+ .attr('role', 'button')
+ .hover(
+ function() {
+ uiDialogTitlebarClose.addClass('ui-state-hover');
+ },
+ function() {
+ uiDialogTitlebarClose.removeClass('ui-state-hover');
+ }
+ )
+ .focus(function() {
+ uiDialogTitlebarClose.addClass('ui-state-focus');
+ })
+ .blur(function() {
+ uiDialogTitlebarClose.removeClass('ui-state-focus');
+ })
+ .click(function(event) {
+ self.close(event);
+ return false;
+ })
+ .appendTo(uiDialogTitlebar),
+
+ uiDialogTitlebarCloseText = (self.uiDialogTitlebarCloseText = $('<span></span>'))
+ .addClass(
+ 'ui-icon ' +
+ 'ui-icon-closethick'
+ )
+ .text(options.closeText)
+ .appendTo(uiDialogTitlebarClose),
+
+ uiDialogTitle = $('<span></span>')
+ .addClass('ui-dialog-title')
+ .attr('id', titleId)
+ .html(title)
+ .prependTo(uiDialogTitlebar);
+
+ //handling of deprecated beforeclose (vs beforeClose) option
+ //Ticket #4669 http://dev.jqueryui.com/ticket/4669
+ //TODO: remove in 1.9pre
+ if ($.isFunction(options.beforeclose) && !$.isFunction(options.beforeClose)) {
+ options.beforeClose = options.beforeclose;
+ }
+
+ uiDialogTitlebar.find("*").add(uiDialogTitlebar).disableSelection();
+
+ if (options.draggable && $.fn.draggable) {
+ self._makeDraggable();
+ }
+ if (options.resizable && $.fn.resizable) {
+ self._makeResizable();
+ }
+
+ self._createButtons(options.buttons);
+ self._isOpen = false;
+
+ if ($.fn.bgiframe) {
+ uiDialog.bgiframe();
+ }
+ },
+
+ _init: function() {
+ if ( this.options.autoOpen ) {
+ this.open();
+ }
+ },
+
+ destroy: function() {
+ var self = this;
+
+ if (self.overlay) {
+ self.overlay.destroy();
+ }
+ self.uiDialog.hide();
+ self.element
+ .unbind('.dialog')
+ .removeData('dialog')
+ .removeClass('ui-dialog-content ui-widget-content')
+ .hide().appendTo('body');
+ self.uiDialog.remove();
+
+ if (self.originalTitle) {
+ self.element.attr('title', self.originalTitle);
+ }
+
+ return self;
+ },
+
+ widget: function() {
+ return this.uiDialog;
+ },
+
+ close: function(event) {
+ var self = this,
+ maxZ, thisZ;
+
+ if (false === self._trigger('beforeClose', event)) {
+ return;
+ }
+
+ if (self.overlay) {
+ self.overlay.destroy();
+ }
+ self.uiDialog.unbind('keypress.ui-dialog');
+
+ self._isOpen = false;
+
+ if (self.options.hide) {
+ self.uiDialog.hide(self.options.hide, function() {
+ self._trigger('close', event);
+ });
+ } else {
+ self.uiDialog.hide();
+ self._trigger('close', event);
+ }
+
+ $.ui.dialog.overlay.resize();
+
+ // adjust the maxZ to allow other modal dialogs to continue to work (see #4309)
+ if (self.options.modal) {
+ maxZ = 0;
+ $('.ui-dialog').each(function() {
+ if (this !== self.uiDialog[0]) {
+ thisZ = $(this).css('z-index');
+ if(!isNaN(thisZ)) {
+ maxZ = Math.max(maxZ, thisZ);
+ }
+ }
+ });
+ $.ui.dialog.maxZ = maxZ;
+ }
+
+ return self;
+ },
+
+ isOpen: function() {
+ return this._isOpen;
+ },
+
+ // the force parameter allows us to move modal dialogs to their correct
+ // position on open
+ moveToTop: function(force, event) {
+ var self = this,
+ options = self.options,
+ saveScroll;
+
+ if ((options.modal && !force) ||
+ (!options.stack && !options.modal)) {
+ return self._trigger('focus', event);
+ }
+
+ if (options.zIndex > $.ui.dialog.maxZ) {
+ $.ui.dialog.maxZ = options.zIndex;
+ }
+ if (self.overlay) {
+ $.ui.dialog.maxZ += 1;
+ self.overlay.$el.css('z-index', $.ui.dialog.overlay.maxZ = $.ui.dialog.maxZ);
+ }
+
+ //Save and then restore scroll since Opera 9.5+ resets when parent z-Index is changed.
+ // http://ui.jquery.com/bugs/ticket/3193
+ saveScroll = { scrollTop: self.element.scrollTop(), scrollLeft: self.element.scrollLeft() };
+ $.ui.dialog.maxZ += 1;
+ self.uiDialog.css('z-index', $.ui.dialog.maxZ);
+ self.element.attr(saveScroll);
+ self._trigger('focus', event);
+
+ return self;
+ },
+
+ open: function() {
+ if (this._isOpen) { return; }
+
+ var self = this,
+ options = self.options,
+ uiDialog = self.uiDialog;
+
+ self.overlay = options.modal ? new $.ui.dialog.overlay(self) : null;
+ self._size();
+ self._position(options.position);
+ uiDialog.show(options.show);
+ self.moveToTop(true);
+
+ // prevent tabbing out of modal dialogs
+ if ( options.modal ) {
+ uiDialog.bind( "keydown.ui-dialog", function( event ) {
+ if ( event.keyCode !== $.ui.keyCode.TAB ) {
+ return;
+ }
+
+ var tabbables = $(':tabbable', this),
+ first = tabbables.filter(':first'),
+ last = tabbables.filter(':last');
+
+ if (event.target === last[0] && !event.shiftKey) {
+ first.focus(1);
+ return false;
+ } else if (event.target === first[0] && event.shiftKey) {
+ last.focus(1);
+ return false;
+ }
+ });
+ }
+
+ // set focus to the first tabbable element in the content area or the first button
+ // if there are no tabbable elements, set focus on the dialog itself
+ $(self.element.find(':tabbable').get().concat(
+ uiDialog.find('.ui-dialog-buttonpane :tabbable').get().concat(
+ uiDialog.get()))).eq(0).focus();
+
+ self._isOpen = true;
+ self._trigger('open');
+
+ return self;
+ },
+
+ _createButtons: function(buttons) {
+ var self = this,
+ hasButtons = false,
+ uiDialogButtonPane = $('<div></div>')
+ .addClass(
+ 'ui-dialog-buttonpane ' +
+ 'ui-widget-content ' +
+ 'ui-helper-clearfix'
+ ),
+ uiButtonSet = $( "<div></div>" )
+ .addClass( "ui-dialog-buttonset" )
+ .appendTo( uiDialogButtonPane );
+
+ // if we already have a button pane, remove it
+ self.uiDialog.find('.ui-dialog-buttonpane').remove();
+
+ if (typeof buttons === 'object' && buttons !== null) {
+ $.each(buttons, function() {
+ return !(hasButtons = true);
+ });
+ }
+ if (hasButtons) {
+ $.each(buttons, function(name, props) {
+ props = $.isFunction( props ) ?
+ { click: props, text: name } :
+ props;
+ var button = $('<button type="button"></button>')
+ .click(function() {
+ props.click.apply(self.element[0], arguments);
+ })
+ .appendTo(uiButtonSet);
+ // can't use .attr( props, true ) with jQuery 1.3.2.
+ $.each( props, function( key, value ) {
+ if ( key === "click" ) {
+ return;
+ }
+ if ( key in attrFn ) {
+ button[ key ]( value );
+ } else {
+ button.attr( key, value );
+ }
+ });
+ if ($.fn.button) {
+ button.button();
+ }
+ });
+ uiDialogButtonPane.appendTo(self.uiDialog);
+ }
+ },
+
+ _makeDraggable: function() {
+ var self = this,
+ options = self.options,
+ doc = $(document),
+ heightBeforeDrag;
+
+ function filteredUi(ui) {
+ return {
+ position: ui.position,
+ offset: ui.offset
+ };
+ }
+
+ self.uiDialog.draggable({
+ cancel: '.ui-dialog-content, .ui-dialog-titlebar-close',
+ handle: '.ui-dialog-titlebar',
+ containment: 'document',
+ start: function(event, ui) {
+ heightBeforeDrag = options.height === "auto" ? "auto" : $(this).height();
+ $(this).height($(this).height()).addClass("ui-dialog-dragging");
+ self._trigger('dragStart', event, filteredUi(ui));
+ },
+ drag: function(event, ui) {
+ self._trigger('drag', event, filteredUi(ui));
+ },
+ stop: function(event, ui) {
+ options.position = [ui.position.left - doc.scrollLeft(),
+ ui.position.top - doc.scrollTop()];
+ $(this).removeClass("ui-dialog-dragging").height(heightBeforeDrag);
+ self._trigger('dragStop', event, filteredUi(ui));
+ $.ui.dialog.overlay.resize();
+ }
+ });
+ },
+
+ _makeResizable: function(handles) {
+ handles = (handles === undefined ? this.options.resizable : handles);
+ var self = this,
+ options = self.options,
+ // .ui-resizable has position: relative defined in the stylesheet
+ // but dialogs have to use absolute or fixed positioning
+ position = self.uiDialog.css('position'),
+ resizeHandles = (typeof handles === 'string' ?
+ handles :
+ 'n,e,s,w,se,sw,ne,nw'
+ );
+
+ function filteredUi(ui) {
+ return {
+ originalPosition: ui.originalPosition,
+ originalSize: ui.originalSize,
+ position: ui.position,
+ size: ui.size
+ };
+ }
+
+ self.uiDialog.resizable({
+ cancel: '.ui-dialog-content',
+ containment: 'document',
+ alsoResize: self.element,
+ maxWidth: options.maxWidth,
+ maxHeight: options.maxHeight,
+ minWidth: options.minWidth,
+ minHeight: self._minHeight(),
+ handles: resizeHandles,
+ start: function(event, ui) {
+ $(this).addClass("ui-dialog-resizing");
+ self._trigger('resizeStart', event, filteredUi(ui));
+ },
+ resize: function(event, ui) {
+ self._trigger('resize', event, filteredUi(ui));
+ },
+ stop: function(event, ui) {
+ $(this).removeClass("ui-dialog-resizing");
+ options.height = $(this).height();
+ options.width = $(this).width();
+ self._trigger('resizeStop', event, filteredUi(ui));
+ $.ui.dialog.overlay.resize();
+ }
+ })
+ .css('position', position)
+ .find('.ui-resizable-se').addClass('ui-icon ui-icon-grip-diagonal-se');
+ },
+
+ _minHeight: function() {
+ var options = this.options;
+
+ if (options.height === 'auto') {
+ return options.minHeight;
+ } else {
+ return Math.min(options.minHeight, options.height);
+ }
+ },
+
+ _position: function(position) {
+ var myAt = [],
+ offset = [0, 0],
+ isVisible;
+
+ if (position) {
+ // deep extending converts arrays to objects in jQuery <= 1.3.2 :-(
+ // if (typeof position == 'string' || $.isArray(position)) {
+ // myAt = $.isArray(position) ? position : position.split(' ');
+
+ if (typeof position === 'string' || (typeof position === 'object' && '0' in position)) {
+ myAt = position.split ? position.split(' ') : [position[0], position[1]];
+ if (myAt.length === 1) {
+ myAt[1] = myAt[0];
+ }
+
+ $.each(['left', 'top'], function(i, offsetPosition) {
+ if (+myAt[i] === myAt[i]) {
+ offset[i] = myAt[i];
+ myAt[i] = offsetPosition;
+ }
+ });
+
+ position = {
+ my: myAt.join(" "),
+ at: myAt.join(" "),
+ offset: offset.join(" ")
+ };
+ }
+
+ position = $.extend({}, $.ui.dialog.prototype.options.position, position);
+ } else {
+ position = $.ui.dialog.prototype.options.position;
+ }
+
+ // need to show the dialog to get the actual offset in the position plugin
+ isVisible = this.uiDialog.is(':visible');
+ if (!isVisible) {
+ this.uiDialog.show();
+ }
+ this.uiDialog
+ // workaround for jQuery bug #5781 http://dev.jquery.com/ticket/5781
+ .css({ top: 0, left: 0 })
+ .position($.extend({ of: window }, position));
+ if (!isVisible) {
+ this.uiDialog.hide();
+ }
+ },
+
+ _setOptions: function( options ) {
+ var self = this,
+ resizableOptions = {},
+ resize = false;
+
+ $.each( options, function( key, value ) {
+ self._setOption( key, value );
+
+ if ( key in sizeRelatedOptions ) {
+ resize = true;
+ }
+ if ( key in resizableRelatedOptions ) {
+ resizableOptions[ key ] = value;
+ }
+ });
+
+ if ( resize ) {
+ this._size();
+ }
+ if ( this.uiDialog.is( ":data(resizable)" ) ) {
+ this.uiDialog.resizable( "option", resizableOptions );
+ }
+ },
+
+ _setOption: function(key, value){
+ var self = this,
+ uiDialog = self.uiDialog;
+
+ switch (key) {
+ //handling of deprecated beforeclose (vs beforeClose) option
+ //Ticket #4669 http://dev.jqueryui.com/ticket/4669
+ //TODO: remove in 1.9pre
+ case "beforeclose":
+ key = "beforeClose";
+ break;
+ case "buttons":
+ self._createButtons(value);
+ break;
+ case "closeText":
+ // ensure that we always pass a string
+ self.uiDialogTitlebarCloseText.text("" + value);
+ break;
+ case "dialogClass":
+ uiDialog
+ .removeClass(self.options.dialogClass)
+ .addClass(uiDialogClasses + value);
+ break;
+ case "disabled":
+ if (value) {
+ uiDialog.addClass('ui-dialog-disabled');
+ } else {
+ uiDialog.removeClass('ui-dialog-disabled');
+ }
+ break;
+ case "draggable":
+ var isDraggable = uiDialog.is( ":data(draggable)" );
+ if ( isDraggable && !value ) {
+ uiDialog.draggable( "destroy" );
+ }
+
+ if ( !isDraggable && value ) {
+ self._makeDraggable();
+ }
+ break;
+ case "position":
+ self._position(value);
+ break;
+ case "resizable":
+ // currently resizable, becoming non-resizable
+ var isResizable = uiDialog.is( ":data(resizable)" );
+ if (isResizable && !value) {
+ uiDialog.resizable('destroy');
+ }
+
+ // currently resizable, changing handles
+ if (isResizable && typeof value === 'string') {
+ uiDialog.resizable('option', 'handles', value);
+ }
+
+ // currently non-resizable, becoming resizable
+ if (!isResizable && value !== false) {
+ self._makeResizable(value);
+ }
+ break;
+ case "title":
+ // convert whatever was passed in o a string, for html() to not throw up
+ $(".ui-dialog-title", self.uiDialogTitlebar).html("" + (value || '&#160;'));
+ break;
+ }
+
+ $.Widget.prototype._setOption.apply(self, arguments);
+ },
+
+ _size: function() {
+ /* If the user has resized the dialog, the .ui-dialog and .ui-dialog-content
+ * divs will both have width and height set, so we need to reset them
+ */
+ var options = this.options,
+ nonContentHeight,
+ minContentHeight,
+ isVisible = this.uiDialog.is( ":visible" );
+
+ // reset content sizing
+ this.element.show().css({
+ width: 'auto',
+ minHeight: 0,
+ height: 0
+ });
+
+ if (options.minWidth > options.width) {
+ options.width = options.minWidth;
+ }
+
+ // reset wrapper sizing
+ // determine the height of all the non-content elements
+ nonContentHeight = this.uiDialog.css({
+ height: 'auto',
+ width: options.width
+ })
+ .height();
+ minContentHeight = Math.max( 0, options.minHeight - nonContentHeight );
+
+ if ( options.height === "auto" ) {
+ // only needed for IE6 support
+ if ( $.support.minHeight ) {
+ this.element.css({
+ minHeight: minContentHeight,
+ height: "auto"
+ });
+ } else {
+ this.uiDialog.show();
+ var autoHeight = this.element.css( "height", "auto" ).height();
+ if ( !isVisible ) {
+ this.uiDialog.hide();
+ }
+ this.element.height( Math.max( autoHeight, minContentHeight ) );
+ }
+ } else {
+ this.element.height( Math.max( options.height - nonContentHeight, 0 ) );
+ }
+
+ if (this.uiDialog.is(':data(resizable)')) {
+ this.uiDialog.resizable('option', 'minHeight', this._minHeight());
+ }
+ }
+});
+
+$.extend($.ui.dialog, {
+ version: "1.8.21",
+
+ uuid: 0,
+ maxZ: 0,
+
+ getTitleId: function($el) {
+ var id = $el.attr('id');
+ if (!id) {
+ this.uuid += 1;
+ id = this.uuid;
+ }
+ return 'ui-dialog-title-' + id;
+ },
+
+ overlay: function(dialog) {
+ this.$el = $.ui.dialog.overlay.create(dialog);
+ }
+});
+
+$.extend($.ui.dialog.overlay, {
+ instances: [],
+ // reuse old instances due to IE memory leak with alpha transparency (see #5185)
+ oldInstances: [],
+ maxZ: 0,
+ events: $.map('focus,mousedown,mouseup,keydown,keypress,click'.split(','),
+ function(event) { return event + '.dialog-overlay'; }).join(' '),
+ create: function(dialog) {
+ if (this.instances.length === 0) {
+ // prevent use of anchors and inputs
+ // we use a setTimeout in case the overlay is created from an
+ // event that we're going to be cancelling (see #2804)
+ setTimeout(function() {
+ // handle $(el).dialog().dialog('close') (see #4065)
+ if ($.ui.dialog.overlay.instances.length) {
+ $(document).bind($.ui.dialog.overlay.events, function(event) {
+ // stop events if the z-index of the target is < the z-index of the overlay
+ // we cannot return true when we don't want to cancel the event (#3523)
+ if ($(event.target).zIndex() < $.ui.dialog.overlay.maxZ) {
+ return false;
+ }
+ });
+ }
+ }, 1);
+
+ // allow closing by pressing the escape key
+ $(document).bind('keydown.dialog-overlay', function(event) {
+ if (dialog.options.closeOnEscape && !event.isDefaultPrevented() && event.keyCode &&
+ event.keyCode === $.ui.keyCode.ESCAPE) {
+
+ dialog.close(event);
+ event.preventDefault();
+ }
+ });
+
+ // handle window resize
+ $(window).bind('resize.dialog-overlay', $.ui.dialog.overlay.resize);
+ }
+
+ var $el = (this.oldInstances.pop() || $('<div></div>').addClass('ui-widget-overlay'))
+ .appendTo(document.body)
+ .css({
+ width: this.width(),
+ height: this.height()
+ });
+
+ if ($.fn.bgiframe) {
+ $el.bgiframe();
+ }
+
+ this.instances.push($el);
+ return $el;
+ },
+
+ destroy: function($el) {
+ var indexOf = $.inArray($el, this.instances);
+ if (indexOf != -1){
+ this.oldInstances.push(this.instances.splice(indexOf, 1)[0]);
+ }
+
+ if (this.instances.length === 0) {
+ $([document, window]).unbind('.dialog-overlay');
+ }
+
+ $el.remove();
+
+ // adjust the maxZ to allow other modal dialogs to continue to work (see #4309)
+ var maxZ = 0;
+ $.each(this.instances, function() {
+ maxZ = Math.max(maxZ, this.css('z-index'));
+ });
+ this.maxZ = maxZ;
+ },
+
+ height: function() {
+ var scrollHeight,
+ offsetHeight;
+ // handle IE 6
+ if ($.browser.msie && $.browser.version < 7) {
+ scrollHeight = Math.max(
+ document.documentElement.scrollHeight,
+ document.body.scrollHeight
+ );
+ offsetHeight = Math.max(
+ document.documentElement.offsetHeight,
+ document.body.offsetHeight
+ );
+
+ if (scrollHeight < offsetHeight) {
+ return $(window).height() + 'px';
+ } else {
+ return scrollHeight + 'px';
+ }
+ // handle "good" browsers
+ } else {
+ return $(document).height() + 'px';
+ }
+ },
+
+ width: function() {
+ var scrollWidth,
+ offsetWidth;
+ // handle IE
+ if ( $.browser.msie ) {
+ scrollWidth = Math.max(
+ document.documentElement.scrollWidth,
+ document.body.scrollWidth
+ );
+ offsetWidth = Math.max(
+ document.documentElement.offsetWidth,
+ document.body.offsetWidth
+ );
+
+ if (scrollWidth < offsetWidth) {
+ return $(window).width() + 'px';
+ } else {
+ return scrollWidth + 'px';
+ }
+ // handle "good" browsers
+ } else {
+ return $(document).width() + 'px';
+ }
+ },
+
+ resize: function() {
+ /* If the dialog is draggable and the user drags it past the
+ * right edge of the window, the document becomes wider so we
+ * need to stretch the overlay. If the user then drags the
+ * dialog back to the left, the document will become narrower,
+ * so we need to shrink the overlay to the appropriate size.
+ * This is handled by shrinking the overlay before setting it
+ * to the full document size.
+ */
+ var $overlays = $([]);
+ $.each($.ui.dialog.overlay.instances, function() {
+ $overlays = $overlays.add(this);
+ });
+
+ $overlays.css({
+ width: 0,
+ height: 0
+ }).css({
+ width: $.ui.dialog.overlay.width(),
+ height: $.ui.dialog.overlay.height()
+ });
+ }
+});
+
+$.extend($.ui.dialog.overlay.prototype, {
+ destroy: function() {
+ $.ui.dialog.overlay.destroy(this.$el);
+ }
+});
+
+}(jQuery));
diff --git a/h-source/Js/markitup/jquery.markitup.js b/h-source/Js/markitup/jquery.markitup.js
new file mode 100644
index 0000000..ee8f40f
--- /dev/null
+++ b/h-source/Js/markitup/jquery.markitup.js
@@ -0,0 +1,559 @@
+// ----------------------------------------------------------------------------
+// markItUp! Universal MarkUp Engine, JQuery plugin
+// v 1.1.7
+// Dual licensed under the MIT and GPL licenses.
+// ----------------------------------------------------------------------------
+// Copyright (C) 2007-2010 Jay Salvat
+// http://markitup.jaysalvat.com/
+// ----------------------------------------------------------------------------
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+// THE SOFTWARE.
+// ----------------------------------------------------------------------------
+(function($) {
+ $.fn.markItUp = function(settings, extraSettings) {
+ var options, ctrlKey, shiftKey, altKey;
+ ctrlKey = shiftKey = altKey = false;
+
+ options = { id: '',
+ nameSpace: '',
+ root: '',
+ previewInWindow: '', // 'width=800, height=600, resizable=yes, scrollbars=yes'
+ previewAutoRefresh: true,
+ previewPosition: 'after',
+ previewTemplatePath: '~/templates/preview.html',
+ previewParserPath: '',
+ previewParserVar: 'data',
+ resizeHandle: true,
+ beforeInsert: '',
+ afterInsert: '',
+ onEnter: {},
+ onShiftEnter: {},
+ onCtrlEnter: {},
+ onTab: {},
+ markupSet: [ { /* set */ } ]
+ };
+ $.extend(options, settings, extraSettings);
+
+ // compute markItUp! path
+ if (!options.root) {
+ $('script').each(function(a, tag) {
+ miuScript = $(tag).get(0).src.match(/(.*)jquery\.markitup(\.pack)?\.js$/);
+ if (miuScript !== null) {
+ options.root = miuScript[1];
+ }
+ });
+ }
+
+ return this.each(function() {
+ var $$, textarea, levels, scrollPosition, caretPosition, caretOffset,
+ clicked, hash, header, footer, previewWindow, template, iFrame, abort;
+ $$ = $(this);
+ textarea = this;
+ levels = [];
+ abort = false;
+ scrollPosition = caretPosition = 0;
+ caretOffset = -1;
+
+ options.previewParserPath = localize(options.previewParserPath);
+ options.previewTemplatePath = localize(options.previewTemplatePath);
+
+ // apply the computed path to ~/
+ function localize(data, inText) {
+ if (inText) {
+ return data.replace(/("|')~\//g, "$1"+options.root);
+ }
+ return data.replace(/^~\//, options.root);
+ }
+
+ // init and build editor
+ function init() {
+ id = ''; nameSpace = '';
+ if (options.id) {
+ id = 'id="'+options.id+'"';
+ } else if ($$.attr("id")) {
+ id = 'id="markItUp'+($$.attr("id").substr(0, 1).toUpperCase())+($$.attr("id").substr(1))+'"';
+
+ }
+ if (options.nameSpace) {
+ nameSpace = 'class="'+options.nameSpace+'"';
+ }
+ $$.wrap('<div '+nameSpace+'></div>');
+ $$.wrap('<div '+id+' class="markItUp"></div>');
+ $$.wrap('<div class="markItUpContainer"></div>');
+ $$.addClass("markItUpEditor");
+
+ // add the header before the textarea
+ header = $('<div class="markItUpHeader"></div>').insertBefore($$);
+ $(dropMenus(options.markupSet)).appendTo(header);
+
+ // add the footer after the textarea
+ footer = $('<div class="markItUpFooter"></div>').insertAfter($$);
+
+ // add the resize handle after textarea
+ if (options.resizeHandle === true && $.browser.safari !== true) {
+ resizeHandle = $('<div class="markItUpResizeHandle"></div>')
+ .insertAfter($$)
+ .bind("mousedown", function(e) {
+ var h = $$.height(), y = e.clientY, mouseMove, mouseUp;
+ mouseMove = function(e) {
+ $$.css("height", Math.max(20, e.clientY+h-y)+"px");
+ return false;
+ };
+ mouseUp = function(e) {
+ $("html").unbind("mousemove", mouseMove).unbind("mouseup", mouseUp);
+ return false;
+ };
+ $("html").bind("mousemove", mouseMove).bind("mouseup", mouseUp);
+ });
+ footer.append(resizeHandle);
+ }
+
+ // listen key events
+ $$.keydown(keyPressed).keyup(keyPressed);
+
+ // bind an event to catch external calls
+ $$.bind("insertion", function(e, settings) {
+ if (settings.target !== false) {
+ get();
+ }
+ if (textarea === $.markItUp.focused) {
+ markup(settings);
+ }
+ });
+
+ // remember the last focus
+ $$.focus(function() {
+ $.markItUp.focused = this;
+ });
+ }
+
+ // recursively build header with dropMenus from markupset
+ function dropMenus(markupSet) {
+ var ul = $('<ul></ul>'), i = 0;
+ $('li:hover > ul', ul).css('display', 'block');
+ $.each(markupSet, function() {
+ var button = this, t = '', title, li, j;
+ title = (button.key) ? (button.name||'')+' [Ctrl+'+button.key+']' : (button.name||'');
+ key = (button.key) ? 'accesskey="'+button.key+'"' : '';
+ if (button.separator) {
+ li = $('<li class="markItUpSeparator">'+(button.separator||'')+'</li>').appendTo(ul);
+ } else {
+ i++;
+ for (j = levels.length -1; j >= 0; j--) {
+ t += levels[j]+"-";
+ }
+ li = $('<li class="markItUpButton markItUpButton'+t+(i)+' '+(button.className||'')+'"><a href="" '+key+' title="'+title+'">'+(button.name||'')+'</a></li>')
+ .bind("contextmenu", function() { // prevent contextmenu on mac and allow ctrl+click
+ return false;
+ }).click(function() {
+ return false;
+ }).mousedown(function() {
+ if (button.call) {
+ eval(button.call)();
+ }
+ setTimeout(function() { markup(button) },1);
+ return false;
+ }).hover(function() {
+ $('> ul', this).show();
+ $(document).one('click', function() { // close dropmenu if click outside
+ $('ul ul', header).hide();
+ }
+ );
+ }, function() {
+ $('> ul', this).hide();
+ }
+ ).appendTo(ul);
+ if (button.dropMenu) {
+ levels.push(i);
+ $(li).addClass('markItUpDropMenu').append(dropMenus(button.dropMenu));
+ }
+ }
+ });
+ levels.pop();
+ return ul;
+ }
+
+ // markItUp! markups
+ function magicMarkups(string) {
+ if (string) {
+ string = string.toString();
+ string = string.replace(/\(\!\(([\s\S]*?)\)\!\)/g,
+ function(x, a) {
+ var b = a.split('|!|');
+ if (altKey === true) {
+ return (b[1] !== undefined) ? b[1] : b[0];
+ } else {
+ return (b[1] === undefined) ? "" : b[0];
+ }
+ }
+ );
+ // [![prompt]!], [![prompt:!:value]!]
+ string = string.replace(/\[\!\[([\s\S]*?)\]\!\]/g,
+ function(x, a) {
+ var b = a.split(':!:');
+ if (abort === true) {
+ return false;
+ }
+ value = prompt(b[0], (b[1]) ? b[1] : '');
+ if (value === null) {
+ abort = true;
+ }
+ return value;
+ }
+ );
+ return string;
+ }
+ return "";
+ }
+
+ // prepare action
+ function prepare(action) {
+ if ($.isFunction(action)) {
+ action = action(hash);
+ }
+ return magicMarkups(action);
+ }
+
+ // build block to insert
+ function build(string) {
+ openWith = prepare(clicked.openWith);
+ placeHolder = prepare(clicked.placeHolder);
+ replaceWith = prepare(clicked.replaceWith);
+ closeWith = prepare(clicked.closeWith);
+ if (replaceWith !== "") {
+ block = openWith + replaceWith + closeWith;
+ } else if (selection === '' && placeHolder !== '') {
+ block = openWith + placeHolder + closeWith;
+ } else {
+ block = openWith + (string||selection) + closeWith;
+ }
+ return { block:block,
+ openWith:openWith,
+ replaceWith:replaceWith,
+ placeHolder:placeHolder,
+ closeWith:closeWith
+ };
+ }
+
+ // define markup to insert
+ function markup(button) {
+ var len, j, n, i;
+ hash = clicked = button;
+ get();
+
+ $.extend(hash, { line:"",
+ root:options.root,
+ textarea:textarea,
+ selection:(selection||''),
+ caretPosition:caretPosition,
+ ctrlKey:ctrlKey,
+ shiftKey:shiftKey,
+ altKey:altKey
+ }
+ );
+ // callbacks before insertion
+ prepare(options.beforeInsert);
+ prepare(clicked.beforeInsert);
+ if (ctrlKey === true && shiftKey === true) {
+ prepare(clicked.beforeMultiInsert);
+ }
+ $.extend(hash, { line:1 });
+
+ if (ctrlKey === true && shiftKey === true) {
+ lines = selection.split(/\r?\n/);
+ for (j = 0, n = lines.length, i = 0; i < n; i++) {
+ if ($.trim(lines[i]) !== '') {
+ $.extend(hash, { line:++j, selection:lines[i] } );
+ lines[i] = build(lines[i]).block;
+ } else {
+ lines[i] = "";
+ }
+ }
+ string = { block:lines.join('\n')};
+ start = caretPosition;
+ len = string.block.length + (($.browser.opera) ? n : 0);
+ } else if (ctrlKey === true) {
+ string = build(selection);
+ start = caretPosition + string.openWith.length;
+ len = string.block.length - string.openWith.length - string.closeWith.length;
+ len -= fixIeBug(string.block);
+ } else if (shiftKey === true) {
+ string = build(selection);
+ start = caretPosition;
+ len = string.block.length;
+ len -= fixIeBug(string.block);
+ } else {
+ string = build(selection);
+ start = caretPosition + string.block.length ;
+ len = 0;
+ start -= fixIeBug(string.block);
+ }
+ if ((selection === '' && string.replaceWith === '')) {
+ caretOffset += fixOperaBug(string.block);
+
+ start = caretPosition + string.openWith.length;
+ len = string.block.length - string.openWith.length - string.closeWith.length;
+
+ caretOffset = $$.val().substring(caretPosition, $$.val().length).length;
+ caretOffset -= fixOperaBug($$.val().substring(0, caretPosition));
+ }
+ $.extend(hash, { caretPosition:caretPosition, scrollPosition:scrollPosition } );
+
+ if (string.block !== selection && abort === false) {
+ insert(string.block);
+ set(start, len);
+ } else {
+ caretOffset = -1;
+ }
+ get();
+
+ $.extend(hash, { line:'', selection:selection });
+
+ // callbacks after insertion
+ if (ctrlKey === true && shiftKey === true) {
+ prepare(clicked.afterMultiInsert);
+ }
+ prepare(clicked.afterInsert);
+ prepare(options.afterInsert);
+
+ // refresh preview if opened
+ if (previewWindow && options.previewAutoRefresh) {
+ refreshPreview();
+ }
+
+ // reinit keyevent
+ shiftKey = altKey = ctrlKey = abort = false;
+ }
+
+ // Substract linefeed in Opera
+ function fixOperaBug(string) {
+ if ($.browser.opera) {
+ return string.length - string.replace(/\n*/g, '').length;
+ }
+ return 0;
+ }
+ // Substract linefeed in IE
+ function fixIeBug(string) {
+ if ($.browser.msie) {
+ return string.length - string.replace(/\r*/g, '').length;
+ }
+ return 0;
+ }
+
+ // add markup
+ function insert(block) {
+ if (document.selection) {
+ var newSelection = document.selection.createRange();
+ newSelection.text = block;
+ } else {
+ $$.val($$.val().substring(0, caretPosition) + block + $$.val().substring(caretPosition + selection.length, $$.val().length));
+ }
+ }
+
+ // set a selection
+ function set(start, len) {
+ if (textarea.createTextRange){
+ // quick fix to make it work on Opera 9.5
+ if ($.browser.opera && $.browser.version >= 9.5 && len == 0) {
+ return false;
+ }
+ range = textarea.createTextRange();
+ range.collapse(true);
+ range.moveStart('character', start);
+ range.moveEnd('character', len);
+ range.select();
+ } else if (textarea.setSelectionRange ){
+ textarea.setSelectionRange(start, start + len);
+ }
+ textarea.scrollTop = scrollPosition;
+ textarea.focus();
+ }
+
+ // get the selection
+ function get() {
+ textarea.focus();
+
+ scrollPosition = textarea.scrollTop;
+ if (document.selection) {
+ selection = document.selection.createRange().text;
+ if ($.browser.msie) { // ie
+ var range = document.selection.createRange(), rangeCopy = range.duplicate();
+ rangeCopy.moveToElementText(textarea);
+ caretPosition = -1;
+ while(rangeCopy.inRange(range)) { // fix most of the ie bugs with linefeeds...
+ rangeCopy.moveStart('character');
+ caretPosition ++;
+ }
+ } else { // opera
+ caretPosition = textarea.selectionStart;
+ }
+ } else { // gecko & webkit
+ caretPosition = textarea.selectionStart;
+ selection = $$.val().substring(caretPosition, textarea.selectionEnd);
+ }
+ return selection;
+ }
+
+ // open preview window
+ function preview() {
+ if (!previewWindow || previewWindow.closed) {
+ if (options.previewInWindow) {
+ previewWindow = window.open('', 'preview', options.previewInWindow);
+ } else {
+ iFrame = $('<iframe class="markItUpPreviewFrame"></iframe>');
+ if (options.previewPosition == 'after') {
+ iFrame.insertAfter(footer);
+ } else {
+ iFrame.insertBefore(header);
+ }
+ previewWindow = iFrame[iFrame.length - 1].contentWindow || frame[iFrame.length - 1];
+ }
+ } else if (altKey === true) {
+ // Thx Stephen M. Redd for the IE8 fix
+ if (iFrame) {
+ iFrame.remove();
+ } else {
+ previewWindow.close();
+ }
+ previewWindow = iFrame = false;
+ }
+ if (!options.previewAutoRefresh) {
+ refreshPreview();
+ }
+ }
+
+ // refresh Preview window
+ function refreshPreview() {
+ renderPreview();
+ }
+
+ function renderPreview() {
+ var phtml;
+ if (options.previewParserPath !== '') {
+ $.ajax( {
+ type: 'POST',
+ url: options.previewParserPath,
+ data: options.previewParserVar+'='+encodeURIComponent($$.val()),
+ success: function(data) {
+ writeInPreview( localize(data, 1) );
+ }
+ } );
+ } else {
+ if (!template) {
+ $.ajax( {
+ url: options.previewTemplatePath,
+ success: function(data) {
+ writeInPreview( localize(data, 1).replace(/<!-- content -->/g, $$.val()) );
+ }
+ } );
+ }
+ }
+ return false;
+ }
+
+ function writeInPreview(data) {
+ if (previewWindow.document) {
+ try {
+ sp = previewWindow.document.documentElement.scrollTop
+ } catch(e) {
+ sp = 0;
+ }
+ previewWindow.document.open();
+ previewWindow.document.write(data);
+ previewWindow.document.close();
+ previewWindow.document.documentElement.scrollTop = sp;
+ }
+ if (options.previewInWindow) {
+ previewWindow.focus();
+ }
+ }
+
+ // set keys pressed
+ function keyPressed(e) {
+ shiftKey = e.shiftKey;
+ altKey = e.altKey;
+ ctrlKey = (!(e.altKey && e.ctrlKey)) ? e.ctrlKey : false;
+
+ if (e.type === 'keydown') {
+ if (ctrlKey === true) {
+ li = $("a[accesskey="+String.fromCharCode(e.keyCode)+"]", header).parent('li');
+ if (li.length !== 0) {
+ ctrlKey = false;
+ setTimeout(function() {
+ li.triggerHandler('mousedown');
+ },1);
+ return false;
+ }
+ }
+ if (e.keyCode === 13 || e.keyCode === 10) { // Enter key
+ if (ctrlKey === true) { // Enter + Ctrl
+ ctrlKey = false;
+ markup(options.onCtrlEnter);
+ return options.onCtrlEnter.keepDefault;
+ } else if (shiftKey === true) { // Enter + Shift
+ shiftKey = false;
+ markup(options.onShiftEnter);
+ return options.onShiftEnter.keepDefault;
+ } else { // only Enter
+ markup(options.onEnter);
+ return options.onEnter.keepDefault;
+ }
+ }
+ if (e.keyCode === 9) { // Tab key
+ if (shiftKey == true || ctrlKey == true || altKey == true) { // Thx Dr Floob.
+ return false;
+ }
+ if (caretOffset !== -1) {
+ get();
+ caretOffset = $$.val().length - caretOffset;
+ set(caretOffset, 0);
+ caretOffset = -1;
+ return false;
+ } else {
+ markup(options.onTab);
+ return options.onTab.keepDefault;
+ }
+ }
+ }
+ }
+
+ init();
+ });
+ };
+
+ $.fn.markItUpRemove = function() {
+ return this.each(function() {
+ var $$ = $(this).unbind().removeClass('markItUpEditor');
+ $$.parent('div').parent('div.markItUp').parent('div').replaceWith($$);
+ }
+ );
+ };
+
+ $.markItUp = function(settings) {
+ var options = { target:false };
+ $.extend(options, settings);
+ if (options.target) {
+ return $(options.target).each(function() {
+ $(this).focus();
+ $(this).trigger('insertion', [options]);
+ });
+ } else {
+ $('textarea').trigger('insertion', [options]);
+ }
+ };
+})(jQuery);
diff --git a/h-source/Js/markitup/sets/bbcode/images/bold.png b/h-source/Js/markitup/sets/bbcode/images/bold.png
new file mode 100644
index 0000000..889ae80
--- /dev/null
+++ b/h-source/Js/markitup/sets/bbcode/images/bold.png
Binary files differ
diff --git a/h-source/Js/markitup/sets/bbcode/images/clean.png b/h-source/Js/markitup/sets/bbcode/images/clean.png
new file mode 100644
index 0000000..7e7cefb
--- /dev/null
+++ b/h-source/Js/markitup/sets/bbcode/images/clean.png
Binary files differ
diff --git a/h-source/Js/markitup/sets/bbcode/images/code.png b/h-source/Js/markitup/sets/bbcode/images/code.png
new file mode 100644
index 0000000..63fe6ce
--- /dev/null
+++ b/h-source/Js/markitup/sets/bbcode/images/code.png
Binary files differ
diff --git a/h-source/Js/markitup/sets/bbcode/images/fonts.png b/h-source/Js/markitup/sets/bbcode/images/fonts.png
new file mode 100644
index 0000000..b7960db
--- /dev/null
+++ b/h-source/Js/markitup/sets/bbcode/images/fonts.png
Binary files differ
diff --git a/h-source/Js/markitup/sets/bbcode/images/h1.png b/h-source/Js/markitup/sets/bbcode/images/h1.png
new file mode 100644
index 0000000..9c122e9
--- /dev/null
+++ b/h-source/Js/markitup/sets/bbcode/images/h1.png
Binary files differ
diff --git a/h-source/Js/markitup/sets/bbcode/images/h2.png b/h-source/Js/markitup/sets/bbcode/images/h2.png
new file mode 100644
index 0000000..fbd8765
--- /dev/null
+++ b/h-source/Js/markitup/sets/bbcode/images/h2.png
Binary files differ
diff --git a/h-source/Js/markitup/sets/bbcode/images/h3.png b/h-source/Js/markitup/sets/bbcode/images/h3.png
new file mode 100644
index 0000000..c7836cf
--- /dev/null
+++ b/h-source/Js/markitup/sets/bbcode/images/h3.png
Binary files differ
diff --git a/h-source/Js/markitup/sets/bbcode/images/italic.png b/h-source/Js/markitup/sets/bbcode/images/italic.png
new file mode 100644
index 0000000..8482ac8
--- /dev/null
+++ b/h-source/Js/markitup/sets/bbcode/images/italic.png
Binary files differ
diff --git a/h-source/Js/markitup/sets/bbcode/images/link.png b/h-source/Js/markitup/sets/bbcode/images/link.png
new file mode 100644
index 0000000..25eacb7
--- /dev/null
+++ b/h-source/Js/markitup/sets/bbcode/images/link.png
Binary files differ
diff --git a/h-source/Js/markitup/sets/bbcode/images/list-bullet.png b/h-source/Js/markitup/sets/bbcode/images/list-bullet.png
new file mode 100644
index 0000000..4a8672b
--- /dev/null
+++ b/h-source/Js/markitup/sets/bbcode/images/list-bullet.png
Binary files differ
diff --git a/h-source/Js/markitup/sets/bbcode/images/list-item.png b/h-source/Js/markitup/sets/bbcode/images/list-item.png
new file mode 100644
index 0000000..8cb4d69
--- /dev/null
+++ b/h-source/Js/markitup/sets/bbcode/images/list-item.png
Binary files differ
diff --git a/h-source/Js/markitup/sets/bbcode/images/list-numeric.png b/h-source/Js/markitup/sets/bbcode/images/list-numeric.png
new file mode 100644
index 0000000..33b0b8d
--- /dev/null
+++ b/h-source/Js/markitup/sets/bbcode/images/list-numeric.png
Binary files differ
diff --git a/h-source/Js/markitup/sets/bbcode/images/paragraph.png b/h-source/Js/markitup/sets/bbcode/images/paragraph.png
new file mode 100644
index 0000000..95704fb
--- /dev/null
+++ b/h-source/Js/markitup/sets/bbcode/images/paragraph.png
Binary files differ
diff --git a/h-source/Js/markitup/sets/bbcode/images/picture.png b/h-source/Js/markitup/sets/bbcode/images/picture.png
new file mode 100644
index 0000000..4a158fe
--- /dev/null
+++ b/h-source/Js/markitup/sets/bbcode/images/picture.png
Binary files differ
diff --git a/h-source/Js/markitup/sets/bbcode/images/preview.png b/h-source/Js/markitup/sets/bbcode/images/preview.png
new file mode 100644
index 0000000..a9925a0
--- /dev/null
+++ b/h-source/Js/markitup/sets/bbcode/images/preview.png
Binary files differ
diff --git a/h-source/Js/markitup/sets/bbcode/images/quotes.png b/h-source/Js/markitup/sets/bbcode/images/quotes.png
new file mode 100644
index 0000000..e54ebeb
--- /dev/null
+++ b/h-source/Js/markitup/sets/bbcode/images/quotes.png
Binary files differ
diff --git a/h-source/Js/markitup/sets/bbcode/images/stroke.png b/h-source/Js/markitup/sets/bbcode/images/stroke.png
new file mode 100644
index 0000000..612058a
--- /dev/null
+++ b/h-source/Js/markitup/sets/bbcode/images/stroke.png
Binary files differ
diff --git a/h-source/Js/markitup/sets/bbcode/images/underline.png b/h-source/Js/markitup/sets/bbcode/images/underline.png
new file mode 100644
index 0000000..90d0df2
--- /dev/null
+++ b/h-source/Js/markitup/sets/bbcode/images/underline.png
Binary files differ
diff --git a/h-source/Js/markitup/sets/bbcode/readme.txt b/h-source/Js/markitup/sets/bbcode/readme.txt
new file mode 100644
index 0000000..745d5dd
--- /dev/null
+++ b/h-source/Js/markitup/sets/bbcode/readme.txt
@@ -0,0 +1,11 @@
+Markup language:
+BBCode
+
+Description:
+A basic BBCode markup set with Bold, Italic, Underline, Picture, Link, Size, List, Quotes, Code, Clean button, Preview button.
+
+Install:
+- Download the zip file
+- Unzip it in your markItUp! sets folder
+- Modify your JS link to point at this set.js
+- Modify your CSS link to point at this style.css \ No newline at end of file
diff --git a/h-source/Js/markitup/sets/bbcode/set.js b/h-source/Js/markitup/sets/bbcode/set.js
new file mode 100644
index 0000000..3d16ea5
--- /dev/null
+++ b/h-source/Js/markitup/sets/bbcode/set.js
@@ -0,0 +1,32 @@
+// ----------------------------------------------------------------------------
+// markItUp!
+// ----------------------------------------------------------------------------
+// Copyright (C) 2008 Jay Salvat
+// http://markitup.jaysalvat.com/
+// ----------------------------------------------------------------------------
+// BBCode tags example
+// http://en.wikipedia.org/wiki/Bbcode
+// ----------------------------------------------------------------------------
+// Feel free to add more tags
+// ----------------------------------------------------------------------------
+mySettings = {
+ previewParserPath: '', // path to your BBCode parser
+ markupSet: [
+ {name:'Heading 1', key:'1', openWith:'[h1]', closeWith:'[/h1]' },
+ {name:'Heading 2', key:'2', openWith:'[h2]', closeWith:'[/h2]' },
+ {name:'Heading 3', key:'3', openWith:'[h3]', closeWith:'[/h3]' },
+ {name:'Paragraph', openWith:'[p]', closeWith:'[/p]' },
+ {separator:'---------------' },
+ {name:'Bold', key:'B', openWith:'[b]', closeWith:'[/b]'},
+ {name:'Italic', key:'I', openWith:'[i]', closeWith:'[/i]'},
+ {name:'Underline', key:'U', openWith:'[u]', closeWith:'[/u]'},
+ {name:'Stroke through', key:'S', openWith:'[del]', closeWith:'[/del]' },
+ {separator:'---------------' },
+ {name:'Bulleted list', openWith:'[list]\n', closeWith:'\n[/list]'},
+ {name:'Numeric list', openWith:'[enum]\n', closeWith:'\n[/enum]'},
+ {name:'List item', openWith:'[*] ', closeWith:'[/*]'},
+ {separator:'---------------' },
+ {name:'Code', openWith:'[code]', closeWith:'[/code]'},
+ {name:'Link', key: 'L', openWith:'[a]', closeWith:'[/a]',placeHolder:'http://the_url | the_text'},
+ ]
+} \ No newline at end of file
diff --git a/h-source/Js/markitup/sets/bbcode/style.css b/h-source/Js/markitup/sets/bbcode/style.css
new file mode 100644
index 0000000..4ab6031
--- /dev/null
+++ b/h-source/Js/markitup/sets/bbcode/style.css
@@ -0,0 +1,72 @@
+/* -------------------------------------------------------------------
+// markItUp!
+// By Jay Salvat - http://markitup.jaysalvat.com/
+// ------------------------------------------------------------------*/
+.markItUp .markItUpButton1 a {
+ background-image:url(images/h1.png);
+}
+.markItUp .markItUpButton2 a {
+ background-image:url(images/h2.png);
+}
+.markItUp .markItUpButton3 a {
+ background-image:url(images/h3.png);
+}
+.markItUp .markItUpButton4 a {
+ background-image:url(images/paragraph.png);
+}
+.markItUp .markItUpButton5 a {
+ background-image:url(images/bold.png);
+}
+.markItUp .markItUpButton6 a {
+ background-image:url(images/italic.png);
+}
+.markItUp .markItUpButton7 a {
+ background-image:url(images/underline.png);
+}
+.markItUp .markItUpButton8 a {
+ background-image:url(images/stroke.png);
+}
+.markItUp .markItUpButton9 a {
+ background-image:url(images/list-bullet.png);
+}
+.markItUp .markItUpButton10 a {
+ background-image:url(images/list-numeric.png);
+}
+.markItUp .markItUpButton11 a {
+ background-image:url(images/list-item.png);
+}
+.markItUp .markItUpButton12 a {
+ background-image:url(images/code.png);
+}
+.markItUp .markItUpButton13 a {
+ background-image:url(images/link.png);
+}
+/*.markItUp .markItUpButton4 a {
+ background-image:url(images/stroke.png);
+}*/
+
+/*.markItUp .markItUpButton4 a {
+ background-image:url(images/picture.png);
+}*/
+/*.markItUp .markItUpButton5 a {
+ background-image:url(images/link.png);
+}
+
+.markItUp .markItUpButton6 a {
+ background-image:url(images/fonts.png);
+}
+
+
+.markItUp .markItUpButton10 a {
+ background-image:url(images/quotes.png);
+}
+.markItUp .markItUpButton11 a {
+ background-image:url(images/code.png);
+}
+
+.markItUp .clean a {
+ background-image:url(images/clean.png);
+}
+.markItUp .preview a {
+ background-image:url(images/preview.png);
+}*/ \ No newline at end of file
diff --git a/h-source/Js/markitup/skins/simple/images/handle.png b/h-source/Js/markitup/skins/simple/images/handle.png
new file mode 100644
index 0000000..3993b20
--- /dev/null
+++ b/h-source/Js/markitup/skins/simple/images/handle.png
Binary files differ
diff --git a/h-source/Js/markitup/skins/simple/images/menu.png b/h-source/Js/markitup/skins/simple/images/menu.png
new file mode 100644
index 0000000..44a07af
--- /dev/null
+++ b/h-source/Js/markitup/skins/simple/images/menu.png
Binary files differ
diff --git a/h-source/Js/markitup/skins/simple/images/submenu.png b/h-source/Js/markitup/skins/simple/images/submenu.png
new file mode 100644
index 0000000..03d1977
--- /dev/null
+++ b/h-source/Js/markitup/skins/simple/images/submenu.png
Binary files differ
diff --git a/h-source/Js/markitup/skins/simple/style.css b/h-source/Js/markitup/skins/simple/style.css
new file mode 100644
index 0000000..4ff830f
--- /dev/null
+++ b/h-source/Js/markitup/skins/simple/style.css
@@ -0,0 +1,118 @@
+/* -------------------------------------------------------------------
+// markItUp! Universal MarkUp Engine, JQuery plugin
+// By Jay Salvat - http://markitup.jaysalvat.com/
+// ------------------------------------------------------------------*/
+.markItUp * {
+ margin:0px; padding:0px;
+ outline:none;
+}
+.markItUp a:link,
+.markItUp a:visited {
+ color:#000;
+ text-decoration:none;
+}
+.markItUp {
+ width:700px;
+ margin:5px 0 5px 0;
+}
+.markItUpContainer {
+ font:11px Verdana, Arial, Helvetica, sans-serif;
+}
+.markItUpEditor {
+ font:12px 'Courier New', Courier, monospace;
+ padding:5px;
+ width:640px;
+ height:300px;
+ clear:both; display:block;
+ line-height:18px;
+ overflow:auto;
+}
+.markItUpPreviewFrame {
+ overflow:auto;
+ background-color:#FFF;
+ width:99.9%;
+ height:300px;
+ margin:5px 0;
+}
+.markItUpFooter {
+ width:100%;
+}
+.markItUpResizeHandle {
+ overflow:hidden;
+ width:22px; height:5px;
+ margin-left:auto;
+ margin-right:auto;
+ background-image:url(images/handle.png);
+ cursor:n-resize;
+}
+/***************************************************************************************/
+/* first row of buttons */
+.markItUpHeader ul li {
+ list-style:none;
+ float:left;
+ position:relative;
+}
+.markItUpHeader ul li:hover > ul{
+ display:block;
+}
+.markItUpHeader ul .markItUpDropMenu {
+ background:transparent url(images/menu.png) no-repeat 115% 50%;
+ margin-right:5px;
+}
+.markItUpHeader ul .markItUpDropMenu li {
+ margin-right:0px;
+}
+/* next rows of buttons */
+.markItUpHeader ul ul {
+ display:none;
+ position:absolute;
+ top:18px; left:0px;
+ background:#FFF;
+ border:1px solid #000;
+}
+.markItUpHeader ul ul li {
+ float:none;
+ border-bottom:1px solid #000;
+}
+.markItUpHeader ul ul .markItUpDropMenu {
+ background:#FFF url(images/submenu.png) no-repeat 100% 50%;
+}
+.markItUpHeader ul .markItUpSeparator {
+ margin:0 10px;
+ width:1px;
+ height:16px;
+ overflow:hidden;
+ background-color:#CCC;
+}
+.markItUpHeader ul ul .markItUpSeparator {
+ width:auto; height:1px;
+ margin:0px;
+}
+/* next rows of buttons */
+.markItUpHeader ul ul ul {
+ position:absolute;
+ top:-1px; left:150px;
+}
+.markItUpHeader ul ul ul li {
+ float:none;
+}
+.markItUpHeader ul a {
+ display:block;
+ width:16px; height:16px;
+ text-indent:-10000px;
+ background-repeat:no-repeat;
+ padding:3px;
+ margin:0px;
+}
+.markItUpHeader ul ul a {
+ display:block;
+ padding-left:0px;
+ text-indent:0;
+ width:120px;
+ padding:5px 5px 5px 25px;
+ background-position:2px 50%;
+}
+.markItUpHeader ul ul a:hover {
+ color:#FFF;
+ background-color:#000;
+}
diff --git a/h-source/Js/stats.js b/h-source/Js/stats.js
new file mode 100644
index 0000000..7d6be08
--- /dev/null
+++ b/h-source/Js/stats.js
@@ -0,0 +1,35 @@
+
+/***************************************************************************
+ phpTrafficA @soft.ZoneO.net
+ Copyright (C) 2004-2008 ZoneO-soft, Butchu (email: "butchu" with the domain "zoneo.net")
+
+ This program is free software; you can redistribute it and/or
+ modify it under the terms of the GNU General Public License
+ as published by the Free Software Foundation; either version 2
+ of the License, or (at your option) any later version.
+
+ More Info About The Licence At http://www.gnu.org/copyleft/gpl.html
+****************************************************************************/
+
+function encode64(inp){
+var key="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
+var chr1,chr2,chr3,enc3,enc4,i=0,out="";
+while(i<inp.length){
+chr1=inp.charCodeAt(i++);if(chr1>127) chr1=88;
+chr2=inp.charCodeAt(i++);if(chr2>127) chr2=88;
+chr3=inp.charCodeAt(i++);if(chr3>127) chr3=88;
+if(isNaN(chr3)) {enc4=64;chr3=0;} else enc4=chr3&63;
+if(isNaN(chr2)) {enc3=64;chr2=0;} else enc3=((chr2<<2)|(chr3>>6))&63;
+out+=key.charAt((chr1>>2)&63)+key.charAt(((chr1<<4)|(chr2>>4))&63)+key.charAt(enc3)+key.charAt(enc4);
+}
+return encodeURIComponent(out);
+}
+
+function stats(sid){
+var referer=encode64(document.referrer);
+var thispage=encode64(window.location.pathname+location.search);
+var date=new Date();
+var time=date.getTime();
+var resolution= screen.width + "x" + screen.height;
+document.writeln("<img src=\"http://www.h-node.com/traffica/count.php?sid="+sid+"&p="+thispage+"&r="+referer+"&t="+time+"&res="+resolution+"\" alt=\"\" border=\"0\" />\n");
+}
diff --git a/h-source/Library/Array/Validate/Base.php b/h-source/Library/Array/Validate/Base.php
index f1a242e..fb4a66c 100644
--- a/h-source/Library/Array/Validate/Base.php
+++ b/h-source/Library/Array/Validate/Base.php
@@ -2,7 +2,7 @@
// EasyGiant is a PHP framework for creating and managing dynamic content
//
-// Copyright (C) 2009 - 2014 Antonio Gallo (info@laboratoriolibero.com)
+// Copyright (C) 2009 - 2011 Antonio Gallo
// See COPYRIGHT.txt and LICENSE.txt.
//
// This file is part of EasyGiant
@@ -26,7 +26,6 @@ if (!defined('EG')) die('Direct access not allowed!');
class Array_Validate_Base
{
- public $strength;
public $errorString = null; //string containing the list fields not found
public $errorsNumb = null; //numbers of errors
@@ -45,40 +44,7 @@ class Array_Validate_Base
$this->_resultString = new $stringClass();
}
- public function checkNotEmpty($associativeArray,$keyString)
- {
- $errorString = null;
- $keyArray = explode(',',$keyString);
- $numb = 0;
- for ($i = 0; $i < count($keyArray); $i++)
- {
- if (array_key_exists($keyArray[$i],$associativeArray))
- {
- if (is_array($associativeArray[$keyArray[$i]]))
- {
- $errorString .= $this->_resultString->getNotDefinedResultString($keyArray[$i]);
- $numb++;
- }
- else
- {
- if (strcmp(trim($associativeArray[$keyArray[$i]]),'') === 0)
- {
- $errorString .= $this->_resultString->getNotDefinedResultString($keyArray[$i]);
- $numb++;
- }
- }
- }
- else
- {
- $errorString .= $this->_resultString->getNotDefinedResultString($keyArray[$i]);
- $numb++;
- }
- }
- $this->errorString = $errorString;
- $this->errorNumb = $numb;
- return $numb === 0 ? true : false;
- }
-
+
//verify that the values of the associative array ($associativeArray) indicated by the key string ($keyString) are not '' and are equal (===) to each other
public function checkEqual($associativeArray,$keyString)
{
@@ -150,13 +116,6 @@ class Array_Validate_Base
}
- //verify that the values of the associative array ($associativeArray) indicated by the key string ($keyString) are integer strings
- //$strength: hard or soft. If $strength is set equal to soft than non check is made upon array values equalt to '' or null
- public function checkInteger($associativeArray,$keyString,$strength = 'strong')
- {
- return $this->checkGeneric($associativeArray,$keyString,$strength,'checkInteger','getNotIntegerFormatResultString');
- }
-
//verify that the values of the associative array ($associativeArray) indicated by the key string ($keyString) is a number (integer or number). It makes use of the is_numeric PHP built-in function
//$strength: hard or soft. If $strength is set equal to soft than non check is made upon array values equalt to '' or null
public function checkNumeric($associativeArray,$keyString,$strength = 'strong')
@@ -164,12 +123,6 @@ class Array_Validate_Base
return $this->checkGeneric($associativeArray,$keyString,$strength,'is_numeric','getNotNumericResultString');
}
- //verify that the values of the associative array ($associativeArray) indicated by the key string ($keyString) are an ISO date.
- //$strength: hard or soft. If $strength is set equal to soft than non check is made upon array values equalt to '' or null
- public function checkIsoDate($associativeArray,$keyString,$strength = 'strong')
- {
- return $this->checkGeneric($associativeArray,$keyString,$strength,'checkIsoDate','getNotDateResultString');
- }
//apply a generic check function
//$strength: hard or soft. If $strength is set equal to soft than non check is made upon array values equalt to '' or null
@@ -186,7 +139,7 @@ class Array_Validate_Base
{
if (array_key_exists($keyArray[$i],$associativeArray))
{
- if (strcmp($associativeArray[$keyArray[$i]],'') !== 0 or $this->strength === 'strong')
+ if (strcmp($associativeArray[$keyArray[$i]],'') !== 0 or $strength === 'strong')
{
if (!call_user_func($func,$associativeArray[$keyArray[$i]]))
{
@@ -264,7 +217,7 @@ class Array_Validate_Base
{
if (array_key_exists($keyArray[$i],$associativeArray))
{
- if (strcmp($associativeArray[$keyArray[$i]],'') !== 0 or $this->strength === 'strong')
+ if (strcmp($associativeArray[$keyArray[$i]],'') !== 0 or $strength === 'strong')
{
if (!in_array($associativeArray[$keyArray[$i]],$stringsArray))
{
@@ -281,50 +234,25 @@ class Array_Validate_Base
//verify that the values of the associative array ($associativeArray) indicated by the key string ($keyString) match the regular expression $regExp
public function checkMatch($associativeArray,$keyString,$regExp = '/./',$strength = 'strong')
{
- $errorString = null;
- $keyArray = explode(',',$keyString);
- $numb = 0;
- for ($i = 0; $i < count($keyArray); $i++)
- {
- if (array_key_exists($keyArray[$i],$associativeArray))
- {
- if (strcmp($associativeArray[$keyArray[$i]],'') !== 0 or $this->strength === 'strong')
- {
- if (!preg_match($regExp,$associativeArray[$keyArray[$i]]))
- {
- $numb++;
- $errorString .= $this->_resultString->getDoesntMatchResultString($keyArray[$i],$regExp);
- }
- }
- }
- }
- $this->errorString = $errorString;
- return $numb === 0 ? true : false;
- }
-
- //verify that the values of the associative array ($associativeArray) indicated by the key string ($keyString) are decimal with the format indicated in $format
- //$format: M,D M is the maximum number of digits, D is the number of digits to the right of the decimal point
- public function checkDecimal($associativeArray,$keyString,$format = '10,2')
- {
- $errorString = null;
- $keyArray = explode(',',$keyString);
- $numb = 0;
- for ($i = 0; $i < count($keyArray); $i++)
- {
- if (array_key_exists($keyArray[$i],$associativeArray))
+ $errorString = null;
+ $keyArray = explode(',',$keyString);
+ $numb = 0;
+ for ($i = 0; $i < count($keyArray); $i++)
{
- if (strcmp($associativeArray[$keyArray[$i]],'') !== 0 or $this->strength === 'strong')
+ if (array_key_exists($keyArray[$i],$associativeArray))
{
- if (!checkDecimal($associativeArray[$keyArray[$i]],$format))
+ if (strcmp($associativeArray[$keyArray[$i]],'') !== 0 or $strength === 'strong')
{
- $numb++;
- $errorString .= $this->_resultString->getNotDecimalResultString($keyArray[$i],$format);
+ if (!preg_match($regExp,$associativeArray[$keyArray[$i]]))
+ {
+ $numb++;
+ $errorString .= $this->_resultString->getDoesntMatchResultString($keyArray[$i],$regExp);
+ }
}
}
}
- }
- $this->errorString = $errorString;
- return $numb === 0 ? true : false;
+ $this->errorString = $errorString;
+ return $numb === 0 ? true : false;
}
} \ No newline at end of file
diff --git a/h-source/Library/Array/Validate/Soft.php b/h-source/Library/Array/Validate/Soft.php
index d790652..b348bdc 100644
--- a/h-source/Library/Array/Validate/Soft.php
+++ b/h-source/Library/Array/Validate/Soft.php
@@ -2,7 +2,7 @@
// EasyGiant is a PHP framework for creating and managing dynamic content
//
-// Copyright (C) 2009 - 2014 Antonio Gallo (info@laboratoriolibero.com)
+// Copyright (C) 2009 - 2011 Antonio Gallo
// See COPYRIGHT.txt and LICENSE.txt.
//
// This file is part of EasyGiant
@@ -26,11 +26,77 @@ if (!defined('EG')) die('Direct access not allowed!');
class Array_Validate_Soft extends Array_Validate_Base
{
- public function __construct($lang = 'En')
+ public function __construct($lang = 'Eng')
{
parent::__construct($lang);
-
- $this->strength = "soft";
+ }
+
+
+ //verify that the values of the associative array ($associativeArray) indicated by the key string ($keyString) are not '' and are equal (===) to each other
+ public function checkEqual($associativeArray,$keyString)
+ {
+ return parent::checkEqual($associativeArray,$keyString);
+ }
+
+ //verify that the values of the associative array ($associativeArray) indicated by the key string ($keyString) are alphabetic values
+ public function checkAlpha($associativeArray,$keyString)
+ {
+ return parent::checkAlpha($associativeArray,$keyString,'soft');
+ }
+
+
+ //verify that the values of the associative array ($associativeArray) indicated by the key string ($keyString) are alphanumeric values
+ public function checkAlphaNum($associativeArray,$keyString)
+ {
+ return parent::checkAlphaNum($associativeArray,$keyString,'soft');
+ }
+
+
+ //verify that the values of the associative array ($associativeArray) indicated by the key string ($keyString) are decimal digits
+ public function checkDigit($associativeArray,$keyString)
+ {
+ return parent::checkDigit($associativeArray,$keyString,'soft');
+ }
+
+
+ //verify that the values of the associative array ($associativeArray) indicated by the key string ($keyString) have mail format
+ public function checkMail($associativeArray,$keyString)
+ {
+ return parent::checkMail($associativeArray,$keyString,'soft');
+ }
+
+
+ //verify that the values of the associative array ($associativeArray) indicated by the key string ($keyString) is a number (integer or number). It makes use of the is_numeric PHP built-in function
+ public function checkNumeric($associativeArray,$keyString)
+ {
+ return parent::checkNumeric($associativeArray,$keyString,'soft');
+ }
+
+
+ //verify that the values of the associative array ($associativeArray) indicated by the key string ($keyString) have a number of chars smaller than $maxLenght
+ public function checkLength($associativeArray,$keyString,$maxLength = 10)
+ {
+ return parent::checkLength($associativeArray,$keyString,$maxLength);
+ }
+
+
+ //verify that the values of the associative array ($associativeArray) indicated by the key string ($keyString) are different from the values indicated in the argument $strings (a comma-separated list of words)
+ public function checkIsNotStrings($associativeArray,$keyString,$strings = '')
+ {
+ return parent::checkIsNotStrings($associativeArray,$keyString,$strings);
+ }
+
+
+ //verify that the values of the associative array ($associativeArray) indicated by the key string ($keyString) are one of the values indicated in the argument $strings (a comma-separated list of words)
+ public function checkIsStrings($associativeArray,$keyString,$strings = '')
+ {
+ return parent::checkIsStrings($associativeArray,$keyString,$strings,'soft');
+ }
+
+ //verify that the values of the associative array ($associativeArray) indicated by the key string ($keyString) match the regular expression $regExp
+ public function checkMatch($associativeArray,$keyString,$regExp = '/./')
+ {
+ return parent::checkMatch($associativeArray,$keyString,$regExp,'soft');
}
-}
+} \ No newline at end of file
diff --git a/h-source/Library/Array/Validate/Strong.php b/h-source/Library/Array/Validate/Strong.php
index d907d1d..ccdce74 100644
--- a/h-source/Library/Array/Validate/Strong.php
+++ b/h-source/Library/Array/Validate/Strong.php
@@ -2,7 +2,7 @@
// EasyGiant is a PHP framework for creating and managing dynamic content
//
-// Copyright (C) 2009 - 2014 Antonio Gallo (info@laboratoriolibero.com)
+// Copyright (C) 2009 - 2011 Antonio Gallo
// See COPYRIGHT.txt and LICENSE.txt.
//
// This file is part of EasyGiant
@@ -22,17 +22,42 @@
if (!defined('EG')) die('Direct access not allowed!');
-//class to validate associative arrays
+//class to manage arrays
class Array_Validate_Strong extends Array_Validate_Base
{
- public function __construct($lang = 'En')
+ public function __construct($lang = 'Eng')
{
parent::__construct($lang);
-
- $this->strength = "strong";
}
+
+ public function checkNotEmpty($associativeArray,$keyString)
+ {
+ $errorString = null;
+ $keyArray = explode(',',$keyString);
+ $numb = 0;
+ for ($i = 0; $i < count($keyArray); $i++)
+ {
+ if (array_key_exists($keyArray[$i],$associativeArray))
+ {
+ if (strcmp(trim($associativeArray[$keyArray[$i]]),'') === 0)
+ {
+ $errorString .= $this->_resultString->getNotDefinedResultString($keyArray[$i]);
+ $numb++;
+ }
+ }
+ else
+ {
+ $errorString .= $this->_resultString->getNotDefinedResultString($keyArray[$i]);
+ $numb++;
+ }
+ }
+ $this->errorString = $errorString;
+ $this->errorNumb = $numb;
+ return $numb === 0 ? true : false;
+ }
+
//verify that the values of the associative array ($associativeArray) indicated by the key string ($keyString) are not '' and are equal (===) to each other
public function checkEqual($associativeArray,$keyString)
{
@@ -47,7 +72,7 @@ class Array_Validate_Strong extends Array_Validate_Base
}
//verify that the values of the associative array ($associativeArray) indicated by the key string ($keyString) are alphabetic values
- public function checkAlpha($associativeArray,$keyString,$strength = 'strong')
+ public function checkAlpha($associativeArray,$keyString)
{
if ($this->checkNotEmpty($associativeArray,$keyString))
{
@@ -61,7 +86,7 @@ class Array_Validate_Strong extends Array_Validate_Base
//verify that the values of the associative array ($associativeArray) indicated by the key string ($keyString) are alphanumeric values
- public function checkAlphaNum($associativeArray,$keyString,$strength = 'strong')
+ public function checkAlphaNum($associativeArray,$keyString)
{
if ($this->checkNotEmpty($associativeArray,$keyString))
{
@@ -75,7 +100,7 @@ class Array_Validate_Strong extends Array_Validate_Base
//verify that the values of the associative array ($associativeArray) indicated by the key string ($keyString) are decimal digits
- public function checkDigit($associativeArray,$keyString,$strength = 'strong')
+ public function checkDigit($associativeArray,$keyString)
{
if ($this->checkNotEmpty($associativeArray,$keyString))
{
@@ -89,7 +114,7 @@ class Array_Validate_Strong extends Array_Validate_Base
//verify that the values of the associative array ($associativeArray) indicated by the key string ($keyString) have mail format
- public function checkMail($associativeArray,$keyString,$strength = 'strong')
+ public function checkMail($associativeArray,$keyString)
{
if ($this->checkNotEmpty($associativeArray,$keyString))
{
@@ -102,21 +127,8 @@ class Array_Validate_Strong extends Array_Validate_Base
}
- //verify that the values of the associative array ($associativeArray) indicated by the key string ($keyString) are an ISO date.
- public function checkIsoDate($associativeArray,$keyString,$strength = 'strong')
- {
- if ($this->checkNotEmpty($associativeArray,$keyString))
- {
-
- return parent::checkIsoDate($associativeArray,$keyString,'strong');
-
- } else {
- return false;
- }
- }
-
//verify that the values of the associative array ($associativeArray) indicated by the key string ($keyString) is a number (integer or number). It makes use of the is_numeric PHP built-in function
- public function checkNumeric($associativeArray,$keyString,$strength = 'strong')
+ public function checkNumeric($associativeArray,$keyString)
{
if ($this->checkNotEmpty($associativeArray,$keyString))
{
@@ -128,18 +140,6 @@ class Array_Validate_Strong extends Array_Validate_Base
}
}
- //verify that the values of the associative array ($associativeArray) indicated by the key string ($keyString) is an integer string.
- public function checkInteger($associativeArray,$keyString,$strength = 'strong')
- {
- if ($this->checkNotEmpty($associativeArray,$keyString))
- {
-
- return parent::checkInteger($associativeArray,$keyString,'strong');
-
- } else {
- return false;
- }
- }
//verify that the values of the associative array ($associativeArray) indicated by the key string ($keyString) have a number of chars smaller than $maxLenght
public function checkLength($associativeArray,$keyString,$maxLength = 10)
@@ -170,7 +170,7 @@ class Array_Validate_Strong extends Array_Validate_Base
//verify that the values of the associative array ($associativeArray) indicated by the key string ($keyString) are one of the values indicated in the argument $strings (a comma-separated list of words)
- public function checkIsStrings($associativeArray,$keyString,$strings = '',$strength = 'strong')
+ public function checkIsStrings($associativeArray,$keyString,$strings = '')
{
if ($this->checkNotEmpty($associativeArray,$keyString))
{
@@ -183,7 +183,7 @@ class Array_Validate_Strong extends Array_Validate_Base
}
//verify that the values of the associative array ($associativeArray) indicated by the key string ($keyString) match the regular expression $regExp
- public function checkMatch($associativeArray,$keyString,$regExp = '/./',$strength = 'strong')
+ public function checkMatch($associativeArray,$keyString,$regExp = '/./')
{
if ($this->checkNotEmpty($associativeArray,$keyString))
{
@@ -194,18 +194,4 @@ class Array_Validate_Strong extends Array_Validate_Base
return false;
}
}
-
- //verify that the values of the associative array ($associativeArray) indicated by the key string ($keyString) are decimal with the format indicated in $format
- //$format: M,D M is the maximum number of digits, D is the number of digits to the right of the decimal point
- public function checkDecimal($associativeArray,$keyString,$format = '10,2')
- {
- if ($this->checkNotEmpty($associativeArray,$keyString))
- {
-
- return parent::checkDecimal($associativeArray,$keyString,$format);
-
- } else {
- return false;
- }
- }
-}
+} \ No newline at end of file
diff --git a/h-source/Library/Array/Validate/Values.php b/h-source/Library/Array/Validate/Values.php
deleted file mode 100644
index 9355949..0000000
--- a/h-source/Library/Array/Validate/Values.php
+++ /dev/null
@@ -1,36 +0,0 @@
-<?php
-
-// EasyGiant is a PHP framework for creating and managing dynamic content
-//
-// Copyright (C) 2009 - 2014 Antonio Gallo (info@laboratoriolibero.com)
-// See COPYRIGHT.txt and LICENSE.txt.
-//
-// This file is part of EasyGiant
-//
-// EasyGiant is free software: you can redistribute it and/or modify
-// it under the terms of the GNU General Public License as published by
-// the Free Software Foundation, either version 3 of the License, or
-// (at your option) any later version.
-//
-// EasyGiant is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License
-// along with EasyGiant. If not, see <http://www.gnu.org/licenses/>.
-
-if (!defined('EG')) die('Direct access not allowed!');
-
-//class to validate associative arrays
-class Array_Validate_Values extends Array_Validate_Soft
-{
-
- public function __construct($lang = 'En')
- {
- parent::__construct($lang);
-
- $this->strength = "strong";
- }
-
-}
diff --git a/h-source/Library/ArrayExt.php b/h-source/Library/ArrayExt.php
index d4300b4..2b02c9e 100755
--- a/h-source/Library/ArrayExt.php
+++ b/h-source/Library/ArrayExt.php
@@ -2,7 +2,7 @@
// EasyGiant is a PHP framework for creating and managing dynamic content
//
-// Copyright (C) 2009 - 2014 Antonio Gallo (info@laboratoriolibero.com)
+// Copyright (C) 2009 - 2011 Antonio Gallo
// See COPYRIGHT.txt and LICENSE.txt.
//
// This file is part of EasyGiant
@@ -50,7 +50,7 @@ class ArrayExt {
if (!in_array($temp[1],explode(',',Params::$allowedSanitizeFunc))) {
throw new Exception('"'.$temp[1]. '" function not allowed');
}
- if (array_key_exists($temp[0],$associativeArray) and !is_array($associativeArray[$temp[0]])) {
+ if (array_key_exists($temp[0],$associativeArray)) {
$tempArray[$temp[0]] = call_user_func($temp[1],$associativeArray[$temp[0]]);
} else {
$tempArray[$temp[0]] = '';
diff --git a/h-source/Library/Bootstrap.php b/h-source/Library/Bootstrap.php
index aa32041..5d7a12f 100755
--- a/h-source/Library/Bootstrap.php
+++ b/h-source/Library/Bootstrap.php
@@ -2,7 +2,7 @@
// EasyGiant is a PHP framework for creating and managing dynamic content
//
-// Copyright (C) 2009 - 2014 Antonio Gallo (info@laboratoriolibero.com)
+// Copyright (C) 2009 - 2011 Antonio Gallo
// See COPYRIGHT.txt and LICENSE.txt.
//
// This file is part of EasyGiant
diff --git a/h-source/Library/BoxParser.php b/h-source/Library/BoxParser.php
index 302439a..0e7e03f 100644
--- a/h-source/Library/BoxParser.php
+++ b/h-source/Library/BoxParser.php
@@ -2,7 +2,7 @@
// EasyGiant is a PHP framework for creating and managing dynamic content
//
-// Copyright (C) 2009 - 2014 Antonio Gallo (info@laboratoriolibero.com)
+// Copyright (C) 2009 - 2011 Antonio Gallo
// See COPYRIGHT.txt and LICENSE.txt.
//
// This file is part of EasyGiant
diff --git a/h-source/Library/Call.php b/h-source/Library/Call.php
index 7f80841..c75508b 100755
--- a/h-source/Library/Call.php
+++ b/h-source/Library/Call.php
@@ -2,7 +2,7 @@
// EasyGiant is a PHP framework for creating and managing dynamic content
//
-// Copyright (C) 2009 - 2014 Antonio Gallo (info@laboratoriolibero.com)
+// Copyright (C) 2009 - 2011 Antonio Gallo
// See COPYRIGHT.txt and LICENSE.txt.
//
// This file is part of EasyGiant
@@ -35,40 +35,19 @@ function sanitizeSuperGlobal()
$_SERVER = stripslashesDeep($_SERVER);
}
-function checkPostLength($checkArray = null)
+
+
+function checkPostLength()
{
- $a = isset($checkArray) ? $checkArray : $_POST;
-
if (MAX_POST_LENGTH !== 0)
{
- foreach ($a as $key => $value)
+ foreach ($_POST as $key => $value)
{
- if (is_array($value))
- {
- checkPostLength($value);
- }
- else
- {
- if (strlen($value) > MAX_POST_LENGTH) die('the length of some of the $_POST values is too large');
- }
+ if (strlen($value) > MAX_POST_LENGTH) die('the length of some of the $_POST values is too large');
}
}
}
-//remove elements that are arrays
-//applied to $_POST and $_GET
-function fixArray($array)
-{
- $temp = array();
-
- foreach ($array as $key => $value)
- {
- $temp[$key] = is_array($value) ? "" : $value;
- }
-
- return $temp;
-}
-
function checkRequestUriLength()
{
if (MAX_REQUEST_URI_LENGTH !== 0)
@@ -82,108 +61,20 @@ function checkRegisterGlobals()
if (ini_get('register_globals')) die('register globals is on: easyGiant works only with register globals off');
}
-//geth the name of the current application used
-function getApplicationName()
-{
- if (isset(Params::$currentApplication))
- {
- return Params::$currentApplication;
- }
- return null;
-}
-
-//geth the path of the current application used
-//add the trailing slash to the application name
-function getApplicationPath()
-{
- if (isset(Params::$currentApplication))
- {
- return "Apps".DS.ucfirst(Params::$currentApplication).DS;
- }
- return null;
-}
-
-function languageInUrl($url)
-{
- $url = trim($url,"/");
-
- if (in_array($url,Params::$frontEndLanguages))
- {
- return $url."/";
- }
- return false;
-}
-
function callHook()
{
-
+
$currentUrl = null;
if (MOD_REWRITE_MODULE === true)
{
- if (isset($_GET['url']))
- {
- if (!languageInUrl($_GET['url']))
- {
- $url = $_GET['url'];
- }
- else
- {
- $url = languageInUrl($_GET['url']) . DEFAULT_CONTROLLER . '/' . DEFAULT_ACTION;
- }
- }
- else
- {
- $url = DEFAULT_CONTROLLER . '/' . DEFAULT_ACTION;
- }
+ $url = isset($_GET['url']) ? $_GET['url'] : DEFAULT_CONTROLLER . '/' . DEFAULT_ACTION;
}
else
{
- if (strcmp(getQueryString(),"") !== 0)
- {
- if (!languageInUrl(getQueryString()))
- {
- $url = getQueryString();
- }
- else
- {
- $url = languageInUrl(getQueryString()) . DEFAULT_CONTROLLER . '/' . DEFAULT_ACTION;
- }
- }
- else
- {
- $url = DEFAULT_CONTROLLER . '/' . DEFAULT_ACTION;
- }
+ $url = (strcmp(getQueryString(),"") !== 0) ? getQueryString() : DEFAULT_CONTROLLER . '/' . DEFAULT_ACTION;
}
- $arriveUrl = $url;
-
- $urlArray = array();
- $urlArray = explode("/",$url);
-
- //get the language
- if (count(Params::$frontEndLanguages) > 0)
- {
- if (in_array($urlArray[0],Params::$frontEndLanguages))
- {
- Params::$lang = sanitizeAll($urlArray[0]);
- array_shift($urlArray);
- }
- else
- {
- Params::$lang = Params::$defaultFrontEndLanguage;
-/*
- if (isset($_GET['url']) and Params::$redirectToDefaultLanguage)
- {
- $h = new HeaderObj(DOMAIN_NAME);
-
- $h->redirect($arriveUrl);
- }*/
- }
- }
-
- $url = implode("/",$urlArray);
-
// rewrite the URL
if (Route::$rewrite === 'yes')
{
@@ -194,19 +85,12 @@ function callHook()
// echo $url;
+ $urlArray = array();
$urlArray = explode("/",$url);
+
$controller = DEFAULT_CONTROLLER;
$action = DEFAULT_ACTION;
-
- //check if an application name is found in the URL
- if (isset(Params::$installed) and isset($urlArray[0]) and strcmp($urlArray[0],'') !== 0 and in_array($urlArray[0],Params::$installed))
- {
- Params::$currentApplication = strtolower(trim($urlArray[0]));
-
- array_shift($urlArray);
- }
-
if (isset($urlArray[0]))
{
$controller = (strcmp($urlArray[0],'') !== 0) ? strtolower(trim($urlArray[0])) : DEFAULT_CONTROLLER;
@@ -224,30 +108,10 @@ function callHook()
$errorAction = ERROR_ACTION !== false ? ERROR_ACTION : DEFAULT_ACTION;
/*
- CHECK COUPLES CONTROLLER,ACTION
- */
- if (!in_array('all',Route::$allowed))
- {
- $couple = "$controller,$action";
- if (getApplicationName() !== null)
- {
- $couple = getApplicationName().",".$couple;
- }
- if (!in_array($couple,Route::$allowed))
- {
- Params::$currentApplication = null;
- $controller = $errorController;
- $action = $errorAction;
- $urlArray = array();
- }
- }
-
- /*
VERIFY THE ACTION NAME
- */
+ */
if (method_exists('Controller', $action) or !ctype_alnum($action) or (strcmp($action,'') === 0))
{
- Params::$currentApplication = null;
$controller = $errorController;
$action = $errorAction;
$urlArray = array();
@@ -258,7 +122,6 @@ function callHook()
*/
if (!ctype_alnum($controller) or (strcmp($controller,'') === 0))
{
- Params::$currentApplication = null;
$controller = $errorController;
$action = $errorAction;
$urlArray = array();
@@ -266,10 +129,8 @@ function callHook()
//check that the controller class belongs to the application/controllers folder
//otherwise set the controller to the default controller
- // if (!file_exists(ROOT.DS.APPLICATION_PATH.DS.'Controllers'.DS.ucwords($controller).'Controller.php') and !file_exists(ROOT.DS.APPLICATION_PATH.DS.getApplicationPath().'Controllers'.DS.ucwords($controller).'Controller.php'))
- if (!file_exists(ROOT.DS.APPLICATION_PATH.DS.getApplicationPath().'Controllers'.DS.ucwords($controller).'Controller.php'))
+ if (!file_exists(ROOT.DS.APPLICATION_PATH.DS.'Controllers'.DS.ucwords($controller).'Controller.php'))
{
- Params::$currentApplication = null;
$controller = $errorController;
$action = $errorAction;
$urlArray = array();
@@ -278,7 +139,6 @@ function callHook()
//set the controller class to DEFAULT_CONTROLLER if it doesn't exists
if (!class_exists(ucwords($controller).'Controller'))
{
- Params::$currentApplication = null;
$controller = $errorController;
$action = $errorAction;
$urlArray = array();
@@ -287,28 +147,40 @@ function callHook()
//set the action to DEFAULT_ACTION if it doesn't exists
if (!method_exists(ucwords($controller).'Controller', $action))
{
- Params::$currentApplication = null;
$controller = $errorController;
$action = $errorAction;
$urlArray = array();
}
+
+ /*
+ CHECK COUPLES CONTROLLER,ACTION
+ */
+ if (!in_array('all',Route::$allowed))
+ {
+ $couple = "$controller,$action";
+ if (!in_array($couple,Route::$allowed))
+ {
+ $controller = $errorController;
+ $action = $errorAction;
+ $urlArray = array();
+ }
+ }
array_shift($urlArray);
$queryString = $urlArray;
//set the name of the application
- $controllerName = $controller;
+ $application = $controller;
$controller = ucwords($controller);
$model = $controller;
$controller .= 'Controller';
$model .= 'Model';
-// echo $controller."-".$action;
//include the file containing the set of actions to carry out before the initialization of the controller class
Hooks::load(ROOT . DS . APPLICATION_PATH . DS . 'Hooks' . DS . 'BeforeInitialization.php');
if (class_exists($controller))
{
- $dispatch = new $controller($model,$controllerName,$queryString, getApplicationName());
+ $dispatch = new $controller($model,$application,$queryString);
//pass the action to the controller object
$dispatch->action = $action;
@@ -324,7 +196,7 @@ function callHook()
$templateFlag= true;
- if (method_exists($dispatch, $action))
+ if (method_exists($controller, $action))
{
//pass the action to the theme object
$dispatch->theme->action = $action;
@@ -363,10 +235,7 @@ function rewrite($url)
$oldKey = $key;
$key = str_replace('\/','/',$key);
$key = str_replace('/','\/',$key);
-
- $regExpr = Params::$exactUrlMatchRewrite ? '/^'.$key.'$/' : '/^'.$key.'/';
-
- if (preg_match($regExpr,$url))
+ if (preg_match('/^'.$key.'/',$url))
{
$nurl = preg_replace('/^'.$key.'/',$address,$url);
return array($nurl,$oldKey);
@@ -403,18 +272,10 @@ function __autoload($className)
{
require_once(ROOT . DS . 'Library' . DS . $className . '.php');
}
- else if (getApplicationName() and file_exists(ROOT . DS . APPLICATION_PATH . DS . getApplicationPath() . 'Controllers' . DS . $backupName . '.php'))
- {
- require_once(ROOT . DS . APPLICATION_PATH . DS . getApplicationPath() . 'Controllers' . DS . $backupName . '.php');
- }
else if (file_exists(ROOT . DS . APPLICATION_PATH . DS . 'Controllers' . DS . $backupName . '.php'))
{
require_once(ROOT . DS . APPLICATION_PATH . DS . 'Controllers' . DS . $backupName . '.php');
}
- else if (getApplicationName() and file_exists(ROOT . DS . APPLICATION_PATH . DS . getApplicationPath() . 'Models' . DS . $backupName . '.php'))
- {
- require_once(ROOT . DS . APPLICATION_PATH . DS . getApplicationPath() . 'Models' . DS . $backupName . '.php');
- }
else if (file_exists(ROOT . DS . APPLICATION_PATH . DS . 'Models' . DS . $backupName . '.php'))
{
require_once(ROOT . DS . APPLICATION_PATH . DS . 'Models' . DS . $backupName . '.php');
@@ -423,10 +284,6 @@ function __autoload($className)
{
require_once(ROOT . DS . APPLICATION_PATH . DS . 'Modules' . DS . $backupName . '.php');
}
- else if (getApplicationName() and file_exists(ROOT . DS . APPLICATION_PATH . DS . getApplicationPath() . 'Strings' . DS . $backupName . '.php'))
- {
- require_once(ROOT . DS . APPLICATION_PATH . DS . getApplicationPath() . 'Strings' . DS . $backupName . '.php');
- }
else if (file_exists(ROOT . DS . APPLICATION_PATH . DS . 'Strings' . DS . $className . '.php'))
{
require_once(ROOT . DS . APPLICATION_PATH . DS . 'Strings' . DS . $className . '.php');
@@ -436,9 +293,6 @@ function __autoload($className)
try {
- $_POST = fixArray($_POST);
- $_GET = fixArray($_GET);
-
//check the length of the $_POST values
checkPostLength();
diff --git a/h-source/Library/Controller.php b/h-source/Library/Controller.php
index bc1c229..b0eef53 100755
--- a/h-source/Library/Controller.php
+++ b/h-source/Library/Controller.php
@@ -2,7 +2,7 @@
// EasyGiant is a PHP framework for creating and managing dynamic content
//
-// Copyright (C) 2009 - 2014 Antonio Gallo (info@laboratoriolibero.com)
+// Copyright (C) 2009 - 2011 Antonio Gallo
// See COPYRIGHT.txt and LICENSE.txt.
//
// This file is part of EasyGiant
@@ -31,8 +31,6 @@ class Controller {
protected $_queryString = array(); //the array of args coming from the url
- public $application = null;
- public $applicationUrl = null; //the url of the application
public $controller;
public $action;
public $currPage; //the URL of the current page
@@ -59,21 +57,17 @@ class Controller {
protected $scaffold = null; //the reference to the scaffold object
- function __construct($model, $controller, $queryString = array(), $application = null)
- {
- $this->application = $application;
+ function __construct($model, $controller, $queryString = array()) {
$this->controller = $controller;
$this->modelName = $model;
$this->_queryString = $queryString;
- $this->theme = new Theme($application, $controller);
+ $this->theme = new Theme($controller);
$this->baseUrl = $this->theme->baseUrl;
$this->baseUrlSrc = $this->theme->baseUrlSrc;
-
+
$this->headerObj = new HeaderObj(DOMAIN_NAME);
$this->request = new Request();
-
- $this->applicationUrl = isset($application) ? $application . "/" : null;
}
//redirect to $path after the time $time
@@ -142,8 +136,8 @@ class Controller {
{
if (class_exists($controller)) {
$model = str_replace('Controller',null,$controller).'Model';
- $application = $this->controller;
- $this->c[$controller] = new $controller($model,$application,$this->_queryString);
+ $application = strtolower(str_replace('Controller',null,$controller));
+ $this->c[$controller] = new $controller($model,$application,array());
$this->c[$controller]->theme = $this->theme;
}
}
@@ -240,7 +234,7 @@ class Controller {
}
$this->viewArgs[$this->argKeys[$i]] = $this->_queryString[$i];
}
- $this->viewStatus = Url::createUrl($this->viewArgs);
+ $this->viewStatus = Url::createUrl(array_values($this->viewArgs));
$this->updateHelpers();
//update the theme
@@ -288,7 +282,7 @@ class Controller {
//create the viewStatus property
final public function buildStatus()
{
- $this->viewStatus = Url::createUrl($this->viewArgs);
+ $this->viewStatus = Url::createUrl(array_values($this->viewArgs));
//update the theme
$this->theme->viewStatus = $this->viewStatus;
$this->theme->viewArgs = $this->viewArgs;
@@ -301,9 +295,9 @@ class Controller {
if (!in_array($type,$typeArray)) {
throw new Exception("the type '$type' is not allowed in ".__METHOD__);
}
- $this->scaffold = new Scaffold($type,$this->application,$this->controller,$this->m[$this->modelName],$this->viewArgs,$params);
+ $this->scaffold = new Scaffold($type,$this->controller,$this->m[$this->modelName],$this->viewArgs,$params);
- $this->helper('Menu',$this->applicationUrl.$this->controller,$this->scaffold->params['panelController']);
+ $this->helper('Menu',$this->controller,$this->scaffold->params['panelController']);
$this->scaffold->mainMenu = $this->h['Menu'];
$this->m[$this->modelName]->popupBuild();
@@ -311,8 +305,7 @@ class Controller {
if ($type === 'main') {
- $here = $this->applicationUrl.$this->controller.'/'.$this->scaffold->params['mainAction'];
-
+ $here = $this->controller.'/'.$this->scaffold->params['mainAction'];
$this->helper('Pages',$here,$this->scaffold->params['pageVariable']);
$this->helper('List',$this->m[$this->modelName]->identifierName,$here,$this->scaffold->params['pageVariable']);
diff --git a/h-source/Library/Db/Mysql.php b/h-source/Library/Db/Mysql.php
index e0dcfe0..4561a1b 100755
--- a/h-source/Library/Db/Mysql.php
+++ b/h-source/Library/Db/Mysql.php
@@ -2,7 +2,7 @@
// EasyGiant is a PHP framework for creating and managing dynamic content
//
-// Copyright (C) 2009 - 2014 Antonio Gallo (info@laboratoriolibero.com)
+// Copyright (C) 2009 - 2011 Antonio Gallo
// See COPYRIGHT.txt and LICENSE.txt.
//
// This file is part of EasyGiant
@@ -24,34 +24,16 @@ if (!defined('EG')) die('Direct access not allowed!');
//class to manage the database
//singleton!
-class Db_Mysql
-{
-
- private $autocommit = true;
- private $transactionBatchSize = 100;
-
- public $transactionBatch = array();
+class Db_Mysql {
public $query = null; //the last query executed
- public $queries = array(); //array containing all the queries executed
-
public $charsetError = true; //true: non eccor occurred during the modification of the connection charset, false: one error occurred
public $charset = null; //the charset of the client connection
private static $instance = null; //instance of this class
private $dblink;
-
- private $charTypes = array('varchar','char');
- private $textTypes = array('tinytext','text','mediumtext','longtext');
- private $integerTypes = array('tinyint','smallint','int','mediumint','bigint');
- private $floatTypes = array('real','float','double');
- private $dateTypes = array('date');
- private $enumTypes = array('enum');
- private $decimalTypes = array('decimal');
- private $uniqueIndexStrings = array('UNI');
-
- private $fieldsType = array();
+ private $fieldsType = array('tinyint','smallint','int','mediumint','bigint','float','double');
/**
*connect to the database
@@ -69,8 +51,7 @@ class Db_Mysql
private function __construct($host,$user,$pwd,$db_name)
{
- $this->fieldsType = array_merge($this->integerTypes, $this->floatTypes);
-
+
$this->dblink = mysql_connect($host,$user,$pwd);
if ($this->dblink === FALSE) {
@@ -97,46 +78,7 @@ class Db_Mysql
return self::$instance;
}
- public function getUniqueIndexStrings()
- {
- return $this->uniqueIndexStrings;
- }
-
- public function getTextTypes()
- {
- return $this->textTypes;
- }
-
- public function getDecimalTypes()
- {
- return $this->decimalTypes;
- }
-
- public function getEnumTypes()
- {
- return $this->enumTypes;
- }
-
- public function getCharTypes()
- {
- return $this->charTypes;
- }
-
- public function getIntegerTypes()
- {
- return $this->integerTypes;
- }
-
- public function getFloatTypes()
- {
- return $this->floatTypes;
- }
-
- public function getDateTypes()
- {
- return $this->dateTypes;
- }
-
+
//close the connection
public function disconnect()
{
@@ -221,29 +163,16 @@ class Db_Mysql
public function get_num_rows($table,$where=null,$group_by=null,$on=array(),$using=array(),$join=array()) {
- $select = isset($group_by) ? "*" : 'count(*) as number';
-
- $query = $this->createSelectQuery($table,$select,$where,$group_by,null,null,$on,$using,$join);
+ $query = $this->createSelectQuery($table,'*',$where,$group_by,null,null,$on,$using,$join);
$this->query=$query;
- $this->queries[] = $query;
$ris = mysql_query($query);
if ($ris) {
-
- if (isset($group_by))
- {
- $num_rows = mysql_num_rows($ris);
- }
- else
- {
- $row = mysql_fetch_array($ris);
- $num_rows = $row['number'];
- }
-
- return (int)$num_rows;
+ $num_rows = mysql_num_rows($ris);
+ return $num_rows;
} else {
- return 0;
+ return false;
}
}
@@ -253,8 +182,6 @@ class Db_Mysql
$query = $this->createSelectQuery($table,"$func($field) AS m",$where,$group_by,null,null,$on,$using,$join);
$this->query = $query;
- $this->queries[] = $query;
-
$result = mysql_query($query);
if ($result)
{
@@ -296,8 +223,6 @@ class Db_Mysql
$query = $this->createSelectQuery($table,$fields,$where,$group_by,$order_by,$limit,$on,$using,$join);
$this->query = $query;
- $this->queries[] = $query;
-
$result = mysql_query($query);
return $this->getData($result);
}
@@ -334,73 +259,31 @@ class Db_Mysql
}
else
{
- return array();
+ return false;
}
}
-
- private function getFieldsFeature($feature, $table, $fields, $full = false, $associative = false)
+ //return an array containing all the types of the fields (indicated in $fields) of a table (indicated in $table)
+ public function getTypes($table, $fields)
{
$query = "DESCRIBE $table;";
$result = mysql_query($query);
$temp = array();
while ($row = mysql_fetch_assoc($result)) {
- if ($full)
- {
- $temp[$row['Field']] = $row[$feature];
- }
- else
- {
- $e = explode('(',$row[$feature]);
- $temp[$row['Field']] = strcmp($feature,"Type") === 0 ? strtolower(reset($e)) : reset($e);
- }
+ $temp[$row['Field']] = reset(explode('(',$row['Type']));
}
- $this->queries[] = $query;
-
- //return all fields types
- if ($fields === "*")
- {
- $fields = implode(",",array_keys($temp));
- }
-
$types = array();
$fields = explode(',',$fields);
for ($i = 0; $i < count($fields); $i++)
{
if (!array_key_exists($fields[$i],$temp)) return false;
-
- if ($associative)
- {
- $types[$fields[$i]] = $temp[$fields[$i]];
- }
- else
- {
- $types[] = $temp[$fields[$i]];
- }
+ $types[] = $temp[$fields[$i]];
}
return $types;
}
- //return an array containing all the keys of the fields (indicated in $fields) of a table (indicated in $table)
- public function getKeys($table, $fields, $full = false, $associative = false)
- {
- return $this->getFieldsFeature('Key', $table, $fields, $full, $associative);
- }
-
- //return an array containing all the default values of the fields (indicated in $fields) of a table (indicated in $table)
- public function getDefaultValues($table, $fields, $full = false, $associative = false)
- {
- return $this->getFieldsFeature('Default', $table, $fields, $full, $associative);
- }
-
- //return an array containing all the types of the fields (indicated in $fields) of a table (indicated in $table)
- public function getTypes($table, $fields, $full = false, $associative = false)
- {
- return $this->getFieldsFeature('Type', $table, $fields, $full, $associative);
- }
-
public function insert($table,$fields,$values) {
#$table is a string
@@ -428,8 +311,6 @@ class Db_Mysql
$values = implode(',',$values);
$query="INSERT INTO $table ($fields) VALUES ($values);";
$this->query = $query;
- $this->queries[] = $query;
-
$ris = mysql_query($query);
#check the result
@@ -438,34 +319,12 @@ class Db_Mysql
} else {
return false;
}
-
+
} else {
return false;
}
}
- //set the autocommit attribute
- public function setAutocommit($value)
- {
- }
-
- //set the transactionBatchSize attribute
- public function setTransactionBatchSize($size)
- {
- }
-
- //commit a batch of queries
- //$batch: array of queries
- public function commitBatch($batch)
- {
- }
-
- //commit the transaction
- public function commitTransaction()
- {
- return false;
- }
-
// Retrieves the ID generated for an AUTO_INCREMENT column by the previous query (usually INSERT).
public function lastId()
{
@@ -507,8 +366,6 @@ class Db_Mysql
$str=implode(',',$str);
$query="UPDATE $table SET $str $where;";
$this->query=$query;
- $this->queries[] = $query;
-
$ris = mysql_query($query);
#check the result
@@ -517,7 +374,6 @@ class Db_Mysql
} else {
return false;
}
-
} else {
return false;
}
@@ -533,8 +389,6 @@ class Db_Mysql
// }
$query="DELETE FROM $table $where;";
$this->query=$query;
- $this->queries[] = $query;
-
$ris = mysql_query($query);
#check the result
@@ -568,8 +422,6 @@ class Db_Mysql
public function query($query)
{
$this->query = $query;
- $this->queries[] = $query;
-
$result = mysql_query($query);
if ($result === false)
{
diff --git a/h-source/Library/Db/Mysqli.php b/h-source/Library/Db/Mysqli.php
index bd3ce1c..df57a54 100644
--- a/h-source/Library/Db/Mysqli.php
+++ b/h-source/Library/Db/Mysqli.php
@@ -2,7 +2,7 @@
// EasyGiant is a PHP framework for creating and managing dynamic content
//
-// Copyright (C) 2009 - 2014 Antonio Gallo (info@laboratoriolibero.com)
+// Copyright (C) 2009 - 2011 Antonio Gallo
// See COPYRIGHT.txt and LICENSE.txt.
//
// This file is part of EasyGiant
@@ -27,31 +27,14 @@ if (!defined('EG')) die('Direct access not allowed!');
class Db_Mysqli
{
- private $autocommit = true;
- private $transactionBatchSize = 100;
-
- public $transactionBatch = array();
-
public $query = null; //the last query executed
- public $queries = array(); //array containing all the queries executed
-
public $charsetError = true; //true: non eccor occurred during the modification of the connection charset, false: one error occurred
public $charset = null; //the charset of the client connection
private static $instance = null; //instance of this class
private $db;
-
- private $charTypes = array('varchar','char');
- private $textTypes = array('tinytext','text','mediumtext','longtext');
- private $integerTypes = array('tinyint','smallint','int','mediumint','bigint');
- private $floatTypes = array('real','float','double');
- private $dateTypes = array('date');
- private $enumTypes = array('enum');
- private $decimalTypes = array('decimal');
- private $uniqueIndexStrings = array('UNI');
-
- private $fieldsType = array();
+ private $fieldsType = array('tinyint','smallint','int','mediumint','bigint','float','double');
//PHP-Mysql charset translation table
private $charsetTranslationTable = array(
@@ -70,8 +53,7 @@ class Db_Mysqli
private function __construct($host,$user,$pwd,$db_name)
{
- $this->fieldsType = array_merge($this->integerTypes, $this->floatTypes);
-
+
$this->db = new mysqli($host,$user,$pwd,$db_name);
if (mysqli_connect_error())
@@ -103,46 +85,7 @@ class Db_Mysqli
return self::$instance;
}
- public function getUniqueIndexStrings()
- {
- return $this->uniqueIndexStrings;
- }
-
- public function getTextTypes()
- {
- return $this->textTypes;
- }
-
- public function getDecimalTypes()
- {
- return $this->decimalTypes;
- }
-
- public function getEnumTypes()
- {
- return $this->enumTypes;
- }
-
- public function getCharTypes()
- {
- return $this->charTypes;
- }
-
- public function getIntegerTypes()
- {
- return $this->integerTypes;
- }
-
- public function getFloatTypes()
- {
- return $this->floatTypes;
- }
-
- public function getDateTypes()
- {
- return $this->dateTypes;
- }
-
+
//close the connection
public function disconnect()
{
@@ -227,30 +170,16 @@ class Db_Mysqli
public function get_num_rows($table,$where=null,$group_by=null,$on=array(),$using=array(),$join=array()) {
- $select = isset($group_by) ? "*" : 'count(*) as number';
-
- $query = $this->createSelectQuery($table,$select,$where,$group_by,null,null,$on,$using,$join);
+ $query = $this->createSelectQuery($table,'*',$where,$group_by,null,null,$on,$using,$join);
$this->query = $query;
- $this->queries[] = $query;
-
$ris = $this->db->query($query);
if ($ris) {
-
- if (isset($group_by))
- {
- $num_rows = $ris->num_rows;
- }
- else
- {
- $row = $ris->fetch_array();
- $num_rows = $row['number'];
- }
-
+ $num_rows = $ris->num_rows;
$ris->close();
- return (int)$num_rows;
+ return $num_rows;
} else {
- return 0;
+ return false;
}
}
@@ -259,8 +188,6 @@ class Db_Mysqli
$query = $this->createSelectQuery($table,"$func($field) AS m",$where,$group_by,null,null,$on,$using,$join);
$this->query = $query;
- $this->queries[] = $query;
-
$result = $this->db->query($query);
if ($result)
{
@@ -303,8 +230,6 @@ class Db_Mysqli
$query = $this->createSelectQuery($table,$fields,$where,$group_by,$order_by,$limit,$on,$using,$join);
$this->query = $query;
- $this->queries[] = $query;
-
$result = $this->db->query($query);
return $this->getData($result);
}
@@ -337,85 +262,44 @@ class Db_Mysqli
$result->close();
return $data;
} else {
- return array();
+ return false;
}
}
- private function getFieldsFeature($feature, $table, $fields, $full = false, $associative = false )
+ //return an array containing all the types of the fields (indicated in $fields) of a table (indicated in $table)
+ public function getTypes($table, $fields)
{
$query = "DESCRIBE $table;";
$result = $this->db->query($query);
$temp = array();
while ($row = $result->fetch_assoc()) {
- if ($full)
- {
- $temp[$row['Field']] = $row[$feature];
- }
- else
- {
- $e = explode('(',$row[$feature]);
- $temp[$row['Field']] = strcmp($feature,"Type") === 0 ? strtolower(reset($e)) : reset($e);
- }
+ $temp[$row['Field']] = reset(explode('(',$row['Type']));
}
$result->close();
- $this->queries[] = $query;
-
- //return all fields types
- if ($fields === "*")
- {
- $fields = implode(",",array_keys($temp));
- }
-
$types = array();
$fields = explode(',',$fields);
for ($i = 0; $i < count($fields); $i++)
{
if (!array_key_exists($fields[$i],$temp)) return false;
-
- if ($associative)
- {
- $types[$fields[$i]] = $temp[$fields[$i]];
- }
- else
- {
- $types[] = $temp[$fields[$i]];
- }
+ $types[] = $temp[$fields[$i]];
}
return $types;
}
- //return an array containing all the keys of the fields (indicated in $fields) of a table (indicated in $table)
- public function getKeys($table, $fields, $full = false, $associative = false)
- {
- return $this->getFieldsFeature('Key', $table, $fields, $full, $associative);
- }
-
- //return an array containing all the default values of the fields (indicated in $fields) of a table (indicated in $table)
- public function getDefaultValues($table, $fields, $full = false, $associative = false)
- {
- return $this->getFieldsFeature('Default', $table, $fields, $full, $associative);
- }
-
- //return an array containing all the types of the fields (indicated in $fields) of a table (indicated in $table)
- public function getTypes($table, $fields, $full = false, $associative = false)
- {
- return $this->getFieldsFeature('Type', $table, $fields, $full, $associative);
- }
-
public function insert($table,$fields,$values) {
+
#$table is a string
#$fields has to be a string with comma as separator: name1,name2,...
#$values has to be an array
-
$values = array_values($values);
if (strcmp($fields,'') !== 0)
{
//get the type of the fields
$types = $this->getTypes($table,$fields);
if (!$types) return false;
-
+
for($i = 0; $i < count($values); $i++)
{
if (!in_array($types[$i],$this->fieldsType))
@@ -431,103 +315,21 @@ class Db_Mysqli
$values = implode(',',$values);
$query="INSERT INTO $table ($fields) VALUES ($values);";
$this->query=$query;
- $this->queries[] = $query;
- if ($this->autocommit)
- {
- $ris = $this->db->query($query);
+ $ris = $this->db->query($query);
- #check the result
- if ($ris) {
- return true;
- } else {
- return false;
- }
- }
- else
- {
- $this->transactionBatch[] = $query;
+ #check the result
+ if ($ris) {
return true;
+ } else {
+ return false;
}
+
} else {
return false;
}
}
- //set the autocommit attribute
- public function setAutocommit($value)
- {
- if ($value === true or $value === false)
- {
- $this->autocommit = $value;
- $this->db->autocommit($value);
- }
- else
- {
- $this->autocommit = true;
- $this->db->autocommit(true);
- }
- }
-
- //set the transactionBatchSize attribute
- public function setTransactionBatchSize($size)
- {
- $this->transactionBatchSize = abs($size);
- }
-
- //commit a batch of queries
- //$batch: array of queries
- public function commitBatch($batch)
- {
- foreach ($batch as $sql)
- {
- $this->db->query($sql);
- }
-
- if (!$this->autocommit and $this->db->commit())
- {
- return true;
- }
- else
- {
- return false;
- }
- }
-
- //commit the transaction
- public function commitTransaction()
- {
- $returnArray = array();
-
- if (!$this->autocommit)
- {
- if (count($this->transactionBatch) > 0)
- {
- if ($this->transactionBatchSize === 0)
- {
- $returnArray[] = $this->commitBatch($this->transactionBatch);
- }
- else
- {
- $batchArray = array_chunk($this->transactionBatch, $this->transactionBatchSize);
-
- foreach ($batchArray as $batch)
- {
- $returnArray[] = $this->commitBatch($batch);
- }
- }
- }
- }
-
- if (count(array_filter($returnArray)) === count($returnArray))
- {
- $this->transactionBatch = array();
- return true;
- }
-
- return false;
- }
-
// Retrieves the ID generated for an AUTO_INCREMENT column by the previous query (usually INSERT).
public function lastId()
{
@@ -569,23 +371,13 @@ class Db_Mysqli
$str=implode(',',$str);
$query="UPDATE $table SET $str $where;";
$this->query=$query;
- $this->queries[] = $query;
-
- if ($this->autocommit)
- {
- $ris = $this->db->query($query);
+ $ris = $this->db->query($query);
- #check the result
- if ($ris) {
- return true;
- } else {
- return false;
- }
- }
- else
- {
- $this->transactionBatch[] = $query;
+ #check the result
+ if ($ris) {
return true;
+ } else {
+ return false;
}
} else {
return false;
@@ -602,8 +394,6 @@ class Db_Mysqli
// }
$query="DELETE FROM $table $where;";
$this->query=$query;
- $this->queries[] = $query;
-
$ris = $this->db->query($query);
#check the result
@@ -638,8 +428,6 @@ class Db_Mysqli
public function query($query)
{
$this->query = $query;
- $this->queries[] = $query;
-
$result = $this->db->query($query);
if ($result === true)
{
diff --git a/h-source/Library/Email.php b/h-source/Library/Email.php
index 369af20..9d2ff19 100644
--- a/h-source/Library/Email.php
+++ b/h-source/Library/Email.php
@@ -2,7 +2,7 @@
// EasyGiant is a PHP framework for creating and managing dynamic content
//
-// Copyright (C) 2009 - 2014 Antonio Gallo (info@laboratoriolibero.com)
+// Copyright (C) 2009 - 2011 Antonio Gallo
// See COPYRIGHT.txt and LICENSE.txt.
//
// This file is part of EasyGiant
diff --git a/h-source/Library/ErrorReporting.php b/h-source/Library/ErrorReporting.php
index ab66091..2cb8aed 100644
--- a/h-source/Library/ErrorReporting.php
+++ b/h-source/Library/ErrorReporting.php
@@ -2,7 +2,7 @@
// EasyGiant is a PHP framework for creating and managing dynamic content
//
-// Copyright (C) 2009 - 2014 Antonio Gallo (info@laboratoriolibero.com)
+// Copyright (C) 2009 - 2011 Antonio Gallo
// See COPYRIGHT.txt and LICENSE.txt.
//
// This file is part of EasyGiant
diff --git a/h-source/Library/Factory/Db.php b/h-source/Library/Factory/Db.php
index 17afa1a..32a82c1 100755
--- a/h-source/Library/Factory/Db.php
+++ b/h-source/Library/Factory/Db.php
@@ -2,7 +2,7 @@
// EasyGiant is a PHP framework for creating and managing dynamic content
//
-// Copyright (C) 2009 - 2014 Antonio Gallo (info@laboratoriolibero.com)
+// Copyright (C) 2009 - 2011 Antonio Gallo
// See COPYRIGHT.txt and LICENSE.txt.
//
// This file is part of EasyGiant
diff --git a/h-source/Library/Factory/Strings.php b/h-source/Library/Factory/Strings.php
index 8917590..3e766bd 100644
--- a/h-source/Library/Factory/Strings.php
+++ b/h-source/Library/Factory/Strings.php
@@ -2,7 +2,7 @@
// EasyGiant is a PHP framework for creating and managing dynamic content
//
-// Copyright (C) 2009 - 2014 Antonio Gallo (info@laboratoriolibero.com)
+// Copyright (C) 2009 - 2011 Antonio Gallo
// See COPYRIGHT.txt and LICENSE.txt.
//
// This file is part of EasyGiant
diff --git a/h-source/Library/Files/Log.php b/h-source/Library/Files/Log.php
index a060ba3..7eda7b7 100644
--- a/h-source/Library/Files/Log.php
+++ b/h-source/Library/Files/Log.php
@@ -2,7 +2,7 @@
// EasyGiant is a PHP framework for creating and managing dynamic content
//
-// Copyright (C) 2009 - 2014 Antonio Gallo (info@laboratoriolibero.com)
+// Copyright (C) 2009 - 2011 Antonio Gallo
// See COPYRIGHT.txt and LICENSE.txt.
//
// This file is part of EasyGiant
diff --git a/h-source/Library/Files/Upload.php b/h-source/Library/Files/Upload.php
index 19b5fd1..7dbc7d1 100755
--- a/h-source/Library/Files/Upload.php
+++ b/h-source/Library/Files/Upload.php
@@ -2,7 +2,7 @@
// EasyGiant is a PHP framework for creating and managing dynamic content
//
-// Copyright (C) 2009 - 2014 Antonio Gallo (info@laboratoriolibero.com)
+// Copyright (C) 2009 - 2011 Antonio Gallo
// See COPYRIGHT.txt and LICENSE.txt.
//
// This file is part of EasyGiant
@@ -230,8 +230,7 @@ class Files_Upload
{
if (strstr($file,'.'))
{
- $extArray = explode('.', $file);
- return strtolower(end($extArray));
+ return strtolower(end(explode('.', $file)));
}
return '';
}
@@ -269,23 +268,6 @@ class Files_Upload
}
- //get a not existing folder name
- public function getUniqueFolderName($folder,$int = 0)
- {
- $token = $int === 0 ? null : $this->params['fileUploadBeforeTokenChar'].$int;
-
- $newName = $folder.$token;
- if (!is_dir($this->base.$this->directory.$newName))
- {
- return $newName;
- }
- else
- {
- return $this->getUniqueFolderName($folder,$int+1);
- }
-
- }
-
protected function parentDir() { #individuo la cartella madre
$folders = explode(self::DS,$this->directory);
@@ -351,7 +333,7 @@ class Files_Upload
}
//check if the $name folder is empty or not
- public function isEmpty($name)
+ protected function isEmpty($name)
{
$items = scandir($name);
foreach( $items as $this_file ) {
diff --git a/h-source/Library/Form/Checkbox.php b/h-source/Library/Form/Checkbox.php
index 91191a9..497c097 100755
--- a/h-source/Library/Form/Checkbox.php
+++ b/h-source/Library/Form/Checkbox.php
@@ -2,7 +2,7 @@
// EasyGiant is a PHP framework for creating and managing dynamic content
//
-// Copyright (C) 2009 - 2014 Antonio Gallo (info@laboratoriolibero.com)
+// Copyright (C) 2009 - 2011 Antonio Gallo
// See COPYRIGHT.txt and LICENSE.txt.
//
// This file is part of EasyGiant
@@ -39,7 +39,7 @@ class Form_Checkbox extends Form_Entry
$returnString .= $wrap[1];
$returnString .= $this->getLabelTag();
$returnString .= $wrap[2];
- $returnString .= Html_Form::checkbox($this->entryName, $value, $this->options, $this->className,$this->idName,$this->attributes);
+ $returnString .= Html_Form::checkbox($this->entryName, $value, $this->options, $this->className,$this->idName);
$returnString .= $wrap[3];
$returnString .="</div>\n";
$returnString .= $wrap[4];
diff --git a/h-source/Library/Form/Entry.php b/h-source/Library/Form/Entry.php
index fa3b84f..6f45557 100755
--- a/h-source/Library/Form/Entry.php
+++ b/h-source/Library/Form/Entry.php
@@ -2,7 +2,7 @@
// EasyGiant is a PHP framework for creating and managing dynamic content
//
-// Copyright (C) 2009 - 2014 Antonio Gallo (info@laboratoriolibero.com)
+// Copyright (C) 2009 - 2011 Antonio Gallo
// See COPYRIGHT.txt and LICENSE.txt.
//
// This file is part of EasyGiant
@@ -33,7 +33,6 @@ abstract class Form_Entry {
public $labelClass = null; //the class of the tag of the label
public $options = array(); //options (if the entry is a <select> entry or a radio button). Associative array or comma-divided list.
public $reverse = null; //reverse label with value in select entries
- public $attributes = null; //attributes of the field
public $defaultValue = '';
public $wrap = array();
public $deleteButton = null;
diff --git a/h-source/Library/Form/File.php b/h-source/Library/Form/File.php
index f1e7d2d..ac9b8ab 100644
--- a/h-source/Library/Form/File.php
+++ b/h-source/Library/Form/File.php
@@ -2,7 +2,7 @@
// EasyGiant is a PHP framework for creating and managing dynamic content
//
-// Copyright (C) 2009 - 2014 Antonio Gallo (info@laboratoriolibero.com)
+// Copyright (C) 2009 - 2011 Antonio Gallo
// See COPYRIGHT.txt and LICENSE.txt.
//
// This file is part of EasyGiant
@@ -39,7 +39,7 @@ class Form_File extends Form_Entry
$returnString .= $wrap[1];
$returnString .= $this->getLabelTag();
$returnString .= $wrap[2];
- $returnString .= Html_Form::fileUpload($this->entryName, $value, $this->className, $this->idName, $this->attributes);
+ $returnString .= Html_Form::fileUpload($this->entryName, $value, $this->className, $this->idName);
if (is_array($this->deleteButton))
{
$sname = isset($this->deleteButton[0]) ? $this->deleteButton[0] : 'delete_'.$this->entryName;
diff --git a/h-source/Library/Form/Form.php b/h-source/Library/Form/Form.php
index 9b05c51..a1a9fda 100755
--- a/h-source/Library/Form/Form.php
+++ b/h-source/Library/Form/Form.php
@@ -2,7 +2,7 @@
// EasyGiant is a PHP framework for creating and managing dynamic content
//
-// Copyright (C) 2009 - 2014 Antonio Gallo (info@laboratoriolibero.com)
+// Copyright (C) 2009 - 2011 Antonio Gallo
// See COPYRIGHT.txt and LICENSE.txt.
//
// This file is part of EasyGiant
@@ -25,15 +25,6 @@ if (!defined('EG')) die('Direct access not allowed!');
//create the HTML of the whole form
class Form_Form {
- //default attributes of the entries
- public static $defaultEntryAttributes = array(
- "entryClass" => null,
- "className" => null,
- "idName" => null,
- "submitClass" => "btn btn-primary",
- "formWrap" => null,
- );
-
public $entry = array(); //associative array containing the entries of the form (objects that inherit the class form_entryModel). Each element of the array corresponds to one field of the table
public $action = null; //the action of the form
@@ -62,9 +53,8 @@ class Form_Form {
{
throw new Exception("class <b>$entryObjName</b> not defined: the entry <b>$entryName</b> can't be set");
}
-
$this->entry[$entryName] = new $entryObjName($entryName);
- $this->entry[$entryName]->labelString = getFieldLabel($entryName);
+ $this->entry[$entryName]->labelString = $entryName.':';
//set the type
$this->entry[$entryName]->type = $entryType;
if (isset($options))
@@ -82,18 +72,17 @@ class Form_Form {
$type = array_key_exists('type',$entry) ? $entry['type'] : 'InputText';
$options = array_key_exists('options',$entry) ? $entry['options'] : null;
$this->setEntry($name,$type,$options);
-
- $entryClass = array_key_exists('entryClass',$entry) ? $entry['entryClass'] : self::$defaultEntryAttributes['entryClass'];
- $labelString = array_key_exists('labelString',$entry) ? $entry['labelString'] : getFieldLabel($name);
- $idName = array_key_exists('idName',$entry) ? $entry['idName'] : self::$defaultEntryAttributes['idName'];
- $className = array_key_exists('className',$entry) ? $entry['className'] : self::$defaultEntryAttributes['className'];
+
+ $entryClass = array_key_exists('entryClass',$entry) ? $entry['entryClass'] : null;
+ $labelString = array_key_exists('labelString',$entry) ? $entry['labelString'] : "$name:";
+ $idName = array_key_exists('idName',$entry) ? $entry['idName'] : null;
+ $className = array_key_exists('className',$entry) ? $entry['className'] : null;
$labelClass = array_key_exists('labelClass',$entry) ? $entry['labelClass'] : null;
$defaultValue = array_key_exists('defaultValue',$entry) ? $entry['defaultValue'] : null;
$wrap = array_key_exists('wrap',$entry) ? $entry['wrap'] : array();
$deleteButton = array_key_exists('deleteButton',$entry) ? $entry['deleteButton'] : null;
$reverse = array_key_exists('reverse',$entry) ? $entry['reverse'] : null;
- $attributes = array_key_exists('attributes',$entry) ? $entry['attributes'] : null;
-
+
$this->entry[$name]->entryClass = $entryClass;
$this->entry[$name]->labelString = $labelString;
$this->entry[$name]->idName = $idName;
@@ -103,13 +92,12 @@ class Form_Form {
$this->entry[$name]->wrap = $wrap;
$this->entry[$name]->deleteButton = $deleteButton;
$this->entry[$name]->reverse = $reverse;
- $this->entry[$name]->attributes = $attributes;
}
}
//function to create the HTML of the form
//$values: an associative array ('entryName'=>'value')
- //$subset: subset to print (comma seprated list of string or array)
+ //$subset: subset to print
public function render($values = null, $subset = null)
{
@@ -125,99 +113,27 @@ class Form_Form {
$fid = isset($this->id) ? "id='".$this->id."'" : null;
$fname = isset($this->name) ? "name='".$this->name."'" : null;
$fclass = isset($this->className) ? "class='".$this->className."'" : null;
- $fenctype = isset($this->enctype) ? " enctype='".$this->enctype."' " : null;
+ $fenctype = isset($this->enctype) ? " enctype=".$this->enctype." " : null;
$htmlForm = "<form $fname $fclass $fid action='".Url::getRoot($this->action)."' method='".$this->method."' $fenctype>\n";
- if (!isset($subset))
- {
- $subset = array_keys($values);
- }
- else
- {
- $subset = !is_array($subset) ? explode(',',$subset) : $subset;
- }
-// $subset = (isset($subset)) ? explode(',',$subset) : array_keys($values);
-
- //first cicle: write the HTML of tabs if there are any
- $tabsHtml = null;
- $fCount = 0;
- foreach ($subset as $key => $entry)
- {
- if (is_array($entry))
- {
- $currClass = $fCount === 0 ? "current_tab" : null;
- $cleanKey = encode($key);
- $tabsHtml .= "\t<li class='form_tab_li $currClass'><a rel='tab_$cleanKey' class='form_tab_a form_tab_a_$cleanKey' href='#'>$key</a></li>\n";
- $fCount++;
- }
- }
- if (isset($tabsHtml))
- {
- $htmlForm .= "<ul class='form_tab_ul'>\n$tabsHtml\n</ul>\n";
- }
+ $subset = (isset($subset)) ? explode(',',$subset) : array_keys($values);
- $fCount = 0;
- foreach ($subset as $k => $entry)
+ foreach ($subset as $entry)
{
-
- $cleanK = encode($k);
- if (!is_array($entry))
- {
- if (array_key_exists($entry,$this->entry))
- {
- $value = array_key_exists($entry,$values) ? $values[$entry] : $this->entry[$entry]->defaultValue;
- $htmlForm .= $this->entry[$entry]->render($value);
- }
- }
- else
+
+ if (array_key_exists($entry,$this->entry))
{
- $tHtml = null;
- $displClass = $fCount === 0 ? null : "display_none";
- foreach ($entry as $e)
- {
- if (array_key_exists($e,$this->entry))
- {
- $value = array_key_exists($e,$values) ? $values[$e] : $this->entry[$e]->defaultValue;
- $tHtml .= $this->entry[$e]->render($value);
- }
- }
- $htmlForm .= "<div id='tab_$cleanK' class='tab_description_item $displClass'>$tHtml</div>";
- $fCount++;
+ $value = array_key_exists($entry,$values) ? $values[$entry] : $this->entry[$entry]->defaultValue;
+ $htmlForm .= $this->entry[$entry]->render($value);
}
+
}
- $htmlForm .= "<div class='submit_entry'>";
foreach ($this->submit as $name => $value)
{
- if (!is_array($value))
- {
- $submitClass= "";
- if (!is_array(self::$defaultEntryAttributes['submitClass']))
- {
- $submitClass = self::$defaultEntryAttributes['submitClass'];
- }
- else
- {
- if (array_key_exists($value,self::$defaultEntryAttributes['submitClass']))
- {
- $submitClass = self::$defaultEntryAttributes['submitClass'][$value];
- }
- }
- $htmlForm .= "<span class='submit_entry_$value'>".Html_Form::submit($name, $value, $submitClass, $name)."</span>";
- }
- else
- {
- array_unshift($value,$name);
- $htmlForm .= call_user_func_array(array("Html_Form","submit"),$value);
- }
+ $htmlForm .= "<div class='inputEntry'>\n<input id='".$name."' type='submit' name='$name' value='$value'>\n</div>\n";
}
- $htmlForm .= "</div>";
$htmlForm .= "</form>\n";
-
- if (isset(self::$defaultEntryAttributes["formWrap"]) and is_array(self::$defaultEntryAttributes["formWrap"]) and count(self::$defaultEntryAttributes["formWrap"]) === 2)
- {
- return self::$defaultEntryAttributes["formWrap"][0] . $htmlForm . self::$defaultEntryAttributes["formWrap"][1];
- }
return $htmlForm;
}
diff --git a/h-source/Library/Form/Hidden.php b/h-source/Library/Form/Hidden.php
index c2185b9..c589662 100755
--- a/h-source/Library/Form/Hidden.php
+++ b/h-source/Library/Form/Hidden.php
@@ -2,7 +2,7 @@
// EasyGiant is a PHP framework for creating and managing dynamic content
//
-// Copyright (C) 2009 - 2014 Antonio Gallo (info@laboratoriolibero.com)
+// Copyright (C) 2009 - 2011 Antonio Gallo
// See COPYRIGHT.txt and LICENSE.txt.
//
// This file is part of EasyGiant
@@ -33,7 +33,7 @@ class Form_Hidden extends Form_Entry
public function render($value = null)
{
- $returnString = Html_Form::hidden($this->entryName, $value, $this->className, $this->idName, $this->attributes);
+ $returnString = Html_Form::hidden($this->entryName, $value);
return $returnString;
}
diff --git a/h-source/Library/Form/Html.php b/h-source/Library/Form/Html.php
index a7181cc..e5c9989 100644
--- a/h-source/Library/Form/Html.php
+++ b/h-source/Library/Form/Html.php
@@ -2,7 +2,7 @@
// EasyGiant is a PHP framework for creating and managing dynamic content
//
-// Copyright (C) 2009 - 2014 Antonio Gallo (info@laboratoriolibero.com)
+// Copyright (C) 2009 - 2011 Antonio Gallo
// See COPYRIGHT.txt and LICENSE.txt.
//
// This file is part of EasyGiant
diff --git a/h-source/Library/Form/InputText.php b/h-source/Library/Form/InputText.php
index 086c0a1..344264e 100755
--- a/h-source/Library/Form/InputText.php
+++ b/h-source/Library/Form/InputText.php
@@ -2,7 +2,7 @@
// EasyGiant is a PHP framework for creating and managing dynamic content
//
-// Copyright (C) 2009 - 2014 Antonio Gallo (info@laboratoriolibero.com)
+// Copyright (C) 2009 - 2011 Antonio Gallo
// See COPYRIGHT.txt and LICENSE.txt.
//
// This file is part of EasyGiant
@@ -39,7 +39,7 @@ class Form_InputText extends Form_Entry
$returnString .= $wrap[1];
$returnString .= $this->getLabelTag();
$returnString .= $wrap[2];
- $returnString .= Html_Form::input($this->entryName, $value, $this->className, $this->idName, $this->attributes);
+ $returnString .= Html_Form::input($this->entryName, $value, $this->className, $this->idName);
$returnString .= $wrap[3];
$returnString .="</div>\n";
$returnString .= $wrap[4];
diff --git a/h-source/Library/Form/Password.php b/h-source/Library/Form/Password.php
index 41fbc8e..9bfc68b 100644
--- a/h-source/Library/Form/Password.php
+++ b/h-source/Library/Form/Password.php
@@ -2,7 +2,7 @@
// EasyGiant is a PHP framework for creating and managing dynamic content
//
-// Copyright (C) 2009 - 2014 Antonio Gallo (info@laboratoriolibero.com)
+// Copyright (C) 2009 - 2011 Antonio Gallo
// See COPYRIGHT.txt and LICENSE.txt.
//
// This file is part of EasyGiant
@@ -39,7 +39,7 @@ class Form_Password extends Form_Entry
$returnString .= $wrap[1];
$returnString .= $this->getLabelTag();
$returnString .= $wrap[2];
- $returnString .= Html_Form::password($this->entryName, null, $this->className, $this->idName, $this->attributes);
+ $returnString .= Html_Form::password($this->entryName, null, $this->className);
$returnString .= $wrap[3];
$returnString .="</div>\n";
$returnString .= $wrap[4];
diff --git a/h-source/Library/Form/Radio.php b/h-source/Library/Form/Radio.php
index 10154be..4f596ed 100755
--- a/h-source/Library/Form/Radio.php
+++ b/h-source/Library/Form/Radio.php
@@ -2,7 +2,7 @@
// EasyGiant is a PHP framework for creating and managing dynamic content
//
-// Copyright (C) 2009 - 2014 Antonio Gallo (info@laboratoriolibero.com)
+// Copyright (C) 2009 - 2011 Antonio Gallo
// See COPYRIGHT.txt and LICENSE.txt.
//
// This file is part of EasyGiant
@@ -39,7 +39,7 @@ class Form_Radio extends Form_Entry
$returnString .= $wrap[1];
$returnString .= $this->getLabelTag();
$returnString .= $wrap[2];
- $returnString .= Html_Form::radio($this->entryName,$value,$this->options,$this->className, 'after', $this->idName, $this->attributes);
+ $returnString .= Html_Form::radio($this->entryName,$value,$this->options,$this->className, 'after', $this->idName);
$returnString .= $wrap[3];
$returnString .="</div>\n";
$returnString .= $wrap[4];
diff --git a/h-source/Library/Form/Select.php b/h-source/Library/Form/Select.php
index 8b2a634..53d7632 100755
--- a/h-source/Library/Form/Select.php
+++ b/h-source/Library/Form/Select.php
@@ -2,7 +2,7 @@
// EasyGiant is a PHP framework for creating and managing dynamic content
//
-// Copyright (C) 2009 - 2014 Antonio Gallo (info@laboratoriolibero.com)
+// Copyright (C) 2009 - 2011 Antonio Gallo
// See COPYRIGHT.txt and LICENSE.txt.
//
// This file is part of EasyGiant
@@ -39,7 +39,7 @@ class Form_Select extends Form_Entry
$returnString .= $wrap[1];
$returnString .= $this->getLabelTag();
$returnString .= $wrap[2];
- $returnString .= Html_Form::select($this->entryName,$value,$this->options,$this->className, $this->idName, $this->reverse, $this->attributes);
+ $returnString .= Html_Form::select($this->entryName,$value,$this->options,$this->className, $this->idName, $this->reverse);
$returnString .= $wrap[3];
$returnString .="</div>\n";
$returnString .= $wrap[4];
diff --git a/h-source/Library/Form/Textarea.php b/h-source/Library/Form/Textarea.php
index f294b0a..aaaf19e 100755
--- a/h-source/Library/Form/Textarea.php
+++ b/h-source/Library/Form/Textarea.php
@@ -2,7 +2,7 @@
// EasyGiant is a PHP framework for creating and managing dynamic content
//
-// Copyright (C) 2009 - 2014 Antonio Gallo (info@laboratoriolibero.com)
+// Copyright (C) 2009 - 2011 Antonio Gallo
// See COPYRIGHT.txt and LICENSE.txt.
//
// This file is part of EasyGiant
@@ -39,7 +39,7 @@ class Form_Textarea extends Form_Entry
$returnString .= $wrap[1];
$returnString .= $this->getLabelTag();
$returnString .= $wrap[2];
- $returnString .= Html_Form::textarea($this->entryName, $value, $this->className, $this->idName, $this->attributes);
+ $returnString .= Html_Form::textarea($this->entryName, $value, $this->className, $this->idName);
$returnString .= $wrap[3];
$returnString .="</div>\n";
$returnString .= $wrap[4];
diff --git a/h-source/Library/Functions.php b/h-source/Library/Functions.php
index ef86812..1477680 100755
--- a/h-source/Library/Functions.php
+++ b/h-source/Library/Functions.php
@@ -2,7 +2,7 @@
// EasyGiant is a PHP framework for creating and managing dynamic content
//
-// Copyright (C) 2009 - 2014 Antonio Gallo (info@laboratoriolibero.com)
+// Copyright (C) 2009 - 2011 Antonio Gallo
// See COPYRIGHT.txt and LICENSE.txt.
//
// This file is part of EasyGiant
@@ -108,24 +108,12 @@ SANITIZE DEEP
function stripslashesDeep($value) {
if(get_magic_quotes_gpc()) {#if stripslashes
- return array_map_recursive('stripslashes', $value);
+ return array_map('stripslashes', $value);
}
return $value;
}
-//from http://www.php.net/array_map#112857
-function array_map_recursive($callback, $array) {
- foreach ($array as $key => $value) {
- if (is_array($array[$key])) {
- $array[$key] = array_map_recursive($callback, $array[$key]);
- }
- else {
- $array[$key] = call_user_func($callback, $array[$key]);
- }
- }
- return $array;
-}
-
+
function sanitizeHtmlDeep($value) {
return array_map('sanitizeHtml', $value);
}
@@ -175,9 +163,7 @@ function sha1Deep($value)
return array_map('sha1', $value);
}
-function strip_tagsDeep($value) {
- return array_map('strip_tags', $value);
-}
+
@@ -242,75 +228,6 @@ function wrap($string,$tag_class) {#wrap the string with the tag and its class
return $str_front.$string.$str_rear;
}
-//check that $date is a ISO date (YYYY-MM-DD)
-function checkIsoDate($date)
-{
- if (preg_match('/^[0-9]{4}\-[0-9]{2}\-[0-9]{2}$/',$date))
- {
- $dateArray = explode('-',$date);
- if ((int)$dateArray[1] <= 12 and (int)$dateArray[1] >= 1 )
- {
- if ((int)$dateArray[2] >= 1 and (int)$dateArray[2] <= 31)
- {
- return checkdate((int)$dateArray[1],(int)$dateArray[2],(int)$dateArray[0]);
- }
- }
- }
- return false;
-}
-
-//check if $string is an integer string
-function checkInteger($string)
-{
- if (preg_match('/^\-?[0-9]{1,}$/',$string))
- {
- return true;
- }
- return false;
-}
-
-//check if $string is decimal with the format indicated in $format
-//$format: M,D M is the maximum number of digits, D is the number of digits to the right of the decimal point
-function checkDecimal($string, $format)
-{
- $t = explode(",",$format);
- $M = (int)$t[0];
- $D = (int)$t[1];
- $I = $M - $D;
-
- if (preg_match("/^[0-9]{1,$I}(\.[0-9]{1,$D})?$/",$string))
- {
- return true;
- }
- return false;
-}
-
-//get label name from field name
-function getFieldLabel($fieldName)
-{
- if (class_exists("Lang_".Params::$language."_Formats_Fields"))
- {
- return call_user_func(array("Lang_".Params::$language."_Formats_Fields", "getLabel"), $fieldName);
- }
-
- return call_user_func(array("Lang_En_Formats_Fields", "getLabel"), $fieldName);
-
-// if (strstr($fieldName,","))
-// {
-// $temp = explode(",",$fieldName);
-// for ($i=0; $i< count($temp); $i++)
-// {
-// $temp[$i] = getFieldLabel($temp[$i]);
-// }
-// return implode (" and ",$temp);
-// }
-// else
-// {
-// $fieldName = str_replace("_"," ", $fieldName);
-// return ucfirst($fieldName);
-// }
-}
-
//generate a random password
//$start: start number of mt_rand
//$end: end number of mt_rand
@@ -349,7 +266,7 @@ function getIp()
$ip = sanitizeIp($_SERVER["HTTP_X_FORWARDED_FOR"]);
} else if (!empty($_SERVER["HTTP_CLIENT_IP"])) {
$ip = sanitizeIp($_SERVER["HTTP_CLIENT_IP"]);
- } else if (!empty($_SERVER["REMOTE_ADDR"])) {
+ } else {
$ip = sanitizeIp($_SERVER["REMOTE_ADDR"]);
}
} else {
@@ -357,7 +274,7 @@ function getIp()
$ip = sanitizeIp(getenv( 'HTTP_X_FORWARDED_FOR' ));
} else if ( getenv( 'HTTP_CLIENT_IP' ) !== false ) {
$ip = sanitizeIp(getenv( 'HTTP_CLIENT_IP' ));
- } else if ( getenv( 'REMOTE_ADDR' ) !== false ) {
+ } else {
$ip = sanitizeIp(getenv( 'REMOTE_ADDR' ));
}
}
@@ -377,76 +294,6 @@ function getUserAgent() {
}
}
-//encode a string to drop ugly characters
-function encode($url)
-{
- $url = utf8_decode(html_entity_decode($url,ENT_QUOTES,'UTF-8'));
-
- $temp = null;
-
- for ($i=0;$i<eg_strlen($url); $i++)
- {
-// echo substr($url,$i,1)."<br />";
- if (strcmp(substr($url,$i,1),' ') === 0)
- {
- $temp .= '_';
- }
- else if (strcmp(substr($url,$i,1),"'") === 0)
- {
- $temp .= '';
- }
- else
- {
- if (preg_match('/^[a-zA-Z\_0-9]$/',substr($url,$i,1)))
- {
- $temp .= substr($url,$i,1);
- }
- else
- {
- $temp .= '_';
- }
- }
- }
-
- $temp = urlencode($temp);
- return $temp;
-}
-
-function callFunction($function, $string, $caller = "CallFunction")
-{
- if (strstr($function,'::')) //static method
- {
- $temp = explode('::',$function);
-
- if (!method_exists($temp[0],$temp[1]))
- {
- throw new Exception('Error in <b>'.$caller.'</b>: method <b>'.$temp[1].'</b> of class <b>'.$temp[0].'</b> does not exists.');
- }
-
- return call_user_func(array($temp[0], $temp[1]),$string);
- }
- else if (strstr($function,'.')) //method
- {
- $temp = explode('.',$function);
-
- $obj = new $temp[0]; //new instance of the object
-
- if (!method_exists($obj,$temp[1]))
- {
- throw new Exception('Error in <b>'.$caller.'</b>: method <b>'.$temp[1].'</b> of class <b>'.$temp[0].'</b> does not exists.');
- }
-
- return call_user_func(array($obj, $temp[1]),$string);
- }
- else //function
- {
- if (!function_exists($function)) {
- throw new Exception('Error in <b>'.$caller.'</b>: function <b>'.$function.'</b> does not exists.');
- }
- //apply the function
- return call_user_func($function,$string);
- }
-}
function xml_encode($string)
{
@@ -457,23 +304,4 @@ function xml_encode($string)
}
return strtr($string, $trans);
-}
-
-//Convert Hex Color to RGB
-//http://bavotasan.com/2011/convert-hex-color-to-rgb-using-php/
-function hex2rgb($hex) {
- $hex = str_replace("#", "", $hex);
-
- if(strlen($hex) == 3) {
- $r = hexdec(substr($hex,0,1).substr($hex,0,1));
- $g = hexdec(substr($hex,1,1).substr($hex,1,1));
- $b = hexdec(substr($hex,2,1).substr($hex,2,1));
- } else {
- $r = hexdec(substr($hex,0,2));
- $g = hexdec(substr($hex,2,2));
- $b = hexdec(substr($hex,4,2));
- }
- $rgb = array($r, $g, $b);
- //return implode(",", $rgb); // returns the rgb values separated by commas
- return $rgb; // returns an array with the rgb values
-}
+} \ No newline at end of file
diff --git a/h-source/Library/HeaderObj.php b/h-source/Library/HeaderObj.php
index 2d52e1d..994eb16 100644
--- a/h-source/Library/HeaderObj.php
+++ b/h-source/Library/HeaderObj.php
@@ -2,7 +2,7 @@
// EasyGiant is a PHP framework for creating and managing dynamic content
//
-// Copyright (C) 2009 - 2014 Antonio Gallo (info@laboratoriolibero.com)
+// Copyright (C) 2009 - 2011 Antonio Gallo
// See COPYRIGHT.txt and LICENSE.txt.
//
// This file is part of EasyGiant
diff --git a/h-source/Library/Helper/Array.php b/h-source/Library/Helper/Array.php
index dbdda4f..329463f 100755
--- a/h-source/Library/Helper/Array.php
+++ b/h-source/Library/Helper/Array.php
@@ -2,7 +2,7 @@
// EasyGiant is a PHP framework for creating and managing dynamic content
//
-// Copyright (C) 2009 - 2014 Antonio Gallo (info@laboratoriolibero.com)
+// Copyright (C) 2009 - 2011 Antonio Gallo
// See COPYRIGHT.txt and LICENSE.txt.
//
// This file is part of EasyGiant
diff --git a/h-source/Library/Helper/Html.php b/h-source/Library/Helper/Html.php
index 9e25bb4..81a9bdd 100755
--- a/h-source/Library/Helper/Html.php
+++ b/h-source/Library/Helper/Html.php
@@ -2,7 +2,7 @@
// EasyGiant is a PHP framework for creating and managing dynamic content
//
-// Copyright (C) 2009 - 2014 Antonio Gallo (info@laboratoriolibero.com)
+// Copyright (C) 2009 - 2011 Antonio Gallo
// See COPYRIGHT.txt and LICENSE.txt.
//
// This file is part of EasyGiant
diff --git a/h-source/Library/Helper/List.php b/h-source/Library/Helper/List.php
index 81b5345..ba59643 100755
--- a/h-source/Library/Helper/List.php
+++ b/h-source/Library/Helper/List.php
@@ -2,7 +2,7 @@
// EasyGiant is a PHP framework for creating and managing dynamic content
//
-// Copyright (C) 2009 - 2014 Antonio Gallo (info@laboratoriolibero.com)
+// Copyright (C) 2009 - 2011 Antonio Gallo
// See COPYRIGHT.txt and LICENSE.txt.
//
// This file is part of EasyGiant
@@ -25,9 +25,6 @@ if (!defined('EG')) die('Direct access not allowed!');
//class to create the HTML of a list of records
class Helper_List extends Helper_Html {
- //table attributes
- static public $tableAttributes = array('class'=>'listTable','cellspacing'=>'0');
-
private $__rowArray = array(); //the current associative array representing the database record
protected $_itemsList = array(); //2-dimensional associative array containing the list items
@@ -37,7 +34,7 @@ class Helper_List extends Helper_Html {
protected $_recordNumber = null; //number of records from the table
- protected $_allowedItems = array('simpleLink','simpleText','delForm','editForm','associateForm','moveupForm','movedownForm','Form','ledit','link','text','checkbox','input'); //type of items allowed
+ protected $_allowedItems = array('simpleLink','simpleText','delForm','editForm','associateForm','moveupForm','movedownForm','Form','ledit','link','text'); //type of items allowed
//it can be: both, top, bottom, none
protected $_boundaries = 'none';
@@ -45,12 +42,6 @@ class Helper_List extends Helper_Html {
//array of filters
protected $_filters = array();
- //array of bulk actions
- protected $_bulkActions = array();
-
- //set to false if you don't want that the filters are created inside the table
- public $showFilters = true;
-
//set if the submit buttons have to be images or not (it can be yse or not)
public $submitImageType = 'yes';
@@ -63,6 +54,9 @@ class Helper_List extends Helper_Html {
//properties of columns
public $colProperties = array();
+ //table attributes
+ public $tableAttributes = array('class'=>'listTable','cellspacing'=>'0');
+
//$position: array. First element: page number, second element: number of pages
public $position = array();
@@ -74,15 +68,12 @@ class Helper_List extends Helper_Html {
public $pageArg = null; //the key of the viewArgs array representing the page number. $this->viewArgs[$this->pageArg] is set to 1 if $this->pageArg !== null
- //if the filter forms have to be aggregated in a unique form or if they have to be left separated
- public $aggregateFilters = false;
-
public function __construct() {
//get the generic language class
$this->strings = Factory_Strings::generic(Params::$language);
- $baseUrl = Url::getRoot().'Public/Img/Icons/elementary_2_5/';
+ $baseUrl = 'http://'.DOMAIN_NAME.'/Public/Img/Icons/elementary_2_5/';
//set the files of the images
$this->submitImages = array(
@@ -156,39 +147,17 @@ class Helper_List extends Helper_Html {
//set the filters
//$filters: array whose elements are the viewArgs to be used for the filters forms
- //or null
public function setFilters($filters)
{
$this->_filters = $filters;
}
-
- //set $this->aggregateFilters equal to true
- public function aggregateFilters()
- {
- $this->aggregateFilters = true;
- }
-
- //set the bulk actions
- //$bulkActions: associative array.
- //key: class of the inputs whose elements have to be selected and serialized by javascript in the following way: data-primary-key:value_attribute|data-primary-key:value_attribute|data-primary-key:value_attribute|...
- //value: array with two elements whose first element is the bulk action to be sent as a key of $_POST, second element is the human readable name of the action, third element can be the string "confirm" (if the user has to confirm the action) or undefined
- //example:
- // $bulkActions = array(
- // "input_category_id_order" => array("sortAction","Sort elements"),
- // "checkbox_category_id" => array("deleteAction","Delete elements","confirm"),
- // );
- public function setBulkActions($bulkActions)
- {
- $this->_bulkActions = $bulkActions;
- }
//check that the ViewArgs array is complete
public function checkViewArgs()
{
foreach ($this->_filters as $field)
{
- $key = !is_array($field) ? $field : $field[0];
- if (!array_key_exists($key,$this->viewArgs) and strcmp($key,null) !== 0) return false;
+ if (!array_key_exists($field,$this->viewArgs) and strcmp($field,null) !== 0) return false;
}
return true;
}
@@ -203,48 +172,47 @@ class Helper_List extends Helper_Html {
public function replaceFields($string,$rowArray) {
$this->__rowArray = $rowArray; //used by the replaceField method
- $string = preg_replace_callback('/(\;)(.*?)(\;)/', array($this, 'replaceField') ,$string);
+ $string = preg_replace_callback('/(\;)(.*?)(\;)/', 'Helper_List::replaceField' ,$string);
return $string;
}
- //get : or . as char used to separate table and field
- public function getChar($string)
- {
- return strstr($string,':') ? ':' : '.';
- }
-
//replace a single string wrapped by ; with its correspondent value taken by the $recordArray associative array (a row of the select query)
public function replaceField($match)
{
$string = $match[2];
- //check if a function has been indicated
- if (strstr($string,'|'))
- {
- //get the function
- $firstArray = explode('|',$string);
- if (strstr($firstArray[1],':') or strstr($firstArray[1],'.'))
+ if (strstr($string,':') or strstr($string,'.')) {
+ if (strstr($string,':'))
+ {
+ $char = ':';
+ }
+ else
{
+ $char = '.';
+ }
+ //check if a function has been indicated
+ if (strstr($string,'|'))
+ {
+ //get the function
+ $firstArray = explode('|',$string);
$func = $firstArray[0];
//replace the fields
- $char = $this->getChar($firstArray[1]);
$temp = explode($char,$firstArray[1]);
$string = $this->__rowArray[$temp[0]][$temp[1]];
- $string = callFunction($func,$string,__METHOD__);
+ if (!function_exists($func)) {
+ throw new Exception('Error in <b>'.__METHOD__.'</b>: function <b>'.$func.'</b> does not exists..');
+ }
+ //apply the function
+ $string = call_user_func($func,$string);
}
- }
- else
- {
- if (strstr($string,':') or strstr($string,'.'))
+ else
{
- $char = $this->getChar($string);
$temp = explode($char,$string);
$string = $this->__rowArray[$temp[0]][$temp[1]];
}
}
-
return $string;
}
@@ -259,8 +227,8 @@ class Helper_List extends Helper_Html {
}
//wrap the column with the tag td
- public function wrapColumn($string, $className = null, $tag = "td") {
- return wrap($string,array($tag=>$className));
+ public function wrapColumn($string, $className = null) {
+ return wrap($string,array('td'=>$className));
}
//wrap the row with the tag tr
@@ -269,7 +237,7 @@ class Helper_List extends Helper_Html {
}
public function wrapList($string) {
- return wrap($string,array('table'=>self::$tableAttributes));
+ return wrap($string,array('table'=>$this->tableAttributes));
}
//method to create the HTML of the head of the table
@@ -280,18 +248,13 @@ class Helper_List extends Helper_Html {
foreach ($this->_head as $item) {
$temp = $item['action'];
- if (preg_match('/\[\[bulkselect:(.*?)\]\]/',$temp,$matches))
- {
- $temp = Html_Form::checkbox("bulkselect_".$matches[1],"","BS","bulk_select_checkbox",null,"data-class='".$matches[1]."'");
- }
-
$prop = $item['type'];
if (isset($this->colProperties[$count]))
{
$prop = $this->colProperties[$count];
}
- $htmlHead .= $this->wrapColumn($temp, $prop, "th");
+ $htmlHead .= $this->wrapColumn($temp,$prop);
$count++;
}
@@ -299,27 +262,7 @@ class Helper_List extends Helper_Html {
return $htmlHead;
}
- //return an array with all the filters in a 1-dimensional array
- public function getFiltersList()
- {
- $filterList = array();
-
- foreach ($this->_filters as $f)
- {
- if (is_array($f))
- {
- $filterList[] = $f[0];
- }
- else
- {
- $filterList[] = $f;
- }
- }
-
- return $filterList;
- }
-
- //method to create the HTML of the filters input
+ //method to create the HTML of the head of the table
public function createFilters() {
$htmlFilters = null;
@@ -339,91 +282,18 @@ class Helper_List extends Helper_Html {
$html = '&nbsp';
if (isset($this->_filters[$count]))
{
- if (!is_array($this->_filters[$count]))
- {
- $html = $this->filterForm($this->_filters[$count]);
- }
- else
- {
- $html = call_user_func_array(array($this,"filterForm"),$this->_filters[$count]);
-// $html = $this->filterForm($this->_filters[$count][0],$this->_filters[$count][1]);
- }
- }
-
- //wrap single cell if filters doesn't have to be aggregate
- if (!$this->aggregateFilters)
- {
- $htmlFilters .= !$this->showFilters ? $html : $this->wrapColumn($html,$prop);
+ $html = $this->filterForm($this->_filters[$count]);
}
- else
- {
- $htmlFilters .= $html;
- }
-
+ $htmlFilters .= $this->wrapColumn($html,$prop);
+
$count++;
}
-
- //wrap an aggregate cell if filters have to be aggregate
- if ($this->aggregateFilters)
- {
- $colspan = count($this->_itemsList);
- $formTop = "<form class='list_filter_form' action='".Url::getRoot($this->url)."' method='GET'>\n";
- $imgSrc = Url::getRoot('Public/Img/Icons/elementary_2_5/find.png');
-
- $formBottom = "";
- $emptyFilterStatusArray = array();
- $filtersList = $this->getFiltersList();
- foreach ($this->viewArgs as $k => $v)
- {
- if (!in_array($k,$filtersList))
- {
- $emptyFilterStatusArray[] = "$k=$v";
- $formBottom .= "<input type='hidden' name='".$k."' value='$v' />";
- }
- }
- $emptyFilterStatus = implode("&",$emptyFilterStatusArray);
-
- $formBottom .= "<a class='list_filter_clear_link' title='".$this->strings->gtext('clear the filter')."' href='".Url::getRoot($this->url)."?".$emptyFilterStatus."'><img src='".Url::getRoot()."/Public/Img/Icons/elementary_2_5/clear_filter.png' /></a>";
-
- $formBottom .= "<input class='list_filter_submit' type='image' title='".$this->strings->gtext('filter')."' src='".$imgSrc."' value='trova'>\n";
-
- $formBottom .= "</form>";
-
- $htmlFilters = !$this->showFilters ? $formTop.$htmlFilters.$formBottom : $this->wrapColumn($formTop.$htmlFilters.$formBottom,array("class"=>"aggregate_filters_td","colspan"=>$colspan));
-
- }
}
}
return $htmlFilters;
}
- //create the HTML of the select of the bulk actions
- public function createBulkActionsSelect()
- {
- $htmlBulkSelect = null;
- $colspan = count($this->_itemsList);
-
- if (count($this->_bulkActions) > 0)
- {
- $htmlBulkSelect .= "<span class='bulk_actions_select_label'>".$this->strings->gtext('Actions')."</span>: <select data-url='".Url::getRoot(null).$this->url.$this->viewStatus."' class='bulk_actions_select' name='bulk_select'>";
-
- $htmlBulkSelect .= "<option data-class='0' value='0'>".$this->strings->gtext('-- Select bulk action --')."</option>";
-
- foreach ($this->_bulkActions as $class => $action)
- {
- $class = str_replace("+","",$class);
- $confirm = isset($action[2]) ? "data-confirm='Y'" : "data-confirm='N'";
- $htmlBulkSelect .= "<option $confirm data-class='$class' value='".$action[0]."'>".$action[1]."</option>";
- }
-
- $htmlBulkSelect .= "</select>";
- $htmlBulkSelect = $this->wrapColumn($htmlBulkSelect,array("class"=>"bulk_actions_td","colspan"=>$colspan));
- }
-
- return $htmlBulkSelect;
- }
-
//create the HTML of a single row (values taken from the associative array $rowArray)
public function getRowList($rowArray) {
$htmlList = null;
@@ -482,32 +352,16 @@ class Helper_List extends Helper_Html {
$this->_recordNumber = count($queryResult);
$htmlList = null;
//create the HTML of the head of the record list
- $htmlList .= "<thead>\n".$this->wrapRow($this->createHead(),'listHead')."</thead>\n";
+ $htmlList .= $this->wrapRow($this->createHead(),'listHead');
//create the HTML of the filters
- $htmlList .= "<tbody>\n";
-
- $bulkActionsHtml = $this->createBulkActionsSelect();
- if (isset($bulkActionsHtml))
- {
- $htmlList .= $this->wrapRow($bulkActionsHtml,'bulk_actions_tr');
- }
-
- if ($this->showFilters)
- {
- $filtersHtml = $this->createFilters();
- if (isset($filtersHtml))
- {
- $htmlList .= $this->wrapRow($filtersHtml,'listFilters');
- }
- }
-
+ $htmlList .= $this->wrapRow($this->createFilters(),'listFilters');
for ($i = 0; $i < count($queryResult); $i++)
{
$this->ifInBoundaries($i);
$temp = $this->getRowList($queryResult[$i]);
$htmlList .= $this->wrapRow($temp,'listRow');
}
- return $this->wrapList($htmlList."</tbody>\n");
+ return $this->wrapList($htmlList);
}
public function generalForm($itemArray, $submitName, $submitValue)
@@ -604,20 +458,8 @@ class Helper_List extends Helper_Html {
return $string;
}
- //create the HTML of a checkbox
- public function checkbox($itemArray)
- {
- return Html_Form::checkbox($itemArray['action'],$itemArray['field'],$itemArray['name'],"checkbox_".encode($itemArray['action']),null,"data-primary-key='".$itemArray['value']."'");
- }
-
- //create the HTML of an input text
- public function input($itemArray)
- {
- return Html_Form::input($itemArray['action'],$itemArray['field'],"input_".encode($itemArray['action']),null,"data-primary-key='".$itemArray['name']."'");
- }
-
//create the HTML of the filter
- public function filterForm($viewArgsName, $filterString = null, $filterValues = null)
+ public function filterForm($viewArgsName)
{
$cleanName = str_replace('n!',null,$viewArgsName);
$cleanName = str_replace('-',null,$cleanName);
@@ -632,15 +474,8 @@ class Helper_List extends Helper_Html {
if (Params::$nullQueryValue)
{
$this->viewArgs[$viewArgsName] = Params::$nullQueryValue;
- $viewStatus = Url::createUrl($this->viewArgs);
- if (strcmp($value,Params::$nullQueryValue) === 0 and !isset($filterValues))
- {
- $value = '';
- }
- }
- else
- {
- $viewStatus = $this->viewStatus;
+ $viewStatus = Url::createUrl(array_values($this->viewArgs));
+ if (strcmp($value,Params::$nullQueryValue) === 0) $value = '';
}
$this->viewArgs[$viewArgsName] = $temp;
@@ -649,42 +484,11 @@ class Helper_List extends Helper_Html {
$title = $this->strings->gtext('filter');
$clearLinkTitle = $this->strings->gtext('clear the filter');
- $html = null;
-
- if (!$this->aggregateFilters)
- {
- $html .= "<form class='list_filter_form list_filter_form_$cleanName' action='".$action."' method='GET'>\n";
- }
-
- $html .= isset($filterString) ? " <span class='list_filter_span list_filter_span_$cleanName'>".$filterString."</span> " : null;
-
- if (!isset($filterValues))
- {
- $html .= "<input class='list_filter_input list_filter_input_$cleanName' type='text' name='$viewArgsName' value='".$value."'>";
- }
- else
- {
- $filterValues = array_merge(array(Params::$nullQueryValue => $this->strings->gtext('All')),$filterValues);
- $html .= Html_Form::select($viewArgsName,$value,$filterValues,"list_filter_input list_filter_input_$cleanName",null,"yes");
- }
-
- if (!$this->aggregateFilters)
- {
- $html .= "<a class='list_filter_clear_link list_filter_clear_link_$cleanName' title='$clearLinkTitle' href='$action'><img src='".Url::getRoot()."/Public/Img/Icons/elementary_2_5/clear_filter.png' /></a>";
- $html .= "<input class='list_filter_submit list_filter_submit_$cleanName' type='image' title='$title' src='".$imgSrc."' value='trova'>\n";
-
- if (!Params::$rewriteStatusVariables)
- {
- foreach ($this->viewArgs as $k => $v)
- {
- if (strcmp($k,"$viewArgsName") !== 0)
- {
- $html .= "<input type='hidden' name='".$k."' value='$v' />";
- }
- }
- }
- $html .= "</form>\n";
- }
+ $html = "<form class='list_filter_form list_filter_form_$cleanName' action='".$action."' method='GET'>\n";
+ $html .= "<input class='list_filter_input list_filter_input_$cleanName' type='text' name='$viewArgsName' value='".$value."'>";
+ $html .= "<a class='list_filter_clear_link list_filter_clear_link_$cleanName' title='$clearLinkTitle' href='$action'><img src='".Url::getRoot()."/Public/Img/Icons/elementary_2_5/clear_filter.png' /></a>";
+ $html .= "<input class='list_filter_submit list_filter_submit_$cleanName' type='image' title='$title' src='".$imgSrc."' value='trova'>\n";
+ $html .= "</form>\n";
return $html;
}
diff --git a/h-source/Library/Helper/Menu.php b/h-source/Library/Helper/Menu.php
index 4b33261..8fd4bf4 100755
--- a/h-source/Library/Helper/Menu.php
+++ b/h-source/Library/Helper/Menu.php
@@ -2,7 +2,7 @@
// EasyGiant is a PHP framework for creating and managing dynamic content
//
-// Copyright (C) 2009 - 2014 Antonio Gallo (info@laboratoriolibero.com)
+// Copyright (C) 2009 - 2011 Antonio Gallo
// See COPYRIGHT.txt and LICENSE.txt.
//
// This file is part of EasyGiant
@@ -25,8 +25,7 @@ if (!defined('EG')) die('Direct access not allowed!');
//class to write the top menù of the view files
class Helper_Menu extends Helper_Html
{
- public static $htmlLinks = array();
-
+
public $panelController; //panel controller
public $controller;
@@ -50,7 +49,6 @@ class Helper_Menu extends Helper_Html
'text' => $this->strings->gtext('Back'),
'url' => 'main',
'icon' => $baseUrl."left.png",
- 'queryString' => null,
),
'add' => array(
@@ -59,7 +57,6 @@ class Helper_Menu extends Helper_Html
'text' => $this->strings->gtext('Add'),
'url' => 'form/insert',
'icon' => $baseUrl."add.png",
- 'queryString' => null,
),
'panel' => array(
@@ -68,25 +65,9 @@ class Helper_Menu extends Helper_Html
'text' => $this->strings->gtext('Panel'),
'url' => 'main',
'icon' => $baseUrl."panel.png",
- 'queryString' => null,
)
);
-
- foreach (self::$htmlLinks as $k => $v)
- {
- if (!array_key_exists($k, $this->links))
- {
- $this->links[$k] = $v;
- }
- else
- {
- foreach ($v as $subK => $subV)
- {
- $this->links[$k][$subK] = $subV;
- }
- }
- }
}
public function build($controller = null, $panelController = null)
@@ -108,11 +89,8 @@ class Helper_Menu extends Helper_Html
//check that the text and the ure are defined
if (isset($this->links[$linkName]['text']) and isset($this->links[$linkName]['url']))
{
- $title = isset($this->links[$linkName]['title']) ? "title=\"".$this->links[$linkName]['title']."\"" : null;
-
+ $title = isset($this->links[$linkName]['title']) ? "title='".$this->links[$linkName]['title']."'" : null;
$class = isset($this->links[$linkName]['class']) ? "class='".$this->links[$linkName]['class']."'" : null;
- $class = isset(self::$htmlLinks[$linkName]["class"]) ? "class='".self::$htmlLinks[$linkName]["class"]."'" : $class;
-
$icon = isset($this->links[$linkName]['icon']) ? "<img class='top_menu_icon' src='".$this->links[$linkName]['icon']."'> " : null;
//choose the controller (current or panel)
@@ -120,18 +98,8 @@ class Helper_Menu extends Helper_Html
$viewStatus = (strcmp($linkName,'panel') === 0) ? null : $this->viewStatus;
$href = Url::getRoot($controller.$this->links[$linkName]['url'].$viewStatus);
-
- if (isset($this->links[$linkName]['queryString']))
- {
- $href .= $this->links[$linkName]['queryString'];
- }
-
$text = $this->links[$linkName]['text'];
- $htmlBefore = isset($this->links[$linkName]["htmlBefore"]) ? $this->links[$linkName]["htmlBefore"] : "<div $class>$icon ";
- $htmlAfter = isset($this->links[$linkName]["htmlAfter"]) ? $this->links[$linkName]["htmlAfter"] : "</div>";
- $attributes = isset($this->links[$linkName]["attributes"]) ? $this->links[$linkName]["attributes"] : null;
-
- $menu .= "$htmlBefore<a $title $attributes href='$href'>$text</a>$htmlAfter\n";
+ $menu .= "<div $class>$icon <a $title href='$href'>$text</a></div>\n";
}
}
}
diff --git a/h-source/Library/Helper/Pages.php b/h-source/Library/Helper/Pages.php
index 3826469..d8ac856 100755
--- a/h-source/Library/Helper/Pages.php
+++ b/h-source/Library/Helper/Pages.php
@@ -2,7 +2,7 @@
// EasyGiant is a PHP framework for creating and managing dynamic content
//
-// Copyright (C) 2009 - 2014 Antonio Gallo (info@laboratoriolibero.com)
+// Copyright (C) 2009 - 2011 Antonio Gallo
// See COPYRIGHT.txt and LICENSE.txt.
//
// This file is part of EasyGiant
@@ -109,16 +109,9 @@ class Helper_Pages extends Helper_Html
public function html($pageNumber,$string = null) {
if (isset($string)) {
$strNumber = $string;
- if (strcmp($pageNumber,"1") === 0)
- {
- $strClass = "class='itemListPage previous_page'";
- }
- else
- {
- $strClass = "class='itemListPage next_page'";
- }
+ $strClass = "class='itemListPage'";
} else {
- if (strcmp($pageNumber,$this->_currentPage) === 0)
+ if ($pageNumber === $this->_currentPage)
{
$strNumber = $pageNumber;
$strClass = "class='currentPage'";
@@ -130,7 +123,7 @@ class Helper_Pages extends Helper_Html
}
}
$this->viewArgs[$this->_variableArg] = $pageNumber;
- $viewStatus = Url::createUrl($this->viewArgs);
+ $viewStatus = Url::createUrl(array_values($this->viewArgs));
$href= Url::getRoot(null) . $this->_urlViewAction .$viewStatus;
return $this->getATag($href,$strNumber,$strClass);
}
diff --git a/h-source/Library/Helper/Popup.php b/h-source/Library/Helper/Popup.php
index f3e6058..18bb00d 100755
--- a/h-source/Library/Helper/Popup.php
+++ b/h-source/Library/Helper/Popup.php
@@ -2,7 +2,7 @@
// EasyGiant is a PHP framework for creating and managing dynamic content
//
-// Copyright (C) 2009 - 2014 Antonio Gallo (info@laboratoriolibero.com)
+// Copyright (C) 2009 - 2011 Antonio Gallo
// See COPYRIGHT.txt and LICENSE.txt.
//
// This file is part of EasyGiant
@@ -25,15 +25,6 @@ if (!defined('EG')) die('Direct access not allowed!');
//class to create the popup menu
class Helper_Popup extends Helper_Html {
- //the HTML of the popup
- public static $popupHtml = array(
- "before_loop" => "",
- "top" => "<div class='row col-md-2 ext_menu_block ext_menu_block_[[field]]'><ul class='menuBlock'><li class='innerItem inner_item_[[field]]'>[[name]]<ul class='innerList'>\n",
- "middle" => "</ul>\n</li>\n</ul>\n",
- "bottom" => "</div>",
- "after_loop" => "",
- );
-
public $popupArray = array(); //array of popup objects (see popup.php)
public $url = null; //the url (controller/action) to link by means of the popup menù
// public $fieldArg = null; //the key of the viewArgs array to set to the field in the where clause
@@ -94,17 +85,9 @@ class Helper_Popup extends Helper_Html {
}
}
- public function replacePlaceholders($string, $field, $name)
- {
- $string = str_replace("[[field]]",$field,$string);
- $string = str_replace("[[name]]",$name,$string);
-
- return $string;
- }
-
//create the HTML of the popup
public function render() {
- $returnString = self::$popupHtml["before_loop"];
+ $returnString = null;
if ($this->checkViewArgs())
{
if (isset($this->viewArgs[$this->pageArg]))
@@ -121,12 +104,11 @@ class Helper_Popup extends Helper_Html {
$tempArg = $this->viewArgs[$field];
$this->legend[$field] = $tempArg;
- $returnString .= $this->replacePlaceholders(self::$popupHtml["top"],$field,$popup->name);
-
+ $returnString .= "<ul onMouseOver='DisplayTag(this,\"block\");' onMouseOut='DisplayTag(this,\"none\");' id='menuBlock'><li class='innerItem'>".$popup->name."<ul class='innerList'>\n";
for ($i = 0; $i < count($popup->itemsValue); $i++)
{
$this->viewArgs[$field] = $popup->itemsValue[$i];
- $viewStatus = Url::createUrl($this->viewArgs);
+ $viewStatus = Url::createUrl(array_values($this->viewArgs));
$returnString .= "<li><a href='".Url::getRoot($this->url).$viewStatus."'>".$popup->itemsName[$i]."</a></li>\n";
//set the legend
@@ -136,20 +118,24 @@ class Helper_Popup extends Helper_Html {
}
}
$this->viewArgs[$field] = Params::$nullQueryValue;
- $viewStatus = Url::createUrl($this->viewArgs);
+ $viewStatus = Url::createUrl(array_values($this->viewArgs));
$returnString .= "<li><a href='".Url::getRoot($this->url).$viewStatus."'>".$this->allString."</a></li>\n";
- $returnString .= self::$popupHtml["middle"];
+ $returnString .= "</ul>\n</li>\n</ul>\n";
$this->viewArgs[$field] = $tempArg;
-
- if ($this->printLegend)
+ }
+ if ($this->printLegend)
+ {
+ $returnString .= "<div class='popup_legend'>\n";
+ foreach ($this->popupArray as $field => $popup)
{
- $returnString .= "<div class='popup_legend_item popup_legend_item_$field'>".$this->legend[$field]."</div>";
+ $returnString .= "<div class='popup_legend_item'>".$this->legend[$field]."</div>";
}
-
- $returnString .= self::$popupHtml["bottom"];
+ $returnString .= "</div>\n";
+ }
+ if (count($this->popupArray)>0) {
+ $returnString .= "<script type=\"text/javascript\" src=\"http://".DOMAIN_NAME."/Public/Js/DisplayTag.js\"></script>\n";
}
}
- $returnString .= self::$popupHtml["after_loop"];
return $returnString;
}
diff --git a/h-source/Library/Hooks.php b/h-source/Library/Hooks.php
index de46da8..b16b6d5 100644
--- a/h-source/Library/Hooks.php
+++ b/h-source/Library/Hooks.php
@@ -2,7 +2,7 @@
// EasyGiant is a PHP framework for creating and managing dynamic content
//
-// Copyright (C) 2009 - 2014 Antonio Gallo (info@laboratoriolibero.com)
+// Copyright (C) 2009 - 2011 Antonio Gallo
// See COPYRIGHT.txt and LICENSE.txt.
//
// This file is part of EasyGiant
diff --git a/h-source/Library/Html/Form.php b/h-source/Library/Html/Form.php
index 91b2aa0..ec81cfb 100644
--- a/h-source/Library/Html/Form.php
+++ b/h-source/Library/Html/Form.php
@@ -2,7 +2,7 @@
// EasyGiant is a PHP framework for creating and managing dynamic content
//
-// Copyright (C) 2009 - 2014 Antonio Gallo (info@laboratoriolibero.com)
+// Copyright (C) 2009 - 2011 Antonio Gallo
// See COPYRIGHT.txt and LICENSE.txt.
//
// This file is part of EasyGiant
@@ -70,10 +70,10 @@ class Html_Form {
$a = $optionValue;
}
- if (strcmp($optionValue,'optgroupOpen') === 0)
+ if (strcmp($b,'optgroupOpen') === 0)
{
if ($flag === 1) $returnString .= "</optgroup>\n";
- $returnString .= "<optgroup label='" . $optionName . "'>\n";
+ $returnString .= "<optgroup label='" . $a . "'>\n";
$flag = 1;
}
else
@@ -83,7 +83,7 @@ class Html_Form {
}
}
if ($flag === 1) $returnString .= "</optgroup>\n";
- $returnString .= "</select>";
+ $returnString .= "</select>\n";
return $returnString;
}
@@ -97,7 +97,7 @@ class Html_Form {
$strClass = isset($className) ? "class='".$className."'" : null;
$idStr = isset($idName) ? "id='".$idName."'" : null;
- $returnString ="<input $attributes ".$idStr." $strClass type='text' name='" .$name. "' value = '$value' />";
+ $returnString ="<input $attributes ".$idStr." $strClass type='text' name='" .$name. "' value = '$value' />\n";
return $returnString;
}
@@ -110,7 +110,7 @@ class Html_Form {
$strClass = isset($className) ? "class='".$className."'" : null;
$idStr = isset($idName) ? "id='".$idName."'" : null;
- $returnString ="<input $attributes ".$idStr." $strClass type='file' name='" .$name. "' />";
+ $returnString ="<input $attributes ".$idStr." $strClass type='file' name='" .$name. "' />\n";
return $returnString;
}
@@ -126,7 +126,7 @@ class Html_Form {
$idStr = isset($idName) ? "id='".$idName."'" : null;
$str = (strcmp($value,$option) === 0) ? "checked = 'checked'" : null;
- return "<input $attributes ".$idStr." $strClass type='checkbox' name='".$name."' value='".$option."' $str />";
+ return "<input $attributes ".$idStr." $strClass type='checkbox' name='".$name."' value='".$option."' $str />\n";
}
//return the HTML of a hidden entry
@@ -137,7 +137,7 @@ class Html_Form {
$strClass = isset($className) ? "class='".$className."'" : null;
$idStr = isset($idName) ? "id='".$idName."'" : null;
- return "<input $attributes ".$idStr." $strClass type='hidden' name='" .$name. "' value = '$value'>";
+ return "<input $attributes ".$idStr." $strClass type='hidden' name='" .$name. "' value = '$value'>\n";
}
//return the HTML of a password entry
@@ -149,7 +149,7 @@ class Html_Form {
$strClass = isset($className) ? "class='".$className."'" : null;
$idStr = isset($idName) ? "id='".$idName."'" : null;
- return "<input $attributes ".$idStr." $strClass type='password' name='" .$name. "' value='$value' />";
+ return "<input $attributes ".$idStr." $strClass type='password' name='" .$name. "' value='$value' />\n";
}
//return the HTML of a textarea
@@ -161,7 +161,7 @@ class Html_Form {
$strClass = isset($className) ? "class='".$className."'" : null;
$idStr = isset($idName) ? "id='".$idName."'" : null;
- return "<textarea $attributes ".$idStr." $strClass name='" .$name. "'>$value</textarea>";
+ return "<textarea $attributes ".$idStr." $strClass name='" .$name. "'>$value</textarea>\n";
}
//return the HTML of a radio button
@@ -202,33 +202,7 @@ class Html_Form {
}
$str= (strcmp($value,$optionValue) === 0) ? "checked='checked'" : null;
- $returnString .= "$before<input $attributes ".$idStr." $strClass type='radio' name='".$name."' value='".$optionValue."' $str />$after";
- }
-
- return $returnString;
- }
-
- //return the HTML of an <input type='submit' ...>
- //$name: the name of the input
- //$value: the value of the input
- //$className: the class name of the input
- //$idName: name of the id
- //$image: url of the image (if it is an image button)
- //$attributes: list of attributes
- static public function submit($name, $value, $className = null, $idName = null, $image = null, $attributes = null)
- {
- $strClass = isset($className) ? "class='".$className."'" : null;
- $idStr = isset($idName) ? "id='".$idName."'" : null;
-
- if (isset($image))
- {
- $returnString = "<input $attributes $idStr $strClass type='image' src='".$image."' value='$value'>";
- $returnString .= "<input type='hidden' name='".$name."' value='$value'>";
- }
- else
- {
- $returnString = '<button '.$idStr.' '.$attributes.' '.$strClass.' type="submit" name="' .$name. '">'.$value.'</button>';
- $returnString .= "<input type='hidden' name='".$name."' value='$value'>";
+ $returnString .= "$before<input $attributes ".$idStr." $strClass type='radio' name='".$name."' value='".$optionValue."' $str />$after\n";
}
return $returnString;
diff --git a/h-source/Library/Image/Gd/Captcha.php b/h-source/Library/Image/Gd/Captcha.php
index d4285c2..1e8d706 100644
--- a/h-source/Library/Image/Gd/Captcha.php
+++ b/h-source/Library/Image/Gd/Captcha.php
@@ -2,7 +2,7 @@
// EasyGiant is a PHP framework for creating and managing dynamic content
//
-// Copyright (C) 2009 - 2014 Antonio Gallo (info@laboratoriolibero.com)
+// Copyright (C) 2009 - 2011 Antonio Gallo
// See COPYRIGHT.txt and LICENSE.txt.
//
// This file is part of EasyGiant
diff --git a/h-source/Library/Image/Gd/Thumbnail.php b/h-source/Library/Image/Gd/Thumbnail.php
index bb69891..22e501e 100644
--- a/h-source/Library/Image/Gd/Thumbnail.php
+++ b/h-source/Library/Image/Gd/Thumbnail.php
@@ -2,7 +2,7 @@
// EasyGiant is a PHP framework for creating and managing dynamic content
//
-// Copyright (C) 2009 - 2014 Antonio Gallo (info@laboratoriolibero.com)
+// Copyright (C) 2009 - 2011 Antonio Gallo
// See COPYRIGHT.txt and LICENSE.txt.
//
// This file is part of EasyGiant
@@ -47,10 +47,9 @@ class Image_Gd_Thumbnail
'resample' => 'yes',
'function' => 'none',
'outputFormat' => 'jpeg',
- 'backgroundColor' => null, //must be hex color
);
- //set the $this->params array
+ //set the $this->scaffold->params array
if (is_array($params))
{
foreach ($params as $key => $value)
@@ -61,46 +60,6 @@ class Image_Gd_Thumbnail
$this->params = $defaultParams;
}
- public function getSourceCoordinates($direction, $oldDim, $dim)
- {
- if ($direction === "x")
- {
- switch ($this->params['horizAlign'])
- {
- case 'left':
- $coordSrc = 0;
- break;
- case 'right':
- $coordSrc = floor(($oldDim-$dim));
- break;
- case 'center':
- $coordSrc = floor(($oldDim-$dim)/2);
- break;
- default:
- $coordSrc = $this->params['horizAlign'];
- }
- }
- else
- {
- switch ($this->params['vertAlign'])
- {
- case 'top':
- $coordSrc = 0;
- break;
- case 'bottom':
- $coordSrc = floor(($oldDim-$dim));
- break;
- case 'center':
- $coordSrc = floor(($oldDim-$dim)/2);
- break;
- default:
- $coordSrc = $this->params['vertAlign'];
- }
- }
-
- return $coordSrc;
- }
-
//create the thumbnail
//$imageName: the name of the file inside $this->basePath
//$outputFile: the name of the output file
@@ -116,8 +75,7 @@ class Image_Gd_Thumbnail
if (file_exists($imagePath))
{
- $extArray = explode('.', $imagePath);
- $ext = strtolower(end($extArray));
+ $ext = strtolower(end(explode('.', $imagePath)));
if (strcmp($ext,'jpg') === 0 or strcmp($ext,'jpeg') === 0) {
$img = @imagecreatefromjpeg($imagePath);
@@ -153,172 +111,81 @@ class Image_Gd_Thumbnail
$scale = max($this->params['imgWidth']/$width, $this->params['imgHeight']/$height);
}
- $xSrc = 0; //x coordinate of source image
- $ySrc = 0; //y coordinate of source image
-
- $xDst = 0; //x coordinate of destination image
- $yDst = 0; //y coordinate of destination image
-
- if ($this->params['cropImage'] === 'no')
- {
- if ($scale <= 1)
+ if ($scale < 1) {
+
+ $xSrc = 0;
+ $ySrc = 0;
+
+ if ($this->params['cropImage'] === 'no')
{
- $newWidth = $backWidth = floor($scale*$width);
- $newHeight = $backHeight = floor($scale*$height);
-
- if ($this->params['backgroundColor'])
- {
- $backWidth = $this->params['imgWidth'];
- $backHeight = $this->params['imgHeight'];
-
- if ($backWidth > $newWidth)
- {
- $xDst = floor(($backWidth-$newWidth)/2);
- }
- else if ($backHeight > $newHeight)
- {
- $yDst = floor(($backHeight-$newHeight)/2);
- }
- }
- }
- else
- {
- $newWidth = $backWidth = $width;
- $newHeight = $backHeight = $height;
-
- if ($this->params['backgroundColor'])
- {
- $backWidth = $this->params['imgWidth'];
- $backHeight = $this->params['imgHeight'];
-
- $xDst = floor(($backWidth-$newWidth)/2);
- $yDst = floor(($backHeight-$newHeight)/2);
- }
+ $newWidth = floor($scale*$width);
+ $newHeight = floor($scale*$height);
}
- }
- else if ($this->params['cropImage'] === 'yes')
- {
- if ($scale < 1)
+ else if ($this->params['cropImage'] === 'yes')
{
- $newWidth = $backWidth = $this->params['imgWidth'];
- $newHeight = $backHeight = $this->params['imgHeight'];
+
+ $newWidth = $this->params['imgWidth'];
+ $newHeight = $this->params['imgHeight'];
$oldWidth = $width;
$oldHeight = $height;
$width = floor($newWidth/$scale);
$height = floor($newHeight/$scale);
- $xSrc = $this->getSourceCoordinates("x",$oldWidth,$width);
- $ySrc = $this->getSourceCoordinates("y",$oldHeight,$height);
-
- }
- else
- {
- $oldWidth = $width;
- $oldHeight = $height;
-
- if ($width <= $this->params['imgWidth'] and $height <= $this->params['imgHeight'])
+ switch ($this->params['horizAlign'])
{
- $newWidth = $backWidth = $width;
- $newHeight = $backHeight = $height;
-
- if ($this->params['backgroundColor'])
- {
- $backWidth = $this->params['imgWidth'];
- $backHeight = $this->params['imgHeight'];
-
- $xDst = floor(($backWidth-$newWidth)/2);
- $yDst = floor(($backHeight-$newHeight)/2);
- }
-
- }
- else if ($width <= $this->params['imgWidth'])
- {
- $newWidth = $backWidth = $width;
- $newHeight = $backHeight = $height = $this->params['imgHeight'];
-
- $ySrc = $this->getSourceCoordinates("y",$oldHeight,$height);
-
- if ($this->params['backgroundColor'])
- {
- $backWidth = $this->params['imgWidth'];
- $backHeight = $this->params['imgHeight'];
-
- $xDst = floor(($backWidth-$newWidth)/2);
- }
-
+ case 'left':
+ $xSrc = 0;
+ break;
+ case 'right':
+ $xSrc = floor(($oldWidth-$width));
+ break;
+ case 'center':
+ $xSrc = floor(($oldWidth-$width)/2);
+ break;
+ default:
+ $xSrc = $this->params['horizAlign'];
}
- else if ($height <= $this->params['imgHeight'])
+
+ switch ($this->params['vertAlign'])
{
- $newHeight = $backHeight = $height;
- $newWidth = $backWidth = $width = $this->params['imgWidth'];
-
- $xSrc = $this->getSourceCoordinates("x",$oldWidth,$width);
-
- if ($this->params['backgroundColor'])
- {
- $backWidth = $this->params['imgWidth'];
- $backHeight = $this->params['imgHeight'];
-
- $yDst = floor(($backHeight-$newHeight)/2);
- }
-
+ case 'top':
+ $ySrc = 0;
+ break;
+ case 'bottom':
+ $ySrc = floor(($oldHeight-$height));
+ break;
+ case 'center':
+ $ySrc = floor(($oldHeight-$height)/2);
+ break;
+ default:
+ $ySrc = $this->params['vertAlign'];
}
- }
- }
- //temp image
- $tmpImg = imagecreatetruecolor($backWidth, $backHeight);
-
- //set background color if backgroundColor param is not null (hex value)
- if ($this->params['backgroundColor'])
- {
- if (strcmp($this->params['backgroundColor'],"transparent") !== 0)
- {
- $rgbColor = hex2rgb($this->params['backgroundColor']);
-
- $backgroundC = imagecolorallocate($tmpImg,$rgbColor[0],$rgbColor[1],$rgbColor[2]);
- }
- else
- {
- $backgroundC = imagecolortransparent($tmpImg);
}
-
- imagefill($tmpImg, 0, 0, $backgroundC);
- }
-
- if(strcmp($type,'png') === 0 or strcmp($type,'gif') === 0){
-
- if ($this->params['backgroundColor'])
+
+ //temp image
+ $tmpImg = imagecreatetruecolor($newWidth, $newHeight);
+
+ if ($this->params['resample'] === 'yes')
{
- imagealphablending($tmpImg, true);
+ //copy and resample
+ imagecopyresampled($tmpImg, $img, 0, 0, $xSrc, $ySrc,$newWidth, $newHeight, $width, $height);
}
else
{
- imagealphablending($tmpImg, false);
+ //copy and resize
+ imagecopyresized($tmpImg, $img, 0, 0, $xSrc, $ySrc,$newWidth, $newHeight, $width, $height);
}
-
- imagesavealpha($tmpImg, true);
- }
+ imagedestroy($img);
+ $img = $tmpImg;
- if ($this->params['resample'] === 'yes')
- {
- //copy and resample
- imagecopyresampled($tmpImg, $img, $xDst, $yDst, $xSrc, $ySrc,$newWidth, $newHeight, $width, $height);
- }
- else
- {
- //copy and resize
- imagecopyresized($tmpImg, $img, $xDst, $yDst, $xSrc, $ySrc,$newWidth, $newHeight, $width, $height);
- }
- imagedestroy($img);
- $img = $tmpImg;
+ if (!function_exists($this->params['function'])) {
+ throw new Exception('Error in <b>'.__METHOD__.'</b>: function <b>'.$this->params['function']. '</b> does not exist');
+ }
- if (!function_exists($this->params['function']))
- {
- throw new Exception('Error in <b>'.__METHOD__.'</b>: function <b>'.$this->params['function']. '</b> does not exist');
+ $img = call_user_func($this->params['function'],$img);
}
-
- $img = call_user_func($this->params['function'],$img);
+
}
if (!$img)
@@ -328,7 +195,6 @@ class Image_Gd_Thumbnail
$img = imagecreate($imgWidth, $imgHeight);
imagecolorallocate($img,200,200,200);
-
}
//print the image
diff --git a/h-source/Library/Lang/En/DbCondStrings.php b/h-source/Library/Lang/En/DbCondStrings.php
index 0c72d95..bfc5867 100644
--- a/h-source/Library/Lang/En/DbCondStrings.php
+++ b/h-source/Library/Lang/En/DbCondStrings.php
@@ -2,7 +2,7 @@
// EasyGiant is a PHP framework for creating and managing dynamic content
//
-// Copyright (C) 2009 - 2014 Antonio Gallo (info@laboratoriolibero.com)
+// Copyright (C) 2009 - 2011 Antonio Gallo
// See COPYRIGHT.txt and LICENSE.txt.
//
// This file is part of EasyGiant
@@ -23,12 +23,12 @@
if (!defined('EG')) die('Direct access not allowed!');
//error strings in the case database conditions are not satisfied
-class Lang_En_DbCondStrings extends Lang_En_ValCondStrings {
+class Lang_En_DbCondStrings {
//get the error string in the case that the value of the field $field is already present in the table $table
public function getNotUniqueString($field)
{
- return "<div class='alert'>The value of <i>". getFieldLabel($field) ."</i> is already present. Please choose a different value.</div>\n".$this->getHiddenAlertElement($field);
+ return "<div class='alert'>The value of <i>". $field ."</i> is already present. Please choose a different value.</div>\n";
}
}
diff --git a/h-source/Library/Lang/En/Formats/From/Mysql.php b/h-source/Library/Lang/En/Formats/From/Mysql.php
deleted file mode 100644
index 5e4ea07..0000000
--- a/h-source/Library/Lang/En/Formats/From/Mysql.php
+++ /dev/null
@@ -1,64 +0,0 @@
-<?php
-
-// EasyGiant is a PHP framework for creating and managing dynamic content
-//
-// Copyright (C) 2009 - 2014 Antonio Gallo (info@laboratoriolibero.com)
-// See COPYRIGHT.txt and LICENSE.txt.
-//
-// This file is part of EasyGiant
-//
-// EasyGiant is free software: you can redistribute it and/or modify
-// it under the terms of the GNU General Public License as published by
-// the Free Software Foundation, either version 3 of the License, or
-// (at your option) any later version.
-//
-// EasyGiant is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License
-// along with EasyGiant. If not, see <http://www.gnu.org/licenses/>.
-
-if (!defined('EG')) die('Direct access not allowed!');
-
-class Lang_En_Formats_From_Mysql
-{
-
- //convert the string from MySQL decimal format to En decimal format
- public function decimal($string)
- {
- return $string;
- }
-
- //convert the string from MySQL float format to En float format
- public function float($string)
- {
- return $string;
- }
-
- //convert the string from MySQL double format to En double format
- public function double($string)
- {
- return $string;
- }
-
-
- //convert the string from MySQL date format to En date format
- public function date($date)
- {
- if (preg_match('/^[0-9]{4}\-[0-9]{2}\-[0-9]{2}$/',$date))
- {
- $dateArray = explode('-',$date);
- return $dateArray[1]."-".$dateArray[2]."-".$dateArray[0];
- }
- return $date;
- }
-
- //convert the string from MySQL enum format to En enum format
- public function enum($string)
- {
- return $string;
- }
-
-} \ No newline at end of file
diff --git a/h-source/Library/Lang/En/Formats/To/Mysql.php b/h-source/Library/Lang/En/Formats/To/Mysql.php
deleted file mode 100644
index 31daab8..0000000
--- a/h-source/Library/Lang/En/Formats/To/Mysql.php
+++ /dev/null
@@ -1,62 +0,0 @@
-<?php
-
-// EasyGiant is a PHP framework for creating and managing dynamic content
-//
-// Copyright (C) 2009 - 2014 Antonio Gallo (info@laboratoriolibero.com)
-// See COPYRIGHT.txt and LICENSE.txt.
-//
-// This file is part of EasyGiant
-//
-// EasyGiant is free software: you can redistribute it and/or modify
-// it under the terms of the GNU General Public License as published by
-// the Free Software Foundation, either version 3 of the License, or
-// (at your option) any later version.
-//
-// EasyGiant is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License
-// along with EasyGiant. If not, see <http://www.gnu.org/licenses/>.
-
-if (!defined('EG')) die('Direct access not allowed!');
-
-class Lang_En_Formats_To_Mysql
-{
-
- //convert the string from En decimal format to MySQL decimal format
- public function decimal($string)
- {
- return $string;
- }
-
- //convert the string from En float format to MySQL float format
- public function float($string)
- {
- return $string;
- }
-
- //convert the string from En double format to MySQL double format
- public function double($string)
- {
- return $string;
- }
-
- //convert the string from En date format to MySQL date format
- public function date($date)
- {
- if (preg_match('/^[0-9]{2}\-[0-9]{2}\-[0-9]{4}$/',$date))
- {
- $dateArray = explode('-',$date);
- return $dateArray[2]."-".$dateArray[0]."-".$dateArray[1];
- }
- return $date;
- }
-
- //convert the string from En enum format to MySQL enum format
- public function enum($string)
- {
- return $string;
- }
-} \ No newline at end of file
diff --git a/h-source/Library/Lang/En/Generic.php b/h-source/Library/Lang/En/Generic.php
index 8df27a9..3268270 100644
--- a/h-source/Library/Lang/En/Generic.php
+++ b/h-source/Library/Lang/En/Generic.php
@@ -2,7 +2,7 @@
// EasyGiant is a PHP framework for creating and managing dynamic content
//
-// Copyright (C) 2009 - 2014 Antonio Gallo (info@laboratoriolibero.com)
+// Copyright (C) 2009 - 2011 Antonio Gallo
// See COPYRIGHT.txt and LICENSE.txt.
//
// This file is part of EasyGiant
@@ -49,9 +49,6 @@ class Lang_En_Generic
'pages' => 'pages',
'filter' => 'filter',
'clear the filter' => 'clear the filter',
- 'Save' => 'Save',
- 'Actions' => 'Actions',
- '-- Select bulk action --' => '-- Select bulk action --',
);
public function gtext($string)
diff --git a/h-source/Library/Lang/En/ModelStrings.php b/h-source/Library/Lang/En/ModelStrings.php
index 266b1d2..cf26b8f 100644
--- a/h-source/Library/Lang/En/ModelStrings.php
+++ b/h-source/Library/Lang/En/ModelStrings.php
@@ -2,7 +2,7 @@
// EasyGiant is a PHP framework for creating and managing dynamic content
//
-// Copyright (C) 2009 - 2014 Antonio Gallo (info@laboratoriolibero.com)
+// Copyright (C) 2009 - 2011 Antonio Gallo
// See COPYRIGHT.txt and LICENSE.txt.
//
// This file is part of EasyGiant
@@ -24,19 +24,13 @@ if (!defined('EG')) die('Direct access not allowed!');
class Lang_En_ModelStrings extends Lang_ResultStrings {
- public function __construct() {
-
- $this->string = array(
- "error" => "<div class='".Params::$errorStringClassName."'>Query error: Contact the administrator!</div>\n",
- "executed" => "<div class='".Params::$infoStringClassName."'>Operation executed!</div>\n",
- "associate" => "<div class='".Params::$errorStringClassName."'>Referential integrity problem: record associated to some other record in a child table. Break the association before.</div>\n",
- "no-id" => "<div class='".Params::$errorStringClassName."'>Alert: record identifier not defined!</div>\n",
- "not-linked" => "<div class='".Params::$errorStringClassName."'>The Item is not associated : you can't dissociate it</div>",
- "linked" => "<div class='".Params::$errorStringClassName."'>The Item is already associated: you can't associate it another time</div>",
- "not-existing-fields" => "<div class='".Params::$errorStringClassName."'>Some fields in the query do not exist</div>\n",
- "no-fields" => "<div class='".Params::$errorStringClassName."'>There are no values in the insert/update query</div>\n",
- );
-
- }
+ public $string = array(
+ "error" => "<div class='alert'>Query error: Contact the administrator!</div>\n",
+ "executed" => "<div class='executed'>Operation executed!</div>\n",
+ "associate" => "<div class='alert'>Referential integrity problem: record associated to some other record in a child table. Break the association before.</div>\n",
+ "no-id" => "<div class='alert'>Alert: record identifier not defined!</div>\n",
+ "not-linked" => "<div class='alert'>The Item is not associated : you can't dissociate it</div>",
+ "linked" => "<div class='alert'>The Item is already associated: you can't associate it another time</div>"
+ );
}
diff --git a/h-source/Library/Lang/En/UploadStrings.php b/h-source/Library/Lang/En/UploadStrings.php
index 572f7bb..61bc0c5 100644
--- a/h-source/Library/Lang/En/UploadStrings.php
+++ b/h-source/Library/Lang/En/UploadStrings.php
@@ -2,7 +2,7 @@
// EasyGiant is a PHP framework for creating and managing dynamic content
//
-// Copyright (C) 2009 - 2014 Antonio Gallo (info@laboratoriolibero.com)
+// Copyright (C) 2009 - 2011 Antonio Gallo
// See COPYRIGHT.txt and LICENSE.txt.
//
// This file is part of EasyGiant
diff --git a/h-source/Library/Lang/En/ValCondStrings.php b/h-source/Library/Lang/En/ValCondStrings.php
index 8742c23..7f4e7ea 100644
--- a/h-source/Library/Lang/En/ValCondStrings.php
+++ b/h-source/Library/Lang/En/ValCondStrings.php
@@ -2,7 +2,7 @@
// EasyGiant is a PHP framework for creating and managing dynamic content
//
-// Copyright (C) 2009 - 2014 Antonio Gallo (info@laboratoriolibero.com)
+// Copyright (C) 2009 - 2011 Antonio Gallo
// See COPYRIGHT.txt and LICENSE.txt.
//
// This file is part of EasyGiant
@@ -24,106 +24,70 @@ if (!defined('EG')) die('Direct access not allowed!');
class Lang_En_ValCondStrings {
- //get the HTMl of the hidden alert notices
- public function getHiddenAlertElement($element)
- {
- $html = "";
- $t = explode(",",$element);
-
- foreach ($t as $el)
- {
- $html .= "<div style='display:none;' rel='hidden_alert_notice'>$el</div>";
- }
-
- return $html;
- }
-
//if the element is not defined
public function getNotDefinedResultString($element)
{
- return "<div class='".Params::$errorStringClassName."'>Please fill the field <i>". getFieldLabel($element) ."</i>.</div>\n".$this->getHiddenAlertElement($element);
+ return "<div class='alert'>". $element ." not defined!</div>\n";
}
//if the elements are not equal
public function getNotEqualResultString($element)
{
- return "<div class='".Params::$errorStringClassName."'>Please check that the fields <i>".getFieldLabel($element)."</i> are equal</div>\n".$this->getHiddenAlertElement($element);
+ return "<div class='alert'>Different values: $element</div>\n";
}
//if the element is not alphabetic
public function getNotAlphabeticResultString($element)
{
- return "<div class='".Params::$errorStringClassName."'>Please check that the field <i>".getFieldLabel($element)."</i> is alphabetic</div>\n".$this->getHiddenAlertElement($element);
+ return "<div class='alert'>".$element." has to be alphabetic</div>\n";
}
//if the element is not alphanumeric
public function getNotAlphanumericResultString($element)
{
- return "<div class='".Params::$errorStringClassName."'>Please check that the field <i>".getFieldLabel($element)."</i> has to be alphanumeric</div>\n".$this->getHiddenAlertElement($element);
+ return "<div class='alert'>".$element." has to be alphanumeric</div>\n";
}
//if the element is not a decimal digit
public function getNotDecimalDigitResultString($element)
{
- return "<div class='".Params::$errorStringClassName."'>Please check that the field <i>".getFieldLabel($element)."</i> is a decimal digit</div>\n".$this->getHiddenAlertElement($element);
+ return "<div class='alert'>".$element." has to be a decimal digit</div>\n";
}
-
- //if the element hasn't the mail format
+
+ //if the element has the mail format
public function getNotMailFormatResultString($element)
{
- return "<div class='".Params::$errorStringClassName."'>Please check that the field <i>".getFieldLabel($element)."</i> is an e-mail address</div>\n".$this->getHiddenAlertElement($element);
+ return "<div class='alert'>".$element." doesn't seem an e-mail address</div>\n";
}
- //if the element is not numeric
+ //if the element is numeric
public function getNotNumericResultString($element)
{
- return "<div class='".Params::$errorStringClassName."'>Please check that the field <i>".getFieldLabel($element)."</i> is numeric</div>\n".$this->getHiddenAlertElement($element);
- }
-
- //if the element is not an integer
- public function getNotIntegerFormatResultString($element)
- {
- return "<div class='".Params::$errorStringClassName."'>Please check that the field <i>".getFieldLabel($element)."</i> is an integer number</div>\n".$this->getHiddenAlertElement($element);
- }
-
- //if the element is not a real date
- public function getNotDateResultString($element)
- {
- return "<div class='".Params::$errorStringClassName."'>Please check that the field <i>".getFieldLabel($element)."</i> is a real date</div>\n".$this->getHiddenAlertElement($element);
+ return "<div class='alert'>".$element." has to be a numeric</div>\n";
}
//if the element (string) length exceeds the value of characters (defined by $maxLength)
public function getLengthExceedsResultString($element,$maxLength)
{
- return "<div class='".Params::$errorStringClassName."'>Please check that the field <i>".getFieldLabel($element)."</i> does not exceed the value of $maxLength characters</div>\n".$this->getHiddenAlertElement($element);
+ return "<div class='alert'>".$element." exceeds the value of $maxLength characters</div>\n";
}
//if the element is one of the strings indicated by $stringList (a comma-separated list of strings)
public function getIsForbiddenStringResultString($element,$stringList)
{
- return "<div class='".Params::$errorStringClassName."'>Please check that the field <i>".getFieldLabel($element)."</i> is not one of the following strings: $stringList</div>\n".$this->getHiddenAlertElement($element);
+ return "<div class='alert'>".$element." can't be one of the following strings: $stringList</div>\n";
}
//if the element is not one of the strings indicated by $stringList (a comma-separated list of strings)
public function getIsNotStringResultString($element,$stringList)
{
- return "<div class='".Params::$errorStringClassName."'>Please check that the field <i>".getFieldLabel($element)."</i> is one of the following strings: $stringList</div>\n".$this->getHiddenAlertElement($element);
+ return "<div class='alert'>".$element." has to be one of the following strings: $stringList</div>\n";
}
- //if the element does not match the reg expr indicated by $regExp
+ //if the element is not one of the strings indicated by $stringList (a comma-separated list of strings)
public function getDoesntMatchResultString($element,$regExp)
{
- return "<div class='".Params::$errorStringClassName."'>Please check that the field <i>".getFieldLabel($element)."</i> matchs the following regular expression: $regExp</div>\n".$this->getHiddenAlertElement($element);
- }
-
- //if the element is not decimal
- public function getNotDecimalResultString($element, $format)
- {
- $t = explode(",",$format);
- $M = (int)$t[0];
- $D = (int)$t[1];
- $I = $M - $D;
- return "<div class='".Params::$errorStringClassName."'>Please check that the field <i>".getFieldLabel($element)."</i> is a decimal number (maximum number of integer digits:$I, maximum number of decimal digits: $D)</div>\n".$this->getHiddenAlertElement($element);
+ return "<div class='alert'>".$element." has to match the following regular expression: $regExp</div>\n";
}
}
diff --git a/h-source/Library/Lang/Eng/DbCondStrings.php b/h-source/Library/Lang/Eng/DbCondStrings.php
index cd625af..e4196b6 100644
--- a/h-source/Library/Lang/Eng/DbCondStrings.php
+++ b/h-source/Library/Lang/Eng/DbCondStrings.php
@@ -2,7 +2,7 @@
// EasyGiant is a PHP framework for creating and managing dynamic content
//
-// Copyright (C) 2009 - 2014 Antonio Gallo (info@laboratoriolibero.com)
+// Copyright (C) 2009 - 2011 Antonio Gallo
// See COPYRIGHT.txt and LICENSE.txt.
//
// This file is part of EasyGiant
diff --git a/h-source/Library/Lang/Eng/Generic.php b/h-source/Library/Lang/Eng/Generic.php
index 29947fd..bb0ab99 100644
--- a/h-source/Library/Lang/Eng/Generic.php
+++ b/h-source/Library/Lang/Eng/Generic.php
@@ -2,7 +2,7 @@
// EasyGiant is a PHP framework for creating and managing dynamic content
//
-// Copyright (C) 2009 - 2014 Antonio Gallo (info@laboratoriolibero.com)
+// Copyright (C) 2009 - 2011 Antonio Gallo
// See COPYRIGHT.txt and LICENSE.txt.
//
// This file is part of EasyGiant
@@ -33,25 +33,6 @@ class Lang_Eng_Generic
'move up' => 'move up',
'move down' => 'move down',
'associate' => 'associate',
- 'up' => 'su',
- 'down' => 'down',
- 'link' => 'link',
- 'del' => 'del',
- 'back' => 'back',
- 'Back' => 'Back',
- 'add a new record' => 'add a new record',
- 'Add' => 'Add',
- 'back to the Panel' => 'back to the Panel',
- 'Panel' => 'Panel',
- 'previous' => 'previous',
- 'next' => 'next',
- 'All' => 'All',
- 'pages' => 'pages',
- 'filter' => 'filter',
- 'clear the filter' => 'clear the filter',
- 'Save' => 'Save',
- 'Actions' => 'Actions',
- '-- Select bulk action --' => '-- Select bulk action --',
);
public function gtext($string)
diff --git a/h-source/Library/Lang/Eng/ModelStrings.php b/h-source/Library/Lang/Eng/ModelStrings.php
index 20b8173..fa741a2 100644
--- a/h-source/Library/Lang/Eng/ModelStrings.php
+++ b/h-source/Library/Lang/Eng/ModelStrings.php
@@ -2,7 +2,7 @@
// EasyGiant is a PHP framework for creating and managing dynamic content
//
-// Copyright (C) 2009 - 2014 Antonio Gallo (info@laboratoriolibero.com)
+// Copyright (C) 2009 - 2011 Antonio Gallo
// See COPYRIGHT.txt and LICENSE.txt.
//
// This file is part of EasyGiant
@@ -30,8 +30,7 @@ class Lang_Eng_ModelStrings extends Lang_ResultStrings {
"associate" => "<div class='alert'>Referential integrity problem: record associated to some other record in a child table. Break the association before.</div>\n",
"no-id" => "<div class='alert'>Alert: record identifier not defined!</div>\n",
"not-linked" => "<div class='alert'>The Item is not associated : you can't dissociate it</div>",
- "linked" => "<div class='alert'>The Item is already associated: you can't associate it another time</div>",
- "not-existing-fields" => "<div class='alert'>Some fields in the query do not exist</div>\n",
+ "linked" => "<div class='alert'>The Item is already associated: you can't associate it another time</div>"
);
}
diff --git a/h-source/Library/Lang/Eng/UploadStrings.php b/h-source/Library/Lang/Eng/UploadStrings.php
index ca0332b..2ae4c9b 100644
--- a/h-source/Library/Lang/Eng/UploadStrings.php
+++ b/h-source/Library/Lang/Eng/UploadStrings.php
@@ -2,7 +2,7 @@
// EasyGiant is a PHP framework for creating and managing dynamic content
//
-// Copyright (C) 2009 - 2014 Antonio Gallo (info@laboratoriolibero.com)
+// Copyright (C) 2009 - 2011 Antonio Gallo
// See COPYRIGHT.txt and LICENSE.txt.
//
// This file is part of EasyGiant
diff --git a/h-source/Library/Lang/Eng/ValCondStrings.php b/h-source/Library/Lang/Eng/ValCondStrings.php
index f5d40a2..42e70d8 100644
--- a/h-source/Library/Lang/Eng/ValCondStrings.php
+++ b/h-source/Library/Lang/Eng/ValCondStrings.php
@@ -2,7 +2,7 @@
// EasyGiant is a PHP framework for creating and managing dynamic content
//
-// Copyright (C) 2009 - 2014 Antonio Gallo (info@laboratoriolibero.com)
+// Copyright (C) 2009 - 2011 Antonio Gallo
// See COPYRIGHT.txt and LICENSE.txt.
//
// This file is part of EasyGiant
@@ -27,89 +27,67 @@ class Lang_Eng_ValCondStrings {
//if the element is not defined
public function getNotDefinedResultString($element)
{
- return "<div class='".Params::$errorStringClassName."'>". $element ." not defined!</div>\n";
+ return "<div class='alert'>". $element ." not defined!</div>\n";
}
//if the elements are not equal
public function getNotEqualResultString($element)
{
- return "<div class='".Params::$errorStringClassName."'>Different values: $element</div>\n";
+ return "<div class='alert'>Different values: $element</div>\n";
}
//if the element is not alphabetic
public function getNotAlphabeticResultString($element)
{
- return "<div class='".Params::$errorStringClassName."'>".$element." has to be alphabetic</div>\n";
+ return "<div class='alert'>".$element." has to be alphabetic</div>\n";
}
//if the element is not alphanumeric
public function getNotAlphanumericResultString($element)
{
- return "<div class='".Params::$errorStringClassName."'>".$element." has to be alphanumeric</div>\n";
+ return "<div class='alert'>".$element." has to be alphanumeric</div>\n";
}
//if the element is not a decimal digit
public function getNotDecimalDigitResultString($element)
{
- return "<div class='".Params::$errorStringClassName."'>".$element." has to be a decimal digit</div>\n";
+ return "<div class='alert'>".$element." has to be a decimal digit</div>\n";
}
- //if the element hasn't the mail format
+ //if the element has the mail format
public function getNotMailFormatResultString($element)
{
- return "<div class='".Params::$errorStringClassName."'>".$element." doesn't seem an e-mail address</div>\n";
+ return "<div class='alert'>".$element." doesn't seem an e-mail address</div>\n";
}
- //if the element is not numeric
+ //if the element is numeric
public function getNotNumericResultString($element)
{
- return "<div class='".Params::$errorStringClassName."'>".$element." has to be a numeric</div>\n";
- }
-
- //if the element is not an integer
- public function getNotIntegerFormatResultString($element)
- {
- return "<div class='".Params::$errorStringClassName."'>".$element." has to be an integer</div>\n";
- }
-
- //if the element is not a real date
- public function getNotDateResultString($element)
- {
- return "<div class='".Params::$errorStringClassName."'>".$element." has to be a real date (YYYY-MM-DD)</div>\n";
+ return "<div class='alert'>".$element." has to be a numeric</div>\n";
}
//if the element (string) length exceeds the value of characters (defined by $maxLength)
public function getLengthExceedsResultString($element,$maxLength)
{
- return "<div class='".Params::$errorStringClassName."'>".$element." exceeds the value of $maxLength characters</div>\n";
+ return "<div class='alert'>".$element." exceeds the value of $maxLength characters</div>\n";
}
//if the element is one of the strings indicated by $stringList (a comma-separated list of strings)
public function getIsForbiddenStringResultString($element,$stringList)
{
- return "<div class='".Params::$errorStringClassName."'>".$element." can't be one of the following strings: $stringList</div>\n";
+ return "<div class='alert'>".$element." can't be one of the following strings: $stringList</div>\n";
}
//if the element is not one of the strings indicated by $stringList (a comma-separated list of strings)
public function getIsNotStringResultString($element,$stringList)
{
- return "<div class='".Params::$errorStringClassName."'>".$element." has to be one of the following strings: $stringList</div>\n";
+ return "<div class='alert'>".$element." has to be one of the following strings: $stringList</div>\n";
}
- //if the element does not match the reg expr indicated by $regExp
+ //if the element is not one of the strings indicated by $stringList (a comma-separated list of strings)
public function getDoesntMatchResultString($element,$regExp)
{
- return "<div class='".Params::$errorStringClassName."'>".$element." has to match the following regular expression: $regExp</div>\n";
- }
-
- //if the element is not decimal
- public function getNotDecimalResultString($element, $format)
- {
- $t = explode(",",$format);
- $M = (int)$t[0];
- $D = (int)$t[1];
- $I = $M - $D;
- return "<div class='".Params::$errorStringClassName."'><i>".$element."</i> has to be a decimal number (maximum number of integer digits:$I, maximum number of decimal digits: $D)</div>\n";
+ return "<div class='alert'>".$element." has to match the following regular expression: $regExp</div>\n";
}
}
diff --git a/h-source/Library/Lang/ResultStrings.php b/h-source/Library/Lang/ResultStrings.php
index 6f84090..2181b90 100644
--- a/h-source/Library/Lang/ResultStrings.php
+++ b/h-source/Library/Lang/ResultStrings.php
@@ -2,7 +2,7 @@
// EasyGiant is a PHP framework for creating and managing dynamic content
//
-// Copyright (C) 2009 - 2014 Antonio Gallo (info@laboratoriolibero.com)
+// Copyright (C) 2009 - 2011 Antonio Gallo
// See COPYRIGHT.txt and LICENSE.txt.
//
// This file is part of EasyGiant
diff --git a/h-source/Library/ModAbstract.php b/h-source/Library/ModAbstract.php
index de4f68f..f576c10 100644
--- a/h-source/Library/ModAbstract.php
+++ b/h-source/Library/ModAbstract.php
@@ -2,7 +2,7 @@
// EasyGiant is a PHP framework for creating and managing dynamic content
//
-// Copyright (C) 2009 - 2014 Antonio Gallo (info@laboratoriolibero.com)
+// Copyright (C) 2009 - 2011 Antonio Gallo
// See COPYRIGHT.txt and LICENSE.txt.
//
// This file is part of EasyGiant
diff --git a/h-source/Library/Model/#Base.php# b/h-source/Library/Model/#Base.php#
new file mode 100755
index 0000000..4162a56
--- /dev/null
+++ b/h-source/Library/Model/#Base.php#
@@ -0,0 +1,1273 @@
+<?php
+
+// EasyGiant is a PHP framework for creating and managing dynamic content
+//
+// Copyright (C) 2009 - 2011 Antonio Gallo
+// See COPYRIGHT.txt and LICENSE.txt.
+//
+// This file is part of EasyGiant
+//
+// EasyGiant is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// EasyGiant is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with EasyGiant. If not, see <http://www.gnu.org/licenses/>.
+
+if (!defined('EG')) die('Direct access not allowed!');
+
+abstract class Model_Base
+{
+
+ public $fields = ''; //the fields that have to be manipulated by the update and insert query
+ public $values = array(); //the values that corresponding to the $this->fields fields
+ public $form = null; //reference to a Form_Form object
+ public $formStruct = null; //the form structure
+
+ public $submitName = null; //the current submitName (from the form)
+ public $identifierName = 'identifier';
+
+ public $notice = null; //a string explaining the result of the query applied (or not if an error occured): executed, error, etc
+ public $result = true; //the result of validate conditions, database conditions and query. It can be 'true' or 'false'
+ public $queryResult = false; //the result of the query
+
+ //conditions that have to be satisfied before applying the query
+ //Ex: 'update'=>'checkEmpty:titolo,autore','submitName'=>'conditions'
+ public $strongConditions = array();
+
+ //conditions that have to be satisfied before applying the query
+ //Ex: 'update'=>'checkEmpty:titolo,autore','submitName'=>'conditions'
+ //do not return error if a value is equal to '' or null
+ public $softConditions = array();
+
+ //conditions that have to be satisfied before applying the query
+ //check that the new values inserted satisfy some conditions
+ //Ex: 'update'=>'checkUniqueCompl:titolo,autore;checkUnique:titolo','insert'=>'checkUnique:titolo'
+ public $databaseConditions = array();
+
+ public $popupArray = array(); //array of popup objects (see popup.php)
+
+ public $supplInsertValues = array(); //associative array defining supplementary values to be inserted on each insert query. It has to have the following form: array(field1 => value1,field2 => value2, ...)
+
+ public $supplUpdateValues = array(); //associative array defining supplementary values to be inserted on each update query. It has to have the following form: array(field1 => value1,field2 => value2, ...)
+
+ public $select = null; //fields that have to be selected in select queries
+ public $where = array(); //associative array containing all the where clauses ($field => $value)
+ //group by, order by and limit clauses
+ public $groupBy = null;
+ public $orderBy = null;
+ public $limit = null;
+
+ public $from = null; //from clause of the select queries
+ public $on = array(); //on array
+ public $using = array(); //using array
+ public $join = array(); //join array
+
+ public $toList = false; //if the result have to be given in a list format
+ public $listArray = array(); //array containing the $key and the $value to be used to extract a list from a resultSet
+
+ //logic operator between statements in the where clause of select queries
+ public $logicalOperators = array('AND');
+
+ public $files = null; //reference to the Files_Upload class
+
+ protected $_tables='itemTable,boxTable,item_boxTable';
+ protected $_idFields='id_item,id_box';
+ protected $_tablesArray=array();
+ protected $_idFieldsArray=array();
+ protected $_where = array();
+
+ //the name of the field that has to be used to order the rows of the main table of the model
+ protected $_idOrder = null;
+
+ protected $_onDelete = 'check'; //can be 'nocheck' or 'check'. check: referential integrity check. nocheck: no referential integrity check
+ protected $_reference = null; //array containing the child table that have a reference to this table and the foreign key of the child table-> array($childTable,$foreignKey)
+
+ protected $_popupItemNames = array(); //the fields to be used as names in the popupArray elements. Associative array ($itemNameField1 => $itemNameValue1, ...)
+
+ //the labels of the pop-up menus
+ protected $_popupLabels = array();
+
+ //functions that have to be applied upon the label fields of the popup menu
+ protected $_popupFunctions = array();
+
+ protected $_popupWhere = array(); //where clause for the pupup menu
+
+ protected $_resultString; //reference to the class containing all the result strings of the db queries
+ protected $_dbCondString; //reference to the class containing all the result strings of the database conditions
+
+ protected $_backupFields = ''; //field saved after the delFields method has been applied
+ protected $_backupValues = array(); //values saved after the delFields method has been applied
+ protected $_allowedDbMethods = array('update','insert','del','moveup','movedown'); //methods that can be called by the updateTable method
+
+ protected $submitNames = array(
+ 'update' => 'updateAction',
+ 'insert' => 'insertAction',
+ 'del' =>'delAction',
+ 'moveup' =>'moveupAction',
+ 'movedown' =>'movedownAction'
+ );
+
+ protected $identifierValue = null; //the value of the identifier ($_POST[$this->identifier])
+ protected $arrayExt; //arrayExt object (see library/arrayExt.php)
+
+ protected $_arrayStrongCheck; //Array_Validate_Strong object
+ protected $_arraySoftCheck; //Array_Validate_Soft object
+
+ public $db; //reference to the database layer class
+ protected $_lang = null; //language of notices
+
+
+ public function __construct() {
+ $this->_tablesArray = explode(',',$this->_tables);
+ $this->_idFieldsArray = explode(',',$this->_idFields);
+ $this->_where[$this->_idFieldsArray[0]] = $this->_tablesArray[0];
+ $this->arrayExt = new ArrayExt();
+
+ //initialize the validate objects
+ $this->_arrayStrongCheck = new Array_Validate_Strong($this->_lang);
+ $this->_arraySoftCheck = new Array_Validate_Soft($this->_lang);
+
+ $this->identifierName = $this->_idFieldsArray[0];
+
+ //set the language of notices
+ $this->_lang = Params::$language;
+
+ //create the $_resultString object (result strings of the db queries)
+ $modelStringClass = 'Lang_'.$this->_lang.'_ModelStrings';
+ if (!class_exists($modelStringClass))
+ {
+ $modelStringClass = 'Lang_En_ModelStrings';
+ }
+ $this->_resultString = new $modelStringClass();
+
+ //create the $_dbCondString object (result strings of the database conditions)
+ $dbCondStringClass = 'Lang_'.$this->_lang.'_DbCondStrings';
+ if (!class_exists($dbCondStringClass))
+ {
+ $dbCondStringClass = 'Lang_En_DbCondStrings';
+ }
+ $this->_dbCondString = new $dbCondStringClass();
+
+ //instantiate the database class
+ $this->db = Factory_Db::getInstance(DATABASE_TYPE);
+
+ //instantiate the Files_Upload class
+ $params = array(
+ 'filesPermission' => 0777,
+ 'language' => $this->_lang,
+ 'allowedExtensions' => 'png,jpg,jpeg,gif',
+ 'maxFileSize' => 20000000,
+ 'fileUploadKey' => 'userfile'
+ );
+
+ $this->files = new Files_Upload(ROOT."/media/",$params);
+ }
+
+ //sanitize all the $values property
+ public function sanitize()
+ {
+ $keys = implode(',',array_keys($this->values));
+ $this->values = $this->arrayExt->subset($this->values,$keys,'sanitizeDb');
+ }
+
+ //change a resulting string from a db query
+ public function setString($key,$value)
+ {
+ $this->_resultString->string[$key] = $value;
+ }
+
+ //set the submitNames property (array)
+ //$methodName : the method name, $submitName: the submit name of the submit action of the form
+ public function setSubmitNames($methodName,$submitName)
+ {
+ if (!in_array($methodName,$this->_allowedDbMethods))
+ {
+ throw new Exception('query type <b>"'.$methodName. '"</b> not allowed in '. __METHOD__);
+ }
+ $this->submitNames[$methodName] = $submitName;
+ }
+
+ //get the last query executed
+ public function getQuery()
+ {
+ return $this->db->query;
+ }
+
+ //get the where clause of the select query
+ public function getWhereQueryClause()
+ {
+ return $this->where;
+ }
+
+ //set the where clause of the select query
+ //whereArray = array ($table_field => $value)
+ public function setWhereQueryClause($whereArray)
+ {
+ $this->where = $whereArray;
+ }
+
+ //append the whereArray clause to $this_->whereClause
+ //whereArray = array ($table_field => $value)
+ public function appendWhereQueryClause($whereArray)
+ {
+ $this->where = array_merge($this->where,$whereArray);
+ }
+
+ //drop the char $char from the beginning of the string $string
+ public function dropStartChar($string,$char)
+ {
+ while(strcmp($string[0],$char) === 0)
+ {
+ $string = substr($string,1);
+ }
+ return $string;
+ }
+
+ //get the table name from $this->_where. If the table is not present then return $this->_tablesArray[0]
+ public function getTableName($field)
+ {
+ return isset($this->_where[$field]) ? $this->_where[$field] : $this->_tablesArray[0];
+ }
+
+ //method to create the where clause of the select query from the $this->where array
+ //$level: level of the ricorsion
+ //$whereClauseLevel: array containing the field=>value statements of the where clause. If $whereClause = null than $this->where is considered
+ public function createWhereClause($level = 0, $whereClauseLevel = null, $operator = null)
+ {
+ $whereClause = null;
+ $whereClauseArray = array();
+
+ $whereClause = isset($whereClauseLevel) ? $whereClauseLevel : $this->where;
+
+ foreach ($whereClause as $field => $value)
+ {
+ if (is_array($value))
+ {
+ if (strstr($field,"OR"))
+ {
+ $op = " OR ";
+ }
+ else if (strstr($field,"AND"))
+ {
+ $op = " AND ";
+ }
+ else
+ {
+ $op = null;
+ }
+ $newValue = $this->createWhereClause($level+1, $value, $op);
+ if (isset($newValue)) $whereClauseArray[] = $newValue;
+ }
+ else
+ {
+ $flag = 0; //equal where clause
+ if (isset($field))
+ {
+ //drop the 'n:' and '-' chars from $field
+ $fieldClean = str_replace('n!',null,$field);
+ $fieldClean = $this->dropStartChar($fieldClean,'-');
+ if (strcmp($value,Params::$nullQueryValue) !== 0 or (Params::$nullQueryValue === false))
+ {
+ foreach (params::$whereClauseSymbolArray as $symbol)
+ {
+ if (strstr($value,$symbol))
+ {
+ //check if write or not the table name
+ $tableName = strstr($field,'n!') ? null : $this->getTableName($field).'.';
+ $whereClauseArray[] = $tableName.$fieldClean.' '.$value;
+ $flag = 1; //not equal where clause
+ break;
+ }
+ }
+ if ($flag === 0)
+ {
+ $value = '"'.$value.'"';
+ //check if write or not the table name
+ $tableName = strstr($field,'n!') ? null : $this->getTableName($field).'.';
+ $whereClauseArray[] = $tableName.$fieldClean.'='.$value;
+ }
+ }
+ }
+ }
+ }
+ //get the logic operator at the current level
+ if (isset($operator))
+ {
+ $logicOper = $operator;
+ }
+ else
+ {
+ $logicOper = isset($this->logicalOperators[$level]) ? ' '.$this->logicalOperators[$level].' ' : ' AND ';
+ }
+ $whereClause = !empty($whereClauseArray) ? implode($logicOper,$whereClauseArray) : null;
+ $whereClause = (isset($whereClause) and $level>0) ? '('.$whereClause.')' : $whereClause;
+ return $whereClause;
+ }
+
+
+ //get the submitName having its key (the method name)
+ public function getSubmitName($key)
+ {
+ if (!array_key_exists($key,$this->submitNames))
+ {
+ return 'generalAction';
+// throw new Exception('query type <b>"'.$key. '"</b> not allowed in '.__METHOD__);
+ }
+ return $this->submitNames[$key];
+
+ }
+
+
+ //return the values, taken from the $_POST array, to be inserted inside the forms
+ //$queryType: insert or update
+ //$func: sanitize function to apply upon each value
+ //$id: if $queryType='update' that the values are taken from the record (of the main table of this model) having the primary key equal to $id
+ //$defaultValues = associative array of the form: array($entry=>$defaultValue)
+ //$functionsIfFromDb = associative array of the form: array($entry=>$function_to_be_applied)
+ public function getFormValues($queryType = 'insert', $func = 'sanitizeHtml',$id = null,$defaultValues = array(),$functionsIfFromDb = array())
+ {
+ @session_start();
+ if (is_array($func))
+ {
+ $funcPost = $func[0];
+ $funcDb = $func[1];
+ }
+ else
+ {
+ $funcPost = $func;
+ $funcDb = 'none';
+ }
+
+ $arrayType = array('update','insert');
+ $values = array();
+ $idName = $this->identifierName;
+ if (in_array($queryType,$arrayType))
+ {
+ $ident = null;
+ if (isset($id))
+ {
+ $ident = (int)$id;
+ }
+ else if (isset($_POST[$idName]))
+ {
+ $ident = (int)$_POST[$idName];
+ }
+ if ($this->result)
+ {
+ if ($queryType === 'update')
+ {
+ if (isset($ident))
+ {
+ $recordArray = $this->selectId($ident);
+
+ $fieldsArray = explode(',',$this->fields);
+
+ $values = $this->arrayExt->subset($recordArray,$this->fields,$funcDb);
+
+// foreach ($fieldsArray as $field)
+// {
+// $values[$field] = array_key_exists($field,$recordArray) ? $recordArray[$field] : '';
+// }
+
+ $values[$idName] = $ident;
+
+ //apply the functions upon entries
+ foreach ($functionsIfFromDb as $entry => $funcUponEntry)
+ {
+ if (array_key_exists($entry,$values))
+ {
+ if (!function_exists($funcUponEntry)) {
+ throw new Exception('Error in <b>'.__METHOD__.'</b>: function <b>'.$funcUponEntry. '</b> does not exist');
+ }
+
+ $values[$entry] = call_user_func($funcUponEntry,$values[$entry]);
+ }
+ }
+
+ //set values of $_SESSION array
+ foreach ($values as $k => $v)
+ {
+ if (isset($this->formStruct['entries'][$k]['type']))
+ {
+ if ($this->formStruct['entries'][$k]['type'] === 'File')
+ {
+ $_SESSION['form_'.$k] = $v;
+ }
+ }
+ }
+ }
+ }
+ else if ($queryType === 'insert')
+ {
+
+ $tempArray = is_array($defaultValues) ? $defaultValues : array();
+
+ $values = $this->arrayExt->subset($tempArray,$this->fields,$funcPost);
+
+ }
+ }
+ else
+ {
+ $values = $this->arrayExt->subset($_POST,$this->fields,$funcPost);
+
+ if ($queryType === 'update')
+ {
+ $values[$idName] = $ident;
+
+ //take values from $_SESSION array
+ $tempFieldArray = explode(',',$this->fields);
+
+ for ($i = 0; $i < count($tempFieldArray); $i++)
+ {
+ if (isset($this->formStruct['entries'][$tempFieldArray[$i]]['type']))
+ {
+ if ($this->formStruct['entries'][$tempFieldArray[$i]]['type'] === 'File')
+ {
+ if (isset($_SESSION['form_'.$tempFieldArray[$i]]))
+ {
+ $values[$tempFieldArray[$i]] = $_SESSION['form_'.$tempFieldArray[$i]];
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ return $values;
+ }
+
+
+ //method to set the properties $this->fields and $this->values
+ public function setFields($fields,$func = 'sanitizeAll')
+ {
+ $this->values = $this->arrayExt->subset($_POST,$fields,$func);
+ $this->fields = $this->extractFields($fields);
+
+ //set the backup variables
+ $this->_backupFields = $this->fields;
+ $this->_backupValues = $this->values;
+ }
+
+
+ //clear the fields list
+ public function clearFields()
+ {
+ $this->_backupFields = $this->fields;
+ $this->_backupValues = $this->values;
+ $this->fields = '';
+ $this->values = array();
+ }
+
+ //del the fields written in the $list argument. The $list argument has to be of the type: field1,field2,...
+ public function delFields($list)
+ {
+ $this->_backupFields = $this->fields;
+ $this->_backupValues = $this->values;
+ $this->values = $this->arrayExt->subsetComplementary($this->values,$list);
+// $this->fields = implode(',',array_keys($this->values));
+ }
+
+ //restore the fields and values saved in $_backupFields and $_backupValues
+ public function restoreFields()
+ {
+ $this->fields = $this->_backupFields;
+ $this->values = $this->_backupValues;
+ }
+
+ //method to clean the $fields string deleting the colons (and the word after the colon)
+ public function extractFields($fields) {
+ $fieldsArray = explode(',',$fields);
+ $resultString = array();
+ foreach ($fieldsArray as $field) {
+ if (strstr($field,':')) {
+ $temp = explode(':',$field);
+ $resultString[] = $temp[0];
+ } else {
+ $resultString[] = $field;
+ }
+ }
+ return implode(',',$resultString);
+ }
+
+ //add the supplementary value on insert and update queries
+ //$queryType: insert or update
+ public function setSupplValues($queryType)
+ {
+ if ($queryType === 'insert')
+ {
+ $supplValues = $this->supplInsertValues;
+ }
+ else if ($queryType === 'update')
+ {
+ $supplValues = $this->supplUpdateValues;
+ }
+
+ $baseFields = implode(',',array_keys($this->values));
+
+ $supplFields = implode(',',array_keys($supplValues));
+ $supplFields = (strcmp($supplFields,'') === 0) ? $supplFields : ',' . $supplFields;
+
+ $fields = $baseFields . $supplFields;
+ $values = array_merge(array_values($this->values),array_values($supplValues));
+
+ return array($fields,$values);
+ }
+
+
+ //method to call the update query (overriding of the base_db del method)
+ //update the record with the primary key equal to $id (default)
+ //if $whereClause is set then use $whereClause as where clause of the update query
+ public function update($id = null, $whereClause = null)
+ {
+ if (!is_array($this->supplUpdateValues))
+ {
+ throw new Exception('error in <b>' . __METHOD__ . '</b>: the <b>supplUpdateValues</b> property has to be an array.');
+ }
+ $el = $this->setSupplValues('update');
+ $this->queryResult = false;
+
+ if (isset($whereClause))
+ {
+ $result = $this->db->update($this->_tablesArray[0],$el[0],$el[1],$whereClause);
+ $this->setNotice($result);
+ return $result;
+ }
+ else
+ {
+ if (isset($id))
+ {
+ $where = $this->_idFieldsArray[0].'='.(int)($id);
+ $result = $this->db->update($this->_tablesArray[0],$el[0],$el[1],$where);
+ $this->setNotice($result);
+ return $result;
+ }
+ else
+ {
+ $this->notice = $this->_resultString->getString('no-id');
+ $this->result = false;
+ $this->identifierValue = null;
+ return false;
+ }
+ }
+ }
+
+ //method to call the insert query (overriding of the base_db del method)
+ public function insert() {
+
+ $this->queryResult = false;
+ if (!is_array($this->supplInsertValues)) {
+ throw new Exception('error in <b>' . __METHOD__ . '</b>: the <b>supplInsertValues</b> property has to be an array.');
+ }
+
+ if (isset($this->_idOrder))
+ {
+ $maxValue = $this->db->getMax($this->_tablesArray[0],$this->_idOrder);
+ $this->supplInsertValues[$this->_idOrder] = (int)$maxValue + 1;
+ }
+
+ $el = $this->setSupplValues('insert');
+
+ $result = $this->db->insert($this->_tablesArray[0],$el[0],$el[1]);
+ $this->setNotice($result);
+ return $result;
+ }
+
+ //method to call the delete query (overriding of the base_db del method)
+ public function del($id = null, $whereClause = null) {
+
+ $this->queryResult = false;
+
+ if (isset($whereClause))
+ {
+ $result = $this->db->del($this->_tablesArray[0],$whereClause);
+ $this->setNotice($result);
+ return $result;
+ }
+ else
+ {
+ if (isset($id)) {
+ $where = $this->_idFieldsArray[0].'='.(int)$id;
+ $result = $this->db->del($this->_tablesArray[0],$where);
+ $this->setNotice($result);
+ return $result;
+ } else {
+ $this->notice = $this->_resultString->getString('no-id');
+ $this->result = false;
+ $this->identifierValue = null;
+ return false;
+ }
+ }
+ }
+
+ //move to the top the record having $this->_idOrder = $id
+ //where clause
+ public function moveup($id)
+ {
+ return $this->move($id,'up');
+ }
+
+ //move to the top the record having $this->_idOrder = $id
+ //where clause
+ public function movedown($id)
+ {
+ return $this->move($id,'down');
+ }
+
+ //move the record having $this->_tablesArray[0] = $id
+ //$par: 'up' or 'down'
+ //where clause
+ public function move($id,$par = 'up')
+ {
+ $this->queryResult = false;
+ if (isset($id))
+ {
+ $increm = ($par === 'up') ? 1 : -1;
+
+ $backupLimit = $this->limit;
+ $this->limit = null;
+
+ $data = $this->getFields($this->_tablesArray[0].'.'.$this->_idFieldsArray[0].','.$this->_tablesArray[0].'.'.$this->_idOrder);
+
+ for($i = 0; $i < count($data); $i++)
+ {
+ if (strcmp($data[$i][$this->_tablesArray[0]][$this->_idFieldsArray[0]],$id) === 0)
+ {
+ if (($par === 'up' and $i !== 0) or ($par === 'down' and $i !== (count($data)-1)))
+ {
+ $prevOrder = $data[$i-$increm][$this->_tablesArray[0]][$this->_idOrder];
+ $prevId = $data[$i-$increm][$this->_tablesArray[0]][$this->_idFieldsArray[0]];
+ $currentOrder = $data[$i][$this->_tablesArray[0]][$this->_idOrder];
+ $currentId = $data[$i][$this->_tablesArray[0]][$this->_idFieldsArray[0]];
+
+ //exchange the id_order of the two record
+ $res1 = $this->db->update($this->_tablesArray[0],$this->_idOrder,array($prevOrder),$this->_idFieldsArray[0]."='$currentId'");
+ $res2 = $this->db->update($this->_tablesArray[0],$this->_idOrder,array($currentOrder),$this->_idFieldsArray[0]."='$prevId'");
+ $result = ($res1 and $res2);
+ $this->setNotice($result);
+ return $result;
+ }
+ }
+ }
+
+ $this->limit = $backupLimit;
+ }
+ else
+ {
+ $this->notice = $this->_resultString->getString('no-id');
+ $this->result = false;
+ $this->identifierValue = null;
+ return false;
+ }
+ return false;
+ }
+
+ public function setNotice($result) {
+ if ($result) {
+ $this->notice = $this->_resultString->getString('executed');
+ $this->result = true;
+ $this->queryResult = true;
+ } else {
+ $this->notice = $this->_resultString->getString('error');
+ $this->result = false;
+ $this->queryResult = false;
+ }
+ }
+
+ //method used to verify that the value of a field is not duplicated
+ //$fieldsList: list of fields to check. Ex: field1,field2,...
+ //$where: the where clause
+ public function checkUnique($fieldsList,$where = null)
+ {
+ $errorString = null;
+ $numb = 0;
+ $fieldsArray = explode(',',$fieldsList);
+ $queryFieldsArray = explode(',',$this->fields);
+ foreach ($fieldsArray as $field)
+ {
+ if (in_array($field,$queryFieldsArray))
+ {
+ if ($this->db->recordExists($this->_tablesArray[0],$field,$this->values[$field],$where))
+ {
+ $errorString .= $this->_dbCondString->getNotUniqueString($field);
+ $numb++;
+ }
+ }
+ }
+ $this->notice = $errorString;
+ return $numb === 0 ? true : false;
+ }
+
+ //like checkUnique: check all the records of the table apart from the record that has to be modified
+ public function checkUniqueCompl($fieldsList,$id = null)
+ {
+ if (isset($id))
+ {
+ $where = $this->_idFieldsArray[0].'!='.(int)($id);
+ return $this->checkUnique($fieldsList,$where);
+ } else {
+ $this->notice = $this->_resultString->getString('no-id');
+ return false;
+ }
+ }
+
+ //method to apply the database conditions listed in the $this->databaseConditions associative array
+ //$queryType: indicates what set of validate conditions has to be considered (it's the key of the associative array)
+ public function applyDatabaseConditions($queryType,$id = null)
+ {
+ if (array_key_exists($queryType,$this->databaseConditions))
+ {
+ if (!is_array($this->databaseConditions[$queryType]))
+ {
+ throw new Exception('error in method <b>'.__METHOD__.'</b> : <b>databaseConditions['.$queryType.']</b> has to be an associative array');
+ }
+
+ foreach ($this->databaseConditions[$queryType] as $key => $values)
+ {
+
+ //personalized error string
+ $altErrorString = null;
+
+ //delete all the '+' chars
+ $key = $this->dropStartChar($key,'+');
+
+ if (strcmp($values,'all') === 0 or strstr($values,'all|'))
+ {
+ if (strstr($values,'all|'))
+ {
+ $values = str_replace('all|',$this->fields.'|',$values);
+ }
+ else
+ {
+ $values = $this->fields;
+ }
+ }
+
+ if (strstr($values,'|'))
+ {
+ $temp = explode('|',$values);
+ $altErrorString = "<div class='".Params::$errorStringClassName."'>".$temp[1]."</div>\n";
+ $values = $temp[0];
+ }
+
+ $allowedMethod = array('checkUnique','checkUniqueCompl');
+ if (!in_array($key,$allowedMethod))
+ {
+ throw new Exception('error in method '.__METHOD__.' : method "'.$key. '" not allowed in the property named databaseConditions');
+ }
+ if (!call_user_func_array(array($this,$key),array($values,$id)))
+ {
+ if (isset($altErrorString)) $this->notice = $altErrorString;
+ $this->result = false;
+ $this->queryResult = false;
+ return false;
+ }
+ }
+ return true;
+ } else {
+ return true;
+ }
+ }
+
+
+ //method to apply the validate conditions listed in the $this->strongConditions associative array
+ //$queryType: indicates what set of validate conditions has to be considered (it's the key of the associative array)
+ //$strength: 'strong' or 'soft'
+ public function applyValidateConditions($queryType,$strength = 'strong')
+ {
+ if ($strength === 'strong')
+ {
+ $validateObj = $this->_arrayStrongCheck;
+ $conditions = $this->strongConditions;
+ $errString = 'strongConditions';
+ }
+ else
+ {
+ $validateObj = $this->_arraySoftCheck;
+ $conditions = $this->softConditions;
+ $errString = 'softConditions';
+
+ if (Params::$nullQueryValue !== false)
+ {
+ $conditions['insert']['+++++checkIsNotStrings|'.Params::$nullQueryValue] = 'all';
+ $conditions['update']['+++++checkIsNotStrings|'.Params::$nullQueryValue] = 'all';
+ }
+ }
+
+ if (array_key_exists($queryType,$conditions))
+ {
+ if (!is_array($conditions[$queryType]))
+ {
+ throw new Exception('error in method <b>'.__METHOD__.'</b> : <b>'.$errString.'['.$queryType.']</b> has to be an associative array');
+ }
+
+ foreach ($conditions[$queryType] as $key => $values)
+ {
+
+ //personalized error string
+ $altErrorString = null;
+
+ //delete all the '+' chars
+ $key = $this->dropStartChar($key,'+');
+
+ if (strcmp($values,'all') === 0 or strstr($values,'all|'))
+ {
+ if (strstr($values,'all|'))
+ {
+ $values = str_replace('all|',$this->fields.'|',$values);
+ }
+ else
+ {
+ $values = $this->fields;
+ }
+ }
+
+ if (strstr($values,'|'))
+ {
+ $temp = explode('|',$values);
+ $altErrorString = "<div class='".Params::$errorStringClassName."'>".$temp[1]."</div>\n";
+ $values = $temp[0];
+ }
+
+ $baseArgs = array($_POST,$values);
+
+ if (strstr($key,'|'))
+ {
+ $funcArray = explode('|',$key);
+ $funcName = $funcArray[0];
+ array_shift($funcArray);
+ $funcArgs = array_merge($baseArgs,$funcArray);
+ }
+ else
+ {
+ $funcName = $key;
+ $funcArgs = $baseArgs;
+ }
+
+ if (!method_exists($validateObj,$funcName) or $funcName === 'checkGeneric')
+ {
+ throw new Exception('error in method '.__METHOD__.' :method "'.$funcName. '" not allowed in '.$errString);
+ }
+ if (!call_user_func_array(array($validateObj,$funcName),$funcArgs))
+ {
+ $this->notice .= (isset($altErrorString)) ? $altErrorString : $validateObj->errorString;
+ $this->result = false;
+ $this->queryResult = false;
+ return false;
+ }
+ }
+ return true;
+ } else {
+ return true;
+ }
+ }
+
+
+ //apply, in sequence, the strong,soft and database conditions
+ //$methodName: insert,update
+ //$id: the id of the record. It is necessary for database conditions
+ public function checkConditions($methodName,$id = null)
+ {
+ if ($this->applyValidateConditions($methodName,'strong'))
+ {
+ if ($this->applyValidateConditions($methodName,'soft'))
+ {
+ if ($this->applyDatabaseConditions($methodName,$id))
+ {
+ return true;
+ }
+ }
+ }
+ return false;
+ }
+
+ //method that calls the function indicated in $this->submitNames. Ex: if $_POST['delAction'] is found, then the "del" method is called.
+ public function updateTable($methodsList = '',$id = null) {
+
+ $allowedMethodsArray = explode(',',$methodsList);
+ $resultArray = array();
+ $this->identifierValue = null;
+ if (isset($id))
+ {
+ $this->identifierValue = (int)$id;
+ }
+ else if (isset($_POST[$this->identifierName]))
+ {
+ $this->identifierValue = (int)$_POST[$this->identifierName];
+ }
+ foreach ($this->submitNames as $methodName => $submitName)
+ {
+ if (array_key_exists($submitName,$_POST))
+ {
+ $this->submitName = $submitName;
+ if (method_exists($this,$methodName))
+ {
+ //if the method is allowed
+ if (in_array($methodName,$allowedMethodsArray))
+ {
+ if ($this->checkConditions($methodName,$this->identifierValue))
+ {
+ $this->notice = null;
+ call_user_func_array(array($this,$methodName),array($this->identifierValue));
+ }
+ }
+ }
+ else
+ {
+ throw new Exception('method <b>'.$methodName.'</b> not defined in class <b>'.__CLASS__.'</b>; error in method <b>'.__METHOD__.'</b>');
+ }
+ return; //only one cycle!
+ }
+ }
+ }
+
+ //method to build the array of popup objects
+ public function popupBuild()
+ {
+ foreach ($this->_popupItemNames as $field => $itemName)
+ {
+// if (array_key_exists($field,$this->_where))
+// {
+ $fieldClean = str_replace('n!',null,$field);
+ $itemNameClean = str_replace('n!',null,$itemName);
+ $fieldClean = $this->dropStartChar($fieldClean,'-');
+ $itemNameClean = $this->dropStartChar($itemNameClean,'-');
+
+ //fields that have to be extracted
+ $queryFields = ($fieldClean === $itemNameClean) ? $fieldClean : $fieldClean.','.$itemNameClean;
+
+ $table = $this->getTableName($field);
+ $this->popupArray[$field] = new Popup();
+
+ $popupWhereClause = array_key_exists($field,$this->_popupWhere) ? $this->_popupWhere[$field] : null;
+
+ $result = $this->db->select($table,$queryFields,$popupWhereClause,$fieldClean);
+
+ if ($result and $result !== false)
+ {
+ //get the label of the popup menu
+ $label = array_key_exists($field,$this->_popupLabels) ? $this->_popupLabels[$field] : $table.' : '.$itemNameClean;
+ $this->popupArray[$field]->name = $label;
+
+ //get the table name
+ $fieldTable = isset($result[0][$table][$fieldClean]) ? $table : Params::$aggregateKey;
+ $itemNameTable = isset($result[0][$table][$itemNameClean]) ? $table : Params::$aggregateKey;
+
+ foreach ($result as $row)
+ {
+ $this->popupArray[$field]->itemsValue[] = $row[$fieldTable][$fieldClean];
+
+ if (array_key_exists($field,$this->_popupFunctions))
+ {
+ if (!function_exists($this->_popupFunctions[$field]))
+ {
+ throw new Exception('Error in <b>'.__METHOD__.'</b>: function <b>'.$this->_popupFunctions[$field]. '</b> does not exist');
+ }
+
+ $tempName = call_user_func($this->_popupFunctions[$field],$row[$itemNameTable][$itemNameClean]);
+ }
+ else
+ {
+ $tempName = $row[$itemNameTable][$itemNameClean];
+ }
+
+ $this->popupArray[$field]->itemsName[] = $tempName;
+ }
+ }
+// }
+ }
+ }
+
+
+ //get the element before and after the current one
+ //$key: the key of the self::$where array that indicates the field to be used in order to find out the records before and after
+ //$fields: the fields that have to be extracted
+ public function getNeighbours($key,$fields = '')
+ {
+ //backup of the values
+ $tempWhere = $this->where;
+ $tempLimit = $this->limit;
+ $tempOrderBy = $this->orderBy;
+ $this->limit = 1;
+ //before
+ $this->where[$key] = '<'.$tempWhere[$key];
+ $this->orderBy = $this->getTableName($key).'.'.$key.' DESC';
+ $dataAfter = $this->getFields($fields);
+ //after
+ $this->where[$key] = '>'.$tempWhere[$key];
+ $this->orderBy = $this->getTableName($key).'.'.$key;
+ $dataBefore = $this->getFields($fields);
+ //restore the previous values
+ $this->where = $tempWhere;
+ $this->limit = $tempLimit;
+ $this->orderBy = $tempOrderBy;
+ $result[0] = isset($dataBefore[0]) ? $dataBefore[0] : null;
+ $result[1] = isset($dataAfter[0]) ? $dataAfter[0] : null;
+ return $result;
+ }
+
+ //set the $select property and return the current object
+ public function select($fields = null)
+ {
+ $this->select = $fields;
+ return $this;
+ }
+
+ //set the $from property and return the current object
+ public function from($tables = null)
+ {
+ $this->from = isset($tables) ? $tables : $this->_tables;
+ return $this;
+ }
+
+ //set the on property and return the current object
+ public function on($joinClause = '-')
+ {
+ $this->on[] = $joinClause;
+ $this->using[] = null;
+ return $this;
+ }
+
+ //set the $using property and return the current object
+ public function using($using = null)
+ {
+ $this->using[] = $using;
+ $this->on[] = null;
+ return $this;
+ }
+
+ //set the $join property and return the current object
+ public function left($string = null)
+ {
+ $this->join[] = "l:$string";
+ return $this;
+ }
+
+ //set the $join property and return the current object
+ public function right($string = null)
+ {
+ $this->join[] = "r:$string";
+ return $this;
+ }
+
+ //set the $join property and return the current object
+ public function inner($string = null)
+ {
+ $this->join[] = "i:$string";
+ return $this;
+ }
+
+ //set the $where property and return the current object
+ public function where($where = array())
+ {
+ $this->where = $where;
+ return $this;
+ }
+
+ //append the $where array to the ::where property and return the current object
+ public function aWhere($where = array())
+ {
+ $this->appendWhereQueryClause($where);
+ return $this;
+ }
+
+ //set the $groupBy property and return the current object
+ public function groupBy($groupBy = null)
+ {
+ $this->groupBy = $groupBy;
+ return $this;
+ }
+
+ //set the $orderBy property and return the current object
+ public function orderBy($orderBy = null)
+ {
+ $this->orderBy = $orderBy;
+ return $this;
+ }
+
+ //set the $limit property and return the current object
+ public function limit($limit = null)
+ {
+ $this->limit = $limit;
+ return $this;
+ }
+
+ //set the $listArray property
+ public function toList($key, $value = null)
+ {
+ $this->listArray = array($key,$value);
+ $this->toList = true;
+ return $this;
+ }
+
+ //reset all the clauses of the select query
+ public function clear()
+ {
+ $this->select = null;
+ $this->where = array();
+ $this->groupBy = null;
+ $this->orderBy = null;
+ $this->limit = null;
+ $this->from = null;
+ $this->on = array();
+ $this->using = array();
+ $this->join = array();
+ $this->toList = false;
+ return $this;
+ }
+
+ //initialize and populate the ::form property (reference to a Form_Form object)
+ public function setForm($defAction = null, $defSubmit = array(), $defMethod = 'POST', $defEnctype = null)
+ {
+ if (isset($this->formStruct))
+ {
+ $action = array_key_exists('action',$this->formStruct) ? $this->formStruct['action'] : $defAction;
+ $submit = array_key_exists('submit',$this->formStruct) ? $this->formStruct['submit'] : $defSubmit;
+ $entries = array_key_exists('entries',$this->formStruct) ? $this->formStruct['entries'] : null;
+ $method = array_key_exists('post',$this->formStruct) ? $this->formStruct['post'] : $defMethod;
+ $enctype = array_key_exists('enctype',$this->formStruct) ? $this->formStruct['enctype'] : $defEnctype;
+
+ $this->form = new Form_Form($action,$submit,$method,$enctype);
+
+ if (isset($entries))
+ {
+ $this->form->setEntries($entries);
+ }
+
+ $copy = $this->form->entry;
+
+ foreach ($copy as $name => $entry)
+ {
+ if (strcmp($entry->type,'Select') === 0 and isset($entry->options))
+ {
+ if (!is_array($entry->options))
+ {
+ if (strstr($entry->options,'foreign::'))
+ {
+ $elements = explode('::',$entry->options);
+
+ for ($i = 0; $i < count($elements); $i++)
+ {
+ if (strcmp($elements[$i],'--') === 0) $elements[$i] = null;
+ }
+ //send the query
+ array_shift($elements);
+ $resultSet = call_user_func_array(array($this->db,'select'),$elements);
+
+ $single = true;
+
+ if (strstr($elements[1],','))
+ {
+ $args = explode(',',$elements[1]);
+ //add the table name
+ $args[0] = $elements[0].'.'.$args[0];
+ $args[1] = $elements[0].'.'.$args[1];
+ //associative array
+ $single = false;
+ }
+ else
+ {
+ $args[0] = $elements[0].'.'.$elements[1];
+ $args[1] = null;
+ }
+
+ $list = $this->getList($resultSet,$args[0],$args[1]);
+
+ $this->form->entry[$name]->options = ($single) ? implode(',',array_values($list)) : $list;
+ }
+ }
+ }
+ }
+
+ }
+ else
+ {
+ $this->form = new Form_Form($defAction,$defSubmit,$defMethod,$defEnctype);
+ }
+ }
+
+ //get a list from a result set
+ //$resultSet: the result set coming from a select query
+ public function getList($resultSet, $key, $value = null)
+ {
+ $list = array();
+
+ if (strstr($key,'.'))
+ {
+ $arr = explode('.',$key);
+ $keyTable = $arr[0];
+ $keyField = $arr[1];
+ }
+ else
+ {
+ $keyTable = $this->_tablesArray[0];
+ $keyField = $key;
+ }
+
+ if (!isset($value))
+ {
+ foreach ($resultSet as $row)
+ {
+ $list[] = $row[$keyTable][$keyField];
+ }
+ }
+ else
+ {
+ if (strstr($value,'.'))
+ {
+ $arr = explode('.',$value);
+ $valueTable = $arr[0];
+ $valueField = $arr[1];
+ }
+ else
+ {
+ $valueTable = $this->_tablesArray[0];
+ $valueField = $value;
+ }
+
+ foreach ($resultSet as $row)
+ {
+ $list[$row[$keyTable][$keyField]] = $row[$valueTable][$valueField];
+ }
+
+ }
+ return $list;
+ }
+
+ // Retrieves the ID generated for an AUTO_INCREMENT column by the previous query (usually INSERT).
+ public function lastId()
+ {
+ return $this->db->lastId();
+ }
+
+ //send a free query
+ public function query($query)
+ {
+ return $this->db->query($query);
+ }
+
+ //the text of the error message from previous MySQL operation
+ public function getError()
+ {
+ return $this->db->getError();
+ }
+
+ //the numerical value of the error message from previous MySQL operation
+ public function getErrno()
+ {
+ return $this->db->getErrno();
+ }
+
+ //define the abstract method to get the value of the record $id of the main table
+ abstract public function selectId($id);
+
+ //define the abstract method to get the fields from the tables
+ abstract public function getFields();
+
+} \ No newline at end of file
diff --git a/h-source/Library/Model/Base.php b/h-source/Library/Model/Base.php
index 67bd91c..4162a56 100755
--- a/h-source/Library/Model/Base.php
+++ b/h-source/Library/Model/Base.php
@@ -2,7 +2,7 @@
// EasyGiant is a PHP framework for creating and managing dynamic content
//
-// Copyright (C) 2009 - 2014 Antonio Gallo (info@laboratoriolibero.com)
+// Copyright (C) 2009 - 2011 Antonio Gallo
// See COPYRIGHT.txt and LICENSE.txt.
//
// This file is part of EasyGiant
@@ -25,12 +25,10 @@ if (!defined('EG')) die('Direct access not allowed!');
abstract class Model_Base
{
- public $foreignKeys = array(); //list of foreign keys
-
public $fields = ''; //the fields that have to be manipulated by the update and insert query
public $values = array(); //the values that corresponding to the $this->fields fields
public $form = null; //reference to a Form_Form object
- public $formStruct = array("entries" => array()); //the form structure
+ public $formStruct = null; //the form structure
public $submitName = null; //the current submitName (from the form)
public $identifierName = 'identifier';
@@ -39,18 +37,15 @@ abstract class Model_Base
public $result = true; //the result of validate conditions, database conditions and query. It can be 'true' or 'false'
public $queryResult = false; //the result of the query
- //conditions that the $_POST array has to satisfy (strong)
+ //conditions that have to be satisfied before applying the query
+ //Ex: 'update'=>'checkEmpty:titolo,autore','submitName'=>'conditions'
public $strongConditions = array();
- //conditions that the $_POST array has to satisfy (soft)
+ //conditions that have to be satisfied before applying the query
+ //Ex: 'update'=>'checkEmpty:titolo,autore','submitName'=>'conditions'
+ //do not return error if a value is equal to '' or null
public $softConditions = array();
- //conditions that $this->values has to satisfy (strong)
- public $valuesConditions = array();
-
- //array where the conditions are temporary saved when the saveConditions is called
- public $backupConditions = array();
-
//conditions that have to be satisfied before applying the query
//check that the new values inserted satisfy some conditions
//Ex: 'update'=>'checkUniqueCompl:titolo,autore;checkUnique:titolo','insert'=>'checkUnique:titolo'
@@ -62,17 +57,13 @@ abstract class Model_Base
public $supplUpdateValues = array(); //associative array defining supplementary values to be inserted on each update query. It has to have the following form: array(field1 => value1,field2 => value2, ...)
- public $backupSelect = array(); //where the status of the where clause is stored when the save() method is called
public $select = null; //fields that have to be selected in select queries
- public $sWhere = null; //string: free where clause
public $where = array(); //associative array containing all the where clauses ($field => $value)
//group by, order by and limit clauses
public $groupBy = null;
public $orderBy = null;
public $limit = null;
- public $convert = false; //It can be tru or false. If true the extracted values are converted from MySQL format to $_lang format
-
public $from = null; //from clause of the select queries
public $on = array(); //on array
public $using = array(); //using array
@@ -108,14 +99,9 @@ abstract class Model_Base
protected $_popupWhere = array(); //where clause for the pupup menu
- protected $_popupOrderBy = array(); //order by clause for the pupup menu
-
protected $_resultString; //reference to the class containing all the result strings of the db queries
protected $_dbCondString; //reference to the class containing all the result strings of the database conditions
- protected $_conversionToDbObject = null; //reference to the class to convert the values from current lang formats to MySQL formats
- protected $_conversionFromDbObject = null; //reference to the class to convert the values from MySQL formats to current lang formats
-
protected $_backupFields = ''; //field saved after the delFields method has been applied
protected $_backupValues = array(); //values saved after the delFields method has been applied
protected $_allowedDbMethods = array('update','insert','del','moveup','movedown'); //methods that can be called by the updateTable method
@@ -133,7 +119,6 @@ abstract class Model_Base
protected $_arrayStrongCheck; //Array_Validate_Strong object
protected $_arraySoftCheck; //Array_Validate_Soft object
- protected $_arrayValuesCheck; //Array_Validate_Values object
public $db; //reference to the database layer class
protected $_lang = null; //language of notices
@@ -145,16 +130,15 @@ abstract class Model_Base
$this->_where[$this->_idFieldsArray[0]] = $this->_tablesArray[0];
$this->arrayExt = new ArrayExt();
- //set the language of notices
- $this->_lang = Params::$language;
-
//initialize the validate objects
$this->_arrayStrongCheck = new Array_Validate_Strong($this->_lang);
$this->_arraySoftCheck = new Array_Validate_Soft($this->_lang);
- $this->_arrayValuesCheck = new Array_Validate_Values($this->_lang);
$this->identifierName = $this->_idFieldsArray[0];
+ //set the language of notices
+ $this->_lang = Params::$language;
+
//create the $_resultString object (result strings of the db queries)
$modelStringClass = 'Lang_'.$this->_lang.'_ModelStrings';
if (!class_exists($modelStringClass))
@@ -171,24 +155,6 @@ abstract class Model_Base
}
$this->_dbCondString = new $dbCondStringClass();
- //create the references of the classes to convert to e from MySQL formats
- if (DATABASE_TYPE === "Mysqli" or DATABASE_TYPE === "Mysql")
- {
- $_conversionToDbObject = 'Lang_'.$this->_lang.'_Formats_To_Mysql';
- if (!class_exists($_conversionToDbObject))
- {
- $_conversionToDbObject = 'Lang_En_Formats_To_Mysql';
- }
- $this->_conversionToDbObject = new $_conversionToDbObject();
-
- $_conversionFromDbObject = 'Lang_'.$this->_lang.'_Formats_From_Mysql';
- if (!class_exists($_conversionFromDbObject))
- {
- $_conversionFromDbObject = 'Lang_En_Formats_From_Mysql';
- }
- $this->_conversionFromDbObject = new $_conversionFromDbObject();
- }
-
//instantiate the database class
$this->db = Factory_Db::getInstance(DATABASE_TYPE);
@@ -205,22 +171,12 @@ abstract class Model_Base
}
//sanitize all the $values property
- public function sanitize($function = "sanitizeDb")
+ public function sanitize()
{
- if (!function_exists($function)) {
- throw new Exception('Error in <b>'.__METHOD__.'</b>: function <b>'.$function.'</b> does not exists.');
- }
-
$keys = implode(',',array_keys($this->values));
- $this->values = $this->arrayExt->subset($this->values,$keys,$function);
+ $this->values = $this->arrayExt->subset($this->values,$keys,'sanitizeDb');
}
- //return the name of the primary key
- public function getPrimaryKey()
- {
- return $this->_idFields;
- }
-
//change a resulting string from a db query
public function setString($key,$value)
{
@@ -321,11 +277,11 @@ abstract class Model_Base
{
foreach (params::$whereClauseSymbolArray as $symbol)
{
- if (stristr($value,$symbol))
+ if (strstr($value,$symbol))
{
//check if write or not the table name
$tableName = strstr($field,'n!') ? null : $this->getTableName($field).'.';
- $whereClauseArray[] = strstr($field,'n!n!') ? $value : $tableName.$fieldClean.' '.$value;
+ $whereClauseArray[] = $tableName.$fieldClean.' '.$value;
$flag = 1; //not equal where clause
break;
}
@@ -335,7 +291,7 @@ abstract class Model_Base
$value = '"'.$value.'"';
//check if write or not the table name
$tableName = strstr($field,'n!') ? null : $this->getTableName($field).'.';
- $whereClauseArray[] = strstr($field,'n!n!') ? $value : $tableName.$fieldClean.'='.$value;
+ $whereClauseArray[] = $tableName.$fieldClean.'='.$value;
}
}
}
@@ -368,129 +324,7 @@ abstract class Model_Base
}
- //converts values from MySQl to $_lang format when filling the form with values coming from the DB
- public function convertFromMysql($values)
- {
- if (Params::$automaticConversionFromDbFormat)
- {
- if (isset($this->_conversionFromDbObject))
- {
- //get all types as associative array
- $types = $this->db->getTypes($this->_tables, "*", false, true);
-
- if ($types)
- {
- $values = $this->convertFromMysqlT($types, $values, $this->db->getEnumTypes());
- }
- }
- }
-
- return $values;
- }
-
- //convert an array associaive from MySQL format to $_lang format
- //$values: array associative to convert
- //$types: types of the elements of the associative array
- //$excludeTypes: array of type whose conversion has to be avoided
- public function convertFromMysqlT($types, $values, $excludeTypes = array())
- {
- foreach ($values as $field => $value)
- {
- if (array_key_exists($field, $types))
- {
- if (!in_array(strtolower($types[$field]),$excludeTypes))
- {
- if (method_exists($this->_conversionFromDbObject,strtolower($types[$field])))
- {
- $values[$field] = call_user_func(array($this->_conversionFromDbObject, strtolower($types[$field])), $values[$field]);
- }
- }
- }
- }
- return $values;
- }
-
- //set the default values taking it from DB or from type definition
- public function setDefaultFormValues($fields)
- {
- $returnDefaultValues = array();
-
- if (Params::$automaticallySetFormDefaultValues)
- {
- if (isset($this->_conversionFromDbObject))
- {
- //get all types as associative array
- $types = $this->db->getTypes($this->_tables, "*", true, true);
-
- //get all default values as associative array
- $defaultValues = $this->db->getDefaultValues($this->_tables, "*", false, true);
-
- $fieldsArray = explode(",",$fields);
-
- foreach ($fieldsArray as $field)
- {
- if (array_key_exists($field,$defaultValues))
- {
- if (preg_match('/^('.implode("|",$this->db->getCharTypes()).')/i',$types[$field],$matches) or preg_match('/^('.implode("|",$this->db->getTextTypes()).')/i',$types[$field],$matches))
- {
- if (strcmp($defaultValues[$field],"") !== 0)
- {
- $returnDefaultValues[$field] = $defaultValues[$field];
- }
- }
- else if (preg_match('/^('.implode("|",$this->db->getIntegerTypes()).')/i',$types[$field],$matches) or preg_match('/^('.implode("|",$this->db->getFloatTypes()).')$/i',$types[$field],$matches) or preg_match('/^('.implode("|",$this->db->getDecimalTypes()).')/i',$types[$field],$matches))
- {
- if (strcmp($defaultValues[$field],"") !== 0)
- {
- $returnDefaultValues[$field] = method_exists($this->_conversionFromDbObject,strtolower($matches[1])) ? call_user_func(array($this->_conversionFromDbObject, strtolower($matches[1])), $defaultValues[$field]) : $defaultValues[$field];
- }
- else
- {
- $returnDefaultValues[$field] = 0;
- }
- }
- else if (preg_match('/^('.implode("|",$this->db->getDateTypes()).')$/i',$types[$field],$matches))
- {
- $defDate = Params::$useCurrentDateAsDefaultDate ? date("Y-m-d") : "";
- if (strcmp($defaultValues[$field],"") !== 0)
- {
- $defDate = $defaultValues[$field];
- }
-
- if (method_exists($this->_conversionFromDbObject,strtolower($types[$field])))
- {
- $returnDefaultValues[$field] = call_user_func(array($this->_conversionFromDbObject, strtolower($types[$field])), $defDate);
- }
- else
- {
- $returnDefaultValues[$field] = $defDate;
- }
- }
- else if (preg_match('/^('.implode("|",$this->db->getEnumTypes()).')\((.*?)\)$/i',$types[$field],$matches))
- {
- if (strcmp($defaultValues[$field],"") !== 0)
- {
- $returnDefaultValues[$field] = $defaultValues[$field];
- }
- else
- {
- $temp = array();
- $strings = explode(",",$matches[2]);
- for ($i=0;$i<count($strings);$i++)
- {
- $returnDefaultValues[$field] = trim($strings[$i],"'\"");
- break;
- }
- }
- }
- }
- }
- }
- }
-
- return $returnDefaultValues;
- }
-
+
//return the values, taken from the $_POST array, to be inserted inside the forms
//$queryType: insert or update
//$func: sanitize function to apply upon each value
@@ -533,12 +367,15 @@ abstract class Model_Base
{
$recordArray = $this->selectId($ident);
- $recordArray = $this->convertFromMysql($recordArray);
-
$fieldsArray = explode(',',$this->fields);
-
+
$values = $this->arrayExt->subset($recordArray,$this->fields,$funcDb);
+// foreach ($fieldsArray as $field)
+// {
+// $values[$field] = array_key_exists($field,$recordArray) ? $recordArray[$field] : '';
+// }
+
$values[$idName] = $ident;
//apply the functions upon entries
@@ -569,16 +406,8 @@ abstract class Model_Base
}
else if ($queryType === 'insert')
{
- //set the default values taking it from DB or from type definition
- $tempArray = $this->setDefaultFormValues($this->fields);
- if (is_array($defaultValues))
- {
- foreach ($defaultValues as $field => $value)
- {
- $tempArray[$field] = $value;
- }
- }
+ $tempArray = is_array($defaultValues) ? $defaultValues : array();
$values = $this->arrayExt->subset($tempArray,$this->fields,$funcPost);
@@ -697,8 +526,6 @@ abstract class Model_Base
//if $whereClause is set then use $whereClause as where clause of the update query
public function update($id = null, $whereClause = null)
{
- $this->notice = null;
-
if (!is_array($this->supplUpdateValues))
{
throw new Exception('error in <b>' . __METHOD__ . '</b>: the <b>supplUpdateValues</b> property has to be an array.');
@@ -706,70 +533,50 @@ abstract class Model_Base
$el = $this->setSupplValues('update');
$this->queryResult = false;
- if (count($this->values) > 0)
+ if (isset($whereClause))
+ {
+ $result = $this->db->update($this->_tablesArray[0],$el[0],$el[1],$whereClause);
+ $this->setNotice($result);
+ return $result;
+ }
+ else
{
- if (isset($whereClause))
+ if (isset($id))
{
- $result = $this->db->update($this->_tablesArray[0],$el[0],$el[1],$whereClause);
+ $where = $this->_idFieldsArray[0].'='.(int)($id);
+ $result = $this->db->update($this->_tablesArray[0],$el[0],$el[1],$where);
$this->setNotice($result);
return $result;
}
else
{
- if (isset($id))
- {
- $where = $this->_idFieldsArray[0].'='.(int)($id);
- $result = $this->db->update($this->_tablesArray[0],$el[0],$el[1],$where);
- $this->setNotice($result);
- return $result;
- }
- else
- {
- $this->notice .= $this->_resultString->getString('no-id');
- $this->result = false;
- $this->identifierValue = null;
- return false;
- }
+ $this->notice = $this->_resultString->getString('no-id');
+ $this->result = false;
+ $this->identifierValue = null;
+ return false;
}
}
- else
- {
- $this->notice .= $this->_resultString->getString('no-fields');
- $this->result = true;
- $this->queryResult = true;
- return false;
- }
}
//method to call the insert query (overriding of the base_db del method)
public function insert() {
- $this->notice = null;
+
$this->queryResult = false;
if (!is_array($this->supplInsertValues)) {
throw new Exception('error in <b>' . __METHOD__ . '</b>: the <b>supplInsertValues</b> property has to be an array.');
}
- if (count($this->values) > 0)
+ if (isset($this->_idOrder))
{
- if (isset($this->_idOrder))
- {
- $maxValue = $this->db->getMax($this->_tablesArray[0],$this->_idOrder);
- $this->supplInsertValues[$this->_idOrder] = (int)$maxValue + 1;
- }
-
- $el = $this->setSupplValues('insert');
-
- $result = $this->db->insert($this->_tablesArray[0],$el[0],$el[1]);
- $this->setNotice($result);
- return $result;
- }
- else
- {
- $this->notice .= $this->_resultString->getString('no-fields');
- $this->result = true;
- $this->queryResult = true;
- return false;
+ $maxValue = $this->db->getMax($this->_tablesArray[0],$this->_idOrder);
+ $this->supplInsertValues[$this->_idOrder] = (int)$maxValue + 1;
}
+
+ $el = $this->setSupplValues('insert');
+
+ $result = $this->db->insert($this->_tablesArray[0],$el[0],$el[1]);
+ $this->setNotice($result);
+ return $result;
}
//method to call the delete query (overriding of the base_db del method)
@@ -791,7 +598,7 @@ abstract class Model_Base
$this->setNotice($result);
return $result;
} else {
- $this->notice .= $this->_resultString->getString('no-id');
+ $this->notice = $this->_resultString->getString('no-id');
$this->result = false;
$this->identifierValue = null;
return false;
@@ -818,8 +625,6 @@ abstract class Model_Base
//where clause
public function move($id,$par = 'up')
{
- $this->notice = null;
-
$this->queryResult = false;
if (isset($id))
{
@@ -855,7 +660,7 @@ abstract class Model_Base
}
else
{
- $this->notice .= $this->_resultString->getString('no-id');
+ $this->notice = $this->_resultString->getString('no-id');
$this->result = false;
$this->identifierValue = null;
return false;
@@ -865,11 +670,11 @@ abstract class Model_Base
public function setNotice($result) {
if ($result) {
- $this->notice .= $this->_resultString->getString('executed');
+ $this->notice = $this->_resultString->getString('executed');
$this->result = true;
$this->queryResult = true;
} else {
- $this->notice .= $this->_resultString->getString('error');
+ $this->notice = $this->_resultString->getString('error');
$this->result = false;
$this->queryResult = false;
}
@@ -932,6 +737,18 @@ abstract class Model_Base
//delete all the '+' chars
$key = $this->dropStartChar($key,'+');
+ if (strcmp($values,'all') === 0 or strstr($values,'all|'))
+ {
+ if (strstr($values,'all|'))
+ {
+ $values = str_replace('all|',$this->fields.'|',$values);
+ }
+ else
+ {
+ $values = $this->fields;
+ }
+ }
+
if (strstr($values,'|'))
{
$temp = explode('|',$values);
@@ -958,140 +775,29 @@ abstract class Model_Base
}
}
- //add a condition
- //$condArray: it can be $this->strongConditions, $this->softConditions or $this->databaseConditions
- //$queryType: insert, update
- //$condition: the condition
- //$field: comma separated list of fields
- private function addCondition(&$condArray,$queryType,$condition,$field)
- {
- if (isset($condArray[$queryType]) and array_key_exists($condition,$condArray[$queryType]))
- {
- $condition = "+".$condition;
- $this->addCondition($condArray,$queryType,$condition,$field);
- }
- else
- {
- $condArray[$queryType][$condition] = $field;
- }
- }
-
- //choose if to apply insert, update or both conditions
- private function addChooseCondition(&$condArray,$queryType,$condition,$field)
- {
- if ($queryType === "both")
- {
- $this->addCondition($condArray,"insert",$condition,$field);
- $this->addCondition($condArray,"update",$condition,$field);
- }
- else
- {
- $this->addCondition($condArray,$queryType,$condition,$field);
- }
- }
-
- //add a condition to the strongCondition array
- public function addDatabaseCondition($queryType,$condition,$field)
- {
- if ($queryType === "both")
- {
- $this->addChooseCondition($this->databaseConditions,"insert",$condition,$field);
- $this->addChooseCondition($this->databaseConditions,"update",$condition."Compl",$field);
- }
- else
- {
- $this->addChooseCondition($this->databaseConditions,$queryType,$condition,$field);
- }
- }
-
- //add a condition to the strongCondition array
- public function addStrongCondition($queryType,$condition,$field)
- {
- $this->addChooseCondition($this->strongConditions,$queryType,$condition,$field);
- }
-
- //add a condition to the softCondition array
- public function addSoftCondition($queryType,$condition,$field)
- {
- $this->addChooseCondition($this->softConditions,$queryType,$condition,$field);
- }
-
- //add a condition to the valuesCondition array
- public function addValuesCondition($queryType,$condition,$field)
- {
- $this->addChooseCondition($this->valuesConditions,$queryType,$condition,$field);
- }
-
- //return the correct conditions array
- //$strength: strong,soft,values
- public function &getConditions($strength)
- {
- if ($strength === 'strong')
- {
- return $this->strongConditions;
- }
- else if ($strength === 'values')
- {
- return $this->valuesConditions;
- }
- else if ($strength === 'database')
- {
- return $this->databaseConditions;
- }
-
- return $this->softConditions;
- }
-
- //save the conditions
- //$strength: strong,soft,values
- public function saveConditions($strength)
- {
- $this->backupConditions[$strength] = $this->getConditions($strength);
- }
-
- //restore the conditions taking them from $this->backupConditions
- public function restoreConditions($strength)
- {
- $c = &$this->getConditions($strength);
-
- if (isset($this->backupConditions[$strength]))
- {
- $c = $this->backupConditions[$strength];
- }
- }
-
- //clear the conditions
- //$strength: strong,soft,values
- public function clearConditions($strength)
- {
- $c = &$this->getConditions($strength);
- $c = array();
- }
//method to apply the validate conditions listed in the $this->strongConditions associative array
//$queryType: indicates what set of validate conditions has to be considered (it's the key of the associative array)
- //$strength: strong,soft,values
+ //$strength: 'strong' or 'soft'
public function applyValidateConditions($queryType,$strength = 'strong')
{
- $arrayToCheck = $_POST;
if ($strength === 'strong')
{
$validateObj = $this->_arrayStrongCheck;
$conditions = $this->strongConditions;
$errString = 'strongConditions';
}
- else if ($strength === 'values')
- {
- $validateObj = $this->_arrayValuesCheck;
- $conditions = $this->valuesConditions;
- $errString = 'valuesConditions';
- $arrayToCheck = $this->values;
- }
else
{
$validateObj = $this->_arraySoftCheck;
$conditions = $this->softConditions;
$errString = 'softConditions';
+
+ if (Params::$nullQueryValue !== false)
+ {
+ $conditions['insert']['+++++checkIsNotStrings|'.Params::$nullQueryValue] = 'all';
+ $conditions['update']['+++++checkIsNotStrings|'.Params::$nullQueryValue] = 'all';
+ }
}
if (array_key_exists($queryType,$conditions))
@@ -1109,6 +815,18 @@ abstract class Model_Base
//delete all the '+' chars
$key = $this->dropStartChar($key,'+');
+
+ if (strcmp($values,'all') === 0 or strstr($values,'all|'))
+ {
+ if (strstr($values,'all|'))
+ {
+ $values = str_replace('all|',$this->fields.'|',$values);
+ }
+ else
+ {
+ $values = $this->fields;
+ }
+ }
if (strstr($values,'|'))
{
@@ -1117,7 +835,7 @@ abstract class Model_Base
$values = $temp[0];
}
- $baseArgs = array($arrayToCheck,$values);
+ $baseArgs = array($_POST,$values);
if (strstr($key,'|'))
{
@@ -1150,6 +868,7 @@ abstract class Model_Base
}
}
+
//apply, in sequence, the strong,soft and database conditions
//$methodName: insert,update
//$id: the id of the record. It is necessary for database conditions
@@ -1189,10 +908,6 @@ abstract class Model_Base
$this->submitName = $submitName;
if (method_exists($this,$methodName))
{
- if (strcmp($methodName,"insert") === 0)
- {
- $this->identifierValue = null;
- }
//if the method is allowed
if (in_array($methodName,$allowedMethodsArray))
{
@@ -1232,9 +947,7 @@ abstract class Model_Base
$popupWhereClause = array_key_exists($field,$this->_popupWhere) ? $this->_popupWhere[$field] : null;
- $popupOrderBy = array_key_exists($field,$this->_popupOrderBy) ? $this->_popupOrderBy[$field] : null;
-
- $result = $this->db->select($table,$queryFields,$popupWhereClause,$fieldClean,$popupOrderBy);
+ $result = $this->db->select($table,$queryFields,$popupWhereClause,$fieldClean);
if ($result and $result !== false)
{
@@ -1306,13 +1019,6 @@ abstract class Model_Base
return $this;
}
- //set the $convert property and return the current object
- public function convert($convert = true)
- {
- $this->convert = $convert;
- return $this;
- }
-
//set the $from property and return the current object
public function from($tables = null)
{
@@ -1371,12 +1077,6 @@ abstract class Model_Base
return $this;
}
- public function sWhere($sWhere)
- {
- $this->sWhere = $sWhere;
- return $this;
- }
-
//set the $groupBy property and return the current object
public function groupBy($groupBy = null)
{
@@ -1411,7 +1111,6 @@ abstract class Model_Base
{
$this->select = null;
$this->where = array();
- $this->sWhere = null;
$this->groupBy = null;
$this->orderBy = null;
$this->limit = null;
@@ -1420,84 +1119,9 @@ abstract class Model_Base
$this->using = array();
$this->join = array();
$this->toList = false;
- $this->convert = false;
return $this;
}
- //save all the clauses of the select query
- public function save()
- {
- $this->backupSelect["select"] = $this->select;
- $this->backupSelect["where"] = $this->where;
- $this->backupSelect["sWhere"] = $this->sWhere;
- $this->backupSelect["groupBy"] = $this->groupBy;
- $this->backupSelect["orderBy"] = $this->orderBy;
- $this->backupSelect["limit"] = $this->limit;
- $this->backupSelect["from"] = $this->from;
- $this->backupSelect["on"] = $this->on;
- $this->backupSelect["using"] = $this->using;
- $this->backupSelect["join"] = $this->join;
- $this->backupSelect["toList"] = $this->toList;
- $this->backupSelect["convert"] = $this->convert;
- return $this;
- }
-
- //restored all the saved clauses of the select query
- public function restore()
- {
- if (count($this->backupSelect) > 0)
- {
- $this->select = $this->backupSelect["select"];
- $this->where = $this->backupSelect["where"];
- $this->sWhere = $this->backupSelect["sWhere"];
- $this->groupBy = $this->backupSelect["groupBy"];
- $this->orderBy = $this->backupSelect["orderBy"];
- $this->limit = $this->backupSelect["limit"];
- $this->from = $this->backupSelect["from"];
- $this->on = $this->backupSelect["on"];
- $this->using = $this->backupSelect["using"];
- $this->join = $this->backupSelect["join"];
- $this->toList = $this->backupSelect["toList"];
- $this->convert = $this->backupSelect["convert"];
- }
- return $this;
- }
-
- public function getSelectArrayFromEnumField($fieldName)
- {
- $types = $this->db->getTypes($this->_tables, $fieldName, true, true);
-
- if ($types)
- {
- if (preg_match('/^('.implode("|",$this->db->getEnumTypes()).')\((.*?)\)/i',$types[$fieldName],$matches))
- {
- return $this->getSelectArrayFromEnumValues($matches[1], $matches[2]);
- }
- }
- }
-
- public function getSelectArrayFromEnumValues($enumFunc, $enumValues)
- {
- $enumFunc = strtolower($enumFunc);
-
- $temp = array();
- $strings = explode(",",$enumValues);
- for ($i=0;$i<count($strings);$i++)
- {
- $val = trim($strings[$i],"'\"");
-
- if (isset($this->_conversionFromDbObject) and method_exists($this->_conversionFromDbObject, $enumFunc))
- {
- $temp[$val] = call_user_func(array($this->_conversionFromDbObject, $enumFunc), $val);
- }
- else
- {
- $temp[$val] = $val;
- }
- }
- return $temp;
- }
-
//initialize and populate the ::form property (reference to a Form_Form object)
public function setForm($defAction = null, $defSubmit = array(), $defMethod = 'POST', $defEnctype = null)
{
@@ -1511,67 +1135,6 @@ abstract class Model_Base
$this->form = new Form_Form($action,$submit,$method,$enctype);
- //get the entries from DB definition
- $types = $this->db->getTypes($this->_tables, "*", true, true);
-
- foreach ($types as $field => $type)
- {
- $entryType = "InputText";
- $classType = "varchar_input";
- $options = null;
-
- if (strcmp($field, $this->_idFieldsArray[0]) === 0)
- {
- $entryType = "Hidden";
- }
- else if (preg_match('/^('.implode("|",$this->db->getTextTypes()).')/i',$type,$matches))
- {
- $entryType = "Textarea";
- $classType = "text_input";
- }
- else if (preg_match('/^('.implode("|",$this->db->getDateTypes()).')/i',$type,$matches))
- {
- $classType = "date_input";
- }
- else if (preg_match('/^('.implode("|",$this->db->getEnumTypes()).')\((.*?)\)/i',$type,$matches))
- {
- $entryType = "Select";
- $classType = "select_input";
- $options = $this->getSelectArrayFromEnumValues($matches[1], $matches[2]);
- }
-
- if (array_key_exists($field,$entries))
- {
- if (!array_key_exists("type",$entries[$field]))
- {
- $entries[$field]["type"] = $entryType;
- }
-
- if ($entryType === "Select" and !array_key_exists("options",$entries[$field]))
- {
- $entries[$field]["options"] = $options;
- $entries[$field]["reverse"] = "yes";
- }
-
- if (!array_key_exists("className",$entries[$field]))
- {
- $entries[$field]["className"] = $classType." ".Form_Form::$defaultEntryAttributes['className'];
- }
- }
- else
- {
- $entries[$field]["type"] = $entryType;
-
- if ($entryType === "Select")
- {
- $entries[$field]["options"] = $options;
- $entries[$field]["reverse"] = "yes";
- }
-
- $entries[$field]["className"] = $classType." ".Form_Form::$defaultEntryAttributes['className'];
- }
- }
-
if (isset($entries))
{
$this->form->setEntries($entries);
diff --git a/h-source/Library/Model/Map.php b/h-source/Library/Model/Map.php
index e6d9f6b..7a093e1 100755
--- a/h-source/Library/Model/Map.php
+++ b/h-source/Library/Model/Map.php
@@ -2,7 +2,7 @@
// EasyGiant is a PHP framework for creating and managing dynamic content
//
-// Copyright (C) 2009 - 2014 Antonio Gallo (info@laboratoriolibero.com)
+// Copyright (C) 2009 - 2011 Antonio Gallo
// See COPYRIGHT.txt and LICENSE.txt.
//
// This file is part of EasyGiant
diff --git a/h-source/Library/Model/Tree.php b/h-source/Library/Model/Tree.php
index 849fd7d..f7f95ea 100755
--- a/h-source/Library/Model/Tree.php
+++ b/h-source/Library/Model/Tree.php
@@ -2,7 +2,7 @@
// EasyGiant is a PHP framework for creating and managing dynamic content
//
-// Copyright (C) 2009 - 2014 Antonio Gallo (info@laboratoriolibero.com)
+// Copyright (C) 2009 - 2011 Antonio Gallo
// See COPYRIGHT.txt and LICENSE.txt.
//
// This file is part of EasyGiant
@@ -28,54 +28,54 @@ class Model_Tree extends Model_Base {
parent::__construct();
}
-// //method to create the first part of where clause
-// //$index: the index of $this->_tablesArray
-// public function createTreeWhere($index) {
-// if (!empty($this->on))
-// {
-// return $this->on;
-// }
-// else
-// {
-// $whereArray = array();
-// for ($i = $index; $i < (count($this->_tablesArray)-1); $i++)
-// {
-// $whereArray[] = $this->_tablesArray[$i].'.'.$this->_idFieldsArray[$i+1].'='.$this->_tablesArray[$i+1].'.'.$this->_idFieldsArray[$i+1];
-// }
-// $whereString = !empty($whereArray) ? implode(' and ',$whereArray) : null;
-// return $whereString;
-// }
-// }
+ //method to create the first part of where clause
+ //$index: the index of $this->_tablesArray
+ public function createTreeWhere($index) {
+ if (!empty($this->on))
+ {
+ return $this->on;
+ }
+ else
+ {
+ $whereArray = array();
+ for ($i = $index; $i < (count($this->_tablesArray)-1); $i++)
+ {
+ $whereArray[] = $this->_tablesArray[$i].'.'.$this->_idFieldsArray[$i+1].'='.$this->_tablesArray[$i+1].'.'.$this->_idFieldsArray[$i+1];
+ }
+ $whereString = !empty($whereArray) ? implode(' and ',$whereArray) : null;
+ return $whereString;
+ }
+ }
-// //create the list of tables of the select query
-// //$index: the index of $this->_tablesArray
-// public function createTablesList($index) {
-// if (isset($this->from))
-// {
-// return $this->from;
-// }
-// else
-// {
-// $tablesString = null;
-// for ($i = $index; $i < (count($this->_tablesArray)-1); $i++)
-// {
-// $tablesString .= $this->_tablesArray[$i] . ',';
-// }
-// $tablesString .= $this->_tablesArray[count($this->_tablesArray)-1];
-// return $tablesString;
-// }
-// }
-//
-// //method to create the list of fields of the select query
-// public function createFieldsList($index) {
-// $fieldsString = null;
-// for ($i = $index; $i < (count($this->_tablesArray)-1); $i++)
-// {
-// $fieldsString .= $this->_tablesArray[$i] . '.*,';
-// }
-// $fieldsString .= $this->_tablesArray[count($this->_tablesArray)-1].'.*';
-// return $fieldsString;
-// }
+ //create the list of tables of the select query
+ //$index: the index of $this->_tablesArray
+ public function createTablesList($index) {
+ if (isset($this->from))
+ {
+ return $this->from;
+ }
+ else
+ {
+ $tablesString = null;
+ for ($i = $index; $i < (count($this->_tablesArray)-1); $i++)
+ {
+ $tablesString .= $this->_tablesArray[$i] . ',';
+ }
+ $tablesString .= $this->_tablesArray[count($this->_tablesArray)-1];
+ return $tablesString;
+ }
+ }
+
+ //method to create the list of fields of the select query
+ public function createFieldsList($index) {
+ $fieldsString = null;
+ for ($i = $index; $i < (count($this->_tablesArray)-1); $i++)
+ {
+ $fieldsString .= $this->_tablesArray[$i] . '.*,';
+ }
+ $fieldsString .= $this->_tablesArray[count($this->_tablesArray)-1].'.*';
+ return $fieldsString;
+ }
//method to create the where clause and the list of tables and fields of the select query
@@ -84,51 +84,32 @@ class Model_Tree extends Model_Base {
//return: $elements = array('tables'=>$tables,'where'=>$where,'fields'=>$fields)
public function treeQueryElements($tableName,$choice = 'all')
{
-// $index = array_search($tableName,$this->_tablesArray);
-// $subArray = ($choice === 'all') ? array_slice($this->_tablesArray,$index) : array($tableName); //this array is necessary to verify that the where clause makes sense
-// $tables = ($choice === 'all') ? $this->createTablesList($index) : $tableName;
-// $where = ($choice === 'all') ? $this->createTreeWhere($index) : null;
-// $fields = ($choice === 'all') ? $this->createFieldsList($index) : $tableName.'.*';
-//
-// $wherePlus = $this->createWhereClause();
-//
-// if (empty($this->on))
-// {
-// $on = array();
-//
-// if (isset($where) and isset($wherePlus))
-// {
-// $where .= ' AND ' . $wherePlus;
-// }
-// else if (!isset($where) and isset($wherePlus))
-// {
-// $where .= $wherePlus;
-// }
-// }
-// else
-// {
-// $on = $where;
-// $where = $wherePlus;
-// }
-
- $where = $this->createWhereClause();
-
- if (isset($where))
+ $index = array_search($tableName,$this->_tablesArray);
+ $subArray = ($choice === 'all') ? array_slice($this->_tablesArray,$index) : array($tableName); //this array is necessary to verify that the where clause makes sense
+ $tables = ($choice === 'all') ? $this->createTablesList($index) : $tableName;
+ $where = ($choice === 'all') ? $this->createTreeWhere($index) : null;
+ $fields = ($choice === 'all') ? $this->createFieldsList($index) : $tableName.'.*';
+
+ $wherePlus = $this->createWhereClause();
+
+ if (empty($this->on))
{
- if (isset($this->sWhere))
+ $on = array();
+
+ if (isset($where) and isset($wherePlus))
{
- $where .= " AND " . $this->sWhere;
+ $where .= ' AND ' . $wherePlus;
+ }
+ else if (!isset($where) and isset($wherePlus))
+ {
+ $where .= $wherePlus;
}
}
else
{
- $where = $this->sWhere;
+ $on = $where;
+ $where = $wherePlus;
}
-
- $tables = isset($this->from) ? $this->from : $tableName;
-
- $fields = $tableName.".*";
- $on = $this->on;
return array('tables' => $tables,'where' => $where,'fields'=>$fields,'on'=>$on);
}
@@ -146,37 +127,10 @@ class Model_Tree extends Model_Base {
public function getFields($fields = '',$choice = 'all')
{
$elements = $this->treeQueryElements($this->_tablesArray[0],$choice);
-
- $queryFields = (strcmp($fields,'') === 0) ? $elements['fields'] : $fields;
- $row = $this->db->select($elements['tables'],$queryFields,$elements['where'],$this->groupBy,$this->orderBy,$this->limit,$elements['on'],$this->using,$this->join);
-
- //convert from MySQL values
- if ($this->convert)
- {
- if (count($row) > 0)
- {
- $types = array();
-
- $tablesList = array_keys($row[0]);
-
- foreach ($tablesList as $table)
- {
- $types[$table] = $this->db->getTypes($table, "*", false, true);
- }
-
- for ($i=0;$i< count ($row); $i++)
- {
- foreach ($tablesList as $table)
- {
- $row[$i][$table] = $this->convertFromMysqlT($types[$table], $row[$i][$table]);
- }
-
- }
- }
- }
+ $queryFields = (strcmp($fields,'') === 0) ? $elements['fields'] : $fields;
- return $row;
+ return $row = $this->db->select($elements['tables'],$queryFields,$elements['where'],$this->groupBy,$this->orderBy,$this->limit,$elements['on'],$this->using,$this->join);
}
public function send()
@@ -206,8 +160,8 @@ class Model_Tree extends Model_Base {
//$id: the id (primary key) of the record
//$fields: the comma separated list of fields that have to be extracted
public function selectId($id,$fields = null) {
-
- $this->save()->clear()->setWhereQueryClause(array($this->_idFieldsArray[0] => (int)$id));
+ $tempWhere = $this->where;
+ $this->setWhereQueryClause(array($this->_idFieldsArray[0] => (int)$id));
$this->using = null;
@@ -220,7 +174,7 @@ class Model_Tree extends Model_Base {
$values = $this->getAll('other');
}
- $this->restore();
+ $this->where = $tempWhere;
return (count($values) > 0) ? $values[0][$this->_tablesArray[0]] : array();
@@ -264,374 +218,50 @@ class Model_Tree extends Model_Base {
return $this->db->recordExists($elements['tables'],$field,$value,$elements['where'],$this->groupBy,$elements['on'],$this->using,$this->join);
}
- //check referential integrity during delete
- public function checkOnDeleteIntegrity($id = null, $whereClause = null)
- {
- $this->save();
-
- $result = true;
-
- if (count($this->foreignKeys) > 0)
- {
- foreach ($this->foreignKeys as $f)
- {
- if (preg_match('/^(.*?)\s(parent of)\s(.*?)\((.*?)\)(\s(on delete)\s(cascade|restrict)\s\((.*?)\))?$/i',$f,$matches))
- {
- $parentKey = $matches[1];
- $childModel = $matches[3];
- $childField = $matches[4];
-
- if (isset($whereClause))
- {
- $this->clear()->sWhere($whereClause);
- }
- else
- {
- $this->clear()->where(array($this->_idFields=>(int)$id));
- }
-
- $keys = sanitizeDbDeep($this->toList($parentKey)->send());
- $this->restore();
-
- if (count($keys) > 0)
- {
- $child = new $childModel();
- $childrenIds = $child->clear()->where(array($childField=>"in('".implode("','",$keys)."')"))->toList($child->getPrimaryKey())->send();
-
- if (count($childrenIds) > 0)
- {
- if (isset($matches[7]) and strcmp($matches[7],"cascade") === 0)
- {
- foreach ($childrenIds as $childId)
- {
- $child->del((int)$childId);
- }
-
- if (strcmp($matches[8],"") !== 0)
- {
- $this->notice .= "<div class='".Params::$infoStringClassName."'>".$matches[8]."</div>";
- }
- }
- else
- {
- $this->notice .= isset($matches[8]) ? "<div class='".Params::$errorStringClassName."'>".$matches[8]."</div>" : $this->_resultString->getString('associate');
- $result = false;
- }
- }
- }
+// //get the number of records of the table $this->_tablesArray[0]
+// public function rowNumber() {
+// return $this->recordNumber($this->_tablesArray[0]);
+// }
- }
- }
- }
-
- return $result;
- }
-
- //check referential integrity during insert or update
- public function checkOnUpdateIntegrity($queryType)
- {
- $result = true;
-
- if (count($this->foreignKeys) > 0)
- {
- foreach ($this->foreignKeys as $f)
- {
- if (preg_match('/^(.*?)\s(child of)\s(.*?)\((.*?)\)(\s(on update)\s(restrict)\s\((.*?)\))?$/i',$f,$matches))
- {
- $childKey = $matches[1];
- $ParentModel = $matches[3];
- $ParentField = $matches[4];
-
- $notice = isset($matches[8]) ? "<div class='".Params::$errorStringClassName."'>".$matches[8]."</div>" : "";
-
- if (array_key_exists($childKey,$this->values))
- {
- $parent = new $ParentModel();
- $res = $parent->clear()->where(array($ParentField=>sanitizeDb($this->values[$childKey])))->send();
-
- if (count($res) === 0)
- {
- $this->notice .= $notice;
- $this->result = false;
- $result = false;
- }
- }
- else if ($queryType === "insert")
- {
- $this->notice .= $notice;
- $this->result = false;
- $result = false;
- }
- }
- }
- }
-
- return $result;
- }
-
- //get the first extracted full record
- public function record()
- {
- $res = $this->getFields($this->select);
-
- if (count($res) > 0)
- {
- return $res[0][$this->_tables];
- }
- return array();
- }
-
- //get a single field from the first extracted record
- public function field($fieldName)
+ //method to call the delete query (overriding of the del method of Model.php)
+ //check the referential integrity
+ public function del($id = null, $whereClause = null)
{
- $res = $this->save()->select($fieldName)->send();
- $this->restore();
+ $this->queryResult = false;
- if (count($res) > 0 and isset($res[0][$this->_tables][$fieldName]))
+ if (isset($whereClause))
{
- return $res[0][$this->_tables][$fieldName];
+ return parent::del(null,$whereClause);
}
- return "";
- }
-
- //get the types of the fields in $this->values
- public function getTypes($full = false)
- {
- return $types = $this->db->getTypes($this->_tables,implode(",",array_keys($this->values)),$full);
- }
-
- //automatically set the values conditions
- public function setValuesConditionsFromDbFields($queryType)
- {
- $fields = array_keys($this->values);
- $fieldsAsString = implode(",",$fields);
-
- $types = $this->getTypes(true);
- $fieldKeys = $this->db->getKeys($this->_tables,$fieldsAsString,true,false);
-
- if (count($this->values) > 0)
+ else
{
- if (!$types)
+ if ($this->_onDelete === 'check' and isset($this->_reference))
{
- $this->notice .= $this->_resultString->getString('not-existing-fields');
- $this->result = false;
- return false;
- }
- else
- {
- $this->saveConditions("values");
- $this->saveConditions("database");
-
- if (Params::$setValuesConditionsFromDbTableStruct)
+ if (isset($this->_reference[0]) and isset($this->_reference[1]))
{
- foreach ($types as $index => $t)
- {
- if (preg_match('/^('.implode("|",$this->db->getCharTypes()).')\(([0-9]*?)\)$/i',$t,$matches))
- {
- $this->addValuesCondition($queryType,'checkLength|'.$matches[2],$fields[$index]);
- }
- else if (preg_match('/^('.implode("|",$this->db->getIntegerTypes()).')/i',$t,$matches))
- {
- $this->addValuesCondition($queryType,'checkInteger',$fields[$index]);
- }
- else if (preg_match('/^('.implode("|",$this->db->getFloatTypes()).')$/i',$t,$matches))
- {
- $this->addValuesCondition($queryType,'checkNumeric',$fields[$index]);
- }
- else if (preg_match('/^('.implode("|",$this->db->getDateTypes()).')$/i',$t,$matches))
- {
- $this->addValuesCondition($queryType,'checkIsoDate',$fields[$index]);
- }
- else if (preg_match('/^('.implode("|",$this->db->getEnumTypes()).')\((.*?)\)$/i',$t,$matches))
- {
- $temp = array();
- $strings = explode(",",$matches[2]);
- for ($i=0;$i<count($strings);$i++)
- {
- $temp[] = trim($strings[$i],"'\"");
- }
- $this->addValuesCondition($queryType,'checkIsStrings|'.implode(",",$temp),$fields[$index]);
- }
- else if (preg_match('/^('.implode("|",$this->db->getDecimalTypes()).')\((.*?)\)$/i',$t,$matches))
- {
- $this->addValuesCondition($queryType,'checkDecimal|'.$matches[2],$fields[$index]);
- }
- }
-
- //set unique conditions
- foreach ($fieldKeys as $index => $fk)
+ if ($this->db->recordExists($this->_reference[0],$this->_reference[1],(int)$id))
{
- if (preg_match('/^('.implode("|",$this->db->getUniqueIndexStrings()).')$/i',$fk,$matches))
- {
- if ($queryType === "insert")
- {
- $this->addDatabaseCondition($queryType,'checkUnique',$fields[$index]);
- }
- else
- {
- $this->addDatabaseCondition($queryType,'checkUniqueCompl',$fields[$index]);
- }
- }
+ $this->notice = $this->_resultString->getString('associate');
+ $this->identifierValue = null;
+ $this->result = false;
}
- }
-
- foreach (Params::$valuesConditionsFromFormatsOfFieldsNames as $regExpr => $function)
- {
- foreach ($fields as $f)
+ else
{
- if (preg_match($regExpr,$f,$matches))
- {
- $this->addValuesCondition($queryType,$function,$f);
- }
+ return parent::del((int)$id);
}
-
}
- }
- }
-
-// print_r($fields);
-// print_r($types);
-
- return true;
- }
-
- //convert values of the $this->values to MySQL formats
- public function convertValuesToDb()
- {
- if (Params::$automaticConversionToDbFormat)
- {
- if (isset($this->_conversionToDbObject))
- {
- $types = $this->getTypes();
-
- if ($types)
+ else
{
- $fields = array_keys($this->values);
-
- foreach ($types as $index => $t)
- {
- if (method_exists($this->_conversionToDbObject,strtolower($t)))
- {
- $this->values[$fields[$index]] = call_user_func(array($this->_conversionToDbObject, strtolower($t)), $this->values[$fields[$index]]);
- }
- }
+ throw new Exception('you have forgotten to set \'$this->_reference\' or you have forgotten to set $this->_onDelete = \'nocheck\'');
}
}
- }
- }
-
- public function insert()
- {
- $this->db->setAutocommit(true);
-
- $this->notice = null;
- $this->queryResult = false;
-
- $this->convertValuesToDb();
-
- if ($this->checkOnUpdateIntegrity("insert"))
- {
- //set the values conditions from the table description
- if ($this->setValuesConditionsFromDbFields("insert"))
- {
- if ($this->applyDatabaseConditions("insert",null))
- {
- $this->restoreConditions("database");
- if ($this->applyValidateConditions("insert",'values'))
- {
- $this->restoreConditions("values");
- return parent::insert();
- }
- $this->restoreConditions("values");
- }
- $this->restoreConditions("database");
- }
- }
-
- return false;
-
- }
-
- public function update($id = null, $whereClause = null)
- {
- $this->db->setAutocommit(true);
-
- $this->notice = null;
- $this->queryResult = false;
-
- $this->convertValuesToDb();
-
- if ($this->checkOnUpdateIntegrity("update"))
- {
- //set the values conditions from the table description
- if ($this->setValuesConditionsFromDbFields("update"))
+ else
{
- if (!isset($id) or $this->applyDatabaseConditions("update",(int)$id))
- {
- $this->restoreConditions("database");
- //check the values conditions
- if ($this->applyValidateConditions("update",'values'))
- {
- $this->restoreConditions("values");
- return parent::update($id, $whereClause);
- }
- $this->restoreConditions("values");
- }
- $this->restoreConditions("database");
+ return parent::del((int)$id);
}
}
-
return false;
}
-
- //method to call the delete query (overriding of the del method of Model.php)
- //check the referential integrity
- public function del($id = null, $whereClause = null)
- {
- $this->notice = null;
- $this->queryResult = false;
-
- if ($this->checkOnDeleteIntegrity($id, $whereClause))
- {
- return parent::del($id, $whereClause);
- }
- else
- {
- return false;
- }
-// if (isset($whereClause))
-// {
-// return parent::del(null,$whereClause);
-// }
-// else
-// {
-// if ($this->_onDelete === 'check' and isset($this->_reference))
-// {
-// if (isset($this->_reference[0]) and isset($this->_reference[1]))
-// {
-// if ($this->db->recordExists($this->_reference[0],$this->_reference[1],(int)$id))
-// {
-// $this->notice = $this->_resultString->getString('associate');
-// $this->identifierValue = null;
-// $this->result = false;
-// }
-// else
-// {
-// return parent::del((int)$id);
-// }
-// }
-// else
-// {
-// throw new Exception('you have forgotten to set \'$this->_reference\' or you have forgotten to set $this->_onDelete = \'nocheck\'');
-// }
-// }
-// else
-// {
-// return parent::del((int)$id);
-// }
-// }
-// return false;
- }
//method to obtain one columns from the tables $this->_tablesArray as an associative array
//$valueField: the column that have to be extracted (array_values of the resulting associative array), $keyField: the column that have to play the role of array_keys
diff --git a/h-source/Library/Params.php b/h-source/Library/Params.php
index e22c1bf..e5f5ab7 100644
--- a/h-source/Library/Params.php
+++ b/h-source/Library/Params.php
@@ -2,7 +2,7 @@
// EasyGiant is a PHP framework for creating and managing dynamic content
//
-// Copyright (C) 2009 - 2014 Antonio Gallo (info@laboratoriolibero.com)
+// Copyright (C) 2009 - 2011 Antonio Gallo
// See COPYRIGHT.txt and LICENSE.txt.
//
// This file is part of EasyGiant
@@ -26,24 +26,24 @@ if (!defined('EG')) die('Direct access not allowed!');
class Params
{
- public static $allowedDb = array('Mysql','Mysqli','None'); //allowed database type
+ //allowed database type
+ public static $allowedDb = array('Mysql','Mysqli','None');
- public static $allowedSanitizeFunc = 'sanitizeAll,sanitizeDb,sanitizeHtml,forceInt,forceNat,none,md5,sha1,strip_tags'; //allowed sanitize functions
+ //allowed sanitize functions
+ public static $allowedSanitizeFunc = 'sanitizeAll,sanitizeDb,sanitizeHtml,forceInt,forceNat,none,md5,sha1';
- public static $allowedHashFunc = array('md5','sha1'); //allowed hash functions
+ //allowed hash functions
+ public static $allowedHashFunc = array('md5','sha1');
//conventional null value for the value of the field in the createWhereClause method of the Model class
public static $nullQueryValue = false;
//use HTTPS for links or not
public static $useHttps = false;
-
+
//class name of the div that contains the error strings
public static $errorStringClassName = 'alert';
- //class name of the div that contains the error strings
- public static $infoStringClassName = 'executed';
-
//table name in the returning structure of the select queries in the case of an aggregate function. Ex count(*),sum(*)
public static $aggregateKey = 'aggregate';
@@ -52,59 +52,15 @@ class Params
public static $htmlentititiesCharset = DEFAULT_CHARSET;
//list of symbols used in the statements of the where clause of the select queries
- public static $whereClauseSymbolArray = array('<','>','!=','<=','>=','in(','not in(','like','between');
+ public static $whereClauseSymbolArray = array('<','>','!=','<=','>=','in(','not in(','like');
//is the mbstring extension enabled?
public static $mbStringLoaded = false;
-
+
//subfolder of the View folder where to look for view files
public static $viewSubfolder = null;
- //global website language used by the models and by the helpers for reporting
+ //global website language used by the models and by the helpers
public static $language = 'It';
-
- //array of languages allowed for the website front-end
- public static $frontEndLanguages = array();
-
- //default front-end language
- public static $defaultFrontEndLanguage = "it";
-
- //current front-end language
- public static $lang = null;
-
- //if true, it redirect to current language if language is expected ($frontEndLanguages not empty) but not present
- public static $redirectToDefaultLanguage = false;
-
- //if the URL status variables have to be rewritten or left in the standard query string form
- public static $rewriteStatusVariables = true;
-
- //if the URL has to be rewritten only if an exact match has been found (true) or if a match has been found starting from the beginning (false)
- public static $exactUrlMatchRewrite = false;
-
- //list of installed applications
- //the name of the applications has to match a subfolder of tha Apps folder
- public static $installed = array();
-
- //the application called
- public static $currentApplication = null;
-
- //if true, automatically set the values conditions from the table types
- public static $setValuesConditionsFromDbTableStruct = false;
-
- //if true, automatically convert values to MySQL format during insert and update queries (using types taken from table definition)
- public static $automaticConversionToDbFormat = false;
-
- //if true, convert values from MySQl to $_lang format when filling the form with values coming from the DB
- public static $automaticConversionFromDbFormat = false;
-
- //if true, set the default value for each field when filling the form
- //default values are taken from DB where present or from type definition
- public static $automaticallySetFormDefaultValues = false;
-
- //if true, set date("Y-m-d") as default date when setting the default values of the form or of the $this->values array
- public static $useCurrentDateAsDefaultDate = true;
-
- //definition of values conditions from the formats of the fields names
- public static $valuesConditionsFromFormatsOfFieldsNames = array();
-} \ No newline at end of file
+}
diff --git a/h-source/Library/Popup.php b/h-source/Library/Popup.php
index d2d51a7..186e4b3 100755
--- a/h-source/Library/Popup.php
+++ b/h-source/Library/Popup.php
@@ -2,7 +2,7 @@
// EasyGiant is a PHP framework for creating and managing dynamic content
//
-// Copyright (C) 2009 - 2014 Antonio Gallo (info@laboratoriolibero.com)
+// Copyright (C) 2009 - 2011 Antonio Gallo
// See COPYRIGHT.txt and LICENSE.txt.
//
// This file is part of EasyGiant
diff --git a/h-source/Library/Request.php b/h-source/Library/Request.php
index 8ad9226..d99585d 100644
--- a/h-source/Library/Request.php
+++ b/h-source/Library/Request.php
@@ -2,7 +2,7 @@
// EasyGiant is a PHP framework for creating and managing dynamic content
//
-// Copyright (C) 2009 - 2014 Antonio Gallo (info@laboratoriolibero.com)
+// Copyright (C) 2009 - 2011 Antonio Gallo
// See COPYRIGHT.txt and LICENSE.txt.
//
// This file is part of EasyGiant
diff --git a/h-source/Library/Scaffold.php b/h-source/Library/Scaffold.php
index a418b7c..7e43134 100755
--- a/h-source/Library/Scaffold.php
+++ b/h-source/Library/Scaffold.php
@@ -2,7 +2,7 @@
// EasyGiant is a PHP framework for creating and managing dynamic content
//
-// Copyright (C) 2009 - 2014 Antonio Gallo (info@laboratoriolibero.com)
+// Copyright (C) 2009 - 2011 Antonio Gallo
// See COPYRIGHT.txt and LICENSE.txt.
//
// This file is part of EasyGiant
@@ -32,9 +32,6 @@ class Scaffold
protected $_primaryKey = null; //the primary key of the table
protected $_controller = null; //the name of the controller
- public $application = null; //the name of the application
- public $applicationUrl = null; //the url of the application
- public $controller = null; //the name of the controller
public $model = null; //the reference to the model associated with the controller
public $viewArgs = array(); //the associative array representing the status args of the main action of the controller.
@@ -57,37 +54,30 @@ class Scaffold
//instance of Lang_{language}_Generic
public $strings = null;
- public static $autoParams = array(
- 'mainAction' => 'main',
- 'modifyAction' => 'form/update',
- 'associateAction' => 'associate',
- 'panelController' => 'panel',
- 'pageList' => true,
- 'pageVariable' => 'page',
- 'recordPerPage' => 20,
- 'mainMenu' => 'panel,add',
- 'formMenu' => 'panel,back',
- 'popup' => false,
- 'popupType' => 'exclusive'
- );
-
- public function __construct($type,$application, $controller,$model,$viewArgs,$params = null) {
+ public function __construct($type,$controller,$model,$viewArgs,$params = null) {
$this->_type = $type;
- $this->application = $application;
- $this->controller = $controller;
+ $this->_controller = $controller;
$this->model = $model;
$this->viewArgs = $viewArgs;
//get the generic language class
$this->strings = Factory_Strings::generic(Params::$language);
- $autoParams = self::$autoParams;
-
- if (!array_key_exists("postSubmitValue",$autoParams))
- {
- $autoParams['postSubmitValue'] = $this->strings->gtext('Save');
- }
+ $autoParams = array(
+ 'mainAction' => 'main',
+ 'modifyAction' => 'form/update',
+ 'associateAction' => 'associate',
+ 'panelController' => 'panel',
+ 'pageList' => true,
+ 'pageVariable' => 'page',
+ 'recordPerPage' => 10,
+ 'mainMenu' => 'panel,add',
+ 'formMenu' => 'panel,back',
+ 'postSubmitValue' => 'Save',
+ 'popup' => false,
+ 'popupType' => 'exclusive'
+ );
//set the $this->scaffold->params array
if (is_array($params)) {
@@ -97,7 +87,6 @@ class Scaffold
}
$this->params = $autoParams;
- $this->applicationUrl = isset($application) ? $application . "/" : null;
}
//ad some clauses to the select query
@@ -120,35 +109,11 @@ class Scaffold
{
$this->_primaryKey = $primaryKey;
- if (is_array($recordList) or strcmp($recordList,'') !== 0)
+ if (strcmp($recordList,'') !== 0)
{
- $recordListArray = is_array($recordList) ? $recordList : explode(',',$recordList);
-
+ $recordListArray = explode(',',$recordList);
foreach ($recordListArray as $record) {
- if (preg_match('/\[\[checkbox\]\](\;)(.*?)(\;)/',$record,$matches))
- {
- $this->itemList->addItem("checkbox",encode($matches[2]),";".$matches[2].";","",";".$primaryKey.";");
- }
- else if (preg_match('/\[\[checkbox\:(.*?)\]\](\;)(.*?)(\;)/',$record,$matches))
- {
- $this->itemList->addItem("checkbox",encode($matches[3]),";".$matches[3].";",$matches[1],";".$primaryKey.";");
- }
- else if (preg_match('/\[\[input\]\](\;)(.*?)(\;)/',$record,$matches))
- {
- $this->itemList->addItem("input",encode($matches[2]),";".$matches[2].";",";".$primaryKey.";");
- }
- else if (preg_match('/\[\[ledit\]\](\;)(.*?)(\;)/',$record,$matches))
- {
- $this->itemList->addItem("link",$this->applicationUrl . $this->controller.'/'.$this->params['modifyAction']."/;$primaryKey;","",";".$matches[2].";");
- }
- else if (strstr($record, ';'))
- {
- $this->itemList->addItem("simpleText","$record");
- }
- else
- {
- $this->itemList->addItem("simpleText",";$record;");
- }
+ $this->itemList->addItem("simpleText",";$record;");
}
}
@@ -158,33 +123,26 @@ class Scaffold
{
foreach ($themeArray as $el)
{
- if (preg_match('/ledit\|(.*)/',$el,$matches))
+ switch ($el)
{
- $this->itemList->addItem('ledit',$matches[1],'Edit','Edit');
- }
- else
- {
- switch ($el)
- {
- case 'moveup':
- $this->itemList->addItem('moveupForm',$this->applicationUrl . $this->controller.'/'.$this->params['mainAction'],";".$primaryKey.";");
- break;
- case 'movedown':
- $this->itemList->addItem('movedownForm',$this->applicationUrl . $this->controller.'/'.$this->params['mainAction'],";".$primaryKey.";");
- break;
- case 'link':
- $this->itemList->addItem('associateForm',$this->applicationUrl . $this->controller.'/'.$this->params['associateAction'],";".$primaryKey.";");
- break;
- case 'edit':
- $this->itemList->addItem('editForm',$this->applicationUrl . $this->controller.'/'.$this->params['modifyAction'],";".$primaryKey.";");
- break;
- case 'del':
- $this->itemList->addItem('delForm',$this->applicationUrl . $this->controller.'/'.$this->params['mainAction'],";".$primaryKey.";");
- break;
- case 'ledit':
- $this->itemList->addItem('ledit',$this->applicationUrl . $this->controller.'/'.$this->params['modifyAction'].'/;'.$primaryKey.';','Edit','Edit');
- break;
- }
+ case 'moveup':
+ $this->itemList->addItem('moveupForm',$this->_controller.'/'.$this->params['mainAction'],";".$primaryKey.";");
+ break;
+ case 'movedown':
+ $this->itemList->addItem('movedownForm',$this->_controller.'/'.$this->params['mainAction'],";".$primaryKey.";");
+ break;
+ case 'link':
+ $this->itemList->addItem('associateForm',$this->_controller.'/'.$this->params['associateAction'],";".$primaryKey.";");
+ break;
+ case 'edit':
+ $this->itemList->addItem('editForm',$this->_controller.'/'.$this->params['modifyAction'],";".$primaryKey.";");
+ break;
+ case 'del':
+ $this->itemList->addItem('delForm',$this->_controller.'/'.$this->params['mainAction'],";".$primaryKey.";");
+ break;
+ case 'ledit':
+ $this->itemList->addItem('ledit',$this->_controller.'/'.$this->params['mainAction'].'/;'.$primaryKey.';','Edit','Edit');
+ break;
}
}
}
@@ -199,8 +157,7 @@ class Scaffold
$this->queryType = $queryType;
$submitName = $this->model->getSubmitName($queryType);
$value = $this->params['postSubmitValue'];
- $viewStatus = Url::createUrl($this->viewArgs);
-
+ $viewStatus = Url::createUrl(array_values($this->viewArgs));
$this->model->setForm($action.$viewStatus,array($submitName => $value),$method,$enctype);
$this->form = $this->model->form;
}
diff --git a/h-source/Library/Strings/Functions.php b/h-source/Library/Strings/Functions.php
index c63d165..1ee17af 100644
--- a/h-source/Library/Strings/Functions.php
+++ b/h-source/Library/Strings/Functions.php
@@ -2,7 +2,7 @@
// EasyGiant is a PHP framework for creating and managing dynamic content
//
-// Copyright (C) 2009 - 2014 Antonio Gallo (info@laboratoriolibero.com)
+// Copyright (C) 2009 - 2011 Antonio Gallo
// See COPYRIGHT.txt and LICENSE.txt.
//
// This file is part of EasyGiant
diff --git a/h-source/Library/Theme.php b/h-source/Library/Theme.php
index 1ddec92..10c0fce 100755
--- a/h-source/Library/Theme.php
+++ b/h-source/Library/Theme.php
@@ -2,7 +2,7 @@
// EasyGiant is a PHP framework for creating and managing dynamic content
//
-// Copyright (C) 2009 - 2014 Antonio Gallo (info@laboratoriolibero.com)
+// Copyright (C) 2009 - 2011 Antonio Gallo
// See COPYRIGHT.txt and LICENSE.txt.
//
// This file is part of EasyGiant
@@ -34,20 +34,15 @@ class Theme {
public $viewArgs = array();
public $viewStatus = '';
public $controller = 'controller';
- public $application = null;
public $action = '';
public $currPage; //the URL of the current page
- function __construct($application, $controller) {
-
- $this->controller = $controller;
- $this->application = $application;
-
- $langUrl = isset(Params::$lang) ? "/".Params::$lang : null;
+ function __construct($controller) {
+
$protocol = Params::$useHttps ? "https" : "http";
-
- $this->baseUrl = MOD_REWRITE_MODULE === true ? "$protocol://" . DOMAIN_NAME . $langUrl : "$protocol://" . DOMAIN_NAME . '/index.php' . $langUrl;
-
+
+ $this->controller = $controller;
+ $this->baseUrl = MOD_REWRITE_MODULE === true ? "$protocol://" . DOMAIN_NAME : "$protocol://" . DOMAIN_NAME . '/index.php';
$this->baseUrlSrc = "$protocol://" . DOMAIN_NAME;
}
@@ -79,22 +74,15 @@ class Theme {
}
}
+
public function render() {
extract($this->_data);
-
+
//find the View subfolder where to look for view files
$subfolder = isset(Params::$viewSubfolder) ? Params::$viewSubfolder . DS : null;
foreach ($this->_viewFiles as $file) {
- if (isset($this->application) and file_exists(ROOT . DS . APPLICATION_PATH . DS . "Apps" . DS . ucfirst($this->application). DS . 'Views' . DS .$subfolder. ucwords($this->controller) . DS . $file . '.php'))
- {
- include (ROOT . DS . APPLICATION_PATH . DS . "Apps" . DS . ucfirst($this->application). DS . 'Views' . DS . $subfolder. ucwords($this->controller) . DS . $file . '.php');
- }
- else if (isset($this->application) and file_exists(ROOT . DS . APPLICATION_PATH . DS . "Apps" . DS . ucfirst($this->application). DS . 'Views' . DS . $subfolder. $file . '.php'))
- {
- include (ROOT . DS . APPLICATION_PATH . DS . "Apps" . DS . ucfirst($this->application). DS . 'Views' . DS .$subfolder. $file . '.php');
- }
- else if (file_exists(ROOT . DS . APPLICATION_PATH . DS . 'Views' . DS .$subfolder. ucwords($this->controller) . DS . $file . '.php')) {
+ if (file_exists(ROOT . DS . APPLICATION_PATH . DS . 'Views' . DS .$subfolder. ucwords($this->controller) . DS . $file . '.php')) {
include (ROOT . DS . APPLICATION_PATH . DS . 'Views' . DS .$subfolder. ucwords($this->controller) . DS . $file . '.php');
} else {
include (ROOT . DS . APPLICATION_PATH . DS . 'Views' . DS .$subfolder. $file . '.php');
@@ -102,15 +90,7 @@ class Theme {
}
if (isset($this->_lastView)) {
- if (isset($this->application) and file_exists(ROOT . DS . APPLICATION_PATH . DS . "Apps" . DS . ucfirst($this->application). DS . 'Views' . DS .$subfolder. ucwords($this->controller) . DS . $this->_lastView . '.php'))
- {
- include (ROOT . DS . APPLICATION_PATH . DS . "Apps" . DS . ucfirst($this->application). DS . 'Views' . DS .$subfolder. ucwords($this->controller) . DS . $this->_lastView . '.php');
- }
- else if (isset($this->application) and file_exists(ROOT . DS . APPLICATION_PATH . DS . "Apps" . DS . ucfirst($this->application). DS . 'Views' . DS . $subfolder . $this->_lastView . '.php'))
- {
- include (ROOT . DS . APPLICATION_PATH . DS . "Apps" . DS . ucfirst($this->application). DS . 'Views' . DS .$subfolder . $this->_lastView . '.php');
- }
- else if (file_exists(ROOT . DS . APPLICATION_PATH . DS . 'Views' . DS .$subfolder. ucwords($this->controller) . DS . $this->_lastView . '.php')) {
+ if (file_exists(ROOT . DS . APPLICATION_PATH . DS . 'Views' . DS .$subfolder. ucwords($this->controller) . DS . $this->_lastView . '.php')) {
include (ROOT . DS . APPLICATION_PATH . DS . 'Views' . DS .$subfolder. ucwords($this->controller) . DS . $this->_lastView . '.php');
} else {
include (ROOT . DS . APPLICATION_PATH . DS . 'Views' . DS .$subfolder. $this->_lastView . '.php');
diff --git a/h-source/Library/Url.php b/h-source/Library/Url.php
index 26ff3df..efb8e6e 100755
--- a/h-source/Library/Url.php
+++ b/h-source/Library/Url.php
@@ -2,7 +2,7 @@
// EasyGiant is a PHP framework for creating and managing dynamic content
//
-// Copyright (C) 2009 - 2014 Antonio Gallo (info@laboratoriolibero.com)
+// Copyright (C) 2009 - 2011 Antonio Gallo
// See COPYRIGHT.txt and LICENSE.txt.
//
// This file is part of EasyGiant
@@ -26,35 +26,31 @@ class Url {
//get the url starting from the root folder
public static function getRoot($pathFromRootFolder = null) {
-
- $langUrl = isset(Params::$lang) ? "/".Params::$lang : null;
-
+
$protocol = Params::$useHttps ? "https" : "http";
-
- $url = MOD_REWRITE_MODULE === true ? "$protocol://" . DOMAIN_NAME . $langUrl . '/' . $pathFromRootFolder : "$protocol://" . DOMAIN_NAME . '/index.php/' . $langUrl . $pathFromRootFolder;
+
+ $url = MOD_REWRITE_MODULE === true ? "$protocol://" . DOMAIN_NAME . '/' . $pathFromRootFolder : "$protocol://" . DOMAIN_NAME . '/index.php/' . $pathFromRootFolder;
return $url;
}
- //create an url string (element1/element2/element4) from the values of the array $valuesArray considering only the elements indicated in the numeric string $numericString
- //$forceRewrite: if true it always rewrite the status variables
- public static function createUrl($variablesArray, $numericString = null, $forceRewrite = false) {
+ //create an url string (element1/element2/element4) from the values of the array $valuesArray considering only the elements indicated in the numeric string $numericString (in this case '1,2,4')
+ public static function createUrl($valuesArray,$numericString = null) {
$elementsArray = explode(',',$numericString);
- $valuesArray = array_values($variablesArray);
- $keysArray = array_keys($variablesArray);
+ $valuesArray = array_values($valuesArray);
$urlString = null;
for ($i = 0; $i < count($valuesArray); $i++)
{
if (isset($numericString)) {
if (isset($valuesArray[$i]) and in_array($i,$elementsArray)) {
- $urlString .= (Params::$rewriteStatusVariables or $forceRewrite) ? "/".$valuesArray[$i] : "&".$keysArray[$i]."=".$valuesArray[$i];
+ $urlString .= "/".$valuesArray[$i];
}
} else {
if (isset($valuesArray[$i])) {
- $urlString .= (Params::$rewriteStatusVariables or $forceRewrite) ? "/".$valuesArray[$i] : "&".$keysArray[$i]."=".$valuesArray[$i];
+ $urlString .= "/".$valuesArray[$i];
}
}
}
- return (Params::$rewriteStatusVariables or $forceRewrite) ? $urlString : "?".ltrim($urlString,"&");
+ return $urlString;
}
}
diff --git a/h-source/Library/Users/CheckAdmin.php b/h-source/Library/Users/CheckAdmin.php
index aa4e33f..54deb2a 100755
--- a/h-source/Library/Users/CheckAdmin.php
+++ b/h-source/Library/Users/CheckAdmin.php
@@ -2,7 +2,7 @@
// EasyGiant is a PHP framework for creating and managing dynamic content
//
-// Copyright (C) 2009 - 2014 Antonio Gallo (info@laboratoriolibero.com)
+// Copyright (C) 2009 - 2011 Antonio Gallo
// See COPYRIGHT.txt and LICENSE.txt.
//
// This file is part of EasyGiant
@@ -60,16 +60,6 @@ class Users_CheckAdmin {
$this->uid = isset($_COOKIE[$this->_params['cookie_name']]) ? sanitizeAlnum($_COOKIE[$this->_params['cookie_name']]) : null;
}
- public function setParam($key, $value)
- {
- $this->_params[$key] = $value;
- }
-
- public function getUid()
- {
- return $this->uid;
- }
-
private function cleanSessions()
{
#cancello le sessioni scadute
diff --git a/h-source/Logs/Errors.log b/h-source/Logs/Errors.log
deleted file mode 100644
index f2250e8..0000000
--- a/h-source/Logs/Errors.log
+++ /dev/null
@@ -1,73 +0,0 @@
-[06-Sep-2010 18:45:43] PHP Notice: Undefined index: Menu in /home/tonicucoz/Apache/h-node/Application/Controllers/AdminregusersController.php on line 64
-[06-Sep-2010 18:45:43] PHP Fatal error: Call to a member function render() on a non-object in /home/tonicucoz/Apache/h-node/Application/Controllers/AdminregusersController.php on line 64
-[08-Sep-2010 08:11:20] PHP Notice: Undefined index: notebook_inserted in /home/tonicucoz/Apache/h-node/Application/Controllers/GenericController.php on line 68
-[09-Sep-2010 16:14:17] PHP Parse error: syntax error, unexpected T_CONSTANT_ENCAPSED_STRING in /home/tonicucoz/Apache/h-node/Application/Controllers/BaseController.php on line 101
-[09-Sep-2010 16:17:58] PHP Notice: Undefined index: fr in /home/tonicucoz/Apache/h-node/Application/Views/top_left.php on line 41
-[09-Sep-2010 16:17:58] PHP Notice: Undefined index: fr in /home/tonicucoz/Apache/h-node/Application/Views/top_left.php on line 45
-[09-Sep-2010 22:47:51] PHP Notice: Undefined index: es in /home/tonicucoz/Apache/h-node/Application/Views/top_left.php on line 41
-[09-Sep-2010 22:47:51] PHP Notice: Undefined index: es in /home/tonicucoz/Apache/h-node/Application/Views/top_left.php on line 45
-[11-Sep-2010 10:59:17] PHP Notice: Undefined variable: fullname in /home/tonicucoz/Apache/h-node/Application/Controllers/BaseController.php on line 102
-[11-Sep-2010 10:59:17] PHP Notice: Undefined offset: 1 in /home/tonicucoz/Apache/h-node/Application/Controllers/BaseController.php on line 103
-[11-Sep-2010 10:59:17] PHP Notice: Undefined variable: fullname in /home/tonicucoz/Apache/h-node/Application/Controllers/BaseController.php on line 102
-[11-Sep-2010 10:59:17] PHP Notice: Undefined offset: 1 in /home/tonicucoz/Apache/h-node/Application/Controllers/BaseController.php on line 103
-[11-Sep-2010 12:11:05] PHP Notice: Undefined offset: 0 in /home/tonicucoz/Apache/h-node/Application/Controllers/GenericController.php on line 340
-[11-Sep-2010 12:13:43] PHP Notice: Undefined variable: talk_number in /home/tonicucoz/Apache/h-node/Application/Views/top_left.php on line 39
-[11-Sep-2010 13:12:28] PHP Warning: Invalid argument supplied for foreach() in /home/tonicucoz/Apache/h-node/Library/Model/Base.php on line 1101
-[11-Sep-2010 13:12:28] PHP Warning: Invalid argument supplied for foreach() in /home/tonicucoz/Apache/h-node/Library/Users/CheckAdmin.php on line 211
-[13-Sep-2010 21:47:32] PHP Notice: Undefined variable: ismoderator in /home/tonicucoz/Apache/h-node/Application/Controllers/HistoryController.php on line 32
-[14-Sep-2010 19:04:26] PHP Notice: Undefined variable: title in /home/tonicucoz/Apache/h-node/Application/Views/header.php on line 9
-[14-Sep-2010 19:04:36] PHP Notice: Undefined variable: title in /home/tonicucoz/Apache/h-node/Application/Views/header.php on line 9
-[14-Sep-2010 19:14:14] PHP Notice: Undefined variable: u in /home/tonicucoz/Apache/h-node/Application/Views/History/viewall.php on line 6
-[14-Sep-2010 19:14:14] PHP Fatal error: Call to a member function getUser() on a non-object in /home/tonicucoz/Apache/h-node/Application/Views/History/viewall.php on line 6
-[14-Sep-2010 19:39:41] PHP Notice: Undefined index: in /home/tonicucoz/Apache/h-node/Application/Views/History/viewall.php on line 9
-[14-Sep-2010 19:44:13] PHP Notice: Undefined index: in /home/tonicucoz/Apache/h-node/Application/Views/History/viewall.php on line 9
-[14-Sep-2010 19:44:32] PHP Notice: Undefined index: in /home/tonicucoz/Apache/h-node/Application/Views/History/viewall.php on line 9
-[14-Sep-2010 19:45:03] PHP Notice: Undefined index: in /home/tonicucoz/Apache/h-node/Application/Views/History/viewall.php on line 9
-[14-Sep-2010 19:47:20] PHP Notice: Undefined index: in /home/tonicucoz/Apache/h-node/Application/Views/History/viewall.php on line 9
-[14-Sep-2010 19:47:47] PHP Notice: Undefined index: in /home/tonicucoz/Apache/h-node/Application/Views/History/viewall.php on line 9
-[14-Sep-2010 20:13:07] PHP Notice: Undefined index: in /home/tonicucoz/Apache/h-node/Application/Views/History/viewall.php on line 9
-[14-Sep-2010 20:16:52] PHP Notice: Undefined index: in /home/tonicucoz/Apache/h-node/Application/Views/History/viewall.php on line 9
-[14-Sep-2010 20:18:40] PHP Notice: Undefined index: in /home/tonicucoz/Apache/h-node/Application/Views/History/viewall.php on line 9
-[14-Sep-2010 21:01:07] PHP Notice: Undefined index: in /home/tonicucoz/Apache/h-node/Application/Views/History/viewall.php on line 8
-[15-Sep-2010 20:14:01] PHP Notice: Undefined index: in /home/tonicucoz/Apache/h-node/Application/Views/History/viewall.php on line 8
-[15-Sep-2010 20:53:35] PHP Notice: Undefined index: in /home/tonicucoz/Apache/h-node/Application/Views/History/viewall.php on line 8
-[15-Sep-2010 20:54:29] PHP Notice: Undefined index: in /home/tonicucoz/Apache/h-node/Application/Views/History/viewall.php on line 9
-[15-Sep-2010 23:40:31] PHP Notice: Undefined index: in /home/tonicucoz/Apache/h-node/Application/Views/History/viewall.php on line 9
-[16-Sep-2010 15:09:55] PHP Notice: Undefined variable: md_javascript in /home/tonicucoz/Apache/h-node/Application/Views/moderator_dialog.php on line 7
-[16-Sep-2010 15:10:27] PHP Notice: Undefined variable: md_javascript in /home/tonicucoz/Apache/h-node/Application/Views/moderator_dialog.php on line 7
-[16-Sep-2010 15:16:29] PHP Notice: Undefined variable: row in /home/tonicucoz/Apache/h-node/Application/Views/talk.php on line 29
-[16-Sep-2010 15:16:29] PHP Notice: Undefined variable: row in /home/tonicucoz/Apache/h-node/Application/Views/talk.php on line 29
-[16-Sep-2010 15:16:44] PHP Notice: Undefined variable: row in /home/tonicucoz/Apache/h-node/Application/Views/talk.php on line 21
-[16-Sep-2010 15:16:44] PHP Notice: Undefined variable: row in /home/tonicucoz/Apache/h-node/Application/Views/talk.php on line 21
-[16-Sep-2010 15:16:56] PHP Notice: Undefined variable: row in /home/tonicucoz/Apache/h-node/Application/Views/talk.php on line 21
-[16-Sep-2010 15:16:56] PHP Notice: Undefined variable: row in /home/tonicucoz/Apache/h-node/Application/Views/talk.php on line 21
-[16-Sep-2010 15:18:49] PHP Notice: Undefined variable: row in /home/tonicucoz/Apache/h-node/Application/Views/talk.php on line 21
-[16-Sep-2010 15:18:49] PHP Notice: Undefined variable: row in /home/tonicucoz/Apache/h-node/Application/Views/talk.php on line 21
-[16-Sep-2010 15:19:02] PHP Notice: Undefined variable: row in /home/tonicucoz/Apache/h-node/Application/Views/talk.php on line 21
-[16-Sep-2010 15:19:02] PHP Notice: Undefined variable: row in /home/tonicucoz/Apache/h-node/Application/Views/talk.php on line 21
-[16-Sep-2010 15:22:03] PHP Notice: Undefined variable: row in /home/tonicucoz/Apache/h-node/Application/Views/talk.php on line 21
-[16-Sep-2010 15:22:03] PHP Notice: Undefined variable: row in /home/tonicucoz/Apache/h-node/Application/Views/talk.php on line 21
-[16-Sep-2010 15:22:15] PHP Notice: Undefined variable: row in /home/tonicucoz/Apache/h-node/Application/Views/talk.php on line 21
-[16-Sep-2010 15:22:15] PHP Notice: Undefined variable: row in /home/tonicucoz/Apache/h-node/Application/Views/talk.php on line 21
-[16-Sep-2010 15:35:06] PHP Notice: Undefined index: id_mes in /home/tonicucoz/Apache/h-node/Application/Views/talk.php on line 43
-[16-Sep-2010 15:35:06] PHP Notice: Undefined index: id_mes in /home/tonicucoz/Apache/h-node/Application/Views/talk.php on line 43
-[16-Sep-2010 15:44:51] PHP Notice: Undefined index: in /home/tonicucoz/Apache/h-node/Application/Views/History/viewall.php on line 9
-[16-Sep-2010 15:45:10] PHP Notice: Undefined index: in /home/tonicucoz/Apache/h-node/Application/Views/History/viewall.php on line 9
-[16-Sep-2010 15:46:46] PHP Notice: Undefined index: in /home/tonicucoz/Apache/h-node/Application/Views/History/viewall.php on line 9
-[16-Sep-2010 15:50:46] PHP Notice: Undefined index: in /home/tonicucoz/Apache/h-node/Application/Views/History/viewall.php on line 9
-[16-Sep-2010 15:52:23] PHP Notice: Undefined index: in /home/tonicucoz/Apache/h-node/Application/Views/History/viewall.php on line 9
-[16-Sep-2010 15:52:48] PHP Notice: Undefined index: in /home/tonicucoz/Apache/h-node/Application/Views/History/viewall.php on line 9
-[16-Sep-2010 15:53:06] PHP Notice: Undefined index: in /home/tonicucoz/Apache/h-node/Application/Views/History/viewall.php on line 9
-[16-Sep-2010 15:54:20] PHP Notice: Undefined index: in /home/tonicucoz/Apache/h-node/Application/Views/History/viewall.php on line 9
-[17-Sep-2010 18:27:03] PHP Notice: Undefined variable: go_to in /home/tonicucoz/Apache/h-node/Application/Views/moderator_dialog.php on line 7
-[20-Sep-2010 11:33:06] PHP Fatal error: Function name must be a string in /home/tonicucoz/Apache/h-node/Application/Controllers/BaseController.php on line 112
-[20-Sep-2010 11:33:22] PHP Fatal error: Function name must be a string in /home/tonicucoz/Apache/h-node/Application/Controllers/BaseController.php on line 115
-[20-Sep-2010 11:33:36] PHP Fatal error: Function name must be a string in /home/tonicucoz/Apache/h-node/Application/Controllers/BaseController.php on line 115
-[05-Oct-2010 16:44:50] PHP Parse error: syntax error, unexpected T_PUBLIC in /home/tonicucoz/Apache/h-source/Application/Models/WifiModel.php on line 49
-[14-Oct-2010 00:44:03] PHP Notice: Undefined offset: 0 in /home/tonicucoz/Apache/h-source/Application/Controllers/HomeController.php on line 41
-[14-Oct-2010 00:44:03] PHP Notice: Undefined offset: 0 in /home/tonicucoz/Apache/h-source/Application/Controllers/BaseController.php on line 102
-[14-Oct-2010 00:45:50] PHP Notice: Undefined offset: 0 in /home/tonicucoz/Apache/h-source/Application/Controllers/BaseController.php on line 102
-[14-Oct-2010 00:46:25] PHP Notice: Undefined variable: htmlRightBox in /home/tonicucoz/Apache/h-source/Application/Views/right.php on line 115
-[14-Oct-2010 00:46:29] PHP Notice: Undefined variable: htmlRightBox in /home/tonicucoz/Apache/h-source/Application/Views/right.php on line 115
-[14-Oct-2010 00:46:30] PHP Notice: Undefined variable: htmlRightBox in /home/tonicucoz/Apache/h-source/Application/Views/right.php on line 115
-[14-Oct-2010 00:46:32] PHP Notice: Undefined variable: htmlRightBox in /home/tonicucoz/Apache/h-source/Application/Views/right.php on line 115
diff --git a/h-source/Logs/index.html b/h-source/Logs/index.html
index 8d1c8b6..8d1c8b6 100644..100755
--- a/h-source/Logs/index.html
+++ b/h-source/Logs/index.html
diff --git a/h-source/Logs/where.log b/h-source/Logs/where.log
deleted file mode 100755
index 5afb91e..0000000
--- a/h-source/Logs/where.log
+++ /dev/null
@@ -1,1821 +0,0 @@
-
-[2010-04-08 00:52:52] IP:::1 URI: /easygiant/articles/index POST
-[2010-04-08 00:52:59] IP:::1 URI: /easygiant/articles/index POST
-[2010-04-08 00:53:37] IP:::1 URI: /easygiant/articles/view/17/$$ POST
-[2010-04-08 00:53:37] IP:::1 URI: /easygiant/personal/login POST
-[2010-04-08 00:53:49] IP:::1 URI: /easygiant/personal/login POST username:user password:user
-[2010-04-08 00:53:52] IP:::1 URI: /easygiant/articles/index POST
-[2010-04-08 00:53:58] IP:::1 URI: /easygiant/articles/view/17/$$ POST
-[2010-04-08 00:54:03] IP:::1 URI: /easygiant/messages/insert/17 POST
-[2010-04-08 00:54:03] IP:::1 URI: /easygiant/image/captcha POST
-[2010-04-08 00:54:51] IP:::1 URI: /easygiant/messages/insert/17 POST nome:Antonio messaggio:gallo captcha:6m7p3d insertAction:send
-[2010-04-08 00:54:51] IP:::1 URI: /easygiant/image/captcha POST
-[2010-04-08 00:55:06] IP:::1 URI: /easygiant/personal/logout POST
-[2010-04-08 00:55:15] IP:::1 URI: /easygiant/articles/index POST
-[2010-04-12 17:10:37] IP:::1 URI: /easygiant/panel/main POST
-[2010-04-12 17:10:38] IP:::1 URI: /easygiant/users/login POST
-[2010-04-12 17:10:43] IP:::1 URI: /easygiant/users/login POST username:admin password:admin
-[2010-04-12 17:10:46] IP:::1 URI: /easygiant/panel/main POST
-[2010-04-12 17:16:54] IP:::1 URI: /easygiant/articles/main POST
-[2010-04-12 17:17:48] IP:::1 URI: /easygiant/articles/main POST
-[2010-04-12 17:17:48] IP:::1 URI: /easygiant/External/tiny_mce/tiny_mce.js POST
-[2010-04-12 17:23:20] IP:::1 URI: /easygiant/articles/form/update/1/undef/undef POST generalAction:edit id:18
-[2010-04-12 17:23:20] IP:::1 URI: /easygiant/External/tiny_mce/tiny_mce.js POST
-[2010-04-12 17:23:23] IP:::1 URI: /easygiant/articles/form/update/1/undef/undef POST title:qwe author:qweqwe category:politica abstract:qwe content:<p>qeqwwe</p> id:18 updateAction:Save
-[2010-04-12 17:23:23] IP:::1 URI: /easygiant/External/tiny_mce/tiny_mce.js POST
-[2010-04-12 17:23:24] IP:::1 URI: /easygiant/articles/main/1/undef/undef POST
-[2010-04-12 17:23:24] IP:::1 URI: /easygiant/External/tiny_mce/tiny_mce.js POST
-[2010-04-12 17:23:26] IP:::1 URI: /easygiant/panel/main POST
-[2010-04-12 17:23:27] IP:::1 URI: /easygiant/articles/main POST
-[2010-04-12 17:23:27] IP:::1 URI: /easygiant/External/tiny_mce/tiny_mce.js POST
-[2010-04-12 17:23:29] IP:::1 URI: /easygiant/articles/main/2/undef/undef POST
-[2010-04-12 17:23:29] IP:::1 URI: /easygiant/External/tiny_mce/tiny_mce.js POST
-[2010-04-12 17:23:30] IP:::1 URI: /easygiant/articles/main/1/undef/undef POST
-[2010-04-12 17:23:30] IP:::1 URI: /easygiant/External/tiny_mce/tiny_mce.js POST
-[2010-04-12 17:23:55] IP:::1 URI: /easygiant/panel/main POST
-[2010-04-12 17:23:56] IP:::1 URI: /easygiant/category/main POST
-[2010-04-12 17:23:58] IP:::1 URI: /easygiant/category/form/insert/1/undef/token POST
-[2010-04-12 17:24:01] IP:::1 URI: /easygiant/category/form/insert/1/undef/token POST name:wer tick:1 visibile:1 categoria: css: meta_ita: insertAction:Save
-[2010-04-12 17:24:02] IP:::1 URI: /easygiant/category/main/1/undef/token POST
-[2010-04-12 17:24:05] IP:::1 URI: /easygiant/category/form/insert/1/undef/token POST
-[2010-04-12 17:24:08] IP:::1 URI: /easygiant/category/form/insert/1/undef/token POST name:ert tick:1 visibile:1 categoria: css: meta_ita: insertAction:Save
-[2010-04-12 17:24:11] IP:::1 URI: /easygiant/category/form/insert/1/undef/token POST name:etet tick:1 visibile:1 categoria: css: meta_ita: insertAction:Save
-[2010-04-12 17:24:13] IP:::1 URI: /easygiant/category/main/1/undef/token POST
-[2010-04-12 17:24:14] IP:::1 URI: /easygiant/category/main/2/undef/token POST
-[2010-04-12 17:24:16] IP:::1 URI: /easygiant/category/main/1/undef/token POST
-[2010-04-12 17:24:19] IP:::1 URI: /easygiant/category/main/2/undef/token POST
-[2010-04-12 17:24:20] IP:::1 URI: /easygiant/category/main/1/undef/token POST
-[2010-04-12 17:28:41] IP:::1 URI: /easygiant/category/main/1/undef/token POST
-[2010-04-12 17:31:50] IP:::1 URI: /easygiant/category/main/1/undef/token POST
-[2010-04-12 17:32:18] IP:::1 URI: /easygiant/category/main/1/undef/token POST
-[2010-04-12 17:32:44] IP:::1 URI: /easygiant/category/main/1/undef/token POST
-[2010-04-12 17:32:47] IP:::1 URI: /easygiant/category/form/update/1/undef/token POST generalAction_x:0 generalAction_y:0 id_navigation:126
-[2010-04-12 17:32:49] IP:::1 URI: /easygiant/category/form/update/1/undef/token POST name:etet tick:1 visibile:1 categoria: css: meta_ita: id_navigation:126 updateAction:Save
-[2010-04-12 17:32:50] IP:::1 URI: /easygiant/category/main/1/undef/token POST
-[2010-04-12 17:37:39] IP:::1 URI: /easygiant/category/main/1/undef/token POST
-[2010-04-12 17:37:49] IP:::1 URI: /easygiant/category/main/1/undef/token POST
-[2010-04-12 17:37:49] IP:::1 URI: /easygiant/category/main/1/undef/1uparrow.png POST
-[2010-04-12 17:38:02] IP:::1 URI: /easygiant/category/main/1/undef/token POST
-[2010-04-12 17:38:54] IP:::1 URI: /easygiant/category/main/1/undef/token POST
-[2010-04-12 17:39:16] IP:::1 URI: /easygiant/category/main/1/undef/token POST
-[2010-04-12 17:40:11] IP:::1 URI: /easygiant/category/main/1/undef/token POST
-[2010-04-12 17:41:03] IP:::1 URI: /easygiant/category/main/1/undef/token POST
-[2010-04-12 17:41:09] IP:::1 URI: /easygiant/category/form/update/1/undef/token POST generalAction_x:50 generalAction_y:47 id_navigation:126
-[2010-04-12 17:41:11] IP:::1 URI: /easygiant/category/main/1/undef/token POST
-[2010-04-12 17:41:12] IP:::1 URI: /easygiant/category/main/1/undef/token POST moveupAction_x:60 moveupAction_y:65 id_navigation:125
-[2010-04-12 17:41:14] IP:::1 URI: /easygiant/category/main/1/undef/token POST moveupAction_x:58 moveupAction_y:72 id_navigation:125
-[2010-04-12 17:41:20] IP:::1 URI: /easygiant/category/main/1/undef/token POST movedownAction_x:61 movedownAction_y:77 id_navigation:126
-[2010-04-12 17:41:21] IP:::1 URI: /easygiant/category/main/1/undef/token POST movedownAction_x:65 movedownAction_y:53 id_navigation:125
-[2010-04-12 17:41:33] IP:::1 URI: /easygiant/category/main/1/undef/token POST movedownAction_x:65 movedownAction_y:53 id_navigation:125
-[2010-04-12 17:41:35] IP:::1 URI: /easygiant/category/main/1/undef/token POST moveupAction:up id_navigation:125
-[2010-04-12 17:41:37] IP:::1 URI: /easygiant/category/main/1/undef/token POST moveupAction:up id_navigation:126
-[2010-04-12 17:42:38] IP:::1 URI: /easygiant/category/main/1/undef/token POST
-[2010-04-12 17:42:50] IP:::1 URI: /easygiant/category/main/1/undef/token POST
-[2010-04-12 17:42:52] IP:::1 URI: /easygiant/category/main/1/undef/token POST moveupAction_x:75 moveupAction_y:54 moveupAction:up id_navigation:125
-[2010-04-12 17:42:53] IP:::1 URI: /easygiant/category/main/1/undef/token POST moveupAction_x:77 moveupAction_y:30 moveupAction:up id_navigation:126
-[2010-04-12 17:42:54] IP:::1 URI: /easygiant/category/main/1/undef/token POST moveupAction_x:62 moveupAction_y:80 moveupAction:up id_navigation:126
-[2010-04-12 17:42:55] IP:::1 URI: /easygiant/category/main/1/undef/token POST moveupAction_x:55 moveupAction_y:74 moveupAction:up id_navigation:126
-[2010-04-12 17:45:45] IP:::1 URI: /easygiant/category/main/1/undef/token POST
-[2010-04-12 17:45:52] IP:::1 URI: /easygiant/category/main/1/undef/token POST
-[2010-04-12 17:46:15] IP:::1 URI: /easygiant/category/main/1/undef/token POST
-[2010-04-12 17:46:36] IP:::1 URI: /easygiant/category/main/1/undef/token POST
-[2010-04-12 17:46:41] IP:::1 URI: /easygiant/category/form/update/1/undef/token POST generalAction_x:13 generalAction_y:21 generalAction:edit id_navigation:126
-[2010-04-12 17:46:43] IP:::1 URI: /easygiant/category/main/1/undef/token POST
-[2010-04-12 17:46:44] IP:::1 URI: /easygiant/category/main/1/undef/token POST moveupAction_x:13 moveupAction_y:21 moveupAction:up id_navigation:125
-[2010-04-12 17:46:45] IP:::1 URI: /easygiant/category/main/1/undef/token POST moveupAction_x:19 moveupAction_y:10 moveupAction:up id_navigation:126
-[2010-04-12 17:46:48] IP:::1 URI: /easygiant/category/main/1/undef/token POST delAction_x:13 delAction_y:13 delAction:del id_navigation:126
-[2010-04-12 17:46:49] IP:::1 URI: /easygiant/category/main/1/undef/token POST delAction_x:13 delAction_y:13 delAction:del id_navigation:125
-[2010-04-12 17:46:50] IP:::1 URI: /easygiant/category/main/1/undef/token POST delAction_x:13 delAction_y:13 delAction:del id_navigation:124
-[2010-04-12 17:46:54] IP:::1 URI: /easygiant/category/main/1/undef/token POST moveupAction_x:17 moveupAction_y:18 moveupAction:up id_navigation:107
-[2010-04-12 17:46:54] IP:::1 URI: /easygiant/category/main/1/undef/token POST moveupAction_x:17 moveupAction_y:17 moveupAction:up id_navigation:110
-[2010-04-12 17:51:04] IP:::1 URI: /easygiant/category/main/1/undef/token POST
-[2010-04-12 17:51:13] IP:::1 URI: /easygiant/panel/main POST
-[2010-04-12 17:51:17] IP:::1 URI: /easygiant/post/main POST
-[2010-04-12 17:51:38] IP:::1 URI: /easygiant/post/main POST
-[2010-04-12 17:51:41] IP:::1 URI: /easygiant/panel/main POST
-[2010-04-12 17:51:42] IP:::1 URI: /easygiant/category/main POST
-[2010-04-12 17:51:53] IP:::1 URI: /easygiant/panel/main POST
-[2010-04-12 17:51:55] IP:::1 URI: /easygiant/users/main POST
-[2010-04-12 17:51:59] IP:::1 URI: /easygiant/panel/main POST
-[2010-04-12 17:54:07] IP:::1 URI: /easygiant/category/main POST
-[2010-04-12 17:56:10] IP:::1 URI: /easygiant/category/main/1/undef/token POST
-[2010-04-12 17:56:34] IP:::1 URI: /easygiant/category/main/1/undef/token POST
-[2010-04-12 18:33:10] IP:::1 URI: /easygiant/panel/main POST
-[2010-04-12 18:33:11] IP:::1 URI: /easygiant/users/login POST
-[2010-04-12 20:36:34] IP:::1 URI: /easygiant/panel/main POST
-[2010-04-12 20:36:35] IP:::1 URI: /easygiant/users/login POST
-[2010-04-12 20:36:40] IP:::1 URI: /easygiant/users/login POST username:admin password:admin
-[2010-04-12 20:36:44] IP:::1 URI: /easygiant/panel/main POST
-[2010-04-12 20:36:46] IP:::1 URI: /easygiant/category/main POST
-[2010-04-12 20:37:00] IP:::1 URI: /easygiant/category/main/1/undef/token POST moveupAction_x:13 moveupAction_y:25 moveupAction:up id_navigation:116
-[2010-04-12 20:37:02] IP:::1 URI: /easygiant/category/main/1/undef/token POST moveupAction_x:19 moveupAction_y:17 moveupAction:up id_navigation:119
-[2010-04-12 20:39:40] IP:::1 URI: /easygiant/category/main/1/undef/token POST moveupAction_x:28 moveupAction_y:24 moveupAction:up id_navigation:116
-[2010-04-12 20:39:41] IP:::1 URI: /easygiant/category/main/1/undef/token POST moveupAction_x:25 moveupAction_y:19 moveupAction:up id_navigation:119
-[2010-04-12 20:39:42] IP:::1 URI: /easygiant/category/main/1/undef/token POST moveupAction_x:20 moveupAction_y:25 moveupAction:up id_navigation:116
-[2010-04-12 20:39:43] IP:::1 URI: /easygiant/category/main/1/undef/token POST moveupAction_x:20 moveupAction_y:25 moveupAction:up id_navigation:119
-[2010-04-12 20:39:44] IP:::1 URI: /easygiant/category/main/1/undef/token POST moveupAction_x:20 moveupAction_y:25 moveupAction:up id_navigation:116
-[2010-04-12 20:39:45] IP:::1 URI: /easygiant/category/main/1/undef/token POST moveupAction_x:20 moveupAction_y:25 moveupAction:up id_navigation:119
-[2010-04-12 20:39:46] IP:::1 URI: /easygiant/category/main/1/undef/token POST moveupAction_x:20 moveupAction_y:25 moveupAction:up id_navigation:116
-[2010-04-12 20:39:47] IP:::1 URI: /easygiant/category/main/1/undef/token POST moveupAction_x:20 moveupAction_y:25 moveupAction:up id_navigation:119
-[2010-04-12 20:39:50] IP:::1 URI: /easygiant/category/main/1/undef/token POST moveupAction_x:15 moveupAction_y:22 moveupAction:up id_navigation:118
-[2010-04-12 20:39:51] IP:::1 URI: /easygiant/category/main/1/undef/token POST moveupAction_x:14 moveupAction_y:13 moveupAction:up id_navigation:116
-[2010-04-12 20:39:53] IP:::1 URI: /easygiant/category/main/1/234234/token POST
-[2010-04-12 20:39:55] IP:::1 URI: /easygiant/category/main/1/234234/token POST
-[2010-04-12 20:39:56] IP:::1 URI: /easygiant/category/main/1/undef/token POST
-[2010-04-12 20:39:58] IP:::1 URI: /easygiant/category/main/1/eee/token POST
-[2010-04-12 20:39:59] IP:::1 URI: /easygiant/category/main/1/234234/token POST
-[2010-04-12 20:40:00] IP:::1 URI: /easygiant/category/main/1/eee/token POST
-[2010-04-12 20:40:02] IP:::1 URI: /easygiant/category/main/1/undef/token POST
-[2010-04-12 20:41:20] IP:::1 URI: /easygiant/panel/main POST
-[2010-04-12 20:41:21] IP:::1 URI: /easygiant/pagine/main/1 POST
-[2010-04-12 20:41:25] IP:::1 URI: /easygiant/pagine/main/1/undef POST
-[2010-04-12 20:41:26] IP:::1 URI: /easygiant/pagine/main/1/undef POST
-[2010-04-12 20:41:26] IP:::1 URI: /easygiant/pagine/main/1/undef POST
-[2010-04-12 20:41:27] IP:::1 URI: /easygiant/pagine/main/1/undef POST
-[2010-04-12 20:41:30] IP:::1 URI: /easygiant/pagine/main/1/undef POST
-[2010-04-12 20:41:30] IP:::1 URI: /easygiant/pagine/main/1/undef POST
-[2010-04-12 20:41:32] IP:::1 URI: /easygiant/pagine/main/1/undef POST
-[2010-04-12 20:41:33] IP:::1 URI: /easygiant/pagine/main/1/undef POST
-[2010-04-12 20:41:35] IP:::1 URI: /easygiant/pagine/main/1/107 POST
-[2010-04-12 20:41:37] IP:::1 URI: /easygiant/pagine/main/1/110 POST
-[2010-04-12 20:41:38] IP:::1 URI: /easygiant/pagine/main/1/110 POST
-[2010-04-12 20:41:40] IP:::1 URI: /easygiant/pagine/main/1/undef POST
-[2010-04-12 20:58:36] IP:::1 URI: /easygiant/pagine/main/1/undef POST
-[2010-04-12 20:58:37] IP:::1 URI: /easygiant/pagine/main/1/undef POST moveupAction:up id_pagine:75
-[2010-04-12 20:58:38] IP:::1 URI: /easygiant/pagine/main/1/undef POST moveupAction:up id_pagine:77
-[2010-04-12 20:58:40] IP:::1 URI: /easygiant/pagine/main/1/undef POST moveupAction:up id_pagine:75
-[2010-04-12 20:58:41] IP:::1 URI: /easygiant/pagine/main/1/undef POST moveupAction:up id_pagine:77
-[2010-04-12 20:58:43] IP:::1 URI: /easygiant/pagine/main/1/undef POST moveupAction:up id_pagine:75
-[2010-04-12 20:58:44] IP:::1 URI: /easygiant/pagine/main/1/undef POST moveupAction:up id_pagine:77
-[2010-04-12 20:58:48] IP:::1 URI: /easygiant/pagine/main/1/undef POST moveupAction:up id_pagine:75
-[2010-04-12 20:58:49] IP:::1 URI: /easygiant/pagine/main/1/undef POST moveupAction:up id_pagine:77
-[2010-04-12 20:58:50] IP:::1 URI: /easygiant/pagine/main/1/undef POST moveupAction:up id_pagine:75
-[2010-04-12 20:58:51] IP:::1 URI: /easygiant/pagine/main/1/undef POST moveupAction:up id_pagine:77
-[2010-04-12 20:58:52] IP:::1 URI: /easygiant/pagine/main/1/undef POST moveupAction:up id_pagine:75
-[2010-04-12 20:58:54] IP:::1 URI: /easygiant/pagine/main/1/undef POST moveupAction:up id_pagine:77
-[2010-04-12 20:58:57] IP:::1 URI: /easygiant/pagine/form/update/1/undef POST generalAction:edit id_pagine:77
-[2010-04-12 20:58:58] IP:::1 URI: /easygiant/pagine/form/update/1/undef POST name:erw id_navigation:109 titolo: html:wer id_pagine:77 updateAction:Save
-[2010-04-12 20:59:00] IP:::1 URI: /easygiant/pagine/main/1/undef POST
-[2010-04-12 20:59:01] IP:::1 URI: /easygiant/pagine/main/1/undef POST
-[2010-04-12 20:59:02] IP:::1 URI: /easygiant/pagine/main/1/undef POST
-[2010-04-12 20:59:04] IP:::1 URI: /easygiant/pagine/main/1/undef POST moveupAction:up id_pagine:75
-[2010-04-12 20:59:05] IP:::1 URI: /easygiant/pagine/main/1/undef POST moveupAction:up id_pagine:77
-[2010-04-12 21:00:07] IP:::1 URI: /easygiant/pagine/main/1/undef POST
-[2010-04-12 21:00:21] IP:::1 URI: /easygiant/pagine/main/1/undef POST
-[2010-04-12 21:00:23] IP:::1 URI: /easygiant/pagine/main/1/undef POST moveupAction:up id_pagine:75
-[2010-04-12 21:00:24] IP:::1 URI: /easygiant/pagine/main/1/undef POST moveupAction:up id_pagine:77
-[2010-04-12 21:00:28] IP:::1 URI: /easygiant/pagine/main/1/undef POST delAction:del id_pagine:77
-[2010-04-12 21:00:31] IP:::1 URI: /easygiant/pagine/main/1/undef POST delAction:del id_pagine:75
-[2010-04-12 21:07:59] IP:::1 URI: /easygiant/pagine/main/1/undef POST moveupAction:up id_pagine:71
-[2010-04-12 21:08:20] IP:::1 URI: /easygiant/pagine/main/1/undef POST moveupAction:up id_pagine:71
-[2010-04-12 21:08:21] IP:::1 URI: /easygiant/pagine/main/1/undef POST moveupAction:up id_pagine:76
-[2010-04-12 21:08:22] IP:::1 URI: /easygiant/pagine/main/1/undef POST moveupAction:up id_pagine:71
-[2010-04-12 21:13:14] IP:::1 URI: /easygiant/pagine/main/1/undef POST moveupAction:up id_pagine:76
-[2010-04-12 21:13:16] IP:::1 URI: /easygiant/pagine/main/1/undef POST moveupAction:up id_pagine:73
-[2010-04-12 21:13:17] IP:::1 URI: /easygiant/pagine/main/1/undef POST moveupAction:up id_pagine:73
-[2010-04-12 21:13:18] IP:::1 URI: /easygiant/pagine/main/1/undef POST moveupAction:up id_pagine:76
-[2010-04-12 21:13:19] IP:::1 URI: /easygiant/pagine/main/1/undef POST moveupAction:up id_pagine:73
-[2010-04-12 21:13:20] IP:::1 URI: /easygiant/pagine/main/1/undef POST moveupAction:up id_pagine:76
-[2010-04-12 21:13:22] IP:::1 URI: /easygiant/pagine/main/1/undef POST moveupAction:up id_pagine:71
-[2010-04-12 21:13:23] IP:::1 URI: /easygiant/pagine/main/1/undef POST moveupAction:up id_pagine:71
-[2010-04-12 21:13:24] IP:::1 URI: /easygiant/pagine/main/1/undef POST moveupAction:up id_pagine:76
-[2010-04-12 21:13:24] IP:::1 URI: /easygiant/pagine/main/1/undef POST moveupAction:up id_pagine:73
-[2010-04-12 21:13:28] IP:::1 URI: /easygiant/panel/main POST
-[2010-04-12 21:13:29] IP:::1 URI: /easygiant/articles/main POST
-[2010-04-12 21:13:30] IP:::1 URI: /easygiant/External/tiny_mce/tiny_mce.js POST
-[2010-04-12 21:13:33] IP:::1 URI: /easygiant/articles/main/2/undef/undef POST
-[2010-04-12 21:13:34] IP:::1 URI: /easygiant/External/tiny_mce/tiny_mce.js POST
-[2010-04-12 21:13:35] IP:::1 URI: /easygiant/articles/main/1/undef/undef POST
-[2010-04-12 21:13:35] IP:::1 URI: /easygiant/External/tiny_mce/tiny_mce.js POST
-[2010-04-12 21:13:36] IP:::1 URI: /easygiant/panel/main POST
-[2010-04-12 21:13:37] IP:::1 URI: /easygiant/articles/main POST
-[2010-04-12 21:13:38] IP:::1 URI: /easygiant/External/tiny_mce/tiny_mce.js POST
-[2010-04-12 21:13:40] IP:::1 URI: /easygiant/panel/main POST
-[2010-04-12 21:13:41] IP:::1 URI: /easygiant/pagine/main/1 POST
-[2010-04-12 21:13:43] IP:::1 URI: /easygiant/pagine/main/1/undef POST
-[2010-04-12 21:13:44] IP:::1 URI: /easygiant/panel/main POST
-[2010-04-12 21:13:45] IP:::1 URI: /easygiant/category/main POST
-[2010-04-12 21:13:47] IP:::1 URI: /easygiant/category/main/1/undef/token POST moveupAction_x:26 moveupAction_y:9 moveupAction:up id_navigation:116
-[2010-04-12 21:13:49] IP:::1 URI: /easygiant/category/main/1/undef/token POST moveupAction_x:21 moveupAction_y:21 moveupAction:up id_navigation:119
-[2010-04-12 21:13:50] IP:::1 URI: /easygiant/category/main/1/undef/token POST moveupAction_x:21 moveupAction_y:21 moveupAction:up id_navigation:116
-[2010-04-12 21:13:51] IP:::1 URI: /easygiant/category/main/1/undef/token POST moveupAction_x:19 moveupAction_y:20 moveupAction:up id_navigation:119
-[2010-04-12 21:13:51] IP:::1 URI: /easygiant/category/main/1/undef/token POST moveupAction_x:19 moveupAction_y:20 moveupAction:up id_navigation:116
-[2010-04-12 21:18:04] IP:::1 URI: /easygiant/category/main/1/undef/token POST moveupAction_x:22 moveupAction_y:24 moveupAction:up id_navigation:119
-[2010-04-12 21:18:05] IP:::1 URI: /easygiant/category/main/1/undef/token POST moveupAction_x:18 moveupAction_y:28 moveupAction:up id_navigation:116
-[2010-04-12 21:22:20] IP:::1 URI: /easygiant/category/main/1/undef/token POST moveupAction_x:17 moveupAction_y:27 moveupAction:up id_navigation:116
-[2010-04-12 21:22:21] IP:::1 URI: /easygiant/category/main/1/undef/token POST moveupAction_x:19 moveupAction_y:22 moveupAction:up id_navigation:118
-[2010-04-12 21:22:22] IP:::1 URI: /easygiant/category/main/1/undef/token POST moveupAction_x:20 moveupAction_y:13 moveupAction:up id_navigation:118
-[2010-04-12 21:22:23] IP:::1 URI: /easygiant/category/main/1/undef/token POST movedownAction_x:10 movedownAction_y:24 movedownAction:down id_navigation:116
-[2010-04-12 21:22:25] IP:::1 URI: /easygiant/category/main/1/undef/token POST movedownAction_x:17 movedownAction_y:18 movedownAction:down id_navigation:116
-[2010-04-12 21:22:25] IP:::1 URI: /easygiant/category/main/1/undef/token POST moveupAction_x:24 moveupAction_y:22 moveupAction:up id_navigation:115
-[2010-04-12 21:22:26] IP:::1 URI: /easygiant/category/main/1/undef/token POST moveupAction_x:25 moveupAction_y:20 moveupAction:up id_navigation:115
-[2010-04-12 21:23:02] IP:::1 URI: /easygiant/category/main/1/undef/token POST
-[2010-04-12 21:25:52] IP:::1 URI: /easygiant/category/main/1/undef/token POST
-[2010-04-12 21:26:16] IP:::1 URI: /easygiant/category/main/1/undef/token POST
-[2010-04-12 21:26:18] IP:::1 URI: /easygiant/category/main/1/undef/token POST
-[2010-04-12 21:27:10] IP:::1 URI: /easygiant/category/main/1/undef/token POST
-[2010-04-12 21:27:52] IP:::1 URI: /easygiant/category/main/1/undef/token POST
-[2010-04-12 21:28:00] IP:::1 URI: /easygiant/category/main/1/undef/token POST
-[2010-04-12 21:28:45] IP:::1 URI: /easygiant/category/main/1/undef/token POST
-[2010-04-12 21:29:04] IP:::1 URI: /easygiant/category/main/1/undef/token POST
-[2010-04-12 21:29:26] IP:::1 URI: /easygiant/category/main/1/undef/token POST
-[2010-04-12 21:30:06] IP:::1 URI: /easygiant/category/main/1/undef/token POST
-[2010-04-12 21:30:09] IP:::1 URI: /easygiant/category/main/1/undef/token POST movedownAction_x:16 movedownAction_y:18 movedownAction:down id_navigation:110
-[2010-04-12 21:30:11] IP:::1 URI: /easygiant/category/main/1/undef/token POST movedownAction_x:14 movedownAction_y:21 movedownAction:down id_navigation:107
-[2010-04-12 21:30:13] IP:::1 URI: /easygiant/category/main/1/undef/token POST movedownAction_x:17 movedownAction_y:20 movedownAction:down id_navigation:110
-[2010-04-12 21:30:15] IP:::1 URI: /easygiant/category/main/1/undef/token POST moveupAction_x:24 moveupAction_y:23 moveupAction:up id_navigation:118
-[2010-04-12 21:30:24] IP:::1 URI: /easygiant/panel/main POST
-[2010-04-12 21:30:25] IP:::1 URI: /easygiant/category/main POST
-[2010-04-12 21:30:27] IP:::1 URI: /easygiant/category/form/insert/1/undef/token POST
-[2010-04-12 21:30:31] IP:::1 URI: /easygiant/category/form/insert/1/undef/token POST name:qwewqe tick:1 visibile:1 categoria: css: meta_ita: insertAction:Save
-[2010-04-12 21:30:35] IP:::1 URI: /easygiant/category/form/insert/1/undef/token POST name:qwewqe tick:1 visibile:1 categoria: css: meta_ita: insertAction:Save
-[2010-04-12 21:30:37] IP:::1 URI: /easygiant/category/form/insert/1/undef/token POST name:werewrerw tick:1 visibile:1 categoria: css: meta_ita: insertAction:Save
-[2010-04-12 21:30:40] IP:::1 URI: /easygiant/category/form/insert/1/undef/token POST name:retert tick:1 visibile:1 categoria: css: meta_ita: insertAction:Save
-[2010-04-12 21:30:41] IP:::1 URI: /easygiant/category/main/1/undef/token POST
-[2010-04-12 21:30:43] IP:::1 URI: /easygiant/category/main/2/undef/token POST
-[2010-04-12 21:30:48] IP:::1 URI: /easygiant/category/main/2/undef/token POST moveupAction_x:20 moveupAction_y:24 moveupAction:up id_navigation:110
-[2010-04-12 21:30:50] IP:::1 URI: /easygiant/category/main/2/undef/token POST moveupAction_x:21 moveupAction_y:21 moveupAction:up id_navigation:107
-[2010-04-12 21:30:51] IP:::1 URI: /easygiant/category/main/2/undef/token POST moveupAction_x:18 moveupAction_y:36 moveupAction:up id_navigation:110
-[2010-04-12 21:30:53] IP:::1 URI: /easygiant/category/main/2/undef/token POST moveupAction_x:15 moveupAction_y:29 moveupAction:up id_navigation:107
-[2010-04-12 21:30:55] IP:::1 URI: /easygiant/category/main/1/undef/token POST
-[2010-04-12 21:30:57] IP:::1 URI: /easygiant/panel/main POST
-[2010-04-12 21:30:58] IP:::1 URI: /easygiant/pagine/main/1 POST
-[2010-04-12 21:31:00] IP:::1 URI: /easygiant/pagine/form/insert/1/undef POST
-[2010-04-12 21:31:04] IP:::1 URI: /easygiant/pagine/form/insert/1/undef POST name:werwer id_navigation:109 titolo:wer html:wer insertAction:Save
-[2010-04-12 21:31:09] IP:::1 URI: /easygiant/pagine/form/insert/1/undef POST name:werwer id_navigation:109 titolo: html:wer insertAction:Save
-[2010-04-12 21:31:13] IP:::1 URI: /easygiant/pagine/form/insert/1/undef POST name:546456 id_navigation:109 titolo: html:456 insertAction:Save
-[2010-04-12 21:31:15] IP:::1 URI: /easygiant/pagine/form/insert/1/undef POST name:6756 id_navigation:109 titolo: html:567 insertAction:Save
-[2010-04-12 21:31:18] IP:::1 URI: /easygiant/pagine/form/insert/1/undef POST name:dfgdfg id_navigation:109 titolo: html:dfg insertAction:Save
-[2010-04-12 21:31:22] IP:::1 URI: /easygiant/pagine/form/insert/1/undef POST name:fjh id_navigation:110 titolo: html:fj insertAction:Save
-[2010-04-12 21:31:27] IP:::1 URI: /easygiant/pagine/form/insert/1/undef POST name:fghjgj id_navigation:110 titolo: html:ghjgj insertAction:Save
-[2010-04-12 21:31:32] IP:::1 URI: /easygiant/pagine/form/insert/1/undef POST name:789869 id_navigation:110 titolo: html:689879 insertAction:Save
-[2010-04-12 21:31:33] IP:::1 URI: /easygiant/pagine/main/1/undef POST
-[2010-04-12 21:31:36] IP:::1 URI: /easygiant/pagine/main/2/undef POST
-[2010-04-12 21:31:40] IP:::1 URI: /easygiant/pagine/main/1/109 POST
-[2010-04-12 21:31:43] IP:::1 URI: /easygiant/pagine/main/1/107 POST
-[2010-04-12 21:31:50] IP:::1 URI: /easygiant/pagine/main/1/110 POST
-[2010-04-12 21:31:52] IP:::1 URI: /easygiant/pagine/main/1/107 POST
-[2010-04-12 21:31:53] IP:::1 URI: /easygiant/pagine/main/1/107 POST movedownAction:down id_pagine:72
-[2010-04-12 21:31:56] IP:::1 URI: /easygiant/pagine/main/1/107 POST
-[2010-04-12 21:31:58] IP:::1 URI: /easygiant/pagine/main/1/109 POST
-[2010-04-12 21:32:07] IP:::1 URI: /easygiant/pagine/main/1/109 POST
-[2010-04-12 21:32:09] IP:::1 URI: /easygiant/pagine/main/1/109 POST
-[2010-04-12 21:32:11] IP:::1 URI: /easygiant/pagine/main/1/undef POST
-[2010-04-12 21:32:13] IP:::1 URI: /easygiant/pagine/main/2/undef POST
-[2010-04-12 21:32:14] IP:::1 URI: /easygiant/pagine/main/1/undef POST
-[2010-04-12 21:32:16] IP:::1 URI: /easygiant/pagine/main/2/undef POST
-[2010-04-12 21:32:18] IP:::1 URI: /easygiant/pagine/main/1/undef POST
-[2010-04-12 21:32:41] IP:::1 URI: /easygiant/pagine/main/1/undef POST
-[2010-04-12 21:32:43] IP:::1 URI: /easygiant/panel/main POST
-[2010-04-12 21:32:44] IP:::1 URI: /easygiant/category/main POST
-[2010-04-12 21:32:51] IP:::1 URI: /easygiant/category/main/1/undef/token POST
-[2010-04-12 21:32:59] IP:::1 URI: /easygiant/category/main/1/undef/token POST
-[2010-04-12 21:33:03] IP:::1 URI: /easygiant/category/main/2/undef/token POST
-[2010-04-12 21:33:05] IP:::1 URI: /easygiant/category/main/1/undef/token POST
-[2010-04-12 21:33:07] IP:::1 URI: /easygiant/panel/main POST
-[2010-04-12 21:33:08] IP:::1 URI: /easygiant/articles/main POST
-[2010-04-12 21:33:08] IP:::1 URI: /easygiant/External/tiny_mce/tiny_mce.js POST
-[2010-04-12 21:33:12] IP:::1 URI: /easygiant/panel/main POST
-[2010-04-12 21:33:13] IP:::1 URI: /easygiant/pagine/main/1 POST
-[2010-04-12 21:33:18] IP:::1 URI: /easygiant/panel/main POST
-[2010-04-12 21:33:19] IP:::1 URI: /easygiant/category/main POST
-[2010-04-12 21:33:23] IP:::1 URI: /easygiant/category/form/update/1/undef/token POST generalAction_x:16 generalAction_y:16 generalAction:edit id_navigation:130
-[2010-04-12 21:33:25] IP:::1 URI: /easygiant/category/form/update/1/undef/token POST name:retert tick:1 visibile:1 categoria: css: meta_ita: id_navigation:130 updateAction:Save
-[2010-04-12 21:33:26] IP:::1 URI: /easygiant/category/main/1/undef/token POST
-[2010-04-12 21:33:33] IP:::1 URI: /easygiant/panel/main POST
-[2010-04-12 21:33:34] IP:::1 URI: /easygiant/pagine/main/1 POST
-[2010-04-12 21:33:44] IP:::1 URI: /easygiant/pagine/main/1/110 POST
-[2010-04-12 21:33:46] IP:::1 URI: /easygiant/pagine/main/1/107 POST
-[2010-04-12 21:42:18] IP:::1 URI: /easygiant/pagine/main/1/107 POST
-[2010-04-12 21:42:22] IP:::1 URI: /easygiant/users/login POST
-[2010-04-12 21:42:24] IP:::1 URI: /easygiant/users/login POST username:admin password:admin
-[2010-04-12 21:42:28] IP:::1 URI: /easygiant/panel/main POST
-[2010-04-12 21:42:31] IP:::1 URI: /easygiant/pagine/main/1 POST
-[2010-04-12 21:43:18] IP:::1 URI: /easygiant/pagine/main/1/undef POST
-[2010-04-12 21:43:42] IP:::1 URI: /easygiant/pagine/main/1/undef POST
-[2010-04-12 21:43:45] IP:::1 URI: /easygiant/pagine/main/1/107 POST
-[2010-04-12 21:43:49] IP:::1 URI: /easygiant/pagine/main/1/110 POST
-[2010-04-12 21:43:52] IP:::1 URI: /easygiant/pagine/main/1/128 POST
-[2010-04-12 21:43:54] IP:::1 URI: /easygiant/pagine/main/1/129 POST
-[2010-04-12 21:43:57] IP:::1 URI: /easygiant/pagine/main/1/undef POST
-[2010-04-12 21:43:59] IP:::1 URI: /easygiant/pagine/main/2/undef POST
-[2010-04-12 21:44:01] IP:::1 URI: /easygiant/panel/main POST
-[2010-04-12 21:44:02] IP:::1 URI: /easygiant/pagine/main/1 POST
-[2010-04-12 21:44:04] IP:::1 URI: /easygiant/panel/main POST
-[2010-04-12 21:44:05] IP:::1 URI: /easygiant/category/main POST
-[2010-04-12 21:44:07] IP:::1 URI: /easygiant/panel/main POST
-[2010-04-12 21:44:08] IP:::1 URI: /easygiant/category/main POST
-[2010-04-12 21:44:10] IP:::1 URI: /easygiant/category/main/2/undef/token POST
-[2010-04-12 21:44:12] IP:::1 URI: /easygiant/category/main/1/undef/token POST
-[2010-04-12 21:44:13] IP:::1 URI: /easygiant/category/main/2/undef/token POST
-[2010-04-12 21:44:15] IP:::1 URI: /easygiant/category/main/2/undef/token POST moveupAction_x:14 moveupAction_y:15 moveupAction:up id_navigation:107
-[2010-04-12 21:44:17] IP:::1 URI: /easygiant/category/main/2/undef/token POST moveupAction_x:18 moveupAction_y:18 moveupAction:up id_navigation:109
-[2010-04-12 21:46:46] IP:::1 URI: /easygiant/category/main/2/undef/token POST
-[2010-04-12 21:47:41] IP:::1 URI: /easygiant/category/main/2/undef/token POST
-[2010-04-12 21:47:43] IP:::1 URI: /easygiant/category/main/1/undef/token POST
-[2010-04-12 21:47:45] IP:::1 URI: /easygiant/category/main/2/undef/token POST
-[2010-04-12 21:47:46] IP:::1 URI: /easygiant/category/main/1/undef/token POST
-[2010-04-12 21:47:48] IP:::1 URI: /easygiant/category/main/2/undef/token POST
-[2010-04-12 21:47:50] IP:::1 URI: /easygiant/category/main/1/undef/token POST
-[2010-04-12 21:47:51] IP:::1 URI: /easygiant/category/main/2/undef/token POST
-[2010-04-12 21:48:00] IP:::1 URI: /easygiant/category/main/2/undef/token POST
-[2010-04-12 21:48:01] IP:::1 URI: /easygiant/category/main/1/undef/token POST
-[2010-04-12 21:48:04] IP:::1 URI: /easygiant/panel/main POST
-[2010-04-12 21:48:05] IP:::1 URI: /easygiant/users/main POST
-[2010-04-12 21:48:08] IP:::1 URI: /easygiant/panel/main POST
-[2010-04-12 21:48:10] IP:::1 URI: /easygiant/box/main POST
-[2010-04-12 21:48:11] IP:::1 URI: /easygiant/panel/main POST
-[2010-04-12 21:48:12] IP:::1 URI: /easygiant/news/main POST
-[2010-04-12 21:48:14] IP:::1 URI: /easygiant/panel/main POST
-[2010-04-12 21:48:15] IP:::1 URI: /easygiant/post/main POST
-[2010-04-12 21:48:17] IP:::1 URI: /easygiant/post/main/2/undefi/undefi/undefi/undefi/undefi/undefi POST
-[2010-04-12 21:48:19] IP:::1 URI: /easygiant/post/main/1/undefi/undefi/undefi/undefi/undefi/undefi POST
-[2010-04-12 21:48:21] IP:::1 URI: /easygiant/post/main/1/undefi/undefi/undefi/undefi/Friday/undefi POST
-[2010-04-12 21:48:22] IP:::1 URI: /easygiant/post/main/1/undefi/undefi/undefi/11/Friday/undefi POST
-[2010-04-12 21:48:25] IP:::1 URI: /easygiant/post/main/1/undefi/undefi/1/11/Friday/undefi POST
-[2010-04-12 21:48:26] IP:::1 URI: /easygiant/post/main/1/undefi/undefi/1/11/Friday/undefi POST
-[2010-04-12 21:48:29] IP:::1 URI: /easygiant/post/main/1/undefi/undefi/1/11/undefi/undefi POST
-[2010-04-12 21:48:30] IP:::1 URI: /easygiant/post/main/1/undefi/undefi/1/undefi/undefi/undefi POST
-[2010-04-12 21:48:31] IP:::1 URI: /easygiant/post/main/1/undefi/undefi/undefi/undefi/undefi/undefi POST
-[2010-04-12 21:48:34] IP:::1 URI: /easygiant/post/main/1/undefi/undefi/undefi/undefi/undefi/undefi POST
-[2010-04-12 21:58:24] IP:::1 URI: /easygiant/post/main/2/undefi/undefi/undefi/undefi/undefi/undefi POST
-[2010-04-12 21:58:25] IP:::1 URI: /easygiant/post/main/1/undefi/undefi/undefi/undefi/undefi/undefi POST
-[2010-04-12 22:02:04] IP:::1 URI: /easygiant/panel/main POST
-[2010-04-12 22:02:05] IP:::1 URI: /easygiant/pagine/main/1 POST
-[2010-04-12 22:02:11] IP:::1 URI: /easygiant/pagine/form/update/1/undef POST generalAction:edit id_pagine:84
-[2010-04-12 22:02:24] IP:::1 URI: /easygiant/pagine/form/update/1/undef POST name:789869 id_navigation:110 titolo: html:689879 id_pagine:84 updateAction:Save
-[2010-04-12 22:02:25] IP:::1 URI: /easygiant/pagine/form/update/1/undef POST name:789869 id_navigation:110 titolo: html:689879 id_pagine:84 updateAction:Save
-[2010-04-12 22:02:29] IP:::1 URI: /easygiant/pagine/main/1/undef POST
-[2010-04-12 22:02:31] IP:::1 URI: /easygiant/pagine/form/update/1/undef POST generalAction:edit id_pagine:84
-[2010-04-12 22:02:46] IP:::1 URI: /easygiant/pagine/form/update/1/undef POST name:789869 id_navigation:110 titolo: html:689879 id_pagine:84 updateAction:Save
-[2010-04-12 22:05:07] IP:::1 URI: /easygiant/pagine/form/update/1/undef POST name:789869 id_navigation:110 titolo: html:bello id_pagine:84 updateAction:Save
-[2010-04-12 22:05:28] IP:::1 URI: /easygiant/pagine/form/update/1/undef POST name:789869 id_navigation:110 titolo: html:cazzone id_pagine:84 updateAction:Save
-[2010-04-12 22:05:30] IP:::1 URI: /easygiant/pagine/form/update/1/undef POST name:789869 id_navigation:110 titolo:1 html:12 id_pagine:84 updateAction:Save
-[2010-04-12 22:05:31] IP:::1 URI: /easygiant/pagine/main/1/undef POST
-[2010-04-12 22:06:02] IP:::1 URI: /easygiant/pagine/form/update/1/undef POST generalAction:edit id_pagine:84
-[2010-04-12 22:06:05] IP:::1 URI: /easygiant/pagine/form/update/1/undef POST name:1 id_navigation:110 titolo:1 html:12 id_pagine:84 updateAction:Save
-[2010-04-12 22:06:06] IP:::1 URI: /easygiant/pagine/main/1/undef POST
-[2010-04-12 22:13:03] IP:::1 URI: /easygiant/panel/main POST
-[2010-04-12 22:13:04] IP:::1 URI: /easygiant/post/main POST
-[2010-04-12 22:13:07] IP:::1 URI: /easygiant/postnew/main POST
-[2010-04-12 22:13:13] IP:::1 URI: /easygiant/postnew/main/2/undef/undef/undef POST
-[2010-04-12 22:13:14] IP:::1 URI: /easygiant/postnew/main/1/undef/undef/undef POST
-[2010-04-13 00:28:33] IP:::1 URI: /easygiant/panel/main POST
-[2010-04-13 00:28:34] IP:::1 URI: /easygiant/users/login POST
-[2010-04-13 00:28:39] IP:::1 URI: /easygiant/users/login POST username:admin password:admin
-[2010-04-13 00:28:42] IP:::1 URI: /easygiant/panel/main POST
-[2010-04-13 00:29:01] IP:::1 URI: /easygiant/articles/main POST
-[2010-04-13 00:29:01] IP:::1 URI: /easygiant/External/tiny_mce/tiny_mce.js POST
-[2010-04-13 00:29:03] IP:::1 URI: /easygiant/articles/main/2/undef/undef POST
-[2010-04-13 00:29:03] IP:::1 URI: /easygiant/External/tiny_mce/tiny_mce.js POST
-[2010-04-13 00:29:05] IP:::1 URI: /easygiant/panel/main POST
-[2010-04-13 00:29:05] IP:::1 URI: /easygiant/category/main POST
-[2010-04-13 00:29:07] IP:::1 URI: /easygiant/category/main/2/undef/token POST
-[2010-04-13 00:29:14] IP:::1 URI: /easygiant/category/main/2/undef/token POST delAction_x:15 delAction_y:17 delAction:del id_navigation:107
-[2010-04-13 00:29:16] IP:::1 URI: /easygiant/panel/main POST
-[2010-04-13 00:29:18] IP:::1 URI: /easygiant/category/main POST
-[2010-04-13 00:29:20] IP:::1 URI: /easygiant/category/main/1/undef/token POST delAction_x:18 delAction_y:16 delAction:del id_navigation:130
-[2010-04-13 00:29:22] IP:::1 URI: /easygiant/category/main/2/undef/token POST
-[2010-04-13 00:29:24] IP:::1 URI: /easygiant/category/form/update/2/undef/token POST generalAction_x:19 generalAction_y:17 generalAction:edit id_navigation:110
-[2010-04-13 00:29:25] IP:::1 URI: /easygiant/category/main/2/undef/token POST
-[2010-04-13 00:29:28] IP:::1 URI: /easygiant/category/main/1/undef/token POST
-[2010-04-13 00:29:33] IP:::1 URI: /easygiant/category/main/2/undef/token POST
-[2010-04-13 00:32:02] IP:::1 URI: /easygiant/category/main/2/undef/token POST
-[2010-04-13 00:32:05] IP:::1 URI: /easygiant/category/main/2/undef/token POST moveupAction_x:14 moveupAction_y:16 moveupAction:up id_navigation:110
-[2010-04-13 00:32:07] IP:::1 URI: /easygiant/category/main/2/undef/token POST moveupAction_x:11 moveupAction_y:23 moveupAction:up id_navigation:107
-[2010-04-13 00:32:08] IP:::1 URI: /easygiant/category/main/1/undef/token POST
-[2010-04-13 00:32:42] IP:::1 URI: /easygiant/category/main/1/eee/token POST
-[2010-04-13 00:32:53] IP:::1 URI: /easygiant/category/form/update/1/eee/token POST generalAction_x:22 generalAction_y:16 generalAction:edit id_navigation:119
-[2010-04-13 00:32:55] IP:::1 URI: /easygiant/category/main/1/eee/token POST
-[2010-04-13 00:37:03] IP:::1 URI: /easygiant/category/main/1/prima/token POST
-[2010-04-13 00:37:05] IP:::1 URI: /easygiant/panel/main POST
-[2010-04-13 00:37:06] IP:::1 URI: /easygiant/pagine/main/1 POST
-[2010-04-13 00:37:08] IP:::1 URI: /easygiant/pagine/main/2/undef POST
-[2010-04-13 00:37:14] IP:::1 URI: /easygiant/pagine/main/1/109 POST
-[2010-04-13 00:37:16] IP:::1 URI: /easygiant/pagine/main/1/107 POST
-[2010-04-13 00:37:21] IP:::1 URI: /easygiant/pagine/form/update/1/107 POST generalAction:edit id_pagine:72
-[2010-04-13 00:37:22] IP:::1 URI: /easygiant/pagine/main/1/107 POST
-[2010-04-13 00:37:24] IP:::1 URI: /easygiant/pagine/form/update/1/107 POST generalAction:edit id_pagine:72
-[2010-04-13 00:37:31] IP:::1 URI: /easygiant/pagine/main/1/107 POST
-[2010-04-13 00:37:33] IP:::1 URI: /easygiant/panel/main POST
-[2010-04-13 00:37:33] IP:::1 URI: /easygiant/users/logout POST
-[2010-04-13 00:37:35] IP:::1 URI: /easygiant/users/login POST
-[2010-04-13 00:37:39] IP:::1 URI: /easygiant/users/login POST username:admin password:admin
-[2010-04-13 00:37:42] IP:::1 URI: /easygiant/panel/main POST
-[2010-04-13 00:37:44] IP:::1 URI: /easygiant/pagine/main/1 POST
-[2010-04-13 00:37:47] IP:::1 URI: /easygiant/pagine/main/1/110 POST
-[2010-04-13 00:37:49] IP:::1 URI: /easygiant/pagine/main/1/107 POST
-[2010-04-13 00:37:52] IP:::1 URI: /easygiant/panel/main POST
-[2010-04-13 00:37:53] IP:::1 URI: /easygiant/category/main POST
-[2010-04-13 00:37:55] IP:::1 URI: /easygiant/category/main/2/undef/token POST
-[2010-04-13 00:38:22] IP:::1 URI: /easygiant/category/form/update/2/undef/token POST generalAction_x:17 generalAction_y:20 generalAction:edit id_navigation:110
-[2010-04-13 00:38:23] IP:::1 URI: /easygiant/category/main/2/undef/token POST
-[2010-04-13 00:38:24] IP:::1 URI: /easygiant/category/form/update/2/undef/token POST generalAction_x:19 generalAction_y:27 generalAction:edit id_navigation:110
-[2010-04-13 00:38:26] IP:::1 URI: /easygiant/category/main/2/undef/token POST
-[2010-04-13 00:40:04] IP:::1 URI: /easygiant/panel/main POST
-[2010-04-13 00:40:05] IP:::1 URI: /easygiant/users/logout POST
-[2010-04-13 00:40:06] IP:::1 URI: /easygiant/users/login POST
-[2010-04-13 20:33:54] IP:::1 URI: /easygiant/panel/main POST
-[2010-04-13 20:33:55] IP:::1 URI: /easygiant/users/login POST
-[2010-04-13 20:34:00] IP:::1 URI: /easygiant/users/login POST username:admin password:admin
-[2010-04-13 20:34:03] IP:::1 URI: /easygiant/panel/main POST
-[2010-04-13 20:34:26] IP:::1 URI: /easygiant/pagine/main/1 POST
-[2010-04-13 20:34:27] IP:::1 URI: /easygiant/panel/main POST
-[2010-04-13 20:34:28] IP:::1 URI: /easygiant/category/main POST
-[2010-04-13 20:35:50] IP:::1 URI: /easygiant/category/main/1/undef/token POST
-[2010-04-13 20:35:51] IP:::1 URI: /easygiant/category/main/1/undef/token POST x:15 y:18 moveupAction:up id_navigation:128
-[2010-04-13 20:35:52] IP:::1 URI: /easygiant/category/main/1/undef/token POST x:14 y:14 moveupAction:up id_navigation:129
-[2010-04-13 20:35:54] IP:::1 URI: /easygiant/category/main/1/undef/token POST x:12 y:19 moveupAction:up id_navigation:128
-[2010-04-13 20:35:56] IP:::1 URI: /easygiant/category/main/1/undef/token POST x:18 y:19 moveupAction:up id_navigation:129
-[2010-04-13 20:35:58] IP:::1 URI: /easygiant/category/main/1/undef/token POST x:14 y:15 movedownAction:down id_navigation:129
-[2010-04-13 20:35:59] IP:::1 URI: /easygiant/category/main/2/undef/token POST
-[2010-04-13 20:36:01] IP:::1 URI: /easygiant/category/main/2/undef/token POST x:12 y:15 moveupAction:up id_navigation:110
-[2010-04-13 20:36:02] IP:::1 URI: /easygiant/category/main/2/undef/token POST x:18 y:17 moveupAction:up id_navigation:107
-[2010-04-13 20:36:03] IP:::1 URI: /easygiant/category/main/1/undef/token POST
-[2010-04-13 20:36:46] IP:::1 URI: /easygiant/category/main/1/undef/token POST x:7 y:16 delAction:del id_navigation:128
-[2010-04-13 20:36:49] IP:::1 URI: /easygiant/category/form/insert/1/undef/token POST
-[2010-04-13 20:36:53] IP:::1 URI: /easygiant/category/form/insert/1/undef/token POST name:qwe tick:1 visibile:1 categoria:qwe css:qwe meta_ita: insertAction:Save
-[2010-04-13 20:37:00] IP:::1 URI: /easygiant/category/form/insert/1/undef/token POST name:qwe tick:1 visibile:1 categoria:11 css:11 meta_ita: insertAction:Save
-[2010-04-13 20:37:01] IP:::1 URI: /easygiant/category/main/1/undef/token POST
-[2010-04-13 20:37:03] IP:::1 URI: /easygiant/category/main/2/undef/token POST
-[2010-04-13 20:37:04] IP:::1 URI: /easygiant/category/main/1/undef/token POST
-[2010-04-13 20:37:06] IP:::1 URI: /easygiant/panel/main POST
-[2010-04-13 20:37:06] IP:::1 URI: /easygiant/users/logout POST
-[2010-04-13 20:37:08] IP:::1 URI: /easygiant/users/login POST
-[2010-04-14 22:40:36] IP:::1 URI: /easygiant/panel/main POST
-[2010-04-14 22:40:37] IP:::1 URI: /easygiant/users/login POST
-[2010-04-14 22:40:41] IP:::1 URI: /easygiant/users/login POST username:admin password:admin
-[2010-04-14 22:40:44] IP:::1 URI: /easygiant/panel/main POST
-[2010-04-14 22:46:52] IP:::1 URI: /easygiant/pagine/main/1 POST
-[2010-04-14 22:46:53] IP:::1 URI: /easygiant/panel/main POST
-[2010-04-14 22:47:41] IP:::1 URI: /easygiant/category/main POST
-[2010-04-14 22:47:42] IP:::1 URI: /easygiant/panel/main POST
-[2010-04-14 22:48:26] IP:::1 URI: /easygiant/category/main POST
-[2010-04-14 22:49:26] IP:::1 URI: /easygiant/panel/main POST
-[2010-04-14 22:49:30] IP:::1 URI: /easygiant/category/main POST
-[2010-04-14 22:50:17] IP:::1 URI: /easygiant/panel/main POST
-[2010-04-14 22:50:54] IP:::1 URI: /easygiant/panel/main POST
-[2010-04-14 23:09:29] IP:::1 URI: /easygiant/pagine/main/1 POST
-[2010-04-14 23:09:30] IP:::1 URI: /easygiant/panel/main POST
-[2010-04-14 23:09:43] IP:::1 URI: /easygiant/panel/main POST
-[2010-04-14 23:09:44] IP:::1 URI: /easygiant/category/main POST
-[2010-04-14 23:09:44] IP:::1 URI: /easygiant/Public/Img/header.png POST
-[2010-04-14 23:09:44] IP:::1 URI: /easygiant/Public/Img/footer.png POST
-[2010-04-14 23:10:57] IP:::1 URI: /easygiant/users/logout POST
-[2010-04-14 23:27:00] IP:::1 URI: /easygiant/panel/main POST
-[2010-04-14 23:27:01] IP:::1 URI: /easygiant/users/login POST
-[2010-04-14 23:27:04] IP:::1 URI: /easygiant/users/login POST username:admin password:admin
-[2010-04-14 23:27:07] IP:::1 URI: /easygiant/panel/main POST
-[2010-04-14 23:27:10] IP:::1 URI: /easygiant/upload/main POST
-[2010-04-14 23:27:10] IP:::1 URI: /easygiant/External/jquery/jquery-1.3.2.min.js POST
-[2010-04-14 23:27:11] IP:::1 URI: /easygiant/upload/main POST folderName:folder name createFolderAction:create directory:/home/tonicucoz/Apache/easygiant/media/
-[2010-04-14 23:27:12] IP:::1 URI: /easygiant/External/jquery/jquery-1.3.2.min.js POST
-[2010-04-14 23:27:13] IP:::1 URI: /easygiant/upload/main POST enter_x:29 enter_y:24 delFolderAction:/home/tonicucoz/Apache/easygiant/media/folder name directory:/home/tonicucoz/Apache/easygiant/media/
-[2010-04-14 23:27:14] IP:::1 URI: /easygiant/External/jquery/jquery-1.3.2.min.js POST
-[2010-04-14 23:28:21] IP:::1 URI: /easygiant/upload/main POST uploadFileAction:upload MAX_FILE_SIZE:3000 directory:/home/tonicucoz/Apache/easygiant/media/
-[2010-04-14 23:28:39] IP:::1 URI: /easygiant/upload/main POST uploadFileAction:upload MAX_FILE_SIZE:3000 directory:/home/tonicucoz/Apache/easygiant/media/
-[2010-04-14 23:28:39] IP:::1 URI: /easygiant/External/jquery/jquery-1.3.2.min.js POST
-[2010-04-14 23:28:41] IP:::1 URI: /easygiant/upload/main POST enter_x:22 enter_y:21 delFileAction:/home/tonicucoz/Apache/easygiant/media/Untitled 1.doc directory:/home/tonicucoz/Apache/easygiant/media/
-[2010-04-14 23:28:41] IP:::1 URI: /easygiant/External/jquery/jquery-1.3.2.min.js POST
-[2010-04-14 23:28:42] IP:::1 URI: /easygiant/upload/main POST folderName:folder name createFolderAction:create directory:/home/tonicucoz/Apache/easygiant/media/
-[2010-04-14 23:28:42] IP:::1 URI: /easygiant/External/jquery/jquery-1.3.2.min.js POST
-[2010-04-14 23:28:44] IP:::1 URI: /easygiant/upload/main POST enter_x:31 enter_y:14 delFolderAction:/home/tonicucoz/Apache/easygiant/media/folder name directory:/home/tonicucoz/Apache/easygiant/media/
-[2010-04-14 23:28:44] IP:::1 URI: /easygiant/External/jquery/jquery-1.3.2.min.js POST
-[2010-04-14 23:29:36] IP:::1 URI: /easygiant/upload/main POST folderName:folder name createFolderAction:create directory:/home/tonicucoz/Apache/easygiant/media/
-[2010-04-14 23:29:36] IP:::1 URI: /easygiant/External/jquery/jquery-1.3.2.min.js POST
-[2010-04-14 23:29:37] IP:::1 URI: /easygiant/upload/main POST enter_x:16 enter_y:24 delFolderAction:/home/tonicucoz/Apache/easygiant/media/folder name directory:/home/tonicucoz/Apache/easygiant/media/
-[2010-04-14 23:29:38] IP:::1 URI: /easygiant/External/jquery/jquery-1.3.2.min.js POST
-[2010-04-14 23:29:39] IP:::1 URI: /easygiant/upload/main POST folderName:folder name createFolderAction:create directory:/home/tonicucoz/Apache/easygiant/media/
-[2010-04-14 23:29:39] IP:::1 URI: /easygiant/External/jquery/jquery-1.3.2.min.js POST
-[2010-04-14 23:29:39] IP:::1 URI: /easygiant/upload/main POST folderName:folder name createFolderAction:create directory:/home/tonicucoz/Apache/easygiant/media/
-[2010-04-14 23:29:40] IP:::1 URI: /easygiant/External/jquery/jquery-1.3.2.min.js POST
-[2010-04-14 23:29:42] IP:::1 URI: /easygiant/upload/main POST enter_x:35 enter_y:22 directory:/home/tonicucoz/Apache/easygiant/media/folder name/
-[2010-04-14 23:29:42] IP:::1 URI: /easygiant/External/jquery/jquery-1.3.2.min.js POST
-[2010-04-14 23:29:44] IP:::1 URI: /easygiant/upload/main POST folderName:folder name createFolderAction:create directory:/home/tonicucoz/Apache/easygiant/media/folder name/
-[2010-04-14 23:29:44] IP:::1 URI: /easygiant/External/jquery/jquery-1.3.2.min.js POST
-[2010-04-14 23:29:44] IP:::1 URI: /easygiant/upload/main POST enter_x:17 enter_y:13 directory:/home/tonicucoz/Apache/easygiant/media/
-[2010-04-14 23:29:44] IP:::1 URI: /easygiant/External/jquery/jquery-1.3.2.min.js POST
-[2010-04-14 23:29:46] IP:::1 URI: /easygiant/upload/main POST enter_x:18 enter_y:33 delFolderAction:/home/tonicucoz/Apache/easygiant/media/folder name directory:/home/tonicucoz/Apache/easygiant/media/
-[2010-04-14 23:29:46] IP:::1 URI: /easygiant/External/jquery/jquery-1.3.2.min.js POST
-[2010-04-14 23:29:48] IP:::1 URI: /easygiant/upload/main POST enter_x:28 enter_y:19 directory:/home/tonicucoz/Apache/easygiant/media/folder name/
-[2010-04-14 23:29:48] IP:::1 URI: /easygiant/External/jquery/jquery-1.3.2.min.js POST
-[2010-04-14 23:29:49] IP:::1 URI: /easygiant/upload/main POST enter_x:26 enter_y:21 delFolderAction:/home/tonicucoz/Apache/easygiant/media/folder name/folder name directory:/home/tonicucoz/Apache/easygiant/media/folder name/
-[2010-04-14 23:29:49] IP:::1 URI: /easygiant/External/jquery/jquery-1.3.2.min.js POST
-[2010-04-14 23:29:51] IP:::1 URI: /easygiant/upload/main POST enter_x:24 enter_y:10 directory:/home/tonicucoz/Apache/easygiant/media/
-[2010-04-14 23:29:51] IP:::1 URI: /easygiant/External/jquery/jquery-1.3.2.min.js POST
-[2010-04-14 23:29:52] IP:::1 URI: /easygiant/upload/main POST enter_x:22 enter_y:26 delFolderAction:/home/tonicucoz/Apache/easygiant/media/folder name directory:/home/tonicucoz/Apache/easygiant/media/
-[2010-04-14 23:29:53] IP:::1 URI: /easygiant/External/jquery/jquery-1.3.2.min.js POST
-[2010-04-14 23:29:54] IP:::1 URI: /easygiant/upload/main POST enter_x:18 enter_y:26 directory:/home/tonicucoz/Apache/easygiant/media/.svn/
-[2010-04-14 23:29:54] IP:::1 URI: /easygiant/External/jquery/jquery-1.3.2.min.js POST
-[2010-04-14 23:29:56] IP:::1 URI: /easygiant/upload/main POST enter_x:29 enter_y:19 directory:/home/tonicucoz/Apache/easygiant/media/.svn/tmp/
-[2010-04-14 23:29:56] IP:::1 URI: /easygiant/External/jquery/jquery-1.3.2.min.js POST
-[2010-04-14 23:29:58] IP:::1 URI: /easygiant/upload/main POST enter_x:36 enter_y:23 directory:/home/tonicucoz/Apache/easygiant/media/.svn/tmp/text-base/
-[2010-04-14 23:29:58] IP:::1 URI: /easygiant/External/jquery/jquery-1.3.2.min.js POST
-[2010-04-14 23:29:59] IP:::1 URI: /easygiant/upload/main POST enter_x:14 enter_y:21 directory:/home/tonicucoz/Apache/easygiant/media/.svn/tmp/
-[2010-04-14 23:29:59] IP:::1 URI: /easygiant/External/jquery/jquery-1.3.2.min.js POST
-[2010-04-14 23:30:00] IP:::1 URI: /easygiant/upload/main POST enter_x:32 enter_y:15 directory:/home/tonicucoz/Apache/easygiant/media/.svn/tmp/prop-base/
-[2010-04-14 23:30:00] IP:::1 URI: /easygiant/External/jquery/jquery-1.3.2.min.js POST
-[2010-04-14 23:30:01] IP:::1 URI: /easygiant/upload/main POST enter_x:30 enter_y:8 directory:/home/tonicucoz/Apache/easygiant/media/.svn/tmp/
-[2010-04-14 23:30:01] IP:::1 URI: /easygiant/External/jquery/jquery-1.3.2.min.js POST
-[2010-04-14 23:30:01] IP:::1 URI: /easygiant/upload/main POST enter_x:30 enter_y:11 directory:/home/tonicucoz/Apache/easygiant/media/.svn/tmp/
-[2010-04-14 23:30:01] IP:::1 URI: /easygiant/External/jquery/jquery-1.3.2.min.js POST
-[2010-04-14 23:30:02] IP:::1 URI: /easygiant/upload/main POST enter_x:29 enter_y:12 directory:/home/tonicucoz/Apache/easygiant/media/.svn/
-[2010-04-14 23:30:02] IP:::1 URI: /easygiant/External/jquery/jquery-1.3.2.min.js POST
-[2010-04-14 23:30:03] IP:::1 URI: /easygiant/upload/main POST enter_x:29 enter_y:12 directory:/home/tonicucoz/Apache/easygiant/media/
-[2010-04-14 23:30:03] IP:::1 URI: /easygiant/External/jquery/jquery-1.3.2.min.js POST
-[2010-04-14 23:30:04] IP:::1 URI: /easygiant/upload/main POST enter_x:27 enter_y:20 directory:/home/tonicucoz/Apache/easygiant/media/
-[2010-04-14 23:30:04] IP:::1 URI: /easygiant/External/jquery/jquery-1.3.2.min.js POST
-[2010-04-14 23:31:41] IP:::1 URI: /easygiant/upload/main POST uploadFileAction:upload MAX_FILE_SIZE:3000 directory:/home/tonicucoz/Apache/easygiant/media/
-[2010-04-14 23:31:41] IP:::1 URI: /easygiant/External/jquery/jquery-1.3.2.min.js POST
-[2010-04-14 23:31:51] IP:::1 URI: /easygiant/upload/main POST uploadFileAction:upload MAX_FILE_SIZE:3000 directory:/home/tonicucoz/Apache/easygiant/media/
-[2010-04-14 23:31:51] IP:::1 URI: /easygiant/External/jquery/jquery-1.3.2.min.js POST
-[2010-04-14 23:31:53] IP:::1 URI: /easygiant/upload/main POST enter_x:17 enter_y:33 delFileAction:/home/tonicucoz/Apache/easygiant/media/bifido.png directory:/home/tonicucoz/Apache/easygiant/media/
-[2010-04-14 23:31:53] IP:::1 URI: /easygiant/External/jquery/jquery-1.3.2.min.js POST
-[2010-04-14 23:34:52] IP:::1 URI: /easygiant/panel/main POST
-[2010-04-14 23:34:53] IP:::1 URI: /easygiant/pagine/main/1 POST
-[2010-04-14 23:34:54] IP:::1 URI: /easygiant/pagine/main/2/undef POST
-[2010-04-14 23:34:57] IP:::1 URI: /easygiant/pagine/main/2/undef POST moveupAction:up id_pagine:74
-[2010-04-14 23:34:59] IP:::1 URI: /easygiant/pagine/form/update/2/undef POST generalAction:edit id_pagine:70
-[2010-04-14 23:35:01] IP:::1 URI: /easygiant/pagine/form/update/2/undef POST name:qwe id_navigation:109 titolo: html: id_pagine:70 updateAction:Save
-[2010-04-14 23:35:02] IP:::1 URI: /easygiant/pagine/main/2/undef POST
-[2010-04-14 23:35:03] IP:::1 URI: /easygiant/pagine/form/update/2/undef POST generalAction:edit id_pagine:72
-[2010-04-14 23:35:06] IP:::1 URI: /easygiant/pagine/form/update/2/undef POST name:4444 id_navigation:107 titolo: html:234324324wqeqew id_pagine:72 updateAction:Save
-[2010-04-14 23:35:07] IP:::1 URI: /easygiant/pagine/main/2/undef POST
-[2010-04-14 23:35:08] IP:::1 URI: /easygiant/pagine/main/1/109 POST
-[2010-04-14 23:35:09] IP:::1 URI: /easygiant/panel/main POST
-[2010-04-14 23:35:10] IP:::1 URI: /easygiant/articles/main POST
-[2010-04-14 23:35:11] IP:::1 URI: /easygiant/External/tiny_mce/tiny_mce.js POST
-[2010-04-14 23:35:11] IP:::1 URI: /easygiant/panel/main POST
-[2010-04-14 23:35:12] IP:::1 URI: /easygiant/category/main POST
-[2010-04-14 23:35:14] IP:::1 URI: /easygiant/category/main/2/undef/token POST
-[2010-04-14 23:35:16] IP:::1 URI: /easygiant/category/form/insert/2/undef/token POST
-[2010-04-14 23:35:18] IP:::1 URI: /easygiant/category/form/insert/2/undef/token POST name:qwe categoria: css: meta_ita: insertAction:Save
-[2010-04-14 23:35:20] IP:::1 URI: /easygiant/category/form/insert/2/undef/token POST name:qwe tick:1 visibile:1 categoria: css: meta_ita: insertAction:Save
-[2010-04-14 23:35:21] IP:::1 URI: /easygiant/category/main/2/undef/token POST
-[2010-04-14 23:35:23] IP:::1 URI: /easygiant/category/main/1/undef/token POST
-[2010-04-14 23:35:42] IP:::1 URI: /easygiant/category/main/1/undef/token POST x:16 y:19 delAction:del id_navigation:132
-[2010-04-14 23:35:45] IP:::1 URI: /easygiant/category/main/1/undef/token POST x:24 y:20 delAction:del id_navigation:131
-[2010-04-14 23:35:46] IP:::1 URI: /easygiant/category/main/1/undef/token POST x:13 y:14 delAction:del id_navigation:129
-[2010-04-14 23:35:49] IP:::1 URI: /easygiant/category/main/1/undef/token POST x:10 y:14 delAction:del id_navigation:110
-[2010-04-14 23:35:51] IP:::1 URI: /easygiant/category/main/1/undef/token POST x:12 y:14 delAction:del id_navigation:107
-[2010-04-14 23:35:53] IP:::1 URI: /easygiant/category/main/1/eee/token POST
-[2010-04-14 23:35:55] IP:::1 URI: /easygiant/panel/main POST
-[2010-04-14 23:38:00] IP:::1 URI: /easygiant/pagine/main/1 POST
-[2010-04-14 23:38:02] IP:::1 URI: /easygiant/panel/main POST
-[2010-04-14 23:38:02] IP:::1 URI: /easygiant/users/logout POST
-[2010-04-14 23:38:08] IP:::1 URI: /easygiant/panel/main POST
-[2010-04-14 23:38:09] IP:::1 URI: /easygiant/users/login POST
-[2010-04-14 23:38:13] IP:::1 URI: /easygiant/users/login POST username:admin password:admin
-[2010-04-14 23:38:16] IP:::1 URI: /easygiant/panel/main POST
-[2010-04-14 23:44:00] IP:::1 URI: /easygiant/pagine/main/1 POST
-[2010-04-14 23:44:01] IP:::1 URI: /easygiant/pagine/main/1/undef POST moveupAction:up id_pagine:82
-[2010-04-14 23:44:02] IP:::1 URI: /easygiant/pagine/main/1/undef POST moveupAction:up id_pagine:82
-[2010-04-14 23:44:03] IP:::1 URI: /easygiant/pagine/main/1/undef POST moveupAction:up id_pagine:84
-[2010-04-14 23:44:05] IP:::1 URI: /easygiant/pagine/main/1/undef POST movedownAction:down id_pagine:84
-[2010-04-14 23:44:05] IP:::1 URI: /easygiant/pagine/main/1/undef POST movedownAction:down id_pagine:82
-[2010-04-14 23:44:08] IP:::1 URI: /easygiant/pagine/main/1/109 POST
-[2010-04-14 23:44:09] IP:::1 URI: /easygiant/pagine/main/1/107 POST
-[2010-04-14 23:44:12] IP:::1 URI: /easygiant/pagine/main/1/107 POST
-[2010-04-14 23:44:14] IP:::1 URI: /easygiant/pagine/main/1/undef POST
-[2010-04-14 23:44:16] IP:::1 URI: /easygiant/pagine/main/2/undef POST
-[2010-04-14 23:44:18] IP:::1 URI: /easygiant/pagine/main/1/110 POST
-[2010-04-14 23:44:20] IP:::1 URI: /easygiant/pagine/main/1/109 POST
-[2010-04-14 23:44:24] IP:::1 URI: /easygiant/pagine/main/1/109 POST delAction:del id_pagine:81
-[2010-04-14 23:48:39] IP:::1 URI: /easygiant/pagine/main/1/109 POST
-[2010-04-14 23:48:41] IP:::1 URI: /easygiant/pagine/form/update/1/109 POST generalAction:edit id_pagine:80
-[2010-04-14 23:48:46] IP:::1 URI: /easygiant/pagine/form/update/1/109 POST name:6756 id_navigation:109 titolo:1 html:567 id_pagine:80 updateAction:Save
-[2010-04-14 23:48:52] IP:::1 URI: /easygiant/pagine/form/update/1/109 POST name:6756 id_navigation:109 titolo:12 html:567 id_pagine:80 updateAction:Save
-[2010-04-14 23:49:13] IP:::1 URI: /easygiant/pagine/form/update/1/109 POST name:6756 id_navigation:109 titolo:12 html:567 id_pagine:80 updateAction:Save
-[2010-04-14 23:49:19] IP:::1 URI: /easygiant/pagine/form/update/1/109 POST name:6756 id_navigation:109 titolo:1 html:567 id_pagine:80 updateAction:Save
-[2010-04-14 23:49:22] IP:::1 URI: /easygiant/pagine/form/update/1/109 POST name:6756 id_navigation:109 titolo:2 html:567 id_pagine:80 updateAction:Save
-[2010-04-14 23:49:24] IP:::1 URI: /easygiant/pagine/main/1/109 POST
-[2010-04-14 23:49:25] IP:::1 URI: /easygiant/panel/main POST
-[2010-04-14 23:49:26] IP:::1 URI: /easygiant/post/main POST
-[2010-04-14 23:49:28] IP:::1 URI: /easygiant/post/form/insert/1/undefi/undefi/undefi/undefi/undefi/undefi POST
-[2010-04-14 23:49:32] IP:::1 URI: /easygiant/post/form/insert/1/undefi/undefi/undefi/undefi/undefi/undefi POST titolo:qwe interop: autore:Antonio testo:qwe intero: interom: interot: interob: xxx: fff: insertAction:Save
-[2010-04-14 23:49:47] IP:::1 URI: /easygiant/post/form/insert/1/undefi/undefi/undefi/undefi/undefi/undefi POST titolo:qwe interop:1 autore:Antonio testo:qwe intero:121212 interom:1 interot:1 interob:33 xxx:11 fff:3 insertAction:Save
-[2010-04-14 23:49:52] IP:::1 URI: /easygiant/post/form/insert/1/undefi/undefi/undefi/undefi/undefi/undefi POST titolo:qweeqweqw interop:1 autore:Antonio testo:qwe intero:121212 interom:1 interot:1 interob:33 xxx:11 fff:3 insertAction:Save
-[2010-04-14 23:50:04] IP:::1 URI: /easygiant/post/main/1/undefi/undefi/undefi/undefi/undefi/undefi POST
-[2010-04-14 23:50:06] IP:::1 URI: /easygiant/post/form/update/1/undefi/undefi/undefi/undefi/undefi/undefi POST generalAction:edit id:106
-[2010-04-14 23:50:10] IP:::1 URI: /easygiant/post/form/update/1/undefi/undefi/undefi/undefi/undefi/undefi POST titolo:qweeqweqw interop:1 autore:Antonio testo:qwe intero:121212 interom:qe interot:1 interob:33 xxx:11 fff:3 id:106 updateAction:Save
-[2010-04-14 23:50:21] IP:::1 URI: /easygiant/post/form/update/1/undefi/undefi/undefi/undefi/undefi/undefi POST titolo:qweeqweqw interop:1 autore:Antonio testo:qwe intero:121212 interom:11 interot:1 interob:33 xxx:11 fff:3 id:106 updateAction:Save
-[2010-04-14 23:50:24] IP:::1 URI: /easygiant/post/form/update/1/undefi/undefi/undefi/undefi/undefi/undefi POST titolo:qweeqweqw interop:1 autore:Giulia testo:qwe intero:121212 interom:11 interot:1 interob:33 xxx:11 fff:3 id:106 updateAction:Save
-[2010-04-14 23:50:26] IP:::1 URI: /easygiant/post/main/1/undefi/undefi/undefi/undefi/undefi/undefi POST
-[2010-04-14 23:50:30] IP:::1 URI: /easygiant/panel/main POST
-[2010-04-14 23:50:32] IP:::1 URI: /easygiant/users/main POST
-[2010-04-14 23:50:34] IP:::1 URI: /easygiant/users/form/update/1/0 POST generalAction:edit id_user:3
-[2010-04-14 23:50:36] IP:::1 URI: /easygiant/users/main/1/0 POST
-[2010-04-14 23:50:38] IP:::1 URI: /easygiant/users/associate/1/0 POST generalAction:link id_user:3
-[2010-04-14 23:50:39] IP:::1 URI: /easygiant/users/associate/1/0 POST boxIdentifier:3 associateAction:associate id_user:3
-[2010-04-14 23:50:40] IP:::1 URI: /easygiant/users/associate/1/0 POST boxIdentifier:3 associateAction:associate id_user:3
-[2010-04-14 23:50:41] IP:::1 URI: /easygiant/users/associate/1/0 POST boxIdentifier:3 dissociateAction:dissociate id_user:3
-[2010-04-14 23:50:41] IP:::1 URI: /easygiant/users/associate/1/0 POST boxIdentifier:3 dissociateAction:dissociate id_user:3
-[2010-04-14 23:50:45] IP:::1 URI: /easygiant/users/associate/1/0 POST boxIdentifier:3 associateAction:associate id_user:3
-[2010-04-14 23:50:46] IP:::1 URI: /easygiant/users/associate/1/0 POST boxIdentifier:3 dissociateAction:dissociate id_user:3
-[2010-04-14 23:50:48] IP:::1 URI: /easygiant/users/main/1/0 POST
-[2010-04-14 23:50:50] IP:::1 URI: /easygiant/panel/main POST
-[2010-04-14 23:50:51] IP:::1 URI: /easygiant/users/logout POST
-[2010-04-14 23:50:52] IP:::1 URI: /easygiant/users/login POST
-[2010-04-14 23:50:56] IP:::1 URI: /easygiant/users/login POST username:admin password:admin
-[2010-04-14 23:50:59] IP:::1 URI: /easygiant/panel/main POST
-[2010-04-14 23:52:52] IP:::1 URI: /easygiant/post/main POST
-[2010-04-14 23:53:47] IP:::1 URI: /easygiant/postnew/main POST
-[2010-04-14 23:53:50] IP:::1 URI: /easygiant/postnew/form/update/1/undef/undef/undef POST generalAction:Edit id:106
-[2010-04-14 23:53:53] IP:::1 URI: /easygiant/postnew/form/update POST titolo: autore:Giulia testo:qwe id:106 updateAction:save
-[2010-04-14 23:53:57] IP:::1 URI: /easygiant/postnew/form/update POST titolo:qwewqeqwewqe autore:Giulia testo:qwe id:106 updateAction:save
-[2010-04-14 23:54:00] IP:::1 URI: /easygiant/postnew/main/1/undef/undef/undef POST
-[2010-04-14 23:58:46] IP:::1 URI: /easygiant/panel/main POST
-[2010-04-14 23:58:47] IP:::1 URI: /easygiant/pagine/main/1 POST
-[2010-04-14 23:59:02] IP:::1 URI: /easygiant/pagine/form/insert/1/undef POST
-[2010-04-14 23:59:06] IP:::1 URI: /easygiant/pagine/form/insert/1/undef POST name:$$ id_navigation:109 titolo: html: insertAction:Save
-[2010-04-14 23:59:11] IP:::1 URI: /easygiant/pagine/form/insert/1/undef POST name:11 id_navigation:109 titolo: html: insertAction:Save
-[2010-04-14 23:59:13] IP:::1 URI: /easygiant/pagine/main/1/undef POST
-[2010-04-14 23:59:24] IP:::1 URI: /easygiant/pagine/form/update/1/undef POST generalAction:edit id_pagine:85
-[2010-04-14 23:59:30] IP:::1 URI: /easygiant/pagine/form/update/1/undef POST name:11 id_navigation:109 titolo: html:undef id_pagine:85 updateAction:Save
-[2010-04-14 23:59:46] IP:::1 URI: /easygiant/pagine/form/update/1/undef POST name:11 id_navigation:109 titolo: html:name id_pagine:85 updateAction:Save
-[2010-04-14 23:59:49] IP:::1 URI: /easygiant/pagine/form/update/1/undef POST name:11 id_navigation:109 titolo:name html:name id_pagine:85 updateAction:Save
-[2010-04-14 23:59:53] IP:::1 URI: /easygiant/pagine/form/update/1/undef POST name:11 id_navigation:109 titolo:1 html:name id_pagine:85 updateAction:Save
-[2010-04-14 23:59:56] IP:::1 URI: /easygiant/pagine/form/update/1/undef POST name:12 id_navigation:109 titolo:1 html:name id_pagine:85 updateAction:Save
-[2010-04-15 00:00:14] IP:::1 URI: /easygiant/pagine/form/update/1/undef POST name:my id_navigation:109 titolo:1 html:name id_pagine:85 updateAction:Save
-[2010-04-15 00:00:16] IP:::1 URI: /easygiant/pagine/main/1/undef POST
-[2010-04-15 00:00:17] IP:::1 URI: /easygiant/pagine/form/insert/1/undef POST
-[2010-04-15 00:00:21] IP:::1 URI: /easygiant/pagine/form/insert/1/undef POST name:my id_navigation:109 titolo: html: insertAction:Save
-[2010-04-15 00:00:23] IP:::1 URI: /easygiant/pagine/main/1/undef POST
-[2010-04-15 00:00:24] IP:::1 URI: /easygiant/panel/main POST
-[2010-04-15 00:00:25] IP:::1 URI: /easygiant/post/main POST
-[2010-04-15 00:00:41] IP:::1 URI: /easygiant/post/form/update/1/undefi/undefi/undefi/undefi/undefi/undefi POST generalAction:edit id:106
-[2010-04-15 00:00:46] IP:::1 URI: /easygiant/post/form/update/1/undefi/undefi/undefi/undefi/undefi/undefi POST titolo:qwe interop:1 autore:Giulia testo:qwe intero:121212 interom:11 interot:1 interob:33 xxx:11 fff:3 id:106 updateAction:Save
-[2010-04-15 00:00:49] IP:::1 URI: /easygiant/post/main/1/undefi/undefi/undefi/undefi/undefi/undefi POST
-[2010-04-15 00:01:39] IP:::1 URI: /easygiant/postnew/main POST
-[2010-04-15 00:01:42] IP:::1 URI: /easygiant/postnew/form/update/1/undef/undef/undef POST generalAction:Edit id:106
-[2010-04-15 00:01:46] IP:::1 URI: /easygiant/postnew/form/update POST titolo:qwewqeqwewqe autore:Giulia testo: id:106 updateAction:save
-[2010-04-15 00:01:51] IP:::1 URI: /easygiant/postnew/form/update POST titolo:qwewqeqwewqe autore:Giulia testo:gasd id:106 updateAction:save
-[2010-04-15 00:02:40] IP:::1 URI: /easygiant/postnew/form/update POST titolo: autore:Giulia testo:gasd id:106 updateAction:save
-[2010-04-15 00:02:44] IP:::1 URI: /easygiant/postnew/form/update POST titolo:qweqew autore:Giulia testo:gasd id:106 updateAction:save
-[2010-04-15 00:02:45] IP:::1 URI: /easygiant/postnew/main/1/undef/undef/undef POST
-[2010-04-15 00:02:46] IP:::1 URI: /easygiant/postnew/form/insert/1/undef/undef/undef POST
-[2010-04-15 00:02:47] IP:::1 URI: /easygiant/postnew/form/insert POST titolo: autore: testo: insertAction:save
-[2010-04-15 00:02:48] IP:::1 URI: /easygiant/postnew/main/1/undef/undef/undef POST
-[2010-04-15 00:02:51] IP:::1 URI: /easygiant/postnew/main/1/undef/undef/undef POST delAction:Delete id:107
-[2010-04-15 00:02:53] IP:::1 URI: /easygiant/panel/main POST
-[2010-04-15 00:02:58] IP:::1 URI: /easygiant/postnew/form/insert/1/undef/undef/undef POST
-[2010-04-15 00:02:59] IP:::1 URI: /easygiant/postnew/form/insert POST titolo: autore: testo: insertAction:save
-[2010-04-15 00:03:00] IP:::1 URI: /easygiant/postnew/main/1/undef/undef/undef POST
-[2010-04-15 00:03:02] IP:::1 URI: /easygiant/panel/main POST
-[2010-04-15 00:03:03] IP:::1 URI: /easygiant/post/main POST
-[2010-04-15 00:03:05] IP:::1 URI: /easygiant/post/form/update/1/undefi/undefi/undefi/undefi/undefi/undefi POST generalAction:edit id:108
-[2010-04-15 00:03:21] IP:::1 URI: /easygiant/post/form/update/1/undefi/undefi/undefi/undefi/undefi/undefi POST titolo: interop:0 autore:Antonio testo: intero:0 interom:0 interot:0 interob:0 xxx:0 fff:0 id:108 updateAction:Save
-[2010-04-15 00:03:27] IP:::1 URI: /easygiant/post/form/update/1/undefi/undefi/undefi/undefi/undefi/undefi POST titolo:8888 interop:0 autore:Antonio testo: intero:0 interom:0 interot:0 interob:0 xxx:0 fff:0 id:108 updateAction:Save
-[2010-04-15 00:03:31] IP:::1 URI: /easygiant/post/form/update/1/undefi/undefi/undefi/undefi/undefi/undefi POST titolo:88888888 interop:0 autore:Antonio testo: intero:0 interom:0 interot:0 interob:0 xxx:0 fff:0 id:108 updateAction:Save
-[2010-04-15 00:03:37] IP:::1 URI: /easygiant/post/form/update/1/undefi/undefi/undefi/undefi/undefi/undefi POST titolo:888888888 interop:0 autore:Antonio testo: intero:0 interom:0 interot:0 interob:0 xxx:0 fff:0 id:108 updateAction:Save
-[2010-04-15 00:03:48] IP:::1 URI: /easygiant/post/form/update/1/undefi/undefi/undefi/undefi/undefi/undefi POST titolo:888888888 interop:0 autore:Antonio testo: intero:23123 interom:0 interot:0 interob:0 xxx:0 fff:0 id:108 updateAction:Save
-[2010-04-15 00:04:18] IP:::1 URI: /easygiant/post/main/1/undefi/undefi/undefi/undefi/undefi/undefi POST
-[2010-04-15 00:04:22] IP:::1 URI: /easygiant/post/main/2/undefi/undefi/undefi/undefi/undefi/undefi POST
-[2010-04-15 00:04:23] IP:::1 URI: /easygiant/post/main/1/undefi/undefi/undefi/undefi/undefi/undefi POST
-[2010-04-15 00:04:24] IP:::1 URI: /easygiant/post/form/update/1/undefi/undefi/undefi/undefi/undefi/undefi POST generalAction:edit id:108
-[2010-04-15 00:04:32] IP:::1 URI: /easygiant/post/form/update/1/undefi/undefi/undefi/undefi/undefi/undefi POST titolo:rrrrrrr interop:0 autore:Antonio testo: intero:0 interom:0 interot:0 interob:0 xxx:0 fff:0 id:108 updateAction:Save
-[2010-04-15 00:06:29] IP:::1 URI: /easygiant/post/form/update/1/undefi/undefi/undefi/undefi/undefi/undefi POST titolo:rrrrrrr$$$ interop:0 autore:Antonio testo: intero:0 interom:0 interot:0 interob:0 xxx:0 fff:0 id:108 updateAction:Save
-[2010-04-15 00:06:38] IP:::1 URI: /easygiant/post/form/update/1/undefi/undefi/undefi/undefi/undefi/undefi POST titolo:1jhgsagd interop:0 autore:Antonio testo: intero:0 interom:0 interot:0 interob:0 xxx:0 fff:0 id:108 updateAction:Save
-[2010-04-15 00:07:21] IP:::1 URI: /easygiant/post/form/update/1/undefi/undefi/undefi/undefi/undefi/undefi POST titolo:1jhgsagd interop:0 autore:Antonio testo:qwe intero:0 interom:0 interot:0 interob:0 xxx:0 fff:0 id:108 updateAction:Save
-[2010-04-15 00:07:26] IP:::1 URI: /easygiant/post/form/update/1/undefi/undefi/undefi/undefi/undefi/undefi POST titolo:1jhgsagd interop:0123 autore:Antonio testo:qwe intero:0 interom:0 interot:0 interob:0 xxx:0 fff:0 id:108 updateAction:Save
-[2010-04-15 00:07:34] IP:::1 URI: /easygiant/post/form/update/1/undefi/undefi/undefi/undefi/undefi/undefi POST titolo:1jhgsagd interop:123 autore:Antonio testo:qwe intero:0 interom:0 interot:0 interob:0 xxx:0 fff:0 id:108 updateAction:Save
-[2010-04-15 00:09:29] IP:::1 URI: /easygiant/post/form/update/1/undefi/undefi/undefi/undefi/undefi/undefi POST titolo:1jhgsagd interop:123 autore:Antonio testo:qwe intero:0 interom:0 interot:0 interob:0 xxx:0 fff:0 id:108 updateAction:Save
-[2010-04-15 00:09:34] IP:::1 URI: /easygiant/post/form/update/1/undefi/undefi/undefi/undefi/undefi/undefi POST titolo:1jhgsagd interop:123 autore:Antonio testo:qwe intero:24523423 interom:0 interot:0 interob:0 xxx:0 fff:0 id:108 updateAction:Save
-[2010-04-15 00:09:36] IP:::1 URI: /easygiant/post/main/1/undefi/undefi/undefi/undefi/undefi/undefi POST
-[2010-04-15 00:09:46] IP:::1 URI: /easygiant/post/form/update/1/undefi/undefi/undefi/undefi/undefi/undefi POST generalAction:edit id:104
-[2010-04-15 00:09:50] IP:::1 URI: /easygiant/post/form/update/1/undefi/undefi/undefi/undefi/undefi/undefi POST titolo:888 interop:0 autore:Antonio testo:werwer intero:234234234 interom:0 interot:0 interob:0 xxx:0 fff:0 id:104 updateAction:Save
-[2010-04-15 00:09:54] IP:::1 URI: /easygiant/post/form/update/1/undefi/undefi/undefi/undefi/undefi/undefi POST titolo:8888 interop:0 autore:Antonio testo:werwer intero:234234234 interom:0 interot:0 interob:0 xxx:0 fff:0 id:104 updateAction:Save
-[2010-04-15 00:10:55] IP:::1 URI: /easygiant/post/form/update/1/undefi/undefi/undefi/undefi/undefi/undefi POST titolo:8888 interop:0 autore:Antonio testo:werwer intero:234234234 interom:0 interot:0 interob:0 xxx:0 fff:0 id:104 updateAction:Save
-[2010-04-15 00:12:07] IP:::1 URI: /easygiant/post/form/update/1/undefi/undefi/undefi/undefi/undefi/undefi POST titolo:8888 interop:0 autore:Antonio testo:werwer intero:234234234 interom:0 interot:0 interob:0 xxx:0 fff:0 id:104 updateAction:Save
-[2010-04-15 00:12:12] IP:::1 URI: /easygiant/post/form/update/1/undefi/undefi/undefi/undefi/undefi/undefi POST titolo:888 interop:0 autore:Antonio testo:werwer intero:234234234 interom:0 interot:0 interob:0 xxx:0 fff:0 id:104 updateAction:Save
-[2010-04-15 00:12:16] IP:::1 URI: /easygiant/post/form/update/1/undefi/undefi/undefi/undefi/undefi/undefi POST titolo:88 interop:0 autore:Antonio testo:werwer intero:234234234 interom:0 interot:0 interob:0 xxx:0 fff:0 id:104 updateAction:Save
-[2010-04-15 00:12:20] IP:::1 URI: /easygiant/post/form/update/1/undefi/undefi/undefi/undefi/undefi/undefi POST titolo: interop:0 autore:Antonio testo:werwer intero:234234234 interom:0 interot:0 interob:0 xxx:0 fff:0 id:104 updateAction:Save
-[2010-04-15 00:12:24] IP:::1 URI: /easygiant/post/form/update/1/undefi/undefi/undefi/undefi/undefi/undefi POST titolo:234234 234 interop:0 autore:Antonio testo:werwer intero:234234234 interom:0 interot:0 interob:0 xxx:0 fff:0 id:104 updateAction:Save
-[2010-04-15 00:12:30] IP:::1 URI: /easygiant/post/form/update/1/undefi/undefi/undefi/undefi/undefi/undefi POST titolo:234234234 interop:0 autore:Antonio testo:werwer intero:234234234 interom:0 interot:0 interob:0 xxx:0 fff:0 id:104 updateAction:Save
-[2010-04-15 00:12:32] IP:::1 URI: /easygiant/post/main/1/undefi/undefi/undefi/undefi/undefi/undefi POST
-[2010-04-15 00:12:34] IP:::1 URI: /easygiant/panel/main POST
-[2010-04-15 00:12:35] IP:::1 URI: /easygiant/category/main POST
-[2010-04-15 00:12:37] IP:::1 URI: /easygiant/category/form/insert/1/undef/token POST
-[2010-04-15 00:12:38] IP:::1 URI: /easygiant/category/form/insert/1/undef/token POST name: categoria: css: meta_ita: insertAction:Save
-[2010-04-15 00:12:41] IP:::1 URI: /easygiant/category/form/insert/1/undef/token POST name: visibile:1 categoria: css: meta_ita: insertAction:Save
-[2010-04-15 00:12:44] IP:::1 URI: /easygiant/category/form/insert/1/undef/token POST name: tick:1 visibile:1 categoria: css: meta_ita: insertAction:Save
-[2010-04-15 00:12:49] IP:::1 URI: /easygiant/category/form/insert/1/undef/token POST name:qwewqe visibile:1 categoria: css: meta_ita: insertAction:Save
-[2010-04-15 00:12:51] IP:::1 URI: /easygiant/category/form/insert/1/undef/token POST name:qwewqe tick:1 visibile:1 categoria: css: meta_ita: insertAction:Save
-[2010-04-15 00:12:52] IP:::1 URI: /easygiant/category/main/1/undef/token POST
-[2010-04-15 00:16:26] IP:::1 URI: /easygiant/panel/main POST
-[2010-04-15 00:16:28] IP:::1 URI: /easygiant/post/main POST
-[2010-04-15 00:16:31] IP:::1 URI: /easygiant/postnew/main POST
-[2010-04-15 00:16:34] IP:::1 URI: /easygiant/postnew/form/update/1/undef/undef/undef POST generalAction:Edit id:108
-[2010-04-15 00:16:37] IP:::1 URI: /easygiant/postnew/form/update POST titolo:1jhgsagd autore: testo:qwe id:108 updateAction:save
-[2010-04-15 00:16:44] IP:::1 URI: /easygiant/postnew/form/update POST titolo:1jhgsagd autore:Antonio testo: id:108 updateAction:save
-[2010-04-15 00:16:47] IP:::1 URI: /easygiant/postnew/form/update POST titolo:1jhgsagd autore:Antonio testo:wqeqe id:108 updateAction:save
-[2010-04-15 00:16:52] IP:::1 URI: /easygiant/postnew/main/1/undef/undef/undef POST
-[2010-04-15 00:16:53] IP:::1 URI: /easygiant/postnew/form/insert/1/undef/undef/undef POST
-[2010-04-15 00:16:54] IP:::1 URI: /easygiant/postnew/form/insert POST titolo: autore: testo: insertAction:save
-[2010-04-15 00:16:57] IP:::1 URI: /easygiant/postnew/main/1/undef/undef/undef POST
-[2010-04-15 00:16:58] IP:::1 URI: /easygiant/postnew/form/update/1/undef/undef/undef POST generalAction:Edit id:109
-[2010-04-15 00:17:00] IP:::1 URI: /easygiant/postnew/form/update POST titolo: autore: testo: id:109 updateAction:save
-[2010-04-15 00:17:01] IP:::1 URI: /easygiant/postnew/main/1/undef/undef/undef POST
-[2010-04-15 00:17:03] IP:::1 URI: /easygiant/postnew/main/1/undef/undef/undef POST delAction:Delete id:109
-[2010-04-15 00:18:02] IP:::1 URI: /easygiant/postnew/form/insert/1/undef/undef/undef POST
-[2010-04-15 00:18:03] IP:::1 URI: /easygiant/postnew/form/insert POST titolo: autore: testo: insertAction:save
-[2010-04-15 00:18:59] IP:::1 URI: /easygiant/postnew/form/insert POST titolo: autore: testo: insertAction:save
-[2010-04-15 00:19:28] IP:::1 URI: /easygiant/postnew/form/insert POST titolo: autore: testo: insertAction:save
-[2010-04-15 00:19:54] IP:::1 URI: /easygiant/postnew/form/insert POST titolo: autore: testo: insertAction:save
-[2010-04-15 00:20:07] IP:::1 URI: /easygiant/postnew/form/insert POST titolo: autore: testo: insertAction:save
-[2010-04-15 00:20:12] IP:::1 URI: /easygiant/postnew/form/insert POST titolo: autore: testo: insertAction:save
-[2010-04-15 00:20:29] IP:::1 URI: /easygiant/postnew/form/insert POST titolo: autore: testo: insertAction:save
-[2010-04-15 00:21:19] IP:::1 URI: /easygiant/postnew/form/insert POST titolo: autore: testo: insertAction:save
-[2010-04-15 00:21:24] IP:::1 URI: /easygiant/postnew/form/insert POST titolo:qwe autore: testo:qwe insertAction:save
-[2010-04-15 00:21:26] IP:::1 URI: /easygiant/postnew/form/insert POST titolo:qwe autore:qweqe testo:qwe insertAction:save
-[2010-04-15 00:21:27] IP:::1 URI: /easygiant/postnew/main/1/undef/undef/undef POST
-[2010-04-15 00:21:29] IP:::1 URI: /easygiant/postnew/form/update/1/undef/undef/undef POST generalAction:Edit id:110
-[2010-04-15 00:21:31] IP:::1 URI: /easygiant/postnew/form/update POST titolo:qwe autore: testo:qwe id:110 updateAction:save
-[2010-04-15 00:21:33] IP:::1 URI: /easygiant/postnew/main/1/undef/undef/undef POST
-[2010-04-15 00:21:34] IP:::1 URI: /easygiant/postnew/main/1/undef/undef/undef POST delAction:Delete id:110
-[2010-04-15 00:22:10] IP:::1 URI: /easygiant/postnew/form/insert/1/undef/undef/undef POST
-[2010-04-15 00:22:14] IP:::1 URI: /easygiant/postnew/main/1/undef/undef/undef POST
-[2010-04-15 00:22:15] IP:::1 URI: /easygiant/postnew/form/insert/1/undef/undef/undef POST
-[2010-04-15 00:22:18] IP:::1 URI: /easygiant/postnew/form/insert POST titolo:6 autore:666 testo:666 insertAction:save
-[2010-04-15 00:22:31] IP:::1 URI: /easygiant/postnew/main/1/undef/undef/undef POST
-[2010-04-15 00:22:33] IP:::1 URI: /easygiant/postnew/main/1/undef/undef/undef POST delAction:Delete id:111
-[2010-04-15 00:22:34] IP:::1 URI: /easygiant/postnew/form/insert/1/undef/undef/undef POST
-[2010-04-15 00:22:38] IP:::1 URI: /easygiant/postnew/form/insert POST titolo:6 autore:666 testo:666 insertAction:save
-[2010-04-15 00:22:45] IP:::1 URI: /easygiant/postnew/form/insert POST titolo:5555 autore:666 testo:666 insertAction:save
-[2010-04-15 00:22:46] IP:::1 URI: /easygiant/postnew/main/1/undef/undef/undef POST
-[2010-04-15 00:23:16] IP:::1 URI: /easygiant/postnew/form/update/1/undef/undef/undef POST generalAction:Edit id:112
-[2010-04-15 00:23:19] IP:::1 URI: /easygiant/postnew/form/update POST titolo:5555 autore:666 testo:666 id:112 updateAction:save
-[2010-04-15 00:23:22] IP:::1 URI: /easygiant/postnew/form/update POST titolo:55 autore:666 testo:666 id:112 updateAction:save
-[2010-04-15 00:23:45] IP:::1 URI: /easygiant/postnew/form/update POST titolo:557 autore:666 testo:666 id:112 updateAction:save
-[2010-04-15 00:55:25] IP:::1 URI: /easygiant/panel/main POST
-[2010-04-15 00:55:27] IP:::1 URI: /easygiant/users/login POST
-[2010-04-15 00:55:31] IP:::1 URI: /easygiant/users/login POST username:admin password:admin
-[2010-04-15 00:55:34] IP:::1 URI: /easygiant/panel/main POST
-[2010-04-15 00:55:35] IP:::1 URI: /easygiant/pagine/main/1 POST
-[2010-04-15 00:57:27] IP:::1 URI: /easygiant/pagine/main/1/undef POST
-[2010-04-15 00:59:17] IP:::1 URI: /easygiant/pagine/main/1/undef POST
-[2010-04-15 01:18:45] IP:::1 URI: /easygiant/panel/main POST
-[2010-04-15 01:18:46] IP:::1 URI: /easygiant/users/login POST
-[2010-04-15 01:18:50] IP:::1 URI: /easygiant/users/login POST username:admin password:admin
-[2010-04-15 01:18:53] IP:::1 URI: /easygiant/panel/main POST
-[2010-04-15 01:18:54] IP:::1 URI: /easygiant/pagine/main/1 POST
-[2010-04-15 01:18:56] IP:::1 URI: /easygiant/panel/main POST
-[2010-04-15 01:18:57] IP:::1 URI: /easygiant/articles/main POST
-[2010-04-15 01:18:58] IP:::1 URI: /easygiant/External/tiny_mce/tiny_mce.js POST
-[2010-04-15 01:18:59] IP:::1 URI: /easygiant/articles/form/insert/1/undef/undef POST
-[2010-04-15 01:18:59] IP:::1 URI: /easygiant/External/tiny_mce/tiny_mce.js POST
-[2010-04-15 01:19:00] IP:::1 URI: /easygiant/articles/form/insert/1/undef/undef POST title: author: category:politica abstract: content: insertAction:Save
-[2010-04-15 01:19:01] IP:::1 URI: /easygiant/External/tiny_mce/tiny_mce.js POST
-[2010-04-15 01:19:02] IP:::1 URI: /easygiant/panel/main POST
-[2010-04-15 01:19:04] IP:::1 URI: /easygiant/articles/main POST
-[2010-04-15 01:19:04] IP:::1 URI: /easygiant/External/tiny_mce/tiny_mce.js POST
-[2010-04-15 01:19:05] IP:::1 URI: /easygiant/articles/main/1/undef/undef POST delAction:del id:19
-[2010-04-15 01:19:05] IP:::1 URI: /easygiant/External/tiny_mce/tiny_mce.js POST
-[2010-04-15 01:19:14] IP:::1 URI: /easygiant/panel/main POST
-[2010-04-15 01:19:15] IP:::1 URI: /easygiant/category/main POST
-[2010-04-15 01:19:18] IP:::1 URI: /easygiant/category/form/update/1/undef/token POST x:22 y:20 generalAction:edit id_navigation:133
-[2010-04-15 01:19:20] IP:::1 URI: /easygiant/category/form/update/1/undef/token POST name:qwewqe visibile:1 categoria: css: meta_ita: id_navigation:133 updateAction:Save
-[2010-04-15 01:19:23] IP:::1 URI: /easygiant/category/form/update/1/undef/token POST name:qwewqe tick:1 visibile:1 categoria: css: meta_ita: id_navigation:133 updateAction:Save
-[2010-04-15 01:19:23] IP:::1 URI: /easygiant/category/main/1/undef/token POST
-[2010-04-15 01:19:25] IP:::1 URI: /easygiant/panel/main POST
-[2010-04-15 01:19:26] IP:::1 URI: /easygiant/users/logout POST
-[2010-04-15 01:19:27] IP:::1 URI: /easygiant/users/login POST
-[2010-04-15 18:10:06] IP:::1 URI: /easygiant/panel/main POST
-[2010-04-15 18:10:08] IP:::1 URI: /easygiant/users/login POST
-[2010-04-15 18:10:12] IP:::1 URI: /easygiant/users/login POST username:admin password:admin
-[2010-04-15 18:10:16] IP:::1 URI: /easygiant/panel/main POST
-[2010-04-15 18:10:17] IP:::1 URI: /easygiant/pagine/main/1 POST
-[2010-04-15 18:10:54] IP:::1 URI: /easygiant/pagine/main/2/undef POST
-[2010-04-15 18:10:56] IP:::1 URI: /easygiant/pagine/main/1/undef POST
-[2010-04-15 18:12:03] IP:::1 URI: /easygiant/pagine/main/1/undef POST
-[2010-04-15 18:12:10] IP:::1 URI: /easygiant/panel/main POST
-[2010-04-15 18:12:15] IP:::1 URI: /easygiant/category/main POST
-[2010-04-15 18:12:26] IP:::1 URI: /easygiant/category/main/1/undef/token POST
-[2010-04-15 18:15:19] IP:::1 URI: /easygiant/pagine/testinclude POST
-[2010-04-15 18:16:44] IP:::1 URI: /easygiant/pagine/testinclude POST
-[2010-04-15 18:18:14] IP:::1 URI: /easygiant/pagine/testinclude POST
-[2010-04-15 18:18:54] IP:::1 URI: /easygiant/pagine/testinclude POST
-[2010-04-15 18:19:10] IP:::1 URI: /easygiant/pagine/testinclude POST
-[2010-04-15 18:19:26] IP:::1 URI: /easygiant/pagine/testinclude POST
-[2010-04-15 18:19:35] IP:::1 URI: /easygiant/pagine/testinclude POST
-[2010-04-15 18:19:47] IP:::1 URI: /easygiant/pagine/testinclude POST
-[2010-04-15 18:20:57] IP:::1 URI: /easygiant/panel/main POST
-[2010-04-15 18:20:58] IP:::1 URI: /easygiant/post/main POST
-[2010-04-15 18:21:03] IP:::1 URI: /easygiant/postnew/main POST
-[2010-04-15 18:21:53] IP:::1 URI: /easygiant/panel/main POST
-[2010-04-15 18:21:54] IP:::1 URI: /easygiant/users/logout POST
-[2010-04-15 18:21:55] IP:::1 URI: /easygiant/users/login POST
-[2010-04-15 18:21:58] IP:::1 URI: /easygiant/pagine/testinclude POST
-[2010-04-16 00:54:01] IP:::1 URI: /easygiant/panel/main POST
-[2010-04-16 00:54:02] IP:::1 URI: /easygiant/users/login POST
-[2010-04-16 00:54:06] IP:::1 URI: /easygiant/users/login POST username:admin password:admin
-[2010-04-16 00:54:09] IP:::1 URI: /easygiant/panel/main POST
-[2010-04-16 00:54:11] IP:::1 URI: /easygiant/pagine/main/1 POST
-[2010-04-16 00:54:12] IP:::1 URI: /easygiant/panel/main POST
-[2010-04-16 00:54:13] IP:::1 URI: /easygiant/post/main POST
-[2010-04-16 00:56:09] IP:::1 URI: /easygiant/post/main/2/undefi/undefi/undefi/undefi/undefi/undefi POST
-[2010-04-16 00:56:10] IP:::1 URI: /easygiant/post/main/1/undefi/undefi/undefi/undefi/undefi/undefi POST
-[2010-04-16 00:56:12] IP:::1 URI: /easygiant/post/main/2/undefi/undefi/undefi/undefi/undefi/undefi POST
-[2010-04-16 00:56:13] IP:::1 URI: /easygiant/post/main/1/undefi/undefi/undefi/undefi/undefi/undefi POST
-[2010-04-16 00:57:39] IP:::1 URI: /easygiant/post/form/update/1/undefi/undefi/undefi/undefi/undefi/undefi POST generalAction:edit id:112
-[2010-04-16 00:57:44] IP:::1 URI: /easygiant/post/form/update/1/undefi/undefi/undefi/undefi/undefi/undefi POST titolo:555 interop:0 autore:Antonio testo:666 intero:0 interom:0 interot:0 interob:0 xxx:0 fff:0 id:112 updateAction:Save
-[2010-04-16 00:57:50] IP:::1 URI: /easygiant/post/form/update/1/undefi/undefi/undefi/undefi/undefi/undefi POST titolo:555r interop:0 autore:Antonio testo:666 intero:werwer interom:0 interot:0 interob:0 xxx:0 fff:0 id:112 updateAction:Save
-[2010-04-16 00:57:54] IP:::1 URI: /easygiant/post/form/update/1/undefi/undefi/undefi/undefi/undefi/undefi POST titolo:555r interop:0 autore:Antonio testo:666 intero:121212 interom:0 interot:0 interob:0 xxx:0 fff:0 id:112 updateAction:Save
-[2010-04-16 00:57:58] IP:::1 URI: /easygiant/post/form/update/1/undefi/undefi/undefi/undefi/undefi/undefi POST titolo:555r interop:0 autore:Antonio testo:666 intero:12121212 interom:0 interot:0 interob:0 xxx:0 fff:0 id:112 updateAction:Save
-[2010-04-16 00:58:00] IP:::1 URI: /easygiant/post/main/1/undefi/undefi/undefi/undefi/undefi/undefi POST
-[2010-04-16 00:58:03] IP:::1 URI: /easygiant/post/main/1/undefi/undefi/undefi/undefi/undefi/undefi POST moveupAction:up id:106
-[2010-04-16 00:58:05] IP:::1 URI: /easygiant/post/main/1/undefi/undefi/undefi/undefi/undefi/undefi POST moveupAction:up id:108
-[2010-04-16 00:58:07] IP:::1 URI: /easygiant/post/main/1/undefi/undefi/undefi/undefi/Friday/undefi POST
-[2010-04-16 00:58:10] IP:::1 URI: /easygiant/post/main/1/undefi/undefi/undefi/undefi/Thursday/undefi POST
-[2010-04-16 00:58:12] IP:::1 URI: /easygiant/post/main/1/undefi/undefi/undefi/undefi/Thursday/undefi POST moveupAction:up id:104
-[2010-04-16 00:58:13] IP:::1 URI: /easygiant/post/main/1/undefi/undefi/undefi/undefi/Thursday/undefi POST moveupAction:up id:104
-[2010-04-16 00:58:16] IP:::1 URI: /easygiant/post/main/1/undefi/undefi/undefi/undefi/undefi/undefi POST
-[2010-04-16 00:58:22] IP:::1 URI: /easygiant/panel/main POST
-[2010-04-16 00:58:23] IP:::1 URI: /easygiant/users/logout POST
-[2010-04-16 00:58:24] IP:::1 URI: /easygiant/users/login POST
-[2010-04-16 20:23:04] IP:::1 URI: /easygiant/panel/main POST
-[2010-04-16 20:23:06] IP:::1 URI: /easygiant/users/login POST
-[2010-04-16 20:23:10] IP:::1 URI: /easygiant/users/login POST username:admin password:admin
-[2010-04-16 20:23:13] IP:::1 URI: /easygiant/panel/main POST
-[2010-04-16 20:23:26] IP:::1 URI: /easygiant/articles/main POST
-[2010-04-16 20:23:26] IP:::1 URI: /easygiant/External/tiny_mce/tiny_mce.js POST
-[2010-04-16 20:23:31] IP:::1 URI: /easygiant/panel/main POST
-[2010-04-16 20:23:47] IP:::1 URI: /easygiant/category/main POST
-[2010-04-16 20:24:02] IP:::1 URI: /easygiant/category/main POST
-[2010-04-16 20:24:04] IP:::1 URI: /easygiant/category/form/update/1/undef/token POST x:13 y:24 generalAction:edit id_navigation:133
-[2010-04-16 20:24:04] IP:::1 URI: /easygiant/Public/Img/header.png POST
-[2010-04-16 20:24:04] IP:::1 URI: /easygiant/Public/Img/footer.png POST
-[2010-04-16 20:24:16] IP:::1 URI: /easygiant/category//update/1/undef/token POST
-[2010-04-16 20:24:16] IP:::1 URI: /easygiant/Public/Img/footer.png POST
-[2010-04-16 20:24:16] IP:::1 URI: /easygiant/Public/Img/header.png POST
-[2010-04-16 20:24:29] IP:::1 URI: /easygiant/panel/main POST
-[2010-04-16 20:38:56] IP:::1 URI: /easygiant/pagine/main/1 POST
-[2010-04-16 20:38:59] IP:::1 URI: /easygiant/pagine/main/1/undef POST moveupAction:up id_pagine:84
-[2010-04-16 20:39:00] IP:::1 URI: /easygiant/pagine/main/1/undef POST moveupAction:up id_pagine:85
-[2010-04-16 20:39:01] IP:::1 URI: /easygiant/panel/main POST
-[2010-04-16 20:39:03] IP:::1 URI: /easygiant/articles/main POST
-[2010-04-16 20:39:03] IP:::1 URI: /easygiant/External/tiny_mce/tiny_mce.js POST
-[2010-04-16 20:39:04] IP:::1 URI: /easygiant/panel/main POST
-[2010-04-16 20:39:05] IP:::1 URI: /easygiant/post/main POST
-[2010-04-16 20:39:07] IP:::1 URI: /easygiant/panel/main POST
-[2010-04-16 20:39:08] IP:::1 URI: /easygiant/users/main POST
-[2010-04-16 20:39:10] IP:::1 URI: /easygiant/panel/main POST
-[2010-04-16 20:39:10] IP:::1 URI: /easygiant/users/logout POST
-[2010-04-16 20:39:11] IP:::1 URI: /easygiant/users/login POST
-[2010-04-16 20:51:05] IP:::1 URI: /easygiant/users/login POST username:admin password:admin
-[2010-04-16 20:51:08] IP:::1 URI: /easygiant/panel/main POST
-[2010-04-16 20:51:10] IP:::1 URI: /easygiant/pagine/main/1 POST
-[2010-04-16 20:51:12] IP:::1 URI: /easygiant/panel/main POST
-[2010-04-16 20:52:50] IP:::1 URI: /easygiant/category/main POST
-[2010-04-16 20:52:51] IP:::1 URI: /easygiant/panel/main POST
-[2010-04-16 20:52:52] IP:::1 URI: /easygiant/category/main POST
-[2010-04-16 20:52:53] IP:::1 URI: /easygiant/panel/main POST
-[2010-04-16 20:52:56] IP:::1 URI: /easygiant/pagine/main/1 POST
-[2010-04-16 20:52:58] IP:::1 URI: /easygiant/pagine/main/2/undef POST
-[2010-04-16 20:52:59] IP:::1 URI: /easygiant/panel/main POST
-[2010-04-16 20:53:00] IP:::1 URI: /easygiant/category/main POST
-[2010-04-16 20:53:32] IP:::1 URI: /easygiant/panel/main POST
-[2010-04-16 20:53:40] IP:::1 URI: /easygiant/panel POST
-[2010-04-16 20:53:54] IP:::1 URI: /easygiant/panel POST
-[2010-04-16 20:54:16] IP:::1 URI: /easygiant/panel POST
-[2010-04-16 20:54:20] IP:::1 URI: /easygiant/panel/cazzo POST
-[2010-04-16 20:54:23] IP:::1 URI: /easygiant/panel/cazzo POST
-[2010-04-16 20:54:25] IP:::1 URI: /easygiant/category/main POST
-[2010-04-16 20:54:29] IP:::1 URI: /easygiant/panel/main POST
-[2010-04-16 20:54:30] IP:::1 URI: /easygiant/category/main POST
-[2010-04-16 20:54:31] IP:::1 URI: /easygiant/panel/main POST
-[2010-04-16 20:54:32] IP:::1 URI: /easygiant/pagine/main/1 POST
-[2010-04-16 20:54:33] IP:::1 URI: /easygiant/panel/main POST
-[2010-04-16 20:54:34] IP:::1 URI: /easygiant/category/main POST
-[2010-04-16 20:54:36] IP:::1 URI: /easygiant/panel/main POST
-[2010-04-16 20:56:41] IP:::1 URI: /easygiant/panel/main POST
-[2010-04-16 20:56:41] IP:::1 URI: /easygiant/Public/Img/header.png POST
-[2010-04-16 20:56:41] IP:::1 URI: /easygiant/Public/Img/footer.png POST
-[2010-04-16 20:56:49] IP:::1 URI: /easygiant/panel POST
-[2010-04-16 20:56:49] IP:::1 URI: /easygiant/Public/Img/footer.png POST
-[2010-04-16 20:56:49] IP:::1 URI: /easygiant/Public/Img/header.png POST
-[2010-04-16 20:57:02] IP:::1 URI: /easygiant/panel/cazzo POST
-[2010-04-16 20:57:25] IP:::1 URI: /easygiant/panel POST
-[2010-04-16 20:57:25] IP:::1 URI: /easygiant/Public/Img/footer.png POST
-[2010-04-16 20:57:25] IP:::1 URI: /easygiant/Public/Img/header.png POST
-[2010-04-16 20:57:55] IP:::1 URI: /easygiant/panel POST
-[2010-04-16 20:58:09] IP:::1 URI: /easygiant/panel POST
-[2010-04-16 20:58:15] IP:::1 URI: /easygiant/panel/main POST
-[2010-04-16 20:58:19] IP:::1 URI: /easygiant/pagine/main/1 POST
-[2010-04-16 20:58:23] IP:::1 URI: /easygiant/panel/main POST
-[2010-04-16 20:58:24] IP:::1 URI: /easygiant/groups/main POST
-[2010-04-16 21:00:05] IP:::1 URI: /easygiant/panel/main POST
-[2010-04-16 21:00:05] IP:::1 URI: /easygiant/Public/Img/footer.png POST
-[2010-04-16 21:00:05] IP:::1 URI: /easygiant/Public/Img/header.png POST
-[2010-04-16 21:00:21] IP:::1 URI: /easygiant/panel/main POST
-[2010-04-16 21:00:23] IP:::1 URI: /easygiant/pagine/main/1 POST
-[2010-04-16 21:00:25] IP:::1 URI: /easygiant/pagine/form/update/1/undef POST generalAction:edit id_pagine:85
-[2010-04-16 21:00:27] IP:::1 URI: /easygiant/pagine/form/update/1/undef POST name:12 id_navigation:109 titolo:1 html:name id_pagine:85 updateAction:Save
-[2010-04-16 21:00:29] IP:::1 URI: /easygiant/pagine/main/1/undef POST
-[2010-04-16 21:00:30] IP:::1 URI: /easygiant/panel/main POST
-[2010-04-16 21:00:31] IP:::1 URI: /easygiant/category/main POST
-[2010-04-16 21:00:31] IP:::1 URI: /easygiant/Public/Img/header.png POST
-[2010-04-16 21:00:31] IP:::1 URI: /easygiant/Public/Img/footer.png POST
-[2010-04-16 21:01:12] IP:::1 URI: /easygiant/panel/main POST
-[2010-04-16 21:01:12] IP:::1 URI: /easygiant/Public/Img/header.png POST
-[2010-04-16 21:01:12] IP:::1 URI: /easygiant/Public/Img/footer.png POST
-[2010-04-16 21:01:25] IP:::1 URI: /easygiant/panel/main POST
-[2010-04-16 21:02:29] IP:::1 URI: /easygiant/pagine/main/1 POST
-[2010-04-16 21:02:30] IP:::1 URI: /easygiant/panel/main POST
-[2010-04-16 21:02:31] IP:::1 URI: /easygiant/articles/main POST
-[2010-04-16 21:02:31] IP:::1 URI: /easygiant/Public/Img/header.png POST
-[2010-04-16 21:02:31] IP:::1 URI: /easygiant/Public/Img/footer.png POST
-[2010-04-16 21:02:34] IP:::1 URI: /easygiant/post/main POST
-[2010-04-16 21:02:34] IP:::1 URI: /easygiant/Public/Img/header.png POST
-[2010-04-16 21:02:34] IP:::1 URI: /easygiant/Public/Img/footer.png POST
-[2010-04-16 21:06:12] IP:::1 URI: /easygiant/pagine/main/1 POST
-[2010-04-16 21:06:14] IP:::1 URI: /easygiant/panel/main POST
-[2010-04-16 21:06:15] IP:::1 URI: /easygiant/pagine/main/1 POST
-[2010-04-16 21:06:16] IP:::1 URI: /easygiant/panel/main POST
-[2010-04-16 21:06:17] IP:::1 URI: /easygiant/panel/main POST
-[2010-04-16 21:07:39] IP:::1 URI: /easygiant/pagine/main/1 POST
-[2010-04-16 21:07:40] IP:::1 URI: /easygiant/pagine/main/2/undef POST
-[2010-04-16 21:07:42] IP:::1 URI: /easygiant/pagine/form/insert/2/undef POST
-[2010-04-16 21:07:42] IP:::1 URI: /easygiant/panel/main POST
-[2010-04-16 21:07:43] IP:::1 URI: /easygiant/groups/main POST
-[2010-04-16 21:07:44] IP:::1 URI: /easygiant/panel/main POST
-[2010-04-16 21:07:49] IP:::1 URI: /easygiant/pagine/main/1 POST
-[2010-04-16 21:07:50] IP:::1 URI: /easygiant/Public/Img/header.png POST
-[2010-04-16 21:07:50] IP:::1 URI: /easygiant/Public/Img/footer.png POST
-[2010-04-16 21:07:52] IP:::1 URI: /easygiant/post/main POST
-[2010-04-16 21:07:52] IP:::1 URI: /easygiant/Public/Img/footer.png POST
-[2010-04-16 21:07:52] IP:::1 URI: /easygiant/Public/Img/header.png POST
-[2010-04-16 21:07:54] IP:::1 URI: /easygiant/category/main POST
-[2010-04-16 21:07:54] IP:::1 URI: /easygiant/Public/Img/header.png POST
-[2010-04-16 21:07:54] IP:::1 URI: /easygiant/Public/Img/footer.png POST
-[2010-04-16 21:07:57] IP:::1 URI: /easygiant/groups/main POST
-[2010-04-16 21:07:57] IP:::1 URI: /easygiant/Public/Img/header.png POST
-[2010-04-16 21:07:57] IP:::1 URI: /easygiant/Public/Img/footer.png POST
-[2010-04-16 21:07:59] IP:::1 URI: /easygiant/upload/main POST
-[2010-04-16 21:07:59] IP:::1 URI: /easygiant/Public/Img/header.png POST
-[2010-04-16 21:07:59] IP:::1 URI: /easygiant/Public/Img/footer.png POST
-[2010-04-16 21:08:01] IP:::1 URI: /easygiant/post/main POST
-[2010-04-16 21:08:01] IP:::1 URI: /easygiant/Public/Img/footer.png POST
-[2010-04-16 21:08:01] IP:::1 URI: /easygiant/Public/Img/header.png POST
-[2010-04-16 21:08:03] IP:::1 URI: /easygiant/news/main POST
-[2010-04-16 21:08:03] IP:::1 URI: /easygiant/Public/Img/header.png POST
-[2010-04-16 21:08:03] IP:::1 URI: /easygiant/Public/Img/footer.png POST
-[2010-04-16 21:08:05] IP:::1 URI: /easygiant/pagine/main/1 POST
-[2010-04-16 21:08:05] IP:::1 URI: /easygiant/Public/Img/header.png POST
-[2010-04-16 21:08:05] IP:::1 URI: /easygiant/Public/Img/footer.png POST
-[2010-04-16 21:08:07] IP:::1 URI: /easygiant/category/main POST
-[2010-04-16 21:08:07] IP:::1 URI: /easygiant/Public/Img/header.png POST
-[2010-04-16 21:08:07] IP:::1 URI: /easygiant/Public/Img/footer.png POST
-[2010-04-16 21:08:09] IP:::1 URI: /easygiant/groups/main POST
-[2010-04-16 21:08:09] IP:::1 URI: /easygiant/Public/Img/header.png POST
-[2010-04-16 21:08:09] IP:::1 URI: /easygiant/Public/Img/footer.png POST
-[2010-04-16 21:08:11] IP:::1 URI: /easygiant/users/main POST
-[2010-04-16 21:08:11] IP:::1 URI: /easygiant/Public/Img/header.png POST
-[2010-04-16 21:08:11] IP:::1 URI: /easygiant/Public/Img/footer.png POST
-[2010-04-16 21:08:13] IP:::1 URI: /easygiant/post/main POST
-[2010-04-16 21:08:13] IP:::1 URI: /easygiant/Public/Img/header.png POST
-[2010-04-16 21:08:13] IP:::1 URI: /easygiant/Public/Img/footer.png POST
-[2010-04-16 21:08:15] IP:::1 URI: /easygiant/password/form POST
-[2010-04-16 21:08:15] IP:::1 URI: /easygiant/Public/Img/header.png POST
-[2010-04-16 21:08:15] IP:::1 URI: /easygiant/Public/Img/footer.png POST
-[2010-04-16 21:08:31] IP:::1 URI: /easygiant/pagine/main/1 POST
-[2010-04-16 21:08:36] IP:::1 URI: /easygiant/panel/main POST
-[2010-04-16 21:08:40] IP:::1 URI: /easygiant/post/main POST
-[2010-04-16 21:08:41] IP:::1 URI: /easygiant/Public/Img/header.png POST
-[2010-04-16 21:08:41] IP:::1 URI: /easygiant/Public/Img/footer.png POST
-[2010-04-16 21:11:07] IP:::1 URI: /easygiant/groups/main POST
-[2010-04-16 21:11:07] IP:::1 URI: /easygiant/Public/Img/header.png POST
-[2010-04-16 21:11:07] IP:::1 URI: /easygiant/Public/Img/footer.png POST
-[2010-04-16 21:11:09] IP:::1 URI: /easygiant/pagine/main/1 POST
-[2010-04-16 21:11:11] IP:::1 URI: /easygiant/pagine/form/insert/1/undef POST
-[2010-04-16 21:12:13] IP:::1 URI: /easygiant/pagine/main/1/undef POST
-[2010-04-16 21:12:17] IP:::1 URI: /easygiant/pagine/form/insert/1/undef POST
-[2010-04-16 21:12:42] IP:::1 URI: /easygiant/pagine/form/insert/1/undef POST
-[2010-04-16 21:13:39] IP:::1 URI: /easygiant/pagine/form/insert/1/undef POST
-[2010-04-16 21:18:29] IP:::1 URI: /easygiant/pagine/form/insert/1/undef POST
-[2010-04-16 21:18:34] IP:::1 URI: /easygiant/pagine/form/insert/1/undef POST
-[2010-04-16 21:18:44] IP:::1 URI: /easygiant/pagine/form/insert/1/undef POST
-[2010-04-16 21:19:23] IP:::1 URI: /easygiant/pagine/form/insert/1/undef POST
-[2010-04-16 21:19:39] IP:::1 URI: /easygiant/pagine/form/form/1/1 POST generalAction:Save
-[2010-04-16 21:19:41] IP:::1 URI: /easygiant/pagine/form/form/1/1 POST generalAction:Save
-[2010-04-16 21:19:44] IP:::1 URI: /easygiant/pagine/form/form/1/1 POST generalAction:Save
-[2010-04-16 21:19:45] IP:::1 URI: /easygiant/pagine/form/form/1/1 POST generalAction:Save
-[2010-04-16 21:19:46] IP:::1 URI: /easygiant/pagine/form/form/1/1 POST generalAction:Save
-[2010-04-16 21:19:48] IP:::1 URI: /easygiant/pagine/form/form/1/1 POST generalAction:Save
-[2010-04-16 21:19:52] IP:::1 URI: /easygiant/pagine/form/form/1/1 POST generalAction:Save
-[2010-04-16 21:19:52] IP:::1 URI: /easygiant/pagine/form/form/1/1 POST generalAction:Save
-[2010-04-16 21:19:55] IP:::1 URI: /easygiant/panel/main POST
-[2010-04-16 21:19:57] IP:::1 URI: /easygiant/pagine/main/1 POST
-[2010-04-16 21:19:59] IP:::1 URI: /easygiant/pagine/form/insert/1/undef POST
-[2010-04-16 21:20:14] IP:::1 URI: /easygiant/pagine/form/form/1/1 POST generalAction:Save
-[2010-04-16 21:20:17] IP:::1 URI: /easygiant/pagine/form/form/1/1 POST generalAction:Save
-[2010-04-16 21:30:59] IP:::1 URI: /easygiant/pagine/form/form/1/1 POST generalAction:Save
-[2010-04-16 21:31:26] IP:::1 URI: /easygiant/panel/main POST
-[2010-04-16 21:31:56] IP:::1 URI: /easygiant/category/main POST
-[2010-04-16 21:31:56] IP:::1 URI: /easygiant/Public/Img/header.png POST
-[2010-04-16 21:31:56] IP:::1 URI: /easygiant/Public/Img/footer.png POST
-[2010-04-16 21:32:04] IP:::1 URI: /easygiant/panel/main POST
-[2010-04-16 21:32:05] IP:::1 URI: /easygiant/category/main POST
-[2010-04-16 21:32:05] IP:::1 URI: /easygiant/Public/Img/header.png POST
-[2010-04-16 21:32:05] IP:::1 URI: /easygiant/Public/Img/footer.png POST
-[2010-04-16 21:32:12] IP:::1 URI: /easygiant/pagine/main/1 POST
-[2010-04-16 21:32:15] IP:::1 URI: /easygiant/pagine/main/2/undef POST
-[2010-04-16 21:32:16] IP:::1 URI: /easygiant/panel/main POST
-[2010-04-16 21:32:18] IP:::1 URI: /easygiant/pagine/main/1 POST
-[2010-04-16 21:32:18] IP:::1 URI: /easygiant/pagine/form/insert/1/undef POST
-[2010-04-16 21:32:22] IP:::1 URI: /easygiant/pagine/main/1/undef POST
-[2010-04-16 21:32:33] IP:::1 URI: /easygiant/panel/main POST
-[2010-04-16 21:32:37] IP:::1 URI: /easygiant/users/logout POST
-[2010-04-16 21:32:39] IP:::1 URI: /easygiant/users/login POST
-[2010-04-16 21:57:16] IP:::1 URI: /easygiant/users/login POST username:admin password:admin
-[2010-04-16 21:57:19] IP:::1 URI: /easygiant/panel/main POST
-[2010-04-16 21:57:20] IP:::1 URI: /easygiant/pagine/main/1 POST
-[2010-04-16 21:57:22] IP:::1 URI: /easygiant/pagine/main/2/undef POST
-[2010-04-16 21:57:23] IP:::1 URI: /easygiant/panel/main POST
-[2010-04-16 21:57:24] IP:::1 URI: /easygiant/articles/main POST
-[2010-04-16 21:57:24] IP:::1 URI: /easygiant/External/tiny_mce/tiny_mce.js POST
-[2010-04-16 21:57:26] IP:::1 URI: /easygiant/panel/main POST
-[2010-04-16 21:57:52] IP:::1 URI: /easygiant/panel/main POST
-[2010-04-16 21:58:38] IP:::1 URI: /easygiant/category/main POST
-[2010-04-16 21:58:39] IP:::1 URI: /easygiant/panel/main POST
-[2010-04-16 21:58:40] IP:::1 URI: /easygiant/users/main POST
-[2010-04-16 21:58:41] IP:::1 URI: /easygiant/users/form/insert/1/0 POST
-[2010-04-16 21:58:43] IP:::1 URI: /easygiant/users/form/insert/1/0 POST username: password: confirmation: insertAction:Save
-[2010-04-16 21:58:44] IP:::1 URI: /easygiant/panel/main POST
-[2010-04-16 21:58:45] IP:::1 URI: /easygiant/upload/main POST
-[2010-04-16 21:58:45] IP:::1 URI: /easygiant/External/jquery/jquery-1.3.2.min.js POST
-[2010-04-16 21:58:47] IP:::1 URI: /easygiant/panel/main POST
-[2010-04-16 21:58:48] IP:::1 URI: /easygiant/users/logout POST
-[2010-04-16 21:58:49] IP:::1 URI: /easygiant/users/login POST
-[2010-04-18 00:11:37] IP:::1 URI: /easygiant/panel/main POST
-[2010-04-18 00:11:39] IP:::1 URI: /easygiant/users/login POST
-[2010-04-18 00:11:42] IP:::1 URI: /easygiant/users/login POST username:admin password:admin
-[2010-04-18 00:11:45] IP:::1 URI: /easygiant/panel/main POST
-[2010-04-18 00:11:47] IP:::1 URI: /easygiant/pagine/main/1 POST
-[2010-04-18 00:12:21] IP:::1 URI: /easygiant/pagine/main/2/undef POST
-[2010-04-18 00:12:22] IP:::1 URI: /easygiant/pagine/main/1/undef POST
-[2010-04-18 00:13:22] IP:::1 URI: /easygiant/cazzo POST
-[2010-04-18 00:13:27] IP:::1 URI: /easygiant/pene POST
-[2010-04-18 00:13:34] IP:::1 URI: /easygiant/cazzo POST
-[2010-04-18 00:13:36] IP:::1 URI: /easygiant/cazzoe POST
-[2010-04-18 00:13:58] IP:::1 URI: /easygiant/cazzo/ POST
-[2010-04-18 00:14:05] IP:::1 URI: /easygiant/cazzo/wer/erwwer/ POST
-[2010-04-18 00:14:19] IP:::1 URI: /easygiant/cazzor/wer/erwwer/ POST
-[2010-04-18 00:15:06] IP:::1 URI: /easygiant/cazzor/wer/erwwer/ POST
-[2010-04-18 00:17:08] IP:::1 URI: /easygiant/cazzor/wer/erwwer/ POST
-[2010-04-18 00:17:13] IP:::1 URI: /easygiant/cazzo/wer/erwwer/ POST
-[2010-04-18 00:17:27] IP:::1 URI: /easygiant/cazzo/wer/erwwer/ POST
-[2010-04-18 00:17:29] IP:::1 URI: /easygiant/cazzo/wer/erwwer/ POST
-[2010-04-18 00:19:37] IP:::1 URI: /easygiant/cazzo/wer/erwwer/ POST
-[2010-04-18 00:19:43] IP:::1 URI: /easygiant/cazzoe/wer/erwwer/ POST
-[2010-04-18 00:19:56] IP:::1 URI: /easygiant/pene/wer/erwwer/ POST
-[2010-04-18 00:20:53] IP:::1 URI: /easygiant/pene/wer/erwwer/ POST
-[2010-04-18 00:20:58] IP:::1 URI: /easygiant/cazzo/wer/erwwer/ POST
-[2010-04-18 00:21:09] IP:::1 URI: /easygiant/pene/wer/erwwer/ POST
-[2010-04-18 00:21:24] IP:::1 URI: /easygiant/pagine/main/1 POST
-[2010-04-18 00:21:38] IP:::1 URI: /easygiant/pagine/main/1 POST
-[2010-04-18 00:21:40] IP:::1 URI: /easygiant/pagine/main POST
-[2010-04-18 00:21:55] IP:::1 URI: /easygiant/pene POST
-[2010-04-18 00:22:00] IP:::1 URI: /easygiant/pene/ POST
-[2010-04-18 00:22:04] IP:::1 URI: /easygiant/pene/werewr POST
-[2010-04-18 00:22:15] IP:::1 URI: /easygiant/pene/werewr/erwer/erwerew POST
-[2010-04-18 00:22:36] IP:::1 URI: /easygiant/ POST
-[2010-04-18 00:22:43] IP:::1 URI: /easygiant/pene POST
-[2010-04-18 00:22:47] IP:::1 URI: /easygiant/pene/ POST
-[2010-04-18 00:23:06] IP:::1 URI: /easygiant/pagine/main/2/undef POST
-[2010-04-18 00:30:18] IP:::1 URI: /easygiant/pagine/main/2/undef POST
-[2010-04-18 00:30:48] IP:::1 URI: /easygiant/pagine/main/2/undef POST
-[2010-04-18 00:30:51] IP:::1 URI: /easygiant/pagine/main/2/undef POST
-[2010-04-18 00:31:05] IP:::1 URI: /easygiant/pagine/main/2/undef POST
-[2010-04-18 00:31:06] IP:::1 URI: /easygiant/pagine/main/1/undef POST
-[2010-04-18 00:31:08] IP:::1 URI: /easygiant/pagine/main/2/undef POST
-[2010-04-18 00:31:09] IP:::1 URI: /easygiant/pagine/main/1/undef POST
-[2010-04-18 00:31:10] IP:::1 URI: /easygiant/pagine/main/2/undef POST
-[2010-04-18 00:31:11] IP:::1 URI: /easygiant/pagine/main/1/undef POST
-[2010-04-18 00:31:13] IP:::1 URI: /easygiant/pagine/main/2/undef POST
-[2010-04-18 00:31:14] IP:::1 URI: /easygiant/pagine/main/1/undef POST
-[2010-04-18 00:31:15] IP:::1 URI: /easygiant/pagine/main/2/undef POST
-[2010-04-18 00:31:16] IP:::1 URI: /easygiant/pagine/main/1/undef POST
-[2010-04-18 00:31:54] IP:::1 URI: /easygiant/pagine/main/2/undef POST
-[2010-04-18 00:56:41] IP:::1 URI: /easygiant/pagine/main/1/undef POST
-[2010-04-18 00:56:43] IP:::1 URI: /easygiant/pagine/main/2/undef POST
-[2010-04-18 00:56:44] IP:::1 URI: /easygiant/pagine/main/1/undef POST
-[2010-04-18 00:56:54] IP:::1 URI: /easygiant/pagine/main/1/undef POST
-[2010-04-18 00:57:04] IP:::1 URI: /easygiant/pagine/main/1/undef POST
-[2010-04-18 00:57:04] IP:::1 URI: /easygiant/Public/Img/header.png POST
-[2010-04-18 00:57:04] IP:::1 URI: /easygiant/Public/Img/footer.png POST
-[2010-04-18 01:00:40] IP:::1 URI: /easygiant/pagine/main/1/undef POST
-[2010-04-18 01:00:52] IP:::1 URI: /easygiant/articles/index POST
-[2010-04-18 01:00:52] IP:::1 URI: /easygiant/Public/Img/header.png POST
-[2010-04-18 01:00:52] IP:::1 URI: /easygiant/Public/Img/footer.png POST
-[2010-04-18 01:00:55] IP:::1 URI: /easygiant/articles/index POST
-[2010-04-18 01:00:55] IP:::1 URI: /easygiant/Public/Img/header.png POST
-[2010-04-18 01:00:55] IP:::1 URI: /easygiant/Public/Img/footer.png POST
-[2010-04-18 01:01:01] IP:::1 URI: /easygiant/panel/main POST
-[2010-04-18 01:01:03] IP:::1 URI: /easygiant/box/main POST
-[2010-04-18 01:01:06] IP:::1 URI: /easygiant/box/form/update/1/id/undef POST generalAction:edit id:1
-[2010-04-18 01:01:20] IP:::1 URI: /easygiant/box/form/update/1/id/undef POST allowed_titles:right title:right xml:<box>
- <mod>
- <type>image</type>
- <src>http://upload.wikimedia.org/wikipedia/commons/thumb/a/ae/Bundesarchiv_Bild_183-R76619%2C_Russland%2C_Kesselschlacht_Stalingrad.jpg/150px-Bundesarchiv_Bild_183-R76619%2C_Russland%2C_Kesselschlacht_Stalingrad.jpg</src>
-<width>120px</width>
-<height>100px</height>
-<title>Prima prova di title</title>
- </mod>
-
- <mod>
- <type>link</type>
- <href>http://www.internettaio.org</href>
- <text>Internettaio</text>
- <classname>classname</classname>
-
- </mod>
-
-<mod>
-<type>linkimage</type>
-<href>http://www.php.net</href>
-<src>http://static.php.net/www.php.net/images/php.gif</src>
-<width>150px</width>
-</mod>
-
-<mod>
-
-<type>raw</type>
-<text><![CDATA[
-
-ciao!! <a href="http://www.easygiant.org"><b>Easy!!</b></a>
-
-]]></text>
-
-</mod>
-
- <mod>
- <type>link</type>
- <href>http://www.apineindustriose.org</href>
- <text>Apineindustriose</text>
- <classname>classname</classname>
-
- </mod>
-
-
-
-
-
-</box> id:1 updateAction:Save
-[2010-04-18 01:01:23] IP:::1 URI: /easygiant/articles/index POST
-[2010-04-18 01:01:23] IP:::1 URI: /easygiant/Public/Img/header.png POST
-[2010-04-18 01:01:23] IP:::1 URI: /easygiant/Public/Img/footer.png POST
-[2010-04-18 01:03:28] IP:::1 URI: /easygiant/box/form/update/1/id/undef POST allowed_titles:right title:right xml:<box>
- <mod>
- <type>image</type>
- <src>http://upload.wikimedia.org/wikipedia/commons/thumb/a/ae/Bundesarchiv_Bild_183-R76619%2C_Russland%2C_Kesselschlacht_Stalingrad.jpg/150px-Bundesarchiv_Bild_183-R76619%2C_Russland%2C_Kesselschlacht_Stalingrad.jpg</src>
-<width>120px</width>
-<height>100px</height>
-<title>Prima prova di title</title>
- </mod>
-
- <mod>
- <type>link</type>
- <href>http://www.internettaio.org</href>
- <text>Internettaio</text>
- <classname>classname</classname>
-
- </mod>
-
-<mod>
-<type>linkimage</type>
-<href>http://www.php.net</href>
-<src>http://static.php.net/www.php.net/images/php.gif</src>
-<width>150px</width>
-</mod>
-
-<mod>
-
-
-<text><![CDATA[
-
-ciao!! <a href="http://www.easygiant.org"><b>Easy!!</b></a>
-
-]]></text>
-
-</mod>
-
- <mod>
- <type>link</type>
- <href>http://www.apineindustriose.org</href>
- <text>Apineindustriose</text>
- <classname>classname</classname>
-
- </mod>
-
-
-
-
-
-</box> id:1 updateAction:Save
-[2010-04-18 01:03:30] IP:::1 URI: /easygiant/articles/index POST
-[2010-04-18 01:03:30] IP:::1 URI: /easygiant/Public/Img/header.png POST
-[2010-04-18 01:03:30] IP:::1 URI: /easygiant/Public/Img/footer.png POST
-[2010-04-18 01:03:52] IP:::1 URI: /easygiant/box/form/update/1/id/undef POST allowed_titles:right title:right xml:<box>
- <mod>
- <type>image</type>
- <src>http://upload.wikimedia.org/wikipedia/commons/thumb/a/ae/Bundesarchiv_Bild_183-R76619%2C_Russland%2C_Kesselschlacht_Stalingrad.jpg/150px-Bundesarchiv_Bild_183-R76619%2C_Russland%2C_Kesselschlacht_Stalingrad.jpg</src>
-<width>120px</width>
-<height>100px</height>
-<title>Prima prova di title</title>
- </mod>
-
- <mod>
- <type>link</type>
- <href>http://www.internettaio.org</href>
- <text>Internettaio</text>
- <classname>classname</classname>
-
- </mod>
-
-<mod>
-<type>linkimage</type>
-<href>http://www.php.net</href>
-<src>http://static.php.net/www.php.net/images/php.gif</src>
-<width>150px</width>
-</mod>
-
-<mod>
-
-<type>raw</type>
-<text><![CDATA[
-
-ciao!! <a href="http://www.easygiant.org"><b>Easy!!</b></a>
-
-]]></text>
-
-</mod>
-
- <mod>
- <type>link</type>
- <href>http://www.apineindustriose.org</href>
- <text>Apineindustriose</text>
- <classname>classname</classname>
-
- </mod>
-
-
-
-
-
-</box> id:1 updateAction:Save
-[2010-04-18 01:03:55] IP:::1 URI: /easygiant/articles/index POST
-[2010-04-18 01:03:55] IP:::1 URI: /easygiant/Public/Img/header.png POST
-[2010-04-18 01:03:55] IP:::1 URI: /easygiant/Public/Img/footer.png POST
-[2010-04-18 01:08:07] IP:::1 URI: /easygiant/box/main/1/id/undef POST
-[2010-04-18 01:08:13] IP:::1 URI: /easygiant/box/form/insert/1/id/undef POST
-[2010-04-18 01:16:44] IP:::1 URI: /easygiant/box/main/1/id/undef POST
-[2010-04-18 01:16:48] IP:::1 URI: /easygiant/users/login POST
-[2010-04-18 01:16:51] IP:::1 URI: /easygiant/users/login POST username:admin password:admin
-[2010-04-18 01:16:55] IP:::1 URI: /easygiant/panel/main POST
-[2010-04-18 01:16:55] IP:::1 URI: /easygiant/category/main POST
-[2010-04-18 01:24:22] IP:::1 URI: /easygiant/articles/index POST
-[2010-04-18 01:24:23] IP:::1 URI: /easygiant/articles/index POST
-[2010-04-18 01:24:23] IP:::1 URI: /easygiant/Public/Img/header.png POST
-[2010-04-18 01:24:23] IP:::1 URI: /easygiant/Public/Img/footer.png POST
-[2010-04-18 01:24:24] IP:::1 URI: /easygiant/articles/index POST
-[2010-04-18 01:24:24] IP:::1 URI: /easygiant/Public/Img/header.png POST
-[2010-04-18 01:24:24] IP:::1 URI: /easygiant/Public/Img/footer.png POST
-[2010-04-18 01:24:27] IP:::1 URI: /easygiant/articles/index POST
-[2010-04-18 01:24:27] IP:::1 URI: /easygiant/Public/Img/header.png POST
-[2010-04-18 01:24:27] IP:::1 URI: /easygiant/Public/Img/footer.png POST
-[2010-04-18 01:24:28] IP:::1 URI: /easygiant/articles/index POST
-[2010-04-18 01:24:28] IP:::1 URI: /easygiant/Public/Img/header.png POST
-[2010-04-18 01:24:28] IP:::1 URI: /easygiant/Public/Img/footer.png POST
-[2010-04-18 14:15:45] IP:::1 URI: /easygiant/panel/main POST
-[2010-04-18 14:15:47] IP:::1 URI: /easygiant/users/login POST
-[2010-04-18 14:15:51] IP:::1 URI: /easygiant/users/login POST username:admin password:admin
-[2010-04-18 14:15:54] IP:::1 URI: /easygiant/panel/main POST
-[2010-04-18 14:37:49] IP:::1 URI: /easygiant/category/main POST
-[2010-04-18 14:38:03] IP:::1 URI: /easygiant/category/main POST
-[2010-04-18 14:38:13] IP:::1 URI: /easygiant/category/main POST
-[2010-04-18 14:38:55] IP:::1 URI: /easygiant/category/main POST
-[2010-04-18 14:39:22] IP:::1 URI: /easygiant/category/form/insert/1/undef/token POST
-[2010-04-18 14:39:24] IP:::1 URI: /easygiant/category/main/1/undef/token POST
-[2010-04-18 14:39:39] IP:::1 URI: /easygiant/category/main/1/undef/token POST
-[2010-04-18 14:39:46] IP:::1 URI: /easygiant/panel/main/1/undef/token POST
-[2010-04-18 14:39:47] IP:::1 URI: /easygiant/articles/main POST
-[2010-04-18 14:39:48] IP:::1 URI: /easygiant/External/tiny_mce/tiny_mce.js POST
-[2010-04-18 14:39:49] IP:::1 URI: /easygiant/panel/main/1/undef/undef POST
-[2010-04-18 14:39:51] IP:::1 URI: /easygiant/articles/main POST
-[2010-04-18 14:39:51] IP:::1 URI: /easygiant/External/tiny_mce/tiny_mce.js POST
-[2010-04-18 14:39:52] IP:::1 URI: /easygiant/articles/form/insert/1/undef/undef POST
-[2010-04-18 14:39:52] IP:::1 URI: /easygiant/External/tiny_mce/tiny_mce.js POST
-[2010-04-18 14:39:53] IP:::1 URI: /easygiant/articles/main/1/undef/undef POST
-[2010-04-18 14:39:53] IP:::1 URI: /easygiant/External/tiny_mce/tiny_mce.js POST
-[2010-04-18 14:39:55] IP:::1 URI: /easygiant/articles/form/insert/1/undef/undef POST
-[2010-04-18 14:39:55] IP:::1 URI: /easygiant/External/tiny_mce/tiny_mce.js POST
-[2010-04-18 14:39:56] IP:::1 URI: /easygiant/articles/main/1/undef/undef POST
-[2010-04-18 14:39:56] IP:::1 URI: /easygiant/External/tiny_mce/tiny_mce.js POST
-[2010-04-18 14:39:57] IP:::1 URI: /easygiant/articles/main/1/Antonio/undef POST
-[2010-04-18 14:39:58] IP:::1 URI: /easygiant/External/tiny_mce/tiny_mce.js POST
-[2010-04-18 14:39:59] IP:::1 URI: /easygiant/articles/form/insert/1/Antonio/undef POST
-[2010-04-18 14:39:59] IP:::1 URI: /easygiant/External/tiny_mce/tiny_mce.js POST
-[2010-04-18 14:40:00] IP:::1 URI: /easygiant/articles/main/1/Antonio/undef POST
-[2010-04-18 14:40:00] IP:::1 URI: /easygiant/External/tiny_mce/tiny_mce.js POST
-[2010-04-18 14:40:01] IP:::1 URI: /easygiant/articles/form/insert/1/Antonio/undef POST
-[2010-04-18 14:40:02] IP:::1 URI: /easygiant/External/tiny_mce/tiny_mce.js POST
-[2010-04-18 14:40:03] IP:::1 URI: /easygiant/articles/main/1/Antonio/undef POST
-[2010-04-18 14:40:03] IP:::1 URI: /easygiant/External/tiny_mce/tiny_mce.js POST
-[2010-04-18 14:40:04] IP:::1 URI: /easygiant/articles/main/1/Antonio/cultura POST
-[2010-04-18 14:40:05] IP:::1 URI: /easygiant/External/tiny_mce/tiny_mce.js POST
-[2010-04-18 14:40:10] IP:::1 URI: /easygiant/articles/form/insert/1/Antonio/cultura POST
-[2010-04-18 14:40:10] IP:::1 URI: /easygiant/External/tiny_mce/tiny_mce.js POST
-[2010-04-18 14:40:14] IP:::1 URI: /easygiant/articles/main/1/Antonio/cultura POST
-[2010-04-18 14:40:14] IP:::1 URI: /easygiant/External/tiny_mce/tiny_mce.js POST
-[2010-04-18 14:40:16] IP:::1 URI: /easygiant/articles/main/1/Antonio/economia POST
-[2010-04-18 14:40:16] IP:::1 URI: /easygiant/External/tiny_mce/tiny_mce.js POST
-[2010-04-18 14:40:17] IP:::1 URI: /easygiant/articles/main/1/Antonio/politica POST
-[2010-04-18 14:40:17] IP:::1 URI: /easygiant/External/tiny_mce/tiny_mce.js POST
-[2010-04-18 14:40:19] IP:::1 URI: /easygiant/articles/form/update/1/Antonio/politica POST generalAction:edit id:17
-[2010-04-18 14:40:19] IP:::1 URI: /easygiant/External/tiny_mce/tiny_mce.js POST
-[2010-04-18 14:40:21] IP:::1 URI: /easygiant/articles/main/1/Antonio/politica POST
-[2010-04-18 14:40:22] IP:::1 URI: /easygiant/External/tiny_mce/tiny_mce.js POST
-[2010-04-18 14:40:22] IP:::1 URI: /easygiant/panel/main/1/Antonio/politica POST
-[2010-04-18 14:41:15] IP:::1 URI: /easygiant/category/main POST
-[2010-04-18 14:41:16] IP:::1 URI: /easygiant/panel/main/1/undef/token POST
-[2010-04-18 14:41:17] IP:::1 URI: /easygiant/category/main POST
-[2010-04-18 14:41:25] IP:::1 URI: /easygiant/category/form/insert/1/undef/token POST
-[2010-04-18 14:41:26] IP:::1 URI: /easygiant/panel/main/1/undef/token POST
-[2010-04-18 14:41:28] IP:::1 URI: /easygiant/category/main POST
-[2010-04-18 14:41:29] IP:::1 URI: /easygiant/category/form/insert/1/undef/token POST
-[2010-04-18 14:41:31] IP:::1 URI: /easygiant/category/main/1/undef/token POST
-[2010-04-18 14:41:45] IP:::1 URI: /easygiant/category/form/insert/1/undef/token POST
-[2010-04-18 14:41:46] IP:::1 URI: /easygiant/panel/main/1/undef/token POST
-[2010-04-18 14:41:47] IP:::1 URI: /easygiant/pagine/main/1 POST
-[2010-04-18 14:41:49] IP:::1 URI: /easygiant/panel/main/1/undef POST
-[2010-04-18 14:41:51] IP:::1 URI: /easygiant/upload/main POST
-[2010-04-18 14:41:51] IP:::1 URI: /easygiant/External/jquery/jquery-1.3.2.min.js POST
-[2010-04-18 14:41:53] IP:::1 URI: /easygiant/panel/main/main POST
-[2010-04-18 14:41:54] IP:::1 URI: /easygiant/groups/main POST
-[2010-04-18 14:41:55] IP:::1 URI: /easygiant/groups/form/insert/1/username/undefined POST
-[2010-04-18 14:41:56] IP:::1 URI: /easygiant/panel/main/1/username/undefined POST
-[2010-04-18 14:42:01] IP:::1 URI: /easygiant/upload/main POST
-[2010-04-18 14:42:01] IP:::1 URI: /easygiant/External/jquery/jquery-1.3.2.min.js POST
-[2010-04-18 14:42:02] IP:::1 URI: /easygiant/panel/main/main POST
-[2010-04-18 14:42:26] IP:::1 URI: /easygiant/upload/main POST
-[2010-04-18 14:42:26] IP:::1 URI: /easygiant/External/jquery/jquery-1.3.2.min.js POST
-[2010-04-18 14:42:28] IP:::1 URI: /easygiant/panel/main POST
-[2010-04-18 14:42:51] IP:::1 URI: /easygiant/post/main POST
-[2010-04-18 14:42:54] IP:::1 URI: /easygiant/post/main/1/undefi/undefi/1/undefi/undefi/undefi POST
-[2010-04-18 14:43:05] IP:::1 URI: /easygiant/post/main/1/undefi/undefi/1/19/undefi/undefi POST
-[2010-04-18 14:43:08] IP:::1 URI: /easygiant/post/form/update/1/undefi/undefi/1/19/undefi/undefi POST generalAction:edit id:105
-[2010-04-18 14:43:11] IP:::1 URI: /easygiant/post/form/update/1/undefi/undefi/1/19/undefi/undefi POST titolo:qwewqe interop:123 autore:Antonio testo:123
-<<<
-
->>>
-
-""
-
-'' intero:111123 interom:123 interot:127 interob:1 xxx:123 fff:1 id:105 updateAction:Save
-[2010-04-18 14:43:20] IP:::1 URI: /easygiant/post/form/update/1/undefi/undefi/1/19/undefi/undefi POST titolo:qwe interop:123 autore:Antonio testo:123
-<<<
-
->>>
-
-""
-
-'' intero:111123 interom:123 interot:127 interob:1 xxx:123 fff:1 id:105 updateAction:Save
-[2010-04-18 14:43:23] IP:::1 URI: /easygiant/post/form/update/1/undefi/undefi/1/19/undefi/undefi POST titolo:qwee interop:123 autore:Antonio testo:123
-<<<
-
->>>
-
-""
-
-'' intero:111123 interom:123 interot:127 interob:1 xxx:123 fff:1 id:105 updateAction:Save
-[2010-04-18 14:43:24] IP:::1 URI: /easygiant/post/main/1/undefi/undefi/1/19/undefi/undefi POST
-[2010-04-18 14:43:28] IP:::1 URI: /easygiant/post/main/1/undefi/undefi/1/undefi/undefi/undefi POST
-[2010-04-18 14:43:41] IP:::1 URI: /easygiant/panel/main/1/undefi/undefi/1/undefi/undefi/undefi POST
-[2010-04-18 14:44:38] IP:::1 URI: /easygiant/articles/main POST
-[2010-04-18 14:44:38] IP:::1 URI: /easygiant/External/tiny_mce/tiny_mce.js POST
-[2010-04-18 14:44:39] IP:::1 URI: /easygiant/articles/main/1/undef/cultura POST
-[2010-04-18 14:44:39] IP:::1 URI: /easygiant/External/tiny_mce/tiny_mce.js POST
-[2010-04-18 14:44:45] IP:::1 URI: /easygiant/panel/main POST
-[2010-04-18 14:45:04] IP:::1 URI: /easygiant/pagine/main/1 POST
-[2010-04-18 14:45:05] IP:::1 URI: /easygiant/panel/main POST
-[2010-04-18 14:45:07] IP:::1 URI: /easygiant/pagine/main/1 POST
-[2010-04-18 14:45:08] IP:::1 URI: /easygiant/pagine/form/insert/1/undef POST
-[2010-04-18 14:45:11] IP:::1 URI: /easygiant/pagine/main/1/undef POST
-[2010-04-18 14:46:40] IP:::1 URI: /easygiant/panel/main POST
-[2010-04-18 14:46:43] IP:::1 URI: /easygiant/post/main POST
-[2010-04-18 14:46:46] IP:::1 URI: /easygiant/postnew/main POST
-[2010-04-18 14:46:58] IP:::1 URI: /easygiant/postnew/form/insert/1/undef/undef/undef POST
-[2010-04-18 14:46:59] IP:::1 URI: /easygiant/postnew/main/1/undef/undef/undef POST
-[2010-04-18 14:47:02] IP:::1 URI: /easygiant/panel/main POST
-[2010-04-18 14:47:21] IP:::1 URI: /easygiant/postnew/main/1/undef/undef/undef POST
-[2010-04-18 14:47:23] IP:::1 URI: /easygiant/postnew/main/1/undef/undef/undef POST
-[2010-04-18 14:47:44] IP:::1 URI: /easygiant/postnew/main/1/undef/undef/undef POST
-[2010-04-18 14:48:07] IP:::1 URI: /easygiant/postnew/main/1/undef/undef/undef POST
-[2010-04-18 14:48:10] IP:::1 URI: /easygiant/postnew/form/insert/1/undef/undef/undef POST
-[2010-04-18 14:48:16] IP:::1 URI: /easygiant/postnew/main/1/undef/undef/undef POST
-[2010-04-18 14:48:18] IP:::1 URI: /easygiant/postnew/main/1/undef/undef/1 POST
-[2010-04-18 14:48:20] IP:::1 URI: /easygiant/postnew/main/1/undef/94/undef POST
-[2010-04-18 14:48:23] IP:::1 URI: /easygiant/postnew/main/1/undef/undef/undef POST
-[2010-04-18 14:49:21] IP:::1 URI: /easygiant/postnew/form/insert/1/undef/undef/undef POST
-[2010-04-18 14:49:40] IP:::1 URI: /easygiant/postnew/main/1/undef/undef/undef POST
-[2010-04-18 14:49:46] IP:::1 URI: /easygiant/postnew/form/insert/1/undef/undef/undef POST
-[2010-04-18 14:49:47] IP:::1 URI: /easygiant/postnew/main/1/undef/undef/undef POST
-[2010-04-18 14:49:48] IP:::1 URI: /easygiant/postnew/form/insert/1/undef/undef/undef POST
-[2010-04-18 14:49:50] IP:::1 URI: /easygiant/postnew/main/1/undef/undef/undef POST
-[2010-04-18 14:51:45] IP:::1 URI: /easygiant/panel/main POST
-[2010-04-18 14:51:47] IP:::1 URI: /easygiant/users/logout POST
-[2010-04-18 14:51:48] IP:::1 URI: /easygiant/users/login POST
-[2010-04-18 14:51:54] IP:::1 URI: /easygiant/users/login POST username:admin password:admin
-[2010-04-18 14:51:58] IP:::1 URI: /easygiant/panel/main POST
-[2010-04-18 14:51:59] IP:::1 URI: /easygiant/users/main POST
-[2010-04-18 14:52:04] IP:::1 URI: /easygiant/users/main/1/0 POST delAction:del id_user:3
-[2010-04-18 14:52:05] IP:::1 URI: /easygiant/users/form/update/1/0 POST generalAction:edit id_user:3
-[2010-04-18 14:52:07] IP:::1 URI: /easygiant/users/form/update/1/0 POST username:giulia password: confirmation: id_user:3 updateAction:Save
-[2010-04-18 14:52:08] IP:::1 URI: /easygiant/users/main/1/0 POST
-[2010-04-18 14:52:10] IP:::1 URI: /easygiant/panel/main POST
-[2010-04-18 14:52:12] IP:::1 URI: /easygiant/pagine/main/1 POST
-[2010-04-18 14:52:15] IP:::1 URI: /easygiant/pagine/main/1/107 POST
-[2010-04-18 14:52:17] IP:::1 URI: /easygiant/pagine/form/insert/1/107 POST
-[2010-04-18 14:52:18] IP:::1 URI: /easygiant/pagine/main/1/107 POST
-[2010-04-18 14:52:20] IP:::1 URI: /easygiant/panel/main POST
-[2010-04-18 14:52:21] IP:::1 URI: /easygiant/password/form POST
-[2010-04-18 14:52:23] IP:::1 URI: /easygiant/password/form/update/ POST old: password: confirmation: updateAction:save
-[2010-04-18 14:52:24] IP:::1 URI: /easygiant/panel/main/main POST
-[2010-04-18 14:52:26] IP:::1 URI: /easygiant/news/main POST
-[2010-04-18 14:52:28] IP:::1 URI: /easygiant/news/form/update/1 POST generalAction:edit id:2
-[2010-04-18 14:52:29] IP:::1 URI: /easygiant/news/main/1 POST
-[2010-04-18 14:52:31] IP:::1 URI: /easygiant/news/form/insert/1 POST
-[2010-04-18 14:52:38] IP:::1 URI: /easygiant/news/form/insert/1 POST title: giornale:corriere content: insertAction:Save
-[2010-04-18 14:52:40] IP:::1 URI: /easygiant/news/main/1 POST
-[2010-04-18 14:52:42] IP:::1 URI: /easygiant/panel/main POST
-[2010-04-18 14:52:44] IP:::1 URI: /easygiant/users/logout POST
-[2010-04-18 14:52:45] IP:::1 URI: /easygiant/users/login POST
-[2010-04-19 23:29:19] IP:::1 URI: /easygiant/panel/main POST
-[2010-04-19 23:29:21] IP:::1 URI: /easygiant/users/login POST
-[2010-04-19 23:29:24] IP:::1 URI: /easygiant/users/login POST username:admin password:admin
-[2010-04-19 23:29:27] IP:::1 URI: /easygiant/panel/main POST
-[2010-04-19 23:29:29] IP:::1 URI: /easygiant/pagine/main/1 POST
-[2010-04-19 23:31:42] IP:::1 URI: /easygiant/pagine/main/2/undef POST
-[2010-04-19 23:31:43] IP:::1 URI: /easygiant/pagine/main/1/undef POST
-[2010-04-19 23:32:24] IP:::1 URI: /easygiant/pagine/main/1/undef POST
-[2010-04-19 23:32:45] IP:::1 URI: /easygiant/pagine/main/1/undef POST
-[2010-04-19 23:32:45] IP:::1 URI: /easygiant/Public/Img/footer.png POST
-[2010-04-19 23:32:45] IP:::1 URI: /easygiant/Public/Img/header.png POST
-[2010-04-19 23:34:54] IP:::1 URI: /easygiant/pagine/main/1/undef POST
-[2010-04-19 23:35:26] IP:::1 URI: /easygiant/pagine/main/1/undef POST
-[2010-04-19 23:35:42] IP:::1 URI: /easygiant/pagine/main/1/undef POST
-[2010-04-19 23:35:45] IP:::1 URI: /easygiant/pagine/main/1/undef POST moveupAction:up id_pagine:84
-[2010-04-19 23:35:47] IP:::1 URI: /easygiant/pagine/main/1/undef POST moveupAction:up id_pagine:85
-[2010-04-19 23:35:48] IP:::1 URI: /easygiant/pagine/main/1/undef POST moveupAction:up id_pagine:84
-[2010-04-19 23:35:52] IP:::1 URI: /easygiant/pagine/main/1/undef POST movedownAction:down id_pagine:84
-[2010-04-19 23:35:55] IP:::1 URI: /easygiant/pagine/main/1/undef POST moveupAction:up id_pagine:72
-[2010-04-19 23:35:58] IP:::1 URI: /easygiant/pagine/main/1/undef POST moveupAction:up id_pagine:74
-[2010-04-19 23:36:00] IP:::1 URI: /easygiant/pagine/main/1/undef POST moveupAction:up id_pagine:72
-[2010-04-19 23:36:03] IP:::1 URI: /easygiant/pagine/main/1/undef POST moveupAction:up id_pagine:74
-[2010-04-19 23:36:19] IP:::1 URI: /easygiant/pagine/form/insert/1/undef POST
-[2010-04-19 23:36:20] IP:::1 URI: /easygiant/pagine/main/1/undef POST
-[2010-04-19 23:36:48] IP:::1 URI: /easygiant/pagine/form/insert/1/undef POST
-[2010-04-19 23:37:14] IP:::1 URI: /easygiant/pagine/main/1/undef POST
-[2010-04-19 23:37:15] IP:::1 URI: /easygiant/pagine/form/insert/1/undef POST
-[2010-04-19 23:37:22] IP:::1 URI: /easygiant/pagine/main/1/undef POST
-[2010-04-19 23:37:23] IP:::1 URI: /easygiant/pagine/form/insert/1/undef POST
-[2010-04-19 23:37:24] IP:::1 URI: /easygiant/pagine/form/insert/1/undef POST name: id_navigation:109 titolo: html: insertAction:Save
-[2010-04-19 23:37:27] IP:::1 URI: /easygiant/pagine/form/insert/1/undef POST name:werwer id_navigation:109 titolo: html: insertAction:Save
-[2010-04-19 23:37:28] IP:::1 URI: /easygiant/pagine/main/1/undef POST
-[2010-04-19 23:37:31] IP:::1 URI: /easygiant/pagine/form/insert/1/undef POST
-[2010-04-19 23:37:33] IP:::1 URI: /easygiant/pagine/form/insert/1/undef POST name:werwer id_navigation:109 titolo: html: insertAction:Save
-[2010-04-19 23:37:35] IP:::1 URI: /easygiant/pagine/main/1/undef POST
-[2010-04-19 23:37:37] IP:::1 URI: /easygiant/pagine/main/1/undef POST delAction:del id_pagine:88
-[2010-04-19 23:37:38] IP:::1 URI: /easygiant/pagine/main/1/undef POST delAction:del id_pagine:87
-[2010-04-19 23:40:38] IP:::1 URI: /easygiant/pagine/form/insert/1/undef POST
-[2010-04-19 23:41:00] IP:::1 URI: /easygiant/pagine/main/1/undef POST
-[2010-04-19 23:41:01] IP:::1 URI: /easygiant/pagine/form/insert/1/undef POST
-[2010-04-19 23:41:40] IP:::1 URI: /easygiant/pagine/main/1/undef POST
-[2010-04-19 23:44:57] IP:::1 URI: /easygiant/pagine/form/insert/1/undef POST
-[2010-04-19 23:45:13] IP:::1 URI: /easygiant/pagine/main/1/undef POST
-[2010-04-19 23:45:14] IP:::1 URI: /easygiant/pagine/form/insert/1/undef POST
-[2010-04-19 23:46:00] IP:::1 URI: /easygiant/pagine/main/1/undef POST
-[2010-04-19 23:46:02] IP:::1 URI: /easygiant/panel/main POST
-[2010-04-19 23:46:03] IP:::1 URI: /easygiant/category/main POST
-[2010-04-19 23:46:04] IP:::1 URI: /easygiant/category/main/1/undef/token POST x:8 y:18 moveupAction:up id_navigation:127
-[2010-04-19 23:46:06] IP:::1 URI: /easygiant/category/main/1/undef/token POST x:15 y:16 moveupAction:up id_navigation:133
-[2010-04-19 23:46:07] IP:::1 URI: /easygiant/category/main/1/undef/token POST x:6 y:14 moveupAction:up id_navigation:127
-[2010-04-19 23:46:07] IP:::1 URI: /easygiant/category/main/1/undef/token POST x:17 y:24 moveupAction:up id_navigation:133
-[2010-04-19 23:46:10] IP:::1 URI: /easygiant/panel/main POST
-[2010-04-19 23:46:11] IP:::1 URI: /easygiant/users/logout POST
-[2010-04-19 23:46:12] IP:::1 URI: /easygiant/users/login POST
-[2010-05-05 18:36:53] IP:::1 URI: /easygiant/panel/main POST
-[2010-05-05 18:36:54] IP:::1 URI: /easygiant/users/login POST
-[2010-05-05 18:36:58] IP:::1 URI: /easygiant/users/login POST username:admin password:admin
-[2010-05-05 18:37:02] IP:::1 URI: /easygiant/panel/main POST
-[2010-05-05 18:37:06] IP:::1 URI: /easygiant/pagine/main/1 POST
-[2010-05-05 18:37:09] IP:::1 URI: /easygiant/panel/main POST
-[2010-05-05 18:37:15] IP:::1 URI: /easygiant/category/main POST
-[2010-05-05 18:37:17] IP:::1 URI: /easygiant/panel/main POST
-[2010-05-05 18:37:18] IP:::1 URI: /easygiant/pagine/main/1 POST
-[2010-05-05 18:37:19] IP:::1 URI: /easygiant/panel/main POST
-[2010-05-05 18:37:46] IP:::1 URI: /easygiant/category/main POST
-[2010-05-05 18:37:48] IP:::1 URI: /easygiant/category/main/1/undef/token POST
-[2010-05-05 18:37:49] IP:::1 URI: /easygiant/panel/main POST
-[2010-05-05 18:37:50] IP:::1 URI: /easygiant/pagine/main/1 POST
-[2010-05-05 18:37:51] IP:::1 URI: /easygiant/pagine/main/2/undef POST
-[2010-05-05 18:37:52] IP:::1 URI: /easygiant/pagine/main/1/undef POST
-[2010-05-05 18:38:34] IP:::1 URI: /easygiant/pagine/main/1/undef POST
-[2010-05-05 18:38:35] IP:::1 URI: /easygiant/pagine/main/2/undef POST
-[2010-05-05 18:38:36] IP:::1 URI: /easygiant/pagine/main/1/undef POST
-[2010-05-05 18:39:07] IP:::1 URI: /easygiant/pagine/main/1/undef POST
-[2010-05-05 18:39:55] IP:::1 URI: /easygiant/pagine/main/1/undef POST
-[2010-05-05 18:39:57] IP:::1 URI: /easygiant/pagine/main/2/undef POST
-[2010-05-05 18:39:59] IP:::1 URI: /easygiant/pagine/main/1/undef POST
-[2010-05-05 18:40:17] IP:::1 URI: /easygiant/pagine/main/1/undef POST
-[2010-05-05 18:40:18] IP:::1 URI: /easygiant/pagine/main/2/undef POST
-[2010-05-05 18:40:20] IP:::1 URI: /easygiant/pagine/form/update/2/undef POST generalAction:edit id_pagine:70
-[2010-05-05 18:40:22] IP:::1 URI: /easygiant/pagine/form/update/2/undef POST name:qwe id_navigation:109 titolo: html: id_pagine:70 updateAction:Save
-[2010-05-05 18:40:24] IP:::1 URI: /easygiant/pagine/main/2/undef POST
-[2010-05-05 18:44:22] IP:::1 URI: /easygiant/pagine/main/2/undef POST
-[2010-05-05 18:44:23] IP:::1 URI: /easygiant/pagine/main/1/undef POST
-[2010-05-05 18:44:25] IP:::1 URI: /easygiant/pagine/main/1/undef POST delAction:del id_pagine:85
-[2010-05-05 18:44:53] IP:::1 URI: /easygiant/pagine/main/2/undef POST
-[2010-05-05 18:44:54] IP:::1 URI: /easygiant/pagine/main/1/undef POST
-[2010-05-05 18:44:55] IP:::1 URI: /easygiant/pagine/main/2/undef POST
-[2010-05-05 18:44:57] IP:::1 URI: /easygiant/panel/main POST
-[2010-05-05 18:44:58] IP:::1 URI: /easygiant/pagine/main/1 POST
-[2010-05-05 18:44:59] IP:::1 URI: /easygiant/pagine/form/insert/1/undef POST
-[2010-05-05 18:45:01] IP:::1 URI: /easygiant/pagine/form/insert/1/undef POST name: id_navigation:109 titolo: html: insertAction:Save
-[2010-05-05 18:45:02] IP:::1 URI: /easygiant/pagine/main/1/undef POST
-[2010-05-05 18:51:48] IP:::1 URI: /easygiant/pagine/main/1/undef POST
-[2010-05-05 18:51:49] IP:::1 URI: /easygiant/pagine/main/2/undef POST
-[2010-05-05 18:51:50] IP:::1 URI: /easygiant/pagine/main/1/undef POST
-[2010-05-05 18:51:51] IP:::1 URI: /easygiant/pagine/main/2/undef POST
-[2010-05-05 18:51:52] IP:::1 URI: /easygiant/pagine/main/1/undef POST
-[2010-05-05 18:53:32] IP:::1 URI: /easygiant/pagine/main/1/undef POST
-[2010-05-05 18:53:41] IP:::1 URI: /easygiant/pagine/form/insert/1/undef POST
-[2010-05-05 18:53:42] IP:::1 URI: /easygiant/pagine/main/1/undef POST
-[2010-05-05 18:53:44] IP:::1 URI: /easygiant/panel/main POST
-[2010-05-05 18:53:45] IP:::1 URI: /easygiant/post/main POST
-[2010-05-05 18:53:46] IP:::1 URI: /easygiant/post/form/insert/1/undefi/undefi/undefi/undefi/undefi/undefi POST
-[2010-05-05 18:53:48] IP:::1 URI: /easygiant/post/main/1/undefi/undefi/undefi/undefi/undefi/undefi POST
-[2010-05-05 18:53:49] IP:::1 URI: /easygiant/panel/main POST
-[2010-05-05 18:53:50] IP:::1 URI: /easygiant/category/main POST
-[2010-05-05 18:53:51] IP:::1 URI: /easygiant/category/form/insert/1/undef/token POST
-[2010-05-05 18:53:52] IP:::1 URI: /easygiant/category/main/1/undef/token POST
-[2010-05-05 18:53:53] IP:::1 URI: /easygiant/panel/main POST
-[2010-05-05 18:53:56] IP:::1 URI: /easygiant/articles/main POST
-[2010-05-05 18:53:56] IP:::1 URI: /easygiant/External/tiny_mce/tiny_mce.js POST
-[2010-05-05 18:53:57] IP:::1 URI: /easygiant/articles/form/insert/1/undef/undef POST
-[2010-05-05 18:53:57] IP:::1 URI: /easygiant/External/tiny_mce/tiny_mce.js POST
-[2010-05-05 18:53:58] IP:::1 URI: /easygiant/panel/main POST
-[2010-05-05 18:54:01] IP:::1 URI: /easygiant/box/main POST
-[2010-05-05 18:54:03] IP:::1 URI: /easygiant/box/form/insert/1/id/undef POST
-[2010-05-05 18:54:03] IP:::1 URI: /easygiant/panel/main POST
-[2010-05-05 18:54:05] IP:::1 URI: /easygiant/news/main POST
-[2010-05-05 18:54:06] IP:::1 URI: /easygiant/panel/main POST
-[2010-05-05 18:54:07] IP:::1 URI: /easygiant/password/form POST
-[2010-05-05 18:54:08] IP:::1 URI: /easygiant/panel/main/main POST
-[2010-05-05 18:54:10] IP:::1 URI: /easygiant/users/main POST
-[2010-05-05 18:54:11] IP:::1 URI: /easygiant/users/form/insert/1/0 POST
-[2010-05-05 18:54:12] IP:::1 URI: /easygiant/panel/main POST
-[2010-05-05 18:54:14] IP:::1 URI: /easygiant/post/main POST
-[2010-05-05 18:54:15] IP:::1 URI: /easygiant/post/form/insert/1/undefi/undefi/undefi/undefi/undefi/undefi POST
-[2010-05-05 18:54:16] IP:::1 URI: /easygiant/panel/main POST
-[2010-05-05 18:54:19] IP:::1 URI: /easygiant/post/main POST
-[2010-05-05 18:54:22] IP:::1 URI: /easygiant/postnew/main POST
-[2010-05-05 18:54:24] IP:::1 URI: /easygiant/postnew/form/insert/1/undef/undef/undef POST
-[2010-05-05 18:54:25] IP:::1 URI: /easygiant/postnew/main/1/undef/undef/undef POST
-[2010-05-05 18:54:27] IP:::1 URI: /easygiant/postnew/form/insert/1/undef/undef/undef POST
-[2010-05-05 18:54:30] IP:::1 URI: /easygiant/postnew/main/1/undef/undef/undef POST
-[2010-05-05 18:54:31] IP:::1 URI: /easygiant/postnew/form/insert/1/undef/undef/undef POST
-[2010-05-05 18:54:32] IP:::1 URI: /easygiant/postnew/main/1/undef/undef/undef POST
-[2010-05-05 18:54:33] IP:::1 URI: /easygiant/panel/main POST
-[2010-05-05 18:54:55] IP:::1 URI: /easygiant/pagine/main/1 POST
-[2010-05-05 18:54:57] IP:::1 URI: /easygiant/pagine/main/2/undef POST
-[2010-05-05 18:54:58] IP:::1 URI: /easygiant/pagine/main/1/undef POST
-[2010-05-05 18:55:12] IP:::1 URI: /easygiant/panel/main POST
-[2010-05-05 18:55:15] IP:::1 URI: /easygiant/pagine/main/1 POST
-[2010-05-05 18:55:16] IP:::1 URI: /easygiant/panel/main POST
-[2010-05-05 18:55:17] IP:::1 URI: /easygiant/category/main POST
-[2010-05-05 18:57:11] IP:::1 URI: /easygiant/category/main/1/undef/token POST
-[2010-05-05 18:58:57] IP:::1 URI: /easygiant/category/main/1/undef/token POST
-[2010-05-05 19:05:35] IP:::1 URI: /easygiant/category/main/1/undef/token POST
-[2010-05-05 19:06:11] IP:::1 URI: /easygiant/category/main/1/undef/token POST
-[2010-05-05 19:06:30] IP:::1 URI: /easygiant/category/main/1/undef/token POST
-[2010-05-05 19:08:07] IP:::1 URI: /easygiant/category/main/1/undef/token POST
-[2010-05-05 19:09:46] IP:::1 URI: /easygiant/suppl/main POST
-[2010-05-05 19:10:05] IP:::1 URI: /easygiant/suppl/main POST
-[2010-05-05 19:10:57] IP:::1 URI: /easygiant/suppl/main POST
-[2010-05-05 19:11:07] IP:::1 URI: /easygiant/suppl/main POST
-[2010-05-05 19:11:09] IP:::1 URI: /easygiant/suppl/main POST
-[2010-05-05 19:11:16] IP:::1 URI: /easygiant/suppl/main POST
-[2010-05-05 19:11:21] IP:::1 URI: /easygiant/suppl/main POST
-[2010-05-05 19:11:47] IP:::1 URI: /easygiant/suppl/main POST
-[2010-05-05 19:11:53] IP:::1 URI: /easygiant/suppl/main POST
-[2010-05-05 19:13:39] IP:::1 URI: /easygiant/suppl/main POST
-[2010-05-05 19:13:42] IP:::1 URI: /easygiant/panel/main POST
-[2010-05-05 19:13:44] IP:::1 URI: /easygiant/pagine/main/1 POST
-[2010-05-05 19:14:01] IP:::1 URI: /easygiant/pagine POST
-[2010-05-05 19:20:59] IP:::1 URI: /easygiant/pagine POST
-[2010-05-05 19:21:05] IP:::1 URI: /easygiant/pagine/ POST
-[2010-05-05 19:21:09] IP:::1 URI: /easygiant/panel/main POST
-[2010-05-05 19:21:11] IP:::1 URI: /easygiant/pagine/main/1 POST
-[2010-05-05 19:21:12] IP:::1 URI: /easygiant/pagine/main/2/undef POST
-[2010-05-05 19:21:14] IP:::1 URI: /easygiant/pagine/main/1/undef POST
-[2010-05-05 19:21:15] IP:::1 URI: /easygiant/panel/main POST
-[2010-05-05 19:21:16] IP:::1 URI: /easygiant/category/main POST
-[2010-05-05 19:21:20] IP:::1 URI: /easygiant/panel/main POST
-[2010-05-05 19:21:21] IP:::1 URI: /easygiant/articles/main POST
-[2010-05-05 19:21:21] IP:::1 URI: /easygiant/External/tiny_mce/tiny_mce.js POST
-[2010-05-05 19:21:22] IP:::1 URI: /easygiant/articles/main/2/undef/undef POST
-[2010-05-05 19:21:22] IP:::1 URI: /easygiant/External/tiny_mce/tiny_mce.js POST
-[2010-05-05 19:21:48] IP:::1 URI: /easygiant/articles/main/2/undef/ POST
-[2010-05-05 19:21:48] IP:::1 URI: /easygiant/External/tiny_mce/tiny_mce.js POST
-[2010-05-05 19:21:53] IP:::1 URI: /easygiant/articles/main/2/undef/ee POST
-[2010-05-05 19:21:53] IP:::1 URI: /easygiant/External/tiny_mce/tiny_mce.js POST
-[2010-05-05 19:21:59] IP:::1 URI: /easygiant/articles/main/2/undef/undef POST
-[2010-05-05 19:21:59] IP:::1 URI: /easygiant/External/tiny_mce/tiny_mce.js POST
-[2010-05-05 19:23:09] IP:::1 URI: /easygiant/panel/main POST
-[2010-05-05 19:23:14] IP:::1 URI: /easygiant/panel/ POST
-[2010-05-05 19:23:25] IP:::1 URI: /easygiant/panel POST
-[2010-05-05 19:29:39] IP:::1 URI: /easygiant/pagine/main/1 POST
-[2010-05-05 19:29:43] IP:::1 URI: /easygiant/ POST
-[2010-05-05 19:29:43] IP:::1 URI: /easygiant/Public/Img/footer.png POST
-[2010-05-05 19:29:43] IP:::1 URI: /easygiant/Public/Img/header.png POST
-[2010-05-05 19:29:46] IP:::1 URI: /easygiant/ POST
-[2010-05-05 19:29:46] IP:::1 URI: /easygiant/Public/Img/header.png POST
-[2010-05-05 19:29:46] IP:::1 URI: /easygiant/Public/Img/footer.png POST
-[2010-05-05 19:29:51] IP:::1 URI: /easygiant/ POST
-[2010-05-05 19:29:51] IP:::1 URI: /easygiant/Public/Img/header.png POST
-[2010-05-05 19:29:51] IP:::1 URI: /easygiant/Public/Img/footer.png POST
-[2010-05-05 19:29:53] IP:::1 URI: /easygiant/ POST
-[2010-05-05 19:29:53] IP:::1 URI: /easygiant/Public/Img/footer.png POST
-[2010-05-05 19:29:53] IP:::1 URI: /easygiant/Public/Img/header.png POST
-[2010-05-05 19:29:58] IP:::1 URI: /easygiant/ POST
-[2010-05-05 19:29:58] IP:::1 URI: /easygiant/Public/Img/footer.png POST
-[2010-05-05 19:29:58] IP:::1 URI: /easygiant/Public/Img/header.png POST
-[2010-05-05 19:30:00] IP:::1 URI: /easygiant/pagine/main/2/undef POST
-[2010-05-05 19:30:03] IP:::1 URI: /easygiant/pagine/form/update/2/undef POST generalAction:edit id_pagine:74
-[2010-05-05 19:30:04] IP:::1 URI: /easygiant/pagine/form/update/2/undef POST name:ciao id_navigation:109 titolo: html:qweqwe id_pagine:74 updateAction:Save
-[2010-05-05 19:30:05] IP:::1 URI: /easygiant/pagine/main/2/undef POST
-[2010-05-05 21:30:33] IP:::1 URI: /easygiant/panel/main POST
-[2010-05-05 21:30:34] IP:::1 URI: /easygiant/users/login POST
-[2010-05-05 21:30:38] IP:::1 URI: /easygiant/users/login POST username:admin password:admin
-[2010-05-05 21:30:41] IP:::1 URI: /easygiant/panel/main POST
-[2010-05-05 21:30:43] IP:::1 URI: /easygiant/pagine/main/1 POST
-[2010-05-05 21:30:46] IP:::1 URI: /easygiant/panel/main POST
-[2010-05-05 21:30:47] IP:::1 URI: /easygiant/category/main POST
-[2010-05-05 21:33:53] IP:::1 URI: /easygiant/category/main POST
-[2010-05-05 21:34:08] IP:::1 URI: /easygiant/category/main POST
-[2010-05-05 21:34:36] IP:::1 URI: /easygiant/category/main POST
-[2010-05-05 21:34:53] IP:::1 URI: /easygiant/category/main POST
-[2010-05-05 21:35:46] IP:::1 URI: /easygiant/category/main POST
-[2010-05-05 21:35:48] IP:::1 URI: /easygiant/panel/main POST
-[2010-05-05 21:35:51] IP:::1 URI: /easygiant/suppl/main POST
-[2010-05-05 21:35:55] IP:::1 URI: /easygiant/suppl/main/1 POST
-[2010-05-05 21:35:57] IP:::1 URI: /easygiant/suppl/main/2 POST
-[2010-05-05 21:35:58] IP:::1 URI: /easygiant/suppl/main/1 POST
-[2010-05-05 21:36:01] IP:::1 URI: /easygiant/suppl/main POST
-[2010-05-05 21:40:45] IP:::1 URI: /easygiant/suppl/main POST
-[2010-05-05 21:40:49] IP:::1 URI: /easygiant/category/main POST
-[2010-05-05 21:40:51] IP:::1 URI: /easygiant/panel/main POST
-[2010-05-05 21:40:52] IP:::1 URI: /easygiant/pagine/main/1 POST
-[2010-05-05 21:40:54] IP:::1 URI: /easygiant/panel/main POST
-[2010-05-05 21:40:55] IP:::1 URI: /easygiant/category/main POST
-[2010-05-05 21:40:58] IP:::1 URI: /easygiant/category/main/1/undef/token POST
-[2010-05-05 21:40:59] IP:::1 URI: /easygiant/panel/main POST
-[2010-05-05 21:41:00] IP:::1 URI: /easygiant/articles/main POST
-[2010-05-05 21:41:00] IP:::1 URI: /easygiant/External/tiny_mce/tiny_mce.js POST
-[2010-05-05 21:41:02] IP:::1 URI: /easygiant/articles/main/2/undef/undef POST
-[2010-05-05 21:41:02] IP:::1 URI: /easygiant/External/tiny_mce/tiny_mce.js POST
-[2010-05-05 21:41:04] IP:::1 URI: /easygiant/panel/main POST
-[2010-05-05 21:41:05] IP:::1 URI: /easygiant/pagine/main/1 POST
-[2010-05-05 21:41:06] IP:::1 URI: /easygiant/pagine/main/2/undef POST
-[2010-05-05 21:41:09] IP:::1 URI: /easygiant/pagine/main/1/109 POST
-[2010-05-05 21:41:11] IP:::1 URI: /easygiant/pagine/main/1/107 POST
-[2010-05-05 21:41:13] IP:::1 URI: /easygiant/pagine/main/1/undef POST
-[2010-05-05 21:41:15] IP:::1 URI: /easygiant/panel/main POST
-[2010-05-05 21:41:16] IP:::1 URI: /easygiant/users/logout POST
-[2010-05-05 21:41:18] IP:::1 URI: /easygiant/users/login POST
-[2010-05-05 21:41:21] IP:::1 URI: /easygiant/users/login POST username:admin password:admin
-[2010-05-05 21:41:25] IP:::1 URI: /easygiant/panel/main POST
-[2010-05-05 21:41:26] IP:::1 URI: /easygiant/category/main POST
-[2010-05-05 21:41:30] IP:::1 URI: /easygiant/category/main/1/prima/token POST
-[2010-05-05 21:41:33] IP:::1 URI: /easygiant/category/main/1/234234/token POST
-[2010-05-05 21:41:35] IP:::1 URI: /easygiant/category/main/1/eee/token POST
-[2010-05-05 21:41:36] IP:::1 URI: /easygiant/category/main/1/qweqwe/token POST
-[2010-05-05 21:41:38] IP:::1 URI: /easygiant/panel/main POST
-[2010-05-05 21:41:38] IP:::1 URI: /easygiant/pagine/main/1 POST
-[2010-05-05 21:41:40] IP:::1 URI: /easygiant/pagine/main/1/109 POST
-[2010-05-05 21:41:43] IP:::1 URI: /easygiant/pagine/form/update/1/109 POST generalAction:edit id_pagine:80
-[2010-05-05 21:41:46] IP:::1 URI: /easygiant/pagine/form/update/1/109 POST name:6756 id_navigation:107 titolo:2 html:567 id_pagine:80 updateAction:Save
-[2010-05-05 21:41:47] IP:::1 URI: /easygiant/pagine/main/1/109 POST
-[2010-05-05 21:41:49] IP:::1 URI: /easygiant/pagine/main/1/107 POST
-[2010-05-05 21:41:52] IP:::1 URI: /easygiant/pagine/main/1/107 POST moveupAction:up id_pagine:72
-[2010-05-05 21:41:53] IP:::1 URI: /easygiant/pagine/main/1/107 POST moveupAction:up id_pagine:80
-[2010-05-05 21:41:54] IP:::1 URI: /easygiant/pagine/main/1/107 POST moveupAction:up id_pagine:72
-[2010-05-05 21:41:55] IP:::1 URI: /easygiant/pagine/main/1/107 POST moveupAction:up id_pagine:80
-[2010-05-05 21:41:56] IP:::1 URI: /easygiant/pagine/main/1/107 POST moveupAction:up id_pagine:72
-[2010-05-05 21:41:57] IP:::1 URI: /easygiant/pagine/main/1/107 POST moveupAction:up id_pagine:80
-[2010-05-05 21:41:57] IP:::1 URI: /easygiant/pagine/main/1/107 POST moveupAction:up id_pagine:72
-[2010-05-05 21:41:58] IP:::1 URI: /easygiant/pagine/main/1/107 POST moveupAction:up id_pagine:80
-[2010-05-05 21:41:59] IP:::1 URI: /easygiant/pagine/main/1/107 POST moveupAction:up id_pagine:72
-[2010-05-05 21:42:00] IP:::1 URI: /easygiant/pagine/main/1/107 POST moveupAction:up id_pagine:80
-[2010-05-05 21:42:02] IP:::1 URI: /easygiant/pagine/main/1/107 POST moveupAction:up id_pagine:72
-[2010-05-05 21:42:03] IP:::1 URI: /easygiant/pagine/main/1/107 POST moveupAction:up id_pagine:80
-[2010-05-05 21:42:04] IP:::1 URI: /easygiant/pagine/main/1/107 POST moveupAction:up id_pagine:72
-[2010-05-05 21:42:05] IP:::1 URI: /easygiant/pagine/main/1/107 POST moveupAction:up id_pagine:80
-[2010-05-05 21:42:06] IP:::1 URI: /easygiant/pagine/main/1/107 POST moveupAction:up id_pagine:72
-[2010-05-05 21:42:07] IP:::1 URI: /easygiant/pagine/main/1/107 POST moveupAction:up id_pagine:80
-[2010-05-05 21:42:07] IP:::1 URI: /easygiant/pagine/main/1/107 POST moveupAction:up id_pagine:72
-[2010-05-05 21:42:09] IP:::1 URI: /easygiant/pagine/main/1/107 POST moveupAction:up id_pagine:80
-[2010-05-05 21:42:11] IP:::1 URI: /easygiant/panel/main POST
-[2010-05-05 21:42:12] IP:::1 URI: /easygiant/users/logout POST
-[2010-05-05 21:42:14] IP:::1 URI: /easygiant/users/login POST
-[2010-05-10 17:53:21] IP:::1 URI: /easygiant/panel/main POST
-[2010-05-10 17:53:22] IP:::1 URI: /easygiant/users/login POST
-[2010-05-10 17:53:26] IP:::1 URI: /easygiant/users/login POST username:admin password:admin
-[2010-05-10 17:53:29] IP:::1 URI: /easygiant/panel/main POST
-[2010-05-10 17:53:31] IP:::1 URI: /easygiant/pagine/main/1 POST
-[2010-05-10 17:55:04] IP:::1 URI: /easygiant/panel/main POST
-[2010-05-10 17:55:06] IP:::1 URI: /easygiant/upload/main POST
-[2010-05-10 17:55:06] IP:::1 URI: /easygiant/External/jquery/jquery-1.3.2.min.js POST
-[2010-05-10 17:55:16] IP:::1 URI: /easygiant/upload/main POST uploadFileAction:upload MAX_FILE_SIZE:3000 directory:/home/tonicucoz/Apache/easygiant/media/
-[2010-05-10 17:55:17] IP:::1 URI: /easygiant/External/jquery/jquery-1.3.2.min.js POST
-[2010-05-10 17:55:24] IP:::1 URI: /easygiant/upload/main POST enter_x:19 enter_y:21 delFileAction:/home/tonicucoz/Apache/easygiant/media/cimg3666.jpg directory:/home/tonicucoz/Apache/easygiant/media/
-[2010-05-10 17:55:24] IP:::1 URI: /easygiant/External/jquery/jquery-1.3.2.min.js POST
-[2010-05-10 18:05:27] IP:::1 URI: /easygiant/panel/main POST
-[2010-05-10 18:05:29] IP:::1 URI: /easygiant/articles/main POST
-[2010-05-10 18:05:29] IP:::1 URI: /easygiant/External/tiny_mce/tiny_mce.js POST
-[2010-05-10 18:05:31] IP:::1 URI: /easygiant/panel/main POST
-[2010-05-10 18:05:31] IP:::1 URI: /easygiant/pagine/main/1 POST
-[2010-05-10 18:06:38] IP:::1 URI: /easygiant/pagine/main/1/undef POST
-[2010-05-10 18:06:47] IP:::1 URI: /easygiant/pagine/main/1/109 POST
-[2010-05-10 18:06:51] IP:::1 URI: /easygiant/pagine/main/1/109 POST moveupAction:up id_pagine:78
-[2010-05-10 18:06:53] IP:::1 URI: /easygiant/pagine/main/1/109 POST moveupAction:up id_pagine:79
-[2010-05-10 18:07:03] IP:::1 URI: /easygiant/pagine/main/1/109 POST
-[2010-05-10 18:07:10] IP:::1 URI: /easygiant/pagine/main/1/109 POST
-[2010-05-10 18:08:38] IP:::1 URI: /easygiant/pagine/main/1/109 POST
-[2010-05-10 18:08:39] IP:::1 URI: /easygiant/panel/main POST
-[2010-05-10 18:08:40] IP:::1 URI: /easygiant/post/main POST
-[2010-05-10 18:08:42] IP:::1 URI: /easygiant/panel/main POST
-[2010-05-10 18:08:44] IP:::1 URI: /easygiant/users/main POST
-[2010-05-10 18:08:46] IP:::1 URI: /easygiant/users/main/1/2 POST
-[2010-05-10 18:09:22] IP:::1 URI: /easygiant/users/main/1/2 POST
-[2010-05-10 18:09:30] IP:::1 URI: /easygiant/users/main/1/2 POST
-[2010-05-10 18:09:41] IP:::1 URI: /easygiant/users/main/1/2 POST
-[2010-05-10 18:09:43] IP:::1 URI: /easygiant/panel/main POST
-[2010-05-10 18:09:44] IP:::1 URI: /easygiant/pagine/main/1 POST
-[2010-05-10 18:09:45] IP:::1 URI: /easygiant/panel/main POST
-[2010-05-10 18:09:47] IP:::1 URI: /easygiant/users/main POST
-[2010-05-10 18:09:57] IP:::1 URI: /easygiant/users/main/1/1 POST
-[2010-05-10 18:10:20] IP:::1 URI: /easygiant/users/main/1/2 POST
-[2010-05-10 18:10:23] IP:::1 URI: /easygiant/users/main/1/3 POST
-[2010-05-10 18:10:26] IP:::1 URI: /easygiant/users/main/1/2 POST
-[2010-05-10 18:10:29] IP:::1 URI: /easygiant/users/form/update/1/2 POST generalAction:edit id_user:3
-[2010-05-10 18:10:30] IP:::1 URI: /easygiant/panel/main POST
-[2010-05-10 18:10:33] IP:::1 URI: /easygiant/users/main POST
-[2010-05-10 18:10:34] IP:::1 URI: /easygiant/users/associate/1/0 POST generalAction:link id_user:3
-[2010-05-10 18:10:36] IP:::1 URI: /easygiant/users/main/1/0 POST
-[2010-05-10 18:10:37] IP:::1 URI: /easygiant/users/associate/1/0 POST generalAction:link id_user:2
-[2010-05-10 18:10:38] IP:::1 URI: /easygiant/users/main/1/0 POST
-[2010-05-10 18:10:39] IP:::1 URI: /easygiant/users/associate/1/0 POST generalAction:link id_user:1
-[2010-05-10 18:10:40] IP:::1 URI: /easygiant/users/main/1/0 POST
-[2010-05-10 18:10:41] IP:::1 URI: /easygiant/panel/main POST
-[2010-05-10 18:10:44] IP:::1 URI: /easygiant/post/main POST
-[2010-05-10 18:10:49] IP:::1 URI: /easygiant/post/main/1/undefi/undefi/1/undefi/undefi/undefi POST
-[2010-05-10 18:11:32] IP:::1 URI: /easygiant/post/main/1/undefi/undefi/1/undefi/undefi/undefi POST
-[2010-05-10 18:11:34] IP:::1 URI: /easygiant/post/main/1/undefi/undefi/1/11/undefi/undefi POST
-[2010-05-10 18:11:37] IP:::1 URI: /easygiant/post/main/1/undefi/undefi/1/undefi/undefi/undefi POST
-[2010-05-10 18:11:39] IP:::1 URI: /easygiant/post/main/1/undefi/undefi/undefi/undefi/undefi/undefi POST
-[2010-05-10 18:11:42] IP:::1 URI: /easygiant/post/main/1/undefi/94/undefi/undefi/undefi/undefi POST
-[2010-05-10 18:11:49] IP:::1 URI: /easygiant/post/main/1/undefi/93/undefi/undefi/undefi/undefi POST
-[2010-05-10 18:11:52] IP:::1 URI: /easygiant/post/main/1/undefi/95/undefi/undefi/undefi/undefi POST
-[2010-05-10 18:11:54] IP:::1 URI: /easygiant/post/main/1/undefi/96/undefi/undefi/undefi/undefi POST
-[2010-05-10 18:11:57] IP:::1 URI: /easygiant/post/main/1/Antonio/96/undefi/undefi/undefi/undefi POST
-[2010-05-10 18:12:07] IP:::1 URI: /easygiant/post/main/1/undefi/96/undefi/undefi/undefi/undefi POST
-[2010-05-10 18:12:10] IP:::1 URI: /easygiant/post/main/1/undefi/undefi/undefi/undefi/undefi/undefi POST
-[2010-05-10 18:12:15] IP:::1 URI: /easygiant/post/main/1/undefi/undefi/2/undefi/undefi/undefi POST
-[2010-05-10 18:12:50] IP:::1 URI: /easygiant/post/main/1/undefi/undefi/2/undefi/undefi/undefi POST moveupAction:up id:100
-[2010-05-10 18:12:51] IP:::1 URI: /easygiant/post/main/1/undefi/undefi/2/undefi/undefi/undefi POST moveupAction:up id:101
-[2010-05-10 18:12:55] IP:::1 URI: /easygiant/post/main/1/undefi/undefi/undefi/undefi/undefi/undefi POST
-[2010-05-10 18:12:56] IP:::1 URI: /easygiant/post/main/1/undefi/undefi/undefi/11/undefi/undefi POST
-[2010-05-10 18:13:01] IP:::1 URI: /easygiant/post/main/1/undefi/undefi/undefi/11/Friday/undefi POST
-[2010-05-10 18:13:03] IP:::1 URI: /easygiant/post/main/1/undefi/undefi/undefi/undefi/Friday/undefi POST
-[2010-05-10 18:13:05] IP:::1 URI: /easygiant/post/main/1/undefi/undefi/undefi/undefi/Thursday/undefi POST
-[2010-05-10 18:13:08] IP:::1 URI: /easygiant/post/main/1/undefi/undefi/undefi/undefi/Thursday/April POST
-[2010-05-10 18:13:10] IP:::1 URI: /easygiant/post/main/1/undefi/undefi/undefi/undefi/Thursday/February POST
-[2010-05-10 18:13:13] IP:::1 URI: /easygiant/post/main/1/undefi/undefi/undefi/undefi/Thursday/April POST
-[2010-05-10 18:13:15] IP:::1 URI: /easygiant/post/main/1/undefi/undefi/undefi/undefi/Thursday/April POST
-[2010-05-10 18:13:17] IP:::1 URI: /easygiant/post/main/1/undefi/undefi/undefi/undefi/Thursday/February POST
-[2010-05-10 18:13:20] IP:::1 URI: /easygiant/post/main/1/undefi/undefi/undefi/undefi/Thursday/April POST
-[2010-05-10 18:13:24] IP:::1 URI: /easygiant/post/main/1/undefi/undefi/undefi/undefi/Thursday/undefi POST
-[2010-05-10 18:13:27] IP:::1 URI: /easygiant/post/main/1/undefi/undefi/undefi/undefi/undefi/undefi POST
-[2010-05-10 18:13:29] IP:::1 URI: /easygiant/post/main/1/undefi/undefi/undefi/undefi/undefi/undefi POST
-[2010-05-10 18:13:30] IP:::1 URI: /easygiant/post/main/1/undefi/undefi/undefi/undefi/undefi/undefi POST
-[2010-05-10 18:14:10] IP:::1 URI: /easygiant/post/main/2/undefi/undefi/undefi/undefi/undefi/undefi POST
-[2010-05-10 18:14:12] IP:::1 URI: /easygiant/post/main/1/undefi/undefi/undefi/undefi/undefi/undefi POST
-[2010-05-10 18:14:24] IP:::1 URI: /easygiant/post/main/1/Antonio/undefi/undefi/undefi/undefi/undefi POST
-[2010-05-10 18:14:26] IP:::1 URI: /easygiant/post/main/1/Antonio/undefi/undefi/undefi/undefi/undefi POST moveupAction:up id:108
-[2010-05-10 18:14:28] IP:::1 URI: /easygiant/post/main/1/undefi/undefi/undefi/undefi/undefi/undefi POST
-[2010-05-10 18:14:31] IP:::1 URI: /easygiant/panel/main POST
-[2010-05-10 18:14:32] IP:::1 URI: /easygiant/users/logout POST
-[2010-05-10 18:14:33] IP:::1 URI: /easygiant/users/login POST
diff --git a/h-source/MySQL_changelog/412_to_413_update_sql.sql b/h-source/MySQL_changelog/412_to_413_update_sql.sql
deleted file mode 100644
index 65a9316..0000000
--- a/h-source/MySQL_changelog/412_to_413_update_sql.sql
+++ /dev/null
@@ -1,36 +0,0 @@
--- NB: only if you are currently working with the revision 412 (otherwise apply all the steps to get to revision 412)!!
--- Apply these queries in order to update your database and work with revision 413
-
-create table distros (
- id_distro INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
- creation_date timestamp default CURRENT_TIMESTAMP,
- clean_name varchar(200) CHARACTER SET utf8 not null,
- full_name varchar(200) CHARACTER SET utf8 not null,
- id_order INT UNSIGNED NOT NULL
-)engine=innodb;
-
-insert into distros (clean_name, full_name, id_order) values ('blag_90001', 'BLAG 90001', 1);
-insert into distros (clean_name, full_name, id_order) values ('blag_120000', 'BLAG 120000', 2);
-insert into distros (clean_name, full_name, id_order) values ('blag_140000', 'BLAG 1400000', 3);
-insert into distros (clean_name, full_name, id_order) values ('dragora_1_1', 'Dragora 1.1', 4);
-insert into distros (clean_name, full_name, id_order) values ('dragora_2_0', 'Dragora 2.0 Ardi', 5);
-insert into distros (clean_name, full_name, id_order) values ('dragora_2_2', 'Dragora 2.2 Rafaela', 6);
-insert into distros (clean_name, full_name, id_order) values ('dynebolic_2_5_2', 'Dyne:bolic 2.5.2 DHORUBA', 7);
-insert into distros (clean_name, full_name, id_order) values ('dynebolic_3_0_X', 'Dyne:III 3.0.X MUNIR', 8);
-insert into distros (clean_name, full_name, id_order) values ('gnewsense_2_3', 'gNewSense 2.3 Deltah', 9);
-insert into distros (clean_name, full_name, id_order) values ('gnewsense_3_0', 'gNewSense 3.0 Metad (beta)', 10);
-insert into distros (clean_name, full_name, id_order) values ('gnewsense_3_0_parkes', 'gNewSense 3.0 Parkes', 11);
-insert into distros (clean_name, full_name, id_order) values ('musix_2_0', 'Musix GNU+Linux 2.0 R0', 12);
-insert into distros (clean_name, full_name, id_order) values ('parabola', 'Parabola GNU/Linux', 13);
-insert into distros (clean_name, full_name, id_order) values ('trisquel_3_5', 'Trisquel 3.5 Awen', 14);
-insert into distros (clean_name, full_name, id_order) values ('trisquel_4_0', 'Trisquel 4.0 Taranis', 15);
-insert into distros (clean_name, full_name, id_order) values ('trisquel_4_5', 'Trisquel 4.5 Slaine', 16);
-insert into distros (clean_name, full_name, id_order) values ('trisquel_5_0', 'Trisquel 5.0 Dagda', 17);
-insert into distros (clean_name, full_name, id_order) values ('trisquel_5_5', 'Trisquel 5.5 Brigantia', 18);
-insert into distros (clean_name, full_name, id_order) values ('trisquel_6_0', 'Trisquel 6.0 Toutatis', 19);
-insert into distros (clean_name, full_name, id_order) values ('ututo_xs_2009', 'UTUTO XS 2009', 20);
-insert into distros (clean_name, full_name, id_order) values ('ututo_xs_2010', 'UTUTO XS 2010', 21);
-insert into distros (clean_name, full_name, id_order) values ('ututo_xs_2012_04', 'UTUTO XS 2012.04', 22);
-insert into distros (clean_name, full_name, id_order) values ('venenux_0_8', 'VENENUX 0.8', 23);
-insert into distros (clean_name, full_name, id_order) values ('venenux_0_8_2', 'VENENUX-EC 0.8.2', 24);
-insert into distros (clean_name, full_name, id_order) values ('venenux_0_9', 'VENENUX 0.9', 25); \ No newline at end of file
diff --git a/h-source/MySQL_changelog/413_to_419_update_sql.sql b/h-source/MySQL_changelog/413_to_419_update_sql.sql
deleted file mode 100644
index a17fc01..0000000
--- a/h-source/MySQL_changelog/413_to_419_update_sql.sql
+++ /dev/null
@@ -1,4 +0,0 @@
--- Apply these queries in order to update your database from revision 413 to revision 419
-
-alter table hardware modify kernel varchar(100) NOT NULL;
-alter table revisions modify kernel varchar(100) NOT NULL;
diff --git a/h-source/MySQL_changelog/419_to_420_update_sql.sql b/h-source/MySQL_changelog/419_to_420_update_sql.sql
deleted file mode 100644
index 458361e..0000000
--- a/h-source/MySQL_changelog/419_to_420_update_sql.sql
+++ /dev/null
@@ -1,40 +0,0 @@
--- Apply these queries in order to update your database from revision 419 to revision 420
-
-drop table distros;
-
-create table distros (
- id_distro INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
- creation_date timestamp default CURRENT_TIMESTAMP,
- clean_name varchar(200) CHARACTER SET utf8 not null,
- full_name varchar(200) CHARACTER SET utf8 not null,
- id_order INT UNSIGNED NOT NULL
-)engine=innodb;
-
-insert into distros (clean_name, full_name, id_order) values ('blag_90001', 'BLAG 90001', 1);
-insert into distros (clean_name, full_name, id_order) values ('blag_120000', 'BLAG 120000', 2);
-insert into distros (clean_name, full_name, id_order) values ('blag_140000', 'BLAG 1400000', 3);
-insert into distros (clean_name, full_name, id_order) values ('debian_6_0', 'Debian GNU/Linux 6.0 squeeze', 4);
-insert into distros (clean_name, full_name, id_order) values ('debian_7_0', 'Debian GNU/Linux 7.0 wheezy', 5);
-insert into distros (clean_name, full_name, id_order) values ('debian_7_5', 'Debian GNU/Linux 7.5 wheezy', 6);
-insert into distros (clean_name, full_name, id_order) values ('dragora_1_1', 'Dragora 1.1', 7);
-insert into distros (clean_name, full_name, id_order) values ('dragora_2_0', 'Dragora 2.0 Ardi', 8);
-insert into distros (clean_name, full_name, id_order) values ('dragora_2_2', 'Dragora 2.2 Rafaela', 9);
-insert into distros (clean_name, full_name, id_order) values ('dynebolic_2_5_2', 'Dyne:bolic 2.5.2 DHORUBA', 10);
-insert into distros (clean_name, full_name, id_order) values ('dynebolic_3_0_X', 'Dyne:III 3.0.X MUNIR', 11);
-insert into distros (clean_name, full_name, id_order) values ('gnewsense_2_3', 'gNewSense 2.3 Deltah', 12);
-insert into distros (clean_name, full_name, id_order) values ('gnewsense_3_0', 'gNewSense 3.0 Metad (beta)', 13);
-insert into distros (clean_name, full_name, id_order) values ('gnewsense_3_0_parkes', 'gNewSense 3.0 Parkes', 14);
-insert into distros (clean_name, full_name, id_order) values ('musix_2_0', 'Musix GNU+Linux 2.0 R0', 15);
-insert into distros (clean_name, full_name, id_order) values ('parabola', 'Parabola GNU/Linux', 16);
-insert into distros (clean_name, full_name, id_order) values ('trisquel_3_5', 'Trisquel 3.5 Awen', 17);
-insert into distros (clean_name, full_name, id_order) values ('trisquel_4_0', 'Trisquel 4.0 Taranis', 18);
-insert into distros (clean_name, full_name, id_order) values ('trisquel_4_5', 'Trisquel 4.5 Slaine', 19);
-insert into distros (clean_name, full_name, id_order) values ('trisquel_5_0', 'Trisquel 5.0 Dagda', 20);
-insert into distros (clean_name, full_name, id_order) values ('trisquel_5_5', 'Trisquel 5.5 Brigantia', 21);
-insert into distros (clean_name, full_name, id_order) values ('trisquel_6_0', 'Trisquel 6.0 Toutatis', 22);
-insert into distros (clean_name, full_name, id_order) values ('ututo_xs_2009', 'UTUTO XS 2009', 23);
-insert into distros (clean_name, full_name, id_order) values ('ututo_xs_2010', 'UTUTO XS 2010', 24);
-insert into distros (clean_name, full_name, id_order) values ('ututo_xs_2012_04', 'UTUTO XS 2012.04', 25);
-insert into distros (clean_name, full_name, id_order) values ('venenux_0_8', 'VENENUX 0.8', 26);
-insert into distros (clean_name, full_name, id_order) values ('venenux_0_8_2', 'VENENUX-EC 0.8.2', 27);
-insert into distros (clean_name, full_name, id_order) values ('venenux_0_9', 'VENENUX 0.9', 28);
diff --git a/h-source/MySQL_changelog/420_to_422_update_sql.sql b/h-source/MySQL_changelog/420_to_422_update_sql.sql
deleted file mode 100644
index ef987d5..0000000
--- a/h-source/MySQL_changelog/420_to_422_update_sql.sql
+++ /dev/null
@@ -1,40 +0,0 @@
--- Apply these queries in order to update your database from revision 420 to revision 422
-
-drop table distros;
-
-create table distros (
- id_distro INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
- creation_date timestamp default CURRENT_TIMESTAMP,
- clean_name varchar(200) CHARACTER SET utf8 not null,
- full_name varchar(200) CHARACTER SET utf8 not null,
- id_order INT UNSIGNED NOT NULL
-)engine=innodb;
-
-insert into distros (clean_name, full_name, id_order) values ('blag_90001', 'BLAG 90001', 1);
-insert into distros (clean_name, full_name, id_order) values ('blag_120000', 'BLAG 120000', 2);
-insert into distros (clean_name, full_name, id_order) values ('blag_140000', 'BLAG 1400000', 3);
-insert into distros (clean_name, full_name, id_order) values ('debian', 'Debian GNU/Linux Testing/Unstable', 4);
-insert into distros (clean_name, full_name, id_order) values ('debian_6', 'Debian GNU/Linux 6 squeeze', 5);
-insert into distros (clean_name, full_name, id_order) values ('debian_7', 'Debian GNU/Linux 7 wheezy', 6);
-insert into distros (clean_name, full_name, id_order) values ('dragora_1_1', 'Dragora 1.1', 7);
-insert into distros (clean_name, full_name, id_order) values ('dragora_2_0', 'Dragora 2.0 Ardi', 8);
-insert into distros (clean_name, full_name, id_order) values ('dragora_2_2', 'Dragora 2.2 Rafaela', 9);
-insert into distros (clean_name, full_name, id_order) values ('dynebolic_2_5_2', 'Dyne:bolic 2.5.2 DHORUBA', 10);
-insert into distros (clean_name, full_name, id_order) values ('dynebolic_3_0_X', 'Dyne:III 3.0.X MUNIR', 11);
-insert into distros (clean_name, full_name, id_order) values ('gnewsense_2_3', 'gNewSense 2.3 Deltah', 12);
-insert into distros (clean_name, full_name, id_order) values ('gnewsense_3_0', 'gNewSense 3.0 Metad (beta)', 13);
-insert into distros (clean_name, full_name, id_order) values ('gnewsense_3_0_parkes', 'gNewSense 3.0 Parkes', 14);
-insert into distros (clean_name, full_name, id_order) values ('musix_2_0', 'Musix GNU+Linux 2.0 R0', 15);
-insert into distros (clean_name, full_name, id_order) values ('parabola', 'Parabola GNU/Linux', 16);
-insert into distros (clean_name, full_name, id_order) values ('trisquel_3_5', 'Trisquel 3.5 Awen', 17);
-insert into distros (clean_name, full_name, id_order) values ('trisquel_4_0', 'Trisquel 4.0 Taranis', 18);
-insert into distros (clean_name, full_name, id_order) values ('trisquel_4_5', 'Trisquel 4.5 Slaine', 19);
-insert into distros (clean_name, full_name, id_order) values ('trisquel_5_0', 'Trisquel 5.0 Dagda', 20);
-insert into distros (clean_name, full_name, id_order) values ('trisquel_5_5', 'Trisquel 5.5 Brigantia', 21);
-insert into distros (clean_name, full_name, id_order) values ('trisquel_6_0', 'Trisquel 6.0 Toutatis', 22);
-insert into distros (clean_name, full_name, id_order) values ('ututo_xs_2009', 'UTUTO XS 2009', 23);
-insert into distros (clean_name, full_name, id_order) values ('ututo_xs_2010', 'UTUTO XS 2010', 24);
-insert into distros (clean_name, full_name, id_order) values ('ututo_xs_2012_04', 'UTUTO XS 2012.04', 25);
-insert into distros (clean_name, full_name, id_order) values ('venenux_0_8', 'VENENUX 0.8', 26);
-insert into distros (clean_name, full_name, id_order) values ('venenux_0_8_2', 'VENENUX-EC 0.8.2', 27);
-insert into distros (clean_name, full_name, id_order) values ('venenux_0_9', 'VENENUX 0.9', 28);
diff --git a/h-source/MySQL_changelog/422_to_423_update_sql.sql b/h-source/MySQL_changelog/422_to_423_update_sql.sql
deleted file mode 100644
index b7deec8..0000000
--- a/h-source/MySQL_changelog/422_to_423_update_sql.sql
+++ /dev/null
@@ -1,41 +0,0 @@
--- Apply these queries in order to update your database from revision 422 to revision 422
-
-drop table distros;
-
-create table distros (
- id_distro INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
- creation_date timestamp default CURRENT_TIMESTAMP,
- clean_name varchar(200) CHARACTER SET utf8 not null,
- full_name varchar(200) CHARACTER SET utf8 not null,
- id_order INT UNSIGNED NOT NULL
-)engine=innodb;
-
-insert into distros (clean_name, full_name, id_order) values ('blag_90001', 'BLAG 90001', 1);
-insert into distros (clean_name, full_name, id_order) values ('blag_120000', 'BLAG 120000', 2);
-insert into distros (clean_name, full_name, id_order) values ('blag_140000', 'BLAG 1400000', 3);
-insert into distros (clean_name, full_name, id_order) values ('debian_testing', 'Debian GNU/Linux Testing', 4);
-insert into distros (clean_name, full_name, id_order) values ('debian_unstable', 'Debian GNU/Linux Unstable', 5);
-insert into distros (clean_name, full_name, id_order) values ('debian_6', 'Debian GNU/Linux 6 squeeze', 6);
-insert into distros (clean_name, full_name, id_order) values ('debian_7', 'Debian GNU/Linux 7 wheezy', 7);
-insert into distros (clean_name, full_name, id_order) values ('dragora_1_1', 'Dragora 1.1', 8);
-insert into distros (clean_name, full_name, id_order) values ('dragora_2_0', 'Dragora 2.0 Ardi', 9);
-insert into distros (clean_name, full_name, id_order) values ('dragora_2_2', 'Dragora 2.2 Rafaela', 10);
-insert into distros (clean_name, full_name, id_order) values ('dynebolic_2_5_2', 'Dyne:bolic 2.5.2 DHORUBA', 11);
-insert into distros (clean_name, full_name, id_order) values ('dynebolic_3_0_X', 'Dyne:III 3.0.X MUNIR', 12);
-insert into distros (clean_name, full_name, id_order) values ('gnewsense_2_3', 'gNewSense 2.3 Deltah', 13);
-insert into distros (clean_name, full_name, id_order) values ('gnewsense_3_0', 'gNewSense 3.0 Metad (beta)', 14);
-insert into distros (clean_name, full_name, id_order) values ('gnewsense_3_0_parkes', 'gNewSense 3.0 Parkes', 15);
-insert into distros (clean_name, full_name, id_order) values ('musix_2_0', 'Musix GNU+Linux 2.0 R0', 16);
-insert into distros (clean_name, full_name, id_order) values ('parabola', 'Parabola GNU/Linux', 17);
-insert into distros (clean_name, full_name, id_order) values ('trisquel_3_5', 'Trisquel 3.5 Awen', 18);
-insert into distros (clean_name, full_name, id_order) values ('trisquel_4_0', 'Trisquel 4.0 Taranis', 19);
-insert into distros (clean_name, full_name, id_order) values ('trisquel_4_5', 'Trisquel 4.5 Slaine', 20);
-insert into distros (clean_name, full_name, id_order) values ('trisquel_5_0', 'Trisquel 5.0 Dagda', 21);
-insert into distros (clean_name, full_name, id_order) values ('trisquel_5_5', 'Trisquel 5.5 Brigantia', 22);
-insert into distros (clean_name, full_name, id_order) values ('trisquel_6_0', 'Trisquel 6.0 Toutatis', 23);
-insert into distros (clean_name, full_name, id_order) values ('ututo_xs_2009', 'UTUTO XS 2009', 24);
-insert into distros (clean_name, full_name, id_order) values ('ututo_xs_2010', 'UTUTO XS 2010', 25);
-insert into distros (clean_name, full_name, id_order) values ('ututo_xs_2012_04', 'UTUTO XS 2012.04', 26);
-insert into distros (clean_name, full_name, id_order) values ('venenux_0_8', 'VENENUX 0.8', 27);
-insert into distros (clean_name, full_name, id_order) values ('venenux_0_8_2', 'VENENUX-EC 0.8.2', 28);
-insert into distros (clean_name, full_name, id_order) values ('venenux_0_9', 'VENENUX 0.9', 29);
diff --git a/h-source/MySQL_changelog/423_to_429_update_sql.sql b/h-source/MySQL_changelog/423_to_429_update_sql.sql
deleted file mode 100644
index 734113c..0000000
--- a/h-source/MySQL_changelog/423_to_429_update_sql.sql
+++ /dev/null
@@ -1,41 +0,0 @@
--- Apply these queries in order to update your database from revision 422 to revision 422
-
-drop table distros;
-
-create table distros (
- id_distro INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
- creation_date timestamp default CURRENT_TIMESTAMP,
- clean_name varchar(200) CHARACTER SET utf8 not null,
- full_name varchar(200) CHARACTER SET utf8 not null,
- id_order INT UNSIGNED NOT NULL
-)engine=innodb;
-
-insert into distros (clean_name, full_name, id_order) values ('blag_90001', 'BLAG 90001', 1);
-insert into distros (clean_name, full_name, id_order) values ('blag_120000', 'BLAG 120000', 2);
-insert into distros (clean_name, full_name, id_order) values ('blag_140000', 'BLAG 1400000', 3);
-insert into distros (clean_name, full_name, id_order) values ('debian', 'Debian GNU/Linux Testing/Unstable', 4);
-insert into distros (clean_name, full_name, id_order) values ('debian_6', 'Debian GNU/Linux 6 squeeze', 5);
-insert into distros (clean_name, full_name, id_order) values ('debian_7', 'Debian GNU/Linux 7 wheezy', 6);
-insert into distros (clean_name, full_name, id_order) values ('dragora_1_1', 'Dragora 1.1', 7);
-insert into distros (clean_name, full_name, id_order) values ('dragora_2_0', 'Dragora 2.0 Ardi', 8);
-insert into distros (clean_name, full_name, id_order) values ('dragora_2_2', 'Dragora 2.2 Rafaela', 9);
-insert into distros (clean_name, full_name, id_order) values ('dynebolic_2_5_2', 'Dyne:bolic 2.5.2 DHORUBA', 10);
-insert into distros (clean_name, full_name, id_order) values ('dynebolic_3_0_X', 'Dyne:III 3.0.X MUNIR', 11);
-insert into distros (clean_name, full_name, id_order) values ('gnewsense_2_3', 'gNewSense 2.3 Deltah', 12);
-insert into distros (clean_name, full_name, id_order) values ('gnewsense_3_0', 'gNewSense 3.0 Metad (beta)', 13);
-insert into distros (clean_name, full_name, id_order) values ('gnewsense_3_0_parkes', 'gNewSense 3.0 Parkes', 14);
-insert into distros (clean_name, full_name, id_order) values ('musix_2_0', 'Musix GNU+Linux 2.0 R0', 15);
-insert into distros (clean_name, full_name, id_order) values ('parabola', 'Parabola GNU/Linux', 16);
-insert into distros (clean_name, full_name, id_order) values ('trisquel_3_5', 'Trisquel 3.5 Awen', 17);
-insert into distros (clean_name, full_name, id_order) values ('trisquel_4_0', 'Trisquel 4.0 Taranis', 18);
-insert into distros (clean_name, full_name, id_order) values ('trisquel_4_5', 'Trisquel 4.5 Slaine', 19);
-insert into distros (clean_name, full_name, id_order) values ('trisquel_5_0', 'Trisquel 5.0 Dagda', 20);
-insert into distros (clean_name, full_name, id_order) values ('trisquel_5_5', 'Trisquel 5.5 Brigantia', 21);
-insert into distros (clean_name, full_name, id_order) values ('trisquel_6_0', 'Trisquel 6.0 Toutatis', 22);
-insert into distros (clean_name, full_name, id_order) values ('trisquel_7_0', 'Trisquel 7.0 Belenos', 23);
-insert into distros (clean_name, full_name, id_order) values ('ututo_xs_2009', 'UTUTO XS 2009', 24);
-insert into distros (clean_name, full_name, id_order) values ('ututo_xs_2010', 'UTUTO XS 2010', 25);
-insert into distros (clean_name, full_name, id_order) values ('ututo_xs_2012_04', 'UTUTO XS 2012.04', 26);
-insert into distros (clean_name, full_name, id_order) values ('venenux_0_8', 'VENENUX 0.8', 27);
-insert into distros (clean_name, full_name, id_order) values ('venenux_0_8_2', 'VENENUX-EC 0.8.2', 28);
-insert into distros (clean_name, full_name, id_order) values ('venenux_0_9', 'VENENUX 0.9', 28);
diff --git a/h-source/MySQL_changelog/429_to_430_update_sql.sql b/h-source/MySQL_changelog/429_to_430_update_sql.sql
deleted file mode 100644
index 7994e67..0000000
--- a/h-source/MySQL_changelog/429_to_430_update_sql.sql
+++ /dev/null
@@ -1,42 +0,0 @@
--- Apply these queries in order to update your database from revision 422 to revision 422
-
-drop table distros;
-
-create table distros (
- id_distro INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
- creation_date timestamp default CURRENT_TIMESTAMP,
- clean_name varchar(200) CHARACTER SET utf8 not null,
- full_name varchar(200) CHARACTER SET utf8 not null,
- id_order INT UNSIGNED NOT NULL
-)engine=innodb;
-
-insert into distros (clean_name, full_name, id_order) values ('blag_90001', 'BLAG 90001', 1);
-insert into distros (clean_name, full_name, id_order) values ('blag_120000', 'BLAG 120000', 2);
-insert into distros (clean_name, full_name, id_order) values ('blag_140000', 'BLAG 1400000', 3);
-insert into distros (clean_name, full_name, id_order) values ('debian', 'Debian GNU/Linux Testing/Unstable', 4);
-insert into distros (clean_name, full_name, id_order) values ('debian_6', 'Debian GNU/Linux 6 squeeze', 5);
-insert into distros (clean_name, full_name, id_order) values ('debian_7', 'Debian GNU/Linux 7 wheezy', 6);
-insert into distros (clean_name, full_name, id_order) values ('debian_8', 'Debian GNU/Linux 8 jessie', 7);
-insert into distros (clean_name, full_name, id_order) values ('dragora_1_1', 'Dragora 1.1', 8);
-insert into distros (clean_name, full_name, id_order) values ('dragora_2_0', 'Dragora 2.0 Ardi', 9);
-insert into distros (clean_name, full_name, id_order) values ('dragora_2_2', 'Dragora 2.2 Rafaela', 10);
-insert into distros (clean_name, full_name, id_order) values ('dynebolic_2_5_2', 'Dyne:bolic 2.5.2 DHORUBA', 11);
-insert into distros (clean_name, full_name, id_order) values ('dynebolic_3_0_X', 'Dyne:III 3.0.X MUNIR', 12);
-insert into distros (clean_name, full_name, id_order) values ('gnewsense_2_3', 'gNewSense 2.3 Deltah', 13);
-insert into distros (clean_name, full_name, id_order) values ('gnewsense_3_0', 'gNewSense 3.0 Metad (beta)', 14);
-insert into distros (clean_name, full_name, id_order) values ('gnewsense_3_0_parkes', 'gNewSense 3.0 Parkes', 15);
-insert into distros (clean_name, full_name, id_order) values ('musix_2_0', 'Musix GNU+Linux 2.0 R0', 16);
-insert into distros (clean_name, full_name, id_order) values ('parabola', 'Parabola GNU/Linux', 17);
-insert into distros (clean_name, full_name, id_order) values ('trisquel_3_5', 'Trisquel 3.5 Awen', 18);
-insert into distros (clean_name, full_name, id_order) values ('trisquel_4_0', 'Trisquel 4.0 Taranis', 19);
-insert into distros (clean_name, full_name, id_order) values ('trisquel_4_5', 'Trisquel 4.5 Slaine', 20);
-insert into distros (clean_name, full_name, id_order) values ('trisquel_5_0', 'Trisquel 5.0 Dagda', 21);
-insert into distros (clean_name, full_name, id_order) values ('trisquel_5_5', 'Trisquel 5.5 Brigantia', 22);
-insert into distros (clean_name, full_name, id_order) values ('trisquel_6_0', 'Trisquel 6.0 Toutatis', 23);
-insert into distros (clean_name, full_name, id_order) values ('trisquel_7_0', 'Trisquel 7.0 Belenos', 24);
-insert into distros (clean_name, full_name, id_order) values ('ututo_xs_2009', 'UTUTO XS 2009', 25);
-insert into distros (clean_name, full_name, id_order) values ('ututo_xs_2010', 'UTUTO XS 2010', 26);
-insert into distros (clean_name, full_name, id_order) values ('ututo_xs_2012_04', 'UTUTO XS 2012.04', 27);
-insert into distros (clean_name, full_name, id_order) values ('venenux_0_8', 'VENENUX 0.8', 28);
-insert into distros (clean_name, full_name, id_order) values ('venenux_0_8_2', 'VENENUX-EC 0.8.2', 29);
-insert into distros (clean_name, full_name, id_order) values ('venenux_0_9', 'VENENUX 0.9', 30);
diff --git a/h-source/MySQL_changelog/430_to_436_update_sql.sql b/h-source/MySQL_changelog/430_to_436_update_sql.sql
deleted file mode 100644
index 70bc259..0000000
--- a/h-source/MySQL_changelog/430_to_436_update_sql.sql
+++ /dev/null
@@ -1,45 +0,0 @@
--- Apply these queries in order to update your database from revision 430 to revision 436
-
-drop table distros;
-
-create table distros (
- id_distro INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
- creation_date timestamp default CURRENT_TIMESTAMP,
- clean_name varchar(200) CHARACTER SET utf8 not null,
- full_name varchar(200) CHARACTER SET utf8 not null,
- id_order INT UNSIGNED NOT NULL
-)engine=innodb;
-
-insert into distros (clean_name, full_name, id_order) values ('blag_90001', 'BLAG 90001', 1);
-insert into distros (clean_name, full_name, id_order) values ('blag_120000', 'BLAG 120000', 2);
-insert into distros (clean_name, full_name, id_order) values ('blag_140000', 'BLAG 1400000', 3);
-insert into distros (clean_name, full_name, id_order) values ('debian', 'Debian GNU/Linux Testing/Unstable', 4);
-insert into distros (clean_name, full_name, id_order) values ('debian_6', 'Debian GNU/Linux 6 squeeze', 5);
-insert into distros (clean_name, full_name, id_order) values ('debian_7', 'Debian GNU/Linux 7 wheezy', 6);
-insert into distros (clean_name, full_name, id_order) values ('debian_8', 'Debian GNU/Linux 8 jessie', 7);
-insert into distros (clean_name, full_name, id_order) values ('dragora_1_1', 'Dragora 1.1', 8);
-insert into distros (clean_name, full_name, id_order) values ('dragora_2_0', 'Dragora 2.0 Ardi', 9);
-insert into distros (clean_name, full_name, id_order) values ('dragora_2_2', 'Dragora 2.2 Rafaela', 10);
-insert into distros (clean_name, full_name, id_order) values ('dynebolic_2_5_2', 'Dyne:bolic 2.5.2 DHORUBA', 11);
-insert into distros (clean_name, full_name, id_order) values ('dynebolic_3_0_X', 'Dyne:III 3.0.X MUNIR', 12);
-insert into distros (clean_name, full_name, id_order) values ('gnewsense_2_3', 'gNewSense 2.3 Deltah', 13);
-insert into distros (clean_name, full_name, id_order) values ('gnewsense_3_0', 'gNewSense 3.0 Metad (beta)', 14);
-insert into distros (clean_name, full_name, id_order) values ('gnewsense_3_0_parkes', 'gNewSense 3.0 Parkes', 15);
-insert into distros (clean_name, full_name, id_order) values ('gnewsense_4_0', 'gNewSense 4.0 Ucclia', 16);
-insert into distros (clean_name, full_name, id_order) values ('guix_0_10', 'GuixSD 0.10', 17);
-insert into distros (clean_name, full_name, id_order) values ('musix_2_0', 'Musix GNU+Linux 2.0 R0', 18);
-insert into distros (clean_name, full_name, id_order) values ('musix_3_0_1', 'Musix GNU+Linux 3.0.1', 19);
-insert into distros (clean_name, full_name, id_order) values ('parabola', 'Parabola GNU/Linux', 20);
-insert into distros (clean_name, full_name, id_order) values ('trisquel_3_5', 'Trisquel 3.5 Awen', 21);
-insert into distros (clean_name, full_name, id_order) values ('trisquel_4_0', 'Trisquel 4.0 Taranis', 22);
-insert into distros (clean_name, full_name, id_order) values ('trisquel_4_5', 'Trisquel 4.5 Slaine', 23);
-insert into distros (clean_name, full_name, id_order) values ('trisquel_5_0', 'Trisquel 5.0 Dagda', 24);
-insert into distros (clean_name, full_name, id_order) values ('trisquel_5_5', 'Trisquel 5.5 Brigantia', 25);
-insert into distros (clean_name, full_name, id_order) values ('trisquel_6_0', 'Trisquel 6.0 Toutatis', 26);
-insert into distros (clean_name, full_name, id_order) values ('trisquel_7_0', 'Trisquel 7.0 Belenos', 27);
-insert into distros (clean_name, full_name, id_order) values ('ututo_xs_2009', 'UTUTO XS 2009', 28);
-insert into distros (clean_name, full_name, id_order) values ('ututo_xs_2010', 'UTUTO XS 2010', 29);
-insert into distros (clean_name, full_name, id_order) values ('ututo_xs_2012_04', 'UTUTO XS 2012.04', 30);
-insert into distros (clean_name, full_name, id_order) values ('venenux_0_8', 'VENENUX 0.8', 31);
-insert into distros (clean_name, full_name, id_order) values ('venenux_0_8_2', 'VENENUX-EC 0.8.2', 32);
-insert into distros (clean_name, full_name, id_order) values ('venenux_0_9', 'VENENUX 0.9', 33);
diff --git a/h-source/MySQL_changelog/436_to_442_update_sql.sql b/h-source/MySQL_changelog/436_to_442_update_sql.sql
deleted file mode 100644
index c86970e..0000000
--- a/h-source/MySQL_changelog/436_to_442_update_sql.sql
+++ /dev/null
@@ -1,47 +0,0 @@
--- Apply these queries in order to update your database from revision 436 to revision 442
-
-drop table distros;
-
-create table distros (
- id_distro INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
- creation_date timestamp default CURRENT_TIMESTAMP,
- clean_name varchar(200) CHARACTER SET utf8 not null,
- full_name varchar(200) CHARACTER SET utf8 not null,
- id_order INT UNSIGNED NOT NULL,
- active tinyint(1) NOT NULL DEFAULT 1
-)engine=innodb;
-
-insert into distros (clean_name, full_name, id_order, active) values ('blag_90001', 'BLAG 90001', 1, 0);
-insert into distros (clean_name, full_name, id_order, active) values ('blag_120000', 'BLAG 120000', 2, 0);
-insert into distros (clean_name, full_name, id_order, active) values ('blag_140000', 'BLAG 1400000', 3, 1);
-insert into distros (clean_name, full_name, id_order, active) values ('debian', 'Debian GNU/Linux Testing/Unstable', 4, 1);
-insert into distros (clean_name, full_name, id_order, active) values ('debian_6', 'Debian GNU/Linux 6 squeeze', 5, 1);
-insert into distros (clean_name, full_name, id_order, active) values ('debian_7', 'Debian GNU/Linux 7 wheezy', 6, 1);
-insert into distros (clean_name, full_name, id_order, active) values ('debian_8', 'Debian GNU/Linux 8 jessie', 7, 1);
-insert into distros (clean_name, full_name, id_order, active) values ('dragora_1_1', 'Dragora 1.1', 8, 0);
-insert into distros (clean_name, full_name, id_order, active) values ('dragora_2_0', 'Dragora 2.0 Ardi', 9, 0);
-insert into distros (clean_name, full_name, id_order, active) values ('dragora_2_2', 'Dragora 2.2 Rafaela', 10, 0);
-insert into distros (clean_name, full_name, id_order, active) values ('dynebolic_2_5_2', 'Dyne:bolic 2.5.2 DHORUBA', 11, 0);
-insert into distros (clean_name, full_name, id_order, active) values ('dynebolic_3_0_X', 'Dyne:III 3.0.X MUNIR', 12, 0);
-insert into distros (clean_name, full_name, id_order, active) values ('gnewsense_2_3', 'gNewSense 2.3 Deltah', 13, 0);
-insert into distros (clean_name, full_name, id_order, active) values ('gnewsense_3_0', 'gNewSense 3.0 Metad (beta)', 14, 0);
-insert into distros (clean_name, full_name, id_order, active) values ('gnewsense_3_0_parkes', 'gNewSense 3.0 Parkes', 15, 0);
-insert into distros (clean_name, full_name, id_order, active) values ('gnewsense_4_0', 'gNewSense 4.0 Ucclia', 16, 1);
-insert into distros (clean_name, full_name, id_order, active) values ('guix_0_10', 'GuixSD 0.10', 17, 1);
-insert into distros (clean_name, full_name, id_order, active) values ('musix_2_0', 'Musix GNU+Linux 2.0 R0', 18, 0);
-insert into distros (clean_name, full_name, id_order, active) values ('musix_3_0_1', 'Musix GNU+Linux 3.0.1', 19, 0);
-insert into distros (clean_name, full_name, id_order, active) values ('parabola', 'Parabola GNU/Linux', 20, 1);
-insert into distros (clean_name, full_name, id_order, active) values ('trisquel_3_5', 'Trisquel 3.5 Awen', 21, 0);
-insert into distros (clean_name, full_name, id_order, active) values ('trisquel_4_0', 'Trisquel 4.0 Taranis', 22, 0);
-insert into distros (clean_name, full_name, id_order, active) values ('trisquel_4_5', 'Trisquel 4.5 Slaine', 23, 0);
-insert into distros (clean_name, full_name, id_order, active) values ('trisquel_5_0', 'Trisquel 5.0 Dagda', 24, 0);
-insert into distros (clean_name, full_name, id_order, active) values ('trisquel_5_5', 'Trisquel 5.5 Brigantia', 25, 0);
-insert into distros (clean_name, full_name, id_order, active) values ('trisquel_6_0', 'Trisquel 6.0 Toutatis', 26, 1);
-insert into distros (clean_name, full_name, id_order, active) values ('trisquel_7_0', 'Trisquel 7.0 Belenos', 27, 1);
-insert into distros (clean_name, full_name, id_order, active) values ('ututo_xs_2009', 'UTUTO XS 2009', 28, 0);
-insert into distros (clean_name, full_name, id_order, active) values ('ututo_xs_2010', 'UTUTO XS 2010', 29, 0);
-insert into distros (clean_name, full_name, id_order, active) values ('ututo_xs_2012_04', 'UTUTO XS 2012.04', 30, 0);
-insert into distros (clean_name, full_name, id_order, active) values ('venenux_0_8', 'VENENUX 0.8', 31, 0);
-insert into distros (clean_name, full_name, id_order, active) values ('venenux_0_8_2', 'VENENUX-EC 0.8.2', 32, 0);
-insert into distros (clean_name, full_name, id_order, active) values ('venenux_0_9', 'VENENUX 0.9', 33, 0);
-
diff --git a/h-source/MySQL_changelog/443_to_446_update_sql.sql b/h-source/MySQL_changelog/443_to_446_update_sql.sql
deleted file mode 100644
index 3fa3218..0000000
--- a/h-source/MySQL_changelog/443_to_446_update_sql.sql
+++ /dev/null
@@ -1,51 +0,0 @@
--- Apply these queries in order to update your database from revision 443 to revision 446
-
-drop table distros;
-
-create table distros (
- id_distro INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
- creation_date timestamp default CURRENT_TIMESTAMP,
- clean_name varchar(200) CHARACTER SET utf8 not null,
- full_name varchar(200) CHARACTER SET utf8 not null,
- id_order INT UNSIGNED NOT NULL,
- active tinyint(1) NOT NULL DEFAULT 1
-)engine=innodb;
-
-insert into distros (clean_name, full_name, id_order, active) values ('blag_90001', 'BLAG 90001', 1, 0);
-insert into distros (clean_name, full_name, id_order, active) values ('blag_120000', 'BLAG 120000', 2, 0);
-insert into distros (clean_name, full_name, id_order, active) values ('blag_140000', 'BLAG 1400000', 3, 1);
-insert into distros (clean_name, full_name, id_order, active) values ('debian', 'Debian GNU/Linux Testing/Unstable', 4, 1);
-insert into distros (clean_name, full_name, id_order, active) values ('debian_6', 'Debian GNU/Linux 6 squeeze', 5, 1);
-insert into distros (clean_name, full_name, id_order, active) values ('debian_7', 'Debian GNU/Linux 7 wheezy', 6, 1);
-insert into distros (clean_name, full_name, id_order, active) values ('debian_8', 'Debian GNU/Linux 8 jessie', 7, 1);
-insert into distros (clean_name, full_name, id_order, active) values ('debian_9', 'Debian GNU/Linux 9 stretch', 8, 1);
-insert into distros (clean_name, full_name, id_order, active) values ('dragora_1_1', 'Dragora 1.1', 9, 0);
-insert into distros (clean_name, full_name, id_order, active) values ('dragora_2_0', 'Dragora 2.0 Ardi', 10, 0);
-insert into distros (clean_name, full_name, id_order, active) values ('dragora_2_2', 'Dragora 2.2 Rafaela', 11, 0);
-insert into distros (clean_name, full_name, id_order, active) values ('dynebolic_2_5_2', 'Dyne:bolic 2.5.2 DHORUBA', 12, 0);
-insert into distros (clean_name, full_name, id_order, active) values ('dynebolic_3_0_X', 'Dyne:III 3.0.X MUNIR', 13, 0);
-insert into distros (clean_name, full_name, id_order, active) values ('gnewsense_2_3', 'gNewSense 2.3 Deltah', 14, 0);
-insert into distros (clean_name, full_name, id_order, active) values ('gnewsense_3_0', 'gNewSense 3.0 Metad (beta)', 15, 0);
-insert into distros (clean_name, full_name, id_order, active) values ('gnewsense_3_0_parkes', 'gNewSense 3.0 Parkes', 16, 0);
-insert into distros (clean_name, full_name, id_order, active) values ('gnewsense_4_0', 'gNewSense 4.0 Ucclia', 17, 1);
-insert into distros (clean_name, full_name, id_order, active) values ('guix_0_10', 'GuixSD 0.10', 18, 1);
-insert into distros (clean_name, full_name, id_order, active) values ('musix_2_0', 'Musix GNU+Linux 2.0 R0', 19, 0);
-insert into distros (clean_name, full_name, id_order, active) values ('musix_3_0_1', 'Musix GNU+Linux 3.0.1', 20, 0);
-insert into distros (clean_name, full_name, id_order, active) values ('parabola', 'Parabola GNU/Linux', 21, 1);
-insert into distros (clean_name, full_name, id_order, active) values ('trisquel_3_5', 'Trisquel 3.5 Awen', 22, 0);
-insert into distros (clean_name, full_name, id_order, active) values ('trisquel_4_0', 'Trisquel 4.0 Taranis', 23, 0);
-insert into distros (clean_name, full_name, id_order, active) values ('trisquel_4_5', 'Trisquel 4.5 Slaine', 24, 0);
-insert into distros (clean_name, full_name, id_order, active) values ('trisquel_5_0', 'Trisquel 5.0 Dagda', 25, 0);
-insert into distros (clean_name, full_name, id_order, active) values ('trisquel_5_5', 'Trisquel 5.5 Brigantia', 26, 0);
-insert into distros (clean_name, full_name, id_order, active) values ('trisquel_6_0', 'Trisquel 6.0 Toutatis', 27, 1);
-insert into distros (clean_name, full_name, id_order, active) values ('trisquel_7_0', 'Trisquel 7.0 Belenos', 28, 1);
-insert into distros (clean_name, full_name, id_order, active) values ('trisquel_8_0', 'Trisquel 8.0 Flidas', 29, 1);
-insert into distros (clean_name, full_name, id_order, active) values ('ututo_xs_2009', 'UTUTO XS 2009', 30, 0);
-insert into distros (clean_name, full_name, id_order, active) values ('ututo_xs_2010', 'UTUTO XS 2010', 31, 0);
-insert into distros (clean_name, full_name, id_order, active) values ('ututo_xs_2012_04', 'UTUTO XS 2012.04', 32, 0);
-insert into distros (clean_name, full_name, id_order, active) values ('venenux_0_8', 'VENENUX 0.8', 33, 0);
-insert into distros (clean_name, full_name, id_order, active) values ('venenux_0_8_2', 'VENENUX-EC 0.8.2', 34, 0);
-insert into distros (clean_name, full_name, id_order, active) values ('venenux_0_9', 'VENENUX 0.9', 35, 0);
-insert into distros (clean_name, full_name, id_order, active) values ('debian_testing', 'Debian GNU/Linux Testing', 36, 0);
-insert into distros (clean_name, full_name, id_order, active) values ('debian_unstable', 'Debian GNU/Linux Unstable', 37, 0);
-
diff --git a/h-source/MySQL_changelog/446_to_449_update_sql.sql b/h-source/MySQL_changelog/446_to_449_update_sql.sql
deleted file mode 100644
index 0eae780..0000000
--- a/h-source/MySQL_changelog/446_to_449_update_sql.sql
+++ /dev/null
@@ -1,51 +0,0 @@
--- Apply these queries in order to update your database from revision 446 to revision 449
-
-drop table distros;
-
-create table distros (
- id_distro INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
- creation_date timestamp default CURRENT_TIMESTAMP,
- clean_name varchar(200) CHARACTER SET utf8 not null,
- full_name varchar(200) CHARACTER SET utf8 not null,
- id_order INT UNSIGNED NOT NULL,
- active tinyint(1) NOT NULL DEFAULT 1
-)engine=innodb;
-
-insert into distros (clean_name, full_name, id_order, active) values ('blag_90001', 'BLAG 90001', 1, 0);
-insert into distros (clean_name, full_name, id_order, active) values ('blag_120000', 'BLAG 120000', 2, 0);
-insert into distros (clean_name, full_name, id_order, active) values ('blag_140000', 'BLAG 1400000', 3, 1);
-insert into distros (clean_name, full_name, id_order, active) values ('debian', 'Debian GNU/Linux Testing/Unstable', 4, 1);
-insert into distros (clean_name, full_name, id_order, active) values ('debian_6', 'Debian GNU/Linux 6 squeeze', 5, 1);
-insert into distros (clean_name, full_name, id_order, active) values ('debian_7', 'Debian GNU/Linux 7 wheezy', 6, 1);
-insert into distros (clean_name, full_name, id_order, active) values ('debian_8', 'Debian GNU/Linux 8 jessie', 7, 1);
-insert into distros (clean_name, full_name, id_order, active) values ('debian_9', 'Debian GNU/Linux 9 jessie', 8, 1);
-insert into distros (clean_name, full_name, id_order, active) values ('dragora_1_1', 'Dragora 1.1', 9, 0);
-insert into distros (clean_name, full_name, id_order, active) values ('dragora_2_0', 'Dragora 2.0 Ardi', 10, 0);
-insert into distros (clean_name, full_name, id_order, active) values ('dragora_2_2', 'Dragora 2.2 Rafaela', 11, 0);
-insert into distros (clean_name, full_name, id_order, active) values ('dynebolic_2_5_2', 'Dyne:bolic 2.5.2 DHORUBA', 12, 0);
-insert into distros (clean_name, full_name, id_order, active) values ('dynebolic_3_0_X', 'Dyne:III 3.0.X MUNIR', 13, 0);
-insert into distros (clean_name, full_name, id_order, active) values ('gnewsense_2_3', 'gNewSense 2.3 Deltah', 14, 0);
-insert into distros (clean_name, full_name, id_order, active) values ('gnewsense_3_0', 'gNewSense 3.0 Metad (beta)', 15, 0);
-insert into distros (clean_name, full_name, id_order, active) values ('gnewsense_3_0_parkes', 'gNewSense 3.0 Parkes', 16, 0);
-insert into distros (clean_name, full_name, id_order, active) values ('gnewsense_4_0', 'gNewSense 4.0 Ucclia', 17, 1);
-insert into distros (clean_name, full_name, id_order, active) values ('guix_0_10', 'GuixSD 0.10', 18, 1);
-insert into distros (clean_name, full_name, id_order, active) values ('musix_2_0', 'Musix GNU+Linux 2.0 R0', 19, 0);
-insert into distros (clean_name, full_name, id_order, active) values ('musix_3_0_1', 'Musix GNU+Linux 3.0.1', 20, 0);
-insert into distros (clean_name, full_name, id_order, active) values ('parabola', 'Parabola GNU/Linux', 21, 1);
-insert into distros (clean_name, full_name, id_order, active) values ('parabola', 'Parabola GNU/Linux', 22, 1);
-insert into distros (clean_name, full_name, id_order, active) values ('trisquel_3_5', 'Trisquel 3.5 Awen', 23, 0);
-insert into distros (clean_name, full_name, id_order, active) values ('trisquel_4_0', 'Trisquel 4.0 Taranis', 24, 0);
-insert into distros (clean_name, full_name, id_order, active) values ('trisquel_4_5', 'Trisquel 4.5 Slaine', 25, 0);
-insert into distros (clean_name, full_name, id_order, active) values ('trisquel_5_0', 'Trisquel 5.0 Dagda', 26, 0);
-insert into distros (clean_name, full_name, id_order, active) values ('trisquel_5_5', 'Trisquel 5.5 Brigantia', 27, 0);
-insert into distros (clean_name, full_name, id_order, active) values ('trisquel_6_0', 'Trisquel 6.0 Toutatis', 28, 1);
-insert into distros (clean_name, full_name, id_order, active) values ('trisquel_7_0', 'Trisquel 7.0 Belenos', 29, 1);
-insert into distros (clean_name, full_name, id_order, active) values ('trisquel_8_0', 'Trisquel 8.0 Flidas', 30, 1);
-insert into distros (clean_name, full_name, id_order, active) values ('ututo_xs_2009', 'UTUTO XS 2009', 31, 0);
-insert into distros (clean_name, full_name, id_order, active) values ('ututo_xs_2010', 'UTUTO XS 2010', 32, 0);
-insert into distros (clean_name, full_name, id_order, active) values ('ututo_xs_2012_04', 'UTUTO XS 2012.04', 33, 0);
-insert into distros (clean_name, full_name, id_order, active) values ('venenux_0_8', 'VENENUX 0.8', 34, 0);
-insert into distros (clean_name, full_name, id_order, active) values ('venenux_0_8_2', 'VENENUX-EC 0.8.2', 35, 0);
-insert into distros (clean_name, full_name, id_order, active) values ('venenux_0_9', 'VENENUX 0.9', 36, 0);
-insert into distros (clean_name, full_name, id_order, active) values ('debian_testing', 'Debian GNU/Linux Testing', 37, 0);
-insert into distros (clean_name, full_name, id_order, active) values ('debian_unstable', 'Debian GNU/Linux Unstable', 38, 0);
diff --git a/h-source/MySQL_changelog/449_to_450_update_sql.sql b/h-source/MySQL_changelog/449_to_450_update_sql.sql
deleted file mode 100755
index 3769cdd..0000000
--- a/h-source/MySQL_changelog/449_to_450_update_sql.sql
+++ /dev/null
@@ -1,52 +0,0 @@
--- Apply these queries in order to update your database from revision 449 to revision 450
-
-drop table distros;
-
-create table distros (
- id_distro INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
- creation_date timestamp default CURRENT_TIMESTAMP,
- clean_name varchar(200) CHARACTER SET utf8 not null,
- full_name varchar(200) CHARACTER SET utf8 not null,
- id_order INT UNSIGNED NOT NULL,
- active tinyint(1) NOT NULL DEFAULT 1
-)engine=innodb;
-
-insert into distros (clean_name, full_name, id_order, active) values ('blag_90001', 'BLAG 90001', 1, 0);
-insert into distros (clean_name, full_name, id_order, active) values ('blag_120000', 'BLAG 120000', 2, 0);
-insert into distros (clean_name, full_name, id_order, active) values ('blag_140000', 'BLAG 1400000', 3, 0);
-insert into distros (clean_name, full_name, id_order, active) values ('debian', 'Debian GNU/Linux Testing/Unstable', 4, 1);
-insert into distros (clean_name, full_name, id_order, active) values ('debian_6', 'Debian GNU/Linux 6 squeeze', 5, 0);
-insert into distros (clean_name, full_name, id_order, active) values ('debian_7', 'Debian GNU/Linux 7 wheezy', 6, 0);
-insert into distros (clean_name, full_name, id_order, active) values ('debian_8', 'Debian GNU/Linux 8 jessie', 7, 1);
-insert into distros (clean_name, full_name, id_order, active) values ('debian_9', 'Debian GNU/Linux 9 jessie', 8, 1);
-insert into distros (clean_name, full_name, id_order, active) values ('dragora_1_1', 'Dragora 1.1', 9, 0);
-insert into distros (clean_name, full_name, id_order, active) values ('dragora_2_0', 'Dragora 2.0 Ardi', 10, 0);
-insert into distros (clean_name, full_name, id_order, active) values ('dragora_2_2', 'Dragora 2.2 Rafaela', 11, 0);
-insert into distros (clean_name, full_name, id_order, active) values ('dynebolic_2_5_2', 'Dyne:bolic 2.5.2 DHORUBA', 12, 0);
-insert into distros (clean_name, full_name, id_order, active) values ('dynebolic_3_0_X', 'Dyne:III 3.0.X MUNIR', 13, 0);
-insert into distros (clean_name, full_name, id_order, active) values ('gnewsense_2_3', 'gNewSense 2.3 Deltah', 14, 0);
-insert into distros (clean_name, full_name, id_order, active) values ('gnewsense_3_0', 'gNewSense 3.0 Metad (beta)', 15, 0);
-insert into distros (clean_name, full_name, id_order, active) values ('gnewsense_3_0_parkes', 'gNewSense 3.0 Parkes', 16, 0);
-insert into distros (clean_name, full_name, id_order, active) values ('gnewsense_4_0', 'gNewSense 4.0 Ucclia', 17, 0);
-insert into distros (clean_name, full_name, id_order, active) values ('guix_0_10', 'GuixSD 0.10', 18, 0);
-insert into distros (clean_name, full_name, id_order, active) values ('guix', 'GuixSD', 19, 1);
-insert into distros (clean_name, full_name, id_order, active) values ('musix_2_0', 'Musix GNU+Linux 2.0 R0', 20, 0);
-insert into distros (clean_name, full_name, id_order, active) values ('musix_3_0_1', 'Musix GNU+Linux 3.0.1', 21, 0);
-insert into distros (clean_name, full_name, id_order, active) values ('parabola', 'Parabola GNU/Linux', 22, 1);
-insert into distros (clean_name, full_name, id_order, active) values ('pureos_8_0', 'PureOS 8.0 Prometheus', 23, 1);
-insert into distros (clean_name, full_name, id_order, active) values ('trisquel_3_5', 'Trisquel 3.5 Awen', 24, 0);
-insert into distros (clean_name, full_name, id_order, active) values ('trisquel_4_0', 'Trisquel 4.0 Taranis', 25, 0);
-insert into distros (clean_name, full_name, id_order, active) values ('trisquel_4_5', 'Trisquel 4.5 Slaine', 26, 0);
-insert into distros (clean_name, full_name, id_order, active) values ('trisquel_5_0', 'Trisquel 5.0 Dagda', 27, 0);
-insert into distros (clean_name, full_name, id_order, active) values ('trisquel_5_5', 'Trisquel 5.5 Brigantia', 28, 0);
-insert into distros (clean_name, full_name, id_order, active) values ('trisquel_6_0', 'Trisquel 6.0 Toutatis', 29, 0);
-insert into distros (clean_name, full_name, id_order, active) values ('trisquel_7_0', 'Trisquel 7.0 Belenos', 30, 1);
-insert into distros (clean_name, full_name, id_order, active) values ('trisquel_8_0', 'Trisquel 8.0 Flidas', 31, 1);
-insert into distros (clean_name, full_name, id_order, active) values ('ututo_xs_2009', 'UTUTO XS 2009', 32, 0);
-insert into distros (clean_name, full_name, id_order, active) values ('ututo_xs_2010', 'UTUTO XS 2010', 33, 0);
-insert into distros (clean_name, full_name, id_order, active) values ('ututo_xs_2012_04', 'UTUTO XS 2012.04', 34, 0);
-insert into distros (clean_name, full_name, id_order, active) values ('venenux_0_8', 'VENENUX 0.8', 35, 0);
-insert into distros (clean_name, full_name, id_order, active) values ('venenux_0_8_2', 'VENENUX-EC 0.8.2', 36, 0);
-insert into distros (clean_name, full_name, id_order, active) values ('venenux_0_9', 'VENENUX 0.9', 37, 0);
-insert into distros (clean_name, full_name, id_order, active) values ('debian_testing', 'Debian GNU/Linux Testing', 38, 0);
-insert into distros (clean_name, full_name, id_order, active) values ('debian_unstable', 'Debian GNU/Linux Unstable', 39, 0);
diff --git a/h-source/MySQL_changelog/450_to_451_update_sql.sql b/h-source/MySQL_changelog/450_to_451_update_sql.sql
deleted file mode 100755
index b0cd21f..0000000
--- a/h-source/MySQL_changelog/450_to_451_update_sql.sql
+++ /dev/null
@@ -1,52 +0,0 @@
--- Apply these queries in order to update your database from revision 450 to revision 451
-
-drop table distros;
-
-create table distros (
- id_distro INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
- creation_date timestamp default CURRENT_TIMESTAMP,
- clean_name varchar(200) CHARACTER SET utf8 not null,
- full_name varchar(200) CHARACTER SET utf8 not null,
- id_order INT UNSIGNED NOT NULL,
- active tinyint(1) NOT NULL DEFAULT 1
-)engine=innodb;
-
-insert into distros (clean_name, full_name, id_order, active) values ('blag_90001', 'BLAG 90001', 1, 0);
-insert into distros (clean_name, full_name, id_order, active) values ('blag_120000', 'BLAG 120000', 2, 0);
-insert into distros (clean_name, full_name, id_order, active) values ('blag_140000', 'BLAG 1400000', 3, 0);
-insert into distros (clean_name, full_name, id_order, active) values ('debian', 'Debian GNU/Linux Testing/Unstable', 4, 1);
-insert into distros (clean_name, full_name, id_order, active) values ('debian_6', 'Debian GNU/Linux 6 squeeze', 5, 0);
-insert into distros (clean_name, full_name, id_order, active) values ('debian_7', 'Debian GNU/Linux 7 wheezy', 6, 0);
-insert into distros (clean_name, full_name, id_order, active) values ('debian_8', 'Debian GNU/Linux 8 jessie', 7, 1);
-insert into distros (clean_name, full_name, id_order, active) values ('debian_9', 'Debian GNU/Linux 9 stretch', 8, 1);
-insert into distros (clean_name, full_name, id_order, active) values ('dragora_1_1', 'Dragora 1.1', 9, 0);
-insert into distros (clean_name, full_name, id_order, active) values ('dragora_2_0', 'Dragora 2.0 Ardi', 10, 0);
-insert into distros (clean_name, full_name, id_order, active) values ('dragora_2_2', 'Dragora 2.2 Rafaela', 11, 0);
-insert into distros (clean_name, full_name, id_order, active) values ('dynebolic_2_5_2', 'Dyne:bolic 2.5.2 DHORUBA', 12, 0);
-insert into distros (clean_name, full_name, id_order, active) values ('dynebolic_3_0_X', 'Dyne:III 3.0.X MUNIR', 13, 0);
-insert into distros (clean_name, full_name, id_order, active) values ('gnewsense_2_3', 'gNewSense 2.3 Deltah', 14, 0);
-insert into distros (clean_name, full_name, id_order, active) values ('gnewsense_3_0', 'gNewSense 3.0 Metad (beta)', 15, 0);
-insert into distros (clean_name, full_name, id_order, active) values ('gnewsense_3_0_parkes', 'gNewSense 3.0 Parkes', 16, 0);
-insert into distros (clean_name, full_name, id_order, active) values ('gnewsense_4_0', 'gNewSense 4.0 Ucclia', 17, 0);
-insert into distros (clean_name, full_name, id_order, active) values ('guix_0_10', 'GuixSD 0.10', 18, 0);
-insert into distros (clean_name, full_name, id_order, active) values ('guix', 'GuixSD', 19, 1);
-insert into distros (clean_name, full_name, id_order, active) values ('musix_2_0', 'Musix GNU+Linux 2.0 R0', 20, 0);
-insert into distros (clean_name, full_name, id_order, active) values ('musix_3_0_1', 'Musix GNU+Linux 3.0.1', 21, 0);
-insert into distros (clean_name, full_name, id_order, active) values ('parabola', 'Parabola GNU/Linux', 22, 1);
-insert into distros (clean_name, full_name, id_order, active) values ('pureos_8_0', 'PureOS 8.0 Prometheus', 23, 1);
-insert into distros (clean_name, full_name, id_order, active) values ('trisquel_3_5', 'Trisquel 3.5 Awen', 24, 0);
-insert into distros (clean_name, full_name, id_order, active) values ('trisquel_4_0', 'Trisquel 4.0 Taranis', 25, 0);
-insert into distros (clean_name, full_name, id_order, active) values ('trisquel_4_5', 'Trisquel 4.5 Slaine', 26, 0);
-insert into distros (clean_name, full_name, id_order, active) values ('trisquel_5_0', 'Trisquel 5.0 Dagda', 27, 0);
-insert into distros (clean_name, full_name, id_order, active) values ('trisquel_5_5', 'Trisquel 5.5 Brigantia', 28, 0);
-insert into distros (clean_name, full_name, id_order, active) values ('trisquel_6_0', 'Trisquel 6.0 Toutatis', 29, 0);
-insert into distros (clean_name, full_name, id_order, active) values ('trisquel_7_0', 'Trisquel 7.0 Belenos', 30, 1);
-insert into distros (clean_name, full_name, id_order, active) values ('trisquel_8_0', 'Trisquel 8.0 Flidas', 31, 1);
-insert into distros (clean_name, full_name, id_order, active) values ('ututo_xs_2009', 'UTUTO XS 2009', 32, 0);
-insert into distros (clean_name, full_name, id_order, active) values ('ututo_xs_2010', 'UTUTO XS 2010', 33, 0);
-insert into distros (clean_name, full_name, id_order, active) values ('ututo_xs_2012_04', 'UTUTO XS 2012.04', 34, 0);
-insert into distros (clean_name, full_name, id_order, active) values ('venenux_0_8', 'VENENUX 0.8', 35, 0);
-insert into distros (clean_name, full_name, id_order, active) values ('venenux_0_8_2', 'VENENUX-EC 0.8.2', 36, 0);
-insert into distros (clean_name, full_name, id_order, active) values ('venenux_0_9', 'VENENUX 0.9', 37, 0);
-insert into distros (clean_name, full_name, id_order, active) values ('debian_testing', 'Debian GNU/Linux Testing', 38, 0);
-insert into distros (clean_name, full_name, id_order, active) values ('debian_unstable', 'Debian GNU/Linux Unstable', 39, 0);
diff --git a/h-source/Public/Css/explorer6.css b/h-source/Public/Css/explorer6.css
new file mode 100755
index 0000000..29b6456
--- /dev/null
+++ b/h-source/Public/Css/explorer6.css
@@ -0,0 +1,112 @@
+ul#menuBlock li {
+ height:24px;
+}
+
+ul#menuBlock li ul {
+ top:25px;
+ margin-left:3px;
+}
+
+ul#menuBlock li ul li {
+ margin-top:-1px;
+}
+
+.view_page_top_box
+{
+ height:32px;
+}
+
+.update_submit_class
+{
+ padding:7px;
+}
+
+.view_page_update_button
+{
+ width:35px;
+}
+
+/*div that contains the update form*/
+.view_page_update_button
+{
+ margin-top:2px;
+ margin-right:5px;
+}
+.update_submit_class
+{
+ padding:2px;
+ width:45px;
+}
+.notebooks_insert_form
+{
+ margin-right:-30px;
+}
+
+.notebook_insert_link
+{
+ margin:0px 0px 0px 5px;
+ padding-right:0px;
+ width:245px;
+}
+.view_page_history_button
+{
+ margin-left:10px;
+}
+.top_left_images_help
+{
+ height:22px;
+ margin-bottom:-3px;
+}
+ul#menuBlock li {
+ height:26px;
+}
+ul#menuBlock li ul {
+ left:-6px;
+}
+.user_logged
+{
+ margin-left:62px;
+}
+.viewall_popup_menu_status_item
+{
+ padding-left:2px;
+/* background:red; */
+}
+.copyright_notice_box
+{
+ width:140px;
+}
+.language_links_box ul
+{
+ width:100%;
+ margin:-1px 5px 30px 5px;
+}
+.language_links_box ul li
+{
+ margin-bottom:5px;
+}
+.language_links_box ul li a
+{
+ height:30px;
+}
+.talk_numb_ext
+{
+ margin-top:-30px;
+}
+.talk_numb_ext a, .talk_numb_ext_wiki a
+{
+ margin-bottom:0px;
+}
+.talk_numb_ext_wiki
+{
+ width:130px;
+}
+.language_links_box a.current_lang
+{
+ background:#6495ED;
+}
+
+.last_modifications ul
+{
+ margin-left:0px;
+} \ No newline at end of file
diff --git a/h-source/Public/Css/main.css b/h-source/Public/Css/main.css
index 2d84e59..2314940 100644
--- a/h-source/Public/Css/main.css
+++ b/h-source/Public/Css/main.css
@@ -579,8 +579,9 @@ div.history_page_list_news a
font-weight:bold;
font: bold 13px/1 sans-serif,arial;
}
-/*
+
ul#menuBlock {
+/* float:right; */
float:left;
margin:0px;
padding:0px;
@@ -599,8 +600,10 @@ ul#menuBlock li {
float:left;
margin-left:3px;
width:139px;
+/* height:22px; */
text-align:center;
background: url('../Img/popup_back.png') no-repeat top left;
+/* background:#FFA500; */
}
ul#menuBlock li a {
@@ -625,88 +628,9 @@ ul#menuBlock li ul li {
background:#ffef84;
border-top:1px solid #ec8459;
padding:3px 0;
-}*/
-
-
-ul.menuBlock {
- float:left;
- margin:0px;
- padding:0px;
- list-style:none;
- height:25px;
- font-size:11px;
- cursor:pointer;
-}
-ul.menuBlock li {
- position:relative;
- display:block;
- float:left;
- margin-left:3px;
- width:139px;
- min-height:22px;
- text-align:left;
- background:#ffffff;
- padding-top:3px;
- text-align:center;
- background: url('../Img/popup_back.png') no-repeat top left;
-}
-ul.menuBlock > li
-{
- border:1px solid #D3D3D3;
-}
-ul.menuBlock li ul li
-{
-/* width:201px; */
- cursor:default;
- width:140px;
-}
-/*ul.menuBlock li.inner_item_id_c {
- width:300px;
-}*/
-ul.menuBlock li a {
- color:#000000;
- font: normal 12px/1 sans-serif,arial;
-}
-
-ul.menuBlock li ul {
- margin:0px;
- padding:0px;
- list-style:none;
- position:absolute;
- top:24px;
- left:-4px;
- display:none;
-}
-
-ul.menuBlock:hover li ul
-{
- display:block;
}
-ul.menuBlock li ul li {
- background:#ffef84;
- border-top:1px solid #ec8459;
- padding:3px 0;
-}
-/*.viewall_popup_menu_status
-{
- clear:left;
- width:825px;
- overflow:hidden;
- margin-left:100px;
- text-align:center;
-}
-.viewall_popup_menu_status_item
-{
- width:150px;
- float:left;
- margin-left:3px;
- color:#FF4500;
- font-weight:bold;
- margin-top:5px;
- font: bold 13px/1 sans-serif,arial;
-}*/
/*view files with differences*/
.diff_ext_box
{
@@ -2204,79 +2128,6 @@ div#description_tabs_content
font-size:12px;
}
-/*page division*/
-.pageList {
- text-align:left;
- font:normal 14px/1 Verdana,arial;
- padding:10px;
-}
-
-div.pageList a {
- padding:0 5px;
- padding:0 10px;
- border-left:1px solid #708090;
- color: #686868;
- text-decoration:none;
-/* background:#4169E1; */
-}
-
-.page_list_legend
-{
- padding-right:10px;
-}
-
-
-.mainMenu {
- height:35px;
- padding-top:6px;
- margin-bottom:10px;
-}
-
-.scaffold_header
-{
- background:#ffa524;
- padding:6px;
- font:bold 14px/1.5 Verdana,arial;
- color:#ffffff;
- position:relative;
- z-index:1;
- height:22px;
-}
-
-.mainMenuItem, .mainMenuItemLarge {
- float:left;
- width:105px;
- height:25px;
- margin:10px;
- text-align:left;
-}
-.mainMenuItemLarge
-{
- width:185px;
-}
-.mainMenuItem img, .mainMenuItemLarge img
-{
- vertical-align:middle;
-}
-
-.mainMenuItem a, .mainMenuItemLarge a {
- vertical-align:-2px;
- color: #686868;
- font:bold 16px/1 Verdana,arial;
- font-size:14px;
-}
-
-
-td.editForm, td.delForm, td.associateForm, td.moveupForm, td.movedownForm,td.Form, td.ledit {
- width:3%;
-}
-
-
-td.simpleLink
-{
- width:3%;
-}
-
/*.version_div a
{
display:block;
diff --git a/h-source/Public/Img/Acun/book.png b/h-source/Public/Img/Acun/book.png
new file mode 100755
index 0000000..0245944
--- /dev/null
+++ b/h-source/Public/Img/Acun/book.png
Binary files differ
diff --git a/h-source/Public/Img/Acun/document_properties.png b/h-source/Public/Img/Acun/document_properties.png
new file mode 100755
index 0000000..bf4686f
--- /dev/null
+++ b/h-source/Public/Img/Acun/document_properties.png
Binary files differ
diff --git a/h-source/Public/Img/Acun/filenew.png b/h-source/Public/Img/Acun/filenew.png
new file mode 100755
index 0000000..66d34b3
--- /dev/null
+++ b/h-source/Public/Img/Acun/filenew.png
Binary files differ
diff --git a/h-source/Public/Img/Acun/go_previous.png b/h-source/Public/Img/Acun/go_previous.png
new file mode 100755
index 0000000..39685ad
--- /dev/null
+++ b/h-source/Public/Img/Acun/go_previous.png
Binary files differ
diff --git a/h-source/Public/Img/Acun/note.png b/h-source/Public/Img/Acun/note.png
new file mode 100755
index 0000000..5b4b248
--- /dev/null
+++ b/h-source/Public/Img/Acun/note.png
Binary files differ
diff --git a/h-source/Public/Img/Famfamfam/pt.png b/h-source/Public/Img/Famfamfam/pt.png
index ece7980..ece7980 100755..100644
--- a/h-source/Public/Img/Famfamfam/pt.png
+++ b/h-source/Public/Img/Famfamfam/pt.png
Binary files differ
diff --git a/h-source/Public/Img/download_code.png b/h-source/Public/Img/download_code.png
new file mode 100755
index 0000000..f40fc74
--- /dev/null
+++ b/h-source/Public/Img/download_code.png
Binary files differ
diff --git a/h-source/Public/Img/fsf_logo.png b/h-source/Public/Img/fsf_logo.png
new file mode 100755
index 0000000..90ac03d
--- /dev/null
+++ b/h-source/Public/Img/fsf_logo.png
Binary files differ
diff --git a/h-source/Public/Img/mailing.png b/h-source/Public/Img/mailing.png
new file mode 100644
index 0000000..dbb2207
--- /dev/null
+++ b/h-source/Public/Img/mailing.png
Binary files differ
diff --git a/h-source/Public/Img/title.png b/h-source/Public/Img/title.png
index fb0b38d..4a912bd 100644
--- a/h-source/Public/Img/title.png
+++ b/h-source/Public/Img/title.png
Binary files differ
diff --git a/h-source/Public/Js/TinyMCE.js b/h-source/Public/Js/TinyMCE.js
new file mode 100755
index 0000000..b0f994e
--- /dev/null
+++ b/h-source/Public/Js/TinyMCE.js
@@ -0,0 +1,34 @@
+tinyMCE.init({
+ // General options
+ mode : "textareas",
+ theme : "advanced",
+ editor_selector : "contentArea",
+// editor_deselector : "mceNoEditor",
+ plugins : "safari,pagebreak,style,layer,table,save,advhr,advimage,advlink,emotions,iespell,inlinepopups,insertdatetime,preview,media,searchreplace,print,contextmenu,paste,directionality,fullscreen,noneditable,visualchars,nonbreaking,xhtmlxtras,template",
+
+ // Theme options
+ theme_advanced_buttons1 : "justifyleft,justifycenter,justifyright,justifyfull,styleselect,formatselect,fontselect,fontsizeselect",
+ theme_advanced_buttons2 : "cut,copy,paste,pastetext,pasteword,|,search,replace,|,bullist,numlist,|,outdent,indent,blockquote,|,undo,redo,|,link,unlink,anchor,image,cleanup,code",
+ theme_advanced_buttons3 : "tablecontrols,|,hr,removeformat,visualaid,|,sub,sup,|,charmap,emotions,iespell,media",
+ theme_advanced_buttons4 : "styleprops,|,cite,abbr,acronym,del,ins,attribs,|,visualchars,template,|,forecolor,backcolor,bold,italic,underline,strikethrough,|,insertdate,inserttime,preview",
+ theme_advanced_toolbar_location : "top",
+ theme_advanced_toolbar_align : "left",
+ theme_advanced_statusbar_location : "bottom",
+ theme_advanced_resizing : true,
+
+ // Example content CSS (should be your site CSS)
+ content_css : "../stili_editor.css",
+
+ // Drop lists for link/image/media/template dialogs
+ template_external_list_url : "lists/template_list.js",
+ external_link_list_url : "lists/link_list.js",
+ external_image_list_url : "lists/image_list.js",
+ media_external_list_url : "lists/media_list.js",
+
+ // Replace values for the template plugin
+ template_replace_values : {
+ username : "Some User",
+ staffid : "991234"
+ }
+ });
+
diff --git a/h-source/README.txt b/h-source/README.txt
deleted file mode 100644
index 5f7241f..0000000
--- a/h-source/README.txt
+++ /dev/null
@@ -1,179 +0,0 @@
-
-== Introduction ==
-
-h-source is web software that can be used to build a community of people that want to share their hardware information. It is based on the EasyGiant PHP framework (www.easygiant.org) and can be considered an EasyGiant application (note that EasyGiant is no longer active).
-
-
-== Requirements ==
-
-* Web server with URL rewrite (such as Apache with mod-rewrite)
-* PHP 5.2 or newer (does not work with PHP 7)
-* Any version of MariaDB, or MySQL 5 or newer (note that strict mode must be off, so this default must be changed in MariaDB 10.2+ or MySQL 5.7+)
-* php5-gd
-* php5-cli
-
-== Installation and configuration ==
-
-Extract the tarball inside a folder of your filesystem.
-
-You have to create the MySQL database used by h-source. The tables of the database that have to be created are written inside the file tables.sql. A way to carry out this operation is the following:
-
-Open a terminal and type:
-
- mysql -u <username> -p
-
-where <username> is the database user. Write the password and type the following command:
-
- create database <db>;
-
-where <db> is the database name you want to use. Close Mysql by typing the following command:
-
- exit
-
-Now you have to move inside the folder that contains the tables.sql file and type the following command:
-
- mysql -u username -ppassword <db> < tables.sql
-
-where username and password have to be changed with the real username and password. <db> is the name of the database just created.
-
-Now you have created the database named <db>
-
-This will also create the default user having the following credentials:
-
-username: admin
-password: admin
-
-You will be able to login using the admin user and change the website preferences and the admin password.
-
-Open the Config/Config.php file
-
-You have to set the following constants:
-
- DB: name of the database (the database just created)
- USER: database user
- PWD: database password
- HOST: name of the mysql server (usually localhost)
-
- DOMAIN_NAME: the domain name of the website (use localhost or create a virtual host in your web server)
-
-Now you have to copy the extracted h-source files inside the DocumentRoot of your server. You can choose to leave all the files inside the DocumentRoot or not, see the explanations in this page (http://www.easygiant.org/learn/index/6).
-
-You have now to assure that the allowOverride directive is active in the configuration file of your Apache server. You have to activate the allowOverride directive for the folder inside which you have saved the h-source files (and the index.php file). If you have not activated the allowOverride directive, then your URL won't be interpreted by the mod_rewrite module (you won't be able to use h-source). In a GNU/Linux system the apache configuration file is usually saved at /etc/apache2/apache2.conf.
-
-If necessary, make sure the .htaccess file is in place.
-
-Direct your browser to the following URL:
-
- http://DOMAIN_NAME/
-
-where DOMAIN_NAME is the domain name you have previously set (perhaps localhost). You should see the home page of the h-source software.
-
-
-
-== Account issues ==
-
-If you want that the system can send e-mails you have to specify the name of the SMTP server that has to be used. Open the file Application/Include/params.php and set the following static attributes of the Website class:
-
- $mailServer = ""; //set the mail server (only useful if $useSMTP = true)
-
- $generalMail = ""; //set the username of your mail account (always needed)
-
- $mailPassword = ""; //set the password of your mail account (only useful if $useSMTP = true)
-
- $fromEmail = "noreply@h-node.org"; //this is the "from address e-mail" used inside the mails sent by h-source (example: confirmation requesta e-mail, change password e-mail, ...)
-
- $useSMTP = true; //if you want to use a SMTP account. It can be true or false. Set $useSMTP to false if you want that the software rely on the mail() PHP function
-
-You can also set these constants:
-
- $generalName = ""; //the string that you want to use inside the <title> tag of your website
-
- $projectName = ""; //the name of your project
-
-
-== Change the configuration of some parts of the template (right column, top notices, top menu, ...) ==
-
-Modify the file config.xml inside the ROOT folder of your h-source installation.
-
-If you want to change the position of the config.xml file change the following static attribute of the Website class inside the
-Application/Include/params.php file:
-
- static public $xmlConfigFileFolder = ROOT; //the constant ROOT contains the path to the root folder of your installaton of h-source
-
-== Change the homepage ==
-
-
-Modify the PHP files inside the folder Application/Views/Home
-
-
-== Change the hardware ==
-
-
-Modify the PHP file Application/Include/hardware.php
-
-
-== Change the allowed distributions ==
-
-
-Modify the PHP file Application/Include/distributions.php
-
-
-== Change the allowed languages ==
-
-
-Modify the PHP file Application/Include/languages.php
-
-
-== How to fill the vendors entry ==
-
-After the installation you have to fill the MySQL table containing the vendors. To carry out this task you need to download the proper scripts using the following command:
-
- svn co svn://svn.savannah.nongnu.org/h-source/trunk/scripts/vendorid
-
-Move into the just downloaded vendorid folder. Open the file connect.php and modify the following variables:
-
- $host = 'name of the mysql server (the same used for h-source)';
- $user = 'database user (the same used for h-source)';
- $password = 'database pasword (the same used for h-source)';
- $dbName = 'database name (the same used for h-source)';
-
-You will find two file containing the list of vendors: pci.ids and usb.ids. If you want more up-to-date versions of those files then delete them and write the following commands (or download those files from the URLs indicated below):
-
- command to get pci.ids (remember to delete the old pci.ids file):
-
- wget pciids.sourceforge.net/v2.2/pci.ids
-
- command to get usb.ids (remember to delete the old pci.ids file):
-
- wget http://www.linux-usb.org/usb.ids
-
-Be sure you have installed php5-cli, then write the following command:
-
- php5 insert_vendors.php
-
-It will fill the vendors MySql table. It will take a bit.
-
-
-== Learn the EasyGiant PHP framework ==
-
-Since h-source is an application of the EasyGiant PHP framework you can use the EasyGiant features in order to modify the h-source source code. Visit www.easygiant.org
-
-
-// h-source, a web software to build a community of people that want to share their hardware information.
-// Copyright (C) 2010 Antonio Gallo (h-source-copyright.txt)
-//
-// This file is part of h-source
-//
-// h-source is free software: you can redistribute it and/or modify
-// it under the terms of the GNU General Public License as published by
-// the Free Software Foundation, either version 3 of the License, or
-// (at your option) any later version.
-//
-// h-source is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License
-// along with h-source. If not, see <http://www.gnu.org/licenses/>.
-
diff --git a/h-source/Template/Desktop/Home/left.php b/h-source/Template/Desktop/Home/left.php
deleted file mode 100644
index 43069fb..0000000
--- a/h-source/Template/Desktop/Home/left.php
+++ /dev/null
@@ -1,36 +0,0 @@
-<?php if (!defined('EG')) die('Direct access not allowed!'); ?>
-
-<?php
-// h-source, a web software to build a community of people that want to share their hardware information.
-// Copyright (C) 2010 Antonio Gallo (h-source-copyright.txt)
-//
-// This file is part of h-source
-//
-// h-source is free software: you can redistribute it and/or modify
-// it under the terms of the GNU General Public License as published by
-// the Free Software Foundation, either version 3 of the License, or
-// (at your option) any later version.
-//
-// h-source is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License
-// along with h-source. If not, see <http://www.gnu.org/licenses/>.
-?>
-
- <div id="left">
-
- <div class="position_tree_box">
- Home
- </div>
-
- <?php echo $htmlNewsBox;?>
-
- <p>it works!!</p>
-
- <p>modify the file <b>Template/Desktop/left.php</b> in order to change the english version of your homepage</p>
-
- <p>modify the file <b>Application/Include/languages.php</b> in order to add new languages</p>
- </div>
diff --git a/h-source/Template/Desktop/Home/left_es.php b/h-source/Template/Desktop/Home/left_es.php
deleted file mode 100644
index 71f4ad0..0000000
--- a/h-source/Template/Desktop/Home/left_es.php
+++ /dev/null
@@ -1,38 +0,0 @@
-<?php if (!defined('EG')) die('Direct access not allowed!'); ?>
-
-<?php
-// h-source, a web software to build a community of people that want to share their hardware information.
-// Copyright (C) 2010 Antonio Gallo (h-source-copyright.txt)
-//
-// This file is part of h-source
-//
-// h-source is free software: you can redistribute it and/or modify
-// it under the terms of the GNU General Public License as published by
-// the Free Software Foundation, either version 3 of the License, or
-// (at your option) any later version.
-//
-// h-source is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License
-// along with h-source. If not, see <http://www.gnu.org/licenses/>.
-?>
-
- <div id="left">
-
- <div class="position_tree_box">
- Home
- </div>
-
- <?php echo $htmlNewsBox;?>
-
- <p>¡¡funciona!!</p>
-
- <p>modifique el archivo <b>Template/Desktop/left.php</b> para lograr cambiar la versión en inglés de su página de inicio</p>
-
- <p>modifique el archivo <b>Application/Include/languages.php</b> para agregar nuevos idiomas</p>
-
-
- </div>
diff --git a/h-source/Template/Desktop/Home/left_fr.php b/h-source/Template/Desktop/Home/left_fr.php
deleted file mode 100644
index c69674d..0000000
--- a/h-source/Template/Desktop/Home/left_fr.php
+++ /dev/null
@@ -1,32 +0,0 @@
-<?php if (!defined('EG')) die('Direct access not allowed!'); ?>
-
-<?php
-// h-source, a web software to build a community of people that want to share their hardware information.
-// Copyright (C) 2010 Antonio Gallo (h-source-copyright.txt)
-//
-// This file is part of h-source
-//
-// h-source is free software: you can redistribute it and/or modify
-// it under the terms of the GNU General Public License as published by
-// the Free Software Foundation, either version 3 of the License, or
-// (at your option) any later version.
-//
-// h-source is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License
-// along with h-source. If not, see <http://www.gnu.org/licenses/>.
-?>
-
- <div id="left">
-
- <div class="position_tree_box">
- Home
- </div>
-
- <?php echo $htmlNewsBox;?>
-
-
- </div>
diff --git a/h-source/Template/Desktop/Home/left_it.php b/h-source/Template/Desktop/Home/left_it.php
deleted file mode 100644
index c69674d..0000000
--- a/h-source/Template/Desktop/Home/left_it.php
+++ /dev/null
@@ -1,32 +0,0 @@
-<?php if (!defined('EG')) die('Direct access not allowed!'); ?>
-
-<?php
-// h-source, a web software to build a community of people that want to share their hardware information.
-// Copyright (C) 2010 Antonio Gallo (h-source-copyright.txt)
-//
-// This file is part of h-source
-//
-// h-source is free software: you can redistribute it and/or modify
-// it under the terms of the GNU General Public License as published by
-// the Free Software Foundation, either version 3 of the License, or
-// (at your option) any later version.
-//
-// h-source is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License
-// along with h-source. If not, see <http://www.gnu.org/licenses/>.
-?>
-
- <div id="left">
-
- <div class="position_tree_box">
- Home
- </div>
-
- <?php echo $htmlNewsBox;?>
-
-
- </div>
diff --git a/h-source/Template/Desktop/Project/index.php b/h-source/Template/Desktop/Project/index.php
deleted file mode 100644
index e4d44c5..0000000
--- a/h-source/Template/Desktop/Project/index.php
+++ /dev/null
@@ -1,31 +0,0 @@
-<?php if (!defined('EG')) die('Direct access not allowed!'); ?>
-
-<?php
-// h-source, a web software to build a community of people that want to share their hardware information.
-// Copyright (C) 2010 Antonio Gallo (h-source-copyright.txt)
-//
-// This file is part of h-source
-//
-// h-source is free software: you can redistribute it and/or modify
-// it under the terms of the GNU General Public License as published by
-// the Free Software Foundation, either version 3 of the License, or
-// (at your option) any later version.
-//
-// h-source is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License
-// along with h-source. If not, see <http://www.gnu.org/licenses/>.
-?>
-
- <div id="left">
-
- <div class="position_tree_box">
- <a href="<?php echo $this->baseUrl."/home/index/$lang";?>">Home</a> &raquo; h-project
- </div>
-
- <p>write in the file <b>Template/Desktop/Project/index.php</b> your project information</p>
-
- </div>
diff --git a/h-source/Template/Desktop/Project/index_es.php b/h-source/Template/Desktop/Project/index_es.php
deleted file mode 100644
index d46fa19..0000000
--- a/h-source/Template/Desktop/Project/index_es.php
+++ /dev/null
@@ -1,31 +0,0 @@
-<?php if (!defined('EG')) die('Direct access not allowed!'); ?>
-
-<?php
-// h-source, a web software to build a community of people that want to share their hardware information.
-// Copyright (C) 2010 Antonio Gallo (h-source-copyright.txt)
-//
-// This file is part of h-source
-//
-// h-source is free software: you can redistribute it and/or modify
-// it under the terms of the GNU General Public License as published by
-// the Free Software Foundation, either version 3 of the License, or
-// (at your option) any later version.
-//
-// h-source is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License
-// along with h-source. If not, see <http://www.gnu.org/licenses/>.
-?>
-
- <div id="left">
-
- <div class="position_tree_box">
- <a href="<?php echo $this->baseUrl."/home/index/$lang";?>">Home</a> &raquo; h-project
- </div>
-
-
-
- </div>
diff --git a/h-source/Template/Desktop/Project/index_it.php b/h-source/Template/Desktop/Project/index_it.php
deleted file mode 100644
index d46fa19..0000000
--- a/h-source/Template/Desktop/Project/index_it.php
+++ /dev/null
@@ -1,31 +0,0 @@
-<?php if (!defined('EG')) die('Direct access not allowed!'); ?>
-
-<?php
-// h-source, a web software to build a community of people that want to share their hardware information.
-// Copyright (C) 2010 Antonio Gallo (h-source-copyright.txt)
-//
-// This file is part of h-source
-//
-// h-source is free software: you can redistribute it and/or modify
-// it under the terms of the GNU General Public License as published by
-// the Free Software Foundation, either version 3 of the License, or
-// (at your option) any later version.
-//
-// h-source is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License
-// along with h-source. If not, see <http://www.gnu.org/licenses/>.
-?>
-
- <div id="left">
-
- <div class="position_tree_box">
- <a href="<?php echo $this->baseUrl."/home/index/$lang";?>">Home</a> &raquo; h-project
- </div>
-
-
-
- </div>
diff --git a/h-source/Template/Mobile/Home/left.php b/h-source/Template/Mobile/Home/left.php
deleted file mode 100644
index 33cb671..0000000
--- a/h-source/Template/Mobile/Home/left.php
+++ /dev/null
@@ -1,36 +0,0 @@
-<?php if (!defined('EG')) die('Direct access not allowed!'); ?>
-
-<?php
-// h-source, a web software to build a community of people that want to share their hardware information.
-// Copyright (C) 2010 Antonio Gallo (h-source-copyright.txt)
-//
-// This file is part of h-source
-//
-// h-source is free software: you can redistribute it and/or modify
-// it under the terms of the GNU General Public License as published by
-// the Free Software Foundation, either version 3 of the License, or
-// (at your option) any later version.
-//
-// h-source is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License
-// along with h-source. If not, see <http://www.gnu.org/licenses/>.
-?>
-
- <div data-role="content">
-
- <div class="position_tree_box">
- Home
- </div>
-
- <?php echo $htmlNewsBox;?>
-
- <p>it works!!</p>
-
- <p>modify the file <b>Template/Mobile/left.php</b> in order to change the english version of your homepage</p>
-
- <p>modify the file <b>Application/Include/languages.php</b> in order to add new languages</p>
- </div>
diff --git a/h-source/Template/Mobile/Home/left_es.php b/h-source/Template/Mobile/Home/left_es.php
deleted file mode 100644
index 1c961e8..0000000
--- a/h-source/Template/Mobile/Home/left_es.php
+++ /dev/null
@@ -1,33 +0,0 @@
-<?php if (!defined('EG')) die('Direct access not allowed!'); ?>
-
-<?php
-// h-source, a web software to build a community of people that want to share their hardware information.
-// Copyright (C) 2010 Antonio Gallo (h-source-copyright.txt)
-//
-// This file is part of h-source
-//
-// h-source is free software: you can redistribute it and/or modify
-// it under the terms of the GNU General Public License as published by
-// the Free Software Foundation, either version 3 of the License, or
-// (at your option) any later version.
-//
-// h-source is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License
-// along with h-source. If not, see <http://www.gnu.org/licenses/>.
-?>
-
- <div data-role="content">
-
- <div class="position_tree_box">
- Home
- </div>
-
- <?php echo $htmlNewsBox;?>
-
-
-
- </div>
diff --git a/h-source/Template/Mobile/Home/left_fr.php b/h-source/Template/Mobile/Home/left_fr.php
deleted file mode 100644
index 7b53682..0000000
--- a/h-source/Template/Mobile/Home/left_fr.php
+++ /dev/null
@@ -1,32 +0,0 @@
-<?php if (!defined('EG')) die('Direct access not allowed!'); ?>
-
-<?php
-// h-source, a web software to build a community of people that want to share their hardware information.
-// Copyright (C) 2010 Antonio Gallo (h-source-copyright.txt)
-//
-// This file is part of h-source
-//
-// h-source is free software: you can redistribute it and/or modify
-// it under the terms of the GNU General Public License as published by
-// the Free Software Foundation, either version 3 of the License, or
-// (at your option) any later version.
-//
-// h-source is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License
-// along with h-source. If not, see <http://www.gnu.org/licenses/>.
-?>
-
- <div data-role="content">
-
- <div class="position_tree_box">
- Home
- </div>
-
- <?php echo $htmlNewsBox;?>
-
-
- </div>
diff --git a/h-source/Template/Mobile/Home/left_it.php b/h-source/Template/Mobile/Home/left_it.php
deleted file mode 100644
index 7b53682..0000000
--- a/h-source/Template/Mobile/Home/left_it.php
+++ /dev/null
@@ -1,32 +0,0 @@
-<?php if (!defined('EG')) die('Direct access not allowed!'); ?>
-
-<?php
-// h-source, a web software to build a community of people that want to share their hardware information.
-// Copyright (C) 2010 Antonio Gallo (h-source-copyright.txt)
-//
-// This file is part of h-source
-//
-// h-source is free software: you can redistribute it and/or modify
-// it under the terms of the GNU General Public License as published by
-// the Free Software Foundation, either version 3 of the License, or
-// (at your option) any later version.
-//
-// h-source is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License
-// along with h-source. If not, see <http://www.gnu.org/licenses/>.
-?>
-
- <div data-role="content">
-
- <div class="position_tree_box">
- Home
- </div>
-
- <?php echo $htmlNewsBox;?>
-
-
- </div>
diff --git a/h-source/Template/Mobile/Project/index_es.php b/h-source/Template/Mobile/Project/index_es.php
deleted file mode 100644
index 02a4c27..0000000
--- a/h-source/Template/Mobile/Project/index_es.php
+++ /dev/null
@@ -1,31 +0,0 @@
-<?php if (!defined('EG')) die('Direct access not allowed!'); ?>
-
-<?php
-// h-source, a web software to build a community of people that want to share their hardware information.
-// Copyright (C) 2010 Antonio Gallo (h-source-copyright.txt)
-//
-// This file is part of h-source
-//
-// h-source is free software: you can redistribute it and/or modify
-// it under the terms of the GNU General Public License as published by
-// the Free Software Foundation, either version 3 of the License, or
-// (at your option) any later version.
-//
-// h-source is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License
-// along with h-source. If not, see <http://www.gnu.org/licenses/>.
-?>
-
- <div data-role="content">
-
- <div class="position_tree_box">
- <a href="<?php echo $this->baseUrl."/home/index/$lang";?>">Home</a> &raquo; h-project
- </div>
-
-
-
- </div>
diff --git a/h-source/Template/Mobile/Project/index_it.php b/h-source/Template/Mobile/Project/index_it.php
deleted file mode 100644
index 02a4c27..0000000
--- a/h-source/Template/Mobile/Project/index_it.php
+++ /dev/null
@@ -1,31 +0,0 @@
-<?php if (!defined('EG')) die('Direct access not allowed!'); ?>
-
-<?php
-// h-source, a web software to build a community of people that want to share their hardware information.
-// Copyright (C) 2010 Antonio Gallo (h-source-copyright.txt)
-//
-// This file is part of h-source
-//
-// h-source is free software: you can redistribute it and/or modify
-// it under the terms of the GNU General Public License as published by
-// the Free Software Foundation, either version 3 of the License, or
-// (at your option) any later version.
-//
-// h-source is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License
-// along with h-source. If not, see <http://www.gnu.org/licenses/>.
-?>
-
- <div data-role="content">
-
- <div class="position_tree_box">
- <a href="<?php echo $this->baseUrl."/home/index/$lang";?>">Home</a> &raquo; h-project
- </div>
-
-
-
- </div>
diff --git a/h-source/admin/.htaccess b/h-source/admin/.htaccess
new file mode 100755
index 0000000..d27d849
--- /dev/null
+++ b/h-source/admin/.htaccess
@@ -0,0 +1,9 @@
+# <IfModule mod_rewrite.c>
+# Options +FollowSymlinks
+ RewriteEngine on
+ RewriteCond %{REQUEST_FILENAME} !-f
+ RewriteCond %{REQUEST_FILENAME} !-d
+ RewriteRule ^(.*)$ index.php?url=$1 [QSA,L]
+# </IfModule>
+
+
diff --git a/h-source/admin/Application/Controllers/AdminboxesController.php b/h-source/admin/Application/Controllers/AdminboxesController.php
new file mode 100644
index 0000000..65ba18c
--- /dev/null
+++ b/h-source/admin/Application/Controllers/AdminboxesController.php
@@ -0,0 +1,78 @@
+<?php
+
+// h-admin, a web software to build a community of people that want to share their hardware information.
+// Copyright (C) 2010 Antonio Gallo (h-admin-copyright.txt)
+//
+// This file is part of h-admin
+//
+// h-admin is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// h-admin is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with h-admin. If not, see <http://www.gnu.org/licenses/>.
+
+if (!defined('EG')) die('Direct access not allowed!');
+
+class AdminboxesController extends Controller {
+
+ function __construct($model, $controller, $queryString) {
+ parent::__construct($model, $controller, $queryString);
+
+ $this->load('header_back');
+ $this->load('footer_back','last');
+
+ $this->session('admin');
+ $this->model('BoxesModel');
+
+ $this->modelName = 'BoxesModel';
+
+ $this->m['BoxesModel']->setFields('title,message','sanitizeAll');
+
+ $this->setArgKeys(array('page:forceNat'=>1,'token:sanitizeAll'=>'token'));
+ }
+
+ public function main()
+ {
+ $this->shift();
+
+ $this->s['admin']->check();
+
+ if (!$this->s['admin']->checkCsrf($this->viewArgs['token'])) $this->redirect('panel/main/',2,'wrong token..');
+
+ $this->loadScaffold('main');
+
+ $this->scaffold->loadMain('boxes:id_box,boxes:title,smartDate|boxes:creation_date','boxes:id_box','edit,del');
+ $this->scaffold->setHead('NEWS ID,TITLE,DATE');
+ $this->scaffold->update('del');
+ $data['scaffold'] = $this->scaffold->render();
+ $this->append($data);
+ $this->load('main');
+ }
+
+ public function form($queryType = 'insert')
+ {
+ $this->shift(1);
+
+ $this->s['admin']->check();
+
+ if (!$this->s['admin']->checkCsrf($this->viewArgs['token'])) $this->redirect('panel/main/',2,'wrong token..');
+
+ $this->m['BoxesModel']->updateTable('insert,update');
+
+ $this->loadScaffold('form');
+ $this->scaffold->loadForm($queryType,"adminboxes/form/$queryType");
+ $this->scaffold->getFormValues('sanitizeHtml');
+ $data['scaffold'] = $this->scaffold->render();
+
+ $this->append($data);
+ $this->load('main');
+ }
+
+} \ No newline at end of file
diff --git a/h-source/admin/Application/Controllers/AdmindeletionController.php b/h-source/admin/Application/Controllers/AdmindeletionController.php
new file mode 100644
index 0000000..d5ee6fc
--- /dev/null
+++ b/h-source/admin/Application/Controllers/AdmindeletionController.php
@@ -0,0 +1,66 @@
+<?php
+
+// h-admin, a web software to build a community of people that want to share their hardware information.
+// Copyright (C) 2010 Antonio Gallo (h-admin-copyright.txt)
+//
+// This file is part of h-admin
+//
+// h-admin is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// h-admin is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with h-admin. If not, see <http://www.gnu.org/licenses/>.
+
+if (!defined('EG')) die('Direct access not allowed!');
+
+class AdmindeletionController extends Controller {
+
+ function __construct($model, $controller, $queryString) {
+ parent::__construct($model, $controller, $queryString);
+
+ $this->load('header_back');
+ $this->load('footer_back','last');
+
+ $this->session('admin');
+ $this->model('DeletionModel');
+
+ $this->modelName = 'DeletionModel';
+
+// $this->m['DeletionModel']->setFields('object,topic,status,priority,message,notice','sanitizeAll');
+
+ $this->setArgKeys(array('page:forceNat'=>1,'object:sanitizeAll'=>'undef','token:sanitizeAll'=>'token'));
+ }
+
+ public function main()
+ {
+ $this->shift();
+
+ Params::$nullQueryValue = 'undef';
+
+ $this->s['admin']->check();
+
+ if (!$this->s['admin']->checkCsrf($this->viewArgs['token'])) $this->redirect('panel/main/',2,'wrong token..');
+
+ $this->loadScaffold('main',array('popup'=>true,'popupType'=>'inclusive','mainMenu'=>'panel','recordPerPage'=>30));
+
+ $whereClauseArray = array(
+ 'object' => $this->viewArgs['object'],
+ );
+ $this->scaffold->setWhereQueryClause($whereClauseArray);
+
+ $this->scaffold->loadMain('deletion:id_del,deletion:object,deletion:id_duplicate,deletion:id_hard,getUserName|deletion:created_by,smartDate|deletion:creation_date','deletion:id_del','');
+ $this->scaffold->setHead('DEL ID,OBJECT,DUPLICATED,HARDWARE ID,CREATED BY,DATE');
+ $this->scaffold->update('del');
+ $data['scaffold'] = $this->scaffold->render();
+ $this->append($data);
+ $this->load('main');
+ }
+
+} \ No newline at end of file
diff --git a/h-source/admin/Application/Controllers/AdminhardwareController.php b/h-source/admin/Application/Controllers/AdminhardwareController.php
new file mode 100644
index 0000000..c02a4c2
--- /dev/null
+++ b/h-source/admin/Application/Controllers/AdminhardwareController.php
@@ -0,0 +1,121 @@
+<?php
+
+// h-admin, a web software to build a community of people that want to share their hardware information.
+// Copyright (C) 2010 Antonio Gallo (h-admin-copyright.txt)
+//
+// This file is part of h-admin
+//
+// h-admin is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// h-admin is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with h-admin. If not, see <http://www.gnu.org/licenses/>.
+
+if (!defined('EG')) die('Direct access not allowed!');
+
+class AdminhardwareController extends Controller
+{
+
+ function __construct($model, $controller, $queryString)
+ {
+ parent::__construct($model, $controller, $queryString);
+
+ $this->load('header_back');
+ $this->load('footer_back','last');
+
+ $this->session('admin');
+ $this->model('HardwareModel');
+ $this->model('DeletionModel');
+
+ $this->modelName = 'HardwareModel';
+
+ $this->m['HardwareModel']->setFields('deleted','sanitizeAll');
+
+ $this->setArgKeys(array('page:forceNat'=>1,'type:sanitizeAll'=>'undef','ask_for_del:sanitizeAll'=>'undef','-deleted:sanitizeAll'=>'undef','token:sanitizeAll'=>'token'));
+ }
+
+ public function main()
+ {
+ $this->shift();
+
+ Params::$nullQueryValue = 'undef';
+
+ $this->s['admin']->check();
+
+ if (!$this->s['admin']->checkCsrf($this->viewArgs['token'])) $this->redirect('panel/main/',2,'wrong token..');
+
+ $this->loadScaffold('main',array('popup'=>true,'popupType'=>'inclusive','mainMenu'=>'panel','recordPerPage'=>30));
+
+ $whereClauseArray = array(
+ 'type' => $this->viewArgs['type'],
+ 'ask_for_del' => $this->viewArgs['ask_for_del'],
+ '-deleted' => $this->viewArgs['-deleted'],
+ );
+ $this->scaffold->setWhereQueryClause($whereClauseArray);
+
+ $this->scaffold->loadMain('hardware:id_hard,hardware:model,hardware:type,getUserName|hardware:created_by,getUserName|hardware:updated_by,smartDate|hardware:creation_date,smartDate|hardware:update_date,hardware:ask_for_del,hardware:deleted','hardware:id_hard','edit');
+
+ $this->scaffold->addItem('simpleLink','adminhardware/ask/;hardware:id_hard;',null,'who asked for deletion');
+ $this->scaffold->setHead('HARD ID,MODEL,TYPE,CREATED BY,UPDATED BY,CREATION DATE,UPDATE DATE,ASK FOR DEL?,DELETED?,EDIT,VIEW');
+ $data['scaffold'] = $this->scaffold->render();
+ $this->append($data);
+ $this->load('main');
+ }
+
+ public function ask($id_hard = 0)
+ {
+ $this->shift(1);
+
+ $this->s['admin']->check();
+
+ if (!$this->s['admin']->checkCsrf($this->viewArgs['token'])) $this->redirect('panel/main/',2,'wrong token..');
+
+ $clean['id_hard'] = (int)$id_hard;
+
+ $this->helper('Menu','adminhardware','panel');
+ $this->h['Menu']->links['back']['text'] = 'Back';
+ $this->h['Menu']->links['back']['url'] = 'main';
+
+ $data["table"] = $this->m['DeletionModel']->select()->where(array("id_hard"=>$clean['id_hard']))->orderBy("id_del desc")->send();
+
+ $data['menu'] = $this->h['Menu']->render('panel,back');
+
+ $this->append($data);
+ $this->load('ask');
+
+ }
+
+ public function form($queryType = 'update')
+ {
+ $this->shift(1);
+
+ $this->s['admin']->check();
+
+ if (!$this->s['admin']->checkCsrf($this->viewArgs['token'])) $this->redirect('panel/main/',2,'wrong token..');
+
+ if (isset($_POST['updateAction']))
+ {
+ $clean['id_hard'] = $this->request->post('id_hard',0,'forceInt');
+ $clean['deleted'] = $this->request->post('deleted',0,'sanitizeAll');
+
+ $this->m['HardwareModel']->db->update('hardware','deleted',array($clean['deleted']),'id_hard='.$clean['id_hard']);
+
+ }
+
+ $this->loadScaffold('form');
+ $this->scaffold->loadForm($queryType,"adminhardware/form/$queryType");
+ $this->scaffold->getFormValues('sanitizeHtml');
+ $data['scaffold'] = $this->scaffold->render();
+
+ $this->append($data);
+ $this->load('main');
+ }
+
+} \ No newline at end of file
diff --git a/h-source/admin/Application/Controllers/AdminhistoryController.php b/h-source/admin/Application/Controllers/AdminhistoryController.php
new file mode 100644
index 0000000..849e432
--- /dev/null
+++ b/h-source/admin/Application/Controllers/AdminhistoryController.php
@@ -0,0 +1,68 @@
+<?php
+
+// h-admin, a web software to build a community of people that want to share their hardware information.
+// Copyright (C) 2010 Antonio Gallo (h-admin-copyright.txt)
+//
+// This file is part of h-admin
+//
+// h-admin is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// h-admin is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with h-admin. If not, see <http://www.gnu.org/licenses/>.
+
+if (!defined('EG')) die('Direct access not allowed!');
+
+class AdminhistoryController extends Controller
+{
+
+ function __construct($model, $controller, $queryString)
+ {
+ parent::__construct($model, $controller, $queryString);
+
+ $this->load('header_back');
+ $this->load('footer_back','last');
+
+ $this->session('admin');
+ $this->model('HistoryModel');
+
+ $this->modelName = 'HistoryModel';
+
+ $this->setArgKeys(array('page:forceNat'=>1,'type:sanitizeAll'=>'undef','action:sanitizeAll'=>'undef','created_by:sanitizeAll'=>'undef','token:sanitizeAll'=>'token'));
+ }
+
+ public function main()
+ {
+ $this->shift();
+
+ Params::$nullQueryValue = 'undef';
+
+ $this->s['admin']->check();
+
+ if (!$this->s['admin']->checkCsrf($this->viewArgs['token'])) $this->redirect('panel/main/',2,'wrong token..');
+
+ $this->loadScaffold('main',array('popup'=>true,'popupType'=>'inclusive','mainMenu'=>'panel','recordPerPage'=>30));
+
+ $whereClauseArray = array(
+ 'type' => $this->viewArgs['type'],
+ 'action' => $this->viewArgs['action'],
+ 'created_by'=> $this->viewArgs['created_by'],
+ 'gr' => '!="registered"',
+ );
+ $this->scaffold->setWhereQueryClause($whereClauseArray);
+ $this->scaffold->model->orderBy('id_history desc');
+ $this->scaffold->loadMain('history:id_history,history:type,history:action,getUserName|history:created_by,history:id,smartDate|history:creation_date,history:gr,history:message','history:id_history','');
+ $this->scaffold->setHead('HISTORY ID,TYPE,ACTION,CREATED BY,OBJECT ID,CREATION DATE,GROUP,MESSAGE');
+ $data['scaffold'] = $this->scaffold->render();
+ $this->append($data);
+ $this->load('main');
+ }
+
+} \ No newline at end of file
diff --git a/h-source/admin/Application/Controllers/AdminissuesController.php b/h-source/admin/Application/Controllers/AdminissuesController.php
new file mode 100644
index 0000000..476b69c
--- /dev/null
+++ b/h-source/admin/Application/Controllers/AdminissuesController.php
@@ -0,0 +1,88 @@
+<?php
+
+// h-admin, a web software to build a community of people that want to share their hardware information.
+// Copyright (C) 2010 Antonio Gallo (h-admin-copyright.txt)
+//
+// This file is part of h-admin
+//
+// h-admin is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// h-admin is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with h-admin. If not, see <http://www.gnu.org/licenses/>.
+
+if (!defined('EG')) die('Direct access not allowed!');
+
+class AdminissuesController extends Controller {
+
+ function __construct($model, $controller, $queryString) {
+ parent::__construct($model, $controller, $queryString);
+
+ $this->load('header_back');
+ $this->load('footer_back','last');
+
+ $this->session('admin');
+ $this->model('IssuesModel');
+
+ $this->modelName = 'IssuesModel';
+
+ $this->m['IssuesModel']->setFields('deleted,status','sanitizeAll');
+
+ $this->setArgKeys(array('page:forceNat'=>1,'priority:sanitizeAll'=>'undef','status:sanitizeAll'=>'undef','topic:sanitizeAll'=>'undef','deleted:sanitizeAll'=>'undef','token:sanitizeAll'=>'token'));
+ }
+
+ public function main()
+ {
+ $this->shift();
+
+ Params::$nullQueryValue = 'undef';
+
+ $this->s['admin']->check();
+
+ if (!$this->s['admin']->checkCsrf($this->viewArgs['token'])) $this->redirect('panel/main/',2,'wrong token..');
+
+ $this->loadScaffold('main',array('popup'=>true,'popupType'=>'inclusive'));
+
+ $whereClauseArray = array(
+ 'priority' => $this->viewArgs['priority'],
+ 'status' => $this->viewArgs['status'],
+ 'topic' => $this->viewArgs['topic'],
+ 'deleted' => $this->viewArgs['deleted'],
+ );
+ $this->scaffold->setWhereQueryClause($whereClauseArray);
+
+ $this->scaffold->loadMain('issues:id_issue,issues:title,issues:topic,getUserName|issues:created_by,issues:priority,issues:status,smartDate|issues:creation_date,issues:deleted','issues:id_issue','edit,del');
+ $this->scaffold->setHead('ISSUE ID,TITLE,TOPIC,CREATED BY,PRIORITY,STATUS,DATE');
+ $this->scaffold->update('del');
+ $data['scaffold'] = $this->scaffold->render();
+ $this->append($data);
+ $this->load('main');
+ }
+
+ public function form($queryType = 'insert')
+ {
+ $this->shift(1);
+
+ $this->s['admin']->check();
+
+ if (!$this->s['admin']->checkCsrf($this->viewArgs['token'])) $this->redirect('panel/main/',2,'wrong token..');
+
+ $this->m['IssuesModel']->updateTable('insert,update');
+
+ $this->loadScaffold('form');
+ $this->scaffold->loadForm($queryType,"adminissues/form/$queryType");
+ $this->scaffold->getFormValues('sanitizeHtml');
+ $data['scaffold'] = $this->scaffold->render();
+
+ $this->append($data);
+ $this->load('main');
+ }
+
+} \ No newline at end of file
diff --git a/h-source/admin/Application/Controllers/AdminmessagesController.php b/h-source/admin/Application/Controllers/AdminmessagesController.php
new file mode 100644
index 0000000..5a979c4
--- /dev/null
+++ b/h-source/admin/Application/Controllers/AdminmessagesController.php
@@ -0,0 +1,86 @@
+<?php
+
+// h-admin, a web software to build a community of people that want to share their hardware information.
+// Copyright (C) 2010 Antonio Gallo (h-admin-copyright.txt)
+//
+// This file is part of h-admin
+//
+// h-admin is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// h-admin is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with h-admin. If not, see <http://www.gnu.org/licenses/>.
+
+if (!defined('EG')) die('Direct access not allowed!');
+
+class AdminmessagesController extends Controller {
+
+ function __construct($model, $controller, $queryString) {
+ parent::__construct($model, $controller, $queryString);
+
+ $this->load('header_back');
+ $this->load('footer_back','last');
+
+ $this->session('admin');
+ $this->model('MessagesModel');
+
+ $this->modelName = 'MessagesModel';
+
+ $this->m['MessagesModel']->setFields('deleted,has_read','sanitizeAll');
+
+ $this->setArgKeys(array('page:forceNat'=>1,'deleted:sanitizeAll'=>'undef','has_read:sanitizeAll'=>'undef','token:sanitizeAll'=>'token'));
+ }
+
+ public function main()
+ {
+ $this->shift();
+
+ Params::$nullQueryValue = 'undef';
+
+ $this->s['admin']->check();
+
+ if (!$this->s['admin']->checkCsrf($this->viewArgs['token'])) $this->redirect('panel/main/',2,'wrong token..');
+
+ $this->loadScaffold('main',array('popup'=>true,'popupType'=>'inclusive','recordPerPage'=>20));
+
+ $whereClauseArray = array(
+ 'deleted' => $this->viewArgs['deleted'],
+ 'has_read' => $this->viewArgs['has_read'],
+ );
+ $this->scaffold->setWhereQueryClause($whereClauseArray);
+ $this->scaffold->model->orderBy = "id_mes desc";
+
+ $this->scaffold->loadMain('messages:id_mes,messages:id_issue,getUserName|messages:created_by,smartDate|messages:creation_date,messages:deleted,messages:has_read','messages:id_mes','edit');
+ $this->scaffold->setHead('MESSAGE ID,ISSUE ID,CREATED BY,DATE,DELETED?,ALREADY READ?');
+ $data['scaffold'] = $this->scaffold->render();
+ $this->append($data);
+ $this->load('main');
+ }
+
+ public function form($queryType = 'insert')
+ {
+ $this->shift(1);
+
+ $this->s['admin']->check();
+
+ if (!$this->s['admin']->checkCsrf($this->viewArgs['token'])) $this->redirect('panel/main/',2,'wrong token..');
+
+ $this->m['MessagesModel']->updateTable('insert,update');
+
+ $this->loadScaffold('form');
+ $this->scaffold->loadForm($queryType,"adminmessages/form/$queryType");
+ $this->scaffold->getFormValues('sanitizeHtml');
+ $data['scaffold'] = $this->scaffold->render();
+
+ $this->append($data);
+ $this->load('main');
+ }
+
+} \ No newline at end of file
diff --git a/h-source/admin/Application/Controllers/AdminnewsController.php b/h-source/admin/Application/Controllers/AdminnewsController.php
new file mode 100644
index 0000000..d722ffe
--- /dev/null
+++ b/h-source/admin/Application/Controllers/AdminnewsController.php
@@ -0,0 +1,78 @@
+<?php
+
+// h-admin, a web software to build a community of people that want to share their hardware information.
+// Copyright (C) 2010 Antonio Gallo (h-admin-copyright.txt)
+//
+// This file is part of h-admin
+//
+// h-admin is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// h-admin is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with h-admin. If not, see <http://www.gnu.org/licenses/>.
+
+if (!defined('EG')) die('Direct access not allowed!');
+
+class AdminnewsController extends Controller {
+
+ function __construct($model, $controller, $queryString) {
+ parent::__construct($model, $controller, $queryString);
+
+ $this->load('header_back');
+ $this->load('footer_back','last');
+
+ $this->session('admin');
+ $this->model('NewsModel');
+
+ $this->modelName = 'NewsModel';
+
+ $this->m['NewsModel']->setFields('title,message','sanitizeAll');
+
+ $this->setArgKeys(array('page:forceNat'=>1,'token:sanitizeAll'=>'token'));
+ }
+
+ public function main()
+ {
+ $this->shift();
+
+ $this->s['admin']->check();
+
+ if (!$this->s['admin']->checkCsrf($this->viewArgs['token'])) $this->redirect('panel/main/',2,'wrong token..');
+
+ $this->loadScaffold('main');
+
+ $this->scaffold->loadMain('news:id_news,news:title,smartDate|news:creation_date','news:id_news','edit,del');
+ $this->scaffold->setHead('NEWS ID,TITLE,DATE');
+ $this->scaffold->update('del');
+ $data['scaffold'] = $this->scaffold->render();
+ $this->append($data);
+ $this->load('main');
+ }
+
+ public function form($queryType = 'insert')
+ {
+ $this->shift(1);
+
+ $this->s['admin']->check();
+
+ if (!$this->s['admin']->checkCsrf($this->viewArgs['token'])) $this->redirect('panel/main/',2,'wrong token..');
+
+ $this->m['NewsModel']->updateTable('insert,update');
+
+ $this->loadScaffold('form');
+ $this->scaffold->loadForm($queryType,"adminnews/form/$queryType");
+ $this->scaffold->getFormValues('sanitizeHtml');
+ $data['scaffold'] = $this->scaffold->render();
+
+ $this->append($data);
+ $this->load('main');
+ }
+
+} \ No newline at end of file
diff --git a/h-source/admin/Application/Controllers/AdminparamsController.php b/h-source/admin/Application/Controllers/AdminparamsController.php
new file mode 100644
index 0000000..62e58b6
--- /dev/null
+++ b/h-source/admin/Application/Controllers/AdminparamsController.php
@@ -0,0 +1,68 @@
+<?php
+
+// h-admin, a web software to build a community of people that want to share their hardware information.
+// Copyright (C) 2010 Antonio Gallo (h-admin-copyright.txt)
+//
+// This file is part of h-admin
+//
+// h-admin is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// h-admin is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with h-admin. If not, see <http://www.gnu.org/licenses/>.
+
+if (!defined('EG')) die('Direct access not allowed!');
+
+class AdminparamsController extends Controller {
+
+ function __construct($model, $controller, $queryString) {
+ parent::__construct($model, $controller, $queryString);
+
+ $this->load('header_back');
+ $this->load('footer_back','last');
+
+ $this->session('admin');
+ $this->model('ParamsModel');
+
+ $this->modelName = 'ParamsModel';
+
+ $this->m['ParamsModel']->setFields('updating,boxes_xml','sanitizeAll');
+
+ $this->setArgKeys(array('token:sanitizeAll'=>'token'));
+ }
+
+ public function form()
+ {
+ $this->shift();
+
+ $this->s['admin']->check();
+
+ if (!$this->s['admin']->checkCsrf($this->viewArgs['token'])) $this->redirect('panel/main/',2,'wrong token..');
+
+ $this->m['ParamsModel']->updateTable('update',1);
+ if ($this->m['ParamsModel']->queryResult)
+ {
+ if (strcmp($this->m['ParamsModel']->values['updating'],'yes') === 0)
+ {
+ $this->m['ParamsModel']->query("delete from regsessions;");
+ }
+ }
+// echo $this->m['ParamsModel']->getQuery();
+
+ $this->loadScaffold('form',array('formMenu'=>'panel'));
+ $this->scaffold->loadForm('update',"adminparams/form");
+ $this->scaffold->getFormValues('sanitizeHtml',1);
+ $data['scaffold'] = $this->scaffold->render();
+
+ $this->append($data);
+ $this->load('form');
+ }
+
+} \ No newline at end of file
diff --git a/h-source/admin/Application/Controllers/AdminpasswordController.php b/h-source/admin/Application/Controllers/AdminpasswordController.php
new file mode 100644
index 0000000..bcaca95
--- /dev/null
+++ b/h-source/admin/Application/Controllers/AdminpasswordController.php
@@ -0,0 +1,88 @@
+<?php
+
+// h-admin, a web software to build a community of people that want to share their hardware information.
+// Copyright (C) 2010 Antonio Gallo (h-admin-copyright.txt)
+//
+// This file is part of h-admin
+//
+// h-admin is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// h-admin is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with h-admin. If not, see <http://www.gnu.org/licenses/>.
+
+if (!defined('EG')) die('Direct access not allowed!');
+
+class AdminpasswordController extends Controller
+{
+
+ function __construct($model, $controller, $queryString)
+ {
+ parent::__construct($model, $controller, $queryString);
+
+ $this->load('header_back');
+ $this->load('footer_back','last');
+
+ $this->helper('Menu','users','panel/main');
+ $this->helper('Array');
+
+ $this->session('admin');
+ $this->model('AdminusersModel');
+
+ $this->m['AdminusersModel']->setFields('password:sha1','none');
+
+ $this->m['AdminusersModel']->strongConditions['update'] = array('checkEqual'=>'password,confirmation');
+ $this->m['AdminusersModel']->strongConditions['insert'] = array('checkEqual'=>'password,confirmation');
+
+ $this->m['AdminusersModel']->identifierName = 'id_user';
+
+ $this->setArgKeys(array('token:sanitizeAll'=>'token'));
+ }
+
+ public function form()
+ {
+ $this->shift(0);
+
+ $this->s['admin']->check();
+
+ if (!$this->s['admin']->checkCsrf($this->viewArgs['token'])) $this->redirect('panel/main/',2,'wrong token..');
+
+ $data['notice'] = null;
+
+ $id = (int)$this->s['admin']->status['id_user'];
+ if (isset($_POST['updateAction'])) {
+ $pass = $this->s['admin']->getPassword();
+ if (sha1($_POST['old']) === $pass)
+ {
+ $this->m['AdminusersModel']->updateTable('update',$id);
+ $data['notice'] = $this->m['AdminusersModel']->notice;
+ }
+ else
+ {
+ $data['notice'] = "<div class='alert'>Vecchia password sbagliata</div>\n";
+ }
+ }
+ $data['menù'] = $this->h['Menu']->render('panel');
+
+ $values = $this->m['AdminusersModel']->selectId($id);
+
+ $action = array('updateAction'=>'save');
+ $form = new Form_Form('adminpassword/form'.$this->viewStatus,$action);
+ $form->setEntry('old','Password');
+ $form->entry['old']->labelString = 'old password:';
+ $form->setEntry('password','Password');
+ $form->setEntry('confirmation','Password');
+ $data['form'] = $form->render($values,'old,password,confirmation');
+
+ $this->append($data);
+ $this->load('form');
+ }
+
+} \ No newline at end of file
diff --git a/h-source/admin/Application/Controllers/AdminregusersController.php b/h-source/admin/Application/Controllers/AdminregusersController.php
new file mode 100644
index 0000000..b4ed6ed
--- /dev/null
+++ b/h-source/admin/Application/Controllers/AdminregusersController.php
@@ -0,0 +1,101 @@
+<?php
+
+// h-admin, a web software to build a community of people that want to share their hardware information.
+// Copyright (C) 2010 Antonio Gallo (h-admin-copyright.txt)
+//
+// This file is part of h-admin
+//
+// h-admin is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// h-admin is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with h-admin. If not, see <http://www.gnu.org/licenses/>.
+
+if (!defined('EG')) die('Direct access not allowed!');
+
+class AdminregusersController extends Controller {
+
+ function __construct($model, $controller, $queryString) {
+ parent::__construct($model, $controller, $queryString);
+
+ $this->load('header_back');
+ $this->load('footer_back','last');
+
+ $this->session('admin');
+ $this->model('UsersModel');
+
+ $this->modelName = 'UsersModel';
+
+ $this->helper('Menu','adminregusers','panel/main');
+
+// $this->m['UsersModel']->setFields('username,e_mail,has_confirmed,deleted,creation_date','sanitizeAll');
+
+ $this->setArgKeys(array('page:forceNat'=>1,'has_confirmed:sanitizeAll'=>'undef','deleted:sanitizeAll'=>'undef','id_group:sanitizeAll'=>'undef','token:sanitizeAll'=>'token'));
+ }
+
+ public function main()
+ {
+ $this->shift();
+
+ Params::$nullQueryValue = 'undef';
+
+ $this->s['admin']->check();
+
+ if (!$this->s['admin']->checkCsrf($this->viewArgs['token'])) $this->redirect('panel/main/',2,'wrong token..');
+
+ $this->loadScaffold('main',array('popup'=>true,'popupType'=>'inclusive','mainMenu'=>'panel','recordPerPage'=>30));
+
+ $whereClauseArray = array(
+ 'has_confirmed' => $this->viewArgs['has_confirmed'],
+ 'deleted' => $this->viewArgs['deleted'],
+ 'id_group' => $this->viewArgs['id_group'],
+ );
+ $this->scaffold->setWhereQueryClause($whereClauseArray);
+
+ $this->scaffold->loadMain('regusers:id_user,regusers:username,regusers:e_mail,regusers:has_confirmed,regusers:deleted,smartDate|regusers:creation_date','regusers:id_user','link');
+ $this->scaffold->setHead('USER ID,USERNAME,E-MAIL,HAS CONFIRMED?,DELETED?,DATE');
+ $data['scaffold'] = $this->scaffold->render();
+ $this->append($data);
+ $this->load('main');
+ }
+
+ public function associate()
+ {
+ $this->shift(0);
+
+ $this->s['admin']->check();
+
+ if (!$this->s['admin']->checkCsrf($this->viewArgs['token'])) $this->redirect('panel/main/',2,'wrong token..');
+
+ $this->m['UsersModel']->printAssError = 'yes';
+ $this->m['UsersModel']->updateTable('associate,dissociate');
+
+ $data['notice'] = $this->m['UsersModel']->notice;
+
+ $data['menu'] = $this->h['Menu']->render('back');
+
+ $data['action'] = $this->baseUrl.'/adminregusers/associate'.$this->viewStatus;
+
+ $data['groups'] = $this->m['UsersModel']->getFieldArray('reggroups:id_group','reggroups:name');
+
+ //get the name of the user whose id is $_POST['id_user']
+ $users = $this->m['UsersModel']->db->select('regusers','username','id_user='.(int)$_POST['id_user']);
+ $data['user'] = $users[0]['regusers']['username'];
+
+ //get the groups inside which the user is inserted
+ $this->m['UsersModel']->setWhereQueryClause(array('id_user'=>(int)$_POST['id_user']));
+ $this->m['UsersModel']->orderBy = 'reggroups.id_group desc';
+ $data['groupsUser'] = $this->m['UsersModel']->getAll('Boxes');
+// echo $this->m['UsersModel']->getQuery();
+
+ $this->set($data);
+ $this->load('associate');
+ }
+} \ No newline at end of file
diff --git a/h-source/admin/Application/Controllers/AdmintalkController.php b/h-source/admin/Application/Controllers/AdmintalkController.php
new file mode 100644
index 0000000..b91912a
--- /dev/null
+++ b/h-source/admin/Application/Controllers/AdmintalkController.php
@@ -0,0 +1,59 @@
+<?php
+
+// h-admin, a web software to build a community of people that want to share their hardware information.
+// Copyright (C) 2010 Antonio Gallo (h-admin-copyright.txt)
+//
+// This file is part of h-admin
+//
+// h-admin is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// h-admin is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with h-admin. If not, see <http://www.gnu.org/licenses/>.
+
+if (!defined('EG')) die('Direct access not allowed!');
+
+class AdmintalkController extends Controller {
+
+ function __construct($model, $controller, $queryString) {
+ parent::__construct($model, $controller, $queryString);
+
+ $this->load('header_back');
+ $this->load('footer_back','last');
+
+ $this->session('admin');
+ $this->model('TalkModel');
+
+ $this->modelName = 'TalkModel';
+
+ $this->m['TalkModel']->setFields('title,message','sanitizeAll');
+
+ $this->setArgKeys(array('page:forceNat'=>1,'token:sanitizeAll'=>'token'));
+ }
+
+ public function main()
+ {
+ $this->shift();
+
+ $this->s['admin']->check();
+
+ if (!$this->s['admin']->checkCsrf($this->viewArgs['token'])) $this->redirect('panel/main/',2,'wrong token..');
+
+ $this->loadScaffold('main',array('mainMenu'=>'panel'));
+
+ $this->scaffold->loadMain('talk:id_talk,talk:id_hard,talk:title,getUserName|talk:created_by,smartDate|talk:creation_date','talk:id_talk','del');
+ $this->scaffold->setHead('TALK ID,HARDWARE ID,TITLE,CREATED BY,DATE');
+ $this->scaffold->update('del');
+ $data['scaffold'] = $this->scaffold->render();
+ $this->append($data);
+ $this->load('main');
+ }
+
+} \ No newline at end of file
diff --git a/h-source/admin/Application/Controllers/AdminusersController.php b/h-source/admin/Application/Controllers/AdminusersController.php
new file mode 100644
index 0000000..0154c0c
--- /dev/null
+++ b/h-source/admin/Application/Controllers/AdminusersController.php
@@ -0,0 +1,200 @@
+<?php
+
+// h-admin, a web software to build a community of people that want to share their hardware information.
+// Copyright (C) 2010 Antonio Gallo (h-admin-copyright.txt)
+//
+// This file is part of h-admin
+//
+// h-admin is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// h-admin is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with h-admin. If not, see <http://www.gnu.org/licenses/>.
+
+if (!defined('EG')) die('Direct access not allowed!');
+
+class AdminusersController extends Controller
+{
+
+ function __construct($model, $controller, $queryString)
+ {
+ parent::__construct($model, $controller, $queryString);
+
+ $this->load('header_back');
+ $this->load('footer_back','last');
+
+ $this->helper('Menu','adminusers','panel/main');
+ $this->helper('Array');
+
+ $this->session('admin');
+ $this->model();
+
+ $this->m['AdminusersModel']->setFields('username:sanitizeAll,password:sha1','none');
+
+ $this->m['AdminusersModel']->strongConditions['update'] = array('checkAlphaNum'=>'username','checkEqual'=>'password,confirmation');
+ $this->m['AdminusersModel']->strongConditions['insert'] = array('checkAlphaNum'=>'username','checkEqual'=>'password,confirmation');
+
+ $this->m['AdminusersModel']->databaseConditions['insert'] = array('checkUnique'=>'username');
+ $this->m['AdminusersModel']->databaseConditions['update'] = array('checkUniqueCompl'=>'username');
+
+ $this->setArgKeys(array('page:forceNat'=>1,'id_group:forceInt'=>'0','token:sanitizeAll'=>'token'));
+ Params::$nullQueryValue = '0';
+ }
+
+ public function login()
+ {
+ $data['action'] = Url::getRoot('adminusers/login');
+ $data['notice'] = null;
+
+ $this->s['admin']->checkStatus();
+ if ($this->s['admin']->status['status']=='logged')
+ {
+ $this->s['admin']->redirect('logged');
+ }
+ if (isset($_POST['username']) and isset($_POST['password']))
+ {
+ $username = ctype_alnum($_POST['username']) ? sanitizeAll($_POST['username']) : '';
+ $choice = $this->s['admin']->login($username,$_POST['password']);
+
+ switch($choice)
+ {
+ case 'logged':
+ $this->redirect('panel/main',3,'You are already logged...');
+ break;
+ case 'accepted':
+ $this->redirect('panel/main',3,'Hi '.$this->s['admin']->status['user'].'...');
+ break;
+ case 'login-error':
+ $data['notice'] = '<div class="alert">Wrong username or password</div>';
+ break;
+ case 'wait':
+ $data['notice'] = '<div class="alert">You have to wait 5 seconds before you can try to login another time</div>';
+ break;
+ }
+ }
+ $this->set($data);
+ $this->load('login');
+ }
+
+ public function logout()
+ {
+ $res = $this->s['admin']->logout();
+ if ($res == 'not-logged') {
+ $data['notice'] = "<div class='alert'>You can't logout because you are not logged..</div>\n";
+
+ } else if ($res == 'was-logged') {
+ $data['notice'] = "<div class='executed'>Logout executed successfully!</div>\n";
+
+ } else if ($res == 'error') {
+
+ }
+
+ $data['login'] = Url::getRoot('adminusers/login');
+ $this->set($data);
+ $this->load('logout');
+ }
+
+ public function forceout($id)
+ {
+ $this->shift(1);
+
+ $this->s['admin']->check();
+ $data['menù'] = $this->h['Menu']->render('back');
+ $data['notice'] = null;
+ $id = (int)$id;
+ if (strcmp($this->s['admin']->status['id_user'],$id) !== 0)
+ {
+ if ($this->s['admin']->forceOut($id))
+ {
+ $data['notice'] = "<div class='executed'>User has been forced out..</div>\n";
+ }
+ else
+ {
+ $data['notice'] = "<div class='alert'>Error..</div>\n";
+ }
+ }
+
+ $this->set($data);
+ $this->load('forceout');
+ }
+
+ public function main()
+ {
+ $this->shift();
+
+ $this->s['admin']->check();
+
+ if (!$this->s['admin']->checkCsrf($this->viewArgs['token'])) $this->redirect('panel/main/',2,'wrong token..');
+
+ $this->loadScaffold('main',array('popup'=>false));
+ $this->scaffold->setWhereQueryClause(array('id_group'=>$this->viewArgs['id_group']));
+ $this->scaffold->loadMain('adminusers:id_user,adminusers:username','adminusers:id_user','edit,del');
+ $this->scaffold->addItem('simpleLink','adminusers/forceout/;adminusers:id_user;',null,'ForceOut');
+ $this->scaffold->update('del');
+ $data['scaffold'] = $this->scaffold->render();
+ $this->set($data);
+ $this->load('main');
+ }
+
+ public function form($queryType = 'insert')
+ {
+ $this->shift(1);
+
+ $this->s['admin']->check();
+
+ if (!$this->s['admin']->checkCsrf($this->viewArgs['token'])) $this->redirect('panel/main/',2,'wrong token..');
+
+ $this->m['AdminusersModel']->updateTable('insert,update');
+
+ $this->loadScaffold('form');
+ $this->scaffold->loadForm($queryType,"adminusers/form/$queryType");
+ $this->scaffold->getFormValues('sanitizeHtml');
+ $this->scaffold->setFormEntries('model',array('password'=>'Password'));
+ $this->scaffold->form->setEntry('confirmation','Password');
+ $data['scaffold'] = $this->scaffold->render(null,'username,password,confirmation,id_user');
+
+ $this->set($data);
+ $this->load('main');
+ }
+
+// public function associate()
+// {
+// $this->shift(0);
+//
+// $this->s['admin']->check();
+//
+// if (!$this->s['admin']->checkCsrf($this->viewArgs['token'])) $this->redirect('panel/main/',2,'wrong token..');
+//
+// $this->m['AdminusersModel']->printAssError = 'yes';
+// $this->m['AdminusersModel']->updateTable('associate,dissociate');
+//
+// $data['notice'] = $this->m['AdminusersModel']->notice;
+//
+// $data['menu'] = $this->h['Menu']->render('back');
+//
+// $data['action'] = $this->baseUrl.'/adminusers/associate'.$this->viewStatus;
+//
+// $data['groups'] = $this->m['AdminusersModel']->getFieldArray('admingroups:id_group','admingroups:name');
+//
+// //get the name of the user whose id is $_POST['id_user']
+// $users = $this->m['AdminusersModel']->db->select('adminusers','username','id_user='.(int)$_POST['id_user']);
+// $data['user'] = $users[0]['adminusers']['username'];
+//
+// //get the groups inside which the user is inserted
+// $this->m['AdminusersModel']->setWhereQueryClause(array('id_user'=>(int)$_POST['id_user']));
+// $this->m['AdminusersModel']->orderBy = 'admingroups.id_group desc';
+// $data['groupsUser'] = $this->m['AdminusersModel']->getAll('Boxes');
+// // echo $this->m['AdminusersModel']->getQuery();
+//
+// $this->set($data);
+// $this->load('associate');
+// }
+
+} \ No newline at end of file
diff --git a/h-source/admin/Application/Controllers/PanelController.php b/h-source/admin/Application/Controllers/PanelController.php
new file mode 100755
index 0000000..27eeacf
--- /dev/null
+++ b/h-source/admin/Application/Controllers/PanelController.php
@@ -0,0 +1,43 @@
+<?php
+
+// h-admin, a web software to build a community of people that want to share their hardware information.
+// Copyright (C) 2010 Antonio Gallo (h-admin-copyright.txt)
+//
+// This file is part of h-admin
+//
+// h-admin is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// h-admin is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with h-admin. If not, see <http://www.gnu.org/licenses/>.
+
+if (!defined('EG')) die('Direct access not allowed!');
+
+class PanelController extends Controller {
+
+ public function __construct($model, $controller, $queryString) {
+ parent::__construct($model, $controller, $queryString);
+ $this->session('admin');
+ $this->load('header_back');
+ $this->load('footer_back','last');
+ }
+
+ public function main()
+ {
+ $this->s['admin']->check();
+ $data['logged'] = $this->s['admin']->getUsersLogged();
+
+ $data['token'] = $this->s['admin']->status['token'];
+
+ $this->set($data);
+ $this->load('panel');
+ }
+
+} \ No newline at end of file
diff --git a/h-source/admin/Application/Hooks/AfterInitialization.php b/h-source/admin/Application/Hooks/AfterInitialization.php
new file mode 100644
index 0000000..a369309
--- /dev/null
+++ b/h-source/admin/Application/Hooks/AfterInitialization.php
@@ -0,0 +1,10 @@
+<?php
+
+// All EasyGiant code is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
+// See COPYRIGHT.txt and LICENSE.txt.
+
+if (!defined('EG')) die('Direct access not allowed!');
+
+//in this file you can write the PHP code that will be executed just after the controller initialization, after super global array have been sanitizied
+
+//you can access the whole set of classes of EasyGiant \ No newline at end of file
diff --git a/h-source/admin/Application/Hooks/BeforeChecks.php b/h-source/admin/Application/Hooks/BeforeChecks.php
new file mode 100644
index 0000000..03ee247
--- /dev/null
+++ b/h-source/admin/Application/Hooks/BeforeChecks.php
@@ -0,0 +1,16 @@
+<?php
+
+// All EasyGiant code is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
+// See COPYRIGHT.txt and LICENSE.txt.
+
+if (!defined('EG')) die('Direct access not allowed!');
+
+//in this file you can write the PHP code that will be executed at the beginning of the EasyGiant execution, before super global array have been sanitizied
+
+//this is the preferred place to create and fill log files
+
+//you can access the whole set of classes and functions of EasyGiant
+
+Params::$htmlentititiesCharset = "UTF-8";
+
+Params::$allowedSanitizeFunc .= ",sanitizeString,sanitizeAlphanum"; \ No newline at end of file
diff --git a/h-source/admin/Application/Hooks/BeforeInitialization.php b/h-source/admin/Application/Hooks/BeforeInitialization.php
new file mode 100644
index 0000000..6d1851b
--- /dev/null
+++ b/h-source/admin/Application/Hooks/BeforeInitialization.php
@@ -0,0 +1,10 @@
+<?php
+
+// All EasyGiant code is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
+// See COPYRIGHT.txt and LICENSE.txt.
+
+if (!defined('EG')) die('Direct access not allowed!');
+
+//in this file you can write the PHP code that will be executed just before the controller initialization, after super global array have been sanitizied
+
+//you can access the whole set of classes of EasyGiant \ No newline at end of file
diff --git a/h-source/admin/Application/Hooks/index.html b/h-source/admin/Application/Hooks/index.html
new file mode 100644
index 0000000..8d1c8b6
--- /dev/null
+++ b/h-source/admin/Application/Hooks/index.html
@@ -0,0 +1 @@
+
diff --git a/h-source/admin/Application/Include/distributions.php b/h-source/admin/Application/Include/distributions.php
new file mode 100644
index 0000000..294eac6
--- /dev/null
+++ b/h-source/admin/Application/Include/distributions.php
@@ -0,0 +1,88 @@
+<?php
+
+// h-admin, a web software to build a community of people that want to share their hardware information.
+// Copyright (C) 2010 Antonio Gallo (h-admin-copyright.txt)
+//
+// This file is part of h-admin
+//
+// h-admin is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// h-admin is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with h-admin. If not, see <http://www.gnu.org/licenses/>.
+
+if (!defined('EG')) die('Direct access not allowed!');
+
+class Distributions
+{
+
+ public static $allowed = array(
+ 'blag_90001' => 'BLAG 90001',
+ 'blag_120000' => 'BLAG 120000',
+ 'dragora_1_1' => 'Dragora 1.1',
+ 'dynebolic_2_5_2' => 'Dynebolic 2.5.2 DHORUBA',
+ 'gnewsense_2_3' => 'gNewSense 2.3 Deltah',
+ 'gnewsense_3_0' => 'gNewSense 3.0 Metad',
+ 'musix_2_0' => 'Musix GNU+Linux 2.0 R0',
+ 'trisquel_3_5' => 'Trisquel 3.5 Awen',
+ 'trisquel_4_0' => 'Trisquel 4.0 Taranis',
+ 'ututo_xs_2009' => 'UTUTO XS 2009',
+ 'ututo_xs_2010' => 'UTUTO XS 2010',
+ 'venenux_0_8' => 'VENENUX 0.8',
+ );
+
+ public static function getName($distList = '')
+ {
+ $returnString = null;
+ $returnArray = array();
+ $distArray = explode(',',$distList);
+ foreach ($distArray as $dist)
+ {
+ $dist = trim($dist);
+ if (array_key_exists($dist,self::$allowed))
+ {
+ $returnArray[] = self::$allowed[$dist];
+ }
+ }
+ return implode(" <br /> ",$returnArray);
+ }
+
+ public static function check($distString)
+ {
+ $distArray = explode(',',$distString);
+
+ $allowedArray = array_keys(self::$allowed);
+
+ foreach ($distArray as $dist)
+ {
+ $dist = trim($dist);
+ if (!in_array($dist,$allowedArray)) return false;
+ }
+
+ return true;
+ }
+
+ public static function getFormHtml()
+ {
+ $str = "<div class='dist_checkboxes_hidden_box'>";
+ $str .= "<div class='dist_checkboxes_hidden_box_inner'>";
+ foreach (self::$allowed as $value => $label)
+ {
+ $str .= "<div class=\"hidden_box_item\"><input class=\"hidden_box_input $value\" type=\"checkbox\" name=\"$value\" value=\"$value\"/> $label</div>";
+ }
+ $str .= "</div>";
+ $str .= "<input class=\"hidden_box_distribution_submit\" type=\"submit\" value=\"apply\">";
+ $str .= "<input class=\"hidden_box_distribution_cancel\" type=\"submit\" value=\"cancel\">";
+ $str .= "</div>";
+
+ return $str;
+ }
+
+} \ No newline at end of file
diff --git a/h-source/admin/Application/Include/hardware.php b/h-source/admin/Application/Include/hardware.php
new file mode 100644
index 0000000..62dfa37
--- /dev/null
+++ b/h-source/admin/Application/Include/hardware.php
@@ -0,0 +1,216 @@
+<?php
+
+// h-admin, a web software to build a community of people that want to share their hardware information.
+// Copyright (C) 2010 Antonio Gallo (h-admin-copyright.txt)
+//
+// This file is part of h-admin
+//
+// h-admin is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// h-admin is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with h-admin. If not, see <http://www.gnu.org/licenses/>.
+
+if (!defined('EG')) die('Direct access not allowed!');
+
+
+class Hardware
+{
+
+ public static $controllers = array('notebooks','wifi','videocards','printers','scanners'); //used by UsersController::login()
+
+ public static $commYear = 'not-specified,2010,2009,2008,2007,2006,2005,2004,2003,2002,2001,2000,1999,1998,1997,1996,1995,1994,1993,1992';
+
+}
+
+class Printer extends hardware
+{
+ public static $vendors = array(
+ "brother" => "brother",
+ "Canon" => "Canon",
+ "EPSON" => "EPSON",
+ "Lexmark" => "Lexmark",
+ "KONICA-MINOLTA" => "KONICA-MINOLTA",
+ "Hewlett-Packard" => "Hewlett-Packard",
+ "Panasonic" => "Panasonic",
+ "RICOH" => "RICOH",
+ "SAMSUNG" => "SAMSUNG",
+ "SHARP" => "SHARP",
+ "TOSHIBA" => "TOSHIBA",
+ "XEROX" => "XEROX",
+ );
+
+ public static $compatibility = array(
+ "A Full" => "A-Full",
+ "B Partial" => "B-Partial",
+ "C None" => "C-None",
+ );
+
+ public static $interface = "not-specified,USB,Serial,Parallel,Firewire,SCSI,Ethernet";
+
+ public static function vendorsList()
+ {
+ return implode(',',array_values(self::$vendors));
+ }
+
+ public static function compatibilityList()
+ {
+ return implode(',',array_values(self::$compatibility));
+ }
+
+}
+
+class Wifi extends hardware
+{
+ public static $vendors = array(
+ "A-LINK" => "A-LINK",
+ "Airlink101" => "Airlink101",
+ "Belkin" => "Belkin",
+ "Broadcom" => "Broadcom",
+ "CANYON" => "CANYON",
+ "D-Link" => "D-Link",
+ "Hawking" => "Hawking",
+ "LevelOne" => "LevelOne",
+ "Linksys" => "Linksys",
+ "NEC" => "NEC",
+ "Netgear" => "Netgear",
+ "Ralink" => "Ralink",
+ "TOSHIBA" => "TOSHIBA",
+ "TP-LINK" => "TP-LINK",
+ );
+
+ public static $interface = "not-specified,USB,PCI,PCI-E,mini-PCI,mini-PCI-E,ExpressCard,PC-Card";
+
+ public static $wifiSelect = 'yes,no';
+
+ public static function vendorsList()
+ {
+ return implode(',',array_values(self::$vendors));
+ }
+}
+
+class Videocard extends hardware
+{
+ public static $vendors = array(
+ "ATI" => "ATI",
+ "NVIDIA" => "NVIDIA",
+ "Intel" => "Intel",
+ );
+
+ public static $videoSelect = array(
+ "works with 3D acceleration" => "works_with_3D",
+ "works, but without 3D acceleration" => "works_without_3D",
+ );
+
+ public static $videoReverse = array(
+ "works_with_3D" => "works with 3D acceleration",
+ "works_without_3D" => "works, but without 3D acceleration",
+ );
+
+ public static $interface = "not-specified,PCI,AGP,PCI-E,ISA";
+
+ public static function vendorsList()
+ {
+ return implode(',',array_values(self::$vendors));
+ }
+
+ public static function videoList()
+ {
+ return implode(',',array_values(self::$videoSelect));
+ }
+}
+
+
+class Notebooks extends Hardware
+{
+
+ public static $vendors = array(
+ "Acer" => "Acer",
+ "Apple" => "Apple",
+ "Asus" => "Asus",
+ "Compal Electronics" => "Compal-Electronics",
+ "COMPAQ" => "COMPAQ",
+ "Dell" => "Dell",
+ "emachines" => "emachines",
+ "FUJITSU" => "FUJITSU",
+ "Gateway" => "Gateway",
+ "Hewlett Packard" => "Hewlett-Packard",
+ "IBM" => "IBM",
+ "Lenovo" => "Lenovo",
+ "LG" => "LG",
+ "Philips" => "Philips",
+ "Panasonic" => "Panasonic",
+ "Sony" => "Sony",
+ "SAMSUNG" => "SAMSUNG",
+ "Thomson" => "Thomson",
+ "TOSHIBA" => "TOSHIBA",
+ );
+
+ public static $compatibility = array(
+ "A Platinum" => "A-platinum",
+ "B Gold" => "B-gold",
+ "C Silver" => "C-silver",
+ "D Bronze" => "D-bronze",
+ "E Garbage" => "E-garbage"
+ );
+
+ public static $subtypeSelect = 'notebook,netbook,not-specified';
+
+ public static $videoSelect = array(
+ "not specified" => 'not-specified',
+ "yes, with 3D acceleration" => "yes_with_3D",
+ "yes, but without 3D acceleration" => "yes_without_3D",
+ "it does not work" => "no",
+ );
+
+ public static $videoReverse = array(
+ "yes_with_3D" => "works with 3D acceleration",
+ "yes_without_3D" => "works but without 3D acceleration",
+ "no" => "it does not work",
+ 'not-specified' => "not specified how it works",
+ "" => ""
+ );
+
+ public static $wifiSelect = array(
+ "not specified" => 'not-specified',
+ 'yes' => 'yes',
+ 'no' => 'no',
+ 'there is no wifi card' => 'no-wifi-card',
+ );
+
+ public static $wifiReverse = array(
+ "yes" => "it works",
+ "no" => "it does not work",
+ 'not-specified' => "not specified how it works",
+ 'no-wifi-card' => 'there is no wifi card',
+ "" => ""
+ );
+
+ public static function videoList()
+ {
+ return implode(',',array_values(self::$videoSelect));
+ }
+
+ public static function wifiList()
+ {
+ return implode(',',array_values(self::$wifiSelect));
+ }
+
+ public static function vendorsList()
+ {
+ return implode(',',array_values(self::$vendors));
+ }
+
+ public static function compatibilityList()
+ {
+ return implode(',',array_values(self::$compatibility));
+ }
+
+} \ No newline at end of file
diff --git a/h-source/admin/Application/Include/languages.php b/h-source/admin/Application/Include/languages.php
new file mode 100644
index 0000000..6262c3e
--- /dev/null
+++ b/h-source/admin/Application/Include/languages.php
@@ -0,0 +1,192 @@
+<?php
+
+// h-admin, a web software to build a community of people that want to share their hardware information.
+// Copyright (C) 2010 Antonio Gallo (h-admin-copyright.txt)
+//
+// This file is part of h-admin
+//
+// h-admin is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// h-admin is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with h-admin. If not, see <http://www.gnu.org/licenses/>.
+
+if (!defined('EG')) die('Direct access not allowed!');
+
+class Lang
+{
+ public static $allowed = array('en','es','it');
+ public static $current = 'en';
+
+ public static $complete = array(
+ 'en' => 'gb.png,English',
+ 'es' => 'es.png,Spanish',
+ 'it' => 'it.png,Italian',
+ );
+
+ public static function sanitize($lang = 'en')
+ {
+ return (in_array($lang,self::$allowed)) ? sanitizeAll($lang) : 'en';
+ }
+}
+
+class MyStrings
+{
+
+ public static $view = array(
+
+ 'en' => array(
+
+ 'notebooks' => array(
+
+ 'element' => 'notebook'
+
+ ),
+
+ 'wifi' => array(
+
+ 'element' => 'wifi card'
+
+ ),
+
+ 'videocards'=> array(
+
+ 'element' => 'video card'
+
+ ),
+
+ 'printers'=> array(
+
+ 'element' => 'printer'
+
+ ),
+
+ 'scanners'=> array(
+
+ 'element' => 'scanner'
+
+ ),
+ ),
+
+ 'fr' => array(
+
+ 'notebooks' => array(
+
+ 'element' => 'notebook'
+
+ ),
+
+ 'wifi' => array(
+
+ 'element' => 'wifi card'
+
+ ),
+
+ 'videocards'=> array(
+
+ 'element' => 'video card'
+
+ ),
+
+ 'printers'=> array(
+
+ 'element' => 'printer'
+
+ ),
+
+ 'scanners'=> array(
+
+ 'element' => 'scanner'
+
+ ),
+ ),
+
+ 'it' => array(
+
+ 'notebooks' => array(
+
+ 'element' => 'notebook'
+
+ ),
+
+ 'wifi' => array(
+
+ 'element' => 'wifi card'
+
+ ),
+
+ 'videocards'=> array(
+
+ 'element' => 'video card'
+
+ ),
+
+ 'printers'=> array(
+
+ 'element' => 'printer'
+
+ ),
+
+ 'scanners'=> array(
+
+ 'element' => 'scanner'
+
+ ),
+ ),
+
+ 'es' => array(
+
+ 'notebooks' => array(
+
+ 'element' => 'notebook'
+
+ ),
+
+ 'wifi' => array(
+
+ 'element' => 'wifi card'
+
+ ),
+
+ 'videocards'=> array(
+
+ 'element' => 'video card'
+
+ ),
+
+ 'printers'=> array(
+
+ 'element' => 'printer'
+
+ ),
+
+ 'scanners'=> array(
+
+ 'element' => 'scanner'
+
+ ),
+ ),
+ );
+
+ //type => controller
+ public static $reverse = array(
+ 'notebook' => 'notebooks',
+ 'wifi' => 'wifi',
+ 'videocard' => 'videocards',
+ 'printer' => 'printers',
+ 'scanner' => 'scanners',
+ );
+
+ public static function getTypes()
+ {
+ return implode(',',array_keys(self::$reverse));
+ }
+
+} \ No newline at end of file
diff --git a/h-source/admin/Application/Include/myFunctions.php b/h-source/admin/Application/Include/myFunctions.php
new file mode 100644
index 0000000..ab32bbf
--- /dev/null
+++ b/h-source/admin/Application/Include/myFunctions.php
@@ -0,0 +1,318 @@
+<?php
+
+// h-admin, a web software to build a community of people that want to share their hardware information.
+// Copyright (C) 2010 Antonio Gallo (h-admin-copyright.txt)
+//
+// This file is part of h-admin
+//
+// h-admin is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// h-admin is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with h-admin. If not, see <http://www.gnu.org/licenses/>.
+
+if (!defined('EG')) die('Direct access not allowed!');
+
+function encodeUrl($url)
+{
+ $url = str_replace(' ','-',$url);
+ $url = urlencode($url);
+// $url = html_entity_decode($url, ENT_QUOTES);
+// $url = xml_encode($url);
+ return $url;
+}
+
+
+function smartDate($uglyDate = null, $lang = 'en')
+{
+ switch ($lang)
+ {
+ case 'en':
+ $smDate = date('H:i, d F Y',strtotime($uglyDate));
+ break;
+ default:
+ $smDate = date('H:i, d F Y',strtotime($uglyDate));
+ }
+ return $smDate;
+}
+
+function sanitizeString($string)
+{
+ $string = preg_match('/^[a-zA-Z0-9\-\_\.\+\s]+$/',$string) ? sanitizeAll($string) : 'undef';
+ return $string;
+}
+
+function sanitizeAlphanum($string)
+{
+ $string = ctype_alnum($string) ? sanitizeAll($string) : 'undef';
+ return $string;
+}
+
+
+function getOrderByClause($string)
+{
+ switch ($string)
+ {
+ case 'last-inserted':
+ $orderBy = 'hardware.id_hard desc';
+ break;
+ case 'alphabetically':
+ $orderBy = 'model';
+ break;
+ case 'alphabetically-desc':
+ $orderBy = 'model desc';
+ break;
+ case 'compatibility':
+ $orderBy = 'compatibility';
+ break;
+ case 'undef':
+ $orderBy = 'hardware.id_hard desc';
+ break;
+ default:
+ $orderBy = 'hardware.id_hard desc';
+ }
+
+ return $orderBy;
+}
+
+
+// function isEqual($str1, $str2)
+// {
+// // $str1 = str_replace("\n",'',$str1);
+// // $str1 = str_replace("\r",null,$str1);
+// // $str2 = str_replace("\n",'',$str1);
+// // $str2 = str_replace("\r",null,$str1);
+//
+// return (strcmp($str1,$str2) === 0) ? true : false;
+// }
+//
+// function getNewKeys($array,$ovalue)
+// {
+// $res = array();
+// for ($i = 0; $i < count($array); $i++)
+// {
+// if (isEqual($array[$i],$ovalue)) $res[] = $i;
+// // if (strcmp($keys[$i],$ovalue) === 0) $res[] = $i;
+// }
+// return $res;
+// }
+
+function diff($old, $new){
+ $maxlen = 0;
+ foreach($old as $oindex => $ovalue){
+// $nkeys = getNewKeys($new,$ovalue);
+ $nkeys = array_keys($new, $ovalue);
+ foreach($nkeys as $nindex){
+ $matrix[$oindex][$nindex] = isset($matrix[$oindex - 1][$nindex - 1]) ?
+ $matrix[$oindex - 1][$nindex - 1] + 1 : 1;
+ if($matrix[$oindex][$nindex] > $maxlen){
+ $maxlen = $matrix[$oindex][$nindex];
+ $omax = $oindex + 1 - $maxlen;
+ $nmax = $nindex + 1 - $maxlen;
+ }
+ }
+ }
+ if($maxlen == 0) return array(array('d'=>$old, 'i'=>$new));
+ return array_merge(
+ diff(array_slice($old, 0, $omax), array_slice($new, 0, $nmax)),
+ array_slice($new, $nmax, $maxlen),
+ diff(array_slice($old, $omax + $maxlen), array_slice($new, $nmax + $maxlen)));
+}
+
+function htmlDiff($old, $new){
+ $old = str_replace("\r\n"," \r\n ",$old);
+ $new = str_replace("\r\n"," \r\n ",$new);
+
+ $ret = null;
+ $diff = diff(explode(' ', $old), explode(' ', $new));
+ foreach($diff as $k){
+ if(is_array($k))
+ $ret .= (!empty($k['d'])?"<del>".implode(' ',$k['d'])."</del> ":'').
+ (!empty($k['i'])?"<ins>".implode(' ',$k['i'])."</ins> ":'');
+ else $ret .= $k . ' ';
+ }
+ return $ret;
+}
+
+
+//a cosa serve?
+function applyBreaks($values,$fields)
+{
+ $fieldsArray = explode(',',$fields);
+
+ foreach ($fieldsArray as $field)
+ {
+ if (array_key_exists($field,$values))
+ {
+ $values[$field] = nl2br($values[$field]);
+ }
+ }
+ return $values;
+}
+
+
+function getLinkToUser($user)
+{
+ if (strstr($user,'__'))
+ {
+ return str_replace('__',null,$user);
+ }
+ else
+ {
+ return "<a href='http://".DOMAIN_NAME."/users/meet/".Lang::$current."/$user'>$user</a>";
+ }
+}
+
+
+
+//decode the text of the wiki
+function decodeWikiText($string)
+{
+
+ $string = preg_replace('/(\[hr\])/', '<hr />',$string);
+
+ $string = preg_replace_callback('/(\[a\])(.*?)(\[\/a\])/', 'linkTo',$string);
+
+ $string = preg_replace_callback('/(\[a\])(.*?)\|(.*?)(\[\/a\])/', 'linkToWithText',$string);
+
+ $string = preg_replace_callback('/(\[notebook\])([0-9]*?)(\[\/notebook\])/s', 'linkToNotebook',$string);
+
+ $string = preg_replace_callback('/(\[wifi\])([0-9]*?)(\[\/wifi\])/s', 'linkToWifi',$string);
+
+ $string = preg_replace_callback('/(\[videocard\])([0-9]*?)(\[\/videocard\])/s', 'linkToVideocard',$string);
+
+ $string = preg_replace('/(\[b\])(.*?)(\[\/b\])/s', '<b>${2}</b>',$string);
+
+ $string = preg_replace('/(\[u\])(.*?)(\[\/u\])/s', '<u>${2}</u>',$string);
+
+ $string = preg_replace('/(\[i\])(.*?)(\[\/i\])/s', '<i>${2}</i>',$string);
+
+ $string = preg_replace('/(\[del\])(.*?)(\[\/del\])/s', '<del>${2}</del>',$string);
+
+ $string = preg_replace('/(\[\*\])(.*?)(\[\/\*\])/s', '<li>${2}</li>',$string);
+
+ $string = preg_replace('/(\[list\])(.*?)(\[\/list\])/s', '<ul>${2}</ul>',$string);
+
+ $string = preg_replace('/(\[enum\])(.*?)(\[\/enum\])/s', '<ol>${2}</ol>',$string);
+
+ $string = preg_replace('/(\[code\])(.*?)(\[\/code\])/s', '<pre class="code_pre">${2}</pre>',$string);
+
+ $string = preg_replace('/(\[p\])(.*?)(\[\/p\])/s', '<p>${2}</p>',$string);
+
+ $string = preg_replace('/(\[h1\])(.*?)(\[\/h1\])/s', '<div class="div_h1">${2}</div>',$string);
+
+ $string = preg_replace('/(\[h2\])(.*?)(\[\/h2\])/s', '<div class="div_h2">${2}</div>',$string);
+
+ $string = preg_replace('/(\[h3\])(.*?)(\[\/h3\])/s', '<div class="div_h3">${2}</div>',$string);
+
+ return $string;
+}
+
+function checkUrl($url)
+{
+// $match = '/^http\:\/\/(www\.)?[a-zA-Z0-9\-\_]+(\.[a-zA-Z0-9\-\_]+)?\.(com|net|it|info|org|eu|uk)((\/[a-zA-Z0-9\_\-\+]+)+[\/]?)?(\?([a-zA-Z0-9\_\-\+\s]+\=[a-zA-Z0-9\_\-\s\+\&amp;]+)+)?(#[a-zA-Z0-9\_\-\+\s]+)?([\s]*)?$/';
+
+ $match = '/^http\:\/\/(www\.)?[a-zA-Z0-9\-\_]+(\.[a-zA-Z0-9\-\_]+)?\.(com|net|it|info|org|eu|uk|ca)((\/[a-zA-Z0-9\_\-\+]+)*(\/([a-zA-Z0-9\_\-\.\+]+\.(php|html|htm|asp|aspx|jsp|cgi))?)?)?(\?([a-zA-Z0-9\_\-\+\s]+\=[a-zA-Z0-9\_\-\s\+\&amp;]+)+)?(#[a-zA-Z0-9\_\-\+\s]+)?([\s]*)?$/';
+
+ if (preg_match($match,$url))
+ {
+ return true;
+ }
+ else
+ {
+ return false;
+ }
+}
+
+function vitalizeUrl($string)
+{
+ if (checkUrl($string))
+ {
+ return "<a title = '".$string."' href='".$string."'>".$string."</a>";
+ }
+ return $string;
+}
+
+function linkTo($match)
+{
+ if (checkUrl($match[2]))
+ {
+ return "<a title = '".$match[2]."' href='".$match[2]."'>".$match[2]."</a>";
+ }
+ else
+ {
+ return $match[0];
+ }
+}
+
+function linkToWithText($match)
+{
+ if (checkUrl($match[2]))
+ {
+
+ return "<a title = '".$match[2]."' href='".$match[2]."'>".$match[3]."</a>";
+ }
+ else
+ {
+ return $match[0];
+ }
+}
+
+//create the link to the wiki page of the notebook
+function linkToNotebook($match)
+{
+ $hardware = new HardwareModel();
+ $clean['id_hard'] = (int)$match[2];
+ $name = encodeUrl($hardware->getTheModelName($clean['id_hard']));
+ $href = "HTTP://".DOMAIN_NAME."/notebooks/view/".Lang::$current."/".$clean['id_hard']."/$name";
+ return (strcmp($name,'') !== 0) ? "<a title = 'link to notebook $name: $href' href='$href'>".$name."</a>" : $match[0];
+}
+
+//create the link to the wiki page of the wifi
+function linkToWifi($match)
+{
+ $hardware = new HardwareModel();
+ $clean['id_hard'] = (int)$match[2];
+ $name = encodeUrl($hardware->getTheModelName($clean['id_hard']));
+ $href = "HTTP://".DOMAIN_NAME."/wifi/view/".Lang::$current."/".$clean['id_hard']."/$name";
+ return (strcmp($name,'') !== 0) ? "<a title = 'link to wifi card $name: $href' href='$href'>".$name."</a>" : $match[0];
+}
+
+//create the link to the wiki page of the videocard
+function linkToVideocard($match)
+{
+ $hardware = new HardwareModel();
+ $clean['id_hard'] = (int)$match[2];
+ $name = encodeUrl($hardware->getTheModelName($clean['id_hard']));
+ $href = "HTTP://".DOMAIN_NAME."/videocards/view/".Lang::$current."/".$clean['id_hard']."/$name";
+ return (strcmp($name,'') !== 0) ? "<a title = 'link to video card $name: $href' href='$href'>".$name."</a>" : $match[0];
+}
+
+function getUserName($id_user = 0)
+{
+ $clean['id_user'] = (int)$id_user;
+ $u = new UsersModel();
+ return $u->getUser($clean['id_user']);
+}
+
+function getMotivation($row,$controller)
+{
+ if (strcmp($row['deletion']['object'],'duplication') === 0)
+ {
+ $clean['id_hard'] = (int)$row['deletion']['id_duplicate'];
+ $hardware = new HardwareModel();
+ $name = encodeUrl($hardware->getTheModelName($clean['id_hard']));
+ return "<b>duplication</b> of the model having id <b><a href='http://".DOMAIN_NAME."/".$controller."/view/".Lang::$current."/".$clean['id_hard']."/".$name."'>".$clean['id_hard']."</a></b>";
+ }
+ else
+ {
+ return "<b>".$row['deletion']['object']."</b>";
+ }
+} \ No newline at end of file
diff --git a/h-source/admin/Application/Models/AdminusersModel.php b/h-source/admin/Application/Models/AdminusersModel.php
new file mode 100755
index 0000000..498a1a7
--- /dev/null
+++ b/h-source/admin/Application/Models/AdminusersModel.php
@@ -0,0 +1,37 @@
+<?php
+
+// h-admin, a web software to build a community of people that want to share their hardware information.
+// Copyright (C) 2010 Antonio Gallo (h-admin-copyright.txt)
+//
+// This file is part of h-admin
+//
+// h-admin is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// h-admin is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with h-admin. If not, see <http://www.gnu.org/licenses/>.
+
+if (!defined('EG')) die('Direct access not allowed!');
+
+class AdminusersModel extends Model_Map {
+
+ public function __construct() {
+ $this->_tables='adminusers,admingroups,adminusers_groups';
+ $this->_idFields='id_user,id_group';
+ $this->_where=array('id_group'=>'admingroups','id_user'=>'adminusers','name'=>'admingroups');
+ $this->_popupItemNames = array('id_group'=>'name');
+ $this->orderBy = 'adminusers.id_user desc';
+
+// $this->on = "adminusers.id_user=adminusers_groups.id_user and admingroups.id_group=adminusers_groups.id_group";
+
+ parent::__construct();
+ }
+
+} \ No newline at end of file
diff --git a/h-source/admin/Application/Models/BaseModel.php b/h-source/admin/Application/Models/BaseModel.php
new file mode 100644
index 0000000..374be72
--- /dev/null
+++ b/h-source/admin/Application/Models/BaseModel.php
@@ -0,0 +1,68 @@
+<?php
+
+// h-admin, a web software to build a community of people that want to share their hardware information.
+// Copyright (C) 2010 Antonio Gallo (h-admin-copyright.txt)
+//
+// This file is part of h-admin
+//
+// h-admin is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// h-admin is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with h-admin. If not, see <http://www.gnu.org/licenses/>.
+
+if (!defined('EG')) die('Direct access not allowed!');
+
+class BaseModel extends Model_Tree {
+
+ public $type = ''; //device type
+ public $diffFields = array();
+
+ public function __construct() {
+ $this->_tables = 'hardware';
+ $this->_idFields = 'id_hard';
+
+ $this->_where=array(
+ 'type' => 'hardware',
+ 'vendor' => 'hardware',
+ 'compatibility' => 'hardware',
+ 'comm_year' => 'hardware',
+ );
+
+ $this->orderBy = 'hardware.id_hard desc';
+ parent::__construct();
+ }
+
+ public function checkType($id_hard = 0)
+ {
+ $clean['id_hard'] = (int)$id_hard;
+ $res = $this->db->select('hardware','type','id_hard='.$clean['id_hard']);
+ if (count($res) > 0)
+ {
+ return (strcmp($this->type,$res[0]['hardware']['type']) === 0 ) ? true : false;
+ }
+ return false;
+ }
+
+ public function getDiffArray($oldArray, $newArray)
+ {
+ $diffArray = array();
+ foreach ($this->diffFields as $field => $label)
+ {
+ if (array_key_exists($field,$oldArray) and array_key_exists($field,$newArray))
+ {
+// echo htmlDiff($oldArray[$field], $newArray[$field]);
+// echo $oldArray[$field].$newArray[$field];
+ $diffArray[$label] = htmlDiff($oldArray[$field], $newArray[$field]);
+ }
+ }
+ return $diffArray;
+ }
+} \ No newline at end of file
diff --git a/h-source/admin/Application/Models/BoxesModel.php b/h-source/admin/Application/Models/BoxesModel.php
new file mode 100644
index 0000000..1f1a51a
--- /dev/null
+++ b/h-source/admin/Application/Models/BoxesModel.php
@@ -0,0 +1,42 @@
+<?php
+
+// h-admin, a web software to build a community of people that want to share their hardware information.
+// Copyright (C) 2010 Antonio Gallo (h-admin-copyright.txt)
+//
+// This file is part of h-admin
+//
+// h-admin is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// h-admin is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with h-admin. If not, see <http://www.gnu.org/licenses/>.
+
+if (!defined('EG')) die('Direct access not allowed!');
+
+class BoxesModel extends Model_Tree {
+
+ public function __construct() {
+ $this->_tables = 'boxes';
+ $this->_idFields = 'id_box';
+
+ parent::__construct();
+ }
+
+ public $formStruct = array(
+ 'entries' => array(
+ 'title' => array(),
+ 'message' => array('type'=>'Textarea'),
+ 'id_box' => array(
+ 'type' => 'Hidden'
+ )
+ ),
+ );
+
+} \ No newline at end of file
diff --git a/h-source/admin/Application/Models/DeletionModel.php b/h-source/admin/Application/Models/DeletionModel.php
new file mode 100644
index 0000000..0e67904
--- /dev/null
+++ b/h-source/admin/Application/Models/DeletionModel.php
@@ -0,0 +1,53 @@
+<?php
+
+// h-admin, a web software to build a community of people that want to share their hardware information.
+// Copyright (C) 2010 Antonio Gallo (h-admin-copyright.txt)
+//
+// This file is part of h-admin
+//
+// h-admin is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// h-admin is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with h-admin. If not, see <http://www.gnu.org/licenses/>.
+
+if (!defined('EG')) die('Direct access not allowed!');
+
+class DeletionModel extends Model_Tree
+{
+
+ public function __construct()
+ {
+ $this->_tables = 'deletion';
+ $this->_idFields = 'id_del';
+
+// $this->_where=array(
+// 'id_hard' => 'talk'
+// );
+//
+ $this->_popupItemNames = array(
+ 'object' => 'object',
+ );
+
+ $this->_popupLabels = array(
+ 'object' => 'OBJECT',
+ );
+//
+ $this->orderBy = 'deletion.id_del desc';
+
+ $this->strongConditions['insert'] = array(
+ "checkIsStrings|duplication,other" => 'object',
+ "+checkLength|500" => 'message'
+ );
+
+ parent::__construct();
+ }
+
+} \ No newline at end of file
diff --git a/h-source/admin/Application/Models/HardwareModel.php b/h-source/admin/Application/Models/HardwareModel.php
new file mode 100644
index 0000000..48cab7e
--- /dev/null
+++ b/h-source/admin/Application/Models/HardwareModel.php
@@ -0,0 +1,200 @@
+<?php
+
+// h-admin, a web software to build a community of people that want to share their hardware information.
+// Copyright (C) 2010 Antonio Gallo (h-admin-copyright.txt)
+//
+// This file is part of h-admin
+//
+// h-admin is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// h-admin is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with h-admin. If not, see <http://www.gnu.org/licenses/>.
+
+if (!defined('EG')) die('Direct access not allowed!');
+
+class HardwareModel extends Model_Map {
+
+ public $id_user = 0;
+ public $type = ''; //device type
+ public $lastId = 0; //the id of the last record inserted
+
+ public $formStruct = array(
+ 'entries' => array(
+ 'deleted'=> array('type'=>'Select','options'=>'no,yes'),
+ 'id_hard' => array(
+ 'type' => 'Hidden'
+ )
+ ),
+ );
+
+ public function __construct() {
+ $this->_tables='hardware,regusers,hardware_users';
+ $this->_idFields='id_hard,id_user';
+ $this->_where=array(
+ 'type' => 'hardware',
+ 'username' => 'regusers',
+ 'has_confirmed' => 'regusers',
+ 'deleted' => 'regusers',
+ '-deleted' => 'hardware'
+ );
+ $this->orderBy = 'hardware.id_hard desc';
+ $this->printAssError = "no";
+
+ $this->_popupItemNames = array(
+ 'type'=>'type',
+ 'ask_for_del'=>'ask_for_del',
+ '-deleted'=>'deleted',
+ );
+
+ $this->_popupLabels = array(
+ 'type'=>'TYPE',
+ 'ask_for_del'=>'ASK FOR DEL?',
+ '-deleted'=>'DELETED?',
+ );
+
+ $this->databaseConditions['insert'] = array(
+ 'checkUnique' => 'model',
+ );
+
+ $this->databaseConditions['update'] = array(
+ 'checkUniqueCompl' => 'model',
+ );
+
+ parent::__construct();
+ }
+
+ public function insert()
+ {
+ $this->values['created_by'] = (int)$this->id_user;
+ $this->values['updated_by'] = (int)$this->id_user;
+ $this->values['update_date'] = date('Y-m-d H:i:s');
+
+ //random ID
+ $randomId = md5(uniqid(mt_rand(),true));
+ $this->values["type"] = $randomId;
+
+ parent::insert();
+
+ //associate the user to the record
+ if ($this->queryResult)
+ {
+ $resId = $this->db->select("hardware","id_hard","type='$randomId'");
+ $clean['id'] = $resId[0]['hardware']['id_hard'];
+ $this->lastId = $clean['id'];
+ $this->db->update('hardware','type',array($this->type),'id_hard='.$clean['id']);
+
+ $this->associate($clean['id']);
+ }
+
+ }
+
+ public function update($id)
+ {
+ $clean['id'] = (int)$id;
+
+ $this->values['updated_by'] = (int)$this->id_user;
+ $this->values['update_date'] = date('Y-m-d H:i:s');
+
+ //save the old fields in the revisions table
+ $this->setWhereQueryClause(array('id_hard' => $clean['id']));
+ $oldStruct = $this->getFields($this->fields.',created_by,updated_by,update_date,type,id_hard');
+
+ if (count($oldStruct > 0))
+ {
+ if (strcmp($oldStruct[0]['hardware']['type'],$this->type) === 0)
+ {
+ $oldValues = $oldStruct[0]['hardware'];
+
+ $revisions = new RevisionsModel();
+ $revisions->values = $oldValues;
+ if ($revisions->insert())
+ {
+ parent::update($clean['id']);
+ if ($this->queryResult)
+ {
+ $this->lastId = $clean['id'];
+ if (!$this->checkAssociation($clean['id'],(int)$this->id_user))
+ {
+ $this->associate($clean['id']);
+ }
+ }
+ }
+ }
+ }
+ }
+
+ public function makeCurrent($id_rev)
+ {
+ $clean['id_rev'] = (int)$id_rev;
+
+ $revisions = new RevisionsModel();
+
+ $clean['id_hard'] = (int)$revisions->getIdHard($clean['id_rev']);
+
+ //save the old fields in the revisions table
+ $this->setWhereQueryClause(array('id_hard'=>$clean['id_hard']));
+ $oldStruct = $this->getFields($this->fields.',created_by,updated_by,update_date,type,id_hard');
+
+ if (count($oldStruct > 0))
+ {
+ if (strcmp($oldStruct[0]['hardware']['type'],$this->type) === 0)
+ {
+ //get the values of the revision
+ $revisions->setWhereQueryClause(array('id_rev'=>$clean['id_rev']));
+ $newStruct = $revisions->getFields($this->fields.',created_by,updated_by,update_date,type,id_hard');
+
+ if (count($newStruct > 0))
+ {
+ $revisions->values = $oldStruct[0]['hardware'];
+
+ $this->values = $newStruct[0]['revisions'];
+ $this->values['updated_by'] = (int)$this->id_user;
+ $this->values['update_date'] = date('Y-m-d H:i:s');
+
+ if ($revisions->insert())
+ {
+ if (parent::update($clean['id_hard']))
+ {
+ $this->lastId = $clean['id_hard'];
+ if (!$this->checkAssociation($clean['id_hard'],(int)$this->id_user))
+ {
+ $this->associate($clean['id_hard']);
+ }
+ }
+ }
+ }
+ }
+ else
+ {
+ $this->notice = "<div class='alert'>Wrong type..</div>\n";
+ }
+ }
+
+ }
+
+ public function associate($id_record)
+ {
+ return parent::associate((int)$id_record,(int)$this->id_user);
+ }
+
+ //get the model name
+ public function getTheModelName($id)
+ {
+ $clean['id'] = (int)$id;
+ $this->setWhereQueryClause(array('id_hard' => $clean['id']));
+ $res = $this->getFields('model');
+ $name = count($res) > 0 ? $res[0]['hardware']['model'] : '';
+ return $name;
+ }
+
+
+
+} \ No newline at end of file
diff --git a/h-source/admin/Application/Models/HistoryModel.php b/h-source/admin/Application/Models/HistoryModel.php
new file mode 100644
index 0000000..5f35d6b
--- /dev/null
+++ b/h-source/admin/Application/Models/HistoryModel.php
@@ -0,0 +1,55 @@
+<?php
+
+// h-admin, a web software to build a community of people that want to share their hardware information.
+// Copyright (C) 2010 Antonio Gallo (h-admin-copyright.txt)
+//
+// This file is part of h-admin
+//
+// h-admin is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// h-admin is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with h-admin. If not, see <http://www.gnu.org/licenses/>.
+
+if (!defined('EG')) die('Direct access not allowed!');
+
+class HistoryModel extends Model_Tree {
+
+ public function __construct() {
+ $this->_tables = 'history';
+ $this->_idFields = 'id_history';
+
+ $this->orderBy = 'history.id_history';
+
+ $this->_popupFunctions = array(
+ 'created_by'=> 'getUserName',
+ );
+
+ $this->_popupItemNames = array(
+ 'type' => 'type',
+ 'action' => 'action',
+ 'created_by'=> 'created_by',
+ );
+
+ $this->_popupLabels = array(
+ 'type' => 'TYPE',
+ 'action' => 'ACTION',
+ 'created_by'=> 'MODERATOR',
+ );
+
+ $this->_popupWhere = array(
+ 'created_by' => 'gr != "registered"',
+ );
+
+
+ parent::__construct();
+ }
+
+} \ No newline at end of file
diff --git a/h-source/admin/Application/Models/IssuesModel.php b/h-source/admin/Application/Models/IssuesModel.php
new file mode 100644
index 0000000..3ad3a5c
--- /dev/null
+++ b/h-source/admin/Application/Models/IssuesModel.php
@@ -0,0 +1,96 @@
+<?php
+
+// h-admin, a web software to build a community of people that want to share their hardware information.
+// Copyright (C) 2010 Antonio Gallo (h-admin-copyright.txt)
+//
+// This file is part of h-admin
+//
+// h-admin is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// h-admin is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with h-admin. If not, see <http://www.gnu.org/licenses/>.
+
+if (!defined('EG')) die('Direct access not allowed!');
+
+class IssuesModel extends Model_Tree {
+
+ public function __construct() {
+ $this->_tables = 'issues';
+ $this->_idFields = 'id_issue';
+
+ $this->_onDelete = 'nocheck';
+
+ $this->_where = array(
+ 'priority' => 'issues',
+ 'status' => 'issues',
+ 'topic' => 'issues',
+ );
+
+ $this->_popupItemNames = array(
+ 'priority' => 'priority',
+ 'status' => 'status',
+ 'topic' => 'topic',
+ 'deleted' => 'deleted',
+ );
+
+ $this->_popupLabels = array(
+ 'priority' => 'PRIORITY',
+ 'status' => 'STATUS',
+ 'topic' => 'TOPIC',
+ 'deleted' => 'DELETED?',
+ );
+
+ $this->orderBy = 'issues.id_issue desc';
+
+ $this->strongConditions['insert'] = array(
+ "checkLength|99" => 'title',
+ "+checkLength|34" => 'topic',
+ "++checkLength|15" => 'priority',
+ "+++checkLength|5000" => 'message',
+ "checkisStrings|low,medium,high" => 'priority',
+ "+checkisStrings|maybe-a-bug,new-categories-of-hardware,add-a-vendor-name,other" => 'topic',
+ );
+
+ parent::__construct();
+ }
+
+ public $formStruct = array(
+ 'entries' => array(
+ 'title' => array(),
+ 'topic' => array(
+ 'type'=>'Select',
+ 'options'=>array(
+ 'Add a vendor name' => 'add-a-vendor-name',
+ 'Maybe a bug' => 'maybe-a-bug',
+ 'Add new categories of hardware' => 'new-categories-of-hardware',
+ 'Other' => 'other'
+ ),
+ ),
+ 'deleted'=> array(
+ 'type' => 'Select',
+ 'options' => 'no,yes',
+ ),
+ 'priority' => array('type'=>'Select','options'=>'low,medium,high'),
+ 'message' => array('type'=>'Textarea','idName'=>'bb_code'),
+ 'status' => array(
+ 'type' => 'Select',
+ 'options' => 'opened,closed'
+ ),
+ 'notice' => array(
+ 'type' => 'Textarea',
+ 'idName' => 'bb_code_notice',
+ ),
+ 'id_issue' => array(
+ 'type' => 'Hidden'
+ )
+ ),
+ );
+} \ No newline at end of file
diff --git a/h-source/admin/Application/Models/MessagesModel.php b/h-source/admin/Application/Models/MessagesModel.php
new file mode 100644
index 0000000..2022b4a
--- /dev/null
+++ b/h-source/admin/Application/Models/MessagesModel.php
@@ -0,0 +1,58 @@
+<?php
+
+// h-admin, a web software to build a community of people that want to share their hardware information.
+// Copyright (C) 2010 Antonio Gallo (h-admin-copyright.txt)
+//
+// This file is part of h-admin
+//
+// h-admin is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// h-admin is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with h-admin. If not, see <http://www.gnu.org/licenses/>.
+
+if (!defined('EG')) die('Direct access not allowed!');
+
+class MessagesModel extends Model_Tree {
+
+ public function __construct() {
+ $this->_tables = 'messages';
+ $this->_idFields = 'id_mes';
+
+ $this->orderBy = 'messages.id_mes';
+
+ $this->_popupItemNames = array(
+ 'deleted' => 'deleted',
+ 'has_read' => 'has_read',
+ );
+
+ $this->_popupLabels = array(
+ 'deleted' => 'DELETED?',
+ 'has_read' => 'ALREADY READ?',
+ );
+
+ $this->strongConditions['insert'] = array(
+ "checkLength|5000" => 'message',
+ );
+
+ parent::__construct();
+ }
+
+ public $formStruct = array(
+ 'entries' => array(
+ 'deleted' => array('type'=>'Select','options'=>'no,yes'),
+ 'has_read' => array('type'=>'Select','options'=>'no,yes'),
+ 'message' => array('type'=>'Textarea','idName'=>'bb_code'),
+ 'id_mes' => array(
+ 'type' => 'Hidden'
+ )
+ ),
+ );
+} \ No newline at end of file
diff --git a/h-source/admin/Application/Models/NewsModel.php b/h-source/admin/Application/Models/NewsModel.php
new file mode 100644
index 0000000..2f47800
--- /dev/null
+++ b/h-source/admin/Application/Models/NewsModel.php
@@ -0,0 +1,44 @@
+<?php
+
+// h-admin, a web software to build a community of people that want to share their hardware information.
+// Copyright (C) 2010 Antonio Gallo (h-admin-copyright.txt)
+//
+// This file is part of h-admin
+//
+// h-admin is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// h-admin is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with h-admin. If not, see <http://www.gnu.org/licenses/>.
+
+if (!defined('EG')) die('Direct access not allowed!');
+
+class NewsModel extends Model_Tree {
+
+ public function __construct() {
+ $this->_tables = 'news';
+ $this->_idFields = 'id_news';
+
+ $this->orderBy = 'news.id_news desc';
+
+ parent::__construct();
+ }
+
+ public $formStruct = array(
+ 'entries' => array(
+ 'title' => array(),
+ 'message' => array('type'=>'Textarea','idName'=>'bb_code'),
+ 'id_news' => array(
+ 'type' => 'Hidden'
+ )
+ ),
+ );
+
+} \ No newline at end of file
diff --git a/h-source/admin/Application/Models/NotebooksModel.php b/h-source/admin/Application/Models/NotebooksModel.php
new file mode 100644
index 0000000..fda2c42
--- /dev/null
+++ b/h-source/admin/Application/Models/NotebooksModel.php
@@ -0,0 +1,71 @@
+<?php
+
+// h-admin, a web software to build a community of people that want to share their hardware information.
+// Copyright (C) 2010 Antonio Gallo (h-admin-copyright.txt)
+//
+// This file is part of h-admin
+//
+// h-admin is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// h-admin is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with h-admin. If not, see <http://www.gnu.org/licenses/>.
+
+if (!defined('EG')) die('Direct access not allowed!');
+
+class NotebooksModel extends BaseModel {
+
+ public $type = 'notebook'; //device type
+
+ public $diffFields = array(
+ 'vendor' => 'vendor',
+ 'model' => 'model name',
+ 'subtype' => 'subtype (notebook or netbook) ?',
+ 'comm_year' => 'year of commercialization',
+ 'distribution' => 'distribution used',
+ 'compatibility' => 'compatibility level',
+ 'kernel' => 'kernel libre version',
+ 'video_card_type' => 'video card model',
+ 'video_card_works' => 'does the video card work?',
+ 'wifi_type' => 'wifi model',
+ 'wifi_works' => 'does the wifi card works?',
+ 'description' => 'model description',
+ );
+
+ public $fieldsWithBreaks = array('model description');
+
+ public function __construct()
+ {
+
+ $this->_popupItemNames = array(
+ 'vendor' => 'vendor',
+ 'compatibility' => 'compatibility',
+ 'comm_year' => 'comm_year',
+ 'subtype' => 'subtype',
+ );
+
+ $this->_popupLabels = array(
+ 'vendor' => 'vendor',
+ 'compatibility' => 'compatibility',
+ 'comm_year' => 'year',
+ 'subtype' => 'subtype',
+ );
+
+ $this->_popupWhere = array(
+ 'vendor' => 'type="notebook" and deleted="no"',
+ 'compatibility' => 'type="notebook" and deleted="no"',
+ 'comm_year' => 'type="notebook" and deleted="no"',
+ 'subtype' => 'type="notebook" and deleted="no"',
+ );
+
+ parent::__construct();
+ }
+
+} \ No newline at end of file
diff --git a/h-source/admin/Application/Models/ParamsModel.php b/h-source/admin/Application/Models/ParamsModel.php
new file mode 100644
index 0000000..f30bca1
--- /dev/null
+++ b/h-source/admin/Application/Models/ParamsModel.php
@@ -0,0 +1,48 @@
+<?php
+
+// h-admin, a web software to build a community of people that want to share their hardware information.
+// Copyright (C) 2010 Antonio Gallo (h-admin-copyright.txt)
+//
+// This file is part of h-admin
+//
+// h-admin is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// h-admin is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with h-admin. If not, see <http://www.gnu.org/licenses/>.
+
+if (!defined('EG')) die('Direct access not allowed!');
+
+class ParamsModel extends Model_Tree {
+
+ public function __construct() {
+ $this->_tables = 'params';
+ $this->_idFields = 'id_par';
+
+ parent::__construct();
+ }
+
+ public $formStruct = array(
+ 'entries' => array(
+ 'updating' => array(
+ 'type'=>'Select',
+ 'options'=>'no,yes',
+ ),
+ 'boxes_xml' => array(
+ 'type'=>'Textarea',
+ 'labelString'=> 'Configuration xml',
+ ),
+ 'id_par' => array(
+ 'type' => 'Hidden'
+ )
+ ),
+ );
+
+} \ No newline at end of file
diff --git a/h-source/admin/Application/Models/PrintersModel.php b/h-source/admin/Application/Models/PrintersModel.php
new file mode 100644
index 0000000..104e214
--- /dev/null
+++ b/h-source/admin/Application/Models/PrintersModel.php
@@ -0,0 +1,70 @@
+<?php
+
+// h-admin, a web software to build a community of people that want to share their hardware information.
+// Copyright (C) 2010 Antonio Gallo (h-admin-copyright.txt)
+//
+// This file is part of h-admin
+//
+// h-admin is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// h-admin is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with h-admin. If not, see <http://www.gnu.org/licenses/>.
+
+if (!defined('EG')) die('Direct access not allowed!');
+
+class PrintersModel extends BaseModel
+{
+
+ public $type = 'printer'; //device type
+
+ public $diffFields = array(
+ 'vendor' => 'vendor',
+ 'model' => 'model name',
+ 'pci_id' => 'VendorID:ProductID',
+ 'comm_year' => 'year of commercialization',
+ 'interface' => 'interface',
+ 'distribution' => 'distribution used',
+ 'compatibility' => 'compatibility',
+ 'kernel' => 'kernel libre version',
+ 'driver' => 'driver used',
+ 'description' => 'model description',
+ );
+
+ public $fieldsWithBreaks = array('model description');
+
+ public function __construct()
+ {
+
+ $this->_popupItemNames = array(
+ 'vendor' => 'vendor',
+ 'compatibility' => 'compatibility',
+ 'comm_year' => 'comm_year',
+ 'interface' => 'interface',
+ );
+
+ $this->_popupLabels = array(
+ 'vendor' => 'vendor',
+ 'compatibility' => 'compatibility',
+ 'comm_year' => 'year',
+ 'interface' => 'interface',
+ );
+
+ $this->_popupWhere = array(
+ 'vendor' => 'type="printer" and deleted="no"',
+ 'compatibility' => 'type="printer" and deleted="no"',
+ 'comm_year' => 'type="printer" and deleted="no"',
+ 'interface' => 'type="printer" and deleted="no"',
+ );
+
+ parent::__construct();
+ }
+
+} \ No newline at end of file
diff --git a/h-source/admin/Application/Models/ProfileModel.php b/h-source/admin/Application/Models/ProfileModel.php
new file mode 100644
index 0000000..626e652
--- /dev/null
+++ b/h-source/admin/Application/Models/ProfileModel.php
@@ -0,0 +1,72 @@
+<?php
+
+// h-admin, a web software to build a community of people that want to share their hardware information.
+// Copyright (C) 2010 Antonio Gallo (h-admin-copyright.txt)
+//
+// This file is part of h-admin
+//
+// h-admin is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// h-admin is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with h-admin. If not, see <http://www.gnu.org/licenses/>.
+
+if (!defined('EG')) die('Direct access not allowed!');
+
+class ProfileModel extends Model_Tree {
+
+ public function __construct() {
+ $this->_tables = 'profile';
+ $this->_idFields = 'id_prof';
+
+ $this->_where=array(
+ 'username' => 'regusers',
+ 'has_confirmed' => 'regusers',
+ 'deleted' => 'regusers'
+ );
+
+ $this->softConditions['update'] = array(
+ "checkLength|90" => "real_name,where_you_are,fav_distro,birth_date,website|the fields 'real name', 'where_you_are', 'favorite distro', 'website' and 'birthdate' don't have to have more than 90 characters",
+ "checkLength|1000" => "projects,description|the fields 'projects' and 'description' don't have to have more than 1000 characters",
+ "checkIsStrings|no,yes" => "publish_mail"
+ );
+
+ parent::__construct();
+ }
+
+ public $formStruct = array(
+
+ 'entries' => array(
+ 'real_name' => array('labelString'=>'Your real name'),
+ 'website' => array('labelString'=>'Your website address (add http://)'),
+ 'where_you_are' => array('labelString'=>'I\'m from...'),
+ 'birth_date' => array('labelString'=>'My birthdate'),
+ 'fav_distro' => array('labelString'=>'My favourite distribution'),
+ 'projects' => array(
+ 'type' => 'Textarea',
+ 'labelString'=>'Free software projects I\'m working on'
+ ),
+ 'publish_mail' => array(
+ 'type' => 'Select',
+ 'options' => 'no,yes',
+ 'labelString'=> 'Would you like to publish your e-mail address?'
+ ),
+ 'description' => array(
+ 'type' => 'Textarea',
+ 'labelString'=> 'Your description'
+ ),
+ 'id_prof' => array(
+ 'type' => 'Hidden'
+ )
+ ),
+
+ );
+
+} \ No newline at end of file
diff --git a/h-source/admin/Application/Models/RevisionsModel.php b/h-source/admin/Application/Models/RevisionsModel.php
new file mode 100644
index 0000000..bbfa939
--- /dev/null
+++ b/h-source/admin/Application/Models/RevisionsModel.php
@@ -0,0 +1,50 @@
+<?php
+
+// h-admin, a web software to build a community of people that want to share their hardware information.
+// Copyright (C) 2010 Antonio Gallo (h-admin-copyright.txt)
+//
+// This file is part of h-admin
+//
+// h-admin is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// h-admin is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with h-admin. If not, see <http://www.gnu.org/licenses/>.
+
+if (!defined('EG')) die('Direct access not allowed!');
+
+class RevisionsModel extends Model_Tree {
+
+ public $id_user = 0;
+ public $type = ''; //device type
+
+ public function __construct() {
+ $this->_tables='revisions';
+ $this->_idFields='id_rev';
+
+ $this->_where=array(
+ 'id_hard'=>'revisions'
+ );
+
+ $this->orderBy = 'id_rev desc';
+
+ parent::__construct();
+ }
+
+ public function getIdHard($id_rev = 0)
+ {
+ $clean['id_rev'] = (int)$id_rev;
+
+ $res = $this->db->select('revisions','id_hard','id_rev='.$clean['id_rev']);
+
+ return (count($res) > 0) ? $res[0]['revisions']['id_hard'] : 0;
+ }
+
+} \ No newline at end of file
diff --git a/h-source/admin/Application/Models/ScannersModel.php b/h-source/admin/Application/Models/ScannersModel.php
new file mode 100644
index 0000000..978a26b
--- /dev/null
+++ b/h-source/admin/Application/Models/ScannersModel.php
@@ -0,0 +1,70 @@
+<?php
+
+// h-admin, a web software to build a community of people that want to share their hardware information.
+// Copyright (C) 2010 Antonio Gallo (h-admin-copyright.txt)
+//
+// This file is part of h-admin
+//
+// h-admin is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// h-admin is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with h-admin. If not, see <http://www.gnu.org/licenses/>.
+
+if (!defined('EG')) die('Direct access not allowed!');
+
+class ScannersModel extends BaseModel
+{
+
+ public $type = 'scanner'; //device type
+
+ public $diffFields = array(
+ 'vendor' => 'vendor',
+ 'model' => 'model name',
+ 'pci_id' => 'VendorID:ProductID',
+ 'comm_year' => 'year of commercialization',
+ 'interface' => 'interface',
+ 'distribution' => 'distribution used',
+ 'compatibility' => 'compatibility',
+ 'kernel' => 'kernel libre version',
+ 'driver' => 'driver used',
+ 'description' => 'model description',
+ );
+
+ public $fieldsWithBreaks = array('model description');
+
+ public function __construct()
+ {
+
+ $this->_popupItemNames = array(
+ 'vendor' => 'vendor',
+ 'compatibility' => 'compatibility',
+ 'comm_year' => 'comm_year',
+ 'interface' => 'interface',
+ );
+
+ $this->_popupLabels = array(
+ 'vendor' => 'vendor',
+ 'compatibility' => 'compatibility',
+ 'comm_year' => 'year',
+ 'interface' => 'interface',
+ );
+
+ $this->_popupWhere = array(
+ 'vendor' => 'type="scanner" and deleted="no"',
+ 'compatibility' => 'type="scanner" and deleted="no"',
+ 'comm_year' => 'type="scanner" and deleted="no"',
+ 'interface' => 'type="scanner" and deleted="no"',
+ );
+
+ parent::__construct();
+ }
+
+} \ No newline at end of file
diff --git a/h-source/admin/Application/Models/TalkModel.php b/h-source/admin/Application/Models/TalkModel.php
new file mode 100644
index 0000000..cdf2fc6
--- /dev/null
+++ b/h-source/admin/Application/Models/TalkModel.php
@@ -0,0 +1,54 @@
+<?php
+
+// h-admin, a web software to build a community of people that want to share their hardware information.
+// Copyright (C) 2010 Antonio Gallo (h-admin-copyright.txt)
+//
+// This file is part of h-admin
+//
+// h-admin is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// h-admin is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with h-admin. If not, see <http://www.gnu.org/licenses/>.
+
+if (!defined('EG')) die('Direct access not allowed!');
+
+class TalkModel extends Model_Tree {
+
+ public function __construct() {
+ $this->_tables = 'talk';
+ $this->_idFields = 'id_talk';
+
+ $this->_where=array(
+ 'id_hard' => 'talk'
+ );
+
+ $this->orderBy = 'talk.id_talk desc';
+
+ $this->strongConditions['insert'] = array(
+ "checkLength|99" => 'title',
+ "+checkNotEmpty" => 'message',
+ "++checkLength|5000" => 'message',
+ );
+
+ parent::__construct();
+ }
+
+ public $formStruct = array(
+ 'entries' => array(
+ 'title' => array(),
+ 'message' => array('type'=>'Textarea'),
+ 'id_talk' => array(
+ 'type' => 'Hidden'
+ )
+ ),
+ );
+
+} \ No newline at end of file
diff --git a/h-source/admin/Application/Models/UsersModel.php b/h-source/admin/Application/Models/UsersModel.php
new file mode 100755
index 0000000..3f55cfe
--- /dev/null
+++ b/h-source/admin/Application/Models/UsersModel.php
@@ -0,0 +1,223 @@
+<?php
+
+// h-admin, a web software to build a community of people that want to share their hardware information.
+// Copyright (C) 2010 Antonio Gallo (h-admin-copyright.txt)
+//
+// This file is part of h-admin
+//
+// h-admin is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// h-admin is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with h-admin. If not, see <http://www.gnu.org/licenses/>.
+
+if (!defined('EG')) die('Direct access not allowed!');
+
+class UsersModel extends Model_Map
+{
+
+ public static $usersList = array();
+
+ public function __construct()
+ {
+ $this->_tables='regusers,reggroups,regusers_groups';
+ $this->_idFields='id_user,id_group';
+
+ $this->_where=array(
+ 'id_group' => 'reggroups',
+ 'id_user' => 'regusers',
+ 'name' => 'reggroups',
+ 'confirmation_token'=> 'regusers',
+ 'has_confirmed' => 'regusers',
+ 'deleted' => 'regusers',
+ 'forgot_token' => 'regusers'
+ );
+
+ $this->_popupItemNames = array(
+ 'has_confirmed'=>'has_confirmed',
+ 'deleted'=>'deleted',
+ 'id_group'=>'name',
+ );
+
+ $this->_popupLabels = array(
+ 'has_confirmed'=>'HAS CONFIRMED?',
+ 'deleted'=>'DELETED?',
+ 'id_group'=>'GROUP'
+ );
+
+ $this->orderBy = 'regusers.id_user desc';
+
+ parent::__construct();
+
+ $this->deleteNotRegistered();
+ }
+
+ public function deleteNotRegistered()
+ {
+ $limit = time() - Account::$confirmTime;
+ $this->db->del('regusers','has_confirmed = 1 and deleted = "no" and creation_time < '.$limit);
+ }
+
+ public function getUser($id_user = 0)
+ {
+ $clean['id_user'] = (int)$id_user;
+ if (array_key_exists($clean['id_user'],self::$usersList))
+ {
+ return self::$usersList[$clean['id_user']];
+ }
+ else
+ {
+ $user = $this->db->select('regusers','username,has_confirmed','id_user='.$clean['id_user']);
+ if (count($user) > 0)
+ {
+ $fuser = (strcmp($user[0]['regusers']['has_confirmed'],0) === 0) ? $user[0]['regusers']['username'] : "__".$user[0]['regusers']['username'];
+ self::$usersList[$clean['id_user']] = $fuser;
+ return $fuser;
+ }
+ else
+ {
+ return "__";
+ }
+ }
+ }
+
+ public function insert()
+ {
+ //create the token
+ $confirmation_token = md5(randString(20));
+ $this->values['confirmation_token'] = $confirmation_token;
+ //has_confirmed flag
+ $this->values['has_confirmed'] = 1;
+ $this->values['creation_time'] = time();
+
+ //random ID
+ $randomId = md5(randString(5).uniqid(mt_rand(),true));
+ $this->values["temp_field"] = $randomId;
+
+ if (isset($_POST['captcha']))
+ {
+ if ( strcmp($_SESSION['captchaString'],$_POST['captcha']) === 0 )
+ {
+
+ parent::insert();
+
+ if ($this->queryResult)
+ {
+ $resId = $this->db->select("regusers","id_user","temp_field='$randomId'");
+ $clean['id_user'] = $resId[0]['regusers']['id_user'];
+ $this->db->update("regusers",'temp_field',array(''),'id_user='.$clean['id_user']);
+
+ $result = Account::confirm($this->values['username'],$this->values['e_mail'],$clean['id_user'],$confirmation_token);
+
+ if ($result)
+ {
+ $_SESSION['status'] = 'sent';
+ }
+ else
+ {
+ $_SESSION['status'] = 'regerror';
+ }
+
+ $hed = new HeaderObj(DOMAIN_NAME);
+ $hed->redirect('users/notice/'.Lang::$current);
+ }
+
+ }
+ else
+ {
+ $this->result = false;
+ $this->queryResult = false;
+ $this->notice = "<div class='alert'>Wrong captcha code...</div>\n";
+ }
+ }
+ }
+
+ public function close($id_user)
+ {
+ $clean['id_user'] = (int)$id_user;
+
+ $this->values = array(
+ 'has_confirmed' => 1,
+ 'deleted' => 'yes',
+ 'e_mail' => ''
+ );
+
+ if ($this->update($clean['id_user']))
+ {
+ $_SESSION['status'] = 'deleted';
+
+ $profile = new ProfileModel();
+ $res = $profile->db->select('profile','id_prof','created_by='.$clean['id_user']);
+
+ if (count($res) > 0)
+ {
+ $clean['id_prof'] = (int)$res[0]['profile']['id_prof'];
+ $profile->values = array(
+ 'real_name' => '',
+ 'where_you_are' => '',
+ 'birth_date' => '',
+ 'fav_distro' => '',
+ 'projects' => '',
+ 'description' => ''
+ );
+ $profile->update($clean['id_prof']);
+ }
+ }
+
+ }
+
+ public function forgot($username)
+ {
+ $clean['username'] = ctype_alnum($username) ? sanitizeAll($username) : '';
+
+ if (isset($_POST['captcha']))
+ {
+ if ( strcmp($_SESSION['captchaString'],$_POST['captcha']) === 0 )
+ {
+ $res = $this->db->select('regusers','e_mail,id_user','username="'.$clean['username'].'" and has_confirmed = 0 and deleted = "no"');
+ if (count($res) > 0)
+ {
+ $e_mail = $res[0]['regusers']['e_mail'];
+ $id_user = (int)$res[0]['regusers']['id_user'];
+ $forgot_token = md5(randString(20));
+ $forgot_time = time();
+ $updateArray = array($forgot_token, $forgot_time);
+ $this->db->update('regusers','forgot_token,forgot_time',$updateArray,'username="'.$clean['username'].'"');
+
+ $result = Account::sendnew($clean['username'],$e_mail,$id_user,$forgot_token);
+
+ if ($result)
+ {
+ $_SESSION['status'] = 'sent_new';
+ }
+ else
+ {
+ $_SESSION['status'] = 'sent_new_error';
+ }
+
+ $hed = new HeaderObj(DOMAIN_NAME);
+ $hed->redirect('users/notice/'.Lang::$current,1);
+
+ }
+ else
+ {
+ $this->notice = "<div class='alert'>the user does not exist</div>\n";
+ }
+ }
+ else
+ {
+ $this->result = false;
+ $this->queryResult = false;
+ $this->notice = "<div class='alert'>Wrong captcha code...</div>\n";
+ }
+ }
+ }
+
+} \ No newline at end of file
diff --git a/h-source/admin/Application/Models/VideocardsModel.php b/h-source/admin/Application/Models/VideocardsModel.php
new file mode 100644
index 0000000..3b96091
--- /dev/null
+++ b/h-source/admin/Application/Models/VideocardsModel.php
@@ -0,0 +1,66 @@
+<?php
+
+// h-admin, a web software to build a community of people that want to share their hardware information.
+// Copyright (C) 2010 Antonio Gallo (h-admin-copyright.txt)
+//
+// This file is part of h-admin
+//
+// h-admin is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// h-admin is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with h-admin. If not, see <http://www.gnu.org/licenses/>.
+
+if (!defined('EG')) die('Direct access not allowed!');
+
+class VideocardsModel extends BaseModel
+{
+
+ public $type = 'videocard'; //device type
+
+ public $diffFields = array(
+ 'vendor' => 'vendor',
+ 'model' => 'model name',
+ 'pci_id' => 'VendorID:ProductID',
+ 'comm_year' => 'year of commercialization',
+ 'interface' => 'interface',
+ 'distribution' => 'distribution used',
+ 'kernel' => 'kernel libre version',
+ 'video_card_works' => 'how does it work with free software?',
+ 'description' => 'model description',
+ );
+
+ public $fieldsWithBreaks = array('model description');
+
+ public function __construct()
+ {
+
+ $this->_popupItemNames = array(
+ 'vendor' => 'vendor',
+ 'comm_year' => 'comm_year',
+ 'interface' => 'interface',
+ );
+
+ $this->_popupLabels = array(
+ 'vendor' => 'vendor',
+ 'comm_year' => 'year',
+ 'interface' => 'interface',
+ );
+
+ $this->_popupWhere = array(
+ 'vendor' => 'type="videocard" and deleted="no"',
+ 'comm_year' => 'type="videocard" and deleted="no"',
+ 'interface' => 'type="videocard" and deleted="no"',
+ );
+
+ parent::__construct();
+ }
+
+} \ No newline at end of file
diff --git a/h-source/admin/Application/Models/WifiModel.php b/h-source/admin/Application/Models/WifiModel.php
new file mode 100644
index 0000000..d8c84aa
--- /dev/null
+++ b/h-source/admin/Application/Models/WifiModel.php
@@ -0,0 +1,69 @@
+<?php
+
+// h-admin, a web software to build a community of people that want to share their hardware information.
+// Copyright (C) 2010 Antonio Gallo (h-admin-copyright.txt)
+//
+// This file is part of h-admin
+//
+// h-admin is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// h-admin is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with h-admin. If not, see <http://www.gnu.org/licenses/>.
+
+if (!defined('EG')) die('Direct access not allowed!');
+
+class WifiModel extends BaseModel
+{
+
+ public $type = 'wifi'; //device type
+
+ public $diffFields = array(
+ 'vendor' => 'vendor',
+ 'model' => 'model name',
+ 'pci_id' => 'VendorID:ProductID',
+ 'comm_year' => 'year of commercialization',
+ 'interface' => 'interface',
+ 'distribution' => 'distribution used',
+ 'kernel' => 'kernel libre version',
+ 'wifi_works' => 'does it work with free software?',
+ 'description' => 'model description',
+ );
+
+ public $fieldsWithBreaks = array('model description');
+
+ public function __construct()
+ {
+
+ $this->_popupItemNames = array(
+ 'vendor' => 'vendor',
+ 'comm_year' => 'comm_year',
+ 'wifi_works' => 'wifi_works',
+ 'interface' => 'interface',
+ );
+
+ $this->_popupLabels = array(
+ 'vendor' => 'vendor',
+ 'comm_year' => 'year',
+ 'wifi_works' => 'does it work?',
+ 'interface' => 'interface',
+ );
+
+ $this->_popupWhere = array(
+ 'vendor' => 'type="wifi" and deleted="no"',
+ 'comm_year' => 'type="wifi" and deleted="no"',
+ 'wifi_works' => 'type="wifi" and deleted="no"',
+ 'interface' => 'type="wifi" and deleted="no"',
+ );
+
+ parent::__construct();
+ }
+
+} \ No newline at end of file
diff --git a/h-source/admin/Application/Modules/ModBase.php b/h-source/admin/Application/Modules/ModBase.php
new file mode 100644
index 0000000..44d25a2
--- /dev/null
+++ b/h-source/admin/Application/Modules/ModBase.php
@@ -0,0 +1,41 @@
+<?php
+
+// All EasyGiant code is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
+// See COPYRIGHT.txt and LICENSE.txt.
+
+if (!defined('EG')) die('Direct access not allowed!');
+
+//module to print an HTML link
+//extends the ModAbstract class inside the Library folder
+class ModBase extends ModAbstract {
+
+ public function render()
+ {
+ return null;
+ }
+
+ public function getHtmlClass()
+ {
+ if (isset($this->simpleXmlObj->classname))
+ {
+ return " class='".$this->simpleXmlObj->classname[0]."' ";
+ }
+ return null;
+ }
+
+ //wrap the html with a <div>
+ //look for the <div> tag in the xml in order to set the class of the div
+ public function wrapDiv($string)
+ {
+ $divOpen = "<div class='box_module'>";
+ $divClose = "</div>";
+
+ if (isset($this->simpleXmlObj->div))
+ {
+ $divOpen = "<div class='".$this->simpleXmlObj->div."'>";
+ }
+
+ return $divOpen . $string . $divClose;
+ }
+
+} \ No newline at end of file
diff --git a/h-source/admin/Application/Modules/ModImage.php b/h-source/admin/Application/Modules/ModImage.php
new file mode 100644
index 0000000..5a116b1
--- /dev/null
+++ b/h-source/admin/Application/Modules/ModImage.php
@@ -0,0 +1,45 @@
+<?php
+
+// All EasyGiant code is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
+// See COPYRIGHT.txt and LICENSE.txt.
+
+if (!defined('EG')) die('Direct access not allowed!');
+
+//module to print an HTML image
+//extends the ModBase class
+class ModImage extends ModBase {
+
+ public function widthPropertyString()
+ {
+ if (isset($this->simpleXmlObj->width))
+ {
+ return " width = '" . $this->simpleXmlObj->width ."' ";
+ }
+ return null;
+ }
+
+ public function heightPropertyString()
+ {
+ if (isset($this->simpleXmlObj->height))
+ {
+ return " height = '" . $this->simpleXmlObj->height ."' ";
+ }
+ return null;
+ }
+
+ public function titlePropertyString()
+ {
+ if (isset($this->simpleXmlObj->title))
+ {
+ return " title = '" . $this->simpleXmlObj->title ."' ";
+ }
+ return null;
+ }
+
+ public function render()
+ {
+ $link = "<img ".$this->getHtmlClass().$this->widthPropertyString().$this->heightPropertyString().$this->titlePropertyString()." src='".$this->simpleXmlObj->src[0]."'>";
+ return $this->wrapDiv($link)."\n";
+ }
+
+} \ No newline at end of file
diff --git a/h-source/admin/Application/Modules/ModLink.php b/h-source/admin/Application/Modules/ModLink.php
new file mode 100644
index 0000000..011bc78
--- /dev/null
+++ b/h-source/admin/Application/Modules/ModLink.php
@@ -0,0 +1,18 @@
+<?php
+
+// All EasyGiant code is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
+// See COPYRIGHT.txt and LICENSE.txt.
+
+if (!defined('EG')) die('Direct access not allowed!');
+
+//module to print an HTML link
+//extends the ModBase class
+class ModLink extends ModBase {
+
+ public function render()
+ {
+ $link = "<a ".$this->getHtmlClass()." href='".$this->simpleXmlObj->href[0]."'>".$this->simpleXmlObj->text[0]."</a>";
+ return $this->wrapDiv($link)."\n";
+ }
+
+} \ No newline at end of file
diff --git a/h-source/admin/Application/Modules/ModLinkimage.php b/h-source/admin/Application/Modules/ModLinkimage.php
new file mode 100644
index 0000000..8e49bbf
--- /dev/null
+++ b/h-source/admin/Application/Modules/ModLinkimage.php
@@ -0,0 +1,18 @@
+<?php
+
+// All EasyGiant code is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
+// See COPYRIGHT.txt and LICENSE.txt.
+
+if (!defined('EG')) die('Direct access not allowed!');
+
+//module to print an HTML image linking to something
+//extends the ModBase class
+class ModLinkimage extends ModImage {
+
+ public function render()
+ {
+ $link = "<a ".$this->getHtmlClass()." href='".$this->simpleXmlObj->href[0]."'><img ".$this->widthPropertyString().$this->heightPropertyString().$this->titlePropertyString()." src='".$this->simpleXmlObj->src[0]."'></a>";
+ return $this->wrapDiv($link)."\n";
+ }
+
+} \ No newline at end of file
diff --git a/h-source/admin/Application/Modules/ModRaw.php b/h-source/admin/Application/Modules/ModRaw.php
new file mode 100644
index 0000000..4ed3226
--- /dev/null
+++ b/h-source/admin/Application/Modules/ModRaw.php
@@ -0,0 +1,18 @@
+<?php
+
+// All EasyGiant code is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
+// See COPYRIGHT.txt and LICENSE.txt.
+
+if (!defined('EG')) die('Direct access not allowed!');
+
+//module to print some raw HTML
+//extends the ModBase class
+class ModRaw extends ModBase {
+
+ public function render()
+ {
+ $link = $this->simpleXmlObj->text[0];
+ return $this->wrapDiv($link)."\n";
+ }
+
+} \ No newline at end of file
diff --git a/h-source/admin/Application/Modules/index.html b/h-source/admin/Application/Modules/index.html
new file mode 100644
index 0000000..8d1c8b6
--- /dev/null
+++ b/h-source/admin/Application/Modules/index.html
@@ -0,0 +1 @@
+
diff --git a/h-source/admin/Application/Strings/Lang/It/DbCondStrings.php b/h-source/admin/Application/Strings/Lang/It/DbCondStrings.php
new file mode 100644
index 0000000..4c985cd
--- /dev/null
+++ b/h-source/admin/Application/Strings/Lang/It/DbCondStrings.php
@@ -0,0 +1,17 @@
+<?php
+
+// All EasyGiant code is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
+// See COPYRIGHT.txt and LICENSE.txt.
+
+if (!defined('EG')) die('Direct access not allowed!');
+
+//error strings in the case database conditions are not satisfied
+class Lang_It_DbCondStrings extends Lang_Eng_DbCondStrings {
+
+ //get the error string in the case that the value of the field $field is already present in the table $table
+ public function getNotUniqueString($field)
+ {
+ return "<div class='alert'>Il valore del campo <i>". $field ."</i> &egrave gi&agrave presente. Per favore scegline un altro.</div>\n";
+ }
+
+}
diff --git a/h-source/admin/Application/Strings/Lang/It/ModelStrings.php b/h-source/admin/Application/Strings/Lang/It/ModelStrings.php
new file mode 100644
index 0000000..e02013b
--- /dev/null
+++ b/h-source/admin/Application/Strings/Lang/It/ModelStrings.php
@@ -0,0 +1,19 @@
+<?php
+
+// All EasyGiant code is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
+// See COPYRIGHT.txt and LICENSE.txt.
+
+if (!defined('EG')) die('Direct access not allowed!');
+
+class Lang_It_ModelStrings extends Lang_ResultStrings {
+
+ public $string = array(
+ "error" => "<div class='alert'>Errore nella query: contatta l'amministratore!</div>\n",
+ "executed" => "<div class='executed'>operazione eseguita!</div>\n",
+ "associate" => "<div class='alert'>Problema di integrit&agrave referenziale: il record &egrave associato ad un record di una tabella figlia. Devi prima rompere l'associazione.</div>\n",
+ "no-id" => "<div class='alert'>Non &egrave definito alcun id della query</div>\n",
+ "not-linked" => "<div class='alert'>Il record non &egrave associato, non puoi dissociarlo</div>",
+ "linked" => "<div class='alert'>Il record &egrave gi&agrave associato, non puoi associarlo un'altra volta</div>"
+ );
+
+}
diff --git a/h-source/admin/Application/Strings/Lang/It/UploadStrings.php b/h-source/admin/Application/Strings/Lang/It/UploadStrings.php
new file mode 100644
index 0000000..57bcda6
--- /dev/null
+++ b/h-source/admin/Application/Strings/Lang/It/UploadStrings.php
@@ -0,0 +1,26 @@
+<?php
+
+// All EasyGiant code is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
+// See COPYRIGHT.txt and LICENSE.txt.
+
+if (!defined('EG')) die('Direct access not allowed!');
+
+class Lang_It_UploadStrings extends Lang_ResultStrings {
+
+ public $string = array(
+ "error" => "<div class='alert'>Errore: verificare i permessi del file/directory</div>\n",
+ "executed" => "<div class='executed'>Operazione eseguita!</div>\n",
+ "not-child" => "<div class='alert'>La cartella selezionata non &egrave una sotto directory della directory base</div>\n",
+ "not-dir" => "<div class='alert'>La cartella selezionata non &egrave una directory</div>\n",
+ "not-empty" => "<div class='alert'>La cartella selezionata non &egrave vuota</div>\n",
+ "no-folder-specified" => "<div class='alert'>Non &egrave stata specificata alcuna cartella</div>\n",
+ "not-writable" => "<div class='alert'>La cartella non &egrave scrivibile</div>\n",
+ "not-writable-file" => "<div class='alert'>Il file non &egrave scrivibile</div>\n",
+ "dir-exists" => "<div class='alert'>Esiste gi&agrave una directory con lo stesso nome</div>\n",
+ "no-upload-file" => "<div class='alert'>Non c'&egrave alcun file di cui fare l'upload</div>\n",
+ "size-over" => "<div class='alert'>La dimensione del file &egrave troppo grande</div>\n",
+ "not-allowed-ext" => "<div class='alert'>L'estensione del file che vuoi caricare non &egrave consentita</div>\n",
+ "file-exists" => "<div class='alert'>Esiste gi&agrave un file con lo stesso nome</div>\n",
+ );
+
+}
diff --git a/h-source/admin/Application/Strings/Lang/It/ValCondStrings.php b/h-source/admin/Application/Strings/Lang/It/ValCondStrings.php
new file mode 100644
index 0000000..a54c650
--- /dev/null
+++ b/h-source/admin/Application/Strings/Lang/It/ValCondStrings.php
@@ -0,0 +1,69 @@
+<?php
+
+// All EasyGiant code is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
+// See COPYRIGHT.txt and LICENSE.txt.
+
+if (!defined('EG')) die('Direct access not allowed!');
+
+class Lang_It_ValCondStrings extends Lang_Eng_ValCondStrings {
+
+ //if the element is not defined
+ public function getNotDefinedResultString($element)
+ {
+ return "<div class='alert'>". $element ." non &egrave stato definito</div>\n";
+ }
+
+ //if the elements are not equal
+ public function getNotEqualResultString($element)
+ {
+ return "<div class='alert'>Differenti valori: $element</div>\n";
+ }
+
+ //if the element is not alphabetic
+ public function getNotAlphabeticResultString($element)
+ {
+ return "<div class='alert'>".$element." deve essere una stringa di soli caratteri alfabetici</div>\n";
+ }
+
+ //if the element is not alphanumeric
+ public function getNotAlphanumericResultString($element)
+ {
+ return "<div class='alert'>".$element." deve essere una stringa di soli caratteri alfanumerici</div>\n";
+ }
+
+ //if the element is not a decimal digit
+ public function getNotDecimalDigitResultString($element)
+ {
+ return "<div class='alert'>".$element." deve essere una stringa di soli numeri decimali</div>\n";
+ }
+
+ //if the element has the mail format
+ public function getNotMailFormatResultString($element)
+ {
+ return "<div class='alert'>".$element." non sembra un indirizzo e-mail</div>\n";
+ }
+
+ //if the element is numeric
+ public function getNotNumericResultString($element)
+ {
+ return "<div class='alert'>".$element." deve essere un numero</div>\n";
+ }
+
+ //if the element (string) length exceeds the value of characters (defined by $maxLength)
+ public function getLengthExceedsResultString($element,$maxLength)
+ {
+ return "<div class='alert'>".$element." non deve essere composto da pi&ugrave di $maxLength caratteri</div>\n";
+ }
+
+ //if the element is one of the strings indicated by $stringList (a comma-separated list of strings)
+ public function getIsForbiddenStringResultString($element,$stringList)
+ {
+ return "<div class='alert'>".$element." non pu&ograve assumere uno dei seguenti valori: $stringList</div>\n";
+ }
+
+ //if the element is not one of the strings indicated by $stringList (a comma-separated list of strings)
+ public function getIsNotStringResultString($element,$stringList)
+ {
+ return "<div class='alert'>".$element." deve assumere uno dei seguenti valori: $stringList</div>\n";
+ }
+}
diff --git a/h-source/admin/Application/Strings/Lang/It/index.html b/h-source/admin/Application/Strings/Lang/It/index.html
new file mode 100644
index 0000000..8d1c8b6
--- /dev/null
+++ b/h-source/admin/Application/Strings/Lang/It/index.html
@@ -0,0 +1 @@
+
diff --git a/h-source/admin/Application/Strings/Lang/index.html b/h-source/admin/Application/Strings/Lang/index.html
new file mode 100644
index 0000000..8d1c8b6
--- /dev/null
+++ b/h-source/admin/Application/Strings/Lang/index.html
@@ -0,0 +1 @@
+
diff --git a/h-source/admin/Application/Strings/index.html b/h-source/admin/Application/Strings/index.html
new file mode 100644
index 0000000..8d1c8b6
--- /dev/null
+++ b/h-source/admin/Application/Strings/index.html
@@ -0,0 +1 @@
+
diff --git a/h-source/admin/Application/Views/Adminboxes/main.php b/h-source/admin/Application/Views/Adminboxes/main.php
new file mode 100644
index 0000000..7d71709
--- /dev/null
+++ b/h-source/admin/Application/Views/Adminboxes/main.php
@@ -0,0 +1,25 @@
+<?php if (!defined('EG')) die('Direct access not allowed!'); ?>
+
+<?php
+
+// h-admin, a web software to build a community of people that want to share their hardware information.
+// Copyright (C) 2010 Antonio Gallo (h-admin-copyright.txt)
+//
+// This file is part of h-admin
+//
+// h-admin is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// h-admin is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with h-admin. If not, see <http://www.gnu.org/licenses/>.
+
+?>
+
+<?php echo $scaffold;?> \ No newline at end of file
diff --git a/h-source/admin/Application/Views/Admindeletion/main.php b/h-source/admin/Application/Views/Admindeletion/main.php
new file mode 100644
index 0000000..7d71709
--- /dev/null
+++ b/h-source/admin/Application/Views/Admindeletion/main.php
@@ -0,0 +1,25 @@
+<?php if (!defined('EG')) die('Direct access not allowed!'); ?>
+
+<?php
+
+// h-admin, a web software to build a community of people that want to share their hardware information.
+// Copyright (C) 2010 Antonio Gallo (h-admin-copyright.txt)
+//
+// This file is part of h-admin
+//
+// h-admin is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// h-admin is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with h-admin. If not, see <http://www.gnu.org/licenses/>.
+
+?>
+
+<?php echo $scaffold;?> \ No newline at end of file
diff --git a/h-source/admin/Application/Views/Adminhardware/ask.php b/h-source/admin/Application/Views/Adminhardware/ask.php
new file mode 100644
index 0000000..1368dca
--- /dev/null
+++ b/h-source/admin/Application/Views/Adminhardware/ask.php
@@ -0,0 +1,53 @@
+<?php if (!defined('EG')) die('Direct access not allowed!'); ?>
+
+<?php
+
+// h-admin, a web software to build a community of people that want to share their hardware information.
+// Copyright (C) 2010 Antonio Gallo (h-admin-copyright.txt)
+//
+// This file is part of h-admin
+//
+// h-admin is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// h-admin is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with h-admin. If not, see <http://www.gnu.org/licenses/>.
+
+?>
+
+<div class='mainMenu'>
+ <?php echo $menu;?>
+</div>
+
+<div class="ask_for_deletion_external">
+
+ <?php foreach ($table as $row) { ?>
+ <div class="ask_for_deletion_internal">
+ <div class="ask_for_deletion_item">
+ <b>id hardware to delete</b>: <?php echo $row['deletion']['id_hard'];?>
+ </div>
+ <div class="ask_for_deletion_item">
+ <b>requested by</b>: <?php echo getUserName($row['deletion']['created_by']);?>
+ </div>
+ <div class="ask_for_deletion_item">
+ <b>at</b>: <?php echo smartDate($row['deletion']['creation_date']);?>
+ </div>
+ <div class="ask_for_deletion_item">
+ <b>why</b>: <?php echo $row['deletion']['object'];?>
+ </div>
+ <div class="ask_for_deletion_item">
+ <b>hardware duplicated</b>: <?php echo $row['deletion']['id_duplicate'];?>
+ </div>
+ <div class="ask_for_deletion_item">
+ <b>message</b>: <?php echo $row['deletion']['message'];?>
+ </div>
+ </div>
+ <?php } ?>
+</div> \ No newline at end of file
diff --git a/h-source/admin/Application/Views/Adminhardware/main.php b/h-source/admin/Application/Views/Adminhardware/main.php
new file mode 100644
index 0000000..7d71709
--- /dev/null
+++ b/h-source/admin/Application/Views/Adminhardware/main.php
@@ -0,0 +1,25 @@
+<?php if (!defined('EG')) die('Direct access not allowed!'); ?>
+
+<?php
+
+// h-admin, a web software to build a community of people that want to share their hardware information.
+// Copyright (C) 2010 Antonio Gallo (h-admin-copyright.txt)
+//
+// This file is part of h-admin
+//
+// h-admin is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// h-admin is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with h-admin. If not, see <http://www.gnu.org/licenses/>.
+
+?>
+
+<?php echo $scaffold;?> \ No newline at end of file
diff --git a/h-source/admin/Application/Views/Adminhistory/main.php b/h-source/admin/Application/Views/Adminhistory/main.php
new file mode 100644
index 0000000..7d71709
--- /dev/null
+++ b/h-source/admin/Application/Views/Adminhistory/main.php
@@ -0,0 +1,25 @@
+<?php if (!defined('EG')) die('Direct access not allowed!'); ?>
+
+<?php
+
+// h-admin, a web software to build a community of people that want to share their hardware information.
+// Copyright (C) 2010 Antonio Gallo (h-admin-copyright.txt)
+//
+// This file is part of h-admin
+//
+// h-admin is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// h-admin is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with h-admin. If not, see <http://www.gnu.org/licenses/>.
+
+?>
+
+<?php echo $scaffold;?> \ No newline at end of file
diff --git a/h-source/admin/Application/Views/Adminissues/main.php b/h-source/admin/Application/Views/Adminissues/main.php
new file mode 100644
index 0000000..1df2110
--- /dev/null
+++ b/h-source/admin/Application/Views/Adminissues/main.php
@@ -0,0 +1,36 @@
+<?php if (!defined('EG')) die('Direct access not allowed!'); ?>
+
+<?php
+
+// h-admin, a web software to build a community of people that want to share their hardware information.
+// Copyright (C) 2010 Antonio Gallo (h-admin-copyright.txt)
+//
+// This file is part of h-admin
+//
+// h-admin is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// h-admin is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with h-admin. If not, see <http://www.gnu.org/licenses/>.
+
+?>
+
+ <script>
+
+ $(document).ready(function() {
+
+ $("#bb_code").markItUp(mySettings);
+ $("#bb_code_notice").markItUp(mySettings);
+
+ });
+
+ </script>
+
+<?php echo $scaffold;?> \ No newline at end of file
diff --git a/h-source/admin/Application/Views/Adminmessages/main.php b/h-source/admin/Application/Views/Adminmessages/main.php
new file mode 100644
index 0000000..0ce6983
--- /dev/null
+++ b/h-source/admin/Application/Views/Adminmessages/main.php
@@ -0,0 +1,35 @@
+<?php if (!defined('EG')) die('Direct access not allowed!'); ?>
+
+<?php
+
+// h-admin, a web software to build a community of people that want to share their hardware information.
+// Copyright (C) 2010 Antonio Gallo (h-admin-copyright.txt)
+//
+// This file is part of h-admin
+//
+// h-admin is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// h-admin is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with h-admin. If not, see <http://www.gnu.org/licenses/>.
+
+?>
+
+ <script>
+
+ $(document).ready(function() {
+
+ $("#bb_code").markItUp(mySettings);
+
+ });
+
+ </script>
+
+<?php echo $scaffold;?> \ No newline at end of file
diff --git a/h-source/admin/Application/Views/Adminnews/main.php b/h-source/admin/Application/Views/Adminnews/main.php
new file mode 100644
index 0000000..5b603f2
--- /dev/null
+++ b/h-source/admin/Application/Views/Adminnews/main.php
@@ -0,0 +1,35 @@
+<?php if (!defined('EG')) die('Direct access not allowed!'); ?>
+
+<?php
+
+// h-admin, a web software to build a community of people that want to share their hardware information.
+// Copyright (C) 2010 Antonio Gallo (h-admin-copyright.txt)
+//
+// This file is part of h-admin
+//
+// h-admin is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// h-admin is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with h-admin. If not, see <http://www.gnu.org/licenses/>.
+
+?>
+
+<script>
+
+ $(document).ready(function() {
+
+ $("#bb_code").markItUp(mySettings);
+
+ });
+
+</script>
+
+<?php echo $scaffold;?> \ No newline at end of file
diff --git a/h-source/admin/Application/Views/Adminparams/form.php b/h-source/admin/Application/Views/Adminparams/form.php
new file mode 100755
index 0000000..7d71709
--- /dev/null
+++ b/h-source/admin/Application/Views/Adminparams/form.php
@@ -0,0 +1,25 @@
+<?php if (!defined('EG')) die('Direct access not allowed!'); ?>
+
+<?php
+
+// h-admin, a web software to build a community of people that want to share their hardware information.
+// Copyright (C) 2010 Antonio Gallo (h-admin-copyright.txt)
+//
+// This file is part of h-admin
+//
+// h-admin is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// h-admin is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with h-admin. If not, see <http://www.gnu.org/licenses/>.
+
+?>
+
+<?php echo $scaffold;?> \ No newline at end of file
diff --git a/h-source/admin/Application/Views/Adminpassword/form.php b/h-source/admin/Application/Views/Adminpassword/form.php
new file mode 100755
index 0000000..640b6e5
--- /dev/null
+++ b/h-source/admin/Application/Views/Adminpassword/form.php
@@ -0,0 +1,9 @@
+<?php if (!defined('EG')) die('Direct access not allowed!'); ?>
+
+<div class='mainMenu'>
+ <?php echo $menù;?>
+</div>
+
+<?php echo $notice;?>
+
+<?php echo $form;?> \ No newline at end of file
diff --git a/h-source/admin/Application/Views/Adminregusers/associate.php b/h-source/admin/Application/Views/Adminregusers/associate.php
new file mode 100644
index 0000000..9350d3a
--- /dev/null
+++ b/h-source/admin/Application/Views/Adminregusers/associate.php
@@ -0,0 +1,54 @@
+<?php if (!defined('EG')) die('Direct access not allowed!'); ?>
+
+<?php
+
+// h-admin, a web software to build a community of people that want to share their hardware information.
+// Copyright (C) 2010 Antonio Gallo (h-admin-copyright.txt)
+//
+// This file is part of h-admin
+//
+// h-admin is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// h-admin is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with h-admin. If not, see <http://www.gnu.org/licenses/>.
+
+?>
+
+<div class='mainMenu'>
+ <?php echo $menu;?>
+</div>
+
+<?php echo $notice;?>
+
+<div class='groupsList'>
+ Associate the user <b><?php echo $user;?></b> to some groups:<br /><br />
+ <form action = '<?php echo $action;?>' method = 'POST'>
+
+ <select name='boxIdentifier'>
+ <?php foreach ($groups as $name => $value) {?>
+ <option value='<?php echo $value;?>'><?php echo $name;?></option>
+ <?php } ?>
+ </select>
+ <input type='submit' name='associateAction' value='associate'>
+ <input type='submit' name='dissociateAction' value='dissociate'>
+ <input type='hidden' name='id_user' value='<?php echo (int)$_POST['id_user'];?>'>
+ </form>
+</div>
+
+<br /><hr>
+<div class='groupsList'>
+ The user <b><?php echo $user;?></b> is inserted inside the following Groups:
+ <ul>
+ <?php foreach ($groupsUser as $g) {?>
+ <li><?php echo $g['reggroups']['name'];?></li>
+ <?php } ?>
+ </ul>
+</div> \ No newline at end of file
diff --git a/h-source/admin/Application/Views/Adminregusers/main.php b/h-source/admin/Application/Views/Adminregusers/main.php
new file mode 100644
index 0000000..7d71709
--- /dev/null
+++ b/h-source/admin/Application/Views/Adminregusers/main.php
@@ -0,0 +1,25 @@
+<?php if (!defined('EG')) die('Direct access not allowed!'); ?>
+
+<?php
+
+// h-admin, a web software to build a community of people that want to share their hardware information.
+// Copyright (C) 2010 Antonio Gallo (h-admin-copyright.txt)
+//
+// This file is part of h-admin
+//
+// h-admin is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// h-admin is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with h-admin. If not, see <http://www.gnu.org/licenses/>.
+
+?>
+
+<?php echo $scaffold;?> \ No newline at end of file
diff --git a/h-source/admin/Application/Views/Admintalk/main.php b/h-source/admin/Application/Views/Admintalk/main.php
new file mode 100644
index 0000000..7d71709
--- /dev/null
+++ b/h-source/admin/Application/Views/Admintalk/main.php
@@ -0,0 +1,25 @@
+<?php if (!defined('EG')) die('Direct access not allowed!'); ?>
+
+<?php
+
+// h-admin, a web software to build a community of people that want to share their hardware information.
+// Copyright (C) 2010 Antonio Gallo (h-admin-copyright.txt)
+//
+// This file is part of h-admin
+//
+// h-admin is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// h-admin is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with h-admin. If not, see <http://www.gnu.org/licenses/>.
+
+?>
+
+<?php echo $scaffold;?> \ No newline at end of file
diff --git a/h-source/admin/Application/Views/Adminusers/associate.php b/h-source/admin/Application/Views/Adminusers/associate.php
new file mode 100644
index 0000000..b0f6672
--- /dev/null
+++ b/h-source/admin/Application/Views/Adminusers/associate.php
@@ -0,0 +1,54 @@
+<?php if (!defined('EG')) die('Direct access not allowed!'); ?>
+
+<?php
+
+// h-admin, a web software to build a community of people that want to share their hardware information.
+// Copyright (C) 2010 Antonio Gallo (h-admin-copyright.txt)
+//
+// This file is part of h-admin
+//
+// h-admin is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// h-admin is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with h-admin. If not, see <http://www.gnu.org/licenses/>.
+
+?>
+
+<div class='mainMenu'>
+ <?php echo $menu;?>
+</div>
+
+<?php echo $notice;?>
+
+<div class='groupsList'>
+ Associate the user <b><?php echo $user;?></b> to some groups:<br /><br />
+ <form action = '<?php echo $action;?>' method = 'POST'>
+
+ <select name='boxIdentifier'>
+ <?php foreach ($groups as $name => $value) {?>
+ <option value='<?php echo $value;?>'><?php echo $name;?></option>
+ <?php } ?>
+ </select>
+ <input type='submit' name='associateAction' value='associate'>
+ <input type='submit' name='dissociateAction' value='dissociate'>
+ <input type='hidden' name='id_user' value='<?php echo (int)$_POST['id_user'];?>'>
+ </form>
+</div>
+
+<br /><hr>
+<div class='groupsList'>
+ The user <b><?php echo $user;?></b> is inserted inside the following Groups:
+ <ul>
+ <?php foreach ($groupsUser as $g) {?>
+ <li><?php echo $g['admingroups']['name'];?></li>
+ <?php } ?>
+ </ul>
+</div> \ No newline at end of file
diff --git a/h-source/admin/Application/Views/Adminusers/forceout.php b/h-source/admin/Application/Views/Adminusers/forceout.php
new file mode 100755
index 0000000..f4b901d
--- /dev/null
+++ b/h-source/admin/Application/Views/Adminusers/forceout.php
@@ -0,0 +1,29 @@
+<?php if (!defined('EG')) die('Direct access not allowed!'); ?>
+
+<?php
+
+// h-admin, a web software to build a community of people that want to share their hardware information.
+// Copyright (C) 2010 Antonio Gallo (h-admin-copyright.txt)
+//
+// This file is part of h-admin
+//
+// h-admin is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// h-admin is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with h-admin. If not, see <http://www.gnu.org/licenses/>.
+
+?>
+
+<div class='mainMenu'>
+ <?php echo $menù;?>
+</div>
+
+<?php echo $notice;?>
diff --git a/h-source/admin/Application/Views/Adminusers/login.php b/h-source/admin/Application/Views/Adminusers/login.php
new file mode 100755
index 0000000..c005f35
--- /dev/null
+++ b/h-source/admin/Application/Views/Adminusers/login.php
@@ -0,0 +1,45 @@
+<?php if (!defined('EG')) die('Direct access not allowed!'); ?>
+
+<?php
+
+// h-admin, a web software to build a community of people that want to share their hardware information.
+// Copyright (C) 2010 Antonio Gallo (h-admin-copyright.txt)
+//
+// This file is part of h-admin
+//
+// h-admin is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// h-admin is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with h-admin. If not, see <http://www.gnu.org/licenses/>.
+
+?>
+
+<?php echo $notice; ?>
+
+<div class="login_box">
+ <form action = '<?php echo $action;?>' method = 'POST'>
+
+ <table>
+ <tr>
+ <td>Username</td>
+ <td><input type='text' name='username'></td>
+ </tr>
+ <tr>
+ <td>Password</td>
+ <td><input type='password' name='password'></td>
+ </tr>
+ <tr>
+ <td><input type = 'submit' value = 'login'></td>
+ </tr>
+ </table>
+
+ </form>
+</div>
diff --git a/h-source/admin/Application/Views/Adminusers/logout.php b/h-source/admin/Application/Views/Adminusers/logout.php
new file mode 100755
index 0000000..81ec4db
--- /dev/null
+++ b/h-source/admin/Application/Views/Adminusers/logout.php
@@ -0,0 +1,29 @@
+<?php if (!defined('EG')) die('Direct access not allowed!'); ?>
+
+<?php
+
+// h-admin, a web software to build a community of people that want to share their hardware information.
+// Copyright (C) 2010 Antonio Gallo (h-admin-copyright.txt)
+//
+// This file is part of h-admin
+//
+// h-admin is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// h-admin is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with h-admin. If not, see <http://www.gnu.org/licenses/>.
+
+?>
+
+<div class="logout_box">
+ <div><?php echo $notice;?></div>
+
+ <div><a href="<?php echo $login;?>">login</a></div>
+</div> \ No newline at end of file
diff --git a/h-source/admin/Application/Views/Adminusers/main.php b/h-source/admin/Application/Views/Adminusers/main.php
new file mode 100644
index 0000000..7d71709
--- /dev/null
+++ b/h-source/admin/Application/Views/Adminusers/main.php
@@ -0,0 +1,25 @@
+<?php if (!defined('EG')) die('Direct access not allowed!'); ?>
+
+<?php
+
+// h-admin, a web software to build a community of people that want to share their hardware information.
+// Copyright (C) 2010 Antonio Gallo (h-admin-copyright.txt)
+//
+// This file is part of h-admin
+//
+// h-admin is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// h-admin is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with h-admin. If not, see <http://www.gnu.org/licenses/>.
+
+?>
+
+<?php echo $scaffold;?> \ No newline at end of file
diff --git a/h-source/admin/Application/Views/footer_back.php b/h-source/admin/Application/Views/footer_back.php
new file mode 100755
index 0000000..fa9269c
--- /dev/null
+++ b/h-source/admin/Application/Views/footer_back.php
@@ -0,0 +1,27 @@
+<?php if (!defined('EG')) die('Direct access not allowed!'); ?>
+
+<?php
+
+// h-admin, a web software to build a community of people that want to share their hardware information.
+// Copyright (C) 2010 Antonio Gallo (h-admin-copyright.txt)
+//
+// This file is part of h-admin
+//
+// h-admin is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// h-admin is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with h-admin. If not, see <http://www.gnu.org/licenses/>.
+
+?>
+
+</div> <!--container-->
+</body>
+</html>
diff --git a/h-source/admin/Application/Views/header_back.php b/h-source/admin/Application/Views/header_back.php
new file mode 100755
index 0000000..862847d
--- /dev/null
+++ b/h-source/admin/Application/Views/header_back.php
@@ -0,0 +1,94 @@
+<?php if (!defined('EG')) die('Direct access not allowed!'); ?>
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+<?php
+
+// h-admin, a web software to build a community of people that want to share their hardware information.
+// Copyright (C) 2010 Antonio Gallo (h-admin-copyright.txt)
+//
+// This file is part of h-admin
+//
+// h-admin is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// h-admin is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with h-admin. If not, see <http://www.gnu.org/licenses/>.
+
+?>
+<head>
+
+ <title>Admin</title>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
+ <link rel="stylesheet" type="text/css" href="<?php echo $this->baseUrlSrc.'/Public/Css/scaffold.css';?>"></style>
+ <link rel="stylesheet" type="text/css" href="<?php echo $this->baseUrlSrc.'/Public/Css/mainmenu.css';?>"></style>
+ <link rel="stylesheet" type="text/css" href="<?php echo $this->baseUrlSrc.'/Public/Css/popupmenu.css';?>"></style>
+ <link rel="stylesheet" type="text/css" href="<?php echo $this->baseUrlSrc.'/Public/Css/form.css';?>"></style>
+ <link rel="stylesheet" type="text/css" href="<?php echo $this->baseUrlSrc.'/Public/Css/pagelist.css';?>"></style>
+ <link rel="stylesheet" type="text/css" href="<?php echo $this->baseUrlSrc.'/Public/Css/files.css';?>"></style>
+ <link rel="stylesheet" type="text/css" href="<?php echo $this->baseUrlSrc.'/Public/Css/login.css';?>"></style>
+
+ <link rel="stylesheet" type="text/css" href="<?php echo $this->baseUrlSrc.'/Public/Css/panel.css';?>"></style>
+
+ <!--[if IE]>
+ <link rel="stylesheet" type="text/css" href="<?php echo $this->baseUrl?>/Public/Css/explorer.css">
+ <![endif] -->
+
+ <script type="text/javascript" src="<?php echo $this->baseUrl;?>/Public/Js/jquery/jquery-1.4.2.min.js"></script>
+
+ <!--markitup-->
+ <script type="text/javascript" src="<?php echo $this->baseUrl;?>/Public/Js/markitup/jquery.markitup.js"></script>
+ <script type="text/javascript" src="<?php echo $this->baseUrl;?>/Public/Js/markitup/sets/bbcode/set.js"></script>
+
+ <!-- markItUp! skin -->
+ <link rel="stylesheet" type="text/css" href="<?php echo $this->baseUrl;?>/Public/Js/markitup/skins/simple/style.css" />
+ <!-- markItUp! toolbar skin -->
+ <link rel="stylesheet" type="text/css" href="<?php echo $this->baseUrl;?>/Public/Js/markitup/sets/bbcode/style.css" />
+
+ <style type='text/css'>
+
+ div#container{
+ text-align: left;
+ margin:0px;
+ }
+
+ .ask_for_deletion_internal
+ {
+ margin:10px;
+ background:#B0E0E6;
+ padding:10px;
+ }
+ .ask_for_deletion_item
+ {
+ font:normal 15px/1.3 sans-serif,arial,Verdana;
+ margin:5px;
+ }
+ </style>
+
+ <script>
+
+ $(document).ready(function(){
+
+ $(".delForm form").click(function () {
+ if (window.confirm("do you really want to delete this record?")) {
+ return true;
+ }
+ return false;
+ });
+
+ });
+
+ </script>
+
+</head>
+
+<body>
+
+<div id="container">
+
diff --git a/h-source/admin/Application/Views/panel.php b/h-source/admin/Application/Views/panel.php
new file mode 100755
index 0000000..1fff0b6
--- /dev/null
+++ b/h-source/admin/Application/Views/panel.php
@@ -0,0 +1,55 @@
+<?php if (!defined('EG')) die('Direct access not allowed!'); ?>
+
+<?php
+
+// h-admin, a web software to build a community of people that want to share their hardware information.
+// Copyright (C) 2010 Antonio Gallo (h-admin-copyright.txt)
+//
+// This file is part of h-admin
+//
+// h-admin is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// h-admin is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with h-admin. If not, see <http://www.gnu.org/licenses/>.
+
+?>
+
+<div class="mainPanel">
+
+ <div class='mainMenu'>
+ <div class='logoutButton'>
+ <a href ="<?php echo Url::getRoot('adminusers/logout');?>">LOGOUT</a>
+ </div>
+ </div>
+
+ <div class='usersLoggedList'>
+ Users logged:
+ <?php foreach ($logged as $user) {?>
+ <b><?php echo $user.' ';?></b>
+ <?php } ?>
+ </div>
+
+ <ul class='panelApplicationList'>
+ <li><a href="<?php echo Url::getRoot('adminusers/main/1/undef/'.$token);?>">Admin users</a></li>
+ <li><a href="<?php echo Url::getRoot('adminpassword/form/'.$token);?>">Password</a></li>
+ <li><a href="<?php echo Url::getRoot('adminhardware/main/1/undef/undef/undef/'.$token);?>">Hardware</a></li>
+ <li><a href="<?php echo Url::getRoot('admindeletion/main/1/undef/'.$token);?>">Ask for deletion</a></li>
+ <li><a href="<?php echo Url::getRoot('adminissues/main/1/undef/undef/undef/undef/'.$token);?>">Issues</a></li>
+ <li><a href="<?php echo Url::getRoot('adminmessages/main/1/undef/no/'.$token);?>">Messages to Issues</a></li>
+ <li><a href="<?php echo Url::getRoot('admintalk/main/1/'.$token);?>">Talk</a></li>
+ <li><a href="<?php echo Url::getRoot('adminregusers/main/1/undef/undef/undef/'.$token);?>">Registered users</a></li>
+ <li><a href="<?php echo Url::getRoot('adminparams/form/'.$token);?>">Parameters</a></li>
+ <li><a href="<?php echo Url::getRoot('adminnews/main/1/'.$token);?>">News</a></li>
+ <li><a href="<?php echo Url::getRoot('adminboxes/main/1/'.$token);?>">Boxes</a></li>
+ <li><a href="<?php echo Url::getRoot('adminhistory/main/1/undef/undef/undef/'.$token);?>">Moderators' actions history</a></li>
+ </ul>
+
+</div> \ No newline at end of file
diff --git a/h-source/admin/Application/index.html b/h-source/admin/Application/index.html
new file mode 100644
index 0000000..8d1c8b6
--- /dev/null
+++ b/h-source/admin/Application/index.html
@@ -0,0 +1 @@
+
diff --git a/h-source/admin/COPYRIGHT.txt b/h-source/admin/COPYRIGHT.txt
new file mode 100755
index 0000000..63dbdc9
--- /dev/null
+++ b/h-source/admin/COPYRIGHT.txt
@@ -0,0 +1,24 @@
+EasyGiant is a PHP framework for creating and managing dynamic content
+Copyright (C) 2009 - 2010 Antonio Gallo
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+
+EasyGiant includes works distributed under the licenses listed below.
+
+FreeFont
+-------
+License: GNU GPL version 3 or later
+Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+link: http://savannah.gnu.org/projects/freefont/
diff --git a/h-source/admin/Config/Autoload.php b/h-source/admin/Config/Autoload.php
new file mode 100644
index 0000000..56bb9f6
--- /dev/null
+++ b/h-source/admin/Config/Autoload.php
@@ -0,0 +1,23 @@
+<?php
+
+// All EasyGiant code is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
+// See COPYRIGHT.txt and LICENSE.txt.
+
+if (!defined('EG')) die('Direct access not allowed!');
+
+
+//class containing all the PHP files that have to be loaded at the beginning of the EasyGiant execution
+//the files have to be saved in Application/Include
+//all the files have to be PHP files!!
+class Autoload
+{
+
+ public static $files = array(
+ 'params.php',
+ 'distributions.php',
+ 'myFunctions.php',
+ 'hardware.php',
+ 'languages.php',
+ );
+
+} \ No newline at end of file
diff --git a/h-source/admin/Config/Reporting.php b/h-source/admin/Config/Reporting.php
new file mode 100755
index 0000000..3f8d858
--- /dev/null
+++ b/h-source/admin/Config/Reporting.php
@@ -0,0 +1,41 @@
+<?php
+
+// All EasyGiant code is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
+// See COPYRIGHT.txt and LICENSE.txt.
+
+if (!defined('EG')) die('Direct access not allowed!');
+
+
+//ERROR REPORTING DIRECTIVES
+
+//set RUNTIME_CONFIGURATION to true if you can't access the php.ini file of your PHP installation and you need to modify some PHP directives
+//set RUNTIME_CONFIGURATION to false if you can access the php.ini file. In this case, modify the PHP directives in the php.ini file.
+define ('RUNTIME_CONFIGURATION',true);
+
+// !!! the following four directives will be applied only if RUNTIME_CONFIGURATION has been set to true !!!
+
+//set the php.ini error_reporting directive
+define ('ERROR_REPORTING_DIRECTIVE',E_ALL);
+
+//set the php.ini display_errors directive
+//set to On or Off
+define ('DISPLAY_ERRORS','Off');
+
+//set if the error file (see the next directive) has to be created or not
+//set ERROR_REPORTING_FILE to true if you want that EasyGiant saves the errors in the LOG_ERROR_FILE (next), otherwise set ERROR_REPORTING_FILE to false
+define ('ERROR_REPORTING_FILE',false);
+
+//only if ERROR_REPORTING_FILE has been set to true
+//set the file where the errors will be saved
+//default: EasyGiant_root/Logs/Errors.log
+//check that the LOG_ERROR_FILE is writeble (by the apache user if you are using mod_apache)
+define ('LOG_ERROR_FILE','default');
+
+
+//max length of each $_POST element
+//set MAX_POST_LENGTH equal to 0 if you don't want any checks upon the $_POST elements
+define ('MAX_POST_LENGTH',50000);
+
+//max length of the REQUEST_URI
+//set MAX_REQUEST_URI_LENGTH equal to 0 if you don't want to set an upper limit in the length of the REQUEST_URI
+define ('MAX_REQUEST_URI_LENGTH',200);
diff --git a/h-source/admin/Config/Restricted.php b/h-source/admin/Config/Restricted.php
new file mode 100755
index 0000000..9684f08
--- /dev/null
+++ b/h-source/admin/Config/Restricted.php
@@ -0,0 +1,94 @@
+<?php
+
+// All EasyGiant code is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
+// See COPYRIGHT.txt and LICENSE.txt.
+
+if (!defined('EG')) die('Direct access not allowed!');
+
+
+
+//RESRICTED ACCESS PARAMETERS
+
+//define the hash algoritm to be used in order to protect your password
+//only md5 and sha1 are supported
+define('PASSWORD_HASH','sha1');
+
+
+
+//ADMINISTRATOR USERS LOGIN DIRECTIVES:
+
+//time that has to pass after a login failure before the user is allowed to try to login another time (in seconds)
+define('ADMIN_TIME_AFTER_FAILURE','5');
+
+//redirect to panel when successfully logged in:
+define('ADMIN_PANEL_CONTROLLER', 'panel');
+define('ADMIN_PANEL_MAIN_ACTION', 'main');
+
+//redirect to login form if access not allowed:
+define('ADMIN_USERS_CONTROLLER', 'adminusers');
+define('ADMIN_USERS_LOGIN_ACTION', 'login');
+
+//admin cookie:
+define('ADMIN_COOKIE_NAME','uid');
+define('ADMIN_SESSION_EXPIRE', '3600');
+define('ADMIN_COOKIE_PATH', '/');
+define('ADMIN_COOKIE_DOMAIN', '');
+define('ADMIN_COOKIE_SECURE', false);
+
+//tables:
+define('ADMIN_USERS_TABLE','adminusers');
+define('ADMIN_GROUPS_TABLE','admingroups');
+define('ADMIN_SESSIONS_TABLE','adminsessions');
+define('ADMIN_MANYTOMANY_TABLE','adminusers_groups');
+define('ADMIN_ACCESSES_TABLE','accesses');
+
+//hijacking checks
+define('ADMIN_HIJACKING_CHECK',true); //can be true or false
+//session hijacking
+//set ADMIN_ON_HIJACKING_EVENT equal to 'forceout' if you want to cause the logout of the user if there is the suspect of a session hijacking
+//set ADMIN_ON_HIJACKING_EVENT equal to 'redirect' if you want to redirect the user to the ADMIN_HIJACKING_ACTION (see later) if there is the suspect of a session hijacking
+define('ADMIN_ON_HIJACKING_EVENT','forceout'); //it can be 'forceout' or 'redirect'
+//only if ADMIN_ON_HIJACKING_EVENT = 'redirect'
+//redirect the user to ADMIN_USERS_CONTROLLER/ADMIN_HIJACKING_ACTION if there is the suspect of a session hijacking
+define('ADMIN_HIJACKING_ACTION','retype');
+
+
+
+
+//REGISTERED USERS LOGIN DIRECTIVES:
+
+//time that has to pass after a login failure before the user is allowed to try to login another time (in seconds)
+define('REG_TIME_AFTER_FAILURE','5');
+
+//redirect to home when successfully logged in:
+define('REG_PANEL_CONTROLLER', 'home');
+define('REG_PANEL_MAIN_ACTION', 'index');
+
+//redirect to login form if access not allowed:
+define('REG_USERS_CONTROLLER', 'users');
+define('REG_USERS_LOGIN_ACTION', 'login');
+
+//registered cookie:
+//NB: REG_COOKIE_NAME must be different from ADMIN_COOKIE_NAME!!!
+define('REG_COOKIE_NAME','uidr');
+define('REG_SESSION_EXPIRE', '3600');
+define('REG_COOKIE_PATH', '/');
+define('REG_COOKIE_DOMAIN', '');
+define('REG_COOKIE_SECURE', false);
+
+//tables:
+define('REG_USERS_TABLE','regusers');
+define('REG_GROUPS_TABLE','reggroups');
+define('REG_SESSIONS_TABLE','regsessions');
+define('REG_MANYTOMANY_TABLE','regusers_groups');
+define('REG_ACCESSES_TABLE','regaccesses');
+
+//hijacking checks
+define('REG_HIJACKING_CHECK',true); //can be true or false
+//session hijacking
+//set ADMIN_ON_HIJACKING_EVENT equal to 'forceout' if you want to cause the logout of the user if there is the suspect of a session hijacking
+//set ADMIN_ON_HIJACKING_EVENT equal to 'redirect' if you want to redirect the user to the ADMIN_HIJACKING_ACTION (see later) if there is the suspect of a session hijacking
+define('REG_ON_HIJACKING_EVENT','forceout'); //it can be 'forceout' or 'redirect'
+//only if ADMIN_ON_HIJACKING_EVENT = 'redirect'
+//redirect the user to ADMIN_USERS_CONTROLLER/ADMIN_HIJACKING_ACTION if there is the suspect of a session hijacking
+define('REG_HIJACKING_ACTION','retype');
diff --git a/h-source/admin/Config/Route.php b/h-source/admin/Config/Route.php
new file mode 100644
index 0000000..ac9748e
--- /dev/null
+++ b/h-source/admin/Config/Route.php
@@ -0,0 +1,50 @@
+<?php
+
+// All EasyGiant code is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
+// See COPYRIGHT.txt and LICENSE.txt.
+
+if (!defined('EG')) die('Direct access not allowed!');
+
+class Route
+{
+
+ //controller,action couples that can be reached by the browser
+ //set 'all' if you want that all the controller,action couples can be reached by the browser
+ public static $allowed = array(
+ 'adminissues,main',
+ 'adminissues,form',
+ 'adminpassword,form',
+ 'adminusers,login',
+ 'adminusers,logout',
+ 'adminusers,forceout',
+ 'adminusers,retype',
+ 'adminusers,main',
+ 'adminusers,form',
+ 'adminusers,associate',
+ 'admintalk,main',
+ 'admintalk,form',
+ 'adminregusers,main',
+ 'adminregusers,associate',
+ 'adminhardware,main',
+ 'adminhardware,ask',
+ 'adminhardware,form',
+ 'admindeletion,main',
+ 'adminparams,form',
+ 'adminnews,main',
+ 'adminnews,form',
+ 'adminboxes,main',
+ 'adminboxes,form',
+ 'adminmessages,main',
+ 'adminmessages,form',
+ 'adminhistory,main',
+ );
+
+ //it can be 'yes' or 'no'
+ //set $rewrite to 'yes' if you want that EasyGiant rewrites the URLs according to what specified in $map
+ public static $rewrite = 'no';
+
+ //define the urls of your website
+ //you have to set $rewrite to 'yes'
+ public static $map = array();
+
+} \ No newline at end of file
diff --git a/h-source/admin/External/Fonts/FreeFont/AUTHORS b/h-source/admin/External/Fonts/FreeFont/AUTHORS
new file mode 100644
index 0000000..4148c93
--- /dev/null
+++ b/h-source/admin/External/Fonts/FreeFont/AUTHORS
@@ -0,0 +1,208 @@
+-*- mode:text; coding:utf-8; -*-
+ GNU FreeFont Authors
+ ====================
+
+The FreeFont collection is being maintained by
+ Steve White <stevan.white AT googlemail.com>
+The folowing list cites the other contributors that contributed to
+particular ISO 10646 blocks.
+
+* URW++ Design & Development GmbH <http://www.urwpp.de/>
+
+ Basic Latin (U+0041-U+007A)
+ Latin-1 Supplement (U+00C0-U+00FF) (most)
+ Latin Extended-A (U+0100-U+017F)
+ Spacing Modifier Letters (U+02B0-U+02FF)
+ Mathematical Operators (U+2200-U+22FF) (parts)
+ Block Elements (U+2580-U+259F)
+ Dingbats (U+2700-U+27BF)
+
+* Yannis Haralambous <yannis.haralambous AT enst-bretagne.fr> and John
+ Plaice <plaice AT omega.cse.unsw.edu.au>
+
+ Latin Extended-B (U+0180-U+024F)
+ IPA Extensions (U+0250-U+02AF)
+ Greek (U+0370-U+03FF)
+ Armenian (U+0530-U+058F)
+ Hebrew (U+0590-U+05FF)
+ Arabic (U+0600-U+06FF)
+ Currency Symbols (U+20A0-U+20CF)
+ Arabic Presentation Forms-A (U+FB50-U+FDFF)
+ Arabic Presentation Forms-B (U+FE70-U+FEFF)
+
+* Young U. Ryu <ryoung AT utdallas.edu>
+
+ Arrows (U+2190-U+21FF)
+ Mathematical Symbols (U+2200-U+22FF)
+ Mathematical Alphanumeric Symbols (U+1D400-U+1D7FF)
+
+* Valek Filippov <frob AT df.ru>
+
+ Cyrillic (U+0400-U+04FF)
+
+* Wadalab Kanji Comittee
+
+ Hiragana (U+3040-U+309F)
+ Katakana (U+30A0-U+30FF)
+
+* Angelo Haritsis <ah AT computer.org>
+
+ Greek (U+0370-U+03FF)
+
+* Yannis Haralambous and Virach Sornlertlamvanich
+
+ Thai (U+0E00-U+0E7F)
+
+* Shaheed R. Haque <srhaque AT iee.org>
+
+ Bengali (U+0980-U+09FF)
+
+* Sam Stepanyan <sam AT arminco.com>
+
+ Armenian (U+0530-U+058F)
+
+* Mohamed Ishan <ishan AT mitf.f2s.com>
+
+ Thaana (U+0780-U+07BF)
+
+* Sushant Kumar Dash <sushant AT writeme.com>
+
+ Oriya (U+0B00-U+0B7F)
+
+* Harsh Kumar <harshkumar AT vsnl.com>
+
+ Devanagari (U+0900-U+097F)
+ Bengali (U+0980-U+09FF)
+ Gurmukhi (U+0A00-U+0A7F)
+ Gujarati (U+0A80-U+0AFF)
+
+* Prasad A. Chodavarapu <chprasad AT hotmail.com>
+
+ Telugu (U+0C00-U+0C7F)
+
+* Frans Velthuis <velthuis AT rc.rug.nl> and Anshuman Pandey
+ <apandey AT u.washington.edu>
+
+ Devanagari (U+0900-U+097F)
+
+* Hardip Singh Pannu <HSPannu AT aol.com>
+
+ Gurmukhi (U+0A00-U+0A7F)
+
+* Jeroen Hellingman <jehe AT kabelfoon.nl>
+
+ Oriya (U+0B00-U+0B7F)
+ Malayalam (U+0D00-U+0D7F)
+
+* Thomas Ridgeway <email needed>
+
+ Tamil (U+0B80-U+0BFF)
+
+* Berhanu Beyene <1beyene AT informatik.uni-hamburg.de>,
+ Prof. Dr. Manfred Kudlek <kudlek AT informatik.uni-hamburg.de>, Olaf
+ Kummer <kummer AT informatik.uni-hamburg.de>, and Jochen Metzinger <?>
+
+ Ethiopic (U+1200-U+137F)
+
+* Maxim Iorsh <iorsh AT users.sourceforge.net>
+
+ Hebrew (U+0590-U+05FF)
+
+* Vyacheslav Dikonov <sdiconov AT mail.ru>
+
+ Syriac (U+0700-U+074A)
+ Braille (U+2800-U+28FF)
+
+* Panayotis Katsaloulis <panayotis AT panayotis.com>
+
+ Greek Extended (U+1F00-U+1FFF)
+
+* M.S. Sridhar <mssridhar AT vsnl.com>
+
+ Devanagari (U+0900-U+097F)
+ Bengali (U+0980-U+09FF)
+ Gurmukhi (U+0A00-U+0A7F)
+ Gujarati (U+0A80-U+0AFF)
+ Oriya (U+0B00-U+0B7F)
+ Tamil (U+0B80-U+0BFF)
+ Telugu (U+0C00-U+0C7F)
+ Kannada (U+0C80-U+0CFF)
+ Malayalam (U+0D00-U+0D7F)
+
+* DMS Electronics, The Sri Lanka Tipitaka Project, and Noah Levitt
+ <nlevitt AT columbia.edu>
+
+ Sinhala (U+0D80-U+0DFF)
+
+* Dan Shurovich Chirkov <dansh AT chirkov.com>
+
+ Cyrillic (U+0400-U+04FF)
+
+* Abbas Izad <abbasizad AT hotmail.com>
+
+ Arabic (U+0600-U+06FF)
+ Arabic Presentation Forms-A (U+FB50-U+FDFF)
+ Arabic Presentation Forms-B (U+FE70-U+FEFF)
+
+* Denis Jacquerye <moyogo AT gmail.com>
+
+ Latin Extended-B (U+0180-U+024F)
+ IPA Extensions (U+0250-U+02AF)
+
+* K.H. Hussain <hussain AT kfri.org> and R. Chitrajan
+
+ Malayalam (U+0D00-U+0D7F)
+
+* Solaiman Karim <solaiman AT ekushey.org> and Omi Azad <omi AT ekushey.org>
+
+ Bengali (U+0980-U+09FF)
+
+* Sonali Sonania <sonalisonania AT gmail.com> and Monika Shah
+ <monikapatira AT gmail.com>
+
+ Devanagari (U+0900-U+097F)
+ Gujarati (U+0A80-U+0AFF)
+
+* Pravin Satpute <pravin_ind21 AT hotmail.com>, Bageshri Salvi
+ <sbagrshri AT yahoo.co.in>, Rahul Bhalerao <rahul_pb_india AT
+ yahoo.com> and Sandeep Shedmake <surgs2k47 AT yahoo.co.in>
+
+ Devanagari (U+0900-U+097F)
+ Gujarati (U+0A80-U+0AFF)
+ Oriya (U+0B00-U+0B7F)
+ Malayalam (U+0D00-U+0D7F)
+ Tamil (U+0B80-U+0BFF)
+
+* Kulbir Singh Thind
+
+ Gurmukhi (U+0A00-U+0A7F)
+
+* Gia Shervashidze <giasher AT telenet.ge>
+
+ Georgian (U+10A0-U+10FF)
+
+* Daniel Johnson
+
+ Cherokee (U+13A0-U+13FF)
+
+* George Douros
+
+ Gothic (U+10330-U+1034F)
+ Phoenecian (U+10900-U+1091F)
+ Byzantine Musical Symbols (U+1D000-U+1D0FF)
+ Western Musical Symbols (U+1D100-U+1D1DF)
+ Mathematical Alphanumeric Symbols (U+1D400-U+1D7FF)
+ Mah Jong Tiles (U+1F000-U+1F02B)
+ Dominoes (U+1F030-U+1F093)
+
+* Steve White <stevan_white AT gmail.com>
+ Coptic (U+2C80-U+2CFF)
+
+* Primož Peterlin <primoz.peterlin AT biofiz.mf.uni-lj.si>
+ maintained FreeFont for several years, and is thanked for all his work.
+
+Please see the CREDITS file for details on who contributed particular
+subsets of the glyphs in font files.
+
+--------------------------------------------------------------------------
+$Id: AUTHORS,v 1.18 2009/01/04 15:57:54 Stevan_White Exp $
diff --git a/h-source/admin/External/Fonts/FreeFont/COPYING b/h-source/admin/External/Fonts/FreeFont/COPYING
new file mode 100644
index 0000000..94a9ed0
--- /dev/null
+++ b/h-source/admin/External/Fonts/FreeFont/COPYING
@@ -0,0 +1,674 @@
+ GNU GENERAL PUBLIC LICENSE
+ Version 3, 29 June 2007
+
+ Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+ Preamble
+
+ The GNU General Public License is a free, copyleft license for
+software and other kinds of works.
+
+ The licenses for most software and other practical works are designed
+to take away your freedom to share and change the works. By contrast,
+the GNU General Public License is intended to guarantee your freedom to
+share and change all versions of a program--to make sure it remains free
+software for all its users. We, the Free Software Foundation, use the
+GNU General Public License for most of our software; it applies also to
+any other work released this way by its authors. You can apply it to
+your programs, too.
+
+ When we speak of free software, we are referring to freedom, not
+price. Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+them if you wish), that you receive source code or can get it if you
+want it, that you can change the software or use pieces of it in new
+free programs, and that you know you can do these things.
+
+ To protect your rights, we need to prevent others from denying you
+these rights or asking you to surrender the rights. Therefore, you have
+certain responsibilities if you distribute copies of the software, or if
+you modify it: responsibilities to respect the freedom of others.
+
+ For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must pass on to the recipients the same
+freedoms that you received. You must make sure that they, too, receive
+or can get the source code. And you must show them these terms so they
+know their rights.
+
+ Developers that use the GNU GPL protect your rights with two steps:
+(1) assert copyright on the software, and (2) offer you this License
+giving you legal permission to copy, distribute and/or modify it.
+
+ For the developers' and authors' protection, the GPL clearly explains
+that there is no warranty for this free software. For both users' and
+authors' sake, the GPL requires that modified versions be marked as
+changed, so that their problems will not be attributed erroneously to
+authors of previous versions.
+
+ Some devices are designed to deny users access to install or run
+modified versions of the software inside them, although the manufacturer
+can do so. This is fundamentally incompatible with the aim of
+protecting users' freedom to change the software. The systematic
+pattern of such abuse occurs in the area of products for individuals to
+use, which is precisely where it is most unacceptable. Therefore, we
+have designed this version of the GPL to prohibit the practice for those
+products. If such problems arise substantially in other domains, we
+stand ready to extend this provision to those domains in future versions
+of the GPL, as needed to protect the freedom of users.
+
+ Finally, every program is threatened constantly by software patents.
+States should not allow patents to restrict development and use of
+software on general-purpose computers, but in those that do, we wish to
+avoid the special danger that patents applied to a free program could
+make it effectively proprietary. To prevent this, the GPL assures that
+patents cannot be used to render the program non-free.
+
+ The precise terms and conditions for copying, distribution and
+modification follow.
+
+ TERMS AND CONDITIONS
+
+ 0. Definitions.
+
+ "This License" refers to version 3 of the GNU General Public License.
+
+ "Copyright" also means copyright-like laws that apply to other kinds of
+works, such as semiconductor masks.
+
+ "The Program" refers to any copyrightable work licensed under this
+License. Each licensee is addressed as "you". "Licensees" and
+"recipients" may be individuals or organizations.
+
+ To "modify" a work means to copy from or adapt all or part of the work
+in a fashion requiring copyright permission, other than the making of an
+exact copy. The resulting work is called a "modified version" of the
+earlier work or a work "based on" the earlier work.
+
+ A "covered work" means either the unmodified Program or a work based
+on the Program.
+
+ To "propagate" a work means to do anything with it that, without
+permission, would make you directly or secondarily liable for
+infringement under applicable copyright law, except executing it on a
+computer or modifying a private copy. Propagation includes copying,
+distribution (with or without modification), making available to the
+public, and in some countries other activities as well.
+
+ To "convey" a work means any kind of propagation that enables other
+parties to make or receive copies. Mere interaction with a user through
+a computer network, with no transfer of a copy, is not conveying.
+
+ An interactive user interface displays "Appropriate Legal Notices"
+to the extent that it includes a convenient and prominently visible
+feature that (1) displays an appropriate copyright notice, and (2)
+tells the user that there is no warranty for the work (except to the
+extent that warranties are provided), that licensees may convey the
+work under this License, and how to view a copy of this License. If
+the interface presents a list of user commands or options, such as a
+menu, a prominent item in the list meets this criterion.
+
+ 1. Source Code.
+
+ The "source code" for a work means the preferred form of the work
+for making modifications to it. "Object code" means any non-source
+form of a work.
+
+ A "Standard Interface" means an interface that either is an official
+standard defined by a recognized standards body, or, in the case of
+interfaces specified for a particular programming language, one that
+is widely used among developers working in that language.
+
+ The "System Libraries" of an executable work include anything, other
+than the work as a whole, that (a) is included in the normal form of
+packaging a Major Component, but which is not part of that Major
+Component, and (b) serves only to enable use of the work with that
+Major Component, or to implement a Standard Interface for which an
+implementation is available to the public in source code form. A
+"Major Component", in this context, means a major essential component
+(kernel, window system, and so on) of the specific operating system
+(if any) on which the executable work runs, or a compiler used to
+produce the work, or an object code interpreter used to run it.
+
+ The "Corresponding Source" for a work in object code form means all
+the source code needed to generate, install, and (for an executable
+work) run the object code and to modify the work, including scripts to
+control those activities. However, it does not include the work's
+System Libraries, or general-purpose tools or generally available free
+programs which are used unmodified in performing those activities but
+which are not part of the work. For example, Corresponding Source
+includes interface definition files associated with source files for
+the work, and the source code for shared libraries and dynamically
+linked subprograms that the work is specifically designed to require,
+such as by intimate data communication or control flow between those
+subprograms and other parts of the work.
+
+ The Corresponding Source need not include anything that users
+can regenerate automatically from other parts of the Corresponding
+Source.
+
+ The Corresponding Source for a work in source code form is that
+same work.
+
+ 2. Basic Permissions.
+
+ All rights granted under this License are granted for the term of
+copyright on the Program, and are irrevocable provided the stated
+conditions are met. This License explicitly affirms your unlimited
+permission to run the unmodified Program. The output from running a
+covered work is covered by this License only if the output, given its
+content, constitutes a covered work. This License acknowledges your
+rights of fair use or other equivalent, as provided by copyright law.
+
+ You may make, run and propagate covered works that you do not
+convey, without conditions so long as your license otherwise remains
+in force. You may convey covered works to others for the sole purpose
+of having them make modifications exclusively for you, or provide you
+with facilities for running those works, provided that you comply with
+the terms of this License in conveying all material for which you do
+not control copyright. Those thus making or running the covered works
+for you must do so exclusively on your behalf, under your direction
+and control, on terms that prohibit them from making any copies of
+your copyrighted material outside their relationship with you.
+
+ Conveying under any other circumstances is permitted solely under
+the conditions stated below. Sublicensing is not allowed; section 10
+makes it unnecessary.
+
+ 3. Protecting Users' Legal Rights From Anti-Circumvention Law.
+
+ No covered work shall be deemed part of an effective technological
+measure under any applicable law fulfilling obligations under article
+11 of the WIPO copyright treaty adopted on 20 December 1996, or
+similar laws prohibiting or restricting circumvention of such
+measures.
+
+ When you convey a covered work, you waive any legal power to forbid
+circumvention of technological measures to the extent such circumvention
+is effected by exercising rights under this License with respect to
+the covered work, and you disclaim any intention to limit operation or
+modification of the work as a means of enforcing, against the work's
+users, your or third parties' legal rights to forbid circumvention of
+technological measures.
+
+ 4. Conveying Verbatim Copies.
+
+ You may convey verbatim copies of the Program's source code as you
+receive it, in any medium, provided that you conspicuously and
+appropriately publish on each copy an appropriate copyright notice;
+keep intact all notices stating that this License and any
+non-permissive terms added in accord with section 7 apply to the code;
+keep intact all notices of the absence of any warranty; and give all
+recipients a copy of this License along with the Program.
+
+ You may charge any price or no price for each copy that you convey,
+and you may offer support or warranty protection for a fee.
+
+ 5. Conveying Modified Source Versions.
+
+ You may convey a work based on the Program, or the modifications to
+produce it from the Program, in the form of source code under the
+terms of section 4, provided that you also meet all of these conditions:
+
+ a) The work must carry prominent notices stating that you modified
+ it, and giving a relevant date.
+
+ b) The work must carry prominent notices stating that it is
+ released under this License and any conditions added under section
+ 7. This requirement modifies the requirement in section 4 to
+ "keep intact all notices".
+
+ c) You must license the entire work, as a whole, under this
+ License to anyone who comes into possession of a copy. This
+ License will therefore apply, along with any applicable section 7
+ additional terms, to the whole of the work, and all its parts,
+ regardless of how they are packaged. This License gives no
+ permission to license the work in any other way, but it does not
+ invalidate such permission if you have separately received it.
+
+ d) If the work has interactive user interfaces, each must display
+ Appropriate Legal Notices; however, if the Program has interactive
+ interfaces that do not display Appropriate Legal Notices, your
+ work need not make them do so.
+
+ A compilation of a covered work with other separate and independent
+works, which are not by their nature extensions of the covered work,
+and which are not combined with it such as to form a larger program,
+in or on a volume of a storage or distribution medium, is called an
+"aggregate" if the compilation and its resulting copyright are not
+used to limit the access or legal rights of the compilation's users
+beyond what the individual works permit. Inclusion of a covered work
+in an aggregate does not cause this License to apply to the other
+parts of the aggregate.
+
+ 6. Conveying Non-Source Forms.
+
+ You may convey a covered work in object code form under the terms
+of sections 4 and 5, provided that you also convey the
+machine-readable Corresponding Source under the terms of this License,
+in one of these ways:
+
+ a) Convey the object code in, or embodied in, a physical product
+ (including a physical distribution medium), accompanied by the
+ Corresponding Source fixed on a durable physical medium
+ customarily used for software interchange.
+
+ b) Convey the object code in, or embodied in, a physical product
+ (including a physical distribution medium), accompanied by a
+ written offer, valid for at least three years and valid for as
+ long as you offer spare parts or customer support for that product
+ model, to give anyone who possesses the object code either (1) a
+ copy of the Corresponding Source for all the software in the
+ product that is covered by this License, on a durable physical
+ medium customarily used for software interchange, for a price no
+ more than your reasonable cost of physically performing this
+ conveying of source, or (2) access to copy the
+ Corresponding Source from a network server at no charge.
+
+ c) Convey individual copies of the object code with a copy of the
+ written offer to provide the Corresponding Source. This
+ alternative is allowed only occasionally and noncommercially, and
+ only if you received the object code with such an offer, in accord
+ with subsection 6b.
+
+ d) Convey the object code by offering access from a designated
+ place (gratis or for a charge), and offer equivalent access to the
+ Corresponding Source in the same way through the same place at no
+ further charge. You need not require recipients to copy the
+ Corresponding Source along with the object code. If the place to
+ copy the object code is a network server, the Corresponding Source
+ may be on a different server (operated by you or a third party)
+ that supports equivalent copying facilities, provided you maintain
+ clear directions next to the object code saying where to find the
+ Corresponding Source. Regardless of what server hosts the
+ Corresponding Source, you remain obligated to ensure that it is
+ available for as long as needed to satisfy these requirements.
+
+ e) Convey the object code using peer-to-peer transmission, provided
+ you inform other peers where the object code and Corresponding
+ Source of the work are being offered to the general public at no
+ charge under subsection 6d.
+
+ A separable portion of the object code, whose source code is excluded
+from the Corresponding Source as a System Library, need not be
+included in conveying the object code work.
+
+ A "User Product" is either (1) a "consumer product", which means any
+tangible personal property which is normally used for personal, family,
+or household purposes, or (2) anything designed or sold for incorporation
+into a dwelling. In determining whether a product is a consumer product,
+doubtful cases shall be resolved in favor of coverage. For a particular
+product received by a particular user, "normally used" refers to a
+typical or common use of that class of product, regardless of the status
+of the particular user or of the way in which the particular user
+actually uses, or expects or is expected to use, the product. A product
+is a consumer product regardless of whether the product has substantial
+commercial, industrial or non-consumer uses, unless such uses represent
+the only significant mode of use of the product.
+
+ "Installation Information" for a User Product means any methods,
+procedures, authorization keys, or other information required to install
+and execute modified versions of a covered work in that User Product from
+a modified version of its Corresponding Source. The information must
+suffice to ensure that the continued functioning of the modified object
+code is in no case prevented or interfered with solely because
+modification has been made.
+
+ If you convey an object code work under this section in, or with, or
+specifically for use in, a User Product, and the conveying occurs as
+part of a transaction in which the right of possession and use of the
+User Product is transferred to the recipient in perpetuity or for a
+fixed term (regardless of how the transaction is characterized), the
+Corresponding Source conveyed under this section must be accompanied
+by the Installation Information. But this requirement does not apply
+if neither you nor any third party retains the ability to install
+modified object code on the User Product (for example, the work has
+been installed in ROM).
+
+ The requirement to provide Installation Information does not include a
+requirement to continue to provide support service, warranty, or updates
+for a work that has been modified or installed by the recipient, or for
+the User Product in which it has been modified or installed. Access to a
+network may be denied when the modification itself materially and
+adversely affects the operation of the network or violates the rules and
+protocols for communication across the network.
+
+ Corresponding Source conveyed, and Installation Information provided,
+in accord with this section must be in a format that is publicly
+documented (and with an implementation available to the public in
+source code form), and must require no special password or key for
+unpacking, reading or copying.
+
+ 7. Additional Terms.
+
+ "Additional permissions" are terms that supplement the terms of this
+License by making exceptions from one or more of its conditions.
+Additional permissions that are applicable to the entire Program shall
+be treated as though they were included in this License, to the extent
+that they are valid under applicable law. If additional permissions
+apply only to part of the Program, that part may be used separately
+under those permissions, but the entire Program remains governed by
+this License without regard to the additional permissions.
+
+ When you convey a copy of a covered work, you may at your option
+remove any additional permissions from that copy, or from any part of
+it. (Additional permissions may be written to require their own
+removal in certain cases when you modify the work.) You may place
+additional permissions on material, added by you to a covered work,
+for which you have or can give appropriate copyright permission.
+
+ Notwithstanding any other provision of this License, for material you
+add to a covered work, you may (if authorized by the copyright holders of
+that material) supplement the terms of this License with terms:
+
+ a) Disclaiming warranty or limiting liability differently from the
+ terms of sections 15 and 16 of this License; or
+
+ b) Requiring preservation of specified reasonable legal notices or
+ author attributions in that material or in the Appropriate Legal
+ Notices displayed by works containing it; or
+
+ c) Prohibiting misrepresentation of the origin of that material, or
+ requiring that modified versions of such material be marked in
+ reasonable ways as different from the original version; or
+
+ d) Limiting the use for publicity purposes of names of licensors or
+ authors of the material; or
+
+ e) Declining to grant rights under trademark law for use of some
+ trade names, trademarks, or service marks; or
+
+ f) Requiring indemnification of licensors and authors of that
+ material by anyone who conveys the material (or modified versions of
+ it) with contractual assumptions of liability to the recipient, for
+ any liability that these contractual assumptions directly impose on
+ those licensors and authors.
+
+ All other non-permissive additional terms are considered "further
+restrictions" within the meaning of section 10. If the Program as you
+received it, or any part of it, contains a notice stating that it is
+governed by this License along with a term that is a further
+restriction, you may remove that term. If a license document contains
+a further restriction but permits relicensing or conveying under this
+License, you may add to a covered work material governed by the terms
+of that license document, provided that the further restriction does
+not survive such relicensing or conveying.
+
+ If you add terms to a covered work in accord with this section, you
+must place, in the relevant source files, a statement of the
+additional terms that apply to those files, or a notice indicating
+where to find the applicable terms.
+
+ Additional terms, permissive or non-permissive, may be stated in the
+form of a separately written license, or stated as exceptions;
+the above requirements apply either way.
+
+ 8. Termination.
+
+ You may not propagate or modify a covered work except as expressly
+provided under this License. Any attempt otherwise to propagate or
+modify it is void, and will automatically terminate your rights under
+this License (including any patent licenses granted under the third
+paragraph of section 11).
+
+ However, if you cease all violation of this License, then your
+license from a particular copyright holder is reinstated (a)
+provisionally, unless and until the copyright holder explicitly and
+finally terminates your license, and (b) permanently, if the copyright
+holder fails to notify you of the violation by some reasonable means
+prior to 60 days after the cessation.
+
+ Moreover, your license from a particular copyright holder is
+reinstated permanently if the copyright holder notifies you of the
+violation by some reasonable means, this is the first time you have
+received notice of violation of this License (for any work) from that
+copyright holder, and you cure the violation prior to 30 days after
+your receipt of the notice.
+
+ Termination of your rights under this section does not terminate the
+licenses of parties who have received copies or rights from you under
+this License. If your rights have been terminated and not permanently
+reinstated, you do not qualify to receive new licenses for the same
+material under section 10.
+
+ 9. Acceptance Not Required for Having Copies.
+
+ You are not required to accept this License in order to receive or
+run a copy of the Program. Ancillary propagation of a covered work
+occurring solely as a consequence of using peer-to-peer transmission
+to receive a copy likewise does not require acceptance. However,
+nothing other than this License grants you permission to propagate or
+modify any covered work. These actions infringe copyright if you do
+not accept this License. Therefore, by modifying or propagating a
+covered work, you indicate your acceptance of this License to do so.
+
+ 10. Automatic Licensing of Downstream Recipients.
+
+ Each time you convey a covered work, the recipient automatically
+receives a license from the original licensors, to run, modify and
+propagate that work, subject to this License. You are not responsible
+for enforcing compliance by third parties with this License.
+
+ An "entity transaction" is a transaction transferring control of an
+organization, or substantially all assets of one, or subdividing an
+organization, or merging organizations. If propagation of a covered
+work results from an entity transaction, each party to that
+transaction who receives a copy of the work also receives whatever
+licenses to the work the party's predecessor in interest had or could
+give under the previous paragraph, plus a right to possession of the
+Corresponding Source of the work from the predecessor in interest, if
+the predecessor has it or can get it with reasonable efforts.
+
+ You may not impose any further restrictions on the exercise of the
+rights granted or affirmed under this License. For example, you may
+not impose a license fee, royalty, or other charge for exercise of
+rights granted under this License, and you may not initiate litigation
+(including a cross-claim or counterclaim in a lawsuit) alleging that
+any patent claim is infringed by making, using, selling, offering for
+sale, or importing the Program or any portion of it.
+
+ 11. Patents.
+
+ A "contributor" is a copyright holder who authorizes use under this
+License of the Program or a work on which the Program is based. The
+work thus licensed is called the contributor's "contributor version".
+
+ A contributor's "essential patent claims" are all patent claims
+owned or controlled by the contributor, whether already acquired or
+hereafter acquired, that would be infringed by some manner, permitted
+by this License, of making, using, or selling its contributor version,
+but do not include claims that would be infringed only as a
+consequence of further modification of the contributor version. For
+purposes of this definition, "control" includes the right to grant
+patent sublicenses in a manner consistent with the requirements of
+this License.
+
+ Each contributor grants you a non-exclusive, worldwide, royalty-free
+patent license under the contributor's essential patent claims, to
+make, use, sell, offer for sale, import and otherwise run, modify and
+propagate the contents of its contributor version.
+
+ In the following three paragraphs, a "patent license" is any express
+agreement or commitment, however denominated, not to enforce a patent
+(such as an express permission to practice a patent or covenant not to
+sue for patent infringement). To "grant" such a patent license to a
+party means to make such an agreement or commitment not to enforce a
+patent against the party.
+
+ If you convey a covered work, knowingly relying on a patent license,
+and the Corresponding Source of the work is not available for anyone
+to copy, free of charge and under the terms of this License, through a
+publicly available network server or other readily accessible means,
+then you must either (1) cause the Corresponding Source to be so
+available, or (2) arrange to deprive yourself of the benefit of the
+patent license for this particular work, or (3) arrange, in a manner
+consistent with the requirements of this License, to extend the patent
+license to downstream recipients. "Knowingly relying" means you have
+actual knowledge that, but for the patent license, your conveying the
+covered work in a country, or your recipient's use of the covered work
+in a country, would infringe one or more identifiable patents in that
+country that you have reason to believe are valid.
+
+ If, pursuant to or in connection with a single transaction or
+arrangement, you convey, or propagate by procuring conveyance of, a
+covered work, and grant a patent license to some of the parties
+receiving the covered work authorizing them to use, propagate, modify
+or convey a specific copy of the covered work, then the patent license
+you grant is automatically extended to all recipients of the covered
+work and works based on it.
+
+ A patent license is "discriminatory" if it does not include within
+the scope of its coverage, prohibits the exercise of, or is
+conditioned on the non-exercise of one or more of the rights that are
+specifically granted under this License. You may not convey a covered
+work if you are a party to an arrangement with a third party that is
+in the business of distributing software, under which you make payment
+to the third party based on the extent of your activity of conveying
+the work, and under which the third party grants, to any of the
+parties who would receive the covered work from you, a discriminatory
+patent license (a) in connection with copies of the covered work
+conveyed by you (or copies made from those copies), or (b) primarily
+for and in connection with specific products or compilations that
+contain the covered work, unless you entered into that arrangement,
+or that patent license was granted, prior to 28 March 2007.
+
+ Nothing in this License shall be construed as excluding or limiting
+any implied license or other defenses to infringement that may
+otherwise be available to you under applicable patent law.
+
+ 12. No Surrender of Others' Freedom.
+
+ If conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License. If you cannot convey a
+covered work so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you may
+not convey it at all. For example, if you agree to terms that obligate you
+to collect a royalty for further conveying from those to whom you convey
+the Program, the only way you could satisfy both those terms and this
+License would be to refrain entirely from conveying the Program.
+
+ 13. Use with the GNU Affero General Public License.
+
+ Notwithstanding any other provision of this License, you have
+permission to link or combine any covered work with a work licensed
+under version 3 of the GNU Affero General Public License into a single
+combined work, and to convey the resulting work. The terms of this
+License will continue to apply to the part which is the covered work,
+but the special requirements of the GNU Affero General Public License,
+section 13, concerning interaction through a network will apply to the
+combination as such.
+
+ 14. Revised Versions of this License.
+
+ The Free Software Foundation may publish revised and/or new versions of
+the GNU General Public License from time to time. Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+ Each version is given a distinguishing version number. If the
+Program specifies that a certain numbered version of the GNU General
+Public License "or any later version" applies to it, you have the
+option of following the terms and conditions either of that numbered
+version or of any later version published by the Free Software
+Foundation. If the Program does not specify a version number of the
+GNU General Public License, you may choose any version ever published
+by the Free Software Foundation.
+
+ If the Program specifies that a proxy can decide which future
+versions of the GNU General Public License can be used, that proxy's
+public statement of acceptance of a version permanently authorizes you
+to choose that version for the Program.
+
+ Later license versions may give you additional or different
+permissions. However, no additional obligations are imposed on any
+author or copyright holder as a result of your choosing to follow a
+later version.
+
+ 15. Disclaimer of Warranty.
+
+ THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
+APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
+HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
+OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
+THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
+IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
+ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+ 16. Limitation of Liability.
+
+ IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
+THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
+GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
+USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
+DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
+PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
+EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGES.
+
+ 17. Interpretation of Sections 15 and 16.
+
+ If the disclaimer of warranty and limitation of liability provided
+above cannot be given local legal effect according to their terms,
+reviewing courts shall apply local law that most closely approximates
+an absolute waiver of all civil liability in connection with the
+Program, unless a warranty or assumption of liability accompanies a
+copy of the Program in return for a fee.
+
+ END OF TERMS AND CONDITIONS
+
+ How to Apply These Terms to Your New Programs
+
+ If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+ To do so, attach the following notices to the program. It is safest
+to attach them to the start of each source file to most effectively
+state the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+ <one line to give the program's name and a brief idea of what it does.>
+ Copyright (C) <year> <name of author>
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+Also add information on how to contact you by electronic and paper mail.
+
+ If the program does terminal interaction, make it output a short
+notice like this when it starts in an interactive mode:
+
+ <program> Copyright (C) <year> <name of author>
+ This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+ This is free software, and you are welcome to redistribute it
+ under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License. Of course, your program's commands
+might be different; for a GUI interface, you would use an "about box".
+
+ You should also get your employer (if you work as a programmer) or school,
+if any, to sign a "copyright disclaimer" for the program, if necessary.
+For more information on this, and how to apply and follow the GNU GPL, see
+<http://www.gnu.org/licenses/>.
+
+ The GNU General Public License does not permit incorporating your program
+into proprietary programs. If your program is a subroutine library, you
+may consider it more useful to permit linking proprietary applications with
+the library. If this is what you want to do, use the GNU Lesser General
+Public License instead of this License. But first, please read
+<http://www.gnu.org/philosophy/why-not-lgpl.html>.
diff --git a/h-source/admin/External/Fonts/FreeFont/CREDITS b/h-source/admin/External/Fonts/FreeFont/CREDITS
new file mode 100644
index 0000000..0f47440
--- /dev/null
+++ b/h-source/admin/External/Fonts/FreeFont/CREDITS
@@ -0,0 +1,528 @@
+-*- mode:text; coding:utf-8; -*-
+ GNU FreeFont Credits
+ ====================
+
+This file lists contributors and contributions to the GNU FreeFont project.
+
+
+* URW++ Design & Development GmbH <http://www.urwpp.de/>
+
+URW++ donated a set of 35 core PostScript Type 1 fonts to the
+Ghostscript project <http://www.cs.wisc.edu/~ghost/>, to be available
+under the terms of GNU General Public License (GPL).
+
+ Basic Latin (U+0041-U+007A)
+ Latin-1 Supplement (U+00C0-U+00FF)
+ Latin Extended-A (U+0100-U+017F)
+ Spacing Modifier Letters (U+02B0-U+02FF)
+ Mathematical Operators (U+2200-U+22FF)
+ Block Elements (U+2580-U+259F)
+ Dingbats (U+2700-U+27BF)
+
+
+* Yannis Haralambous <yannis.haralambous AT enst-bretagne.fr> and John
+ Plaice <plaice AT omega.cse.unsw.edu.au>
+
+Yannis Haralambous and John Plaice are the authors of Omega typesetting
+system, <http://omega.enstb.org/>. Omega is an extension of TeX.
+Its first release, aims primarily at improving TeX's multilingual abilities.
+In Omega all characters and pointers into data-structures are 16-bit wide,
+instead of 8-bit, thereby eliminating many of the trivial limitations of TeX.
+Omega also allows multiple input and output character sets, and uses
+programmable filters to translate from one encoding to another, to perform
+contextual analysis, etc. Internally, Omega uses the universal 16-bit Unicode
+standard character set, based on ISO-10646. These improvements not only make
+it a lot easier for TeX users to cope with multiple or complex languages,
+like Arabic, Indic, Khmer, Chinese, Japanese or Korean, in one document, but
+will also form the basis for future developments in other areas, such as
+native color support and hypertext features. ... Fonts for UT1 (omlgc family)
+and UT2 (omah family) are under development: these fonts are in PostScript
+format and visually close to Times and Helvetica font families.
+Omega fonts are available subject to GPL
+
+ Latin Extended-B (U+0180-U+024F)
+ IPA Extensions (U+0250-U+02AF)
+ Greek (U+0370-U+03FF)
+ Armenian (U+0530-U+058F)
+ Hebrew (U+0590-U+05FF)
+ Arabic (U+0600-U+06FF)
+ Currency Symbols (U+20A0-U+20CF)
+ Arabic Presentation Forms-A (U+FB50-U+FDFF)
+ Arabic Presentation Forms-B (U+FE70-U+FEFF)
+
+Current info: <http://tug.ctan.org/cgi-bin/ctanPackageInformation.py?id=omega>
+
+* Valek Filippov <frob AT df.ru>
+
+Valek Filippov added Cyrillic glyphs and composite Latin Extended A to
+the whole set of the abovementioned URW set of 35 PostScript core fonts,
+<ftp://ftp.gnome.ru/fonts/urw/>. The fonts are available under GPL.
+
+ Latin Extended-A (U+0100-U+017F)
+ Cyrillic (U+0400-U+04FF)
+
+
+* Wadalab Kanji Comittee
+
+Between April 1990 and March 1992, Wadalab Kanji Comittee put together
+a series of scalable font files with Japanese scripts, in four forms:
+Sai Micho, Chu Mincho, Cho Kaku and Saimaru. The font files are
+written in custom file format, while tools for conversion into
+Metafont and PostScript Type 1 are also supplied. The Wadalab Kanji
+Comittee has later been dismissed, and the resulting files can be now
+found on the FTP server of the Depertment of Mathematical Engineering
+and Information Physics, Faculty of Engineering, University of Tokyo
+<ftp://ftp.ipl.t.u-tokyo.ac.jp/Font/>.
+
+ Hiragana (U+3040-U+309F)
+ Katakana (U+30A0-U+30FF)
+
+
+* Young U. Ryu <ryoung AT utdallas.edu>
+
+Young Ryu is the author of Txfonts, a set of mathematical symbols
+designed to accompany text typeset in Times or its variants. In the
+documentation, Young adresses the design of mathematical symbols: "The
+Adobe Times fonts are thicker than the CM fonts. Designing math fonts
+for Times based on the rule thickness of Times = , , + , / , < ,
+etc. would result in too thick math symbols, in my opinion. In the TX
+fonts, these glyphs are thinner than those of original Times
+fonts. That is, the rule thickness of these glyphs is around 85% of
+that of the Times fonts, but still thicker than that of the CM fonts."
+TX fonts are are distributed under the GNU public license (GPL).
+<http://www.ctan.org/tex-archive/fonts/txfonts/>.
+
+ Arrows (U+2190-U+21FF)
+ Mathematical Symbols (U+2200-U+22FF)
+
+
+* Angelo Haritsis <ah AT computer.org>
+
+Angelo Haritsis has compiled a set of Greek Type 1 fonts, available on
+<ftp://ftp.hellug.gr/pub/unix/linux/GREEK/fonts/greekXfonts-Type1-1.1.tgz>.
+The glyphs from this source has been used to compose Greek glyphs in
+FreeSans and FreeMono.
+
+Angelo's licence says: "You can enjoy free use of these fonts for
+educational or commercial purposes. All derived works should include
+this paragraph. If you want to change something please let me have
+your changes (via email) so that they can go into the next
+version. You can also send comments etc to the above address."
+
+ Greek (U+0370-U+03FF)
+
+
+* Yannis Haralambous and Virach Sornlertlamvanich
+
+In 1999, Yannis Haralambous and Virach Sornlertlamvanich made a set of
+glyphs covering the Thai national standard Nf3, in both upright and
+slanted shape. The collection of glyphs have been made part of GNU
+intlfonts 1.2 package and is available under the GPL at
+<ftp://ftp.gnu.org/pub/gnu/intlfonts/>.
+
+ Thai (U+0E00-U+0E7F)
+
+
+* Shaheed R. Haque <srhaque AT iee.org>
+
+Shaheed Haque has developed a basic set of basic Bengali glyphs
+(without ligatures), using ISO10646 encoding. They are available under
+the XFree86 license at <http://www.btinternet.com/~shaheedhaque/>.
+
+Copyright (C) 2001 S.R.Haque <srhaque AT iee.org>. All Rights Reserved.
+
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of this software and associated documentation files (the
+"Software"), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject to
+the following conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+IN NO EVENT SHALL S.R.HAQUE BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+OTHER DEALINGS IN THE SOFTWARE.
+
+Except as contained in this notice, the name of S.R.Haque shall not be
+used in advertising or otherwise to promote the sale, use or other
+dealings in this Software without prior written authorization from
+S.R.Haque.
+
+ Bengali (U+0980-U+09FF)
+
+
+* Sam Stepanyan <sam AT arminco.com>
+
+Sam Stepanyan created a set of Armenian sans serif glyphs visually
+compatible with Helvetica or Arial. Available on
+<http://www.editum.com.ar/mashtots/html/fonts/ara.tar.gz>. On
+2002-01-24, Sam writes: "Arial Armenian font is free for
+non-commercial use, so it is OK to use under GPL license."
+
+ Armenian (U+0530-U+058F)
+
+
+* Mohamed Ishan <ishan AT mitf.f2s.com>
+
+Mohamed Ishan has started a Thaana Unicode Project
+<http://thaana.sourceforge.net/> and among other things created a
+couple of Thaana fonts, available under FDL or BDF license.
+
+ Thaana (U+0780-U+07BF)
+
+
+* Sushant Kumar Dash <sushant AT writeme.com> (*)
+
+Sushant Dash has created a font in his mother tongue, Oriya. As he
+states on his web page <http://members.tripod.com/~sushantdash/>:
+"Please feel free to foreword this mail to your Oriya friends. No
+copyright law is applied for this font. It is totally free!!! Feel
+free to modify this using any font editing tools. This is designed for
+people like me, who are away from Orissa and want to write letters
+home using Computers, but suffer due to unavailability of Oriya
+fonts.(Or the cost of the available packages are too much)."
+
+ Oriya (U+0B00-U+0B7F)
+
+
+* Harsh Kumar <harshkumar AT vsnl.com>
+
+Harsh Kumar has started BharatBhasha <http://www.bharatbhasha.net/> -
+an effort to provide "FREE software, Tutorial, Source Codes
+etc. available for working in Hindi, Marathi, Gujarati, Gurmukhi and
+Bangla. You can type text, write Web pages or develop Indian Languages
+Applications on Windows and on Linux. We also offer FREE help to
+users, enthusiasts and software developers for their work in Indian
+languages."
+
+ Devanagari (U+0900-U+097F)
+ Bengali (U+0980-U+09FF)
+ Gurmukhi (U+0A00-U+0A7F)
+ Gujarati (U+0A80-U+0AFF)
+
+
+* Prasad A. Chodavarapu <chprasad AT hotmail.com>
+
+Prasad A. Chodavarapu created Tikkana, a Telugu font available in Type
+1 and TrueType format on <http://chaitanya.bhaavana.net/fonts/>.
+Tikkana exceeds the Unicode Telugu range with some composite glyphs.
+Available under the GNU General Public License.
+
+ Telugu (U+0C00-U+0C7F)
+
+
+* Frans Velthuis <velthuis AT rc.rug.nl> and Anshuman Pandey
+ <apandey AT u.washington.edu>
+
+In 1991, Frans Velthuis from the Groningen University, The
+Netherlands, released a Devanagari font as Metafont source, available
+under the terms of GNU GPL. Later, Anshuman Pandey from the Washington
+University, Seattle, USA, took over the maintenance of font. Fonts can
+be found on CTAN, <ftp://ftp.dante.de/tex-archive/language/devanagari/>. I
+converted the font to Type 1 format using Péter Szabó's TeXtrace
+program <http://www.inf.bme.hu/~pts/textrace/> and removed some
+redundant control points with PfaEdit.
+
+ Devanagari (U+0900-U+097F)
+
+
+* Hardip Singh Pannu <HSPannu AT aol.com>
+
+In 1991, Hardip Singh Pannu has created a free Gurmukhi TrueType font,
+available as regular, bold, oblique and bold oblique form. Its license
+says "Please remember that these fonts are copyrighted (by me) and are
+for non-profit use only."
+
+ Gurmukhi (U+0A00-U+0A7F)
+
+
+* Jeroen Hellingman <jehe AT kabelfoon.nl>
+
+Jeroen Hellingman created a set of Malayalam metafonts in 1994, and a
+set of Oriya metafonts in 1996. Malayalam fonts were created as
+uniform stroke only, while Oriya metafonts exist in both uniform and
+modulated stroke. From private communication: "It is my intention to
+release the fonts under GPL, but not all copies around have this
+notice on them." Metafonts can be found on CTAN,
+<ftp://ftp.dante.de/tex-archive/language/oriya/> and
+<ftp://ftp.dante.de/tex-archive/language/malayalam/>.
+
+ Oriya (U+0B00-U+0B7F)
+ Malayalam (U+0D00-U+0D7F)
+
+
+* Thomas Ridgeway <> (*)
+
+Thomas Ridgeway, then at the Humanities And Arts Computing Center,
+Washington University, Seattle, USA, (now defunct), created a Tamil
+metafont in 1990. Anshuman Pandey from the same university took over
+the maintenance of font. Fonts can be found at CTAN,
+<ftp://ftp.dante.de/tex-archive/language/tamil/wntamil/>.
+
+ Tamil (U+0B80-U+0BFF)
+
+
+* Berhanu Beyene <1beyene AT informatik.uni-hamburg.de>,
+ Prof. Dr. Manfred Kudlek <kudlek AT informatik.uni-hamburg.de>, Olaf
+ Kummer <kummer AT informatik.uni-hamburg.de>, and Jochen Metzinger <?>
+
+Beyene, Kudlek, Kummer and Metzinger from the Theoretical Foundations
+of Computer Science, University of Hamburg, prepared a set of Ethiopic
+metafonts, found on
+<ftp://ftp.dante.de/tex-archive/language/ethiopia/ethiop/>. They also
+maintain home page on the Ethiopic font project,
+<http://www.informatik.uni-hamburg.de/TGI/mitarbeiter/wimis/kummer/ethiop_eng.html>,
+and can be reached at <ethiop AT informatik.uni-hamburg.de>. The current
+version of fonts is 0.7 (1998), and they are released under GNU GPL. I
+converted the fonts to Type 1 format using Péter Szabó's TeXtrace-A
+program <http://www.inf.bme.hu/~pts/textrace/> and removed some
+redundant control points with PfaEdit.
+
+ Ethiopic (U+1200-U+137F)
+
+
+* Maxim Iorsh <iorsh AT users.sourceforge.net>
+
+In 2002, Maxim Iorsh started the Culmus project, aiming at providing
+Hebrew-speaking Linux and Unix community with a basic collection of
+Hebrew fonts for X Windows. The fonts are visually compatible with
+URW++ Century Schoolbook L, URW++ Nimbus Sans L and URW++ Nimbus Mono
+L families, respectively, and are released under GNU GPL license. See
+also <http://culmus.sourceforge.net/>.
+
+ Hebrew (U+0590-U+05FF)
+
+
+* Panayotis Katsaloulis <panayotis AT panayotis.com>
+
+Panayotis Katsaloulis helped fixing Greek accents in the Greek
+Extended area.
+
+ Greek Extended (U+1F00-U+1FFF)
+
+
+* Vyacheslav Dikonov <sdiconov AT mail.ru>
+
+Vyacheslav Dikonov made a Braille unicode font that could be merged
+with the UCS fonts to fill the 2800-28FF range completely. (uniform
+scaling is possible to adapt it to any cell size). He also contributed
+a free syriac font, whose glyphs (about half of them) are borrowed
+from the "Carlo Ator" font freely downloadable from
+<http://www.aacf.asso.fr/>. Vyacheslav also filled in a few missing
+spots in the U+2000-U+27FF area, e.g. the box drawing section, sets of
+subscript and superscript digits and capital Roman numbers.
+
+ Syriac (U+0700-U+074A)
+ Box Drawing (U+2500-U+257F)
+ Braille (U+2800-U+28FF)
+
+
+* M.S. Sridhar <mssridhar AT vsnl.com>
+
+M/S Cyberscape Multimedia Limited, Mumbai, developers of Akruti
+Software for Indian Languages (http://www.akruti.com/), have released
+a set of TTF fonts for nine Indian scripts (Devanagari, Gujarati,
+Telugu, Tamil, Malayalam, Kannada, Bengali, Oriya, and Gurumukhi)
+under the GNU General Public License (GPL). You can download the fonts
+from the Free Software Foundation of India WWW site
+(http://www.gnu.org.in/akruti-fonts/) or from the Akruti website.
+
+For any further information or assistance regarding these fonts,
+please contact mssridhar AT vsnl.com.
+
+ Devanagari (U+0900-U+097F)
+ Bengali (U+0980-U+09FF)
+ Gurmukhi (U+0A00-U+0A7F)
+ Gujarati (U+0A80-U+0AFF)
+ Oriya (U+0B00-U+0B7F)
+ Tamil (U+0B80-U+0BFF)
+ Telugu (U+0C00-U+0C7F)
+ Kannada (U+0C80-U+0CFF)
+ Malayalam (U+0D00-U+0D7F)
+
+
+* DMS Electronics, The Sri Lanka Tipitaka Project, and Noah Levitt
+ <nlevitt AT columbia.edu>
+
+Noah Levitt found out that the Sinhalese fonts available on the site
+<http://www.metta.lk/fonts/> are released under GNU GPL, or,
+precisely, "Public Domain under GNU Licence Produced by DMS
+Electronics for The Sri Lanka Tipitaka Project" (taken from the font
+comment), and took the effort of recoding the font to Unicode.
+
+ Sinhala (U+0D80-U+0DFF)
+
+
+* Daniel Shurovich Chirkov <dansh AT chirkov.com>
+
+Dan Chirkov updated the FreeSerif font with the missing Cyrillic
+glyphs needed for conformance to Unicode 3.2. The effort is part of
+the Slavjanskij package for Mac OS X,
+<http://www.versiontracker.com/dyn/moreinfo/macosx/18680>.
+
+ Cyrillic (U+0400-U+04FF)
+
+
+* Denis Jacquerye <moyogo AT gmail.com>
+
+Denis Jacquerye added new glyphs and corrected existing ones in the
+Latin Extended-B and IPA Extensions ranges.
+
+ Latin Extended-B (U+0180-U+024F)
+ IPA Extensions (U+0250-U+02AF)
+
+
+* K.H. Hussain <hussain AT kfri.org> and R. Chitrajan
+
+`Rachana' in Malayalam means `to write', `to create'. Rachana Akshara Vedi,
+a team of socially committed information technology professionals and
+philologists, has applied developments in computer technology and desktop
+publishing to resurrect the Malayalam language from the disorder,
+fragmentation and degeneration it had suffered since the attempt to adapt
+the Malayalam script for using with a regular mechanical typewriter, which
+took place in 1967-69. K.H. Hussein at the Kerala Forest Research Institute
+has released "Rachana Normal" fonts with approximately 900 glyphs required
+to typeset traditional Malayalam. R. Chitrajan apparently encoded the
+glyphs in the OpenType table.
+
+In 2008, the Malayalam ranges in FreeSerif were updated under the advise
+and supervision of Hiran Venugopalan of Swathanthra Malayalam Computing,
+to reflect the revised edition Rachana_04.
+
+ Malayalam (U+0D00-U+0D7F)
+
+
+* Solaiman Karim <solaiman AT ekushey.org>
+
+ Bengali (U+0980-U+09FF)
+
+Solaiman Karim has developed several OpenType Bangla fonts and
+released them under GNU GPL on <http://www.ekushey.org>.
+
+
+* Sonali Sonania <sonalisonania AT gmail.com> and Monika Shah
+ <monikapatira AT gmail.com>
+
+ Devanagari (U+0900-U+097F)
+ Gujarati (U+0A80-U+0AFF)
+
+Glyphs were drawn by Cyberscape Multimedia Ltd., #101,Mahalakshmi
+Mansion 21st Main 22nd "A" Cross Banashankari 2nd stage Banglore
+560070, India. Converted to OTF by IndicTrans Team, Powai, Mumbai,
+lead by Prof. Jitendra Shah. Maintained by Monika Shah and Sonali
+Sonania of janabhaaratii Team, C-DAC, Mumbai. This font is released
+under GPL by Dr. Alka Irani and Prof Jitendra Shah, janabhaaratii
+Team, C-DAC, Mumabi. janabhaaratii is localisation project at C-DAC
+Mumbai (formerly National Centre for Software Technology); funded by
+TDIL, Govt. of India. Contact:monika_shah AT lycos.com,
+sonalisonania AT yahoo.com, jitendras AT vsnl.com, alka AT ncst.ernet.in.
+website: www.janabhaaratii.org.in.
+
+
+* Pravin Satpute <pravin_ind21 AT hotmail.com>, Bageshri Salvi
+ <sbagrshri AT yahoo.co.in>, Rahul Bhalerao <rahul_pb_india AT
+ yahoo.com> and Sandeep Shedmake <surgs2k47 AT yahoo.co.in>
+
+ Devanagari (U+0900-U+097F)
+ Gujarati (U+0A80-U+0AFF)
+ Oriya (U+0B00-U+0B7F)
+ Malayalam (U+0D00-U+0D7F)
+ Tamil (U+0B80-U+0BFF)
+
+In December 2005 the team at www.gnowledge.org released a set of two
+Unicode pan-Indic fonts: "Samyak" and "Samyak Sans". "Samyak" font
+belongs to serif style and is an original work of the team; "Samyak
+Sans" font belongs to sans serif style and is actually a compilation
+of already released Indic fonts (Gargi, Padma, Mukti, Utkal, Akruti
+and ThendralUni). Both fonts are based on Unicode standard. You can
+download the font files (released under GNU/GPL License) from
+http://www.gnowledge.org/Gnoware/localization/font.htm
+
+
+* Kulbir Singh Thind
+
+ Gurmukhi (U+0A00-U+0A7F)
+
+Dr. Kulbir Singh Thind designed a set of Gurmukhi Unicode fonts,
+AnmolUni and AnmolUni-Bold, which are available under the terms of GNU
+Generel Public Licens from the Punjabu Computing Resource Center,
+http://guca.sourceforge.net/typography/fonts/anmoluni/.
+
+
+* Gia Shervashidze <giasher AT telenet.ge>
+
+ Georgian (U+10A0-U+10FF)
+
+Starting in mid-1990s, Gia Shervashidze designed many
+Unicode-compliant Georgian fonts: Times New Roman Georgian, Arial
+Georgian, Courier New Georgian. His work on Georgian localization can
+be reached at http://www.gia.ge/.
+
+
+* Primož Peterlin <primoz.peterlin AT biofiz.mf.uni-lj.si>
+
+Primož Peterlin filled in missing glyphs here and there (e.g. Latin
+Extended-B and IPA Extensions ranges in the FreeMono familiy), and
+created the following UCS blocks:
+
+ Latin Extended-B (U+0180-U+024F)
+ IPA Extensions (U+0250-U+02AF)
+ Arrows (U+2190-U+21FF)
+ Box Drawing (U+2500-U+257F)
+ Block Elements (U+2580-U+259F)
+ Geometrical Shapes (U+25A0-U+25FF)
+
+* Mark Williamson
+
+Made the MPH 2 Damase font, from which
+ Hanunóo (U+1720-U+173F)
+ Buginese (U+1A00-U+1A1F)
+ Tai Le (U+1950-U+197F)
+ Ugaritic (U+10380-U+1039F)
+ Old Persian (U+103A0-U+103DF)
+
+* Jacob Poon
+
+Submitted a very thorough survey of glyph problems and other suggestions.
+
+* Alexey Kryukov
+
+Made the TemporaLCGUni fonts, based on the URW++ fonts, from which at one
+point FreeSerif Cyrillic, and some of the Greek, was drawn. He also provided
+valuable direction about Cyrillic and Greek typesetting.
+
+* George Douros
+
+The creator of several fonts focusing on ancient scripts and symbols.
+Many of the glyphs are created by making outlines from scanned images
+of ancient sources.
+
+ Aegean: Phoenecian
+ Analecta: Gothic (U+10330-U+1034F)
+ Musical: Byzantine & Western
+ Unicode: many Miscellaneous Symbols, Miscellaneous Technical,
+ supplemental Symbols, and Mathematical Alphanumeric symbols,
+ Mah Jong, and the outline of the Domino.
+
+* Daniel Johnson
+
+Created by hand a Cherokee range specially for FreeFont to be "in line with
+the classic Cherokee typefaces used in 19th century printing", but also to
+fit well with ranges previously in FreeFont.
+ Cherokee (U+13A0-U+13FF)
+
+Notes:
+
+*: The glyph collection looks license-compatible, but its author has
+ not yet replied and agreed on their work being used in part of
+ this glyph collection.
+
+--------------------------------------------------------------------------
+$Id: CREDITS,v 1.23 2009/01/04 15:57:54 Stevan_White Exp $
diff --git a/h-source/admin/External/Fonts/FreeFont/ChangeLog b/h-source/admin/External/Fonts/FreeFont/ChangeLog
new file mode 100644
index 0000000..d5345d0
--- /dev/null
+++ b/h-source/admin/External/Fonts/FreeFont/ChangeLog
@@ -0,0 +1,4525 @@
+$Id: ChangeLog,v 1.254 2009/01/04 16:12:59 Stevan_White Exp $
+2009-01-04 Stevan_White
+ * FreeMono.sfd, FreeMonoBold.sfd, FreeMonoBoldOblique.sfd, FreeMonoOblique.sfd, FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd, FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd:
+
+ Added 2009 to copyright dates
+
+ * AUTHORS, CREDITS:
+
+ Removed Glagolitic range author
+
+ * FreeSans.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd:
+
+ Added some TrueType names
+
+2009-01-01 Stevan_White
+ * FreeSerif.sfd:
+
+ Removde Glagolitic range, since have not (yet) received OK from author.
+
+ Added some TrueType Names
+
+2008-12-31 Stevan_White
+ * COPYING:
+
+ Updated license to GPL v3
+
+2008-12-30 Stevan_White
+ * FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd:
+
+ Oblique versions of Daniel Johnson's Cherokee.
+
+ * FreeSerifBold.sfd:
+
+ Cherokee Bold range from Daniel Johnson.
+
+2008-12-27 Stevan_White
+ * isMonoMono.py:
+
+ 900 EM -> 800
+
+ * FreeMonoBold.sfd, FreeMonoBoldOblique.sfd:
+
+ Made glyphs to lie between -200 and 800 EM
+
+ * isMonoMono.py:
+
+ check that glyphs lie in vertical bounding boxes
+
+ * FreeMono.sfd, FreeSerif.sfd:
+
+ Extensible bracket characters didn't exactly line up. Fixed.
+ Mono: a couple of glyphs had gotten out of their bounding boxes again.
+
+2008-12-26 Stevan_White
+ * FreeMono.sfd, FreeMonoBold.sfd, FreeMonoBoldOblique.sfd, FreeMonoOblique.sfd, FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd:
+
+ Final pre-release cleanup
+
+ * FreeSerif.sfd:
+
+ Buginese vowel u was misnamed
+
+ * FreeMono.sfd:
+
+ Yatcyrillic somehow was a mark character ... fixed
+
+ * FreeSans.sfd, FreeSansOblique.sfd:
+
+ Had to un-link references in
+ Sans: uni02B2, uni02B5
+ SansOblique: uni0363
+ because validation of the TTF file said the glyph
+ "is drawn in wrong direction"
+ I would have preferred to have understand this...
+
+ * Makefile:
+
+ Added quick test for FontForge version.
+
+ * FreeMonoBold.sfd, FreeMonoBoldOblique.sfd:
+
+ Removed kerning tables (?? what were they doing here anyway??)
+
+ * FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd:
+
+ Kerning tables for Thai.
+ Handles one common case: short letter followed by a tall one with
+ an overhang to the left.
+
+2008-12-25 Stevan_White
+ * FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd, FreeSerif.sfd, FreeSerifItalic.sfd:
+
+ More putzing with kerning tables
+
+ * FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd, FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd:
+
+ Copied kerning classes
+ Serif -> SerifBold
+ SerifItalic -> SerifBoldItalic
+ Sans -> SansOblique SansBold SansBoldOblique
+ Some associated naming of characters, etc
+
+ * FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd, FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd:
+
+ Additions and correction in Spacing Modifier letters and IPA Extensions
+
+2008-12-23 Stevan_White
+ * FreeSerif.sfd:
+
+ Applied patch to Cherokee range
+
+2008-12-20 Stevan_White
+ * FreeSerif.sfd, FreeSerifItalic.sfd:
+
+ Fixed kern classes that end in space (crashes FontForge)
+
+ * FreeSerifItalic.sfd, FreeSerif.sfd:
+
+ kerning
+
+2008-12-19 Stevan_White
+ * FreeSerifItalic.sfd:
+
+ kerning
+
+ * FreeSerif.sfd:
+
+ kerning
+ Some adjustments to Glagolitc spacing, mark positioning
+
+2008-12-18 Stevan_White
+ * FreeSerif.sfd, FreeSerifItalic.sfd:
+
+ kerning
+
+2008-12-17 Stevan_White
+ * FreeSerif.sfd, FreeSerifItalic.sfd:
+
+ kerning
+
+2008-12-11 Stevan_White
+ * FreeSans.sfd, FreeSerif.sfd:
+
+ kerning
+
+2008-12-10 Stevan_White
+ * FreeSans.sfd, FreeSansBold.sfd:
+
+ kerning
+
+ * FreeSans.sfd, FreeSansBold.sfd, FreeSansOblique.sfd, FreeSerif.sfd, FreeSerifBold.sfd:
+
+ kerning
+
+2008-12-09 Stevan_White
+ * FreeSerif.sfd, FreeSerifItalic.sfd:
+
+ kerning
+
+2008-12-08 Stevan_White
+ * FreeSansOblique.sfd:
+
+ Slanted small final sigma. Remedies
+ bug #24993: U+03C2 "Greek small letter final sigma" not slanted in
+ Free Sans Oblique
+ https://savannah.gnu.org/bugs/index.php?24993
+
+2008-12-07 Stevan_White
+ * FreeSans.sfd, FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd:
+
+ kerning, etc
+
+2008-12-06 Stevan_White
+ * FreeSansOblique.sfd, FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifItalic.sfd:
+
+ kerning
+ Tweek in Sans having to do with addition of Latin Extended
+
+2008-12-05 Stevan_White
+ * FreeSansBold.sfd, FreeSansBoldOblique.sfd:
+
+ Tweeks to Latin Extended Additional
+
+ * FreeSansBoldOblique.sfd:
+
+ Added Latin Extended Additional range
+
+ * FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd:
+
+ Extra space at end of kern class names has bad effect on FornForge
+ script that try to run through kern classes. Some FontForge call
+ corrupts memory.
+ Got rid of extra space.
+
+2008-12-02 Stevan_White
+ * FreeMono.sfd, FreeMonoBold.sfd, FreeMonoBoldOblique.sfd, FreeMonoOblique.sfd, FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd:
+
+ Replaced U+0387 GREEK ANO TELEIA with top dot of colon.
+ See bug #24987: U+0387 GREEK ANO TELEIA too low
+ https://savannah.gnu.org/bugs/index.php?24987
+
+ * FreeSerif.sfd:
+
+ more kerning in Cyrillic (broke into two tables of classes)
+
+2008-12-01 Stevan_White
+ * FreeSerif.sfd:
+
+ tweeks to kernin
+
+ * FreeSerifBoldItalic.sfd:
+
+ kerning
+
+2008-11-30 Stevan_White
+ * FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd:
+
+ Kerning for Latin and Cyrillic fairly complete in Serif faces.
+ Complete in sense that it looks pretty good under Pango for
+ English French German Spanish Polish Czech Latvian
+ But have not done Vietnamese (will require many more entries).
+ I adjust roman and italic, then copy tables by hand to bold and
+ bolditalic.
+ Misgiving: bolditalic is much too crammed
+ Overall, I may have over-kerned. (A difficult temptation to master.)
+
+ * FreeSerif.sfd, FreeSerifItalic.sfd:
+
+ kerning
+
+ * FreeSans.sfd, FreeSerif.sfd, FreeSerifItalic.sfd:
+
+ kerning
+ In Serif, modified widths of some extended latin glyphs
+
+2008-11-29 Stevan_White
+ * FreeSerif.sfd:
+
+ Broke Latin kerning subtable into four, hoping it will be easier to
+ understand and maintain.
+
+ * FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSerif.sfd,
+ FreeSerifItalic.sfd, FreeSerifBold.sfd, FreeSansOblique.sfd,
+ FreeSans.sfd:
+
+ kerninig
+
+2008-11-28 Stevan_White
+ * FreeSans.sfd, FreeSerif.sfd:
+
+ more kerning;
+ made guillemot narrower
+
+ * FreeSansOblique.sfd, FreeSerif.sfd:
+
+ previous commit was incomplete
+
+ * FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd:
+
+ Adjusted width of single quotes (and apostrophe) to be "punctuation width"
+ More fiddling with kerning.
+
+2008-11-27 Stevan_White
+ * FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifItalic.sfd:
+
+ much fiddling with kerning
+
+2008-11-26 Stevan_White
+ * FreeSerifBold.sfd:
+
+ Basic kerning, named main Cyrillic letters
+
+ * FreeSerifItalic.sfd:
+
+ Basic Cyrillic kerning
+
+ * FreeSerif.sfd:
+
+ Tweeks to Cyrillic kerning
+
+ * FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifItalic.sfd, Makefile:
+
+ Much fiddling with kerning, tables, and generating fonts whose kerning
+ tables work with OpenOffice.
+
+2008-11-24 Stevan_White
+ * FreeSerif.sfd:
+
+ regularized padding in Miscellaneous symbols.
+ At least within related ranges tried to make similar.
+ Made to validate
+
+2008-11-23 Stevan_White
+ * FreeSerif.sfd:
+
+ Filled out Miscellaneous Symbols. Used George Douros' Unicode font.
+ Completed Miscellaneous Symbols, with some drawings from George Douros'
+ Unicode Symbols, and some of mine.
+
+ * FreeMono.sfd, FreeMonoOblique.sfd:
+
+ Replaced Greek Exteded psili and dasia with scaled versions of the
+ "bent quote" mark. I think it's distinctive enough, but not so silly.
+
+ Remedies bug #22997: Mono: Greek Extended psili is ugly
+ https://savannah.gnu.org/bugs/?22997
+
+ * FreeSerif.sfd:
+
+ Made some recycling symbols
+
+ * FreeMono.sfd, FreeMonoBold.sfd, FreeMonoBoldOblique.sfd, FreeMonoOblique.sfd, FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd, FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd:
+
+ Finished with Hebrew Pointed letters in all faces.
+
+2008-11-22 Stevan_White
+ * FreeSans.sfd:
+
+ Fiddled with Hebrew Pointed letters
+
+ * FreeSerifItalic.sfd:
+
+ Marks for Vietnamese
+
+ * FreeSerif.sfd, FreeSerifItalic.sfd:
+
+ Letter pe had strange thick middle ear that looked awful. lamed had ben
+ bumped at some point. Fixed. Adjusted some of the points.
+
+2008-11-21 Stevan_White
+ * FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd:
+
+ repairs to Pointed Hebrew
+
+ * FreeSerif.sfd:
+
+ Numeral line positioning marks for Gothic
+
+ * FreeSerifItalic.sfd:
+
+ Added Combining Marks for Symbols (some question about obliqueness of
+ some symbols)
+ Cleaned up some empty glyphs in Pointed Hebrew.
+
+2008-11-20 Stevan_White
+ * FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd:
+
+ Provided Hebrew pointed letters, with lookups, for all Serif faces.
+
+2008-11-19 Stevan_White
+ * FreeSerifBoldItalic.sfd:
+
+ renamed Hebrew lookups
+
+ * FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd:
+
+ Completed Hebrew in Bold faces.
+
+ * FreeSans.sfd, FreeSansOblique.sfd, FreeSerif.sfd, FreeSerifItalic.sfd:
+
+ More tweeks to Hebrew points
+
+ * FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSerif.sfd, FreeSerifItalic.sfd:
+
+ Adjustments corrections and additions to Hebrew points
+
+2008-11-18 Stevan_White
+ * FreeSansBold.sfd:
+
+ Cleaned out a lot of ridiculous kernings
+
+2008-11-17 Stevan_White
+ * FreeSansBoldOblique.sfd:
+
+ fiddled with Armenian ligatures
+
+ * FreeSansBoldOblique.sfd, FreeSansOblique.sfd:
+
+ Added Armenian (with ligatures) to BoldOblique
+ Fiddled with character spacing
+
+2008-11-16 Stevan_White
+ * FreeMono.sfd, FreeMonoBold.sfd, FreeMonoBoldOblique.sfd, FreeMonoOblique.sfd, FreeSans.sfd, FreeSansOblique.sfd, FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd:
+
+ Added U+01f9 and paragraph end marker to Georgian
+ Fiddled with Armenian ligatures
+
+2008-11-15 Stevan_White
+
+ * FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd:
+
+ Another pass at letter spacing in Cyrillic.
+ Also went through ancient letters.
+
+ Added Georgian paragraph separator 10FB
+ Added Georgian turned gan 10F9 (because it was easy)
+
+ Re-worked letter spacing through modern Cyrillic range.
+
+ * FreeSans.sfd, FreeSansBold.sfd, FreeSerif.sfd:
+
+ Letter spacing
+
+2008-11-14 Stevan_White
+ * FreeSerif.sfd:
+
+ Added several characters to Cyrillic Extended-B
+
+ * FreeSansBold.sfd, FreeSansBoldOblique.sfd:
+
+ Made Cyrillic hooked e U+04BC-F to look less goofy.
+
+ * FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd:
+
+ Based on assertion on Pechatnyj Dvor's web site, Cyrillic Fita
+ U+0472-3 and "Barred O" U+04E8-9 are different styles the same letter,
+ and the fact that the tilde in the O never looked good in Sans, I
+ made them all barred O's.
+
+ * FreeSerif.sfd:
+
+ Added Cyrillic Yn, yn (U+a65e-f)
+
+ * FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd:
+
+ Synced up Cyrillic and Combining Diacritics ranges,
+ Couple of tweeks in Gujarati to make TT validate
+
+ * FreeSans.sfd, FreeSansOblique.sfd, FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd:
+
+ Changes to older Cyrillic letters, in response to further information.
+ Made omegas, omegas with titlo, and OT to all be of the same size and
+ shape in Serif.
+ Un-linked Cyrillic Psi and psi from Greek, made squarer versions.
+
+ Some more Cyrillic diacritical marks in Sans. Re-worked U+04bc-f .
+ Experimenting with mark positioning for Cyrillic
+
+2008-11-12 Stevan_White
+ * FreeMono.sfd, FreeMonoBold.sfd, FreeMonoBoldOblique.sfd, FreeMonoOblique.sfd, FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd, FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd:
+
+ Strove to make Euro look more like the EC logo design, while making
+ glyph fit better with the design of its face. Bug #3576: Euro design
+ https://savannah.gnu.org/bugs/?23576
+
+ * FreeSans.sfd, FreeSerif.sfd:
+
+ Adjustments mostly to GPOS tables having to do with Vietnamese marks.
+ The WAZU Vietnamese test page looks pretty good in Sans now.
+ Still not thrilled with below-dot when it appears with a mark over
+ e.g. U+0102. Pango positions one or the other but not both.
+
+ * FreeMono.sfd, FreeMonoBold.sfd, FreeMonoBoldOblique.sfd, FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd, FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd:
+
+ Extensive modification of GPOS lookup tables for mark positioning.
+ I think they're now all functional (except styled Mono faces have none).
+ Also added lots of marks to faces that didn't have them, and also
+ fiddled with Combining Diacritical Marks.
+
+2008-11-10 Stevan_White
+ * FreeSerif.sfd:
+
+ Made one combining mark really combining
+
+ * FreeMono.sfd, FreeMonoBold.sfd, FreeMonoBoldOblique.sfd, FreeMonoOblique.sfd:
+
+ Made a few combining characters to be zero-width in Mono,
+ Added them to other styles.
+
+ * FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd:
+
+ Figured out why below marks in Thai weren't working in the lowest
+ letters. I think Pango and other font renderers ignore 'blwm'.
+ However, 'mark' works.
+
+ * FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd:
+
+ Tweeks to Thai marks
+
+2008-11-09 Stevan_White
+ * FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd:
+
+ Several bugfixes in Thai, mostly having to do with mark placement and
+ ligatures. Implemented ru-saraaa and lu-saraaa with ligatures.
+
+ * FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd:
+
+ added and named dottedcircle (used by Pango to render
+ combining mark base)
+
+ * FreeSerif.sfd:
+
+ Tweeks to Coptic, after viewing more papyrus samples and web pages.
+
+ * FreeSerif.sfd:
+
+ Weight of Coptic small letters made to match that of Latin and Greek ones.
+
+2008-11-08 Stevan_White
+ * FreeSerif.sfd:
+
+ Made Coptic to comply better with
+ http://www.wazu.jp/gallery/Test_Coptic.html
+ Made a flourish at foot of letters with long diagonal.
+
+ More tweeks to Coptic; put in a mark lookup table.
+
+ Note: for small letters I made scaled references to captials.
+ Results in those letters looking quite light next to the capitals and
+ next to small Latin letters. Also, there are a few variant forms for
+ capitals (Unicode samples don't show this). It would be good to
+ re-work
+
+ Added Coptic alphabet in u+2C80-2CB1 and u+03E2-u+03EF, drawn/built by
+ me, based on Unicode samples, TeX font copte, and scans at WikiPedia.
+
+2008-11-07 Stevan_White
+ * FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd:
+
+ Further tweeks to dieresis in Greek and Cyrillic
+
+ * FreeSerif.sfd:
+
+ replaced Greek I dieresis with references, tweeked height of dieresis.
+
+2008-11-04 Stevan_White
+ * FreeSerif.sfd:
+
+ Added a few Cyrillic Extended-B letters seen in web pages while looking
+ for Glagolitic text.
+
+ * FreeMono.sfd, FreeMonoOblique.sfd:
+
+ Added a few old Cyrillic characters.
+
+ * FreeSerif.sfd:
+
+ Several corrections and tweeks to Glagolitic.
+ Still missing six slots from Unicode, but don't see them in the TeX
+ fonts.
+ On the other hand, several on-line Glagolitic pages (bibles etc) don't
+ seem to use these. Maybe it's OK as-is.
+
+2008-11-03 Stevan_White
+ * FreeSerif.sfd:
+
+ Added lowercase range to Glagolitic, as a facile scaling of the
+ uppercase.
+
+ Added letter to Glagolitic, scaled range.
+
+2008-11-02 Stevan_White
+ * FreeSerif.sfd:
+
+ Replaced fraktur bold from Mathematical Alphanumeric Symbols with that
+ from TX Fonts by Young Ryu.
+ One concern: letter k is damaged (in both medium and bold). I just
+ hacked something up.
+
+ Added Glagolitic "round type" font (Croation capitols only) from the
+ collection of Croatian fonts for LaTeX by Darko Zubrinić
+ ftp://ftp.dante.de/tex-archive/languages/croatian/
+ http://www.tug.org/TUGboat/Articles/tb17-1/tb50zubr.pdf
+
+ Several letters are missing besides the small letters.
+
+ * FreeSerifBoldItalic.sfd:
+
+ A couple of Thai references got obliqued twice.
+
+ * FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd:
+
+ By popular demand, removed 'ears' from Greek Upsilon and Psi.
+ Copied resulting glyphs to Serif Mathematical Alphanumeric Symbols.
+
+ * FreeSerif.sfd:
+
+ Some pointwise cleanup of main Tamil range
+
+ Tried some things with lookups. Didn't make much headway.
+
+2008-11-01 Stevan_White
+ * FreeMono.sfd:
+
+ somehow made a letter with wrong width
+
+ * FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd:
+
+ Added similar lookups and ligatures to Thai ranges.
+
+ * FreeSerif.sfd:
+
+ Lookups now work no worse than those for other Thai fonts, at least
+ in Pango. Still perplexed by behaviour of "Required" lookups.
+
+ For Thai, made ligatures and lookups for yoying and thothan combined
+ with a lower vowel. These work well.
+ Attempted looksups for saraaa with ru and lu, and for saraam.
+ Not working.
+
+ Cleaned up a few of the Bengali ligatures
+
+ * FreeSerifBold.sfd:
+
+ Tweek Thai
+
+2008-10-31 Stevan_White
+ * FreeSerif.sfd:
+
+ Fixed ligatures and mark positioning for Hanunóo.
+ Problem with ligatures: Gnome pango doesn't do 'rlig', only 'liga'
+
+ * FreeSerifItalic.sfd:
+
+ Changed lookup table scripts for Devanagari and Bengali.
+ Find Problems -> ATT found several problems showing lookups acting on
+ glyphs that weren't listed in the script ranges, including dev2, bng2
+ (why not deva and beng, I don't know).
+
+ danda and doubledanda of Devanagari I understand are to be shared among
+ Indic scripts. So included bng2 and dev2 in the 'aalt' table for those.
+
+ The 'init' and 'half' tables for Bengali made active for bng2.
+
+ The 'locl' table for Bengali didn't do anything I could see: It mapped
+ the Devanagari danda to itself, and the doubledanda to itself. Deleted.
+
+ Cleaned up some kern tables.
+ adjustments of under 5 EM are invisible. Some others I just didn't like.
+ Some were putting a letter beneath another, with is wrong.
+
+ * FreeSerifBoldItalic.sfd:
+
+ Added Thai
+
+ * FreeSerifBold.sfd, FreeSerifItalic.sfd:
+
+ Changes to mark positioning lookups, esp. in Italic.
+ Widened numerals in Bold
+
+2008-10-27 Stevan_White
+ * FreeSansBoldOblique.sfd, FreeSansOblique.sfd:
+
+ Tweeks regarding Armenian and lookups
+
+ * FreeSansBold.sfd:
+
+ Added Armenian ligatures FB13-FB17 with lookups
+ Also made a historical ligature ('hlig') table for u+0587.
+
+ Toward bug #15183: missing characters from Armenian range
+ https://savannah.gnu.org/bugs/index.php?15183
+
+ * FreeSansOblique.sfd:
+
+ Added Armenian ligatures, lookups. Cleaned up contours.
+
+ * FreeSans.sfd:
+
+ Added 5 Armenian ligatures to U+FB13 – FB17, and made corresponding
+ 'liga' lookup. Found there one ligature u+0587 that according to
+ http://en.wikipedia.org/wiki/Armenian_alphabet
+
+ "in new orthography the և character is not a typographical ligature anymore, and must never be treated as such. It is a distinct letter and has its place in the new alphabetic sequence."
+ So moved this out of the 'liga' lookup and into a new 'hlig' lookup.
+
+2008-10-26 Stevan_White
+ * FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifItalic.sfd:
+
+ Lots of improvements to Thai.
+ Completely revised letter spacing in Italic, and fiddled with combining
+ marks in all.
+ Still aren't working quite right, especially in Italic.
+ Still need to work over digits (in Bold they aren't even bold yet)
+
+ * FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifItalic.sfd:
+
+ Bold Thai : added (painstakingly) constructed glyphs, lookups
+ roman Thai: tweeks
+ Italic Thai: tweeks (Note this still has multiple problems)
+
+2008-10-25 Stevan_White
+ * FreeSerif.sfd:
+
+ WAZU says
+ http://www.wazu.jp/gallery/Fonts_Hanunoo.html
+
+ MPH 2B Damase doesn't support the consonant-vowel ligatures necessary
+ to render Buhid writing.
+
+ OK, so I made 'mark' lookups for combining marks and a bunch of
+ ligatures in an 'rlig' lookup. The latter still not working:
+ don't know why.
+
+ Made page to match the example of the combining forms at
+ http://www.omniglot.com/writing/hanunoo.htm
+
+2008-10-24 Stevan_White
+ * FreeSerif.sfd:
+
+ Removed some marks from Mathematical Alphanumeric Symbols
+
+ * FreeSerif.sfd:
+
+ Tweeked combining marks for Vietnamese. Made to satisfy
+ WAZU JAPAN Comprehensive Unicode Test Page for Vietnamese
+ http://www.wazu.jp/gallery/Test_Vietnamese.html
+ Could still use some tweeking...
+
+ * FreeSerif.sfd:
+
+ Added marks for composition of Vietnamese
+
+ * FreeMono.sfd, FreeSerif.sfd:
+
+ Put "below" combining mark on lots of vowels and derivatives,
+ for Vietnamese.
+ Named a bunch of composit Latin, expecting to make substitutions.
+
+2008-10-23 Stevan_White
+ * FreeSerif.sfd:
+
+ Thai spacing alterations based on advice of a native speaker.
+
+2008-10-22 Stevan_White
+ * FreeSerif.sfd:
+
+ re-named Thai lookups according to order
+
+2008-10-21 Stevan_White
+ * FreeSans.sfd:
+
+ Cleanup of glyphs in Gujarati, Devanagari.
+
+ Note: Serious problem with Sans GPOS abvm in Devanagari
+ "'abvm' Above Base Mark in Devanagari subtable" "gujr-0"
+ But all the characters that list gujr-0 are in Gujarati.
+ Not sure how this got broken or how to fix it.
+
+ * FreeSerif.sfd:
+
+ Fiddled with Thai mark positioning: passes my tests now OK.
+ Made a few more references in Math Symbols; more regularization of
+ stroke.
+
+ * FreeSerif.sfd:
+
+ Added mark class for Vietnamese "horn"
+ Several references made in General Punctuation, Arrows
+
+ * FreeMono.sfd:
+
+ added some Combining Diacritical Marks
+
+2008-10-20 Stevan_White
+ * FreeSerif.sfd:
+
+ Made some references from serifed Latin capitals to Greek counterparts.
+
+ * FreeSerif.sfd:
+
+ Made a few repeated glyphs into references in Musical Symbols
+
+2008-10-19 Stevan_White
+ * FreeSerif.sfd:
+
+ Moved several glypns from Mathematical Alphanumeric Symbols to
+ Letterlike Symbols.
+ Couple tweeks in Mathematical Symbols.
+
+ * FreeMono.sfd, FreeSerif.sfd:
+
+ Fiddling with Mathematical Symbols.
+ In Serif, trying to make stroke width more consistent.
+
+ * FreeMono.sfd, FreeMonoBold.sfd, FreeMonoBoldOblique.sfd, FreeMonoOblique.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd, FreeSerif.sfd:
+
+ Added some Greek symbols in Mono and Sans to make a little more regular
+ and correspond better with TeX.
+ Tweek of serif.
+
+ * FreeSansBold.sfd:
+
+ a few more improvements.
+
+ One problem with the Mathematical Alphanumeric area is, one must
+ remember to change it any time another face is altered...
+
+ * FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSerifBold.sfd:
+
+ Several improvements and additions to Sans faces (mostly in Greek) from
+ experience of pasting into FreeSerif Mathematical Alphanumeric Symbols.
+
+ * FreeSerif.sfd:
+
+ Replaced most of Mathematical Alphanumeric Symbols
+ roman italic bold (latin and greek)
+ gothic italic bold (latin and greek)
+ typewriter
+ and numerals
+ with glyphs from FreeFont. These were scaled to uniform height.
+
+ Remains: Blackboard Bold, Fraktur, Calligraphic, Script
+
+ * FreeSerif.sfd:
+
+ Tidied lookup table names for Malayalam
+
+ * FreeSerif.sfd:
+
+ Applied Malayalam patch from Hiran Venugopalan
+
+ * FreeMono.sfd:
+
+ Added/corrected many Mathematical Symbols
+
+ * FreeSansOblique.sfd:
+
+ more IPA
+
+2008-10-18 Stevan_White
+ * FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd:
+
+ Made lots more IPA and Phonetic Extensions
+ Note: fontforge is reporting an error in a few glyphs made by scaling
+ another, that the glyphs are drawn in the wrong direction--only in
+ TrueType though. Suspect a FontForge bug.
+
+ Added several Combining Diacritical Marks
+
+2008-10-17 Stevan_White
+ * FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd:
+
+ Made several Spacing Modifier Letters, Combining Diacritical Marks,
+ and IPA and Phonetic Extensions
+
+2008-10-16 Stevan_White
+ * FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd:
+
+ Added some Superscripts and Subscripts
+
+ * FreeMono.sfd, FreeMonoBold.sfd, FreeMonoBoldOblique.sfd, FreeMonoOblique.sfd:
+
+ Finished off Superscripts and subscripts
+
+ Completed General Punctuation for Mono faces
+
+ Added some General Punctuation
+
+2008-10-15 Stevan_White
+ * FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd:
+
+ more Letterlike Symbols, Currency Symbols
+
+ * FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd:
+
+ Made some Combining Diacritical Marks for Symbols, Letterlike Symbols
+
+ * FreeMono.sfd, FreeMonoBold.sfd, FreeMonoBoldOblique.sfd, FreeMonoOblique.sfd:
+
+ Added some General Punctuation
+
+2008-10-14 Stevan_White
+ * FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd:
+
+ Added double slanted hyphen, made General Punctuaton Supplement like
+ Serif's
+
+ * FreeSansBoldOblique.sfd:
+
+ Filled out Greek Extended
+
+ * FreeMono.sfd, FreeSerifItalic.sfd:
+
+ fixes to last 2 commits
+
+ * FreeSerifItalic.sfd:
+
+ Last character to General Punctuation
+
+ * FreeMono.sfd:
+
+ Built some Enclosed Alphanumerics (1-10)
+
+ * FreeSerif.sfd:
+
+ Copied in Daniel Johnson's changes to Cherokee.
+
+2008-10-12 Stevan_White
+ * FreeSerif.sfd:
+
+ Included Daniel Johnson's Cherokee glyphs.
+
+2008-10-05 Stevan_White
+ * FreeMono.sfd:
+
+ Further corrections to diaresis in Cyrillic -- legibility in small sizes
+
+ * FreeMono.sfd, FreeMonoBold.sfd, FreeMonoOblique.sfd, FreeSerif.sfd:
+
+ Regularized placement of diaresis in Cyrillic
+
+ * FreeMono.sfd, FreeMonoBold.sfd, FreeMonoBoldOblique.sfd, FreeMonoOblique.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd:
+
+ Added same set of glyphs to Cyrillic Supplement
+
+ * FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd:
+
+ Added some of the easier letters from Cyrillic Supplement
+
+2008-10-04 Stevan_White
+ * FreeMono.sfd, FreeMonoBold.sfd, FreeMonoBoldOblique.sfd, FreeSerifItalic.sfd:
+
+ Finished high Cyrillic range for MonoBold and MonoBoldOblique.
+ (Remaining: historic ranges, Cyrillic extensions)
+ Tweeked others.
+
+ * FreeMonoBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd:
+
+ Serif*Italic: Added last Abkhazian letters to Cyrillic
+ MonoBold: tweek
+
+2008-10-03 Stevan_White
+ * FreeMono.sfd, FreeMonoOblique.sfd, FreeSerif.sfd, FreeSerifBoldItalic.sfd:
+
+ Mono: Some additions to historic letters
+
+ * FreeSerif.sfd:
+
+ Added some punctuation and combining numeric marks from
+ Cyrillic Extended B
+
+ * FreeMono.sfd, FreeMonoBold.sfd, FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd:
+
+ Various technical tweeks, mostly concerning recent additions.
+ Also did a bit more "Points too close" and "irrelevant control points".
+ Cyrillic millions redesign meant could not maintain use of refrences
+ for it.
+
+ * FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd, FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd:
+
+ More high Cyrillic
+ Included old Cyrillic millions combining mark in Sans, changed design
+ in Serif
+
+2008-10-02 Stevan_White
+ * FreeMono.sfd, FreeMonoBold.sfd, FreeMonoBoldOblique.sfd, FreeMonoOblique.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd:
+
+ More high Cyrillic
+
+ * FreeMonoOblique.sfd, FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd, FreeSerifBoldItalic.sfd:
+
+ More high Cyrillic glyphs
+
+ * FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd:
+
+ More glyphs in high Cyrillic. Remains only some whose form I'm unsure
+ of in italic.
+
+ * FreeSerifBoldItalic.sfd:
+
+ More glyphs in higher Cyrillic range
+
+ * FreeSerifItalic.sfd:
+
+ Same process of tightening el, em, ge (but a P.S. to previous commit:
+ also did ya, ze for SerifBold.)
+
+ * FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd:
+
+ BoldItalic: Tightened up spacing on left of el, em, ge (could go
+ farther, but it is partly a problem with glyph design...
+
+ * FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd:
+
+ More additions to Cyrillic. Finished SerifBold except for Nivkh
+ additions.
+ Used references on number combining forms.
+
+2008-09-30 Stevan_White
+ * FreeSerif.sfd:
+
+ Added four (obsolete) Chuvash letters to Cyrillic Supplement
+ - completing it.
+
+2008-09-29 Stevan_White
+ * FreeSerif.sfd:
+
+ Greek adjustments
+ Adjusted spacing of kappa slightly
+ Got rid of ears on Psi, following similar request for Upsilon.
+
+2008-09-28 Stevan_White
+ * FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd:
+
+ Adding and fiddling with Spacing Modifiers and Combining Diacriticals
+
+ * FreeSans.sfd, FreeSansOblique.sfd, FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd:
+
+ Revisions of several Combining Diacritical marks
+
+ * FreeMono.sfd, FreeMonoBold.sfd, FreeMonoBoldOblique.sfd, FreeMonoOblique.sfd:
+
+ A few Combining Diacriticals and Spacing Modifiers
+
+ MonoBoldOblique: Primarily filling out Spacing Modifier Letters
+ others: little fixes found along the way
+
+2008-09-27 Stevan_White
+ * FreeSerif.sfd:
+
+ Replaced Malayalam range with that from Rachana_04 found on
+ Swathanthra Malayalam Computing project page
+ http://savannah.nongnu.org/projects/smc/
+ Besides scaling and converting to cubic, performed much clean-up of
+ glyphs, added an r2 character, and re-named a bunch of characters.
+
+2008-09-22 Stevan_White
+ * FreeSerif.sfd:
+
+ Filled in as much of Phonetic Extensions as I could without artistic
+ abilities.
+ Note 1D48-9 are not references due to apparent FontForge bug, that says
+ scaled references go in wrong direction.
+
+ * FreeSerif.sfd:
+
+ Cleaup of some Bengali glyphs.
+ Note many of the ligatures remain very very messy.
+
+ * Makefile:
+
+ added more validations
+ made to work with GenerateOpenType
+
+ * FreeSerif.sfd:
+
+ Built two more easy Phonetic Extensions
+
+ * FreeSerif.sfd:
+
+ Built some Phonetic Extensions letters, those with middle tilde
+
+2008-09-21 Stevan_White
+ * FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd:
+
+ Added lots of Spacing Modifier Letters and Combining Diacritical Marks.
+
+ * FreeMono.sfd, FreeMonoBoldOblique.sfd, FreeMonoOblique.sfd, FreeSans.sfd, FreeSerif.sfd:
+
+ Wrote script to check if glyph encodings were in stated ranges, fixed
+ most discrepancies.
+
+ There were a bunch of incompletely deleted characters in several faces.
+
+ Sans: found several other problems in the process
+ # Tamil
+ Four slots labelled 0BDA-D have glyphs, not in Unicode. also 0BE1
+ I think they are misplaced; added 0010 to each of them
+
+ # Devanagari
+ Slot labelled U+093B is not in Unicode--can't find glyph: deleted
+ likewise 094F (may have been meant to be 0954)
+ 0955, 0973-0976
+
+ 0954 should be a combining mark, but it appears on the wrong side of 0.
+ 0971 was just wrong--made into simple dot.
+ 0972 is also wrong--made my own Candra A.
+
+ # Gujarati
+ Slots labelled 0AE4-5 are not in Unicode; seem not to belong at all.
+ Deleted. 2800 is a dup of 2790. Deleted
+
+ Serif: phillipine_double u1736 was misplaced
+
+ A bunch of the Math Alphanumeric symbols are empty in the standard,
+ because they're represented elsewhere. These should be deleted
+ First need to make style consistent with existing symbols.
+
+ * FreeSerif.sfd:
+
+ Applied patch from Daniel J
+ Remedies bug
+ FreeSerif: Missing glyphs with palatal hook
+ https://savannah.gnu.org/bugs/index.php?24298
+ Adding several letters to Phoenetic Extensions range U+1D80-BF
+
+ * FreeMono.sfd, FreeMonoBold.sfd, FreeMonoBoldOblique.sfd, FreeMonoOblique.sfd:
+
+ Made four characters U+200C-F to be zero-width
+ Remedy to bug #23593: Mono 0-width chars: zero-width or space?
+ https://savannah.gnu.org/bugs/index.php?23593
+
+ * FreeSerif.sfd:
+
+ Made Mahjong tiles to take up less space using references
+ Cleaned up several validation problems
+
+2008-09-19 Stevan_White
+ * FreeSerif.sfd:
+
+ Added several Hebrew Alphabetic Presentation Forms (some easy ones), to
+ make its coverage the same as Serif Bold.
+
+ * FreeSerifBold.sfd:
+
+ Re-encoded.
+ Deleted several glyphs in Hebrew Alphabetic Presentation Forms that
+ didn't correspond valid Unicode
+
+ * FreeMonoBold.sfd, FreeSans.sfd, FreeSerifItalic.sfd:
+
+ Ran script to find mis-numbered glyphs. Several were simply typos,
+ some offset by one.
+
+ * FreeSansOblique.sfd:
+
+ Numerous cases of glyphs in Private Use area incorrectly assigned
+ Unicode numbers and names. Gave all -1 for Unicode and named like
+ "slot.XXXX".
+
+ * FreeSerif.sfd:
+
+ Adapted Mahjong Tiles from George Douros' Unicode Symbols font.
+
+ * FreeSerif.sfd:
+
+ Added Domino Tiles. Domino outline is copied from George Douros'
+ Unicode Symbols, but the rest I preferred to do with references.
+
+2008-09-18 Stevan_White
+ * FreeSerif.sfd:
+
+ Adapted Mathematical Alphanumeric Symbols from George Douros' Unicode
+ Symbols font.
+
+ * FreeMonoBoldOblique.sfd:
+
+ This one got away from me--I don't know what I did.
+ Looks like some small contour edits.
+
+ * FreeSansBoldOblique.sfd:
+
+ Fixed one mis-numberd character in Latin Extended-B
+
+ * FreeSerifBold.sfd, FreeSerifItalic.sfd:
+
+ Fixed several mis-numbered characters.
+
+ * FreeSansBold.sfd:
+
+ SansBold: one Georgian letter with no name, one Zapf Dingbat was
+ unnumbered
+ ATT test shows a bunch of problems with Gurmukhi and 'blwf' table
+ indeed shows those letters at 0x10000+
+ Sans names them like uni0A30_uni0A4D.blwf: they are in range
+ ECC6 to ED06
+
+ I meant to move this range into Private Use in last release, and
+ missed it. So now it is moved, into same range as Sans.
+
+ Both Sans and SansBold in nukt table for Gurmukhi have duplicate
+ entries for uni0A15 uni0A3C. Deleted dups.
+
+ * FreeMonoOblique.sfd:
+
+ fixed a number of Unassigned Code Points in Greek Extended
+
+ * FreeSansOblique.sfd:
+
+ mis-numbered Combining Diacritics
+
+ * FreeSansOblique.sfd:
+
+ Several chars in Latin Extended hadn't been named.
+ One spurious letter in Letterlike Symbols
+
+2008-09-16 Stevan_White
+ * FreeMono.sfd, FreeSans.sfd, FreeSerif.sfd:
+
+ Lots of additions: unless otherwise noted, they are from George Duros'
+ fonts Analecta, Music, and Unicode (haven't got final confirmation of
+ the eligibility of these glyphs, so this is just for testing.)
+
+ Added some combining marks, fiddled a bit. In both Serif & Mono, tried
+ to get a key symbol characters to fit inside the key combining mark
+
+ Serif
+ Got rid of ears on Upsilon
+ Added:
+ # Gothic
+ # Western & Byzantine Musical Symbols
+
+ # Misc Symbols, Misc Technical Symbols (drew many myself)
+ # Supplemental Symbols and Arrows
+
+ Mono
+ Added:
+ # lotsa Misc Technical Symbols
+ # OCR Symbols
+ # drew many Supplemental Symbols and Arrows, Misc Technical
+
+ Sans
+ Added # Phoenecian
+ Made a few Letterlike Symbols; Made Re and Im to be sans-serif.
+
+2008-09-11 Stevan_White
+ * FreeSerif.sfd:
+
+ Removed pointless entries from Latin kern table
+
+ Tidied points in Sinhala
+
+2008-09-07 Stevan_White
+ * FreeSerif.sfd:
+
+ Tidied up Tamil ligatures EEA8-EEAB to fix TT build warning
+ "MonotonicFindAlong: Never found our spline."
+
+ * FreeMono.sfd, FreeMonoBold.sfd, FreeMonoBoldOblique.sfd, FreeSans.sfd, FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, Makefile:
+
+
+ Added APL characters to FreeMono (why?...)
+
+ Fixed several last-minute problems, including
+
+ Serif: Tweeked GPOS mark table for Cyrillic
+ Sans: Added a GPOS table for Cyrillic (but several diacritics missing)
+
+ Serif, Mono: tweeked some bugs in extensible brackets & integrals
+
+ Serif: Vietnamese o circumflex: accent was a bit high. fixed.
+
+ MonoBoldOblique OTF build
+ uni213b intersects self
+
+ Generation of TT fonts complains about several things to stderr,
+ including:
+
+ SerifBold: "There exists a 'fpgm' code that seems incompatible with FontForge's. Instructions generated will be of lower quality. If legacy hinting is to be scrapped, it is suggested to clear the `fpgm` and repeat autoinstructing. It will be then possible to append user's code to FontForge's 'fpgm', but due to possible future updates, it is extremely advised to use high numbers for user's functions."
+ Probably has been there since I first copied the TT instructions in.
+ Just repeated the copying process carefully, and the warning went away.
+
+ Serif: "FindMatchingHVEdge fell into an impossible position"
+ fixed a bunch of point too close
+
+ REMAINING PROBLEM in Serif TT build
+ "MonotonicFindAlong: Never found our spline."
+ fixed several bad TT matrices-- there are several more
+ fixed many "control points too close" no luck
+
+2008-09-03 Stevan_White
+ * FreeSans.sfd, FreeSansOblique.sfd:
+
+ Added/corrected some Misc. Symbols by copying from Serif.
+ Note this is only a stopgap solution. Want real sans-serif symbols.
+
+ * FreeMono.sfd, FreeMonoBold.sfd, FreeMonoBoldOblique.sfd, FreeMonoOblique.sfd, FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd:
+
+ Added minimal Miscellaneous Symbols: card suites and some musical notes.
+ Note not happy with shapes...some I just drew. Sans isn't really sans.
+
+ Fixed one APL symbol in Mono so it verified in OTF version
+
+2008-08-31 Stevan_White
+ * FreeMono.sfd:
+
+ Built set of APL symbols.
+
+2008-08-30 Stevan_White
+ * FreeSans.sfd:
+
+ Un-linked references in uni02B2 and uni02B5, because when validating the
+ TrueType version, FontForge gave an error "is drawn in wrong direction".
+ I suspect a bug in FontForge. Other similar glyphs make no errors.
+
+ Fixed missing extrema in TrueType.
+ These were the last cases being reported by validate in all the faces.
+
+ * FreeSerifItalic.sfd:
+
+ fixed last missing extrema in TrueType
+
+ * Makefile:
+
+ restructured validation to look in a directory
+
+ * FreeSans.sfd, FreeSansOblique.sfd, FreeSerif.sfd:
+
+ Fixed missing extrema in TrueType versions
+
+2008-08-15 Stevan_White
+ * FreeSans.sfd:
+
+ Same problem with uni0A83 as with bn_llikaar. Just made zero-width.
+
+2008-08-14 Stevan_White
+ * FreeSans.sfd, FreeSansOblique.sfd:
+
+ Glyph bn_llikaar, U+09E3 BENGALI VOWEL SIGN VOCALIC LL,
+ has right bound positioned far into the negative. Causes a warning in
+ FontForge when opening OTF version.
+ Comparing with other fonts supporting Bengali, found no others that
+ do this.
+ Serif makes glyph width 0 (which sounds right according to Unicode)
+ and puts glyph wholly to left of 0. But, I haven't found this letter
+ in text anywhere. I wonder if it is really used in writing.
+
+ * FreeSans.sfd, FreeSansOblique.sfd, FreeSerif.sfd, FreeSerifItalic.sfd:
+
+ Further TrueType validation fixes.
+ Sans still has two glyps in wrong direction.
+
+ * FreeSans.sfd, FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd:
+
+ Fixed more TrueType problems...all missing extrema in TTF validation
+
+2008-08-13 Stevan_White
+ * FreeSans.sfd, FreeSansOblique.sfd, FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd:
+
+ fixed all the TrueType validation problems of type "intersects itself"
+ and all but two of the "wrong directions", as well as a lot of
+ "missing extrema". But there remain hundreds of missing extrema in the
+ TrueType version.
+ Also, bn_llikaar in Sans and Oblique still has a problem in OTF version.
+
+ * FreeMono.sfd, FreeMonoBoldOblique.sfd, FreeMonoOblique.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd:
+
+ Made .ttf files to validate. Other faces have many more problems still.
+
+2008-08-12 Stevan_White
+ * FreeMonoOblique.sfd, FreeSerif.sfd, FreeSerifItalic.sfd:
+
+ Continuing to make OTF versions validate.
+
+ * FreeMonoOblique.sfd:
+ lots of missing points at extrema
+ * FreeSerif.sfd:
+ 12 wrong directions, 1 missing extrema
+ * FreeSerifItalic.sfd:
+ many missing points at extrema, 1 self-intersecting
+
+ What was wrong: in several oblique cases, an already-italic glyph was
+ made more italic, thereby fouling up extrema (although why it passed
+ validation in the SFD I don't know). Some glyphs were
+ overly-complicated with many near points. Cleaned up, rounded to int.
+
+ Remaining problem: OTF FreeSansOblique FreeSans. one Bengali glyph in
+ each whose advance width and htmx don't match.
+
+ Moral of story: validate the OTF and TTF versions too before a release.
+
+ * FreeSansOblique.sfd:
+
+ Reverse a mistake from last commit: somehow this file was converted to
+ quadratic, or something.
+
+2008-08-11 Stevan_White
+ * FreeMonoBoldOblique.sfd, FreeSans.sfd, FreeSansOblique.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd:
+
+ Found that SFD files that validated produced OpenType files that don't.
+ These represent the easy fixes. Some were result of conversion to
+ quadratic; some shouldn't have validated in the SFD...
+
+ * MonoBoldOblique: uni0250 missing pts at extrema [reference glyph rotated...]
+ * Sans: uni0AC4 wrong direction [simplified, rounded to int]
+ * SansOblique: uni01EA wrong direction [rounded to int]
+ * SerifBold: uni023f wrong direction [round to int]
+ * SerifBoldItalic: uni0245 missing pts at extrema [ungrouped ref, added extrema]
+
+2008-08-06 Stevan_White
+ * FreeMono.sfd, FreeMonoBold.sfd, FreeMonoOblique.sfd:
+
+ Re-set font metrics, which were somehow making uneven vertical spacing.
+
+2008-06-22 Steve White
+ * FreeSerifBold.sfd, FreeSerifBoldItalic.sfd:
+
+ Made to validate
+
+ * ranges.py:
+
+ Brought more into line with OpenType
+ Added some ranges
+ Fixed bug with ranges outside of font
+
+ * CREDITS:
+
+ 3 new ranges
+
+ * FreeSerif.sfd, FreeSerifItalic.sfd:
+
+ Cyrillic: tweeked accents for consistency, and for readability in small
+ sizes.
+
+ * FreeSerif.sfd:
+
+ Thanna range: tweeking
+
+ Thaana range: Scaled up by about 15%, raised by 100EM, tightened
+ some of the diacritics to get inside 900 to -300 EM limits.
+
+ * FreeSans.sfd:
+
+ Added Old Persian and Ugaritic from MPH2BDamase font.
+
+2008-06-21 Steve White
+ * FreeSerif.sfd:
+
+ Added Tai Le range adapted from MPH2BDamase font.
+
+ * FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd:
+
+ Added some ancient Greek numerals from Tempora to high Unicode area,
+ (partly just to show it can now be done.)
+
+ * FreeSerifItalic.sfd:
+
+ Couple of tweeks putting glyphs above -300EM.
+
+ * FreeSerif.sfd, FreeSerifItalic.sfd:
+
+ Surgery to Thai letter 'tho than', u+0e10, to push it above -300 EM.
+ This makes Thai range completely between 900 and -300 EM.
+
+ * FreeSans.sfd, FreeSansOblique.sfd, FreeSerif.sfd, FreeSerifItalic.sfd:
+
+ Many auxilary characters (esp. for Malayalam, Bengla, and Tamil)
+ representing ligatures and alternative forms without their own Unicode,
+ were moved from
+ ranges above 0xFFFF (which ought to have been slots for other defined
+ Unicode ranges) into the Private Use area.
+
+ In Serif, I segregated the scripts, in Sans it was hard to see where one
+ began and another ended, so I moved them en masse.
+
+ Note several problems with wrongly-named characters:
+ I already re-named glyph570 and glyph582.
+ But there are others with names starting with A...
+
+ * FreeSansBold.sfd, FreeSansOblique.sfd:
+
+ Fixed (I hope the last) problem with scripts in lookups
+ Find Problems -> ATT (all selected) finds multiple issues,
+
+ * FreeSansBold.sfd:
+ In addition to script 'guru', added 'gur2' to the scripts for these
+ lookups
+ 'nukt' Nukta forms in Gurmukhi
+ 'blwf' Below Base Forms in Gurmukhi
+ 'pstf' Post Base Forms in Gurmukhi
+ 'blws' Below Base Substitutions in Gurmukhi
+ 'abvs' Above Base Substitutions in Gurmukhi
+ 'psts' Post Base Substitutions in Gurmukhi
+
+ * FreeSansOblique.sfd:
+ In addition to script 'beng', added 'bng2' to the scripts for the lookup
+ 'half' Half Forms in Bengali
+
+ Moreover, the lookup
+ 'aalt' Access All Alternates in Latin
+ contains only Bengali letters.
+ Re-named as Bengali, made to work on beng, bng2 scripts
+
+2008-06-20 Steve White
+ * FreeSerif.sfd:
+
+ Scaled Sinhala range.
+ Remedies bug #23656: Sinhala letters over-sized
+
+ * FreeMono.sfd, FreeMonoBold.sfd, FreeMonoBoldOblique.sfd, FreeMonoOblique.sfd, FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd, FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd:
+
+ Mostly messing with Greek Extended accents again.
+ re-positioned ypogegrammani on advice of Alexey Kryukov
+ Put prosgegrammani beneath main letters in Mono, to make narrower glyphs
+ Implemented more distinction between tonos and acute.
+
+2008-06-19 Steve White
+ * FreeMonoBoldOblique.sfd:
+
+ Completed fit of Mono to 800 to -200 EM.
+
+ * FreeMono.sfd, FreeMonoBold.sfd, FreeMonoOblique.sfd:
+
+ Set Metrics to recommended values
+
+ * FreeMonoOblique.sfd:
+
+ Now Mono Oblique, as well as roman and Bold, are within 800 to -200 EM.
+ Just BoldOblique to go.
+
+ * FreeMono.sfd, FreeMonoBold.sfd:
+
+ More toward fitting to 800 to -200 EM.
+ Basically, reduced Georgian by 92%.
+ Also made an over-all offset, so Georgian is somehow centered (Bold...I
+ guess I already did this in roman).
+ Want to also do an emboldening to make stroke like rest of font, but
+ current FontForge has a nasty crash that loses data on this function.
+
+ * FreeMono.sfd:
+
+ In effort to make fit in 800 to -200 EM,
+ Scaled Georgian by 92%, centered on 600 wide box.
+ Next: Embolden a bit.
+
+2008-06-18 Steve White
+ * FreeMono.sfd, FreeMonoBold.sfd, FreeMonoBoldOblique.sfd, FreeMonoOblique.sfd:
+
+ Toward making all glyphs lie between -200 and 800 EM.
+ Numerous small changes, especially raising descenders of some Hebrew
+ letters.
+ Georgian remains a problem
+
+2008-06-13 Steve White
+ * FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd:
+
+ Moved prosgegrammeni up to baseline,
+ (and then moved all references down to baseline)
+
+ * FreeMono.sfd, FreeMonoBold.sfd, FreeMonoBoldOblique.sfd, FreeMonoOblique.sfd, FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd, FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd:
+
+ Added Control Picture "blank" to all faces.
+ Switched U+0222-3 from TemporaLGCUni
+
+2008-06-11 Steve White
+ * FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd:
+
+ More fiddling with Greek Extended accents
+
+ * FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd:
+
+ Tweeks to accents etc in Greek Extended and Cyrillic
+
+2008-06-10 Steve White
+ * FreeSerifBold.sfd, FreeSerifItalic.sfd:
+
+ Fixed a few big horizontal spacing problems
+
+ * FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd:
+
+ Implemented TemporaLCGUni glyphs in Cyrillic ranges.
+ Added a breve_cyrillic for the moustache breve mark.
+
+2008-06-08 Steve White
+ * FreeSerif.sfd:
+
+ Replaced most of Cyrillic range with TemporaLGCUni.
+ Remodelled many of the derived Cyrillic characters after these.
+ Fiddled globally with spacing of small letters.
+ Unclear on diacritics 485-6, unhappy with breve.
+
+ * FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd:
+
+ Started implementing TemporaLCGUni in Greek ranges.
+
+ Replaced 3DC-3E1 from Tempora, because I thought they looked nicer and
+ more like the other existing FreeFont glyphs.
+ Replaced 3DA-B from Tempora, because they look more like Unicode
+ samples, and nicer.
+ Added 03f3-4, 03F7-F.
+ Prefer my own lunate epsilon.
+ Replaced Phi and Omega from Tempora.
+ These plainly fit the other FreeFont glyphs better than the origninals.
+ (How did this happen?)
+
+ In bold, replaced U+03D7
+
+ Copied lbbar u+2114
+
+ Small italic greek--replaced most except phi, psi, omega
+
+ Based on new information, broke the identification of oxia with Latin
+ acute.
+
+2008-06-07 Steve White
+ * FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd:
+
+ Efforts to control heights of characters
+
+2008-06-06 Steve White
+ * FreeMonoBold.sfd, FreeMonoBoldOblique.sfd, FreeMonoOblique.sfd:
+
+ Made to validate
+
+2008-06-05 Steve White
+ * FreeSans.sfd:
+
+ Fixed undefined character in kerning classes
+
+2008-06-04 Steve White
+ * FreeMono.sfd, FreeMonoBold.sfd, FreeMonoBoldOblique.sfd, FreeMonoOblique.sfd:
+
+ tweeks and additions to General Punctuation
+
+2008-06-03 Steve White
+ * FreeMono.sfd, FreeMonoBold.sfd, FreeMonoBoldOblique.sfd, FreeMonoOblique.sfd, FreeSansOblique.sfd:
+
+ Completed/tweeked Number Forms
+
+ * FreeMono.sfd, FreeSerif.sfd:
+
+ Added some Miscellaneous Technical symbols
+
+2008-06-02 Steve White
+ * FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd:
+
+ Tweeks...mostly Letterlike
+
+2008-06-01 Steve White
+ * FreeMono.sfd, FreeSerif.sfd:
+
+ Added Box Drawing characters to Serif.
+ Tweeked a glyph in Mono
+
+ * FreeMono.sfd, FreeMonoBold.sfd, FreeMonoBoldOblique.sfd, FreeMonoOblique.sfd, FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd, FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd:
+
+ Added several glyphs to Letterlike Characters
+
+2008-05-31 Steve White
+ * FreeMono.sfd, FreeMonoBold.sfd, FreeMonoBoldOblique.sfd, FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd:
+
+ Validation pass
+
+ SansOblique and SansBoldOblique had validation problem with BlueValues
+ Private Dictionary
+ Elements in BlueValues/OtherBlues array are disordered
+ Elements in BlueValues/OtherBlues array are too close
+ (Change BlueFuzz)
+ StemSnapV does not contain StdVW value.
+ So I ordered the array, and based on other slanted fonts,
+ removed StemSnapV.
+
+ Note however, I still think the two top Blues lines are too close
+ But I don't even know what the second-to-top line is meant to do.
+
+ * FreeSerif.sfd:
+
+ Added to Block Elements, Geometric Shapes
+ Made to validate
+
+2008-05-29 Steve White
+ * FreeMono.sfd, FreeSans.sfd, FreeSansBold.sfd, FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd:
+
+ Looking at special symbols.
+ Drew several Miscellaneous Symbols in Mono and Serif
+ > Completed/corrected planetary symbols, added Dice,
+ some other easy ones
+ > Completed Dingbats in Serif (using URW Dingbats)
+ Added some Block Elements to Serif
+
+2008-05-26 Steve White
+ * FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd:
+
+ More changes stemming from J. Poon's report.
+
+2008-05-25 Steve White
+ * FreeSerif.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd:
+
+ Height surgery on SerifBoldItalic.
+ More fiddling with accents in others.
+
+ * FreeSerifItalic.sfd:
+
+ More height surgery. Only a few left in Benglai and Thai
+
+ * FreeSerifBold.sfd:
+
+ Re-applied surgery to make glyphs between 900 and -300EM
+
+ *** Regression
+ Inadvertently un-linked all references in SerifBold in r1.83.
+ This reverses that error (but also un-does the surgery mentioned there)
+
+ * FreeSerifBold.sfd, FreeSerifItalic.sfd:
+
+ Applied surgery to make Latin letters go under 900EM.
+ One exception yet...
+
+2008-05-24 Steve White
+ * FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd:
+
+ Serif: much fiddling with accents in Latin ranges.
+ Re-thought some glyphs (there are still a few messy ones, especially
+ in bold)
+ Checked horizontal spacing...fixed a number of problems.
+
+2008-05-23 Steve White
+ * FreeSansBold.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd:
+
+ Made Latin Extended-B coverage consistent across Serif; cleaned up some
+ glyphs
+
+ * FreeMono.sfd, FreeMonoBold.sfd, FreeMonoOblique.sfd, FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd, FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd:
+
+ Filled more of General Punctuation in Sans and Serif
+ Made all agree on coverage of Latin Extended Additional
+
+2008-05-22 Steve White
+ * FreeSans.sfd, FreeSansBold.sfd, FreeSansOblique.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd:
+
+ Added Latin Extended Additional to SansOblique.
+ Made Latin Extended Additional coverage consistent across Sans, B, I
+ Made Latin Extended-B coverage same in SerifBold.
+
+ * FreeMono.sfd, FreeMonoBold.sfd, FreeMonoBoldOblique.sfd, FreeSansBold.sfd:
+
+ Mono* made Latin-B coverage consistent across faces
+
+ * FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd:
+
+ Made set of Latin Extended-B consistent across Sans faces
+
+ * FreeSans.sfd, FreeSansBold.sfd:
+
+ More filling in General Punctuation
+
+ * FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd:
+
+ Another bunch of J. Poon's reports
+ also, filling in some Combining Diacriticals, Spacing Modifiers, and
+ General Punctuation in bold faces
+
+2008-05-21 Steve White
+ * FreeMono.sfd, FreeMonoBold.sfd, FreeSans.sfd, FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd:
+
+ Mucking about with mark tables in Thai (Serif)
+ Other faces: Making changes from J. Poon's report
+
+2008-05-20 Steve White
+ * CREDITS:
+
+ Mark Williamson
+ Jacob Poon
+
+ * Makefile:
+
+ added tests target
+
+2008-05-18 Steve White
+ * ranges.py:
+
+ Put table explanation back in
+
+ Improved behaviour for high Unicode
+
+ * FreeSans.sfd:
+
+ Revision of kerning
+
+ * FreeSerif.sfd:
+
+ Made Latin kerning a little more reasonable:
+ reduced many excessive kerns (some had letters apparently
+ overlapping, which shouldn't happen)
+ made kerns increment by 5EM for ease of reading
+ got rid of kerns too small to be seen
+
+ * FreeMonoBoldOblique.sfd, FreeMonoOblique.sfd, FreeSerifBold.sfd:
+
+ Made to verify
+
+2008-05-13 Steve White
+ * FreeSerif.sfd:
+
+ Made to validate
+
+ * FreeSerif.sfd:
+
+ Gurmukhi: filled range in Serif, taking glyphs from the original
+ Punjabi font by Hardip Singh Pannu
+ http://members.aol.com/hspannu/punjabi.html (file pb_win95.exe)
+
+2008-05-12 Steve White
+ * FreeSans.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd:
+
+ Hebrew, basic. Some faces missing punctuation marks, added.
+
+ * FreeMono.sfd, FreeSans.sfd:
+
+ Armenian: Sans tried to make verticals and horizontals of more uniform
+ width both, finddled with punctuation
+
+ * FreeMonoOblique.sfd:
+
+ made to validate
+
+ * FreeMonoBold.sfd:
+
+ made to validate
+
+ * FreeSans.sfd, FreeSansBold.sfd:
+
+ Armenian in Sans: regularized letter spacing
+
+ * FreeMonoOblique.sfd, FreeSans.sfd, FreeSansBold.sfd:
+
+ Armenian: fill out ranges and clean up
+ SansBold especially had a lot of incorrect references.
+ Now all the ranges with Armenian at least share the same set of
+ characters.
+
+ * FreeMono.sfd:
+
+ Fixed glyph with wrong width.
+
+2008-05-11 Steve White
+ * FreeMonoBold.sfd, FreeMonoBoldOblique.sfd, FreeMonoOblique.sfd, FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd, FreeSerifItalic.sfd:
+
+ 1) made to validate
+ 2) Mono: copied in Spacing Modifier Letters (glyphs not yet named)
+ 3) SerifItalic: Filled in General Punctuation
+
+ * FreeMonoBold.sfd, FreeMonoBoldOblique.sfd, FreeMonoOblique.sfd:
+
+ Made to validate, and pass all other FontForge tests.
+ Expedient: rounded everything to int
+
+ * FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd:
+
+ Made to have the same Greek Symbols,
+ Made to validate
+
+ * FreeSans.sfd, FreeSansBold.sfd:
+
+ Made Greek Symbols as full as rest of Sans. Changed a name in Sans.
+
+ * FreeMonoOblique.sfd:
+
+ Made Greek as full as other faces
+ Made to validate
+
+ * FreeSansBold.sfd:
+
+ Deleted seven orphaned Arabic characters; looks like somebody started,
+ didn't get very far, putting Arabic in bold.
+
+ Deleted orphaned Arabic glyph from Arabic Presentation forms-B
+
+ * FreeSerifBold.sfd:
+
+ Deleted the single Arabic character: it was clearly there by mistake.
+
+ * FreeSansOblique.sfd:
+
+ Made Greek Symbols as full as rest of Sans
+
+ Tweeks to Armenian
+
+ Comment from previous commit of FreeSans was meant for FreeSansOblique.
+ In FreeSans, only tweeked a few letters during putting more characters
+ in this face.
+
+ Filled in Spacing Modifier Letters, increased General Punctuation.
+
+ * FreeSans.sfd:
+
+ Filled in Spacing Modifier Letters, increased General Punctuation
+
+ * FreeMono.sfd:
+
+ Made Armenian as full as other roman faces.
+
+ Completed Spacing Modifier Letters
+ Added a couple of Greek Punctuation
+
+ added more Spacing Modifier Letters
+
+2008-05-10 Steve White
+ * FreeSerif.sfd, FreeSerifItalic.sfd:
+
+ Did same process of scaling and sizing for Thai in Sans as in Serif.
+ Added mark tables to Sans. Improvement, but there are questions...
+
+ * FreeSans.sfd:
+
+ Tidied some Gurmukhi glyphs, validated.
+
+ Deleted ranges for Oriya, Kannada, on account of
+ 1) they only contained a subset of the consonant glyphs of the scripts,
+ few if any vowels, and had no ligature lookups as required
+ 2) Kannada was based on the Akurti fonts, which have copyright issues.
+
+ See
+ bug #23225: Oriya range only partial
+ bug #23224: Kannada range only partial
+
+ * FreeMonoBoldOblique.sfd:
+
+ Made metrics like rest of Mono
+
+2008-05-09 Steve White
+ * ranges.py:
+
+ More info on range intervals
+
+ * FreeSerif.sfd:
+
+ Deleted Telugu range.
+ It didn't represent a complete writing system for the language.
+
+ See notes at https://savannah.gnu.org/bugs/index.php?23202
+ Serif: Telugu range missing many characters; many wrong
+
+ Got a copy of the original Tikkana font,
+ Copied in remaining consonants and vowels that I could find there.
+ I think one vowel 0C55 is missing according to unicode).
+ Strangely, the Telugu digits are alo missing.
+ In Tikkana, the default "checkmark" structural mark is missing from many
+ consonants, according to Unicode, but is a separate glyph. I put
+ the checkmark on.
+ This, and scaled up by 150% and cleaned up intersecting glyphs and
+ many unnecessary points.
+
+2008-05-08 Steve White
+ * FreeSerif.sfd:
+
+ Filled out Telugu consonants.
+ Vowels still need to be done
+
+2008-05-07 Steve White
+ * FreeSerif.sfd:
+
+ Operated on Latin glyphs with stacked accents to make them fit under
+ 900EM.
+ Scaled Telugu bu 150%.
+
+2008-05-06 Steve White
+ * FreeMono.sfd, FreeMonoBold.sfd, FreeSansBold.sfd, FreeSerif.sfd:
+
+ Corrected further fontforge "find problems"
+ Added some math characters to FreeSerif
+
+2008-05-05 Steve White
+ * FreeSansBold.sfd:
+
+ Made to validate, and fixed bad TT transformations
+
+2008-05-04 Steve White
+ * FreeMono.sfd, FreeSerif.sfd:
+
+ Mainly TeX additions trying to satisfy Markus Kuhn's TeX-as-Unicode page
+
+ * FreeMono.sfd:
+
+ Adjusted heights of extensible brackets
+
+ Fixed problems with extensible brackets, thanks to Markus Kuhn's page
+ http://www.cl.cam.ac.uk/~mgk25/ucs/examples/UTF-8-demo.txt
+
+ * ranges.py:
+
+ fiddled with ranges, doc
+
+ made some ranges more correct?
+
+ fixed some bugs in ranges
+ better error reporting
+
+ Got rid of Unicode 1.1 references
+
+ made to use OpenType table
+
+ * FreeMono.sfd, FreeSans.sfd, FreeSerif.sfd:
+
+ made to validate
+
+2008-05-03 Steve White
+ * FreeMono.sfd, FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd, FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd:
+
+ Removed digits from Private Use Area.
+ See bug 23050.
+
+ * FreeMono.sfd, FreeSans.sfd:
+
+ Completed General Punctuation
+
+ * FreeSans.sfd:
+
+ Completed IPA Extensions
+
+ * FreeMono.sfd, FreeSans.sfd, FreeSerif.sfd:
+
+ More work on Superscripts and Subscripts, Spacing Modifiers.
+ Sans is now complete in both.
+ Added Pfennig to Sans and Mono.
+
+ * ranges.py:
+
+ Restructure text output
+ Rearrangement and cosmetic ...except I had broken it. now fixed
+ Seems to be in a useful form at this point.
+ More docs, date
+
+ * FreeSerif.sfd:
+
+ Added a hand-drawn old German Pfennig to Currency Symbols
+
+ * FreeMono.sfd, FreeSans.sfd, FreeSerif.sfd, FreeSerifItalic.sfd:
+
+ Further additions to General Punctuation, Super and Sub Scripts,
+ Spacing Modifiers, etc.
+
+2008-05-02 Steve White
+ * FreeSans.sfd:
+
+ additions to Spacing Modifiers, IPA
+
+ * FreeSerifItalic.sfd:
+
+ Shortening stacked accents to maintain readability when clipped
+
+2008-05-01 Steve White
+ * FreeSans.sfd:
+
+ Additions to Spacing Modifiers and changes to Combining Diacritics
+
+ * FreeSerif.sfd:
+
+ Made sure all the half rings in Combining Diacriticals and Spacing
+ Modifiers were really half rings (J. Poon had complained about this)
+
+ Filled out General Punctuation
+ Some work on Spacing Modifiers
+
+ Filled out Mathematical Operators
+ still needs lots of work
+ Made to validate
+
+ Filled out Latin Extended B
+ Added some letters with curls to Latin Extended B
+ More fiddling with Latin Extended B accents
+
+2008-04-30 Steve White
+ * FreeSerif.sfd:
+
+ Added Hanunóo script, with characters based on those in
+ font MPH2BDamase, on request from the maintainer of that font,
+ http://packages.debian.org/sid/ttf-mph-2b-damase
+
+ Glyphs are simple vector strokes. Could be a little more uniform.
+
+ Added Buginese script "Lontara", with characters based on those in
+ font MPH2BDamase, on request from the maintainer of that font,
+ http://packages.debian.org/sid/ttf-mph-2b-damase
+
+ Note the glyphs are pretty rough, clearly a digitization of handwriting.
+ I just cleaned them up, and corrected discrepancies with Unicode,
+ and compared with some pictorial samples of the script I could find.
+
+2008-04-29 Steve White
+ * ranges.py:
+
+ Improved look a lot--still unhappy with some ranges
+ OS/2 seems sometimes bang-on, sometimes unrelated to anything (including
+ fontforge's OS/2 listing)
+
+ * FreeSerif.sfd:
+
+ Much fiddling with Tamil range.
+ First scaled to 78% (avoiding the references)
+ This gets it in the ballpark height-wise. [A bit taller than the Latin
+ letters, but the stroke is narrower, but then the glyphs are busier.]
+ Then had to re-align combined references, the trickiest being the
+ halants.
+ Checked with other fonts with Tamil text.
+
+2008-04-28 Steve White
+ * FreeSans.sfd, FreeSerif.sfd:
+
+ Cleanup of control points in Arabic and Thaana
+
+ * FreeSerif.sfd:
+
+ Cleanup of missing extrema in Arabic and Thaana
+
+ Many changes to Thai, trying to make the script fit between some lines,
+ so accents won't get clipped, etc.
+ Also, stroke weight was heavier than that of Latin.
+
+ Scaled whole thing by 93%.
+ Shrank the tallest letters 0E42-4 to get them under 900EM.
+ Shaved off top of maiek.
+ Fiddled with positioning of all accents.
+ Made positioning tables for accents.
+ Note: unclear these are working correctly
+
+ Fixed a bug having to do with character replacements for characters
+ named 'ng' and 'nj'; these names had been taken on by other characters.
+
+ Made to validate
+
+ Unicode positions of two Cyrillic Extended characters were switched.
+ Fiddled with a couple of Cyrillic combining diacritics
+
+2008-04-27 Steve White
+ * FreeSans.sfd:
+
+ bugfix: a left harpoon mysteriously appeared to the left of letter p!
+
+2008-04-26 Steve White
+ * FreeMono.sfd:
+
+ Made to validate
+
+ * FreeSans.sfd:
+
+ Made to validate
+
+ Toward J. Poons report
+ Made 032B more like proper double-arches (and distinct fro 033C seagull)
+ Made 032b more like a seagull
+
+ * FreeSans.sfd, FreeSansBold.sfd:
+
+ Sans: fiddling with widths and terminators of math symbols,
+ toward J. Poon's report
+ R & B: removed u+2741 because it didn't match the Unicode description
+
+ * FreeMono.sfd:
+
+ Extensible parenthesis symbols weight/terminators
+ Toward bug # 23064: https://savannah.gnu.org/bugs/index.php?23064
+ Rounded a bunch of terminators
+
+2008-04-22 Steve White
+ * FreeSerif.sfd:
+
+ Small alignment problem in Greek Extended
+
+ One more tweek to spacing in Cyrillic Extended
+
+ Corrected spacing in Cyrillic Supplement
+
+ Added Cyrillic Supplement letters for
+ Enets, Khanty, Chukchi, Itelmen, Mordvin, Kurdish, Aleut
+
+ Added Cyrillic letters for Nivkh (completing Cyrillic range)
+ More tightening of accents in Latin Extended.
+
+ * FreeSans.sfd:
+
+ Fiddled with math--consequences of changing the "similar" operator
+
+ More tightening of accents
+
+ * FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd, FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd:
+
+ Adjustments to h and k with caron and cedilla in Latin A and B
+
+ * FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSerif.sfd, FreeSerifBold.sfd:
+
+ FreeSerifBold: deleted 3 dotted Hebrew letters in Private/Corporate use
+ (E801-3). They weren't ligatures or in any other lookup, and they
+ weren't present in FreeSerif.
+
+ * FreeSansBold:
+ Unlinked and deleted F6C3, which called itself commaaccent.
+ Made some new spacing and non-spacing accents to make up for it.
+
+ * FreeSansBoldOblique:
+ Made references of many Latin Extended.
+ Also corrected several wrong ones.
+
+ * Freeserif:
+ Re-named commaaccent
+
+2008-04-21 Steve White
+ * FreeMono.sfd, FreeSans.sfd, FreeSansBold.sfd, FreeSerif.sfd, FreeSerifBold.sfd:
+
+ Deleted Hiragana and Katakana ranges, as discussed on bugs list.
+ Cleaned up some encoding issues, unnamed glyphs
+
+ * FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd:
+
+ Roman: added 'sine' -- not beautiful, but I liked drawing it
+ All: Made special lookup for Dutch ligatures 'IJ' and 'ij'
+
+ * FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd:
+
+ Roman: ffi etc Latin ligatures from 'liga' to 'dlig' (these weren't
+ really ligatures anyway, and only looked very bad when used.
+ Retain for condensed type.
+ Others: deleted Latin 'liga' table altogether
+ BoldOblique : added j to ij ligature
+
+ Toward J. Poon's Report:
+ Except for issues of terminators not always vertical or horizontal,
+ and a few things that were too hard or I was unsure of.
+
+2008-04-20 Steve White
+ * FreeSerif.sfd:
+
+ Futzing with accents in Latin Extended Additional and Latin Extended-B
+
+ * FreeMono.sfd, FreeMonoBold.sfd, FreeMonoBoldOblique.sfd, FreeMonoOblique.sfd:
+
+ Added primemod character, referenced by Greek number sign
+
+ * FreeMono.sfd, FreeMonoOblique.sfd:
+
+ Following J. Poon's report, disconnected NJ (01CA)
+
+2008-04-19 Steve White
+ * FreeMono.sfd, FreeMonoBold.sfd, FreeMonoBoldOblique.sfd, FreeMonoOblique.sfd:
+
+ First pass throught J. Poon's bug list.
+ See bug reports for details.
+
+ * FreeMono.sfd, FreeMonoBold.sfd, FreeMonoBoldOblique.sfd, FreeMonoOblique.sfd:
+
+ Made underscore slanted in Oblique faces, made all to be width of
+ space character.
+ Towards J. Poon's report.
+ Disturbed that xterm and some other apps put small space between
+ characters when none was called for.
+
+ * FreeMono.sfd, FreeMonoBold.sfd, FreeSans.sfd, FreeSansOblique.sfd:
+
+ Corrections on Currency Symbols
+
+ * FreeMono.sfd, FreeSans.sfd, FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd:
+
+ More corrections, additions to Currency Symbols
+
+ * FreeSans.sfd, FreeSerif.sfd:
+
+ Filled out and corrected Currency Symbols
+
+2008-04-18 Steve White
+ * FreeSans.sfd, FreeSerif.sfd:
+
+ Adjustments to Combining Marks for Symbols
+ Additions to range in Sans, and re-structured its marks table so that
+ "middle" can apply to any range
+
+ * FreeSerif.sfd, FreeSerifItalic.sfd:
+
+ Made reference between combining koronis and lenis of Greek Extended.
+ In Serif, re-worked combining marks lookup tables, added anchors in
+ Latin, moved so without marks they work in kedit (but now I'm doubting
+ kedit does a reasonable thing...what is a better application for
+ testing this?)
+
+2008-04-16 Steve White
+ * FreeSerifItalic.sfd:
+
+ Adjusting of spacing and accents in Greek
+
+ * FreeMono.sfd, FreeMonoOblique.sfd, FreeSans.sfd, FreeSansOblique.sfd, FreeSerif.sfd:
+
+ Much futzing with Greek letter spacing and accents.
+ Added lenis to FreeMono.
+
+ * FreeMono.sfd, FreeSerif.sfd:
+
+ Adjusted spacing of dots of Greek dieresistonons in Serif
+ Whipped up something for Greek kappascript in Mono (could use revision)
+
+ * FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd:
+
+ Raised dots on double-dotted Cyrillic i, to match that of i and j.
+
+2008-04-14 Steve White
+ * FreeMono.sfd:
+
+ Corrected 27e6-7 "white bracket"
+ Note it is probably a FontForge bug these symbols aren't showing up.
+ FontForge thinks they are in Supplemental Arrows, but they should be
+ in Supplemental Math-A
+
+ Named some Greek characters
+
+ * FreeSans.sfd, FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd:
+
+ Spacing of some Cyrillic characters
+
+2008-04-13 Steve White
+ * FreeSerif.sfd:
+
+ Some fiddling with accents
+ 'yogh' was too wide
+
+ * FreeSansBold.sfd, FreeSansOblique.sfd:
+
+ Character spacing was chaos--tried to improve. BoldOblique also needs
+ it.
+
+ * FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd:
+
+ Completed the fix of bug #12798, Greek glyphs with accents to side
+ Much mucking with accents here, and fixed a few things that were just
+ wrong.
+
+2008-04-12 Steve White
+ * FreeMonoBold.sfd, FreeMonoBoldOblique.sfd, FreeMonoOblique.sfd:
+
+ Made Mono curly quotes "bent"
+
+ * FreeMono.sfd:
+
+ More fiddling with Greek accents
+ Made quotes "bent"
+
+ * FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd:
+
+ Adjustments on Greek diaresistonos etc.
+ Adjustments in Serif on combining marks for symbols
+
+ * FreeSerif.sfd:
+
+ More additions to Combining marks for Symbols
+
+ Additions to Combining marks for Symbols -- now mostly full.
+ Lots of adjustments to middle anchor point in Latin to make big circle
+ (nearly) encircle preceding latter
+
+2008-04-11 Steve White
+ * FreeMono.sfd:
+
+ Bugfix:
+ Had indroduce a glyph of width other than 600, making kterminal not
+ recognize it as a monospace font.
+
+2008-04-10 Steve White
+ * FreeSans.sfd, FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd:
+
+ More messing with accents.
+ Further to bug #12798, Greek glyphs with accents to side
+ Much messing with glyphs in Greek Extended range
+
+2008-04-09 Steve White
+ * FreeMono.sfd, FreeMonoBold.sfd, FreeMonoBoldOblique.sfd, FreeMonoOblique.sfd, FreeSerif.sfd:
+
+ Revisited Latin-1 and Latin-A accents.
+ Glyph B7 was called "periodcentered", but Unicode callse it Mid Dot,
+ and the description doesn't refer to the period. I made it like the
+ dot accent. throughout, and referred L-dot to it.
+
+ Also double-checked "commaaccent" characters (some in Unicode called
+ cedilla, but the Unicode example shows a comma...mystery)
+
+ Also the funny IPA upside-down f often had two bars, incorrectly.
+
+ To do: go through rest of Serif, and Sans
+
+ * FreeMono.sfd, FreeMonoBold.sfd, FreeMonoBoldOblique.sfd, FreeMonoOblique.sfd:
+
+ Completed re-structuring of stacked Latin accents in Mono.
+ Also: lots of associated adjustments of Greek Extended accents.
+ (Trying to at least center extremely wide characters on their box)
+ Repaired some victems of "find overlaps" sweeps
+ Worked on glyphs with apostrope/comma parts
+ Corrected a few wrong glyphs.
+
+ Trying out a "bent quotes" solution to making primes distinct from
+ quotes.
+
+2008-04-08 Steve White
+ * FreeMonoOblique.sfd:
+
+ Toward reducing overall height
+ Did similar process as for Mono, fixing a few errors along the way.
+ Also the Greek Extended range was very messed up vertical and
+ horizontally.
+ Horizonal spacing of the heavily accented Greek is a real problem in
+ Mono...
+ To do:
+ revisit "commaaccent" characters in all faces: do some have
+ edillas?
+ some Hebrew glyphs are a little low
+ Georgian generally is way out of bounds
+
+2008-04-07 Steve White
+ * INSTALL:
+
+ Various updates and corrections, tweeked formatting
+
+ * FreeMonoBold.sfd:
+
+ Tweeking of accents
+
+2008-04-06 Steve White
+ * FreeMono.sfd, FreeMonoBold.sfd:
+
+ Re-worked accents in FreeMonoBold.sfd to make Latin ranges lie between
+ 800 and -200 EM, as with FreeMono.
+
+ * FreeMono.sfd:
+
+ Latin Extended ranges: Implemented new policy of shortening the letters
+ of the characters with the highest-stacked accents.
+
+ At this point all the Latin glyphs lie betweeen 800 and -200 EM.
+
+ Also checked for readability of all the Latin extended letters in xterm.
+ (Issue: it chops letters outside their bounding boxes; many accents had
+ been a bit outside. Made sure that if they were chopped, they were at
+ least still recognizable.)
+
+2008-04-05 Steve White
+ * FreeMono.sfd:
+
+ Following exchange about Mono on freefont-bugs with Joe Wells, who
+ > doesn't like the curly quote marks
+ > wants combining diacritics to work
+ > wants tight line spacing
+
+ Trying to reduce font height:
+ > exclamdown was below -200
+ > Throughout Extended Greek, ypogegrammeni were too low. Shortened
+ glyph, and raised all references.
+ > Lots of messing with Latin Extended ranges to make glyphs mostly
+ fit into 800 height. Mostly succeeded. A couple will get chopped.
+ > Messed with "commaaccent" glyphs, which were very low
+ > Cyrillic 04B1 had a tail that was incorrectly low
+ > Much mucking with Georgian range. Moved up by 95 (read that Georgian
+ is written as though centered between two horizontal lines, rather than
+ as sitting on a baseline) There are still a few very high glyphs.
+
+ FontForge U+0122 called Gcommaaccent, glyph looks like that, but
+ Unicode says it's Gcedilla. Made the ones called cedilla by Unicode
+ to be cedillas
+
+ Note bug in Unicode: standard for 0122, 0123, 0136, 0137, 013B, 013C,
+ 0145, 0146, 0156, 0157 all talk about cedilla, say to make it with
+ cedilla, but example shows comma.
+
+ By the way:
+ > Got rid of commaaccent and dotlessj in Corporate Use
+ > Replaced shadedark, with little squares now not overlapping.
+ > Corrected IPA symbol 'ts' 02A6, added 02a8, 02a9, 02aa, 02ab, 02ac,
+ 02ad, 02ae, 02af
+
+ (so many changes...the CVS server was down...)
+
+ * FreeSerif.sfd:
+
+ Re-named arabic and hebrew characters
+ Big adjustment to comma-accents. Mostly effects Greek Extended.
+ Made such accents to be like comma, rather than like Russian apostrophe
+ (and de-referenced that symbol)
+
+2008-04-04 Steve White
+ * FreeMono.sfd, FreeSerif.sfd:
+
+ Raised dot on superscript i (2071) -- more distinct at small sizes
+
+ * FreeMono.sfd:
+
+ added two IPA symbols
+
+2008-04-02 Steve White
+ * FreeSerif.sfd:
+
+ fixed a few more control points too close
+
+ Fixed names of languages in ligature table for latn "w/i".
+ This fixes a crash when FontForge opened the ttf table
+
+ Motivated by bug crashing FontForge when opening ttf file,
+ started cleanup of useless control points. Not finished.
+ Got partway through Sinhala
+
+2008-03-31 Steve White
+ * FreeMono.sfd, FreeMonoBold.sfd, FreeMonoOblique.sfd, FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd, FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd:
+
+ Fixed various "Find Problems", including glyphs with mixed-up names,
+ and bad TT matrices. (lots more bad TT matrices remain)
+
+ * FreeSerif.sfd:
+
+ Re-named a bunch of Cyrillic letters
+
+ * FreeSerif.sfd:
+
+ Put above mark on Cyrillic i and double-dot i for Slavonic number forms
+
+2008-03-30 Steve White
+ * FreeSans.sfd:
+
+ Tightened spacing on glyphs of last commit
+
+ * FreeSans.sfd, FreeSerif.sfd:
+
+ Concerning bug #16120, Include upper case Wynn and upper case Yogh
+ Adapted Herman Miller's Thyromanes letters 01F7 021C 021D for Serif
+ Drew my own versions for Sans.
+
+ * FreeSerif.sfd:
+
+ Added 04F6,7
+
+ * FreeSerif.sfd, FreeSerifItalic.sfd:
+
+ Made more Cyrillic diacritics really combine.
+ Made a mark lookup just for Cyrillic diacritics,
+ Marked most of the unadorned Cyrillic alphabet.
+
+ Still not clear on correct shapes for some of the marks.
+
+ * FreeMono.sfd, FreeMonoOblique.sfd:
+
+ Tweeks to accents
+
+2008-03-29 Steve White
+ * FreeSans.sfd, FreeSerifItalic.sfd:
+
+ Small adjustments in Cyrillic
+
+ * FreeSerif.sfd:
+
+ Corrected small palochka
+ Made Cyrillic combining hundred-thousands and millions really combine
+ Named some combining diacriticals
+
+ * FreeMonoBoldOblique.sfd, FreeMonoOblique.sfd:
+
+ Mostly adjusted horizontal spacing of mono oblique faces
+
+ * FreeMono.sfd, FreeMonoBold.sfd, FreeMonoBoldOblique.sfd, FreeMonoOblique.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd, FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd:
+
+ More cleanup of Cyrillic ranges
+
+ Completely re-did horizontal spacing of SerifItalic and SerifBoldItalic.
+ See bug #17912, poor kerning in Cyrillic oblique...
+ https://savannah.gnu.org/bugs/index.php?17912
+ It looked like chaos to me.
+ Only so much can be done: the font is flawed.
+ But I think the changes make text readable in these faces.
+
+ There were dozens of incorrect glyphs in higher-numbered characters.
+ I deleted all those I found. No glyph is better than a wrong glyph.
+
+ Futzt with accents, shooting for consistency and readability.
+
+ A maintenance thing: making correct references (acyrillic vs a,
+ although they may be the same glyph) I made a lot of headway, but
+ it isn't finished.
+
+ Likewise, a large fraction of these are compound characters, which can
+ be made with references, resulting in easier maintenance, reduced
+ likelihood of errors, and smaller files. I replaced many.
+
+ * FreeSerif.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd:
+
+ Cyrillic italic
+ Added italic, bolditalic
+ 0493, 04a7, 04AD
+ because their form clearly varies in italic. But was just guessing...
+
+ * FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd:
+
+ Cyrillic italic
+
+ Added italic, bolditalic
+ 0493, 04AD
+ because their form clearly varies in italic.
+ But was just guessing as to exact form.
+
+ * FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd:
+
+ Overhaul of Cyrillic
+
+ Italic, BoldItalic
+ added small yat for bug #22588 (note Times New Roman doesn't use
+ alternate form in Italic)
+
+ All forms of Serif have big problems in Cyrillic.
+
+ The ugliest is in roman. The letters, even of the Russian alphabet, are
+ of inconsistent height (awfully, small 0438 (ii) 0446 (tse))
+ and they vary from the height of Latin
+ and they vary from the height of italic and bold.
+ They are a mish-mash of letters from several fonts, of similar (but not
+ quite identical) weight, and similar, (but not quite identical) size.
+
+ I think the best solution would be to identify the face that best
+ matches Latin, and fill the range with that. I think this is possible
+ because the rarer letters seem to be better: the common letters are the
+ ones that are wrong.
+
+ For now, I just increased the sized of 0438 and 0446, and 048a, 048b,
+ also 0459 (lje) 045A (nje) 0464 (dje)
+
+ Other issues
+
+2008-03-27 Steve White
+ * FreeSerifBoldItalic.sfd:
+
+ Moving all Greek capitals with accent so they don't cover previous
+ letter. Remedies bug #12798
+
+ * FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd:
+
+ Various tweeks to accented Latin letters.
+ Connected O-ogonek correctly
+
+ * FreeSerifItalic.sfd:
+
+ Accents of numerous accented Latin letters got shifted in a previous
+ commit. This fixes it.
+
+ * FreeSerif.sfd:
+
+ Adjusted combining tack left and right (0318-0319) to be above -300 EM.
+
+ * FreeSans.sfd, FreeSerif.sfd:
+
+ Added some "middle" marks for positioning of diacritics
+
+ * FreeSans.sfd:
+
+ Copied 4 enclosing combining diacriticals from Serif 20DD - 20E0
+
+ * FreeSerif.sfd:
+
+ Adjusted and added some enclosing diacritics 20DD - 20E0
+ In response to Debian bug #472566
+ ttf-freefont: U+20DD COMBINING ENCOLSING CIRCLE doesn't combine
+ http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=472566
+
+2008-03-26 Steve White
+ * FreeSerif.sfd:
+
+ Lowered a few over-high Latin accents
+
+ * FreeSansBold:
+
+ Devangari--only digits 1 and 2, and nothing else. Deleted
+
+ * FreeMonoBold, FreeMonoOblique,
+ FreeSerifBold, FreeSeriftalic, FreeSerifBoldItalic,
+ FreeSansOblique, FreeSansBold, FreeSansBoldOblique:
+
+ Got rid of dotlessj, comma in Corporate Use
+ Single Substitution lookup, ccmp table
+ Made proper dotlessj, re-linked j-circumflex
+
+ Note:
+ FreeSansBold has a commaaccent in Corporate Use, used by several other
+ characers. Haven't done anything about this.
+
+2008-03-25 Steve White
+ * FreeSerif.sfd:
+
+ Added/corrected glyphs for yeh hamza in Arabic,
+ Added init and medi lookups for yeh hamza.
+
+2008-03-24 Steve White
+ * FreeSerif.sfd:
+
+ Added isolated and final forms for
+ 0629 teh marbuta
+ 0624 waw hamza
+ 0626 yeh hamza
+ 0649 alef maksura
+ A previous commit had added lookups that referred to these,
+
+ More fiddling with super/subscripts
+
+ * Makefile, Makefile, GenerateTrueType:
+
+ Scripts and Make targets to generate OpenType fonts and zip file
+
+ * maintenance.txt:
+
+ Added gnupload and info about tagging
+
+2008-03-23 Steve White
+ * FreeSerif.sfd:
+
+ Last of Find Problems -> ATT
+ 'mark' Latin lookup: afii10026 is in 'cyrl', also afii10074
+ Upper and lower Cyrillic i. Just removed mark from both letters.
+
+ 'half' Bengali lookup Khanda_Ta is in 'bng2'. Added bng2 to lookup
+ Added TtTable etc
+
+ Clean-up of Points too Close through to end of font.
+ This episode completes the paths/points clean-up of Serif.
+ But note: many ranges, esp. Ethiopic, Japanese, and Indic, have way
+ too many points, resulting in lumpiness.
+
+ At this point, FontForge can convert splines to quadratic, auto-hint,
+ and auto-instrument without segfault.
+
+ * Makefile, sfd/Makefile, tools/GenerateTrueType:
+
+ Alterations to build process: added a Makefile, and made to work
+ on my system. Now auto-hints before generating TrueType.
+
+2008-03-22 Steve White
+ * sfd/FreeSans.sfd:
+ Lots of additions of math characters. Should complete for
+ LaTeX 2e, except for extensible brackets.
+
+2008-03-21 Steve White
+ * *.sfd:
+
+ Regularized stacking of accents in Latin Extended Additional
+ Changed name of 00B5 from 'mu' to 'micro',
+ 2206 from 'Delta' to 'Delta.math',
+ 0308 from 'diaerisis' to 'diaerisiscomb'
+
+ * FreeMono.sfd:
+
+ additions to IPA
+
+ * FreeMonoBoldOblique.sfd:
+
+ Moved dotlessj from Corporate Use,
+ Deleted commaaccent there
+ Fixed mis-named glyphs tcommaaccent, Tcommaaccent
+ Changed name of 030A from 'dieresis' to 'ringcomb'
+
+ * FreeSans.sfd:
+
+ Added some arrows, and a couple of blackboard bold characters
+
+ Several characters in U+F600 Corporate Use range
+ dotlessj, onefitted, commaaccent
+
+ dotlessj referred to by: jcircumflex, uni01F0:
+ renamed it to uFFFF, re-linked others by hand
+
+ commaaccent
+ http://diacritics.typo.cz/index.php?id=9
+ should be u+0326 but wasn't linked to anything
+
+ * FreeSansBold.sfd:
+
+ U+0617 etc: read glyphs "4GWglm". It should be Arabic. Deleted
+
+ * FreeSansBold.sfd, FreeSansOblique.sfd, FreeSansBoldOblique.sfd:
+
+ Removed bogus glyphs for 200C 200D, ZWJ and ZWNJ
+
+ * FreeSerif.sfd:
+
+ Split lookup for ligatures in latin into two classes;
+ ff, ffl, fl which are appropriate for all languages,
+ and fi, ffi, which are not appropriate in Turkish (due to distinction
+ between short and long i)
+ Needs to be done for other faces.
+
+ Filled set of extensible brackets in Miscellaneous Technical
+
+ Think IPA is now complete.
+
+2008-03-18 Steve White
+ * FreeSans.sfd:
+
+ clean-up of all path issues and points too close
+
+2008-03-18 Steve White
+ * FreeSans.sfd:
+
+ Something was causing crashing effects in Windows. Cleanup of
+ problems eventually made it go away. Now works well.
+
+ Cleaned up many "points too close"
+
+ Cleaned up all ATT problems, of which there were many and various.
+
+ # Incorrectly labelled zero-width joiner used in a ligature
+
+ # Incorrect substitution of dotlessi and dotlessj with i and j was
+ somehow connected with FontForge crash. Attemts to remove the
+ substitution would damage a 'ccmp' table; subsequent changes would
+ result in FontForge crashing on save, and truncating the sfd file.
+ Surgically removed with vi.
+
+ # A couple of Indic lookups had incorrect script DFLT; one had 'latn'.
+
+ # Don't understand why there are scripts named
+ dev2 bng2 grj2 gur2 when there are already deva beng gurj guru
+ But anyway, lots of 'vatu' 'pres' 'haln' and 'liga' lookups contained
+ characters in the '2' scripts but were lablled only for the 'non-2'
+ ones. Added the '2' scripts to all these lookups. Suspect a mistake.
+
+ Note: several of these problems are repeated in other Sans faces.
+
+2008-03-16 Steve White
+ * FreeMono.sfd:
+
+ Cleanup of many path problems "points too close"
+
+ Strove to make accents Latin Extended range legible at small sizes
+
+ Named some unnamed characters; removed a duplicate
+
+ At this point, all fonts are passing FontForge Validate.
+
+2008-03-15 Steve White
+ * FreeSerif.sfd:
+
+ CJK punctuation: made some of the very high glyphs smaller (under 900EM)
+ The brackets in Sans were very ugly, and not even Sans-serif.
+ Serif: added extensible square brackets, diddled with integral
+ corrected direction of some added glyphs
+
+ Several bugs having to do with missing glyphs in Tamil range.
+ Also a buggy ligature in Devangari.
+
+ Shortened names of many lookup tables
+
+ Futzt with some combining diacriticals
+
+ Added extensible square brackets.
+
+ * FreeSans.sfd:
+
+ Changed names of a bunch of glyphs with invalid
+ TrueType names, in range 0x1025f+ (not real Unicode).
+ Took pains to retain information contained in the names.
+ Wonder if these glyphs have ever been of any use.
+
+ CJK Punctuation: brackets were hand-drawn and very ugly. Improved.
+
+ * *.sfd:
+
+ Set OS/2 Metrics back to absolute 900/300. Offsets are not
+ interpreted uniformly.
+
+ Cleanup of many path problems up to extrema and self-intersecting
+
+ Ordered PS Blue values.
+
+2008-03-14 Steve White
+ * FreeSerif.sfd:
+
+ Got rid of mixed references and contours
+ Cleanup of many path problems "points too close"
+
+ Started clean-up to satisfy FontForge Validate
+
+ Changed names of three glyphs in the
+ Tamil ligatures range...all clearly bugs.
+
+ * FreeSans.sfd:
+
+ Added slanted-hyphen
+
+ * *.sfd:
+
+ Unified OS/2 Metrics
+ Added Grid Fit
+
+2008-03-13 Steve White
+ * FreeSans.sfd:
+
+ Rearranged PS BluesValues so they were in increasing order,
+ Made all 20 in width.
+
+2008-03-12 Steve White
+ * FreeSans.sfd, FreeMono.sfd:
+
+ Added TrueType hinting tables.
+ Fixed glyphs that didn't convert well to quadratics
+ Got rid of mixed contours and refs
+
+ * FreeSerifBold.sfd:
+
+ Cleanup of path problems
+
+2008-03-11 Steve White
+ * FreeMonoOblique.sfd:
+
+ Cleanup of path problems
+
+2008-03-09 Steve White
+ * FreeSerif.sfd:
+
+ Corrected L-dot
+ Further cleanup of path/ref problems
+
+ Found several ligatures that referred to a missing glyph "ZWJ".
+ Took this to mean the "zero width joiner" u+200D
+
+ * *.sfd:
+
+ Changed OS/2 metrics to be absolute 900/300
+
+ * FreeSerifItalic.sfd:
+
+ Added Greek lunate epsilon
+
+ * FreeMono.sfd:
+
+ Many additions in math range
+ Reduced size of binary union, intersection, vee, wedge
+ Corrected empty set
+ Corrected logical 'assert' relations, etc. 22a2-22af
+ Efforts to make Math glyphs legible at small point sizes
+
+ * FreeSans.sfd:
+
+ Added Greek lunate epsilon and rho symbol
+ Unstacked more stacked diacriticals
+
+ Further cleanup of path/reference problems
+
+2008-03-08 Steve White
+ * FreeSans.sfd, FreeSerif.sfd:
+
+ Added some "n-ary" Math operators
+
+ * FreeSerif.sfd:
+
+ Further clean-up of path problems...up to Ethiopic
+ > Started adding and correcting Math operators for LaTeX 2e
+ > Corrected n-ary union, intersection, and spikes to be larger
+ than the binary operators
+ > Made (many of) the operators based on + - = to use those
+ symbols directly (by reference or copying).
+ > Added lunate epsilon
+ > Corrected empty set
+ > Tightened up spacing of some other technical characters
+ > Worked on some more math operators involving =
+ > triangle
+ > Several arrows
+ > Supplemental Arrows-A
+
+ * FreeSans.sfd:
+
+ Clean-up of font paths
+ Open self-intersecting outermost-clockwise missing-extrema
+ also flipped references (unlinked)
+
+ Added Greek lunate epsilon and rho symbol
+
+2008-03-06 Steve White
+ * sfd/FreeSerif.sfd: Shortened and thickened the combining hook mark,
+ U+0309, to make more like Unicode samples.
+ Also see (bug #22499) un-stacked incorrectly stacked accents
+
+2008-03-05 Steve White
+ * sfd/FreeSerif.sfd: vertical lines: combining diacritical marks
+ corrected 0300 030D 0329 0348 (were rendered as straight apostrophes)
+ Spacing Modifier letters added 02C8 02CC
+ 02B9 02Ba prime and double-prime
+ Fixed positioning U+1EC8, 9, I with hook above
+
+2008-03-03 Steve White
+ * sfd/FreeSerif.sfd: TT strings updates.
+ updated Copyright to 2008
+ Added Vendor URL as the Savannah freefont site
+ * sfd/FreeMono.sfd: A standard pangram as the Sample Text for Russian
+ It reads: In the thickets of the South once there was a citrus
+ ...--yes, but a fake specimen!
+ * sfd/*.sfd: Set the OS/2 Sup/Sub settings, which by default looked
+ like random trash.
+
+2008-03-02 Steve White
+ * sfd/FreeSerif.sfd: began cleanup of problems given by FontForge
+ "Find Problems" feature. (bug #22454)
+
+2008-03-01 Steve White
+ * sfd/FreeSerif.sfd: made Arabic work for text display (bug #22329)
+ Added required contextual replacement tables,
+ Made a few missing characters,
+ * sfd/*.sfd: Removde all back layers from glyphs that had them.
+
+2008-02-27 Steve White
+ * sfd/FreeSans.sfd: filled in Combining Diacriticals
+ * sfd/FreeSerif.sfd: shifted whole Arabic range down by 200EM.
+
+2008-02-26 Steve White
+ * sfd/FreeSerif.sfd: enabled DPOS table.
+
+2008-02-24 Steve White
+ * sfd/*.sfd: Much fiddling with the "combining diacriticals"
+ range 0300-036F. Made to align with medium-size lowercase
+ preceding character if not using DPOS table.
+
+2008-02-23 Steve White
+ * sfd/FreeSerif.sfd, FreeSans.sfd, FreeMono.sfd: (bug #21784) Filled
+ in set of HTML 4 Character Entities.
+
+ * sfd/FreeSerif.sfd, FreeSans.sfd, FreeMono.sfd: (bug #18413)
+ undertie too low -- went on to tidy other similar characters in
+ Combining Diacriticals range.
+
+2008-02-21 Steve White
+ * sfd/*.sfd: Moved capital Greek letters with tonos so tonos doesn't
+ cover preceding letter (bug #12798)
+
+ * sfd/FreeSerif.sfd, FreeSans.sfd: (bug #13370) made extended
+ integrals to line up.
+
+2008-02-20 Steve White
+ * sfd/*.sfd: started removing glyphs with back layers (printing bug)
+ * sfd/*.sfd: adjusted vulgar fractions (bug #17756)
+ * sfd/*.sfd: adjusted numerical superscripts (bug #20278)
+
+2008-02-18 Steve White
+ * sfd/FreeSerif.sfd: Offset Hiragana and Katakana ranges (bug #22326)
+ * sfd/FreeSerif.sfd: U+30FB, KATAKANA MIDDLE DOT to be full width
+ (bug #18326)
+
+ * sfd/FreeSerif.sfd: Re-promoted
+ ff ffi ffl fi fl
+ as standard ligatures in Latin.
+
+2008-02-17 Steve White
+ * sfd/*.sfd: committed to FontForge Spline Font Database (SFD) 2
+ format.
+
+2008-02-10 Steve White
+ * sfd/*.sfd: brought into line with Debian ttf-freefont
+ Deleted a couple of patches, and applied those applied to Debian.
+
+2006-09-20 Primoz Peterlin <primoz.peterlin@biofiz.mf.uni-lj.si>
+
+ * INSTALL: added installation procedure for MacOS X, courtesy
+ Philipp Kempgen.
+
+2006-05-04 Primoz Peterlin <primoz.peterlin@biofiz.mf.uni-lj.si>
+
+ * sfd/FreeMono.sfd: deleted Russian sample text, which did not
+ conform to UTF-7.
+
+2006-04-15 Primoz Peterlin <primoz.peterlin@biofiz.mf.uni-lj.si>
+
+ * sfd/FreeSerif.sfd: corrected U+10D3.
+
+ * sfd/FreeSans.sfd: ligature U+FB06 (LATIN SMALL LIGATURE S T)
+ changed from mandatory ("liga") to discretionary ("dlig") (bug
+ #16253).
+
+ * sfd/FreeMono.sfd: deleted incomplete glyph U+FB06 (LATIN SMALL
+ LIGATURE S T); deleted U+FB00, U+FB01, U+FB02, U+FB05 as
+ ligatures (bug #16253).
+
+ * sfd/FreeMonoOblique.sfd, sfd/FreeMonoBoldOblique.sfd: added
+ U+FB00; deleted U+FB01, U+FB02 as ligatures (bug #16253).
+
+ * sfd/FreeMonoBold.sfd: deleted U+FB00, U+FB01, U+FB02 as
+ ligatures (bug #16253).
+
+ * sfd/FreeMono.sfd, sfd/FreeMonoOblique.sfd, sfd/FreeMonoBold.sfd,
+ sfd/FreeMonoBoldOblique.sfd, sfd/FreeSans.sfd,
+ sfd/FreeSansOblique.sfd, sfd/FreeSansBold.sfd,
+ sfd/FreeSansBoldOblique.sfd, sfd/FreeSerif.sfd,
+ sfd/FreeSerifItalic.sfd, sfd/FreeSerifBold.sfd,
+ sfd/FreeSerifBoldItalic.sfd: added Georgian letters, donated by
+ Gia Shervashidze
+
+2006-02-22 Primoz Peterlin <primoz.peterlin@biofiz.mf.uni-lj.si>
+
+ * sfd/FreeMono.sfd, sfd/FreeMonoOblique.sfd: ligature U+FB4F
+ changed from mandatory ("liga") to discretionary ("dlig"). This is
+ respons to Bug#349657: [bug #15792] Freefont Alef and Lamed
+ combine
+
+2006-02-21 Primoz Peterlin <primoz.peterlin@biofiz.mf.uni-lj.si>
+
+ * sfd/FreeSerifBold.sfd, sfd/FreeSans.sfd,
+ sfd/FreeSansOblique.sfd, sfd/FreeSansBoldOblique.sfd,
+ sfd/FreeSansBold.sfd: ligature U+FB4F changed from mandatory
+ ("liga") to discretionary ("dlig"). This is respons to Bug#349657:
+ [bug #15792] Freefont Alef and Lamed combine
+
+ * sfd/FreeSerif.sfd: corrected bug#275759: [bug #15790] FreeSerif
+ glyphs for U+2198/U+2199 were reversed.
+
+2006-02-15 Denis Jacquerye <moyogo@gmail.com>
+ * sfd/FreeMono.sfd, sfd/FreeMonoOblique.sfd,
+ sfd/FreeMonoBoldOblique.sfd, sfd/FreeMonoBold.sfd: removed ij
+ and IJ ligatures.
+
+2006-02-10 Primoz Peterlin <primoz.peterlin@biofiz.mf.uni-lj.si>
+
+ * sfd/FreeSerif.sfd: added small Georgian letters (mkhedruli),
+ donated by Gia Shervashidze
+
+ * AUTHORS: Added Gia Shervashidze
+
+ * CREDITS: Added Gia Shervashidze
+
+2006-01-26 Primoz Peterlin <primoz.peterlin@biofiz.mf.uni-lj.si>
+
+ * notes/maintenance.txt: Added information on the Makefile now
+ used; username for FTP login is anonymous.
+
+ * sfd/FreeSansBold.sfd: added U+0569, U+0571, U+0579, U+057B,
+ U+0586. Armenian small letters completed.
+
+ * sfd/FreeSerif.sfd: added U+0297, U+02AD-02AF. IPA Extensions
+ section is now complete. Copied a dozen of glyphs from Omega IPA
+ to Phonetic Extension section.
+
+2006-01-25 Primoz Peterlin <primoz.peterlin@biofiz.mf.uni-lj.si>
+
+ * sfd/FreeSans.sfd: added U+01A, U+01A3, U+01A6, U+01B2, U+01BA,
+ U+01BB, U+01BE, U+01BF.
+
+ * sfd/FreeSans.sfd: aligned small Armenian letters to x-height in
+ response to bug #15480. Armenian in Free Sans needs a major
+ cleanup.
+
+2006-01-24 Primoz Peterlin <primoz.peterlin@biofiz.mf.uni-lj.si>
+
+ * sfd/FreeSerif.sfd: changed U+0452, U+045B. Cleanup: U+0460,
+ U+0461, U+04Bc, U+04BD, U+0508.
+
+ * sfd/FreeSansOblique.sfd: replaced accented chars in Latin-1 and
+ Latin Extended-B sections with references, where possible.
+
+ * sfd/FreeSerif.sfd: changed U+0285.
+
+2006-01-23 Primoz Peterlin <primoz.peterlin@biofiz.mf.uni-lj.si>
+
+ * sfd/FreeSans.sfd: added U+0195, U+01AA, U+0297, U+03D7,
+ U+03F0. Several flipped references replaced by outlines.
+
+ * sfd/FreeSansOblique.sfd: Latin Extended-B section more or less
+ brought in sync with FreeSans.
+
+ * sfd/FreeMonoBoldOblique.sfd: added glyphs from FreeMonoBold in
+ the Latin Extended-B and IPA Extensions sections.
+
+ * sfd/FreeSerifBold.sfd: Added U+0224, U+0225. Changed U+01B7,
+ U+01B8, U+04E0, U+0452, U+045B. Replaced accented characters in
+ the Cyrillic region with references.
+
+2006-01-21 Primoz Peterlin <primoz.peterlin@biofiz.mf.uni-lj.si>
+
+ * sfd/FreeSans.sfd: added U+0255, U+0264, U+0277, U+0286,
+ U+029D. Changed U+0261. Deleted spurious glyphs in the control
+ code area.
+
+2006-01-19 Primoz Peterlin <primoz.peterlin@biofiz.mf.uni-lj.si>
+
+ * sfd/FreeSans.sfd: replaced Hardip Pannu Singh's Gurmukhi with
+ AnmolUni by Kulbir Singh Thind.
+
+2006-01-17 Primoz Peterlin <primoz.peterlin@biofiz.mf.uni-lj.si>
+
+ * sfd/FreeSansBold.sfd: Added U+018D, U+0194, U+01B5, U+01B6,
+ U+01BE, U+0262, U+02A2.
+
+ * sfd/FreeSansBold.sfd: Changed U+0261 in order to distinguish it
+ from U+0067. Changed U+0251, U+0252.
+
+ * sfd/FreeSerifBold.sfd: Small changes in the Cyrillic
+ section. Added U+0183, U+018C.
+
+ * sfd/FreeSans.sfd: Added U+2045, U+2046.
+
+ * sfd/FreeSansBold.sfd: Filled in the Gurkmukhi part with the
+ AnmolUni-Bold by Kulbir Singh Thind. Also some minor corrections
+ in the Cyrillic part.
+
+ * CREDITS: Added Kulbir Singh Thind.
+
+ * AUTHORS: Added Kulbir Singh Thind.
+
+2006-01-14 Primoz Peterlin <primoz.peterlin@biofiz.mf.uni-lj.si>
+
+ * sfd/FreeSerif.sfd: Thomas Ridgeway's Tamil characters replaced
+ by the ones released by the Samyak font project.
+
+ * CREDITS: Added Pravin Satpute, Bageshri Salvi, Rahul Bhalerao
+ and Sandeep Shedmake
+
+ * AUTHORS: Added Pravin Satpute, Bageshri Salvi, Rahul Bhalerao
+ and Sandeep Shedmake
+
+2006-01-08 Primoz Peterlin <primoz.peterlin@biofiz.mf.uni-lj.si>
+
+ * sfd/FreeSansBold.sfd, sfd/FreeMonoBoldOblique.sfd: minor changes.
+
+2006-01-05 Denis Jacquerye <moyogo@gmail.com>
+
+ * sfd/FreeMono.sfd, sfd/FreeMonoOblique.sfd, sfd/FreeMonoBold.sfd,
+ sfd/FreeMonoBoldOblique.sfd, sfd/FreeSans.sfd,
+ sfd/FreeSansOblique.sfd, sfd/FreeSansBold.sfd,
+ sfd/FreeSansBoldOblique.sfd, sfd/FreeSerif.sfd,
+ sfd/FreeSerifItalic.sfd, sfd/FreeSerifBold.sfd,
+ sfd/FreeSerifBoldItalic.sfd: added cedi sign U+20B5, Ghanaian
+ currency
+
+2005-12-29 Primoz Peterlin <primoz.peterlin@biofiz.mf.uni-lj.si>
+
+ * sfd/FreeSans.sfd: minor cleanup in the Gujarati part.
+
+2005-12-22 Primoz Peterlin <primoz.peterlin@biofiz.mf.uni-lj.si>
+
+ * sfd/FreeSans.sfd: Devanagari and Gujarati parts cleared; once
+ again merged with Gargi 1.9 and Padmaa 0.6, this time correctly so
+ that the anchor points survived the merger.
+
+2005-12-16 Primoz Peterlin <primoz.peterlin@biofiz.mf.uni-lj.si>
+
+ * sfd/FreeSans.sfd: added U+0577.
+
+2005-12-15 Primoz Peterlin <primoz.peterlin@biofiz.mf.uni-lj.si>
+
+ * sfd/FreeSans.sfd: added U+0559, U+055F, U+2024.
+
+ * sfd/FreeSansBold.sfd: added U+056E, U+0573.
+
+2005-12-14 Primoz Peterlin <primoz.peterlin@biofiz.mf.uni-lj.si>
+
+ * sfd/FreeSans.sfd: Merged with Gargi 1.9 and Padmaa 0.6,
+ courtesy Monika Shah and Sonali Sonania from C-DAC, Mumbai.
+
+ * CREDITS: Added Monika Shah and Sonali Sonania.
+
+ * AUTHORS: Added Monika Shah and Sonali Sonania.
+
+2005-12-13 Primoz Peterlin <primoz.peterlin@biofiz.mf.uni-lj.si>
+
+ * sfd/FreeSans.sfd - Removed Sinhala glyphs.
+
+ * sfd/FreeSerif.sfd - Added Sinhala glyphs, formerly in FreeSans.
+
+2005-12-09 Primoz Peterlin <primoz.peterlin@biofiz.mf.uni-lj.si>
+
+ * sfd/FreeSerif.sfd: added U+20AF, U+211E. Changed U+20AC (EURO
+ SIGN).
+
+ * tools/freefont-ttf.spec: Added specification file for building
+ RPM package, courtesy Rok Papez.
+
+ * sfd/FreeSerifBold.sfd: added more glyphs from Txfonts to the
+ Arrows and Mathematical Symbols ranges.
+
+ * sfd/FreeSerifBoldItalic.sfd: added U+03F5 from Txfonts.
+
+2005-12-08 Primoz Peterlin <primoz.peterlin@biofiz.mf.uni-lj.si>
+
+ * sfd/FreeSans.sfd: added U+0567, U+056A, U+056C, U+0582.
+
+ * sfd/FreeSerifBold.sfd: copied Box Drawing range from FreeSans.
+
+ * sfd/FreeSerifBold.sfd: added glyphs from Txfonts to the Arrows
+ and Mathematical Symbols ranges.
+
+ * sfd/FreeSerif.sfd: added U+2259-225A, U+22BA, U+2308-230B,
+ U+2322-2323. Cyrillic composite characters replaced with
+ references.
+
+2005-12-07 Primoz Peterlin <primoz.peterlin@biofiz.mf.uni-lj.si>
+
+ * sfd/FreeSerifBold.sfd: added U+025A, U+025D, U+026B, U+029B,
+ U+02AE, U+02AF, U+02DE.
+
+ * sfd/FreeSerifBold.sfd: updated Hebrew part with Drugulin font
+ from the Culmus project.
+
+ * sfd/FreeSerif.sfd: added U+207A-207C, U+208A-208C, U+2215-2216.
+
+ * sfd/FreeSans.sfd: added U+2320 TOP HALF INTEGRAL, U+23AE
+ INTEGRAL EXTENSION, U+2321 BOTTOM HALF INTEGRAL (bug #13370).
+
+2005-12-07 Primoz Peterlin <primoz.peterlin@biofiz.mf.uni-lj.si>
+
+ * sfd/FreeSerifBold.sfd: added U+0294-0296, U+02A1-02A2. Started
+ adding "below" anchors. Performed hinting on characters that were
+ not hinted "en masse".
+
+2005-12-06 Primoz Peterlin <primoz.peterlin@biofiz.mf.uni-lj.si>
+
+ * sfd/FreeSans.sfd: fixed some more metrics problems in the
+ Extended Greek area; performed hinting on characters that were not
+ hinted "en masse".
+
+ * Makefile: clean also signature files.
+
+ * sfd/FreeMonoBoldOblique.sfd, sfd/FreeMonoBold.sfd: cosmetic
+ changes; cleaning background of referenced composed characters.
+
+2005-12-05 Panayotis Katsaloulis <panayotis@panayotis.com>
+
+ * sfd/FreeMono.sfd, sfd/FreeMonoOblique.sfd, sfd/FreeMonoBold.sfd,
+ sfd/FreeMonoBoldOblique.sfd, sfd/FreeSans.sfd,
+ sfd/FreeSansOblique.sfd, sfd/FreeSansBold.sfd,
+ sfd/FreeSansBoldOblique.sfd, sfd/FreeSerif.sfd,
+ sfd/FreeSerifItalic.sfd, sfd/FreeSerifBold.sfd,
+ sfd/FreeSerifBoldItalic.sfd: Some changes to the greek glyphs,
+ mostly having to do with "tonos" (accent)
+
+2005-12-05 Primoz Peterlin <primoz.peterlin@biofiz.mf.uni-lj.si>
+
+ * sfd/FreeSans.sfd: minor cosmetic changes.
+
+ * sfd/FreeSans.sfd: adjusted widths of characters in the Extended
+ Greek range; accents are not any more considerably overhanging on
+ the left side. Added U+1EDA-1EE3, U+1EE8-1EF1.
+
+ * sfd/FreeSans.sfd: continued working on Extended Greek range;
+ metrics still not finished.
+
+2005-12-03 Primoz Peterlin <primoz.peterlin@biofiz.mf.uni-lj.si>
+
+ * sfd/FreeSans.sfd: fixed combined Greek accents (bug
+ #12800). Width of characters still need to be adjusted as in
+ FreeSerif.
+
+ * sfd/FreeSerif.sfd: fixed positions of Greek accents (bug #12798).
+
+ * CREDITS: Added Panayotis Katsaloulis.
+
+ * AUTHORS: Added Panayotis Katsaloulis.
+
+ * Makefile: minor changes; now creating also a tarfile with sfds.
+
+2005-12-01 Primoz Peterlin <primoz.peterlin@biofiz.mf.uni-lj.si>
+
+ * sfd/FreeSerifItalic.sfd: added U+0183, U+018C, U+01C0, U+01C1,
+ U+01C3, U+01E0, U+01E1, U+01F8, U+01F9.
+
+ * Makefile: created a Makefile to assist building.
+
+ * README: an update.
+
+ * COPYING: added GNU General Public License, version 2.
+
+ * tools/GenerateTrueType: wrote a FontForge script for conversion
+ to TrueType.
+
+ * sfd/FreeSerif.sfd: merged with SolaimanLipi Bangla OpenType font
+ from www.ekushey.org, courtesy Solaiman Karim.
+
+ * sfd/FreeSerifItalic.sfd: merged with SolaimanLipi Bangla
+ OpenType font from www.ekushey.org, slanted by 15.5 degrees.
+
+ * sfd/FreeSans.sfd: merged with Rupali Bangla OpenType font from
+ www.ekushey.org
+
+ * sfd/FreeSansOblique.sfd: merged with Rupali Bangla OpenType font from
+ www.ekushey.org, slanted by 12 degrees.
+
+ * CREDITS: added Solaiman Karim
+
+ * AUTHORS: added Solaiman Karim
+
+2005-11-30 Primoz Peterlin <primoz.peterlin@biofiz.mf.uni-lj.si>
+
+ * sfd/FreeSerif.sfd: merged with the Rachana Normal.
+
+ * AUTHORS: added K.H. Hussain and R. Chitrajan
+
+ * CREDITS: added K.H. Hussain and R. Chitrajan
+
+2005-11-23 Primoz Peterlin <primoz.peterlin@biofiz.mf.uni-lj.si>
+
+ * sfd/FreeSans.sfd - cleaned some background images.
+
+ * sfd/FreeSans.sfd - added U+01A0-01A1, U+01AF-01B0, U+026E,
+ U+028F, U+0291, U+02A3-02A5, U+031B. Modified U+0198.
+
+2005-11-22 Primoz Peterlin <primoz.peterlin@biofiz.mf.uni-lj.si>
+
+ * sfd/FreeSans.sfd - added U+2504-250B.
+
+ * sfd/FreeSans.sfd - added U+2591-25A1, U+25A3-25A5, U+25AA, U+25AC.
+
+ * sfd/FreeSans.sfd, sfd/FreeSansBold.sfd - added U+0263.
+
+2005-11-21 Primoz Peterlin <primoz.peterlin@biofiz.mf.uni-lj.si>
+
+ * sfd/FreeMono.sfd - corrected positions of some Greek diacritics
+ on page 0x1F.
+
+ * sfd/FreeMonoOblique.sfd - working on bringing it in sync with
+ FreeMono.sfd.
+
+ * sfd/FreeSerifBoldItalic.sfd - applied the sequence suggested by
+ Werner Lemberg for reducing redundant points. Added a couple of
+ glyphs in the IPA Extensions region.
+
+ * sfd/FreeSansBold.sfd - added U+0574, U+0576. Removed overlaps.
+
+2005-11-20 Primoz Peterlin <primoz.peterlin@biofiz.mf.uni-lj.si>
+
+ * sfd/FreeSerif.sfd - added U+02AA-02AC, U+02B0-02B2.
+
+2005-11-19 Primoz Peterlin <primoz.peterlin@biofiz.mf.uni-lj.si>
+
+ * sfd/FreeSans.sfd - added U+01B7-01B9, U+0196, U+019A, U+01C3,
+ U+0224-0225, U+025E, U+029A, U+2422. Changed U+0184-0185, U+0192,
+ U+01B4, U+0282, U+0284.
+
+2005-11-18 Primoz Peterlin <primoz.peterlin@biofiz.mf.uni-lj.si>
+
+ * sfd/FreeSerif.sfd - added U+02EE, U+207F.
+
+ * sfd/FreeSans.sfd - started Box Drawing area.
+
+2005-11-17 Primoz Peterlin <primoz.peterlin@biofiz.mf.uni-lj.si>
+
+ * sfd/FreeSerifBold.sfd - added glyphs from the Omega project to
+ Latin Extended-B, IPA Extensions and Greek ranges.
+
+ * sfd/FreeSerifBoldItalic.sfd - added glyphs from the Omega
+ project to Latin Extended-B, IPA Extensions and Greek ranges.
+
+ * sfd/FreeSerifItalic.sfd - added glyphs from the Omega
+ project to Latin Extended-B, IPA Extensions and Greek ranges.
+
+ * sfd/FreeSerifItalic.sfd - added U+018B, U+025C, U+0265, U+026F,
+ U+0279, U+0287, U+028C-028E, U+029E.
+
+ * sfd/FreeSerifBoldItalic.sfd - added U+1EDA-1EE3, U+1EE8-1EF1,
+ U+2190-219B, U+219E-21A8, U+21B9-21BA, U+21C4-21CA, U+21E4-21E5,
+ U+2669-266F. MES-1 compliant.
+
+ * sfd/FreeMonoOblique.sfd, sfd/FreeMonoBold.sfd,
+ sfd/FreeMonoBoldOblique.sfd, sfd/FreeSansOblique.sfd,
+ sfd/FreeSansBold.sfd, sfd/FreeSansBoldOblique.sfd,
+ sfd/FreeSerifItalic.sfd, sfd/FreeSerifBold.sfd,
+ sfd/FreeSerifBoldItalic.sfd - added U+FFFD.
+
+ * sfd/FreeSerif.sfd - removed overlaps in Latin Extended-B and IPA
+ Extensions ranges.
+
+2005-11-16 Primoz Peterlin <primoz.peterlin@biofiz.mf.uni-lj.si>
+
+ * sfd/FreeSerifItalic.sfd - applied the sequence suggested by
+ Werner Lemberg for reducing redundant points.
+
+ * sfd/papers/eurotex2003/freefont.tex,
+ sfd/papers/eurotex2003/freefont.bib - Revised version, sent back
+ by Karl Berry on 20050110, that should match the one published in
+ TUGboat.
+
+ * sfd/FreeSerifItalic.sfd - started added accent anchors. Added a
+ handful of Greek letters from Omega font collection.
+
+ * sfd/FreeSerif.sfd - added a handful of letters in the Latin
+ Extended-B and IPA Extension ranges from the Omega font collection.
+
+2005-11-16 Denis Jacquerye <moyogo@gmail.com>
+
+ * sfd/FreeSerif.sfd - moved U+0263 to U+0264; added U+0263
+
+ * sfd/FreeSerifItalic.sfd - fixe U+01EE; added U+01B7-U+01B9
+
+2005-11-16 Primoz Peterlin <primoz.peterlin@biofiz.mf.uni-lj.si>
+
+ * sfd/FreeSans.sfd - Made small Greek letters the same height as
+ Latin and Cyrillic ones and replaced them with references, where
+ applicable.
+
+ * sfd/FreeSerif.sfd - replaced Greek letters with references,
+ where applicable. Added U+03D7, U+03F0-03F2.
+
+ * sfd/FreeSerif.sfd - added U+0255, U+025A, U+025D, U+025F,
+ U+0262-0263, U+026B-026C, U+0274, U+0276-0277, U+028F, U+0291,
+ U+029D.
+
+ * sfd/FreeMonoOblique.sfd - applied the sequence suggested by
+ Werner Lemberg for reducing redundant points. Added U+F6BE.
+
+ * sfd/FreeSansOblique.sfd - applied the sequence suggested by
+ Werner Lemberg for reducing redundant points.
+
+ * sfd/FreeSans.sfd - changed U+01A5.
+
+2005-11-16 Primoz Peterlin <primoz.peterlin@biofiz.mf.uni-lj.si>
+
+ * sfd/FreeSans.sfd - applied the sequence suggested by Werner
+ Lemberg for reducing redundant points. Replaced accented glyphs in
+ the Latin-1 and Latin Extended-A areas with references. Made
+ capital Greek letters the same height as Latin and Cyrillic ones
+ and replaced them with references, where applicable.
+
+2005-11-15 Denis Jacquerye <moyog@gmail.com>
+
+ * sfd/FreeSans.sfd, sfd/FreeSansBold.sfd,
+ sfd/FreeSansBoldOblique.sfd, sfd/FreeSansOblique.sfd - fixed
+ U+026A, it was a dotlessi and therefore like U+0069 when
+ accented.
+
+2005-11-15 Primoz Peterlin <primoz.peterlin@biofiz.mf.uni-lj.si>
+
+ * sfd/FreeMonoBold.sfd - corrected Greek tonos (slanted instead of
+ a vertical line).
+
+ * sfd/FreeMonoBoldOblique.sfd - applied the sequence suggested by
+ Werner Lemberg for reducing redundant points. Replaced accented
+ glyphs in the Latin-1 and Latin Extended-A areas with references.
+
+2005-11-14 Primoz Peterlin <primoz.peterlin@biofiz.mf.uni-lj.si>
+
+ * sfd/FreeMono.sfd, sfd/FreeMonoOblique.sfd, sfd/FreeMonoBold.sfd,
+ sfd/FreeMonoBoldOblique.sfd, sfd/FreeSans.sfd,
+ sfd/FreeSansOblique.sfd, sfd/FreeSansBold.sfd,
+ sfd/FreeSansBoldOblique.sfd, sfd/FreeSerif.sfd,
+ sfd/FreeSerifItalic.sfd, sfd/FreeSerifBold.sfd,
+ sfd/FreeSerifBoldItalic.sfd - Added 2005 in copyright info.
+
+ * sfd/FreeSansBoldOblique.sfd - applied the sequence suggested by
+ Werner Lemberg for reducing redundant points. Replaced accented
+ glyphs in the Latin-1 area with references.
+
+ * sfd/FreeSansBoldOblique.sfd - added U+0180, U+0184, U+0185,
+ U+0195, U+01A0-01A2, U+01AF-01B0, U+025E, U+026E, U+0292,
+ U+0294-0296, U+029A, U+02A1, U+2126-2127, U+2190-219B,
+ U+219E-21A8, U+21C4-21CA, U+2669-266F. MES-1 compliant.
+
+ * sfd/FreeMono.sfd - Replaced accented glyphs in the Greek and
+ Cyrillic areas with references.
+
+ * sfd/FreeMonoBold.sfd - applied the sequence suggested by Werner
+ Lemberg for reducing redundant points. Replaced accented glyphs in
+ the Latin-1 and Latin Extended-A areas with references.
+
+2005-11-14 Primoz Peterlin <primoz.peterlin@biofiz.mf.uni-lj.si>
+
+ * sfd/FreeSerif.sfd - applied the sequence suggested by Werner
+ Lemberg for reducing redundant points.
+
+ * sfd/FreeSansBold.sfd - added U+219A, U+219B, U+2669-266F.
+
+ * sfd/FreeSerifBold.sfd - added U+2669-266F.
+
+2005-11-12 Primoz Peterlin <primoz.peterlin@biofiz.mf.uni-lj.si>
+
+ * sfd/FreeSansBold.sfd - added U+0180, U+0181, U+0183, U+0187,
+ U+0188, U+018A, U+018C, U+018D, U+0193, U+019C, U+01A0, U+01A1,
+ U+01AC, U+01AF, U+01B0, U+025C, U+0260, U+026E, U+0277, U+0281,
+ U+0284.
+
+2005-11-11 Primoz Peterlin <primoz.peterlin@biofiz.mf.uni-lj.si>
+
+ * sfd/FreeSansBold.sfd - added U+195, U+1A6, U+025E, U+026E,
+ U+029A, U+0313, U+0314, U+0342, U+0344, U+0345. Started adding
+ accent anchors.
+
+ * sfd/FreeMono.sfd - applied the sequence for reducing redundant
+ points, suggested by Werner Lemberg.
+
+ * sfd/FreeMono.sfd - corrected Greek letters (using tonos instead
+ of a vertical line). Added U+026E, U+F6BE. Accented characters in
+ Latin 1, Latin Extended A and partly Latin Extended B replaced by
+ references.
+
+ * sfd/FreeSerifBold.sfd - applied the sequence for reducing
+ redundant points, suggested by Werner Lemberg. Added U+01A5,
+ U+02A0, U+2190-219B, U+219E-21A8, U+21B8, U+21B9, U+21C4-21CA,
+ U+21E4, U+21E5.
+
+2005-11-10 Primoz Peterlin <primoz.peterlin@biofiz.mf.uni-lj.si>
+
+ * sfd/FreeSansOblique - changed U+0192, U+01A5; added U+01C0-01C3.
+
+ * sfd/FreeSansBold.sfd - replaced glyphs with references in the
+ Cyrillic area. Removed U+04A8, U+04A9. Added U+04C5, U+04C6,
+ U+04C9, U+04CA, U+04CD, U+04CE, U+0535, U+053F, U+0546, U+0565,
+ U+0584, U+0587, U+0589.
+
+2005-11-10 Denis Jacquerye <moyogo@gmail.com>
+
+ * sfd/FreeSans.sfd - added U+028A-U+028B
+
+ * sfd/FreeSansOblique - added U+028A-U+028B, U+0276,
+ U+0292, U+0294-U+0296, U+0298-U+0299 and U+029B; fixed some
+ other glyphs
+
+2005-11-10 Primoz Peterlin <primoz.peterlin@biofiz.mf.uni-lj.si>
+
+ * sfd/FreeSerif.sfd - added U+01A6. Simplified outlines in the
+ ASCII range.
+
+ * sfd/FreeSansBold.sfd - added U+00A0, U+00AD, U+0531, U+2126,
+ U+2190-2199, U+219E-21A8, U+21C4-21CA.
+
+ * sfd/FreeSansBold.sfd - applied the sequence for reducing
+ redundant points, suggested by Werner Lemberg. Added automatically
+ constructed accented characters in page 0x1E.
+
+2005-11-09 Primoz Peterlin <primoz.peterlin@biofiz.mf.uni-lj.si>
+
+ * sfd/FreeSerif.sfd - added U+0183, U+018C.
+
+ * sfd/FreeSans.sfd - added U+1EA2, U+1EA3, U+1EA8, U+1EA9, U+1EB2,
+ U+1EB3, U+1EBA, U+1EBB, U+1EC2, U+1EC3, U+1EC8, U+1EC9, U+1ECE,
+ U+1ECF, U+1ED4, U+1ED5, U+1EE6, U+1EE7, U+1EF6, U+1EF7, U+220A,
+ U+220B, U+220D, U+2272, U+2273, U+2282, U+2283.
+
+ * sfd/FreeSerifItalic.sfd - changed U+03D5.
+
+ * sfd/FreeSerifBoldItalic.sfd - changed U+03C6; added U+2070,
+ U+2075-2079, U+207F, U+2080, U+2085-2089, U+2155-217F.
+
+ * sfd/FreeSerif.sfd - added U+0184, U+0185, U+018D, U+0195,
+ U+0197, U+019A, U+019B, U+01A0, U+01A1, U+01AC, U+01B5, U+01B6,
+ U+01C0, U+01C1, U+01C3, U+01F6, U+0294-0296, U+1E9A, U+1EDA-1EE3,
+ U+1EE8-1EF1.
+
+2005-11-07 Primoz Peterlin <primoz.peterlin@biofiz.mf.uni-lj.si>
+
+ * sfd/FreeSansBold.sfd - added U+0562, U+056D. U+0575.
+
+ * sfd/FreeMono.sfd - added U+0589.
+
+2005-11-06 Primoz Peterlin <peterlin@localhost.localdomain>
+
+ * sfd/FreeSans.sfd - added U+0278, U+03D5, U+2248. Corrected
+ U+2071, U+222E, U+2242, U+2243 in response to bug reports
+ http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=276118
+ http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=276120
+
+ * sfd/FreeMono.sfd - added U+2227, U+2228, U+2262. Corrected
+ U+2299-229D in response to bug report
+ http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=276121
+
+ * sfd/FreeMonoBold.sfd - added U+2010, U+2012 in response to bug
+ report http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=289032
+ Swapped U+03C6 (Greek small letter phi) and U+03D5 (Greek phi
+ symbol) in order to conform to Unicode standard. Simplified glyph
+ shapes in ASCII range. Started adding "above" and "below" anchors.
+
+2005-11-05 Primoz Peterlin <peterlin@localhost.localdomain>
+
+ * sfd/FreeSerif.sfd - accented letters in Latin Extended-A
+ replaced by references wherever possible.
+
+ * sfd/FreeSerif.sfd - added U+0180, U+0181, U+0187, U+0188,
+ U+018A, U+0193, U+019C, U+01A4, U+01A5, U+01A7, U+01A8, U+01AF,
+ U+01B0, U+026E, U+0270, U+0278, U+0280, U+0281, U+028B, U+0299,
+ U+029C, U+029F.
+
+2005-11-03 Primoz Peterlin <peterlin@localhost.localdomain>
+
+ * sfd/FreeSansBold.sfd - added U+0180, U+0184, U+0185, U+0192,
+ U+019B, U+01A0-01A2, U+01AF, U+01B0, U+01EE, U+01EF, U+0292,
+ U+0294-0296, U+02A1, U+0532, U+054C, U+057C, U+222B. Changed
+ U+014B, U+01A5, U+01B4, U+03BB.
+
+ * sfd/FreeSans.sfd - added U+04C5, U+04C6, U+04C9, U+04CA, U+04D,
+ U+04CE.
+
+ * sfd/FreeSansBold.sfd - cleaner Arabic outlines. Added U+01E4,
+ U+01E5.
+
+2005-11-02 Primoz Peterlin <primoz.peterlin@biofiz.mf.uni-lj.si>
+
+ * sfd/FreeSansBold.sfd - started Armenian; added U+0538, U+0542,
+ U+0544, U+0548, U+054D, U+054F, U+0550, U+0553, U+0555, U+0561,
+ U+0563, U+0564, U+0566, U+0568 U+056B, U+056F, U+0570, U+0572,
+ U+0578, U+057A, U+057D-057F, U+0580, U+0581, U+0583, U+0585.
+
+ * sfd/FreeMono.sfd - swapped U+03C6 (Greek small letter phi) and
+ U+03D5 (Greek phi symbol) in order to conform to Unicode standard.
+ Added U+04C5, U+04C6, U+04C9, U+04CA, U+04D, U+04CE.
+
+2005-11-01 Primoz Peterlin <peterlin@localhost.localdomain>
+
+ * sfd/FreeSansBold.sfd - modified U+019C.
+
+ * sfd/FreeSansBoldOblique.sfd - added U+00A0, U+00AD, U+019C,
+ U+01B7, U+01B8, U+0275, U+0278, U+0298, U+2012, U+2015,
+ U+2070-207F, U+2080-208E, U+2153-217F, U+2213, U+2215.
+
+2005-10-31 Primoz Peterlin <peterlin@localhost.localdomain>
+
+ * sfd/FreeSerif.sfd - added U+0199, U+01AB, U+0265, U+0282,
+ U+0288, U+028C-028E, U+0290, U+029E, U+02A0.
+
+2005-10-28 Primoz Peterlin <primoz.peterlin@biofiz.mf.uni-lj.si>
+
+ * sfd/FreeSerifBold.sfd - added U+019E, U+01AB, U+01AD, U+01B1,
+ U+0256, U+025F, U+0265, U+0269, U+026F, U+0270, U+0279-027F,
+ U+0282, U+0287, U+0288, U+028C-028E, U+0290.
+
+ * sfd/FreeSerifBold.sfd - added U+2070, U+2075-2079, U+2080,
+ U+2085-2089, U+2153-215E, U+2113-2115, U+2119.
+
+ * sfd/FreeSerifBold.sfd - added U+0199, U+019B, U+01B8, U+01B9,
+ U+01BE, U+01C0, U+0262, U+0274, U+0278, U+0280, U+028F, U+0298,
+ U+0299, U+029C, U+029E, U+029F, U+2012, U+2015, U+2016, U+2129,
+ U+2217.
+
+2005-10-27 Primoz Peterlin <primoz.peterlin@biofiz.mf.uni-lj.si>
+
+ * sfd/FreeSans.sfd - added U+018D, U+0194, U+019B, U+019C, U+01B5,
+ U+01B6, U+0295, U+0296, U+029B, U+02A2, U+0472, U+0473, U+2114,
+ U+2119.
+
+ * sfd/FreeSerifItalic.sfd - minor cleanup in the superscript range
+ (U+2070-2079).
+
+ * sfd/FreeSansBold.sfd - added subscripts and superscripts
+ (U+2070-208F), completed fractions (U+2152-215F) and Roman
+ numerals (U+2160-217F).
+
+ * sfd/FreeSerifBold.sfd - added U+018B, U+018E, U+018F, U+0191,
+ U+019D, U+01A7, U+01A8, U+01AE, U+0253, U+0266, U+0267, U+026A,
+ U+0271-0273, U+0283, U+0285.
+
+2005-10-26 Primoz Peterlin <primoz.peterlin@biofiz.mf.uni-lj.si>
+
+ * sfd/FreeSans.sfd - added "above" anchors to selected Cyrillic
+ characters. Added U+0294, U+02A1.
+
+ * sfd/FreeMono.sfd - added U+2011, U+2012, U+203B, U+204A, U+2071,
+ U+2129, U+2232, U+2233. Changed and/or corrected U+2106, U+211E,
+ U+2126, U+2127, U+2153-215F, U+2202.
+
+ * sfd/FreeMono.sfd - a try to imitate Denis' work on adding
+ anchors by adding "above" anchor to a couple of basic Latin
+ characters.
+
+ * sfd/FreeSansBold.sfd - added U+0278, U+0298. Cleaned up outlines
+ of most Greek letters.
+
+ * sfd/FreeSansBold.sfd - Added U+2010-2012, U+2015, U+2032,
+ U+203C, U+2047-2049.
+
+ * sfd/FreeSans.sfd - Added U+01C0-01C2, U+0276, U+0292,
+ U+0298. Changed U+0251, U+0294, U+02A1.
+
+2005-10-25 Primoz Peterlin <primoz.peterlin@biofiz.mf.uni-lj.si>
+
+ * sfd/FreeSerifItalic.sfd - added U+00A0, U+00AD, U+2010-2012,
+ U+2015, U+2126, U+2127, U+2153-215E, U+2160-217F, U+2190-2193,
+ U+2669-266F. FreeSerifItalic is now MES-1 compliant.
+
+ * sfd/FreeSerif.sfd - added U+0191, U+019D, U+01AE, U+027E,
+ U+027F, U+0283, U+0285.
+
+ * sfd/FreeSerif.sfd - added U+019E, U+01AD, U+01B8, U+01B9,
+ U+0253, U+0256, U+0257, U+025C, U+0260, U+0266, U+0267, U+0269,
+ U+026D, U+0271-0273, U+0279-027D.
+
+ * sfd/FreeSerifBoldItalic.sfd - added U+00A0, U+00AD, U+2010-2012,
+ U+2015, U+2032-2034, U+203C, U+2047-204A, U+2074, U+2081-2084,
+ U+2126, U+2153, U+2154, U+215F, U+2215. Corrected positions of
+ diacritics on U+0200-0217.
+
+ * sfd/FreeSansOblique.sfd, sfd/FreeSans.sfd, sfd/FreeSansBold.sfd,
+ sfd/FreeSansBoldOblique.sfd, sfd/FreeMonoBoldOblique.sfd,
+ sfd/FreeMonoBold.sfd, sfd/FreeSerifItalic.sfd,
+ sfd/FreeSerifBold.sfd sfd/FreeSerifBoldItalic.sfd - brought in
+ sync with Valek Filipov's urw-fonts-1.0.7pre41.
+
+ * sfd/FreeSansOblique.sfd - added U+00A0, U+2011-2012, U+2015,
+ U+2070, U+2071, U+2074-2079, U+2080-2089, U+2126, U+2153-215F,
+ U+2190-2195, U+2215, U+266A. FreeSansOblique is now MES-1
+ compliant.
+
+2005-10-24 Denis Jacquerye <moyogo@altern.org>
+
+ * sfd/FreeSans.sfd, sfd/FreeSansBold.sfd,
+ sfd/FreeSansOblique.sfd, sfd/FreeSansBoldOblique.sfd - added
+ ccmp for i and j to be substituted with dotless i or j when
+ followed by above diacritic
+
+2005-10-24 Primoz Peterlin <primoz.peterlin@biofiz.mf.uni-lj.si>
+
+ * sfd/FreeSans.sfd - added U+2011, U+2012, U+2015. FreeSans is now
+ MES-1 conformant.
+
+2005-10-23 Denis Jacquerye <moyogo@gmail.com>
+
+ * sfd/FreeSans.sfd - added above, below, abovemk and belowmk
+ anchors for diacritics placement to many Basic Latin characters,
+ some Latin Extented A and B, and some IPA characters; fixed a
+ couple of precomposed characters to have diacritics at the same
+ height as similar characters.
+
+2005-10-21 Primoz Peterlin <primoz.peterlin@biofiz.mf.uni-lj.si>
+
+ * sfd/FreeSerif.sfd - added U+02B9, U+02BA, U+02CD, U+2017,
+ U+2036, U+2037, U+203C, U+203E, U+2047-204A.
+
+2005-10-20 Primoz Peterlin <primoz.peterlin@biofiz.mf.uni-lj.si>
+
+ * sfd/FreeSerifBold.sfd - added U+0182, U+0189, U+0192, U+019F,
+ U+01A9, U+01B7, U+01C4-01CC, U+01E0-1E2, U+01F0-01F3, U+F6BE.
+ Corrected position of diacritics on U+0200-0217.
+
+ * sfd/FreeSerif.sfd - added U+00A0, U+00AD, U+0182, U+0189,
+ U+018B, U+018E, U+018F, U+0192, U+019F, U+01A9, U+01B1, U+01B7,
+ U+01DD, U+2010-2013, U+2015. FreeSerif is now MES-1 conformant.
+
+2005-10-19 Denis Jacquerye <moyogo@gmail.com>
+
+ * sfd/FreeSerif.sfd - added U+0268, U+026A, U+0289, U+0292; and
+ anchor "above" to more base glyphs.
+
+ * sfd/FreeSerifBold.sfd, sfd/FreeSerifItalic.sfd,
+ sfd/FreeSerifBoldItalic.sfd - added U+0250-0252, U+0258-0259,
+ U+0261, U+0268, U+026A, U+0279, U+0289
+
+ * sfd/FreeSerifBold.sfd - added anchor "above" to marks
+ U+0300-0314, and to base glyphs (vowels).
+
+2005-10-18 Denis Jacquerye <moyogo@gmail.com>
+
+ * sfd/FreeSerif.sfd - added anchor "above" to marks U+0300-0314,
+ and bases vowel of the U+0041-007A range, U+00E6, U+0186, U+0190,
+ U+0254 and U+025B; fixed Latin-1 Supplement block accented glyphs
+ to use references.
+
+2005-10-17 Primoz Peterlin <primoz.peterlin@biofiz.mf.uni-lj.si>
+
+ * sfd/FreeSansBold.sfd - added U+01B7, U+01B8, U+0275.
+
+2005-10-16 Denis Jacquerye <moyogo@gmail.com>
+ * sfd/FreeSans.sfd, sfd/FreeSansOblique.sfd - added some Latin
+ Extended-B African letters: U+0181, U+018A, U+0197-0198, U+01A4,
+ U+01AC, U+01B1, U+01B3-01B4;
+
+ * sfd/FreeSansBold.sfd, sfd/FreeSansBoldOblique.sfd - added Latin
+ Extended-B U+0187, 018E-018F, U+0191, U+0193, U+0197-0199,
+ U+019D-019F, U+01AB-01AE; correcting width of non-space
+ Combining Diacrtical Marks; added more glyphs to IPA Extensions
+ to match non Bold
+
+ * sfd/FreeSansBoldOblique.sfd - added many accented glyphs to
+ Latin Extended-B
+
+2005-10-15 Denis Jacquerye <moyogo@gmail.com>
+ * sfd/FreeSans.sfd, sfd/FreeSansOblique.sfd - added IPA Extensions
+ U+0262,U+0274,U+0280-0281, U+0299, U+029F, and Spacing Modifier
+ Letters U+02C9-02CB; fixed U+0287,029E height to baseline; added
+ stroke to U+0268
+
+ * sfd/FreeSansOblique.sfd - fixed skew on U+027F
+
+ * sfd/FreeSansBold.sfd, sfd/FreeSansBoldOblique.sfd - added to Latin
+ Extended-B U+01A7-01A8, IPA Extensions U+0251-0253, U+0256-0257,
+ U+0261, U+0265-026A, U+026F-0273, U+0289, U+028C-028E
+
+ * sfd/FreeSansBoldOblique.sfd - added to Latin extended-B U+0189,
+ U+01A8, U+01B1, U+0283, U+02C9 and Spacing Modifiers U+02C9-02CB
+
+2005-10-14 Primoz Peterlin <primoz.peterlin@biofiz.mf.uni-lj.si>
+
+ * sfd/FreeSansBold.sfd - Added a couple of composite glyphs,
+ mostly in the IPA and Latin Extended B ranges.
+
+2005-10-13 Denis Jacquerye <moyogo@gmail.com>
+
+ * FreeSans.sfd - removed overlap and simplified U+0187, 0191,
+ 0193, 01A5, 01AE, 0260, 0271, 0272, 0273, 027B; fixed diacritics
+ placement on U+0200-0217; fixed glyph for U+0283 to correct esh
+ without stroke; added U+025F and fixed U+025F from it; fixed
+ height of glyph at U+0285; arranged U+027E,027F to make more
+ distinguishable from U+0072.
+
+ * FreeSansOblique.sfd - added the corrected or new glyphs from
+ FreeSans; diacritics on U+200-0217 will need height readjustements.
+
+ * FreeSansBold.sfd, FreeSansBoldOblique.sfd - added U+0186, 0190,
+ 0250, 0254, 0258, 0259, 025B, 025C
+
+2005-10-13 Primoz Peterlin <primoz.peterlin@biofiz.mf.uni-lj.si>
+
+ * sfd/FreeSerif.sfd - Minor changes: U+22A2, U+22A3, U+22A6, U+23AE.
+ Added U+0250, U+0251, U+0258, U+0259, U+0275.
+
+ * sfd/FreeSerifItalic.sfd - Added glyphs U+222B-U+222F, U+2320,
+ U+2321. Fixed diacritics on U+0200-U+0217.
+
+2005-10-12 Denis Jacquerye <moyogo@gmail.com>
+
+ * sfd/FreeSerif.sfd - Corrected diacritics position on
+ U+01D5-01D9,01DB,01EA-01ED,0200-0217 and U+022A.
+
+ * sfd/FreeSerif.sfd, sfd/FreeSerifBold.sfd, sfd/FreeSerifItalic.sfd,
+ sfd/FreeSerifBoldItalic.sfd - added U+0186,0190,0254 and U+025B.
+
+2005-10-11 Primoz Peterlin <primoz.peterlin@biofiz.mf.uni-lj.si>
+
+ * sfd/FreeSerif.sfd - Fixed bug #13399 (glyphs for U+0360 and
+ U+0361 were swapped).
+
+ * sfd/FreeSerif.sfd - Attempt to correct bug #13370: INTEGRAL
+ EXTENSION does not align with TOP/BOTTOM HALF INTEGRAL; added
+ glyph U+23AE.
+
+2005-05-16 Primoz Peterlin <primoz.peterlin@biofiz.mf.uni-lj.si>
+
+ * sfd/FreeMono.sfd - Corrected shapes for Cross of Lorraine and
+ Cross of Jerusalem.
+
+2005-04-07 Primoz Peterlin <primoz.peterlin@biofiz.mf.uni-lj.si>
+
+ * sfd/FreeSansBold.sfd - Added some combining accents, just to
+ test the a version of FontForge.
+
+2003-12-05 Primoz Peterlin <primoz.peterlin@biofiz.mf.uni-lj.si>
+
+ * sfd/FreeMono.sfd - Some composite Latin characters rebuilt, as
+ they had accents 600 points to the left due to changes on October
+ 2. Some other minor changes in the mathematics area.
+
+2003-10-08 Primoz Peterlin <primoz.peterlin@biofiz.mf.uni-lj.si>
+
+ * sfd/FreeMonoOblique.sfd, sfd/FreeSerifBoldItalic.sfd,
+ FreeSerifItalic.sfd - applied Josef Segur's corrections from
+ Oct. 5.
+
+2003-10-02 Primoz Peterlin <primoz.peterlin@biofiz.mf.uni-lj.si>
+
+ * sfd/FreeSerif.sfd - Abbas Izad's contributed Arabic/Farsi
+ characters added.
+
+ * sfd/FreeMono.sfd, sfd/FreeMonoOblique.sfd, sfd/FreeMonoBold.sfd,
+ sfd/FreeMonoBoldOblique.sfd, sfd/FreeSans.sfd,
+ sfd/FreeSansOblique.sfd, sfd/FreeSansBold.sfd,
+ sfd/FreeSansBoldOblique.sfd, sfd/FreeSerif.sfd,
+ sfd/FreeSerifItalic.sfd, sfd/FreeSerifBold.sfd,
+ sfd/FreeSerifBoldItalic.sfd - Combining characters (U+0300 -
+ U+036F) moved left, so that they have negative horizontal values
+ and zero advance width.
+
+2003-09-15 Primoz Peterlin <primoz.peterlin@biofiz.mf.uni-lj.si>
+
+ * sfd/FreeSerifBold.sfd, sfd/FreeSerifItalic.sfd - Started working
+ on super- and subscripts.
+
+2003-09-12 Primoz Peterlin <primoz.peterlin@biofiz.mf.uni-lj.si>
+
+ * sfd/FreeSans.sfd, sfd/FreeSerif.sfd - Added some missing
+ Hiragana and Katakana characters.
+
+ * sfd/FreeSansBold.sfd - Cleared background characters in Latin
+ Extended-A. Added some automatically constructed characters in
+ Latin Extended-B. Started with superscripts and subscripts.
+
+ * sfd/FreeSans.sfd - Subscript numerals (U+2080-U+2089) completed.
+
+2003-05-19 Primoz Peterlin <primoz.peterlin@biofiz.mf.uni-lj.si>
+
+ * sfd/FreeSerif.sfd - Thai characters po pla and bo baimai
+ swapped; Thai character fongman corrected; all courtesy Theppitak
+ Karoonboonyanan.
+
+2003-05-17 Panayotis Katsaloulis <panayotis@panayotis.com>
+
+ * sfd/FreeSerif.sfd, sfd/FreeSerifItalic.sfd,
+ sfd/FreeSerifBold.sfd, sfd/FreeSerifBoldItalic.sfd - Full support
+ of all ancient greek glyphs
+
+2003-05-15 Primoz Peterlin <primoz.peterlin@biofiz.mf.uni-lj.si>
+
+ * tools/KerningNumerals.pl - A Perl script for moving kerning
+ information from ASCII numerals (U+0030...) to characters in the
+ Adobe corporate use area (U+F6xx).
+
+ * sfd/FreeSansBold.sfd, sfd/FreeSansOblique.sfd,
+ sfd/FreeSansBoldOblique.sfd - Created kerned numerals in the Adobe
+ corporate use area (U+F6xx) and moved kerning information from
+ ASCII numerals to the kerned numerals.
+
+2003-05-14 Primoz Peterlin <primoz.peterlin@biofiz.mf.uni-lj.si>
+
+ * sfd/FreeSans.sfd - First approximation of super- and subscript
+ numerals and vulgar fractions.
+
+ * sfd/FreeSerif.sfd - Super- and subscript numerals complete,
+ vulgar fractions completed and redone as references rather than
+ outlines.
+
+2003-05-12 Primoz Peterlin <primoz.peterlin@biofiz.mf.uni-lj.si>
+
+ * sfd/FreeSerif.sfd - Clean-up of the Cyrillic letters added on
+ March 27; super- and subscripts, vulgar fractions.
+
+2003-05-09 Primoz Peterlin <primoz.peterlin@biofiz.mf.uni-lj.si>
+
+ * sfd/FreeMonoBold.sfd - Added a couple of characters to
+ the Latin Extended-B area and the IPA extensions area.
+
+2003-05-08 Primoz Peterlin <primoz.peterlin@biofiz.mf.uni-lj.si>
+
+ * sfd/FreeSerifBoldItalic.sfd - Added a couple of characters to
+ the Latin Extended-B area.
+
+ * sfd/FreeSerif.sfd, sfd/FreeSerifItalic.sfd,
+ sfd/FreeSerifBold.sfd, sfd/FreeSerifBoldItalic.sfd - ASCII
+ numerals now monospaced; kerned numerals moved to Adobe corporate
+ use area
+ (U+F6xx).
+
+2003-05-07 Primoz Peterlin <primoz.peterlin@biofiz.mf.uni-lj.si>
+
+ * sfd/FreeSerif.sfd - Roman numerals now more complete.
+
+ * sfd/FreeSansOblique.sfd, sfd/FreeSansBoldOblique.sfd - Accented
+ characters added in the Latin Extended-B area.
+
+ * sfd/FreeSans.sfd - Greek accents added in the Greek Extended
+ area, characters added in the Latin Extended-B area, Roman
+ numerals added.
+
+ * sfd/FreeMonoOblique.sfd - Kerning pairs removed (what were they
+ doing in a monospaced font, anyway?).
+
+ * sfd/FreeMonoBoldOblique.sfd - Additions in Latin Extended-B and
+ Basic Greek.
+
+ * sfd/FreeMono.sfd, sfd/FreeMonoBold.sfd, sfd/FreeMonoOblique.sfd,
+ sfd/FreeMonoBoldOblique.sfd, sfd/FreeSans.sfd,
+ sfd/FreeSansBold.sfd, sfd/FreeSansOblique.sfd,
+ sfd/FreeSansBoldOblique.sfd - Major cleanup (fixed widths, open
+ paths, path directions (clockwise/counter-clockwise), points
+ rounded to integer values; outlines simplified etc.)
+
+2003-05-06 Primoz Peterlin <primoz.peterlin@biofiz.mf.uni-lj.si>
+
+ * tools/OS2UnicodeRange - A simple script to display OS/2 Unicode
+ range table in TrueType fonts.
+
+ * sfd/FreeSans.sfd, sfd/FreeSansBold.sfd - ASCII numerals now
+ monospaced; kerned numerals moved to Adobe corporate use area
+ (U+F6xx). FreeSans is done, FreeSansBold half-way.
+
+ * sfd/FreeMono.sfd, sfd/FreeMonoOblique.sfd, sfd/FreeMonoBold.sfd,
+ sfd/FreeMonoBoldOblique.sfd, sfd/FreeSans.sfd,
+ sfd/FreeSansOblique.sfd, sfd/FreeSansBold.sfd,
+ sfd/FreeSansBoldOblique.sfd, sfd/FreeSerif.sfd,
+ sfd/FreeSerifItalic.sfd, sfd/FreeSerifBold.sfd,
+ sfd/FreeSerifBoldItalic.sfd - Added 2003 in copyright info.
+
+2003-03-27 Primoz Peterlin <primoz.peterlin@biofiz.mf.uni-lj.si>
+
+ * sfd/FreeSerif.sfd - Cyrillic and Cyrillic Supplement blocks
+ brought to conformance with Unicode 3.2, courtesy Daniel Shurovich
+ Chirkov.
+
+2003-03-19 Primoz Peterlin <primoz.peterlin@biofiz.mf.uni-lj.si>
+
+ * sfd/FreeSans.sfd, sfd/FreeSansOblique.sfd - somewhat wider
+ germandbls (U+00DF), due to complaints by Walter Schmidt.
+
+2003-03-18 Primoz Peterlin <primoz.peterlin@biofiz.mf.uni-lj.si>
+
+ * sfd/FreeSans.sfd - Added Sinhala glyphs from the Tipitaka
+ project <http://www.metta.lk>, recoded to Unicode by Noah Levitt.
+
+2003-02-19 Primoz Peterlin <primoz.peterlin@biofiz.mf.uni-lj.si>
+
+ * sfd/FreeSans.sfd - Minor changes on mathematical operators.
+
+2003-02-18 Primoz Peterlin <primoz.peterlin@biofiz.mf.uni-lj.si>
+
+ * sfd/FreeMono.sfd - minor cleanup of glyph backgrounds; changed
+ integral signs (U+222B - U+2230)
+
+2003-02-05 Primoz Peterlin <primoz.peterlin@biofiz.mf.uni-lj.si>
+
+ * sfd/FreeSans.sfd - added a couple of glyphs in the IPA and
+ African Latin ranges.
+
+2003-01-30 Primoz Peterlin <primoz.peterlin@biofiz.mf.uni-lj.si>
+
+ * sfd/FreeSans.sfd, sfd/FreeSansOblique.sfd, sfd/FreeSansBold.sfd,
+ sfd/FreeSansBoldOblique.sfd, sfd/FreeMonoBold.sfd,
+ sfd/FreeMonoBoldOblique.sfd - Corrected Maltese Hbar (U+0126)
+ and/or hbar (U+0127).
+
+2003-01-28 Primoz Peterlin <primoz.peterlin@biofiz.mf.uni-lj.si>
+
+ * sfd/FreeSerifItalic.sfd - Corrected Maltese hbar (U+0127).
+
+2002-12-18 Primoz Peterlin <primoz.peterlin@biofiz.mf.uni-lj.si>
+
+ * tools/ConvertFont - PfaEdit script for converting SFD files to
+ TrueType fonts.
+
+ * sfd/FreeSans.sfd - Added Tamil and Kannada glyphs from the
+ Akruti Indic fonts.
+
+2002-12-17 Primoz Peterlin <primoz.peterlin@biofiz.mf.uni-lj.si>
+
+ * sfd/FreeSans.sfd - Added Devanagari and Gujarati glyphs from the
+ Akruti Indic fonts.
+
+ * www/index.html - Added information on Rogier van Dalen's tools.
+
+ * AUTHORS - Added M.S. Sridhar.
+
+ * CREDITS - Correct spelling of Culmus project. Added M.S. Sridhar.
+
+2002-12-06 Primoz Peterlin <primoz.peterlin@biofiz.mf.uni-lj.si>
+
+ * sfd/FreeMono.sfd - Added Braille glyphs, courtesy Vyacheslav
+ Dikonov.
+
+ * sfd/FreeSans.sfd - Added Unicode Syriac glyphs, courtesy
+ Vyacheslav Dikonov.
+
+2002-10-11 Primoz Peterlin <primoz.peterlin@biofiz.mf.uni-lj.si>
+
+ * www/index.html - Added information on the availability of the
+ Debian GNU/Linux package.
+
+ * sfd/FreeSerif.sfd, sfd/FreeSans.sfd - added some kern pairs
+ beyond Latin-1 area.
+
+ * sfd/FreeSerif.sfd, sfd/FreeSerifItalic.sfd,
+ sfd/FreeSerifBold.sfd, sfd/FreeSerifBoldItalic.sfd - re-introduced
+ all the emtpy glyph slots (changes from Sep 23 made PfaEdit
+ crash).
+
+2002-09-23 Primoz Peterlin <primoz.peterlin@biofiz.mf.uni-lj.si>
+
+ * sfd/FreeSerif.sfd, sfd/FreeSerifItalic.sfd,
+ sfd/FreeSerifBold.sfd, sfd/FreeSerifBoldItalic.sfd - imported
+ kerning information from the URW++ AFM files
+
+2002-09-11 Primoz Peterlin <primoz.peterlin@biofiz.mf.uni-lj.si>
+
+ * sfd/FreeMono.sfd, sfd/FreeMonoOblique.sfd, sfd/FreeMonoBold.sfd,
+ sfd/FreeMonoOblique.sfd - updated Hebrew parts to comply with
+ Culmus v0.6.
+
+ * sfd/FreeSans.sfd, sfd/FreeSansOblique.sfd, sfd/FreeSansBold.sfd,
+ sfd/FreeSansOblique.sfd - Added Danilo Segan's Serbian Cyrillic
+ glyphs; updated Hebrew parts to comply with Culmus v0.6.
+
+2002-09-09 Primoz Peterlin <primoz.peterlin@biofiz.mf.uni-lj.si>
+
+ * sfd/FreeMono.sfd, sfd/FreeMonoOblique.sfd, sfd/FreeMonoBold.sfd,
+ sfd/FreeMonoOblique.sfd, sfd/FreeSans.sfd,
+ sfd/FreeSansOblique.sfd, sfd/FreeSansBold.sfd,
+ sfd/FreeSansOblique.sfd - Updated Cyrillic part to match
+ Filippov's 1.0.7pre14
+
+ * sfd/FreeSansOblique.sfd - added Sam Stepanyan's Armenian glyphs
+ from FreeSans (skewed for 12 degrees).
+
+2002-09-06 Primoz Peterlin <primoz.peterlin@biofiz.mf.uni-lj.si>
+
+ * sfd/FreeSans.sfd, sfd/FreeSansOblique.sfd,
+ sfd/FreeSansBold.sfd, sfd/FreeSansOblique.sfd - Added Maxim
+ Iorsh's Hebrew characters.
+
+2002-08-29 Primoz Peterlin <primoz.peterlin@biofiz.mf.uni-lj.si>
+
+ * sfd/FreeMono.sfd, sfd/FreeMonoOblique.sfd,
+ sfd/FreeMonoBold.sfd, sfd/FreeMonoOblique.sfd - Added Maxim
+ Iorsh's Hebrew characters.
+
+ * AUTHORS, CREDITS - Added Maxim Iorsh as author.
+
+2002-08-28 Primoz Peterlin <primoz.peterlin@biofiz.mf.uni-lj.si>
+
+ * www/index.html - Added information of Microsoft's withdrawal of
+ freely available Unicode TrueType fonts
+
+ * www/resources.html - Added link to Maxim Iorsh's Culmus project.
+
+2002-07-26 Primoz Peterlin <primoz.peterlin@biofiz.mf.uni-lj.si>
+
+ * sfd/FreeMono.sfd - Added a couple of characters (Arrows area).
+
+2002-06-11 Primoz Peterlin <primoz.peterlin@biofiz.mf.uni-lj.si>
+
+ * sfd/FreeMono.sfd - Applied Michalis Kabrianis's patch concerning
+ perispomeni in Greek politoniko.
+
+2002-05-23 Primoz Peterlin <primoz.peterlin@biofiz.mf.uni-lj.si>
+
+ * sfd/FreeMono.sfd - Applied Michalis Kabrianis's patch concerning
+ psili in Greek politoniko. Also added two working variants of
+ chars in the IPA range.
+
+2002-05-15 Primoz Peterlin <primoz.peterlin@biofiz.mf.uni-lj.si>
+
+ * sfd/FreeSans.sfd, sfd/FreeSansBold.sfd, sfd/FreeSerif.sfd,
+ sfd/FreeSerifBold.sfd - Deleted explicit ".notdef" character with
+ no contours.
+
+2002-05-14 Primoz Peterlin <primoz.peterlin@biofiz.mf.uni-lj.si>
+
+ * sfd/FreeMono.sfd, sfd/FreeMonoOblique.sfd, sfd/FreeMonoBold.sfd,
+ sfd/FreeMonoBoldOblique.sfd, sfd/FreeSans.sfd,
+ sfd/FreeSansOblique.sfd, sfd/FreeSansBold.sfd,
+ sfd/FreeSansBoldOblique.sfd, sfd/FreeSerif.sfd,
+ sfd/FreeSerifItalic.sfd, sfd/FreeSerifBold.sfd,
+ sfd/FreeSerifBoldItalic.sfd - The new version of PfaEdit saves
+ correctly formed Panose and LineGap lines.
+
+ * sfd/FreeSansBoldOblique.sfd - Filled-in the missing TTFWidth and
+ TTFWeight values.
+
+2002-05-09 Primoz Peterlin <primoz.peterlin@biofiz.mf.uni-lj.si>
+
+ * sfd/FreeSans.sfd - Added diacritics to the Spacing Modifier
+ Letters and Combining Diacritical Marks areas. Added composed
+ glyphs to the Latin Extended-B area.
+
+2002-05-07 Primoz Peterlin <primoz.peterlin@biofiz.mf.uni-lj.si>
+
+ * sfd/FreeMono.sfd, sfd/FreeMonoOblique.sfd, sfd/FreeMonoBold.sfd,
+ sfd/FreeMonoBoldOblique.sfd, sfd/FreeSans.sfd,
+ sfd/FreeSansOblique.sfd, sfd/FreeSansBold.sfd,
+ sfd/FreeSansBoldOblique.sfd, sfd/FreeSerif.sfd,
+ sfd/FreeSerifItalic.sfd, sfd/FreeSerifBold.sfd,
+ sfd/FreeSerifBoldItalic.sfd - Updated Panose information with data
+ provided by Josef W. Segur. Updated TTF headers with English and
+ Slovenian text.
+
+2002-04-30 Primoz Peterlin <primoz.peterlin@biofiz.mf.uni-lj.si>
+
+ * sfd/FreeMonoBold.sfd - Working on Greek small letters. Several
+ minor changes (lower carons etc.)
+
+2002-04-29 Primoz Peterlin <primoz.peterlin@biofiz.mf.uni-lj.si>
+
+ * FreeMonoBoldOblique.sfd - Started adding Greek.
+
+ * sfd/FreeMonoBold.sfd - Added glyphs in the Geometrical Shapes
+ and Miscellaneous Symbols area. Harmonizing Greek with Latin. Done
+ with capitals.
+
+ * sfd/FreeMono.sfd - Deleted the explicit .notdef character. Added
+ one glyph to the Geometrical Shapes area, which is now completed;
+ added three glyphs to the Miscellaneous Symbols area. Harmonizing
+ Greek with Latin. Done with the capitals.
+
+2002-04-26 Primoz Peterlin <primoz.peterlin@biofiz.mf.uni-lj.si>
+
+ * sfd/FreeSans.sfd - Adjusted accent positions on several glyphs
+ in the Latin Extended-A area.
+
+2002-04-25 Primoz Peterlin <primoz.peterlin@biofiz.mf.uni-lj.si>
+
+ * sfd/FreeMonoBold.sfd - Box Drawing area completed. Added a
+ couple of glyphs in the Geometrical Shapes area.
+
+ * sfd/FreeMono.sfd - Small corrections in the Box Drawing area.
+
+2002-04-24 Primoz Peterlin <primoz.peterlin@biofiz.mf.uni-lj.si>
+
+ * sfd/FreeMono.sfd - Box Drawing area completed.
+
+2002-04-23 Primoz Peterlin <primoz.peterlin@biofiz.mf.uni-lj.si>
+
+ * tools/WGL4.lst - corrected.
+
+ * sfd/FreeMono.sfd, sfd/FreeMonoBold.sfd - Working on Box Drawing
+ area.
+
+2002-04-22 Primoz Peterlin <primoz.peterlin@biofiz.mf.uni-lj.si>
+
+ * sfd/FreeMono.sfd, sfd/FreeMonoBold.sfd - Working on Latin
+ Extended-B and Greek.
+
+2002-04-19 Primoz Peterlin <primoz.peterlin@biofiz.mf.uni-lj.si>
+
+ * sfd/FreeSerif.sfd - Somewhat cleaner chess figures.
+
+ * tools/MES-2.txt, tools/MES-2.lst - Corrected list (it is not
+ 203C-203E, it is 203C and 203E).
+
+ * sfd/FreeMono.sfd, sfd/FreeMonoOblique.sfd, sfd/FreeMonoBold.sfd,
+ sfd/FreeMonoBoldOblique.sfd, sfd/FreeSans.sfd,
+ sfd/FreeSansOblique.sfd, sfd/FreeSansBold.sfd,
+ sfd/FreeSansBoldOblique.sfd, sfd/FreeSerif.sfd,
+ sfd/FreeSerifItalic.sfd, sfd/FreeSerifBold.sfd,
+ sfd/FreeSerifBoldItalic.sfd - Changed "Family Name" from Free to
+ FreeSerif, FreeSans and FreeMono, as appropriate. Changed Font
+ Modifiers from MonoBold etc. to Bold, Italic, Oblique, BoldOblique
+ and BoldItalic.
+
+2002-04-18 Primoz Peterlin <primoz.peterlin@biofiz.mf.uni-lj.si>
+
+ * sfd/FreeMono.sfd, sfd/FreeMonoOblique.sfd, sfd/FreeMonoBold.sfd,
+ sfd/FreeMonoBoldOblique.sfd - Corrected metrics; now all character
+ widths are set to 600.
+
+2002-04-17 Primoz Peterlin <primoz.peterlin@biofiz.mf.uni-lj.si>
+
+ * sfd/FreeSerif.sfd - Corrected glyphs in the Box Drawing area and
+ Block Elements area, which should extend through the ascender *and
+ descender* height.
+
+ * sfd/FreeMonoBold.sfd - Continued working on harmonizing Greek
+ letters with Latin and Cyrillic.
+
+ * sfd/FreeMonoBold.sfd - Added some box drawing characters.
+
+2002-04-16 Primoz Peterlin <primoz.peterlin@biofiz.mf.uni-lj.si>
+
+ * www/design-notes.html - Updated notes on stroke width for
+ symbols in Free Mono Bold.
+
+ * sfd/FreeMono.sfd - Added a handful of characters in the
+ Miscellaneous Symbols area.
+
+ * sfd/FreeMonoBoldOblique.sfd - Added subscripts, superscripts and
+ vulgar fractions.
+
+ * sfd/FreeMonoBold.sfd - Started harmonizing Greek letters with
+ Latin and Cyrillic.
+
+ * sfd/FreeMonoBold.sfd - Added subscripts, superscripts and vulgar
+ fractions.
+
+2002-04-15 Primoz Peterlin <primoz.peterlin@biofiz.mf.uni-lj.si>
+
+ * www/design-notes.html - Updated notes on super-/subscripts in
+ Free Mono Bold. Separate subsections for Free Mono regular and
+ Free Mono Bold.
+
+2002-04-12 Primoz Peterlin <primoz.peterlin@biofiz.mf.uni-lj.si>
+
+ * sfd/FreeSerif.sfd - Added Ethiopian glyphs, converted from the
+ Metafont sources from TGI, Universität Hamburg (authors Berhanu
+ Beyene, Prof. Dr. Manfred Kudlek, Olaf Kummer, and Jochen
+ Metzinger) using Szabo's TeXtrace and retouched using
+ PfaEdit. Ethiopian metafonts are released under GNU GPL,
+ <http://www.informatik.uni-hamburg.de/TGI/mitarbeiter/wimis/kummer/ethiop_eng.html>.
+
+ * sfd/FreeMonoBold.sfd - Added 40 characters, mostly in the Latin
+ Extended-B and IPA Extensions areas.
+
+2002-04-11 Primoz Peterlin <primoz.peterlin@biofiz.mf.uni-lj.si>
+
+ * sfd/FreeMono.sfd - Added a handful of characters in the Latin
+ Extended-B, IPA Extensions, Currency Symbols and Miscellaneous
+ Symbols areas.
+
+2002-04-09 Primoz Peterlin <primoz.peterlin@biofiz.mf.uni-lj.si>
+
+ * sfd/FreeMono.sfd - Correcting accent positioning in the Extended
+ Greek area; adding a couple of characters here and there. Still 20
+ characters short of MES-2 conformance.
+
+2002-04-08 Primoz Peterlin <primoz.peterlin@biofiz.mf.uni-lj.si>
+
+ * sfd/FreeMono.sfd - Added some characters in the Arrows area;
+ more or less completed Extended Greek area (accents still need to
+ be fine-tuned).
+
+2002-04-05 Primoz Peterlin <primoz.peterlin@biofiz.mf.uni-lj.si>
+
+ * sfd/FreeMono.sfd - Modern non-Russian Cyrilic mostly completed.
+
+ * sfd/FreeMonoOblique.sfd - Synchronized with FreeMono.
+
+ * sfd/FreeSerif.sfd - Added Thomas Ridgeway's Tamil characters
+ (converted from Metafont and edited somehwat).
+
+2002-04-04 Primoz Peterlin <primoz.peterlin@biofiz.mf.uni-lj.si>
+
+ * sfd/FreeMonoOblique.sfd - Armenian letters added.
+
+ * sfd/FreeMonoBold.sfd - Serbian Cyrillic letters dje, tshe, lje
+ and nje corrected.
+
+ * sfd/FreeMono.sfd - Serbian Cyrillic letters dje and tshe
+ corrected. Some other non-Russian Cyrillic letters modified and
+ "welded together".
+
+2002-04-03 Primoz Peterlin <primoz.peterlin@biofiz.mf.uni-lj.si>
+
+ * sfd/FreeMono.sfd - Added more or less complete Armenian
+ area. The glyphs are a tidied-up version based on the Armenian
+ Courier on the <http://www.cilicia.com/armo8.html>. Now we have
+ 1673 characters.
+
+2002-03-28 Primoz Peterlin <primoz.peterlin@biofiz.mf.uni-lj.si>
+
+ * sfd/FreeMono.sfd - Added some mathematical symbols.
+
+2002-03-26 Primoz Peterlin <primoz.peterlin@biofiz.mf.uni-lj.si>
+
+ * sfd/FreeSans.sfd - took H.S. Pannu's Gurmukhi from FreeSerif. It
+ actually fits to FreeSans much better. It seems I'll have to look
+ for another Gurmukhi font with modulated stroke for FreeSerif.
+
+ * sfd/FreeSerifItalic.sfd - replaced existing Hebrew glyphs by
+ those from FreeSerif (slanted for 15.5 degrees).
+
+ * sfd/FreeSerif.sfd - Added dotted Hebrew letters. Changed barred H.
+
+ * sfd/FreeMono.sfd - Completed vulgar fractions; minor changes in
+ Greek; added some mathematical operators.
+
+ * sfd/FreeMonoBold.sfd - added 12 characters to Latin Extended-B
+ and IPA Extensions areas (total 984).
+
+2002-03-25 Primoz Peterlin <primoz.peterlin@biofiz.mf.uni-lj.si>
+
+ * sfd/FreeMonoBold.sfd - started adding Latin Extended-B and IPA
+ Extensions.
+
+ * sfd/FreeMono.sfd - Minor cosmetic changes; cleaning up Greek
+ (removing redundant control points), added some non-European
+ Cyrillic glyphs as a test.
+
+2002-03-22 Primoz Peterlin <primoz.peterlin@biofiz.mf.uni-lj.si>
+
+ * sfd/FreeMono.sfd - Some minor modifications; letters in Latin
+ Extended-B area "welded" together.
+
+2002-03-20 Primoz Peterlin <primoz.peterlin@biofiz.mf.uni-lj.si>
+
+ * www/index.html - finally linked the resources and design notes
+ pages.
+
+ * www/design-notes.html - added scaling information for super- and
+ subscript numerals in FreeMono.
+
+2002-03-19 Primoz Peterlin <primoz.peterlin@biofiz.mf.uni-lj.si>
+
+ * sfd/FreeMono.sfd - the Latin Extended-B and IPA Extension area
+ characters moved from FreeMono and skewed for 12 degrees.
+
+2002-03-18 Primoz Peterlin <primoz.peterlin@biofiz.mf.uni-lj.si>
+
+ * sfd/FreeMono.sfd - added a dozen or two of new characters, in
+ particular in the Latin Extended-B and IPA Extension area.
+
+2002-03-15 Primoz Peterlin <primoz.peterlin@biofiz.mf.uni-lj.si>
+
+ * sfd/FreeMono.sfd - added a dozen of two of new characters, in
+ particular in the IPA Extension area.
+
+ * www/design-notes.html - Corrected data for x-height in FreeMono;
+ information on constructing small caps.
+
+2002-03-14 Primoz Peterlin <primoz.peterlin@biofiz.mf.uni-lj.si>
+
+ * sfd/FreeMono.sfd - added three smiley characters to the
+ Miscallaneous Symbols area.
+
+2002-03-10 Primoz Peterlin <primoz.peterlin@biofiz.mf.uni-lj.si>
+
+ * sfd/FreeSerif.sfd - Anshuman Pandey has only converted Gurmukhi
+ from TrueType to Metafont; the original author of Gurkmukhi font
+ is Hardip Singh Pannu <http://members.aol.com/hspannu/punjabi.html>.
+ Got the permission from him to include the Gurmukhi glyph set.
+
+2002-03-08 Primoz Peterlin <primoz.peterlin@biofiz.mf.uni-lj.si>
+
+ * sfd/FreeSerif.sfd - Added some more glyphs in the Mathematical
+ Symbols area to a total number of 3374.
+
+2002-03-06 Primoz Peterlin <primoz.peterlin@biofiz.mf.uni-lj.si>
+
+ * sfd/FreeSerif.sfd - Added a basic Gurmukhi set.
+
+ * www/design-notes.html - started a page on design notes
+
+ * sfd/FreeMono.sfd - realized that glyphs in the Box Drawing area
+ and Block Elements area should extend through the ascender *and
+ descender* height, and corrected it.
+
+ * sfd/FreeMono.sfd, sfd/FreeMonoOblique.sfd - added some musical
+ glyphs, linking "no-break space" to space, "soft hyphen" to
+ hyphen-minus etc.
+
+2002-03-05 Primoz Peterlin <primoz.peterlin@biofiz.mf.uni-lj.si>
+
+ * tools/WGL4.lst - Added Windows Glyph List 4.0
+
+ * tools/LigatureList.pl - Wrote a Perl script, which lists the
+ GSUB list (ligature list) of a OpenType font.
+
+ * sfd/FreeSerifBold.sfd, sfd/FreeSerifBoldItalic.sfd,
+ sfd/FreeSerifItalic.sfd - auxilliary Hebrew glyphs added. They are
+ too light compared with Latin and will be substituted with better
+ ones.
+
+2002-03-04 Primoz Peterlin <primoz.peterlin@biofiz.mf.uni-lj.si>
+
+ * sfd/FreeSerif.sfd - Added some more glyphs to the Mathematical
+ Operators area (page 0x22).
+
+ * sfd/FreeSerif.sfd - Incomplete and fragmentary support for
+ Devanagari, originating from Harsh Kumar's Shusha fonts was
+ replaced by Frans Velthuis' Devanagari metafont, now maintained by
+ Anshuman Pandey <apandey@u.washington.edu> and available under
+ GPL. Until I figure out how to provide glyph substitution table in
+ OpenType, only the Unicode part is there.
+
+2002-02-28 Primoz Peterlin <primoz.peterlin@biofiz.mf.uni-lj.si>
+
+ * ChangeLog file created
+
+ * sfd/FreeSerif.sfd - Added some Telugu glyphs to page 0x0C,
+ courtesy Prasad A. Chodavarapu <http://chaitanya.bhaavana.net/fonts/>
+
+ * sfd/FreeSerif.sfd - Added some glyphs to the Miscellaneous
+ Symbols page (0x26).
+
+2002-02-26 Primoz Peterlin <primoz.peterlin@biofiz.mf.uni-lj.si>
+
+ * mailing lists freefont-announce and freefont-bugs created
+
+2002-02-25 Primoz Peterlin <primoz.peterlin@biofiz.mf.uni-lj.si>
+
+ * sfd/FreeSerif.sfd - Added a couple of glyphs in Mathematics
+ Operators area.
+
+ * sfd/FreeMono.sfd
+ - Added some more glyphs, in particular in the Mathematical
+ Operators section.
+ - Changed FamilyName to Free, FontName to FreeMono, and Full name
+ to "Free Monospaced".
+
+2002-02-20 Primoz Peterlin <primoz.peterlin@biofiz.mf.uni-lj.si>
+
+ * sfd/ directory added containing FreeSerif, FreeSans and FreeMono
+ families.
+
+ * tools/ directory added containing lists with characters required
+ for MES (Multilinguag European Subset) compliance.
+
+ * tools/mes-list-expand.pl created - a Perl script for expanding MES
+ ranges into simple one-char-per-line format
+
+ * tools/CheckConformance.pl created - a Perl script for checking
+ conformance of a font file with a given coded character set
+
+ * homepage <http://www.freesoftware.fsf.org/freefont/> created
+
+2002-02-19 Primoz Peterlin <primoz.peterlin@biofiz.mf.uni-lj.si>
+
+ * freefont (Free UCS Scalable Fonts) project approved on
+ savannah.gnu.org: <http://savannah.gnu.org/projects/freefont/>
diff --git a/h-source/admin/External/Fonts/FreeFont/FreeMono.ttf b/h-source/admin/External/Fonts/FreeFont/FreeMono.ttf
new file mode 100644
index 0000000..ba90adb
--- /dev/null
+++ b/h-source/admin/External/Fonts/FreeFont/FreeMono.ttf
Binary files differ
diff --git a/h-source/admin/External/Fonts/FreeFont/INSTALL b/h-source/admin/External/Fonts/FreeFont/INSTALL
new file mode 100644
index 0000000..fbbbe80
--- /dev/null
+++ b/h-source/admin/External/Fonts/FreeFont/INSTALL
@@ -0,0 +1,86 @@
+ Installing GNU FreeFont
+ =======================
+
+GNU FreeFont can be used in any modern operating system.
+
+This document explains how to install FreeFont on some common systems.
+
+UNIX/GNU/Linux/BSD Systems
+--------------------------
+
+FreeFont works with any system using the free font rasterizer FreeType
+<http://www.freetype.org/>.
+
+* Debian GNU/Linux
+
+Users of Debian GNU/Linux system will probably want to use the Debian package,
+available from the Debian site,
+
+ <http://packages.debian.org/unstable/x11/ttf-freefont.html>,
+
+or any of its mirrors.
+
+Install them by issuing the command
+ apt-get install ttf-freefont
+
+
+* KDE local installation
+
+Users of KDE can install .ttf files on a per-user basis using the KDE
+Control Center module "kcmfontinst", which may appear in the menu as
+
+ Settings -> System Administration -> Font Installer
+
+This is especially helpful for developers and testers.
+
+
+* Generic X-windows
+
+ 1) Fetch the freefont-ttf.tar.gz package with Free UCS outline fonts
+ in the TrueType format.
+
+ 2) Unpack TrueType fonts into a suitable directory,
+ e.g. /usr/local/share/fonts/default/TrueType/
+
+ 3) If you have chosen any other directory, make sure the directory you
+ used to install the fonts is listed in the path searched by the X
+ Font Server by editing the config file in /etc/X11/.
+
+ In some systems, you list the directory in the item "catalogue="
+ in the file /etc/X11/fs/config.
+
+ 4) Run ttmkfdir in the directory where you unpacked the fonts.
+
+
+Windows 95/98/NT/2000/XP; Vista
+-------------------------------
+
+Note that in at least Vista, XP and 2000, the OpenType versions perform much
+better than, and are recommended over, the TrueType ones.
+
+* Vista:
+ 1) From the Start menu, open Control Panels
+ 2) Drag-n-drop font files onto Fonts control panel
+ You may get a dialog saying
+ "Windows needs your permission to continue"
+ a) Click Continue
+
+* 95/98/NT:
+ The font installation is similar to Vista.
+
+ In order to use OpenType, users of Windows 95, 98 and NT 4.0 can
+ install Adobe's 'Type Manager Light'. It is available for download
+ without cost from Adobe's web site.
+
+ Otherwise, use the TrueType versions.
+
+Mac OS X
+--------
+
+Installing on Mac OS X consists of moving the .ttf files to either
+ /Library/Fonts/ or ~/Library/Fonts/
+depending on whether they should be available to all users on your system
+or just to yourself.
+
+--------------------------------------------------------------------------
+$Id: INSTALL,v 1.7 2008/12/26 12:33:31 Stevan_White Exp $
diff --git a/h-source/admin/External/Fonts/FreeFont/README b/h-source/admin/External/Fonts/FreeFont/README
new file mode 100644
index 0000000..60e67f2
--- /dev/null
+++ b/h-source/admin/External/Fonts/FreeFont/README
@@ -0,0 +1,108 @@
+-*-text-*-
+ GNU FreeFont
+
+The GNU FreeFont project aims to provide a useful set of free scalable
+(i.e., OpenType) fonts covering as much as possible of the ISO 10646/Unicode
+UCS (Universal Character Set).
+
+Statement of Purpose
+--------------------
+
+The practical reason for putting glyphs together in a single font face is
+to conveniently mix symbols and characters from different writing systems,
+without having to switch fonts.
+
+Coverage
+--------
+
+FreeFont covers the following character sets
+
+* ISO 8859 parts 1-15
+* CEN MES-3 European Unicode Subset
+ http://www.evertype.com/standards/iso10646/pdf/cwa13873.pdf
+* IBM/Microsoft code pages 437, 850, 852, 1250, 1252 and more
+* Microsoft/Adobe Windows Glyph List 4 (WGL4)
+ http://www.microsoft.com/typography/otspec/WGL4.htm
+* KOI8-R and KOI8-RU
+* DEC VT100 graphics symbols
+* International Phonetic Alphabet
+* Arabic, Hebrew, Armenian, Georgian, Ethiopian and Thai alphabets,
+ including Arabic presentation forms A/B
+* mathematical symbols, including the whole TeX repertoire of symbols
+* APL symbols
+ etc.
+
+Editing
+-------
+
+The free outline font editor, George Williams's FontForge
+<http://fontforge.sourceforge.net/> is used for editing the fonts.
+
+Design Issues
+-------------
+
+Which font shapes should be made? Historical style terms like Renaissance
+or Baroque letterforms cannot be applied beyond Latin/Cyrillic/Greek
+scripts to any greater extent than Kufi or Nashki can be applied beyond
+Arabic script; "italic" is really only meaningful for Latin letters.
+
+However, most modern writing systems have typographic formulations for
+contrasting uniform and modulated character stroke widths, and have some
+history with "oblique", faces. Since the advent of the typewriter, most
+have developed a typographic style with uniform-width characters.
+
+Accordingly, the FreeFont family has one monospaced - FreeMono - and two
+proportional faces (one with uniform stroke - FreeSans - and one with
+modulated stroke - FreeSerif).
+
+To make text from different writing systems look good side-by-side, each
+FreeFont face is meant to contain characters of similar style and weight.
+
+Licensing
+---------
+
+Free UCS scalable fonts is free software; you can redistribute it and/or
+modify it under the terms of the GNU General Public License as published
+by the Free Software Foundation; either version 2 of the License, or
+(at your option) any later version.
+
+The fonts are distributed in the hope that they will be useful, but
+WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License along
+with this program; if not, write to the Free Software Foundation, Inc.,
+51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+
+As a special exception, if you create a document which uses this font, and
+embed this font or unaltered portions of this font into the document, this
+font does not by itself cause the resulting document to be covered by the
+GNU General Public License. This exception does not however invalidate any
+other reasons why the document might be covered by the GNU General Public
+License. If you modify this font, you may extend this exception to your
+version of the font, but you are not obligated to do so. If you do not
+wish to do so, delete this exception statement from your version.
+
+
+Files and their suffixes
+------------------------
+
+The files with .sfd (Spline Font Database) are in FontForge's native format.
+Please use these if you plan to modify the font files.
+
+TrueType fonts for immediate consumption are the files with the .ttf
+(TrueType Font) suffix. These are ready to use in Xwindows based
+systems using FreeType, on Mac OS, and on older Windows systems.
+
+OpenType fonts (with suffix .otf) are for use in Windows Vista.
+Note that although they can be installed on Linux, but many applications
+in Linux still don't support them.
+
+
+--------------------------------------------------------------------------
+Primoz Peterlin, <primoz.peterlin@biofiz.mf.uni-lj.si>
+Steve White <stevan.white@googlemail.com>
+
+Free UCS scalable fonts: http://savannah.gnu.org/projects/freefont/
+$Id: README,v 1.6 2008/12/25 12:51:41 Stevan_White Exp $
diff --git a/h-source/admin/Library/Array/Validate/Base.php b/h-source/admin/Library/Array/Validate/Base.php
new file mode 100644
index 0000000..3366097
--- /dev/null
+++ b/h-source/admin/Library/Array/Validate/Base.php
@@ -0,0 +1,241 @@
+<?php
+
+// All EasyGiant code is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
+// See COPYRIGHT.txt and LICENSE.txt.
+
+if (!defined('EG')) die('Direct access not allowed!');
+
+//class to validate associative arrays
+class Array_Validate_Base
+{
+
+ public $errorString = null; //string containing the list fields not found
+ public $errorsNumb = null; //numbers of errors
+
+ protected $_lang; //language of notices
+ protected $_resultString; //reference to the class arraycheckStrings containing all the result strings
+
+
+ public function __construct($lang = 'Eng')
+ {
+ $this->_lang = $lang;
+ $stringClass = 'Lang_'.$this->_lang.'_ValCondStrings';
+ if (!class_exists($stringClass))
+ {
+ $stringClass = 'Lang_Eng_ValCondStrings';
+ }
+ $this->_resultString = new $stringClass();
+ }
+
+
+ //verify that the values of the associative array ($associativeArray) indicated by the key string ($keyString) are not '' and are equal (===) to each other
+ public function checkEqual($associativeArray,$keyString)
+ {
+ $errorString = null;
+ $keyArray = explode(',',$keyString);
+ $numb = 0;
+
+ //set the first value to null
+ $firstValue = null;
+
+ foreach ($keyArray as $key)
+ {
+ if (array_key_exists($key,$associativeArray))
+ {
+ $firstValue = $associativeArray[$key];
+ break;
+ }
+ }
+
+ if (isset($firstValue))
+ {
+ for ($i = 0; $i < count($keyArray); $i++)
+ {
+ if (array_key_exists($keyArray[$i],$associativeArray))
+ {
+ if (strcmp($associativeArray[$keyArray[$i]],$firstValue) !== 0)
+ {
+ $numb++;
+ $errorString = $this->_resultString->getNotEqualResultString($keyString);
+ }
+ }
+ }
+ }
+
+ $this->errorString = $errorString;
+ return $numb === 0 ? true : false;
+ }
+
+
+ //verify that the values of the associative array ($associativeArray) indicated by the key string ($keyString) are alphabetic values
+ //$strength: hard or soft. If $strength is set equal to soft than non check is made upon array values equalt to '' or null
+ public function checkAlpha($associativeArray,$keyString,$strength = 'strong')
+ {
+ return $this->checkGeneric($associativeArray,$keyString,$strength,'ctype_alpha','getNotAlphabeticResultString');
+ }
+
+
+ //verify that the values of the associative array ($associativeArray) indicated by the key string ($keyString) are alphanumeric values
+ //$strength: hard or soft. If $strength is set equal to soft than non check is made upon array values equalt to '' or null
+ public function checkAlphaNum($associativeArray,$keyString,$strength = 'strong')
+ {
+ return $this->checkGeneric($associativeArray,$keyString,$strength,'ctype_alnum','getNotAlphanumericResultString');
+ }
+
+
+ //verify that the values of the associative array ($associativeArray) indicated by the key string ($keyString) are decimal digits
+ //$strength: hard or soft. If $strength is set equal to soft than non check is made upon array values equalt to '' or null
+ public function checkDigit($associativeArray,$keyString,$strength = 'strong')
+ {
+ return $this->checkGeneric($associativeArray,$keyString,$strength,'ctype_digit','getNotDecimalDigitResultString');
+ }
+
+
+ //verify that the values of the associative array ($associativeArray) indicated by the key string ($keyString) have mail format
+ //$strength: hard or soft. If $strength is set equal to soft than non check is made upon array values equalt to '' or null
+ public function checkMail($associativeArray,$keyString,$strength = 'strong')
+ {
+ return $this->checkGeneric($associativeArray,$keyString,$strength,'checkMail','getNotMailFormatResultString');
+ }
+
+
+ //verify that the values of the associative array ($associativeArray) indicated by the key string ($keyString) is a number (integer or number). It makes use of the is_numeric PHP built-in function
+ //$strength: hard or soft. If $strength is set equal to soft than non check is made upon array values equalt to '' or null
+ public function checkNumeric($associativeArray,$keyString,$strength = 'strong')
+ {
+ return $this->checkGeneric($associativeArray,$keyString,$strength,'is_numeric','getNotNumericResultString');
+ }
+
+
+ //apply a generic check function
+ //$strength: hard or soft. If $strength is set equal to soft than non check is made upon array values equalt to '' or null
+ //$func: the function to apply
+ //$strFunc: the method of the object $this->_resultString to apply
+ private function checkGeneric($associativeArray,$keyString,$strength,$func,$strFunc)
+ {
+
+ $errorString = null;
+ $keyArray = explode(',',$keyString);
+ $numb = 0;
+
+ for ($i = 0; $i < count($keyArray); $i++)
+ {
+ if (array_key_exists($keyArray[$i],$associativeArray))
+ {
+ if (strcmp($associativeArray[$keyArray[$i]],'') !== 0 or $strength === 'strong')
+ {
+ if (!call_user_func($func,$associativeArray[$keyArray[$i]]))
+ {
+ $numb++;
+ $errorString .= call_user_func(array($this->_resultString,$strFunc),$keyArray[$i]);
+ }
+ }
+ }
+ }
+
+ $this->errorString = $errorString;
+ return $numb === 0 ? true : false;
+
+ }
+
+
+ //verify that the values of the associative array ($associativeArray) indicated by the key string ($keyString) have a number of chars smaller than $maxLenght
+ public function checkLength($associativeArray,$keyString,$maxLength = 10)
+ {
+ $errorString = null;
+ $keyArray = explode(',',$keyString);
+ $numb = 0;
+ for ($i = 0; $i < count($keyArray); $i++)
+ {
+ if (array_key_exists($keyArray[$i],$associativeArray))
+ {
+ if (eg_strlen($associativeArray[$keyArray[$i]]) > $maxLength)
+ {
+ $numb++;
+ $errorString .= $this->_resultString->getLengthExceedsResultString($keyArray[$i],$maxLength);
+ }
+ }
+ }
+ $this->errorString = $errorString;
+ return $numb === 0 ? true : false;
+
+ }
+
+ //verify that the values of the associative array ($associativeArray) indicated by the key string ($keyString) are different from the values indicated in the argument $strings (a comma-separated list of words)
+ public function checkIsNotStrings($associativeArray,$keyString,$strings = '')
+ {
+ $errorString = null;
+ $keyArray = explode(',',$keyString);
+ $numb = 0;
+ //get the array from the comma-separated list of strings
+ $stringsArray = explode(',',$strings);
+ for ($i = 0; $i < count($keyArray); $i++)
+ {
+ if (array_key_exists($keyArray[$i],$associativeArray))
+ {
+ foreach ($stringsArray as $string)
+ {
+ if (strcmp($associativeArray[$keyArray[$i]],$string) === 0)
+ {
+ $numb++;
+ $errorString .= $this->_resultString->getIsForbiddenStringResultString($keyArray[$i],$strings);
+ }
+ }
+ }
+ }
+ $this->errorString = $errorString;
+ return $numb === 0 ? true : false;
+ }
+
+ //verify that the values of the associative array ($associativeArray) indicated by the key string ($keyString) are one of the values indicated in the argument $strings (a comma-separated list of words)
+ //$strength: hard or soft. If $strength is set equal to soft than non check is made upon array values equalt to '' or null
+ public function checkIsStrings($associativeArray,$keyString,$strings = '',$strength = 'strong')
+ {
+ $errorString = null;
+ $keyArray = explode(',',$keyString);
+ $numb = 0;
+ //get the array from the comma-separated list of strings
+ $stringsArray = explode(',',$strings);
+ for ($i = 0; $i < count($keyArray); $i++)
+ {
+ if (array_key_exists($keyArray[$i],$associativeArray))
+ {
+ if (strcmp($associativeArray[$keyArray[$i]],'') !== 0 or $strength === 'strong')
+ {
+ if (!in_array($associativeArray[$keyArray[$i]],$stringsArray))
+ {
+ $numb++;
+ $errorString .= $this->_resultString->getIsNotStringResultString($keyArray[$i],$strings);
+ }
+ }
+ }
+ }
+ $this->errorString = $errorString;
+ return $numb === 0 ? true : false;
+ }
+
+ //verify that the values of the associative array ($associativeArray) indicated by the key string ($keyString) match the regular expression $regExp
+ public function checkMatch($associativeArray,$keyString,$regExp = '/./',$strength = 'strong')
+ {
+ $errorString = null;
+ $keyArray = explode(',',$keyString);
+ $numb = 0;
+ for ($i = 0; $i < count($keyArray); $i++)
+ {
+ if (array_key_exists($keyArray[$i],$associativeArray))
+ {
+ if (strcmp($associativeArray[$keyArray[$i]],'') !== 0 or $strength === 'strong')
+ {
+ if (!preg_match($regExp,$associativeArray[$keyArray[$i]]))
+ {
+ $numb++;
+ $errorString .= $this->_resultString->getDoesntMatchResultString($keyArray[$i],$regExp);
+ }
+ }
+ }
+ }
+ $this->errorString = $errorString;
+ return $numb === 0 ? true : false;
+ }
+
+} \ No newline at end of file
diff --git a/h-source/admin/Library/Array/Validate/Soft.php b/h-source/admin/Library/Array/Validate/Soft.php
new file mode 100644
index 0000000..95e208d
--- /dev/null
+++ b/h-source/admin/Library/Array/Validate/Soft.php
@@ -0,0 +1,85 @@
+<?php
+
+// All EasyGiant code is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
+// See COPYRIGHT.txt and LICENSE.txt.
+
+if (!defined('EG')) die('Direct access not allowed!');
+
+//class to validate associative arrays
+class Array_Validate_Soft extends Array_Validate_Base
+{
+
+ public function __construct($lang = 'Eng')
+ {
+ parent::__construct($lang);
+ }
+
+
+ //verify that the values of the associative array ($associativeArray) indicated by the key string ($keyString) are not '' and are equal (===) to each other
+ public function checkEqual($associativeArray,$keyString)
+ {
+ return parent::checkEqual($associativeArray,$keyString);
+ }
+
+ //verify that the values of the associative array ($associativeArray) indicated by the key string ($keyString) are alphabetic values
+ public function checkAlpha($associativeArray,$keyString)
+ {
+ return parent::checkAlpha($associativeArray,$keyString,'soft');
+ }
+
+
+ //verify that the values of the associative array ($associativeArray) indicated by the key string ($keyString) are alphanumeric values
+ public function checkAlphaNum($associativeArray,$keyString)
+ {
+ return parent::checkAlphaNum($associativeArray,$keyString,'soft');
+ }
+
+
+ //verify that the values of the associative array ($associativeArray) indicated by the key string ($keyString) are decimal digits
+ public function checkDigit($associativeArray,$keyString)
+ {
+ return parent::checkDigit($associativeArray,$keyString,'soft');
+ }
+
+
+ //verify that the values of the associative array ($associativeArray) indicated by the key string ($keyString) have mail format
+ public function checkMail($associativeArray,$keyString)
+ {
+ return parent::checkMail($associativeArray,$keyString,'soft');
+ }
+
+
+ //verify that the values of the associative array ($associativeArray) indicated by the key string ($keyString) is a number (integer or number). It makes use of the is_numeric PHP built-in function
+ public function checkNumeric($associativeArray,$keyString)
+ {
+ return parent::checkNumeric($associativeArray,$keyString,'soft');
+ }
+
+
+ //verify that the values of the associative array ($associativeArray) indicated by the key string ($keyString) have a number of chars smaller than $maxLenght
+ public function checkLength($associativeArray,$keyString,$maxLength = 10)
+ {
+ return parent::checkLength($associativeArray,$keyString,$maxLength);
+ }
+
+
+ //verify that the values of the associative array ($associativeArray) indicated by the key string ($keyString) are different from the values indicated in the argument $strings (a comma-separated list of words)
+ public function checkIsNotStrings($associativeArray,$keyString,$strings = '')
+ {
+ return parent::checkIsNotStrings($associativeArray,$keyString,$strings);
+ }
+
+
+ //verify that the values of the associative array ($associativeArray) indicated by the key string ($keyString) are one of the values indicated in the argument $strings (a comma-separated list of words)
+ public function checkIsStrings($associativeArray,$keyString,$strings = '')
+ {
+ return parent::checkIsStrings($associativeArray,$keyString,$strings,'soft');
+ }
+
+ //verify that the values of the associative array ($associativeArray) indicated by the key string ($keyString) match the regular expression $regExp
+ public function checkMatch($associativeArray,$keyString,$regExp = '/./')
+ {
+ return parent::checkMatch($associativeArray,$keyString,$regExp,'soft');
+ }
+
+} \ No newline at end of file
diff --git a/h-source/admin/Library/Array/Validate/Strong.php b/h-source/admin/Library/Array/Validate/Strong.php
new file mode 100644
index 0000000..6494483
--- /dev/null
+++ b/h-source/admin/Library/Array/Validate/Strong.php
@@ -0,0 +1,180 @@
+<?php
+
+// All EasyGiant code is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
+// See COPYRIGHT.txt and LICENSE.txt.
+
+if (!defined('EG')) die('Direct access not allowed!');
+
+//class to manage arrays
+class Array_Validate_Strong extends Array_Validate_Base
+{
+
+ public function __construct($lang = 'Eng')
+ {
+ parent::__construct($lang);
+ }
+
+
+ public function checkNotEmpty($associativeArray,$keyString)
+ {
+ $errorString = null;
+ $keyArray = explode(',',$keyString);
+ $numb = 0;
+ for ($i = 0; $i < count($keyArray); $i++)
+ {
+ if (array_key_exists($keyArray[$i],$associativeArray))
+ {
+ if (strcmp(trim($associativeArray[$keyArray[$i]]),'') === 0)
+ {
+ $errorString .= $this->_resultString->getNotDefinedResultString($keyArray[$i]);
+ $numb++;
+ }
+ }
+ else
+ {
+ $errorString .= $this->_resultString->getNotDefinedResultString($keyArray[$i]);
+ $numb++;
+ }
+ }
+ $this->errorString = $errorString;
+ $this->errorNumb = $numb;
+ return $numb === 0 ? true : false;
+ }
+
+ //verify that the values of the associative array ($associativeArray) indicated by the key string ($keyString) are not '' and are equal (===) to each other
+ public function checkEqual($associativeArray,$keyString)
+ {
+ if ($this->checkNotEmpty($associativeArray,$keyString))
+ {
+
+ return parent::checkEqual($associativeArray,$keyString);
+
+ } else {
+ return false;
+ }
+ }
+
+ //verify that the values of the associative array ($associativeArray) indicated by the key string ($keyString) are alphabetic values
+ public function checkAlpha($associativeArray,$keyString)
+ {
+ if ($this->checkNotEmpty($associativeArray,$keyString))
+ {
+
+ return parent::checkAlpha($associativeArray,$keyString,'strong');
+
+ } else {
+ return false;
+ }
+ }
+
+
+ //verify that the values of the associative array ($associativeArray) indicated by the key string ($keyString) are alphanumeric values
+ public function checkAlphaNum($associativeArray,$keyString)
+ {
+ if ($this->checkNotEmpty($associativeArray,$keyString))
+ {
+
+ return parent::checkAlphaNum($associativeArray,$keyString,'strong');
+
+ } else {
+ return false;
+ }
+ }
+
+
+ //verify that the values of the associative array ($associativeArray) indicated by the key string ($keyString) are decimal digits
+ public function checkDigit($associativeArray,$keyString)
+ {
+ if ($this->checkNotEmpty($associativeArray,$keyString))
+ {
+
+ return parent::checkDigit($associativeArray,$keyString,'strong');
+
+ } else {
+ return false;
+ }
+ }
+
+
+ //verify that the values of the associative array ($associativeArray) indicated by the key string ($keyString) have mail format
+ public function checkMail($associativeArray,$keyString)
+ {
+ if ($this->checkNotEmpty($associativeArray,$keyString))
+ {
+
+ return parent::checkMail($associativeArray,$keyString,'strong');
+
+ } else {
+ return false;
+ }
+ }
+
+
+ //verify that the values of the associative array ($associativeArray) indicated by the key string ($keyString) is a number (integer or number). It makes use of the is_numeric PHP built-in function
+ public function checkNumeric($associativeArray,$keyString)
+ {
+ if ($this->checkNotEmpty($associativeArray,$keyString))
+ {
+
+ return parent::checkNumeric($associativeArray,$keyString,'strong');
+
+ } else {
+ return false;
+ }
+ }
+
+
+ //verify that the values of the associative array ($associativeArray) indicated by the key string ($keyString) have a number of chars smaller than $maxLenght
+ public function checkLength($associativeArray,$keyString,$maxLength = 10)
+ {
+ if ($this->checkNotEmpty($associativeArray,$keyString))
+ {
+
+ return parent::checkLength($associativeArray,$keyString,$maxLength);
+
+ } else {
+ return false;
+ }
+ }
+
+
+ //verify that the values of the associative array ($associativeArray) indicated by the key string ($keyString) are different from the values indicated in the argument $strings (a comma-separated list of words)
+ public function checkIsNotStrings($associativeArray,$keyString,$strings = '')
+ {
+ if ($this->checkNotEmpty($associativeArray,$keyString))
+ {
+
+ return parent::checkIsNotStrings($associativeArray,$keyString,$strings);
+
+ } else {
+ return false;
+ }
+ }
+
+
+ //verify that the values of the associative array ($associativeArray) indicated by the key string ($keyString) are one of the values indicated in the argument $strings (a comma-separated list of words)
+ public function checkIsStrings($associativeArray,$keyString,$strings = '')
+ {
+ if ($this->checkNotEmpty($associativeArray,$keyString))
+ {
+
+ return parent::checkIsStrings($associativeArray,$keyString,$strings,'strong');
+
+ } else {
+ return false;
+ }
+ }
+
+ //verify that the values of the associative array ($associativeArray) indicated by the key string ($keyString) match the regular expression $regExp
+ public function checkMatch($associativeArray,$keyString,$regExp = '/./')
+ {
+ if ($this->checkNotEmpty($associativeArray,$keyString))
+ {
+
+ return parent::checkMatch($associativeArray,$keyString,$regExp,'strong');
+
+ } else {
+ return false;
+ }
+ }
+} \ No newline at end of file
diff --git a/h-source/admin/Library/Array/Validate/index.html b/h-source/admin/Library/Array/Validate/index.html
new file mode 100644
index 0000000..8d1c8b6
--- /dev/null
+++ b/h-source/admin/Library/Array/Validate/index.html
@@ -0,0 +1 @@
+
diff --git a/h-source/admin/Library/Array/index.html b/h-source/admin/Library/Array/index.html
new file mode 100644
index 0000000..8d1c8b6
--- /dev/null
+++ b/h-source/admin/Library/Array/index.html
@@ -0,0 +1 @@
+
diff --git a/h-source/admin/Library/ArrayExt.php b/h-source/admin/Library/ArrayExt.php
new file mode 100755
index 0000000..93eca91
--- /dev/null
+++ b/h-source/admin/Library/ArrayExt.php
@@ -0,0 +1,63 @@
+<?php
+
+// All EasyGiant code is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
+// See COPYRIGHT.txt and LICENSE.txt.
+
+if (!defined('EG')) die('Direct access not allowed!');
+
+//class to manage arrays
+class ArrayExt {
+
+ public $errorString = null; //string containing the list fields not found
+ public $errorsNumb = null; //numbers of errors
+
+ //get the subset of the associative array $associativeArray defined by the keys in the string $keyString (keys separated by comma)
+ public function subset($associativeArray,$keyString,$func = 'none') {
+ if (!in_array($func,explode(',',Params::$allowedSanitizeFunc))) {
+ throw new Exception('"'.$func. '" argument not allowed in '.__METHOD__.' method');
+ }
+ $tempArray = array();
+ if (strcmp($keyString,'') !== 0) {
+ $keyArray=explode(',',$keyString);
+ for ($i = 0; $i < count($keyArray); $i++)
+ {
+ $temp = array();
+ //extract the function after the colon
+ if (strstr($keyArray[$i],':')) {
+ $temp = explode(':',$keyArray[$i]);
+ } else {
+ $temp[0] = $keyArray[$i];
+ $temp[1] = 'none';
+ }
+ //exception
+ if (!in_array($temp[1],explode(',',Params::$allowedSanitizeFunc))) {
+ throw new Exception('"'.$temp[1]. '" function not allowed');
+ }
+ if (array_key_exists($temp[0],$associativeArray)) {
+ $tempArray[$temp[0]] = call_user_func($temp[1],$associativeArray[$temp[0]]);
+ } else {
+ $tempArray[$temp[0]] = '';
+ }
+ }
+ }
+ return call_user_func($func.'Deep',$tempArray); //clean the array values
+ }
+
+ //exctract the complementary subset from an associative array ($associativeArray) of the subset identified by the keys $keyString
+ public function subsetComplementary($associativeArray,$keyString,$func = 'none') {
+ if (!in_array($func,explode(',',Params::$allowedSanitizeFunc))) {
+ throw new Exception('"'.$func. '" argument not allowed in '.__METHOD__.' method');
+ }
+ $keyArray=explode(',',$keyString);
+ $complementaryKeyArray = array();
+ $keys = array_keys($associativeArray);
+ foreach ($keys as $key) {
+ if (!in_array($key,$keyArray)) {
+ $complementaryKeyArray[] = $key;
+ }
+ }
+ $complementaryKeyString = implode(',',$complementaryKeyArray);
+ return $this->subset($associativeArray,$complementaryKeyString,$func);
+ }
+
+}
diff --git a/h-source/admin/Library/Bootstrap.php b/h-source/admin/Library/Bootstrap.php
new file mode 100755
index 0000000..796b22f
--- /dev/null
+++ b/h-source/admin/Library/Bootstrap.php
@@ -0,0 +1,14 @@
+<?php
+
+// All EasyGiant code is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
+// See COPYRIGHT.txt and LICENSE.txt.
+
+if (!defined('EG')) die('Direct access not allowed!');
+
+require_once (ROOT . DS . 'Config' . DS . 'Reporting.php');
+require_once (ROOT . DS . 'Config' . DS . 'Restricted.php');
+require_once (ROOT . DS . 'Config' . DS . 'Autoload.php');
+require_once (ROOT . DS . 'Library' . DS . 'Functions.php');
+require_once (ROOT . DS . 'Library' . DS . 'Strings' . DS . 'Functions.php');
+require_once (ROOT . DS . 'Library' . DS . 'ErrorReporting.php');
+require_once (ROOT . DS . 'Library' . DS . 'Call.php');
diff --git a/h-source/admin/Library/BoxParser.php b/h-source/admin/Library/BoxParser.php
new file mode 100644
index 0000000..90d2426
--- /dev/null
+++ b/h-source/admin/Library/BoxParser.php
@@ -0,0 +1,69 @@
+<?php
+
+// All EasyGiant code is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
+// See COPYRIGHT.txt and LICENSE.txt.
+
+if (!defined('EG')) die('Direct access not allowed!');
+
+//class to parse an XML text in order to create the modules corresponding to the elements of the XML text.
+//the <type>module name</type> tag defines the name of the object that has to be instantiate and saved in the
+//$modules property (that is an array referencing different module objects) array(moduleObj1,moduleObj2, ...)
+//if the module class corresponding ot the <type>module name</type> tag does not exists, than no module is created and the next <type>module name</type> is checked
+class BoxParser {
+
+ public $modules = array(); //array referencing different module classes --> array(moduleObj1,moduleObj2, ...) See files inside the Application/Modules folder
+
+ //$simpleXMLText: it has to be an XML text
+ //$type; it can be string or file.
+ public function __construct($simpleXMLText, $type = 'string')
+ {
+ if ($type === 'string')
+ {
+ if (@simplexml_load_string($simpleXMLText))
+ {
+ $simpleXmlObj = simplexml_load_string($simpleXMLText);
+ $this->populate($simpleXmlObj);
+ }
+ }
+ else if ($type === 'file')
+ {
+ if (@simplexml_load_file($simpleXMLText))
+ {
+ $simpleXmlObj = simplexml_load_file($simpleXMLText);
+ $this->populate($simpleXmlObj);
+ }
+ }
+ }
+
+ //inistantiate the module objects and save them in the $this->modules property array
+ private function populate($simpleXmlObj)
+ {
+ foreach ($simpleXmlObj as $mod)
+ {
+ $className = 'Mod'.ucwords((string)$mod->type);
+ if (class_exists($className))
+ {
+ if (file_exists(ROOT . DS . APPLICATION_PATH . DS . 'Modules' . DS . $className . '.php'))
+ {
+ $newModule = new $className($mod);
+ if ($newModule instanceof ModAbstract)
+ {
+ $this->modules[] = $newModule;
+ }
+ }
+ }
+ }
+ }
+
+ //create the HTML of the modules
+ public function render()
+ {
+ $HTML = null;
+ foreach ($this->modules as $module)
+ {
+ $HTML .= $module->render();
+ }
+ return $HTML;
+ }
+
+} \ No newline at end of file
diff --git a/h-source/admin/Library/Call.php b/h-source/admin/Library/Call.php
new file mode 100755
index 0000000..d80f1d4
--- /dev/null
+++ b/h-source/admin/Library/Call.php
@@ -0,0 +1,321 @@
+<?php
+
+// All EasyGiant code is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
+// See COPYRIGHT.txt and LICENSE.txt.
+
+if (!defined('EG')) die('Direct access not allowed!');
+
+
+/* SANITIZE SUPERGLOBAL ARRAYS */
+function sanitizeSuperGlobal()
+{
+ $_GET = stripslashesDeep($_GET);
+
+ $_POST = stripslashesDeep($_POST);
+
+ $_COOKIE = stripslashesDeep($_COOKIE);
+
+ $_SERVER = stripslashesDeep($_SERVER);
+}
+
+
+
+function checkPostLength()
+{
+ if (MAX_POST_LENGTH !== 0)
+ {
+ foreach ($_POST as $key => $value)
+ {
+ if (strlen($value) > MAX_POST_LENGTH) die('the length of some of the $_POST values is too large');
+ }
+ }
+}
+
+function checkRequestUriLength()
+{
+ if (MAX_REQUEST_URI_LENGTH !== 0)
+ {
+ if (strlen($_SERVER['REQUEST_URI']) > MAX_REQUEST_URI_LENGTH) die('the length of the REQUEST_URI is too large');
+ }
+}
+
+function checkRegisterGlobals()
+{
+ if (ini_get('register_globals')) die('register globals is on: easyGiant works only with register globals off');
+}
+
+function callHook()
+{
+
+ if (MOD_REWRITE_MODULE === true)
+ {
+ $url = isset($_GET['url']) ? $_GET['url'] : DEFAULT_CONTROLLER . '/' . DEFAULT_ACTION;
+ }
+ else
+ {
+ $url = (strcmp(getQueryString(),"") !== 0) ? getQueryString() : DEFAULT_CONTROLLER . '/' . DEFAULT_ACTION;
+ }
+
+ //rewrite the URL
+// if (Route::$rewrite === 'yes')
+// {
+// $url = rewrite($url);
+// }
+
+// echo $url;
+
+ $urlArray = array();
+ $urlArray = explode("/",$url);
+
+ $controller = DEFAULT_CONTROLLER;
+ $action = DEFAULT_ACTION;
+
+ if (isset($urlArray[0]))
+ {
+ $controller = (strcmp($urlArray[0],'') !== 0) ? strtolower(trim($urlArray[0])) : DEFAULT_CONTROLLER;
+ }
+
+ array_shift($urlArray);
+
+ if (isset($urlArray[0]))
+ {
+ $action = (strcmp($urlArray[0],'') !== 0) ? strtolower(trim($urlArray[0])) : DEFAULT_ACTION;
+ }
+
+ //set ERROR_CONTROLLER and ERROR_ACTION
+ $errorController = ERROR_CONTROLLER !== false ? ERROR_CONTROLLER : DEFAULT_CONTROLLER;
+ $errorAction = ERROR_ACTION !== false ? ERROR_ACTION : DEFAULT_ACTION;
+
+ /*
+ VERIFY THE ACTION NAME
+ */
+ if (method_exists('Controller', $action) or !ctype_alnum($action) or (strcmp($action,'') === 0))
+ {
+ $controller = $errorController;
+ $action = $errorAction;
+ $urlArray = array();
+ }
+
+ /*
+ VERIFY THE CONTROLLER NAME
+ */
+ if (!ctype_alnum($controller) or (strcmp($controller,'') === 0))
+ {
+ $controller = $errorController;
+ $action = $errorAction;
+ $urlArray = array();
+ }
+
+ //check that the controller class belongs to the application/controllers folder
+ //otherwise set the controller to the default controller
+ if (!file_exists(ROOT.DS.APPLICATION_PATH.DS.'Controllers'.DS.ucwords($controller).'Controller.php'))
+ {
+ $controller = $errorController;
+ $action = $errorAction;
+ $urlArray = array();
+ }
+
+ //set the controller class to DEFAULT_CONTROLLER if it doesn't exists
+ if (!class_exists(ucwords($controller).'Controller'))
+ {
+ $controller = $errorController;
+ $action = $errorAction;
+ $urlArray = array();
+ }
+
+ //set the action to DEFAULT_ACTION if it doesn't exists
+ if (!method_exists(ucwords($controller).'Controller', $action))
+ {
+ $controller = $errorController;
+ $action = $errorAction;
+ $urlArray = array();
+ }
+
+ /*
+ CHECK COUPLES CONTROLLER,ACTION
+ */
+ if (!in_array('all',Route::$allowed))
+ {
+ $couple = "$controller,$action";
+ if (!in_array($couple,Route::$allowed))
+ {
+ $controller = $errorController;
+ $action = $errorAction;
+ $urlArray = array();
+ }
+ }
+
+ array_shift($urlArray);
+ $queryString = $urlArray;
+ //set the name of the application
+ $application = $controller;
+ $controller = ucwords($controller);
+ $model = $controller;
+ $controller .= 'Controller';
+ $model .= 'Model';
+
+ //include the file containing the set of actions to carry out before the initialization of the controller class
+ Hooks::load(ROOT . DS . APPLICATION_PATH . DS . 'Hooks' . DS . 'BeforeInitialization.php');
+
+ if (class_exists($controller))
+ {
+ $dispatch = new $controller($model,$application,$queryString);
+
+ //pass the action to the controller object
+ $dispatch->action = $action;
+ $dispatch->currPage = $dispatch->baseUrl.'/'.$dispatch->controller.'/'.$dispatch->action;
+
+ //require the file containing the set of actions to carry out after the initialization of the controller class
+ Hooks::load(ROOT . DS . APPLICATION_PATH . DS . 'Hooks' . DS . 'AfterInitialization.php');
+
+ $templateFlag= true;
+
+ if (method_exists($controller, $action))
+ {
+ //pass the action to the theme object
+ $dispatch->theme->action = $action;
+ $dispatch->theme->currPage = $dispatch->baseUrl.'/'.$dispatch->controller.'/'.$dispatch->action;
+
+ call_user_func_array(array($dispatch,$action),$queryString);
+ }
+ else
+ {
+ $templateFlag= false;
+ }
+
+ if ($templateFlag)
+ {
+ $dispatch->theme->render();
+ }
+
+ }
+ else
+ {
+ echo "<h2>the '$controller' controller is not present!</h2>";
+ }
+
+}
+
+
+// //rewrite the URL
+// function rewrite($url)
+// {
+// foreach (Route::$map as $key => $address)
+// {
+// if (preg_match('/^'.$key.'/',$url))
+// {
+// return preg_replace('/^'.$key.'/',$address,$url);
+// }
+// }
+// return ERROR_CONTROLLER.'/'.ERROR_ACTION;
+// }
+
+function getQueryString()
+{
+
+ if (strstr($_SERVER['REQUEST_URI'],'index.php/'))
+ {
+ return Params::$mbStringLoaded === true ? mb_substr(mb_strstr($_SERVER['REQUEST_URI'],'index.php/'),10) : substr(strstr($_SERVER['REQUEST_URI'],'index.php/'),10);
+ }
+
+ return '';
+}
+
+function __autoload($className)
+{
+
+ $backupName = $className;
+
+ if (strstr($className,'_'))
+ {
+ $parts = explode('_',$className);
+ $className = implode(DS,$parts);
+ }
+
+ if (file_exists(ROOT . DS . 'Library' . DS . $className . '.php'))
+ {
+ require_once(ROOT . DS . 'Library' . DS . $className . '.php');
+ }
+ else if (file_exists(ROOT . DS . APPLICATION_PATH . DS . 'Controllers' . DS . $backupName . '.php'))
+ {
+ require_once(ROOT . DS . APPLICATION_PATH . DS . 'Controllers' . DS . $backupName . '.php');
+ }
+ else if (file_exists(ROOT . DS . APPLICATION_PATH . DS . 'Models' . DS . $backupName . '.php'))
+ {
+ require_once(ROOT . DS . APPLICATION_PATH . DS . 'Models' . DS . $backupName . '.php');
+ }
+ else if (file_exists(ROOT . DS . APPLICATION_PATH . DS . 'Modules' . DS . $backupName . '.php'))
+ {
+ require_once(ROOT . DS . APPLICATION_PATH . DS . 'Modules' . DS . $backupName . '.php');
+ }
+ else if (file_exists(ROOT . DS . APPLICATION_PATH . DS . 'Strings' . DS . $className . '.php'))
+ {
+ require_once(ROOT . DS . APPLICATION_PATH . DS . 'Strings' . DS . $className . '.php');
+ }
+
+}
+
+try {
+
+ //check the length of the $_POST values
+ checkPostLength();
+
+ //check the length of the REQUEST_URI
+ checkRequestUriLength();
+
+ //connect to the database
+ Factory_Db::getInstance(DATABASE_TYPE,array(HOST,USER,PWD,DB));
+
+ //set htmlentities charset
+ switch (DEFAULT_CHARSET)
+ {
+ case 'SJIS':
+ Params::$htmlentititiesCharset = 'Shift_JIS';
+ break;
+ }
+
+ $allowedCharsets = array('UTF-8','ISO-8859-1','EUC-JP','SJIS');
+ if (!in_array(DEFAULT_CHARSET,$allowedCharsets)) die('charset not-allowed');
+
+ //check if the mbstring extension is loaded
+ if (extension_loaded('mbstring'))
+ {
+ //set the internal encoding
+ mb_internal_encoding(DEFAULT_CHARSET);
+ Params::$mbStringLoaded = true;
+ }
+
+ //load the files defined inside Config/Autoload.php
+ foreach (Autoload::$files as $file)
+ {
+ $ext = strtolower(end(explode('.', $file)));
+ $path = ROOT . DS . APPLICATION_PATH . DS . 'Include' . DS . $file;
+ if (file_exists($path) and $ext === 'php')
+ {
+ require_once($path);
+ }
+ }
+
+ //include the file containing the set of actions to carry out before the check of the super global array
+ Hooks::load(ROOT . DS . APPLICATION_PATH . DS . 'Hooks' . DS . 'BeforeChecks.php');
+
+ //sanitize super global arrays
+ sanitizeSuperGlobal();
+
+ //report errors
+ ErrorReporting();
+
+ //verify that register globals is not active
+ checkRegisterGlobals();
+
+ //call the main hook
+ callHook();
+
+ //disconnect to the database
+ Factory_Db::disconnect(DATABASE_TYPE);
+
+} catch (Exception $e) {
+
+ echo '<div class="alert">Message: '.$e->getMessage().'</div>';
+
+} \ No newline at end of file
diff --git a/h-source/admin/Library/Controller.php b/h-source/admin/Library/Controller.php
new file mode 100755
index 0000000..9ceaa5f
--- /dev/null
+++ b/h-source/admin/Library/Controller.php
@@ -0,0 +1,291 @@
+<?php
+
+// All EasyGiant code is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
+// See COPYRIGHT.txt and LICENSE.txt.
+
+if (!defined('EG')) die('Direct access not allowed!');
+
+class Controller {
+
+ protected $m = array(); //associative array referencing different models
+ protected $h = array(); //associative array referencing different helpers
+ protected $s = array(); //associative array referencing different sessions objects (users_checkAdmin objects: see library/users/checkAdmin.php)
+ protected $c = array(); //associative array referencing different controllers
+
+ protected $_queryString = array(); //the array of args coming from the url
+
+ public $controller;
+ public $action;
+ public $currPage; //the URL of the current page
+
+ public $request = null; //reference to a Request object
+
+ public $modelName;
+
+ public $argKeys = array(); //the array of keys representing the status args of the view action of the controller (validate function after colon)
+ public $argDefault = array(); //the array containing the default values of the $viewArgs array
+ public $viewArgs = array(); //the associative array representing the status args of the main action of the controller. It is the combination of $argKeys and $queryString
+ public $viewStatus = ''; //string containing the additional url string to get the status of the view action of the controller (derived from $this->viewArgs)
+
+ public $theme;
+ public $baseUrl = null; //the base url of the website: http://domainname
+ public $baseUrlSrc = null; //the base url of the website (http://domainname) if MOD_REWRITE_MODULE has been set to false
+
+ public $headerObj; //reference to headerObj class
+
+// protected $_users; //object to manage access
+
+ protected $scaffold = null; //the reference to the scaffold object
+
+ function __construct($model, $controller, $queryString = array()) {
+
+ $this->controller = $controller;
+ $this->modelName = $model;
+ $this->_queryString = $queryString;
+
+ $this->theme = new Theme($controller);
+ $this->baseUrl = $this->theme->baseUrl;
+ $this->baseUrlSrc = $this->theme->baseUrlSrc;
+
+ $this->headerObj = new HeaderObj(DOMAIN_NAME);
+ $this->request = new Request();
+ }
+
+ //redirect to $path after the time $time
+ final public function redirect($path,$time = 0,$string = null)
+ {
+ $this->headerObj->redirect($path,$time,$string);
+ }
+
+ //set the $_data structure of the theme
+ final public function set($value)
+ {
+ $this->theme->set($value);
+ }
+
+ //append values to the $_data structure of the theme
+ final public function append($value)
+ {
+ $this->theme->append($value);
+ }
+
+ //load a view file
+ final public function load($viewFile,$option = 'none') {
+ $this->theme->load($viewFile,$option);
+ }
+
+ //clean the array containing the view files to load
+ final public function clean() {
+ $this->theme->clean();
+ }
+
+ //load an helper class
+ final function helper($helperName) {
+ $args = func_get_args();
+ array_shift($args);
+ $name = 'Helper_'.$helperName;
+ if (class_exists($name))
+ {
+ $this->h[$helperName] = new $name();
+
+ if ($this->h[$helperName] instanceof Helper_Html) {
+ $this->h[$helperName]->viewArgs = $this->viewArgs;
+ $this->h[$helperName]->viewStatus = $this->viewStatus;
+ }
+
+ if (method_exists($this->h[$helperName], 'build')) {
+ call_user_func_array(array($this->h[$helperName],'build'),$args);
+ }
+ }
+
+ }
+
+ //load a model class
+ //$name: the name of the model class
+ final public function model($name = null) {
+ $modelName = isset($name) ? $name : $this->modelName;
+ if (class_exists($modelName)) {
+ $this->m[$modelName] = new $modelName();
+ } else {
+ throw new Exception('Error in '.__METHOD__.': class "'.$modelName.'" has not been defined');
+ }
+ }
+
+ //load a controller
+ //$controllerName: the name of the controller class to load
+ final public function controller($controller)
+ {
+ if (class_exists($controller)) {
+ $model = str_replace('Controller',null,$controller).'Model';
+ $application = strtolower(str_replace('Controller',null,$controller));
+ $this->c[$controller] = new $controller($model,$application,array());
+ $this->c[$controller]->theme = $this->theme;
+ }
+ }
+
+ //load a users_checkAdmin class
+ //$sessonType: the type of session. It can be 'admin' (in the case of the access of an admin user) or 'registered' (in the case of the access of a registerd user)
+ final public function session($sessionType = 'admin') {
+ $sessionTypeArray = array('admin','registered');
+ if (!in_array($sessionType,$sessionTypeArray)) {
+ throw new Exception('Error in '.__METHOD__.': the session type can be \'admin\' or \'registered\' only');
+ }
+ //admin session
+ if ($sessionType === 'admin') {
+ $params = array(
+ 'users_controller' => ADMIN_USERS_CONTROLLER,
+ 'users_login_action' => ADMIN_USERS_LOGIN_ACTION,
+ 'panel_controller' => ADMIN_PANEL_CONTROLLER,
+ 'panel_main_action' => ADMIN_PANEL_MAIN_ACTION,
+ 'cookie_name' => ADMIN_COOKIE_NAME,
+ 'sessionsTable' => ADMIN_SESSIONS_TABLE,
+ 'usersTable' => ADMIN_USERS_TABLE,
+ 'groupsTable' => ADMIN_GROUPS_TABLE,
+ 'manyToManyTable' => ADMIN_MANYTOMANY_TABLE,
+ 'accessesTable' => ADMIN_ACCESSES_TABLE,
+ 'session_expire' => ADMIN_SESSION_EXPIRE,
+ 'cookie_path' => ADMIN_COOKIE_PATH,
+ 'database_type' => DATABASE_TYPE,
+ 'hijacking_check' => ADMIN_HIJACKING_CHECK,
+ 'on_hijacking_event' => ADMIN_ON_HIJACKING_EVENT,
+ 'hijacking_action' => ADMIN_HIJACKING_ACTION,
+ 'time_after_failure' => ADMIN_TIME_AFTER_FAILURE,
+ 'password_hash' => PASSWORD_HASH,
+ 'cookie_domain' => ADMIN_COOKIE_DOMAIN,
+ 'cookie_secure' => ADMIN_COOKIE_SECURE
+ );
+ $this->s['admin'] = new Users_CheckAdmin($params);
+ }
+ //registered session
+ if ($sessionType === 'registered') {
+ $params = array(
+ 'users_controller' => REG_USERS_CONTROLLER,
+ 'users_login_action' => REG_USERS_LOGIN_ACTION,
+ 'panel_controller' => REG_PANEL_CONTROLLER,
+ 'panel_main_action' => REG_PANEL_MAIN_ACTION,
+ 'cookie_name' => REG_COOKIE_NAME,
+ 'sessionsTable' => REG_SESSIONS_TABLE,
+ 'usersTable' => REG_USERS_TABLE,
+ 'groupsTable' => REG_GROUPS_TABLE,
+ 'manyToManyTable' => REG_MANYTOMANY_TABLE,
+ 'accessesTable' => REG_ACCESSES_TABLE,
+ 'session_expire' => REG_SESSION_EXPIRE,
+ 'cookie_path' => REG_COOKIE_PATH,
+ 'database_type' => DATABASE_TYPE,
+ 'hijacking_check' => REG_HIJACKING_CHECK,
+ 'on_hijacking_event' => REG_ON_HIJACKING_EVENT,
+ 'hijacking_action' => REG_HIJACKING_ACTION,
+ 'time_after_failure' => REG_TIME_AFTER_FAILURE,
+ 'password_hash' => PASSWORD_HASH,
+ 'cookie_domain' => REG_COOKIE_DOMAIN,
+ 'cookie_secure' => REG_COOKIE_SECURE
+ );
+ $this->s['registered'] = new Users_CheckAdmin($params);
+ }
+ }
+
+ //method to set $this->argKeys. Chenge the string in the array!
+ final public function setArgKeys($argKeys) {
+// $this->argKeys = explode(',',$argKeys);
+ $this->argKeys = array_keys($argKeys);
+ $this->argDefault = array_values($argKeys);
+ }
+
+ //shift the $this->_queryString array a number of times equal to the number indicated by the $number variable and build the $this->viewArgs array and the $this->viewStatus string (additional url)
+ final public function shift($number = 0) {
+
+ //save the query string array
+ $oldQueryString = $this->_queryString;
+
+ for ($i = 0; $i < $number; $i++)
+ {
+ array_shift($this->_queryString);
+ }
+ $this->callInArgKeysFunc();
+ for ($i = 0; $i < count($this->argKeys); $i++)
+ {
+ if (!isset($this->_queryString[$i])) {
+ $this->viewArgs[$this->argKeys[$i]] = isset($this->argDefault[$i]) ? $this->argDefault[$i] : null;
+ continue;
+ }
+ $this->viewArgs[$this->argKeys[$i]] = $this->_queryString[$i];
+ }
+ $this->viewStatus = Url::createUrl(array_values($this->viewArgs));
+ $this->updateHelpers();
+
+ //update the theme
+ $this->theme->viewStatus = $this->viewStatus;
+ $this->theme->viewArgs = $this->viewArgs;
+
+ //restore the query string array
+ $this->_queryString = $oldQueryString;
+ }
+
+ //call the functions defined in $this->argKeys after the colon (ex- 'page:forceInt' => apply the forceInt() function upon the $page arg)
+ final public function callInArgKeysFunc() {
+ for ($i = 0; $i < count($this->argKeys); $i++) {
+ if (strstr($this->argKeys[$i],':')) {
+ $temp = explode(':',$this->argKeys[$i]);
+ //exception
+ if (!in_array($temp[1],explode(',',params::$allowedSanitizeFunc))) {
+ throw new Exception('"'.$temp[1]. '" function not allowed in $this->argKeys');
+ }
+ $this->argKeys[$i] = $temp[0];
+ if (!isset($this->_queryString[$i])) {
+ continue;
+ }
+ $this->_queryString[$i] = call_user_func($temp[1],$this->_queryString[$i]);
+ }
+ }
+ }
+
+ //function to update all the Helper that are instance of the HtmlHelper class. This function update the $viesArgs and $viewStatus properties. This function is called by the shift method.
+ final public function updateHelpers() {
+ foreach ($this->h as $Helper) {
+ if ($Helper instanceof Helper_Html) {
+ $Helper->viewArgs = $this->viewArgs;
+ $Helper->viewStatus = $this->viewStatus;
+ }
+ }
+ }
+
+ //create the viewStatus property
+ final public function buildStatus()
+ {
+ $this->viewStatus = Url::createUrl(array_values($this->viewArgs));
+ //update the theme
+ $this->theme->viewStatus = $this->viewStatus;
+ $this->theme->viewArgs = $this->viewArgs;
+ }
+
+ //method to instanciate the scaffold
+ final public function loadScaffold($type,$params = null) {
+
+ $typeArray = array('main','form');
+ if (!in_array($type,$typeArray)) {
+ throw new Exception("the type '$type' is not allowed in ".__METHOD__);
+ }
+ $this->scaffold = new Scaffold($type,$this->controller,$this->m[$this->modelName],$this->viewArgs,$params);
+
+ $this->helper('Menu',$this->controller,$this->scaffold->params['panelController']);
+ $this->scaffold->mainMenu = $this->h['Menu'];
+
+ $this->m[$this->modelName]->popupBuild();
+ $popupArray = $this->m[$this->modelName]->popupArray;
+
+ if ($type === 'main') {
+
+ $here = $this->controller.'/'.$this->scaffold->params['mainAction'];
+ $this->helper('Pages',$here,$this->scaffold->params['pageVariable']);
+ $this->helper('List',$this->m[$this->modelName]->identifierName);
+
+
+ $this->helper('Popup',$here,$popupArray,$this->scaffold->params['popupType'],$this->scaffold->params['pageVariable']);
+
+ $this->scaffold->pageList = $this->h['Pages'];
+ $this->scaffold->itemList = $this->h['List'];
+ $this->scaffold->popupMenu = $this->h['Popup'];
+ }
+ }
+
+} \ No newline at end of file
diff --git a/h-source/admin/Library/Db/Mysql.php b/h-source/admin/Library/Db/Mysql.php
new file mode 100755
index 0000000..8b96f44
--- /dev/null
+++ b/h-source/admin/Library/Db/Mysql.php
@@ -0,0 +1,394 @@
+<?php
+
+// All EasyGiant code is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
+// See COPYRIGHT.txt and LICENSE.txt.
+
+if (!defined('EG')) die('Direct access not allowed!');
+
+//class to manage the database
+//singleton!
+class Db_Mysql {
+
+ public $query = null; //the last query executed
+ public $charsetError = true; //true: non eccor occurred during the modification of the connection charset, false: one error occurred
+ public $charset = null; //the charset of the client connection
+
+ private static $instance = null; //instance of this class
+
+ private $dblink;
+ private $fieldsType = array('tinyint','smallint','int','mediumint','bigint','float','double');
+ /**
+
+ *connect to the database
+ *'host','user','password','db_name'
+
+ */
+
+ //PHP-Mysql charset translation table
+ private $charsetTranslationTable = array(
+ 'UTF-8' => 'utf8',
+ 'ISO-8859-1' => 'latin1',
+ 'EUC-JP' => 'ujis',
+ 'SJIS' => 'sjis'
+ );
+
+ private function __construct($host,$user,$pwd,$db_name)
+ {
+
+ $this->dblink = mysql_connect($host,$user,$pwd);
+
+ if ($this->dblink === FALSE) {
+ die ("Connection error. Verify parameters in config.php");
+ }
+
+ $db2 = mysql_select_db($db_name, $this->dblink)
+ or die ("Database selection error. Verify parameters in config.php");
+
+ $charset = array_key_exists(DEFAULT_CHARSET,$this->charsetTranslationTable) ? $this->charsetTranslationTable[DEFAULT_CHARSET] : 'utf8';
+
+ if (!@mysql_set_charset($charset,$this->dblink)) $this->charsetError = false;
+
+ $this->charset = mysql_client_encoding();
+ }
+
+ public static function getInstance($host = null, $user = null, $pwd = null, $db_name = null)
+ {
+ if (!isset(self::$instance)) {
+ $className = __CLASS__;
+ self::$instance = new $className($host,$user,$pwd,$db_name);
+ }
+
+ return self::$instance;
+ }
+
+
+ //close the connection
+ public function disconnect()
+ {
+ mysql_close($this->dblink);
+ }
+
+ //the text of the error message from previous MySQL operation
+ public function getError()
+ {
+ return mysql_error($this->dblink);
+ }
+
+ //the numerical value of the error message from previous MySQL operation
+ public function getErrno()
+ {
+ return mysql_errno($this->dblink);
+ }
+
+ public function createSelectQuery($table,$fields='*',$where=null,$group_by=null,$order_by=null,$limit=null,$on=null,$using=null)
+ {
+ if (isset($where))
+ {
+ $where='WHERE '.$where;
+ }
+ if (isset($using))
+ {
+ $using ='USING ('.$using.')';
+ $on = null;
+ }
+ if (isset($on) and !isset($using))
+ {
+ $on='ON '.$on;
+ }
+ if (isset($order_by)) {
+ $order_by='ORDER BY '.$order_by;
+ }
+ if (isset($group_by)) {
+ $group_by='GROUP BY '.$group_by;
+ }
+ if (isset($limit)) {
+ $limit='LIMIT '.$limit;
+ }
+
+ $query="SELECT $fields FROM $table $on $using $where $group_by $order_by $limit;";
+ return $query;
+ }
+
+ public function get_num_rows($table,$where=null,$group_by=null,$on=null,$using=null) {
+
+ $query = $this->createSelectQuery($table,'*',$where,$group_by,null,null,$on,$using);
+
+ $this->query=$query;
+
+ $ris = mysql_query($query);
+ if ($ris) {
+ $num_rows = mysql_num_rows($ris);
+ return $num_rows;
+ } else {
+ return false;
+ }
+ }
+
+ //get the maximum value of the field $field of the table $table having the $where conditions
+ public function getMath($func,$table,$field,$where=null,$group_by = null, $on=null,$using=null)
+ {
+ $query = $this->createSelectQuery($table,"$func($field) AS m",$where,$group_by,null,null,$on,$using);
+
+ $this->query = $query;
+ $result = mysql_query($query);
+ if ($result)
+ {
+ $row = mysql_fetch_array($result);
+ return $row['m'];
+ }
+ else
+ {
+ return false;
+ }
+ }
+
+ //get the maximum value of the field $field of the table $table having the $where conditions
+ public function getMax($table,$field,$where=null,$group_by = null,$on=null,$using=null)
+ {
+ return $this->getMath('MAX',$table,$field,$where,$group_by,$on,$using);
+ }
+
+ //get the minimum value of the field $field of the table $table having the $where conditions
+ public function getMin($table,$field,$where=null,$group_by = null,$on=null,$using=null)
+ {
+ return $this->getMath('MIN',$table,$field,$where,$group_by,$on,$using);
+ }
+
+ //get the sum of the fields
+ public function getSum($table,$field,$where=null,$group_by = null,$on=null,$using=null)
+ {
+ return $this->getMath('SUM',$table,$field,$where,$group_by,$on,$using);
+ }
+
+ //get the average of the fields
+ public function getAvg($table,$field,$where=null,$group_by = null,$on=null,$using=null)
+ {
+ return $this->getMath('AVG',$table,$field,$where,$group_by,$on,$using);
+ }
+
+ public function select($table,$fields='*',$where=null,$group_by=null,$order_by=null,$limit=null,$on=null,$using=null)
+ {
+ $query = $this->createSelectQuery($table,$fields,$where,$group_by,$order_by,$limit,$on,$using);
+
+ $this->query = $query;
+ $result = mysql_query($query);
+ return $this->getData($result);
+ }
+
+
+// public function select($table,$fields='*',$where=null,$group_by=null,$order_by=null,$limit=null) {
+// $query = $this->selectQuery($table,$fields,$where,$group_by,$order_by,$limit);
+// return $this->getData($query);
+// }
+
+
+ //obtain an associative array containing the result values (keys:tableName_fieldsName)
+ //$par = 'single/multi' single table,multi table
+ public function getData($result)
+ {
+ $data = array(); //data from the query
+ $temp = array(); //temporary array (values of a single record)
+// $result = mysql_query($query);
+ if ($result)
+ {
+ $fieldsNumber = mysql_num_fields($result);
+ while ($row = mysql_fetch_array($result))
+ {
+ for ($i = 0;$i < $fieldsNumber;$i++)
+ {
+ $tableName = mysql_field_table($result, $i);
+ if (strcmp($tableName,'') === 0) $tableName = Params::$aggregateKey;
+ $fieldName = mysql_field_name($result, $i);
+ $temp[$tableName][$fieldName] = $row[$i];
+ }
+ array_push($data,$temp);
+ }
+ return $data;
+ }
+ else
+ {
+ return false;
+ }
+ }
+
+ //return an array containing all the types of the fields (indicated in $fields) of a table (indicated in $table)
+ public function getTypes($table, $fields)
+ {
+ $query = "DESCRIBE $table;";
+ $result = mysql_query($query);
+ $temp = array();
+ while ($row = mysql_fetch_assoc($result)) {
+ $temp[$row['Field']] = reset(explode('(',$row['Type']));
+ }
+
+ $types = array();
+ $fields = explode(',',$fields);
+ for ($i = 0; $i < count($fields); $i++)
+ {
+ if (!array_key_exists($fields[$i],$temp)) return false;
+ $types[] = $temp[$fields[$i]];
+ }
+
+ return $types;
+ }
+
+ public function insert($table,$fields,$values) {
+
+ #$table is a string
+ #$fields has to be a string with comma as separator: name1,name2,...
+ #$values has to be an array
+ $values = array_values($values);
+ if (strcmp($fields,'') !== 0)
+ {
+ //get the type of the fields
+ $types = $this->getTypes($table,$fields);
+ if (!$types) return false;
+
+ for($i = 0; $i < count($values); $i++)
+ {
+ if (!in_array($types[$i],$this->fieldsType))
+ {
+ $values[$i] = '"'.$values[$i].'"';
+ }
+ else
+ {
+ if (strcmp($values[$i],'') === 0) $values[$i] = '"'.$values[$i].'"';
+ }
+ }
+
+ $values = implode(',',$values);
+ $query="INSERT INTO $table ($fields) VALUES ($values);";
+ $this->query = $query;
+ $ris = mysql_query($query);
+
+ #check the result
+ if ($ris) {
+ return true;
+ } else {
+ return false;
+ }
+
+ } else {
+ return false;
+ }
+ }
+
+ // Retrieves the ID generated for an AUTO_INCREMENT column by the previous query (usually INSERT).
+ public function lastId()
+ {
+ return mysql_insert_id();
+ }
+
+ public function update($table,$fields,$values,$where) {
+
+ #$table and $where are two strings
+ #$fields has to be a string with comma as separator: name1,name2,...
+ #$values has to be an array
+ $values = array_values($values);
+// if (isset($where)) {
+ $where='WHERE '.$where;
+// }
+ #get the array from the $fields string
+ if (strcmp($fields,'') !== 0)
+ {
+ //get the type of the fields
+ $types = $this->getTypes($table,$fields);
+ if (!$types) return false;
+
+ $fields=explode(',',$fields);
+ $str=array();
+
+ for ($i=0;$i<count($fields);$i++) {
+ if (!in_array($types[$i],$this->fieldsType))
+ {
+ $values[$i] = '"'.$values[$i].'"';
+ }
+ else
+ {
+ if (strcmp($values[$i],'') === 0) $values[$i] = '"'.$values[$i].'"';
+ }
+ $str[$i]= $fields[$i].'='.$values[$i];
+ }
+
+ #set the string name1=value1,name2=...
+ $str=implode(',',$str);
+ $query="UPDATE $table SET $str $where;";
+ $this->query=$query;
+ $ris = mysql_query($query);
+
+ #check the result
+ if ($ris) {
+ return true;
+ } else {
+ return false;
+ }
+ } else {
+ return false;
+ }
+
+ }
+
+
+ public function del($table,$where) {
+
+ #$table and $where are two strings
+// if (isset($where)) {
+ $where='WHERE '.$where;
+// }
+ $query="DELETE FROM $table $where;";
+ $this->query=$query;
+ $ris = mysql_query($query);
+ #check the result
+
+ if ($ris) {
+ return true;
+ } else {
+ return false;
+ }
+
+ }
+
+ // function to check if exist the record having the field $id_name=$id_value
+ public function recordExists($table,$fieldName,$fieldValue,$where = null,$groupBy=null,$on=null,$using=null)
+ {
+ if (isset($where))
+ {
+ $where=' AND '.$where;
+ }
+
+ $fieldValue = '"'.$fieldValue.'"';
+
+ $num=$this->get_num_rows($table,$fieldName.'='.$fieldValue.$where,$groupBy,$on,$using);
+ $res=($num>0) ? true : false;
+ return $res;
+
+ }
+
+
+ //send a generic query to the database
+ //$query: the query to be sent
+ public function query($query)
+ {
+ $this->query = $query;
+ $result = mysql_query($query);
+ if ($result === false)
+ {
+ return false;
+ }
+ else if ($result === true)
+ {
+ return true;
+ }
+ else if (@get_resource_type($result))
+ {
+ return $this->getData($result);
+ }
+ }
+
+ // Prevent users to clone the instance
+ public function __clone()
+ {
+ throw new Exception('error in '. __METHOD__.': clone is not allowed');
+ }
+
+} \ No newline at end of file
diff --git a/h-source/admin/Library/Db/Mysqli.php b/h-source/admin/Library/Db/Mysqli.php
new file mode 100644
index 0000000..4e4c528
--- /dev/null
+++ b/h-source/admin/Library/Db/Mysqli.php
@@ -0,0 +1,400 @@
+<?php
+
+// All EasyGiant code is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
+// See COPYRIGHT.txt and LICENSE.txt.
+
+if (!defined('EG')) die('Direct access not allowed!');
+
+//class to manage the database
+//singleton!
+class Db_Mysqli
+{
+
+ public $query = null; //the last query executed
+ public $charsetError = true; //true: non eccor occurred during the modification of the connection charset, false: one error occurred
+ public $charset = null; //the charset of the client connection
+
+ private static $instance = null; //instance of this class
+
+ private $db;
+ private $fieldsType = array('tinyint','smallint','int','mediumint','bigint','float','double');
+
+ //PHP-Mysql charset translation table
+ private $charsetTranslationTable = array(
+ 'UTF-8' => 'utf8',
+ 'ISO-8859-1' => 'latin1',
+ 'EUC-JP' => 'ujis',
+ 'SJIS' => 'sjis'
+ );
+
+ /**
+
+ *connect to the database
+ *'host','user','password','db_name'
+
+ */
+
+ private function __construct($host,$user,$pwd,$db_name)
+ {
+
+ $this->db = new mysqli($host,$user,$pwd,$db_name);
+
+ if (mysqli_connect_error())
+ {
+ die('Connect Error (' . mysqli_connect_errno() . ') ' . mysqli_connect_error());
+ }
+
+ $charset = array_key_exists(DEFAULT_CHARSET,$this->charsetTranslationTable) ? $this->charsetTranslationTable[DEFAULT_CHARSET] : 'utf8';
+
+ if (!@$this->db->set_charset($charset)) $this->charsetError = false;
+
+ $this->charset = $this->db->character_set_name();
+
+ }
+
+ //return the $this->db property
+ public function getDb()
+ {
+ return $this->db;
+ }
+
+ public static function getInstance($host = null, $user = null, $pwd = null, $db_name = null)
+ {
+ if (!isset(self::$instance)) {
+ $className = __CLASS__;
+ self::$instance = new $className($host,$user,$pwd,$db_name);
+ }
+
+ return self::$instance;
+ }
+
+
+ //close the connection
+ public function disconnect()
+ {
+ $this->db->close();
+ }
+
+ //the text of the error message from previous MySQL operation
+ public function getError()
+ {
+ return $this->db->error;
+ }
+
+ //the numerical value of the error message from previous MySQL operation
+ public function getErrno()
+ {
+ return $this->db->errno;
+ }
+
+ public function createSelectQuery($table,$fields='*',$where=null,$group_by=null,$order_by=null,$limit=null,$on=null,$using=null)
+ {
+ if (isset($where))
+ {
+ $where='WHERE '.$where;
+ }
+ if (isset($using))
+ {
+ $using ='USING ('.$using.')';
+ $on = null;
+ }
+ if (isset($on) and !isset($using))
+ {
+ $on='ON '.$on;
+ }
+ if (isset($order_by)) {
+ $order_by='ORDER BY '.$order_by;
+ }
+ if (isset($group_by)) {
+ $group_by='GROUP BY '.$group_by;
+ }
+ if (isset($limit)) {
+ $limit='LIMIT '.$limit;
+ }
+
+ $query="SELECT $fields FROM $table $on $using $where $group_by $order_by $limit;";
+ return $query;
+ }
+
+ public function get_num_rows($table,$where=null,$group_by=null,$on=null,$using=null) {
+
+ $query = $this->createSelectQuery($table,'*',$where,$group_by,null,null,$on,$using);
+
+ $this->query = $query;
+ $ris = $this->db->query($query);
+ if ($ris) {
+ $num_rows = $ris->num_rows;
+ $ris->close();
+ return $num_rows;
+ } else {
+ return false;
+ }
+ }
+
+ public function getMath($func,$table,$field,$where=null,$group_by = null, $on=null,$using=null)
+ {
+ $query = $this->createSelectQuery($table,"$func($field) AS m",$where,$group_by,null,null,$on,$using);
+
+ $this->query = $query;
+ $result = $this->db->query($query);
+ if ($result)
+ {
+ $row = $result->fetch_array();
+ $result->close();
+ return $row['m'];
+ }
+ else
+ {
+ return false;
+ }
+ }
+
+ //get the maximum value of the field $field of the table $table having the $where conditions
+ public function getMax($table,$field,$where=null,$group_by = null,$on=null,$using=null)
+ {
+ return $this->getMath('MAX',$table,$field,$where,$group_by,$on,$using);
+ }
+
+ //get the minimum value of the field $field of the table $table having the $where conditions
+ public function getMin($table,$field,$where=null,$group_by = null,$on=null,$using=null)
+ {
+ return $this->getMath('MIN',$table,$field,$where,$group_by,$on,$using);
+ }
+
+ //get the sum of the fields
+ public function getSum($table,$field,$where=null,$group_by = null,$on=null,$using=null)
+ {
+ return $this->getMath('SUM',$table,$field,$where,$group_by,$on,$using);
+ }
+
+ //get the average of the fields
+ public function getAvg($table,$field,$where=null,$group_by = null,$on=null,$using=null)
+ {
+ return $this->getMath('AVG',$table,$field,$where,$group_by,$on,$using);
+ }
+
+ public function select($table,$fields='*',$where=null,$group_by=null,$order_by=null,$limit=null,$on=null,$using=null)
+ {
+ $query = $this->createSelectQuery($table,$fields,$where,$group_by,$order_by,$limit,$on,$using);
+
+ $this->query = $query;
+ $result = $this->db->query($query);
+ return $this->getData($result);
+ }
+
+
+// public function select($table,$fields='*',$where=null,$group_by=null,$order_by=null,$limit=null) {
+// $query = $this->selectQuery($table,$fields,$where,$group_by,$order_by,$limit);
+// return $this->getData($query);
+// }
+
+
+ //obtain an associative array containing the result values (keys:tableName_fieldsName)
+ //$par = 'single/multi' single table,multi table
+ public function getData($result) {
+ $data = array(); //data from the query
+ $temp = array(); //temporary array (values of a single record)
+// $result = $this->db->query($query);
+ if ($result) {
+ $fieldsNumber = $result->field_count;
+ while ($row = $result->fetch_array()) {
+ for ($i = 0;$i < $fieldsNumber;$i++) {
+ $finfo = $result->fetch_field_direct($i);
+ $tableName = $finfo->table;
+ if (strcmp($tableName,'') === 0) $tableName = Params::$aggregateKey;
+ $fieldName = $finfo->name;
+ $temp[$tableName][$fieldName] = $row[$i];
+ }
+ array_push($data,$temp);
+ }
+ $result->close();
+ return $data;
+ } else {
+ return false;
+ }
+ }
+
+ //return an array containing all the types of the fields (indicated in $fields) of a table (indicated in $table)
+ public function getTypes($table, $fields)
+ {
+ $query = "DESCRIBE $table;";
+ $result = $this->db->query($query);
+ $temp = array();
+ while ($row = $result->fetch_assoc()) {
+ $temp[$row['Field']] = reset(explode('(',$row['Type']));
+ }
+ $result->close();
+
+ $types = array();
+ $fields = explode(',',$fields);
+ for ($i = 0; $i < count($fields); $i++)
+ {
+ if (!array_key_exists($fields[$i],$temp)) return false;
+ $types[] = $temp[$fields[$i]];
+ }
+
+ return $types;
+ }
+
+ public function insert($table,$fields,$values) {
+
+ #$table is a string
+ #$fields has to be a string with comma as separator: name1,name2,...
+ #$values has to be an array
+ $values = array_values($values);
+ if (strcmp($fields,'') !== 0)
+ {
+ //get the type of the fields
+ $types = $this->getTypes($table,$fields);
+ if (!$types) return false;
+
+ for($i = 0; $i < count($values); $i++)
+ {
+ if (!in_array($types[$i],$this->fieldsType))
+ {
+ $values[$i] = '"'.$values[$i].'"';
+ }
+ else
+ {
+ if (strcmp($values[$i],'') === 0) $values[$i] = '"'.$values[$i].'"';
+ }
+ }
+
+ $values = implode(',',$values);
+ $query="INSERT INTO $table ($fields) VALUES ($values);";
+ $this->query=$query;
+
+ $ris = $this->db->query($query);
+
+ #check the result
+ if ($ris) {
+ return true;
+ } else {
+ return false;
+ }
+
+ } else {
+ return false;
+ }
+ }
+
+ // Retrieves the ID generated for an AUTO_INCREMENT column by the previous query (usually INSERT).
+ public function lastId()
+ {
+ return $this->db->insert_id;
+ }
+
+ public function update($table,$fields,$values,$where) {
+
+ #$table and $where are two strings
+ #$fields has to be a string with comma as separator: name1,name2,...
+ #$values has to be an array
+ $values = array_values($values);
+// if (isset($where)) {
+ $where='WHERE '.$where;
+// }
+ #get the array from the $fields string
+ if (strcmp($fields,'') !== 0)
+ {
+ //get the type of the fields
+ $types = $this->getTypes($table,$fields);
+ if (!$types) return false;
+
+ $fields = explode(',',$fields);
+ $str = array();
+
+ for ($i=0;$i<count($fields);$i++) {
+ if (!in_array($types[$i],$this->fieldsType))
+ {
+ $values[$i] = '"'.$values[$i].'"';
+ }
+ else
+ {
+ if (strcmp($values[$i],'') === 0) $values[$i] = '"'.$values[$i].'"';
+ }
+ $str[$i]= $fields[$i].'='.$values[$i];
+ }
+
+ #set the string name1=value1,name2=...
+ $str=implode(',',$str);
+ $query="UPDATE $table SET $str $where;";
+ $this->query=$query;
+ $ris = $this->db->query($query);
+
+ #check the result
+ if ($ris) {
+ return true;
+ } else {
+ return false;
+ }
+ } else {
+ return false;
+ }
+
+ }
+
+
+ public function del($table,$where) {
+
+ #$table and $where are two strings
+// if (isset($where)) {
+ $where='WHERE '.$where;
+// }
+ $query="DELETE FROM $table $where;";
+ $this->query=$query;
+ $ris = $this->db->query($query);
+ #check the result
+
+ if ($ris) {
+ return true;
+ } else {
+ return false;
+ }
+
+ }
+
+
+ //function to check if exist the record having the field $id_name=$id_value
+ public function recordExists($table,$fieldName,$fieldValue,$where = null,$groupBy=null,$on=null,$using=null)
+ {
+ if (isset($where))
+ {
+ $where=' AND '.$where;
+ }
+
+ $fieldValue = '"'.$fieldValue.'"';
+
+ $num = $this->get_num_rows($table,$fieldName.'='.$fieldValue.$where,$groupBy,$on,$using);
+ $res=($num>0) ? true : false;
+ return $res;
+
+ }
+
+
+ //send a generic query to the database
+ //$query: the query to be sent
+ public function query($query)
+ {
+ $this->query = $query;
+ $result = $this->db->query($query);
+ if ($result === true)
+ {
+ return true;
+ }
+ else if ($result === false)
+ {
+ return false;
+ }
+ else if ($result instanceof MySQLi_Result)
+ {
+ return $this->getData($result);
+ }
+ }
+
+ // Prevent users to clone the instance
+ public function __clone()
+ {
+ throw new Exception('error in '. __METHOD__.': clone is not allowed');
+ }
+
+} \ No newline at end of file
diff --git a/h-source/admin/Library/Db/index.html b/h-source/admin/Library/Db/index.html
new file mode 100644
index 0000000..8d1c8b6
--- /dev/null
+++ b/h-source/admin/Library/Db/index.html
@@ -0,0 +1 @@
+
diff --git a/h-source/admin/Library/Email.php b/h-source/admin/Library/Email.php
new file mode 100644
index 0000000..c948098
--- /dev/null
+++ b/h-source/admin/Library/Email.php
@@ -0,0 +1,229 @@
+<?php
+
+// All EasyGiant code is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
+// See COPYRIGHT.txt and LICENSE.txt.
+
+if (!defined('EG')) die('Direct access not allowed!');
+
+//class to send an e-mail
+class Email {
+
+ //sent to parameters (array)
+ private $_sendTo = array();
+
+ //cc parameters (array)
+ private $_cc = array();
+
+ //bcc parameters (array)
+ private $_bcc = array();
+
+ //the address of the sender
+ private $_from = null;
+
+ //subject (string)
+ private $_subject = null;
+
+ //charset
+ private $_charset = "iso-8859-1";
+
+ //Content-Transfer-Encoding
+ private $_ctencoding = "7bit";
+
+ //body
+ private $_body = '';
+
+ //headers
+ private $_headers = null;
+
+ //check flag. If _check = true than check the mail addresses
+ private $_check = null;
+
+ //regular expression to check each e-mail address
+ private $_addressRegExp = null;
+
+ //array containing all the errors encountered during the execution
+ public $errorsArray = array();
+
+ public function __construct($bool = true)
+ {
+ $this->_check = $bool;
+ }
+
+ //set the sentTo addresses array
+ //$addresses: array of e-mail addresses or a string
+ public function sendTo($addresses)
+ {
+ $this->_sendTo = explode(',',$addresses);
+ }
+
+ //set the subject
+ public function subject($subject)
+ {
+ $this->_subject = $subject;
+ }
+
+ //set the cc addresses array
+ //$addresses: array of e-mail addresses or a string
+ public function cc($addresses)
+ {
+ $this->_cc = explode(',',$addresses);
+ }
+
+ //set the bcc addresses array
+ //$addresses: array of e-mail addresses or a string
+ public function bcc($addresses)
+ {
+ $this->_bcc = explode(',',$addresses);
+ }
+
+ //set the address of the sender
+ public function from($address)
+ {
+ $this->_from = $address;
+ }
+
+ //set the charset
+ public function charset($charset)
+ {
+ $this->_charset = $charset;
+ }
+
+ //set the Content-Transfer-Encoding
+ public function ctencoding($ctencoding)
+ {
+ $this->_ctencoding = $ctencoding;
+ }
+
+ //set the text body
+ public function body($body)
+ {
+ $this->_body = $body;
+ }
+
+ //set the address regular expression
+ public function addressRegExp($regExp)
+ {
+ $this->_addressRegExp = $regExp;
+ }
+
+ //check if the mail address is valid
+ public function isValidAddress($address)
+ {
+
+ if( preg_match( '/^[^<>]*<(.+)>$/', $address, $matches ) )
+ {
+ $address = $matches[1];
+ }
+
+ if (isset($this->_addressRegExp))
+ {
+ if (preg_match($this->_addressRegExp,$address))
+ {
+ return true;
+ }
+ else
+ {
+ return false;
+ }
+ }
+ else
+ {
+ if (checkMail($address)) return true;
+ }
+
+ return false;
+
+ }
+
+ //check the addresses inside the $addresses array
+ public function checkAddresses($addresses)
+ {
+ foreach ($addresses as $address)
+ {
+ if(!$this->isValidAddress($address)) return false;
+ }
+ return true;
+ }
+
+ //build the mail
+ public function buildMail()
+ {
+
+ if (empty($this->_sendTo))
+ {
+ $this->errorsArray[] = 'no address specified';
+ return false;
+ }
+
+ if ($this->_check)
+ {
+ if (!$this->checkAddresses($this->_sendTo))
+ {
+ $this->errorsArray[] = 'errors in the sendTo address validation';
+ return false;
+ }
+
+ if (!empty($this->_cc))
+ {
+ if (!$this->checkAddresses($this->_cc))
+ {
+ $this->errorsArray[] = 'errors in the cc address validation';
+ return false;
+ }
+ }
+
+ if (!empty($this->_bcc))
+ {
+ if (!$this->checkAddresses($this->_bcc))
+ {
+ $this->errorsArray[] = 'errors in the bcc address validation';
+ return false;
+ }
+ }
+
+ if (isset($this->_from))
+ {
+ if (!$this->checkAddresses(array($this->_from)))
+ {
+ $this->errorsArray[] = 'errors in the from address validation';
+ return false;
+ }
+ }
+ }
+
+ if (strcmp($this->_subject,'') === 0)
+ {
+ $this->errorsArray[] = 'no subject specified';
+ return false;
+ }
+
+ $headers = null;
+ if (isset($this->_from)) $headers .= "From: ".$this->_from."\r\n";
+ $headers .= "MIME-Version: 1.0\r\n";
+ $headers .= "Content-Type: text/plain; charset=\"".$this->_charset."\"\r\n";
+ $headers .= "Content-Transfer-Encoding: ".$this->_ctencoding."\r\n";
+ if (!empty($this->_cc)) $headers .= "CC: ".implode(',',$this->_cc)."\r\n";
+ if (!empty($this->_bcc)) $headers .= "Bcc: ".implode(',',$this->_bcc)."\r\n";
+
+ $this->_headers = $headers;
+
+ return true;
+
+ }
+
+ public function send()
+ {
+ if (!$this->buildMail()) return false;
+
+ $to = implode(',',$this->_sendTo);
+
+ if (!@mail($to,$this->_subject,$this->_body,$this->_headers))
+ {
+ $this->errorsArray[] = 'error in the send process';
+ return false;
+ }
+
+ return true;
+ }
+
+} \ No newline at end of file
diff --git a/h-source/Library/Lang/En/Formats/Fields.php b/h-source/admin/Library/ErrorReporting.php
index c91a1f0..18ba519 100644
--- a/h-source/Library/Lang/En/Formats/Fields.php
+++ b/h-source/admin/Library/ErrorReporting.php
@@ -2,7 +2,7 @@
// EasyGiant is a PHP framework for creating and managing dynamic content
//
-// Copyright (C) 2009 - 2014 Antonio Gallo (info@laboratoriolibero.com)
+// Copyright (C) 2009 - 2011 Antonio Gallo
// See COPYRIGHT.txt and LICENSE.txt.
//
// This file is part of EasyGiant
@@ -20,27 +20,26 @@
// You should have received a copy of the GNU General Public License
// along with EasyGiant. If not, see <http://www.gnu.org/licenses/>.
-if (!defined('EG')) die('Direct access not allowed!');
+//function to set the error reporting parameters
-class Lang_En_Formats_Fields
-{
-
- public static function getLabel($fieldName)
+function ErrorReporting() {
+ if (RUNTIME_CONFIGURATION === true)
{
- if (strstr($fieldName,","))
+ error_reporting(ERROR_REPORTING_DIRECTIVE);
+ if (DISPLAY_ERRORS === 'On') {
+ ini_set('display_errors','On');
+ } else {
+ ini_set('display_errors','Off');
+ }
+
+ if (ERROR_REPORTING_FILE === true)
{
- $temp = explode(",",$fieldName);
- for ($i=0; $i< count($temp); $i++)
+ if (LOG_ERROR_FILE === 'default')
{
- $temp[$i] = self::getLabel($temp[$i]);
+ ini_set('error_log',ROOT.DS.'Logs/Errors.log');
+ } else {
+ ini_set('error_log',LOG_ERROR_FILE);
}
- return implode (" and ",$temp);
- }
- else
- {
- $fieldName = str_replace("_"," ", $fieldName);
- return ucfirst($fieldName);
}
}
-
}
diff --git a/h-source/admin/Library/Factory/Db.php b/h-source/admin/Library/Factory/Db.php
new file mode 100755
index 0000000..3a988dd
--- /dev/null
+++ b/h-source/admin/Library/Factory/Db.php
@@ -0,0 +1,52 @@
+<?php
+
+// All EasyGiant code is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
+// See COPYRIGHT.txt and LICENSE.txt.
+
+if (!defined('EG')) die('Direct access not allowed!');
+
+//class to create the database layer class
+class Factory_Db {
+
+ //start the database connection
+ //$dbType: mysql,mysqli,pg
+ //$dbArrayParams: array containing the HOST, the USER, the PWD, and the DB of the database (see config.php)
+ public static function getInstance($dbType,$dbArrayParams = array()) {
+ if (!in_array($dbType,Params::$allowedDb)) {
+ throw new Exception('error in ' . __METHOD__ . ' : the database type has to be '.implode(' or ',Params::$allowedDb));
+ }
+ switch ($dbType) {
+ case 'Mysql':
+ return call_user_func_array(array('Db_'.$dbType,'getInstance'),$dbArrayParams);
+ break;
+ case 'Mysqli':
+ return call_user_func_array(array('Db_'.$dbType,'getInstance'),$dbArrayParams);
+ break;
+ case 'None':
+ return null;
+ break;
+ }
+ }
+
+ //close the database connection
+ public static function disconnect($dbType)
+ {
+ if (!in_array($dbType,Params::$allowedDb)) {
+ throw new Exception('error in ' . __METHOD__ . ' : the database type has to be '.implode(' or ',Params::$allowedDb));
+ }
+ switch ($dbType) {
+ case 'Mysql':
+ $mysql = Db_Mysql::getInstance();
+ $mysql->disconnect();
+ break;
+ case 'Mysqli':
+ $mysqli = Db_Mysqli::getInstance();
+ $mysqli->disconnect();
+ break;
+ case 'None':
+ return null;
+ break;
+ }
+ }
+
+}
diff --git a/h-source/admin/Library/Factory/index.html b/h-source/admin/Library/Factory/index.html
new file mode 100644
index 0000000..8d1c8b6
--- /dev/null
+++ b/h-source/admin/Library/Factory/index.html
@@ -0,0 +1 @@
+
diff --git a/h-source/admin/Library/Files/Log.php b/h-source/admin/Library/Files/Log.php
new file mode 100644
index 0000000..895c26d
--- /dev/null
+++ b/h-source/admin/Library/Files/Log.php
@@ -0,0 +1,97 @@
+<?php
+
+// All EasyGiant code is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
+// See COPYRIGHT.txt and LICENSE.txt.
+
+if (!defined('EG')) die('Direct access not allowed!');
+
+//class to manage a file di log
+//this is a singleton class
+class Files_Log
+{
+
+ const DS = DIRECTORY_SEPARATOR;
+
+ // array of instances of the class
+ //key: name of the instance, value:instance. The name of the instance is also the name of the log file to open
+ private static $instance = array();
+
+ public static $logFolder = './'; //the log folder
+ public static $logExtension = '.log'; //the extension of the log files
+ public static $logPermission = 0777;
+
+ private $splFile; //SplFileObject
+
+ //$fileName: the file to open
+ private function __construct($fileName)
+ {
+ $finalChar = self::$logFolder[strlen(self::$logFolder) - 1];
+ if (strcmp($finalChar,self::DS) !== 0) self::$logFolder .= self::DS;
+
+ $path = self::$logFolder . $fileName . self::$logExtension;
+ $this->splFile = new SplFileObject($path,'a+');
+ //change the permission of the file
+ @chmod($path,self::$logPermission);
+ }
+
+ // The singleton method
+ // $instanceName: name of the key of self::$instance. It is also the name of the log file to open
+ public static function getInstance($instanceName)
+ {
+ if (!isset(self::$instance[$instanceName])) {
+ $className = __CLASS__;
+ self::$instance[$instanceName] = new $className($instanceName);
+ }
+
+ return self::$instance[$instanceName];
+ }
+
+ //write the string $string at the end of the file
+ public function writeString($string,$format = 'Y-m-d H:i:s')
+ {
+ $date = date($format);
+ $this->splFile->fwrite("[$date]\t".$string."\n");
+ }
+
+ //get the date string of the line $line
+ public function getDateString($line)
+ {
+ if (preg_match('/^[\[]{1}([a-zA-Z0-9:\-\s])*[\]]{1}/',$line,$match))
+ {
+ $match[0] = str_replace('[',null,$match[0]);
+ $match[0] = str_replace(']',null,$match[0]);
+ return $match[0];
+ }
+ else
+ {
+ return false;
+ }
+ }
+
+ //delete all the lines older than a number of days equal to $days
+ public function clearBefore($days = 30)
+ {
+ $tempArray = array();
+ $newTime = time() - (int)$days * 24 * 3600;
+ foreach ($this->splFile as $line)
+ {
+ $lineTime = strtotime($this->getDateString($line));
+ if ($lineTime !== false and $lineTime > $newTime)
+ {
+ $tempArray[] = $line;
+ }
+ }
+ $this->splFile->ftruncate(0);
+ foreach ($tempArray as $row)
+ {
+ $this->splFile->fwrite($row);
+ }
+ }
+
+ // Prevent users to clone the instance
+ public function __clone()
+ {
+ throw new Exception('error in '. __METHOD__.': clone is not allowed');
+ }
+
+} \ No newline at end of file
diff --git a/h-source/admin/Library/Files/Upload.php b/h-source/admin/Library/Files/Upload.php
new file mode 100755
index 0000000..47289fd
--- /dev/null
+++ b/h-source/admin/Library/Files/Upload.php
@@ -0,0 +1,451 @@
+<?php
+
+// All EasyGiant code is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
+// See COPYRIGHT.txt and LICENSE.txt.
+
+if (!defined('EG')) die('Direct access not allowed!');
+
+//class to manage upload files
+class Files_Upload
+{
+
+ const DS = DIRECTORY_SEPARATOR;
+
+ private $base = null; //root directory
+ private $directory = null; //current directory. Path relative to the base directory (Files_Upload::base)
+ private $parentDir = null; //parent folder
+ private $subDir = array(); //subdirectories of the current directory
+ private $relSubDir = array(); //subfolders of $this->directory. The path starts from the $base folder
+ private $files = array(); //files inside the current directory
+ private $relFiles = array(); //files inside $this->directory. The path starts from the $base directory
+ private $params; //class parameters
+ private $pattern = null; //the pattern for the preg_match function
+
+ protected $_resultString; //reference to the class uploadStrings containing all the result strings
+
+ public $fileName = null; //the name of the last file that has been uploaded
+ public $notice = null; //the result string of the operation
+
+ public function __construct($base,$params = null, $directory = null) {
+
+ $this->base = $this->addTrailingSlash($base);
+
+ //set the match pattern
+ $tmp = str_replace(self::DS,'\\'.self::DS,$this->base);
+ $this->pattern = "/^(".$tmp.")/";
+
+ $defaultParams = array(
+ 'filesPermission'=>0777,
+ 'delFolderAction'=>'delFolderAction',
+ 'delFileAction'=>'delFileAction',
+ 'createFolderAction'=>'createFolderAction',
+ 'uploadFileAction'=>'uploadFileAction',
+ 'maxFileSize' => 3000000,
+ 'language' => 'eng',
+ 'allowedExtensions'=>'jpg,jpeg,png,gif,txt',
+ 'fileUploadKey' => 'userfile'
+ );
+
+ //set the $this->scaffold->params array
+ if (is_array($params))
+ {
+ foreach ($params as $key => $value)
+ {
+ $defaultParams[$key] = $value;
+ }
+ }
+ $this->params = $defaultParams;
+
+ //instantiate the $_resultString object
+ $stringClass = 'Lang_'.$this->params['language'].'_UploadStrings';
+ if (!class_exists($stringClass))
+ {
+ $stringClass = 'Lang_Eng_UploadStrings';
+ }
+ $this->_resultString = new $stringClass();
+
+ $this->setDirectory($directory);
+
+ }
+
+ //obtain the current directory
+ public function setDirectory($directory = null)
+ {
+ $relDir = (strcmp($directory,"") !== 0) ? $this->addTrailingSlash($directory) : null;
+ $absDir = $this->addTrailingSlash($this->base.$directory);
+
+ if (is_dir($absDir))
+ {
+ if ($this->isValidFolder($absDir))
+ {
+ $this->directory = $relDir;
+ return true;
+ }
+ else
+ {
+ $this->notice = $this->_resultString->getString('not-child');
+ }
+ }
+ else
+ {
+ $this->directory = null;
+ $this->notice = $this->_resultString->getString('not-dir');
+ }
+ return false;
+ }
+
+ //check if $folder is a folder and is subfolder of $this->base
+ protected function isValidFolder($folder)
+ {
+ if (is_dir($folder))
+ {
+ $folder = $this->addTrailingSlash(realpath($folder));
+ if ($this->isMatching($folder)) return true;
+ }
+ return false;
+ }
+
+ protected function isMatching($path)
+ {
+ if (preg_match($this->pattern,$path))
+ {
+ if (strstr($path,'..')) return false;
+ return true;
+ }
+ return false;
+ }
+
+ public function getDirectory() {
+ return $this->directory;
+ }
+
+ public function getBase()
+ {
+ return $this->base;
+ }
+
+ public function getSubDir() {
+ return $this->subDir;
+ }
+
+ public function getRelSubDir()
+ {
+ return $this->relSubDir;
+ }
+
+ public function getFiles() {
+ return $this->files;
+ }
+
+ public function getRelFiles()
+ {
+ return $this->relFiles;
+ }
+
+ public function getParentDir() {
+ return $this->parentDir;
+ }
+
+ //add the trailing slash to the string
+ protected function addTrailingSlash($string)
+ {
+ $finalChar = $string[strlen($string) - 1];
+ if (strcmp($finalChar,self::DS) !== 0)
+ {
+ return $string.self::DS;
+ }
+ return $string;
+ }
+
+ protected function urlDeep($dir) { #funzione per creare l'indirizzo completo della cartella all'interno della quale voglio entrare
+ #$dir:cartella all'interno della quale voglio entrare
+ return $this->base.$this->directory.$dir.self::DS;
+ }
+
+ public function listFiles() { #creo la lista di file e cartelle all'interno della directory corrente
+ $items = scandir($this->base.$this->directory);
+ foreach( $items as $this_file ) {
+ if( strcmp($this_file,".") !== 0 && strcmp($this_file,"..") !== 0 ) {
+ if (is_dir($this->urlDeep($this_file))) {
+ $this->subDir[] = $this_file;
+ $this->relSubDir[] = $this->directory.$this_file;
+ } else {
+ $this->files[] = $this_file;
+ $this->relFiles[] = $this->directory.$this_file;
+ }
+ }
+ }
+ //get the parent dir
+ $this->parentDir();
+ }
+
+ //get the extension of the file
+ protected function getFileExtension($file)
+ {
+ return strtolower(end(explode('.', $file)));
+ }
+
+ protected function parentDir() { #individuo la cartella madre
+
+ $folders = explode(self::DS,$this->directory);
+ array_pop($folders);
+ array_pop($folders);
+ $parent = implode(self::DS,$folders);
+ $parent = (strcmp($parent,"") !== 0) ? $this->addTrailingSlash($parent) : null;
+
+ if ($this->isValidFolder($this->base.$parent))
+ {
+ $this->parentDir = $parent;
+ }
+ else
+ {
+ $this->parentDir = null;
+ }
+ }
+
+ //create the $name subfolder of the $this->directory folder
+ public function createFolder($name) { #funzione per creare una cartella nella directory corrente
+ $name = basename($name);
+ if (strcmp(trim($name),'') !== 0)
+ {
+ if (is_writable($this->base.$this->directory))
+ {
+ $path = $this->base.$this->directory.$name;
+
+ if ($this->isMatching($path))
+ {
+ if (!file_exists($path))
+ {
+ if (@mkdir($path,$this->params['filesPermission']))
+ {
+ @chmod($path, $this->params['filesPermission']);
+ $this->notice = $this->_resultString->getString('executed');
+ return true;
+ }
+ else
+ {
+ $this->notice = $this->_resultString->getString('error');
+ }
+ }
+ else
+ {
+ $this->notice = $this->_resultString->getString('dir-exists');
+ }
+ }
+ else
+ {
+ $this->notice = $this->_resultString->getString('not-child');
+ }
+ }
+ else
+ {
+ $this->notice = $this->_resultString->getString('not-writable');
+ }
+ }
+ else
+ {
+ $this->notice = $this->_resultString->getString('no-folder-specified');
+ }
+ return false;
+ }
+
+ //check if the $name folder is empty or not
+ protected function isEmpty($name)
+ {
+ $items = scandir($name);
+ foreach( $items as $this_file ) {
+ if( strcmp($this_file,".") !== 0 && strcmp($this_file,"..") !== 0 ) {
+ return false;
+ }
+ }
+ return true;
+ }
+
+ public function removeFile($name)
+ {
+ $name = basename($name);
+ if (strcmp(trim($name),'') !== 0)
+ {
+ $path = $this->base.$this->directory.$name;
+ if ($this->isMatching($path))
+ {
+ if ($this->removeAbsFile($path)) return true;
+ }
+ else
+ {
+ $this->notice = $this->_resultString->getString('not-child');
+ }
+ }
+ else
+ {
+ $this->notice = $this->_resultString->getString('no-file-specified');
+ }
+ return false;
+ }
+
+ //remove the $name file
+ protected function removeAbsFile($name)
+ {
+ if (strcmp(trim($name),'') !== 0)
+ {
+ if (is_writable($name))
+ {
+ if (@unlink($name))
+ {
+ $this->notice = $this->_resultString->getString('executed');
+ return true;
+ }
+ else
+ {
+ $this->notice = $this->_resultString->getString('error');
+ }
+ }
+ else
+ {
+ $this->notice = $this->_resultString->getString('not-writable-file');
+ }
+ }
+ else
+ {
+ $this->notice = $this->_resultString->getString('no-file-specified');
+ }
+ return false;
+ }
+
+ public function removeFolder($name)
+ {
+ $name = basename($name);
+ if (strcmp(trim($name),'') !== 0)
+ {
+ $dir = $this->base.$this->directory.$name;
+ if ($this->isMatching($dir))
+ {
+ if ($this->removeAbsFolder($dir)) return true;
+ }
+ else
+ {
+ $this->notice = $this->_resultString->getString('not-child');
+ }
+ }
+ else
+ {
+ $this->notice = $this->_resultString->getString('no-folder-specified');
+ }
+ return false;
+ }
+
+ //remove the $name folder
+ protected function removeAbsFolder($name) {
+ if (strcmp(trim($name),'') !== 0) {
+ if (is_writable($name))
+ {
+ if ($this->isEmpty($name))
+ {
+ if (@rmdir($name))
+ {
+ $this->notice = $this->_resultString->getString('executed');
+ return true;
+ }
+ else
+ {
+ $this->notice = $this->_resultString->getString('error');
+ }
+ }
+ else
+ {
+ $this->notice = $this->_resultString->getString('not-empty');
+ }
+ }
+ else
+ {
+ $this->notice = $this->_resultString->getString('not-writable');
+ }
+ }
+ else
+ {
+ $this->notice = $this->_resultString->getString('no-folder-specified');
+ }
+ return false;
+ }
+
+ //upload a file in the current directory
+ //$fileName: name of the file
+ public function uploadFile($fileName = null) {
+ $userfile = $this->params['fileUploadKey'];
+ $ext = $this->getFileExtension($_FILES[$userfile]["name"]);
+ $fileName = isset($fileName) ? $fileName.".$ext" : basename($_FILES[$userfile]["name"]);
+
+ $this->fileName = $fileName;
+
+ if(strcmp(trim($_FILES[$userfile]["name"]),"") !== 0)
+ {
+ if(@is_uploaded_file($_FILES[$userfile]["tmp_name"])) {
+ if ($_FILES[$userfile]["size"] <= $this->params['maxFileSize'])
+ {
+ //check the extension of the file
+ $AllowedExtensionsArray = explode(',',$this->params['allowedExtensions']);
+
+ if (in_array($ext,$AllowedExtensionsArray))
+ {
+ //check if the file doesn't exists
+ if (!file_exists($this->base.$this->directory.$fileName))
+ {
+ if (@move_uploaded_file($_FILES[$userfile]["tmp_name"],$this->base.$this->directory.$fileName))
+ {
+ @chmod($this->base.$this->directory.$fileName, $this->params['filesPermission']);
+ $this->notice = $this->_resultString->getString('executed');
+ return true;
+ }
+ else
+ {
+ $this->notice = $this->_resultString->getString('error');
+ }
+ }
+ else
+ {
+ $this->notice = $this->_resultString->getString('file-exists');
+ }
+ }
+ else
+ {
+ $this->notice = $this->_resultString->getString('not-allowed-ext');
+ }
+ }
+ else
+ {
+ $this->notice = $this->_resultString->getString('size-over');
+ }
+ }
+ else
+ {
+ $this->notice = $this->_resultString->getString('no-upload-file');
+ }
+ }
+ else
+ {
+ $this->notice = $this->_resultString->getString('no-upload-file');
+ }
+ return false;
+ }
+
+ //update the folder tree
+ public function updateTree() {
+
+ if (isset($_POST[$this->params['delFolderAction']])) {
+ $this->removeFolder($_POST[$this->params['delFolderAction']]);
+ }
+
+ if (isset($_POST[$this->params['delFileAction']])) {
+ $this->removeFile($_POST[$this->params['delFileAction']]);
+ }
+
+ if (isset($_POST[$this->params['createFolderAction']])) {
+ $this->createFolder($_POST['folderName']);
+ }
+
+ if (isset($_POST[$this->params['uploadFileAction']])) {
+ $this->uploadFile();
+ }
+
+ }
+} \ No newline at end of file
diff --git a/h-source/admin/Library/Files/index.html b/h-source/admin/Library/Files/index.html
new file mode 100644
index 0000000..8d1c8b6
--- /dev/null
+++ b/h-source/admin/Library/Files/index.html
@@ -0,0 +1 @@
+
diff --git a/h-source/admin/Library/Form/Checkbox.php b/h-source/admin/Library/Form/Checkbox.php
new file mode 100755
index 0000000..5df1917
--- /dev/null
+++ b/h-source/admin/Library/Form/Checkbox.php
@@ -0,0 +1,41 @@
+<?php
+
+/**
+ * EasyGiant
+ *
+ * LICENSE
+ *
+ * All EasyGiant code is free software: you can redistribute it and/or modify it under the terms of the GNU General Public
+ * License as published by the Free Software Foundation, either version 3 of the License, or (at your option)
+ * any later version.
+ * See COPYRIGHT.txt and LICENSE.txt.
+ *
+ * @package EasyGiant
+ * @license http://www.gnu.org/licenses/gpl.html GNU General Public License version 3 or any later version
+ */
+
+if (!defined('EG')) die('Direct access not allowed!');
+
+/** create the HTML of an input text entry */
+class Form_Checkbox extends Form_Entry
+{
+
+ public function __construct($entryName = null)
+ {
+ $this->entryName = $entryName;
+ }
+
+ public function render($value = null)
+ {
+ $wrap = $this->getWrapElements();
+ $returnString = "<div class='".$this->getEntryClass()."'>\n\t";
+ $returnString .= $wrap[0];
+ $returnString .= $this->getLabelTag();
+ $returnString .= $wrap[1];
+ $returnString .= Html_Form::checkbox($this->entryName, $value, $this->options, $this->className,$this->idName);
+ $returnString .= $wrap[2];
+ $returnString .="</div>\n";
+ return $returnString;
+ }
+
+}
diff --git a/h-source/admin/Library/Form/Entry.php b/h-source/admin/Library/Form/Entry.php
new file mode 100755
index 0000000..725235a
--- /dev/null
+++ b/h-source/admin/Library/Form/Entry.php
@@ -0,0 +1,45 @@
+<?php
+
+// All EasyGiant code is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
+// See COPYRIGHT.txt and LICENSE.txt.
+
+if (!defined('EG')) die('Direct access not allowed!');
+
+//base class of the form entries
+abstract class Form_Entry {
+
+ public $entryName = null; //the name of the entry
+ public $entryClass = null; //the class of the entry
+ public $idName = null; //the id of the input entry
+ public $className = null; //the class of the input entry
+ public $labelString = null; //label of the form
+ public $labelClass = null; //the class of the tag of the label
+ public $options = array(); //options (if the entry is a <select> entry or a radio button). Associative array or comma-divided list.
+ public $defaultValue = '';
+ public $wrap = array();
+ public $type = null; //the type of the entry
+
+ //create the label of each entry of the form
+ public function getLabelTag()
+ {
+ $labelTagClass = isset($this->labelClass) ? $this->labelClass : 'entryLabel';
+ return isset($this->labelString) ? "<label class='$labelTagClass'>".$this->labelString."</label>\n\t" : null;
+ }
+
+ //get the class of the entry
+ public function getEntryClass()
+ {
+ return isset($this->entryClass) ? $this->entryClass : 'formEntry';
+ }
+
+ public function getWrapElements()
+ {
+ $wrap[0] = isset($this->wrap[0]) ? $this->wrap[0] : null;
+ $wrap[1] = isset($this->wrap[1]) ? $this->wrap[1] : null;
+ $wrap[2] = isset($this->wrap[2]) ? $this->wrap[2] : null;
+ return $wrap;
+ }
+
+ abstract public function render($value = null);
+
+}
diff --git a/h-source/admin/Library/Form/Form.php b/h-source/admin/Library/Form/Form.php
new file mode 100755
index 0000000..00e27d4
--- /dev/null
+++ b/h-source/admin/Library/Form/Form.php
@@ -0,0 +1,116 @@
+<?php
+
+// All EasyGiant code is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
+// See COPYRIGHT.txt and LICENSE.txt.
+
+if (!defined('EG')) die('Direct access not allowed!');
+
+//create the HTML of the whole form
+class Form_Form {
+
+ public $entry = array(); //associative array containing the entries of the form (objects that inherit the class form_entryModel). Each element of the array corresponds to one field of the table
+
+ public $action = null; //the action of the form
+ public $name = null; //the name of the form
+ public $className = 'formClass'; //the class of the form
+ public $id = null;
+ public $submit = array(); //the submit entries array('name'=>'value')
+ public $method = 'POST'; //the transmission method: POST/GET
+
+ public function __construct($action,$submit = array('generalAction'=>'save'),$method = 'POST')
+ {
+ $this->action = $action; //action of the form: controller/action
+ $this->submit = $submit;
+ $this->method = $method;
+ }
+
+ //method to manage the $this->entry associative array
+ //entryType: the type of the object to be initialized, $entryName: the name of the entry
+ //$options: the list of options (if the entry is a <select> entry)
+ public function setEntry($entryName,$entryType,$options = null)
+ {
+ $entryObjName = 'Form_'.$entryType;
+ if (!class_exists($entryObjName))
+ {
+ throw new Exception("class <b>$entryObjName</b> not defined: the entry <b>$entryName</b> can't be set");
+ }
+ $this->entry[$entryName] = new $entryObjName($entryName);
+ $this->entry[$entryName]->labelString = $entryName.':';
+ //set the type
+ $this->entry[$entryName]->type = $entryType;
+ if (isset($options))
+ {
+ $this->entry[$entryName]->options = $options;
+ }
+ }
+
+ //set all the entries
+ //$entryStruct : the struct of the entries
+ public function setEntries($entryStruct = array())
+ {
+ foreach ($entryStruct as $name => $entry)
+ {
+ $type = array_key_exists('type',$entry) ? $entry['type'] : 'InputText';
+ $options = array_key_exists('options',$entry) ? $entry['options'] : null;
+ $this->setEntry($name,$type,$options);
+
+ $entryClass = array_key_exists('entryClass',$entry) ? $entry['entryClass'] : null;
+ $labelString = array_key_exists('labelString',$entry) ? $entry['labelString'] : "$name:";
+ $idName = array_key_exists('idName',$entry) ? $entry['idName'] : null;
+ $className = array_key_exists('className',$entry) ? $entry['className'] : null;
+ $labelClass = array_key_exists('labelClass',$entry) ? $entry['labelClass'] : null;
+ $defaultValue = array_key_exists('defaultValue',$entry) ? $entry['defaultValue'] : null;
+ $wrap = array_key_exists('wrap',$entry) ? $entry['wrap'] : array();
+
+ $this->entry[$name]->entryClass = $entryClass;
+ $this->entry[$name]->labelString = $labelString;
+ $this->entry[$name]->idName = $idName;
+ $this->entry[$name]->className = $className;
+ $this->entry[$name]->labelClass = $labelClass;
+ $this->entry[$name]->defaultValue = $defaultValue;
+ $this->entry[$name]->wrap = $wrap;
+ }
+ }
+
+ //function to create the HTML of the form
+ //$values: an associative array ('entryName'=>'value')
+ //$subset: subset to print
+ public function render($values = null, $subset = null)
+ {
+
+ if ($values === null)
+ {
+ $values = array();
+ foreach ($this->entry as $key => $value)
+ {
+ $values[$key] = $value->defaultValue;
+ }
+ }
+
+ $fid = isset($this->id) ? "id='".$this->id."'" : null;
+ $fname = isset($this->name) ? "name='".$this->name."'" : null;
+ $fclass = isset($this->className) ? "class='".$this->className."'" : null;
+ $htmlForm = "<form $fname $fclass $fid action='".Url::getRoot($this->action)."' method='".$this->method."'>\n";
+
+ $subset = (isset($subset)) ? explode(',',$subset) : array_keys($values);
+
+ foreach ($subset as $entry)
+ {
+
+ if (array_key_exists($entry,$this->entry))
+ {
+ $value = array_key_exists($entry,$values) ? $values[$entry] : $this->entry[$entry]->defaultValue;
+ $htmlForm .= $this->entry[$entry]->render($value);
+ }
+
+ }
+
+ foreach ($this->submit as $name => $value)
+ {
+ $htmlForm .= "<div class='inputEntry'>\n<input id='".$name."' type='submit' name='$name' value='$value'>\n</div>\n";
+ }
+ $htmlForm .= "</form>\n";
+ return $htmlForm;
+ }
+
+}
diff --git a/h-source/admin/Library/Form/Hidden.php b/h-source/admin/Library/Form/Hidden.php
new file mode 100755
index 0000000..fb81b30
--- /dev/null
+++ b/h-source/admin/Library/Form/Hidden.php
@@ -0,0 +1,23 @@
+<?php
+
+// All EasyGiant code is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
+// See COPYRIGHT.txt and LICENSE.txt.
+
+if (!defined('EG')) die('Direct access not allowed!');
+
+//create the HTML of an input hidden entry
+class Form_Hidden extends Form_Entry
+{
+
+ public function __construct($entryName = null)
+ {
+ $this->entryName = $entryName;
+ }
+
+ public function render($value = null)
+ {
+ $returnString = Html_Form::hidden($this->entryName, $value);
+ return $returnString;
+ }
+
+}
diff --git a/h-source/admin/Library/Form/Html.php b/h-source/admin/Library/Form/Html.php
new file mode 100644
index 0000000..dce91c6
--- /dev/null
+++ b/h-source/admin/Library/Form/Html.php
@@ -0,0 +1,23 @@
+<?php
+
+// All EasyGiant code is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
+// See COPYRIGHT.txt and LICENSE.txt.
+
+if (!defined('EG')) die('Direct access not allowed!');
+
+//create the HTML of an input text entry
+class Form_Html extends Form_Entry
+{
+
+ public function __construct($entryName = null)
+ {
+ $this->entryName = $entryName;
+ }
+
+ public function render($value = null)
+ {
+ $returnString = "<div class='".$this->getEntryClass()."'>\n\t$value\n</div>\n";
+ return $returnString;
+ }
+
+}
diff --git a/h-source/admin/Library/Form/InputText.php b/h-source/admin/Library/Form/InputText.php
new file mode 100755
index 0000000..fb98336
--- /dev/null
+++ b/h-source/admin/Library/Form/InputText.php
@@ -0,0 +1,30 @@
+<?php
+
+// All EasyGiant code is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
+// See COPYRIGHT.txt and LICENSE.txt.
+
+if (!defined('EG')) die('Direct access not allowed!');
+
+//create the HTML of an input text entry
+class Form_InputText extends Form_Entry
+{
+
+ public function __construct($entryName = null)
+ {
+ $this->entryName = $entryName;
+ }
+
+ public function render($value = null)
+ {
+ $wrap = $this->getWrapElements();
+ $returnString = "<div class='".$this->getEntryClass()."'>\n\t";
+ $returnString .= $wrap[0];
+ $returnString .= $this->getLabelTag();
+ $returnString .= $wrap[1];
+ $returnString .= Html_Form::input($this->entryName, $value, $this->className, $this->idName);
+ $returnString .= $wrap[2];
+ $returnString .="</div>\n";
+ return $returnString;
+ }
+
+}
diff --git a/h-source/admin/Library/Form/Password.php b/h-source/admin/Library/Form/Password.php
new file mode 100644
index 0000000..76bc735
--- /dev/null
+++ b/h-source/admin/Library/Form/Password.php
@@ -0,0 +1,30 @@
+<?php
+
+// All EasyGiant code is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
+// See COPYRIGHT.txt and LICENSE.txt.
+
+if (!defined('EG')) die('Direct access not allowed!');
+
+//create the HTML of an input text entry
+class Form_Password extends Form_Entry
+{
+
+ public function __construct($entryName = null)
+ {
+ $this->entryName = $entryName;
+ }
+
+ public function render($value = null)
+ {
+ $wrap = $this->getWrapElements();
+ $returnString = "<div class='".$this->getEntryClass()."'>\n\t";
+ $returnString .= $wrap[0];
+ $returnString .= $this->getLabelTag();
+ $returnString .= $wrap[1];
+ $returnString .= Html_Form::password($this->entryName, null, $this->className);
+ $returnString .= $wrap[2];
+ $returnString .="</div>\n";
+ return $returnString;
+ }
+
+}
diff --git a/h-source/admin/Library/Form/Radio.php b/h-source/admin/Library/Form/Radio.php
new file mode 100755
index 0000000..fb20677
--- /dev/null
+++ b/h-source/admin/Library/Form/Radio.php
@@ -0,0 +1,30 @@
+<?php
+
+// All EasyGiant code is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
+// See COPYRIGHT.txt and LICENSE.txt.
+
+if (!defined('EG')) die('Direct access not allowed!');
+
+//create the HTML of a radio entry
+class Form_Radio extends Form_Entry
+{
+
+ public function __construct($entryName = null)
+ {
+ $this->entryName = $entryName;
+ }
+
+ public function render($value = null)
+ {
+ $wrap = $this->getWrapElements();
+ $returnString = "<div class='".$this->getEntryClass()."'>\n\t";
+ $returnString .= $wrap[0];
+ $returnString .= $this->getLabelTag();
+ $returnString .= $wrap[1];
+ $returnString .= Html_Form::radio($this->entryName,$value,$this->options,$this->className, 'after', $this->idName);
+ $returnString .= $wrap[2];
+ $returnString .="</div>\n";
+ return $returnString;
+ }
+
+}
diff --git a/h-source/admin/Library/Form/Select.php b/h-source/admin/Library/Form/Select.php
new file mode 100755
index 0000000..558fd57
--- /dev/null
+++ b/h-source/admin/Library/Form/Select.php
@@ -0,0 +1,30 @@
+<?php
+
+// All EasyGiant code is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
+// See COPYRIGHT.txt and LICENSE.txt.
+
+if (!defined('EG')) die('Direct access not allowed!');
+
+//create the HTML of an select entry
+class Form_Select extends Form_Entry
+{
+
+ public function __construct($entryName = null)
+ {
+ $this->entryName = $entryName;
+ }
+
+ public function render($value = null)
+ {
+ $wrap = $this->getWrapElements();
+ $returnString = "<div class='".$this->getEntryClass()."'>\n\t";
+ $returnString .= $wrap[0];
+ $returnString .= $this->getLabelTag();
+ $returnString .= $wrap[1];
+ $returnString .= Html_Form::select($this->entryName,$value,$this->options,$this->className, $this->idName);
+ $returnString .= $wrap[2];
+ $returnString .="</div>\n";
+ return $returnString;
+ }
+
+}
diff --git a/h-source/admin/Library/Form/Textarea.php b/h-source/admin/Library/Form/Textarea.php
new file mode 100755
index 0000000..d81cc84
--- /dev/null
+++ b/h-source/admin/Library/Form/Textarea.php
@@ -0,0 +1,30 @@
+<?php
+
+// All EasyGiant code is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
+// See COPYRIGHT.txt and LICENSE.txt.
+
+if (!defined('EG')) die('Direct access not allowed!');
+
+//create the HTML of a textarea entry
+class Form_Textarea extends Form_Entry
+{
+
+ public function __construct($entryName = null)
+ {
+ $this->entryName = $entryName;
+ }
+
+ public function render($value = null)
+ {
+ $wrap = $this->getWrapElements();
+ $returnString = "<div class='".$this->getEntryClass()."'>\n\t";
+ $returnString .= $wrap[0];
+ $returnString .= $this->getLabelTag();
+ $returnString .= $wrap[1];
+ $returnString .= Html_Form::textarea($this->entryName, $value, $this->className, $this->idName);
+ $returnString .= $wrap[2];
+ $returnString .="</div>\n";
+ return $returnString;
+ }
+
+}
diff --git a/h-source/admin/Library/Form/index.html b/h-source/admin/Library/Form/index.html
new file mode 100644
index 0000000..8d1c8b6
--- /dev/null
+++ b/h-source/admin/Library/Form/index.html
@@ -0,0 +1 @@
+
diff --git a/h-source/admin/Library/Functions.php b/h-source/admin/Library/Functions.php
new file mode 100755
index 0000000..414770f
--- /dev/null
+++ b/h-source/admin/Library/Functions.php
@@ -0,0 +1,279 @@
+<?php
+
+// All EasyGiant code is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
+// See COPYRIGHT.txt and LICENSE.txt.
+
+if (!defined('EG')) die('Direct access not allowed!');
+
+
+/*
+ SANITIZE FUNCTIONS
+*/
+
+function none($string) {
+ return $string;
+}
+
+function forceInt($string) {
+ return (int)$string;
+}
+
+function forceNat($string)
+{
+ $string = (int)$string;
+ if ($string <= 0) return 1;
+ return $string;
+}
+
+function sanitizeDb($stringa) {
+
+ if (DATABASE_TYPE === 'Mysql')
+ {
+ $stringa = mysql_real_escape_string($stringa);
+ return $stringa;
+ }
+
+ if (DATABASE_TYPE === 'Mysqli')
+ {
+ $mysqli = Db_Mysqli::getInstance();
+ $db = $mysqli->getDb();
+ $stringa = $db->real_escape_string($stringa);
+ return $stringa;
+ }
+
+ return $stringa;
+}
+
+function sanitizeAll($stringa) {
+
+ $stringa=sanitizeHtml($stringa);
+ $stringa=sanitizeDb($stringa);
+ return $stringa;
+
+}
+
+function sanitizeHtml($stringa) {
+
+ $charset = Params::$htmlentititiesCharset;
+ $stringa=htmlentities($stringa,ENT_QUOTES,$charset);
+ return $stringa;
+
+}
+
+//check if only alphabetic + optional characters are present in the string $string. Set $string to $altString if other characters are found
+//$optChar: allowed characters divided by '|' Ex: '+|-|;'
+function sanitizeCustom($string,$optChar,$altString = 'EasyGiant')
+{
+
+ $optChar = html_entity_decode($optChar,ENT_QUOTES);
+ $optCharArray = explode('|',$optChar);
+ $temp = $string;
+ foreach($optCharArray as $char)
+ {
+ $temp = str_replace($char,null,$temp);
+ }
+ if (ctype_alnum($temp))
+ {
+ return $string;
+ }
+ else
+ {
+ return $altString;
+ }
+}
+
+
+
+
+/*
+SANITIZE DEEP
+*/
+
+function stripslashesDeep($value) {
+ if(get_magic_quotes_gpc()) {#if stripslashes
+ return array_map('stripslashes', $value);
+ }
+ return $value;
+}
+
+
+function sanitizeHtmlDeep($value) {
+ return array_map('sanitizeHtml', $value);
+}
+
+
+function sanitizeDbDeep($value) {
+ return array_map('sanitizeDb', $value);
+}
+
+
+function sanitizeCustomDeep($stringArray,$optChar,$altString = 'EasyGiant')
+{
+ $result = array();
+ foreach ($stringArray as $key => $value)
+ {
+ $result[$key] = sanitizeCustom($value,$optChar,$altString);
+ }
+ return $result;
+}
+
+
+function sanitizeAllDeep($value) {
+ return array_map('sanitizeAll', $value);
+}
+
+
+function forceIntDeep($value) {
+ return array_map('forceInt', $value);
+}
+
+function forceNatDeep($value) {
+ return array_map('forceNat', $value);
+}
+
+function noneDeep($value) {
+ return array_map('none', $value);
+}
+
+
+function md5Deep($value)
+{
+ return array_map('md5', $value);
+}
+
+function sha1Deep($value)
+{
+ return array_map('sha1', $value);
+}
+
+
+
+
+
+
+
+function sanitizeAlnum($string)
+{
+ return ctype_alnum($string) ? sanitizeAll($string) : '';
+}
+
+
+function sanitizeIp($ip)
+{
+ return preg_match('/^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$/',$ip) ? sanitizeAll($ip) : '';
+}
+
+
+/*
+ CHECK FUNCTIONS
+*/
+
+//check if a string has the mail format (abc.efg@hij.klm.on)
+//modification of the rule found at http://www.sastgroup.com/tutorials/8-espressioni-regolari-per-validare-un-po-di-tutto
+//original rule: /^[^0-9][a-zA-Z0-9_]+([.][a-zA-Z0-9_]+)*[@][a-zA-Z0-9_]+([.][a-zA-Z0-9_]+)*[.][a-zA-Z]{2,4}$/
+function checkMail($string)
+{
+ if (preg_match('/^[a-zA-Z0-9_\-]+([.][a-zA-Z0-9_\-]+){0,2}[@][a-zA-Z0-9_\-]+([.][a-zA-Z0-9_\-]+){0,2}[.][a-zA-Z]{2,4}$/',$string))
+ {
+ return true;
+ }
+ else
+ {
+ return false;
+ }
+}
+
+
+
+function wrap($string,$tag_class) {#wrap the string with the tag and its class
+ #$tag_class has to be an associative array (tag1=>class1,$tag2=>class2,.. )!!
+ $str_front=null;
+ $str_rear=null;
+ if (is_array($tag_class)) {
+ foreach ($tag_class as $tag => $class) {
+ $tag = str_replace('+','',$tag);
+ $str_class=isset($class) ? " class=\"".$class."\"" : null;
+ $str_front.="<".$tag.$str_class.">\n";
+ $str_rear.="</".$tag.">\n";
+ }
+ }
+ return $str_front.$string.$str_rear;
+}
+
+//generate a random password
+//$start: start number of mt_rand
+//$end: end number of mt_rand
+function randString($length,$start = 33, $end = 126)
+{
+ $random = '';
+ for ($i = 0; $i < $length; $i++)
+ {
+ $random .= chr(mt_rand($start, $end));
+ }
+ return $random;
+}
+
+//generate a random string
+//$charNumb:number of characters of the final string
+//$allowedChars: allowed characters
+function generateString($charNumb = 8,$allowedChars = '0123456789abcdefghijklmnopqrstuvwxyz')
+{
+ $str = null;
+ for ($i = 0; $i < $charNumb; $i++)
+ {
+ $str .= substr($allowedChars, mt_rand(0, strlen($allowedChars)-1), 1);
+ }
+ return $str;
+}
+
+
+function getIp()
+{
+ $ip = "";
+
+ if (isset($_SERVER))
+ {
+ if (!empty($_SERVER["HTTP_X_FORWARDED_FOR"]))
+ {
+ $ip = sanitizeIp($_SERVER["HTTP_X_FORWARDED_FOR"]);
+ } else if (!empty($_SERVER["HTTP_CLIENT_IP"])) {
+ $ip = sanitizeIp($_SERVER["HTTP_CLIENT_IP"]);
+ } else {
+ $ip = sanitizeIp($_SERVER["REMOTE_ADDR"]);
+ }
+ } else {
+ if ( getenv( 'HTTP_X_FORWARDED_FOR' ) !== false ) {
+ $ip = sanitizeIp(getenv( 'HTTP_X_FORWARDED_FOR' ));
+ } else if ( getenv( 'HTTP_CLIENT_IP' ) !== false ) {
+ $ip = sanitizeIp(getenv( 'HTTP_CLIENT_IP' ));
+ } else {
+ $ip = sanitizeIp(getenv( 'REMOTE_ADDR' ));
+ }
+ }
+ return $ip;
+}
+
+
+
+function getUserAgent() {
+ if (isset($_SERVER['HTTP_USER_AGENT']))
+ {
+ return md5($_SERVER['HTTP_USER_AGENT']);
+ }
+ else
+ {
+ return md5('firefox');
+ }
+}
+
+
+function xml_encode($string)
+{
+ $trans = get_html_translation_table(HTML_ENTITIES, ENT_QUOTES);
+ foreach ($trans as $k=>$v)
+ {
+ $trans[$k]= "&#".ord($k).";";
+ }
+
+ return strtr($string, $trans);
+} \ No newline at end of file
diff --git a/h-source/admin/Library/HeaderObj.php b/h-source/admin/Library/HeaderObj.php
new file mode 100644
index 0000000..f4fe65b
--- /dev/null
+++ b/h-source/admin/Library/HeaderObj.php
@@ -0,0 +1,28 @@
+<?php
+
+// All EasyGiant code is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
+// See COPYRIGHT.txt and LICENSE.txt.
+
+if (!defined('EG')) die('Direct access not allowed!');
+
+//manage the header
+class HeaderObj {
+
+ private $domainName; //the base path of the website (domainname)
+
+ public function __construct($domainName)
+ {
+ $this->domainName = $domainName;
+ }
+
+ //redirect to $path after the time $time
+ //string that appears until the page is redirected
+ public function redirect($path,$time = 0,$string = null)
+ {
+ $completePath = Url::getRoot().$path;
+ header('Refresh: '.$time.';url='.$completePath);
+ if (isset($string)) echo $string;
+ exit;
+ }
+
+}
diff --git a/h-source/admin/Library/Helper/Array.php b/h-source/admin/Library/Helper/Array.php
new file mode 100755
index 0000000..32a4c27
--- /dev/null
+++ b/h-source/admin/Library/Helper/Array.php
@@ -0,0 +1,11 @@
+<?php
+
+// All EasyGiant code is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
+// See COPYRIGHT.txt and LICENSE.txt.
+
+if (!defined('EG')) die('Direct access not allowed!');
+
+//Helper class to manage arrays
+class Helper_Array extends ArrayExt {
+
+} \ No newline at end of file
diff --git a/h-source/admin/Library/Helper/Html.php b/h-source/admin/Library/Helper/Html.php
new file mode 100755
index 0000000..b3648be
--- /dev/null
+++ b/h-source/admin/Library/Helper/Html.php
@@ -0,0 +1,14 @@
+<?php
+
+// All EasyGiant code is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
+// See COPYRIGHT.txt and LICENSE.txt.
+
+if (!defined('EG')) die('Direct access not allowed!');
+
+//base class of all the Helper classes that returns HTML
+class Helper_Html {
+
+ public $viewArgs = array(); //arguments of the view action (to mantain the status, ex: page,language,etc)
+ public $viewStatus = null; //additional string to the url to define the status of the view action (ex: page,language,etc)
+
+} \ No newline at end of file
diff --git a/h-source/admin/Library/Helper/List.php b/h-source/admin/Library/Helper/List.php
new file mode 100755
index 0000000..660ac67
--- /dev/null
+++ b/h-source/admin/Library/Helper/List.php
@@ -0,0 +1,278 @@
+<?php
+
+// All EasyGiant code is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
+// See COPYRIGHT.txt and LICENSE.txt.
+
+if (!defined('EG')) die('Direct access not allowed!');
+
+//class to create the HTML for the view action
+class Helper_List extends Helper_Html {
+
+ protected $_itemsList = array(); //2-dimensional associative array containing the list items
+ //keys: type,table:field,controller/action,value
+ protected $_head = array(); //2-dimensional array containing the head of the table
+ protected $_identifierName;
+
+ protected $_recordNumber = null; //number of records from the table
+
+ protected $_allowedItems = array('simpleLink','simpleText','delForm','editForm','associateForm','moveupForm','movedownForm'); //type of items allowed
+
+ //set if the submit buttons have to be images or not (it can be yse or not)
+ public $submitImageType = 'no';
+
+ //set the files of the images
+ public $submitImages = array(
+ 'edit' => null,
+ 'del' => null,
+ 'up' => null,
+ 'down' => null,
+ 'link' => null
+ );
+
+ //set the titles of the input:submit
+ public $submitTitles = array(
+ 'edit' => 'edit the record',
+ 'del' => 'delete the record',
+ 'up' => 'move up the record',
+ 'down' => 'move down the record',
+ 'link' => 'associate the record'
+ );
+
+ //$position: array. First element: page number, second element: number of pages
+ public $position = array();
+
+ //it can be: both, top, bottom, none
+ protected $_boundaries = 'none';
+
+ public function build($identifierName = 'identifier')
+ {
+ $this->_identifierName = $identifierName;
+ }
+
+ public function setIdentifierName($identifierName)
+ {
+ $this->_identifierName = $identifierName;
+ }
+
+ //add a list Item. $type: the type of the item, $field: the table.field to exctract (use colon to separate the table and the field),$action: controller/action,$value=if type == link->the value of the link
+ public function addItem($type, $action = '', $field = '', $name = '') {
+ if (!in_array($type,$this->_allowedItems)) {
+ throw new Exception('"'.$type. '" argument not allowed in '.__METHOD__.' method');
+ }
+ $temp=array();
+ $temp['type'] = $type;
+ $temp['action'] = $action;
+ $temp['field'] = $field;
+ $temp['name'] = $name;
+ $this->_itemsList[] = $temp;
+
+ //set the $this->_head array
+ $head = array();
+ $head['type'] = $type;
+
+ if ($type === 'simpleText') {
+ $head['action'] = $this->extractFieldName($action);
+ } else {
+ $head['action'] = '&nbsp';
+ }
+ $this->_head[] = $head;
+ }
+
+
+ //set the head of the table
+ //$columnsName: name of the columns. It has to be a comma-separated list of strings
+ public function setHead($columnsName = '')
+ {
+ //get the array from the list
+ $columnsArray = explode(',',$columnsName);
+ for ($i = 0; $i < count($columnsArray); $i++)
+ {
+ if ($i < count($this->_itemsList)) $this->_head[$i]['action'] = $columnsArray[$i];
+ }
+ }
+
+
+ //$method to extract the field name from the $action string (;table:field;)
+ public function extractFieldName($string) {
+ $string = str_replace(';','',$string);
+ return $string;
+ }
+
+ //replace the strings wrapped by ; with their correspondent value taken by the $recordArray associative array (a row of the select query)
+ public function replaceFields($string,$rowArray) {
+ $stringArray = explode(';',$string);
+ for ($i = 0; $i < count($stringArray); $i++) {
+ if (strstr($stringArray[$i],':')) {
+ //check if a function has been indicated
+ if (strstr($stringArray[$i],'|'))
+ {
+ //get the function
+ $firstArray = explode('|',$stringArray[$i]);
+ $func = $firstArray[0];
+ //replace the fields
+ $temp = explode(':',$firstArray[1]);
+ $stringArray[$i] = $rowArray[$temp[0]][$temp[1]];
+
+ if (!function_exists($func)) {
+ throw new Exception('Error in <b>'.__METHOD__.'</b>: function <b>'.$func.'</b> does not exists..');
+ }
+ //apply the function
+ $stringArray[$i] = call_user_func($func,$stringArray[$i]);
+ }
+ else
+ {
+ $temp = explode(':',$stringArray[$i]);
+ $stringArray[$i] = $rowArray[$temp[0]][$temp[1]];
+ }
+ }
+ }
+ return implode('',$stringArray);
+ }
+
+ //call the method replaceFields upon the $items array using the associative array $rowArray
+ public function replaceAll($item,$rowArray) {
+ $item['action'] = $this->replaceFields($item['action'],$rowArray);
+ $item['field'] = $this->replaceFields($item['field'],$rowArray);
+ $item['name'] = $this->replaceFields($item['name'],$rowArray);
+ return $item;
+ }
+
+ //wrap the column with the tag td
+ public function wrapColumn($string, $className = null) {
+ return wrap($string,array('td'=>$className));
+ }
+
+ //wrap the row with the tag tr
+ public function wrapRow($string,$className = null) {
+ return wrap($string,array('tr'=>$className));
+ }
+
+ public function wrapList($string) {
+ return wrap($string,array('table'=>'listTable'));
+ }
+
+ //method to create the HTML of the head of the table
+ public function createHead() {
+ $htmlHead = null;
+ foreach ($this->_head as $item) {
+ $temp = $item['action'];
+ $htmlHead .= $this->wrapColumn($temp,$item['type']);
+ }
+ return $htmlHead;
+ }
+
+ //create the HTML of a single row (values taken from the associative array $rowArray)
+ public function getRowList($rowArray) {
+ $htmlList = null;
+ foreach ($this->_itemsList as $item) {
+ $item = $this->replaceAll($item,$rowArray);
+
+ if (($this->_boundaries === 'top' and $item['type'] === 'moveupForm') or ($this->_boundaries === 'bottom' and $item['type'] === 'movedownForm') or ($this->_boundaries === 'both' and ($item['type'] === 'moveupForm' or $item['type'] === 'movedownForm')))
+ {
+ $htmlList .= $this->wrapColumn('&nbsp',$item['type']);
+ }
+ else
+ {
+ $temp = call_user_func_array(array($this,$item['type']),array($item));
+ $htmlList .= $this->wrapColumn($temp,$item['type']);
+ }
+ }
+ return $htmlList;
+ }
+
+ //$index: record number
+ public function ifInBoundaries($index)
+ {
+ $this->_boundaries = 'none';
+
+ if (!empty($this->position))
+ {
+ if ($this->_recordNumber === 1 and strcmp($this->position[0],1) === 0)
+ {
+ $this->_boundaries = 'both';
+ }
+ else if ($index === 0 and strcmp($this->position[0],1) === 0)
+ {
+ $this->_boundaries = 'top';
+ }
+ else if ($index === ($this->_recordNumber-1) and strcmp($this->position[0],$this->position[1]) === 0)
+ {
+ $this->_boundaries = 'bottom';
+ }
+ }
+
+ }
+
+ //create the HTML of the entire list. $queryResult: the array coming from the select query
+ public function render($queryResult)
+ {
+ //set the number of records
+ $this->_recordNumber = count($queryResult);
+ $htmlList = null;
+ //create the HTML of the head of the record list
+ $htmlList .= $this->wrapRow($this->createHead(),'listHead');
+ for ($i = 0; $i < count($queryResult); $i++)
+ {
+ $this->ifInBoundaries($i);
+ $temp = $this->getRowList($queryResult[$i]);
+ $htmlList .= $this->wrapRow($temp,'listRow');
+ }
+ return $this->wrapList($htmlList);
+ }
+
+ public function generalForm($itemArray, $submitName, $submitValue)
+ {
+ $string = "<form class='listItemForm' action='".Url::getRoot(null).$itemArray['action'].$this->viewStatus."' method='POST'>\n";
+ $name = (strcmp($itemArray['name'],'') !== 0) ? $itemArray['name'] : $submitName;
+
+ if (strcmp($this->submitImageType,'yes') === 0)
+ {
+ $string .= "<input type='image' title='".$this->submitTitles[$submitValue]."' src='".$this->submitImages[$submitValue]."' value='$submitValue'>\n";
+ $string .= "<input type='hidden' name='".$name."' value='$submitValue'>\n";
+ }
+ else
+ {
+ $string .= "<input type='submit' title='".$this->submitTitles[$submitValue]."' name='".$name."' value='$submitValue'>\n";
+ }
+
+ $string .= "<input type='hidden' name='".$this->_identifierName."' value='".$itemArray['field']."'>\n";
+ $string .= "</form>\n";
+ return $string;
+ }
+
+ public function moveupForm($itemArray)
+ {
+ return $this->generalForm($itemArray, 'moveupAction', 'up');
+ }
+
+ public function movedownForm($itemArray)
+ {
+ return $this->generalForm($itemArray, 'movedownAction', 'down');
+ }
+
+ public function editForm($itemArray)
+ {
+ return $this->generalForm($itemArray, 'generalAction', 'edit');
+ }
+
+ public function delForm($itemArray)
+ {
+ return $this->generalForm($itemArray, 'delAction', 'del');
+ }
+
+ public function associateForm($itemArray)
+ {
+ return $this->generalForm($itemArray, 'generalAction', 'link');
+ }
+
+ public function simpleText($itemArray) {
+ $string = "<span class='textItem'>".$itemArray['action']."</span>\n";
+ return $string;
+ }
+
+ public function simpleLink($itemArray) {
+ $string = "<a class='linkItem' href='".Url::getRoot(null).$itemArray['action'].$this->viewStatus."'>".$itemArray['name']."</a>\n";
+ return $string;
+ }
+
+} \ No newline at end of file
diff --git a/h-source/admin/Library/Helper/Menu.php b/h-source/admin/Library/Helper/Menu.php
new file mode 100755
index 0000000..119ada8
--- /dev/null
+++ b/h-source/admin/Library/Helper/Menu.php
@@ -0,0 +1,75 @@
+<?php
+
+// All EasyGiant code is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
+// See COPYRIGHT.txt and LICENSE.txt.
+
+if (!defined('EG')) die('Direct access not allowed!');
+
+//class to write the top menù of the view files
+class Helper_Menu extends Helper_Html
+{
+
+ public $panelController; //panel controller
+ public $controller;
+
+ public $links = array(
+
+ 'back' => array(
+ 'title' => 'back',
+ 'class' => 'mainMenuItem',
+ 'text' => 'Back',
+ 'url' => 'main'
+ ),
+
+ 'add' => array(
+ 'title' => 'add a new record',
+ 'class' => 'mainMenuItem',
+ 'text' => 'Add',
+ 'url' => 'form/insert'
+ ),
+
+ 'panel' => array(
+ 'title' => 'back to the Panel',
+ 'class' => 'mainMenuItem',
+ 'text' => 'Panel',
+ 'url' => 'main'
+ )
+
+ );
+
+ public function build($controller = null, $panelController = null)
+ {
+ $this->controller = $controller;
+ $this->panelController = $panelController;
+ }
+
+ //$voices: comma-separated list of links you want to print
+ public function render($linksList)
+ {
+ $linksArray = explode(',',$linksList);
+ $menu = null;
+ foreach ($linksArray as $linkName)
+ {
+ //check that the voice exists
+ if (array_key_exists($linkName,$this->links))
+ {
+ //check that the text and the ure are defined
+ if (isset($this->links[$linkName]['text']) and isset($this->links[$linkName]['url']))
+ {
+ $title = isset($this->links[$linkName]['title']) ? "title='".$this->links[$linkName]['title']."'" : null;
+ $class = isset($this->links[$linkName]['class']) ? "class='".$this->links[$linkName]['class']."'" : null;
+
+ //choose the controller (current or panel)
+ $controller = (strcmp($linkName,'panel') === 0) ? $this->panelController.'/' : $this->controller.'/';
+ $viewStatus = (strcmp($linkName,'panel') === 0) ? null : $this->viewStatus;
+
+ $href = Url::getRoot($controller.$this->links[$linkName]['url'].$viewStatus);
+ $text = $this->links[$linkName]['text'];
+ $menu .= "<div $class><a $title href='$href'>$text</a></div>\n";
+ }
+ }
+ }
+ return $menu;
+ }
+
+} \ No newline at end of file
diff --git a/h-source/admin/Library/Helper/Pages.php b/h-source/admin/Library/Helper/Pages.php
new file mode 100755
index 0000000..eec58f6
--- /dev/null
+++ b/h-source/admin/Library/Helper/Pages.php
@@ -0,0 +1,108 @@
+<?php
+
+// All EasyGiant code is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
+// See COPYRIGHT.txt and LICENSE.txt.
+
+if (!defined('EG')) die('Direct access not allowed!');
+
+//Helper class to create the HTML of the page division list
+class Helper_Pages extends Helper_Html
+{
+
+ protected $_urlViewAction; //url of the current page
+ protected $_currentPage; //number of the page
+ protected $_numbOfPages; //number of pages
+ protected $_variableArg = ''; //value of the $viewArgs key that has to be modified
+
+ public $previousString; //string of the link to the previous page
+ public $nextString; //string of the link to the next page
+
+ public function build($urlViewAction = '' , $variableArg = 'page', $previousString = 'previous', $nextString = 'next')
+ {
+
+ $this->_variableArg = $variableArg;
+ $this->_urlViewAction =$urlViewAction; //url of the controller and (/) main action
+ $this->previousString = $previousString;
+ $this->nextString = $nextString;
+
+ }
+
+ //return the number of pages
+ public function getNumbOfPages()
+ {
+ return $this->_numbOfPages;
+ }
+
+ //get the limit of the select query clause
+ public function getLimit($currentPage,$recordNumber,$recordPerPage)
+ {
+ $this->_currentPage = $currentPage;
+ $this->_numbOfPages=(($recordNumber%$recordPerPage)===0) ? (int) ($recordNumber/$recordPerPage) : ((int) ($recordNumber/$recordPerPage))+1;
+ $start=(($currentPage-1)*$recordPerPage);
+ return "$start,$recordPerPage";
+ }
+
+ //return the page list string
+ public function render($pageNumber,$numberOfPages)
+ {
+ $pageList = null;
+ $pageList .= $this->pageLink($this->_currentPage-1,$this->previousString);
+ $pageList .= $this->recursiveLink($pageNumber,$numberOfPages);
+ $pageList .= $this->pageLink($this->_currentPage+1,$this->nextString);
+ return $pageList;
+ }
+
+ //recorsive function in order to write the page list
+ public function recursiveLink($pageNumber,$numberOfPages)
+ {
+
+ if ($numberOfPages === 0) return null;
+
+ if ($numberOfPages === 1) {
+ return $this->pageLink($pageNumber);
+ } else {
+ return $this->pageLink($pageNumber) . $this->recursiveLink($pageNumber+1,$numberOfPages-1);
+ }
+ }
+
+ public function pageLink($pageNumber, $string = null) {
+ if ($pageNumber > 0 and $pageNumber <= $this->_numbOfPages) {
+ return $this->html($pageNumber,$string);
+ } else {
+ return null;
+ }
+ }
+
+ //return the html link
+ public function html($pageNumber,$string = null) {
+ if (isset($string)) {
+ $strNumber = $string;
+ $strClass = "class='itemListPage'";
+ } else {
+ if ($pageNumber === $this->_currentPage)
+ {
+ $strNumber = $pageNumber;
+ $strClass = "class='currentPage'";
+ }
+ else
+ {
+ $strNumber = $pageNumber;
+ $strClass = "class='itemListPage'";
+ }
+ }
+ $this->viewArgs[$this->_variableArg] = $pageNumber;
+ $viewStatus = Url::createUrl(array_values($this->viewArgs));
+ $href= Url::getRoot(null) . $this->_urlViewAction .$viewStatus;
+ return $this->getATag($href,$strNumber,$strClass);
+ }
+
+ //get the HTMl of the tag
+ //$href: href of the link
+ //$text: the text of the link
+ //$strClass: the class of the link
+ public function getATag($href,$text,$strClass)
+ {
+ return "<a $strClass href='$href'>$text</a>";
+ }
+
+} \ No newline at end of file
diff --git a/h-source/admin/Library/Helper/Popup.php b/h-source/admin/Library/Helper/Popup.php
new file mode 100755
index 0000000..9ceac72
--- /dev/null
+++ b/h-source/admin/Library/Helper/Popup.php
@@ -0,0 +1,87 @@
+<?php
+
+// All EasyGiant code is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
+// See COPYRIGHT.txt and LICENSE.txt.
+
+if (!defined('EG')) die('Direct access not allowed!');
+
+//class to create the popup menu
+class Helper_Popup extends Helper_Html {
+
+ public $popupArray = array(); //array of popup objects (see popup.php)
+ public $url = null; //the url (controller/action) to link by means of the popup menù
+// public $fieldArg = null; //the key of the viewArgs array to set to the field in the where clause
+// public $valueArg = null; //the key of the viewArgs array to be set to the value in the where clause
+ public $pageArg = null; //the key of the viewArgs array representing the page number. $this->viewArgs[$this->pageArg] is set to 1 if $this->pageArg !== null
+
+ //the type of the popup. If type !=exclusive, than each voice selected is added to the where clause. If type=exclusive, the selection of a popup voice causes the unselection of the other voices
+ public $type = null;
+
+ //list of popup names
+ public $popupItems = array();
+
+ public function build($url, $popupArray = null, $type = 'exclusive', $pageArg = null) {
+ $this->url = $url;
+ $this->popupArray = $popupArray;
+ $this->pageArg = $pageArg;
+ $this->type = $type;
+
+ foreach ($this->popupArray as $field => $popup)
+ {
+ $this->popupItems[] = $field;
+ }
+ }
+
+ //check that the ViewArgs array is complete
+ public function checkViewArgs()
+ {
+ foreach ($this->popupArray as $field => $popup)
+ {
+ if (!array_key_exists($field,$this->viewArgs)) return false;
+ }
+ return true;
+ }
+
+ //unselect the voices different from the current one
+ public function unselect($currentVoice)
+ {
+ foreach ($this->popupItems as $item)
+ {
+ if (strcmp($item,$currentVoice) !== 0) $this->viewArgs[$item] = Params::$nullQueryValue;
+ }
+ }
+
+ public function render() {
+ $returnString = null;
+ if ($this->checkViewArgs())
+ {
+ if (isset($this->viewArgs[$this->pageArg]))
+ {
+ $this->viewArgs[$this->pageArg] = 1;
+ }
+ foreach ($this->popupArray as $field => $popup)
+ {
+ if ($this->type === 'exclusive') $this->unselect($field);
+ //save the value of the current ViewArg
+ $tempArg = $this->viewArgs[$field];
+ $returnString .= "<ul onMouseOver='DisplayTag(this,\"block\");' onMouseOut='DisplayTag(this,\"none\");' id='menuBlock'><li class='innerItem'>".$popup->name."<ul class='innerList'>\n";
+ for ($i = 0; $i < count($popup->itemsValue); $i++)
+ {
+ $this->viewArgs[$field] = $popup->itemsValue[$i];
+ $viewStatus = Url::createUrl(array_values($this->viewArgs));
+ $returnString .= "<li><a href='".Url::getRoot($this->url).$viewStatus."'>".$popup->itemsName[$i]."</a></li>\n";
+ }
+ $this->viewArgs[$field] = Params::$nullQueryValue;
+ $viewStatus = Url::createUrl(array_values($this->viewArgs));
+ $returnString .= "<li><a href='".Url::getRoot($this->url).$viewStatus."'>All</a></li>\n";
+ $returnString .= "</ul>\n</li>\n</ul>\n";
+ $this->viewArgs[$field] = $tempArg;
+ }
+ if (count($this->popupArray)>0) {
+ $returnString .= "<script type=\"text/javascript\" src=\"http://".DOMAIN_NAME."/Public/Js/DisplayTag.js\"></script>\n";
+ }
+ }
+ return $returnString;
+ }
+
+} \ No newline at end of file
diff --git a/h-source/admin/Library/Helper/index.html b/h-source/admin/Library/Helper/index.html
new file mode 100644
index 0000000..8d1c8b6
--- /dev/null
+++ b/h-source/admin/Library/Helper/index.html
@@ -0,0 +1 @@
+
diff --git a/h-source/admin/Library/Hooks.php b/h-source/admin/Library/Hooks.php
new file mode 100644
index 0000000..fa005b9
--- /dev/null
+++ b/h-source/admin/Library/Hooks.php
@@ -0,0 +1,21 @@
+<?php
+
+// All EasyGiant code is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
+// See COPYRIGHT.txt and LICENSE.txt.
+
+if (!defined('EG')) die('Direct access not allowed!');
+
+//class to call the hooks
+class Hooks
+{
+
+ //include an hook file
+ public static function load($path)
+ {
+ if (file_exists($path))
+ {
+ include_once($path);
+ }
+ }
+
+} \ No newline at end of file
diff --git a/h-source/admin/Library/Html/Form.php b/h-source/admin/Library/Html/Form.php
new file mode 100644
index 0000000..bddc13f
--- /dev/null
+++ b/h-source/admin/Library/Html/Form.php
@@ -0,0 +1,168 @@
+<?php
+
+// All EasyGiant code is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
+// See COPYRIGHT.txt and LICENSE.txt.
+
+if (!defined('EG')) die('Direct access not allowed!');
+
+//create the HTML of the inputs of a form
+class Html_Form {
+
+ //return the HTML of a select
+ //$name: name of the select
+ //$value: the selected value of the select (set $value equal to null if you don't want to select an option)
+ //$options: options of the select. This param can be a comma-separated list of options or an associative array ('name'=>'value')
+ //$className: the class name of the select
+ //$idName: name of the id
+ static public function select($name, $value, $options, $className = null, $idName = null)
+ {
+ $strClass = isset($className) ? "class='".$className."'" : null;
+ $idStr = isset($idName) ? "id='".$idName."'" : null;
+
+ $returnString = null;
+ $returnString .= "<select ".$idStr." $strClass name='".$name."'>\n";
+ if (is_string($options)) {
+ $tempArray = explode(',',$options);
+ foreach ($tempArray as $item)
+ {
+ if (strstr($item,'optgroupOpen:'))
+ {
+ $temp = explode(':',$item);
+ $optionsArray[$temp[1]] = "optgroupOpen";
+ }
+ else
+ {
+ $optionsArray[$item] = $item;
+ }
+ }
+ }
+ else
+ {
+ $optionsArray = $options;
+ }
+
+ $flag = 0;
+ foreach ($optionsArray as $optionName => $optionValue) {
+ if (strcmp($optionValue,'optgroupOpen') === 0)
+ {
+ if ($flag === 1) $returnString .= "</optgroup>\n";
+ $returnString .= "<optgroup label=" . $optionName . ">\n";
+ $flag = 1;
+ }
+ else
+ {
+ $str= (strcmp($value,$optionValue) === 0) ? "selected='$optionValue'" : null;
+ $returnString .= "<option value='".$optionValue."' $str>$optionName</option>\n";
+ }
+ }
+ if ($flag === 1) $returnString .= "</optgroup>\n";
+ $returnString .= "</select>\n";
+ return $returnString;
+ }
+
+ //return the HTML of an <input type='text' ...>
+ //$name: the name of the input
+ //$value: the value of the input
+ //$className: the class name of the input
+ //$idName: name of the id
+ static public function input($name, $value, $className = null, $idName = null)
+ {
+ $strClass = isset($className) ? "class='".$className."'" : null;
+ $idStr = isset($idName) ? "id='".$idName."'" : null;
+
+ $returnString ="<input ".$idStr." $strClass type='text' name='" .$name. "' value = '$value'>\n";
+ return $returnString;
+ }
+
+ //return the HTML of a checkBox
+ //$name: name of the checkBox (string)
+ //$value: the value of the checkBox (string or number)
+ //$option: option of the checkBox (string or number)
+ //$className: the class name of the checkBox (string)
+ //$idName: name of the id
+ static public function checkbox($name, $value, $option, $className = null, $idName = null)
+ {
+ $strClass = isset($className) ? "class='".$className."'" : null;
+ $idStr = isset($idName) ? "id='".$idName."'" : null;
+
+ $str = (strcmp($value,$option) === 0) ? "checked = 'checked'" : null;
+ return "<input ".$idStr." $strClass type='checkbox' name='".$name."' value='".$option."' $str>\n";
+ }
+
+ //return the HTML of a hidden entry
+ //$name: name of the hidden entry (string)
+ //$value: the value of the hidden entry (string or number)
+ static public function hidden($name, $value)
+ {
+ return "<input type='hidden' name='" .$name. "' value = '$value'>\n";
+ }
+
+ //return the HTML of a password entry
+ //$name: name of the password entry (string)
+ //$value: the value of the password entry (string or number)
+ //$idName: name of the id
+ static public function password($name, $value, $className = null, $idName = null)
+ {
+ $strClass = isset($className) ? "class='".$className."'" : null;
+ $idStr = isset($idName) ? "id='".$idName."'" : null;
+
+ return "<input ".$idStr." $strClass type='password' name='" .$name. "' value='$value'>\n";
+ }
+
+ //return the HTML of a textarea
+ //$name: name of the textarea (string)
+ //$value: the value of the textarea (string or number)
+ //$idName: name of the id
+ static public function textarea($name, $value, $className = null, $idName = null)
+ {
+ $strClass = isset($className) ? "class='".$className."'" : null;
+ $idStr = isset($idName) ? "id='".$idName."'" : null;
+
+ return "<textarea ".$idStr." $strClass name='" .$name. "'>$value</textarea>\n";
+ }
+
+ //return the HTML of a radio button
+ //$name: name of the radio button
+ //$value: the selected value of the radio button (set $value equal to null if you don't want to select an option)
+ //$options: options of the radio button. This param can be a comma-separated list of options or an associative array ('name'=>'value')
+ //$className: the class name of the radio button
+ //$position: position of the strings of the radio with respect to the "circles". It can be before or after
+ //$idName: name of the id
+ static public function radio($name, $value, $options, $className = null, $position = 'after', $idName = null)
+ {
+ $strClass = isset($className) ? "class='".$className."'" : null;
+ $idStr = isset($idName) ? "id='".$idName."'" : null;
+
+ $returnString = null;
+
+ if (is_string($options)) {
+ $tempArray = explode(',',$options);
+ foreach ($tempArray as $item)
+ {
+ $optionsArray[$item] = $item;
+ }
+ } else {
+ $optionsArray = $options;
+ }
+
+ foreach ($optionsArray as $optionName => $optionValue) {
+
+ if ($position === 'before')
+ {
+ $before = $optionName;
+ $after = null;
+ }
+ else
+ {
+ $before = null;
+ $after = $optionName;
+ }
+
+ $str= (strcmp($value,$optionValue) === 0) ? "checked='checked'" : null;
+ $returnString .= "$before<input ".$idStr." $strClass type='radio' name='".$name."' value='".$optionValue."' $str>$after\n";
+ }
+
+ return $returnString;
+ }
+
+} \ No newline at end of file
diff --git a/h-source/admin/Library/Html/index.html b/h-source/admin/Library/Html/index.html
new file mode 100644
index 0000000..8d1c8b6
--- /dev/null
+++ b/h-source/admin/Library/Html/index.html
@@ -0,0 +1 @@
+
diff --git a/h-source/admin/Library/Image/Gd/Captcha.php b/h-source/admin/Library/Image/Gd/Captcha.php
new file mode 100644
index 0000000..ace4806
--- /dev/null
+++ b/h-source/admin/Library/Image/Gd/Captcha.php
@@ -0,0 +1,85 @@
+<?php
+
+// All EasyGiant code is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
+// See COPYRIGHT.txt and LICENSE.txt.
+
+if (!defined('EG')) die('Direct access not allowed!');
+
+//class to create a captcha
+//you have to call session_start() before to initialize a captcha object
+class Image_Gd_Captcha
+{
+
+ private $params = array(); //parameters of the object
+ private $string = null; //the text string of the captcha
+
+ public function __construct($params = null)
+ {
+ $here = realpath('.');
+
+ $defaultParams = array(
+ 'boxWidth' => 150,
+ 'boxHeight' => 100,
+ 'charNumber' => 6,
+ 'fontPath' => $here.'/External/Fonts/FreeFont/FreeMono.ttf',
+ 'undulation' => true,
+ 'align' => false,
+ 'charHeight' => 28
+ );
+
+ //set the $this->scaffold->params array
+ if (is_array($params))
+ {
+ foreach ($params as $key => $value)
+ {
+ $defaultParams[$key] = $value;
+ }
+ }
+ $this->params = $defaultParams;
+
+ $this->string = generateString($this->params['charNumber']);
+ }
+
+ public function render()
+ {
+ //space among characters
+ $space = $this->params['boxWidth'] / ($this->params['charNumber']+1);
+ //create the image box
+ $img = imagecreatetruecolor($this->params['boxWidth'],$this->params['boxHeight']);
+
+ $background = imagecolorallocate($img,255,255,255);
+ $border = imagecolorallocate($img,0,0,0);
+ $colors[] = imagecolorallocate($img,mt_rand(0,125),mt_rand(0,125),mt_rand(0,125));
+ $colors[] = imagecolorallocate($img,mt_rand(0,125),mt_rand(0,125),mt_rand(0,125));
+ $colors[] = imagecolorallocate($img,mt_rand(0,125),mt_rand(0,125),mt_rand(0,125));
+
+ //create the background
+ imagefilledrectangle($img,1,1,$this->params['boxWidth']-2,$this->params['boxHeight']-2,$background);
+ imagerectangle($img,0,0,$this->params['boxWidth']-1,$this->params['boxHeight']-2,$border);
+
+ //set the text
+ for ($i=0; $i< $this->params['charNumber']; $i++)
+ {
+ $color = $colors[$i % count($colors)];
+ $char = substr($this->string,$i,1);
+ $fontPath = $this->params['fontPath'];
+ $angle = $this->params['undulation'] === false ? 0 : -20+rand(0,40);
+ $yposFixed = (int)(($this->params['boxHeight'])/2);
+ $ypos = $this->params['align'] === true ? $yposFixed : $yposFixed + mt_rand(0,10);
+ $charHeight = $this->params['charHeight'];
+ imagettftext($img,$charHeight + rand(0,8),$angle,($i+0.3)*$space,$ypos,$color,$fontPath,$char);
+ }
+
+ $noiseColor = imagecolorallocate($img, mt_rand(125,255), mt_rand(125,255), mt_rand(125,255));
+ /* generate random dots in background */
+ for( $i=0; $i<($this->params['boxWidth'] * $this->params['boxHeight'])/7; $i++ ) {
+ imagefilledellipse($img, mt_rand(0,$this->params['boxWidth']), mt_rand(0,$this->params['boxHeight']), 1, 1, $noiseColor);
+ }
+
+ $_SESSION['captchaString'] = $this->string;
+ header('Content-Type: image/png');
+ imagepng($img);
+ imagedestroy($img);
+ }
+
+} \ No newline at end of file
diff --git a/h-source/admin/Library/Image/Gd/Thumbnail.php b/h-source/admin/Library/Image/Gd/Thumbnail.php
new file mode 100644
index 0000000..5981175
--- /dev/null
+++ b/h-source/admin/Library/Image/Gd/Thumbnail.php
@@ -0,0 +1,151 @@
+<?php
+
+// All EasyGiant code is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
+// See COPYRIGHT.txt and LICENSE.txt.
+
+if (!defined('EG')) die('Direct access not allowed!');
+
+//class to create a thumbnail
+class Image_Gd_Thumbnail
+{
+ const DS = DIRECTORY_SEPARATOR;
+
+ private $params = array(); //parameters of the object
+ private $basePath = null; //the path of the folder inside which the images are saved
+
+ public function __construct($basePath,$params = null)
+ {
+ $finalChar = $basePath[strlen($basePath) - 1];
+ if (strcmp($finalChar,self::DS) !== 0) $basePath .= self::DS;
+
+ $this->basePath = $basePath;
+
+ $defaultParams = array(
+ 'imgWidth' => 100,
+ 'imgHeight' => 100,
+ 'defaultImage' => null,
+ 'cropImage' => 'no',
+ 'horizAlign' => 'left',
+ 'vertAlign' => 'top'
+ );
+
+ //set the $this->scaffold->params array
+ if (is_array($params))
+ {
+ foreach ($params as $key => $value)
+ {
+ $defaultParams[$key] = $value;
+ }
+ }
+ $this->params = $defaultParams;
+ }
+
+ //create the thumbnail
+ //$imageName: the name of the file inside $this->basePath
+ public function render($imageFile)
+ {
+ $imagePath = $this->basePath . basename($imageFile);
+
+ if (!file_exists($imagePath) and isset($this->params['defaultImage'])) $imagePath = $this->params['defaultImage'];
+
+ $img = null;
+ $ext = strtolower(end(explode('.', $imagePath)));
+
+ if (strcmp($ext,'jpg') === 0 or strcmp($ext,'jpeg') === 0) {
+ $img = @imagecreatefromjpeg($imagePath);
+ } else if (strcmp($ext,'png') === 0) {
+ $img = @imagecreatefrompng($imagePath);
+ } else if (strcmp($ext,'gif') === 0) {
+ $img = @imagecreatefromgif($imagePath);
+ }
+
+ //If an image was successfully loaded, test the image for size
+ if ($img) {
+ //image size
+ $width = imagesx($img);
+ $height = imagesy($img);
+
+ if ($this->params['cropImage'] === 'no')
+ {
+ $scale = min($this->params['imgWidth']/$width, $this->params['imgHeight']/$height);
+ }
+ else if ($this->params['cropImage'] === 'yes')
+ {
+ $scale = max($this->params['imgWidth']/$width, $this->params['imgHeight']/$height);
+ }
+
+ if ($scale < 1) {
+
+ $xSrc = 0;
+ $ySrc = 0;
+
+ if ($this->params['cropImage'] === 'no')
+ {
+ $newWidth = floor($scale*$width);
+ $newHeight = floor($scale*$height);
+ }
+ else if ($this->params['cropImage'] === 'yes')
+ {
+
+ $newWidth = $this->params['imgWidth'];
+ $newHeight = $this->params['imgHeight'];
+ $oldWidth = $width;
+ $oldHeight = $height;
+ $width = floor($newWidth/$scale);
+ $height = floor($newHeight/$scale);
+
+ switch ($this->params['horizAlign'])
+ {
+ case 'left':
+ $xSrc = 0;
+ break;
+ case 'right':
+ $xSrc = floor(($oldWidth-$width));
+ break;
+ case 'center':
+ $xSrc = floor(($oldWidth-$width)/2);
+ break;
+ default:
+ $xSrc = $this->params['horizAlign'];
+ }
+
+ switch ($this->params['vertAlign'])
+ {
+ case 'top':
+ $ySrc = 0;
+ break;
+ case 'bottom':
+ $ySrc = floor(($oldHeight-$height));
+ break;
+ case 'center':
+ $ySrc = floor(($oldHeight-$height)/2);
+ break;
+ default:
+ $ySrc = $this->params['vertAlign'];
+ }
+
+ }
+
+ //temp image
+ $tmpImg = imagecreatetruecolor($newWidth, $newHeight);
+
+ //copy and resize
+ imagecopyresized($tmpImg, $img, 0, 0, $xSrc, $ySrc,$newWidth, $newHeight, $width, $height);
+ imagedestroy($img);
+ $img = $tmpImg;
+ }
+
+ }
+
+ if (!$img) {
+ $img = imagecreate($this->params['imgWidth'], $this->params['imgHeight']);
+ imagecolorallocate($img,200,200,200);
+ }
+
+ //print the image
+ header("Content-type: image/jpeg");
+ imagejpeg($img);
+
+ }
+
+} \ No newline at end of file
diff --git a/h-source/admin/Library/Image/Gd/index.html b/h-source/admin/Library/Image/Gd/index.html
new file mode 100644
index 0000000..8d1c8b6
--- /dev/null
+++ b/h-source/admin/Library/Image/Gd/index.html
@@ -0,0 +1 @@
+
diff --git a/h-source/admin/Library/Image/index.html b/h-source/admin/Library/Image/index.html
new file mode 100644
index 0000000..8d1c8b6
--- /dev/null
+++ b/h-source/admin/Library/Image/index.html
@@ -0,0 +1 @@
+
diff --git a/h-source/admin/Library/Lang/Eng/DbCondStrings.php b/h-source/admin/Library/Lang/Eng/DbCondStrings.php
new file mode 100644
index 0000000..1edae98
--- /dev/null
+++ b/h-source/admin/Library/Lang/Eng/DbCondStrings.php
@@ -0,0 +1,17 @@
+<?php
+
+// All EasyGiant code is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
+// See COPYRIGHT.txt and LICENSE.txt.
+
+if (!defined('EG')) die('Direct access not allowed!');
+
+//error strings in the case database conditions are not satisfied
+class Lang_Eng_DbCondStrings {
+
+ //get the error string in the case that the value of the field $field is already present in the table $table
+ public function getNotUniqueString($field)
+ {
+ return "<div class='alert'>The value of <i>". $field ."</i> is already present. Please choose a different value.</div>\n";
+ }
+
+}
diff --git a/h-source/admin/Library/Lang/Eng/ModelStrings.php b/h-source/admin/Library/Lang/Eng/ModelStrings.php
new file mode 100644
index 0000000..411d196
--- /dev/null
+++ b/h-source/admin/Library/Lang/Eng/ModelStrings.php
@@ -0,0 +1,19 @@
+<?php
+
+// All EasyGiant code is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
+// See COPYRIGHT.txt and LICENSE.txt.
+
+if (!defined('EG')) die('Direct access not allowed!');
+
+class Lang_Eng_ModelStrings extends Lang_ResultStrings {
+
+ public $string = array(
+ "error" => "<div class='alert'>Query error: Contact the administrator!</div>\n",
+ "executed" => "<div class='executed'>Operation executed!</div>\n",
+ "associate" => "<div class='alert'>Referential integrity problem: record associated to some other record in a child table. Break the association before.</div>\n",
+ "no-id" => "<div class='alert'>Alert: record identifier not defined!</div>\n",
+ "not-linked" => "<div class='alert'>The Item is not associated : you can't dissociate it</div>",
+ "linked" => "<div class='alert'>The Item is already associated: you can't associate it another time</div>"
+ );
+
+}
diff --git a/h-source/admin/Library/Lang/Eng/UploadStrings.php b/h-source/admin/Library/Lang/Eng/UploadStrings.php
new file mode 100644
index 0000000..195fd5f
--- /dev/null
+++ b/h-source/admin/Library/Lang/Eng/UploadStrings.php
@@ -0,0 +1,27 @@
+<?php
+
+// All EasyGiant code is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
+// See COPYRIGHT.txt and LICENSE.txt.
+
+if (!defined('EG')) die('Direct access not allowed!');
+
+class Lang_Eng_UploadStrings extends Lang_ResultStrings {
+
+ public $string = array(
+ "error" => "<div class='alert'>Error: verify the permissions of the file/directory</div>\n",
+ "executed" => "<div class='executed'>Operation executed!</div>\n",
+ "not-child" => "<div class='alert'>The selected directory is not a child of the base directory</div>\n",
+ "not-dir" => "<div class='alert'>The selected directory is not a directory</div>\n",
+ "not-empty" => "<div class='alert'>The selected directory is not empty</div>\n",
+ "no-folder-specified" => "<div class='alert'>No folder has been specified</div>\n",
+ "no-file-specified" => "<div class='alert'>No file has been specified</div>\n",
+ "not-writable" => "<div class='alert'>The folder is not writable</div>\n",
+ "not-writable-file" => "<div class='alert'>The file is not writable</div>\n",
+ "dir-exists" => "<div class='alert'>The directory is already present in the current folder</div>\n",
+ "no-upload-file" => "<div class='alert'>There is no file to upload</div>\n",
+ "size-over" => "<div class='alert'>The size of the file is too big</div>\n",
+ "not-allowed-ext" => "<div class='alert'>The extension of the file you want to upload is not allowed</div>\n",
+ "file-exists" => "<div class='alert'>The file is already present in the current folder</div>\n"
+ );
+
+}
diff --git a/h-source/admin/Library/Lang/Eng/ValCondStrings.php b/h-source/admin/Library/Lang/Eng/ValCondStrings.php
new file mode 100644
index 0000000..b9d132e
--- /dev/null
+++ b/h-source/admin/Library/Lang/Eng/ValCondStrings.php
@@ -0,0 +1,76 @@
+<?php
+
+// All EasyGiant code is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
+// See COPYRIGHT.txt and LICENSE.txt.
+
+if (!defined('EG')) die('Direct access not allowed!');
+
+class Lang_Eng_ValCondStrings {
+
+ //if the element is not defined
+ public function getNotDefinedResultString($element)
+ {
+ return "<div class='alert'>". $element ." not defined!</div>\n";
+ }
+
+ //if the elements are not equal
+ public function getNotEqualResultString($element)
+ {
+ return "<div class='alert'>Different values: $element</div>\n";
+ }
+
+ //if the element is not alphabetic
+ public function getNotAlphabeticResultString($element)
+ {
+ return "<div class='alert'>".$element." has to be alphabetic</div>\n";
+ }
+
+ //if the element is not alphanumeric
+ public function getNotAlphanumericResultString($element)
+ {
+ return "<div class='alert'>".$element." has to be alphanumeric</div>\n";
+ }
+
+ //if the element is not a decimal digit
+ public function getNotDecimalDigitResultString($element)
+ {
+ return "<div class='alert'>".$element." has to be a decimal digit</div>\n";
+ }
+
+ //if the element has the mail format
+ public function getNotMailFormatResultString($element)
+ {
+ return "<div class='alert'>".$element." doesn't seem an e-mail address</div>\n";
+ }
+
+ //if the element is numeric
+ public function getNotNumericResultString($element)
+ {
+ return "<div class='alert'>".$element." has to be a numeric</div>\n";
+ }
+
+ //if the element (string) length exceeds the value of characters (defined by $maxLength)
+ public function getLengthExceedsResultString($element,$maxLength)
+ {
+ return "<div class='alert'>".$element." exceeds the value of $maxLength characters</div>\n";
+ }
+
+ //if the element is one of the strings indicated by $stringList (a comma-separated list of strings)
+ public function getIsForbiddenStringResultString($element,$stringList)
+ {
+ return "<div class='alert'>".$element." can't be one of the following strings: $stringList</div>\n";
+ }
+
+ //if the element is not one of the strings indicated by $stringList (a comma-separated list of strings)
+ public function getIsNotStringResultString($element,$stringList)
+ {
+ return "<div class='alert'>".$element." has to be one of the following strings: $stringList</div>\n";
+ }
+
+ //if the element is not one of the strings indicated by $stringList (a comma-separated list of strings)
+ public function getDoesntMatchResultString($element,$regExp)
+ {
+ return "<div class='alert'>".$element." has to match the following regular expression: $regExp</div>\n";
+ }
+
+}
diff --git a/h-source/admin/Library/Lang/Eng/index.html b/h-source/admin/Library/Lang/Eng/index.html
new file mode 100644
index 0000000..8d1c8b6
--- /dev/null
+++ b/h-source/admin/Library/Lang/Eng/index.html
@@ -0,0 +1 @@
+
diff --git a/h-source/admin/Library/Lang/ResultStrings.php b/h-source/admin/Library/Lang/ResultStrings.php
new file mode 100644
index 0000000..db1095c
--- /dev/null
+++ b/h-source/admin/Library/Lang/ResultStrings.php
@@ -0,0 +1,25 @@
+<?php
+
+// All EasyGiant code is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
+// See COPYRIGHT.txt and LICENSE.txt.
+
+if (!defined('EG')) die('Direct access not allowed!');
+
+class Lang_ResultStrings {
+
+ public $string = array();
+
+ //method to get the string $stringName
+ public function getString($stringName)
+ {
+ if (isset($this->string[$stringName]))
+ {
+ return $this->string[$stringName];
+ }
+ else
+ {
+ return 'result string not defined!';
+ }
+ }
+
+}
diff --git a/h-source/admin/Library/Lang/index.html b/h-source/admin/Library/Lang/index.html
new file mode 100644
index 0000000..8d1c8b6
--- /dev/null
+++ b/h-source/admin/Library/Lang/index.html
@@ -0,0 +1 @@
+
diff --git a/h-source/admin/Library/ModAbstract.php b/h-source/admin/Library/ModAbstract.php
new file mode 100644
index 0000000..885f64f
--- /dev/null
+++ b/h-source/admin/Library/ModAbstract.php
@@ -0,0 +1,25 @@
+<?php
+
+// All EasyGiant code is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
+// See COPYRIGHT.txt and LICENSE.txt.
+
+if (!defined('EG')) die('Direct access not allowed!');
+
+//aach module class has to inherits from this abstract class
+abstract class ModAbstract
+{
+
+ //reference to a simpleXML object
+ protected $simpleXmlObj = null;
+
+ //type hinting: simplexmlelement
+ public function __construct(SimpleXMLElement $simpleXmlObj)
+ {
+ $this->simpleXmlObj = $simpleXmlObj;
+ }
+
+ //define the abstract method to render (create the HTML) of the single module
+ //$xmlObject: simpleXML object
+ abstract public function render();
+
+}
diff --git a/h-source/admin/Library/Model/Base.php b/h-source/admin/Library/Model/Base.php
new file mode 100755
index 0000000..1aaadca
--- /dev/null
+++ b/h-source/admin/Library/Model/Base.php
@@ -0,0 +1,1140 @@
+<?php
+
+// All EasyGiant code is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
+// See COPYRIGHT.txt and LICENSE.txt.
+
+if (!defined('EG')) die('Direct access not allowed!');
+
+abstract class Model_Base
+{
+
+ public $fields = ''; //the fields that have to be manipulated by the update and insert query
+ public $values = array(); //the values that corresponding to the $this->fields fields
+ public $form = null; //reference to a Form_Form object
+ public $formStruct = null; //the form structure
+
+ public $submitName = null; //the current submitName (from the form)
+ public $identifierName = 'identifier';
+
+ public $notice = null; //a string explaining the result of the query applied (or not if an error occured): executed, error, etc
+ public $result = true; //the result of validate conditions, database conditions and query. It can be 'true' or 'false'
+ public $queryResult = false; //the result of the query
+
+ //conditions that have to be satisfied before applying the query
+ //Ex: 'update'=>'checkEmpty:titolo,autore','submitName'=>'conditions'
+ public $strongConditions = array();
+
+ //conditions that have to be satisfied before applying the query
+ //Ex: 'update'=>'checkEmpty:titolo,autore','submitName'=>'conditions'
+ //do not return error if a value is equal to '' or null
+ public $softConditions = array();
+
+ //conditions that have to be satisfied before applying the query
+ //check that the new values inserted satisfy some conditions
+ //Ex: 'update'=>'checkUniqueCompl:titolo,autore;checkUnique:titolo','insert'=>'checkUnique:titolo'
+ public $databaseConditions = array();
+
+ public $popupArray = array(); //array of popup objects (see popup.php)
+
+ public $supplInsertValues = array(); //associative array defining supplementary values to be inserted on each insert query. It has to have the following form: array(field1 => value1,field2 => value2, ...)
+
+ public $supplUpdateValues = array(); //associative array defining supplementary values to be inserted on each update query. It has to have the following form: array(field1 => value1,field2 => value2, ...)
+
+ public $select = null; //fields that have to be selected in select queries
+ public $where = array(); //associative array containing all the where clauses ($field => $value)
+ //group by, order by and limit clauses
+ public $groupBy = null;
+ public $orderBy = null;
+ public $limit = null;
+
+ public $from = null; //from clause of the select queries
+ public $on = null; //join part of the where clause of the select queries
+ public $using = null; //using clause
+
+ public $toList = false; //if the result have to be given in a list format
+ public $listArray = array(); //array containing the $key and the $value to be used to extract a list from a resultSet
+
+ //logic operator between statements in the where clause of select queries
+ public $logicalOperators = array('AND');
+
+ protected $_tables='itemTable,boxTable,item_boxTable';
+ protected $_idFields='id_item,id_box';
+ protected $_tablesArray=array();
+ protected $_idFieldsArray=array();
+ protected $_where = array();
+
+ //the name of the field that has to be used to order the rows of the main table of the model
+ protected $_idOrder = null;
+
+ protected $_onDelete = 'check'; //can be 'nocheck' or 'check'. check: referential integrity check. nocheck: no referential integrity check
+ protected $_reference = null; //array containing the child table that have a reference to this table and the foreign key of the child table-> array($childTable,$foreignKey)
+
+ protected $_popupItemNames = array(); //the fields to be used as names in the popupArray elements. Associative array ($itemNameField1 => $itemNameValue1, ...)
+
+ //the labels of the pop-up menus
+ protected $_popupLabels = array();
+
+ //functions that have to be applied upon the label fields of the popup menu
+ protected $_popupFunctions = array();
+
+ protected $_popupWhere = array(); //where clause for the pupup menu
+
+ protected $_resultString; //reference to the class containing all the result strings of the db queries
+ protected $_dbCondString; //reference to the class containing all the result strings of the database conditions
+
+ protected $_backupFields = ''; //field saved after the delFields method has been applied
+ protected $_backupValues = array(); //values saved after the delFields method has been applied
+ protected $_allowedDbMethods = array('update','insert','del','moveup','movedown'); //methods that can be called by the updateTable method
+
+ protected $submitNames = array(
+ 'update' => 'updateAction',
+ 'insert' => 'insertAction',
+ 'del' =>'delAction',
+ 'moveup' =>'moveupAction',
+ 'movedown' =>'movedownAction'
+ );
+
+ protected $identifierValue = null; //the value of the identifier ($_POST[$this->identifier])
+ protected $arrayExt; //arrayExt object (see library/arrayExt.php)
+
+ protected $_arrayStrongCheck; //Array_Validate_Strong object
+ protected $_arraySoftCheck; //Array_Validate_Soft object
+
+ public $db; //reference to the database layer class
+ protected $_lang = 'Eng'; //language of notices
+
+
+ public function __construct() {
+ $this->_tablesArray = explode(',',$this->_tables);
+ $this->_idFieldsArray = explode(',',$this->_idFields);
+ $this->_where[$this->_idFieldsArray[0]] = $this->_tablesArray[0];
+ $this->arrayExt = new ArrayExt();
+
+ //initialize the validate objects
+ $this->_arrayStrongCheck = new Array_Validate_Strong($this->_lang);
+ $this->_arraySoftCheck = new Array_Validate_Soft($this->_lang);
+
+ $this->identifierName = $this->_idFieldsArray[0];
+
+ //create the $_resultString object (result strings of the db queries)
+ $modelStringClass = 'Lang_'.$this->_lang.'_ModelStrings';
+ if (!class_exists($modelStringClass))
+ {
+ $modelStringClass = 'Lang_Eng_ModelStrings';
+ }
+ $this->_resultString = new $modelStringClass();
+
+ //create the $_dbCondString object (result strings of the database conditions)
+ $dbCondStringClass = 'Lang_'.$this->_lang.'_DbCondStrings';
+ if (!class_exists($dbCondStringClass))
+ {
+ $dbCondStringClass = 'Lang_Eng_DbCondStrings';
+ }
+ $this->_dbCondString = new $dbCondStringClass();
+
+ //instantiate the database class
+ $this->db = Factory_Db::getInstance(DATABASE_TYPE);
+ }
+
+ //set the submitNames property (array)
+ //$methodName : the method name, $submitName: the submit name of the submit action of the form
+ public function setSubmitNames($methodName,$submitName)
+ {
+ if (!in_array($methodName,$this->_allowedDbMethods))
+ {
+ throw new Exception('query type <b>"'.$methodName. '"</b> not allowed in '. __METHOD__);
+ }
+ $this->submitNames[$methodName] = $submitName;
+ }
+
+ //get the last query executed
+ public function getQuery()
+ {
+ return $this->db->query;
+ }
+
+ //get the where clause of the select query
+ public function getWhereQueryClause()
+ {
+ return $this->where;
+ }
+
+ //set the where clause of the select query
+ //whereArray = array ($table_field => $value)
+ public function setWhereQueryClause($whereArray)
+ {
+ $this->where = $whereArray;
+ }
+
+ //append the whereArray clause to $this_->whereClause
+ //whereArray = array ($table_field => $value)
+ public function appendWhereQueryClause($whereArray)
+ {
+ $this->where = array_merge($this->where,$whereArray);
+ }
+
+ //drop the char $char from the beginning of the string $string
+ public function dropStartChar($string,$char)
+ {
+ while(strcmp($string[0],$char) === 0)
+ {
+ $string = substr($string,1);
+ }
+ return $string;
+ }
+
+ //get the table name from $this->_where. If the table is not present then return $this->_tablesArray[0]
+ public function getTableName($field)
+ {
+ return isset($this->_where[$field]) ? $this->_where[$field] : $this->_tablesArray[0];
+ }
+
+ //method to create the where clause of the select query from the $this->where array
+ //$level: level of the ricorsion
+ //$whereClauseLevel: array containing the field=>value statements of the where clause. If $whereClause = null than $this->where is considered
+ public function createWhereClause($level = 0, $whereClauseLevel = null)
+ {
+ $whereClause = null;
+ $whereClauseArray = array();
+
+ $whereClause = isset($whereClauseLevel) ? $whereClauseLevel : $this->where;
+
+ foreach ($whereClause as $field => $value)
+ {
+ if (is_array($value))
+ {
+ $newValue = $this->createWhereClause($level+1, $value);
+ if (isset($newValue)) $whereClauseArray[] = $newValue;
+ }
+ else
+ {
+ $flag = 0; //equal where clause
+ if (isset($field))
+ {
+ //drop the 'n:' and '-' chars from $field
+ $fieldClean = str_replace('n!',null,$field);
+ $fieldClean = $this->dropStartChar($fieldClean,'-');
+ if (strcmp($value,Params::$nullQueryValue) !== 0 or (Params::$nullQueryValue === false))
+ {
+ foreach (params::$whereClauseSymbolArray as $symbol)
+ {
+ if (strstr($value,$symbol))
+ {
+ //check if write or not the table name
+ $tableName = strstr($field,'n!') ? null : $this->getTableName($field).'.';
+ $whereClauseArray[] = $tableName.$fieldClean.' '.$value;
+ $flag = 1; //not equal where clause
+ break;
+ }
+ }
+ if ($flag === 0)
+ {
+ $value = '"'.$value.'"';
+ //check if write or not the table name
+ $tableName = strstr($field,'n!') ? null : $this->getTableName($field).'.';
+ $whereClauseArray[] = $tableName.$fieldClean.'='.$value;
+ }
+ }
+ }
+ }
+ }
+ //get the logic operator at the current level
+ $logicOper = isset($this->logicalOperators[$level]) ? ' '.$this->logicalOperators[$level].' ' : ' AND ';
+ $whereClause = !empty($whereClauseArray) ? implode($logicOper,$whereClauseArray) : null;
+ $whereClause = (isset($whereClause) and $level>0) ? '('.$whereClause.')' : $whereClause;
+ return $whereClause;
+ }
+
+
+ //get the submitName having its key (the method name)
+ public function getSubmitName($key)
+ {
+ if (!array_key_exists($key,$this->submitNames))
+ {
+ return 'generalAction';
+// throw new Exception('query type <b>"'.$key. '"</b> not allowed in '.__METHOD__);
+ }
+ return $this->submitNames[$key];
+
+ }
+
+
+ //return the values, taken from the $_POST array, to be inserted inside the forms
+ //$queryType: insert or update
+ //$func: sanitize function to apply upon each value
+ //$id: if $queryType='update' that the values are taken from the record (of the main table of this model) having the primary key equal to $id
+ //$defaultValues = associative array of the form: array($entry=>$defaultValue)
+ //$functionsIfFromDb = associative array of the form: array($entry=>$function_to_be_applied)
+ public function getFormValues($queryType = 'insert', $func = 'sanitizeHtml',$id = null,$defaultValues = array(),$functionsIfFromDb = array())
+ {
+ $arrayType = array('update','insert');
+ $values = array();
+ $idName = $this->identifierName;
+ if (in_array($queryType,$arrayType))
+ {
+ $ident = null;
+ if (isset($id))
+ {
+ $ident = (int)$id;
+ }
+ else if (isset($_POST[$idName]))
+ {
+ $ident = (int)$_POST[$idName];
+ }
+ if ($this->result)
+ {
+ if ($queryType === 'update')
+ {
+ if (isset($ident))
+ {
+ $recordArray = $this->selectId($ident);
+
+ $fieldsArray = explode(',',$this->fields);
+
+ foreach ($fieldsArray as $field)
+ {
+ $values[$field] = array_key_exists($field,$recordArray) ? $recordArray[$field] : '';
+ }
+
+ $values[$idName] = $ident;
+
+ //apply the functions upon entries
+ foreach ($functionsIfFromDb as $entry => $funcUponEntry)
+ {
+ if (array_key_exists($entry,$values))
+ {
+ if (!function_exists($funcUponEntry)) {
+ throw new Exception('Error in <b>'.__METHOD__.'</b>: function <b>'.$funcUponEntry. '</b> does not exists');
+ }
+
+ $values[$entry] = call_user_func($funcUponEntry,$values[$entry]);
+ }
+ }
+
+ }
+ }
+ else if ($queryType === 'insert')
+ {
+
+ $tempArray = is_array($defaultValues) ? $defaultValues : array();
+
+ $values = $this->arrayExt->subset($tempArray,$this->fields,$func);
+
+ }
+ }
+ else
+ {
+ $values = $this->arrayExt->subset($_POST,$this->fields,$func);
+
+ if ($queryType === 'update')
+ {
+ $values[$idName] = $ident;
+ }
+ }
+ }
+ return $values;
+ }
+
+
+ //method to set the properties $this->fields and $this->values
+ public function setFields($fields,$func = 'sanitizeAll')
+ {
+ $this->values = $this->arrayExt->subset($_POST,$fields,$func);
+ $this->fields = $this->extractFields($fields);
+
+ //set the backup variables
+ $this->_backupFields = $this->fields;
+ $this->_backupValues = $this->values;
+ }
+
+
+ //clear the fields list
+ public function clearFields()
+ {
+ $this->_backupFields = $this->fields;
+ $this->_backupValues = $this->values;
+ $this->fields = '';
+ $this->values = array();
+ }
+
+ //del the fields written in the $list argument. The $list argument has to be of the type: field1,field2,...
+ public function delFields($list)
+ {
+ $this->_backupFields = $this->fields;
+ $this->_backupValues = $this->values;
+ $this->values = $this->arrayExt->subsetComplementary($this->values,$list);
+ $this->fields = implode(',',array_keys($this->values));
+ }
+
+ //restore the fields and values saved in $_backupFields and $_backupValues
+ public function restoreFields()
+ {
+ $this->fields = $this->_backupFields;
+ $this->values = $this->_backupValues;
+ }
+
+ //method to clean the $fields string deleting the colons (and the word after the colon)
+ public function extractFields($fields) {
+ $fieldsArray = explode(',',$fields);
+ $resultString = array();
+ foreach ($fieldsArray as $field) {
+ if (strstr($field,':')) {
+ $temp = explode(':',$field);
+ $resultString[] = $temp[0];
+ } else {
+ $resultString[] = $field;
+ }
+ }
+ return implode(',',$resultString);
+ }
+
+ //add the supplementary value on insert and update queries
+ //$queryType: insert or update
+ public function setSupplValues($queryType)
+ {
+ if ($queryType === 'insert')
+ {
+ $supplValues = $this->supplInsertValues;
+ }
+ else if ($queryType === 'update')
+ {
+ $supplValues = $this->supplUpdateValues;
+ }
+
+ $baseFields = implode(',',array_keys($this->values));
+
+ $supplFields = implode(',',array_keys($supplValues));
+ $supplFields = (strcmp($supplFields,'') === 0) ? $supplFields : ',' . $supplFields;
+
+ $fields = $baseFields . $supplFields;
+ $values = array_merge(array_values($this->values),array_values($supplValues));
+
+ return array($fields,$values);
+ }
+
+
+ //method to call the update query (overriding of the base_db del method)
+ //update the record with the primary key equal to $id (default)
+ //if $whereClause is set then use $whereClause as where clause of the update query
+ public function update($id = null, $whereClause = null)
+ {
+ if (!is_array($this->supplUpdateValues))
+ {
+ throw new Exception('error in <b>' . __METHOD__ . '</b>: the <b>supplUpdateValues</b> property has to be an array.');
+ }
+ $el = $this->setSupplValues('update');
+ $this->queryResult = false;
+
+ if (isset($whereClause))
+ {
+ $result = $this->db->update($this->_tablesArray[0],$el[0],$el[1],$whereClause);
+ $this->setNotice($result);
+ return $result;
+ }
+ else
+ {
+ if (isset($id))
+ {
+ $where = $this->_idFieldsArray[0].'='.(int)($id);
+ $result = $this->db->update($this->_tablesArray[0],$el[0],$el[1],$where);
+ $this->setNotice($result);
+ return $result;
+ }
+ else
+ {
+ $this->notice = $this->_resultString->getString('no-id');
+ $this->result = false;
+ $this->identifierValue = null;
+ return false;
+ }
+ }
+ }
+
+ //method to call the insert query (overriding of the base_db del method)
+ public function insert() {
+
+ $this->queryResult = false;
+ if (!is_array($this->supplInsertValues)) {
+ throw new Exception('error in <b>' . __METHOD__ . '</b>: the <b>supplInsertValues</b> property has to be an array.');
+ }
+
+ if (isset($this->_idOrder))
+ {
+ $maxValue = $this->db->getMax($this->_tablesArray[0],$this->_idOrder);
+ $this->supplInsertValues[$this->_idOrder] = (int)$maxValue + 1;
+ }
+
+ $el = $this->setSupplValues('insert');
+
+ $result = $this->db->insert($this->_tablesArray[0],$el[0],$el[1]);
+ $this->setNotice($result);
+ return $result;
+ }
+
+ //method to call the delete query (overriding of the base_db del method)
+ public function del($id = null, $whereClause = null) {
+
+ $this->queryResult = false;
+
+ if (isset($whereClause))
+ {
+ $result = $this->db->del($this->_tablesArray[0],$whereClause);
+ $this->setNotice($result);
+ return $result;
+ }
+ else
+ {
+ if (isset($id)) {
+ $where = $this->_idFieldsArray[0].'='.(int)$id;
+ $result = $this->db->del($this->_tablesArray[0],$where);
+ $this->setNotice($result);
+ return $result;
+ } else {
+ $this->notice = $this->_resultString->getString('no-id');
+ $this->result = false;
+ $this->identifierValue = null;
+ return false;
+ }
+ }
+ }
+
+ //move to the top the record having $this->_idOrder = $id
+ //where clause
+ public function moveup($id)
+ {
+ return $this->move($id,'up');
+ }
+
+ //move to the top the record having $this->_idOrder = $id
+ //where clause
+ public function movedown($id)
+ {
+ return $this->move($id,'down');
+ }
+
+ //move the record having $this->_tablesArray[0] = $id
+ //$par: 'up' or 'down'
+ //where clause
+ public function move($id,$par = 'up')
+ {
+ $this->queryResult = false;
+ if (isset($id))
+ {
+ $increm = ($par === 'up') ? 1 : -1;
+
+ $backupLimit = $this->limit;
+ $this->limit = null;
+
+ $data = $this->getFields($this->_tablesArray[0].'.'.$this->_idFieldsArray[0].','.$this->_tablesArray[0].'.'.$this->_idOrder);
+
+ for($i = 0; $i < count($data); $i++)
+ {
+ if (strcmp($data[$i][$this->_tablesArray[0]][$this->_idFieldsArray[0]],$id) === 0)
+ {
+ if (($par === 'up' and $i !== 0) or ($par === 'down' and $i !== (count($data)-1)))
+ {
+ $prevOrder = $data[$i-$increm][$this->_tablesArray[0]][$this->_idOrder];
+ $prevId = $data[$i-$increm][$this->_tablesArray[0]][$this->_idFieldsArray[0]];
+ $currentOrder = $data[$i][$this->_tablesArray[0]][$this->_idOrder];
+ $currentId = $data[$i][$this->_tablesArray[0]][$this->_idFieldsArray[0]];
+
+ //exchange the id_order of the two record
+ $res1 = $this->db->update($this->_tablesArray[0],$this->_idOrder,array($prevOrder),$this->_idFieldsArray[0]."='$currentId'");
+ $res2 = $this->db->update($this->_tablesArray[0],$this->_idOrder,array($currentOrder),$this->_idFieldsArray[0]."='$prevId'");
+ $result = ($res1 and $res2);
+ $this->setNotice($result);
+ return $result;
+ }
+ }
+ }
+
+ $this->limit = $backupLimit;
+ }
+ else
+ {
+ $this->notice = $this->_resultString->getString('no-id');
+ $this->result = false;
+ $this->identifierValue = null;
+ return false;
+ }
+ return false;
+ }
+
+ public function setNotice($result) {
+ if ($result) {
+ $this->notice = $this->_resultString->getString('executed');
+ $this->result = true;
+ $this->queryResult = true;
+ } else {
+ $this->notice = $this->_resultString->getString('error');
+ $this->result = false;
+ $this->queryResult = false;
+ }
+ }
+
+ //method used to verify that the value of a field is not duplicated
+ //$fieldsList: list of fields to check. Ex: field1,field2,...
+ //$where: the where clause
+ public function checkUnique($fieldsList,$where = null)
+ {
+ $errorString = null;
+ $numb = 0;
+ $fieldsArray = explode(',',$fieldsList);
+ $queryFieldsArray = explode(',',$this->fields);
+ foreach ($fieldsArray as $field)
+ {
+ if (in_array($field,$queryFieldsArray))
+ {
+ if ($this->db->recordExists($this->_tablesArray[0],$field,$this->values[$field],$where))
+ {
+ $errorString .= $this->_dbCondString->getNotUniqueString($field);
+ $numb++;
+ }
+ }
+ }
+ $this->notice = $errorString;
+ return $numb === 0 ? true : false;
+ }
+
+ //like checkUnique: check all the records of the table apart from the record that has to be modified
+ public function checkUniqueCompl($fieldsList,$id = null)
+ {
+ if (isset($id))
+ {
+ $where = $this->_idFieldsArray[0].'!='.(int)($id);
+ return $this->checkUnique($fieldsList,$where);
+ } else {
+ $this->notice = $this->_resultString->getString('no-id');
+ return false;
+ }
+ }
+
+ //method to apply the database conditions listed in the $this->databaseConditions associative array
+ //$queryType: indicates what set of validate conditions has to be considered (it's the key of the associative array)
+ public function applyDatabaseConditions($queryType,$id = null)
+ {
+ if (array_key_exists($queryType,$this->databaseConditions))
+ {
+ if (!is_array($this->databaseConditions[$queryType]))
+ {
+ throw new Exception('error in method <b>'.__METHOD__.'</b> : <b>databaseConditions['.$queryType.']</b> has to be an associative array');
+ }
+
+ foreach ($this->databaseConditions[$queryType] as $key => $values)
+ {
+
+ //personalized error string
+ $altErrorString = null;
+
+ //delete all the '+' chars
+ $key = $this->dropStartChar($key,'+');
+
+ if (strcmp($values,'all') === 0 or strstr($values,'all|'))
+ {
+ if (strstr($values,'all|'))
+ {
+ $values = str_replace('all|',$this->fields.'|',$values);
+ }
+ else
+ {
+ $values = $this->fields;
+ }
+ }
+
+ if (strstr($values,'|'))
+ {
+ $temp = explode('|',$values);
+ $altErrorString = "<div class='".Params::$errorStringClassName."'>".$temp[1]."</div>\n";
+ $values = $temp[0];
+ }
+
+ $allowedMethod = array('checkUnique','checkUniqueCompl');
+ if (!in_array($key,$allowedMethod))
+ {
+ throw new Exception('error in method '.__METHOD__.' : method "'.$key. '" not allowed in the property named databaseConditions');
+ }
+ if (!call_user_func_array(array($this,$key),array($values,$id)))
+ {
+ if (isset($altErrorString)) $this->notice = $altErrorString;
+ $this->result = false;
+ $this->queryResult = false;
+ return false;
+ }
+ }
+ return true;
+ } else {
+ return true;
+ }
+ }
+
+
+ //method to apply the validate conditions listed in the $this->strongConditions associative array
+ //$queryType: indicates what set of validate conditions has to be considered (it's the key of the associative array)
+ //$strength: 'strong' or 'soft'
+ public function applyValidateConditions($queryType,$strength = 'strong')
+ {
+ if ($strength === 'strong')
+ {
+ $validateObj = $this->_arrayStrongCheck;
+ $conditions = $this->strongConditions;
+ $errString = 'strongConditions';
+ }
+ else
+ {
+ $validateObj = $this->_arraySoftCheck;
+ $conditions = $this->softConditions;
+ $errString = 'softConditions';
+
+ if (Params::$nullQueryValue !== false)
+ {
+ $conditions['insert']['+++++checkIsNotStrings|'.Params::$nullQueryValue] = 'all';
+ $conditions['update']['+++++checkIsNotStrings|'.Params::$nullQueryValue] = 'all';
+ }
+ }
+
+ if (array_key_exists($queryType,$conditions))
+ {
+ if (!is_array($conditions[$queryType]))
+ {
+ throw new Exception('error in method <b>'.__METHOD__.'</b> : <b>'.$errString.'['.$queryType.']</b> has to be an associative array');
+ }
+
+ foreach ($conditions[$queryType] as $key => $values)
+ {
+
+ //personalized error string
+ $altErrorString = null;
+
+ //delete all the '+' chars
+ $key = $this->dropStartChar($key,'+');
+
+ if (strcmp($values,'all') === 0 or strstr($values,'all|'))
+ {
+ if (strstr($values,'all|'))
+ {
+ $values = str_replace('all|',$this->fields.'|',$values);
+ }
+ else
+ {
+ $values = $this->fields;
+ }
+ }
+
+ if (strstr($values,'|'))
+ {
+ $temp = explode('|',$values);
+ $altErrorString = "<div class='".Params::$errorStringClassName."'>".$temp[1]."</div>\n";
+ $values = $temp[0];
+ }
+
+ $baseArgs = array($_POST,$values);
+
+ if (strstr($key,'|'))
+ {
+ $funcArray = explode('|',$key);
+ $funcName = $funcArray[0];
+ array_shift($funcArray);
+ $funcArgs = array_merge($baseArgs,$funcArray);
+ }
+ else
+ {
+ $funcName = $key;
+ $funcArgs = $baseArgs;
+ }
+
+ if (!method_exists($validateObj,$funcName) or $funcName === 'checkGeneric')
+ {
+ throw new Exception('error in method '.__METHOD__.' :method "'.$funcName. '" not allowed in '.$errString);
+ }
+ if (!call_user_func_array(array($validateObj,$funcName),$funcArgs))
+ {
+ $this->notice .= (isset($altErrorString)) ? $altErrorString : $validateObj->errorString;
+ $this->result = false;
+ $this->queryResult = false;
+ return false;
+ }
+ }
+ return true;
+ } else {
+ return true;
+ }
+ }
+
+
+ //apply, in sequence, the strong,soft and database conditions
+ //$methodName: insert,update
+ //$id: the id of the record. It is necessary for database conditions
+ public function checkConditions($methodName,$id = null)
+ {
+ if ($this->applyValidateConditions($methodName,'strong'))
+ {
+ if ($this->applyValidateConditions($methodName,'soft'))
+ {
+ if ($this->applyDatabaseConditions($methodName,$id))
+ {
+ return true;
+ }
+ }
+ }
+ return false;
+ }
+
+ //method that calls the function indicated in $this->submitNames. Ex: if $_POST['delAction'] is found, then the "del" method is called.
+ public function updateTable($methodsList = '',$id = null) {
+
+ $allowedMethodsArray = explode(',',$methodsList);
+ $resultArray = array();
+ $this->identifierValue = null;
+ if (isset($id))
+ {
+ $this->identifierValue = (int)$id;
+ }
+ else if (isset($_POST[$this->identifierName]))
+ {
+ $this->identifierValue = (int)$_POST[$this->identifierName];
+ }
+ foreach ($this->submitNames as $methodName => $submitName)
+ {
+ if (array_key_exists($submitName,$_POST))
+ {
+ $this->submitName = $submitName;
+ if (method_exists($this,$methodName))
+ {
+ //if the method is allowed
+ if (in_array($methodName,$allowedMethodsArray))
+ {
+ if ($this->checkConditions($methodName,$this->identifierValue))
+ {
+ $this->notice = null;
+ call_user_func_array(array($this,$methodName),array($this->identifierValue));
+ }
+ }
+ }
+ else
+ {
+ throw new Exception('method <b>'.$methodName.'</b> not defined in class <b>'.__CLASS__.'</b>; error in method <b>'.__METHOD__.'</b>');
+ }
+ return; //only one cycle!
+ }
+ }
+ }
+
+ //method to build the array of popup objects
+ public function popupBuild()
+ {
+ foreach ($this->_popupItemNames as $field => $itemName)
+ {
+// if (array_key_exists($field,$this->_where))
+// {
+ $fieldClean = str_replace('n!',null,$field);
+ $itemNameClean = str_replace('n!',null,$itemName);
+ $fieldClean = $this->dropStartChar($fieldClean,'-');
+ $itemNameClean = $this->dropStartChar($itemNameClean,'-');
+
+ //fields that have to be extracted
+ $queryFields = ($fieldClean === $itemNameClean) ? $fieldClean : $fieldClean.','.$itemNameClean;
+
+ $table = $this->getTableName($field);
+ $this->popupArray[$field] = new Popup();
+
+ $popupWhereClause = array_key_exists($field,$this->_popupWhere) ? $this->_popupWhere[$field] : null;
+
+ $result = $this->db->select($table,$queryFields,$popupWhereClause,$fieldClean);
+
+ if ($result and $result !== false)
+ {
+ //get the label of the popup menu
+ $label = array_key_exists($field,$this->_popupLabels) ? $this->_popupLabels[$field] : $table.' : '.$itemNameClean;
+ $this->popupArray[$field]->name = $label;
+
+ //get the table name
+ $fieldTable = isset($result[0][$table][$fieldClean]) ? $table : Params::$aggregateKey;
+ $itemNameTable = isset($result[0][$table][$itemNameClean]) ? $table : Params::$aggregateKey;
+
+ foreach ($result as $row)
+ {
+ $this->popupArray[$field]->itemsValue[] = $row[$fieldTable][$fieldClean];
+
+ if (array_key_exists($field,$this->_popupFunctions))
+ {
+ if (!function_exists($this->_popupFunctions[$field]))
+ {
+ throw new Exception('Error in <b>'.__METHOD__.'</b>: function <b>'.$this->_popupFunctions[$field]. '</b> does not exists');
+ }
+
+ $tempName = call_user_func($this->_popupFunctions[$field],$row[$itemNameTable][$itemNameClean]);
+ }
+ else
+ {
+ $tempName = $row[$itemNameTable][$itemNameClean];
+ }
+
+ $this->popupArray[$field]->itemsName[] = $tempName;
+ }
+ }
+// }
+ }
+ }
+
+
+ //get the element before and after the current one
+ //$key: the key of the self::$where array that indicates the field to be used in order to find out the records before and after
+ //$fields: the fields that have to be extracted
+ public function getNeighbours($key,$fields = '')
+ {
+ //backup of the values
+ $tempWhere = $this->where;
+ $tempLimit = $this->limit;
+ $tempOrderBy = $this->orderBy;
+ $this->limit = 1;
+ //before
+ $this->where[$key] = '<'.$tempWhere[$key];
+ $this->orderBy = $this->getTableName($key).'.'.$key.' DESC';
+ $dataAfter = $this->getFields($fields);
+ //after
+ $this->where[$key] = '>'.$tempWhere[$key];
+ $this->orderBy = $this->getTableName($key).'.'.$key;
+ $dataBefore = $this->getFields($fields);
+ //restore the previous values
+ $this->where = $tempWhere;
+ $this->limit = $tempLimit;
+ $this->orderBy = $tempOrderBy;
+ $result[0] = isset($dataBefore[0]) ? $dataBefore[0] : null;
+ $result[1] = isset($dataAfter[0]) ? $dataAfter[0] : null;
+ return $result;
+ }
+
+ //set the $select property and return the current object
+ public function select($fields = null)
+ {
+ $this->select = $fields;
+ return $this;
+ }
+
+ //set the $from property and return the current object
+ public function from($tables = null)
+ {
+ $this->from = isset($tables) ? $tables : $this->_tables;
+ return $this;
+ }
+
+ //set the $on property and return the current object
+ public function on($joinClause = '-')
+ {
+ $this->on = $joinClause;
+ return $this;
+ }
+
+ //set the $using property and return the current object
+ public function using($using = null)
+ {
+ $this->using = $using;
+ return $this;
+ }
+
+ //set the $where property and return the current object
+ public function where($where = array())
+ {
+ $this->where = $where;
+ return $this;
+ }
+
+ //append the $where array to the ::where property and return the current object
+ public function aWhere($where = array())
+ {
+ $this->appendWhereQueryClause($where);
+ return $this;
+ }
+
+ //set the $groupBy property and return the current object
+ public function groupBy($groupBy = null)
+ {
+ $this->groupBy = $groupBy;
+ return $this;
+ }
+
+ //set the $orderBy property and return the current object
+ public function orderBy($orderBy = null)
+ {
+ $this->orderBy = $orderBy;
+ return $this;
+ }
+
+ //set the $limit property and return the current object
+ public function limit($limit = null)
+ {
+ $this->limit = $limit;
+ return $this;
+ }
+
+ //set the $listArray property
+ public function toList($key, $value = null)
+ {
+ $this->listArray = array($key,$value);
+ $this->toList = true;
+ return $this;
+ }
+
+ //reset all the clauses of the select query
+ public function clear()
+ {
+ $this->select = null;
+ $this->where = array();
+ $this->groupBy = null;
+ $this->orderBy = null;
+ $this->limit = null;
+ $this->from = null;
+ $this->on = null;
+ $this->using = null;
+ $this->toList = false;
+ return $this;
+ }
+
+ //initialize and populate the ::form property (reference to a Form_Form object)
+ public function setForm($defAction = null, $defSubmit = array(), $defMethod = 'POST')
+ {
+ if (isset($this->formStruct))
+ {
+ $action = array_key_exists('action',$this->formStruct) ? $this->formStruct['action'] : $defAction;
+ $submit = array_key_exists('submit',$this->formStruct) ? $this->formStruct['submit'] : $defSubmit;
+ $entries = array_key_exists('entries',$this->formStruct) ? $this->formStruct['entries'] : null;
+ $method = array_key_exists('post',$this->formStruct) ? $this->formStruct['post'] : $defMethod;
+
+ $this->form = new Form_Form($action,$submit,$method);
+
+ if (isset($entries))
+ {
+ $this->form->setEntries($entries);
+ }
+
+ $copy = $this->form->entry;
+
+ foreach ($copy as $name => $entry)
+ {
+ if (strcmp($entry->type,'Select') === 0 and isset($entry->options))
+ {
+ if (!is_array($entry->options))
+ {
+ if (strstr($entry->options,'foreign::'))
+ {
+ $elements = explode('::',$entry->options);
+
+ for ($i = 0; $i < count($elements); $i++)
+ {
+ if (strcmp($elements[$i],'--') === 0) $elements[$i] = null;
+ }
+ //send the query
+ array_shift($elements);
+ $resultSet = call_user_func_array(array($this->db,'select'),$elements);
+
+ $single = true;
+
+ if (strstr($elements[1],','))
+ {
+ $args = explode(',',$elements[1]);
+ //add the table name
+ $args[0] = $elements[0].'.'.$args[0];
+ $args[1] = $elements[0].'.'.$args[1];
+ //associative array
+ $single = false;
+ }
+ else
+ {
+ $args[0] = $elements[0].'.'.$elements[1];
+ $args[1] = null;
+ }
+
+ $list = $this->getList($resultSet,$args[0],$args[1]);
+
+ $this->form->entry[$name]->options = ($single) ? implode(',',array_values($list)) : $list;
+ }
+ }
+ }
+ }
+
+ }
+ else
+ {
+ $this->form = new Form_Form($defAction,$defSubmit,$defMethod);
+ }
+ }
+
+ //get a list from a result set
+ //$resultSet: the result set coming from a select query
+ public function getList($resultSet, $key, $value = null)
+ {
+ $list = array();
+
+ if (strstr($key,'.'))
+ {
+ $arr = explode('.',$key);
+ $keyTable = $arr[0];
+ $keyField = $arr[1];
+ }
+ else
+ {
+ $keyTable = $this->_tablesArray[0];
+ $keyField = $key;
+ }
+
+ if (!isset($value))
+ {
+ foreach ($resultSet as $row)
+ {
+ $list[] = $row[$keyTable][$keyField];
+ }
+ }
+ else
+ {
+ if (strstr($value,'.'))
+ {
+ $arr = explode('.',$value);
+ $valueTable = $arr[0];
+ $valueField = $arr[1];
+ }
+ else
+ {
+ $valueTable = $this->_tablesArray[0];
+ $valueField = $value;
+ }
+
+ foreach ($resultSet as $row)
+ {
+ $list[$row[$keyTable][$keyField]] = $row[$valueTable][$valueField];
+ }
+
+ }
+ return $list;
+ }
+
+ // Retrieves the ID generated for an AUTO_INCREMENT column by the previous query (usually INSERT).
+ public function lastId()
+ {
+ return $this->db->lastId();
+ }
+
+ //send a free query
+ public function query($query)
+ {
+ return $this->db->query($query);
+ }
+
+ //the text of the error message from previous MySQL operation
+ public function getError()
+ {
+ return $this->db->getError();
+ }
+
+ //the numerical value of the error message from previous MySQL operation
+ public function getErrno()
+ {
+ return $this->db->getErrno();
+ }
+
+ //define the abstract method to get the value of the record $id of the main table
+ abstract public function selectId($id);
+
+ //define the abstract method to get the fields from the tables
+ abstract public function getFields();
+
+} \ No newline at end of file
diff --git a/h-source/admin/Library/Model/Map.php b/h-source/admin/Library/Model/Map.php
new file mode 100755
index 0000000..7a36c6f
--- /dev/null
+++ b/h-source/admin/Library/Model/Map.php
@@ -0,0 +1,439 @@
+<?php
+
+// All EasyGiant code is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
+// See COPYRIGHT.txt and LICENSE.txt.
+
+if (!defined('EG')) die('Direct access not allowed!');
+
+class Model_Map extends Model_Base {
+
+// //many to many model
+
+ public $printAssError = 'yes'; //'yes': print association error if the association/dissociation is already present. 'no': doen't print association error
+ public $boxIdentifierName = 'boxIdentifier';//key of the value of the $_POST array that represent the id of the Box that we want to associate with the Item having the id $_POST[$this->identifierName]
+ protected $_boxIdentifierValue = null; //the id of the box that has to be associated with the item
+
+ public function __construct()
+ {
+ //add some submit names (method => form_submit_value)
+ $this->submitNames['associate'] = 'associateAction';
+ $this->submitNames['dissociate'] = 'dissociateAction';
+ //add the allowed methods
+ $this->_allowedDbMethods[] = 'associate';
+ $this->_allowedDbMethods[] = 'dissociate';
+ parent::__construct();
+ }
+
+ public function createMapWhere($choice)
+ { //create the where join clause
+ //$choice=(first,last,all)
+ if (isset($this->on))
+ {
+ return $this->on;
+ }
+ else
+ {
+ $first = $this->_tablesArray[0].'.'.$this->_idFieldsArray[0].'='.$this->_tablesArray[2].'.'.$this->_idFieldsArray[0];
+ $last = $this->_tablesArray[1].'.'.$this->_idFieldsArray[1].'='.$this->_tablesArray[2].'.'.$this->_idFieldsArray[1];
+ switch ($choice) {
+ case 'first':
+ return $first;
+ break;
+ case 'last':
+ return $last;
+ break;
+ case 'all':
+ return $first. ' and '.$last;
+ break;
+ }
+ }
+ }
+
+ //check if a join query is necessary or not
+ //$val: 0 or 1 (items or boxes)
+ //$whereClauseLevel: array containing the field=>value statements of the where clause. If $whereClause = null than $this->where is considered
+ public function checkIfJoinNeeded($val, $whereClauseLevel = null)
+ {
+ $whereClause = isset($whereClauseLevel) ? $whereClauseLevel : $this->where;
+
+ foreach ($whereClause as $field => $value)
+ {
+ if (is_array($value))
+ {
+ if ($this->checkIfJoinNeeded($val, $value) === true) return true;
+ }
+ else
+ {
+ if (strcmp($this->getTableName($field),$this->_tablesArray[$val]) !== 0)
+ {
+ if (strcmp($value,Params::$nullQueryValue) !== 0 or (Params::$nullQueryValue === false)) return true;
+ }
+ }
+ }
+ //return false if no where clause has been defined
+ return false;
+ }
+
+ //method to create the where clause and the list of tables of the select query
+ public function mapQueryElements($val)
+ {
+// $val = $element === 'Items' ? 0 : 1;
+ $tables = $this->_tablesArray[$val];
+ $where = null;
+ $fields = $this->_tablesArray[$val].'.*';
+
+ if ($this->checkIfJoinNeeded($val))
+ {
+ $tables = $this->_tables;
+ $fields = $this->_tablesArray[$val].'.*';
+ $wherePlus = $this->createWhereClause();
+ $wherePlus = isset($wherePlus) ? ' AND ' . $wherePlus : null;
+ $where = $this->createMapWhere('all') . $wherePlus;
+ }
+ else
+ {
+ $where = $this->createWhereClause();
+ }
+
+ return array('tables' => $tables,'where' => $where,'fields' => $fields);
+ }
+
+ //$element: Items or Boxes.
+ //get all Item or Boxes
+ public function getAll($element = 'Items')
+ {
+ return $this->getFields('',$element);
+ }
+
+ //method to get the values of the selected fields
+ //$fields: the fields that have to be excracted from the tableName
+ public function getFields($fields = '',$element = 'Items')
+ {
+ //get all Item or Boxes
+ if ((strcmp($element,'Items') !== 0) and (strcmp($element,'Boxes') !== 0))
+ {
+ throw new Exception('<b>"'.$element. '"</b> argument not allowed in <b>'.__METHOD__.'</b> method');
+ }
+ $val = $element === 'Items' ? 0 : 1;
+
+ $elements = $this->mapQueryElements($val);
+
+ $queryFields = (strcmp($fields,'') === 0) ? $elements['fields'] : $fields;
+
+ return $row = $this->db->select($elements['tables'],$queryFields,$elements['where'],$this->groupBy,$this->orderBy,$this->limit);
+
+ }
+
+ public function send($element = 'Items')
+ {
+ $table = $this->getFields($this->select, $element);
+
+ if ($this->toList)
+ {
+ $key = $this->listArray[0];
+ $value = isset($this->listArray[1]) ? $this->listArray[1] : null;
+ $this->toList = false;
+ return $this->getList($table, $key, $value);
+ }
+ else
+ {
+ return $table;
+ }
+ }
+
+ //the fields that have to be extracted from the table
+ public function getTable($fields = null)
+ {
+ return isset($fields) ? $this->getFields($fields) : $this->getAll();
+ }
+
+ //select the values of a specified record
+ //$id: the id (primary key) of the record
+ //$fields: the comma separated list of fields that have to be extracted
+ public function selectId($id,$fields = null)
+ {
+ $id = (int)$id;
+ $this->setWhereQueryClause(array($this->_idFieldsArray[0] => $id));
+
+ if (isset($fields))
+ {
+ $values = $this->getFields($fields,'Items');
+ }
+ else
+ {
+ $values = $this->getAll('Items');
+ }
+
+ return (count($values) > 0) ? $values[0][$this->_tablesArray[0]] : array();
+ }
+
+ //get the number of records (items or boxes)
+ public function recordNumber($element)
+ {
+ $val = $element === 'Items' ? 0 : 1;
+
+ $elements = $this->mapQueryElements($val);
+ return $this->db->get_num_rows($elements['tables'],$elements['where'],$this->groupBy);
+ }
+
+ //get the number of records (only items)
+ public function rowNumber()
+ {
+ return $this->recordNumber('Items');
+ }
+
+ public function getMax($field)
+ {
+ $elements = $this->mapQueryElements(0);
+ return $this->db->getMax($elements['tables'],$field,$elements['where'],$this->groupBy);
+ }
+
+ public function getMin($field)
+ {
+ $elements = $this->mapQueryElements(0);
+ return $this->db->getMin($elements['tables'],$field,$elements['where'],$this->groupBy);
+ }
+
+ public function getSum($field)
+ {
+ $elements = $this->mapQueryElements(0);
+ return $this->db->getSum($elements['tables'],$field,$elements['where'],$this->groupBy);
+ }
+
+ public function getAvg($field)
+ {
+ $elements = $this->mapQueryElements(0);
+ return $this->db->getAvg($elements['tables'],$field,$elements['where'],$this->groupBy);
+ }
+
+ //check if the table has the field $field equal to $value
+ public function has($field,$value)
+ {
+ $elements = $this->mapQueryElements(0);
+ return $this->db->recordExists($elements['tables'],$field,$value,$elements['where'],$this->groupBy);
+ }
+
+ //associate an item with a box
+ //$idItem : name of the field of the Items table, $idGroup : name of the field of the Boxes table
+ public function associate($idItem = null,$idGroup = null)
+ {
+ $this->queryResult = false;
+ if (isset($idItem) and isset($idGroup))
+ {
+ $idItem = (int)$idItem;
+ $idGroup = (int)$idGroup;
+ $values = array($idItem,$idGroup); //values relative to the fields $this->_idFields
+ $var = $this->checkAssociation($idItem,$idGroup);
+ if (!$var)
+ {
+ $result = $this->db->insert($this->_tablesArray[2],$this->_idFields,$values);
+ $this->setNotice($result);
+ return $result;
+ }
+ else
+ {
+ if (strcmp($this->printAssError,'yes') === 0) $this->notice = $this->_resultString->getString('linked');
+ $this->result = false;
+ }
+ }
+ else
+ {
+ $this->notice = $this->_resultString->getString('no-id');
+ $this->result = false;
+ }
+ return false;
+ }
+
+ //associate an item with a box
+ //$idItem : name of the field of the Items table, $idGroup : name of the field of the Boxes table
+ public function dissociate($idItem = null,$idGroup = null)
+ {
+ $this->queryResult = false;
+ if (isset($idItem) and isset($idGroup))
+ {
+ $idItem = (int)$idItem;
+ $idGroup = (int)$idGroup;
+ $var = $this->checkAssociation($idItem,$idGroup);
+ if ($var)
+ {
+ $result = $this->db->del($this->_tablesArray[2],$this->_idFieldsArray[0].'='.$idItem.' and '.$this->_idFieldsArray[1].'='.$idGroup);
+ $this->setNotice($result);
+ return $result;
+ }
+ else
+ {
+ if (strcmp($this->printAssError,'yes') === 0) $this->notice = $this->_resultString->getString('not-linked');
+ $this->result = false;
+ }
+ }
+ else
+ {
+ $this->notice = $this->_resultString->getString('no-id');
+ $this->result = false;
+ }
+ return false;
+ }
+
+ public function checkAssociation($idItem,$idGroup)
+ {
+ $idItem = (int)$idItem;
+ $idGroup = (int)$idGroup;
+ $numRow = $this->db->get_num_rows($this->_tablesArray[2],$this->_idFieldsArray[0].'='.$idItem.' and '.$this->_idFieldsArray[1].'='.$idGroup);
+ if ($numRow === 1)
+ {
+ return true;
+ }
+ else
+ {
+ return false;
+ }
+ }
+
+ //check what items are associate to a box
+ //itemsArray:array of items to check
+ public function checkAssociationDeep($itemsArray)
+ {
+ $associatedItems = array();
+ $itemsArray = is_array($itemsArray) ? array_values($itemsArray) : array($itemsArray);
+ foreach ($itemsArray as $item) {
+ if ($this->db->recordExists($this->_tablesArray[2],$this->_idFieldsArray[0],$item))
+ {
+ $associatedItems[] = $item;
+ }
+ }
+ return $associatedItems;
+ }
+
+ //method to call the delete query (overriding of the del method of Model.php)
+ //check the referential integrity
+ public function del($id = null, $whereClause = null)
+ {
+ $this->queryResult = false;
+
+ if (isset($whereClause))
+ {
+ return parent::del(null,$whereClause);
+ }
+ else
+ {
+ if ($this->_onDelete === 'check')
+ {
+ if ($this->db->recordExists($this->_tablesArray[2],$this->_idFieldsArray[0],(int)$id))
+ {
+ $this->notice = $this->_resultString->getString('associate');
+ $this->identifierValue = null;
+ $this->result = false;
+ }
+ else
+ {
+ return parent::del((int)$id);
+ }
+ }
+ else if ($this->_onDelete === 'nocheck')
+ {
+ return parent::del((int)$id);
+ }
+ }
+ return false;
+ }
+
+ //override of the updateTable method of the parent class
+ //method that calls the function indicated in $this->submitNames. Ex: if $_POST['delAction'] is found, then the "del" method is called.
+ public function updateTable($methodsList = '',$id = null)
+ {
+ $allowedMethodsArray = explode(',',$methodsList);
+ $resultArray = array();
+ $this->identifierValue = null;
+ if (isset($id))
+ {
+ $this->identifierValue = (int)$id;
+ }
+ else if (isset($_POST[$this->identifierName]))
+ {
+ $this->identifierValue = (int)$_POST[$this->identifierName];
+ }
+ foreach ($this->submitNames as $methodName => $submitName) {
+ if (array_key_exists($submitName,$_POST))
+ {
+ $this->submitName = $submitName;
+ if (method_exists($this,$methodName))
+ {
+ if (in_array($methodName,$allowedMethodsArray))
+ {
+ if ($this->checkConditions($methodName,$this->identifierValue))
+ {
+ $this->notice = null;
+ $methodArray = array('associate','dissociate');
+ if (in_array($methodName,$methodArray))
+ {
+ $this->_boxIdentifierValue = null;
+ if (isset($_POST[$this->boxIdentifierName]))
+ {
+ $this->_boxIdentifierValue = (int)$_POST[$this->boxIdentifierName];
+ }
+ call_user_func_array(array($this,$methodName),array($this->identifierValue,$this->_boxIdentifierValue));
+ }
+ else
+ {
+ call_user_func_array(array($this,$methodName),array($this->identifierValue));
+ }
+ }
+ }
+ }
+ else
+ {
+ throw new Exception('method "'.$methodName. '" not defined in class '.__CLASS__.'; error in method '.__METHOD__);
+ }
+ return; //only one cycle!
+ }
+ }
+ }
+
+ //method to obtain one columns from the tables $this->_tablesArray as an associative array
+ //$valueField: the column that have to be extracted (array_values of the resulting associative array), $keyField: the column that have to play the role of array_keys
+ //$valueField = field:table, $keyField = field:table
+ public function getFieldArray($valueField,$keyField = null, $groupBy = null, $orderBy = null, $limit = null)
+ {
+
+ $keyField = isset($keyField) ? $keyField : $valueField;
+ $valueFieldArray = explode(':',$valueField);
+ $keyFieldArray = explode(':',$keyField);
+
+ $keyFieldTable = $keyFieldArray[0];
+ $valueFieldTable = $valueFieldArray[0];
+
+ $keyFieldName = $keyFieldArray[1];
+ $valueFieldName = $valueFieldArray[1];
+
+ $fields = implode('.',$keyFieldArray) . ',' . implode('.',$valueFieldArray);
+
+ $temp = $this->where; //save the $this->where array
+ $this->where = array();
+
+ $val = array_search($keyFieldTable,$this->_tablesArray);
+
+ if (strcmp($keyFieldTable,$valueFieldTable) !== 0)
+ {
+ throw new Exception("the tables '$valueFieldTable' and '$keyFieldTable' do not match in ".__METHOD__);
+ }
+
+ if ($val === false or !in_array($val,array(0,1)))
+ {
+ throw new Exception("the table '$keyFieldTable' is not allowed in ".__METHOD__);
+ }
+
+ $elements = $this->mapQueryElements($val);
+
+ $table = $this->db->select($elements['tables'],$fields,$elements['where'],$groupBy,$orderBy,$limit);
+ $this->where = $temp;
+
+ $returnArray = array();
+ foreach ($table as $record) {
+ $returnArray[$record[$keyFieldTable][$keyFieldName]] = $record[$valueFieldTable][$valueFieldName];
+ }
+
+ return $returnArray;
+
+ }
+
+} \ No newline at end of file
diff --git a/h-source/admin/Library/Model/Tree.php b/h-source/admin/Library/Model/Tree.php
new file mode 100755
index 0000000..d7b655d
--- /dev/null
+++ b/h-source/admin/Library/Model/Tree.php
@@ -0,0 +1,287 @@
+<?php
+
+// All EasyGiant code is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
+// See COPYRIGHT.txt and LICENSE.txt.
+
+if (!defined('EG')) die('Direct access not allowed!');
+
+class Model_Tree extends Model_Base {
+
+ public function __construct() {
+ parent::__construct();
+ }
+
+ //method to create the first part of where clause
+ //$index: the index of $this->_tablesArray
+ public function createTreeWhere($index) {
+ if (isset($this->on))
+ {
+ return $this->on;
+ }
+ else
+ {
+ $whereArray = array();
+ for ($i = $index; $i < (count($this->_tablesArray)-1); $i++)
+ {
+ $whereArray[] = $this->_tablesArray[$i].'.'.$this->_idFieldsArray[$i+1].'='.$this->_tablesArray[$i+1].'.'.$this->_idFieldsArray[$i+1];
+ }
+ $whereString = !empty($whereArray) ? implode(' and ',$whereArray) : null;
+ return $whereString;
+ }
+ }
+
+ //create the list of tables of the select query
+ //$index: the index of $this->_tablesArray
+ public function createTablesList($index) {
+ if (isset($this->from))
+ {
+ return $this->from;
+ }
+ else
+ {
+ $tablesString = null;
+ for ($i = $index; $i < (count($this->_tablesArray)-1); $i++)
+ {
+ $tablesString .= $this->_tablesArray[$i] . ',';
+ }
+ $tablesString .= $this->_tablesArray[count($this->_tablesArray)-1];
+ return $tablesString;
+ }
+ }
+
+ //method to create the list of fields of the select query
+ public function createFieldsList($index) {
+ $fieldsString = null;
+ for ($i = $index; $i < (count($this->_tablesArray)-1); $i++)
+ {
+ $fieldsString .= $this->_tablesArray[$i] . '.*,';
+ }
+ $fieldsString .= $this->_tablesArray[count($this->_tablesArray)-1].'.*';
+ return $fieldsString;
+ }
+
+
+ //method to create the where clause and the list of tables and fields of the select query
+ //$tableName: the table name ($this->_tablesArray)
+ //$choice:all->all the tables in $this->_arrayTables, other value->only the table of $this->_arrayTables ad index $index
+ //return: $elements = array('tables'=>$tables,'where'=>$where,'fields'=>$fields)
+ public function treeQueryElements($tableName,$choice = 'all')
+ {
+ $index = array_search($tableName,$this->_tablesArray);
+ $subArray = ($choice === 'all') ? array_slice($this->_tablesArray,$index) : array($tableName); //this array is necessary to verify that the where clause makes sense
+ $tables = ($choice === 'all') ? $this->createTablesList($index) : $tableName;
+ $where = ($choice === 'all') ? $this->createTreeWhere($index) : null;
+ $fields = ($choice === 'all') ? $this->createFieldsList($index) : $tableName.'.*';
+
+ $wherePlus = $this->createWhereClause();
+
+ if (!isset($this->on))
+ {
+ $on = null;
+
+ if (isset($where) and isset($wherePlus))
+ {
+ $where .= ' AND ' . $wherePlus;
+ }
+ else if (!isset($where) and isset($wherePlus))
+ {
+ $where .= $wherePlus;
+ }
+ }
+ else
+ {
+ $on = (strcmp($where,'-') !== 0) ? $where : null;
+ $where = $wherePlus;
+ }
+
+ return array('tables' => $tables,'where' => $where,'fields'=>$fields,'on'=>$on);
+ }
+
+
+ //method to obtain the values of the whole tree
+ //$choice:all->all the tables in $this->_arrayTables, other value->only the table of $this->_arrayTables ad index $index
+ public function getAll($choice = 'all') {
+ return $this->getFields('',$choice);
+ }
+
+ //method to get the values of the selected fields
+ //it walks the tree by means of a join query
+ //$fields: the fields that have to be excracted from the tableName
+ public function getFields($fields = '',$choice = 'all')
+ {
+ $elements = $this->treeQueryElements($this->_tablesArray[0],$choice);
+
+ $queryFields = (strcmp($fields,'') === 0) ? $elements['fields'] : $fields;
+
+ return $row = $this->db->select($elements['tables'],$queryFields,$elements['where'],$this->groupBy,$this->orderBy,$this->limit,$elements['on'],$this->using);
+ }
+
+ public function send()
+ {
+ $table = $this->getFields($this->select);
+
+ if ($this->toList)
+ {
+ $key = $this->listArray[0];
+ $value = isset($this->listArray[1]) ? $this->listArray[1] : null;
+ $this->toList = false;
+ return $this->getList($table, $key, $value);
+ }
+ else
+ {
+ return $table;
+ }
+ }
+
+ //call the getAll method with $tableName = $this->_tablesArray[0]
+ //the fields that have to be extracted from the table
+ public function getTable($fields = null) {
+ return isset($fields) ? $this->getFields($fields) : $this->getAll();
+ }
+
+ //select the values of a specified record
+ //$id: the id (primary key) of the record
+ //$fields: the comma separated list of fields that have to be extracted
+ public function selectId($id,$fields = null) {
+ $this->setWhereQueryClause(array($this->_idFieldsArray[0] => (int)$id));
+
+ $this->using = null;
+
+ if (isset($fields))
+ {
+ $values = $this->getFields($fields,'other');
+ }
+ else
+ {
+ $values = $this->getAll('other');
+ }
+
+ return (count($values) > 0) ? $values[0][$this->_tablesArray[0]] : array();
+
+ }
+
+ //get the number of records ()
+ //the number of records of the table $tableName is returned
+ public function rowNumber() {
+ $elements = $this->treeQueryElements($this->_tablesArray[0]);
+ return $this->db->get_num_rows($elements['tables'],$elements['where'],$this->groupBy,$elements['on'],$this->using);
+ }
+
+ public function getMax($field)
+ {
+ $elements = $this->treeQueryElements($this->_tablesArray[0]);
+ return $this->db->getMax($elements['tables'],$field,$elements['where'],$this->groupBy,$elements['on'],$this->using);
+ }
+
+ public function getMin($field)
+ {
+ $elements = $this->treeQueryElements($this->_tablesArray[0]);
+ return $this->db->getMin($elements['tables'],$field,$elements['where'],$this->groupBy,$elements['on'],$this->using);
+ }
+
+ public function getSum($field)
+ {
+ $elements = $this->treeQueryElements($this->_tablesArray[0]);
+ return $this->db->getSum($elements['tables'],$field,$elements['where'],$this->groupBy,$elements['on'],$this->using);
+ }
+
+ public function getAvg($field)
+ {
+ $elements = $this->treeQueryElements($this->_tablesArray[0]);
+ return $this->db->getAvg($elements['tables'],$field,$elements['where'],$this->groupBy,$elements['on'],$this->using);
+ }
+
+ //check if the table has the field $field equal to $value
+ public function has($field,$value)
+ {
+ $elements = $this->treeQueryElements($this->_tablesArray[0]);
+ return $this->db->recordExists($elements['tables'],$field,$value,$elements['where'],$this->groupBy,$elements['on'],$this->using);
+ }
+
+// //get the number of records of the table $this->_tablesArray[0]
+// public function rowNumber() {
+// return $this->recordNumber($this->_tablesArray[0]);
+// }
+
+ //method to call the delete query (overriding of the del method of Model.php)
+ //check the referential integrity
+ public function del($id = null, $whereClause = null)
+ {
+ $this->queryResult = false;
+
+ if (isset($whereClause))
+ {
+ return parent::del(null,$whereClause);
+ }
+ else
+ {
+ if ($this->_onDelete === 'check' and isset($this->_reference))
+ {
+ if (isset($this->_reference[0]) and isset($this->_reference[1]))
+ {
+ if ($this->db->recordExists($this->_reference[0],$this->_reference[1],(int)$id))
+ {
+ $this->notice = $this->_resultString->getString('associate');
+ $this->identifierValue = null;
+ $this->result = false;
+ }
+ else
+ {
+ return parent::del((int)$id);
+ }
+ }
+ else
+ {
+ throw new Exception('you have forgotten to set \'$this->_reference\' or you have forgotten to set $this->_onDelete = \'nocheck\'');
+ }
+ }
+ else
+ {
+ return parent::del((int)$id);
+ }
+ }
+ return false;
+ }
+
+ //method to obtain one columns from the tables $this->_tablesArray as an associative array
+ //$valueField: the column that have to be extracted (array_values of the resulting associative array), $keyField: the column that have to play the role of array_keys
+ public function getFieldArray($valueField,$keyField = null, $groupBy = null, $orderBy = null, $limit = null) {
+
+ $keyField = isset($keyField) ? $keyField : $valueField;
+ $valueFieldArray = explode(':',$valueField);
+ $keyFieldArray = explode(':',$keyField);
+
+ $keyFieldTable = $keyFieldArray[0];
+ $valueFieldTable = $valueFieldArray[0];
+
+ $keyFieldName = $keyFieldArray[1];
+ $valueFieldName = $valueFieldArray[1];
+
+ $fields = implode('.',$keyFieldArray) . ',' . implode('.',$valueFieldArray);
+
+ $temp = $this->where; //save the $this->where array
+ $this->where = array();
+
+ if (strcmp($keyFieldTable,$valueFieldTable) !== 0) {
+ throw new Exception("the tables '$valueFieldTable' and '$keyFieldTable' do not match in ".__METHOD__);
+ }
+
+ if (!in_array($keyFieldTable,$this->_tablesArray)) {
+ throw new Exception("the table '$keyFieldTable' is not allowed in ".__METHOD__);
+ }
+
+ $elements = $this->treeQueryElements($keyFieldTable,'');
+
+ $table = $this->db->select($elements['tables'],$fields,$elements['where'],$groupBy,$orderBy,$limit,$elements['on'],$this->using);
+ $this->where = $temp;
+
+ $returnArray = array();
+ foreach ($table as $record) {
+ $returnArray[$record[$keyFieldTable][$keyFieldName]] = $record[$valueFieldTable][$valueFieldName];
+ }
+
+ return $returnArray;
+
+ }
+
+} \ No newline at end of file
diff --git a/h-source/admin/Library/Model/index.html b/h-source/admin/Library/Model/index.html
new file mode 100644
index 0000000..8d1c8b6
--- /dev/null
+++ b/h-source/admin/Library/Model/index.html
@@ -0,0 +1 @@
+
diff --git a/h-source/admin/Library/Params.php b/h-source/admin/Library/Params.php
new file mode 100644
index 0000000..9ec0ba5
--- /dev/null
+++ b/h-source/admin/Library/Params.php
@@ -0,0 +1,37 @@
+<?php
+
+// All EasyGiant code is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
+// See COPYRIGHT.txt and LICENSE.txt.
+
+if (!defined('EG')) die('Direct access not allowed!');
+
+//class containing all the parameters necessary to EasyGiant to work properly
+class Params
+{
+
+ public static $allowedDb = array('Mysql','Mysqli','None'); //allowed database type
+
+ public static $allowedSanitizeFunc = 'sanitizeAll,sanitizeDb,sanitizeHtml,forceInt,forceNat,none,md5,sha1'; //allowed sanitize functions
+
+ public static $allowedHashFunc = array('md5','sha1'); //allowed hash functions
+
+ //conventional null value for the value of the field in the createWhereClause method of the Model class
+ public static $nullQueryValue = false;
+
+ //class name of the div that contains the error strings
+ public static $errorStringClassName = 'alert';
+
+ //table name in the returning structure of the select queries in the case of an aggregate function. Ex count(*),sum(*)
+ public static $aggregateKey = 'aggregate';
+
+ //htmlentities function charset
+ //see http://php.net/manual/en/function.htmlentities.php for a complete list of the allowed values
+ public static $htmlentititiesCharset = DEFAULT_CHARSET;
+
+ //list of symbols used in the statements of the where clause of the select queries
+ public static $whereClauseSymbolArray = array('<','>','!=','<=','>=','in(','not in(');
+
+ //is the mbstring extension enabled?
+ public static $mbStringLoaded = false;
+
+} \ No newline at end of file
diff --git a/h-source/admin/Library/Popup.php b/h-source/admin/Library/Popup.php
new file mode 100755
index 0000000..55ea7f5
--- /dev/null
+++ b/h-source/admin/Library/Popup.php
@@ -0,0 +1,15 @@
+<?php
+
+// All EasyGiant code is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
+// See COPYRIGHT.txt and LICENSE.txt.
+
+if (!defined('EG')) die('Direct access not allowed!');
+
+//class to contain the values of the popup menù of the scaffold
+class Popup {
+
+ public $name; //the name of the popup
+ public $itemsName = array(); //array containing the names of the different items of the list (popup)
+ public $itemsValue = array(); //array containing the values of the different items of the list (popup)
+
+}
diff --git a/h-source/admin/Library/Request.php b/h-source/admin/Library/Request.php
new file mode 100644
index 0000000..12bf16c
--- /dev/null
+++ b/h-source/admin/Library/Request.php
@@ -0,0 +1,39 @@
+<?php
+
+// All EasyGiant code is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
+// See COPYRIGHT.txt and LICENSE.txt.
+
+if (!defined('EG')) die('Direct access not allowed!');
+
+//manage the associative arrays inside the request ($_GET,$_POST,$_COOKIE)
+class Request
+{
+
+ public function get($name, $default = null, $func = 'none')
+ {
+ if (!function_exists($func))
+ {
+ throw new Exception('Error in <b>'.__METHOD__.'</b>: function <b>'.$func. '</b> does not exists');
+ }
+ return isset($_GET[$name]) ? call_user_func($func,$_GET[$name]) : $default;
+ }
+
+ public function post($name, $default = null, $func = 'none')
+ {
+ if (!function_exists($func))
+ {
+ throw new Exception('Error in <b>'.__METHOD__.'</b>: function <b>'.$func. '</b> does not exists');
+ }
+ return isset($_POST[$name]) ? call_user_func($func,$_POST[$name]) : $default;
+ }
+
+ public function cookie($name, $default = null, $func = 'none')
+ {
+ if (!function_exists($func))
+ {
+ throw new Exception('Error in <b>'.__METHOD__.'</b>: function <b>'.$func. '</b> does not exists');
+ }
+ return isset($_COOKIE[$name]) ? call_user_func($func,$_COOKIE[$name]) : $default;
+ }
+
+} \ No newline at end of file
diff --git a/h-source/admin/Library/Scaffold.php b/h-source/admin/Library/Scaffold.php
new file mode 100755
index 0000000..2ac3fa5
--- /dev/null
+++ b/h-source/admin/Library/Scaffold.php
@@ -0,0 +1,272 @@
+<?php
+
+// All EasyGiant code is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
+// See COPYRIGHT.txt and LICENSE.txt.
+
+if (!defined('EG')) die('Direct access not allowed!');
+
+//class to manage the scaffold of the controller
+class Scaffold
+{
+
+ protected $_type = null; //the type of the scaffold. It can be 'main' or 'form'
+ protected $_queryType = null; //it can be insert or update
+
+ protected $_primaryKey = null; //the primary key of the table
+ protected $_controller = null; //the name of the controller
+
+ public $model = null; //the reference to the model associated with the controller
+
+ public $viewArgs = array(); //the associative array representing the status args of the main action of the controller.
+
+ public $params = array(); //associative array containing the parameters of the scaffold
+ public $html = array(); //associative array containing the HTML of the scaffold ('pageList'=>HTML,..)
+
+ public $mainMenu = null; //the reference to the MenuHelper object
+ public $pageList = null; //the reference to the PageDivisionHelper object
+ public $itemList = null; //the reference to the ListHelper object
+ public $popupMenu = null; //the reference to the PopupHelper object
+
+ public $form = null; //the reference to the form object
+ public $entries = null; //the entries of the form (string having entries separated by comma)
+ public $values = array(); //the values inserted in the form (taken from the table if $this->queryType === 'update' or if an error occured during the databse query, otherwise taken from the $_POST array)
+
+ //the list of fields of the select query
+ public $fields = null;
+
+ public function __construct($type,$controller,$model,$viewArgs,$params = null) {
+
+ $this->_type = $type;
+ $this->_controller = $controller;
+ $this->model = $model;
+ $this->viewArgs = $viewArgs;
+
+ $autoParams = array(
+ 'mainAction' => 'main',
+ 'modifyAction' => 'form/update',
+ 'associateAction' => 'associate',
+ 'panelController' => 'panel',
+ 'pageList' => true,
+ 'pageVariable' => 'page',
+ 'recordPerPage' => 10,
+ 'mainMenu' => 'panel,add',
+ 'formMenu' => 'panel,back',
+ 'postSubmitValue' => 'Save',
+ 'popup' => false,
+ 'popupType' => 'exclusive'
+ );
+
+ //set the $this->scaffold->params array
+ if (is_array($params)) {
+ foreach ($params as $key => $value) {
+ $autoParams[$key] = $value;
+ }
+ }
+ $this->params = $autoParams;
+
+ }
+
+ //ad some clauses to the select query
+ //whereArray = array ($table_field => $value)
+ public function appendWhereQueryClause($whereArray)
+ {
+ $this->model->appendWhereQueryClause($whereArray);
+ }
+
+ //set clauses to the select query
+ //whereArray = array ($table_field => $value)
+ public function setWhereQueryClause($whereArray)
+ {
+ $this->model->setWhereQueryClause($whereArray);
+ }
+
+ //initialize the main scaffold (ListHelper)
+ //$recordList: field of the table to show, $primaryKey: the key of the table
+ public function loadMain($recordList,$primaryKey,$theme = 'edit,del')
+ {
+ $this->_primaryKey = $primaryKey;
+
+ $recordListArray = explode(',',$recordList);
+ foreach ($recordListArray as $record) {
+ $this->itemList->addItem("simpleText",";$record;");
+ }
+
+ $themeArray = explode(',',$theme);
+
+ foreach ($themeArray as $el)
+ {
+ switch ($el)
+ {
+ case 'moveup':
+ $this->itemList->addItem('moveupForm',$this->_controller.'/'.$this->params['mainAction'],$primaryKey);
+ break;
+ case 'movedown':
+ $this->itemList->addItem('movedownForm',$this->_controller.'/'.$this->params['mainAction'],$primaryKey);
+ break;
+ case 'link':
+ $this->itemList->addItem('associateForm',$this->_controller.'/'.$this->params['associateAction'],$primaryKey);
+ break;
+ case 'edit':
+ $this->itemList->addItem('editForm',$this->_controller.'/'.$this->params['modifyAction'],$primaryKey);
+ break;
+ case 'del':
+ $this->itemList->addItem('delForm',$this->_controller.'/'.$this->params['mainAction'],$primaryKey);
+ break;
+ }
+ }
+
+ }
+
+ //initialize the form
+ //$queryType = insert/update
+ //$action: the action of the form (controller/action/queryString)
+ public function loadForm($queryType,$action)
+ {
+ $this->queryType = $queryType;
+ $submitName = $this->model->getSubmitName($queryType);
+ $value = $this->params['postSubmitValue'];
+ $viewStatus = Url::createUrl(array_values($this->viewArgs));
+ $this->model->setForm($action.$viewStatus,array($submitName => $value),'POST');
+ $this->form = $this->model->form;
+ }
+
+ //function to obtain the values to use in the form
+ //$func = function to validate the values
+ //$id = the id of the record (used if $_POST[$this->m[$this->model]->identifierName] is not present)
+ public function getFormValues($func = 'sanitizeHtml',$id = null,$defaultValues = array(),$functionsIfFromDb = array())
+ {
+ if ($this->_type === 'form')
+ {
+ $this->values = $this->model->getFormValues($this->queryType,$func,$id,$defaultValues,$functionsIfFromDb);
+ }
+ }
+
+ //set the head of the table
+ //$columnsName: name of the columns. It has to be a comma-separated list of strings
+ public function setHead($columnsName)
+ {
+ $this->itemList->setHead($columnsName);
+ }
+
+ //method to set the type of the entries of the form
+ //$entries: string containing the list of the entries where each entry is separated by comma: entry1,entry2,entry3
+ //$entryType: associative array that describes the entries of the form. The key is the entry name while the value is the entry type (textarea,inputText,etc)
+ public function setFormEntries($entries = 'model',$entryType = array(),$optionsArray = array())
+ {
+ if ($this->_type === 'form')
+ {
+ if ($entries === 'model')
+ {
+ $this->entries = $this->model->fields;
+ if ($this->queryType === 'update')
+ {
+ $this->entries .= ','. $this->model->identifierName;
+ }
+ }
+ else
+ {
+ $this->entries = null;
+ }
+ $entriesArray = explode(',',$this->entries);
+ if (isset($this->form))
+ {
+ foreach ($entriesArray as $entry)
+ {
+ $type = isset($entryType[$entry]) ? $entryType[$entry] : 'InputText';
+ $options = isset($optionsArray[$entry]) ? $optionsArray[$entry] : null;
+ $this->form->setEntry($entry,$type,$options);
+ }
+ if ($this->queryType === 'update')
+ {
+ $this->form->setEntry($this->model->identifierName,'Hidden');
+ }
+ }
+ else
+ {
+ throw new Exception('form object has not been initialized. Call the <b>scaffold->loadForm</b> method before');
+ }
+ }
+ }
+
+ //add an item to the list of items
+ public function addItem($type, $action = '', $field = '', $name = '') {
+ if ($this->_type === 'main') {
+ $this->itemList->addItem($type, $action, $field, $name);
+ }
+ }
+
+ //update the table
+ public function update($methodsList = '',$id = null) {
+ $this->model->updateTable($methodsList,$id);
+ }
+
+ //method to create the HTML of the scaffold
+ //$values: the values to insert in the from entries
+ public function render($values = null,$subset = null)
+ {
+
+ if ($this->_type === 'main')
+ {
+
+ $recordNumber = $this->model->rowNumber();
+
+ if (isset($this->viewArgs[$this->params['pageVariable']]))
+ {
+ $page = $this->viewArgs[$this->params['pageVariable']];
+ }
+ else
+ {
+ $this->params['pageList'] = false;
+ }
+
+ $recordPerPage = $this->params['recordPerPage'];
+
+ if ($this->params['pageList'] === true)
+ {
+ $this->model->limit = $this->pageList->getLimit($page,$recordNumber,$recordPerPage);
+ $this->html['pageList'] = $this->pageList->render((int)($page-2),5);
+ $position = array($page,$this->pageList->getNumbOfPages());
+ }
+ else
+ {
+ $this->model->limit = null;
+ $this->html['pageList'] = null;
+ $position = array(1,1);
+ }
+
+ $values = $this->model->getTable($this->fields);
+
+ $primaryKey = $this->_primaryKey;
+
+ //pass the variable position
+ $this->itemList->position = $position;
+ $this->html['main'] = $this->itemList->render($values);
+
+ $this->html['menu'] = $this->mainMenu->render($this->params['mainMenu']);
+
+ $popupHtml = null;
+ if ($this->params['popup'] === true)
+ {
+ $this->html['popup'] = $this->popupMenu->render();
+ $popupHtml = "<div class='verticalMenu'>\n".$this->html['popup']."\n</div>\n";
+ }
+
+ $this->html['all'] = "<div class='mainMenu'>".$this->html['menu']."</div>\n".$this->model->notice."\n $popupHtml \n<div class='recordsBox'>\n".$this->html['main']."\n</div>\n"."<div class='viewFooter'>\n<div class='pageList'>\n".$this->html['pageList']."</div>\n</div>\n\n";
+
+ }
+ else if ($this->_type === 'form')
+ {
+
+ $subset = (!isset($subset)) ? $this->entries : $subset;
+ $values = (!isset($values)) ? $this->values : $values;
+ $this->html['menu'] = $this->mainMenu->render($this->params['formMenu']);
+ $this->html['main'] = $this->form->render($values,$subset);
+ $this->html['all'] = "<div class='mainMenu'>\n".$this->html['menu']."\n</div>\n".$this->model->notice."\n<div class='scaffold_form'>\n".$this->html['main']."</div>\n";
+
+ }
+
+ return $this->html['all'];
+
+ }
+
+} \ No newline at end of file
diff --git a/h-source/admin/Library/Strings/Functions.php b/h-source/admin/Library/Strings/Functions.php
new file mode 100644
index 0000000..eabc0d8
--- /dev/null
+++ b/h-source/admin/Library/Strings/Functions.php
@@ -0,0 +1,30 @@
+<?php
+
+// All EasyGiant code is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
+// See COPYRIGHT.txt and LICENSE.txt.
+
+if (!defined('EG')) die('Direct access not allowed!');
+
+
+function eg_strlen($string)
+{
+ return Params::$mbStringLoaded === true ? mb_strlen($string,DEFAULT_CHARSET) : strlen($string);
+}
+
+
+function eg_strtoupper($string)
+{
+ return Params::$mbStringLoaded === true ? mb_strtoupper($string,DEFAULT_CHARSET) : strtoupper($string);
+}
+
+
+function eg_strtolower($string)
+{
+ return Params::$mbStringLoaded === true ? mb_strtolower($string,DEFAULT_CHARSET) : strtolower($string);
+}
+
+
+// function eg_substr($string, $start, $length)
+// {
+// return Params::$mbStringLoaded === true ? mb_strtolower($string,DEFAULT_CHARSET) : strtolower($string);
+// } \ No newline at end of file
diff --git a/h-source/admin/Library/Theme.php b/h-source/admin/Library/Theme.php
new file mode 100755
index 0000000..692697e
--- /dev/null
+++ b/h-source/admin/Library/Theme.php
@@ -0,0 +1,79 @@
+<?php
+
+// All EasyGiant code is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
+// See COPYRIGHT.txt and LICENSE.txt.
+
+if (!defined('EG')) die('Direct access not allowed!');
+
+class Theme {
+
+ protected $_data = array();
+ protected $_viewFiles = array(); //view files to require
+ protected $_lastView = null;
+
+ public $baseUrl = null; //the base url of the website: http://domainname
+ public $baseUrlSrc = null; //the base url of the website (http://domainname) in the case MOD_REWRITE_MODULE has been set to false
+
+ public $viewArgs = array();
+ public $viewStatus = '';
+ public $controller = 'controller';
+ public $action = '';
+ public $currPage; //the URL of the current page
+
+ function __construct($controller) {
+ $this->controller = $controller;
+ $this->baseUrl = MOD_REWRITE_MODULE === true ? 'http://' . DOMAIN_NAME : 'http://' . DOMAIN_NAME . '/index.php';
+ $this->baseUrlSrc = 'http://' . DOMAIN_NAME;
+ }
+
+
+ public function set($values)
+ {
+ $this->_data = $values;
+ }
+
+ public function append($values)
+ {
+ $this->_data = array_merge($this->_data,$values);
+ }
+
+ //clean the $this->viewFiles array
+ public function clean() {
+ $this->_viewFiles = array();
+ $this->_lastView = null;
+ }
+
+ public function load($fileName,$option = 'none') {
+ if ((strcmp($option,'last') !== 0) and (strcmp($option,'none') !== 0)) {
+ throw new Exception('"'.$option. '" argument not allowed in '.__METHOD__.' method');
+ }
+ if ($option === 'last') {
+ $this->_lastView = $fileName;
+ } else {
+ $this->_viewFiles[] = $fileName;
+ }
+ }
+
+
+ public function render() {
+ extract($this->_data);
+
+ foreach ($this->_viewFiles as $file) {
+ if (file_exists(ROOT . DS . APPLICATION_PATH . DS . 'Views' . DS . ucwords($this->controller) . DS . $file . '.php')) {
+ include (ROOT . DS . APPLICATION_PATH . DS . 'Views' . DS . ucwords($this->controller) . DS . $file . '.php');
+ } else {
+ include (ROOT . DS . APPLICATION_PATH . DS . 'Views' . DS . $file . '.php');
+ }
+ }
+
+ if (isset($this->_lastView)) {
+ if (file_exists(ROOT . DS . APPLICATION_PATH . DS . 'Views' . DS . ucwords($this->controller) . DS . $this->_lastView . '.php')) {
+ include (ROOT . DS . APPLICATION_PATH . DS . 'Views' . DS . ucwords($this->controller) . DS . $this->_lastView . '.php');
+ } else {
+ include (ROOT . DS . APPLICATION_PATH . DS . 'Views' . DS . $this->_lastView . '.php');
+ }
+ }
+
+ }
+
+}
diff --git a/h-source/admin/Library/Url.php b/h-source/admin/Library/Url.php
new file mode 100755
index 0000000..4e2ca5e
--- /dev/null
+++ b/h-source/admin/Library/Url.php
@@ -0,0 +1,36 @@
+<?php
+
+// All EasyGiant code is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
+// See COPYRIGHT.txt and LICENSE.txt.
+
+if (!defined('EG')) die('Direct access not allowed!');
+
+class Url {
+
+ //get the url starting from the root folder
+ public static function getRoot($pathFromRootFolder = null) {
+ $url = MOD_REWRITE_MODULE === true ? 'http://' . DOMAIN_NAME . '/' . $pathFromRootFolder : 'http://' . DOMAIN_NAME . '/index.php/' . $pathFromRootFolder;
+ return $url;
+ }
+
+ //create an url string (element1/element2/element4) from the values of the array $valuesArray considering only the elements indicated in the numeric string $numericString (in this case '1,2,4')
+ public function createUrl($valuesArray,$numericString = null) {
+ $elementsArray = explode(',',$numericString);
+ $valuesArray = array_values($valuesArray);
+ $urlString = null;
+ for ($i = 0; $i < count($valuesArray); $i++)
+ {
+ if (isset($numericString)) {
+ if (isset($valuesArray[$i]) and in_array($i,$elementsArray)) {
+ $urlString .= "/".$valuesArray[$i];
+ }
+ } else {
+ if (isset($valuesArray[$i])) {
+ $urlString .= "/".$valuesArray[$i];
+ }
+ }
+ }
+ return $urlString;
+ }
+
+}
diff --git a/h-source/admin/Library/Users/CheckAdmin.php b/h-source/admin/Library/Users/CheckAdmin.php
new file mode 100755
index 0000000..9a47b16
--- /dev/null
+++ b/h-source/admin/Library/Users/CheckAdmin.php
@@ -0,0 +1,369 @@
+<?php
+
+// All EasyGiant code is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
+// See COPYRIGHT.txt and LICENSE.txt.
+
+if (!defined('EG')) die('Direct access not allowed!');
+
+class Users_CheckAdmin {
+
+ public $status = array();
+
+ protected $_sessionsTable; //table containing all the sessions
+ protected $_usersTable; //table containing all the users
+ protected $_groupsTable; //table containing all the groups
+ protected $_manyToManyTable; //table for many to many relationships
+ protected $_accessesTable; //table containing all the accesses to admin side
+ protected $uid = null;
+ protected $_token = null; //token used in order to defense against CSRF (cross sire request forgeries)
+ protected $_login; //login action
+ protected $_main; //main action
+ protected $_retype; //retype (the password) action
+ protected $_db; //reference to the database layer class
+ protected $_params = array(); //the parameters of the object
+
+ public function __construct($params = null) {
+ $this->_params = $params;
+
+ $this->_sessionsTable = $params['sessionsTable'];
+ $this->_usersTable = $params['usersTable'];
+ $this->_groupsTable = $params['groupsTable'];
+ $this->_manyToManyTable = $params['manyToManyTable'];
+ $this->_accessesTable = $params['accessesTable'];
+ $this->_login = Url::getRoot(null) . $params['users_controller'] . '/' . $params['users_login_action'] ;
+ $this->_main = Url::getRoot(null) . $params['panel_controller'] . '/' . $params['panel_main_action'] ;
+ $this->_retype = Url::getRoot(null) . $params['users_controller'] . '/' . $params['hijacking_action'] ;
+ $this->_db = Factory_Db::getInstance($params['database_type']);
+ }
+
+ private function acquireCookie() { #obtain cookie
+ #cookie
+ $this->uid = NULL;
+ global $_COOKIE;
+ $this->uid = isset($_COOKIE[$this->_params['cookie_name']]) ? sanitizeAlnum($_COOKIE[$this->_params['cookie_name']]) : null;
+ }
+
+ private function cleanSessions()
+ {
+ #cancello le sessioni scadute
+ $row = $this->_db->select($this->_sessionsTable,'creation_date',"uid='".$this->uid."'");
+ if ($row)
+ {
+ if ($row[0][$this->_sessionsTable]['creation_date'])
+ {
+ if($row[0][$this->_sessionsTable]['creation_date'] + $this->_params['session_expire'] <= time())
+ {
+ setcookie($this->_params['cookie_name'],'',time()-3600,$this->_params['cookie_path']);
+ }
+ }
+ }
+ $this->_db->del($this->_sessionsTable,"creation_date + " . $this->_params['session_expire'] . " <= ".time());
+ }
+
+ public function checkStatus()
+ { #controlla se l'utente è già loggato
+ $this->acquireCookie(); #ottengo il cookie
+ $this->cleanSessions(); #elimino le sessioni vecchie
+ $row=$this->_db->select($this->_usersTable.','.$this->_sessionsTable,$this->_usersTable.'.id_user,username,token,user_agent',$this->_usersTable.".id_user=".$this->_sessionsTable.".id_user and uid='".$this->uid."'");
+ if (count($row) === 1 and $row !== false)
+ {
+ $this->status['user']=$row[0][$this->_usersTable]['username'];
+ $this->status['status']='logged';
+ $this->status['id_user']=$row[0][$this->_usersTable]['id_user'];
+ $this->status['user_agent'] = $row[0][$this->_sessionsTable]['user_agent'];
+ $this->status['token'] = $row[0][$this->_sessionsTable]['token'];
+ $this->obtainGroups();
+ } else {
+ $this->status['user']='sconosciuto';
+ $this->status['status']='not-logged';
+ $this->status['id_user']='';
+ $this->status['user_agent']='';
+ $this->status['token'] = '';
+ $this->status['groups'] = array();
+ }
+ }
+
+ public function redirect($val,$time = 3) { #fa il redirect dell'utente
+ if ($val === 'logged') {
+ header('Refresh: '.$time.';url='.$this->_main);
+ if ($time !== 0) echo "You are already logged, ".$this->status['user']."..";
+ } else if ($val === 'accepted') {
+ header('Refresh: '.$time.';url='.$this->_main);
+ if ($time !== 0) echo "Hi ".$this->status['user']."..";
+ } else if ($val === 'login-error') {
+ header('Refresh: '.$time.';url='.$this->_login);
+ if ($time !== 0) echo "Wrong username or password...";
+ } else if ($val === 'not-logged') {
+ header('Refresh: '.$time.';url='.$this->_login);
+ if ($time !== 0) echo "Limited access... sorry";
+ } else if ($val === 'not-authorized') {
+ header('Refresh: '.$time.';url='.$this->_main);
+ if ($time !== 0) echo "Your account doesn't allow you to manage this page.. sorry!";
+ } else if ($val === 'stolen') {
+ header('Refresh: '.$time.';url='.$this->_login);
+ if ($time !== 0) echo "Your session have been probably intercepted! Please login another time.";
+ } else if ($val === 'retype') {
+ header('Refresh: '.$time.';url='.$this->_retype);
+ if ($time !== 0) echo "Your session have been probably intercepted. Please type your password another time.";
+ } else if ($val === 'wait') {
+ header('Refresh: '.$time.';url='.$this->_login);
+ if ($time !== 0) echo "You have to wait ".$this->_params['time_after_failure']." seconds before you can try to login another time";
+ }
+ exit;
+ }
+
+ //obtain the group of the user
+ private function obtainGroups()
+ {
+ $tables = $this->_usersTable.','.$this->_groupsTable.','.$this->_manyToManyTable;
+ $fields = $this->_groupsTable.'.name';
+ $where = $this->_usersTable.'.id_user='.$this->_manyToManyTable.'.id_user and '.$this->_groupsTable.'.id_group='.$this->_manyToManyTable.'.id_group and '.$this->_usersTable.'.id_user='.$this->status['id_user'];
+ $groups = $this->_db->select($tables,$fields,$where);
+ $this->status['groups'] = array();
+ foreach ($groups as $group)
+ {
+ $this->status['groups'][] = $group[$this->_groupsTable]['name'];
+ }
+ }
+
+ //$groups: string with name of groups separated by comma; ex: base,root,users
+ public function checkAccess($groups)
+ {
+ $groupsArray = explode (',',$groups);
+ foreach ($this->status['groups'] as $group)
+ {
+ if (in_array($group,$groupsArray)) return true;
+ }
+ return false;
+ }
+
+ //check that the user is logged and, if present, check the group of the user (if loggeg)
+ //$groups: comma-separated list of groups whose users can access the page
+ //$time: time before the redirect is carried out
+ public function check($groups = null, $time = 3)
+ {
+ $this->checkStatus();
+ if (strcmp($this->status['status'],'not-logged') === 0)
+ {
+ $this->redirect('not-logged',$time);
+ }
+ else if (strcmp($this->status['status'],'logged') === 0)
+ {
+ if ($this->_params['hijacking_check'])
+ {
+ if (!$this->checkHijacking())
+ {
+ if ($this->_params['on_hijacking_event'] === 'forceout')
+ {
+ $this->logout();
+ $this->redirect('stolen',$time);
+ }
+ else if ($this->_params['on_hijacking_event'] === 'redirect')
+ {
+ $this->redirect('retype',$time);
+ }
+ }
+ }
+// $this->obtainGroups();
+ if (isset($groups))
+ {
+ $permission = $this->checkAccess($groups);
+ if (!$permission) $this->redirect('not-authorized',$time);
+ }
+ }
+ }
+
+ //check if someone have stolen your uid
+ private function checkHijacking()
+ {
+ if (array_key_exists('user_agent',$this->status))
+ {
+ if (strcmp($this->status['user_agent'],'') !== 0)
+ {
+ if (strcmp($this->status['user_agent'],getUserAgent()) === 0)
+ {
+ return true;
+ }
+ }
+ }
+ return false;
+ }
+
+ //check CSRF
+ //$token: token to check
+ public function checkCSRF($token)
+ {
+ if (strcmp($this->status['token'],'') !== 0)
+ {
+ if (strcmp($this->status['token'],$token) === 0)
+ {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ //get an array containing all the users currently logged
+ public function getUsersLogged()
+ {
+ $usersLogged = array();
+ $data=$this->_db->select($this->_usersTable.','.$this->_sessionsTable,'DISTINCT '.$this->_usersTable.'.username',$this->_usersTable.".id_user=".$this->_sessionsTable.".id_user");
+ foreach ($data as $row)
+ {
+ $usersLogged[] = $row[$this->_usersTable]['username'];
+ }
+ return $usersLogged;
+ }
+
+ //get the password of the current user
+ public function getPassword()
+ {
+ $row=$this->_db->select($this->_usersTable,'password',"id_user=".$this->status['id_user']);
+ if ($row !== false)
+ {
+ return $row[0][$this->_usersTable]['password'];
+ }
+ else
+ {
+ return false;
+ }
+ }
+
+ private function checkPassword($user,$pwd) { #check username and password
+
+ if (!in_array($this->_params['password_hash'],Params::$allowedHashFunc))
+ {
+ throw new Exception('Error in '.__METHOD__.' : the hash func has to be '.implode(' or ',Params::$allowedHashFunc));
+ }
+ //calculate the hash of the password
+ $pwd = call_user_func($this->_params['password_hash'],$pwd);
+
+ $row=$this->_db->select($this->_usersTable,$this->_usersTable.'.id_user,username,password',"username=\"".$user."\" and password=\"".$pwd."\" and has_confirmed=0");
+ if (count($row) === 1 and $row !== false)
+ {
+ $this->status['user'] = $row[0][$this->_usersTable]['username'];
+ $this->status['status'] = 'accepted';
+ $this->status['id_user'] = $row[0][$this->_usersTable]['id_user'];
+ }
+ else
+ {
+ $this->status['user'] = 'unknown';
+ $this->status['status'] = 'login-error';
+ $this->status['id_user'] = '';
+ if ($this->_db->recordExists($this->_usersTable,'username',$user))
+ {
+ $this->_db->update($this->_usersTable,'last_failure',array(time()),'username="'.$user.'"');
+ }
+ }
+ }
+
+ //check that enough time is passed since the last failure of the user
+ private function checkLastFailure($user)
+ {
+ //current time
+ $now = time();
+ //max time
+ $max = $now - $this->_params['time_after_failure'];
+ $data = $this->_db->select($this->_usersTable,'last_failure','username="'.$user.'"');
+ if (count($data) === 1 and $data !== false)
+ {
+ if ($data[0][$this->_usersTable]['last_failure'] < $max)
+ {
+ return true;
+ }
+ return false;
+ }
+ else
+ {
+ return true;
+ }
+ }
+
+ public function login($user,$pwd)
+ {
+ $user = sanitizeAll($user);
+ $this->checkStatus();
+ //check if already logged
+ if ($this->status['status'] === 'logged')
+ {
+// $this->redirect('logged');
+ return 'logged';
+ }
+ else
+ {
+ if ($this->checkLastFailure($user))
+ {
+ $this->checkPassword($user,$pwd);
+ if ($this->status['status']==='accepted')
+ {
+ $this->uid = md5(randString(10).uniqid(mt_rand(),true));
+ $this->_token = md5(randString(12));
+ $userAgent = getUserAgent();
+ $this->_db->insert($this->_sessionsTable,'id_user,uid,token,creation_date,user_agent',array($this->status['id_user'],$this->uid,$this->_token,time(),$userAgent));
+ setcookie($this->_params['cookie_name'],$this->uid,0,$this->_params['cookie_path']); #magic cookie
+ $this->updateAccesses();
+
+ $this->_db->del($this->_sessionsTable,'id_user='.$this->status['id_user'].' AND uid != "'.$this->uid.'"');
+
+// $this->redirect('accepted');
+ return 'accepted';
+ }
+ else if ($this->status['status']==='login-error')
+ {
+// $this->redirect('login-error');
+ return 'login-error';
+ }
+ }
+ else
+ {
+// $this->redirect('wait');
+ return 'wait';
+ }
+ }
+// $this->redirect('login-error');
+ return 'login-error';
+ }
+
+ private function updateAccesses()
+ {
+ $ip=getIp(); #ip
+ $date=date('d'). "-" . date('m') . "-" . date('Y'); #date
+ $ora=date('H') . ":" . date('i'); #time
+ $values=array($ip,$date,$ora,$this->status['user']);
+ $res=$this->_db->insert($this->_accessesTable,'ip,data,ora,username',$values);
+ }
+
+ //force out an user
+ //$id: the id of the user
+ public function forceOut($id)
+ {
+ $id = (int)$id;
+ if ($this->_db->del($this->_sessionsTable,'id_user='.$id))
+ {
+ return true;
+ }
+ return false;
+ }
+
+ public function logout()
+ {
+ $this->checkStatus();
+ if ($this->status['status'] === 'logged')
+ {
+ setcookie ($this->_params['cookie_name'], "", time() - 3600,$this->_params['cookie_path']);
+ if ($this->_db->del($this->_sessionsTable,'id_user='.$this->status['id_user']))
+ {
+ return 'was-logged';
+ }
+ else
+ {
+ return 'error';
+ }
+ }
+ else
+ {
+ return 'not-logged';
+ }
+ }
+
+} \ No newline at end of file
diff --git a/h-source/admin/Library/Users/index.html b/h-source/admin/Library/Users/index.html
new file mode 100644
index 0000000..8d1c8b6
--- /dev/null
+++ b/h-source/admin/Library/Users/index.html
@@ -0,0 +1 @@
+
diff --git a/h-source/admin/Library/index.html b/h-source/admin/Library/index.html
new file mode 100644
index 0000000..8d1c8b6
--- /dev/null
+++ b/h-source/admin/Library/index.html
@@ -0,0 +1 @@
+
diff --git a/h-source/admin/License.txt b/h-source/admin/License.txt
new file mode 100755
index 0000000..404896a
--- /dev/null
+++ b/h-source/admin/License.txt
@@ -0,0 +1,201 @@
+GNU GENERAL PUBLIC LICENSE
+
+Version 3, 29 June 2007
+
+Copyright © 2007 Free Software Foundation, Inc. <http://fsf.org/>
+
+Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed.
+
+Preamble
+
+The GNU General Public License is a free, copyleft license for software and other kinds of works.
+
+The licenses for most software and other practical works are designed to take away your freedom to share and change the works. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change all versions of a program--to make sure it remains free software for all its users. We, the Free Software Foundation, use the GNU General Public License for most of our software; it applies also to any other work released this way by its authors. You can apply it to your programs, too.
+
+When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for them if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs, and that you know you can do these things.
+
+To protect your rights, we need to prevent others from denying you these rights or asking you to surrender the rights. Therefore, you have certain responsibilities if you distribute copies of the software, or if you modify it: responsibilities to respect the freedom of others.
+
+For example, if you distribute copies of such a program, whether gratis or for a fee, you must pass on to the recipients the same freedoms that you received. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights.
+
+Developers that use the GNU GPL protect your rights with two steps: (1) assert copyright on the software, and (2) offer you this License giving you legal permission to copy, distribute and/or modify it.
+
+For the developers' and authors' protection, the GPL clearly explains that there is no warranty for this free software. For both users' and authors' sake, the GPL requires that modified versions be marked as changed, so that their problems will not be attributed erroneously to authors of previous versions.
+
+Some devices are designed to deny users access to install or run modified versions of the software inside them, although the manufacturer can do so. This is fundamentally incompatible with the aim of protecting users' freedom to change the software. The systematic pattern of such abuse occurs in the area of products for individuals to use, which is precisely where it is most unacceptable. Therefore, we have designed this version of the GPL to prohibit the practice for those products. If such problems arise substantially in other domains, we stand ready to extend this provision to those domains in future versions of the GPL, as needed to protect the freedom of users.
+
+Finally, every program is threatened constantly by software patents. States should not allow patents to restrict development and use of software on general-purpose computers, but in those that do, we wish to avoid the special danger that patents applied to a free program could make it effectively proprietary. To prevent this, the GPL assures that patents cannot be used to render the program non-free.
+
+The precise terms and conditions for copying, distribution and modification follow.
+
+TERMS AND CONDITIONS
+
+0. Definitions.
+
+“This License” refers to version 3 of the GNU General Public License.
+“Copyright” also means copyright-like laws that apply to other kinds of works, such as semiconductor masks.
+“The Program” refers to any copyrightable work licensed under this License. Each licensee is addressed as “you”. “Licensees” and “recipients” may be individuals or organizations.
+To “modify” a work means to copy from or adapt all or part of the work in a fashion requiring copyright permission, other than the making of an exact copy. The resulting work is called a “modified version” of the earlier work or a work “based on” the earlier work.
+A “covered work” means either the unmodified Program or a work based on the Program.
+To “propagate” a work means to do anything with it that, without permission, would make you directly or secondarily liable for infringement under applicable copyright law, except executing it on a computer or modifying a private copy. Propagation includes copying, distribution (with or without modification), making available to the public, and in some countries other activities as well.
+To “convey” a work means any kind of propagation that enables other parties to make or receive copies. Mere interaction with a user through a computer network, with no transfer of a copy, is not conveying.
+An interactive user interface displays “Appropriate Legal Notices” to the extent that it includes a convenient and prominently visible feature that (1) displays an appropriate copyright notice, and (2) tells the user that there is no warranty for the work (except to the extent that warranties are provided), that licensees may convey the work under this License, and how to view a copy of this License. If the interface presents a list of user commands or options, such as a menu, a prominent item in the list meets this criterion.
+
+1. Source Code.
+
+The “source code” for a work means the preferred form of the work for making modifications to it. “Object code” means any non-source form of a work.
+A “Standard Interface” means an interface that either is an official standard defined by a recognized standards body, or, in the case of interfaces specified for a particular programming language, one that is widely used among developers working in that language.
+The “System Libraries” of an executable work include anything, other than the work as a whole, that (a) is included in the normal form of packaging a Major Component, but which is not part of that Major Component, and (b) serves only to enable use of the work with that Major Component, or to implement a Standard Interface for which an implementation is available to the public in source code form. A “Major Component”, in this context, means a major essential component (kernel, window system, and so on) of the specific operating system (if any) on which the executable work runs, or a compiler used to produce the work, or an object code interpreter used to run it.
+The “Corresponding Source” for a work in object code form means all the source code needed to generate, install, and (for an executable work) run the object code and to modify the work, including scripts to control those activities. However, it does not include the work's System Libraries, or general-purpose tools or generally available free programs which are used unmodified in performing those activities but which are not part of the work. For example, Corresponding Source includes interface definition files associated with source files for the work, and the source code for shared libraries and dynamically linked subprograms that the work is specifically designed to require, such as by intimate data communication or control flow between those subprograms and other parts of the work.
+The Corresponding Source need not include anything that users can regenerate automatically from other parts of the Corresponding Source.
+The Corresponding Source for a work in source code form is that same work.
+
+2. Basic Permissions.
+
+All rights granted under this License are granted for the term of copyright on the Program, and are irrevocable provided the stated conditions are met. This License explicitly affirms your unlimited permission to run the unmodified Program. The output from running a covered work is covered by this License only if the output, given its content, constitutes a covered work. This License acknowledges your rights of fair use or other equivalent, as provided by copyright law.
+You may make, run and propagate covered works that you do not convey, without conditions so long as your license otherwise remains in force. You may convey covered works to others for the sole purpose of having them make modifications exclusively for you, or provide you with facilities for running those works, provided that you comply with the terms of this License in conveying all material for which you do not control copyright. Those thus making or running the covered works for you must do so exclusively on your behalf, under your direction and control, on terms that prohibit them from making any copies of your copyrighted material outside their relationship with you.
+Conveying under any other circumstances is permitted solely under the conditions stated below. Sublicensing is not allowed; section 10 makes it unnecessary.
+
+3. Protecting Users' Legal Rights From Anti-Circumvention Law.
+
+No covered work shall be deemed part of an effective technological measure under any applicable law fulfilling obligations under article 11 of the WIPO copyright treaty adopted on 20 December 1996, or similar laws prohibiting or restricting circumvention of such measures.
+When you convey a covered work, you waive any legal power to forbid circumvention of technological measures to the extent such circumvention is effected by exercising rights under this License with respect to the covered work, and you disclaim any intention to limit operation or modification of the work as a means of enforcing, against the work's users, your or third parties' legal rights to forbid circumvention of technological measures.
+
+4. Conveying Verbatim Copies.
+
+You may convey verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice; keep intact all notices stating that this License and any non-permissive terms added in accord with section 7 apply to the code; keep intact all notices of the absence of any warranty; and give all recipients a copy of this License along with the Program.
+You may charge any price or no price for each copy that you convey, and you may offer support or warranty protection for a fee.
+
+5. Conveying Modified Source Versions.
+
+You may convey a work based on the Program, or the modifications to produce it from the Program, in the form of source code under the terms of section 4, provided that you also meet all of these conditions:
+a) The work must carry prominent notices stating that you modified it, and giving a relevant date.
+b) The work must carry prominent notices stating that it is released under this License and any conditions added under section 7. This requirement modifies the requirement in section 4 to “keep intact all notices”.
+c) You must license the entire work, as a whole, under this License to anyone who comes into possession of a copy. This License will therefore apply, along with any applicable section 7 additional terms, to the whole of the work, and all its parts, regardless of how they are packaged. This License gives no permission to license the work in any other way, but it does not invalidate such permission if you have separately received it.
+d) If the work has interactive user interfaces, each must display Appropriate Legal Notices; however, if the Program has interactive interfaces that do not display Appropriate Legal Notices, your work need not make them do so.
+A compilation of a covered work with other separate and independent works, which are not by their nature extensions of the covered work, and which are not combined with it such as to form a larger program, in or on a volume of a storage or distribution medium, is called an “aggregate” if the compilation and its resulting copyright are not used to limit the access or legal rights of the compilation's users beyond what the individual works permit. Inclusion of a covered work in an aggregate does not cause this License to apply to the other parts of the aggregate.
+
+6. Conveying Non-Source Forms.
+
+You may convey a covered work in object code form under the terms of sections 4 and 5, provided that you also convey the machine-readable Corresponding Source under the terms of this License, in one of these ways:
+a) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by the Corresponding Source fixed on a durable physical medium customarily used for software interchange.
+b) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by a written offer, valid for at least three years and valid for as long as you offer spare parts or customer support for that product model, to give anyone who possesses the object code either (1) a copy of the Corresponding Source for all the software in the product that is covered by this License, on a durable physical medium customarily used for software interchange, for a price no more than your reasonable cost of physically performing this conveying of source, or (2) access to copy the Corresponding Source from a network server at no charge.
+c) Convey individual copies of the object code with a copy of the written offer to provide the Corresponding Source. This alternative is allowed only occasionally and noncommercially, and only if you received the object code with such an offer, in accord with subsection 6b.
+d) Convey the object code by offering access from a designated place (gratis or for a charge), and offer equivalent access to the Corresponding Source in the same way through the same place at no further charge. You need not require recipients to copy the Corresponding Source along with the object code. If the place to copy the object code is a network server, the Corresponding Source may be on a different server (operated by you or a third party) that supports equivalent copying facilities, provided you maintain clear directions next to the object code saying where to find the Corresponding Source. Regardless of what server hosts the Corresponding Source, you remain obligated to ensure that it is available for as long as needed to satisfy these requirements.
+e) Convey the object code using peer-to-peer transmission, provided you inform other peers where the object code and Corresponding Source of the work are being offered to the general public at no charge under subsection 6d.
+A separable portion of the object code, whose source code is excluded from the Corresponding Source as a System Library, need not be included in conveying the object code work.
+A “User Product” is either (1) a “consumer product”, which means any tangible personal property which is normally used for personal, family, or household purposes, or (2) anything designed or sold for incorporation into a dwelling. In determining whether a product is a consumer product, doubtful cases shall be resolved in favor of coverage. For a particular product received by a particular user, “normally used” refers to a typical or common use of that class of product, regardless of the status of the particular user or of the way in which the particular user actually uses, or expects or is expected to use, the product. A product is a consumer product regardless of whether the product has substantial commercial, industrial or non-consumer uses, unless such uses represent the only significant mode of use of the product.
+“Installation Information” for a User Product means any methods, procedures, authorization keys, or other information required to install and execute modified versions of a covered work in that User Product from a modified version of its Corresponding Source. The information must suffice to ensure that the continued functioning of the modified object code is in no case prevented or interfered with solely because modification has been made.
+If you convey an object code work under this section in, or with, or specifically for use in, a User Product, and the conveying occurs as part of a transaction in which the right of possession and use of the User Product is transferred to the recipient in perpetuity or for a fixed term (regardless of how the transaction is characterized), the Corresponding Source conveyed under this section must be accompanied by the Installation Information. But this requirement does not apply if neither you nor any third party retains the ability to install modified object code on the User Product (for example, the work has been installed in ROM).
+The requirement to provide Installation Information does not include a requirement to continue to provide support service, warranty, or updates for a work that has been modified or installed by the recipient, or for the User Product in which it has been modified or installed. Access to a network may be denied when the modification itself materially and adversely affects the operation of the network or violates the rules and protocols for communication across the network.
+Corresponding Source conveyed, and Installation Information provided, in accord with this section must be in a format that is publicly documented (and with an implementation available to the public in source code form), and must require no special password or key for unpacking, reading or copying.
+
+7. Additional Terms.
+
+“Additional permissions” are terms that supplement the terms of this License by making exceptions from one or more of its conditions. Additional permissions that are applicable to the entire Program shall be treated as though they were included in this License, to the extent that they are valid under applicable law. If additional permissions apply only to part of the Program, that part may be used separately under those permissions, but the entire Program remains governed by this License without regard to the additional permissions.
+When you convey a copy of a covered work, you may at your option remove any additional permissions from that copy, or from any part of it. (Additional permissions may be written to require their own removal in certain cases when you modify the work.) You may place additional permissions on material, added by you to a covered work, for which you have or can give appropriate copyright permission.
+Notwithstanding any other provision of this License, for material you add to a covered work, you may (if authorized by the copyright holders of that material) supplement the terms of this License with terms:
+a) Disclaiming warranty or limiting liability differently from the terms of sections 15 and 16 of this License; or
+b) Requiring preservation of specified reasonable legal notices or author attributions in that material or in the Appropriate Legal Notices displayed by works containing it; or
+c) Prohibiting misrepresentation of the origin of that material, or requiring that modified versions of such material be marked in reasonable ways as different from the original version; or
+d) Limiting the use for publicity purposes of names of licensors or authors of the material; or
+e) Declining to grant rights under trademark law for use of some trade names, trademarks, or service marks; or
+f) Requiring indemnification of licensors and authors of that material by anyone who conveys the material (or modified versions of it) with contractual assumptions of liability to the recipient, for any liability that these contractual assumptions directly impose on those licensors and authors.
+All other non-permissive additional terms are considered “further restrictions” within the meaning of section 10. If the Program as you received it, or any part of it, contains a notice stating that it is governed by this License along with a term that is a further restriction, you may remove that term. If a license document contains a further restriction but permits relicensing or conveying under this License, you may add to a covered work material governed by the terms of that license document, provided that the further restriction does not survive such relicensing or conveying.
+If you add terms to a covered work in accord with this section, you must place, in the relevant source files, a statement of the additional terms that apply to those files, or a notice indicating where to find the applicable terms.
+Additional terms, permissive or non-permissive, may be stated in the form of a separately written license, or stated as exceptions; the above requirements apply either way.
+
+8. Termination.
+
+You may not propagate or modify a covered work except as expressly provided under this License. Any attempt otherwise to propagate or modify it is void, and will automatically terminate your rights under this License (including any patent licenses granted under the third paragraph of section 11).
+However, if you cease all violation of this License, then your license from a particular copyright holder is reinstated (a) provisionally, unless and until the copyright holder explicitly and finally terminates your license, and (b) permanently, if the copyright holder fails to notify you of the violation by some reasonable means prior to 60 days after the cessation.
+Moreover, your license from a particular copyright holder is reinstated permanently if the copyright holder notifies you of the violation by some reasonable means, this is the first time you have received notice of violation of this License (for any work) from that copyright holder, and you cure the violation prior to 30 days after your receipt of the notice.
+Termination of your rights under this section does not terminate the licenses of parties who have received copies or rights from you under this License. If your rights have been terminated and not permanently reinstated, you do not qualify to receive new licenses for the same material under section 10.
+
+9. Acceptance Not Required for Having Copies.
+
+You are not required to accept this License in order to receive or run a copy of the Program. Ancillary propagation of a covered work occurring solely as a consequence of using peer-to-peer transmission to receive a copy likewise does not require acceptance. However, nothing other than this License grants you permission to propagate or modify any covered work. These actions infringe copyright if you do not accept this License. Therefore, by modifying or propagating a covered work, you indicate your acceptance of this License to do so.
+
+10. Automatic Licensing of Downstream Recipients.
+
+Each time you convey a covered work, the recipient automatically receives a license from the original licensors, to run, modify and propagate that work, subject to this License. You are not responsible for enforcing compliance by third parties with this License.
+An “entity transaction” is a transaction transferring control of an organization, or substantially all assets of one, or subdividing an organization, or merging organizations. If propagation of a covered work results from an entity transaction, each party to that transaction who receives a copy of the work also receives whatever licenses to the work the party's predecessor in interest had or could give under the previous paragraph, plus a right to possession of the Corresponding Source of the work from the predecessor in interest, if the predecessor has it or can get it with reasonable efforts.
+You may not impose any further restrictions on the exercise of the rights granted or affirmed under this License. For example, you may not impose a license fee, royalty, or other charge for exercise of rights granted under this License, and you may not initiate litigation (including a cross-claim or counterclaim in a lawsuit) alleging that any patent claim is infringed by making, using, selling, offering for sale, or importing the Program or any portion of it.
+
+11. Patents.
+
+A “contributor” is a copyright holder who authorizes use under this License of the Program or a work on which the Program is based. The work thus licensed is called the contributor's “contributor version”.
+A contributor's “essential patent claims” are all patent claims owned or controlled by the contributor, whether already acquired or hereafter acquired, that would be infringed by some manner, permitted by this License, of making, using, or selling its contributor version, but do not include claims that would be infringed only as a consequence of further modification of the contributor version. For purposes of this definition, “control” includes the right to grant patent sublicenses in a manner consistent with the requirements of this License.
+Each contributor grants you a non-exclusive, worldwide, royalty-free patent license under the contributor's essential patent claims, to make, use, sell, offer for sale, import and otherwise run, modify and propagate the contents of its contributor version.
+In the following three paragraphs, a “patent license” is any express agreement or commitment, however denominated, not to enforce a patent (such as an express permission to practice a patent or covenant not to sue for patent infringement). To “grant” such a patent license to a party means to make such an agreement or commitment not to enforce a patent against the party.
+If you convey a covered work, knowingly relying on a patent license, and the Corresponding Source of the work is not available for anyone to copy, free of charge and under the terms of this License, through a publicly available network server or other readily accessible means, then you must either (1) cause the Corresponding Source to be so available, or (2) arrange to deprive yourself of the benefit of the patent license for this particular work, or (3) arrange, in a manner consistent with the requirements of this License, to extend the patent license to downstream recipients. “Knowingly relying” means you have actual knowledge that, but for the patent license, your conveying the covered work in a country, or your recipient's use of the covered work in a country, would infringe one or more identifiable patents in that country that you have reason to believe are valid.
+If, pursuant to or in connection with a single transaction or arrangement, you convey, or propagate by procuring conveyance of, a covered work, and grant a patent license to some of the parties receiving the covered work authorizing them to use, propagate, modify or convey a specific copy of the covered work, then the patent license you grant is automatically extended to all recipients of the covered work and works based on it.
+A patent license is “discriminatory” if it does not include within the scope of its coverage, prohibits the exercise of, or is conditioned on the non-exercise of one or more of the rights that are specifically granted under this License. You may not convey a covered work if you are a party to an arrangement with a third party that is in the business of distributing software, under which you make payment to the third party based on the extent of your activity of conveying the work, and under which the third party grants, to any of the parties who would receive the covered work from you, a discriminatory patent license (a) in connection with copies of the covered work conveyed by you (or copies made from those copies), or (b) primarily for and in connection with specific products or compilations that contain the covered work, unless you entered into that arrangement, or that patent license was granted, prior to 28 March 2007.
+Nothing in this License shall be construed as excluding or limiting any implied license or other defenses to infringement that may otherwise be available to you under applicable patent law.
+
+12. No Surrender of Others' Freedom.
+
+If conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot convey a covered work so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not convey it at all. For example, if you agree to terms that obligate you to collect a royalty for further conveying from those to whom you convey the Program, the only way you could satisfy both those terms and this License would be to refrain entirely from conveying the Program.
+
+13. Use with the GNU Affero General Public License.
+
+Notwithstanding any other provision of this License, you have permission to link or combine any covered work with a work licensed under version 3 of the GNU Affero General Public License into a single combined work, and to convey the resulting work. The terms of this License will continue to apply to the part which is the covered work, but the special requirements of the GNU Affero General Public License, section 13, concerning interaction through a network will apply to the combination as such.
+
+14. Revised Versions of this License.
+
+The Free Software Foundation may publish revised and/or new versions of the GNU General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns.
+Each version is given a distinguishing version number. If the Program specifies that a certain numbered version of the GNU General Public License “or any later version” applies to it, you have the option of following the terms and conditions either of that numbered version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of the GNU General Public License, you may choose any version ever published by the Free Software Foundation.
+If the Program specifies that a proxy can decide which future versions of the GNU General Public License can be used, that proxy's public statement of acceptance of a version permanently authorizes you to choose that version for the Program.
+Later license versions may give you additional or different permissions. However, no additional obligations are imposed on any author or copyright holder as a result of your choosing to follow a later version.
+
+15. Disclaimer of Warranty.
+
+THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM “AS IS” WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+16. Limitation of Liability.
+
+IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+
+17. Interpretation of Sections 15 and 16.
+
+If the disclaimer of warranty and limitation of liability provided above cannot be given local legal effect according to their terms, reviewing courts shall apply local law that most closely approximates an absolute waiver of all civil liability in connection with the Program, unless a warranty or assumption of liability accompanies a copy of the Program in return for a fee.
+
+END OF TERMS AND CONDITIONS
+
+How to Apply These Terms to Your New Programs
+
+If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms.
+
+To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively state the exclusion of warranty; and each file should have at least the “copyright” line and a pointer to where the full notice is found.
+
+ <one line to give the program's name and a brief idea of what it does.>
+ Copyright (C) <year> <name of author>
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+Also add information on how to contact you by electronic and paper mail.
+If the program does terminal interaction, make it output a short notice like this when it starts in an interactive mode:
+
+ <program> Copyright (C) <year> <name of author>
+ This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+ This is free software, and you are welcome to redistribute it
+ under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, your program's commands might be different; for a GUI interface, you would use an “about box”.
+
+You should also get your employer (if you work as a programmer) or school, if any, to sign a “copyright disclaimer” for the program, if necessary. For more information on this, and how to apply and follow the GNU GPL, see <http://www.gnu.org/licenses/>.
+
+The GNU General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. But first, please read <http://www.gnu.org/philosophy/why-not-lgpl.html>.
+
+
diff --git a/h-source/admin/Logs/index.html b/h-source/admin/Logs/index.html
new file mode 100644
index 0000000..8d1c8b6
--- /dev/null
+++ b/h-source/admin/Logs/index.html
@@ -0,0 +1 @@
+
diff --git a/h-source/admin/Public/Css/comune.css b/h-source/admin/Public/Css/comune.css
new file mode 100644
index 0000000..b6ecdd3
--- /dev/null
+++ b/h-source/admin/Public/Css/comune.css
@@ -0,0 +1,130 @@
+/*parte di login.css*/
+
+/*controller:users*/
+/*action:login*/
+.login_box {
+ margin:10px 10px 20px 10px;
+}
+.login_box input {
+ border:1px solid orange;
+}
+
+/*action:logout*/
+.logout_box {
+ margin:10px 10px 20px 10px;
+}
+
+.logout_button a{
+ margin:20px;
+ padding:10px;
+ background:orange;
+ border:1px solid black;
+/* width:30px; */
+}
+
+
+/*parte di scaffold.css*/
+
+td {
+ font-size: 12px;
+}
+
+td.editForm, td.delForm, td.associateForm, td.moveupForm, td.movedownForm {
+ width:3%;
+}
+
+td.editForm input, td.delForm input, td.associateForm input, td.moveupForm input, td.movedownForm input
+{
+ height:30px;
+}
+
+/*alert string*/
+.alert {
+ font:bold 12px/1.5 Verdana,arial;
+ padding:5px;
+ margin:5px 5px 15px 5px;
+ background:TOMATO;
+ border-top:2px solid MAROON;
+ border-bottom:2px solid MAROON;
+ color:MAROON;
+}
+
+/*executed operation string*/
+.executed {
+ font:bold 12px/1.5 Verdana,arial;
+ padding:5px;
+ margin:5px 5px 15px 5px;
+ background:#E0FFFF;
+ border-top:2px solid #ADD8E6;
+ border-bottom:2px solid #ADD8E6;
+ color:#4169E1;
+}
+
+/*action:main*/
+tr.listRow {
+ background:#E6E6FA;
+}
+
+tr.listHead {
+ font-weight: bold;
+ background:#d1deed;
+ border:1px solid #4169E1;
+ border-bottom:1px solid #4169E1;
+}
+
+tr.listHead td {
+/* font-weight: bold; */
+/* background:#d1deed; */
+ border-top:1px solid #4169E1;
+ border-bottom:1px solid #4169E1;
+}
+
+.recordsBox {
+ margin:10px 0px;
+}
+
+.recordsBox table {
+ width:100%;
+}
+
+.listItemForm {
+ margin:0px;
+}
+
+a.linkItem {
+/* background:red; */
+ font:bold 12px/1 Verdana,arial;
+}
+
+/*controller:panel
+/*action:main*/
+.main_box {
+ padding:50px 20px;
+ width:700px;
+ height:250px;
+}
+.top_color {
+ text-align:center;
+ width:160px;
+ height:35px;
+ margin:0;
+ padding:0;
+}
+.bottom_color {
+ background:lavender;
+ text-align:center;
+ width:160px;
+ margin:0;
+ padding:5px 0;
+}
+
+
+
+/*box che dice dove ti trovi, in che controller*/
+.controller_info_header
+{
+ background:#E6E6FA;
+ padding:5px;
+ font: bold 16px/1.75em sans-serif;
+ border-bottom:1px solid #4169E1;
+} \ No newline at end of file
diff --git a/h-source/admin/Public/Css/explorer.css b/h-source/admin/Public/Css/explorer.css
new file mode 100644
index 0000000..1adb80b
--- /dev/null
+++ b/h-source/admin/Public/Css/explorer.css
@@ -0,0 +1,91 @@
+ul#menuBlock li {
+ height:24px;
+}
+
+ul#menuBlock li ul {
+ top:25px;
+}
+
+ul#menuBlock li ul li {
+ margin-top:-3px;
+}
+
+.view_page_top_box
+{
+ height:32px;
+}
+
+.update_submit_class
+{
+ padding:7px;
+}
+
+.view_page_update_button
+{
+ width:40px;
+}
+
+/*div that contains the update form*/
+.view_page_update_button
+{
+ margin-top:2px;
+ margin-right:5px;
+}
+.update_submit_class
+{
+ padding:2px;
+ width:30px;
+}
+.notebooks_insert_form
+{
+ margin-right:-30px;
+}
+
+.notebook_insert_link
+{
+ margin:0px 5px 0px 5px;
+}
+.top_left_images_help
+{
+ height:22px;
+ margin-bottom:-3px;
+}
+ul#menuBlock li {
+ height:26px;
+}
+ul#menuBlock li ul {
+ left:-6px;
+}
+.user_logged
+{
+ margin-left:62px;
+}
+.viewall_popup_menu_status_item
+{
+ padding-left:10px;
+}
+.copyright_notice_box
+{
+ width:140px;
+}
+.language_links_box ul
+{
+ width:100%;
+ margin:-1px 5px 30px 5px;
+}
+.language_links_box ul li
+{
+ margin-bottom:5px;
+}
+.language_links_box ul li a
+{
+ height:30px;
+}
+.talk_numb_ext
+{
+ margin-top:-30px;
+}
+.talk_numb_ext a
+{
+ margin-bottom:0px;
+} \ No newline at end of file
diff --git a/h-source/admin/Public/Css/files.css b/h-source/admin/Public/Css/files.css
new file mode 100644
index 0000000..e98e681
--- /dev/null
+++ b/h-source/admin/Public/Css/files.css
@@ -0,0 +1,113 @@
+form
+{
+ padding:0px;
+ margin:0px;
+}
+
+/*external box*/
+.EGexternalBox
+{
+ height:500px;
+ overflow:scroll;
+}
+
+/*top box containing the forms: upload,create folder,got to folder*/
+.EGformBox
+{
+ padding-left:10px;
+ padding-right:10px;
+ height:35px;
+ margin:5px;
+ border-top:1px solid #DC143C;
+ border-bottom:1px solid #DC143C;
+ background:#FF7F50;
+}
+
+/*item box: folder*/
+.EGfolderBox
+{
+ padding-left:10px;
+ padding-right:10px;
+ height:55px;
+ margin:5px;
+/* border-top:1px solid black; */
+ background:#E6E6FA;
+}
+
+/*item box: file*/
+.EGfileBox
+{
+ padding-left:10px;
+ padding-right:10px;
+ height:55px;
+ margin:5px;
+/* border-top:1px solid black; */
+ background:#E0FFFF;
+}
+
+/*back box*/
+.EGbackBox
+{
+ padding-left:10px;
+ padding-right:10px;
+ height:50px;
+ margin:5px;
+ border-top:1px solid #6495ED;
+ border-bottom:1px solid #6495ED;
+ background:#ADD8E6;
+}
+
+/*folder image and back image*/
+.EGfolderImage, .EGbackImage, .EGfileImage
+{
+ margin:3px;
+/* padding:2px; */
+ width:55px;
+/* background:red; */
+ float:left;
+}
+
+/*box containing the form to create a new folder*/
+.EGcreateFolderBox
+{
+ margin:5px;
+ width:300px;
+ float:left;
+}
+
+/*box containing the form to upload a file*/
+.EGuploadFileBox
+{
+ margin:5px;
+ margin-left:50px;
+ width:400px;
+ float:left;
+}
+
+.EGcreateFolderBox input:text
+{
+ width:150px;
+}
+
+/*name of the folder*/
+.EGfolderName, .EGfileName, .EGcurrentDirectory
+{
+ width:500px;
+ float:left;
+ font:normal 12px/1 Verdana,arial;
+ margin:10px;
+}
+
+/*del image*/
+.EGfolderDelImage, .EGfileDelImage
+{
+ float:right;
+ margin:2px;
+}
+
+/*preview of the image in upload file*/
+#imagePreview
+{
+ margin:10px;
+ height:120px;
+}
diff --git a/h-source/admin/Public/Css/form.css b/h-source/admin/Public/Css/form.css
new file mode 100755
index 0000000..911af19
--- /dev/null
+++ b/h-source/admin/Public/Css/form.css
@@ -0,0 +1,31 @@
+.entryLabel {
+ display:block;
+ font:bold 12px/1em Verdana,arial;
+ padding:3px 0px;
+ margin-top:10px;
+ background:#E6E6FA;
+ width:500px;
+}
+
+.formEntry textarea{
+ width:500px;
+ height:300px;
+}
+
+.formEntry input,.formEntry textarea {
+ width:500px;
+ padding:3px;
+ border: 1px solid #4169E1;
+}
+
+.formClass {
+ margin:10px;
+}
+
+.inputEntry {
+ margin:10px 0px;
+}
+
+.formEntry #abstract {
+ height:100px;
+} \ No newline at end of file
diff --git a/h-source/admin/Public/Css/index.html b/h-source/admin/Public/Css/index.html
new file mode 100644
index 0000000..8d1c8b6
--- /dev/null
+++ b/h-source/admin/Public/Css/index.html
@@ -0,0 +1 @@
+
diff --git a/h-source/admin/Public/Css/login.css b/h-source/admin/Public/Css/login.css
new file mode 100644
index 0000000..7c42964
--- /dev/null
+++ b/h-source/admin/Public/Css/login.css
@@ -0,0 +1,21 @@
+/*controller:users*/
+/*action:login*/
+.login_box {
+ margin:10px 10px 20px 10px;
+}
+.login_box input {
+ border:1px solid orange;
+}
+
+/*action:logout*/
+.logout_box {
+ margin:10px 10px 20px 10px;
+}
+
+.logout_button a{
+ margin:20px;
+ padding:10px;
+ background:orange;
+ border:1px solid black;
+/* width:30px; */
+} \ No newline at end of file
diff --git a/h-source/admin/Public/Css/mainmenu.css b/h-source/admin/Public/Css/mainmenu.css
new file mode 100755
index 0000000..615c8bf
--- /dev/null
+++ b/h-source/admin/Public/Css/mainmenu.css
@@ -0,0 +1,78 @@
+/*stile header di ogni view*/
+.mainMenu {
+ height:50px;
+/* border-top:1px solid #ADD8E6; */
+ border-bottom:1px solid #4169E1;
+ padding-top:6px;
+ margin-bottom:10px;
+ background:#d1deed;
+}
+.mainMenuItem {
+ float:left;
+ width:60px;
+ height:40px;
+ margin-left:5px;
+ border:1px outset #708090;
+ background:#4169E1;
+ text-align:center;
+}
+
+.mainMenuItem a {
+/* margin:8px 5px 1px 10px; */
+ display:block;
+ margin-top:12px;
+ color:#B0E0E6;
+ font:bold 14px/1 Verdana,arial;
+}
+
+.verticalMenu {
+ margin-bottom:30px;
+ margin-left:10px;
+/* text-align:right;*/
+}
+
+ul#menuBlock {
+/* float:right; */
+ float:left;
+ margin:0px;
+ padding:0px;
+ list-style:none;
+ height:24px;
+}
+
+ul#menuBlock li {
+ position:relative;
+ display:block;
+ float:left;
+ width:100px;
+ border:1px outset #D3D3D3;
+ height:21px;
+# height:24px;
+ text-align:center;
+ background:#E6E6FA;
+ padding-top:3px;
+}
+
+ul#menuBlock li a {
+ color:#696969;
+ font: bold 12px/1 Verdana,arial;
+}
+
+ul#menuBlock li ul {
+ margin:0px;
+ padding:0px;
+ list-style:none;
+ position:absolute;
+ top:24px;
+# top:25px;
+ left:-1px;
+ display:none;
+}
+
+ul#menuBlock li ul li {
+# margin-top:-3px;
+}
+
+/*ul#menuBlock li:hover ul{
+ display:block;
+}*/ \ No newline at end of file
diff --git a/h-source/admin/Public/Css/pagelist.css b/h-source/admin/Public/Css/pagelist.css
new file mode 100644
index 0000000..93c8454
--- /dev/null
+++ b/h-source/admin/Public/Css/pagelist.css
@@ -0,0 +1,29 @@
+/*page division*/
+.pageList {
+ text-align:left;
+ font:normal 14px/1 Verdana,arial;
+ padding:10px;
+}
+
+div.pageList a {
+ padding:5px 10px;
+ border:1px outset #708090;
+ color:#B0E0E6;
+ background:#4169E1;
+ margin-right:5px;
+}
+
+/*view footer*/
+.viewFooter {
+ height:50px;
+ border-top:1px solid #4169E1;
+ padding-top:6px;
+ margin-bottom:10px;
+ background:#d1deed;
+}
+
+div.pageList a.currentPage
+{
+ font-weight:bold;
+ background:#0000CD;
+} \ No newline at end of file
diff --git a/h-source/admin/Public/Css/panel.css b/h-source/admin/Public/Css/panel.css
new file mode 100644
index 0000000..8b9f9a9
--- /dev/null
+++ b/h-source/admin/Public/Css/panel.css
@@ -0,0 +1,74 @@
+ul {
+ list-style-type: none;
+}
+
+div.mainPanel {
+
+}
+
+/*logout button*/
+.logoutButton
+{
+ float:left;
+ width:70px;
+ height:40px;
+ margin-left:5px;
+ border:1px outset #708090;
+ background:#4169E1;
+ text-align:center;
+}
+.logoutButton a
+{
+ display:block;
+ margin-top:13px;
+ color:#B0E0E6;
+ font:bold 12px/1 Verdana,arial;
+}
+
+/*list of application in the panel main action*/
+.panelApplicationList
+{
+ padding:0px;
+}
+.panelApplicationList li
+{
+ display:block;
+ width:200px;
+ height:30px;
+ border:1px outset #708090;
+ margin:5px;
+ background:#4169E1;
+ padding-top:9px;
+}
+
+.panelApplicationList li a
+{
+ margin:5px;
+ font: bold 14px/1 Verdana,arial;
+ color:#B0E0E6;
+}
+
+/*list of groups an user is inserted within*/
+.groupsList
+{
+ margin:20px 5px 5px 5px;
+ font:normal 14px/1 Verdana,arial;
+}
+.groupsList li
+{
+ margin:5px 0px;
+ padding:0px;
+ font:bold 14px/1 Verdana,arial;
+}
+.groupsList ul
+{
+ padding:10px;
+}
+
+/*list of logged users in panel*/
+.usersLoggedList
+{
+ margin:5px;
+ text-align:right;
+ font:normal 14px/1 Verdana,arial;
+} \ No newline at end of file
diff --git a/h-source/admin/Public/Css/popupmenu.css b/h-source/admin/Public/Css/popupmenu.css
new file mode 100755
index 0000000..66a202e
--- /dev/null
+++ b/h-source/admin/Public/Css/popupmenu.css
@@ -0,0 +1,49 @@
+.verticalMenu {
+ margin-bottom:50px;
+ margin-left:10px;
+/* text-align:right;*/
+}
+
+ul#menuBlock {
+/* float:right; */
+ float:left;
+ margin:0px;
+ padding:0px;
+ list-style:none;
+ height:24px;
+}
+
+ul#menuBlock li {
+ position:relative;
+ display:block;
+ float:left;
+ width:150px;
+ border:1px outset #D3D3D3;
+ height:21px;
+ text-align:center;
+ background:#E6E6FA;
+ padding-top:5px;
+ padding-bottom:-2px;
+}
+
+ul#menuBlock li a {
+ color:#696969;
+ font: bold 12px/1 Verdana,arial;
+}
+
+ul#menuBlock li ul {
+ margin:0px;
+ padding:0px;
+ list-style:none;
+ position:absolute;
+ top:24px;
+ left:-1px;
+ display:none;
+}
+
+ul#menuBlock li ul li {
+}
+
+/*ul#menuBlock li:hover ul{
+ display:block;
+}*/ \ No newline at end of file
diff --git a/h-source/admin/Public/Css/scaffold.css b/h-source/admin/Public/Css/scaffold.css
new file mode 100755
index 0000000..8cc7529
--- /dev/null
+++ b/h-source/admin/Public/Css/scaffold.css
@@ -0,0 +1,105 @@
+html, body{margin: 0;padding:0}
+
+body{
+ font-family: Verdana,arial,sans-serif;
+ font-size: 11px;
+ text-align: center;
+/* background: #93045a; */
+}
+
+td {
+ font-size: 12px;
+}
+
+img {
+ border:none;
+}
+
+td.editForm, td.delForm, td.associateForm, td.moveupForm, td.movedownForm {
+ width:3%;
+}
+
+td.editForm input, td.delForm input, td.associateForm input, td.moveupForm input, td.movedownForm input
+{
+ height:30px;
+}
+
+/*alert string*/
+.alert {
+ font:bold 12px/1.5 Verdana,arial;
+ padding:5px;
+ margin:5px 5px 15px 5px;
+ background:TOMATO;
+ border-top:2px solid MAROON;
+ border-bottom:2px solid MAROON;
+ color:MAROON;
+}
+
+/*executed operation string*/
+.executed {
+ font:bold 12px/1.5 Verdana,arial;
+ padding:5px;
+ margin:5px 5px 15px 5px;
+ background:#E0FFFF;
+ border-top:2px solid #ADD8E6;
+ border-bottom:2px solid #ADD8E6;
+ color:#4169E1;
+}
+
+/*action:main*/
+tr.listRow {
+ background:#E6E6FA;
+}
+
+tr.listHead {
+ font-weight: bold;
+ background:#d1deed;
+ border:1px solid #4169E1;
+ border-bottom:1px solid #4169E1;
+}
+
+tr.listHead td {
+/* font-weight: bold; */
+/* background:#d1deed; */
+ border-top:1px solid #4169E1;
+ border-bottom:1px solid #4169E1;
+}
+
+.recordsBox {
+ margin:10px 0px;
+}
+
+.recordsBox table {
+ width:100%;
+}
+
+.listItemForm {
+ margin:0px;
+}
+
+a.linkItem {
+/* background:red; */
+ font:bold 12px/1 Verdana,arial;
+}
+
+/*controller:panel
+/*action:main*/
+.main_box {
+ padding:50px 20px;
+ width:700px;
+ height:250px;
+}
+.top_color {
+ text-align:center;
+ width:160px;
+ height:35px;
+ margin:0;
+ padding:0;
+}
+.bottom_color {
+ background:lavender;
+ text-align:center;
+ width:160px;
+ margin:0;
+ padding:5px 0;
+} \ No newline at end of file
diff --git a/h-source/admin/Public/Css/website.css b/h-source/admin/Public/Css/website.css
new file mode 100755
index 0000000..7a5bda5
--- /dev/null
+++ b/h-source/admin/Public/Css/website.css
@@ -0,0 +1,1414 @@
+/*stili per il layout fisso*/
+html, body
+{
+ margin: 0;
+ padding:0;
+}
+
+body
+{
+ font:normal 15px/1.3 sans-serif,Verdana,arial;
+ text-align: center;
+ background:#ffffff;
+}
+
+img
+{
+ border:0px;
+}
+
+
+div#container
+{
+ width: 950px;
+ margin: 0px auto;
+ text-align: left;
+ background:white;
+}
+
+
+/*stile header grande*/
+div#external_header {
+ background:#b7f18c;
+ text-align:center;
+ height:80px;
+}
+div#header {
+ background:#b7f18c;
+ width: 950px;
+ margin: 0px auto;
+ text-align:left;
+ height:80px;
+}
+
+div#top_menu_external
+{
+ text-align:center;
+ background:#015512;
+ margin-bottom:50px;
+/* border-top:1px solid #4169E1; */
+/* border-bottom:1px solid #4169E1; */
+}
+
+div#top_menu
+{
+ font:bold 15px sans-serif,Verdana,arial;
+ text-align:left;
+ padding:0.4em 0px;
+ background:#015512;
+ width: 950px;
+ margin: 0px auto;
+}
+#top_menu .currentitem a
+{
+ background:#DC143C;
+ color:#FFF;
+}
+
+div#top_menu a
+{
+ font:bold 16px sans-serif,Verdana,arial;
+ padding:0.4em 10px;
+ text-decoration:none;
+ font-weight:bold;
+ color:#FFF;
+/* border-left:1px solid #4169E1; */
+}
+#top_menu a:hover,
+#top_menu a:focus,
+#top_menu a:active
+{
+ background:#61c418;
+}
+
+div#top_menu ul
+{
+ list-style-type: none;
+ display:inline;
+ margin:0px;
+ padding:0px;
+}
+
+div#top_menu li
+{
+ display:inline;
+/* padding:10px; */
+}
+
+
+div#left
+{
+ width:730px;
+ float:left;
+}
+
+div#right
+{
+ width:198px;
+ float:right;
+}
+
+.login_username_input,.login_password_input
+{
+ width:150px;
+}
+
+.login_table_box
+{
+ clear:left;
+ margin:5px;
+ margin-bottom:35px;
+}
+.statistics_ext_box
+{
+ margin:5px;
+ margin-bottom:30px;
+}
+.statistics_int_title
+{
+ margin:5px 0px 15px 0px;
+ padding:3px 0px;
+/* background-color:#B7F18C; */
+ border-bottom:2px solid #DC143C;
+ font-weight:bold;
+}
+.statistics_hard_title
+{
+ margin:5px 0px;
+ color:#808080;
+}
+.user_logged
+{
+ margin-left:55px;
+ color:black;
+ font-weight:bold;
+}
+.login_right_label
+{
+ font-weight:bold;
+}
+.login_right_form input
+{
+ border:1px solid #6495ED;
+ width:180px;
+ padding:2px;
+ margin:3px 0px;
+}
+
+.login_input
+{
+ width:100px;
+}
+
+.login_form_title
+{
+ color:black;
+
+/* padding:10px; */
+/* background:#5c98dc; */
+}
+
+.login_box
+{
+ margin-bottom:400px;
+}
+
+.hardware_element
+{
+ margin:5px;
+ padding:10px;
+ background:#c7daef;
+/* border-bottom:1px solid #6495ED; */
+}
+.hardware_element_link
+{
+ margin:0px 10px;
+}
+.notebook_view_title
+{
+ width:400px;
+ height:50px;
+ float:left;
+ overflow:hidden;
+/* background:red; */
+ margin:10px 0px 10px 10px;
+ font:normal 14px/1 sans-serif,Verdana,arial;
+}
+
+.notebook_insert_link
+{
+/* border:1px solid black; */
+/* background-color:#c1e3ef; */
+ width:200px;
+/* background:orange; */
+ float:right;
+ padding:3px 3px 1px 3px;
+ margin:0px 5px 30px 5px;
+ text-align:right;
+ overflow:hidden;
+ height:38px;
+}
+
+.select_entry
+{
+/* width:400px; */
+ padding:2px;
+/* border:1px solid #6495ED; */
+}
+.input_entry, .talk_input_entry
+{
+ width:400px;
+ padding:2px;
+ border:1px solid #6495ED;
+}
+.textarea_entry, .talk_textarea_entry
+{
+ width:630px;
+ height:300px;
+ padding:2px;
+ border:1px solid #6495ED;
+}
+/*.talk_input_entry
+{
+ border:1px solid #CECECE;
+}*/
+.form_entry .talk_textarea_entry
+{
+ width:400px;
+ height:200px;
+ border:1px solid #6495ED;
+}
+.notebooks_insert_form
+{
+ width:660px;
+ margin-left:10px;
+}
+.notebooks_insert_form .entry_label
+{
+ display:block;
+ padding:3px 0px;
+/* background:#E6E6FA; */
+ width:600px;
+ font-weight:bold;
+}
+.form_entry
+{
+ margin:20px 0px;
+}
+
+
+div#footer{
+ margin:0px;
+ color: #000;
+ height:40px;
+ background:#b7f18c;
+ clear:both;
+}
+
+/*div#navigation li{background: url(immagini/tabella1.png) no-repeat left center;}*/
+a.link_menu
+{
+ font: bold 16px/1.75em Verdana,"Times New Roman",sans-serif;
+ text-decoration: none;
+ color:#4169E1;
+ margin-left:10px;
+}
+
+
+/*box contenente i link per tornare nel pannello utente e per sloggarsi*/
+.your_status_box
+{
+ background:#E6E6FA;
+ padding:5px;
+}
+
+.login_note
+{
+ color:#8080a6;
+ margin:10px;
+ padding:5px 0px;
+ border-top:2px solid #8080a6;
+ border-bottom:2px solid #8080a6;
+
+ font: normal 16px/1.3 sans-serif,Verdana,arial;
+}
+
+/*singolo box contentente un portatile in view all*/
+.notebooks_viewall
+{
+ clear:both;
+ clear:right;
+ margin:40px 0px;
+ padding:3px;
+/* border:2px solid #7dafe7; */
+ font: normal 14px/1.5 sans-serif,Verdana,arial;
+
+}
+.model_viewall
+{
+ margin:40px 10px;
+/* background-color:#F7F7F7; */
+/* border:1px solid #CECECE; */
+/* padding:10px; */
+}
+.notebook_model
+{
+/* background:orange; */
+ padding:5px 0px;
+ margin:0px 5px;
+ overflow:hidden;
+ width:100%;
+/* margin-bottom:10px; */
+ font:normal 14px/1 sans-serif,arial,Verdana;
+ border-bottom:1px solid #7e0000;
+}
+.notebook_vendor, .notebook_compatibility, .notebook_kernel, .model_tested_on
+{
+ margin:5px 0px;
+/* background:#eaebec; */
+ padding:5px;
+ width:654px;
+ overflow:hidden;
+/* border-top:2px solid #a4c8f1; */
+}
+.inner_label
+{
+ float:left;
+ width:300px;
+}
+.inner_value
+{
+ float:left;
+ width:300px;
+ color:#1f538e;
+ font-weight:bold;
+}
+.notebook_description_label
+{
+/* background:#B7F18C; */
+ padding:5px 0px;
+ margin:0px 5px;
+ margin-top:1.5em;
+/* margin-bottom:10px; */
+ font:bold 14px/1 sans-serif,arial,Verdana;
+ border-bottom:1px solid #7e0000;
+/* border-bottom:1px solid #228B22; */
+}
+.notebook_description_value
+{
+/* border-top:2px solid #a4c8f1; */
+ margin:5px 0px;
+/* background:#eaebec; */
+ padding:5px 5px;
+ width:704px;
+ overflow:hidden;
+}
+.notebook_view_link
+{
+ margin-top:10px;
+}
+
+
+/*alert string*/
+.alert {
+ clear:left;
+ clear:right;
+ font:bold 12px/1.5 Verdana,arial;
+ padding:2px;
+ margin:5px 5px 15px 5px;
+/* background:TOMATO; */
+/* border-top:2px solid MAROON; */
+/* border-bottom:2px solid MAROON; */
+ color:MAROON;
+}
+
+/*executed operation string*/
+.executed {
+ font:bold 12px/1.5 Verdana,arial;
+ padding:5px;
+ margin:5px 5px 15px 5px;
+ background:#E0FFFF;
+ border-top:2px solid #ADD8E6;
+ border-bottom:2px solid #ADD8E6;
+ color:#4169E1;
+}
+
+.view_page_top_box
+{
+ overflow:hidden;
+ width:664px;
+}
+/*div that contains the update form*/
+.view_page_update_button
+{
+ float:right;
+}
+/*.view_page_update_button input
+{
+ height:35px;
+}*/
+.view_page_update_button form
+{
+ width:33px;
+ padding:0px;
+}
+.view_page_back_button
+{
+ float:left;
+ width:50px;
+}
+/*the update submit button*/
+.update_submit_class
+{
+ padding:2px;
+ width:33px;
+ font:normal 14px/1 sans-serif,Verdana,arial;
+ cursor:pointer;
+}
+/*div that contains the link to the history page*/
+.view_page_history_button
+{
+ float:right;
+ width:30px;
+ padding:3px;
+ margin-left:10px;
+/* border:1px solid #a4c8f1; */
+/* height:30px; */
+}
+.view_page_history_button a
+{
+ text-decoration:none;
+ color:#000;
+}
+
+.page_history
+{
+ margin:0px;
+ padding:0px;
+}
+.page_history_item
+{
+ list-style-type: none;
+ padding:5px;
+ margin:2px;
+ border-top:1px dashed #a4c8f1;
+}
+.page_history_current_item
+{
+ list-style-type: none;
+ padding:5px;
+ margin:5px 0px;
+/* background:#ADD8E6; */
+}
+.history_title
+{
+ font:normal 14px/1 sans-serif,Verdana;
+ margin:10px;
+ padding:3px;
+}
+
+.revision_alert
+{
+ background:#f1d8d8;
+ padding:8px;
+ margin:5px;
+ margin-bottom:20px;
+ border-bottom:1px solid #d26262;
+ border-top:1px solid #d26262;
+}
+
+/*page list in history*/
+.history_page_list, .history_page_list_news {
+ text-align:left;
+ font:normal 14px/1 Verdana,arial;
+ padding:10px;
+ margin-bottom:15px;
+}
+.history_page_list_news
+{
+ background:#C7DAEF;
+ margin:5px;
+}
+div.history_page_list a, div.history_page_list_news a {
+ padding:5px 10px;
+ border-left:1px outset #000;
+/* border:1px outset #708090; */
+/* color:#B0E0E6; */
+/* background:#4169E1; */
+}
+
+div.history_page_list a.currentPage, div.history_page_list_news a.currentPage
+{
+ font-weight:bold;
+ background:#DCDCDC;
+}
+div.history_page_list_news a
+{
+ border-left:none;
+ color:#4169E1;
+ font-weight:bold;
+}
+
+.viewall_no_items_found
+{
+ font:normal 14px/1 sans-serif,Verdana,arial;
+ margin:10px;
+ padding:5px;
+}
+
+
+
+.viewall_popup_menu_box {
+ width:725px;
+ height:30px;
+ margin-bottom:0px;
+ margin-top:10px;
+ margin-left:0px;
+}
+
+.viewall_popup_menu_status
+{
+ clear:left;
+ width:725px;
+ overflow:hidden;
+ margin-left:0px;
+ text-align:center;
+}
+.viewall_popup_menu_status_item
+{
+ width:139px;
+ float:left;
+ margin-left:3px;
+ color:#FF4500;
+ font-weight:bold;
+ font: bold 13px/1 sans-serif,arial,Verdana;
+}
+
+ul#menuBlock {
+/* float:right; */
+ float:left;
+ margin:0px;
+ padding:0px;
+ list-style:none;
+ height:24px;
+}
+
+ul#menuBlock li {
+ position:relative;
+ display:block;
+ float:left;
+ margin-left:3px;
+ width:139px;
+ height:22px;
+ text-align:center;
+ background: url('../Img/popup_back.png') no-repeat top left;
+/* background:#FFA500; */
+ padding-top:3px;
+}
+
+ul#menuBlock li a {
+ color:#000000;
+ font: normal 12px/1 sans-serif,Verdana,arial;
+}
+
+ul#menuBlock li ul {
+ margin:0px;
+ padding:0px;
+ list-style:none;
+ position:absolute;
+ top:24px;
+ left:-3px;
+ display:none;
+}
+
+ul#menuBlock li ul li {
+ background:#ffef84;
+ border-top:1px solid #ec8459;
+}
+
+
+/*view files with differences*/
+.diff_ext_box
+{
+ margin:0px 5px 30px 5px;
+}
+.diff_item_label
+{
+/* background:#ADD8E6; */
+/* padding:3px; */
+ border-bottom:1px solid black;
+}
+.diff_item_text
+{
+ color:#7c7a7a;
+ background:#F0FFF0;
+ padding:3px;
+}
+del
+{
+ color:red;
+}
+ins
+{
+ color:green;
+}
+
+
+
+/*tree navigation*/
+.position_tree_box
+{
+ margin:5px 5px 25px 5px;
+ padding:5px;
+ font:normal 14px/1 sans-serif,arial,Verdana;
+ border-top:1px solid #DC143C;
+ border-bottom:1px solid #DC143C;
+}
+.position_tree_box a
+{
+ text-decoration:none;
+ color:#DC143C;
+}
+.last_tree_element
+{
+ font-weight:bold;
+}
+
+
+
+.td_with_distribution_checkboxes
+{
+ position:relative;
+ display:block;
+}
+.dist_checkboxes_hidden_box
+{
+ display:none;
+ position:absolute;
+ background:#C1E3EF;
+ top:20px;
+ left:0px;
+ width:400px;
+ padding:3px;
+}
+.dist_checkboxes_hidden_box_inner
+{
+ height:150px;
+ overflow:auto;
+ z-index:400;
+}
+.hidden_box_item
+{
+ margin-bottom:10px;
+}
+/*wiki code*/
+.code_pre
+{
+/* width:650px; */
+ max-height:300px;
+ overflow:auto;
+ background:#f9f4a7;
+ padding:5px 0 5px 5px;
+ font-size:12px;
+/* color:#4169E1; */
+ border:1px dashed #d4cb3b;
+}
+
+.div_h1
+{
+ font:bold 15px/1 sans-serif,arial,Verdana;
+ border-bottom:1px solid gray;
+ padding:3px 0px;
+ margin:10px 0px;
+ color:gray;
+}
+.div_h2
+{
+ font:bold 14px/1 sans-serif,arial,Verdana;
+ color:gray;
+}
+.div_h3
+{
+ font:bold 13px/1 sans-serif,arial,Verdana;
+ color:gray;
+}
+
+.talk_login_notice
+{
+ margin:5px 5px;
+ padding:5px;
+ font:bold 14px/1 sans-serif,arial,Verdana;
+/* border:1px solid #4169E1; */
+/* color:#4169E1; */
+/* background:#9acee3; */
+}
+.talk_message_item
+{
+ margin:5px 0px 35px 5px;
+}
+.talk_message_item_title_date
+{
+ border-bottom:1px solid gray;
+ padding-bottom:5px;
+/* width:300px; */
+}
+.talk_message_item_title
+{
+ font:bold 14px/1 sans-serif,arial,Verdana;
+ margin-bottom:5px;
+}
+.talk_message_item_date
+{
+ font:normal 12px/1 sans-serif,arial,Verdana;
+ color:gray;
+}
+.talk_message_item_content
+{
+ padding:5px 0px;
+}
+.talk_form_external_box
+{
+ margin-bottom:20px;
+}
+
+.model_id
+{
+ font:normal 12px/1 sans-serif,arial,Verdana;
+/* color:gray; */
+ margin:5px 3px;
+ padding:3px;
+}
+
+.top_left_images
+{
+ height:35px;
+}
+.top_left_note_image
+{
+ height:30px;
+}
+.top_left_images_help
+{
+ height:30px;
+ margin-bottom:-10px;
+}
+
+.who_you_are_and_logout, .your_panel_link
+{
+ margin:5px 0px 15px 0px;
+ padding:5px 10px;
+ background-color:#B7F18C;
+/* font-weight:bold; */
+/* border-top:1px solid #015512; */
+/* border-bottom:1px solid #015512; */
+}
+.your_panel_link
+{
+ background:#DC143C;
+/* color:#FFF; */
+}
+.your_panel_link a
+{
+ font-weight:bold;
+ color:#FFF;
+}
+
+/*form*/
+.entryLabel {
+ display:block;
+ font:bold 12px/1em Verdana,arial;
+ padding:3px 0px;
+ margin-top:10px;
+/* background:#E6E6FA; */
+ width:400px;
+}
+
+.formEntry {
+ margin:20px 0px;
+}
+
+.formEntry input,.formEntry textarea {
+ width:400px;
+ padding:3px;
+ border: 1px solid #CECECE;
+}
+.formEntry textarea
+{
+ height:100px;
+}
+.formClass {
+ margin:10px;
+ margin-right:-40px;
+ width:400px;
+}
+
+.inputEntry {
+ margin:10px 0px;
+ float:left;
+ width:80px;
+ height:30px;
+}
+
+.panel_top_box
+{
+ background-color:#C1E3EF;
+ margin:5px 5px 35px 5px;
+ padding:10px;
+ font:bold 14px/1 sans-serif,arial,Verdana;
+ border-bottom:1px solid #097fbc;
+}
+.panel_top_box a
+{
+ color:#097fbc;
+}
+
+/*list of application in the panel main action*/
+.panelApplicationList
+{
+ padding:0px;
+}
+.panelApplicationList li
+{
+ display:block;
+ width:200px;
+ height:30px;
+ margin:5px;
+ padding-top:9px;
+}
+
+.panelApplicationList li a
+{
+ margin:5px;
+ font: bold 14px/1 sans-serif,Verdana,arial;
+ color:#097fbc;
+}
+
+.confirm_notice
+{
+ margin:10px;
+/* padding:10px; */
+ font:normal 14px/1.5 sans-serif,arial,Verdana;
+}
+
+.meet_item
+{
+ margin:20px 0px;
+}
+.meet_item_inner
+{
+ border-bottom:1px dashed #ed9f4a;
+ font-weight:bold;
+/* color:#8f0754; */
+}
+.meet_contrib_link, .contrib_explain_box
+{
+ margin:10px;
+}
+.users_contrib_item
+{
+ margin:10px;
+ padding:2px 0px;
+ border-bottom:1px dashed #ed9f4a;
+/* color:#8f0754; */
+}
+.external_users_contrib
+{
+ margin-bottom:40px;
+}
+.contrib_explain_box
+{
+ font-weight:bold;
+ margin-bottom:30px;
+}
+.users_meet_box
+{
+ margin:25px 30px;
+ padding:5px 20px;
+ background:#f6ea99;
+ border-bottom:1px solid #ed9f4a;
+ border-top:1px solid #ed9f4a;
+}
+.delete_account_notice_box
+{
+ margin:25px 10px;
+}
+.climb_form_ext_box
+{
+ margin:25px 10px;
+}
+
+.new_account_title
+{
+ margin:10px;
+}
+
+.viewall_popup_menu_box_external, .edit_form
+{
+ clear:left;
+ clear:right;
+ margin-bottom:20px;
+/* background:#E0FFFF; */
+ padding:0px 10px 10px 0px;
+}
+
+.manage_account_link_box
+{
+ margin:5px 0px;
+}
+
+.login_right_box
+{
+ margin-bottom:15px;
+}
+
+.mandatory_fields_notice
+{
+ margin:10px 0px;
+}
+
+.help_tables_of_contents
+{
+ margin:10px;
+ padding:10px;
+}
+
+.bottom_licence_notice
+{
+ font:normal 12px/1.2 sans-serif,arial,Verdana;
+ padding:10px;
+ background:#E0FFFF;
+ margin:25px 0px 5px 0px;
+}
+.top_licence_notice
+{
+ clear:left;
+ clear:right;
+ font:normal 12px/1.2 sans-serif,arial,Verdana;
+ padding:10px;
+ background:#E0FFFF;
+ margin:25px 0px 5px 0px;
+ text-align:left;
+}
+
+/*.copyright_notice_box
+{
+ text-align:right;
+ font: normal 12px/1 sans-serif,arial,Verdana;
+ padding:14px;
+}*/
+
+.copyright_notice_box, .footer_credits_box
+{
+ width:120px;
+ float:right;
+ font: normal 12px/1 sans-serif,arial,Verdana;
+ padding:14px;
+ border-left:3px solid #FFF;
+}
+.footer_credits_box
+{
+ width:40px;
+ border-left:3px solid #FFF;
+}
+.home_objectives_description
+{
+ margin:5px;
+ overflow:hidden;
+ width:100%;
+}
+.home_objectives_description img
+{
+ float:left;
+ margin-right:5px;
+}
+.home_objectives_title
+{
+ margin:15px 5px 5px 5px;
+/* background:#90EE90; */
+ font-weight:bold;
+ padding:5px 0px;
+ border-bottom:1px solid #228B22;
+}
+
+.credits_item_title
+{
+ margin:15px 5px 5px 5px;
+/* background:#90EE90; */
+ padding:5px;
+ border-bottom:1px solid #228B22;
+ font-weight:bold;
+}
+.credits_item_description
+{
+ padding:5px;
+ margin:5px;
+ overflow:hidden;
+ width:100%;
+}
+
+.home_container
+{
+ margin:20px 0px;
+}
+
+.issues_external_box
+{
+ margin:40px 5px;
+}
+.issues_viewall_title
+{
+ margin:10px 2px;
+ font-weight:bold;
+}
+.issues_viewall_table
+{
+ font:normal 14px/1 sans-serif,arial,Verdana;
+}
+.issues_viewall_table td
+{
+/* background:#E6E6FA; */
+ padding:5px;
+/* border-bottom:1px solid #E6E6FA; */
+}
+.issues_viewall_table th
+{
+ background:#ADD8E6;
+ border-top:1px solid #4169E1;
+ border-bottom:1px solid #4169E1;
+ padding:5px;
+}
+
+.issues_view_title, .issues_view_description_title
+{
+ font:bold 14px/1 sans-serif,arial,Verdana;
+ padding:5px 0px;
+ border-bottom:1px solid black;
+}
+.issues_view_status_and_priority
+{
+ margin:20px 0px;
+ font:normal 12px/1 sans-serif,arial,Verdana;
+}
+.issues_view_description
+{
+ margin:20px 0px;
+}
+
+.add_issue_form_title
+{
+ margin:30px 5px;
+ font-weight:bold;
+}
+.add_issue_form
+{
+ margin:30px 5px;
+}
+
+.contact_div
+{
+ margin:10px;
+}
+
+.help_external_box
+{
+ margin:5px;
+}
+.help_wiki_table thead
+{
+ text-align:left;
+}
+
+.hardware_element_image
+{
+ height:50px;
+}
+.markItUpContainer
+{
+ z-index:0;
+}
+
+.search_form
+{
+ clear:both;
+ margin:5px 5px 35px 5px;
+}
+.search_form .input_entry_search
+{
+ width:250px;
+ border: 1px solid #CECECE;
+ padding:2px;
+}
+
+.search_result_item
+{
+ margin:5px 5px 15px 5px;
+ border-top:1px solid #CECECE;
+ padding:5px 0px;
+}
+
+.diff_color_notice
+{
+ background:#f1d8d8;
+ padding:8px;
+ margin:5px;
+ margin-bottom:20px;
+ border-bottom:1px solid #d26262;
+ border-top:1px solid #d26262;
+}
+
+.gray_text_notice
+{
+ color:#7c7a7a;
+}
+.credits_external_box
+{
+ margin-bottom:40px;
+}
+.notebook_model img
+{
+ float:left;
+}
+.span_model_name
+{
+ float:left;
+ margin-left:10px;
+ padding-top:5px;
+}
+
+/*dialog*/
+#dialog-form, #delete_dialog
+{
+ display:none;
+}
+#suggest_dialog
+{
+ display:none;
+}
+#dialog-form table
+{
+ text-align:left;
+}
+#dialog-form input
+{
+ width:300px;
+ border:1px solid #CECECE;
+}
+#dialog-form textarea, #delete_dialog textarea
+{
+ width:300px;
+ height:100px;
+ border:1px solid #CECECE;
+}
+.ask_for_removal_class
+{
+ float:right;
+ padding-top:5px;
+}
+.deletion_motivations_title
+{
+ margin:15px 5px;
+ border-bottom:1px solid #D26262;
+}
+
+.deletion_motivations_iternal
+{
+ margin:15px 5px;
+ padding:5px;
+ border:1px dashed #D26262;
+}
+.deletion_motivations_iternal_message
+{
+
+}
+
+.news_external_box
+{
+ margin:5px;
+ margin-bottom:40px;
+}
+.news_item
+{
+/* background:#f8f1b2; */
+/* padding:5px; */
+ margin:30px 0px;
+/* border:1px solid #f99f4f; */
+}
+.news_item_title
+{
+ font-weight:bold;
+ margin:0px 0px 4px 0px;
+ padding-bottom:5px;
+ border-bottom:1px solid #9d1d04;
+ color:#9d1d04;
+}
+.news_item_date
+{
+ font: normal 13px/1 sans-serif,arial,Verdana;
+/* color:#e86a17; */
+ color:gray;
+ margin:0px 0px 10px 0px;
+}
+
+.discover_hardware, .download_database
+{
+ text-align:center;
+ margin-bottom:5px;
+}
+.download_database
+{
+ margin-bottom:30px;
+}
+
+.download_table
+{
+ margin:10px 0px;
+ padding:5px;
+}
+.download_table td
+{
+ padding:5px 5px;
+ background:#E0FFFF;
+}
+
+.help_external_box h1
+{
+ background:#FFD700;
+ padding:5px 10px;
+ color:#800000;
+ border-top:1px solid #800000;
+ border-bottom:1px solid #800000;
+ font:normal 20px/1 sans-serif,arial,Verdana;
+}
+
+.right_box_ext_box
+{
+ margin:5px;
+ margin-bottom:300px;
+}
+
+.add_message_form_title
+{
+ margin:15px 0px;
+ font-weight:bold;
+ padding:5px 0px;
+ color:#4169E1;
+}
+
+.issues_message_item, .issues_message_item_preview, .issues_message_item_hidden, .talk_message_item_hidden
+{
+ padding:10px;
+ margin:20px 0px;
+ background:#eaf2f4;
+ border-top:1px solid #4169E1;
+ border-bottom:1px solid #4169E1;
+}
+.issues_message_item_hidden, .talk_message_item_hidden
+{
+ background:#FFF;
+/* background:#b5d6e0; */
+ border-top:1px dashed #bcbcbc;
+ border-bottom:1px dashed #bcbcbc;
+}
+.issues_message_item_preview
+{
+ background:#fffdc2;
+ border-top:1px dashed #f9a92b;
+ border-bottom:1px dashed #f9a92b;
+}
+.talk_message_item_hidden
+{
+ margin-bottom:40px;
+/* background:#f1f1f1; */
+}
+.message_view_description
+{
+ clear:both;
+ margin-bottom:5px;
+}
+.message_view_description_hidden
+{
+ margin-top:5px;
+}
+.message_preview_notice
+{
+ margin:3px 3px;
+ font:bold 14px/1 sans-serif,arial,Verdana;
+}
+.useful_links_ext div
+{
+ margin:3px 0px;
+ padding:1px;
+ padding-left:20px;
+ background: url(../Img/link.png) no-repeat left center;
+}
+.useful_links_ext div a
+{
+ color:#000;
+ text-decoration:none;
+ font:normal 14px/1 sans-serif,arial,Verdana;
+}
+.issues_message_item_user
+{
+ overflow:hidden;
+ font-weight:bold;
+ margin-bottom:1em;
+}
+.issues_message_item_user_inner
+{
+ float:left;
+ width:500px;
+}
+
+.hide_general
+{
+ float:right;
+ margin-left:10px;
+ font-weight:normal;
+ text-decoration:none;
+ color:black;
+}
+.hide_general img
+{
+ margin-right:5px;
+ margin-bottom:-2px;
+}
+.language_links_box ul
+{
+ overflow:hidden;
+ margin:4px 5px 20px 5px;
+ padding:0px;
+ list-style-type:none;
+}
+.language_links_box ul li
+{
+ float:left;
+ margin-bottom:10px;
+ margin-right:10px;
+ margin-top:5px;
+}
+.language_links_box ul li a
+{
+ padding:5px;
+ text-decoration:none;
+ color:black;
+}
+.language_links_box ul li a span
+{
+ margin-left:3px;
+}
+.language_links_box a.current_lang
+{
+ border-top:1px dashed #6495ED;
+ border-bottom:1px dashed #6495ED;
+}
+
+.talk_numb_ext
+{
+ clear:both;
+ text-align:left;
+ margin-left:10px;
+}
+.talk_numb_ext a
+{
+ display:block;
+ width:150px;
+ text-align:center;
+ padding:10px 0px;
+ text-decoration:none;
+ color:black;
+ background: url(../Img/talk_messages.png) no-repeat left center;
+ margin-bottom:10px;
+ float:right;
+ overflow:hidden;
+}
+
+.details_of_hidden_message
+{
+ display:none;
+}
+.details_of_hidden_message_inner, .details_of_actions_inner
+{
+ margin:10px 0px;
+ background:#fbfbfb;
+ padding:5px;
+ border:1px solid #BCBCBC;
+}
+.details_of_actions_inner
+{
+ background:#ecfffe;
+ border:1px solid #7ed0cb;
+}
+
+.md_type
+{
+ display:none;
+}
+.hidden_message_view_details
+{
+ font:normal 12px/1 sans-serif,Verdana,arial;
+}
+.deleted_message_show
+{
+ margin:8px 0px 0px 0px;
+ font:normal 13px/1 sans-serif,arial,Verdana;
+} \ No newline at end of file
diff --git a/h-source/admin/Public/Img/Icons/back.png b/h-source/admin/Public/Img/Icons/back.png
new file mode 100644
index 0000000..6ceb852
--- /dev/null
+++ b/h-source/admin/Public/Img/Icons/back.png
Binary files differ
diff --git a/h-source/admin/Public/Img/Icons/delete.png b/h-source/admin/Public/Img/Icons/delete.png
new file mode 100644
index 0000000..9b192fe
--- /dev/null
+++ b/h-source/admin/Public/Img/Icons/delete.png
Binary files differ
diff --git a/h-source/admin/Public/Img/Icons/file.png b/h-source/admin/Public/Img/Icons/file.png
new file mode 100644
index 0000000..443765f
--- /dev/null
+++ b/h-source/admin/Public/Img/Icons/file.png
Binary files differ
diff --git a/h-source/admin/Public/Img/Icons/folder.png b/h-source/admin/Public/Img/Icons/folder.png
new file mode 100644
index 0000000..89fb6d5
--- /dev/null
+++ b/h-source/admin/Public/Img/Icons/folder.png
Binary files differ
diff --git a/h-source/admin/Public/Img/Icons/image.png b/h-source/admin/Public/Img/Icons/image.png
new file mode 100644
index 0000000..bbc8c82
--- /dev/null
+++ b/h-source/admin/Public/Img/Icons/image.png
Binary files differ
diff --git a/h-source/admin/Public/Img/Icons/index.html b/h-source/admin/Public/Img/Icons/index.html
new file mode 100644
index 0000000..8d1c8b6
--- /dev/null
+++ b/h-source/admin/Public/Img/Icons/index.html
@@ -0,0 +1 @@
+
diff --git a/h-source/admin/Public/Js/DisplayTag.js b/h-source/admin/Public/Js/DisplayTag.js
new file mode 100755
index 0000000..1ba1fb7
--- /dev/null
+++ b/h-source/admin/Public/Js/DisplayTag.js
@@ -0,0 +1,10 @@
+<!--
+
+// this simple function is necessary to obtain the hover effect in the popup menu (because IE doesn't support hover)
+
+function DisplayTag(obj,propertyValue) {
+ var a = obj.firstChild.childNodes[1];
+ a.style.display= propertyValue;
+}
+
+//--> \ No newline at end of file
diff --git a/h-source/admin/Public/Js/TinyMCE.js b/h-source/admin/Public/Js/TinyMCE.js
new file mode 100755
index 0000000..b0f994e
--- /dev/null
+++ b/h-source/admin/Public/Js/TinyMCE.js
@@ -0,0 +1,34 @@
+tinyMCE.init({
+ // General options
+ mode : "textareas",
+ theme : "advanced",
+ editor_selector : "contentArea",
+// editor_deselector : "mceNoEditor",
+ plugins : "safari,pagebreak,style,layer,table,save,advhr,advimage,advlink,emotions,iespell,inlinepopups,insertdatetime,preview,media,searchreplace,print,contextmenu,paste,directionality,fullscreen,noneditable,visualchars,nonbreaking,xhtmlxtras,template",
+
+ // Theme options
+ theme_advanced_buttons1 : "justifyleft,justifycenter,justifyright,justifyfull,styleselect,formatselect,fontselect,fontsizeselect",
+ theme_advanced_buttons2 : "cut,copy,paste,pastetext,pasteword,|,search,replace,|,bullist,numlist,|,outdent,indent,blockquote,|,undo,redo,|,link,unlink,anchor,image,cleanup,code",
+ theme_advanced_buttons3 : "tablecontrols,|,hr,removeformat,visualaid,|,sub,sup,|,charmap,emotions,iespell,media",
+ theme_advanced_buttons4 : "styleprops,|,cite,abbr,acronym,del,ins,attribs,|,visualchars,template,|,forecolor,backcolor,bold,italic,underline,strikethrough,|,insertdate,inserttime,preview",
+ theme_advanced_toolbar_location : "top",
+ theme_advanced_toolbar_align : "left",
+ theme_advanced_statusbar_location : "bottom",
+ theme_advanced_resizing : true,
+
+ // Example content CSS (should be your site CSS)
+ content_css : "../stili_editor.css",
+
+ // Drop lists for link/image/media/template dialogs
+ template_external_list_url : "lists/template_list.js",
+ external_link_list_url : "lists/link_list.js",
+ external_image_list_url : "lists/image_list.js",
+ media_external_list_url : "lists/media_list.js",
+
+ // Replace values for the template plugin
+ template_replace_values : {
+ username : "Some User",
+ staffid : "991234"
+ }
+ });
+
diff --git a/h-source/admin/Public/Js/functions.js b/h-source/admin/Public/Js/functions.js
new file mode 100644
index 0000000..5e1f2d8
--- /dev/null
+++ b/h-source/admin/Public/Js/functions.js
@@ -0,0 +1,122 @@
+<!--
+
+function dist_list_helper()
+{
+ var dist_list = "";
+
+ $(".input_distribution").click(function(){
+
+ //show the form
+ $(".dist_checkboxes_hidden_box").css({"display" : "block","z-index" : "500"});
+
+ $(".hidden_x_explorer").css({"visibility" : "hidden"});
+
+// $(".hidden_x_explorer").css({"visibility" : "hidden"});
+
+ //remove checked attribute
+ $(".hidden_box_input").each(function(){
+
+ $(this).removeAttr("checked");
+
+ });
+
+ dist_list = $(".input_distribution").attr("value");
+
+ //build the array by splitting the distribution string
+ var dist_array = dist_list.split(",");
+
+ for (i=0; i < dist_array.length; i++)
+ {
+ var this_class = dist_array[i].replace(/^\s*/, "").replace(/\s*$/, "");
+ $("." + this_class).attr({"checked" : "checked"});
+ }
+
+ });
+
+ $(".hidden_box_distribution_submit").click(function(){
+
+ $(".hidden_x_explorer").css({"visibility" : "visible"});
+
+ dist_list = "";
+
+ $(".hidden_box_input:checked").each(function(){
+
+ dist_list += $(this).attr("value") + " , ";
+
+ });
+
+ $(".dist_checkboxes_hidden_box").css({"display" : "none"});
+
+ if (dist_list.slice(-2) === ", ")
+ {
+ dist_list = dist_list.slice(0,dist_list.length-2);
+ }
+
+ $(".input_distribution").attr({"value" : dist_list});
+
+ return false;
+ });
+
+ //click cancel
+ $(".hidden_box_distribution_cancel").click(function(){
+
+ $(".hidden_x_explorer").css({"visibility" : "visible"});
+
+ $(".dist_checkboxes_hidden_box").css({"display" : "none"});
+
+ return false;
+ });
+}
+
+//md_type: message,issue,talk
+//md_action:hide,show
+function moderator_dialog(md_action,md_type)
+{
+ // Dialog Link
+ $("." + md_action + "_" + md_type).click(function() {
+
+ $("#delete_dialog").css("display","block");
+
+ var md_id = $(this).attr("id");
+
+ $('#notice_dialog').dialog({
+ autoOpen: false,
+ width: 500
+ });
+
+ $("#delete_dialog").dialog({
+ autoOpen: false,
+ width: 350,
+ buttons: {
+ "Send": function() {
+
+ var md_message = encodeURIComponent($("#md_message").attr("value"));
+
+ $.ajax({
+ type: "POST",
+ url: base_url + "/history/" + md_action + "/" + curr_lang + "/" + csrf_token,
+ data: "id="+md_id+"&message="+md_message+"&type="+md_type+"&insertAction=save",
+ async: false,
+ cache:false,
+ dataType: "html",
+ success: function(html){
+ $(".notice_dialog_inner").text(html);
+ $('#notice_dialog').dialog('open');
+ }
+ });
+
+ $(this).dialog("close");
+ },
+ "Cancel": function() {
+ $(this).dialog("close");
+ }
+ }
+ });
+
+ $("#delete_dialog").dialog('open');
+
+ return false;
+ });
+}
+
+//--> \ No newline at end of file
diff --git a/h-source/admin/Public/Js/index.html b/h-source/admin/Public/Js/index.html
new file mode 100644
index 0000000..8d1c8b6
--- /dev/null
+++ b/h-source/admin/Public/Js/index.html
@@ -0,0 +1 @@
+
diff --git a/h-source/admin/Public/Js/jquery/dialog/css/excite-bike/images/ui-bg_diagonals-small_25_c5ddfc_40x40.png b/h-source/admin/Public/Js/jquery/dialog/css/excite-bike/images/ui-bg_diagonals-small_25_c5ddfc_40x40.png
new file mode 100755
index 0000000..82524ab
--- /dev/null
+++ b/h-source/admin/Public/Js/jquery/dialog/css/excite-bike/images/ui-bg_diagonals-small_25_c5ddfc_40x40.png
Binary files differ
diff --git a/h-source/admin/Public/Js/jquery/dialog/css/excite-bike/images/ui-bg_diagonals-thick_20_e69700_40x40.png b/h-source/admin/Public/Js/jquery/dialog/css/excite-bike/images/ui-bg_diagonals-thick_20_e69700_40x40.png
new file mode 100755
index 0000000..6aed97a
--- /dev/null
+++ b/h-source/admin/Public/Js/jquery/dialog/css/excite-bike/images/ui-bg_diagonals-thick_20_e69700_40x40.png
Binary files differ
diff --git a/h-source/admin/Public/Js/jquery/dialog/css/excite-bike/images/ui-bg_diagonals-thick_22_1484e6_40x40.png b/h-source/admin/Public/Js/jquery/dialog/css/excite-bike/images/ui-bg_diagonals-thick_22_1484e6_40x40.png
new file mode 100755
index 0000000..f11ca67
--- /dev/null
+++ b/h-source/admin/Public/Js/jquery/dialog/css/excite-bike/images/ui-bg_diagonals-thick_22_1484e6_40x40.png
Binary files differ
diff --git a/h-source/admin/Public/Js/jquery/dialog/css/excite-bike/images/ui-bg_diagonals-thick_26_2293f7_40x40.png b/h-source/admin/Public/Js/jquery/dialog/css/excite-bike/images/ui-bg_diagonals-thick_26_2293f7_40x40.png
new file mode 100755
index 0000000..68306d1
--- /dev/null
+++ b/h-source/admin/Public/Js/jquery/dialog/css/excite-bike/images/ui-bg_diagonals-thick_26_2293f7_40x40.png
Binary files differ
diff --git a/h-source/admin/Public/Js/jquery/dialog/css/excite-bike/images/ui-bg_flat_0_e69700_40x100.png b/h-source/admin/Public/Js/jquery/dialog/css/excite-bike/images/ui-bg_flat_0_e69700_40x100.png
new file mode 100755
index 0000000..f567c28
--- /dev/null
+++ b/h-source/admin/Public/Js/jquery/dialog/css/excite-bike/images/ui-bg_flat_0_e69700_40x100.png
Binary files differ
diff --git a/h-source/admin/Public/Js/jquery/dialog/css/excite-bike/images/ui-bg_flat_0_e6b900_40x100.png b/h-source/admin/Public/Js/jquery/dialog/css/excite-bike/images/ui-bg_flat_0_e6b900_40x100.png
new file mode 100755
index 0000000..29e9965
--- /dev/null
+++ b/h-source/admin/Public/Js/jquery/dialog/css/excite-bike/images/ui-bg_flat_0_e6b900_40x100.png
Binary files differ
diff --git a/h-source/admin/Public/Js/jquery/dialog/css/excite-bike/images/ui-bg_highlight-soft_100_f9f9f9_1x100.png b/h-source/admin/Public/Js/jquery/dialog/css/excite-bike/images/ui-bg_highlight-soft_100_f9f9f9_1x100.png
new file mode 100755
index 0000000..9a46d19
--- /dev/null
+++ b/h-source/admin/Public/Js/jquery/dialog/css/excite-bike/images/ui-bg_highlight-soft_100_f9f9f9_1x100.png
Binary files differ
diff --git a/h-source/admin/Public/Js/jquery/dialog/css/excite-bike/images/ui-bg_inset-hard_100_eeeeee_1x100.png b/h-source/admin/Public/Js/jquery/dialog/css/excite-bike/images/ui-bg_inset-hard_100_eeeeee_1x100.png
new file mode 100755
index 0000000..f811f30
--- /dev/null
+++ b/h-source/admin/Public/Js/jquery/dialog/css/excite-bike/images/ui-bg_inset-hard_100_eeeeee_1x100.png
Binary files differ
diff --git a/h-source/admin/Public/Js/jquery/dialog/css/excite-bike/images/ui-icons_0a82eb_256x240.png b/h-source/admin/Public/Js/jquery/dialog/css/excite-bike/images/ui-icons_0a82eb_256x240.png
new file mode 100755
index 0000000..755fe99
--- /dev/null
+++ b/h-source/admin/Public/Js/jquery/dialog/css/excite-bike/images/ui-icons_0a82eb_256x240.png
Binary files differ
diff --git a/h-source/admin/Public/Js/jquery/dialog/css/excite-bike/images/ui-icons_0b54d5_256x240.png b/h-source/admin/Public/Js/jquery/dialog/css/excite-bike/images/ui-icons_0b54d5_256x240.png
new file mode 100755
index 0000000..98705f9
--- /dev/null
+++ b/h-source/admin/Public/Js/jquery/dialog/css/excite-bike/images/ui-icons_0b54d5_256x240.png
Binary files differ
diff --git a/h-source/admin/Public/Js/jquery/dialog/css/excite-bike/images/ui-icons_5fa5e3_256x240.png b/h-source/admin/Public/Js/jquery/dialog/css/excite-bike/images/ui-icons_5fa5e3_256x240.png
new file mode 100755
index 0000000..2179078
--- /dev/null
+++ b/h-source/admin/Public/Js/jquery/dialog/css/excite-bike/images/ui-icons_5fa5e3_256x240.png
Binary files differ
diff --git a/h-source/admin/Public/Js/jquery/dialog/css/excite-bike/images/ui-icons_fcdd4a_256x240.png b/h-source/admin/Public/Js/jquery/dialog/css/excite-bike/images/ui-icons_fcdd4a_256x240.png
new file mode 100755
index 0000000..de76ce2
--- /dev/null
+++ b/h-source/admin/Public/Js/jquery/dialog/css/excite-bike/images/ui-icons_fcdd4a_256x240.png
Binary files differ
diff --git a/h-source/admin/Public/Js/jquery/dialog/css/excite-bike/images/ui-icons_ffffff_256x240.png b/h-source/admin/Public/Js/jquery/dialog/css/excite-bike/images/ui-icons_ffffff_256x240.png
new file mode 100755
index 0000000..42f8f99
--- /dev/null
+++ b/h-source/admin/Public/Js/jquery/dialog/css/excite-bike/images/ui-icons_ffffff_256x240.png
Binary files differ
diff --git a/h-source/admin/Public/Js/jquery/dialog/css/excite-bike/jquery-ui-1.8.4.custom.css b/h-source/admin/Public/Js/jquery/dialog/css/excite-bike/jquery-ui-1.8.4.custom.css
new file mode 100755
index 0000000..c4ed3ea
--- /dev/null
+++ b/h-source/admin/Public/Js/jquery/dialog/css/excite-bike/jquery-ui-1.8.4.custom.css
@@ -0,0 +1,315 @@
+/*
+ * jQuery UI CSS Framework @VERSION
+ *
+ * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Theming/API
+ */
+
+/* Layout helpers
+----------------------------------*/
+.ui-helper-hidden { display: none; }
+.ui-helper-hidden-accessible { position: absolute; left: -99999999px; }
+.ui-helper-reset { margin: 0; padding: 0; border: 0; outline: 0; line-height: 1.3; text-decoration: none; font-size: 100%; list-style: none; }
+.ui-helper-clearfix:after { content: "."; display: block; height: 0; clear: both; visibility: hidden; }
+.ui-helper-clearfix { display: inline-block; }
+/* required comment for clearfix to work in Opera \*/
+* html .ui-helper-clearfix { height:1%; }
+.ui-helper-clearfix { display:block; }
+/* end clearfix */
+.ui-helper-zfix { width: 100%; height: 100%; top: 0; left: 0; position: absolute; opacity: 0; filter:Alpha(Opacity=0); }
+
+
+/* Interaction Cues
+----------------------------------*/
+.ui-state-disabled { cursor: default !important; }
+
+
+/* Icons
+----------------------------------*/
+
+/* states and images */
+.ui-icon { display: block; text-indent: -99999px; overflow: hidden; background-repeat: no-repeat; }
+
+
+/* Misc visuals
+----------------------------------*/
+
+/* Overlays */
+.ui-widget-overlay { position: absolute; top: 0; left: 0; width: 100%; height: 100%; }
+
+
+/*
+ * jQuery UI CSS Framework @VERSION
+ *
+ * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Theming/API
+ *
+ * To view and modify this theme, visit http://jqueryui.com/themeroller/?ffDefault=segoe%20ui,%20Arial,%20sans-serif&fwDefault=bold&fsDefault=1.1em&cornerRadius=3px&bgColorHeader=f9f9f9&bgTextureHeader=03_highlight_soft.png&bgImgOpacityHeader=100&borderColorHeader=cccccc&fcHeader=e69700&iconColorHeader=5fa5e3&bgColorContent=eeeeee&bgTextureContent=06_inset_hard.png&bgImgOpacityContent=100&borderColorContent=aaaaaa&fcContent=222222&iconColorContent=0a82eb&bgColorDefault=1484e6&bgTextureDefault=08_diagonals_thick.png&bgImgOpacityDefault=22&borderColorDefault=ffffff&fcDefault=ffffff&iconColorDefault=fcdd4a&bgColorHover=2293f7&bgTextureHover=08_diagonals_thick.png&bgImgOpacityHover=26&borderColorHover=2293f7&fcHover=ffffff&iconColorHover=ffffff&bgColorActive=e69700&bgTextureActive=08_diagonals_thick.png&bgImgOpacityActive=20&borderColorActive=e69700&fcActive=ffffff&iconColorActive=ffffff&bgColorHighlight=c5ddfc&bgTextureHighlight=07_diagonals_small.png&bgImgOpacityHighlight=25&borderColorHighlight=ffffff&fcHighlight=333333&iconColorHighlight=0b54d5&bgColorError=e69700&bgTextureError=08_diagonals_thick.png&bgImgOpacityError=20&borderColorError=e69700&fcError=ffffff&iconColorError=ffffff&bgColorOverlay=e6b900&bgTextureOverlay=01_flat.png&bgImgOpacityOverlay=0&opacityOverlay=30&bgColorShadow=e69700&bgTextureShadow=01_flat.png&bgImgOpacityShadow=0&opacityShadow=20&thicknessShadow=0px&offsetTopShadow=6px&offsetLeftShadow=6px&cornerRadiusShadow=3px
+ */
+
+
+/* Component containers
+----------------------------------*/
+.ui-widget { font-family: segoe ui, Arial, sans-serif; font-size: 1.1em; }
+.ui-widget .ui-widget { font-size: 1em; }
+.ui-widget input, .ui-widget select, .ui-widget textarea, .ui-widget button { font-family: segoe ui, Arial, sans-serif; font-size: 1em; }
+.ui-widget-content { border: 1px solid #aaaaaa; background: #eeeeee url(images/ui-bg_inset-hard_100_eeeeee_1x100.png) 50% bottom repeat-x; color: #222222; }
+.ui-widget-content a { color: #222222; }
+.ui-widget-header { border: 1px solid #cccccc; background: #f9f9f9 url(images/ui-bg_highlight-soft_100_f9f9f9_1x100.png) 50% 50% repeat-x; color: #e69700; font-weight: bold; }
+.ui-widget-header a { color: #e69700; }
+
+/* Interaction states
+----------------------------------*/
+.ui-state-default, .ui-widget-content .ui-state-default, .ui-widget-header .ui-state-default { border: 1px solid #ffffff; background: #1484e6 url(images/ui-bg_diagonals-thick_22_1484e6_40x40.png) 50% 50% repeat; font-weight: bold; color: #ffffff; }
+.ui-state-default a, .ui-state-default a:link, .ui-state-default a:visited { color: #ffffff; text-decoration: none; }
+.ui-state-hover, .ui-widget-content .ui-state-hover, .ui-widget-header .ui-state-hover, .ui-state-focus, .ui-widget-content .ui-state-focus, .ui-widget-header .ui-state-focus { border: 1px solid #2293f7; background: #2293f7 url(images/ui-bg_diagonals-thick_26_2293f7_40x40.png) 50% 50% repeat; font-weight: bold; color: #ffffff; }
+.ui-state-hover a, .ui-state-hover a:hover { color: #ffffff; text-decoration: none; }
+.ui-state-active, .ui-widget-content .ui-state-active, .ui-widget-header .ui-state-active { border: 1px solid #e69700; background: #e69700 url(images/ui-bg_diagonals-thick_20_e69700_40x40.png) 50% 50% repeat; font-weight: bold; color: #ffffff; }
+.ui-state-active a, .ui-state-active a:link, .ui-state-active a:visited { color: #ffffff; text-decoration: none; }
+.ui-widget :active { outline: none; }
+
+/* Interaction Cues
+----------------------------------*/
+.ui-state-highlight, .ui-widget-content .ui-state-highlight, .ui-widget-header .ui-state-highlight {border: 1px solid #ffffff; background: #c5ddfc url(images/ui-bg_diagonals-small_25_c5ddfc_40x40.png) 50% 50% repeat; color: #333333; }
+.ui-state-highlight a, .ui-widget-content .ui-state-highlight a,.ui-widget-header .ui-state-highlight a { color: #333333; }
+.ui-state-error, .ui-widget-content .ui-state-error, .ui-widget-header .ui-state-error {border: 1px solid #e69700; background: #e69700 url(images/ui-bg_diagonals-thick_20_e69700_40x40.png) 50% 50% repeat; color: #ffffff; }
+.ui-state-error a, .ui-widget-content .ui-state-error a, .ui-widget-header .ui-state-error a { color: #ffffff; }
+.ui-state-error-text, .ui-widget-content .ui-state-error-text, .ui-widget-header .ui-state-error-text { color: #ffffff; }
+.ui-priority-primary, .ui-widget-content .ui-priority-primary, .ui-widget-header .ui-priority-primary { font-weight: bold; }
+.ui-priority-secondary, .ui-widget-content .ui-priority-secondary, .ui-widget-header .ui-priority-secondary { opacity: .7; filter:Alpha(Opacity=70); font-weight: normal; }
+.ui-state-disabled, .ui-widget-content .ui-state-disabled, .ui-widget-header .ui-state-disabled { opacity: .35; filter:Alpha(Opacity=35); background-image: none; }
+
+/* Icons
+----------------------------------*/
+
+/* states and images */
+.ui-icon { width: 16px; height: 16px; background-image: url(images/ui-icons_0a82eb_256x240.png); }
+.ui-widget-content .ui-icon {background-image: url(images/ui-icons_0a82eb_256x240.png); }
+.ui-widget-header .ui-icon {background-image: url(images/ui-icons_5fa5e3_256x240.png); }
+.ui-state-default .ui-icon { background-image: url(images/ui-icons_fcdd4a_256x240.png); }
+.ui-state-hover .ui-icon, .ui-state-focus .ui-icon {background-image: url(images/ui-icons_ffffff_256x240.png); }
+.ui-state-active .ui-icon {background-image: url(images/ui-icons_ffffff_256x240.png); }
+.ui-state-highlight .ui-icon {background-image: url(images/ui-icons_0b54d5_256x240.png); }
+.ui-state-error .ui-icon, .ui-state-error-text .ui-icon {background-image: url(images/ui-icons_ffffff_256x240.png); }
+
+/* positioning */
+.ui-icon-carat-1-n { background-position: 0 0; }
+.ui-icon-carat-1-ne { background-position: -16px 0; }
+.ui-icon-carat-1-e { background-position: -32px 0; }
+.ui-icon-carat-1-se { background-position: -48px 0; }
+.ui-icon-carat-1-s { background-position: -64px 0; }
+.ui-icon-carat-1-sw { background-position: -80px 0; }
+.ui-icon-carat-1-w { background-position: -96px 0; }
+.ui-icon-carat-1-nw { background-position: -112px 0; }
+.ui-icon-carat-2-n-s { background-position: -128px 0; }
+.ui-icon-carat-2-e-w { background-position: -144px 0; }
+.ui-icon-triangle-1-n { background-position: 0 -16px; }
+.ui-icon-triangle-1-ne { background-position: -16px -16px; }
+.ui-icon-triangle-1-e { background-position: -32px -16px; }
+.ui-icon-triangle-1-se { background-position: -48px -16px; }
+.ui-icon-triangle-1-s { background-position: -64px -16px; }
+.ui-icon-triangle-1-sw { background-position: -80px -16px; }
+.ui-icon-triangle-1-w { background-position: -96px -16px; }
+.ui-icon-triangle-1-nw { background-position: -112px -16px; }
+.ui-icon-triangle-2-n-s { background-position: -128px -16px; }
+.ui-icon-triangle-2-e-w { background-position: -144px -16px; }
+.ui-icon-arrow-1-n { background-position: 0 -32px; }
+.ui-icon-arrow-1-ne { background-position: -16px -32px; }
+.ui-icon-arrow-1-e { background-position: -32px -32px; }
+.ui-icon-arrow-1-se { background-position: -48px -32px; }
+.ui-icon-arrow-1-s { background-position: -64px -32px; }
+.ui-icon-arrow-1-sw { background-position: -80px -32px; }
+.ui-icon-arrow-1-w { background-position: -96px -32px; }
+.ui-icon-arrow-1-nw { background-position: -112px -32px; }
+.ui-icon-arrow-2-n-s { background-position: -128px -32px; }
+.ui-icon-arrow-2-ne-sw { background-position: -144px -32px; }
+.ui-icon-arrow-2-e-w { background-position: -160px -32px; }
+.ui-icon-arrow-2-se-nw { background-position: -176px -32px; }
+.ui-icon-arrowstop-1-n { background-position: -192px -32px; }
+.ui-icon-arrowstop-1-e { background-position: -208px -32px; }
+.ui-icon-arrowstop-1-s { background-position: -224px -32px; }
+.ui-icon-arrowstop-1-w { background-position: -240px -32px; }
+.ui-icon-arrowthick-1-n { background-position: 0 -48px; }
+.ui-icon-arrowthick-1-ne { background-position: -16px -48px; }
+.ui-icon-arrowthick-1-e { background-position: -32px -48px; }
+.ui-icon-arrowthick-1-se { background-position: -48px -48px; }
+.ui-icon-arrowthick-1-s { background-position: -64px -48px; }
+.ui-icon-arrowthick-1-sw { background-position: -80px -48px; }
+.ui-icon-arrowthick-1-w { background-position: -96px -48px; }
+.ui-icon-arrowthick-1-nw { background-position: -112px -48px; }
+.ui-icon-arrowthick-2-n-s { background-position: -128px -48px; }
+.ui-icon-arrowthick-2-ne-sw { background-position: -144px -48px; }
+.ui-icon-arrowthick-2-e-w { background-position: -160px -48px; }
+.ui-icon-arrowthick-2-se-nw { background-position: -176px -48px; }
+.ui-icon-arrowthickstop-1-n { background-position: -192px -48px; }
+.ui-icon-arrowthickstop-1-e { background-position: -208px -48px; }
+.ui-icon-arrowthickstop-1-s { background-position: -224px -48px; }
+.ui-icon-arrowthickstop-1-w { background-position: -240px -48px; }
+.ui-icon-arrowreturnthick-1-w { background-position: 0 -64px; }
+.ui-icon-arrowreturnthick-1-n { background-position: -16px -64px; }
+.ui-icon-arrowreturnthick-1-e { background-position: -32px -64px; }
+.ui-icon-arrowreturnthick-1-s { background-position: -48px -64px; }
+.ui-icon-arrowreturn-1-w { background-position: -64px -64px; }
+.ui-icon-arrowreturn-1-n { background-position: -80px -64px; }
+.ui-icon-arrowreturn-1-e { background-position: -96px -64px; }
+.ui-icon-arrowreturn-1-s { background-position: -112px -64px; }
+.ui-icon-arrowrefresh-1-w { background-position: -128px -64px; }
+.ui-icon-arrowrefresh-1-n { background-position: -144px -64px; }
+.ui-icon-arrowrefresh-1-e { background-position: -160px -64px; }
+.ui-icon-arrowrefresh-1-s { background-position: -176px -64px; }
+.ui-icon-arrow-4 { background-position: 0 -80px; }
+.ui-icon-arrow-4-diag { background-position: -16px -80px; }
+.ui-icon-extlink { background-position: -32px -80px; }
+.ui-icon-newwin { background-position: -48px -80px; }
+.ui-icon-refresh { background-position: -64px -80px; }
+.ui-icon-shuffle { background-position: -80px -80px; }
+.ui-icon-transfer-e-w { background-position: -96px -80px; }
+.ui-icon-transferthick-e-w { background-position: -112px -80px; }
+.ui-icon-folder-collapsed { background-position: 0 -96px; }
+.ui-icon-folder-open { background-position: -16px -96px; }
+.ui-icon-document { background-position: -32px -96px; }
+.ui-icon-document-b { background-position: -48px -96px; }
+.ui-icon-note { background-position: -64px -96px; }
+.ui-icon-mail-closed { background-position: -80px -96px; }
+.ui-icon-mail-open { background-position: -96px -96px; }
+.ui-icon-suitcase { background-position: -112px -96px; }
+.ui-icon-comment { background-position: -128px -96px; }
+.ui-icon-person { background-position: -144px -96px; }
+.ui-icon-print { background-position: -160px -96px; }
+.ui-icon-trash { background-position: -176px -96px; }
+.ui-icon-locked { background-position: -192px -96px; }
+.ui-icon-unlocked { background-position: -208px -96px; }
+.ui-icon-bookmark { background-position: -224px -96px; }
+.ui-icon-tag { background-position: -240px -96px; }
+.ui-icon-home { background-position: 0 -112px; }
+.ui-icon-flag { background-position: -16px -112px; }
+.ui-icon-calendar { background-position: -32px -112px; }
+.ui-icon-cart { background-position: -48px -112px; }
+.ui-icon-pencil { background-position: -64px -112px; }
+.ui-icon-clock { background-position: -80px -112px; }
+.ui-icon-disk { background-position: -96px -112px; }
+.ui-icon-calculator { background-position: -112px -112px; }
+.ui-icon-zoomin { background-position: -128px -112px; }
+.ui-icon-zoomout { background-position: -144px -112px; }
+.ui-icon-search { background-position: -160px -112px; }
+.ui-icon-wrench { background-position: -176px -112px; }
+.ui-icon-gear { background-position: -192px -112px; }
+.ui-icon-heart { background-position: -208px -112px; }
+.ui-icon-star { background-position: -224px -112px; }
+.ui-icon-link { background-position: -240px -112px; }
+.ui-icon-cancel { background-position: 0 -128px; }
+.ui-icon-plus { background-position: -16px -128px; }
+.ui-icon-plusthick { background-position: -32px -128px; }
+.ui-icon-minus { background-position: -48px -128px; }
+.ui-icon-minusthick { background-position: -64px -128px; }
+.ui-icon-close { background-position: -80px -128px; }
+.ui-icon-closethick { background-position: -96px -128px; }
+.ui-icon-key { background-position: -112px -128px; }
+.ui-icon-lightbulb { background-position: -128px -128px; }
+.ui-icon-scissors { background-position: -144px -128px; }
+.ui-icon-clipboard { background-position: -160px -128px; }
+.ui-icon-copy { background-position: -176px -128px; }
+.ui-icon-contact { background-position: -192px -128px; }
+.ui-icon-image { background-position: -208px -128px; }
+.ui-icon-video { background-position: -224px -128px; }
+.ui-icon-script { background-position: -240px -128px; }
+.ui-icon-alert { background-position: 0 -144px; }
+.ui-icon-info { background-position: -16px -144px; }
+.ui-icon-notice { background-position: -32px -144px; }
+.ui-icon-help { background-position: -48px -144px; }
+.ui-icon-check { background-position: -64px -144px; }
+.ui-icon-bullet { background-position: -80px -144px; }
+.ui-icon-radio-off { background-position: -96px -144px; }
+.ui-icon-radio-on { background-position: -112px -144px; }
+.ui-icon-pin-w { background-position: -128px -144px; }
+.ui-icon-pin-s { background-position: -144px -144px; }
+.ui-icon-play { background-position: 0 -160px; }
+.ui-icon-pause { background-position: -16px -160px; }
+.ui-icon-seek-next { background-position: -32px -160px; }
+.ui-icon-seek-prev { background-position: -48px -160px; }
+.ui-icon-seek-end { background-position: -64px -160px; }
+.ui-icon-seek-start { background-position: -80px -160px; }
+/* ui-icon-seek-first is deprecated, use ui-icon-seek-start instead */
+.ui-icon-seek-first { background-position: -80px -160px; }
+.ui-icon-stop { background-position: -96px -160px; }
+.ui-icon-eject { background-position: -112px -160px; }
+.ui-icon-volume-off { background-position: -128px -160px; }
+.ui-icon-volume-on { background-position: -144px -160px; }
+.ui-icon-power { background-position: 0 -176px; }
+.ui-icon-signal-diag { background-position: -16px -176px; }
+.ui-icon-signal { background-position: -32px -176px; }
+.ui-icon-battery-0 { background-position: -48px -176px; }
+.ui-icon-battery-1 { background-position: -64px -176px; }
+.ui-icon-battery-2 { background-position: -80px -176px; }
+.ui-icon-battery-3 { background-position: -96px -176px; }
+.ui-icon-circle-plus { background-position: 0 -192px; }
+.ui-icon-circle-minus { background-position: -16px -192px; }
+.ui-icon-circle-close { background-position: -32px -192px; }
+.ui-icon-circle-triangle-e { background-position: -48px -192px; }
+.ui-icon-circle-triangle-s { background-position: -64px -192px; }
+.ui-icon-circle-triangle-w { background-position: -80px -192px; }
+.ui-icon-circle-triangle-n { background-position: -96px -192px; }
+.ui-icon-circle-arrow-e { background-position: -112px -192px; }
+.ui-icon-circle-arrow-s { background-position: -128px -192px; }
+.ui-icon-circle-arrow-w { background-position: -144px -192px; }
+.ui-icon-circle-arrow-n { background-position: -160px -192px; }
+.ui-icon-circle-zoomin { background-position: -176px -192px; }
+.ui-icon-circle-zoomout { background-position: -192px -192px; }
+.ui-icon-circle-check { background-position: -208px -192px; }
+.ui-icon-circlesmall-plus { background-position: 0 -208px; }
+.ui-icon-circlesmall-minus { background-position: -16px -208px; }
+.ui-icon-circlesmall-close { background-position: -32px -208px; }
+.ui-icon-squaresmall-plus { background-position: -48px -208px; }
+.ui-icon-squaresmall-minus { background-position: -64px -208px; }
+.ui-icon-squaresmall-close { background-position: -80px -208px; }
+.ui-icon-grip-dotted-vertical { background-position: 0 -224px; }
+.ui-icon-grip-dotted-horizontal { background-position: -16px -224px; }
+.ui-icon-grip-solid-vertical { background-position: -32px -224px; }
+.ui-icon-grip-solid-horizontal { background-position: -48px -224px; }
+.ui-icon-gripsmall-diagonal-se { background-position: -64px -224px; }
+.ui-icon-grip-diagonal-se { background-position: -80px -224px; }
+
+
+/* Misc visuals
+----------------------------------*/
+
+/* Corner radius */
+.ui-corner-tl { -moz-border-radius-topleft: 3px; -webkit-border-top-left-radius: 3px; border-top-left-radius: 3px; }
+.ui-corner-tr { -moz-border-radius-topright: 3px; -webkit-border-top-right-radius: 3px; border-top-right-radius: 3px; }
+.ui-corner-bl { -moz-border-radius-bottomleft: 3px; -webkit-border-bottom-left-radius: 3px; border-bottom-left-radius: 3px; }
+.ui-corner-br { -moz-border-radius-bottomright: 3px; -webkit-border-bottom-right-radius: 3px; border-bottom-right-radius: 3px; }
+.ui-corner-top { -moz-border-radius-topleft: 3px; -webkit-border-top-left-radius: 3px; border-top-left-radius: 3px; -moz-border-radius-topright: 3px; -webkit-border-top-right-radius: 3px; border-top-right-radius: 3px; }
+.ui-corner-bottom { -moz-border-radius-bottomleft: 3px; -webkit-border-bottom-left-radius: 3px; border-bottom-left-radius: 3px; -moz-border-radius-bottomright: 3px; -webkit-border-bottom-right-radius: 3px; border-bottom-right-radius: 3px; }
+.ui-corner-right { -moz-border-radius-topright: 3px; -webkit-border-top-right-radius: 3px; border-top-right-radius: 3px; -moz-border-radius-bottomright: 3px; -webkit-border-bottom-right-radius: 3px; border-bottom-right-radius: 3px; }
+.ui-corner-left { -moz-border-radius-topleft: 3px; -webkit-border-top-left-radius: 3px; border-top-left-radius: 3px; -moz-border-radius-bottomleft: 3px; -webkit-border-bottom-left-radius: 3px; border-bottom-left-radius: 3px; }
+.ui-corner-all { -moz-border-radius: 3px; -webkit-border-radius: 3px; border-radius: 3px; }
+
+/* Overlays */
+.ui-widget-overlay { background: #e6b900 url(images/ui-bg_flat_0_e6b900_40x100.png) 50% 50% repeat-x; opacity: .30;filter:Alpha(Opacity=30); }
+.ui-widget-shadow { margin: 6px 0 0 6px; padding: 0px; background: #e69700 url(images/ui-bg_flat_0_e69700_40x100.png) 50% 50% repeat-x; opacity: .20;filter:Alpha(Opacity=20); -moz-border-radius: 3px; -webkit-border-radius: 3px; border-radius: 3px; }/*
+ * jQuery UI Dialog @VERSION
+ *
+ * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Dialog#theming
+ */
+.ui-dialog { position: absolute; padding: .2em; width: 300px; overflow: hidden; }
+.ui-dialog .ui-dialog-titlebar { padding: .5em 1em .3em; position: relative; }
+.ui-dialog .ui-dialog-title { float: left; margin: .1em 16px .2em 0; }
+.ui-dialog .ui-dialog-titlebar-close { position: absolute; right: .3em; top: 50%; width: 19px; margin: -10px 0 0 0; padding: 1px; height: 18px; }
+.ui-dialog .ui-dialog-titlebar-close span { display: block; margin: 1px; }
+.ui-dialog .ui-dialog-titlebar-close:hover, .ui-dialog .ui-dialog-titlebar-close:focus { padding: 0; }
+.ui-dialog .ui-dialog-content { position: relative; border: 0; padding: .5em 1em; background: none; overflow: auto; zoom: 1; }
+.ui-dialog .ui-dialog-buttonpane { text-align: left; border-width: 1px 0 0 0; background-image: none; margin: .5em 0 0 0; padding: .3em 1em .5em .4em; }
+.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset { float: right; }
+.ui-dialog .ui-dialog-buttonpane button { margin: .5em .4em .5em 0; cursor: pointer; }
+.ui-dialog .ui-resizable-se { width: 14px; height: 14px; right: 3px; bottom: 3px; }
+.ui-draggable .ui-dialog-titlebar { cursor: move; }
diff --git a/h-source/admin/Public/Js/jquery/dialog/js/jquery-ui-1.8.4.custom.min.js b/h-source/admin/Public/Js/jquery/dialog/js/jquery-ui-1.8.4.custom.min.js
new file mode 100755
index 0000000..7469ef3
--- /dev/null
+++ b/h-source/admin/Public/Js/jquery/dialog/js/jquery-ui-1.8.4.custom.min.js
@@ -0,0 +1,87 @@
+/*!
+ * jQuery UI 1.8.4
+ *
+ * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI
+ */
+(function(c,j){function k(a){return!c(a).parents().andSelf().filter(function(){return c.curCSS(this,"visibility")==="hidden"||c.expr.filters.hidden(this)}).length}c.ui=c.ui||{};if(!c.ui.version){c.extend(c.ui,{version:"1.8.4",plugin:{add:function(a,b,d){a=c.ui[a].prototype;for(var e in d){a.plugins[e]=a.plugins[e]||[];a.plugins[e].push([b,d[e]])}},call:function(a,b,d){if((b=a.plugins[b])&&a.element[0].parentNode)for(var e=0;e<b.length;e++)a.options[b[e][0]]&&b[e][1].apply(a.element,d)}},contains:function(a,
+b){return document.compareDocumentPosition?a.compareDocumentPosition(b)&16:a!==b&&a.contains(b)},hasScroll:function(a,b){if(c(a).css("overflow")==="hidden")return false;b=b&&b==="left"?"scrollLeft":"scrollTop";var d=false;if(a[b]>0)return true;a[b]=1;d=a[b]>0;a[b]=0;return d},isOverAxis:function(a,b,d){return a>b&&a<b+d},isOver:function(a,b,d,e,h,i){return c.ui.isOverAxis(a,d,h)&&c.ui.isOverAxis(b,e,i)},keyCode:{ALT:18,BACKSPACE:8,CAPS_LOCK:20,COMMA:188,COMMAND:91,COMMAND_LEFT:91,COMMAND_RIGHT:93,
+CONTROL:17,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,INSERT:45,LEFT:37,MENU:93,NUMPAD_ADD:107,NUMPAD_DECIMAL:110,NUMPAD_DIVIDE:111,NUMPAD_ENTER:108,NUMPAD_MULTIPLY:106,NUMPAD_SUBTRACT:109,PAGE_DOWN:34,PAGE_UP:33,PERIOD:190,RIGHT:39,SHIFT:16,SPACE:32,TAB:9,UP:38,WINDOWS:91}});c.fn.extend({_focus:c.fn.focus,focus:function(a,b){return typeof a==="number"?this.each(function(){var d=this;setTimeout(function(){c(d).focus();b&&b.call(d)},a)}):this._focus.apply(this,arguments)},enableSelection:function(){return this.attr("unselectable",
+"off").css("MozUserSelect","")},disableSelection:function(){return this.attr("unselectable","on").css("MozUserSelect","none")},scrollParent:function(){var a;a=c.browser.msie&&/(static|relative)/.test(this.css("position"))||/absolute/.test(this.css("position"))?this.parents().filter(function(){return/(relative|absolute|fixed)/.test(c.curCSS(this,"position",1))&&/(auto|scroll)/.test(c.curCSS(this,"overflow",1)+c.curCSS(this,"overflow-y",1)+c.curCSS(this,"overflow-x",1))}).eq(0):this.parents().filter(function(){return/(auto|scroll)/.test(c.curCSS(this,
+"overflow",1)+c.curCSS(this,"overflow-y",1)+c.curCSS(this,"overflow-x",1))}).eq(0);return/fixed/.test(this.css("position"))||!a.length?c(document):a},zIndex:function(a){if(a!==j)return this.css("zIndex",a);if(this.length){a=c(this[0]);for(var b;a.length&&a[0]!==document;){b=a.css("position");if(b==="absolute"||b==="relative"||b==="fixed"){b=parseInt(a.css("zIndex"));if(!isNaN(b)&&b!=0)return b}a=a.parent()}}return 0}});c.each(["Width","Height"],function(a,b){function d(f,g,l,m){c.each(e,function(){g-=
+parseFloat(c.curCSS(f,"padding"+this,true))||0;if(l)g-=parseFloat(c.curCSS(f,"border"+this+"Width",true))||0;if(m)g-=parseFloat(c.curCSS(f,"margin"+this,true))||0});return g}var e=b==="Width"?["Left","Right"]:["Top","Bottom"],h=b.toLowerCase(),i={innerWidth:c.fn.innerWidth,innerHeight:c.fn.innerHeight,outerWidth:c.fn.outerWidth,outerHeight:c.fn.outerHeight};c.fn["inner"+b]=function(f){if(f===j)return i["inner"+b].call(this);return this.each(function(){c.style(this,h,d(this,f)+"px")})};c.fn["outer"+
+b]=function(f,g){if(typeof f!=="number")return i["outer"+b].call(this,f);return this.each(function(){c.style(this,h,d(this,f,true,g)+"px")})}});c.extend(c.expr[":"],{data:function(a,b,d){return!!c.data(a,d[3])},focusable:function(a){var b=a.nodeName.toLowerCase(),d=c.attr(a,"tabindex");if("area"===b){b=a.parentNode;d=b.name;if(!a.href||!d||b.nodeName.toLowerCase()!=="map")return false;a=c("img[usemap=#"+d+"]")[0];return!!a&&k(a)}return(/input|select|textarea|button|object/.test(b)?!a.disabled:"a"==
+b?a.href||!isNaN(d):!isNaN(d))&&k(a)},tabbable:function(a){var b=c.attr(a,"tabindex");return(isNaN(b)||b>=0)&&c(a).is(":focusable")}})}})(jQuery);
+;/*!
+ * jQuery UI Widget 1.8.4
+ *
+ * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Widget
+ */
+(function(b,j){var k=b.fn.remove;b.fn.remove=function(a,c){return this.each(function(){if(!c)if(!a||b.filter(a,[this]).length)b("*",this).add([this]).each(function(){b(this).triggerHandler("remove")});return k.call(b(this),a,c)})};b.widget=function(a,c,d){var e=a.split(".")[0],f;a=a.split(".")[1];f=e+"-"+a;if(!d){d=c;c=b.Widget}b.expr[":"][f]=function(h){return!!b.data(h,a)};b[e]=b[e]||{};b[e][a]=function(h,g){arguments.length&&this._createWidget(h,g)};c=new c;c.options=b.extend(true,{},c.options);
+b[e][a].prototype=b.extend(true,c,{namespace:e,widgetName:a,widgetEventPrefix:b[e][a].prototype.widgetEventPrefix||a,widgetBaseClass:f},d);b.widget.bridge(a,b[e][a])};b.widget.bridge=function(a,c){b.fn[a]=function(d){var e=typeof d==="string",f=Array.prototype.slice.call(arguments,1),h=this;d=!e&&f.length?b.extend.apply(null,[true,d].concat(f)):d;if(e&&d.substring(0,1)==="_")return h;e?this.each(function(){var g=b.data(this,a),i=g&&b.isFunction(g[d])?g[d].apply(g,f):g;if(i!==g&&i!==j){h=i;return false}}):
+this.each(function(){var g=b.data(this,a);if(g){d&&g.option(d);g._init()}else b.data(this,a,new c(d,this))});return h}};b.Widget=function(a,c){arguments.length&&this._createWidget(a,c)};b.Widget.prototype={widgetName:"widget",widgetEventPrefix:"",options:{disabled:false},_createWidget:function(a,c){b.data(c,this.widgetName,this);this.element=b(c);this.options=b.extend(true,{},this.options,b.metadata&&b.metadata.get(c)[this.widgetName],a);var d=this;this.element.bind("remove."+this.widgetName,function(){d.destroy()});
+this._create();this._init()},_create:function(){},_init:function(){},destroy:function(){this.element.unbind("."+this.widgetName).removeData(this.widgetName);this.widget().unbind("."+this.widgetName).removeAttr("aria-disabled").removeClass(this.widgetBaseClass+"-disabled ui-state-disabled")},widget:function(){return this.element},option:function(a,c){var d=a,e=this;if(arguments.length===0)return b.extend({},e.options);if(typeof a==="string"){if(c===j)return this.options[a];d={};d[a]=c}b.each(d,function(f,
+h){e._setOption(f,h)});return e},_setOption:function(a,c){this.options[a]=c;if(a==="disabled")this.widget()[c?"addClass":"removeClass"](this.widgetBaseClass+"-disabled ui-state-disabled").attr("aria-disabled",c);return this},enable:function(){return this._setOption("disabled",false)},disable:function(){return this._setOption("disabled",true)},_trigger:function(a,c,d){var e=this.options[a];c=b.Event(c);c.type=(a===this.widgetEventPrefix?a:this.widgetEventPrefix+a).toLowerCase();d=d||{};if(c.originalEvent){a=
+b.event.props.length;for(var f;a;){f=b.event.props[--a];c[f]=c.originalEvent[f]}}this.element.trigger(c,d);return!(b.isFunction(e)&&e.call(this.element[0],c,d)===false||c.isDefaultPrevented())}}})(jQuery);
+;/*
+ * jQuery UI Position 1.8.4
+ *
+ * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Position
+ */
+(function(c){c.ui=c.ui||{};var m=/left|center|right/,n=/top|center|bottom/,p=c.fn.position,q=c.fn.offset;c.fn.position=function(a){if(!a||!a.of)return p.apply(this,arguments);a=c.extend({},a);var b=c(a.of),d=(a.collision||"flip").split(" "),e=a.offset?a.offset.split(" "):[0,0],g,h,i;if(a.of.nodeType===9){g=b.width();h=b.height();i={top:0,left:0}}else if(a.of.scrollTo&&a.of.document){g=b.width();h=b.height();i={top:b.scrollTop(),left:b.scrollLeft()}}else if(a.of.preventDefault){a.at="left top";g=h=
+0;i={top:a.of.pageY,left:a.of.pageX}}else{g=b.outerWidth();h=b.outerHeight();i=b.offset()}c.each(["my","at"],function(){var f=(a[this]||"").split(" ");if(f.length===1)f=m.test(f[0])?f.concat(["center"]):n.test(f[0])?["center"].concat(f):["center","center"];f[0]=m.test(f[0])?f[0]:"center";f[1]=n.test(f[1])?f[1]:"center";a[this]=f});if(d.length===1)d[1]=d[0];e[0]=parseInt(e[0],10)||0;if(e.length===1)e[1]=e[0];e[1]=parseInt(e[1],10)||0;if(a.at[0]==="right")i.left+=g;else if(a.at[0]==="center")i.left+=
+g/2;if(a.at[1]==="bottom")i.top+=h;else if(a.at[1]==="center")i.top+=h/2;i.left+=e[0];i.top+=e[1];return this.each(function(){var f=c(this),k=f.outerWidth(),l=f.outerHeight(),j=c.extend({},i);if(a.my[0]==="right")j.left-=k;else if(a.my[0]==="center")j.left-=k/2;if(a.my[1]==="bottom")j.top-=l;else if(a.my[1]==="center")j.top-=l/2;j.left=parseInt(j.left);j.top=parseInt(j.top);c.each(["left","top"],function(o,r){c.ui.position[d[o]]&&c.ui.position[d[o]][r](j,{targetWidth:g,targetHeight:h,elemWidth:k,
+elemHeight:l,offset:e,my:a.my,at:a.at})});c.fn.bgiframe&&f.bgiframe();f.offset(c.extend(j,{using:a.using}))})};c.ui.position={fit:{left:function(a,b){var d=c(window);b=a.left+b.elemWidth-d.width()-d.scrollLeft();a.left=b>0?a.left-b:Math.max(0,a.left)},top:function(a,b){var d=c(window);b=a.top+b.elemHeight-d.height()-d.scrollTop();a.top=b>0?a.top-b:Math.max(0,a.top)}},flip:{left:function(a,b){if(b.at[0]!=="center"){var d=c(window);d=a.left+b.elemWidth-d.width()-d.scrollLeft();var e=b.my[0]==="left"?
+-b.elemWidth:b.my[0]==="right"?b.elemWidth:0,g=-2*b.offset[0];a.left+=a.left<0?e+b.targetWidth+g:d>0?e-b.targetWidth+g:0}},top:function(a,b){if(b.at[1]!=="center"){var d=c(window);d=a.top+b.elemHeight-d.height()-d.scrollTop();var e=b.my[1]==="top"?-b.elemHeight:b.my[1]==="bottom"?b.elemHeight:0,g=b.at[1]==="top"?b.targetHeight:-b.targetHeight,h=-2*b.offset[1];a.top+=a.top<0?e+b.targetHeight+h:d>0?e+g+h:0}}}};if(!c.offset.setOffset){c.offset.setOffset=function(a,b){if(/static/.test(c.curCSS(a,"position")))a.style.position=
+"relative";var d=c(a),e=d.offset(),g=parseInt(c.curCSS(a,"top",true),10)||0,h=parseInt(c.curCSS(a,"left",true),10)||0;e={top:b.top-e.top+g,left:b.left-e.left+h};"using"in b?b.using.call(a,e):d.css(e)};c.fn.offset=function(a){var b=this[0];if(!b||!b.ownerDocument)return null;if(a)return this.each(function(){c.offset.setOffset(this,a)});return q.call(this)}}})(jQuery);
+;/*
+ * jQuery UI Dialog 1.8.4
+ *
+ * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Dialog
+ *
+ * Depends:
+ * jquery.ui.core.js
+ * jquery.ui.widget.js
+ * jquery.ui.button.js
+ * jquery.ui.draggable.js
+ * jquery.ui.mouse.js
+ * jquery.ui.position.js
+ * jquery.ui.resizable.js
+ */
+(function(c,j){c.widget("ui.dialog",{options:{autoOpen:true,buttons:{},closeOnEscape:true,closeText:"close",dialogClass:"",draggable:true,hide:null,height:"auto",maxHeight:false,maxWidth:false,minHeight:150,minWidth:150,modal:false,position:{my:"center",at:"center",of:window,collision:"fit",using:function(a){var b=c(this).css(a).offset().top;b<0&&c(this).css("top",a.top-b)}},resizable:true,show:null,stack:true,title:"",width:300,zIndex:1E3},_create:function(){this.originalTitle=this.element.attr("title");
+if(typeof this.originalTitle!=="string")this.originalTitle="";var a=this,b=a.options,d=b.title||a.originalTitle||"&#160;",f=c.ui.dialog.getTitleId(a.element),g=(a.uiDialog=c("<div></div>")).appendTo(document.body).hide().addClass("ui-dialog ui-widget ui-widget-content ui-corner-all "+b.dialogClass).css({zIndex:b.zIndex}).attr("tabIndex",-1).css("outline",0).keydown(function(i){if(b.closeOnEscape&&i.keyCode&&i.keyCode===c.ui.keyCode.ESCAPE){a.close(i);i.preventDefault()}}).attr({role:"dialog","aria-labelledby":f}).mousedown(function(i){a.moveToTop(false,
+i)});a.element.show().removeAttr("title").addClass("ui-dialog-content ui-widget-content").appendTo(g);var e=(a.uiDialogTitlebar=c("<div></div>")).addClass("ui-dialog-titlebar ui-widget-header ui-corner-all ui-helper-clearfix").prependTo(g),h=c('<a href="#"></a>').addClass("ui-dialog-titlebar-close ui-corner-all").attr("role","button").hover(function(){h.addClass("ui-state-hover")},function(){h.removeClass("ui-state-hover")}).focus(function(){h.addClass("ui-state-focus")}).blur(function(){h.removeClass("ui-state-focus")}).click(function(i){a.close(i);
+return false}).appendTo(e);(a.uiDialogTitlebarCloseText=c("<span></span>")).addClass("ui-icon ui-icon-closethick").text(b.closeText).appendTo(h);c("<span></span>").addClass("ui-dialog-title").attr("id",f).html(d).prependTo(e);if(c.isFunction(b.beforeclose)&&!c.isFunction(b.beforeClose))b.beforeClose=b.beforeclose;e.find("*").add(e).disableSelection();b.draggable&&c.fn.draggable&&a._makeDraggable();b.resizable&&c.fn.resizable&&a._makeResizable();a._createButtons(b.buttons);a._isOpen=false;c.fn.bgiframe&&
+g.bgiframe()},_init:function(){this.options.autoOpen&&this.open()},destroy:function(){var a=this;a.overlay&&a.overlay.destroy();a.uiDialog.hide();a.element.unbind(".dialog").removeData("dialog").removeClass("ui-dialog-content ui-widget-content").hide().appendTo("body");a.uiDialog.remove();a.originalTitle&&a.element.attr("title",a.originalTitle);return a},widget:function(){return this.uiDialog},close:function(a){var b=this,d;if(false!==b._trigger("beforeClose",a)){b.overlay&&b.overlay.destroy();b.uiDialog.unbind("keypress.ui-dialog");
+b._isOpen=false;if(b.options.hide)b.uiDialog.hide(b.options.hide,function(){b._trigger("close",a)});else{b.uiDialog.hide();b._trigger("close",a)}c.ui.dialog.overlay.resize();if(b.options.modal){d=0;c(".ui-dialog").each(function(){if(this!==b.uiDialog[0])d=Math.max(d,c(this).css("z-index"))});c.ui.dialog.maxZ=d}return b}},isOpen:function(){return this._isOpen},moveToTop:function(a,b){var d=this,f=d.options;if(f.modal&&!a||!f.stack&&!f.modal)return d._trigger("focus",b);if(f.zIndex>c.ui.dialog.maxZ)c.ui.dialog.maxZ=
+f.zIndex;if(d.overlay){c.ui.dialog.maxZ+=1;d.overlay.$el.css("z-index",c.ui.dialog.overlay.maxZ=c.ui.dialog.maxZ)}a={scrollTop:d.element.attr("scrollTop"),scrollLeft:d.element.attr("scrollLeft")};c.ui.dialog.maxZ+=1;d.uiDialog.css("z-index",c.ui.dialog.maxZ);d.element.attr(a);d._trigger("focus",b);return d},open:function(){if(!this._isOpen){var a=this,b=a.options,d=a.uiDialog;a.overlay=b.modal?new c.ui.dialog.overlay(a):null;d.next().length&&d.appendTo("body");a._size();a._position(b.position);d.show(b.show);
+a.moveToTop(true);b.modal&&d.bind("keypress.ui-dialog",function(f){if(f.keyCode===c.ui.keyCode.TAB){var g=c(":tabbable",this),e=g.filter(":first");g=g.filter(":last");if(f.target===g[0]&&!f.shiftKey){e.focus(1);return false}else if(f.target===e[0]&&f.shiftKey){g.focus(1);return false}}});c(a.element.find(":tabbable").get().concat(d.find(".ui-dialog-buttonpane :tabbable").get().concat(d.get()))).eq(0).focus();a._trigger("open");a._isOpen=true;return a}},_createButtons:function(a){var b=this,d=false,
+f=c("<div></div>").addClass("ui-dialog-buttonpane ui-widget-content ui-helper-clearfix"),g=c("<div></div>").addClass("ui-dialog-buttonset").appendTo(f);b.uiDialog.find(".ui-dialog-buttonpane").remove();typeof a==="object"&&a!==null&&c.each(a,function(){return!(d=true)});if(d){c.each(a,function(e,h){e=c('<button type="button"></button>').text(e).click(function(){h.apply(b.element[0],arguments)}).appendTo(g);c.fn.button&&e.button()});f.appendTo(b.uiDialog)}},_makeDraggable:function(){function a(e){return{position:e.position,
+offset:e.offset}}var b=this,d=b.options,f=c(document),g;b.uiDialog.draggable({cancel:".ui-dialog-content, .ui-dialog-titlebar-close",handle:".ui-dialog-titlebar",containment:"document",start:function(e,h){g=d.height==="auto"?"auto":c(this).height();c(this).height(c(this).height()).addClass("ui-dialog-dragging");b._trigger("dragStart",e,a(h))},drag:function(e,h){b._trigger("drag",e,a(h))},stop:function(e,h){d.position=[h.position.left-f.scrollLeft(),h.position.top-f.scrollTop()];c(this).removeClass("ui-dialog-dragging").height(g);
+b._trigger("dragStop",e,a(h));c.ui.dialog.overlay.resize()}})},_makeResizable:function(a){function b(e){return{originalPosition:e.originalPosition,originalSize:e.originalSize,position:e.position,size:e.size}}a=a===j?this.options.resizable:a;var d=this,f=d.options,g=d.uiDialog.css("position");a=typeof a==="string"?a:"n,e,s,w,se,sw,ne,nw";d.uiDialog.resizable({cancel:".ui-dialog-content",containment:"document",alsoResize:d.element,maxWidth:f.maxWidth,maxHeight:f.maxHeight,minWidth:f.minWidth,minHeight:d._minHeight(),
+handles:a,start:function(e,h){c(this).addClass("ui-dialog-resizing");d._trigger("resizeStart",e,b(h))},resize:function(e,h){d._trigger("resize",e,b(h))},stop:function(e,h){c(this).removeClass("ui-dialog-resizing");f.height=c(this).height();f.width=c(this).width();d._trigger("resizeStop",e,b(h));c.ui.dialog.overlay.resize()}}).css("position",g).find(".ui-resizable-se").addClass("ui-icon ui-icon-grip-diagonal-se")},_minHeight:function(){var a=this.options;return a.height==="auto"?a.minHeight:Math.min(a.minHeight,
+a.height)},_position:function(a){var b=[],d=[0,0],f;if(a){if(typeof a==="string"||typeof a==="object"&&"0"in a){b=a.split?a.split(" "):[a[0],a[1]];if(b.length===1)b[1]=b[0];c.each(["left","top"],function(g,e){if(+b[g]===b[g]){d[g]=b[g];b[g]=e}});a={my:b.join(" "),at:b.join(" "),offset:d.join(" ")}}a=c.extend({},c.ui.dialog.prototype.options.position,a)}else a=c.ui.dialog.prototype.options.position;(f=this.uiDialog.is(":visible"))||this.uiDialog.show();this.uiDialog.css({top:0,left:0}).position(a);
+f||this.uiDialog.hide()},_setOption:function(a,b){var d=this,f=d.uiDialog,g=f.is(":data(resizable)"),e=false;switch(a){case "beforeclose":a="beforeClose";break;case "buttons":d._createButtons(b);e=true;break;case "closeText":d.uiDialogTitlebarCloseText.text(""+b);break;case "dialogClass":f.removeClass(d.options.dialogClass).addClass("ui-dialog ui-widget ui-widget-content ui-corner-all "+b);break;case "disabled":b?f.addClass("ui-dialog-disabled"):f.removeClass("ui-dialog-disabled");break;case "draggable":b?
+d._makeDraggable():f.draggable("destroy");break;case "height":e=true;break;case "maxHeight":g&&f.resizable("option","maxHeight",b);e=true;break;case "maxWidth":g&&f.resizable("option","maxWidth",b);e=true;break;case "minHeight":g&&f.resizable("option","minHeight",b);e=true;break;case "minWidth":g&&f.resizable("option","minWidth",b);e=true;break;case "position":d._position(b);break;case "resizable":g&&!b&&f.resizable("destroy");g&&typeof b==="string"&&f.resizable("option","handles",b);!g&&b!==false&&
+d._makeResizable(b);break;case "title":c(".ui-dialog-title",d.uiDialogTitlebar).html(""+(b||"&#160;"));break;case "width":e=true;break}c.Widget.prototype._setOption.apply(d,arguments);e&&d._size()},_size:function(){var a=this.options,b;this.element.css({width:"auto",minHeight:0,height:0});if(a.minWidth>a.width)a.width=a.minWidth;b=this.uiDialog.css({height:"auto",width:a.width}).height();this.element.css(a.height==="auto"?{minHeight:Math.max(a.minHeight-b,0),height:"auto"}:{minHeight:0,height:Math.max(a.height-
+b,0)}).show();this.uiDialog.is(":data(resizable)")&&this.uiDialog.resizable("option","minHeight",this._minHeight())}});c.extend(c.ui.dialog,{version:"1.8.4",uuid:0,maxZ:0,getTitleId:function(a){a=a.attr("id");if(!a){this.uuid+=1;a=this.uuid}return"ui-dialog-title-"+a},overlay:function(a){this.$el=c.ui.dialog.overlay.create(a)}});c.extend(c.ui.dialog.overlay,{instances:[],oldInstances:[],maxZ:0,events:c.map("focus,mousedown,mouseup,keydown,keypress,click".split(","),function(a){return a+".dialog-overlay"}).join(" "),
+create:function(a){if(this.instances.length===0){setTimeout(function(){c.ui.dialog.overlay.instances.length&&c(document).bind(c.ui.dialog.overlay.events,function(d){return c(d.target).zIndex()>=c.ui.dialog.overlay.maxZ})},1);c(document).bind("keydown.dialog-overlay",function(d){if(a.options.closeOnEscape&&d.keyCode&&d.keyCode===c.ui.keyCode.ESCAPE){a.close(d);d.preventDefault()}});c(window).bind("resize.dialog-overlay",c.ui.dialog.overlay.resize)}var b=(this.oldInstances.pop()||c("<div></div>").addClass("ui-widget-overlay")).appendTo(document.body).css({width:this.width(),
+height:this.height()});c.fn.bgiframe&&b.bgiframe();this.instances.push(b);return b},destroy:function(a){this.oldInstances.push(this.instances.splice(c.inArray(a,this.instances),1)[0]);this.instances.length===0&&c([document,window]).unbind(".dialog-overlay");a.remove();var b=0;c.each(this.instances,function(){b=Math.max(b,this.css("z-index"))});this.maxZ=b},height:function(){var a,b;if(c.browser.msie&&c.browser.version<7){a=Math.max(document.documentElement.scrollHeight,document.body.scrollHeight);
+b=Math.max(document.documentElement.offsetHeight,document.body.offsetHeight);return a<b?c(window).height()+"px":a+"px"}else return c(document).height()+"px"},width:function(){var a,b;if(c.browser.msie&&c.browser.version<7){a=Math.max(document.documentElement.scrollWidth,document.body.scrollWidth);b=Math.max(document.documentElement.offsetWidth,document.body.offsetWidth);return a<b?c(window).width()+"px":a+"px"}else return c(document).width()+"px"},resize:function(){var a=c([]);c.each(c.ui.dialog.overlay.instances,
+function(){a=a.add(this)});a.css({width:0,height:0}).css({width:c.ui.dialog.overlay.width(),height:c.ui.dialog.overlay.height()})}});c.extend(c.ui.dialog.overlay.prototype,{destroy:function(){c.ui.dialog.overlay.destroy(this.$el)}})})(jQuery);
+; \ No newline at end of file
diff --git a/h-source/admin/Public/Js/jquery/jquery-1.4.2.min.js b/h-source/admin/Public/Js/jquery/jquery-1.4.2.min.js
new file mode 100644
index 0000000..7c24308
--- /dev/null
+++ b/h-source/admin/Public/Js/jquery/jquery-1.4.2.min.js
@@ -0,0 +1,154 @@
+/*!
+ * jQuery JavaScript Library v1.4.2
+ * http://jquery.com/
+ *
+ * Copyright 2010, John Resig
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * Includes Sizzle.js
+ * http://sizzlejs.com/
+ * Copyright 2010, The Dojo Foundation
+ * Released under the MIT, BSD, and GPL Licenses.
+ *
+ * Date: Sat Feb 13 22:33:48 2010 -0500
+ */
+(function(A,w){function ma(){if(!c.isReady){try{s.documentElement.doScroll("left")}catch(a){setTimeout(ma,1);return}c.ready()}}function Qa(a,b){b.src?c.ajax({url:b.src,async:false,dataType:"script"}):c.globalEval(b.text||b.textContent||b.innerHTML||"");b.parentNode&&b.parentNode.removeChild(b)}function X(a,b,d,f,e,j){var i=a.length;if(typeof b==="object"){for(var o in b)X(a,o,b[o],f,e,d);return a}if(d!==w){f=!j&&f&&c.isFunction(d);for(o=0;o<i;o++)e(a[o],b,f?d.call(a[o],o,e(a[o],b)):d,j);return a}return i?
+e(a[0],b):w}function J(){return(new Date).getTime()}function Y(){return false}function Z(){return true}function na(a,b,d){d[0].type=a;return c.event.handle.apply(b,d)}function oa(a){var b,d=[],f=[],e=arguments,j,i,o,k,n,r;i=c.data(this,"events");if(!(a.liveFired===this||!i||!i.live||a.button&&a.type==="click")){a.liveFired=this;var u=i.live.slice(0);for(k=0;k<u.length;k++){i=u[k];i.origType.replace(O,"")===a.type?f.push(i.selector):u.splice(k--,1)}j=c(a.target).closest(f,a.currentTarget);n=0;for(r=
+j.length;n<r;n++)for(k=0;k<u.length;k++){i=u[k];if(j[n].selector===i.selector){o=j[n].elem;f=null;if(i.preType==="mouseenter"||i.preType==="mouseleave")f=c(a.relatedTarget).closest(i.selector)[0];if(!f||f!==o)d.push({elem:o,handleObj:i})}}n=0;for(r=d.length;n<r;n++){j=d[n];a.currentTarget=j.elem;a.data=j.handleObj.data;a.handleObj=j.handleObj;if(j.handleObj.origHandler.apply(j.elem,e)===false){b=false;break}}return b}}function pa(a,b){return"live."+(a&&a!=="*"?a+".":"")+b.replace(/\./g,"`").replace(/ /g,
+"&")}function qa(a){return!a||!a.parentNode||a.parentNode.nodeType===11}function ra(a,b){var d=0;b.each(function(){if(this.nodeName===(a[d]&&a[d].nodeName)){var f=c.data(a[d++]),e=c.data(this,f);if(f=f&&f.events){delete e.handle;e.events={};for(var j in f)for(var i in f[j])c.event.add(this,j,f[j][i],f[j][i].data)}}})}function sa(a,b,d){var f,e,j;b=b&&b[0]?b[0].ownerDocument||b[0]:s;if(a.length===1&&typeof a[0]==="string"&&a[0].length<512&&b===s&&!ta.test(a[0])&&(c.support.checkClone||!ua.test(a[0]))){e=
+true;if(j=c.fragments[a[0]])if(j!==1)f=j}if(!f){f=b.createDocumentFragment();c.clean(a,b,f,d)}if(e)c.fragments[a[0]]=j?f:1;return{fragment:f,cacheable:e}}function K(a,b){var d={};c.each(va.concat.apply([],va.slice(0,b)),function(){d[this]=a});return d}function wa(a){return"scrollTo"in a&&a.document?a:a.nodeType===9?a.defaultView||a.parentWindow:false}var c=function(a,b){return new c.fn.init(a,b)},Ra=A.jQuery,Sa=A.$,s=A.document,T,Ta=/^[^<]*(<[\w\W]+>)[^>]*$|^#([\w-]+)$/,Ua=/^.[^:#\[\.,]*$/,Va=/\S/,
+Wa=/^(\s|\u00A0)+|(\s|\u00A0)+$/g,Xa=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,P=navigator.userAgent,xa=false,Q=[],L,$=Object.prototype.toString,aa=Object.prototype.hasOwnProperty,ba=Array.prototype.push,R=Array.prototype.slice,ya=Array.prototype.indexOf;c.fn=c.prototype={init:function(a,b){var d,f;if(!a)return this;if(a.nodeType){this.context=this[0]=a;this.length=1;return this}if(a==="body"&&!b){this.context=s;this[0]=s.body;this.selector="body";this.length=1;return this}if(typeof a==="string")if((d=Ta.exec(a))&&
+(d[1]||!b))if(d[1]){f=b?b.ownerDocument||b:s;if(a=Xa.exec(a))if(c.isPlainObject(b)){a=[s.createElement(a[1])];c.fn.attr.call(a,b,true)}else a=[f.createElement(a[1])];else{a=sa([d[1]],[f]);a=(a.cacheable?a.fragment.cloneNode(true):a.fragment).childNodes}return c.merge(this,a)}else{if(b=s.getElementById(d[2])){if(b.id!==d[2])return T.find(a);this.length=1;this[0]=b}this.context=s;this.selector=a;return this}else if(!b&&/^\w+$/.test(a)){this.selector=a;this.context=s;a=s.getElementsByTagName(a);return c.merge(this,
+a)}else return!b||b.jquery?(b||T).find(a):c(b).find(a);else if(c.isFunction(a))return T.ready(a);if(a.selector!==w){this.selector=a.selector;this.context=a.context}return c.makeArray(a,this)},selector:"",jquery:"1.4.2",length:0,size:function(){return this.length},toArray:function(){return R.call(this,0)},get:function(a){return a==null?this.toArray():a<0?this.slice(a)[0]:this[a]},pushStack:function(a,b,d){var f=c();c.isArray(a)?ba.apply(f,a):c.merge(f,a);f.prevObject=this;f.context=this.context;if(b===
+"find")f.selector=this.selector+(this.selector?" ":"")+d;else if(b)f.selector=this.selector+"."+b+"("+d+")";return f},each:function(a,b){return c.each(this,a,b)},ready:function(a){c.bindReady();if(c.isReady)a.call(s,c);else Q&&Q.push(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(R.apply(this,arguments),"slice",R.call(arguments).join(","))},map:function(a){return this.pushStack(c.map(this,
+function(b,d){return a.call(b,d,b)}))},end:function(){return this.prevObject||c(null)},push:ba,sort:[].sort,splice:[].splice};c.fn.init.prototype=c.fn;c.extend=c.fn.extend=function(){var a=arguments[0]||{},b=1,d=arguments.length,f=false,e,j,i,o;if(typeof a==="boolean"){f=a;a=arguments[1]||{};b=2}if(typeof a!=="object"&&!c.isFunction(a))a={};if(d===b){a=this;--b}for(;b<d;b++)if((e=arguments[b])!=null)for(j in e){i=a[j];o=e[j];if(a!==o)if(f&&o&&(c.isPlainObject(o)||c.isArray(o))){i=i&&(c.isPlainObject(i)||
+c.isArray(i))?i:c.isArray(o)?[]:{};a[j]=c.extend(f,i,o)}else if(o!==w)a[j]=o}return a};c.extend({noConflict:function(a){A.$=Sa;if(a)A.jQuery=Ra;return c},isReady:false,ready:function(){if(!c.isReady){if(!s.body)return setTimeout(c.ready,13);c.isReady=true;if(Q){for(var a,b=0;a=Q[b++];)a.call(s,c);Q=null}c.fn.triggerHandler&&c(s).triggerHandler("ready")}},bindReady:function(){if(!xa){xa=true;if(s.readyState==="complete")return c.ready();if(s.addEventListener){s.addEventListener("DOMContentLoaded",
+L,false);A.addEventListener("load",c.ready,false)}else if(s.attachEvent){s.attachEvent("onreadystatechange",L);A.attachEvent("onload",c.ready);var a=false;try{a=A.frameElement==null}catch(b){}s.documentElement.doScroll&&a&&ma()}}},isFunction:function(a){return $.call(a)==="[object Function]"},isArray:function(a){return $.call(a)==="[object Array]"},isPlainObject:function(a){if(!a||$.call(a)!=="[object Object]"||a.nodeType||a.setInterval)return false;if(a.constructor&&!aa.call(a,"constructor")&&!aa.call(a.constructor.prototype,
+"isPrototypeOf"))return false;var b;for(b in a);return b===w||aa.call(a,b)},isEmptyObject:function(a){for(var b in a)return false;return true},error:function(a){throw a;},parseJSON:function(a){if(typeof a!=="string"||!a)return null;a=c.trim(a);if(/^[\],:{}\s]*$/.test(a.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,"@").replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,"]").replace(/(?:^|:|,)(?:\s*\[)+/g,"")))return A.JSON&&A.JSON.parse?A.JSON.parse(a):(new Function("return "+
+a))();else c.error("Invalid JSON: "+a)},noop:function(){},globalEval:function(a){if(a&&Va.test(a)){var b=s.getElementsByTagName("head")[0]||s.documentElement,d=s.createElement("script");d.type="text/javascript";if(c.support.scriptEval)d.appendChild(s.createTextNode(a));else d.text=a;b.insertBefore(d,b.firstChild);b.removeChild(d)}},nodeName:function(a,b){return a.nodeName&&a.nodeName.toUpperCase()===b.toUpperCase()},each:function(a,b,d){var f,e=0,j=a.length,i=j===w||c.isFunction(a);if(d)if(i)for(f in a){if(b.apply(a[f],
+d)===false)break}else for(;e<j;){if(b.apply(a[e++],d)===false)break}else if(i)for(f in a){if(b.call(a[f],f,a[f])===false)break}else for(d=a[0];e<j&&b.call(d,e,d)!==false;d=a[++e]);return a},trim:function(a){return(a||"").replace(Wa,"")},makeArray:function(a,b){b=b||[];if(a!=null)a.length==null||typeof a==="string"||c.isFunction(a)||typeof a!=="function"&&a.setInterval?ba.call(b,a):c.merge(b,a);return b},inArray:function(a,b){if(b.indexOf)return b.indexOf(a);for(var d=0,f=b.length;d<f;d++)if(b[d]===
+a)return d;return-1},merge:function(a,b){var d=a.length,f=0;if(typeof b.length==="number")for(var e=b.length;f<e;f++)a[d++]=b[f];else for(;b[f]!==w;)a[d++]=b[f++];a.length=d;return a},grep:function(a,b,d){for(var f=[],e=0,j=a.length;e<j;e++)!d!==!b(a[e],e)&&f.push(a[e]);return f},map:function(a,b,d){for(var f=[],e,j=0,i=a.length;j<i;j++){e=b(a[j],j,d);if(e!=null)f[f.length]=e}return f.concat.apply([],f)},guid:1,proxy:function(a,b,d){if(arguments.length===2)if(typeof b==="string"){d=a;a=d[b];b=w}else if(b&&
+!c.isFunction(b)){d=b;b=w}if(!b&&a)b=function(){return a.apply(d||this,arguments)};if(a)b.guid=a.guid=a.guid||b.guid||c.guid++;return b},uaMatch:function(a){a=a.toLowerCase();a=/(webkit)[ \/]([\w.]+)/.exec(a)||/(opera)(?:.*version)?[ \/]([\w.]+)/.exec(a)||/(msie) ([\w.]+)/.exec(a)||!/compatible/.test(a)&&/(mozilla)(?:.*? rv:([\w.]+))?/.exec(a)||[];return{browser:a[1]||"",version:a[2]||"0"}},browser:{}});P=c.uaMatch(P);if(P.browser){c.browser[P.browser]=true;c.browser.version=P.version}if(c.browser.webkit)c.browser.safari=
+true;if(ya)c.inArray=function(a,b){return ya.call(b,a)};T=c(s);if(s.addEventListener)L=function(){s.removeEventListener("DOMContentLoaded",L,false);c.ready()};else if(s.attachEvent)L=function(){if(s.readyState==="complete"){s.detachEvent("onreadystatechange",L);c.ready()}};(function(){c.support={};var a=s.documentElement,b=s.createElement("script"),d=s.createElement("div"),f="script"+J();d.style.display="none";d.innerHTML=" <link/><table></table><a href='/a' style='color:red;float:left;opacity:.55;'>a</a><input type='checkbox'/>";
+var e=d.getElementsByTagName("*"),j=d.getElementsByTagName("a")[0];if(!(!e||!e.length||!j)){c.support={leadingWhitespace:d.firstChild.nodeType===3,tbody:!d.getElementsByTagName("tbody").length,htmlSerialize:!!d.getElementsByTagName("link").length,style:/red/.test(j.getAttribute("style")),hrefNormalized:j.getAttribute("href")==="/a",opacity:/^0.55$/.test(j.style.opacity),cssFloat:!!j.style.cssFloat,checkOn:d.getElementsByTagName("input")[0].value==="on",optSelected:s.createElement("select").appendChild(s.createElement("option")).selected,
+parentNode:d.removeChild(d.appendChild(s.createElement("div"))).parentNode===null,deleteExpando:true,checkClone:false,scriptEval:false,noCloneEvent:true,boxModel:null};b.type="text/javascript";try{b.appendChild(s.createTextNode("window."+f+"=1;"))}catch(i){}a.insertBefore(b,a.firstChild);if(A[f]){c.support.scriptEval=true;delete A[f]}try{delete b.test}catch(o){c.support.deleteExpando=false}a.removeChild(b);if(d.attachEvent&&d.fireEvent){d.attachEvent("onclick",function k(){c.support.noCloneEvent=
+false;d.detachEvent("onclick",k)});d.cloneNode(true).fireEvent("onclick")}d=s.createElement("div");d.innerHTML="<input type='radio' name='radiotest' checked='checked'/>";a=s.createDocumentFragment();a.appendChild(d.firstChild);c.support.checkClone=a.cloneNode(true).cloneNode(true).lastChild.checked;c(function(){var k=s.createElement("div");k.style.width=k.style.paddingLeft="1px";s.body.appendChild(k);c.boxModel=c.support.boxModel=k.offsetWidth===2;s.body.removeChild(k).style.display="none"});a=function(k){var n=
+s.createElement("div");k="on"+k;var r=k in n;if(!r){n.setAttribute(k,"return;");r=typeof n[k]==="function"}return r};c.support.submitBubbles=a("submit");c.support.changeBubbles=a("change");a=b=d=e=j=null}})();c.props={"for":"htmlFor","class":"className",readonly:"readOnly",maxlength:"maxLength",cellspacing:"cellSpacing",rowspan:"rowSpan",colspan:"colSpan",tabindex:"tabIndex",usemap:"useMap",frameborder:"frameBorder"};var G="jQuery"+J(),Ya=0,za={};c.extend({cache:{},expando:G,noData:{embed:true,object:true,
+applet:true},data:function(a,b,d){if(!(a.nodeName&&c.noData[a.nodeName.toLowerCase()])){a=a==A?za:a;var f=a[G],e=c.cache;if(!f&&typeof b==="string"&&d===w)return null;f||(f=++Ya);if(typeof b==="object"){a[G]=f;e[f]=c.extend(true,{},b)}else if(!e[f]){a[G]=f;e[f]={}}a=e[f];if(d!==w)a[b]=d;return typeof b==="string"?a[b]:a}},removeData:function(a,b){if(!(a.nodeName&&c.noData[a.nodeName.toLowerCase()])){a=a==A?za:a;var d=a[G],f=c.cache,e=f[d];if(b){if(e){delete e[b];c.isEmptyObject(e)&&c.removeData(a)}}else{if(c.support.deleteExpando)delete a[c.expando];
+else a.removeAttribute&&a.removeAttribute(c.expando);delete f[d]}}}});c.fn.extend({data:function(a,b){if(typeof a==="undefined"&&this.length)return c.data(this[0]);else if(typeof a==="object")return this.each(function(){c.data(this,a)});var d=a.split(".");d[1]=d[1]?"."+d[1]:"";if(b===w){var f=this.triggerHandler("getData"+d[1]+"!",[d[0]]);if(f===w&&this.length)f=c.data(this[0],a);return f===w&&d[1]?this.data(d[0]):f}else return this.trigger("setData"+d[1]+"!",[d[0],b]).each(function(){c.data(this,
+a,b)})},removeData:function(a){return this.each(function(){c.removeData(this,a)})}});c.extend({queue:function(a,b,d){if(a){b=(b||"fx")+"queue";var f=c.data(a,b);if(!d)return f||[];if(!f||c.isArray(d))f=c.data(a,b,c.makeArray(d));else f.push(d);return f}},dequeue:function(a,b){b=b||"fx";var d=c.queue(a,b),f=d.shift();if(f==="inprogress")f=d.shift();if(f){b==="fx"&&d.unshift("inprogress");f.call(a,function(){c.dequeue(a,b)})}}});c.fn.extend({queue:function(a,b){if(typeof a!=="string"){b=a;a="fx"}if(b===
+w)return c.queue(this[0],a);return this.each(function(){var d=c.queue(this,a,b);a==="fx"&&d[0]!=="inprogress"&&c.dequeue(this,a)})},dequeue:function(a){return this.each(function(){c.dequeue(this,a)})},delay:function(a,b){a=c.fx?c.fx.speeds[a]||a:a;b=b||"fx";return this.queue(b,function(){var d=this;setTimeout(function(){c.dequeue(d,b)},a)})},clearQueue:function(a){return this.queue(a||"fx",[])}});var Aa=/[\n\t]/g,ca=/\s+/,Za=/\r/g,$a=/href|src|style/,ab=/(button|input)/i,bb=/(button|input|object|select|textarea)/i,
+cb=/^(a|area)$/i,Ba=/radio|checkbox/;c.fn.extend({attr:function(a,b){return X(this,a,b,true,c.attr)},removeAttr:function(a){return this.each(function(){c.attr(this,a,"");this.nodeType===1&&this.removeAttribute(a)})},addClass:function(a){if(c.isFunction(a))return this.each(function(n){var r=c(this);r.addClass(a.call(this,n,r.attr("class")))});if(a&&typeof a==="string")for(var b=(a||"").split(ca),d=0,f=this.length;d<f;d++){var e=this[d];if(e.nodeType===1)if(e.className){for(var j=" "+e.className+" ",
+i=e.className,o=0,k=b.length;o<k;o++)if(j.indexOf(" "+b[o]+" ")<0)i+=" "+b[o];e.className=c.trim(i)}else e.className=a}return this},removeClass:function(a){if(c.isFunction(a))return this.each(function(k){var n=c(this);n.removeClass(a.call(this,k,n.attr("class")))});if(a&&typeof a==="string"||a===w)for(var b=(a||"").split(ca),d=0,f=this.length;d<f;d++){var e=this[d];if(e.nodeType===1&&e.className)if(a){for(var j=(" "+e.className+" ").replace(Aa," "),i=0,o=b.length;i<o;i++)j=j.replace(" "+b[i]+" ",
+" ");e.className=c.trim(j)}else e.className=""}return this},toggleClass:function(a,b){var d=typeof a,f=typeof b==="boolean";if(c.isFunction(a))return this.each(function(e){var j=c(this);j.toggleClass(a.call(this,e,j.attr("class"),b),b)});return this.each(function(){if(d==="string")for(var e,j=0,i=c(this),o=b,k=a.split(ca);e=k[j++];){o=f?o:!i.hasClass(e);i[o?"addClass":"removeClass"](e)}else if(d==="undefined"||d==="boolean"){this.className&&c.data(this,"__className__",this.className);this.className=
+this.className||a===false?"":c.data(this,"__className__")||""}})},hasClass:function(a){a=" "+a+" ";for(var b=0,d=this.length;b<d;b++)if((" "+this[b].className+" ").replace(Aa," ").indexOf(a)>-1)return true;return false},val:function(a){if(a===w){var b=this[0];if(b){if(c.nodeName(b,"option"))return(b.attributes.value||{}).specified?b.value:b.text;if(c.nodeName(b,"select")){var d=b.selectedIndex,f=[],e=b.options;b=b.type==="select-one";if(d<0)return null;var j=b?d:0;for(d=b?d+1:e.length;j<d;j++){var i=
+e[j];if(i.selected){a=c(i).val();if(b)return a;f.push(a)}}return f}if(Ba.test(b.type)&&!c.support.checkOn)return b.getAttribute("value")===null?"on":b.value;return(b.value||"").replace(Za,"")}return w}var o=c.isFunction(a);return this.each(function(k){var n=c(this),r=a;if(this.nodeType===1){if(o)r=a.call(this,k,n.val());if(typeof r==="number")r+="";if(c.isArray(r)&&Ba.test(this.type))this.checked=c.inArray(n.val(),r)>=0;else if(c.nodeName(this,"select")){var u=c.makeArray(r);c("option",this).each(function(){this.selected=
+c.inArray(c(this).val(),u)>=0});if(!u.length)this.selectedIndex=-1}else this.value=r}})}});c.extend({attrFn:{val:true,css:true,html:true,text:true,data:true,width:true,height:true,offset:true},attr:function(a,b,d,f){if(!a||a.nodeType===3||a.nodeType===8)return w;if(f&&b in c.attrFn)return c(a)[b](d);f=a.nodeType!==1||!c.isXMLDoc(a);var e=d!==w;b=f&&c.props[b]||b;if(a.nodeType===1){var j=$a.test(b);if(b in a&&f&&!j){if(e){b==="type"&&ab.test(a.nodeName)&&a.parentNode&&c.error("type property can't be changed");
+a[b]=d}if(c.nodeName(a,"form")&&a.getAttributeNode(b))return a.getAttributeNode(b).nodeValue;if(b==="tabIndex")return(b=a.getAttributeNode("tabIndex"))&&b.specified?b.value:bb.test(a.nodeName)||cb.test(a.nodeName)&&a.href?0:w;return a[b]}if(!c.support.style&&f&&b==="style"){if(e)a.style.cssText=""+d;return a.style.cssText}e&&a.setAttribute(b,""+d);a=!c.support.hrefNormalized&&f&&j?a.getAttribute(b,2):a.getAttribute(b);return a===null?w:a}return c.style(a,b,d)}});var O=/\.(.*)$/,db=function(a){return a.replace(/[^\w\s\.\|`]/g,
+function(b){return"\\"+b})};c.event={add:function(a,b,d,f){if(!(a.nodeType===3||a.nodeType===8)){if(a.setInterval&&a!==A&&!a.frameElement)a=A;var e,j;if(d.handler){e=d;d=e.handler}if(!d.guid)d.guid=c.guid++;if(j=c.data(a)){var i=j.events=j.events||{},o=j.handle;if(!o)j.handle=o=function(){return typeof c!=="undefined"&&!c.event.triggered?c.event.handle.apply(o.elem,arguments):w};o.elem=a;b=b.split(" ");for(var k,n=0,r;k=b[n++];){j=e?c.extend({},e):{handler:d,data:f};if(k.indexOf(".")>-1){r=k.split(".");
+k=r.shift();j.namespace=r.slice(0).sort().join(".")}else{r=[];j.namespace=""}j.type=k;j.guid=d.guid;var u=i[k],z=c.event.special[k]||{};if(!u){u=i[k]=[];if(!z.setup||z.setup.call(a,f,r,o)===false)if(a.addEventListener)a.addEventListener(k,o,false);else a.attachEvent&&a.attachEvent("on"+k,o)}if(z.add){z.add.call(a,j);if(!j.handler.guid)j.handler.guid=d.guid}u.push(j);c.event.global[k]=true}a=null}}},global:{},remove:function(a,b,d,f){if(!(a.nodeType===3||a.nodeType===8)){var e,j=0,i,o,k,n,r,u,z=c.data(a),
+C=z&&z.events;if(z&&C){if(b&&b.type){d=b.handler;b=b.type}if(!b||typeof b==="string"&&b.charAt(0)==="."){b=b||"";for(e in C)c.event.remove(a,e+b)}else{for(b=b.split(" ");e=b[j++];){n=e;i=e.indexOf(".")<0;o=[];if(!i){o=e.split(".");e=o.shift();k=new RegExp("(^|\\.)"+c.map(o.slice(0).sort(),db).join("\\.(?:.*\\.)?")+"(\\.|$)")}if(r=C[e])if(d){n=c.event.special[e]||{};for(B=f||0;B<r.length;B++){u=r[B];if(d.guid===u.guid){if(i||k.test(u.namespace)){f==null&&r.splice(B--,1);n.remove&&n.remove.call(a,u)}if(f!=
+null)break}}if(r.length===0||f!=null&&r.length===1){if(!n.teardown||n.teardown.call(a,o)===false)Ca(a,e,z.handle);delete C[e]}}else for(var B=0;B<r.length;B++){u=r[B];if(i||k.test(u.namespace)){c.event.remove(a,n,u.handler,B);r.splice(B--,1)}}}if(c.isEmptyObject(C)){if(b=z.handle)b.elem=null;delete z.events;delete z.handle;c.isEmptyObject(z)&&c.removeData(a)}}}}},trigger:function(a,b,d,f){var e=a.type||a;if(!f){a=typeof a==="object"?a[G]?a:c.extend(c.Event(e),a):c.Event(e);if(e.indexOf("!")>=0){a.type=
+e=e.slice(0,-1);a.exclusive=true}if(!d){a.stopPropagation();c.event.global[e]&&c.each(c.cache,function(){this.events&&this.events[e]&&c.event.trigger(a,b,this.handle.elem)})}if(!d||d.nodeType===3||d.nodeType===8)return w;a.result=w;a.target=d;b=c.makeArray(b);b.unshift(a)}a.currentTarget=d;(f=c.data(d,"handle"))&&f.apply(d,b);f=d.parentNode||d.ownerDocument;try{if(!(d&&d.nodeName&&c.noData[d.nodeName.toLowerCase()]))if(d["on"+e]&&d["on"+e].apply(d,b)===false)a.result=false}catch(j){}if(!a.isPropagationStopped()&&
+f)c.event.trigger(a,b,f,true);else if(!a.isDefaultPrevented()){f=a.target;var i,o=c.nodeName(f,"a")&&e==="click",k=c.event.special[e]||{};if((!k._default||k._default.call(d,a)===false)&&!o&&!(f&&f.nodeName&&c.noData[f.nodeName.toLowerCase()])){try{if(f[e]){if(i=f["on"+e])f["on"+e]=null;c.event.triggered=true;f[e]()}}catch(n){}if(i)f["on"+e]=i;c.event.triggered=false}}},handle:function(a){var b,d,f,e;a=arguments[0]=c.event.fix(a||A.event);a.currentTarget=this;b=a.type.indexOf(".")<0&&!a.exclusive;
+if(!b){d=a.type.split(".");a.type=d.shift();f=new RegExp("(^|\\.)"+d.slice(0).sort().join("\\.(?:.*\\.)?")+"(\\.|$)")}e=c.data(this,"events");d=e[a.type];if(e&&d){d=d.slice(0);e=0;for(var j=d.length;e<j;e++){var i=d[e];if(b||f.test(i.namespace)){a.handler=i.handler;a.data=i.data;a.handleObj=i;i=i.handler.apply(this,arguments);if(i!==w){a.result=i;if(i===false){a.preventDefault();a.stopPropagation()}}if(a.isImmediatePropagationStopped())break}}}return a.result},props:"altKey attrChange attrName bubbles button cancelable charCode clientX clientY ctrlKey currentTarget data detail eventPhase fromElement handler keyCode layerX layerY metaKey newValue offsetX offsetY originalTarget pageX pageY prevValue relatedNode relatedTarget screenX screenY shiftKey srcElement target toElement view wheelDelta which".split(" "),
+fix:function(a){if(a[G])return a;var b=a;a=c.Event(b);for(var d=this.props.length,f;d;){f=this.props[--d];a[f]=b[f]}if(!a.target)a.target=a.srcElement||s;if(a.target.nodeType===3)a.target=a.target.parentNode;if(!a.relatedTarget&&a.fromElement)a.relatedTarget=a.fromElement===a.target?a.toElement:a.fromElement;if(a.pageX==null&&a.clientX!=null){b=s.documentElement;d=s.body;a.pageX=a.clientX+(b&&b.scrollLeft||d&&d.scrollLeft||0)-(b&&b.clientLeft||d&&d.clientLeft||0);a.pageY=a.clientY+(b&&b.scrollTop||
+d&&d.scrollTop||0)-(b&&b.clientTop||d&&d.clientTop||0)}if(!a.which&&(a.charCode||a.charCode===0?a.charCode:a.keyCode))a.which=a.charCode||a.keyCode;if(!a.metaKey&&a.ctrlKey)a.metaKey=a.ctrlKey;if(!a.which&&a.button!==w)a.which=a.button&1?1:a.button&2?3:a.button&4?2:0;return a},guid:1E8,proxy:c.proxy,special:{ready:{setup:c.bindReady,teardown:c.noop},live:{add:function(a){c.event.add(this,a.origType,c.extend({},a,{handler:oa}))},remove:function(a){var b=true,d=a.origType.replace(O,"");c.each(c.data(this,
+"events").live||[],function(){if(d===this.origType.replace(O,""))return b=false});b&&c.event.remove(this,a.origType,oa)}},beforeunload:{setup:function(a,b,d){if(this.setInterval)this.onbeforeunload=d;return false},teardown:function(a,b){if(this.onbeforeunload===b)this.onbeforeunload=null}}}};var Ca=s.removeEventListener?function(a,b,d){a.removeEventListener(b,d,false)}:function(a,b,d){a.detachEvent("on"+b,d)};c.Event=function(a){if(!this.preventDefault)return new c.Event(a);if(a&&a.type){this.originalEvent=
+a;this.type=a.type}else this.type=a;this.timeStamp=J();this[G]=true};c.Event.prototype={preventDefault:function(){this.isDefaultPrevented=Z;var a=this.originalEvent;if(a){a.preventDefault&&a.preventDefault();a.returnValue=false}},stopPropagation:function(){this.isPropagationStopped=Z;var a=this.originalEvent;if(a){a.stopPropagation&&a.stopPropagation();a.cancelBubble=true}},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=Z;this.stopPropagation()},isDefaultPrevented:Y,isPropagationStopped:Y,
+isImmediatePropagationStopped:Y};var Da=function(a){var b=a.relatedTarget;try{for(;b&&b!==this;)b=b.parentNode;if(b!==this){a.type=a.data;c.event.handle.apply(this,arguments)}}catch(d){}},Ea=function(a){a.type=a.data;c.event.handle.apply(this,arguments)};c.each({mouseenter:"mouseover",mouseleave:"mouseout"},function(a,b){c.event.special[a]={setup:function(d){c.event.add(this,b,d&&d.selector?Ea:Da,a)},teardown:function(d){c.event.remove(this,b,d&&d.selector?Ea:Da)}}});if(!c.support.submitBubbles)c.event.special.submit=
+{setup:function(){if(this.nodeName.toLowerCase()!=="form"){c.event.add(this,"click.specialSubmit",function(a){var b=a.target,d=b.type;if((d==="submit"||d==="image")&&c(b).closest("form").length)return na("submit",this,arguments)});c.event.add(this,"keypress.specialSubmit",function(a){var b=a.target,d=b.type;if((d==="text"||d==="password")&&c(b).closest("form").length&&a.keyCode===13)return na("submit",this,arguments)})}else return false},teardown:function(){c.event.remove(this,".specialSubmit")}};
+if(!c.support.changeBubbles){var da=/textarea|input|select/i,ea,Fa=function(a){var b=a.type,d=a.value;if(b==="radio"||b==="checkbox")d=a.checked;else if(b==="select-multiple")d=a.selectedIndex>-1?c.map(a.options,function(f){return f.selected}).join("-"):"";else if(a.nodeName.toLowerCase()==="select")d=a.selectedIndex;return d},fa=function(a,b){var d=a.target,f,e;if(!(!da.test(d.nodeName)||d.readOnly)){f=c.data(d,"_change_data");e=Fa(d);if(a.type!=="focusout"||d.type!=="radio")c.data(d,"_change_data",
+e);if(!(f===w||e===f))if(f!=null||e){a.type="change";return c.event.trigger(a,b,d)}}};c.event.special.change={filters:{focusout:fa,click:function(a){var b=a.target,d=b.type;if(d==="radio"||d==="checkbox"||b.nodeName.toLowerCase()==="select")return fa.call(this,a)},keydown:function(a){var b=a.target,d=b.type;if(a.keyCode===13&&b.nodeName.toLowerCase()!=="textarea"||a.keyCode===32&&(d==="checkbox"||d==="radio")||d==="select-multiple")return fa.call(this,a)},beforeactivate:function(a){a=a.target;c.data(a,
+"_change_data",Fa(a))}},setup:function(){if(this.type==="file")return false;for(var a in ea)c.event.add(this,a+".specialChange",ea[a]);return da.test(this.nodeName)},teardown:function(){c.event.remove(this,".specialChange");return da.test(this.nodeName)}};ea=c.event.special.change.filters}s.addEventListener&&c.each({focus:"focusin",blur:"focusout"},function(a,b){function d(f){f=c.event.fix(f);f.type=b;return c.event.handle.call(this,f)}c.event.special[b]={setup:function(){this.addEventListener(a,
+d,true)},teardown:function(){this.removeEventListener(a,d,true)}}});c.each(["bind","one"],function(a,b){c.fn[b]=function(d,f,e){if(typeof d==="object"){for(var j in d)this[b](j,f,d[j],e);return this}if(c.isFunction(f)){e=f;f=w}var i=b==="one"?c.proxy(e,function(k){c(this).unbind(k,i);return e.apply(this,arguments)}):e;if(d==="unload"&&b!=="one")this.one(d,f,e);else{j=0;for(var o=this.length;j<o;j++)c.event.add(this[j],d,i,f)}return this}});c.fn.extend({unbind:function(a,b){if(typeof a==="object"&&
+!a.preventDefault)for(var d in a)this.unbind(d,a[d]);else{d=0;for(var f=this.length;d<f;d++)c.event.remove(this[d],a,b)}return this},delegate:function(a,b,d,f){return this.live(b,d,f,a)},undelegate:function(a,b,d){return arguments.length===0?this.unbind("live"):this.die(b,null,d,a)},trigger:function(a,b){return this.each(function(){c.event.trigger(a,b,this)})},triggerHandler:function(a,b){if(this[0]){a=c.Event(a);a.preventDefault();a.stopPropagation();c.event.trigger(a,b,this[0]);return a.result}},
+toggle:function(a){for(var b=arguments,d=1;d<b.length;)c.proxy(a,b[d++]);return this.click(c.proxy(a,function(f){var e=(c.data(this,"lastToggle"+a.guid)||0)%d;c.data(this,"lastToggle"+a.guid,e+1);f.preventDefault();return b[e].apply(this,arguments)||false}))},hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)}});var Ga={focus:"focusin",blur:"focusout",mouseenter:"mouseover",mouseleave:"mouseout"};c.each(["live","die"],function(a,b){c.fn[b]=function(d,f,e,j){var i,o=0,k,n,r=j||this.selector,
+u=j?this:c(this.context);if(c.isFunction(f)){e=f;f=w}for(d=(d||"").split(" ");(i=d[o++])!=null;){j=O.exec(i);k="";if(j){k=j[0];i=i.replace(O,"")}if(i==="hover")d.push("mouseenter"+k,"mouseleave"+k);else{n=i;if(i==="focus"||i==="blur"){d.push(Ga[i]+k);i+=k}else i=(Ga[i]||i)+k;b==="live"?u.each(function(){c.event.add(this,pa(i,r),{data:f,selector:r,handler:e,origType:i,origHandler:e,preType:n})}):u.unbind(pa(i,r),e)}}return this}});c.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error".split(" "),
+function(a,b){c.fn[b]=function(d){return d?this.bind(b,d):this.trigger(b)};if(c.attrFn)c.attrFn[b]=true});A.attachEvent&&!A.addEventListener&&A.attachEvent("onunload",function(){for(var a in c.cache)if(c.cache[a].handle)try{c.event.remove(c.cache[a].handle.elem)}catch(b){}});(function(){function a(g){for(var h="",l,m=0;g[m];m++){l=g[m];if(l.nodeType===3||l.nodeType===4)h+=l.nodeValue;else if(l.nodeType!==8)h+=a(l.childNodes)}return h}function b(g,h,l,m,q,p){q=0;for(var v=m.length;q<v;q++){var t=m[q];
+if(t){t=t[g];for(var y=false;t;){if(t.sizcache===l){y=m[t.sizset];break}if(t.nodeType===1&&!p){t.sizcache=l;t.sizset=q}if(t.nodeName.toLowerCase()===h){y=t;break}t=t[g]}m[q]=y}}}function d(g,h,l,m,q,p){q=0;for(var v=m.length;q<v;q++){var t=m[q];if(t){t=t[g];for(var y=false;t;){if(t.sizcache===l){y=m[t.sizset];break}if(t.nodeType===1){if(!p){t.sizcache=l;t.sizset=q}if(typeof h!=="string"){if(t===h){y=true;break}}else if(k.filter(h,[t]).length>0){y=t;break}}t=t[g]}m[q]=y}}}var f=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^[\]]*\]|['"][^'"]*['"]|[^[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,
+e=0,j=Object.prototype.toString,i=false,o=true;[0,0].sort(function(){o=false;return 0});var k=function(g,h,l,m){l=l||[];var q=h=h||s;if(h.nodeType!==1&&h.nodeType!==9)return[];if(!g||typeof g!=="string")return l;for(var p=[],v,t,y,S,H=true,M=x(h),I=g;(f.exec(""),v=f.exec(I))!==null;){I=v[3];p.push(v[1]);if(v[2]){S=v[3];break}}if(p.length>1&&r.exec(g))if(p.length===2&&n.relative[p[0]])t=ga(p[0]+p[1],h);else for(t=n.relative[p[0]]?[h]:k(p.shift(),h);p.length;){g=p.shift();if(n.relative[g])g+=p.shift();
+t=ga(g,t)}else{if(!m&&p.length>1&&h.nodeType===9&&!M&&n.match.ID.test(p[0])&&!n.match.ID.test(p[p.length-1])){v=k.find(p.shift(),h,M);h=v.expr?k.filter(v.expr,v.set)[0]:v.set[0]}if(h){v=m?{expr:p.pop(),set:z(m)}:k.find(p.pop(),p.length===1&&(p[0]==="~"||p[0]==="+")&&h.parentNode?h.parentNode:h,M);t=v.expr?k.filter(v.expr,v.set):v.set;if(p.length>0)y=z(t);else H=false;for(;p.length;){var D=p.pop();v=D;if(n.relative[D])v=p.pop();else D="";if(v==null)v=h;n.relative[D](y,v,M)}}else y=[]}y||(y=t);y||k.error(D||
+g);if(j.call(y)==="[object Array]")if(H)if(h&&h.nodeType===1)for(g=0;y[g]!=null;g++){if(y[g]&&(y[g]===true||y[g].nodeType===1&&E(h,y[g])))l.push(t[g])}else for(g=0;y[g]!=null;g++)y[g]&&y[g].nodeType===1&&l.push(t[g]);else l.push.apply(l,y);else z(y,l);if(S){k(S,q,l,m);k.uniqueSort(l)}return l};k.uniqueSort=function(g){if(B){i=o;g.sort(B);if(i)for(var h=1;h<g.length;h++)g[h]===g[h-1]&&g.splice(h--,1)}return g};k.matches=function(g,h){return k(g,null,null,h)};k.find=function(g,h,l){var m,q;if(!g)return[];
+for(var p=0,v=n.order.length;p<v;p++){var t=n.order[p];if(q=n.leftMatch[t].exec(g)){var y=q[1];q.splice(1,1);if(y.substr(y.length-1)!=="\\"){q[1]=(q[1]||"").replace(/\\/g,"");m=n.find[t](q,h,l);if(m!=null){g=g.replace(n.match[t],"");break}}}}m||(m=h.getElementsByTagName("*"));return{set:m,expr:g}};k.filter=function(g,h,l,m){for(var q=g,p=[],v=h,t,y,S=h&&h[0]&&x(h[0]);g&&h.length;){for(var H in n.filter)if((t=n.leftMatch[H].exec(g))!=null&&t[2]){var M=n.filter[H],I,D;D=t[1];y=false;t.splice(1,1);if(D.substr(D.length-
+1)!=="\\"){if(v===p)p=[];if(n.preFilter[H])if(t=n.preFilter[H](t,v,l,p,m,S)){if(t===true)continue}else y=I=true;if(t)for(var U=0;(D=v[U])!=null;U++)if(D){I=M(D,t,U,v);var Ha=m^!!I;if(l&&I!=null)if(Ha)y=true;else v[U]=false;else if(Ha){p.push(D);y=true}}if(I!==w){l||(v=p);g=g.replace(n.match[H],"");if(!y)return[];break}}}if(g===q)if(y==null)k.error(g);else break;q=g}return v};k.error=function(g){throw"Syntax error, unrecognized expression: "+g;};var n=k.selectors={order:["ID","NAME","TAG"],match:{ID:/#((?:[\w\u00c0-\uFFFF-]|\\.)+)/,
+CLASS:/\.((?:[\w\u00c0-\uFFFF-]|\\.)+)/,NAME:/\[name=['"]*((?:[\w\u00c0-\uFFFF-]|\\.)+)['"]*\]/,ATTR:/\[\s*((?:[\w\u00c0-\uFFFF-]|\\.)+)\s*(?:(\S?=)\s*(['"]*)(.*?)\3|)\s*\]/,TAG:/^((?:[\w\u00c0-\uFFFF\*-]|\\.)+)/,CHILD:/:(only|nth|last|first)-child(?:\((even|odd|[\dn+-]*)\))?/,POS:/:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^-]|$)/,PSEUDO:/:((?:[\w\u00c0-\uFFFF-]|\\.)+)(?:\((['"]?)((?:\([^\)]+\)|[^\(\)]*)+)\2\))?/},leftMatch:{},attrMap:{"class":"className","for":"htmlFor"},attrHandle:{href:function(g){return g.getAttribute("href")}},
+relative:{"+":function(g,h){var l=typeof h==="string",m=l&&!/\W/.test(h);l=l&&!m;if(m)h=h.toLowerCase();m=0;for(var q=g.length,p;m<q;m++)if(p=g[m]){for(;(p=p.previousSibling)&&p.nodeType!==1;);g[m]=l||p&&p.nodeName.toLowerCase()===h?p||false:p===h}l&&k.filter(h,g,true)},">":function(g,h){var l=typeof h==="string";if(l&&!/\W/.test(h)){h=h.toLowerCase();for(var m=0,q=g.length;m<q;m++){var p=g[m];if(p){l=p.parentNode;g[m]=l.nodeName.toLowerCase()===h?l:false}}}else{m=0;for(q=g.length;m<q;m++)if(p=g[m])g[m]=
+l?p.parentNode:p.parentNode===h;l&&k.filter(h,g,true)}},"":function(g,h,l){var m=e++,q=d;if(typeof h==="string"&&!/\W/.test(h)){var p=h=h.toLowerCase();q=b}q("parentNode",h,m,g,p,l)},"~":function(g,h,l){var m=e++,q=d;if(typeof h==="string"&&!/\W/.test(h)){var p=h=h.toLowerCase();q=b}q("previousSibling",h,m,g,p,l)}},find:{ID:function(g,h,l){if(typeof h.getElementById!=="undefined"&&!l)return(g=h.getElementById(g[1]))?[g]:[]},NAME:function(g,h){if(typeof h.getElementsByName!=="undefined"){var l=[];
+h=h.getElementsByName(g[1]);for(var m=0,q=h.length;m<q;m++)h[m].getAttribute("name")===g[1]&&l.push(h[m]);return l.length===0?null:l}},TAG:function(g,h){return h.getElementsByTagName(g[1])}},preFilter:{CLASS:function(g,h,l,m,q,p){g=" "+g[1].replace(/\\/g,"")+" ";if(p)return g;p=0;for(var v;(v=h[p])!=null;p++)if(v)if(q^(v.className&&(" "+v.className+" ").replace(/[\t\n]/g," ").indexOf(g)>=0))l||m.push(v);else if(l)h[p]=false;return false},ID:function(g){return g[1].replace(/\\/g,"")},TAG:function(g){return g[1].toLowerCase()},
+CHILD:function(g){if(g[1]==="nth"){var h=/(-?)(\d*)n((?:\+|-)?\d*)/.exec(g[2]==="even"&&"2n"||g[2]==="odd"&&"2n+1"||!/\D/.test(g[2])&&"0n+"+g[2]||g[2]);g[2]=h[1]+(h[2]||1)-0;g[3]=h[3]-0}g[0]=e++;return g},ATTR:function(g,h,l,m,q,p){h=g[1].replace(/\\/g,"");if(!p&&n.attrMap[h])g[1]=n.attrMap[h];if(g[2]==="~=")g[4]=" "+g[4]+" ";return g},PSEUDO:function(g,h,l,m,q){if(g[1]==="not")if((f.exec(g[3])||"").length>1||/^\w/.test(g[3]))g[3]=k(g[3],null,null,h);else{g=k.filter(g[3],h,l,true^q);l||m.push.apply(m,
+g);return false}else if(n.match.POS.test(g[0])||n.match.CHILD.test(g[0]))return true;return g},POS:function(g){g.unshift(true);return g}},filters:{enabled:function(g){return g.disabled===false&&g.type!=="hidden"},disabled:function(g){return g.disabled===true},checked:function(g){return g.checked===true},selected:function(g){return g.selected===true},parent:function(g){return!!g.firstChild},empty:function(g){return!g.firstChild},has:function(g,h,l){return!!k(l[3],g).length},header:function(g){return/h\d/i.test(g.nodeName)},
+text:function(g){return"text"===g.type},radio:function(g){return"radio"===g.type},checkbox:function(g){return"checkbox"===g.type},file:function(g){return"file"===g.type},password:function(g){return"password"===g.type},submit:function(g){return"submit"===g.type},image:function(g){return"image"===g.type},reset:function(g){return"reset"===g.type},button:function(g){return"button"===g.type||g.nodeName.toLowerCase()==="button"},input:function(g){return/input|select|textarea|button/i.test(g.nodeName)}},
+setFilters:{first:function(g,h){return h===0},last:function(g,h,l,m){return h===m.length-1},even:function(g,h){return h%2===0},odd:function(g,h){return h%2===1},lt:function(g,h,l){return h<l[3]-0},gt:function(g,h,l){return h>l[3]-0},nth:function(g,h,l){return l[3]-0===h},eq:function(g,h,l){return l[3]-0===h}},filter:{PSEUDO:function(g,h,l,m){var q=h[1],p=n.filters[q];if(p)return p(g,l,h,m);else if(q==="contains")return(g.textContent||g.innerText||a([g])||"").indexOf(h[3])>=0;else if(q==="not"){h=
+h[3];l=0;for(m=h.length;l<m;l++)if(h[l]===g)return false;return true}else k.error("Syntax error, unrecognized expression: "+q)},CHILD:function(g,h){var l=h[1],m=g;switch(l){case "only":case "first":for(;m=m.previousSibling;)if(m.nodeType===1)return false;if(l==="first")return true;m=g;case "last":for(;m=m.nextSibling;)if(m.nodeType===1)return false;return true;case "nth":l=h[2];var q=h[3];if(l===1&&q===0)return true;h=h[0];var p=g.parentNode;if(p&&(p.sizcache!==h||!g.nodeIndex)){var v=0;for(m=p.firstChild;m;m=
+m.nextSibling)if(m.nodeType===1)m.nodeIndex=++v;p.sizcache=h}g=g.nodeIndex-q;return l===0?g===0:g%l===0&&g/l>=0}},ID:function(g,h){return g.nodeType===1&&g.getAttribute("id")===h},TAG:function(g,h){return h==="*"&&g.nodeType===1||g.nodeName.toLowerCase()===h},CLASS:function(g,h){return(" "+(g.className||g.getAttribute("class"))+" ").indexOf(h)>-1},ATTR:function(g,h){var l=h[1];g=n.attrHandle[l]?n.attrHandle[l](g):g[l]!=null?g[l]:g.getAttribute(l);l=g+"";var m=h[2];h=h[4];return g==null?m==="!=":m===
+"="?l===h:m==="*="?l.indexOf(h)>=0:m==="~="?(" "+l+" ").indexOf(h)>=0:!h?l&&g!==false:m==="!="?l!==h:m==="^="?l.indexOf(h)===0:m==="$="?l.substr(l.length-h.length)===h:m==="|="?l===h||l.substr(0,h.length+1)===h+"-":false},POS:function(g,h,l,m){var q=n.setFilters[h[2]];if(q)return q(g,l,h,m)}}},r=n.match.POS;for(var u in n.match){n.match[u]=new RegExp(n.match[u].source+/(?![^\[]*\])(?![^\(]*\))/.source);n.leftMatch[u]=new RegExp(/(^(?:.|\r|\n)*?)/.source+n.match[u].source.replace(/\\(\d+)/g,function(g,
+h){return"\\"+(h-0+1)}))}var z=function(g,h){g=Array.prototype.slice.call(g,0);if(h){h.push.apply(h,g);return h}return g};try{Array.prototype.slice.call(s.documentElement.childNodes,0)}catch(C){z=function(g,h){h=h||[];if(j.call(g)==="[object Array]")Array.prototype.push.apply(h,g);else if(typeof g.length==="number")for(var l=0,m=g.length;l<m;l++)h.push(g[l]);else for(l=0;g[l];l++)h.push(g[l]);return h}}var B;if(s.documentElement.compareDocumentPosition)B=function(g,h){if(!g.compareDocumentPosition||
+!h.compareDocumentPosition){if(g==h)i=true;return g.compareDocumentPosition?-1:1}g=g.compareDocumentPosition(h)&4?-1:g===h?0:1;if(g===0)i=true;return g};else if("sourceIndex"in s.documentElement)B=function(g,h){if(!g.sourceIndex||!h.sourceIndex){if(g==h)i=true;return g.sourceIndex?-1:1}g=g.sourceIndex-h.sourceIndex;if(g===0)i=true;return g};else if(s.createRange)B=function(g,h){if(!g.ownerDocument||!h.ownerDocument){if(g==h)i=true;return g.ownerDocument?-1:1}var l=g.ownerDocument.createRange(),m=
+h.ownerDocument.createRange();l.setStart(g,0);l.setEnd(g,0);m.setStart(h,0);m.setEnd(h,0);g=l.compareBoundaryPoints(Range.START_TO_END,m);if(g===0)i=true;return g};(function(){var g=s.createElement("div"),h="script"+(new Date).getTime();g.innerHTML="<a name='"+h+"'/>";var l=s.documentElement;l.insertBefore(g,l.firstChild);if(s.getElementById(h)){n.find.ID=function(m,q,p){if(typeof q.getElementById!=="undefined"&&!p)return(q=q.getElementById(m[1]))?q.id===m[1]||typeof q.getAttributeNode!=="undefined"&&
+q.getAttributeNode("id").nodeValue===m[1]?[q]:w:[]};n.filter.ID=function(m,q){var p=typeof m.getAttributeNode!=="undefined"&&m.getAttributeNode("id");return m.nodeType===1&&p&&p.nodeValue===q}}l.removeChild(g);l=g=null})();(function(){var g=s.createElement("div");g.appendChild(s.createComment(""));if(g.getElementsByTagName("*").length>0)n.find.TAG=function(h,l){l=l.getElementsByTagName(h[1]);if(h[1]==="*"){h=[];for(var m=0;l[m];m++)l[m].nodeType===1&&h.push(l[m]);l=h}return l};g.innerHTML="<a href='#'></a>";
+if(g.firstChild&&typeof g.firstChild.getAttribute!=="undefined"&&g.firstChild.getAttribute("href")!=="#")n.attrHandle.href=function(h){return h.getAttribute("href",2)};g=null})();s.querySelectorAll&&function(){var g=k,h=s.createElement("div");h.innerHTML="<p class='TEST'></p>";if(!(h.querySelectorAll&&h.querySelectorAll(".TEST").length===0)){k=function(m,q,p,v){q=q||s;if(!v&&q.nodeType===9&&!x(q))try{return z(q.querySelectorAll(m),p)}catch(t){}return g(m,q,p,v)};for(var l in g)k[l]=g[l];h=null}}();
+(function(){var g=s.createElement("div");g.innerHTML="<div class='test e'></div><div class='test'></div>";if(!(!g.getElementsByClassName||g.getElementsByClassName("e").length===0)){g.lastChild.className="e";if(g.getElementsByClassName("e").length!==1){n.order.splice(1,0,"CLASS");n.find.CLASS=function(h,l,m){if(typeof l.getElementsByClassName!=="undefined"&&!m)return l.getElementsByClassName(h[1])};g=null}}})();var E=s.compareDocumentPosition?function(g,h){return!!(g.compareDocumentPosition(h)&16)}:
+function(g,h){return g!==h&&(g.contains?g.contains(h):true)},x=function(g){return(g=(g?g.ownerDocument||g:0).documentElement)?g.nodeName!=="HTML":false},ga=function(g,h){var l=[],m="",q;for(h=h.nodeType?[h]:h;q=n.match.PSEUDO.exec(g);){m+=q[0];g=g.replace(n.match.PSEUDO,"")}g=n.relative[g]?g+"*":g;q=0;for(var p=h.length;q<p;q++)k(g,h[q],l);return k.filter(m,l)};c.find=k;c.expr=k.selectors;c.expr[":"]=c.expr.filters;c.unique=k.uniqueSort;c.text=a;c.isXMLDoc=x;c.contains=E})();var eb=/Until$/,fb=/^(?:parents|prevUntil|prevAll)/,
+gb=/,/;R=Array.prototype.slice;var Ia=function(a,b,d){if(c.isFunction(b))return c.grep(a,function(e,j){return!!b.call(e,j,e)===d});else if(b.nodeType)return c.grep(a,function(e){return e===b===d});else if(typeof b==="string"){var f=c.grep(a,function(e){return e.nodeType===1});if(Ua.test(b))return c.filter(b,f,!d);else b=c.filter(b,f)}return c.grep(a,function(e){return c.inArray(e,b)>=0===d})};c.fn.extend({find:function(a){for(var b=this.pushStack("","find",a),d=0,f=0,e=this.length;f<e;f++){d=b.length;
+c.find(a,this[f],b);if(f>0)for(var j=d;j<b.length;j++)for(var i=0;i<d;i++)if(b[i]===b[j]){b.splice(j--,1);break}}return b},has:function(a){var b=c(a);return this.filter(function(){for(var d=0,f=b.length;d<f;d++)if(c.contains(this,b[d]))return true})},not:function(a){return this.pushStack(Ia(this,a,false),"not",a)},filter:function(a){return this.pushStack(Ia(this,a,true),"filter",a)},is:function(a){return!!a&&c.filter(a,this).length>0},closest:function(a,b){if(c.isArray(a)){var d=[],f=this[0],e,j=
+{},i;if(f&&a.length){e=0;for(var o=a.length;e<o;e++){i=a[e];j[i]||(j[i]=c.expr.match.POS.test(i)?c(i,b||this.context):i)}for(;f&&f.ownerDocument&&f!==b;){for(i in j){e=j[i];if(e.jquery?e.index(f)>-1:c(f).is(e)){d.push({selector:i,elem:f});delete j[i]}}f=f.parentNode}}return d}var k=c.expr.match.POS.test(a)?c(a,b||this.context):null;return this.map(function(n,r){for(;r&&r.ownerDocument&&r!==b;){if(k?k.index(r)>-1:c(r).is(a))return r;r=r.parentNode}return null})},index:function(a){if(!a||typeof a===
+"string")return c.inArray(this[0],a?c(a):this.parent().children());return c.inArray(a.jquery?a[0]:a,this)},add:function(a,b){a=typeof a==="string"?c(a,b||this.context):c.makeArray(a);b=c.merge(this.get(),a);return this.pushStack(qa(a[0])||qa(b[0])?b:c.unique(b))},andSelf:function(){return this.add(this.prevObject)}});c.each({parent:function(a){return(a=a.parentNode)&&a.nodeType!==11?a:null},parents:function(a){return c.dir(a,"parentNode")},parentsUntil:function(a,b,d){return c.dir(a,"parentNode",
+d)},next:function(a){return c.nth(a,2,"nextSibling")},prev:function(a){return c.nth(a,2,"previousSibling")},nextAll:function(a){return c.dir(a,"nextSibling")},prevAll:function(a){return c.dir(a,"previousSibling")},nextUntil:function(a,b,d){return c.dir(a,"nextSibling",d)},prevUntil:function(a,b,d){return c.dir(a,"previousSibling",d)},siblings:function(a){return c.sibling(a.parentNode.firstChild,a)},children:function(a){return c.sibling(a.firstChild)},contents:function(a){return c.nodeName(a,"iframe")?
+a.contentDocument||a.contentWindow.document:c.makeArray(a.childNodes)}},function(a,b){c.fn[a]=function(d,f){var e=c.map(this,b,d);eb.test(a)||(f=d);if(f&&typeof f==="string")e=c.filter(f,e);e=this.length>1?c.unique(e):e;if((this.length>1||gb.test(f))&&fb.test(a))e=e.reverse();return this.pushStack(e,a,R.call(arguments).join(","))}});c.extend({filter:function(a,b,d){if(d)a=":not("+a+")";return c.find.matches(a,b)},dir:function(a,b,d){var f=[];for(a=a[b];a&&a.nodeType!==9&&(d===w||a.nodeType!==1||!c(a).is(d));){a.nodeType===
+1&&f.push(a);a=a[b]}return f},nth:function(a,b,d){b=b||1;for(var f=0;a;a=a[d])if(a.nodeType===1&&++f===b)break;return a},sibling:function(a,b){for(var d=[];a;a=a.nextSibling)a.nodeType===1&&a!==b&&d.push(a);return d}});var Ja=/ jQuery\d+="(?:\d+|null)"/g,V=/^\s+/,Ka=/(<([\w:]+)[^>]*?)\/>/g,hb=/^(?:area|br|col|embed|hr|img|input|link|meta|param)$/i,La=/<([\w:]+)/,ib=/<tbody/i,jb=/<|&#?\w+;/,ta=/<script|<object|<embed|<option|<style/i,ua=/checked\s*(?:[^=]|=\s*.checked.)/i,Ma=function(a,b,d){return hb.test(d)?
+a:b+"></"+d+">"},F={option:[1,"<select multiple='multiple'>","</select>"],legend:[1,"<fieldset>","</fieldset>"],thead:[1,"<table>","</table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],col:[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"],area:[1,"<map>","</map>"],_default:[0,"",""]};F.optgroup=F.option;F.tbody=F.tfoot=F.colgroup=F.caption=F.thead;F.th=F.td;if(!c.support.htmlSerialize)F._default=[1,"div<div>","</div>"];c.fn.extend({text:function(a){if(c.isFunction(a))return this.each(function(b){var d=
+c(this);d.text(a.call(this,b,d.text()))});if(typeof a!=="object"&&a!==w)return this.empty().append((this[0]&&this[0].ownerDocument||s).createTextNode(a));return c.text(this)},wrapAll:function(a){if(c.isFunction(a))return this.each(function(d){c(this).wrapAll(a.call(this,d))});if(this[0]){var b=c(a,this[0].ownerDocument).eq(0).clone(true);this[0].parentNode&&b.insertBefore(this[0]);b.map(function(){for(var d=this;d.firstChild&&d.firstChild.nodeType===1;)d=d.firstChild;return d}).append(this)}return this},
+wrapInner:function(a){if(c.isFunction(a))return this.each(function(b){c(this).wrapInner(a.call(this,b))});return this.each(function(){var b=c(this),d=b.contents();d.length?d.wrapAll(a):b.append(a)})},wrap:function(a){return this.each(function(){c(this).wrapAll(a)})},unwrap:function(){return this.parent().each(function(){c.nodeName(this,"body")||c(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,true,function(a){this.nodeType===1&&this.appendChild(a)})},
+prepend:function(){return this.domManip(arguments,true,function(a){this.nodeType===1&&this.insertBefore(a,this.firstChild)})},before:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,false,function(b){this.parentNode.insertBefore(b,this)});else if(arguments.length){var a=c(arguments[0]);a.push.apply(a,this.toArray());return this.pushStack(a,"before",arguments)}},after:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,false,function(b){this.parentNode.insertBefore(b,
+this.nextSibling)});else if(arguments.length){var a=this.pushStack(this,"after",arguments);a.push.apply(a,c(arguments[0]).toArray());return a}},remove:function(a,b){for(var d=0,f;(f=this[d])!=null;d++)if(!a||c.filter(a,[f]).length){if(!b&&f.nodeType===1){c.cleanData(f.getElementsByTagName("*"));c.cleanData([f])}f.parentNode&&f.parentNode.removeChild(f)}return this},empty:function(){for(var a=0,b;(b=this[a])!=null;a++)for(b.nodeType===1&&c.cleanData(b.getElementsByTagName("*"));b.firstChild;)b.removeChild(b.firstChild);
+return this},clone:function(a){var b=this.map(function(){if(!c.support.noCloneEvent&&!c.isXMLDoc(this)){var d=this.outerHTML,f=this.ownerDocument;if(!d){d=f.createElement("div");d.appendChild(this.cloneNode(true));d=d.innerHTML}return c.clean([d.replace(Ja,"").replace(/=([^="'>\s]+\/)>/g,'="$1">').replace(V,"")],f)[0]}else return this.cloneNode(true)});if(a===true){ra(this,b);ra(this.find("*"),b.find("*"))}return b},html:function(a){if(a===w)return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(Ja,
+""):null;else if(typeof a==="string"&&!ta.test(a)&&(c.support.leadingWhitespace||!V.test(a))&&!F[(La.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(Ka,Ma);try{for(var b=0,d=this.length;b<d;b++)if(this[b].nodeType===1){c.cleanData(this[b].getElementsByTagName("*"));this[b].innerHTML=a}}catch(f){this.empty().append(a)}}else c.isFunction(a)?this.each(function(e){var j=c(this),i=j.html();j.empty().append(function(){return a.call(this,e,i)})}):this.empty().append(a);return this},replaceWith:function(a){if(this[0]&&
+this[0].parentNode){if(c.isFunction(a))return this.each(function(b){var d=c(this),f=d.html();d.replaceWith(a.call(this,b,f))});if(typeof a!=="string")a=c(a).detach();return this.each(function(){var b=this.nextSibling,d=this.parentNode;c(this).remove();b?c(b).before(a):c(d).append(a)})}else return this.pushStack(c(c.isFunction(a)?a():a),"replaceWith",a)},detach:function(a){return this.remove(a,true)},domManip:function(a,b,d){function f(u){return c.nodeName(u,"table")?u.getElementsByTagName("tbody")[0]||
+u.appendChild(u.ownerDocument.createElement("tbody")):u}var e,j,i=a[0],o=[],k;if(!c.support.checkClone&&arguments.length===3&&typeof i==="string"&&ua.test(i))return this.each(function(){c(this).domManip(a,b,d,true)});if(c.isFunction(i))return this.each(function(u){var z=c(this);a[0]=i.call(this,u,b?z.html():w);z.domManip(a,b,d)});if(this[0]){e=i&&i.parentNode;e=c.support.parentNode&&e&&e.nodeType===11&&e.childNodes.length===this.length?{fragment:e}:sa(a,this,o);k=e.fragment;if(j=k.childNodes.length===
+1?(k=k.firstChild):k.firstChild){b=b&&c.nodeName(j,"tr");for(var n=0,r=this.length;n<r;n++)d.call(b?f(this[n],j):this[n],n>0||e.cacheable||this.length>1?k.cloneNode(true):k)}o.length&&c.each(o,Qa)}return this}});c.fragments={};c.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){c.fn[a]=function(d){var f=[];d=c(d);var e=this.length===1&&this[0].parentNode;if(e&&e.nodeType===11&&e.childNodes.length===1&&d.length===1){d[b](this[0]);
+return this}else{e=0;for(var j=d.length;e<j;e++){var i=(e>0?this.clone(true):this).get();c.fn[b].apply(c(d[e]),i);f=f.concat(i)}return this.pushStack(f,a,d.selector)}}});c.extend({clean:function(a,b,d,f){b=b||s;if(typeof b.createElement==="undefined")b=b.ownerDocument||b[0]&&b[0].ownerDocument||s;for(var e=[],j=0,i;(i=a[j])!=null;j++){if(typeof i==="number")i+="";if(i){if(typeof i==="string"&&!jb.test(i))i=b.createTextNode(i);else if(typeof i==="string"){i=i.replace(Ka,Ma);var o=(La.exec(i)||["",
+""])[1].toLowerCase(),k=F[o]||F._default,n=k[0],r=b.createElement("div");for(r.innerHTML=k[1]+i+k[2];n--;)r=r.lastChild;if(!c.support.tbody){n=ib.test(i);o=o==="table"&&!n?r.firstChild&&r.firstChild.childNodes:k[1]==="<table>"&&!n?r.childNodes:[];for(k=o.length-1;k>=0;--k)c.nodeName(o[k],"tbody")&&!o[k].childNodes.length&&o[k].parentNode.removeChild(o[k])}!c.support.leadingWhitespace&&V.test(i)&&r.insertBefore(b.createTextNode(V.exec(i)[0]),r.firstChild);i=r.childNodes}if(i.nodeType)e.push(i);else e=
+c.merge(e,i)}}if(d)for(j=0;e[j];j++)if(f&&c.nodeName(e[j],"script")&&(!e[j].type||e[j].type.toLowerCase()==="text/javascript"))f.push(e[j].parentNode?e[j].parentNode.removeChild(e[j]):e[j]);else{e[j].nodeType===1&&e.splice.apply(e,[j+1,0].concat(c.makeArray(e[j].getElementsByTagName("script"))));d.appendChild(e[j])}return e},cleanData:function(a){for(var b,d,f=c.cache,e=c.event.special,j=c.support.deleteExpando,i=0,o;(o=a[i])!=null;i++)if(d=o[c.expando]){b=f[d];if(b.events)for(var k in b.events)e[k]?
+c.event.remove(o,k):Ca(o,k,b.handle);if(j)delete o[c.expando];else o.removeAttribute&&o.removeAttribute(c.expando);delete f[d]}}});var kb=/z-?index|font-?weight|opacity|zoom|line-?height/i,Na=/alpha\([^)]*\)/,Oa=/opacity=([^)]*)/,ha=/float/i,ia=/-([a-z])/ig,lb=/([A-Z])/g,mb=/^-?\d+(?:px)?$/i,nb=/^-?\d/,ob={position:"absolute",visibility:"hidden",display:"block"},pb=["Left","Right"],qb=["Top","Bottom"],rb=s.defaultView&&s.defaultView.getComputedStyle,Pa=c.support.cssFloat?"cssFloat":"styleFloat",ja=
+function(a,b){return b.toUpperCase()};c.fn.css=function(a,b){return X(this,a,b,true,function(d,f,e){if(e===w)return c.curCSS(d,f);if(typeof e==="number"&&!kb.test(f))e+="px";c.style(d,f,e)})};c.extend({style:function(a,b,d){if(!a||a.nodeType===3||a.nodeType===8)return w;if((b==="width"||b==="height")&&parseFloat(d)<0)d=w;var f=a.style||a,e=d!==w;if(!c.support.opacity&&b==="opacity"){if(e){f.zoom=1;b=parseInt(d,10)+""==="NaN"?"":"alpha(opacity="+d*100+")";a=f.filter||c.curCSS(a,"filter")||"";f.filter=
+Na.test(a)?a.replace(Na,b):b}return f.filter&&f.filter.indexOf("opacity=")>=0?parseFloat(Oa.exec(f.filter)[1])/100+"":""}if(ha.test(b))b=Pa;b=b.replace(ia,ja);if(e)f[b]=d;return f[b]},css:function(a,b,d,f){if(b==="width"||b==="height"){var e,j=b==="width"?pb:qb;function i(){e=b==="width"?a.offsetWidth:a.offsetHeight;f!=="border"&&c.each(j,function(){f||(e-=parseFloat(c.curCSS(a,"padding"+this,true))||0);if(f==="margin")e+=parseFloat(c.curCSS(a,"margin"+this,true))||0;else e-=parseFloat(c.curCSS(a,
+"border"+this+"Width",true))||0})}a.offsetWidth!==0?i():c.swap(a,ob,i);return Math.max(0,Math.round(e))}return c.curCSS(a,b,d)},curCSS:function(a,b,d){var f,e=a.style;if(!c.support.opacity&&b==="opacity"&&a.currentStyle){f=Oa.test(a.currentStyle.filter||"")?parseFloat(RegExp.$1)/100+"":"";return f===""?"1":f}if(ha.test(b))b=Pa;if(!d&&e&&e[b])f=e[b];else if(rb){if(ha.test(b))b="float";b=b.replace(lb,"-$1").toLowerCase();e=a.ownerDocument.defaultView;if(!e)return null;if(a=e.getComputedStyle(a,null))f=
+a.getPropertyValue(b);if(b==="opacity"&&f==="")f="1"}else if(a.currentStyle){d=b.replace(ia,ja);f=a.currentStyle[b]||a.currentStyle[d];if(!mb.test(f)&&nb.test(f)){b=e.left;var j=a.runtimeStyle.left;a.runtimeStyle.left=a.currentStyle.left;e.left=d==="fontSize"?"1em":f||0;f=e.pixelLeft+"px";e.left=b;a.runtimeStyle.left=j}}return f},swap:function(a,b,d){var f={};for(var e in b){f[e]=a.style[e];a.style[e]=b[e]}d.call(a);for(e in b)a.style[e]=f[e]}});if(c.expr&&c.expr.filters){c.expr.filters.hidden=function(a){var b=
+a.offsetWidth,d=a.offsetHeight,f=a.nodeName.toLowerCase()==="tr";return b===0&&d===0&&!f?true:b>0&&d>0&&!f?false:c.curCSS(a,"display")==="none"};c.expr.filters.visible=function(a){return!c.expr.filters.hidden(a)}}var sb=J(),tb=/<script(.|\s)*?\/script>/gi,ub=/select|textarea/i,vb=/color|date|datetime|email|hidden|month|number|password|range|search|tel|text|time|url|week/i,N=/=\?(&|$)/,ka=/\?/,wb=/(\?|&)_=.*?(&|$)/,xb=/^(\w+:)?\/\/([^\/?#]+)/,yb=/%20/g,zb=c.fn.load;c.fn.extend({load:function(a,b,d){if(typeof a!==
+"string")return zb.call(this,a);else if(!this.length)return this;var f=a.indexOf(" ");if(f>=0){var e=a.slice(f,a.length);a=a.slice(0,f)}f="GET";if(b)if(c.isFunction(b)){d=b;b=null}else if(typeof b==="object"){b=c.param(b,c.ajaxSettings.traditional);f="POST"}var j=this;c.ajax({url:a,type:f,dataType:"html",data:b,complete:function(i,o){if(o==="success"||o==="notmodified")j.html(e?c("<div />").append(i.responseText.replace(tb,"")).find(e):i.responseText);d&&j.each(d,[i.responseText,o,i])}});return this},
+serialize:function(){return c.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?c.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||ub.test(this.nodeName)||vb.test(this.type))}).map(function(a,b){a=c(this).val();return a==null?null:c.isArray(a)?c.map(a,function(d){return{name:b.name,value:d}}):{name:b.name,value:a}}).get()}});c.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),
+function(a,b){c.fn[b]=function(d){return this.bind(b,d)}});c.extend({get:function(a,b,d,f){if(c.isFunction(b)){f=f||d;d=b;b=null}return c.ajax({type:"GET",url:a,data:b,success:d,dataType:f})},getScript:function(a,b){return c.get(a,null,b,"script")},getJSON:function(a,b,d){return c.get(a,b,d,"json")},post:function(a,b,d,f){if(c.isFunction(b)){f=f||d;d=b;b={}}return c.ajax({type:"POST",url:a,data:b,success:d,dataType:f})},ajaxSetup:function(a){c.extend(c.ajaxSettings,a)},ajaxSettings:{url:location.href,
+global:true,type:"GET",contentType:"application/x-www-form-urlencoded",processData:true,async:true,xhr:A.XMLHttpRequest&&(A.location.protocol!=="file:"||!A.ActiveXObject)?function(){return new A.XMLHttpRequest}:function(){try{return new A.ActiveXObject("Microsoft.XMLHTTP")}catch(a){}},accepts:{xml:"application/xml, text/xml",html:"text/html",script:"text/javascript, application/javascript",json:"application/json, text/javascript",text:"text/plain",_default:"*/*"}},lastModified:{},etag:{},ajax:function(a){function b(){e.success&&
+e.success.call(k,o,i,x);e.global&&f("ajaxSuccess",[x,e])}function d(){e.complete&&e.complete.call(k,x,i);e.global&&f("ajaxComplete",[x,e]);e.global&&!--c.active&&c.event.trigger("ajaxStop")}function f(q,p){(e.context?c(e.context):c.event).trigger(q,p)}var e=c.extend(true,{},c.ajaxSettings,a),j,i,o,k=a&&a.context||e,n=e.type.toUpperCase();if(e.data&&e.processData&&typeof e.data!=="string")e.data=c.param(e.data,e.traditional);if(e.dataType==="jsonp"){if(n==="GET")N.test(e.url)||(e.url+=(ka.test(e.url)?
+"&":"?")+(e.jsonp||"callback")+"=?");else if(!e.data||!N.test(e.data))e.data=(e.data?e.data+"&":"")+(e.jsonp||"callback")+"=?";e.dataType="json"}if(e.dataType==="json"&&(e.data&&N.test(e.data)||N.test(e.url))){j=e.jsonpCallback||"jsonp"+sb++;if(e.data)e.data=(e.data+"").replace(N,"="+j+"$1");e.url=e.url.replace(N,"="+j+"$1");e.dataType="script";A[j]=A[j]||function(q){o=q;b();d();A[j]=w;try{delete A[j]}catch(p){}z&&z.removeChild(C)}}if(e.dataType==="script"&&e.cache===null)e.cache=false;if(e.cache===
+false&&n==="GET"){var r=J(),u=e.url.replace(wb,"$1_="+r+"$2");e.url=u+(u===e.url?(ka.test(e.url)?"&":"?")+"_="+r:"")}if(e.data&&n==="GET")e.url+=(ka.test(e.url)?"&":"?")+e.data;e.global&&!c.active++&&c.event.trigger("ajaxStart");r=(r=xb.exec(e.url))&&(r[1]&&r[1]!==location.protocol||r[2]!==location.host);if(e.dataType==="script"&&n==="GET"&&r){var z=s.getElementsByTagName("head")[0]||s.documentElement,C=s.createElement("script");C.src=e.url;if(e.scriptCharset)C.charset=e.scriptCharset;if(!j){var B=
+false;C.onload=C.onreadystatechange=function(){if(!B&&(!this.readyState||this.readyState==="loaded"||this.readyState==="complete")){B=true;b();d();C.onload=C.onreadystatechange=null;z&&C.parentNode&&z.removeChild(C)}}}z.insertBefore(C,z.firstChild);return w}var E=false,x=e.xhr();if(x){e.username?x.open(n,e.url,e.async,e.username,e.password):x.open(n,e.url,e.async);try{if(e.data||a&&a.contentType)x.setRequestHeader("Content-Type",e.contentType);if(e.ifModified){c.lastModified[e.url]&&x.setRequestHeader("If-Modified-Since",
+c.lastModified[e.url]);c.etag[e.url]&&x.setRequestHeader("If-None-Match",c.etag[e.url])}r||x.setRequestHeader("X-Requested-With","XMLHttpRequest");x.setRequestHeader("Accept",e.dataType&&e.accepts[e.dataType]?e.accepts[e.dataType]+", */*":e.accepts._default)}catch(ga){}if(e.beforeSend&&e.beforeSend.call(k,x,e)===false){e.global&&!--c.active&&c.event.trigger("ajaxStop");x.abort();return false}e.global&&f("ajaxSend",[x,e]);var g=x.onreadystatechange=function(q){if(!x||x.readyState===0||q==="abort"){E||
+d();E=true;if(x)x.onreadystatechange=c.noop}else if(!E&&x&&(x.readyState===4||q==="timeout")){E=true;x.onreadystatechange=c.noop;i=q==="timeout"?"timeout":!c.httpSuccess(x)?"error":e.ifModified&&c.httpNotModified(x,e.url)?"notmodified":"success";var p;if(i==="success")try{o=c.httpData(x,e.dataType,e)}catch(v){i="parsererror";p=v}if(i==="success"||i==="notmodified")j||b();else c.handleError(e,x,i,p);d();q==="timeout"&&x.abort();if(e.async)x=null}};try{var h=x.abort;x.abort=function(){x&&h.call(x);
+g("abort")}}catch(l){}e.async&&e.timeout>0&&setTimeout(function(){x&&!E&&g("timeout")},e.timeout);try{x.send(n==="POST"||n==="PUT"||n==="DELETE"?e.data:null)}catch(m){c.handleError(e,x,null,m);d()}e.async||g();return x}},handleError:function(a,b,d,f){if(a.error)a.error.call(a.context||a,b,d,f);if(a.global)(a.context?c(a.context):c.event).trigger("ajaxError",[b,a,f])},active:0,httpSuccess:function(a){try{return!a.status&&location.protocol==="file:"||a.status>=200&&a.status<300||a.status===304||a.status===
+1223||a.status===0}catch(b){}return false},httpNotModified:function(a,b){var d=a.getResponseHeader("Last-Modified"),f=a.getResponseHeader("Etag");if(d)c.lastModified[b]=d;if(f)c.etag[b]=f;return a.status===304||a.status===0},httpData:function(a,b,d){var f=a.getResponseHeader("content-type")||"",e=b==="xml"||!b&&f.indexOf("xml")>=0;a=e?a.responseXML:a.responseText;e&&a.documentElement.nodeName==="parsererror"&&c.error("parsererror");if(d&&d.dataFilter)a=d.dataFilter(a,b);if(typeof a==="string")if(b===
+"json"||!b&&f.indexOf("json")>=0)a=c.parseJSON(a);else if(b==="script"||!b&&f.indexOf("javascript")>=0)c.globalEval(a);return a},param:function(a,b){function d(i,o){if(c.isArray(o))c.each(o,function(k,n){b||/\[\]$/.test(i)?f(i,n):d(i+"["+(typeof n==="object"||c.isArray(n)?k:"")+"]",n)});else!b&&o!=null&&typeof o==="object"?c.each(o,function(k,n){d(i+"["+k+"]",n)}):f(i,o)}function f(i,o){o=c.isFunction(o)?o():o;e[e.length]=encodeURIComponent(i)+"="+encodeURIComponent(o)}var e=[];if(b===w)b=c.ajaxSettings.traditional;
+if(c.isArray(a)||a.jquery)c.each(a,function(){f(this.name,this.value)});else for(var j in a)d(j,a[j]);return e.join("&").replace(yb,"+")}});var la={},Ab=/toggle|show|hide/,Bb=/^([+-]=)?([\d+-.]+)(.*)$/,W,va=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]];c.fn.extend({show:function(a,b){if(a||a===0)return this.animate(K("show",3),a,b);else{a=0;for(b=this.length;a<b;a++){var d=c.data(this[a],"olddisplay");
+this[a].style.display=d||"";if(c.css(this[a],"display")==="none"){d=this[a].nodeName;var f;if(la[d])f=la[d];else{var e=c("<"+d+" />").appendTo("body");f=e.css("display");if(f==="none")f="block";e.remove();la[d]=f}c.data(this[a],"olddisplay",f)}}a=0;for(b=this.length;a<b;a++)this[a].style.display=c.data(this[a],"olddisplay")||"";return this}},hide:function(a,b){if(a||a===0)return this.animate(K("hide",3),a,b);else{a=0;for(b=this.length;a<b;a++){var d=c.data(this[a],"olddisplay");!d&&d!=="none"&&c.data(this[a],
+"olddisplay",c.css(this[a],"display"))}a=0;for(b=this.length;a<b;a++)this[a].style.display="none";return this}},_toggle:c.fn.toggle,toggle:function(a,b){var d=typeof a==="boolean";if(c.isFunction(a)&&c.isFunction(b))this._toggle.apply(this,arguments);else a==null||d?this.each(function(){var f=d?a:c(this).is(":hidden");c(this)[f?"show":"hide"]()}):this.animate(K("toggle",3),a,b);return this},fadeTo:function(a,b,d){return this.filter(":hidden").css("opacity",0).show().end().animate({opacity:b},a,d)},
+animate:function(a,b,d,f){var e=c.speed(b,d,f);if(c.isEmptyObject(a))return this.each(e.complete);return this[e.queue===false?"each":"queue"](function(){var j=c.extend({},e),i,o=this.nodeType===1&&c(this).is(":hidden"),k=this;for(i in a){var n=i.replace(ia,ja);if(i!==n){a[n]=a[i];delete a[i];i=n}if(a[i]==="hide"&&o||a[i]==="show"&&!o)return j.complete.call(this);if((i==="height"||i==="width")&&this.style){j.display=c.css(this,"display");j.overflow=this.style.overflow}if(c.isArray(a[i])){(j.specialEasing=
+j.specialEasing||{})[i]=a[i][1];a[i]=a[i][0]}}if(j.overflow!=null)this.style.overflow="hidden";j.curAnim=c.extend({},a);c.each(a,function(r,u){var z=new c.fx(k,j,r);if(Ab.test(u))z[u==="toggle"?o?"show":"hide":u](a);else{var C=Bb.exec(u),B=z.cur(true)||0;if(C){u=parseFloat(C[2]);var E=C[3]||"px";if(E!=="px"){k.style[r]=(u||1)+E;B=(u||1)/z.cur(true)*B;k.style[r]=B+E}if(C[1])u=(C[1]==="-="?-1:1)*u+B;z.custom(B,u,E)}else z.custom(B,u,"")}});return true})},stop:function(a,b){var d=c.timers;a&&this.queue([]);
+this.each(function(){for(var f=d.length-1;f>=0;f--)if(d[f].elem===this){b&&d[f](true);d.splice(f,1)}});b||this.dequeue();return this}});c.each({slideDown:K("show",1),slideUp:K("hide",1),slideToggle:K("toggle",1),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"}},function(a,b){c.fn[a]=function(d,f){return this.animate(b,d,f)}});c.extend({speed:function(a,b,d){var f=a&&typeof a==="object"?a:{complete:d||!d&&b||c.isFunction(a)&&a,duration:a,easing:d&&b||b&&!c.isFunction(b)&&b};f.duration=c.fx.off?0:typeof f.duration===
+"number"?f.duration:c.fx.speeds[f.duration]||c.fx.speeds._default;f.old=f.complete;f.complete=function(){f.queue!==false&&c(this).dequeue();c.isFunction(f.old)&&f.old.call(this)};return f},easing:{linear:function(a,b,d,f){return d+f*a},swing:function(a,b,d,f){return(-Math.cos(a*Math.PI)/2+0.5)*f+d}},timers:[],fx:function(a,b,d){this.options=b;this.elem=a;this.prop=d;if(!b.orig)b.orig={}}});c.fx.prototype={update:function(){this.options.step&&this.options.step.call(this.elem,this.now,this);(c.fx.step[this.prop]||
+c.fx.step._default)(this);if((this.prop==="height"||this.prop==="width")&&this.elem.style)this.elem.style.display="block"},cur:function(a){if(this.elem[this.prop]!=null&&(!this.elem.style||this.elem.style[this.prop]==null))return this.elem[this.prop];return(a=parseFloat(c.css(this.elem,this.prop,a)))&&a>-10000?a:parseFloat(c.curCSS(this.elem,this.prop))||0},custom:function(a,b,d){function f(j){return e.step(j)}this.startTime=J();this.start=a;this.end=b;this.unit=d||this.unit||"px";this.now=this.start;
+this.pos=this.state=0;var e=this;f.elem=this.elem;if(f()&&c.timers.push(f)&&!W)W=setInterval(c.fx.tick,13)},show:function(){this.options.orig[this.prop]=c.style(this.elem,this.prop);this.options.show=true;this.custom(this.prop==="width"||this.prop==="height"?1:0,this.cur());c(this.elem).show()},hide:function(){this.options.orig[this.prop]=c.style(this.elem,this.prop);this.options.hide=true;this.custom(this.cur(),0)},step:function(a){var b=J(),d=true;if(a||b>=this.options.duration+this.startTime){this.now=
+this.end;this.pos=this.state=1;this.update();this.options.curAnim[this.prop]=true;for(var f in this.options.curAnim)if(this.options.curAnim[f]!==true)d=false;if(d){if(this.options.display!=null){this.elem.style.overflow=this.options.overflow;a=c.data(this.elem,"olddisplay");this.elem.style.display=a?a:this.options.display;if(c.css(this.elem,"display")==="none")this.elem.style.display="block"}this.options.hide&&c(this.elem).hide();if(this.options.hide||this.options.show)for(var e in this.options.curAnim)c.style(this.elem,
+e,this.options.orig[e]);this.options.complete.call(this.elem)}return false}else{e=b-this.startTime;this.state=e/this.options.duration;a=this.options.easing||(c.easing.swing?"swing":"linear");this.pos=c.easing[this.options.specialEasing&&this.options.specialEasing[this.prop]||a](this.state,e,0,1,this.options.duration);this.now=this.start+(this.end-this.start)*this.pos;this.update()}return true}};c.extend(c.fx,{tick:function(){for(var a=c.timers,b=0;b<a.length;b++)a[b]()||a.splice(b--,1);a.length||
+c.fx.stop()},stop:function(){clearInterval(W);W=null},speeds:{slow:600,fast:200,_default:400},step:{opacity:function(a){c.style(a.elem,"opacity",a.now)},_default:function(a){if(a.elem.style&&a.elem.style[a.prop]!=null)a.elem.style[a.prop]=(a.prop==="width"||a.prop==="height"?Math.max(0,a.now):a.now)+a.unit;else a.elem[a.prop]=a.now}}});if(c.expr&&c.expr.filters)c.expr.filters.animated=function(a){return c.grep(c.timers,function(b){return a===b.elem}).length};c.fn.offset="getBoundingClientRect"in s.documentElement?
+function(a){var b=this[0];if(a)return this.each(function(e){c.offset.setOffset(this,a,e)});if(!b||!b.ownerDocument)return null;if(b===b.ownerDocument.body)return c.offset.bodyOffset(b);var d=b.getBoundingClientRect(),f=b.ownerDocument;b=f.body;f=f.documentElement;return{top:d.top+(self.pageYOffset||c.support.boxModel&&f.scrollTop||b.scrollTop)-(f.clientTop||b.clientTop||0),left:d.left+(self.pageXOffset||c.support.boxModel&&f.scrollLeft||b.scrollLeft)-(f.clientLeft||b.clientLeft||0)}}:function(a){var b=
+this[0];if(a)return this.each(function(r){c.offset.setOffset(this,a,r)});if(!b||!b.ownerDocument)return null;if(b===b.ownerDocument.body)return c.offset.bodyOffset(b);c.offset.initialize();var d=b.offsetParent,f=b,e=b.ownerDocument,j,i=e.documentElement,o=e.body;f=(e=e.defaultView)?e.getComputedStyle(b,null):b.currentStyle;for(var k=b.offsetTop,n=b.offsetLeft;(b=b.parentNode)&&b!==o&&b!==i;){if(c.offset.supportsFixedPosition&&f.position==="fixed")break;j=e?e.getComputedStyle(b,null):b.currentStyle;
+k-=b.scrollTop;n-=b.scrollLeft;if(b===d){k+=b.offsetTop;n+=b.offsetLeft;if(c.offset.doesNotAddBorder&&!(c.offset.doesAddBorderForTableAndCells&&/^t(able|d|h)$/i.test(b.nodeName))){k+=parseFloat(j.borderTopWidth)||0;n+=parseFloat(j.borderLeftWidth)||0}f=d;d=b.offsetParent}if(c.offset.subtractsBorderForOverflowNotVisible&&j.overflow!=="visible"){k+=parseFloat(j.borderTopWidth)||0;n+=parseFloat(j.borderLeftWidth)||0}f=j}if(f.position==="relative"||f.position==="static"){k+=o.offsetTop;n+=o.offsetLeft}if(c.offset.supportsFixedPosition&&
+f.position==="fixed"){k+=Math.max(i.scrollTop,o.scrollTop);n+=Math.max(i.scrollLeft,o.scrollLeft)}return{top:k,left:n}};c.offset={initialize:function(){var a=s.body,b=s.createElement("div"),d,f,e,j=parseFloat(c.curCSS(a,"marginTop",true))||0;c.extend(b.style,{position:"absolute",top:0,left:0,margin:0,border:0,width:"1px",height:"1px",visibility:"hidden"});b.innerHTML="<div style='position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;'><div></div></div><table style='position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;' cellpadding='0' cellspacing='0'><tr><td></td></tr></table>";
+a.insertBefore(b,a.firstChild);d=b.firstChild;f=d.firstChild;e=d.nextSibling.firstChild.firstChild;this.doesNotAddBorder=f.offsetTop!==5;this.doesAddBorderForTableAndCells=e.offsetTop===5;f.style.position="fixed";f.style.top="20px";this.supportsFixedPosition=f.offsetTop===20||f.offsetTop===15;f.style.position=f.style.top="";d.style.overflow="hidden";d.style.position="relative";this.subtractsBorderForOverflowNotVisible=f.offsetTop===-5;this.doesNotIncludeMarginInBodyOffset=a.offsetTop!==j;a.removeChild(b);
+c.offset.initialize=c.noop},bodyOffset:function(a){var b=a.offsetTop,d=a.offsetLeft;c.offset.initialize();if(c.offset.doesNotIncludeMarginInBodyOffset){b+=parseFloat(c.curCSS(a,"marginTop",true))||0;d+=parseFloat(c.curCSS(a,"marginLeft",true))||0}return{top:b,left:d}},setOffset:function(a,b,d){if(/static/.test(c.curCSS(a,"position")))a.style.position="relative";var f=c(a),e=f.offset(),j=parseInt(c.curCSS(a,"top",true),10)||0,i=parseInt(c.curCSS(a,"left",true),10)||0;if(c.isFunction(b))b=b.call(a,
+d,e);d={top:b.top-e.top+j,left:b.left-e.left+i};"using"in b?b.using.call(a,d):f.css(d)}};c.fn.extend({position:function(){if(!this[0])return null;var a=this[0],b=this.offsetParent(),d=this.offset(),f=/^body|html$/i.test(b[0].nodeName)?{top:0,left:0}:b.offset();d.top-=parseFloat(c.curCSS(a,"marginTop",true))||0;d.left-=parseFloat(c.curCSS(a,"marginLeft",true))||0;f.top+=parseFloat(c.curCSS(b[0],"borderTopWidth",true))||0;f.left+=parseFloat(c.curCSS(b[0],"borderLeftWidth",true))||0;return{top:d.top-
+f.top,left:d.left-f.left}},offsetParent:function(){return this.map(function(){for(var a=this.offsetParent||s.body;a&&!/^body|html$/i.test(a.nodeName)&&c.css(a,"position")==="static";)a=a.offsetParent;return a})}});c.each(["Left","Top"],function(a,b){var d="scroll"+b;c.fn[d]=function(f){var e=this[0],j;if(!e)return null;if(f!==w)return this.each(function(){if(j=wa(this))j.scrollTo(!a?f:c(j).scrollLeft(),a?f:c(j).scrollTop());else this[d]=f});else return(j=wa(e))?"pageXOffset"in j?j[a?"pageYOffset":
+"pageXOffset"]:c.support.boxModel&&j.document.documentElement[d]||j.document.body[d]:e[d]}});c.each(["Height","Width"],function(a,b){var d=b.toLowerCase();c.fn["inner"+b]=function(){return this[0]?c.css(this[0],d,false,"padding"):null};c.fn["outer"+b]=function(f){return this[0]?c.css(this[0],d,false,f?"margin":"border"):null};c.fn[d]=function(f){var e=this[0];if(!e)return f==null?null:this;if(c.isFunction(f))return this.each(function(j){var i=c(this);i[d](f.call(this,j,i[d]()))});return"scrollTo"in
+e&&e.document?e.document.compatMode==="CSS1Compat"&&e.document.documentElement["client"+b]||e.document.body["client"+b]:e.nodeType===9?Math.max(e.documentElement["client"+b],e.body["scroll"+b],e.documentElement["scroll"+b],e.body["offset"+b],e.documentElement["offset"+b]):f===w?c.css(e,d):this.css(d,typeof f==="string"?f:f+"px")}});A.jQuery=A.$=c})(window);
diff --git a/h-source/admin/Public/Js/markitup/jquery.markitup.js b/h-source/admin/Public/Js/markitup/jquery.markitup.js
new file mode 100644
index 0000000..ee8f40f
--- /dev/null
+++ b/h-source/admin/Public/Js/markitup/jquery.markitup.js
@@ -0,0 +1,559 @@
+// ----------------------------------------------------------------------------
+// markItUp! Universal MarkUp Engine, JQuery plugin
+// v 1.1.7
+// Dual licensed under the MIT and GPL licenses.
+// ----------------------------------------------------------------------------
+// Copyright (C) 2007-2010 Jay Salvat
+// http://markitup.jaysalvat.com/
+// ----------------------------------------------------------------------------
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+// THE SOFTWARE.
+// ----------------------------------------------------------------------------
+(function($) {
+ $.fn.markItUp = function(settings, extraSettings) {
+ var options, ctrlKey, shiftKey, altKey;
+ ctrlKey = shiftKey = altKey = false;
+
+ options = { id: '',
+ nameSpace: '',
+ root: '',
+ previewInWindow: '', // 'width=800, height=600, resizable=yes, scrollbars=yes'
+ previewAutoRefresh: true,
+ previewPosition: 'after',
+ previewTemplatePath: '~/templates/preview.html',
+ previewParserPath: '',
+ previewParserVar: 'data',
+ resizeHandle: true,
+ beforeInsert: '',
+ afterInsert: '',
+ onEnter: {},
+ onShiftEnter: {},
+ onCtrlEnter: {},
+ onTab: {},
+ markupSet: [ { /* set */ } ]
+ };
+ $.extend(options, settings, extraSettings);
+
+ // compute markItUp! path
+ if (!options.root) {
+ $('script').each(function(a, tag) {
+ miuScript = $(tag).get(0).src.match(/(.*)jquery\.markitup(\.pack)?\.js$/);
+ if (miuScript !== null) {
+ options.root = miuScript[1];
+ }
+ });
+ }
+
+ return this.each(function() {
+ var $$, textarea, levels, scrollPosition, caretPosition, caretOffset,
+ clicked, hash, header, footer, previewWindow, template, iFrame, abort;
+ $$ = $(this);
+ textarea = this;
+ levels = [];
+ abort = false;
+ scrollPosition = caretPosition = 0;
+ caretOffset = -1;
+
+ options.previewParserPath = localize(options.previewParserPath);
+ options.previewTemplatePath = localize(options.previewTemplatePath);
+
+ // apply the computed path to ~/
+ function localize(data, inText) {
+ if (inText) {
+ return data.replace(/("|')~\//g, "$1"+options.root);
+ }
+ return data.replace(/^~\//, options.root);
+ }
+
+ // init and build editor
+ function init() {
+ id = ''; nameSpace = '';
+ if (options.id) {
+ id = 'id="'+options.id+'"';
+ } else if ($$.attr("id")) {
+ id = 'id="markItUp'+($$.attr("id").substr(0, 1).toUpperCase())+($$.attr("id").substr(1))+'"';
+
+ }
+ if (options.nameSpace) {
+ nameSpace = 'class="'+options.nameSpace+'"';
+ }
+ $$.wrap('<div '+nameSpace+'></div>');
+ $$.wrap('<div '+id+' class="markItUp"></div>');
+ $$.wrap('<div class="markItUpContainer"></div>');
+ $$.addClass("markItUpEditor");
+
+ // add the header before the textarea
+ header = $('<div class="markItUpHeader"></div>').insertBefore($$);
+ $(dropMenus(options.markupSet)).appendTo(header);
+
+ // add the footer after the textarea
+ footer = $('<div class="markItUpFooter"></div>').insertAfter($$);
+
+ // add the resize handle after textarea
+ if (options.resizeHandle === true && $.browser.safari !== true) {
+ resizeHandle = $('<div class="markItUpResizeHandle"></div>')
+ .insertAfter($$)
+ .bind("mousedown", function(e) {
+ var h = $$.height(), y = e.clientY, mouseMove, mouseUp;
+ mouseMove = function(e) {
+ $$.css("height", Math.max(20, e.clientY+h-y)+"px");
+ return false;
+ };
+ mouseUp = function(e) {
+ $("html").unbind("mousemove", mouseMove).unbind("mouseup", mouseUp);
+ return false;
+ };
+ $("html").bind("mousemove", mouseMove).bind("mouseup", mouseUp);
+ });
+ footer.append(resizeHandle);
+ }
+
+ // listen key events
+ $$.keydown(keyPressed).keyup(keyPressed);
+
+ // bind an event to catch external calls
+ $$.bind("insertion", function(e, settings) {
+ if (settings.target !== false) {
+ get();
+ }
+ if (textarea === $.markItUp.focused) {
+ markup(settings);
+ }
+ });
+
+ // remember the last focus
+ $$.focus(function() {
+ $.markItUp.focused = this;
+ });
+ }
+
+ // recursively build header with dropMenus from markupset
+ function dropMenus(markupSet) {
+ var ul = $('<ul></ul>'), i = 0;
+ $('li:hover > ul', ul).css('display', 'block');
+ $.each(markupSet, function() {
+ var button = this, t = '', title, li, j;
+ title = (button.key) ? (button.name||'')+' [Ctrl+'+button.key+']' : (button.name||'');
+ key = (button.key) ? 'accesskey="'+button.key+'"' : '';
+ if (button.separator) {
+ li = $('<li class="markItUpSeparator">'+(button.separator||'')+'</li>').appendTo(ul);
+ } else {
+ i++;
+ for (j = levels.length -1; j >= 0; j--) {
+ t += levels[j]+"-";
+ }
+ li = $('<li class="markItUpButton markItUpButton'+t+(i)+' '+(button.className||'')+'"><a href="" '+key+' title="'+title+'">'+(button.name||'')+'</a></li>')
+ .bind("contextmenu", function() { // prevent contextmenu on mac and allow ctrl+click
+ return false;
+ }).click(function() {
+ return false;
+ }).mousedown(function() {
+ if (button.call) {
+ eval(button.call)();
+ }
+ setTimeout(function() { markup(button) },1);
+ return false;
+ }).hover(function() {
+ $('> ul', this).show();
+ $(document).one('click', function() { // close dropmenu if click outside
+ $('ul ul', header).hide();
+ }
+ );
+ }, function() {
+ $('> ul', this).hide();
+ }
+ ).appendTo(ul);
+ if (button.dropMenu) {
+ levels.push(i);
+ $(li).addClass('markItUpDropMenu').append(dropMenus(button.dropMenu));
+ }
+ }
+ });
+ levels.pop();
+ return ul;
+ }
+
+ // markItUp! markups
+ function magicMarkups(string) {
+ if (string) {
+ string = string.toString();
+ string = string.replace(/\(\!\(([\s\S]*?)\)\!\)/g,
+ function(x, a) {
+ var b = a.split('|!|');
+ if (altKey === true) {
+ return (b[1] !== undefined) ? b[1] : b[0];
+ } else {
+ return (b[1] === undefined) ? "" : b[0];
+ }
+ }
+ );
+ // [![prompt]!], [![prompt:!:value]!]
+ string = string.replace(/\[\!\[([\s\S]*?)\]\!\]/g,
+ function(x, a) {
+ var b = a.split(':!:');
+ if (abort === true) {
+ return false;
+ }
+ value = prompt(b[0], (b[1]) ? b[1] : '');
+ if (value === null) {
+ abort = true;
+ }
+ return value;
+ }
+ );
+ return string;
+ }
+ return "";
+ }
+
+ // prepare action
+ function prepare(action) {
+ if ($.isFunction(action)) {
+ action = action(hash);
+ }
+ return magicMarkups(action);
+ }
+
+ // build block to insert
+ function build(string) {
+ openWith = prepare(clicked.openWith);
+ placeHolder = prepare(clicked.placeHolder);
+ replaceWith = prepare(clicked.replaceWith);
+ closeWith = prepare(clicked.closeWith);
+ if (replaceWith !== "") {
+ block = openWith + replaceWith + closeWith;
+ } else if (selection === '' && placeHolder !== '') {
+ block = openWith + placeHolder + closeWith;
+ } else {
+ block = openWith + (string||selection) + closeWith;
+ }
+ return { block:block,
+ openWith:openWith,
+ replaceWith:replaceWith,
+ placeHolder:placeHolder,
+ closeWith:closeWith
+ };
+ }
+
+ // define markup to insert
+ function markup(button) {
+ var len, j, n, i;
+ hash = clicked = button;
+ get();
+
+ $.extend(hash, { line:"",
+ root:options.root,
+ textarea:textarea,
+ selection:(selection||''),
+ caretPosition:caretPosition,
+ ctrlKey:ctrlKey,
+ shiftKey:shiftKey,
+ altKey:altKey
+ }
+ );
+ // callbacks before insertion
+ prepare(options.beforeInsert);
+ prepare(clicked.beforeInsert);
+ if (ctrlKey === true && shiftKey === true) {
+ prepare(clicked.beforeMultiInsert);
+ }
+ $.extend(hash, { line:1 });
+
+ if (ctrlKey === true && shiftKey === true) {
+ lines = selection.split(/\r?\n/);
+ for (j = 0, n = lines.length, i = 0; i < n; i++) {
+ if ($.trim(lines[i]) !== '') {
+ $.extend(hash, { line:++j, selection:lines[i] } );
+ lines[i] = build(lines[i]).block;
+ } else {
+ lines[i] = "";
+ }
+ }
+ string = { block:lines.join('\n')};
+ start = caretPosition;
+ len = string.block.length + (($.browser.opera) ? n : 0);
+ } else if (ctrlKey === true) {
+ string = build(selection);
+ start = caretPosition + string.openWith.length;
+ len = string.block.length - string.openWith.length - string.closeWith.length;
+ len -= fixIeBug(string.block);
+ } else if (shiftKey === true) {
+ string = build(selection);
+ start = caretPosition;
+ len = string.block.length;
+ len -= fixIeBug(string.block);
+ } else {
+ string = build(selection);
+ start = caretPosition + string.block.length ;
+ len = 0;
+ start -= fixIeBug(string.block);
+ }
+ if ((selection === '' && string.replaceWith === '')) {
+ caretOffset += fixOperaBug(string.block);
+
+ start = caretPosition + string.openWith.length;
+ len = string.block.length - string.openWith.length - string.closeWith.length;
+
+ caretOffset = $$.val().substring(caretPosition, $$.val().length).length;
+ caretOffset -= fixOperaBug($$.val().substring(0, caretPosition));
+ }
+ $.extend(hash, { caretPosition:caretPosition, scrollPosition:scrollPosition } );
+
+ if (string.block !== selection && abort === false) {
+ insert(string.block);
+ set(start, len);
+ } else {
+ caretOffset = -1;
+ }
+ get();
+
+ $.extend(hash, { line:'', selection:selection });
+
+ // callbacks after insertion
+ if (ctrlKey === true && shiftKey === true) {
+ prepare(clicked.afterMultiInsert);
+ }
+ prepare(clicked.afterInsert);
+ prepare(options.afterInsert);
+
+ // refresh preview if opened
+ if (previewWindow && options.previewAutoRefresh) {
+ refreshPreview();
+ }
+
+ // reinit keyevent
+ shiftKey = altKey = ctrlKey = abort = false;
+ }
+
+ // Substract linefeed in Opera
+ function fixOperaBug(string) {
+ if ($.browser.opera) {
+ return string.length - string.replace(/\n*/g, '').length;
+ }
+ return 0;
+ }
+ // Substract linefeed in IE
+ function fixIeBug(string) {
+ if ($.browser.msie) {
+ return string.length - string.replace(/\r*/g, '').length;
+ }
+ return 0;
+ }
+
+ // add markup
+ function insert(block) {
+ if (document.selection) {
+ var newSelection = document.selection.createRange();
+ newSelection.text = block;
+ } else {
+ $$.val($$.val().substring(0, caretPosition) + block + $$.val().substring(caretPosition + selection.length, $$.val().length));
+ }
+ }
+
+ // set a selection
+ function set(start, len) {
+ if (textarea.createTextRange){
+ // quick fix to make it work on Opera 9.5
+ if ($.browser.opera && $.browser.version >= 9.5 && len == 0) {
+ return false;
+ }
+ range = textarea.createTextRange();
+ range.collapse(true);
+ range.moveStart('character', start);
+ range.moveEnd('character', len);
+ range.select();
+ } else if (textarea.setSelectionRange ){
+ textarea.setSelectionRange(start, start + len);
+ }
+ textarea.scrollTop = scrollPosition;
+ textarea.focus();
+ }
+
+ // get the selection
+ function get() {
+ textarea.focus();
+
+ scrollPosition = textarea.scrollTop;
+ if (document.selection) {
+ selection = document.selection.createRange().text;
+ if ($.browser.msie) { // ie
+ var range = document.selection.createRange(), rangeCopy = range.duplicate();
+ rangeCopy.moveToElementText(textarea);
+ caretPosition = -1;
+ while(rangeCopy.inRange(range)) { // fix most of the ie bugs with linefeeds...
+ rangeCopy.moveStart('character');
+ caretPosition ++;
+ }
+ } else { // opera
+ caretPosition = textarea.selectionStart;
+ }
+ } else { // gecko & webkit
+ caretPosition = textarea.selectionStart;
+ selection = $$.val().substring(caretPosition, textarea.selectionEnd);
+ }
+ return selection;
+ }
+
+ // open preview window
+ function preview() {
+ if (!previewWindow || previewWindow.closed) {
+ if (options.previewInWindow) {
+ previewWindow = window.open('', 'preview', options.previewInWindow);
+ } else {
+ iFrame = $('<iframe class="markItUpPreviewFrame"></iframe>');
+ if (options.previewPosition == 'after') {
+ iFrame.insertAfter(footer);
+ } else {
+ iFrame.insertBefore(header);
+ }
+ previewWindow = iFrame[iFrame.length - 1].contentWindow || frame[iFrame.length - 1];
+ }
+ } else if (altKey === true) {
+ // Thx Stephen M. Redd for the IE8 fix
+ if (iFrame) {
+ iFrame.remove();
+ } else {
+ previewWindow.close();
+ }
+ previewWindow = iFrame = false;
+ }
+ if (!options.previewAutoRefresh) {
+ refreshPreview();
+ }
+ }
+
+ // refresh Preview window
+ function refreshPreview() {
+ renderPreview();
+ }
+
+ function renderPreview() {
+ var phtml;
+ if (options.previewParserPath !== '') {
+ $.ajax( {
+ type: 'POST',
+ url: options.previewParserPath,
+ data: options.previewParserVar+'='+encodeURIComponent($$.val()),
+ success: function(data) {
+ writeInPreview( localize(data, 1) );
+ }
+ } );
+ } else {
+ if (!template) {
+ $.ajax( {
+ url: options.previewTemplatePath,
+ success: function(data) {
+ writeInPreview( localize(data, 1).replace(/<!-- content -->/g, $$.val()) );
+ }
+ } );
+ }
+ }
+ return false;
+ }
+
+ function writeInPreview(data) {
+ if (previewWindow.document) {
+ try {
+ sp = previewWindow.document.documentElement.scrollTop
+ } catch(e) {
+ sp = 0;
+ }
+ previewWindow.document.open();
+ previewWindow.document.write(data);
+ previewWindow.document.close();
+ previewWindow.document.documentElement.scrollTop = sp;
+ }
+ if (options.previewInWindow) {
+ previewWindow.focus();
+ }
+ }
+
+ // set keys pressed
+ function keyPressed(e) {
+ shiftKey = e.shiftKey;
+ altKey = e.altKey;
+ ctrlKey = (!(e.altKey && e.ctrlKey)) ? e.ctrlKey : false;
+
+ if (e.type === 'keydown') {
+ if (ctrlKey === true) {
+ li = $("a[accesskey="+String.fromCharCode(e.keyCode)+"]", header).parent('li');
+ if (li.length !== 0) {
+ ctrlKey = false;
+ setTimeout(function() {
+ li.triggerHandler('mousedown');
+ },1);
+ return false;
+ }
+ }
+ if (e.keyCode === 13 || e.keyCode === 10) { // Enter key
+ if (ctrlKey === true) { // Enter + Ctrl
+ ctrlKey = false;
+ markup(options.onCtrlEnter);
+ return options.onCtrlEnter.keepDefault;
+ } else if (shiftKey === true) { // Enter + Shift
+ shiftKey = false;
+ markup(options.onShiftEnter);
+ return options.onShiftEnter.keepDefault;
+ } else { // only Enter
+ markup(options.onEnter);
+ return options.onEnter.keepDefault;
+ }
+ }
+ if (e.keyCode === 9) { // Tab key
+ if (shiftKey == true || ctrlKey == true || altKey == true) { // Thx Dr Floob.
+ return false;
+ }
+ if (caretOffset !== -1) {
+ get();
+ caretOffset = $$.val().length - caretOffset;
+ set(caretOffset, 0);
+ caretOffset = -1;
+ return false;
+ } else {
+ markup(options.onTab);
+ return options.onTab.keepDefault;
+ }
+ }
+ }
+ }
+
+ init();
+ });
+ };
+
+ $.fn.markItUpRemove = function() {
+ return this.each(function() {
+ var $$ = $(this).unbind().removeClass('markItUpEditor');
+ $$.parent('div').parent('div.markItUp').parent('div').replaceWith($$);
+ }
+ );
+ };
+
+ $.markItUp = function(settings) {
+ var options = { target:false };
+ $.extend(options, settings);
+ if (options.target) {
+ return $(options.target).each(function() {
+ $(this).focus();
+ $(this).trigger('insertion', [options]);
+ });
+ } else {
+ $('textarea').trigger('insertion', [options]);
+ }
+ };
+})(jQuery);
diff --git a/h-source/admin/Public/Js/markitup/sets/bbcode/images/bold.png b/h-source/admin/Public/Js/markitup/sets/bbcode/images/bold.png
new file mode 100644
index 0000000..889ae80
--- /dev/null
+++ b/h-source/admin/Public/Js/markitup/sets/bbcode/images/bold.png
Binary files differ
diff --git a/h-source/admin/Public/Js/markitup/sets/bbcode/images/clean.png b/h-source/admin/Public/Js/markitup/sets/bbcode/images/clean.png
new file mode 100644
index 0000000..7e7cefb
--- /dev/null
+++ b/h-source/admin/Public/Js/markitup/sets/bbcode/images/clean.png
Binary files differ
diff --git a/h-source/admin/Public/Js/markitup/sets/bbcode/images/code.png b/h-source/admin/Public/Js/markitup/sets/bbcode/images/code.png
new file mode 100644
index 0000000..63fe6ce
--- /dev/null
+++ b/h-source/admin/Public/Js/markitup/sets/bbcode/images/code.png
Binary files differ
diff --git a/h-source/admin/Public/Js/markitup/sets/bbcode/images/fonts.png b/h-source/admin/Public/Js/markitup/sets/bbcode/images/fonts.png
new file mode 100644
index 0000000..b7960db
--- /dev/null
+++ b/h-source/admin/Public/Js/markitup/sets/bbcode/images/fonts.png
Binary files differ
diff --git a/h-source/admin/Public/Js/markitup/sets/bbcode/images/h1.png b/h-source/admin/Public/Js/markitup/sets/bbcode/images/h1.png
new file mode 100644
index 0000000..9c122e9
--- /dev/null
+++ b/h-source/admin/Public/Js/markitup/sets/bbcode/images/h1.png
Binary files differ
diff --git a/h-source/admin/Public/Js/markitup/sets/bbcode/images/h2.png b/h-source/admin/Public/Js/markitup/sets/bbcode/images/h2.png
new file mode 100644
index 0000000..fbd8765
--- /dev/null
+++ b/h-source/admin/Public/Js/markitup/sets/bbcode/images/h2.png
Binary files differ
diff --git a/h-source/admin/Public/Js/markitup/sets/bbcode/images/h3.png b/h-source/admin/Public/Js/markitup/sets/bbcode/images/h3.png
new file mode 100644
index 0000000..c7836cf
--- /dev/null
+++ b/h-source/admin/Public/Js/markitup/sets/bbcode/images/h3.png
Binary files differ
diff --git a/h-source/admin/Public/Js/markitup/sets/bbcode/images/italic.png b/h-source/admin/Public/Js/markitup/sets/bbcode/images/italic.png
new file mode 100644
index 0000000..8482ac8
--- /dev/null
+++ b/h-source/admin/Public/Js/markitup/sets/bbcode/images/italic.png
Binary files differ
diff --git a/h-source/admin/Public/Js/markitup/sets/bbcode/images/link.png b/h-source/admin/Public/Js/markitup/sets/bbcode/images/link.png
new file mode 100644
index 0000000..25eacb7
--- /dev/null
+++ b/h-source/admin/Public/Js/markitup/sets/bbcode/images/link.png
Binary files differ
diff --git a/h-source/admin/Public/Js/markitup/sets/bbcode/images/list-bullet.png b/h-source/admin/Public/Js/markitup/sets/bbcode/images/list-bullet.png
new file mode 100644
index 0000000..4a8672b
--- /dev/null
+++ b/h-source/admin/Public/Js/markitup/sets/bbcode/images/list-bullet.png
Binary files differ
diff --git a/h-source/admin/Public/Js/markitup/sets/bbcode/images/list-item.png b/h-source/admin/Public/Js/markitup/sets/bbcode/images/list-item.png
new file mode 100644
index 0000000..8cb4d69
--- /dev/null
+++ b/h-source/admin/Public/Js/markitup/sets/bbcode/images/list-item.png
Binary files differ
diff --git a/h-source/admin/Public/Js/markitup/sets/bbcode/images/list-numeric.png b/h-source/admin/Public/Js/markitup/sets/bbcode/images/list-numeric.png
new file mode 100644
index 0000000..33b0b8d
--- /dev/null
+++ b/h-source/admin/Public/Js/markitup/sets/bbcode/images/list-numeric.png
Binary files differ
diff --git a/h-source/admin/Public/Js/markitup/sets/bbcode/images/paragraph.png b/h-source/admin/Public/Js/markitup/sets/bbcode/images/paragraph.png
new file mode 100644
index 0000000..95704fb
--- /dev/null
+++ b/h-source/admin/Public/Js/markitup/sets/bbcode/images/paragraph.png
Binary files differ
diff --git a/h-source/admin/Public/Js/markitup/sets/bbcode/images/picture.png b/h-source/admin/Public/Js/markitup/sets/bbcode/images/picture.png
new file mode 100644
index 0000000..4a158fe
--- /dev/null
+++ b/h-source/admin/Public/Js/markitup/sets/bbcode/images/picture.png
Binary files differ
diff --git a/h-source/admin/Public/Js/markitup/sets/bbcode/images/preview.png b/h-source/admin/Public/Js/markitup/sets/bbcode/images/preview.png
new file mode 100644
index 0000000..a9925a0
--- /dev/null
+++ b/h-source/admin/Public/Js/markitup/sets/bbcode/images/preview.png
Binary files differ
diff --git a/h-source/admin/Public/Js/markitup/sets/bbcode/images/quotes.png b/h-source/admin/Public/Js/markitup/sets/bbcode/images/quotes.png
new file mode 100644
index 0000000..e54ebeb
--- /dev/null
+++ b/h-source/admin/Public/Js/markitup/sets/bbcode/images/quotes.png
Binary files differ
diff --git a/h-source/admin/Public/Js/markitup/sets/bbcode/images/stroke.png b/h-source/admin/Public/Js/markitup/sets/bbcode/images/stroke.png
new file mode 100644
index 0000000..612058a
--- /dev/null
+++ b/h-source/admin/Public/Js/markitup/sets/bbcode/images/stroke.png
Binary files differ
diff --git a/h-source/admin/Public/Js/markitup/sets/bbcode/images/underline.png b/h-source/admin/Public/Js/markitup/sets/bbcode/images/underline.png
new file mode 100644
index 0000000..90d0df2
--- /dev/null
+++ b/h-source/admin/Public/Js/markitup/sets/bbcode/images/underline.png
Binary files differ
diff --git a/h-source/admin/Public/Js/markitup/sets/bbcode/readme.txt b/h-source/admin/Public/Js/markitup/sets/bbcode/readme.txt
new file mode 100644
index 0000000..745d5dd
--- /dev/null
+++ b/h-source/admin/Public/Js/markitup/sets/bbcode/readme.txt
@@ -0,0 +1,11 @@
+Markup language:
+BBCode
+
+Description:
+A basic BBCode markup set with Bold, Italic, Underline, Picture, Link, Size, List, Quotes, Code, Clean button, Preview button.
+
+Install:
+- Download the zip file
+- Unzip it in your markItUp! sets folder
+- Modify your JS link to point at this set.js
+- Modify your CSS link to point at this style.css \ No newline at end of file
diff --git a/h-source/admin/Public/Js/markitup/sets/bbcode/set.js b/h-source/admin/Public/Js/markitup/sets/bbcode/set.js
new file mode 100644
index 0000000..3d16ea5
--- /dev/null
+++ b/h-source/admin/Public/Js/markitup/sets/bbcode/set.js
@@ -0,0 +1,32 @@
+// ----------------------------------------------------------------------------
+// markItUp!
+// ----------------------------------------------------------------------------
+// Copyright (C) 2008 Jay Salvat
+// http://markitup.jaysalvat.com/
+// ----------------------------------------------------------------------------
+// BBCode tags example
+// http://en.wikipedia.org/wiki/Bbcode
+// ----------------------------------------------------------------------------
+// Feel free to add more tags
+// ----------------------------------------------------------------------------
+mySettings = {
+ previewParserPath: '', // path to your BBCode parser
+ markupSet: [
+ {name:'Heading 1', key:'1', openWith:'[h1]', closeWith:'[/h1]' },
+ {name:'Heading 2', key:'2', openWith:'[h2]', closeWith:'[/h2]' },
+ {name:'Heading 3', key:'3', openWith:'[h3]', closeWith:'[/h3]' },
+ {name:'Paragraph', openWith:'[p]', closeWith:'[/p]' },
+ {separator:'---------------' },
+ {name:'Bold', key:'B', openWith:'[b]', closeWith:'[/b]'},
+ {name:'Italic', key:'I', openWith:'[i]', closeWith:'[/i]'},
+ {name:'Underline', key:'U', openWith:'[u]', closeWith:'[/u]'},
+ {name:'Stroke through', key:'S', openWith:'[del]', closeWith:'[/del]' },
+ {separator:'---------------' },
+ {name:'Bulleted list', openWith:'[list]\n', closeWith:'\n[/list]'},
+ {name:'Numeric list', openWith:'[enum]\n', closeWith:'\n[/enum]'},
+ {name:'List item', openWith:'[*] ', closeWith:'[/*]'},
+ {separator:'---------------' },
+ {name:'Code', openWith:'[code]', closeWith:'[/code]'},
+ {name:'Link', key: 'L', openWith:'[a]', closeWith:'[/a]',placeHolder:'http://the_url | the_text'},
+ ]
+} \ No newline at end of file
diff --git a/h-source/admin/Public/Js/markitup/sets/bbcode/style.css b/h-source/admin/Public/Js/markitup/sets/bbcode/style.css
new file mode 100644
index 0000000..4ab6031
--- /dev/null
+++ b/h-source/admin/Public/Js/markitup/sets/bbcode/style.css
@@ -0,0 +1,72 @@
+/* -------------------------------------------------------------------
+// markItUp!
+// By Jay Salvat - http://markitup.jaysalvat.com/
+// ------------------------------------------------------------------*/
+.markItUp .markItUpButton1 a {
+ background-image:url(images/h1.png);
+}
+.markItUp .markItUpButton2 a {
+ background-image:url(images/h2.png);
+}
+.markItUp .markItUpButton3 a {
+ background-image:url(images/h3.png);
+}
+.markItUp .markItUpButton4 a {
+ background-image:url(images/paragraph.png);
+}
+.markItUp .markItUpButton5 a {
+ background-image:url(images/bold.png);
+}
+.markItUp .markItUpButton6 a {
+ background-image:url(images/italic.png);
+}
+.markItUp .markItUpButton7 a {
+ background-image:url(images/underline.png);
+}
+.markItUp .markItUpButton8 a {
+ background-image:url(images/stroke.png);
+}
+.markItUp .markItUpButton9 a {
+ background-image:url(images/list-bullet.png);
+}
+.markItUp .markItUpButton10 a {
+ background-image:url(images/list-numeric.png);
+}
+.markItUp .markItUpButton11 a {
+ background-image:url(images/list-item.png);
+}
+.markItUp .markItUpButton12 a {
+ background-image:url(images/code.png);
+}
+.markItUp .markItUpButton13 a {
+ background-image:url(images/link.png);
+}
+/*.markItUp .markItUpButton4 a {
+ background-image:url(images/stroke.png);
+}*/
+
+/*.markItUp .markItUpButton4 a {
+ background-image:url(images/picture.png);
+}*/
+/*.markItUp .markItUpButton5 a {
+ background-image:url(images/link.png);
+}
+
+.markItUp .markItUpButton6 a {
+ background-image:url(images/fonts.png);
+}
+
+
+.markItUp .markItUpButton10 a {
+ background-image:url(images/quotes.png);
+}
+.markItUp .markItUpButton11 a {
+ background-image:url(images/code.png);
+}
+
+.markItUp .clean a {
+ background-image:url(images/clean.png);
+}
+.markItUp .preview a {
+ background-image:url(images/preview.png);
+}*/ \ No newline at end of file
diff --git a/h-source/admin/Public/Js/markitup/skins/simple/images/handle.png b/h-source/admin/Public/Js/markitup/skins/simple/images/handle.png
new file mode 100644
index 0000000..3993b20
--- /dev/null
+++ b/h-source/admin/Public/Js/markitup/skins/simple/images/handle.png
Binary files differ
diff --git a/h-source/admin/Public/Js/markitup/skins/simple/images/menu.png b/h-source/admin/Public/Js/markitup/skins/simple/images/menu.png
new file mode 100644
index 0000000..44a07af
--- /dev/null
+++ b/h-source/admin/Public/Js/markitup/skins/simple/images/menu.png
Binary files differ
diff --git a/h-source/admin/Public/Js/markitup/skins/simple/images/submenu.png b/h-source/admin/Public/Js/markitup/skins/simple/images/submenu.png
new file mode 100644
index 0000000..03d1977
--- /dev/null
+++ b/h-source/admin/Public/Js/markitup/skins/simple/images/submenu.png
Binary files differ
diff --git a/h-source/admin/Public/Js/markitup/skins/simple/style.css b/h-source/admin/Public/Js/markitup/skins/simple/style.css
new file mode 100644
index 0000000..4ff830f
--- /dev/null
+++ b/h-source/admin/Public/Js/markitup/skins/simple/style.css
@@ -0,0 +1,118 @@
+/* -------------------------------------------------------------------
+// markItUp! Universal MarkUp Engine, JQuery plugin
+// By Jay Salvat - http://markitup.jaysalvat.com/
+// ------------------------------------------------------------------*/
+.markItUp * {
+ margin:0px; padding:0px;
+ outline:none;
+}
+.markItUp a:link,
+.markItUp a:visited {
+ color:#000;
+ text-decoration:none;
+}
+.markItUp {
+ width:700px;
+ margin:5px 0 5px 0;
+}
+.markItUpContainer {
+ font:11px Verdana, Arial, Helvetica, sans-serif;
+}
+.markItUpEditor {
+ font:12px 'Courier New', Courier, monospace;
+ padding:5px;
+ width:640px;
+ height:300px;
+ clear:both; display:block;
+ line-height:18px;
+ overflow:auto;
+}
+.markItUpPreviewFrame {
+ overflow:auto;
+ background-color:#FFF;
+ width:99.9%;
+ height:300px;
+ margin:5px 0;
+}
+.markItUpFooter {
+ width:100%;
+}
+.markItUpResizeHandle {
+ overflow:hidden;
+ width:22px; height:5px;
+ margin-left:auto;
+ margin-right:auto;
+ background-image:url(images/handle.png);
+ cursor:n-resize;
+}
+/***************************************************************************************/
+/* first row of buttons */
+.markItUpHeader ul li {
+ list-style:none;
+ float:left;
+ position:relative;
+}
+.markItUpHeader ul li:hover > ul{
+ display:block;
+}
+.markItUpHeader ul .markItUpDropMenu {
+ background:transparent url(images/menu.png) no-repeat 115% 50%;
+ margin-right:5px;
+}
+.markItUpHeader ul .markItUpDropMenu li {
+ margin-right:0px;
+}
+/* next rows of buttons */
+.markItUpHeader ul ul {
+ display:none;
+ position:absolute;
+ top:18px; left:0px;
+ background:#FFF;
+ border:1px solid #000;
+}
+.markItUpHeader ul ul li {
+ float:none;
+ border-bottom:1px solid #000;
+}
+.markItUpHeader ul ul .markItUpDropMenu {
+ background:#FFF url(images/submenu.png) no-repeat 100% 50%;
+}
+.markItUpHeader ul .markItUpSeparator {
+ margin:0 10px;
+ width:1px;
+ height:16px;
+ overflow:hidden;
+ background-color:#CCC;
+}
+.markItUpHeader ul ul .markItUpSeparator {
+ width:auto; height:1px;
+ margin:0px;
+}
+/* next rows of buttons */
+.markItUpHeader ul ul ul {
+ position:absolute;
+ top:-1px; left:150px;
+}
+.markItUpHeader ul ul ul li {
+ float:none;
+}
+.markItUpHeader ul a {
+ display:block;
+ width:16px; height:16px;
+ text-indent:-10000px;
+ background-repeat:no-repeat;
+ padding:3px;
+ margin:0px;
+}
+.markItUpHeader ul ul a {
+ display:block;
+ padding-left:0px;
+ text-indent:0;
+ width:120px;
+ padding:5px 5px 5px 25px;
+ background-position:2px 50%;
+}
+.markItUpHeader ul ul a:hover {
+ color:#FFF;
+ background-color:#000;
+}
diff --git a/h-source/admin/Public/Js/stats.js b/h-source/admin/Public/Js/stats.js
new file mode 100644
index 0000000..7d6be08
--- /dev/null
+++ b/h-source/admin/Public/Js/stats.js
@@ -0,0 +1,35 @@
+
+/***************************************************************************
+ phpTrafficA @soft.ZoneO.net
+ Copyright (C) 2004-2008 ZoneO-soft, Butchu (email: "butchu" with the domain "zoneo.net")
+
+ This program is free software; you can redistribute it and/or
+ modify it under the terms of the GNU General Public License
+ as published by the Free Software Foundation; either version 2
+ of the License, or (at your option) any later version.
+
+ More Info About The Licence At http://www.gnu.org/copyleft/gpl.html
+****************************************************************************/
+
+function encode64(inp){
+var key="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
+var chr1,chr2,chr3,enc3,enc4,i=0,out="";
+while(i<inp.length){
+chr1=inp.charCodeAt(i++);if(chr1>127) chr1=88;
+chr2=inp.charCodeAt(i++);if(chr2>127) chr2=88;
+chr3=inp.charCodeAt(i++);if(chr3>127) chr3=88;
+if(isNaN(chr3)) {enc4=64;chr3=0;} else enc4=chr3&63;
+if(isNaN(chr2)) {enc3=64;chr2=0;} else enc3=((chr2<<2)|(chr3>>6))&63;
+out+=key.charAt((chr1>>2)&63)+key.charAt(((chr1<<4)|(chr2>>4))&63)+key.charAt(enc3)+key.charAt(enc4);
+}
+return encodeURIComponent(out);
+}
+
+function stats(sid){
+var referer=encode64(document.referrer);
+var thispage=encode64(window.location.pathname+location.search);
+var date=new Date();
+var time=date.getTime();
+var resolution= screen.width + "x" + screen.height;
+document.writeln("<img src=\"http://www.h-node.com/traffica/count.php?sid="+sid+"&p="+thispage+"&r="+referer+"&t="+time+"&res="+resolution+"\" alt=\"\" border=\"0\" />\n");
+}
diff --git a/h-source/admin/Public/index.html b/h-source/admin/Public/index.html
new file mode 100644
index 0000000..8d1c8b6
--- /dev/null
+++ b/h-source/admin/Public/index.html
@@ -0,0 +1 @@
+
diff --git a/h-source/admin/README.txt b/h-source/admin/README.txt
new file mode 100644
index 0000000..4ff6db4
--- /dev/null
+++ b/h-source/admin/README.txt
@@ -0,0 +1,62 @@
+
+== Introduction ==
+
+h-admin is a web software that has to be used together with h-source. It is formed by a set of files used to administrate the h-source tables
+
+
+== Installation and configuration ==
+
+In order to use h-source you have to install h-source (you can't use h-admin if you have not installed h-source before). In order to install h-source read the README.txt file inside the h-source package
+
+In order to use h-admin you have to usa the same database already created for h-source. You have only to add some (5) new tables.
+
+The new tables that have to be created are written inside the file tables.sql (of the h-admin package).
+
+After you have created the new tables as indicated inside the tables.sql file, open the Config/Config.php file
+
+You have to set the following constants:
+
+ DB: name of the database (the database just created for h-source)
+ USER: database user
+ PWD: database password
+ HOST: name of the mysql server (usually localhost)
+
+ DOMAIN_NAME: the domain name of the website (use localhost or create a virtual host in your web server)
+
+Now you have to copy the extracted h-admin files inside the DocumentRoot of your server. You can choose to leave all the files inside the DocumentRoot or not, see the explanations in this page (http://www.easygiant.org/learn/index/6).
+
+You have now to assure that the allowOverride directive is active in the configuration file of your Apache server. You have to activate the allowOverride directive for the folder inside which you have saved the h-admin files (and the index.php file). If you have not activated the allowOverride directive, then your URL won't be interpreted by the mod_rewrite module (you won't be able to use h-admin). In a GNU/Linux system the apache configuration file is usually saved at /etc/apache2/apache2.conf.
+
+Direct your browser to the following URL:
+
+ http://DOMAIN_NAME/
+
+where DOMAIN_NAME is the domain name you have previously set (perhaps localhost). You should see the login page of the h-admin software.
+
+user: admin
+password: admin
+
+
+== Learn the EasyGiant PHP framework ==
+
+Since h-admin is an application of the EasyGiant PHP framework you can use the EasyGiant features in order to modify the h-admin source code. Visit www.easygiant.org
+
+
+// h-admin, a web software to build a community of people that want to share their hardware information.
+// Copyright (C) 2010 Antonio Gallo (h-admin-copyright.txt)
+//
+// This file is part of h-admin
+//
+// h-admin is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// h-admin is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with h-admin. If not, see <http://www.gnu.org/licenses/>.
+
diff --git a/h-source/admin/h-admin-copyright.txt b/h-source/admin/h-admin-copyright.txt
new file mode 100644
index 0000000..06d8fc1
--- /dev/null
+++ b/h-source/admin/h-admin-copyright.txt
@@ -0,0 +1,16 @@
+The h-admin software is a PHP software written thanks to the EasyGiant framework (see COPYRIGHT.txt)
+Copyright (C) 2010 Antonio Gallo
+
+h-admin is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+h-admin is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with h-admin. If not, see <http://www.gnu.org/licenses/>.
+
diff --git a/h-source/admin/index.php b/h-source/admin/index.php
new file mode 100755
index 0000000..dc616db
--- /dev/null
+++ b/h-source/admin/index.php
@@ -0,0 +1,16 @@
+<?php
+
+// All EasyGiant code is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
+// See COPYRIGHT.txt and LICENSE.txt.
+
+define('EG','allowed');
+
+define('DS', DIRECTORY_SEPARATOR);
+define('ROOT', dirname(__FILE__));
+define('APPLICATION_PATH','Application'); //name of the folder that contains the application files
+
+// call the config file and the bootstrap file
+require_once (ROOT . DS . 'Config' . DS . 'Config.php');
+require_once (ROOT . DS . 'Config' . DS . 'Route.php');
+require_once (ROOT . DS . 'Library' . DS . 'Bootstrap.php');
+// echo 'It works!'; \ No newline at end of file
diff --git a/h-source/admin/tables.sql b/h-source/admin/tables.sql
new file mode 100644
index 0000000..56bc087
--- /dev/null
+++ b/h-source/admin/tables.sql
@@ -0,0 +1,64 @@
+# h-admin, a web software to build a community of people that want to share their hardware information.
+# Copyright (C) 2010 Antonio Gallo (h-admin-copyright.txt)
+#
+# This file is part of h-admin
+#
+# h-admin is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# h-admin is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with h-admin. If not, see <http://www.gnu.org/licenses/>.
+
+create table adminusers (
+ id_user INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
+ username VARCHAR(80) binary NOT NULL,
+ password CHAR(40) binary NOT NULL,
+ last_failure INT UNSIGNED NOT NULL,
+ has_confirmed INT UNSIGNED NOT NULL,
+ unique(username),
+ index(username, password)
+)engine=innodb;
+
+create table admingroups (
+ id_group INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
+ name VARCHAR(30) binary NOT NULL,
+ unique(name)
+)engine=innodb;
+
+create table adminusers_groups (
+ id_user int(11) UNSIGNED not null,
+ id_group int(11) UNSIGNED not null,
+ index group_indx(id_group),
+ index user_indx(id_user),
+ foreign key group_fky(id_group) references admingroups (id_group),
+ foreign key user_fky(id_user) references adminusers (id_user),
+ unique (id_group,id_user)
+)engine=innodb;
+
+
+insert into adminusers (username,password) values ('admin',sha1('admin'));
+
+
+CREATE TABLE adminsessions (
+ uid CHAR(32) NOT NULL,
+ token CHAR(32) NOT NULL,
+ id_user INT UNSIGNED NOT NULL,
+ creation_date INT UNSIGNED NOT NULL,
+ user_agent CHAR(32) NOT NULL,
+ INDEX(uid)
+)engine=innodb;
+
+
+create table accesses (
+ id int(12) not null auto_increment primary key,
+ ip char(20) not null,data char(10) not null,
+ ora char(8) not null,
+ username varchar(30) not null
+);
diff --git a/h-source/config.xml b/h-source/config.xml
index 980baa9..30b0dd5 100644
--- a/h-source/config.xml
+++ b/h-source/config.xml
@@ -5,35 +5,35 @@
<mod>
<type>TopLink</type>
<text>Help</text>
- <href><![CDATA[http://h-node.org/help/page/en/Help]]></href>
+ <href><![CDATA[https://h-node.org/help/page/en/Help]]></href>
</mod>
</en>
<it>
<mod>
<type>TopLink</type>
<text>Aiuto</text>
- <href><![CDATA[http://h-node.org/help/page/it/Help]]></href>
+ <href><![CDATA[https://h-node.org/help/page/it/Help]]></href>
</mod>
</it>
<es>
<mod>
<type>TopLink</type>
<text>Ayuda</text>
- <href><![CDATA[http://h-node.org/help/page/es/Help]]></href>
+ <href><![CDATA[https://h-node.org/help/page/es/Help]]></href>
</mod>
</es>
<fr>
<mod>
<type>TopLink</type>
<text>Télécharger</text>
- <href><![CDATA[http://h-node.org/help/page/fr/Help]]></href>
+ <href><![CDATA[https://h-node.org/help/page/fr/Help]]></href>
</mod>
</fr>
<gr>
<mod>
<type>TopLink</type>
<text>Βοήθεια</text>
- <href><![CDATA[http://h-node.org/help/page/gr/Help]]></href>
+ <href><![CDATA[https://h-node.org/help/page/gr/Help]]></href>
</mod>
</gr>
</help_page_link>
@@ -42,35 +42,35 @@
<mod>
<type>TopLink</type>
<text>FAQ</text>
- <href><![CDATA[http://h-node.org/faq/page/en/FAQ]]></href>
+ <href><![CDATA[https://h-node.org/faq/page/en/FAQ]]></href>
</mod>
</en>
<it>
<mod>
<type>TopLink</type>
<text>FAQ</text>
- <href><![CDATA[http://h-node.org/faq/page/it/FAQ]]></href>
+ <href><![CDATA[https://h-node.org/faq/page/it/FAQ]]></href>
</mod>
</it>
<es>
<mod>
<type>TopLink</type>
<text>FAQ</text>
- <href><![CDATA[http://h-node.org/faq/page/es/FAQ]]></href>
+ <href><![CDATA[https://h-node.org/faq/page/es/FAQ]]></href>
</mod>
</es>
<fr>
<mod>
<type>TopLink</type>
<text>FAQ</text>
- <href><![CDATA[http://h-node.org/faq/page/fr/FAQ]]></href>
+ <href><![CDATA[https://h-node.org/faq/page/fr/FAQ]]></href>
</mod>
</fr>
<gr>
<mod>
<type>TopLink</type>
<text>FAQ</text>
- <href><![CDATA[http://h-node.org/faq/page/gr/FAQ]]></href>
+ <href><![CDATA[https://h-node.org/faq/page/gr/FAQ]]></href>
</mod>
</gr>
</faq_link>
@@ -81,16 +81,7 @@
<type>raw</type>
<text><![CDATA[
- <div style="padding:0.5em;background:#FDF5E6;margin:0.5em;border-top:1px solid #BA55D3;border-bottom:1px solid #BA55D3;color:#BA55D3;font-size:16px;">Notice 1 EN
- </div>
-
- ]]></text>
- </mod>
- <mod>
- <type>raw</type>
- <text><![CDATA[
-
- <div style="padding:0.5em;background:#FFA07A;margin:0.5em;border-top:1px solid #FF4500;border-bottom:1px solid #FF4500;color:#DC143C;font-size:16px;">Notice 2 EN
+ <div style="padding:0.5em;background:#FFA07A;margin:0.5em;border-top:1px solid #FF4500;border-bottom:1px solid #FF4500;color:#DC143C;font-size:16px;">If you insert a new printer to h-node, please try to verify if the printer tracks users (see <a href="https://www.eff.org/issues/printers">here</a>) and fill the entry named "<i>does it adopt any techniques to track users?</i>"
</div>
]]></text>
@@ -101,16 +92,7 @@
<type>raw</type>
<text><![CDATA[
- <div style="padding:0.5em;background:#FDF5E6;margin:0.5em;border-top:1px solid #BA55D3;border-bottom:1px solid #BA55D3;color:#BA55D3;font-size:16px;">Notice 1 IT
- </div>
-
- ]]></text>
- </mod>
- <mod>
- <type>raw</type>
- <text><![CDATA[
-
- <div style="padding:0.5em;background:#FFA07A;margin:0.5em;border-top:1px solid #FF4500;border-bottom:1px solid #FF4500;color:#DC143C;font-size:16px;">Notice 2 IT
+ <div style="padding:0.5em;background:#FFA07A;margin:0.5em;border-top:1px solid #FF4500;border-bottom:1px solid #FF4500;color:#DC143C;font-size:16px;">Se inserite una nuova stampante nel database di h-node per favore provate a controllare se traccia gli utenti (leggete <a href="https://www.eff.org/issues/printers">qui</a>) e riempite il campo denominato "<i>adotta qualche tecnica per tracciare gli utenti?</i>"
</div>
]]></text>
@@ -121,16 +103,7 @@
<type>raw</type>
<text><![CDATA[
- <div style="padding:0.5em;background:#FDF5E6;margin:0.5em;border-top:1px solid #BA55D3;border-bottom:1px solid #BA55D3;color:#BA55D3;font-size:16px;">Notice 1 ES
- </div>
-
- ]]></text>
- </mod>
- <mod>
- <type>raw</type>
- <text><![CDATA[
-
- <div style="padding:0.5em;background:#FFA07A;margin:0.5em;border-top:1px solid #FF4500;border-bottom:1px solid #FF4500;color:#DC143C;font-size:16px;">Notice 2 ES
+ <div style="padding:0.5em;background:#FFA07A;margin:0.5em;border-top:1px solid #FF4500;border-bottom:1px solid #FF4500;color:#DC143C;font-size:16px;">Si inserta una nueva impresora a h-node, por favor verifique si la impresora rastrea a los usuarios (vea <a href="https://www.eff.org/issues/printers">aquí</a>) y llene la entrada "¿adopta alguna técnica para rastrear a los usuarios?"
</div>
]]></text>
@@ -141,16 +114,7 @@
<type>raw</type>
<text><![CDATA[
- <div style="padding:0.5em;background:#FDF5E6;margin:0.5em;border-top:1px solid #BA55D3;border-bottom:1px solid #BA55D3;color:#BA55D3;font-size:16px;">Notice 1 FR
- </div>
-
- ]]></text>
- </mod>
- <mod>
- <type>raw</type>
- <text><![CDATA[
-
- <div style="padding:0.5em;background:#FFA07A;margin:0.5em;border-top:1px solid #FF4500;border-bottom:1px solid #FF4500;color:#DC143C;font-size:16px;">Notice 2 FR
+ <div style="padding:0.5em;background:#FFA07A;margin:0.5em;border-top:1px solid #FF4500;border-bottom:1px solid #FF4500;color:#DC143C;font-size:16px;">Si vous ajoutez une nouvelle imprimante à h-node, veuillez essayer de vérifier si l'imprimante surveille les utilisateurs (voir <a href="https://www.eff.org/issues/printers">ici</a>) et remplir l'entrée intitulée "utilise-t-elle des techniques pour surveiller les utilisateurs ?"
</div>
]]></text>
@@ -164,7 +128,7 @@
<type>raw</type>
<div>discover_hardware</div>
<text><![CDATA[
- <a href="http://h-node.org/wiki/page/en/Discover-your-hardware"><img src="http://h-node.org/Public/Img/discover.png"></a>
+ <a href="https://h-node.org/wiki/page/en/Discover-your-hardware"><img src="https://h-node.org/Public/Img/discover.png"></a>
]]></text>
</mod>
</en>
@@ -173,9 +137,7 @@
<mod>
<type>raw</type>
<text><![CDATA[
- <div style="text-align:center;"><a href="http://www.fsf.org/associate/support_freedom/join_fsf?referrer=2442">
- <img title="Help protect your freedom, join the Free Software Foundation" alt="Support freedom" src="https://static.fsf.org/nosvn/appeal2010/widget-thin.png">
- </a></div>
+ <div style="text-align:center;padding-bottom:10px;"><a href="http://www.fsf.org/associate/support_freedom/join_fsf?referrer=2442"><img src="//static.fsf.org/fsforg/img/thin-image.png" alt="Support freedom" title="Help protect your freedom, join the Free Software Foundation" /></a></div>
]]></text>
</mod>
<mod>
@@ -183,7 +145,7 @@
<text><![CDATA[
<div style="margin:3px 0px;text-align:left;font:normal 14px/1 sans-serif,arial,Verdana;">supported by</div>
<div style="padding:5px 10px;text-align:left;border-top:2px solid #000;margin-bottom:2.5em;">
- <a href="http://www.fsf.org"><img style="margin-left:-5px;margin-top:3px;" width="175px" align="left" src="http://www.gnu.org/graphics/logo-fsf.org-tiny.png"></a>
+ <a href="http://www.fsf.org"><img style="margin-left:-5px;margin-top:3px;" width="175px" align="left" src="https://www.gnu.org/graphics/logo-fsf.org-tiny.png"></a>
</div>
]]></text>
@@ -193,7 +155,7 @@
<text><![CDATA[
<div style="margin:3px 0px;text-align:left;font:normal 14px/1 sans-serif,arial,Verdana;">subscribe to our</div>
<div style="background:#B7F18C;padding:5px 10px;text-align:left;border-top:2px solid #015512;">
- <a href="http://www.h-node.org/wiki/page/en/mailing-lists"><img height="50px" align="middle" src="http://www.h-node.org/Public/Img/mailing.png"></a>
+ <a href="https://h-node.org/wiki/page/en/mailing-lists"><img height="50px" align="middle" src="https://h-node.org/Public/Img/mailing.png"></a>
</div>
]]></text>
@@ -204,7 +166,7 @@
<type>raw</type>
<text><![CDATA[
<div style="margin:16px 0px 3px 0px;text-align:left;font:normal 14px/1 sans-serif,arial,Verdana;">client for h-node</div>
- <div style="text-align:left;border-top:2px solid #1E90FF;padding:4px 4px 4px 8px;background:#E0FFFF;font:normal 12px/1.5 sans-serif,arial,Verdana;">Please help in the development of the client for h-node (h-client project). See <a href="http://www.h-node.org/wiki/page/en/client-for-h-node-com">here</a> and <a href="http://savannah.nongnu.org/projects/h-client/">here</a>
+ <div style="text-align:left;border-top:2px solid #1E90FF;padding:4px 4px 4px 8px;background:#E0FFFF;font:normal 12px/1.5 sans-serif,arial,Verdana;">Please help in the development of the client for h-node (h-client project). See <a href="https://h-node.org/wiki/page/en/client-for-h-node-com">here</a> and <a href="http://savannah.nongnu.org/projects/h-client/">here</a>
</div>
]]></text>
@@ -215,7 +177,7 @@
<type>raw</type>
<text><![CDATA[
<div style="margin:16px 0px 3px 0px;text-align:left;font:normal 14px/1 sans-serif,arial,Verdana;">related projects</div>
- <div style="text-align:left;border-top:2px solid #1E90FF;padding:4px 4px 4px 8px;background:#E0FFFF;font:normal 12px/1.5 sans-serif,arial,Verdana;">Please help in the development of the <a href="http://www.h-node.org/source/ht/ismyhwok_25thSep2010-1.tar.gz">IsMyHWOK</a> software, a different h-node client
+ <div style="text-align:left;border-top:2px solid #1E90FF;padding:4px 4px 4px 8px;background:#E0FFFF;font:normal 12px/1.5 sans-serif,arial,Verdana;">Please help in the development of the <a href="https://h-node.org/source/ht/ismyhwok_25thSep2010-1.tar.gz">IsMyHWOK</a> software, a different h-node client
</div>
]]></text>
@@ -227,19 +189,7 @@
<text><![CDATA[
<div style="margin:16px 0px 3px 0px;text-align:left;font:normal 14px/1 sans-serif,arial,Verdana;">download the source code</div>
<div style="text-align:left;border-top:2px solid #FF4500;padding:4px 4px 0px 4px;">
- <a href="http://www.h-node.org/source/notes_0.2.html"><img width="180px" src="http://www.h-node.org/Public/Img/download_code_gpl3.png"></a>
- </div>
-
- ]]></text>
-
- </mod>
- <mod>
-
- <type>raw</type>
- <text><![CDATA[
- <div style="margin:12px 0px 3px 0px;text-align:left;font:normal 14px/1 sans-serif,arial,Verdana;">join us at</div>
- <div style="background:#B7F18C;padding:5px 10px;text-align:left;border-top:2px solid #015512;">
- <a href="http://identi.ca/group/hnode"><img height="70px" align="middle" src="http://upload.wikimedia.org/wikipedia/commons/thumb/e/e4/Identi.ca_logo_svg.svg/200px-Identi.ca_logo_svg.svg.png"></a>
+ <a href="https://h-node.org/source/notes_0.2.html"><img width="180px" src="https://h-node.org/Public/Img/download_code_gpl3.png"></a>
</div>
]]></text>
@@ -289,10 +239,6 @@
</div>
<div>
- <a href="http://www.musix.org.ar/">Musix GNU+Linux</a>
- </div>
-
- <div>
<a href="https://parabolagnulinux.org/">Parabola GNU/Linux</a>
</div>
@@ -304,9 +250,7 @@
<a href="http://www.ututo.org/">Ututo</a>
</div>
- <div>
- <a href="http://venenux.org/">Venenux</a>
- </div>
+
</div>
@@ -318,9 +262,7 @@
<mod>
<type>raw</type>
<text><![CDATA[
- <div style="text-align:center;"><a href="http://www.fsf.org/associate/support_freedom/join_fsf?referrer=2442">
- <img title="Help protect your freedom, join the Free Software Foundation" alt="Support freedom" src="https://static.fsf.org/nosvn/appeal2010/widget-thin.png">
- </a></div>
+ <div style="text-align:center;padding-bottom:10px;"><a href="http://www.fsf.org/associate/support_freedom/join_fsf?referrer=2442"><img src="//static.fsf.org/fsforg/img/thin-image.png" alt="Support freedom" title="Help protect your freedom, join the Free Software Foundation" /></a></div>
]]></text>
</mod>
<mod>
@@ -328,7 +270,7 @@
<text><![CDATA[
<div style="margin:3px 0px;text-align:left;font:normal 14px/1 sans-serif,arial,Verdana;">supportato da</div>
<div style="padding:5px 10px;text-align:left;border-top:2px solid #000;margin-bottom:2.5em;">
- <a href="http://www.fsf.org"><img style="margin-left:-5px;margin-top:3px;" width="175px" align="left" src="http://www.gnu.org/graphics/logo-fsf.org-tiny.png"></a>
+ <a href="http://www.fsf.org"><img style="margin-left:-5px;margin-top:3px;" width="175px" align="left" src="https://www.gnu.org/graphics/logo-fsf.org-tiny.png"></a>
</div>
]]></text>
@@ -338,7 +280,7 @@
<text><![CDATA[
<div style="margin:3px 0px;text-align:left;font:normal 14px/1 sans-serif,arial,Verdana;">iscriviti alla nostra</div>
<div style="background:#B7F18C;padding:5px 10px;text-align:left;border-top:2px solid #015512;">
- <a href="http://www.h-node.org/wiki/page/en/mailing-lists"><img height="50px" align="middle" src="http://www.h-node.org/Public/Img/mailing.png"></a>
+ <a href="https://h-node.org/wiki/page/en/mailing-lists"><img height="50px" align="middle" src="https://h-node.org/Public/Img/mailing.png"></a>
</div>
]]></text>
@@ -349,7 +291,7 @@
<type>raw</type>
<text><![CDATA[
<div style="margin:16px 0px 3px 0px;text-align:left;font:normal 14px/1 sans-serif,arial,Verdana;">client per h-node</div>
- <div style="text-align:left;border-top:2px solid #1E90FF;padding:4px 4px 4px 8px;background:#E0FFFF;font:normal 12px/1.5 sans-serif,arial,Verdana;">Puoi aiutare nello sviluppo del client per h-node (progetto h-client). Leggi <a href="http://www.h-node.org/wiki/page/en/client-for-h-node-com">qui</a> e <a href="http://savannah.nongnu.org/projects/h-client/">qui</a>
+ <div style="text-align:left;border-top:2px solid #1E90FF;padding:4px 4px 4px 8px;background:#E0FFFF;font:normal 12px/1.5 sans-serif,arial,Verdana;">Puoi aiutare nello sviluppo del client per h-node (progetto h-client). Leggi <a href="https://h-node.org/wiki/page/en/client-for-h-node-com">qui</a> e <a href="http://savannah.nongnu.org/projects/h-client/">qui</a>
</div>
]]></text>
@@ -360,7 +302,7 @@
<type>raw</type>
<text><![CDATA[
<div style="margin:16px 0px 3px 0px;text-align:left;font:normal 14px/1 sans-serif,arial,Verdana;">progetti correlati</div>
- <div style="text-align:left;border-top:2px solid #1E90FF;padding:4px 4px 4px 8px;background:#E0FFFF;font:normal 12px/1.5 sans-serif,arial,Verdana;">Puoi aiutare nello sviluppo del software <a href="http://www.h-node.org/source/ht/ismyhwok_25thSep2010-1.tar.gz">IsMyHWOK</a>, un diverso client per h-node
+ <div style="text-align:left;border-top:2px solid #1E90FF;padding:4px 4px 4px 8px;background:#E0FFFF;font:normal 12px/1.5 sans-serif,arial,Verdana;">Puoi aiutare nello sviluppo del software <a href="https://h-node.org/source/ht/ismyhwok_25thSep2010-1.tar.gz">IsMyHWOK</a>, un diverso client per h-node
</div>
]]></text>
@@ -372,19 +314,7 @@
<text><![CDATA[
<div style="margin:16px 0px 3px 0px;text-align:left;font:normal 14px/1 sans-serif,arial,Verdana;">scarica il codice sorgente</div>
<div style="text-align:left;border-top:2px solid #FF4500;padding:4px 4px 0px 4px;">
- <a href="http://www.h-node.org/source/notes_0.2.html"><img width="180px" src="http://www.h-node.org/Public/Img/download_code_gpl3.png"></a>
- </div>
-
- ]]></text>
-
- </mod>
- <mod>
-
- <type>raw</type>
- <text><![CDATA[
- <div style="margin:12px 0px 3px 0px;text-align:left;font:normal 14px/1 sans-serif,arial,Verdana;">unisciti a noi</div>
- <div style="background:#B7F18C;padding:5px 10px;text-align:left;border-top:2px solid #015512;">
- <a href="http://identi.ca/group/hnode"><img height="70px" align="middle" src="http://upload.wikimedia.org/wikipedia/commons/thumb/e/e4/Identi.ca_logo_svg.svg/200px-Identi.ca_logo_svg.svg.png"></a>
+ <a href="https://h-node.org/source/notes_0.2.html"><img width="180px" src="https://h-node.org/Public/Img/download_code_gpl3.png"></a>
</div>
]]></text>
@@ -434,10 +364,6 @@
</div>
<div>
- <a href="http://www.musix.org.ar/">Musix GNU+Linux</a>
- </div>
-
- <div>
<a href="https://parabolagnulinux.org/">Parabola GNU/Linux</a>
</div>
@@ -449,9 +375,7 @@
<a href="http://www.ututo.org/">Ututo</a>
</div>
- <div>
- <a href="http://venenux.org/">Venenux</a>
- </div>
+
</div>
@@ -463,9 +387,7 @@
<mod>
<type>raw</type>
<text><![CDATA[
- <div style="text-align:center;"><a href="http://www.fsf.org/associate/support_freedom/join_fsf?referrer=2442">
- <img title="Help protect your freedom, join the Free Software Foundation" alt="Support freedom" src="https://static.fsf.org/nosvn/appeal2010/widget-thin.png">
- </a></div>
+ <div style="text-align:center;padding-bottom:10px;"><a href="http://www.fsf.org/associate/support_freedom/join_fsf?referrer=2442"><img src="//static.fsf.org/fsforg/img/thin-image.png" alt="Support freedom" title="Help protect your freedom, join the Free Software Foundation" /></a></div>
]]></text>
</mod>
<mod>
@@ -473,7 +395,7 @@
<text><![CDATA[
<div style="margin:3px 0px;text-align:left;font:normal 14px/1 sans-serif,arial,Verdana;">con el apoyo de</div>
<div style="padding:5px 10px;text-align:left;border-top:2px solid #000;margin-bottom:2.5em;">
- <a href="http://www.fsf.org"><img style="margin-left:-5px;margin-top:3px;" width="175px" align="left" src="http://www.gnu.org/graphics/logo-fsf.org-tiny.png"></a>
+ <a href="http://www.fsf.org"><img style="margin-left:-5px;margin-top:3px;" width="175px" align="left" src="https://www.gnu.org/graphics/logo-fsf.org-tiny.png"></a>
</div>
]]></text>
@@ -483,7 +405,7 @@
<text><![CDATA[
<div style="margin:3px 0px;text-align:left;font:normal 14px/1 sans-serif,arial,Verdana;">suscríbase a nuestra</div>
<div style="background:#B7F18C;padding:5px 10px;text-align:left;border-top:2px solid #015512;">
- <a href="http://www.h-node.org/wiki/page/en/mailing-lists"><img height="50px" align="middle" src="http://www.h-node.org/Public/Img/mailing.png"></a>
+ <a href="https://h-node.org/wiki/page/en/mailing-lists"><img height="50px" align="middle" src="https://h-node.org/Public/Img/mailing.png"></a>
</div>
]]></text>
@@ -494,7 +416,7 @@
<type>raw</type>
<text><![CDATA[
<div style="margin:16px 0px 3px 0px;text-align:left;font:normal 14px/1 sans-serif,arial,Verdana;">cliente para h-node</div>
- <div style="text-align:left;border-top:2px solid #1E90FF;padding:4px 4px 4px 8px;background:#E0FFFF;font:normal 12px/1.5 sans-serif,arial,Verdana;">Por favor ayude en el desarrollo del cliente de h-node (proyecto h-client). Vea <a href="http://www.h-node.org/wiki/page/en/client-for-h-node-com">aquí</a> y <a href="http://savannah.nongnu.org/projects/h-client/">aquí</a>
+ <div style="text-align:left;border-top:2px solid #1E90FF;padding:4px 4px 4px 8px;background:#E0FFFF;font:normal 12px/1.5 sans-serif,arial,Verdana;">Por favor ayude en el desarrollo del cliente de h-node (proyecto h-client). Vea <a href="https://h-node.org/wiki/page/en/client-for-h-node-com">aquí</a> y <a href="http://savannah.nongnu.org/projects/h-client/">aquí</a>
</div>
]]></text>
@@ -505,7 +427,7 @@
<type>raw</type>
<text><![CDATA[
<div style="margin:16px 0px 3px 0px;text-align:left;font:normal 14px/1 sans-serif,arial,Verdana;">proyectos relacionados</div>
- <div style="text-align:left;border-top:2px solid #1E90FF;padding:4px 4px 4px 8px;background:#E0FFFF;font:normal 12px/1.5 sans-serif,arial,Verdana;">Por favor ayuda en el desarrollo del programa <a href="http://www.h-node.org/source/ht/ismyhwok_25thSep2010-1.tar.gz">IsMyHWOK</a>, un cliente diferente para h-node
+ <div style="text-align:left;border-top:2px solid #1E90FF;padding:4px 4px 4px 8px;background:#E0FFFF;font:normal 12px/1.5 sans-serif,arial,Verdana;">Por favor ayuda en el desarrollo del programa <a href="https://h-node.org/source/ht/ismyhwok_25thSep2010-1.tar.gz">IsMyHWOK</a>, un cliente diferente para h-node
</div>
]]></text>
@@ -517,19 +439,7 @@
<text><![CDATA[
<div style="margin:16px 0px 3px 0px;text-align:left;font:normal 14px/1 sans-serif,arial,Verdana;">descargue el código fuente</div>
<div style="text-align:left;border-top:2px solid #FF4500;padding:4px 4px 0px 4px;">
- <a href="http://www.h-node.org/source/notes_0.2.html"><img width="180px" src="http://www.h-node.org/Public/Img/download_code_gpl3.png"></a>
- </div>
-
- ]]></text>
-
- </mod>
- <mod>
-
- <type>raw</type>
- <text><![CDATA[
- <div style="margin:12px 0px 3px 0px;text-align:left;font:normal 14px/1 sans-serif,arial,Verdana;">únase a nosotros en</div>
- <div style="background:#B7F18C;padding:5px 10px;text-align:left;border-top:2px solid #015512;">
- <a href="http://identi.ca/group/hnode"><img height="70px" align="middle" src="http://upload.wikimedia.org/wikipedia/commons/thumb/e/e4/Identi.ca_logo_svg.svg/200px-Identi.ca_logo_svg.svg.png"></a>
+ <a href="https://h-node.org/source/notes_0.2.html"><img width="180px" src="https://h-node.org/Public/Img/download_code_gpl3.png"></a>
</div>
]]></text>
@@ -579,10 +489,6 @@
</div>
<div>
- <a href="http://www.musix.org.ar/">Musix GNU+Linux</a>
- </div>
-
- <div>
<a href="https://parabolagnulinux.org/">Parabola GNU/Linux</a>
</div>
@@ -594,9 +500,7 @@
<a href="http://www.ututo.org/">Ututo</a>
</div>
- <div>
- <a href="http://venenux.org/">Venenux</a>
- </div>
+
</div>
@@ -612,13 +516,13 @@
<en>
<mod>
<type>raw</type>
- <text><![CDATA[ please read the <a href="http://www.h-node.org/wiki/page/en/guidelines-on-how-to-compile-a-hardware-device-page">guidelines on how to compile a hardware device page</a> ]]></text>
+ <text><![CDATA[ please read the <a href="https://h-node.org/wiki/page/en/guidelines-on-how-to-compile-a-hardware-device-page">guidelines on how to compile a hardware device page</a> ]]></text>
</mod>
</en>
<it>
<mod>
<type>raw</type>
- <text><![CDATA[ per favore leggi la <a href="http://www.h-node.org/wiki/page/en/guidelines-on-how-to-compile-a-hardware-device-page">guida su come compilare una pagina di hardware</a> ]]></text>
+ <text><![CDATA[ per favore leggi la <a href="https://h-node.org/wiki/page/en/guidelines-on-how-to-compile-a-hardware-device-page">guida su come compilare una pagina di hardware</a> ]]></text>
</mod>
</it>
</how_to_compile>
@@ -626,19 +530,19 @@
<en>
<mod>
<type>raw</type>
- <text><![CDATA[ <a target="_blank" href="http://www.h-node.org/help/page/en/discover-your-hardware#The%20model%20name%20of%20your%20notebook" target="_blank">learn how to find it</a> ]]></text>
+ <text><![CDATA[ <a target="_blank" href="https://h-node.org/help/page/en/discover-your-hardware#The%20model%20name%20of%20your%20notebook" target="_blank">learn how to find it</a> ]]></text>
</mod>
</en>
<it>
<mod>
<type>raw</type>
- <text><![CDATA[ <a target="_blank" href="http://www.h-node.org/help/page/en/Scopri-il-tuo-hardware#Il%20modello%20del%20tuo%20notebook" target="_blank">scopri come individuarlo</a> ]]></text>
+ <text><![CDATA[ <a target="_blank" href="https://h-node.org/help/page/en/Scopri-il-tuo-hardware#Il%20modello%20del%20tuo%20notebook" target="_blank">scopri come individuarlo</a> ]]></text>
</mod>
</it>
<es>
<mod>
<type>raw</type>
- <text><![CDATA[ <a target="_blank" href="http://www.h-node.org/help/page/en/Descubra-su-hardware#El%20modelo%20de%20su%20computador%20port%C3%A1til" target="_blank">aprenda como encontrarlo</a> ]]></text>
+ <text><![CDATA[ <a target="_blank" href="https://h-node.org/help/page/en/Descubra-su-hardware#El%20modelo%20de%20su%20computador%20port%C3%A1til" target="_blank">aprenda como encontrarlo</a> ]]></text>
</mod>
</es>
</model_name_entry_help_label>
@@ -646,37 +550,37 @@
<en>
<mod>
<type>raw</type>
- <text><![CDATA[ <a target="_blank" href="http://h-node.org/wiki/page/en/wiki-tutorial">discover all the wiki tags</a> ]]></text>
+ <text><![CDATA[ <a target="_blank" href="https://h-node.org/wiki/page/en/wiki-tutorial">discover all the wiki tags</a> ]]></text>
</mod>
</en>
<it>
<mod>
<type>raw</type>
- <text><![CDATA[ <a target="_blank" href="http://h-node.org/wiki/page/it/tutorial-della-wiki">scopri tutti i tag della wiki</a> ]]></text>
+ <text><![CDATA[ <a target="_blank" href="https://h-node.org/wiki/page/it/tutorial-della-wiki">scopri tutti i tag della wiki</a> ]]></text>
</mod>
</it>
<es>
<mod>
<type>raw</type>
- <text><![CDATA[ <a target="_blank" href="http://h-node.org/wiki/page/es/tutorial-del-wiki">mostrar todas las etiquetas del wiki</a> ]]></text>
+ <text><![CDATA[ <a target="_blank" href="https://h-node.org/wiki/page/es/tutorial-del-wiki">mostrar todas las etiquetas del wiki</a> ]]></text>
</mod>
</es>
<fr>
<mod>
<type>raw</type>
- <text><![CDATA[ <a target="_blank" href="http://h-node.org/wiki/page/en/wiki-tutorial">voir tous les tags wiki</a> ]]></text>
+ <text><![CDATA[ <a target="_blank" href="https://h-node.org/wiki/page/en/wiki-tutorial">voir tous les tags wiki</a> ]]></text>
</mod>
</fr>
<de>
<mod>
<type>raw</type>
- <text><![CDATA[ <a target="_blank" href="http://h-node.org/wiki/page/en/wiki-tutorial">Wiki-Elemente</a> ]]></text>
+ <text><![CDATA[ <a target="_blank" href="https://h-node.org/wiki/page/en/wiki-tutorial">Wiki-Elemente</a> ]]></text>
</mod>
</de>
<gr>
<mod>
<type>raw</type>
- <text><![CDATA[ <a target="_blank" href="http://h-node.org/wiki/page/en/wiki-tutorial">Wiki-Elemente</a> ]]></text>
+ <text><![CDATA[ <a target="_blank" href="https://h-node.org/wiki/page/en/wiki-tutorial">Wiki-Elemente</a> ]]></text>
</mod>
</gr>
</description_entry_help_label>
@@ -761,19 +665,19 @@
<en>
<mod>
<type>raw</type>
- <text><![CDATA[ <a target="_blank" href="http://www.h-node.org/wiki/page/en/discover-your-hardware#The%20VendorID:ProductID%20code%20of%20your%20device" target="blank">learn how to find it</a> ]]></text>
+ <text><![CDATA[ <a target="_blank" href="https://h-node.org/wiki/page/en/discover-your-hardware#The%20VendorID:ProductID%20code%20of%20your%20device" target="blank">learn how to find it</a> ]]></text>
</mod>
</en>
<it>
<mod>
<type>raw</type>
- <text><![CDATA[ <a target="_blank" href="http://www.h-node.org/wiki/page/en/Scopri-il-tuo-hardware#Il%20codice%20VendorID:ProductID%20del%20tuo%20dispositivo" target="blank">scopri come individuarlo</a> ]]></text>
+ <text><![CDATA[ <a target="_blank" href="https://h-node.org/wiki/page/en/Scopri-il-tuo-hardware#Il%20codice%20VendorID:ProductID%20del%20tuo%20dispositivo" target="blank">scopri come individuarlo</a> ]]></text>
</mod>
</it>
<es>
<mod>
<type>raw</type>
- <text><![CDATA[ <a target="_blank" href="http://www.h-node.org/wiki/page/en/Descubra-su-hardware#El%20c%C3%B3digo%20VendorID:ProductID%20de%20su%20dispositivo" target="blank">aprenda como encontrarlo</a> ]]></text>
+ <text><![CDATA[ <a target="_blank" href="https://h-node.org/wiki/page/en/Descubra-su-hardware#El%20c%C3%B3digo%20VendorID:ProductID%20de%20su%20dispositivo" target="blank">aprenda como encontrarlo</a> ]]></text>
</mod>
</es>
</vendorid_productid_label>
@@ -785,17 +689,17 @@
<en>
<mod>
<type>raw</type>
- <text><![CDATA[ <a target="_blank" href="http://h-node.org/wiki/page/en/guidelines-on-how-to-compile-a-hardware-device-page#Does%20the%20device%20prevent%20the%20installation%20of%20wifi%20cards%20not-approved%20by%20the%20vendor?" target="_blank">learn how to fill this entry</a> ]]></text>
+ <text><![CDATA[ <a target="_blank" href="https://h-node.org/wiki/page/en/guidelines-on-how-to-compile-a-hardware-device-page#Does%20the%20device%20prevent%20the%20installation%20of%20wifi%20cards%20not-approved%20by%20the%20vendor?" target="_blank">learn how to fill this entry</a> ]]></text>
</mod>
</en>
<it>
<mod>
<type>raw</type>
- <text><![CDATA[ <a target="_blank" href="http://h-node.org/wiki/page/it/guidelines-on-how-to-compile-a-hardware-device-page#Does%20the%20device%20prevent%20the%20installation%20of%20wifi%20cards%20not-approved%20by%20the%20vendor?" target="_blank">guida su come scegliere questo campo</a> ]]></text>
+ <text><![CDATA[ <a target="_blank" href="https://h-node.org/wiki/page/it/guidelines-on-how-to-compile-a-hardware-device-page#Does%20the%20device%20prevent%20the%20installation%20of%20wifi%20cards%20not-approved%20by%20the%20vendor?" target="_blank">guida su come scegliere questo campo</a> ]]></text>
</mod>
</it>
</prevent_wifi_label>
</form>
</notebook>
</devices>
-</config> \ No newline at end of file
+</config>
diff --git a/h-source/dafare.txt b/h-source/dafare.txt
new file mode 100755
index 0000000..48e42d1
--- /dev/null
+++ b/h-source/dafare.txt
@@ -0,0 +1,12 @@
+da fare:
+
+mettere coppie controller,action ->non mettere generic,history - generic,revision
+
+
+
+
+togliere link in wiki?
+
+mettere le coppie che sono accessibili controller,action
+
+controllo username (ctype_alnum) in users e adminusers
diff --git a/h-source/h-source-copyright.txt b/h-source/h-source-copyright.txt
index e41b760..26a08e8 100644..100755
--- a/h-source/h-source-copyright.txt
+++ b/h-source/h-source-copyright.txt
@@ -1,16 +1,16 @@
The h-source software is a PHP software written thanks to the EasyGiant framework (see COPYRIGHT.txt)
Copyright (C) 2010 Antonio Gallo
-h-source is free software: you can redistribute it and/or modify
+This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
-h-source is distributed in the hope that it will be useful,
+This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
-along with h-source. If not, see <http://www.gnu.org/licenses/>.
+along with this program. If not, see <http://www.gnu.org/licenses/>.
diff --git a/h-source/index.php b/h-source/index.php
index dc616db..d76b2ad 100755
--- a/h-source/index.php
+++ b/h-source/index.php
@@ -13,4 +13,4 @@ define('APPLICATION_PATH','Application'); //name of the folder that contains the
require_once (ROOT . DS . 'Config' . DS . 'Config.php');
require_once (ROOT . DS . 'Config' . DS . 'Route.php');
require_once (ROOT . DS . 'Library' . DS . 'Bootstrap.php');
-// echo 'It works!'; \ No newline at end of file
+// echo 'It works!';
diff --git a/h-source/modifiche.txt b/h-source/modifiche.txt
new file mode 100755
index 0000000..4687418
--- /dev/null
+++ b/h-source/modifiche.txt
@@ -0,0 +1,17 @@
+modifiche:
+
+ database:
+
+
+ explorer:
+
+ provare il float left del link hide su explorer
+
+
+
+
+
+
+
+
+
diff --git a/h-source/source/h-admin_0_2.tar.gz b/h-source/source/h-admin_0_2.tar.gz
new file mode 100644
index 0000000..7772f55
--- /dev/null
+++ b/h-source/source/h-admin_0_2.tar.gz
Binary files differ
diff --git a/h-source/source/ht/ismyhwok_25thSep2010-1.tar.gz b/h-source/source/ht/ismyhwok_25thSep2010-1.tar.gz
new file mode 100644
index 0000000..d4774b5
--- /dev/null
+++ b/h-source/source/ht/ismyhwok_25thSep2010-1.tar.gz
Binary files differ
diff --git a/h-source/source/notes_0.2.html b/h-source/source/notes_0.2.html
new file mode 100644
index 0000000..3272ec5
--- /dev/null
+++ b/h-source/source/notes_0.2.html
@@ -0,0 +1,19 @@
+<h1>h-source</h1>
+
+<p>The h-node.com source code (h-source project) is hosted at Savannah. <a href="http://savannah.nongnu.org/projects/h-source/">http://savannah.nongnu.org/projects/h-source/</a></p>
+
+<h1>h-client</h1>
+
+<p>The source code of the client for h-node.com (h-client project) is hosted at Savannah. <a href="http://savannah.nongnu.org/projects/h-client/">http://savannah.nongnu.org/projects/h-client/</a></p>
+
+<h1>h-admin</h1>
+
+<p>h-admin is a set of tools in order to carry out some administrative actions upon the h-source mysql tables (for example change the group of a registered user)</p>
+
+<p>in order to use h-admin you have to have h-source already installed</p>
+
+<p>h-admin and h-source share the same database. You have only to create some new tables in order to use h-admin</p>
+
+<p>You can download the h-admin source code (GPLv3) here:</p>
+
+<p><a href="h-admin_0_2.tar.gz">download link</a></p>
diff --git a/h-source/static/en/cancelled.html b/h-source/static/en/cancelled.html
new file mode 100755
index 0000000..dcc9313
--- /dev/null
+++ b/h-source/static/en/cancelled.html
@@ -0,0 +1,46 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//IT" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+<head>
+
+ <title>donations - h-node.com</title>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
+ <link rel="stylesheet" type="text/css" href="../../Public/Css/main.css">
+ <link rel="Shortcut Icon" href="http://h-node/Public/Img/tab_icon_2.ico" type="image/x-icon">
+
+ <!--[if IE 6]>
+ <link rel="stylesheet" type="text/css" href="../../Public/Css/explorer6.css">
+ <![endif]-->
+
+ <!--[if IE 7]>
+ <link rel="stylesheet" type="text/css" href="../../Public/Css/explorer7.css">
+ <![endif]-->
+
+ <style type='text/css'>
+
+ .donation_desc
+ {
+ margin: 2em 0px;
+ text-align: left;
+ }
+
+ </style>
+
+</head>
+<body>
+
+ <div id="external_header">
+ <div id="header">
+ <img src="http://www.h-node.com/Public/Img/title.png">
+ </div>
+ </div>
+
+ <div id="container">
+
+ <div class="donation_desc">
+ <p>Your donation has been cancelled. Back to the <a href="http://www.h-node.com">home page</a></p>
+ </div>
+
+ </div> <!--fine container-->
+
+</body>
+</html>
diff --git a/h-source/static/en/donations.html b/h-source/static/en/donations.html
new file mode 100755
index 0000000..03dd573
--- /dev/null
+++ b/h-source/static/en/donations.html
@@ -0,0 +1,55 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//IT" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+<head>
+
+ <title>donations - h-node.com</title>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
+ <link rel="stylesheet" type="text/css" href="../../Public/Css/main.css">
+ <link rel="Shortcut Icon" href="http://h-node/Public/Img/tab_icon_2.ico" type="image/x-icon">
+
+ <!--[if IE 6]>
+ <link rel="stylesheet" type="text/css" href="../../Public/Css/explorer6.css">
+ <![endif]-->
+
+ <!--[if IE 7]>
+ <link rel="stylesheet" type="text/css" href="../../Public/Css/explorer7.css">
+ <![endif]-->
+
+ <style type='text/css'>
+
+ .donation_desc
+ {
+ margin: 2em 0px;
+ text-align: left;
+ }
+
+ </style>
+
+</head>
+<body>
+
+ <div id="external_header">
+ <div id="header">
+ <img src="http://www.h-node.com/Public/Img/title.png">
+ </div>
+ </div>
+
+ <div id="container">
+
+ <div class="donation_desc">
+ <!--<p>The h-node project is growing and we are planning to implement lots of new features in the future</p>
+ <p>If you believe in this project, you can contribute by making a donation.</p>-->
+ <p>
+ <form action="https://www.paypal.com/cgi-bin/webscr" method="post">
+ <input type="hidden" name="cmd" value="_s-xclick">
+ <input type="hidden" name="hosted_button_id" value="44EPL5MG6XVFQ">
+ <input type="image" src="https://www.paypal.com/en_GB/i/btn/btn_donate_LG.gif" border="0" name="submit" alt="PayPal - The safer, easier way to pay online.">
+ <img alt="" border="0" src="https://www.paypal.com/it_IT/i/scr/pixel.gif" width="1" height="1">
+ </form>
+ </p>
+ </div>
+
+ </div> <!--fine container-->
+
+</body>
+</html>
diff --git a/h-source/static/en/thanks.html b/h-source/static/en/thanks.html
new file mode 100755
index 0000000..231b7af
--- /dev/null
+++ b/h-source/static/en/thanks.html
@@ -0,0 +1,46 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//IT" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+<head>
+
+ <title>donations - h-node.com</title>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
+ <link rel="stylesheet" type="text/css" href="../../Public/Css/main.css">
+ <link rel="Shortcut Icon" href="http://h-node/Public/Img/tab_icon_2.ico" type="image/x-icon">
+
+ <!--[if IE 6]>
+ <link rel="stylesheet" type="text/css" href="../../Public/Css/explorer6.css">
+ <![endif]-->
+
+ <!--[if IE 7]>
+ <link rel="stylesheet" type="text/css" href="../../Public/Css/explorer7.css">
+ <![endif]-->
+
+ <style type='text/css'>
+
+ .donation_desc
+ {
+ margin: 2em 0px;
+ text-align: left;
+ }
+
+ </style>
+
+</head>
+<body>
+
+ <div id="external_header">
+ <div id="header">
+ <img src="http://www.h-node.com/Public/Img/title.png">
+ </div>
+ </div>
+
+ <div id="container">
+
+ <div class="donation_desc">
+ <p>Thanks for your donation!</p>
+ </div>
+
+ </div> <!--fine container-->
+
+</body>
+</html>
diff --git a/h-source/tabelle.txt b/h-source/tabelle.txt
new file mode 100755
index 0000000..528322b
--- /dev/null
+++ b/h-source/tabelle.txt
@@ -0,0 +1,160 @@
+create table hardware (
+ id_hard INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
+ type varchar(50) not null,
+ subtype char(15) not null,
+ kernel varchar(50) not null,
+ vendor varchar(50) not null,
+ model varchar(100) not null,
+ created_by int not null,
+ updated_by int not null,
+ creation_date timestamp default CURRENT_TIMESTAMP,
+ update_date datetime not null,
+ compatibility char(15) not null,
+ description text CHARACTER SET utf8 not null,
+ distribution varchar(300) CHARACTER SET utf8 not null,
+ video_card_type varchar(100) CHARACTER SET utf8 not null,
+ video_card_works varchar(30) CHARACTER SET utf8 not null,
+ wifi_type varchar(100) CHARACTER SET utf8 not null,
+ wifi_works varchar(30) CHARACTER SET utf8 not null,
+ comm_year char(15) not null,
+ ask_for_del char(4) not null default 'no',
+ deleted char(4) not null default 'no',
+ pci_id char(10) not null,
+ driver varchar(50) not null,
+ interface char(15) not null default 'not-specified'
+)engine=innodb;
+
+create table revisions (
+ id_rev INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
+ type varchar(50) not null,
+ subtype char(15) not null,
+ kernel varchar(50) not null,
+ vendor varchar(50) not null,
+ model varchar(100) not null,
+ created_by int not null,
+ updated_by int not null,
+ creation_date timestamp default CURRENT_TIMESTAMP,
+ update_date datetime not null,
+ compatibility char(15) not null,
+ description text CHARACTER SET utf8 not null,
+ distribution varchar(300) CHARACTER SET utf8 not null,
+ video_card_type varchar(100) CHARACTER SET utf8 not null,
+ video_card_works varchar(30) CHARACTER SET utf8 not null,
+ wifi_type varchar(100) CHARACTER SET utf8 not null,
+ wifi_works varchar(30) CHARACTER SET utf8 not null,
+ comm_year char(15) not null,
+ pci_id char(10) not null,
+ driver varchar(50) not null,
+ interface char(15) not null default 'not-specified',
+ id_hard INT UNSIGNED NOT NULL
+)engine=innodb;
+
+create table hardware_users (
+ id_user int(11) UNSIGNED not null,
+ id_hard int(11) UNSIGNED not null,
+ index hard_indx(id_hard),
+ index user_indx(id_user),
+ foreign key hard_fky(id_hard) references hardware (id_hard),
+ foreign key user_fky(id_user) references regusers (id_user),
+ unique (id_user,id_hard)
+)engine=innodb;
+
+
+create table talk (
+ id_talk INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
+ created_by int not null,
+ creation_date timestamp default CURRENT_TIMESTAMP,
+ title varchar(100) CHARACTER SET utf8 not null,
+ message text CHARACTER SET utf8 not null,
+ id_hard INT UNSIGNED NOT NULL,
+ deleted char(4) not null default 'no'
+)engine=innodb;
+
+
+create table profile (
+ id_prof INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
+ created_by int not null,
+ creation_date timestamp default CURRENT_TIMESTAMP,
+ update_date datetime not null,
+ real_name varchar(100) CHARACTER SET utf8 not null,
+ where_you_are varchar(100) CHARACTER SET utf8 not null,
+ birth_date varchar(100) CHARACTER SET utf8 not null,
+ fav_distro varchar(100) CHARACTER SET utf8 not null,
+ projects text CHARACTER SET utf8 not null ,
+ publish_mail char(4) not null default 'no',
+ description text CHARACTER SET utf8 not null,
+ website varchar(100) CHARACTER SET utf8 not null
+)engine=innodb;
+
+
+create table issues (
+ id_issue INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
+ created_by int not null,
+ creation_date timestamp default CURRENT_TIMESTAMP,
+ update_date datetime not null,
+ topic char(35) CHARACTER SET utf8 not null,
+ title varchar(100) CHARACTER SET utf8 not null,
+ message text CHARACTER SET utf8 not null,
+ priority char(15) CHARACTER SET utf8 not null,
+ status char(15) CHARACTER SET utf8 not null,
+ notice text CHARACTER SET utf8 not null,
+ deleted char(4) not null default 'no'
+)engine=innodb;
+
+
+create table deletion (
+ id_del INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
+ created_by int not null,
+ creation_date timestamp default CURRENT_TIMESTAMP,
+ object char(15) not null,
+ message text CHARACTER SET utf8 not null,
+ id_hard INT UNSIGNED NOT NULL,
+ id_duplicate INT UNSIGNED NOT NULL
+)engine=innodb;
+
+create table params (
+ id_par INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
+ updating char(4) not null default 'no'
+)engine=innodb;
+
+insert into params (updating) values ('no');
+
+
+create table news (
+ id_news INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
+ creation_date timestamp default CURRENT_TIMESTAMP,
+ title varchar(150) not null,
+ message text CHARACTER SET utf8 not null
+)engine=innodb;
+
+
+create table boxes (
+ id_box int not null auto_increment primary key,
+ creation_date timestamp default CURRENT_TIMESTAMP,
+ title varchar(150) not null,
+ message text CHARACTER SET utf8 not null
+);
+
+create table messages (
+ id_mes int not null auto_increment primary key,
+ created_by int not null,
+ creation_date timestamp default CURRENT_TIMESTAMP,
+ message text CHARACTER SET utf8 not null,
+ id_issue INT UNSIGNED NOT NULL,
+ deleted char(4) not null default 'no',
+ has_read char(4) not null default 'no'
+);
+
+
+
+create table history (
+ id_history int not null auto_increment primary key,
+ created_by int not null,
+ creation_date timestamp default CURRENT_TIMESTAMP,
+ type char(10) not null,
+ action char(10) not null,
+ id INT UNSIGNED NOT NULL,
+ message text CHARACTER SET utf8 not null
+);
+
+insert into reggroups (name) values ('moderator');
diff --git a/h-source/tables.sql b/h-source/tables.sql
deleted file mode 100644
index 6b06a28..0000000
--- a/h-source/tables.sql
+++ /dev/null
@@ -1,616 +0,0 @@
--- h-source, a web software to build a community of people that want to share their hardware information.
--- Copyright (C) 2010 Antonio Gallo (h-source-copyright.txt)
---
--- This file is part of h-source
---
--- h-source is free software: you can redistribute it and/or modify
--- it under the terms of the GNU General Public License as published by
--- the Free Software Foundation, either version 3 of the License, or
--- (at your option) any later version.
---
--- h-source is distributed in the hope that it will be useful,
--- but WITHOUT ANY WARRANTY; without even the implied warranty of
--- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
--- GNU General Public License for more details.
---
--- You should have received a copy of the GNU General Public License
--- along with h-source. If not, see <http://www.gnu.org/licenses/>.
-
-
-SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";
-
-
--- --------------------------------------------------------
-
---
--- Table structure for table `accesses`
---
-
-CREATE TABLE IF NOT EXISTS `accesses` (
- `id` int(12) NOT NULL AUTO_INCREMENT,
- `ip` char(20) NOT NULL,
- `data` char(10) NOT NULL,
- `ora` char(8) NOT NULL,
- `username` varchar(30) NOT NULL,
- PRIMARY KEY (`id`)
-) ENGINE=MyISAM DEFAULT CHARSET=utf8;
-
--- --------------------------------------------------------
-
---
--- Table structure for table `admingroups`
---
-
-CREATE TABLE IF NOT EXISTS `admingroups` (
- `id_group` int(10) unsigned NOT NULL AUTO_INCREMENT,
- `name` varchar(30) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL,
- PRIMARY KEY (`id_group`),
- UNIQUE KEY `name` (`name`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-
--- --------------------------------------------------------
-
---
--- Table structure for table `adminsessions`
---
-
-CREATE TABLE IF NOT EXISTS `adminsessions` (
- `uid` char(32) NOT NULL,
- `token` char(32) NOT NULL,
- `id_user` int(10) unsigned NOT NULL,
- `creation_date` int(10) unsigned NOT NULL,
- `user_agent` char(32) NOT NULL,
- KEY `uid` (`uid`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-
--- --------------------------------------------------------
-
---
--- Table structure for table `adminusers`
---
-
-CREATE TABLE IF NOT EXISTS `adminusers` (
- `id_user` int(10) unsigned NOT NULL AUTO_INCREMENT,
- `username` varchar(80) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL,
- `password` char(40) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL,
- `last_failure` int(10) unsigned NOT NULL,
- `has_confirmed` int(10) unsigned NOT NULL,
- PRIMARY KEY (`id_user`),
- UNIQUE KEY `username` (`username`),
- KEY `username_2` (`username`,`password`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-
--- --------------------------------------------------------
-
---
--- Table structure for table `adminusers_groups`
---
-
-CREATE TABLE IF NOT EXISTS `adminusers_groups` (
- `id_user` int(11) unsigned NOT NULL,
- `id_group` int(11) unsigned NOT NULL,
- UNIQUE KEY `id_group` (`id_group`,`id_user`),
- KEY `group_indx` (`id_group`),
- KEY `user_indx` (`id_user`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-
--- --------------------------------------------------------
-
---
--- Table structure for table `boxes`
---
-
-CREATE TABLE IF NOT EXISTS `boxes` (
- `id_box` int(11) NOT NULL AUTO_INCREMENT,
- `creation_date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
- `title` varchar(150) NOT NULL,
- `message` text NOT NULL,
- PRIMARY KEY (`id_box`)
-) ENGINE=MyISAM DEFAULT CHARSET=utf8;
-
--- --------------------------------------------------------
-
---
--- Table structure for table `deletion`
---
-
-CREATE TABLE IF NOT EXISTS `deletion` (
- `id_del` int(10) unsigned NOT NULL AUTO_INCREMENT,
- `created_by` int(11) NOT NULL,
- `creation_date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
- `object` char(15) NOT NULL,
- `message` text NOT NULL,
- `id_hard` int(10) unsigned NOT NULL,
- `id_duplicate` int(10) unsigned NOT NULL,
- PRIMARY KEY (`id_del`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-
--- --------------------------------------------------------
-
---
--- Table structure for table `hardware`
---
-
-CREATE TABLE IF NOT EXISTS `hardware` (
- `id_hard` int(10) unsigned NOT NULL AUTO_INCREMENT,
- `type` varchar(50) NOT NULL,
- `kernel` varchar(100) NOT NULL,
- `vendor` varchar(50) NOT NULL,
- `model` varchar(200) NOT NULL,
- `created_by` int(11) NOT NULL,
- `updated_by` int(11) NOT NULL,
- `creation_date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
- `update_date` datetime NOT NULL,
- `compatibility` char(15) NOT NULL,
- `description` text NOT NULL,
- `distribution` varchar(300) NOT NULL,
- `video_card_type` varchar(100) NOT NULL,
- `video_card_works` varchar(30) NOT NULL,
- `wifi_type` varchar(100) NOT NULL,
- `wifi_works` varchar(30) NOT NULL,
- `comm_year` char(15) NOT NULL,
- `ask_for_del` char(4) NOT NULL DEFAULT 'no',
- `deleted` char(4) NOT NULL DEFAULT 'no',
- `pci_id` char(10) NOT NULL,
- `subtype` char(25) NOT NULL,
- `driver` varchar(50) NOT NULL,
- `interface` char(15) NOT NULL DEFAULT 'not-specified',
- `bios` char(20) NOT NULL DEFAULT 'not-specified',
- `webcam_type` varchar(100) NOT NULL,
- `webcam_works` varchar(30) NOT NULL DEFAULT 'not-specified',
- `sound_card_works` varchar(30) NOT NULL DEFAULT 'not-specified',
- `bluetooth_works` varchar(30) NOT NULL DEFAULT 'not-specified',
- `fingerprint_works` varchar(30) NOT NULL DEFAULT 'not-specified',
- `architecture` char(15) NOT NULL DEFAULT 'not-specified',
- `other_names` text NOT NULL,
- `approved` char(4) NOT NULL DEFAULT 'yes',
- `cleared` char(3) NOT NULL DEFAULT 'no',
- `ethernet_card_works` varchar(30) NOT NULL DEFAULT 'not-specified',
- `sd_card_works` varchar(30) NOT NULL DEFAULT 'not-specified',
- `can_free_systems_be_installed` varchar(30) NOT NULL DEFAULT 'not-specified',
- `it_tracks_users` varchar(30) NOT NULL DEFAULT 'not-specified',
- `prevent_wifi` char(20) NOT NULL DEFAULT 'not-specified',
- PRIMARY KEY (`id_hard`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-
--- --------------------------------------------------------
-
---
--- Table structure for table `hardware_users`
---
-
-CREATE TABLE IF NOT EXISTS `hardware_users` (
- `id_user` int(11) unsigned NOT NULL,
- `id_hard` int(11) unsigned NOT NULL,
- UNIQUE KEY `id_user` (`id_user`,`id_hard`),
- KEY `hard_indx` (`id_hard`),
- KEY `user_indx` (`id_user`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-
--- --------------------------------------------------------
-
---
--- Table structure for table `history`
---
-
-CREATE TABLE IF NOT EXISTS `history` (
- `id_history` int(11) NOT NULL AUTO_INCREMENT,
- `created_by` int(11) NOT NULL,
- `creation_date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
- `type` char(15) NOT NULL,
- `action` char(15) NOT NULL,
- `id` int(10) unsigned NOT NULL,
- `message` text NOT NULL,
- `gr` char(15) NOT NULL,
- PRIMARY KEY (`id_history`)
-) ENGINE=MyISAM DEFAULT CHARSET=utf8 ;
-
--- --------------------------------------------------------
-
---
--- Table structure for table `issues`
---
-
-CREATE TABLE IF NOT EXISTS `issues` (
- `id_issue` int(10) unsigned NOT NULL AUTO_INCREMENT,
- `created_by` int(11) NOT NULL,
- `creation_date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
- `update_date` datetime NOT NULL,
- `topic` char(35) NOT NULL,
- `title` varchar(100) NOT NULL,
- `message` text NOT NULL,
- `priority` char(15) NOT NULL,
- `status` char(15) NOT NULL,
- `notice` text NOT NULL,
- `deleted` char(4) NOT NULL DEFAULT 'no',
- PRIMARY KEY (`id_issue`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-
--- --------------------------------------------------------
-
---
--- Table structure for table `messages`
---
-
-CREATE TABLE IF NOT EXISTS `messages` (
- `id_mes` int(11) NOT NULL AUTO_INCREMENT,
- `created_by` int(11) NOT NULL,
- `creation_date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
- `message` text NOT NULL,
- `id_issue` int(10) unsigned NOT NULL,
- `deleted` char(4) NOT NULL DEFAULT 'no',
- `has_read` char(4) NOT NULL DEFAULT 'no',
- PRIMARY KEY (`id_mes`)
-) ENGINE=MyISAM DEFAULT CHARSET=utf8;
-
--- --------------------------------------------------------
-
---
--- Table structure for table `news`
---
-
-CREATE TABLE IF NOT EXISTS `news` (
- `id_news` int(10) unsigned NOT NULL AUTO_INCREMENT,
- `creation_date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
- `title` varchar(150) NOT NULL,
- `message` text NOT NULL,
- PRIMARY KEY (`id_news`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-
--- --------------------------------------------------------
-
---
--- Table structure for table `params`
---
-
-CREATE TABLE IF NOT EXISTS `params` (
- `id_par` int(10) unsigned NOT NULL AUTO_INCREMENT,
- `updating` char(4) NOT NULL DEFAULT 'no',
- `boxes_xml` text NOT NULL,
- PRIMARY KEY (`id_par`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8 ;
-
-insert into params (updating) values ('no');
-
--- --------------------------------------------------------
-
---
--- Table structure for table `profile`
---
-
-CREATE TABLE IF NOT EXISTS `profile` (
- `id_prof` int(10) unsigned NOT NULL AUTO_INCREMENT,
- `created_by` int(11) NOT NULL,
- `creation_date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
- `update_date` datetime NOT NULL,
- `real_name` varchar(100) NOT NULL,
- `where_you_are` varchar(100) NOT NULL,
- `birth_date` varchar(100) NOT NULL,
- `fav_distro` varchar(100) NOT NULL,
- `projects` text NOT NULL,
- `publish_mail` char(4) NOT NULL DEFAULT 'no',
- `description` text NOT NULL,
- `website` varchar(100) NOT NULL,
- `send_notification` char(4) NOT NULL DEFAULT 'yes',
- PRIMARY KEY (`id_prof`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-
--- --------------------------------------------------------
-
---
--- Table structure for table `regaccesses`
---
-
-CREATE TABLE IF NOT EXISTS `regaccesses` (
- `id` int(12) NOT NULL AUTO_INCREMENT,
- `ip` char(20) NOT NULL,
- `data` char(10) NOT NULL,
- `ora` char(8) NOT NULL,
- `username` varchar(30) NOT NULL,
- PRIMARY KEY (`id`)
-) ENGINE=MyISAM DEFAULT CHARSET=utf8 ;
-
--- --------------------------------------------------------
-
---
--- Table structure for table `reggroups`
---
-
-CREATE TABLE IF NOT EXISTS `reggroups` (
- `id_group` int(10) unsigned NOT NULL AUTO_INCREMENT,
- `name` varchar(30) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL,
- PRIMARY KEY (`id_group`),
- UNIQUE KEY `name` (`name`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8 ;
-
--- --------------------------------------------------------
-
---
--- Table structure for table `regsessions`
---
-
-CREATE TABLE IF NOT EXISTS `regsessions` (
- `uid` char(32) NOT NULL,
- `token` char(32) NOT NULL,
- `id_user` int(10) unsigned NOT NULL,
- `creation_date` int(10) unsigned NOT NULL,
- `user_agent` char(32) NOT NULL,
- KEY `uid` (`uid`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-
--- --------------------------------------------------------
-
---
--- Table structure for table `regusers`
---
-
-CREATE TABLE IF NOT EXISTS `regusers` (
- `id_user` int(10) unsigned NOT NULL AUTO_INCREMENT,
- `username` varchar(80) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL,
- `password` char(40) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL,
- `last_failure` int(10) unsigned NOT NULL,
- `has_confirmed` int(10) unsigned NOT NULL,
- `e_mail` varchar(60) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL,
- `confirmation_token` char(32) NOT NULL,
- `creation_date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
- `creation_time` int(10) unsigned NOT NULL,
- `temp_field` char(32) NOT NULL,
- `deleted` char(4) NOT NULL DEFAULT 'no',
- `forgot_token` char(32) NOT NULL,
- `forgot_time` int(10) unsigned NOT NULL,
- `blocked` char(4) NOT NULL DEFAULT 'no',
- PRIMARY KEY (`id_user`),
- UNIQUE KEY `username` (`username`),
- KEY `username_2` (`username`,`password`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8 ;
-
--- --------------------------------------------------------
-
---
--- Table structure for table `regusers_groups`
---
-
-CREATE TABLE IF NOT EXISTS `regusers_groups` (
- `id_user` int(11) unsigned NOT NULL,
- `id_group` int(11) unsigned NOT NULL,
- UNIQUE KEY `id_group` (`id_group`,`id_user`),
- KEY `group_indx` (`id_group`),
- KEY `user_indx` (`id_user`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-
--- --------------------------------------------------------
-
---
--- Table structure for table `revisions`
---
-
-CREATE TABLE IF NOT EXISTS `revisions` (
- `id_rev` int(10) unsigned NOT NULL AUTO_INCREMENT,
- `type` varchar(50) NOT NULL,
- `kernel` varchar(100) NOT NULL,
- `vendor` varchar(50) NOT NULL,
- `model` varchar(200) NOT NULL,
- `created_by` int(11) NOT NULL,
- `updated_by` int(11) NOT NULL,
- `creation_date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
- `update_date` datetime NOT NULL,
- `compatibility` char(15) NOT NULL,
- `description` text NOT NULL,
- `distribution` varchar(300) NOT NULL,
- `video_card_type` varchar(100) NOT NULL,
- `video_card_works` varchar(30) NOT NULL,
- `wifi_type` varchar(100) NOT NULL,
- `wifi_works` varchar(30) NOT NULL,
- `comm_year` char(15) NOT NULL,
- `id_hard` int(10) unsigned NOT NULL,
- `pci_id` char(10) NOT NULL,
- `subtype` char(25) NOT NULL,
- `driver` varchar(50) NOT NULL,
- `interface` char(15) NOT NULL DEFAULT 'not-specified',
- `bios` char(20) NOT NULL DEFAULT 'not-specified',
- `webcam_type` varchar(100) NOT NULL,
- `webcam_works` varchar(30) NOT NULL DEFAULT 'not-specified',
- `sound_card_works` varchar(30) NOT NULL DEFAULT 'not-specified',
- `bluetooth_works` varchar(30) NOT NULL DEFAULT 'not-specified',
- `fingerprint_works` varchar(30) NOT NULL DEFAULT 'not-specified',
- `architecture` char(15) NOT NULL DEFAULT 'not-specified',
- `other_names` text NOT NULL,
- `approved` char(4) NOT NULL DEFAULT 'yes',
- `cleared` char(3) NOT NULL DEFAULT 'no',
- `ethernet_card_works` varchar(30) NOT NULL DEFAULT 'not-specified',
- `sd_card_works` varchar(30) NOT NULL DEFAULT 'not-specified',
- `can_free_systems_be_installed` varchar(30) NOT NULL DEFAULT 'not-specified',
- `it_tracks_users` varchar(30) NOT NULL DEFAULT 'not-specified',
- `prevent_wifi` char(20) NOT NULL DEFAULT 'not-specified',
- PRIMARY KEY (`id_rev`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-
--- --------------------------------------------------------
-
---
--- Table structure for table `talk`
---
-
-CREATE TABLE IF NOT EXISTS `talk` (
- `id_talk` int(10) unsigned NOT NULL AUTO_INCREMENT,
- `created_by` int(11) NOT NULL,
- `creation_date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
- `title` varchar(100) NOT NULL,
- `message` text NOT NULL,
- `id_hard` int(10) unsigned NOT NULL,
- `deleted` char(4) NOT NULL DEFAULT 'no',
- PRIMARY KEY (`id_talk`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-
--- --------------------------------------------------------
-
---
--- Table structure for table `wiki`
---
-
-CREATE TABLE IF NOT EXISTS `wiki` (
- `id_wiki` int(10) unsigned NOT NULL AUTO_INCREMENT,
- `created_by` int(11) NOT NULL,
- `creation_date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
- `update_date` datetime NOT NULL,
- `title` varchar(200) NOT NULL,
- `title_clean` varchar(200) NOT NULL,
- `page` text NOT NULL,
- `deleted` char(3) NOT NULL DEFAULT 'no',
- `blocked` char(3) NOT NULL DEFAULT 'no',
- `is_main` char(3) NOT NULL DEFAULT 'no',
- PRIMARY KEY (`id_wiki`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-
--- --------------------------------------------------------
-
---
--- Table structure for table `wiki_revisions`
---
-
-CREATE TABLE IF NOT EXISTS `wiki_revisions` (
- `id_rev` int(10) unsigned NOT NULL AUTO_INCREMENT,
- `created_by` int(11) NOT NULL,
- `creation_date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
- `update_date` datetime NOT NULL,
- `title` varchar(200) NOT NULL,
- `title_clean` varchar(200) NOT NULL,
- `page` text NOT NULL,
- `id_wiki` int(10) unsigned NOT NULL,
- PRIMARY KEY (`id_rev`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-
--- --------------------------------------------------------
-
---
--- Table structure for table `wiki_talk`
---
-
-CREATE TABLE IF NOT EXISTS `wiki_talk` (
- `id_talk` int(10) unsigned NOT NULL AUTO_INCREMENT,
- `created_by` int(11) NOT NULL,
- `creation_date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
- `title` varchar(100) NOT NULL,
- `message` text NOT NULL,
- `id_wiki` int(10) unsigned NOT NULL,
- `deleted` char(4) NOT NULL DEFAULT 'no',
- PRIMARY KEY (`id_talk`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-
--- --------------------------------------------------------
-
---
--- Table structure for table `wiki_users`
---
-
-CREATE TABLE IF NOT EXISTS `wiki_users` (
- `id_user` int(11) unsigned NOT NULL,
- `id_wiki` int(11) unsigned NOT NULL,
- UNIQUE KEY `id_user` (`id_user`,`id_wiki`),
- KEY `wiki_indx` (`id_wiki`),
- KEY `user_indx` (`id_user`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-
---
--- Constraints for dumped tables
---
-
---
--- Constraints for table `adminusers_groups`
---
-ALTER TABLE `adminusers_groups`
- ADD CONSTRAINT `adminusers_groups_ibfk_1` FOREIGN KEY (`id_group`) REFERENCES `admingroups` (`id_group`),
- ADD CONSTRAINT `adminusers_groups_ibfk_2` FOREIGN KEY (`id_user`) REFERENCES `adminusers` (`id_user`);
-
---
--- Constraints for table `hardware_users`
---
-ALTER TABLE `hardware_users`
- ADD CONSTRAINT `hardware_users_ibfk_1` FOREIGN KEY (`id_hard`) REFERENCES `hardware` (`id_hard`),
- ADD CONSTRAINT `hardware_users_ibfk_2` FOREIGN KEY (`id_user`) REFERENCES `regusers` (`id_user`);
-
---
--- Constraints for table `regusers_groups`
---
-ALTER TABLE `regusers_groups`
- ADD CONSTRAINT `regusers_groups_ibfk_1` FOREIGN KEY (`id_group`) REFERENCES `reggroups` (`id_group`),
- ADD CONSTRAINT `regusers_groups_ibfk_2` FOREIGN KEY (`id_user`) REFERENCES `regusers` (`id_user`);
-
---
--- Constraints for table `wiki_users`
---
-ALTER TABLE `wiki_users`
- ADD CONSTRAINT `wiki_users_ibfk_1` FOREIGN KEY (`id_wiki`) REFERENCES `wiki` (`id_wiki`),
- ADD CONSTRAINT `wiki_users_ibfk_2` FOREIGN KEY (`id_user`) REFERENCES `regusers` (`id_user`);
-
-
-create table vendors (
- id_vendor INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
- creation_date timestamp default CURRENT_TIMESTAMP,
- update_date datetime NOT NULL,
- vendorid CHAR(4) not null,
- clean_name varchar(200) CHARACTER SET utf8 not null,
- full_name varchar(200) CHARACTER SET utf8 not null,
- bus ENUM('PCI', 'USB'),
- unique(bus,vendorid)
-)engine=innodb;
-
-
-create table distros (
- id_distro INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
- creation_date timestamp default CURRENT_TIMESTAMP,
- clean_name varchar(200) CHARACTER SET utf8 not null,
- full_name varchar(200) CHARACTER SET utf8 not null,
- id_order INT UNSIGNED NOT NULL,
- active tinyint(1) NOT NULL DEFAULT 1
-)engine=innodb;
-
-insert into distros (clean_name, full_name, id_order, active) values ('blag_90001', 'BLAG 90001', 1, 0);
-insert into distros (clean_name, full_name, id_order, active) values ('blag_120000', 'BLAG 120000', 2, 0);
-insert into distros (clean_name, full_name, id_order, active) values ('blag_140000', 'BLAG 1400000', 3, 0);
-insert into distros (clean_name, full_name, id_order, active) values ('debian', 'Debian GNU/Linux Testing/Unstable', 4, 1);
-insert into distros (clean_name, full_name, id_order, active) values ('debian_6', 'Debian GNU/Linux 6 squeeze', 5, 0);
-insert into distros (clean_name, full_name, id_order, active) values ('debian_7', 'Debian GNU/Linux 7 wheezy', 6, 0);
-insert into distros (clean_name, full_name, id_order, active) values ('debian_8', 'Debian GNU/Linux 8 jessie', 7, 1);
-insert into distros (clean_name, full_name, id_order, active) values ('debian_9', 'Debian GNU/Linux 9 stretch', 8, 1);
-insert into distros (clean_name, full_name, id_order, active) values ('dragora_1_1', 'Dragora 1.1', 9, 0);
-insert into distros (clean_name, full_name, id_order, active) values ('dragora_2_0', 'Dragora 2.0 Ardi', 10, 0);
-insert into distros (clean_name, full_name, id_order, active) values ('dragora_2_2', 'Dragora 2.2 Rafaela', 11, 0);
-insert into distros (clean_name, full_name, id_order, active) values ('dynebolic_2_5_2', 'Dyne:bolic 2.5.2 DHORUBA', 12, 0);
-insert into distros (clean_name, full_name, id_order, active) values ('dynebolic_3_0_X', 'Dyne:III 3.0.X MUNIR', 13, 0);
-insert into distros (clean_name, full_name, id_order, active) values ('gnewsense_2_3', 'gNewSense 2.3 Deltah', 14, 0);
-insert into distros (clean_name, full_name, id_order, active) values ('gnewsense_3_0', 'gNewSense 3.0 Metad (beta)', 15, 0);
-insert into distros (clean_name, full_name, id_order, active) values ('gnewsense_3_0_parkes', 'gNewSense 3.0 Parkes', 16, 0);
-insert into distros (clean_name, full_name, id_order, active) values ('gnewsense_4_0', 'gNewSense 4.0 Ucclia', 17, 0);
-insert into distros (clean_name, full_name, id_order, active) values ('guix_0_10', 'GuixSD 0.10', 18, 0);
-insert into distros (clean_name, full_name, id_order, active) values ('guix', 'GuixSD', 19, 1);
-insert into distros (clean_name, full_name, id_order, active) values ('musix_2_0', 'Musix GNU+Linux 2.0 R0', 20, 0);
-insert into distros (clean_name, full_name, id_order, active) values ('musix_3_0_1', 'Musix GNU+Linux 3.0.1', 21, 0);
-insert into distros (clean_name, full_name, id_order, active) values ('parabola', 'Parabola GNU/Linux', 22, 1);
-insert into distros (clean_name, full_name, id_order, active) values ('pureos_8_0', 'PureOS 8.0 Prometheus', 23, 1);
-insert into distros (clean_name, full_name, id_order, active) values ('trisquel_3_5', 'Trisquel 3.5 Awen', 24, 0);
-insert into distros (clean_name, full_name, id_order, active) values ('trisquel_4_0', 'Trisquel 4.0 Taranis', 25, 0);
-insert into distros (clean_name, full_name, id_order, active) values ('trisquel_4_5', 'Trisquel 4.5 Slaine', 26, 0);
-insert into distros (clean_name, full_name, id_order, active) values ('trisquel_5_0', 'Trisquel 5.0 Dagda', 27, 0);
-insert into distros (clean_name, full_name, id_order, active) values ('trisquel_5_5', 'Trisquel 5.5 Brigantia', 28, 0);
-insert into distros (clean_name, full_name, id_order, active) values ('trisquel_6_0', 'Trisquel 6.0 Toutatis', 29, 0);
-insert into distros (clean_name, full_name, id_order, active) values ('trisquel_7_0', 'Trisquel 7.0 Belenos', 30, 1);
-insert into distros (clean_name, full_name, id_order, active) values ('trisquel_8_0', 'Trisquel 8.0 Flidas', 31, 1);
-insert into distros (clean_name, full_name, id_order, active) values ('ututo_xs_2009', 'UTUTO XS 2009', 32, 0);
-insert into distros (clean_name, full_name, id_order, active) values ('ututo_xs_2010', 'UTUTO XS 2010', 33, 0);
-insert into distros (clean_name, full_name, id_order, active) values ('ututo_xs_2012_04', 'UTUTO XS 2012.04', 34, 0);
-insert into distros (clean_name, full_name, id_order, active) values ('venenux_0_8', 'VENENUX 0.8', 35, 0);
-insert into distros (clean_name, full_name, id_order, active) values ('venenux_0_8_2', 'VENENUX-EC 0.8.2', 36, 0);
-insert into distros (clean_name, full_name, id_order, active) values ('venenux_0_9', 'VENENUX 0.9', 37, 0);
-insert into distros (clean_name, full_name, id_order, active) values ('debian_testing', 'Debian GNU/Linux Testing', 38, 0);
-insert into distros (clean_name, full_name, id_order, active) values ('debian_unstable', 'Debian GNU/Linux Unstable', 39, 0);
-
-insert into reggroups (name) values ('manager');
-insert into reggroups (name) values ('admin');
-insert into reggroups (name) values ('moderator');
-
-insert into regusers (username,password) values ('admin',sha1('admin'));
-
-insert into regusers_groups (id_user, id_group) values (1,1);
-insert into regusers_groups (id_user, id_group) values (1,2);
-insert into regusers_groups (id_user, id_group) values (1,3);