// グローバルメニュー
function setupGlobalMenu() {
	var img_folder = "/common/images/";
	
	var nav_item_list = [
	{"elemid":"gma_home","imgid":"gmi_home","baseimg":"n-home","swapimg":"n-home-a","ext":"gif"},
	{"elemid":"gma_news","imgid":"gmi_news","baseimg":"n-news","swapimg":"n-news-a","ext":"gif"},
	{"elemid":"gma_column","imgid":"gmi_column","baseimg":"n-column","swapimg":"n-column-a","ext":"gif"},
	{"elemid":"gma_catalog","imgid":"gmi_catalog","baseimg":"n-catalog","swapimg":"n-catalog-a","ext":"gif"},	
	{"elemid":"gma_bookmark","imgid":"gmi_bookmark","baseimg":"n2_bookmark","swapimg":"n2_bookmark-a","ext":"gif"},
	{"elemid":"gma_forum","imgid":"gmi_forum","baseimg":"n2_forum","swapimg":"n2_forum-a","ext":"gif"},
	{"elemid":"gma_vote","imgid":"gmi_vote","baseimg":"n2_vote","swapimg":"n2_vote_a","ext":"gif"},
	{"elemid":"gma_blog","imgid":"gmi_blog","baseimg":"n-blog","swapimg":"n-blog-a","ext":"gif"},
	{"elemid":"gma_dic","imgid":"gmi_dic","baseimg":"n-words","swapimg":"n-words-a","ext":"gif"}
	];
	connectMenuItems(img_folder, nav_item_list);
}

/**
 * DropDownMenu for global navi
 * Powered by hisato http://chibinowa.net/
 * http://sjam.chibinowa.net/eid/162
 */
var DropDownMenu = {
	/* 開くまでの待ち時間 */
	open_sleep: 100,
	/* 閉じるまでの待ち時間 */
	close_sleep: 500,

	timer: null,
	active_oid: null,

	// 開くメイン
	open: function(target_id)
	{
		// 開いているメニューを閉じる
		if (this.timer) {
			if (this.active_oid == target_id)
				clearTimeout(this.timer);
			else
				this._close();
		}
		this.active_oid = target_id;
		this.timer = setTimeout("DropDownMenu._open();", this.open_sleep);
		Event.observe(document.documentElement, "click", DropDownMenu._close, true);
	},

	// 閉じるメイン
	close: function()
	{
		if (this.timer)
			clearTimeout(this.timer);
		this.timer = setTimeout("DropDownMenu._close();", this.close_sleep);
	},

	_open: function()
	{
		var obj = document.getElementById(this.active_oid);
		obj.style.visibility = "visible";
	},

	_close: function()
	{
		document.getElementById(DropDownMenu.active_oid).style.visibility = "hidden";
		Event.stopObserving(document.documentElement, "click", DropDownMenu._close, true);
		clearTimeout(DropDownMenu.timer);
		delete DropDownMenu.timer;
	}

};



// ==== js class definition ====  
// make helper balloon
var divHelper = Class.create();
divHelper.prototype = {
	initialize: function(targetid, c, w) {
		this.element = $(targetid);
		this.id = 'divhelper';
		this.helper = $(this.id);
		this.helpmarginleft = 4;
		this.helpmarginbottom = 8;
		if (c == undefined) c = 'balloon2';
		if (w == undefined) w = '400px';
		this.classname = c;
		this.width = w;

		if (this.helper == undefined) {
			//alert('helper div is not found');
			this.helper = document.createElement("div");
			this.helper.id = this.id;
			this.helper.className = this.classname;
			if (this.width != undefined)
				this.helper.style.width = this.width;
			this.helper.className = this.classname;

			document.body.appendChild(this.helper);
		}

	},
	show: function(msg) {
		this.helper.innerHTML = msg;
		
		var helpdim = Element.getDimensions(this.helper);
		var elmdim = Element.getDimensions(this.element);
		var elmpos = Position.positionedOffset(this.element);
		
		var helpleft = elmpos[0] + this.helpmarginleft;
		var helptop = elmpos[1] + elmdim.height + this.helpmarginbottom;
		this.helper.style.left = helpleft+'px';
		this.helper.style.top  = helptop +'px';
		
		Element.show(this.helper);
	},
	hide: function() {
		Element.hide(this.helper);
	}
};

// ==== js class definition ====  


// show summary
function showsum(target_id, visible, sum_id) {
	var helper = new divHelper(target_id);
	var d = document.getElementById(sum_id);
	if (visible == 1) {
		if (d) {
			if (d.style.display == 'none') {
				helper.show(d.innerHTML);
			}
		}
	} else {
		helper.hide();
		if (d) {
			d.style.display = 'none';
		}
	}
}







// page moving 
function gotop() {
	location.href='http://'+location.host;
}

function gokeyword(key) {
	var mode = getq('mode');
	location.href='/a/article.aspx?atid=5&mode='+mode+'&at='+escape(key);
}

// show tag input form
function showtagform(target_id, tagtype, id, taglisttext) {
	var d = new divHelper(target_id, 'balloon3', '240px');
	var t = sprintf("<form id='news_tag_form' onsubmit='return addtags(this,&quot;%s&quot;,%s);'><div class='t'><input type='text' id='tagtext' name='tagtext' size='30' value='%s'><br><input type='submit' value='タグ登録' class='btn_sr'><input type='button' value='閉じる' class='btn_sr' onclick='Element.hide(&quot;divhelper&quot;)'><span class='ts'>※CSVでタグ入力</span></div></form>", tagtype, id, taglisttext);
	//alert(t);
	d.show(t);
	if ($('tagtext')) $('tagtext').focus();
}
// add tag
function addtags(f, tagtype, id) {
	if(!confirm('タグを投稿しますか？'))
		return false;

	var tagtext = f.tagtext.value;
	var url = sprintf('/ajax/tag/add/%s/do.aspx', tagtype);
	var pars;
	if (tagtype == 'news') {
		pars = 'nid='+id+'&tagtext='+escape(tagtext);
	} else if (tagtype == 'art') {
		pars = 'aid='+id+'&tagtext='+escape(tagtext);
	} else if (tagtype == 'bm') {
		pars = 'bid='+id+'&tagtext='+escape(tagtext);
	}
	
	
	new Ajax.Request(url, {
		method: 'post', 
		parameters: pars, 
		requestHeaders: ['If-Modified-Since','Wed, 15 Nov 1995 00:00:00 GMT'],
		onComplete: function(r) {
			//alert(r.responseText);
			eval('var res = ' + r.responseText + '');
			Element.hide('divhelper');
			if (res.err == '0') {
				// 画面更新
				//var item_html = res.tag;
				alert('タグを追加しました。');
			} else {
				alert(res.msg);
			}
			$('tag_list_pop_' + id).innerHTML = res.tag;
			$('tag_list_mem_' + id).innerHTML = res.tagmem;

		}
	});
	return false;
}

// url utility
function getq(key) {
	var r = '';
	var re = new RegExp('\\?.*'+key+'=([0-9a-z_\\-%]+)', 'gi');
	var m = re.exec(location.href);
	if (m != undefined) {
		if (m.length > 0) {
			r = m[1];
		}
	}
	return r;
}


// パネルのon/off
function togglePanel(id) {
	var d = document.getElementById(id);
	if (d) {
		if (d.style.display=='') {
			d.style.display='none';
		} else {
			d.style.display='';
		}
	}
}

// hmltエンコード
function htmlencode(str) {
	var encstr = str;
	encstr = encstr.replace("<", "&lt;");
	encstr = encstr.replace(">", "&gt;");
	return encstr;
}

function MenuSwapImage(folder, item) {
	var swapimgfolder = folder;
	var swapitem = item;

	function changeimg(swapimg) {
		var img = document.getElementById(swapitem.imgid)
		var fname = swapimgfolder + swapimg + "." + swapitem.ext;
		img.src = fname;
	};
	MenuSwapImage.prototype.onmouseout=function(){
		changeimg(swapitem.baseimg);
	};
	MenuSwapImage.prototype.onmouseover=function(){
		changeimg(swapitem.swapimg);
	};
}
// setup menuevent and select current image
function connectMenuItems(folder, item_list) {
	var current_item;
	for(var i=0;i<item_list.length;i++) {
		var swapitem = item_list[i];
		var si = new MenuSwapImage(folder, swapitem);
		// a tag
		var elem = document.getElementById(swapitem.elemid);
		if (elem != undefined) {
			// select swapimage
			var re = new RegExp('^'+elem.href, 'i');
			var m = re.exec(location.href);
			if (m != null) { 
				current_item = swapitem;
			}
			
			elem.onmouseout = si.onmouseout;
			elem.onmouseover = si.onmouseover;
		}
	}
	// 最下層を選択
	if (current_item != undefined) {
		// detach events
		var current_elem = document.getElementById(current_item.elemid);
		current_elem.onmouseout = function(){};
		current_elem.onmouseover = function(){};
		var img = document.getElementById(current_item.imgid)
		if (img != undefined) {
			var fname = folder + current_item.swapimg + "." + current_item.ext;
			img.src = fname;
		}
	}
}
// --グローバルメニュー

function urlEncode(text){
	// encode: +,=,&
	var encmsg1 = encodeURI(text);
	var encmsg2;
	var re1 = /\+/gi; var re2 = /\=/gi; var re3 = /\&/gi;
	encmsg2 = encmsg1.replace(re1, "%2B"); //+
	encmsg1 = encmsg2.replace(re2, "%3D"); //=
	encmsg2 = encmsg1.replace(re3, "%26"); //&
	return encmsg2;
}

// HTMLの挿入, docは省略化
function setHtml(id, text, doc){
	var d = document;
	if (arguments.length == 3){
		d = doc;
	}
	var elm = d.getElementById(id);
	if (elm){
		elm.innerHTML = text;
	}
}

// リクエスト for ajax
function requestFile(method, fileName, data, async)
{
	var req = createHttpRequest();
	req.open(method ,fileName ,async);
	req.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");

	//受信時に起動するイベント
	req.onreadystatechange = function()
	{ 
		// readyState == 4で受信完了
		if (req.readyState==4)
		{ 
			//コールバックは本体で定義
			onReqLoaded(req);
		}
	}
	req.send(data);
}

// XMLHttpRequestオブジェクト生成  for ajax
function createHttpRequest(){
	// winie用
	if(window.ActiveXObject){
		try {
			// MSXML2
			return new ActiveXObject("Msxml2.XMLHTTP");
		} catch (e) {
			try {
				// 旧MSXML
				return new ActiveXObject("Microsoft.XMLHTTP");
			} catch (e2) {
				return null;
			}
		}
	} else if(window.XMLHttpRequest){
		// winie以外
		return new XMLHttpRequest();
	} else {
		return null;
	}
}


function showConf(msg)
{
	if(confirm(msg)){return true;}else{return false;}
}

function getSelVal(oElem)
{
	var idx = oElem.selectedIndex;
	return oElem.options[idx].value;
}


function MM_swapImgRestore() { //v3.0
  var i,x,a=document.MM_sr; for(i=0;a&&i<a.length&&(x=a[i])&&x.oSrc;i++) x.src=x.oSrc;
}

function MM_preloadImages() { //v3.0
  var d=document; if(d.images){ if(!d.MM_p) d.MM_p=new Array();
    var i,j=d.MM_p.length,a=MM_preloadImages.arguments; for(i=0; i<a.length; i++)
    if (a[i].indexOf("#")!=0){ d.MM_p[j]=new Image; d.MM_p[j++].src=a[i];}}
}

function MM_findObj(n, d) { //v3.0
  var p,i,x;  if(!d) d=document; if((p=n.indexOf("?"))>0&&parent.frames.length) {
    d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);}
  if(!(x=d[n])&&d.all) x=d.all[n]; for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n];
  for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=MM_findObj(n,d.layers[i].document); return x;
}

function MM_swapImage() { //v3.0
  var i,j=0,x,a=MM_swapImage.arguments; 
  document.MM_sr=new Array;
  for(i=0;i<(a.length-2);i+=3)
   if ((x=MM_findObj(a[i]))!=null){document.MM_sr[j++]=x; if(!x.oSrc) x.oSrc=x.src; x.src=a[i+2];}
}

// デフォルトの前処理
function init() {
	var imgfolder = "/common/images/";
	MM_preloadImages(
		imgfolder+'n2_bookmark.gif',
		imgfolder+'n2_bookmark_a.gif',
		imgfolder+'n2_event.gif',
		imgfolder+'n2_event_a.gif',
		imgfolder+'n2_evrnt.gif',
		imgfolder+'n2_forum.gif',
		imgfolder+'n2_forum-a.gif',
		imgfolder+'n2_vote .gif',
		imgfolder+'n2_vote.gif',
		imgfolder+'n2_vote_a.gif',
		imgfolder+'n-ad.gif',
		imgfolder+'n-ad-a.gif',
		imgfolder+'n-affliate.gif',
		imgfolder+'n-affliate-a.gif',
		imgfolder+'n-blog.gif',
		imgfolder+'n-blog-a.gif',
		imgfolder+'n-catalog.gif',
		imgfolder+'n-catalog-a.gif',
		imgfolder+'n-column.gif',
		imgfolder+'n-column-a.gif',
		imgfolder+'n-community.gif',
		imgfolder+'n-community-a.gif',
		imgfolder+'new.gif',
		imgfolder+'n-guide.gif',
		imgfolder+'n-guide-a.gif',
		imgfolder+'n-home.gif',
		imgfolder+'n-home-a.gif',
		imgfolder+'n-log.gif',
		imgfolder+'n-log-a.gif',
		imgfolder+'n-news.gif',
		imgfolder+'n-news-a.gif',
		imgfolder+'n-overseas.gif',
		imgfolder+'n-overseas-a.gif',
		imgfolder+'n-seosem.gif',
		imgfolder+'n-seosem-a.gif',
		imgfolder+'n-talk.gif',
		imgfolder+'n-talk-a.gif'
	);
}


function changeMsgList(oSelect, thread_id)
{
	var idx = oSelect.selectedIndex;
	var ltype = oSelect.options[idx].value;
	location.href='/forum/message.aspx?thid=' + thread_id + '&ltype=' + ltype
}

function getaddr(enddom, startdom, user, islink)
{
	var email = user + '@' + startdom + enddom;
	var link = email;
	if (islink)
		link = '<a href="mailto:'+email+'">'+email+'</a>';
		
	document.write(link);
}

// サブウインドウを表示
function openSubWin(url, target, width, height, topOffset, noRetObj)
{
	winTop = window.screenTop;
	winLeft = window.screenLeft;
	winWidth = window.document.body.clientWidth;
	winHeigth = window.document.body.clientHeight;
	
	var docLeft = winLeft + winWidth - width;
	var docTop = winTop + topOffset;

	argstr = 'width=' + width + ',height=' + height + ',' +
			'left=' + docLeft + ',top=' + docTop + ',screenX=' + docLeft + ',screenY=' + docTop + ',' +
			'scrollbars=1,resizable=1,status=0,location=0';

	var subwin = window.open(url,target,argstr);
	subwin.focus();
	if (noRetObj){
		return;
	} else {
		return subwin;
	}
}




// <input name="dfProduct:_ctl376" type="button" value="入力行追加" onclick="addMediaRow(1, 'dfProduct_tblMediaList_Table','dfProduct_tblMediaList', new Array('0','','<input type=\'button\' value=\'削除\' onclick=\'deleteRow();\'>'), true, new Array('1=CD-ROM','2=フロッピーディスク','5=付録冊子','6=DVD'));" />
//<input name="dfProduct:tblMediaList" id="dfProduct_tblMediaList" type="hidden" value="0" />

// おすすめ行追加
function addRowRecom(doc, inputBaseName, cellDataList, headerExists)
{
	var rowCountId = inputBaseName.replace(/:/g,'_');
	var tableId = rowCountId+"_table";
	var inputName = inputBaseName+"_table";

	// テーブルを取得する
	var oTable = doc.getElementById(tableId);
	// 行カウンタを取得する
	var oRowCount = doc.getElementById(rowCountId);

	// ヘッダを考慮して１行へらす
	var rowLen = oRowCount.value;
	if (headerExists)
	{
		rowLen--;
	}
	// １増やす
	rowLen++;
	
	// add dynamic select menu
	cellDataList[0] = '<input type="hidden" size="4" name="' + createRowControlName(inputName, rowLen, 0) + '" value="' + cellDataList[0] + '" />'+cellDataList[0];
	
	//cellDataList[1] = cellDataList[1];
	
	cellDataList[2] = '<textarea rows="3" cols="60" name="' + createRowControlName(inputName, rowLen, 2) + '"></textarea>';
	
	cellDataList[3] = '<input type="text" size="2" name="' + createRowControlName(inputName, rowLen, 3) + '" value="' + cellDataList[3] + '" />';

	cellDataList[4] = createDelRowButton();

	addRowCount(oTable, oRowCount, cellDataList, headerExists);

	//alert(oTable.outerHTML + '    ' + oRowCount.value);
}


// 投票行追加
function addRowVote(doc, tableId, rowCountId, inputName, cellDataList, headerExists, optionList)
{
	// テーブルを取得する
	var oTable = doc.getElementById(tableId);
	// 行カウンタを取得する
	var oRowCount = doc.getElementById(rowCountId);

	// ヘッダを考慮して１行へらす
	var rowLen = oRowCount.value;
	if (headerExists)
	{
		rowLen--;
	}
	// １増やす
	rowLen++;
	
	//var scriptText = new Array(2);

	// add dynamic select menu
	cellDataList[0] = '<input type="hidden" size="4" name="' + createRowControlName(inputName, rowLen, 0) + '" value="' + cellDataList[0] + '" />' + cellDataList[0];
	cellDataList[1] = '<input type="text" size="30" name="' + createRowControlName(inputName, rowLen, 1) + '" value="' + cellDataList[1] + '" />';
	
	addRowCount(oTable, oRowCount, cellDataList, headerExists);

	//alert(oTable.outerHTML + '    ' + oRowCount.value);
}

// カテゴリ行追加
function addRowCategory(doc, inputBaseName, cellDataList, headerExists)
{
	var rowCountId = inputBaseName.replace(/:/g,'_');
	var tableId = rowCountId+"_table";
	var inputName = inputBaseName+"_table";

	// テーブルを取得する
	var oTable = doc.getElementById(tableId);
	// 行カウンタを取得する
	var oRowCount = doc.getElementById(rowCountId);

	// ヘッダを考慮して１行へらす
	var rowLen = oRowCount.value;
	if (headerExists)
	{
		rowLen--;
	}
	// １増やす
	rowLen++;
	
	//var scriptText = new Array(2);

	// add dynamic select menu

	cellDataList[0] = '<input type="text" size="4" name="' + createRowControlName(inputName, rowLen, 0) + '" value="' + cellDataList[0] + '" />';
	
	cellDataList[1] = '<input type="text" size="30" name="' + createRowControlName(inputName, rowLen, 1) + '" value="' + cellDataList[1] + '" />';
	
	cellDataList[2] = '<input type="text" size="4" name="' + createRowControlName(inputName, rowLen, 2) + '" value="' + cellDataList[2] + '" />';
	
	cellDataList[3] = createDelRowButton();
	
	addRowCount(oTable, oRowCount, cellDataList, headerExists);
}

// 著者行追加
function addRowAuthor(doc, inputBaseName, cellDataList, headerExists)
{
	var rowCountId = inputBaseName.replace(/:/g,'_');
	var tableId = rowCountId+"_table";
	var inputName = inputBaseName+"_table";
	
	// テーブルを取得する
	var oTable = doc.getElementById(tableId);
	// 行カウンタを取得する
	var oRowCount = doc.getElementById(rowCountId);

	// ヘッダを考慮して１行へらす
	var rowLen = oRowCount.value;
	if (headerExists)
	{
		rowLen--;
	}
	// １増やす
	rowLen++;
	
	cellDataList[0] = '<input type="text" size="4" name="' + createRowControlName(inputName, rowLen, 0) + '" value="' + cellDataList[0] + '" />';

	cellDataList[1] = '<input type="text" size="30" name="' + createRowControlName(inputName, rowLen, 1) + '" value="' + cellDataList[1] + '" />';

	cellDataList[2] = createSelectControl(createRowControlName(inputName, rowLen, 2), cellDataList[2], "");
	
	cellDataList[3] = createDelRowButton();

	addRowCount(oTable, oRowCount, cellDataList, headerExists);

	//alert(oTable.outerHTML + '    ' + oRowCount.value);
}

// add related article row
function addRowArticle(doc, inputBaseName, cellDataList, headerExists)
{
	var rowCountId = inputBaseName.replace(/:/g,'_');
	var tableId = rowCountId+"_table";
	var inputName = inputBaseName+"_table";

	// テーブルを取得する
	var oTable = doc.getElementById(tableId);
	// 行カウンタを取得する
	var oRowCount = doc.getElementById(rowCountId);

	// ヘッダを考慮して１行へらす
	var rowLen = oRowCount.value;
	if (headerExists)
	{
		rowLen--;
	}
	// １増やす
	rowLen++;
	

	cellDataList[0] = '<input type="text" size="4" name="' + createRowControlName(inputName, rowLen, 0) + '" value="' + cellDataList[0] + '" />';
	
	cellDataList[1] = '<input type="text" size="30" name="' + createRowControlName(inputName, rowLen, 1) + '" value="' + cellDataList[1] + '" />';
	
	cellDataList[2] = createDelRowButton();

	addRowCount(oTable, oRowCount, cellDataList, headerExists);

	//alert(oTable.outerHTML + '    ' + oRowCount.value);
}


// 行コントロールの名前を作成
function createRowControlName(inputName, rowLen, cellIndex)
{
	return inputName + ':_ctl' + rowLen + ':_ctl' + cellIndex + ':row';
}

// 行の追加
function addRowCount(oTable, oRowCount, cellDataList, headerExists)
{
	var oRow = oTable.insertRow(oTable.rows.length);
	//Cell情報追加
	var oCell;
	for(i = 0 ; i < cellDataList.length; i++)
	{
		oCell = oRow.insertCell(i);
		oCell.innerHTML = cellDataList[i];
	}
	// 行番号は常に追加する（削除されたものは考慮しない）
	var rowLen = oRowCount.value;

	rowLen++
	oRowCount.value = rowLen;

}


//クリックした行を削除する
function deleteRow(element) {
	// firefox event or ie event
	var e;
	if (window.event == undefined) {
		e = arguments.callee.caller.arguments[0]
	} else {
		e = window.event;
	}

	var elem = e.target || e.srcElement; // input
	var tr = elem.parentNode.parentNode;
	var tbl = tr.parentNode.parentNode;
	tbl.deleteRow(tr.rowIndex);
}

// delete row button
function createDelRowButton() {
	var btn = '<input type="button" value="削除" onclick="deleteRow();">';
	return btn;
}


// Option要素配列からSelectメニューの作成
function createSelectControl(controlName, optionList, scriptText)
{
	var onChangeScript = '';
	if (scriptText != ""){
		onChangeScript = 'onchange="'+scriptText+'"';
	}

	var oSelHtml = '<select name="'+controlName+'"'+onChangeScript+'>';
	for(i = 0 ; i < optionList.length; i++)
	{
		// ex) id=title
		var optionItem = optionList[i].split("=");
		oSelHtml += '<option value="'+optionItem[0]+'">'+optionItem[1]+'</option>';
	}
	oSelHtml += '</select>';
	
	return oSelHtml;
}




// フォームの入力チェック関係
// 引数に何をチェックするか指定する：例）NUM:ラベル=ctrlId1,ラベル=ctrlId2;EMAIL:ラベル=ctrlId1;EMPTY:ラベル=ctrlId1;DATE:ラベル=ctrlId1
function checkInputError(oForm, idPrefix, checkArgs)
{

	var errorArray = new Array();
	var errorControl;
	var validInput = true;
	var checkGroup = checkArgs.split(";");			// ; で分割


	for(i = 0; i < checkGroup.length; i++)
	{		
		var checkItem	= checkGroup[i].split(":");	// : で分割
		var checkType	= checkItem[0];
		var ctrlIdList = "";
		if (checkItem.length > 1)
		{
			ctrlIdList	= checkItem[1].split(",");	// , で分割
		}

		for(j = 0; j < ctrlIdList.length; j++)
		{
			// ラベルと分ける
			var ctrlItem = ctrlIdList[j].split("=");	// = で分割
			var ctrlLabel = ctrlItem[0];
			var ctrlId = "";
			if (ctrlItem.length > 1)
			{
				ctrlId = ctrlItem[1];
			}
			
			var ctrlError = false;
			// コントロールの検索
			var elementId = ctrlId;
			if (idPrefix != "")
			{
				elementId = idPrefix + "_" + ctrlId;
			}
			oControl = document.getElementById(elementId);
			if (oControl == null)
			{
				// コントロールが見つからなければ何もしない
				continue;
			}
			else
			{				
				// タイプ別に分岐
				if (checkType == "NUM")
				{
					if (isInputErrorNum(oControl))
					{
						ctrlError = true;	// エラー発生
						errorArray.push(ctrlLabel + "は数字のみを入力してください。");
					}
				}
				else if (checkType == "EMAIL")
				{
					if(isInputErrorEmail(oControl))
					{
						ctrlError = true;	// エラー発生
						errorArray.push(ctrlLabel + "はEメールアドレス形式で入力してください。");
					}
				}
				else if (checkType == "EMPTY")
				{
					if(isInputErrorEmpty(oControl))
					{
						ctrlError = true;	// エラー発生
						errorArray.push(ctrlLabel + "が空です。何か入力してください。");
					}
				}
				else if (checkType == "DATE")
				{
					if(isInputErrorDate(oControl))
					{
						ctrlError = true;	// エラー発生
						errorArray.push(ctrlLabel + "は日付形式（yyyy/MM/dd）で入力してください。");
					}
				}
				
				// 最初のエラーだけ確保する
				if ((validInput) && (ctrlError))
				{
					validInput = false;		// エラー発生
					errorControl = oControl	// エラーの発生したコントロールを確保
				}
			}
		}
	}

	// エラーの表示
	if (validInput == false)
	{
		var errorMsg = "";
		for(x = 0; x < errorArray.length; x++)
		{
			errorMsg += errorArray[x] + "\n";
		}
		alert(errorMsg);
		errorControl.focus();
	}

	return validInput;
}

// コントロールのタイプにしたがって値を取得する
function GetControlValue(oControl)
{
	var ctrlValue = new Array();
	if ((oControl.type == "text") || (oControl.type == "textarea") || (oControl.type == "password"))
	{
		ctrlValue.push(oControl.value);
	}
	else if (oControl.type == "select-one")
	{
		index = oControl.selectedIndex;
		ctrlValue.push(oControl.options[index].value);
	}	
	else if (oControl.type == "radio")
	{
	}
	else if (oControl.type == "checkbox")
	{
	}
	
	return ctrlValue;
}


// 空文字でエラー
function isInputErrorEmpty(oControl)
{
	var err = false;
	
	var valueList = GetControlValue(oControl);
	for(k = 0; k < valueList.length; k++)
	{
		if(valueList[k] == "")
		{
			err = true;
			break;
		}
	}
	return err;
}
// 数字のみか？
function isInputErrorNum(oControl)
{
	var err = false;

	var valueList = GetControlValue(oControl);
	for(k = 0; k < valueList.length; k++)
	{
		if((isNum(valueList[k]) == false) && (valueList[k] != ""))
		{
			err = true;
			break;
		}

	}
	return err;
}

// 入力がEメールか
function isInputErrorEmail(oControl)
{
	var err = false;

	var valueList = GetControlValue(oControl);
	for(k = 0; k < valueList.length; k++)
	{
		if((isEmail(valueList[k]) == false) && (valueList[k] != ""))
		{
			err = true;
			break;
		}
	}

	return err;
}


// 入力が日付か？
function isInputErrorDate(oControl)
{
	var err = false;

	var valueList = GetControlValue(oControl);
	for(k = 0; k < valueList.length; k++)
	{
		if((isDate(valueList[k]) == false) && (valueList[k] != ""))
		{
			err = true;
			break;
		}
	}
	return err;
}

// 文字列チェックルーチン
function isNum(str)
{
	var result = true;
	// 数字以外の文字があったらエラー
	if (str.match(/[^0-9]/i)) {
		result = false;
	}
	return result;
}
function isEmail(str)
{
	var result = false;
	if (str.match(/[a-z0-9\-\+\.]+@\w+([-.]\w+)*\.\w+([-.]\w+)*/i)) {
		result = true;
	}
	return result;	
}
function isDate(str)
{
	var result = false;
	if (str.match(/[0-9][0-9][0-9][0-9]\/[0-9]?[0-9]\/[0-9]?[0-9]/i)) {
		result = true;
	}
	return result;
}
function isZip(str)
{
	var result = false;
	if (str.match(/\d{3}(-(\d{4}|\d{2}))?/i)) {
		result = true;
	}
	return result;
}
function isTel(str)
{
	var result = false;
	if (str.match(/(0\d{1,4}-|\(0\d{1,4}\) ?)?\d{1,4}-\d{4}/i)) {
		result = true;
	}
	return result;
}


// create flash control
function CreateFlash(flashid, srcpath, width, height, cssclass) {
	
	var flash_tag = '<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="' + location.protocol + '://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=7,0,0,0" width="'+width+'" height="'+height+'" id="'+flashid+'" align="middle">'+
	'<param name="allowScriptAccess" value="sameDomain" />' +
	'<param name="movie" value="'+srcpath+'" />' +
	'<param name="quality" value="high" />' +
	'<param name="bgcolor" value="#ffffff" />' +
	'<embed src="'+srcpath+'" quality="high" bgcolor="#ffffff" width="'+width+'" height="'+height+'" name="'+flashid+'" align="middle" allowScriptAccess="sameDomain" type="application/x-shockwave-flash" pluginspage="' + location.protocol + '://www.macromedia.com/go/getflashplayer" />'+
	'</object>';
	
	document.write('<div class="'+cssclass+'">' + flash_tag + '</div>');
}



// for debug
function dumpobj(obj) {
	for(var prop in obj) {
		try {
			window.document.writeln(prop+' = '+obj[prop]+'<br>');
		} catch(e) {
		}
	}
}

// printf.js - version 1.1.0
//
//  Copyright (C) 2000-2002  Masanao Izumo <iz@onicos.co.jp>
//
//  This library is free software; you can redistribute it and/or
//  modify it under the terms of the GNU Lesser General Public
//  License as published by the Free Software Foundation; either
//  version 2.1 of the License, or (at your option) any later version.
//
//  This library is distributed in the hope that it will be useful,
//  but WITHOUT ANY WARRANTY; without even the implied warranty of
//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
//  Lesser General Public License for more details.
//
//  You should have received a copy of the GNU Lesser General Public
//  License along with this library; if not, write to the Free Software
//  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
//
//
// SYNOPSIS:
//   printf("format", ...);
//   str = sprintf("format", ...);
//
// Chages:
// 2002-02-04  Masanao Izumo <mo@goice.co.jp>
//             - Fixed bug about sprintf("%%") will return "%%".
//             - Evaluate undefined "%" argument.  That is:
//                   numerical value ===> 0	(%d, %x, %o, etc)
//                   string value    ===> ''	(%s)

// printf(format, ...);
function printf() {
  document.write(va_sprintf(printf.arguments));
}

// str = sprintf(format, ...);
function sprintf() {
  return va_sprintf(sprintf.arguments);
}

function va_sprintf(args) {
  var ch;
  var value;
  var longflag;
  var ljust;
  var len, llen;
  var zpad;
  var p;
  var output;
  var format_index, arg_index;
  var argc, argv;
  var specin;
  var format;

  output = '';
  format_index = 0;
  arg_index = 1;
  argv = args;
  argc = args.length;
  format = args[0];

  while (format_index < format.length) {
    ch = format.substr(format_index++, 1);
    if (ch != '%' || format_index == format.length) {
      output += ch;
    } else {
      // ch == '%'
      ljust = len = zpad = longflag = 0;
      llen = -1;
      p = format_index;
      specin = true;

      while (specin) {
	ch = format.substr(format_index++, 1);
	switch(ch) {
	case '-':
	  ljust = 1;
          continue;

	case '0':         // set zero padding if len not set
	  if(len == 0)
	    zpad = 1;
	  // FALLTHROUGH
	case '1': case '2': case '3':
	case '4': case '5': case '6':
	case '7': case '8': case '9':
	  len = len * 10 + parseInt(ch);
	  continue;

	case '.':
	  llen = len;
	  len = 0;
	  continue;

	case '*':
	  if (arg_index < argc)
	    len = parseInt(argv[arg_index++]);
	  else
	    len = 0;
	  if (len < 0) {
	    ljust = 1;
	    len = -len;
	  }
	  continue;

	case 'l':
	  longflag = 1;
	  continue;

	case 'u': case 'U':
	  if (arg_index < argc) {
	    if (longflag) {
	      value = parseInt(argv[arg_index++]);
	    } else {
	      value = parseInt(argv[arg_index++]);
	      value %= 4294967296;
	    }
	  } else {
	    value = 0;
	  }
	  output += _dopr_fmtnum(value, 10,0, ljust, len, zpad);
	  break;

	case 'o': case 'O':
	  if (arg_index < argc) {
	    if (longflag) {
	      value = parseInt(argv[arg_index++]);
	    } else {
	      value = parseInt(argv[arg_index++]);
	      value %= 4294967296;
	    }
	  } else {
	    value = 0;
	  }
	  output += _dopr_fmtnum(value, 8,0, ljust, len, zpad);
	  break;

	case 'd': case 'D':
	  if (arg_index < argc) {
	    if (longflag) {
	      value = parseInt(argv[arg_index++]);
	    } else {
	      value = parseInt(argv[arg_index++]);
	      value %= 4294967296;
	    }
	  } else {
	    value = 0;
	  }
	  output += _dopr_fmtnum(value, 10,1, ljust, len, zpad);
	  break;

	case 'x':
	  if (arg_index < argc) {
	    if (longflag) {
	      value = parseInt(argv[arg_index++]);
	    } else {
	      value = parseInt(argv[arg_index++]);
	      value %= 4294967296;
	    }
	  } else {
	    value = 0;
	  }
	  output += _dopr_fmtnum(value, 16,0, ljust, len, zpad);
	  break;

	case 'X':
	  if (arg_index < argc) {
	    if (longflag) {
	      value = parseInt(argv[arg_index++]);
	    } else {
	      value = parseInt(argv[arg_index++]);
	      value %= 4294967296;
	    }
	  } else {
	    value = 0;
	  }
	  output += _dopr_fmtnum(value, -16,0, ljust, len, zpad);
	  break;

	case 's':
	  if (arg_index < argc) {
	    value = argv[arg_index++];
	    if(value == null)
	      value = "(null)";
	    else
	      value = value + "";	// toString
	  } else {
	    value = '';
	  }
	  output += _dopr_fmtstr(value, ljust, len, llen);
	  break;

	case 'c':
	  if (arg_index < argc) {
	    value = parseInt(argv[arg_index++]);
	  } else {
	    value = 0;
	  }
	  output += _dopr_fromCharCode(value);
	  break;

	case '%':
	  output += '%';
	  break;

/* Not supported
	case 'f': case 'e': case 'E': case 'g': case 'G':
	  if (arg_index < argc) {
	    value = argv[arg_index++];
	  } else {
	    value = 0.0;
	  }
	  output += _dopr_fmtdouble(format.substr(p, format_index - p), value);
	  break;
*/

	default:
	  if(p + 1 == format_index) {
	    output += '%';
	    output += ch;
	  }
	  else {
	    // alert("format error: " + format);
	  }
	  break;
	}
	specin = false;
      }
    }
  }
  return output;
}

// Private function
function _dopr_fmtnum(value, base, dosign, ljust, len, zpad)
{
  var signvalue = '';
  var uvalue;
  var place = 0;
  var padlen;		// amount to pad
  var caps = 0;
  var convert;
  var output;

  convert = '';
  output = '';

  if(value >= 0)
    uvalue = value;
  else
    uvalue = (value % 4294967296) + 4294967296;

  if (dosign) {
    if (value < 0) {
      signvalue = '-';
      uvalue = -value;
    }
  }

  if (base < 0) {
    caps = 1;
    base = -base;
  }

  if(uvalue == 0) {
    convert = '0';
    place = 1;
  } else {
    while (uvalue) {
      if(caps)
	convert = '0123456789ABCDEF'.substr(uvalue % base, 1) + convert;
      else
	convert = '0123456789abcdef'.substr(uvalue % base, 1) + convert;
      uvalue = parseInt(uvalue / base);
      place++;
    }
  }

  padlen = len - place;
  if (padlen < 0) padlen = 0;
  if (ljust) padlen = -padlen;

  if (zpad && padlen > 0) {
    if(signvalue) {
      output += signvalue;
      --padlen;
      signvalue = 0;
    }

    while (padlen > 0) {
      output += '0';
      --padlen;
    }
  }

  while (padlen > 0) {
    output += ' ';
    --padlen;
  }
  if (signvalue) {
    output += signvalue;
  }

  output += convert;
        
  while(padlen < 0) {
    output += ' ';
    ++padlen;
  }
  return output;
}

// Private function
function _dopr_fmtstr(value, ljust, field_len, llen)
{
  var padlen;			// amount to pad
  var slen, truncstr = 0;
  var output = '';

  slen = value.length;

  if (llen != -1) {
    var rlen;

    rlen = field_len;
    if (slen > rlen) {
      truncstr = 1;
      slen = rlen;
    }
    field_len = llen;
  }
  padlen = field_len - slen;
        
  if (padlen < 0)
    padlen = 0;
  if (ljust)
    padlen = -padlen;
  while (padlen > 0) {
    output += ' ';
    --padlen;
  }
  if (truncstr) {
    output += value.substr(0, slen);
  } else {
    output += value;
  }

  while (padlen < 0) {
    output += ' ';
    ++padlen;
  }
  return output;
}

// Private function
var _dopr_fromCharCode_chars = null;
function _dopr_fromCharCode(code)
{
  if(String.fromCharCode)
    return String.fromCharCode(code);
  if(!_dopr_fromCharCode_chars)
    _dopr_fromCharCode_chars =
      "\000\001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020" +
      "\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037 !\"#$%&" +
      "'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghi" +
      "jklmnopqrstuvwxyz{|}~\177\200\201\202\203\204\205\206\207\210\211" +
      "\212\213\214\215\216\217\220\221\222\223\224\225\226\227\230\231\232" +
      "\233\234\235\236\237\240\241\242\243\244\245\246\247\250\251\252\253" +
      "\254\255\256\257\260\261\262\263\264\265\266\267\270\271\272\273\274" +
      "\275\276\277\300\301\302\303\304\305\306\307\310\311\312\313\314\315" +
      "\316\317\320\321\322\323\324\325\326\327\330\331\332\333\334\335\336" +
      "\337\340\341\342\343\344\345\346\347\350\351\352\353\354\355\356\357" +
      "\360\361\362\363\364\365\366\367\370\371\372\373\374\375\376\377";
  if(code < 0)
    return "";
  if(code <= 255)
    return _dopr_fromCharCode_chars.substr(code, 1);
  return eval(sprintf("\"\\u%04x\"", code));
}


// SiteCatalyst
function arena_click(o){
	sumitem_click(o,'Arena Click');
}
function hottopics_click(o){
	sumitem_click(o,'Hottopics Click');
}
function sumitem_click(o,t){
	var s=s_gi(s_account);
	s.linkTrackVars='products,eVar14,events';
	s.linkTrackEvents='event5';
	s.events='event5';
	s.eVar14=(o.innerText ? o.innerText : o.textContent);
	s.tl(this,'o',t);
}

