/*
	descmenu.js - Menu with Description
		depends on: dutils.js, MooTools <http://mootools.net>

	copyright (c) 2007 distraid Inc. <http://distraid.co.jp>
*/
var DescMenu=new Class({options:{targItems:["title","link","desc","date","img"],menuItems:["mtitle"],optItems:["overwrite"],actType:null,proc:null,style:null,selector:{},json:{},autoFlip:0,selCancel:true},initialize:function(c,a){if($type(c)!="object"||!c.menu){return
}this.setOptions(a);this._items={targ:this.options.targItems,menu:this.options.menuItems,opt:this.options.optItems,getItems:function(){return this.targ.concat(this.menu)}};this._menuElem=[];this._targElem={};
this._articles=[];this._jsonCtrl=null;this._actType=DescMenu.actType.over;this._proc={};this._style={};this._curPage=0;this._curSelect=null;this._timerID=null;this._items.targ.each(function(e){if(!c[e]){return
}var d=$(c[e]);if(!d){return}if(e=="link"&&d.nodeName.toLowerCase()!="a"){return}if(e=="img"&&d.nodeName.toLowerCase()!="img"){return}this._targElem[e]={id:c[e],elem:d}},this);this._initOpt();for(var b in this._targElem){this._targElem[b].style=new DuStyle.Fx(this._targElem[b].elem,this._targElem[b].style)
}this._initMenu(c);if(this.options.autoFlip){this._timerID=setTimeout(function(){this._activateList(null,this._articles[0],0)}.bind(this),parseInt(this.options.autoFlip/2))}},_initMenu:function(a){if($type(a.menu)=="string"||$type(a.menu)=="array"){this._setupMenu(a.menu)
}},_initOpt:function(){[["proc","function",this._proc],["style","object",this._style]].each(function(c){var d=c[0];var g=c[1];var h=c[2];var e=this.options[d];if(!e){return}for(var f in e){if($type(e[f])!=g){continue
}if(this._targElem[f]){this._targElem[f][d]=e[f]}else{if(["menu","targ"].contains(f)){h[f]=e[f]}}}},this);if(this.options.actType){if($defined(DescMenu.actType[this.options.actType])){this._actType=this.options.actType
}}this._items.getItems().each(function(c){if(!this.options.selector[c]){this.options.selector[c]="title="+c}},this);for(var a in this.options.selector){if(!this._items.menu.contains(a)&&!this._targElem[a]){delete this.options.selector[a]
}else{var b=this.options.selector[a].split("=");this.options.selector[a]=(b[0]=="class"?"*."+b[1]:"["+this.options.selector[a]+"]")}}},resetMenu:function(a){this._setupMenu(a)},_setupMenu:function(a){if(!a){return
}this._menuElem=[];this._articles=[];if(this._jsonCtrl){this._jsonCtrl.reset()}a=($type(a)!="array"?[a]:a);a.each(function(d){var c=$(d);if(c){this._menuElem.push(c)}else{var b=$$(d);if(b){b.each(function(e){this._menuElem.push(e)
},this)}}},this);if(this._menuElem.length<=0){return}this._menuElem.each(function(b){var c=b.nodeName.toLowerCase();switch(c){case"dl":this._setupList(b.getFirst(),"dl");break;case"ul":case"ol":this._setupList(b.getFirst(),"ul");
break;case"br":case"hr":case"img":break;default:this._setupList(b,"elem")}},this)},_setupList:function(c,b){if(!c){return}var d=c.nodeName.toLowerCase();var a=function(h,g){var f=(this._jsonCtrl?this._jsonCtrl.getNextDataCl():null);
var i=new DescMenu.Article(h,g,f,$merge(this.options.selector),$merge(this._items),{style:this._style.menu});this._articles.push(i);var e=this._articles.length-1;switch(this._actType){case DescMenu.actType.over:h.addEvent("mouseenter",function(j){if(this._timerID){clearTimeout(this._timerID)
}if(this.options.autoFlip&&this.options.selCancel){this.options.autoFlip=0}this._activateList(j,this._articles[e],e)}.bindWithEvent(this));break;case DescMenu.actType.click:h.addEvent("click",function(j){if(this._timerID){clearTimeout(this._timerID)
}if(this.options.autoFlip&&this.options.selCancel){this.options.autoFlip=0}this._activateList(j,this._articles[e],e)}.bindWithEvent(this));break}i=null}.bind(this);if(b=="dl"||b=="ul"){if(d=="dt"||d=="li"){a(c,b)
}this._setupList(c.getNext(),b)}else{a(c,b)}},_activateList:function(a,e,d){if(!e||this._curSelect==d){return}if(this._proc.menu){this._proc.menu(e,d)}e.activate();if($defined(d)&&this._curSelect!=d){this._deactivateList(this._articles[this._curSelect],this._curSelect)
}var c=e.retrieveData();this._setData(c);if($defined(d)){this._curSelect=d}if(this.options.autoFlip){var b=d+1;if(b>=this._articles.length){b=0}this._timerID=setTimeout(function(){this._activateList(null,this._articles[b],b)
}.bind(this),this.options.autoFlip)}},_deactivateList:function(b,a){if(!b){return}b.deactivate()},_setData:function(e){var b=function(f,h,g){if(!h){h=""}(g?g(h):f.elem.setHTML(h));(h?f.style.activate(null,null,true):f.style.deactivate(null,null,true))
};for(var d in this._targElem){var c=this._targElem[d];if(c.proc){var a=c.proc(c.elem,e[d],e);if($defined(a)){(a?c.style.activate(null,null,true):c.style.deactivate(null,null,true))}continue}switch(d){case"img":b(c,(e.img?e.img["src"]:""),function(f){this.src=f
}.bind(c.elem));break;case"date":b(c,(e.date?DescMenu.Format.date(e.date["html"]):""));break;case"link":c.elem.href=(e.link?e.link["href"]:"");if(!e.link||e.link["href"]==""){b(c,"")}else{b(c,(e[d]?e[d]["html"]:""))
}break;default:b(c,(e[d]?e[d]["html"]:""))}}}});DescMenu.implement(new Options);DescMenu._JsCtrl=DescMenu.extend({initialize:function(b,a){this._delayUpdate=false;this.parent(b,a)},_loading:function(a){},_updatePage:function(){this._jsonCtrl.reset();
this._articles.each(function(a){a.resetJson(this._jsonCtrl.getNextDataCl())},this);if(this._curSelect!=null){this._activateList(null,this._articles[this._curSelect])}this._delayUpdate=false},_ajaxNotice:function(a){if(!$defined(a.idxSet)){return
}if(this._curPage==a.idxSet){this._loading(false);this._updatePage()}}});DescMenu.JsFixed=DescMenu._JsCtrl.extend({initialize:function(b,a){this.parent(b,a)},_initMenu:function(a){this._jsonCtrl=new DuJson.Fixed(this.options.json,{callback:this._ajaxNotice.bind(this),chkArray:this._items.getItems(),autoAdd:true,jsonOpt:{overwrite:true}});
this.parent(a)},setPage:function(b){this._delayUpdate=true;this._curPage=b;var a=this._jsonCtrl.changeSet(b);if(a!=false){this._dealyUpdate=false;if(a){this._updatePage()}}else{this._loading(true)}}});
DescMenu.JsVolatile=DescMenu._JsCtrl.extend({initialize:function(b,a){this._numSet=5;this._pageSet=[];this.parent(b,a)},_initOpt:function(){this.parent();if($type(this.options.numSet)=="number"&&this.options.numSet>0){this._numSet=this.options.numSet
}},_initMenu:function(a){this._jsonCtrl=new DuJson.Volatile(this.options.json,{callback:this._ajaxNotice.bind(this),chkArray:this._items.getItems(),autoAdd:true,jsonOpt:{overwrite:true},numSet:this._numSet,defSets:($type(this.options.defSets)=="array"?this.options.defSets:null)});
this.parent(a)},setPage:function(b){this._delayUpdate=true;this._curPage=b;var a=this._jsonCtrl.changeSet(b);if(a!=false){this._dealyUpdate=false;if(a){this._updatePage()}}else{this._loading(true)}},replaceSet:function(a,b){b=($defined(b)?b:this._curPage);
this._jsonCtrl.displaceSet(a);this.setPage(b)}});DescMenu.actType=new Abstract({none:"none",over:"over",click:"click"});DescMenu.Article=new Class({options:{style:null},initialize:function(g,f,d,a,b,c){if($type(g)!="element"){return
}this._node=g;this._type=f;this._selector=a;this._items=b;this._targNode={};this._data={};this._jsonCl=($type(d)=="function"?d:function(){return null});this._style=null;this.setOptions(c);this._node._dmArticle=this;
if(this.options.style&&$type(this.options.style)=="object"){this._style=new DuStyle.Fx(this._node,this.options.style)}var e=this._jsonCl();if(e){e.setValidator(this.setupJson.bind(this))}this._setupNode();
if(e){this.setupJson()}},_setupNode:function(){var b=this._node;this._targNode={};var a=function(g){for(var f in this._selector){var e=g.getElement(this._selector[f]);if(e){this._targNode[f]=e}}}.bind(this);
if(this._type=="dl"){if(b&&b.nodeName.toLowerCase()=="dt"){var c=b;var d=b.getFirst();if(d&&d.nodeName.toLowerCase()=="a"){this._targNode.link=d;c=d}this._targNode.title=c;b=b.getNext()}if(b&&b.nodeName.toLowerCase()=="dd"){a(b)
}}else{if(this._type=="ul"){if(b&&b.nodeName.toLowerCase()=="li"){a(b)}}else{a(b)}}},activate:function(){if(this._style){this._style.activate("foo")}},deactivate:function(){if(this._style){this._style.deactivate("bar")
}},resetJson:function(a){if(!a){return}var b=a();if(b){this._jsonCl=a;b.setValidator(this.setupJson.bind(this));this.setupJson()}},setupJson:function(){var b=this._jsonCl();if(!b){return}var a={link:"href",img:"src"};
b.each(function(e,f){if(!this._selector[e]){return}if(!$defined(f)||$type(f)!="string"){return}var g=(a[e]?a[e]:"html");b.setData(e,g,f)},this);if(b.getData("overwrite")){for(var c in this._selector){var d=b.getData(c);
if(!$defined(d)||!this._targNode[c]){continue}if(a[c]){this._targNode[c][a[c]]=d[a[c]]}if(d.html){this._targNode[c].setHTML(d.html)}}}},retrieveData:function(){this._data={};this._retrieveNode();if(this._jsonCl()){this._retrieveJson()
}if(this._data.link&&this._data.link["html"]==""&&this._data.title){this._data.link["html"]=this._data.title["html"]}return this._data},_retrieveNode:function(){for(var b in this._targNode){var a=this._targNode[b];
switch(b){case"link":this._data.link={href:a.href,html:a.innerHTML};break;case"img":this._data.img={src:a.src};break;default:this._data[b]={html:a.innerHTML}}}this._data.elem=this._node},_retrieveJson:function(){var a=this._jsonCl();
if(!a){return}a.each(function(b,c){if(!this._selector[b]){return}if(!this._data[b]){this._data[b]={}}for(var d in c){this._data[b][d]=c[d]}},this)},setData:function(a,c){var b=this._jsonCl();if(!b||$type(a)!="object"){return
}a.overwrite=(c?true:false);b.setJson(a)}});DescMenu.Article.implement(new Options);DescMenu.Format=new Abstract({date:function(b){if($type(b)!="string"){return}var a=b.match(/^(\d{4})\/(\d{1,2})\/(\d{1,2})\s*(.*)$/);
if(!a){return}var c=new Date().getFullYear();return(c!=a[1]?a[1]+"/":"")+a[2]+"/"+a[3]+" "+a[4]}});DuJson={};DuJson.CtrlType=new Abstract({fixed:1,"volatile":2});DuJson._Ctrl=new Class({options:{chkArray:null,idArray:null,callback:null,defObj:null,autoAdd:false,jsonOpt:null,defSetIdx:null},initialize:function(b,a){this._dataSet=[];
this._curSetIdx=null;this._curSet=null;this._chkArray=null;this._idArray=null;this._callback=null;this._defObj={};this._autoAdd=false;this._jsonOpt=null;this.setOptions(a);this._initOpt();this._setup(b,this.options.defSetIdx)
},_initOpt:function(){this._chkArray=($type(this.options.chkArray)=="array"?this.options.chkArray.copy():null);this._idArray=($type(this.options.idArray)=="array"?this.options.idArray.copy():null);this._sortProc=this.options.sortProc;
this._callback=($type(this.options.callback)=="function"?this.options.callback:null);this._defObj=($type(this.options.defObj)=="object"?$merge(this.options.defObj):{});this._autoAdd=(this.options.autoAdd?true:false);
this._jsonOpt=($type(this.options.jsonOpt)=="object"?$merge(this.options.jsonOpt):null);if(this._chkArray){for(var b in $merge(this._jsonOpt,this._defObj)){if(!this._chkArray.contains(b)){this._chkArray.push(b)
}}}if(this._idArray){var a=this._idArray.copy();this._idArray=[];a.each(function(e){if($type(e)=="string"&&e!=""){this._idArray.push(e)}},this);if(this._idArray.length<=0){this._idArray=null}}var d=$type(this._sortProc);
if(d=="array"){var c={};this._sortProc.each(function(e,f){sprtObj[f]=e});this._sortProc=c}else{if(d!="object"&&d!="function"){this._sortProc=null}}},_setup:function(b,a){},getChkArray:function(){return(this._chkArray?this._chkArray.copy():null)
},getIdArray:function(){return(this._idArray?this._idArray.copy():null)},getDefObj:function(){return $merge(this._defObj)},getOpt:function(){return $merge(this._jsonOpt)},getSortProc:function(){var a=$type(this._sortProc);
if(!a){return null}else{if(a=="function"){return this._sortProc}else{return $merge(this._sortProc)}}},getDataCl:function(b,a){return function(){return this._getTargSet(a).getData(b)}.bind(this)},getNextDataCl:function(a){var c=this._getTargSet(a);
var b=c.getNextData(this._autoAdd);if(!b){return null}var d=c.getNextIdx()-1;return this.getDataCl(d,a)},getData:function(c,a){var b=this._getTargSet(a);return b.getData(c)},getNextData:function(a){var b=this._getTargSet(a);
return b.getNextData(this._autoAdd)},reset:function(c,a){var b=this._getTargSet(a);b.reset(c)},getSetLen:function(){return this._dataSet.length},getDataLen:function(a){var b=this._getTargSet(a);return b.getDataLen()
},changeSet:function(a){var c=($type(a)=="number"?a.limit(0,this._dataSet.length-1):null);if(a!=c){return null}var b=true;this._curSetIdx=a;this._curSet=this._dataSet[this._curSetIdx];b=this._curSet.changeSet(a);
this._dataSet.each(function(e,d){if(d!=a){e.changeSet(a)}},this);return b},setupSet:function(a,b,d){var c=this._getTargSet(a);c.setupSet(b,d)},sortSet:function(a,b,d){var c=this._getTargSet(a);c.sortData(b,d)
},_getTargSet:function(a){a=($type(a)=="number"?a.limit(0,this._dataSet.length-1):this._curSetIdx);return this._dataSet[a]},ajaxNotice:function(a,c,b){if(this._callback){this._callback({idxSet:a,success:c,ajaxInfo:b})
}}});DuJson._Ctrl.implement(new Options);DuJson.Fixed=DuJson._Ctrl.extend({initialize:function(b,a){this.parent(b,a)},_setup:function(c,b){this._curSetIdx=null;this._dataSet=[];if(!c){c={}}if($type(c)!="array"){c=[c]
}var a=0;c.each(function(d){this._dataSet[a]=new DuJson.Set(this,d,a++)},this);if($defined(b)){if(!(b>0)){b=0}this.changeSet(b)}else{this._curSetIdx=0;this._curSet=this._dataSet[this._curSetIdx]}},addSet:function(b){if($type(b)!="array"){b=[b]
}var a=this._dataSet.length;var c=a;b.each(function(d){this._dataSet[a]=new DuJson.Set(this,d,a++)},this);return c},replaceSet:function(b,c){if($type(b)!="array"){b=[b]}var a=this._dataSet.length;if(!(c<=a)||c<0){return this.addSet(b)
}a=c;b.each(function(d){if(this._dataSet[a]){delete this._dataSet[a]}this._dataSet[a]=new DuJson.Set(this,d,a++)},this);return c}});DuJson.Volatile=DuJson._Ctrl.extend({options:{numSet:0,defSets:[]},initialize:function(b,a){this._assocId=[];
this.parent(b,a)},_setup:function(h,g){var i=0;var d=null;if($type(this.options.numSet)=="number"&&this.options.numSet>0){i=this.options.numSet}if($type(this.options.defSets)=="array"){d=this.options.defSets.copy()
}this._curSetIdx=null;this._dataSet=[];this._assocId=[];if(!h){h={}}if($type(h)!="array"){h=[h]}var a=h;if(d){a=[];d.each(function(k){for(var j=0;j<h.length;j++){if(h[j]&&h[j]["id"]==k){return a.push(h[j])
}}},this)}if(!i){i=h.length}var e=0;for(var c=0;c<i;c++){var f=(a[c]?a[c]:{});var b=f.id;if(!$defined(b)){continue}f=f.set;this._dataSet[e]=new DuJson.Set(this,f,e);this._assocId[e]=b;e++}if($defined(g)){if(!(g>0)){g=0
}this.changeSet(g)}else{this._curSetIdx=0;this._curSet=this._dataSet[this._curSetIdx]}},addSet:function(a){if($type(a)!="array"){a=[a]}var b=this._dataSet.length;a.each(function(d){var c=d.id;if(!$defined(c)){return
}d=d.set;this._dataSet[this._numSet]=new DuJson.Set(this,d,this._numSet);this._assocId[this._numSet]=c;this._numSet++},this);return b},displaceSet:function(c){if(!c){return}if($type(c)!="array"){c=[c]}var b=0;
var d=[];var a=[];c.each(function(h){var g=(h&&$defined(h.id)?h.id:null);if(g===null){return}var f=this._assocId.indexOf(g);var e=this._dataSet[f];if(f>=0&&e){this._dataSet[f]=null;e.setIndex(b);e.reset();
d[b]=e}else{d[b]=new DuJson.Set(this,h.set,b)}a[b]=g;b++},this);this._dataSet=d;this._assocId=a}});DuJson.Set=new Class({initialize:function(d,b,a){if(!d||!b||$type(a)!="number"){return}this._jsonCtrl=d;
this._idxSet=a;this._data=[];this._idArray=null;this._nextIdx=0;this._opt={};this._ajax=null;this._ajaxMod=false;var c=this._jsonCtrl.getIdArray();if(c){this._idArray=c}this.setupSet(b)},setupSet:function(b,h){if(!b){b={}
}var f=[];if($defined(b._aid)){var a=($type(b._aid)=="array"?b._aid:[b._aid]);this._idArray=[];a.each(function(i){if($type(i)=="string"&&i!=""){this._idArray.push(i)}},this);if(this._idArray.length<=0){this._idArray=null
}}if($defined(this._idArray)&&$defined(b._adata)){f=this._setAData(b._adata)}else{f=(b._data?b._data:b)}f=($type(f)!="array"?[f]:f);var g=0;f.each(function(i){if(this._data[g]){if(h){this._data[g++].modJson(i)
}else{this._data[g++].setJson(i)}}else{this._data.push(new DuJson.Data(this._jsonCtrl,this,i))}},this);var e=this._jsonCtrl.getSortProc();if(b._sort){e=b._sort}this.sortInit(this._data,e);var d=this._jsonCtrl.getOpt();
for(var c in d){this._opt[c]=($defined(b[c])?b[c]:d[c])}if(b._ajax){this._setupAjax(b._ajax)}if(b._ajaxMod){this._ajaxMod=(b._ajaxMod?true:false)}},_setAData:function(a){if(!this._idArray){return}if($type(a)!="array"){a=[a]
}var b=[];a.each(function(c){if($type(c)!="array"){c=[c]}var d={};c.each(function(f,e){if(e>=this._idArray.length){return}d[this._idArray[e]]=f},this);b.push(d)},this);return b},_setupAjax:function(a){if(!a.url){return
}this._ajax=new DuAjax.Range(a.url,{callback:this.ajaxDone.bind(this),renewal:a.renewal,range:a.range})},setIndex:function(a){if($type(a)!="number"||a<0){return}this._idxSet=a},getIndex:function(){return this._idxSet
},getOpt:function(a){if($defined(a)){if($defined(this._opt[a])){return this._opt[a]}return null}return this._opt},getDataLen:function(){return this._data.length},getData:function(a){if($type(a)!="number"){return null
}var b=a.limit(0,this._data.length-1);if(a!=b){return null}return this._data[a]},getNextIdx:function(){return this._nextIdx},getNextData:function(a){if(this._nextIdx>=this._data.length){if(!a){return null
}this._data.push(new DuJson.Data(this._jsonCtrl,this,null));this._nextIdx=this._data.length-1}return this._data[this._nextIdx++]},changeSet:function(a){if(!this._ajax){return true}this._ajax.cancel();if(a==this._idxSet){this._ajax.select()
}else{this._ajax.notify(this._idxSet,a)}return false},reset:function(a){this._nextIdx=($type(a)=="number"?a.limit(0,this._data.length-1):0)},ajaxDone:function(a,d,c){if(a){if(c){var b=Json.evaluate(d.text,true);
this.setupSet(b,this._ajaxMod)}}this._jsonCtrl.ajaxNotice(this._idxSet,a,{status:d.status,update:c})}});DuJson.Set.implement(new DuSort);DuJson.Data=new Class({initialize:function(c,a,b){if($type(c)!="object"){return
}this._jsonCtrl=c;this._jsonSet=a;this._json={};this._validator=null;this.setJson(b)},setValidator:function(a){if($type(a)=="function"){this._validator=a}},validate:function(){if(this._validator){this._validator()
}},each:function(b,c){for(var a in this._json){b.call(c,a,this._json[a])}},getKeys:function(){var b=[];for(var a in this._json){b.push(a)}return b},getData:function(a){if($defined(a)){if($defined(this._json[a])){return this._json[a]
}return this._jsonSet.getOpt(a)}return this._json},setData:function(b,d,c){var a=this._jsonCtrl.getChkArray();if(a&&!a.contains(b)){return}if(c===undefined){this._json[b]=d}else{if($type(this._json[b])!="object"){this._json[b]={}
}this._json[b][d]=c}},setJson:function(a){this._json={};if($type(a)!="object"){a=this._jsonCtrl.getDefObj()}this.modJson(a)},modJson:function(c){if($type(c)!="object"){return}var a=this._jsonCtrl.getChkArray();
for(var b in c){if(a&&!a.contains(b)){continue}this._json[b]=c[b]}if(this._validator){this._validator(this)}},getOpt:function(a){this._jsonSet.getOpt(a)}});
