﻿/**
 * @name Bridge
 * @created 2008-03-05
 * @modified 2008-03-05
 * @version 0.0.2.1
 */



var $_ = Bridge;

function Bridge(selector) {
//	return Bridge.prototype.collect.apply(Bridge.prototype, arguments);
	return Bridge.prototype.collect(selector);// Win IE 5
}

Bridge.prototype = {
	// 要素を取得
	collect : function(selector) {
		return (selector.match('^#(.+)')) ? document.getElementById(RegExp.$1)
			: (selector.match('^\.(.+)')) ? Bridge.prototype.getElementsByClassName(RegExp.$1)
			: document.getElementsByTagName(selector);
	},

	// クラス名をもとに要素を取得
	getElementsByClassName: function(className, parent, tagName) {
		if (parent && typeof parent == 'string') parent = document.getElementById(parent);
		if (!parent) parent = document;
		if (!tagName) tagName = '*';
		var elms = [];
		var collection = parent.getElementsByTagName(tagName);
		if (tagName == '*' && !collection.length && parent.all) collection = parent.all;// Win IE 5.x
		var pattern = new RegExp('(^|\\s)' + className + '(\\s|$)');
		for (var i = 0, l = collection.length; i < l; i++) {
			if (collection[i].className.match(pattern)) {
//				elms.push(collection[i]);
				elms[elms.length] = collection[i];// Win IE 5.x
			}
		}
		return (elms.length == 0) ? null : elms;
	},

	// 要素を作成
	element: function(name, attr) {
		var elm = document.createElement(name);
		for (var key in attr) elm.setAttribute(key, attr[key]);
		return elm;
	},

	// イベントを追加
	addEvent: function(elm, ev, fn, capt) {
		if (elm.addEventListener) {// Fx, Sf, Op, Ns
			elm.addEventListener(ev, fn, capt);
			return true;
		} else if (elm.attachEvent) {// Win IE
			return elm.attachEvent('on' + ev, fn);
		} else {// Mac IE
			var temp = elm['on' + ev];
			if (typeof elm['on' + ev] != 'function') {
				elm['on' + ev] = function(e) { fn(e); }
			} else {
				elm['on' + ev] = function(e) {
					temp(e);
					fn(e);
				}
			}
		}
	},

	// クッキーを取得
	getCookie: function(key) {
		return document.cookie.match('(^|;)\\s*' + key + '=([^;]*)(;|$)') ? unescape(RegExp.$2) : null;
	},

	// クッキーをセット
	setCookie: function(key, val, expires, path, domain, secure) {
		var prop = key + '=' + escape(val);
		if (expires) prop += '; expires=' + new Date(new Date().getTime() + expires).toGMTString();
		if (path) prop += '; path=' + path;
		if (domain) prop += '; domain=' + domain;
		if (secure) prop += '; secure';
		document.cookie = prop;
	},

	// クッキーを削除
	deleteCookie: function(key, path, domain) {
		if (this.getCookie(key) === null) return false;
		var prop = key + '=; expires=' + new Date(0).toGMTString();
		if (path) prop += '; path=' + path;
		if (domain) prop += '; domain=' + domain;
		document.cookie = prop;
		return true;
	}
}

for (var key in Bridge.prototype) Bridge[key] = Bridge.prototype[key];







