/*
	assist.js
	http://asamuzak.jp
*/

/*	汎用関数	*/
/*	MSIE判別	*/
var isMSIE = /*@cc_on!@*/false;
var ieVersion = (function(reg) { return isMSIE && navigator.userAgent.match(reg) ? RegExp.$1 * 1 : null; })(/MSIE\s([0-9]+[\.0-9]*)/);

/*	addEvent()
	addEventListener互換	*/
function addEvent(target, type, listener) {
	target.addEventListener ? target.addEventListener(type, listener, false) :
	target.attachEvent ? target.attachEvent('on' + type, function() { listener.call(target, window.event) }) :
	target['on' + type] = function(e) { listener.call(target, e || window.event) };
}

/*	getCompStyle()
	getComputedStyle互換	*/
function getCompStyle(elm, pseudo) {
	return isMSIE && ieVersion < 9 ? elm.currentStyle : pseudo != null ? document.defaultView.getComputedStyle(elm, pseudo) : document.defaultView.getComputedStyle(elm, '');
}

/*	setXmlHttp()
	AJAX、XMLHttpRequest互換	*/
function setXmlHttp() {
	var xmlHttp;
	if(window.XMLHttpRequest){
		xmlHttp = new XMLHttpRequest();
	}
	else {
		if(window.ActiveXObject) {
			xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
		}
		else {
			xmlHttp = null;
		}
	}
	return xmlHttp;
}

/*	absPath()
	相対パスを絶対パスに変換	*/
function absPath(oPath) {
	var elm = document.createElement('span');
	elm.innerHTML = '<a href="' + oPath + '" />';
	var aPath = elm.firstChild.href;
	elm = null;
	return aPath;
}

/*	getPrevSibling()
	直前にある同一階層の要素を取得	*/
function getPrevSibling(pElm) {
	return pElm.nodeType == 1 ? pElm : (pElm = pElm.previousSibling, pElm != null ? getPrevSibling(pElm) : null);
}

/*	getGeneralObj()
	同一階層の要素を取得（配列）	*/
function getGeneralObj(pElm) {
	var arr = [];
	for((pElm = pElm.previousSibling) && pElm.nodeType == 1 && (arr[arr.length] = pElm); pElm != null;) {
		(pElm = pElm.previousSibling) && pElm.nodeType == 1 && (arr[arr.length] = pElm);
	}
	return arr;
}

/*	getAncestObj()
	祖先要素の取得（配列）	*/
function getAncestObj(pElm) {
	var arr = [];
	if(pElm = pElm.parentNode) {
		for(arr[arr.length] = pElm; pElm.nodeName.toLowerCase() != "body";) {
			(pElm = pElm.parentNode) && (arr[arr.length] = pElm);
		}
	}
	return arr;
}

/*	convPercentTo256()
	色の%値を256値に変換	*/
function convPercentTo256(cProf) {
	if(cProf.match(/(rgba?)\(\s*([0-9\.]+%?\s*,\s*[0-9\.]+%?\s*,\s*[0-9\.]+%?)\s*(,\s*[01]?[\.0-9]*)?\s*\)/)) {
		for(var cType = RegExp.$1, arr = RegExp.$2.split(/,/), aCh = (RegExp.$3 || ''), rgbArr = [], i = 0, l = arr.length; i < l; i++) {
			arr[i].match(/([0-9\.]+)%/) && (arr[i] = Math.round(RegExp.$1 * 255 / 100));
			rgbArr[rgbArr.length] = arr[i];
		}
		return cType + '(' + rgbArr.join(',') + aCh + ')';
	}
}

/*	convUnitToPx()
	単位をpxに変換	*/
function convUnitToPx(sUnit, obj) {
	var getUnitRatio = function(sUnit) {
		var elm, val, dId = cNum(), dBox = document.createElement('div'), dBody = document.getElementsByTagName('body')[0];
		dBox.id = 'dummyDiv' + dId;	dId++;
		dBox.style.width = sUnit;
		dBox.style.height = 0;
		dBox.style.visibility = 'hidden';
		dBody.appendChild(dBox);
		elm = document.getElementById(dBox.id);
		val = Math.abs(elm.getBoundingClientRect().right - elm.getBoundingClientRect().left);
		dBody.removeChild(elm);
		return val;
	};
	if(sUnit.match(/^0(em|ex|px|cm|mm|in|pt|pc)?$/)) {
		return 0;
	}
	else if(sUnit.match(/^(\-?[0-9\.]+)px$/)) {
		return RegExp.$1 * 1;
	}
	else if(sUnit.match(/^(\-?[0-9\.]+)(cm|mm|in|pt|pc)$/)) {
		return RegExp.$1 * 1 >= 0 ? getUnitRatio(sUnit) : getUnitRatio((RegExp.$1 * -1) + RegExp.$2) * -1;
	}
	else if(sUnit.match(/^(\-?[0-9\.]+)(em|ex)$/)) {
		var val = RegExp.$1 * 1 >= 0 ? (getUnitRatio(sUnit) / getUnitRatio('1em')) : (getUnitRatio((RegExp.$1 * -1) + RegExp.$2) / getUnitRatio('1em') * -1), arr = getAncestObj(obj), dRoot = document.getElementsByTagName('html')[0], fSize = [];
		arr.unshift(obj);	arr[arr.length] = dRoot;
		for(var i = 0, l = arr.length; i < l; i++) {
			fSize[fSize.length] = getCompStyle(arr[i]).fontSize;
		}
		for(i = 0, l = fSize.length; i < l; i++) {
			if(fSize[i].match(/^([0-9\.]+)%$/)) {
				val *= (RegExp.$1 / 100);
			}
			else if(fSize[i].match(/^[0-9\.]+(em|ex)$/)) {
				val *= (getUnitRatio(fSize[i]) / getUnitRatio('1em'));
			}
			else if(fSize[i].match(/^smaller$/)) {
				val /= 1.2;
			}
			else if(fSize[i].match(/^larger$/)) {
				val *= 1.2;
			}
			else if(fSize[i].match(/^([0-9\.]+)(px|cm|mm|in|pt|pc)$/)) {
				val *= getUnitRatio(fSize[i]);
				break;
			}
			else if(fSize[i].match(/^xx\-small$/)) {
				val *= (getUnitRatio(getCompStyle(dRoot).fontSize) / 1.728);
				break;
			}
			else if(fSize[i].match(/^x\-small$/)) {
				val *= (getUnitRatio(getCompStyle(dRoot).fontSize) / 1.44);
				break;
			}
			else if(fSize[i].match(/^small$/)) {
				val *= (getUnitRatio(getCompStyle(dRoot).fontSize) / 1.2);
				break;
			}
			else if(fSize[i].match(/^medium$/)){
				val *= getUnitRatio(getCompStyle(dRoot).fontSize);
				break;
			}
			else if(fSize[i].match(/^large$/)) {
				val *= (getUnitRatio(getCompStyle(dRoot).fontSize) * 1.2);
				break;
			}
			else if(fSize[i].match(/^x\-large$/)) {
				val *= (getUnitRatio(getCompStyle(dRoot).fontSize) * 1.44);
				break;
			}
			else if(fSize[i].match(/^xx\-large$/)) {
				val *= (getUnitRatio(getCompStyle(dRoot).fontSize) * 1.728);
				break;
			}
			else if(fSize[i].match(/^([0-9\.]+)([a-z]+)/)) {
				val *= getUnitRatio(fSize[i]);
				break;
			}
			else {
				break;
			}
		}
		return Math.round(val);
	}
}

/*	getCssValues()
	CSSから特定のプロパティの値を取得	*/
function getCssValues(prop) {
	var getCssRules = function(sSheet) {
		for(var arr = [], sRules = sSheet.cssRules || sSheet.rules, i = 0, l = sRules.length; i < l; i++) {
			if(sRules[i].type) {
				sRules[i].type == 3 && (arr = arr.concat(getCssRules(sRules[i].styleSheet)));
				if(sRules[i].type == 4) {
					/*
					* matchMedia() polyfill - test whether a CSS media type or media query applies
					* authors: Scott Jehl, Paul Irish, Nicholas Zakas
					* Copyright (c) 2011 Scott, Paul and Nicholas.
					* Dual MIT/BSD license
					* Original Source matchMedia.js https://github.com/paulirish/matchMedia.js
					* Revised by Kazz http://asamuzak.jp
					*/
					window.matchMedia = window.matchMedia || (function() {
						return function(q) {
							var bool,
								dHead = document.getElementsByTagName('head')[0],
								dBody = document.getElementsByTagName('body')[0],
								dStyle = document.createElement('style'),
								dDiv = document.createElement('div'),
								dId = cNum();
							dDiv.id = 'dDiv' + dId;	dId++;
							dDiv.style.cssText = 'margin:0;border:0;padding:0;height:0;visibility:hidden;';
							dHead.appendChild(dStyle);
							dBody.appendChild(dDiv);
							dStyle.setAttribute('media', q);
							dStyle.innerHTML = '#' + dDiv.id + '{ width:42px; }';
							bool = dDiv.offsetWidth == 42;
							dBody.removeChild(dDiv);
							dHead.removeChild(dStyle);
							return { matches: bool, media: q };
						};
					})();
					/* end matchMedia.js */
					window.matchMedia(sRules[i].media.mediaText).matches && (arr = arr.concat(getCssRules(sRules[i])));
				}
				sRules[i].type == 1 && sRules[i].style.cssText.match(sReg) && (arr[arr.length] = { sel : sRules[i].selectorText, prop : prop, val : sRules[i].style.getPropertyPriority(prop) ? RegExp.$1 + ' !important' : RegExp.$1 });
			}
			else {
				var sText = sRules[i].style.cssText || sRules[i].cssText;
				if(sText) {
					sText.match(sReg) && (arr[arr.length] = { sel : sRules[i].selectorText, prop : prop, val : RegExp.$1 });
				}
			}
		}
		return arr;
	};
	var sReg = prop.match(/(\-)/) ? prop.replace(RegExp.$1, '\\\-') : prop;
	sReg += '\\s*:\\s*([0-9a-zA-Z\\s\\-\\+\\*\\\&#\\.\\(\\)%\\,\\!\\"\\\'\\>\\<\\\\]+);?';
	if(document.styleSheets) {
		for(var arr = [], sArr = document.styleSheets, i = 0, l = sArr.length; i < l; i++) {
			if(isMSIE && ieVersion < 9 && sArr[i].imports) {
				for(var iArr = sArr[i].imports, j = 0, k = iArr.length; j < k; j++) {
					iArr[j] != undefined && (arr = arr.concat(getCssRules(iArr[j])));
				}
			}
			arr = arr.concat(getCssRules(sArr[i]));
		}
	}
	for(var aTag = document.getElementsByTagName('*'), oId = cNum(), i = 0, l = aTag.length; i < l; i++) {
		if(aTag[i].style != null && aTag[i].style.cssText.match(sReg)) {
			aTag[i].id == '' && (aTag[i].id = 'objId' + oId, oId++);
			arr[arr.length] = { sel : '#' + aTag[i].id, prop : prop, val : RegExp.$1 };
		}
	}
	return arr;
}

/*	removeDupFunc()
	重複関数を除去	*/
function removeDupFunc(fStr) {
	for(var arr = fStr.replace(/\s+/, '').split(/;/), fArr = [], bool, i = 0, l = arr.length; i < l; i++) {
		bool = true;
		for(var j = i; j < l; j++) {
			i != j && arr[i] == arr[j] && (bool = false);
		}
		bool && arr[i] != '' && (fArr[fArr.length] = arr[i]);
	}
	return fArr.join(';') + ';';
}

/*	revArr()
	逆順配列	*/
var revArr = function(arr) {
	for(var rArr = [], i = 0, l = arr.length; i < l; i++) {
		rArr.unshift(arr[i]);
	}
	return rArr;
};

/*	cNum()
	カウントアップ値	*/
var cNum = (function(n) { return function() { return n++; }})(0);

/*	showElm(), hideElm()
	visibility切り替え	*/
function showElm(eId) {
	var elm = document.getElementById(eId);
	elm && (elm.style.visibility = 'visible');
}
function hideElm(eId) {
	var elm = document.getElementById(eId);
	elm && (elm.style.visibility = 'hidden');
}

/*	textShadowForMSIE()
	MSIE7～9にtext-shadow擬きを適用	*/
function textShadowForMSIE(eObj) {
	var ieShadowSettings = function() {
		if(isMSIE) {
			if(eObj) {
				var arr = [];
				arr[arr.length] = eObj;
				return arr;
			}
			else {
				var sArr = [];
				// sArr = cssShadowValues();
				//	自動的にスタイルシートからtext-shadow値を読み込みます
				//	使用したい場合は上記1行（sArr = cssShadowValues();）のコメントマークを外すこと
				//	Loads text-shadow values from stylesheets automatically.
				//	If you want to do so, strip the comment mark at the line above (sArr = cssShadowValues();).
				var arr = [
					// ここ（arr = [];内）にtext-shadowを適用させるセレクタの配列を記述
					// セレクタ毎に「カンマ区切り」で配列を追加（カンマを忘れるとエラー発生）
					// Write your text-shadow settings here, like below.
					// { sel : 'h1', shadow : '2px 2px 2px gray' },
					// { sel : 'em', shadow : '1px 1px 1px rgb(0, 100, 100) !important' }
					{ sel : 'h1', shadow : '0 1px 1px rgb(230, 230, 216), 0 -1px 1px rgb(68, 33, 27)' },
					{ sel : 'h2', shadow : '-1px 1px 1px rgba(230, 230, 216, 0.3)' },
					{ sel : '#global-navigation a', shadow : '0 -1px 0 rgba(107, 74, 43, 0.5)' },
					{ sel : '#global-navigation a:hover', shadow : '0 0 0 rgba(230, 230, 216, 0.5), 0 -1px 0 rgba(107, 74, 43, 0.5)' }
				];
				if(ieVersion == 8) {
					var lArr = [
						{ sel : 'h2', shadow : '-1px 1px 0 rgba(230, 230, 216, 0.3)' },
						{ sel : '#global-navigation a', shadow : 'none' },
						{ sel : '#global-navigation a:hover', shadow : 'none' }
					];
					arr = arr.concat(lArr);
				}
				for(var sReg = /text\-shadow\s*:\s*([0-9a-zA-Z\s\-\+\*\&#\.\(\)%\,\!\"\\'\>\<\\]+);?/, aTag = document.getElementsByTagName('*'), oId = cNum(), i = 0, l = aTag.length; i < l; i++) {
					if(aTag[i].style != null && aTag[i].style.cssText.match(sReg)) {
						aTag[i].id == '' && (aTag[i].id = 'objId' + oId, oId++);
						arr[arr.length] = { sel : '#' + aTag[i].id, shadow : RegExp.$1 };
					}
				}
				return sArr.concat(arr);
			}
		}
		else {
			return null;
		}
	};
	var setShadow = function(tObj) {
		var setShadowNodeColor = function(elm) {
			for(var arr = elm.childNodes, i = 0, l = arr.length; i < l; i++) {
				if(arr[i].nodeType == 1) {
					!arr[i].hasChildNodes() ? arr[i].style.visibility = 'hidden' : (arr[i].style.color = elm.style.color, setShadowNodeColor(arr[i]));
				}
			}
		};
		var hideAncestShadow = function(oElm, pElm) {
			for(var arr = pElm.childNodes, i = 0, l = arr.length; i < l; i++) {
				if(arr[i].hasChildNodes()) {
					arr[i].nodeName.toLowerCase() == oElm.tagName.toLowerCase() && arr[i].firstChild.nodeValue == oElm.firstChild.nodeValue ? arr[i].style.visibility = 'hidden' : hideAncestShadow(oElm, arr[i]);
				}
			}
		};
		var boolShadowChild = function(elm) {
			for(var bool = true, arr = getAncestObj(elm), i = 0, l = arr.length; i < l; i++) {
				if(arr[i].tagName.toLowerCase() == 'span' && arr[i].className.match(/dummyShadow/)) {
					bool = false;
					break;
				}
			}
			return bool;
		};
		if(tObj.shadow != 'invalid') {
			for(var arr = [], nArr = tObj.elm.childNodes, bool = false, i = 0, l = nArr.length; i < l; i++) {
				if(nArr[i].nodeName.toLowerCase() == 'span' && nArr[i].className.match(/dummyShadow/)) {
					nArr[i].className.match(/hasImp/) && (bool = true);
					arr[arr.length] = nArr[i].id;
				}
			}
			if(bool == false || tObj.hasImp == true) {
				var mOver = tObj.elm.getAttribute('onmouseover') || '';
				var mOut = tObj.elm.getAttribute('onmouseout') || '';
				mOver != '' && !mOver.match(/;$/) && (mOver += ';');
				mOut != '' && !mOut.match(/;$/) && (mOut += ';');
				for(i = 0, l = arr.length; i < l; i++) {
					if(tObj.onHover && tObj.shadow == 'none') {
						mOver += "hideElm('" + arr[i] + "');";
						mOut += "showElm('" + arr[i] + "');";
					}
					else if(!(tObj.onHover && tObj.shadow != 'none')) {
						tObj.elm.removeChild(document.getElementById(arr[i]));
					}
				}
				tObj.onHover && tObj.shadow == 'none' && (tObj.elm.setAttribute('onmouseover', mOver), tObj.elm.setAttribute('onmouseout', mOut));
				for(var aBg, arr = getAncestObj(tObj.elm), i = 0, l = arr.length; i < l; i++) {
					aBg == null && (getCompStyle(arr[i]).backgroundColor != 'transparent' || getCompStyle(arr[i]).backgroundImage != 'none') && (aBg = arr[i]);
					for(var cArr = arr[i].childNodes, j = 0, k = cArr.length; j < k; j++) {
						cArr[j].nodeType == 1 && cArr[j].nodeName.toLowerCase() == 'span' && cArr[j].className.match(/dummyShadow/) && hideAncestShadow(tObj.elm, document.getElementById(cArr[j].id));
					}
				}
				tObj.shadow != 'none' && tObj.shadow.length > 1 && (getCompStyle(tObj.elm).backgroundColor != 'transparent' || getCompStyle(tObj.elm).backgroundImage != 'none') && (tObj.shadow = revArr(tObj.shadow));
				if(tObj.shadow == 'none' && tObj.onHover == false) {
					for(var arr = tObj.elm.parentNode.childNodes, i = 0, l = arr.length; i < l; i++) {
						if(arr[i].nodeName.toLowerCase() == 'span' && arr[i].className == 'dummyShadow') {
							getCompStyle(tObj.elm).display == 'inline-block' && (tObj.elm.style.display = 'inline');
							getCompStyle(tObj.elm).position == 'relative' && (tObj.elm.style.position = 'static');
							break;
						}
					}
				}
				if(tObj.shadow != 'none' && nArr.length != 0 && boolShadowChild(tObj.elm)) {
					for(var hArr = [], clNode = tObj.elm.cloneNode(true), arr = clNode.childNodes, i = 0, l = arr.length; i < l; i++) {
						arr[i] != null && arr[i].hasChildNodes() && arr[i].nodeName.toLowerCase() == 'span' && arr[i].className.match(/dummyShadow/) && (hArr[hArr.length] = arr[i].id, clNode.removeChild(arr[i]));
					}
					var sNode = clNode.innerHTML;
					ieVersion == 9 && (sNode = sNode.replace(/\n/, ' '));
					ieVersion == 8 && (tObj.elm.innerHTML = tObj.elm.innerHTML);
					for(i = 0, l = tObj.shadow.length; i < l; i++) {
						var pxRad = convUnitToPx(tObj.shadow[i].z, tObj.elm);
						var xPos = convUnitToPx(tObj.shadow[i].x, tObj.elm) - pxRad + convUnitToPx(getCompStyle(tObj.elm).paddingLeft, tObj.elm);
						getCompStyle(tObj.elm).textAlign == 'center' && (xPos -= ((convUnitToPx(getCompStyle(tObj.elm).paddingLeft, tObj.elm) + convUnitToPx(getCompStyle(tObj.elm).paddingRight, tObj.elm)) / 2));
						var yPos = convUnitToPx(tObj.shadow[i].y, tObj.elm) - pxRad + convUnitToPx(getCompStyle(tObj.elm).paddingTop, tObj.elm);
						if(ieVersion == 7 && pxRad == 0) {
							xPos >= 0 && (xPos -= 1);
							yPos >= 0 && (yPos -= 1);
						}
						var sColor = tObj.shadow[i].cProf || getCompStyle(tObj.elm).color;
						var sOpacity = 0.6;	// デフォルトの透過度
						tObj.shadow[i].cProf != null && tObj.shadow[i].cProf.match(/rgba\(\s*([0-9]+\s*,\s*[0-9]+\s*,\s*[0-9]+)\s*,\s*([01]?[\.0-9]*)\)/) && (sColor = 'rgb(' + RegExp.$1 + ')', sOpacity = (RegExp.$2 * 1));
						var sBox = document.createElement('span');
						sBox.id = 'dummyShadow' + sId;	sId++;
						sBox.className = (tObj.hasImp == true) ? 'dummyShadow hasImp' : 'dummyShadow';
						sBox.style.display = 'block';
						sBox.style.position = 'absolute';
						sBox.style.left = xPos + 'px';
						sBox.style.top = yPos + 'px';
						sBox.style.width = '100%';
						sBox.style.color = sColor;
						sBox.style.filter = 'progid:DXImageTransform.Microsoft.Blur(PixelRadius=' + pxRad + ', MakeShadow=false, ShadowOpacity=' + sOpacity + ')';
						sBox.style.zIndex = -(i + 1);
						sBox.innerHTML = sNode;
						if(getCompStyle(tObj.elm).display == 'inline') {
							tObj.elm.style.display = 'inline-block';
						}
						if(!(getCompStyle(tObj.elm).position == 'absolute' || getCompStyle(tObj.elm).position == 'fixed')) {
							tObj.elm.style.position = 'relative';
							ieVersion == 7 && (tObj.elm.style.top = getCompStyle(tObj.elm).paddingTop);
						}
						if(getCompStyle(tObj.elm).backgroundColor != 'transparent' || getCompStyle(tObj.elm).backgroundImage != 'none') {
							getCompStyle(tObj.elm).zIndex != ('auto' || null) ? (sBox.style.zIndex = tObj.elm.style.zIndex) : (tObj.elm.style.zIndex = sBox.style.zIndex = -1);
						}
						if(aBg && aBg.tagName.toLowerCase() != 'body') {
							tObj.elm.style.zIndex = 1; sBox.style.zIndex = -1;
						}
						ieVersion == 7 && getCompStyle(tObj.elm).lineHeight.match(/^([0-9\.]+)(em|ex|px|cm|mm|in|pt|pc|%)?$/) && (tObj.elm.style.minHeight = !RegExp.$2 ? convUnitToPx(RegExp.$1 + 'em', tObj.elm) : RegExp.$2 == '%' ? convUnitToPx((RegExp.$1 / 100) + 'em', tObj.elm) : convUnitToPx(RegExp.$1 + RegExp.$2, tObj.elm));
						tObj.elm.appendChild(sBox);
						if(tObj.onHover) {
							sBox.style.visibility = 'hidden';
							mOver = tObj.elm.getAttribute('onmouseover') || '';
							mOut = tObj.elm.getAttribute('onmouseout') || '';
							mOver != '' && !mOver.match(/;$/) && (mOver += ';');
							mOut != '' && !mOut.match(/;$/) && (mOut += ';');
							mOver += ("showElm('" + sBox.id + "');");
							mOut += ("hideElm('" + sBox.id + "');");
							if(hArr.length > 0) {
								for(j = 0, k = hArr.length; j < k; j++) {
									var hElm = document.getElementById(hArr[j]);
									if(hElm) {
										mOver += ("hideElm('" + hElm.id + "');");
										mOut += ("showElm('" + hElm.id + "');");
									}
								}
							}
							tObj.elm.setAttribute('onmouseover', removeDupFunc(mOver));
							tObj.elm.setAttribute('onmouseout', removeDupFunc(mOut));
						}
						setShadowNodeColor(document.getElementById(sBox.id));
					}
				}
			}
		}
	};
	var getTargetObj = function(sObj) {
		var checkPseudo = function(elm, pArr) {
			var bool = true;
			if(pArr.length > 0) {
				bool = false;	// pseudo疑似クラス/要素には未対応（あったら全てfalse）
			}
			return bool;
		};
		var arr = [];
		if(document.querySelectorAll) {
			arr = document.querySelectorAll(sObj.sel);
		}
		else {	/*	quasi querySelectorAll() for MSIE7 (Beta Version)	*/
			var distinctSelector = function(obj) {
				var xObj = { elm : '*', id : [], eClass : [], pseudo : [], attr : [], rDom : [] };
				var sReg = /(([a-zA-Z\*]{1}[a-zA-Z0-9]*)|(#[a-zA-Z_]{1}[a-zA-Z0-9_\-]*)|(\.[a-zA-Z_]{1}[a-zA-Z0-9_\-]*)|(::?([a-z]{1}[a-z0-9\(\)\-]*))|(\[[a-zA-Z]{2,}.+?\]){1,})+/g;
				var sArr = obj.match(sReg);
				sArr[sArr.length - 1].match(/^([a-zA-Z\*]{1}[a-zA-Z0-9]*)/) && (xObj.elm = RegExp.$1);
				sArr[sArr.length - 1].match(/#[a-zA-Z_]{1}[a-zA-Z0-9_\-]*/) && (xObj.id = sArr[sArr.length - 1].match(/#[a-zA-Z_]{1}[a-zA-Z0-9_\-]*/g));
				for(i = 0, l = xObj.id.length; i < l; i++) {
					xObj.id[i] = xObj.id[i].replace(/#/, '');
				}
				sArr[sArr.length - 1].match(/\.[a-zA-Z_]{1}[a-zA-Z0-9_\-]*/) && (xObj.eClass = sArr[sArr.length - 1].match(/\.[a-zA-Z_]{1}[a-zA-Z0-9_\-]*/g));
				for(i = 0, l = xObj.eClass.length; i < l; i++) {
					xObj.eClass[i] = xObj.eClass[i].replace(/\./, '');
				}
				sArr[sArr.length - 1].match(/::?[a-z]{1}[a-z0-9\(\)\-]*/) && (xObj.pseudo = sArr[sArr.length - 1].match(/::?[a-z]{1}[a-z0-9\(\)\-]*/g));
				for(i = 0, l = xObj.pseudo.length; i < l; i++) {
					xObj.pseudo[i] = xObj.pseudo[i].replace(/::?/, '');
				}
				sArr[sArr.length - 1].match(/\[([a-zA-Z]{2,}.+)\]/) && (xObj.attr = xObj.attr.concat(RegExp.$1.split('][')));
				for(i = 0, l = xObj.attr.length; i < l; i++) {
					xObj.attr[i] = xObj.attr[i].replace(/^\[|\]$/g, '');
				}
				if(xObj.id.length == 0) {
					var arr = document.getElementsByTagName(xObj.elm);
					for(i = 0, l = arr.length; i < l; i++) {
						if(xObj.eClass.length > 0) {
							var bool;
							for(var j = 0, k = xObj.eClass.length; j < k; j++) {
								bool = false;
								if(arr[i].className != null) {
									arr[i].className.match(xObj.eClass[j]) && (bool = true);
								}
								if(bool == false) { break; }
							}
							bool && (xObj.id[xObj.id.length] = arr[i].id);
						}
						else {
							xObj.id[xObj.id.length] = arr[i].id;
						}
					}
				}
				if(sArr.length > 1) {
					for(var i = 0, l = sArr.length - 1; i < l; i++) {
						var regE = new RegExp(sArr[i] + '(.+?)' + sArr[i + 1]);
						if(sObj.sel.match(regE)) {
							xObj.rDom[xObj.rDom.length] = { elm : sArr[i], type : RegExp.$1 == ' ' ? 'descend' :
								RegExp.$1.match(/\>/) ? 'child' :
								RegExp.$1.match(/\+/) ? 'adjacent' :
								RegExp.$1.match(/\~/) ? 'general' : null };
						}
					}
				}
				return xObj;
			};
			var getObj = function(xObj) {
				var compareObj = function(elm, rElm, type) {
					var bool = false;
					if(type == 'child' || type == 'descend') {
						var pElm = elm.parentNode;
						if(rElm.id == pElm.id) {
							bool = true;
						}
						else if(type == 'descend') {
							for(var arr = getAncestObj(elm.parentNode), i = 0, l = arr.length; i < l; i++) {
								if(rElm.id == arr[i].id) {
									bool = true;
									break;
								}
							}
						}
					}
					else if(type == 'adjacent' || type == 'general') {
						if(elm.previousSibling != null) {
							var pElm = getPrevSibling(elm.previousSibling);
							if(rElm.id == pElm.id) {
								bool = true;
							}
							else if(type == 'general' && pElm.previousSibling != null) {
								for(var arr = getGeneralObj(pElm), i = 0, l = arr.length; i < l; i++) {
									if(rElm.id == arr[i].id) {
										bool = true;
										break;
									}
								}
							}
						}
					}
					return bool;
				};
				var checkAttr = function(elm, aArr) {
					var bool = true;
					if(aArr.length > 0) {
						for(var aReg = /^([a-zA-Z]+|data\-.+)([\~\|\^\$\*]?=?)["']?([a-zA-Z0-9_\-]+)["']?$/, arr = [], i = 0, l = aArr.length; i < l; i++) {
							var obj = { attr : '', type : null, val : '' };
							if(aArr[i].match(aReg)) {
								RegExp.$1 && (obj.attr = RegExp.$1);
								RegExp.$2 == '' && RegExp.$3 && (obj.attr = RegExp.$1 + RegExp.$3);
								RegExp.$2 != '' && RegExp.$3 && (obj.type = RegExp.$2, obj.val = RegExp.$3);
							}
							if(elm.getAttributeNode(obj.attr)) {
								bool = false;
								if(elm.getAttributeNode(obj.attr).nodeValue != (null || '')) {
									if(obj.type == null && obj.val == '') {
										bool = true;
									}
									else {
										var attArr = elm.getAttributeNode(obj.attr).nodeValue.split(' ');
										for(var j = 0, k = attArr.length; j < k; j++) {
											if((obj.type == '=' || obj.type == '|=') && obj.val == attArr[j]) {
												bool = true; break;
											}
											else if(obj.type == '~=' && obj.val == attArr[j]) {
												bool = true; break;
											}
											else if(obj.type == '|=' && attArr[j].match('^' + obj.val + '\-')) {
												bool = true; break;
											}
											else if(obj.type == '^=' && attArr[j].match('^' + obj.val)) {
												bool = true; break;
											}
											else if(obj.type == '$=' && attArr[j].match(obj.val + '$')) {
												bool = true; break;
											}
											else if(obj.type == '*=' && attArr[j].match(obj.val)) {
												bool = true; break;
											}
											else {
												bool = false;
											}
										}
									}
								}
								if(bool == false) { break; }
							}
							else {
								bool = false; break;
							}
						}
					}
					return bool;
				};
				var arr = [];
				if(xObj.id.length > 0) {
					for(var i = 0, l = xObj.id.length; i < l; i++) {
						var elm = document.getElementById(xObj.id[i]);
						if(elm) {
							if(xObj.rDom.length == 0) {
								checkPseudo(elm, xObj.pseudo) && checkAttr(elm, xObj.attr) && (arr[arr.length] = elm);
							}
							else if(xObj.rDom.length == 1) {
								var rObj = distinctSelector(xObj.rDom[0].elm);
								if(rObj.id.length > 0) {
									for(var type = xObj.rDom[0].type, j = 0, k = rObj.id.length; j < k; j++) {
										var rElm = document.getElementById(rObj.id[j]);
										rElm && compareObj(elm, rElm, type) && checkPseudo(elm, xObj.pseudo) && checkAttr(elm, xObj.attr) && (arr[arr.length] = elm);
									}
								}
							}
							else if(xObj.rDom.length > 1) {
								for(var j = 0, k = xObj.rDom.length - 1; j < k; j++) {
									var rObj = distinctSelector(xObj.rDom[j + 1].elm);
									if(rObj.id.length > 0) {
										var yObj = { elm : rObj.elm, id : rObj.id, eClass : rObj.eClass, pseudo : rObj.pseudo, attr : rObj.attr, rDom : [{ elm : xObj.rDom[j].elm, type : xObj.rDom[j].type }] };
										var yArr = getObj(yObj);
										var yType = xObj.rDom[j + 1].type;
										if(yType) {
											for(var m = 0, n = yArr.length; m < n; m++) {
												(j == k - 1) && compareObj(elm, yArr[m], yType) && checkPseudo(elm, xObj.pseudo) && checkAttr(elm, xObj.attr) && (arr[arr.length] = elm);
											}
										}
									}
								}
							}
						}
					}
				}
				return arr;
			};
			for(var aTag = document.getElementsByTagName('*'), oId = cNum(), i = 0, l = aTag.length; i < l; i++) {
				aTag[i].id == '' && (aTag[i].id = 'tmpId' + oId, oId++);
			}
			arr = arr.concat(getObj(distinctSelector(sObj.sel)));
		}
		if(arr.length > 0) {
			for(var i = 0, l = arr.length; i < l; i++) {
				sObj.elm = arr[i];
				setShadow(sObj);
			}
		}
	};
	var getShadowValue = function(shadow) {
		if(shadow.match(/none/)) {
			return 'none';
		}
		else {
			for(var val = [], arr = shadow.match(/((rgba?\(\s*[0-9\.]+%?\s*,\s*[0-9\.]+%?\s*,\s*[0-9\.]+%?\s*(,\s*[01]?[\.0-9]*\s*)?\)|#[0-9a-fA-F]{3,6}|[a-zA-Z]+)\s)?(\-?[0-9\.]+(em|ex|px|cm|mm|in|pt|pc)?\s*){2,3}(rgba?\(\s*[0-9\.]+%?\s*,\s*[0-9\.]+%?\s*,\s*[0-9\.]+%?\s*(,\s*[01]?[\.0-9]*\s*)?\)|#[0-9a-fA-F]{3,6}|[a-zA-Z]+)?/g), i = 0, l = arr.length; i < l; i++) {
				val[i] = { x : '0', y : '0', z : '0', cProf : null };
				var uArr = arr[i].match(/\-?[0-9\.]+(em|ex|px|cm|mm|in|pt|pc)?\s+\-?[0-9\.]+(em|ex|px|cm|mm|in|pt|pc)?(\s+[0-9\.]+(em|ex|px|cm|mm|in|pt|pc)?)?/);
				if(uArr = uArr[0].split(/\s+/), uArr[0].match(/^(\-?[0-9\.]+(em|ex|px|cm|mm|in|pt|pc)?)$/) && uArr[1].match(/^(\-?[0-9\.]+(em|ex|px|cm|mm|in|pt|pc)?)$/)) {
					uArr.length >= 2 && (val[i].x = uArr[0], val[i].y = uArr[1]);
					uArr.length == 3 && uArr[2].match(/^([0-9\.]+(em|ex|px|cm|mm|in|pt|pc)?)$/) && (val[i].z = uArr[2]);
					arr[i].match(/%/) && (arr[i] = convPercentTo256(arr[i]));
					arr[i].match(/^(rgba?\(\s*[0-9]+\s*,\s*[0-9]+\s*,\s*[0-9]+\s*(,\s*[01]?[\.0-9]*\s*)?\)|[a-zA-Z]+)/) ? (val[i].cProf = RegExp.$1) :
					arr[i].match(/\s(rgba?\(\s*[0-9]+\s*,\s*[0-9]+\s*,\s*[0-9]+\s*(,\s*[01]?[\.0-9]*\s*)?\)|#[0-9a-fA-F]{3,6}|[a-zA-Z]+)$/) && (val[i].cProf = RegExp.$1);
				}
				else {
					val = 'invalid';
					break;
				}
			}
			return val;
		}
	};
	var cssShadowValues = function() {
		for(var arr = [], sArr = getCssValues('text-shadow'), revReg = /^(#[0-9a-fA-F]{3,6})\s+([0-9a-zA-Z\s\-\.\(\)%\,\!]+)$/, i = 0, l = sArr.length; i < l; i++) {
			arr[arr.length] = { sel : sArr[i].sel, shadow : sArr[i].val.match(revReg) ? RegExp.$2 + ' ' + RegExp.$1 : sArr[i].val };
		}
		return arr;
	};
	var cascadeSel = function(arr) {
		for(var sArr = [], bool, i = 0, l = arr.length; i < l; i++) {
			bool = true;
			for(var j = i; j < l; j++) {
				i != j && arr[i].sel == arr[j].sel && !arr[i].shadow.match(/important/) && (bool = false);
			}
			bool && (sArr[sArr.length] = arr[i]);
		}
		return sArr;
	};
	for(var arr = cascadeSel(ieShadowSettings()), sId = cNum(), i = 0, l = arr.length; i < l; i++) {
		for(var sSel = arr[i].sel.split(/,/), sReg = /^\s*([a-zA-Z0-9#\.:_\-\s>\+~]+)\s*$/, j = 0, k = sSel.length; j < k; j++) {
			sSel[j].match(sReg) && (sSel[j] = RegExp.$1);
			var sObj = { sel : sSel[j], shadow : getShadowValue(arr[i].shadow), hasImp : arr[i].shadow.match(/\s*\!\s*important/) ? true : false, onHover : sSel[j].match(/:hover/) ? true : false };
			sObj.onHover && (sObj.sel = sObj.sel.replace(/:hover/, ''));
			getTargetObj(sObj);
		}
	}
}
addEvent(window, 'load', function() {
	ieVersion >= 7 && ieVersion <= 9 && textShadowForMSIE();
	/* Sample to change shadow color at interactive events (eg: onclick) */
	/*
	var eObj = { sel : '#h1', shadow : 'green 2px 2px 2px !important' };
	var elm = document.getElementById(eObj.sel.replace('#', ''));
	elm && addEvent(elm, 'click', function() {
		if(ieVersion >= 7 && ieVersion <= 9) {
			textShadowForMSIE(eObj);
		}
		else if(ieVersion > 9 || !isMSIE) {
			eObj.shadow.match(/(\s*\!\s*important)/) ?
			elm.style.setProperty('text-shadow', eObj.shadow.replace(RegExp.$1, ''), 'important') :
			elm.style.setProperty('text-shadow', eObj.shadow, '');
		}
	});
	*/
});

/*	imgFader()
	画像をフェードさせながらランダムに入れ替え	*/
function imgFader() {
	var rImgSettings = function() {
		return [
			// ランダム表示する画像群の配列（画像群毎にカンマ区切りで配列を追加）
			// [画像の総枚数, 画像フォルダへのパス, 画像のid, 拡張子],
			// [画像2の総枚数, 画像2フォルダへのパス, 画像2のid, 拡張子]…
		];
	};
	var fadeInOut = function(rImg) {
		var elm = document.getElementById(rImg.id);
		if(elm.style.opacity > 0) {
			elm.style.opacity = Math.floor((elm.style.opacity - 0.05) * 100) / 100;
			elm.style.opacity <= 0 && (elm.style.opacity = 0);
			// setTimeout(function() { fadeInOut(rImg) }, 100);	// 2秒フェード
			setTimeout(function() { fadeInOut(rImg) }, 50);	// 1秒フェード
		}
		else {
			elm.src = rImg.path + rImg.nxt + rImg.ext;
			elm.style.opacity = 1;
			setNextImg(rImg);
		}
	};
	var setNextImg = function(rImg) {
		for(var r = Math.floor(Math.random() * rImg.max) + 1; r == rImg.nxt;) {
			r = Math.floor(Math.random() * rImg.max) + 1;
		}
		if(r != rImg.nxt) {
			var rSrc = rImg.path + r + rImg.ext;
			rImg.nxt = r;
			if(isMSIE && ieVersion < 9) {
				var img = new Image(); img.src = rSrc;
				setTimeout(function() {
					var img = new Image(); img.src = rImg.path + rImg.nxt + rImg.ext;
					var elm = document.getElementById(rImg.id);
					elm.style.filter = "progid:DXImageTransform.Microsoft.Fade(duration=1)";
					elm.filters[0].apply(); elm.src = img.src; elm.filters[0].play();
					setNextImg(rImg);
				}, 5000);	// ループ間隔（ミリ秒）
			}
			else {
				var elm = document.getElementById(rImg.id);
				elm.parentNode.setAttribute('style', 'background : url(' + rSrc + '); background-size : 100% 100%;');
				elm.style.opacity = 1;
				setTimeout(function() { fadeInOut(rImg) }, 5000);	// ループ間隔（ミリ秒）
			}
		}
	};
	if(document.getElementById) {
		for(var arr = rImgSettings(), i = 0, l = arr.length; i < l; i++) {
			var elm = document.getElementById(arr[i][2]);
			var pReg = new RegExp(absPath(arr[i][1]) + '([0-9]+)' + arr[i][3]);
			elm && elm.src.match(pReg) && setNextImg({ nxt : RegExp.$1, max : arr[i][0], path : arr[i][1], id : arr[i][2], ext : arr[i][3] });
		}
	}
}
//addEvent(window, 'load', imgFader);

/*	blinkTimer()
	特定クラスを持つ特定要素を一時的に点滅(ループ可)	*/
function blinkTimer(oElm, oClass) {
	//	bl.bln; 真偽初期値	bl.cnt; カウンタ
	//	bl.obj; 要素名		bl.cls; クラス名
	var bl = { bln : false, cnt : null, obj : oElm, cls : oClass };
	var blinkElement = function() {
		var elm = document.getElementsByTagName(bl.obj), i, l = elm.length;
		if(bl.cnt < 10) {	// 点滅回数
			for(i = 0; i < l; i++) {
				elm[i].className.match(bl.cls) && (elm[i].style.visibility = (elm[i].style.visibility == 'visible') ? 'hidden' : 'visible');
			}
			setTimeout(blinkElement, 500);	bl.cnt++;
		}
		else {
			for(i = 0; i < l; i++) {
				elm[i].className.match(bl.cls) && (elm[i].style.visibility = 'visible');
			}
			// setTimeout(blinkTimer, 10000);   /* ループ処理 */
		}
	};
	if(document.getElementsByTagName) {
		if(bl.bln == false) {
			var elm = document.getElementsByTagName(bl.obj);
			if(elm) {
				for(var i = 0, l = elm.length; i < l; i++) {
					if(elm[i].className.match(bl.cls)) {
						bl.bln = true;
						break;
					}
				}
			}
		}
		if(bl.bln) {
			bl.cnt = cNum();
			blinkElement();
		}
	}
}
//addEvent(window, 'load', function() { blinkTimer('dt', 'attention'); });

/*	setStartAttr() for MSIE7 and Lower
	<ol class="counter[0-9]">にstart属性を追加	*/
function setStartAttr() {
	if(document.getElementsByTagName) {
		var elm = document.getElementsByTagName('ol');
		if(elm) {
			for(var i = 0, l = elm.length; i < l; i++) {
				elm[i].className.match(/counter(\d+)/) && elm[i].setAttribute('start', RegExp.$1);
			}
		}
	}
}
addEvent(window, 'load', function() { isMSIE && ieVersion < 8 && setStartAttr(); });

/*	initDefaultValue()
	コメント欄テキストエリアの規定value値を消去	*/
function initDefaultValue() {
	var elm = document.getElementById('comment-text');
	if(elm.value == '\u30b3\u30e1\u30f3\u30c8\u672c\u6587') {	// 'コメント本文'
		elm.value = '';
	}
}
addEvent(window, 'load', function() {
	if(document.getElementById) {
		var elm = document.getElementById('comment-text');
		elm && addEvent(elm, 'focus', function() { initDefaultValue(); });
	}
});

/*	getTwitterComments()
	ツイッター上のコメントをバックグラウンドで取得・書き出し	*/
function getTwitterComments(url) {
	if(!isMSIE || (isMSIE && ieVersion > 7)) {
		var setTwComments = function(twArr, tId) {
			var mobile = navigator.userAgent.match(/DoCoMo|FOMA|KDDI|UP\.Browser|J\-PHONE|Vodafone|SoftBank/);
			var twUrlReg = /^https?:\/\/twitter\.com\/[a-zA-Z0-9_]+\/status\/[0-9]+$/;
			var twComment = mobile ? document.createElement('div') : document.createElement('article');
			twComment.setAttribute('id', 'tw' + tId);
			twComment.setAttribute('class', 'comment');
			var p = document.createElement('p');
			p.textContent = twArr.content;
			twComment.appendChild(p);
			var ul = document.createElement('ul');
			ul.setAttribute('class', 'comment-footer');
			var liDate = document.createElement('li');
			liDate.setAttribute('class', 'comment-date');
			liDate.textContent = twArr.date;
			ul.appendChild(liDate);
			var liAuthor = document.createElement('li');
			liAuthor.setAttribute('class', 'comment-author');
			if(!!twArr.rt_origin) {
				if(!!twArr.origin_url) {
					if(twArr.origin_url.match(twUrlReg)) {
						var a2 = document.createElement('a');
						a2.setAttribute('href', twArr.origin_url);
						a2.setAttribute('rel', 'nofollow');
						a2.textContent = twArr.rt_origin;
						liAuthor.appendChild(a2);
					}
					else {
						liAuthor.appendChild(document.createTextNode(twArr.rt_origin));
					}
				}
				else {
					liAuthor.appendChild(document.createTextNode(twArr.rt_origin));
				}
				liAuthor.appendChild(document.createTextNode(' RT by '));
			}
			if(!!twArr.url) {
				if(twArr.url.match(twUrlReg)) {
					var a = document.createElement('a');
					a.setAttribute('href', twArr.url);
					a.setAttribute('rel', 'nofollow');
					a.textContent = twArr.nick;
					liAuthor.appendChild(a);
				}
				else {
					liAuthor.appendChild(document.createTextNode(twArr.nick));
				}
			}
			else if(!twArr.url) {
				liAuthor.appendChild(document.createTextNode(twArr.nick));
			}
			ul.appendChild(liAuthor);
			twComment.appendChild(ul);
			document.getElementById('twitter-tb').appendChild(twComment);
		};
		var getTweets = function() {
			if(xmlHttp.readyState == 4 && xmlHttp.status == 200 && xmlHttp.responseText) {
				var twJson = JSON.parse(xmlHttp.responseText);
				if(twJson.length > 0) {
					var len = twJson.length;
					var twCount = document.getElementById('twCount');
					if(!twCount) {
						document.getElementById('twMsg').innerHTML = '<span id="twCount">' + len + '</span>件のツイートがあります。<a class="refer-to" href="http://topsy.com/link?url=' + url + '" rel="nofollow">Topsyで確認する</a>';
						for(var i = 0; i < len; i++) {
							setTwComments(twJson[i], i);
						}
					}
					else {
						if(len > (twCount.firstChild.nodeValue * 1)) {
							twCount.innerHTML = len;
							for(var i = len - 1; i < len; i++) {
								setTwComments(twJson[i], i);
							}
						}
					}
				}
			}
		};
		var xQuery = 'http://asamuzak.jp/twtb/?url=' + url;
		var xmlHttp = setXmlHttp();
		xmlHttp.onreadystatechange = getTweets;
		xmlHttp.open('GET', xQuery, true);
		xmlHttp.send(null);
	}
}

