/**************************************************************************************************
*
*    Xml Http Async
*
**************************************************************************************************/
var Async = {
	send: function(path_, func_, data_) {
		var sender	= this.newXHR(),
			method	= data_ ? "POST" : "GET";

		if (!sender) {
			throw "Not supported by this browser!!      "
			return;
		}

		sender.open(method, path_, true);
		sender.setRequestHeader("User-Agent", "XMLHTTP/1.0");
		if (data_)
			sender.setRequestHeader("Content-type", "application/x-www-form-urlencoded;");
		if (sender.readyState == 4)
			return;
		sender.send(data_ || null);

		sender.onreadystatechange = function() {

			 if ( path_ === Async.logPath)
				 return;
			var error = null;
			
			if (sender.readyState == 4) {
				if (sender.status != 200 && sender.status != 304) {
						alert('HTTP error ' + sender.status);
					error = {
						error : sender.statusText + sender.status,
						url: location.href,
						path: path_,
						data: data_.replace(/&/gm, ", "),
						responseText: sender.responseText
					};
					if (Async.logPath)
						Async.log(error);
					if (!isSkin79 && typeof errorTest != "undefined" && errorTest.constructor == Function)/* Ãß°¡¿ä! */
						errorTest(error);
					if (func_ && func_.constructor == Function)
						func_({responseText: " HTTP Error!!"});
					return;
				}
				if (func_ && func_.constructor == Function)
					func_(sender);
			}
		};
	},

	newXHR: function() {
//		if (this.sender)
//			return this.sender;
		var creXHR	= [
				function() { return new ActiveXObject("Msxml2.XMLHTTP"); },
				function() { return new ActiveXObject("Msxml3.XMLHTTP"); },
				function() { return new ActiveXObject("Microsoft.XMLHTTP"); },
				function() { return new XMLHttpRequest(); }
			],
			i = creXHR.length;
		while(i--) {
			try{
				this.sender = creXHR[i]();
			}catch(e) {
				continue;
			}
		}
		return this.sender;
	},

	logPath: "/common/async/log.asp",
	log: function (log_) {
		this.send(this.logPath, "log" ,
			"error=" + log_.error +
			"&url=" + log_.url +
			"&path=" + log_.path +
			"&data=" + log_.data +
			"&responseText=" + log_.responseText + " HTTP Error!!"
		);
	}
};

/**************************************************************************************************
*
*    error print
*
**************************************************************************************************/
var errorTest = function( error_, func_ ) {
	if ( errorTest.Div && errorTest.Div.tagName )
		document.getElementById("Wrap").removeChild( errorTest.Div );
	errorTest.Div = document.createElement("DIV");
	document.getElementById("Wrap").appendChild( errorTest.Div );
	errorTest.Div.style.color = "#FFF";
	if ( typeof error_ == "object")
		for ( var item in error_ )
			errorTest.Div.innerHTML += item + " : " + error_[item] + "<br \/>";
	else
		errorTest.Div.innerHTML = error_.toString() + "<br \/>";
	if ( func_ && func_.constructor == Function)
		func_(  );
}

/**************************************************************************************************
*
*    execScript
*
**************************************************************************************************/
var execScript = function ( str_ ) {
	try {
		var value = (new Function ( str_ ))();
		if ( value === undefined || value === null)
			return "";
		else
			return value;
	} catch ( e ) {
		if (!isSkin79)
			alert("Exec Script Error!      \n\n" + str_);
	}
	return "";
};

/**************************************************************************************************
*
*    Cookie
*
**************************************************************************************************/
var Cookie	= {
	init : function(){
		var cookieList = document.cookie.split("; "),
		len = cookieList.length, temp;
		for (var i = 0; i < len; i ++){
			temp = cookieList[i].split("=");
			this[temp[0]] = unescape(temp[1]);
		}
	},

	create : function(name_, value_, hour_, path_, domain_, secure_){
		if (/init|create|remove/.test(name_)) {
			alert("\"" + name_ + "\" is Method of \"Cookie\" object.      \nCann't be used!");
			return;
		}
		if(hour_) {
			var now = new Date(), expires;
			now.setTime(hour_* 1000 * 60 * 60 + now.getTime());
			expires = "; expires=" + now.toGMTString();
		} else {
			expires = "";
		}
		document.cookie = name_ + "=" + escape(value_) + expires +
			(!path_ ? "" : "; path=" + path_) +
			(!domain_ ? "" : "; domain=" + domain_) +
			(!secure_ ? "" : "; secure");
		this[name_] = value_;
	},

	remove : function(name_) {
		if (/init|create|remove/.test(name_)) {
			alert("\"" + name_ + "\" is Method of \"Cookie\" object.      \nCann't be used!");
			return;
		}
		this.create(name_, "", -24);
		delete this[name_];
	}
};

//init
Cookie.init();

/**************************************************************************************************
*
*    swfHtml / swfWrite
*
**************************************************************************************************/
var swfHtml = function (path_, name_, transparent_, width_, height_, flashvars_) {
	name_ = name_ ? "id=\"" + name_ + "\" name=\"" + name_ + "\" " : "";
	width_ = width_ || "100%";
	height_ = height_ || "100%";

	return	"<object " + name_ + "classid=\"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000\" codebase=\"http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,0,0\" width=\"" + width_ + "\" height=\"" + height_ + "\">\n"
			+ "    <param name=\"movie\" value=\"" + path_ + "\">\n"
			+ "    <param name=\"menu\" value=\"false\">\n"
			+ "    <param name=\"quality\" value=\"high\">\n"
			+ "    <param name=\"allowscriptaccess\" value=\"always\">\n"
			+"		<param name=\"allowFullScreen\" value=\"true\" />\n"
			+ (transparent_ ? "    <param name=\"wmode\" value=\"" + transparent_ + "\"\n>" : "")
			+ (flashvars_ ? "    <param name=\"flashvars\" value=\"" + flashvars_ + "\"\n>" : "")

			+ "    <embed " + name_ + "src=\"" + path_ + "\" menu=\"false\" quality=\"high\" pluginspage=\"http://www.macromedia.com/go/getflashplayer\" type=\"application/x-shockwave-flash\" " + (transparent_ ? "wmode=\"" + transparent_ + "\" " : "") + "width=\"" + width_ + "\" height=\"" + height_ + "\" allowScriptAccess=\"always\" " + (flashvars_ ? "flashvars=\"" + flashvars_ + "\" " : "") + "></embed>\n"
			+ "<\/object>";
};

document.swfWrite = function (path_, name_, transparent_, width_, height_, flashvars_) {
	document.write(swfHtml.apply(this, arguments));
};

/**************************************************************************************************
*
*    className
*
**************************************************************************************************/
var hasClass = function(elem_, class_) {
	return (new RegExp("\\b" + class_ + "\\b")).test(elem_.className);
};

var addClass = function(elem_, class_) {
	//alert(elem_);
	if (!hasClass(elem_, class_))
		elem_.className = (elem_.className + " " + class_).replace(/^\s+|\s+$/g, "");

	inlineWrap();
	return elem_.className;
};

var removeClass = function(elem_, class_) {
	if (hasClass(elem_, class_))
		elem_.className = elem_.className.replace((new RegExp("\\b" + class_ + "\\b\\s*|\\s*\\b" + class_ + "\\b", "g")), "");

	inlineWrap();
	return elem_.className;
};

var toggleClass = function(elem_, class_) {
	if (hasClass(elem_, class_))
		return removeClass(elem_, class_);
	else
		return addClass(elem_, class_);
};

/**************************************************************************************************
*
*    add/remove Event
*
**************************************************************************************************/
var addEvent = function(elem_, event_, func_) {
	if(elem_.addEventListener)
		elem_.addEventListener(event_, func_, false);
	else if(elem_.attachEvent)
		elem_.attachEvent("on" + event_, func_);
	else
		alert("Not supported by this browser!!      ")
};

var removeEvent = function(elem_, event_, func_) {
	if(elem_.removeEventListener)
		elem_.removeEventListener(event_, func_, false);
	else if(elem_.detachEvent)
		elem_.detachEvent("on" + event_, func_);
	else
		alert("Not supported by this browser!!      ")
};
/**************************************************************************************************
*
*    formQueryString
*
**************************************************************************************************/
var formQueryString = function(form_) {
//|Button|Checkbox|FileUpload|Hidden|Input|Password|Radio|Reset|Select|Submit|Text|Textarea|
//INPUT TYPE - checkBox|file|hidden|password|radio|text, TEXTAREA, SELECT
	var elem = form_.elements, queryString = "";
	if (!elem)
		return "";
	for (var length = elem.length, i = 0; i < length; i++) {
		if (/file|hidden|password|text/i.test(elem[i].type) && elem[i].name) {
			queryString += "&" + elem[i].name + "=" + escape(elem[i].value).replace(/\+/g, "%2B");
			continue;
		}
		if (/checkbox|radio/i.test(elem[i].type) && elem[i].name && elem[i].checked) {
			queryString += "&" + elem[i].name + "=" + escape(elem[i].value).replace(/\+/g, "%2B");
			continue;
		}
		if (/textarea|select/i.test(elem[i].tagName) && elem[i].name) {
			queryString += "&" + elem[i].name + "=" + escape(elem[i].value).replace(/\+/g, "%2B");
			continue;
		}
	}
	return queryString.substr(1);
}

/**************************************************************************************************
*
*    getQueryString
*
**************************************************************************************************/
var getQueryString = function(str_) {
	 str_ = (str_.split("?")[1] || "").split("#")[0] || "";
	var matchs;
	matchs = str_.match(/\=[^&]+/g);
	if (!matchs)
		return "";
	for (var i = 0; i < matchs.length; i++) {
		str_ = str_.replace(matchs[i], "=" + escape(matchs[i].substr(1)).replace(/\+/g, "%2B"));
	}
	return str_
}

/**************************************************************************************************
*
*    random
*
**************************************************************************************************/
var random = function(min_, max_) {
	return Math.floor(Math.random() * (max_ - min_ + 1) + min_);
};

/**************************************************************************************************
*
*    trim
*
**************************************************************************************************/
String.prototype.trim = function () {
	return this.replace( /^\s+|\s+$/g, "" );
};

/**************************************************************************************************
*
*    img reSize
*
**************************************************************************************************/
	function reSizeLess( img_, w_, h_ ) {
		var w	= img_.width,
			h	= img_.height;
		if ( w < w_ && h < h_ )
			return;
		if ( (w > w_ ? w_ : w) * h / w > h_ )
			img_.height = h_;
		else
			img_.width	= w > w_ ? w_ : w;
	};

	function reSizeOver( img_, w_, h_ ) {
		var w	= img_.width,
			h	= img_.height;
		if ( w < w_ || h < h_  )
			return;
		if ( (w > w_ ? w_ : w) * h / w < h_ )
			img_.height = h_;
		else
			img_.width	= w > w_ ? w_ : w;
	}

/**************************************************************************************************
*
*    Script
*
**************************************************************************************************/
var insertScript = function (src_) {
	var insertScript = document.getElementById("insertScript");

	if (insertScript) {
		insertScript.parentNode.removeChild(insertScript);
	}

	insertScript = document.createElement("SCRIPT");
	insertScript.setAttribute("id", "insertScript");
	insertScript.setAttribute("type", "text/javascript");
	document.getElementsByTagName("HEAD").item(0).appendChild(insertScript);

	insertScript.setAttribute("src", src_);

};
/*************************************************************************************************/
