var dolphin = function() {
	var windows = new function() {
			this.setzindex = function(divelement) {
					divelement.style.zindex = ++this.zindex;
				};


			this.zindex = 100;
		};




	return {
		dom: function() {
				return {
					createElement: function(tagname, variable) {
							var element = document.createElement(tagname);

							if (variable) {
								for (var key in variable) {
									element[key] = variable;
								}
							}

							return element;
						},




					fade: function(node) {
						}
				};
			},




		form: function() {
				var read = function(node, handler) {
						this.elementInput = function(node) {
							var elements = node.getElementsByTagName("input");

							for (var i = 0; i < elements.length; i++) {
								switch (elements[i].type) {
									case "text":
									case "password":
									case "hidden":
										this.onValueElement(elements[i]);
										break;

									case "radio":
									case "checkbox":
										this.onCheckedElement(elements[i]);
										break;
								}
							}
						};


						this.elementTextarea = function(node) {
							var elements = node.getElementsByTagName("textarea");

							for (var i = 0; i < elements.length; i++) {
								this.onValueElement(elements[i]);
							}
						};


						this.elementSelect = function(node) {
							var elements = node.getElementsByTagName("select");

							for (var i = 0; i < elements.length; i++) {
								this.onValueElement(elements[i]);
							}
						};


						this.onValueElement = function(element) {
							if (this.handler != null) {
								this.handler.onValueElement(element);
							}
						};


						this.onCheckedElement = function(element) {
							if (this.handler != null) {
								this.handler.onCheckedElement(element);
							}
						};


						this.handler = null;

						if (handler != undefined) {
							this.handler = handler;
						}


						this.elementInput(node);
						this.elementTextarea(node);
						this.elementSelect(node);
					};


				return {
					read: function(node, handler) {
							return new read(node, handler);
						},


					clear: function(node) {
							new read(node, new function() {
									this.onCheckedElement = function(element) {
										element.checked = "nochecked";
									};


									this.onValueElement = function(element) {
										element.value = "";
									};
								});
						}
				};
			},




		request: function(url, variable, handler) {
				var request = false;

				try {
					request = new XMLHttpRequest();
				}
				catch (error) {
					var versions = new Array(
						"MSXML2.XMLHTTP.6.0",
						"MSXML2.XMLHTTP.5.0",
						"MSXML2.XMLHTTP.4.0",
						"MSXML2.XMLHTTP.3.0",
						"MSXML2.XMLHTTP",
						"Microsoft.XMLHTTP"
					);

					for (var i = 0; i < versions.length && !request; i++) {
						try {
							request = new ActiveXObject(versions[i]);
						}
						catch (error) {
							alert(error);
						}
					}
				}


				if (request) {
					request.open("POST", url, true);

					if (handler != undefined) {
						request.onreadystatechange = function(args) {
								if (request.readyState == 4) {
									if (request.status == 200) {
										handler(request, args);
									}
								}
							};
					}

					var params = "";

					if (variable) {
						for (var key in variable) {
							var value = encodeURIComponent("" + variable[key]);

							if (params.length == 0) {
								params += key + "=" + value;
							}
							else {
								params += "&" + key + "=" + value;
							}
						}

						request.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
						request.setRequestHeader("Content-length", params.length);
						request.setRequestHeader("Connection", "close");
					}

					request.send(params);
				}
			},




		windows: function() {
				return {
					setzindex: function(divelement) {
							windows.setzindex(divelement);
						}
				};
			}
	};
}();

