function addEvent(obj, evType, fn)
{
	if (obj.addEventListener){
		obj.addEventListener(evType, fn, false);
		return true;
	} else if (obj.attachEvent){
		var r = obj.attachEvent("on"+evType, fn);
		return r;
	} else {
		return false;
	}
}


function getRequest()
{
	var get = new Object();

	if(location.search.length > 1){
		var ret = location.search.substr(1).split("&");
		for(var i = 0; i < ret.length; i++){
			var r = ret[i].split("=");
			get[r[0]] = r[1];
		}
	}

	return get;
}


function setMailAdr(dist, adr)
{
	var a = document.getElementById(dist);
	adr = adr.match(/./g).reverse().join('');

	a.href = ':otliam'.match(/./g).reverse().join('') + adr;
	a.innerHTML = adr;
}


function putRandamBanner(dist)
{
	var httpobj;

	//XMLファイル名
	var XMLfile_name = "http://www.e-obuse.com/r_banner/random_banner.xml";

	try{
		httpobj = createHttpRequest();
		httpobj.open("GET", XMLfile_name, false);
		httpobj.send(null);

	}catch(ex){
		return;
	}

	var xmlDoc = httpobj.responseXML;
	var banners = xmlDoc.documentElement.getElementsByTagName('banner');

	var max_length = banners.length;

	//要素が無い場合には関数を抜ける
	if(! max_length){
		return;
	}

	//要素数を使用して乱数を発生
	var wishedNumber = Math.floor(Math.random()*max_length);

	var title = banners[wishedNumber].getElementsByTagName('title')[0].firstChild.nodeValue;
	var link = banners[wishedNumber].getElementsByTagName('link')[0].firstChild.nodeValue;
	var target = banners[wishedNumber].getElementsByTagName('link')[0].getAttribute("target");
	var mode = banners[wishedNumber].getElementsByTagName('mode')[0].firstChild.nodeValue;
	var no = banners[wishedNumber].getElementsByTagName('no')[0].firstChild.nodeValue;
	var url = banners[wishedNumber].getElementsByTagName('url')[0].firstChild.nodeValue;
	var img = banners[wishedNumber].getElementsByTagName('img')[0].firstChild.nodeValue;

	//htmlタグの作成
	var text = "<a href='" + link + "?" + mode + "&" + no + "&" + url + "' target='" + target + "'><img src='" + img + "' border='0' alt='" + title +"'></a>";

	//現在のURL
	var now_url = location.protocol + "//" + location.hostname + location.pathname;

	var target_url = link + "?mode=disp&" + no;

	var img_tag = "<IMG src='"+ target_url +"' border='0'>";

	//画像の表示
	document.getElementById(dist).innerHTML = text + img_tag;
}


function createHttpRequest()
{
	//win IE用
	if(window.ActiveXObject){
		try {
			//MSXML2以降用
			return new ActiveXObject("Msxml2.XMLHTTP");
		} catch (e) {
			try{
				//旧MSXML用
				return new ActiveXObject("Microsoft.XMLHTTP");
			} catch (e2) {
				return null;
			}
		}
	}else if(window.XMLHttpRequest){
		//Win IE以外のXMLHttpRequestオブジェクト実装ブラウザ用
		return new XMLHttpRequest();
	}else{
		return null;
	}
}


function scrollToElement(dist)
{
	var ele = document.getElementById(dist);
	var eX = 0;
	var eY = 0;

	while(ele != null){
		eX += ele.offsetLeft;
		eY += ele.offsetTop;
		ele = ele.offsetParent;
	}

	eY -= 5;
	window.scrollTo(eX, eY);
	return;

	var y = document.documentElement.scrollTop || document.body.scrollTop;
	var h = document.documentElement.clientHeight || window.innerHeight;
	
	var to = Math.ceil(y + (eY-y)/5);
	
	if(to < eY && to < (h-10)){
		window.scrollTo(eX ,to);
		window.setTimeout(function(){ scrollToElement(dist); }, 50);
	}
}

function setFocus(dist)
{
	addEvent(window, 'load', function(){
				 var fdist = document.getElementById('f' + dist);
				 fdist.focus();

				 scrollToElement('e' + dist);

				 if(fdist.type == 'text' || fdist.type == 'textarea'){
					 if(fdist.createTextRange){
						 var range = fdist.createTextRange();
						 range.move('character', fdist.value.length);
						 range.select();
					 }else if(fdist.setSelectionRange){
						 fdist.setSelectionRange(fdist.value.length, fdist.value.length);
					 }
				 }
			 });
}

function toHankaku(src, exc) {
  var str = new String;
  var len = src.length;
  for (var i = 0; i < len; i++) {
    var c = src.charCodeAt(i);
    if (exc.indexOf(src.charAt(i)) > -1) {
      str += src.charAt(i); /* 除外 */
    } else if (c >= 65281 && c <= 65374 && c != 65340) {
      str += String.fromCharCode(c - 65248);
    } else if (c == 8217) {
      str += String.fromCharCode(39);
    } else if (c == 8221) {
      str += String.fromCharCode(34);
    } else if (c == 12288) {
      str += String.fromCharCode(32);
    } else if (c == 65507) {
      str += String.fromCharCode(126);
    } else if (c == 65509) {
      str += String.fromCharCode(92);
    } else {
      str += src.charAt(i);
    }
  }
  return str;
}


/* Levenshtein Distance */
function lvnDistance(str1, str2)
{
	var d = [];
	var i1, i2, cost;

	for(i1=0; i1<=str1.length; i1++){
		d[i1] = [];
		d[i1][0] = i1;
	}

	for(i2=0; i2<=str2.length; i2++)
		d[0][i2] = i2;

	for(i1=1; i1<=str1.length; i1++){
		for(i2=1; i2<=str2.length; i2++){
			cost = str1.charAt(i1-1) == str2.charAt(i2-1) ? 0 : 1;
			d[i1][i2] = Math.min(Math.min(d[i1-1][i2]+1, d[i1][i2-1]+1), d[i1-1][i2-1]+cost);
		}
	}

	return d[str1.length][str2.length];
}

function checkMailAdr(adr, err)
{
	var msg = (function(){
				   var domain_list = ['yahoo.co.jp','ocn.ne.jp','ybb.ne.jp','plala.or.jp','dion.ne.jp','hotmail.com','nifty.com','biglobe.ne.jp','hotmail.co.jp','so-net.ne.jp','home.ne.jp','goo.ne.jp','eonet.ne.jp','zaq.ne.jp','gmail.com','odn.ne.jp','infoseek.jp','excite.co.jp','aol.com','nifty.ne.jp','tnc.ne.jp','t-com.ne.jp','docomo.ne.jp','email.ne.jp','ezweb.ne.jp','msn.com','enjoy.ne.jp','u01.gate01.com','dti.ne.jp','tiki.ne.jp','nexyzbb.ne.jp','sannet.ne.jp','bai.ne.jp','megaegg.ne.jp','ttcn.ne.jp','kcn.ne.jp','gyao.ne.jp','hi-ho.ne.jp','aitai.ne.jp','katch.ne.jp','infoweb.ne.jp','ccnw.ne.jp','livedoor.com','vodafone.ne.jp','tcat.ne.jp','live.jp','inter7.jp','janis.or.jp','cty-net.ne.jp','em-net.ne.jp','ab.auone-net.jp','ztv.ne.jp','thn.ne.jp','asahi-net.or.jp','lcv.ne.jp','mac.com','fiberbit.net','starcat.ne.jp','canvas.ne.jp','oct-net.ne.jp','cncm.ne.jp','point.ne.jp','c-able.ne.jp','cyberhome.ne.jp','ctktv.ne.jp','csc.jp','pdx.ne.jp','pikara.ne.jp','384.jp','ctt.ne.jp'];

				   if(adr == '') return '';

				   adr = toHankaku(adr, '');

				   if(adr.match(/@.*,/))
					   return '@ の右側に <strong>,</strong> (コンマ) が入力されています。';

				   if(adr.match(/@.*\.j$/))
					   return '<strong>' + adr + 'p' + '</strong> ではないですか？';

				   if(adr.match(/@.*\.p$/))
					   return '<strong>' + adr.replace(/p$/, "jp") + '</strong> ではないですか？';

				   if(adr.match(/@.*\.cojp$/))
					   return '<strong>' + adr.replace(/cojp$/, "co.jp") + '</strong> ではないですか？';

				   if(adr.match(/@.*\.nejp$/))
					   return '<strong>' + adr.replace(/nejp$/, "ne.jp") + '</strong> ではないですか？';

				   if(adr.match(/@.*\.co$/))
					   return '<strong>' + adr.replace(/co$/, "com") + '</strong> ではないですか？';

				   if(!adr.match(/^([a-z0-9_]|\-|\.|\+)+@(([a-z0-9_]|\-)+\.)+[a-z]{2,6}$/)){
					   return 'メールアドレスの形式が正しくありません。';
				   }

				   var d = adr.split('@')[1].split('.').reverse();
				   var domain = d[1] + '.' + d[0];

				   if(d[2])
					   domain = d[2] + '.' + domain;

				   var rec;
				   var limit = 3;

				   for(var i=0; i<domain_list.length; i++){
					   var ld = lvnDistance(domain, domain_list[i]);

					   if(ld == 0){
						   return '';
					   }
					   else if(ld < limit){
						   limit = ld;
						   rec = domain_list[i];
					   }
				   }

				   if(rec)
					   return 'もしかして <strong>' + adr.replace(domain, rec) + '</strong>';
				   else
					   return '';
			   })();


	err = document.getElementById(err);

	if(msg){
		err.innerHTML = msg;
		err.style.display = 'block';
	}
	else{
		err.style.display = 'none';
		err.innerHTML = '';
	}
}


/* yubin2jsonp */
function Yubin2JSONP(root){
	this.root = root;
	this.parse = function(yubin){
		if (! yubin.match(/[0-9]{7}/) ) return;
		var yubin3 = yubin.substr(0,3);
		var script = document.createElement('script');
		script.id = this.root + yubin3 + '/' + yubin + '.js';
		script.charset = 'UTF-8';
		script.src = script.id;
		document.lastChild.appendChild(script);
		// document.lastChild.removeChild(script);
	};
	return this;
}

var yubin2jsonp = new Yubin2JSONP('https://www22.jpsecure.jp/~mcsp/yubin2jsonp/');

function parse_yubin2jsonp(json){
}

function yubin2adr(yubin, dist)
{
	if(yubin.length < 7)
		return;

	yubin = toHankaku(yubin, '');

	if(yubin.match(/^\d{3}\-?\d{4}$/)){
		dist = document.getElementById(dist);

		var bisy = 'ご住所を検索中です・・・';
		dist.value = bisy;

		parse_yubin2jsonp = function(json){
			dist.value = json[0].join('');
		};

		yubin2jsonp.parse(yubin.replace('-', ''));
	}
}

/* disableSubmit */
var disableSubmit ={
    arg: {},
    timer: 1000,

    init: function(arg, timer){
        if (typeof(arg) == "object") this.arg = arg;
        if (timer) this.timer = timer;
        this.addEvent(window, 'load', this.setEvent(), false);
        this.addEvent(window, 'unload', this.setEnable(), false);
    },

    addEvent: function(elem, eventType, fn, useCapture){
        if (elem.addEventListener){
            elem.addEventListener(eventType, fn, useCapture);
            return true;
        }
        else if (elem.attachEvent){
            var r = elem.attachEvent('on' + eventType, fn);
            return r;
        }
        else{
            elem['on'+eventType] = fn;
        }
    },

    setEvent: function(){
        var self = this;
        return function(){
            if (self.arg.name){
                for (var i = 0; i < self.arg.name.length; i++){
                    var elem = document.getElementsByName(self.arg.name[i]);
                    if (elem){
                        for (var j = 0; j < elem.length; j++){
                            self.addEvent(elem[j], 'click', self.setDisable(elem[j]), false);
                        }
                    }
                }
            }
            if (self.arg.id){
                for (var i = 0; i < self.arg.id.length; i++){
                    var elem = document.getElementById(self.arg.id[i]);
                    if (elem){
                        self.addEvent(elem, 'click', self.setDisable(elem), false);
                    }
                }
            }
        };
    },

    // history.back() 対策でページアウトするするときにボタンを再度enable化しておく
    setEnable: function(){
        var self = this;
        return function(){
            if (self.arg.name){
                for (var i = 0; i < self.arg.name.length; i++){
                    var elem = document.getElementsByName(self.arg.name[i]);
                    if (elem){
                        for (var j = 0; j < elem.length; j++){
                            elem[j].disabled = false;
                        }
                    }
                }
            }
            if (self.arg.id){
                for (var i = 0; i < self.arg.id.length; i++){
                    var elem = document.getElementById(self.arg.id[i]);
                    if (elem){
                        elem.disabled = false;
                    }
                }
            }
        };
    },

    // 二度押し防止対策でボタンを 1mm-sec 後にdisable化しておく。これで hidden データ作成しなくても get/post が正常処理される
    setDisable: function(elem){
        var self = this;
        var func = elem.onclick;
        elem.onclick = "";
        return function(evt){
            var elem = evt.srcElement || evt.target;
            window.setTimeout(function(){ elem.disabled = true; }, 1);
            if (func) window.setTimeout(function(){ func(); }, 2);
            window.setTimeout(function(){ elem.disabled = false; }, self.timer);
        };
    }
};

