*.pyc
*.egg-info
.DS_Store
+.project
+.pydevproject
snf-astakos-app/astakos/version.py
}
var root = $('body');
- var bar = $('<div class="servicesbar"></div>');
- var services = $('<div class="services"></div>');
+ var bar = $('<div class="header"></div>');
+ var services = $('<ul class="services"></ul>');
var profile = $('<div class="profile"></div>');
var get_services_url = window.GET_SERVICES_URL || window.CLOUDBAR_SERVICES;
// create services links and set the active class to the current service
$.getJSON(get_services_url + "?callback=?", function(data) {
$.each(data, function(i, el){
+ var sli = $("<li>");
var slink = $("<a>");
if (el.icon) {
slink.append($('<img src="'+cssloc+el.icon+'"/>'));
}
slink.attr('href', el.url);
slink.attr('title', el.name);
- services.append(slink);
+ sli.append(slink);
+ services.append(sli);
if (el.id == ACTIVE_MENU) {
- slink.addClass("active");
+ sli.addClass("active");
}
});
});
user.append(username);
user.append(usermenu);
profile.append(user);
- bar.append(services).append(profile);
+ bar.append(profile).append(services);
root.prepend(bar);
--- /dev/null
+body { -webkit-text-size-adjust:100%; }\r
+\r
+/* Mozilla */\r
+@-moz-document url-prefix() {\r
+ button::-moz-focus-inner,\r
+ input[type="image"]::-moz-focus-inner,\r
+ input[type="submit"]::-moz-focus-inner,\r
+ input[type="reset"]::-moz-focus-inner,\r
+ input[type="button"]::-moz-focus-inner { border:0; }\r
+ textarea { resize:none; }\r
+}\r
+\r
+/* Webkit */\r
+@media screen and (-webkit-min-device-pixel-ratio:0) {\r
+ button,\r
+ input[type="submit"],\r
+ input[type="reset"],\r
+ input[type="button"] { -webkit-appearance:button; }\r
+ input[type="text"]:focus,\r
+ input[type="password"]:focus,\r
+ textarea:focus { outline:0 none; }\r
+ textarea { resize:none; }\r
+ input[type="checkbox"],\r
+ input[type="radio"] { vertical-align:-2px; }\r
+ input[type="search"] { -webkit-appearance:textfield; }\r
+ input[type="search"]::-webkit-search-cancel-button { -webkit-appearance:none; }\r
+}\r
--- /dev/null
+\r
+#colorbox, #cboxOverlay, #cboxWrapper {\r
+ left: 0;\r
+ overflow: hidden;\r
+ position: absolute;\r
+ top: 0;\r
+ z-index: 9999;\r
+}\r
+#cboxOverlay {\r
+ height: 100%;\r
+ position: fixed;\r
+ width: 100%;\r
+}\r
+#cboxMiddleLeft, #cboxBottomLeft {\r
+ clear: left;\r
+}\r
+#cboxContent {\r
+ position: relative;\r
+}\r
+#cboxLoadedContent {\r
+ overflow: auto;\r
+}\r
+#cboxTitle {\r
+ margin: 0;\r
+}\r
+#cboxLoadingOverlay, #cboxLoadingGraphic {\r
+ height: 100%;\r
+ left: 0;\r
+ position: absolute;\r
+ top: 0;\r
+ width: 100%;\r
+}\r
+#cboxPrevious, #cboxNext, #cboxClose, #cboxSlideshow {\r
+ cursor: pointer;\r
+}\r
+.cboxPhoto {\r
+ border: 0 none;\r
+ display: block;\r
+ float: left;\r
+ margin: auto;\r
+}\r
+.cboxIframe {\r
+ border: 0 none;\r
+ display: block;\r
+ height: 100%;\r
+ width: 100%;\r
+}\r
+#cboxOverlay {\r
+ background: none repeat scroll 0 0 #000000;\r
+}\r
+#cboxContent {\r
+ margin-top: 20px;\r
+}\r
+.cboxIframe {\r
+ background: none repeat scroll 0 0 #FFFFFF;\r
+}\r
+#cboxError {\r
+ border: 1px solid #CCCCCC;\r
+ padding: 50px;\r
+}\r
+#cboxLoadedContent {\r
+ background: none repeat scroll 0 0 #FFFFFF;\r
+ border: 5px solid #000000;\r
+}\r
+#cboxTitle {\r
+ color: #CCCCCC;\r
+ left: 0;\r
+ position: absolute;\r
+ top: -20px;\r
+}\r
+#cboxCurrent {\r
+ color: #CCCCCC;\r
+ position: absolute;\r
+ right: 0;\r
+ top: -20px;\r
+}\r
+#cboxSlideshow {\r
+ color: #FFFFFF;\r
+ position: absolute;\r
+ right: 90px;\r
+ top: -20px;\r
+}\r
+#cboxPrevious {\r
+ background: url("../images/colorbox/controls.png") no-repeat scroll left top transparent;\r
+ height: 65px;\r
+ left: 5px;\r
+ margin-top: -32px;\r
+ position: absolute;\r
+ text-indent: -9999px;\r
+ top: 50%;\r
+ width: 28px;\r
+}\r
+#cboxPrevious:hover {\r
+ background-position: left bottom;\r
+}\r
+#cboxNext {\r
+ background: url("../images/colorbox/controls.png") no-repeat scroll right top transparent;\r
+ height: 65px;\r
+ margin-top: -32px;\r
+ position: absolute;\r
+ right: 5px;\r
+ text-indent: -9999px;\r
+ top: 50%;\r
+ width: 28px;\r
+}\r
+#cboxNext:hover {\r
+ background-position: right bottom;\r
+}\r
+#cboxLoadingOverlay {\r
+ background: none repeat scroll 0 0 #000000;\r
+}\r
+#cboxLoadingGraphic {\r
+ background: url("../images/colorbox/loading.gif") no-repeat scroll center center transparent;\r
+}\r
+#cboxClose {\r
+ background: url("../images/colorbox/controls.png") no-repeat scroll center top transparent;\r
+ display: block;\r
+ height: 19px;\r
+ position: absolute;\r
+ right: 5px;\r
+ text-indent: -9999px;\r
+ top: 5px;\r
+ width: 38px;\r
+}\r
+#cboxClose:hover {\r
+ background-position: center bottom;\r
+}
\ No newline at end of file
--- /dev/null
+/**
+ * Default DropKick theme
+ *
+ * Feel free to edit the default theme
+ * or even add your own.
+ *
+ * See the readme for themeing help
+ *
+ */
+
+/***** Begin Theme, feel free to edit in here! ******/
+
+/* One container to bind them... */
+.dk_container {
+ font-family: 'Antic', sans-serif;
+
+ font-weight: normal;
+ line-height: 42px;
+ letter-spacing: 1px;
+ border: 1px solid #808080;
+ height:42px;
+ display: inline-block;
+ margin-bottom: -1px;
+ padding-left:21px;
+
+ z-index: 2;
+ width:308px;
+}
+ .dk_container:focus {
+ outline: 0;
+ }
+ .dk_container a {
+ cursor: pointer;
+ text-decoration: none;
+ color:#808080;
+
+ }
+
+/* Opens the dropdown and holds the menu label */
+.dk_toggle {
+ /**
+ * Help: Arrow image not appearing
+ * Try updating this property to your correct dk_arrows.png path
+ */
+ background:url(../images/arrow_02.jpg) no-repeat 276px center;
+
+}
+ .dk_toggle:hover {
+
+ }
+ /* Applied when the dropdown is focused */
+ .dk_focus .dk_toggle {
+
+ }
+ .dk_focus .dk_toggle {
+
+ }
+
+/* Applied whenever the dropdown is open */
+.dk_open {
+
+ /**
+ * Help: Dropdown menu is covered by something
+ * Try setting this value higher
+ */
+ z-index: 10;
+}
+ .dk_open .dk_toggle {
+
+
+ }
+
+/* The outer container of the options */
+.dk_options {
+
+}
+ .dk_options a {
+ background-color: #fff;
+ border-bottom: 1px solid #999;
+ padding: 8px 20px;
+ }
+ .dk_options li:last-child a {
+ border-bottom: none;
+ }
+ .dk_options a:hover,
+ .dk_option_current a {
+
+ }
+
+/* Inner container for options, this is what makes the scrollbar possible. */
+.dk_options_inner {
+ padding:0;
+ margin:0;
+ border: 1px solid #808080;
+ border-top:0 none;
+}
+.dk_options_inner li { list-style:none outside;}
+
+/* Set a max-height on the options inner */
+.dk_options_inner,
+.dk_touch .dk_options {
+ max-height: 250px;
+}
+
+/****** End Theme ******/
+
+/***** Critical to the continued enjoyment of working dropdowns ******/
+
+.dk_container {
+ display: none;
+ position: relative;
+}
+ .dk_container a {
+ outline: 0;
+ }
+
+.dk_toggle {
+ display: -moz-inline-stack;
+ display: inline-block;
+ *display: inline;
+ position: relative;
+ zoom: 1;
+}
+
+.dk_open {
+ position: relative;
+}
+ .dk_open .dk_options {
+ display: block;
+ }
+ .dk_open .dk_label {
+ color: inherit;
+ }
+
+.dk_options {
+ display: none;
+ margin-top: -1px;
+ position: absolute;
+ right: 0;
+ width: 100%;
+}
+ .dk_options a,
+ .dk_options a:link,
+ .dk_options a:visited {
+ display: block;
+ }
+ .dk_options_inner {
+ overflow: auto;
+ position: relative;
+ }
+
+.dk_touch .dk_options {
+ overflow: hidden;
+}
+
+.dk_touch .dk_options_inner {
+ max-height: none;
+ overflow: visible;
+}
+
+.dk_fouc select {
+ position: relative;
+ top: -99999em;
+ visibility: hidden;
+}
+
+/***** End Critical to the continued enjoyment of working dropdowns ******/
--- /dev/null
+/* http://meyerweb.com/eric/tools/css/reset/ \r
+ v2.0 | 20110126\r
+ License: none (public domain)\r
+*/\r
+html, body, div, span, applet, object, iframe,\r
+h1, h2, h3, h4, h5, h6, p, blockquote, pre,\r
+a, abbr, acronym, address, big, cite, code,\r
+del, dfn, em, img, ins, kbd, q, s, samp,\r
+small, strike, strong, sub, sup, tt, var,\r
+b, u, i, center,\r
+dl, dt, dd, ol, ul, li,\r
+fieldset, form, label, legend,\r
+table, caption, tbody, tfoot, thead, tr, th, td,\r
+article, aside, canvas, details, embed, \r
+figure, figcaption, footer, header, hgroup, \r
+menu, nav, output, ruby, section, summary,\r
+time, mark, audio, video { border:0; margin:0; padding:0; font-size:100%; font:inherit; vertical-align:baseline; }\r
+\r
+/* HTML5 display-role reset for older browsers */\r
+article, aside, details, figcaption, figure, \r
+footer, header, hgroup, menu, nav, section { display:block; }\r
+\r
+/* defaults -----------------------------------*/\r
+:link, a, a:visited { color:#F89A1C; text-decoration:none; }\r
+a:hover { outline:0; text-decoration:underline; }\r
+a:focus { outline:0 none; text-decoration:none; }\r
+a:active { outline:0; text-decoration:none; }\r
+a img, :link img, :visited img { border:none; }\r
+a span { cursor:pointer; }\r
+abbr[title], dfn[title] { border-bottom:1px dotted; cursor:help; }\r
+address { font-style:italic; margin:0 0 1.5em 0; }\r
+body { background:white; color:#222; font-family: Antic, Arial, sans-serif; font-size:81.3%; line-height:1.5; text-align:left; letter-spacing:1px; }\r
+code, kbd, pre, samp { font-family:monospace, sans-serif; }\r
+del { text-decoration:line-through; }\r
+dl { margin:1em 0; }\r
+dl dd { margin-left:1em; }\r
+dt { font-weight:bold; }\r
+em, i { font-style:italic; font-weight:inherit; }\r
+h1, h2, h3, h4, h5, h6 { font-weight:bold; line-height:1.4; margin-bottom:0; }\r
+/* Typographic scale based on 12px body size */\r
+h1 { font-size:4em; }\r
+h2 { font-size:1.231em; }\r
+h3 { font-size:1.154em; }\r
+h4 { font-size:1.5em; }\r
+h5 { font-size:1.333em; }\r
+h6 { font-size:1.167em; }\r
+hr { border:0; border-top:1px solid; display:block; height:1px; margin:1em 0; padding:0; }\r
+img { border:0; vertical-align:middle; }\r
+ins { text-decoration:none; }\r
+p { margin-bottom:1em; }\r
+pre { overflow:auto; line-height:24px; }\r
+strong, b { font-weight:bold; font-style:inherit; }\r
+sub, sup { font-size:75%; line-height:0; position:relative; vertical-align:baseline; }\r
+sub { bottom:-0.25em; }\r
+sup { top:-0.5em; }\r
+\r
+button, input, select, textarea { font-size:100%; margin:0; vertical-align:baseline; }\r
+button, input { line-height:normal; }\r
+button[disabled], input[disabled] { cursor:default; }\r
+button,\r
+input[type="image"],\r
+input[type="submit"],\r
+input[type="reset"],\r
+input[type="button"] { cursor:pointer; overflow:visible; }\r
+input[type="checkbox"],\r
+input[type="radio"] { box-sizing:border-box; padding:0; }\r
+legend { border:0; white-space:normal; }\r
+optgroup { font-style:normal; font-weight:bold; }\r
+textarea { overflow:auto; vertical-align:top; }\r
+\r
+q { quotes:"‘" "’" "“" "”"; } /* http://html5doctor.com/blockquote-q-cite/ */\r
+q:before { content:"‘"; content:open-quote; }\r
+q:after { content:"’"; content:close-quote; }\r
+q q:before { content: "“"; content: open-quote; }\r
+q q:after { content: "”"; content: close-quote; }\r
+blockquote { quotes: "“" "”"; margin:1em 40px; }\r
+blockquote p:before { content: "“"; content: open-quote; }\r
+blockquote p:after { content: ""; content: no-close-quote; }\r
+blockquote p:last-of-type:after { content: "”"; content: close-quote; }\r
+blockquote { font-style:italic; margin:1em; }\r
+\r
+caption { font-weight:bold; text-align:left; margin-bottom:.2em; padding:0; }\r
+table { border-collapse:collapse; border-spacing:0; margin-bottom:1em; }\r
+tfoot { font-style:italic; }\r
+thead td, th { font-weight:bold; vertical-align:top; }\r
+\r
+ol { list-style-type:decimal; margin:1em 0; padding-left:2em; }\r
+ol li { list-style:decimal outside; }\r
+ol ol li { list-style-type:lower-alpha; }\r
+ol ol ol li { list-style-type:lower-roman; }\r
+\r
+ul { list-style-type:disc; margin:1em 0; padding-left:2em; }\r
+ul li { list-style:disc outside; }\r
+ul ul li { list-style-type:circle; }\r
+ul ul ul li { list-style-type:square; }\r
+\r
+/* helpers ------------------------------------*/\r
+.clearfix:before,\r
+.clearfix:after { content:" "; display:block; height:0; visibility:hidden; } /* http://www.yuiblog.com/blog/2010/09/27/clearfix-reloaded-overflowhidden-demystified/ */\r
+.clearfix:after { clear:both; }\r
+.visuallyhidden { position:absolute !important; clip:rect(0 0 0 0); }\r
+\r
+/* misc ---------------------------------------*/\r
+img[align="left"] { margin:0 1em 0.5em 0; }\r
+img[align="right"] { margin:0 0 0.5em 1em; }\r
--- /dev/null
+/* generic form styles */\r
+input, textarea, .form-widget {\r
+ background-color: #ffffff;\r
+ color: #000;\r
+ border-color: #000000;\r
+}\r
+#forms .input, #forms input {\r
+ font-family: 'Antic', sans-serif;\r
+ font-size: 14px;\r
+ font-weight: normal;\r
+ line-height: 22px;\r
+ letter-spacing: 1px;\r
+ border: 1px solid #808080;\r
+ height: 21px;\r
+ display: inline-block;\r
+ margin-bottom: -1px;\r
+ padding: 0.8em;\r
+ padding-left: 1.5em;\r
+ z-index: 2;\r
+}\r
+#forms .input:focus, #forms input:focus {\r
+ position: relative;\r
+ border: 1px solid #000;\r
+ z-index: 100;\r
+}\r
+#forms .input:focus label, #forms input:focus label {\r
+ z-index: 300;\r
+}\r
+.altcol {\r
+ background-color: #c3c3b9 !important;\r
+}\r
+.altcol:hover {\r
+ background-color: #f89a1c !important;\r
+}\r
+\r
+form.withlabels label {\r
+ width: 224px;\r
+ display: block;\r
+ float: left;\r
+ padding-top: 1em;\r
+}\r
+form.withlabels input[type=text], form.withlabels input[type=password] {\r
+ width: 224px;\r
+}\r
+form.withlabels input[type=text].long, form.withlabels input[type=password].long, form.withlabels textarea.long {\r
+ width: 224px;\r
+}\r
+.login-section a.button {\r
+ margin-bottom: 12px;\r
+}\r
+.login-section a.button:last-child {\r
+ margin-bottom: none;\r
+}\r
+.login-section a.button.withicon {\r
+ background-repeat: no-repeat;\r
+ background-position: 15px 50%;\r
+ padding-left: 40px;\r
+}\r
+.login-section.loggedin {\r
+ padding-bottom: 0 !important;\r
+ background-image: none !important;\r
+}\r
+form.login {\r
+ margin-bottom: 22px;\r
+ width:340px;\r
+}\r
+\r
+form h2 span {\r
+ padding-bottom: 3px;\r
+}\r
+form .form-row {\r
+ min-height: 29.333333333333332px;\r
+ position: relative;\r
+}\r
+form .form-row.submit {\r
+ margin: 22px 0 ;\r
+}\r
+form .form-row .extra-link {\r
+ color: #808080;\r
+ text-decoration: none;\r
+ border: none;\r
+ \r
+ line-height:42px;\r
+ float: right;\r
+}\r
+form .form-row .extra-link:hover { text-decoration:underline;}\r
+form .form-row label {\r
+ font-size: 1.1em;\r
+}\r
+form.innerlabels label {\r
+ position: absolute;\r
+ top: 1.1em;\r
+ left: 1.5em;\r
+ color: #808080 ;\r
+}\r
+form.innerlabels p {\r
+ margin:0;\r
+ position: relative;\r
+}\r
+form.innerlabels p.p15px { font-size:1.154em;}\r
+form.innerlabels p.p15px a { margin:0 5px;}\r
+form.innerlabels p.p15px a:hover { text-decoration:underline;}\r
+form.innerlabels a,\r
+form.innerlabels a:hover { border:0 none;}\r
+form textarea,\r
+form input.text,\r
+form input[type="text"],\r
+form input[type="password"] {\r
+ color:#808080; \r
+ font-family: 'Antic', sans-serif;\r
+ font-weight: normal;\r
+ line-height: 22px;\r
+ letter-spacing: 1px;\r
+ border: 1px solid #808080;\r
+ height: 21px;\r
+ display: inline-block;\r
+ margin-bottom: -1px;\r
+ padding: 0.8em;\r
+ padding-left: 1.5em;\r
+ z-index: 2;\r
+ width:300px;\r
+}\r
+\r
+form select {\r
+ font-family: 'Antic', sans-serif;\r
+ font-weight: normal;\r
+ line-height: 22px;\r
+ letter-spacing: 1px;\r
+ border: 1px solid #808080;\r
+ display:block;\r
+ margin-bottom: -1px;\r
+ padding: 0.8em;\r
+ padding-left: 1.5em;\r
+ z-index: 2;\r
+ width:331px;\r
+}\r
+form textarea:focus,\r
+form input.text:focus,\r
+form input[type="text"]:focus,\r
+form input[type="password"]:focus {\r
+ position: relative;\r
+ border: 1px solid #000;\r
+ z-index: 100;\r
+}\r
+form textarea:focus label,\r
+form input.text:focus label,\r
+form input[type="text"]:focus label,\r
+form input[type="password"]:focus label {\r
+ z-index: 300;\r
+}\r
+form input.submit, form input[type="submit"] {\r
+ font-family: 'Antic', sans-serif;\r
+ font-size: 14px;\r
+ font-weight: normal;\r
+ line-height: 22px;\r
+ letter-spacing:1px;\r
+ background-color: #3582ac;\r
+ color: #ffffff;\r
+ border: none;\r
+ padding: 10px 22px;\r
+ font-size: 1em;\r
+ \r
+}\r
+form input.submit:hover, form input[type="submit"]:hover {\r
+ background-color: #f89a1c;\r
+}\r
+form input.submit.back, form input[type="submit"].back {\r
+ text-decoration: none;\r
+ bottom: 0;\r
+ float: right;\r
+ z-index: 500;\r
+}\r
+form input.submit.back.right, form input[type="submit"].back.right {\r
+ right: 0;\r
+}\r
+form input.submit:hover, form input[type="submit"]:hover {\r
+ background-color: #f89a1c;\r
+}\r
+form input.submit.back, form input[type="submit"].back {\r
+ text-decoration: none;\r
+ bottom: 0;\r
+ float: right;\r
+ z-index: 500;\r
+}\r
+form input.submit.back.right, form input[type="submit"].back.right {\r
+ right: 0;\r
+}\r
+form textarea {\r
+ height: 150px;\r
+ width: 350px; \r
+ max-height:150px;\r
+ max-width:350px;\r
+}\r
+form .with-errors input, form .with-errors textarea, form .with-errors select {\r
+ color: #9d261d;\r
+}\r
+form .with-errors label {\r
+ color: #e4776f;\r
+}\r
+.form-error {\r
+ background-color: #9d261d;\r
+ color: #fff;\r
+ font-size: 0.8em;\r
+ padding: 5px 5px;\r
+}\r
+.form-errors.all .form-error {\r
+ position: relative;\r
+ border-radius: 0;\r
+ margin-bottom: 1.3em;\r
+ padding: 0.5em;\r
+}\r
+div.form-stacked {\r
+ margin-bottom: 4em;\r
+}\r
+\r
+.checkbox-widget.checked {\r
+ background-color: #FF0000;\r
+ background-image: url("../images/checkbox.png");\r
+ background-position: 50% 50%;\r
+}\r
+.checkbox-widget {\r
+ border: 1px solid #808080;\r
+ cursor: pointer;\r
+ display: block;\r
+ float: left;\r
+ height: 25px;\r
+ margin:5px 20px 0 0 ;\r
+ width: 25px;\r
+ \r
+}\r
+\r
+\r
+form.withlabels .checkbox-widget{\r
+ margin-top:20px; \r
+}\r
+\r
+form.innerlabels .checkbox-widget + label {\r
+ position:static;\r
+ line-height:36px;\r
+ color:#808080;\r
+ \r
+}\r
+\r
+form.innerlabels .checkbox-widget + label + a {\r
+ border-bottom:1px solid #F89A1C;\r
+ font-size: 1.1em;\r
+ \r
+}\r
+\r
+form span.info{\r
+ position:absolute;\r
+ z-index:10; \r
+ top:8px; \r
+ left: 260px;\r
+ \r
+}\r
+form span.info em {\r
+ display:block; \r
+ overflow:hidden;\r
+ position:absolute;\r
+ left:0; \r
+ text-indent:-100px;\r
+ top:0; \r
+ height:28px;\r
+ width:28px;\r
+ background:url(../images/question-mark.jpg) no-repeat left bottom;\r
+ cursor:pointer; \r
+}\r
+\r
+form span.info:hover em {\r
+ background-position:left top;\r
+}\r
+\r
+form span.info span {\r
+ position:relative; \r
+ left:42px;\r
+ top:2px;\r
+ width:150px;\r
+ padding-left:55px; \r
+ background:url(../images/black-line.jpg ) no-repeat left 12px;\r
+ min-height:50px;\r
+ display:none;\r
+ color:#b3b3b3;\r
+}\r
+\r
+form span.info span a {\r
+ color:#b3b3b3;\r
+ border-bottom:1px solid #F89A1C; \r
+}\r
+\r
+form span.info:hover span {\r
+ display:block;\r
+}\r
+\r
+form p {\r
+ margin-bottom:0;\r
+}\r
+\r
+\r
+form input[readonly=true] {\r
+ background-color: #ddd;\r
+ color: #5e5e5e;\r
+}\r
+\r
+#recaptcha_area {\r
+ margin-top:20px;\r
+}\r
+
\ No newline at end of file
--- /dev/null
+@import url(formating.css);\r
+@import url(modules.css);\r
+@import url(colorbox.css);\r
+@import url(browser-fixes.css);\r
+@import url(forms.css);\r
+@import url(dropkick.css);
\ No newline at end of file
-.navigation {
- min-width: 660px;
-}
-
-.mainnav.inline {
- position: absolute;
- right: -10px;
-}
-
-.mainnav.inline.subnav {
- position: relative;
- top: 50px;
-}
+button, input, select, textarea { vertical-align:middle; }\r
+input[type="button"], input[type="submit"] { overflow:visible; }\r
+input[type="checkbox"],\r
+input[type="radio"] { width:13px; height:13px; }\r
+legend { margin-left:-7px; }\r
+textarea { overflow:auto; }\r
+img { -ms-interpolation-mode:bicubic; }\r
+\r
+.clearfix { zoom:1; }\r
+.container .navigation ul li { display:inline;}\r
+.lt .box-more ul.col { display:inline;}
\ No newline at end of file
--- /dev/null
+.wrapper { margin:0 auto; position:relative; width:820px; padding:36px 70px; }\r
+.container .wrapper,\r
+.footer .wrapper { border: 1px solid #808080; border-top:0 none;}\r
+.centered { text-align:center;}\r
+img.left { margin:0 1em 1em 0; float:left;}\r
+img.right { margin:0 0 1em 1em; float:right;}\r
+\r
+\r
+/* header */\r
+.header { background:#000; color:#fff; height:35px; line-height:35px; } \r
+.header .wrapper { width:auto; padding:0;} \r
+.header a { color:#fff; text-decoration:none;}\r
+.header .profile { float:right; background:#01A1AE; width:150px; padding:0 20px; text-align:right; }\r
+.header .profile a { text-decoration:none; color:#fff; }\r
+.header .profile ul { position:absolute; right:0; top:35px; padding:0; margin:0; background:#01A1AE; width:190px; display:none; }\r
+.header .profile ul li { list-style:none outside; line-height:35px; border-top:1px solid #000; padding:0 20px;}\r
+.header .profile ul li:hover { background:#000;}\r
+.header .profile:hover ul { display:block; }\r
+.header ul.services { margin:0; padding:0; }\r
+.header ul.services li { float:left; height:35px; line-height:35px; text-align:center; padding: 0 30px; list-style:none outside;}\r
+.header ul.services li:first-child { padding:0 5px;}\r
+.header ul.services li.active { background:#333;}\r
+.header ul.services li:hover { background:#444; }\r
+\r
+\r
+/* footer */\r
+.footer { font-size:0.923em;color:#B3B3B3; }\r
+.footer a { color:#B3B3B3; text-decoration:none; transition:color 0.15s ease-in-out 0s; -moz-transition: color 0.15s ease-in-out 0s; -webkit-transition: color 0.15s ease-in-out 0s; -o-transition: color 0.15s ease-in-out 0s; } \r
+.footer:hover a { color:#808080;}\r
+.footer a:hover { color:#000;}\r
+.footer ul { float:left; margin:0 0 0 22px; width:140px; padding:0;}\r
+.footer ul li { padding:0; margin:0 0 0.5em 0; list-style:none outside;}\r
+.footer ul li:first-child { margin-bottom:1em; }\r
+.footer .clearfix { padding-bottom:20px;}\r
+.footer .clearfix ul:first-child { margin-left:0;}\r
+\r
+\r
+/*top message*/\r
+.top-msg { margin:-36px -70px 40px; background:blue; padding:100px 200px; color:#fff; display:none; position:relative;}\r
+.top-msg p { font-size:1.5em;}\r
+.top-msg p.title { font-size:2em; }\r
+.top-msg p.title span { border-bottom:2px dotted #fff; padding:0 0 10px 0;}\r
+.top-msg.active { display:block;}\r
+.active+h1 { display:none;}\r
+.top-msg .close { position:absolute; bottom:20px; right:20px; font-size:2em; font-weight:bold; border:0 none; color:#fff; text-decoration:none;}\r
+\r
+/* container */\r
+.container h1 { margin:0; line-height:100%;}\r
+.container .wrapper { padding-bottom:100px;}\r
+.container .navigation { margin:20px 0 40px; font-size:1.231em;}\r
+.container .navigation ul { margin:5px 0; padding:0;}\r
+.container .navigation ul li { list-style:none outside; padding:0; margin:0 0 0 1em; display:inline-block;}\r
+.container .navigation ul li:first-child { margin-left:0;}\r
+.container .navigation ul li a { color:#000; text-decoration:none; }\r
+.container .navigation ul li a:hover { border-bottom:1px solid #F89A1C;} \r
+.container .navigation ul li.active a { color:#F89A1C; } \r
+.dotted { background:url(../images/double-dots.jpg) no-repeat bottom center; padding:30px 0; margin-bottom:30px;}\r
+.two-cols .rt { float:right; width:390px;}\r
+.two-cols .lt { float:left; width:390px;}\r
+.two-cols .lt p { padding-right:40px;}\r
+.two-cols-lt580 .rt { float:right; width:200px; margin-left:40px;}\r
+.two-cols-lt580 .lt { overflow:hidden;}\r
+.container h2, .container h3 { font-weight:normal; margin-bottom:1em; }\r
+.container h2 em { color: #3582AC; font-style:normal; }\r
+.content a { border-bottom: 1px solid #F89A1C; text-decoration:none; color:#000; }\r
+.content a:hover { border-bottom: 1px solid #F89A1C; text-decoration:none; color:#F89A1C; }\r
+.container ul.options { font-size:1.231em; padding:0; margin:0;}\r
+.container ul.options li { list-style:none outside; margin:0 0 1em 0;padding:0;}\r
+.container ul.options li a { border:0 none;}\r
+.container ul.options li a:hover { text-decoration:underline;}\r
+.landing h2, .landing a:hover { color:#01A1AE;}\r
+.faq h2, .faq a:hover { color:#EF4F54; border:0 none;}\r
+.faq ul { padding:0; margin:0; }\r
+.faq ul li { list-style:none outside; padding:0 0 0 5px; margin:0; }\r
+.faq ul li a { color:#222222; border:0 none;} \r
+.follow h3 a { color:#4085A6;}\r
+.follow a { border:0 none;}\r
+.follow ul { margin:0; padding:0;}\r
+.follow ul li { list-style:none outside; padding:0; margin:0 0 20px 0; font-size:0.923em; color:#808080;}\r
+.follow ul li p.title { margin-bottom:0; color:#000;}\r
+.follow ul li p.title a { color:#000;}\r
+.follow ul li p a { color:#808080;}\r
+.posts ul { margin:0;padding:0; }\r
+.posts ul li { padding:0; margin:0 0 50px; list-style:none outside; }\r
+.posts ul li .img-div { float:left; width:160px; margin-right:20px; }\r
+.posts ul li .img-div img { max-width:160px;}\r
+.posts ul li .img-div p { font-size:1.154em; color:#01A1AE;}\r
+.posts ul li .txt { overflow:hidden;} \r
+.posts ul li .txt h3 { color:#F89A1C;}\r
+.posts ul li .txt h3 a { color:#F89A1C; border:0 none; }\r
+.posts ul li p.info { background:url(../images/blog-dots.jpg) no-repeat top; padding-top:10px; margin-top:20px; font-size:0.923em; color:#808080;}\r
+.article p.info { margin-top:20px; padding-top:10px; font-size:0.923em; color:#808080; border-top:1px dashed #ccc;}\r
+p.info a { color:#808080; }\r
+.bg-wrap { background-position:right top; background-repeat:no-repeat;}\r
+.bg-wrap .extra { display:none;}\r
+.bg-wrap.open .extra { display:block;}\r
+.bg-wrap .extra .hide-extra { display:block; text-align:right; border:0 none; height:16px; overflow:hidden;}\r
+.bg-wrap .extra .hide-extra img { margin-top:0; vertical-align:top; display:inline; }\r
+.bg-wrap .extra .hide-extra:hover img { margin-top:-16px;}\r
+.cyclades .bg-wrap .extra .hide-extra:hover img { margin-top:-32px;}\r
+.pithos h2, .pithos a:hover, \r
+.pithos .extra .options li { color:#F89A1C; }\r
+.cyclades h2, .cyclades a:hover, \r
+.cyclades .extra .options li { color:#4085A6; }\r
+.cyclades a { border-bottom:1px solid #4085A6; }\r
+.cyclades a:hover { border-bottom:1px solid #4085A6; }\r
+a.btn_01 { display:block; text-align:center; background:#F6921E; color:#000; padding:10px; text-decoration:none; border:0 none;}\r
+a.btn_01:hover { background:#01A1AE; color:#000; border:0 none;}\r
+a.btn_01 em { font-style:normal; display:block; }\r
+a.btn_01 span { color:#fff; }\r
+.lt .box-more { text-align:center; padding:5px 10px; }\r
+.lt .box-more.border { border:1px solid #ccc;}\r
+.lt .box-more p { cursor:pointer; background:url(../images/arrow_02.jpg) no-repeat right center; padding-right:20px; }\r
+a.btn_01, .box-more { width:80%; margin:0 auto 20px; }\r
+.lt .box-more ul.col { width:30%; margin:0; padding:0; vertical-align:top; text-align:left; display:inline-block;}\r
+.lt .box-more .clearfix { display:none; }\r
+.lt .box-more ul.col li { list-style:none outside; }\r
+.lt .box-more ul.col li a { color:#B3B3B3; text-decoration:none; border:0 none;}\r
+.lt .box-more ul.col li a:hover { color:#000;}\r
+.article img { margin-bottom:1em; max-width:100%;}\r
+a.videolink { border: 0 none; display:block; width:367px; height:207px; background:url(../images/video_image_hover.png) no-repeat; text-decoration:none;}\r
+a.videolink:hover { background:url(../images/video_image.png)no-repeat; text-decoration:none; border:0 none;}\r
+.container .full { position:relative;}\r
+\r
+\r
+\r
+/* resources*/\r
+.resources .categories .clear { color: #000000; float: right; margin-right: 4px;}\r
+.resources a, .resources a:hover { border:0 none;}\r
+.resources .categories ul { margin:0;padding:0;}\r
+.resources .categories ul li { float: left; list-style:none outside;}\r
+.resources .categories .title { margin-bottom: 0.5em; }\r
+.resources .categories ul li a { color: #000000; margin-right: 22px; text-decoration: none; }\r
+.resources .categories ul li a:hover, \r
+.resources .categories ul li a.selected { color: #000000 }\r
+.resources .categories ul li.inactive { opacity: 0.3; }\r
+.resources .categories ul li.active { font-weight: bold; opacity: 1; }\r
+.resources .list { line-height: 1em; margin-top: 60px; position: relative; width:855px; }\r
+.resources .list .resource-wrapper.first .resource { margin-left: 0; }\r
+.resources .list .resource-wrapper { float: left; height: 250px; margin-bottom: 22px; margin-right: 35px; overflow: hidden; position: relative; width: 250px; }\r
+.resources .list .resource-wrapper.first { margin-left: 0; }\r
+.resources .list .resource-wrapper.hidden { display: none; }\r
+.resources .list .resource { border: 1px solid #000000; height: 188px; overflow: hidden; padding: 30px; }\r
+.resources .list .resource .date { color: #808080; margin-bottom: 3px; }\r
+.resources .list .resource .description { transition:color top 0.35s ease-in-out 0s; -moz-transition: top 0.35s ease-in-out 0s; -webkit-transition: top 0.35s ease-in-out 0s; -o-transition: top 0.35s ease-in-out 0s; color: #FFFFFF; font-size: 1.1em; height: 150px; margin-left: -30px; padding: 30px; position: absolute; top: -270px; width: 190px; }\r
+.resources .list .resource .title { line-height: 1.4em; }\r
+.resources .list .resource .category { color: #808080; margin-top: 30px; }\r
+.resources .list .resource .category a { color: #808080; }\r
+.resources .list .resource .download { bottom: 0; cursor: pointer; font-size: 1.1em; margin-bottom: 3px; margin-left: -10px; position: absolute; width: 190px; }\r
+.resources .list .resource .download a { color: #000000; display: block; padding: 5px 5px 5px 15px; text-decoration: none; }\r
+.resources .list .resource .download a:hover, \r
+.resources .list .resource .download a .hovered { color: #FF5D00;}\r
+.resources .list .resource .download a:hover .download-image, \r
+.resources .list .resource .download a .hovered .download-image { background-image: url(../images/resource_down_arrow-active.png); }\r
+.resources .list .resource .download a .download-image { background: url(../images/resource_down_arrow.png) no-repeat; display: block; float: left; height: 30px; margin-right: 10px; margin-top: -7px; width: 30px; }\r
+.resources .list .resource .download img { margin-right: 10px; vertical-align: middle;}\r
+.resources .list .resource:hover .description, \r
+.resources .list .resource .hover .description { display: block; top: 0; }\r
+.resources .list .resource-cat-1.resource { border-color: #4085A5 }\r
+.resources .list .resource-cat-1.resource .title { color: #4085A5 }\r
+.resources .list .resource-cat-1.resource .description { background-color: #4085A5 }\r
+.resources .resource-cat-1.filter-item a { color: #4085A5 }\r
+.resources .list .resource-cat-2.resource { border-color: #FF6F00 }\r
+.resources .list .resource-cat-2.resource .title { color: #FF6F00 }\r
+.resources .list .resource-cat-2.resource .description { background-color: #FF6F00 }\r
+.resources .resource-cat-2.filter-item a { color: #FF6F00 }\r
+\r
+table { width:100%;}\r
+table th, table td { padding:10px; }\r
+table td { border-top: 1px solid #DDDDDD; }\r
+table td.consumed { color: #9D261D; }\r
+\r
+.zebra-striped tbody tr:nth-child(2n+1) td, \r
+.zebra-striped tbody tr:nth-child(2n+1) th { background-color: #F9F9F9; }\r
+.zebra-striped tbody tr:hover td, \r
+.zebra-striped tbody tr:hover th { background-color: #F5F5F5; }\r
+\r
+.buttons-list.fixpos { position:absolute; bottom:0; right:0; }\r
+.button.back.right { right: 0; }\r
+.buttons-list .button { margin-left: 10px; }\r
+.button.back { z-index: 500; }\r
+a.button { border:0 none; color: #FFFFFF; display: block; text-align: center; background-color: #3582AC; letter-spacing: 1px; line-height: 22px; padding: 0.8em 22px; text-decoration: none;}\r
+a.button:hover { background-color: #F89A1C; border:0 none; color:#fff;}\r
+\r
+/*pagination*/\r
+.pagination a { border:0 none;}\r
+.pagination .next-prev { float:left; }\r
+.pagination .nums { text-align:right;}\r
+.pagination .nums span { color:#F89A1C;}\r
+ \r
+\r
--- /dev/null
+function setContainerMinHeight(){\r
+\r
+ var h = $('.header').height();\r
+ var f = $('.footer').height();\r
+ var w = $(window).height();\r
+ var pTop = parseInt (($('.container .wrapper').css('padding-top').replace("px", "")) );\r
+ var pBottom = parseInt (($('.container .wrapper').css('padding-bottom').replace("px", "")));\r
+\r
+ var c = w - ( h+f+pTop+pBottom);\r
+ $('.container .wrapper').css('min-height', c);\r
+ \r
+\r
+}\r
+\r
+$(document).ready(function() {\r
+\r
+ setContainerMinHeight();\r
+ \r
+ $('.show-extra').click(function(e) {\r
+ e.preventDefault();\r
+ \r
+ $(this).parents('.bg-wrap').find('.extra').toggle('slow');\r
+ $('.hide-extra').toggle(); \r
+ });\r
+ $('.hide-extra').click(function(e) {\r
+ e.preventDefault();\r
+ $(this).hide();\r
+ $(this).parents('.bg-wrap').find('.extra').hide('slow');\r
+ });\r
+ \r
+ $('.box-more p').click(function(e) {\r
+ $(this).siblings('.clearfix').toggle('slow');\r
+ $(this).parents('.box-more').toggleClass('border');\r
+ });\r
+ \r
+ \r
+ $('.top-msg a.close').click(function(e) {\r
+ e.preventDefault();\r
+ $(this).parents('.top-msg').slideUp('5000', function() {\r
+ $('.top-msg').removeClass('active')\r
+ });\r
+ });\r
+ \r
+ //$('select').dropkick();\r
+ \r
+ \r
+ if ( $('#os').length > 0 ) {\r
+ var os = BrowserDetect.OS;\r
+ if ( os!=="an unknown OS" ) {\r
+ $('#os').html('version '+os);\r
+ }\r
+ }\r
+ \r
+ $('.top-msg .success').parents('.top-msg').css(\r
+ {\r
+ backgroundColor: '#f3c',\r
+ color: '#fff'\r
+ }\r
+ )\r
+ \r
+ $('.top-msg .error').parents('.top-msg').css(\r
+ {\r
+ backgroundColor: 'red',\r
+ color: '#fff'\r
+ }\r
+ )\r
+ \r
+ \r
+ $('.top-msg .warning').parents('.top-msg').css(\r
+ {\r
+ backgroundColor: '#90f',\r
+ color: '#fff'\r
+ }\r
+ )\r
+ \r
+});\r
--- /dev/null
+/*! HTML5 Shiv v3 | @jon_neal @afarkas @rem | MIT/GPL2 Licensed */\r
+(function (win, doc) {\r
+ // feature detection: whether the browser supports unknown elements\r
+ var supportsUnknownElements = (function (a) {\r
+ a.innerHTML = '<x-element></x-element>';\r
+ return a.childNodes.length === 1;\r
+ })(doc.createElement('a'));\r
+\r
+ // feature detection: whether the browser supports default html5 styles\r
+ var supportsHtml5Styles = (function (nav, docEl, compStyle) {\r
+ docEl.appendChild(nav);\r
+ return (compStyle = (compStyle ? compStyle(nav) : nav.currentStyle).display) && docEl.removeChild(nav) && compStyle === 'block';\r
+ })(doc.createElement('nav'), doc.documentElement, win.getComputedStyle);\r
+\r
+ // html5 global so that more elements can be shived and also so that existing shiving can be detected on iframes\r
+ // more elements can be added and shived with the following code: html5.elements.push('element-name'); shivDocument(document);\r
+ var html5 = {\r
+ // a list of html5 elements\r
+ elements: 'abbr article aside audio bdi canvas data datalist details figcaption figure footer header hgroup mark meter nav output progress section summary time video'.split(' '),\r
+\r
+ // the shiv function\r
+ shivDocument: function (scopeDocument) {\r
+ scopeDocument = scopeDocument || doc;\r
+\r
+ // test if the document has already been shived\r
+ if (scopeDocument.documentShived) {\r
+ return;\r
+ }\r
+ scopeDocument.documentShived = true;\r
+\r
+ // set local variables\r
+ var\r
+ documentCreateElement = scopeDocument.createElement,\r
+ documentCreateDocumentFragment = scopeDocument.createDocumentFragment,\r
+ documentHead = scopeDocument.getElementsByTagName('head')[0],\r
+ documentCreateElementReplaceFunction = function (m) {\r
+ documentCreateElement(m);\r
+ };\r
+\r
+ // shiv for unknown elements\r
+ if (!supportsUnknownElements) {\r
+ // shiv the document\r
+ html5.elements.join(' ').replace(/\w+/g, documentCreateElementReplaceFunction);\r
+\r
+ // shiv document create element function\r
+ scopeDocument.createElement = function (nodeName) {\r
+ var element = documentCreateElement(nodeName);\r
+ if (element.canHaveChildren){\r
+ html5.shivDocument(element.document);\r
+ } \r
+ return element;\r
+ };\r
+\r
+ // shiv document create element function\r
+ scopeDocument.createDocumentFragment = function () {\r
+ return html5.shivDocument(documentCreateDocumentFragment());\r
+ };\r
+ }\r
+\r
+ // shiv for default html5 styles\r
+ if (!supportsHtml5Styles && documentHead) {\r
+ var div = documentCreateElement('div');\r
+ div.innerHTML = ['x<style>',\r
+ 'article,aside,details,figcaption,figure,footer,header,hgroup,nav,section{display:block}', // Corrects block display not defined in IE6/7/8/9\r
+ 'audio{display:none}', // Corrects audio display not defined in IE6/7/8/9\r
+ 'canvas,video{display:inline-block;*display:inline;*zoom:1}', // Corrects canvas and video display not defined in IE6/7/8/9 (audio[controls] in IE7)\r
+ '[hidden]{display:none}audio[controls]{display:inline-block;*display:inline;*zoom:1}', // Corrects 'hidden' attribute and audio[controls] display not present in IE7/8/9\r
+ 'mark{background:#FF0;color:#000}', // Addresses styling not present in IE6/7/8/9\r
+ '</style>'].join('');\r
+ documentHead.insertBefore(div.lastChild, documentHead.firstChild);\r
+ }\r
+\r
+ // return document (for potential chaining)\r
+ return scopeDocument;\r
+ }\r
+ };\r
+\r
+ // shiv the document\r
+ html5.shivDocument(doc);\r
+\r
+ win.html5 = html5;\r
+\r
+ // ie print shiv\r
+ if (supportsUnknownElements || !win.attachEvent){return;}\r
+\r
+ // replaces an element with a namespace-shived clone (eg. header element becomes shiv:header element)\r
+ function namespaceShivElement(element) {\r
+ var elementClone, a, l, i;\r
+ if (doc.documentMode > 7) {\r
+ elementClone = doc.createElement('font');\r
+ elementClone.setAttribute('data-html5shiv', element.nodeName.toLowerCase());\r
+ }\r
+ else {\r
+ elementClone = doc.createElement('shiv:' + element.nodeName);\r
+ }\r
+ while (element.firstChild) {\r
+ elementClone.appendChild(element.childNodes[0]);\r
+ }\r
+ for (a = element.attributes, l = a.length, i = 0; i < l; ++i) {\r
+ if (a[i].specified) {\r
+ elementClone.setAttribute(a[i].nodeName, a[i].nodeValue);\r
+ }\r
+ }\r
+ elementClone.style.cssText = element.style.cssText;\r
+ element.parentNode.replaceChild(elementClone, element);\r
+ elementClone.originalElement = element;\r
+ }\r
+\r
+ // restores an element from a namespace-shived clone (eg. shiv:header element becomes header element)\r
+ function unNamespaceShivElement(element) {\r
+ var originalElement = element.originalElement;\r
+ while (element.childNodes.length) {\r
+ originalElement.appendChild(element.childNodes[0]);\r
+ }\r
+ element.parentNode.replaceChild(originalElement, element);\r
+ }\r
+\r
+ // get style sheet list css text\r
+ function getStyleSheetListCssText(styleSheetList, mediaType) {\r
+ // set media type\r
+ mediaType = mediaType || 'all';\r
+\r
+ // set local variables\r
+ var\r
+ i = -1,\r
+ cssTextArr = [],\r
+ styleSheetListLength = styleSheetList.length,\r
+ styleSheet,\r
+ styleSheetMediaType;\r
+\r
+ // loop through style sheets\r
+ while (++i < styleSheetListLength) {\r
+ // get style sheet\r
+ styleSheet = styleSheetList[i];\r
+\r
+ // get style sheet media type\r
+ styleSheetMediaType = styleSheet.media || mediaType;\r
+\r
+ // skip a disabled or non-print style sheet\r
+ if (styleSheet.disabled || !(/print|all/.test(styleSheetMediaType))) {\r
+ continue;\r
+ }\r
+\r
+ // push style sheet css text\r
+ cssTextArr.push(getStyleSheetListCssText(styleSheet.imports, styleSheetMediaType), styleSheet.cssText);\r
+ }\r
+\r
+ // return css text\r
+ return cssTextArr.join('');\r
+ }\r
+\r
+ // shiv css text (eg. header {} becomes shiv\:header {})\r
+ function shivCssText (cssText) {\r
+ // set local variables\r
+ var\r
+ elementsRegExp = new RegExp('(^|[\\s,{}])(' + win.html5.elements.join('|') + ')', 'gi'),\r
+ cssTextSplit = cssText.split('{'),\r
+ cssTextSplitLength = cssTextSplit.length,\r
+ i = -1;\r
+\r
+ // shiv css text\r
+ while (++i < cssTextSplitLength) {\r
+ cssTextSplit[i] = cssTextSplit[i].split('}');\r
+ if (doc.documentMode > 7) {\r
+ cssTextSplit[i][cssTextSplit[i].length - 1] = cssTextSplit[i][cssTextSplit[i].length - 1].replace(elementsRegExp, '$1font[data-html5shiv="$2"]');\r
+ }\r
+ else {\r
+ cssTextSplit[i][cssTextSplit[i].length - 1] = cssTextSplit[i][cssTextSplit[i].length - 1].replace(elementsRegExp, '$1shiv\\:$2');\r
+ }\r
+ cssTextSplit[i] = cssTextSplit[i].join('}');\r
+ }\r
+\r
+ // return shived css text\r
+ return cssTextSplit.join('{');\r
+ }\r
+\r
+ // the before print function\r
+ win.attachEvent(\r
+ 'onbeforeprint',\r
+ function () {\r
+ // test for scenarios where shiving is unnecessary or unavailable\r
+ if (win.html5.supportsXElement || !doc.namespaces) {\r
+ return;\r
+ }\r
+\r
+ // add the shiv namespace\r
+ if (!doc.namespaces.shiv) {\r
+ doc.namespaces.add('shiv');\r
+ }\r
+\r
+ // set local variables\r
+ var\r
+ i = -1,\r
+ elementsRegExp = new RegExp('^(' + win.html5.elements.join('|') + ')$', 'i'),\r
+ nodeList = doc.getElementsByTagName('*'),\r
+ nodeListLength = nodeList.length,\r
+ element,\r
+ // sorts style and link files and returns their stylesheets\r
+ shivedCSS = shivCssText(getStyleSheetListCssText((function (s, l) {\r
+ var arr = [], i = s.length;\r
+ while (i) {\r
+ arr.unshift(s[--i]);\r
+ }\r
+ i = l.length;\r
+ while (i) {\r
+ arr.unshift(l[--i]);\r
+ }\r
+ arr.sort(function (a, b) {\r
+ return (a.sourceIndex - b.sourceIndex);\r
+ });\r
+ i = arr.length;\r
+ while (i) {\r
+ arr[--i] = arr[i].styleSheet;\r
+ }\r
+ return arr;\r
+ })(doc.getElementsByTagName('style'), doc.getElementsByTagName('link'))));\r
+\r
+ // loop through document elements\r
+ while (++i < nodeListLength) {\r
+ // get element\r
+ element = nodeList[i];\r
+\r
+ // clone matching elements as shiv namespaced\r
+ if (elementsRegExp.test(element.nodeName)) {\r
+ namespaceShivElement(element);\r
+ }\r
+ }\r
+\r
+ // set new shived css text\r
+ doc.appendChild(doc._shivedStyleSheet = doc.createElement('style')).styleSheet.cssText = shivedCSS;\r
+ }\r
+ );\r
+\r
+ // the after print function\r
+ win.attachEvent(\r
+ 'onafterprint',\r
+ function() {\r
+ // test for scenarios where shiving is unnecessary\r
+ if (win.html5.supportsXElement || !doc.namespaces) {\r
+ return;\r
+ }\r
+\r
+ // set local variables\r
+ var\r
+ i = -1,\r
+ nodeList = doc.getElementsByTagName('*'),\r
+ nodeListLength = nodeList.length,\r
+ element;\r
+\r
+ // loop through document elements\r
+ while (++i < nodeListLength) {\r
+ // get element\r
+ element = nodeList[i];\r
+\r
+ // restore original elements\r
+ if (element.originalElement) {\r
+ unNamespaceShivElement(element);\r
+ }\r
+ }\r
+\r
+ // cut new shived css text\r
+ if (doc._shivedStyleSheet) {\r
+ doc._shivedStyleSheet.parentNode.removeChild(doc._shivedStyleSheet);\r
+ }\r
+ }\r
+ );\r
+})(this, document);
\ No newline at end of file
--- /dev/null
+/*
+ * jqModal - Minimalist Modaling with jQuery
+ * (http://dev.iceburg.net/jquery/jqModal/)
+ *
+ * Copyright (c) 2007,2008 Brice Burgess <bhb@iceburg.net>
+ * Dual licensed under the MIT and GPL licenses:
+ * http://www.opensource.org/licenses/mit-license.php
+ * http://www.gnu.org/licenses/gpl.html
+ *
+ * $Version: 03/01/2009 +r14
+ */
+(function($) {
+$.fn.jqm=function(o){
+var p={
+overlay: 50,
+overlayClass: 'jqmOverlay',
+closeClass: 'jqmClose',
+trigger: '.jqModal',
+ajax: F,
+ajaxText: '',
+target: F,
+modal: F,
+toTop: F,
+onShow: F,
+onHide: F,
+onLoad: F
+};
+return this.each(function(){if(this._jqm)return H[this._jqm].c=$.extend({},H[this._jqm].c,o);s++;this._jqm=s;
+H[s]={c:$.extend(p,$.jqm.params,o),a:F,w:$(this).addClass('jqmID'+s),s:s};
+if(p.trigger)$(this).jqmAddTrigger(p.trigger);
+});};
+
+$.fn.jqmAddClose=function(e){return hs(this,e,'jqmHide');};
+$.fn.jqmAddTrigger=function(e){return hs(this,e,'jqmShow');};
+$.fn.jqmShow=function(t){return this.each(function(){t=t||window.event;$.jqm.open(this._jqm,t);});};
+$.fn.jqmHide=function(t){return this.each(function(){t=t||window.event;$.jqm.close(this._jqm,t)});};
+
+$.jqm = {
+hash:{},
+open:function(s,t){var h=H[s],c=h.c,cc='.'+c.closeClass,z=(parseInt(h.w.css('z-index'))),z=(z>0)?z:3000,o=$('<div></div>').css({height:'100%',width:'100%',position:'fixed',left:0,top:0,'z-index':z-1,opacity:c.overlay/100});if(h.a)return F;h.t=t;h.a=true;h.w.css('z-index',z);
+ if(c.modal) {if(!A[0])L('bind');A.push(s);}
+ else if(c.overlay > 0)h.w.jqmAddClose(o);
+ else o=F;
+
+ h.o=(o)?o.addClass(c.overlayClass).prependTo('body'):F;
+ if(ie6){$('html,body').css({height:'100%',width:'100%'});if(o){o=o.css({position:'absolute'})[0];for(var y in {Top:1,Left:1})o.style.setExpression(y.toLowerCase(),"(_=(document.documentElement.scroll"+y+" || document.body.scroll"+y+"))+'px'");}}
+
+ if(c.ajax) {var r=c.target||h.w,u=c.ajax,r=(typeof r == 'string')?$(r,h.w):$(r),u=(u.substr(0,1) == '@')?$(t).attr(u.substring(1)):u;
+ r.html(c.ajaxText).load(u,function(){if(c.onLoad)c.onLoad.call(this,h);if(cc)h.w.jqmAddClose($(cc,h.w));e(h);});}
+ else if(cc)h.w.jqmAddClose($(cc,h.w));
+
+ if(c.toTop&&h.o)h.w.before('<span id="jqmP'+h.w[0]._jqm+'"></span>').insertAfter(h.o);
+ (c.onShow)?c.onShow(h):h.w.show();e(h);return F;
+},
+close:function(s){var h=H[s];if(!h.a)return F;h.a=F;
+ if(A[0]){A.pop();if(!A[0])L('unbind');}
+ if(h.c.toTop&&h.o)$('#jqmP'+h.w[0]._jqm).after(h.w).remove();
+ if(h.c.onHide)h.c.onHide(h);else{h.w.hide();if(h.o)h.o.remove();} return F;
+},
+params:{}};
+var s=0,H=$.jqm.hash,A=[],ie6=$.browser.msie&&($.browser.version == "6.0"),F=false,
+i=$('<iframe src="javascript:false;document.write(\'\');" class="jqm"></iframe>').css({opacity:0}),
+e=function(h){if(ie6)if(h.o)h.o.html('<p style="width:100%;height:100%"/>').prepend(i);else if(!$('iframe.jqm',h.w)[0])h.w.prepend(i); f(h);},
+f=function(h){try{$(':input:visible',h.w)[0].focus();}catch(_){}},
+L=function(t){$()[t]("keypress",m)[t]("keydown",m)[t]("mousedown",m);},
+m=function(e){var h=H[A[A.length-1]],r=(!$(e.target).parents('.jqmID'+h.s)[0]);if(r)f(h);return !r;},
+hs=function(w,t,c){return w.each(function(){var s=this._jqm;$(t).each(function() {
+ if(!this[c]){this[c]=[];$(this).click(function(){for(var i in {jqmShow:1,jqmHide:1})for(var s in this[i])if(H[this[i][s]])H[this[i][s]].w[i](this);return F;});}this[c].push(s);});});};
+})(jQuery);
\ No newline at end of file
--- /dev/null
+// ColorBox v1.3.19 - jQuery lightbox plugin\r
+// (c) 2011 Jack Moore - jacklmoore.com\r
+// License: http://www.opensource.org/licenses/mit-license.php\r
+(function ($, document, window) {\r
+ var\r
+ // Default settings object. \r
+ // See http://jacklmoore.com/colorbox for details.\r
+ defaults = {\r
+ transition: "elastic",\r
+ speed: 300,\r
+ width: false,\r
+ initialWidth: "600",\r
+ innerWidth: false,\r
+ maxWidth: false,\r
+ height: false,\r
+ initialHeight: "450",\r
+ innerHeight: false,\r
+ maxHeight: false,\r
+ scalePhotos: true,\r
+ scrolling: true,\r
+ inline: false,\r
+ html: false,\r
+ iframe: false,\r
+ fastIframe: true,\r
+ photo: false,\r
+ href: false,\r
+ title: false,\r
+ rel: false,\r
+ opacity: 0.9,\r
+ preloading: true,\r
+ current: "image {current} of {total}",\r
+ previous: "previous",\r
+ next: "next",\r
+ close: "close",\r
+ open: false,\r
+ returnFocus: true,\r
+ reposition: true,\r
+ loop: true,\r
+ slideshow: false,\r
+ slideshowAuto: true,\r
+ slideshowSpeed: 2500,\r
+ slideshowStart: "start slideshow",\r
+ slideshowStop: "stop slideshow",\r
+ onOpen: false,\r
+ onLoad: false,\r
+ onComplete: false,\r
+ onCleanup: false,\r
+ onClosed: false,\r
+ overlayClose: true, \r
+ escKey: true,\r
+ arrowKey: true,\r
+ top: false,\r
+ bottom: false,\r
+ left: false,\r
+ right: false,\r
+ fixed: false,\r
+ data: undefined\r
+ },\r
+ \r
+ // Abstracting the HTML and event identifiers for easy rebranding\r
+ colorbox = 'colorbox',\r
+ prefix = 'cbox',\r
+ boxElement = prefix + 'Element',\r
+ \r
+ // Events \r
+ event_open = prefix + '_open',\r
+ event_load = prefix + '_load',\r
+ event_complete = prefix + '_complete',\r
+ event_cleanup = prefix + '_cleanup',\r
+ event_closed = prefix + '_closed',\r
+ event_purge = prefix + '_purge',\r
+ \r
+ // Special Handling for IE\r
+ isIE = !$.support.opacity && !$.support.style, // IE7 & IE8\r
+ isIE6 = isIE && !window.XMLHttpRequest, // IE6\r
+ event_ie6 = prefix + '_IE6',\r
+\r
+ // Cached jQuery Object Variables\r
+ $overlay,\r
+ $box,\r
+ $wrap,\r
+ $content,\r
+ $topBorder,\r
+ $leftBorder,\r
+ $rightBorder,\r
+ $bottomBorder,\r
+ $related,\r
+ $window,\r
+ $loaded,\r
+ $loadingBay,\r
+ $loadingOverlay,\r
+ $title,\r
+ $current,\r
+ $slideshow,\r
+ $next,\r
+ $prev,\r
+ $close,\r
+ $groupControls,\r
+ \r
+ // Variables for cached values or use across multiple functions\r
+ settings,\r
+ interfaceHeight,\r
+ interfaceWidth,\r
+ loadedHeight,\r
+ loadedWidth,\r
+ element,\r
+ index,\r
+ photo,\r
+ open,\r
+ active,\r
+ closing,\r
+ loadingTimer,\r
+ publicMethod,\r
+ div = "div",\r
+ init;\r
+\r
+ // ****************\r
+ // HELPER FUNCTIONS\r
+ // ****************\r
+ \r
+ // Convience function for creating new jQuery objects\r
+ function $tag(tag, id, css) {\r
+ var element = document.createElement(tag);\r
+\r
+ if (id) {\r
+ element.id = prefix + id;\r
+ }\r
+\r
+ if (css) {\r
+ element.style.cssText = css;\r
+ }\r
+\r
+ return $(element);\r
+ }\r
+\r
+ // Determine the next and previous members in a group.\r
+ function getIndex(increment) {\r
+ var \r
+ max = $related.length, \r
+ newIndex = (index + increment) % max;\r
+ \r
+ return (newIndex < 0) ? max + newIndex : newIndex;\r
+ }\r
+\r
+ // Convert '%' and 'px' values to integers\r
+ function setSize(size, dimension) {\r
+ return Math.round((/%/.test(size) ? ((dimension === 'x' ? $window.width() : $window.height()) / 100) : 1) * parseInt(size, 10));\r
+ }\r
+ \r
+ // Checks an href to see if it is a photo.\r
+ // There is a force photo option (photo: true) for hrefs that cannot be matched by this regex.\r
+ function isImage(url) {\r
+ return settings.photo || /\.(gif|png|jpe?g|bmp|ico)((#|\?).*)?$/i.test(url);\r
+ }\r
+ \r
+ // Assigns function results to their respective properties\r
+ function makeSettings() {\r
+ var i;\r
+ settings = $.extend({}, $.data(element, colorbox));\r
+ \r
+ for (i in settings) {\r
+ if ($.isFunction(settings[i]) && i.slice(0, 2) !== 'on') { // checks to make sure the function isn't one of the callbacks, they will be handled at the appropriate time.\r
+ settings[i] = settings[i].call(element);\r
+ }\r
+ }\r
+ \r
+ settings.rel = settings.rel || element.rel || 'nofollow';\r
+ settings.href = settings.href || $(element).attr('href');\r
+ settings.title = settings.title || element.title;\r
+ \r
+ if (typeof settings.href === "string") {\r
+ settings.href = $.trim(settings.href);\r
+ }\r
+ }\r
+\r
+ function trigger(event, callback) {\r
+ $.event.trigger(event);\r
+ if (callback) {\r
+ callback.call(element);\r
+ }\r
+ }\r
+\r
+ // Slideshow functionality\r
+ function slideshow() {\r
+ var\r
+ timeOut,\r
+ className = prefix + "Slideshow_",\r
+ click = "click." + prefix,\r
+ start,\r
+ stop,\r
+ clear;\r
+ \r
+ if (settings.slideshow && $related[1]) {\r
+ start = function () {\r
+ $slideshow\r
+ .text(settings.slideshowStop)\r
+ .unbind(click)\r
+ .bind(event_complete, function () {\r
+ if (settings.loop || $related[index + 1]) {\r
+ timeOut = setTimeout(publicMethod.next, settings.slideshowSpeed);\r
+ }\r
+ })\r
+ .bind(event_load, function () {\r
+ clearTimeout(timeOut);\r
+ })\r
+ .one(click + ' ' + event_cleanup, stop);\r
+ $box.removeClass(className + "off").addClass(className + "on");\r
+ timeOut = setTimeout(publicMethod.next, settings.slideshowSpeed);\r
+ };\r
+ \r
+ stop = function () {\r
+ clearTimeout(timeOut);\r
+ $slideshow\r
+ .text(settings.slideshowStart)\r
+ .unbind([event_complete, event_load, event_cleanup, click].join(' '))\r
+ .one(click, function () {\r
+ publicMethod.next();\r
+ start();\r
+ });\r
+ $box.removeClass(className + "on").addClass(className + "off");\r
+ };\r
+ \r
+ if (settings.slideshowAuto) {\r
+ start();\r
+ } else {\r
+ stop();\r
+ }\r
+ } else {\r
+ $box.removeClass(className + "off " + className + "on");\r
+ }\r
+ }\r
+\r
+ function launch(target) {\r
+ if (!closing) {\r
+ \r
+ element = target;\r
+ \r
+ makeSettings();\r
+ \r
+ $related = $(element);\r
+ \r
+ index = 0;\r
+ \r
+ if (settings.rel !== 'nofollow') {\r
+ $related = $('.' + boxElement).filter(function () {\r
+ var relRelated = $.data(this, colorbox).rel || this.rel;\r
+ return (relRelated === settings.rel);\r
+ });\r
+ index = $related.index(element);\r
+ \r
+ // Check direct calls to ColorBox.\r
+ if (index === -1) {\r
+ $related = $related.add(element);\r
+ index = $related.length - 1;\r
+ }\r
+ }\r
+ \r
+ if (!open) {\r
+ open = active = true; // Prevents the page-change action from queuing up if the visitor holds down the left or right keys.\r
+ \r
+ $box.show();\r
+ \r
+ if (settings.returnFocus) {\r
+ $(element).blur().one(event_closed, function () {\r
+ $(this).focus();\r
+ });\r
+ }\r
+ \r
+ // +settings.opacity avoids a problem in IE when using non-zero-prefixed-string-values, like '.5'\r
+ $overlay.css({"opacity": +settings.opacity, "cursor": settings.overlayClose ? "pointer" : "auto"}).show();\r
+ \r
+ // Opens inital empty ColorBox prior to content being loaded.\r
+ settings.w = setSize(settings.initialWidth, 'x');\r
+ settings.h = setSize(settings.initialHeight, 'y');\r
+ publicMethod.position();\r
+ \r
+ if (isIE6) {\r
+ $window.bind('resize.' + event_ie6 + ' scroll.' + event_ie6, function () {\r
+ $overlay.css({width: $window.width(), height: $window.height(), top: $window.scrollTop(), left: $window.scrollLeft()});\r
+ }).trigger('resize.' + event_ie6);\r
+ }\r
+ \r
+ trigger(event_open, settings.onOpen);\r
+ \r
+ $groupControls.add($title).hide();\r
+ \r
+ $close.html(settings.close).show();\r
+ }\r
+ \r
+ publicMethod.load(true);\r
+ }\r
+ }\r
+\r
+ // ColorBox's markup needs to be added to the DOM prior to being called\r
+ // so that the browser will go ahead and load the CSS background images.\r
+ function appendHTML() {\r
+ if (!$box && document.body) {\r
+ init = false;\r
+\r
+ $window = $(window);\r
+ $box = $tag(div).attr({id: colorbox, 'class': isIE ? prefix + (isIE6 ? 'IE6' : 'IE') : ''}).hide();\r
+ $overlay = $tag(div, "Overlay", isIE6 ? 'position:absolute' : '').hide();\r
+ $wrap = $tag(div, "Wrapper");\r
+ $content = $tag(div, "Content").append(\r
+ $loaded = $tag(div, "LoadedContent", 'width:0; height:0; overflow:hidden'),\r
+ $loadingOverlay = $tag(div, "LoadingOverlay").add($tag(div, "LoadingGraphic")),\r
+ $title = $tag(div, "Title"),\r
+ $current = $tag(div, "Current"),\r
+ $next = $tag(div, "Next"),\r
+ $prev = $tag(div, "Previous"),\r
+ $slideshow = $tag(div, "Slideshow").bind(event_open, slideshow),\r
+ $close = $tag(div, "Close")\r
+ );\r
+ \r
+ $wrap.append( // The 3x3 Grid that makes up ColorBox\r
+ $tag(div).append(\r
+ $tag(div, "TopLeft"),\r
+ $topBorder = $tag(div, "TopCenter"),\r
+ $tag(div, "TopRight")\r
+ ),\r
+ $tag(div, false, 'clear:left').append(\r
+ $leftBorder = $tag(div, "MiddleLeft"),\r
+ $content,\r
+ $rightBorder = $tag(div, "MiddleRight")\r
+ ),\r
+ $tag(div, false, 'clear:left').append(\r
+ $tag(div, "BottomLeft"),\r
+ $bottomBorder = $tag(div, "BottomCenter"),\r
+ $tag(div, "BottomRight")\r
+ )\r
+ ).find('div div').css({'float': 'left'});\r
+ \r
+ $loadingBay = $tag(div, false, 'position:absolute; width:9999px; visibility:hidden; display:none');\r
+ \r
+ $groupControls = $next.add($prev).add($current).add($slideshow);\r
+\r
+ $(document.body).append($overlay, $box.append($wrap, $loadingBay));\r
+ }\r
+ }\r
+\r
+ // Add ColorBox's event bindings\r
+ function addBindings() {\r
+ if ($box) {\r
+ if (!init) {\r
+ init = true;\r
+\r
+ // Cache values needed for size calculations\r
+ interfaceHeight = $topBorder.height() + $bottomBorder.height() + $content.outerHeight(true) - $content.height();//Subtraction needed for IE6\r
+ interfaceWidth = $leftBorder.width() + $rightBorder.width() + $content.outerWidth(true) - $content.width();\r
+ loadedHeight = $loaded.outerHeight(true);\r
+ loadedWidth = $loaded.outerWidth(true);\r
+ \r
+ // Setting padding to remove the need to do size conversions during the animation step.\r
+ $box.css({"padding-bottom": interfaceHeight, "padding-right": interfaceWidth});\r
+\r
+ // Anonymous functions here keep the public method from being cached, thereby allowing them to be redefined on the fly.\r
+ $next.click(function () {\r
+ publicMethod.next();\r
+ });\r
+ $prev.click(function () {\r
+ publicMethod.prev();\r
+ });\r
+ $close.click(function () {\r
+ publicMethod.close();\r
+ });\r
+ $overlay.click(function () {\r
+ if (settings.overlayClose) {\r
+ publicMethod.close();\r
+ }\r
+ });\r
+ \r
+ // Key Bindings\r
+ $(document).bind('keydown.' + prefix, function (e) {\r
+ var key = e.keyCode;\r
+ if (open && settings.escKey && key === 27) {\r
+ e.preventDefault();\r
+ publicMethod.close();\r
+ }\r
+ if (open && settings.arrowKey && $related[1]) {\r
+ if (key === 37) {\r
+ e.preventDefault();\r
+ $prev.click();\r
+ } else if (key === 39) {\r
+ e.preventDefault();\r
+ $next.click();\r
+ }\r
+ }\r
+ });\r
+\r
+ $('.' + boxElement, document).live('click', function (e) {\r
+ // ignore non-left-mouse-clicks and clicks modified with ctrl / command, shift, or alt.\r
+ // See: http://jacklmoore.com/notes/click-events/\r
+ if (!(e.which > 1 || e.shiftKey || e.altKey || e.metaKey)) {\r
+ e.preventDefault();\r
+ launch(this);\r
+ }\r
+ });\r
+ }\r
+ return true;\r
+ }\r
+ return false;\r
+ }\r
+\r
+ // Don't do anything if ColorBox already exists.\r
+ if ($.colorbox) {\r
+ return;\r
+ }\r
+\r
+ // Append the HTML when the DOM loads\r
+ $(appendHTML);\r
+\r
+\r
+ // ****************\r
+ // PUBLIC FUNCTIONS\r
+ // Usage format: $.fn.colorbox.close();\r
+ // Usage from within an iframe: parent.$.fn.colorbox.close();\r
+ // ****************\r
+ \r
+ publicMethod = $.fn[colorbox] = $[colorbox] = function (options, callback) {\r
+ var $this = this;\r
+ \r
+ options = options || {};\r
+ \r
+ appendHTML();\r
+\r
+ if (addBindings()) {\r
+ if (!$this[0]) {\r
+ if ($this.selector) { // if a selector was given and it didn't match any elements, go ahead and exit.\r
+ return $this;\r
+ }\r
+ // if no selector was given (ie. $.colorbox()), create a temporary element to work with\r
+ $this = $('<a/>');\r
+ options.open = true; // assume an immediate open\r
+ }\r
+ \r
+ if (callback) {\r
+ options.onComplete = callback;\r
+ }\r
+ \r
+ $this.each(function () {\r
+ $.data(this, colorbox, $.extend({}, $.data(this, colorbox) || defaults, options));\r
+ }).addClass(boxElement);\r
+ \r
+ if (($.isFunction(options.open) && options.open.call($this)) || options.open) {\r
+ launch($this[0]);\r
+ }\r
+ }\r
+ \r
+ return $this;\r
+ };\r
+\r
+ publicMethod.position = function (speed, loadedCallback) {\r
+ var \r
+ top = 0, \r
+ left = 0, \r
+ offset = $box.offset(),\r
+ scrollTop = $window.scrollTop(), \r
+ scrollLeft = $window.scrollLeft();\r
+ \r
+ $window.unbind('resize.' + prefix);\r
+\r
+ // remove the modal so that it doesn't influence the document width/height \r
+ $box.css({top: -9e4, left: -9e4});\r
+\r
+ if (settings.fixed && !isIE6) {\r
+ offset.top -= scrollTop;\r
+ offset.left -= scrollLeft;\r
+ $box.css({position: 'fixed'});\r
+ } else {\r
+ top = scrollTop;\r
+ left = scrollLeft;\r
+ $box.css({position: 'absolute'});\r
+ }\r
+\r
+ // keeps the top and left positions within the browser's viewport.\r
+ if (settings.right !== false) {\r
+ left += Math.max($window.width() - settings.w - loadedWidth - interfaceWidth - setSize(settings.right, 'x'), 0);\r
+ } else if (settings.left !== false) {\r
+ left += setSize(settings.left, 'x');\r
+ } else {\r
+ left += Math.round(Math.max($window.width() - settings.w - loadedWidth - interfaceWidth, 0) / 2);\r
+ }\r
+ \r
+ if (settings.bottom !== false) {\r
+ top += Math.max($window.height() - settings.h - loadedHeight - interfaceHeight - setSize(settings.bottom, 'y'), 0);\r
+ } else if (settings.top !== false) {\r
+ top += setSize(settings.top, 'y');\r
+ } else {\r
+ top += Math.round(Math.max($window.height() - settings.h - loadedHeight - interfaceHeight, 0) / 2);\r
+ }\r
+\r
+ $box.css({top: offset.top, left: offset.left});\r
+\r
+ // setting the speed to 0 to reduce the delay between same-sized content.\r
+ speed = ($box.width() === settings.w + loadedWidth && $box.height() === settings.h + loadedHeight) ? 0 : speed || 0;\r
+ \r
+ // this gives the wrapper plenty of breathing room so it's floated contents can move around smoothly,\r
+ // but it has to be shrank down around the size of div#colorbox when it's done. If not,\r
+ // it can invoke an obscure IE bug when using iframes.\r
+ $wrap[0].style.width = $wrap[0].style.height = "9999px";\r
+ \r
+ function modalDimensions(that) {\r
+ $topBorder[0].style.width = $bottomBorder[0].style.width = $content[0].style.width = that.style.width;\r
+ $content[0].style.height = $leftBorder[0].style.height = $rightBorder[0].style.height = that.style.height;\r
+ }\r
+ \r
+ $box.dequeue().animate({width: settings.w + loadedWidth, height: settings.h + loadedHeight, top: top, left: left}, {\r
+ duration: speed,\r
+ complete: function () {\r
+ modalDimensions(this);\r
+ \r
+ active = false;\r
+ \r
+ // shrink the wrapper down to exactly the size of colorbox to avoid a bug in IE's iframe implementation.\r
+ $wrap[0].style.width = (settings.w + loadedWidth + interfaceWidth) + "px";\r
+ $wrap[0].style.height = (settings.h + loadedHeight + interfaceHeight) + "px";\r
+ \r
+ if (settings.reposition) {\r
+ setTimeout(function () { // small delay before binding onresize due to an IE8 bug.\r
+ $window.bind('resize.' + prefix, publicMethod.position);\r
+ }, 1);\r
+ }\r
+\r
+ if (loadedCallback) {\r
+ loadedCallback();\r
+ }\r
+ },\r
+ step: function () {\r
+ modalDimensions(this);\r
+ }\r
+ });\r
+ };\r
+\r
+ publicMethod.resize = function (options) {\r
+ if (open) {\r
+ options = options || {};\r
+ \r
+ if (options.width) {\r
+ settings.w = setSize(options.width, 'x') - loadedWidth - interfaceWidth;\r
+ }\r
+ if (options.innerWidth) {\r
+ settings.w = setSize(options.innerWidth, 'x');\r
+ }\r
+ $loaded.css({width: settings.w});\r
+ \r
+ if (options.height) {\r
+ settings.h = setSize(options.height, 'y') - loadedHeight - interfaceHeight;\r
+ }\r
+ if (options.innerHeight) {\r
+ settings.h = setSize(options.innerHeight, 'y');\r
+ }\r
+ if (!options.innerHeight && !options.height) {\r
+ $loaded.css({height: "auto"});\r
+ settings.h = $loaded.height();\r
+ }\r
+ $loaded.css({height: settings.h});\r
+ \r
+ publicMethod.position(settings.transition === "none" ? 0 : settings.speed);\r
+ }\r
+ };\r
+\r
+ publicMethod.prep = function (object) {\r
+ if (!open) {\r
+ return;\r
+ }\r
+ \r
+ var callback, speed = settings.transition === "none" ? 0 : settings.speed;\r
+ \r
+ $loaded.remove();\r
+ $loaded = $tag(div, 'LoadedContent').append(object);\r
+ \r
+ function getWidth() {\r
+ settings.w = settings.w || $loaded.width();\r
+ settings.w = settings.mw && settings.mw < settings.w ? settings.mw : settings.w;\r
+ return settings.w;\r
+ }\r
+ function getHeight() {\r
+ settings.h = settings.h || $loaded.height();\r
+ settings.h = settings.mh && settings.mh < settings.h ? settings.mh : settings.h;\r
+ return settings.h;\r
+ }\r
+ \r
+ $loaded.hide()\r
+ .appendTo($loadingBay.show())// content has to be appended to the DOM for accurate size calculations.\r
+ .css({width: getWidth(), overflow: settings.scrolling ? 'auto' : 'hidden'})\r
+ .css({height: getHeight()})// sets the height independently from the width in case the new width influences the value of height.\r
+ .prependTo($content);\r
+ \r
+ $loadingBay.hide();\r
+ \r
+ // floating the IMG removes the bottom line-height and fixed a problem where IE miscalculates the width of the parent element as 100% of the document width.\r
+ //$(photo).css({'float': 'none', marginLeft: 'auto', marginRight: 'auto'});\r
+ \r
+ $(photo).css({'float': 'none'});\r
+ \r
+ // Hides SELECT elements in IE6 because they would otherwise sit on top of the overlay.\r
+ if (isIE6) {\r
+ $('select').not($box.find('select')).filter(function () {\r
+ return this.style.visibility !== 'hidden';\r
+ }).css({'visibility': 'hidden'}).one(event_cleanup, function () {\r
+ this.style.visibility = 'inherit';\r
+ });\r
+ }\r
+ \r
+ callback = function () {\r
+ var preload, i, total = $related.length, iframe, frameBorder = 'frameBorder', allowTransparency = 'allowTransparency', complete, src, img;\r
+ \r
+ if (!open) {\r
+ return;\r
+ }\r
+ \r
+ function removeFilter() {\r
+ if (isIE) {\r
+ $box[0].style.removeAttribute('filter');\r
+ }\r
+ }\r
+ \r
+ complete = function () {\r
+ clearTimeout(loadingTimer);\r
+ $loadingOverlay.hide();\r
+ trigger(event_complete, settings.onComplete);\r
+ };\r
+ \r
+ if (isIE) {\r
+ //This fadeIn helps the bicubic resampling to kick-in.\r
+ if (photo) {\r
+ $loaded.fadeIn(100);\r
+ }\r
+ }\r
+ \r
+ $title.html(settings.title).add($loaded).show();\r
+ \r
+ if (total > 1) { // handle grouping\r
+ if (typeof settings.current === "string") {\r
+ $current.html(settings.current.replace('{current}', index + 1).replace('{total}', total)).show();\r
+ }\r
+ \r
+ $next[(settings.loop || index < total - 1) ? "show" : "hide"]().html(settings.next);\r
+ $prev[(settings.loop || index) ? "show" : "hide"]().html(settings.previous);\r
+ \r
+ if (settings.slideshow) {\r
+ $slideshow.show();\r
+ }\r
+ \r
+ // Preloads images within a rel group\r
+ if (settings.preloading) {\r
+ preload = [\r
+ getIndex(-1),\r
+ getIndex(1)\r
+ ];\r
+ while (i = $related[preload.pop()]) {\r
+ src = $.data(i, colorbox).href || i.href;\r
+ if ($.isFunction(src)) {\r
+ src = src.call(i);\r
+ }\r
+ if (isImage(src)) {\r
+ img = new Image();\r
+ img.src = src;\r
+ }\r
+ }\r
+ }\r
+ } else {\r
+ $groupControls.hide();\r
+ }\r
+ \r
+ if (settings.iframe) {\r
+ iframe = $tag('iframe')[0];\r
+ \r
+ if (frameBorder in iframe) {\r
+ iframe[frameBorder] = 0;\r
+ }\r
+ if (allowTransparency in iframe) {\r
+ iframe[allowTransparency] = "true";\r
+ }\r
+ // give the iframe a unique name to prevent caching\r
+ iframe.name = prefix + (+new Date());\r
+ if (settings.fastIframe) {\r
+ complete();\r
+ } else {\r
+ $(iframe).one('load', complete);\r
+ }\r
+ iframe.src = settings.href;\r
+ if (!settings.scrolling) {\r
+ iframe.scrolling = "no";\r
+ }\r
+ $(iframe).addClass(prefix + 'Iframe').appendTo($loaded).one(event_purge, function () {\r
+ iframe.src = "//about:blank";\r
+ });\r
+ } else {\r
+ complete();\r
+ }\r
+ \r
+ if (settings.transition === 'fade') {\r
+ $box.fadeTo(speed, 1, removeFilter);\r
+ } else {\r
+ removeFilter();\r
+ }\r
+ };\r
+ \r
+ if (settings.transition === 'fade') {\r
+ $box.fadeTo(speed, 0, function () {\r
+ publicMethod.position(0, callback);\r
+ });\r
+ } else {\r
+ publicMethod.position(speed, callback);\r
+ }\r
+ };\r
+\r
+ publicMethod.load = function (launched) {\r
+ var href, setResize, prep = publicMethod.prep;\r
+ \r
+ active = true;\r
+ \r
+ photo = false;\r
+ \r
+ element = $related[index];\r
+ \r
+ if (!launched) {\r
+ makeSettings();\r
+ }\r
+ \r
+ trigger(event_purge);\r
+ \r
+ trigger(event_load, settings.onLoad);\r
+ \r
+ settings.h = settings.height ?\r
+ setSize(settings.height, 'y') - loadedHeight - interfaceHeight :\r
+ settings.innerHeight && setSize(settings.innerHeight, 'y');\r
+ \r
+ settings.w = settings.width ?\r
+ setSize(settings.width, 'x') - loadedWidth - interfaceWidth :\r
+ settings.innerWidth && setSize(settings.innerWidth, 'x');\r
+ \r
+ // Sets the minimum dimensions for use in image scaling\r
+ settings.mw = settings.w;\r
+ settings.mh = settings.h;\r
+ \r
+ // Re-evaluate the minimum width and height based on maxWidth and maxHeight values.\r
+ // If the width or height exceed the maxWidth or maxHeight, use the maximum values instead.\r
+ if (settings.maxWidth) {\r
+ settings.mw = setSize(settings.maxWidth, 'x') - loadedWidth - interfaceWidth;\r
+ settings.mw = settings.w && settings.w < settings.mw ? settings.w : settings.mw;\r
+ }\r
+ if (settings.maxHeight) {\r
+ settings.mh = setSize(settings.maxHeight, 'y') - loadedHeight - interfaceHeight;\r
+ settings.mh = settings.h && settings.h < settings.mh ? settings.h : settings.mh;\r
+ }\r
+ \r
+ href = settings.href;\r
+ \r
+ loadingTimer = setTimeout(function () {\r
+ $loadingOverlay.show();\r
+ }, 100);\r
+ \r
+ if (settings.inline) {\r
+ // Inserts an empty placeholder where inline content is being pulled from.\r
+ // An event is bound to put inline content back when ColorBox closes or loads new content.\r
+ $tag(div).hide().insertBefore($(href)[0]).one(event_purge, function () {\r
+ $(this).replaceWith($loaded.children());\r
+ });\r
+ prep($(href));\r
+ } else if (settings.iframe) {\r
+ // IFrame element won't be added to the DOM until it is ready to be displayed,\r
+ // to avoid problems with DOM-ready JS that might be trying to run in that iframe.\r
+ prep(" ");\r
+ } else if (settings.html) {\r
+ prep(settings.html);\r
+ } else if (isImage(href)) {\r
+ $(photo = new Image())\r
+ .addClass(prefix + 'Photo')\r
+ .error(function () {\r
+ settings.title = false;\r
+ prep($tag(div, 'Error').text('This image could not be loaded'));\r
+ })\r
+ .load(function () {\r
+ var percent;\r
+ photo.onload = null; //stops animated gifs from firing the onload repeatedly.\r
+ \r
+ if (settings.scalePhotos) {\r
+ setResize = function () {\r
+ photo.height -= photo.height * percent;\r
+ photo.width -= photo.width * percent; \r
+ };\r
+ if (settings.mw && photo.width > settings.mw) {\r
+ percent = (photo.width - settings.mw) / photo.width;\r
+ setResize();\r
+ }\r
+ if (settings.mh && photo.height > settings.mh) {\r
+ percent = (photo.height - settings.mh) / photo.height;\r
+ setResize();\r
+ }\r
+ }\r
+ \r
+ if (settings.h) {\r
+ photo.style.marginTop = Math.max(settings.h - photo.height, 0) / 2 + 'px';\r
+ }\r
+ \r
+ if ($related[1] && (settings.loop || $related[index + 1])) {\r
+ photo.style.cursor = 'pointer';\r
+ photo.onclick = function () {\r
+ publicMethod.next();\r
+ };\r
+ }\r
+ \r
+ if (isIE) {\r
+ photo.style.msInterpolationMode = 'bicubic';\r
+ }\r
+ \r
+ setTimeout(function () { // A pause because Chrome will sometimes report a 0 by 0 size otherwise.\r
+ prep(photo);\r
+ }, 1);\r
+ });\r
+ \r
+ setTimeout(function () { // A pause because Opera 10.6+ will sometimes not run the onload function otherwise.\r
+ photo.src = href;\r
+ }, 1);\r
+ } else if (href) {\r
+ $loadingBay.load(href, settings.data, function (data, status, xhr) {\r
+ prep(status === 'error' ? $tag(div, 'Error').text('Request unsuccessful: ' + xhr.statusText) : $(this).contents());\r
+ });\r
+ }\r
+ };\r
+ \r
+ // Navigates to the next page/image in a set.\r
+ publicMethod.next = function () {\r
+ if (!active && $related[1] && (settings.loop || $related[index + 1])) {\r
+ index = getIndex(1);\r
+ publicMethod.load();\r
+ }\r
+ };\r
+ \r
+ publicMethod.prev = function () {\r
+ if (!active && $related[1] && (settings.loop || index)) {\r
+ index = getIndex(-1);\r
+ publicMethod.load();\r
+ }\r
+ };\r
+\r
+ // Note: to use this within an iframe use the following format: parent.$.fn.colorbox.close();\r
+ publicMethod.close = function () {\r
+ if (open && !closing) {\r
+ \r
+ closing = true;\r
+ \r
+ open = false;\r
+ \r
+ trigger(event_cleanup, settings.onCleanup);\r
+ \r
+ $window.unbind('.' + prefix + ' .' + event_ie6);\r
+ \r
+ $overlay.fadeTo(200, 0);\r
+ \r
+ $box.stop().fadeTo(300, 0, function () {\r
+ \r
+ $box.add($overlay).css({'opacity': 1, cursor: 'auto'}).hide();\r
+ \r
+ trigger(event_purge);\r
+ \r
+ $loaded.remove();\r
+ \r
+ setTimeout(function () {\r
+ closing = false;\r
+ trigger(event_closed, settings.onClosed);\r
+ }, 1);\r
+ });\r
+ }\r
+ };\r
+\r
+ // Removes changes ColorBox made to the document, but does not remove the plugin\r
+ // from jQuery.\r
+ publicMethod.remove = function () {\r
+ $([]).add($box).add($overlay).remove();\r
+ $box = null;\r
+ $('.' + boxElement)\r
+ .removeData(colorbox)\r
+ .removeClass(boxElement)\r
+ .die();\r
+ };\r
+\r
+ // A method for fetching the current element ColorBox is referencing.\r
+ // returns a jQuery object.\r
+ publicMethod.element = function () {\r
+ return $(element);\r
+ };\r
+\r
+ publicMethod.settings = defaults;\r
+\r
+}(jQuery, document, this));
\ No newline at end of file
--- /dev/null
+/**
+ * DropKick
+ *
+ * Highly customizable <select> lists
+ * https://github.com/JamieLottering/DropKick
+ *
+ * © 2011 Jamie Lottering <http://github.com/JamieLottering>
+ * <http://twitter.com/JamieLottering>
+ *
+ */
+(function ($, window, document) {
+
+ var ie6 = false;
+
+ // Help prevent flashes of unstyled content
+ if ($.browser.msie && $.browser.version.substr(0, 1) < 7) {
+ ie6 = true;
+ } else {
+ document.documentElement.className = document.documentElement.className + ' dk_fouc';
+ }
+
+ var
+ // Public methods exposed to $.fn.dropkick()
+ methods = {},
+
+ // Cache every <select> element that gets dropkicked
+ lists = [],
+
+ // Convenience keys for keyboard navigation
+ keyMap = {
+ 'left' : 37,
+ 'up' : 38,
+ 'right' : 39,
+ 'down' : 40,
+ 'enter' : 13
+ },
+
+ // HTML template for the dropdowns
+ dropdownTemplate = [
+ '<div class="dk_container" id="dk_container_{{ id }}" tabindex="{{ tabindex }}">',
+ '<a class="dk_toggle">',
+ '<span class="dk_label">{{ label }}</span>',
+ '</a>',
+ '<div class="dk_options">',
+ '<ul class="dk_options_inner">',
+ '</ul>',
+ '</div>',
+ '</div>'
+ ].join(''),
+
+ // HTML template for dropdown options
+ optionTemplate = '<li class="{{ current }}"><a data-dk-dropdown-value="{{ value }}">{{ text }}</a></li>',
+
+ // Some nice default values
+ defaults = {
+ startSpeed : 1000, // I recommend a high value here, I feel it makes the changes less noticeable to the user
+ theme : false,
+ change : false
+ },
+
+ // Make sure we only bind keydown on the document once
+ keysBound = false
+ ;
+
+ // Called by using $('foo').dropkick();
+ methods.init = function (settings) {
+ settings = $.extend({}, defaults, settings);
+
+ return this.each(function () {
+ var
+ // The current <select> element
+ $select = $(this),
+
+ // Store a reference to the originally selected <option> element
+ $original = $select.find(':selected').first(),
+
+ // Save all of the <option> elements
+ $options = $select.find('option'),
+
+ // We store lots of great stuff using jQuery data
+ data = $select.data('dropkick') || {},
+
+ // This gets applied to the 'dk_container' element
+ id = $select.attr('id') || $select.attr('name'),
+
+ // This gets updated to be equal to the longest <option> element
+ width = settings.width || $select.outerWidth(),
+
+ // Check if we have a tabindex set or not
+ tabindex = $select.attr('tabindex') ? $select.attr('tabindex') : '',
+
+ // The completed dk_container element
+ $dk = false,
+
+ theme
+ ;
+
+ // Dont do anything if we've already setup dropkick on this element
+ if (data.id) {
+ return $select;
+ } else {
+ data.settings = settings;
+ data.tabindex = tabindex;
+ data.id = id;
+ data.$original = $original;
+ data.$select = $select;
+ data.value = _notBlank($select.val()) || _notBlank($original.attr('value'));
+ data.label = $original.text();
+ data.options = $options;
+ }
+
+ // Build the dropdown HTML
+ $dk = _build(dropdownTemplate, data);
+
+ // Make the dropdown fixed width if desired
+ $dk.find('.dk_toggle').css({
+ 'width' : width + 'px'
+ });
+
+ // Hide the <select> list and place our new one in front of it
+ $select.before($dk);
+
+ // Update the reference to $dk
+ $dk = $('#dk_container_' + id).fadeIn(settings.startSpeed);
+
+ // Save the current theme
+ theme = settings.theme ? settings.theme : 'default';
+ $dk.addClass('dk_theme_' + theme);
+ data.theme = theme;
+
+ // Save the updated $dk reference into our data object
+ data.$dk = $dk;
+
+ // Save the dropkick data onto the <select> element
+ $select.data('dropkick', data);
+
+ // Do the same for the dropdown, but add a few helpers
+ $dk.data('dropkick', data);
+
+ lists[lists.length] = $select;
+
+ // Focus events
+ $dk.bind('focus.dropkick', function (e) {
+ $dk.addClass('dk_focus');
+ }).bind('blur.dropkick', function (e) {
+ $dk.removeClass('dk_open dk_focus');
+ });
+
+ setTimeout(function () {
+ $select.hide();
+ }, 0);
+ });
+ };
+
+ // Allows dynamic theme changes
+ methods.theme = function (newTheme) {
+ var
+ $select = $(this),
+ list = $select.data('dropkick'),
+ $dk = list.$dk,
+ oldtheme = 'dk_theme_' + list.theme
+ ;
+
+ $dk.removeClass(oldtheme).addClass('dk_theme_' + newTheme);
+
+ list.theme = newTheme;
+ };
+
+ // Reset all <selects and dropdowns in our lists array
+ methods.reset = function () {
+ for (var i = 0, l = lists.length; i < l; i++) {
+ var
+ listData = lists[i].data('dropkick'),
+ $dk = listData.$dk,
+ $current = $dk.find('li').first()
+ ;
+
+ $dk.find('.dk_label').text(listData.label);
+ $dk.find('.dk_options_inner').animate({ scrollTop: 0 }, 0);
+
+ _setCurrent($current, $dk);
+ _updateFields($current, $dk, true);
+ }
+ };
+
+ // Expose the plugin
+ $.fn.dropkick = function (method) {
+ if (!ie6) {
+ if (methods[method]) {
+ return methods[method].apply(this, Array.prototype.slice.call(arguments, 1));
+ } else if (typeof method === 'object' || ! method) {
+ return methods.init.apply(this, arguments);
+ }
+ }
+ };
+
+ // private
+ function _handleKeyBoardNav(e, $dk) {
+ var
+ code = e.keyCode,
+ data = $dk.data('dropkick'),
+ options = $dk.find('.dk_options'),
+ open = $dk.hasClass('dk_open'),
+ current = $dk.find('.dk_option_current'),
+ first = options.find('li').first(),
+ last = options.find('li').last(),
+ next,
+ prev
+ ;
+
+ switch (code) {
+ case keyMap.enter:
+ if (open) {
+ _updateFields(current.find('a'), $dk);
+ _closeDropdown($dk);
+ } else {
+ _openDropdown($dk);
+ }
+ e.preventDefault();
+ break;
+
+ case keyMap.up:
+ prev = current.prev('li');
+ if (open) {
+ if (prev.length) {
+ _setCurrent(prev, $dk);
+ } else {
+ _setCurrent(last, $dk);
+ }
+ } else {
+ _openDropdown($dk);
+ }
+ e.preventDefault();
+ break;
+
+ case keyMap.down:
+ if (open) {
+ next = current.next('li').first();
+ if (next.length) {
+ _setCurrent(next, $dk);
+ } else {
+ _setCurrent(first, $dk);
+ }
+ } else {
+ _openDropdown($dk);
+ }
+ e.preventDefault();
+ break;
+
+ default:
+ break;
+ }
+ }
+
+ // Update the <select> value, and the dropdown label
+ function _updateFields(option, $dk, reset) {
+ var value, label, data;
+
+ value = option.attr('data-dk-dropdown-value');
+ label = option.text();
+ data = $dk.data('dropkick');
+
+ $select = data.$select;
+ $select.val(value);
+
+ $dk.find('.dk_label').text(label);
+
+ reset = reset || false;
+
+ if (data.settings.change && !reset) {
+ data.settings.change.call($select, value, label);
+ }
+ }
+
+ // Set the currently selected option
+ function _setCurrent($current, $dk) {
+ $dk.find('.dk_option_current').removeClass('dk_option_current');
+ $current.addClass('dk_option_current');
+
+ _setScrollPos($dk, $current);
+ }
+
+ function _setScrollPos($dk, anchor) {
+ var height = anchor.prevAll('li').outerHeight() * anchor.prevAll('li').length;
+ $dk.find('.dk_options_inner').animate({ scrollTop: height + 'px' }, 0);
+ }
+
+ // Close a dropdown
+ function _closeDropdown($dk) {
+ $dk.removeClass('dk_open');
+ }
+
+ // Open a dropdown
+ function _openDropdown($dk) {
+ var data = $dk.data('dropkick');
+ $dk.find('.dk_options').css({ top : $dk.find('.dk_toggle').outerHeight() - 1 });
+ $dk.toggleClass('dk_open');
+
+ }
+
+ /**
+ * Turn the dropdownTemplate into a jQuery object and fill in the variables.
+ */
+ function _build (tpl, view) {
+ var
+ // Template for the dropdown
+ template = tpl,
+ // Holder of the dropdowns options
+ options = [],
+ $dk
+ ;
+
+ template = template.replace('{{ id }}', view.id);
+ template = template.replace('{{ label }}', view.label);
+ template = template.replace('{{ tabindex }}', view.tabindex);
+
+ if (view.options && view.options.length) {
+ for (var i = 0, l = view.options.length; i < l; i++) {
+ var
+ $option = $(view.options[i]),
+ current = 'dk_option_current',
+ oTemplate = optionTemplate
+ ;
+
+ oTemplate = oTemplate.replace('{{ value }}', $option.val());
+ oTemplate = oTemplate.replace('{{ current }}', (_notBlank($option.val()) === view.value) ? current : '');
+ oTemplate = oTemplate.replace('{{ text }}', $option.text());
+
+ options[options.length] = oTemplate;
+ }
+ }
+
+ $dk = $(template);
+ $dk.find('.dk_options_inner').html(options.join(''));
+
+ return $dk;
+ }
+
+ function _notBlank(text) {
+ return ($.trim(text).length > 0) ? text : false;
+ }
+
+ $(function () {
+
+ // Handle click events on the dropdown toggler
+ $('.dk_toggle').live('click', function (e) {
+ var $dk = $(this).parents('.dk_container').first();
+
+ _openDropdown($dk);
+
+ if ("ontouchstart" in window) {
+ $dk.addClass('dk_touch');
+ $dk.find('.dk_options_inner').addClass('scrollable vertical');
+ }
+
+ e.preventDefault();
+ return false;
+ });
+
+ // Handle click events on individual dropdown options
+ $('.dk_options a').live(($.browser.msie ? 'mousedown' : 'click'), function (e) {
+ var
+ $option = $(this),
+ $dk = $option.parents('.dk_container').first(),
+ data = $dk.data('dropkick')
+ ;
+
+ _closeDropdown($dk);
+ _updateFields($option, $dk);
+ _setCurrent($option.parent(), $dk);
+
+ e.preventDefault();
+ return false;
+ });
+
+ // Setup keyboard nav
+ $(document).bind('keydown.dk_nav', function (e) {
+ var
+ // Look for an open dropdown...
+ $open = $('.dk_container.dk_open'),
+
+ // Look for a focused dropdown
+ $focused = $('.dk_container.dk_focus'),
+
+ // Will be either $open, $focused, or null
+ $dk = null
+ ;
+
+ // If we have an open dropdown, key events should get sent to that one
+ if ($open.length) {
+ $dk = $open;
+ } else if ($focused.length && !$open.length) {
+ // But if we have no open dropdowns, use the focused dropdown instead
+ $dk = $focused;
+ }
+
+ if ($dk) {
+ _handleKeyBoardNav(e, $dk);
+ }
+ });
+ });
+})(jQuery, window, document);
\ No newline at end of file
--- /dev/null
+var BrowserDetect = {\r
+ init: function () {\r
+ this.browser = this.searchString(this.dataBrowser) || "An unknown browser";\r
+ this.version = this.searchVersion(navigator.userAgent)\r
+ || this.searchVersion(navigator.appVersion)\r
+ || "an unknown version";\r
+ this.OS = this.searchString(this.dataOS) || "an unknown OS";\r
+ },\r
+ searchString: function (data) {\r
+ for (var i=0;i<data.length;i++) {\r
+ var dataString = data[i].string;\r
+ var dataProp = data[i].prop;\r
+ this.versionSearchString = data[i].versionSearch || data[i].identity;\r
+ if (dataString) {\r
+ if (dataString.indexOf(data[i].subString) != -1)\r
+ return data[i].identity;\r
+ }\r
+ else if (dataProp)\r
+ return data[i].identity;\r
+ }\r
+ },\r
+ searchVersion: function (dataString) {\r
+ var index = dataString.indexOf(this.versionSearchString);\r
+ if (index == -1) return;\r
+ return parseFloat(dataString.substring(index+this.versionSearchString.length+1));\r
+ },\r
+ dataBrowser: [\r
+ {\r
+ string: navigator.userAgent,\r
+ subString: "Chrome",\r
+ identity: "Chrome"\r
+ },\r
+ { string: navigator.userAgent,\r
+ subString: "OmniWeb",\r
+ versionSearch: "OmniWeb/",\r
+ identity: "OmniWeb"\r
+ },\r
+ {\r
+ string: navigator.vendor,\r
+ subString: "Apple",\r
+ identity: "Safari",\r
+ versionSearch: "Version"\r
+ },\r
+ {\r
+ prop: window.opera,\r
+ identity: "Opera",\r
+ versionSearch: "Version"\r
+ },\r
+ {\r
+ string: navigator.vendor,\r
+ subString: "iCab",\r
+ identity: "iCab"\r
+ },\r
+ {\r
+ string: navigator.vendor,\r
+ subString: "KDE",\r
+ identity: "Konqueror"\r
+ },\r
+ {\r
+ string: navigator.userAgent,\r
+ subString: "Firefox",\r
+ identity: "Firefox"\r
+ },\r
+ {\r
+ string: navigator.vendor,\r
+ subString: "Camino",\r
+ identity: "Camino"\r
+ },\r
+ { // for newer Netscapes (6+)\r
+ string: navigator.userAgent,\r
+ subString: "Netscape",\r
+ identity: "Netscape"\r
+ },\r
+ {\r
+ string: navigator.userAgent,\r
+ subString: "MSIE",\r
+ identity: "Explorer",\r
+ versionSearch: "MSIE"\r
+ },\r
+ {\r
+ string: navigator.userAgent,\r
+ subString: "Gecko",\r
+ identity: "Mozilla",\r
+ versionSearch: "rv"\r
+ },\r
+ { // for older Netscapes (4-)\r
+ string: navigator.userAgent,\r
+ subString: "Mozilla",\r
+ identity: "Netscape",\r
+ versionSearch: "Mozilla"\r
+ }\r
+ ],\r
+ dataOS : [\r
+ {\r
+ string: navigator.platform,\r
+ subString: "Win",\r
+ identity: "Windows"\r
+ },\r
+ {\r
+ string: navigator.platform,\r
+ subString: "Mac",\r
+ identity: "Mac"\r
+ },\r
+ {\r
+ string: navigator.userAgent,\r
+ subString: "iPhone",\r
+ identity: "iPhone/iPod"\r
+ },\r
+ {\r
+ string: navigator.platform,\r
+ subString: "Linux",\r
+ identity: "Linux"\r
+ }\r
+ ]\r
+\r
+};\r
+BrowserDetect.init();\r
--- /dev/null
+// Array Remove - By John Resig (MIT Licensed)\r
+Array.prototype.remove = function(from, to) {\r
+ var rest = this.slice((to || from) + 1 || this.length);\r
+ this.length = from < 0 ? this.length + from : from;\r
+ return this.push.apply(this, rest);\r
+};\r
+\r
+function ResourcesModule(el, conf) {\r
+ \r
+ var defaults = {'page_limit': 5};\r
+ this.conf = $.extend(defaults, conf);\r
+\r
+ this.el = el;\r
+ \r
+ this.selected_category = window.location.hash.replace("#","");\r
+ if (!this.selected_category) { this.selected_category = undefined };\r
+ \r
+ this.categories = this.el.find(".categories ul li");\r
+ this.orig_categories = this.categories.clone();\r
+ \r
+ //this.update_page_objects();\r
+ \r
+ this.grid_height = 251;\r
+ this.grid_width = 251;\r
+ this.grid_gap = 22;\r
+\r
+ var self = this;\r
+ $(window).bind('hashchange', function() {\r
+ self.selected_category = window.location.hash.substring(1);\r
+ self.update_page_objects();\r
+ self.update_selected_category();\r
+ })\r
+\r
+ self.update_page_objects();\r
+ self.update_selected_category();\r
+}\r
+\r
+ResourcesModule.prototype.switch = function(hide, show) {\r
+ var hide = $(hide), show = $(show);\r
+ var toparent = hide.parent();\r
+ var newshow = show.clone();\r
+ toparent.append(newshow);\r
+ hide.animate({top:"-249px"})\r
+ newshow.animate({\r
+ top:"-249px"\r
+ }, \r
+ {\r
+ complete:function(){\r
+ hide.remove();\r
+ newshow.css({top:0});\r
+ }\r
+ })\r
+}\r
+\r
+\r
+ResourcesModule.prototype.resources = function() {\r
+ this._resources = this.el.find(".resource-wrapper");\r
+ return this._resources;\r
+}\r
+\r
+ResourcesModule.prototype.hide = function(q) {\r
+ q.fadeOut(300);\r
+}\r
+\r
+ResourcesModule.prototype.animate_els = function(els) {\r
+ $(el).css({ position:'absolute' });\r
+ var left = i % 3 == 0 ? 0 : (i % 3) * (self.grid_width) + ((i % 3)-1) * self.grid_gap;\r
+\r
+ var row = Math.floor(i/3);\r
+ var top = row * (self.grid_gap + self.grid_height);\r
+\r
+ $(el).animate({left: left}, { complete: function(){\r
+ $(el).animate({top: top}, {complete: function(){\r
+ \r
+ self.el.height((self.grid_height + self.grid_gap) * (Math.floor(to_show.length/3) + 1));\r
+ \r
+ }});\r
+ }});\r
+ \r
+ $(el).removeClass("hidden");\r
+ $(el).show('slow');\r
+}\r
+\r
+ResourcesModule.prototype.update_selected_category = function() {\r
+ if (!this.selected_category) {\r
+ this.categories.removeClass("inactive").removeClass("active");\r
+ this.categories.show();\r
+ this.el.find(".categories a.clear").hide();\r
+ return;\r
+ }\r
+\r
+ var to_hide = this.categories.filter("[data-id="+this.selected_category+"]");\r
+ var to_show = this.categories.filter("[data-id!="+this.selected_category+"]");\r
+\r
+ to_show.removeClass("active").addClass("inactive");\r
+ to_hide.removeClass("inactive").addClass("active");\r
+ this.el.find(".categories a.clear").show();\r
+}\r
+\r
+ResourcesModule.prototype.update_page_objects = function() {\r
+ var to_show = this.resources().filter("[data-category="+this.selected_category+"]");\r
+ var to_hide = this.resources().filter("[data-category!="+this.selected_category+"]");\r
+ \r
+ if (!this.selected_category) { to_show = this.resources(); }\r
+ _.each(to_hide, function(el){\r
+ $(el).hide('slow');\r
+ });\r
+\r
+ _.each(to_show, function(el, i){\r
+ \r
+ $(el).fadeIn(40);\r
+ });\r
+}\r
+\r
+$(document).ready(function(){\r
+ var rm = new ResourcesModule($("#resources-list"), {}, []);\r
+ window.rm = rm;\r
+})\r
+\r
+\r
--- /dev/null
+// Underscore.js 1.3.3
+// (c) 2009-2012 Jeremy Ashkenas, DocumentCloud Inc.
+// Underscore is freely distributable under the MIT license.
+// Portions of Underscore are inspired or borrowed from Prototype,
+// Oliver Steele's Functional, and John Resig's Micro-Templating.
+// For all details and documentation:
+// http://documentcloud.github.com/underscore
+
+(function() {
+
+ // Baseline setup
+ // --------------
+
+ // Establish the root object, `window` in the browser, or `global` on the server.
+ var root = this;
+
+ // Save the previous value of the `_` variable.
+ var previousUnderscore = root._;
+
+ // Establish the object that gets returned to break out of a loop iteration.
+ var breaker = {};
+
+ // Save bytes in the minified (but not gzipped) version:
+ var ArrayProto = Array.prototype, ObjProto = Object.prototype, FuncProto = Function.prototype;
+
+ // Create quick reference variables for speed access to core prototypes.
+ var slice = ArrayProto.slice,
+ unshift = ArrayProto.unshift,
+ toString = ObjProto.toString,
+ hasOwnProperty = ObjProto.hasOwnProperty;
+
+ // All **ECMAScript 5** native function implementations that we hope to use
+ // are declared here.
+ var
+ nativeForEach = ArrayProto.forEach,
+ nativeMap = ArrayProto.map,
+ nativeReduce = ArrayProto.reduce,
+ nativeReduceRight = ArrayProto.reduceRight,
+ nativeFilter = ArrayProto.filter,
+ nativeEvery = ArrayProto.every,
+ nativeSome = ArrayProto.some,
+ nativeIndexOf = ArrayProto.indexOf,
+ nativeLastIndexOf = ArrayProto.lastIndexOf,
+ nativeIsArray = Array.isArray,
+ nativeKeys = Object.keys,
+ nativeBind = FuncProto.bind;
+
+ // Create a safe reference to the Underscore object for use below.
+ var _ = function(obj) { return new wrapper(obj); };
+
+ // Export the Underscore object for **Node.js**, with
+ // backwards-compatibility for the old `require()` API. If we're in
+ // the browser, add `_` as a global object via a string identifier,
+ // for Closure Compiler "advanced" mode.
+ if (typeof exports !== 'undefined') {
+ if (typeof module !== 'undefined' && module.exports) {
+ exports = module.exports = _;
+ }
+ exports._ = _;
+ } else {
+ root['_'] = _;
+ }
+
+ // Current version.
+ _.VERSION = '1.3.3';
+
+ // Collection Functions
+ // --------------------
+
+ // The cornerstone, an `each` implementation, aka `forEach`.
+ // Handles objects with the built-in `forEach`, arrays, and raw objects.
+ // Delegates to **ECMAScript 5**'s native `forEach` if available.
+ var each = _.each = _.forEach = function(obj, iterator, context) {
+ if (obj == null) return;
+ if (nativeForEach && obj.forEach === nativeForEach) {
+ obj.forEach(iterator, context);
+ } else if (obj.length === +obj.length) {
+ for (var i = 0, l = obj.length; i < l; i++) {
+ if (i in obj && iterator.call(context, obj[i], i, obj) === breaker) return;
+ }
+ } else {
+ for (var key in obj) {
+ if (_.has(obj, key)) {
+ if (iterator.call(context, obj[key], key, obj) === breaker) return;
+ }
+ }
+ }
+ };
+
+ // Return the results of applying the iterator to each element.
+ // Delegates to **ECMAScript 5**'s native `map` if available.
+ _.map = _.collect = function(obj, iterator, context) {
+ var results = [];
+ if (obj == null) return results;
+ if (nativeMap && obj.map === nativeMap) return obj.map(iterator, context);
+ each(obj, function(value, index, list) {
+ results[results.length] = iterator.call(context, value, index, list);
+ });
+ if (obj.length === +obj.length) results.length = obj.length;
+ return results;
+ };
+
+ // **Reduce** builds up a single result from a list of values, aka `inject`,
+ // or `foldl`. Delegates to **ECMAScript 5**'s native `reduce` if available.
+ _.reduce = _.foldl = _.inject = function(obj, iterator, memo, context) {
+ var initial = arguments.length > 2;
+ if (obj == null) obj = [];
+ if (nativeReduce && obj.reduce === nativeReduce) {
+ if (context) iterator = _.bind(iterator, context);
+ return initial ? obj.reduce(iterator, memo) : obj.reduce(iterator);
+ }
+ each(obj, function(value, index, list) {
+ if (!initial) {
+ memo = value;
+ initial = true;
+ } else {
+ memo = iterator.call(context, memo, value, index, list);
+ }
+ });
+ if (!initial) throw new TypeError('Reduce of empty array with no initial value');
+ return memo;
+ };
+
+ // The right-associative version of reduce, also known as `foldr`.
+ // Delegates to **ECMAScript 5**'s native `reduceRight` if available.
+ _.reduceRight = _.foldr = function(obj, iterator, memo, context) {
+ var initial = arguments.length > 2;
+ if (obj == null) obj = [];
+ if (nativeReduceRight && obj.reduceRight === nativeReduceRight) {
+ if (context) iterator = _.bind(iterator, context);
+ return initial ? obj.reduceRight(iterator, memo) : obj.reduceRight(iterator);
+ }
+ var reversed = _.toArray(obj).reverse();
+ if (context && !initial) iterator = _.bind(iterator, context);
+ return initial ? _.reduce(reversed, iterator, memo, context) : _.reduce(reversed, iterator);
+ };
+
+ // Return the first value which passes a truth test. Aliased as `detect`.
+ _.find = _.detect = function(obj, iterator, context) {
+ var result;
+ any(obj, function(value, index, list) {
+ if (iterator.call(context, value, index, list)) {
+ result = value;
+ return true;
+ }
+ });
+ return result;
+ };
+
+ // Return all the elements that pass a truth test.
+ // Delegates to **ECMAScript 5**'s native `filter` if available.
+ // Aliased as `select`.
+ _.filter = _.select = function(obj, iterator, context) {
+ var results = [];
+ if (obj == null) return results;
+ if (nativeFilter && obj.filter === nativeFilter) return obj.filter(iterator, context);
+ each(obj, function(value, index, list) {
+ if (iterator.call(context, value, index, list)) results[results.length] = value;
+ });
+ return results;
+ };
+
+ // Return all the elements for which a truth test fails.
+ _.reject = function(obj, iterator, context) {
+ var results = [];
+ if (obj == null) return results;
+ each(obj, function(value, index, list) {
+ if (!iterator.call(context, value, index, list)) results[results.length] = value;
+ });
+ return results;
+ };
+
+ // Determine whether all of the elements match a truth test.
+ // Delegates to **ECMAScript 5**'s native `every` if available.
+ // Aliased as `all`.
+ _.every = _.all = function(obj, iterator, context) {
+ var result = true;
+ if (obj == null) return result;
+ if (nativeEvery && obj.every === nativeEvery) return obj.every(iterator, context);
+ each(obj, function(value, index, list) {
+ if (!(result = result && iterator.call(context, value, index, list))) return breaker;
+ });
+ return !!result;
+ };
+
+ // Determine if at least one element in the object matches a truth test.
+ // Delegates to **ECMAScript 5**'s native `some` if available.
+ // Aliased as `any`.
+ var any = _.some = _.any = function(obj, iterator, context) {
+ iterator || (iterator = _.identity);
+ var result = false;
+ if (obj == null) return result;
+ if (nativeSome && obj.some === nativeSome) return obj.some(iterator, context);
+ each(obj, function(value, index, list) {
+ if (result || (result = iterator.call(context, value, index, list))) return breaker;
+ });
+ return !!result;
+ };
+
+ // Determine if a given value is included in the array or object using `===`.
+ // Aliased as `contains`.
+ _.include = _.contains = function(obj, target) {
+ var found = false;
+ if (obj == null) return found;
+ if (nativeIndexOf && obj.indexOf === nativeIndexOf) return obj.indexOf(target) != -1;
+ found = any(obj, function(value) {
+ return value === target;
+ });
+ return found;
+ };
+
+ // Invoke a method (with arguments) on every item in a collection.
+ _.invoke = function(obj, method) {
+ var args = slice.call(arguments, 2);
+ return _.map(obj, function(value) {
+ return (_.isFunction(method) ? method || value : value[method]).apply(value, args);
+ });
+ };
+
+ // Convenience version of a common use case of `map`: fetching a property.
+ _.pluck = function(obj, key) {
+ return _.map(obj, function(value){ return value[key]; });
+ };
+
+ // Return the maximum element or (element-based computation).
+ _.max = function(obj, iterator, context) {
+ if (!iterator && _.isArray(obj) && obj[0] === +obj[0]) return Math.max.apply(Math, obj);
+ if (!iterator && _.isEmpty(obj)) return -Infinity;
+ var result = {computed : -Infinity};
+ each(obj, function(value, index, list) {
+ var computed = iterator ? iterator.call(context, value, index, list) : value;
+ computed >= result.computed && (result = {value : value, computed : computed});
+ });
+ return result.value;
+ };
+
+ // Return the minimum element (or element-based computation).
+ _.min = function(obj, iterator, context) {
+ if (!iterator && _.isArray(obj) && obj[0] === +obj[0]) return Math.min.apply(Math, obj);
+ if (!iterator && _.isEmpty(obj)) return Infinity;
+ var result = {computed : Infinity};
+ each(obj, function(value, index, list) {
+ var computed = iterator ? iterator.call(context, value, index, list) : value;
+ computed < result.computed && (result = {value : value, computed : computed});
+ });
+ return result.value;
+ };
+
+ // Shuffle an array.
+ _.shuffle = function(obj) {
+ var shuffled = [], rand;
+ each(obj, function(value, index, list) {
+ rand = Math.floor(Math.random() * (index + 1));
+ shuffled[index] = shuffled[rand];
+ shuffled[rand] = value;
+ });
+ return shuffled;
+ };
+
+ // Sort the object's values by a criterion produced by an iterator.
+ _.sortBy = function(obj, val, context) {
+ var iterator = _.isFunction(val) ? val : function(obj) { return obj[val]; };
+ return _.pluck(_.map(obj, function(value, index, list) {
+ return {
+ value : value,
+ criteria : iterator.call(context, value, index, list)
+ };
+ }).sort(function(left, right) {
+ var a = left.criteria, b = right.criteria;
+ if (a === void 0) return 1;
+ if (b === void 0) return -1;
+ return a < b ? -1 : a > b ? 1 : 0;
+ }), 'value');
+ };
+
+ // Groups the object's values by a criterion. Pass either a string attribute
+ // to group by, or a function that returns the criterion.
+ _.groupBy = function(obj, val) {
+ var result = {};
+ var iterator = _.isFunction(val) ? val : function(obj) { return obj[val]; };
+ each(obj, function(value, index) {
+ var key = iterator(value, index);
+ (result[key] || (result[key] = [])).push(value);
+ });
+ return result;
+ };
+
+ // Use a comparator function to figure out at what index an object should
+ // be inserted so as to maintain order. Uses binary search.
+ _.sortedIndex = function(array, obj, iterator) {
+ iterator || (iterator = _.identity);
+ var low = 0, high = array.length;
+ while (low < high) {
+ var mid = (low + high) >> 1;
+ iterator(array[mid]) < iterator(obj) ? low = mid + 1 : high = mid;
+ }
+ return low;
+ };
+
+ // Safely convert anything iterable into a real, live array.
+ _.toArray = function(obj) {
+ if (!obj) return [];
+ if (_.isArray(obj)) return slice.call(obj);
+ if (_.isArguments(obj)) return slice.call(obj);
+ if (obj.toArray && _.isFunction(obj.toArray)) return obj.toArray();
+ return _.values(obj);
+ };
+
+ // Return the number of elements in an object.
+ _.size = function(obj) {
+ return _.isArray(obj) ? obj.length : _.keys(obj).length;
+ };
+
+ // Array Functions
+ // ---------------
+
+ // Get the first element of an array. Passing **n** will return the first N
+ // values in the array. Aliased as `head` and `take`. The **guard** check
+ // allows it to work with `_.map`.
+ _.first = _.head = _.take = function(array, n, guard) {
+ return (n != null) && !guard ? slice.call(array, 0, n) : array[0];
+ };
+
+ // Returns everything but the last entry of the array. Especcialy useful on
+ // the arguments object. Passing **n** will return all the values in
+ // the array, excluding the last N. The **guard** check allows it to work with
+ // `_.map`.
+ _.initial = function(array, n, guard) {
+ return slice.call(array, 0, array.length - ((n == null) || guard ? 1 : n));
+ };
+
+ // Get the last element of an array. Passing **n** will return the last N
+ // values in the array. The **guard** check allows it to work with `_.map`.
+ _.last = function(array, n, guard) {
+ if ((n != null) && !guard) {
+ return slice.call(array, Math.max(array.length - n, 0));
+ } else {
+ return array[array.length - 1];
+ }
+ };
+
+ // Returns everything but the first entry of the array. Aliased as `tail`.
+ // Especially useful on the arguments object. Passing an **index** will return
+ // the rest of the values in the array from that index onward. The **guard**
+ // check allows it to work with `_.map`.
+ _.rest = _.tail = function(array, index, guard) {
+ return slice.call(array, (index == null) || guard ? 1 : index);
+ };
+
+ // Trim out all falsy values from an array.
+ _.compact = function(array) {
+ return _.filter(array, function(value){ return !!value; });
+ };
+
+ // Return a completely flattened version of an array.
+ _.flatten = function(array, shallow) {
+ return _.reduce(array, function(memo, value) {
+ if (_.isArray(value)) return memo.concat(shallow ? value : _.flatten(value));
+ memo[memo.length] = value;
+ return memo;
+ }, []);
+ };
+
+ // Return a version of the array that does not contain the specified value(s).
+ _.without = function(array) {
+ return _.difference(array, slice.call(arguments, 1));
+ };
+
+ // Produce a duplicate-free version of the array. If the array has already
+ // been sorted, you have the option of using a faster algorithm.
+ // Aliased as `unique`.
+ _.uniq = _.unique = function(array, isSorted, iterator) {
+ var initial = iterator ? _.map(array, iterator) : array;
+ var results = [];
+ // The `isSorted` flag is irrelevant if the array only contains two elements.
+ if (array.length < 3) isSorted = true;
+ _.reduce(initial, function (memo, value, index) {
+ if (isSorted ? _.last(memo) !== value || !memo.length : !_.include(memo, value)) {
+ memo.push(value);
+ results.push(array[index]);
+ }
+ return memo;
+ }, []);
+ return results;
+ };
+
+ // Produce an array that contains the union: each distinct element from all of
+ // the passed-in arrays.
+ _.union = function() {
+ return _.uniq(_.flatten(arguments, true));
+ };
+
+ // Produce an array that contains every item shared between all the
+ // passed-in arrays. (Aliased as "intersect" for back-compat.)
+ _.intersection = _.intersect = function(array) {
+ var rest = slice.call(arguments, 1);
+ return _.filter(_.uniq(array), function(item) {
+ return _.every(rest, function(other) {
+ return _.indexOf(other, item) >= 0;
+ });
+ });
+ };
+
+ // Take the difference between one array and a number of other arrays.
+ // Only the elements present in just the first array will remain.
+ _.difference = function(array) {
+ var rest = _.flatten(slice.call(arguments, 1), true);
+ return _.filter(array, function(value){ return !_.include(rest, value); });
+ };
+
+ // Zip together multiple lists into a single array -- elements that share
+ // an index go together.
+ _.zip = function() {
+ var args = slice.call(arguments);
+ var length = _.max(_.pluck(args, 'length'));
+ var results = new Array(length);
+ for (var i = 0; i < length; i++) results[i] = _.pluck(args, "" + i);
+ return results;
+ };
+
+ // If the browser doesn't supply us with indexOf (I'm looking at you, **MSIE**),
+ // we need this function. Return the position of the first occurrence of an
+ // item in an array, or -1 if the item is not included in the array.
+ // Delegates to **ECMAScript 5**'s native `indexOf` if available.
+ // If the array is large and already in sort order, pass `true`
+ // for **isSorted** to use binary search.
+ _.indexOf = function(array, item, isSorted) {
+ if (array == null) return -1;
+ var i, l;
+ if (isSorted) {
+ i = _.sortedIndex(array, item);
+ return array[i] === item ? i : -1;
+ }
+ if (nativeIndexOf && array.indexOf === nativeIndexOf) return array.indexOf(item);
+ for (i = 0, l = array.length; i < l; i++) if (i in array && array[i] === item) return i;
+ return -1;
+ };
+
+ // Delegates to **ECMAScript 5**'s native `lastIndexOf` if available.
+ _.lastIndexOf = function(array, item) {
+ if (array == null) return -1;
+ if (nativeLastIndexOf && array.lastIndexOf === nativeLastIndexOf) return array.lastIndexOf(item);
+ var i = array.length;
+ while (i--) if (i in array && array[i] === item) return i;
+ return -1;
+ };
+
+ // Generate an integer Array containing an arithmetic progression. A port of
+ // the native Python `range()` function. See
+ // [the Python documentation](http://docs.python.org/library/functions.html#range).
+ _.range = function(start, stop, step) {
+ if (arguments.length <= 1) {
+ stop = start || 0;
+ start = 0;
+ }
+ step = arguments[2] || 1;
+
+ var len = Math.max(Math.ceil((stop - start) / step), 0);
+ var idx = 0;
+ var range = new Array(len);
+
+ while(idx < len) {
+ range[idx++] = start;
+ start += step;
+ }
+
+ return range;
+ };
+
+ // Function (ahem) Functions
+ // ------------------
+
+ // Reusable constructor function for prototype setting.
+ var ctor = function(){};
+
+ // Create a function bound to a given object (assigning `this`, and arguments,
+ // optionally). Binding with arguments is also known as `curry`.
+ // Delegates to **ECMAScript 5**'s native `Function.bind` if available.
+ // We check for `func.bind` first, to fail fast when `func` is undefined.
+ _.bind = function bind(func, context) {
+ var bound, args;
+ if (func.bind === nativeBind && nativeBind) return nativeBind.apply(func, slice.call(arguments, 1));
+ if (!_.isFunction(func)) throw new TypeError;
+ args = slice.call(arguments, 2);
+ return bound = function() {
+ if (!(this instanceof bound)) return func.apply(context, args.concat(slice.call(arguments)));
+ ctor.prototype = func.prototype;
+ var self = new ctor;
+ var result = func.apply(self, args.concat(slice.call(arguments)));
+ if (Object(result) === result) return result;
+ return self;
+ };
+ };
+
+ // Bind all of an object's methods to that object. Useful for ensuring that
+ // all callbacks defined on an object belong to it.
+ _.bindAll = function(obj) {
+ var funcs = slice.call(arguments, 1);
+ if (funcs.length == 0) funcs = _.functions(obj);
+ each(funcs, function(f) { obj[f] = _.bind(obj[f], obj); });
+ return obj;
+ };
+
+ // Memoize an expensive function by storing its results.
+ _.memoize = function(func, hasher) {
+ var memo = {};
+ hasher || (hasher = _.identity);
+ return function() {
+ var key = hasher.apply(this, arguments);
+ return _.has(memo, key) ? memo[key] : (memo[key] = func.apply(this, arguments));
+ };
+ };
+
+ // Delays a function for the given number of milliseconds, and then calls
+ // it with the arguments supplied.
+ _.delay = function(func, wait) {
+ var args = slice.call(arguments, 2);
+ return setTimeout(function(){ return func.apply(null, args); }, wait);
+ };
+
+ // Defers a function, scheduling it to run after the current call stack has
+ // cleared.
+ _.defer = function(func) {
+ return _.delay.apply(_, [func, 1].concat(slice.call(arguments, 1)));
+ };
+
+ // Returns a function, that, when invoked, will only be triggered at most once
+ // during a given window of time.
+ _.throttle = function(func, wait) {
+ var context, args, timeout, throttling, more, result;
+ var whenDone = _.debounce(function(){ more = throttling = false; }, wait);
+ return function() {
+ context = this; args = arguments;
+ var later = function() {
+ timeout = null;
+ if (more) func.apply(context, args);
+ whenDone();
+ };
+ if (!timeout) timeout = setTimeout(later, wait);
+ if (throttling) {
+ more = true;
+ } else {
+ result = func.apply(context, args);
+ }
+ whenDone();
+ throttling = true;
+ return result;
+ };
+ };
+
+ // Returns a function, that, as long as it continues to be invoked, will not
+ // be triggered. The function will be called after it stops being called for
+ // N milliseconds. If `immediate` is passed, trigger the function on the
+ // leading edge, instead of the trailing.
+ _.debounce = function(func, wait, immediate) {
+ var timeout;
+ return function() {
+ var context = this, args = arguments;
+ var later = function() {
+ timeout = null;
+ if (!immediate) func.apply(context, args);
+ };
+ if (immediate && !timeout) func.apply(context, args);
+ clearTimeout(timeout);
+ timeout = setTimeout(later, wait);
+ };
+ };
+
+ // Returns a function that will be executed at most one time, no matter how
+ // often you call it. Useful for lazy initialization.
+ _.once = function(func) {
+ var ran = false, memo;
+ return function() {
+ if (ran) return memo;
+ ran = true;
+ return memo = func.apply(this, arguments);
+ };
+ };
+
+ // Returns the first function passed as an argument to the second,
+ // allowing you to adjust arguments, run code before and after, and
+ // conditionally execute the original function.
+ _.wrap = function(func, wrapper) {
+ return function() {
+ var args = [func].concat(slice.call(arguments, 0));
+ return wrapper.apply(this, args);
+ };
+ };
+
+ // Returns a function that is the composition of a list of functions, each
+ // consuming the return value of the function that follows.
+ _.compose = function() {
+ var funcs = arguments;
+ return function() {
+ var args = arguments;
+ for (var i = funcs.length - 1; i >= 0; i--) {
+ args = [funcs[i].apply(this, args)];
+ }
+ return args[0];
+ };
+ };
+
+ // Returns a function that will only be executed after being called N times.
+ _.after = function(times, func) {
+ if (times <= 0) return func();
+ return function() {
+ if (--times < 1) { return func.apply(this, arguments); }
+ };
+ };
+
+ // Object Functions
+ // ----------------
+
+ // Retrieve the names of an object's properties.
+ // Delegates to **ECMAScript 5**'s native `Object.keys`
+ _.keys = nativeKeys || function(obj) {
+ if (obj !== Object(obj)) throw new TypeError('Invalid object');
+ var keys = [];
+ for (var key in obj) if (_.has(obj, key)) keys[keys.length] = key;
+ return keys;
+ };
+
+ // Retrieve the values of an object's properties.
+ _.values = function(obj) {
+ return _.map(obj, _.identity);
+ };
+
+ // Return a sorted list of the function names available on the object.
+ // Aliased as `methods`
+ _.functions = _.methods = function(obj) {
+ var names = [];
+ for (var key in obj) {
+ if (_.isFunction(obj[key])) names.push(key);
+ }
+ return names.sort();
+ };
+
+ // Extend a given object with all the properties in passed-in object(s).
+ _.extend = function(obj) {
+ each(slice.call(arguments, 1), function(source) {
+ for (var prop in source) {
+ obj[prop] = source[prop];
+ }
+ });
+ return obj;
+ };
+
+ // Return a copy of the object only containing the whitelisted properties.
+ _.pick = function(obj) {
+ var result = {};
+ each(_.flatten(slice.call(arguments, 1)), function(key) {
+ if (key in obj) result[key] = obj[key];
+ });
+ return result;
+ };
+
+ // Fill in a given object with default properties.
+ _.defaults = function(obj) {
+ each(slice.call(arguments, 1), function(source) {
+ for (var prop in source) {
+ if (obj[prop] == null) obj[prop] = source[prop];
+ }
+ });
+ return obj;
+ };
+
+ // Create a (shallow-cloned) duplicate of an object.
+ _.clone = function(obj) {
+ if (!_.isObject(obj)) return obj;
+ return _.isArray(obj) ? obj.slice() : _.extend({}, obj);
+ };
+
+ // Invokes interceptor with the obj, and then returns obj.
+ // The primary purpose of this method is to "tap into" a method chain, in
+ // order to perform operations on intermediate results within the chain.
+ _.tap = function(obj, interceptor) {
+ interceptor(obj);
+ return obj;
+ };
+
+ // Internal recursive comparison function.
+ function eq(a, b, stack) {
+ // Identical objects are equal. `0 === -0`, but they aren't identical.
+ // See the Harmony `egal` proposal: http://wiki.ecmascript.org/doku.php?id=harmony:egal.
+ if (a === b) return a !== 0 || 1 / a == 1 / b;
+ // A strict comparison is necessary because `null == undefined`.
+ if (a == null || b == null) return a === b;
+ // Unwrap any wrapped objects.
+ if (a._chain) a = a._wrapped;
+ if (b._chain) b = b._wrapped;
+ // Invoke a custom `isEqual` method if one is provided.
+ if (a.isEqual && _.isFunction(a.isEqual)) return a.isEqual(b);
+ if (b.isEqual && _.isFunction(b.isEqual)) return b.isEqual(a);
+ // Compare `[[Class]]` names.
+ var className = toString.call(a);
+ if (className != toString.call(b)) return false;
+ switch (className) {
+ // Strings, numbers, dates, and booleans are compared by value.
+ case '[object String]':
+ // Primitives and their corresponding object wrappers are equivalent; thus, `"5"` is
+ // equivalent to `new String("5")`.
+ return a == String(b);
+ case '[object Number]':
+ // `NaN`s are equivalent, but non-reflexive. An `egal` comparison is performed for
+ // other numeric values.
+ return a != +a ? b != +b : (a == 0 ? 1 / a == 1 / b : a == +b);
+ case '[object Date]':
+ case '[object Boolean]':
+ // Coerce dates and booleans to numeric primitive values. Dates are compared by their
+ // millisecond representations. Note that invalid dates with millisecond representations
+ // of `NaN` are not equivalent.
+ return +a == +b;
+ // RegExps are compared by their source patterns and flags.
+ case '[object RegExp]':
+ return a.source == b.source &&
+ a.global == b.global &&
+ a.multiline == b.multiline &&
+ a.ignoreCase == b.ignoreCase;
+ }
+ if (typeof a != 'object' || typeof b != 'object') return false;
+ // Assume equality for cyclic structures. The algorithm for detecting cyclic
+ // structures is adapted from ES 5.1 section 15.12.3, abstract operation `JO`.
+ var length = stack.length;
+ while (length--) {
+ // Linear search. Performance is inversely proportional to the number of
+ // unique nested structures.
+ if (stack[length] == a) return true;
+ }
+ // Add the first object to the stack of traversed objects.
+ stack.push(a);
+ var size = 0, result = true;
+ // Recursively compare objects and arrays.
+ if (className == '[object Array]') {
+ // Compare array lengths to determine if a deep comparison is necessary.
+ size = a.length;
+ result = size == b.length;
+ if (result) {
+ // Deep compare the contents, ignoring non-numeric properties.
+ while (size--) {
+ // Ensure commutative equality for sparse arrays.
+ if (!(result = size in a == size in b && eq(a[size], b[size], stack))) break;
+ }
+ }
+ } else {
+ // Objects with different constructors are not equivalent.
+ if ('constructor' in a != 'constructor' in b || a.constructor != b.constructor) return false;
+ // Deep compare objects.
+ for (var key in a) {
+ if (_.has(a, key)) {
+ // Count the expected number of properties.
+ size++;
+ // Deep compare each member.
+ if (!(result = _.has(b, key) && eq(a[key], b[key], stack))) break;
+ }
+ }
+ // Ensure that both objects contain the same number of properties.
+ if (result) {
+ for (key in b) {
+ if (_.has(b, key) && !(size--)) break;
+ }
+ result = !size;
+ }
+ }
+ // Remove the first object from the stack of traversed objects.
+ stack.pop();
+ return result;
+ }
+
+ // Perform a deep comparison to check if two objects are equal.
+ _.isEqual = function(a, b) {
+ return eq(a, b, []);
+ };
+
+ // Is a given array, string, or object empty?
+ // An "empty" object has no enumerable own-properties.
+ _.isEmpty = function(obj) {
+ if (obj == null) return true;
+ if (_.isArray(obj) || _.isString(obj)) return obj.length === 0;
+ for (var key in obj) if (_.has(obj, key)) return false;
+ return true;
+ };
+
+ // Is a given value a DOM element?
+ _.isElement = function(obj) {
+ return !!(obj && obj.nodeType == 1);
+ };
+
+ // Is a given value an array?
+ // Delegates to ECMA5's native Array.isArray
+ _.isArray = nativeIsArray || function(obj) {
+ return toString.call(obj) == '[object Array]';
+ };
+
+ // Is a given variable an object?
+ _.isObject = function(obj) {
+ return obj === Object(obj);
+ };
+
+ // Is a given variable an arguments object?
+ _.isArguments = function(obj) {
+ return toString.call(obj) == '[object Arguments]';
+ };
+ if (!_.isArguments(arguments)) {
+ _.isArguments = function(obj) {
+ return !!(obj && _.has(obj, 'callee'));
+ };
+ }
+
+ // Is a given value a function?
+ _.isFunction = function(obj) {
+ return toString.call(obj) == '[object Function]';
+ };
+
+ // Is a given value a string?
+ _.isString = function(obj) {
+ return toString.call(obj) == '[object String]';
+ };
+
+ // Is a given value a number?
+ _.isNumber = function(obj) {
+ return toString.call(obj) == '[object Number]';
+ };
+
+ // Is a given object a finite number?
+ _.isFinite = function(obj) {
+ return _.isNumber(obj) && isFinite(obj);
+ };
+
+ // Is the given value `NaN`?
+ _.isNaN = function(obj) {
+ // `NaN` is the only value for which `===` is not reflexive.
+ return obj !== obj;
+ };
+
+ // Is a given value a boolean?
+ _.isBoolean = function(obj) {
+ return obj === true || obj === false || toString.call(obj) == '[object Boolean]';
+ };
+
+ // Is a given value a date?
+ _.isDate = function(obj) {
+ return toString.call(obj) == '[object Date]';
+ };
+
+ // Is the given value a regular expression?
+ _.isRegExp = function(obj) {
+ return toString.call(obj) == '[object RegExp]';
+ };
+
+ // Is a given value equal to null?
+ _.isNull = function(obj) {
+ return obj === null;
+ };
+
+ // Is a given variable undefined?
+ _.isUndefined = function(obj) {
+ return obj === void 0;
+ };
+
+ // Has own property?
+ _.has = function(obj, key) {
+ return hasOwnProperty.call(obj, key);
+ };
+
+ // Utility Functions
+ // -----------------
+
+ // Run Underscore.js in *noConflict* mode, returning the `_` variable to its
+ // previous owner. Returns a reference to the Underscore object.
+ _.noConflict = function() {
+ root._ = previousUnderscore;
+ return this;
+ };
+
+ // Keep the identity function around for default iterators.
+ _.identity = function(value) {
+ return value;
+ };
+
+ // Run a function **n** times.
+ _.times = function (n, iterator, context) {
+ for (var i = 0; i < n; i++) iterator.call(context, i);
+ };
+
+ // Escape a string for HTML interpolation.
+ _.escape = function(string) {
+ return (''+string).replace(/&/g, '&').replace(/</g, '<').replace(/>/g, '>').replace(/"/g, '"').replace(/'/g, ''').replace(/\//g,'/');
+ };
+
+ // If the value of the named property is a function then invoke it;
+ // otherwise, return it.
+ _.result = function(object, property) {
+ if (object == null) return null;
+ var value = object[property];
+ return _.isFunction(value) ? value.call(object) : value;
+ };
+
+ // Add your own custom functions to the Underscore object, ensuring that
+ // they're correctly added to the OOP wrapper as well.
+ _.mixin = function(obj) {
+ each(_.functions(obj), function(name){
+ addToWrapper(name, _[name] = obj[name]);
+ });
+ };
+
+ // Generate a unique integer id (unique within the entire client session).
+ // Useful for temporary DOM ids.
+ var idCounter = 0;
+ _.uniqueId = function(prefix) {
+ var id = idCounter++;
+ return prefix ? prefix + id : id;
+ };
+
+ // By default, Underscore uses ERB-style template delimiters, change the
+ // following template settings to use alternative delimiters.
+ _.templateSettings = {
+ evaluate : /<%([\s\S]+?)%>/g,
+ interpolate : /<%=([\s\S]+?)%>/g,
+ escape : /<%-([\s\S]+?)%>/g
+ };
+
+ // When customizing `templateSettings`, if you don't want to define an
+ // interpolation, evaluation or escaping regex, we need one that is
+ // guaranteed not to match.
+ var noMatch = /.^/;
+
+ // Certain characters need to be escaped so that they can be put into a
+ // string literal.
+ var escapes = {
+ '\\': '\\',
+ "'": "'",
+ 'r': '\r',
+ 'n': '\n',
+ 't': '\t',
+ 'u2028': '\u2028',
+ 'u2029': '\u2029'
+ };
+
+ for (var p in escapes) escapes[escapes[p]] = p;
+ var escaper = /\\|'|\r|\n|\t|\u2028|\u2029/g;
+ var unescaper = /\\(\\|'|r|n|t|u2028|u2029)/g;
+
+ // Within an interpolation, evaluation, or escaping, remove HTML escaping
+ // that had been previously added.
+ var unescape = function(code) {
+ return code.replace(unescaper, function(match, escape) {
+ return escapes[escape];
+ });
+ };
+
+ // JavaScript micro-templating, similar to John Resig's implementation.
+ // Underscore templating handles arbitrary delimiters, preserves whitespace,
+ // and correctly escapes quotes within interpolated code.
+ _.template = function(text, data, settings) {
+ settings = _.defaults(settings || {}, _.templateSettings);
+
+ // Compile the template source, taking care to escape characters that
+ // cannot be included in a string literal and then unescape them in code
+ // blocks.
+ var source = "__p+='" + text
+ .replace(escaper, function(match) {
+ return '\\' + escapes[match];
+ })
+ .replace(settings.escape || noMatch, function(match, code) {
+ return "'+\n_.escape(" + unescape(code) + ")+\n'";
+ })
+ .replace(settings.interpolate || noMatch, function(match, code) {
+ return "'+\n(" + unescape(code) + ")+\n'";
+ })
+ .replace(settings.evaluate || noMatch, function(match, code) {
+ return "';\n" + unescape(code) + "\n;__p+='";
+ }) + "';\n";
+
+ // If a variable is not specified, place data values in local scope.
+ if (!settings.variable) source = 'with(obj||{}){\n' + source + '}\n';
+
+ source = "var __p='';" +
+ "var print=function(){__p+=Array.prototype.join.call(arguments, '')};\n" +
+ source + "return __p;\n";
+
+ var render = new Function(settings.variable || 'obj', '_', source);
+ if (data) return render(data, _);
+ var template = function(data) {
+ return render.call(this, data, _);
+ };
+
+ // Provide the compiled function source as a convenience for build time
+ // precompilation.
+ template.source = 'function(' + (settings.variable || 'obj') + '){\n' +
+ source + '}';
+
+ return template;
+ };
+
+ // Add a "chain" function, which will delegate to the wrapper.
+ _.chain = function(obj) {
+ return _(obj).chain();
+ };
+
+ // The OOP Wrapper
+ // ---------------
+
+ // If Underscore is called as a function, it returns a wrapped object that
+ // can be used OO-style. This wrapper holds altered versions of all the
+ // underscore functions. Wrapped objects may be chained.
+ var wrapper = function(obj) { this._wrapped = obj; };
+
+ // Expose `wrapper.prototype` as `_.prototype`
+ _.prototype = wrapper.prototype;
+
+ // Helper function to continue chaining intermediate results.
+ var result = function(obj, chain) {
+ return chain ? _(obj).chain() : obj;
+ };
+
+ // A method to easily add functions to the OOP wrapper.
+ var addToWrapper = function(name, func) {
+ wrapper.prototype[name] = function() {
+ var args = slice.call(arguments);
+ unshift.call(args, this._wrapped);
+ return result(func.apply(_, args), this._chain);
+ };
+ };
+
+ // Add all of the Underscore functions to the wrapper object.
+ _.mixin(_);
+
+ // Add all mutator Array functions to the wrapper.
+ each(['pop', 'push', 'reverse', 'shift', 'sort', 'splice', 'unshift'], function(name) {
+ var method = ArrayProto[name];
+ wrapper.prototype[name] = function() {
+ var wrapped = this._wrapped;
+ method.apply(wrapped, arguments);
+ var length = wrapped.length;
+ if ((name == 'shift' || name == 'splice') && length === 0) delete wrapped[0];
+ return result(wrapped, this._chain);
+ };
+ });
+
+ // Add all accessor Array functions to the wrapper.
+ each(['concat', 'join', 'slice'], function(name) {
+ var method = ArrayProto[name];
+ wrapper.prototype[name] = function() {
+ return result(method.apply(this._wrapped, arguments), this._chain);
+ };
+ });
+
+ // Start chaining a wrapped Underscore object.
+ wrapper.prototype.chain = function() {
+ this._chain = true;
+ return this;
+ };
+
+ // Extracts the result from a wrapped and chained object.
+ wrapper.prototype.value = function() {
+ return this._wrapped;
+ };
+
+}).call(this);
-{% extends "im/base_two_cols.html" %}
+{% extends "im/base.html" %}
{% load filters %}
{% block page.nav.items %}
{% for item in menu%}
- <li class="{% if item|lookup:"is_active" %}active{% endif %}">
+ <li {% if item|lookup:"is_active" %}class="active"{% endif %}>
<a href="{{ item|lookup:"url" }}">{{ item|lookup:"name" }}</a>
</li>
{% endfor %}
{% endblock %}
{% block page.body %}
-<div class="maincol {% block innerpage.class %}full{% endblock %}">
+<div class="{% block innerpage.class %}full{% endblock %}">
{% block body %}{% endblock %}
{% if PROFILE_EXTRA_LINKS %}
- <div class="extra-buttons buttons-list fixpos">
+ <div class="buttons-list fixpos">
{% for href, name in PROFILE_EXTRA_LINKS.items %}
<a class="button back right" href="{{ href }}">{{ name }}</a>
{% endfor %}
</div>
{% endif %}
+
</div>
{% endblock %}
+
\ No newline at end of file
<!doctype html>
-<!--[if lt IE 7 ]> <html lang="en" class="no-js ie6"> <![endif]-->
-<!--[if IE 7 ]> <html lang="en" class="no-js ie7"> <![endif]-->
-<!--[if IE 8 ]> <html lang="en" class="no-js ie8"> <![endif]-->
-<!--[if (gte IE 9)|!(IE)]><!--> <html lang="en" class="no-js"> <!--<![endif]-->
<head>
{% block starthead %}{% endblock starthead %}
<meta charset="UTF-8">
{% endblock page.favicons %}
{% block page.css %}
- <link href='https://fonts.googleapis.com/css?family=Antic'
- rel='stylesheet' type='text/css'>
- <link rel="stylesheet" href="{{ IM_STATIC_URL }}css/styles.css"
- type='text/css'>
- <link rel="stylesheet" href="{{ IM_STATIC_URL }}css/custom.css"
- type='text/css'>
+
+ <link href="https://fonts.googleapis.com/css?family=Antic" rel="stylesheet" type="text/css">
+ <link rel="stylesheet" type="text/css" href="{{ IM_STATIC_URL }}css/global.css">
<!--[if lte IE 7]>
- <link rel="stylesheet" type="text/css"
- href="{{ IM_STATIC_URL }}im/css/ie7.css">
+ <link rel="stylesheet" type="text/css" href="{{ IM_STATIC_URL }}im/css/ie7.css">
<![endif]-->
{% endblock page.css %}
{% block headjs %}
- <script src="{{ IM_STATIC_URL }}js/modernizr-2.0.6.js"
- type="text/javascript"></script>
- <script src="{{ IM_STATIC_URL }}js/jquery.js"
- type="text/javascript"></script>
- <script src="{{ IM_STATIC_URL }}js/jquery.infieldlabel.js"
- type="text/javascript"></script>
- <script src="{{ IM_STATIC_URL }}js/forms.js"
- type="text/javascript"></script>
+ <script src="{{ IM_STATIC_URL }}js/jquery-1.7.1.min.js"></script>
+ <script src="{{ IM_STATIC_URL }}js/jquery.dropkick-1.0.0.js"></script>
+ <script src="{{ IM_STATIC_URL }}js/os.js"></script>
+ <script src="{{ IM_STATIC_URL }}js/modernizr-2.0.6.js"></script>
+ <script src="{{ IM_STATIC_URL }}js/jquery.js"></script>
+ <script src="{{ IM_STATIC_URL }}js/jquery.infieldlabel.js"></script>
+ <script src="{{ IM_STATIC_URL }}js/forms.js"></script>
+ <script src="{{ IM_STATIC_URL }}js/common.js"></script>
{% endblock headjs %}
{% block endhead %}{% endblock endhead %}
</head>
<body>
- <div class='container'>
- <div class='header'>
- <div class="mainlogo">
- <h1>accounts</h1>
- </div>
-
+ <div class="container">
+ <div class="wrapper">
+ {% if messages or LOGIN_MESSAGES %}
+ <div class="top-msg active">
+ {% block extra_messages %}{% endblock %}
+ {% for message in messages %}
+ <div{% if message.tags %}
+ class="{{ message.tags }}"{% endif %}>
+ {{ message|safe }}</div>
+ {% endfor %}
+ <a href="#" title="close" class="close">X</a>
+ </div>
+ {% endif %}
+ <h1><img src="../static/im/images/accounts-logo.png" alt="accounts" /></h1>
{% block page.nav %}
<div class="navigation">
- <ul class="mainnav inline">
- {% block page.nav.items %}
- {% endblock %}
- </ul>
- <ul class="mainnav inline subnav">
- {% block page.subnav %}{%endblock %}
- </ul>
+ <ul>
+ {% block page.nav.items %}
+ {% endblock %}
+ </ul>
+ <ul>
+ {% block page.subnav %}{%endblock %}
+ </ul>
</div>
{% endblock %}
- </div>
- {% if messages or LOGIN_MESSAGES %}
- <ul class="messages">
- {% block extra_messages %}{% endblock %}
- {% for message in messages %}
- <li{% if message.tags %}
- class="{{ message.tags }}"{% endif %}>
- {{ message }}</li>
- {% endfor %}
- </ul>
- {% endif %}
- <div class="page">
- {% block page.body %}
- <div class="maincol full">
- {% block body %}
- {% endblock %}
- </div>
- {% endblock %}
+
+
+ <div class="content">
+ {% block page.body %}
+ <div class="full">
+ {% block body %}
+ {% endblock %}
+ </div>
+ {% endblock %}
+ </div>
+ </div>
+ </div>
+ <div class="footer">
+ <div class="wrapper">
+ {% include "im/footer.html" %}
</div>
</div>
- {% include "im/footer.html" %}
+
</body>
</html>
{% extends "im/base.html" %}
{% block page.body %}
-<div class="maincol">
- {% block body %}
- {% endblock %}
-</div>
-<div class="rightcol">
- {% block body.right %}
- {% endblock %}
+<div class="two-cols clearfix">
+ <div class="rt">
+ {% block body.right %}
+ {% endblock %}
+ </div>
+ <div class="lt">
+ {% block body.left %}
+ {% endblock %}
+ </div>
</div>
{% endblock %}
<div class="form-row submit">
<input type="hidden" name="next" value="{{ next }}">
<input type="hidden" name="auth" value="{{ user.auth_token }}">
- <input type="hidden" name="username" value="{{ username }}">
+ <input type="hidden" name="username" value="{{ username }}">
<input type="submit" class="submit altcol" value="SEND" />
</div>
-<div class="footer">
- {% block footer_content %}
- <div class="last row clearme">
- Copyright 2011-2012 <a href="http://www.grnet.gr" alt="GRNET S.A.">GRNET S.A.</a> All rights reserved.
- <div class="termslink" style="float:right"><a href="{% url latest_terms %}">Terms of use</a></div>
- </div>
- {% endblock %}
+{% block footer_content %}
+<div class="clearfix">
+ <p class="termslink" style="float:right"><a href="{% url latest_terms %}">Terms of use</a></p>
+ <p>Copyright 2011-2012 <a href="http://www.grnet.gr" alt="GRNET S.A.">GRNET S.A.</a> All rights reserved.</li></p>
</div>
+{% endblock %}
+
<p class="{% if field.blank %}required{% endif %}">
{{ field.label_tag }}
{{ field|safe }}
- </p>
- </div>
+ {% if field.help_text %}
+ <span class="info">
+ <em>more info</em>
+ <span>{{ field.help_text|safe }}</span>
+ </span>
+ {% endif %}
+ </p>
+</div>
{% endfor %}
{% extends "im/account_base.html" %}
{% block page.body %}
-<div class="maincol {% block innerpage.class %}{% endblock %}">
- <div class="section">
- <h2>You have <em>{{ inviter.invitations }}</em> invitation{{ inviter.invitations|pluralize }} left.</h2>
- {% if sent|length %}
- <table class="zebra-striped id-sorted">
- <thead>
- <tr>
- <th>Email</th>
- <th>Real Name</th>
- <th>Used</th>
- </tr>
- </thead>
- <tbody>
- {% for inv in sent %}
- <tr class="{% if inv.is_consumed %}used{% endif %}">
- <td>{{ inv.email }}</td>
- <td>{{ inv.realname }}</td>
- <td class="consumed">{% if inv.is_consumed %}Yes{% else %}No{% endif %}</td>
- </tr>
- {% endfor %}
- </tbody>
- </table>
- {% else %}
- <p>No invitations sent</p>
- {% endif %}
- </div>
+<div class="two-cols clearfix">
+ <div class="rt">
+ {% if inviter.invitations %}
+ <form action="{% url astakos.im.views.invite %}" method="post"
+ class="innerlabels">{% csrf_token %}
+ <h2>INVITE SOMEONE ELSE</h2>
+ {% with invitation_form as form %}
+ {% include "im/form_render.html" %}
+ {% endwith %}
+
+ <div class="form-row submit">
+ <input type="submit" class="submit altcol" value="SEND" />
+ </div>
+ </form>
+ {% endif %}
+ </div>
+ <div class="lt {% block innerpage.class %}{% endblock %}">
+
+ <h2>You have <em>{{ inviter.invitations }}</em> invitation{{ inviter.invitations|pluralize }} left.</h2>
+ {% if sent|length %}
+ <table class="zebra-striped id-sorted">
+ <thead>
+ <tr>
+ <th>Email</th>
+ <th>Real Name</th>
+ <th>Used</th>
+ </tr>
+ </thead>
+ <tbody>
+ {% for inv in sent %}
+ <tr class="{% if inv.is_consumed %}used{% endif %}">
+ <td>{{ inv.email }}</td>
+ <td>{{ inv.realname }}</td>
+ <td class="consumed">{% if inv.is_consumed %}Yes{% else %}No{% endif %}</td>
+ </tr>
+ {% endfor %}
+ </tbody>
+ </table>
+ {% else %}
+ <p>No invitations sent</p>
+ {% endif %}
+ </div>
</div>
-<div class="rightcol">
- {% if inviter.invitations %}
- <form action="{% url astakos.im.views.invite %}" method="post"
- class="innerlabels">{% csrf_token %}
- <h2>INVITE SOMEONE ELSE</h2>
- {% with invitation_form as form %}
- {% include "im/form_render.html" %}
- {% endwith %}
- <div class="form-row submit">
- <input type="submit" class="submit altcol" value="SEND" />
- </div>
- </form>
- {% endif %}
-</div>
{% endblock %}
{% endblock %}
{% block signup_class %}hidden{% endblock %}
-{% block page.title %}
-Login
-{% endblock %}
+{% block page.title %}{% endblock %}
-{% block body %}
-<div class="section">
- <img class="pic" src="{{ IM_STATIC_URL }}images/pictures/login_pic.png" />
-</div>
-{% comment %}{% include "im/services_description.html" %}{% endcomment %}
-{% endblock body %}
+{% block body.left %}
+ <img class="pic" src="{{ IM_STATIC_URL }}images/porta.png" />
+ {% comment %}{% include "im/services_description.html" %}{% endcomment %}
+{% endblock body.left %}
-{% block body.right %}
-<div class="section">
- {% if "local" in im_modules %}
- <form action="{% url astakos.im.target.local.login %}" method="post"
- class="login innerlabels">{% csrf_token %}
- <h2 class="formheader"><span>LOGIN</span></h2>
- {% with login_form as form %}
- {% include "im/form_render.html" %}
- {% endwith %}
- <input type="hidden" name="next" value="{{ next }}">
- <div class="form-row submit">
- <input type="submit" class="submit altcol" value="SUBMIT" />
- <a class="extra-link" href="{% url django.contrib.auth.views.password_reset %}">Forgot your password?</a>
- </div>
- </form>
- {% endif %}
+{% block body.right %}
+ {% if "local" in im_modules %}
+ <form action="{% url astakos.im.target.local.login %}" method="post"class="login innerlabels">{% csrf_token %}
+ <h2>LOGIN</h2>
+ {% with login_form as form %}
+ {% include "im/form_render.html" %}
+ {% endwith %}
+ <input type="hidden" name="next" value="{{ next }}">
+ <div class="form-row submit">
+ <input type="submit" class="submit altcol" value="SUBMIT" />
+ <a class="extra-link" href="{% url django.contrib.auth.views.password_reset %}">Forgot your password?</a>
+ </div>
+ </form>
+ {% endif %}
- <div class="extralogin">
- {% for o in im_modules %}
- <div>
- {% if o != 'local' %}
- LOGIN using
- <a href="/im/login/{{ o }}{% ifnotequal next "" %}&next={{ next|urlencode }}{% endifnotequal %}{% ifnotequal code ""%}{% if next != "" %}&{% else %}?{% endif %}code={{ code }}{% endifnotequal %}"
- alt="{{ o|title }}">{{ o }}</a>
- {% endif %}
- </div>
- {% endfor %}
+ <div class="extralogin">
+ {% for o in im_modules %}
+ <div>
+ {% if o != 'local' %}
+ LOGIN using
+ <a href="/im/login/{{ o }}{% ifnotequal next "" %}&next={{ next|urlencode }}{% endifnotequal %}{% ifnotequal code ""%}{% if next != "" %}&{% else %}?{% endif %}code={{ code }}{% endifnotequal %}"
+ alt="{{ o|title }}">{{ o }}</a>
+ {% endif %}
</div>
- {% block body.signup %}
- {% for o in im_modules %}
- {% if o != 'local' %}
- <br />
- {% endif %}
{% endfor %}
- <div class="bottom">
- {% block body.login.signup %}
- new to okeanos ? <a href="{% url astakos.im.views.signup %}{% ifnotequal code "" %}?code={{ code|urlencode }}{% endifnotequal %}">CREATE ACCOUNT</a>
- {% endblock %}
- </div>
- </div>
- {% endblock %}
</div>
-{% endblock %}
+ {% block body.signup %}
+ {% for o in im_modules %}
+ {% if o != 'local' %}
+ <br />
+ {% endif %}
+ {% endfor %}
+ <div class="bottom">
+ {% block body.login.signup %}
+ new to okeanos ? <a href="{% url astakos.im.views.signup %}{% ifnotequal code "" %}?code={{ code|urlencode }}{% endifnotequal %}">CREATE ACCOUNT</a>
+ {% endblock %}
+ </div>
+ {% endblock body.signup %}
+
+{% endblock body.right%}
{% block body %}
-<form action={%url astakos.im.views.edit_profile %} method="post"
- class="withlabels">{% csrf_token %}
+<form action={%url astakos.im.views.edit_profile %} method="post" class="withlabels">{% csrf_token %}
{% with profile_form as form %}
{% include "im/form_render.html" %}
Signup
{% endblock %}
-{% block body %}
-<div class="section">
+{% block body.left %}
<img class="pic" src="{{ IM_STATIC_URL }}images/pictures/signup_pic.png" />
-</div>
{% comment %}{% include "im/services_description.html" %}{% endcomment %}
-{% endblock body %}
+{% endblock body.left %}
{% block body.right %}
{% if "local" in im_modules %}
next = request.POST.get('next')
if next:
return redirect(next)
- msg = _('Profile has been updated successfully')
+ msg = _('<p>Profile has been updated successfully</p>')
messages.add_message(request, messages.SUCCESS, msg)
except ValueError, ve:
messages.add_message(request, messages.ERROR, ve)
response['Location'] = LOGOUT_NEXT
response.status_code = 301
return response
- messages.add_message(request, messages.SUCCESS, _('You have successfully logged out.'))
+ messages.add_message(request, messages.SUCCESS, _('<p>You have successfully logged out.</p>'))
context = get_context(request, extra_context)
response.write(render_to_string(template, context_instance=context))
return response