diff --git a/branches/php7/config.php b/branches/php7/config.php
new file mode 100644
index 0000000..8918a2a
--- /dev/null
+++ b/branches/php7/config.php
@@ -0,0 +1,52 @@
+
+ * @license http://www.contenido.org/license/LIZENZ.txt
+ * @link http://www.4fb.de
+ * @link http://www.contenido.org
+ *
+ *
+ *
+ * {@internal
+ * created unknown
+ * modified 2008-07-03, bilal arslan, added security fix
+ *
+ * $Id: config.php 450 2016-07-20 11:11:12Z oldperl $:
+ * }}
+ *
+ */
+
+if(!defined('CON_FRAMEWORK')) {
+ die('Illegal call');
+}
+
+
+// Relative path to contenido directory, for all inclusions, in most cases: "../contenido/"
+$contenido_path = "../conlite/";
+
+// If language isn't specified, set this client and language (ID)
+$load_lang = "1";
+$load_client = "1";
+
+/* Various debugging options */
+$frontend_debug["container_display"] = false;
+$frontend_debug["module_display"] = false;
+$frontend_debug["module_timing"] = false;
+$frontend_debug["module_timing_summary"]= false;
+
+/* Set to 1 to brute-force module regeneration */
+$force = 0;
+?>
diff --git a/branches/php7/css/basic-style.css b/branches/php7/css/basic-style.css
new file mode 100644
index 0000000..a2c9e8b
--- /dev/null
+++ b/branches/php7/css/basic-style.css
@@ -0,0 +1,523 @@
+/*
+Simple Responsive Template v 1.2
+
+
+primary styles
+ Author: www.prowebdesign.ro
+ Add your own styles to customize the project.
+
+
+
+BASE (MOBILE) SIZE
+ These are the mobile styles. It's what people see on their phones.
+ Remember, keep it light: Speed is Important.
+*/
+
+/* typography */
+body{
+ color:#666;
+ font-family:'Ubuntu', Arial, Helvetica, sans-serif;
+ font-size:1em;
+ line-height:1.4em;
+ font-weight:normal;
+}
+h1, h2, h3, h4, h5, h6{
+ font-weight:normal;
+ font-family:'Droid Serif', Arial, Helvetica, sans-serif;
+ line-height:1.5em;
+ margin:.45em 0;
+ padding:0;
+}
+
+
+/* links */
+a,
+a:visited,
+a:active,
+a:hover{color:#0099ff;}
+a:hover{ text-decoration:none;}
+
+
+/* Box sizing. Awesome thing. Read about it here: http://www.w3schools.com/cssref/css3_pr_box-sizing.asp */
+*{ box-sizing:border-box;
+ -moz-box-sizing:border-box;}
+
+
+/* structure */
+.wrapper{
+ width: 92%;
+ margin: 0 auto;
+}
+header{
+ padding:15px 0;
+}
+#banner{
+ text-align:center;
+}
+
+#hero,
+#page-header{
+ background:#f3f3f3;
+ border-top:1px solid #e2e2e2;
+ border-bottom:1px solid #e2e2e2;
+ padding:20px 0;
+}
+#hero h1{
+ line-height:1.2em;
+ margin-top:0px;
+ margin-bottom:10px;}
+
+.flexslider{
+ display:none;
+}
+
+#content {
+ margin:40px 0;
+}
+
+aside {
+ margin:40px 0;
+}
+
+p{ margin:0 0 1.5em;}
+
+
+/* RESPONSIVE IMAGES */
+img{ max-width:100%; height:auto;}
+
+
+/*MAIN MENU*/
+.menu-toggle{
+ display:block;
+ padding:10px;
+ margin:20px 0 0;
+ background:#666;
+ color:#fff;
+ cursor:pointer;
+ text-transform:uppercase;
+ font-size:20px;
+}
+.menu-toggle.toggled-on{
+ background:#0099ff;
+}
+.srt-menu{
+ display:none;
+}
+.srt-menu.toggled-on{
+ display:block;
+ position:relative;
+ z-index:10;
+}
+
+.srt-menu{
+ clear:both;
+ margin-bottom:60px;
+
+}
+.srt-menu li a {
+ background:#dadada;
+ display:block;
+ margin:1px 0;
+ padding:10px;
+ text-decoration:none;
+}
+.srt-menu li a:hover{
+ background:#0099ff;
+ color:#fff;
+}
+.srt-menu li li a {
+ background:#e8e8e8;
+ padding-left:40px;
+}
+.srt-menu li li li a {
+ background:#efefef;
+ padding-left:80px;
+}
+
+/*SECONDARY MENU*/
+#secondary-navigation{
+ margin-bottom:60px;
+}
+#secondary-navigation ul{
+ margin:0;
+ padding:0;
+}
+#secondary-navigation ul li a{
+ background:#E6E6E6;
+ display:block;
+ margin:5px 0;
+ padding:10px;
+ text-decoration:none;
+}
+#secondary-navigation ul li a:hover,
+#secondary-navigation ul li.active a{
+ background:#0099ff;
+ color:#fff;
+}
+
+/*SPACE GRID ELEMENTS VERTICALLY, SINCE THEY ARE ONE UNDER ANOTHER SO FAR*/
+.grid_1,
+.grid_2,
+.grid_3,
+.grid_4,
+.grid_5,
+.grid_6,
+.grid_7,
+.grid_8,
+.grid_9,
+.grid_10,
+.grid_11,
+.grid_12 {
+ margin-bottom:40px;
+ /*positioning and padding*/
+ position: relative;
+ min-height: 1px;
+ padding-left: 15px;
+ padding-right: 15px;
+}
+
+/*FOOTER*/
+footer{
+ clear:both;
+ font-size:80%;
+ padding:20px 0;
+}
+footer ul{
+ margin:0;
+ padding:0;
+}
+
+/*colors and backgrounds*/
+body{
+ background:#fff;
+}
+h1, h2, h3, h4, h5, h6{
+ color:#333;
+}
+
+footer{
+ background:#333;
+ color:#ccc;
+}
+footer h1, footer h2, footer h3, footer h4{
+ color:#CCC;
+ margin-bottom:10px;
+}
+footer ul{
+ margin:0 0 0 8%;
+}
+
+a.buttonlink{
+ background:#0099ff;
+ border-radius:7px;
+ color:#fff;
+ display:block;
+ float:left;
+ margin:10px 15px 10px 0;
+ padding:10px;
+ text-decoration:none;
+}
+a.buttonlink:hover{
+ background:#8dbc01;
+}
+.greenelement{
+ background:#5ec79e;
+ color:#fff;
+}
+.violetelement{
+ background:#887dc2;
+ color:#fff;
+}
+
+
+
+/* Contain floats*/
+.clearfix:before,
+.clearfix:after,
+.row:before,
+.row:after {
+ content: " ";
+ display: table;
+}
+.clearfix:after,
+.container:after,
+.row:after{
+ clear: both;
+}
+
+
+/*
+LARGER MOBILE DEVICES
+This is for mobile devices with a bit larger screens.
+*/
+@media only screen and (min-width: 481px) {
+#banner{
+ float:left;
+ text-align:left;
+ margin-bottom:-20px;/*this depends on the height of the logo*/
+}
+.menu-toggle{/*make menu float right, instead of sitting under the logo*/
+ margin-top:10px; /*this depends on the height of the logo*/
+ float:right;
+}
+
+}
+
+/*
+TABLET & SMALLER LAPTOPS
+The average viewing window and preferred media query for those is 768px.
+But I think that some more breathing space is good:)
+*/
+@media only screen and (min-width: 920px) {
+
+.wrapper{
+ max-width: 1200px;
+ margin: .75em auto;
+}
+
+#banner{
+ float:left;
+ text-align:left;
+ margin-bottom:0px;
+}
+header{
+ padding:0;
+}
+#content {
+ float:left;
+ width:65%;
+}
+#content.wide-content{
+ float:none;
+ width:100%;
+}
+
+.flexslider{
+display:block;
+/*demo 1 slider theme*/
+margin: 0 0 60px;
+background: #fff;
+border: 4px solid #fff;
+-webkit-border-radius: 4px;
+-moz-border-radius: 4px;
+-o-border-radius: 4px;
+border-radius: 4px;
+box-shadow: 0 1px 4px rgba(0,0,0,.2);
+-webkit-box-shadow: 0 1px 4px rgba(0,0,0,.2);
+-moz-box-shadow: 0 1px 4px rgba(0,0,0,.2);
+-o-box-shadow: 0 1px 4px rgba(0,0,0,.2);
+}
+
+
+aside {
+ float:right;
+ width:30%;
+}
+
+/*** MAIN MENU - ESSENTIAL STYLES ***/
+.menu-toggle{display:none;}
+#menu-main-navigation{display:block;}
+
+.srt-menu, .srt-menu * {
+ margin: 0;
+ padding: 0;
+ list-style: none;
+}
+.srt-menu ul {
+ position: absolute;
+ display:none;
+ width: 12em; /* left offset of submenus need to match (see below) */
+}
+.srt-menu ul li {
+ width: 100%;
+}
+.srt-menu li:hover {
+ visibility: inherit; /* fixes IE7 'sticky bug' */
+}
+.srt-menu li {
+ float: left;
+ position: relative;
+ margin-left:1px;
+}
+.srt-menu li li {
+ margin-left:0px;
+}
+.srt-menu a {
+ display: block;
+ position: relative;
+}
+.srt-menu li:hover ul,
+.srt-menu li.sfHover ul {
+ display:block;
+ left: 0;
+ top: 45px; /* match top ul list item height */
+ z-index: 99;
+ -webkit-box-shadow: 2px 3px 2px 0px rgba(00, 00, 00, .3);
+ box-shadow: 2px 3px 2px 0px rgba(00, 00, 00, .3);
+}
+ul.srt-menu li:hover li ul,
+ul.srt-menu li.sfHover li ul {
+ top: -999em;
+}
+ul.srt-menu li li:hover ul,
+ul.srt-menu li li.sfHover ul {
+ left: 12em; /* match ul width */
+ top: 0;
+}
+ul.srt-menu li li:hover li ul,
+ul.srt-menu li li.sfHover li ul {
+ top: -999em;
+}
+ul.srt-menu li li li:hover ul,
+ul.srt-menu li li li.sfHover ul {
+ left: 10em; /* match ul width */
+ top: 0;
+}
+
+/*** DEMO1 SKIN ***/
+#topnav, .srt-menu {
+ float:right;
+ margin: .35em 0 0 0;
+}
+.srt-menu a {
+ text-decoration:none;
+}
+.srt-menu li a {
+ background:#fff;
+ margin:0;
+ padding:10px 20px;
+ height:45px;
+}
+.srt-menu a, .srt-menu a:visited { /* visited pseudo selector so IE6 applies text colour*/
+ color: #0099ff;
+}
+.srt-menu li li a {
+ border-top: 1px solid rgba(255,255,255,.2);
+ background: #333; /*fallback for old IE*/
+ background:rgba(0,0,0,.6);
+ color: #fff;
+ padding-left:20px;
+ height:auto;
+}
+.srt-menu li li a:visited{color:#fff;}
+.srt-menu li li li a,
+.srt-menu li.active * li a{
+ padding-left:20px;
+ background:rgba(0,0,0,.6);
+}
+
+.srt-menu li:hover > a,
+.srt-menu li.active a{
+ color:#fff;
+ background:#0099ff;
+}
+.srt-menu li li:hover > a{
+ color:#fff;
+ background:#0099ff;
+}
+
+
+
+/*GRID*/
+/*
+ & Columns : 12
+
+ */
+ .row{
+ margin-left: -15px;
+ margin-right: -15px;
+}
+
+.grid_1 { width: 8.33333333%; }
+.grid_2 { width: 16.66666667%; }
+.grid_3 { width: 25%; }
+.grid_4 { width: 33.33333333%; }
+.grid_5 { width: 41.66666667%; }
+.grid_6 { width: 50%; }
+.grid_7 { width: 58.33333333%; }
+.grid_8 { width: 66.66666667%; }
+.grid_9 { width: 75%; }
+.grid_10 { width: 83.33333333%; }
+.grid_11 { width: 91.66666667%; }
+.grid_12 { width: 100%; }
+
+.grid_1,
+.grid_2,
+.grid_3,
+.grid_4,
+.grid_5,
+.grid_6,
+.grid_7,
+.grid_8,
+.grid_9,
+.grid_10,
+.grid_11,
+.grid_12 {
+ float: left;
+ display: block;
+}
+
+.rightfloat{float:right;}
+/* @notation inspired by tinyGrid, .row and percentage by Twitter Bootstrap
+ */
+
+#hero [class*="grid_"] { margin-bottom:-20px;}
+
+}
+
+/*
+DESKTOP
+This is the average viewing window. So Desktops, Laptops, and
+in general anyone not viewing on a mobile device. Here's where
+you can add resource intensive styles.
+*/
+@media only screen and (min-width: 1030px) {
+
+}
+
+/*
+LARGE VIEWING SIZE
+This is for the larger monitors and possibly full screen viewers.
+*/
+@media only screen and (min-width: 1240px) {
+
+}
+
+/*
+RETINA (2x RESOLUTION DEVICES)
+This applies to the retina iPhone (4s) and iPad (2,3) along with
+other displays with a 2x resolution.
+*/
+@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-device-pixel-ratio: 1.5) {
+
+
+}
+
+/*
+iPHONE 5 MEDIA QUERY
+iPhone 5 or iPod Touch 5th generation styles (you can include your own file if you want)
+*/
+@media (device-height: 568px) and (-webkit-min-device-pixel-ratio: 2) {
+
+
+}
+
+/*
+PRINT STYLESHEET
+*/
+@media print {
+ * { background: transparent !important; color: black !important; text-shadow: none !important; filter:none !important; -ms-filter: none !important; } /* Black prints faster: h5bp.com/s */
+ a, a:visited { text-decoration: underline; }
+ a[href]:after { content: " (" attr(href) ")"; }
+ abbr[title]:after { content: " (" attr(title) ")"; }
+ .ir a:after, a[href^="javascript:"]:after, a[href^="#"]:after { content: ""; } /* Don't show links for images, or javascript/internal links */
+ pre, blockquote { border: 1px solid #999; page-break-inside: avoid; }
+ thead { display: table-header-group; } /* h5bp.com/t */
+ tr, img { page-break-inside: avoid; }
+ img { max-width: 100% !important; }
+ @page { margin: 0.5cm; }
+ p, h2, h3 { orphans: 3; widows: 3; }
+ h2, h3 { page-break-after: avoid; }
+}
\ No newline at end of file
diff --git a/branches/php7/css/conlite-demo.css b/branches/php7/css/conlite-demo.css
new file mode 100644
index 0000000..6662565
--- /dev/null
+++ b/branches/php7/css/conlite-demo.css
@@ -0,0 +1,136 @@
+form#login_box {
+ width: 100%;
+}
+
+form#login_box fieldset {
+ padding: 3px;
+ border-radius: 6px;
+}
+
+input[type='submit'] {
+ background: #0099ff none repeat scroll 0 0;
+ border: 1px solid;
+ border-radius: 6px;
+ color: #fff;
+ margin: 5px 10px 5px 0;
+ padding: 5px;
+ text-decoration: none;
+}
+
+footer #colophon {
+ position: relative;
+}
+
+div#social-media-links {
+ position: absolute;
+ right: 0;
+ text-align: right;
+ width: 20%;
+ display: inline-block;
+}
+
+a.social-media-icon {
+ width: 32px;
+ height: 32px;
+ background-image: url(../images/ico/social_icons_sprite.png);
+ display: inline-block;
+ color: rgba(0, 0, 0, 0);
+}
+
+.facebook {
+ background-position: 0 0 !important;
+}
+
+.facebook:hover {
+ background-position: 0 -32px !important;
+}
+
+.pinterest {
+ background-position: -32px 0 !important;
+}
+
+.pinterest:hover {
+ background-position: -32px -32px !important;
+}
+
+.youtube {
+ background-position: -64px 0px !important;
+}
+
+.youtube:hover {
+ background-position: -64px -32px !important;
+}
+
+.flickr {
+ background-position: -96px 0px !important;
+}
+
+.flickr:hover{
+ background-position: -96px -32px !important;
+}
+
+.google-plus {
+ background-position: -128px 0px !important;
+}
+
+.google-plus:hover {
+ background-position: -128px -32px !important;
+}
+
+.rss {
+ background-position: -160px 0 !important;
+}
+
+.rss:hover {
+ background-position: -160px -32px !important;
+}
+
+
+.twitter {
+ background-position: -192px 0 !important;
+}
+
+.twitter:hover {
+ background-position: -192px -32px !important;
+}
+
+
+.vimeo {
+ background-position: -224px 0 !important;
+}
+
+.vimeo:hover {
+ background-position: -224px -32px !important;
+}
+
+.dribble {
+ background-position: -256px 0 !important;
+}
+
+.dribble:hover {
+ background-position: -256px -32px !important;
+}
+
+.linkedin {
+ background-position: -288px 0 !important;
+}
+
+.linkedin:hover {
+ background-position: -288px -32px !important;
+}
+
+.xing {
+ background-position: -320px 0 !important;
+}
+
+.xing:hover {
+ background-position: -320px -32px !important;
+}
+
+
+
+@media only screen and (min-width: 920px) {
+ form#login_box input {
+ max-width: 100px;
+ }
+}
\ No newline at end of file
diff --git a/branches/php7/css/index.php b/branches/php7/css/index.php
new file mode 100644
index 0000000..ef8b776
--- /dev/null
+++ b/branches/php7/css/index.php
@@ -0,0 +1,4 @@
+
diff --git a/branches/php7/css/normalize.css b/branches/php7/css/normalize.css
new file mode 100644
index 0000000..68fcfea
--- /dev/null
+++ b/branches/php7/css/normalize.css
@@ -0,0 +1,530 @@
+/*! normalize.css v1.1.0 | MIT License | git.io/normalize */
+
+/* ==========================================================================
+ HTML5 display definitions
+ ========================================================================== */
+
+/**
+ * Correct `block` display not defined in IE 6/7/8/9 and Firefox 3.
+ */
+
+article,
+aside,
+details,
+figcaption,
+figure,
+footer,
+header,
+hgroup,
+main,
+nav,
+section,
+summary {
+ display: block;
+}
+
+/**
+ * Correct `inline-block` display not defined in IE 6/7/8/9 and Firefox 3.
+ */
+
+audio,
+canvas,
+video {
+ display: inline-block;
+ *display: inline;
+ *zoom: 1;
+}
+
+/**
+ * Prevent modern browsers from displaying `audio` without controls.
+ * Remove excess height in iOS 5 devices.
+ */
+
+audio:not([controls]) {
+ display: none;
+ height: 0;
+}
+
+/**
+ * Address styling not present in IE 7/8/9, Firefox 3, and Safari 4.
+ * Known issue: no IE 6 support.
+ */
+
+[hidden] {
+ display: none;
+}
+
+/* ==========================================================================
+ Base
+ ========================================================================== */
+
+/**
+ * 1. Correct text resizing oddly in IE 6/7 when body `font-size` is set using
+ * `em` units.
+ * 2. Prevent iOS text size adjust after orientation change, without disabling
+ * user zoom.
+ */
+
+html {
+ font-size: 100%; /* 1 */
+ -webkit-text-size-adjust: 100%; /* 2 */
+ -ms-text-size-adjust: 100%; /* 2 */
+}
+
+/**
+ * Address `font-family` inconsistency between `textarea` and other form
+ * elements.
+ */
+
+html,
+button,
+input,
+select,
+textarea {
+ font-family: sans-serif;
+}
+
+/**
+ * Address margins handled incorrectly in IE 6/7.
+ */
+
+body {
+ margin: 0;
+}
+
+/* ==========================================================================
+ Links
+ ========================================================================== */
+
+/**
+ * Address `outline` inconsistency between Chrome and other browsers.
+ */
+
+a:focus {
+ outline: thin dotted;
+}
+
+/**
+ * Improve readability when focused and also mouse hovered in all browsers.
+ */
+
+a:active,
+a:hover {
+ outline: 0;
+}
+
+/* ==========================================================================
+ Typography
+ ========================================================================== */
+
+/**
+ * Address font sizes and margins set differently in IE 6/7.
+ * Address font sizes within `section` and `article` in Firefox 4+, Safari 5,
+ * and Chrome.
+ */
+
+h1 {
+ font-size: 2em;
+ margin: 0.67em 0;
+}
+
+h2 {
+ font-size: 1.5em;
+ margin: 0.83em 0;
+}
+
+h3 {
+ font-size: 1.17em;
+ margin: 1em 0;
+}
+
+h4 {
+ font-size: 1em;
+ margin: 1.33em 0;
+}
+
+h5 {
+ font-size: 0.83em;
+ margin: 1.67em 0;
+}
+
+h6 {
+ font-size: 0.67em;
+ margin: 2.33em 0;
+}
+
+/**
+ * Address styling not present in IE 7/8/9, Safari 5, and Chrome.
+ */
+
+abbr[title] {
+ border-bottom: 1px dotted;
+}
+
+/**
+ * Address style set to `bolder` in Firefox 3+, Safari 4/5, and Chrome.
+ */
+
+b,
+strong {
+ font-weight: bold;
+}
+
+blockquote {
+ margin: 1em 40px;
+}
+
+/**
+ * Address styling not present in Safari 5 and Chrome.
+ */
+
+dfn {
+ font-style: italic;
+}
+
+/**
+ * Address differences between Firefox and other browsers.
+ * Known issue: no IE 6/7 normalization.
+ */
+
+hr {
+ -moz-box-sizing: content-box;
+ box-sizing: content-box;
+ height: 0;
+}
+
+/**
+ * Address styling not present in IE 6/7/8/9.
+ */
+
+mark {
+ background: #ff0;
+ color: #000;
+}
+
+/**
+ * Address margins set differently in IE 6/7.
+ */
+
+p,
+pre {
+ margin: 1em 0;
+}
+
+/**
+ * Correct font family set oddly in IE 6, Safari 4/5, and Chrome.
+ */
+
+code,
+kbd,
+pre,
+samp {
+ font-family: monospace, serif;
+ _font-family: 'courier new', monospace;
+ font-size: 1em;
+}
+
+/**
+ * Improve readability of pre-formatted text in all browsers.
+ */
+
+pre {
+ white-space: pre;
+ white-space: pre-wrap;
+ word-wrap: break-word;
+
+}
+
+/**
+ * Address CSS quotes not supported in IE 6/7.
+ */
+
+q {
+ quotes: none;
+}
+
+/**
+ * Address `quotes` property not supported in Safari 4.
+ */
+
+q:before,
+q:after {
+ content: '';
+ content: none;
+}
+
+/**
+ * Address inconsistent and variable font size in all browsers.
+ */
+
+small {
+ font-size: 80%;
+}
+
+/**
+ * Prevent `sub` and `sup` affecting `line-height` in all browsers.
+ */
+
+sub,
+sup {
+ font-size: 75%;
+ line-height: 0;
+ position: relative;
+ vertical-align: baseline;
+}
+
+sup {
+ top: -0.5em;
+}
+
+sub {
+ bottom: -0.25em;
+}
+
+/* ==========================================================================
+ Lists
+ ========================================================================== */
+
+/**
+ * Address margins set differently in IE 6/7.
+ */
+
+dl,
+menu,
+ol,
+ul {
+ margin: 1em 0;
+}
+
+dd {
+ margin: 0 0 0 40px;
+}
+
+/**
+ * Address paddings set differently in IE 6/7.
+ */
+
+menu,
+ol,
+ul {
+ padding: 0 0 0 40px;
+}
+
+/**
+ * Correct list images handled incorrectly in IE 7.
+ */
+
+nav ul,
+nav ol {
+ list-style: none;
+ list-style-image: none;
+ padding:0;
+ margin:0;
+}
+
+/* ==========================================================================
+ Embedded content
+ ========================================================================== */
+
+/**
+ * 1. Remove border when inside `a` element in IE 6/7/8/9 and Firefox 3.
+ * 2. Improve image quality when scaled in IE 7.
+ */
+
+img {
+ border: 0; /* 1 */
+ -ms-interpolation-mode: bicubic; /* 2 */
+}
+
+/**
+ * Correct overflow displayed oddly in IE 9.
+ */
+
+svg:not(:root) {
+ overflow: hidden;
+}
+
+/* ==========================================================================
+ Figures
+ ========================================================================== */
+
+/**
+ * Address margin not present in IE 6/7/8/9, Safari 5, and Opera 11.
+ */
+
+figure {
+ margin: 0;
+}
+
+/* ==========================================================================
+ Forms
+ ========================================================================== */
+
+/**
+ * Correct margin displayed oddly in IE 6/7.
+ */
+
+form {
+ margin: 0;
+}
+
+/**
+ * Define consistent border, margin, and padding.
+ */
+
+fieldset {
+ border: 1px solid #c0c0c0;
+ margin: 0 2px;
+ padding: 0.35em 0.625em 0.75em;
+}
+
+/**
+ * 1. Correct color not being inherited in IE 6/7/8/9.
+ * 2. Correct text not wrapping in Firefox 3.
+ * 3. Correct alignment displayed oddly in IE 6/7.
+ */
+
+legend {
+ border: 0; /* 1 */
+ padding: 0;
+ white-space: normal; /* 2 */
+ *margin-left: -7px; /* 3 */
+}
+
+/**
+ * 1. Correct font size not being inherited in all browsers.
+ * 2. Address margins set differently in IE 6/7, Firefox 3+, Safari 5,
+ * and Chrome.
+ * 3. Improve appearance and consistency in all browsers.
+ */
+
+button,
+input,
+select,
+textarea {
+ font-size: 100%; /* 1 */
+ margin: 0; /* 2 */
+ vertical-align: baseline; /* 3 */
+ *vertical-align: middle; /* 3 */
+}
+
+/**
+ * Address Firefox 3+ setting `line-height` on `input` using `!important` in
+ * the UA stylesheet.
+ */
+
+button,
+input {
+ line-height: normal;
+}
+
+/**
+ * Address inconsistent `text-transform` inheritance for `button` and `select`.
+ * All other form control elements do not inherit `text-transform` values.
+ * Correct `button` style inheritance in Chrome, Safari 5+, and IE 6+.
+ * Correct `select` style inheritance in Firefox 4+ and Opera.
+ */
+
+button,
+select {
+ text-transform: none;
+}
+
+/**
+ * 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio`
+ * and `video` controls.
+ * 2. Correct inability to style clickable `input` types in iOS.
+ * 3. Improve usability and consistency of cursor style between image-type
+ * `input` and others.
+ * 4. Remove inner spacing in IE 7 without affecting normal text inputs.
+ * Known issue: inner spacing remains in IE 6.
+ */
+
+button,
+html input[type="button"], /* 1 */
+input[type="reset"],
+input[type="submit"] {
+ -webkit-appearance: button; /* 2 */
+ cursor: pointer; /* 3 */
+ *overflow: visible; /* 4 */
+}
+
+/**
+ * Re-set default cursor for disabled elements.
+ */
+
+button[disabled],
+html input[disabled] {
+ cursor: default;
+}
+
+/**
+ * 1. Address box sizing set to content-box in IE 8/9.
+ * 2. Remove excess padding in IE 8/9.
+ * 3. Remove excess padding in IE 7.
+ * Known issue: excess padding remains in IE 6.
+ */
+
+input[type="checkbox"],
+input[type="radio"] {
+ box-sizing: border-box; /* 1 */
+ padding: 0; /* 2 */
+ *height: 13px; /* 3 */
+ *width: 13px; /* 3 */
+}
+
+/**
+ * 1. Address `appearance` set to `searchfield` in Safari 5 and Chrome.
+ * 2. Address `box-sizing` set to `border-box` in Safari 5 and Chrome
+ * (include `-moz` to future-proof).
+ */
+
+input[type="search"] {
+ -webkit-appearance: textfield; /* 1 */
+ -moz-box-sizing: content-box;
+ -webkit-box-sizing: content-box; /* 2 */
+ box-sizing: content-box;
+}
+
+/**
+ * Remove inner padding and search cancel button in Safari 5 and Chrome
+ * on OS X.
+ */
+
+input[type="search"]::-webkit-search-cancel-button,
+input[type="search"]::-webkit-search-decoration {
+ -webkit-appearance: none;
+}
+
+/**
+ * Remove inner padding and border in Firefox 3+.
+ */
+
+button::-moz-focus-inner,
+input::-moz-focus-inner {
+ border: 0;
+ padding: 0;
+}
+
+/**
+ * 1. Remove default vertical scrollbar in IE 6/7/8/9.
+ * 2. Improve readability and alignment in all browsers.
+ */
+
+textarea {
+ overflow: auto; /* 1 */
+ vertical-align: top; /* 2 */
+}
+
+/* ==========================================================================
+ Tables
+ ========================================================================== */
+
+/**
+ * Remove most spacing between table cells.
+ */
+
+table {
+ border-collapse: collapse;
+ border-spacing: 0;
+}
diff --git a/branches/php7/dbfs.php b/branches/php7/dbfs.php
new file mode 100644
index 0000000..50210ca
--- /dev/null
+++ b/branches/php7/dbfs.php
@@ -0,0 +1,66 @@
+
+ *
+ * Requirements:
+ * @con_php_req 5
+ * @con_template
+ * @con_notice
+ *
+ *
+ * @package ContenidoBackendArea
+ * @author unknown
+ * @copyright four for business AG
+ * @license http://www.contenido.org/license/LIZENZ.txt
+ * @link http://www.4fb.de
+ * @link http://www.contenido.org
+ *
+ *
+ *
+ * {@internal
+ * created unknown
+ * modified 2008-06-16, H. Librenz - Hotfix: checking for potential unsecure calling
+ * modified 2008-07-03, bilal arslan, added security fix
+ * modified 2010-05-20, Murat Purc, standardized Contenido startup and security check invocations, see [#CON-307]
+ *
+ * $Id: dbfs.php 450 2016-07-20 11:11:12Z oldperl $:
+ * }}
+ *
+ */
+
+if (!defined("CON_FRAMEWORK")) {
+ define("CON_FRAMEWORK", true);
+}
+
+$contenido_path = '';
+# include the config file of the frontend to init the Client and Language Id
+include_once ("config.php");
+
+// Contenido startup process
+include_once ($contenido_path . 'includes/startup.php');
+
+if ($contenido)
+{
+ page_open(array('sess' => 'Contenido_Session',
+ 'auth' => 'Contenido_Challenge_Crypt_Auth',
+ 'perm' => 'Contenido_Perm'));
+
+} else {
+ page_open(array('sess' => 'Contenido_Frontend_Session',
+ 'auth' => 'Contenido_Frontend_Challenge_Crypt_Auth',
+ 'perm' => 'Contenido_Perm'));
+}
+
+/* Shorten load time */
+$client = $load_client;
+
+$dbfs = new DBFSCollection;
+$dbfs->outputFile($file);
+
+page_close();
+
+?>
\ No newline at end of file
diff --git a/branches/php7/error.php b/branches/php7/error.php
new file mode 100644
index 0000000..e18b0eb
--- /dev/null
+++ b/branches/php7/error.php
@@ -0,0 +1,13 @@
+
+
+ Fehler
+
+
+
+
+
+
+
+
+
+
diff --git a/branches/php7/favicon.ico b/branches/php7/favicon.ico
new file mode 100644
index 0000000..fbca42b
Binary files /dev/null and b/branches/php7/favicon.ico differ
diff --git a/branches/php7/front_content.php b/branches/php7/front_content.php
new file mode 100644
index 0000000..0fb2500
--- /dev/null
+++ b/branches/php7/front_content.php
@@ -0,0 +1,949 @@
+
+ * @license http://www.contenido.org/license/LIZENZ.txt
+ * @link http://www.4fb.de
+ * @link http://www.contenido.org
+ * @since file available since contenido release <= 4.6
+ */
+
+if (!defined("CON_FRAMEWORK")) {
+ define("CON_FRAMEWORK", true);
+}
+
+$contenido_path = '';
+# include the config file of the frontend to init the Client and Language Id
+include_once ("config.php");
+
+# Contenido startup process
+include_once ($contenido_path . 'includes/startup.php');
+
+cInclude("includes", "functions.con.php");
+cInclude("includes", "functions.con2.php");
+cInclude("includes", "functions.api.php");
+cInclude("includes", "functions.pathresolver.php");
+
+if ($cfg["use_pseudocron"] == true)
+{
+ /* Include cronjob-Emulator */
+ $oldpwd = getcwd();
+ chdir($cfg["path"]["contenido"].$cfg["path"]["cronjobs"]);
+ cInclude("includes", "pseudo-cron.inc.php");
+ chdir($oldpwd);
+}
+
+/*
+ * Initialize the Database Abstraction Layer, the Session, Authentication and Permissions Handler of the
+ * PHPLIB application development toolkit
+ * @see http://sourceforge.net/projects/phplib
+ */
+if ($contenido)
+{
+ //Backend
+ page_open(array ('sess' => 'Contenido_Session', 'auth' => 'Contenido_Challenge_Crypt_Auth', 'perm' => 'Contenido_Perm'));
+ i18nInit($cfg["path"]["contenido"].$cfg["path"]["locale"], $belang);
+}
+else
+{
+ //Frontend
+ page_open(array ('sess' => 'Contenido_Frontend_Session', 'auth' => 'Contenido_Frontend_Challenge_Crypt_Auth', 'perm' => 'Contenido_Perm'));
+}
+
+/**
+ * Bugfix
+ * @see http://contenido.org/forum/viewtopic.php?t=18291
+ *
+ * added by H. Librenz (2007-12-07)
+ */
+//includePluginConf();
+/**
+ * fixed bugfix - using functions brokes variable scopes!
+ *
+ * added by H. Librenz (2007-12-21) based on an idea of A. Lindner
+ */
+require_once $cfg['path']['contenido'] . $cfg['path']['includes'] . 'functions.includePluginConf.php';
+
+$db = new DB_Contenido;
+
+$sess->register("cfgClient");
+$sess->register("errsite_idcat");
+$sess->register("errsite_idart");
+$sess->register("encoding");
+
+if ($cfgClient["set"] != "set")
+{
+ rereadClients();
+}
+
+# Check if this request is for a compressed file
+if ($_GET['action'] == 'get_compressed') {
+ # Get the calling parameters
+ $sFilename = ((isset($_GET['f'])) ? $_GET['f'] : $_GET['amp;f']);
+ $sContentType = ((isset($_GET['c'])) ? $_GET['c'] : $_GET['amp;c']);
+
+ # Output the file using the class output() function
+ Output_Compressor::output($cfgClient[$client]['path']['frontend'] . 'cache/', $sFilename, $sContentType);
+
+ # Don't do anything else
+ exit();
+}
+
+// Call hook after plugins are loaded, added by Murat Purc, 2008-09-07
+CEC_Hook::execute('Contenido.Frontend.AfterLoadPlugins');
+
+if (!isset($encoding) || !is_array($encoding) || count($encoding) == 0)
+{
+ // get encodings of all languages
+ $encoding = array();
+ $sql = "SELECT idlang, encoding FROM " . $cfg["tab"]["lang"];
+ $db->query($sql);
+ while ($db->next_record()) {
+ $encoding[$db->f('idlang')] = $db->f('encoding');
+ }
+}
+
+
+// Check frontend globals
+// @TODO: Should be outsourced into startup process but requires a better detection (frontend or backend)
+Contenido_Security::checkFrontendGlobals();
+
+
+// update urlbuilder set http base path
+Contenido_Url::getInstance()->getUrlBuilder()->setHttpBasePath($cfgClient[$client]['htmlpath']['frontend']);
+
+
+// Initialize language
+if (!isset($lang)) {
+
+ // if there is an entry load_lang in frontend/config.php use it, else use the first language of this client
+ if(isset($load_lang)){
+ // load_client is set in frontend/config.php
+ $lang = $load_lang;
+ }else{
+
+ $sql = "SELECT
+ B.idlang
+ FROM
+ ".$cfg["tab"]["clients_lang"]." AS A,
+ ".$cfg["tab"]["lang"]." AS B
+ WHERE
+ A.idclient='".Contenido_Security::toInteger($client)."' AND
+ A.idlang = B.idlang
+ LIMIT
+ 0,1";
+
+ $db->query($sql);
+ $db->next_record();
+
+ $lang = $db->f("idlang");
+ }
+}
+
+if (!$sess->is_registered("lang") ) $sess->register("lang");
+if (!$sess->is_registered("client") ) $sess->register("client");
+
+if (isset ($username))
+{
+ $auth->login_if(true);
+}
+
+/*
+ * Send HTTP header with encoding
+ */
+header("Content-Type: text/html; charset={$encoding[$lang]}");
+
+/*
+ * if http global logout is set e.g. front_content.php?logout=true
+ * log out the current user.
+ */
+if (isset ($logout))
+{
+ $auth->logout(true);
+ $auth->unauth(true);
+ $auth->auth["uname"] = "nobody";
+}
+
+/*
+ * local configuration
+ */
+if (file_exists("config.local.php"))
+{
+ @ include ("config.local.php");
+}
+
+/*
+ * If the path variable was passed, try to resolve it to a Category Id
+ * e.g. front_content.php?path=/company/products/
+ */
+if (isset($path) && strlen($path) > 1)
+{
+ /* Which resolve method is configured? */
+ if ($cfg["urlpathresolve"] == true)
+ {
+
+ $iLangCheck = 0;
+ $idcat = prResolvePathViaURLNames($path, $iLangCheck);
+
+ }
+ else
+ {
+ $iLangCheck = 0;
+
+ $idcat = prResolvePathViaCategoryNames($path, $iLangCheck);
+ if(($lang != $iLangCheck) && ((int)$iLangCheck != 0)){
+ $lang = $iLangCheck;
+ }
+
+ }
+}
+
+// error page
+$aParams = array (
+ 'client' => $client, 'idcat' => $errsite_idcat[$client], 'idart' => $errsite_idart[$client],
+ 'lang' => $lang, 'error'=> '1'
+);
+$errsite = 'Location: ' . Contenido_Url::getInstance()->buildRedirect($aParams);
+
+
+/*
+ * Try to initialize variables $idcat, $idart, $idcatart, $idartlang
+ * Note: These variables can be set via http globals e.g. front_content.php?idcat=41&idart=34&idcatart=35&idartlang=42
+ * If not the values will be computed.
+ */
+if ($idart && !$idcat && !$idcatart)
+{
+ /* Try to fetch the first idcat */
+ $sql = "SELECT idcat FROM ".$cfg["tab"]["cat_art"]." WHERE idart = '".Contenido_Security::toInteger($idart)."'";
+ $db->query($sql);
+
+ if ($db->next_record())
+ {
+ $idcat = $db->f("idcat");
+ }
+}
+
+unset ($code);
+unset ($markscript);
+
+if (!$idcatart)
+{
+ if (!$idart)
+ {
+ if (!$idcat)
+ {
+ # Note: In earlier Contenido versions the information if an article is startarticle of a category has been stored
+ # in relation con_cat_art.
+ if ($cfg["is_start_compatible"] == true)
+ {
+ $sql = "SELECT
+ idart,
+ B.idcat
+ FROM
+ ".$cfg["tab"]["cat_art"]." AS A,
+ ".$cfg["tab"]["cat_tree"]." AS B,
+ ".$cfg["tab"]["cat"]." AS C
+ WHERE
+ A.idcat=B.idcat AND
+ B.idcat=C.idcat AND
+ is_start='1' AND
+ idclient='".Contenido_Security::toInteger($client)."'
+ ORDER BY
+ idtree ASC";
+ }
+ else
+ {
+ # Note: Now the information if an article is startarticle of a category is stored in relation con_cat_lang.
+ $sql = "SELECT
+ A.idart,
+ B.idcat
+ FROM
+ ".$cfg["tab"]["cat_art"]." AS A,
+ ".$cfg["tab"]["cat_tree"]." AS B,
+ ".$cfg["tab"]["cat"]." AS C,
+ ".$cfg["tab"]["cat_lang"]." AS D,
+ ".$cfg["tab"]["art_lang"]." AS E
+ WHERE
+ A.idcat=B.idcat AND
+ B.idcat=C.idcat AND
+ D.startidartlang = E.idartlang AND
+ D.idlang='".Contenido_Security::toInteger($lang)."' AND
+ E.idart=A.idart AND
+ E.idlang='".Contenido_Security::toInteger($lang)."' AND
+ idclient='".Contenido_Security::toInteger($client)."'
+ ORDER BY
+ idtree ASC";
+ }
+
+ $db->query($sql);
+
+ if ($db->next_record()) {
+ $idart = $db->f("idart");
+ $idcat = $db->f("idcat");
+ } else {
+ if($contenido) {
+ cInclude("includes", "functions.i18n.php");
+ die(i18n("No start article for this category"));
+ } else {
+ if($error == 1) {
+ die("Fatal error: Could not display error page. Error to display was: 'No start article in this category'");
+ } else {
+ header($errsite);
+ exit;
+ }
+ }
+ }
+ } else {
+ $idart = -1;
+ if ($cfg["is_start_compatible"] == true)
+ {
+ $sql = "SELECT idart FROM ".$cfg["tab"]["cat_art"]." WHERE idcat='".Contenido_Security::toInteger($idcat)."' AND is_start='1'";
+ $db->query($sql);
+
+ if ($db->next_record())
+ {
+ $idart = $db->f("idart");
+ }
+ }
+ else
+ {
+ $sql = "SELECT startidartlang FROM ".$cfg["tab"]["cat_lang"]." WHERE idcat='".Contenido_Security::toInteger($idcat)."' AND idlang='".Contenido_Security::toInteger($lang)."'";
+ $db->query($sql);
+
+ if ($db->next_record())
+ {
+ if ($db->f("startidartlang") != 0)
+ {
+ $sql = "SELECT idart FROM ".$cfg["tab"]["art_lang"]." WHERE idartlang='".Contenido_Security::toInteger($db->f("startidartlang"))."'";
+ $db->query($sql);
+ $db->next_record();
+ $idart = $db->f("idart");
+ }
+ }
+ }
+
+ if ($idart != -1)
+ {
+ }
+ else
+ {
+ // error message in backend
+ if ($contenido)
+ {
+ cInclude("includes", "functions.i18n.php");
+ die(i18n("No start article for this category"));
+ }
+ else
+ {
+ if ($error == 1)
+ {
+ echo "Fatal error: Could not display error page. Error to display was: 'No start article in this category'";
+ }
+ else
+ {
+ header($errsite);
+ exit;
+ }
+ }
+ }
+ }
+ }
+}
+else
+{
+ $sql = "SELECT idcat, idart FROM ".$cfg["tab"]["cat_art"]." WHERE idcatart='".Contenido_Security::toInteger($idcatart)."'";
+
+ $db->query($sql);
+ $db->next_record();
+
+ $idcat = $db->f("idcat");
+ $idart = $db->f("idart");
+}
+
+/* Get idcatart */
+if (0 != $idart && 0 != $idcat)
+{
+ $sql = "SELECT idcatart FROM ".$cfg["tab"]["cat_art"]." WHERE idart = '".Contenido_Security::toInteger($idart)."' AND idcat = '".Contenido_Security::toInteger($idcat)."'";
+
+ $db->query($sql);
+ $db->next_record();
+
+ $idcatart = $db->f("idcatart");
+}
+
+$idartlang = getArtLang($idart, $lang);
+
+if ($idartlang === false)
+{
+ header($errsite);
+ exit;
+}
+
+/*
+ * removed database roundtrip for checking
+ * if cache is enabled
+ * CON-115
+ * 2008-06-25 Thorsten Granz
+ */
+// START: concache, murat purc
+if ($cfg["cache"]["disable"] != '1') {
+ cInclude('frontend', 'includes/concache.php');
+ $oCacheHandler = new cConCacheHandler($GLOBALS['cfgConCache'], $db);
+ $oCacheHandler->start($iStartTime); // $iStartTime ist optional und ist die startzeit des scriptes, z. b. am anfang von fron_content.php
+}
+// END: concache
+
+
+##############################################
+# BACKEND / FRONTEND EDITING
+##############################################
+
+/**
+ * If user has contenido-backend rights.
+ * $contenido <==> the cotenido backend session as http global
+ * In Backend: e.g. contenido/index.php?contenido=dac651142d6a6076247d3afe58c8f8f2
+ * Can also be set via front_content.php?contenido=dac651142d6a6076247d3afe58c8f8f2
+ *
+ * Note: In backend the file contenido/external/backendedit/front_content.php is included!
+ * The reason is to avoid cross-site scripting errors in the backend, if the backend domain differs from
+ * the frontend domain.
+ */
+if ($contenido)
+{
+ $perm->load_permissions();
+
+ /* Change mode edit / view */
+ if (isset ($changeview))
+ {
+ $sess->register("view");
+ $view = $changeview;
+ }
+
+ $col = new InUseCollection;
+
+ if ($overrideid != "" && $overridetype != "")
+ {
+ $col->removeItemMarks($overridetype, $overrideid);
+ }
+ /* Remove all own marks */
+ $col->removeSessionMarks($sess->id);
+ /* If the override flag is set, override a specific InUseItem */
+
+ list ($inUse, $message) = $col->checkAndMark("article", $idartlang, true, i18n("Article is in use by %s (%s)"), true, $cfg['path']['contenido_fullhtml']."external/backendedit/front_content.php?changeview=edit&action=con_editart&idartlang=$idartlang&type=$type&typenr=$typenr&idart=$idart&idcat=$idcat&idcatart=$idcatart&client=$client&lang=$lang");
+
+ $sHtmlInUse = '';
+ $sHtmlInUseMessage = '';
+ if ($inUse == true)
+ {
+ $disabled = 'disabled="disabled"';
+ $sHtmlInUseCss = ' ';
+ $sHtmlInUseMessage = $message;
+ }
+
+ $sql = "SELECT locked FROM ".$cfg["tab"]["art_lang"]." WHERE idart='".Contenido_Security::toInteger($idart)."' AND idlang = '".Contenido_Security::toInteger($lang)."'";
+ $db->query($sql);
+ $db->next_record();
+ $locked = $db->f("locked");
+ if ($locked == 1)
+ {
+ $inUse = true;
+ $disabled = 'disabled="disabled"';
+ }
+
+ // CEC to check if the user has permission to edit articles in this category
+ CEC_Hook::setBreakCondition(false, true); // break at "false", default value "true"
+ $allow = CEC_Hook::executeWhileBreakCondition(
+ 'Contenido.Frontend.AllowEdit', $lang, $idcat, $idart, $auth->auth['uid']
+ );
+
+ if ($perm->have_perm_area_action_item("con_editcontent", "con_editart", $idcat) && $inUse == false && $allow == true)
+ {
+ /* Create buttons for editing */
+ $edit_preview = '';
+
+ if ($view == "edit")
+ {
+ $edit_preview = '
+
+
+
+
+ Preview
+
+ ';
+ }
+ else
+ {
+ $edit_preview = '
+
+
+
+
+ Edit
+
+ ';
+ }
+
+ /* Display articles */
+ if ($cfg["is_start_compatible"] == true)
+ {
+ $sql = "SELECT idart, is_start FROM ".$cfg["tab"]["cat_art"]." WHERE idcat='".Contenido_Security::toInteger($idcat)."' ORDER BY idart";
+
+ $db->query($sql);
+ }
+ else
+ {
+ $sql = "SELECT idart FROM ".$cfg["tab"]["cat_art"]." WHERE idcat='".Contenido_Security::toInteger($idcat)."' ORDER BY idart";
+
+ $db->query($sql);
+ }
+
+ $a = 1;
+
+ $edit_preview .= 'Articles in category: ';
+
+ while ($db->next_record() && ($db->affected_rows() != 1))
+ {
+
+ $class = "font-family:'Verdana'; font-size:10; color:#000000; text-decoration: underline; font-weight:normal";
+ if (!isset ($idart))
+ {
+ if (isStartArticle(getArtLang($idart, $lang), $idcat, $lang))
+ {
+ $class = "font-family: verdana; font-size:10; color:#000000; text-decoration: underline ;font-weight:bold";
+ }
+ }
+ else
+ {
+ if ($idart == $db->f("idart"))
+ {
+ $class = "font-family: verdana; font-size:10; color:#000000; text-decoration: underline; font-weight:bold";
+ }
+ }
+
+ $edit_preview .= "url("front_content.php?idart=".$db->f("idart")."&idcat=$idcat")."\">$a ";
+ $a ++;
+ }
+
+ $edit_preview .= '
';
+
+ }
+
+} // end if $contenido
+
+
+/* If mode is 'edit' and user has permission to edit articles in the current category */
+if ($inUse == false && $allow == true && $view == "edit" && ($perm->have_perm_area_action_item("con_editcontent", "con_editart", $idcat)))
+{
+ cInclude("includes", "functions.tpl.php");
+ cInclude("includes", "functions.con.php");
+ include ($cfg["path"]["contenido"].$cfg["path"]["includes"]."include.con_editcontent.php");
+}
+else
+{
+
+##############################################
+# FRONTEND VIEW
+##############################################
+
+ /* Mark submenuitem 'Preview' in the Contenido Backend (Area: Contenido --> Articles --> Preview) */
+ if ($contenido)
+ {
+ $markscript = markSubMenuItem(4, true);
+ }
+
+ unset($edit); // disable editmode
+
+ /* 'mode' is preview (Area: Contenido --> Articles --> Preview) or article displayed in the front-end */
+ $sql = "SELECT
+ createcode
+ FROM
+ ".$cfg["tab"]["cat_art"]."
+ WHERE
+ idcat = '".Contenido_Security::toInteger($idcat)."' AND
+ idart = '".Contenido_Security::toInteger($idart)."'";
+
+ $db->query($sql);
+ $db->next_record();
+
+ ##############################################
+ # code generation
+ ##############################################
+
+ /* Check if code is expired, create new code if needed */
+ if($db->f("createcode") == 0 && $force == 0 && $cfg['dceModEdit']['use'] !== true && $cfg['dceLayEdit']['use'] !== true) {
+ $sql = "SELECT code FROM ".$cfg["tab"]["code"]." WHERE idcatart = '".Contenido_Security::toInteger($idcatart)."' AND idlang = '".Contenido_Security::toInteger($lang)."'";
+ $db->query($sql);
+
+ if ($db->num_rows() == 0)
+ {
+ /* Include here for performance reasons */
+ cInclude("includes", "functions.tpl.php");
+
+ conGenerateCode($idcat, $idart, $lang, $client);
+
+ $sql = "SELECT code FROM ".$cfg["tab"]["code"]." WHERE idcatart = '".Contenido_Security::toInteger($idcatart)."' AND idlang = '".Contenido_Security::toInteger($lang)."'";
+ $db->query($sql);
+ }
+
+ if ($db->next_record())
+ {
+ $code = stripslashes($db->f("code"));
+ }
+ else
+ {
+ if ($contenido)
+ $code = "echo \"No code available.\";";
+ else
+ {
+ if ($error == 1)
+ {
+ echo "Fatal error: Could not display error page. Error to display was: 'No code available'";
+ }
+ else
+ {
+ header($errsite);
+ exit;
+ }
+ }
+ }
+ } else {
+ $sql = "DELETE FROM ".$cfg["tab"]["code"]." WHERE idcatart = '".Contenido_Security::toInteger($idcatart)."'";
+ $db->query($sql);
+
+ cInclude("includes", "functions.con.php");
+ cInclude("includes", "functions.tpl.php");
+ cInclude("includes", "functions.mod.php");
+
+ conGenerateCode($idcat, $idart, $lang, $client);
+
+ $sql = "SELECT code FROM ".$cfg["tab"]["code"]." WHERE idcatart = '".Contenido_Security::toInteger($idcatart)."' AND idlang = '".Contenido_Security::toInteger($lang)."'";
+
+ $db->query($sql);
+ $db->next_record();
+
+ $code = stripslashes($db->f("code"));
+ }
+
+ /* Add mark Script to code if user is in the backend */
+ $code = preg_replace("/<\/head>/i", "$markscript\n", $code, 1);
+
+ /* If article is in use, display notification */
+ if ($sHtmlInUseCss && $sHtmlInUseMessage) {
+ $code = preg_replace("/<\/head>/i", "$sHtmlInUseCss\n", $code, 1);
+ $code = preg_replace("/(]*)>/i", "\${1}> \n $sHtmlInUseMessage", $code, 1);
+ }
+
+ /* Check if category is public */
+ $sql = "SELECT public FROM ".$cfg["tab"]["cat_lang"]." WHERE idcat='".Contenido_Security::toInteger($idcat)."' AND idlang='".Contenido_Security::toInteger($lang)."'";
+
+ $db->query($sql);
+ $db->next_record();
+
+ $public = $db->f("public");
+
+ ##############################################
+ # protected categories
+ ##############################################
+ if ($public == 0)
+ {
+ if ($auth->auth["uid"] == "nobody")
+ {
+ $sql = "SELECT user_id, value FROM ".$cfg["tab"]["user_prop"]." WHERE type='frontend' and name='allowed_ip'";
+ $db->query($sql);
+
+ while ($db->next_record())
+ {
+ $user_id = $db->f("user_id");
+
+ $range = urldecode($db->f("value"));
+ $slash = strpos($range, "/");
+
+ if ($slash == false)
+ {
+ $netmask = "255.255.255.255";
+ $network = $range;
+ }
+ else
+ {
+ $network = substr($range, 0, $slash);
+ $netmask = substr($range, $slash +1, strlen($range) - $slash -1);
+ }
+
+ if (IP_match($network, $netmask, $_SERVER["REMOTE_ADDR"]))
+ {
+ $sql = "SELECT idright
+ FROM ".$cfg["tab"]["rights"]." AS A,
+ ".$cfg["tab"]["actions"]." AS B,
+ ".$cfg["tab"]["area"]." AS C
+ WHERE B.name = 'front_allow' AND C.name = 'str' AND A.user_id = '".Contenido_Security::escapeDB($user_id, $db2)."' AND A.idcat = '".Contenido_Security::toInteger($idcat)."'
+ AND A.idarea = C.idarea AND B.idaction = A.idaction";
+
+ $db2 = new DB_Contenido;
+ $db2->query($sql);
+
+ if ($db2->num_rows() > 0)
+ {
+ $auth->auth["uid"] = $user_id;
+ $validated = 1;
+ }
+ }
+ }
+ if ($validated != 1)
+ {
+ // CEC to check category access
+ CEC_Hook::setBreakCondition(true, false); // break at "true", default value "false"
+ $allow = CEC_Hook::executeWhileBreakCondition(
+ 'Contenido.Frontend.CategoryAccess', $lang, $idcat, $auth->auth['uid']
+ );
+ $auth->login_if(!$allow);
+ }
+ }
+ else
+ {
+ // CEC to check category access
+ CEC_Hook::setBreakCondition(true, false); // break at "true", default value "false"
+ $allow = CEC_Hook::executeWhileBreakCondition(
+ 'Contenido.Frontend.CategoryAccess', $lang, $idcat, $auth->auth['uid']
+ );
+
+ /*
+ added 2008-11-18 Timo Trautmann
+ in backendeditmode also check if logged in backenduser has permission to view preview of page
+ */
+ if ($allow == false && $contenido && $perm->have_perm_area_action_item("con_editcontent", "con_editart", $idcat)) {
+ $allow = true;
+ }
+
+ if (!$allow)
+ {
+ header($errsite);
+ exit;
+ }
+ }
+ }
+
+ ##############################################
+ # statistic
+ ##############################################
+ $oStatCol = new cApiStatCollection();
+ $oStatCol->trackView($idcatart);
+
+ /*
+ * Check if an article is start article of the category
+ */
+ if ($cfg["is_start_compatible"] == true)
+ {
+ $sql = "SELECT is_start FROM ".$cfg["tab"]["cat_art"]." WHERE idcatart='".Contenido_Security::toInteger($idcatart)."'";
+ $db->query($sql);
+ $db->next_record();
+ $isstart = $db->f("is_start");
+ }
+ else
+ {
+ $sql = "SELECT startidartlang FROM ".$cfg["tab"]["cat_lang"]." WHERE idcat='".Contenido_Security::toInteger($idcat)."' AND idlang = '".Contenido_Security::toInteger($lang)."'";
+ $db->query($sql);
+ $db->next_record();
+ if ($db->f("idartlang") == $idartlang)
+ {
+ $isstart = 1;
+ }
+ else
+ {
+ $isstart = 0;
+ }
+ }
+
+ ##############################################
+ # time management
+ ##############################################
+ $sql = "SELECT timemgmt FROM ".$cfg["tab"]["art_lang"]." WHERE idart='".Contenido_Security::toInteger($idart)."' AND idlang = '".Contenido_Security::toInteger($lang)."'";
+ $db->query($sql);
+ $db->next_record();
+
+ if (($db->f("timemgmt") == "1") && ($isstart != 1))
+ {
+ $sql = "SELECT online, redirect, redirect_url FROM ".$cfg["tab"]["art_lang"]." WHERE idart='".Contenido_Security::toInteger($idart)."' AND idlang = '".Contenido_Security::toInteger($lang)."'
+ AND NOW() > datestart AND NOW() < dateend";
+ }
+ else
+ {
+ $sql = "SELECT online, redirect, redirect_url FROM ".$cfg["tab"]["art_lang"]." WHERE idart='".Contenido_Security::toInteger($idart)."' AND idlang = '".Contenido_Security::toInteger($lang)."'";
+ }
+
+ $db->query($sql);
+ $db->next_record();
+
+ $online = $db->f("online");
+ $redirect = $db->f("redirect");
+ $redirect_url = $db->f("redirect_url");
+
+ @ eval ("\$"."redirect_url = \"$redirect_url\";"); // transform variables
+
+ $insert_base = getEffectiveSetting('generator', 'basehref', "true");
+
+ /*
+ * generate base url
+ */
+ if ($insert_base == "true")
+ {
+ $is_XHTML = getEffectiveSetting('generator', 'xhtml', "false");
+
+ $str_base_uri = $cfgClient[$client]["path"]["htmlpath"];
+
+ // CEC for base href generation
+ $str_base_uri = CEC_Hook::executeAndReturn('Contenido.Frontend.BaseHrefGeneration', $str_base_uri);
+
+ if ($is_XHTML == "true") {
+ $baseCode = ' ';
+ } else {
+ $baseCode = ' ';
+ }
+
+ $code = str_ireplace_once("", "\n".$baseCode, $code);
+ }
+
+ /*
+ * Handle online (offline) articles
+ */
+ if ($online)
+ {
+ if ($redirect == '1' && $redirect_url != '')
+ {
+ page_close();
+ /*
+ * Redirect to the URL defined in article properties
+ */
+ $oUrl = Contenido_Url::getInstance();
+ if ($oUrl->isIdentifiableFrontContentUrl($redirect_url)) {
+ // perform urlbuilding only for identified internal urls
+ $aUrl = $oUrl->parse($redirect_url);
+ if (!isset($aUrl['params']['lang'])) {
+ $aUrl['params']['lang'] = $lang;
+ }
+ $redirect_url = $oUrl->buildRedirect($aUrl['params']);
+ }
+ header("Location: $redirect_url");
+ exit;
+ }
+ else
+ {
+ if ($cfg["debug"]["codeoutput"])
+ {
+ echo "";
+ }
+
+ /*
+ * That's it! The code of an article will be evaluated.
+ * The code of an article is basically a PHP script which is cached in the database.
+ * Layout and Modules are merged depending on the Container definitions of the Template.
+ */
+
+ $aExclude = explode(',', getEffectiveSetting('frontend.no_outputbuffer', 'idart', ''));
+ if (in_array(Contenido_Security::toInteger($idart), $aExclude)) {
+ eval ("?>\n".$code."\n\n".$code."\n\n".$code."\nend();
+ #echo $oCacheHandler->getInfo();
+}
+// END: concache
+
+/*
+ * configuration settings after the site is displayed.
+ */
+if (file_exists("config.after.php"))
+{
+ @ include ("config.after.php");
+}
+
+if (isset ($savedlang))
+{
+ $lang = $savedlang;
+}
+
+$db->disconnect();
+page_close();
+?>
\ No newline at end of file
diff --git a/branches/php7/front_crcloginform.inc.php b/branches/php7/front_crcloginform.inc.php
new file mode 100644
index 0000000..1dd27a8
--- /dev/null
+++ b/branches/php7/front_crcloginform.inc.php
@@ -0,0 +1,153 @@
+
+ * @license http://www.contenido.org/license/LIZENZ.txt
+ * @link http://www.4fb.de
+ * @link http://www.contenido.org
+ *
+ * $Id: front_crcloginform.inc.php 450 2016-07-20 11:11:12Z oldperl $:
+ */
+
+/**
+ * security check
+ */
+if(!defined('CON_FRAMEWORK')) {
+ die('Illegal call');
+}
+
+global $cfg, $idcat, $idart, $idcatart, $lang, $client, $username, $encoding;
+
+$err_catart = trim(getEffectiveSetting("login_error_page", "idcatart", ""));
+$err_cat = trim(getEffectiveSetting("login_error_page", "idcat", ""));
+$err_art = trim(getEffectiveSetting("login_error_page", "idart", ""));
+
+$oUrl = Contenido_Url::getInstance();
+
+$sClientHtmlPath = $cfgClient[$client]['path']['htmlpath'];
+
+$sUrl = $sClientHtmlPath . 'front_content.php';
+
+$sErrorUrl = $sUrl;
+$bRedirect = false;
+
+if ($err_catart != '') {
+ $sErrorUrl .= '?idcatart=' . $err_catart . '&lang=' . $lang;
+ $bRedirect = true;
+} elseif ($err_art != '' && $err_cat != '') {
+ $sErrorUrl .= '?idcat=' . $err_cat . '&idart=' . $err_art . '&lang=' . $lang;
+ $bRedirect = true;
+} elseif ($err_cat != '') {
+ $sErrorUrl .= '?idcat=' . $err_cat . '&lang=' . $lang;
+ $bRedirect = true;
+} elseif ($err_art != '') {
+ $sErrorUrl .= '?idart=' . $err_art . '&lang=' . $lang;
+ $bRedirect = true;
+}
+
+if ($bRedirect) {
+ $aUrl = $oUrl->parse($sess->url($sErrorUrl));
+ $sErrorUrl = $oUrl->buildRedirect($aUrl['params']);
+ header('Location: ' . $sErrorUrl);
+ exit();
+}
+
+if (isset($_GET['return']) || isset($_POST['return'])){
+ $aLocator = array('lang=' . (int) $lang);
+
+ if ($idcat > 0) {
+ $aLocator[] = 'idcat=' . intval($idcat);
+ }
+ if ($idart > 0) {
+ $aLocator[] = 'idart=' . intval($idart);
+ }
+ if (isset($_POST['username']) || isset($_GET['username'])){
+ $aLocator[] = 'wrongpass=1';
+ }
+
+ $sErrorUrl = $sUrl . '?' . implode('&', $aLocator);
+ $aUrl = $oUrl->parse($sess->url($sErrorUrl));
+ $sErrorUrl = $oUrl->buildRedirect($aUrl['params']);
+ header ('Location: ' . $sErrorUrl);
+ exit();
+}
+
+// set form action
+$sFormAction = $sess->url($sUrl . '?idcat=' . intval($idcat) . '&lang=' . $lang);
+$aUrl = $oUrl->parse($sFormAction);
+$sFormAction = $oUrl->build($aUrl['params']);
+
+// set login input image, use button as fallback
+if ( file_exists($cfgClient[$client]['path']['frontend'] . 'images/but_ok.gif') ) {
+ $sLoginButton = ' ' . "\n";
+} else {
+ $sLoginButton = ' ' . "\n";
+}
+
+?>
+
+
+
+
+ :: :: :: :: Contenido Login
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/branches/php7/images/SimpleGallery/ClosePopup.png b/branches/php7/images/SimpleGallery/ClosePopup.png
new file mode 100644
index 0000000..d3881e4
Binary files /dev/null and b/branches/php7/images/SimpleGallery/ClosePopup.png differ
diff --git a/branches/php7/images/SimpleGallery/Loading.gif b/branches/php7/images/SimpleGallery/Loading.gif
new file mode 100644
index 0000000..9572958
Binary files /dev/null and b/branches/php7/images/SimpleGallery/Loading.gif differ
diff --git a/branches/php7/images/SimpleGallery/NaviLeft.png b/branches/php7/images/SimpleGallery/NaviLeft.png
new file mode 100644
index 0000000..a4591f6
Binary files /dev/null and b/branches/php7/images/SimpleGallery/NaviLeft.png differ
diff --git a/branches/php7/images/SimpleGallery/NaviLeftDisabled.png b/branches/php7/images/SimpleGallery/NaviLeftDisabled.png
new file mode 100644
index 0000000..2ffddf9
Binary files /dev/null and b/branches/php7/images/SimpleGallery/NaviLeftDisabled.png differ
diff --git a/branches/php7/images/SimpleGallery/NaviRight.png b/branches/php7/images/SimpleGallery/NaviRight.png
new file mode 100644
index 0000000..80c4d76
Binary files /dev/null and b/branches/php7/images/SimpleGallery/NaviRight.png differ
diff --git a/branches/php7/images/SimpleGallery/NaviRightDisabled.png b/branches/php7/images/SimpleGallery/NaviRightDisabled.png
new file mode 100644
index 0000000..daebe5f
Binary files /dev/null and b/branches/php7/images/SimpleGallery/NaviRightDisabled.png differ
diff --git a/branches/php7/images/SimpleGallery/PopupImageNaviLeft.png b/branches/php7/images/SimpleGallery/PopupImageNaviLeft.png
new file mode 100644
index 0000000..f45a0e2
Binary files /dev/null and b/branches/php7/images/SimpleGallery/PopupImageNaviLeft.png differ
diff --git a/branches/php7/images/SimpleGallery/PopupImageNaviRight.png b/branches/php7/images/SimpleGallery/PopupImageNaviRight.png
new file mode 100644
index 0000000..9be9ee5
Binary files /dev/null and b/branches/php7/images/SimpleGallery/PopupImageNaviRight.png differ
diff --git a/branches/php7/images/SimpleGallery/ZoomOverlay.png b/branches/php7/images/SimpleGallery/ZoomOverlay.png
new file mode 100644
index 0000000..d3c2bdf
Binary files /dev/null and b/branches/php7/images/SimpleGallery/ZoomOverlay.png differ
diff --git a/branches/php7/images/glyphicons-halflings-white.png b/branches/php7/images/glyphicons-halflings-white.png
new file mode 100644
index 0000000..3bf6484
Binary files /dev/null and b/branches/php7/images/glyphicons-halflings-white.png differ
diff --git a/branches/php7/images/glyphicons-halflings.png b/branches/php7/images/glyphicons-halflings.png
new file mode 100644
index 0000000..a996999
Binary files /dev/null and b/branches/php7/images/glyphicons-halflings.png differ
diff --git a/branches/php7/images/ico/apple-touch-icon-114-precomposed.png b/branches/php7/images/ico/apple-touch-icon-114-precomposed.png
new file mode 100644
index 0000000..dbd92fa
Binary files /dev/null and b/branches/php7/images/ico/apple-touch-icon-114-precomposed.png differ
diff --git a/branches/php7/images/ico/apple-touch-icon-144-precomposed.png b/branches/php7/images/ico/apple-touch-icon-144-precomposed.png
new file mode 100644
index 0000000..b85ecd0
Binary files /dev/null and b/branches/php7/images/ico/apple-touch-icon-144-precomposed.png differ
diff --git a/branches/php7/images/ico/apple-touch-icon-57-precomposed.png b/branches/php7/images/ico/apple-touch-icon-57-precomposed.png
new file mode 100644
index 0000000..17a7748
Binary files /dev/null and b/branches/php7/images/ico/apple-touch-icon-57-precomposed.png differ
diff --git a/branches/php7/images/ico/apple-touch-icon-72-precomposed.png b/branches/php7/images/ico/apple-touch-icon-72-precomposed.png
new file mode 100644
index 0000000..da2b86c
Binary files /dev/null and b/branches/php7/images/ico/apple-touch-icon-72-precomposed.png differ
diff --git a/branches/php7/images/ico/social_icons_sprite.png b/branches/php7/images/ico/social_icons_sprite.png
new file mode 100644
index 0000000..f79efb1
Binary files /dev/null and b/branches/php7/images/ico/social_icons_sprite.png differ
diff --git a/branches/php7/images/index.php b/branches/php7/images/index.php
new file mode 100644
index 0000000..ef8b776
--- /dev/null
+++ b/branches/php7/images/index.php
@@ -0,0 +1,4 @@
+
diff --git a/branches/php7/images/logo-small.png b/branches/php7/images/logo-small.png
new file mode 100644
index 0000000..f9bc9dd
Binary files /dev/null and b/branches/php7/images/logo-small.png differ
diff --git a/branches/php7/images/logo.png b/branches/php7/images/logo.png
new file mode 100644
index 0000000..edcf5ec
Binary files /dev/null and b/branches/php7/images/logo.png differ
diff --git a/branches/php7/includes/Util/Modules/Contenido_NavMain_Util.class.php b/branches/php7/includes/Util/Modules/Contenido_NavMain_Util.class.php
new file mode 100644
index 0000000..cc442e2
--- /dev/null
+++ b/branches/php7/includes/Util/Modules/Contenido_NavMain_Util.class.php
@@ -0,0 +1,85 @@
+
+ *
+ * $Id: Contenido_NavMain_Util.class.php 450 2016-07-20 11:11:12Z oldperl $
+ */
+
+class Contenido_NavMain_Util {
+ /**
+ * Recursive Loop over all (sub)categories.
+ * Each level will be assigned a css class navmainStandardLevel_x
+ *
+ * @param Contenido_Category $oCategory
+ * @param Contenido_FrontendNavigation $oFrontendNavigation
+ * @param Template $oTpl
+ * @param string $sUrlStyle
+ * @param array $aCfg
+ * @param int $iLang
+ * @param array $aLevelInfo Information for marking active cat per levels
+ * @param array $aDepthInfo Info on level depth / where to stop. Format: array(iCurrentLoopCount, iMaxLoopCount)
+ * @return void
+ */
+ public static function loopCats(Contenido_Category $oCategory, Contenido_FrontendNavigation $oFrontendNavigation, Template $oTpl, array $aCfg, $iLang, array $aLevelInfo, $iCurrentPageIdcat, array $aDepthInfo = array()) {
+ $aDepthInfo[0] = isset($aDepthInfo[0]) ? $aDepthInfo[0] + 1 : 1;
+ $aDepthInfo[1] = isset($aDepthInfo[1]) ? $aDepthInfo[1] : 1;
+ // display current item
+ $iItemLevel = $oFrontendNavigation->getLevel($oCategory->getIdCat());
+ if (!isset($aLevelInfo[$oCategory->getIdCat()])) {
+ $aLevelInfo[$oCategory->getIdCat()] = array();
+ }
+ $oCurrentSubcategories = $oFrontendNavigation->getSubCategories($oCategory->getIdCat());
+ $aLevelInfo[$oCategory->getIdCat()]['has_children'] = $oCurrentSubcategories->count() > 0;
+ $aLevelInfo[$oCategory->getIdCat()]['first_child_item'] = -1;
+ $aLevelInfo[$oCategory->getIdCat()]['last_child_item'] = -1;
+ $bMarkActive = $oCategory->getIdCat() == $iCurrentPageIdcat || $oFrontendNavigation->isInPathToRoot($oCategory->getIdCat(), $iCurrentPageIdcat);
+ if ($oCurrentSubcategories->count() > 0) {
+ $aLevelInfo[$oCategory->getIdCat()]['first_child_item'] = $oCurrentSubcategories[0]->getIdCat();
+ $aLevelInfo[$oCategory->getIdCat()]['last_child_item'] = $oCurrentSubcategories[$oCurrentSubcategories->count()-1]->getIdCat();
+ }
+ // this is just for sample client - modify to your needs!
+ if (($aCfg['url_builder']['name'] == 'front_content') || ($aCfg['url_builder']['name'] == 'MR')) {
+ $aParams = array('lang' => $iLang, 'idcat' => $oCategory->getIdCat());
+ } else {
+ $aParams = array('a' => $oCategory->getIdCat(),
+ 'idcat' => $oCategory->getIdCat(), // needed to build category path
+ 'lang' => $iLang, // needed to build category path
+ 'level' => 1); // needed to build category path
+ }
+ // fill template with values
+ $oTpl->set('d', 'name', $oCategory->getCategoryLanguage()->getName());
+ $oTpl->set('d', 'css_level', $iItemLevel);
+ $oTpl->set('d', 'css_first_item', ($aLevelInfo[$oCategory->getIdParent()]['first_child_item'] == $oCategory->getIdCat() ? ' first' : ''));
+ $oTpl->set('d', 'css_last_item', ($aLevelInfo[$oCategory->getIdParent()]['last_child_item'] == $oCategory->getIdCat() ? ' last' : ''));
+ $oTpl->set('d', 'css_active_item', ($bMarkActive === true ? ' active' : ''));
+ try {
+ $oTpl->set('d', 'url', Contenido_Url::getInstance()->build($aParams));
+ } catch (InvalidArgumentException $e) {
+ $oTpl->set('d', 'url', '#');
+ }
+ $oTpl->next();
+ // continue until max level depth
+ if ($aDepthInfo[1] > $aDepthInfo[0]) {
+ // check if current item has sub-items to be displayed
+ $bShowFollowUps = ($oCategory->getIdCat() == $iCurrentPageIdcat || $oFrontendNavigation->isInPathToRoot($oCategory->getIdCat(), $iCurrentPageIdcat))
+ ? true : false;
+ if ($bShowFollowUps === true && $oCurrentSubcategories->count() > 0) {
+ $oSubCategories = $oCurrentSubcategories;
+ foreach ($oSubCategories as $oSubCategory) {
+ self::loopCats($oSubCategory, $oFrontendNavigation, $oTpl, $aCfg, $iLang, $aLevelInfo, $iCurrentPageIdcat, $aDepthInfo);
+ }
+ }
+ }
+ }
+}
+?>
\ No newline at end of file
diff --git a/branches/php7/includes/Util/Modules/Contenido_Sitemap_Util.class.php b/branches/php7/includes/Util/Modules/Contenido_Sitemap_Util.class.php
new file mode 100644
index 0000000..3fc3b1b
--- /dev/null
+++ b/branches/php7/includes/Util/Modules/Contenido_Sitemap_Util.class.php
@@ -0,0 +1,66 @@
+
+ *
+ * $Id: Contenido_Sitemap_Util.class.php 450 2016-07-20 11:11:12Z oldperl $
+ */
+class Contenido_Sitemap_Util {
+ /**
+ * Recursive Loop over all (sub)categories.
+ * Each level will be assigned a css class sitemapStandardLevel_x
+ *
+ * @param Contenido_Category $oCategory
+ * @param Contenido_FrontendNavigation $oFrontendNavigation
+ * @param Template $oTpl
+ * @param string $sUrlStyle
+ * @param array $aCfg
+ * @param int $iLang
+ * @param array $aDepthInfo Info on level depth / where to stop. Format: array(iCurrentLoopCount, iMaxLoopCount)
+ * @return void
+ */
+ public static function loopCats(Contenido_Category $oCategory, Contenido_FrontendNavigation $oFrontendNavigation, Template $oTpl, $sUrlStyle, array $aCfg, $iLang, array $aDepthInfo = array()) {
+ $aDepthInfo[0] = isset($aDepthInfo[0]) ? $aDepthInfo[0] + 1 : 1;
+ $aDepthInfo[1] = isset($aDepthInfo[1]) ? $aDepthInfo[1] : 1;
+ // display current item
+ $iItemLevel = $oFrontendNavigation->getLevel($oCategory->getIdCat());
+ // this is just for sample client - modify to your needs!
+ if (($aCfg['url_builder']['name'] == 'front_content') || ($aCfg['url_builder']['name'] == 'MR')) {
+ $aParams = array('lang' => $iLang, 'idcat' => $oCategory->getIdCat());
+ } else {
+ $aParams = array('a' => $oCategory->getIdCat(),
+ 'idcat' => $oCategory->getIdCat(), // needed to build category path
+ 'lang' => $iLang, // needed to build category path
+ 'level' => 1); // needed to build category path
+ }
+ // fill template with values
+ $oTpl->set('d', 'name', $oCategory->getCategoryLanguage()->getName());
+ $oTpl->set('d', 'css_level', $iItemLevel);
+ try {
+ $oTpl->set('d', 'url', Contenido_Url::getInstance()->build($aParams));
+ } catch (InvalidArgumentException $e) {
+ $oTpl->set('d', 'url', '#');
+ }
+ $oTpl->next();
+ // continue until max level depth
+ if ($aDepthInfo[1] > $aDepthInfo[0]) {
+ // check if current item has sub-items
+ $oSubCategories = $oFrontendNavigation->getSubCategories($oCategory->getIdCat());
+ if ($oSubCategories->count() > 0) {
+ foreach ($oSubCategories as $oSubCategory) {
+ self::loopCats($oSubCategory, $oFrontendNavigation, $oTpl, $sUrlStyle, $aCfg, $iLang, $aDepthInfo);
+ }
+ }
+ }
+ }
+}
+?>
\ No newline at end of file
diff --git a/branches/php7/includes/class.concache.php b/branches/php7/includes/class.concache.php
new file mode 100644
index 0000000..72cadcc
--- /dev/null
+++ b/branches/php7/includes/class.concache.php
@@ -0,0 +1,531 @@
+
+ * @copyright four for business AG
+ * @license http://www.contenido.org/license/LIZENZ.txt
+ * @link http://www.4fb.de
+ * @link http://www.contenido.org
+ *
+ * $Id: class.concache.php 450 2016-07-20 11:11:12Z oldperl $:
+ */
+
+if(!defined('CON_FRAMEWORK')) {
+ die('Illegal call');
+}
+
+class cConCache{
+
+ /**
+ * PEAR Cache Output Object
+ *
+ * @var obj $_oPearCache
+ */
+ var $_oPearCache;
+
+ /**
+ * Flag 2 activate caching.
+ *
+ * @var bool $_bEnableCaching
+ */
+ var $_bEnableCaching = false;
+
+ /**
+ * Flag for output of debug informations.
+ *
+ * @var bool $_bDebug
+ */
+ var $_bDebug = false;
+
+ /**
+ * Flag 2 print html comment including some debug informations.
+ *
+ * @var bool $_bHtmlComment
+ */
+ var $_bHtmlComment = false;
+
+ /**
+ * Start time of caching.
+ *
+ * @var int $_iStartTime
+ */
+ var $_iStartTime;
+
+ /**
+ * Option array 4 generating cache identifier (e. g. $_GET,$_POST, $_COOKIE, ...).
+ *
+ * @var array _aIDOptions
+ */
+ var $_aIDOptions;
+
+ /**
+ * Option array 4 pear caching.
+ *
+ * @var array $_aIDOptions
+ */
+ var $_aCacheOptions;
+
+ /**
+ * Handler array 2 store code, beeing executed on some events.
+ * We have actually two events:
+ * - 'beforeoutput': code to execute before doing the output
+ * - 'afteroutput' code to execute after output
+ *
+ * @var array $_aEventCode
+ */
+ var $_aEventCode;
+
+ /**
+ * Unique identifier for caching.
+ *
+ * @var string $_sID
+ */
+ var $_sID;
+
+ /**
+ * Directory 2 store cached output.
+ *
+ * @var string $_sDir
+ */
+ var $_sDir = 'cache/';
+
+ /**
+ * Subdirectory 2 store cached output.
+ *
+ * @var string $_sGroup
+ */
+ var $_sGroup = 'default';
+
+ /**
+ * Substring 2 add as prefix to cache-filename.
+ *
+ * @var string $_sPrefix
+ */
+ var $_sPrefix = 'cache_';
+
+ /**
+ * Default lifetime of cached files.
+ *
+ * @var int $_iLifetime
+ */
+ var $_iLifetime = 3600;
+
+ /**
+ * Used 2 store debug message.
+ *
+ * @var string $_sDebugMsg
+ */
+ var $_sDebugMsg = '';
+
+ /**
+ * HTML code template used for debug message.
+ *
+ * @var string $_sDebugTpl
+ */
+ var $_sDebugTpl = '%s
';
+
+ /**
+ * HTML comment template used for generating some debug infos.
+ *
+ * @var string $_sDebugTpl
+ */
+ var $_sHtmlCommentTpl = '
+
+';
+
+ /**
+ * Constructor of cConCache
+ *
+ * @param string $cachedir Directory 2 cache files
+ * @param string $cachegroup Subdirectory 2 cache files
+ * @param string $cacheprefix Prefixname 2 add 2 cached files
+ */
+ function cConCache($cachedir=null, $cachegroup=null, $cacheprefix=null){
+ // wherever you want the cache files
+ if(!is_null($cachedir)){
+ $this->_sDir = $cachedir;
+ }
+
+ // subdirectory where you want the cache files
+ if(!is_null($cachegroup)){
+ $this->_sGroup = $cachegroup;
+ }
+
+ // optional a filename prefix
+ if(!is_null($cacheprefix)){
+ $this->_sPrefix = $cacheprefix;
+ }
+
+ // config options are passed to the cache as an array
+ $this->_aCacheOptions = array('cache_dir' => $this->_sDir, 'filename_prefix' => $this->_sPrefix);
+
+ } // function cConCache()
+
+
+ /**
+ * Set/Get the flag 2 enable caching.
+ *
+ * @param bool $enable True 2 enable chaching or false
+ * @return mixed Enable flag or void
+ */
+ function enable($enable=null){
+ if(!is_null($enable) && is_bool($enable)){
+ $this->_bEnableCaching = $enable;
+ } else {
+ return $this->_bEnableCaching;
+ }
+ } // function enable()
+
+
+ /**
+ * Set/Get the flag 2 debug cache object (prints out miss/hit state with execution time).
+ *
+ * @param bool $debug True 2 activate debugging or false.
+ * @return mixed Debug flag or void
+ */
+ function debug($debug){
+ if(!is_null($debug) && is_bool($debug)){
+ $this->_bDebug = $debug;
+ } else {
+ return $this->_bDebug;
+ }
+ } // function debug()
+
+
+ /**
+ * Set/Get flag 2 print out cache info as html comment.
+ *
+ * @param bool $htmlcomment True debugging or false.
+ * @return void Htmlcomment flag or void
+ */
+ function htmlComment($htmlcomment){
+ if(!is_null($htmlcomment) && is_bool($htmlcomment)){
+ $this->_bHtmlComment = $htmlcomment;
+ } else {
+ return $this->_bHtmlComment;
+ }
+ } // function htmlComment()
+
+
+ /**
+ * Set/Get caching lifetime in seconds.
+ *
+ * @param int $seconds New Lifetime in seconds
+ * @return mixed Actual lifetime or void
+ */
+ function lifetime($seconds=null){
+ if ($seconds != null && is_numeric($seconds) && $seconds > 0) {
+ $this->_iLifetime = $seconds;
+ } else {
+ return $this->_iLifetime;
+ }
+ } // function lifetime()
+
+
+ /**
+ * Set/Get template to use on printing the chache info.
+ *
+ * @param string $template Template string including the '%s' format definition.
+ * @return void
+ */
+ function infoTemplate($template){
+ $this->_sDebugTpl = $template;
+ } // function infoTemplate()
+
+
+ /**
+ * Add option 4 caching (e. g. $_GET,$_POST, $_COOKIE, ...). Used 2 generate the id for caching.
+ *
+ * @param string $name Name of option
+ * @param string $option Value of option (any variable)
+ * @return void
+ */
+ function addOption($name, $option){
+ $this->_aIDOptions[$name] = $option;
+ } // function addOption()
+
+
+ /**
+ * Returns information cache hit/miss and execution time if caching is enabled.
+ *
+ * @return string Information about cache if caching is enabled, otherwhise nothing.
+ */
+ function getInfo(){
+ if(!$this->_bEnableCaching){ return; }
+ return $this->_sDebugMsg;
+ } // function getInfo()
+
+
+ /**
+ * Handles PEAR caching. The script will be terminated by calling die(), if any cached
+ * content is found.
+ *
+ * @param int $iPageStartTime Optional start time, e. g. start time of main script
+ * @return void
+ */
+ function start($iPageStartTime=null){
+ if(!$this->_bEnableCaching){ return; }
+
+ $this->_iStartTime = $this->_getMicroTime();
+
+ // set cache object and unique id
+ $this->_initPEARCache();
+
+ // check if it's cached and start the output buffering if neccessary
+ if ($content = $this->_oPearCache->start($this->_sID, $this->_sGroup)) {
+
+ //raise beforeoutput event
+ $this->_raiseEvent('beforeoutput');
+
+ $iEndTime = $this->_getMicroTime();
+ if ($this->_bHtmlComment) {
+ $time = sprintf("%2.4f", $iEndTime - $this->_iStartTime);
+ $exp = date('Y-m-d H:i:s', $this->_oPearCache->container->expires);
+ $content .= sprintf($this->_sHtmlCommentTpl, 'HIT', $time.' sec.', $exp);
+ if ($iPageStartTime != null && is_numeric($iPageStartTime)) {
+ $content .= '';
+ }
+ }
+
+ if ($this->_bDebug) {
+ $info = sprintf("HIT: %2.4f sec.", $iEndTime - $this->_iStartTime);
+ $info = sprintf($this->_sDebugTpl, $info);
+ $content = str_ireplace('', $info."\n", $content);
+ }
+
+ echo $content;
+
+ //raise afteroutput event
+ $this->_raiseEvent('afteroutput');
+
+ die();
+ }
+ } // function start()
+
+
+ /**
+ * Handles ending of PEAR caching.
+ *
+ * @return void
+ */
+ function end(){
+ if (!$this->_bEnableCaching){ return; }
+
+ // this might go into your auto_append file. store the data into the cache, default lifetime is set in $this->_iLifetime
+ $this->_oPearCache->endPrint($this->_iLifetime, __FILE__ . ' ' . filemtime(__FILE__));
+
+ if ($this->_bDebug) {
+ $this->_sDebugMsg .= "\n".sprintf("MISS: %2.4f sec.\n", $this->_getMicroTime() - $this->_iStartTime);
+ $this->_sDebugMsg = sprintf($this->_sDebugTpl, $this->_sDebugMsg);
+ }
+ } // function end()
+
+
+ /**
+ * Removes any cached content if exists.
+ * This is nesessary to delete cached articles, if they are changed on backend.
+ *
+ * @return void
+ */
+ function removeFromCache(){
+ // set cache object and unique id
+ $this->_initPEARCache();
+ $bExists = $this->_oPearCache->isCached($this->_sID, $this->_sGroup);
+ if ($bExists) {
+ $this->_oPearCache->remove($this->_sID, $this->_sGroup);
+ }
+ } // function removeFromCache()
+
+
+ /*
+ * Creates one-time a instance of PEAR cache output object and also the unique id,
+ * if propery $this->_oPearCache is not set.
+ *
+ * @return void
+ * @access private
+ */
+ function _initPEARCache(){
+ if (is_object($this->_oPearCache)) {
+ return;
+ }
+
+ // create a output cache object mode - file storage
+ cInclude('pear', 'Cache/Output.php');
+ $this->_oPearCache = new Cache_Output('file', $this->_aCacheOptions);
+
+ // generate an ID from whatever might influence the script behavoiur
+ $this->_sID = $this->_oPearCache->generateID($this->_aIDOptions);
+ } // function _initPEARCache()
+
+
+ /**
+ * Raises any defined event code by using eval().
+ *
+ * @param string $name Name of event 2 raise
+ * @return void
+ * @access private
+ */
+ function _raiseEvent($name){
+ // check if event exists, get out if not
+ if (!isset($this->_aEventCode[$name]) && !is_array($this->_aEventCode[$name])) {
+ return;
+ }
+
+ // loop array and execute each defined php-code
+ foreach ($this->_aEventCode[$name] as $code) {
+ eval($code);
+ }
+
+ } // function _raiseEvent()
+
+
+ /**
+ * Returns microtime (Unix-Timestamp), used to calculate time of execution.
+ *
+ * @return float Timestamp
+ * @access private
+ */
+ function _getMicroTime(){
+ $mtime = explode(' ', microtime());
+ $mtime = $mtime[1] + $mtime[0];
+ return $mtime;
+ } // function _getMicroTime()
+
+} // class cConCache
+
+
+
+/**
+* @class cConCacheHandler
+* @brief Class cConCacheHandler. This is used to set configuration
+* and to manage caching output
+* @version 0.9
+* @date 07.07.2006
+* @author Murat Purc
+* @copyright � Murat Purc 2006
+*/
+class cConCacheHandler extends cConCache {
+
+ /**
+ * Constructor of cConCacheHandler.
+ * Does some checks and sets the configuration of cache object.
+ *
+ * @param array $aConf Configuration of caching as follows:
+ * - $a['excludecontenido'] bool. don't cache output, if we have a contenido variable,
+ * e. g. on calling frontend preview from backend
+ * - $a['enable'] bool. activate caching of frontend output
+ * - $a['debug'] bool. compose debuginfo (hit/miss and execution time of caching)
+ * - $a['infotemplate'] string. debug information template
+ * - $a['htmlcomment'] bool. add a html comment including several debug messages to output
+ * - $a['lifetime'] int. lifetime in seconds 2 cache output
+ * - $a['cachedir'] string. directory where cached content is 2 store.
+ * - $a['cachegroup'] string. cache group, will be a subdirectory inside cachedir
+ * - $a['cacheprefix'] string. add prefix 2 stored filenames
+ * - $a['idoptions'] array. several variables 2 create a unique id, if the output depends
+ * on them. e. g. array('uri'=>$_SERVER['REQUEST_URI'],'post'=>$_POST,'get'=>$_GET);
+ * @param obj $db Reference 2 Contenido database object
+ * @param int $iCreateCode Flag of createcode state from table con_cat_art
+ */
+ function cConCacheHandler($aConf, &$db, $iCreateCode=null) {
+
+ // check if caching is allowed on contenido variable
+ if ($aConf['excludecontenido'] == true) {
+ if (isset($GLOBALS['contenido'])) {
+ // contenido variable exists, set state and get out here
+ $this->_bEnableCaching = false;
+ return;
+ }
+ }
+
+ // set enable state of caching
+ if (is_bool($aConf['enable'])) {
+ $this->_bEnableCaching = $aConf['enable'];
+ }
+ if ($this->_bEnableCaching == false) {
+ return;
+ }
+
+ // check if current article shouldn't be cached (by stese)
+ $sExcludeIdarts = getEffectiveSetting('cache', 'excludeidarts', false);
+ if ($sExcludeIdarts && strlen($sExcludeIdarts)>0) {
+ $sExcludeIdarts = preg_replace("/[^0-9,]/", '', $sExcludeIdarts);
+ $aExcludeIdart = explode(',', $sExcludeIdarts);
+ if (in_array($GLOBALS['idart'], $aExcludeIdart)) {
+ $this->_bEnableCaching = false;
+ return;
+ }
+ }
+
+ $this->_oDB = $db;
+
+ // set caching configuration
+ parent::cConCache($aConf['cachedir'], $aConf['cachegroup']);
+ $this->debug($aConf['debug']);
+ $this->htmlComment($aConf['htmlcomment']);
+ $this->lifetime($aConf['lifetime']);
+ $this->infoTemplate($aConf['infotemplate']);
+ foreach ($aConf['idoptions'] as $name => $var) {
+ $this->addOption($name, $var);
+ }
+
+ if (is_array($aConf['raiseonevent'])) {
+ $this->_aEventCode = $aConf['raiseonevent'];
+ }
+
+ // check, if code is to create
+ $this->_bEnableCaching = !$this->_isCode2Create($iCreateCode);
+ if ($this->_bEnableCaching == false) {
+ $this->removeFromCache();
+ }
+
+ } // function cConCacheHandler()
+
+
+ /**
+ * Checks, if the create code flag is set. Output will be loaded from cache, if no code is 2 create.
+ * It also checks the state of global variable $force.
+ *
+ * @param mixed $iCreateCode State of create code (0 or 1). The state will be loaded from database if value is "null"
+ * @return bool True if code is to create, otherwhise false.
+ * @access private
+ */
+ function _isCode2Create($iCreateCode){
+ if ($this->_bEnableCaching == false) {
+ return;
+ }
+
+ // check content of global variable $force, get out if is's set to '1'
+ if (isset($GLOBALS['force']) && is_numeric($GLOBALS['force']) && $GLOBALS['force'] == 1) {
+ return true;
+ }
+
+ if (is_null($iCreateCode)) {
+ // check if code is expired
+
+ $oApiCatArtColl = new cApiCategoryArticleCollection('idart="'.$GLOBALS['idart'].'" AND idcat="'.$GLOBALS['idcat'].'"');
+ if ($oApiCatArt = $oApiCatArtColl->next()) {
+ $iCreateCode = $oApiCatArt->get('createcode');
+ unset($oApiCatArt);
+ }
+ unset($oApiCatArtColl);
+ }
+
+ return ($iCreateCode == 1) ? true : false;
+ } // function _isCode2Create()
+
+
+} // class cConCacheHandler
+
+?>
\ No newline at end of file
diff --git a/branches/php7/includes/class.input.helper.php b/branches/php7/includes/class.input.helper.php
new file mode 100644
index 0000000..fc7b816
--- /dev/null
+++ b/branches/php7/includes/class.input.helper.php
@@ -0,0 +1,573 @@
+
+ * @license http://www.contenido.org/license/LIZENZ.txt
+ * @link http://www.4fb.de
+ * @link http://www.contenido.org
+ *
+ * $Id: class.input.helper.php 450 2016-07-20 11:11:12Z oldperl $:
+ */
+
+if(!defined('CON_FRAMEWORK')) {
+ die('Illegal call');
+}
+
+// Select box with additional functions for category and article selection
+class cHTMLInputSelectElement extends cHTMLSelectElement
+{
+ /**
+ * Constructor. Creates an HTML select field (aka "DropDown").
+ *
+ * @param string $sName Name of the element
+ * @param int $iWidth Width of the select element
+ * @param string $sID ID of the element
+ * @param string $bDisabled Item disabled flag (non-empty to set disabled)
+ * @param int $iTabIndex Tab index for form elements
+ * @param string $sAccesskey Key to access the field
+ *
+ * @return none
+ **/
+ function cHTMLInputSelectElement ($sName, $iWidth = "", $sID = "", $bDisabled = false, $iTabIndex = null, $sAccessKey = "")
+ {
+ cHTMLSelectElement :: __construct($sName, $iWidth, $sID, $bDisabled, $iTabIndex, $sAccessKey);
+ }
+
+
+ /**
+ * Function addArticles. Adds articles to select box values.
+ *
+ * @param int $iIDCat idcat of the category to be listed
+ * @param bool $bColored Add color information to option elements
+ * @param bool $bArtOnline If true, only online articles will be added
+ * @param string $sSpaces Just some " " to show data hierarchically (used in conjunction with addCategories)
+ *
+ * @return int Number of items added
+ **/
+ function addArticles ($iIDCat, $bColored = false, $bArtOnline = true, $sSpaces = "")
+ {
+ global $cfg, $lang;
+
+ $oDB = new DB_Contenido;
+
+ if (is_numeric($iIDCat) && $iIDCat > 0)
+ {
+ $sSQL = "SELECT tblArtLang.title AS title, tblArtLang.idartlang AS idartlang, tblCatArt.idcat AS idcat, ";
+ $sSQL .= "tblCatArt.idcatart AS idcatart, tblCatArt.is_start AS isstart, tblArtLang.online AS online, ";
+ $sSQL .= "tblCatLang.startidartlang as idstartartlang ";
+ $sSQL .= "FROM ".$cfg["tab"]["art_lang"]." AS tblArtLang, ".$cfg["tab"]["cat_art"]." AS tblCatArt, ";
+ $sSQL .= $cfg["tab"]["cat_lang"]." AS tblCatLang ";
+ $sSQL .= "WHERE tblCatArt.idcat = '".Contenido_Security::toInteger($iIDCat)."' AND tblCatLang.idcat = tblCatArt.idcat AND tblCatLang.idlang = tblArtLang.idlang AND ";
+
+ if ($bArtOnline) {
+ $sSQL .= "tblArtLang.online = '1' AND ";
+ }
+
+ $sSQL .= "tblArtLang.idart = tblCatArt.idart AND tblArtLang.idlang = '".Contenido_Security::escapeDB($lang, $oDB)."' ";
+ if ($cfg["is_start_compatible"] == true) {
+ $sSQL .= "ORDER BY tblCatArt.is_start DESC, tblArtLang.title"; // Getting start article as first article
+ } else {
+ $sSQL .= "ORDER BY tblArtLang.title";
+ }
+
+ $oDB->query($sSQL);
+
+ $iCount = $oDB->num_rows();
+ if ($iCount == 0) {
+ return 0;
+ } else {
+ $iCounter = count($this->_options);
+ while ($oDB->next_record())
+ {
+ // Generate new option element
+ $oOption = new cHTMLOptionElement($sSpaces." ".substr(urldecode($oDB->f("title")), 0, 32), $oDB->f("idcatart"));
+
+ if ($bColored)
+ {
+ $bIsStartArticle = false;
+ if ($cfg["is_start_compatible"] == true && $oDB->f("isstart") == 1) {
+ // Compatible mode and "start article" flag is set
+ $bIsStartArticle = true;
+ } else if ($cfg["is_start_compatible"] != true && $oDB->f("idstartartlang") == $oDB->f("idartlang")) {
+ // No compatible mode and current article is start article (idstartartlang is the same for all records within a category)
+ $bIsStartArticle = true;
+ }
+
+ if ($bIsStartArticle)
+ {
+ if ($oDB->f("online") == 0) {
+ // Start article, but offline -> red
+ $oOption->setStyle("color: #ff0000;");
+ } else {
+ // Start article -> blue
+ $oOption->setStyle("color: #0000ff;");
+ }
+ } else if ($oDB->f("online") == 0) {
+ // Offline article -> grey
+ $oOption->setStyle("color: #666666;");
+ }
+ }
+
+ // Add option element to the list
+ $this->addOptionElement($iCounter, $oOption);
+ $iCounter++;
+ }
+ return $iCount;
+ }
+ } else {
+ return 0;
+ }
+ }
+
+ /**
+ * Function addCategories. Adds category elements (optionally including articles) to select box values.
+ * Note: Using "with articles" adds the articles also - but the categories will get a negative value!
+ * There is no way to distinguish between a category id and an article id...
+ *
+ * @param int $iMaxLevel Max. level shown (to be exact: except this level)
+ * @param bool $bColored Add color information to option elements
+ * @param bool $bCatVisible If true, only add idcat as value, if cat is visible
+ * @param bool $bCatPublic If true, only add idcat as value, if cat is public
+ * @param bool $bWithArt Add also articles per category
+ * @param bool $bArtOnline If true, show only online articles
+ *
+ * @return int Number of items added
+ **/
+ function addCategories ($iMaxLevel = 0, $bColored = false, $bCatVisible = true, $bCatPublic = true,
+ $bWithArt = false, $bArtOnline = true)
+ {
+ global $cfg, $client, $lang;
+
+ $oDB = new DB_Contenido;
+
+ $sSQL = "SELECT tblCat.idcat AS idcat, tblCatLang.name AS name, ";
+ $sSQL .= "tblCatLang.visible AS visible, tblCatLang.public AS public, tblCatTree.level AS level ";
+ $sSQL .= "FROM ".$cfg["tab"]["cat"]." AS tblCat, ".$cfg["tab"]["cat_lang"]." AS tblCatLang, ";
+ $sSQL .= $cfg["tab"]["cat_tree"]." AS tblCatTree ";
+ $sSQL .= "WHERE tblCat.idclient = '".Contenido_Security::escapeDB($client, $oDB)."' AND tblCatLang.idlang = '".Contenido_Security::escapeDB($lang, $oDB)."' AND ";
+ $sSQL .= "tblCatLang.idcat = tblCat.idcat AND tblCatTree.idcat = tblCat.idcat ";
+
+ if ($iMaxLevel > 0) {
+ $sSQL .= "AND tblCatTree.level < '".Contenido_Security::escapeDB($iMaxLevel, $oDB)."' ";
+ }
+ $sSQL .= "ORDER BY tblCatTree.idtree";
+
+ $oDB->query($sSQL);
+
+ $iCount = $oDB->num_rows();
+ if ($iCount == 0) {
+ return false;
+ } else {
+ $iCounter = count($this->_options);
+ while ($oDB->next_record())
+ {
+ $sSpaces = "";
+ $sStyle = "";
+ $iID = $oDB->f("idcat");
+
+ for ($i = 0; $i < $oDB->f("level"); $i++) {
+ $sSpaces .= " ";
+ }
+
+ // Generate new option element
+ if (($bCatVisible && $oDB->f("visible") == 0) ||
+ ($bCatPublic && $oDB->f("public") == 0)) {
+ // If category has to be visible or public and it isn't, don't add value
+ $sValue = "";
+ } else if ($bWithArt) {
+ // If article will be added, set negative idcat as value
+ $sValue = "-".$iID;
+ } else {
+ // Show only categories - and everything is fine...
+ $sValue = $iID;
+ }
+ $oOption = new cHTMLOptionElement($sSpaces."> ".urldecode($oDB->f("name")), $sValue);
+
+ // Coloring option element, restricted shows grey color
+ $oOption->setStyle("background-color: #EFEFEF");
+ if ($bColored && ($oDB->f("visible") == 0 || $oDB->f("public") == 0)) {
+ $oOption->setStyle("color: #666666;");
+ }
+
+ // Add option element to the list
+ $this->addOptionElement($iCounter, $oOption);
+
+ if ($bWithArt) {
+ $iArticles = $this->addArticles($iID, $bColored, $bArtOnline, $sSpaces);
+ $iCount += $iArticles;
+ }
+ $iCounter = count($this->_options);
+ }
+ }
+ return $iCount;
+ }
+
+ /**
+ * Function addTypesFromArt. Adds types and type ids which are available for the specified article
+ *
+ * @param int $iIDCatArt Article id
+ * @param string $sTypeRange Komma separated list of Contenido type ids which may be in the resulting list (e.g. '1','17','28')
+ *
+ * @return int Number of items added
+ **/
+ function addTypesFromArt ($iIDCatArt, $sTypeRange = "")
+ {
+ global $cfg, $lang;
+
+ $oDB = new DB_Contenido;
+
+ if (is_numeric($iIDCatArt) && $iIDCatArt > 0)
+ {
+ $sSQL = "SELECT tblContent.typeid AS typeid, tblContent.idtype AS idtype, tblType.type AS type, tblType.description AS description, ";
+ $sSQL .= "tblContent.value AS value ";
+ $sSQL .= "FROM ".$cfg["tab"]["content"]." AS tblContent, ".$cfg["tab"]["art_lang"]." AS tblArtLang, ";
+ $sSQL .= $cfg["tab"]["cat_art"]." AS tblCatArt, ".$cfg["tab"]["type"]." AS tblType ";
+ $sSQL .= "WHERE tblContent.idtype = tblType.idtype AND tblContent.idartlang = tblArtLang.idartlang AND ";
+ $sSQL .= "tblArtLang.idart = tblCatArt.idart AND tblArtLang.idlang = '". Contenido_Security::escapeDB($lang, $oDB)."' AND tblCatArt.idcatart = '". Contenido_Security::toInteger($iIDCatArt)."' ";
+
+ if ($sTypeRange != "") {
+ $sSQL .= "AND tblContent.idtype IN (". Contenido_Security::escapeDB($sTypeRange, $oDB).") ";
+ }
+
+ $sql .= "ORDER BY tblContent.idtype, tblContent.typeid";
+
+ $oDB->query($sSQL);
+
+ $iCount = $oDB->num_rows();
+ if ($iCount == 0) {
+ return false;
+ } else {
+ while ($oDB->next_record())
+ {
+ $sTypeIdentifier = "tblData.idtype = '".$oDB->f('idtype')."' AND tblData.typeid = '".$oDB->f('typeid')."'";
+
+ // Generate new option element
+ $oOption = new cHTMLOptionElement($oDB->f('type')."[".$oDB->f('typeid')."]: ".substr(strip_tags(urldecode($oDB->f("value"))), 0, 50), $sTypeIdentifier);
+
+ // Add option element to the list
+ $this->addOptionElement($sTypeIdentifier, $oOption);
+ }
+ return $iCount;
+ }
+ } else {
+ return false;
+ }
+ }
+
+ /**
+ * Selects specified elements as selected
+ *
+ * @param array $aElements Array with "values" of the cHTMLOptionElement to set
+ *
+ * @return none
+ */
+ function setSelected($aElements)
+ {
+ if (is_array($this->_options) && is_array($aElements))
+ {
+ foreach ($this->_options as $sKey => $oOption)
+ {
+ if (in_array($oOption->getAttribute("value"), $aElements))
+ {
+ $oOption->setSelected(true);
+ $this->_options[$sKey] = $oOption;
+ } else {
+ $oOption->setSelected(false);
+ $this->_options[$sKey] = $oOption;
+ }
+ }
+ }
+ }
+}
+
+class UI_Config_Table
+{
+ var $_sTplCellCode;
+ var $_sTplTableFile;
+
+ var $_sWidth;
+ var $_sBorder;
+ var $_sBorderColor;
+ var $_bSolidBorder;
+ var $_sPadding;
+ var $_aCells;
+ var $_aCellAlignment;
+ var $_aCellVAlignment;
+ var $_aCellColSpan;
+ var $_aCellClass;
+ var $_aRowBgColor;
+ var $_aRowExtra;
+ var $_bAddMultiSelJS;
+
+ var $_sColorLight;
+ var $_sColorDark;
+
+ function UI_Config_Table()
+ {
+ global $cfg;
+
+ $this->_sPadding = 2;
+ $this->_sBorder = 0;
+ $this->_sBorderColor = $cfg['color']['table_border'];
+ $this->_sTplCellCode = ' {CONTENT} '."\n";
+ $this->_sTplTableFile = $cfg['path']['contenido'].$cfg['path']['templates'].$cfg['templates']['generic_list'];
+ $this->_sColorLight = $cfg['color']['table_light'];
+ $this->_sColorDark = $cfg['color']['table_dark'];
+ }
+
+ function setCellTemplate($sCode)
+ {
+ $this->_sTplCellCode = $sCode;
+ }
+
+
+ function setTableTemplateFile($sPath)
+ {
+ $this->_sTplTableFile = $sPath;
+ }
+
+ function setLightColor($sColor)
+ {
+ $this->_sColorLight = $sColor;
+ }
+
+ function setDarkColor($sColor)
+ {
+ $this->_sColorDark = $sColor;
+ }
+
+ function setAddMultiSelJS($bEnabled = true)
+ {
+ $this->_bAddMultiSelJS = (bool)$bEnabled;
+ }
+
+ function setWidth ($sWidth)
+ {
+ $this->_sWidth = $sWidth;
+ }
+
+ function setPadding ($sPadding)
+ {
+ $this->_sPadding = $sPadding;
+ }
+
+ function setBorder ($sBorder)
+ {
+ $this->_sBorder = $sBorder;
+ }
+
+ function setBorderColor ($sBorderColor)
+ {
+ $this->_sBorderColor = $sBorderColor;
+ }
+
+ function setSolidBorder ($bSolidBorder = true)
+ {
+ $this->_bSolidBorder = (bool)$bSolidBorder;
+ }
+
+ function setCell ($sRow, $sCell, $sContent)
+ {
+ $this->_aCells[$sRow][$sCell] = $sContent;
+ $this->_aCellAlignment[$sRow][$sCell] = "";
+ }
+
+ function setCellAlignment ($sRow, $sCell, $sAlignment)
+ {
+ $this->_aCellAlignment[$sRow][$sCell] = $sAlignment;
+ }
+
+ function setCellVAlignment ($sRow, $sCell, $sAlignment)
+ {
+ $this->_aCellVAlignment[$sRow][$sCell] = $sAlignment;
+ }
+
+ function setCellColspan ($sRow, $sCell, $iColSpan)
+ {
+ $this->_aCellColSpan[$sRow][$sCell] = $iColSpan;
+ }
+
+ function setCellClass ($sRow, $sCell, $sClass)
+ {
+ $this->_aCellClass[$sRow][$sCell] = $sClass;
+ }
+
+ function setRowBgColor ($sRow, $sColor)
+ {
+ $this->_aRowBgColor[$sRow] = $sColor;
+ }
+
+ function setRowExtra ($sRow, $sExtra)
+ {
+ $this->_aRowExtra[$sRow] = $sExtra;
+ }
+
+ function _addMultiSelJS()
+ {
+ // Trick: To save multiple selections in -Element, add some JS which saves the
+ // selection, comma separated in a hidden input field on change.
+
+ // Try ... catch prevents error messages, if function is added more than once
+ // if (!fncUpdateSel) in JS has not worked...
+
+ $sSkript = ' '."\n";
+
+ return $sSkript;
+ }
+
+ function render($bPrint = false)
+ {
+ $oTable = new Template;
+ $oTable->reset();
+
+ $oTable->set('s', 'CELLPADDING', $this->_sPadding);
+ $oTable->set('s', 'BORDER', $this->_sBorder);
+ $oTable->set('s', 'BORDERCOLOR', $this->_sBorderColor);
+
+ $iColCount = 0;
+ $bDark = false;
+ $sBgColor = "";
+ $bMultiSelJSAdded = false;
+ if (is_array($this->_aCells))
+ {
+ foreach ($this->_aCells as $sRow => $aCells)
+ {
+ $iColCount++;
+ //$bDark = !$bDark;
+ $sLine = "";
+ $iCount = 0;
+
+ foreach ($aCells as $sCell => $sData)
+ {
+ $iCount++;
+ $sTplCell = $this->_sTplCellCode;
+
+ if ($this->_bSolidBorder)
+ {
+ if ($iCount < count($aCells))
+ {
+ if ($iColCount < count($this->_aCells)) {
+ $sTplCell = str_replace('{EXTRA}', 'border: 0px; border-right: 1px; border-bottom: 1px; border-color: '.$this->_sBorderColor.'; border-style: solid;', $sTplCell);
+ } else {
+ $sTplCell = str_replace('{EXTRA}', 'border: 0px; border-right: 1px; border-color: '.$this->_sBorderColor.'; border-style: solid;', $sTplCell);
+ }
+ } else if ($iColCount < count($this->_aCells)) {
+ $sTplCell = str_replace('{EXTRA}', 'border: 0px; border-bottom: 1px; border-color: '.$this->_sBorderColor.'; border-style: solid;', $sTplCell);
+ } else {
+ $sTplCell = str_replace('{EXTRA}', '', $sTplCell);
+ }
+ }
+
+ if ($this->_aCellAlignment[$sRow][$sCell] != "") {
+ $sTplCell = str_replace('{ALIGN}', $this->_aCellAlignment[$sRow][$sCell], $sTplCell);
+ } else {
+ $sTplCell = str_replace('{ALIGN}', 'left', $sTplCell);
+ }
+
+ if ($this->_aCellVAlignment[$sRow][$sCell] != "") {
+ $sTplCell = str_replace('{VALIGN}', $this->_aCellVAlignment[$sRow][$sCell], $sTplCell);
+ } else {
+ $sTplCell = str_replace('{VALIGN}', 'top', $sTplCell);
+ }
+
+ if ($this->_aCellColSpan[$sRow][$sCell] != "") {
+ $sTplCell = str_replace('{COLSPAN}', $this->_aCellColSpan[$sRow][$sCell], $sTplCell);
+ } else {
+ $sTplCell = str_replace('{COLSPAN}', '1', $sTplCell);
+ }
+
+ if ($this->_aCellClass[$sRow][$sCell] != "") {
+ $sTplCell = str_replace('{CLASS}', $this->_aCellClass[$sRow][$sCell], $sTplCell);
+ } else {
+ $sTplCell = str_replace('{CLASS}', 'text', $sTplCell);
+ }
+
+ // Multi selection javascript
+ if ($this->_bAddMultiSelJS) {
+ $sData = $this->_addMultiSelJS() . $sData;
+ $this->_bAddMultiSelJS = false;
+ }
+
+ $sTplCell = str_replace('{CONTENT}', $sData, $sTplCell);
+ $sLine .= $sTplCell;
+ }
+
+ // Row
+ $oTable->set('d', 'ROWS', $sLine);
+
+ if ($this->_aRowBgColor[$sRow] != "") {
+ $sBgColor = $this->_aRowBgColor[$sRow];
+ } else if ($sBgColor == $this->_sColorLight) {
+ $sBgColor = $this->_sColorDark;
+ } else {
+ $sBgColor = $this->_sColorLight;
+ }
+ $oTable->set('d', 'BGCOLOR', $sBgColor);
+
+ if ($this->_aRowExtra[$sRow] != "") {
+ $oTable->set('d', 'EXTRA', $this->_aRowExtra[$sRow]);
+ } else {
+ $oTable->set('d', 'EXTRA', '');
+ }
+
+ $oTable->next();
+ }
+ }
+
+ if ($this->_sWidth) {
+ // Table: Width
+ $oTable->set('s', 'EXTRA', 'width: '.$this->_sWidth.';');
+ } else {
+ $oTable->set('s', 'EXTRA', '');
+ }
+ $sRendered = $oTable->generate($this->_sTplTableFile, true, false);
+
+ if ($bPrint == true) {
+ echo $sRendered;
+ } else {
+ return $sRendered;
+ }
+ }
+}
+?>
\ No newline at end of file
diff --git a/branches/php7/includes/concache.php b/branches/php7/includes/concache.php
new file mode 100644
index 0000000..1cadaf7
--- /dev/null
+++ b/branches/php7/includes/concache.php
@@ -0,0 +1,170 @@
+
+ * @copyright four for business AG
+ * @license http://www.contenido.org/license/LIZENZ.txt
+ * @link http://www.4fb.de
+ * @link http://www.contenido.org
+ *
+ *
+ * @class cConCache
+ * @file concache.php
+ * @version 0.9
+ * @date 2006-07-07
+ *
+ * {@internal
+ * created 2006-07-07
+ * modified 2008-07-03, bilal arslan, added security fix
+ *
+ * $Id: concache.php 450 2016-07-20 11:11:12Z oldperl $:
+ * }}
+ *
+ */
+
+if(!defined('CON_FRAMEWORK')) {
+ die('Illegal call');
+}
+
+// uncomment following line 4 debugging any occured errors and warnings
+#error_reporting(E_ALL);
+
+
+/**
+* configuration array of frontend caching
+* @var array $cfgConCache
+*/
+global $cfgConCache;
+global $auth;
+
+/**
+* don't cache output, if we have a contenido variable, e. g. on calling frontend preview from backend
+* @var bool $cfgConCache['excludecontenido']
+*/
+$cfgConCache['excludecontenido'] = true;
+
+/**
+* activate caching of frontend output
+* @var bool $cfgConCache['enable']
+*/
+$cfgConCache['enable'] = true;
+
+/**
+* compose debuginfo (hit/miss and execution time of caching)
+* @var bool $cfgConCache['debug']
+*/
+$cfgConCache['debug'] = false;
+
+/**
+* debug information template
+* @var string $cfgConCache['infotemplate']
+*/
+$cfgConCache['infotemplate'] = '%s
';
+
+/**
+* add a html comment including several debug messages to output
+* @var bool $cfgConCache['htmlcomment']
+*/
+$cfgConCache['htmlcomment'] = true;
+
+/**
+* lifetime in seconds 2 cache output
+* @var int $cfgConCache['lifetime']
+*/
+$cfgConCache['lifetime'] = 3600;
+
+/**
+* directory where cached content is 2 store.
+* @var string $cfgConCache['cachedir']
+*/
+$cfgConCache['cachedir'] = $cfgClient[$client]['path']['frontend'].'cache/';
+
+/**
+* cache group, will be a subdirectory inside cachedir
+* @var string $cfgConCache['cachegroup']
+*/
+$cfgConCache['cachegroup'] = 'content';
+
+/**
+* add prefix 2 stored filenames
+* @var string $cfgConCache['cacheprefix']
+*/
+$cfgConCache['cacheprefix'] = 'cache_';
+
+/**
+* array of several variables 2 create a unique id, if the output depends on them.
+* default variables are $_SERVER['REQUEST_URI'], $_POST and $_GET. its also possible to add the
+* auth object, if output differs on authentificated user.
+* @var array $cfgConCache['idoptions']
+*/
+$cfgConCache['idoptions'] = array(
+ 'uri' => &$_SERVER['REQUEST_URI'],
+ 'post' => &$_POST,
+ 'get' => &$_GET,
+ 'auth' => &$auth->auth['perm']
+);
+
+/**
+* array of eventhandler, beeing raised on some events.
+* we have actually two events:
+* - 'beforeoutput': code to execute before doing the output
+* - 'afteroutput' code to execute after output
+* you can define any php-code beeing 2 excute on raising a event.
+* be aware to define a correct php-code block including finishing semicolon ';'
+* example:
+* [code]
+* $cfgConCache['raiseonevent']['beforeoutput'] = array(
+* 'functionCall_One();',
+* 'functionCall_Two();',
+* 'functionCall_Three();'
+* [/code]
+* on raising a beforeoutput event the code 'functionCall_One();',
+* 'functionCall_Two();' and 'functionCall_Three();' will be executes
+* one after another.
+*
+* [code]
+* $cfgConCache['raiseonevent'] = array(
+* 'beforeoutput' => array('echo("beforeoutput ");'),
+* 'afteroutput' => array('echo("afteroutput ");')
+* );
+* [/code]
+* another example with output
+*/
+
+// define code 2 update contenido statistics
+// this will be excuted on 'afteroutput' event of cache object
+
+// set Security fix
+$sStatCode = '
+ $sql = \'SELECT idcatart FROM \'.$GLOBALS[\'cfg\'][\'tab\'][\'stat\'].\' WHERE idcatart="\'.Contenido_Security::toInteger($GLOBALS[\'idcatart\']).\'" AND idlang="\'.Contenido_Security::toInteger($GLOBALS[\'lang\']).\'"\';
+ $GLOBALS[\'db\']->query($sql);
+ if ($GLOBALS[\'db\']->next_record()) {
+ $sql = \'UPDATE \'.$GLOBALS[\'cfg\'][\'tab\'][\'stat\'].\' SET visited=visited + 1 WHERE idcatart="\'.Contenido_Security::toInteger($GLOBALS[\'idcatart\']).\'" AND idclient="\'.Contenido_Security::toInteger($GLOBALS[\'client\']).\'" AND idlang="\'.Contenido_Security::toInteger($GLOBALS[\'lang\']).\'"\';
+ } else {
+ $next = $GLOBALS[\'db\']->nextid($GLOBALS[\'cfg\'][\'tab\'][\'stat\']); $next = Contenido_Security::escapeDB($next, $db);
+ $sql = \'INSERT INTO \'.$GLOBALS[\'cfg\'][\'tab\'][\'stat\'].\' (visited, idcatart, idlang, idstat, idclient) VALUES (1, "\'.Contenido_Security::toInteger($GLOBALS[\'idcatart\']).\'", "\'. Contenido_Security::toInteger($GLOBALS[\'lang\']).\'", "\'.$next.\'", "\'. Contenido_Security::toInteger($GLOBALS[\'client\']).\'")\';
+ }
+ $GLOBALS[\'db\']->query($sql);
+';
+
+$cfgConCache['raiseonevent'] = array(
+ 'beforeoutput' => array('/* some code here */'),
+ 'afteroutput' => array($sStatCode, 'page_close();')
+);
+
+
+// include concache file
+cInclude('frontend', 'includes/class.concache.php');
+
+
+?>
\ No newline at end of file
diff --git a/branches/php7/includes/functions.include.php b/branches/php7/includes/functions.include.php
new file mode 100644
index 0000000..3f05aa3
--- /dev/null
+++ b/branches/php7/includes/functions.include.php
@@ -0,0 +1,40 @@
+
+ * @license http://www.contenido.org/license/LIZENZ.txt
+ * @link http://www.4fb.de
+ * @link http://www.contenido.org
+ *
+ * $Id: functions.include.php 450 2016-07-20 11:11:12Z oldperl $:
+ */
+
+if(!defined('CON_FRAMEWORK')) {
+ die('Illegal call');
+}
+
+function getTeaserImage ($text,$return = 'path') {
+ $regEx = "/ ]*?>.*?/i";
+ $match = array();
+ preg_match($regEx, $text, $match);
+
+ $regEx = "/(src)(=)(['\"]?)([^\"']*)(['\"]?)/i";
+ $img = array();
+ preg_match($regEx, $match[0], $img);
+
+ if ($return == 'path') {
+ return $img[4];
+ } else {
+ return $match[0];
+ }
+}
+?>
\ No newline at end of file
diff --git a/branches/php7/includes/functions.navigation.php b/branches/php7/includes/functions.navigation.php
new file mode 100644
index 0000000..e9df44d
--- /dev/null
+++ b/branches/php7/includes/functions.navigation.php
@@ -0,0 +1,572 @@
+
+ * @license http://www.contenido.org/license/LIZENZ.txt
+ * @link http://www.4fb.de
+ * @link http://www.contenido.org
+ *
+ * $Id: functions.navigation.php 450 2016-07-20 11:11:12Z oldperl $:
+ */
+
+if(!defined('CON_FRAMEWORK')) {
+ die('Illegal call');
+}
+
+
+// create Navigation array for one level
+function createNavigationArray($start_id, $db)
+{
+ global $user, $cfg, $client, $lang, $auth;
+
+ $navigation = array();
+ $FrontendPermissionCollection = new FrontendPermissionCollection;
+
+// SECURITY-FIX
+ $sql = "SELECT
+ A.idcat,
+ C.name,
+ C.public,
+ C.idcatlang
+ FROM
+ ".$cfg["tab"]["cat_tree"]." AS A,
+ ".$cfg["tab"]["cat"]." AS B,
+ ".$cfg["tab"]["cat_lang"]." AS C
+ WHERE
+ A.idcat = B.idcat AND
+ B.idcat = C.idcat AND
+ B.idclient = '".Contenido_Security::escapeDB($client, $db)."' AND
+ C.idlang = '".Contenido_Security::escapeDB($lang, $db)."' AND
+ C.visible = '1' AND
+ B.parentid = '".Contenido_Security::escapeDB($start_id, $db)."'
+ ORDER BY
+ A.idtree";
+ $db->query($sql);
+
+ while($db->next_record())
+ {
+ $cat_id = $db->f("idcat");
+ $cat_idlang = $db->f("idcatlang");
+ $visible=false;
+ if($db->f("public")!=0){
+ $visible = true;
+ }elseif(($auth->auth['uid']!='')&&($auth->auth['uid']!='nobody')){
+ $FrontendGroupMemberCollection = new FrontendGroupMemberCollection;
+
+ $FrontendGroupMemberCollection->setWhere("idfrontenduser",$auth->auth['uid']);
+ $FrontendGroupMemberCollection->query();
+ $groups = array();
+ while ($member = $FrontendGroupMemberCollection->next()){
+ $groups[] = $member->get("idfrontendgroup");
+ }
+ }
+ if(count($groups)>0){
+ for($i=0;$icheckPerm($groups[$i],'category','access',$cat_idlang, true)){
+ $visible=true;
+ }
+ }
+ }
+ if($visible){
+ $navigation[$cat_id] = array("idcat" => $cat_id,
+ "name" => $db->f("name"),
+ "target" => '_self', # you can not call getTarget($cat_id, &$db) at this point with the same db instance!
+ "public" => $db->f("public"));
+ }
+ } // end while
+
+ $db->free();
+
+ return $navigation;
+}
+
+
+/**
+ * Return target of a given category id
+ *
+ * @deprecated
+ */
+function getTarget($cat_id, $db) {
+ global $cfg, $client, $lang;
+
+// SECURITY-FIX
+ $sql = "SELECT
+ a.external_redirect AS ext
+ FROM
+ ".$cfg["tab"]["art_lang"]." AS a,
+ ".$cfg["tab"]["cat_art"]." AS b,
+ ".$cfg["tab"]["cat"]." AS c
+ WHERE
+ b.idcat = '".Contenido_Security::escapeDB($cat_id, $db)."' AND
+ c.idclient = '".Contenido_Security::escapeDB($client, $db)."' AND
+ c.idcat = b.idcat AND
+ a.idart = b.idart AND
+ a.idlang = '".Contenido_Security::escapeDB($lang, $db)."'";
+
+ $db->query($sql);
+ $db->next_record();
+
+ $target = ( $db->f('ext') == 0 ) ? '_self' : '_blank';
+
+ $db->free();
+ return $target;
+}
+
+/**
+ * Return true if $parentid is parent of $catid
+ */
+
+function isParent($parentid, $catid, $db) {
+
+
+ global $cfg, $client, $lang;
+ // SECURITY-FIX
+ $sql = "SELECT
+ a.parentid
+ FROM
+ ".$cfg["tab"]["cat"]." AS a,
+ ".$cfg["tab"]["cat_lang"]." AS b
+ WHERE
+ a.idclient = '". Contenido_Security::escapeDB($client, $db)."' AND
+ b.idlang = '".Contenido_Security::escapeDB($lang, $db)."' AND
+ a.idcat = b.idcat AND
+ a.idcat = '".Contenido_Security::escapeDB($catid, $db)."'";
+
+ $db->query($sql);
+ $db->next_record();
+
+ $pre = $db->f("parentid");
+
+ if($parentid == $pre)
+ {
+ return true;
+ }
+ else
+ {
+ return false;
+ }
+}
+
+function getParent($preid, &$db) {
+
+ global $cfg, $client, $lang;
+
+// SECURITY-FIX
+ $sql = "SELECT
+ a.parentid
+ FROM
+ ".$cfg["tab"]["cat"]." AS a,
+ ".$cfg["tab"]["cat_lang"]." AS b
+ WHERE
+ a.idclient = '".Contenido_Security::escapeDB($client, $db)."' AND
+ b.idlang = '".Contenido_Security::escapeDB($lang, $db)."' AND
+ a.idcat = b.idcat AND
+ a.idcat = '".Contenido_Security::escapeDB($preid, $db)."'";
+
+ $db->query($sql);
+
+ if ($db->next_record())
+ {
+ return $db->f("parentid");
+ }else
+ {
+ return false;
+ }
+
+}
+
+function getLevel($catid, &$db)
+{
+ global $cfg, $client, $lang;
+
+// SECURITY-FIX
+ $sql = "SELECT
+ level
+ FROM
+ ".$cfg["tab"]["cat_tree"]."
+ WHERE
+ idcat = '". Contenido_Security::escapeDB($catid, $db)."' ";
+
+ $db->query($sql);
+
+ if ($db->next_record())
+ {
+ return $db->f("level");
+ }else
+ {
+ return false;
+ }
+
+}
+
+
+/**
+ * Return path of a given category up to a certain level
+ */
+function getCategoryPath($cat_id, $level, $reverse = true, &$db) {
+ $root_path = array();
+
+ array_push($root_path, $cat_id);
+
+ $parent_id = $cat_id;
+
+ while (getLevel($parent_id, $db) != false AND getLevel($parent_id, $db) > $level AND getLevel($parent_id, $db) >= 0)
+ {
+
+ $parent_id = getParent($parent_id, $db);
+ if ($parent_id != false)
+ {
+ array_push($root_path, $parent_id);
+ }
+
+ }
+
+ if ($reverse == true)
+ {
+ $root_path = array_reverse($root_path);
+ }
+
+ return $root_path;
+
+}
+
+
+/**
+ * Return location string of a given category
+ */
+function getLocationString($iStartCat, $level, $seperator, $sLinkStyleClass, $sTextStyleClass, $fullweblink = false, $reverse = true, $mod_rewrite = true, $db)
+{
+ global $sess, $cfgClient, $client;
+
+ $aCatPath = getCategoryPath($iStartCat, $level, $reverse, $db);
+
+ if(is_array($aCatPath) AND count($aCatPath) > 0)
+ {
+ $aLocation = array();
+ foreach($aCatPath as $value)
+ {
+ if (!$fullweblink)
+ {
+ if ($mod_rewrite == true)
+ {
+ $linkUrl = $sess->url("index-a-$value.html");
+ }else
+ {
+ $linkUrl = $sess->url("front_content.php?idcat=$value");
+ }
+ }else
+ {
+ if ($mod_rewrite == true)
+ {
+ $linkUrl = $sess->url($cfgClient[$client]["path"]["htmlpath"] . "index-a-$value.html");
+ }else
+ {
+ $linkUrl = $sess->url($cfgClient[$client]["path"]["htmlpath"] . "front_content.php?idcat=$value");
+ }
+ }
+ $name = getCategoryName($value, $db);
+ $aLocation[] = ''.$name.' ';
+
+ }
+ }
+
+ $sLocation = implode($seperator, $aLocation);
+ $sLocation = ''.$sLocation.' ';
+
+
+ return $sLocation;
+}
+
+
+/**
+ *
+ * get subtree by a given id
+ *
+ * @param int $idcat Id of category
+ * @return array Array with all deeper categories
+ *
+ * @copyright four for business AG
+ */
+
+function getSubTree($idcat_start, $db)
+{
+ global $client, $cfg;
+
+ // SECURITY-FIX
+ $sql = "SELECT
+ B.idcat, A.level
+ FROM
+ ".$cfg["tab"]["cat_tree"]." AS A,
+ ".$cfg["tab"]["cat"]." AS B
+ WHERE
+ A.idcat = B.idcat AND
+ idclient = '". Contenido_Security::escapeDB($client, $db)."'
+ ORDER BY
+ idtree";
+
+ $db->query($sql);
+
+ $subCats = false;
+ $curLevel = 0;
+ while ($db->next_record())
+ {
+ if ($db->f("idcat") == $idcat_start)
+ {
+ $curLevel = $db->f("level");
+ $subCats = true;
+ } else if ($db->f("level") <= $curLevel) // ending part of tree
+ {
+ $subCats = false;
+ }
+
+ if ($subCats == true) { //echo "true"; echo $db->f("idcat"); echo " ";
+ $deeper_cats[] = $db->f("idcat");
+ }
+ }
+ return $deeper_cats;
+}
+
+function getTeaserDeeperCategories($iIdcat, $db)
+{
+ global $client, $cfg, $lang;
+
+ // SECURITY-FIX
+ $sql = "SELECT
+ B.parentid, B.idcat
+ FROM
+ ".$cfg["tab"]["cat_tree"]." AS A,
+ ".$cfg["tab"]["cat"]." AS B,
+ ".$cfg["tab"]["cat_lang"]." AS C
+ WHERE
+ A.idcat = B.idcat AND
+ B.idcat = C.idcat AND
+ C.idlang = '". Contenido_Security::escapeDB($lang, $db)."' AND
+ C.visible = '1' AND
+ B.idclient = '". Contenido_Security::escapeDB($client, $db) ."'
+ ORDER BY
+ idtree";
+ $db->query($sql);
+
+ $subCats = false;
+ $curLevel = 0;
+ while ($db->next_record()) {
+ if ($db->f("idcat") == $iIdcat)
+ {
+ $curLevel = $db->f("level");
+ $subCats = true;
+ } else if ($curLevel == $db->f("level")) // ending part of tree
+ {
+ $subCats = false;
+ }
+
+ if ($subCats == true) {
+ $deeper_cats[] = $db->f("idcat");
+ }
+ }
+ return $deeper_cats;
+}
+
+/**
+ *
+ * get subtree by a given id, without protected and invisible categories
+ *
+ * @param int $idcat Id of category
+ * @return array Array with all deeper categories
+ *
+ * @copyright four for business AG
+ */
+
+function getProtectedSubTree($idcat_start, $db)
+{
+ global $client, $cfg, $lang;
+
+ // SECURITY-FIX
+ $sql = "SELECT
+ B.parentid, B.idcat
+ FROM
+ ".$cfg["tab"]["cat_tree"]." AS A,
+ ".$cfg["tab"]["cat"]." AS B,
+ ".$cfg["tab"]["cat_lang"]." AS C
+ WHERE
+ A.idcat = B.idcat AND
+ B.idcat = C.idcat AND
+ C.idlang = '".Contenido_Security::escapeDB($lang, $db)."' AND
+ C.visible = '1' AND
+ C.public = '1' AND
+ B.idclient = '".Contenido_Security::escapeDB($client, $db)."'
+ ORDER BY
+ idtree";
+
+ $db->query($sql);
+
+ $subCats = false;
+ $curLevel = 0;
+ while ( $db->next_record() ) {
+ if ($db->f("idcat") == $idcat_start)
+ {
+ $curLevel = $db->f("level");
+ $subCats = true;
+ } else if ($curLevel == $db->f("level")) // ending part of tree
+ {
+ $subCats = false;
+ }
+
+ if ($subCats == true) { //echo "true"; echo $db->f("idcat"); echo " ";
+ $deeper_cats[] = $db->f("idcat");
+ }
+ }
+ return $deeper_cats;
+}
+
+
+
+/**
+ * Return category name
+ */
+
+function getCategoryName($cat_id, &$db) {
+
+ global $cfg, $client, $lang;
+
+ // SECURITY-FIX
+ $sql = "SELECT
+ *
+ FROM
+ ".$cfg["tab"]["cat"]." AS A,
+ ".$cfg["tab"]["cat_lang"]." AS B
+ WHERE
+ A.idcat = B.idcat AND
+ A.idcat = '". Contenido_Security::escapeDB($cat_id, $db)."' AND
+ A.idclient = '".Contenido_Security::escapeDB($client, $db)."' AND
+ B.idlang = '".Contenido_Security::escapeDB($lang, $db)."'
+ ";
+
+ $db->query($sql);
+
+ if ($db->next_record())
+ {
+ $cat_name = $db->f("name");
+ return $cat_name;
+ }
+ else
+ {
+ return '';
+ }
+
+} // end function
+
+// get direct subcategories of a given category
+function getSubCategories($parent_id, $db) {
+
+ $subcategories = array();
+
+ global $cfg, $client, $lang;
+
+// SECURITY-FIX
+ $sql = "SELECT
+ A.idcat
+ FROM
+ ".$cfg["tab"]["cat_tree"]." AS A,
+ ".$cfg["tab"]["cat"]." AS B,
+ ".$cfg["tab"]["cat_lang"]." AS C
+ WHERE
+ A.idcat = B.idcat AND
+ B.idcat = C.idcat AND
+ B.idclient = '". Contenido_Security::escapeDB($client, $db)."' AND
+ C.idlang = '".Contenido_Security::escapeDB($lang, $db)."' AND
+ C.visible = '1' AND
+ C.public = '1' AND
+ B.parentid = '".Contenido_Security::escapeDB($parent_id, $db)."'
+ ORDER BY
+ A.idtree";
+
+ $db->query($sql);
+
+ while ( $db->next_record() ) {
+
+ $subcategories[] = $db->f("idcat");
+
+ } // end while
+
+ return $subcategories;
+
+} // end function
+
+
+// get direct subcategories with protected categories
+function getProtectedSubCategories($parent_id, $db) {
+
+ $subcategories = array();
+ unset($subcategories);
+
+ global $cfg, $client, $lang;
+
+// SECURITY-FIX
+ $sql = "SELECT
+ A.idcat
+ FROM
+ ".$cfg["tab"]["cat_tree"]." AS A,
+ ".$cfg["tab"]["cat"]." AS B,
+ ".$cfg["tab"]["cat_lang"]." AS C
+ WHERE
+ A.idcat = B.idcat AND
+ B.idcat = C.idcat AND
+ B.idclient = '".Contenido_Security::escapeDB($client, $db)."' AND
+ C.idlang = '".Contenido_Security::escapeDB($lang, $db)."' AND
+ B.parentid = '".Contenido_Security::escapeDB($parent_id, $db)."'
+ ORDER BY
+ A.idtree";
+
+ $db->query($sql);
+
+ while ( $db->next_record() ) {
+
+ $subcategories[] = $db->f("idcat");
+
+ } // end while
+
+ return $subcategories;
+
+} // end function
+
+function checkCatPermission($idcatlang, $public) {
+ #Check if current user has permissions to access cat
+
+ global $auth;
+
+ $oDB = new DB_Contenido;
+
+ $FrontendPermissionCollection = new FrontendPermissionCollection;
+ $visible=false;
+
+ if($public!=0){
+ $visible = true;
+ }elseif(($auth->auth['uid']!='')&&($auth->auth['uid']!='nobody')){
+ $FrontendGroupMemberCollection = new FrontendGroupMemberCollection;
+ $FrontendGroupMemberCollection->setWhere("idfrontenduser",$auth->auth['uid']);
+ $FrontendGroupMemberCollection->query();
+ $groups = array();
+ while ($member = $FrontendGroupMemberCollection->next()){
+ $groups[] = $member->get("idfrontendgroup");
+ }
+ }
+ if(count($groups)>0){
+ for($i=0;$icheckPerm($groups[$i],'category','access',$idcatlang, true)){
+ $visible=true;
+ }
+ }
+ }
+
+ return $visible;
+}
+?>
\ No newline at end of file
diff --git a/branches/php7/includes/rss.inc.php b/branches/php7/includes/rss.inc.php
new file mode 100644
index 0000000..2202b9e
--- /dev/null
+++ b/branches/php7/includes/rss.inc.php
@@ -0,0 +1,59 @@
+
\ No newline at end of file
diff --git a/branches/php7/includes/rss_php.php b/branches/php7/includes/rss_php.php
new file mode 100644
index 0000000..1456313
--- /dev/null
+++ b/branches/php7/includes/rss_php.php
@@ -0,0 +1,160 @@
+
+ Published: 200801 :: blacknet :: via rssphp.net
+
+ RSS_PHP is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY.
+
+ Usage:
+ See the documentation at http://rssphp.net/documentation
+ Examples:
+ Can be found online at http://rssphp.net/examples
+*/
+
+class rss_php {
+
+ public $document;
+ public $channel;
+ public $items;
+
+/****************************
+ public load methods
+***/
+ # load RSS by URL
+ public function load($url=false, $unblock=true) {
+ if($url) {
+ if($unblock) {
+ $this->loadParser(file_get_contents($url, false, $this->randomContext()));
+ } else {
+ $this->loadParser(file_get_contents($url));
+ }
+ }
+ }
+ # load raw RSS data
+ public function loadRSS($rawxml=false) {
+ if($rawxml) {
+ $this->loadParser($rawxml);
+ }
+ }
+
+/****************************
+ public load methods
+ @param $includeAttributes BOOLEAN
+ return array;
+***/
+ # return full rss array
+ public function getRSS($includeAttributes=false) {
+ if($includeAttributes) {
+ return $this->document;
+ }
+ return $this->valueReturner();
+ }
+ # return channel data
+ public function getChannel($includeAttributes=false) {
+ if($includeAttributes) {
+ return $this->channel;
+ }
+ return $this->valueReturner($this->channel);
+ }
+ # return rss items
+ public function getItems($includeAttributes=false) {
+ if($includeAttributes) {
+ return $this->items;
+ }
+ return $this->valueReturner($this->items);
+ }
+
+/****************************
+ internal methods
+***/
+ private function loadParser($rss=false) {
+ if($rss) {
+ $this->document = array();
+ $this->channel = array();
+ $this->items = array();
+ $DOMDocument = new DOMDocument;
+ $DOMDocument->strictErrorChecking = false;
+ $DOMDocument->loadXML($rss);
+ $this->document = $this->extractDOM($DOMDocument->childNodes);
+ }
+ }
+
+ private function valueReturner($valueBlock=false) {
+ if(!$valueBlock) {
+ $valueBlock = $this->document;
+ }
+ foreach($valueBlock as $valueName => $values) {
+ if(isset($values['value'])) {
+ $values = $values['value'];
+ }
+ if(is_array($values)) {
+ $valueBlock[$valueName] = $this->valueReturner($values);
+ } else {
+ $valueBlock[$valueName] = $values;
+ }
+ }
+ return $valueBlock;
+ }
+
+ private function extractDOM($nodeList,$parentNodeName=false) {
+ $itemCounter = 0;
+ foreach($nodeList as $values) {
+ if(substr($values->nodeName,0,1) != '#') {
+ if($values->nodeName == 'item') {
+ $nodeName = $values->nodeName.':'.$itemCounter;
+ $itemCounter++;
+ } else {
+ $nodeName = $values->nodeName;
+ }
+ $tempNode[$nodeName] = array();
+ if($values->attributes) {
+ for($i=0;$values->attributes->item($i);$i++) {
+ $tempNode[$nodeName]['properties'][$values->attributes->item($i)->nodeName] = $values->attributes->item($i)->nodeValue;
+ }
+ }
+ if(!$values->firstChild) {
+ $tempNode[$nodeName]['value'] = $values->textContent;
+ } else {
+ $tempNode[$nodeName]['value'] = $this->extractDOM($values->childNodes, $values->nodeName);
+ }
+ if(in_array($parentNodeName, array('channel','rdf:RDF'))) {
+ if($values->nodeName == 'item') {
+ $this->items[] = $tempNode[$nodeName]['value'];
+ } elseif(!in_array($values->nodeName, array('rss','channel'))) {
+ $this->channel[$values->nodeName] = $tempNode[$nodeName];
+ }
+ }
+ } elseif(substr($values->nodeName,1) == 'text') {
+ $tempValue = trim(preg_replace('/\s\s+/',' ',str_replace("\n",' ', $values->textContent)));
+ if($tempValue) {
+ $tempNode = $tempValue;
+ }
+ } elseif(substr($values->nodeName,1) == 'cdata-section'){
+ $tempNode = $values->textContent;
+ }
+ }
+ return $tempNode;
+ }
+
+ private function randomContext() {
+ $headerstrings = array();
+ $headerstrings['User-Agent'] = 'Mozilla/5.0 (Windows; U; Windows NT 5.'.rand(0,2).'; en-US; rv:1.'.rand(2,9).'.'.rand(0,4).'.'.rand(1,9).') Gecko/2007'.rand(10,12).rand(10,30).' Firefox/2.0.'.rand(0,1).'.'.rand(1,9);
+ $headerstrings['Accept-Charset'] = rand(0,1) ? 'en-gb,en;q=0.'.rand(3,8) : 'en-us,en;q=0.'.rand(3,8);
+ $headerstrings['Accept-Language'] = 'en-us,en;q=0.'.rand(4,6);
+ $setHeaders = 'Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5'."\r\n".
+ 'Accept-Charset: '.$headerstrings['Accept-Charset']."\r\n".
+ 'Accept-Language: '.$headerstrings['Accept-Language']."\r\n".
+ 'User-Agent: '.$headerstrings['User-Agent']."\r\n";
+ $contextOptions = array(
+ 'http'=>array(
+ 'method'=>"GET",
+ 'header'=>$setHeaders
+ )
+ );
+ return stream_context_create($contextOptions);
+ }
+
+}
+
+?>
\ No newline at end of file
diff --git a/branches/php7/includes/spider-it.functions.inc.php b/branches/php7/includes/spider-it.functions.inc.php
new file mode 100644
index 0000000..bfe187d
--- /dev/null
+++ b/branches/php7/includes/spider-it.functions.inc.php
@@ -0,0 +1,859 @@
+
+ * @copyright Spider IT Deutschland
+ * @license MIT
+ * (see below)
+ * @link http://www.Spider-IT.de
+ * @link http://www.conlite.org
+ * @link http://www.contenido.org
+ *
+ * @file spider-it.functions.inc.php
+ * @version 1.2
+ * @date 2012-11-21
+ *
+ * {@internal
+ * created 2012-09-14
+ * modified 2012-10-10
+ * modified 2012-10-14
+ * modified 2012-10-22
+ * modified 2012-10-24
+ * modified 2012-10-30
+ * modified 2012-11-21
+ *
+ * $Id: spider-it.functions.inc.php 450 2016-07-20 11:11:12Z oldperl $:
+ * }
+ *
+ */
+
+/*
+ * Copyright (c) 2012 Spider IT Deutschland
+ *
+ * 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.
+ *
+ *
+ * Hiermit wird unentgeltlich, jeder Person, die eine Kopie der Software und der zugehörigen Dokumentationen (die
+ * "Software") erhält, die Erlaubnis erteilt, sie uneingeschränkt zu benutzen, inklusive und ohne Ausnahme, dem
+ * Recht, sie zu verwenden, kopieren, ändern, fusionieren, verlegen, verbreiten, unterlizenzieren und/oder zu
+ * verkaufen, und Personen, die diese Software erhalten, diese Rechte zu geben, unter den folgenden Bedingungen:
+ *
+ * Der obige Urheberrechtsvermerk und dieser Erlaubnisvermerk sind in allen Kopien oder Teilkopien der Software
+ * beizulegen.
+ *
+ * DIE SOFTWARE WIRD OHNE JEDE AUSDRÜCKLICHE ODER IMPLIZIERTE GARANTIE BEREITGESTELLT, EINSCHLIESSLICH DER GARANTIE
+ * ZUR BENUTZUNG FÜR DEN VORGESEHENEN ODER EINEM BESTIMMTEN ZWECK SOWIE JEGLICHER RECHTSVERLETZUNG, JEDOCH NICHT
+ * DARAUF BESCHRÄNKT. IN KEINEM FALL SIND DIE AUTOREN ODER COPYRIGHTINHABER FÜR JEGLICHEN SCHADEN ODER SONSTIGE
+ * ANSPRÜCHE HAFTBAR ZU MACHEN, OB INFOLGE DER ERFÜLLUNG EINES VERTRAGES, EINES DELIKTES ODER ANDERS IM ZUSAMMENHANG
+ * MIT DER SOFTWARE ODER SONSTIGER VERWENDUNG DER SOFTWARE ENTSTANDEN.
+ */
+
+# Functions in this file:
+# debug()
+# sitCascadedArraySort()
+# sitConvertCmykJpgToSrgbJpg()
+# sitExplodeAssociative()
+# sitExplodeCascading()
+# sitExplodeLines()
+# sitGetFilesInDirectory()
+# sitGetImageDescription()
+# sitGetRemoteContentToFile()
+# sitGetSubdirs()
+# sitImgScale()
+# sitMoveAllUploadFiles()
+# sitSafeStringEscape()
+# sitSendHtmlMail()
+# sitSetClientProperty()
+# sitTeaserText()
+
+if (!defined('CON_FRAMEWORK')) {
+ die('Illegal call');
+}
+
+# debug()
+#
+# Zeigt Debugging-Informationen auf der Webseite
+#
+# Parameter:
+# $value - Der anzuzeigende Wert
+# $type - Der Typ des Wertes (optional)
+# Möglichkeiten:
+# '' - Text / Array / Object
+# 'sql' - SQL-Anweisungen (Aufruf sollte nach $db->query() erfolgen)
+#
+# Der Wert wird aufbereitet per echo auf der Webseite
+# ausgegeben, wobei die Funktion selbstständig zwischen
+# einzelnen Werte, Arrays und Objekte unterscheidet.
+# Der 2. Parameter $type dient besondere Fälle, wie z.B.
+# 'sql' für SQL-Anweisungen, welche dann individuell
+# aufbereitet werden.
+function debug($value, $type = '') {
+ global $db, $debug;
+
+ if ($debug) {
+ echo '';
+ switch (strtolower($type)) {
+ case 'sql':
+ echo '
' . str_replace(array(str_repeat(chr(32), 4), chr(9)), '', $value) . ' Records: ' . intval(@$db->num_rows());
+ break;
+ default:
+ if (is_array($value)) {
+ echo '
'; var_dump($value); echo ' ';
+ } elseif (is_object($value)) {
+ echo 'Object:
'; var_dump($value); echo ' ';
+ } else {
+ echo $value;
+ }
+ break;
+ }
+ echo '
';
+ }
+}
+
+# sitCascadedArraySort()
+#
+# Sortiert ein kaskadiertes Array nach Spalten
+#
+# Parameter:
+# Zu sortierendes Array
+# Liste aus Feldnamen, Sortierarten und Sortierrichtungen (siehe
+# array_multisort, de.php.net/manual/de/function.array-multisort.php)
+#
+# Sortiert ein mehrdimentionales Array nach den angegebenen Spalten
+# nach den vorgegebenen Sortierarten und -richtungen (je Spalte anzugeben)
+# Beispiel:
+# $x = sitCascadedArraySort($x, 'Name', SORT_STRING, SORT_ASC, 'Vorname', SORT_STRING, SORT_ASC);
+function sitCascadedArraySort() {
+ $args = func_get_args();
+ $marray = array_shift($args);
+ if (count($marray)) {
+ $msortline = 'return(array_multisort(';
+ foreach ($args as $arg) {
+ $i ++;
+ if (is_string($arg)) {
+ foreach ($marray as $row) {
+ $sortarr[$i][] = $row[$arg];
+ }
+ } else {
+ $sortarr[$i] = $arg;
+ }
+ $msortline .= '$sortarr['.$i.'],';
+ }
+ $msortline .= '$marray));';
+ eval($msortline);
+ }
+ return $marray;
+}
+
+# sitConvertCmykJpgToSrgbJpg()
+#
+# Wandelt JPG-Bilder mit CMYK Farbprofil in sRGB Farbprofil um
+#
+# Parameter:
+# $path - Kompletter Pfad zum Bild
+#
+# Da der Internet Explorer keine JPG-Bilder (.jpg / .jpeg) mit CMYK Farbprofil
+# darstellen kann, müssen diese Bilder in das sRGB Farbprofil (für das Web)
+# umgewandelt werden. Diese Funktion prüft das Bild und wandelt es ggf. um.
+function sitConvertCmykJpgToSrgbJpg($path) {
+ if ((strtolower(substr($path, -4)) == '.jpg') || (strtolower(substr($path, -5)) == '.jpeg')) {
+ exec('identify -verbose ' . $path . ' >' . $path . '.txt');
+ $tmp = file($path . '.txt');
+ unlink($path . '.txt');
+ for ($i = 0, $n = count($tmp); $i < $n; $i ++) {
+ $a = explode(':', $tmp[$i]);
+ if (trim($a[0]) == 'Colorspace') {
+ if (strpos($a[1], 'RGB') === false) {
+ # Bild ist in CMYK
+ exec('convert ' . $path . ' -profile sRGB.icc -colorspace sRGB ' . $path . '.jpg');
+ unlink($path);
+ rename($path . '.jpg', $path);
+ }
+ break;
+ }
+ }
+ }
+}
+
+# sitExplodeAssociative()
+#
+# Zerlegt eine Zeichenfolge in ein assoziatives Array.
+#
+# Parameter:
+# $delimiter - Array mit Trennzeichen zum Zerlegen der Zeichenfolge
+# $string - Zu zerlegende Zeichenfolge
+#
+# Das erste Trennzeichen bildet das Array, das zweite Trennzeichen
+# splittet auf Key und Value.
+function sitExplodeAssociative($delimiters = array(), $string = '') {
+ $tmp = explode($delimiters[0], $string);
+ $ret = array();
+ for ($i = 0, $n = count($tmp); $i < $n; $i ++) {
+ $t = explode($delimiters[1], $tmp[$i]);
+ $ret[$t[0]] = $t[1];
+ }
+ return $ret;
+}
+
+# sitExplodeCascading()
+#
+# Zerlegt eine Zeichenfolge in ein kaskadiertes Array.
+#
+# Parameter:
+# $delimiter - Array mit Trennzeichen zum Zerlegen der Zeichenfolge
+# $string - Zu zerlegende Zeichenfolge
+#
+# Das erste Trennzeichen bildet das Hauptarray, jedes weitere
+# Trennzeichen darin ein Unterarray (mehrere Ebenen).
+function sitExplodeCascading($delimiters = array(), $string = '') {
+ $tmp = explode($delimiters[0], $string);
+ array_shift($delimiters);
+ for ($i = 0, $n = count($tmp); $i < $n; $i ++) {
+ $tmp[$i] = sitMultipleExplode($delimiters, $tmp[$i]);
+ }
+ return $tmp;
+}
+
+# sitExplodeLines()
+#
+# Zerlegt einen Text in einzelnen Zeilen
+#
+# Parameter:
+# $string - Zu zerlegende Zeichenfolge
+#
+# Zerlegt den Text unabhängig der Zeilenumbruchart in ein Array
+# mit den einzelnen Zeilen.
+function sitExplodeLines($string) {
+ return explode("\n", str_replace("\r\n", "\n", $string));
+}
+
+# sitGetFilesInDirectory()
+#
+# Liest Dateien in ein Verzeichnis
+#
+# Parameter:
+# $path - Kompletter Pfad des zu lesenden Verzeichnisses
+# $filter - Filter für gefundenen Dateien (optional)
+# $sort - Sortierreihenfolge (optional)
+#
+# Liest die Dateien in ein Verzeichnis und filtert und sortiert diese bei Bedarf.
+# $filter kann ein Array mit mehrere Filter sein, z.B. array('*.jp*g', '*.gif', '*.png').
+# $sort kann 'asc', 'desc', SORT_ASC oder SORT_DESC sein, oder weggelassen werden.
+function sitGetFilesInDirectory($path, $filter = '*', $sort = '') {
+ define('FNM_CASEFOLD', 16);
+ $aFiles = array();
+ if (is_dir($path)) {
+ if (!is_array($filter)) {
+ $filter = array($filter);
+ }
+ if ($oDir = opendir($path)) {
+ while (($sFile = readdir($oDir)) !== false) {
+ if (is_dir($path . $sFile)) {
+ continue;
+ } else {
+ for ($i = 0, $n = count($filter); $i < $n; $i ++) {
+ if (fnmatch($filter[$i], $sFile, FNM_CASEFOLD)) {
+ $aFiles[] = $sFile;
+ break;
+ }
+ }
+ }
+ }
+ closedir($oDir);
+ if (strlen($sort)) {
+ sort($aFiles, SORT_STRING);
+ if (($sort == 'desc') || ($sort == SORT_DESC)) {
+ $aFiles = array_reverse($aFiles);
+ }
+ }
+ }
+ }
+ return $aFiles;
+}
+
+# sitGetImageDescription()
+#
+# Liest die Bildbeschreibung aus der Datenbank
+#
+# Parameter:
+# $idupl - ID des Bildeintrags in der Datenbank
+#
+# Liest die zum Bild gehörenden Beschreibung entweder aus der Tabelle ..._upl_meta
+# oder (falls leer) aus der Tabelle ..._upl und liefert diese zurück.
+function sitGetImageDescription($idupl) {
+ global $db, $cfg;
+
+ $sDesc = '';
+ $sql = 'SELECT description
+ FROM ' . $cfg['tab']['upl_meta'] . '
+ WHERE (idupl=' . $idupl . ')';
+ $db->query($sql);
+ if ($db->next_record()) {
+ $sDesc = urldecode(str_replace(array('%0D%0A', '%0D', '%0A'), ' ', $db->f('description')));
+ }
+ if (strlen(trim($sDesc)) == 0) {
+ $sql = 'SELECT description
+ FROM ' . $cfg['tab']['upl'] . '
+ WHERE (idupl=' . $idupl . ')';
+ $db->query($sql);
+ if ($db->next_record()) {
+ $sDesc = $db->f('description');
+ }
+ }
+ return $sDesc;
+}
+
+# sitGetRemoteContentToFile()
+#
+# Holt entfernten Inhalt ab und speichert diesen lokal
+#
+# Parameter:
+# $url - Die Adresse von wo der Inhalt geholt werden soll
+# $file - Die Datei in der gespeichert werden soll (inkl. Pfad)
+# $errno - Die Fehlernummer (Rückgabe)
+# $errmsg - Die Fehlerbeschreibung (Rückgabe)
+#
+# Die Daten (Webseite, Bild, Feed usw) werden per cURL geholt,
+# wobei Weiterleitungen gefolgt werden.
+# Diese Methode ist unabhängig von allow_url_fopen und verarbeitet
+# auch Anfragen per https (SSL).
+function sitGetRemoteContentToFile($url, $file, $errno, $errmsg) {
+ $options = array(
+ CURLOPT_RETURNTRANSFER => true, // return web page
+ CURLOPT_HEADER => false, // don't return headers
+ CURLOPT_FOLLOWLOCATION => true, // follow redirects
+ CURLOPT_ENCODING => "", // handle compressed
+ CURLOPT_USERAGENT => "spider", // who am i
+ CURLOPT_AUTOREFERER => true, // set referer on redirect
+ CURLOPT_CONNECTTIMEOUT => 10, // timeout on connect
+ CURLOPT_TIMEOUT => 10, // timeout on response
+ CURLOPT_MAXREDIRS => 10, // stop after 10 redirects
+ );
+
+ $ch = curl_init($url);
+ curl_setopt_array($ch, $options);
+ $content = curl_exec($ch);
+ $errno = curl_errno($ch);
+ $errmsg = curl_error($ch);
+ $header = curl_getinfo($ch);
+ curl_close($ch);
+
+ if (($errno == 0) && ($header['http_code'] == 200)) {
+ # Content in Datei speichern
+ if ($fp = fopen($file, 'w')) {
+ fputs($fp, $content);
+ fclose($fp);
+ return true;
+ } else {
+ $errno = -1;
+ $errmsg = 'Can\'t write to file ' . $file;
+ return false;
+ }
+ } else {
+ return false;
+ }
+}
+
+# sitGetSubdirs()
+#
+# Listet Unterverzeichnisse eines Verzeichnisses
+#
+# Parameter:
+# $dir - Übergeordnetes Verzeichnis
+# $levels - Anzahl Ebenen an Unterverzeichnisse die mit aufgelistet werden sollen
+# $__dirs - interner Parameter für Rekursion
+#
+# Listet die Unterverzeichnisse eines Verzeichnisses inkl. aller Unterverzeichnisse
+# bis zu der angegebenen Anzahl an Ebenen (die Tiefe).
+function sitGetSubdirs($dir, $levels = 1, $__dirs = array()) {
+ $a = array();
+ $p = opendir($dir);
+ while (($s = readdir($p)) !== false) {
+ if (($s == '.') || ($s == '..')) {
+ continue;
+ }
+ if (is_dir($dir . ((substr($dir, -1) == '/') ? '' : '/') . $s)) {
+ $a[] = $dir . ((substr($dir, -1) == '/') ? '' : '/') . $s . '/';
+ }
+ }
+ closedir($p);
+ sort($a, SORT_STRING);
+ for ($i = 0; $i < count($a); $i ++) {
+ $__dirs[] = $a[$i];
+ if ($levels > 1) {
+ $__dirs = sitGetSubdirs($a[$i], ($levels - 1), $__dirs);
+ }
+ }
+ return $__dirs;
+}
+
+# sitImgScale()
+#
+# Skaliert oder zoomt ein Bild auch mit Transparenz
+#
+# Parameter:
+# $img - Pfad und Dateiname der Originaldatei relativ zum Mandantenverzeichnis
+# $maxX - Maximale Breite des neuen Bildes
+# $maxY - Maximale Höhe des neuen Bildes
+# $crop - Bild darf beschnitten werden (optional)
+# $expand - Bild darf vergrößert werden
+# $cacheTime - Ältere Version nutzen oder überschreiben
+# $wantHQ - Bild soll in hoher Qualität sein
+# $quality - Qualität bei JPG und GIF
+# $keepType - Dateityp beibehalten
+# $fixedSize - Zielbild wird auf angegebene Größe erstellt und transparent (GIF und PNG) gefüllt
+# $fixedBG - Bei $fixedSize und JPG wird dies die Hintergrundfarbe des umgebenden Bereichs
+#
+# Erstellt im cache Verzeichnis eine skalierte Version des Originalbildes
+# wie auch die Con-Funktion capiImgScale(), aber behält Transparenz in GIF
+# und PNG Bilder bei. Der zusätzliche Parameter $fixedSize ermöglicht es,
+# das Zielbild mit fixe Abmessungen zu erstellen und das skalierte Bild
+# darin zu zentrieren, wobei der umgebenden Bereich bei GIF und PNG Bilder
+# transparent, bei JPG Bilder mit der in $fixedBG angegebenen Farbe gefüllt
+# wird. Ist $fixedBG nicht angegeben, wird weiß (#FFF) angenommen.
+function sitImgScale($img, $maxX = 0, $maxY = 0, $crop = false, $expand = false, $cacheTime = 10, $wantHQ = true, $quality = 75, $keepType = false, $fixedSize = false, $fixedBG = 'FFFFFF') {
+ global $cfgClient, $client, $lang;
+
+ if (($maxX <= 0) && ($maxY <= 0)) {
+ return false;
+ }
+
+ # Cache
+ $md5 = capiImgScaleGetMD5CacheFile($img, $maxX, $maxY, $crop, $expand);
+ list($oWidth, $oHeight, $oType) = @getimagesize($cfgClient[$client]['path']['frontend'] . $img);
+ switch ($oType) {
+ case IMAGETYPE_GIF:
+ $cfileName = $md5 . '.gif';
+ break;
+ case IMAGETYPE_JPEG:
+ if ($keepType) {
+ $cfileName = $md5 . '.jpg';
+ } else {
+ $cfileName = $md5 . '.png';
+ }
+ break;
+ case IMAGETYPE_PNG:
+ $cfileName = $md5 . '.png';
+ break;
+ default:
+ return false;
+ }
+ $cacheFile = $cfgClient[$client]['path']['frontend'] . 'cache/' . $cfileName;
+ $webFile = $cfgClient[$client]['path']['htmlpath'] . 'cache/' . $cfileName;
+ if (file_exists($cacheFile)) {
+ if ($cacheTime == 0) {
+ # Datei läuft nicht ab, also direkt ausgeben
+ return $webFile;
+ } elseif ((filemtime($cacheFile) + (60 * $cacheTime)) < time()) {
+ # Datei ist abgelaufen
+ unlink($cacheFile);
+ } else {
+ # Datei ist noch nicht abgelaufen
+ return $webFile;
+ }
+ }
+
+ # Bild neu aufbauen
+ $nLeft = 0;
+ $nTop = 0;
+ $nWidth = 0;
+ $nHeight = 0;
+ if ($fixedSize) {
+ $iWidth = $maxX;
+ $iHeight = $maxY;
+ # Abmessung und Position in neues Bild berechnen
+ if (($oWidth > $maxX) || ($oHeight > $maxY) || ($expand)) {
+ # Bild ist größer oder soll vergrößert werden
+ if ($crop) {
+ $faktor = max($maxX / $oWidth, $maxY / $oHeight);
+ } else {
+ $faktor = min($maxX / $oWidth, $maxY / $oHeight);
+ }
+ if ($faktor == ($maxX / $oWidth)) {
+ $nLeft = 0;
+ $nWidth = $maxX;
+ $nHeight = floor($oHeight * $faktor);
+ $nTop = floor(($maxY - $nHeight) / 2);
+ } else {
+ $nTop = 0;
+ $nHeight = $maxY;
+ $nWidth = floor($oWidth * $faktor);
+ $nLeft = floor(($maxX - $nWidth) / 2);
+ }
+ } else {
+ $nLeft = floor(($maxX - $oWidth) / 2);
+ $nTop = floor(($maxY / $oHeight) / 2);
+ $nWidth = $oWidth;
+ $nHeight = $oHeight;
+ }
+ } else {
+ # Abmessung des neuen Bildes berechnen
+ if (($oWidth > $maxX) || ($oHeight > $maxY) || ($expand)) {
+ if ($crop) {
+ $faktor = max($maxX / $oWidth, $maxY / $oHeight);
+ } else {
+ $faktor = min($maxX / $oWidth, $maxY / $oHeight);
+ }
+ if ($faktor == ($maxX / $oWidth)) {
+ $nWidth = $maxX;
+ $nHeight = floor($oHeight * $faktor);
+ $iWidth = $maxX;
+ $iHeight = (($nHeight > $maxY) ? $maxY : $nHeight);
+ $nTop = (($nHeight > $maxY) ? floor(($maxY - $nHeight) / 2) : 0);
+ } else {
+ $nHeight = $maxY;
+ $nWidth = floor($oWidth * $faktor);
+ $iHeight = $maxY;
+ $iWidth = (($nWidth > $maxX) ? $maxX : $nWidth);
+ $nLeft = (($nWidth > $maxX) ? floor(($maxX - $nWidth) / 2) : 0);
+ }
+ } else {
+ # Bild ist kleiner und soll nicht vergrößert werden
+ $iWidth = $nWidth = $oWidth;
+ $iHeight = $nHeight = $oHeight;
+ }
+ }
+ # Bild einlesen
+ switch ($oType) {
+ case IMAGETYPE_GIF:
+ $image = imagecreatefromgif($img);
+ break;
+ case IMAGETYPE_JPEG:
+ $image = imagecreatefromjpeg($img);
+ break;
+ case IMAGETYPE_PNG:
+ $image = imagecreatefrompng($img);
+ break;
+ default:
+ return false;
+ }
+ # Neues Bild erzeugen und Hintergrundfarbe einstellen
+ $nImage = imagecreatetruecolor($iWidth, $iHeight);
+ if (($oType == IMAGETYPE_GIF) || ($oType == IMAGETYPE_PNG)) {
+ $transIdx = imagecolortransparent($image);
+ if ($transIdx >= 0) {
+ # Es gibt eine transparente Farbe (GIF oder PNG8)
+ $transColor = imagecolorsforindex($image, $transIdx);
+ $transIdx = imagecolorallocate($nImage, $transColor['red'], $transColor['green'], $transColor['blue']);
+ imagefill($nImage, 0, 0, $transIdx);
+ imagecolortransparent($nImage, $transIdx);
+ } elseif ($oType == IMAGETYPE_PNG) {
+ # Ein PNG24 kriegt ein transparenter Hintergrund per Alpha-Kanal
+ imagealphablending($nImage, false);
+ $oColor = imagecolorallocatealpha($nImage, 0, 0, 0, 127);
+ imagefill($nImage, 0, 0, $oColor);
+ imagesavealpha($nImage, true);
+ }
+ } else {
+$debug = 1;
+ if ($keepType) {
+ # Andere Bilder (JPG) kriegen eine Hintergrundfarbe
+ $oColor = imagecolorallocate($nImage, hexdec(substr($fixedBG, 0, 2)), hexdec(substr($fixedBG, 2, 2)), hexdec(substr($fixedBG, 4, 2)));
+#debug('imagecolorallocate($nImage, ' . hexdec(substr($fixedBG, 0, 2)) . ', ' . hexdec(substr($fixedBG, 2, 2)) . ', ' . hexdec(substr($fixedBG, 4, 2)) . ') = ' . $oColor);
+# imagefill($nImage, 0, 0, $oColor);
+ imagefilledrectangle($nImage, 0, 0, $iWidth, $iHeight, $oColor);
+ } else {
+ # JPG-Bilder werden in PNG24 umgewandelt
+ $oType = IMAGETYPE_PNG;
+ imagealphablending($nImage, false);
+ $oColor = imagecolorallocatealpha($nImage, 0, 0, 0, 127);
+# imagefill($nImage, 0, 0, $oColor);
+ imagefilledRectangle($nImage, 0, 0, $iWidth, $iHeight, $oColor);
+ imagesavealpha($nImage, true);
+ }
+ }
+ # Das Originalbild skaliert hinein kopieren
+ imagecopyresampled($nImage, $image, $nLeft, $nTop, 0, 0, $nWidth, $nHeight, $oWidth, $oHeight);
+ # Das neue Bild speichern
+ switch ($oType) {
+ case IMAGETYPE_GIF:
+ imagegif($nImage, $cacheFile);
+ break;
+ case IMAGETYPE_JPEG:
+ imagejpeg($nImage, $cacheFile);
+ break;
+ case IMAGETYPE_PNG:
+ imagepng($nImage, $cacheFile);
+ break;
+ }
+ # Aufräumen
+ imagedestroy($image);
+ imagedestroy($nImage);
+ # Pfad zurück liefern
+ return $webFile;
+}
+
+# sitMoveAllUploadFiles()
+#
+# Verschiebt alle Dateien eines Verzeichnisses
+#
+# Parameter:
+# $source - Quellverzeichnis
+# $dest - Zielverzeichnis
+#
+# Verschiebt alle Dateien eines Verzeichnisses im Upload-Bereich (unter /upload/)
+# und passt die Einträge in der Datenbank entsprechend an.
+function sitMoveAllUploadFiles($source, $dest) {
+ global $cfgClient, $client, $db, $cfg;
+
+ $source .= ((substr($source, -1) == '/') ? '' : '/');
+ $dest .= ((substr($dest, -1) == '/') ? '' : '/');
+
+ $a = array();
+ $p = opendir($cfgClient[$client]['upl']['path'] . $source);
+ while (($s = readdir($p)) !== false) {
+ if (is_dir($cfgClient[$client]['upl']['path'] . $source . $s)) {
+ continue;
+ } elseif (strlen($s) > 2) {
+ $a[] = $s;
+ }
+ }
+ for ($i = 0, $n = count($a); $i < $n; $i ++) {
+ rename($cfgClient[$client]['upl']['path'] . $source . $a[$i], $cfgClient[$client]['upl']['path'] . $dest . $a[$i]);
+ $sql = 'UPDATE ' . $cfg['tab']['upl'] . '
+ SET dirname = "' . $dest . '"
+ WHERE ((dirname="' . $source . '")
+ AND (filename="' . $a[$i] . '"))';
+ $db->query($sql);
+ }
+}
+
+# sitSafeStringEscape()
+#
+# Escaped eine Zeichenfolge für SQL-Anweisungen
+#
+# Parameter:
+# $string - Zu escapenden Zeichenfolge
+#
+# Escaped eine Zeichenfolge so, dass diese sicher in die Datenbank eingetragen
+# werden kann.
+function sitSafeStringEscape($string) {
+ $escapeCount = 0;
+ $targetString = '';
+ for($offset = 0; $offset < strlen($string); $offset ++) {
+ switch ($c = $string{$offset}) {
+ case "'":
+ if ($escapeCount % 2 == 0) {
+ $targetString .= "\\";
+ }
+ $escapeCount = 0;
+ $targetString .= $c;
+ break;
+ case '"':
+ if ($escapeCount % 2 == 0) {
+ $targetString .= "\\";
+ }
+ $escapeCount = 0;
+ $targetString .= $c;
+ break;
+ case '\\':
+ $escapeCount ++ ;
+ $targetString .= $c;
+ break;
+ default:
+ $escapeCount = 0;
+ $targetString .= $c;
+ }
+ }
+ return $targetString;
+}
+
+# sitSendHtmlMail()
+#
+# Sendet eine HTML-Mail mit HTML- und Textteil
+#
+# Parameter:
+# $html - HTML-Teil der Mail
+# $subject - Betreffzeile der Mail
+# $receipients - Array von Empfänger ('name' und 'email', mehrere möglich)
+# $attachments - Dateipfad oder Array von Dateipfade für Anhänge (optional)
+# $sname - Absendername (optional)
+# $smail - Absenderadresse (optional)
+# $mailer - Versandmethode ('mail' / 'qmail' / 'sendmail' / 'smtp') (optional)
+# $sserver - SMTP-Server Adresse (optional)
+# $slogin - SMTP Login (optional)
+# $spass - SMTP Passwort (optional)
+# $sport - SMTP Port (optional)
+#
+# Sendet eine HTML-Mail mit HTML- und Textteil an einen oder mehrere Empfänger
+# mit keinen oder mehrere Anhänge und liefert den Erfolgsstatus zurück.
+# Die Angaben zum Absender und den Mailer werden, sofern sie nicht mit angegeben
+# sind, aus den Mandanten- bzw. Systemeinstellungen ausgelesen.
+# - email - absende-name
+# - email - absender-email
+# - email - mailer
+# - email - smtp-server
+# - email - smtp-login
+# - email - smtp-passwort
+# - email - smtp-port - 25
+# Die Empfänger werden als Array aus Name(n) und Email-Adresse(n) übergeben.
+# Beispiel 1: array('name' => 'xyz', 'email' => 'xyz@abc.de');
+# Beispiel 2: array(array('name' => 'xyz', 'email' => 'xyz@abc.de'), array('name'...
+function sitSendHtmlMail($html, $subject, $receipients, $attachments = '', $sname = '', $smail = '', $mailer = '', $sserver = '', $slogin = '', $spass = '', $sport = '') {
+ # Eingaben ergänzen
+ if (!is_array($attachments)) {
+ $attachments = array($attachments);
+ }
+ $sname = ((strlen($sname)) ? $sname : getEffectiveSetting('email', 'absender-name'));
+ $smail = ((strlen($smail)) ? $smail : getEffectiveSetting('email', 'absender-email'));
+ if (strlen($sname) == 0) {
+ $sname = $smail;
+ }
+ $mailer = strtolower(((strlen($mailer)) ? $mailer : getEffectiveSetting('email', 'mailer')));
+ if (strlen($mailer) == 0) {
+ $mailer = 'mail';
+ }
+ if ($mailer == 'smtp') {
+ $sserver = ((strlen($sserver)) ? $sserver : getEffectiveSetting('email', 'smtp-server'));
+ $slogin = ((strlen($slogin)) ? $slogin : getEffectiveSetting('email', 'smtp-login'));
+ $spass = ((strlen($spass)) ? $spass : getEffectiveSetting('email', 'smtp-passwort'));
+ $sport = intval(((strlen($sport)) ? $sport : getEffectiveSetting('email', 'smtp-port')));
+ if ($sport == 0) {
+ $sport = 25;
+ }
+ }
+ # Prüfen, ob genügend Angaben vorliegen
+ if ((strlen($html) == 0) || (strlen($subject) == 0)) {
+ return false;
+ }
+ if ((!is_array($receipients)) || ((strlen($receipients['email']) == 0) && (strlen($receipients[0]['email']) == 0))) {
+ return false;
+ }
+ if (strlen($smail) == 0) {
+ return false;
+ }
+ if (($mailer == 'smtp') && ((strlen($sserver) == 0) || (strlen($slogin) == 0) || (strlen($spass) == 0))) {
+ return false;
+ }
+ # Mail aufbereiten und versenden
+ $oMail = new PHPMailer();
+ $oMail->IsHTML(true);
+ $oMail->Mailer = $mailer;
+ if ($mailer == 'smtp') {
+ $oMail->SMTPAuth = true;
+ $oMail->Host = $sserver;
+ $oMail->Port = $sport;
+ $oMail->Username = $slogin;
+ $oMail->Password = $spass;
+ }
+ $oMail->Subject = $subject;
+ $oMail->From = $smail;
+ $oMail->FromName = $sname;
+ if (is_array($receipients[0])) {
+ for ($i = 0, $n = count($receipients); $i < $n; $i ++) {
+ if (strlen($receipients[$i]['email'])) {
+ $oMail->AddAddress($receipients[$i]['email'], ((strlen($receipients[$i]['name'])) ? $receipients[$i]['name'] : $receipients[$i]['email']));
+ }
+ }
+ } else {
+ $oMail->AddAddress($receipients['email'], ((strlen($receipients['name'])) ? $receipients['name'] : $receipients['email']));
+ }
+ $oMail->Body = $html;
+ # Nur-Text-Bereich -->
+ $sMsg = substr($html, strpos($html, '', ' ', ' '), array('', "
\n\n", "\n", "\n"), $sMsg);
+ $sMsg = trim(strip_tags($sMsg));
+ $sMsg = explode("\n", $sMsg);
+ for ($i = 0, $n = count($sMsg); $i < $n; $i ++) {
+ $sMsg[$i] = trim($sMsg[$i]);
+ }
+ $sMsg = implode("\n", $sMsg);
+ $sMsg = html_entity_decode($sMsg);
+ $sMsg = capiStrReplaceDiacritics($sMsg);
+ # <-- Nur-Text-Bereich
+ $oMail->AltBody = $sMsg;
+ for ($i = 0, $n = count($attachments); $i < $n; $i ++) {
+ if (is_file($attachments[$i])) {
+ $oMail->AddAttachment($attachments[$i]);
+ }
+ }
+ $oMail->WordWrap = 76;
+ return $oMail->Send();
+}
+
+# sitSetClientProperty()
+#
+# Speichert eine Mandanteneinstellung
+#
+# Parameter:
+# $type - Typ des Entrags (Text)
+# $name - Name des Eintrags
+# $value - Wert des Eintrags (Text)
+#
+# Speichert ein Eintrag in den Mandanteneinstellungen, überschreibt dabei
+# eine gleichnamige vorhandene Einstellung.
+function sitSetClientProperty($type, $name, $value) {
+ global $client, $cfg;
+
+ if ((strlen($type)) && (strlen($name))) {
+ $type = sitSafeStringEscape($type);
+ $name = sitSafeStringEscape($name);
+ $value = sitSafeStringEscape($value);
+ $db = new DB_Contenido();
+ $sql = 'SELECT value
+ FROM ' . $cfg['tab']['properties'] . '
+ WHERE ((idclient=' . $client . ')
+ AND (itemtype="clientsetting")
+ AND (type="' . $type . '")
+ AND (name="' . $name . '"))';
+ $db->query($sql);
+ if ($db->next_record()) {
+ $sql = 'UPDATE ' . $cfg['tab']['properties'] . '
+ SET value = "' . $value . '",
+ modified = "' . date('Y-m-d H:i:n') . '",
+ modifiedby = "' . $auth->auth['uid'] . '"
+ WHERE ((idclient=' . $client . ')
+ AND (itemtype="clientsetting")
+ AND (type="' . $type . '")
+ AND (name="' . $name . '"))';
+ } else {
+ $sql = 'INSERT INTO ' . $cfg['tab']['properties'] . ' (idclient, itemtype, itemid, type, name, value, author, created, modified, modifiedby)
+ VALUES (' . $client . ', "clientsetting", 1, "' . $type . '", "' . $name . '", "' . $value . '", "' . $auth->auth['uid'] . '", "' . date('Y-m-d H:i:n') . '", "' . date('Y-m-d H:i:n') . '", "' . $auth->auth['uid'] . '")';
+ }
+ $db->query($sql);
+ }
+}
+
+# sitTeaserText()
+#
+# Teasert einen Text an
+#
+# Parameter:
+# $text - Zu teasernden Text
+# $maxlength - Maximale Länge des Textes
+#
+# Der Text wird auf die maximale Anzahl Zeichen gekürzt, wobei der Schnitt nicht
+# mitten im Wort erfolgt, sondern davor.
+# Zuvor werden aus dem Text noch alle HTML-Tags entfernt.
+# Wenn der Text gekürzt wird (nur wenn der Text länger als der maximalen Anzahl
+# Zeichen ist), wird ein HTML-Zeichen … (...) angehängt.
+function sitTeaserText($text, $maxlength) {
+ $sText1 = strip_tags(str_replace(array("\r\n", "\n"), ' ', $text));
+ $sText2 = capiStrTrimAfterWord($sText1, intval($maxlength));
+ if (strlen($sText2) < strlen($sText1)) {
+ $sText2 .= '…';
+ }
+ return $sText2;
+}
+?>
\ No newline at end of file
diff --git a/branches/php7/index.php b/branches/php7/index.php
new file mode 100644
index 0000000..fd3fd24
--- /dev/null
+++ b/branches/php7/index.php
@@ -0,0 +1,5 @@
+
\ No newline at end of file
diff --git a/branches/php7/js/flexslider/flexslider.css b/branches/php7/js/flexslider/flexslider.css
new file mode 100644
index 0000000..9549a39
--- /dev/null
+++ b/branches/php7/js/flexslider/flexslider.css
@@ -0,0 +1,71 @@
+/*
+ * jQuery FlexSlider v2.0
+ * http://www.woothemes.com/flexslider/
+ *
+ * Copyright 2012 WooThemes
+ * Free to use under the GPLv2 license.
+ * http://www.gnu.org/licenses/gpl-2.0.html
+ *
+ * Contributing author: Tyler Smith (@mbmufffin)
+ */
+
+
+/* Browser Resets */
+.flex-container a:active,
+.flexslider a:active,
+.flex-container a:focus,
+.flexslider a:focus {outline: none;}
+.slides,
+.flex-control-nav,
+.flex-direction-nav {margin: 0; padding: 0; list-style: none;}
+
+/* FlexSlider Necessary Styles
+*********************************/
+.flexslider {margin: 0; padding: 0; min-height:150px; background:url(images/loader.gif) no-repeat center center;}
+.flexslider .slides > li {display: none; -webkit-backface-visibility: hidden;} /* Hide the slides before the JS is loaded. Avoids image jumping */
+.flexslider .slides img {width: 100%; display: block;}
+.flex-pauseplay span {text-transform: capitalize;}
+
+/* Clearfix for the .slides element */
+.slides:after {content: "."; display: block; clear: both; visibility: hidden; line-height: 0; height: 0;}
+html[xmlns] .slides {display: block;}
+* html .slides {height: 1%;}
+
+/* No JavaScript Fallback */
+/* If you are not using another script, such as Modernizr, make sure you
+ * include js that eliminates this class on page load */
+.no-js .slides > li:first-child {display: block;}
+
+
+/* FlexSlider Default Theme
+*********************************/
+.flexslider {position: relative; zoom: 1; }
+.flex-viewport {max-height: 2000px; -webkit-transition: all 1s ease; -moz-transition: all 1s ease; transition: all 1s ease;}
+.loading .flex-viewport {max-height: 300px;}
+.flexslider .slides {zoom: 1;}
+
+.flexslider .flex-caption{ margin:10px 7px;}
+
+.carousel li {margin-right: 5px}
+
+
+/* Direction Nav */
+.flex-direction-nav {*height: 0;}
+.flex-direction-nav a {width: 30px; height: 30px; margin: -20px 0 0; display: block; background: url(images/bg_direction_nav.png) no-repeat 0 0; position: absolute; top: 50%; z-index: 10; cursor: pointer; text-indent: -9999px; opacity: 0; -webkit-transition: all .3s ease;}
+.flex-direction-nav .flex-next {background-position: 100% 0; opacity: 0.8; right: 5px;}
+.flex-direction-nav .flex-prev {opacity: 0.8; left: 5px;}
+.flexslider:hover .flex-next:hover, .flexslider:hover .flex-prev:hover {opacity: 1;}
+.flex-direction-nav .flex-disabled {opacity: .3!important; filter:alpha(opacity=30); cursor: default;}
+
+/* Control Nav */
+.flex-control-nav {width: 100%; position: absolute; bottom: -40px; text-align: center;}
+.flex-control-nav li {margin: 0 6px; display: inline-block; zoom: 1; *display: inline;}
+.flex-control-paging li a {width: 11px; height: 11px; display: block; background: #666; background: rgba(0,0,0,0.5); cursor: pointer; text-indent: -9999px; -webkit-border-radius: 20px; -moz-border-radius: 20px; -o-border-radius: 20px; border-radius: 20px; box-shadow: inset 0 0 3px rgba(0,0,0,0.3);}
+.flex-control-paging li a:hover { background: #333; background: rgba(0,0,0,0.7); }
+.flex-control-paging li a.flex-active { background: #000; background: rgba(0,0,0,0.9); cursor: default; }
+
+.flex-control-thumbs {margin: 5px 0 0; position: static; overflow: hidden;}
+.flex-control-thumbs li {width: 25%; float: left; margin: 0;}
+.flex-control-thumbs img {width: 100%; display: block; opacity: .7; cursor: pointer;}
+.flex-control-thumbs img:hover {opacity: 1;}
+.flex-control-thumbs .flex-active {opacity: 1; cursor: default;}
\ No newline at end of file
diff --git a/branches/php7/js/flexslider/images/bg_direction_nav.png b/branches/php7/js/flexslider/images/bg_direction_nav.png
new file mode 100644
index 0000000..de3fe04
Binary files /dev/null and b/branches/php7/js/flexslider/images/bg_direction_nav.png differ
diff --git a/branches/php7/js/flexslider/images/loader.gif b/branches/php7/js/flexslider/images/loader.gif
new file mode 100644
index 0000000..f2a1bc0
Binary files /dev/null and b/branches/php7/js/flexslider/images/loader.gif differ
diff --git a/branches/php7/js/flexslider/jquery.flexslider-min.js b/branches/php7/js/flexslider/jquery.flexslider-min.js
new file mode 100644
index 0000000..5412e2f
--- /dev/null
+++ b/branches/php7/js/flexslider/jquery.flexslider-min.js
@@ -0,0 +1,38 @@
+/*
+ * jQuery FlexSlider v2.1
+ * Copyright 2012 WooThemes
+ * Contributing Author: Tyler Smith
+ */
+ ;(function(d){d.flexslider=function(i,k){var a=d(i),c=d.extend({},d.flexslider.defaults,k),e=c.namespace,p="ontouchstart"in window||window.DocumentTouch&&document instanceof DocumentTouch,t=p?"touchend":"click",l="vertical"===c.direction,m=c.reverse,h=0g?a.getTarget("next"):a.getTarget("prev");a.flexAnimate(d,c.pauseOnAction)});c.pausePlay&&f.pausePlay.setup();c.slideshow&&(c.pauseOnHover&&a.hover(function(){!a.manualPlay&&!a.manualPause&&a.pause()},
+ function(){!a.manualPause&&!a.manualPlay&&a.play()}),0');if(1 ':""+b+" ",a.controlNavScaffold.append(""+g+" "),b++;a.controlsContainer?d(a.controlsContainer).append(a.controlNavScaffold):a.append(a.controlNavScaffold);f.controlNav.set();f.controlNav.active();a.controlNavScaffold.delegate("a, img",t,function(b){b.preventDefault();var b=d(this),g=a.controlNav.index(b);b.hasClass(e+"active")||(a.direction=g>a.currentSlide?"next":"prev",a.flexAnimate(g,c.pauseOnAction))});p&&a.controlNavScaffold.delegate("a",
+ "click touchstart",function(a){a.preventDefault()})},setupManual:function(){a.controlNav=a.manualControls;f.controlNav.active();a.controlNav.live(t,function(b){b.preventDefault();var b=d(this),g=a.controlNav.index(b);b.hasClass(e+"active")||(g>a.currentSlide?a.direction="next":a.direction="prev",a.flexAnimate(g,c.pauseOnAction))});p&&a.controlNav.live("click touchstart",function(a){a.preventDefault()})},set:function(){a.controlNav=d("."+e+"control-nav li "+("thumbnails"===c.controlNav?"img":"a"),
+ a.controlsContainer?a.controlsContainer:a)},active:function(){a.controlNav.removeClass(e+"active").eq(a.animatingTo).addClass(e+"active")},update:function(b,c){1"+a.count+" ")):1===a.pagingCount?a.controlNavScaffold.find("li").remove():a.controlNav.eq(c).closest("li").remove();f.controlNav.set();1'+c.prevText+' '+c.nextText+" ");a.controlsContainer?(d(a.controlsContainer).append(b),a.directionNav=d("."+e+"direction-nav li a",a.controlsContainer)):(a.append(b),a.directionNav=d("."+e+"direction-nav li a",a));f.directionNav.update();a.directionNav.bind(t,function(b){b.preventDefault();b=d(this).hasClass(e+"next")?a.getTarget("next"):a.getTarget("prev");a.flexAnimate(b,c.pauseOnAction)});
+ p&&a.directionNav.bind("click touchstart",function(a){a.preventDefault()})},update:function(){var b=e+"disabled";1===a.pagingCount?a.directionNav.addClass(b):c.animationLoop?a.directionNav.removeClass(b):0===a.animatingTo?a.directionNav.removeClass(b).filter("."+e+"prev").addClass(b):a.animatingTo===a.last?a.directionNav.removeClass(b).filter("."+e+"next").addClass(b):a.directionNav.removeClass(b)}},pausePlay:{setup:function(){var b=d('');a.controlsContainer?
+ (a.controlsContainer.append(b),a.pausePlay=d("."+e+"pauseplay a",a.controlsContainer)):(a.append(b),a.pausePlay=d("."+e+"pauseplay a",a));f.pausePlay.update(c.slideshow?e+"pause":e+"play");a.pausePlay.bind(t,function(b){b.preventDefault();d(this).hasClass(e+"pause")?(a.manualPause=!0,a.manualPlay=!1,a.pause()):(a.manualPause=!1,a.manualPlay=!0,a.play())});p&&a.pausePlay.bind("click touchstart",function(a){a.preventDefault()})},update:function(b){"play"===b?a.pausePlay.removeClass(e+"pause").addClass(e+
+ "play").text(c.playText):a.pausePlay.removeClass(e+"play").addClass(e+"pause").text(c.pauseText)}},touch:function(){function b(b){j=l?d-b.touches[0].pageY:d-b.touches[0].pageX;p=l?Math.abs(j)j||a.currentSlide===a.last&&0Number(new Date)-k&&50q/2)?a.flexAnimate(l,c.pauseOnAction):r||a.flexAnimate(a.currentSlide,c.pauseOnAction,!0)}i.removeEventListener("touchend",g,!1);f=j=e=d=null}var d,e,f,q,j,k,p=!1;i.addEventListener("touchstart",function(j){a.animating?j.preventDefault():1===j.touches.length&&(a.pause(),q=l?a.h:a.w,k=Number(new Date),f=h&&m&&a.animatingTo===
+ a.last?0:h&&m?a.limit-(a.itemW+c.itemMargin)*a.move*a.animatingTo:h&&a.currentSlide===a.last?a.limit:h?(a.itemW+c.itemMargin)*a.move*a.currentSlide:m?(a.last-a.currentSlide+a.cloneOffset)*q:(a.currentSlide+a.cloneOffset)*q,d=l?j.touches[0].pageY:j.touches[0].pageX,e=l?j.touches[0].pageX:j.touches[0].pageY,i.addEventListener("touchmove",b,!1),i.addEventListener("touchend",g,!1))},!1)},resize:function(){!a.animating&&a.is(":visible")&&(h||a.doMath(),r?f.smoothHeight():h?(a.slides.width(a.computedW),
+ a.update(a.pagingCount),a.setProps()):l?(a.viewport.height(a.h),a.setProps(a.h,"setTotal")):(c.smoothHeight&&f.smoothHeight(),a.newSlides.width(a.computedW),a.setProps(a.computedW,"setTotal")))},smoothHeight:function(b){if(!l||r){var c=r?a:a.viewport;b?c.animate({height:a.slides.eq(a.animatingTo).height()},b):c.height(a.slides.eq(a.animatingTo).height())}},sync:function(b){var g=d(c.sync).data("flexslider"),e=a.animatingTo;switch(b){case "animate":g.flexAnimate(e,c.pauseOnAction,!1,!0);break;case "play":!g.playing&&
+ !g.asNav&&g.play();break;case "pause":g.pause()}}};a.flexAnimate=function(b,g,n,i,k){s&&1===a.pagingCount&&(a.direction=a.currentItema.w?2*c.itemMargin:c.itemMargin,b=(a.itemW+b)*a.move*a.animatingTo,
+ b=b>a.limit&&1!==a.visible?a.limit:b):b=0===a.currentSlide&&b===a.count-1&&c.animationLoop&&"next"!==a.direction?m?(a.count+a.cloneOffset)*q:0:a.currentSlide===a.last&&0===b&&c.animationLoop&&"prev"!==a.direction?m?0:(a.count+1)*q:m?(a.count-1-b+a.cloneOffset)*q:(b+a.cloneOffset)*q;a.setProps(b,"",c.animationSpeed);if(a.transitions){if(!c.animationLoop||!a.atEnd)a.animating=!1,a.currentSlide=a.animatingTo;a.container.unbind("webkitTransitionEnd transitionend");a.container.bind("webkitTransitionEnd transitionend",
+ function(){a.wrapup(q)})}else a.container.animate(a.args,c.animationSpeed,c.easing,function(){a.wrapup(q)})}c.smoothHeight&&f.smoothHeight(c.animationSpeed)}};a.wrapup=function(b){!r&&!h&&(0===a.currentSlide&&a.animatingTo===a.last&&c.animationLoop?a.setProps(b,"jumpEnd"):a.currentSlide===a.last&&(0===a.animatingTo&&c.animationLoop)&&a.setProps(b,"jumpStart"));a.animating=!1;a.currentSlide=a.animatingTo;c.after(a)};a.animateSlides=function(){a.animating||a.flexAnimate(a.getTarget("next"))};a.pause=
+ function(){clearInterval(a.animatedSlides);a.playing=!1;c.pausePlay&&f.pausePlay.update("play");a.syncExists&&f.sync("pause")};a.play=function(){a.animatedSlides=setInterval(a.animateSlides,c.slideshowSpeed);a.playing=!0;c.pausePlay&&f.pausePlay.update("pause");a.syncExists&&f.sync("play")};a.canAdvance=function(b,g){var d=s?a.pagingCount-1:a.last;return g?!0:s&&a.currentItem===a.count-1&&0===b&&"prev"===a.direction?!0:s&&0===a.currentItem&&b===a.pagingCount-1&&"next"!==a.direction?!1:b===a.currentSlide&&
+ !s?!1:c.animationLoop?!0:a.atEnd&&0===a.currentSlide&&b===d&&"next"!==a.direction?!1:a.atEnd&&a.currentSlide===d&&0===b&&"next"===a.direction?!1:!0};a.getTarget=function(b){a.direction=b;return"next"===b?a.currentSlide===a.last?0:a.currentSlide+1:0===a.currentSlide?a.last:a.currentSlide-1};a.setProps=function(b,g,d){var e,f=b?b:(a.itemW+c.itemMargin)*a.move*a.animatingTo;e=-1*function(){if(h)return"setTouch"===g?b:m&&a.animatingTo===a.last?0:m?a.limit-(a.itemW+c.itemMargin)*a.move*a.animatingTo:a.animatingTo===
+ a.last?a.limit:f;switch(g){case "setTotal":return m?(a.count-1-a.currentSlide+a.cloneOffset)*b:(a.currentSlide+a.cloneOffset)*b;case "setTouch":return b;case "jumpEnd":return m?b:a.count*b;case "jumpStart":return m?a.count*b:b;default:return b}}()+"px";a.transitions&&(e=l?"translate3d(0,"+e+",0)":"translate3d("+e+",0,0)",d=void 0!==d?d/1E3+"s":"0s",a.container.css("-"+a.pfx+"-transition-duration",d));a.args[a.prop]=e;(a.transitions||void 0===d)&&a.container.css(a.args)};a.setup=function(b){if(r)a.slides.css({width:"100%",
+ "float":"left",marginRight:"-100%",position:"relative"}),"init"===b&&(p?a.slides.css({opacity:0,display:"block",webkitTransition:"opacity "+c.animationSpeed/1E3+"s ease",zIndex:1}).eq(a.currentSlide).css({opacity:1,zIndex:2}):a.slides.eq(a.currentSlide).fadeIn(c.animationSpeed,c.easing)),c.smoothHeight&&f.smoothHeight();else{var g,n;"init"===b&&(a.viewport=d('
').css({overflow:"hidden",position:"relative"}).appendTo(a).append(a.container),a.cloneCount=0,a.cloneOffset=
+ 0,m&&(n=d.makeArray(a.slides).reverse(),a.slides=d(n),a.container.empty().append(a.slides)));c.animationLoop&&!h&&(a.cloneCount=2,a.cloneOffset=1,"init"!==b&&a.container.find(".clone").remove(),a.container.append(a.slides.first().clone().addClass("clone")).prepend(a.slides.last().clone().addClass("clone")));a.newSlides=d(c.selector,a);g=m?a.count-1-a.currentSlide+a.cloneOffset:a.currentSlide+a.cloneOffset;l&&!h?(a.container.height(200*(a.count+a.cloneCount)+"%").css("position","absolute").width("100%"),
+ setTimeout(function(){a.newSlides.css({display:"block"});a.doMath();a.viewport.height(a.h);a.setProps(g*a.h,"init")},"init"===b?100:0)):(a.container.width(200*(a.count+a.cloneCount)+"%"),a.setProps(g*a.computedW,"init"),setTimeout(function(){a.doMath();a.newSlides.css({width:a.computedW,"float":"left",display:"block"});c.smoothHeight&&f.smoothHeight()},"init"===b?100:0))}h||a.slides.removeClass(e+"active-slide").eq(a.currentSlide).addClass(e+"active-slide")};a.doMath=function(){var b=a.slides.first(),
+ d=c.itemMargin,e=c.minItems,f=c.maxItems;a.w=a.width();a.h=b.height();a.boxPadding=b.outerWidth()-b.width();h?(a.itemT=c.itemWidth+d,a.minW=e?e*a.itemT:a.w,a.maxW=f?f*a.itemT:a.w,a.itemW=a.minW>a.w?(a.w-d*e)/e:a.maxWa.w?a.w:c.itemWidth,a.visible=Math.floor(a.w/(a.itemW+d)),a.move=0a.w?(a.itemW+2*d)*a.count-a.w-
+ d:(a.itemW+d)*a.count-a.w-d):(a.itemW=a.w,a.pagingCount=a.count,a.last=a.count-1);a.computedW=a.itemW-a.boxPadding};a.update=function(b,d){a.doMath();h||(ba.controlNav.length)f.controlNav.update("add");else if("remove"===d&&!h||a.pagingCounta.last&&(a.currentSlide-=1,a.animatingTo-=1),
+ f.controlNav.update("remove",a.last);c.directionNav&&f.directionNav.update()};a.addSlide=function(b,e){var f=d(b);a.count+=1;a.last=a.count-1;l&&m?void 0!==e?a.slides.eq(a.count-e).after(f):a.container.prepend(f):void 0!==e?a.slides.eq(e).before(f):a.container.append(f);a.update(e,"add");a.slides=d(c.selector+":not(.clone)",a);a.setup();c.added(a)};a.removeSlide=function(b){var e=isNaN(b)?a.slides.index(d(b)):b;a.count-=1;a.last=a.count-1;isNaN(b)?d(b,a.slides).remove():l&&m?a.slides.eq(a.last).remove():
+ a.slides.eq(b).remove();a.doMath();a.update(e,"remove");a.slides=d(c.selector+":not(.clone)",a);a.setup();c.removed(a)};f.init()};d.flexslider.defaults={namespace:"flex-",selector:".slides > li",animation:"fade",easing:"swing",direction:"horizontal",reverse:!1,animationLoop:!0,smoothHeight:!1,startAt:0,slideshow:!0,slideshowSpeed:7E3,animationSpeed:600,initDelay:0,randomize:!1,pauseOnAction:!0,pauseOnHover:!1,useCSS:!0,touch:!0,video:!1,controlNav:!0,directionNav:!0,prevText:"Previous",nextText:"Next",
+ keyboard:!0,multipleKeyboard:!1,mousewheel:!1,pausePlay:!1,pauseText:"Pause",playText:"Play",controlsContainer:"",manualControls:"",sync:"",asNavFor:"",itemWidth:0,itemMargin:0,minItems:0,maxItems:0,move:0,start:function(){},before:function(){},after:function(){},end:function(){},added:function(){},removed:function(){}};d.fn.flexslider=function(i){void 0===i&&(i={});if("object"===typeof i)return this.each(function(){var a=d(this),c=a.find(i.selector?i.selector:".slides > li");1===c.length?(c.fadeIn(400),
+ i.start&&i.start(a)):void 0==a.data("flexslider")&&new d.flexslider(this,i)});var k=d(this).data("flexslider");switch(i){case "play":k.play();break;case "pause":k.pause();break;case "next":k.flexAnimate(k.getTarget("next"),!0);break;case "prev":case "previous":k.flexAnimate(k.getTarget("prev"),!0);break;default:"number"===typeof i&&k.flexAnimate(i,!0)}}})(jQuery);
\ No newline at end of file
diff --git a/branches/php7/js/index.php b/branches/php7/js/index.php
new file mode 100644
index 0000000..ef8b776
--- /dev/null
+++ b/branches/php7/js/index.php
@@ -0,0 +1,4 @@
+
diff --git a/branches/php7/js/jquery.cookiesdirective.js b/branches/php7/js/jquery.cookiesdirective.js
new file mode 100644
index 0000000..3798de2
--- /dev/null
+++ b/branches/php7/js/jquery.cookiesdirective.js
@@ -0,0 +1,294 @@
+/* Cookies Directive - The rewrite. Now a jQuery plugin
+ * Version: 2.0.1
+ * Author: Ollie Phillips
+ * 24 October 2013
+ */
+
+;(function($) {
+ $.cookiesDirective = function(options) {
+
+ // Default Cookies Directive Settings
+ var settings = $.extend({
+ //Options
+ explicitConsent: true,
+ position: 'top',
+ duration: 10,
+ limit: 0,
+ message: null,
+ cookieScripts: null,
+ privacyPolicyUri: 'privacy.html',
+ inlineAction: false,
+ scriptWrapper: function(){},
+ // Styling
+ fontFamily: 'helvetica',
+ fontColor: '#FFFFFF',
+ fontSize: '13px',
+ backgroundColor: '#000000',
+ backgroundOpacity: '80',
+ linkColor: '#CA0000',
+ // Messages
+ multipleCookieScriptBeginningLabel: ' We use ',
+ and: ' and ',
+ multipleCookieScriptEndLabel: ' scripts, which all set cookies. ',
+ singleCookieScriptBeginningLabel: ' We use a ',
+ singleCookieScriptEndLabel: ' script which sets cookies.',
+ explicitCookieDeletionWarning: 'You may delete and block all cookies from this site, but parts of the site will not work.',
+ explicitFindOutMore: 'To find out more about cookies on this website, see our',
+ privacyPolicyLinkText: ' privacy policy',
+ explicitCheckboxLabel: 'You must tick the "I accept cookies from this site" box to accept',
+ explicitCookieAcceptanceLabel: 'I accept cookies from this site',
+ explicitCookieAcceptButtonText: 'Continue',
+ impliedDisclosureText: ' More details can be found in our',
+ impliedSubmitText: 'Do not show this message again',
+ }, options);
+
+ // Perform consent checks
+ if(!getCookie('cookiesDirective')) {
+ if(settings.limit > 0) {
+ // Display limit in force, record the view
+ if(!getCookie('cookiesDisclosureCount')) {
+ setCookie('cookiesDisclosureCount',1,1);
+ } else {
+ var disclosureCount = getCookie('cookiesDisclosureCount');
+ disclosureCount ++;
+ setCookie('cookiesDisclosureCount',disclosureCount,1);
+ }
+
+ // Have we reached the display limit, if not make disclosure
+ if(settings.limit >= getCookie('cookiesDisclosureCount')) {
+ disclosure(settings);
+ }
+ } else {
+ // No display limit
+ disclosure(settings);
+ }
+
+ // If we don't require explicit consent, load up our script wrapping function
+ if(!settings.explicitConsent) {
+ settings.scriptWrapper.call();
+ }
+ } else {
+ // Cookies accepted, load script wrapping function
+ settings.scriptWrapper.call();
+ }
+ };
+
+ // Used to load external javascript files into the DOM
+ $.cookiesDirective.loadScript = function(options) {
+ var settings = $.extend({
+ uri: '',
+ appendTo: 'body'
+ }, options);
+
+ var elementId = String(settings.appendTo);
+ var sA = document.createElement("script");
+ sA.src = settings.uri;
+ sA.type = "text/javascript";
+ sA.onload = sA.onreadystatechange = function() {
+ if ((!sA.readyState || sA.readyState == "loaded" || sA.readyState == "complete")) {
+ return;
+ }
+ }
+ switch(settings.appendTo) {
+ case 'head':
+ $('head').append(sA);
+ break;
+ case 'body':
+ $('body').append(sA);
+ break;
+ default:
+ $('#' + elementId).append(sA);
+ }
+ }
+
+ // Helper scripts
+ // Get cookie
+ var getCookie = function(name) {
+ var nameEQ = name + "=";
+ var ca = document.cookie.split(';');
+ for(var i=0;i < ca.length;i++) {
+ var c = ca[i];
+ while (c.charAt(0)==' ') c = c.substring(1,c.length);
+ if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
+ }
+ return null;
+ }
+
+ // Set cookie
+ var setCookie = function(name,value,days) {
+ if (days) {
+ var date = new Date();
+ date.setTime(date.getTime()+(days*24*60*60*1000));
+ var expires = "; expires="+date.toGMTString();
+ }
+ else var expires = "";
+ document.cookie = name+"="+value+expires+"; path=/";
+ }
+
+ // Detect IE < 9
+ var checkIE = function(){
+ var version;
+ if (navigator.appName == 'Microsoft Internet Explorer') {
+ var ua = navigator.userAgent;
+ var re = new RegExp("MSIE ([0-9]{1,}[\.0-9]{0,})");
+ if (re.exec(ua) != null) {
+ version = parseFloat(RegExp.$1);
+ }
+ if (version <= 8.0) {
+ return true;
+ } else {
+ if(version == 9.0) {
+ if(document.compatMode == "BackCompat") {
+ // IE9 in quirks mode won't run the script properly, set to emulate IE8
+ var mA = document.createElement("meta");
+ mA.content = "IE=EmulateIE8";
+ document.getElementsByTagName('head')[0].appendChild(mA);
+ return true;
+ } else {
+ return false;
+ }
+ }
+ return false;
+ }
+ } else {
+ return false;
+ }
+ }
+
+ // Disclosure routines
+ var disclosure = function(options) {
+ var settings = options;
+ settings.css = 'fixed';
+
+ // IE 9 and lower has issues with position:fixed, either out the box or in compatibility mode - fix that
+ if(checkIE()) {
+ settings.position = 'top';
+ settings.css = 'absolute';
+ }
+
+ // Any cookie setting scripts to disclose
+ var scriptsDisclosure = '';
+ if (settings.cookieScripts) {
+ var scripts = settings.cookieScripts.split(',');
+ var scriptsCount = scripts.length;
+ var scriptDisclosureTxt = '';
+ if(scriptsCount>1) {
+ for(var t=0; t < scriptsCount - 1; t++) {
+ scriptDisclosureTxt += scripts[t] + ', ';
+ }
+
+ scriptsDisclosure = settings.multipleCookieScriptBeginningLabel + scriptDisclosureTxt.substring(0, scriptDisclosureTxt.length - 2) + settings.and + scripts[scriptsCount - 1] + settings.multipleCookieScriptEndLabel;
+ } else {
+ scriptsDisclosure = setting.singleCookieScriptBeginningLabel + scripts[0] + settings.singleCookieScriptEndLabel;
+ }
+ }
+
+ // Create overlay, vary the disclosure based on explicit/implied consent
+ // Set our disclosure/message if one not supplied
+ var html = '';
+ html += '';
+ html += '
';
+ }
+ html += '
';
+ $('body').append(html);
+
+ // Serve the disclosure, and be smarter about branching
+ var dp = settings.position.toLowerCase();
+ if(dp != 'top' && dp!= 'bottom') {
+ dp = 'top';
+ }
+ var opts = new Array();
+ if(dp == 'top') {
+ opts['in'] = {'top':'0'};
+ opts['out'] = {'top':'-300'};
+ } else {
+ opts['in'] = {'bottom':'0'};
+ opts['out'] = {'bottom':'-300'};
+ }
+
+ // Start animation
+ $('#cookiesdirective').animate(opts['in'], 1000, function() {
+ // Set event handlers depending on type of disclosure
+ if(settings.explicitConsent) {
+ // Explicit, need to check a box and click a button
+ $('#explicitsubmit').click(function() {
+ if($('#epdagree').is(':checked')) {
+ // Set a cookie to prevent this being displayed again
+ setCookie('cookiesDirective',1,365);
+ // Close the overlay
+ $('#cookiesdirective').animate(opts['out'],1000,function() {
+ // Remove the elements from the DOM and reload page
+ $('#cookiesdirective').remove();
+ location.reload(true);
+ });
+ } else {
+ // We need the box checked we want "explicit consent", display message
+ $('#epdnotick').css('display', 'block');
+ }
+ });
+ } else {
+ // Implied consent, just a button to close it
+ $('#impliedsubmit').click(function() {
+ // Set a cookie to prevent this being displayed again
+ setCookie('cookiesDirective',1,365);
+ // Close the overlay
+ $('#cookiesdirective').animate(opts['out'],1000,function() {
+ // Remove the elements from the DOM and reload page
+ $('#cookiesdirective').remove();
+ });
+ });
+ }
+
+ // Set a timer to remove the warning after 'settings.duration' seconds
+ setTimeout(function(){
+ $('#cookiesdirective').animate({
+ opacity:'0'
+ },2000, function(){
+ $('#cookiesdirective').css(dp,'-300px');
+ });
+ }, settings.duration * 1000);
+ });
+ }
+})(jQuery);
diff --git a/branches/php7/js/libs/jquery-1.9.0.min.js b/branches/php7/js/libs/jquery-1.9.0.min.js
new file mode 100644
index 0000000..50d1b22
--- /dev/null
+++ b/branches/php7/js/libs/jquery-1.9.0.min.js
@@ -0,0 +1,4 @@
+/*! jQuery v1.9.0 | (c) 2005, 2012 jQuery Foundation, Inc. | jquery.org/license */(function(e,t){"use strict";function n(e){var t=e.length,n=st.type(e);return st.isWindow(e)?!1:1===e.nodeType&&t?!0:"array"===n||"function"!==n&&(0===t||"number"==typeof t&&t>0&&t-1 in e)}function r(e){var t=Tt[e]={};return st.each(e.match(lt)||[],function(e,n){t[n]=!0}),t}function i(e,n,r,i){if(st.acceptData(e)){var o,a,s=st.expando,u="string"==typeof n,l=e.nodeType,c=l?st.cache:e,f=l?e[s]:e[s]&&s;if(f&&c[f]&&(i||c[f].data)||!u||r!==t)return f||(l?e[s]=f=K.pop()||st.guid++:f=s),c[f]||(c[f]={},l||(c[f].toJSON=st.noop)),("object"==typeof n||"function"==typeof n)&&(i?c[f]=st.extend(c[f],n):c[f].data=st.extend(c[f].data,n)),o=c[f],i||(o.data||(o.data={}),o=o.data),r!==t&&(o[st.camelCase(n)]=r),u?(a=o[n],null==a&&(a=o[st.camelCase(n)])):a=o,a}}function o(e,t,n){if(st.acceptData(e)){var r,i,o,a=e.nodeType,u=a?st.cache:e,l=a?e[st.expando]:st.expando;if(u[l]){if(t&&(r=n?u[l]:u[l].data)){st.isArray(t)?t=t.concat(st.map(t,st.camelCase)):t in r?t=[t]:(t=st.camelCase(t),t=t in r?[t]:t.split(" "));for(i=0,o=t.length;o>i;i++)delete r[t[i]];if(!(n?s:st.isEmptyObject)(r))return}(n||(delete u[l].data,s(u[l])))&&(a?st.cleanData([e],!0):st.support.deleteExpando||u!=u.window?delete u[l]:u[l]=null)}}}function a(e,n,r){if(r===t&&1===e.nodeType){var i="data-"+n.replace(Nt,"-$1").toLowerCase();if(r=e.getAttribute(i),"string"==typeof r){try{r="true"===r?!0:"false"===r?!1:"null"===r?null:+r+""===r?+r:wt.test(r)?st.parseJSON(r):r}catch(o){}st.data(e,n,r)}else r=t}return r}function s(e){var t;for(t in e)if(("data"!==t||!st.isEmptyObject(e[t]))&&"toJSON"!==t)return!1;return!0}function u(){return!0}function l(){return!1}function c(e,t){do e=e[t];while(e&&1!==e.nodeType);return e}function f(e,t,n){if(t=t||0,st.isFunction(t))return st.grep(e,function(e,r){var i=!!t.call(e,r,e);return i===n});if(t.nodeType)return st.grep(e,function(e){return e===t===n});if("string"==typeof t){var r=st.grep(e,function(e){return 1===e.nodeType});if(Wt.test(t))return st.filter(t,r,!n);t=st.filter(t,r)}return st.grep(e,function(e){return st.inArray(e,t)>=0===n})}function p(e){var t=zt.split("|"),n=e.createDocumentFragment();if(n.createElement)for(;t.length;)n.createElement(t.pop());return n}function d(e,t){return e.getElementsByTagName(t)[0]||e.appendChild(e.ownerDocument.createElement(t))}function h(e){var t=e.getAttributeNode("type");return e.type=(t&&t.specified)+"/"+e.type,e}function g(e){var t=nn.exec(e.type);return t?e.type=t[1]:e.removeAttribute("type"),e}function m(e,t){for(var n,r=0;null!=(n=e[r]);r++)st._data(n,"globalEval",!t||st._data(t[r],"globalEval"))}function y(e,t){if(1===t.nodeType&&st.hasData(e)){var n,r,i,o=st._data(e),a=st._data(t,o),s=o.events;if(s){delete a.handle,a.events={};for(n in s)for(r=0,i=s[n].length;i>r;r++)st.event.add(t,n,s[n][r])}a.data&&(a.data=st.extend({},a.data))}}function v(e,t){var n,r,i;if(1===t.nodeType){if(n=t.nodeName.toLowerCase(),!st.support.noCloneEvent&&t[st.expando]){r=st._data(t);for(i in r.events)st.removeEvent(t,i,r.handle);t.removeAttribute(st.expando)}"script"===n&&t.text!==e.text?(h(t).text=e.text,g(t)):"object"===n?(t.parentNode&&(t.outerHTML=e.outerHTML),st.support.html5Clone&&e.innerHTML&&!st.trim(t.innerHTML)&&(t.innerHTML=e.innerHTML)):"input"===n&&Zt.test(e.type)?(t.defaultChecked=t.checked=e.checked,t.value!==e.value&&(t.value=e.value)):"option"===n?t.defaultSelected=t.selected=e.defaultSelected:("input"===n||"textarea"===n)&&(t.defaultValue=e.defaultValue)}}function b(e,n){var r,i,o=0,a=e.getElementsByTagName!==t?e.getElementsByTagName(n||"*"):e.querySelectorAll!==t?e.querySelectorAll(n||"*"):t;if(!a)for(a=[],r=e.childNodes||e;null!=(i=r[o]);o++)!n||st.nodeName(i,n)?a.push(i):st.merge(a,b(i,n));return n===t||n&&st.nodeName(e,n)?st.merge([e],a):a}function x(e){Zt.test(e.type)&&(e.defaultChecked=e.checked)}function T(e,t){if(t in e)return t;for(var n=t.charAt(0).toUpperCase()+t.slice(1),r=t,i=Nn.length;i--;)if(t=Nn[i]+n,t in e)return t;return r}function w(e,t){return e=t||e,"none"===st.css(e,"display")||!st.contains(e.ownerDocument,e)}function N(e,t){for(var n,r=[],i=0,o=e.length;o>i;i++)n=e[i],n.style&&(r[i]=st._data(n,"olddisplay"),t?(r[i]||"none"!==n.style.display||(n.style.display=""),""===n.style.display&&w(n)&&(r[i]=st._data(n,"olddisplay",S(n.nodeName)))):r[i]||w(n)||st._data(n,"olddisplay",st.css(n,"display")));for(i=0;o>i;i++)n=e[i],n.style&&(t&&"none"!==n.style.display&&""!==n.style.display||(n.style.display=t?r[i]||"":"none"));return e}function C(e,t,n){var r=mn.exec(t);return r?Math.max(0,r[1]-(n||0))+(r[2]||"px"):t}function k(e,t,n,r,i){for(var o=n===(r?"border":"content")?4:"width"===t?1:0,a=0;4>o;o+=2)"margin"===n&&(a+=st.css(e,n+wn[o],!0,i)),r?("content"===n&&(a-=st.css(e,"padding"+wn[o],!0,i)),"margin"!==n&&(a-=st.css(e,"border"+wn[o]+"Width",!0,i))):(a+=st.css(e,"padding"+wn[o],!0,i),"padding"!==n&&(a+=st.css(e,"border"+wn[o]+"Width",!0,i)));return a}function E(e,t,n){var r=!0,i="width"===t?e.offsetWidth:e.offsetHeight,o=ln(e),a=st.support.boxSizing&&"border-box"===st.css(e,"boxSizing",!1,o);if(0>=i||null==i){if(i=un(e,t,o),(0>i||null==i)&&(i=e.style[t]),yn.test(i))return i;r=a&&(st.support.boxSizingReliable||i===e.style[t]),i=parseFloat(i)||0}return i+k(e,t,n||(a?"border":"content"),r,o)+"px"}function S(e){var t=V,n=bn[e];return n||(n=A(e,t),"none"!==n&&n||(cn=(cn||st("").css("cssText","display:block !important")).appendTo(t.documentElement),t=(cn[0].contentWindow||cn[0].contentDocument).document,t.write(""),t.close(),n=A(e,t),cn.detach()),bn[e]=n),n}function A(e,t){var n=st(t.createElement(e)).appendTo(t.body),r=st.css(n[0],"display");return n.remove(),r}function j(e,t,n,r){var i;if(st.isArray(t))st.each(t,function(t,i){n||kn.test(e)?r(e,i):j(e+"["+("object"==typeof i?t:"")+"]",i,n,r)});else if(n||"object"!==st.type(t))r(e,t);else for(i in t)j(e+"["+i+"]",t[i],n,r)}function D(e){return function(t,n){"string"!=typeof t&&(n=t,t="*");var r,i=0,o=t.toLowerCase().match(lt)||[];if(st.isFunction(n))for(;r=o[i++];)"+"===r[0]?(r=r.slice(1)||"*",(e[r]=e[r]||[]).unshift(n)):(e[r]=e[r]||[]).push(n)}}function L(e,n,r,i){function o(u){var l;return a[u]=!0,st.each(e[u]||[],function(e,u){var c=u(n,r,i);return"string"!=typeof c||s||a[c]?s?!(l=c):t:(n.dataTypes.unshift(c),o(c),!1)}),l}var a={},s=e===$n;return o(n.dataTypes[0])||!a["*"]&&o("*")}function H(e,n){var r,i,o=st.ajaxSettings.flatOptions||{};for(r in n)n[r]!==t&&((o[r]?e:i||(i={}))[r]=n[r]);return i&&st.extend(!0,e,i),e}function M(e,n,r){var i,o,a,s,u=e.contents,l=e.dataTypes,c=e.responseFields;for(o in c)o in r&&(n[c[o]]=r[o]);for(;"*"===l[0];)l.shift(),i===t&&(i=e.mimeType||n.getResponseHeader("Content-Type"));if(i)for(o in u)if(u[o]&&u[o].test(i)){l.unshift(o);break}if(l[0]in r)a=l[0];else{for(o in r){if(!l[0]||e.converters[o+" "+l[0]]){a=o;break}s||(s=o)}a=a||s}return a?(a!==l[0]&&l.unshift(a),r[a]):t}function q(e,t){var n,r,i,o,a={},s=0,u=e.dataTypes.slice(),l=u[0];if(e.dataFilter&&(t=e.dataFilter(t,e.dataType)),u[1])for(n in e.converters)a[n.toLowerCase()]=e.converters[n];for(;i=u[++s];)if("*"!==i){if("*"!==l&&l!==i){if(n=a[l+" "+i]||a["* "+i],!n)for(r in a)if(o=r.split(" "),o[1]===i&&(n=a[l+" "+o[0]]||a["* "+o[0]])){n===!0?n=a[r]:a[r]!==!0&&(i=o[0],u.splice(s--,0,i));break}if(n!==!0)if(n&&e["throws"])t=n(t);else try{t=n(t)}catch(c){return{state:"parsererror",error:n?c:"No conversion from "+l+" to "+i}}}l=i}return{state:"success",data:t}}function _(){try{return new e.XMLHttpRequest}catch(t){}}function F(){try{return new e.ActiveXObject("Microsoft.XMLHTTP")}catch(t){}}function O(){return setTimeout(function(){Qn=t}),Qn=st.now()}function B(e,t){st.each(t,function(t,n){for(var r=(rr[t]||[]).concat(rr["*"]),i=0,o=r.length;o>i;i++)if(r[i].call(e,t,n))return})}function P(e,t,n){var r,i,o=0,a=nr.length,s=st.Deferred().always(function(){delete u.elem}),u=function(){if(i)return!1;for(var t=Qn||O(),n=Math.max(0,l.startTime+l.duration-t),r=n/l.duration||0,o=1-r,a=0,u=l.tweens.length;u>a;a++)l.tweens[a].run(o);return s.notifyWith(e,[l,o,n]),1>o&&u?n:(s.resolveWith(e,[l]),!1)},l=s.promise({elem:e,props:st.extend({},t),opts:st.extend(!0,{specialEasing:{}},n),originalProperties:t,originalOptions:n,startTime:Qn||O(),duration:n.duration,tweens:[],createTween:function(t,n){var r=st.Tween(e,l.opts,t,n,l.opts.specialEasing[t]||l.opts.easing);return l.tweens.push(r),r},stop:function(t){var n=0,r=t?l.tweens.length:0;if(i)return this;for(i=!0;r>n;n++)l.tweens[n].run(1);return t?s.resolveWith(e,[l,t]):s.rejectWith(e,[l,t]),this}}),c=l.props;for(R(c,l.opts.specialEasing);a>o;o++)if(r=nr[o].call(l,e,c,l.opts))return r;return B(l,c),st.isFunction(l.opts.start)&&l.opts.start.call(e,l),st.fx.timer(st.extend(u,{elem:e,anim:l,queue:l.opts.queue})),l.progress(l.opts.progress).done(l.opts.done,l.opts.complete).fail(l.opts.fail).always(l.opts.always)}function R(e,t){var n,r,i,o,a;for(n in e)if(r=st.camelCase(n),i=t[r],o=e[n],st.isArray(o)&&(i=o[1],o=e[n]=o[0]),n!==r&&(e[r]=o,delete e[n]),a=st.cssHooks[r],a&&"expand"in a){o=a.expand(o),delete e[r];for(n in o)n in e||(e[n]=o[n],t[n]=i)}else t[r]=i}function W(e,t,n){var r,i,o,a,s,u,l,c,f,p=this,d=e.style,h={},g=[],m=e.nodeType&&w(e);n.queue||(c=st._queueHooks(e,"fx"),null==c.unqueued&&(c.unqueued=0,f=c.empty.fire,c.empty.fire=function(){c.unqueued||f()}),c.unqueued++,p.always(function(){p.always(function(){c.unqueued--,st.queue(e,"fx").length||c.empty.fire()})})),1===e.nodeType&&("height"in t||"width"in t)&&(n.overflow=[d.overflow,d.overflowX,d.overflowY],"inline"===st.css(e,"display")&&"none"===st.css(e,"float")&&(st.support.inlineBlockNeedsLayout&&"inline"!==S(e.nodeName)?d.zoom=1:d.display="inline-block")),n.overflow&&(d.overflow="hidden",st.support.shrinkWrapBlocks||p.done(function(){d.overflow=n.overflow[0],d.overflowX=n.overflow[1],d.overflowY=n.overflow[2]}));for(r in t)if(o=t[r],Zn.exec(o)){if(delete t[r],u=u||"toggle"===o,o===(m?"hide":"show"))continue;g.push(r)}if(a=g.length){s=st._data(e,"fxshow")||st._data(e,"fxshow",{}),"hidden"in s&&(m=s.hidden),u&&(s.hidden=!m),m?st(e).show():p.done(function(){st(e).hide()}),p.done(function(){var t;st._removeData(e,"fxshow");for(t in h)st.style(e,t,h[t])});for(r=0;a>r;r++)i=g[r],l=p.createTween(i,m?s[i]:0),h[i]=s[i]||st.style(e,i),i in s||(s[i]=l.start,m&&(l.end=l.start,l.start="width"===i||"height"===i?1:0))}}function $(e,t,n,r,i){return new $.prototype.init(e,t,n,r,i)}function I(e,t){var n,r={height:e},i=0;for(t=t?1:0;4>i;i+=2-t)n=wn[i],r["margin"+n]=r["padding"+n]=e;return t&&(r.opacity=r.width=e),r}function z(e){return st.isWindow(e)?e:9===e.nodeType?e.defaultView||e.parentWindow:!1}var X,U,V=e.document,Y=e.location,J=e.jQuery,G=e.$,Q={},K=[],Z="1.9.0",et=K.concat,tt=K.push,nt=K.slice,rt=K.indexOf,it=Q.toString,ot=Q.hasOwnProperty,at=Z.trim,st=function(e,t){return new st.fn.init(e,t,X)},ut=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,lt=/\S+/g,ct=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,ft=/^(?:(<[\w\W]+>)[^>]*|#([\w-]*))$/,pt=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,dt=/^[\],:{}\s]*$/,ht=/(?:^|:|,)(?:\s*\[)+/g,gt=/\\(?:["\\\/bfnrt]|u[\da-fA-F]{4})/g,mt=/"[^"\\\r\n]*"|true|false|null|-?(?:\d+\.|)\d+(?:[eE][+-]?\d+|)/g,yt=/^-ms-/,vt=/-([\da-z])/gi,bt=function(e,t){return t.toUpperCase()},xt=function(){V.addEventListener?(V.removeEventListener("DOMContentLoaded",xt,!1),st.ready()):"complete"===V.readyState&&(V.detachEvent("onreadystatechange",xt),st.ready())};st.fn=st.prototype={jquery:Z,constructor:st,init:function(e,n,r){var i,o;if(!e)return this;if("string"==typeof e){if(i="<"===e.charAt(0)&&">"===e.charAt(e.length-1)&&e.length>=3?[null,e,null]:ft.exec(e),!i||!i[1]&&n)return!n||n.jquery?(n||r).find(e):this.constructor(n).find(e);if(i[1]){if(n=n instanceof st?n[0]:n,st.merge(this,st.parseHTML(i[1],n&&n.nodeType?n.ownerDocument||n:V,!0)),pt.test(i[1])&&st.isPlainObject(n))for(i in n)st.isFunction(this[i])?this[i](n[i]):this.attr(i,n[i]);return this}if(o=V.getElementById(i[2]),o&&o.parentNode){if(o.id!==i[2])return r.find(e);this.length=1,this[0]=o}return this.context=V,this.selector=e,this}return e.nodeType?(this.context=this[0]=e,this.length=1,this):st.isFunction(e)?r.ready(e):(e.selector!==t&&(this.selector=e.selector,this.context=e.context),st.makeArray(e,this))},selector:"",length:0,size:function(){return this.length},toArray:function(){return nt.call(this)},get:function(e){return null==e?this.toArray():0>e?this[this.length+e]:this[e]},pushStack:function(e){var t=st.merge(this.constructor(),e);return t.prevObject=this,t.context=this.context,t},each:function(e,t){return st.each(this,e,t)},ready:function(e){return st.ready.promise().done(e),this},slice:function(){return this.pushStack(nt.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(e){var t=this.length,n=+e+(0>e?t:0);return this.pushStack(n>=0&&t>n?[this[n]]:[])},map:function(e){return this.pushStack(st.map(this,function(t,n){return e.call(t,n,t)}))},end:function(){return this.prevObject||this.constructor(null)},push:tt,sort:[].sort,splice:[].splice},st.fn.init.prototype=st.fn,st.extend=st.fn.extend=function(){var e,n,r,i,o,a,s=arguments[0]||{},u=1,l=arguments.length,c=!1;for("boolean"==typeof s&&(c=s,s=arguments[1]||{},u=2),"object"==typeof s||st.isFunction(s)||(s={}),l===u&&(s=this,--u);l>u;u++)if(null!=(e=arguments[u]))for(n in e)r=s[n],i=e[n],s!==i&&(c&&i&&(st.isPlainObject(i)||(o=st.isArray(i)))?(o?(o=!1,a=r&&st.isArray(r)?r:[]):a=r&&st.isPlainObject(r)?r:{},s[n]=st.extend(c,a,i)):i!==t&&(s[n]=i));return s},st.extend({noConflict:function(t){return e.$===st&&(e.$=G),t&&e.jQuery===st&&(e.jQuery=J),st},isReady:!1,readyWait:1,holdReady:function(e){e?st.readyWait++:st.ready(!0)},ready:function(e){if(e===!0?!--st.readyWait:!st.isReady){if(!V.body)return setTimeout(st.ready);st.isReady=!0,e!==!0&&--st.readyWait>0||(U.resolveWith(V,[st]),st.fn.trigger&&st(V).trigger("ready").off("ready"))}},isFunction:function(e){return"function"===st.type(e)},isArray:Array.isArray||function(e){return"array"===st.type(e)},isWindow:function(e){return null!=e&&e==e.window},isNumeric:function(e){return!isNaN(parseFloat(e))&&isFinite(e)},type:function(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?Q[it.call(e)]||"object":typeof e},isPlainObject:function(e){if(!e||"object"!==st.type(e)||e.nodeType||st.isWindow(e))return!1;try{if(e.constructor&&!ot.call(e,"constructor")&&!ot.call(e.constructor.prototype,"isPrototypeOf"))return!1}catch(n){return!1}var r;for(r in e);return r===t||ot.call(e,r)},isEmptyObject:function(e){var t;for(t in e)return!1;return!0},error:function(e){throw Error(e)},parseHTML:function(e,t,n){if(!e||"string"!=typeof e)return null;"boolean"==typeof t&&(n=t,t=!1),t=t||V;var r=pt.exec(e),i=!n&&[];return r?[t.createElement(r[1])]:(r=st.buildFragment([e],t,i),i&&st(i).remove(),st.merge([],r.childNodes))},parseJSON:function(n){return e.JSON&&e.JSON.parse?e.JSON.parse(n):null===n?n:"string"==typeof n&&(n=st.trim(n),n&&dt.test(n.replace(gt,"@").replace(mt,"]").replace(ht,"")))?Function("return "+n)():(st.error("Invalid JSON: "+n),t)},parseXML:function(n){var r,i;if(!n||"string"!=typeof n)return null;try{e.DOMParser?(i=new DOMParser,r=i.parseFromString(n,"text/xml")):(r=new ActiveXObject("Microsoft.XMLDOM"),r.async="false",r.loadXML(n))}catch(o){r=t}return r&&r.documentElement&&!r.getElementsByTagName("parsererror").length||st.error("Invalid XML: "+n),r},noop:function(){},globalEval:function(t){t&&st.trim(t)&&(e.execScript||function(t){e.eval.call(e,t)})(t)},camelCase:function(e){return e.replace(yt,"ms-").replace(vt,bt)},nodeName:function(e,t){return e.nodeName&&e.nodeName.toLowerCase()===t.toLowerCase()},each:function(e,t,r){var i,o=0,a=e.length,s=n(e);if(r){if(s)for(;a>o&&(i=t.apply(e[o],r),i!==!1);o++);else for(o in e)if(i=t.apply(e[o],r),i===!1)break}else if(s)for(;a>o&&(i=t.call(e[o],o,e[o]),i!==!1);o++);else for(o in e)if(i=t.call(e[o],o,e[o]),i===!1)break;return e},trim:at&&!at.call("\ufeff\u00a0")?function(e){return null==e?"":at.call(e)}:function(e){return null==e?"":(e+"").replace(ct,"")},makeArray:function(e,t){var r=t||[];return null!=e&&(n(Object(e))?st.merge(r,"string"==typeof e?[e]:e):tt.call(r,e)),r},inArray:function(e,t,n){var r;if(t){if(rt)return rt.call(t,e,n);for(r=t.length,n=n?0>n?Math.max(0,r+n):n:0;r>n;n++)if(n in t&&t[n]===e)return n}return-1},merge:function(e,n){var r=n.length,i=e.length,o=0;if("number"==typeof r)for(;r>o;o++)e[i++]=n[o];else for(;n[o]!==t;)e[i++]=n[o++];return e.length=i,e},grep:function(e,t,n){var r,i=[],o=0,a=e.length;for(n=!!n;a>o;o++)r=!!t(e[o],o),n!==r&&i.push(e[o]);return i},map:function(e,t,r){var i,o=0,a=e.length,s=n(e),u=[];if(s)for(;a>o;o++)i=t(e[o],o,r),null!=i&&(u[u.length]=i);else for(o in e)i=t(e[o],o,r),null!=i&&(u[u.length]=i);return et.apply([],u)},guid:1,proxy:function(e,n){var r,i,o;return"string"==typeof n&&(r=e[n],n=e,e=r),st.isFunction(e)?(i=nt.call(arguments,2),o=function(){return e.apply(n||this,i.concat(nt.call(arguments)))},o.guid=e.guid=e.guid||st.guid++,o):t},access:function(e,n,r,i,o,a,s){var u=0,l=e.length,c=null==r;if("object"===st.type(r)){o=!0;for(u in r)st.access(e,n,u,r[u],!0,a,s)}else if(i!==t&&(o=!0,st.isFunction(i)||(s=!0),c&&(s?(n.call(e,i),n=null):(c=n,n=function(e,t,n){return c.call(st(e),n)})),n))for(;l>u;u++)n(e[u],r,s?i:i.call(e[u],u,n(e[u],r)));return o?e:c?n.call(e):l?n(e[0],r):a},now:function(){return(new Date).getTime()}}),st.ready.promise=function(t){if(!U)if(U=st.Deferred(),"complete"===V.readyState)setTimeout(st.ready);else if(V.addEventListener)V.addEventListener("DOMContentLoaded",xt,!1),e.addEventListener("load",st.ready,!1);else{V.attachEvent("onreadystatechange",xt),e.attachEvent("onload",st.ready);var n=!1;try{n=null==e.frameElement&&V.documentElement}catch(r){}n&&n.doScroll&&function i(){if(!st.isReady){try{n.doScroll("left")}catch(e){return setTimeout(i,50)}st.ready()}}()}return U.promise(t)},st.each("Boolean Number String Function Array Date RegExp Object Error".split(" "),function(e,t){Q["[object "+t+"]"]=t.toLowerCase()}),X=st(V);var Tt={};st.Callbacks=function(e){e="string"==typeof e?Tt[e]||r(e):st.extend({},e);var n,i,o,a,s,u,l=[],c=!e.once&&[],f=function(t){for(n=e.memory&&t,i=!0,u=a||0,a=0,s=l.length,o=!0;l&&s>u;u++)if(l[u].apply(t[0],t[1])===!1&&e.stopOnFalse){n=!1;break}o=!1,l&&(c?c.length&&f(c.shift()):n?l=[]:p.disable())},p={add:function(){if(l){var t=l.length;(function r(t){st.each(t,function(t,n){var i=st.type(n);"function"===i?e.unique&&p.has(n)||l.push(n):n&&n.length&&"string"!==i&&r(n)})})(arguments),o?s=l.length:n&&(a=t,f(n))}return this},remove:function(){return l&&st.each(arguments,function(e,t){for(var n;(n=st.inArray(t,l,n))>-1;)l.splice(n,1),o&&(s>=n&&s--,u>=n&&u--)}),this},has:function(e){return st.inArray(e,l)>-1},empty:function(){return l=[],this},disable:function(){return l=c=n=t,this},disabled:function(){return!l},lock:function(){return c=t,n||p.disable(),this},locked:function(){return!c},fireWith:function(e,t){return t=t||[],t=[e,t.slice?t.slice():t],!l||i&&!c||(o?c.push(t):f(t)),this},fire:function(){return p.fireWith(this,arguments),this},fired:function(){return!!i}};return p},st.extend({Deferred:function(e){var t=[["resolve","done",st.Callbacks("once memory"),"resolved"],["reject","fail",st.Callbacks("once memory"),"rejected"],["notify","progress",st.Callbacks("memory")]],n="pending",r={state:function(){return n},always:function(){return i.done(arguments).fail(arguments),this},then:function(){var e=arguments;return st.Deferred(function(n){st.each(t,function(t,o){var a=o[0],s=st.isFunction(e[t])&&e[t];i[o[1]](function(){var e=s&&s.apply(this,arguments);e&&st.isFunction(e.promise)?e.promise().done(n.resolve).fail(n.reject).progress(n.notify):n[a+"With"](this===r?n.promise():this,s?[e]:arguments)})}),e=null}).promise()},promise:function(e){return null!=e?st.extend(e,r):r}},i={};return r.pipe=r.then,st.each(t,function(e,o){var a=o[2],s=o[3];r[o[1]]=a.add,s&&a.add(function(){n=s},t[1^e][2].disable,t[2][2].lock),i[o[0]]=function(){return i[o[0]+"With"](this===i?r:this,arguments),this},i[o[0]+"With"]=a.fireWith}),r.promise(i),e&&e.call(i,i),i},when:function(e){var t,n,r,i=0,o=nt.call(arguments),a=o.length,s=1!==a||e&&st.isFunction(e.promise)?a:0,u=1===s?e:st.Deferred(),l=function(e,n,r){return function(i){n[e]=this,r[e]=arguments.length>1?nt.call(arguments):i,r===t?u.notifyWith(n,r):--s||u.resolveWith(n,r)}};if(a>1)for(t=Array(a),n=Array(a),r=Array(a);a>i;i++)o[i]&&st.isFunction(o[i].promise)?o[i].promise().done(l(i,r,o)).fail(u.reject).progress(l(i,n,t)):--s;return s||u.resolveWith(r,o),u.promise()}}),st.support=function(){var n,r,i,o,a,s,u,l,c,f,p=V.createElement("div");if(p.setAttribute("className","t"),p.innerHTML=" a ",r=p.getElementsByTagName("*"),i=p.getElementsByTagName("a")[0],!r||!i||!r.length)return{};o=V.createElement("select"),a=o.appendChild(V.createElement("option")),s=p.getElementsByTagName("input")[0],i.style.cssText="top:1px;float:left;opacity:.5",n={getSetAttribute:"t"!==p.className,leadingWhitespace:3===p.firstChild.nodeType,tbody:!p.getElementsByTagName("tbody").length,htmlSerialize:!!p.getElementsByTagName("link").length,style:/top/.test(i.getAttribute("style")),hrefNormalized:"/a"===i.getAttribute("href"),opacity:/^0.5/.test(i.style.opacity),cssFloat:!!i.style.cssFloat,checkOn:!!s.value,optSelected:a.selected,enctype:!!V.createElement("form").enctype,html5Clone:"<:nav>"!==V.createElement("nav").cloneNode(!0).outerHTML,boxModel:"CSS1Compat"===V.compatMode,deleteExpando:!0,noCloneEvent:!0,inlineBlockNeedsLayout:!1,shrinkWrapBlocks:!1,reliableMarginRight:!0,boxSizingReliable:!0,pixelPosition:!1},s.checked=!0,n.noCloneChecked=s.cloneNode(!0).checked,o.disabled=!0,n.optDisabled=!a.disabled;try{delete p.test}catch(d){n.deleteExpando=!1}s=V.createElement("input"),s.setAttribute("value",""),n.input=""===s.getAttribute("value"),s.value="t",s.setAttribute("type","radio"),n.radioValue="t"===s.value,s.setAttribute("checked","t"),s.setAttribute("name","t"),u=V.createDocumentFragment(),u.appendChild(s),n.appendChecked=s.checked,n.checkClone=u.cloneNode(!0).cloneNode(!0).lastChild.checked,p.attachEvent&&(p.attachEvent("onclick",function(){n.noCloneEvent=!1}),p.cloneNode(!0).click());for(f in{submit:!0,change:!0,focusin:!0})p.setAttribute(l="on"+f,"t"),n[f+"Bubbles"]=l in e||p.attributes[l].expando===!1;return p.style.backgroundClip="content-box",p.cloneNode(!0).style.backgroundClip="",n.clearCloneStyle="content-box"===p.style.backgroundClip,st(function(){var r,i,o,a="padding:0;margin:0;border:0;display:block;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;",s=V.getElementsByTagName("body")[0];s&&(r=V.createElement("div"),r.style.cssText="border:0;width:0;height:0;position:absolute;top:0;left:-9999px;margin-top:1px",s.appendChild(r).appendChild(p),p.innerHTML="",o=p.getElementsByTagName("td"),o[0].style.cssText="padding:0;margin:0;border:0;display:none",c=0===o[0].offsetHeight,o[0].style.display="",o[1].style.display="none",n.reliableHiddenOffsets=c&&0===o[0].offsetHeight,p.innerHTML="",p.style.cssText="box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;padding:1px;border:1px;display:block;width:4px;margin-top:1%;position:absolute;top:1%;",n.boxSizing=4===p.offsetWidth,n.doesNotIncludeMarginInBodyOffset=1!==s.offsetTop,e.getComputedStyle&&(n.pixelPosition="1%"!==(e.getComputedStyle(p,null)||{}).top,n.boxSizingReliable="4px"===(e.getComputedStyle(p,null)||{width:"4px"}).width,i=p.appendChild(V.createElement("div")),i.style.cssText=p.style.cssText=a,i.style.marginRight=i.style.width="0",p.style.width="1px",n.reliableMarginRight=!parseFloat((e.getComputedStyle(i,null)||{}).marginRight)),p.style.zoom!==t&&(p.innerHTML="",p.style.cssText=a+"width:1px;padding:1px;display:inline;zoom:1",n.inlineBlockNeedsLayout=3===p.offsetWidth,p.style.display="block",p.innerHTML="
",p.firstChild.style.width="5px",n.shrinkWrapBlocks=3!==p.offsetWidth,s.style.zoom=1),s.removeChild(r),r=p=o=i=null)}),r=o=u=a=i=s=null,n}();var wt=/(?:\{[\s\S]*\}|\[[\s\S]*\])$/,Nt=/([A-Z])/g;st.extend({cache:{},expando:"jQuery"+(Z+Math.random()).replace(/\D/g,""),noData:{embed:!0,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:!0},hasData:function(e){return e=e.nodeType?st.cache[e[st.expando]]:e[st.expando],!!e&&!s(e)},data:function(e,t,n){return i(e,t,n,!1)},removeData:function(e,t){return o(e,t,!1)},_data:function(e,t,n){return i(e,t,n,!0)},_removeData:function(e,t){return o(e,t,!0)},acceptData:function(e){var t=e.nodeName&&st.noData[e.nodeName.toLowerCase()];return!t||t!==!0&&e.getAttribute("classid")===t}}),st.fn.extend({data:function(e,n){var r,i,o=this[0],s=0,u=null;if(e===t){if(this.length&&(u=st.data(o),1===o.nodeType&&!st._data(o,"parsedAttrs"))){for(r=o.attributes;r.length>s;s++)i=r[s].name,i.indexOf("data-")||(i=st.camelCase(i.substring(5)),a(o,i,u[i]));st._data(o,"parsedAttrs",!0)}return u}return"object"==typeof e?this.each(function(){st.data(this,e)}):st.access(this,function(n){return n===t?o?a(o,e,st.data(o,e)):null:(this.each(function(){st.data(this,e,n)}),t)},null,n,arguments.length>1,null,!0)},removeData:function(e){return this.each(function(){st.removeData(this,e)})}}),st.extend({queue:function(e,n,r){var i;return e?(n=(n||"fx")+"queue",i=st._data(e,n),r&&(!i||st.isArray(r)?i=st._data(e,n,st.makeArray(r)):i.push(r)),i||[]):t},dequeue:function(e,t){t=t||"fx";var n=st.queue(e,t),r=n.length,i=n.shift(),o=st._queueHooks(e,t),a=function(){st.dequeue(e,t)};"inprogress"===i&&(i=n.shift(),r--),o.cur=i,i&&("fx"===t&&n.unshift("inprogress"),delete o.stop,i.call(e,a,o)),!r&&o&&o.empty.fire()},_queueHooks:function(e,t){var n=t+"queueHooks";return st._data(e,n)||st._data(e,n,{empty:st.Callbacks("once memory").add(function(){st._removeData(e,t+"queue"),st._removeData(e,n)})})}}),st.fn.extend({queue:function(e,n){var r=2;return"string"!=typeof e&&(n=e,e="fx",r--),r>arguments.length?st.queue(this[0],e):n===t?this:this.each(function(){var t=st.queue(this,e,n);st._queueHooks(this,e),"fx"===e&&"inprogress"!==t[0]&&st.dequeue(this,e)})},dequeue:function(e){return this.each(function(){st.dequeue(this,e)})},delay:function(e,t){return e=st.fx?st.fx.speeds[e]||e:e,t=t||"fx",this.queue(t,function(t,n){var r=setTimeout(t,e);n.stop=function(){clearTimeout(r)}})},clearQueue:function(e){return this.queue(e||"fx",[])},promise:function(e,n){var r,i=1,o=st.Deferred(),a=this,s=this.length,u=function(){--i||o.resolveWith(a,[a])};for("string"!=typeof e&&(n=e,e=t),e=e||"fx";s--;)r=st._data(a[s],e+"queueHooks"),r&&r.empty&&(i++,r.empty.add(u));return u(),o.promise(n)}});var Ct,kt,Et=/[\t\r\n]/g,St=/\r/g,At=/^(?:input|select|textarea|button|object)$/i,jt=/^(?:a|area)$/i,Dt=/^(?:checked|selected|autofocus|autoplay|async|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped)$/i,Lt=/^(?:checked|selected)$/i,Ht=st.support.getSetAttribute,Mt=st.support.input;st.fn.extend({attr:function(e,t){return st.access(this,st.attr,e,t,arguments.length>1)},removeAttr:function(e){return this.each(function(){st.removeAttr(this,e)})},prop:function(e,t){return st.access(this,st.prop,e,t,arguments.length>1)},removeProp:function(e){return e=st.propFix[e]||e,this.each(function(){try{this[e]=t,delete this[e]}catch(n){}})},addClass:function(e){var t,n,r,i,o,a=0,s=this.length,u="string"==typeof e&&e;if(st.isFunction(e))return this.each(function(t){st(this).addClass(e.call(this,t,this.className))});if(u)for(t=(e||"").match(lt)||[];s>a;a++)if(n=this[a],r=1===n.nodeType&&(n.className?(" "+n.className+" ").replace(Et," "):" ")){for(o=0;i=t[o++];)0>r.indexOf(" "+i+" ")&&(r+=i+" ");n.className=st.trim(r)}return this},removeClass:function(e){var t,n,r,i,o,a=0,s=this.length,u=0===arguments.length||"string"==typeof e&&e;if(st.isFunction(e))return this.each(function(t){st(this).removeClass(e.call(this,t,this.className))});if(u)for(t=(e||"").match(lt)||[];s>a;a++)if(n=this[a],r=1===n.nodeType&&(n.className?(" "+n.className+" ").replace(Et," "):"")){for(o=0;i=t[o++];)for(;r.indexOf(" "+i+" ")>=0;)r=r.replace(" "+i+" "," ");n.className=e?st.trim(r):""}return this},toggleClass:function(e,t){var n=typeof e,r="boolean"==typeof t;return st.isFunction(e)?this.each(function(n){st(this).toggleClass(e.call(this,n,this.className,t),t)}):this.each(function(){if("string"===n)for(var i,o=0,a=st(this),s=t,u=e.match(lt)||[];i=u[o++];)s=r?s:!a.hasClass(i),a[s?"addClass":"removeClass"](i);else("undefined"===n||"boolean"===n)&&(this.className&&st._data(this,"__className__",this.className),this.className=this.className||e===!1?"":st._data(this,"__className__")||"")})},hasClass:function(e){for(var t=" "+e+" ",n=0,r=this.length;r>n;n++)if(1===this[n].nodeType&&(" "+this[n].className+" ").replace(Et," ").indexOf(t)>=0)return!0;return!1},val:function(e){var n,r,i,o=this[0];{if(arguments.length)return i=st.isFunction(e),this.each(function(r){var o,a=st(this);1===this.nodeType&&(o=i?e.call(this,r,a.val()):e,null==o?o="":"number"==typeof o?o+="":st.isArray(o)&&(o=st.map(o,function(e){return null==e?"":e+""})),n=st.valHooks[this.type]||st.valHooks[this.nodeName.toLowerCase()],n&&"set"in n&&n.set(this,o,"value")!==t||(this.value=o))});if(o)return n=st.valHooks[o.type]||st.valHooks[o.nodeName.toLowerCase()],n&&"get"in n&&(r=n.get(o,"value"))!==t?r:(r=o.value,"string"==typeof r?r.replace(St,""):null==r?"":r)}}}),st.extend({valHooks:{option:{get:function(e){var t=e.attributes.value;return!t||t.specified?e.value:e.text}},select:{get:function(e){for(var t,n,r=e.options,i=e.selectedIndex,o="select-one"===e.type||0>i,a=o?null:[],s=o?i+1:r.length,u=0>i?s:o?i:0;s>u;u++)if(n=r[u],!(!n.selected&&u!==i||(st.support.optDisabled?n.disabled:null!==n.getAttribute("disabled"))||n.parentNode.disabled&&st.nodeName(n.parentNode,"optgroup"))){if(t=st(n).val(),o)return t;a.push(t)}return a},set:function(e,t){var n=st.makeArray(t);return st(e).find("option").each(function(){this.selected=st.inArray(st(this).val(),n)>=0}),n.length||(e.selectedIndex=-1),n}}},attr:function(e,n,r){var i,o,a,s=e.nodeType;if(e&&3!==s&&8!==s&&2!==s)return e.getAttribute===t?st.prop(e,n,r):(a=1!==s||!st.isXMLDoc(e),a&&(n=n.toLowerCase(),o=st.attrHooks[n]||(Dt.test(n)?kt:Ct)),r===t?o&&a&&"get"in o&&null!==(i=o.get(e,n))?i:(e.getAttribute!==t&&(i=e.getAttribute(n)),null==i?t:i):null!==r?o&&a&&"set"in o&&(i=o.set(e,r,n))!==t?i:(e.setAttribute(n,r+""),r):(st.removeAttr(e,n),t))},removeAttr:function(e,t){var n,r,i=0,o=t&&t.match(lt);if(o&&1===e.nodeType)for(;n=o[i++];)r=st.propFix[n]||n,Dt.test(n)?!Ht&&Lt.test(n)?e[st.camelCase("default-"+n)]=e[r]=!1:e[r]=!1:st.attr(e,n,""),e.removeAttribute(Ht?n:r)},attrHooks:{type:{set:function(e,t){if(!st.support.radioValue&&"radio"===t&&st.nodeName(e,"input")){var n=e.value;return e.setAttribute("type",t),n&&(e.value=n),t}}}},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(e,n,r){var i,o,a,s=e.nodeType;if(e&&3!==s&&8!==s&&2!==s)return a=1!==s||!st.isXMLDoc(e),a&&(n=st.propFix[n]||n,o=st.propHooks[n]),r!==t?o&&"set"in o&&(i=o.set(e,r,n))!==t?i:e[n]=r:o&&"get"in o&&null!==(i=o.get(e,n))?i:e[n]},propHooks:{tabIndex:{get:function(e){var n=e.getAttributeNode("tabindex");return n&&n.specified?parseInt(n.value,10):At.test(e.nodeName)||jt.test(e.nodeName)&&e.href?0:t}}}}),kt={get:function(e,n){var r=st.prop(e,n),i="boolean"==typeof r&&e.getAttribute(n),o="boolean"==typeof r?Mt&&Ht?null!=i:Lt.test(n)?e[st.camelCase("default-"+n)]:!!i:e.getAttributeNode(n);return o&&o.value!==!1?n.toLowerCase():t},set:function(e,t,n){return t===!1?st.removeAttr(e,n):Mt&&Ht||!Lt.test(n)?e.setAttribute(!Ht&&st.propFix[n]||n,n):e[st.camelCase("default-"+n)]=e[n]=!0,n}},Mt&&Ht||(st.attrHooks.value={get:function(e,n){var r=e.getAttributeNode(n);return st.nodeName(e,"input")?e.defaultValue:r&&r.specified?r.value:t
+},set:function(e,n,r){return st.nodeName(e,"input")?(e.defaultValue=n,t):Ct&&Ct.set(e,n,r)}}),Ht||(Ct=st.valHooks.button={get:function(e,n){var r=e.getAttributeNode(n);return r&&("id"===n||"name"===n||"coords"===n?""!==r.value:r.specified)?r.value:t},set:function(e,n,r){var i=e.getAttributeNode(r);return i||e.setAttributeNode(i=e.ownerDocument.createAttribute(r)),i.value=n+="","value"===r||n===e.getAttribute(r)?n:t}},st.attrHooks.contenteditable={get:Ct.get,set:function(e,t,n){Ct.set(e,""===t?!1:t,n)}},st.each(["width","height"],function(e,n){st.attrHooks[n]=st.extend(st.attrHooks[n],{set:function(e,r){return""===r?(e.setAttribute(n,"auto"),r):t}})})),st.support.hrefNormalized||(st.each(["href","src","width","height"],function(e,n){st.attrHooks[n]=st.extend(st.attrHooks[n],{get:function(e){var r=e.getAttribute(n,2);return null==r?t:r}})}),st.each(["href","src"],function(e,t){st.propHooks[t]={get:function(e){return e.getAttribute(t,4)}}})),st.support.style||(st.attrHooks.style={get:function(e){return e.style.cssText||t},set:function(e,t){return e.style.cssText=t+""}}),st.support.optSelected||(st.propHooks.selected=st.extend(st.propHooks.selected,{get:function(e){var t=e.parentNode;return t&&(t.selectedIndex,t.parentNode&&t.parentNode.selectedIndex),null}})),st.support.enctype||(st.propFix.enctype="encoding"),st.support.checkOn||st.each(["radio","checkbox"],function(){st.valHooks[this]={get:function(e){return null===e.getAttribute("value")?"on":e.value}}}),st.each(["radio","checkbox"],function(){st.valHooks[this]=st.extend(st.valHooks[this],{set:function(e,n){return st.isArray(n)?e.checked=st.inArray(st(e).val(),n)>=0:t}})});var qt=/^(?:input|select|textarea)$/i,_t=/^key/,Ft=/^(?:mouse|contextmenu)|click/,Ot=/^(?:focusinfocus|focusoutblur)$/,Bt=/^([^.]*)(?:\.(.+)|)$/;st.event={global:{},add:function(e,n,r,i,o){var a,s,u,l,c,f,p,d,h,g,m,y=3!==e.nodeType&&8!==e.nodeType&&st._data(e);if(y){for(r.handler&&(a=r,r=a.handler,o=a.selector),r.guid||(r.guid=st.guid++),(l=y.events)||(l=y.events={}),(s=y.handle)||(s=y.handle=function(e){return st===t||e&&st.event.triggered===e.type?t:st.event.dispatch.apply(s.elem,arguments)},s.elem=e),n=(n||"").match(lt)||[""],c=n.length;c--;)u=Bt.exec(n[c])||[],h=m=u[1],g=(u[2]||"").split(".").sort(),p=st.event.special[h]||{},h=(o?p.delegateType:p.bindType)||h,p=st.event.special[h]||{},f=st.extend({type:h,origType:m,data:i,handler:r,guid:r.guid,selector:o,needsContext:o&&st.expr.match.needsContext.test(o),namespace:g.join(".")},a),(d=l[h])||(d=l[h]=[],d.delegateCount=0,p.setup&&p.setup.call(e,i,g,s)!==!1||(e.addEventListener?e.addEventListener(h,s,!1):e.attachEvent&&e.attachEvent("on"+h,s))),p.add&&(p.add.call(e,f),f.handler.guid||(f.handler.guid=r.guid)),o?d.splice(d.delegateCount++,0,f):d.push(f),st.event.global[h]=!0;e=null}},remove:function(e,t,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,m=st.hasData(e)&&st._data(e);if(m&&(u=m.events)){for(t=(t||"").match(lt)||[""],l=t.length;l--;)if(s=Bt.exec(t[l])||[],d=g=s[1],h=(s[2]||"").split(".").sort(),d){for(f=st.event.special[d]||{},d=(r?f.delegateType:f.bindType)||d,p=u[d]||[],s=s[2]&&RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"),a=o=p.length;o--;)c=p[o],!i&&g!==c.origType||n&&n.guid!==c.guid||s&&!s.test(c.namespace)||r&&r!==c.selector&&("**"!==r||!c.selector)||(p.splice(o,1),c.selector&&p.delegateCount--,f.remove&&f.remove.call(e,c));a&&!p.length&&(f.teardown&&f.teardown.call(e,h,m.handle)!==!1||st.removeEvent(e,d,m.handle),delete u[d])}else for(d in u)st.event.remove(e,d+t[l],n,r,!0);st.isEmptyObject(u)&&(delete m.handle,st._removeData(e,"events"))}},trigger:function(n,r,i,o){var a,s,u,l,c,f,p,d=[i||V],h=n.type||n,g=n.namespace?n.namespace.split("."):[];if(s=u=i=i||V,3!==i.nodeType&&8!==i.nodeType&&!Ot.test(h+st.event.triggered)&&(h.indexOf(".")>=0&&(g=h.split("."),h=g.shift(),g.sort()),c=0>h.indexOf(":")&&"on"+h,n=n[st.expando]?n:new st.Event(h,"object"==typeof n&&n),n.isTrigger=!0,n.namespace=g.join("."),n.namespace_re=n.namespace?RegExp("(^|\\.)"+g.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,n.result=t,n.target||(n.target=i),r=null==r?[n]:st.makeArray(r,[n]),p=st.event.special[h]||{},o||!p.trigger||p.trigger.apply(i,r)!==!1)){if(!o&&!p.noBubble&&!st.isWindow(i)){for(l=p.delegateType||h,Ot.test(l+h)||(s=s.parentNode);s;s=s.parentNode)d.push(s),u=s;u===(i.ownerDocument||V)&&d.push(u.defaultView||u.parentWindow||e)}for(a=0;(s=d[a++])&&!n.isPropagationStopped();)n.type=a>1?l:p.bindType||h,f=(st._data(s,"events")||{})[n.type]&&st._data(s,"handle"),f&&f.apply(s,r),f=c&&s[c],f&&st.acceptData(s)&&f.apply&&f.apply(s,r)===!1&&n.preventDefault();if(n.type=h,!(o||n.isDefaultPrevented()||p._default&&p._default.apply(i.ownerDocument,r)!==!1||"click"===h&&st.nodeName(i,"a")||!st.acceptData(i)||!c||!i[h]||st.isWindow(i))){u=i[c],u&&(i[c]=null),st.event.triggered=h;try{i[h]()}catch(m){}st.event.triggered=t,u&&(i[c]=u)}return n.result}},dispatch:function(e){e=st.event.fix(e);var n,r,i,o,a,s=[],u=nt.call(arguments),l=(st._data(this,"events")||{})[e.type]||[],c=st.event.special[e.type]||{};if(u[0]=e,e.delegateTarget=this,!c.preDispatch||c.preDispatch.call(this,e)!==!1){for(s=st.event.handlers.call(this,e,l),n=0;(o=s[n++])&&!e.isPropagationStopped();)for(e.currentTarget=o.elem,r=0;(a=o.handlers[r++])&&!e.isImmediatePropagationStopped();)(!e.namespace_re||e.namespace_re.test(a.namespace))&&(e.handleObj=a,e.data=a.data,i=((st.event.special[a.origType]||{}).handle||a.handler).apply(o.elem,u),i!==t&&(e.result=i)===!1&&(e.preventDefault(),e.stopPropagation()));return c.postDispatch&&c.postDispatch.call(this,e),e.result}},handlers:function(e,n){var r,i,o,a,s=[],u=n.delegateCount,l=e.target;if(u&&l.nodeType&&(!e.button||"click"!==e.type))for(;l!=this;l=l.parentNode||this)if(l.disabled!==!0||"click"!==e.type){for(i=[],r=0;u>r;r++)a=n[r],o=a.selector+" ",i[o]===t&&(i[o]=a.needsContext?st(o,this).index(l)>=0:st.find(o,this,null,[l]).length),i[o]&&i.push(a);i.length&&s.push({elem:l,handlers:i})}return n.length>u&&s.push({elem:this,handlers:n.slice(u)}),s},fix:function(e){if(e[st.expando])return e;var t,n,r=e,i=st.event.fixHooks[e.type]||{},o=i.props?this.props.concat(i.props):this.props;for(e=new st.Event(r),t=o.length;t--;)n=o[t],e[n]=r[n];return e.target||(e.target=r.srcElement||V),3===e.target.nodeType&&(e.target=e.target.parentNode),e.metaKey=!!e.metaKey,i.filter?i.filter(e,r):e},props:"altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),fixHooks:{},keyHooks:{props:"char charCode key keyCode".split(" "),filter:function(e,t){return null==e.which&&(e.which=null!=t.charCode?t.charCode:t.keyCode),e}},mouseHooks:{props:"button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "),filter:function(e,n){var r,i,o,a=n.button,s=n.fromElement;return null==e.pageX&&null!=n.clientX&&(r=e.target.ownerDocument||V,i=r.documentElement,o=r.body,e.pageX=n.clientX+(i&&i.scrollLeft||o&&o.scrollLeft||0)-(i&&i.clientLeft||o&&o.clientLeft||0),e.pageY=n.clientY+(i&&i.scrollTop||o&&o.scrollTop||0)-(i&&i.clientTop||o&&o.clientTop||0)),!e.relatedTarget&&s&&(e.relatedTarget=s===e.target?n.toElement:s),e.which||a===t||(e.which=1&a?1:2&a?3:4&a?2:0),e}},special:{load:{noBubble:!0},click:{trigger:function(){return st.nodeName(this,"input")&&"checkbox"===this.type&&this.click?(this.click(),!1):t}},focus:{trigger:function(){if(this!==V.activeElement&&this.focus)try{return this.focus(),!1}catch(e){}},delegateType:"focusin"},blur:{trigger:function(){return this===V.activeElement&&this.blur?(this.blur(),!1):t},delegateType:"focusout"},beforeunload:{postDispatch:function(e){e.result!==t&&(e.originalEvent.returnValue=e.result)}}},simulate:function(e,t,n,r){var i=st.extend(new st.Event,n,{type:e,isSimulated:!0,originalEvent:{}});r?st.event.trigger(i,null,t):st.event.dispatch.call(t,i),i.isDefaultPrevented()&&n.preventDefault()}},st.removeEvent=V.removeEventListener?function(e,t,n){e.removeEventListener&&e.removeEventListener(t,n,!1)}:function(e,n,r){var i="on"+n;e.detachEvent&&(e[i]===t&&(e[i]=null),e.detachEvent(i,r))},st.Event=function(e,n){return this instanceof st.Event?(e&&e.type?(this.originalEvent=e,this.type=e.type,this.isDefaultPrevented=e.defaultPrevented||e.returnValue===!1||e.getPreventDefault&&e.getPreventDefault()?u:l):this.type=e,n&&st.extend(this,n),this.timeStamp=e&&e.timeStamp||st.now(),this[st.expando]=!0,t):new st.Event(e,n)},st.Event.prototype={isDefaultPrevented:l,isPropagationStopped:l,isImmediatePropagationStopped:l,preventDefault:function(){var e=this.originalEvent;this.isDefaultPrevented=u,e&&(e.preventDefault?e.preventDefault():e.returnValue=!1)},stopPropagation:function(){var e=this.originalEvent;this.isPropagationStopped=u,e&&(e.stopPropagation&&e.stopPropagation(),e.cancelBubble=!0)},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=u,this.stopPropagation()}},st.each({mouseenter:"mouseover",mouseleave:"mouseout"},function(e,t){st.event.special[e]={delegateType:t,bindType:t,handle:function(e){var n,r=this,i=e.relatedTarget,o=e.handleObj;return(!i||i!==r&&!st.contains(r,i))&&(e.type=o.origType,n=o.handler.apply(this,arguments),e.type=t),n}}}),st.support.submitBubbles||(st.event.special.submit={setup:function(){return st.nodeName(this,"form")?!1:(st.event.add(this,"click._submit keypress._submit",function(e){var n=e.target,r=st.nodeName(n,"input")||st.nodeName(n,"button")?n.form:t;r&&!st._data(r,"submitBubbles")&&(st.event.add(r,"submit._submit",function(e){e._submit_bubble=!0}),st._data(r,"submitBubbles",!0))}),t)},postDispatch:function(e){e._submit_bubble&&(delete e._submit_bubble,this.parentNode&&!e.isTrigger&&st.event.simulate("submit",this.parentNode,e,!0))},teardown:function(){return st.nodeName(this,"form")?!1:(st.event.remove(this,"._submit"),t)}}),st.support.changeBubbles||(st.event.special.change={setup:function(){return qt.test(this.nodeName)?(("checkbox"===this.type||"radio"===this.type)&&(st.event.add(this,"propertychange._change",function(e){"checked"===e.originalEvent.propertyName&&(this._just_changed=!0)}),st.event.add(this,"click._change",function(e){this._just_changed&&!e.isTrigger&&(this._just_changed=!1),st.event.simulate("change",this,e,!0)})),!1):(st.event.add(this,"beforeactivate._change",function(e){var t=e.target;qt.test(t.nodeName)&&!st._data(t,"changeBubbles")&&(st.event.add(t,"change._change",function(e){!this.parentNode||e.isSimulated||e.isTrigger||st.event.simulate("change",this.parentNode,e,!0)}),st._data(t,"changeBubbles",!0))}),t)},handle:function(e){var n=e.target;return this!==n||e.isSimulated||e.isTrigger||"radio"!==n.type&&"checkbox"!==n.type?e.handleObj.handler.apply(this,arguments):t},teardown:function(){return st.event.remove(this,"._change"),!qt.test(this.nodeName)}}),st.support.focusinBubbles||st.each({focus:"focusin",blur:"focusout"},function(e,t){var n=0,r=function(e){st.event.simulate(t,e.target,st.event.fix(e),!0)};st.event.special[t]={setup:function(){0===n++&&V.addEventListener(e,r,!0)},teardown:function(){0===--n&&V.removeEventListener(e,r,!0)}}}),st.fn.extend({on:function(e,n,r,i,o){var a,s;if("object"==typeof e){"string"!=typeof n&&(r=r||n,n=t);for(s in e)this.on(s,n,r,e[s],o);return this}if(null==r&&null==i?(i=n,r=n=t):null==i&&("string"==typeof n?(i=r,r=t):(i=r,r=n,n=t)),i===!1)i=l;else if(!i)return this;return 1===o&&(a=i,i=function(e){return st().off(e),a.apply(this,arguments)},i.guid=a.guid||(a.guid=st.guid++)),this.each(function(){st.event.add(this,e,i,r,n)})},one:function(e,t,n,r){return this.on(e,t,n,r,1)},off:function(e,n,r){var i,o;if(e&&e.preventDefault&&e.handleObj)return i=e.handleObj,st(e.delegateTarget).off(i.namespace?i.origType+"."+i.namespace:i.origType,i.selector,i.handler),this;if("object"==typeof e){for(o in e)this.off(o,n,e[o]);return this}return(n===!1||"function"==typeof n)&&(r=n,n=t),r===!1&&(r=l),this.each(function(){st.event.remove(this,e,r,n)})},bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)},trigger:function(e,t){return this.each(function(){st.event.trigger(e,t,this)})},triggerHandler:function(e,n){var r=this[0];return r?st.event.trigger(e,n,r,!0):t},hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)}}),st.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(e,t){st.fn[t]=function(e,n){return arguments.length>0?this.on(t,null,e,n):this.trigger(t)},_t.test(t)&&(st.event.fixHooks[t]=st.event.keyHooks),Ft.test(t)&&(st.event.fixHooks[t]=st.event.mouseHooks)}),function(e,t){function n(e){return ht.test(e+"")}function r(){var e,t=[];return e=function(n,r){return t.push(n+=" ")>C.cacheLength&&delete e[t.shift()],e[n]=r}}function i(e){return e[P]=!0,e}function o(e){var t=L.createElement("div");try{return e(t)}catch(n){return!1}finally{t=null}}function a(e,t,n,r){var i,o,a,s,u,l,c,d,h,g;if((t?t.ownerDocument||t:R)!==L&&D(t),t=t||L,n=n||[],!e||"string"!=typeof e)return n;if(1!==(s=t.nodeType)&&9!==s)return[];if(!M&&!r){if(i=gt.exec(e))if(a=i[1]){if(9===s){if(o=t.getElementById(a),!o||!o.parentNode)return n;if(o.id===a)return n.push(o),n}else if(t.ownerDocument&&(o=t.ownerDocument.getElementById(a))&&O(t,o)&&o.id===a)return n.push(o),n}else{if(i[2])return Q.apply(n,K.call(t.getElementsByTagName(e),0)),n;if((a=i[3])&&W.getByClassName&&t.getElementsByClassName)return Q.apply(n,K.call(t.getElementsByClassName(a),0)),n}if(W.qsa&&!q.test(e)){if(c=!0,d=P,h=t,g=9===s&&e,1===s&&"object"!==t.nodeName.toLowerCase()){for(l=f(e),(c=t.getAttribute("id"))?d=c.replace(vt,"\\$&"):t.setAttribute("id",d),d="[id='"+d+"'] ",u=l.length;u--;)l[u]=d+p(l[u]);h=dt.test(e)&&t.parentNode||t,g=l.join(",")}if(g)try{return Q.apply(n,K.call(h.querySelectorAll(g),0)),n}catch(m){}finally{c||t.removeAttribute("id")}}}return x(e.replace(at,"$1"),t,n,r)}function s(e,t){for(var n=e&&t&&e.nextSibling;n;n=n.nextSibling)if(n===t)return-1;return e?1:-1}function u(e){return function(t){var n=t.nodeName.toLowerCase();return"input"===n&&t.type===e}}function l(e){return function(t){var n=t.nodeName.toLowerCase();return("input"===n||"button"===n)&&t.type===e}}function c(e){return i(function(t){return t=+t,i(function(n,r){for(var i,o=e([],n.length,t),a=o.length;a--;)n[i=o[a]]&&(n[i]=!(r[i]=n[i]))})})}function f(e,t){var n,r,i,o,s,u,l,c=X[e+" "];if(c)return t?0:c.slice(0);for(s=e,u=[],l=C.preFilter;s;){(!n||(r=ut.exec(s)))&&(r&&(s=s.slice(r[0].length)||s),u.push(i=[])),n=!1,(r=lt.exec(s))&&(n=r.shift(),i.push({value:n,type:r[0].replace(at," ")}),s=s.slice(n.length));for(o in C.filter)!(r=pt[o].exec(s))||l[o]&&!(r=l[o](r))||(n=r.shift(),i.push({value:n,type:o,matches:r}),s=s.slice(n.length));if(!n)break}return t?s.length:s?a.error(e):X(e,u).slice(0)}function p(e){for(var t=0,n=e.length,r="";n>t;t++)r+=e[t].value;return r}function d(e,t,n){var r=t.dir,i=n&&"parentNode"===t.dir,o=I++;return t.first?function(t,n,o){for(;t=t[r];)if(1===t.nodeType||i)return e(t,n,o)}:function(t,n,a){var s,u,l,c=$+" "+o;if(a){for(;t=t[r];)if((1===t.nodeType||i)&&e(t,n,a))return!0}else for(;t=t[r];)if(1===t.nodeType||i)if(l=t[P]||(t[P]={}),(u=l[r])&&u[0]===c){if((s=u[1])===!0||s===N)return s===!0}else if(u=l[r]=[c],u[1]=e(t,n,a)||N,u[1]===!0)return!0}}function h(e){return e.length>1?function(t,n,r){for(var i=e.length;i--;)if(!e[i](t,n,r))return!1;return!0}:e[0]}function g(e,t,n,r,i){for(var o,a=[],s=0,u=e.length,l=null!=t;u>s;s++)(o=e[s])&&(!n||n(o,r,i))&&(a.push(o),l&&t.push(s));return a}function m(e,t,n,r,o,a){return r&&!r[P]&&(r=m(r)),o&&!o[P]&&(o=m(o,a)),i(function(i,a,s,u){var l,c,f,p=[],d=[],h=a.length,m=i||b(t||"*",s.nodeType?[s]:s,[]),y=!e||!i&&t?m:g(m,p,e,s,u),v=n?o||(i?e:h||r)?[]:a:y;if(n&&n(y,v,s,u),r)for(l=g(v,d),r(l,[],s,u),c=l.length;c--;)(f=l[c])&&(v[d[c]]=!(y[d[c]]=f));if(i){if(o||e){if(o){for(l=[],c=v.length;c--;)(f=v[c])&&l.push(y[c]=f);o(null,v=[],l,u)}for(c=v.length;c--;)(f=v[c])&&(l=o?Z.call(i,f):p[c])>-1&&(i[l]=!(a[l]=f))}}else v=g(v===a?v.splice(h,v.length):v),o?o(null,a,v,u):Q.apply(a,v)})}function y(e){for(var t,n,r,i=e.length,o=C.relative[e[0].type],a=o||C.relative[" "],s=o?1:0,u=d(function(e){return e===t},a,!0),l=d(function(e){return Z.call(t,e)>-1},a,!0),c=[function(e,n,r){return!o&&(r||n!==j)||((t=n).nodeType?u(e,n,r):l(e,n,r))}];i>s;s++)if(n=C.relative[e[s].type])c=[d(h(c),n)];else{if(n=C.filter[e[s].type].apply(null,e[s].matches),n[P]){for(r=++s;i>r&&!C.relative[e[r].type];r++);return m(s>1&&h(c),s>1&&p(e.slice(0,s-1)).replace(at,"$1"),n,r>s&&y(e.slice(s,r)),i>r&&y(e=e.slice(r)),i>r&&p(e))}c.push(n)}return h(c)}function v(e,t){var n=0,r=t.length>0,o=e.length>0,s=function(i,s,u,l,c){var f,p,d,h=[],m=0,y="0",v=i&&[],b=null!=c,x=j,T=i||o&&C.find.TAG("*",c&&s.parentNode||s),w=$+=null==x?1:Math.E;for(b&&(j=s!==L&&s,N=n);null!=(f=T[y]);y++){if(o&&f){for(p=0;d=e[p];p++)if(d(f,s,u)){l.push(f);break}b&&($=w,N=++n)}r&&((f=!d&&f)&&m--,i&&v.push(f))}if(m+=y,r&&y!==m){for(p=0;d=t[p];p++)d(v,h,s,u);if(i){if(m>0)for(;y--;)v[y]||h[y]||(h[y]=G.call(l));h=g(h)}Q.apply(l,h),b&&!i&&h.length>0&&m+t.length>1&&a.uniqueSort(l)}return b&&($=w,j=x),v};return r?i(s):s}function b(e,t,n){for(var r=0,i=t.length;i>r;r++)a(e,t[r],n);return n}function x(e,t,n,r){var i,o,a,s,u,l=f(e);if(!r&&1===l.length){if(o=l[0]=l[0].slice(0),o.length>2&&"ID"===(a=o[0]).type&&9===t.nodeType&&!M&&C.relative[o[1].type]){if(t=C.find.ID(a.matches[0].replace(xt,Tt),t)[0],!t)return n;e=e.slice(o.shift().value.length)}for(i=pt.needsContext.test(e)?-1:o.length-1;i>=0&&(a=o[i],!C.relative[s=a.type]);i--)if((u=C.find[s])&&(r=u(a.matches[0].replace(xt,Tt),dt.test(o[0].type)&&t.parentNode||t))){if(o.splice(i,1),e=r.length&&p(o),!e)return Q.apply(n,K.call(r,0)),n;break}}return S(e,l)(r,t,M,n,dt.test(e)),n}function T(){}var w,N,C,k,E,S,A,j,D,L,H,M,q,_,F,O,B,P="sizzle"+-new Date,R=e.document,W={},$=0,I=0,z=r(),X=r(),U=r(),V=typeof t,Y=1<<31,J=[],G=J.pop,Q=J.push,K=J.slice,Z=J.indexOf||function(e){for(var t=0,n=this.length;n>t;t++)if(this[t]===e)return t;return-1},et="[\\x20\\t\\r\\n\\f]",tt="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",nt=tt.replace("w","w#"),rt="([*^$|!~]?=)",it="\\["+et+"*("+tt+")"+et+"*(?:"+rt+et+"*(?:(['\"])((?:\\\\.|[^\\\\])*?)\\3|("+nt+")|)|)"+et+"*\\]",ot=":("+tt+")(?:\\(((['\"])((?:\\\\.|[^\\\\])*?)\\3|((?:\\\\.|[^\\\\()[\\]]|"+it.replace(3,8)+")*)|.*)\\)|)",at=RegExp("^"+et+"+|((?:^|[^\\\\])(?:\\\\.)*)"+et+"+$","g"),ut=RegExp("^"+et+"*,"+et+"*"),lt=RegExp("^"+et+"*([\\x20\\t\\r\\n\\f>+~])"+et+"*"),ct=RegExp(ot),ft=RegExp("^"+nt+"$"),pt={ID:RegExp("^#("+tt+")"),CLASS:RegExp("^\\.("+tt+")"),NAME:RegExp("^\\[name=['\"]?("+tt+")['\"]?\\]"),TAG:RegExp("^("+tt.replace("w","w*")+")"),ATTR:RegExp("^"+it),PSEUDO:RegExp("^"+ot),CHILD:RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+et+"*(even|odd|(([+-]|)(\\d*)n|)"+et+"*(?:([+-]|)"+et+"*(\\d+)|))"+et+"*\\)|)","i"),needsContext:RegExp("^"+et+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+et+"*((?:-\\d)?\\d*)"+et+"*\\)|)(?=[^-]|$)","i")},dt=/[\x20\t\r\n\f]*[+~]/,ht=/\{\s*\[native code\]\s*\}/,gt=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,mt=/^(?:input|select|textarea|button)$/i,yt=/^h\d$/i,vt=/'|\\/g,bt=/\=[\x20\t\r\n\f]*([^'"\]]*)[\x20\t\r\n\f]*\]/g,xt=/\\([\da-fA-F]{1,6}[\x20\t\r\n\f]?|.)/g,Tt=function(e,t){var n="0x"+t-65536;return n!==n?t:0>n?String.fromCharCode(n+65536):String.fromCharCode(55296|n>>10,56320|1023&n)};try{K.call(H.childNodes,0)[0].nodeType}catch(wt){K=function(e){for(var t,n=[];t=this[e];e++)n.push(t);return n}}E=a.isXML=function(e){var t=e&&(e.ownerDocument||e).documentElement;return t?"HTML"!==t.nodeName:!1},D=a.setDocument=function(e){var r=e?e.ownerDocument||e:R;return r!==L&&9===r.nodeType&&r.documentElement?(L=r,H=r.documentElement,M=E(r),W.tagNameNoComments=o(function(e){return e.appendChild(r.createComment("")),!e.getElementsByTagName("*").length}),W.attributes=o(function(e){e.innerHTML=" ";var t=typeof e.lastChild.getAttribute("multiple");return"boolean"!==t&&"string"!==t}),W.getByClassName=o(function(e){return e.innerHTML="
",e.getElementsByClassName&&e.getElementsByClassName("e").length?(e.lastChild.className="e",2===e.getElementsByClassName("e").length):!1}),W.getByName=o(function(e){e.id=P+0,e.innerHTML="
",H.insertBefore(e,H.firstChild);var t=r.getElementsByName&&r.getElementsByName(P).length===2+r.getElementsByName(P+0).length;return W.getIdNotName=!r.getElementById(P),H.removeChild(e),t}),C.attrHandle=o(function(e){return e.innerHTML=" ",e.firstChild&&typeof e.firstChild.getAttribute!==V&&"#"===e.firstChild.getAttribute("href")})?{}:{href:function(e){return e.getAttribute("href",2)},type:function(e){return e.getAttribute("type")}},W.getIdNotName?(C.find.ID=function(e,t){if(typeof t.getElementById!==V&&!M){var n=t.getElementById(e);return n&&n.parentNode?[n]:[]}},C.filter.ID=function(e){var t=e.replace(xt,Tt);return function(e){return e.getAttribute("id")===t}}):(C.find.ID=function(e,n){if(typeof n.getElementById!==V&&!M){var r=n.getElementById(e);return r?r.id===e||typeof r.getAttributeNode!==V&&r.getAttributeNode("id").value===e?[r]:t:[]}},C.filter.ID=function(e){var t=e.replace(xt,Tt);return function(e){var n=typeof e.getAttributeNode!==V&&e.getAttributeNode("id");return n&&n.value===t}}),C.find.TAG=W.tagNameNoComments?function(e,n){return typeof n.getElementsByTagName!==V?n.getElementsByTagName(e):t}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){for(;n=o[i];i++)1===n.nodeType&&r.push(n);return r}return o},C.find.NAME=W.getByName&&function(e,n){return typeof n.getElementsByName!==V?n.getElementsByName(name):t},C.find.CLASS=W.getByClassName&&function(e,n){return typeof n.getElementsByClassName===V||M?t:n.getElementsByClassName(e)},_=[],q=[":focus"],(W.qsa=n(r.querySelectorAll))&&(o(function(e){e.innerHTML=" ",e.querySelectorAll("[selected]").length||q.push("\\["+et+"*(?:checked|disabled|ismap|multiple|readonly|selected|value)"),e.querySelectorAll(":checked").length||q.push(":checked")}),o(function(e){e.innerHTML=" ",e.querySelectorAll("[i^='']").length&&q.push("[*^$]="+et+"*(?:\"\"|'')"),e.querySelectorAll(":enabled").length||q.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),q.push(",.*:")})),(W.matchesSelector=n(F=H.matchesSelector||H.mozMatchesSelector||H.webkitMatchesSelector||H.oMatchesSelector||H.msMatchesSelector))&&o(function(e){W.disconnectedMatch=F.call(e,"div"),F.call(e,"[s!='']:x"),_.push("!=",ot)}),q=RegExp(q.join("|")),_=RegExp(_.join("|")),O=n(H.contains)||H.compareDocumentPosition?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)for(;t=t.parentNode;)if(t===e)return!0;return!1},B=H.compareDocumentPosition?function(e,t){var n;return e===t?(A=!0,0):(n=t.compareDocumentPosition&&e.compareDocumentPosition&&e.compareDocumentPosition(t))?1&n||e.parentNode&&11===e.parentNode.nodeType?e===r||O(R,e)?-1:t===r||O(R,t)?1:0:4&n?-1:1:e.compareDocumentPosition?-1:1}:function(e,t){var n,i=0,o=e.parentNode,a=t.parentNode,u=[e],l=[t];if(e===t)return A=!0,0;if(e.sourceIndex&&t.sourceIndex)return(~t.sourceIndex||Y)-(O(R,e)&&~e.sourceIndex||Y);if(!o||!a)return e===r?-1:t===r?1:o?-1:a?1:0;if(o===a)return s(e,t);for(n=e;n=n.parentNode;)u.unshift(n);for(n=t;n=n.parentNode;)l.unshift(n);for(;u[i]===l[i];)i++;return i?s(u[i],l[i]):u[i]===R?-1:l[i]===R?1:0},A=!1,[0,0].sort(B),W.detectDuplicates=A,L):L},a.matches=function(e,t){return a(e,null,null,t)},a.matchesSelector=function(e,t){if((e.ownerDocument||e)!==L&&D(e),t=t.replace(bt,"='$1']"),!(!W.matchesSelector||M||_&&_.test(t)||q.test(t)))try{var n=F.call(e,t);if(n||W.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(r){}return a(t,L,null,[e]).length>0},a.contains=function(e,t){return(e.ownerDocument||e)!==L&&D(e),O(e,t)},a.attr=function(e,t){var n;return(e.ownerDocument||e)!==L&&D(e),M||(t=t.toLowerCase()),(n=C.attrHandle[t])?n(e):M||W.attributes?e.getAttribute(t):((n=e.getAttributeNode(t))||e.getAttribute(t))&&e[t]===!0?t:n&&n.specified?n.value:null},a.error=function(e){throw Error("Syntax error, unrecognized expression: "+e)},a.uniqueSort=function(e){var t,n=[],r=1,i=0;if(A=!W.detectDuplicates,e.sort(B),A){for(;t=e[r];r++)t===e[r-1]&&(i=n.push(r));for(;i--;)e.splice(n[i],1)}return e},k=a.getText=function(e){var t,n="",r=0,i=e.nodeType;if(i){if(1===i||9===i||11===i){if("string"==typeof e.textContent)return e.textContent;for(e=e.firstChild;e;e=e.nextSibling)n+=k(e)}else if(3===i||4===i)return e.nodeValue}else for(;t=e[r];r++)n+=k(t);return n},C=a.selectors={cacheLength:50,createPseudo:i,match:pt,find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(xt,Tt),e[3]=(e[4]||e[5]||"").replace(xt,Tt),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||a.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&a.error(e[0]),e},PSEUDO:function(e){var t,n=!e[5]&&e[2];return pt.CHILD.test(e[0])?null:(e[4]?e[2]=e[4]:n&&ct.test(n)&&(t=f(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){return"*"===e?function(){return!0}:(e=e.replace(xt,Tt).toLowerCase(),function(t){return t.nodeName&&t.nodeName.toLowerCase()===e})},CLASS:function(e){var t=z[e+" "];return t||(t=RegExp("(^|"+et+")"+e+"("+et+"|$)"))&&z(e,function(e){return t.test(e.className||typeof e.getAttribute!==V&&e.getAttribute("class")||"")})},ATTR:function(e,t,n){return function(r){var i=a.attr(r,e);return null==i?"!="===t:t?(i+="","="===t?i===n:"!="===t?i!==n:"^="===t?n&&0===i.indexOf(n):"*="===t?n&&i.indexOf(n)>-1:"$="===t?n&&i.substr(i.length-n.length)===n:"~="===t?(" "+i+" ").indexOf(n)>-1:"|="===t?i===n||i.substr(0,n.length+1)===n+"-":!1):!0}},CHILD:function(e,t,n,r,i){var o="nth"!==e.slice(0,3),a="last"!==e.slice(-4),s="of-type"===t;return 1===r&&0===i?function(e){return!!e.parentNode}:function(t,n,u){var l,c,f,p,d,h,g=o!==a?"nextSibling":"previousSibling",m=t.parentNode,y=s&&t.nodeName.toLowerCase(),v=!u&&!s;if(m){if(o){for(;g;){for(f=t;f=f[g];)if(s?f.nodeName.toLowerCase()===y:1===f.nodeType)return!1;h=g="only"===e&&!h&&"nextSibling"}return!0}if(h=[a?m.firstChild:m.lastChild],a&&v){for(c=m[P]||(m[P]={}),l=c[e]||[],d=l[0]===$&&l[1],p=l[0]===$&&l[2],f=d&&m.childNodes[d];f=++d&&f&&f[g]||(p=d=0)||h.pop();)if(1===f.nodeType&&++p&&f===t){c[e]=[$,d,p];break}}else if(v&&(l=(t[P]||(t[P]={}))[e])&&l[0]===$)p=l[1];else for(;(f=++d&&f&&f[g]||(p=d=0)||h.pop())&&((s?f.nodeName.toLowerCase()!==y:1!==f.nodeType)||!++p||(v&&((f[P]||(f[P]={}))[e]=[$,p]),f!==t)););return p-=i,p===r||0===p%r&&p/r>=0}}},PSEUDO:function(e,t){var n,r=C.pseudos[e]||C.setFilters[e.toLowerCase()]||a.error("unsupported pseudo: "+e);return r[P]?r(t):r.length>1?(n=[e,e,"",t],C.setFilters.hasOwnProperty(e.toLowerCase())?i(function(e,n){for(var i,o=r(e,t),a=o.length;a--;)i=Z.call(e,o[a]),e[i]=!(n[i]=o[a])}):function(e){return r(e,0,n)}):r}},pseudos:{not:i(function(e){var t=[],n=[],r=S(e.replace(at,"$1"));return r[P]?i(function(e,t,n,i){for(var o,a=r(e,null,i,[]),s=e.length;s--;)(o=a[s])&&(e[s]=!(t[s]=o))}):function(e,i,o){return t[0]=e,r(t,null,o,n),!n.pop()}}),has:i(function(e){return function(t){return a(e,t).length>0}}),contains:i(function(e){return function(t){return(t.textContent||t.innerText||k(t)).indexOf(e)>-1}}),lang:i(function(e){return ft.test(e||"")||a.error("unsupported lang: "+e),e=e.replace(xt,Tt).toLowerCase(),function(t){var n;do if(n=M?t.getAttribute("xml:lang")||t.getAttribute("lang"):t.lang)return n=n.toLowerCase(),n===e||0===n.indexOf(e+"-");while((t=t.parentNode)&&1===t.nodeType);return!1}}),target:function(t){var n=e.location&&e.location.hash;return n&&n.slice(1)===t.id},root:function(e){return e===H},focus:function(e){return e===L.activeElement&&(!L.hasFocus||L.hasFocus())&&!!(e.type||e.href||~e.tabIndex)},enabled:function(e){return e.disabled===!1},disabled:function(e){return e.disabled===!0},checked:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&!!e.checked||"option"===t&&!!e.selected},selected:function(e){return e.parentNode&&e.parentNode.selectedIndex,e.selected===!0},empty:function(e){for(e=e.firstChild;e;e=e.nextSibling)if(e.nodeName>"@"||3===e.nodeType||4===e.nodeType)return!1;return!0},parent:function(e){return!C.pseudos.empty(e)},header:function(e){return yt.test(e.nodeName)},input:function(e){return mt.test(e.nodeName)},button:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&"button"===e.type||"button"===t},text:function(e){var t;return"input"===e.nodeName.toLowerCase()&&"text"===e.type&&(null==(t=e.getAttribute("type"))||t.toLowerCase()===e.type)},first:c(function(){return[0]}),last:c(function(e,t){return[t-1]}),eq:c(function(e,t,n){return[0>n?n+t:n]}),even:c(function(e,t){for(var n=0;t>n;n+=2)e.push(n);return e}),odd:c(function(e,t){for(var n=1;t>n;n+=2)e.push(n);return e}),lt:c(function(e,t,n){for(var r=0>n?n+t:n;--r>=0;)e.push(r);return e}),gt:c(function(e,t,n){for(var r=0>n?n+t:n;t>++r;)e.push(r);return e})}};for(w in{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})C.pseudos[w]=u(w);for(w in{submit:!0,reset:!0})C.pseudos[w]=l(w);S=a.compile=function(e,t){var n,r=[],i=[],o=U[e+" "];if(!o){for(t||(t=f(e)),n=t.length;n--;)o=y(t[n]),o[P]?r.push(o):i.push(o);o=U(e,v(i,r))}return o},C.pseudos.nth=C.pseudos.eq,C.filters=T.prototype=C.pseudos,C.setFilters=new T,D(),a.attr=st.attr,st.find=a,st.expr=a.selectors,st.expr[":"]=st.expr.pseudos,st.unique=a.uniqueSort,st.text=a.getText,st.isXMLDoc=a.isXML,st.contains=a.contains}(e);var Pt=/Until$/,Rt=/^(?:parents|prev(?:Until|All))/,Wt=/^.[^:#\[\.,]*$/,$t=st.expr.match.needsContext,It={children:!0,contents:!0,next:!0,prev:!0};st.fn.extend({find:function(e){var t,n,r;if("string"!=typeof e)return r=this,this.pushStack(st(e).filter(function(){for(t=0;r.length>t;t++)if(st.contains(r[t],this))return!0}));for(n=[],t=0;this.length>t;t++)st.find(e,this[t],n);return n=this.pushStack(st.unique(n)),n.selector=(this.selector?this.selector+" ":"")+e,n},has:function(e){var t,n=st(e,this),r=n.length;return this.filter(function(){for(t=0;r>t;t++)if(st.contains(this,n[t]))return!0})},not:function(e){return this.pushStack(f(this,e,!1))},filter:function(e){return this.pushStack(f(this,e,!0))},is:function(e){return!!e&&("string"==typeof e?$t.test(e)?st(e,this.context).index(this[0])>=0:st.filter(e,this).length>0:this.filter(e).length>0)},closest:function(e,t){for(var n,r=0,i=this.length,o=[],a=$t.test(e)||"string"!=typeof e?st(e,t||this.context):0;i>r;r++)for(n=this[r];n&&n.ownerDocument&&n!==t&&11!==n.nodeType;){if(a?a.index(n)>-1:st.find.matchesSelector(n,e)){o.push(n);break}n=n.parentNode}return this.pushStack(o.length>1?st.unique(o):o)},index:function(e){return e?"string"==typeof e?st.inArray(this[0],st(e)):st.inArray(e.jquery?e[0]:e,this):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(e,t){var n="string"==typeof e?st(e,t):st.makeArray(e&&e.nodeType?[e]:e),r=st.merge(this.get(),n);return this.pushStack(st.unique(r))},addBack:function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}}),st.fn.andSelf=st.fn.addBack,st.each({parent:function(e){var t=e.parentNode;return t&&11!==t.nodeType?t:null},parents:function(e){return st.dir(e,"parentNode")},parentsUntil:function(e,t,n){return st.dir(e,"parentNode",n)},next:function(e){return c(e,"nextSibling")},prev:function(e){return c(e,"previousSibling")
+},nextAll:function(e){return st.dir(e,"nextSibling")},prevAll:function(e){return st.dir(e,"previousSibling")},nextUntil:function(e,t,n){return st.dir(e,"nextSibling",n)},prevUntil:function(e,t,n){return st.dir(e,"previousSibling",n)},siblings:function(e){return st.sibling((e.parentNode||{}).firstChild,e)},children:function(e){return st.sibling(e.firstChild)},contents:function(e){return st.nodeName(e,"iframe")?e.contentDocument||e.contentWindow.document:st.merge([],e.childNodes)}},function(e,t){st.fn[e]=function(n,r){var i=st.map(this,t,n);return Pt.test(e)||(r=n),r&&"string"==typeof r&&(i=st.filter(r,i)),i=this.length>1&&!It[e]?st.unique(i):i,this.length>1&&Rt.test(e)&&(i=i.reverse()),this.pushStack(i)}}),st.extend({filter:function(e,t,n){return n&&(e=":not("+e+")"),1===t.length?st.find.matchesSelector(t[0],e)?[t[0]]:[]:st.find.matches(e,t)},dir:function(e,n,r){for(var i=[],o=e[n];o&&9!==o.nodeType&&(r===t||1!==o.nodeType||!st(o).is(r));)1===o.nodeType&&i.push(o),o=o[n];return i},sibling:function(e,t){for(var n=[];e;e=e.nextSibling)1===e.nodeType&&e!==t&&n.push(e);return n}});var zt="abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",Xt=/ jQuery\d+="(?:null|\d+)"/g,Ut=RegExp("<(?:"+zt+")[\\s/>]","i"),Vt=/^\s+/,Yt=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,Jt=/<([\w:]+)/,Gt=/\s*$/g,on={option:[1,""," "],legend:[1,""," "],area:[1,""," "],param:[1,""," "],thead:[1,""],tr:[2,""],col:[2,""],td:[3,""],_default:st.support.htmlSerialize?[0,"",""]:[1,"X","
"]},an=p(V),sn=an.appendChild(V.createElement("div"));on.optgroup=on.option,on.tbody=on.tfoot=on.colgroup=on.caption=on.thead,on.th=on.td,st.fn.extend({text:function(e){return st.access(this,function(e){return e===t?st.text(this):this.empty().append((this[0]&&this[0].ownerDocument||V).createTextNode(e))},null,e,arguments.length)},wrapAll:function(e){if(st.isFunction(e))return this.each(function(t){st(this).wrapAll(e.call(this,t))});if(this[0]){var t=st(e,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&t.insertBefore(this[0]),t.map(function(){for(var e=this;e.firstChild&&1===e.firstChild.nodeType;)e=e.firstChild;return e}).append(this)}return this},wrapInner:function(e){return st.isFunction(e)?this.each(function(t){st(this).wrapInner(e.call(this,t))}):this.each(function(){var t=st(this),n=t.contents();n.length?n.wrapAll(e):t.append(e)})},wrap:function(e){var t=st.isFunction(e);return this.each(function(n){st(this).wrapAll(t?e.call(this,n):e)})},unwrap:function(){return this.parent().each(function(){st.nodeName(this,"body")||st(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,!0,function(e){(1===this.nodeType||11===this.nodeType||9===this.nodeType)&&this.appendChild(e)})},prepend:function(){return this.domManip(arguments,!0,function(e){(1===this.nodeType||11===this.nodeType||9===this.nodeType)&&this.insertBefore(e,this.firstChild)})},before:function(){return this.domManip(arguments,!1,function(e){this.parentNode&&this.parentNode.insertBefore(e,this)})},after:function(){return this.domManip(arguments,!1,function(e){this.parentNode&&this.parentNode.insertBefore(e,this.nextSibling)})},remove:function(e,t){for(var n,r=0;null!=(n=this[r]);r++)(!e||st.filter(e,[n]).length>0)&&(t||1!==n.nodeType||st.cleanData(b(n)),n.parentNode&&(t&&st.contains(n.ownerDocument,n)&&m(b(n,"script")),n.parentNode.removeChild(n)));return this},empty:function(){for(var e,t=0;null!=(e=this[t]);t++){for(1===e.nodeType&&st.cleanData(b(e,!1));e.firstChild;)e.removeChild(e.firstChild);e.options&&st.nodeName(e,"select")&&(e.options.length=0)}return this},clone:function(e,t){return e=null==e?!1:e,t=null==t?e:t,this.map(function(){return st.clone(this,e,t)})},html:function(e){return st.access(this,function(e){var n=this[0]||{},r=0,i=this.length;if(e===t)return 1===n.nodeType?n.innerHTML.replace(Xt,""):t;if(!("string"!=typeof e||Kt.test(e)||!st.support.htmlSerialize&&Ut.test(e)||!st.support.leadingWhitespace&&Vt.test(e)||on[(Jt.exec(e)||["",""])[1].toLowerCase()])){e=e.replace(Yt,"<$1>$2>");try{for(;i>r;r++)n=this[r]||{},1===n.nodeType&&(st.cleanData(b(n,!1)),n.innerHTML=e);n=0}catch(o){}}n&&this.empty().append(e)},null,e,arguments.length)},replaceWith:function(e){var t=st.isFunction(e);return t||"string"==typeof e||(e=st(e).not(this).detach()),this.domManip([e],!0,function(e){var t=this.nextSibling,n=this.parentNode;(n&&1===this.nodeType||11===this.nodeType)&&(st(this).remove(),t?t.parentNode.insertBefore(e,t):n.appendChild(e))})},detach:function(e){return this.remove(e,!0)},domManip:function(e,n,r){e=et.apply([],e);var i,o,a,s,u,l,c=0,f=this.length,p=this,m=f-1,y=e[0],v=st.isFunction(y);if(v||!(1>=f||"string"!=typeof y||st.support.checkClone)&&en.test(y))return this.each(function(i){var o=p.eq(i);v&&(e[0]=y.call(this,i,n?o.html():t)),o.domManip(e,n,r)});if(f&&(i=st.buildFragment(e,this[0].ownerDocument,!1,this),o=i.firstChild,1===i.childNodes.length&&(i=o),o)){for(n=n&&st.nodeName(o,"tr"),a=st.map(b(i,"script"),h),s=a.length;f>c;c++)u=i,c!==m&&(u=st.clone(u,!0,!0),s&&st.merge(a,b(u,"script"))),r.call(n&&st.nodeName(this[c],"table")?d(this[c],"tbody"):this[c],u,c);if(s)for(l=a[a.length-1].ownerDocument,st.map(a,g),c=0;s>c;c++)u=a[c],tn.test(u.type||"")&&!st._data(u,"globalEval")&&st.contains(l,u)&&(u.src?st.ajax({url:u.src,type:"GET",dataType:"script",async:!1,global:!1,"throws":!0}):st.globalEval((u.text||u.textContent||u.innerHTML||"").replace(rn,"")));i=o=null}return this}}),st.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(e,t){st.fn[e]=function(e){for(var n,r=0,i=[],o=st(e),a=o.length-1;a>=r;r++)n=r===a?this:this.clone(!0),st(o[r])[t](n),tt.apply(i,n.get());return this.pushStack(i)}}),st.extend({clone:function(e,t,n){var r,i,o,a,s,u=st.contains(e.ownerDocument,e);if(st.support.html5Clone||st.isXMLDoc(e)||!Ut.test("<"+e.nodeName+">")?s=e.cloneNode(!0):(sn.innerHTML=e.outerHTML,sn.removeChild(s=sn.firstChild)),!(st.support.noCloneEvent&&st.support.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||st.isXMLDoc(e)))for(r=b(s),i=b(e),a=0;null!=(o=i[a]);++a)r[a]&&v(o,r[a]);if(t)if(n)for(i=i||b(e),r=r||b(s),a=0;null!=(o=i[a]);a++)y(o,r[a]);else y(e,s);return r=b(s,"script"),r.length>0&&m(r,!u&&b(e,"script")),r=i=o=null,s},buildFragment:function(e,t,n,r){for(var i,o,a,s,u,l,c,f=e.length,d=p(t),h=[],g=0;f>g;g++)if(o=e[g],o||0===o)if("object"===st.type(o))st.merge(h,o.nodeType?[o]:o);else if(Qt.test(o)){for(s=s||d.appendChild(t.createElement("div")),a=(Jt.exec(o)||["",""])[1].toLowerCase(),u=on[a]||on._default,s.innerHTML=u[1]+o.replace(Yt,"<$1>$2>")+u[2],c=u[0];c--;)s=s.lastChild;if(!st.support.leadingWhitespace&&Vt.test(o)&&h.push(t.createTextNode(Vt.exec(o)[0])),!st.support.tbody)for(o="table"!==a||Gt.test(o)?""!==u[1]||Gt.test(o)?0:s:s.firstChild,c=o&&o.childNodes.length;c--;)st.nodeName(l=o.childNodes[c],"tbody")&&!l.childNodes.length&&o.removeChild(l);for(st.merge(h,s.childNodes),s.textContent="";s.firstChild;)s.removeChild(s.firstChild);s=d.lastChild}else h.push(t.createTextNode(o));for(s&&d.removeChild(s),st.support.appendChecked||st.grep(b(h,"input"),x),g=0;o=h[g++];)if((!r||-1===st.inArray(o,r))&&(i=st.contains(o.ownerDocument,o),s=b(d.appendChild(o),"script"),i&&m(s),n))for(c=0;o=s[c++];)tn.test(o.type||"")&&n.push(o);return s=null,d},cleanData:function(e,n){for(var r,i,o,a,s=0,u=st.expando,l=st.cache,c=st.support.deleteExpando,f=st.event.special;null!=(o=e[s]);s++)if((n||st.acceptData(o))&&(i=o[u],r=i&&l[i])){if(r.events)for(a in r.events)f[a]?st.event.remove(o,a):st.removeEvent(o,a,r.handle);l[i]&&(delete l[i],c?delete o[u]:o.removeAttribute!==t?o.removeAttribute(u):o[u]=null,K.push(i))}}});var un,ln,cn,fn=/alpha\([^)]*\)/i,pn=/opacity\s*=\s*([^)]*)/,dn=/^(top|right|bottom|left)$/,hn=/^(none|table(?!-c[ea]).+)/,gn=/^margin/,mn=RegExp("^("+ut+")(.*)$","i"),yn=RegExp("^("+ut+")(?!px)[a-z%]+$","i"),vn=RegExp("^([+-])=("+ut+")","i"),bn={BODY:"block"},xn={position:"absolute",visibility:"hidden",display:"block"},Tn={letterSpacing:0,fontWeight:400},wn=["Top","Right","Bottom","Left"],Nn=["Webkit","O","Moz","ms"];st.fn.extend({css:function(e,n){return st.access(this,function(e,n,r){var i,o,a={},s=0;if(st.isArray(n)){for(i=ln(e),o=n.length;o>s;s++)a[n[s]]=st.css(e,n[s],!1,i);return a}return r!==t?st.style(e,n,r):st.css(e,n)},e,n,arguments.length>1)},show:function(){return N(this,!0)},hide:function(){return N(this)},toggle:function(e){var t="boolean"==typeof e;return this.each(function(){(t?e:w(this))?st(this).show():st(this).hide()})}}),st.extend({cssHooks:{opacity:{get:function(e,t){if(t){var n=un(e,"opacity");return""===n?"1":n}}}},cssNumber:{columnCount:!0,fillOpacity:!0,fontWeight:!0,lineHeight:!0,opacity:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":st.support.cssFloat?"cssFloat":"styleFloat"},style:function(e,n,r,i){if(e&&3!==e.nodeType&&8!==e.nodeType&&e.style){var o,a,s,u=st.camelCase(n),l=e.style;if(n=st.cssProps[u]||(st.cssProps[u]=T(l,u)),s=st.cssHooks[n]||st.cssHooks[u],r===t)return s&&"get"in s&&(o=s.get(e,!1,i))!==t?o:l[n];if(a=typeof r,"string"===a&&(o=vn.exec(r))&&(r=(o[1]+1)*o[2]+parseFloat(st.css(e,n)),a="number"),!(null==r||"number"===a&&isNaN(r)||("number"!==a||st.cssNumber[u]||(r+="px"),st.support.clearCloneStyle||""!==r||0!==n.indexOf("background")||(l[n]="inherit"),s&&"set"in s&&(r=s.set(e,r,i))===t)))try{l[n]=r}catch(c){}}},css:function(e,n,r,i){var o,a,s,u=st.camelCase(n);return n=st.cssProps[u]||(st.cssProps[u]=T(e.style,u)),s=st.cssHooks[n]||st.cssHooks[u],s&&"get"in s&&(o=s.get(e,!0,r)),o===t&&(o=un(e,n,i)),"normal"===o&&n in Tn&&(o=Tn[n]),r?(a=parseFloat(o),r===!0||st.isNumeric(a)?a||0:o):o},swap:function(e,t,n,r){var i,o,a={};for(o in t)a[o]=e.style[o],e.style[o]=t[o];i=n.apply(e,r||[]);for(o in t)e.style[o]=a[o];return i}}),e.getComputedStyle?(ln=function(t){return e.getComputedStyle(t,null)},un=function(e,n,r){var i,o,a,s=r||ln(e),u=s?s.getPropertyValue(n)||s[n]:t,l=e.style;return s&&(""!==u||st.contains(e.ownerDocument,e)||(u=st.style(e,n)),yn.test(u)&&gn.test(n)&&(i=l.width,o=l.minWidth,a=l.maxWidth,l.minWidth=l.maxWidth=l.width=u,u=s.width,l.width=i,l.minWidth=o,l.maxWidth=a)),u}):V.documentElement.currentStyle&&(ln=function(e){return e.currentStyle},un=function(e,n,r){var i,o,a,s=r||ln(e),u=s?s[n]:t,l=e.style;return null==u&&l&&l[n]&&(u=l[n]),yn.test(u)&&!dn.test(n)&&(i=l.left,o=e.runtimeStyle,a=o&&o.left,a&&(o.left=e.currentStyle.left),l.left="fontSize"===n?"1em":u,u=l.pixelLeft+"px",l.left=i,a&&(o.left=a)),""===u?"auto":u}),st.each(["height","width"],function(e,n){st.cssHooks[n]={get:function(e,r,i){return r?0===e.offsetWidth&&hn.test(st.css(e,"display"))?st.swap(e,xn,function(){return E(e,n,i)}):E(e,n,i):t},set:function(e,t,r){var i=r&&ln(e);return C(e,t,r?k(e,n,r,st.support.boxSizing&&"border-box"===st.css(e,"boxSizing",!1,i),i):0)}}}),st.support.opacity||(st.cssHooks.opacity={get:function(e,t){return pn.test((t&&e.currentStyle?e.currentStyle.filter:e.style.filter)||"")?.01*parseFloat(RegExp.$1)+"":t?"1":""},set:function(e,t){var n=e.style,r=e.currentStyle,i=st.isNumeric(t)?"alpha(opacity="+100*t+")":"",o=r&&r.filter||n.filter||"";n.zoom=1,(t>=1||""===t)&&""===st.trim(o.replace(fn,""))&&n.removeAttribute&&(n.removeAttribute("filter"),""===t||r&&!r.filter)||(n.filter=fn.test(o)?o.replace(fn,i):o+" "+i)}}),st(function(){st.support.reliableMarginRight||(st.cssHooks.marginRight={get:function(e,n){return n?st.swap(e,{display:"inline-block"},un,[e,"marginRight"]):t}}),!st.support.pixelPosition&&st.fn.position&&st.each(["top","left"],function(e,n){st.cssHooks[n]={get:function(e,r){return r?(r=un(e,n),yn.test(r)?st(e).position()[n]+"px":r):t}}})}),st.expr&&st.expr.filters&&(st.expr.filters.hidden=function(e){return 0===e.offsetWidth&&0===e.offsetHeight||!st.support.reliableHiddenOffsets&&"none"===(e.style&&e.style.display||st.css(e,"display"))},st.expr.filters.visible=function(e){return!st.expr.filters.hidden(e)}),st.each({margin:"",padding:"",border:"Width"},function(e,t){st.cssHooks[e+t]={expand:function(n){for(var r=0,i={},o="string"==typeof n?n.split(" "):[n];4>r;r++)i[e+wn[r]+t]=o[r]||o[r-2]||o[0];return i}},gn.test(e)||(st.cssHooks[e+t].set=C)});var Cn=/%20/g,kn=/\[\]$/,En=/\r?\n/g,Sn=/^(?:submit|button|image|reset)$/i,An=/^(?:input|select|textarea|keygen)/i;st.fn.extend({serialize:function(){return st.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var e=st.prop(this,"elements");return e?st.makeArray(e):this}).filter(function(){var e=this.type;return this.name&&!st(this).is(":disabled")&&An.test(this.nodeName)&&!Sn.test(e)&&(this.checked||!Zt.test(e))}).map(function(e,t){var n=st(this).val();return null==n?null:st.isArray(n)?st.map(n,function(e){return{name:t.name,value:e.replace(En,"\r\n")}}):{name:t.name,value:n.replace(En,"\r\n")}}).get()}}),st.param=function(e,n){var r,i=[],o=function(e,t){t=st.isFunction(t)?t():null==t?"":t,i[i.length]=encodeURIComponent(e)+"="+encodeURIComponent(t)};if(n===t&&(n=st.ajaxSettings&&st.ajaxSettings.traditional),st.isArray(e)||e.jquery&&!st.isPlainObject(e))st.each(e,function(){o(this.name,this.value)});else for(r in e)j(r,e[r],n,o);return i.join("&").replace(Cn,"+")};var jn,Dn,Ln=st.now(),Hn=/\?/,Mn=/#.*$/,qn=/([?&])_=[^&]*/,_n=/^(.*?):[ \t]*([^\r\n]*)\r?$/gm,Fn=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,On=/^(?:GET|HEAD)$/,Bn=/^\/\//,Pn=/^([\w.+-]+:)(?:\/\/([^\/?#:]*)(?::(\d+)|)|)/,Rn=st.fn.load,Wn={},$n={},In="*/".concat("*");try{Dn=Y.href}catch(zn){Dn=V.createElement("a"),Dn.href="",Dn=Dn.href}jn=Pn.exec(Dn.toLowerCase())||[],st.fn.load=function(e,n,r){if("string"!=typeof e&&Rn)return Rn.apply(this,arguments);var i,o,a,s=this,u=e.indexOf(" ");return u>=0&&(i=e.slice(u,e.length),e=e.slice(0,u)),st.isFunction(n)?(r=n,n=t):n&&"object"==typeof n&&(o="POST"),s.length>0&&st.ajax({url:e,type:o,dataType:"html",data:n}).done(function(e){a=arguments,s.html(i?st("").append(st.parseHTML(e)).find(i):e)}).complete(r&&function(e,t){s.each(r,a||[e.responseText,t,e])}),this},st.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){st.fn[t]=function(e){return this.on(t,e)}}),st.each(["get","post"],function(e,n){st[n]=function(e,r,i,o){return st.isFunction(r)&&(o=o||i,i=r,r=t),st.ajax({url:e,type:n,dataType:o,data:r,success:i})}}),st.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:Dn,type:"GET",isLocal:Fn.test(jn[1]),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":In,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText"},converters:{"* text":e.String,"text html":!0,"text json":st.parseJSON,"text xml":st.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(e,t){return t?H(H(e,st.ajaxSettings),t):H(st.ajaxSettings,e)},ajaxPrefilter:D(Wn),ajaxTransport:D($n),ajax:function(e,n){function r(e,n,r,s){var l,f,v,b,T,N=n;2!==x&&(x=2,u&&clearTimeout(u),i=t,a=s||"",w.readyState=e>0?4:0,r&&(b=M(p,w,r)),e>=200&&300>e||304===e?(p.ifModified&&(T=w.getResponseHeader("Last-Modified"),T&&(st.lastModified[o]=T),T=w.getResponseHeader("etag"),T&&(st.etag[o]=T)),304===e?(l=!0,N="notmodified"):(l=q(p,b),N=l.state,f=l.data,v=l.error,l=!v)):(v=N,(e||!N)&&(N="error",0>e&&(e=0))),w.status=e,w.statusText=(n||N)+"",l?g.resolveWith(d,[f,N,w]):g.rejectWith(d,[w,N,v]),w.statusCode(y),y=t,c&&h.trigger(l?"ajaxSuccess":"ajaxError",[w,p,l?f:v]),m.fireWith(d,[w,N]),c&&(h.trigger("ajaxComplete",[w,p]),--st.active||st.event.trigger("ajaxStop")))}"object"==typeof e&&(n=e,e=t),n=n||{};var i,o,a,s,u,l,c,f,p=st.ajaxSetup({},n),d=p.context||p,h=p.context&&(d.nodeType||d.jquery)?st(d):st.event,g=st.Deferred(),m=st.Callbacks("once memory"),y=p.statusCode||{},v={},b={},x=0,T="canceled",w={readyState:0,getResponseHeader:function(e){var t;if(2===x){if(!s)for(s={};t=_n.exec(a);)s[t[1].toLowerCase()]=t[2];t=s[e.toLowerCase()]}return null==t?null:t},getAllResponseHeaders:function(){return 2===x?a:null},setRequestHeader:function(e,t){var n=e.toLowerCase();return x||(e=b[n]=b[n]||e,v[e]=t),this},overrideMimeType:function(e){return x||(p.mimeType=e),this},statusCode:function(e){var t;if(e)if(2>x)for(t in e)y[t]=[y[t],e[t]];else w.always(e[w.status]);return this},abort:function(e){var t=e||T;return i&&i.abort(t),r(0,t),this}};if(g.promise(w).complete=m.add,w.success=w.done,w.error=w.fail,p.url=((e||p.url||Dn)+"").replace(Mn,"").replace(Bn,jn[1]+"//"),p.type=n.method||n.type||p.method||p.type,p.dataTypes=st.trim(p.dataType||"*").toLowerCase().match(lt)||[""],null==p.crossDomain&&(l=Pn.exec(p.url.toLowerCase()),p.crossDomain=!(!l||l[1]===jn[1]&&l[2]===jn[2]&&(l[3]||("http:"===l[1]?80:443))==(jn[3]||("http:"===jn[1]?80:443)))),p.data&&p.processData&&"string"!=typeof p.data&&(p.data=st.param(p.data,p.traditional)),L(Wn,p,n,w),2===x)return w;c=p.global,c&&0===st.active++&&st.event.trigger("ajaxStart"),p.type=p.type.toUpperCase(),p.hasContent=!On.test(p.type),o=p.url,p.hasContent||(p.data&&(o=p.url+=(Hn.test(o)?"&":"?")+p.data,delete p.data),p.cache===!1&&(p.url=qn.test(o)?o.replace(qn,"$1_="+Ln++):o+(Hn.test(o)?"&":"?")+"_="+Ln++)),p.ifModified&&(st.lastModified[o]&&w.setRequestHeader("If-Modified-Since",st.lastModified[o]),st.etag[o]&&w.setRequestHeader("If-None-Match",st.etag[o])),(p.data&&p.hasContent&&p.contentType!==!1||n.contentType)&&w.setRequestHeader("Content-Type",p.contentType),w.setRequestHeader("Accept",p.dataTypes[0]&&p.accepts[p.dataTypes[0]]?p.accepts[p.dataTypes[0]]+("*"!==p.dataTypes[0]?", "+In+"; q=0.01":""):p.accepts["*"]);for(f in p.headers)w.setRequestHeader(f,p.headers[f]);if(p.beforeSend&&(p.beforeSend.call(d,w,p)===!1||2===x))return w.abort();T="abort";for(f in{success:1,error:1,complete:1})w[f](p[f]);if(i=L($n,p,n,w)){w.readyState=1,c&&h.trigger("ajaxSend",[w,p]),p.async&&p.timeout>0&&(u=setTimeout(function(){w.abort("timeout")},p.timeout));try{x=1,i.send(v,r)}catch(N){if(!(2>x))throw N;r(-1,N)}}else r(-1,"No Transport");return w},getScript:function(e,n){return st.get(e,t,n,"script")},getJSON:function(e,t,n){return st.get(e,t,n,"json")}}),st.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/(?:java|ecma)script/},converters:{"text script":function(e){return st.globalEval(e),e}}}),st.ajaxPrefilter("script",function(e){e.cache===t&&(e.cache=!1),e.crossDomain&&(e.type="GET",e.global=!1)}),st.ajaxTransport("script",function(e){if(e.crossDomain){var n,r=V.head||st("head")[0]||V.documentElement;return{send:function(t,i){n=V.createElement("script"),n.async=!0,e.scriptCharset&&(n.charset=e.scriptCharset),n.src=e.url,n.onload=n.onreadystatechange=function(e,t){(t||!n.readyState||/loaded|complete/.test(n.readyState))&&(n.onload=n.onreadystatechange=null,n.parentNode&&n.parentNode.removeChild(n),n=null,t||i(200,"success"))},r.insertBefore(n,r.firstChild)},abort:function(){n&&n.onload(t,!0)}}}});var Xn=[],Un=/(=)\?(?=&|$)|\?\?/;st.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=Xn.pop()||st.expando+"_"+Ln++;return this[e]=!0,e}}),st.ajaxPrefilter("json jsonp",function(n,r,i){var o,a,s,u=n.jsonp!==!1&&(Un.test(n.url)?"url":"string"==typeof n.data&&!(n.contentType||"").indexOf("application/x-www-form-urlencoded")&&Un.test(n.data)&&"data");return u||"jsonp"===n.dataTypes[0]?(o=n.jsonpCallback=st.isFunction(n.jsonpCallback)?n.jsonpCallback():n.jsonpCallback,u?n[u]=n[u].replace(Un,"$1"+o):n.jsonp!==!1&&(n.url+=(Hn.test(n.url)?"&":"?")+n.jsonp+"="+o),n.converters["script json"]=function(){return s||st.error(o+" was not called"),s[0]},n.dataTypes[0]="json",a=e[o],e[o]=function(){s=arguments},i.always(function(){e[o]=a,n[o]&&(n.jsonpCallback=r.jsonpCallback,Xn.push(o)),s&&st.isFunction(a)&&a(s[0]),s=a=t}),"script"):t});var Vn,Yn,Jn=0,Gn=e.ActiveXObject&&function(){var e;for(e in Vn)Vn[e](t,!0)};st.ajaxSettings.xhr=e.ActiveXObject?function(){return!this.isLocal&&_()||F()}:_,Yn=st.ajaxSettings.xhr(),st.support.cors=!!Yn&&"withCredentials"in Yn,Yn=st.support.ajax=!!Yn,Yn&&st.ajaxTransport(function(n){if(!n.crossDomain||st.support.cors){var r;return{send:function(i,o){var a,s,u=n.xhr();if(n.username?u.open(n.type,n.url,n.async,n.username,n.password):u.open(n.type,n.url,n.async),n.xhrFields)for(s in n.xhrFields)u[s]=n.xhrFields[s];n.mimeType&&u.overrideMimeType&&u.overrideMimeType(n.mimeType),n.crossDomain||i["X-Requested-With"]||(i["X-Requested-With"]="XMLHttpRequest");try{for(s in i)u.setRequestHeader(s,i[s])}catch(l){}u.send(n.hasContent&&n.data||null),r=function(e,i){var s,l,c,f,p;try{if(r&&(i||4===u.readyState))if(r=t,a&&(u.onreadystatechange=st.noop,Gn&&delete Vn[a]),i)4!==u.readyState&&u.abort();else{f={},s=u.status,p=u.responseXML,c=u.getAllResponseHeaders(),p&&p.documentElement&&(f.xml=p),"string"==typeof u.responseText&&(f.text=u.responseText);try{l=u.statusText}catch(d){l=""}s||!n.isLocal||n.crossDomain?1223===s&&(s=204):s=f.text?200:404}}catch(h){i||o(-1,h)}f&&o(s,l,f,c)},n.async?4===u.readyState?setTimeout(r):(a=++Jn,Gn&&(Vn||(Vn={},st(e).unload(Gn)),Vn[a]=r),u.onreadystatechange=r):r()},abort:function(){r&&r(t,!0)}}}});var Qn,Kn,Zn=/^(?:toggle|show|hide)$/,er=RegExp("^(?:([+-])=|)("+ut+")([a-z%]*)$","i"),tr=/queueHooks$/,nr=[W],rr={"*":[function(e,t){var n,r,i=this.createTween(e,t),o=er.exec(t),a=i.cur(),s=+a||0,u=1,l=20;if(o){if(n=+o[2],r=o[3]||(st.cssNumber[e]?"":"px"),"px"!==r&&s){s=st.css(i.elem,e,!0)||n||1;do u=u||".5",s/=u,st.style(i.elem,e,s+r);while(u!==(u=i.cur()/a)&&1!==u&&--l)}i.unit=r,i.start=s,i.end=o[1]?s+(o[1]+1)*n:n}return i}]};st.Animation=st.extend(P,{tweener:function(e,t){st.isFunction(e)?(t=e,e=["*"]):e=e.split(" ");for(var n,r=0,i=e.length;i>r;r++)n=e[r],rr[n]=rr[n]||[],rr[n].unshift(t)},prefilter:function(e,t){t?nr.unshift(e):nr.push(e)}}),st.Tween=$,$.prototype={constructor:$,init:function(e,t,n,r,i,o){this.elem=e,this.prop=n,this.easing=i||"swing",this.options=t,this.start=this.now=this.cur(),this.end=r,this.unit=o||(st.cssNumber[n]?"":"px")},cur:function(){var e=$.propHooks[this.prop];return e&&e.get?e.get(this):$.propHooks._default.get(this)},run:function(e){var t,n=$.propHooks[this.prop];return this.pos=t=this.options.duration?st.easing[this.easing](e,this.options.duration*e,0,1,this.options.duration):e,this.now=(this.end-this.start)*t+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),n&&n.set?n.set(this):$.propHooks._default.set(this),this}},$.prototype.init.prototype=$.prototype,$.propHooks={_default:{get:function(e){var t;return null==e.elem[e.prop]||e.elem.style&&null!=e.elem.style[e.prop]?(t=st.css(e.elem,e.prop,"auto"),t&&"auto"!==t?t:0):e.elem[e.prop]},set:function(e){st.fx.step[e.prop]?st.fx.step[e.prop](e):e.elem.style&&(null!=e.elem.style[st.cssProps[e.prop]]||st.cssHooks[e.prop])?st.style(e.elem,e.prop,e.now+e.unit):e.elem[e.prop]=e.now}}},$.propHooks.scrollTop=$.propHooks.scrollLeft={set:function(e){e.elem.nodeType&&e.elem.parentNode&&(e.elem[e.prop]=e.now)}},st.each(["toggle","show","hide"],function(e,t){var n=st.fn[t];st.fn[t]=function(e,r,i){return null==e||"boolean"==typeof e?n.apply(this,arguments):this.animate(I(t,!0),e,r,i)}}),st.fn.extend({fadeTo:function(e,t,n,r){return this.filter(w).css("opacity",0).show().end().animate({opacity:t},e,n,r)},animate:function(e,t,n,r){var i=st.isEmptyObject(e),o=st.speed(t,n,r),a=function(){var t=P(this,st.extend({},e),o);a.finish=function(){t.stop(!0)},(i||st._data(this,"finish"))&&t.stop(!0)};return a.finish=a,i||o.queue===!1?this.each(a):this.queue(o.queue,a)},stop:function(e,n,r){var i=function(e){var t=e.stop;delete e.stop,t(r)};return"string"!=typeof e&&(r=n,n=e,e=t),n&&e!==!1&&this.queue(e||"fx",[]),this.each(function(){var t=!0,n=null!=e&&e+"queueHooks",o=st.timers,a=st._data(this);if(n)a[n]&&a[n].stop&&i(a[n]);else for(n in a)a[n]&&a[n].stop&&tr.test(n)&&i(a[n]);for(n=o.length;n--;)o[n].elem!==this||null!=e&&o[n].queue!==e||(o[n].anim.stop(r),t=!1,o.splice(n,1));(t||!r)&&st.dequeue(this,e)})},finish:function(e){return e!==!1&&(e=e||"fx"),this.each(function(){var t,n=st._data(this),r=n[e+"queue"],i=n[e+"queueHooks"],o=st.timers,a=r?r.length:0;for(n.finish=!0,st.queue(this,e,[]),i&&i.cur&&i.cur.finish&&i.cur.finish.call(this),t=o.length;t--;)o[t].elem===this&&o[t].queue===e&&(o[t].anim.stop(!0),o.splice(t,1));for(t=0;a>t;t++)r[t]&&r[t].finish&&r[t].finish.call(this);delete n.finish})}}),st.each({slideDown:I("show"),slideUp:I("hide"),slideToggle:I("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(e,t){st.fn[e]=function(e,n,r){return this.animate(t,e,n,r)}}),st.speed=function(e,t,n){var r=e&&"object"==typeof e?st.extend({},e):{complete:n||!n&&t||st.isFunction(e)&&e,duration:e,easing:n&&t||t&&!st.isFunction(t)&&t};return r.duration=st.fx.off?0:"number"==typeof r.duration?r.duration:r.duration in st.fx.speeds?st.fx.speeds[r.duration]:st.fx.speeds._default,(null==r.queue||r.queue===!0)&&(r.queue="fx"),r.old=r.complete,r.complete=function(){st.isFunction(r.old)&&r.old.call(this),r.queue&&st.dequeue(this,r.queue)},r},st.easing={linear:function(e){return e},swing:function(e){return.5-Math.cos(e*Math.PI)/2}},st.timers=[],st.fx=$.prototype.init,st.fx.tick=function(){var e,n=st.timers,r=0;for(Qn=st.now();n.length>r;r++)e=n[r],e()||n[r]!==e||n.splice(r--,1);n.length||st.fx.stop(),Qn=t},st.fx.timer=function(e){e()&&st.timers.push(e)&&st.fx.start()},st.fx.interval=13,st.fx.start=function(){Kn||(Kn=setInterval(st.fx.tick,st.fx.interval))},st.fx.stop=function(){clearInterval(Kn),Kn=null},st.fx.speeds={slow:600,fast:200,_default:400},st.fx.step={},st.expr&&st.expr.filters&&(st.expr.filters.animated=function(e){return st.grep(st.timers,function(t){return e===t.elem}).length}),st.fn.offset=function(e){if(arguments.length)return e===t?this:this.each(function(t){st.offset.setOffset(this,e,t)});var n,r,i={top:0,left:0},o=this[0],a=o&&o.ownerDocument;if(a)return n=a.documentElement,st.contains(n,o)?(o.getBoundingClientRect!==t&&(i=o.getBoundingClientRect()),r=z(a),{top:i.top+(r.pageYOffset||n.scrollTop)-(n.clientTop||0),left:i.left+(r.pageXOffset||n.scrollLeft)-(n.clientLeft||0)}):i},st.offset={setOffset:function(e,t,n){var r=st.css(e,"position");"static"===r&&(e.style.position="relative");var i,o,a=st(e),s=a.offset(),u=st.css(e,"top"),l=st.css(e,"left"),c=("absolute"===r||"fixed"===r)&&st.inArray("auto",[u,l])>-1,f={},p={};c?(p=a.position(),i=p.top,o=p.left):(i=parseFloat(u)||0,o=parseFloat(l)||0),st.isFunction(t)&&(t=t.call(e,n,s)),null!=t.top&&(f.top=t.top-s.top+i),null!=t.left&&(f.left=t.left-s.left+o),"using"in t?t.using.call(e,f):a.css(f)}},st.fn.extend({position:function(){if(this[0]){var e,t,n={top:0,left:0},r=this[0];return"fixed"===st.css(r,"position")?t=r.getBoundingClientRect():(e=this.offsetParent(),t=this.offset(),st.nodeName(e[0],"html")||(n=e.offset()),n.top+=st.css(e[0],"borderTopWidth",!0),n.left+=st.css(e[0],"borderLeftWidth",!0)),{top:t.top-n.top-st.css(r,"marginTop",!0),left:t.left-n.left-st.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){for(var e=this.offsetParent||V.documentElement;e&&!st.nodeName(e,"html")&&"static"===st.css(e,"position");)e=e.offsetParent;return e||V.documentElement})}}),st.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(e,n){var r=/Y/.test(n);st.fn[e]=function(i){return st.access(this,function(e,i,o){var a=z(e);return o===t?a?n in a?a[n]:a.document.documentElement[i]:e[i]:(a?a.scrollTo(r?st(a).scrollLeft():o,r?o:st(a).scrollTop()):e[i]=o,t)},e,i,arguments.length,null)}}),st.each({Height:"height",Width:"width"},function(e,n){st.each({padding:"inner"+e,content:n,"":"outer"+e},function(r,i){st.fn[i]=function(i,o){var a=arguments.length&&(r||"boolean"!=typeof i),s=r||(i===!0||o===!0?"margin":"border");return st.access(this,function(n,r,i){var o;return st.isWindow(n)?n.document.documentElement["client"+e]:9===n.nodeType?(o=n.documentElement,Math.max(n.body["scroll"+e],o["scroll"+e],n.body["offset"+e],o["offset"+e],o["client"+e])):i===t?st.css(n,r,s):st.style(n,r,i,s)},n,a?i:t,a,null)}})}),e.jQuery=e.$=st,"function"==typeof define&&define.amd&&define.amd.jQuery&&define("jquery",[],function(){return st})})(window);
+//@ sourceMappingURL=jquery.min.map
\ No newline at end of file
diff --git a/branches/php7/js/libs/modernizr-2.6.2.min.js b/branches/php7/js/libs/modernizr-2.6.2.min.js
new file mode 100644
index 0000000..f65d479
--- /dev/null
+++ b/branches/php7/js/libs/modernizr-2.6.2.min.js
@@ -0,0 +1,4 @@
+/* Modernizr 2.6.2 (Custom Build) | MIT & BSD
+ * Build: http://modernizr.com/download/#-fontface-backgroundsize-borderimage-borderradius-boxshadow-flexbox-hsla-multiplebgs-opacity-rgba-textshadow-cssanimations-csscolumns-generatedcontent-cssgradients-cssreflections-csstransforms-csstransforms3d-csstransitions-applicationcache-canvas-canvastext-draganddrop-hashchange-history-audio-video-indexeddb-input-inputtypes-localstorage-postmessage-sessionstorage-websockets-websqldatabase-webworkers-geolocation-inlinesvg-smil-svg-svgclippaths-touch-webgl-shiv-mq-cssclasses-addtest-prefixed-teststyles-testprop-testallprops-hasevent-prefixes-domprefixes-load
+ */
+;window.Modernizr=function(a,b,c){function D(a){j.cssText=a}function E(a,b){return D(n.join(a+";")+(b||""))}function F(a,b){return typeof a===b}function G(a,b){return!!~(""+a).indexOf(b)}function H(a,b){for(var d in a){var e=a[d];if(!G(e,"-")&&j[e]!==c)return b=="pfx"?e:!0}return!1}function I(a,b,d){for(var e in a){var f=b[a[e]];if(f!==c)return d===!1?a[e]:F(f,"function")?f.bind(d||b):f}return!1}function J(a,b,c){var d=a.charAt(0).toUpperCase()+a.slice(1),e=(a+" "+p.join(d+" ")+d).split(" ");return F(b,"string")||F(b,"undefined")?H(e,b):(e=(a+" "+q.join(d+" ")+d).split(" "),I(e,b,c))}function K(){e.input=function(c){for(var d=0,e=c.length;d
',a,""].join(""),l.id=h,(m?l:n).innerHTML+=f,n.appendChild(l),m||(n.style.background="",n.style.overflow="hidden",k=g.style.overflow,g.style.overflow="hidden",g.appendChild(n)),i=c(l,a),m?l.parentNode.removeChild(l):(n.parentNode.removeChild(n),g.style.overflow=k),!!i},z=function(b){var c=a.matchMedia||a.msMatchMedia;if(c)return c(b).matches;var d;return y("@media "+b+" { #"+h+" { position: absolute; } }",function(b){d=(a.getComputedStyle?getComputedStyle(b,null):b.currentStyle)["position"]=="absolute"}),d},A=function(){function d(d,e){e=e||b.createElement(a[d]||"div"),d="on"+d;var f=d in e;return f||(e.setAttribute||(e=b.createElement("div")),e.setAttribute&&e.removeAttribute&&(e.setAttribute(d,""),f=F(e[d],"function"),F(e[d],"undefined")||(e[d]=c),e.removeAttribute(d))),e=null,f}var a={select:"input",change:"input",submit:"form",reset:"form",error:"img",load:"img",abort:"img"};return d}(),B={}.hasOwnProperty,C;!F(B,"undefined")&&!F(B.call,"undefined")?C=function(a,b){return B.call(a,b)}:C=function(a,b){return b in a&&F(a.constructor.prototype[b],"undefined")},Function.prototype.bind||(Function.prototype.bind=function(b){var c=this;if(typeof c!="function")throw new TypeError;var d=w.call(arguments,1),e=function(){if(this instanceof e){var a=function(){};a.prototype=c.prototype;var f=new a,g=c.apply(f,d.concat(w.call(arguments)));return Object(g)===g?g:f}return c.apply(b,d.concat(w.call(arguments)))};return e}),s.flexbox=function(){return J("flexWrap")},s.canvas=function(){var a=b.createElement("canvas");return!!a.getContext&&!!a.getContext("2d")},s.canvastext=function(){return!!e.canvas&&!!F(b.createElement("canvas").getContext("2d").fillText,"function")},s.webgl=function(){return!!a.WebGLRenderingContext},s.touch=function(){var c;return"ontouchstart"in a||a.DocumentTouch&&b instanceof DocumentTouch?c=!0:y(["@media (",n.join("touch-enabled),("),h,")","{#modernizr{top:9px;position:absolute}}"].join(""),function(a){c=a.offsetTop===9}),c},s.geolocation=function(){return"geolocation"in navigator},s.postmessage=function(){return!!a.postMessage},s.websqldatabase=function(){return!!a.openDatabase},s.indexedDB=function(){return!!J("indexedDB",a)},s.hashchange=function(){return A("hashchange",a)&&(b.documentMode===c||b.documentMode>7)},s.history=function(){return!!a.history&&!!history.pushState},s.draganddrop=function(){var a=b.createElement("div");return"draggable"in a||"ondragstart"in a&&"ondrop"in a},s.websockets=function(){return"WebSocket"in a||"MozWebSocket"in a},s.rgba=function(){return D("background-color:rgba(150,255,150,.5)"),G(j.backgroundColor,"rgba")},s.hsla=function(){return D("background-color:hsla(120,40%,100%,.5)"),G(j.backgroundColor,"rgba")||G(j.backgroundColor,"hsla")},s.multiplebgs=function(){return D("background:url(https://),url(https://),red url(https://)"),/(url\s*\(.*?){3}/.test(j.background)},s.backgroundsize=function(){return J("backgroundSize")},s.borderimage=function(){return J("borderImage")},s.borderradius=function(){return J("borderRadius")},s.boxshadow=function(){return J("boxShadow")},s.textshadow=function(){return b.createElement("div").style.textShadow===""},s.opacity=function(){return E("opacity:.55"),/^0.55$/.test(j.opacity)},s.cssanimations=function(){return J("animationName")},s.csscolumns=function(){return J("columnCount")},s.cssgradients=function(){var a="background-image:",b="gradient(linear,left top,right bottom,from(#9f9),to(white));",c="linear-gradient(left top,#9f9, white);";return D((a+"-webkit- ".split(" ").join(b+a)+n.join(c+a)).slice(0,-a.length)),G(j.backgroundImage,"gradient")},s.cssreflections=function(){return J("boxReflect")},s.csstransforms=function(){return!!J("transform")},s.csstransforms3d=function(){var a=!!J("perspective");return a&&"webkitPerspective"in g.style&&y("@media (transform-3d),(-webkit-transform-3d){#modernizr{left:9px;position:absolute;height:3px;}}",function(b,c){a=b.offsetLeft===9&&b.offsetHeight===3}),a},s.csstransitions=function(){return J("transition")},s.fontface=function(){var a;return y('@font-face {font-family:"font";src:url("https://")}',function(c,d){var e=b.getElementById("smodernizr"),f=e.sheet||e.styleSheet,g=f?f.cssRules&&f.cssRules[0]?f.cssRules[0].cssText:f.cssText||"":"";a=/src/i.test(g)&&g.indexOf(d.split(" ")[0])===0}),a},s.generatedcontent=function(){var a;return y(["#",h,"{font:0/0 a}#",h,':after{content:"',l,'";visibility:hidden;font:3px/1 a}'].join(""),function(b){a=b.offsetHeight>=3}),a},s.video=function(){var a=b.createElement("video"),c=!1;try{if(c=!!a.canPlayType)c=new Boolean(c),c.ogg=a.canPlayType('video/ogg; codecs="theora"').replace(/^no$/,""),c.h264=a.canPlayType('video/mp4; codecs="avc1.42E01E"').replace(/^no$/,""),c.webm=a.canPlayType('video/webm; codecs="vp8, vorbis"').replace(/^no$/,"")}catch(d){}return c},s.audio=function(){var a=b.createElement("audio"),c=!1;try{if(c=!!a.canPlayType)c=new Boolean(c),c.ogg=a.canPlayType('audio/ogg; codecs="vorbis"').replace(/^no$/,""),c.mp3=a.canPlayType("audio/mpeg;").replace(/^no$/,""),c.wav=a.canPlayType('audio/wav; codecs="1"').replace(/^no$/,""),c.m4a=(a.canPlayType("audio/x-m4a;")||a.canPlayType("audio/aac;")).replace(/^no$/,"")}catch(d){}return c},s.localstorage=function(){try{return localStorage.setItem(h,h),localStorage.removeItem(h),!0}catch(a){return!1}},s.sessionstorage=function(){try{return sessionStorage.setItem(h,h),sessionStorage.removeItem(h),!0}catch(a){return!1}},s.webworkers=function(){return!!a.Worker},s.applicationcache=function(){return!!a.applicationCache},s.svg=function(){return!!b.createElementNS&&!!b.createElementNS(r.svg,"svg").createSVGRect},s.inlinesvg=function(){var a=b.createElement("div");return a.innerHTML=" ",(a.firstChild&&a.firstChild.namespaceURI)==r.svg},s.smil=function(){return!!b.createElementNS&&/SVGAnimate/.test(m.call(b.createElementNS(r.svg,"animate")))},s.svgclippaths=function(){return!!b.createElementNS&&/SVGClipPath/.test(m.call(b.createElementNS(r.svg,"clipPath")))};for(var L in s)C(s,L)&&(x=L.toLowerCase(),e[x]=s[L](),v.push((e[x]?"":"no-")+x));return e.input||K(),e.addTest=function(a,b){if(typeof a=="object")for(var d in a)C(a,d)&&e.addTest(d,a[d]);else{a=a.toLowerCase();if(e[a]!==c)return e;b=typeof b=="function"?b():b,typeof f!="undefined"&&f&&(g.className+=" "+(b?"":"no-")+a),e[a]=b}return e},D(""),i=k=null,function(a,b){function k(a,b){var c=a.createElement("p"),d=a.getElementsByTagName("head")[0]||a.documentElement;return c.innerHTML="x",d.insertBefore(c.lastChild,d.firstChild)}function l(){var a=r.elements;return typeof a=="string"?a.split(" "):a}function m(a){var b=i[a[g]];return b||(b={},h++,a[g]=h,i[h]=b),b}function n(a,c,f){c||(c=b);if(j)return c.createElement(a);f||(f=m(c));var g;return f.cache[a]?g=f.cache[a].cloneNode():e.test(a)?g=(f.cache[a]=f.createElem(a)).cloneNode():g=f.createElem(a),g.canHaveChildren&&!d.test(a)?f.frag.appendChild(g):g}function o(a,c){a||(a=b);if(j)return a.createDocumentFragment();c=c||m(a);var d=c.frag.cloneNode(),e=0,f=l(),g=f.length;for(;e",f="hidden"in a,j=a.childNodes.length==1||function(){b.createElement("a");var a=b.createDocumentFragment();return typeof a.cloneNode=="undefined"||typeof a.createDocumentFragment=="undefined"||typeof a.createElement=="undefined"}()}catch(c){f=!0,j=!0}})();var r={elements:c.elements||"abbr article aside audio bdi canvas data datalist details figcaption figure footer header hgroup mark meter nav output progress section summary time video",shivCSS:c.shivCSS!==!1,supportsUnknownElements:j,shivMethods:c.shivMethods!==!1,type:"default",shivDocument:q,createElement:n,createDocumentFragment:o};a.html5=r,q(b)}(this,b),e._version=d,e._prefixes=n,e._domPrefixes=q,e._cssomPrefixes=p,e.mq=z,e.hasEvent=A,e.testProp=function(a){return H([a])},e.testAllProps=J,e.testStyles=y,e.prefixed=function(a,b,c){return b?J(a,b,c):J(a,"pfx")},g.className=g.className.replace(/(^|\s)no-js(\s|$)/,"$1$2")+(f?" js "+v.join(" "):""),e}(this,this.document),function(a,b,c){function d(a){return"[object Function]"==o.call(a)}function e(a){return"string"==typeof a}function f(){}function g(a){return!a||"loaded"==a||"complete"==a||"uninitialized"==a}function h(){var a=p.shift();q=1,a?a.t?m(function(){("c"==a.t?B.injectCss:B.injectJs)(a.s,0,a.a,a.x,a.e,1)},0):(a(),h()):q=0}function i(a,c,d,e,f,i,j){function k(b){if(!o&&g(l.readyState)&&(u.r=o=1,!q&&h(),l.onload=l.onreadystatechange=null,b)){"img"!=a&&m(function(){t.removeChild(l)},50);for(var d in y[c])y[c].hasOwnProperty(d)&&y[c][d].onload()}}var j=j||B.errorTimeout,l=b.createElement(a),o=0,r=0,u={t:d,s:c,e:f,a:i,x:j};1===y[c]&&(r=1,y[c]=[]),"object"==a?l.data=c:(l.src=c,l.type=a),l.width=l.height="0",l.onerror=l.onload=l.onreadystatechange=function(){k.call(this,r)},p.splice(e,0,u),"img"!=a&&(r||2===y[c]?(t.insertBefore(l,s?null:n),m(k,j)):y[c].push(l))}function j(a,b,c,d,f){return q=0,b=b||"j",e(a)?i("c"==b?v:u,a,b,this.i++,c,d,f):(p.splice(this.i++,0,a),1==p.length&&h()),this}function k(){var a=B;return a.loader={load:j,i:0},a}var l=b.documentElement,m=a.setTimeout,n=b.getElementsByTagName("script")[0],o={}.toString,p=[],q=0,r="MozAppearance"in l.style,s=r&&!!b.createRange().compareNode,t=s?l:n.parentNode,l=a.opera&&"[object Opera]"==o.call(a.opera),l=!!b.attachEvent&&!l,u=r?"object":l?"script":"img",v=l?"script":u,w=Array.isArray||function(a){return"[object Array]"==o.call(a)},x=[],y={},z={timeout:function(a,b){return b.length&&(a.timeout=b[0]),a}},A,B;B=function(a){function b(a){var a=a.split("!"),b=x.length,c=a.pop(),d=a.length,c={url:c,origUrl:c,prefixes:a},e,f,g;for(f=0;f
diff --git a/branches/php7/robots.txt b/branches/php7/robots.txt
new file mode 100644
index 0000000..eb05362
--- /dev/null
+++ b/branches/php7/robots.txt
@@ -0,0 +1,2 @@
+User-agent: *
+Disallow:
diff --git a/branches/php7/templates/cl_flex_slider.html b/branches/php7/templates/cl_flex_slider.html
new file mode 100644
index 0000000..e43b326
--- /dev/null
+++ b/branches/php7/templates/cl_flex_slider.html
@@ -0,0 +1,10 @@
+
+
+
+
+
+ {IMG_CAPTION}
+
+
+
+
\ No newline at end of file
diff --git a/branches/php7/templates/cl_login_form.html b/branches/php7/templates/cl_login_form.html
new file mode 100644
index 0000000..649d90d
--- /dev/null
+++ b/branches/php7/templates/cl_login_form.html
@@ -0,0 +1,9 @@
+
\ No newline at end of file
diff --git a/branches/php7/templates/cms_filelist_style_default.html b/branches/php7/templates/cms_filelist_style_default.html
new file mode 100644
index 0000000..010eeeb
--- /dev/null
+++ b/branches/php7/templates/cms_filelist_style_default.html
@@ -0,0 +1,18 @@
+
+{TITLE}
+
+
+
+
{FILENAME} ({FILEEXTENSION})
+
{LABEL_FILESIZE} {FILESIZE} {FILESIZE_UNIT}
+
{LABEL_UPLOAD_DATE} {FILECREATIONDATE}
+ {FILEMETA_DESCRIPTION}
+
+
+
\ No newline at end of file
diff --git a/branches/php7/templates/cms_teaser_style_block.html b/branches/php7/templates/cms_teaser_style_block.html
new file mode 100644
index 0000000..f50f6cb
--- /dev/null
+++ b/branches/php7/templates/cms_teaser_style_block.html
@@ -0,0 +1,11 @@
+
+
\ No newline at end of file
diff --git a/branches/php7/templates/cms_teaser_style_blog.html b/branches/php7/templates/cms_teaser_style_blog.html
new file mode 100644
index 0000000..68601cf
--- /dev/null
+++ b/branches/php7/templates/cms_teaser_style_blog.html
@@ -0,0 +1,11 @@
+
+
\ No newline at end of file
diff --git a/branches/php7/templates/contenido_header.html b/branches/php7/templates/contenido_header.html
new file mode 100644
index 0000000..f8c1aef
--- /dev/null
+++ b/branches/php7/templates/contenido_header.html
@@ -0,0 +1,6 @@
+
\ No newline at end of file
diff --git a/branches/php7/templates/footnotes_1.html b/branches/php7/templates/footnotes_1.html
new file mode 100644
index 0000000..5dacbf7
--- /dev/null
+++ b/branches/php7/templates/footnotes_1.html
@@ -0,0 +1 @@
+© 2012-2013 ConLite
\ No newline at end of file
diff --git a/branches/php7/templates/footnotes_2.html b/branches/php7/templates/footnotes_2.html
new file mode 100644
index 0000000..5dacbf7
--- /dev/null
+++ b/branches/php7/templates/footnotes_2.html
@@ -0,0 +1 @@
+© 2012-2013 ConLite
\ No newline at end of file
diff --git a/branches/php7/templates/header.html b/branches/php7/templates/header.html
new file mode 100644
index 0000000..4b569e9
--- /dev/null
+++ b/branches/php7/templates/header.html
@@ -0,0 +1,4 @@
+
+
+
{headline}
+
\ No newline at end of file
diff --git a/branches/php7/templates/headline_h1.html b/branches/php7/templates/headline_h1.html
new file mode 100644
index 0000000..3779746
--- /dev/null
+++ b/branches/php7/templates/headline_h1.html
@@ -0,0 +1 @@
+{HEADLINE}
\ No newline at end of file
diff --git a/branches/php7/templates/kontaktformular.html b/branches/php7/templates/kontaktformular.html
new file mode 100644
index 0000000..2849d47
--- /dev/null
+++ b/branches/php7/templates/kontaktformular.html
@@ -0,0 +1,55 @@
+
+
\ No newline at end of file
diff --git a/branches/php7/templates/login_form_loggedin.html b/branches/php7/templates/login_form_loggedin.html
new file mode 100644
index 0000000..a8a8aee
--- /dev/null
+++ b/branches/php7/templates/login_form_loggedin.html
@@ -0,0 +1,5 @@
+ {headline}
+
diff --git a/branches/php7/templates/logo_bottom.html b/branches/php7/templates/logo_bottom.html
new file mode 100644
index 0000000..7a613b9
--- /dev/null
+++ b/branches/php7/templates/logo_bottom.html
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/branches/php7/templates/navigation_meta_container.html b/branches/php7/templates/navigation_meta_container.html
new file mode 100644
index 0000000..e4ae431
--- /dev/null
+++ b/branches/php7/templates/navigation_meta_container.html
@@ -0,0 +1,4 @@
+
+
\ No newline at end of file
diff --git a/branches/php7/templates/navigation_meta_item.html b/branches/php7/templates/navigation_meta_item.html
new file mode 100644
index 0000000..d7a1de8
--- /dev/null
+++ b/branches/php7/templates/navigation_meta_item.html
@@ -0,0 +1,3 @@
+
+ {label}
+
\ No newline at end of file
diff --git a/branches/php7/templates/navigation_standard.html b/branches/php7/templates/navigation_standard.html
new file mode 100644
index 0000000..8686492
--- /dev/null
+++ b/branches/php7/templates/navigation_standard.html
@@ -0,0 +1,8 @@
+
+
\ No newline at end of file
diff --git a/branches/php7/templates/navigation_standard_li.html b/branches/php7/templates/navigation_standard_li.html
new file mode 100644
index 0000000..0ce7ec1
--- /dev/null
+++ b/branches/php7/templates/navigation_standard_li.html
@@ -0,0 +1,5 @@
+
+
+ {name}
+
+
\ No newline at end of file
diff --git a/branches/php7/templates/navigation_standard_ul.html b/branches/php7/templates/navigation_standard_ul.html
new file mode 100644
index 0000000..18711ec
--- /dev/null
+++ b/branches/php7/templates/navigation_standard_ul.html
@@ -0,0 +1,3 @@
+
\ No newline at end of file
diff --git a/branches/php7/templates/newsletter_form.html b/branches/php7/templates/newsletter_form.html
new file mode 100644
index 0000000..b028938
--- /dev/null
+++ b/branches/php7/templates/newsletter_form.html
@@ -0,0 +1,31 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/branches/php7/templates/newsletter_handler.html b/branches/php7/templates/newsletter_handler.html
new file mode 100644
index 0000000..62bf775
--- /dev/null
+++ b/branches/php7/templates/newsletter_handler.html
@@ -0,0 +1 @@
+{CONTENT}
\ No newline at end of file
diff --git a/branches/php7/templates/rss.html b/branches/php7/templates/rss.html
new file mode 100644
index 0000000..916a967
--- /dev/null
+++ b/branches/php7/templates/rss.html
@@ -0,0 +1,5 @@
+
diff --git a/branches/php7/templates/rss_template.html b/branches/php7/templates/rss_template.html
new file mode 100644
index 0000000..6b66064
--- /dev/null
+++ b/branches/php7/templates/rss_template.html
@@ -0,0 +1,4 @@
+
+
+{IMAGE}{DESCRIPTION} {READ_ON}
+
diff --git a/branches/php7/templates/rss_template_breit.html b/branches/php7/templates/rss_template_breit.html
new file mode 100644
index 0000000..74dc963
--- /dev/null
+++ b/branches/php7/templates/rss_template_breit.html
@@ -0,0 +1,7 @@
+
\ No newline at end of file
diff --git a/branches/php7/templates/search_input.html b/branches/php7/templates/search_input.html
new file mode 100644
index 0000000..0758809
--- /dev/null
+++ b/branches/php7/templates/search_input.html
@@ -0,0 +1,7 @@
+
+
+ {label_search}
+
+
+
+
\ No newline at end of file
diff --git a/branches/php7/templates/search_output.html b/branches/php7/templates/search_output.html
new file mode 100644
index 0000000..adbe61c
--- /dev/null
+++ b/branches/php7/templates/search_output.html
@@ -0,0 +1,13 @@
+
+
{MESSAGE}
+
+
+
+
{result_page} {PREV}{PAGES}{NEXT}
+
\ No newline at end of file
diff --git a/branches/php7/templates/simple-gallery.html b/branches/php7/templates/simple-gallery.html
new file mode 100644
index 0000000..439e216
--- /dev/null
+++ b/branches/php7/templates/simple-gallery.html
@@ -0,0 +1,137 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/branches/php7/templates/sitemap_standard.html b/branches/php7/templates/sitemap_standard.html
new file mode 100644
index 0000000..a5374c6
--- /dev/null
+++ b/branches/php7/templates/sitemap_standard.html
@@ -0,0 +1,7 @@
+
\ No newline at end of file
diff --git a/branches/php7/templates/sitemap_standard_li.html b/branches/php7/templates/sitemap_standard_li.html
new file mode 100644
index 0000000..27be203
--- /dev/null
+++ b/branches/php7/templates/sitemap_standard_li.html
@@ -0,0 +1,5 @@
+
+
+ {name}
+
+
\ No newline at end of file
diff --git a/branches/php7/templates/sitemap_standard_ul.html b/branches/php7/templates/sitemap_standard_ul.html
new file mode 100644
index 0000000..b92b6eb
--- /dev/null
+++ b/branches/php7/templates/sitemap_standard_ul.html
@@ -0,0 +1,3 @@
+
\ No newline at end of file
diff --git a/branches/php7/templates/subheadline_h2.html b/branches/php7/templates/subheadline_h2.html
new file mode 100644
index 0000000..4a9f016
--- /dev/null
+++ b/branches/php7/templates/subheadline_h2.html
@@ -0,0 +1 @@
+{SUBHEADLINE}
\ No newline at end of file
diff --git a/branches/php7/templates/teaser-standard.html b/branches/php7/templates/teaser-standard.html
new file mode 100644
index 0000000..2634835
--- /dev/null
+++ b/branches/php7/templates/teaser-standard.html
@@ -0,0 +1,7 @@
+{TITLE}
+
\ No newline at end of file
diff --git a/branches/php7/templates/teaser_right.html b/branches/php7/templates/teaser_right.html
new file mode 100644
index 0000000..f85922e
--- /dev/null
+++ b/branches/php7/templates/teaser_right.html
@@ -0,0 +1,7 @@
+
+
+
\ No newline at end of file
diff --git a/branches/php7/templates/text_html.html b/branches/php7/templates/text_html.html
new file mode 100644
index 0000000..3d56091
--- /dev/null
+++ b/branches/php7/templates/text_html.html
@@ -0,0 +1,3 @@
+
+ {text}
+
\ No newline at end of file
diff --git a/branches/php7/upload/Flexslider/basic-pic1.jpg b/branches/php7/upload/Flexslider/basic-pic1.jpg
new file mode 100644
index 0000000..ca0ab8b
Binary files /dev/null and b/branches/php7/upload/Flexslider/basic-pic1.jpg differ
diff --git a/branches/php7/upload/Flexslider/basic-pic2.jpg b/branches/php7/upload/Flexslider/basic-pic2.jpg
new file mode 100644
index 0000000..f045c85
Binary files /dev/null and b/branches/php7/upload/Flexslider/basic-pic2.jpg differ
diff --git a/branches/php7/upload/Flexslider/basic-pic3.jpg b/branches/php7/upload/Flexslider/basic-pic3.jpg
new file mode 100644
index 0000000..f832340
Binary files /dev/null and b/branches/php7/upload/Flexslider/basic-pic3.jpg differ
diff --git a/branches/php7/upload/Flexslider/basic-pic4.jpg b/branches/php7/upload/Flexslider/basic-pic4.jpg
new file mode 100644
index 0000000..698c4c2
Binary files /dev/null and b/branches/php7/upload/Flexslider/basic-pic4.jpg differ
diff --git a/branches/php7/upload/Gallery/IMAGE_296.jpg b/branches/php7/upload/Gallery/IMAGE_296.jpg
new file mode 100644
index 0000000..34b8f0f
Binary files /dev/null and b/branches/php7/upload/Gallery/IMAGE_296.jpg differ
diff --git a/branches/php7/upload/Gallery/PICT0004.JPG b/branches/php7/upload/Gallery/PICT0004.JPG
new file mode 100644
index 0000000..d269924
Binary files /dev/null and b/branches/php7/upload/Gallery/PICT0004.JPG differ
diff --git a/branches/php7/upload/Gallery/PICT0025.JPG b/branches/php7/upload/Gallery/PICT0025.JPG
new file mode 100644
index 0000000..3127784
Binary files /dev/null and b/branches/php7/upload/Gallery/PICT0025.JPG differ
diff --git a/branches/php7/upload/Gallery/PICT0082.JPG b/branches/php7/upload/Gallery/PICT0082.JPG
new file mode 100644
index 0000000..9f62298
Binary files /dev/null and b/branches/php7/upload/Gallery/PICT0082.JPG differ
diff --git a/branches/php7/upload/Gallery/PICT0188.JPG b/branches/php7/upload/Gallery/PICT0188.JPG
new file mode 100644
index 0000000..45abe54
Binary files /dev/null and b/branches/php7/upload/Gallery/PICT0188.JPG differ
diff --git a/branches/php7/upload/Gallery/Terasse26.jpg b/branches/php7/upload/Gallery/Terasse26.jpg
new file mode 100644
index 0000000..2251464
Binary files /dev/null and b/branches/php7/upload/Gallery/Terasse26.jpg differ