/* ----------------------------------------------------------------------------
 * common.pjs
 * 共通ベースjavascript
 * ※ 一部の関数はprototype.jsの機能を使用しています
 * 
 * CREATED:			2009.02.10
 * LAST MODEFIED:	2009.12.07
 * 
 * Copyright (C) 2009 ACTOR,co,ltd. Allrights Reserved.
 * ------------------------------------------------------------------------- */
var APP_URL = "/";

if (typeof jQuery != "undefined")
{
	$j = jQuery.noConflict();
}

Event.observe(window, 'load', init);

function init()
{
	initialize_hover();
}

function initialize_hover()
{
	var imgs1 = $A($$("img.hover"));
	var imgs2 = $A($$("input.hover"));
	imgs = imgs1.concat(imgs2);
	
	imgs.each(function(v, i)
	{
		new ImgHover(v);
	});
}

var ImgHover = Class.create(
{
	initialize: function(dom)
	{
		this.dom = dom;
		this.normal_src = dom.src;
		this.hover_src = dom.src.sub(/^(.+)\.(.+)$/, '#{1}_ov.#{2}');
		
		Event.observe(this.dom, 'mouseover', this.onmouseover.bind(this));
		Event.observe(this.dom, 'mouseout', this.onmouseout.bind(this));
	},
	
	onmouseover: function ()
	{
		this.dom.src = this.hover_src;
	},
	
	onmouseout: function ()
	{
		this.dom.src = this.normal_src;
	}
});

function add_bookmark(id)
{
	var ajax = new Ajax.Request(
		APP_URL + 'add_bookmark.php',
		{
			method: 'post',
			postBody: "id=" + id,
			onSuccess: add_bookmark_on_success,
			onFailure: add_bookmark_on_failure
		}
	);
}

function add_bookmark_on_success(xmlobj)
{
	var json = eval('(' + xmlobj.responseText + ')');
	
	if (json.error_msg == "")
	{
		alert("検討中フォルダに追加しました");
		refresh_bookmark();
	}
	else
	{
		alert(json.error_msg);
	}
}

function add_bookmark_on_failure(xmlobj)
{
	alert("大変申し訳ございません。検討中フォルダへ登録中にエラーが発生し登録できませんでした。\nしばらくたってからやり直してください。");
}

function refresh_bookmark()
{
	// ちょっとエラー処理とか、さぼり。
	new Ajax.Updater('bookmark_container', APP_URL + 'bookmark_side.html');
}

function bookmark_all_check(check)
{
	var c = $A($$("input.bm_del_check"));
	c.each(function(v, i)
	{
		v.checked = check;
	});
}

function del_bookmark(id)
{
	if (id)
	{
		_del_bookmark(id);
	}
	else
	{
		_del_bookmark_checked();
	}
}

function _del_bookmark(id)
{
	if (!confirm("この求人を検討中フォルダから削除してもよろしいですか？"))
	{
		return;
	}
	
	__del_bookmark([id]);
}

function _del_bookmark_checked()
{
	var ids = new Array();
	
	var c = $A($$("input.bm_del_check"));
	c.each(function(v, i)
	{
		if (v.checked)
		{
			ids.push(v.value);
		}
	});
	
	if (ids.length == 0)
	{
		alert("削除したい求人をチェックしてください。");
		return;
	}
	
	if (!confirm("チェックした求人を検討中フォルダから削除してもよろしいですか？"))
	{
		return;
	}
	
	__del_bookmark(ids);
}

function __del_bookmark(ids)
{
	$("bm_ids").value = ids.join(",");
	$("bm_f").submit();
}

function do_entry()
{
	var ids = new Array();
	
	var c = $A($$("input.bm_del_check"));
	c.each(function(v, i)
	{
		if (v.checked)
		{
			ids.push(v.value);
		}
	});
	
	if (ids.length == 0)
	{
		alert("一括応募する求人にチェックしてください。");
		return;
	}
	
	$("bm_entry_ids").value = ids.join(",");
	$("bm_entry").submit();
}


// Double Select
// とりあえず給与選択フォームだけで使用
var DSelect = Class.create(
{
	initialize: function(id_sel1, id_sel2, opt2, default_opt2, event_function)
	{
		this.id_sel1 = id_sel1;
		this.id_sel2 = id_sel2;
		this.opt2 = opt2;
		
		this.create_sel2($F(this.id_sel1));
		$(this.id_sel2).value = default_opt2;
		
		Event.observe(this.id_sel1, 'change', this.onchange_sel1.bind(this));
		
		
		if (event_function != undefined)
		{
			this.event_function = event_function;
			Event.observe(this.id_sel2, 'change', this.onchange_sel2.bind(this));
		}
	},
	
	onchange_sel1: function()
	{
		this.create_sel2($F(this.id_sel1));
	},
	
	onchange_sel2: function()
	{
		this.event_function(this.id_sel1, this.id_sel2);
	},
	
	clear_sel2: function(str)
	{
		var e = $(this.id_sel2);
		while (e.options.length > 0)
		{
			e.remove(0);
		}
		e.options[0] = new Option(str, 0);
	},
	
	create_sel2: function(sel1_value)
	{
		this.clear_sel2("--");
		
		if (this.opt2[sel1_value] != undefined)
		{
			this.clear_sel2("選択してください");
			var opt2 = this.opt2[sel1_value];
			
			var e = $(this.id_sel2);
			for (var i in opt2)
			{
				e.options[e.options.length] = new Option(opt2[i], i);
			}
		}
	}
});

// target文字中にあるbefor文字列をafter文字列に置換する
function replace2(before, after, target)
{
	return target.gsub(before, after);	// gsub(): prototype.js拡張
}

// HTMLダブルクォーテーション文字列に変換する
function escapeHTML(str)
{
//	str = str.escapeHTML();		// 改行文字が削除されちゃうからこれは使わない
	str = replace2('&', '&amp;', str);
	str = replace2('<', '&lt;', str);
	str = replace2('>', '&gt;', str);
	str = replace2('"', '&quot;', str);
	
	return str;
}

// 元に戻す
function unescapeHTML(str)
{
//	str = str.unescapeHTML();	// 改行文字が削除されちゃうからこれは使わない
	str = replace2('&lt;', '<', str);
	str = replace2('&gt;', '>', str);
	str = replace2('&quot;', '"', str);
	str = replace2('&#039;', '\'', str);
	str = replace2('&amp;', '&', str);
	
	return str;
}

// 入力文字数カウント機能
function inputCharCount(inputID, dispID, max)
{
	this.inputID = inputID;
	this.dispID = dispID;
	this.max = max;
	
	$(this.inputID).onkeyup = input_onkeyup.bind(this);
	$(this.inputID).onchange = input_onkeyup.bind(this);	// マウスで貼り付けしたとき用
	
	this.init = function ()
	{
		$(this.inputID).onkeyup();
	};
	
	function input_onkeyup()
	{
		count = this.max - $F(this.inputID).length;
		
		if (count >= 0)
		{
			$(this.dispID).innerHTML = '残り' + count + '文字入力できます';
			$(this.dispID).style.color = '#0000FF';
		}
		else
		{
			$(this.dispID).innerHTML = (-count) + '文字オーバーしています';
			$(this.dispID).style.color = '#FF0000';
		}
	}
}

function enable_history()
{
	var exp = getExpDate(90, 0, 0);
	setCookie("DRE_HISTORY_ENABLED", "1", exp, "/");

	$('history_enabled').show();
	$('history_disabled').hide();
}

function disable_history()
{
	if (!confirm('閲覧履歴をOFFにしてもよろしいですか？\n後でONにすることもできます。'))
	{
		return;
	}
	
	var exp = getExpDate(90, 0, 0);
	setCookie("DRE_HISTORY", "", exp, "/");
	setCookie("DRE_HISTORY_ENABLED", "0", exp, "/");
	
	$('history__').innerHTML = "閲覧履歴をONにしました。";
	$('history__').style.textAlign = "center";
	
	$('history_enabled').hide();
	$('history_disabled').show();
	
	return false;
}

// ページトップスムーズスクロール
function scrolltotop()
{
	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 / 2));
	window.scrollTo(Math.floor(x * 0.8), Math.floor(y * 0.8));
	if (x > 0 || y > 0)
	{
		window.setTimeout("scrolltotop()", 25);
	}
	
	return false;
}

function create_map(element, lat, lng)
{
	if (GBrowserIsCompatible())
	{
		var map = new GMap2($(element));
		var point = new GLatLng(lat, lng);
		
		map.setCenter(point, 14);
		map.addControl(new GLargeMapControl());
		map.addControl(new GMapTypeControl());
		
		var marker = new GMarker(point);
		map.addOverlay(marker);
	}
}

