String.prototype.trim=function(){return this.replace(/^\s+|\s+$/g,"")};
String.prototype.format=function(){var a=arguments;return this.replace(/\{(\d+?)\}/g,function($0,$1){return($1 in a?a[$1]:$0)})};
String.prototype.padLeft=function(c,l){return(this.length>l?this:Array(l-this.length+1).join(c)+this)};
String.prototype.padRight=function(c,l){return(this.length>l?this:this+Array(l-this.length+1).join(c))};
String.prototype.endsWith=function(c,ignoreCase){return new RegExp("("+c.replace(/([\-\^\$\[\]\(\)\.\?])/g,"\\$1")+")$",ignoreCase?"i":"").test(this)};
String.prototype.startsWith=function(c,ignoreCase){return new RegExp("^("+c.replace(/([\-\^\$\[\]\(\)\.\?])/g,"\\$1")+")",ignoreCase?"i":"").test(this)};
String.prototype.byteOf=function(){var c,l=0,i=0;while(c=this.charCodeAt(i++)){l+=(c>255?2:1)}return l};
String.prototype.reverse=function(){return this.split("").reverse().join("")};
String.prototype.safe=function(){return this.replace(/[\r\n"]/ig,function(c){switch(c){case'"':return'\\"';case"\r":return"\\r";case"\n":return"\\n"}})};
String.prototype.currency=function(){var s=this.split(".");while(/\d{4,}([,|\.]|$)/.test(s[0])){s[0]=s[0].replace(/([^,])(\d{3})([,\.]|$)/,"$1,$2$3")}return s.join(".")};

Function.fly=function(f,args,ctxThis){f=Function.parse(f);args=args||[];ctxThis=ctxThis||null;return (function(){return f.apply(ctxThis,args);});}
Function.failover=function(){for(var i=0,l=arguments.length;i<l;i++)try{return arguments[i]();}catch(e){continue;};return null;}
Function.parse=function(s){switch(typeof(s)){case "string":return /^([\s\S]+?)=>([\s\S]+)$/.test(s)?Function(RegExp.$1,'return '+RegExp.$2):null;case "function":return s;default:return Function("o","return o");}}
Function.prototype.delay=function(ms,args,ctxThis){this.__delay_t__=window.setTimeout(Function.fly(this,args,ctxThis),ms);}
Function.prototype.repeat=function(ms,args,ctxThis){this.__repeat_t__=window.setInterval(Function.fly(this,args,ctxThis),ms);}
Function.prototype.cancel=function(){window.clearTimeout(this.__delay_t__);window.clearInterval(this.__repeat_t__);}
Function.prototype.name=function(){if(/function\s+([^\s\(]+)/.test(this.toString()))return RegExp.$1;return "anonymous";}

Array.range=function(){var a=arguments;return (a.length==1?new Array(a[0]).map(function(b,c){return c;}):new Array(a[1]-a[0]+1).map(function(b,c){return a[0]+c;}));}
Array.prototype.map=function(f){f=Function.parse(f);var a=Array(this.length);for(var i=0,l=a.length;i<l;a[i]=f(this[i],i++));return a;}
Array.prototype.reduce=function(f){f=Function.parse(f);var r=this[0];for(var i=1,l=this.length;i<l;r=f(r,this[i++]));return r;}
Array.prototype.filter=function(f){f=Function.parse(f);var a=[];for(var i=0,l=this.length;i<l;i++)if(f(this[i],i))a[a.length]=this[i];return a;}
Array.prototype.trim=function(){return this.filter(function(a){return a!=null&&a!=""&&typeof(a)!="undefined";});}
Array.prototype.first=function(f){f=Function.parse(f);for(var i=0,l=this.length;i<l;i++)if(f(this[i],i))return this[i];return null;}
Array.prototype.last=function(f){f=Function.parse(f);for(var i=this.length-1;i>=0;i--)if(f(this[i],i))return this[i];return null;}
Array.prototype.shuffle=function(){return this.map(function(b,c){return {i:b,n:Math.random().toString().slice(-5)};}).sort(function(d,e){return d.n-e.n;}).map(function(f,g){return f.i;});}
Array.prototype.extract=function(){
  var a=[];
  function _extract_(_a){if(_a&&_a.constructor&&_a.constructor==Array){_a.map(_extract_);}else{a[a.length]=_a;}}
  this.map(_extract_);
  return a;
}

var maggot=function(selector,p){
  if(typeof(p)=="string")
    p=maggot(p);
  p=p||document;
  if(typeof (selector)=="string"){
    selector=selector.trim();
    if(selector.indexOf(" ") > 0){
      var arr=[p],selectors=selector.split(" ");
      while(selector=selectors.shift())
        arr=arr.map(function(p){return maggot(selector,p);}).extract();
      return arr;
    }else if(selector.charAt(0)=="#"){
      if(p.getElementById)
        return p.getElementById(selector.slice(1));
      else if((p.document||p.ownerDocument).getElementById)
        return (p.document||p.ownerDocument).getElementById(selector.slice(1));
      else if(document.all)
        return p.all[selector.slice(1)];
      return null;
    }else if(selector.charAt(0)=="$"){
      var arr = [];
      if(p.getElementsByName)
        for(var selected=p.getElementsByName(selector.slice(1)),l=selected.length,i=0;i<l;arr[i]=selected[i],i++);
      else if((p.document||p.ownerDocument).getElementsByName)
        for(var selected=(p.document||p.ownerDocument).getElementsByName(selector.slice(1)),l=selected.length,i=0;i<l;arr[i]=selected[i],i++);
      return arr;
    }else{
      var arr=[];
      if(selector.charAt(0)=="."){
        var className=selector.slice(1);
        if(p.getElementsByClassName){
          for(var selected=p.getElementsByClassName(className),l=selected.length,i=0;i<l;arr[i]=selected[i],i++);
        }else if(p.all){
          for(var selected=p.all,l=p.all.length,i=0,n=0;i<l;i++)
            if(maggot.findclass(selected[i],className))
              arr[n++]=selected[i];
        }
      }else if(selector.indexOf(".") > 0){
        selector=selector.split("."),className=selector[1],selector=selector[0].toUpperCase();
        arr=maggot("."+className,p).filter(function(elem){return (elem.tagName||'').toUpperCase()==selector;});
      }else{
        if(p.getElementsByTagName){
          for(var selected=p.getElementsByTagName(selector),l=selected.length,i=0;i<l;arr[i]=selected[i],i++);
          return arr;
        }else if(p.all){
          for(var selected=p.all.tags(selector),l=selected.length,i=0;i<l;arr[i]=selected[i],i++);
          return arr;
        }
      }
      return arr;
    }
  }else{
    return selector;
  }
}

var _maggot_={
  version:"1.3-dev",
  rootpath:"/webgear/jsmodules/",
  theme:"default",
  debug:{
    assert:function(){},
    inspect:function(){}
  },
  ui:{},
  loaded:{},
  load:function(){
    for(var a=arguments,i=0;i<a.length;i++){
      if(false==(a[i].toLowerCase() in this.loaded)){
        this.loaded[a[i].toLowerCase()]=false;
        if(maggot("HEAD").length)
          maggot("HEAD")[0].appendChild(this.html("SCRIPT",{ defer:'defer',type:'text/javascript',src:this.rootpath+a[i],charset:"euc-kr" }));
        else
          document.write("<","script defer='defer' type='text/javascript' src=\"",this.rootpath+a[i],"\" charset=\"euc-kr\"></","script>");
      }
    }
  },
  defaultEl:{
    concat:function(selector,p){
      this.elements=this.elements.concat([maggot.apply(null,arguments)].extract());
      return this;
    },
    html:function(){
      var a=[];
      for(var i=0,l=arguments.length;i<l;i++)
        a[i]=arguments[i];
      a=a.join('');
      this.elements.map.apply(this.elements,[function(el){el.innerHTML=a;}]);
      return this;
    },
    reverse:function(){
      this.elements=this.elements.reverse();
      return this;
    },
    filter:function(f){
      this.elements=this.elements.filter.apply(this.elements,[f]);
      return this;
    },
    map:function(f){
      this.elements=this.elements.map.apply(this.elements,[f]);
      return this;
    },
    style:function(name,value){
      this.elements.map(function(elem){maggot.style.apply(maggot,[elem,name,value]);});
      return this;
    },
    attach:function(evt,handler){
      this.elements.map(function(elem){maggot.attach.apply(maggot,[elem,evt,handler]);});
      return this;
    },
    detach:function(evt,handler){
      this.elements.map(function(elem){maggot.detach.apply(maggot,[elem,evt,handler]);});
      return this;
    },
    addclass:function(name){
      this.elements.map(function(elem){maggot.addclass.apply(maggot,[elem,name]);});
      return this;
    },
    removeclass:function(name){
      this.elements.map(function(elem){maggot.removeclass.apply(maggot,[elem,name]);});
      return this;
    }
  },
  el:function(selector,p){
    return maggot.override(this.defaultEl,{
      elements:[(maggot.query||maggot).apply(null,arguments)].extract()
    });
  },
  ready:function(f){
    function loadTimer(){
      for(var key in maggot.loaded){
        if(false==maggot.loaded[key]){
          maggot.debug.assert(key+' not loaded');
          window.setTimeout(loadTimer,100);
          return;
        }
      }
      maggot.debug.assert('loadTimer done '+maggot.browser.doctype);
      f();
    }
    this.debug.assert('loadTimer start');
    this.attach(window,'onload',loadTimer);
  },
  get:function(){
    return maggot.apply(null,arguments);
  },
  html:function(tag,prop,style,dom){
    var elem;
    if(typeof(tag)=="string"){
      prop=prop||{},style=style||{},dom=dom||document;
      elem=dom.createElement(tag);
      for(var key in prop)
        elem[key]=prop[key];
      for(var key in style)
        elem.style[key]=style[key];
    }else{
      elem=document.createElement(tag.name);
      if('property' in tag)
        for(var key in tag.property)
          elem[key]=tag.property[key];
      if('style' in tag)
        for(var key in tag.style)
          elem.style[key]=tag.style[key];
      if('children' in tag)
        for(var i=0;i<tag.children.length;i++)
          elem.appendChild(this.html(tag.children[i]));
    }
    if(maggot.browser.browser!="Explorer")
      return elem;
    try {
      this.attach(window,'onbeforeunload',function(){for(var key in elem)if(key.indexOf('on')==0)elem[key]=null;});
      return elem;
    } finally {
      elem=null;
    }
  },
  style:function(elem,name,value){
    if(elem.constructor&&elem.constructor==Array){
      for(var i=0,l=elem.length;i<l;i++)
        this.style(elem[i],name,value);
      return elem;
    }
    elem=maggot(elem);
    if(arguments.length==2){
      if(elem.style[name])
        return elem.style[name];
      else if(elem.currentStyle)
        return elem.currentStyle[name];
      else if(document.defaultView&&document.defaultView.getComputedStyle)
        return document.defaultView.getComputedStyle(elem,null).getPropertyValue(name);
      return null;
    }else if(arguments.length==3){
      switch(name.toLowerCase()){
        case 'opacity':
          elem.style.opacity=Number(value);
          elem.style.filter='alpha(opacity='+this.int(value*100,100)+')';
          break;
        case 'width':
        case 'height':
        case 'borderwidth':
          elem.style[name]=this.int(value,0)+'px';
          break;
        default:
          elem.style[name]=value;
          break;
      }
      return elem;
    }
  },
  attach:function(elem,evt,handler){
    elem=maggot(elem);
    if(elem.attachEvent)
      elem.attachEvent(evt,handler);
    else if(elem.addEventListener)
      if(evt.toLowerCase()=='onmousewheel'&&typeof(window.onmousewheel)=='undefined')
        elem.addEventListener('DOMMouseScroll',handler,false);
      else
        elem.addEventListener(evt.slice(2),handler,false);
    else
      elem[evt]=handler;
    return elem;
  },
  detach:function(elem,evt,handler){
    elem=maggot(elem);
    if(elem.detachEvent)
      elem.detachEvent(evt,handler);
    else if(elem.removeEventListener)
      elem.removeEventListener(evt.slice(2),handler,false);
    else
      elem[evt]=null;
    return elem;
  },
  bounds:function(elem){
    return getBoundsObject(maggot(elem));
  },
  int:function(val,defaultVal){
    return (isNaN(val=parseInt(val,10))?defaultVal:val);
  },
  findclass:function(elem,name){
    if((elem=maggot(elem)).className&&name)
      return eval("/(^|\\s)"+name.replace(/([\-\.\(\)\[\]])/g,"\\$1")+"(\\s|$)/m").test(elem.className);
    else
      return false;
  },
  addclass:function(elem,name){
    if(this.findclass(elem=maggot(elem),name))
      return;
    if(elem.className)
      elem.className+=" "+name;
    else
      elem.className=name;
    return elem;
  },
  removeclass:function(elem,name){
    if((elem=maggot(elem)).className&&this.findclass(elem,name))
      elem.className=elem.className.replace(eval("/(^|\\s)"+name+"(\\s|$)/g"),"$1$2").replace(/\s{2,}/g,"");
    return elem;
  },
  override:function(a,b){
    for(var prop in a) b[prop]=a[prop];
    return b;
  },
  insertafter:function(target,elem){
    if(target.insertAdjacentElement){
      target.insertAdjacentElement('afterEnd',elem);
    }else if(target.nextSibling){
      target.parentNode.insertBefore(elem,target.nextSibling);
    }else{
      target.parentNode.appendChild(elem);
    }
    return elem;
  },
  insertbefore:function(target,elem){
    if(target.insertAdjacentElement){
      target.insertAdjacentElement('beforeBegin',elem);
    }else{
      target.parentNode.insertBefore(elem,target);
    }
    return elem;
  },
  event:function(e){
    switch(this.browser.browser){
      case "Explorer":
        e=e||window.event;
        return {
          isIE:true
          ,innerEvent:e
          ,type:e.type
          ,target:e.srcElement
          ,altKey:e.altKey
          ,ctrlKey:e.ctrlKey
          ,shiftKey:e.shiftKey
          ,keyCode:e.keyCode
          ,button:e.button
          ,clientX:e.clientX
          ,clientY:e.clientY
          ,screenX:e.screenX
          ,screenY:e.screenY
          ,relatedTarget:e.fromElement||e.toElement
          ,pageX:(document.body.scrollLeft||document.documentElement.scrollLeft)+e.clientX
          ,pageY:(document.body.scrollTop||document.documentElement.scrollTop)+e.clientY
          ,wheelDelta:(e.wheelDelta?e.wheelDelta/120:0)
          ,stop:function(){e.returnValue=false;e.cancelBubble=true;return false;}
        };
      default:
        return {
          isIE:false
          ,innerEvent:e
          ,type:e.type
          ,target:e.target
          ,altKey:e.altKey
          ,ctrlKey:e.ctrlKey
          ,shiftKey:e.shiftKey
          ,keyCode:e.keyCode
          ,button:e.button
          ,clientX:e.clientX
          ,clientY:e.clientY
          ,screenX:e.screenX
          ,screenY:e.screenY
          ,relatedTarget:e.relatedTarget
          ,pageX:e.pageX
          ,pageY:e.pageY
          ,wheelDelta:(maggot.browser.browser=='Opera'?e.wheelDelta/120:(e.wheelDelta || -e.detail/3))
          ,stop:function(){e.returnValue=false;if(e.stopPropagation)e.stopPropagation();if(e.preventDefault)e.preventDefault();return false;}
        };
    }
  }
}

function IEventDispatch(){
  this.__events={};
  this.attachEvent=function(name,handler){
    if(!(name in this.__events))
      return;
    this.__events[name][this.__events[name].length]=handler;
  }
  this.detachEvent=function(name,handler){
    if(!(name in this.__events))
      return;
    for(var i=0,len=this.__events[name].length;i<len;i++){
      if(this.__events[name][i]===handler){
        delete this.__events[name][i];
      }
    }
  }
  this.fireEvent=function(name,sender,eventObject){
    if(!(name in this.__events))
      return;
    for(var i=0,len=this.__events[name].length;i<len;i++){
      if(typeof(this.__events[name][i])=="function"){
        this.__events[name][i].apply(sender,[eventObject]);
        if(true==eventObject.cancelBubble)
          return;
      }
    }
  }
  this.registerEvents=function(){
    for(var i=0,len=arguments.length;i<len;i++){
      this.__events[arguments[i]]=[];
    }
  }
}

for(var key in _maggot_){
  if(_maggot_.hasOwnProperty(key))
    maggot[key]=_maggot_[key];
}

/**
 * tag °´Ã¼ÀÇ À§Ä¡°ª ¹× ³Êºñ/³ôÀÌ°ªÀ» ¹ÝÈ¯ÇÑ´Ù.
 * @param {objId} DOM°´Ã¼:document.getElementById()
 * @return {ret} left,top,width,height ¸¦ ¹ÝÈ¯ÇÑ´Ù.
 * @author µ¥²Ù¹÷ (http://techbug.tistory.com/108)
 */
function getBoundsObject(tag){
  var techbug={};
  if(tag!=null&&tag!=undefined){
    if(tag.getBoundingClientRect){ //IE,FF3
      var rect=tag.getBoundingClientRect();
      techbug.left=rect.left+(document.documentElement.scrollLeft||document.body.scrollLeft);
      techbug.top=rect.top+(document.documentElement.scrollTop||document.body.scrollTop)//-maggot.int(maggot.style(tag,'marginTop'),0);
      techbug.width=rect.right-rect.left;
      techbug.height=rect.bottom-rect.top;
      if(maggot.browser.browser=='Explorer')//IE¿¡¼­ °ªº¸Á¤
        techbug.left-=2,techbug.top-=2,techbug.width-=2,techbug.height-=2;
    }else if(document.getBoxObjectFor){// gecko ¿£Áø ±â¹Ý FF3Á¦¿Ü
      var box=document.getBoxObjectFor(tag);
      techbug.left=box.x;
      techbug.top=box.y;
      techbug.width=box.width;
      techbug.height=box.height;
    }else{
      techbug.left=tag.offsetLeft;
      techbug.top=tag.offsetTop;
      techbug.width=tag.offsetWidth;
      techbug.height=tag.offsetHeight+3;//+1=Moz¿Í ¸ÂÃã
      var parent=tag.offsetParent;
      if(parent!=tag){
       while(parent){
          techbug.left+=parent.offsetLeft;
          techbug.top+=parent.offsetTop;
          parent=parent.offsetParent;
        }
      }
      // ¿ÀÆä¶ó¿Í »çÆÄ¸®ÀÇ 'absolute' postionÀÇ °æ¿ì bodyÀÇ offsetTopÀ» Àß¸ø °è»ê º¸Á¤
      if(maggot.browser.browser=='Opera'||( maggot.browser.browser=='Safari'&&maggot.style(tag,'position')=='absolute' )){
        techbug.top -= document.body.offsetTop;
      }
    }
    return techbug;
  }
}

/**
 * browser detection (yui compressed)
 * @author http://www.quirksmode.org/js/detect.html
 */
var BrowserDetect={init:function(){this.browser=this.searchString(this.dataBrowser)||"unknown";this.version=this.searchVersion(navigator.userAgent)||this.searchVersion(navigator.appVersion)||"unknown";this.OS=this.searchString(this.dataOS)||"unknown"},searchString:function(d){for(var a=0;a<d.length;a++){var b=d[a].string;var c=d[a].prop;this.versionSearchString=d[a].versionSearch||d[a].identity;if(b){if(b.indexOf(d[a].subString)!=-1){return d[a].identity}}else{if(c){return d[a].identity}}}},searchVersion:function(b){var a=b.indexOf(this.versionSearchString);if(a==-1){return}return parseFloat(b.substring(a+this.versionSearchString.length+1))},dataBrowser:[{string:navigator.userAgent,subString:"Chrome",identity:"Chrome"},{string:navigator.userAgent,subString:"OmniWeb",versionSearch:"OmniWeb/",identity:"OmniWeb"},{string:navigator.vendor,subString:"Apple",identity:"Safari",versionSearch:"Version"},{prop:window.opera,identity:"Opera"},{string:navigator.vendor,subString:"iCab",identity:"iCab"},{string:navigator.vendor,subString:"KDE",identity:"Konqueror"},{string:navigator.userAgent,subString:"Firefox",identity:"Firefox"},{string:navigator.vendor,subString:"Camino",identity:"Camino"},{string:navigator.userAgent,subString:"Netscape",identity:"Netscape"},{string:navigator.userAgent,subString:"MSIE",identity:"Explorer",versionSearch:"MSIE"},{string:navigator.userAgent,subString:"Gecko",identity:"Mozilla",versionSearch:"rv"},{string:navigator.userAgent,subString:"Mozilla",identity:"Netscape",versionSearch:"Mozilla"}],dataOS:[{string:navigator.platform,subString:"Win",identity:"Windows"},{string:navigator.platform,subString:"Mac",identity:"Mac"},{string:navigator.platform,subString:"Linux",identity:"Linux"}]};
BrowserDetect.init();
maggot.browser={
  browser:BrowserDetect.browser,
  version:BrowserDetect.version,
  os:BrowserDetect.OS
};
maggot.browser.doctype=(function(){
  var s=String(document.doctype?document.doctype.systemId:(document.all?document.all[0].text:'')).toLowerCase();
  if(s.indexOf("html4/strict.dtd") > -1)
    return "html 4.01 strict";
  else if(s.indexOf("html4/loose.dtd") > -1)
    return "html 4.01 transitional";
  else if(s.indexOf("html4/frameset.dtd") > -1)
    return "html 4.01 frameset";
  else if(s.indexOf("dtd/xhtml1-strict.dtd") > -1)
    return "xhtml 1.0 strict";
  else if(s.indexOf("dtd/xhtml1-transitional.dtd") > -1)
    return "xhtml 1.0 transitional";
  else if(s.indexOf("dtd/xhtml1-frameset.dtd") > -1)
    return "xhtml 1.0 frameset";
  else if(s.indexOf("dtd/xhtml11.dtd") > -1)
    return "xhtml 1.1";
  else
    return "";
})();

function pseudoClick(e) {
  e = maggot.event(e);
  if(e.keyCode != 13) return;
  if(e.target && e.target.onclick) {
    e.target.onclick();
  }
}
var zoomValue = 1;
maggot.attach(window,'onload',function(evtOnload){
  if(maggot('#font_plus')){
    maggot.attach('#font_plus','onclick',function(e){
      if(maggot.browser.browser == "Explorer"){
        if(zoomValue < 2){
          maggot('#swfTopMenu').WMode = "Window";
          zoomValue += 0.25;
          document.body.style.zoom = zoomValue;
          if(maggot('#boardIndex0')){
            maggot.el('#boardIndex').style('zoom',zoomValue);
            maggot.style('#boardIndex0','zoom',zoomValue);
            maggot.style('#boardIndex1','zoom',zoomValue);
            maggot.style('#boardIndex2','zoom',zoomValue);
          }
        }
      }else{
        alert('ÄÁÆ®·ÑÅ°¸¦ ´©¸¥Ã¤·Î ¸¶¿ì½ºÀÇ ÈÙ¹öÆ°À» ¿òÁ÷ÀÌ¼¼¿ä');
      }
    });
  }
  if(maggot('#font_minus')){
    maggot.attach('#font_minus','onclick',function(e){
      if(maggot.browser.browser == "Explorer"){
        if(zoomValue > 0.75){
          zoomValue -= 0.25;
          document.body.style.zoom = zoomValue;
          maggot('div','#topMenuDiv')[0].innerHTML = maggot('div','#topMenuDiv')[0].innerHTML;
          if(maggot('#boardIndex0')){
            maggot.el('#boardIndex').style('zoom',zoomValue);
            maggot.style('#boardIndex0','zoom',zoomValue);
            maggot.style('#boardIndex1','zoom',zoomValue);
            maggot.style('#boardIndex2','zoom',zoomValue);
          }
        }
      }else{
        alert('ÄÁÆ®·ÑÅ°¸¦ ´©¸¥Ã¤·Î ¸¶¿ì½ºÀÇ ÈÙ¹öÆ°À» ¿òÁ÷ÀÌ¼¼¿ä');
      }
    })
  }
});