diff --git a/.DS_Store b/.DS_Store
new file mode 100644
index 0000000..fadd49a
Binary files /dev/null and b/.DS_Store differ
diff --git a/app/.DS_Store b/app/.DS_Store
new file mode 100644
index 0000000..240fdaa
Binary files /dev/null and b/app/.DS_Store differ
diff --git a/app/admin/.DS_Store b/app/admin/.DS_Store
new file mode 100644
index 0000000..30bbb79
Binary files /dev/null and b/app/admin/.DS_Store differ
diff --git a/app/admin/Init.js b/app/admin/Init.js
new file mode 100644
index 0000000..850333c
--- /dev/null
+++ b/app/admin/Init.js
@@ -0,0 +1,176 @@
+(function ($, service) {
+
+ // Local HTML helper.
+ var html = {
+ menu: function(d){
+
+ // Define string builder.
+ var sb = MVC.util.string.stringBuilder();
+
+ $.each(d, function(i, d){
+
+ if(d.items){
+
+ // Bild child tags.
+ var childItems = MVC.util.string.stringBuilder();
+
+ $.each(d.items, function(i, d){
+ childItems.append(d.url + ' ');
+ });
+
+ sb.append('
' + d.text + '');
+ } else {
+ sb.append('' + d.text + '');
+ }
+ });
+
+ return sb.toString();
+ },
+ sideMenu: function(d){
+
+ var sb = MVC.util.string.stringBuilder();
+
+ $.each(d, function(i, d){
+ sb.append('' + d.text + '');
+ });
+
+ return '';
+ }
+ };
+
+ var messageElm = $("#message_content"),
+ content = $("#content");
+
+ // Bind logout
+ $('#user_logout').click(function () {
+
+ service.send({
+ url: 'user/logout',
+ success: function (d) {
+ window.location = 'admin/login.html';
+ }
+ });
+
+ return false;
+ });
+
+ // Authentizate:
+ service.get({
+ url: 'user/getsession',
+ success: function (d) {
+ //d.isSucessful = true;
+ if (d.isSucessful) {
+
+ // Set user session.
+ MVC.session.set('user', d.data);
+
+ // Menu.
+ var menuObj = d.data.menuItems,
+ menuHtml = $(html.menu(menuObj)),
+ nav = $('#nav'),
+ sideNav = $('.left_nav');
+
+ var sideMenuObj = {};
+ /**/
+ $.each(menuObj, function(i, d){
+
+ var firstLevelChildren = d.items;
+
+ if(firstLevelChildren){
+ sideMenuObj[d.url] = firstLevelChildren;
+
+ // Add child mapping.
+ $.each(firstLevelChildren, function(i, d){
+ sideMenuObj[d.url] = firstLevelChildren;
+ });
+ }
+ });
+
+ // Add top nav items.
+ nav.append(menuHtml);
+
+ // Put user name in the top bar.
+ $('#user_profile_email').text(d.data.userName);
+
+ content.html('');
+
+ // Plugin init.
+ content.MVC({
+ rootPath: 'admin/',
+ viewsPath: "views/",
+ controllersPath: "controllers/",
+ routes: [
+ {
+ name: "Default2", // Name
+ path: "{controller}/{action}/{p1}/{p2}/{p3}", // Path.
+ params: { controller: "Dash", action: "Index", p1: "1", p2: "10", p3: ""} // Defaults.
+ }
+ ],
+ errorMessage: "503 Page
Ups, something went wrong...
",
+ start: function () {
+ messageElm.text("loading...").show();
+
+ // Show loader.
+ MVC.message.showLoader();
+ },
+ success: function (d) {
+
+ MVC.message.hideLoader();
+
+ var controllerName = d.actionObject.controller,
+ allMenuItems = $('a', menuHtml),
+ currentMenuItem = $('a:[href^="#' + controllerName + '"]', menuHtml),
+ childMenuItemParent = $('a:[childUrls*="' + controllerName + '"]', menuHtml);
+
+ // Remove highliting.
+ allMenuItems.removeClass('selected');
+
+ // Add highlighting.
+ currentMenuItem.addClass('selected');
+ childMenuItemParent.addClass('selected')
+
+ // Build side nav.
+ if(sideMenuObj[controllerName]){
+
+ var sideNavHtml = $(html.menu(sideMenuObj[controllerName]));
+
+ sideNav.html(sideNavHtml);
+
+ var allSideMenuItems = $('a', sideNavHtml),
+ currentSideMenuItem = $('a:[href^="#' + controllerName + '"]', sideNavHtml);
+
+ // Remove highliting.
+ allSideMenuItems.removeClass('selected');
+
+ // Add highlighting.
+ currentSideMenuItem.addClass('selected');
+ // Side nav highlighting.
+
+ } else {
+ sideNav.html('');
+ }
+
+ $('#header').fadeIn();
+ $('#main').fadeIn();
+
+ // Build side Menu.
+ //menuHtml = $(html.menu(menuObj));
+ //sideMenu
+
+ messageElm.hide().text("");
+ },
+ error: function (ex) {
+
+ MVC.message.hideLoader();
+
+ messageElm.text(ex).show();
+ }
+ });
+
+ } else {
+ //content.html('');
+ window.location = 'admin/login.html';
+ }
+ }
+ });
+} (jQuery, MVC.service));
\ No newline at end of file
diff --git a/app/admin/content/.DS_Store b/app/admin/content/.DS_Store
new file mode 100644
index 0000000..e6c5d85
Binary files /dev/null and b/app/admin/content/.DS_Store differ
diff --git a/app/admin/content/css/1.css b/app/admin/content/css/1.css
new file mode 100644
index 0000000..32426ce
--- /dev/null
+++ b/app/admin/content/css/1.css
@@ -0,0 +1,406 @@
+/* DEFAULTS
+-----------------------------------*/
+
+/* body */
+html{height: 100%;}
+body {height: 100%; font-family: Arial; text-align:left; margin: 0; padding:0; color:#424242; font-size:12px; margin-top:0px; }
+
+/* text */
+p, h1, h2, h3, h4, li, ul {text-align:left; margin:0; padding:0; }
+h1, h2, h3, h4, h3 a {color:#02398B; font-weight:bold; font-size:20px; margin-bottom:15px;}
+h1{margin-bottom:10px; font-weight:bold; color:#fff; color:#988157;}
+h2, .col_1 h2{background-color:#EFE7CF; color:#9C8452; padding:5px 10px; margin-bottom:0px; font-size:12px;}
+h3 {margin-bottom:5px; font-weight:bold; color:#fff; color:#555; font-size:16px;}
+h4 {border-bottom: 1px solid #ccc; padding-bottom:5px; margin-bottom:5px; font-size:12px;}
+h5 {border-bottom: 1px solid #ccc; padding-bottom:5px; margin-bottom:5px; font-size:12px;}
+p, #col_1 li, #col_2 li{ line-height:160%;}/*Original:{font-size:100%; line-height:160%;}*/
+p{ margin-bottom:10px;}
+a {color:#004587; /*023467 (blue)*/}
+a:hover {text-decoration:none;}
+
+/* form */
+input, button, textarea, select, optgroup, option {font-family: inherit; font-size: inherit; font-style: inherit; font-weight: inherit;}
+input[type="text"] {width: 200px; border: 1px solid #CCC;}
+input[type="password"] {width: 200px;border: 1px solid #CCC;}
+input, button, textarea, select {*font-size: 100%;} /* purpose To enable resizing for IE @branch For IE6-Win, IE7-Win */
+textarea{ width:100%; height:100px;}
+
+.two_col_form label{ float: left; width: 100px;}
+.two_col_form input{}
+
+/*table*/
+table {margin:0px;}
+table td, table th{text-align:left; border-collapse: collapse; border-spacing: 0;}
+p, table {line-height: 160%;}
+
+/*other*/
+img {border: none;}
+hr {height:1px; color:#ccc; background: #F2F1E8; border:none;}
+.hr {border-bottom:1px solid #F2F1E8; padding-bottom:10px; margin-bottom:10px;}
+.hr2 {border-bottom:1px solid #F2F1E8; padding-bottom:5px; margin-bottom:5px;}
+.data_table td button, td .button{float:right;}
+.margin_right_5{ margin-right:5px;}
+.margin_right{ margin-right:10px;}
+.padding_right{ padding-right: 10px;}
+.padding_left{ padding-left: 10px;}
+.padding_20{padding: 20px;}
+
+/* NAVS
+-----------------------------------*/
+/*main nav*/
+.nav_wrp{padding-left:10px;
+ background-color:#0045ac;
+ border-bottom:5px solid #0080bd;
+ background:#023467;
+ border-bottom:10px solid #666;
+ background-color:#fff;}
+ul#nav, .nav li{margin:0; padding:0; list-style: none;}
+ul#nav{padding-top:0px;}
+ul#nav li{position:relative; float:left; font-weight:bold;}
+ul#nav li.hover a{background-color:#333;}
+ul#nav li a{
+ display:block;
+ margin:0;
+ padding: 5px 10px;
+ margin-top: 10px;
+ margin-bottom: 10px;
+ color:#fff;
+ background-color:#1e538a;
+ margin-right:5px;
+ -moz-border-radius: 2px;
+ -webkit-border-radius: 2px;
+}
+ul#nav li a.selected{background-color:#0080bd;}
+
+/**/
+#login_msg{float:right; clear: both; padding:0px; color:#eee; text-align:right;}
+#login_msg span {
+ display:block;
+ float: left;
+ margin:0;
+ padding: 5px 10px;
+ margin-top: 10px;
+ margin-bottom: 10px;}
+#login_msg a {
+ display:block;
+ float: left;
+ margin:0;
+ padding: 5px 10px;
+ margin-top: 10px;
+ margin-bottom: 10px;
+ color:#fff;
+ background-color:#eee;
+ color: #333;
+ margin-right:5px;
+ -moz-border-radius: 2px;
+ -webkit-border-radius: 2px;
+}
+
+/* LAYOUT
+-----------------------------------*/
+
+/*cols*/
+#main{ margin:10px;}
+
+.full_col{background-color:#fff; border:1px solid #DBE1E6; box-shadow: 0 0 3px #ddd;}
+.left_col{width:210px; position: absolute; font-size:12px; }
+.left_col_box {background-color:#fff; border:1px solid #DBE1E6; box-shadow: 0 0 3px #ddd;
+ -moz-border-radius: 5px;
+ -webkit-border-radius: 5x;
+ border-radius: 5px;
+}
+.left_col_box h2{
+ border:none;
+ -moz-border-radius: 5px;
+ -webkit-border-radius: 5x;
+ border-radius: 5px;
+}
+.right_col {
+ margin-left: 215px;
+ overflow:hidden;
+ text-align:left;
+ background-color:#fff;
+}
+
+/* FORMS
+-----------------------------------*/
+
+/*form table*/
+.form_table_min_width{width:600px;}
+.form_table label{float:left; padding-right:5px;} /*TODO: test if float is OK*/
+.form_table td.col1{width:120px;}
+.form_table td.col2{width:150px;}
+.form_table td.col3{width:170px;}
+.form_table td.col4{width:120px;}
+.form_table td.col5{}
+.form_table td.col23{width:320px;}
+/*helper widths*/
+.width_{}
+.table_toolbar{ }
+
+.list li{ margin-left: 15px; margin-bottom: 5px;}
+
+form textarea {height: 300px;}
+
+
+/* UTILITY
+-----------------------------------*/
+/* slightly enhanced, universal clearfix hack */
+.clearfix:after {
+ visibility: hidden;
+ display: block;
+ font-size: 0;
+ content: " ";
+ clear: both;
+ height: 0;
+ }
+.clearfix { display: inline-block; }
+/* start commented backslash hack \*/
+* html .clearfix { height: 1%; }
+.clearfix { display: block; }
+/* close commented backslash hack */
+
+.alpha{filter:alpha(opacity=35); -moz-opacity:0.35; opacity: 0.35;}
+.padding{padding:10px 0px;}
+.left{float:left;}
+.right, a.right{float:right;}
+.margin{margin:10px;}
+.margin_bottom{margin-bottom: 10px;}
+.margin_left{margin-left: 10px;}
+
+.margin_left5{margin-left: 5px;}
+.margin_right5{margin-right: 5px;}
+.margin_bottom5{margin-bottom: 5px;}
+
+.margin_top{margin-top: 10px;}
+.margin_top5{margin-top: 5px;}
+.hide{display:none;}
+.clr{clear:both;}
+.strong{ font-weight:bold;}
+.align_right{ text-align:right;}
+.red{color:Red;}
+.full_width, .width_full{ width:100%;}
+* html .width_full{float:left;}/*IE6 bug */
+.half_width{ width:50%;}
+.highlight{background-color: #ffc;}
+
+/*loader*/
+#loader{position:absolute; top:0; right:0;}
+#loader span{display:block; padding:5px 10px; background-color:#f00; color:#fff; font-style:italic; font-weight:bold;}
+
+/*icons*/
+.icon_back, .icon_excel, .icon_edit, .icon_add, .icon_user, .icon_blog, .icon_status, .icon_error, .icon_idea, .icon_help{padding:1px 0px 1px 20px; }
+.icon_edit{background: url(../images/icons/icon_edit.gif) no-repeat 0px 50%;}
+.icon_excel{background: url(../images/icons/icon_excel.png) no-repeat 0px 50%;}
+.icon_add{background: url(../images/icons/icon_add.gif) no-repeat 0px 50%;}
+.icon_user{background: url(../images/icons/icon_user.png) no-repeat 0px 50%;}
+.icon_blog{background: url(../images/icons/icon_blog.png) no-repeat 0px 50%;}
+.icon_status{background: url(../images/icons/icon_done.png) no-repeat 0px 50%;}
+.approveStatus_0{background: url(../images/icons/icon_star_2.png) no-repeat 4px 50%;}
+.icon_error{background: url(../images/icons/error_add.png) no-repeat 0px 50%;}
+.icon_idea{background: url(../images/icons/idea.png) no-repeat 0px 50%;}
+.icon_help{background: url(../images/icons/help_contents.gif) no-repeat 0px 50%;}
+.icon_back{background: url(../images/icons/icon_nav_back.gif) no-repeat 0px 50%;}
+
+
+/* BLOCKS
+-----------------------------------*/
+
+/*form*/
+input, select, textarea{/*margin-bottom:5px;*/}
+input[type="radio"], input[type="checkbox"]{margin-bottom:0px; margin-right:5px; margin-top:0px; margin-left:0px; }
+.radio, .checkbox {margin-bottom:0px; margin-right:5px; margin-top:0px; margin-left:0px;} /*again for IE6 because IE6 does not take type sudo class*/
+label{font-size:12px; margin-bottom:1px; display:block;}
+.section{padding:20px; border:1px solid #EFE7CF; margin-bottom:10px;}
+/*.sectiongrid{padding:0px; border:1px solid #EFE7CF; margin-bottom:10px;}*/
+.table{width:100%; font-size:12px;}
+* html .table{width:99%;}
+
+.form_error{ margin-left: 10px; color: #f00;}
+
+/*table paging*/
+.top_paging a:hover{
+background: -moz-linear-gradient(0% 170% 90deg, #b8b8b8, white);
+background: -webkit-gradient(linear, 0% 0%, 0% 170%, from(white), to(#b8b8b8));
+border-color: #99ccff;
+color: #333333;
+}
+.top_paging {margin-bottom:0px; margin-top:0px;}
+.top_paging .previous span, .top_paging .next span{
+display:block; height:18px; cursor:pointer;
+}
+.top_paging .previous, .top_paging .next{
+display:block; margin-left:5px; float: left;
+height:16px; width:16px; border:1px solid #ccc;}
+.top_paging .next{ margin-left: 5px; border-left: none; }
+.top_paging .previous span{
+font-weight: bold;
+background: url(../images/icons/arrow_left.gif) no-repeat 60% 58%;
+}
+.top_paging .next span{
+font-weight: bold;
+background: url(../images/icons/arrow_right.gif) no-repeat 60% 58%;
+}
+.top_paging select{ padding:0; margin-right: 10px; margin-left: 10px;}
+.top_paging .previous, .top_paging .next{
+-moz-border-radius: 3px;
+-webkit-border-radius: 3px;
+background: white url('button.png') 0 0 repeat-x; /* Image fallback */
+background: -moz-linear-gradient(0% 170% 90deg, #c4c4c4, white);
+background: -webkit-gradient(linear, 0% 0%, 0% 170%, from(white), to(#c4c4c4));
+border: 1px solid;
+border-color: #e6e6e6 #cccccc #cccccc #e6e6e6;
+border-radius: 3px;
+color: #404040;
+display: inline-block;
+font-family: "helvetica neue", helvetica, arial, freesans, "liberation sans", "numbus sans l", sans-serif;
+font-size: 13px;
+outline 0;
+padding: 5px 8px 5px;
+text-align: center;
+text-decoration: none;
+text-shadow: 1px 1px 0 white;
+white-space: nowrap;
+}
+
+.top_paging_status_text{line-height:28px; font-size:14px;}
+.top_paging_per_page_wrp{ margin-right:20px;}
+.top_paging_per_page_wrp select{ font-size:11px;}
+
+#content input, #content select, #content textarea {
+ border: 1px solid #CCCCCC;
+}
+
+/*texts*/
+h1{ color:#333; font-weight:bold; font-size:24px;}
+h1 span{color:#999;}
+h2 {background:transparent url(../images/gsprite_pg_slate_062209.gif) repeat-x scroll 0 0; color:#333; border:1px solid #DBE1E6;}
+.section h4 {border-bottom:1px solid #DBE1E6; color:#555555}
+
+.col_2 h2{ margin-bottom:5px;}
+.left_cont{ border:none; border:1px solid #DBE1E6; border-top:none;}
+.left_cont_inner{ padding:10px;}
+.col_1 h2{background-color:#d7d6d6; color:#333;}
+a{ color:#16387c}
+
+#header{ background-color: #101010;}
+
+/*nav*/
+ul#nav{ margin: 0px 0 0 0; padding-top: 0;}
+ul#nav li a{text-decoration:none; color: #eee}
+ul#nav li a:hover, ul.tabs li a:hover, ul.tabs2 li a:hover{text-decoration:underline;}
+
+ul.left_nav{ margin: 0; padding: 10px 20px 10px 10px;}
+ul.left_nav li{ margin: 0; padding: 0; list-style-type: none;}
+ul.left_nav li a{ display: block; padding: 5px 5px;
+ -moz-border-radius: 5px;
+ -webkit-border-radius: 5x;
+ border-radius: 5px; }
+ul.left_nav li a.selected {background-color: #eee; color: #111; text-decoration:none;}
+
+ol.breadcrumbs{ margin:0px 0 0px 0; padding:0px 0 10px 0;}
+ol.breadcrumbs li{ display:inline; margin:0; padding:0; color:#999; font-size:11px;}
+
+.status_bar{background:transparent url(../images/gsprite_pg_slate_062209.gif) repeat-x scroll 0 0; border:1px solid #DBE1E6;}
+ul#nav li a{background-color: Transparent; color:#eee; /*font-size: 22px; for ipad*/ }
+ul#nav li a.selected {background-color:#666; color:#fff;}
+
+
+/*popup*/
+.modal_popup_wrp_header{background:transparent url(../images/gsprite_pg_slate_062209.gif) repeat-x scroll 0 0;}
+.modal_popup_wrp_header p {color:#333;}
+.modal_popup_wrp{border:5px solid #DBE1E6;}
+
+/*table*/
+table.data_table{border-collapse: collapse; border-spacing: 0; border-top: 1px solid #DBE1E6; border-bottom: 1px solid #DBE1E6;
+
+}
+table.data_table td, table.data_table th{padding:5px 10px; font-size:11px; }
+table.data_table th{ background:url("http://s0.wp.com/wp-admin/images/gray-grad.png") repeat-x scroll left top #DFDFDF; color:#333;}
+table.data_table th.header{ color:#fff; }
+table.data_table td{ background-color:#f5f5f5; border-bottom: 1px solid #d4d8de;}
+
+table.data_table tr.alt td{ background-color:#fff;}
+table.data_table tbody tr:hover td, table.data_table tbody tr.alt:hover td {background-color: #ffc;}
+table.data_table tr td.table_toolbar{ background-color:#6688a4;}
+
+.button {
+ -moz-border-radius: 3px;
+ -webkit-border-radius: 3px;
+ background: white url('button.png') 0 0 repeat-x; /* Image fallback */
+ background: -moz-linear-gradient(0% 170% 90deg, #c4c4c4, white);
+ background: -webkit-gradient(linear, 0% 0%, 0% 170%, from(white), to(#c4c4c4));
+ border: 1px solid;
+ border-color: #e6e6e6 #cccccc #cccccc #e6e6e6;
+ border-radius: 3px;
+ color: #404040;
+ display: inline-block;
+ font-family: "helvetica neue", helvetica, arial, freesans, "liberation sans", "numbus sans l", sans-serif;
+ font-size: 13px;
+ outline 0;
+ padding: 5px 8px 5px;
+ text-align: center;
+ text-decoration: none;
+ text-shadow: 1px 1px 0 white;
+ white-space: nowrap; }
+
+ .button:hover {
+ background: -moz-linear-gradient(0% 170% 90deg, #b8b8b8, white);
+ background: -webkit-gradient(linear, 0% 0%, 0% 170%, from(white), to(#b8b8b8));
+ border-color: #99ccff;
+ color: #333333; }
+
+ .button:active {
+ position: relative;
+ top: 1px; }
+
+ .button:active, .button:focus {
+ background-position: 0 -25px;
+ background: -moz-linear-gradient(0% 170% 90deg, white, #dedede);
+ background: -webkit-gradient(linear, 0% 0%, 0% 170%, from(#dedede), to(white));
+ border-color: #8fc7ff #94c9ff #94c9ff #8fc7ff;
+ color: #1a1a1a;
+ text-shadow: 1px -1px 0 rgba(255, 255, 255, 0.5); }
+
+.section button, .status_bar button{margin-right:0px; margin-left:0px; }
+.data_table .button{font-size:11px; }
+
+/*popup search form*/
+#accountSearch .section{background:#E8EDF0 url(../images/page_bg_slate_070609.gif) repeat-x scroll 0 0;}
+
+.paging .previous, .paging .next{background:transparent url(../images/gsprite_pg_slate_062209.gif) repeat-x scroll 0 0%; border:1px solid #DBE1E6;}
+
+table.data_table tr.lead_status_row_1 td{ background-color:#FFFFCC;}
+
+/*message*/
+#message_wrp{text-align: center;}
+#message_wrp #message_box{
+ width:200px;
+ background-color: #FFFFE0;
+ border-left: 1px solid #E6DB55;
+ border-right: 1px solid #E6DB55;
+ border-bottom: 1px solid #E6DB55;
+ position: absolute;
+ z-index: 888888;
+ left: 50%;
+ margin-left: -100px;
+ padding: 5px;
+ font-weight: bold;
+ -moz-border-bottom-left-radius: 5px;
+ -webkit-border-bottom-left-radius: 5x;
+ border-bottom-left-radius: 5px;
+ -moz-border-bottom-right-radius: 5px;
+ -webkit-border-bottom-right-radius: 5x;
+ border-bottom-right-radius: 5px; }
+
+table.data_table tr.lead_status_row_1 td{background-color:#7FFFD4;}
+
+/*lead comments*/
+.comment p{padding:10px; background-color:#eee; border-bottom: 1px solid #ccc; margin-left:40px;}
+.comment_box p{padding: 0px; margin-left:40px;}
+.comment_box textarea{border: 1px solid #ccc; margin-bottom:10px;}
+
+.action_bar {padding: 5px; background-color:#eee; margin-bottom:5px; -moz-border-radius: 5px;
+ -webkit-border-radius: 5x;
+ border-radius: 5px; }
+.action_bar label, .action_bar a{ line-height: 17px;}
\ No newline at end of file
diff --git a/app/admin/content/images/.DS_Store b/app/admin/content/images/.DS_Store
new file mode 100644
index 0000000..46f7ed5
Binary files /dev/null and b/app/admin/content/images/.DS_Store differ
diff --git a/app/admin/content/images/icons/.DS_Store b/app/admin/content/images/icons/.DS_Store
new file mode 100644
index 0000000..5008ddf
Binary files /dev/null and b/app/admin/content/images/icons/.DS_Store differ
diff --git a/app/admin/content/images/icons/arrow_left.gif b/app/admin/content/images/icons/arrow_left.gif
new file mode 100644
index 0000000..932ade1
Binary files /dev/null and b/app/admin/content/images/icons/arrow_left.gif differ
diff --git a/app/admin/content/images/icons/arrow_right.gif b/app/admin/content/images/icons/arrow_right.gif
new file mode 100644
index 0000000..efb1263
Binary files /dev/null and b/app/admin/content/images/icons/arrow_right.gif differ
diff --git a/app/admin/controllers/Admin.js b/app/admin/controllers/Admin.js
new file mode 100644
index 0000000..cf65907
--- /dev/null
+++ b/app/admin/controllers/Admin.js
@@ -0,0 +1,47 @@
+(function ($, tmpl, html, service) {
+
+ var helpers = {};
+
+ return {
+
+ // Index action.
+ Index: function (params, view, callBack, onError) {
+ var content = tmpl(view, {}, helpers);
+
+ var btn = $('#croll', content),
+ btn2 = $('#list', content);
+
+ btn.click(function(){
+
+ service.send({
+ url: 'spider/hyps',
+ success: function(d){
+ console.log(d);
+ },
+ error: function(){
+
+ }
+ });
+
+ return false;
+ });
+
+ btn2.click(function(){
+
+ service.get({
+ url: 'hypoteka/list',
+ success: function(d){
+ //console.log(d);
+ },
+ error: function(){
+
+ }
+ });
+
+ return false;
+ });
+
+ callBack(content);
+ }
+ };
+})(jQuery, jQuery.tmpl, MVC.html, MVC.service)
\ No newline at end of file
diff --git a/app/admin/controllers/Blog.js b/app/admin/controllers/Blog.js
new file mode 100644
index 0000000..dcbcc6b
--- /dev/null
+++ b/app/admin/controllers/Blog.js
@@ -0,0 +1,130 @@
+(function ($, tmpl, html, service) {
+
+ var helpers = {
+ date: MVC.util.string.formatDate
+ };
+
+ return {
+
+ // Index action.
+ Index: function (params, view, callBack, onError) {
+
+ var pageSize = parseInt(params.p2),
+ index = parseInt(params.p1);
+
+ //
+ service.get({
+ url: 'blog/list/' + index + '/' + pageSize,
+ success: function (d) {
+
+ // Paging.
+ helpers.paging = function () {
+ return html.paging({
+ currentPage: index,
+ itemsPerPage: pageSize,
+ numberofItems: d.data.blogCount,
+ pageNumberPrefix: "#Blog/Index/",
+ pageNumberSuffix: "/" + pageSize + '/',
+ showPerPage: false
+ });
+ };
+
+ var content = tmpl(view, {
+ blogs: d.data.blogs
+ }, helpers);
+ callBack(content);
+ }
+ });
+ },
+ Edit: function (params, view, callBack, onError) {
+
+ service.get({
+ url: 'blog/view/' + params.p1,
+ success: function (d) {
+
+ var content = tmpl(view, {
+ blog: d.data
+ }, helpers);
+
+ // Bind From.
+ var form = $('form', content),
+ saveBtn = $('#save', content),
+ deleteBtn = $('#delete', content);
+
+ // Bind save click.
+ saveBtn.click(function(){
+
+ var fromData = form.serialize();
+
+ service.send({
+ data: fromData,
+ url: 'blog/update',
+ success: function (d) {
+
+ // Show message.
+ MVC.message.show({text: 'Saved!', hideDealy: 2000});
+ }
+ });
+
+ return false;
+ });
+
+ // Bind save click.
+ deleteBtn.click(function(){
+
+ var fromData = form.serialize();
+
+ service.send({
+ data: {
+ url: params.p1
+ },
+ url: 'blog/delete',
+ success: function (d) {
+
+ window.location.hash = 'Blog';
+
+ // Show message.
+ MVC.message.show({text: 'Deleted!', hideDealy: 2000});
+ }
+ });
+
+ return false;
+ });
+
+ callBack(content);
+ }
+ });
+ },
+ Create: function (params, view, callBack, onError) {
+
+ var content = tmpl(view, {}, helpers);
+
+ // Bind From.
+ var form = $('form', content),
+ saveBtn = $('#save', content);
+
+ // Bind save click.
+ saveBtn.click(function(){
+
+ var fromData = form.serialize();
+
+ service.send({
+ data: fromData,
+ url: 'blog/create',
+ success: function (d) {
+
+ window.location.hash = 'Blog';
+
+ // Show message.
+ MVC.message.show({text: d.message, hideDealy: 2000});
+ }
+ });
+
+ return false;
+ });
+
+ callBack(content);
+ }
+ };
+
+})(jQuery, jQuery.tmpl, MVC.html, MVC.service)
\ No newline at end of file
diff --git a/app/admin/controllers/Comment.js b/app/admin/controllers/Comment.js
new file mode 100644
index 0000000..a5bda71
--- /dev/null
+++ b/app/admin/controllers/Comment.js
@@ -0,0 +1,100 @@
+(function ($, tmpl, html, service) {
+
+ var helpers = {
+ date: MVC.util.string.formatDate
+ };
+
+ return {
+
+ // Index action.
+ Index: function (params, view, callBack, onError) {
+
+ var pageSize = parseInt(params.p2),
+ index = parseInt(params.p1),
+ campaignGuid = params.p3;
+
+ service.get({
+ url: 'blog/listcomments/1/10',
+ success: function (d) {
+
+ // Paging.
+ helpers.paging = function () {
+ return html.paging({
+ currentPage: index,
+ itemsPerPage: pageSize,
+ numberofItems: d.data.commentCount,
+ pageNumberPrefix: "#Comment/Index/",
+ pageNumberSuffix: "/" + pageSize + '/',
+ showPerPage: false
+ });
+ };
+
+ var content = tmpl(view, {
+ comments: d.data.comment
+ }, helpers);
+ callBack(content);
+ }
+ });
+ },
+ Edit: function (params, view, callBack, onError) {
+
+ service.get({
+ url: 'Comment/view/' + params.p1,
+ success: function (d) {
+
+ var content = tmpl(view, {
+ blog: d.data
+ }, helpers);
+
+ // Bind From.
+ var form = $('form', content),
+ saveBtn = $('#save', content),
+ deleteBtn = $('#delete', content);
+
+ // Bind save click.
+ saveBtn.click(function(){
+
+ var fromData = form.serialize();
+
+ service.send({
+ data: fromData,
+ url: 'blog/update',
+ success: function (d) {
+
+ // Show message.
+ MVC.message.show({text: 'Saved!', hideDealy: 2000});
+ }
+ });
+
+ return false;
+ });
+
+ // Bind save click.
+ deleteBtn.click(function(){
+
+ var fromData = form.serialize();
+
+ service.send({
+ data: {
+ url: params.p1
+ },
+ url: 'blog/delete',
+ success: function (d) {
+
+ window.location.hash = 'Blog';
+
+ // Show message.
+ MVC.message.show({text: 'Deleted!', hideDealy: 2000});
+ }
+ });
+
+ return false;
+ });
+
+ callBack(content);
+ }
+ });
+ }
+ };
+
+})(jQuery, jQuery.tmpl, MVC.html, MVC.service)
\ No newline at end of file
diff --git a/app/admin/controllers/Dash.js b/app/admin/controllers/Dash.js
new file mode 100644
index 0000000..be442bb
--- /dev/null
+++ b/app/admin/controllers/Dash.js
@@ -0,0 +1,14 @@
+(function ($, tmpl, html, service) {
+
+ var helpers = {};
+
+ return {
+
+ // Index action.
+ Index: function (params, view, callBack, onError) {
+ var content = tmpl(view, {}, helpers);
+
+ callBack(content);
+ }
+ };
+})(jQuery, jQuery.tmpl, MVC.html, MVC.service)
\ No newline at end of file
diff --git a/app/admin/controllers/File.js b/app/admin/controllers/File.js
new file mode 100644
index 0000000..ee2859d
--- /dev/null
+++ b/app/admin/controllers/File.js
@@ -0,0 +1,122 @@
+(function ($, tmpl, html, service) {
+
+ var helpers = {};
+
+ return {
+
+ // Index action.
+ Index: function (params, view, callBack, onError) {
+
+ service.get({
+ url: 'file/list',
+ success: function (d) {
+
+ var content = tmpl(view, {files: d.data}, helpers);
+
+ // Delete file binding.
+ $('.deleteFileBtn', content).click(function(){
+
+ var that = $(this),
+ href = that.attr('href');
+
+ service.send({
+ url: 'file/delete',
+ data: {
+ name: href
+ },
+ success: function (d) {
+
+ that.closest('tr').hide();
+
+ }
+ });
+
+ console.log(href)
+
+ return false;
+ });
+
+ callBack(content);
+ }
+ });
+ },
+ Upload: function (params, view, callBack, onError) {
+
+ var content = tmpl(view, {}, helpers);
+
+ var messageWrp = $('#fileDataMsg', content);
+
+ // Source:
+ // http://www.matlus.com/html5-file-upload-with-progress/
+
+ $('#fileToUpload', content).change(function(){
+
+ var file = document.getElementById('fileToUpload').files[0];
+
+ if (file) {
+
+ var fileSize = 0;
+
+ if (file.size > 1024 * 1024){
+ fileSize = (Math.round(file.size * 100 / (1024 * 1024)) / 100).toString() + 'MB';
+ } else {
+ fileSize = (Math.round(file.size * 100 / 1024) / 100).toString() + 'KB';
+ }
+
+ // File info message.
+ messageWrp.html('Name: ' + file.name + ' Size: ' + fileSize + ' Type: ' + file.type);
+ }
+ });
+
+ $('#uploadFileBtn', content).click(function () {
+
+ // Form data.
+ var fd = new FormData();
+ fd.append("fileToUpload", document.getElementById('fileToUpload').files[0]);
+
+ var xhr = new XMLHttpRequest();
+
+ // Progress listerner.
+ xhr.upload.addEventListener("progress", function (evt) {
+ if (evt.lengthComputable) {
+ var percentComplete = Math.round(evt.loaded * 100 / evt.total);
+ messageWrp.html(percentComplete.toString() + '%');
+ }
+ else {
+ messageWrp.html('unable to compute');
+ }
+ }, false);
+
+ // On finished.
+ xhr.addEventListener("load", function (evt) {
+
+ // Parse json.
+ var obj = $.parseJSON(evt.target.responseText);
+
+ window.location.hash = 'File';
+
+ // Show success message.
+ MVC.message.show({text: obj.message, hideDealy: 2000});
+ }, false);
+
+ // On failed.
+ xhr.addEventListener("error", function (evt) {
+ MVC.message.show({text: 'There was an error attempting to upload the file.',
+ hideDealy: 2000});
+ }, false);
+
+ // On cancel.
+ xhr.addEventListener("abort", function (evt) {
+ MVC.message.show({text: 'The upload has been canceled by the user or the browser dropped the connection.',
+ hideDealy: 2000});
+ }, false);
+
+ xhr.open("POST", "/upload");
+ xhr.send(fd);
+ return false;
+ });
+
+ callBack(content);
+ }
+ };
+})(jQuery, jQuery.tmpl, MVC.html, MVC.service)
\ No newline at end of file
diff --git a/app/admin/controllers/Page.js b/app/admin/controllers/Page.js
new file mode 100644
index 0000000..3dbd825
--- /dev/null
+++ b/app/admin/controllers/Page.js
@@ -0,0 +1,131 @@
+(function ($, tmpl, html, service) {
+
+ var helpers = {
+ date: MVC.util.string.formatDate
+ };
+
+ return {
+
+ // Index action.
+ Index: function (params, view, callBack, onError) {
+
+ var pageSize = parseInt(params.p2),
+ index = parseInt(params.p1),
+ campaignGuid = params.p3;
+
+ //
+ service.get({
+ url: 'page/list/' + index + '/' + pageSize,
+ success: function (d) {
+
+ // Paging.
+ helpers.paging = function () {
+ return html.paging({
+ currentPage: index,
+ itemsPerPage: pageSize,
+ numberofItems: d.data.pageCount,
+ pageNumberPrefix: "#Page/Index/",
+ pageNumberSuffix: "/" + pageSize + '/',
+ showPerPage: false
+ });
+ };
+
+ var content = tmpl(view, {
+ pages: d.data.pages
+ }, helpers);
+ callBack(content);
+ }
+ });
+ },
+ Edit: function (params, view, callBack, onError) {
+
+ service.get({
+ url: 'page/view/' + params.p1,
+ success: function (d) {
+
+ var content = tmpl(view, {
+ page: d.data
+ }, helpers);
+
+ // Bind From.
+ var form = $('form', content),
+ saveBtn = $('#save', content),
+ deleteBtn = $('#delete', content);
+
+ // Bind save click.
+ saveBtn.click(function(){
+
+ var fromData = form.serialize();
+
+ service.send({
+ data: fromData,
+ url: 'page/update',
+ success: function (d) {
+
+ // Show message.
+ MVC.message.show({text: 'Page was saged.', hideDealy: 2000});
+ }
+ });
+
+ return false;
+ });
+
+ // Bind save click.
+ deleteBtn.click(function(){
+
+ var fromData = form.serialize();
+
+ service.send({
+ data: {
+ url: params.p1
+ },
+ url: 'page/delete',
+ success: function (d) {
+
+ window.location.hash = 'Page';
+
+ // Show message.
+ MVC.message.show({text: 'Page was deleted!', hideDealy: 2000});
+ }
+ });
+
+ return false;
+ });
+
+ callBack(content);
+ }
+ });
+ },
+ Create: function (params, view, callBack, onError) {
+
+ var content = tmpl(view, {}, helpers);
+
+ // Bind From.
+ var form = $('form', content),
+ saveBtn = $('#save', content);
+
+ // Bind save click.
+ saveBtn.click(function(){
+
+ var fromData = form.serialize();
+
+ service.send({
+ data: fromData,
+ url: 'page/create',
+ success: function (d) {
+
+ window.location.hash = 'Page';
+
+ // Show message.
+ MVC.message.show({text: 'Page was created!', hideDealy: 2000});
+ }
+ });
+
+ return false;
+ });
+
+ callBack(content);
+ }
+ };
+
+})(jQuery, jQuery.tmpl, MVC.html, MVC.service)
\ No newline at end of file
diff --git a/app/admin/controllers/Template.js b/app/admin/controllers/Template.js
new file mode 100644
index 0000000..644d20d
--- /dev/null
+++ b/app/admin/controllers/Template.js
@@ -0,0 +1,49 @@
+(function ($, tmpl, html, service) {
+
+ var helpers = {};
+
+ return {
+
+ // Index action.
+ Index: function (params, view, callBack, onError) {
+
+ // Get template
+ service.get({
+ url: 'template/get/' + params.p1,
+ success: function (d) {
+
+ var content = tmpl(view, {
+ template: d.data
+ });
+
+ var form = $('form', content),
+ saveBtn = $('#save', content);
+
+ saveBtn.click(function(){
+
+ var fromData = form.serialize();
+
+ // Add page param.
+ fromData = fromData + '&page=' + params.p1;
+
+ // Save to server.
+ service.send({
+ data: fromData,
+ url: 'template/update',
+ success: function (d) {
+
+ // Show message.
+ MVC.message.show({text: 'Saved!', hideDealy: 2000});
+ }
+ });
+
+ return false;
+ });
+
+ callBack(content);
+ }
+ });
+ }
+ };
+
+})(jQuery, jQuery.tmpl, MVC.html, MVC.service)
\ No newline at end of file
diff --git a/app/admin/controllers/User.js b/app/admin/controllers/User.js
new file mode 100644
index 0000000..4d7139c
--- /dev/null
+++ b/app/admin/controllers/User.js
@@ -0,0 +1,176 @@
+(function ($, tmpl, util, html, service) {
+
+ var helpers = {
+ truncate: util.truncate,
+ formatDate: util.string.formatDate,
+ helpers: html.select
+ };
+
+ // Get user decision.
+ var userSession = MVC.session.get('user');
+
+ // Creating menu entitelment.
+ if (userSession.userType === 'root') {
+ helpers.getOrgControl = function (name, list, selected) {
+
+ var selectList = [];
+
+ // Need to remap.
+ $.each(list, function(i, d){
+ selectList.push({
+ value: d.guid,
+ text: d.name
+ });
+ });
+
+ return html.select(name, selectList, selected);
+ }
+ } else {
+ helpers.getOrgControl = function (name, list, selected) {
+ return '' + userSession.organizationName + '';
+ };
+ }
+
+ return {
+
+ // Index action.
+ Index: function (params, view, callBack, onError) {
+
+ var url = 'user/list';
+
+ service.get({
+ url: url,
+ success: function (d) {
+
+ var pageSize = parseInt(params.p2),
+ index = parseInt(params.p1);
+
+ // Paging.
+ helpers.paging = function () {
+ return html.paging({
+ currentPage: index,
+ itemsPerPage: pageSize,
+ numberofItems: 100,
+ pageNumberPrefix: "#/User/Index/",
+ pageNumberSuffix: "/" + 10 + '/',
+ showPerPage: true
+ });
+ };
+
+ var content = tmpl(view, {
+ users: d.data.users
+ }, helpers);
+ callBack(content);
+ }
+ });
+ },
+ View: function (params, view, callBack, onError) {
+
+ service.get({
+ url: 'user/view/' + params.p1,
+ success: function (d) {
+
+ var content = tmpl(view, {
+ user: d.data.user
+ }, helpers);
+
+ var deleteBtn = $('#deleteBtn', content);
+
+ // Bind save click.
+ deleteBtn.click(function(){
+
+ // Add guid.
+ service.send({
+ data: {guid: params.p1},
+ url: 'user/delete',
+ success: function (d) {
+
+ window.location.hash = 'User';
+
+ // Show message.
+ MVC.message.show({text: 'User was updated!', hideDealy: 2000});
+ }
+ });
+
+ return false;
+ });
+
+ callBack(content);
+ }
+ });
+ },
+ Edit: function (params, view, callBack, onError) {
+
+ var userGuid = params.p1;
+
+ service.get({
+ url: 'user/view/' + userGuid,
+ success: function (d) {
+
+ var content = tmpl(view, {
+ user: d.data.user,
+ session: userSession
+ }, helpers);
+
+ // Bind From.
+ var form = $('form', content),
+ saveBtn = $('#saveBtn', content);
+
+ // Bind save click.
+ saveBtn.click(function(){
+
+ var fromData = form.serialize();
+
+ // Add guid.
+ service.send({
+ data: fromData,
+ url: 'user/update',
+ success: function (d) {
+
+ //window.location.hash = 'User';
+
+ // Show message.
+ MVC.message.show({text: 'User was updated!', hideDealy: 2000});
+ }
+ });
+ return false;
+ });
+ callBack(content);
+ }
+ });
+ },
+ Create: function (params, view, callBack, onError) {
+
+ var content = tmpl(view, {
+ session: userSession
+ }, helpers);
+
+ // Bind From.
+ var form = $('form', content),
+ saveBtn = $('#saveBtn', content);
+
+ // Bind save click.
+ saveBtn.click(function(){
+
+ var fromData = form.serialize();
+
+ service.send({
+ data: fromData,
+ url: 'user/create',
+ success: function (d) {
+
+ window.location.hash = 'User';
+
+ // Show message.
+ MVC.message.show({text: 'User was created!', hideDealy: 2000});
+ }
+ });
+
+ return false;
+ });
+
+ callBack(content);
+ }
+ };
+
+})(jQuery, jQuery.tmpl, MVC.util, MVC.html, MVC.service)
\ No newline at end of file
diff --git a/app/admin/controllers/Zone.js b/app/admin/controllers/Zone.js
new file mode 100644
index 0000000..06bae2d
--- /dev/null
+++ b/app/admin/controllers/Zone.js
@@ -0,0 +1,127 @@
+(function ($, tmpl, html, service) {
+
+ var helpers = {
+ date: MVC.util.string.formatDate
+ };
+
+ return {
+
+ // Index action.
+ Index: function (params, view, callBack, onError) {
+
+ //
+ service.get({
+ url: 'zone/list',
+ success: function (d) {
+
+ // Paging.
+ helpers.paging = function () {
+ return html.paging({
+ currentPage: 1,
+ itemsPerPage: 10,
+ numberofItems: 100,
+ pageNumberPrefix: "#/Zone/Index/",
+ pageNumberSuffix: "/" + 10 + '/',
+ showPerPage: false
+ });
+ };
+
+ var content = tmpl(view, {
+ zones: d.data
+ }, helpers);
+ callBack(content);
+ }
+ });
+ },
+ Edit: function (params, view, callBack, onError) {
+
+ service.get({
+ url: 'zone/view/' + params.p1,
+ success: function (d) {
+
+ var content = tmpl(view, {
+ zone: d.data
+ }, helpers);
+
+ // Bind From.
+ var form = $('form', content),
+ saveBtn = $('#save', content),
+ deleteBtn = $('#delete', content);
+
+ // Bind save click.
+ saveBtn.click(function(){
+
+ var fromData = form.serialize();
+
+ service.send({
+ data: fromData,
+ url: 'zone/update',
+ success: function (d) {
+
+ // Show message.
+ MVC.message.show({text: d.message, hideDealy: 2000});
+ }
+ });
+
+ return false;
+ });
+
+ // Bind save click.
+ deleteBtn.click(function(){
+
+ var fromData = form.serialize();
+
+ service.send({
+ data: {
+ key: params.p1
+ },
+ url: 'zone/delete',
+ success: function (d) {
+
+ window.location.hash = 'Zone';
+
+ // Show message.
+ MVC.message.show({text: d.message, hideDealy: 2000});
+ }
+ });
+
+ return false;
+ });
+
+ callBack(content);
+ }
+ });
+ },
+ Create: function (params, view, callBack, onError) {
+
+ var content = tmpl(view, {}, helpers);
+
+ // Bind From.
+ var form = $('form', content),
+ saveBtn = $('#save', content);
+
+ // Bind save click.
+ saveBtn.click(function(){
+
+ var fromData = form.serialize();
+
+ service.send({
+ data: fromData,
+ url: 'zone/create',
+ success: function (d) {
+
+ window.location.hash = 'Zone';
+
+ // Show message.
+ MVC.message.show({text: d.message, hideDealy: 2000});
+ }
+ });
+
+ return false;
+ });
+
+ callBack(content);
+ }
+ };
+
+})(jQuery, jQuery.tmpl, MVC.html, MVC.service)
\ No newline at end of file
diff --git a/app/admin/index.html b/app/admin/index.html
new file mode 100644
index 0000000..46a6513
--- /dev/null
+++ b/app/admin/index.html
@@ -0,0 +1,55 @@
+
+
+
+
+ Portal
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/admin/install.html b/app/admin/install.html
new file mode 100644
index 0000000..1602742
--- /dev/null
+++ b/app/admin/install.html
@@ -0,0 +1,175 @@
+
+
+
+
+
+ Node.js MVC CMS
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/admin/library/.DS_Store b/app/admin/library/.DS_Store
new file mode 100644
index 0000000..ac035b8
Binary files /dev/null and b/app/admin/library/.DS_Store differ
diff --git a/app/admin/library/MVC.config.js b/app/admin/library/MVC.config.js
new file mode 100644
index 0000000..ca0549f
--- /dev/null
+++ b/app/admin/library/MVC.config.js
@@ -0,0 +1,14 @@
+(function() {
+
+ //creates namespace
+ MVC.util.createNs("MVC.config");
+
+ MVC.config = {
+ service: {
+ getUrl: '/json/',
+ postUrl: '/json/',
+ extension: '', //.JSON
+ dataType: 'json'
+ }
+ };
+}());
\ No newline at end of file
diff --git a/app/admin/library/MVC.html.js b/app/admin/library/MVC.html.js
new file mode 100644
index 0000000..db14616
--- /dev/null
+++ b/app/admin/library/MVC.html.js
@@ -0,0 +1,199 @@
+///
+
+/**
+* @fileoverview html helpers.
+*
+* @author dpirek@gmail.com (David Pirek)
+*/
+
+(function ($, String, Util) {
+
+ //creates namespace
+ Util.createNs("MVC.html");
+
+ MVC.html = {
+
+ /* HTML helper (MVC style)
+ ------------------------------
+
+ //notes
+ works similar like HTML helpers in the MVC design pattern
+
+ //example
+ var b = FNG.Html.Button({text : "click here", id : "my_id", class : "myclass"});
+ console.log(b);
+ */
+
+
+ select: function (name, d, selected) {
+
+ var sb = String.stringBuilder(); //string builder is fast!
+
+ sb.append('');
+
+ return sb.toString();
+ },
+ link: function (d) { //create: create window
+ var m = "{text}",
+ v = String.template(d, m);
+ return v;
+ },
+ element: function (d, e) { //create: create window
+
+ /*
+ note: creates any alement
+
+ d : object with element properties
+ e : element name (tag name
+ */
+
+ var sb = String.stringBuilder(); //string builder is fast!
+
+ sb.append("<" + e + " ");
+
+ $.each(d, function (i, val) {
+ //leavs out 'text' which is for the text value :)
+ if (i != "text") {
+ sb.append(i + "=\"{" + i + "}\" ");
+ }
+ });
+
+ sb.append(">{text}" + e + ">");
+
+ return String.template(d, sb.toString());
+ },
+ messageBox: function () {
+
+ /*
+ note: example of a more complex HTML helper
+ */
+
+ var sb = String.stringBuilder(); //string builder is fast!
+
+ sb.append("");
+ sb.append("{message}");
+ sb.append("
");
+ //
+ return String.template(d, sb.toString());
+ },
+ divPopup: function (o) {
+
+ //static model
+ var model = "";
+
+ //object merge
+ $.extend({ title: "Title", content: "content
" }, o);
+
+ //merges object to string
+ return String.template(o, model);
+ },
+ paging: function (options) {
+
+ var settings = {
+ currentPage: 1,
+ itemsPerPage: 10,
+ numberofItems: 100,
+ pageNumberPrefix: "",
+ pageNumberSuffix: "",
+ separator: "of",
+ perPageText: "Show rows:",
+ showPerPage: false
+ };
+
+ $.extend(settings, options);
+
+ var o = settings;
+
+ //gets number of pages
+ var numberOfPages = (o.numberofItems / o.itemsPerPage).toFixed();
+
+ //add one if .toFixed() rounds down
+ if (o.numberofItems > (numberOfPages * o.itemsPerPage)) {
+ numberOfPages++;
+ }
+
+ var sb = String.stringBuilder();
+
+ //showes paging if needed
+ if (numberOfPages >= 1) {
+
+ sb.append(" ");
+
+ sb.append(" ");
+
+ if (!(o.currentPage == 1)) {
+ sb.append(" ");
+ }
+ else {
+ sb.append(" ");
+ }
+
+ if (!(o.currentPage == numberOfPages)) {
+
+ sb.append(" ");
+ }
+ else {
+ sb.append("");
+ }
+
+ sb.append("");
+
+ //status text
+ sb.append("");
+ sb.append("" + o.currentPage + " ");
+ sb.append(o.separator);
+ sb.append(" " + numberOfPages + " ");
+ sb.append("");
+
+ var currentOption = function (a, current) {
+
+ var sb = String.stringBuilder();
+
+ $.each(a, function (i, d) {
+
+ if (d == current) {
+ sb.append("");
+ }
+ else {
+ sb.append("");
+ }
+
+ });
+
+ return sb.toString();
+
+ }
+
+ if (o.showPerPage) {
+
+ //show rows
+ sb.append("");
+ sb.append("" + o.perPageText + " ");
+ sb.append("");
+ sb.append("");
+ }
+
+ sb.append(""); //end tag
+
+ }
+
+ return sb.toString();
+
+ }
+ };
+
+
+})(jQuery, MVC.util.string, MVC.util);
\ No newline at end of file
diff --git a/app/admin/library/MVC.message.js b/app/admin/library/MVC.message.js
new file mode 100644
index 0000000..cc325b4
--- /dev/null
+++ b/app/admin/library/MVC.message.js
@@ -0,0 +1,41 @@
+///
+
+/**
+* @fileoverview html helpers.
+*
+* @author dpirek@gmail.com (David Pirek)
+*/
+
+(function ($, String, Util) {
+
+ //
+ var messageBox = $('#message_box');
+
+ //creates namespace
+ Util.createNs("MVC.message");
+
+ MVC.message = {
+ show: function(settings){
+
+ messageBox.text(settings.text).show();
+
+ // Hide message if delay is specified.
+ if(settings.hideDealy){
+ var t = setTimeout(function(){
+ MVC.message.hide();
+ }, settings.hideDealy);
+ }
+ },
+ hide: function(settings){
+ messageBox.fadeOut(500, function(){
+ messageBox.text('');
+ });
+ },
+ showLoader: function(){
+ messageBox.text('loading...').show();
+ },
+ hideLoader: function(){
+ messageBox.text('').hide();
+ }
+ };
+})(jQuery, MVC.util.string, MVC.util);
\ No newline at end of file
diff --git a/app/admin/library/MVC.service.js b/app/admin/library/MVC.service.js
new file mode 100644
index 0000000..0a78188
--- /dev/null
+++ b/app/admin/library/MVC.service.js
@@ -0,0 +1,70 @@
+///
+
+/**
+* @fileoverview core utility class.
+*
+* @author dpirek@gmail.com (David Pirek)
+*/
+
+(function($) {
+
+ //creates namespace
+ if (typeof MVC == "undefined" || !MVC) {
+ window.MVC = {};
+ };
+
+ MVC.service = {
+ _log: function(d){
+ // Service logging...
+
+ },
+ get: function (settings) {
+
+ var defauls = {
+
+ };
+
+ $.ajax({
+ dataType: MVC.config.service.dataType,
+ type: 'get',
+ data: settings.data,
+ url: MVC.config.service.getUrl + settings.url + MVC.config.service.extension,
+ success: function (d) {
+ settings.success(d);
+ },
+ error: function(d){
+
+ // Error call back.
+ settings.error(d);
+
+ // Service error log.
+ MVC.service._log(d);
+ }
+ });
+ },
+ send: function(settings) {
+
+ //
+ var defauls = {};
+
+ $.ajax({
+ dataType: MVC.config.service.dataType,
+ type: 'post',
+ data: settings.data,
+ url: MVC.config.service.postUrl + settings.url + MVC.config.service.extension,
+ success: function (d) {
+ settings.success(d);
+ },
+ error: function(d){
+
+ // Error call back.
+ settings.error(d);
+
+ // Service error log.
+ MVC.service._log(d);
+ }
+ });
+ }
+ };
+
+}(jQuery));
\ No newline at end of file
diff --git a/app/admin/library/MVC.session.js b/app/admin/library/MVC.session.js
new file mode 100644
index 0000000..ae70f3c
--- /dev/null
+++ b/app/admin/library/MVC.session.js
@@ -0,0 +1,35 @@
+///
+
+/**
+* @fileoverview core session class.
+*
+* @author dpirek@gmail.com (David Pirek)
+*/
+
+(function($) {
+
+ //creates namespace
+ if (typeof MVC == "undefined" || !MVC) {
+ window.MVC = {};
+ };
+
+ var session = {};
+
+ MVC.session = {
+ get: function (key) {
+
+ if(session[key]){
+ return session[key];
+ } else {
+ return {
+ message: 'no data'
+ };
+ }
+ },
+ set: function(key, data) {
+ session[key] = data;
+ return true;
+ }
+ };
+
+}(jQuery));
\ No newline at end of file
diff --git a/app/admin/library/MVC.util.js b/app/admin/library/MVC.util.js
new file mode 100644
index 0000000..44420f4
--- /dev/null
+++ b/app/admin/library/MVC.util.js
@@ -0,0 +1,39 @@
+///
+
+/**
+* @fileoverview core utility class.
+*
+* @author dpirek@gmail.com (David Pirek)
+*/
+
+(function($) {
+
+ //creates namespace
+ if (typeof MVC == "undefined" || !MVC) {
+ window.MVC = {};
+ };
+
+ MVC.util = {
+ truncate: function (string, length) {
+ if (typeof string === "undefined" || string == null || string === '') {
+ return "";
+ }
+ if (string.length < length) {
+ return string;
+ }
+ return '' + string.substring(0, length) + ' …';
+ },
+ createNs: function() {
+ var o, d;
+ $.each(arguments, function(v) {
+ d = arguments[1].split(".");
+ o = window[d[0]] = window[d[0]] || {};
+ $.each(d.slice(1), function(v2) {
+ o = o[arguments[1]] = o[arguments[1]] || {};
+ });
+ });
+ return o;
+ }
+ };
+
+}(jQuery));
\ No newline at end of file
diff --git a/app/admin/library/MVC.util.string.js b/app/admin/library/MVC.util.string.js
new file mode 100644
index 0000000..1cab405
--- /dev/null
+++ b/app/admin/library/MVC.util.string.js
@@ -0,0 +1,149 @@
+///
+
+/**
+* @fileoverview string utils.
+*
+* @author dpirek@gmail.com (David Pirek)
+*/
+(function () {
+
+ // Create namespace.
+ MVC.util.createNs("MVC.util.string");
+
+ //
+ MVC.util.string = {
+ isEmpty: function (str) {
+
+ if (str.replace(/\s/g, "") == "") {
+ return true;
+ }
+ else {
+ return false;
+ }
+ },
+ stringBuilder: function () {
+
+ /* StringBuilder
+ ------------------------------
+
+ //notes
+ works like a regular stringbuilder
+
+ //example
+ var sb = FNG.Util.String.StringBuilder();
+ sb.append("hi ");
+ sb.append("dave");
+ sb.append(" !");
+ console.log(sb.toString());
+ */
+
+ var s = [];
+ return {
+ // appends
+ append: function (v) {
+ if (v) {
+ s.push(v);
+ }
+ },
+ // clears
+ clear: function () {
+ s.length = 1;
+ },
+ // converts to string
+ toString: function () {
+ return s.join("");
+ }
+ }
+ },
+ template: function (m, v) {
+ v = v.replace(/\{[^\}]*\}/g, function (key) {
+ return m[key.slice(1, -1)] || '';
+ });
+ return v;
+ },
+ splitHashLink: function (u) {
+ var a = u.split("#");
+
+ if (a[1]) {
+ var b = a[1].split("/");
+
+ //returs array or string
+ if (b[1]) {
+ return b;
+ } else {
+ return b[0];
+ }
+ }
+ else {
+ return "";
+ }
+ },
+ trimHashLink: function (u) {
+ var a = u.split("#");
+ return a[1];
+ },
+ getHashValue: function () {
+ return this.trimHashLink(window.location.hash);
+ },
+ getHost: function (url) {
+ var host = url.split('/');
+ return host[2];
+ },
+ linkParams: function (u) {
+ var p = window.location.pathname;
+ return p.split("/");
+
+ },
+ getRoot: function () {
+ var W = window.location;
+ return W.protocol + "//" + W.host + "/";
+ },
+ isEmail: function (e) {
+ var r = /^([A-Za-z0-9_\-\.])+\@([A-Za-z0-9_\-\.])+\.([A-Za-z]{2,4})$/;
+ if (r.test(e) == false) {
+ return false;
+ }
+ return true;
+ },
+ createUrl: function(str) {
+
+ // First cleanup.
+ str = str.replace(/^\s+|\s+$/g, "");
+
+ var sF = "ěščřžýáíéĚŠČŘŽÝÁÍÉŮůÚúň",
+ sT = "escrzyaieescrzyaieuuuun",
+ from = sF.split(""),
+ to = sT.split("");
+
+ for (var i = 0, l = from.length; i < l; i++) {
+ str = str.replace(new RegExp(from[i], "g"), to[i]);
+ }
+
+ str = str.replace(/[^a-zA-Z0-9 -]/g, "").replace(/\s+/g, "-").toLowerCase();
+
+ return str;
+ },
+ formatDate: function (jsonDate) {
+
+ // Node.js json date parse.
+ var date = new Date(jsonDate);
+
+ // Add hours for czech timeDate.
+ //date.setHours(6 + date.getHours());
+
+ return date.getDate() + "." + date.getMonth() + "." + date.getFullYear() + ' ' + date.getHours() + ':' + date.getMinutes() + '.' + date.getSeconds();
+ },
+ getAge: function (jsonDate) {
+ // NOT WOKRING.
+ var date = new Date(jsonDate),
+ now = new Date();
+
+ now.setHours(4 + now.getHours());
+
+ var age = new Date(now - date)
+
+ return now.getHours();
+ }
+ };
+
+} ());
\ No newline at end of file
diff --git a/app/admin/library/jquery/jquery.MVC.js b/app/admin/library/jquery/jquery.MVC.js
new file mode 100644
index 0000000..b83375c
--- /dev/null
+++ b/app/admin/library/jquery/jquery.MVC.js
@@ -0,0 +1,375 @@
+/*!
+* jQuery JavaScript MVC routing plugin
+* http://www.davidpirek.com/javascript-mvc-jquery-plugin-framework
+*
+* Copyright 2010, David Pirek
+* Licensed: not sure yet send me an email: dpirek@gmail.com
+*
+*/
+
+(function ($) {
+
+ // Get hash function.
+ var getHashValue = function () {
+
+ var hasValue = window.location.hash.substring(1);
+
+ // Sets default.
+ if (typeof hasValue == "undefined") {
+ return false;
+ }
+ var hashLen = hasValue.indexOf("?");
+ if (hashLen > 0) {
+ hasValue = hasValue.substring(0, hashLen);
+ }
+ return hasValue;
+ };
+
+ var onHashChange = function (event, stopTime) {
+
+ // Last hash.
+ var lastHash = getHashValue();
+
+ var i = setInterval(function () {
+ var hash = getHashValue();
+ if (hash !== lastHash) {
+ event(hash);
+ lastHash = hash;
+ }
+ }, 100);
+
+ // Allows for "expiring" has listerner (needed for testing purposes).
+ if (stopTime > 0) {
+ setTimeout(function () {
+ clearInterval(i);
+ }, stopTime);
+ }
+ };
+
+ // Gets random parameter.
+ var getRandomParam = function () {
+ return "?_r=" + Math.random() * 5;
+ };
+
+ var removeFristDash = function (path) {
+
+ // Remove '/' as first char.
+ if (path.charAt(0) === '/') {
+ path = path.substr(1);
+ }
+
+ return path;
+
+ };
+
+ var parsePlaceHolders = function (path) {
+
+ //path = removeFristDash(path);
+
+ // // Remove '/' as first char.
+ // if (path.charAt(0) === '/') {
+ // path = path.substr(1);
+ // }
+
+ var ar = path.split('/'),
+ re = [];
+
+ // Array to Object.
+ $.each(ar, function (i, d) {
+
+ var x = d.match(/[{}]/g);
+
+ if (x == null) {
+ re[i] = false;
+ } else {
+ re[i] = true;
+ }
+ });
+ return re;
+ };
+
+ // Create.
+ var createRoutingTable = function (routes) {
+
+ // routing.
+ var routingTable = {};
+
+ var mapRoute = function (name, path, params) {
+
+ // Gets position of different placeholders.
+ var getPositions = function (path) {
+
+ var arr = [],
+ o = {};
+
+ // String to array.
+ path.replace(/\{[^\}]*\}/g, function (key, index) {
+ arr.push({ key: key, index: index });
+ });
+
+ // Array to Object.
+ $.each(arr, function (i, d) {
+
+ // Each character within [ ... ].
+ o[d.key.replace(/[{}]/g, '')] = d.index;
+ });
+ return o;
+ };
+
+ // Add slash if {controller} is first in the string,
+ // so that array would have the "prefix" placeholder.
+ if (path.substr(0, 12) === "{controller}") {
+ path = "/" + path;
+ }
+
+ // Parse path into array.
+ var items = path.split('/');
+
+ // Create routing table object.
+ routingTable[name] = {
+ controller: "",
+ path: path,
+ pre: path.substr(0, getPositions(path).controller),
+ items: items,
+ placeHolders: parsePlaceHolders(path),
+ params: params
+ };
+ };
+
+ $.each(routes, function (i, d) {
+ mapRoute(d.name, d.path, d.params);
+ });
+
+ return routingTable;
+ };
+
+ var rounte = function (table, hash) {
+
+ var matchCount = 0;
+ var params,
+ actionObject = {};
+
+ // Loop table.
+ $.each(table, function (i, d) {
+
+ var items = hash.split('/');
+
+ // Add start '/' if not presnet
+ if (hash.charAt(0) !== '/' && d.pre != items[0] + "/") {
+ hash = '/' + hash;
+ // Split again.
+ items = hash.split('/');
+ }
+
+ var tableItems = d.items,
+ o = {};
+
+ params = d.params;
+
+ if (matchCount < 1) {
+
+ // Loop folders.
+ $.each(d.placeHolders, function (i, d) {
+
+ if (items[i] === tableItems[i]) {
+ matchCount++;
+ }
+
+ if (d) {
+ //build action object
+ actionObject[tableItems[i].replace(/[{}]/g, '')] = items[i];
+ }
+
+ });
+ }
+
+ // If there is a match don't search any more.
+ if (matchCount < 2) {
+
+ // Merge with defaults, if there are some params missing.
+ $.each(actionObject, function (i, d) {
+ if (typeof d == "undefined" || d == "") {
+ actionObject[i] = params[i];
+ }
+ });
+ return;
+ }
+ });
+
+ return actionObject;
+ };
+
+ var multiAjax = function (requests, success, error) {
+
+ var sucessIndex = 1,
+ numberOfRequests = requests.length - 1,
+ data = {};
+
+ $.each(requests, function (i, d) {
+
+ $.ajax({
+ type: d.type,
+ url: d.url,
+ dataType: d.dataType,
+ error: function () {
+ if (typeof error == 'function') {
+ error('could not load: ' + d.url);
+ }
+ },
+ success: function (d2) {
+ data[d.id] = d2;
+ if (sucessIndex > numberOfRequests) {
+ success(data);
+ }
+ else {
+ sucessIndex++;
+ }
+ }
+ });
+
+ });
+ };
+
+ // MVC plugin function.
+ $.fn.MVC = function (op) {
+
+ // Defaults.
+ var defaults = {
+ rootPath: "",
+ viewsPath: "Views/",
+ controllersPath: "Controllers/",
+ start: function (o) { },
+ success: function (o) { },
+ error: function (o) { },
+ stopListenToHash: 0,
+ errorMessage: "error...
"
+ };
+
+ // Build main options before element iteration.
+ $.extend(defaults, op);
+
+ // Iterate and reformat each matched element.
+ return this.each(function () {
+
+ // Target content wrapper.
+ var contentDiv = $(this);
+
+ var routingTable = createRoutingTable(defaults.routes);
+
+ var loadPage = function (hash) {
+
+ // On load method.
+ defaults.start();
+
+ var actionObject = rounte(routingTable, hash);
+
+ // Run.
+ var run = function (controller, action, params) {
+
+ //Check if routs were found, if not return an error message.
+ if (typeof controller == "undefined" || typeof controller == "action") {
+
+ // Put action HTML to the DOM.
+ contentDiv.html(defaults.errorMessage);
+
+ // Run external callback
+ defaults.success({
+ actionObject: actionObject,
+ viewTemplate: viewTemplate,
+ content: defaults.errorMessage
+ });
+
+ } else {
+
+ var exec = function (isSuccessful, viewTemplate, controllerObject) {
+
+ if (isSuccessful) {
+
+ // Check if action is defined inside of the controller.
+ if (typeof controllerObject[action] == "undefined") {
+
+ // Put action HTML to the DOM.
+ contentDiv.html(defaults.errorMessage);
+
+ // Run external callback
+ defaults.success({
+ actionObject: actionObject,
+ viewTemplate: viewTemplate,
+ content: content
+ });
+
+ // Run error callback.
+ defaults.error(defaults.errorMessage);
+
+ } else {
+
+ // Run action method.
+ controllerObject[action](actionObject, viewTemplate, function (content) {
+
+ // Put action HTML to the DOM.
+ contentDiv.html(content);
+
+ // Run external callback
+ defaults.success({
+ actionObject: actionObject,
+ viewTemplate: viewTemplate,
+ content: content
+ });
+ }, defaults.error);
+ }
+ } else {
+
+ // Put action HTML to the DOM.
+ contentDiv.html(defaults.errorMessage);
+
+ // Run external callback
+ defaults.success({
+ actionObject: actionObject,
+ viewTemplate: viewTemplate,
+ content: content
+ });
+ }
+ };
+
+ multiAjax([
+ {
+ id: "view",
+ type: "Get",
+ url: defaults.rootPath + defaults.viewsPath + controller + "/" + action + ".html" + getRandomParam(),
+ dataType: "html"
+ },
+ {
+ id: "controller",
+ type: "Get",
+ url: defaults.rootPath + defaults.controllersPath + controller + ".js" + getRandomParam(),
+ dataType: "script"
+ }],
+ // Sucess.
+ function (d) {
+ exec(true, d.view, eval('(' + d.controller + ')'));
+ },
+ // Error.
+ function (d) {
+ exec(false);
+ defaults.error("controller did not load");
+ });
+ }
+ };
+
+ //run
+ run(actionObject.controller, actionObject.action, actionObject);
+ };
+
+ // Init
+ (function () {
+ var currentHash = getHashValue();
+
+ // Init hash listener.
+ onHashChange(loadPage, defaults.stopListenToHash);
+
+ // Make the first load.
+ loadPage(currentHash);
+ })();
+ });
+ };
+})(jQuery);
diff --git a/app/admin/library/jquery/jquery.ajaxForm.js b/app/admin/library/jquery/jquery.ajaxForm.js
new file mode 100644
index 0000000..a19dc3d
--- /dev/null
+++ b/app/admin/library/jquery/jquery.ajaxForm.js
@@ -0,0 +1,58 @@
+/* AJAX FORM Plugin
+--------------------------------------
+
+Init method:
+$('#myForm').ajaxForm();
+
+*/
+
+(function ($) {
+
+ // plugin definition
+ $.fn.ajaxForm = function (op) {
+
+ // Defaults.
+ var defaults = {
+ start: function () { },
+ sucess: function () { },
+ error: function () { },
+ buttonSelector: '.submit'
+ };
+
+ $.extend(defaults, op);
+
+ // iterate and reformat each matched element
+ return this.each(function () {
+
+ //
+ var context = $(this),
+ submitButton = $(defaults.buttonSelector, context),
+ url = context.attr('action'),
+ method = context.attr('method');
+
+ //button click
+ submitButton.click(function () {
+
+ // On start.
+ defaults.start(submitButton);
+
+ // Ajax
+ $.ajax({
+ type: method,
+ url: url,
+ data: context.serializeArray(),
+ dataType: "json",
+ success: defaults.sucess,
+ error: defaults.error
+ });
+
+ return false;
+ });
+
+ });
+ };
+
+})(jQuery);
+
+
+
diff --git a/app/admin/library/jquery/jquery.min.js b/app/admin/library/jquery/jquery.min.js
new file mode 100644
index 0000000..c238e43
--- /dev/null
+++ b/app/admin/library/jquery/jquery.min.js
@@ -0,0 +1,590 @@
+/*!
+* jQuery JavaScript Library v1.4.2
+* http://jquery.com/
+*
+* Copyright 2010, John Resig
+* Dual licensed under the MIT or GPL Version 2 licenses.
+* http://jquery.org/license
+*
+* Includes Sizzle.js
+* http://sizzlejs.com/
+* Copyright 2010, The Dojo Foundation
+* Released under the MIT, BSD, and GPL Licenses.
+*
+* Date: Sat Feb 13 22:33:48 2010 -0500
+*/
+(function(A, w) {
+ function ma() { if (!c.isReady) { try { s.documentElement.doScroll("left") } catch (a) { setTimeout(ma, 1); return } c.ready() } } function Qa(a, b) { b.src ? c.ajax({ url: b.src, async: false, dataType: "script" }) : c.globalEval(b.text || b.textContent || b.innerHTML || ""); b.parentNode && b.parentNode.removeChild(b) } function X(a, b, d, f, e, j) {
+ var i = a.length; if (typeof b === "object") { for (var o in b) X(a, o, b[o], f, e, d); return a } if (d !== w) { f = !j && f && c.isFunction(d); for (o = 0; o < i; o++) e(a[o], b, f ? d.call(a[o], o, e(a[o], b)) : d, j); return a } return i ?
+e(a[0], b) : w
+ } function J() { return (new Date).getTime() } function Y() { return false } function Z() { return true } function na(a, b, d) { d[0].type = a; return c.event.handle.apply(b, d) } function oa(a) {
+ var b, d = [], f = [], e = arguments, j, i, o, k, n, r; i = c.data(this, "events"); if (!(a.liveFired === this || !i || !i.live || a.button && a.type === "click")) {
+ a.liveFired = this; var u = i.live.slice(0); for (k = 0; k < u.length; k++) { i = u[k]; i.origType.replace(O, "") === a.type ? f.push(i.selector) : u.splice(k--, 1) } j = c(a.target).closest(f, a.currentTarget); n = 0; for (r =
+j.length; n < r; n++) for (k = 0; k < u.length; k++) { i = u[k]; if (j[n].selector === i.selector) { o = j[n].elem; f = null; if (i.preType === "mouseenter" || i.preType === "mouseleave") f = c(a.relatedTarget).closest(i.selector)[0]; if (!f || f !== o) d.push({ elem: o, handleObj: i }) } } n = 0; for (r = d.length; n < r; n++) { j = d[n]; a.currentTarget = j.elem; a.data = j.handleObj.data; a.handleObj = j.handleObj; if (j.handleObj.origHandler.apply(j.elem, e) === false) { b = false; break } } return b
+ }
+ } function pa(a, b) {
+ return "live." + (a && a !== "*" ? a + "." : "") + b.replace(/\./g, "`").replace(/ /g,
+"&")
+ } function qa(a) { return !a || !a.parentNode || a.parentNode.nodeType === 11 } function ra(a, b) { var d = 0; b.each(function() { if (this.nodeName === (a[d] && a[d].nodeName)) { var f = c.data(a[d++]), e = c.data(this, f); if (f = f && f.events) { delete e.handle; e.events = {}; for (var j in f) for (var i in f[j]) c.event.add(this, j, f[j][i], f[j][i].data) } } }) } function sa(a, b, d) {
+ var f, e, j; b = b && b[0] ? b[0].ownerDocument || b[0] : s; if (a.length === 1 && typeof a[0] === "string" && a[0].length < 512 && b === s && !ta.test(a[0]) && (c.support.checkClone || !ua.test(a[0]))) {
+ e =
+true; if (j = c.fragments[a[0]]) if (j !== 1) f = j
+ } if (!f) { f = b.createDocumentFragment(); c.clean(a, b, f, d) } if (e) c.fragments[a[0]] = j ? f : 1; return { fragment: f, cacheable: e}
+ } function K(a, b) { var d = {}; c.each(va.concat.apply([], va.slice(0, b)), function() { d[this] = a }); return d } function wa(a) { return "scrollTo" in a && a.document ? a : a.nodeType === 9 ? a.defaultView || a.parentWindow : false } var c = function(a, b) { return new c.fn.init(a, b) }, Ra = A.jQuery, Sa = A.$, s = A.document, T, Ta = /^[^<]*(<[\w\W]+>)[^>]*$|^#([\w-]+)$/, Ua = /^.[^:#\[\.,]*$/, Va = /\S/,
+Wa = /^(\s|\u00A0)+|(\s|\u00A0)+$/g, Xa = /^<(\w+)\s*\/?>(?:<\/\1>)?$/, P = navigator.userAgent, xa = false, Q = [], L, $ = Object.prototype.toString, aa = Object.prototype.hasOwnProperty, ba = Array.prototype.push, R = Array.prototype.slice, ya = Array.prototype.indexOf; c.fn = c.prototype = { init: function(a, b) {
+ var d, f; if (!a) return this; if (a.nodeType) { this.context = this[0] = a; this.length = 1; return this } if (a === "body" && !b) { this.context = s; this[0] = s.body; this.selector = "body"; this.length = 1; return this } if (typeof a === "string") if ((d = Ta.exec(a)) &&
+(d[1] || !b)) if (d[1]) { f = b ? b.ownerDocument || b : s; if (a = Xa.exec(a)) if (c.isPlainObject(b)) { a = [s.createElement(a[1])]; c.fn.attr.call(a, b, true) } else a = [f.createElement(a[1])]; else { a = sa([d[1]], [f]); a = (a.cacheable ? a.fragment.cloneNode(true) : a.fragment).childNodes } return c.merge(this, a) } else { if (b = s.getElementById(d[2])) { if (b.id !== d[2]) return T.find(a); this.length = 1; this[0] = b } this.context = s; this.selector = a; return this } else if (!b && /^\w+$/.test(a)) {
+ this.selector = a; this.context = s; a = s.getElementsByTagName(a); return c.merge(this,
+a)
+ } else return !b || b.jquery ? (b || T).find(a) : c(b).find(a); else if (c.isFunction(a)) return T.ready(a); if (a.selector !== w) { this.selector = a.selector; this.context = a.context } return c.makeArray(a, this)
+}, selector: "", jquery: "1.4.2", length: 0, size: function() { return this.length }, toArray: function() { return R.call(this, 0) }, get: function(a) { return a == null ? this.toArray() : a < 0 ? this.slice(a)[0] : this[a] }, pushStack: function(a, b, d) {
+ var f = c(); c.isArray(a) ? ba.apply(f, a) : c.merge(f, a); f.prevObject = this; f.context = this.context; if (b ===
+"find") f.selector = this.selector + (this.selector ? " " : "") + d; else if (b) f.selector = this.selector + "." + b + "(" + d + ")"; return f
+}, each: function(a, b) { return c.each(this, a, b) }, ready: function(a) { c.bindReady(); if (c.isReady) a.call(s, c); else Q && Q.push(a); return this }, eq: function(a) { return a === -1 ? this.slice(a) : this.slice(a, +a + 1) }, first: function() { return this.eq(0) }, last: function() { return this.eq(-1) }, slice: function() { return this.pushStack(R.apply(this, arguments), "slice", R.call(arguments).join(",")) }, map: function(a) {
+ return this.pushStack(c.map(this,
+function(b, d) { return a.call(b, d, b) }))
+}, end: function() { return this.prevObject || c(null) }, push: ba, sort: [].sort, splice: [].splice
+}; c.fn.init.prototype = c.fn; c.extend = c.fn.extend = function() {
+ var a = arguments[0] || {}, b = 1, d = arguments.length, f = false, e, j, i, o; if (typeof a === "boolean") { f = a; a = arguments[1] || {}; b = 2 } if (typeof a !== "object" && !c.isFunction(a)) a = {}; if (d === b) { a = this; --b } for (; b < d; b++) if ((e = arguments[b]) != null) for (j in e) {
+ i = a[j]; o = e[j]; if (a !== o) if (f && o && (c.isPlainObject(o) || c.isArray(o))) {
+ i = i && (c.isPlainObject(i) ||
+c.isArray(i)) ? i : c.isArray(o) ? [] : {}; a[j] = c.extend(f, i, o)
+ } else if (o !== w) a[j] = o
+ } return a
+}; c.extend({ noConflict: function(a) { A.$ = Sa; if (a) A.jQuery = Ra; return c }, isReady: false, ready: function() { if (!c.isReady) { if (!s.body) return setTimeout(c.ready, 13); c.isReady = true; if (Q) { for (var a, b = 0; a = Q[b++]; ) a.call(s, c); Q = null } c.fn.triggerHandler && c(s).triggerHandler("ready") } }, bindReady: function() {
+ if (!xa) {
+ xa = true; if (s.readyState === "complete") return c.ready(); if (s.addEventListener) {
+ s.addEventListener("DOMContentLoaded",
+L, false); A.addEventListener("load", c.ready, false)
+ } else if (s.attachEvent) { s.attachEvent("onreadystatechange", L); A.attachEvent("onload", c.ready); var a = false; try { a = A.frameElement == null } catch (b) { } s.documentElement.doScroll && a && ma() }
+ }
+}, isFunction: function(a) { return $.call(a) === "[object Function]" }, isArray: function(a) { return $.call(a) === "[object Array]" }, isPlainObject: function(a) {
+ if (!a || $.call(a) !== "[object Object]" || a.nodeType || a.setInterval) return false; if (a.constructor && !aa.call(a, "constructor") && !aa.call(a.constructor.prototype,
+"isPrototypeOf")) return false; var b; for (b in a); return b === w || aa.call(a, b)
+}, isEmptyObject: function(a) { for (var b in a) return false; return true }, error: function(a) { throw a; }, parseJSON: function(a) {
+ if (typeof a !== "string" || !a) return null; a = c.trim(a); if (/^[\],:{}\s]*$/.test(a.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g, "@").replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, "]").replace(/(?:^|:|,)(?:\s*\[)+/g, ""))) return A.JSON && A.JSON.parse ? A.JSON.parse(a) : (new Function("return " +
+a))(); else c.error("Invalid JSON: " + a)
+}, noop: function() { }, globalEval: function(a) { if (a && Va.test(a)) { var b = s.getElementsByTagName("head")[0] || s.documentElement, d = s.createElement("script"); d.type = "text/javascript"; if (c.support.scriptEval) d.appendChild(s.createTextNode(a)); else d.text = a; b.insertBefore(d, b.firstChild); b.removeChild(d) } }, nodeName: function(a, b) { return a.nodeName && a.nodeName.toUpperCase() === b.toUpperCase() }, each: function(a, b, d) {
+ var f, e = 0, j = a.length, i = j === w || c.isFunction(a); if (d) if (i) for (f in a) {
+ if (b.apply(a[f],
+d) === false) break
+ } else for (; e < j; ) { if (b.apply(a[e++], d) === false) break } else if (i) for (f in a) { if (b.call(a[f], f, a[f]) === false) break } else for (d = a[0]; e < j && b.call(d, e, d) !== false; d = a[++e]); return a
+}, trim: function(a) { return (a || "").replace(Wa, "") }, makeArray: function(a, b) { b = b || []; if (a != null) a.length == null || typeof a === "string" || c.isFunction(a) || typeof a !== "function" && a.setInterval ? ba.call(b, a) : c.merge(b, a); return b }, inArray: function(a, b) {
+ if (b.indexOf) return b.indexOf(a); for (var d = 0, f = b.length; d < f; d++) if (b[d] ===
+a) return d; return -1
+}, merge: function(a, b) { var d = a.length, f = 0; if (typeof b.length === "number") for (var e = b.length; f < e; f++) a[d++] = b[f]; else for (; b[f] !== w; ) a[d++] = b[f++]; a.length = d; return a }, grep: function(a, b, d) { for (var f = [], e = 0, j = a.length; e < j; e++) !d !== !b(a[e], e) && f.push(a[e]); return f }, map: function(a, b, d) { for (var f = [], e, j = 0, i = a.length; j < i; j++) { e = b(a[j], j, d); if (e != null) f[f.length] = e } return f.concat.apply([], f) }, guid: 1, proxy: function(a, b, d) {
+ if (arguments.length === 2) if (typeof b === "string") { d = a; a = d[b]; b = w } else if (b &&
+!c.isFunction(b)) { d = b; b = w } if (!b && a) b = function() { return a.apply(d || this, arguments) }; if (a) b.guid = a.guid = a.guid || b.guid || c.guid++; return b
+}, uaMatch: function(a) { a = a.toLowerCase(); a = /(webkit)[ \/]([\w.]+)/.exec(a) || /(opera)(?:.*version)?[ \/]([\w.]+)/.exec(a) || /(msie) ([\w.]+)/.exec(a) || !/compatible/.test(a) && /(mozilla)(?:.*? rv:([\w.]+))?/.exec(a) || []; return { browser: a[1] || "", version: a[2] || "0"} }, browser: {}
+}); P = c.uaMatch(P); if (P.browser) { c.browser[P.browser] = true; c.browser.version = P.version } if (c.browser.webkit) c.browser.safari =
+true; if (ya) c.inArray = function(a, b) { return ya.call(b, a) }; T = c(s); if (s.addEventListener) L = function() { s.removeEventListener("DOMContentLoaded", L, false); c.ready() }; else if (s.attachEvent) L = function() { if (s.readyState === "complete") { s.detachEvent("onreadystatechange", L); c.ready() } }; (function() {
+ c.support = {}; var a = s.documentElement, b = s.createElement("script"), d = s.createElement("div"), f = "script" + J(); d.style.display = "none"; d.innerHTML = " a";
+ var e = d.getElementsByTagName("*"), j = d.getElementsByTagName("a")[0]; if (!(!e || !e.length || !j)) {
+ c.support = { leadingWhitespace: d.firstChild.nodeType === 3, tbody: !d.getElementsByTagName("tbody").length, htmlSerialize: !!d.getElementsByTagName("link").length, style: /red/.test(j.getAttribute("style")), hrefNormalized: j.getAttribute("href") === "/a", opacity: /^0.55$/.test(j.style.opacity), cssFloat: !!j.style.cssFloat, checkOn: d.getElementsByTagName("input")[0].value === "on", optSelected: s.createElement("select").appendChild(s.createElement("option")).selected,
+ parentNode: d.removeChild(d.appendChild(s.createElement("div"))).parentNode === null, deleteExpando: true, checkClone: false, scriptEval: false, noCloneEvent: true, boxModel: null
+ }; b.type = "text/javascript"; try { b.appendChild(s.createTextNode("window." + f + "=1;")) } catch (i) { } a.insertBefore(b, a.firstChild); if (A[f]) { c.support.scriptEval = true; delete A[f] } try { delete b.test } catch (o) { c.support.deleteExpando = false } a.removeChild(b); if (d.attachEvent && d.fireEvent) {
+ d.attachEvent("onclick", function k() {
+ c.support.noCloneEvent =
+false; d.detachEvent("onclick", k)
+ }); d.cloneNode(true).fireEvent("onclick")
+ } d = s.createElement("div"); d.innerHTML = ""; a = s.createDocumentFragment(); a.appendChild(d.firstChild); c.support.checkClone = a.cloneNode(true).cloneNode(true).lastChild.checked; c(function() { var k = s.createElement("div"); k.style.width = k.style.paddingLeft = "1px"; s.body.appendChild(k); c.boxModel = c.support.boxModel = k.offsetWidth === 2; s.body.removeChild(k).style.display = "none" }); a = function(k) {
+ var n =
+s.createElement("div"); k = "on" + k; var r = k in n; if (!r) { n.setAttribute(k, "return;"); r = typeof n[k] === "function" } return r
+ }; c.support.submitBubbles = a("submit"); c.support.changeBubbles = a("change"); a = b = d = e = j = null
+ }
+})(); c.props = { "for": "htmlFor", "class": "className", readonly: "readOnly", maxlength: "maxLength", cellspacing: "cellSpacing", rowspan: "rowSpan", colspan: "colSpan", tabindex: "tabIndex", usemap: "useMap", frameborder: "frameBorder" }; var G = "jQuery" + J(), Ya = 0, za = {}; c.extend({ cache: {}, expando: G, noData: { embed: true, object: true,
+ applet: true
+}, data: function(a, b, d) { if (!(a.nodeName && c.noData[a.nodeName.toLowerCase()])) { a = a == A ? za : a; var f = a[G], e = c.cache; if (!f && typeof b === "string" && d === w) return null; f || (f = ++Ya); if (typeof b === "object") { a[G] = f; e[f] = c.extend(true, {}, b) } else if (!e[f]) { a[G] = f; e[f] = {} } a = e[f]; if (d !== w) a[b] = d; return typeof b === "string" ? a[b] : a } }, removeData: function(a, b) {
+ if (!(a.nodeName && c.noData[a.nodeName.toLowerCase()])) {
+ a = a == A ? za : a; var d = a[G], f = c.cache, e = f[d]; if (b) { if (e) { delete e[b]; c.isEmptyObject(e) && c.removeData(a) } } else {
+ if (c.support.deleteExpando) delete a[c.expando];
+ else a.removeAttribute && a.removeAttribute(c.expando); delete f[d]
+ }
+ }
+}
+}); c.fn.extend({ data: function(a, b) {
+ if (typeof a === "undefined" && this.length) return c.data(this[0]); else if (typeof a === "object") return this.each(function() { c.data(this, a) }); var d = a.split("."); d[1] = d[1] ? "." + d[1] : ""; if (b === w) { var f = this.triggerHandler("getData" + d[1] + "!", [d[0]]); if (f === w && this.length) f = c.data(this[0], a); return f === w && d[1] ? this.data(d[0]) : f } else return this.trigger("setData" + d[1] + "!", [d[0], b]).each(function() {
+ c.data(this,
+a, b)
+ })
+}, removeData: function(a) { return this.each(function() { c.removeData(this, a) }) }
+}); c.extend({ queue: function(a, b, d) { if (a) { b = (b || "fx") + "queue"; var f = c.data(a, b); if (!d) return f || []; if (!f || c.isArray(d)) f = c.data(a, b, c.makeArray(d)); else f.push(d); return f } }, dequeue: function(a, b) { b = b || "fx"; var d = c.queue(a, b), f = d.shift(); if (f === "inprogress") f = d.shift(); if (f) { b === "fx" && d.unshift("inprogress"); f.call(a, function() { c.dequeue(a, b) }) } } }); c.fn.extend({ queue: function(a, b) {
+ if (typeof a !== "string") { b = a; a = "fx" } if (b ===
+w) return c.queue(this[0], a); return this.each(function() { var d = c.queue(this, a, b); a === "fx" && d[0] !== "inprogress" && c.dequeue(this, a) })
+}, dequeue: function(a) { return this.each(function() { c.dequeue(this, a) }) }, delay: function(a, b) { a = c.fx ? c.fx.speeds[a] || a : a; b = b || "fx"; return this.queue(b, function() { var d = this; setTimeout(function() { c.dequeue(d, b) }, a) }) }, clearQueue: function(a) { return this.queue(a || "fx", []) }
+}); var Aa = /[\n\t]/g, ca = /\s+/, Za = /\r/g, $a = /href|src|style/, ab = /(button|input)/i, bb = /(button|input|object|select|textarea)/i,
+cb = /^(a|area)$/i, Ba = /radio|checkbox/; c.fn.extend({ attr: function(a, b) { return X(this, a, b, true, c.attr) }, removeAttr: function(a) { return this.each(function() { c.attr(this, a, ""); this.nodeType === 1 && this.removeAttribute(a) }) }, addClass: function(a) {
+ if (c.isFunction(a)) return this.each(function(n) { var r = c(this); r.addClass(a.call(this, n, r.attr("class"))) }); if (a && typeof a === "string") for (var b = (a || "").split(ca), d = 0, f = this.length; d < f; d++) {
+ var e = this[d]; if (e.nodeType === 1) if (e.className) {
+ for (var j = " " + e.className + " ",
+i = e.className, o = 0, k = b.length; o < k; o++) if (j.indexOf(" " + b[o] + " ") < 0) i += " " + b[o]; e.className = c.trim(i)
+ } else e.className = a
+ } return this
+}, removeClass: function(a) {
+ if (c.isFunction(a)) return this.each(function(k) { var n = c(this); n.removeClass(a.call(this, k, n.attr("class"))) }); if (a && typeof a === "string" || a === w) for (var b = (a || "").split(ca), d = 0, f = this.length; d < f; d++) {
+ var e = this[d]; if (e.nodeType === 1 && e.className) if (a) {
+ for (var j = (" " + e.className + " ").replace(Aa, " "), i = 0, o = b.length; i < o; i++) j = j.replace(" " + b[i] + " ",
+" "); e.className = c.trim(j)
+ } else e.className = ""
+ } return this
+}, toggleClass: function(a, b) {
+ var d = typeof a, f = typeof b === "boolean"; if (c.isFunction(a)) return this.each(function(e) { var j = c(this); j.toggleClass(a.call(this, e, j.attr("class"), b), b) }); return this.each(function() {
+ if (d === "string") for (var e, j = 0, i = c(this), o = b, k = a.split(ca); e = k[j++]; ) { o = f ? o : !i.hasClass(e); i[o ? "addClass" : "removeClass"](e) } else if (d === "undefined" || d === "boolean") {
+ this.className && c.data(this, "__className__", this.className); this.className =
+this.className || a === false ? "" : c.data(this, "__className__") || ""
+ }
+ })
+}, hasClass: function(a) { a = " " + a + " "; for (var b = 0, d = this.length; b < d; b++) if ((" " + this[b].className + " ").replace(Aa, " ").indexOf(a) > -1) return true; return false }, val: function(a) {
+ if (a === w) {
+ var b = this[0]; if (b) {
+ if (c.nodeName(b, "option")) return (b.attributes.value || {}).specified ? b.value : b.text; if (c.nodeName(b, "select")) {
+ var d = b.selectedIndex, f = [], e = b.options; b = b.type === "select-one"; if (d < 0) return null; var j = b ? d : 0; for (d = b ? d + 1 : e.length; j < d; j++) {
+ var i =
+e[j]; if (i.selected) { a = c(i).val(); if (b) return a; f.push(a) }
+ } return f
+ } if (Ba.test(b.type) && !c.support.checkOn) return b.getAttribute("value") === null ? "on" : b.value; return (b.value || "").replace(Za, "")
+ } return w
+ } var o = c.isFunction(a); return this.each(function(k) {
+ var n = c(this), r = a; if (this.nodeType === 1) {
+ if (o) r = a.call(this, k, n.val()); if (typeof r === "number") r += ""; if (c.isArray(r) && Ba.test(this.type)) this.checked = c.inArray(n.val(), r) >= 0; else if (c.nodeName(this, "select")) {
+ var u = c.makeArray(r); c("option", this).each(function() {
+ this.selected =
+c.inArray(c(this).val(), u) >= 0
+ }); if (!u.length) this.selectedIndex = -1
+ } else this.value = r
+ }
+ })
+}
+}); c.extend({ attrFn: { val: true, css: true, html: true, text: true, data: true, width: true, height: true, offset: true }, attr: function(a, b, d, f) {
+ if (!a || a.nodeType === 3 || a.nodeType === 8) return w; if (f && b in c.attrFn) return c(a)[b](d); f = a.nodeType !== 1 || !c.isXMLDoc(a); var e = d !== w; b = f && c.props[b] || b; if (a.nodeType === 1) {
+ var j = $a.test(b); if (b in a && f && !j) {
+ if (e) {
+ b === "type" && ab.test(a.nodeName) && a.parentNode && c.error("type property can't be changed");
+ a[b] = d
+ } if (c.nodeName(a, "form") && a.getAttributeNode(b)) return a.getAttributeNode(b).nodeValue; if (b === "tabIndex") return (b = a.getAttributeNode("tabIndex")) && b.specified ? b.value : bb.test(a.nodeName) || cb.test(a.nodeName) && a.href ? 0 : w; return a[b]
+ } if (!c.support.style && f && b === "style") { if (e) a.style.cssText = "" + d; return a.style.cssText } e && a.setAttribute(b, "" + d); a = !c.support.hrefNormalized && f && j ? a.getAttribute(b, 2) : a.getAttribute(b); return a === null ? w : a
+ } return c.style(a, b, d)
+}
+}); var O = /\.(.*)$/, db = function(a) {
+ return a.replace(/[^\w\s\.\|`]/g,
+function(b) { return "\\" + b })
+}; c.event = { add: function(a, b, d, f) {
+ if (!(a.nodeType === 3 || a.nodeType === 8)) {
+ if (a.setInterval && a !== A && !a.frameElement) a = A; var e, j; if (d.handler) { e = d; d = e.handler } if (!d.guid) d.guid = c.guid++; if (j = c.data(a)) {
+ var i = j.events = j.events || {}, o = j.handle; if (!o) j.handle = o = function() { return typeof c !== "undefined" && !c.event.triggered ? c.event.handle.apply(o.elem, arguments) : w }; o.elem = a; b = b.split(" "); for (var k, n = 0, r; k = b[n++]; ) {
+ j = e ? c.extend({}, e) : { handler: d, data: f }; if (k.indexOf(".") > -1) {
+ r = k.split(".");
+ k = r.shift(); j.namespace = r.slice(0).sort().join(".")
+ } else { r = []; j.namespace = "" } j.type = k; j.guid = d.guid; var u = i[k], z = c.event.special[k] || {}; if (!u) { u = i[k] = []; if (!z.setup || z.setup.call(a, f, r, o) === false) if (a.addEventListener) a.addEventListener(k, o, false); else a.attachEvent && a.attachEvent("on" + k, o) } if (z.add) { z.add.call(a, j); if (!j.handler.guid) j.handler.guid = d.guid } u.push(j); c.event.global[k] = true
+ } a = null
+ }
+ }
+}, global: {}, remove: function(a, b, d, f) {
+ if (!(a.nodeType === 3 || a.nodeType === 8)) {
+ var e, j = 0, i, o, k, n, r, u, z = c.data(a),
+C = z && z.events; if (z && C) {
+ if (b && b.type) { d = b.handler; b = b.type } if (!b || typeof b === "string" && b.charAt(0) === ".") { b = b || ""; for (e in C) c.event.remove(a, e + b) } else {
+ for (b = b.split(" "); e = b[j++]; ) {
+ n = e; i = e.indexOf(".") < 0; o = []; if (!i) { o = e.split("."); e = o.shift(); k = new RegExp("(^|\\.)" + c.map(o.slice(0).sort(), db).join("\\.(?:.*\\.)?") + "(\\.|$)") } if (r = C[e]) if (d) {
+ n = c.event.special[e] || {}; for (B = f || 0; B < r.length; B++) {
+ u = r[B]; if (d.guid === u.guid) {
+ if (i || k.test(u.namespace)) { f == null && r.splice(B--, 1); n.remove && n.remove.call(a, u) } if (f !=
+null) break
+ }
+ } if (r.length === 0 || f != null && r.length === 1) { if (!n.teardown || n.teardown.call(a, o) === false) Ca(a, e, z.handle); delete C[e] }
+ } else for (var B = 0; B < r.length; B++) { u = r[B]; if (i || k.test(u.namespace)) { c.event.remove(a, n, u.handler, B); r.splice(B--, 1) } }
+ } if (c.isEmptyObject(C)) { if (b = z.handle) b.elem = null; delete z.events; delete z.handle; c.isEmptyObject(z) && c.removeData(a) }
+ }
+ }
+ }
+}, trigger: function(a, b, d, f) {
+ var e = a.type || a; if (!f) {
+ a = typeof a === "object" ? a[G] ? a : c.extend(c.Event(e), a) : c.Event(e); if (e.indexOf("!") >= 0) {
+ a.type =
+e = e.slice(0, -1); a.exclusive = true
+ } if (!d) { a.stopPropagation(); c.event.global[e] && c.each(c.cache, function() { this.events && this.events[e] && c.event.trigger(a, b, this.handle.elem) }) } if (!d || d.nodeType === 3 || d.nodeType === 8) return w; a.result = w; a.target = d; b = c.makeArray(b); b.unshift(a)
+ } a.currentTarget = d; (f = c.data(d, "handle")) && f.apply(d, b); f = d.parentNode || d.ownerDocument; try { if (!(d && d.nodeName && c.noData[d.nodeName.toLowerCase()])) if (d["on" + e] && d["on" + e].apply(d, b) === false) a.result = false } catch (j) { } if (!a.isPropagationStopped() &&
+f) c.event.trigger(a, b, f, true); else if (!a.isDefaultPrevented()) { f = a.target; var i, o = c.nodeName(f, "a") && e === "click", k = c.event.special[e] || {}; if ((!k._default || k._default.call(d, a) === false) && !o && !(f && f.nodeName && c.noData[f.nodeName.toLowerCase()])) { try { if (f[e]) { if (i = f["on" + e]) f["on" + e] = null; c.event.triggered = true; f[e]() } } catch (n) { } if (i) f["on" + e] = i; c.event.triggered = false } }
+}, handle: function(a) {
+ var b, d, f, e; a = arguments[0] = c.event.fix(a || A.event); a.currentTarget = this; b = a.type.indexOf(".") < 0 && !a.exclusive;
+ if (!b) { d = a.type.split("."); a.type = d.shift(); f = new RegExp("(^|\\.)" + d.slice(0).sort().join("\\.(?:.*\\.)?") + "(\\.|$)") } e = c.data(this, "events"); d = e[a.type]; if (e && d) { d = d.slice(0); e = 0; for (var j = d.length; e < j; e++) { var i = d[e]; if (b || f.test(i.namespace)) { a.handler = i.handler; a.data = i.data; a.handleObj = i; i = i.handler.apply(this, arguments); if (i !== w) { a.result = i; if (i === false) { a.preventDefault(); a.stopPropagation() } } if (a.isImmediatePropagationStopped()) break } } } return a.result
+}, props: "altKey attrChange attrName bubbles button cancelable charCode clientX clientY ctrlKey currentTarget data detail eventPhase fromElement handler keyCode layerX layerY metaKey newValue offsetX offsetY originalTarget pageX pageY prevValue relatedNode relatedTarget screenX screenY shiftKey srcElement target toElement view wheelDelta which".split(" "),
+ fix: function(a) {
+ if (a[G]) return a; var b = a; a = c.Event(b); for (var d = this.props.length, f; d; ) { f = this.props[--d]; a[f] = b[f] } if (!a.target) a.target = a.srcElement || s; if (a.target.nodeType === 3) a.target = a.target.parentNode; if (!a.relatedTarget && a.fromElement) a.relatedTarget = a.fromElement === a.target ? a.toElement : a.fromElement; if (a.pageX == null && a.clientX != null) {
+ b = s.documentElement; d = s.body; a.pageX = a.clientX + (b && b.scrollLeft || d && d.scrollLeft || 0) - (b && b.clientLeft || d && d.clientLeft || 0); a.pageY = a.clientY + (b && b.scrollTop ||
+d && d.scrollTop || 0) - (b && b.clientTop || d && d.clientTop || 0)
+ } if (!a.which && (a.charCode || a.charCode === 0 ? a.charCode : a.keyCode)) a.which = a.charCode || a.keyCode; if (!a.metaKey && a.ctrlKey) a.metaKey = a.ctrlKey; if (!a.which && a.button !== w) a.which = a.button & 1 ? 1 : a.button & 2 ? 3 : a.button & 4 ? 2 : 0; return a
+ }, guid: 1E8, proxy: c.proxy, special: { ready: { setup: c.bindReady, teardown: c.noop }, live: { add: function(a) { c.event.add(this, a.origType, c.extend({}, a, { handler: oa })) }, remove: function(a) {
+ var b = true, d = a.origType.replace(O, ""); c.each(c.data(this,
+"events").live || [], function() { if (d === this.origType.replace(O, "")) return b = false }); b && c.event.remove(this, a.origType, oa)
+ }
+ }, beforeunload: { setup: function(a, b, d) { if (this.setInterval) this.onbeforeunload = d; return false }, teardown: function(a, b) { if (this.onbeforeunload === b) this.onbeforeunload = null } }}
+ }; var Ca = s.removeEventListener ? function(a, b, d) { a.removeEventListener(b, d, false) } : function(a, b, d) { a.detachEvent("on" + b, d) }; c.Event = function(a) {
+ if (!this.preventDefault) return new c.Event(a); if (a && a.type) {
+ this.originalEvent =
+a; this.type = a.type
+ } else this.type = a; this.timeStamp = J(); this[G] = true
+ }; c.Event.prototype = { preventDefault: function() { this.isDefaultPrevented = Z; var a = this.originalEvent; if (a) { a.preventDefault && a.preventDefault(); a.returnValue = false } }, stopPropagation: function() { this.isPropagationStopped = Z; var a = this.originalEvent; if (a) { a.stopPropagation && a.stopPropagation(); a.cancelBubble = true } }, stopImmediatePropagation: function() { this.isImmediatePropagationStopped = Z; this.stopPropagation() }, isDefaultPrevented: Y, isPropagationStopped: Y,
+ isImmediatePropagationStopped: Y
+ }; var Da = function(a) { var b = a.relatedTarget; try { for (; b && b !== this; ) b = b.parentNode; if (b !== this) { a.type = a.data; c.event.handle.apply(this, arguments) } } catch (d) { } }, Ea = function(a) { a.type = a.data; c.event.handle.apply(this, arguments) }; c.each({ mouseenter: "mouseover", mouseleave: "mouseout" }, function(a, b) { c.event.special[a] = { setup: function(d) { c.event.add(this, b, d && d.selector ? Ea : Da, a) }, teardown: function(d) { c.event.remove(this, b, d && d.selector ? Ea : Da) } } }); if (!c.support.submitBubbles) c.event.special.submit =
+{ setup: function() { if (this.nodeName.toLowerCase() !== "form") { c.event.add(this, "click.specialSubmit", function(a) { var b = a.target, d = b.type; if ((d === "submit" || d === "image") && c(b).closest("form").length) return na("submit", this, arguments) }); c.event.add(this, "keypress.specialSubmit", function(a) { var b = a.target, d = b.type; if ((d === "text" || d === "password") && c(b).closest("form").length && a.keyCode === 13) return na("submit", this, arguments) }) } else return false }, teardown: function() { c.event.remove(this, ".specialSubmit") } };
+ if (!c.support.changeBubbles) {
+ var da = /textarea|input|select/i, ea, Fa = function(a) { var b = a.type, d = a.value; if (b === "radio" || b === "checkbox") d = a.checked; else if (b === "select-multiple") d = a.selectedIndex > -1 ? c.map(a.options, function(f) { return f.selected }).join("-") : ""; else if (a.nodeName.toLowerCase() === "select") d = a.selectedIndex; return d }, fa = function(a, b) {
+ var d = a.target, f, e; if (!(!da.test(d.nodeName) || d.readOnly)) {
+ f = c.data(d, "_change_data"); e = Fa(d); if (a.type !== "focusout" || d.type !== "radio") c.data(d, "_change_data",
+e); if (!(f === w || e === f)) if (f != null || e) { a.type = "change"; return c.event.trigger(a, b, d) }
+ }
+ }; c.event.special.change = { filters: { focusout: fa, click: function(a) { var b = a.target, d = b.type; if (d === "radio" || d === "checkbox" || b.nodeName.toLowerCase() === "select") return fa.call(this, a) }, keydown: function(a) { var b = a.target, d = b.type; if (a.keyCode === 13 && b.nodeName.toLowerCase() !== "textarea" || a.keyCode === 32 && (d === "checkbox" || d === "radio") || d === "select-multiple") return fa.call(this, a) }, beforeactivate: function(a) {
+ a = a.target; c.data(a,
+"_change_data", Fa(a))
+ }
+ }, setup: function() { if (this.type === "file") return false; for (var a in ea) c.event.add(this, a + ".specialChange", ea[a]); return da.test(this.nodeName) }, teardown: function() { c.event.remove(this, ".specialChange"); return da.test(this.nodeName) }
+ }; ea = c.event.special.change.filters
+ } s.addEventListener && c.each({ focus: "focusin", blur: "focusout" }, function(a, b) {
+ function d(f) { f = c.event.fix(f); f.type = b; return c.event.handle.call(this, f) } c.event.special[b] = { setup: function() {
+ this.addEventListener(a,
+d, true)
+ }, teardown: function() { this.removeEventListener(a, d, true) } }
+ }); c.each(["bind", "one"], function(a, b) { c.fn[b] = function(d, f, e) { if (typeof d === "object") { for (var j in d) this[b](j, f, d[j], e); return this } if (c.isFunction(f)) { e = f; f = w } var i = b === "one" ? c.proxy(e, function(k) { c(this).unbind(k, i); return e.apply(this, arguments) }) : e; if (d === "unload" && b !== "one") this.one(d, f, e); else { j = 0; for (var o = this.length; j < o; j++) c.event.add(this[j], d, i, f) } return this } }); c.fn.extend({ unbind: function(a, b) {
+ if (typeof a === "object" &&
+!a.preventDefault) for (var d in a) this.unbind(d, a[d]); else { d = 0; for (var f = this.length; d < f; d++) c.event.remove(this[d], a, b) } return this
+ }, delegate: function(a, b, d, f) { return this.live(b, d, f, a) }, undelegate: function(a, b, d) { return arguments.length === 0 ? this.unbind("live") : this.die(b, null, d, a) }, trigger: function(a, b) { return this.each(function() { c.event.trigger(a, b, this) }) }, triggerHandler: function(a, b) { if (this[0]) { a = c.Event(a); a.preventDefault(); a.stopPropagation(); c.event.trigger(a, b, this[0]); return a.result } },
+ toggle: function(a) { for (var b = arguments, d = 1; d < b.length; ) c.proxy(a, b[d++]); return this.click(c.proxy(a, function(f) { var e = (c.data(this, "lastToggle" + a.guid) || 0) % d; c.data(this, "lastToggle" + a.guid, e + 1); f.preventDefault(); return b[e].apply(this, arguments) || false })) }, hover: function(a, b) { return this.mouseenter(a).mouseleave(b || a) }
+ }); var Ga = { focus: "focusin", blur: "focusout", mouseenter: "mouseover", mouseleave: "mouseout" }; c.each(["live", "die"], function(a, b) {
+ c.fn[b] = function(d, f, e, j) {
+ var i, o = 0, k, n, r = j || this.selector,
+u = j ? this : c(this.context); if (c.isFunction(f)) { e = f; f = w } for (d = (d || "").split(" "); (i = d[o++]) != null; ) { j = O.exec(i); k = ""; if (j) { k = j[0]; i = i.replace(O, "") } if (i === "hover") d.push("mouseenter" + k, "mouseleave" + k); else { n = i; if (i === "focus" || i === "blur") { d.push(Ga[i] + k); i += k } else i = (Ga[i] || i) + k; b === "live" ? u.each(function() { c.event.add(this, pa(i, r), { data: f, selector: r, handler: e, origType: i, origHandler: e, preType: n }) }) : u.unbind(pa(i, r), e) } } return this
+ }
+ }); c.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error".split(" "),
+function(a, b) { c.fn[b] = function(d) { return d ? this.bind(b, d) : this.trigger(b) }; if (c.attrFn) c.attrFn[b] = true }); A.attachEvent && !A.addEventListener && A.attachEvent("onunload", function() { for (var a in c.cache) if (c.cache[a].handle) try { c.event.remove(c.cache[a].handle.elem) } catch (b) { } }); (function() {
+ function a(g) { for (var h = "", l, m = 0; g[m]; m++) { l = g[m]; if (l.nodeType === 3 || l.nodeType === 4) h += l.nodeValue; else if (l.nodeType !== 8) h += a(l.childNodes) } return h } function b(g, h, l, m, q, p) {
+ q = 0; for (var v = m.length; q < v; q++) {
+ var t = m[q];
+ if (t) { t = t[g]; for (var y = false; t; ) { if (t.sizcache === l) { y = m[t.sizset]; break } if (t.nodeType === 1 && !p) { t.sizcache = l; t.sizset = q } if (t.nodeName.toLowerCase() === h) { y = t; break } t = t[g] } m[q] = y }
+ }
+ } function d(g, h, l, m, q, p) { q = 0; for (var v = m.length; q < v; q++) { var t = m[q]; if (t) { t = t[g]; for (var y = false; t; ) { if (t.sizcache === l) { y = m[t.sizset]; break } if (t.nodeType === 1) { if (!p) { t.sizcache = l; t.sizset = q } if (typeof h !== "string") { if (t === h) { y = true; break } } else if (k.filter(h, [t]).length > 0) { y = t; break } } t = t[g] } m[q] = y } } } var f = /((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^[\]]*\]|['"][^'"]*['"]|[^[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,
+e = 0, j = Object.prototype.toString, i = false, o = true; [0, 0].sort(function() { o = false; return 0 }); var k = function(g, h, l, m) {
+ l = l || []; var q = h = h || s; if (h.nodeType !== 1 && h.nodeType !== 9) return []; if (!g || typeof g !== "string") return l; for (var p = [], v, t, y, S, H = true, M = x(h), I = g; (f.exec(""), v = f.exec(I)) !== null; ) { I = v[3]; p.push(v[1]); if (v[2]) { S = v[3]; break } } if (p.length > 1 && r.exec(g)) if (p.length === 2 && n.relative[p[0]]) t = ga(p[0] + p[1], h); else for (t = n.relative[p[0]] ? [h] : k(p.shift(), h); p.length; ) {
+ g = p.shift(); if (n.relative[g]) g += p.shift();
+ t = ga(g, t)
+ } else { if (!m && p.length > 1 && h.nodeType === 9 && !M && n.match.ID.test(p[0]) && !n.match.ID.test(p[p.length - 1])) { v = k.find(p.shift(), h, M); h = v.expr ? k.filter(v.expr, v.set)[0] : v.set[0] } if (h) { v = m ? { expr: p.pop(), set: z(m)} : k.find(p.pop(), p.length === 1 && (p[0] === "~" || p[0] === "+") && h.parentNode ? h.parentNode : h, M); t = v.expr ? k.filter(v.expr, v.set) : v.set; if (p.length > 0) y = z(t); else H = false; for (; p.length; ) { var D = p.pop(); v = D; if (n.relative[D]) v = p.pop(); else D = ""; if (v == null) v = h; n.relative[D](y, v, M) } } else y = [] } y || (y = t); y || k.error(D ||
+g); if (j.call(y) === "[object Array]") if (H) if (h && h.nodeType === 1) for (g = 0; y[g] != null; g++) { if (y[g] && (y[g] === true || y[g].nodeType === 1 && E(h, y[g]))) l.push(t[g]) } else for (g = 0; y[g] != null; g++) y[g] && y[g].nodeType === 1 && l.push(t[g]); else l.push.apply(l, y); else z(y, l); if (S) { k(S, q, l, m); k.uniqueSort(l) } return l
+}; k.uniqueSort = function(g) { if (B) { i = o; g.sort(B); if (i) for (var h = 1; h < g.length; h++) g[h] === g[h - 1] && g.splice(h--, 1) } return g }; k.matches = function(g, h) { return k(g, null, null, h) }; k.find = function(g, h, l) {
+ var m, q; if (!g) return [];
+ for (var p = 0, v = n.order.length; p < v; p++) { var t = n.order[p]; if (q = n.leftMatch[t].exec(g)) { var y = q[1]; q.splice(1, 1); if (y.substr(y.length - 1) !== "\\") { q[1] = (q[1] || "").replace(/\\/g, ""); m = n.find[t](q, h, l); if (m != null) { g = g.replace(n.match[t], ""); break } } } } m || (m = h.getElementsByTagName("*")); return { set: m, expr: g}
+}; k.filter = function(g, h, l, m) {
+ for (var q = g, p = [], v = h, t, y, S = h && h[0] && x(h[0]); g && h.length; ) {
+ for (var H in n.filter) if ((t = n.leftMatch[H].exec(g)) != null && t[2]) {
+ var M = n.filter[H], I, D; D = t[1]; y = false; t.splice(1, 1); if (D.substr(D.length -
+1) !== "\\") { if (v === p) p = []; if (n.preFilter[H]) if (t = n.preFilter[H](t, v, l, p, m, S)) { if (t === true) continue } else y = I = true; if (t) for (var U = 0; (D = v[U]) != null; U++) if (D) { I = M(D, t, U, v); var Ha = m ^ !!I; if (l && I != null) if (Ha) y = true; else v[U] = false; else if (Ha) { p.push(D); y = true } } if (I !== w) { l || (v = p); g = g.replace(n.match[H], ""); if (!y) return []; break } }
+ } if (g === q) if (y == null) k.error(g); else break; q = g
+ } return v
+}; k.error = function(g) { throw "Syntax error, unrecognized expression: " + g; }; var n = k.selectors = { order: ["ID", "NAME", "TAG"], match: { ID: /#((?:[\w\u00c0-\uFFFF-]|\\.)+)/,
+ CLASS: /\.((?:[\w\u00c0-\uFFFF-]|\\.)+)/, NAME: /\[name=['"]*((?:[\w\u00c0-\uFFFF-]|\\.)+)['"]*\]/, ATTR: /\[\s*((?:[\w\u00c0-\uFFFF-]|\\.)+)\s*(?:(\S?=)\s*(['"]*)(.*?)\3|)\s*\]/, TAG: /^((?:[\w\u00c0-\uFFFF\*-]|\\.)+)/, CHILD: /:(only|nth|last|first)-child(?:\((even|odd|[\dn+-]*)\))?/, POS: /:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^-]|$)/, PSEUDO: /:((?:[\w\u00c0-\uFFFF-]|\\.)+)(?:\((['"]?)((?:\([^\)]+\)|[^\(\)]*)+)\2\))?/
+}, leftMatch: {}, attrMap: { "class": "className", "for": "htmlFor" }, attrHandle: { href: function(g) { return g.getAttribute("href") } },
+ relative: { "+": function(g, h) { var l = typeof h === "string", m = l && !/\W/.test(h); l = l && !m; if (m) h = h.toLowerCase(); m = 0; for (var q = g.length, p; m < q; m++) if (p = g[m]) { for (; (p = p.previousSibling) && p.nodeType !== 1; ); g[m] = l || p && p.nodeName.toLowerCase() === h ? p || false : p === h } l && k.filter(h, g, true) }, ">": function(g, h) {
+ var l = typeof h === "string"; if (l && !/\W/.test(h)) { h = h.toLowerCase(); for (var m = 0, q = g.length; m < q; m++) { var p = g[m]; if (p) { l = p.parentNode; g[m] = l.nodeName.toLowerCase() === h ? l : false } } } else {
+ m = 0; for (q = g.length; m < q; m++) if (p = g[m]) g[m] =
+l ? p.parentNode : p.parentNode === h; l && k.filter(h, g, true)
+ }
+ }, "": function(g, h, l) { var m = e++, q = d; if (typeof h === "string" && !/\W/.test(h)) { var p = h = h.toLowerCase(); q = b } q("parentNode", h, m, g, p, l) }, "~": function(g, h, l) { var m = e++, q = d; if (typeof h === "string" && !/\W/.test(h)) { var p = h = h.toLowerCase(); q = b } q("previousSibling", h, m, g, p, l) }
+ }, find: { ID: function(g, h, l) { if (typeof h.getElementById !== "undefined" && !l) return (g = h.getElementById(g[1])) ? [g] : [] }, NAME: function(g, h) {
+ if (typeof h.getElementsByName !== "undefined") {
+ var l = [];
+ h = h.getElementsByName(g[1]); for (var m = 0, q = h.length; m < q; m++) h[m].getAttribute("name") === g[1] && l.push(h[m]); return l.length === 0 ? null : l
+ }
+ }, TAG: function(g, h) { return h.getElementsByTagName(g[1]) }
+ }, preFilter: { CLASS: function(g, h, l, m, q, p) { g = " " + g[1].replace(/\\/g, "") + " "; if (p) return g; p = 0; for (var v; (v = h[p]) != null; p++) if (v) if (q ^ (v.className && (" " + v.className + " ").replace(/[\t\n]/g, " ").indexOf(g) >= 0)) l || m.push(v); else if (l) h[p] = false; return false }, ID: function(g) { return g[1].replace(/\\/g, "") }, TAG: function(g) { return g[1].toLowerCase() },
+ CHILD: function(g) { if (g[1] === "nth") { var h = /(-?)(\d*)n((?:\+|-)?\d*)/.exec(g[2] === "even" && "2n" || g[2] === "odd" && "2n+1" || !/\D/.test(g[2]) && "0n+" + g[2] || g[2]); g[2] = h[1] + (h[2] || 1) - 0; g[3] = h[3] - 0 } g[0] = e++; return g }, ATTR: function(g, h, l, m, q, p) { h = g[1].replace(/\\/g, ""); if (!p && n.attrMap[h]) g[1] = n.attrMap[h]; if (g[2] === "~=") g[4] = " " + g[4] + " "; return g }, PSEUDO: function(g, h, l, m, q) {
+ if (g[1] === "not") if ((f.exec(g[3]) || "").length > 1 || /^\w/.test(g[3])) g[3] = k(g[3], null, null, h); else {
+ g = k.filter(g[3], h, l, true ^ q); l || m.push.apply(m,
+g); return false
+ } else if (n.match.POS.test(g[0]) || n.match.CHILD.test(g[0])) return true; return g
+ }, POS: function(g) { g.unshift(true); return g }
+ }, filters: { enabled: function(g) { return g.disabled === false && g.type !== "hidden" }, disabled: function(g) { return g.disabled === true }, checked: function(g) { return g.checked === true }, selected: function(g) { return g.selected === true }, parent: function(g) { return !!g.firstChild }, empty: function(g) { return !g.firstChild }, has: function(g, h, l) { return !!k(l[3], g).length }, header: function(g) { return /h\d/i.test(g.nodeName) },
+ text: function(g) { return "text" === g.type }, radio: function(g) { return "radio" === g.type }, checkbox: function(g) { return "checkbox" === g.type }, file: function(g) { return "file" === g.type }, password: function(g) { return "password" === g.type }, submit: function(g) { return "submit" === g.type }, image: function(g) { return "image" === g.type }, reset: function(g) { return "reset" === g.type }, button: function(g) { return "button" === g.type || g.nodeName.toLowerCase() === "button" }, input: function(g) { return /input|select|textarea|button/i.test(g.nodeName) }
+ },
+ setFilters: { first: function(g, h) { return h === 0 }, last: function(g, h, l, m) { return h === m.length - 1 }, even: function(g, h) { return h % 2 === 0 }, odd: function(g, h) { return h % 2 === 1 }, lt: function(g, h, l) { return h < l[3] - 0 }, gt: function(g, h, l) { return h > l[3] - 0 }, nth: function(g, h, l) { return l[3] - 0 === h }, eq: function(g, h, l) { return l[3] - 0 === h } }, filter: { PSEUDO: function(g, h, l, m) {
+ var q = h[1], p = n.filters[q]; if (p) return p(g, l, h, m); else if (q === "contains") return (g.textContent || g.innerText || a([g]) || "").indexOf(h[3]) >= 0; else if (q === "not") {
+ h =
+h[3]; l = 0; for (m = h.length; l < m; l++) if (h[l] === g) return false; return true
+ } else k.error("Syntax error, unrecognized expression: " + q)
+ }, CHILD: function(g, h) {
+ var l = h[1], m = g; switch (l) {
+ case "only": case "first": for (; m = m.previousSibling; ) if (m.nodeType === 1) return false; if (l === "first") return true; m = g; case "last": for (; m = m.nextSibling; ) if (m.nodeType === 1) return false; return true; case "nth": l = h[2]; var q = h[3]; if (l === 1 && q === 0) return true; h = h[0]; var p = g.parentNode; if (p && (p.sizcache !== h || !g.nodeIndex)) {
+ var v = 0; for (m = p.firstChild; m; m =
+m.nextSibling) if (m.nodeType === 1) m.nodeIndex = ++v; p.sizcache = h
+ } g = g.nodeIndex - q; return l === 0 ? g === 0 : g % l === 0 && g / l >= 0
+ }
+ }, ID: function(g, h) { return g.nodeType === 1 && g.getAttribute("id") === h }, TAG: function(g, h) { return h === "*" && g.nodeType === 1 || g.nodeName.toLowerCase() === h }, CLASS: function(g, h) { return (" " + (g.className || g.getAttribute("class")) + " ").indexOf(h) > -1 }, ATTR: function(g, h) {
+ var l = h[1]; g = n.attrHandle[l] ? n.attrHandle[l](g) : g[l] != null ? g[l] : g.getAttribute(l); l = g + ""; var m = h[2]; h = h[4]; return g == null ? m === "!=" : m ===
+"=" ? l === h : m === "*=" ? l.indexOf(h) >= 0 : m === "~=" ? (" " + l + " ").indexOf(h) >= 0 : !h ? l && g !== false : m === "!=" ? l !== h : m === "^=" ? l.indexOf(h) === 0 : m === "$=" ? l.substr(l.length - h.length) === h : m === "|=" ? l === h || l.substr(0, h.length + 1) === h + "-" : false
+ }, POS: function(g, h, l, m) { var q = n.setFilters[h[2]]; if (q) return q(g, l, h, m) } }
+ }, r = n.match.POS; for (var u in n.match) {
+ n.match[u] = new RegExp(n.match[u].source + /(?![^\[]*\])(?![^\(]*\))/.source); n.leftMatch[u] = new RegExp(/(^(?:.|\r|\n)*?)/.source + n.match[u].source.replace(/\\(\d+)/g, function(g,
+h) { return "\\" + (h - 0 + 1) }))
+ } var z = function(g, h) { g = Array.prototype.slice.call(g, 0); if (h) { h.push.apply(h, g); return h } return g }; try { Array.prototype.slice.call(s.documentElement.childNodes, 0) } catch (C) { z = function(g, h) { h = h || []; if (j.call(g) === "[object Array]") Array.prototype.push.apply(h, g); else if (typeof g.length === "number") for (var l = 0, m = g.length; l < m; l++) h.push(g[l]); else for (l = 0; g[l]; l++) h.push(g[l]); return h } } var B; if (s.documentElement.compareDocumentPosition) B = function(g, h) {
+ if (!g.compareDocumentPosition ||
+!h.compareDocumentPosition) { if (g == h) i = true; return g.compareDocumentPosition ? -1 : 1 } g = g.compareDocumentPosition(h) & 4 ? -1 : g === h ? 0 : 1; if (g === 0) i = true; return g
+ }; else if ("sourceIndex" in s.documentElement) B = function(g, h) { if (!g.sourceIndex || !h.sourceIndex) { if (g == h) i = true; return g.sourceIndex ? -1 : 1 } g = g.sourceIndex - h.sourceIndex; if (g === 0) i = true; return g }; else if (s.createRange) B = function(g, h) {
+ if (!g.ownerDocument || !h.ownerDocument) { if (g == h) i = true; return g.ownerDocument ? -1 : 1 } var l = g.ownerDocument.createRange(), m =
+h.ownerDocument.createRange(); l.setStart(g, 0); l.setEnd(g, 0); m.setStart(h, 0); m.setEnd(h, 0); g = l.compareBoundaryPoints(Range.START_TO_END, m); if (g === 0) i = true; return g
+ }; (function() {
+ var g = s.createElement("div"), h = "script" + (new Date).getTime(); g.innerHTML = ""; var l = s.documentElement; l.insertBefore(g, l.firstChild); if (s.getElementById(h)) {
+ n.find.ID = function(m, q, p) {
+ if (typeof q.getElementById !== "undefined" && !p) return (q = q.getElementById(m[1])) ? q.id === m[1] || typeof q.getAttributeNode !== "undefined" &&
+q.getAttributeNode("id").nodeValue === m[1] ? [q] : w : []
+ }; n.filter.ID = function(m, q) { var p = typeof m.getAttributeNode !== "undefined" && m.getAttributeNode("id"); return m.nodeType === 1 && p && p.nodeValue === q }
+ } l.removeChild(g); l = g = null
+ })(); (function() {
+ var g = s.createElement("div"); g.appendChild(s.createComment("")); if (g.getElementsByTagName("*").length > 0) n.find.TAG = function(h, l) { l = l.getElementsByTagName(h[1]); if (h[1] === "*") { h = []; for (var m = 0; l[m]; m++) l[m].nodeType === 1 && h.push(l[m]); l = h } return l }; g.innerHTML = "";
+ if (g.firstChild && typeof g.firstChild.getAttribute !== "undefined" && g.firstChild.getAttribute("href") !== "#") n.attrHandle.href = function(h) { return h.getAttribute("href", 2) }; g = null
+ })(); s.querySelectorAll && function() { var g = k, h = s.createElement("div"); h.innerHTML = ""; if (!(h.querySelectorAll && h.querySelectorAll(".TEST").length === 0)) { k = function(m, q, p, v) { q = q || s; if (!v && q.nodeType === 9 && !x(q)) try { return z(q.querySelectorAll(m), p) } catch (t) { } return g(m, q, p, v) }; for (var l in g) k[l] = g[l]; h = null } } ();
+ (function() { var g = s.createElement("div"); g.innerHTML = ""; if (!(!g.getElementsByClassName || g.getElementsByClassName("e").length === 0)) { g.lastChild.className = "e"; if (g.getElementsByClassName("e").length !== 1) { n.order.splice(1, 0, "CLASS"); n.find.CLASS = function(h, l, m) { if (typeof l.getElementsByClassName !== "undefined" && !m) return l.getElementsByClassName(h[1]) }; g = null } } })(); var E = s.compareDocumentPosition ? function(g, h) { return !!(g.compareDocumentPosition(h) & 16) } :
+function(g, h) { return g !== h && (g.contains ? g.contains(h) : true) }, x = function(g) { return (g = (g ? g.ownerDocument || g : 0).documentElement) ? g.nodeName !== "HTML" : false }, ga = function(g, h) { var l = [], m = "", q; for (h = h.nodeType ? [h] : h; q = n.match.PSEUDO.exec(g); ) { m += q[0]; g = g.replace(n.match.PSEUDO, "") } g = n.relative[g] ? g + "*" : g; q = 0; for (var p = h.length; q < p; q++) k(g, h[q], l); return k.filter(m, l) }; c.find = k; c.expr = k.selectors; c.expr[":"] = c.expr.filters; c.unique = k.uniqueSort; c.text = a; c.isXMLDoc = x; c.contains = E
+})(); var eb = /Until$/, fb = /^(?:parents|prevUntil|prevAll)/,
+gb = /,/; R = Array.prototype.slice; var Ia = function(a, b, d) { if (c.isFunction(b)) return c.grep(a, function(e, j) { return !!b.call(e, j, e) === d }); else if (b.nodeType) return c.grep(a, function(e) { return e === b === d }); else if (typeof b === "string") { var f = c.grep(a, function(e) { return e.nodeType === 1 }); if (Ua.test(b)) return c.filter(b, f, !d); else b = c.filter(b, f) } return c.grep(a, function(e) { return c.inArray(e, b) >= 0 === d }) }; c.fn.extend({ find: function(a) {
+ for (var b = this.pushStack("", "find", a), d = 0, f = 0, e = this.length; f < e; f++) {
+ d = b.length;
+ c.find(a, this[f], b); if (f > 0) for (var j = d; j < b.length; j++) for (var i = 0; i < d; i++) if (b[i] === b[j]) { b.splice(j--, 1); break }
+ } return b
+}, has: function(a) { var b = c(a); return this.filter(function() { for (var d = 0, f = b.length; d < f; d++) if (c.contains(this, b[d])) return true }) }, not: function(a) { return this.pushStack(Ia(this, a, false), "not", a) }, filter: function(a) { return this.pushStack(Ia(this, a, true), "filter", a) }, is: function(a) { return !!a && c.filter(a, this).length > 0 }, closest: function(a, b) {
+ if (c.isArray(a)) {
+ var d = [], f = this[0], e, j =
+{}, i; if (f && a.length) { e = 0; for (var o = a.length; e < o; e++) { i = a[e]; j[i] || (j[i] = c.expr.match.POS.test(i) ? c(i, b || this.context) : i) } for (; f && f.ownerDocument && f !== b; ) { for (i in j) { e = j[i]; if (e.jquery ? e.index(f) > -1 : c(f).is(e)) { d.push({ selector: i, elem: f }); delete j[i] } } f = f.parentNode } } return d
+ } var k = c.expr.match.POS.test(a) ? c(a, b || this.context) : null; return this.map(function(n, r) { for (; r && r.ownerDocument && r !== b; ) { if (k ? k.index(r) > -1 : c(r).is(a)) return r; r = r.parentNode } return null })
+}, index: function(a) {
+ if (!a || typeof a ===
+"string") return c.inArray(this[0], a ? c(a) : this.parent().children()); return c.inArray(a.jquery ? a[0] : a, this)
+}, add: function(a, b) { a = typeof a === "string" ? c(a, b || this.context) : c.makeArray(a); b = c.merge(this.get(), a); return this.pushStack(qa(a[0]) || qa(b[0]) ? b : c.unique(b)) }, andSelf: function() { return this.add(this.prevObject) }
+}); c.each({ parent: function(a) { return (a = a.parentNode) && a.nodeType !== 11 ? a : null }, parents: function(a) { return c.dir(a, "parentNode") }, parentsUntil: function(a, b, d) {
+ return c.dir(a, "parentNode",
+d)
+}, next: function(a) { return c.nth(a, 2, "nextSibling") }, prev: function(a) { return c.nth(a, 2, "previousSibling") }, nextAll: function(a) { return c.dir(a, "nextSibling") }, prevAll: function(a) { return c.dir(a, "previousSibling") }, nextUntil: function(a, b, d) { return c.dir(a, "nextSibling", d) }, prevUntil: function(a, b, d) { return c.dir(a, "previousSibling", d) }, siblings: function(a) { return c.sibling(a.parentNode.firstChild, a) }, children: function(a) { return c.sibling(a.firstChild) }, contents: function(a) {
+ return c.nodeName(a, "iframe") ?
+a.contentDocument || a.contentWindow.document : c.makeArray(a.childNodes)
+}
+}, function(a, b) { c.fn[a] = function(d, f) { var e = c.map(this, b, d); eb.test(a) || (f = d); if (f && typeof f === "string") e = c.filter(f, e); e = this.length > 1 ? c.unique(e) : e; if ((this.length > 1 || gb.test(f)) && fb.test(a)) e = e.reverse(); return this.pushStack(e, a, R.call(arguments).join(",")) } }); c.extend({ filter: function(a, b, d) { if (d) a = ":not(" + a + ")"; return c.find.matches(a, b) }, dir: function(a, b, d) {
+ var f = []; for (a = a[b]; a && a.nodeType !== 9 && (d === w || a.nodeType !== 1 || !c(a).is(d)); ) {
+ a.nodeType ===
+1 && f.push(a); a = a[b]
+ } return f
+}, nth: function(a, b, d) { b = b || 1; for (var f = 0; a; a = a[d]) if (a.nodeType === 1 && ++f === b) break; return a }, sibling: function(a, b) { for (var d = []; a; a = a.nextSibling) a.nodeType === 1 && a !== b && d.push(a); return d }
+}); var Ja = / jQuery\d+="(?:\d+|null)"/g, V = /^\s+/, Ka = /(<([\w:]+)[^>]*?)\/>/g, hb = /^(?:area|br|col|embed|hr|img|input|link|meta|param)$/i, La = /<([\w:]+)/, ib = /" + d + ">"
+}, F = { option: [1, ""], legend: [1, ""], thead: [1, ""], tr: [2, ""], td: [3, ""], col: [2, ""], area: [1, ""], _default: [0, "", ""] }; F.optgroup = F.option; F.tbody = F.tfoot = F.colgroup = F.caption = F.thead; F.th = F.td; if (!c.support.htmlSerialize) F._default = [1, "div", "
"]; c.fn.extend({ text: function(a) {
+ if (c.isFunction(a)) return this.each(function(b) {
+ var d =
+c(this); d.text(a.call(this, b, d.text()))
+ }); if (typeof a !== "object" && a !== w) return this.empty().append((this[0] && this[0].ownerDocument || s).createTextNode(a)); return c.text(this)
+}, wrapAll: function(a) { if (c.isFunction(a)) return this.each(function(d) { c(this).wrapAll(a.call(this, d)) }); if (this[0]) { var b = c(a, this[0].ownerDocument).eq(0).clone(true); this[0].parentNode && b.insertBefore(this[0]); b.map(function() { for (var d = this; d.firstChild && d.firstChild.nodeType === 1; ) d = d.firstChild; return d }).append(this) } return this },
+ wrapInner: function(a) { if (c.isFunction(a)) return this.each(function(b) { c(this).wrapInner(a.call(this, b)) }); return this.each(function() { var b = c(this), d = b.contents(); d.length ? d.wrapAll(a) : b.append(a) }) }, wrap: function(a) { return this.each(function() { c(this).wrapAll(a) }) }, unwrap: function() { return this.parent().each(function() { c.nodeName(this, "body") || c(this).replaceWith(this.childNodes) }).end() }, append: function() { return this.domManip(arguments, true, function(a) { this.nodeType === 1 && this.appendChild(a) }) },
+ prepend: function() { return this.domManip(arguments, true, function(a) { this.nodeType === 1 && this.insertBefore(a, this.firstChild) }) }, before: function() { if (this[0] && this[0].parentNode) return this.domManip(arguments, false, function(b) { this.parentNode.insertBefore(b, this) }); else if (arguments.length) { var a = c(arguments[0]); a.push.apply(a, this.toArray()); return this.pushStack(a, "before", arguments) } }, after: function() {
+ if (this[0] && this[0].parentNode) return this.domManip(arguments, false, function(b) {
+ this.parentNode.insertBefore(b,
+this.nextSibling)
+ }); else if (arguments.length) { var a = this.pushStack(this, "after", arguments); a.push.apply(a, c(arguments[0]).toArray()); return a }
+ }, remove: function(a, b) { for (var d = 0, f; (f = this[d]) != null; d++) if (!a || c.filter(a, [f]).length) { if (!b && f.nodeType === 1) { c.cleanData(f.getElementsByTagName("*")); c.cleanData([f]) } f.parentNode && f.parentNode.removeChild(f) } return this }, empty: function() {
+ for (var a = 0, b; (b = this[a]) != null; a++) for (b.nodeType === 1 && c.cleanData(b.getElementsByTagName("*")); b.firstChild; ) b.removeChild(b.firstChild);
+ return this
+ }, clone: function(a) { var b = this.map(function() { if (!c.support.noCloneEvent && !c.isXMLDoc(this)) { var d = this.outerHTML, f = this.ownerDocument; if (!d) { d = f.createElement("div"); d.appendChild(this.cloneNode(true)); d = d.innerHTML } return c.clean([d.replace(Ja, "").replace(/=([^="'>\s]+\/)>/g, '="$1">').replace(V, "")], f)[0] } else return this.cloneNode(true) }); if (a === true) { ra(this, b); ra(this.find("*"), b.find("*")) } return b }, html: function(a) {
+ if (a === w) return this[0] && this[0].nodeType === 1 ? this[0].innerHTML.replace(Ja,
+"") : null; else if (typeof a === "string" && !ta.test(a) && (c.support.leadingWhitespace || !V.test(a)) && !F[(La.exec(a) || ["", ""])[1].toLowerCase()]) { a = a.replace(Ka, Ma); try { for (var b = 0, d = this.length; b < d; b++) if (this[b].nodeType === 1) { c.cleanData(this[b].getElementsByTagName("*")); this[b].innerHTML = a } } catch (f) { this.empty().append(a) } } else c.isFunction(a) ? this.each(function(e) { var j = c(this), i = j.html(); j.empty().append(function() { return a.call(this, e, i) }) }) : this.empty().append(a); return this
+ }, replaceWith: function(a) {
+ if (this[0] &&
+this[0].parentNode) { if (c.isFunction(a)) return this.each(function(b) { var d = c(this), f = d.html(); d.replaceWith(a.call(this, b, f)) }); if (typeof a !== "string") a = c(a).detach(); return this.each(function() { var b = this.nextSibling, d = this.parentNode; c(this).remove(); b ? c(b).before(a) : c(d).append(a) }) } else return this.pushStack(c(c.isFunction(a) ? a() : a), "replaceWith", a)
+ }, detach: function(a) { return this.remove(a, true) }, domManip: function(a, b, d) {
+ function f(u) {
+ return c.nodeName(u, "table") ? u.getElementsByTagName("tbody")[0] ||
+u.appendChild(u.ownerDocument.createElement("tbody")) : u
+ } var e, j, i = a[0], o = [], k; if (!c.support.checkClone && arguments.length === 3 && typeof i === "string" && ua.test(i)) return this.each(function() { c(this).domManip(a, b, d, true) }); if (c.isFunction(i)) return this.each(function(u) { var z = c(this); a[0] = i.call(this, u, b ? z.html() : w); z.domManip(a, b, d) }); if (this[0]) {
+ e = i && i.parentNode; e = c.support.parentNode && e && e.nodeType === 11 && e.childNodes.length === this.length ? { fragment: e} : sa(a, this, o); k = e.fragment; if (j = k.childNodes.length ===
+1 ? (k = k.firstChild) : k.firstChild) { b = b && c.nodeName(j, "tr"); for (var n = 0, r = this.length; n < r; n++) d.call(b ? f(this[n], j) : this[n], n > 0 || e.cacheable || this.length > 1 ? k.cloneNode(true) : k) } o.length && c.each(o, Qa)
+ } return this
+ }
+}); c.fragments = {}; c.each({ appendTo: "append", prependTo: "prepend", insertBefore: "before", insertAfter: "after", replaceAll: "replaceWith" }, function(a, b) {
+ c.fn[a] = function(d) {
+ var f = []; d = c(d); var e = this.length === 1 && this[0].parentNode; if (e && e.nodeType === 11 && e.childNodes.length === 1 && d.length === 1) {
+ d[b](this[0]);
+ return this
+ } else { e = 0; for (var j = d.length; e < j; e++) { var i = (e > 0 ? this.clone(true) : this).get(); c.fn[b].apply(c(d[e]), i); f = f.concat(i) } return this.pushStack(f, a, d.selector) }
+ }
+}); c.extend({ clean: function(a, b, d, f) {
+ b = b || s; if (typeof b.createElement === "undefined") b = b.ownerDocument || b[0] && b[0].ownerDocument || s; for (var e = [], j = 0, i; (i = a[j]) != null; j++) {
+ if (typeof i === "number") i += ""; if (i) {
+ if (typeof i === "string" && !jb.test(i)) i = b.createTextNode(i); else if (typeof i === "string") {
+ i = i.replace(Ka, Ma); var o = (La.exec(i) || ["",
+""])[1].toLowerCase(), k = F[o] || F._default, n = k[0], r = b.createElement("div"); for (r.innerHTML = k[1] + i + k[2]; n--; ) r = r.lastChild; if (!c.support.tbody) { n = ib.test(i); o = o === "table" && !n ? r.firstChild && r.firstChild.childNodes : k[1] === "" && !n ? r.childNodes : []; for (k = o.length - 1; k >= 0; --k) c.nodeName(o[k], "tbody") && !o[k].childNodes.length && o[k].parentNode.removeChild(o[k]) } !c.support.leadingWhitespace && V.test(i) && r.insertBefore(b.createTextNode(V.exec(i)[0]), r.firstChild); i = r.childNodes
+ } if (i.nodeType) e.push(i); else e =
+c.merge(e, i)
+ }
+ } if (d) for (j = 0; e[j]; j++) if (f && c.nodeName(e[j], "script") && (!e[j].type || e[j].type.toLowerCase() === "text/javascript")) f.push(e[j].parentNode ? e[j].parentNode.removeChild(e[j]) : e[j]); else { e[j].nodeType === 1 && e.splice.apply(e, [j + 1, 0].concat(c.makeArray(e[j].getElementsByTagName("script")))); d.appendChild(e[j]) } return e
+}, cleanData: function(a) {
+ for (var b, d, f = c.cache, e = c.event.special, j = c.support.deleteExpando, i = 0, o; (o = a[i]) != null; i++) if (d = o[c.expando]) {
+ b = f[d]; if (b.events) for (var k in b.events) e[k] ?
+c.event.remove(o, k) : Ca(o, k, b.handle); if (j) delete o[c.expando]; else o.removeAttribute && o.removeAttribute(c.expando); delete f[d]
+ }
+}
+}); var kb = /z-?index|font-?weight|opacity|zoom|line-?height/i, Na = /alpha\([^)]*\)/, Oa = /opacity=([^)]*)/, ha = /float/i, ia = /-([a-z])/ig, lb = /([A-Z])/g, mb = /^-?\d+(?:px)?$/i, nb = /^-?\d/, ob = { position: "absolute", visibility: "hidden", display: "block" }, pb = ["Left", "Right"], qb = ["Top", "Bottom"], rb = s.defaultView && s.defaultView.getComputedStyle, Pa = c.support.cssFloat ? "cssFloat" : "styleFloat", ja =
+function(a, b) { return b.toUpperCase() }; c.fn.css = function(a, b) { return X(this, a, b, true, function(d, f, e) { if (e === w) return c.curCSS(d, f); if (typeof e === "number" && !kb.test(f)) e += "px"; c.style(d, f, e) }) }; c.extend({ style: function(a, b, d) {
+ if (!a || a.nodeType === 3 || a.nodeType === 8) return w; if ((b === "width" || b === "height") && parseFloat(d) < 0) d = w; var f = a.style || a, e = d !== w; if (!c.support.opacity && b === "opacity") {
+ if (e) {
+ f.zoom = 1; b = parseInt(d, 10) + "" === "NaN" ? "" : "alpha(opacity=" + d * 100 + ")"; a = f.filter || c.curCSS(a, "filter") || ""; f.filter =
+Na.test(a) ? a.replace(Na, b) : b
+ } return f.filter && f.filter.indexOf("opacity=") >= 0 ? parseFloat(Oa.exec(f.filter)[1]) / 100 + "" : ""
+ } if (ha.test(b)) b = Pa; b = b.replace(ia, ja); if (e) f[b] = d; return f[b]
+}, css: function(a, b, d, f) {
+ if (b === "width" || b === "height") {
+ var e, j = b === "width" ? pb : qb; function i() {
+ e = b === "width" ? a.offsetWidth : a.offsetHeight; f !== "border" && c.each(j, function() {
+ f || (e -= parseFloat(c.curCSS(a, "padding" + this, true)) || 0); if (f === "margin") e += parseFloat(c.curCSS(a, "margin" + this, true)) || 0; else e -= parseFloat(c.curCSS(a,
+"border" + this + "Width", true)) || 0
+ })
+ } a.offsetWidth !== 0 ? i() : c.swap(a, ob, i); return Math.max(0, Math.round(e))
+ } return c.curCSS(a, b, d)
+}, curCSS: function(a, b, d) {
+ var f, e = a.style; if (!c.support.opacity && b === "opacity" && a.currentStyle) { f = Oa.test(a.currentStyle.filter || "") ? parseFloat(RegExp.$1) / 100 + "" : ""; return f === "" ? "1" : f } if (ha.test(b)) b = Pa; if (!d && e && e[b]) f = e[b]; else if (rb) {
+ if (ha.test(b)) b = "float"; b = b.replace(lb, "-$1").toLowerCase(); e = a.ownerDocument.defaultView; if (!e) return null; if (a = e.getComputedStyle(a, null)) f =
+a.getPropertyValue(b); if (b === "opacity" && f === "") f = "1"
+ } else if (a.currentStyle) { d = b.replace(ia, ja); f = a.currentStyle[b] || a.currentStyle[d]; if (!mb.test(f) && nb.test(f)) { b = e.left; var j = a.runtimeStyle.left; a.runtimeStyle.left = a.currentStyle.left; e.left = d === "fontSize" ? "1em" : f || 0; f = e.pixelLeft + "px"; e.left = b; a.runtimeStyle.left = j } } return f
+}, swap: function(a, b, d) { var f = {}; for (var e in b) { f[e] = a.style[e]; a.style[e] = b[e] } d.call(a); for (e in b) a.style[e] = f[e] }
+}); if (c.expr && c.expr.filters) {
+ c.expr.filters.hidden = function(a) {
+ var b =
+a.offsetWidth, d = a.offsetHeight, f = a.nodeName.toLowerCase() === "tr"; return b === 0 && d === 0 && !f ? true : b > 0 && d > 0 && !f ? false : c.curCSS(a, "display") === "none"
+ }; c.expr.filters.visible = function(a) { return !c.expr.filters.hidden(a) }
+ } var sb = J(), tb = /
+
+
+
+
+
+
+
+
+
+
+
+
+
+