bknr-cvs
Threads by month
- ----- 2025 -----
- April
- March
- February
- January
- ----- 2024 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2023 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2022 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2021 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2020 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2019 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2018 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2017 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2016 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2015 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2014 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2013 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2012 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2011 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2010 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2009 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2008 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2007 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2006 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
November 2008
- 1 participants
- 79 discussions
Revision: 4092
Author: hans
URL: http://bknr.net/trac/changeset/4092
Checkpoint new POI microsite work.
A trunk/projects/bos/payment-website/static/movie-icon.gif
A trunk/projects/bos/payment-website/static/panorama-icon.gif
U trunk/projects/bos/payment-website/static/poi-ms.css
U trunk/projects/bos/payment-website/static/poi-ms.html
U trunk/projects/bos/payment-website/static/poi-ms.js
U trunk/projects/bos/web/poi-handlers.lisp
Added: trunk/projects/bos/payment-website/static/movie-icon.gif
===================================================================
(Binary files differ)
Property changes on: trunk/projects/bos/payment-website/static/movie-icon.gif
___________________________________________________________________
Name: svn:executable
+ *
Name: svn:mime-type
+ application/octet-stream
Added: trunk/projects/bos/payment-website/static/panorama-icon.gif
===================================================================
(Binary files differ)
Property changes on: trunk/projects/bos/payment-website/static/panorama-icon.gif
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Modified: trunk/projects/bos/payment-website/static/poi-ms.css
===================================================================
--- trunk/projects/bos/payment-website/static/poi-ms.css 2008-11-27 14:15:14 UTC (rev 4091)
+++ trunk/projects/bos/payment-website/static/poi-ms.css 2008-11-28 01:07:18 UTC (rev 4092)
@@ -2,13 +2,13 @@
h2 { font-size: 160% }
h3 { font-size: 120% }
-ul.media-list li {
+ul#media-list li {
position: relative;
height: 44px;
margin-left: 42px;
}
-ul.media-list li img {
+ul#media-list li img {
position: absolute;
left: -42px;
top: 2px;
Modified: trunk/projects/bos/payment-website/static/poi-ms.html
===================================================================
--- trunk/projects/bos/payment-website/static/poi-ms.html 2008-11-27 14:15:14 UTC (rev 4091)
+++ trunk/projects/bos/payment-website/static/poi-ms.html 2008-11-28 01:07:18 UTC (rev 4092)
@@ -45,7 +45,7 @@
</div>
</div>
<div class="yui-b">
- <ul class="media-list">
+ <ul id="media-list">
<li>
<img src="/poi-image/sunbear-sanctuary/1" width="40" height="40"/>
20.03.2004<br/>
@@ -80,13 +80,6 @@
</div>
</div>
<div id="ft">
- <p>
- Footer - Lorem ipsum dolor sit amet, consectetuer adipiscing
- elit. Maecenas sit amet metus. Nunc quam elit, posuere nec,
- auctor in, rhoncus quis, dui. Aliquam erat volutpat. Ut
- dignissim, massa sit amet dignissim cursus, quam lacus
- feugiat.
- </p>
</div>
</div>
</body>
Modified: trunk/projects/bos/payment-website/static/poi-ms.js
===================================================================
--- trunk/projects/bos/payment-website/static/poi-ms.js 2008-11-27 14:15:14 UTC (rev 4091)
+++ trunk/projects/bos/payment-website/static/poi-ms.js 2008-11-28 01:07:18 UTC (rev 4092)
@@ -2,7 +2,69 @@
$(document).ready(init);
+var poi_id;
+
+Date.prototype.renderDate = function() {
+ return this.getDate() + '.' + this.getMonth() + '.' + (1900 + this.getYear());
+}
+
+var makeMediumMenuEntry = {
+ image: function (medium) {
+ return LI(null,
+ IMG({ src: '/image/' + medium.id, width: 40, height: 40 }),
+ (new Date(medium.timestamp)).renderDate(),
+ BR(),
+ A({ href: '#' }, medium.title || medium.name));
+ },
+ panorama: function (medium) {
+ return LI(null,
+ IMG({ src: '/static/panorama-icon.gif', width: 40, height: 40 }),
+ (new Date(medium.timestamp)).renderDate(),
+ BR(),
+ A({ href: '#' }, medium.title || medium.name));
+ },
+ movie: function (medium) {
+ return LI(null,
+ IMG({ src: '/static/movie-icon.gif', width: 40, height: 40 }),
+ (new Date(medium.timestamp)).renderDate(),
+ BR(),
+ A({ href: '#' }, medium.title || medium.name));
+ }
+
+};
+
+function loadPoi(poi) {
+ document.title = poi.title;
+ $('#hd h1').html(poi.title);
+ $('#hd h2').html(poi.subtitle);
+ $('#content').empty().html(poi.description);
+ $('#media-list').empty();
+ map(function (medium) {
+ if (makeMediumMenuEntry[medium.mediumType]) {
+ $('#media-list').append(makeMediumMenuEntry[medium.mediumType](medium));
+ }
+ }, poi.media);
+}
+
+function loadData(data) {
+ var pois = data.pois;
+
+ for (var i in pois) {
+ if (pois[i].id == poi_id) {
+ loadPoi(pois[i]);
+ return;
+ }
+ }
+
+ alert('invalid poi id (not found)');
+}
+
function init() {
+ poi_id = document.location.hash.replace(/#/, "");
- alert('hey ho!');
+ if (poi_id.match(/^[0-9]+$/)) {
+ loadJSONDoc('/poi-json').addCallback(loadData);
+ } else {
+ alert('invalid poi id');
+ }
}
\ No newline at end of file
Modified: trunk/projects/bos/web/poi-handlers.lisp
===================================================================
--- trunk/projects/bos/web/poi-handlers.lisp 2008-11-27 14:15:14 UTC (rev 4091)
+++ trunk/projects/bos/web/poi-handlers.lisp 2008-11-28 01:07:18 UTC (rev 4092)
@@ -388,15 +388,20 @@
(or (sponsor-country (contract-sponsor contract)) "de")
(length (contract-m2s contract))))
+(defun poi-handle-if-modified-since (&optional (pois (class-instances 'poi)))
+ (let ((pois-last-change (reduce #'max pois
+ :key (lambda (poi) (store-object-last-change poi 1))
+ :initial-value 0)))
+ (hunchentoot:handle-if-modified-since pois-last-change)
+ (setf (hunchentoot:header-out :last-modified)
+ (hunchentoot:rfc-1123-date pois-last-change))))
+
(defmethod handle ((handler poi-javascript-handler))
+ (poi-handle-if-modified-since)
(let* ((last-paid-contracts (last-paid-contracts))
- (timestamp (max (reduce #'max (class-instances 'poi)
- :key (lambda (poi) (store-object-last-change poi 1)))
- (reduce #'max last-paid-contracts
- :key (lambda (contract) (store-object-last-change contract 0))))))
+ (timestamp (reduce #'max last-paid-contracts
+ :key (lambda (contract) (store-object-last-change contract 0)))))
(hunchentoot:handle-if-modified-since timestamp)
- (setf (hunchentoot:header-out :last-modified)
- (hunchentoot:rfc-1123-date timestamp))
(with-http-response (:content-type "text/html; charset=UTF-8")
(with-http-body ()
(html
@@ -617,13 +622,10 @@
())
(defmethod handle ((handler poi-kml-all-handler))
+
(let* ((relevant-pois (remove-if-not #'(lambda (poi) (and (poi-area poi) (poi-published-earth poi)))
- (class-instances 'poi)))
- (pois-last-change (reduce #'max relevant-pois :key (lambda (poi) (store-object-last-change poi 1))
- :initial-value 0)))
- (hunchentoot:handle-if-modified-since pois-last-change)
- (setf (hunchentoot:header-out :last-modified)
- (hunchentoot:rfc-1123-date pois-last-change))
+ (class-instances 'poi))))
+ (poi-handle-if-modified-since relevant-pois)
(with-query-params ((lang "en"))
(with-xml-response ()
;; (sax:processing-instruction cxml::*sink* "xml-stylesheet" "href=\"/static/tri.xsl\" type=\"text/xsl\"")
@@ -689,6 +691,7 @@
())
(defmethod handle ((handler poi-json-handler))
+ (poi-handle-if-modified-since)
(with-json-response ()
(json:with-object-element ("pois")
(bos.m2:pois-as-json (request-language)))))
\ No newline at end of file
1
0
Revision: 4091
Author: hans
URL: http://bknr.net/trac/changeset/4091
Add poi-json handler
U trunk/projects/bos/m2/packages.lisp
U trunk/projects/bos/payment-website/static/poi-ms.html
A trunk/projects/bos/payment-website/static/poi-ms.js
U trunk/projects/bos/web/poi-handlers.lisp
U trunk/projects/bos/web/webserver.lisp
Modified: trunk/projects/bos/m2/packages.lisp
===================================================================
--- trunk/projects/bos/m2/packages.lisp 2008-11-27 14:13:59 UTC (rev 4090)
+++ trunk/projects/bos/m2/packages.lisp 2008-11-27 14:15:14 UTC (rev 4091)
@@ -239,6 +239,8 @@
#:poi-panoramas
#:poi-movies
#:make-poi-javascript
+ #:poi-as-json
+ #:pois-as-json
;; news
#:news-item
Modified: trunk/projects/bos/payment-website/static/poi-ms.html
===================================================================
--- trunk/projects/bos/payment-website/static/poi-ms.html 2008-11-27 14:13:59 UTC (rev 4090)
+++ trunk/projects/bos/payment-website/static/poi-ms.html 2008-11-27 14:15:14 UTC (rev 4091)
@@ -6,6 +6,7 @@
<link rel="stylesheet" type="text/css" href="poi-ms.css"/>
<script src="MochiKit/MochiKit.js" type="text/javascript"> </script>
<script src="jquery-1.2.6.min.js" type="text/javascript"> </script>
+ <script src="poi-ms.js" type="text/javascript"> </script>
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
</head>
<body>
Added: trunk/projects/bos/payment-website/static/poi-ms.js
===================================================================
--- trunk/projects/bos/payment-website/static/poi-ms.js (rev 0)
+++ trunk/projects/bos/payment-website/static/poi-ms.js 2008-11-27 14:15:14 UTC (rev 4091)
@@ -0,0 +1,8 @@
+$ = jQuery;
+
+$(document).ready(init);
+
+function init() {
+
+ alert('hey ho!');
+}
\ No newline at end of file
Modified: trunk/projects/bos/web/poi-handlers.lisp
===================================================================
--- trunk/projects/bos/web/poi-handlers.lisp 2008-11-27 14:13:59 UTC (rev 4090)
+++ trunk/projects/bos/web/poi-handlers.lisp 2008-11-27 14:15:14 UTC (rev 4091)
@@ -684,3 +684,11 @@
imageproc-arguments))
(error "image index ~a out of bounds for poi ~a" image-index poi)))))
+;;; poi-json-handler
+(defclass poi-json-handler (page-handler)
+ ())
+
+(defmethod handle ((handler poi-json-handler))
+ (with-json-response ()
+ (json:with-object-element ("pois")
+ (bos.m2:pois-as-json (request-language)))))
\ No newline at end of file
Modified: trunk/projects/bos/web/webserver.lisp
===================================================================
--- trunk/projects/bos/web/webserver.lisp 2008-11-27 14:13:59 UTC (rev 4090)
+++ trunk/projects/bos/web/webserver.lisp 2008-11-27 14:15:14 UTC (rev 4091)
@@ -184,6 +184,7 @@
("/map-browser" map-browser-handler)
("/poi-javascript" poi-javascript-handler)
("/m2-javascript" m2-javascript-handler)
+ ("/poi-json" poi-json-handler)
("/sponsor-login" sponsor-login-handler)
("/create-allocation-area" create-allocation-area-handler)
("/allocation-area" allocation-area-handler)
1
0
Revision: 4090
Author: hans
URL: http://bknr.net/trac/changeset/4090
Optimize encoder for a 100x speedup. Don't use PRINC unless you know
that you need it.
U trunk/libraries/yason/encode.lisp
Modified: trunk/libraries/yason/encode.lisp
===================================================================
--- trunk/libraries/yason/encode.lisp 2008-11-27 12:18:22 UTC (rev 4089)
+++ trunk/libraries/yason/encode.lisp 2008-11-27 14:13:59 UTC (rev 4090)
@@ -17,99 +17,100 @@
(:documentation "Encode OBJECT to STREAM in JSON format. May be
specialized by applications to perform specific rendering. STREAM
- defaults to *STANDARD-OUTPUT*.")
+ defaults to *STANDARD-OUTPUT*."))
- (:method ((object string) &optional (stream *standard-output*))
- (with-standard-output-to (stream)
- (princ #\")
- (loop
- for char across object
- do (case char
- ((#\\ #\" #\/)
- (princ #\\) (princ char))
- (#\Backspace
- (princ #\\) (princ #\b))
- (#\Page
- (princ #\\) (princ #\f))
- (#\Newline
- (princ #\\) (princ #\n))
- (#\Return
- (princ #\\) (princ #\r))
- (#\Tab
- (princ #\\) (princ #\t))
- (t
- (princ char))))
- (princ #\"))
- object)
+(defparameter *char-replacements*
+ (alexandria:plist-hash-table
+ '(#\\ "\\\\"
+ #\" "\\\""
+ #\/ "\\/"
+ #\Backspace "\\b"
+ #\Page "\\f"
+ #\Newline "\\n"
+ #\Return "\\r"
+ #\Tab "\\t")))
+
- (:method ((object rational) &optional (stream *standard-output*))
- (encode (float object) stream)
- object)
+(defmethod encode ((string string) &optional (stream *standard-output*))
+ (with-standard-output-to (stream)
+ (write-char #\")
+ (dotimes (i (length string))
+ (let* ((char (aref string i))
+ (replacement (gethash char *char-replacements*)))
+ (if replacement
+ (write-string replacement)
+ (write-char char))))
+ (write-char #\")
+ string))
- (:method ((object integer) &optional (stream *standard-output*))
- (princ object stream))
+(defmethod encode ((object rational) &optional (stream *standard-output*))
+ (encode (float object) stream)
+ object)
- (:method ((object hash-table) &optional (stream *standard-output*))
- (with-standard-output-to (stream)
- (princ #\{)
- (let (printed)
- (maphash (lambda (key value)
- (if printed
- (princ #\,)
- (setf printed t))
- (encode key stream)
- (princ #\:)
- (encode value stream))
- object))
- (princ #\}))
- object)
+(defmethod encode ((object integer) &optional (stream *standard-output*))
+ (princ object stream))
- (:method ((object vector) &optional (stream *standard-output*))
- (with-standard-output-to (stream)
- (princ #\[)
- (let (printed)
- (loop
- for value across object
- do
- (when printed
- (princ #\,))
- (setf printed t)
- (encode value stream)))
- (princ #\]))
- object)
+(defmethod encode ((object hash-table) &optional (stream *standard-output*))
+ (with-standard-output-to (stream)
+ (write-char #\{)
+ (let (printed)
+ (maphash (lambda (key value)
+ (if printed
+ (write-char #\,)
+ (setf printed t))
+ (encode key stream)
+ (write-char #\:)
+ (encode value stream))
+ object))
+ (write-char #\}))
+ object)
- (:method ((object list) &optional (stream *standard-output*))
- (with-standard-output-to (stream)
- (princ #\[)
- (let (printed)
- (dolist (value object)
- (if printed
- (princ #\,)
- (setf printed t))
- (encode value stream)))
- (princ #\]))
- object)
+(defmethod encode ((object vector) &optional (stream *standard-output*))
+ (with-standard-output-to (stream)
+ (write-char #\[)
+ (let (printed)
+ (loop
+ for value across object
+ do
+ (when printed
+ (write-char #\,))
+ (setf printed t)
+ (encode value stream)))
+ (write-char #\]))
+ object)
- (:method ((object (eql 'true)) &optional (stream *standard-output*))
- (princ "true" stream)
- object)
+(defmethod encode ((object list) &optional (stream *standard-output*))
+ (with-standard-output-to (stream)
+ (write-char #\[)
+ (let (printed)
+ (dolist (value object)
+ (if printed
+ (write-char #\,)
+ (setf printed t))
+ (encode value stream)))
+ (write-char #\]))
+ object)
- (:method ((object (eql 'false)) &optional (stream *standard-output*))
- (princ "false" stream)
- object)
+(defmethod encode ((object (eql 'true)) &optional (stream *standard-output*))
+ (write-string "true" stream)
+ object)
- (:method ((object (eql 'null)) &optional (stream *standard-output*))
- (princ "null" stream)
- object)
+(defmethod encode ((object (eql 'false)) &optional (stream *standard-output*))
+ (write-string "false" stream)
+ object)
- (:method ((object (eql t)) &optional (stream *standard-output*))
- (princ "true" stream)
- object)
+(defmethod encode ((object (eql 'null)) &optional (stream *standard-output*))
+ (write-string "null" stream)
+ object)
- (:method ((object (eql nil)) &optional (stream *standard-output*))
- (princ "null" stream)
- object))
+(defmethod encode ((object (eql t)) &optional (stream *standard-output*))
+ (write-string "true" stream)
+ object)
+(defmethod encode ((object (eql nil)) &optional (stream *standard-output*))
+ (write-string "null" stream)
+ object)
+
(defclass json-output-stream ()
((output-stream :reader output-stream
:initarg :output-stream)
@@ -119,7 +120,7 @@
(defun next-aggregate-element ()
(if (car (stack *json-output*))
- (princ (car (stack *json-output*)) (output-stream *json-output*))
+ (write-char (car (stack *json-output*)) (output-stream *json-output*))
(setf (car (stack *json-output*)) #\,)))
(defmacro with-output ((stream) &body body)
@@ -147,12 +148,12 @@
(error 'no-json-output-context))
(when (stack *json-output*)
(next-aggregate-element))
- (princ ,begin-char (output-stream *json-output*))
+ (write-char ,begin-char (output-stream *json-output*))
(push nil (stack *json-output*))
(prog1
(progn ,@body)
(pop (stack *json-output*))
- (princ ,end-char (output-stream *json-output*)))))
+ (write-char ,end-char (output-stream *json-output*)))))
(defmacro with-array (() &body body)
"Open a JSON array, then run BODY. Inside the body,
@@ -188,7 +189,7 @@
type for which an ENCODE method is defined."
(next-aggregate-element)
(encode key (output-stream *json-output*))
- (princ #\: (output-stream *json-output*))
+ (write-char #\: (output-stream *json-output*))
(encode value (output-stream *json-output*))
value)
1
0

27 Nov '08
Revision: 4089
Author: hans
URL: http://bknr.net/trac/changeset/4089
Add jQuery to be used in new poi microsite.
A trunk/projects/bos/payment-website/static/jquery-1.2.6.min.js
U trunk/projects/bos/payment-website/static/poi-ms.html
Added: trunk/projects/bos/payment-website/static/jquery-1.2.6.min.js
===================================================================
--- trunk/projects/bos/payment-website/static/jquery-1.2.6.min.js (rev 0)
+++ trunk/projects/bos/payment-website/static/jquery-1.2.6.min.js 2008-11-27 12:18:22 UTC (rev 4089)
@@ -0,0 +1,32 @@
+/*
+ * jQuery 1.2.6 - New Wave Javascript
+ *
+ * Copyright (c) 2008 John Resig (jquery.com)
+ * Dual licensed under the MIT (MIT-LICENSE.txt)
+ * and GPL (GPL-LICENSE.txt) licenses.
+ *
+ * $Date: 2008-05-24 14:22:17 -0400 (Sat, 24 May 2008) $
+ * $Rev: 5685 $
+ */
+(function(){var _jQuery=window.jQuery,_$=window.$;var jQuery=window.jQuery=window.$=function(selector,context){return new jQuery.fn.init(selector,context);};var quickExpr=/^[^<]*(<(.|\s)+>)[^>]*$|^#(\w+)$/,isSimple=/^.[^:#\[\.]*$/,undefined;jQuery.fn=jQuery.prototype={init:function(selector,context){selector=selector||document;if(selector.nodeType){this[0]=selector;this.length=1;return this;}if(typeof selector=="string"){var match=quickExpr.exec(selector);if(match&&(match[1]||!context)){if(match[1])selector=jQuery.clean([match[1]],context);else{var elem=document.getElementById(match[3]);if(elem){if(elem.id!=match[3])return jQuery().find(selector);return jQuery(elem);}selector=[];}}else
+return jQuery(context).find(selector);}else if(jQuery.isFunction(selector))return jQuery(document)[jQuery.fn.ready?"ready":"load"](selector);return this.setArray(jQuery.makeArray(selector));},jquery:"1.2.6",size:function(){return this.length;},length:0,get:function(num){return num==undefined?jQuery.makeArray(this):this[num];},pushStack:function(elems){var ret=jQuery(elems);ret.prevObject=this;return ret;},setArray:function(elems){this.length=0;Array.prototype.push.apply(this,elems);return this;},each:function(callback,args){return jQuery.each(this,callback,args);},index:function(elem){var ret=-1;return jQuery.inArray(elem&&elem.jquery?elem[0]:elem,this);},attr:function(name,value,type){var options=name;if(name.constructor==String)if(value===undefined)return this[0]&&jQuery[type||"attr"](this[0],name);else{options={};options[name]=value;}return this.each(function(i){for(name in options)jQuery.attr(type?this.style:this,name,jQuery.prop(this,options[name],type,i,name));});},css:function(key,value){if((key=='width'||key=='height')&&parseFloat(value)<0)value=undefined;return this.attr(key,value,"curCSS");},text:function(text){if(typeof text!="object"&&text!=null)return this.empty().append((this[0]&&this[0].ownerDocument||document).createTextNode(text));var ret="";jQuery.each(text||this,function(){jQuery.each(this.childNodes,function(){if(this.nodeType!=8)ret+=this.nodeType!=1?this.nodeValue:jQuery.fn.text([this]);});});return ret;},wrapAll:function(html){if(this[0])jQuery(html,this[0].ownerDocument).clone().insertBefore(this[0]).map(function(){var elem=this;while(elem.firstChild)elem=elem.firstChild;return elem;}).append(this);return this;},wrapInner:function(html){return this.each(function(){jQuery(this).contents().wrapAll(html);});},wrap:function(html){return this.each(function(){jQuery(this).wrapAll(html);});},append:function(){return this.domManip(arguments,true,false,function(elem){if(this.nodeType==1)this.appendChild(elem);});},prepend:function(){return this.domManip(arguments,true,true,function(elem){if(this.nodeType==1)this.insertBefore(elem,this.firstChild);});},before:function(){return this.domManip(arguments,false,false,function(elem){this.parentNode.insertBefore(elem,this);});},after:function(){return this.domManip(arguments,false,true,function(elem){this.parentNode.insertBefore(elem,this.nextSibling);});},end:function(){return this.prevObject||jQuery([]);},find:function(selector){var elems=jQuery.map(this,function(elem){return jQuery.find(selector,elem);});return this.pushStack(/[^+>] [^+>]/.test(selector)||selector.indexOf("..")>-1?jQuery.unique(elems):elems);},clone:function(events){var ret=this.map(function(){if(jQuery.browser.msie&&!jQuery.isXMLDoc(this)){var clone=this.cloneNode(true),container=document.createElement("div");container.appendChild(clone);return jQuery.clean([container.innerHTML])[0];}else
+return this.cloneNode(true);});var clone=ret.find("*").andSelf().each(function(){if(this[expando]!=undefined)this[expando]=null;});if(events===true)this.find("*").andSelf().each(function(i){if(this.nodeType==3)return;var events=jQuery.data(this,"events");for(var type in events)for(var handler in events[type])jQuery.event.add(clone[i],type,events[type][handler],events[type][handler].data);});return ret;},filter:function(selector){return this.pushStack(jQuery.isFunction(selector)&&jQuery.grep(this,function(elem,i){return selector.call(elem,i);})||jQuery.multiFilter(selector,this));},not:function(selector){if(selector.constructor==String)if(isSimple.test(selector))return this.pushStack(jQuery.multiFilter(selector,this,true));else
+selector=jQuery.multiFilter(selector,this);var isArrayLike=selector.length&&selector[selector.length-1]!==undefined&&!selector.nodeType;return this.filter(function(){return isArrayLike?jQuery.inArray(this,selector)<0:this!=selector;});},add:function(selector){return this.pushStack(jQuery.unique(jQuery.merge(this.get(),typeof selector=='string'?jQuery(selector):jQuery.makeArray(selector))));},is:function(selector){return!!selector&&jQuery.multiFilter(selector,this).length>0;},hasClass:function(selector){return this.is("."+selector);},val:function(value){if(value==undefined){if(this.length){var elem=this[0];if(jQuery.nodeName(elem,"select")){var index=elem.selectedIndex,values=[],options=elem.options,one=elem.type=="select-one";if(index<0)return null;for(var i=one?index:0,max=one?index+1:options.length;i<max;i++){var option=options[i];if(option.selected){value=jQuery.browser.msie&&!option.attributes.value.specified?option.text:option.value;if(one)return value;values.push(value);}}return values;}else
+return(this[0].value||"").replace(/\r/g,"");}return undefined;}if(value.constructor==Number)value+='';return this.each(function(){if(this.nodeType!=1)return;if(value.constructor==Array&&/radio|checkbox/.test(this.type))this.checked=(jQuery.inArray(this.value,value)>=0||jQuery.inArray(this.name,value)>=0);else if(jQuery.nodeName(this,"select")){var values=jQuery.makeArray(value);jQuery("option",this).each(function(){this.selected=(jQuery.inArray(this.value,values)>=0||jQuery.inArray(this.text,values)>=0);});if(!values.length)this.selectedIndex=-1;}else
+this.value=value;});},html:function(value){return value==undefined?(this[0]?this[0].innerHTML:null):this.empty().append(value);},replaceWith:function(value){return this.after(value).remove();},eq:function(i){return this.slice(i,i+1);},slice:function(){return this.pushStack(Array.prototype.slice.apply(this,arguments));},map:function(callback){return this.pushStack(jQuery.map(this,function(elem,i){return callback.call(elem,i,elem);}));},andSelf:function(){return this.add(this.prevObject);},data:function(key,value){var parts=key.split(".");parts[1]=parts[1]?"."+parts[1]:"";if(value===undefined){var data=this.triggerHandler("getData"+parts[1]+"!",[parts[0]]);if(data===undefined&&this.length)data=jQuery.data(this[0],key);return data===undefined&&parts[1]?this.data(parts[0]):data;}else
+return this.trigger("setData"+parts[1]+"!",[parts[0],value]).each(function(){jQuery.data(this,key,value);});},removeData:function(key){return this.each(function(){jQuery.removeData(this,key);});},domManip:function(args,table,reverse,callback){var clone=this.length>1,elems;return this.each(function(){if(!elems){elems=jQuery.clean(args,this.ownerDocument);if(reverse)elems.reverse();}var obj=this;if(table&&jQuery.nodeName(this,"table")&&jQuery.nodeName(elems[0],"tr"))obj=this.getElementsByTagName("tbody")[0]||this.appendChild(this.ownerDocument.createElement("tbody"));var scripts=jQuery([]);jQuery.each(elems,function(){var elem=clone?jQuery(this).clone(true)[0]:this;if(jQuery.nodeName(elem,"script"))scripts=scripts.add(elem);else{if(elem.nodeType==1)scripts=scripts.add(jQuery("script",elem).remove());callback.call(obj,elem);}});scripts.each(evalScript);});}};jQuery.fn.init.prototype=jQuery.fn;function evalScript(i,elem){if(elem.src)jQuery.ajax({url:elem.src,async:false,dataType:"script"});else
+jQuery.globalEval(elem.text||elem.textContent||elem.innerHTML||"");if(elem.parentNode)elem.parentNode.removeChild(elem);}function now(){return+new Date;}jQuery.extend=jQuery.fn.extend=function(){var target=arguments[0]||{},i=1,length=arguments.length,deep=false,options;if(target.constructor==Boolean){deep=target;target=arguments[1]||{};i=2;}if(typeof target!="object"&&typeof target!="function")target={};if(length==i){target=this;--i;}for(;i<length;i++)if((options=arguments[i])!=null)for(var name in options){var src=target[name],copy=options[name];if(target===copy)continue;if(deep&©&&typeof copy=="object"&&!copy.nodeType)target[name]=jQuery.extend(deep,src||(copy.length!=null?[]:{}),copy);else if(copy!==undefined)target[name]=copy;}return target;};var expando="jQuery"+now(),uuid=0,windowData={},exclude=/z-?index|font-?weight|opacity|zoom|line-?height/i,defaultView=document.defaultView||{};jQuery.extend({noConflict:function(deep){window.$=_$;if(deep)window.jQuery=_jQuery;return jQuery;},isFunction:function(fn){return!!fn&&typeof fn!="string"&&!fn.nodeName&&fn.constructor!=Array&&/^[\s[]?function/.test(fn+"");},isXMLDoc:function(elem){return elem.documentElement&&!elem.body||elem.tagName&&elem.ownerDocument&&!elem.ownerDocument.body;},globalEval:function(data){data=jQuery.trim(data);if(data){var head=document.getElementsByTagName("head")[0]||document.documentElement,script=document.createElement("script");script.type="text/javascript";if(jQuery.browser.msie)script.text=data;else
+script.appendChild(document.createTextNode(data));head.insertBefore(script,head.firstChild);head.removeChild(script);}},nodeName:function(elem,name){return elem.nodeName&&elem.nodeName.toUpperCase()==name.toUpperCase();},cache:{},data:function(elem,name,data){elem=elem==window?windowData:elem;var id=elem[expando];if(!id)id=elem[expando]=++uuid;if(name&&!jQuery.cache[id])jQuery.cache[id]={};if(data!==undefined)jQuery.cache[id][name]=data;return name?jQuery.cache[id][name]:id;},removeData:function(elem,name){elem=elem==window?windowData:elem;var id=elem[expando];if(name){if(jQuery.cache[id]){delete jQuery.cache[id][name];name="";for(name in jQuery.cache[id])break;if(!name)jQuery.removeData(elem);}}else{try{delete elem[expando];}catch(e){if(elem.removeAttribute)elem.removeAttribute(expando);}delete jQuery.cache[id];}},each:function(object,callback,args){var name,i=0,length=object.length;if(args){if(length==undefined){for(name in object)if(callback.apply(object[name],args)===false)break;}else
+for(;i<length;)if(callback.apply(object[i++],args)===false)break;}else{if(length==undefined){for(name in object)if(callback.call(object[name],name,object[name])===false)break;}else
+for(var value=object[0];i<length&&callback.call(value,i,value)!==false;value=object[++i]){}}return object;},prop:function(elem,value,type,i,name){if(jQuery.isFunction(value))value=value.call(elem,i);return value&&value.constructor==Number&&type=="curCSS"&&!exclude.test(name)?value+"px":value;},className:{add:function(elem,classNames){jQuery.each((classNames||"").split(/\s+/),function(i,className){if(elem.nodeType==1&&!jQuery.className.has(elem.className,className))elem.className+=(elem.className?" ":"")+className;});},remove:function(elem,classNames){if(elem.nodeType==1)elem.className=classNames!=undefined?jQuery.grep(elem.className.split(/\s+/),function(className){return!jQuery.className.has(classNames,className);}).join(" "):"";},has:function(elem,className){return jQuery.inArray(className,(elem.className||elem).toString().split(/\s+/))>-1;}},swap:function(elem,options,callback){var old={};for(var name in options){old[name]=elem.style[name];elem.style[name]=options[name];}callback.call(elem);for(var name in options)elem.style[name]=old[name];},css:function(elem,name,force){if(name=="width"||name=="height"){var val,props={position:"absolute",visibility:"hidden",display:"block"},which=name=="width"?["Left","Right"]:["Top","Bottom"];function getWH(){val=name=="width"?elem.offsetWidth:elem.offsetHeight;var padding=0,border=0;jQuery.each(which,function(){padding+=parseFloat(jQuery.curCSS(elem,"padding"+this,true))||0;border+=parseFloat(jQuery.curCSS(elem,"border"+this+"Width",true))||0;});val-=Math.round(padding+border);}if(jQuery(elem).is(":visible"))getWH();else
+jQuery.swap(elem,props,getWH);return Math.max(0,val);}return jQuery.curCSS(elem,name,force);},curCSS:function(elem,name,force){var ret,style=elem.style;function color(elem){if(!jQuery.browser.safari)return false;var ret=defaultView.getComputedStyle(elem,null);return!ret||ret.getPropertyValue("color")=="";}if(name=="opacity"&&jQuery.browser.msie){ret=jQuery.attr(style,"opacity");return ret==""?"1":ret;}if(jQuery.browser.opera&&name=="display"){var save=style.outline;style.outline="0 solid black";style.outline=save;}if(name.match(/float/i))name=styleFloat;if(!force&&style&&style[name])ret=style[name];else if(defaultView.getComputedStyle){if(name.match(/float/i))name="float";name=name.replace(/([A-Z])/g,"-$1").toLowerCase();var computedStyle=defaultView.getComputedStyle(elem,null);if(computedStyle&&!color(elem))ret=computedStyle.getPropertyValue(name);else{var swap=[],stack=[],a=elem,i=0;for(;a&&color(a);a=a.parentNode)stack.unshift(a);for(;i<stack.length;i++)if(color(stack[i])){swap[i]=stack[i].style.display;stack[i].style.display="block";}ret=name=="display"&&swap[stack.length-1]!=null?"none":(computedStyle&&computedStyle.getPropertyValue(name))||"";for(i=0;i<swap.length;i++)if(swap[i]!=null)stack[i].style.display=swap[i];}if(name=="opacity"&&ret=="")ret="1";}else if(elem.currentStyle){var camelCase=name.replace(/\-(\w)/g,function(all,letter){return letter.toUpperCase();});ret=elem.currentStyle[name]||elem.currentStyle[camelCase];if(!/^\d+(px)?$/i.test(ret)&&/^\d/.test(ret)){var left=style.left,rsLeft=elem.runtimeStyle.left;elem.runtimeStyle.left=elem.currentStyle.left;style.left=ret||0;ret=style.pixelLeft+"px";style.left=left;elem.runtimeStyle.left=rsLeft;}}return ret;},clean:function(elems,context){var ret=[];context=context||document;if(typeof context.createElement=='undefined')context=context.ownerDocument||context[0]&&context[0].ownerDocument||document;jQuery.each(elems,function(i,elem){if(!elem)return;if(elem.constructor==Number)elem+='';if(typeof elem=="string"){elem=elem.replace(/(<(\w+)[^>]*?)\/>/g,function(all,front,tag){return tag.match(/^(abbr|br|col|img|input|link|meta|param|hr|area|embed)$/i)?all:front+"></"+tag+">";});var tags=jQuery.trim(elem).toLowerCase(),div=context.createElement("div");var wrap=!tags.indexOf("<opt")&&[1,"<select multiple='multiple'>","</select>"]||!tags.indexOf("<leg")&&[1,"<fieldset>","</fieldset>"]||tags.match(/^<(thead|tbody|tfoot|colg|cap)/)&&[1,"<table>","</table>"]||!tags.indexOf("<tr")&&[2,"<table><tbody>","</tbody></table>"]||(!tags.indexOf("<td")||!tags.indexOf("<th"))&&[3,"<table><tbody><tr>","</tr></tbody></table>"]||!tags.indexOf("<col")&&[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"]||jQuery.browser.msie&&[1,"div<div>","</div>"]||[0,"",""];div.innerHTML=wrap[1]+elem+wrap[2];while(wrap[0]--)div=div.lastChild;if(jQuery.browser.msie){var tbody=!tags.indexOf("<table")&&tags.indexOf("<tbody")<0?div.firstChild&&div.firstChild.childNodes:wrap[1]=="<table>"&&tags.indexOf("<tbody")<0?div.childNodes:[];for(var j=tbody.length-1;j>=0;--j)if(jQuery.nodeName(tbody[j],"tbody")&&!tbody[j].childNodes.length)tbody[j].parentNode.removeChild(tbody[j]);if(/^\s/.test(elem))div.insertBefore(context.createTextNode(elem.match(/^\s*/)[0]),div.firstChild);}elem=jQuery.makeArray(div.childNodes);}if(elem.length===0&&(!jQuery.nodeName(elem,"form")&&!jQuery.nodeName(elem,"select")))return;if(elem[0]==undefined||jQuery.nodeName(elem,"form")||elem.options)ret.push(elem);else
+ret=jQuery.merge(ret,elem);});return ret;},attr:function(elem,name,value){if(!elem||elem.nodeType==3||elem.nodeType==8)return undefined;var notxml=!jQuery.isXMLDoc(elem),set=value!==undefined,msie=jQuery.browser.msie;name=notxml&&jQuery.props[name]||name;if(elem.tagName){var special=/href|src|style/.test(name);if(name=="selected"&&jQuery.browser.safari)elem.parentNode.selectedIndex;if(name in elem&¬xml&&!special){if(set){if(name=="type"&&jQuery.nodeName(elem,"input")&&elem.parentNode)throw"type property can't be changed";elem[name]=value;}if(jQuery.nodeName(elem,"form")&&elem.getAttributeNode(name))return elem.getAttributeNode(name).nodeValue;return elem[name];}if(msie&¬xml&&name=="style")return jQuery.attr(elem.style,"cssText",value);if(set)elem.setAttribute(name,""+value);var attr=msie&¬xml&&special?elem.getAttribute(name,2):elem.getAttribute(name);return attr===null?undefined:attr;}if(msie&&name=="opacity"){if(set){elem.zoom=1;elem.filter=(elem.filter||"").replace(/alpha\([^)]*\)/,"")+(parseInt(value)+''=="NaN"?"":"alpha(opacity="+value*100+")");}return elem.filter&&elem.filter.indexOf("opacity=")>=0?(parseFloat(elem.filter.match(/opacity=([^)]*)/)[1])/100)+'':"";}name=name.replace(/-([a-z])/ig,function(all,letter){return letter.toUpperCase();});if(set)elem[name]=value;return elem[name];},trim:function(text){return(text||"").replace(/^\s+|\s+$/g,"");},makeArray:function(array){var ret=[];if(array!=null){var i=array.length;if(i==null||array.split||array.setInterval||array.call)ret[0]=array;else
+while(i)ret[--i]=array[i];}return ret;},inArray:function(elem,array){for(var i=0,length=array.length;i<length;i++)if(array[i]===elem)return i;return-1;},merge:function(first,second){var i=0,elem,pos=first.length;if(jQuery.browser.msie){while(elem=second[i++])if(elem.nodeType!=8)first[pos++]=elem;}else
+while(elem=second[i++])first[pos++]=elem;return first;},unique:function(array){var ret=[],done={};try{for(var i=0,length=array.length;i<length;i++){var id=jQuery.data(array[i]);if(!done[id]){done[id]=true;ret.push(array[i]);}}}catch(e){ret=array;}return ret;},grep:function(elems,callback,inv){var ret=[];for(var i=0,length=elems.length;i<length;i++)if(!inv!=!callback(elems[i],i))ret.push(elems[i]);return ret;},map:function(elems,callback){var ret=[];for(var i=0,length=elems.length;i<length;i++){var value=callback(elems[i],i);if(value!=null)ret[ret.length]=value;}return ret.concat.apply([],ret);}});var userAgent=navigator.userAgent.toLowerCase();jQuery.browser={version:(userAgent.match(/.+(?:rv|it|ra|ie)[\/: ]([\d.]+)/)||[])[1],safari:/webkit/.test(userAgent),opera:/opera/.test(userAgent),msie:/msie/.test(userAgent)&&!/opera/.test(userAgent),mozilla:/mozilla/.test(userAgent)&&!/(compatible|webkit)/.test(userAgent)};var styleFloat=jQuery.browser.msie?"styleFloat":"cssFloat";jQuery.extend({boxModel:!jQuery.browser.msie||document.compatMode=="CSS1Compat",props:{"for":"htmlFor","class":"className","float":styleFloat,cssFloat:styleFloat,styleFloat:styleFloat,readonly:"readOnly",maxlength:"maxLength",cellspacing:"cellSpacing"}});jQuery.each({parent:function(elem){return elem.parentNode;},parents:function(elem){return jQuery.dir(elem,"parentNode");},next:function(elem){return jQuery.nth(elem,2,"nextSibling");},prev:function(elem){return jQuery.nth(elem,2,"previousSibling");},nextAll:function(elem){return jQuery.dir(elem,"nextSibling");},prevAll:function(elem){return jQuery.dir(elem,"previousSibling");},siblings:function(elem){return jQuery.sibling(elem.parentNode.firstChild,elem);},children:function(elem){return jQuery.sibling(elem.firstChild);},contents:function(elem){return jQuery.nodeName(elem,"iframe")?elem.contentDocument||elem.contentWindow.document:jQuery.makeArray(elem.childNodes);}},function(name,fn){jQuery.fn[name]=function(selector){var ret=jQuery.map(this,fn);if(selector&&typeof selector=="string")ret=jQuery.multiFilter(selector,ret);return this.pushStack(jQuery.unique(ret));};});jQuery.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(name,original){jQuery.fn[name]=function(){var args=arguments;return this.each(function(){for(var i=0,length=args.length;i<length;i++)jQuery(args[i])[original](this);});};});jQuery.each({removeAttr:function(name){jQuery.attr(this,name,"");if(this.nodeType==1)this.removeAttribute(name);},addClass:function(classNames){jQuery.className.add(this,classNames);},removeClass:function(classNames){jQuery.className.remove(this,classNames);},toggleClass:function(classNames){jQuery.className[jQuery.className.has(this,classNames)?"remove":"add"](this,classNames);},remove:function(selector){if(!selector||jQuery.filter(selector,[this]).r.length){jQuery("*",this).add(this).each(function(){jQuery.event.remove(this);jQuery.removeData(this);});if(this.parentNode)this.parentNode.removeChild(this);}},empty:function(){jQuery(">*",this).remove();while(this.firstChild)this.removeChild(this.firstChild);}},function(name,fn){jQuery.fn[name]=function(){return this.each(fn,arguments);};});jQuery.each(["Height","Width"],function(i,name){var type=name.toLowerCase();jQuery.fn[type]=function(size){return this[0]==window?jQuery.browser.opera&&document.body["client"+name]||jQuery.browser.safari&&window["inner"+name]||document.compatMode=="CSS1Compat"&&document.documentElement["client"+name]||document.body["client"+name]:this[0]==document?Math.max(Math.max(document.body["scroll"+name],document.documentElement["scroll"+name]),Math.max(document.body["offset"+name],document.documentElement["offset"+name])):size==undefined?(this.length?jQuery.css(this[0],type):null):this.css(type,size.constructor==String?size:size+"px");};});function num(elem,prop){return elem[0]&&parseInt(jQuery.curCSS(elem[0],prop,true),10)||0;}var chars=jQuery.browser.safari&&parseInt(jQuery.browser.version)<417?"(?:[\\w*_-]|\\\\.)":"(?:[\\w\u0128-\uFFFF*_-]|\\\\.)",quickChild=new RegExp("^>\\s*("+chars+"+)"),quickID=new RegExp("^("+chars+"+)(#)("+chars+"+)"),quickClass=new RegExp("^([#.]?)("+chars+"*)");jQuery.extend({expr:{"":function(a,i,m){return m[2]=="*"||jQuery.nodeName(a,m[2]);},"#":function(a,i,m){return a.getAttribute("id")==m[2];},":":{lt:function(a,i,m){return i<m[3]-0;},gt:function(a,i,m){return i>m[3]-0;},nth:function(a,i,m){return m[3]-0==i;},eq:function(a,i,m){return m[3]-0==i;},first:function(a,i){return i==0;},last:function(a,i,m,r){return i==r.length-1;},even:function(a,i){return i%2==0;},odd:function(a,i){return i%2;},"first-child":function(a){return a.parentNode.getElementsByTagName("*")[0]==a;},"last-child":function(a){return jQuery.nth(a.parentNode.lastChild,1,"previousSibling")==a;},"only-child":function(a){return!jQuery.nth(a.parentNode.lastChild,2,"previousSibling");},parent:function(a){return a.firstChild;},empty:function(a){return!a.firstChild;},contains:function(a,i,m){return(a.textContent||a.innerText||jQuery(a).text()||"").indexOf(m[3])>=0;},visible:function(a){return"hidden"!=a.type&&jQuery.css(a,"display")!="none"&&jQuery.css(a,"visibility")!="hidden";},hidden:function(a){return"hidden"==a.type||jQuery.css(a,"display")=="none"||jQuery.css(a,"visibility")=="hidden";},enabled:function(a){return!a.disabled;},disabled:function(a){return a.disabled;},checked:function(a){return a.checked;},selected:function(a){return a.selected||jQuery.attr(a,"selected");},text:function(a){return"text"==a.type;},radio:function(a){return"radio"==a.type;},checkbox:function(a){return"checkbox"==a.type;},file:function(a){return"file"==a.type;},password:function(a){return"password"==a.type;},submit:function(a){return"submit"==a.type;},image:function(a){return"image"==a.type;},reset:function(a){return"reset"==a.type;},button:function(a){return"button"==a.type||jQuery.nodeName(a,"button");},input:function(a){return/input|select|textarea|button/i.test(a.nodeName);},has:function(a,i,m){return jQuery.find(m[3],a).length;},header:function(a){return/h\d/i.test(a.nodeName);},animated:function(a){return jQuery.grep(jQuery.timers,function(fn){return a==fn.elem;}).length;}}},parse:[/^(\[) *@?([\w-]+) *([!*$^~=]*) *('?"?)(.*?)\4 *\]/,/^(:)([\w-]+)\("?'?(.*?(\(.*?\))?[^(]*?)"?'?\)/,new RegExp("^([:.#]*)("+chars+"+)")],multiFilter:function(expr,elems,not){var old,cur=[];while(expr&&expr!=old){old=expr;var f=jQuery.filter(expr,elems,not);expr=f.t.replace(/^\s*,\s*/,"");cur=not?elems=f.r:jQuery.merge(cur,f.r);}return cur;},find:function(t,context){if(typeof t!="string")return[t];if(context&&context.nodeType!=1&&context.nodeType!=9)return[];context=context||document;var ret=[context],done=[],last,nodeName;while(t&&last!=t){var r=[];last=t;t=jQuery.trim(t);var foundToken=false,re=quickChild,m=re.exec(t);if(m){nodeName=m[1].toUpperCase();for(var i=0;ret[i];i++)for(var c=ret[i].firstChild;c;c=c.nextSibling)if(c.nodeType==1&&(nodeName=="*"||c.nodeName.toUpperCase()==nodeName))r.push(c);ret=r;t=t.replace(re,"");if(t.indexOf(" ")==0)continue;foundToken=true;}else{re=/^([>+~])\s*(\w*)/i;if((m=re.exec(t))!=null){r=[];var merge={};nodeName=m[2].toUpperCase();m=m[1];for(var j=0,rl=ret.length;j<rl;j++){var n=m=="~"||m=="+"?ret[j].nextSibling:ret[j].firstChild;for(;n;n=n.nextSibling)if(n.nodeType==1){var id=jQuery.data(n);if(m=="~"&&merge[id])break;if(!nodeName||n.nodeName.toUpperCase()==nodeName){if(m=="~")merge[id]=true;r.push(n);}if(m=="+")break;}}ret=r;t=jQuery.trim(t.replace(re,""));foundToken=true;}}if(t&&!foundToken){if(!t.indexOf(",")){if(context==ret[0])ret.shift();done=jQuery.merge(done,ret);r=ret=[context];t=" "+t.substr(1,t.length);}else{var re2=quickID;var m=re2.exec(t);if(m){m=[0,m[2],m[3],m[1]];}else{re2=quickClass;m=re2.exec(t);}m[2]=m[2].replace(/\\/g,"");var elem=ret[ret.length-1];if(m[1]=="#"&&elem&&elem.getElementById&&!jQuery.isXMLDoc(elem)){var oid=elem.getElementById(m[2]);if((jQuery.browser.msie||jQuery.browser.opera)&&oid&&typeof oid.id=="string"&&oid.id!=m[2])oid=jQuery('[@id="'+m[2]+'"]',elem)[0];ret=r=oid&&(!m[3]||jQuery.nodeName(oid,m[3]))?[oid]:[];}else{for(var i=0;ret[i];i++){var tag=m[1]=="#"&&m[3]?m[3]:m[1]!=""||m[0]==""?"*":m[2];if(tag=="*"&&ret[i].nodeName.toLowerCase()=="object")tag="param";r=jQuery.merge(r,ret[i].getElementsByTagName(tag));}if(m[1]==".")r=jQuery.classFilter(r,m[2]);if(m[1]=="#"){var tmp=[];for(var i=0;r[i];i++)if(r[i].getAttribute("id")==m[2]){tmp=[r[i]];break;}r=tmp;}ret=r;}t=t.replace(re2,"");}}if(t){var val=jQuery.filter(t,r);ret=r=val.r;t=jQuery.trim(val.t);}}if(t)ret=[];if(ret&&context==ret[0])ret.shift();done=jQuery.merge(done,ret);return done;},classFilter:function(r,m,not){m=" "+m+" ";var tmp=[];for(var i=0;r[i];i++){var pass=(" "+r[i].className+" ").indexOf(m)>=0;if(!not&&pass||not&&!pass)tmp.push(r[i]);}return tmp;},filter:function(t,r,not){var last;while(t&&t!=last){last=t;var p=jQuery.parse,m;for(var i=0;p[i];i++){m=p[i].exec(t);if(m){t=t.substring(m[0].length);m[2]=m[2].replace(/\\/g,"");break;}}if(!m)break;if(m[1]==":"&&m[2]=="not")r=isSimple.test(m[3])?jQuery.filter(m[3],r,true).r:jQuery(r).not(m[3]);else if(m[1]==".")r=jQuery.classFilter(r,m[2],not);else if(m[1]=="["){var tmp=[],type=m[3];for(var i=0,rl=r.length;i<rl;i++){var a=r[i],z=a[jQuery.props[m[2]]||m[2]];if(z==null||/href|src|selected/.test(m[2]))z=jQuery.attr(a,m[2])||'';if((type==""&&!!z||type=="="&&z==m[5]||type=="!="&&z!=m[5]||type=="^="&&z&&!z.indexOf(m[5])||type=="$="&&z.substr(z.length-m[5].length)==m[5]||(type=="*="||type=="~=")&&z.indexOf(m[5])>=0)^not)tmp.push(a);}r=tmp;}else if(m[1]==":"&&m[2]=="nth-child"){var merge={},tmp=[],test=/(-?)(\d*)n((?:\+|-)?\d*)/.exec(m[3]=="even"&&"2n"||m[3]=="odd"&&"2n+1"||!/\D/.test(m[3])&&"0n+"+m[3]||m[3]),first=(test[1]+(test[2]||1))-0,last=test[3]-0;for(var i=0,rl=r.length;i<rl;i++){var node=r[i],parentNode=node.parentNode,id=jQuery.data(parentNode);if(!merge[id]){var c=1;for(var n=parentNode.firstChild;n;n=n.nextSibling)if(n.nodeType==1)n.nodeIndex=c++;merge[id]=true;}var add=false;if(first==0){if(node.nodeIndex==last)add=true;}else if((node.nodeIndex-last)%first==0&&(node.nodeIndex-last)/first>=0)add=true;if(add^not)tmp.push(node);}r=tmp;}else{var fn=jQuery.expr[m[1]];if(typeof fn=="object")fn=fn[m[2]];if(typeof fn=="string")fn=eval("false||function(a,i){return "+fn+";}");r=jQuery.grep(r,function(elem,i){return fn(elem,i,m,r);},not);}}return{r:r,t:t};},dir:function(elem,dir){var matched=[],cur=elem[dir];while(cur&&cur!=document){if(cur.nodeType==1)matched.push(cur);cur=cur[dir];}return matched;},nth:function(cur,result,dir,elem){result=result||1;var num=0;for(;cur;cur=cur[dir])if(cur.nodeType==1&&++num==result)break;return cur;},sibling:function(n,elem){var r=[];for(;n;n=n.nextSibling){if(n.nodeType==1&&n!=elem)r.push(n);}return r;}});jQuery.event={add:function(elem,types,handler,data){if(elem.nodeType==3||elem.nodeType==8)return;if(jQuery.browser.msie&&elem.setInterval)elem=window;if(!handler.guid)handler.guid=this.guid++;if(data!=undefined){var fn=handler;handler=this.proxy(fn,function(){return fn.apply(this,arguments);});handler.data=data;}var events=jQuery.data(elem,"events")||jQuery.data(elem,"events",{}),handle=jQuery.data(elem,"handle")||jQuery.data(elem,"handle",function(){if(typeof jQuery!="undefined"&&!jQuery.event.triggered)return jQuery.event.handle.apply(arguments.callee.elem,arguments);});handle.elem=elem;jQuery.each(types.split(/\s+/),function(index,type){var parts=type.split(".");type=parts[0];handler.type=parts[1];var handlers=events[type];if(!handlers){handlers=events[type]={};if(!jQuery.event.special[type]||jQuery.event.special[type].setup.call(elem)===false){if(elem.addEventListener)elem.addEventListener(type,handle,false);else if(elem.attachEvent)elem.attachEvent("on"+type,handle);}}handlers[handler.guid]=handler;jQuery.event.global[type]=true;});elem=null;},guid:1,global:{},remove:function(elem,types,handler){if(elem.nodeType==3||elem.nodeType==8)return;var events=jQuery.data(elem,"events"),ret,index;if(events){if(types==undefined||(typeof types=="string"&&types.charAt(0)=="."))for(var type in events)this.remove(elem,type+(types||""));else{if(types.type){handler=types.handler;types=types.type;}jQuery.each(types.split(/\s+/),function(index,type){var parts=type.split(".");type=parts[0];if(events[type]){if(handler)delete events[type][handler.guid];else
+for(handler in events[type])if(!parts[1]||events[type][handler].type==parts[1])delete events[type][handler];for(ret in events[type])break;if(!ret){if(!jQuery.event.special[type]||jQuery.event.special[type].teardown.call(elem)===false){if(elem.removeEventListener)elem.removeEventListener(type,jQuery.data(elem,"handle"),false);else if(elem.detachEvent)elem.detachEvent("on"+type,jQuery.data(elem,"handle"));}ret=null;delete events[type];}}});}for(ret in events)break;if(!ret){var handle=jQuery.data(elem,"handle");if(handle)handle.elem=null;jQuery.removeData(elem,"events");jQuery.removeData(elem,"handle");}}},trigger:function(type,data,elem,donative,extra){data=jQuery.makeArray(data);if(type.indexOf("!")>=0){type=type.slice(0,-1);var exclusive=true;}if(!elem){if(this.global[type])jQuery("*").add([window,document]).trigger(type,data);}else{if(elem.nodeType==3||elem.nodeType==8)return undefined;var val,ret,fn=jQuery.isFunction(elem[type]||null),event=!data[0]||!data[0].preventDefault;if(event){data.unshift({type:type,target:elem,preventDefault:function(){},stopPropagation:function(){},timeStamp:now()});data[0][expando]=true;}data[0].type=type;if(exclusive)data[0].exclusive=true;var handle=jQuery.data(elem,"handle");if(handle)val=handle.apply(elem,data);if((!fn||(jQuery.nodeName(elem,'a')&&type=="click"))&&elem["on"+type]&&elem["on"+type].apply(elem,data)===false)val=false;if(event)data.shift();if(extra&&jQuery.isFunction(extra)){ret=extra.apply(elem,val==null?data:data.concat(val));if(ret!==undefined)val=ret;}if(fn&&donative!==false&&val!==false&&!(jQuery.nodeName(elem,'a')&&type=="click")){this.triggered=true;try{elem[type]();}catch(e){}}this.triggered=false;}return val;},handle:function(event){var val,ret,namespace,all,handlers;event=arguments[0]=jQuery.event.fix(event||window.event);namespace=event.type.split(".");event.type=namespace[0];namespace=namespace[1];all=!namespace&&!event.exclusive;handlers=(jQuery.data(this,"events")||{})[event.type];for(var j in handlers){var handler=handlers[j];if(all||handler.type==namespace){event.handler=handler;event.data=handler.data;ret=handler.apply(this,arguments);if(val!==false)val=ret;if(ret===false){event.preventDefault();event.stopPropagation();}}}return val;},fix:function(event){if(event[expando]==true)return event;var originalEvent=event;event={originalEvent:originalEvent};var props="altKey attrChange attrName bubbles button cancelable charCode clientX clientY ctrlKey currentTarget data detail eventPhase fromElement handler keyCode metaKey newValue originalTarget pageX pageY prevValue relatedNode relatedTarget screenX screenY shiftKey srcElement target timeStamp toElement type view wheelDelta which".split(" ");for(var i=props.length;i;i--)event[props[i]]=originalEvent[props[i]];event[expando]=true;event.preventDefault=function(){if(originalEvent.preventDefault)originalEvent.preventDefault();originalEvent.returnValue=false;};event.stopPropagation=function(){if(originalEvent.stopPropagation)originalEvent.stopPropagation();originalEvent.cancelBubble=true;};event.timeStamp=event.timeStamp||now();if(!event.target)event.target=event.srcElement||document;if(event.target.nodeType==3)event.target=event.target.parentNode;if(!event.relatedTarget&&event.fromElement)event.relatedTarget=event.fromElement==event.target?event.toElement:event.fromElement;if(event.pageX==null&&event.clientX!=null){var doc=document.documentElement,body=document.body;event.pageX=event.clientX+(doc&&doc.scrollLeft||body&&body.scrollLeft||0)-(doc.clientLeft||0);event.pageY=event.clientY+(doc&&doc.scrollTop||body&&body.scrollTop||0)-(doc.clientTop||0);}if(!event.which&&((event.charCode||event.charCode===0)?event.charCode:event.keyCode))event.which=event.charCode||event.keyCode;if(!event.metaKey&&event.ctrlKey)event.metaKey=event.ctrlKey;if(!event.which&&event.button)event.which=(event.button&1?1:(event.button&2?3:(event.button&4?2:0)));return event;},proxy:function(fn,proxy){proxy.guid=fn.guid=fn.guid||proxy.guid||this.guid++;return proxy;},special:{ready:{setup:function(){bindReady();return;},teardown:function(){return;}},mouseenter:{setup:function(){if(jQuery.browser.msie)return false;jQuery(this).bind("mouseover",jQuery.event.special.mouseenter.handler);return true;},teardown:function(){if(jQuery.browser.msie)return false;jQuery(this).unbind("mouseover",jQuery.event.special.mouseenter.handler);return true;},handler:function(event){if(withinElement(event,this))return true;event.type="mouseenter";return jQuery.event.handle.apply(this,arguments);}},mouseleave:{setup:function(){if(jQuery.browser.msie)return false;jQuery(this).bind("mouseout",jQuery.event.special.mouseleave.handler);return true;},teardown:function(){if(jQuery.browser.msie)return false;jQuery(this).unbind("mouseout",jQuery.event.special.mouseleave.handler);return true;},handler:function(event){if(withinElement(event,this))return true;event.type="mouseleave";return jQuery.event.handle.apply(this,arguments);}}}};jQuery.fn.extend({bind:function(type,data,fn){return type=="unload"?this.one(type,data,fn):this.each(function(){jQuery.event.add(this,type,fn||data,fn&&data);});},one:function(type,data,fn){var one=jQuery.event.proxy(fn||data,function(event){jQuery(this).unbind(event,one);return(fn||data).apply(this,arguments);});return this.each(function(){jQuery.event.add(this,type,one,fn&&data);});},unbind:function(type,fn){return this.each(function(){jQuery.event.remove(this,type,fn);});},trigger:function(type,data,fn){return this.each(function(){jQuery.event.trigger(type,data,this,true,fn);});},triggerHandler:function(type,data,fn){return this[0]&&jQuery.event.trigger(type,data,this[0],false,fn);},toggle:function(fn){var args=arguments,i=1;while(i<args.length)jQuery.event.proxy(fn,args[i++]);return this.click(jQuery.event.proxy(fn,function(event){this.lastToggle=(this.lastToggle||0)%i;event.preventDefault();return args[this.lastToggle++].apply(this,arguments)||false;}));},hover:function(fnOver,fnOut){return this.bind('mouseenter',fnOver).bind('mouseleave',fnOut);},ready:function(fn){bindReady();if(jQuery.isReady)fn.call(document,jQuery);else
+jQuery.readyList.push(function(){return fn.call(this,jQuery);});return this;}});jQuery.extend({isReady:false,readyList:[],ready:function(){if(!jQuery.isReady){jQuery.isReady=true;if(jQuery.readyList){jQuery.each(jQuery.readyList,function(){this.call(document);});jQuery.readyList=null;}jQuery(document).triggerHandler("ready");}}});var readyBound=false;function bindReady(){if(readyBound)return;readyBound=true;if(document.addEventListener&&!jQuery.browser.opera)document.addEventListener("DOMContentLoaded",jQuery.ready,false);if(jQuery.browser.msie&&window==top)(function(){if(jQuery.isReady)return;try{document.documentElement.doScroll("left");}catch(error){setTimeout(arguments.callee,0);return;}jQuery.ready();})();if(jQuery.browser.opera)document.addEventListener("DOMContentLoaded",function(){if(jQuery.isReady)return;for(var i=0;i<document.styleSheets.length;i++)if(document.styleSheets[i].disabled){setTimeout(arguments.callee,0);return;}jQuery.ready();},false);if(jQuery.browser.safari){var numStyles;(function(){if(jQuery.isReady)return;if(document.readyState!="loaded"&&document.readyState!="complete"){setTimeout(arguments.callee,0);return;}if(numStyles===undefined)numStyles=jQuery("style, link[rel=stylesheet]").length;if(document.styleSheets.length!=numStyles){setTimeout(arguments.callee,0);return;}jQuery.ready();})();}jQuery.event.add(window,"load",jQuery.ready);}jQuery.each(("blur,focus,load,resize,scroll,unload,click,dblclick,"+"mousedown,mouseup,mousemove,mouseover,mouseout,change,select,"+"submit,keydown,keypress,keyup,error").split(","),function(i,name){jQuery.fn[name]=function(fn){return fn?this.bind(name,fn):this.trigger(name);};});var withinElement=function(event,elem){var parent=event.relatedTarget;while(parent&&parent!=elem)try{parent=parent.parentNode;}catch(error){parent=elem;}return parent==elem;};jQuery(window).bind("unload",function(){jQuery("*").add(document).unbind();});jQuery.fn.extend({_load:jQuery.fn.load,load:function(url,params,callback){if(typeof url!='string')return this._load(url);var off=url.indexOf(" ");if(off>=0){var selector=url.slice(off,url.length);url=url.slice(0,off);}callback=callback||function(){};var type="GET";if(params)if(jQuery.isFunction(params)){callback=params;params=null;}else{params=jQuery.param(params);type="POST";}var self=this;jQuery.ajax({url:url,type:type,dataType:"html",data:params,complete:function(res,status){if(status=="success"||status=="notmodified")self.html(selector?jQuery("<div/>").append(res.responseText.replace(/<script(.|\s)*?\/script>/g,"")).find(selector):res.responseText);self.each(callback,[res.responseText,status,res]);}});return this;},serialize:function(){return jQuery.param(this.serializeArray());},serializeArray:function(){return this.map(function(){return jQuery.nodeName(this,"form")?jQuery.makeArray(this.elements):this;}).filter(function(){return this.name&&!this.disabled&&(this.checked||/select|textarea/i.test(this.nodeName)||/text|hidden|password/i.test(this.type));}).map(function(i,elem){var val=jQuery(this).val();return val==null?null:val.constructor==Array?jQuery.map(val,function(val,i){return{name:elem.name,value:val};}):{name:elem.name,value:val};}).get();}});jQuery.each("ajaxStart,ajaxStop,ajaxComplete,ajaxError,ajaxSuccess,ajaxSend".split(","),function(i,o){jQuery.fn[o]=function(f){return this.bind(o,f);};});var jsc=now();jQuery.extend({get:function(url,data,callback,type){if(jQuery.isFunction(data)){callback=data;data=null;}return jQuery.ajax({type:"GET",url:url,data:data,success:callback,dataType:type});},getScript:function(url,callback){return jQuery.get(url,null,callback,"script");},getJSON:function(url,data,callback){return jQuery.get(url,data,callback,"json");},post:function(url,data,callback,type){if(jQuery.isFunction(data)){callback=data;data={};}return jQuery.ajax({type:"POST",url:url,data:data,success:callback,dataType:type});},ajaxSetup:function(settings){jQuery.extend(jQuery.ajaxSettings,settings);},ajaxSettings:{url:location.href,global:true,type:"GET",timeout:0,contentType:"application/x-www-form-urlencoded",processData:true,async:true,data:null,username:null,password:null,accepts:{xml:"application/xml, text/xml",html:"text/html",script:"text/javascript, application/javascript",json:"application/json, text/javascript",text:"text/plain",_default:"*/*"}},lastModified:{},ajax:function(s){s=jQuery.extend(true,s,jQuery.extend(true,{},jQuery.ajaxSettings,s));var jsonp,jsre=/=\?(&|$)/g,status,data,type=s.type.toUpperCase();if(s.data&&s.processData&&typeof s.data!="string")s.data=jQuery.param(s.data);if(s.dataType=="jsonp"){if(type=="GET"){if(!s.url.match(jsre))s.url+=(s.url.match(/\?/)?"&":"?")+(s.jsonp||"callback")+"=?";}else if(!s.data||!s.data.match(jsre))s.data=(s.data?s.data+"&":"")+(s.jsonp||"callback")+"=?";s.dataType="json";}if(s.dataType=="json"&&(s.data&&s.data.match(jsre)||s.url.match(jsre))){jsonp="jsonp"+jsc++;if(s.data)s.data=(s.data+"").replace(jsre,"="+jsonp+"$1");s.url=s.url.replace(jsre,"="+jsonp+"$1");s.dataType="script";window[jsonp]=function(tmp){data=tmp;success();complete();window[jsonp]=undefined;try{delete window[jsonp];}catch(e){}if(head)head.removeChild(script);};}if(s.dataType=="script"&&s.cache==null)s.cache=false;if(s.cache===false&&type=="GET"){var ts=now();var ret=s.url.replace(/(\?|&)_=.*?(&|$)/,"$1_="+ts+"$2");s.url=ret+((ret==s.url)?(s.url.match(/\?/)?"&":"?")+"_="+ts:"");}if(s.data&&type=="GET"){s.url+=(s.url.match(/\?/)?"&":"?")+s.data;s.data=null;}if(s.global&&!jQuery.active++)jQuery.event.trigger("ajaxStart");var remote=/^(?:\w+:)?\/\/([^\/?#]+)/;if(s.dataType=="script"&&type=="GET"&&remote.test(s.url)&&remote.exec(s.url)[1]!=location.host){var head=document.getElementsByTagName("head")[0];var script=document.createElement("script");script.src=s.url;if(s.scriptCharset)script.charset=s.scriptCharset;if(!jsonp){var done=false;script.onload=script.onreadystatechange=function(){if(!done&&(!this.readyState||this.readyState=="loaded"||this.readyState=="complete")){done=true;success();complete();head.removeChild(script);}};}head.appendChild(script);return undefined;}var requestDone=false;var xhr=window.ActiveXObject?new ActiveXObject("Microsoft.XMLHTTP"):new XMLHttpRequest();if(s.username)xhr.open(type,s.url,s.async,s.username,s.password);else
+xhr.open(type,s.url,s.async);try{if(s.data)xhr.setRequestHeader("Content-Type",s.contentType);if(s.ifModified)xhr.setRequestHeader("If-Modified-Since",jQuery.lastModified[s.url]||"Thu, 01 Jan 1970 00:00:00 GMT");xhr.setRequestHeader("X-Requested-With","XMLHttpRequest");xhr.setRequestHeader("Accept",s.dataType&&s.accepts[s.dataType]?s.accepts[s.dataType]+", */*":s.accepts._default);}catch(e){}if(s.beforeSend&&s.beforeSend(xhr,s)===false){s.global&&jQuery.active--;xhr.abort();return false;}if(s.global)jQuery.event.trigger("ajaxSend",[xhr,s]);var onreadystatechange=function(isTimeout){if(!requestDone&&xhr&&(xhr.readyState==4||isTimeout=="timeout")){requestDone=true;if(ival){clearInterval(ival);ival=null;}status=isTimeout=="timeout"&&"timeout"||!jQuery.httpSuccess(xhr)&&"error"||s.ifModified&&jQuery.httpNotModified(xhr,s.url)&&"notmodified"||"success";if(status=="success"){try{data=jQuery.httpData(xhr,s.dataType,s.dataFilter);}catch(e){status="parsererror";}}if(status=="success"){var modRes;try{modRes=xhr.getResponseHeader("Last-Modified");}catch(e){}if(s.ifModified&&modRes)jQuery.lastModified[s.url]=modRes;if(!jsonp)success();}else
+jQuery.handleError(s,xhr,status);complete();if(s.async)xhr=null;}};if(s.async){var ival=setInterval(onreadystatechange,13);if(s.timeout>0)setTimeout(function(){if(xhr){xhr.abort();if(!requestDone)onreadystatechange("timeout");}},s.timeout);}try{xhr.send(s.data);}catch(e){jQuery.handleError(s,xhr,null,e);}if(!s.async)onreadystatechange();function success(){if(s.success)s.success(data,status);if(s.global)jQuery.event.trigger("ajaxSuccess",[xhr,s]);}function complete(){if(s.complete)s.complete(xhr,status);if(s.global)jQuery.event.trigger("ajaxComplete",[xhr,s]);if(s.global&&!--jQuery.active)jQuery.event.trigger("ajaxStop");}return xhr;},handleError:function(s,xhr,status,e){if(s.error)s.error(xhr,status,e);if(s.global)jQuery.event.trigger("ajaxError",[xhr,s,e]);},active:0,httpSuccess:function(xhr){try{return!xhr.status&&location.protocol=="file:"||(xhr.status>=200&&xhr.status<300)||xhr.status==304||xhr.status==1223||jQuery.browser.safari&&xhr.status==undefined;}catch(e){}return false;},httpNotModified:function(xhr,url){try{var xhrRes=xhr.getResponseHeader("Last-Modified");return xhr.status==304||xhrRes==jQuery.lastModified[url]||jQuery.browser.safari&&xhr.status==undefined;}catch(e){}return false;},httpData:function(xhr,type,filter){var ct=xhr.getResponseHeader("content-type"),xml=type=="xml"||!type&&ct&&ct.indexOf("xml")>=0,data=xml?xhr.responseXML:xhr.responseText;if(xml&&data.documentElement.tagName=="parsererror")throw"parsererror";if(filter)data=filter(data,type);if(type=="script")jQuery.globalEval(data);if(type=="json")data=eval("("+data+")");return data;},param:function(a){var s=[];if(a.constructor==Array||a.jquery)jQuery.each(a,function(){s.push(encodeURIComponent(this.name)+"="+encodeURIComponent(this.value));});else
+for(var j in a)if(a[j]&&a[j].constructor==Array)jQuery.each(a[j],function(){s.push(encodeURIComponent(j)+"="+encodeURIComponent(this));});else
+s.push(encodeURIComponent(j)+"="+encodeURIComponent(jQuery.isFunction(a[j])?a[j]():a[j]));return s.join("&").replace(/%20/g,"+");}});jQuery.fn.extend({show:function(speed,callback){return speed?this.animate({height:"show",width:"show",opacity:"show"},speed,callback):this.filter(":hidden").each(function(){this.style.display=this.oldblock||"";if(jQuery.css(this,"display")=="none"){var elem=jQuery("<"+this.tagName+" />").appendTo("body");this.style.display=elem.css("display");if(this.style.display=="none")this.style.display="block";elem.remove();}}).end();},hide:function(speed,callback){return speed?this.animate({height:"hide",width:"hide",opacity:"hide"},speed,callback):this.filter(":visible").each(function(){this.oldblock=this.oldblock||jQuery.css(this,"display");this.style.display="none";}).end();},_toggle:jQuery.fn.toggle,toggle:function(fn,fn2){return jQuery.isFunction(fn)&&jQuery.isFunction(fn2)?this._toggle.apply(this,arguments):fn?this.animate({height:"toggle",width:"toggle",opacity:"toggle"},fn,fn2):this.each(function(){jQuery(this)[jQuery(this).is(":hidden")?"show":"hide"]();});},slideDown:function(speed,callback){return this.animate({height:"show"},speed,callback);},slideUp:function(speed,callback){return this.animate({height:"hide"},speed,callback);},slideToggle:function(speed,callback){return this.animate({height:"toggle"},speed,callback);},fadeIn:function(speed,callback){return this.animate({opacity:"show"},speed,callback);},fadeOut:function(speed,callback){return this.animate({opacity:"hide"},speed,callback);},fadeTo:function(speed,to,callback){return this.animate({opacity:to},speed,callback);},animate:function(prop,speed,easing,callback){var optall=jQuery.speed(speed,easing,callback);return this[optall.queue===false?"each":"queue"](function(){if(this.nodeType!=1)return false;var opt=jQuery.extend({},optall),p,hidden=jQuery(this).is(":hidden"),self=this;for(p in prop){if(prop[p]=="hide"&&hidden||prop[p]=="show"&&!hidden)return opt.complete.call(this);if(p=="height"||p=="width"){opt.display=jQuery.css(this,"display");opt.overflow=this.style.overflow;}}if(opt.overflow!=null)this.style.overflow="hidden";opt.curAnim=jQuery.extend({},prop);jQuery.each(prop,function(name,val){var e=new jQuery.fx(self,opt,name);if(/toggle|show|hide/.test(val))e[val=="toggle"?hidden?"show":"hide":val](prop);else{var parts=val.toString().match(/^([+-]=)?([\d+-.]+)(.*)$/),start=e.cur(true)||0;if(parts){var end=parseFloat(parts[2]),unit=parts[3]||"px";if(unit!="px"){self.style[name]=(end||1)+unit;start=((end||1)/e.cur(true))*start;self.style[name]=start+unit;}if(parts[1])end=((parts[1]=="-="?-1:1)*end)+start;e.custom(start,end,unit);}else
+e.custom(start,val,"");}});return true;});},queue:function(type,fn){if(jQuery.isFunction(type)||(type&&type.constructor==Array)){fn=type;type="fx";}if(!type||(typeof type=="string"&&!fn))return queue(this[0],type);return this.each(function(){if(fn.constructor==Array)queue(this,type,fn);else{queue(this,type).push(fn);if(queue(this,type).length==1)fn.call(this);}});},stop:function(clearQueue,gotoEnd){var timers=jQuery.timers;if(clearQueue)this.queue([]);this.each(function(){for(var i=timers.length-1;i>=0;i--)if(timers[i].elem==this){if(gotoEnd)timers[i](true);timers.splice(i,1);}});if(!gotoEnd)this.dequeue();return this;}});var queue=function(elem,type,array){if(elem){type=type||"fx";var q=jQuery.data(elem,type+"queue");if(!q||array)q=jQuery.data(elem,type+"queue",jQuery.makeArray(array));}return q;};jQuery.fn.dequeue=function(type){type=type||"fx";return this.each(function(){var q=queue(this,type);q.shift();if(q.length)q[0].call(this);});};jQuery.extend({speed:function(speed,easing,fn){var opt=speed&&speed.constructor==Object?speed:{complete:fn||!fn&&easing||jQuery.isFunction(speed)&&speed,duration:speed,easing:fn&&easing||easing&&easing.constructor!=Function&&easing};opt.duration=(opt.duration&&opt.duration.constructor==Number?opt.duration:jQuery.fx.speeds[opt.duration])||jQuery.fx.speeds.def;opt.old=opt.complete;opt.complete=function(){if(opt.queue!==false)jQuery(this).dequeue();if(jQuery.isFunction(opt.old))opt.old.call(this);};return opt;},easing:{linear:function(p,n,firstNum,diff){return firstNum+diff*p;},swing:function(p,n,firstNum,diff){return((-Math.cos(p*Math.PI)/2)+0.5)*diff+firstNum;}},timers:[],timerId:null,fx:function(elem,options,prop){this.options=options;this.elem=elem;this.prop=prop;if(!options.orig)options.orig={};}});jQuery.fx.prototype={update:function(){if(this.options.step)this.options.step.call(this.elem,this.now,this);(jQuery.fx.step[this.prop]||jQuery.fx.step._default)(this);if(this.prop=="height"||this.prop=="width")this.elem.style.display="block";},cur:function(force){if(this.elem[this.prop]!=null&&this.elem.style[this.prop]==null)return this.elem[this.prop];var r=parseFloat(jQuery.css(this.elem,this.prop,force));return r&&r>-10000?r:parseFloat(jQuery.curCSS(this.elem,this.prop))||0;},custom:function(from,to,unit){this.startTime=now();this.start=from;this.end=to;this.unit=unit||this.unit||"px";this.now=this.start;this.pos=this.state=0;this.update();var self=this;function t(gotoEnd){return self.step(gotoEnd);}t.elem=this.elem;jQuery.timers.push(t);if(jQuery.timerId==null){jQuery.timerId=setInterval(function(){var timers=jQuery.timers;for(var i=0;i<timers.length;i++)if(!timers[i]())timers.splice(i--,1);if(!timers.length){clearInterval(jQuery.timerId);jQuery.timerId=null;}},13);}},show:function(){this.options.orig[this.prop]=jQuery.attr(this.elem.style,this.prop);this.options.show=true;this.custom(0,this.cur());if(this.prop=="width"||this.prop=="height")this.elem.style[this.prop]="1px";jQuery(this.elem).show();},hide:function(){this.options.orig[this.prop]=jQuery.attr(this.elem.style,this.prop);this.options.hide=true;this.custom(this.cur(),0);},step:function(gotoEnd){var t=now();if(gotoEnd||t>this.options.duration+this.startTime){this.now=this.end;this.pos=this.state=1;this.update();this.options.curAnim[this.prop]=true;var done=true;for(var i in this.options.curAnim)if(this.options.curAnim[i]!==true)done=false;if(done){if(this.options.display!=null){this.elem.style.overflow=this.options.overflow;this.elem.style.display=this.options.display;if(jQuery.css(this.elem,"display")=="none")this.elem.style.display="block";}if(this.options.hide)this.elem.style.display="none";if(this.options.hide||this.options.show)for(var p in this.options.curAnim)jQuery.attr(this.elem.style,p,this.options.orig[p]);}if(done)this.options.complete.call(this.elem);return false;}else{var n=t-this.startTime;this.state=n/this.options.duration;this.pos=jQuery.easing[this.options.easing||(jQuery.easing.swing?"swing":"linear")](this.state,n,0,1,this.options.duration);this.now=this.start+((this.end-this.start)*this.pos);this.update();}return true;}};jQuery.extend(jQuery.fx,{speeds:{slow:600,fast:200,def:400},step:{scrollLeft:function(fx){fx.elem.scrollLeft=fx.now;},scrollTop:function(fx){fx.elem.scrollTop=fx.now;},opacity:function(fx){jQuery.attr(fx.elem.style,"opacity",fx.now);},_default:function(fx){fx.elem.style[fx.prop]=fx.now+fx.unit;}}});jQuery.fn.offset=function(){var left=0,top=0,elem=this[0],results;if(elem)with(jQuery.browser){var parent=elem.parentNode,offsetChild=elem,offsetParent=elem.offsetParent,doc=elem.ownerDocument,safari2=safari&&parseInt(version)<522&&!/adobeair/i.test(userAgent),css=jQuery.curCSS,fixed=css(elem,"position")=="fixed";if(elem.getBoundingClientRect){var box=elem.getBoundingClientRect();add(box.left+Math.max(doc.documentElement.scrollLeft,doc.body.scrollLeft),box.top+Math.max(doc.documentElement.scrollTop,doc.body.scrollTop));add(-doc.documentElement.clientLeft,-doc.documentElement.clientTop);}else{add(elem.offsetLeft,elem.offsetTop);while(offsetParent){add(offsetParent.offsetLeft,offsetParent.offsetTop);if(mozilla&&!/^t(able|d|h)$/i.test(offsetParent.tagName)||safari&&!safari2)border(offsetParent);if(!fixed&&css(offsetParent,"position")=="fixed")fixed=true;offsetChild=/^body$/i.test(offsetParent.tagName)?offsetChild:offsetParent;offsetParent=offsetParent.offsetParent;}while(parent&&parent.tagName&&!/^body|html$/i.test(parent.tagName)){if(!/^inline|table.*$/i.test(css(parent,"display")))add(-parent.scrollLeft,-parent.scrollTop);if(mozilla&&css(parent,"overflow")!="visible")border(parent);parent=parent.parentNode;}if((safari2&&(fixed||css(offsetChild,"position")=="absolute"))||(mozilla&&css(offsetChild,"position")!="absolute"))add(-doc.body.offsetLeft,-doc.body.offsetTop);if(fixed)add(Math.max(doc.documentElement.scrollLeft,doc.body.scrollLeft),Math.max(doc.documentElement.scrollTop,doc.body.scrollTop));}results={top:top,left:left};}function border(elem){add(jQuery.curCSS(elem,"borderLeftWidth",true),jQuery.curCSS(elem,"borderTopWidth",true));}function add(l,t){left+=parseInt(l,10)||0;top+=parseInt(t,10)||0;}return results;};jQuery.fn.extend({position:function(){var left=0,top=0,results;if(this[0]){var offsetParent=this.offsetParent(),offset=this.offset(),parentOffset=/^body|html$/i.test(offsetParent[0].tagName)?{top:0,left:0}:offsetParent.offset();offset.top-=num(this,'marginTop');offset.left-=num(this,'marginLeft');parentOffset.top+=num(offsetParent,'borderTopWidth');parentOffset.left+=num(offsetParent,'borderLeftWidth');results={top:offset.top-parentOffset.top,left:offset.left-parentOffset.left};}return results;},offsetParent:function(){var offsetParent=this[0].offsetParent;while(offsetParent&&(!/^body|html$/i.test(offsetParent.tagName)&&jQuery.css(offsetParent,'position')=='static'))offsetParent=offsetParent.offsetParent;return jQuery(offsetParent);}});jQuery.each(['Left','Top'],function(i,name){var method='scroll'+name;jQuery.fn[method]=function(val){if(!this[0])return;return val!=undefined?this.each(function(){this==window||this==document?window.scrollTo(!i?val:jQuery(window).scrollLeft(),i?val:jQuery(window).scrollTop()):this[method]=val;}):this[0]==window||this[0]==document?self[i?'pageYOffset':'pageXOffset']||jQuery.boxModel&&document.documentElement[method]||document.body[method]:this[0][method];};});jQuery.each(["Height","Width"],function(i,name){var tl=i?"Left":"Top",br=i?"Right":"Bottom";jQuery.fn["inner"+name]=function(){return this[name.toLowerCase()]()+num(this,"padding"+tl)+num(this,"padding"+br);};jQuery.fn["outer"+name]=function(margin){return this["inner"+name]()+num(this,"border"+tl+"Width")+num(this,"border"+br+"Width")+(margin?num(this,"margin"+tl)+num(this,"margin"+br):0);};});})();
\ No newline at end of file
Modified: trunk/projects/bos/payment-website/static/poi-ms.html
===================================================================
--- trunk/projects/bos/payment-website/static/poi-ms.html 2008-11-27 11:58:24 UTC (rev 4088)
+++ trunk/projects/bos/payment-website/static/poi-ms.html 2008-11-27 12:18:22 UTC (rev 4089)
@@ -4,6 +4,8 @@
<title>POI Microsite </title>
<link rel="stylesheet" type="text/css" href="http://yui.yahooapis.com/2.6.0/build/reset-fonts-grids/reset-fonts-grids.css"/>
<link rel="stylesheet" type="text/css" href="poi-ms.css"/>
+ <script src="MochiKit/MochiKit.js" type="text/javascript"> </script>
+ <script src="jquery-1.2.6.min.js" type="text/javascript"> </script>
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
</head>
<body>
1
0

[bknr-cvs] hans changed trunk/projects/bos/payment-website/static/poi-ms.
by BKNR Commits 27 Nov '08
by BKNR Commits 27 Nov '08
27 Nov '08
Revision: 4088
Author: hans
URL: http://bknr.net/trac/changeset/4088
beginnings of new poi microsite
A trunk/projects/bos/payment-website/static/poi-ms.css
A trunk/projects/bos/payment-website/static/poi-ms.html
Added: trunk/projects/bos/payment-website/static/poi-ms.css
===================================================================
--- trunk/projects/bos/payment-website/static/poi-ms.css (rev 0)
+++ trunk/projects/bos/payment-website/static/poi-ms.css 2008-11-27 11:58:24 UTC (rev 4088)
@@ -0,0 +1,15 @@
+h1 { font-size: 200% }
+h2 { font-size: 160% }
+h3 { font-size: 120% }
+
+ul.media-list li {
+ position: relative;
+ height: 44px;
+ margin-left: 42px;
+}
+
+ul.media-list li img {
+ position: absolute;
+ left: -42px;
+ top: 2px;
+}
\ No newline at end of file
Added: trunk/projects/bos/payment-website/static/poi-ms.html
===================================================================
--- trunk/projects/bos/payment-website/static/poi-ms.html (rev 0)
+++ trunk/projects/bos/payment-website/static/poi-ms.html 2008-11-27 11:58:24 UTC (rev 4088)
@@ -0,0 +1,90 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<html>
+ <head>
+ <title>POI Microsite </title>
+ <link rel="stylesheet" type="text/css" href="http://yui.yahooapis.com/2.6.0/build/reset-fonts-grids/reset-fonts-grids.css"/>
+ <link rel="stylesheet" type="text/css" href="poi-ms.css"/>
+ <meta http-equiv="content-type" content="text/html; charset=utf-8" />
+ </head>
+ <body>
+ <div id="doc" class="yui-t3">
+ <div id="hd">
+ <img src="/infosystem/bilder/infosystem_header-de.gif" />
+ <h1>Malaienbärgehege</h1>
+ <h2>Rund 60 Hektar für Renaturierung und Bären</h2>
+ </div>
+ <div id="bd">
+ <div id="yui-main">
+ <div class="yui-b" id="content">
+ <img src="/poi-image/sunbear-sanctuary/1" width="360"
+ height="360" float="left"/>Am 11.01 wurde in Samboja Lestari ein
+ kleiner weiblicher Malaienbär (indonesisch: Bruang Madu =
+ Honigbär) von einem Dorfbewohner abgegeben, die Mutter ist
+ wahrscheinlich getötet worden. Bei der Ankunft war sie
+ ungefähr eine Woche alt und wog nur einen Kilo. Seitdem
+ wird sie von sechs Pflegern abwechselnd rund um die Uhr
+ gepflegt. Ihr wurde der Name Arkana gegeben, und
+ inzwischen wiegt sie schon 1,6 Kilo. Ihre neue
+ "Mutter", also die Hauptbezugsperson ist Slamet
+ Mulyono. Täglich wird sie für eine Stunde in die Sonne
+ gebracht, mehrmals täglich wird ihre Temperatur gemessen,
+ die genau wie bei Menschen auch zwischen 36 und 37 Grad
+ liegt. Fällt die Temperatur, wird sie mit Eukalypusöl
+ (indonesisch: Minyak Kayu Putih) eingerieben. Auch nachdem
+ sie Milch bekommt, wird sie damit eingerieben, um den
+ Kreislauf anzuregen. Wenn sie älter ist, wird sie Früchte
+ zu essen bekommen, das Hauptnahrungsmittel der
+ Malaienbären. Die Früchte, meistens Salak, Mango, Papaya,
+ Ananas und Zuckerrohr kommen aus dem ökologischen Garten
+ Samboja Lestaris Mehrmals täglich bekommt sie ein frisches
+ Nest aus verschieden Blättern, normalerweise frisst die
+ Mutter die Exkremente, und hält so das Nest sauber.
+ </div>
+ </div>
+ <div class="yui-b">
+ <ul class="media-list">
+ <li>
+ <img src="/poi-image/sunbear-sanctuary/1" width="40" height="40"/>
+ 20.03.2004<br/>
+ <a href="#">Arkana der kleine Malaienbär</a>
+ </li>
+ <li>
+ <img src="/poi-image/sunbear-sanctuary/2" width="40" height="40" />
+ 20.03.2004<br/>
+ <a href="#">Ursus Malayanus</a>
+ </li>
+ <li>
+ <img src="/poi-image/sunbear-sanctuary/3" width="40" height="40" />
+ 20.03.2004<br/>
+ <a href="#">Das Gehege</a>
+ </li>
+ <li>
+ <img src="/poi-image/sunbear-sanctuary/4" width="40" height="40" />
+ 20.03.2004<br/>
+ <a href="#">Fütterungskäfig</a>
+ </li>
+ <li>
+ <img src="/poi-image/sunbear-sanctuary/5" width="40" height="40" />
+ 20.03.2004<br/>
+ <a href="#">Futterzubereitung</a>
+ </li>
+ <li>
+ <img src="/poi-image/sunbear-sanctuary/6" width="40" height="40" />
+ 20.03.2004<br/>
+ <a href="#">Erfrischung in den Tropen</a>
+ </li>
+ </ul>
+ </div>
+ </div>
+ <div id="ft">
+ <p>
+ Footer - Lorem ipsum dolor sit amet, consectetuer adipiscing
+ elit. Maecenas sit amet metus. Nunc quam elit, posuere nec,
+ auctor in, rhoncus quis, dui. Aliquam erat volutpat. Ut
+ dignissim, massa sit amet dignissim cursus, quam lacus
+ feugiat.
+ </p>
+ </div>
+ </div>
+ </body>
+</html>
1
0
Revision: 4087
Author: hans
URL: http://bknr.net/trac/changeset/4087
Merge fixes from trunk
U deployed/bos/projects/bos/m2/m2.lisp
U deployed/bos/projects/bos/m2/mail-generator.lisp
U deployed/bos/projects/bos/payment-website/templates/de/headline2.xml
U deployed/bos/projects/bos/payment-website/templates/de/verschenken.xml
U deployed/bos/projects/bos/payment-website/templates/en/headline2.xml
U deployed/bos/projects/bos/web/news-tags.lisp
U deployed/bos/projects/bos/web/poi-handlers.lisp
U deployed/bos/projects/bos/web/sponsor-handlers.lisp
U deployed/bos/projects/bos/web/tags.lisp
Change set too large, please see URL above
1
0
Revision: 4086
Author: hans
URL: http://bknr.net/trac/changeset/4086
add poi-as-json function.
U trunk/projects/bos/m2/poi.lisp
Modified: trunk/projects/bos/m2/poi.lisp
===================================================================
--- trunk/projects/bos/m2/poi.lisp 2008-11-27 09:37:31 UTC (rev 4085)
+++ trunk/projects/bos/m2/poi.lisp 2008-11-27 10:05:53 UTC (rev 4086)
@@ -336,15 +336,18 @@
"url" (poi-movie-url movie)
"timestamp" (format-date-time (poi-medium-creation-time movie) :mail-style t)))
+(defun poi-as-json (poi language)
+ (let ((*language* language))
+ (json:with-object ()
+ (json-encode poi)
+ (json:with-object-element ("media")
+ (json:with-array ()
+ (dolist (medium (poi-media poi))
+ (json:with-object ()
+ (json-encode medium))))))))
+
(defun pois-as-json (language)
- (let ((*language* language))
- (json:with-array ()
- (dolist (poi (class-instances 'poi))
- (when (poi-complete poi language)
- (json:with-object ()
- (json-encode poi)
- (json:with-object-element ("media")
- (json:with-array ()
- (dolist (medium (poi-media poi))
- (json:with-object ()
- (json-encode medium)))))))))))
+ (json:with-array ()
+ (dolist (poi (class-instances 'poi))
+ (when (poi-complete poi language)
+ (poi-as-json poi language)))))
1
0
Revision: 4085
Author: hans
URL: http://bknr.net/trac/changeset/4085
Add JSON encoding for POIs
U trunk/projects/bos/m2/bos.m2.asd
U trunk/projects/bos/m2/poi.lisp
U trunk/projects/bos/web/poi-handlers.lisp
Modified: trunk/projects/bos/m2/bos.m2.asd
===================================================================
--- trunk/projects/bos/m2/bos.m2.asd 2008-11-27 09:36:39 UTC (rev 4084)
+++ trunk/projects/bos/m2/bos.m2.asd 2008-11-27 09:37:31 UTC (rev 4085)
@@ -5,7 +5,8 @@
(asdf:defsystem :bos.m2
:depends-on (:bknr.datastore :bknr.modules :cl-smtp :cl-mime
:kmrcl :iterate :arnesi
- :cl-pdf :cl-pdf-parser :screamer :cl-fad)
+ :cl-pdf :cl-pdf-parser :screamer :cl-fad
+ :yason)
:components ((:file "packages")
(:file "geo-utm" :depends-on ("packages"))
(:file "geometry" :depends-on ("packages"))
Modified: trunk/projects/bos/m2/poi.lisp
===================================================================
--- trunk/projects/bos/m2/poi.lisp 2008-11-27 09:36:39 UTC (rev 4084)
+++ trunk/projects/bos/m2/poi.lisp 2008-11-27 09:37:31 UTC (rev 4085)
@@ -84,7 +84,9 @@
;;; poi-movie
(defpersistent-class poi-movie (poi-medium)
((url :accessor poi-movie-url :initarg :url :initform nil)
- (created :initform (get-universal-time) :reader poi-medium-creation-time)))
+ (created :initform (error "need :created initarg when creating poi-medium")
+ :initarg :created
+ :reader poi-medium-creation-time)))
;;; poi
(defpersistent-class poi (textual-attributes-mixin)
@@ -294,3 +296,55 @@
(warn "~s has a url of ~s" movie (poi-movie-url movie))))))
(mapc #'poi-sanity-check (class-instances 'poi))
(values)))
+
+(defvar *language* "en"
+ "Current language for JSON encoding")
+
+(defmethod json:encode ((object symbol) &optional stream)
+ (json:encode (string-downcase (symbol-name object)) stream))
+
+(defgeneric json-encode (object)
+ (:method-combination progn))
+
+(defmethod json-encode progn ((object store-object))
+ (json:encode-object-element "id" (store-object-id object)))
+
+(defmethod json-encode progn ((blob blob))
+ (json:encode-object-elements
+ "type" (blob-type blob)
+ "timestamp" (format-date-time (blob-timestamp blob) :mail-style t)))
+
+(defmethod json-encode progn ((image store-image))
+ (json:encode-object-elements
+ "name" (store-image-name image)
+ "width" (store-image-width image)
+ "height" (store-image-height image)))
+
+(defmethod json-encode progn ((object bos.m2::textual-attributes-mixin))
+ (dolist (field '(title subtitle description))
+ (let ((string (slot-string object field *language*)))
+ (unless (equal "" string)
+ (json:encode-object-element field string)))))
+
+(defmethod json-encode progn ((medium poi-medium))
+ (json:encode-object-element
+ "mediumType"
+ (cl-ppcre:regex-replace "^poi-" (string-downcase (class-name (class-of medium))) "")))
+
+(defmethod json-encode progn ((movie poi-movie))
+ (json:encode-object-elements
+ "url" (poi-movie-url movie)
+ "timestamp" (format-date-time (poi-medium-creation-time movie) :mail-style t)))
+
+(defun pois-as-json (language)
+ (let ((*language* language))
+ (json:with-array ()
+ (dolist (poi (class-instances 'poi))
+ (when (poi-complete poi language)
+ (json:with-object ()
+ (json-encode poi)
+ (json:with-object-element ("media")
+ (json:with-array ()
+ (dolist (medium (poi-media poi))
+ (json:with-object ()
+ (json-encode medium)))))))))))
Modified: trunk/projects/bos/web/poi-handlers.lisp
===================================================================
--- trunk/projects/bos/web/poi-handlers.lisp 2008-11-27 09:36:39 UTC (rev 4084)
+++ trunk/projects/bos/web/poi-handlers.lisp 2008-11-27 09:37:31 UTC (rev 4085)
@@ -346,7 +346,7 @@
(flet ((make-new-medium (new-medium-type poi)
(case new-medium-type
(poi-movie
- (make-instance 'poi-movie :poi poi :url (query-param "url")))
+ (make-instance 'poi-movie :poi poi :url (query-param "url") :created (get-universal-time)))
(otherwise
(let ((upload (request-uploaded-file "image-file")))
(unless upload
@@ -683,3 +683,4 @@
(store-object-id (nth image-index (poi-sat-images poi)))
imageproc-arguments))
(error "image index ~a out of bounds for poi ~a" image-index poi)))))
+
1
0
Revision: 4084
Author: hans
URL: http://bknr.net/trac/changeset/4084
Add encode-array-elementS and encode-object-elementS convenience functions.
U trunk/libraries/yason/encode.lisp
U trunk/libraries/yason/package.lisp
Modified: trunk/libraries/yason/encode.lisp
===================================================================
--- trunk/libraries/yason/encode.lisp 2008-11-26 21:28:07 UTC (rev 4083)
+++ trunk/libraries/yason/encode.lisp 2008-11-27 09:36:39 UTC (rev 4084)
@@ -176,6 +176,11 @@
(next-aggregate-element)
(encode object (output-stream *json-output*)))
+(defun encode-array-elements (&rest objects)
+ "Encode OBJECTS, a list of JSON encodeable object, as array elements."
+ (dolist (object objects)
+ (encode-array-element object)))
+
(defun encode-object-element (key value)
"Encode KEY and VALUE as object element to the last JSON object
opened with WITH-OBJECT in the dynamic context. KEY and VALUE are
@@ -187,6 +192,11 @@
(encode value (output-stream *json-output*))
value)
+(defun encode-object-elements (&rest elements)
+ "Encode plist ELEMENTS as object elements."
+ (loop for (key value) on elements by #'cddr
+ do (encode-object-element key value)))
+
(defmacro with-object-element ((key) &body body)
"Open a new encoding context to encode a JSON object element. KEY
is the key of the element. The value will be whatever BODY
Modified: trunk/libraries/yason/package.lisp
===================================================================
--- trunk/libraries/yason/package.lisp 2008-11-26 21:28:07 UTC (rev 4083)
+++ trunk/libraries/yason/package.lisp 2008-11-27 09:36:39 UTC (rev 4084)
@@ -30,7 +30,9 @@
#:no-json-output-context
#:with-array
#:encode-array-element
+ #:encode-array-elements
#:with-object
#:encode-object-element
+ #:encode-object-elements
#:with-object-element
#:with-response))
1
0
Revision: 4083
Author: hans
URL: http://bknr.net/trac/changeset/4083
merge 4081 from trunk
U deployed/bos/projects/bos/m2/mail-generator.lisp
U deployed/bos/projects/bos/web/sponsor-handlers.lisp
Modified: deployed/bos/projects/bos/m2/mail-generator.lisp
===================================================================
--- deployed/bos/projects/bos/m2/mail-generator.lisp 2008-11-26 21:26:40 UTC (rev 4082)
+++ deployed/bos/projects/bos/m2/mail-generator.lisp 2008-11-26 21:28:07 UTC (rev 4083)
@@ -202,8 +202,10 @@
(defun lookup-element-name (element-name)
"Given an ELEMENT-NAME (which may be either a form field name or a name of a post parameter from
worldpay), return the common XML element name"
- (or (cdr (find element-name *common-element-names* :key #'car :test #'equal))
- element-name))
+ (cl-ppcre:regex-replace-all "(?i)[^-a-z0-9]"
+ (or (cdr (find element-name *common-element-names* :key #'car :test #'equal))
+ element-name)
+ ""))
(defun make-contract-xml-part (id params)
(make-instance 'text-mime
Modified: deployed/bos/projects/bos/web/sponsor-handlers.lisp
===================================================================
--- deployed/bos/projects/bos/web/sponsor-handlers.lisp 2008-11-26 21:26:40 UTC (rev 4082)
+++ deployed/bos/projects/bos/web/sponsor-handlers.lisp 2008-11-26 21:28:07 UTC (rev 4083)
@@ -83,8 +83,6 @@
"Download complete sponsor DB in XML format")))
(:tr ((:th :colspan "2" :align "left")
(:h2 "Create sponsor")))
- (:tr (:td "Date (DD.MM.YYYY)")
- (:td (text-field "date" :size 10 :value (format-date-time (get-universal-time) :show-time nil))))
(:tr (:td "Number of square meters")
(:td (text-field "numsqm" :size 5)))
(:tr (:td "Country code (2 chars)")
1
0