/* **************************************************
Name: common.js
Description: Setting of common javaScript functions
Create: 2008.06.06
Update: 2008.06.12
***************************************************** */

/* Add Event
=============================================== */
function addEvent(elem, type, handle){
	if(elem.addEventListener){
		elem.addEventListener(type, handle, false);
	} else if(elem.attachEvent){
		elem.attachEvent("on" + type, handle);
	}
}

/* Add Class Name
=============================================== */
function addClassName(elem, classNames){
	var elems = (classNames || "").split(/\s+/);
	for(var i = 0, length = elems.length; i < length; i++){
		var className = elems[i];
		if(elem.nodeType == 1 && !hasClassName(elem, className)){
			elem.className += (elem.className ? " " : "") + className;
		}
	}
}

/* Remove Class Name
=============================================== */
function removeClassName(elem, classNames){
	if(elem.nodeType == 1){
		if(classNames != undefined){
			var elems = elem.className.split(/\s+/);
			var ret = [];
			for(var i = 0, length = elems.length; i < length; i++){
				if(!hasClassName(classNames, elems[i])){
					ret.push(elems[i]);
				}
			}
			elem.className = ret.join(" ");
		} else{
			elem.className = "";
		}
	}
}

/* Has Class Name
=============================================== */
function hasClassName(elem, className){
	var elems = (elem.className || elem).toString().split(/\s+/);
	for(var i = 0, length = elems.length; i < length; i++){
		if(elems[i] == className){
			return true;
		}
	}
	return false;
}

/* Set Css
=============================================== */
function setCss(elem, key, value){
	if((key == 'width' || key == 'height') && parseFloat(value) < 0){
		value = undefined;
	}
	if(value != undefined){
		key = key.replace(/-([a-z])/ig, function(all, letter){
			return letter.toUpperCase();
		});
		elem.style[key] = value;
	}
}

/* Current Css
=============================================== */
function currentCss(elem, key){
	var ret;

	function color(elem){
		if(!browser.safari){
			return false;
		}
		var ret = document.defaultView.getComputedStyle(elem, null);
		return !ret || ret.getPropertyValue("color") == "";
	}

	if(key == "opacity" && browser.msie){
		ret = jQuery.attr(elem.style, "opacity");
		
		return ret == "" ? "1" : ret;
	}

	if(browser.opera && key == "display"){
		var save = elem.style.display;
		elem.style.display = "block";
		elem.style.display = save;
	}
	
	if(key.match(/float/i)){
		key = styleFloat;
	}
	
	if(elem.style && elem.style[key]){
		ret = elem.style[key];
	} else if(document.defaultView && document.defaultView.getComputedStyle){

		if(key.match(/float/i)){
			key = "float";
		}
		
		key = key.replace(/([A-Z])/g, "-$1").toLowerCase();
		
		var getComputedStyle = document.defaultView.getComputedStyle(elem, null);
		
		if(getComputedStyle && !color(elem)){
			ret = getComputedStyle.getPropertyValue(key);
		} else{
			var swap = [], stack = [];
			
			for(var a = elem; a && color(a); a = a.parentNode){
				stack.unshift(a);
			}
			
			for(var i = 0; i < stack.length; i++){
				if(color(stack[i])){
					swap[i] = stack[i].style.display;
					stack[i].style.display = "block";
				}
			}

			ret = key == "display" && swap[stack.length-1] != null ?
				"none" :
				(getComputedStyle && getComputedStyle.getPropertyValue(key)) || "";

			for(var i = 0; i < swap.length; i++){
				if(swap[i] != null){
					stack[ i ].style.display = swap[ i ];
				}
			}
		}

		if(key == "opacity" && ret == ""){
			ret = "1";
		}
	} else if(elem.currentStyle){
		var camelCase = key.replace(/\-(\w)/g, function(all, letter){
			return letter.toUpperCase();
		});
		
		ret = elem.currentStyle[name] || elem.currentStyle[camelCase];
		
		if(!/^\d+(px)?$/i.test(ret) && /^\d/.test(ret)){
			
			var style = elem.style.left, runtimeStyle = elem.runtimeStyle.left;
			
			elem.runtimeStyle.left = elem.currentStyle.left;
			elem.style.left = ret || 0;
			ret = elem.style.pixelLeft + "px";
			
			elem.style.left = style;
			elem.runtimeStyle.left = runtimeStyle;
		}
	}
	return ret;
}

/* getCookie
=============================================== */
function getCookie(item) {
    var i, index, arr;
    arr = document.cookie.split(";");
    for(i = 0; i < arr.length; i++) {
        index = arr[i].indexOf("=");
        //2番目は頭がスペースのとき
        if(arr[i].substring(0, index) == item || 
                arr[i].substring(0, index) == " " + item)
            return arr[i].substring(index + 1);
    }
    return "";
}

/* setCookie
=============================================== */
function setCookie(item, value, d) {
    document.cookie = item + "=" + value + ";expires=" + d;
}

/* Browser Check
=============================================== */
var userAgent = navigator.userAgent.toLowerCase();
var browser = {
	version: (userAgent.match(/.+(?:rv|it|ra|ie)[\/: ]([\d.]+)/) || [])[1],
	safari: /webkit/.test(userAgent),
	opera: /opera/.test(userAgent),
	msie: /msie/.test(userAgent) && !/opera/.test(userAgent),
	mozilla: /mozilla/.test(userAgent) && !/(compatible|webkit)/.test(userAgent),
    iphone: /iphone/.test(userAgent)
};