﻿/*
	DOM操作系
*/
function $(control_id){
	var elm = document.getElementById(control_id);
	if (!elm)
		return;

	if (typeof(elm.innerText) == 'undefined' && typeof(elm.textContent) != 'undefined') {
		elm.__defineGetter__('innerText', function() {return this.textContent; });
		elm.__defineSetter__('innerText', function(val) {return this.textContent = val; });
	}
	return elm;
}

function getChildElements(elm, func){
	var elements = [];
	for(var i = 0; i < elm.childNodes.length; i++){
		var element = elm.childNodes[i];
		if(func(element))
			elements[elements.length] = element;
		Array.addRange(elements, getChildElements(element, func));
	}
	return elements;
}

/*
	DOM拡張
*/
function $dom(elm){
	if (elm.DomExtended)
		return elm;
	
	elm.getChildren = function(func){
		return getChildElements(this, func);
	};
	
	elm.getElementsByTagName = function(tag, func){
		return this.getChildren(function(_elm){
			return _elm.tagName && _elm.tagName.toLowerCase() == tag.toLowerCase() && (!func || func(_elm));
		});
	};
	
	elm.getCheckBoxes = function(func){
		return this.getElementsByTagName('input', function(_elm){
			return _elm.type && _elm.type.toLowerCase() == 'checkbox' && (!func || func(_elm));
		});
	};
	
	elm.getRadioBtns = function(){
		return this.getElementsByTagName('input', function(_elm){
			return _elm.type && _elm.type.toLowerCase() == 'radio';
		});
	};
	
	elm.DomExtended = true;
	return elm;
}

/*
	Cookiesクラス
*/
var Cookies = {
	set : function (key, value, expires, path){
		var c = key + '=';
		if (typeof(value) != 'undefined' && value != null){
			c += value;
		}
		if (typeof(expires) != 'undefined' && expires != null){
			var dt = new Date();
			dt.setTime(dt.getTime() + expires);
			c += '; expires=' + dt.toGMTString();
		}
		if (typeof(path) != 'undefined' && path != null){
			c += '; path=' + path;
		}
		document.cookie = c;
	}, // End of 'set' method

	get : function (key) {
		var cookies = this.getAll();
		return cookies[key];
	}, // End of 'get' method

	getAll : function () {
		var _cookies = document.cookie.split(';');
		var cookies = [];
		for (var i in _cookies) {
			var cookie = _cookies[i].replace(/^\s*(.+?)\s*$/, "$1").split('=');
			cookies[cookie[0]] = cookie[1];
		}
		return cookies;
	}, // End of 'getAll' method

	clear : function (key, path) {
		this.set(key, null, -24 * 60 * 60, path);
	}, // End of 'clear' method

	toString : function () {
		var cookies = this.getAll();
		var t = '';
		for (var i in cookies)
			t += i + '=' + cookies[i] + ';';
		return t;
	} // End of 'toString' method
}

/*
	CSSクラス名操作用クラス
*/
function $css(elm){
	if(!elm.CssClassObj)
		elm.CssClassObj = new CssClass(elm);
	return elm.CssClassObj;
}
function CssClass(element){
	this.Element = element;
	this.Element.CssClassObj = this;
}
function CssClass_GetClasses(){
	if (this.Element.className == null || this.Element.className == '')
		return [];
	return this.Element.className.split(' ');
}
function CssClass_GetIndex(){
	var classes = this.getClasses();
	var index = {};
	for(var i in classes)
		index[classes[i]] = 1;
	return index;
}
function CssClass_Contains(className){
	var index = this.getIndex();
	return index != null && index[className] == 1;
}
function CssClass_Add(className){
	if(this.contains(className))
		return;
	var classes = this.getClasses();
	classes[classes.length] = className;
	this.Element.className = classes.join(' ');
}
function CssClass_Remove(className){
	var old_classes = this.getClasses();
	var new_classes = [];
	for(var i in old_classes){
		if (old_classes[i] == className)
			continue;
		new_classes[new_classes.length] = old_classes[i];
	}
	this.Element.className = new_classes.join(' ');
}
function CssClass_Toggle(className){
	if (this.contains(className))
		this.remove(className);
	else
		this.add(className);
}
CssClass.prototype.getClasses = CssClass_GetClasses;
CssClass.prototype.getIndex = CssClass_GetIndex;
CssClass.prototype.contains = CssClass_Contains;
CssClass.prototype.add = CssClass_Add;
CssClass.prototype.remove = CssClass_Remove;
CssClass.prototype.toggle = CssClass_Toggle;

/*
	FireFox対策
*/
function setAutoCompleteOff(id) {
		var elm = $(id);
	if(elm) {
		elm.setAttribute('autocomplete', 'off');
	}
}

/*
	旧バージョン関係
*/
function FormatedNumberString(format, value){
	var t;
	var n = format.length;
	return (t=format + value).substr(t.length-n,n);
}
function FormatedDateString(date){
	return [
		FormatedNumberString("0000", dt.getFullYear()),
		FormatedNumberString("00", dt.getMonth()+1),
		FormatedNumberString("00", dt.getDate())
	].join("/");
}
function GetElementById(id){
		return document.all ? document.all[id] : document.getElementById(id);
}
function RebuildSelectMenu(ctrl, array, first_item){
	if (array == null)
		array = [];
	var len = array.length +1;
	for (;ctrl.options.length < len;)
		ctrl.options.add(document.createElement("option"));
	for (;ctrl.options.length > len;)
		ctrl.remove(0);
	if (array.length > 0){
		if(typeof(first_item) == 'string')
			ctrl.options[0].text = first_item;
		else
			ctrl.options[0].text = "選択してください";

		for (var i=0;i<array.length;i++){
			if(typeof(array[i]) == 'object'){
				ctrl.options[i+1].value = array[i][0];
				ctrl.options[i+1].text = array[i][1]
			}else if(typeof(array[i]) == 'string' && array[i] != '')
				ctrl.options[i+1].text = ctrl.options[i+1].value = array[i];
		}
		ctrl.disabled = false;
	} else {
		ctrl.options[0].text = "-";
		ctrl.disabled = true;
	}
}

function HookupEvent(control, eventType, functionPrefix) {
	var ev;
	eval("ev = control." + eventType + ";");
	if (typeof(ev) == "function") {
		ev = ev.toString();
		ev = ev.substring(ev.indexOf("{") + 1, ev.lastIndexOf("}"));
	}
	else {
		ev = "";
	}
	var func;
	if (navigator.appName.toLowerCase().indexOf('explorer') > -1) {
		func = new Function(functionPrefix + " " + ev);
	}
	else {
		func = new Function("event", functionPrefix + " " + ev);
	}
	eval("control." + eventType + " = func;");
}
function Zenkaku2Hankaku(src){
	var dst = "";
	for (var i=0; i<src.length; i++){
		var c = src.charCodeAt(i);
		if (c < 0xff01 || c > 0xff5d)
			dst += src.charAt(i);
		else
			dst += String.fromCharCode(c - 0xff01 + 0x21);
	}
	return dst;
}
var pageTracker;
function LinkTracker(url){
	if (url.match(/^https?:\/\/[.]+\.vitalnavi.com/i) != null)
		return;
	var i = new Image();
	i.src = "/outgoing.html?u=" + url;
	if(pageTracker)
		pageTracker._trackPageview('/outgoing/' + url.replace(/^https?:\/\//i, ''));
}
function _gaCrossDomainLink(url, useHash) {
    if (!pageTracker)
        return;
    pageTracker._link(url, useHash);
}
function TextTrim(text) {
	if(typeof(text) == 'undefined')
		return;
	return ('' + text).replace(/^\s*(.+?)\s*$/, '$1');
}
function EzHtmlEncode(element){
	EzHtmlDecode(element);
	element.value = element.value.replace(/&/g, '&amp;').replace(/</g, '&lt;');
}
function EzHtmlDecode(element){
	element.value = element.value.replace(/&lt;/g, '<').replace(/&amp;/g, '&');
}

