
var doit=true;
function exit(){
	if (doit) open("http://deai.souzer.com")
}

function register_click(a) {
	javascript:urchinTracker('/register');
	doit=false;
	if(a.href.indexOf('frm') != -1) return;
	a.href += '?frm=';
}


addEvent(window,"load",function(){
		var http = new HttpClient(function(data) {return});
	http.request("post", "counter.php");
});



function setEventListener(obj, handlers) {
	//イベントハンドラのリストを追加
	obj.handlers = {};
	try {
		for(var i = 0; i < handlers.length; i++) {
			obj.handlers[handlers[i]] = [];
		}
	} catch(e) {
		return e;
	}

	//addEventListenerメソッドを追加
	obj.addEventListener = function(type, method) {
		this.removeEventListener(type, method);
		this.handlers[type].push(method);
	};

	//removeEventListenerメソッドを追加
	obj.removeEventListener = function(type, method) {
		for(var i = this.handlers[type].length - 1; i >= 0; i--) {
			if(this.handlers[type][i] === method) {
				this.handlers[type].splice(i, 1);
			}
		}
	};

	//イベント通知用メソッドを追加（オブジェクト内でイベントを発生させたいタイミングでこのメソッドを呼ぶ）
	obj.notify = function(type, event) {
		//デフォルトのイベントハンドラがあれば実行
		obj["on" + type] && typeof(obj["on" + type]) == "function" && obj["on" + type].apply(obj, [event]);

		var n = this.handlers[type].length;
		for(var i = 0; i < n; i++) {
			this.handlers[type][i].apply(obj, [event]);
		}
	};
}

//イベントのデフォルト動作のキャンセル
function eventCancel(event) {
	if(event.preventDefault) {
		eventCancel = function(event) { event.preventDefault(); };
	} else {
		eventCancel = function(event) { event.returnValue = false; };
	}
	eventCancel(event);
}

//イベントバブルの禁止
function eventStop(event) {
	if(event.stopPropagation) {
		eventStop = function(event) { event.stopPropagation(); };
	} else {
		eventStop = function(event) { event.cancelBubble = true; };
	}
	eventStop(event);
}

//httpクライアントオブジェクト
function HttpClient(responseEvent) {
	//-----------------------------コンストラクタ
	this.body = [];
	this.client = (function() {
		if(window.XMLHttpRequest) {
			return new XMLHttpRequest();
		}
		if(window.ActiveXObject) {
			try {
				return new ActiveXObject("Msxml2.XMLHTTP");
			} catch(e) {
				try {
					return new ActiveXObject("Microsoft.XMLHTTP");
				} catch(e) {
					return null;
				}
			}
		}
		return null;
	})();

	setEventListener(this, ["error"]);

	//レスポンスイベントを登録
	this.setResponseEvent(arguments[0] || function() {});
}
HttpClient.prototype = {
	//プロパティ
	body:		[],			//送信データbody
	client:		null,		//httpクライアント
	xml:		false,		//レスポンスをXMLで受け取るかどうか
	interval:	12000,		//タイムアウト時間

	//リクエストメソッド
	request: function(method, url, async, user, password) {
		var async = async || true;

		//bodyを整形する
		var body = [];
		for(var i in this.body) {
			if(this.body[i] instanceof Array) {
				for(var j = 0; j < this.body[i].length; j++) {
					body.push(i + "=" + this.body[i][j]);
				}
			} else {
				body.push(i + "=" + this.body[i]);
			}
		}
		body = body.join("&");

		//タイムアウト処理
		var _this = this;
		this.timer = new Timer(function() {
			_this && _this.notify("error", {
				msg: "サーバからの応答がありません。",
				status: 0,
				statusText: "Timeout"
			});
		}, this, this.interval, false);

		//リクエスト
		if(method.match(/post/i)) {
			this.client.open(method, url, async, user, password);
			this.client.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
			this.client.setRequestHeader('If-Modified-Since', 'Thu, 01 Jun 1970 00:00:00 GMT');		//IEのキャッシュ対策
			this.client.send(body);
		} else {
			if(url.indexOf("?") == -1) {
				url += "?";
				if(body.length) {
					body = "&" + body;
				}
			}
			this.client.open(method, url + body, async, user, password);
			this.client.setRequestHeader('If-Modified-Since', 'Thu, 01 Jun 1970 00:00:00 GMT');		//IEのキャッシュ対策
			this.client.send("");
		}
	},

	//レスポンスイベントの登録
	setResponseEvent: function(responseEvent) {
		var httpClient = this;

		this.client.onreadystatechange = function() {
			if(httpClient.client.readyState == 4) {
				httpClient.timer.cancel();

				if(httpClient.client.status == 200) {
					var data = httpClient.xml? httpClient.client.responseXML: httpClient.client.responseText;
					responseEvent(data);
				} else {
					var error = {
						msg: "サーバから以下のエラーが返されました。",
						status: httpClient.client.status,
						statusText: httpClient.client.statusText
					};
					httpClient.notify("error", error);
				}
			}
		};
	},

	//フォームからbodyを取得
	setBodyByForm: function(form) {
		for(i = 0; i < form.elements.length; i++) {
			var item = form.elements[i];

			switch(item.type) {
				case "text":
				case "password":
				case "hidden":
				case "textarea":
					this.body[item.name] = item.value;
					break;
				case "radio":
					if(item.checked) {
						this.body[item.name] = item.value;
					}
					break;
				case "checkbox":
					if(item.checked) {
						if(this.body[item.name]) {
							this.body[item.name].push(item.value);
						} else {
							this.body[item.name] = [item.value];
						}
					}
					break;
				case "select-one":
					for(var j = 0; j < item.options.length; j++) {
						if(item.options[j].selected) {
							this.body[item.name] = item.options[j].value;
							break;
						}
					}
					break;
				case "select-multiple":
					for(var j = 0; j < item.options.length; j++) {
						if(item.options[j].selected) {
							if(this.body[item.name]) {
								this.body[item.name].push(item.options[j].value);
							} else {
								this.body[item.name] = [item.options[j].value];
							}
						}
					}
					break;
				//このあたりは多分使わない
//				case "file":
//				case "image":
			}
		}
	},

	//エラー時に実行されるイベント。このオブジェクトのインスタンス上で実行される。
	//デフォルトではアラートでエラーメッセージを表示
	onerror: function(e) {
		alert(e.msg + "\n" + e.status + " " + e.statusText);
	}
};

////////////////////////////////////////////////////////////////////
//タイマオブジェクト
function Timer(method, owner, interval, repeat) {
	//引数があればデフォルト値を上書き
	if(0 in arguments) { this.method = method; }
	if(1 in arguments) { this.owner = owner; }
	if(2 in arguments) { this.interval = interval; }
	if(3 in arguments) { this.repeat = repeat; }

	//-----------------------------コンストラクタ
	if(this.repeat) {
		this.tid = setInterval(this.setMethod(this.owner), this.interval);
	} else {
		this.tid = setTimeout(this.setMethod(this.owner), this.interval);
	}
}
Timer.prototype = {
	//プロパティ
	method:		function() {},	//タイマイベント
	owner:		null,			//タイマイベントを保持するオブジェクト
	interval:	24,				//タイマ周期
	repeat:		true,			//繰り返すかどうか
	tid:		null,			//タイマID

	//タイマイベントの登録
	setMethod: function(owner) {
		var method = this.method;

		return function() {
			method.apply(owner);
		};
	},

	//タイマの解除
	cancel: function() {
		if(this.repeat) {
			clearInterval(this.tid);
		} else {
			clearTimeout(this.tid);
		}
	}
};

//イベントリスナの解除
function removeEvent(element, type, method) {
	if(element.removeEventListener) {
		removeEvent = function(element, type, method) {
			element.removeEventListener(type, method, false);
		};
	} else if(element.detachEvent) {
		removeEvent = function(element, type, method) {
			element.detachEvent("on" + type, method);
		};
	} else {
		removeEvent = function() {};
	}
	removeEvent(element, type, method);
}


