// JavaScript

$(function(){
	Rollover.initrolloverimages();
	
	if (!window.console)
		window.console = {log:function(){}};
	
	// 一覧表を行ごとに色変え
	$('table.list').each(function(){
		if ($(this).hasClass('no-stripe')) {
			return;
		}
		var i=0;
		$('tbody tr', this).each(function(){
			if (i++%2) {
				$(this).addClass('colored');
			}
		});
	});
	
	// {$ROOT}にあたるパスを取得
	$(':hidden[name=root]').each(function(){
		Ut.ROOT = $(this).val();
	});

	if ($('a[rel=lightbox]').length ) {
	    $('a[rel=lightbox]').lightBox();
	}

	// 画像のロールオーバー
	$('a.jacket img').mouseover(function(){
		$(this).css('opacity', 0.8);
	})
	.mouseout(function(){
		$(this).css('opacity', 1);
	});

	// 必須項目の表示を日本語に
	$('form.input span.required').each(function(){
		$(this).parent().append('<span class="required_jp">&nbsp;</span>');
		$(this).remove();
	});

	// 検索キーワードをクリックしたときの挙動
	$('#leftmenu ul.keywords a').click(function(){
		$('#keyword_inputed').val($(this).text());
		$('#keywordsearchform').submit();
		return false;
	});

});



/**
 * ポップアップウィンドウクラス
 * 
 * 使用例 (1)<br />
 * var pop1 = new PopupWindow('popup.html');
 * pop1.open({width:500,height:400});
 *
 * 使用例 (2)<br />
 * <a href="popup.html" onclick="(new PopupWindow(this.href)).open({width:200,height:'max'});">open</a>
 * 
 */
var PopupWindow = function(url) {
	if (url)
		this.url = url;
	this.popupwindow = null;
	this.scrollbars = 'yes';
	this.resizable = 'yes';
	this.copyhistory = 'yes';
	this.width = null;
	this.height = null;
	this.left = 'center';
	this.top = 'center';
};

PopupWindow.prototype.open = function(argv) {
	
	var option = {};
	
	if (!argv)
		argv = {};
	
	var lurl = (argv.url) ? argv.url : this.url;
	
	option.width = (argv.width) ? argv.width : this.width;
	option.height = (argv.height) ? argv.height : this.height;
	
	if (option.width && option.width == 'max') 
		option.width = screen.width;
	if (option.height && option.height == 'max') 
		option.height = screen.height;
	
	option.scrollbars = (argv.scrollbars) ? argv.scrollbars : this.scrollbars;
	option.resizable = (argv.resizable) ? argv.resizable : this.resizable;
	option.copyhistory = (argv.copyhistory) ? argv.copyhistory : this.copyhistory;
	
	option.left = (argv.left!=undefined) ? argv.left : this.left;
	if (option.left == 'center')
		option.left = (!isNaN(option.width)) ? (screen.width - option.width) / 2 : null;
		
	option.top = (argv.top!=undefined) ? argv.top : this.top;
	if (option.top == 'center')
		option.top = (!isNaN(option.height)) ? (screen.height - option.height) / 2 : null;
	
	if (option.left)
		option.screenX = option.left;
	if (option.top)
		option.screenY = option.top;
	
	if (this.popupwindow && !this.popupwindow.closed) {
		this.popupwindow.close();
	}
	
	var optionStr = '';
	for (var key in option) {
		if (option[key]!=null)
			optionStr += key+'='+option[key]+',';
	}
	
	// Output to console
	if (window.console) {
		window.console.log(optionStr);
		window.console.log('popup::'+lurl);
	}
	
	this.popupwindow = window.open(lurl, PopupWindow.getNewWindowName(), optionStr);
	return this.popupwindow;
	
};

PopupWindow.sequence = 0;
PopupWindow.getNewWindowName = function(){
	return 'win'+(PopupWindow.sequence++);
};


/**
 * ロールオーバー
 *
 * img要素のclass属性に「rollover」を指定すると、指定されたファイル名に「_over」の接尾語をつけたファイル名がロールオーバーで入れ替わる
 * 
 * 使用例
 * <img src="images/image.jpg" alt="" class="rollover" />
 *
 */
var Rollover = function () {};

Rollover.suffix = '_over';
Rollover.preloadimages = [];
Rollover.overflag = [];

Rollover.overimage = function (obj) {
	if (obj.src && obj.src.indexOf('.') != -1) {
		obj.src = Rollover.getrolloverimagefile(obj.src);
		this.overflag.push(obj);
	}
}
	
Rollover.normalimage = function (obj) {
	var flag = false;
	for (var i in this.overflag) {
		if (this.overflag[i] == obj) {
			flag = true;
			this.overflag[i] = null;
			break;
		}
	}
	if (flag && obj.src && obj.src.indexOf('.') != -1) {
		obj.src = Rollover.getoriginalimagefile(obj.src);
	}
}
	
Rollover.getrolloverimagefile = function (path) {
	var filename = path.substring(0, path.lastIndexOf('.'));
	var extention = path.substring(path.lastIndexOf('.'), path.length);
	return filename + Rollover.suffix + extention;
}
	
Rollover.getoriginalimagefile = function (path) {
	var filename = path.substring(0, path.lastIndexOf('.')-Rollover.suffix.length);
	var extention = path.substring(path.lastIndexOf('.'), path.length);
	return filename + extention;
}

Rollover.initrolloverimages = function() {
	var images = document.getElementsByTagName('img');
	for (var i=0; i<images.length; i++) {
		var classValue = null;
		if (images[i].getAttribute('className'))
			classValue = images[i].getAttribute('className');
		else if (images[i].getAttribute('class'))
			classValue = images[i].getAttribute('class');
		if (classValue != null && classValue.indexOf('rollover') != -1 && images[i].src && images[i].src.indexOf('_over.')==-1) {
			images[i].onmouseover = function() {
				Rollover.overimage(this);
			};
			images[i].onmouseout = function() {
				Rollover.normalimage(this);
			};
			Rollover.preloadimages[i] = new Image();
			Rollover.preloadimages[i].src = Rollover.getrolloverimagefile(images[i].src);
		}
	}
};



/**
 * Utilities
 */
var Ut = function(){};

Ut.KEY_ESC = 27;
Ut.ROOT = null;


/**
 * PHP版 nl2br の移植
 */
Ut.nl2br = function(str){
	str = escape(str);
	var escapedBreak = escape('<br />');
	str = str.replace(/%0D%0A/g, escapedBreak);
	str = str.replace(/%0A/g, escapedBreak);
	str = str.replace(/%0D/g, escapedBreak);
	return unescape(str);
};


/**
 * PHP版 htmlspecialchars の移植
 */
Ut.htmlspecialchars = function(str){
	str = str.replace(/&/g, '&');
	str = str.replace(/</g, '&lt;');
	str = str.replace(/>/g, '&gt;');
	str = str.replace(/"/g, '"');
	return str;
};


/**
 * 要素を取得
 * @param string elementname 要素名
 * @param Object 属性
 * @return Object
 */
Ut.getElement = function(elementname, attrs){
	var element = $(document.createElement(elementname));
	for (var label in attrs) {
		if (label=='class')
			element.addClass(attrs[label]);
		else if (label=='text')
			element.text(attrs[label]);
		else
			element.attr(label, attrs[label]);
	}
	return element;
};

/**
 * モーダル
 */
var Modal = function(){};

Modal.modalwindow = null;

/**
 * 背景を落とす
 * 
 * マットをクリックしたときに閉じるようにするには、次のようにオプションを渡す。
 * Modal.set({clickable:true});
 */
Modal.set = function(options) {

	// 黒背景を作成
	var blackmat = $('<div class="blackmat"></div>');
	$('body').prepend(blackmat);
	blackmat
		.css('width', $('body').width())
		.css('height', $(window.document).height());
	
	if (options && options.clickable) {
		blackmat.one('click', function(){
			if (options && options.clicked) {
				options.clicked();
			}
			Modal.clear();
			$(this).remove();
		});
	}
};


/**
 * モーダルでウィンドウで表示する
 *
 * オプションでは、要素を指定することで要素の下にウィンドウを表示できる。
 * Moddal.set(source, {below:'div.selectedelement'});
 */
Modal.window = function(source, option){
	
	// 背景がそのままの場合は背景を落とす
	if (!$('div.blackmat').length) {
		if (options && options.clicked) {
			Modal.set({clickable:true, clicked:options.clicked});
		} else {
			Modal.set();
		}
	}
	
	// すでにある場合には削除
	if ($('div.modalwindow').length) {
		$('div.modalwindow').remove();
	}
	
	// モーダルウィンドウを作成
	Modal.modalwindow = $('<div class="modalwindow"></div>');
	Modal.modalwindow.append(source);
	Modal.modalwindow.css('z-index', 100);
	$('body').append(Modal.modalwindow);
	
	Modal.resetPosition((option && option.below));
	
	return Modal.modalwindow;
};

Modal.clear = function() {
	$('div.modalwindow').remove();
	$('div.blackmat').remove();
};

Modal.resetPosition = function(below){
	var scrolltop = 0;
	if (document.documentElement && document.documentElement.scrollTop) {
		scrolltop = document.documentElement.scrollTop;
	} else {
		scrolltop = $('body').scrollTop();
	}
	
	var windowheight = 0;
	if (document.documentElement && document.documentElement.clientHeight) {
		windowheight = document.documentElement.clientHeight;
	} else if (window.innerHeight) {
		windowheight = window.innerHeight;
	}
	
	// 特定の要素の下に表示するとき
	if (below) {
		if (!option.below.jQuery) {
			option.below = $(option.below);
		}
		var offset = option.below.offset();
		var left = offset.left;
		if (left+Modal.modalwindow.width()+10 > $('body').width()) {
			left = $('body').width() - Modal.modalwindow.width() - 10;
		}
		
		var top = offset.top+option.below.height()+8;
		if (top+Modal.modalwindow.height()+10 > scrolltop+windowheight) {
			top = offset.top - Modal.modalwindow.height()-10;
		}
		
		Modal.modalwindow.css('top', top);
		Modal.modalwindow.css('left', left);
	}
	
	// 中央に表示するとき
	else {
		
		if (windowheight) {
			Modal.modalwindow.css('top', scrolltop+(windowheight-Modal.modalwindow.height())/2);
		} else {
			Modal.modalwindow.css('top', scrolltop+20);
		}
		Modal.modalwindow.css('left', ($('body').width()-Modal.modalwindow.width())/2);
		
	}
};


var DateTimePicker = function(){};
DateTimePicker.between = function(date){
	var now = new Date();
	now.setHours(0);
	now.setMinutes(0);
	var splited = date.split('-');
	var selected = new Date(splited[0], splited[1]-1, splited[2]);
	var between = Math.ceil((selected.getTime()-now.getTime())/60/60/24/1000);
	return between;
}