 
var Prototype={
Version:'1.4.0',
ScriptFragment:'(?:<script.*?>)((\n|\r|.)*?)(?:<\/script>)',

emptyFunction:function(){},
K:function(x){return x}
}

var Class={
create:function(){
return function(){
this.initialize.apply(this,arguments);
}
}
}

var Abstract=new Object();

Object.extend=function(destination,source){
for(property in source){
destination[property]=source[property];
}
return destination;
}

Object.prototype.extend=function(object){
return Object.extend.apply(this,[this,object]);
}

Object.inspect=function(object){
try{
if(object==undefined)return'undefined';
if(object==null)return'null';
return object.inspect?object.inspect():object.toString();
}catch(e){
if(e instanceof RangeError)return'...';
throw e;
}
}

Function.prototype.bind=function(){
var __method=this,args=$A(arguments),object=args.shift();
return function(){
return __method.apply(object,args.concat($A(arguments)));
}
}

Function.prototype.bindAsEventListener=function(object){
var __method=this;
return function(event){
return __method.call(object,event||window.event);
}
}

Object.extend(Number.prototype,{
toColorPart:function(){
var digits=this.toString(16);
if(this<16)return'0'+digits;
return digits;
},

succ:function(){
return this+1;
},

times:function(iterator){
$R(0,this,true).each(iterator);
return this;
}
});

var Try={
these:function(){
var returnValue;

for(var i=0;i<arguments.length;i++){
var lambda=arguments[i];
try{
returnValue=lambda();
break;
}catch(e){}
}

return returnValue;
}
}

 

var PeriodicalExecuter=Class.create();
PeriodicalExecuter.prototype={
initialize:function(callback,frequency){
this.callback=callback;
this.frequency=frequency;
this.currentlyExecuting=false;

this.registerCallback();
},

registerCallback:function(){
setInterval(this.onTimerEvent.bind(this),this.frequency*1000);
},

onTimerEvent:function(){
if(!this.currentlyExecuting){
try{
this.currentlyExecuting=true;
this.callback();
}finally{
this.currentlyExecuting=false;
}
}
}
}

 

function $(){
var elements=new Array();

for(var i=0;i<arguments.length;i++){
var element=arguments[i];
if(typeof element=='string')
element=document.getElementById(element);

if(arguments.length==1)
return element;

elements.push(element);
}

return elements;
}
Object.extend(String.prototype,{
stripTags:function(){
return this.replace(/<\/?[^>]+>/gi,'');
},

stripScripts:function(){
return this.replace(new RegExp(Prototype.ScriptFragment,'img'),'');
},

extractScripts:function(){
var matchAll=new RegExp(Prototype.ScriptFragment,'img');
var matchOne=new RegExp(Prototype.ScriptFragment,'im');
return(this.match(matchAll)||[]).map(function(scriptTag){
return(scriptTag.match(matchOne)||['',''])[1];
});
},

evalScripts:function(){
return this.extractScripts().map(eval);
},

escapeHTML:function(){
var div=document.createElement('div');
var text=document.createTextNode(this);
div.appendChild(text);
return div.innerHTML;
},

unescapeHTML:function(){
var div=document.createElement('div');
div.innerHTML=this.stripTags();
return div.childNodes[0]?div.childNodes[0].nodeValue:'';
},

toQueryParams:function(){
var pairs=this.match(/^\??(.*)$/)[1].split('&');
return pairs.inject({},function(params,pairString){
var pair=pairString.split('=');
params[pair[0]]=pair[1];
return params;
});
},

toArray:function(){
return this.split('');
},

camelize:function(){
var oStringList=this.split('-');
if(oStringList.length==1)return oStringList[0];

var camelizedString=this.indexOf('-')==0
?oStringList[0].charAt(0).toUpperCase()+oStringList[0].substring(1)
:oStringList[0];

for(var i=1,len=oStringList.length;i<len;i++){
var s=oStringList[i];
camelizedString+=s.charAt(0).toUpperCase()+s.substring(1);
}

return camelizedString;
},

inspect:function(){
return"'"+this.replace('\\','\\\\').replace("'",'\\\'')+"'";
}
});

String.prototype.parseQuery=String.prototype.toQueryParams;

var $break=new Object();
var $continue=new Object();

var Enumerable={
each:function(iterator){
var index=0;
try{
this._each(function(value){
try{
iterator(value,index++);
}catch(e){
if(e!=$continue)throw e;
}
});
}catch(e){
if(e!=$break)throw e;
}
},

all:function(iterator){
var result=true;
this.each(function(value,index){
result=result&&!!(iterator||Prototype.K)(value,index);
if(!result)throw $break;
});
return result;
},

any:function(iterator){
var result=true;
this.each(function(value,index){
if(result=!!(iterator||Prototype.K)(value,index))
throw $break;
});
return result;
},

collect:function(iterator){
var results=[];
this.each(function(value,index){
results.push(iterator(value,index));
});
return results;
},

detect:function(iterator){
var result;
this.each(function(value,index){
if(iterator(value,index)){
result=value;
throw $break;
}
});
return result;
},

findAll:function(iterator){
var results=[];
this.each(function(value,index){
if(iterator(value,index))
results.push(value);
});
return results;
},

grep:function(pattern,iterator){
var results=[];
this.each(function(value,index){
var stringValue=value.toString();
if(stringValue.match(pattern))
results.push((iterator||Prototype.K)(value,index));
});
return results;
},

include:function(object){
var found=false;
this.each(function(value){
if(value==object){
found=true;
throw $break;
}
});
return found;
},

inject:function(memo,iterator){
this.each(function(value,index){
memo=iterator(memo,value,index);
});
return memo;
},

invoke:function(method){
var args=$A(arguments).slice(1);
return this.collect(function(value){
return value[method].apply(value,args);
});
},

max:function(iterator){
var result;
this.each(function(value,index){
value=(iterator||Prototype.K)(value,index);
if(value>=(result||value))
result=value;
});
return result;
},

min:function(iterator){
var result;
this.each(function(value,index){
value=(iterator||Prototype.K)(value,index);
if(value<=(result||value))
result=value;
});
return result;
},

partition:function(iterator){
var trues=[],falses=[];
this.each(function(value,index){
((iterator||Prototype.K)(value,index)?
trues:falses).push(value);
});
return[trues,falses];
},

pluck:function(property){
var results=[];
this.each(function(value,index){
results.push(value[property]);
});
return results;
},

reject:function(iterator){
var results=[];
this.each(function(value,index){
if(!iterator(value,index))
results.push(value);
});
return results;
},

sortBy:function(iterator){
return this.collect(function(value,index){
return{value:value,criteria:iterator(value,index)};
}).sort(function(left,right){
var a=left.criteria,b=right.criteria;
return a<b?-1:a>b?1:0;
}).pluck('value');
},

toArray:function(){
return this.collect(Prototype.K);
},

zip:function(){
var iterator=Prototype.K,args=$A(arguments);
if(typeof args.last()=='function')
iterator=args.pop();

var collections=[this].concat(args).map($A);
return this.map(function(value,index){
iterator(value=collections.pluck(index));
return value;
});
},

inspect:function(){
return'#<Enumerable:'+this.toArray().inspect()+'>';
}
}

Object.extend(Enumerable,{
map:Enumerable.collect,
find:Enumerable.detect,
select:Enumerable.findAll,
member:Enumerable.include,
entries:Enumerable.toArray
});
var $A=Array.from=function(iterable){
if(!iterable)return[];
if(iterable.toArray){
return iterable.toArray();
}else{
var results=[];
for(var i=0;i<iterable.length;i++)
results.push(iterable[i]);
return results;
}
}

Object.extend(Array.prototype,Enumerable);

Array.prototype._reverse=Array.prototype.reverse;

Object.extend(Array.prototype,{
_each:function(iterator){
for(var i=0;i<this.length;i++)
iterator(this[i]);
},

clear:function(){
this.length=0;
return this;
},

first:function(){
return this[0];
},

last:function(){
return this[this.length-1];
},

compact:function(){
return this.select(function(value){
return value!=undefined||value!=null;
});
},

flatten:function(){
return this.inject([],function(array,value){
return array.concat(value.constructor==Array?
value.flatten():[value]);
});
},

without:function(){
var values=$A(arguments);
return this.select(function(value){
return!values.include(value);
});
},

indexOf:function(object){
for(var i=0;i<this.length;i++)
if(this[i]==object)return i;
return-1;
},

reverse:function(inline){
return(inline!==false?this:this.toArray())._reverse();
},

shift:function(){
var result=this[0];
for(var i=0;i<this.length-1;i++)
this[i]=this[i+1];
this.length--;
return result;
},

inspect:function(){
return'['+this.map(Object.inspect).join(', ')+']';
}
});
var Hash={
_each:function(iterator){
for(key in this){
var value=this[key];
if(typeof value=='function')continue;

var pair=[key,value];
pair.key=key;
pair.value=value;
iterator(pair);
}
},

keys:function(){
return this.pluck('key');
},

values:function(){
return this.pluck('value');
},

merge:function(hash){
return $H(hash).inject($H(this),function(mergedHash,pair){
mergedHash[pair.key]=pair.value;
return mergedHash;
});
},

toQueryString:function(){
return this.map(function(pair){
return pair.map(encodeURIComponent).join('=');
}).join('&');
},

inspect:function(){
return'#<Hash:{'+this.map(function(pair){
return pair.map(Object.inspect).join(': ');
}).join(', ')+'}>';
}
}

function $H(object){
var hash=Object.extend({},object||{});
Object.extend(hash,Enumerable);
Object.extend(hash,Hash);
return hash;
}
ObjectRange=Class.create();
Object.extend(ObjectRange.prototype,Enumerable);
Object.extend(ObjectRange.prototype,{
initialize:function(start,end,exclusive){
this.start=start;
this.end=end;
this.exclusive=exclusive;
},

_each:function(iterator){
var value=this.start;
do{
iterator(value);
value=value.succ();
}while(this.include(value));
},

include:function(value){
if(value<this.start)
return false;
if(this.exclusive)
return value<this.end;
return value<=this.end;
}
});

var $R=function(start,end,exclusive){
return new ObjectRange(start,end,exclusive);
}

var Ajax={
getTransport:function(){
return Try.these(
function(){return new ActiveXObject('Msxml2.XMLHTTP')},
function(){return new ActiveXObject('Microsoft.XMLHTTP')},
function(){return new XMLHttpRequest()}
)||false;
},

activeRequestCount:0
}

Ajax.Responders={
responders:[],

_each:function(iterator){
this.responders._each(iterator);
},

register:function(responderToAdd){
if(!this.include(responderToAdd))
this.responders.push(responderToAdd);
},

unregister:function(responderToRemove){
this.responders=this.responders.without(responderToRemove);
},

dispatch:function(callback,request,transport,json){
this.each(function(responder){
if(responder[callback]&&typeof responder[callback]=='function'){
try{
responder[callback].apply(responder,[request,transport,json]);
}catch(e){}
}
});
}
};

Object.extend(Ajax.Responders,Enumerable);

Ajax.Responders.register({
onCreate:function(){
Ajax.activeRequestCount++;
},

onComplete:function(){
Ajax.activeRequestCount--;
}
});

Ajax.Base=function(){};
Ajax.Base.prototype={
setOptions:function(options){
this.options={
method:'post',
asynchronous:true,
parameters:''
}
Object.extend(this.options,options||{});
},

responseIsSuccess:function(){
return this.transport.status==undefined
||this.transport.status==0
||(this.transport.status>=200&&this.transport.status<300);
},

responseIsFailure:function(){
return!this.responseIsSuccess();
}
}

Ajax.Request=Class.create();
Ajax.Request.Events=
['Uninitialized','Loading','Loaded','Interactive','Complete'];

Ajax.Request.prototype=Object.extend(new Ajax.Base(),{
initialize:function(url,options){
this.transport=Ajax.getTransport();
this.setOptions(options);
this.request(url);
},

request:function(url){
var parameters=this.options.parameters||'';
if(parameters.length>0)parameters+='&_=';

try{
this.url=url;
if(this.options.method=='get'&&parameters.length>0)
this.url+=(this.url.match(/\?/)?'&':'?')+parameters;

Ajax.Responders.dispatch('onCreate',this,this.transport);

this.transport.open(this.options.method,this.url,
this.options.asynchronous);

if(this.options.asynchronous){
this.transport.onreadystatechange=this.onStateChange.bind(this);
setTimeout((function(){this.respondToReadyState(1)}).bind(this),10);
}

this.setRequestHeaders();

var body=this.options.postBody?this.options.postBody:parameters;
this.transport.send(this.options.method=='post'?body:null);

}catch(e){
this.dispatchException(e);
}
},

setRequestHeaders:function(){
var requestHeaders=
['X-Requested-With','XMLHttpRequest',
'X-Prototype-Version',Prototype.Version];

if(this.options.method=='post'){
requestHeaders.push('Content-type',
'application/x-www-form-urlencoded');

 
if(this.transport.overrideMimeType)
requestHeaders.push('Connection','close');
}

if(this.options.requestHeaders)
requestHeaders.push.apply(requestHeaders,this.options.requestHeaders);

for(var i=0;i<requestHeaders.length;i+=2)
this.transport.setRequestHeader(requestHeaders[i],requestHeaders[i+1]);
},

onStateChange:function(){
var readyState=this.transport.readyState;
if(readyState!=1)
this.respondToReadyState(this.transport.readyState);
},

header:function(name){
try{
return this.transport.getResponseHeader(name);
}catch(e){}
},

evalJSON:function(){
try{
return eval(this.header('X-JSON'));
}catch(e){}
},

evalResponse:function(){
try{
return eval(this.transport.responseText);
}catch(e){
this.dispatchException(e);
}
},

respondToReadyState:function(readyState){
var event=Ajax.Request.Events[readyState];
var transport=this.transport,json=this.evalJSON();

if(event=='Complete'){
try{
(this.options['on'+this.transport.status]
||this.options['on'+(this.responseIsSuccess()?'Success':'Failure')]
||Prototype.emptyFunction)(transport,json);

Ajax.Responders.dispatch('on'+(this.responseIsSuccess()?'Success':'Failure'),this,transport);

}catch(e){
this.dispatchException(e);
}

if((this.header('Content-type')||'').match(/^text\/javascript/i))
this.evalResponse();
}

try{
(this.options['on'+event]||Prototype.emptyFunction)(transport,json);
Ajax.Responders.dispatch('on'+event,this,transport,json);
}catch(e){
this.dispatchException(e);
}

 
if(event=='Complete')
this.transport.onreadystatechange=Prototype.emptyFunction;
},

dispatchException:function(exception){
(this.options.onException||Prototype.emptyFunction)(this,exception);
Ajax.Responders.dispatch('onException',this,exception);
}
});

Ajax.Updater=Class.create();

Object.extend(Object.extend(Ajax.Updater.prototype,Ajax.Request.prototype),{
initialize:function(container,url,options){
this.containers={
success:container.success?$(container.success):$(container),
failure:container.failure?$(container.failure):
(container.success?null:$(container))
}

this.transport=Ajax.getTransport();
this.setOptions(options);

var onComplete=this.options.onComplete||Prototype.emptyFunction;
this.options.onComplete=(function(transport,object){
this.updateContent();
onComplete(transport,object);
}).bind(this);

this.request(url);
},

updateContent:function(){
var receiver=this.responseIsSuccess()?
this.containers.success:this.containers.failure;
var response=this.transport.responseText;

if(!this.options.evalScripts)
response=response.stripScripts();

if(receiver){
if(this.options.insertion){
new this.options.insertion(receiver,response);
}else{
Element.update(receiver,response);
}
}

if(this.responseIsSuccess()){
if(this.onComplete)
setTimeout(this.onComplete.bind(this),10);
}
}
});

Ajax.PeriodicalUpdater=Class.create();
Ajax.PeriodicalUpdater.prototype=Object.extend(new Ajax.Base(),{
initialize:function(container,url,options){
this.setOptions(options);
this.onComplete=this.options.onComplete;

this.frequency=(this.options.frequency||2);
this.decay=(this.options.decay||1);

this.updater={};
this.container=container;
this.url=url;

this.start();
},

start:function(){
this.options.onComplete=this.updateComplete.bind(this);
this.onTimerEvent();
},

stop:function(){
this.updater.onComplete=undefined;
clearTimeout(this.timer);
(this.onComplete||Prototype.emptyFunction).apply(this,arguments);
},

updateComplete:function(request){
if(this.options.decay){
this.decay=(request.responseText==this.lastText?
this.decay*this.options.decay:1);

this.lastText=request.responseText;
}
this.timer=setTimeout(this.onTimerEvent.bind(this),
this.decay*this.frequency*1000);
},

onTimerEvent:function(){
this.updater=new Ajax.Updater(this.container,this.url,this.options);
}
});
document.getElementsByClassName=function(className,parentElement){
var children=($(parentElement)||document.body).getElementsByTagName('*');
return $A(children).inject([],function(elements,child){
if(child.className.match(new RegExp("(^|\\s)"+className+"(\\s|$)")))
elements.push(child);
return elements;
});
}


 

if(!window.Element){
var Element=new Object();
}

Object.extend(Element,{
visible:function(element){
return $(element).style.display!='none';
},

toggle:function(){
for(var i=0;i<arguments.length;i++){
var element=$(arguments[i]);
Element[Element.visible(element)?'hide':'show'](element);
}
},

hide:function(){
for(var i=0;i<arguments.length;i++){
var element=$(arguments[i]);
element.style.display='none';
}
},

show:function(){
for(var i=0;i<arguments.length;i++){
var element=$(arguments[i]);
element.style.display='';
}
},

remove:function(element){
element=$(element);
element.parentNode.removeChild(element);
},

update:function(element,html){
$(element).innerHTML=html.stripScripts();
setTimeout(function(){html.evalScripts()},10);
},

getHeight:function(element){
element=$(element);
return element.offsetHeight;
},

classNames:function(element){
return new Element.ClassNames(element);
},

hasClassName:function(element,className){
if(!(element=$(element)))return;
return Element.classNames(element).include(className);
},

addClassName:function(element,className){
if(!(element=$(element)))return;
return Element.classNames(element).add(className);
},

removeClassName:function(element,className){
if(!(element=$(element)))return;
return Element.classNames(element).remove(className);
},


cleanWhitespace:function(element){
element=$(element);
for(var i=0;i<element.childNodes.length;i++){
var node=element.childNodes[i];
if(node.nodeType==3&&!/\S/.test(node.nodeValue))
Element.remove(node);
}
},

empty:function(element){
return $(element).innerHTML.match(/^\s*$/);
},

scrollTo:function(element){
element=$(element);
var x=element.x?element.x:element.offsetLeft,
y=element.y?element.y:element.offsetTop;
window.scrollTo(x,y);
},

getStyle:function(element,style){
element=$(element);
var value=element.style[style.camelize()];
if(!value){
if(document.defaultView&&document.defaultView.getComputedStyle){
var css=document.defaultView.getComputedStyle(element,null);
value=css?css.getPropertyValue(style):null;
}else if(element.currentStyle){
value=element.currentStyle[style.camelize()];
}
}

if(window.opera&&['left','top','right','bottom'].include(style))
if(Element.getStyle(element,'position')=='static')value='auto';

return value=='auto'?null:value;
},

setStyle:function(element,style){
element=$(element);
for(name in style)
element.style[name.camelize()]=style[name];
},

getDimensions:function(element){
element=$(element);
if(Element.getStyle(element,'display')!='none')
return{width:element.offsetWidth,height:element.offsetHeight};



var els=element.style;
var originalVisibility=els.visibility;
var originalPosition=els.position;
els.visibility='hidden';
els.position='absolute';
els.display='';
var originalWidth=element.clientWidth;
var originalHeight=element.clientHeight;
els.display='none';
els.position=originalPosition;
els.visibility=originalVisibility;
return{width:originalWidth,height:originalHeight};
},

makePositioned:function(element){
element=$(element);
var pos=Element.getStyle(element,'position');
if(pos=='static'||!pos){
element._madePositioned=true;
element.style.position='relative';


if(window.opera){
element.style.top=0;
element.style.left=0;
}
}
},

undoPositioned:function(element){
element=$(element);
if(element._madePositioned){
element._madePositioned=undefined;
element.style.position=
element.style.top=
element.style.left=
element.style.bottom=
element.style.right='';
}
},

makeClipping:function(element){
element=$(element);
if(element._overflow)return;
element._overflow=element.style.overflow;
if((Element.getStyle(element,'overflow')||'visible')!='hidden')
element.style.overflow='hidden';
},

undoClipping:function(element){
element=$(element);
if(element._overflow)return;
element.style.overflow=element._overflow;
element._overflow=undefined;
}
});

var Toggle=new Object();
Toggle.display=Element.toggle;

 

Abstract.Insertion=function(adjacency){
this.adjacency=adjacency;
}

Abstract.Insertion.prototype={
initialize:function(element,content){
this.element=$(element);
this.content=content.stripScripts();

if(this.adjacency&&this.element.insertAdjacentHTML){
try{
this.element.insertAdjacentHTML(this.adjacency,this.content);
}catch(e){
if(this.element.tagName.toLowerCase()=='tbody'){
this.insertContent(this.contentFromAnonymousTable());
}else{
throw e;
}
}
}else{
this.range=this.element.ownerDocument.createRange();
if(this.initializeRange)this.initializeRange();
this.insertContent([this.range.createContextualFragment(this.content)]);
}

setTimeout(function(){content.evalScripts()},10);
},

contentFromAnonymousTable:function(){
var div=document.createElement('div');
div.innerHTML='<table><tbody>'+this.content+'</tbody></table>';
return $A(div.childNodes[0].childNodes[0].childNodes);
}
}

var Insertion=new Object();

Insertion.Before=Class.create();
Insertion.Before.prototype=Object.extend(new Abstract.Insertion('beforeBegin'),{
initializeRange:function(){
this.range.setStartBefore(this.element);
},

insertContent:function(fragments){
fragments.each((function(fragment){
this.element.parentNode.insertBefore(fragment,this.element);
}).bind(this));
}
});

Insertion.Top=Class.create();
Insertion.Top.prototype=Object.extend(new Abstract.Insertion('afterBegin'),{
initializeRange:function(){
this.range.selectNodeContents(this.element);
this.range.collapse(true);
},

insertContent:function(fragments){
fragments.reverse(false).each((function(fragment){
this.element.insertBefore(fragment,this.element.firstChild);
}).bind(this));
}
});

Insertion.Bottom=Class.create();
Insertion.Bottom.prototype=Object.extend(new Abstract.Insertion('beforeEnd'),{
initializeRange:function(){
this.range.selectNodeContents(this.element);
this.range.collapse(this.element);
},

insertContent:function(fragments){
fragments.each((function(fragment){
this.element.appendChild(fragment);
}).bind(this));
}
});

Insertion.After=Class.create();
Insertion.After.prototype=Object.extend(new Abstract.Insertion('afterEnd'),{
initializeRange:function(){
this.range.setStartAfter(this.element);
},

insertContent:function(fragments){
fragments.each((function(fragment){
this.element.parentNode.insertBefore(fragment,
this.element.nextSibling);
}).bind(this));
}
});

 

Element.ClassNames=Class.create();
Element.ClassNames.prototype={
initialize:function(element){
this.element=$(element);
},

_each:function(iterator){
this.element.className.split(/\s+/).select(function(name){
return name.length>0;
})._each(iterator);
},

set:function(className){
this.element.className=className;
},

add:function(classNameToAdd){
if(this.include(classNameToAdd))return;
this.set(this.toArray().concat(classNameToAdd).join(' '));
},

remove:function(classNameToRemove){
if(!this.include(classNameToRemove))return;
this.set(this.select(function(className){
return className!=classNameToRemove;
}).join(' '));
},

toString:function(){
return this.toArray().join(' ');
}
}

Object.extend(Element.ClassNames.prototype,Enumerable);
var Field={
clear:function(){
for(var i=0;i<arguments.length;i++)
$(arguments[i]).value='';
},

focus:function(element){
$(element).focus();
},

present:function(){
for(var i=0;i<arguments.length;i++)
if($(arguments[i]).value=='')return false;
return true;
},

select:function(element){
$(element).select();
},

activate:function(element){
element=$(element);
element.focus();
if(element.select)
element.select();
}
}

 

var Form={
serialize:function(form){
var elements=Form.getElements($(form));
var queryComponents=new Array();

for(var i=0;i<elements.length;i++){
var queryComponent=Form.Element.serialize(elements[i]);
if(queryComponent)
queryComponents.push(queryComponent);
}

return queryComponents.join('&');
},

getElements:function(form){
form=$(form);
var elements=new Array();

for(tagName in Form.Element.Serializers){
var tagElements=form.getElementsByTagName(tagName);
for(var j=0;j<tagElements.length;j++)
elements.push(tagElements[j]);
}
return elements;
},

getInputs:function(form,typeName,name){
form=$(form);
var inputs=form.getElementsByTagName('input');

if(!typeName&&!name)
return inputs;

var matchingInputs=new Array();
for(var i=0;i<inputs.length;i++){
var input=inputs[i];
if((typeName&&input.type!=typeName)||
(name&&input.name!=name))
continue;
matchingInputs.push(input);
}

return matchingInputs;
},

disable:function(form){
var elements=Form.getElements(form);
for(var i=0;i<elements.length;i++){
var element=elements[i];
element.blur();
element.disabled='true';
}
},

enable:function(form){
var elements=Form.getElements(form);
for(var i=0;i<elements.length;i++){
var element=elements[i];
element.disabled='';
}
},

findFirstElement:function(form){
return Form.getElements(form).find(function(element){
return element.type!='hidden'&&!element.disabled&&
['input','select','textarea'].include(element.tagName.toLowerCase());
});
},

focusFirstElement:function(form){
Field.activate(Form.findFirstElement(form));
},

reset:function(form){
$(form).reset();
}
}

Form.Element={
serialize:function(element){
element=$(element);
var method=element.tagName.toLowerCase();
var parameter=Form.Element.Serializers[method](element);

if(parameter){
var key=encodeURIComponent(parameter[0]);
if(key.length==0)return;

if(parameter[1].constructor!=Array)
parameter[1]=[parameter[1]];

return parameter[1].map(function(value){
return key+'='+encodeURIComponent(value);
}).join('&');
}
},

getValue:function(element){
element=$(element);
var method=element.tagName.toLowerCase();
var parameter=Form.Element.Serializers[method](element);

if(parameter)
return parameter[1];
}
}

Form.Element.Serializers={
input:function(element){
switch(element.type.toLowerCase()){
case'submit':
case'hidden':
case'password':
case'text':
return Form.Element.Serializers.textarea(element);
case'checkbox':
case'radio':
return Form.Element.Serializers.inputSelector(element);
}
return false;
},

inputSelector:function(element){
if(element.checked)
return[element.name,element.value];
},

textarea:function(element){
return[element.name,element.value];
},

select:function(element){
return Form.Element.Serializers[element.type=='select-one'?
'selectOne':'selectMany'](element);
},

selectOne:function(element){
var value='',opt,index=element.selectedIndex;
if(index>=0){
opt=element.options[index];
value=opt.value;
if(!value&&!('value'in opt))
value=opt.text;
}
return[element.name,value];
},

selectMany:function(element){
var value=new Array();
for(var i=0;i<element.length;i++){
var opt=element.options[i];
if(opt.selected){
var optValue=opt.value;
if(!optValue&&!('value'in opt))
optValue=opt.text;
value.push(optValue);
}
}
return[element.name,value];
}
}

 

var $F=Form.Element.getValue;

 

Abstract.TimedObserver=function(){}
Abstract.TimedObserver.prototype={
initialize:function(element,frequency,callback){
this.frequency=frequency;
this.element=$(element);
this.callback=callback;

this.lastValue=this.getValue();
this.registerCallback();
},

registerCallback:function(){
setInterval(this.onTimerEvent.bind(this),this.frequency*1000);
},

onTimerEvent:function(){
var value=this.getValue();
if(this.lastValue!=value){
this.callback(this.element,value);
this.lastValue=value;
}
}
}

Form.Element.Observer=Class.create();
Form.Element.Observer.prototype=Object.extend(new Abstract.TimedObserver(),{
getValue:function(){
return Form.Element.getValue(this.element);
}
});

Form.Observer=Class.create();
Form.Observer.prototype=Object.extend(new Abstract.TimedObserver(),{
getValue:function(){
return Form.serialize(this.element);
}
});

 

Abstract.EventObserver=function(){}
Abstract.EventObserver.prototype={
initialize:function(element,callback){
this.element=$(element);
this.callback=callback;

this.lastValue=this.getValue();
if(this.element.tagName.toLowerCase()=='form')
this.registerFormCallbacks();
else
 this.registerCallback(this.element);
},

onElementEvent:function(){
var value=this.getValue();
if(this.lastValue!=value){
this.callback(this.element,value);
this.lastValue=value;
}
},

registerFormCallbacks:function(){
var elements=Form.getElements(this.element);
for(var i=0;i<elements.length;i++)
this.registerCallback(elements[i]);
},

registerCallback:function(element){
if(element.type){
switch(element.type.toLowerCase()){
case'checkbox':
case'radio':
Event.observe(element,'click',this.onElementEvent.bind(this));
break;
case'password':
case'text':
case'textarea':
case'select-one':
case'select-multiple':
Event.observe(element,'change',this.onElementEvent.bind(this));
break;
}
}
}
}

Form.Element.EventObserver=Class.create();
Form.Element.EventObserver.prototype=Object.extend(new Abstract.EventObserver(),{
getValue:function(){
return Form.Element.getValue(this.element);
}
});

Form.EventObserver=Class.create();
Form.EventObserver.prototype=Object.extend(new Abstract.EventObserver(),{
getValue:function(){
return Form.serialize(this.element);
}
});
if(!window.Event){
var Event=new Object();
}

Object.extend(Event,{
KEY_BACKSPACE:8,
KEY_TAB:9,
KEY_RETURN:13,
KEY_ESC:27,
KEY_LEFT:37,
KEY_UP:38,
KEY_RIGHT:39,
KEY_DOWN:40,
KEY_DELETE:46,

element:function(event){
return event.target||event.srcElement;
},

isLeftClick:function(event){
return(((event.which)&&(event.which==1))||
((event.button)&&(event.button==1)));
},

pointerX:function(event){
return event.pageX||(event.clientX+
(document.documentElement.scrollLeft||document.body.scrollLeft));
},

pointerY:function(event){
return event.pageY||(event.clientY+
(document.documentElement.scrollTop||document.body.scrollTop));
},

stop:function(event){
if(event.preventDefault){
event.preventDefault();
event.stopPropagation();
}else{
event.returnValue=false;
event.cancelBubble=true;
}
},



findElement:function(event,tagName){
var element=Event.element(event);
while(element.parentNode&&(!element.tagName||
(element.tagName.toUpperCase()!=tagName.toUpperCase())))
element=element.parentNode;
return element;
},

observers:false,

_observeAndCache:function(element,name,observer,useCapture){
if(!this.observers)this.observers=[];
if(element.addEventListener){
this.observers.push([element,name,observer,useCapture]);
element.addEventListener(name,observer,useCapture);
}else if(element.attachEvent){
this.observers.push([element,name,observer,useCapture]);
element.attachEvent('on'+name,observer);
}
},

unloadCache:function(){
if(!Event.observers)return;
for(var i=0;i<Event.observers.length;i++){
Event.stopObserving.apply(this,Event.observers[i]);
Event.observers[i][0]=null;
}
Event.observers=false;
},

observe:function(element,name,observer,useCapture){
var element=$(element);
useCapture=useCapture||false;

if(name=='keypress'&&
(navigator.appVersion.match(/Konqueror|Safari|KHTML/)
||element.attachEvent))
name='keydown';

this._observeAndCache(element,name,observer,useCapture);
},

stopObserving:function(element,name,observer,useCapture){
var element=$(element);
useCapture=useCapture||false;

if(name=='keypress'&&
(navigator.appVersion.match(/Konqueror|Safari|KHTML/)
||element.detachEvent))
name='keydown';

if(element.removeEventListener){
element.removeEventListener(name,observer,useCapture);
}else if(element.detachEvent){
element.detachEvent('on'+name,observer);
}
}
});

 
Event.observe(window,'unload',Event.unloadCache,false);
var Position={



includeScrollOffsets:false,



prepare:function(){
this.deltaX=window.pageXOffset
||document.documentElement.scrollLeft
||document.body.scrollLeft
||0;
this.deltaY=window.pageYOffset
||document.documentElement.scrollTop
||document.body.scrollTop
||0;
},

realOffset:function(element){
var valueT=0,valueL=0;
do{
valueT+=element.scrollTop||0;
valueL+=element.scrollLeft||0;
element=element.parentNode;
}while(element);
return[valueL,valueT];
},

cumulativeOffset:function(element){
var valueT=0,valueL=0;
do{
valueT+=element.offsetTop||0;
valueL+=element.offsetLeft||0;
element=element.offsetParent;
}while(element);
return[valueL,valueT];
},

positionedOffset:function(element){
var valueT=0,valueL=0;
do{
valueT+=element.offsetTop||0;
valueL+=element.offsetLeft||0;
element=element.offsetParent;
if(element){
p=Element.getStyle(element,'position');
if(p=='relative'||p=='absolute')break;
}
}while(element);
return[valueL,valueT];
},

offsetParent:function(element){
if(element.offsetParent)return element.offsetParent;
if(element==document.body)return element;

while((element=element.parentNode)&&element!=document.body)
if(Element.getStyle(element,'position')!='static')
return element;

return document.body;
},


within:function(element,x,y){
if(this.includeScrollOffsets)
return this.withinIncludingScrolloffsets(element,x,y);
this.xcomp=x;
this.ycomp=y;
this.offset=this.cumulativeOffset(element);

return(y>=this.offset[1]&&
y<this.offset[1]+element.offsetHeight&&
x>=this.offset[0]&&
x<this.offset[0]+element.offsetWidth);
},

withinIncludingScrolloffsets:function(element,x,y){
var offsetcache=this.realOffset(element);

this.xcomp=x+offsetcache[0]-this.deltaX;
this.ycomp=y+offsetcache[1]-this.deltaY;
this.offset=this.cumulativeOffset(element);

return(this.ycomp>=this.offset[1]&&
this.ycomp<this.offset[1]+element.offsetHeight&&
this.xcomp>=this.offset[0]&&
this.xcomp<this.offset[0]+element.offsetWidth);
},


overlap:function(mode,element){
if(!mode)return 0;
if(mode=='vertical')
return((this.offset[1]+element.offsetHeight)-this.ycomp)/
element.offsetHeight;
if(mode=='horizontal')
return((this.offset[0]+element.offsetWidth)-this.xcomp)/
element.offsetWidth;
},

clone:function(source,target){
source=$(source);
target=$(target);
target.style.position='absolute';
var offsets=this.cumulativeOffset(source);
target.style.top=offsets[1]+'px';
target.style.left=offsets[0]+'px';
target.style.width=source.offsetWidth+'px';
target.style.height=source.offsetHeight+'px';
},

page:function(forElement){
var valueT=0,valueL=0;

var element=forElement;
do{
valueT+=element.offsetTop||0;
valueL+=element.offsetLeft||0;


if(element.offsetParent==document.body)
if(Element.getStyle(element,'position')=='absolute')break;

}while(element=element.offsetParent);

element=forElement;
do{
valueT-=element.scrollTop||0;
valueL-=element.scrollLeft||0;
}while(element=element.parentNode);

return[valueL,valueT];
},

clone:function(source,target){
var options=Object.extend({
setLeft:true,
setTop:true,
setWidth:true,
setHeight:true,
offsetTop:0,
offsetLeft:0
},arguments[2]||{})


source=$(source);
var p=Position.page(source);


target=$(target);
var delta=[0,0];
var parent=null;


if(Element.getStyle(target,'position')=='absolute'){
parent=Position.offsetParent(target);
delta=Position.page(parent);
}


if(parent==document.body){
delta[0]-=document.body.offsetLeft;
delta[1]-=document.body.offsetTop;
}


if(options.setLeft)target.style.left=(p[0]-delta[0]+options.offsetLeft)+'px';
if(options.setTop)target.style.top=(p[1]-delta[1]+options.offsetTop)+'px';
if(options.setWidth)target.style.width=source.offsetWidth+'px';
if(options.setHeight)target.style.height=source.offsetHeight+'px';
},

absolutize:function(element){
element=$(element);
if(element.style.position=='absolute')return;
Position.prepare();

var offsets=Position.positionedOffset(element);
var top=offsets[1];
var left=offsets[0];
var width=element.clientWidth;
var height=element.clientHeight;

element._originalLeft=left-parseFloat(element.style.left||0);
element._originalTop=top-parseFloat(element.style.top||0);
element._originalWidth=element.style.width;
element._originalHeight=element.style.height;

element.style.position='absolute';
element.style.top=top+'px';;
element.style.left=left+'px';;
element.style.width=width+'px';;
element.style.height=height+'px';;
},

relativize:function(element){
element=$(element);
if(element.style.position=='relative')return;
Position.prepare();

element.style.position='relative';
var top=parseFloat(element.style.top||0)-(element._originalTop||0);
var left=parseFloat(element.style.left||0)-(element._originalLeft||0);

element.style.top=top+'px';
element.style.left=left+'px';
element.style.height=element._originalHeight;
element.style.width=element._originalWidth;
}
}




if(/Konqueror|Safari|KHTML/.test(navigator.userAgent)){
Position.cumulativeOffset=function(element){
var valueT=0,valueL=0;
do{
valueT+=element.offsetTop||0;
valueL+=element.offsetLeft||0;
if(element.offsetParent==document.body)
if(Element.getStyle(element,'position')=='absolute')break;

element=element.offsetParent;
}while(element);

return[valueL,valueT];
}
}

























function _element()
{
this.type="element";
this.name=new String();
this.attributes=new Array();
this.contents=new Array();
this.uid=_Xparse_count++;
_Xparse_index[this.uid]=this;
}

function _chardata()
{
this.type="chardata";
this.value=new String();
}

function _pi()
{
this.type="pi";
this.value=new String();
}

function _comment()
{
this.type="comment";
this.value=new String();
}


function _frag()
{
this.str=new String();
this.ary=new Array();
this.end=new String();
}





var _Xparse_count=0;
var _Xparse_index=new Array();






function Xparse(src)
{
var frag=new _frag();


frag.str=_prolog(src);


var root=new _element();
root.name="ROOT";


frag=_compile(frag);


root.contents=frag.ary;
root.index=_Xparse_index;
_Xparse_index=new Array();
return root;
}






function _compile(frag)
{

while(1)
{

if(frag.str.length==0)
{
return frag;
}

var TagStart=frag.str.indexOf("<");

if(TagStart!=0)
{

var thisary=frag.ary.length;
frag.ary[thisary]=new _chardata();
if(TagStart==-1)
{
frag.ary[thisary].value=_entity(frag.str);
frag.str="";
}
else
{
frag.ary[thisary].value=_entity(frag.str.substring(0,TagStart));
frag.str=frag.str.substring(TagStart,frag.str.length);
}
}
else
{

if(frag.str.substring(1,2)=="?")
{
frag=_tag_pi(frag);
}
else
{
if(frag.str.substring(1,4)=="!--")
{
frag=_tag_comment(frag);
}
else
{
if(frag.str.substring(1,9)=="![CDATA[")
{
frag=_tag_cdata(frag);
}
else
{
if(frag.str.substring(1,frag.end.length+3)=="/"+frag.end+">"||_strip(frag.str.substring(1,frag.end.length+3))=="/"+frag.end)
{

frag.str=frag.str.substring(frag.end.length+3,frag.str.length);
frag.end="";
return frag;
}
else
{
frag=_tag_element(frag);
}
}
}
}

}
}
return"";
}






function _tag_element(frag)
{

var close=frag.str.indexOf(">");
var empty=(frag.str.substring(close-1,close)=="/");
if(empty)
{
close-=1;
}


var starttag=_normalize(frag.str.substring(1,close));
var nextspace=starttag.indexOf(" ");
var attribs=new String();
var name=new String();
if(nextspace!=-1)
{
name=starttag.substring(0,nextspace);
attribs=starttag.substring(nextspace+1,starttag.length);
}
else
{
name=starttag;
}

var thisary=frag.ary.length;
frag.ary[thisary]=new _element();
frag.ary[thisary].name=_strip(name);
if(attribs.length>0)
{
frag.ary[thisary].attributes=_attribution(attribs);
}
if(!empty)
{


var contents=new _frag();
contents.str=frag.str.substring(close+1,frag.str.length);
contents.end=name;
contents=_compile(contents);
frag.ary[thisary].contents=contents.ary;
frag.str=contents.str;
}
else
{
frag.str=frag.str.substring(close+2,frag.str.length);
}
return frag;
}

function _tag_pi(frag)
{
var close=frag.str.indexOf("?>");
var val=frag.str.substring(2,close);
var thisary=frag.ary.length;
frag.ary[thisary]=new _pi();
frag.ary[thisary].value=val;
frag.str=frag.str.substring(close+2,frag.str.length);
return frag;
}

function _tag_comment(frag)
{
var close=frag.str.indexOf("-->");
var val=frag.str.substring(4,close);
var thisary=frag.ary.length;
frag.ary[thisary]=new _comment();
frag.ary[thisary].value=val;
frag.str=frag.str.substring(close+3,frag.str.length);
return frag;
}

function _tag_cdata(frag)
{
var close=frag.str.indexOf("]]>");
var val=frag.str.substring(9,close);
var thisary=frag.ary.length;
frag.ary[thisary]=new _chardata();
frag.ary[thisary].value=val;
frag.str=frag.str.substring(close+3,frag.str.length);
return frag;
}







function _attribution(str)
{
var all=new Array();
while(1)
{
var eq=str.indexOf("=");
if(str.length==0||eq==-1)
{
return all;
}

var id1=str.indexOf("\'");
var id2=str.indexOf("\"");
var ids=new Number();
var id=new String();
if((id1<id2&&id1!=-1)||id2==-1)
{
ids=id1;
id="\'";
}
if((id2<id1||id1==-1)&&id2!=-1)
{
ids=id2;
id="\"";
}
var nextid=str.indexOf(id,ids+1);
var val=str.substring(ids+1,nextid);

var name=_strip(str.substring(0,eq));
all[name]=_entity(val);
str=str.substring(nextid+1,str.length);
}
return"";
}






function _prolog(str)
{
var A=new Array();

A=str.split("\r\n");
str=A.join("\n");
A=str.split("\r");
str=A.join("\n");

var start=str.indexOf("<");
if(str.substring(start,start+3)=="<?x"||str.substring(start,start+3)=="<?X")
{
var close=str.indexOf("?>");
str=str.substring(close+2,str.length);
}
var start=str.indexOf("<!DOCTYPE");
if(start!=-1)
{
var close=str.indexOf(">",start)+1;
var dp=str.indexOf("[",start);
if(dp<close&&dp!=-1)
{
close=str.indexOf("]>",start)+2;
}
str=str.substring(close,str.length);
}
return str;
}





function _strip(str)
{
var A=new Array();

A=str.split("\n");
str=A.join("");
A=str.split(" ");
str=A.join("");
A=str.split("\t");
str=A.join("");

return str;
}





function _normalize(str)
{
var A=new Array();

A=str.split("\n");
str=A.join(" ");
A=str.split("\t");
str=A.join(" ");

return str;
}





function _entity(str)
{
var A=new Array();

A=str.split("&lt;");
str=A.join("<");
A=str.split("&gt;");
str=A.join(">");
A=str.split("&quot;");
str=A.join("\"");
A=str.split("&apos;");
str=A.join("\'");
A=str.split("&amp;");
str=A.join("&");

return str;
}

var Enum=new Object();

function escape2(str){
return escape(str).replace(/\+/g,"%2b");
}
function $se(tag,className){
var element=document.createElement(tag);
if(className)element.className=className;
return element;
}
function externalLinks(){
if(!document.getElementsByTagName)return;
var anchors=document.getElementsByTagName("a");
for(var i=0;i<anchors.length;i++){
var anchor=anchors[i];
if(anchor.getAttribute("href")&&anchor.getAttribute("rel")=="external")anchor.target="_blank";
}
}

document.createElementWithText=function(elementName,text2){

var element=document.createElement(elementName);

element.innerHTML=text2;
return element;
}

var _st=window.setTimeout;
window.setTimeout=function(fRef,mDelay){
if(typeof fRef=='function'){
var argu=Array.prototype.slice.call(arguments,2);
var f=(function(){fRef.apply(null,argu);});
return _st(f,mDelay);
}
return _st(fRef,mDelay);
}

String.prototype.escapeHTML2=function(){
return this.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/\"/g,"&quot;").replace(/ /g,"&nbsp;").replace(/\t/g,"&nbsp;").replace(/\n/g,"<br />");

}

String.prototype.unescapeHTML2=function(){
return this.replace(/&amp;/g,"&").replace(/&lt;/g,"<").replace(/&gt;/g,">").replace(/&quot;/g,"\"").replace(/&nbsp;/g," ").replace(/<br \/>/g,"\n");

}
String.prototype.trim=function(){
return this.replace(/^ +/,"").replace(/ +$/,"");
}

String.prototype.capitalize=function(){
return this.charAt(0).toUpperCase()+this.substring(1).toLowerCase();
}

if(!Array.prototype.exist){
Array.prototype.exist=function(k){
for(var i=0;i<this.length;i++){
if(this[i]==k)return true;
}
return false;
}
}

if(!Array.prototype.pop){
Array.prototype.pop=function(){

if(this.length==0)return false;

var _temp=this[this.length-1];
this.length--;

return _temp;

}

}

if(!Array.prototype.deleteByIndex){
Array.prototype.deleteByIndex=function(index){
if(index>this.length-1)return;
var _temp=this[index];
for(var i=index;i<this.length-1;i++){
this[i]=this[i+1];
}
this.length--;
return _temp;
}
}

function isie(){
var user_agent=navigator.userAgent.toLowerCase();
if(user_agent.indexOf("msie")!=-1)return true;
return false;
}
function cc(e){
var c=e.childNodes.length;
if(c==0)return 0;
if(isie())return c;
else return(c-1)/2;
}
function ci(i){
if(isie())return i;
else return i*2+1;
}


Object.extend(Element,{
show:function(){
for(var i=0;i<arguments.length;i++){
var element=$(arguments[i]);
element.style.display='block';
}
}
});




function $import(path,type,title){
var s,i;
if(type=="js"){
var ss=document.getElementsByTagName("script");
for(i=0;i<ss.length;i++){
if(ss[i].src&&ss[i].src.indexOf(path)!=-1)return ss[i];
}
s=document.createElement("script");
s.type="text/javascript";
s.src=path;
}else if(type=="css"){
var ls=document.getElementsByTagName("link");
for(i=0;i<ls.length;i++){
if(ls[i].href&&ls[i].href.indexOf(path)!=-1)return ls[i];
}
s=document.createElement("link");
s.rel="alternate stylesheet";
s.type="text/css";
s.href=path;
s.title=title;
s.disabled=false;
}
else return;
var head=document.getElementsByTagName("head")[0];
head.appendChild(s);
return s;
}

















var TipBox=Class.create();
TipBox.prototype={
initialize:function(msg,_options){
this.options={
delay:0,
elementName:"dd"
}.extend(_options||{});
this.using=false;
this.removed=false;
this.text="";

this.box=$se(this.options.elementName);
Element.addClassName(this.box,"tipBox");
this.spanClose=$se("span");
this.spanClose.innerHTML="<img src='img/imgClose.gif' alt='' title='Close'/>";
if(this.options.closeImg){
this.spanClose.innerHTML="<img src='"+this.options.closeImg+"' alt='' title='Close'/>";
}
this.spanClose.className="close";
this.spanClose.onclick=this.hide.bind(this);
this.spanInfo=$se("span");
this.spanInfo.className="info";


this.box.appendChild(this.spanClose);
this.box.appendChild(this.spanInfo);

this.timeOutPtr=0;
Object.extend(this.box.style,this.options);
this.hide();
if(this.options.delay>0)
{
this.timeOutPtr=window.setTimeout(this.hide,this.options.delay*1000);
}

if(msg)this.setText(msg);

},
setText:function(msg,noCloseButton){
this.text=msg;
this.spanInfo.innerHTML=msg;
if(noCloseButton){
if(this.box.childNodes.length>1)this.spanClose=this.box.removeChild(this.spanClose);
}else{
this.box.insertBefore(this.spanClose,this.box.firstChild);
}
},
removeAfterSeconds:function(delay){
if(!this.removed){
if(this.timeOutPtr)window.clearTimeout(this.timeOutPtr);
this.timeOutPtr=window.setTimeout(this.remove.bind(this),delay*1000);
}
},
hideAfterSeconds:function(delay){
if(this.using){
if(this.timeOutPtr)window.clearTimeout(this.timeOutPtr);
this.timeOutPtr=window.setTimeout(this.hide.bind(this),delay*1000);
}
},
remove:function()
{
this.removed=true;
Element.remove(this.box);
},
show:function(msg,noCloseButton,hideDelay){
this.using=true;
if(arguments.length)this.setText.apply(this,arguments);
Element.show(this.box);
if(hideDelay)this.hideAfterSeconds(hideDelay);
},
hide:function(){
this.using=false;
Element.hide(this.box);
},
clearDelay:function(){
if(this.timeOutPtr)window.clearTimeout(this.timeOutPtr);
},
toggleText:function(msg,delay){
this.box.innerHTML=msg;
window.setTimeout(this.recoverText.bind(this),delay*1000);
},
recoverText:function(){
this.box.innerHTML=this.text;
}
}

Object.extend(Enum,{
DragAndDrop:{State:{NORMAL:0,DRAGING:1},Type:{X:0,Y:1,XY:2}}
});
var DragAndDrop=new Object();
Object.extend(DragAndDrop,{
state:Enum.DragAndDrop.State.NORMAL,
makeDragAble:function(eventElement,effectElement,newLayer,closeAble){

return new DragAndDropHandler(eventElement,effectElement,newLayer,closeAble);
},
makeContainer:function(container,tagName,detectType,dadHandler){
var self=this;
var okIndex=lastIndex=-1;
var className=lastClassName="boldTop";
var sepElement=$se(tagName);
Element.addClassName(sepElement,"editSep");

this.state=Enum.DragAndDrop.State.NORMAL;

Element.cleanWhitespace(container);


this.interval=window.setInterval(detect,200);


dadHandler.ondrop=function(){
window.clearInterval(self.interval);
if(-1==okIndex)return;
Element.removeClassName(container.childNodes[okIndex],className);

var _e=("boldTop"==className)?container.childNodes[okIndex]:container.childNodes[okIndex].nextSibling;
container.insertBefore(dadHandler.realEffectElement,_e);
}

function detect(){

if(self.state==Enum.DragAndDrop.State.NORMAL)return;


var _x=parseInt(dadHandler.effectElement.style.left.replace(/px/g,""));
var _y=parseInt(dadHandler.effectElement.style.top.replace(/px/g,""));
var _h=dadHandler.effectElement.offsetHeight;
var _w=dadHandler.effectElement.offsetWidth;
var _vc=_y+_h/2;
var _hc=_x+_w/2;
var minSpan=2000;

for(var i=0;i<container.childNodes.length;i++){
if(!container.childNodes[i].tagName||container.childNodes[i].tagName.toLowerCase()!=tagName)continue;

var _x2=Position.cumulativeOffset(container.childNodes[i])[0];
var _y2=Position.cumulativeOffset(container.childNodes[i])[1];
var _h2=container.childNodes[i].offsetHeight;
var _w2=container.childNodes[i].offsetWidth;

switch(detectType){
case Enum.DragAndDrop.Type.X:
break;

case Enum.DragAndDrop.Type.Y:
var spanTop=Math.abs(_y2-_vc);
var spanBottom=Math.abs(_y2+_h2-_vc);
var span=(spanTop<spanBottom)?spanTop:spanBottom;

if(minSpan>span){
minSpan=span;
okIndex=i;
className=(spanTop<spanBottom)?"boldTop":"boldBottom";
}
break;
case Enum.DragAndDrop.Type.XY:
break;
default:
break;
}

}
if(lastIndex!=okIndex||lastClassName!=className){

if(lastIndex>=0){
Element.removeClassName(container.childNodes[lastIndex],lastClassName);
}

if(okIndex>=0){
Element.addClassName(container.childNodes[okIndex],className);


}

lastIndex=okIndex;
lastClassName=className;
}
}
}


});



var DragAndDropHandler=Class.create();
DragAndDropHandler.prototype={
initialize:function(_eventElement,_effectElement,_newLayer,_closeAble){
this.realEventElement=this.eventElement=_eventElement;
this.realEffectElement=this.effectElement=_effectElement;
this.newLayer=_newLayer?true:false;
this.closeAble=_closeAble?true:false;
this.moveLayer=$se("div");
Element.hide(this.moveLayer);
document.body.appendChild(this.moveLayer);
this.rx=0;
this.ry=0;
this.img=$se("img");

if(_newLayer){
this.moveLayer.style.border="1px dotted #666";
if(isie()){
this.moveLayer.style.backgroundColor="#fff";
this.moveLayer.style.filter="alpha(opacity=50)";
}
this.effectElement=this.moveLayer;
}




this.tempFuncs=new Object();
this.tempFuncs.proccessDrag=this.processDrag.bind(this);
this.tempFuncs.drag=this.drag.bind(this);
this.tempFuncs.drop=this.drop.bind(this);

this.oldCursor=this.eventElement.style.cursor;
this.eventElement.style.cursor="move";
Event.observe(this.eventElement,"mousedown",this.tempFuncs.drag);

if(this.closeAble){
this.img.title="删除";
this.img.src="img/imgClose.gif";
this.img.style.cursor="pointer";
this.img.style.marginLeft="15px";
var self=this;
this.img.onmousedown=function(event){
if(!event){
event=window.event;
window.event.cancelBubble=true;
}
if(event.stopPropagation)event.stopPropagation();
}
this.img.onclick=function(event){

self.realEffectElement.parentNode.removeChild(self.realEffectElement);
if(self.onclose)self.onclose();
if(!event){
event=window.event;
event.cancelBubble=true;
}
if(event.stopPropagation)event.stopPropagation();
}

this.realEventElement.appendChild(this.img);
}
},
drag:function(event){
if(this.newLayer){

Position.clone(this.realEffectElement,this.moveLayer);
Element.show(this.moveLayer);
Element.addClassName(this.realEffectElement,"dragBorder");

DragAndDrop.makeContainer(this.realEffectElement.parentNode,this.realEffectElement.tagName.toLowerCase(),Enum.DragAndDrop.Type.Y,this);
}

this.rx=Event.pointerX(event)-this.effectElement.offsetLeft;
this.ry=Event.pointerY(event)-this.effectElement.offsetTop;

Event.observe(document,"mousemove",this.tempFuncs.proccessDrag);
Event.observe(document.body,"selectstart",this.falseFunction);
Event.observe(document,"mouseup",this.tempFuncs.drop);
DragAndDrop.state=Enum.DragAndDrop.State.DRAGING;
if(this.ondrag)this.ondrag();
},
processDrag:function(event){
this.effectElement.style.left=(Event.pointerX(event)-this.rx)+"px";
this.effectElement.style.top=(Event.pointerY(event)-this.ry)+"px";
},
drop:function(){
Event.stopObserving(document.body,"selectstart",this.falseFunction);
Event.stopObserving(document,"mousemove",this.tempFuncs.proccessDrag);
Event.stopObserving(document,"mouseup",this.tempFuncs.drop);
if(this.newLayer){
Element.hide(this.moveLayer);
Element.removeClassName(this.realEffectElement,"dragBorder");
}
DragAndDrop.state=Enum.DragAndDrop.State.NORMAL;
if(this.ondrop){
this.ondrop();
}
},
stopDragAble:function(){
this.eventElement.style.cursor=this.oldCursor;
if(this.closeAble){
this.img.parentNode.removeChild(this.img);
}
Event.stopObserving(this.eventElement,"mousedown",this.tempFuncs.drag);
},
startDragAble:function(){
this.eventElement.style.cursor="move";
Event.observe(this.eventElement,"mousedown",this.tempFuncs.drag);

},
onclose:function(){},
falseFunction:function(){
return false;
}

}

var photoBox=Class.create();
photoBox.prototype={
initialize:function(className){
this.width=220;
this.height=200;

this.container=$se("div");
if(className)this.container.className=className;

this.captionBox=$se("div");
this.container.appendChild(this.captionBox);
this.captionBox.className="caption";
this.listBox=$se("select");
this.captionBox.appendChild(this.listBox);
this.listBox.onchange=this.albumChange.bind(this);
this.tipBox=$se("span");
this.captionBox.appendChild(this.tipBox);

this.imageBox=$se("table");
this.container.appendChild(this.imageBox);
this.imageBox.className="imageBox";
var tr=this.imageBox.insertRow(0);
var td=tr.insertCell(0);
td.vAlign="middle";
td.algin="center";
this.imageBox=td;

this.img=$se("img");
this.img.alt=this.img.title="No Picture";

this.imageBox.appendChild(this.img);
this.toolbar=$se("div");
this.container.appendChild(this.toolbar);
this.generateToolbar();
this.groups=[];
this.images=[];
this.playIndex=-1;
this.delay=3000;
this.playing=false;
this.effectArray=new Array();
this.effectArray.push("BlendTrans(duration=1);");
this.effectArray.push("progid:DXImageTransform.Microsoft.Barn();");
this.effectArray.push("progid:DXImageTransform.Microsoft.Barn(duration=0.5,motion=in,orientation=horizontal);");
this.effectArray.push("progid:DXImageTransform.Microsoft.Blinds()");
this.effectArray.push("progid:DXImageTransform.Microsoft.Inset()");
this.effectArray.push(" progid:DXImageTransform.Microsoft.Pixelate(enabled=false,duration=0.5,maxSquare=10);");
this.effectArray.push("progid:DXImageTransform.Microsoft.RandomDissolve()");
this.effectArray.push("BlendTrans(duration=1);");
this.effectArray.push("BlendTrans(duration=1);");
this.effectArray.push("BlendTrans(duration=1);");
this.allowRandom=false;
this.autoplay=true;




}

,init:function(){
for(var i=0;i<this.groups.length;i++){
if(""!=this.groups[i].title&&1==this.groups[i].type){
this.listBox.options[i].selected=true;
break;
}
}
if(this.listBox.length)this.listBox.options[this.listBox.length-1]=null;
this.albumChange();
this.inited=true;
},
setDelay:function(delay){
this.delay=delay;
if(this.playing){
this.pause();
this.play();
}
}

,getGroupShowBox:function(boxWidth){
if(!this.groupShowBox){
this.boxWidth=boxWidth;

this.groupShowBox=$se('div','albumGroupShow');
$bd(this.groupShowBox,'b');

this.showGroupBox();
var b=$bd(this.groupShowBox,'b');
b.style.display.clear='both';

}
return this.groupShowBox;
}

,showGroupBox:function(){
if(this.groupBox){
this.groupShowBox.replaceChild(this.groupBox,this.groupShowBox.firstChild);
return;
}


var cols=Math.floor(this.boxWidth/182);
var margin=(this.boxWidth-cols*182)/(cols+1);


this.groupBox=$se('div','albumGroup');

var box=this.groupBox;
var self=this;


if(this.groups.length<=1){
this.groupBox.innerHTML='没有数据。';
this.groupBox.style.textAlign='left';
this.groupShowBox.replaceChild(this.groupBox,this.groupShowBox.firstChild);
return;
}


this.groups.each(function(value,i){

if(i==self.groups.length-1)return;
var item=$bd(box,'div','group');


item.style.marginLeft=margin+'px';



var imageBox=$bd(item,'div','imageBox');

var span=$bd(item,'span','intro');
span.innerHTML=value.title+'<span>('+value.length+')</span>';

var img=new Image();
img.alt='No Picture';
if(!value.length)return;


img.alt=img.title=value[0].info[2];
var src=value[0].info[0];


var imgData=value.detect(function(_img){
if(_img.info[4]=='1')return true;
});


if(imgData){
img.alt=img.title=imgData.info[2];
src=imgData.info[0];
}


img.onload=function(){
self.resizeTo(img,160,128);
imageBox.appendChild(img);
img.style.marginTop=Math.round((140-img.height)/2)+'px';
}
img.onerror=function(){
img.title='载入错误。';
}

img.src=src;


img.onmouseover=function(){
X2.UI.Effect.FadeTo(img,100,40,30);
window.setTimeout(X2.UI.Effect.FadeTo.bind(X2.UI.Effect,img,40,100,30),40);
}

imageBox.onclick=self.showAlbumBrowser.bind(self,value);
});
this.groupShowBox.replaceChild(this.groupBox,this.groupShowBox.firstChild);
}

,showAlbumBrowser:function(imageGroup){
if(!this.browserBox)this.browserBox=$se('div','albumBrowser');
this.browserBox.innerHTML='';
this.groupShowBox.replaceChild(this.browserBox,this.groupShowBox.firstChild);

var self=this;
var bar=$bd(this.browserBox,'div','bar');
var a=$bd(bar,'a','linkShowGroup','相册首页');

var currentIndex=0;


a.href='javascript:void(0)';
a.onclick=this.showGroupBox.bind(this);
$bd(bar,'span','sep','>>');
$bd(bar,'span','groupName',imageGroup.title);


var imageBox=$bd(this.browserBox,'div','imageBox');
$bd(imageBox,'b');
var width=this.boxWidth-40;
var height=width*160/200;
imageBox.style.width=width+'px';
imageBox.style.height=height+'px';


var imageInfo=$bd(this.browserBox,'div','imageInfo');

var toolBar=$bd(imageInfo,'div','toolBar');

var imageDescription=$bd(imageInfo,'span','description');


var ss;

var btnScrollLeft=$bd(toolBar,'img','left');
btnScrollLeft.src='img/button_left.gif'
btnScrollLeft.title='向左滚动';
btnScrollLeft.onmouseover=function(){
if(ss)return;
ss=window.setInterval(function(){
slideBar.scrollLeft-=3;
},10);
}
btnScrollLeft.onmouseout=function(){
window.clearInterval(ss);
ss=0;
}



var btnBack=$bd(toolBar,'img','back');
btnBack.src='img/button_back.gif';
btnBack.title='上一张';

btnBack.onclick=function(){
if(currentIndex<=0)return;
showImage(currentIndex-1);
}

var countInfo=$bd(toolBar,'span','countInfo');


var btnForward=$bd(toolBar,'img','forward');
btnForward.src='img/button_fw.gif';
btnForward.title='下一张';
btnForward.onclick=function(){
if(currentIndex>=imageGroup.length-1)return;
showImage(currentIndex+1);
}


var btnScrollRight=$bd(toolBar,'img','right');
btnScrollRight.src='img/button_right.gif';
btnScrollRight.title='向右滚动';
btnScrollRight.onmouseover=function(){
if(ss)return;
ss=window.setInterval(function(){
slideBar.scrollLeft+=3;
},10);
}
btnScrollRight.onmouseout=function(){
window.clearInterval(ss);
ss=0;
}



var slideBar=$bd(this.browserBox,'div','slideBar');
slideBar.style.width=this.boxWidth-20+'px';
var table=$bd(slideBar,'table');
var tr=table.insertRow(0);
imageGroup.each(function(image,i){
var img=new Image();
var td=tr.insertCell(tr.cells.length);
img.onload=function(){
self.resizeTo(img,80,64);
td.appendChild(img);
image.td=td;
X2.UI.Effect.FadeTo(img,100,50,0);
}
img.onerror=function(){
td.appendChild(img);
image.td=td;
}
img.alt=img.title=image.info[2];
img.src=image.info[0];
td.onclick=function(){
showImage(i);
}

td.onmouseover=function(){
if(currentIndex==i)return;
X2.UI.Effect.FadeTo(img,50,100,50);
Element.addClassName(td,'hover');
}
td.onmouseout=function(){
if(currentIndex==i)return;
X2.UI.Effect.FadeTo(img,100,50,50);
Element.removeClassName(td,'hover');
}
});



function showImage(index){
imageDescription.innerHTML='<img src="img/loading.gif" alt=""/> &nbsp;loading......';
X2.UI.Effect.FadeTo(imageBox.firstChild,100,60,30);
var img=new Image();
img.onload=function(){
self.resizeTo(img,width-10,(width-10)*160/200);
img.style.marginTop=(height-img.height)/2+'px';
imageBox.replaceChild(img,imageBox.firstChild);
imageDescription.innerHTML=imageGroup[index].info[2]?imageGroup[index].info[2]:'无描述';

img.onclick=function(){
window.open(img.src);
}
showImageCommon(index);
}
img.onerror=function(){
imageBox.replaceChild($se('b'),imageBox.firstChild);
imageDescription.innerHTML='图片不可用，请重试或联系博主。';

showImageCommon(index);
}
img.alt=img.title=imageGroup[index].info[2];
img.src=imageGroup[index].info[1];
}


function showImageCommon(index){
countInfo.innerHTML=index+1+'/'+imageGroup.length;
Element.removeClassName(imageGroup[currentIndex].td,'current');
X2.UI.Effect.FadeTo(imageGroup[currentIndex].td.firstChild,100,50,50);
currentIndex=index;
Element.addClassName(imageGroup[currentIndex].td,'current');
X2.UI.Effect.FadeTo(imageGroup[currentIndex].td.firstChild,50,100,50);

setSlideToCurrent();
}



function setSlideToCurrent(){
setSlideToImage(currentIndex);
}


function setSlideToImage(index){
var allWidth=slideBar.scrollWidth;
var td=imageGroup[index].td;
var scrollLeft=slideBar.scrollLeft;

if(td.offsetLeft-scrollLeft+td.offsetWidth>slideBar.offsetWidth){
X2.UI.Effect.scroll('left',slideBar,td.offsetWidth+td.offsetLeft-scrollLeft-slideBar.offsetWidth+10,50);
}

if(td.offsetLeft<scrollLeft){
X2.UI.Effect.scroll('right',slideBar,scrollLeft-td.offsetLeft+10,50);
}
}


showImage(0);

}

,resizeTo:function(img,width,height){
var oldWidth=parseInt(img.width);
var oldHeight=parseInt(img.height);
if(oldWidth<=width&&oldHeight<=height)return;

var c1=width/oldWidth;
var c2=height/oldHeight;

var c=c1<c2?c1:c2;
img.width=Math.floor(c*oldWidth);
img.height=Math.floor(c*oldHeight);

}

,add:function(title,group,type,id){
this.images=new Array();
this.images.title=title;
this.images.type=type;
this.images.id=id;
this.groups.push(this.images);
for(var i=0;i<group.length;i++){
this.images.push(new Image(1,1));
this.images[i].state="waiting";
this.images[i].onload=function(){
this.state="loaded";
}
this.images[i].onerror=function(){this.state="error";}
this.images[i]._src=group[i][0];
this.images[i].info=group[i];
}
if(title.length>0){
var opt=new Option();
opt.text=title;
opt.value=this.groups.length-1;
this.listBox.options[this.listBox.length]=opt;
}
},
albumChange:function(){
if(0==this.groups.length)return;
if(0==this.listBox.length)return;
this.images=this.groups[this.listBox.selectedIndex];

for(var i=0;i<this.images.length;i++){
this.images[i].src=this.images[i]._src;
}
this.stop();
this.tipBox.innerHTML="1/"+this.images.length;
if(0==this.images.length){
this.tipBox.innerHTML="0/0";
this.playIndex=-1;
this.img.src=null;
this.img.title=this.img.alt="No Picture";
this.setDesc("");
return;
}
if("Full"==this.btnFull.title){
this.img.src=this.images[0].src;
}else{
this.img.src=this.images[0].info[1];
}
this.setDesc(this.images[0].info[2]);
this.img.title=this.img.alt=this.images[0].info[2];
this.playIndex=0;
if(this.autoplay)window.setTimeout(this.play.bind(this),5000);
}

,play:function(){
if(this.playing||this.playIndex>=this.images.length){
this.pause();
return;
}
this.showNext();
this.playing=true;
this.toolbar.firstChild.src="img/button_pause.gif";
this.interval=window.setInterval(this.showNext.bind(this),this.delay);
}

,stop:function(){
this.toolbar.firstChild.src="img/button_play.gif";
this.playIndex=0;
this.showSingle(0);
window.clearInterval(this.interval);
this.playing=false;
},
pause:function(){
this.toolbar.firstChild.src="img/button_play.gif";
window.clearInterval(this.interval);
this.playing=false;
},
showNext:function(){
this.playIndex++;
if(this.playIndex==this.images.length){
this.playIndex--;
this.pause();
this.playing=false;
return;
}
this.showSingle(this.playIndex);
if(this.playIndex==this.images.length-1){
this.toolbar.firstChild.src="img/button_play.gif";
this.pause();
this.playing=false;
}


},
showPreview:function(){
this.playIndex--;
if(this.playIndex>=0){
this.showSingle(this.playIndex);
}else{
this.playIndex=0;
}

},
showSingle:function(index){
if(index>=this.images.length)return;
if("waiting"==this.images[index].state){
this.playIndex--;
this.setDesc("Loading........");
return;
}
this.playIndex=index;
this.tipBox.innerHTML=(index+1)+"/"+this.images.length;
var r=parseInt(Math.random()*10000)%10;
if(!this.allowRandom)r=0;
try{
this.img.parentNode.style.filter=this.effectArray[r];
this.img.parentNode.filters[0].apply();
}catch(e){}

if("Full"==this.btnFull.title){

this.img.src=this.images[index].info[0];
this.setDesc(this.images[index].info[2]);

}else{

this.img.src=this.images[index].info[1];
this.setDesc(this.images[index].info[2]);
}
this.img.title=this.img.alt=this.images[index].info[2];
try{
this.img.parentNode.filters[0].play();
}catch(e){}
},
resize:function(){
if(this.img.offsetWidth>780){
var ht=this.img.offsetHeight*780/this.img.offsetWidth;
this.img.style.height=ht+"px";
this.img.style.width="780px";
}
},
getBox:function(){
return this.container;
},
setDesc:function(msg){
this.description.innerHTML=msg;
}

,generateToolbar:function(){
this.toolbar.className="toolbar";

var btn=$se("img");
setBtnEffect(btn);
btn.src="img/button_play.gif";
this.toolbar.appendChild(btn);
btn.title="play";
btn.onclick=this.play.bind(this);

btn=$se("img");
setBtnEffect(btn);
btn.src="img/button_stop.gif";
this.toolbar.appendChild(btn);
btn.title="stop";
btn.onclick=this.stop.bind(this);

btn=$se("img");
setBtnEffect(btn);
btn.src="img/button_back.gif";
this.toolbar.appendChild(btn);
btn.title="back";
btn.onclick=this.showPreview.bind(this);

btn=$se("img");
setBtnEffect(btn);
btn.src="img/button_fw.gif";
this.toolbar.appendChild(btn);
btn.title="foward";
btn.onclick=this.showNext.bind(this);

this.description=$se("span");
this.toolbar.appendChild(this.description);


btn=$se("img");
this.btnFull=btn;
setBtnEffect(btn);
btn.className="full";
btn.src="img/button_full.gif";
this.toolbar.appendChild(btn);
btn.title="Full";
var self=this;
btn.onclick=function(){
if(self.onFull){
self.onFull();
return;
}
this.toggelFull.bind(this);
}

function setBtnEffect(e){
return;
try{
e.style.filter="alpha(opacity=100);";
e.onmouseover=function(){
try{
this.filters[0].Opacity=70;
}catch(e){}
}
e.onmouseout=function(){
try{
this.filters[0].Opacity=100;
}catch(e){}
}
}catch(e){}
}
},
setCaption:function(_value){
this.captionBox.innerHTML=_value;
},
toggelFull:function(){
if("absolute"==this.container.style.position){

if(this.dadHandler)this.dadHandler.stopDragAble();
if(true){
var ee=document.getElementsByTagName("select");
for(var i=0;i<ee.length;i++){
ee[i].style.visibility="visible";
}
ee=document.getElementsByTagName("embed");
for(var i=0;i<ee.length;i++){
ee[i].style.visibility="visible";
}
}
Element.removeClassName(this.container,"fullAlbum");
if(this.img.src)this.img.src=this.img.src.replace(/UserFiles/,"UserFiles/thumb")+".jpg";
this.btnFull.title="Full";
this.container.style.position="static";

}else{

this.dadHandler=DragAndDrop.makeDragAble(this.captionBox,this.container,false);
if(true){
var ee=document.getElementsByTagName("select");
for(var i=0;i<ee.length;i++){
if(ee[i]!=this.listBox)ee[i].style.visibility="hidden";
}

ee=document.getElementsByTagName("embed");
for(var i=0;i<ee.length;i++){
ee[i].style.visibility="hidden";
}
}
this.btnFull.title="Small";
this.container.style.position="absolute";
Element.addClassName(this.container,"fullAlbum");
var _left=document.body.clientWidth/2-390;if(_left<=0)_left=20;
var _top=document.body.clientHeight/2-300;if(_top<=0)_top=20;
_left+=document.body.scrollLeft;
_top+=document.body.scrollTop;
this.container.style.left=_left;;
this.container.style.top=_top;
if(this.img.src)this.img.src=this.img.src.replace(/\/thumb/,"").replace(/\.jpg$/,"");
}
},
makeDragAble:function(){

},
endDrag:function(){

},
showToolbar:function(){

},
hideToolbar:function(){

}
}
 
try{
_element.prototype.getValue=function(){
if(!arguments){
if(this.contents[0])return this.contents[0].value;
else return"";
}
for(var i=0;i<this.contents.length;i++){
if(this.contents[i].name==arguments[0]){
if(this.contents[i].contents[0])return this.contents[i].contents[0].value;
return"";
}
}
}
}catch(e){}


var X2Doc=Class.create();
X2Doc.prototype={
initialize:function(str){
this.root=Xparse(str);
this.root=this.root.contents[0];
this.rootName=this.root.name;
this.cns=this.root.contents;
this.cc=this.cns.length;
},
gnn:function(node,name){
for(var i=0;i<node.contents.length;i++){
if(node.contents[i].name==name)return node.contents[i];
}
return null;
}
}
var CookieHandler=new Object();
CookieHandler.extend({
getValue:function(key){
var cookieArray=document.cookie.split("; ");
var cookie=new Object();
for(var i=0;i<cookieArray.length;i++){
cookie[cookieArray[i].split("=")[0]]=cookieArray[i].split("=")[1];
}
if(cookie[key])return unescape(cookie[key]);
else return"";
},
setValue:function(key,value,expireDays,_path){
var path="/";
if(typeof _path!=='undefined')path=_path;
if(!expireDays){
document.cookie=key+"="+escape(value)+"; path="+path;
}else{
var expireDate=new Date();
var ms=expireDays*24*60*60*1000;
expireDate.setTime(expireDate.getTime()+ms);
document.cookie=key+"="+escape(value)+"; expires="+expireDate.toGMTString()+"; path="+path;
}
},
deleteValue:function(key){
this.setValue(key,"1",-1);
}

});

var Cookie=new Object();
Cookie.setCookie=function(name,value,option){
var str=name+"="+escape(value);
if(option){

if(option.expireDays){
var date=new Date();
var ms=option.expireDays*24*3600*1000;
date.setTime(date.getTime()+ms);
str+="; expires="+date.toGMTString();
}
if(option.path)str+="; path="+path;
if(option.domain)str+="; domain"+domain;
if(option.secure)str+="; true";
}
document.cookie=str;
}

Cookie.getCookie=function(name){
var cookieArray=document.cookie.split("; ");
var cookie=new Object();
for(var i=0;i<cookieArray.length;i++){
var arr=cookieArray[i].split("=");
if(arr[0]==name)return unescape(arr[1]);
}
return"";
}

Cookie.deleteCookie=function(name){
this.setCookie(name,"",{expireDays:-1});
}

var RefreshHandler=Class.create();
RefreshHandler.prototype={
initialize:function(){
this.keyValue=new function(){};
},

check:function(s){

var hash=window.location.hash;
hash=hash.substring(1,hash.length);
var arr=hash.split('#')[0].split('/');
var keyValue={};
for(var i=0;i<arr.length;i++){
keyValue[arr[i].split('.')[0]]=arr[i].split('.')[1];
}


if(s&&!keyValue[s])return false;


if(s&&keyValue[s]){
if(s=="adminAction"){

eval("adminHandler.show('"+keyValue[s]+"');");
}else{


eval(keyValue[s]+"();");
}
return true;
}

if(keyValue["tid"]){gsb(keyValue.tid);return true;}
if(keyValue["date"]){getBlogByDate(keyValue.date);return true;}
if(keyValue["tagId"]){gbTag(keyValue.tagId);return true;}
if(keyValue["sid"]=="0"){
if(keyValue.page&&keyValue.page!="1"){
getBlog("0",keyValue.page);
return true;
}
}
if(keyValue.sid&&keyValue.sid!="0"){getBlog(keyValue.sid,keyValue.page?keyValue.page:1);return true;}
return false;

},
toHash:function(){

var hh="#";
for(var p in this.keyValue){
if(p=="extend")continue;
if(this.keyValue[p]||this.keyValue[p]=="0"){

hh+=p+"."+this.keyValue[p]+"/";
}
}
window.location=window.location.pathname+window.location.search+hh;
},
setValue:function(key,value){
this.keyValue[key]=value;
},
reset:function(){
this.keyValue=new function(){};
}
}
 
Array.prototype.exist=function(_obj){
for(var i=0;i<this.length;i++){
if(this[i]==_obj)return true;
}
return false;
}
var fb1="<font color='";
var fb2="'>";
var fb3="</font>";

String.prototype.escapeHTML3=function(){
return this.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/\"/g,"&quot;").replace(/ /g,"&nbsp;").replace(/\t/g,"&nbsp;").replace(/\n/g,"<br />");
}

String.prototype.escapeHTML2=function(){

return this.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/\"/g,"&quot;").replace(/ /g,"&nbsp;").replace(/\t/g,"&nbsp;").replace(/\n/g,"<br />");
}

String.prototype.unescapeHTML2=function(){
return this.replace(/&lt;/g,"<").replace(/&gt;/g,">").replace(/&quot;/g,"\"").replace(/&nbsp;/g," ").replace(/&amp;/g,"&");
}
document.X2Lighter=1;
var Lighter=Class.create();
Lighter.langs=new Array();
Lighter.supportedLanguages=new Array();
Lighter.addLanguage=function(_option){
Lighter.supportedLanguages.push({
objectColor:"#ff0000",
lineNumberColor:"#006600",
lineNumberSepColor:"#006600",
reservedWordColor:"#0000ff",
normalWordColor:"#000000",
delimiterColor:"#000000",
propertyColor:"#008684",
methodColor:"#a52a2a",
stringColor:"#ff00ff",
baseColor:"#000000",
commentColor:"#006600"
}.extend(_option||{}));
Lighter.langs.push(_option.language);
}

Lighter.prototype={
retarray:0,
initialize:function(){
this.currentWord="";
this.currentState="";
this.allCode="";
this.element=null;
this.lan=null;
this.language="";
if(arguments.length==2){
this.element=arguments[0];
this.language=arguments[1];
}
},

highlight:function(code){
for(var j=0;j<Lighter.supportedLanguages.length;j++){
if(Lighter.supportedLanguages[j].language==this.language){
this.lan=Lighter.supportedLanguages[j];
break;
}
}
if(this.lan==null)return code;
var c="";
this.retarray=new Array();
this.retarray.push("<div style='color:"+this.lan.baseColor+"'>");
this.currentWord="";
this.currentState="";
this.allCode=code.replace(/<br *\/?>/ig,"\n").replace(/<p>/ig,"\n").stripTags().unescapeHTML2();

for(var i=0;i<this.allCode.length;i++){

var commentFlag=true;

for(var s=0;s<this.lan.linecomment.length;s++){
if(s+i==this.allCode.length&&s<this.lan.linecomment.length){
commentFlag=false;
break;
}
if(this.lan.linecomment.charAt(s)!=this.allCode.charAt(i+s))commentFlag=false;
}
if(this.lan.linecomment.length==0)commentFlag=false;
if(commentFlag){
this.changeToState("comment");
this.currentWord+=this.lan.linecomment;
i+=this.lan.linecomment.length;
while(i<this.allCode.length&&this.allCode.charAt(i)!="\n"){
this.currentWord+=this.allCode.charAt(i);
i++;
}
if(i<this.allCode.length)this.currentWord+=this.allCode.charAt(i);
continue;
}

commentFlag=true;
for(var s=0;s<this.lan.commenton.length;s++){
if(s+i==this.allCode.length&&s<this.lan.commenton.length){
commentFlag=false;
break;
}
if(this.lan.commenton.charAt(s)!=this.allCode.charAt(i+s))commentFlag=false;
}
if(this.lan.commenton.length==0||this.lan.commentoff.length==0)commentFlag=false;
if(commentFlag){
this.changeToState("comment");
this.currentWord+=this.lan.commenton;
i+=this.lan.commenton.length;
var offpos=this.allCode.indexOf(this.lan.commentoff,i)+this.lan.commentoff.length;
if(offpos==this.lan.commentoff.length-1)offpos=this.allCode.length;
for(var s=i;s<offpos;s++){
this.currentWord+=this.allCode.charAt(s);
}
i=offpos-1;
continue;
}


c=this.allCode.charAt(i);
if(/\w/.test(c)){
this.changeToState("word");
this.currentWord+=c;
}
else if(c==this.lan.quotation1||c==this.lan.quotation2){
var quot=c;
this.changeToState("string");
this.currentWord+=c;
i++;
while(i<this.allCode.length&&this.allCode.charAt(i)!=quot&&this.allCode.charAt(i)!="\n"){
if(this.allCode.charAt(i)==this.lan.escape&&i<this.allCode.length-1){
this.currentWord+=this.allCode.charAt(i);
i++;
}
this.currentWord+=this.allCode.charAt(i);
i++;
}
if(i<this.allCode.length)this.currentWord+=this.allCode.charAt(i);
}
else if(this.lan.delimiter.indexOf(c)!=-1){
this.changeToState("delimiter");
this.currentWord+=c;
}
else if(c=="\n"){
this.changeToState("lineEnd");
this.currentWord+=c;
}
else{
this.changeToState("other");
this.currentWord+=c;
}
}
this.changeToState("end");

this.retarray.push("</div>");
this.result=this.retarray.join("");
this.result=this.result.replace(/\n/g,"<br />");
this.result=this.result.replace(/\t/g,"&nbsp;&nbsp;&nbsp;");
return this.result;
},

changeToState:function(_state){
if(this.currentState!=_state){
if(this.currentWord.length>0)this.handleCurrentWord();
this.currentState=_state;
}
},

handleCurrentWord:function(){

switch(this.currentState){
case"word":
if(this.lan.reservedWords.exist(this.currentWord)){
this.retarray.push(fb1+this.lan.reservedWordColor+fb2+this.currentWord+fb3);
}
else if(this.lan.objects.exist(this.currentWord)){
this.retarray.push(fb1+this.lan.objectColor+fb2+this.currentWord+fb3);
}
else if(this.lan.properties.exist(this.currentWord)){
this.retarray.push(fb1+this.lan.propertyColor+fb2+this.currentWord+fb3);
}
else if(this.lan.methods.exist(this.currentWord)){
this.retarray.push(fb1+this.lan.methodColor+fb2+this.currentWord+fb3);
}
else if(this.lan.properties.exist(this.currentWord)){
this.retarray.push(fb1+this.lan.propertyColor+fb2+this.currentWord+fb3);
}
else{
this.retarray.push(fb1+this.lan.normalWordColor+fb2+this.currentWord+fb3);
}
break;
case"string":
this.retarray.push(fb1+this.lan.stringColor+fb2+this.currentWord.escapeHTML2()+fb3);
break;
case"comment":
this.retarray.push(fb1+this.lan.commentColor+fb2+this.currentWord.escapeHTML2()+fb3);
break;
case"delimiter":
this.retarray.push(fb1+this.lan.delimiterColor+fb2+this.currentWord.escapeHTML2()+fb3);
break;
case"other":
this.retarray.push(this.currentWord.escapeHTML2());
break;
case"lineEnd":
this.retarray.push(this.currentWord.escapeHTML2());
break;
case"end":
this.retarray.push(this.currentWord.escapeHTML2());
break;
default:
break;
}
this.currentState="";
this.currentWord="";
}
}

function highLightCode(){
var lighter=new Lighter();
var cls=document.getElementsByClassName("codeArea");
var className="";
var lang="";
for(var i=0;i<cls.length;i++)
{
className=cls[i].className;
if(!className.match(" "))continue;
lang=className.split(" ")[1];
if(!Lighter.langs.exist(lang)){
var s=$import("js/codeLighter/lang/"+lang+".js","js");
Event.observe(s,"load",abc(cls[i],lighter,lang),1);
Event.observe(s,"readystatechange",abc(cls[i],lighter,lang,s),1);
}else{
lighter.language=lang;
cls[i].innerHTML=lighter.highlight(cls[i].innerHTML);
}
}
}
function abc(a,b,c,s){
return function(){
if(s&&s.readyState=="loading")return;
b.language=c;
a.innerHTML=b.highlight(a.innerHTML);
}
}
Event.observe(window,"load",highLightCode,1);

function $se(tag,className,innerHTML){
var element=document.createElement(tag);
if(className)element.className=className;
if(innerHTML)element.innerHTML=innerHTML;
return element;
}



function isie(){
var user_agent=navigator.userAgent.toLowerCase();
if(user_agent.indexOf("msie")!=-1)return true;
return false;
}


Object.extend(String.prototype,{
upFirst:function(){
return this.charAt(0).toUpperCase()+this.substring(1,this.length);
}
});





var X2={};



X2.UI={};


X2.Element={};



X2.Style={};


X2.Position={}


X2.Observer={}


X2.Utility={}



X2.Timer={};
X2.Timer.begin=function(){
this.time1=new Date();
}

X2.Timer.end=function(){
this.time2=new Date();
alert(this.time2.getTime()-this.time1.getTime());
}


X2.CommonTipBox={
show:function(msg){
alert(msg);
}
,tip:function(msg){
alert(msg);
}
,error:function(msg){
alert(msg);
}
,systemError:function(msg){
alert(msg);
}
,confirm:function(msg){
return confirm(msg);
}
}

 
Position.clone=function(source,target){
source=$(source);
target=$(target);
target.style.position='absolute';
var offsets=this.cumulativeOffset(source);
target.style.top=offsets[1]+'px';
target.style.left=offsets[0]+'px';
target.style.width=source.offsetWidth+'px';
target.style.height=source.offsetHeight+'px';
}
 

 



X2.Hooker={

hook:function(target,targetMethod,callback){
var _targetMethod=target[targetMethod];
if(!_targetMethod._hookers){
var _oldMethod=_targetMethod;
target[targetMethod]=function(){
_oldMethod.apply(target,arguments);
var _args=arguments;
arguments.callee._hookers.each(function(ob){
if(ob)ob.apply(window,_args);
});
}
Object.extend(target[targetMethod],_targetMethod);
_targetMethod=target[targetMethod];
_targetMethod._hookers=[];
}
_targetMethod._hookers.push(callback);
return _targetMethod._hookers.length-1;
}

,stopHook:function(targetMethod,i){
try{
targetMethod._hookers[i]=0;
}catch(e){}
}

,clearHookers:function(targetMethod){
try{
targetMethod._hookers.clear();
}catch(e){}
}
}


X2.Event={
observe:function(target,eventName,callback){
return X2.Hooker.hook.apply(X2.Hooker.hook,arguments);
}
,stopObserve:function(dispatcher,i){
X2.Hooker.stopHook(dispatcher,i);
}
,clearObservers:function(dispatcher){
X2.Hooker.clearHookers(dispatcher);
}
}


var msgTipBox;
var postMsgBox;

var xmlDoc;
var bil;
var currentSortId=0;
var gbTipBox;
var rh;
var pbox;

var sortFlag;

var loaded=false;
var allLoaded=false;
var LoadedEvent=new Object();
var AllLoadedEvent=new Object();
var baflag=false;
var ch;


var hasPager={};

hasPager[0]=true;

Event.observe(window,"load",initLoad,0);

function init(){
msgTipBox=new TipBox("",{marginTop:"10px",borderStyle:"solid"});
postMsgBox=$("postMsg");
if(postMsgBox)postMsgBox.insertBefore(msgTipBox.box,postMsgBox.childNodes[1]);


bil=$("blogItemList");
gbTipBox=new TipBox("",{elementName:"div",marginLeft:"10px",marginRight:"10px"});

bil.parentNode.insertBefore(gbTipBox.box,bil);
gbTipBox.setText("");

showAlbum();
getMenuEffect();
ch=CookieHandler;
resetPostMsgBox();
initCalendar();

initBackForwardFixerr();

rh=new RefreshHandler();
window.setTimeout(function(){
rh.check("admin");
rh.check('tagCloud');
rh.check('search');
rh.check('album');
rh.check();
},500);

loaded=true;




}



var backForwardFixer;
function initBackForwardFixerr(){
backForwardFixer=new X2.Utility.BackForwardFixer('bffHack.aspx');
}



function initCalendar(){
if(!$('calendar'))return;
var calendar=new X2.UI.Calendar(null,_calendar.data,_calendar.year,_calendar.month,_calendar.date);

var cache={};
cache[calendar.year+'-'+calendar.month]=_calendar.data;


calendar.onchange=function(date){
getBlogByDate(date);
}


calendar.onyearchange=function(year){
var month=calendar.currentMonth;
return loadData(year,month);
}


calendar.onmonthchange=function(month){
var year=calendar.currentYear;
if(month==-1){
year--;
month=11;
}
if(month==12){
year++;
month=0;
}
return loadData(year,month);
}
$('calendarContainer').appendChild(calendar.box);


function loadData(year,month){
if(cache[year+'-'+month]){
calendar.setMark(cache[year+'-'+month]);
calendar.construct();
return true;
}else{
showLoading();
var json=new X2.Json('ajax2.aspx',X2.CommonTipBox);
json.onlogicalsuccess=function(jso){
calendar.currentYear=year;
calendar.currentMonth=month;
var arr=eval('('+jso.singleInfo+')');
cache[year+'-'+month]=arr;
calendar.setMark(arr);
calendar.construct();
showTitle();
}

json.onfailure=function(){
alert('数据传输失败!');
showTitle();
}
json.open('getCalendarData',{year:year,month:month+1});
}
return false;
}

function showLoading(){
calendar.main.box.childNodes[2].firstChild.innerHTML='<font color="red">loading...</font>';
}
function showTitle(){
calendar.main.box.childNodes[2].firstChild.innerHTML=calendar.currentYear+'年'+(calendar.currentMonth+1)+'月';
}
}




function getMenuEffect(){
var menu=$("ulMenu");
for(var i=0;i<menu.childNodes.length;i++){
menu.childNodes[i].onmouseover=function(){
Element.addClassName(this,"hover");
}
menu.childNodes[i].onmouseout=function(){
Element.removeClassName(this,"hover");
}
}

}


function resizeImages(){
var imgs=document.getElementsByTagName("img");
if(!imgs)return;
var width=parseInt(bil.offsetWidth)-30;
for(var i=0;i<imgs.length;i++){

if(imgs[i].id&&imgs[i].id=='RightTitlePic')continue;
if(imgs[i].offsetWidth>width){
var ht=imgs[i].offsetHeight*width/imgs[i].offsetWidth;
imgs[i].style.height=ht+"px";
imgs[i].style.width=width+"px";
}
}

}


function initLoad(){
resizeImages();
allLoaded=true;
}


function getSortId(_dl){
if(!_dl.className)return"";
return _dl.className.split(" ")[1];
}



function checkLoaded(_key,_method,_arguments){
if(loaded)return true;

return false;
}


function checkAllLoaded(_key,_method,_arguments){
if(loaded)return true;

return false;
}


function toggleDl(dt)
{
var e=dt.parentNode;
Element.cleanWhitespace(e);

var first;
if(e.childNodes.length>1)first=e.childNodes[1];
if(first&&first.nodeType!=1)first=null;

if(Element.hasClassName(e,"dlClose")){
Element.removeClassName(e,"dlClose");

if(first&&!Element.hasClassName(first,'tipBox'))Element.show(first);
}
else{
Element.addClassName(e,"dlClose");

if(first)Element.hide(first);
}
}



function checkMsgPost(e){
var event=e||window.event;
if((event.ctrlKey&&event.keyCode==13)
||(event.altKey&&(event.keyCode==115||event.keyCode==83))
)postMsg();
if(event.altKey)return false;

}


function postMsg(){
if(!checkLoaded("postMsg",postMsg,[]))return;
if(msgTipBox.using){
msgTipBox.toggleText("请不要不要频繁提交留言！",1);
return;
}
if($F("tbAuthor").trim().length==0||$F("tbTitle").trim().length==0||$F("tbContent").trim().length==0||$F("ddlMsgSort")=="0"){
msgTipBox.setText("表单内容不得为空！");
msgTipBox.show();
msgTipBox.hideAfterSeconds(3);
msgTipBox.using=false;
return;
}
if($("cbRememberMe").checked){
ch.setValue("x2author",$F("tbAuthor"),1000);
ch.setValue("x2url",$F("tbUrl"),1000);
}else{
ch.setValue("x2author","",-1);
ch.setValue("x2url","",-1);
}

msgTipBox.show();
msgTipBox.setText("正在提交留言，请稍候……","noCloseButton");
var option={
parameters:"author="+escape2($F("tbAuthor"))+"&url="+escape2($F("tbUrl"))+"&title="+escape2($F("tbTitle"))+"&content="+escape2($F("tbContent"))+"&sortId="+$F("ddlMsgSort"),
method:"post",
onSuccess:function(transport){
var response=transport.responseText;
if(/^<(\d+)><(\d+)>$/.exec(response)){
msgTipBox.setText("留言提交成功，感谢关注！");
msgTipBox.hideAfterSeconds(3);
if(RegExp.$2==1)addMsgToLeft(RegExp.$1,$F("ddlMsgSort"));
resetPostMsgBox();
}
else{
msgTipBox.setText(response);
msgTipBox.hideAfterSeconds(3);
}
},
onFailure:function(transport){
msgTipBox.using=false;
msgTipBox.setText("数据提交失败，请检查网络或【<a href='javascript:postMsg()'>重试</a>】。");
msgTipBox.hideAfterSeconds(3);
}
}
var request=new Ajax.Request("ajax.aspx?s="+Math.random()+"&oper=addMsg",option);

}

function addMsgToLeft(topicId,sortId){

var n=$("newMsg");
if(!n)return;
Element.cleanWhitespace(n);
var str="<a href='javascript:gsb("+topicId+")'>"+$F("tbTitle").escapeHTML2()+"</a>";
var dd=document.createElementWithText("dd",str);
var count=n.childNodes.length;

if(count>10)n.removeChild(n.childNodes[count-1]);

$aa(n.childNodes[0],dd);
}

function resetPostMsgBox(){
if(!$("tbAuthor"))return;
$("tbAuthor").value=ch.getValue("x2author");
$("tbUrl").value=ch.getValue("x2url")?ch.getValue("x2url"):"http://";
if(ch.getValue("x2author"))$("cbRememberMe").checked=true;
$("tbTitle").value="";
$("tbContent").value="";
$("ddlMsgSort").selectedIndex=0;
}

function cutLeft(str,len){
if(str.length>len)return str.slice(0,len)+"……";
return str;
}

function setCurrentMenu(sortId){
var _menu=$("ulMenu");
$A(_menu.childNodes).each(function(node){
if(node.nodeType!=1)throw $continue;
if(node.id=="m"+sortId)Element.addClassName(node,"current");
else Element.removeClassName(node,"current");
});
setRssLink(sortId);
}

function hidePager(){
Element.hide($("pagerHolder"));
}

function showPager(){
Element.show($("pagerHolder"));
}
 

function genPager(rc,ps,cp,si,_type){
var pager=$("pager");
var p=10;
var pagerStr="";
var tpc=Math.ceil(rc/ps);
var t=Math.floor(((cp-1)/p));
var i=0;
var type=1;
if(_type)type=_type;

for(i=t*p+1;i<=(t+1)*p&&i<=tpc;i++){
if(i==cp)pagerStr+="<span title='当前页' class='cp'>["+i+"]</span>";
else pagerStr+="<a title='第"+i+"页' href='javascript:scroll(0,0);pagerAdapter("+type+","+si+","+i+")'>["+i+"]</a>";
}
if(t>0){
pagerStr="<a title='第"+t*p+"页' href='javascript:scroll(0,0);pagerAdapter("+type+","+si+","+t*p+")'>&lt;&lt;</a>"+pagerStr;
pagerStr="<a title='首页' href='javascript:scroll(0,0);pagerAdapter("+type+","+si+",1)'>|&lt;&lt;</a>"+pagerStr;
}
if((t+1)*p<tpc){
pagerStr+="<a title='第"+((t+1)*p+1)+"页' href='javascript:scroll(0,0);pagerAdapter("+type+","+si+","+((t+1)*p+1)+")'>&gt;&gt;</a>";
pagerStr+="<a title='末页' href='javascript:scroll(0,0);pagerAdapter("+type+","+si+","+tpc+")'>&gt;&gt;|</a>";
}
if(rc==0)pagerStr="<span style='font-family:Arial,sans-serif'>没有数据。</span>";
pager.innerHTML=pagerStr;
}


function pagerAdapter(type,sortId,page){
switch(type){
case 1:
getBlog(sortId,page);
break;
case 2:
getTopicList(page);
break;
case 3:
getAdminCommentList(page);
break;
case 4:
getAdminTrackbackList(page);
break;
default:
break;
}
}




var rssAutoFeed=null;
function setRssLink(sortId){
var head=document.getElementsByTagName("head")[0];
if(!rssAutoFeed){
rssAutoFeed=$se("link");
rssAutoFeed.rel="alternate";
rssAutoFeed.type="application/rss+xml";
rssAutoFeed.title="RSS 2.0";
rssAutoFeed.href="rss.aspx?c=0";
Element.cleanWhitespace(head);
head.appendChild(rssAutoFeed);
}

if(sortId=="admin"||sortId=='search')sortId="0";
$("rssLink").href="rss.aspx?c="+sortId;
$("rssLink").target="_blank";
if($("m"+sortId))$("imgRss").title="RSS订阅："+$("m"+sortId).innerHTML;
else $("imgRss").title="RSS订阅";
}


function setStyle(title){
var i,links,eflag=false;
links=document.getElementsByTagName("link");
for(i=0;links[i];i++){
if(links[i].getAttribute("rel").indexOf("style")!=-1&&links[i].getAttribute("title")){
links[i].disabled=true;
if(links[i].getAttribute("title").indexOf(title)!=-1){links[i].disabled=false;eflag=true;}
}
}
if(!eflag){
$import("skin/"+title+"/default.css","css",title);
$import("skin/"+title+"/admin.css","css",title);
setStyle(title);
}
}




function getBffCallback(_sortId,_hash,_bil,_pagerContent){

return function(){

if(/\d+/.test(currentSortId)){
resetBlogItemBoxes();
}

setCurrentMenu(_sortId);
if(isie())location.hash=_hash;

backForwardFixer.replace(_bil,bil);
bil=_bil;
currentSortId=_sortId;
if(_pagerContent)$('pager').innerHTML=_pagerContent;
if(hasPager[_sortId])showPager();
else hidePager();
}
}



X2.Element={
getElement:function(tagName,className,innerHTML){
var e=$se('tagName',className);
if(innerHTML)e.innerHTML=innerHTML;
}
,getFormElement:function(type,className,value){
var e;
switch(type){
case"text":
e=$se("input");
e.type="text";
break;
case"hidden":
e=$se("input");
e.type="hidden";
break;
case"password":
e=$se("input");
e.type="password";
break;
case"file":
e=$se("input");
e.type="file";
break;
case"button":
e=$se("input");
e.type="button";
break;
case"submit":
e=$se("input");
e.type="submit";
break;
case"checkbox":
e=$se("input");
e.type="checkBox";
break;
case"radio":
e=$se("input");
e.type="radio";
break;
case"textarea":
e=$se("textarea");
e.cols=e.rows=3;
break;
default:
e=$se(type);
break;
}
if(className)e.className=className;
if(value)e.value=value;
return e;
}
}


function $sf(){
return X2.Element.getFormElement.apply(X2.Element,arguments);
}


function $ap(e1,e2){
e1.appendChild(e2);
return e2;
}


function $aa(e1,e2){
if(e1.nextSibling)e1.parentNode.insertBefore(e2,e1.nextSibling);
else e1.parentNode.appendChild(e2);
return e2;
}


function $bd(e1,tagName,className,innerHTML){
var e2=$se(tagName,className,innerHTML);
$ap(e1,e2);
return e2;
}


function $st(text){
return document.createTextNode(text);
}


function showAlbum(){
var option={
parameters:"s="+Math.random()+"&oper=loadAlbum",
method:'get',
onSuccess:function(transport){
var rp=transport.responseText;
var doc=new X2Doc(rp);

for(var i=0;i<doc.root.contents.length;i++){

var arr=new Array();
for(var j=0;j<doc.root.contents[i].contents.length;j++){
arr.push(["UserFiles/thumb/"+doc.root.contents[i].contents[j].getValue("fileName")+".jpg"
,"UserFiles/"+doc.root.contents[i].contents[j].getValue("fileName")
,doc.root.contents[i].contents[j].getValue("description")
,doc.root.contents[i].contents[j].getValue("id")
,doc.root.contents[i].contents[j].getValue("defaultPhoto")]);
}
var aname=doc.root.contents[i].attributes["name"];
pbox.add(aname,arr,doc.root.contents[i].attributes["type"],doc.root.contents[i].attributes["id"]);
}
pbox.init();

},
onFailure:function(transport){

}
}
var request=new Ajax.Request("ajax.aspx",option);


pbox=new photoBox("album");
pbox.onFull=function(){
scroll(0,0);
showAlbumGroup();
}
if($("album"))$("album").appendChild(pbox.getBox());
}



function showAlbumGroup(){
gbTipBox.show('正在获取数据，请稍候……','noButton');


if(!pbox.inited){
window.setTimeout(showAlbumGroup,1000);
return;
}
var container=pbox.getGroupShowBox(parseInt(bil.offsetWidth));

var oldSortId=currentSortId;
var oldBil=bil;
var oldHash=location.hash;
setAlbumUrl();
if(backForwardFixer.isBegin())oldHash='#';
bil.parentNode.replaceChild(container,bil);
bil=container;

if(oldHash!=location.hash)backForwardFixer.add(getBffCallback(oldSortId,oldHash,oldBil),getBffCallback('search',location.hash,bil));
setCurrentMenu('search');
gbTipBox.hide();
hidePager();
currentSortId='search';
gbTipBox.hide();
return;
}


function setAlbumUrl(){
rh.reset();
rh.setValue("album","showAlbumGroup");
rh.toHash();
}

function getBlog(sortId,p){

sortFlag=Math.random();
var sortFlagTemp=sortFlag;
gbTipBox.setText("正在获取数据，请稍候……","noCloseButton");
gbTipBox.show();
var option={
parameters:"s="+Math.random()+"&oper=getBlog&sortId="+sortId+"&page="+p,
method:"get",
onSuccess:function(transport){
if(sortFlagTemp!=sortFlag)return;
xmlDoc=new X2Doc(transport.responseText);

var oldSortId=currentSortId;

var oldBil=bil;
var oldPagerContent=$('pager').innerHTML;
var oldHash=document.location.hash;

currentSortId=sortId;
getBlogList(sortId);
setCurrentMenu(sortId);
setSortAndPageUrl(sortId,p);
if(backForwardFixer.isBegin())oldHash='#';

backForwardFixer.add(getBffCallback(oldSortId,oldHash,oldBil,oldPagerContent),getBffCallback(sortId,document.location.hash,bil,$('pager').innerHTML));
gbTipBox.hide();
if(document.X2Lighter)highLightCode();
resizeImages();
currentPage=p;
},
onFailure:function(transport){
if(sortFlagTemp!=sortFlag)return;
gbTipBox.using=false;
gbTipBox.setText("对不起，获取数据失败，请检查网络或者重试。");
}
}
var request=new Ajax.Request("ajax.aspx",option);
}




function getBlogByDate(date){
var sortFlagTemp=sortFlag;
gbTipBox.setText("正在获取数据，请稍候……","noCloseButton");
gbTipBox.show();

var option={
parameters:"s="+Math.random()+"&oper=getBlog&date="+date,
method:"get",
onSuccess:function(transport){
setCurrentMenu('search');
xmlDoc=new X2Doc(transport.responseText);
var oldSortId=currentSortId;
var oldBil=bil;
var oldHash=location.hash;
currentSortId='search';

getBlogList('search');
setDateUrl(date);
if(backForwardFixer.isBegin())oldHash='#';
backForwardFixer.add(getBffCallback(oldSortId,oldHash,oldBil),getBffCallback('search',location.hash,bil));
gbTipBox.hide();
if(document.X2Lighter)highLightCode();
resizeImages();

var arrDate=date.split('-');
var dateString=arrDate[0]+'年'+arrDate[1]+'月';
if(arrDate.length==3)dateString+=arrDate[2]+'日';
new Insertion.Top(bil,'<b class="dateSearchTitle"><span> '+dateString+' </span>发表的文章如下：</b>');

},
onFailure:function(transport){
var win=window.open();
win.document.write(transport.responseText);
gbTipBox.using=false;
gbTipBox.setText("对不起，获取数据失败，请检查网络或者重试。");
}
}
var request=new Ajax.Request("ajax.aspx",option);
}


function gbTag(tagId){
var sortFlagTemp=sortFlag;
gbTipBox.setText("正在获取数据，请稍候……","noCloseButton");
gbTipBox.show();

var option={
parameters:"s="+Math.random()+"&oper=getBlog&tagId="+tagId,
method:"get",
onSuccess:function(transport){

setCurrentMenu('search');
xmlDoc=new X2Doc(transport.responseText);


var oldSortId=currentSortId;
var oldBil=bil;
var oldHash=location.hash;
currentSortId='search';



getBlogList('search');
setTagUrl(tagId);

if(backForwardFixer.isBegin())oldHash='#';
backForwardFixer.add(getBffCallback(oldSortId,oldHash,oldBil),getBffCallback('search',location.hash,bil));
resizeImages();
gbTipBox.hide();
if(document.X2Lighter)highLightCode();


var tagName;
var dl=$A(bil.childNodes).detect(function(e){
if(e.tagName&&e.tagName.toLowerCase()=='dl')return true;
});
var dd=$A(dl.childNodes).detect(function(e){
return Element.hasClassName(e,'tag');
});
var a=$A(dd.childNodes).detect(function(e){
return e.href&&e.href.indexOf('('+tagId+')')>0;
});
tagName=a.innerHTML;
new Insertion.Top(bil,'<b class="dateSearchTitle">标签为<span> '+tagName+' </span>的文章如下：</b>');




},
onFailure:function(transport){
var win=window.open();
win.document.write(transport.responseText);
gbTipBox.using=false;
gbTipBox.setText("对不起，获取数据失败，请检查网络或者重试。");
}
}
var request=new Ajax.Request("ajax.aspx",option);
}

 
function gsb(tid){

sortFlag=Math.random();
var sortFlagTemp=sortFlag;
gbTipBox.setText("正在获取数据，请稍候……","noCloseButton");
gbTipBox.show();
var option={
parameters:"s="+Math.random()+"&oper=getBlog&tid="+tid,
method:"get",
onSuccess:function(transport){
if(sortFlagTemp!=sortFlag)return;
xmlDoc=new X2Doc(transport.responseText);
if(xmlDoc.root.attributes["recCount"]=="0"){
gbTipBox.setText("对不起，请求的主题不存在，或者已经被删除。");
gbTipBox.show();
return;
}
var sortId=xmlDoc.root.contents[0].getValue("sortId");

var oldSortId=currentSortId;
var oldBil=bil;
var oldHash=location.hash;
currentSortId=sortId;
setCurrentMenu(sortId);
getBlogList(sortId);
setSingleTopicUrl(tid);
if(backForwardFixer.isBegin())oldHash='#';
backForwardFixer.add(getBffCallback(oldSortId,oldHash,oldBil),getBffCallback(sortId,location.hash,bil));

gbTipBox.hide();
if(document.X2Lighter)highLightCode();
resizeImages();

currentTid=tid;
},
onFailure:function(transport){
if(sortFlagTemp!=sortFlag)return;
gbTipBox.using=false;
gbTipBox.setText("对不起，获取数据失败，请检查网络或者重试。");
}
}
var request=new Ajax.Request("ajax.aspx",option);
}





function getBlogList(sortId){
var recCount=parseInt(xmlDoc.root.attributes["recCount"]);
var pageSize=parseInt(xmlDoc.root.attributes["pageSize"]);
var currentPage=parseInt(xmlDoc.root.attributes["currentPage"]);
if(pageSize==0){
hidePager();
hasPager[sortId]=false;
}else{
showPager();
hasPager[sortId]=true;
genPager(recCount,pageSize,currentPage,sortId);
}

var tempBil=document.createElement("div");
for(var i=0;i<xmlDoc.cns.length;i++){
tempBil.appendChild(createBlogItem(xmlDoc.cns[i]));
}
if(xmlDoc.cns.length==0)tempBil.innerHTML='<div style="text-align:left;margin:10px;color:red;">没有数据。</div>';
bil.parentNode.replaceChild(tempBil,bil);
bil=tempBil;
scroll(0,0);

resetBlogItemBoxes();
}


function createBlogItem(bi){
var opt;
if(bi.getValue("option"))opt=bi.getValue("option");
else opt="0000000";
 
var more=opt.charAt(0)=="1";
var link=opt.charAt(1)=="1";
var sortTop=opt.charAt(2)=="1";
var homeTop=opt.charAt(3)=="1";
var allowComment=opt.charAt(4)=="1";
var noTitle=opt.charAt(5)=="1";
var noDate=opt.charAt(6)=="1";

var sortId=bi.getValue("sortId");

var dl,span,dt,txt,txt;
dl=$se('dl','list blogItem');

if(!noTitle){
dt=$se("dt");
if(!noDate){
$bd(dt,'span','',bi.getValue("date").split(" ")[0]);
}
if((currentSortId=="0"&&homeTop)||(currentSortId!="0"&&sortTop)){
$bd(dt,'span','top','【置顶】');
}

dt.innerHTML+=bi.getValue('title');
$ap(dl,dt);

}

if(!noDate){
dd=$se('dd','dateAbout','分类：');
$bd(dd,'span','',bi.getValue('sortName'));
$ap(dd,$st('时间：'));
$bd(dd,'span','',bi.getValue('date'));
$ap(dd,$st('作者：'));

var author=bi.getValue("author");
var url=bi.getValue("url");
url=url.toLowerCase();

if(!/^http:\/\//.test(url))url="http://"+url;
if(url.length>7)url="<a href=\""+url+"\" target=\"_blank\">"+author+"</a>";
else url=author;
$bd(dd,"span",'',url);
$ap(dl,dd);

}


var tag=bi.getValue("tag");
if(tag){
$bd(dl,'dd','tag',tag);
}

dd=$se("dd");
try{
dd.innerHTML=bi.getValue("abstract");
}catch(e){
try{
dd.innerHTML=bi.getValue("abstract").replace("<dd>","<span>").replace("</dd>","</span");
dd.innerHTML="<div style='color:#f00'>【该内容中有错误标记，已经被替换】</div>"+dd.innerHTML;
}catch(e){
dd.innerHTML="<div style='color:#f00'>【该内容中有错误标记，无法正常显示】</div>";
}
}
Element.addClassName(dd,"content");
if(more){
var para=document.createElement("p");
Element.addClassName(para,"readMore");
para.innerHTML="<a target=\"_blank\" href=\"html/"+bi.getValue("id")+".html\">——此篇较长，点击这里查看全文</a>";
dd.appendChild(para);
}
if(link){
var para=document.createElement("p");
Element.addClassName(para,"readMore");
para.innerHTML="<a rel=\"external\" target=\"_blank\" href=\""+bi.getValue("link")+"\">——此篇对应一个链接，点击这里查看</a>";
dd.appendChild(para);
}
dl.appendChild(dd);




if(allowComment){
dd=$se('dd','comment');
var topicId=bi.getValue('id');
span=$se('span','viewComment','＋查看评论 (');
$bd(span,'span','',bi.getValue('commentCount'));
span.innerHTML+=')';
span.onclick=toggleViewComment.bind(window,topicId,span);
span.onclick=function(){

toggleViewComment(topicId,this);
}
$ap(dd,span);

span=$se('span','viewComment','＋发表评论');
span.onclick=togglePostCommentBox.bind(window,topicId,span);
$ap(dd,span);

span=$se('span','viewComment','＋Trackback地址');
span.onclick=toggleTrackbackAddress.bind(window,topicId,span);
$ap(dd,span);

span=$se('span','viewComment','＋Trackbacks (');
$bd(span,'span','',bi.getValue('trackbackCount'));
span.innerHTML+=')';
span.onclick=toggleTrackbacks.bind(window,topicId,span);
$ap(dd,span);

$ap(dl,dd);
}

return dl;
}


function setSortAndPageUrl(sortId,page){
rh.reset();
rh.setValue("sid",sortId);
rh.setValue("page",page);
rh.toHash();
}


function setSingleTopicUrl(tid){
rh.reset();
rh.setValue("tid",tid);
rh.toHash();
}


function setDateUrl(date){
rh.reset();
rh.setValue('date',date);
rh.toHash();
}


function setTagUrl(tagId){
rh.reset();
rh.setValue('tagId',tagId);
rh.toHash();
}





var searchBox;
function initSearchBox(){
searchBox=new SearchBox();
}


function showSearchBox(){
if(!searchBox)initSearchBox();

var oldSortId=currentSortId;
var oldBil=bil;
var oldHash=location.hash;
setSearchUrl();
if(backForwardFixer.isBegin())oldHash='#';

bil.parentNode.replaceChild(searchBox.getBox(),bil);
bil=searchBox.getBox();

if(oldHash!=location.hash)backForwardFixer.add(getBffCallback(oldSortId,oldHash,oldBil),getBffCallback('search',location.hash,bil));

hidePager();
setCurrentMenu('search');
}


var SearchBox=Class.create();

SearchBox.prototype={
initialize:function(){
this.box=$se('div','searchBox');


var searchBar=$se('div','searchBar');
this.box.appendChild(searchBar);
this.iptKey=$se('input','iptKey');
this.iptKey.type='text';
this.iptKey.maxLength=20;
var btnSearch=$se('input','btnSearch');
btnSearch.type='button';
var span=$se('span');
var span2=$se('span','tip');
span.innerHTML='关键字搜索：';
span2.innerHTML=' * 最多显示50条结果';
btnSearch.value='搜索';
btnSearch.onclick=this.search.bind(this);

searchBar.appendChild(span);
searchBar.appendChild(this.iptKey);
searchBar.appendChild(btnSearch);
searchBar.appendChild(span2);


var itemFormat=[
['date','date','newLine','title']
,['title','title']
,['sort','sort','newLine','dateAbout']
,['author','author']
,['commentCount','commentCount']
,['time','time']
,['content','content','newLine']
,['id','none']
];
this.searchResultBox=new ItemList('searchResult',itemFormat);
this.box.appendChild(this.searchResultBox.getBox());


var lastKey='';
this.iptKey.onkeyup=function(e){
var event=e||window.event;
if(event.keyCode==Event.KEY_RETURN&&lastKey==this.value){
btnSearch.click();
}
lastKey=this.value;


}


}
,getBox:function(){
return this.box;
}
,getKey:function(){
return this.iptKey.value.escapeHTML();
}
,search:function(){
gbTipBox.show("正在搜索，请稍候……","noButton");

if(this.iptKey.value.length<2){
gbTipBox.setText('关键字至少需要两个字符!');
gbTipBox.show();
return;
}
var json=new X2.Json('ajax2.aspx',gbTipBox);
var self=this;
json.onlogicalsuccess=function(jso){
self.clearResult();
var row={};
row.title='搜索完毕，一共查找到<span class="resultCount">'+jso.data.length+'</span>条结果。';
self.searchResultBox.insertRow('t',row,'resultInfo');
jso.data.each(function(value,i){

var row={};
row.date=value.date.split(' ')[0];
row.title='<a href="javascript:gsb('+value.id+')">'+self.highlightTitleKey(value.title.stripTags())+'</a>';
row.sort='分类：'+value.sort;
row.time='时间：'+value.date;
row.author='作者：'+value.author;
row.commentCount='评论数：'+value.commentCount;
row.content=self.highlightContentKey(value.content.stripTags());

row.id=value.id;
self.searchResultBox.insertRow('t'+i,row);

});
gbTipBox.hide();
}
json.open('search',{key:this.getKey(),page:1});
}
,highlightTitleKey:function(s){
return s.replace(this.getKey(),'<span class="key">'+this.getKey()+'</span>');
}
,highlightContentKey:function(s){
var span=40;
var result=[];
var index=0;
var arrIndex=[];
var key=this.getKey();
var highKey='<span class="key">'+key+'</span>'
var len=key.length;
var sep='&nbsp; …… &nbsp;';


index=s.indexOf(key);


var ii=0;

while(index!=-1){
ii++;
if(ii>100)break;
arrIndex.push(index);
if(index+len>=s.length)break;
index=s.indexOf(key,index+len);
}





if(arrIndex.length==0)return s.length>span*2+20?s.substring(0,span*2)+sep:s;


if(arrIndex[0]<=span)result.push(s.substring(0,arrIndex[0]));
else{

result.push(s.substring(arrIndex[0]-span,arrIndex[0]));
}
result.push(highKey);




for(var i=1;i<arrIndex.length;i++){
if(arrIndex[i]-arrIndex[i-1]<(span*2+20)){
result.push(s.substring(arrIndex[i-1]+len,arrIndex[i]));
}else{
result.push(s.substring(arrIndex[i-1]+len,arrIndex[i-1]+len+span));
result.push(sep);
result.push(s.substring(arrIndex[i]-span,arrIndex[i]));
}
result.push(highKey)
}


var lastIndex=arrIndex[arrIndex.length-1];
if(s.length-lastIndex-len<span){
result.push(s.substring(lastIndex+len,s.length));
}else{
result.push(s.substring(lastIndex+len,lastIndex+len+span));
result.push(sep);
}
return result.join('');
}
,clearResult:function(){
this.searchResultBox.clear();
}
,show:function(){

}
,hide:function(){

}
}


function setSearchUrl(){
rh.reset();
rh.setValue("search","showSearchBox");
rh.toHash();
}

var BlogItemBoxes={};
function getBlogItemBox(topicId,e){
var bib=BlogItemBoxes[topicId]?BlogItemBoxes[topicId]:new BlogItemBox(topicId,e.parentNode.parentNode);
BlogItemBoxes[topicId]=bib;
return bib;
}


function resetBlogItemBoxes(){
for(var p in BlogItemBoxes){
bib=BlogItemBoxes[p];
if(bib.hideAll)bib.hideAll();
}
BlogItemBoxes={};
}


var BlogItemBox=Class.create();
BlogItemBox.prototype={
initialize:function(topicId,container){

this.box=container;
this.topicId=topicId;

this.commentBar=$A(container.childNodes).detect(function(e){
if(e.tagName&&e.className=='comment')return true;
});

if(this.commentBar){
Element.cleanWhitespace(this.commentBar);

this.commentCountBox=this.commentBar.childNodes[0].childNodes[1];


this.tipBox=new TipBox('',{elementName:'div',marginLeft:"15px",marginRight:"15px",marginTop:"0",marginBottom:"10px"});
$aa(container,this.tipBox.box);
this.hideTip();
}
}
,getCommentCount:function(){
return eval(this.commentCountBox.innerHTML);
}
,setCommentCount:function(count){
this.commentCountBox.innerHTML=count;
}

,togglePostCommentBox:function(){
var c=this.commentBar.childNodes[1].innerHTML.charAt(0)
if(c=='＋'){

this.showPostCommentBox();
}else if(c=='－'){

this.hidePostCommentBox();
}
}
,showPostCommentBox:function(){
this.hideAll();

if(!this.postCommentBox){
this.postCommentBox=new PostCommentBox(this.topicId,this);
$aa(this.tipBox.box,this.postCommentBox.getBox());
this.postCommentBox.hide();
}
this.postCommentBox.show();
this.setOpen(this.commentBar.childNodes[1]);
}
,hidePostCommentBox:function(){
if(this.postCommentBox)this.postCommentBox.hide();
this.setClose(this.commentBar.childNodes[1]);
}

,toggleViewComment:function(){

var c=this.commentBar.childNodes[0].innerHTML.charAt(0);

if(c=='＋'){
this.showViewCommentBox();
}else if(c=='－'){
this.hideViewCommentBox();
}
}

,showViewCommentBox:function(){
this.hideAll();
if(!this.viewCommentBox){

if(window._firstTopicIdOfCommentList){
this.viewCommentBox=$('firstTopicIdOfCommentList'+_firstTopicIdOfCommentList);
}

else this.viewCommentBox=$se('div','commentList commentListBox');
try{
$aa(this.tipBox.box,this.viewCommentBox);
}catch(e){
this.viewCommentBox=$se('div','commentList commentListBox');
$aa(this.tipBox.box,this.viewCommentBox);
}
Element.hide(this.viewCommentBox);
}
var self=this;
this.showTip("正在获取数据，请稍候……","noButton");
var json=new X2.Json('ajax.aspx',this.tipBox);
json.onsuccess=function(data){
if(/^<(\d+)>/.exec(data)==null){
self.showTip(data);
self.tipBox.hideAfterSeconds(3);
return;
}
self.commentCountBox.innerHTML=RegExp.$1;

if(RegExp.$1==0){
self.showTip("对不起，本主题暂时还没有评论！");
self.tipBox.hideAfterSeconds(3);
return;
}

self.viewCommentBox.innerHTML=RegExp.rightContext;
self.setOpen(self.commentBar.childNodes[0]);
self.hideTip();
Element.show(self.viewCommentBox);
}
json.openForText('getComment',{topicId:this.topicId});
}

,hideViewCommentBox:function(){
if(!this.viewCommentBox&&window._firstTopicIdOfCommentList)this.viewCommentBox=$('firstTopicIdOfCommentList'+_firstTopicIdOfCommentList);
if(this.viewCommentBox)Element.hide(this.viewCommentBox);

this.setClose(this.commentBar.childNodes[0]);
}

,toggleTrackbackAddress:function(){

var c=this.commentBar.childNodes[2].innerHTML.charAt(0);
if(c=='＋'){
this.showTrackbackAddress();
}else if(c=='－'){
this.hideTrackbackAddress();
}
}
,showTrackbackAddress:function(){
this.hideAll();
if(!this.trackbackAddressBox){

this.trackbackAddressBox=$se('div','trackbackAddress');
var path=window.location.host+window.location.pathname;
this.trackbackAddressBox.innerHTML="<ul class='trackbackAddress'><li class='text'>本文的Trackback地址是：</li><li>http://"
+path.substring(0,path.lastIndexOf('/')+1)+"trackback.aspx?id="+this.topicId+"</li><li class='text'>本文的固定地址是：</li><li>http://"
+path+"?tid="+this.topicId+"</li></ul>";
$aa(this.tipBox.box,this.trackbackAddressBox);
Element.hide(this.trackbackAddressBox);
}
Element.show(this.trackbackAddressBox);
this.setOpen(this.commentBar.childNodes[2]);
}
,hideTrackbackAddress:function(){
if(this.trackbackAddressBox)Element.hide(this.trackbackAddressBox);
this.setClose(this.commentBar.childNodes[2]);
}

,toggleTrackbackList:function(){

var c=this.commentBar.childNodes[3].innerHTML.charAt(0);
if(c=='＋'){
this.showTrackbackList();
}else if(c=='－'){
this.hideTrackbackList();
}
}
,showTrackbackList:function(){
if(!this.trackbackListBox){

this.trackbackListBox=$se('div','commentList commentListBox');
$aa(this.tipBox.box,this.trackbackListBox);
Element.hide(this.trackbackListBox);
}
this.hideAll();
var self=this;
this.showTip("正在获取数据，请稍候……","noButton");
var json=new X2.Json('ajax.aspx',this.tipBox);
json.onsuccess=function(data){
if(/^<(\d+)>/.exec(data)==null){
self.tipBox.show(data,0,5);
return;
}

self.commentBar.childNodes[3].childNodes[1].innerHTML=RegExp.$1;
if(RegExp.$1==0){
self.tipBox.show("对不起，本主题暂时还没有Trackback！",0,5);
return;
}

self.trackbackListBox.innerHTML=RegExp.rightContext;
self.setOpen(self.commentBar.childNodes[3]);
self.hideTip();

Element.show(self.trackbackListBox);

}
json.openForText('getTrackbacks',{topicId:this.topicId});

}
,hideTrackbackList:function(){
if(this.trackbackListBox)Element.hide(this.trackbackListBox);
this.setClose(this.commentBar.childNodes[3]);
}

,hideAll:function(){

this.hidePostCommentBox();
this.hideViewCommentBox();
this.hideTrackbackAddress();
this.hideTrackbackList();
}
,setOpen:function(e){
e.childNodes[0].nodeValue=e.childNodes[0].nodeValue.replace('＋','－');
}
,setClose:function(e){
e.childNodes[0].nodeValue=e.childNodes[0].nodeValue.replace('－','＋');
}
,showTip:function(msg,noButton){
this.tipBox.show(msg,noButton);
}
,hideTip:function(){
this.tipBox.hide();
}

}


var PostCommentBox=Class.create();

PostCommentBox.prototype={

initialize:function(topicId,blogItemBox){
this.topicId=topicId;
this.bib=blogItemBox;
this.main=new FormBox('commentList postCommentBox','dl','list postComment');
this.box=this.main.container;
this.main.insertTextLine('发表您的评论：','title');
this.main.insertItem('text','author',{foreLabel:'署名：',attributes:{maxLength:15}});
this.main.insertItem('checkbox','rememberMe',{sameLine:true,backLabel:'记住我',value:true,className:'cb'});
this.main.insertItem('text','url',{foreLabel:'主页：',attributes:{maxLength:200,value:'http://'}});
this.main.insertItem('textarea','content',{foreLabel:'内容：',attributes:{cols:6,rows:6}});
this.main.insertItem('button','btnPost',{sameLine:true,className:'button',attributes:{value:'提交'}});
this.main.insertItem('','',{liClassName:'intro',tip:'* 提交评论可使用快捷键Ctrl+Enter或Alt+S'});

if(ch.getValue('x2author')){
this.main.setValue('author',ch.getValue('x2author'));
this.main.setValue('url',ch.getValue('x2url'));
this.main.setValue('rememberMe','1');
}


this.items=this.main.items;


this.tipBox=new TipBox("",{elementName:"dd"});

$aa(this.main.container.firstChild.firstChild,this.tipBox.box);

var self=this;

this.items['content'].onkeydown=function(e){
var event=e||window.event;
if((event.ctrlKey&&event.keyCode==13)
||(event.altKey&&(event.keyCode==115||event.keyCode==83))
)self.postComment();
if(event.altKey)return false;
}

this.items['btnPost'].onclick=this.postComment.bind(this);
}

,getBox:function(){
return this.box;
}
,toQueryString:function(){
return this.main.toQueryString();
}

,reset:function(){
if(this.main.getValue('rememberMe')){
ch.setValue('x2author',this.main.getValue('author'),1000);
ch.setValue('x2url',this.main.getValue('url'),1000);
this.main.setValue('content','');
}else{
ch.setValue('x2author','');
ch.setValue('x2url','');
this.main.reset();
this.main.setValue('url','http://');
}
}

,postComment:function(){
if(this.main.getValue('author').trim().length==0||this.main.getValue('content').trim().length==0){
this.showTip("署名和内容均不得为空！");
return;
}

this.showTip("正在提交评论，请稍候……","noCloseButton");
var self=this;
var json=new X2.Json('ajax2.aspx',this.tipBox);
json.onlogicalsuccess=function(jso){

if(/^\d{4}-\d{2}-\d{2}/.test(jso.singleInfo)){

self.bib.setCommentCount(self.bib.getCommentCount()+1);
self.addToLeft(self.main.getValue('author'),self.main.getValue('content'),self.topicId);

self.reset();
self.bib.hidePostCommentBox();
self.bib.tipBox.show("评论已经成功提交，谢谢您的关注！",'',5);
}
else{
self.showTip('评论已提交，出现未知错误。');
}
}
json.open('addComment',this.toQueryString()+'&parentId='+this.topicId,'post');
}

,addToLeft:function(author,content,topicId,sortId){
var n=$("newComment");
if(!n)return;
Element.cleanWhitespace(n);
var str="<span>"+author.escapeHTML2()+"：</span>";
str+=("<a href='javascript:gsb("+topicId+")'>"+cutLeft(content,50).escapeHTML2()+"</a>");
var dd=$se("dd",'',str);
var count=n.childNodes.length;

if(count>10)n.removeChild(n.childNodes[count-1]);

$aa(n.childNodes[0],dd);
}
,show:function(){
Element.show(this.box);
}
,hide:function(){
this.hideTip();
Element.hide(this.box);
}
,showTip:function(msg,noButton){
this.tipBox.show(msg,noButton);
}
,hideTip:function(){
this.tipBox.hide();
}
}


function togglePostCommentBox(topicId,e){
getBlogItemBox(topicId,e).togglePostCommentBox();
}


function toggleViewComment(topicId,e){
getBlogItemBox(topicId,e).toggleViewComment();
}


function toggleTrackbackAddress(topicId,e){
getBlogItemBox(topicId,e).toggleTrackbackAddress();
}


function toggleTrackbacks(topicId,e){
getBlogItemBox(topicId,e).toggleTrackbackList();
}



var adminScript=false;
var adminBil=document.createElement("div");
function admin(back){
if(!checkLoaded("admin",admin,[]))return;
scroll(0,0);
gbTipBox.setText("正在获取数据，请稍候……","noCloseButton");
gbTipBox.show();


if(adminScript){
hidePager();
setCurrentMenu("admin");

var oldSortId=currentSortId;
var oldBil=bil;
var oldHash=location.hash;
if(!back&&!rh.check("action")){
rh.reset();
rh.setValue("admin","admin");
rh.toHash();
}
if(backForwardFixer.isBegin())oldHash='#';
bil.parentNode.replaceChild(adminBil,bil);
bil=adminBil;
if(!back&&oldSortId!='admin')backForwardFixer.add(getBffCallback(oldSortId,oldHash,oldBil),getBffCallback('admin',location.hash,adminBil)); 


adminInit(bil);
gbTipBox.hide();
currentSortId='admin';
return;
}
sortFlag=Math.random();
var sortFlagTemp=sortFlag;
var s=$import("js/admin.js?s="+Math.random(),"js");
s.onload=s.onreadystatechange=function(){
if(sortFlagTemp!=sortFlag)return;
if(this.readyState&&this.readyState=="loading")return;

adminScript=true;

hidePager();
setCurrentMenu("admin");

adminInit(bil);

var oldSortId=currentSortId;
var oldBil=bil;
var oldHash=location.hash;

if(!back&&!rh.check("action")){
rh.reset();
rh.setValue("admin","admin");
rh.toHash();
}
if(backForwardFixer.isBegin())oldHash='#';
bil.parentNode.replaceChild(adminBil,bil);
bil=adminBil;

backForwardFixer.add(getBffCallback(oldSortId,oldHash,oldBil),getBffCallback('admin',location.hash,adminBil));
 
currentSortId='admin';


gbTipBox.hide();
OnAdminLoad();
}
return;
}


function OnAdminLoad(){}

var ItemList=Class.create();
ItemList.prototype={
initialize:function(className,_items){
this.container=$se("div");
if(className)this.container.className=className;
if(_items)this.items=_items;
this.rows={};
this.data={};

},
insertRow:function(rowName,rowValue,className){
this.data[rowName]=rowValue;
var ul=$se("ul");
if(className)Element.addClassName(ul,className);
this.container.appendChild(ul);
this.rows[rowName]=ul;
this.rows[rowName].value=rowValue;
var li,span;
var items={};
for(var i=0;i<this.items.length;i++){
if(this.items[i][2]){
li=$se("li");
ul.appendChild(li);
}
if(this.items[i][3])li.className=this.items[i][3];

span=$se("span");
li.appendChild(span);
if(this.items[i][1]!='none'){
span.className=this.items[i][1];
}else{
span.style.display="none";
}
span.innerHTML=eval("rowValue."+this.items[i][0]);
items[this.items[i][0]]=span;
}
this.rows[rowName].items=items;

return this.rows[rowName];
},
removeRow:function(rowName){
this.rows[rowName].parentNode.removeChild(this.rows[rowName]);
this.data[rowName]='';
},
getBox:function(){
return this.container;
},
show:function(){
Element.show(this.container);
this.onShow();
},
hide:function(){
Element.hide(this.container);
this.onHide();
},
clear:function(){
this.container.innerHTML='';
},
onShow:function(){},
onHide:function(){}
}

var tagContainer;
function showTagCloud(){

if(tagContainer){
var oldSortId=currentSortId;
var oldBil=bil;
var oldHash=location.hash;
setTagCloudUrl();
if(backForwardFixer.isBegin())oldHash='#';

bil.parentNode.replaceChild(tagContainer,bil);
bil=tagContainer;

if(oldHash!=location.hash)backForwardFixer.add(getBffCallback(oldSortId,oldHash,oldBil),getBffCallback('search',location.hash,bil));


setCurrentMenu('search');
gbTipBox.hide();
hidePager();
currentSortId='search';
return;
}




gbTipBox.setText('正在获取数据，请稍候……','noButton');
gbTipBox.show();
var json=new X2.Json('ajax2.aspx',gbTipBox);
json.onlogicalsuccess=function(jso){
var div=$se('div','tagCloud');
var arr=[];
var maxSize=20;
var minSize=12;
var maxCount=0;

jso.data.each(function(value){maxCount=maxCount>value.count?maxCount:value.count;});
jso.data.each(function(value){
var size=Math.round(minSize+(maxSize-minSize)*value.count/maxCount);
arr.push('<a href="javascript:gbTag('+value.tagId+')"><font style="font-size:'+size+'px">'+value.tagName+'</font></a>');
});
div.innerHTML='<span>标签：</span>'+arr.join('')+'<div class="sep"><a href="javascript:refreshTagCloud()">[ 刷新 ]</a></div>';

tagContainer=div;
showTagCloud();
}
json.open('getTagCloud');


}


function refreshTagCloud(){
tagContainer=null;
showTagCloud();
}

function setTagCloudUrl(){
rh.reset();
rh.setValue("tagCloud","showTagCloud");
rh.toHash();
}

var FormBox=Class.create();
FormBox.prototype={
initialize:function(className,type,className2){
this.type='ul';
if(type)this.type=type;
this.container=$se("div");
if(className)this.container.className=className;
this.ul=$se(this.type);
if(className2)this.ul.className=className2;
this.container.appendChild(this.ul);
this.items=new Array();
},
appendChild:function(e){
this.container.appendChild(e);
},
getBox:function(){
return this.container;
},
show:function(){
Element.show(this.container);
this.onShow();
},
hide:function(){
Element.hide(this.container);
this.onHide();
},
getValue:function(name){
var e=this.items[name];
if(!e)return false;
if(!e.tagName)return false;
var tagName=e.tagName.toLowerCase();
if(tagName=="input"){
if(e.type=="radio"||e.type=="checkbox"){
return e.checked?1:0;
}else if(e.type=="text"||e.type=="password"||e.type=="hidden"){
return e.value;
}else return false;
}else if(tagName=="select"){
for(var i=0;i<e.length;i++){
if(e.options[i].selected)return e.options[i].value;
}
}else if(tagName=="textarea"){
if(e.id.match("fckeditor")){
var oEditor=FCKeditorAPI.GetInstance(e.id);
return oEditor.GetXHTML();
}else{
return e.value;
}
}else if(tagName=="span"){
return e.innerHTML;
}
return false;
},
setValue:function(name,value){
var e=this.items[name];
var tagName=e.tagName.toLowerCase();

if(tagName=="input"){
if(e.type=="radio"||e.type=="checkbox"){
e.checked=value=='1';
}else{
e.value=value;
}
}else if(tagName=="select"){
if(!value){
e.selectedIndex=0;
return;
}
for(var i=0;i<e.length;i++){
var o=e.options[i];
if(o.value==value){e.selectedIndex=i;return;}
}
}else if(tagName=="textarea"){
if(e.id.match("fckeditor")){
var oEditor=FCKeditorAPI.GetInstance(e.id);
oEditor.SetHTML(value);
}else{
e.value=value;
}
}else if(tagName=="span"){
e.innerHTML=value;
}

},
addSelectValue:function(name,text,value){
var e=this.items[name];
var opt=new Option(text,value);
e.options[e.length]=opt;
},
deleteSelectValue:function(name,value){
var e=this.items[name];
for(var i=0;i<e.length;i++){
if(e.options[i].value==value){
e.options[i]=null;
e.selectedIndex=0;
break;
}
}
},
setSelectTextByValue:function(name,value,text){
var e=this.items[name];
for(var i=0;i<e.length;i++){
if(e.options[i].value==value)e.childNodes[i].text=text;
}
},
clearSelect:function(name){
var e=this.items[name];
var len=e.length;
for(var i=0;i<len;i++){
e.options[0]=null;
}
}
,insertTextLine:function(title,className){
var li=$se(this.type=='ul'?'li':'dt',className,title);
$ap(this.ul,li);
}
,insertItem:function(type,name,_option){
var e=this.getElement(type);
var option={

}.extend(_option||{});

var li;
if(option.sameLine){
li=this.ul.lastChild;
}else{
li=$se(this.type=='ul'?'li':'dd');
this.ul.appendChild(li);
}
li.appendChild(e);

if(option.liClassName)li.className=option.liClassName;
if(option.className)e.className=option.className;
if(option.foreLabel)this.setLabel(e,option.foreLabel,true);
if(option.backLabel)this.setLabel(e,option.backLabel,false);
if(option.value)e.value=option.value;
if(option.selectArray){
var arr=option.selectArray;
var opt;
for(var i=0;i<arr.length;i++){
opt=new Option();
opt.text=arr[i].split(",")[0];
opt.value=arr[i].split(",")[1];
e.options[e.length]=opt;
}
}
if(option.tip){
var span=$se("span");
span.className="tip";
span.innerHTML=option.tip;
li.appendChild(span);
}
if(option.attributes){
for(var p in option.attributes){
try{
e.setAttribute(p,eval("option.attributes."+p));
}catch(e){}
}
}
this.items[name]=e;
},
getElement:function(type){
var e;
switch(type){
case"text":
e=$se("input");
e.type="text";
break;
case"hidden":
e=$se("input");
e.type="hidden";
break;
case"password":
e=$se("input");
e.type="password";
break;
case"file":
e=$se("input");
e.type="file";
break;
case"button":
e=$se("input");
e.type="button";
break;
case"submit":
e=$se("input");
e.type="submit";
break;
case"checkbox":
e=$se("input");
e.type="checkBox";
break;
case"radio":
e=$se("input");
e.type="radio";
break;
case"textarea":
e=$se("textarea");
e.cols=e.rows=3;
break;
case"span":
case"select":
case"img":
case"option":
e=$se(type);
break;
case"":
e=$se("b");
break;
default:
e=$se(type);
break;
}
return e;
},
setLabel:function(target,text,before,hideFocus){
target.id="t"+Math.random().toString().split(".")[1];
lbl=$se("label",'',text);
lbl.htmlFor=target.id;
if(before){
lbl.className='before';
target.parentNode.insertBefore(lbl,target);
}else{
lbl.className='back';
target.parentNode.insertBefore(lbl,target.nextSibling);
}
if(hideFocus)lbl.hideFocus=true;
else lbl.hideFocus=false;
},
toXml:function(){
var xml,value;
xml="<topicInfo>";
for(var p in this.items){
value=this.getValue(p);
if(value){
xml+="<"+p+"><![CDATA["+value+"]]></"+p+">";
}
}
xml+="</topicInfo>";
return xml;
}
,toQueryString:function(){
var obj={};
for(var p in this.items){
value=this.getValue(p);
if(value)obj[p]=value;
}
return $H(obj).toQueryString();
}
,loadXml:function(xml){
this.reset();
var doc=new X2Doc(xml);
for(var i=0;i<doc.root.contents.length;i++){
if(this.items[doc.root.contents[i].name]){
var value="";
if(doc.root.contents[i].contents[0])value=doc.root.contents[i].contents[0].value;
this.setValue(doc.root.contents[i].name,value);
}
}
},
loadXmlNode:function(xn){
for(var i=0;i<xn.contents.length;i++){
if(this.items[xn.contents[i].name]){
var value="";
if(xn.contents[i].contents[0])value=xn.contents[i].contents[0].value;
this.setValue(xn.contents[i].name,value);
}
}
},
reset:function(){
for(var p in this.items){
var e=eval("this.items['"+p+"']");
if(!this.getValue(p))continue;
this.setValue(p,"");
}
this.customReset();
},
customReset:function(){},
onShow:function(){},
onHide:function(){}

}



var DataList=Class.create();
DataList.prototype={
initialize:function(className,_cols){
this.container=$se("table");
if(className)this.container.className=className;
this.cols=_cols;
this.rows=new Array();

},
insertRow:function(rowName,rowValue){
var tr=this.container.insertRow(this.container.rows.length);
if(rowValue["_className"])tr.className=rowValue["_className"];
this.rows[rowName]=tr;
var td;
for(var i=0;i<this.cols.length;i++){
td=tr.insertCell(tr.cells.length);
if(this.cols[i][1]!='0'){
td.style.width=this.cols[i][1];
td.style.height="20px";
}else{
td.style.display="none";
}
td.innerHTML=eval("rowValue."+this.cols[i][0]);
this.rows[rowName][this.cols[i][0]]=td;
}
},
removeRow:function(rowName){
for(var i=0;i<this.container.rows.length;i++){
if(this.rows[rowName]==this.container.rows[i]){
this.container.deleteRow(i);
return;
}
}
},
getBox:function(){
return this.container;
},
show:function(){
Element.show(this.container);
},
hide:function(){
Element.hide(this.container);
}
}



X2.Json=Class.create();
X2.Json.prototype={
initialize:function(url,tipBox){
this.using=false;
this.url=url;
this.data=null;
this.tipBox=tipBox;
}
,open:function(oper,para,method){

if(typeof(para)=='object')para=$H(para).toQueryString();
if(!oper){
oper='none';
para='';
}
if(!method)method='get';
this.using=true;
var self=this;
var option={
parameters:para,
method:method,
onSuccess:function(transport){
var s=transport.responseText.replace(/[\n\r]/g,'');
try{
self.data=eval('('+s+')');
}catch(e){
self.debug(s);
}
this.using=false;
self.onsuccess();
},
onFailure:function(transport){
self.using=false;
self.onfailure();
self.debug(transport);
}
}
var c=this.url.indexOf('?')>=0?'&':'?';
this.request=new Ajax.Request(this.url+c+'s='+Math.random()+'&oper='+oper,option);
}

,openForText:function(oper,para,method){

if(typeof(para)=='object')para=$H(para).toQueryString();
if(!oper){
oper='none';
para='';
}
if(!method)method='get';
this.using=true;
var self=this;
var option={
parameters:para,
method:method,
onSuccess:function(transport){
self.onsuccess(transport.responseText);
},
onFailure:function(transport){
self.using=false;
self.onfailure();
self.debug(transport);
}
}
var c=this.url.indexOf('?')>=0?'&':'?';
this.request=new Ajax.Request(this.url+c+'s='+Math.random()+'&oper='+oper,option);
}
,abort:function(){
this.request.transport.abort();
}
,getData:function(){
return this.data;
}
,loadFile:function(url){
var self=this;
var option={
onSuccess:function(transport){
self.data=transport.responseText;
self.onsuccess();
}
,onFailure:function(transport){
self.using=false;
self.onfailure();
self.debug(transport);
}
}
var c=url.indexOf('?')>=0?'&':'?';
var request=new Ajax.Request(url+c+'s='+Math.random(),option);
}
,onsuccess:function(){
var jso=this.data;
if(typeof jso=='string'){
this.onlogicalsuccess({data:jso});
}else if(jso.success)this.onlogicalsuccess(jso);
else this.onlogicalfailure(jso);
}
,onfailure:function(){
try{
this.tipBox.show('数据传输失败，请检查网络或者重试。');
}catch(e){}
}
,onlogicalsuccess:function(){}
,onlogicalfailure:function(jso){
try{
this.tipBox.show(jso.error);
}catch(e){};
}
,debug:function(transport){



}
,debug2:function(transport){

}
}

 

X2.Observer={

observe:function(observer,notice,dispatcher,dispatch){
var _notice=observer[notice];
var _dispatch=dispatcher[dispatch];
if(!_dispatch._observers){
var _oldMethod=_dispatch;
dispatcher[dispatch]=function(){
_oldMethod.apply(dispatcher,arguments);
arguments.callee._observers.each(function(ob){
if(ob)ob();
});
}
Object.extend(dispatcher[dispatch],_dispatch);
_dispatch=dispatcher[dispatch];
_dispatch._observers=[];
}

var args=[observer].concat($A(arguments).slice(4));
_dispatch._observers.push(_notice.bind.apply(_notice,args));
return _dispatch._observers.length-1;
}

,observeAsEvent:function(observer,notice,dispatcher,dispatch){

var _dispatch=dispatcher[dispatch];
if(!_dispatch._observers){
var _oldMethod=_dispatch;
dispatcher[dispatch]=function(){
_oldMethod.apply(dispatcher,arguments);
var _args=arguments;
arguments.callee._observers.each(function(ob){
if(ob)ob.apply(window,_args);
});
}
Object.extend(dispatcher[dispatch],_dispatch);
_dispatch=dispatcher[dispatch];
_dispatch._observers=[];
}

var _callback=function(){
observer[notice].apply(observer,arguments);
}
_dispatch._observers.push(_callback);
return _dispatch._observers.length-1;
}

,stopObserve:function(dispatch,i){
dispatch._observers[i]=window;
}

,clearObservers:function(dispatch){
dispatch._observers.clear();
}
}

X2.Position={

setPosition:function(e,x,y){
Position.absolutize(e);
e.style.left=x+'px';
e.style.top=y+'px';
}

,setLeft:function(e,re,adj){
var _adj=adj||[0,0];
var dim2=Element.getDimensions(e);
var offdim=Position.cumulativeOffset(re);
this.setPosition(e,offdim[0]-dim2.width-_adj[0],offdim[1]+_adj[1]);
}
,setRight:function(e,re,adj){
var _adj=adj||[0,0];
var dim=Element.getDimensions(re);
var offdim=Position.cumulativeOffset(re);
this.setPosition(e,offdim[0]+dim.width+_adj[0],offdim[1]+_adj[1]);
}
,setTop:function(e,re,adj){
var _adj=adj||[0,0];
var dim2=Element.getDimensions(e);
var offdim=Position.cumulativeOffset(re);
this.setPosition(e,offdim[0]+_adj[0],offdim[1]-dim2.height-_adj[1]);
}
,setBottom:function(e,re,adj){
var _adj=adj||[0,0];
var dim=Element.getDimensions(re);
var offdim=Position.cumulativeOffset(re);
this.setPosition(e,offdim[0]+_adj[0],offdim[1]+dim.height+_adj[1]);
}


,leftOut:function(event,e){
var x=Event.pointerX(event);
return x<=Position.cumulativeOffset(e)[0]+1;
}
,rightOut:function(event,e){
var x=Event.pointerX(event);
return x>=Position.cumulativeOffset(e)[0]+Element.getDimensions(e).width;
}
,topOut:function(event,e){
var y=Event.pointerY(event);


return y<=Position.cumulativeOffset(e)[1]+1;
}
,bottomOut:function(event,e){
var y=Event.pointerY(event);
return y>=Position.cumulativeOffset(e)[1]+Element.getDimensions(e).height;
}


}

var RicoUtil={

getElementsComputedStyle:function(htmlElement,cssProperty,mozillaEquivalentCSS){
if(arguments.length==2)
mozillaEquivalentCSS=cssProperty;

var el=$(htmlElement);
if(el.currentStyle)
return el.currentStyle[cssProperty];
else
 return document.defaultView.getComputedStyle(el,null).getPropertyValue(mozillaEquivalentCSS);
},

createXmlDocument:function(){
if(document.implementation&&document.implementation.createDocument){
var doc=document.implementation.createDocument("","",null);

if(doc.readyState==null){
doc.readyState=1;
doc.addEventListener("load",function(){
doc.readyState=4;
if(typeof doc.onreadystatechange=="function")
doc.onreadystatechange();
},false);
}

return doc;
}

if(window.ActiveXObject)
return Try.these(
function(){return new ActiveXObject('MSXML2.DomDocument')},
function(){return new ActiveXObject('Microsoft.DomDocument')},
function(){return new ActiveXObject('MSXML.DomDocument')},
function(){return new ActiveXObject('MSXML3.DomDocument')}
)||false;

return null;
},

getContentAsString:function(parentNode){
return parentNode.xml!=undefined?
this._getContentAsStringIE(parentNode):
this._getContentAsStringMozilla(parentNode);
},

_getContentAsStringIE:function(parentNode){
var contentStr="";
for(var i=0;i<parentNode.childNodes.length;i++)
contentStr+=parentNode.childNodes[i].xml;
return contentStr;
},

_getContentAsStringMozilla:function(parentNode){
var xmlSerializer=new XMLSerializer();
var contentStr="";
for(var i=0;i<parentNode.childNodes.length;i++)
contentStr+=xmlSerializer.serializeToString(parentNode.childNodes[i]);
return contentStr;
},

toViewportPosition:function(element){
return this._toAbsolute(element,true);
},

toDocumentPosition:function(element){
return this._toAbsolute(element,false);
},

 
_toAbsolute:function(element,accountForDocScroll){

if(navigator.userAgent.toLowerCase().indexOf("msie")==-1)
return this._toAbsoluteMozilla(element,accountForDocScroll);

var x=0;
var y=0;
var parent=element;
while(parent){

var borderXOffset=0;
var borderYOffset=0;
if(parent!=element){
var borderXOffset=parseInt(this.getElementsComputedStyle(parent,"borderLeftWidth"));
var borderYOffset=parseInt(this.getElementsComputedStyle(parent,"borderTopWidth"));
borderXOffset=isNaN(borderXOffset)?0:borderXOffset;
borderYOffset=isNaN(borderYOffset)?0:borderYOffset;
}

x+=parent.offsetLeft-parent.scrollLeft+borderXOffset;
y+=parent.offsetTop-parent.scrollTop+borderYOffset;
parent=parent.offsetParent;
}

if(accountForDocScroll){
x-=this.docScrollLeft();
y-=this.docScrollTop();
}

return{x:x,y:y};
},

 
_toAbsoluteMozilla:function(element,accountForDocScroll){
var x=0;
var y=0;
var parent=element;
while(parent){
x+=parent.offsetLeft;
y+=parent.offsetTop;
parent=parent.offsetParent;
}

parent=element;
while(parent&&
parent!=document.body&&
parent!=document.documentElement){
if(parent.scrollLeft)
x-=parent.scrollLeft;
if(parent.scrollTop)
y-=parent.scrollTop;
parent=parent.parentNode;
}

if(accountForDocScroll){
x-=this.docScrollLeft();
y-=this.docScrollTop();
}

return{x:x,y:y};
},

docScrollLeft:function(){
if(window.pageXOffset)
return window.pageXOffset;
else if(document.documentElement&&document.documentElement.scrollLeft)
return document.documentElement.scrollLeft;
else if(document.body)
return document.body.scrollLeft;
else
 return 0;
},

docScrollTop:function(){
if(window.pageYOffset)
return window.pageYOffset;
else if(document.documentElement&&document.documentElement.scrollTop)
return document.documentElement.scrollTop;
else if(document.body)
return document.body.scrollTop;
else
 return 0;
}

};








































X2.UI.Effect={

FadeTo:function(element,start,end,duration){
var self=element,step=0;
if(end==undefined){
end=start;
duration=0;
}
if(duration<=0)start=end;
else step=10*(end-start)/duration;
function t(){
start+=step;
if((start-end)*step>=0)start=end;

self.style.filter='alpha(opacity='+Math.round(start)+')';

if(!self.style.filters){
self.style.MozOpacity=Math.round(start)/100;
}
if(start!=end)window.setTimeout(arguments.callee,10);
}
window.setTimeout(t,10);

}

,ResizeTo:function(element,width,height,duration){


}
,MoveTo:function(x,y,duration){

}



,Marquee:function(container,interval,delay,mouseOverStop,height){
if(mouseOverStop){
Event.observe(container,'mouseover',stop);
Event.observe(container,'mouseout',start);
}
container.style.overflow='hidden';
if(height)container.style.height=parseInt(height)+'px';

interval=interval>10?interval:20;

var current=container.firstChild;
while(!current.tagName)current=current.nextSibling;

var isInit=true;
var s;
start();
function start(){

if(isInit&&delay){
isInit=false;
window.setTimeout(start,delay*1000);
return;
}
s=window.setInterval(function(){
if(Math.abs(current.offsetHeight+current.offsetTop)<=2)_delay();
else current.style.marginTop=parseInt(current.style.marginTop||0)-1+'px';

},interval)
}

function _delay(){
if(delay){
window.clearInterval(s);
window.setTimeout(function(){
start();
},delay*1000);
}
current.parentNode.appendChild(current);
current.style.marginTop='auto';
current=container.firstChild;
while(!current.tagName)current=current.nextSibling;
current.style.marginTop='0px';
}
function stop(){
window.clearInterval(s);
}
}

,scroll:function(direction,element,distance,duration){
var self=element;
var step=10*(distance)/duration;
function t(){
switch(direction){
case'left':
self.scrollLeft+=step;
break;
case'right':
self.scrollLeft-=step;
break;
case'up':
self.scrollTop-=step;
break;
case'down':
self.scrollTop+=step;
break;
}


distance-=step;
if(distance>=0)window.setTimeout(arguments.callee,10);
}
window.setTimeout(t,10);
}

}


X2.Style.ListItem={
base:'base'
,hover:'hover'
,selected:'selected'
,icon:'icon'
,sep:'sep'
,more:'more'
};


X2.UI.ListItem=Class.create();
X2.UI.ListItem.prototype={
initialize:function(style){
this.style=style||X2.Style.ListItem;
this.visible=true;
this.selected=false;
this.host=null;
this.hoverEffect=true;
}
,init:function(text,link,target,allowSelected,icon,value,more,className,noHoverEffect,title){
this.box=$se('dd');
this.text=text;
this.value=value||text;
this.arguments=arguments;
this.hoverEffect=!noHoverEffect;
Element.addClassName(this.box,this.style.base);

if(arguments.length==1&&text=='/'){
this.box.className=this.style.sep;
return;
}
if(className)Element.addClassName(this.box,className);


if(icon)text='<img src="'+icon+'" alt="" align="absmiddle" />'+text;
var _span=$se("span");
if(title)this.box.title=title;
this.box.appendChild(_span);
if(more)Element.addClassName(this.box,this.style.more);
if(link){
if(typeof(link)=='string'){
var _a=$se('a');
_a.innerHTML=text;
if(target)_a.target=target;
_a.href=link;
_a.onfocus=function(){this.blur();}
_span.appendChild(_a);
}else if(typeof(link)=='function'){
this.onclick=link;
Event.observe(this.box,'click',this.onclick.bind(this,this));
_span.innerHTML=text;
}
}else{
_span.innerHTML=text;
}

if(icon){
Element.addClassName(this.box,this.style.icon);
}


var self=this;

this.clickEvent=function(){
if(self.selected){
self.unselect();
}else{
self.select();
}
}

if(this.hoverEffect){

Event.observe(this.box,'mouseover',function(){
Element.addClassName(self.box,self.style.hover);
});
Event.observe(this.box,'mouseout',function(){
Element.removeClassName(self.box,self.style.hover);
});
}
if(allowSelected)this.enableAllowSelected();

}



,enableAllowSelected:function(){
Event.observe(this.box,'click',this.clickEvent);
}

,disableAllowSelected:function(){
Event.stopObserve(this.box,'click',this.clickEvent);
}
,getText:function(){
return this.arguments[0];
}
,getLink:function(){
return this.arguments[1];
}


,select:function(){
if(this.selected)return;
Element.addClassName(this.box,this.style.selected);
this.selected=true;
this.onselect();
}

,unselect:function(){
if(!this.selected)return;
Element.removeClassName(this.box,this.style.selected);
this.selected=false;
this.onunselect();
}

,onselect:Prototype.emptyFunction

,onunselect:Prototype.emptyFunction

,show:function(){
this.visible=true;
Element.show(this.box);
}

,hide:function(){
this.visible=false;
Element.hide(this.box);
}
,clickEvent2:function(){
this.onclick(this);
}
,onclick:Prototype.emptyFunction
}

X2.Style.List={
base:'X2List'
,itemStyle:X2.Style.ListItem
};


X2.UI.List=Class.create();

Object.extend(X2.UI.List.prototype,Enumerable);
Object.extend(X2.UI.List.prototype,{
initialize:function(style){
this.style=style||X2.Style.List;
this.items=[];
this.box=$se('dl');
this.singleSelect=false;
this.hoverEffect=true;
Element.addClassName(this.box,this.style.base);
}

,_each:function(iterator){
this.items._each(iterator);
}
,bindData:function(arr){
var self=this;
arr.each(function(value){
var li=new X2.UI.ListItem(self.style.itemStyle);
li.hoverEffect=self.hoverEffect;
li.init.apply(li,value);
self.addItem(li);
});
}

,addItem:function(li){
this.box.appendChild(li.box);
this.items.push(li);
if(this.singleSelect)this._setLiSelectEvent(li);
li.host=this;
}

,insertItem:function(li,i){

if(i==this.items.length){
this.addItem(li);
return;
}
this.box.insertBefore(li.box,this.items[i].box);
this.items.splice(i,0,li);
if(this.singleSelect)this._setLiSelectEvent(li);
li.host=this;
}

,removeItem:function(i){
if(typeof(i)=='object'){
this.removeItem(this.items.indexOf(i));
return;
}
if(i>=this.items.length)return;
var item=this.items[i];
Element.remove(this.items[i].box);
this.items.splice(i,1);
return item;
}
,clearSelect:function(){
this.items.each(function(value){
value.unselect();
});
}
,getSelectedItem:function(){
return this.lastSelected?this.lastSelected:null;
}
,selectOne:function(i){
if(i<0||i>=this.items.length)return;
this.items[i].select();
}
,selectNext:function(){
if(!this.singleSelect)return;
if(this.lastSelected)this.selectOne(this.items.indexOf(this.lastSelected)+1);
else this.items.first().select();
}
,selectPrevious:function(){
if(!this.singleSelect)return;
if(this.lastSelected)this.selectOne(this.items.indexOf(this.lastSelected)-1);
else this.items.last().select();
}

,setSingleSelect:function(){
this.singleSelect=true;
this.items.each(this._setLiSelectEvent.bind(this));
}

,_setLiSelectEvent:function(li){
this._selectEvent=function(){
if(li==this.lastSelected)return;
if(this.lastSelected)this.lastSelected.unselect();
this.lastSelected=li;
}
X2.Observer.observe(this,'_selectEvent',li,'onselect');
}
,clear:function(){
this.lastSelected=null;
this.items.length=0;
this.box.innerHTML='';
}
,show:function(){
this.visible=true;
this.box.style.display='block';
this.onshow();
}
,hide:function(){
this.visible=false;
this.box.style.display='none';
this.onhide();
}
,onshow:function(){}
,onhide:function(){}
});


X2.Style.Calendar={
base:'X2Calendar'
,wrap:'wrap'
,title:'title'
,mark:'mark'
,today:'today'
,toolbar1:'toolbar1'
,toolbar2:'toolbar2'
,toolbar3:'toolbar3'
,toolbar4:'toolbar4'
,toolbar5:'toolbar5'
,notThisMonth:'notThisMonth'
,listStyle:X2.Style.List
}

X2.UI.Calendar=Class.create();
X2.UI.Calendar.prototype={
initialize:function(style,markedDate,year,month,date){
var today;
if(year)today=new Date(year,month,date);
else today=new Date();
this.style=style||X2.Style.Calendar;
this.year=this.currentYear=today.getFullYear();
this.month=this.currentMonth=today.getMonth();
this.date=today.getDate();
this.day=today.getDay();
this.box=$se('div');
this.main=new X2.UI.List(this.style.listStyle);
this.box.appendChild(this.main.box);
this.markedDate=markedDate||[];
this.allowMark=!!markedDate;

Element.addClassName(this.box,this.style.base);
this.construct();
}
,construct:function(){
this.main.clear();
var self=this;
var arr=[];

arr.push(['<<',function(){
if(self.onyearchange&&self.onyearchange(self.currentYear-1)===false)return;
self.currentYear--;
self.construct();
},'','','','','',this.style.toolbar1,0,'上一年']);
arr.push(['<',function(){
if(self.onmonthchange&&self.onmonthchange(self.currentMonth-1)===false)return;
if(self.currentMonth==0){
self.currentYear--;
self.currentMonth=12;
}
self.currentMonth--;
self.construct();

},'','','','','',this.style.toolbar2,0,'上一月']);


arr.push([this.currentYear+'年'+(this.currentMonth+1)+'月','','','','','','',this.style.toolbar3,1]);

arr.push(['>',function(){
if(self.onmonthchange&&self.onmonthchange(self.currentMonth+1)===false)return;
if(self.currentMonth==11){
self.currentYear++;
}
self.currentMonth++;
self.currentMonth%=12;
self.construct();
},'','','','','',this.style.toolbar4,0,'下一月']);
arr.push(['>>',function(){
if(self.onyearchange&&self.onyearchange(self.currentYear+1)===false)return;
self.currentYear++;
self.construct();
},'','','','','',this.style.toolbar5,0,'下一年']);


arr.push(['日','','','','','','',this.style.title,1]);
arr.push(['一','','','','','','',this.style.title,1]);
arr.push(['二','','','','','','',this.style.title,1]);
arr.push(['三','','','','','','',this.style.title,1]);
arr.push(['四','','','','','','',this.style.title,1]);
arr.push(['五','','','','','','',this.style.title,1]);
arr.push(['六','','','','','','',this.style.title,1]);

var date=new Date(this.currentYear,this.currentMonth,1);
var startDay=date.getDay();

for(var i=0;i<startDay;i++){
arr.push(['','','','','','','',this.style.notThisMonth,1]);
}

for(var i=1;i<=this.getMonthDay(this.currentYear,this.currentMonth);i++){
if(!this.allowMark){
arr.push([i,function(s){
self.onchange([self.currentYear,self.currentMonth+1,s.value].join('-'));
}]);
startDay++;
startDay%=7;
continue;
}
if(this.markedDate.include([this.currentYear,this.currentMonth+1,i].join('-'))){
arr.push([i,function(s){
self.onchange([self.currentYear,self.currentMonth+1,s.value].join('-'));
}]);
arr.last()[7]=arr.last()[7]||''+' '+this.style.mark;
}else{
arr.push([i,'','','','','','','',1]);
}


if(this.year==this.currentYear&&this.month==this.currentMonth&&i==this.date){
arr.last()[7]+=' '+this.style.today;
arr.last()[9]='今天';
}

startDay++;
startDay%=7;
}

for(var i=startDay;i<7&&startDay>0;i++){
arr.push(['','','','','','','',this.style.notThisMonth,1]);
}

this.main.bindData(arr);

}
,setMark:function(date){
this.markedDate=date;
}
,setYear:function(year){
this.currentYear=year;
this.construct();
}
,setMonth:function(month){
this.currentMonth=month;
this.construct();
}
,onchange:Prototype.emptyFunction
,onyearchange:Prototype.emptyFunction
,onmonthchange:Prototype.emptyFunction
,getMonthDay:function(year,month){
var arr=[31,28,31,30,31,30,31,31,30,31,30,31];
if((year%4==0&&year%100>0)||year%400==0)arr[1]=29;
return arr[month];
}

}


X2.Utility.BackForwardFixer=Class.create();
X2.Utility.BackForwardFixer.prototype={
initialize:function(basePath){
this.backStack=[];
this.forwardStack=[];
this.maxDepth=10;
if(isie()){
this.baseSrc=basePath||'/bffHack.aspx';
this.iframe=$se('iframe');
this.iframe.src=this.baseSrc+'?s='+(Math.random()+0.1);
document.body.appendChild(this.iframe);
Element.hide(this.iframe);
}


this.currentCallback=null;



this.lastArg='';
this.arrForwardArgs=[];

var self=this;
new PeriodicalExecuter(function(){
try{
var arg;
if(isie()){
if(!self.isLoaded())return;
arg=self.iframe.contentWindow.document.body.innerHTML;
}else{
arg=location.hash;
}


if(arg!=self.lastArg){

if(self.arrForwardArgs.include(arg)){
self.arrForwardArgs=self.arrForwardArgs.without(arg);
while(self.arrForwardArgs.length>self.maxDepth)self.arrForwardArgs.shift();
self.forward();

}else{
self.arrForwardArgs.push(self.lastArg);
self.back();
}
}else{

}
self.lastArg=arg;

}catch(e){}
},0.2);
}
,isLoaded:function(){
try{
return this.iframe.contentWindow.document.body.innerHTML;
}catch(e){}
return false;
}

,add:function(callback,currentCallback){

this.forwardStack.length=0;
this.arrForwardArgs.length=0;
this.currentCallback=currentCallback;
this.backStack.push(callback);

while(this.backStack.length>this.maxDepth)this.backStack.shift();


if(isie()){
this.lastArg=Math.random()+0.1;
this.iframe.contentWindow.document.body.innerHTML='';
this.addHistory(this.lastArg);
}else{
this.lastArg=location.hash;
}

}


,back:function(){
if(!this.backStack.length)return;
var callback=this.backStack.pop();
this.forwardStack.push(this.currentCallback);
this.currentCallback=callback;
callback&&callback();
}


,forward:function(){
if(!this.forwardStack.length)return;
var callback=this.forwardStack.pop();
this.backStack.push(this.currentCallback);
this.currentCallback=callback;
callback&&callback();

}

,checkState:function(){

}

,replace:function(newNode,oldNode){
oldNode.parentNode.replaceChild(newNode,oldNode);
}


,addHistory:function(s){
this.iframe.src=this.baseSrc+'?s='+s;
}
,isBegin:function(){
return this.backStack.length==0&&this.forwardStack.length==0;
}
}

