function htmlentities(text) {
	text = text.replace(/&/g, '&amp;');
	text = text.replace(/\"/g, '&qout;');
	text = text.replace(/</g, '&lt;');
	text = text.replace(/>/g, '&gt;');
	text = text.replace(/\n/g, '<br />');
	
	return text;
}

function replaceTag(html, objVar) {
	var objRegExp = null;
	html = html.replace(/\r/g, '');
	html = html.replace(/\n/g, '');
	html = html.replace(/\t/g, '');
	
	for (var tag in objVar) {
		if (typeof objVar[tag] == 'object') {
			// コンテナタグ
			objRegExp = new RegExp('<!-- BEGIN ' + tag + ' -->.*?<!-- END ' + tag + ' -->', 'g');
			var listMatch = html.match(objRegExp);
			if (listMatch) {
				for (var indexMatch = 0; indexMatch < listMatch.length; indexMatch++) {
					var textContainer = listMatch[indexMatch];
					var textNew = '';
					var textOld = textContainer.replace(new RegExp('<!-- BEGIN ' + tag + ' -->', 'g'), '').replace(new RegExp('<!-- END ' + tag + ' -->', 'g'), '');
					var i = 0;
					var c = objVar[tag].length - 1;
					for (var i = 0; i <= c; i++) {
						objVar[tag][i]['line_even_' + tag] = (i % 2 === 1);
						objVar[tag][i]['line_begin_' + tag] = (i === 0);
						objVar[tag][i]['line_end_' + tag] = (i === c);
						textNew += replaceTag(textOld, objVar[tag][i]);
					}
					html = html.replace(textContainer, textNew);
				}
			}
		} else if (typeof objVar[tag] == 'boolean') {
			// 真偽タグ
			if (objVar[tag]) {
				objRegExp = new RegExp('<!-- IF ' + tag + ' -->\n?', 'g');
				html = html.replace(objRegExp, '');
				objRegExp = new RegExp('<!-- ENDIF ' + tag + ' -->\n?', 'g');
				html = html.replace(objRegExp, '');
				objRegExp = new RegExp('<!-- IFNOT ' + tag + ' -->.*?<!-- ENDIFNOT ' + tag + ' -->', 'g');
				html = html.replace(objRegExp, '');
			} else {
				objRegExp = new RegExp('<!-- IF ' + tag + ' -->.*?<!-- ENDIF ' + tag + ' -->', 'g');
				html = html.replace(objRegExp, '');
				objRegExp = new RegExp('<!-- IFNOT ' + tag + ' -->\n?', 'g');
				html = html.replace(objRegExp, '');
				objRegExp = new RegExp('<!-- ENDIFNOT ' + tag + ' -->\n?', 'g');
				html = html.replace(objRegExp, '');
			}
		} else {
			// 変数タグ
			objRegExp = new RegExp('{' + tag + '}', 'g');
			html = html.replace(objRegExp, htmlentities(objVar[tag]));
		}
	}
	
	return html;
}

