/*
	スタイルシート切り替えスクリプト
	Resource: http://critical.s6.xrea.com/web/cssselect.shtml
	First Author: Ichiyu ( http://critical.s6.xrea.com/ )

	Patched by: ^2 ( http://kozoh.net/ )
*/


if ( document.styleSheets
 && !(navigator.userAgent.indexOf("Mac_PowerPC") != -1
 && navigator.userAgent.indexOf("MSIE 4") != -1)) {
/* Scriptでスタイルシートを扱えるブラウザのみ実行される */

/* 以下設定 */

	label = "スタイル選択:"; // 選択フォーム左の文字列
	cdomain = "kozoh.net"; // サイトのドメイン名
	cpath = "/"; // サイトのパス
	cdays = 366; // クッキーの有効日数 0 = ブラウザ終了まで
	insertform = true;
	/*
		選択フォームを自動的に挿入するかどうか
		true = 挿入する
		false = 挿入しない(手動でフォームを書き込む)
	*/
	targetelement = "address"; 
	/*
		選択フォームは、ここで指定した要素で一番最初に現れるものの
		直前に挿入される(自動的に挿入するとき)
	*/
	addss = false;
	/*
		スタイルシートを追加するかどうか
		true = 追加する
		false = 追加しない
	*/
	addstyles = new Array(
		'No.1' , 'http://?/cssno1.css' ,
		'No.2' , 'http://?/cssno2.css' );
	/* 追加するスタイルシートを名前とURLの組で指定する */

	/* 以上設定 */

	main();
}

/* メイン関数 */
function main()
{
	IsGecko = (navigator.product == "Gecko");
	sfTitles = "";
	writeafter = false;

	if(addss) {
		userstyles = fGetCookie('userstyles');
		if (userstyles != 'noCookie') {
			var addstylesstring = addstyles.join(',') + ',' + userstyles;
			addstyles = addstylesstring.split(',');
		}
		for (i = 0; i < addstyles.length; i += 2){
			fAddLink(addstyles[i + 1], addstyles[i]);
		}
	}

	sheet = fGetCookie('sheet');

	/* クッキーが無い時(^2追加分) */
	if((sheet == null) || (sheet == "") || (sheet == "noCookie")) {
		sheet = "Basic Theme";
	}

	if(!IsGecko) {
		/* Mozillaでないとき、スタイルシートの一覧を取得し既定のスタイルに切り替える */
		fGetStyleTitles();
		if(sfTitles.indexOf(sheet) == -1) {
			sheet = sS[1].title;
		}
		fChangeSS(sheet);
	} else if(sheet != "noCookie") {
		document.write('<meta http-equiv="default-style" content="'+ sheet +'" />');
	}

	/*
		Mozillaのとき、最初にスタイルシートの一覧を取得すると不具合を生じるので、
		meta要素で既定のスタイルを設定する
	*/
	window.onload = fInit;
	window.onunload = fEnd;
}

/* スタイルシートの一覧を取得 */
function fGetStyleTitles()
{
	sfTitles += "No Theme";
	sfTitles += ",";
	sfTitles += "Basic Theme";

	sS = document.styleSheets;
	for(i = 0; i < sS.length; i++) {
		if (sS[i].title) {
			if (sfTitles.indexOf(sS[i].title) == -1) {
				sfTitles += ",";
				sfTitles += sS[i].title;
			}
		}
	}

	sfTitle = sfTitles.split(",");

}

/* クッキーを取得 */
function fGetCookie(cName)
{
	var c = document.cookie, a, b;
	if(c.indexOf(cName + '=') != -1){
		a = c.indexOf(cName + '=');
		b = c.indexOf(';', a + cName.length + 1);
		if(b == -1) {
			b = c.length;
		}
		return unescape(c.substring(a + cName.length + 1, b));
	}
	return 'noCookie';
}

/* クッキーを設定 */
function fSetCookie(cName,cTitle)
{
	var eTitle = escape(cTitle), c;
	var cexpires = new Date();
	if (cTitle != '') {
		cexpires.setTime(cexpires.getTime() + 1000 * 60 * 60 * 24 * cdays);
	} else {
		cexpires.setTime(cexpires.getTime() - 1000 * 60 * 60 * 24);
	}

	c = cName + '=' + eTitle + '; domain=' + cdomain + '; path=' + cpath
		+ ((cdays!=0)?('; expires=' + cexpires.toGMTString()):';');
	document.cookie = c;
}

/* スタイルシートの動的切り替え */
function fChangeSS(ssTitle)
{
	if(!document.styleSheets) {
		return;
	}

	if(ssTitle == "No Theme") {
		/* CSSをOFFにする */
		fTurnOffSS();
	} else {
		/* 指定のCSSを有効にする */
		for(i = 0; i < sS.length; i++) {
			sS[i].disabled = ((sS[i].title == ssTitle) || (!sS[i].title)) ? false : true;
		}
	}
	fSetCookie('sheet', ssTitle);
}

/* 選択されたスタイルシートに切り替える */
function fSelectSS(obj)
{
	var index = obj.selectedIndex;
	sheet = obj.value;
	fChangeSS(sheet);
	window.focus();
	obj.selectedIndex = index;
}

/* ページが読み込まれたときの処理 */
function fInit()
{
	if(IsGecko){
		/* Mozillaのとき、ここでスタイルシートの一覧を取得する */
		fGetStyleTitles();
		if((sheet != "No Theme") && (sheet != "Basic Theme")) {
			if(sfTitles.indexOf(sheet) == -1) {
				sheet = sS[0].title;
			}
		}
		fChangeSS(sheet);
	}
	if (insertform) fAddForm();
	if (writeafter) fWriteAfter();
}

/* 選択フォームを追加する */
function fAddForm()
{
	var obj;
	if(document.all) {
		obj = document.all.tags(targetelement).item(0);
	} else if(document.getElementsByTagName) {
		obj = document.getElementsByTagName(targetelement).item(0);
	}

	if(!obj) return;
	fMakeHTML();

	if(document.all) {
		obj.insertAdjacentHTML('beforeBegin',
			'<div class="selectsheet">' + nHTML + '</div>');
	} else {
		var nDIV = document.createElement('div');
		nDIV.innerHTML = nHTML;
		nDIV.className = "selectsheet";
		obj.parentNode.insertBefore(nDIV, obj); 
	}
}

/* 選択フォームのHTMLを作成する */
function fMakeHTML()
{
	nHTML = '<label>' + label +
		'<select name="selectss" onchange="fSelectSS(this);">';
	for(i = 0; i < sfTitle.length; i++){
		nHTML += '<option value="';
		nHTML += sfTitle[i];
		nHTML += (sfTitle[i] == sheet) ? '" selected="selected">' : '">';
		nHTML += sfTitle[i];
		nHTML += '</option>';
	}
	nHTML+='</select></label>';
}

/* 選択フォームを書き出す */
function fWriteForm()
{
	if(document.styleSheets){
		if(!IsGecko){
			fMakeHTML();
			document.write('<div class="selectsheet">',nHTML,'</div>');
		} else {
			document.write('<div class="selectsheet" id="selectform"></div>');
			writeafter = true;
		}
	}
}

/* 選択フォームの中身を後で生成(Gecko用) */
function fWriteAfter()
{
	var obj;
	obj = document.getElementById("selectform");
	if(!obj) return;
	fMakeHTML();
	obj.innerHTML = nHTML;
}


/* 終了処理 */
function fEnd()
{
	fReadSS();
	if (NowSheet != sheet) {
		fSetCookie('sheet',NowSheet);
	}
}

/* 現在適用されているスタイルシートを読み込む */
function fReadSS()
{
	var sS = document.styleSheets;
	NowSheet = "Basic Theme";

	/* alternate stylesheet name */
	for(i = 0; i < sS.length; i++) {
		if ((!sS[i].disabled) && (sS[i].title)) {
			NowSheet = sS[i].title;
		}
	}

	/* all disabled check */
	sCssOffFlag = false;
	sCssOffCnt = 0;
	for(i = 0; i < sS.length; i++) {
		if (sS[i].disabled) {
			sCssOffCnt++;
		}
	}

	if(sCssOffCnt == sS.length) {
		sCssOffFlag = true;
	}

	if(sCssOffFlag) {
		NowSheet = "No Theme";
	}
}

/* スタイルシート追加 */
function fAddLink(ssurl, sstitle)
{
	if(document.all){
		var nLink = document.createStyleSheet(ssurl);
		nLink.title = sstitle;
		nLink.disabled = true;
	} else if(document.styleSheets) {
		var nLink = document.createElement('link');
		nLink.rel = "alternate stylesheet";
		nLink.type = "text/css";
		nLink.href = ssurl;
		nLink.title = sstitle;
		var oHEAD = document.getElementsByTagName('head').item(0);
		oHEAD.appendChild(nLink);
	}
}


/* 以降追加(^2) */
/* スタイルシートをOFF */
function fTurnOffSS()
{
	var ss = document.styleSheets;
	for(var i = 0; i < ss.length; i++) {
		ss.item(i).disabled = true;
	}
}
