/* for IE6 */
try {
document.execCommand('BackgroundImageCache', false, true);
} catch(e) {}

function isIE()
{
	if(navigator.appName.indexOf("Microsoft") != -1)
		return true;
	else
		return false;
}

function isGecko()
{
    if(navigator){
        if(navigator.userAgent){
            if(navigator.userAgent.indexOf("Gecko/") != -1){
                return true;
            }
        }
    }

    return false;
}

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;
	}
}

var addListener = (function() {
    if ( window.addEventListener ) {
        return function(el, type, fn) {
            el.addEventListener(type, fn, false);
        };
    } else if ( window.attachEvent ) {
        return function(el, type, fn) {
            var f = function() {
                fn.call(el, window.event);
            };
            el.attachEvent('on'+type, f);
        };
    } else {
        return function(el, type, fn) {
            el['on'+type] = fn;
        };
    }
})();

//cookie
function getCookie(item) {
    var i, index, arr;
    arr = document.cookie.split(";");
    for(i = 0; i < arr.length; i++) {
        index = arr[i].indexOf("=");
        //2番目は頭がスペースのとき
        if(arr[i].substring(0, index) == item ||
           arr[i].substring(0, index) == " " + item)
            return arr[i].substring(index + 1);
    }
    return "";
}

function setCookie(item, value) {
    document.cookie = item + "=" + value + ";path=/";// + ";expires=" + d;
}


function RollOver (obj,val) {
  obj.src = val;
}


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 backToTop()
{
	var x1 = x2 = x3 = 0;
	var y1 = y2 = y3 = 0;
	if (document.documentElement) {
		x1 = document.documentElement.scrollLeft || 0;
		y1 = document.documentElement.scrollTop || 0;
	}
	if (document.body) {
		x2 = document.body.scrollLeft || 0;
		y2 = document.body.scrollTop || 0;
	}
	x3 = window.scrollX || 0;
	y3 = window.scrollY || 0;
	var x = Math.max(x1, Math.max(x2, x3));
	var y = Math.max(y1, Math.max(y2, y3));
	window.scrollTo(Math.floor(x / 2), Math.floor(y / 3));
	if (x > 0 || y > 0) {
		window.setTimeout("backToTop()", 25);
	}
}

/* setToTop */
addEvent(window, 'load', function(){
			 var dist = document.getElementById('totop');
			 
			 if(dist){
				 var e = dist;
				 var x = 0;
				 var y = 0;

				 while(e != null){
					 x += e.offsetLeft;
					 y += e.offsetTop;
					 e = e.offsetParent;
				 }

				 var h = document.documentElement.clientHeight || window.innerHeight;
				 
				 if(y > h){
					 dist.innerHTML = '<a href="javascript:void(0);" onclick="backToTop(); return false;">▲ページトップ</a>';
				 }
				 else{
					 dist.innerHTML = '';
				 }
			 }
		 });


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 setMailAdr(adr, dist, f)
{
	var a = document.getElementById(dist);
	var n = adr.match(/./g).reverse().join('');
	var m = String.fromCharCode(0X40);
	var d = location.hostname;
	a.href = ':otliam'.match(/./g).reverse().join('') + n + m + d;

	if(f)
		a.innerHTML = n + m + d;
}


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('-', ''));
	}
}

/* font size */
addEvent(window, 'load', function(){
			 var dist = document.getElementById('font_size');
			 var fsize = getCookie('fsize') || 's';

			 if(dist){
				 dist.style.display = 'block';

				 var setFontSize = function(size){
					 document.body.className = 'fsize_' + size;
					 dist.className = 'fsize_bg_' + size;
					 setCookie('fsize', size);
				 };

				 setFontSize(fsize);

				 var a = dist.getElementsByTagName('a');

				 for(var i=0; i < a.length; i++){
					 a[i].onclick = function(){
						 setFontSize(this.className.slice(-1));
					 };
				 }
			 }
		 });


/* 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);
        };
    }
};


/*--------------------------------------------------------------------------*
 *  
 *  smartRollover
 *  
 *--------------------------------------------------------------------------*/
var yomotsuRollover = {
	
	preLoad : {},
	main : function() {
		var img = document.images, i, preLoadImg;
		
		for (i = 0; i <img.length; i++) {
			if ((img[i].src.match(/.*_off\./))||(img[i].style.filter)){
				
				var preLoadImg = new Image;
				preLoadImg.src = img[i].src.replace('_off.', '_on.');
				yomotsuRollover.preLoad[img[i].src] = preLoadImg.src;

				img[i].onmouseover = yomotsuRollover.over;
				img[i].onmouseout  = yomotsuRollover.out;
			}
		}
	},
	
	over : function() {
		var imgSrc, preLoadImgSrc;
		if((this.style.filter)&&(this.style.filter.match(/_off\.png/))){//(IE5.5-6 && png)
			imgSrc = (this.style.filter.match(/src=.*\)/)+"").slice(5,-2);
			preLoadImgSrc = yomotsuRollover.preLoad[imgSrc];
			this.style.filter = this.style.filter.replace(imgSrc, preLoadImgSrc);
		}
		else{
			this.src = yomotsuRollover.preLoad[this.src];
		}
	},

	out : function(){
		if((this.style.filter)&&(this.style.filter.match(/_on\.png/))){//(IE5.5-6 && png)
			this.style.filter = this.style.filter.replace('_on.png', '_off.png');
		}
		else{
			this.src = this.src.replace('_on.', '_off.');
		}
	},

	addEvent : function(){
		try {
			window.addEventListener('load', this.main, false);
		} catch (e) {
			window.attachEvent('onload', this.main);
		}
	}
}

yomotsuRollover.addEvent();

