/**
 * javascript 的に追加したいロジックをこの辺に書く
 */

/**
 * javascript標準Stringオブジェクトにtrim()関数を追加
 */
String.prototype.trim = function() {
	return this.replace(/^\s+|\s+$/g, "");
}
/**
 * HTML5で規定されている getElementsByClassName メソッドを組み込む
 *
 * 【使用例】
 *
 * "abc"というクラス名の要素オブジェクトの配列を取り出す
 * document.getElementsByClassName("abc") 
 * 
 * クラス名が"abc"の要素のうち0番目のもの（1ではなく0から数えます）の背景色を黄色にする
 * document.getElementsByClassName("abc")[0].style.backgroundColor = "yellow"; 
 * 
 * クラス名が"abc"の要素すべての文字色を赤色にする
 * var e = document.getElementsByClassName("abc");
 * for (var i = 0; i < e.length ; i++) {
 *     e[i].style.color = "red";
 * }
 * 
 * htmlタグが<p> の クラス名が"abc"の要素すべての文字色を赤色にする
 * var e = document.getElementsByClassName('abc',null,'p');
 * for (var i = 0; i < e.length ; i++) {
 *     e[i].style.color = "red";
 * }
 * 
 * @param string 検索したい cssクラス eg. <div class="hoge" ...
 * @param string 指定されたノードの全ての子ノードに対して評価が行われます. eg. window toolbar 省略時 document
 * @param string 検索したい要素の htmlタグ eg. <div ... .省略時 全てのhtmlタグ
 */
document.getElementsByClassName = function (className, pElement, tagName) {
    var d = document, nodes = [], item;
    try { // XPathをサポートしているならこれを使う
        var xp = d.evaluate(
            './/'+(tagName || '*')+'[contains(concat(" ", @class, " "), " '+className+' ")]',
            (pElement || d), null, XPathResult.ANY_TYPE, null
        );
        for (item = xp.iterateNext(); item; item = xp.iterateNext()){
            nodes.push(item);
        }
    } catch(e){ // そうでなければ地道にDOM解析
        var cls, items = (pElement || d).getElementsByTagName((tagName || '*'));
        for(var i = 0, l = items.length; i < l; i++){
            item = items[i];
            if(item.className){
                cls = item.className.split(/\s+/);
                for(var j = 0, k = cls.length; j < k; j++){
                    if(cls[j]==className){
                        nodes[nodes.length] = item; break;
                    }
                }
            }
        }
    }
    return nodes.length > 0 ? nodes : null;
}


/**
 * texterea のサイズを可変にする
 */
var mtvElementResizer = {
   moveNode: false,

   add: function(elm) {
      var obj = new this._ChildElement(this, elm);

      addEvent(elm, 'mousedown', function (e) {
         if(obj.resizePoint(e)) {
            mtvElementResizer.moveNode = obj;
         }
      });

      return obj;
   },

   start: function() {
      var self = this;
      addEvent(document.body, 'mouseup', function (e) {
         if(self.moveNode) self.moveNode = false;
      });

      addEvent(document.body, 'mousemove', function (e) {
         if(self.moveNode) self.moveNode.doResize(e);
      });
   },

   resizePoint: function(e, elm) {
      var offset = Position.offset(elm);
      var page   = Position.page(e);

      offset.y += elm.offsetHeight;
      offset.x += elm.offsetWidth;

      if(offset.y - 32 < page.y && page.y < offset.y &&
         offset.x - 32 < page.x && page.x < offset.x - 8) {
         return true;
      }
   },

   doResize: function(e, elm) {
      var offset = Position.offset(elm);
      var page   = Position.page(e);

      var width  = page.x - offset.x + 24;
      var height = page.y - offset.y + 16;
      if (width  < 50) width  = 50;
      if (height < 50) height = 50;

      elm.style.height = height + 'px';
      elm.style.width  = width  + 'px';
   }
}
mtvElementResizer._ChildElement = function() {
   this.initialize.apply(this, arguments);
}
mtvElementResizer._ChildElement.prototype = {
   initialize: function(base, elm) {
      this.base = base;
      this.elm  = elm;
   },

   resizePoint: function(e) {
      return this.base.resizePoint(e, this.elm);
   },

   doResize: function(e) {
      return this.base.doResize(e, this.elm);
   }
}
var Position = {
   offset: function(elm) {
      var pos = {};
      pos.x = this.getOffset('Left', elm);
      pos.y = this.getOffset('Top', elm);
      return pos;
   },

   getOffset: function(prop, el) {
      if(!el.offsetParent || el.offsetParent.tagName.toLowerCase() == "body")
         return el['offset'+prop];
      else
         return el['offset'+prop]+ this.getOffset(prop, el.offsetParent);
   },

   page: (document.all) ?
      (function() {
         var pos = {};
         pos.x = event.x + (document.body.scrollLeft || document.documentElement.scrollLeft);
         pos.y = event.y + (document.body.scrollTop  || document.documentElement.scrollTop);
         return pos;
      })
      :
      (function(e) {
         var pos = {};
         pos.x = e.pageX;
         pos.y = e.pageY;
         return pos;
      })
}
var addEvent = (window.addEventListener) ?
   (function(elm, type, event) {
      elm.addEventListener(type, event, false);
   }) : (window.attachEvent) ?
   (function(elm, type, event) {
      elm.attachEvent('on'+type, event);
   }) :
   (function(elm, type, event) {
      elm['on'+type] = event;
   }) ;
addEvent(window, 'load', function() {
   var textareas = document.getElementsByTagName('textarea');
   var iframes = document.getElementsByTagName('iframe');
   
   for(var i = 0;elm = textareas[i];i++) {
      (function(elm) {
         var obj = mtvElementResizer.add(elm);
         var cursor = false;

         addEvent(elm, 'mousemove', function (e) {
            if(!cursor && obj.resizePoint(e)) {
               elm.style.cursor = 'se-resize';
               cursor = true;
            } else if(cursor && !obj.resizePoint(e)) {
               elm.style.cursor = 'default';
               cursor = false;
            }
         });
      })(elm);
   }


   /*iframe用*/
   for(var i = 0;elm = iframes[i];i++) {
      (function(elm) {
         var obj = mtvElementResizer.add(elm);
         var cursor = false;

         addEvent(elm, 'mousemove', function (e) {
            if(!cursor && obj.resizePoint(e)) {
               elm.style.cursor = 'se-resize';
               cursor = true;
            } else if(cursor && !obj.resizePoint(e)) {
               elm.style.cursor = 'default';
               cursor = false;
            }
         });
      })(elm);
   }


   mtvElementResizer.start();
});








/**
 * mtv 特有の関数はここから
 */

//window.onload = colorRows;
function colorRows() {
       var myTR = document.getElementsByTagName('div');
       for (var i=0;i<myTR.length;i++) {
               if (i%2) {
                       myTR[i].className = 'rowTint';
               }
       }
}


//error
function input_chk() {
    var text;
    text = document.put.message.value;
    if (text != "") {
        if (confirm("["+text+"] \n not error")) {
            document.put.submit();
        }
    } else {
        alert("error");
    }
}


if(typeof basejs == "undefined") {

    var basejs = { version:'1.0.0' };

    /**
     * 確認画面表示メソッド
     *
     */
    basejs.confirmWindow = function (link, message){
        if(window.confirm(message + 'よろしいですか？')){
            location.href = link;
        }else{
            window.alert('キャンセルしました');
            return false;
        }
    }
    /**
     * 単純系 submit 制御メソッド
     * `formName'名のsubmit()を実行する
     * 使用フォーマット
     * onclick="return basejs.sendSimpleGoSumbit('remove','削除します.','キャンセルしました.');"
     *
     * @param string formName submitボタンのname
     * @param string msg      案内文言
     * @param string stopMsg  中止文言
     * @return void
     */
    basejs.sendSimpleGoSubmit = function (form, msg, stopMsg) {
        if(confirm(msg)) {
        	form.submit();  //20090423エラーでてたので修正
        } else {
            alert(stopMsg);
            return false; // 送信を中止
        }
    }
    
    /**
     * onload() で使用する。
     *
     * trタグの偶数行のclassを`even'、奇数行のclassを`odd'にする
     * 全行にマウスか重なった際にクラス名をhoverに変更するjavascriptを埋め込む
     * @param string マウスオーバー時に適用するclass名 : 省略時はhoverを使う
     * @param string 対象テーブルの<table>タグにつけたid : 省略時はページ全体の<tr>が対象になる
     */
    basejs.colorRowsTr = function () {
        if(document.getElementsByTagName) {
            // 引数のチェック
            if(basejs.colorRowsTr.arguments.length) {
                var hoverClass = basejs.colorRowsTr.arguments[0];
                var tableId  = basejs.colorRowsTr.arguments[1];
            }
    
            // マウスオーバー時のclass名を決定
            if(! hoverClass) {
    	        var hoverClass = 'hover';
            }
    
            // trオブジェクトを取得
            if(tableId) {
                var myTR = document.getElementById(tableId).getElementsByTagName('tr');
            } else {
                var myTR = document.getElementsByTagName('tr');
            }
    
            for (var i = 0, n = myTR.length; i < n ; ++i) {
                if (0 == (i%2)) {
                    myTR[i].className = 'even';
                } else {
                    myTR[i].className = 'odd';
                }
    
    			if (myTR[i].className) {
    				myTR[i].BaseName = myTR[i].className;
    				myTR[i].onmouseover = function(){this.className = hoverClass;}
    				myTR[i].onmouseout = function(){this.className = this.BaseName;}
    			}
            }
        }
    }
    
    /**
     * Cookieメソッド
     * @example $.cookie('the_cookie', 'the_value');
     * @desc Set the value of a cookie.
     * @example $.cookie('the_cookie', 'the_value', {expires: 7, path: '/', domain: 'jquery.com', secure: true});
     * @desc Create a cookie with all available options.
     * @example $.cookie('the_cookie', '', {expires: -1});
     * @desc Delete a cookie by setting a date in the past.
     * @option Boolean secure If true, the secure attribute of the cookie will be set and the cookie transmission will
     *                        require a secure protocol (like HTTPS).
     */
    basejs.cookie = function(name, value, options) {
        if (typeof value != 'undefined') { // name and value given, set cookie
            options = options || {};
            var expires = '';
            if (options.expires && (typeof options.expires == 'number' || options.expires.toGMTString)) {
                var date;
                if (typeof options.expires == 'number') {
                    date = new Date();
                    date.setTime(date.getTime() + (options.expires * 24 * 60 * 60 * 1000));
                } else {
                    date = options.expires;
                }
                expires = '; expires=' + date.toGMTString(); // use expires attribute, max-age is not supported by IE
            }
            var path = options.path ? '; path=' + options.path : '';
            var domain = options.domain ? '; domain=' + options.domain : '';
            var secure = options.secure ? '; secure' : '';
            document.cookie = [name, '=', encodeURIComponent(value), expires, path, domain, secure].join('');
        } else { // only name given, get cookie
            var cookieValue = null;
            if (document.cookie && document.cookie != '') {
                var cookies = document.cookie.split(';');
                for (var i = 0; i < cookies.length; i++) {
                    var cookie = cookies[i].trim();
                    // Does this cookie string begin with the name we want?
                    if (cookie.substring(0, name.length + 1) == (name + '=')) {
                        cookieValue = decodeURIComponent(cookie.substring(name.length + 1));
                        break;
                    }
                }
            }
            return cookieValue;
        }
    }
    
    /**
     * return reverse display status
     * @param state    value of display: element
     * @param iniState default state if you want to define
     * @return value of display: element
     */
    basejs.toggledState = function (state) {
        if( state == 'none' )
            return '';
        else if( state == 'block' )
            return 'none';
        else if( state == '' )
            return 'none';
        else
            return '';
    }
    
    basejs.getUserId = function(){
        var id = (document.getElementById("userId")) ? document.getElementById("userId").innerHTML : "";
        return id;
    }
    
    /**
     * change display status when called
     * and change cookie as it is
     * @param id       field id of which you want to toggle
     * @param parant   any string you identify this id 
     * @param iniState default state if you want to define
     */
    basejs.toggleById = function (id, parent) {
        var e = document.getElementById(id);
        var toggledStatus = basejs.toggledState(e.style.display);
        basejs.cookie(id+parent+"stateOfDisplay"+"-"+basejs.getUserId(), toggledStatus, {expires: 300, domain: location.host, secure: true});
        e.style.display = toggledStatus;
    }
    
    /**
     * change display status when on loaded as from cookie's value
     * @param id     field id of which you want to toggle
     * @param parant any string you identify this id 
     */
    basejs.setToggleById = function (id, parent) {
    	var e = document.getElementById(id);
        var status = basejs.cookie(id+parent+"stateOfDisplay"+"-"+basejs.getUserId());
        if(status && e) {
            e.style.display = status;
        }
    }
    
    /**
     * rapper for basejs.setToggleById
     * @param className 
     * @param parent 
     */ 
    basejs.setToggleMany = function (className, parent) { 
    	var elements = document.getElementsByClassName(className); 
        for (var i = 0; i < elements.length; i++) {
            var tmpid = elements[i].id;
            basejs.setToggleById(tmpid, parent);
        }
    }

    /**
     * HTML子要素追加メソッド
     * @param string tag    追加するHTMLタグの要素名
     * @param string id     追加するHTMLタグのid要素名
     * @param string name   追加するHTMLタグのname要素名
     * @param string type   追加するHTMLタグのtype要素名
     * @param string value  追加するHTMLタグのvalue要素名
     * @param object parent 追加するHTMLタグの親要素オブジェクト
     * @return void
     */
    basejs.addElement = function (tag, id, name, type, value, parent) {
        // 追加する子要素の作成
        var element = document.createElement(tag);
        element.id    = id;
        element.name  = name;
        element.type  = type;
        element.value = value;
        // 追加
        parent.appendChild(element);
    }
    
    /**
     * サーバに投げるタイプのsleep
     * @param {Object} sec
     */
    basejs.sleepOnServer = function(sec){
        var req;
        try {
            req = new ActiveXObject ("Microsoft.XMLHTTP");
        }catch(e){
            try {
                req = new XMLHttpRequest();
            }catch(e) {
                req = null;
            }
        }
        url = '?controller=api&action=sleep';
        req.open("post", url,true);
        req.setRequestHeader('Content-Type' ,'application/x-www-form-urlencoded; charset=UTF-8')
        req.send("sec=" + parseInt(sec));
    
        //post関数
        function result(){
            if(post.readyState == 4){
                return true;
            }   
        }
        return false;
    }


    /**
     * 引数１に渡したURLから、パラメータnameの値を取得する
     */
    basejs.getUrlParam = function ( url, name ) {
        name = name.replace(/[\[]/,"\\\[").replace(/[\]]/,"\\\]");
        var regexS = "[\\?&]"+name+"=([^&#]*)";
        var regex = new RegExp( regexS );
        var results = regex.exec( url );
        if( results == null ) {
            return "";
        } else {
            return results[1];
        }
    }
    /**
     * id@表示・非表示させたいアイテムのID    
     */

    basejs.cpUrl = function ( id ) {
        tMenu = document.getElementById(id).style;
    	if (tMenu.display == 'none'){
        	tMenu.display = "";
    	}else{
            tMenu.display = "none";
    	}
    }


}

/**
 * 指定したIDのリンク先へジャンプする関数
 * onclickで使用
 * @param {string} id
 */
function jumpIdLink(id){
    var e = document.getElementById(id);
    e.onclick='return false;';
    location.href=e.getAttribute('href');
    
}

/*
 * ポップアップ表示関数
 * 
 */


var showPop = { version:'1.0.0' };

showPop.myID = "pop";
var myX = 8;            //X
var myY = 16;           //Y
var type = "";

showPop.myGetBrowser = function (memo,contentType){
   type = contentType;
   if(type == "embedded"){
        showPop.myID = "popByshow";
   }else{
        showPop.myID = "pop";
   }
   
   myOP = (navigator.userAgent.indexOf("Opera",0) != -1)?1:0; //OP
   myN6 = document.getElementById;  // N6 or IE
   myIE = document.all;             // IE
   myN4 = document.layers;          // N4

   if (myOP){                          // OP?
      document.onmousemove = showPop.myMoveOP;
   }else if (myIE){                    // IE?
      document.onmousemove = showPop.myMoveIE;
   }else if (myN6){                    // N6?
      window.addEventListener("mousemove",showPop.myMoveN6,true);
   }else if (myN4){                    // N4?
      window.captureEvents(Event.MOUSEMOVE);
      window.onmousemove = showPop.myMoveN4;
   }
   var detail = document.getElementById(showPop.myID);
   detail.innerHTML = (type=="normal-outing" || type=="normal-facility") ? "表示処理中・・・" : memo;
   detail.style.display='block';
   
   if(type=="normal-outing" || type=="normal-facility"){
       if (window.XMLHttpRequest){
           xmlHttp = new XMLHttpRequest();
       }else{
           if (window.ActiveXObject){
               xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
          }else{
              xmlHttp = null;
          }
      }
      xmlHttp.open("GET", "?controller=schedule&action=getschedule&scheduleId="+memo, true);
      xmlHttp.send(null);
      xmlHttp.onreadystatechange = showPop.checkStatus;
   }
}
showPop.checkStatus = function(){
	if(xmlHttp.readyState == 4 && xmlHttp.status == 200){
		if (xmlHttp.responseText == 0){
		}else{
			data = document.getElementById(showPop.myID);
			if(data.style.display=='none'){
			}else{
				data.innerHTML = xmlHttp.responseText;
				data.style.display='block';
			}
		}
	}
}

showPop.myMoveOP = function (){ // OP
      myObj=document.getElementById(showPop.myID).style;
  if(type == "embedded"){
      height = document.getElementById("windowBox-embeddedContents-show").offsetHeight;
      myXByshow = -document.getElementById("windowBox-embeddedContents-show").offsetLeft+13;
      myYByshow = -document.getElementById("windowBox-embeddedContents-show").offsetTop;
      myObj.left = myXByshow + event.pageX + "px";
      myObj.top  = myYByshow + event.pageY + "px";
      if((myYByshow + event.pageY) > height - document.getElementById("popByshow").offsetHeight -2 ){
          tooUnder = (height - document.getElementById("popByshow").offsetHeight) - (myYByshow + event.pageY) -10;
          myObj.top = tooUnder + myYByshow + event.pageY + "px";
      }
      if((myXByshow + event.pageX) > document.getElementById("windowBox-embeddedContents-show").offsetWidth - document.getElementById("popByshow").offsetWidth -2){
          tooLeft = -document.getElementById("popByshow").offsetWidth - 30;
          myObj.left = tooLeft + myXByshow + event.pageX + "px";
      }
  }else{
      myObj.left = myX /*+ window.event.clientX*/ + event.pageX + "px";
      myObj.top  = myY /*+ window.event.clientY*/ + event.pageY + "px";
      if(myX + window.event.clientX > window.innerWidth - document.getElementById("pop").offsetWidth - 27){
          tooLeft = -document.getElementById("pop").offsetWidth - 16;
          myObj.left = tooLeft + myX + event.pageX + "px";
      }
      if(myY + window.event.clientY > window.innerHeight - document.getElementById("pop").offsetHeight -20){
          tooUnder = (window.innerHeight - document.getElementById("pop").offsetHeight) - window.event.clientY -20;
          myObj.top = tooUnder + myY + event.pageY + "px";
      }
  }
}

showPop.myMoveN6 = function (myEvent){  // N6
  myObj=document.getElementById(showPop.myID).style;
  if(type=="embedded"){
      height = document.getElementById("windowBox-embeddedContents-show").offsetHeight;
      myObj.left = myXByshow /*+myEvent.clientX*/ + myEvent.pageX + "px";
      myObj.top  = myYByshow /*+ myEvent.clientY*/ + myEvent.pageY + "px";
      if( (myYByshow + myEvent.pageY) > height - document.getElementById("popByshow").offsetHeight - 2){
          tooUnder = (height - document.getElementById("popByshow").offsetHeight) - (myYByshow + myEvent.pageY) -12;
          myObj.top = tooUnder + myYByshow + myEvent.pageY + "px";
      }
      if( (myXByshow + myEvent.pageX) > document.getElementById("windowBox-embeddedContents-show").offsetWidth - document.getElementById("popByshow").offsetWidth -15){
          tooLeft = -document.getElementById("popByshow").offsetWidth - 35;
          myObj.left = tooLeft + myXByshow + myEvent.pageX + "px";
      }
  }else{
      myObj.left = myX + myEvent.clientX + window.pageXOffset + "px";
      myObj.top  = myY + myEvent.clientY + window.pageYOffset + "px";
      if(myEvent.clientX > window.innerWidth - document.getElementById("pop").offsetWidth -27){
          tooLeft = -document.getElementById("pop").offsetWidth -16;
          myObj.left = tooLeft + myX + myEvent.clientX + window.pageXOffset + "px";
      }
      if(myEvent.clientY > window.innerHeight-document.getElementById("pop").offsetHeight -35){
          tooUnder = (window.innerHeight - document.getElementById("pop").offsetHeight) - myEvent.clientY - 40;
          myObj.top = tooUnder + myY + myEvent.clientY + window.pageYOffset + "px";
      }
  }
}

showPop.myMoveIE = function (){ // IE
  myObj=document.all[showPop.myID].style;
  if(type=="embedded"){
      height = document.getElementById("windowBox-embeddedContents-show").offsetHeight;
      width = document.getElementById("windowBox-embeddedContents-show").offsetWidth;
      myObj.left = myXByshow + window.event.clientX + document.documentElement.scrollLeft + "px";
      myObj.top  = myYByshow + window.event.clientY + document.documentElement.scrollTop + "px";
      if((myYByshow + window.event.clientY + document.documentElement.scrollTop) > height - document.getElementById("popByshow").offsetHeight){
          tooUnder = (height - document.getElementById("popByshow").offsetHeight) - (myYByshow + window.event.clientY + document.documentElement.scrollTop) - 8;
          myObj.top = tooUnder + myYByshow + window.event.clientY + document.documentElement.scrollTop + "px";
      }
      if((myXByshow + window.event.clientX + document.documentElement.scrollLeft) > width - document.getElementById("popByshow").offsetWidth - 5){
          tooLeft = -document.getElementById("popByshow").offsetWidth - 30;
          myObj.left = tooLeft + myXByshow + window.event.clientX + document.documentElement.scrollLeft + "px";
      }
  }else{
      myObj.left = myX + window.event.clientX + document.documentElement.scrollLeft + "px";
      myObj.top  = myY + window.event.clientY + document.documentElement.scrollTop + "px";
      if(window.event.clientX > document.documentElement.clientWidth - document.getElementById("pop").offsetWidth -16){
          tooLeft = -document.getElementById("pop").offsetWidth - 16;
          myObj.left = tooLeft + myX + window.event.clientX + document.documentElement.scrollLeft + "px";
      }
      if(window.event.clientY > document.documentElement.clientHeight - document.getElementById("pop").offsetHeight -20){
          tooUnder = (document.documentElement.clientHeight - document.getElementById("pop").offsetHeight) - window.event.clientY - 20;
          myObj.top = tooUnder + myY + window.event.clientY + document.documentElement.scrollTop + "px";
      }
  }
}
showPop.myMoveN4 = function (myEvent){ // N4
  myObj=document[showPop.myID];
  myObj.left = myX + myEvent.x ;
  myObj.top  = myY + myEvent.y ;
}

var pop;
showPop.popdown = function () {
  if(type == "embedded"){
    pop = document.getElementById("popByshow");
  }else{
    pop = document.getElementById("pop");
  }
  pop.style.display='none';
}

showPop.reloadMyX = function (){
  myXByshow = -document.getElementById("windowBox-embeddedContents-show").offsetLeft+20;
  myYByshow = -document.getElementById("windowBox-embeddedContents-show").offsetTop-10;
}


