/**
 * common.js
 * @charset	SHIFT_JIS
 * @version	2.1.5 - 10:19 2010/04/07
 */

var Kaas = {
	
	ver: '2.1.5',
	mainColomn: 'col-a',
	body: function() {
		return document.getElementsByTagName('body')[0];
	},
	
	init: function() {
		
		var _spath = 'https://secure.future-s.com/~cosmoshop';
		// this.load.js('js/areaanchor.js');
		// this.load.js('js/loginform.util.js');
		// this.load.js('js/calender.js');
		/**
		 * IEだとcreateElementしたりsetAttributeしたりしてると
		 * つくられる順番がばらばらになるから
		 * document.write で...
		 */
		this.write.js(_spath + '/lib/jquery/jquery-1.3.2.min.js');
		this.write.js(_spath + '/lib/jquery/ui.core.js');
		this.write.js(_spath + '/lib/jquery/ui.accordion.js');
		this.write.js(_spath + '/lib/jquery/lightbox/jquery.lightbox-0.5.js');
		this.write.js(_spath + '/lib/jquery/execute.js');
		this.write.css(_spath + '/lib/jquery/lightbox/jquery.lightbox-0.5.css');
		
		var rolloverImages = [ 'submitSearchItems', 'entryMailMagazineRegister' ];
		
		this.ready(function() {
			
			Kaas.destroyFS2Preview();
			if (document.getElementById('pickup')) Kaas.areaAnchor('pickup', 'div', true);
			
			Kaas.formUtil.init(Kaas.body().getElementsByTagName('td')[1]);
			
			Kaas.loginform.init();
			Kaas.addPageClass.init();
			if (document.getElementById('ranking')) Kaas.even('li', 'ranking');
			
			Kaas.imageRollover.init();
			for (var i = 0, l = rolloverImages.length; i < l; i++) {
				var _id = rolloverImages[i];
				if (Kaas.$(_id)) Kaas.imageRollover.set(_id);
			}
			
			Kaas.externalLink();
			
		});
		
	},
	
	imageRollover: {
		
		opacity: .6,
		
		init: function() {
			
			var imgs = document.getElementsByTagName('img');
			for (var i = 0, l = imgs.length; i < l; i++) this.set(imgs[i], i);
			
		},
		
		set: function(target) {
			
			var t = Kaas.$(target);
			var _src = t.getAttribute('src');
			t.index = (typeof arguments[1] == 'number')? arguments[1] : 0;
			
			// src="xxx_rollover.png"
			if (_src && _src.match(/_rollover\./)) this._hover(t, _src, 'rollover');
			// src="xxx_alpha.png"
			else if (_src && _src.match(/_alpha\./)) Kaas.mouseEvent.opacity(t, Kaas.imageRollover.opacity);
			// class="imgover"
			else if (_src && Kaas.hasClassName(t, 'imgover')) this._hover(t, _src);
			
		},
		
		/**
		 * @private
		 */
		_hover: function(target, src, type) {
			
			var t = target;
			t.offSrc = src;
			t.ext    = t.offSrc.substring(t.offSrc.lastIndexOf('.'), t.offSrc.length);
			t.onSrc  = type == 'rollover'
				? t.offSrc.replace('_rollover' + t.ext, t.ext)
				: t.offSrc.replace(t.ext, '_o' + t.ext);
			
			var preload = new Image();
			preload.setAttribute('src', t.onSrc);
			
			t.onmouseover = function() {
				this.setAttribute('src', this.onSrc);
			};
			t.onmouseout = t.onclick = function() {
				this.setAttribute('src', this.offSrc);
			};
			
		}
		
	},
	
	mouseEvent: {
		
		opacity: function(target, op) {
			if (!target) return;
			var t = Kaas.$(target);
			t.onmouseover = function() {
				var _opacity = op;
				this.style.filter = 'alpha(opacity=' + (_opacity * 100) + ')';
				this.style.opacity = _opacity.toString();
				this.style.MozOpacity = _opacity.toString();
			};
			t.onmouseout = t.onclick = t.onmouseup = function() {
				this.setAttribute('style', '');
				this.removeAttribute('style');
			};
		}
		
	},
	
	externalLink: function(container) {
		
		var t = Kaas.$(container);
		var e = t.getElementsByTagName('a');
		
		for (var i = 0, l = e.length; i < l; i++) {
			var a = e[i];
			if (a.getAttribute('rel') == 'external') {
				if (a.title) a.title += ' : 新しいウィンドウで開きます';
				a.onclick = function() {
					window.open(this.getAttribute('href'), '_blank');
					return false;
				}
			}
		}
		
	},
	
	/**
	 * 指定要素の偶数行にclass="even"を追加する
	 * @param	element:String - 要素名
	 * @param	container:* - id名 || ELEMENT_NODE || undefined
	 * @return	{Void}
	 */
	even: function(element, container) {
		var t = Kaas.$(container);
		var e = t.getElementsByTagName(element);
		var flag = false;
		for (var i = 0, l = e.length; i < l; i++) {
			if (flag) this.addClass(e[i], 'even');
			flag = !flag;
		}
	},
	
	/**
	 * tr の偶数行にclass="trEven"を追加する
	 * thead, tfoot内のtrは無視する
	 * @param	container:* - id名 || ELEMENT_NODE || undefined
	 * @return	{Void}
	 */
	trRows: function(container) {
		var tr = Kaas.$(container).getElementsByTagName('tr');
		var flag = false;
		for (var i = 0, l = tr.length; i < l; i++) {
			var _parentNodeName = tr[i].parentNode.tagName.toLowerCase();
			if (flag && _parentNodeName != 'thead' && _parentNodeName != 'tfoot') this.addClass(tr[i], 'trEven');
			flag = !flag;
		}
	},
	
	// ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: Utilities
	
	/**
	 * @param	obj:* - id名 || ELEMENT_NODE || undefined
	 * @return	{Object}
	 */
	$: function(obj) {
		if (obj && typeof obj == 'string') {
			if (document.getElementById(obj)) {
				return document.getElementById(obj);
			} else {
				throw new Error('There is no "' + obj + '" ');
			}
		} else if (obj && obj.nodeType == 1) {
			return obj;
		} else {
			return document;
		}
	},
	
	/**
	 * @param	target:Object - ELEMENT_NODE
	 * @return {Boolean}
	 */
	hasClassName: function(target, value) {
		var c = target.className.split(' ');
		var i = c.length;
		while(i--) {
			if (c[i] == value) {
				return true;
				break;
			}
		}
	},
	
	/**
	 * @param	target:Object - ELEMENT_NODE
	 * @return	{Void}
	 */
	addClass: function(target, value) {
		if (this.hasClassName(target, value)) return false;
		if (!target.className) target.className = value;
		else target.className += ' ' + value;
	},
	
	/**
	 * @param	target:Object - ELEMENT_NODE
	 * @return	{Void}
	 */
	removeClass: function(target, value) {
		var c = target.className.split(' ');
		target.className = '';
		for (var i = 0, l = c.length; i < l; i++) {
			if (c[i] != value) target.className += (i != l - 1)? c[i] + ' ' : c[i];
		}
		if (target.className == '') (target.getAttribute('className'))? target.removeAttribute('className') : target.removeAttribute('class');
	},
	
	/**
	 * addElement
	 * @param	element:String - 要素名
	 * @param	attr:Object - 属性（オプション）
	 * @param	parentObject:Object - ELEMENT_NODE（オプション）
	 * @return	{Object}
	 */
	addElement: function(element, attr, parentObject) {
		var newElement = document.createElement(element);
		for (var i in attr) newElement.setAttribute(i, attr[i]);
		var _parent = (parentObject)? parentObject : document.body;
		return _parent.appendChild(newElement);
	},
	
	load: {
		/**
		 * js
		 * @return	{HTMLScriptElement}
		 */
		js: function(filename) {
			var attr = {
				'type': 'text/javascript',
				// 'src': Kaas.root() + filename
				'src': filename
			};
			return Kaas.addElement('script', attr, document.getElementsByTagName('head')[0]);
		},
		
		/**
		 * css
		 * @return	{HTMLLinkElement}
		 */
		css: function(filename, media) {
			var attr = {
				'rel': 'stylesheet',
				'type': 'text/css',
				// 'href': Kaas.root() + filename,
				'href': filename,
				'media': (media)? media : 'screen, print'
			};
			return Kaas.addElement('link', attr, document.getElementsByTagName('head')[0]);
		}
	},
	
	/**
	 * browser
	 * Based on Prototype.js
	 * @see	http://www.prototypejs.org/
	 */
	browser: {
		IE:		!!(window.attachEvent && navigator.userAgent.indexOf('Opera') === -1),
		Opera:	navigator.userAgent.indexOf('Opera') > -1,
		WebKit:	navigator.userAgent.indexOf('AppleWebKit/') > -1,
		Gecko:	navigator.userAgent.indexOf('Gecko') > -1 && navigator.userAgent.indexOf('KHTML') === -1,
		MobileSafari:	!!navigator.userAgent.match(/Apple.*Mobile.*Safari/)
	},
	
	/**
	 * isIEVer
	 * @return	{Boolean}
	 */
	isIEVer: function(v) { return this.browser.IE && navigator.appVersion.indexOf('MSIE ' + v) > 0; },
	
	/**
	 * isFF2
	 * @return	{Boolean}
	 */
	isFF2: function() { return this.browser.Gecko && navigator.userAgent.toLowerCase().indexOf('firefox/2') != -1 },
	
	/**
	 * os (beta)
	 * @return	{Array}
	 */
	os: {
		WindowsME:    navigator.userAgent.match(/Win(dows)? (9x 4\.90|ME)/),
		Windows2000:  navigator.userAgent.match(/Win(dows)? (NT 5\.0|2000)/),
		WindowsXP:    navigator.userAgent.match(/Win(dows)? (NT 5\.1|XP)/),
		WindowsVista: navigator.userAgent.match(/Win(dows)?  NT 6\.0/)
	},
	
	/**
	 * currentPath
	 * @return	{String}
	 */
	currentPath: function() {
		var s = document.getElementsByTagName('script');
		for (var i = 0, l = s.length; i < l; i++) {
			if (s[i].src && s[i].src.match(/common\.js(\?.*)?$/)) {
				return s[i].src.replace(/common\.js(\?.*)?$/, '');
				break;
			}
		}
	},
	
	/**
	 * root
	 * @return	{String}
	 */
	root: function() { return this.currentPath() + '../'; },
	
	/**
	 * addEvent
	 * @return	{Void}
	 */
	addEvent: function(elm, listener, fn) {
		try {
			elm.addEventListener(listener, fn, false);
		} catch(e) {
			elm.attachEvent('on' + listener, fn);
		}
	},
	
	/**
	 * ready
	 * equal to Kaas.addEvent(window, 'load', myfunc);
	 * @return	{Void}
	 */
	ready: function(fn) { this.addEvent(window, 'load', fn); },
	
	/**
	 * alerts
	 * @return	{Function}
	 */
	alerts: function() {
		var str = '';
		for (var i = 0, l = arguments.length; i < l; i++) {
			str += (i != 0)? ', ' + arguments[i] : arguments[i];
		}
		return alert(str);
	},
	
	/**
	 * isVersion
	 * @return	{Boolean}
	 */
	isVersion: function(v) { return v === parseInt(this.ver.substring(0, 1)); },
	
	/**
	 * toString
	 * @return	{String}
	 */
	toString: function() { return '[object Kaas]'; }

};


Kaas.destroyFS2Preview = function() {
	if (!document.getElementById('FS2_preview')) return;
	Kaas.body().removeChild(document.getElementById('FS2_preview'));
}

Kaas.write = {
	js: function(filename) {
		document.write('<script type="text/javascript" src="' + filename + '"></script>');
	},
	css: function(filename) {
		document.write('<link rel="stylesheet" type="text/css" href="' + filename + '" />');
	}
}

/**
 * areaanchor.js
 * @version		1.3.0 - 21:13 2009/07/02
 * @require		common.js v.2.1.5
 * @param		container:String
 * @param		element:String
 * @param		notHasClass:Boolean		true の場合、container内の element全てに対して実行
 * @return		{Void}
 */
Kaas.areaAnchor = function(container, element, notHasClass) {

	var c = this.$(container);
	var elem = (element)? c.getElementsByTagName(element) : c.getElementsByTagName('*');

	for (var i = 0, l = elem.length; i < l; i++) {
		
		var t = elem[i];
		var areaHref, defaultClassName, _target;
		var hasAnchor = t.getElementsByTagName('a').length > 0;
		
		if (hasAnchor && notHasClass || hasAnchor && this.hasClassName(t, 'areaAnchor')) {
			
			var _a = t.getElementsByTagName('a')[0];
			_a.onclick = function() { return false; };
			t.areaHref = _a.href;
			_target = (!_a.getAttribute('rel') || _a.getAttribute('rel') != 'external')? '_self' : '_blank';
			
			t.onmouseover = function() {
				this.defaultClassName = this.className;
				this.className += ' areaAnchorOver';
			};
			
			t.onmouseout = function() {
				this.className = this.defaultClassName;
			};
			
			t.onclick = function() {
				this.className = this.defaultClassName;
				window.open(this.areaHref, _target);
				return false;
			};
			
		}
		
	}
	
};

/**
 * Form utilities
 * input type="text" size="..." のsize属性の値に応じて level1〜4 と textClassName（IE対策含む）のクラス名を追加する
 * input type="radio" クラス名 radioClassName を追加する
 * input type="checkbox" クラス名 checkboxClassName を追加する
 * @version 1.2
 * @return  {Void}
 */
Kaas.formUtil = {
	settings: {
		textClassName: 'typeText',
		radioClassName: 'typeRadio',
		checkboxClassName: 'typeCheckbox'
	},
	/**
	 * @param	container:* - id名 || ELEMENT_NODE || undefined
	 */
	init: function(container) {
		var t = Kaas.$(container);
		var inputs = t.getElementsByTagName('input');
		
		for (var i = 0, l = inputs.length; i < l; i++) {
			var input = inputs[i];
			if (input.getAttribute('type') == 'text' && input.size) {
				var inputSize = input.size;
				var tcn = this.settings.textClassName;
				if (0 < inputSize && inputSize <= 5) Kaas.addClass(input, 'level1 ' + tcn);
				else if (inputSize <= 20) Kaas.addClass(input, 'level2 ' + tcn);
				else if (inputSize <= 40) Kaas.addClass(input, 'level3 ' + tcn);
				else Kaas.addClass(input, 'level4 ' + tcn);
			} else if (input.getAttribute('type') == 'radio') {
				Kaas.addClass(input, this.settings.radioClassName);
			} else if (input.getAttribute('type') == 'checkbox') {
				Kaas.addClass(input, this.settings.checkboxClassName);
			}
		}
	}
};

/**
 * パンくずの href からカテゴリ第一階層を取得し、body のクラス属性に付与
 */
Kaas.addPageClass = {
	init: function() {
		var p = Kaas.loginform.divUtility().getElementsByTagName('p');
		for (var i = 0, l = p.length; i < l; i++) {
			var _p = p[i];
			var _a = _p.getElementsByTagName('a');
			if (_p.className == 'pan') {
				if (_a.length > 1) {
					var _s = _a[1].href.split('/');
					var _temp = _s[_s.length - 1].split('.')
					Kaas.addClass(Kaas.body(), _temp[0]);
				}
				break;
			}
		}
	}
};

/**
 * <div id="userUtil"></div>
 * table要素（ログインフォーム部分）を右カラムへ移動させる荒業
 * 残骸はリムーブされる
 */
Kaas.loginform = {
	
	divUtility: function() {
		// return document.getElementsByTagName('div')[0].getElementsByTagName('table')[0].getElementsByTagName('td')[1].getElementsByTagName('div')[0];
		return document.getElementsByTagName('td')[1].getElementsByTagName('div')[0];
	},
	containerId: 'userUtil',
	h2InnerHTML: '<img src="https://secure.future-s.com/~cosmoshop/img/common/c_t0.png" alt="会員様ログイン" />',
	
	init: function() {
		
		if (this.divUtility() == null || this.divUtility().className != 'utility') return;
		
		var _container = this.divUtility();
		var _exUtilArea = document.getElementById('exUtilArea');
		var _user = document.getElementById('col-c').insertBefore(document.createElement('div'), _exUtilArea);
		_user.setAttribute('id', this.containerId);
		var h2 = _user.appendChild(document.createElement('h2'));
		h2.innerHTML = this.h2InnerHTML;
		var _table = _user.appendChild(_container.getElementsByTagName('table')[0]);
		var _tdRowspan2 = _table.getElementsByTagName('td')[1];
		_tdRowspan2.innerHTML = "";
		_tdRowspan2.parentNode.removeChild(_tdRowspan2);
		_container.removeChild(_container.getElementsByTagName('ul')[0]);
		_container.parentNode.removeChild(_container);
		
		if (_user.getElementsByTagName('li')[1].className == 'FS2_icon_logout') {
			_exUtilArea.style.display = 'none';
		}
		
	}
	
};

/**
 * calender
 */
(function() {
	
	Kaas.ready(allInit);
	
	var closeDate = [];
	closeDate[4]  = '3,4,10,11,17,18,19,24,25,29';
	closeDate[5]  = '1,2,3,4,5,8,9,15,16,22,23,29,30';
	closeDate[6]  = '5,6,12,13,19,20,26,27,30';
	closeDate[7]  = '3,4,10,11,17,18,19,24,25,31';
	closeDate[8]  = '1,7,8,13,14,15,21,22,28,29';
	closeDate[9]  = '4,5,11,12,18,19,20,21,22,23,25,26';
	closeDate[10] = '3,4,10,11,12,17,18,24,25,31';
	closeDate[11] = '1,2,3,7,8,14,15,21,22,23,28,29';
	closeDate[12] = '5,6,12,13,19,20,23,26,27,28,29,30,31';
	closeDate[1]  = '1,2,3,4,9,10,11,16,17,23,24,30,31';
	closeDate[2]  = '1,6,7,11,13,14,20,21,27,28';
	closeDate[3]  = '6,7,13,14,20,21,22,27,28';
	
	function allInit(){
		if (document.getElementById('calender')){
			var today = new Date();
			var tempD = today.getDate();
			if (tempD > 28) today.setDate(28);
			
			var outHtmls = '';

			/*
			outHtmls += '<div id="newyears">';
			outHtmls += '<h3>年末年始の休業期間</h3>';
			outHtmls += '<p>12月26日〜1月4日</p>';
			outHtmls += '<ul>';
			outHtmls += '<li>※26日は棚卸の為、出荷停止となります。お問合せに関しましては随時対応させて頂きます。</li>';
			outHtmls += '</ul>';
			outHtmls += '</div>'; 
			*/
			
			outHtmls += '<h3><img src="https://secure.future-s.com/~cosmoshop/img/calender/t.png" alt="営業日カレンダー" /></h3>';
			outHtmls += makeCalender(today);
			
			var tempM = today.getMonth();
			today.setMonth(tempM+1);
			outHtmls += makeCalender(today);

			document.getElementById('calender').innerHTML = outHtmls;
		}
	}
	
	
	function makeCalender(today){
		var monthName = '1月,2月,3月,4月,5月,6月,7月,8月,9月,10月,11月,12月'.split(',');
		var monthDays = '31,28,31,30,31,30,31,31,30,31,30,31'.split(',');

		var year = today.getYear();
		if (year < 2000)year += 1900;
		var month = today.getMonth() + 1;
		var day = today.getDate();

		if ((year % 400 == 0) || ((year % 4 == 0) && (year % 100 != 0)))monthDays[1] = 29;
		var start = calcDay(year, month, 1);
		var outHtml = '';
		
		outHtml += '<table summary="曜日, 定休日">';
		outHtml += '<caption>'+monthName[month-1]+'</caption>';

		outHtml += '<thead><tr>';
		outHtml += '<th scope="col" class="sun">日</th>';
		outHtml += '<th scope="col">月</th>';
		outHtml += '<th scope="col">火</th>';
		outHtml += '<th scope="col">水</th>';
		outHtml += '<th scope="col">木</th>';
		outHtml += '<th scope="col">金</th>';
		outHtml += '<th scope="col">土</th>';
		outHtml += '</tr></thead>';

		outHtml += '<tbody>';

		var classClose = Array();
		if (closeDate[month]){
			var dataArray = closeDate[month].split(',');
			for(i=0; i<dataArray.length; i++){
				classClose[dataArray[i]] = 'on';
			}
		}
		var count=0;

		outHtml += '<tr>';
		if (start>0){
			for(i=0; i<start; i++){
				outHtml += '<td>&nbsp;</td>';
				count++;
			}
		}

		var classValue = '';
		for(i=1; i<=monthDays[month-1]; i++){
			if (count % 7==0)outHtml += '<tr>';
			if (classClose[i] == 'on'){
				classValue = ' class="holi"';
			} else if (count % 7==0){
				classValue = ' class="sun"';
			} else {
				classValue = '';
			}
			outHtml += '<td'+classValue+'>'+i+'</td>';
			if (count % 7==6)outHtml += '</tr>';
			count++;
		}
		if (count % 7 != 0){
			for(i=count % 7; i<7; i++){
				outHtml += '<td>&nbsp;</td>';
			}
			outHtml += '</tr>';
		}

		outHtml += '</tbody>';
		outHtml += '</table>';
		return outHtml;
	}

	function calcDay(yy, mm, dd){
		if ((mm == 1)||(mm == 2)){yy--; mm += 12;}
		return (yy + Math.floor(yy / 4) - Math.floor(yy / 100) + Math.floor(yy / 400) + Math.floor((13 * mm + 8) / 5) + dd) % 7
	}

})();

// console.log()

Kaas.init();
