OSDN Git Service

first import.
authorElixirel <elixirel@users.sourceforge.jp>
Wed, 13 May 2009 13:09:08 +0000 (22:09 +0900)
committerElixirel <elixirel@users.sourceforge.jp>
Wed, 13 May 2009 13:09:08 +0000 (22:09 +0900)
index.html [new file with mode: 0644]
js/jquery/jquery-1.3.2.min.js [new file with mode: 0644]
js/lunardial/feedblog.js [new file with mode: 0644]
js/lunardial/feedblog_search.js [new file with mode: 0644]
search.html [new file with mode: 0644]
xml/diary.xml [new file with mode: 0644]
xml/loglist.xml [new file with mode: 0644]
xml/samplelog.xml [new file with mode: 0644]

diff --git a/index.html b/index.html
new file mode 100644 (file)
index 0000000..02d2db6
--- /dev/null
@@ -0,0 +1,102 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<html>
+    <head>
+        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+        <title>日記設置サンプル</title>
+        <link rel="alternate" type="application/atom+xml" title="Atom" href="./xml/diary.xml"/>
+        <script type="text/javascript" src="./js/jquery/jquery-1.3.2.min.js">
+        </script>
+        <script type="text/javascript" src="./js/lunardial/feedblog.js">
+        </script>
+        <style type="text/css">
+            body {
+                font-size: 12px;
+                line-height: 18px;
+                color: #004488;
+                margin-top: 30px;
+                margin-bottom: 30px;
+            }
+            
+            td.default {
+                font-size: 12px;
+                line-height: 18px;
+                border: 1px solid #8888ff;
+                text-align: left;
+                vertical-align: top;
+            }
+            
+            div {
+                text-align: left;
+            }
+            
+            td.header {
+                margin: 0px;
+                padding: 0px;
+                border: 1px solid #a8a8ff;
+                padding: 4px;
+                font-weight: bold;
+                background-color: #ffffff;
+            }
+            
+            td.content {
+                margin: 0px;
+                padding: 0px;
+                border: 1px solid #a8a8ff;
+                background-color: #ffffff;
+            }
+            
+            div.code {
+                background: #f8f8ff;
+                border: 1px solid #c8c8ff;
+                padding: 10px;
+                margin: 10px;
+                margin-left: 0px;
+                border-left: 5px solid #e8e8ff;
+                font-size: 12px;
+                line-height: 18px;
+            }
+            
+            table.pager {
+                padding: 0px;
+                margin: 0px;
+                border: 1px solid #8888ff;
+            }
+            
+            td.pager {
+                border: 1px solid #8888ff;
+                padding-left: 3px;
+            }
+        </style>
+    </head>
+    <body>
+        <center>
+            <table align="center" style="width: 800px;">
+                <tbody>
+                    <tr>
+                        <td class="default" colspan="2" style="height: 150px; padding: 5px; text-align: right; vertical-align: bottom;">
+                            <span style="font-size: 20px; font-weight: bold;">[ タイトルを入れてください ]</span>
+                            <br>
+                            [ 説明文を入れてください ]
+                        </td>
+                    </tr>
+                    <tr>
+                        <td colspan="2" style="height: 10px;">
+                        </td>
+                    </tr>
+                    <tr>
+                        <td class="default" style="width: 580px; border: none;">
+                            <div id="writeArea">
+                            </div>
+                        </td>
+                        <td class="default" style="padding: 10px;">
+                        ▼ 過去ログを閲覧する<div id="logSelecter"/>
+                        </div>
+                        <br>
+                        <a href="./search.html">日記検索ページへ</a>
+                    </td>
+                    </tr>
+                </tbody>
+            </table>
+        </center>
+    </body>
+</html>
diff --git a/js/jquery/jquery-1.3.2.min.js b/js/jquery/jquery-1.3.2.min.js
new file mode 100644 (file)
index 0000000..b1ae21d
--- /dev/null
@@ -0,0 +1,19 @@
+/*
+ * jQuery JavaScript Library v1.3.2
+ * http://jquery.com/
+ *
+ * Copyright (c) 2009 John Resig
+ * Dual licensed under the MIT and GPL licenses.
+ * http://docs.jquery.com/License
+ *
+ * Date: 2009-02-19 17:34:21 -0500 (Thu, 19 Feb 2009)
+ * Revision: 6246
+ */
+(function(){var l=this,g,y=l.jQuery,p=l.$,o=l.jQuery=l.$=function(E,F){return new o.fn.init(E,F)},D=/^[^<]*(<(.|\s)+>)[^>]*$|^#([\w-]+)$/,f=/^.[^:#\[\.,]*$/;o.fn=o.prototype={init:function(E,H){E=E||document;if(E.nodeType){this[0]=E;this.length=1;this.context=E;return this}if(typeof E==="string"){var G=D.exec(E);if(G&&(G[1]||!H)){if(G[1]){E=o.clean([G[1]],H)}else{var I=document.getElementById(G[3]);if(I&&I.id!=G[3]){return o().find(E)}var F=o(I||[]);F.context=document;F.selector=E;return F}}else{return o(H).find(E)}}else{if(o.isFunction(E)){return o(document).ready(E)}}if(E.selector&&E.context){this.selector=E.selector;this.context=E.context}return this.setArray(o.isArray(E)?E:o.makeArray(E))},selector:"",jquery:"1.3.2",size:function(){return this.length},get:function(E){return E===g?Array.prototype.slice.call(this):this[E]},pushStack:function(F,H,E){var G=o(F);G.prevObject=this;G.context=this.context;if(H==="find"){G.selector=this.selector+(this.selector?" ":"")+E}else{if(H){G.selector=this.selector+"."+H+"("+E+")"}}return G},setArray:function(E){this.length=0;Array.prototype.push.apply(this,E);return this},each:function(F,E){return o.each(this,F,E)},index:function(E){return o.inArray(E&&E.jquery?E[0]:E,this)},attr:function(F,H,G){var E=F;if(typeof F==="string"){if(H===g){return this[0]&&o[G||"attr"](this[0],F)}else{E={};E[F]=H}}return this.each(function(I){for(F in E){o.attr(G?this.style:this,F,o.prop(this,E[F],G,I,F))}})},css:function(E,F){if((E=="width"||E=="height")&&parseFloat(F)<0){F=g}return this.attr(E,F,"curCSS")},text:function(F){if(typeof F!=="object"&&F!=null){return this.empty().append((this[0]&&this[0].ownerDocument||document).createTextNode(F))}var E="";o.each(F||this,function(){o.each(this.childNodes,function(){if(this.nodeType!=8){E+=this.nodeType!=1?this.nodeValue:o.fn.text([this])}})});return E},wrapAll:function(E){if(this[0]){var F=o(E,this[0].ownerDocument).clone();if(this[0].parentNode){F.insertBefore(this[0])}F.map(function(){var G=this;while(G.firstChild){G=G.firstChild}return G}).append(this)}return this},wrapInner:function(E){return this.each(function(){o(this).contents().wrapAll(E)})},wrap:function(E){return this.each(function(){o(this).wrapAll(E)})},append:function(){return this.domManip(arguments,true,function(E){if(this.nodeType==1){this.appendChild(E)}})},prepend:function(){return this.domManip(arguments,true,function(E){if(this.nodeType==1){this.insertBefore(E,this.firstChild)}})},before:function(){return this.domManip(arguments,false,function(E){this.parentNode.insertBefore(E,this)})},after:function(){return this.domManip(arguments,false,function(E){this.parentNode.insertBefore(E,this.nextSibling)})},end:function(){return this.prevObject||o([])},push:[].push,sort:[].sort,splice:[].splice,find:function(E){if(this.length===1){var F=this.pushStack([],"find",E);F.length=0;o.find(E,this[0],F);return F}else{return this.pushStack(o.unique(o.map(this,function(G){return o.find(E,G)})),"find",E)}},clone:function(G){var E=this.map(function(){if(!o.support.noCloneEvent&&!o.isXMLDoc(this)){var I=this.outerHTML;if(!I){var J=this.ownerDocument.createElement("div");J.appendChild(this.cloneNode(true));I=J.innerHTML}return o.clean([I.replace(/ jQuery\d+="(?:\d+|null)"/g,"").replace(/^\s*/,"")])[0]}else{return this.cloneNode(true)}});if(G===true){var H=this.find("*").andSelf(),F=0;E.find("*").andSelf().each(function(){if(this.nodeName!==H[F].nodeName){return}var I=o.data(H[F],"events");for(var K in I){for(var J in I[K]){o.event.add(this,K,I[K][J],I[K][J].data)}}F++})}return E},filter:function(E){return this.pushStack(o.isFunction(E)&&o.grep(this,function(G,F){return E.call(G,F)})||o.multiFilter(E,o.grep(this,function(F){return F.nodeType===1})),"filter",E)},closest:function(E){var G=o.expr.match.POS.test(E)?o(E):null,F=0;return this.map(function(){var H=this;while(H&&H.ownerDocument){if(G?G.index(H)>-1:o(H).is(E)){o.data(H,"closest",F);return H}H=H.parentNode;F++}})},not:function(E){if(typeof E==="string"){if(f.test(E)){return this.pushStack(o.multiFilter(E,this,true),"not",E)}else{E=o.multiFilter(E,this)}}var F=E.length&&E[E.length-1]!==g&&!E.nodeType;return this.filter(function(){return F?o.inArray(this,E)<0:this!=E})},add:function(E){return this.pushStack(o.unique(o.merge(this.get(),typeof E==="string"?o(E):o.makeArray(E))))},is:function(E){return !!E&&o.multiFilter(E,this).length>0},hasClass:function(E){return !!E&&this.is("."+E)},val:function(K){if(K===g){var E=this[0];if(E){if(o.nodeName(E,"option")){return(E.attributes.value||{}).specified?E.value:E.text}if(o.nodeName(E,"select")){var I=E.selectedIndex,L=[],M=E.options,H=E.type=="select-one";if(I<0){return null}for(var F=H?I:0,J=H?I+1:M.length;F<J;F++){var G=M[F];if(G.selected){K=o(G).val();if(H){return K}L.push(K)}}return L}return(E.value||"").replace(/\r/g,"")}return g}if(typeof K==="number"){K+=""}return this.each(function(){if(this.nodeType!=1){return}if(o.isArray(K)&&/radio|checkbox/.test(this.type)){this.checked=(o.inArray(this.value,K)>=0||o.inArray(this.name,K)>=0)}else{if(o.nodeName(this,"select")){var N=o.makeArray(K);o("option",this).each(function(){this.selected=(o.inArray(this.value,N)>=0||o.inArray(this.text,N)>=0)});if(!N.length){this.selectedIndex=-1}}else{this.value=K}}})},html:function(E){return E===g?(this[0]?this[0].innerHTML.replace(/ jQuery\d+="(?:\d+|null)"/g,""):null):this.empty().append(E)},replaceWith:function(E){return this.after(E).remove()},eq:function(E){return this.slice(E,+E+1)},slice:function(){return this.pushStack(Array.prototype.slice.apply(this,arguments),"slice",Array.prototype.slice.call(arguments).join(","))},map:function(E){return this.pushStack(o.map(this,function(G,F){return E.call(G,F,G)}))},andSelf:function(){return this.add(this.prevObject)},domManip:function(J,M,L){if(this[0]){var I=(this[0].ownerDocument||this[0]).createDocumentFragment(),F=o.clean(J,(this[0].ownerDocument||this[0]),I),H=I.firstChild;if(H){for(var G=0,E=this.length;G<E;G++){L.call(K(this[G],H),this.length>1||G>0?I.cloneNode(true):I)}}if(F){o.each(F,z)}}return this;function K(N,O){return M&&o.nodeName(N,"table")&&o.nodeName(O,"tr")?(N.getElementsByTagName("tbody")[0]||N.appendChild(N.ownerDocument.createElement("tbody"))):N}}};o.fn.init.prototype=o.fn;function z(E,F){if(F.src){o.ajax({url:F.src,async:false,dataType:"script"})}else{o.globalEval(F.text||F.textContent||F.innerHTML||"")}if(F.parentNode){F.parentNode.removeChild(F)}}function e(){return +new Date}o.extend=o.fn.extend=function(){var J=arguments[0]||{},H=1,I=arguments.length,E=false,G;if(typeof J==="boolean"){E=J;J=arguments[1]||{};H=2}if(typeof J!=="object"&&!o.isFunction(J)){J={}}if(I==H){J=this;--H}for(;H<I;H++){if((G=arguments[H])!=null){for(var F in G){var K=J[F],L=G[F];if(J===L){continue}if(E&&L&&typeof L==="object"&&!L.nodeType){J[F]=o.extend(E,K||(L.length!=null?[]:{}),L)}else{if(L!==g){J[F]=L}}}}}return J};var b=/z-?index|font-?weight|opacity|zoom|line-?height/i,q=document.defaultView||{},s=Object.prototype.toString;o.extend({noConflict:function(E){l.$=p;if(E){l.jQuery=y}return o},isFunction:function(E){return s.call(E)==="[object Function]"},isArray:function(E){return s.call(E)==="[object Array]"},isXMLDoc:function(E){return E.nodeType===9&&E.documentElement.nodeName!=="HTML"||!!E.ownerDocument&&o.isXMLDoc(E.ownerDocument)},globalEval:function(G){if(G&&/\S/.test(G)){var F=document.getElementsByTagName("head")[0]||document.documentElement,E=document.createElement("script");E.type="text/javascript";if(o.support.scriptEval){E.appendChild(document.createTextNode(G))}else{E.text=G}F.insertBefore(E,F.firstChild);F.removeChild(E)}},nodeName:function(F,E){return F.nodeName&&F.nodeName.toUpperCase()==E.toUpperCase()},each:function(G,K,F){var E,H=0,I=G.length;if(F){if(I===g){for(E in G){if(K.apply(G[E],F)===false){break}}}else{for(;H<I;){if(K.apply(G[H++],F)===false){break}}}}else{if(I===g){for(E in G){if(K.call(G[E],E,G[E])===false){break}}}else{for(var J=G[0];H<I&&K.call(J,H,J)!==false;J=G[++H]){}}}return G},prop:function(H,I,G,F,E){if(o.isFunction(I)){I=I.call(H,F)}return typeof I==="number"&&G=="curCSS"&&!b.test(E)?I+"px":I},className:{add:function(E,F){o.each((F||"").split(/\s+/),function(G,H){if(E.nodeType==1&&!o.className.has(E.className,H)){E.className+=(E.className?" ":"")+H}})},remove:function(E,F){if(E.nodeType==1){E.className=F!==g?o.grep(E.className.split(/\s+/),function(G){return !o.className.has(F,G)}).join(" "):""}},has:function(F,E){return F&&o.inArray(E,(F.className||F).toString().split(/\s+/))>-1}},swap:function(H,G,I){var E={};for(var F in G){E[F]=H.style[F];H.style[F]=G[F]}I.call(H);for(var F in G){H.style[F]=E[F]}},css:function(H,F,J,E){if(F=="width"||F=="height"){var L,G={position:"absolute",visibility:"hidden",display:"block"},K=F=="width"?["Left","Right"]:["Top","Bottom"];function I(){L=F=="width"?H.offsetWidth:H.offsetHeight;if(E==="border"){return}o.each(K,function(){if(!E){L-=parseFloat(o.curCSS(H,"padding"+this,true))||0}if(E==="margin"){L+=parseFloat(o.curCSS(H,"margin"+this,true))||0}else{L-=parseFloat(o.curCSS(H,"border"+this+"Width",true))||0}})}if(H.offsetWidth!==0){I()}else{o.swap(H,G,I)}return Math.max(0,Math.round(L))}return o.curCSS(H,F,J)},curCSS:function(I,F,G){var L,E=I.style;if(F=="opacity"&&!o.support.opacity){L=o.attr(E,"opacity");return L==""?"1":L}if(F.match(/float/i)){F=w}if(!G&&E&&E[F]){L=E[F]}else{if(q.getComputedStyle){if(F.match(/float/i)){F="float"}F=F.replace(/([A-Z])/g,"-$1").toLowerCase();var M=q.getComputedStyle(I,null);if(M){L=M.getPropertyValue(F)}if(F=="opacity"&&L==""){L="1"}}else{if(I.currentStyle){var J=F.replace(/\-(\w)/g,function(N,O){return O.toUpperCase()});L=I.currentStyle[F]||I.currentStyle[J];if(!/^\d+(px)?$/i.test(L)&&/^\d/.test(L)){var H=E.left,K=I.runtimeStyle.left;I.runtimeStyle.left=I.currentStyle.left;E.left=L||0;L=E.pixelLeft+"px";E.left=H;I.runtimeStyle.left=K}}}}return L},clean:function(F,K,I){K=K||document;if(typeof K.createElement==="undefined"){K=K.ownerDocument||K[0]&&K[0].ownerDocument||document}if(!I&&F.length===1&&typeof F[0]==="string"){var H=/^<(\w+)\s*\/?>$/.exec(F[0]);if(H){return[K.createElement(H[1])]}}var G=[],E=[],L=K.createElement("div");o.each(F,function(P,S){if(typeof S==="number"){S+=""}if(!S){return}if(typeof S==="string"){S=S.replace(/(<(\w+)[^>]*?)\/>/g,function(U,V,T){return T.match(/^(abbr|br|col|img|input|link|meta|param|hr|area|embed)$/i)?U:V+"></"+T+">"});var O=S.replace(/^\s+/,"").substring(0,10).toLowerCase();var Q=!O.indexOf("<opt")&&[1,"<select multiple='multiple'>","</select>"]||!O.indexOf("<leg")&&[1,"<fieldset>","</fieldset>"]||O.match(/^<(thead|tbody|tfoot|colg|cap)/)&&[1,"<table>","</table>"]||!O.indexOf("<tr")&&[2,"<table><tbody>","</tbody></table>"]||(!O.indexOf("<td")||!O.indexOf("<th"))&&[3,"<table><tbody><tr>","</tr></tbody></table>"]||!O.indexOf("<col")&&[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"]||!o.support.htmlSerialize&&[1,"div<div>","</div>"]||[0,"",""];L.innerHTML=Q[1]+S+Q[2];while(Q[0]--){L=L.lastChild}if(!o.support.tbody){var R=/<tbody/i.test(S),N=!O.indexOf("<table")&&!R?L.firstChild&&L.firstChild.childNodes:Q[1]=="<table>"&&!R?L.childNodes:[];for(var M=N.length-1;M>=0;--M){if(o.nodeName(N[M],"tbody")&&!N[M].childNodes.length){N[M].parentNode.removeChild(N[M])}}}if(!o.support.leadingWhitespace&&/^\s/.test(S)){L.insertBefore(K.createTextNode(S.match(/^\s*/)[0]),L.firstChild)}S=o.makeArray(L.childNodes)}if(S.nodeType){G.push(S)}else{G=o.merge(G,S)}});if(I){for(var J=0;G[J];J++){if(o.nodeName(G[J],"script")&&(!G[J].type||G[J].type.toLowerCase()==="text/javascript")){E.push(G[J].parentNode?G[J].parentNode.removeChild(G[J]):G[J])}else{if(G[J].nodeType===1){G.splice.apply(G,[J+1,0].concat(o.makeArray(G[J].getElementsByTagName("script"))))}I.appendChild(G[J])}}return E}return G},attr:function(J,G,K){if(!J||J.nodeType==3||J.nodeType==8){return g}var H=!o.isXMLDoc(J),L=K!==g;G=H&&o.props[G]||G;if(J.tagName){var F=/href|src|style/.test(G);if(G=="selected"&&J.parentNode){J.parentNode.selectedIndex}if(G in J&&H&&!F){if(L){if(G=="type"&&o.nodeName(J,"input")&&J.parentNode){throw"type property can't be changed"}J[G]=K}if(o.nodeName(J,"form")&&J.getAttributeNode(G)){return J.getAttributeNode(G).nodeValue}if(G=="tabIndex"){var I=J.getAttributeNode("tabIndex");return I&&I.specified?I.value:J.nodeName.match(/(button|input|object|select|textarea)/i)?0:J.nodeName.match(/^(a|area)$/i)&&J.href?0:g}return J[G]}if(!o.support.style&&H&&G=="style"){return o.attr(J.style,"cssText",K)}if(L){J.setAttribute(G,""+K)}var E=!o.support.hrefNormalized&&H&&F?J.getAttribute(G,2):J.getAttribute(G);return E===null?g:E}if(!o.support.opacity&&G=="opacity"){if(L){J.zoom=1;J.filter=(J.filter||"").replace(/alpha\([^)]*\)/,"")+(parseInt(K)+""=="NaN"?"":"alpha(opacity="+K*100+")")}return J.filter&&J.filter.indexOf("opacity=")>=0?(parseFloat(J.filter.match(/opacity=([^)]*)/)[1])/100)+"":""}G=G.replace(/-([a-z])/ig,function(M,N){return N.toUpperCase()});if(L){J[G]=K}return J[G]},trim:function(E){return(E||"").replace(/^\s+|\s+$/g,"")},makeArray:function(G){var E=[];if(G!=null){var F=G.length;if(F==null||typeof G==="string"||o.isFunction(G)||G.setInterval){E[0]=G}else{while(F){E[--F]=G[F]}}}return E},inArray:function(G,H){for(var E=0,F=H.length;E<F;E++){if(H[E]===G){return E}}return -1},merge:function(H,E){var F=0,G,I=H.length;if(!o.support.getAll){while((G=E[F++])!=null){if(G.nodeType!=8){H[I++]=G}}}else{while((G=E[F++])!=null){H[I++]=G}}return H},unique:function(K){var F=[],E={};try{for(var G=0,H=K.length;G<H;G++){var J=o.data(K[G]);if(!E[J]){E[J]=true;F.push(K[G])}}}catch(I){F=K}return F},grep:function(F,J,E){var G=[];for(var H=0,I=F.length;H<I;H++){if(!E!=!J(F[H],H)){G.push(F[H])}}return G},map:function(E,J){var F=[];for(var G=0,H=E.length;G<H;G++){var I=J(E[G],G);if(I!=null){F[F.length]=I}}return F.concat.apply([],F)}});var C=navigator.userAgent.toLowerCase();o.browser={version:(C.match(/.+(?:rv|it|ra|ie)[\/: ]([\d.]+)/)||[0,"0"])[1],safari:/webkit/.test(C),opera:/opera/.test(C),msie:/msie/.test(C)&&!/opera/.test(C),mozilla:/mozilla/.test(C)&&!/(compatible|webkit)/.test(C)};o.each({parent:function(E){return E.parentNode},parents:function(E){return o.dir(E,"parentNode")},next:function(E){return o.nth(E,2,"nextSibling")},prev:function(E){return o.nth(E,2,"previousSibling")},nextAll:function(E){return o.dir(E,"nextSibling")},prevAll:function(E){return o.dir(E,"previousSibling")},siblings:function(E){return o.sibling(E.parentNode.firstChild,E)},children:function(E){return o.sibling(E.firstChild)},contents:function(E){return o.nodeName(E,"iframe")?E.contentDocument||E.contentWindow.document:o.makeArray(E.childNodes)}},function(E,F){o.fn[E]=function(G){var H=o.map(this,F);if(G&&typeof G=="string"){H=o.multiFilter(G,H)}return this.pushStack(o.unique(H),E,G)}});o.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(E,F){o.fn[E]=function(G){var J=[],L=o(G);for(var K=0,H=L.length;K<H;K++){var I=(K>0?this.clone(true):this).get();o.fn[F].apply(o(L[K]),I);J=J.concat(I)}return this.pushStack(J,E,G)}});o.each({removeAttr:function(E){o.attr(this,E,"");if(this.nodeType==1){this.removeAttribute(E)}},addClass:function(E){o.className.add(this,E)},removeClass:function(E){o.className.remove(this,E)},toggleClass:function(F,E){if(typeof E!=="boolean"){E=!o.className.has(this,F)}o.className[E?"add":"remove"](this,F)},remove:function(E){if(!E||o.filter(E,[this]).length){o("*",this).add([this]).each(function(){o.event.remove(this);o.removeData(this)});if(this.parentNode){this.parentNode.removeChild(this)}}},empty:function(){o(this).children().remove();while(this.firstChild){this.removeChild(this.firstChild)}}},function(E,F){o.fn[E]=function(){return this.each(F,arguments)}});function j(E,F){return E[0]&&parseInt(o.curCSS(E[0],F,true),10)||0}var h="jQuery"+e(),v=0,A={};o.extend({cache:{},data:function(F,E,G){F=F==l?A:F;var H=F[h];if(!H){H=F[h]=++v}if(E&&!o.cache[H]){o.cache[H]={}}if(G!==g){o.cache[H][E]=G}return E?o.cache[H][E]:H},removeData:function(F,E){F=F==l?A:F;var H=F[h];if(E){if(o.cache[H]){delete o.cache[H][E];E="";for(E in o.cache[H]){break}if(!E){o.removeData(F)}}}else{try{delete F[h]}catch(G){if(F.removeAttribute){F.removeAttribute(h)}}delete o.cache[H]}},queue:function(F,E,H){if(F){E=(E||"fx")+"queue";var G=o.data(F,E);if(!G||o.isArray(H)){G=o.data(F,E,o.makeArray(H))}else{if(H){G.push(H)}}}return G},dequeue:function(H,G){var E=o.queue(H,G),F=E.shift();if(!G||G==="fx"){F=E[0]}if(F!==g){F.call(H)}}});o.fn.extend({data:function(E,G){var H=E.split(".");H[1]=H[1]?"."+H[1]:"";if(G===g){var F=this.triggerHandler("getData"+H[1]+"!",[H[0]]);if(F===g&&this.length){F=o.data(this[0],E)}return F===g&&H[1]?this.data(H[0]):F}else{return this.trigger("setData"+H[1]+"!",[H[0],G]).each(function(){o.data(this,E,G)})}},removeData:function(E){return this.each(function(){o.removeData(this,E)})},queue:function(E,F){if(typeof E!=="string"){F=E;E="fx"}if(F===g){return o.queue(this[0],E)}return this.each(function(){var G=o.queue(this,E,F);if(E=="fx"&&G.length==1){G[0].call(this)}})},dequeue:function(E){return this.each(function(){o.dequeue(this,E)})}});
+/*
+ * Sizzle CSS Selector Engine - v0.9.3
+ *  Copyright 2009, The Dojo Foundation
+ *  Released under the MIT, BSD, and GPL Licenses.
+ *  More information: http://sizzlejs.com/
+ */
+(function(){var R=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^[\]]*\]|['"][^'"]*['"]|[^[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?/g,L=0,H=Object.prototype.toString;var F=function(Y,U,ab,ac){ab=ab||[];U=U||document;if(U.nodeType!==1&&U.nodeType!==9){return[]}if(!Y||typeof Y!=="string"){return ab}var Z=[],W,af,ai,T,ad,V,X=true;R.lastIndex=0;while((W=R.exec(Y))!==null){Z.push(W[1]);if(W[2]){V=RegExp.rightContext;break}}if(Z.length>1&&M.exec(Y)){if(Z.length===2&&I.relative[Z[0]]){af=J(Z[0]+Z[1],U)}else{af=I.relative[Z[0]]?[U]:F(Z.shift(),U);while(Z.length){Y=Z.shift();if(I.relative[Y]){Y+=Z.shift()}af=J(Y,af)}}}else{var ae=ac?{expr:Z.pop(),set:E(ac)}:F.find(Z.pop(),Z.length===1&&U.parentNode?U.parentNode:U,Q(U));af=F.filter(ae.expr,ae.set);if(Z.length>0){ai=E(af)}else{X=false}while(Z.length){var ah=Z.pop(),ag=ah;if(!I.relative[ah]){ah=""}else{ag=Z.pop()}if(ag==null){ag=U}I.relative[ah](ai,ag,Q(U))}}if(!ai){ai=af}if(!ai){throw"Syntax error, unrecognized expression: "+(ah||Y)}if(H.call(ai)==="[object Array]"){if(!X){ab.push.apply(ab,ai)}else{if(U.nodeType===1){for(var aa=0;ai[aa]!=null;aa++){if(ai[aa]&&(ai[aa]===true||ai[aa].nodeType===1&&K(U,ai[aa]))){ab.push(af[aa])}}}else{for(var aa=0;ai[aa]!=null;aa++){if(ai[aa]&&ai[aa].nodeType===1){ab.push(af[aa])}}}}}else{E(ai,ab)}if(V){F(V,U,ab,ac);if(G){hasDuplicate=false;ab.sort(G);if(hasDuplicate){for(var aa=1;aa<ab.length;aa++){if(ab[aa]===ab[aa-1]){ab.splice(aa--,1)}}}}}return ab};F.matches=function(T,U){return F(T,null,null,U)};F.find=function(aa,T,ab){var Z,X;if(!aa){return[]}for(var W=0,V=I.order.length;W<V;W++){var Y=I.order[W],X;if((X=I.match[Y].exec(aa))){var U=RegExp.leftContext;if(U.substr(U.length-1)!=="\\"){X[1]=(X[1]||"").replace(/\\/g,"");Z=I.find[Y](X,T,ab);if(Z!=null){aa=aa.replace(I.match[Y],"");break}}}}if(!Z){Z=T.getElementsByTagName("*")}return{set:Z,expr:aa}};F.filter=function(ad,ac,ag,W){var V=ad,ai=[],aa=ac,Y,T,Z=ac&&ac[0]&&Q(ac[0]);while(ad&&ac.length){for(var ab in I.filter){if((Y=I.match[ab].exec(ad))!=null){var U=I.filter[ab],ah,af;T=false;if(aa==ai){ai=[]}if(I.preFilter[ab]){Y=I.preFilter[ab](Y,aa,ag,ai,W,Z);if(!Y){T=ah=true}else{if(Y===true){continue}}}if(Y){for(var X=0;(af=aa[X])!=null;X++){if(af){ah=U(af,Y,X,aa);var ae=W^!!ah;if(ag&&ah!=null){if(ae){T=true}else{aa[X]=false}}else{if(ae){ai.push(af);T=true}}}}}if(ah!==g){if(!ag){aa=ai}ad=ad.replace(I.match[ab],"");if(!T){return[]}break}}}if(ad==V){if(T==null){throw"Syntax error, unrecognized expression: "+ad}else{break}}V=ad}return aa};var I=F.selectors={order:["ID","NAME","TAG"],match:{ID:/#((?:[\w\u00c0-\uFFFF_-]|\\.)+)/,CLASS:/\.((?:[\w\u00c0-\uFFFF_-]|\\.)+)/,NAME:/\[name=['"]*((?:[\w\u00c0-\uFFFF_-]|\\.)+)['"]*\]/,ATTR:/\[\s*((?:[\w\u00c0-\uFFFF_-]|\\.)+)\s*(?:(\S?=)\s*(['"]*)(.*?)\3|)\s*\]/,TAG:/^((?:[\w\u00c0-\uFFFF\*_-]|\\.)+)/,CHILD:/:(only|nth|last|first)-child(?:\((even|odd|[\dn+-]*)\))?/,POS:/:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^-]|$)/,PSEUDO:/:((?:[\w\u00c0-\uFFFF_-]|\\.)+)(?:\((['"]*)((?:\([^\)]+\)|[^\2\(\)]*)+)\2\))?/},attrMap:{"class":"className","for":"htmlFor"},attrHandle:{href:function(T){return T.getAttribute("href")}},relative:{"+":function(aa,T,Z){var X=typeof T==="string",ab=X&&!/\W/.test(T),Y=X&&!ab;if(ab&&!Z){T=T.toUpperCase()}for(var W=0,V=aa.length,U;W<V;W++){if((U=aa[W])){while((U=U.previousSibling)&&U.nodeType!==1){}aa[W]=Y||U&&U.nodeName===T?U||false:U===T}}if(Y){F.filter(T,aa,true)}},">":function(Z,U,aa){var X=typeof U==="string";if(X&&!/\W/.test(U)){U=aa?U:U.toUpperCase();for(var V=0,T=Z.length;V<T;V++){var Y=Z[V];if(Y){var W=Y.parentNode;Z[V]=W.nodeName===U?W:false}}}else{for(var V=0,T=Z.length;V<T;V++){var Y=Z[V];if(Y){Z[V]=X?Y.parentNode:Y.parentNode===U}}if(X){F.filter(U,Z,true)}}},"":function(W,U,Y){var V=L++,T=S;if(!U.match(/\W/)){var X=U=Y?U:U.toUpperCase();T=P}T("parentNode",U,V,W,X,Y)},"~":function(W,U,Y){var V=L++,T=S;if(typeof U==="string"&&!U.match(/\W/)){var X=U=Y?U:U.toUpperCase();T=P}T("previousSibling",U,V,W,X,Y)}},find:{ID:function(U,V,W){if(typeof V.getElementById!=="undefined"&&!W){var T=V.getElementById(U[1]);return T?[T]:[]}},NAME:function(V,Y,Z){if(typeof Y.getElementsByName!=="undefined"){var U=[],X=Y.getElementsByName(V[1]);for(var W=0,T=X.length;W<T;W++){if(X[W].getAttribute("name")===V[1]){U.push(X[W])}}return U.length===0?null:U}},TAG:function(T,U){return U.getElementsByTagName(T[1])}},preFilter:{CLASS:function(W,U,V,T,Z,aa){W=" "+W[1].replace(/\\/g,"")+" ";if(aa){return W}for(var X=0,Y;(Y=U[X])!=null;X++){if(Y){if(Z^(Y.className&&(" "+Y.className+" ").indexOf(W)>=0)){if(!V){T.push(Y)}}else{if(V){U[X]=false}}}}return false},ID:function(T){return T[1].replace(/\\/g,"")},TAG:function(U,T){for(var V=0;T[V]===false;V++){}return T[V]&&Q(T[V])?U[1]:U[1].toUpperCase()},CHILD:function(T){if(T[1]=="nth"){var U=/(-?)(\d*)n((?:\+|-)?\d*)/.exec(T[2]=="even"&&"2n"||T[2]=="odd"&&"2n+1"||!/\D/.test(T[2])&&"0n+"+T[2]||T[2]);T[2]=(U[1]+(U[2]||1))-0;T[3]=U[3]-0}T[0]=L++;return T},ATTR:function(X,U,V,T,Y,Z){var W=X[1].replace(/\\/g,"");if(!Z&&I.attrMap[W]){X[1]=I.attrMap[W]}if(X[2]==="~="){X[4]=" "+X[4]+" "}return X},PSEUDO:function(X,U,V,T,Y){if(X[1]==="not"){if(X[3].match(R).length>1||/^\w/.test(X[3])){X[3]=F(X[3],null,null,U)}else{var W=F.filter(X[3],U,V,true^Y);if(!V){T.push.apply(T,W)}return false}}else{if(I.match.POS.test(X[0])||I.match.CHILD.test(X[0])){return true}}return X},POS:function(T){T.unshift(true);return T}},filters:{enabled:function(T){return T.disabled===false&&T.type!=="hidden"},disabled:function(T){return T.disabled===true},checked:function(T){return T.checked===true},selected:function(T){T.parentNode.selectedIndex;return T.selected===true},parent:function(T){return !!T.firstChild},empty:function(T){return !T.firstChild},has:function(V,U,T){return !!F(T[3],V).length},header:function(T){return/h\d/i.test(T.nodeName)},text:function(T){return"text"===T.type},radio:function(T){return"radio"===T.type},checkbox:function(T){return"checkbox"===T.type},file:function(T){return"file"===T.type},password:function(T){return"password"===T.type},submit:function(T){return"submit"===T.type},image:function(T){return"image"===T.type},reset:function(T){return"reset"===T.type},button:function(T){return"button"===T.type||T.nodeName.toUpperCase()==="BUTTON"},input:function(T){return/input|select|textarea|button/i.test(T.nodeName)}},setFilters:{first:function(U,T){return T===0},last:function(V,U,T,W){return U===W.length-1},even:function(U,T){return T%2===0},odd:function(U,T){return T%2===1},lt:function(V,U,T){return U<T[3]-0},gt:function(V,U,T){return U>T[3]-0},nth:function(V,U,T){return T[3]-0==U},eq:function(V,U,T){return T[3]-0==U}},filter:{PSEUDO:function(Z,V,W,aa){var U=V[1],X=I.filters[U];if(X){return X(Z,W,V,aa)}else{if(U==="contains"){return(Z.textContent||Z.innerText||"").indexOf(V[3])>=0}else{if(U==="not"){var Y=V[3];for(var W=0,T=Y.length;W<T;W++){if(Y[W]===Z){return false}}return true}}}},CHILD:function(T,W){var Z=W[1],U=T;switch(Z){case"only":case"first":while(U=U.previousSibling){if(U.nodeType===1){return false}}if(Z=="first"){return true}U=T;case"last":while(U=U.nextSibling){if(U.nodeType===1){return false}}return true;case"nth":var V=W[2],ac=W[3];if(V==1&&ac==0){return true}var Y=W[0],ab=T.parentNode;if(ab&&(ab.sizcache!==Y||!T.nodeIndex)){var X=0;for(U=ab.firstChild;U;U=U.nextSibling){if(U.nodeType===1){U.nodeIndex=++X}}ab.sizcache=Y}var aa=T.nodeIndex-ac;if(V==0){return aa==0}else{return(aa%V==0&&aa/V>=0)}}},ID:function(U,T){return U.nodeType===1&&U.getAttribute("id")===T},TAG:function(U,T){return(T==="*"&&U.nodeType===1)||U.nodeName===T},CLASS:function(U,T){return(" "+(U.className||U.getAttribute("class"))+" ").indexOf(T)>-1},ATTR:function(Y,W){var V=W[1],T=I.attrHandle[V]?I.attrHandle[V](Y):Y[V]!=null?Y[V]:Y.getAttribute(V),Z=T+"",X=W[2],U=W[4];return T==null?X==="!=":X==="="?Z===U:X==="*="?Z.indexOf(U)>=0:X==="~="?(" "+Z+" ").indexOf(U)>=0:!U?Z&&T!==false:X==="!="?Z!=U:X==="^="?Z.indexOf(U)===0:X==="$="?Z.substr(Z.length-U.length)===U:X==="|="?Z===U||Z.substr(0,U.length+1)===U+"-":false},POS:function(X,U,V,Y){var T=U[2],W=I.setFilters[T];if(W){return W(X,V,U,Y)}}}};var M=I.match.POS;for(var O in I.match){I.match[O]=RegExp(I.match[O].source+/(?![^\[]*\])(?![^\(]*\))/.source)}var E=function(U,T){U=Array.prototype.slice.call(U);if(T){T.push.apply(T,U);return T}return U};try{Array.prototype.slice.call(document.documentElement.childNodes)}catch(N){E=function(X,W){var U=W||[];if(H.call(X)==="[object Array]"){Array.prototype.push.apply(U,X)}else{if(typeof X.length==="number"){for(var V=0,T=X.length;V<T;V++){U.push(X[V])}}else{for(var V=0;X[V];V++){U.push(X[V])}}}return U}}var G;if(document.documentElement.compareDocumentPosition){G=function(U,T){var V=U.compareDocumentPosition(T)&4?-1:U===T?0:1;if(V===0){hasDuplicate=true}return V}}else{if("sourceIndex" in document.documentElement){G=function(U,T){var V=U.sourceIndex-T.sourceIndex;if(V===0){hasDuplicate=true}return V}}else{if(document.createRange){G=function(W,U){var V=W.ownerDocument.createRange(),T=U.ownerDocument.createRange();V.selectNode(W);V.collapse(true);T.selectNode(U);T.collapse(true);var X=V.compareBoundaryPoints(Range.START_TO_END,T);if(X===0){hasDuplicate=true}return X}}}}(function(){var U=document.createElement("form"),V="script"+(new Date).getTime();U.innerHTML="<input name='"+V+"'/>";var T=document.documentElement;T.insertBefore(U,T.firstChild);if(!!document.getElementById(V)){I.find.ID=function(X,Y,Z){if(typeof Y.getElementById!=="undefined"&&!Z){var W=Y.getElementById(X[1]);return W?W.id===X[1]||typeof W.getAttributeNode!=="undefined"&&W.getAttributeNode("id").nodeValue===X[1]?[W]:g:[]}};I.filter.ID=function(Y,W){var X=typeof Y.getAttributeNode!=="undefined"&&Y.getAttributeNode("id");return Y.nodeType===1&&X&&X.nodeValue===W}}T.removeChild(U)})();(function(){var T=document.createElement("div");T.appendChild(document.createComment(""));if(T.getElementsByTagName("*").length>0){I.find.TAG=function(U,Y){var X=Y.getElementsByTagName(U[1]);if(U[1]==="*"){var W=[];for(var V=0;X[V];V++){if(X[V].nodeType===1){W.push(X[V])}}X=W}return X}}T.innerHTML="<a href='#'></a>";if(T.firstChild&&typeof T.firstChild.getAttribute!=="undefined"&&T.firstChild.getAttribute("href")!=="#"){I.attrHandle.href=function(U){return U.getAttribute("href",2)}}})();if(document.querySelectorAll){(function(){var T=F,U=document.createElement("div");U.innerHTML="<p class='TEST'></p>";if(U.querySelectorAll&&U.querySelectorAll(".TEST").length===0){return}F=function(Y,X,V,W){X=X||document;if(!W&&X.nodeType===9&&!Q(X)){try{return E(X.querySelectorAll(Y),V)}catch(Z){}}return T(Y,X,V,W)};F.find=T.find;F.filter=T.filter;F.selectors=T.selectors;F.matches=T.matches})()}if(document.getElementsByClassName&&document.documentElement.getElementsByClassName){(function(){var T=document.createElement("div");T.innerHTML="<div class='test e'></div><div class='test'></div>";if(T.getElementsByClassName("e").length===0){return}T.lastChild.className="e";if(T.getElementsByClassName("e").length===1){return}I.order.splice(1,0,"CLASS");I.find.CLASS=function(U,V,W){if(typeof V.getElementsByClassName!=="undefined"&&!W){return V.getElementsByClassName(U[1])}}})()}function P(U,Z,Y,ad,aa,ac){var ab=U=="previousSibling"&&!ac;for(var W=0,V=ad.length;W<V;W++){var T=ad[W];if(T){if(ab&&T.nodeType===1){T.sizcache=Y;T.sizset=W}T=T[U];var X=false;while(T){if(T.sizcache===Y){X=ad[T.sizset];break}if(T.nodeType===1&&!ac){T.sizcache=Y;T.sizset=W}if(T.nodeName===Z){X=T;break}T=T[U]}ad[W]=X}}}function S(U,Z,Y,ad,aa,ac){var ab=U=="previousSibling"&&!ac;for(var W=0,V=ad.length;W<V;W++){var T=ad[W];if(T){if(ab&&T.nodeType===1){T.sizcache=Y;T.sizset=W}T=T[U];var X=false;while(T){if(T.sizcache===Y){X=ad[T.sizset];break}if(T.nodeType===1){if(!ac){T.sizcache=Y;T.sizset=W}if(typeof Z!=="string"){if(T===Z){X=true;break}}else{if(F.filter(Z,[T]).length>0){X=T;break}}}T=T[U]}ad[W]=X}}}var K=document.compareDocumentPosition?function(U,T){return U.compareDocumentPosition(T)&16}:function(U,T){return U!==T&&(U.contains?U.contains(T):true)};var Q=function(T){return T.nodeType===9&&T.documentElement.nodeName!=="HTML"||!!T.ownerDocument&&Q(T.ownerDocument)};var J=function(T,aa){var W=[],X="",Y,V=aa.nodeType?[aa]:aa;while((Y=I.match.PSEUDO.exec(T))){X+=Y[0];T=T.replace(I.match.PSEUDO,"")}T=I.relative[T]?T+"*":T;for(var Z=0,U=V.length;Z<U;Z++){F(T,V[Z],W)}return F.filter(X,W)};o.find=F;o.filter=F.filter;o.expr=F.selectors;o.expr[":"]=o.expr.filters;F.selectors.filters.hidden=function(T){return T.offsetWidth===0||T.offsetHeight===0};F.selectors.filters.visible=function(T){return T.offsetWidth>0||T.offsetHeight>0};F.selectors.filters.animated=function(T){return o.grep(o.timers,function(U){return T===U.elem}).length};o.multiFilter=function(V,T,U){if(U){V=":not("+V+")"}return F.matches(V,T)};o.dir=function(V,U){var T=[],W=V[U];while(W&&W!=document){if(W.nodeType==1){T.push(W)}W=W[U]}return T};o.nth=function(X,T,V,W){T=T||1;var U=0;for(;X;X=X[V]){if(X.nodeType==1&&++U==T){break}}return X};o.sibling=function(V,U){var T=[];for(;V;V=V.nextSibling){if(V.nodeType==1&&V!=U){T.push(V)}}return T};return;l.Sizzle=F})();o.event={add:function(I,F,H,K){if(I.nodeType==3||I.nodeType==8){return}if(I.setInterval&&I!=l){I=l}if(!H.guid){H.guid=this.guid++}if(K!==g){var G=H;H=this.proxy(G);H.data=K}var E=o.data(I,"events")||o.data(I,"events",{}),J=o.data(I,"handle")||o.data(I,"handle",function(){return typeof o!=="undefined"&&!o.event.triggered?o.event.handle.apply(arguments.callee.elem,arguments):g});J.elem=I;o.each(F.split(/\s+/),function(M,N){var O=N.split(".");N=O.shift();H.type=O.slice().sort().join(".");var L=E[N];if(o.event.specialAll[N]){o.event.specialAll[N].setup.call(I,K,O)}if(!L){L=E[N]={};if(!o.event.special[N]||o.event.special[N].setup.call(I,K,O)===false){if(I.addEventListener){I.addEventListener(N,J,false)}else{if(I.attachEvent){I.attachEvent("on"+N,J)}}}}L[H.guid]=H;o.event.global[N]=true});I=null},guid:1,global:{},remove:function(K,H,J){if(K.nodeType==3||K.nodeType==8){return}var G=o.data(K,"events"),F,E;if(G){if(H===g||(typeof H==="string"&&H.charAt(0)==".")){for(var I in G){this.remove(K,I+(H||""))}}else{if(H.type){J=H.handler;H=H.type}o.each(H.split(/\s+/),function(M,O){var Q=O.split(".");O=Q.shift();var N=RegExp("(^|\\.)"+Q.slice().sort().join(".*\\.")+"(\\.|$)");if(G[O]){if(J){delete G[O][J.guid]}else{for(var P in G[O]){if(N.test(G[O][P].type)){delete G[O][P]}}}if(o.event.specialAll[O]){o.event.specialAll[O].teardown.call(K,Q)}for(F in G[O]){break}if(!F){if(!o.event.special[O]||o.event.special[O].teardown.call(K,Q)===false){if(K.removeEventListener){K.removeEventListener(O,o.data(K,"handle"),false)}else{if(K.detachEvent){K.detachEvent("on"+O,o.data(K,"handle"))}}}F=null;delete G[O]}}})}for(F in G){break}if(!F){var L=o.data(K,"handle");if(L){L.elem=null}o.removeData(K,"events");o.removeData(K,"handle")}}},trigger:function(I,K,H,E){var G=I.type||I;if(!E){I=typeof I==="object"?I[h]?I:o.extend(o.Event(G),I):o.Event(G);if(G.indexOf("!")>=0){I.type=G=G.slice(0,-1);I.exclusive=true}if(!H){I.stopPropagation();if(this.global[G]){o.each(o.cache,function(){if(this.events&&this.events[G]){o.event.trigger(I,K,this.handle.elem)}})}}if(!H||H.nodeType==3||H.nodeType==8){return g}I.result=g;I.target=H;K=o.makeArray(K);K.unshift(I)}I.currentTarget=H;var J=o.data(H,"handle");if(J){J.apply(H,K)}if((!H[G]||(o.nodeName(H,"a")&&G=="click"))&&H["on"+G]&&H["on"+G].apply(H,K)===false){I.result=false}if(!E&&H[G]&&!I.isDefaultPrevented()&&!(o.nodeName(H,"a")&&G=="click")){this.triggered=true;try{H[G]()}catch(L){}}this.triggered=false;if(!I.isPropagationStopped()){var F=H.parentNode||H.ownerDocument;if(F){o.event.trigger(I,K,F,true)}}},handle:function(K){var J,E;K=arguments[0]=o.event.fix(K||l.event);K.currentTarget=this;var L=K.type.split(".");K.type=L.shift();J=!L.length&&!K.exclusive;var I=RegExp("(^|\\.)"+L.slice().sort().join(".*\\.")+"(\\.|$)");E=(o.data(this,"events")||{})[K.type];for(var G in E){var H=E[G];if(J||I.test(H.type)){K.handler=H;K.data=H.data;var F=H.apply(this,arguments);if(F!==g){K.result=F;if(F===false){K.preventDefault();K.stopPropagation()}}if(K.isImmediatePropagationStopped()){break}}}},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 toElement view wheelDelta which".split(" "),fix:function(H){if(H[h]){return H}var F=H;H=o.Event(F);for(var G=this.props.length,J;G;){J=this.props[--G];H[J]=F[J]}if(!H.target){H.target=H.srcElement||document}if(H.target.nodeType==3){H.target=H.target.parentNode}if(!H.relatedTarget&&H.fromElement){H.relatedTarget=H.fromElement==H.target?H.toElement:H.fromElement}if(H.pageX==null&&H.clientX!=null){var I=document.documentElement,E=document.body;H.pageX=H.clientX+(I&&I.scrollLeft||E&&E.scrollLeft||0)-(I.clientLeft||0);H.pageY=H.clientY+(I&&I.scrollTop||E&&E.scrollTop||0)-(I.clientTop||0)}if(!H.which&&((H.charCode||H.charCode===0)?H.charCode:H.keyCode)){H.which=H.charCode||H.keyCode}if(!H.metaKey&&H.ctrlKey){H.metaKey=H.ctrlKey}if(!H.which&&H.button){H.which=(H.button&1?1:(H.button&2?3:(H.button&4?2:0)))}return H},proxy:function(F,E){E=E||function(){return F.apply(this,arguments)};E.guid=F.guid=F.guid||E.guid||this.guid++;return E},special:{ready:{setup:B,teardown:function(){}}},specialAll:{live:{setup:function(E,F){o.event.add(this,F[0],c)},teardown:function(G){if(G.length){var E=0,F=RegExp("(^|\\.)"+G[0]+"(\\.|$)");o.each((o.data(this,"events").live||{}),function(){if(F.test(this.type)){E++}});if(E<1){o.event.remove(this,G[0],c)}}}}}};o.Event=function(E){if(!this.preventDefault){return new o.Event(E)}if(E&&E.type){this.originalEvent=E;this.type=E.type}else{this.type=E}this.timeStamp=e();this[h]=true};function k(){return false}function u(){return true}o.Event.prototype={preventDefault:function(){this.isDefaultPrevented=u;var E=this.originalEvent;if(!E){return}if(E.preventDefault){E.preventDefault()}E.returnValue=false},stopPropagation:function(){this.isPropagationStopped=u;var E=this.originalEvent;if(!E){return}if(E.stopPropagation){E.stopPropagation()}E.cancelBubble=true},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=u;this.stopPropagation()},isDefaultPrevented:k,isPropagationStopped:k,isImmediatePropagationStopped:k};var a=function(F){var E=F.relatedTarget;while(E&&E!=this){try{E=E.parentNode}catch(G){E=this}}if(E!=this){F.type=F.data;o.event.handle.apply(this,arguments)}};o.each({mouseover:"mouseenter",mouseout:"mouseleave"},function(F,E){o.event.special[E]={setup:function(){o.event.add(this,F,a,E)},teardown:function(){o.event.remove(this,F,a)}}});o.fn.extend({bind:function(F,G,E){return F=="unload"?this.one(F,G,E):this.each(function(){o.event.add(this,F,E||G,E&&G)})},one:function(G,H,F){var E=o.event.proxy(F||H,function(I){o(this).unbind(I,E);return(F||H).apply(this,arguments)});return this.each(function(){o.event.add(this,G,E,F&&H)})},unbind:function(F,E){return this.each(function(){o.event.remove(this,F,E)})},trigger:function(E,F){return this.each(function(){o.event.trigger(E,F,this)})},triggerHandler:function(E,G){if(this[0]){var F=o.Event(E);F.preventDefault();F.stopPropagation();o.event.trigger(F,G,this[0]);return F.result}},toggle:function(G){var E=arguments,F=1;while(F<E.length){o.event.proxy(G,E[F++])}return this.click(o.event.proxy(G,function(H){this.lastToggle=(this.lastToggle||0)%F;H.preventDefault();return E[this.lastToggle++].apply(this,arguments)||false}))},hover:function(E,F){return this.mouseenter(E).mouseleave(F)},ready:function(E){B();if(o.isReady){E.call(document,o)}else{o.readyList.push(E)}return this},live:function(G,F){var E=o.event.proxy(F);E.guid+=this.selector+G;o(document).bind(i(G,this.selector),this.selector,E);return this},die:function(F,E){o(document).unbind(i(F,this.selector),E?{guid:E.guid+this.selector+F}:null);return this}});function c(H){var E=RegExp("(^|\\.)"+H.type+"(\\.|$)"),G=true,F=[];o.each(o.data(this,"events").live||[],function(I,J){if(E.test(J.type)){var K=o(H.target).closest(J.data)[0];if(K){F.push({elem:K,fn:J})}}});F.sort(function(J,I){return o.data(J.elem,"closest")-o.data(I.elem,"closest")});o.each(F,function(){if(this.fn.call(this.elem,H,this.fn.data)===false){return(G=false)}});return G}function i(F,E){return["live",F,E.replace(/\./g,"`").replace(/ /g,"|")].join(".")}o.extend({isReady:false,readyList:[],ready:function(){if(!o.isReady){o.isReady=true;if(o.readyList){o.each(o.readyList,function(){this.call(document,o)});o.readyList=null}o(document).triggerHandler("ready")}}});var x=false;function B(){if(x){return}x=true;if(document.addEventListener){document.addEventListener("DOMContentLoaded",function(){document.removeEventListener("DOMContentLoaded",arguments.callee,false);o.ready()},false)}else{if(document.attachEvent){document.attachEvent("onreadystatechange",function(){if(document.readyState==="complete"){document.detachEvent("onreadystatechange",arguments.callee);o.ready()}});if(document.documentElement.doScroll&&l==l.top){(function(){if(o.isReady){return}try{document.documentElement.doScroll("left")}catch(E){setTimeout(arguments.callee,0);return}o.ready()})()}}}o.event.add(l,"load",o.ready)}o.each(("blur,focus,load,resize,scroll,unload,click,dblclick,mousedown,mouseup,mousemove,mouseover,mouseout,mouseenter,mouseleave,change,select,submit,keydown,keypress,keyup,error").split(","),function(F,E){o.fn[E]=function(G){return G?this.bind(E,G):this.trigger(E)}});o(l).bind("unload",function(){for(var E in o.cache){if(E!=1&&o.cache[E].handle){o.event.remove(o.cache[E].handle.elem)}}});(function(){o.support={};var F=document.documentElement,G=document.createElement("script"),K=document.createElement("div"),J="script"+(new Date).getTime();K.style.display="none";K.innerHTML='   <link/><table></table><a href="/a" style="color:red;float:left;opacity:.5;">a</a><select><option>text</option></select><object><param/></object>';var H=K.getElementsByTagName("*"),E=K.getElementsByTagName("a")[0];if(!H||!H.length||!E){return}o.support={leadingWhitespace:K.firstChild.nodeType==3,tbody:!K.getElementsByTagName("tbody").length,objectAll:!!K.getElementsByTagName("object")[0].getElementsByTagName("*").length,htmlSerialize:!!K.getElementsByTagName("link").length,style:/red/.test(E.getAttribute("style")),hrefNormalized:E.getAttribute("href")==="/a",opacity:E.style.opacity==="0.5",cssFloat:!!E.style.cssFloat,scriptEval:false,noCloneEvent:true,boxModel:null};G.type="text/javascript";try{G.appendChild(document.createTextNode("window."+J+"=1;"))}catch(I){}F.insertBefore(G,F.firstChild);if(l[J]){o.support.scriptEval=true;delete l[J]}F.removeChild(G);if(K.attachEvent&&K.fireEvent){K.attachEvent("onclick",function(){o.support.noCloneEvent=false;K.detachEvent("onclick",arguments.callee)});K.cloneNode(true).fireEvent("onclick")}o(function(){var L=document.createElement("div");L.style.width=L.style.paddingLeft="1px";document.body.appendChild(L);o.boxModel=o.support.boxModel=L.offsetWidth===2;document.body.removeChild(L).style.display="none"})})();var w=o.support.cssFloat?"cssFloat":"styleFloat";o.props={"for":"htmlFor","class":"className","float":w,cssFloat:w,styleFloat:w,readonly:"readOnly",maxlength:"maxLength",cellspacing:"cellSpacing",rowspan:"rowSpan",tabindex:"tabIndex"};o.fn.extend({_load:o.fn.load,load:function(G,J,K){if(typeof G!=="string"){return this._load(G)}var I=G.indexOf(" ");if(I>=0){var E=G.slice(I,G.length);G=G.slice(0,I)}var H="GET";if(J){if(o.isFunction(J)){K=J;J=null}else{if(typeof J==="object"){J=o.param(J);H="POST"}}}var F=this;o.ajax({url:G,type:H,dataType:"html",data:J,complete:function(M,L){if(L=="success"||L=="notmodified"){F.html(E?o("<div/>").append(M.responseText.replace(/<script(.|\s)*?\/script>/g,"")).find(E):M.responseText)}if(K){F.each(K,[M.responseText,L,M])}}});return this},serialize:function(){return o.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?o.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||/select|textarea/i.test(this.nodeName)||/text|hidden|password|search/i.test(this.type))}).map(function(E,F){var G=o(this).val();return G==null?null:o.isArray(G)?o.map(G,function(I,H){return{name:F.name,value:I}}):{name:F.name,value:G}}).get()}});o.each("ajaxStart,ajaxStop,ajaxComplete,ajaxError,ajaxSuccess,ajaxSend".split(","),function(E,F){o.fn[F]=function(G){return this.bind(F,G)}});var r=e();o.extend({get:function(E,G,H,F){if(o.isFunction(G)){H=G;G=null}return o.ajax({type:"GET",url:E,data:G,success:H,dataType:F})},getScript:function(E,F){return o.get(E,null,F,"script")},getJSON:function(E,F,G){return o.get(E,F,G,"json")},post:function(E,G,H,F){if(o.isFunction(G)){H=G;G={}}return o.ajax({type:"POST",url:E,data:G,success:H,dataType:F})},ajaxSetup:function(E){o.extend(o.ajaxSettings,E)},ajaxSettings:{url:location.href,global:true,type:"GET",contentType:"application/x-www-form-urlencoded",processData:true,async:true,xhr:function(){return l.ActiveXObject?new ActiveXObject("Microsoft.XMLHTTP"):new XMLHttpRequest()},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(M){M=o.extend(true,M,o.extend(true,{},o.ajaxSettings,M));var W,F=/=\?(&|$)/g,R,V,G=M.type.toUpperCase();if(M.data&&M.processData&&typeof M.data!=="string"){M.data=o.param(M.data)}if(M.dataType=="jsonp"){if(G=="GET"){if(!M.url.match(F)){M.url+=(M.url.match(/\?/)?"&":"?")+(M.jsonp||"callback")+"=?"}}else{if(!M.data||!M.data.match(F)){M.data=(M.data?M.data+"&":"")+(M.jsonp||"callback")+"=?"}}M.dataType="json"}if(M.dataType=="json"&&(M.data&&M.data.match(F)||M.url.match(F))){W="jsonp"+r++;if(M.data){M.data=(M.data+"").replace(F,"="+W+"$1")}M.url=M.url.replace(F,"="+W+"$1");M.dataType="script";l[W]=function(X){V=X;I();L();l[W]=g;try{delete l[W]}catch(Y){}if(H){H.removeChild(T)}}}if(M.dataType=="script"&&M.cache==null){M.cache=false}if(M.cache===false&&G=="GET"){var E=e();var U=M.url.replace(/(\?|&)_=.*?(&|$)/,"$1_="+E+"$2");M.url=U+((U==M.url)?(M.url.match(/\?/)?"&":"?")+"_="+E:"")}if(M.data&&G=="GET"){M.url+=(M.url.match(/\?/)?"&":"?")+M.data;M.data=null}if(M.global&&!o.active++){o.event.trigger("ajaxStart")}var Q=/^(\w+:)?\/\/([^\/?#]+)/.exec(M.url);if(M.dataType=="script"&&G=="GET"&&Q&&(Q[1]&&Q[1]!=location.protocol||Q[2]!=location.host)){var H=document.getElementsByTagName("head")[0];var T=document.createElement("script");T.src=M.url;if(M.scriptCharset){T.charset=M.scriptCharset}if(!W){var O=false;T.onload=T.onreadystatechange=function(){if(!O&&(!this.readyState||this.readyState=="loaded"||this.readyState=="complete")){O=true;I();L();T.onload=T.onreadystatechange=null;H.removeChild(T)}}}H.appendChild(T);return g}var K=false;var J=M.xhr();if(M.username){J.open(G,M.url,M.async,M.username,M.password)}else{J.open(G,M.url,M.async)}try{if(M.data){J.setRequestHeader("Content-Type",M.contentType)}if(M.ifModified){J.setRequestHeader("If-Modified-Since",o.lastModified[M.url]||"Thu, 01 Jan 1970 00:00:00 GMT")}J.setRequestHeader("X-Requested-With","XMLHttpRequest");J.setRequestHeader("Accept",M.dataType&&M.accepts[M.dataType]?M.accepts[M.dataType]+", */*":M.accepts._default)}catch(S){}if(M.beforeSend&&M.beforeSend(J,M)===false){if(M.global&&!--o.active){o.event.trigger("ajaxStop")}J.abort();return false}if(M.global){o.event.trigger("ajaxSend",[J,M])}var N=function(X){if(J.readyState==0){if(P){clearInterval(P);P=null;if(M.global&&!--o.active){o.event.trigger("ajaxStop")}}}else{if(!K&&J&&(J.readyState==4||X=="timeout")){K=true;if(P){clearInterval(P);P=null}R=X=="timeout"?"timeout":!o.httpSuccess(J)?"error":M.ifModified&&o.httpNotModified(J,M.url)?"notmodified":"success";if(R=="success"){try{V=o.httpData(J,M.dataType,M)}catch(Z){R="parsererror"}}if(R=="success"){var Y;try{Y=J.getResponseHeader("Last-Modified")}catch(Z){}if(M.ifModified&&Y){o.lastModified[M.url]=Y}if(!W){I()}}else{o.handleError(M,J,R)}L();if(X){J.abort()}if(M.async){J=null}}}};if(M.async){var P=setInterval(N,13);if(M.timeout>0){setTimeout(function(){if(J&&!K){N("timeout")}},M.timeout)}}try{J.send(M.data)}catch(S){o.handleError(M,J,null,S)}if(!M.async){N()}function I(){if(M.success){M.success(V,R)}if(M.global){o.event.trigger("ajaxSuccess",[J,M])}}function L(){if(M.complete){M.complete(J,R)}if(M.global){o.event.trigger("ajaxComplete",[J,M])}if(M.global&&!--o.active){o.event.trigger("ajaxStop")}}return J},handleError:function(F,H,E,G){if(F.error){F.error(H,E,G)}if(F.global){o.event.trigger("ajaxError",[H,F,G])}},active:0,httpSuccess:function(F){try{return !F.status&&location.protocol=="file:"||(F.status>=200&&F.status<300)||F.status==304||F.status==1223}catch(E){}return false},httpNotModified:function(G,E){try{var H=G.getResponseHeader("Last-Modified");return G.status==304||H==o.lastModified[E]}catch(F){}return false},httpData:function(J,H,G){var F=J.getResponseHeader("content-type"),E=H=="xml"||!H&&F&&F.indexOf("xml")>=0,I=E?J.responseXML:J.responseText;if(E&&I.documentElement.tagName=="parsererror"){throw"parsererror"}if(G&&G.dataFilter){I=G.dataFilter(I,H)}if(typeof I==="string"){if(H=="script"){o.globalEval(I)}if(H=="json"){I=l["eval"]("("+I+")")}}return I},param:function(E){var G=[];function H(I,J){G[G.length]=encodeURIComponent(I)+"="+encodeURIComponent(J)}if(o.isArray(E)||E.jquery){o.each(E,function(){H(this.name,this.value)})}else{for(var F in E){if(o.isArray(E[F])){o.each(E[F],function(){H(F,this)})}else{H(F,o.isFunction(E[F])?E[F]():E[F])}}}return G.join("&").replace(/%20/g,"+")}});var m={},n,d=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]];function t(F,E){var G={};o.each(d.concat.apply([],d.slice(0,E)),function(){G[this]=F});return G}o.fn.extend({show:function(J,L){if(J){return this.animate(t("show",3),J,L)}else{for(var H=0,F=this.length;H<F;H++){var E=o.data(this[H],"olddisplay");this[H].style.display=E||"";if(o.css(this[H],"display")==="none"){var G=this[H].tagName,K;if(m[G]){K=m[G]}else{var I=o("<"+G+" />").appendTo("body");K=I.css("display");if(K==="none"){K="block"}I.remove();m[G]=K}o.data(this[H],"olddisplay",K)}}for(var H=0,F=this.length;H<F;H++){this[H].style.display=o.data(this[H],"olddisplay")||""}return this}},hide:function(H,I){if(H){return this.animate(t("hide",3),H,I)}else{for(var G=0,F=this.length;G<F;G++){var E=o.data(this[G],"olddisplay");if(!E&&E!=="none"){o.data(this[G],"olddisplay",o.css(this[G],"display"))}}for(var G=0,F=this.length;G<F;G++){this[G].style.display="none"}return this}},_toggle:o.fn.toggle,toggle:function(G,F){var E=typeof G==="boolean";return o.isFunction(G)&&o.isFunction(F)?this._toggle.apply(this,arguments):G==null||E?this.each(function(){var H=E?G:o(this).is(":hidden");o(this)[H?"show":"hide"]()}):this.animate(t("toggle",3),G,F)},fadeTo:function(E,G,F){return this.animate({opacity:G},E,F)},animate:function(I,F,H,G){var E=o.speed(F,H,G);return this[E.queue===false?"each":"queue"](function(){var K=o.extend({},E),M,L=this.nodeType==1&&o(this).is(":hidden"),J=this;for(M in I){if(I[M]=="hide"&&L||I[M]=="show"&&!L){return K.complete.call(this)}if((M=="height"||M=="width")&&this.style){K.display=o.css(this,"display");K.overflow=this.style.overflow}}if(K.overflow!=null){this.style.overflow="hidden"}K.curAnim=o.extend({},I);o.each(I,function(O,S){var R=new o.fx(J,K,O);if(/toggle|show|hide/.test(S)){R[S=="toggle"?L?"show":"hide":S](I)}else{var Q=S.toString().match(/^([+-]=)?([\d+-.]+)(.*)$/),T=R.cur(true)||0;if(Q){var N=parseFloat(Q[2]),P=Q[3]||"px";if(P!="px"){J.style[O]=(N||1)+P;T=((N||1)/R.cur(true))*T;J.style[O]=T+P}if(Q[1]){N=((Q[1]=="-="?-1:1)*N)+T}R.custom(T,N,P)}else{R.custom(T,S,"")}}});return true})},stop:function(F,E){var G=o.timers;if(F){this.queue([])}this.each(function(){for(var H=G.length-1;H>=0;H--){if(G[H].elem==this){if(E){G[H](true)}G.splice(H,1)}}});if(!E){this.dequeue()}return this}});o.each({slideDown:t("show",1),slideUp:t("hide",1),slideToggle:t("toggle",1),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"}},function(E,F){o.fn[E]=function(G,H){return this.animate(F,G,H)}});o.extend({speed:function(G,H,F){var E=typeof G==="object"?G:{complete:F||!F&&H||o.isFunction(G)&&G,duration:G,easing:F&&H||H&&!o.isFunction(H)&&H};E.duration=o.fx.off?0:typeof E.duration==="number"?E.duration:o.fx.speeds[E.duration]||o.fx.speeds._default;E.old=E.complete;E.complete=function(){if(E.queue!==false){o(this).dequeue()}if(o.isFunction(E.old)){E.old.call(this)}};return E},easing:{linear:function(G,H,E,F){return E+F*G},swing:function(G,H,E,F){return((-Math.cos(G*Math.PI)/2)+0.5)*F+E}},timers:[],fx:function(F,E,G){this.options=E;this.elem=F;this.prop=G;if(!E.orig){E.orig={}}}});o.fx.prototype={update:function(){if(this.options.step){this.options.step.call(this.elem,this.now,this)}(o.fx.step[this.prop]||o.fx.step._default)(this);if((this.prop=="height"||this.prop=="width")&&this.elem.style){this.elem.style.display="block"}},cur:function(F){if(this.elem[this.prop]!=null&&(!this.elem.style||this.elem.style[this.prop]==null)){return this.elem[this.prop]}var E=parseFloat(o.css(this.elem,this.prop,F));return E&&E>-10000?E:parseFloat(o.curCSS(this.elem,this.prop))||0},custom:function(I,H,G){this.startTime=e();this.start=I;this.end=H;this.unit=G||this.unit||"px";this.now=this.start;this.pos=this.state=0;var E=this;function F(J){return E.step(J)}F.elem=this.elem;if(F()&&o.timers.push(F)&&!n){n=setInterval(function(){var K=o.timers;for(var J=0;J<K.length;J++){if(!K[J]()){K.splice(J--,1)}}if(!K.length){clearInterval(n);n=g}},13)}},show:function(){this.options.orig[this.prop]=o.attr(this.elem.style,this.prop);this.options.show=true;this.custom(this.prop=="width"||this.prop=="height"?1:0,this.cur());o(this.elem).show()},hide:function(){this.options.orig[this.prop]=o.attr(this.elem.style,this.prop);this.options.hide=true;this.custom(this.cur(),0)},step:function(H){var G=e();if(H||G>=this.options.duration+this.startTime){this.now=this.end;this.pos=this.state=1;this.update();this.options.curAnim[this.prop]=true;var E=true;for(var F in this.options.curAnim){if(this.options.curAnim[F]!==true){E=false}}if(E){if(this.options.display!=null){this.elem.style.overflow=this.options.overflow;this.elem.style.display=this.options.display;if(o.css(this.elem,"display")=="none"){this.elem.style.display="block"}}if(this.options.hide){o(this.elem).hide()}if(this.options.hide||this.options.show){for(var I in this.options.curAnim){o.attr(this.elem.style,I,this.options.orig[I])}}this.options.complete.call(this.elem)}return false}else{var J=G-this.startTime;this.state=J/this.options.duration;this.pos=o.easing[this.options.easing||(o.easing.swing?"swing":"linear")](this.state,J,0,1,this.options.duration);this.now=this.start+((this.end-this.start)*this.pos);this.update()}return true}};o.extend(o.fx,{speeds:{slow:600,fast:200,_default:400},step:{opacity:function(E){o.attr(E.elem.style,"opacity",E.now)},_default:function(E){if(E.elem.style&&E.elem.style[E.prop]!=null){E.elem.style[E.prop]=E.now+E.unit}else{E.elem[E.prop]=E.now}}}});if(document.documentElement.getBoundingClientRect){o.fn.offset=function(){if(!this[0]){return{top:0,left:0}}if(this[0]===this[0].ownerDocument.body){return o.offset.bodyOffset(this[0])}var G=this[0].getBoundingClientRect(),J=this[0].ownerDocument,F=J.body,E=J.documentElement,L=E.clientTop||F.clientTop||0,K=E.clientLeft||F.clientLeft||0,I=G.top+(self.pageYOffset||o.boxModel&&E.scrollTop||F.scrollTop)-L,H=G.left+(self.pageXOffset||o.boxModel&&E.scrollLeft||F.scrollLeft)-K;return{top:I,left:H}}}else{o.fn.offset=function(){if(!this[0]){return{top:0,left:0}}if(this[0]===this[0].ownerDocument.body){return o.offset.bodyOffset(this[0])}o.offset.initialized||o.offset.initialize();var J=this[0],G=J.offsetParent,F=J,O=J.ownerDocument,M,H=O.documentElement,K=O.body,L=O.defaultView,E=L.getComputedStyle(J,null),N=J.offsetTop,I=J.offsetLeft;while((J=J.parentNode)&&J!==K&&J!==H){M=L.getComputedStyle(J,null);N-=J.scrollTop,I-=J.scrollLeft;if(J===G){N+=J.offsetTop,I+=J.offsetLeft;if(o.offset.doesNotAddBorder&&!(o.offset.doesAddBorderForTableAndCells&&/^t(able|d|h)$/i.test(J.tagName))){N+=parseInt(M.borderTopWidth,10)||0,I+=parseInt(M.borderLeftWidth,10)||0}F=G,G=J.offsetParent}if(o.offset.subtractsBorderForOverflowNotVisible&&M.overflow!=="visible"){N+=parseInt(M.borderTopWidth,10)||0,I+=parseInt(M.borderLeftWidth,10)||0}E=M}if(E.position==="relative"||E.position==="static"){N+=K.offsetTop,I+=K.offsetLeft}if(E.position==="fixed"){N+=Math.max(H.scrollTop,K.scrollTop),I+=Math.max(H.scrollLeft,K.scrollLeft)}return{top:N,left:I}}}o.offset={initialize:function(){if(this.initialized){return}var L=document.body,F=document.createElement("div"),H,G,N,I,M,E,J=L.style.marginTop,K='<div style="position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;"><div></div></div><table style="position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;" cellpadding="0" cellspacing="0"><tr><td></td></tr></table>';M={position:"absolute",top:0,left:0,margin:0,border:0,width:"1px",height:"1px",visibility:"hidden"};for(E in M){F.style[E]=M[E]}F.innerHTML=K;L.insertBefore(F,L.firstChild);H=F.firstChild,G=H.firstChild,I=H.nextSibling.firstChild.firstChild;this.doesNotAddBorder=(G.offsetTop!==5);this.doesAddBorderForTableAndCells=(I.offsetTop===5);H.style.overflow="hidden",H.style.position="relative";this.subtractsBorderForOverflowNotVisible=(G.offsetTop===-5);L.style.marginTop="1px";this.doesNotIncludeMarginInBodyOffset=(L.offsetTop===0);L.style.marginTop=J;L.removeChild(F);this.initialized=true},bodyOffset:function(E){o.offset.initialized||o.offset.initialize();var G=E.offsetTop,F=E.offsetLeft;if(o.offset.doesNotIncludeMarginInBodyOffset){G+=parseInt(o.curCSS(E,"marginTop",true),10)||0,F+=parseInt(o.curCSS(E,"marginLeft",true),10)||0}return{top:G,left:F}}};o.fn.extend({position:function(){var I=0,H=0,F;if(this[0]){var G=this.offsetParent(),J=this.offset(),E=/^body|html$/i.test(G[0].tagName)?{top:0,left:0}:G.offset();J.top-=j(this,"marginTop");J.left-=j(this,"marginLeft");E.top+=j(G,"borderTopWidth");E.left+=j(G,"borderLeftWidth");F={top:J.top-E.top,left:J.left-E.left}}return F},offsetParent:function(){var E=this[0].offsetParent||document.body;while(E&&(!/^body|html$/i.test(E.tagName)&&o.css(E,"position")=="static")){E=E.offsetParent}return o(E)}});o.each(["Left","Top"],function(F,E){var G="scroll"+E;o.fn[G]=function(H){if(!this[0]){return null}return H!==g?this.each(function(){this==l||this==document?l.scrollTo(!F?H:o(l).scrollLeft(),F?H:o(l).scrollTop()):this[G]=H}):this[0]==l||this[0]==document?self[F?"pageYOffset":"pageXOffset"]||o.boxModel&&document.documentElement[G]||document.body[G]:this[0][G]}});o.each(["Height","Width"],function(I,G){var E=I?"Left":"Top",H=I?"Right":"Bottom",F=G.toLowerCase();o.fn["inner"+G]=function(){return this[0]?o.css(this[0],F,false,"padding"):null};o.fn["outer"+G]=function(K){return this[0]?o.css(this[0],F,false,K?"margin":"border"):null};var J=G.toLowerCase();o.fn[J]=function(K){return this[0]==l?document.compatMode=="CSS1Compat"&&document.documentElement["client"+G]||document.body["client"+G]:this[0]==document?Math.max(document.documentElement["client"+G],document.body["scroll"+G],document.documentElement["scroll"+G],document.body["offset"+G],document.documentElement["offset"+G]):K===g?(this.length?o.css(this[0],J):null):this.css(J,typeof K==="string"?K:K+"px")}})})();
\ No newline at end of file
diff --git a/js/lunardial/feedblog.js b/js/lunardial/feedblog.js
new file mode 100644 (file)
index 0000000..9439399
--- /dev/null
@@ -0,0 +1,456 @@
+/**
+ * FeedBlog CoreScript
+ *
+ * @copyright 2009 FeedBlog Project (http://sourceforge.jp/projects/feedblog/)
+ * @author Kureha Hisame (http://lunardial.sakura.ne.jp/) & Yui Naruse (http://airemix.com/)
+ * @since 2009/02/27
+ * @version 2.1.0.0
+ */
+// ブログ本体のHTMLファイルの名前を記入してください
+var blogUrl = "./index.html"
+
+// 最新の日記を示すパスへの文字列です。最新の日記を置く場所を変えたいときは変更してください。
+var latestXml = "./xml/diary.xml";
+
+// ログのリストが書かれたXMLのファイルパスを記入してください
+var logXmlUrl = "./xml/loglist.xml";
+
+// Ext jsパネルのサイズを記述してください
+var extPanelWidth = 580;
+
+// ログを表示するコンボボックスのサイズを記述してください
+var extComboWidth = 150;
+
+// 日記間のスパン(間隔)をPIXEL単位で記述してください
+var entrySpan = 3;
+
+// 一画面あたりの表示日記数です
+var showLength = 3;
+
+// 検索結果をメモリ上に保持する変数です
+var loadedEntries;
+
+/**
+ * XMLファイルから読み込んだファイルのバリデートモードを選択します。
+ * 0 = 改行コード部分に<br/>を挿入
+ * 1 = 改行コード部分に<br/>を挿入しない
+ */
+var validateMode = "0";
+
+/**
+ * Ext jsパネルを実際に生成します。この部分を編集することでデザインを変更可能です。
+ * @param {String} title パネルのタイトル部分に表示する文字列
+ * @param {String} drawitem パネルの本文を格納したDIV要素のid
+ * @param {String} renderto 「タイトル・更新日時・本文」の1日分の日記データを焼き付けるDIV要素のid
+ * @param {String} closed (Ext jsパネルオプション)日記をクローズ状態で生成するか否か
+ */
+function generatePanel(title, drawitem, renderto, closed){
+    // HTMLを生成する
+    var htmlBuffer = [];
+    htmlBuffer.push("<table cellspacing='0' style='border: 0px; padding: 0px;'><tbody style='border: 0px; padding: 0px; margin: 0px;'>");
+    htmlBuffer.push("<tr><td class='header' onclick='closePanel(\"" +
+    renderto +
+    "td\")'>" +
+    title +
+    "</td></tr><tr><td style='line-height: 1px;'><br/></td></tr><tr><td style='width: " +
+    (extPanelWidth - 2) +
+    "px;' class='content'><div id='" +
+    renderto +
+    "td'>" +
+    document.getElementById(renderto).innerHTML +
+    "</div></td></tr></tbody></table>");
+    
+    document.getElementById(renderto).innerHTML = htmlBuffer.join("");
+}
+
+/**
+ * jQueryでのパネル開閉を制御します
+ */
+function closePanel(id){
+    $("#" + id).slideToggle();
+}
+
+/**
+ * jQueryへのイベント登録です。すべてのDOMが利用可能になった時点で実行されます。
+ */
+$(document).ready(function(){
+    // 特定の過去ログの探索モードか否かを判別するためにハッシュを取得する
+    var urlhash = "" + location.hash.substring(1);
+    
+    // ハッシュが空か、ハッシュ形式の正規表現に一致しないようなら通常モードで実行
+    if (urlhash.length == 0) {
+        xmlLoader(latestXml);
+        logXMLLoader();
+    }
+    // ハッシュ形式の正規表現に一致したら探索モード
+    else {
+        searchMode(urlhash);
+        logXMLLoader();
+    }
+});
+
+/**
+ * 記事クラス
+ * @param {Object} obj entry 要素の DOM オブジェクト
+ */
+function Entry(obj){
+    this.title = $("title:first", obj).text();
+    if (this.title == "") 
+        requiredElementError(obj, "title");
+    this.title = "<span>" + validateText(this.title) + "</span>";
+    this.content = $("content:first", obj).text();
+    this.content = "<span>" + validateText(this.content) + "</span>";
+    this.id = $("id:first", obj).text();
+    if (this.id == "") 
+        requiredElementError(obj, "id");
+    this.date = $("updated:first", obj).text();
+    if (this.date == "") 
+        requiredElementError(obj, "updated");
+    this.date = validateData(this.date);
+}
+
+/**
+ * 呼び出すとDIV:id名:writeArea上のHTMLを削除し、ロードエフェクトを表示します
+ */
+function loadingEffect(){
+    document.getElementById("writeArea").innerHTML = '<br/><br/><div id="drawPanel"><div id="drawItem" class="code" style="text-align: center;"><\/div><\/div>';
+    document.getElementById("drawItem").innerHTML = '<br/><br/>長時間画面が切り替わらない場合はページをリロードしてください。<br/><br/>';
+    
+    // ロード表示用のパネルを生成
+    generatePanel("Now Loading .....", "drawItem", "drawPanel", false);
+}
+
+/**
+ * 日記データのエラー時の処理を行います
+ */
+function requiredElementError(parent, name){
+    alert(parent.ownerDocument.URL + ": 必須な要素 " +
+    name +
+    " が存在しないか空な " +
+    parent.tagName +
+    " 要素が存在します");
+}
+
+function xmlAttrContentEscape(str){
+    return str.replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;').replace(/"/g, '&quot;');
+}
+
+/**
+ * 日付のHTML表示用バリデーション処理を行います
+ * @param {String} data RFC3339形式のdate-time文字列
+ */
+function validateData(data){
+    var regT = new RegExp("T", "gm");
+    data = data.replace(regT, " ");
+    
+    // 秒数の小数点以下の部分はカットする
+    data = data.substring(0, 19);
+    
+    return data;
+}
+
+/**
+ * 日記本文のバリデーション処理を行います
+ * @param {String} contents 日記の本文が格納されている文字列
+ */
+function validateText(contents){
+    // <br/>タグを挿入する
+    if (validateMode == 0) {
+        contents = contents.replace(/[\n\r]|\r\n/g, "<br />");
+    }
+    
+    return contents;
+}
+
+/**
+ * 日記本文に日付を付加します
+ * @param {String} contents 日記の本文が格納されている文字列
+ * @param {String} id 日記の初公開日を示す日付文字列
+ */
+function contentsWithid(contents, id){
+    // リンク用文末作成
+    var hashTag = '<br/><div style="text-align: right;"><a href="' +
+    xmlAttrContentEscape(blogUrl) +
+    '#' +
+    xmlAttrContentEscape(id) +
+    '" target="_blank">- この日の記事にリンクする -<\/a><\/span>';
+    return contents + hashTag;
+}
+
+/**
+ * ログファイル選択用のコンボボックスをid名:logSelecterに生成します
+ */
+function logXMLLoader(){
+    // ログ用のXMLを読み込みます
+    jQuery.ajax({
+        url: logXmlUrl,
+        method: "GET",
+        error: showError,
+        success: function(xmlData){
+            var separateTag = xmlData.getElementsByTagName("file");
+            var fileList = new Array(separateTag.length);
+            
+            // 読み込んだ要素をStoreに格納して表示
+            var boxBuffer = [];
+            boxBuffer.push("<form name='logform'><select name='logbox' style='width: " + extComboWidth + "px' onchange='xmlLoader(this.options[this.selectedIndex].value)'>");
+            for (var i = 0; i < separateTag.length; i++) {
+                boxBuffer.push("<option value='" + separateTag[i].getElementsByTagName("path")[0].firstChild.nodeValue + "'/>" + separateTag[i].getElementsByTagName("display")[0].firstChild.nodeValue);
+            }
+            boxBuffer.push("</select></form>");
+            
+            // コンボボックス要素を生成
+            document.getElementById("logSelecter").innerHTML = boxBuffer.join("");
+        }
+    });
+}
+
+/**
+ * 日記のデータが記述されたXMLデータを読み込むロジックを生成します
+ * @param {String} fileName 読み込み日記のデータが記述されているXMLファイルのパス
+ */
+function xmlLoader(fileName){
+    // ロードエフェクトに切り替え
+    loadingEffect()
+    
+    var url = fileName;
+    
+    // 日記をロードします
+    var loader = new jQuery.ajax({
+        url: url,
+        method: "POST",
+        success: writeHtml,
+        error: showError
+    });
+}
+
+/**
+ * 日記データのエラー時の処理を行います
+ */
+function showError(){
+    document.getElementById("writeArea").innerHTML = '<div id="drawPanel"><div id="drawItem" class="code" style="text-align: center;"><\/div><\/div>';
+    document.getElementById("drawItem").innerHTML = '<br/>日記ファイルのロードに失敗しました!<br/><br/>';
+    
+    // エラー内容をパネルに描画
+    generatePanel("Error!", "drawItem", "drawPanel", false);
+    
+    alert("日記ファイルが読み込めません!");
+}
+
+/**
+ * 渡された文字列と一致するfeed1.0:updated要素を持った日記を検索し、表示します
+ * @param {String} urlhash feed1.0:updated要素と一致する文字列
+ */
+function searchMode(urlhash){
+    // ロードエフェクト表示
+    loadingEffect();
+    
+    // ログXMLファイルを読み込む
+    var loader = new jQuery.ajax({
+        url: logXmlUrl,
+        method: "POST",
+        error: showError,
+        success: function(xmlData){
+            // ファイルパスの要素のみを抽出する
+            var separateTag = xmlData.getElementsByTagName("file");
+            var filelist = new Array(separateTag.length);
+            
+            // すべてのファイルパスを配列に格納する
+            for (var i = 0; i < separateTag.length; i++) {
+                // "path"ノードの値を格納
+                filelist[i] = separateTag[i].getElementsByTagName("path")[0].firstChild.nodeValue;
+            }
+            
+            // ファイルパス配列に格納されているすべての日記に対し、探索を開始する
+            for (var i = 0; i < separateTag.length; i++) {
+                // ファイルパス配列の要素からリクエストを生成し、対象データをロードする
+                var searchlog = new jQuery.ajax({
+                    url: filelist[i],
+                    method: "POST",
+                    success: function(xmlData){
+                        // entry要素のみを切り出す
+                        var searchSeparateTag = xmlData.getElementsByTagName("entry");
+                        
+                        for (var j = 0; j < searchSeparateTag.length; j++) {
+                            // entryタグ内部のidノードの値のみ抽出し、入力されたhashと比較を行う
+                            var id = searchSeparateTag[j].getElementsByTagName("id")[0].firstChild.nodeValue;
+                            
+                            // idの値と比較を行う
+                            if (urlhash == id) {
+                                var entry = new Entry(searchSeparateTag[j]);
+                                
+                                                               document.getElementById("writeArea").innerHTML = '<div><table class="pager" width="' + extPanelWidth + '" cellspacing="1"><tbody>' +
+                                '<tr><td class="pager" colspan="3">1件~1件(全1件)目の記事を表示中<br/></td></tr>' +
+                                '<tr><td align="left"><<< 前の3件を表示</td><td align="center">[ 0 ]</td><td align="right">次の3件を表示 >>></td></tr></tbody></table></div>' +
+                                '<div style="line-height: ' +
+                                entrySpan +
+                                'px;"><br/></div>' +
+                                '<div id="drawPanel"><div id="drawItem" class="code"><\/div><\/div>' +
+                                '<div style="line-height: ' +
+                                entrySpan +
+                                'px;"><br/></div>' + 
+                                '<div><table class="pager" width="' + extPanelWidth + '" cellspacing="1"><tbody>' +
+                                '<tr><td align="left"><<< 前の3件を表示</td><td align="center">[ 0 ]</td><td align="right">次の3件を表示 >>></td></tr>' +
+                                '<tr><td class="pager" colspan="3">1件~1件(全1件)目の記事を表示中<br/></td></tr></tbody></table></div>';
+                                document.getElementById("drawItem").innerHTML = contentsWithid(entry.content, entry.id);
+                                
+                                // 探索されたパネルはオープン状態で展開する
+                                generatePanel(entry.title + " / " + entry.date, "drawItem", "drawPanel", false);
+                                
+                                break;
+                            }
+                        }
+                    }
+                });
+            }
+            // ファイルパス配列から日記が見つからなかった場合の処理
+            document.getElementById("writeArea").innerHTML = '<br/><br/><div id="drawPanel"><div id="drawItem" class="code"><\/div><\/div>';
+            document.getElementById("drawItem").innerHTML = "指定された日記は存在しません。";
+            
+            // エラー内容を表示する
+            generatePanel("Search Failed.", "drawItem", "drawPanel", false);
+        }
+    });
+}
+
+/**
+ * 検索結果を分割して表示します
+ * @param {int} showLength 一回の画面に表示する記事数
+ * @param {int} startIndex 表示を開始する日記のインデックス
+ */
+function showEntriesRange(showLength, startIndex){
+    // メモリ上から日記データをロード
+    var entries = loadedEntries;
+    
+    // 表示インデックスが範囲外の場合はエラーパネルを表示して終了
+    if (startIndex < 0 || (entries.length <= startIndex && entries.length != 0)) {
+        showError();
+        return;
+    }
+    
+    var stringBuffer = [];
+    
+    // リミッターを設定する
+    var loopLimit = (showLength + startIndex > entries.length) ? entries.length : showLength + startIndex;
+    var indexShowEntries = loopLimit + 1;
+    
+    // 情報メニュー表示用バッファです
+    var menuInfoBuffer = [];
+    menuInfoBuffer.push("<tr><td colspan='3' class='pager'>");
+    var viewStartIndex = 0;
+    entries.length == 0 ? viewStartIndex = 0 : viewStartIndex = startIndex + 1
+    menuInfoBuffer.push(viewStartIndex + "件~" + loopLimit + "件(全" + entries.length + "件)目の記事を表示中<br/>");
+    menuInfoBuffer.push("</td></tr>");
+    
+    // ページ移動メニュー表示用バッファです
+    var menuMoveBuffer = [];
+       menuMoveBuffer.push("<tr>");
+    // 左パネルの表示制御
+    if (startIndex - showLength >= 0) {
+        menuMoveBuffer.push("\<td align='left'><a href='' onclick='showEntriesRange(" +
+        showLength +
+        ", " +
+        (startIndex - showLength) +
+        "); return false;'>\<\<\< 前の" +
+        showLength +
+        "件を表示</a\></td>");
+    }
+    else {
+        menuMoveBuffer.push("\<td align='left'>\<\<\< 前の" +
+        showLength +
+        "件を表示</a\></td>");
+    }
+    
+    // 中央のパネルの表示制御
+    menuMoveBuffer.push("<td align='center'>[ ");
+    var menuNumbers = Math.ceil(entries.length / showLength);
+    for (i = 0; i < menuNumbers; i++) {
+        if (startIndex / showLength == i) {
+            menuMoveBuffer.push(i + " ");
+        }
+        else {
+            menuMoveBuffer.push("<a href='' onclick='showEntriesRange(" +
+            showLength +
+            ", " +
+            (i * showLength) +
+            "); return false;'>");
+            menuMoveBuffer.push(i);
+            menuMoveBuffer.push("</a> ");
+        }
+    }
+    menuMoveBuffer.push("]</td>");
+    
+    // 右パネルの表示制御
+    if (entries.length > startIndex + showLength) {
+        menuMoveBuffer.push("\<td align='right'><a href='' onclick='showEntriesRange(" +
+        showLength +
+        ", " +
+        (startIndex + showLength) +
+        "); return false;'>\次の" +
+        showLength +
+        "件を表示 \>\>\></a\></td>");
+    }
+    else {
+        menuMoveBuffer.push("\<td align='right'>次の" +
+        showLength +
+        "件を表示 \>\>\></a\></td>");
+    }
+    menuMoveBuffer.push("</tr>");
+    
+    // メニューを結合してパネル(前方)に組み込みます
+    stringBuffer.push("<div><table cellspacing='1' width='" +
+    extPanelWidth +
+    "px' class='pager'><tbody>");
+    stringBuffer.push(menuInfoBuffer.join(""));
+    stringBuffer.push(menuMoveBuffer.join(""));
+    stringBuffer.push("</tbody></table></div>");
+    
+    stringBuffer.push('<div style="line-height: ' + entrySpan + 'px;"><br/></div>');
+    
+    // 日記描画部分のパネルを生成します
+    for (var i = startIndex; i < loopLimit; i++) {
+        stringBuffer.push('<div id="drawPanel');
+        stringBuffer.push(i);
+        stringBuffer.push('"><div id="drawItem');
+        stringBuffer.push(i);
+        stringBuffer.push('" class="code"><\/div><\/div><div style="line-height: ' + entrySpan + 'px;"><br/></div>')
+    }
+    
+    // メニューを結合してパネル(後方)に組み込みます
+    stringBuffer.push("<div><table cellspacing='1' width='" +
+    extPanelWidth +
+    "px' class='pager'><tbody>");
+    stringBuffer.push(menuMoveBuffer.join(""));
+    stringBuffer.push(menuInfoBuffer.join(""));
+    stringBuffer.push("</tbody></table></div>");
+    
+    document.getElementById("writeArea").innerHTML = stringBuffer.join("");
+    
+    for (var i = startIndex; i < loopLimit; i++) {
+        // 各要素をオブジェクトに格納します
+        var entry = entries[i];
+        document.getElementById("drawItem" + i).innerHTML = contentsWithid(entry.content, entry.id);
+        
+        // すべてのパネルをオープン状態で生成します
+        generatePanel(entry.title + " / " + entry.date, "drawItem" + i, "drawPanel" + i, false);
+    }
+}
+
+/**
+ * 日記のログファイルデータが記述されているXMLファイルを読み込んで表示します。DIV:id名:writeArea上に読み込んだ日記の内容を表示します
+ * @param {Object} xmlData 日記が記述されたXMLファイル(feed 1.0準拠)
+ */
+function writeHtml(xmlData){
+    var separateTag = xmlData.getElementsByTagName("entry");
+    var stringBuffer = [];
+    // メモリ上での保持変数を初期化します
+    loadedEntries = [];
+    
+    // メモリ上の変数に全ての日記要素を格納します
+    for (var i = 0; i < separateTag.length; i++) {
+        loadedEntries.push(new Entry(separateTag[i]));
+    }
+    
+    // 表示ロジック呼び出し
+    showEntriesRange(showLength, 0);
+}
+
diff --git a/js/lunardial/feedblog_search.js b/js/lunardial/feedblog_search.js
new file mode 100644 (file)
index 0000000..d24fe58
--- /dev/null
@@ -0,0 +1,594 @@
+/**
+ * FeedBlog SearchScript
+ *
+ * @copyright 2009 FeedBlog Project (http://sourceforge.jp/projects/feedblog/)
+ * @author Kureha Hisame (http://lunardial.sakura.ne.jp/) & Yui Naruse (http://airemix.com/)
+ * @since 2009/02/27
+ * @version 2.1.0.0
+ */
+// ブログ本体のHTMLファイルの名前を記入してください
+var blogUrl = "./index.html"
+
+// ログのリストが書かれたXMLのファイルパスを記入してください
+var logXmlUrl = "./xml/loglist.xml";
+
+// Ext jsパネルのサイズを記述してください
+var extPanelWidth = 750;
+
+// 結果表示エリアの幅のサイズを指定してください
+var resultAreaWidth = 784;
+
+// 検索フォームの幅のサイズを記述してください
+var searchPanelWidth = 774;
+
+// ログを表示するコンボボックスのサイズを記述してください
+var extComboWidth = 150;
+
+/**
+ * XMLファイルから読み込んだファイルのバリデートモードを選択します。
+ * 0 = 改行コード部分に<br/>を挿入
+ * 1 = 改行コード部分に<br/>を挿入しない
+ */
+var validateMode = "0";
+
+// 現在の検索語のキャッシュ
+var currentSearchWords;
+
+// fetchEntries 用のセマフォ
+var fetchEntriesSemaphore = new Semaphore();
+
+// ログのファイルリストを格納するグローバル変数です
+var logData;
+
+// コンボボックスのオブジェクトを格納するグローバル変数です
+var comboBox;
+
+// 一画面あたりの表示日記数です
+var showLength = 5;
+
+// 検索結果をメモリ上に保持する変数です
+var loadedEntries;
+
+/**
+ * Extへのイベント登録です。すべてのDOMが利用可能になった時点で実行されます。
+ */
+$(document).ready(function(){
+    // XMLのデータをロードします
+    logXMLLoader();
+});
+
+/**
+ * 日記の描画を行います。この部分を編集することでデザインを変更可能です。
+ * @param {String} title パネルのタイトル部分に表示する文字列
+ * @param {String} drawitem パネルの本文を格納したDIV要素のid
+ * @param {String} renderto 「タイトル・更新日時・本文」の1日分の日記データを焼き付けるDIV要素のid
+ * @param {String} closed (Ext jsパネルオプション)日記をクローズ状態で生成するか否か
+ */
+function generatePanel(title, drawitem, renderto, closed){
+    // HTMLを生成する
+    var htmlBuffer = [];
+    htmlBuffer.push("<table style='border: 0px; padding: 0px;' align='center'><tbody style='border: 0px; padding: 0px; margin: 0px;'>");
+    htmlBuffer.push("<tr><td class='header' onclick=\"closePanel('" +
+    renderto +
+    "td')\">" +
+    title +
+    "</td></tr><tr><td style='width: " +
+    (extPanelWidth - 6) +
+    "px;' class='content'><div id='" +
+    renderto +
+    "td'>" +
+    document.getElementById(renderto).innerHTML +
+    "</div></td></tr></tbody></table>");
+    
+    document.getElementById(renderto).innerHTML = htmlBuffer.join("");
+}
+
+/**
+ * 検索フォーム及び結果表示フォームを生成するメソッドです。
+ */
+function generateForm(){
+    var formBuffer = "<table align='center'><tbody><tr><td class='searchform' style='width: " + searchPanelWidth + "px'>" +
+    "<form name='searchForm' onsubmit='searchDiary(); return false'>▼ 検索語句を入力してください (語句を半角で区切るとAND、|で区切るとORで検索します)<br/>" +
+    "<input type='text' id='searchWord' style='width: " +
+    (searchPanelWidth * 0.7) +
+    "px;'> <input type='submit' name='execSearch' value='検索'><br/>" +
+    "<input type='checkbox' id='regexpOptionI' checked='checked'/><label for='regexpOptionI'>大文字、小文字を区別しない</label><br/>" +
+    "<input type='checkbox' id='isAsyncOn'/><label for='isAsyncOn'>非同期通信モードで検索を行う</label><br/>" +
+    "<span style='font-weight: bold;'>[ 注意 ]</span>非同期通信モードをオンにすると速度は上昇しますが、検索の順序が保障されません。<br/><br/>" +
+    "▼ 検索対象ログ選択<br/><div id='logSelecter'/></div><input type='checkbox' id='allSearchCheck' checked='checked'/><label for='allSearchCheck'>すべてのログに対して検索を行う</label>" +
+    "<br/><a href='" + blogUrl + "'>トップページへ戻る</a><br/></form></td></tr></tbody></table>"
+    document.getElementById("genForm").innerHTML = formBuffer;
+    
+    var resultAreaBuffer = "<table align='center'><tbody><tr><td class='resultarea' style='width: " + resultAreaWidth + "px;'>" +
+    "<div id='resultWriteArea'><b>検索結果</b></div></td></tr><tr><td class='resultarea' style='width: " +
+    resultAreaWidth +
+    "px;'>" +
+    "<table align='center'><tbody><tr><td><div id='writeArea'></div></td></tr></tbody></table></td></tr></tbody></table>"
+    
+    document.getElementById("resultArea").innerHTML = resultAreaBuffer;
+}
+
+/**
+ * jQueryでのパネル開閉を制御します
+ */
+function closePanel(id){
+    $("#" + id).slideToggle();
+}
+
+/**
+ * jQueryへのイベント登録です
+ */
+$(document).ready(function(){
+    generateForm();
+});
+
+/**
+ * 記事クラス
+ * @param {Object} obj entry 要素の DOM オブジェクト
+ */
+function Entry(obj){
+    this.title = $("title:first", obj).text();
+    if (this.title == "") 
+        requiredElementError(obj, "title");
+    this.title = "<span>" + validateText(this.title) + "</span>";
+    this.content = $("content:first", obj).text();
+    this.content = "<span>" + validateText(this.content) + "</span>";
+    this.id = $("id:first", obj).text();
+    if (this.id == "") 
+        requiredElementError(obj, "id");
+    this.date = $("updated:first", obj).text();
+    if (this.date == "") 
+        requiredElementError(obj, "updated");
+    this.date = validateData(this.date);
+}
+
+/**
+ * 記事内が単語群を全て含んでいるか
+ * @param {Array} keywords 単語群
+ * @param {String} regexpType 正規表現の検索モードを示す文字列
+ * @return {boolean} bool 全て含んでいれば true、さもなくば false
+ */
+Entry.prototype.hasKeywords = function(keywords, regexpType){
+    // 正規表現が一致するかという判定"のみ"を行います
+    for (var i = 0; i < keywords.length; i++) {
+        // 正規表現チェック用のオブジェクトを用意します(OR条件は一時的に条件を置換)
+        var reg = new RegExp('(?:' + keywords[i] + ')(?![^<>]*>)', regexpType);
+        // 一致しなかったらその時点で脱出
+        if (!reg.test(this.content) && !reg.test(this.title)) 
+            return false;
+    }
+    return true;
+}
+
+/**
+ * 呼び出すとDIV:id名:writeArea上のHTMLを削除し、ロードエフェクトを表示します
+ */
+function loadingEffect(){
+    document.getElementById("writeArea").innerHTML = '<div id="drawPanel"><div id="drawItem" class="code" style="text-align: center;"><\/div><\/div>';
+    document.getElementById("drawItem").innerHTML = '<br/>長時間画面が切り替わらない場合はページをリロードしてください。<br/><br/>';
+    
+    // ロード表示用のパネルを生成
+    generatePanel("Now Loading .....", "drawItem", "drawPanel", false);
+}
+
+/**
+ * 日記データのエラー時の処理を行います
+ */
+function showError(){
+    document.getElementById("writeArea").innerHTML = '<div id="drawPanel"><div id="drawItem" class="code" style="text-align: center;"><\/div><\/div>';
+    document.getElementById("drawItem").innerHTML = '<br/>日記ファイルのロードに失敗しました!<br/><br/>';
+    
+    // エラー内容をパネルに描画
+    generatePanel("Error!", "drawItem", "drawPanel", false);
+    
+    alert("日記ファイルが読み込めません!");
+}
+
+/**
+ * 日記データのエラー時の処理を行います
+ */
+function notFoundError(){
+    document.getElementById("writeArea").innerHTML = '<div id="drawPanel"><div id="drawItem" class="code" style="text-align: center;"><\/div><\/div>';
+    document.getElementById("drawItem").innerHTML = '<br/>検索条件に一致する日記は見つかりませんでした。<br/><br/>';
+    
+    // エラー内容をパネルに描画
+    generatePanel("Not found!", "drawItem", "drawPanel", false);
+}
+
+/**
+ * 日記データのエラー時の処理を行います
+ */
+function requiredElementError(parent, name){
+    alert(parent.ownerDocument.URL + ": 必須な要素 " +
+    name +
+    " が存在しないか空な " +
+    parent.tagName +
+    " 要素が存在します");
+}
+
+/**
+ * 日付のHTML表示用バリデーション処理を行います
+ * @param {String} data RFC3339形式のdate-time文字列
+ */
+function validateData(data){
+    data = data.replace(/T/g, " ");
+    
+    // 秒数の小数点以下の部分はカットする
+    data = data.substring(0, 19);
+    
+    return data;
+}
+
+/**
+ * 日記本文のバリデーション処理を行います
+ * @param {String} contents 日記の本文が格納されている文字列
+ */
+function validateText(contents){
+    // <br/>タグを挿入する
+    if (validateMode == 0) {
+        contents = contents.replace(/[\n\r]|\r\n/g, "<br />");
+    }
+    
+    return contents;
+}
+
+/**
+ * XML用に要素をエスケープします
+ * @param {String} str エスケープを行いたい文字列
+ */
+function xmlAttrContentEscape(str){
+    return str.replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;').replace(/"/g, '&quot;');
+}
+
+/**
+ * 日記本文に日付を付加します
+ * @param {String} contents 日記の本文が格納されている文字列
+ * @param {String} id 日記の初公開日を示す日付文字列
+ */
+function contentsWithid(contents, id){
+    // リンク用文末作成
+    var hashTag = '<br/><div style="text-align: right;"><a href="' +
+    xmlAttrContentEscape(blogUrl) +
+    '#' +
+    xmlAttrContentEscape(id) +
+    '" target="_blank">- この日の記事にリンクする -<\/a><\/span>';
+    return contents + hashTag;
+}
+
+/**
+ * 強調タグを追加します
+ * @param {String} word 強調したい語句
+ */
+function emphasizeWord(word){
+    return '<span style="background-color: red;">' + word + '</span>';
+}
+
+/**
+ * 長い順に並べるための比較関数です
+ * @param {String} a 比較対象(1)
+ * @param {String} b 比較対象(2)
+ */
+function compareLengthDecrease(a, b){
+    a = a.length;
+    b = b.length;
+    return a > b ? -1 : a < b ? 1 : 0;
+}
+
+/**
+ * セマフォ制御用のオブジェクトです
+ */
+function Semaphore(){
+    this.id = null;
+    this.count = 0;
+    this.buf = [];
+    this.xhrs = [];
+}
+
+/**
+ * セマフォ初期化用の関数です
+ */
+Semaphore.prototype.init = function(){
+    while (this.xhrs.length > 0) {
+        this.xhrs.shift().abort();
+    }
+    this.id = Math.random();
+    this.count = 0;
+    this.buf = [];
+}
+
+/**
+ * ログファイル選択用のコンボボックスをid名:logSelecterに生成します
+ */
+function logXMLLoader(){
+    // ログ用のXMLを読み込みます
+    jQuery.ajax({
+        url: logXmlUrl,
+        method: "GET",
+        error: showError,
+        success: function(xmlData){
+            var separateTag = xmlData.getElementsByTagName("file");
+            logData = new Array(separateTag.length)
+            
+            // 読み込んだ要素をStoreに格納して表示
+            var boxBuffer = [];
+            boxBuffer.push("<select name='logbox' style='width: " + extComboWidth + "px'>");
+            for (var i = 0; i < separateTag.length; i++) {
+                boxBuffer.push("<option value='" + separateTag[i].getElementsByTagName("path")[0].firstChild.nodeValue + "'/>" + separateTag[i].getElementsByTagName("display")[0].firstChild.nodeValue);
+                logData[i] = separateTag[i].getElementsByTagName("path")[0].firstChild.nodeValue;
+            }
+            boxBuffer.push("</select>");
+            
+            // コンボボックス要素を生成
+            document.getElementById("logSelecter").innerHTML = boxBuffer.join("");
+        }
+    });
+}
+
+/**
+ * 検索単語を取得します
+ */
+function getSearchWords(){
+    var searchWord = document.getElementById("searchWord").value;
+    if (searchWord == "") 
+        return null;
+    var searchWords = [];
+    
+    // 検索単語をサニタイジングします
+    // HTMLのメタ文字
+    searchWord = xmlAttrContentEscape(searchWord);
+    // 正規表現のメタ文字
+    searchWord = searchWord.replace(/([$()*+.?\[\\\]^{}])/g, '\\$1');
+    // 半角スペースで配列に分割
+    searchWords = searchWord.replace(/^\s+|\+$/g, '').split(/\s+/);
+    // 正規表現の選択を長い順に並び替えます(AND条件)
+    searchWords.sort(compareLengthDecrease);
+    
+    return searchWords.length == 0 ? null : searchWords;
+}
+
+/**
+ * 文章内を特定の単語で検索し、一致した部分を強調表示タグで置き換えます
+ * @param {String} searchWord 探索する単語
+ * @param {String} plainText 探索を行う文章
+ * @param {String} regexpType 正規表現の検索モードを示す文字列
+ */
+function complexEmphasize(searchWord, plainText, regexpType){
+    // 正規表現の選択を長い順に並び替える
+    searchWord = searchWord.split('|').sort(compareLengthDecrease).join('|');
+    // タグの内側でないことを確認する正規表現を追加
+    var pattern = new RegExp('(?:' + searchWord + ')(?![^<>]*>)', regexpType);
+    
+    var result = [];
+    var currentIndex = -1; // 現在マッチしている部分文字列の開始位置
+    var currentLastIndex = -1; // 現在マッチしている部分文字列の、現在の末尾
+    var m; // 正規表現マッチの結果配列
+    while (m = pattern.exec(plainText)) {
+        if (m.index > currentLastIndex) {
+            // 新しい部分文字列へのマッチが始まったので、そこまでの文字列をバッファに書き出す
+            if (currentIndex < currentLastIndex) 
+                result.push(emphasizeWord(plainText.substring(currentIndex, currentLastIndex)));
+            result.push(plainText.substring(currentLastIndex, m.index));
+            // 開始位置の更新
+            currentIndex = m.index;
+        }
+        // 末尾位置を更新
+        currentLastIndex = pattern.lastIndex;
+        // 次の正規表現マッチは今マッチした文字の次の文字から
+        pattern.lastIndex = m.index + 1;
+    }
+    // 残った文字列を書き出す
+    if (currentIndex < currentLastIndex) 
+        result.push(emphasizeWord(plainText.substring(currentIndex, currentLastIndex)));
+    result.push(plainText.substring(currentLastIndex));
+    
+    // 結合して返す
+    return result.join('');
+}
+
+/**
+ * 検索結果を分割して表示します(2回目以降呼び出し)
+ * @param {int} showLength 一回の画面に表示する記事数
+ * @param {int} startIndex 表示を開始する日記のインデックス
+ */
+function showEntriesRange(showLength, startIndex){
+    // メモリ上から日記データをロード
+    var entries = loadedEntries;
+    
+    // 表示インデックスが範囲外の場合はエラーパネルを表示して終了
+    if (startIndex < 0 || entries.length <= startIndex) {
+        showError();
+        return;
+    }
+    
+    var stringBuffer = [];
+    
+    // リミッターを設定する
+    var loopLimit = (showLength + startIndex > entries.length) ? entries.length : showLength + startIndex;
+    var indexShowEntries = loopLimit + 1;
+    
+    for (var i = startIndex; i < loopLimit; i++) {
+        stringBuffer.push('<div id="drawPanel');
+        stringBuffer.push(i);
+        stringBuffer.push('"><div id="drawItem');
+        stringBuffer.push(i);
+        stringBuffer.push('" class="code"><\/div><\/div><div style="line-height: 3px;"><br/></div>');
+    }
+    document.getElementById("writeArea").innerHTML = stringBuffer.join('');
+    
+    stringBuffer.length = 0;
+    for (i = startIndex; i < loopLimit; i++) {
+        var entry = entries[i];
+        document.getElementById("drawItem" + i).innerHTML = contentsWithid(entry.content, entry.id);
+        generatePanel(entry.title + " / " + entry.date, "drawItem" + i, "drawPanel" + i, false);
+    }
+    
+    // メニュー表示用バッファ
+    var menuBuffer = [];
+    menuBuffer.push("<table width='" +
+    100 +
+    "%' class='pager' align='center'><tbody><tr>");
+    // 左パネルの表示制御
+    if (startIndex - showLength >= 0) {
+        menuBuffer.push("\<td align='left'><a href='' onclick='showEntriesRange(" +
+        showLength +
+        ", " +
+        (startIndex - showLength) +
+        "); return false;'>\<\<\< 前の" +
+        showLength +
+        "件を表示</a\></td>");
+    }
+    else {
+        menuBuffer.push("\<td align='left'>\<\<\< 前の" +
+        showLength +
+        "件を表示</a\></td>");
+    }
+    
+    // 中央のパネルの表示制御
+    menuBuffer.push("<td align='center'>[ ");
+    var menuNumbers = Math.ceil(entries.length / showLength);
+    for (i = 0; i < menuNumbers; i++) {
+        if (startIndex / showLength == i) {
+            menuBuffer.push(i + " ");
+        }
+        else {
+            menuBuffer.push("<a href='' onclick='showEntriesRange(" +
+            showLength +
+            ", " +
+            (i * showLength) +
+            "); return false;'>");
+            menuBuffer.push(i);
+            menuBuffer.push("</a> ");
+        }
+    }
+    menuBuffer.push("]</td>");
+    
+    // 右パネルの表示制御
+    if (entries.length > startIndex + showLength) {
+        menuBuffer.push("\<td align='right'><a href='' onclick='showEntriesRange(" +
+        showLength +
+        ", " +
+        (startIndex + showLength) +
+        "); return false;'>次の" +
+        showLength +
+        "件を表示 \>\>\></a\></td>");
+    }
+    else {
+        menuBuffer.push("\<td align='right'>次の" +
+        showLength +
+        "件を表示 \>\>\></a\></td>");
+    }
+    menuBuffer.push("</tr></tbody></table>");
+    
+    // 検索結果を表示します
+    document.getElementById("resultWriteArea").innerHTML = "\<b\>検索結果\</b\>\<br/\>" +
+    entries.length +
+    "件の記事が該当しました /  " +
+    (startIndex + 1) +
+    "~" +
+    loopLimit +
+    "件目までを表示中<br/>" +
+    menuBuffer.join("");
+}
+
+/**
+ * 検索時のjQuery.ajaxのcallback関数
+ */
+function fetchEntries(xmlData){
+    // 大文字小文字を区別するかを取得します
+    var regexpOptionI = document.searchForm.regexpOptionI.checked;
+    var regexpType = regexpOptionI ? "ig" : "g";
+    
+    // entry要素のみを切り出します
+    var entries = xmlData.getElementsByTagName("entry");
+    
+    // entry要素の回数だけ実行します
+    for (var j = 0; j < entries.length; j++) {
+        var entry = new Entry(entries[j]);
+        
+        // 正規表現が一致した場合は、強調表現処理を行います
+        if (entry.hasKeywords(currentSearchWords, regexpType)) {
+            // 強調表現を実行します
+            entry.title = complexEmphasize(currentSearchWords.join("|"), entry.title, regexpType);
+            entry.content = complexEmphasize(currentSearchWords.join("|"), entry.content, regexpType);
+            
+            fetchEntriesSemaphore.buf.push(entry);
+        }
+    }
+    
+    // セマフォのカウンタを減少させます (Ajaxとの同期のため)
+    fetchEntriesSemaphore.count--;
+    
+    // 全てのログを読み終わったら表示
+    if (fetchEntriesSemaphore.count == 0) {
+        var entries = fetchEntriesSemaphore.buf;
+        
+        // 一軒も検索にヒットしなかった場合は専用のパネルを表示して終了
+        if (entries.length == 0) {
+            notFoundError();
+            return;
+        }
+        
+        // entryをidでソート
+        entries = entries.sort(function(a, b){
+            a = a.id;
+            b = b.id;
+            return a > b ? -1 : a < b ? 1 : 0
+        });
+        
+        loadedEntries = entries;
+        
+        // 表示ロジック呼び出し
+        showEntriesRange(showLength, 0);
+    }
+}
+
+/**
+ * 「探索」ボタンを押されたときに呼び出されるメソッドです
+ */
+function searchDiary(){
+    // 検索結果フィールドをクリアします
+    document.getElementById("writeArea").innerHTML = "";
+    
+    // 探索したい単語を取得します
+    currentSearchWords = getSearchWords();
+    if (!currentSearchWords) {
+        alert("検索対象の単語が入力されていません");
+        // 検索結果の欄をリセットします
+        document.getElementById("resultWriteArea").innerHTML = "\<b\>検索結果\</b\>";
+        return;
+    }
+    
+    // ロードエフェクトを表示します
+    loadingEffect();
+    
+    // 全チェックを取得します
+    var allCheckedFlag = document.searchForm.allSearchCheck.checked;
+    
+    // セマフォを初期化
+    fetchEntriesSemaphore.init();
+    // 日記が全検索モードか否かをチェックします
+    var isAsyncOn = null;
+    var urls = null;
+    if (allCheckedFlag == true) {
+        // 全文検索時、通信のモードが非同期か否か
+        isAsyncOn = document.searchForm.isAsyncOn.checked;
+        // 全日記検索なので全てのログのURL
+        urls = logData;
+    }
+    else {
+        // 単独日記探索なので、選んだログのURL
+        urls = [document.searchForm.logbox.options[document.searchForm.logbox.selectedIndex].value];
+    }
+    fetchEntriesSemaphore.urls = urls;
+    fetchEntriesSemaphore.count = urls.length;
+    for (i = 0; i < urls.length; i++) {
+        var xhr = new jQuery.ajax({
+            url: urls[i],
+            method: "POST",
+            async: isAsyncOn,
+            success: fetchEntries,
+            error: showError
+        });
+        fetchEntriesSemaphore.xhrs.push(xhr);
+    }
+}
diff --git a/search.html b/search.html
new file mode 100644 (file)
index 0000000..f02067d
--- /dev/null
@@ -0,0 +1,109 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<html>
+    <head>
+        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+        <title>日記検索フォームサンプル</title>
+        <link rel="alternate" type="application/atom+xml" title="Atom" href="./xml/diary.xml"/>
+        <script type="text/javascript" src="./js/jquery/jquery-1.3.2.min.js">
+        </script>
+        <script type="text/javascript" src="./js/lunardial/feedblog_search.js">
+        </script>
+        <style type="text/css">
+            body {
+                font-size: 12px;
+                line-height: 18px;
+                color: #004488;
+                margin-top: 30px;
+                margin-bottom: 30px;
+            }
+            
+            td.default {
+                font-size: 12px;
+                line-height: 18px;
+                color: #004488;
+                border: 1px solid #8888ff;
+                text-align: left;
+                vertical-align: top;
+            }
+            
+            div {
+                text-align: left;
+            }
+            
+            form {
+                text-align: left;
+            }
+            
+            td.header {
+                margin: 0px;
+                padding: 0px;
+                border: 1px solid #a8a8ff;
+                padding: 4px;
+                font-weight: bold;
+                background-color: #ffffff;
+            }
+            
+            td.content {
+                margin: 0px;
+                padding: 0px;
+                border: 1px solid #a8a8ff;
+                background-color: #ffffff;
+            }
+            
+            div.code {
+                background: #f8f8ff;
+                border: 1px solid #c8c8ff;
+                padding: 10px;
+                margin: 10px;
+                margin-left: 0px;
+                border-left: 5px solid #e8e8ff;
+                font-size: 12px;
+                line-height: 18px;
+            }
+            
+            table.pager {
+                padding: 0px;
+                margin: 0px;
+                border: 1px solid #8888ff;
+            }
+            
+            td.searchform {
+                border: 1px solid #8888ff;
+                padding: 10px;
+            }
+            
+            td.resultarea {
+                border: 1px solid #8888ff;
+                padding: 5px;
+            }
+        </style>
+    </head>
+    <body>
+        <center>
+            <table align="center" style="width: 800px;">
+                <tbody>
+                    <tr>
+                        <td class="default" colspan="2" style="height: 150px; padding: 5px; text-align: right; vertical-align: bottom;">
+                            <span style="font-size: 20px; font-weight: bold;">[ タイトルを入れてください ]</span>
+                            <br>
+                            [ 説明文を入れてください ]
+                        </td>
+                    </tr>
+                </tbody>
+            </table>
+            <br/>
+            <table>
+                <tbody>
+                    <tr>
+                        <td>
+                            <div id="genForm">
+                            </div>
+                            <div id="resultArea">
+                            </div>
+                        </td>
+                    </tr>
+                </tbody>
+            </table>
+        </center>
+    </body>
+</html>
diff --git a/xml/diary.xml b/xml/diary.xml
new file mode 100644 (file)
index 0000000..dbc2865
--- /dev/null
@@ -0,0 +1,44 @@
+<?xml version="1.0" encoding="utf-8"?>
+<feed xml:lang="ja-jp" xmlns="http://www.w3.org/2005/Atom">
+
+<title type="text">さんぷる</title>
+<subtitle type="text">このファイルはサンプルのファイルです。</subtitle>
+<link rel="self" type="application/atom+xml" href="" />
+<link rel="alternate" type="text/html" href="http://www.yourdomain.com/index.html" />
+<updated>2009-01-27T22:07:10+09:00</updated>
+<id>urn:uuid:sample</id>
+<rights type="text">Copyright (c) YYYY, [Please input your name.]</rights>
+<author>
+       <name>Please input your name.</name>
+       <email>Please input your e-mail.</email>
+</author>
+
+<entry>
+<id>urn:uuid:sample;2009-01-27T22:03:57+09:00</id>
+<title>タグの取り扱いについて</title>
+<summary></summary>
+<published>2009-01-27T22:03:57+09:00</published>
+<updated>2009-01-27T22:03:57+09:00</updated>
+<link href="../index.html#urn:uuid:sample;2009-01-27T22:03:57+09:00" />
+<content type="html"> FeedBlog Scriptでは&lt;span style=&quot;font-weight: bold;&quot;&gt;このように&lt;/span&gt;、タグを扱うことも可能です。
+ ただしその際はエンティティ参照でタグを書く必要があります。
+ 詳しくはXML標準のエンティティ参照に関するドキュメントか、ウェブページをご覧下さい。
+
+・&lt;a href=&quot;http://msdn.microsoft.com/ja-jp/library/ms256190(VS.80).aspx&quot; target=&quot;_blank&quot; &gt;文字参照とエンティティ参照[XMl標準]&lt;/a&gt; (MSDN)
+・&lt;a href=&quot;http://gogodiet.net/z/xml/3_10.htm&quot; target=&quot;_blank&quot; &gt;XML エンティティ参照(エスケープ文字)&lt;/a&gt; 
+</content>
+</entry>
+
+<entry>
+<id>urn:uuid:sample;2008-10-24T21:03:18+09:00</id>
+<title>にっきてすと</title>
+<summary>この日記はテストです。</summary>
+<published>2008-10-24T21:03:18+09:00</published>
+<updated>2008-10-24T21:03:18+09:00</updated>
+<link href="../index.html#urn:uuid:sample;2008-10-24T21:03:18+09:00" />
+<content type="html"> この日記はテスト日記です。
+ 基本的な機能、及び正常に表示できているかを確認するのにご使用下さい。
+</content>
+</entry>
+
+</feed>
diff --git a/xml/loglist.xml b/xml/loglist.xml
new file mode 100644 (file)
index 0000000..9275329
--- /dev/null
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="utf-8"?>
+
+<list>
+
+       <file>
+
+               <display>最新の記事</display>
+
+               <path>./xml/diary.xml</path>
+
+       </file>
+
+       <file>
+
+               <display>ログファイル(1)</display>
+
+               <path>./xml/samplelog.xml</path>
+
+       </file>
+
+</list>
\ No newline at end of file
diff --git a/xml/samplelog.xml b/xml/samplelog.xml
new file mode 100644 (file)
index 0000000..e698a47
--- /dev/null
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="utf-8"?>
+<feed xml:lang="ja-jp" xmlns="http://www.w3.org/2005/Atom">
+
+<title type="text">ろぐふぁいる</title>
+<subtitle type="text">このファイルはサンプルのログファイルです。</subtitle>
+<link rel="self" type="application/atom+xml" href="" />
+<link rel="alternate" type="text/html" href="http://www.lunardial.com/" />
+<updated>2009-01-27T22:10:09+09:00</updated>
+<id>urn:uuid:sample</id>
+<rights type="text"></rights>
+<author>
+       <name>Please input your name.</name>
+       <email>Please input your e-mail.</email>
+</author>
+
+<entry>
+<id>urn:uuid:sample;2008-09-24T21:03:15+09:00</id>
+<title>ログファイルてすと</title>
+<summary>このログファイルはテストです。</summary>
+<published>2008-09-24T21:03:18+09:00</published>
+<updated>2008-09-24T21:03:18+09:00</updated>
+<link href="http://www.lunardial.com/#urn:uuid:sample;2008-09-24T21:03:15+09:00" />
+<content type="html"> ログファイルの代わりです
+</content>
+</entry>
+
+</feed>