document.write("<script type='text/javascript' src='_js/contents.js'></script>");
document.write("<script type='text/javascript' src='./_js/cookiemanager.js'></script>");
document.write("<script type='text/javascript' src='./libs.js'></script>");

var widget_col_num = 2;
var manager;
var contents;
var chart_max = 2;


function addWidget(element)
{
	addContent(element.id, -1, -1);
	Element.hide(element.id);
	
	var addspan = $(element.id + "_on");
	if(addspan)
	{
		Element.show(element.id + "_on");
	}
	
}

function countChart()
{
	var c_exists = new Array();
	var c_count = 0;
	for(var ci=0;ci<widget_col_num;ci++)
	{
		var num = parseInt(manager.getCookie('num' + ci));
		
		for(var ri=0;ri<num;ri++)
		{
			var contentkey = manager.getCookie(ci+'_'+ri);
			if(contentkey)
			{
				if(contentkey.substring(contentkey.length - 2) ==  "_s")
				{
					contentkey = contentkey.substring(0, contentkey.length - 2);
				}
			}
			
			var chart_no = null;
			if(contentkey.indexOf('chart') == 0)
			{
				chart_no = contentkey.substring(5, 6);
			}
			if(!chart_no)
				continue;
			if(!(chart_no > 0))
				continue;
			
			c_exists[chart_no-1] = 1;
			c_count ++;
		}
	}
	
	var chart_min = 1;
	for(var ci=1;ci<=chart_max;ci++)
	{
		if(!c_exists[ci-1])
		{
			chart_min = ci;
			break;
		}
	}
	
	return new Array(c_count, chart_min);
}

function addChartWidget(element)
{
	//チャートを検索.
	var carrs = countChart();
	
	if(carrs[0] < chart_max)
	{
		var id = "chart"+carrs[1];
		addContent(id, -1, -1);
	}
	
	attachChartButton();
}

function attachChartButton()
{
	var carrs = countChart();
	
	if($("chart"))
	{
		if(carrs[0] >= chart_max)
		{
			Element.hide("chart");
			Element.show("chart" + "_on");
		}
		else
		{
			Element.show("chart");
			Element.hide("chart" + "_on");
		}
		$("chart-content_num").innerHTML = chart_max - carrs[0];
	}
}

function attachButton()
{
	attachChartButton();
	
	var keys = contents.keys();
	
	for(var ii=0;ii<keys.length;ii++)
	{
		if($(contents.get(keys[ii]).getAttribute('id') + "_on"))
		{
			Element.hide(contents.get(keys[ii]).getAttribute('id') + "_on");
		}
	}

	for(var ci=0;ci<widget_col_num;ci++)
	{
		var num = parseInt(manager.getCookie('num' + ci));
		
		var del_flag = false;
		for(var ri=0;ri<num;ri++)
		{
			var contentkey = manager.getCookie(ci+'_'+ri);
			if(contentkey)
			{
				if(contentkey.substring(contentkey.length - 2) ==  "_s")
				{
					contentkey = contentkey.substring(0, contentkey.length - 2);
				}
			}
			
			var btn = $(contentkey);
			
			if(btn)
			{
				Element.hide(contentkey);
				Element.show(contentkey + "_on");
			}
		}
	}
}

function startWidget()
{
	initCookie();
	
	//コンテンツの取得.
	loadXml(loadContentsXml,"./_xml/contents.xml");
	loadContentsXml();
}


function initCookie()
{
	//cookieの初期化.
	manager = new CookieManager();
}

function loadCookies()
{
//	clearCookies();
	var inited = manager.getCookie('inited');
	
	if(inited != 't')
	{
		defaultCookies();
	}

	attachButton();
}

//cookieを初期化.
function defaultCookies()
{
	clearCookies();
	
	var keys = contents.keys();
	
	for(var ii=0;ii<keys.length;ii++)
	{
		if(def = contents.get(keys[ii]).getAttribute('default'))
		{
			addContent(keys[ii], def, -1);
		}
	}
	
	manager.setCookie('inited', 't')
}

function clearCookies()
{
	printd("clearCookies");
	manager.clearCookie('inited');
	for(var ci=0;ci<widget_col_num;ci++)
	{
		manager.setCookie('num' + ci, "0");
	}
}

//colno = 0〜2
function addContent(contentid, colno, rowno)
{
	delContent(contentid);
	
	// -1が指定されれば自動的に一番少ない列へ.
	if(colno == -1)
	{
		var min_colno = 0;
		for(var ci=1;ci<widget_col_num;ci++)
		{
			if(parseInt(manager.getCookie('num' + ci)) < parseInt(manager.getCookie('num' + min_colno)))
			{
				min_colno = ci;
			}
		}
		
		colno = min_colno;
	}
	
	var num = parseInt(manager.getCookie('num' + colno));
	
	// -1が指定されれば自動的に末尾へ.
	if(rowno == -1)
	{
		rowno = num;
	}
	
	var ci = colno;
	for(var ri=num;ri>rowno;ri--)
	{
		manager.setCookie(ci+'_'+ri, manager.getCookie(ci+'_'+(ri-1)));
	}
	manager.setCookie(ci+'_'+rowno,  new String(contentid));
	manager.setCookie('num'+colno,  new String(parseInt(num)+1));
}

function delContent(contentid)
{
	for(var ci=0;ci<widget_col_num;ci++)
	{
		var num = parseInt(manager.getCookie('num' + ci));
		
		var del_flag = false;
		for(var ri=0;ri<num;ri++)
		{
			var contentkey = manager.getCookie(ci+'_'+ri);
			if(contentkey)
			{
				if(contentkey.substring(contentkey.length - 2) ==  "_s")
				{
					contentkey = contentkey.substring(0, contentkey.length - 2);
				}
			}
			if(contentkey == contentid)
			{
				manager.clearCookie(ci+'_'+ri);
				manager.setCookie('num' + ci,  new String(num-1));
				del_flag = true;
			}
			
			if(del_flag && ri+1<num)
			{
				manager.setCookie(ci+'_'+ri, manager.getCookie(ci+'_'+(ri+1)));
				manager.clearCookie(ci+'_'+(ri+1));
			}
		}
	}
}


function loadXml(funcname, xmlurl)
{
	var ajax = new Ajax.Request(xmlurl, { method:'get', onComplete: funcname});
}

//function loadContentsXml(res)
function loadContentsXml()
{
//	var xcontents = res.responseXML.getElementsByTagName('content');
	
	contents = $H({});
	for(var ci=0;ci<xcontents.length;ci++)
	{
		var xcontent = xcontents[ci];
		if(!xcontent.getAttribute)
		{
			xcontent.getAttribute = function(name)
			{
				return this[name];
			};
		}
		
		contents.set(xcontents[ci].getAttribute('id'), xcontents[ci]);
	}
	
	loadCookies();
}


function printd(str)
{
	if($("debug"))
	{
		Element.update('debug', str + "<br>" + $("debug").innerHTML);
	}
}

