/** 
 * @class stimpack의 super class 입니다.
 */
var stp =
	/**
	 * @lends stp
	 */
	{
	/** 
	 * stimpack의 버젼정보를 제공합니다.
	 * @description : "버전_날짜" 로 구성되어있습니다 (ex : x.x_xxxxxx)
	 * @method */
	version:"1.3_100302",
	/** 
	 * stimpack의 제작팀을 제공합니다.
	 * @method */
	author:"Reflexion Web Team",
	body:document.body,
	P:(typeof Prototype=="object")?true:false,
	J:(typeof Prototype=="undefined")?true:false
};

if(stp.P){
Object.extend(Event, {
	wheel:function (event){
		var delta = 0;
		if (!event) event = window.event;
		if (event.wheelDelta) {
			delta = event.wheelDelta/120; 
			if (window.opera) delta = -delta;
		} else if (event.detail) { delta = -event.detail/3;     }
		return Math.round(delta); //Safari Round
	}
});
}else{
(function($) {
	var types = ['DOMMouseScroll', 'mousewheel'];
	$.event.special.mousewheel = {
		setup: function() {
			if ( this.addEventListener )
				for ( var i=types.length; i; )
					this.addEventListener( types[--i], handler, false );
			else
				this.onmousewheel = handler;
		},
		teardown: function() {
			if ( this.removeEventListener )
				for ( var i=types.length; i; )
					this.removeEventListener( types[--i], handler, false );
			else
				this.onmousewheel = null;
		}
	};
	$.fn.extend({
		mousewheel: function(fn) {
			return fn ? this.bind("mousewheel", fn) : this.trigger("mousewheel");
		},
		
		unmousewheel: function(fn) {
			return this.unbind("mousewheel", fn);
		}
	});
	function handler(event) {
		var args = [].slice.call( arguments, 1 ), delta = 0, returnValue = true;
		
		event = $.event.fix(event || window.event);
		event.type = "mousewheel";
		
		if ( event.wheelDelta ) delta = event.wheelDelta/120;
		if ( event.detail     ) delta = -event.detail/3;
		
		// Add events and delta to the front of the arguments
		args.unshift(event, delta);

		return $.event.handle.apply(this, args);
	}
	})(jQuery);
};
/**
 * 사용자의 브라우져 환경을 리턴합니다.
 * @name stp.browser
 * @version 1.3.0
 * @function
 * @return Array
 */
function stpUserBrowser(){
	var p = (stp.P)?Prototype.Browser:{IE:$.browser.msie,Opera:$.browser.opera,WebKit:$.browser.safari,Gecko:$.browser.mozilla};
	var bArr = new Array();
	if(p.IE){
		bArr[0]="ie";
		bArr[1]=(navigator.appVersion).replace(/\s/g,"").match(/MSIE[0-9.]+/)[0].match(/[0-9.]+/)[0];
	}else if(p.Opera){
		bArr[0]="op";
		bArr[1]=(navigator.userAgent).replace(/\s/g,"").match(/Version\/[0-9.]+/)[0].match(/[0-9.]+/)[0];
	}else if(p.WebKit && (navigator.appVersion).indexOf("Chrome")==-1){
		bArr[0]="sf";
		bArr[1]=(navigator.appVersion).replace(/\s/g,"").match(/Version\/[0-9.]+/)[0].match(/[0-9.]+/)[0];
	}else if(p.WebKit && (navigator.appVersion).indexOf("Chrome")!=-1){
		bArr[0]="cr";
		bArr[1]=(navigator.appVersion).replace(/\s/g,"").match(/Chrome\/[0-9.]+/)[0].match(/[0-9.]+/)[0];
	}else if(p.Gecko){
		bArr[0]="ff";
		bArr[1]=(navigator.userAgent).replace(/\s/g,"").match(/Firefox\/[0-9.]+/)[0].match(/[0-9.]+/)[0];
	}else{
		alert(navigator.userAgent);
	};
	return bArr;
};stp.browser=stpUserBrowser;

/**
 * @name stp.$
 * @version 1.3.0
 * @param str
 * @return
 */
function stpLoadIdElement(str,b){
	var tElem=(stp.P)?$(str):$("#"+str)[0];
	return (stp.J && stp.$B(b))?$("#"+str):tElem;
}stp.$=stpLoadIdElement;

/**
 * @name stp.$$
 * @version 1.3.0
 * @param str
 * @return
 */
function stpLoadClassElement(str){
	return (stp.P)?$$(str):$(str);
}stp.$$=stpLoadClassElement;

/**
 * @name stp.$B
 * @version 1.2.0
 * @param str
 * @return
 */
function stpBoolean(s){
	if(s=="false" || s==null){return false;};
	if(s=="true"){return true;};
	return s;
};stp.$B=stpBoolean;

/**
 * @name stp.$V
 * @version 1.3.0
 * @param str
 * @return
 */
function stpDisplayBoolean(oId){
	return (stp.P)?(stp.$(oId).getStyle("display")!="none"):(stp.$(oId).css("display")!="none");
};stp.$V=stpDisplayBoolean;

/**
 * 문자열내에 있는 모든 숫자을 리턴합니다.
 * @name stp.$N
 * @version 1.2.0
 * @function
 * @param {String/require} str : 숫자을 추출할 문자열
 * @return Number
 */
function stpReturnNumber(s){
	var s = s+"";
	return (s!="")?Number(s.match(/[0-9]+/g).join("")):"";
};stp.$N=stpReturnNumber;

/**
 * @name stp.$R
 * @version 1.3.0
 * @param min
 * @param max
 * @return
 */
function stpReturnNumberArray(min,max){
	return (function(){
		var tArr = new Array();
		for(i=stp.$N(min);i<(stp.$N(max)+1);i++){
			tArr.push(i);
		};
		return tArr;
	})();
};stp.$R=stpReturnNumberArray;

/**
 * 엘리먼트을 만들고 그에 따른 아이디을 지정합니다.
 * @name stp.$E
 * @version 1.3.0
 * @function
 * @param {String/require} name : 엘리먼트 객체의 Tag name
 * @param {String/option} id : 엘리먼트의 아이디
 * @return Element
 */
function stpMakeElement(name,id){
	var t = document.createElement(name);
	t.id = (id)?id:"";
	return t;
};stp.$E=stpMakeElement;

/**
 * input , textarea요소 등의 value값을 가져옵니다.
 * @name stp.$F
 * @version 1.3.0
 * @function
 * @param {String/require} oId : value값을 가진 엘리먼트의 아이디
 * @return Element
 */
function stpReadValue(oId){
	return stp.$(oId).value;
};stp.$F=stpReadValue;

/**
 * 텍스트을 Array로 바꿉니다.
 * @name stp.$A
 * @version 1.3.0
 * @param str
 * @return
 */
function stpMakeArray(str){
	var tArr = new Array();
	for(i=0;i<str.length;i++){
		tArr.push(str.charAt(i));
	};
	return tArr;
};stp.$A=stpMakeArray;

/**
 * string의 앞뒤의 공백을 제거합니다.
 * @name stp.trim
 * @version 1.2.0
 * @static
 * @function
 * @param {String/require} str : 앞뒤공백을 지울 String object
 * @return String
 */
function stpReturnTrim(s){
	return s.replace(/(^\s*)|(\s*$)/g, "");
};stp.trim=stpReturnTrim;

/**
 * string의 모든 공백을 제거합니다.
 * @name stp.delBlank
 * @version 1.2.0
 * @static
 * @function
 * @param {String/require} str : 모든 공백을 지울 String Object
 * @return String
 */
function stpDelBlank(s){
	return s.replace(/\s+/g,"");
};stp.delBlank=stpDelBlank;

/**
 * string의 모든 특수문자를 삭제합니다.
 * @name stp.delSpec
 * @version 1.2.0
 * @static
 * @function
 * @param {String/require} str : 특수문자를 삭제할 String Object
 * @return String
 */
function stpDelSpec(s){
	return s.replace(/[^ㄱ-ㅎ가-힣\s\w]+/g,"");
};stp.delSpec=stpDelSpec;

/**
 * 글자를 byte수로 리턴합니다.
 * @name stp.byte
 * @version 1.2.0
 * @static
 * @function
 * @param {String/require} str : byte수를 받을 String Object
 * @return Number
 */
function stpReturnByte(s){
	var c=0; //바이트수를 저장할 변수
	for(i=0;i<s.length;i++){
		c+=(s.charCodeAt(i)>127)?2:1;
	};
	return c;
};stp.byte=stpReturnByte;

/**
 * 돈을 표현하는 형식으로 리턴 (3단위마다 ,를 리턴)
 * @name stp.money
 * @version 1.3.0
 * @static
 * @function
 * @param {Number/require} number : 돈형식으로 바꿀 Number Object
 * @return String
 */
function stpReturnMoney(n){
	var n = stp.$N(n)+"";
	while ((/(-?[0-9]+)([0-9]{3})/).test(n)) {
		n=n.replace((/(-?[0-9]+)([0-9]{3})/), "$1,$2");
	};return n;
};stp.money=stpReturnMoney;

/**
 * 넘어온 배열에서 지정된 개수만큼 "겹치지않는" 불규칙배열을 리턴합니다.
 * @name stp.suffle
 * @version 1.2.0
 * @function
 * @param {Array/require} array : 불규칙배열로 만들 배열
 * @param {Number/option} length : 리턴될 배열의 갯수
 * @return Array
 */
function stpSuffle(arr,length){
	this.su=function(){return Math.random()*2-1;};
	var arr=arr.sort(this.su);
	arr=(length)?arr.slice(0,length):arr;
	return arr;
};stp.suffle=stpSuffle;

/**
 * 지정된 숫자 이하 에서 지정된 개수만큼 "겹치지않는" 불규칙배열을 리턴합니다.
 * @name stp.suffleNumber
 * @version 1.3.0
 * @function
 * @param {Number/require} min : 최소값
 * @param {Number/require} max : 최대값
 * @param {Number/option} length : 리턴될 배열의 갯수
 * @return Array
 */
function stpSuffleNumber(min,max,length){
	return stpSuffle(stp.$R(min,max),length);
};stp.suffleNumber=stpSuffleNumber;

/**
 * 넘어온 배열에서 지정된 개수만큼 "겹칠수도있는" 불규칙배열을 리턴합니다.
 * @name stp.random
 * @version 1.3.0
 * @function
 * @param {Array/require} array : 불규칙배열로 만들 배열
 * @param {Number/option} length : 리턴될 배열의 갯수
 * @return Array
 */
function stpRandom(array,length){
	var tArr=new Array();
	var tR = stp.randomNumber(0,(array.length-1),length)
	if(stp.P){
		$A(tR).each(function(l){tArr.push(array[l])});
	}else{
		$(tR).each(function(i,l){tArr.push(array[l])});
	}
	return tArr;
};stp.random=stpRandom;

/**
 * 지정된 숫자 이하 에서 지정된 개수만큼 "겹칠수도있는" 불규칙배열을 리턴합니다.
 * @name stp.radomNumber
 * @version 1.3.0
 * @function
 * @param {Number/require} min : 최소값
 * @param {Number/require} max : 최대값
 * @param {Number/option} length : 리턴될 배열의 갯수
 * @return Array
 */
function stpRandomNumber(min,max,length){
	var tArr = new Array();
	var min = stp.$N(min);
	var max = stp.$N(max);
	for(i=min;i<(max+1);i++){
		tArr.push(Math.floor(Math.random()*(max-(min-1)))+min);
	};
	tArr=(length)?tArr.slice(0,length):tArr;
	return tArr;
};stp.randomNumber=stpRandomNumber;

/**
 * 쿠키를 설정합니다.
 * @name stp.setCookie
 * @version 1.2.0
 * @function
 * @param {String/require} name : cookie의 이름을 설정합니다.
 * @param {String/require} value : cookie의 값을 설정합니다.
 * @param {Number/option} cMin : cookie의 유효시간을 분단위로 설정합니다. (0일 경우에는 브라우져 창이 닫히면 쿠키도 소멸)
 * @param {Boolean/option} escapeUse : 입력되는 cookie의 값을 escape할것인지을 지정합니다.
 * @return Cookie
 */
function stpSetCookie(name,value,cMin,escapeUse){
	var value = (!escapeUse) ? value : escape(value); //이스케이프 기능사용여부
	var cMin = (!cMin) ? 0 : cMin; //쿠키유효기간 설정
	var expTime = "";
	if(cMin!=0){
		var sDate = new Date(); //오늘의 날짜 저장;
		sDate.setMinutes(sDate.getMinutes()+cMin); //원하는 날짜 만큼 지정 (분을 기준으로 함)
		expTime = sDate.toGMTString(); //expires형식으로 전환
	};
	document.cookie = name+"="+value+";expires="+expTime+"path='/'";
};stp.setCookie=stpSetCookie;

/**
 * 쿠키에 설정된 값을 가져옵니다.
 * @name stp.getCookie
 * @version 1.2.0
 * @function
 * @param {String/require} name : 값을 가져올 cookie의 이름을 지정합니다.
 * @return String
 */
function stpGetCookie(name){
	var cookie = document.cookie;
	sIndex = cookie.indexOf(name+"=");
	start = sIndex+name.length+1; //시작점 찾기
	end = cookie.indexOf(";",start); //마지막 점 찾기
	if(end=="-1"){end = cookie.length;}; //만약 마지막 값이라서 end의 indexOf값이 -1이라면 마지막값(length로 지정)
	cookieValue = unescape(cookie.substring(start,end)); //시작점 과 마지막점 으로 값을 가져옴
	return cookieValue;
};stp.getCookie=stpGetCookie;
/**
 * 쿠키를 삭제합니다.
 * @name stp.delCookie
 * @version 1.2.0
 * @function
 * @param {String} name : 지울 쿠키의 이름을 지정합니다.
 * @return cookie
 */
function stpRemoveCookie(name){
	stpSetCookie(name,"",-876000); //1년전으로 쿠키를 설정한다. (쿠키의 유효기간이 끝나면서 없어짐);
};stp.delCookie=stpRemoveCookie;




/**
 * 이벤트가 발생한 지점의 화면 X,Y 좌표을 배열형식으로 리턴합니다 [X,Y,element]
 * @version 1.3.0
 * @name stp.getXY
 * @function
 * @return Array
 */
function stpGetEventXY(){
	var doc = document.documentElement, body = document.body;
	var pageX = event.clientX + (doc && doc.scrollLeft || body && body.scrollLeft || 0) - (doc && doc.clientLeft || body && body.clientLeft || 0);
	var pageY = event.clientY + (doc && doc.scrollTop  || body && body.scrollTop  || 0) - (doc && doc.clientTop  || body && body.clientTop  || 0);
	return [pageX,pageY,event.srcElement]
};stp.getXY=stpGetEventXY;
if(stp.browser()[0]=="ff"){
	var tempMouseX;
	var tempMouseY;
	var tempEventElement;
	document.onmousemove=function(e){
		tempMouseX=e.pageX;
		tempMouseY=e.pageY;
		tempEventElement=(e.srcElement)?e.srcElement:e.target;
	};
	function stpGetEventXYFF(){
		return [tempMouseX,tempMouseY,tempEventElement];
	};stp.getXY=stpGetEventXYFF;
};

/**
 * 사용자창의 가로,세로,스크롤높이 값을 리턴합니다.
 * @name stp.viewPort
 * @version 1.3.0
 * @function
 * @return Array
 */
function stpViewPort(){
	return (stp.P)?[document.viewport.getDimensions().width,document.viewport.getDimensions().height,document.viewport.getScrollOffsets().top]:[$(window).width(),$(window).height(),$(window).scrollTop()];
};stp.viewPort=stpViewPort;

/**
 * js파일의 query에서 key에 맞는 값을 가져 옵니다.
 * @name stp.queryVars
 * @version 1.3.0
 * @function
 * @param {String/require} key : query에서 가져올 key값
 * @return String
 */
function stpQueryLoad(key){
	var s = (stp.P)?$$('script[src]').find(function(n){return (n.src.indexOf(key)!=-1)}):$('script[src]').filter(function(i,n){return (n.src.indexOf(key)!=-1)});
	s = (stp.J)?s[0]:s;
	return s.src.split(key+"=")[1].split('&')[0];
};stp.queryVars=stpQueryLoad;

/**
 * url에있는 query에서 key에 맞는 값을 가져옵니다.
 * @name stp.urlVars
 * @version 1.2.0
 * @function
 * @param {String/require} key : query에서 가져올 key값
 * @return String
 */
function stpLocationLoad(key){
	return location.href.split(key+"=")[1].split('&')[0];
};stp.urlVars=stpLocationLoad;

/**
 * IE6에서 PNG의 투명화을 지원하는 함수
 * @name stp.png24
 * @version 1.2.0
 * @function
 * @param {Element/require} obj : img element로 png경로을 가진 투명화가 될 엘리먼트  
 * @return Element
 */
function stpSetPng24(obj){
	if(obj && stp.browser()[0]=="ie" && stp.browser()[1].indexOf("6")==0){
		obj.width=obj.height=1;
		$(obj).removeClassName("png24");
	    obj.style.filter="progid:DXImageTransform.Microsoft.AlphaImageLoader(src='"+ obj.src +"',sizingMethod='image');"
	};
};stp.png24 = stpSetPng24;


/**
 * 글자수를 해당하는 부분에 맞게 잘라서 리턴해주는 함수 입니다.
 * @description 꼭 선언되는 엘리먼트 안에는 string만 존재해야 합니다.
 * @name stp.cutWidth
 * @version 1.2.0
 * @function
 * @return String
 */
function stpWidthCutWord(str,wid,tail,style){
	return (function(){
		var tElem = stp.$E("span");tElem.innerHTML = str;document.body.appendChild(tElem);
		tElem.style.cssText = "position:absolute;top:-100px;white-space:nowrap;visibility:hidden;"+style;
		
		var tTail = (tElem.offsetWidth>wid)?tail:"";
		var tTailElem = stp.$E("span");tTailElem.innerHTML = tail;document.body.appendChild(tTailElem);
		tTailElem.style.cssText = "position:absolute;top:-100px;white-space:nowrap;visibility:hidden;"+style;
		tElem.innerHTML = (tElem.innerHTML).replace(/(&nbsp;)/gi,"");
		
//		while(tElem.offsetWidth>(wid-tTailElem.offsetWidth)){
//			tElem.innerHTML = (tElem.innerHTML).substr(0,tElem.innerHTML.length-1);
//		};

		while(tElem.offsetWidth>(wid-tTailElem.offsetWidth)){
			var tstr = tElem.innerHTML;
//			tstr = (tstr).replace("&lt;","<");
//			tstr = (tstr).replace("&gt;",">");
			tstr = (tstr).replace("<", "&lt;");
			tstr = (tstr).replace(">", "&gt;");
			tstr = (tstr).substr(0,tstr.length-1);
			tElem.innerHTML = tstr;
		};
		
		return tElem.innerHTML+tTail;
	})();
};stp.cutWidth=stpWidthCutWord;

/**
 * 열려있는 브라우저 창을 찾습니다.
 * @name stp.findWindow
 * @version 1.2.0
 * @function
 * @param {String/require} name : 찾을 창의 이름
 * @return Window
 */
function stpFindWindow(name){
	var s = window.open('',name);
	if(s.document.body.childNodes.length==0){
		s.close();
		return null;
	};
	return s;
};stp.findWindow=stpFindWindow;

/**
 * 플래쉬오브젝트를 script로 rewrite시키는 함수입니다.
 * @name stp.setFlash
 * @version 1.3.0
 * @function
 * @description : 이올라스 패치 이전의 브라우져에서 오브젝트의 외곽라인이 나오는 현상을 방지하기 위해 만들어진 함수입니다.
 * @param {String} src : 플래쉬의 경로를 작성합니다. 입니다.
 * @param {Hash} hash : 플래쉬 표현에 따른 옵션을 hash형식으로 지정합니다.
 * <table border="1" cellpadding="3" cellspacing="0" width="100%" class="desc">
		<thead>
			<tr>
				<th>키(key)</th>
				<th>필수</th>
				<th>값(value)</th>
				<th>기본값</th>
				<th>설명</th>
			</tr>
		</thead>
		<tbody>
			<tr>
				<td>url</td>
				<td class="center">필수</td>
				<td class="center">string</td>
				<td class="center">null</td>
				<td>플래쉬 경로</td>
			</tr>
			<tr>
				<td>width</td>
				<td class="center">미필수</td>
				<td class="center">Number<br />(단 string형식으로 뒤에 "px" 붙여야함)</td>
				<td class="center">"100%"</td>
				<td>플래쉬의 가로사이즈</td>
			</tr>
			<tr>
				<td>height</td>
				<td class="center">미필수</td>
				<td class="center">Number<br />(단 string형식으로 뒤에 "px" 붙여야함)</td>
				<td class="center">"100%"</td>
				<td>플래쉬의 세로사이즈</td>
			</tr>
			<tr>
				<td>id</td>
				<td class="center">미필수</td>
				<td class="center">string</td>
				<td class="center">플래쉬의 파일명으로 적용</td>
				<td>플래쉬가 선언되는 object 엘리먼트의 아이디</td>
			</tr>
			<tr>
				<td>wmode</td>
				<td class="center">미필수</td>
				<td class="center">string</td>
				<td class="center">"window"</td>
				<td>
					<dl class="dlReview">
						<dt>"window"</dt>
						<dd>브라우져 기본 wmode , HTML위에 flash가 위치하게 됨 , flash위에 HTML 레이어가 올라갈수 없음.</dd>
						<dt>"opaque"</dt>
						<dd>높은 퍼포먼스를 요구하며 가장 부드러운 애니메이션을 보임</dd>
						<dd>Movie 아래의 모든 것을 가리게 된다. 위에 레이어를 올릴 수 있다.</dd>
						<dd>FireFox 한글 입력에 문제가 있고 키보드 입력에 문제 발생 가능성이 있다</dd>
						<dt>"transparent"</dt>
						<dd>Flash를 투명하게 하여 Flash 아래의 html 요소가 화면상에 나오게 할때 사용한다.</dd>
						<dd>애니메이션 속도가 저하 될수 있음.</dd>
						<dd>Movie를 투명하게 하여 뒤의 html 부분을 보여준다. </dd>
						<dt>"direct"</dt>
						<dd>FlashPlayer10부터 적용되며 알려진 문제는 없음.</dd>
						<dd>Browser FlashPlayer DC와 Stand Alone FlashPlayer DC의 차이가 없게 Stand Alone의 Performance를 그대로 Browser에서 확인</dd>
						<dt>"gpu"</dt>
						<dd> Hardware가속 지원.</dd>
						<dd>Graphic Card GPU를 활용 하드웨어 가속, 아직 기능이 미비하며 지원 Graphic Card에서만 Performance 향상</dd>
					</dl>
				</td>
			</tr>
			<tr>
				<td>asa</td>
				<td class="center">미필수</td>
				<td class="center">boolean</td>
				<td class="center">"true"</td>
				<td>플래쉬의 allowScriptAccess(스크립트 사용 가능여부)를 설정합니다.</td>
			</tr>
			<tr>
				<td>fv</td>
				<td class="center">미필수</td>
				<td class="center">string</td>
				<td class="center">null</td>
				<td>플래쉬 안에 flashVars를 설정합니다.</td>
			</tr>
		</tbody>
	</table>
 * @return object Element
 * @author <a href="mailto:dstyle@reflexion.co.kr">Dstyle</a>
 */
function stpSetFlash(src,hash){
	//초기값 설정
	var hash = hash;
	var src = src;
	
	//옵션들 셋팅
	var oId = (hash["id"])?hash["id"]:src.match(/[^/]+$/)[0].replace("/","").replace(/\.swf(\?)?.*/g,"");
	var oWid = (hash["width"])?hash["width"]:"100%";
	var oHei = (hash["height"])?hash["height"]:"100%";
	var oWm = (hash["wmode"])?hash["wmode"]:"window";
	var oAs = (hash["asa"])?hash["asa"]:"always";
	var oFv = (hash["fv"])?hash["fv"]:"";
	var oCase = stp.$((hash["case"])?hash["case"]:null);

	//뿌려질 구문 만들기
	var oTxt= "<object classid='clsid:d27cdb6e-ae6d-11cf-96b8-444553540000' type='application/x-shockwave-flash' "+
				"codeBase='http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=10,0,0,0' width='"+oWid+"' height='"+oHei+"' id='"+oId+"' autoplay='false'>"+
				"<param name='movie' value='"+src+"'>"+
				"<param name='quality' value='high'>"+
				"<param name='wmode' value='"+oWm+"'>"+
				"<param name='flashVars' value='"+oFv+"'>"+
				"<param name='allowScriptAccess' value='"+oAs+"'>"+
				"<param name='autoplay' value='false' />"+
				"<param name='autostart' value='0' />"+
				"<embed src='"+src+"' type='application/x-shockwave-flash' width='"+oWid+"' height='"+oHei+"' id='"+oId+"' pluginspage='http://www.macromedia.com/go/getflashplayer' quality='high'"+
				"flashVars='"+oFv+"' allowScriptAccess='"+oAs+"' wmode='"+oWm+"' />"+
				"</object>";
	if(oCase){oCase.innerHTML=oTxt;}else{document.write(oTxt);}
	
	
	//뿌려진후 부터 발생하는 메소드들
	var oLoad = (hash["load"])?hash["load"]:null;
	var oWheelLock = (stp.$B((hash["wheelLock"]))?stp.$B(hash["wheelLock"]):false);
	var sObj = stp.$(oId);
	
	if(stp.P){
		sObj = (sObj.down("embed"))?sObj.down("embed"):sObj;
	}else{
		sObj = ($(sObj).find("embed:eq(0)")[0])?$(sObj).find("embed:eq(0)")[0]:sObj;
	};
	
	//플래쉬가 로드되면 실행
	if(oLoad){
		setTimeout(function(){oLoad.call(null,sObj)});
	};
	
	var wheelTargetObj=sObj;
	if(stp.browser()[0]=="ff"){
		wheelTargetObj=(stp.J)?$(sObj).parent()[0]:sObj;
	}else if(stp.browser()[0]=="sf" || stp.browser()[0]=="cr"){
		wheelTargetObj=(stp.J)?$(sObj).parent()[0]:sObj.parentNode;
	}
	if(oWheelLock){
		if(stp.P){
			Event.observe(document.body,"mousewheel",function(event){
				if(Event.element(event) == wheelTargetObj){
					if (event.stopPropagation) { event.stopPropagation() };
				    if (event.preventDefault) { event.preventDefault() };
					event.cancelBubble = true;
				    event.cancel = true;
				    event.returnValue = false;
				}else{
					return false;
				};
			});
		}else{
			$(document.body).mousewheel(function(e){
				if(e.target==wheelTargetObj){
					return false;
				};
			});
		};
	};
	
};stp.setFlash=stpSetFlash;

/**
 * 한글인지 확인합니다.
 * @name stp.isKor
 * @version 1.2.0
 * @function
 * @param {String/require} str : 한글인지 확인할 String Object
 * @param {Boolean/option} blank : 공백허용
 * @return Boolean
 */
function stpIsKor(str,b){
	var s = (!stp.$B(b)) ? "" : "\\s";
	return eval("(/^[가-힣"+s+"]+$/).test(str)");
};stp.isKor=stpIsKor;

/**
 * 숫자인지 확인합니다.
 * @name stp.isNum
 * @version 1.2.0
 * @function
 * @param {String/require} str : 숫자인지 확인할 String Object
 * @param {Boolean/option} blank : 공백허용
 * @return Boolean
 */
function stpIsNum(str,b){
	var s = (!stp.$B(b)) ? "" : "\\s";
	return eval("(/^[0-9"+s+"]+$/).test(str)");
};stp.isNum=stpIsNum;

/**
 * 영어인지 확인합니다.
 * @name stp.isEng
 * @version 1.2.0
 * @function
 * @param {String/require} str : 영어인지 확인할 String Object
 * @param {Boolean/option} blank : 공백허용
 * @return Boolean
 * @author <a href="mailto:dstyle@reflexion.co.kr">Dstyle</a>
 */
function stpIsEng(str,b){
	var s = (!stp.$B(b)) ? "" : "\\s";
	return eval("(/^[a-zA-Z"+s+"]+$/).test(str)");
};stp.isEng=stpIsEng;

/**
 * 숫자와영어만 허용합니다.
 * @name stp.isEngNum
 * @version 1.2.0
 * @function
 * @param {String/require} str : 숫자와 영어인지 확인할 String Object
 * @param {Boolean/option} blank : 공백허용
 * @return Boolean
 */
function stpIsEngNum(str,b){
	var s = (!stp.$B(b)) ? "" : "\\s";
	return eval("(/^[\-\_0-9a-zA-Z"+s+"]+$/).test(str)");
};stp.isEngNum=stp.isNumEng=stpIsEngNum;

/**
 * 지정된 글자수 범위를 확인합니다.
 * @name stp.isLength
 * @version 1.2.0
 * @function
 * @param {String/require} str : 글자범위를 확인할 String Object
 * @param {Number/require} min : 최소값을 지정합니다.
 * @param {Number/option} max : 최대값을 지정합니다.
 * @return Boolean
 */
function stpIsLength(str,min,max){
	if(min<=str.length){
		var max = (max)?max:str.length;
		return (str.length<=max);
	};return false;
};stp.isLength=stpIsLength;

/**
 * 한글이름형식을 확인합니다.
 * @name stp.isName
 * @version 1.2.0
 * @function
 * @param {String/require} str : 이름 String Object
 * @return Boolean
 */
function stpIsName(str){
	return (/^[가-힣]{2,}$/).test(str);
};stp.isName=stpIsName;

/**
 * 전화번호형식을 체크합니다.
 * @name stp.isPhone
 * @version 1.2.0
 * @function
 * @param {Number/require} num0 : 전화번호의 국번 Number Object
 * @param {Number/require} num1 : 전화번호의 중간번호 Number Object
 * @param {Number/require} num2 : 전화번호의 끝번호 Number Object
 * @return Boolean
 * @author <a href="mailto:dstyle@reflexion.co.kr">Dstyle</a>
 */
function stpIsPhone(num0,num1,num2){
	var chk0 = (/^0[2-6]{1}[1-5]?$/).test(num0); if(num0=="0707" || num0=="0708"){chk0=true};
	var chk1 = (/^[0-9]{3,4}$/).test(num1);
	var chk2 = (/^[0-9]{4}$/).test(num2);
	if(chk0 && chk1 && chk2){ return true; };
	return false;
};stp.isPhone=stpIsPhone;

/**
 * 핸드폰번호형식을 체크합니다.
 * @name stp.isMobile
 * @version 1.2.0
 * @function
 * @param {Number/require} num0 : 핸드폰번호의 앞자리 Number Object
 * @param {Number/require} num1 : 핸드폰번호의 중간번호 Number Object
 * @param {Number/require} num2 : 핸드폰번호의 끝번호 Number Object
 * @return Boolean
 * @author <a href="mailto:dstyle@reflexion.co.kr">Dstyle</a>
 */
function stpIsMobile(num0,num1,num2){
	var chk0 = (/^01[01256789]{1}$/).test(num0);
	var chk1 = (/^[0-9]{3,4}$/).test(num1);
	var chk2 = (/^[0-9]{4}$/).test(num2);
	if(chk0 && chk1 && chk2){ return true; };
	return false;
};stp.isMobile=stpIsMobile;

/**
 * 이메일주소형식을 체크합니다.
 * @name stp.isEmail
 * @version 1.2.0
 * @function
 * @description : 이메일형식은 MSDN의 이메일형식을 기반으로 합니다.
 * @param {String/require} str0 : 이메일의 ID
 * @param {String/require} str1 : 이메일의 도메인
 * @return Boolean
 */
function stpIsEmail(str0,str1){
	var txt = str0+""+str1;
	var chk0 = (/^[_a-zA-Z0-9-]+(\.[_a-zA-Z0-9-]+)*$/).test(str0);
	var chk1 = (/^[a-zA-Z0-9-]+(\.[a-zA-Z0-9-]+)*$/).test(str1);
	if(chk0 && chk1 && txt.length<61){ return true; };
	return false;
};stp.isEmail=stpIsEmail;

/**
 * 체크박스 체크여부를 확인하고 value값을 리턴합니다.
 * @name stp.isCheck
 * @version 1.3.0
 * @function
 * @description : 체크된 값이 있는 경우 checkbox의 value값을 기준으로 가져옵니다.
 * @description : 물론 만일 checkbox에 value값이 없는 경우에는 true로 리턴됩니다.
 * @param {String/require} str : 확인할 체크박스의 ID
 * @return Boolean or String
 */
function stpIsCheckBox(str){
	return (stp.$(str).checked)?((stp.$F(str)=="" || stp.$F(str)=="on")?true:stp.$F(str)):false;
};stp.isCheck=stpIsCheckBox;

/**
 * 라디오버튼의 체크여부를 확인하고 선택된 라디오버튼의 value값을 리턴합니다.
 * @name stp.isRadio
 * @version 1.3.0
 * @function
 * @description : 라디오버튼들 중 체크된것이 없는 경우엔 false를 리턴하며
 * @description : 라디오버튼들 중 체크되어있다면 체크되어있는 라디오버튼의 value값을 리턴합니다.
 * @param {String/require} name : 확인할 라디오버튼의 name값
 * @return String or false
 */
function stpIsRadio(name){
	var argItem = (stp.P)?$A(document.getElementsByName(name)):$(document.getElementsByName(name));
	var onItem;
	argItem.each(function(p,j){
		onItem=(stp.P)?((p.checked)?p:onItem):((j.checked)?j:onItem);
	});
	return (onItem)?onItem.value:false;
};stp.isRadio=stpIsRadio;

/**
 * 카드번호형식을 체크합니다.
 * @name stp.isCard
 * @version 1.3.0
 * @function
 * @param {Number/require} cn0 : 카드번호의 첫번째자리
 * @param {Number/require} cn1 : 카드번호의 두번째자리
 * @param {Number/require} cn2 : 카드번호의 세번째자리
 * @param {Number/require} cn3 : 카드번호의 네번째자리
 * @return Boolean
 */
function stpIsCard(cn0,cn1,cn2,cn3){
	return (/^[0-9]{4}\,[0-9]{4}\,[0-9]{4}\,[0-9]{4}$/).test(stp.$F(cn0)+","+stp.$F(cn1)+","+stp.$F(cn2)+","+stp.$F(cn3));
};stp.isCard=stpIsCard;

/**
 * 아이디형식을 지정하고 체크합니다.
 * @name stp.isId
 * @version 1.2.0
 * @function
 * @param {String/require} str : 아이디
 * @param {Number/option} min : 아이디 글자수의 최소값 : 기본 1글자
 * @param {Number/option} max : 아이디 글자수의 최대값 : 기본 100글자
 * @param {Boolean/option} eng : 아이디가 영문으로 시작하는가에 대한 boolean : 기본 false
 * @return Boolean
 */
function stpIsId(str,min,max,eng){
	var min = (!min)?1:min;
	var max = (!max)?100:max;
	var reg = (stp.$B(eng)) ? "[a-zA-Z]{1}[0-9a-zA-Z_-]{"+(min-1)+","+(max-1)+"}" : "[0-9a-zA-Z_-]{"+min+","+max+"}";
	return eval("(/^"+reg+"$/).test(str)");
};stp.isId=stpIsId;

/**
 * 비밀번호를 체크합니다.
 * @name stp.isPw
 * @version 1.2.0
 * @function
 * @param {String/require} str : 비밀번호 String Object
 * @param {Number/option} min : 비밀번호 글자수의 최소값 : 기본 1 글자
 * @param {Number/option} max : 비밀번호 글자수의 최대값 : 기본 100글자
 * @param {Boolean/option} wordType : 비밀번호의 전제조건을 설정합니다. (true: 영문,숫자,특수문자"-","_" 만 사용가능 , false: 모든문자허용(기본값))
 * @return Boolean
 */
function stpIsPw(str,min,max,wordType){
	return (stp.$B(wordType))?stpIsId(str,min,max):stpIsLength(str,min,max);
};stp.isPw=stp.isPassword=stpIsPw;

/**
 * 주민등록번호를 체크합니다.
 * @name stp.isJumin
 * @version 1.3.0
 * @function
 * @description : XXXXXX-XXXXXXX(6-7) 
 * @param {Number/require} num0 : 주민등록번호의 앞 6자리
 * @param {Number/require} num1 : 주민등록번호의 뒤 7자리
 * @return Boolean
 */
function stpIsJumin(num0,num1){
	if((/^[0-9]{2}[01]{1}[0-9]{1}[0123]{1}[0-9]{1}$/).test(num0) && (/^[1234]{1}[0-9]{6}$/).test(num1)){
		var juArr = stp.$A(num0+""+num1);
		var jNum = 0;
		var jS = [2, 3, 4, 5, 6, 7, 8, 9, 2, 3, 4, 5];
		var juLast = juArr.pop();
		$(juArr).each(function(p,j){
			jNum += (stp.P)?p*jS[j]:j*jS[p];//주민등록번호 체크구문
		});
		//주민등록번호 맨 마지막과 주민등록번호 번호알고리즘 비교
		return (juLast==((11-(jNum%11))%10));
	};return false;
};stp.isJumin=stpIsJumin;

/**
 * 외국인등록번호를 체크합니다.
 * @description : XXXXXX-XXXXXXX(6-7)
 * @name stp.isForeign
 * @version 1.3.0
 * @function
 * @param {Number/require} num0 : 외국인등록번호의 앞 6자리
 * @param {Number/require} num1 : 외국인등록번호의 뒤 7자리
 * @return Boolean
 */
function stpIsForeign(num0,num1){
	if((/^[0-9]{2}[01]{1}[0-9]{1}[0123]{1}[0-9]{1}$/).test(num0) && (/^[5678]{1}[0-9]{1}[02468]{1}[0-9]{2}[6789]{1}[0-9]{1}$/).test(num1)){
		var foArr =stp.$A(num0+""+num1);
		var fNum = 0;
		var jS = [2, 3, 4, 5, 6, 7, 8, 9, 2, 3, 4, 5];
		var foLast=foArr.pop();
		$(foArr).each(function(p,i){
			fNum += (stp.P)?p*jS[j]:j*jS[p];// 체크구문
		});
		return (foLast==((11-(fNum%11))%10));
	};return false;
};stp.isForeign=stpIsForeign;

/**
 * 사업자번호를 체크합니다.
 * @description : XXX-XX-XXXXX(3-2-5)
 * @name stp.isCompany
 * @version 1.3.0
 * @function
 * @param {Number/require} comp0 : 사업자번호의 앞 3자리
 * @param {Number/require} comp1 : 사업자번호의 중간 2자리
 * @param {Number/require} comp2 : 사업자번호의 뒷 5자리
 * @return Boolean
 */
function stpIsCompany(comp0,comp1,comp2){
	if((/^[0-9]{3}$/).test(comp0) && (/^[0-9]{2}$/).test(comp1) && (/^[0-9]{5}$/).test(comp2)){
		var compNum = stp.$A(comp0+""+comp1+""+comp2); //일괄로 저장시키고 배열화
		var vaildNum = new Array(1,3,7,1,3,7,1,3,5); //사업자 번호용 키 배열
		var tempNum = 0; //모두 키와 사업자번호가 조합되어서 저장되는 변수
		var lastNum = compNum.last(); //마지막값 (체크번호)
		compNum.pop(); //마지막 번호는 빼버린다.
		$(compNum).each(function(p,j){
			tempNum += (stp.P)?p*vaildNum[j]:j*vaildNum[p];// 체크구문
		});
		var plusNum = parseInt((compNum.last() * 5)/10); //플러스값인 9번째수 *5 나누기 10
		return (lastNum==(10-((tempNum+plusNum)%10)))// 각번호*키값 된것에 플러스 값을 더하고, 더한값을 10으로 나누고 나머지를 10에서 뺀다. => 그게 마지막 값이 되어야 한다.
	};return false;
};stp.isCompany=stpIsCompany;

/**
 * 법인번호를 체크합니다.
 * @description : XXXXXX-XXXXXXX(6-7)
 * @name stp.isCorp
 * @version 1.3.0
 * @function
 * @param {Number/require} num0 : 법인번호의 앞 6자리
 * @param {Number/require} num1 : 법인번호의 앞 7자리
 * @return Boolean
 */
function stpIsCorp(num0,num1){
	if((/^[0-9]{6}$/).test(num0) && (/^[0-9]{7}$/).test(num1)){
		var corpArr = stp.$A(num0+""+num1);
		var cNum = 0;
		var cS = new Array(1,2,1,2,1,2,1,2,1,2,1,2);
		var lNum = corpArr.pop();
		$(corpArr).each(function(p,j){
			cNum +=(stp.P)?p*cS[j]:j*cS[p];// 체크구문
		});
		return (lNum==(10-(cNum%10)));
	};return false;
};stp.isCorp=stpIsCorp;
