/**
* @fileoverview
* @author sejeon
* @version 0.1
*/

function HtmlPage(w) {
	if (!w) w = window;
	if (!w.location) throw new "Invalid argument.";

	var wnd = w;
	var queryString = new QueryStringCollection(wnd);
	var host = w.document.URL;
	host = host.substring(0, host.indexOf(w.location.search));


	this.getQueryString = function () {
		return queryString;
	}
	this.redirect = function () {
		wnd.location.href = host + "?" + queryString.toString();
	}
}


var Iframe = null;
function InitIframe(Iframeobj){
	Iframe = new IFramePage(Iframeobj);
}

function IFramePage(Iframeobj){
	var iframeWindow = Iframeobj.contentWindow;
	
	try
	{
		var wnd = iframeWindow;
		var queryString = new QueryStringCollection(wnd);
		var host = iframeWindow.document.URL;
		host = host.substring(0, host.indexOf(iframeWindow.location.search));
	}
	catch(exception){
		throw new "Iframe¿¡ Á¢±ÙÇÒ ¼ö ¾ø½À´Ï´Ù. Å¸µµ¸ÞÀÎÀÇ ÁÖ¼ÒÀÔ´Ï´Ù";
		
	}
	
	
	this.getQueryString = function () {
		return queryString;
	}
	this.redirect = function () {
		Iframeobj.src = host + "?" + queryString.toString();
	}
}

var Page = new HtmlPage(window);

/**
* @class QueryStringCollection Å¬·¡½º ÀÔ´Ï´Ù.
* @constructor
*/
function QueryStringCollection(w) {

	if (!w) w = window;
	if (!w.location) throw new "Invalid argument.";

	var q = w.location.search;

	if (q.length > 1) q = q.substring(1, q.length);
	else q = null;

	var keyValuePairs = new Array();

	if (q) {
		for (var i=0; i < q.split("&").length; i++) {
			keyValuePairs[i] = q.split("&")[i];
		}
	}

	/**
	* Äõ¸®½ºÆ®¸µ °ªÀ» °¡Á®¿É´Ï´Ù.
	* @return Äõ¸®½ºÆ®¸µ °ª
	* @type String
	*/
	this.getValue = function (name) {
		for (var i = 0; i < keyValuePairs.length; i++) {
			if (keyValuePairs[i].split("=")[0] == name)
			return keyValuePairs[i].split("=")[1];
		}
		return null;
	}
	/**
	* Äõ¸®½ºÆ®¸µ °ªÀ» ¼³Á¤ÇÕ´Ï´Ù.
	* @param {String} name Äõ¸®½ºÆ®¸µ ÀÌ¸§
	* @param {String}	value Äõ¸®½ºÆ®¸µ °ª
	*/
	this.setValue = function (name, value) {
		var idx = getIndex(name);
		if (idx >= 0) { // exists
			keyValuePairs[idx] = name + "=" + escape(value);
		}
		else { // not exists
			keyValuePairs[this.getLength()] = name + "=" + escape(value);
		}
	}
	/**
	* Äõ¸®½ºÆ®¸µ Ç×¸ñÀ» Á¦°ÅÇÕ´Ï´Ù.
	* @param {String} value Äõ¸®½ºÆ®¸µ ÀÌ¸§
	*/
	this.removeValue = function (name) {
		var idx = getIndex(name);
		if (idx >= 0) { // exists
			var newKeyValuePairs = new Array();
			var newIdx = 0;
			for (var i = 0; i < keyValuePairs.length; i++) {
				if (i == idx) continue;
				newKeyValuePairs[newIdx] = keyValuePairs[i];
				newIdx++;
			}
			keyValuePairs = newKeyValuePairs;
		}
	}
	/**
	* Äõ¸®½ºÆ®¸µ Ç×¸ñÀ» ¸ðµÎ Á¦°ÅÇÕ´Ï´Ù.
	*/
	this.clearValue = function() {
		var newKeyValuePairs = new Array();
		keyValuePairs = newKeyValuePairs;
	}
	
	/**
	* Äõ¸®½ºÆ®¸µ ÀÌ¸§µéÀÇ ¹è¿­À» °¡Á®¿É´Ï´Ù.
	* @return Äõ¸®½ºÆ®¸µ ÀÌ¸§µéÀÇ ¹è¿­
	* @type Array
	*/
	this.getParameters = function () {
		var ret = new Array(this.getLength());
		for (var i = 0; i < keyValuePairs.length; i++) {
			ret[i] = keyValuePairs[i].split("=")[0];
		}
		return ret;
	}
	/**
	* Äõ¸®½ºÆ®¸µ Ç×¸ñ °³¼ö¸¦ ¹ÝÈ¯ÇÕ´Ï´Ù.
	* @return Äõ¸®½ºÆ®¸µ Ç×¸ñ °³¼ö
	* @type int
	*/
	this.getLength = function () { return keyValuePairs.length; }
	/**
	* Äõ¸®½ºÆ®¸µÀ» Uri querystring Æ÷¸ËÀÇ ¹®ÀÚ¿­·Î ¹ÝÈ¯ÇÕ´Ï´Ù.
	* @return Æ÷¸ÅÆÃµÈ Äõ¸®½ºÆ®¸µ ¹®ÀÚ¿­
	* @type String
	*/
	this.toString = function () {
		return keyValuePairs.join("&");
	}

	function getIndex(name) {
		for (var i = 0; i < keyValuePairs.length; i++) {
			if (keyValuePairs[i].split("=")[0] == name) return i;
		}
		return -1;
	}
}