/************************************************
 * 
 * スイッチャー用:スタイル変動処理
 * 
 * DEPENDENCIES
 *  - /p_skin/cmn/js/stylecommon.js
 *  - /p_skin/cmn/js/styleinc.js
 *  - /p_skin/?/js/config_2column.js
 *  - /p_skin/?/js/config_3column.js
 * 
 * Author        : $Author: akasaka_y $
 * Last Modified : $Date: 2007/08/13 03:15:19 $
 * Version       : $Revision: 1.6 $
 * 
 * (c) CYBER AGENT.LTD
 * 
 ************************************************/
/**
 * 初期処理
 */
function setInitial() {
	// マウスポインタがある時の背景画像の点滅を回避
	// (IE 5.0,IE 5.2,IE 5.5,IE 6.0, hover,background)
	try {
		document.execCommand("BackgroundImageCache", false, true);
	} catch(err) {}

	var i;
	var getCookie = null;
	var initial = 'initial';
	var checkNowStyleList = '';
	if (debugMode) {
		checkNowStyleList += '** 初期化前 ： リセット値 | 現在値'+"\n";
		for (i in classId) {checkNowStyleList += classId[i]+' = '+resetStyle[i]+' | '+nowStyle[i]+"\n";}
	}

//	setStyleReset();
	setSidebar('reset');
	getCookie = cookie.readStyleCookie(nowStyle);
	if(getCookie != null){
		nowStyle = getCookie;
	}
	setSidebar(initial);
	setColor(initial);
	showAllSidebar(initial);
	setFontSize(initial);
	setFontFamily(initial);
	setLang(initial);
	SetOnClick();

	if (debugMode) {
		checkNowStyleList += "\n"+'** 初期化後 ： リセット値 | 現在値'+"\n";
		for (i in classId) {checkNowStyleList += classId[i]+' = '+resetStyle[i]+' | '+nowStyle[i]+"\n";}
		alert(checkNowStyleList);
	}
}

/**
 * スタイルリセット
 */
function setStyleReset() {
	var reset = 'reset';
	setSidebar(reset);
	setColor(reset);
	showAllSidebar(reset);
	setFontSize(reset);
	setFontFamily(reset);
	setLang(reset);
}

/**
 * スタイル変動アイコンonClick処理セット
 */
function SetOnClick() {
	if (document.getElementById('changeLang')) {
		document.getElementById('changeLang').onclick = setLang;
	}
	if (document.getElementById('plusFont')) {
		document.getElementById('plusFont').onclick = setFontSizeUp;
	}
	if (document.getElementById('minusFont')) {
		document.getElementById('minusFont').onclick = setFontSizeDown;
	}
	if (document.getElementById('changeFont')) {
		document.getElementById('changeFont').onclick = setFontFamily;
	}
	if (document.getElementById('changeColor')) {
		document.getElementById('changeColor').onclick = setColor;
	}
	if (document.getElementById('resizeWidth')) {
		document.getElementById('resizeWidth').onclick = setWidth;
	}
	if (document.getElementById('changeSidebar')) {
		document.getElementById('changeSidebar').onclick = setSidebar;
	}
	if (document.getElementById('styleCookie')) {
		document.getElementById('styleCookie').onclick = confirmCreateCookies;
	}
	if (document.getElementById('styleReset')) {
		document.getElementById('styleReset').onclick = setStyleReset;
	}
	if (document.getElementById('setPrint')) {
		document.getElementById('setPrint').onclick = printOut;
	}
}

/**
 * クッキー保存確認
 */
function confirmCreateCookies() {
	var flag = confirm("現在の画面デザインを\nクッキーに保存しますか？");
	if (flag) {
		cookie.createStyleCookie(nowStyle);
		alert("保存しました");
	}
}

/**
 * 言語変動
 */
function setLang(mode) {
	var id = classId['lang'];
	var next = nowStyle[id];
	var lang = new Array();
	lang['main'] = 'On';
	lang['sub']  = 'On';

	if (mode == 'reset') {
		next = resetStyle[id];
	} else if (mode != 'initial') {
		if(next == 0) {
			next = 1;
		} else {
			if (setStyle[id].length <= 2) {
				next = 0;
			} else if (next == 1) {
				next = 2;
			} else {
				next = 0;
			}
		}
	}

	if (next == 1) {lang['sub']  = 'Off';}
	else if (next == 2) {lang['main']  = 'Off';}
	style.changeTagByOneClass(setStyle[id+'Tag'], setStyle[id+'Class'][0], setStyle[id+lang['main']][0]);
	style.changeTagByOneClass(setStyle[id+'Tag'], setStyle[id+'Class'][1], setStyle[id+lang['sub']][1]);
	nowStyle[id] = next;
}

/**
 * フォントサイズ変動
 */
function setFontSize(mode) {
	var id = classId['fontSize'];
	var next = nowStyle[id];

	if (mode == 'up') {
		if (next+1 < setStyle[id+'Class'].length && next+1 >= 0) {
			addRangeClass(id, next);
		}
	} else if (mode == 'down') {
		if (next-1 < setStyle[id+'Class'].length && next-1 >= 0) {
			subtractRangeClass(id, next);
		}
	} else if (mode == 'reset') {
		addRangeClass(id, -9);
	} else {
		addRangeClass(id, -1);
	}
}
function setFontSizeUp() {setFontSize('up');}
function setFontSizeDown() {setFontSize('down');}

/**
 * 書体変動
 */
function setFontFamily(mode) {
	var id = classId['fontFamily'];
	if (mode == 'reset') {addRangeClass(id, -9);}
	else if (mode == 'initial') {addRangeClass(id, -1);}
	else {addRangeClass(id, nowStyle[id]);}
}

/**
 * 色変動
 */
function setColor(mode) {
	for (var i=0, len=setStyle['colorList'].length; i < len; i++) {
		if (mode == 'reset') {
			addRangeClass(classId[setStyle['colorList'][i]], -9);
		} else if (mode == 'initial') {
			addRangeClass(classId[setStyle['colorList'][i]], -1);
		} else {
			addRangeClass(classId[setStyle['colorList'][i]], nowStyle[setStyle['colorList'][i]]);
		}
	}
}

/**
 * フラッシュ用色変動
 */
function changeColorByFlash(id, className) {
	if (className == null) {className = "bgColor7";}
	if (classId[className] != null) {
		var now_style = setStyle[className+'Class'][nowStyle[className]];
		var change_style = setStyle[className+'Class'][id];
		style.changeTagByPluralClass(setStyle[className+'Tag'], now_style, change_style);
		nowStyle[className] = id;
	}
	if (debugMode) {
		alert("style="+style.toString()+"\nchangeColorByFlash("+id+")"+"\nnow_style="+now_style+"\nchange_style="+change_style+"\ndocument.getElementById(mainIndex).className="+document.getElementById("mainIndex").className);
	}
}

/**
 * サイドバー配置変動
 */
function setSidebar(mode) {
	var next = 0;
	var id = classId['sidebar'];
	var styleName = id;

	if (mode == 'reset' && resetStyle['width'] == 1) {
		styleName = classId['width'];
	} else if (mode != 'reset' && nowStyle['width'] == 1) {
		styleName = classId['width'];
	} else {
		nowStyle['width'] = 0;
	}

	if (mode == 'reset') {
		next = resetStyle[id];
	} else if (mode == 'initial') {
		next = nowStyle[id];
	} else if (nowStyle[id]+1 < setStyle[id+'Class'].length && nowStyle[id]+1 > 0) {
		next = nowStyle[id]+1;
	}
	next = parseInt(next);

	css.changePluralCSS(setStyle[styleName+'Class'][next], id);
	nowStyle[id] = next;
}

/**
 * 横幅固定←→可変変動
 */
function setWidth() {
	var id = classId['width'];
	if (nowStyle[id] != 1) {nowStyle[id] = 1;}
	else {nowStyle[id] = 0;}
	setSidebar('initial');
}

/**
 * 全サイドバー開閉変動
 */
function showAllSidebar(mode) {
	var id = classId['showSidebar'];
	var show = setStyle[id+'Class'];

	if (sidebarItems == null) {return;}
	else if (sidebarItems.length == 0) {return;}

	if (mode == 'reset') {
		for (var i=0, len=sidebarItems.length; i < len; i++) {
			style.changeIdByClass(sidebarItems[i], setStyle[id+show[resetStyle[id][i]]]);
			nowStyle[id][i] = resetStyle[id][i];
		}
	} else {
		for (var i=0, len=sidebarItems.length; i < len; i++) {
			style.changeIdByClass(sidebarItems[i], setStyle[id+show[nowStyle[id][i]]]);
		}
	}
}

/**
 * サイドバー開閉 (sidebarItemsで指定されたidのみ動作する)
 * 
 * @param String idName ID名
 */
function showSidebar(idName) {
	var id = classId['showSidebar'];
	var show = setStyle[id+'Class'];
	var checkID = searchArray(idName, sidebarItems);
	if (checkID != null && document.getElementById) {
		if (document.getElementById(idName).className != setStyle[id+show[0]]) {
			style.changeIdByClass(idName, setStyle[id+show[0]]);
			nowStyle[id][checkID] = 0;
		} else {
			style.changeIdByClass(idName, setStyle[id+show[1]]);
			nowStyle[id][checkID] = 1;
		}

		// サイドバーの表示は１つのみにする場合は実行
		if (sidebarAllOneFlag != null) {
			if (sidebarAllOneFlag == true) {
				for (var i=0, len=sidebarItems.length; i < len; i++) {
					if (sidebarItems[i] != idName 
					&& document.getElementById(sidebarItems[i]))
					{
						if (document.getElementById(sidebarItems[i]).className != setStyle[id+show[0]]) {
							style.changeIdByClass(sidebarItems[i], setStyle[id+show[0]]);
						}
					}
				}
			}
		}
	}
}

/**
 * 指定id名のクラス属性変動
 * 
 * @param String idName ID名
 * @param String onClassName 表示用クラス名
 * @param String offClassName 非表示用クラス名
 */
function showItemById(idName, onClassName, offClassName) {
	if (document.getElementById(idName)) {
		if (document.getElementById(idName).className != onClassName) {
			style.changeIdByClass(idName, onClassName);
		} else {
			style.changeIdByClass(idName, offClassName);
		}
	}
}

/**
 * 指定されたクラス名配列の範囲内を加算変動
 * 
 * @param String className クラス名
 * @param int    mode モード：9=リセット値,-1=現クラス,それ以外=範囲内加算
 */
function addRangeClass(className, mode) {
	var next = 0;
	var now_style = setStyle[className+'Class'][nowStyle[className]];
	var change_style = setStyle[className+'Class'][resetStyle[className]];

	if (mode == -9) {
		next = resetStyle[className];
	} else if (mode == -1) {
		now_style = setStyle[className+'Class'][resetStyle[className]];
		next = nowStyle[className];
	} else if (mode+1 < setStyle[className+'Class'].length && mode+1 >= 0) {
		next = mode+1;
	}

	if (mode != -9) {change_style = setStyle[className+'Class'][next];}
	style.changeTagByPluralClass(setStyle[className+'Tag'], now_style, change_style);
	nowStyle[className] = next;
}

/**
 * 指定されたクラス名配列の範囲内を引算変動
 * 
 * @param String className クラス名
 * @param int    mode モード：9=リセット値,-1=現クラス,それ以外=範囲内引算
 */
function subtractRangeClass(className, mode) {
	var next = 0;
	var now_style = setStyle[className+'Class'][nowStyle[className]];
	var change_style = setStyle[className+'Class'][resetStyle[className]];

	if (mode == -9) {
		next = resetStyle[className];
	} else if (mode == -1) {
		now_style = setStyle[className+'Class'][resetStyle[className]];
		next = nowStyle[className];
	} else if (mode-1 < setStyle[className+'Class'].length && mode-1 >= 0) {
		next = mode-1;
	}

	if (mode != -9) {change_style = setStyle[className+'Class'][next];}
	style.changeTagByPluralClass(setStyle[className+'Tag'], now_style, change_style);
	nowStyle[className] = next;
}