/** お気に入り物件保存機能 *******************************************/
function addFavorite(pcd) {
	var xmlRequest = newXmlHttpRequest();
	var url = getFavoriteRequestUrl();
	var data;

	var currentUrl = location.href;
	if (currentUrl && currentUrl.indexOf('https://') >= 0) {
		url = getFavoriteRequestUrlHttp();
	}

	if (xmlRequest == null) {
		alert('このブラウザではお気に入り登録機能を使用できません。');
		return;
	}

	if (pcd == null || pcd.length == 0) {
		data = getRequestData();
	} else {
		data = 'PCD=' + pcd;
	}
	
	if (data == null) {
		alertPop('お気に入り登録を行う物件が選択されていません。');
		return;
	}
	
	xmlRequest.open("POST", url, true);
	xmlRequest.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
	xmlRequest.onreadystatechange = function() {
		if (xmlRequest.readyState == 4) {
			onRequestComplete(xmlRequest);
		}
	};
	
	xmlRequest.send(data);
}

function addFavoriteForSum(pcd) {

	var xmlRequest = newXmlHttpRequest();
	var url = getFavoriteRequestUrl();
	var data;
	
	var currentUrl = location.href;
	if (currentUrl && currentUrl.indexOf('https://') >= 0) {
		url = getFavoriteRequestUrlHttp();
	}
	
	if (xmlRequest == null) {
		alert('このブラウザではお気に入り登録機能を使用できません。');
		return;
	}
	
	if (pcd == null || pcd.length == 0) {
		data = getRequestDataSum();
	} else {
		data = 'PCD=' + pcd;
	}
	
	if (data == null) {
		alertPop('お気に入り登録を行う物件が選択されていません。');
		return;
	}

	xmlRequest.open("POST", url, true);
	xmlRequest.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
	xmlRequest.onreadystatechange = function() {
		if (xmlRequest.readyState == 4) {
			onRequestComplete(xmlRequest);
		}
	};

	xmlRequest.send(data);
}

function addFavoriteForPanorama(pcd,cnt) {
	var xmlRequest = newXmlHttpRequest();
	var url = getFavoriteRequestUrl();
	var data;

	if(!cnt) cnt = 1;

	if (xmlRequest == null) {
		alert('このブラウザではお気に入り登録機能を使用できません。');
		return;
	}

	if (pcd == null || pcd.length == 0) {
		data = getRequestData();
	} else {
		data = 'PCD=' + pcd;
	}

	if (data == null) {
		alertPop('お気に入り登録を行う物件が選択されていません。');
		return;
	}

	xmlRequest.open("POST", url, true);
	xmlRequest.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
	xmlRequest.onreadystatechange = function() {
		if (xmlRequest.readyState == 4) {
			var array = parseFavoriteResponse(xmlRequest);
			popen('favorite', array[0], array[1], array[2], cnt);
		}
	};

	xmlRequest.send(data);
}

function addFavoriteHttp(kind) {
	var popupFlg = (kind == null || kind.length == 0)
	var xmlRequest = newXmlHttpRequest();
	var url = getFavoriteRequestUrlHttp();
	var data;

	if (xmlRequest == null) {
		if (popupFlg) {
			alert('このブラウザではお気に入り登録機能を使用できません。');
		}
		return;
	}

	data = getRequestData();

	if (data == null) {
		if (popupFlg) {
			alertPop('お気に入り登録を行う物件が選択されていません。');
		}
		return;
	}

	xmlRequest.open("POST", url, true);
	xmlRequest.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
	xmlRequest.onreadystatechange = function() {
		if (xmlRequest.readyState == 4) {
			onRequestComplete(xmlRequest, kind);
		}
	};

	xmlRequest.send(data);
}

function onRequestComplete(xmlRequest, kind) {
	if (kind == null || kind.length == 0) {
		var array = parseFavoriteResponse(xmlRequest);
		if (array[0] != '0') {
			alertPop(array[1] + '<br>' + array[2] + '<br>' + array[3]);
		}else{
			popen('favorite', array[1], array[2], array[3]);
		}
	}
}

function parseFavoriteResponse(xmlRequest) {
	if (xmlRequest.status != 200) {
		return new Array('9', 'お気に入り物件登録に失敗しました。', '', '');
	}

	var data = xmlRequest.responseText;

	var retcdTag = '<retcd>';
	var retStart = data.indexOf(retcdTag);
	var retEnd   = data.indexOf('</retcd>');

	if (retStart == -1 || retEnd == -1) {
		return new Array('9', 'お気に入り物件登録に失敗しました。', '', '');
	}
	retStart += retcdTag.length;
	var retcd = data.substr(retStart, retEnd - retStart);

	var msgList = '';
	var lastLine = '';
	for (var i = 1; true; i++) {
		var startStr = '<row' + i + '>';
		var endStr = '</row' + i + '>';
		var start = data.indexOf(startStr);
		var end = data.indexOf(endStr);

		if (start == -1 || end == -1) {
			break;
		}

		if (i > 1) {
			msgList += lastLine;
			msgList += '<br>';
		}

		start += startStr.length;
		lastLine = data.substr(start, end - start);
	}

	var isAlreadyRegistered = msgList.indexOf('既に登録されています') != -1;
	if (isAlreadyRegistered) {
		return new Array('9', '物件は既に登録されています。', '', '');
	}
	return new Array(retcd, retcd == '0' ? '以下の物件をお気に入りに追加いたしました。' : 'お気に入り物件登録に失敗しました。', msgList, lastLine);
}

function getBasePath() {
	return '';	// URL上の8文字目以降にある「/」から「/」までの文字列を返却していたが、本番環境では不要なため空文字を返却するように修正した
}

function getFavoriteRequestUrl() {
	return getBasePath() + '/favorite/regist_www';
}

function getFavoriteRequestUrlHttp() {
	return getBasePath() + '/inquiry/favorite/regist';
}

function getRequestData() {
	var form = document.getElementById('housingListForm');
	var result = 'PCD=';
	var flg = false;

	for (var i = 0; i < form.length; i++) {
		var e = form.elements[i];
		if ((e.name == 'PCD' && e.type == 'checkbox' && e.checked) ||
			(e.name == 'sysHousingCd' && e.type == 'hidden')) {
			if (flg) {
				result += ',';
			} else {
				flg = true;
			}
			result += e.value;
		}
	}
	
	return flg ? result : null;
}

function getRequestDataSum() {

	var form = document.getElementById('housingListForm');
	var result = 'PCD=';
	var flg = false;
	
	for (var i = 0; i < form.length; i++) {
		var e = form.elements[i];
		if (e.name == 'PCD' && e.type == 'checkbox' && e.checked) {
			if (flg) {
				result += ',';
			} else {
				flg = true;
			}
			result += e.value;
		}
	}
	
	return flg ? result : null;
}

function newXmlHttpRequest(){
	if (window.XMLHttpRequest) {
		return new XMLHttpRequest();
	} else if (window.ActiveXObject) {
		try {
			return new ActiveXObject("Msxml2.XMLHTTP");
		} catch(e) {
			return new ActiveXObject("Microsoft.XMLHTTP");
		}
	} else {
		return null;
	}
}


/** 検索物件登録機能 **********/

var saveConditionFlg = true;
function saveCondition(notPopen) {
	var url = getSaveRequestUrl();
	var xmlRequest = newXmlHttpRequest();
	var data = getQueryData();
	var saveStatus='';
	var saveValue='';
	var saveCnt='';
	var divStatus = document.getElementById("saveStatus");
	var divValue = document.getElementById("saveValue");
	var divCnt = document.getElementById("saveCnt");

	if (xmlRequest == null) {
		alert('このブラウザでは検索条件保存を使用できません。');
		return;
	}

	if (!saveConditionFlg) {
		if(!notPopen) {
			popen('alert', 'この検索条件は既に保存されています。', '', '');
		}
		return;
	}

	xmlRequest.open("POST", url, true);
	xmlRequest.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
	xmlRequest.onreadystatechange = function() {
		if (xmlRequest.readyState == 4) {
			onSaveComplete(xmlRequest, notPopen);
		}
	};
	xmlRequest.send(data);
}

function onSaveComplete(xmlRequest, notPopen) {
	var array = parseSaveResponse(xmlRequest);
	if (array[0] != '0') {
		alertPop(array[1] + '<br>' + array[2] + '<br>' + array[3]);
	}else{
		if(!notPopen) {
			popen('save', array[1], array[2], array[3]);
		}
	}
}

function parseSaveResponse(xmlRequest) {
	if (xmlRequest.status != 200) {
		return new Array('9', '検索条件の保存に失敗しました。', '', '');
	}

	var data = xmlRequest.responseText;

	var retcdTag = '<retcd>';
	var retStart = data.indexOf(retcdTag);
	var retEnd   = data.indexOf('</retcd>');

	if (retStart == -1 || retEnd == -1) {
		return new Array('9', '検索条件の保存に失敗しました。', '', '');
	}
	retStart += retcdTag.length;
	var retcd = data.substr(retStart, retEnd - retStart);

	var msgList = '';
	var lastLine = '';
	var count = 0;
	for (var i = 1; true; i++) {
		var startStr = '<row' + i + '>';
		var endStr = '</row' + i + '>';
		var start = data.indexOf(startStr);
		var end = data.indexOf(endStr);

		if (start == -1 || end == -1) {
			break;
		}

		if (i > 1) {
			msgList += lastLine;
			msgList += '<br>';
			count++;
		}

		start += startStr.length;
		lastLine = data.substr(start, end - start);
	}

	var title = count > 1 ? '以下の条件を保存しました。' : '条件を保存しました。';
	if (retcd == '0') saveConditionFlg = false;
	return new Array(retcd, retcd == '0' ? title : '検索条件の保存に失敗しました。', msgList, lastLine);
}
function getQueryData(form) {
	var form = document.getElementById("housingListForm");
	var params = new Array();

	var firstFlg = true;
	for (var i = 0; i < form.length; i++) {
		var e = form.elements[i];

		if (e.type && e.type == 'checkbox' && e.name && e.value && e.checked) {
			if (e.name == 'PCD') {
				continue;
			}

			addToArray(params, e.name, e.value);
		}

		if (e.name && e.options) {
			var idx = e.selectedIndex;
			if (!idx) idx = 0;
			addToArray(params, e.name, e.options[idx].value);
		}

		if (e.type && e.type == 'hidden' && e.name && e.value) {
			addToArray(params, e.name, e.value);
		}
	}

	var flg = true;
	var query = '';
	for (var i in params) {
		if (flg) {
			flg = false;
		} else {
			query += '&';
		}

		query += i;
		query += '=';
		query += params[i];
	}
	return query;
}

function addToArray(array, name, value) {
	var val = array[name];

	if (val == null || val.length == 0) {
		val = '';
	} else {
		val += ',';
	}

	val += value;
	array[name] = val;
}

function getSaveRequestUrl() {
	return getBasePath() + '/save/regist_www';
}


/** 検索条件保存リネーム機能 ***********************/

function renameSearchCondition(index) {
	var url = getRenameRequestUrl();
	var xmlRequest = newXmlHttpRequest();

	if (xmlRequest == null) {
		alert('このブラウザでは名称変更機能を使用できません。');
		return;
	}

	var chkbox = document.getElementById('chkbx' + index);
	var edit = document.getElementById('edit' + index);
	var form = document.renameForm;

	data = 'command=rename&srchId=' + chkbox.value + '&nm=' + edit.value;

	xmlRequest.open("POST", url, true);
	xmlRequest.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
	xmlRequest.onreadystatechange = function() {
		if (xmlRequest.readyState == 4) {
			onRenameComplete(xmlRequest, edit, index);
		}
	};
	xmlRequest.send(data);
}

function onRenameComplete(xmlRequest, edit, index) {
	var edit = document.getElementById('edit' + index);
	var hedit = document.getElementById('hedit' + index);

	if (xmlRequest.status == 200) {
		var data = xmlRequest.responseText;
		var retcdTag = '<retcd>';
		var retcdTagEnd = '</retcd>';

		var startIndex = data.indexOf(retcdTag);
		var endIndex   = data.indexOf(retcdTagEnd);

		if (startIndex == -1 || endIndex == -1) {
			edit.value = hedit.value;
			popen('alert', '検索条件の名称変更に失敗しました。');
			return;
		}

		var sub = data.substring(startIndex + retcdTag.length, endIndex);
		if (sub != '0') {
			edit.value = hedit.value;
			popen('alert', '検索条件の名称変更に失敗しました。');
			return;
		}

		popen('alert', '検索条件' + index + 'の名称を「' + sanitize(edit.value) + '」に変更しました。');
		hedit.value = edit.value;
	} else {
		edit.value = hedit.value;
		popen('alert', '検索条件の名称変更に失敗しました。');
	}
}

function getRenameRequestUrl() {
	return getBasePath() + '/save/regist';
}

/** ウインドウポップアップ機能 **********************************/

// グローバル変数初期化
var ns6=document.getElementById&&!document.all?1:0;
var viewFlag;

var popupLink = '';
var mouseX = 0;
var mouseY = 0;
window.document.onmousemove = onMouseMove;

var DIV_IDS = new Array(
	"afterImage01",
	"afterImage02",
	"afterImage03",
	"popup_window",
	"popupPartSrch"
);

var imageBuffer;	//変更されたボタンの元画像URL
var current;		//イベント発生元オブジェクト
var timerID;
var timerIdArray = new Array(
	undefined,
	undefined,
	undefined,
	undefined,
	undefined,
	undefined);

// _dom : kind of DOM.
//        IE4 = 1, IE5+ = 2, NN4 = 3, NN6+ = 4, others = 0
var _dom = document.all?(document.getElementById?2:1):
(document.getElementById?4:
(document.layers?3:0));

function onMouseMove(evt) {
	if (window.createPopup) {
		mouseX = event.x + getScrollWidth();
		mouseY = event.y + getScrollHeight();
	} else {
		mouseX = evt.pageX;
		mouseY = evt.pageY;
	}
}

//オーバーレイ背景準備
function setTranslucent () {
	createPopupWindow();
	createTranslucent();
	for (var i = 0; i < DIV_IDS.length; i++) {
		var e = document.getElementById(DIV_IDS[i]);

		if (!e) {
			var objBody = document.getElementsByTagName("body").item(0);

			var objDiv = document.createElement("div");
			objDiv.id = DIV_IDS[i];
		 	objBody.appendChild(objDiv);
		}
	}
}

function createTranslucent () {
	var e = document.getElementById('translucent');

	if (!e) {
		var objBody = document.getElementsByTagName("body").item(0);

		var objTranslucent = document.createElement("div");
		objTranslucent.setAttribute('id','translucent');
		objTranslucent.style.display = 'none';
		objTranslucent.style.position = 'absolute';
		objTranslucent.style.top = '0';
		objTranslucent.style.left = '0';
	 	objTranslucent.style.width = '100%';
		objBody.insertBefore(objTranslucent, objBody.firstChild);
	}
}

function createPopupWindow() {
	var e = document.getElementById('popup_window');

	if (!e) {
		var str = '';
		popupLink = '';

		str += '<table width="260" border="0" cellspacing="0" cellpadding="0"><tr><td>';
		str += '<div class="bgBorderballoonA01">';
		str += '<table width="100%" border="0" cellspacing="0" cellpadding="0"><tr>';
		str += '<td align="right"><a href="javascript:hidePop()"><img src="' + getBasePath() + '/popup/imgs/btn_close.gif" alt="閉じる" width="16" height="16"><\/a><\/td>';
		str += '<\/tr><\/table>';
		str += '<\/div>';
		str += '<div class="bgBorderballoonB01">';
		str += '<table width="100%" border="0" cellspacing="0" cellpadding="0"><tr>';
		str += '<td><span class="empA01" id="popupTitleId"><\/span><\/td>';
		str += '<\/tr><\/table>';
		str += '<div class="marginT10">';
		str += '<table width="100%" border="0" cellspacing="0" cellpadding="0"><tr>';
		str += '<td id="popupListId"><\/td>';
		str += '<\/tr><\/table>';
		str += '<\/div>';
		str += '<div class="marginT10">';
		str += '<table width="100%" border="0" cellspacing="0" cellpadding="0"><tr>';
		str += '<td id="popupSumId"><\/td>';
		str += '<\/tr><\/table>';
		str += '<\/div><\/div>';
		str += '<div class="bgBorderballoonC01" id="popupLinkId">';

		popupLink += '<table width="100%" border="0" cellspacing="0" cellpadding="0"><tr><td align="right">';
		popupLink += '<table border="0" cellspacing="0" cellpadding="0"><tr>';
		popupLink += '<td valign="middle"><img src="' + getBasePath() + '/popup/imgs/arrow_006.gif" width="9" height="13"><\/td>';
		popupLink += '<td valign="middle" class="f10" id="popupAnchorId"><a href="' + getBasePath() + '/favorite/list">お気に入りをみる<\/a><\/td>';
		popupLink += '<\/tr><\/table>';
		popupLink += '<\/td><\/tr><\/table>';

		str += '<\/div>';
		str += '<\/td><\/tr><\/table>';

		var objBody = document.getElementsByTagName("body").item(0);
		var objDiv = document.createElement("div");
		objDiv.id = 'popup_window';
		objDiv.style.visibility = 'hidden';
		objDiv.style.position = 'absolute';
		objDiv.style.top = '0px';
		objDiv.style.left = '0px';
		objDiv.innerHTML = str;
		objBody.appendChild(objDiv);
	}
}

//イベント
function popen(popupKind, msgTitle, msgList, msgSum, pCnt) {
	var buttonRel = popupKind == 'popupPartSrch' ? 'popupPartSrch' : 'popup_window';
	var objBtn;
	setTranslucent();

	current = document.getElementById(buttonRel);
	buttonLeft = mouseX;
	buttonTop = mouseY;

	clearPop();

	var d;

	d = document.getElementById('popupTitleId');
	if (d) d.innerHTML = msgTitle;

	d = document.getElementById('popupListId');
	if (d) d.innerHTML = msgList;

	d = document.getElementById('popupSumId');
	if (d) d.innerHTML = msgSum;

	var popupLinkId = document.getElementById('popupLinkId');
	if (popupLinkId) {
		if (popupKind == 'favorite') {
			popupLinkId.innerHTML = popupLink;
			document.getElementById('popupAnchorId').innerHTML = '<a href="' + getBasePath() + '/favorite/list">お気に入りを見る</a>';
		} else if (popupKind == 'save') {
			popupLinkId.innerHTML = popupLink;
			document.getElementById('popupAnchorId').innerHTML = '<a href="' + getBasePath() + '/save/list">保存した検索条件を見る</a>';
		} else {
			popupLinkId.innerHTML = '';
		}
	}

	var arrayPageSize = getPageSize();

	var scrollHeight = getScrollHeight();
	var scrollWidth = getScrollWidth();
	var windowHeight = arrayPageSize[3];
	var windowWidth = arrayPageSize[2];


	//本体情報取得
	var showContext = ns6?document.getElementById(buttonRel):document.all(buttonRel);

	//残像取得
	var dummyBox1 = ns6?document.getElementById("afterImage01"):document.all("afterImage01");
	var dummyBox2 = ns6?document.getElementById("afterImage02"):document.all("afterImage02");
	var dummyBox3 = ns6?document.getElementById("afterImage03"):document.all("afterImage03");

	//本体表示位置取得
	var popTop = (windowHeight / 2) + scrollHeight - (getDivHeight(showContext) / 2);
	showContext.style.top = popTop + 'px';
	// 検索条件保存はリストボックスに重ならない位置に表示する
	if(buttonRel == 'save') {
		var popLeft = 400 - (getDivWidth(showContext) / 2);
	} else {
		var popLeft = 460 - (getDivWidth(showContext) / 2);
	}
	showContext.style.left = popLeft + 'px';

	//パノラマ画像がある場合は重ならない位置に表示する
	if(pCnt) {
		var panoramaFrame;
		if(document.getElementById("panoramaFrame"+pCnt)) {
			panoramaFrame = document.getElementById("panoramaFrame"+pCnt);
		} else {
			panoramaFrame = document.getElementById("panoramaFrame");
		}
		popTop = getDivTop(panoramaFrame) - 100;
		showContext.style.top = popTop + 'px';
	}

	//残像表示位置取得
	dummyBox1.style.top = (((popTop - buttonTop) / 20) * 3) + buttonTop + 'px';
	dummyBox1.style.left = (((popLeft - buttonLeft) / 20) * 3) + buttonLeft + 'px';
	dummyBox2.style.top = (((popTop - buttonTop) / 20) * 6) + buttonTop + 'px';
	dummyBox2.style.left = (((popLeft - buttonLeft) / 20) * 6) + buttonLeft + 'px';
	dummyBox3.style.top = (((popTop - buttonTop) / 20) * 12) + buttonTop + 'px';
	dummyBox3.style.left = (((popLeft - buttonLeft) / 20) * 12) + buttonLeft + 'px';

	var objBody = document.getElementsByTagName("body").item(0);
	objBody.setAttribute('className', 'show' + (popupKind == 'popupPartSrch' ? 'popupPartSrch' : 'popup01'));

	//残像表示
	for (var i = 0; i < 3; i++) {
		var index = i << 1;
		var milliseconds = 50 * (i + 1);

		if (timerIdArray[index] == undefined && timerIdArray[index + 1] == undefined) {
			timerIdArray[index    ] = setInterval('showShadow("' +  index      + '")', milliseconds);
		}
	}

	//背景オーバーレイ表示
	if (popupKind == 'popupPartSrch') {
		timerIdArray[6] = setInterval(showTranslucent, 200);
	}

	//本体表示
	timerID = setInterval('showPop("' + buttonRel + '", "' + popupKind + '")', 200);
}

//ポップアップ表示
function showPop (targetID, popupKind) {
	clearInterval(timerID);
	var showContext = ns6?document.getElementById(targetID):document.all(targetID);
	showContext.style.visibility = "visible";
	showContext.style.zIndex = 1000;

	//「お気に入りに追加」の場合
	if (popupKind == 'favorite') {
		timerID = setInterval(hidePop, 2000);
	}
}

//ポップアップ消去
function hidePop() {
	clearInterval(timerID);
	var objBody = document.getElementsByTagName("body").item(0);
	objBody.setAttribute('className', 'def');
	clearPop();
}

//オーバーレイ背景表示
function showTranslucent () {
	var objTranslucent = ns6?document.getElementById('translucent'):document.all('translucent');
	var arrayPageSize = getPageSize();
	objTranslucent.style.visibility = "visible";
	objTranslucent.style.height = arrayPageSize[1] + 'px';
	objTranslucent.style.display = 'block';
	clearInterval(timerIdArray[6]);
	timerIdArray[6] = undefined;
}


//残像表示
function showShadow(index) {
	var itemName = "afterImage0" + ((index >> 1) + 1);
	var dummyBox = ns6?document.getElementById(itemName):document.all(itemName);
	dummyBox.style.visibility = "visible";
	clearInterval(timerIdArray[index]);
	timerIdArray[index] = undefined;

	timerIdArray[index | 1] = setInterval('hideShadow("' + (index | 1) + '")', 50);
}

//残像消去
function hideShadow(index) {
	var itemName = "afterImage0" + ((index >> 1) + 1);
	var dummyBox = ns6?document.getElementById(itemName):document.all(itemName);
	dummyBox.style.visibility = "hidden";
	clearInterval(timerIdArray[index]);
	timerIdArray[index] = undefined;
}

//ポップアップ全消去
function clearPop () {
	var showContext;

	var objTranslucent = ns6?document.getElementById('translucent'):document.all('translucent');
	if (objTranslucent) {
		objTranslucent.style.display = 'none';
	}

	for (var i = 0; i < DIV_IDS.length; i++) {
		var divId = DIV_IDS[i];
		showContext = ns6?document.getElementById(divId):document.all(divId);
		if (showContext) {
			showContext.style.visibility = "hidden";
		}
	}

	//タイマーIDをクリア
	if(timerID) clearInterval(timerID);
	for (var i = 0; i < 7; i++) {
		if (timerIdArray[i] != undefined) {
			clearInterval(timerIdArray[i]);
			timerIdArray[i] = undefined;
		}
	}
}

//タグ縦サイズ取得
function getDivHeight(div){
	// _dom : kind of DOM.
	//        IE4 = 1, IE5+ = 2, NN4 = 3, NN6+ = 4, others = 0
	if(_dom==4 || _dom==2) return div.offsetHeight;
	if(_dom==1)            return div.style.pixelHeight;
	if(_dom==3)            return div.clip.height;
	return 0;
}

//タグ横サイズ取得
function getDivWidth (div){
	// _dom : kind of DOM.
	//        IE4 = 1, IE5+ = 2, NN4 = 3, NN6+ = 4, others = 0
	if(_dom==4 || _dom==2) return div.offsetWidth;
	if(_dom==1)            return div.style.pixelWidth;
	if(_dom==3)            return div.clip.width;
	return 0;
}

//タグ縦位置取得
function getDivTop(div) {
	var positionTop = div.offsetTop;
	var parentTag = div.offsetParent;
	for (var i = 0; parentTag.tagName != "BODY" ; i++) {
		positionTop = positionTop + parentTag.offsetTop;
		parentTag = parentTag.offsetParent;
	}
	return positionTop;
}

//タグ横位置取得
function getDivLeft(div) {
	var positionLeft = div.offsetLeft;
	var parentTag = div.offsetParent;
	for (var i = 0; parentTag.tagName != "BODY" ; i++) {
		positionLeft = positionLeft + parentTag.offsetLeft;
		parentTag = parentTag.offsetParent;
	}
	return positionLeft;
}

//ページ縦スクロールサイズ取得
function getScrollHeight() {
	var scrollHeight;
	if (self.pageYOffset) {
		scrollHeight = self.pageYOffset;
	} else if (document.documentElement && document.documentElement.scrollTop){	 // Explorer 6 Strict
		scrollHeight = document.documentElement.scrollTop;
	} else if (document.body) {// all other Explorers
		scrollHeight = document.body.scrollTop;
	}
	return scrollHeight;
}

//ページ横スクロールサイズ取得
function getScrollWidth() {
	var scrollWidth;
	if (self.pageXOffset) {
		scrollWidth = self.pageXOffset;
	} else if (document.documentElement && document.documentElement.scrollLeft){	 // Explorer 6 Strict
		scrollWidth = document.documentElement.scrollLeft;
	} else if (document.body) {// all other Explorers
		scrollWidth = document.body.scrollLeft;
	}
	return scrollWidth;
}


//ページ縦横サイズ、ウィンドウ縦横サイズ取得
function getPageSize(){
	var xScroll, yScroll;
	if (window.innerHeight && window.scrollMaxY) {
		xScroll = document.body.scrollWidth;
		yScroll = window.innerHeight + window.scrollMaxY;
	} else if (document.body.scrollHeight > document.body.offsetHeight){ // all but Explorer Mac
		xScroll = document.body.scrollWidth;
		yScroll = document.body.scrollHeight;
	} else { // Explorer Mac...would also work in Explorer 6 Strict, Mozilla and Safari
		xScroll = document.body.offsetWidth;
		yScroll = document.body.offsetHeight;
	}
	var windowWidth, windowHeight;
	if (self.innerHeight) {	// all except Explorer
		windowWidth = self.innerWidth;
		windowHeight = self.innerHeight;
	} else if (document.documentElement && document.documentElement.clientHeight) { // Explorer 6 Strict Mode
		windowWidth = document.documentElement.clientWidth;
		windowHeight = document.documentElement.clientHeight;
	} else if (document.body) { // other Explorers
		windowWidth = document.body.clientWidth;
		windowHeight = document.body.clientHeight;
	}

	// for small pages with total height less then height of the viewport
	if(yScroll < windowHeight){
		pageHeight = windowHeight;
	} else {
		pageHeight = yScroll;
	}

	// for small pages with total width less then width of the viewport
	if(xScroll < windowWidth){
		pageWidth = windowWidth;
	} else {
		pageWidth = xScroll;
	}

	arrayPageSize = new Array(pageWidth,pageHeight,windowWidth,windowHeight)
	return arrayPageSize;
}



/** サニタイジング ****************************/

function sanitize(str) {
	var len = str.length;
	var ret = '';

	for (var i = 0; i < len; i++) {
		var ch = str.charAt(i);

		if (ch == '<') {
			ret += '&lt';
		} else if (ch == '>') {
			ret += '&gt';
		} else if (ch == '"') {
			ret += '&quot;';
		} else if (ch == '&') {
			ret += '&amp;';
		} else if (ch == ' ') {
			ret += '&nbsp;';
		} else {
			ret += ch;
		}
	}

	return ret;
}

