/*
基本処理用ライブラリ

$Id: util.js 7 2006-03-17 08:02:18Z takayama $

*/


/* 汎用関数 */
function $(elm) {
   return document.getElementById(elm);
}


/* ユーティリティ */
var Util = {};

Util.aOffsetTop = function(el) {
   if(el.offsetParent.tagName.toLowerCase()=="body")
      return el.offsetTop;
   else
      return el.offsetTop + this.aOffsetTop(el.offsetParent);
}

Util.aOffsetLeft = function(el) {
   if(el.offsetParent.tagName.toLowerCase()=="body")
      return el.offsetLeft;
   else
      return el.offsetLeft + this.aOffsetLeft(el.offsetParent);
}

Util.addEvent = function(elm, type, event) {
   if(elm.addEventListener) {
      elm.addEventListener(type, event, false);
   } else if(elm.attachEvent) {
      elm.attachEvent('on'+type, event);
   } else {
      elm['on'+type] = event;
   }
}

Util.createLink = function(txt, attr, href) {
   var link = document.createElement("a");
   link.appendChild(document.createTextNode(txt));
   link.setAttribute("href", ((href)?href:"javascript:void(0);"));
   if(attr)  this.addEvent(link, 'click', attr);
   return link;
}

Util.winTop = function() {
   var top = (document.all) ?
   ((document.compatMode=="CSS1Compat")?document.documentElement:document.body).scrollTop :
   pageYOffset;

   return top;
}


/* submit ボタン押下時の disabled 化 */
var DisableSubmit = {
   set: function() {
      var _that = this;
      for (var i = 0; i < document.forms.length; i++) {
         if(!document.forms[i].onsubmit)
         document.forms[i].onsubmit = function() {
            _that.setDisable(this.elements);
         };
      }
   },

   setDisable: function(elms) {
      for (var i = 0; i < elms.length; i++) {
         var elm = elms[i];
         if (elm.type == 'submit') {
            Set(elm);
            unSet(elm);
         }
      }

      function unSet(button) {
         window.setTimeout(function() { button.disabled = false; }, 800);
      }
      function Set(button) {
         window.setTimeout(function() { button.disabled = true; }, 1);
      }
   }
}


/* フォームフォーカス時の背景色設定 */
function ColorfulInput() {
   this.skip  = [];
   this.color = { 'blur': '', 'focus': '#EEEEEE' };

   this.set = function() {
      var z = 0;
      for (var i = 0; i < document.forms.length; i++) {
         if(document.forms[i]._setColorful == true) continue;
         document.forms[i]._setColorful = true;
         for (var f = 0; f < document.forms[i].length; f++) {
            this._set(document.forms[i][f]);
         }
         if(z++ && z > 5) break;
      }
   }

   this._set = function(elm) {
      // Ajax 送信用コード
      if(elm.type == 'submit') {
         var event = function() { LastSubmit = elm.name; };
         Util.addEvent(elm, 'click', event);
      }
      if(!this._checkSkip(elm)) return;
      this._setColor(elm, 'focus');
      this._setColor(elm, 'blur');
   }

   this.setLast = function() {
      var i = document.forms.length-1;
      for (var f = 0; f < document.forms[i].length; f++) {
         this._set(document.forms[i][f]);
      }
   }

   this._checkSkip = function(elm) {
      for(var i in this.skip) {
         if(elm.type == this.skip[i]) return false;
      }
      return true;
   }

   this._setColor = function(elm, type) {
      var color = this.color[type];
      var event = function() { elm.style.backgroundColor = color; };
      Util.addEvent(elm, type, event);
   }
}


/* 非同期通信 */
var AJAX = {
   init: function() {
      var xmlhttp = newHttp();
      this.url = 'admin.cgi';

      this.get = function() {
         if(!xmlhttp) return true;
         xmlhttp.open('GET', this.url, true);
         xmlhttp.onreadystatechange = this.load;
         xmlhttp.send('');
      }

      this.post = function(post) {
         if(!xmlhttp) return true;
         var data = AJAX.postArray(post);

         xmlhttp.open('POST', this.url, true);
         xmlhttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
         xmlhttp.onreadystatechange = this.load;
         /* IE5.5,5.0 用エラー避け */
         try {
            xmlhttp.send(data);
         } catch (e) {
            return true;
         }
      }

      this.getResponse = function() {
         if(xmlhttp.readyState == 4 && (xmlhttp.status == 200)) {
            return xmlhttp.responseText;
         }
         return;
      }

      this.abort = function() {
         xmlhttp.abort();
      }

      function newHttp() {
         if(document.getElementById) {
            try{
               return new ActiveXObject("Msxml2.XMLHTTP");
            } catch (e){
               try {
                  return new ActiveXObject("Microsoft.XMLHTTP");
               } catch (E){
                  if(typeof XMLHttpRequest != 'undefined') return new XMLHttpRequest;
               }
            }
         }

         return false;
      }
   },

   postArray: function(data) {
      var p = '';
      for(var key in data) {
         var val = this.postEscape(data[key]);
         p = p.concat(key+'='+val+'&');
      }
      p = p.concat('async=1&');
      return p;
   },

   postEscape: function(str) {
      str = escape(str);
      str = str.replace('+', '%2B', 'g');
      return str;
   }
}


/* 入力を促すメッセージ */
function inputDefault(elm, msg) {
   this.elm     = elm;
   this.msg     = msg;
   this.color   = '#999999';
   this.bgColor = '#F9FFF9';
}

inputDefault.prototype.set = function() {
   this._cleared    = false;
   this._defColor   = this.elm.style.color;
   this._defBGColor = this.elm.style.backgroundColor;

   this.elm.value        = this.msg;
   this.elm.style.color  = this.color;
   this.elm.style.backgroundColor = this.bgColor;

   var _this = this;
   Util.addEvent( this.elm,      'focus',  function() { _this.clear();  } );
   Util.addEvent( this.elm.form, 'submit', function() { _this.submit(); } );
}

inputDefault.prototype.clear = function() {
   if(this._cleared) return;

   this.elm.style.color            = this._defColor;
   this.elm.style.backgroundColor  = this._defBGColor;
   this.elm.value = '';
   this._cleared  = true;
}

inputDefault.prototype.submit = function() {
   if(this._cleared) return;

   var _this = this;
   this.elm.disabled = true;
   window.setTimeout(function() { _this.elm.disabled = false; }, 1);
}



